@realtimexsco/live-chat 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/store/slices/auth.slice.ts","../src/constants/socket.events.constants.ts","../src/services/socket.service.ts","../src/constants/api.constants.ts","../src/store/useSocketStore.ts","../src/services/api.service.ts","../src/store/helpers/store.helpers.ts","../src/store/forwardPending.store.ts","../src/store/handlers/message.handlers.ts","../src/store/handlers/group.handlers.ts","../src/store/handlers/group.reaction.handlers.ts","../src/store/handlers/interaction.handlers.ts","../src/store/actions/group.actions.ts","../src/store/slices/socket.slice.ts","../src/store/useStore.ts","../src/chat/ChatContext.tsx","../src/lib/utils.ts","../src/ui/tooltip.tsx","../src/hooks/useChatSync.ts","../src/store/useAuthStore.ts","../src/hooks/useChatController.ts","../src/types/layout.types.ts","../src/ui/avatar.tsx","../src/ui/input.tsx","../src/ui/button.tsx","../src/ui/dialog.tsx","../src/chat/LoggedUserDetails.tsx","../src/ui/badge.tsx","../src/ui/scroll-area.tsx","../src/chat/ChannelList.tsx","../src/chat/header/HeaderLeftSide.tsx","../src/ui/dropdown-menu.tsx","../src/chat/header/HeaderRightSide.tsx","../src/chat/header/HeaderSearchOverlay.tsx","../src/chat/ChannelHeader.tsx","../src/ui/sheet.tsx","../src/chat/header/PinnedMessagesDrawer.tsx","../src/chat/header/SavedMessageCard.tsx","../src/chat/header/StarredMessagesDrawer.tsx","../src/chat/header/AttachmentsDrawer.tsx","../src/ui/textarea.tsx","../src/hooks/useGroupInfo.ts","../src/chat/header/ChannelDetailsDrawer.tsx","../src/ui/switch.tsx","../src/chat/header/PermissionDrawer.tsx","../src/chat/header/AdminsDrawer.tsx","../src/chat/header/MembersDrawer.tsx","../src/ui/alert-dialog.tsx","../src/ui/alert.tsx","../src/chat/header/ChatActionModal.tsx","../src/hooks/useDebounce.ts","../src/chat/MessageItem.tsx","../src/chat/message/MessageStatus.tsx","../src/chat/message/MessageAttachments.tsx","../src/chat/message/MessageReactions.tsx","../src/ui/popover.tsx","../src/chat/message/MessageToolbar.tsx","../src/chat/message/MessageReplySnippet.tsx","../src/chat/ActiveChannelMessages.tsx","../src/chat/ChannelMessageBox.tsx","../src/chat/ForwardModal.tsx","../src/chat/Channel.tsx","../src/chat/ChatLayout.tsx","../src/chat/ChatMain.tsx","../src/index.ts"],"names":["socket_service_default","io","useStore","setChatClientId","setChatAccessToken","setChatBaseURL","axios","useSocketStore","conversationId","messageId","isStarred","state","create","persist","twMerge","clsx","React","TooltipPrimitive","useState","useEffect","createContext","useContext","error","rateLimitResetAt","emitGroupMessageSend","React3","AvatarPrimitive","React4","cva","Slot","React5","DialogPrimitive","React6","XIcon","useRef","useMemo","fetchConversations","user","Search","X","UserPlus","MessageCircle","Users","Camera","Check","ArrowRight","React8","React9","ScrollAreaPrimitive","Loader2","ArrowLeft","Pin","Star","DropdownMenuPrimitive","React12","Phone","Video","MoreVertical","Info","UserKey","ShieldUser","Paperclip","MessageSquareX","Trash2","LogOut","Ban","useCallback","SheetPrimitive","React15","PinOff","StarOff","Download","React20","Save","Calendar","Mail","User","React22","SwitchPrimitive","UserMinus","Plus","ShieldCheck","AlertDialogPrimitive","React26","React27","AlertCircle","fetchPinnedMessages","fetchStarredMessages","Clock","CheckCheck","Music","Film","FileText","FileSpreadsheet","FileIcon","PopoverPrimitive","React33","CornerUpLeft","Forward","Smile","EmojiPicker","Pencil","fetchMessages","useLayoutEffect","MessageCircleMore","History","Theme","Send","fetchConversationInfo"],"mappings":"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","file":"index.cjs","sourcesContent":["import { StateCreator } from 'zustand';\nimport { AppStoreState, AuthState } from '../types/store.types';\n\nexport const createAuthSlice: StateCreator<AppStoreState, [], [], AuthState> = (set) => ({\n loggedUserDetails: null,\n isAuthenticate: false,\n accessToken: null,\n tenantId: null,\n isTenant: true,\n isSessionReady: false,\n\n setSession: (payload) => set((state) => ({\n accessToken: payload.accessToken,\n loggedUserDetails: payload.user || state.loggedUserDetails,\n tenantId: payload.tenantId || state.tenantId,\n isAuthenticate: true,\n })),\n setSessionReady: (ready) => set({ isSessionReady: ready }),\n clearSession: () => set({\n accessToken: null,\n loggedUserDetails: null,\n isAuthenticate: false,\n isSessionReady: false,\n }),\n});\n","export const SOCKET_EVENTS = {\n // Error Events\n ERROR: 'app_error',\n\n // Connection Events\n CONNECTION: 'connection',\n DISCONNECTION: 'disconnect',\n\n // User Events\n USER_ONLINE: 'user_online',\n USER_OFFLINE: 'user_offline',\n\n // Online Users Events\n GET_ONLINE_USERS: 'get_online_users',\n ONLINE_USERS_LIST: 'online_users_list',\n\n // Conversation Events\n CONVERSATION_UPDATE: 'conversation_update',\n\n // DM Events\n DM_SEND: 'dm_send',\n DM_RECEIVE: 'dm_receive',\n\n DM_TYPING_START: 'dm_typing_start',\n DM_TYPING_STOP: 'dm_typing_stop',\n\n DM_EDIT: 'dm_edit',\n DM_EDIT_RECEIVE: 'dm_edit_receive',\n\n DM_REACTION_ADD: 'dm_reaction_add',\n DM_REACTION_ADD_RECEIVE: 'dm_reaction_add_receive',\n\n DM_REACTION_REMOVE: 'dm_reaction_remove',\n DM_REACTION_REMOVE_RECEIVE: 'dm_reaction_remove_receive',\n\n DM_DELETE: 'dm_delete',\n DM_DELETE_ME: 'dm_delete_me',\n DM_DELETE_EVERYONE: 'dm_delete_everyone',\n\n DM_MARK_READ: 'dm_mark_read',\n DM_STATUS_UPDATE: 'dm_status_update',\n\n DM_PIN: 'dm_pin',\n DM_UNPIN: 'dm_unpin',\n DM_PIN_UPDATE: 'dm_pin_update',\n\n DM_STAR: 'dm_star',\n DM_UNSTAR: 'dm_unstar',\n DM_STAR_UPDATE: 'dm_star_update',\n\n DM_FORWARD: 'dm_forward',\n DM_FORWARD_RECEIVE: 'dm_forward_receive',\n CONVERSATION_STARRED_PINNED_COUNT_UPDATE:\n 'conversation_starred_pinned_count_update',\n\n DM_CLEAR_CHAT: 'dm_clear_chat',\n DM_CLEAR_CHAT_SUCCESS: 'dm_clear_chat_success',\n\n DM_DELETE_CONVERSATION: 'dm_delete_conversation',\n DM_DELETE_CONVERSATION_SUCCESS: 'dm_delete_conversation_success',\n\n\n // Group Events\n GROUP_JOIN: 'group_join',\n\n GROUP_MESSAGE_SEND: 'group_message_send',\n GROUP_MESSAGE_RECEIVE: 'group_message_receive',\n\n GROUP_MESSAGE_DELIVERED: 'group_message_delivered',\n GROUP_MESSAGE_READ: 'group_message_read',\n\n GROUP_STATUS_UPDATE: 'group_status_update',\n\n GROUP_TYPING_START: 'group_typing_start',\n GROUP_TYPING_STOP: 'group_typing_stop',\n\n GROUP_EDIT: 'group_edit',\n GROUP_EDIT_RECEIVE: 'group_edit_receive',\n\n GROUP_REACTION_ADD: 'group_reaction_add',\n GROUP_REACTION_ADD_RECEIVE: 'group_reaction_add_receive',\n\n GROUP_REACTION_REMOVE: 'group_reaction_remove',\n GROUP_REACTION_REMOVE_RECEIVE: 'group_reaction_remove_receive',\n\n GROUP_DELETE: 'group_delete',\n GROUP_DELETE_ME: 'group_delete_me',\n GROUP_DELETE_EVERYONE: 'group_delete_everyone',\n\n GROUP_PIN: 'group_pin',\n GROUP_UNPIN: 'group_unpin',\n GROUP_PIN_UPDATE: 'group_pin_update',\n\n GROUP_STAR: 'group_star',\n GROUP_UNSTAR: 'group_unstar',\n GROUP_STAR_UPDATE: 'group_star_update',\n\n GROUP_FORWARD: 'group_forward',\n GROUP_FORWARD_RECEIVE: 'group_forward_receive',\n\n GROUP_CLEAR_CHAT: 'group_clear_chat',\n GROUP_CLEAR_CHAT_SUCCESS: 'group_clear_chat_success',\n\n GROUP_DELETE_CONVERSATION: 'group_delete_conversation',\n GROUP_DELETE_CONVERSATION_SUCCESS: 'group_delete_conversation_success',\n\n\n GROUP_LEAVE: 'group_leave',\n GROUP_LEAVE_RECEIVE: 'group_leave_receive',\n};\n\n","import { io, Socket } from \"socket.io-client\";\nimport { SOCKET_EVENTS } from \"../constants/socket.events.constants\";\nimport useStore from \"../store/useStore\";\n\nexport interface ISocketConfig {\n url: string;\n options: any;\n}\n\nclass SocketService {\n private socket: Socket | null = null;\n private currentConfig: ISocketConfig | null = null;\n private isConnecting: boolean = false;\n\n connect(config: ISocketConfig) {\n if (\n this.socket?.connected &&\n this.currentConfig &&\n this.currentConfig.url === config.url &&\n JSON.stringify(this.currentConfig.options.auth) === JSON.stringify(config.options.auth) &&\n JSON.stringify(this.currentConfig.options.query) === JSON.stringify(config.options.query)\n ) {\n return;\n }\n\n if (this.isConnecting && this.currentConfig?.url === config.url) {\n return;\n }\n\n if (this.socket) {\n this.disconnect();\n }\n\n this.currentConfig = config;\n this.isConnecting = true;\n const { setConnecting, setConnected, setDisconnected, setError } = useStore.getState();\n\n setConnecting();\n\n this.socket = io(config.url, config.options);\n\n this.socket.on(\"connect\", () => {\n this.isConnecting = false;\n setConnected({ socketId: this.socket?.id || \"\" });\n this.emitGetOnlineUsers();\n });\n\n this.socket.on(\"disconnect\", () => {\n this.isConnecting = false;\n setDisconnected();\n });\n\n this.socket.on(\"connect_error\", (error: any) => {\n this.isConnecting = false;\n setError(error.message);\n });\n\n this.socket.on(SOCKET_EVENTS.ERROR, (payload) => {\n const message = typeof payload === \"string\" ? payload : payload?.message ?? \"app_error\";\n useStore.getState().handleAppError(message);\n });\n\n this.socket.on(SOCKET_EVENTS.DM_RECEIVE, (payload) => {\n useStore.getState().receivedDM(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_MESSAGE_RECEIVE, (payload) => {\n useStore.getState().receivedGroupMessage(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.CONVERSATION_UPDATE, (payload) => {\n if (!payload) return;\n useStore.getState().updateConversation(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.DM_EDIT_RECEIVE, (payload) => {\n useStore.getState().receivedEditDM(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.DM_DELETE_ME, (payload) => {\n useStore.getState().receivedDeleteForMe(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.DM_DELETE_EVERYONE, (payload) => {\n useStore.getState().receivedDeleteForEveryone(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.DM_CLEAR_CHAT_SUCCESS, (payload) => {\n useStore.getState().receivedDmClearChat(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_CLEAR_CHAT_SUCCESS, (payload) => {\n useStore.getState().receivedGroupClearChat(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.DM_DELETE_CONVERSATION_SUCCESS, (payload) => {\n useStore.getState().receivedDmDeleteConversation(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_DELETE_CONVERSATION_SUCCESS, (payload) => {\n useStore.getState().receivedGroupDeleteConversation(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.DM_REACTION_ADD_RECEIVE, (payload) => {\n useStore.getState().receivedReactionAdd(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.DM_REACTION_REMOVE_RECEIVE, (payload) => {\n useStore.getState().receivedReactionRemove(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.DM_PIN_UPDATE, (payload) => {\n useStore.getState().receivedPinUpdate(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.DM_STAR_UPDATE, (payload) => {\n useStore.getState().receivedStarUpdate(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.DM_STATUS_UPDATE, (payload) => {\n useStore.getState().receivedStatusUpdate(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.DM_MARK_READ, (payload) => {\n useStore.getState().receivedDMMarkRead(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_MESSAGE_READ, (payload) => {\n useStore.getState().receivedGroupMarkRead(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.DM_FORWARD_RECEIVE, (payload) => {\n useStore.getState().receivedForward(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.DM_TYPING_START, (payload) => {\n useStore.getState().setTypingStart(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.DM_TYPING_STOP, (payload) => {\n useStore.getState().setTypingStop(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.ONLINE_USERS_LIST, (payload) => {\n const users = payload?.onlineUsers || [];\n useStore.getState().setOnlineUsers(users);\n });\n\n this.socket.on(SOCKET_EVENTS.USER_ONLINE, () => {\n this.emitGetOnlineUsers();\n });\n\n this.socket.on(SOCKET_EVENTS.USER_OFFLINE, () => {\n this.emitGetOnlineUsers();\n });\n\n this.socket.on(SOCKET_EVENTS.CONVERSATION_STARRED_PINNED_COUNT_UPDATE, (payload) => {\n useStore.getState().receivedCountUpdate(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_EDIT_RECEIVE, (payload) => {\n useStore.getState().receivedEditDM(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_STATUS_UPDATE, (payload) => {\n useStore.getState().receivedGroupStatusUpdate(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_MESSAGE_DELIVERED, (payload) => {\n useStore.getState().receivedGroupStatusUpdate({\n ...payload,\n status: payload?.status || 'delivered',\n });\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_REACTION_ADD_RECEIVE, (payload) => {\n useStore.getState().receivedGroupReactionAdd(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_TYPING_START, (payload) => {\n useStore.getState().setTypingStart(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_TYPING_STOP, (payload) => {\n useStore.getState().setTypingStop(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_REACTION_REMOVE_RECEIVE, (payload) => {\n useStore.getState().receivedGroupReactionRemove(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_DELETE_ME, (payload) => {\n useStore.getState().receivedDeleteForMe(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_DELETE_EVERYONE, (payload) => {\n useStore.getState().receivedDeleteForEveryone(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_PIN_UPDATE, (payload) => {\n useStore.getState().receivedPinUpdate(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_STAR_UPDATE, (payload) => {\n useStore.getState().receivedStarUpdate(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_FORWARD_RECEIVE, (payload) => {\n useStore.getState().receivedForward(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_LEAVE_RECEIVE, (payload) => {\n useStore.getState().receivedGroupLeave(payload);\n });\n }\n\n disconnect() {\n if (this.socket) {\n this.socket.removeAllListeners();\n this.socket.disconnect();\n this.socket = null;\n this.currentConfig = null;\n this.isConnecting = false;\n }\n }\n\n emit(event: string, payload?: any) {\n if (this.socket) {\n this.socket.emit(event, payload);\n } else {\n console.error(`SocketService: Socket is not initialized. Cannot emit ${event}`);\n }\n }\n\n getSocket(): Socket | null {\n return this.socket;\n }\n\n emitDmSend(payload: any) {\n this.emit(SOCKET_EVENTS.DM_SEND, payload);\n }\n\n emitDmEdit(payload: { content: string; messageId: string; sender: string; receiver: string }) {\n this.emit(SOCKET_EVENTS.DM_EDIT, payload);\n }\n\n emitDmDelete(payload: { messageId: string; sender: string; receiver: string; deleteType: \"me\" | \"everyone\" }) {\n this.emit(SOCKET_EVENTS.DM_DELETE, payload);\n }\n\n emitDmClearChat(payload: { conversationId: string; sender: string }) {\n this.emit(SOCKET_EVENTS.DM_CLEAR_CHAT, payload);\n }\n\n emitGroupClearChat(payload: { conversationId: string; sender: string }) {\n this.emit(SOCKET_EVENTS.GROUP_CLEAR_CHAT, payload);\n }\n\n emitDmDeleteConversation(payload: { conversationId: string; sender: string; receiver: string }) {\n this.emit(SOCKET_EVENTS.DM_DELETE_CONVERSATION, payload);\n }\n\n emitGroupDeleteConversation(payload: { conversationId: string; sender: string }) {\n this.emit(SOCKET_EVENTS.GROUP_DELETE_CONVERSATION, payload);\n }\n\n emitDmReactionAdd(payload: { messageId: string; sender: string; receiver: string; reaction: string }) {\n this.emit(SOCKET_EVENTS.DM_REACTION_ADD, payload);\n }\n\n emitDmReactionRemove(payload: { messageId: string; sender: string; receiver: string; reaction: string }) {\n this.emit(SOCKET_EVENTS.DM_REACTION_REMOVE, payload);\n }\n\n emitTypingStart(payload: any) {\n this.emit(SOCKET_EVENTS.DM_TYPING_START, payload);\n }\n\n emitTypingStop(payload: any) {\n this.emit(SOCKET_EVENTS.DM_TYPING_STOP, payload);\n }\n\n emitMarkAsRead(payload: { conversationId: string; sender: string; receiver: string }) {\n this.emit(SOCKET_EVENTS.DM_MARK_READ, payload);\n }\n\n emitDmPin(payload: { conversationId: string; sender: string; messageId: string; receiver: string }) {\n this.emit(SOCKET_EVENTS.DM_PIN, payload);\n }\n\n emitDmUnpin(payload: { conversationId: string; sender: string; messageId: string; receiver: string }) {\n this.emit(SOCKET_EVENTS.DM_UNPIN, payload);\n }\n\n emitDmStar(payload: { messageId: string; sender: string }) {\n this.emit(SOCKET_EVENTS.DM_STAR, payload);\n }\n\n emitDmUnstar(payload: { messageId: string; sender: string }) {\n this.emit(SOCKET_EVENTS.DM_UNSTAR, payload);\n }\n\n emitDmForward(payload: { messageId: string; sender: string; targetConversationIds: string[] }) {\n this.emit(SOCKET_EVENTS.DM_FORWARD, payload);\n }\n\n emitGroupJoin(payload: { conversationId: string; userId: string }) {\n this.emit(SOCKET_EVENTS.GROUP_JOIN, payload);\n }\n\n emitGroupMessageSend(payload: any) {\n this.emit(SOCKET_EVENTS.GROUP_MESSAGE_SEND, payload);\n }\n\n emitGroupTypingStart(payload: { conversationId: string; userId: string }) {\n this.emit(SOCKET_EVENTS.GROUP_TYPING_START, payload);\n }\n\n emitGroupTypingStop(payload: { conversationId: string; userId: string }) {\n this.emit(SOCKET_EVENTS.GROUP_TYPING_STOP, payload);\n }\n\n emitGroupEdit(payload: any) {\n this.emit(SOCKET_EVENTS.GROUP_EDIT, payload);\n }\n\n emitGroupReactionAdd(payload: any) {\n this.emit(SOCKET_EVENTS.GROUP_REACTION_ADD, payload);\n }\n\n emitGroupMarkRead(payload: { conversationId: string; userId: string }) {\n this.emit(SOCKET_EVENTS.GROUP_MESSAGE_READ, payload);\n }\n\n emitGroupReactionRemove(payload: any) {\n this.emit(SOCKET_EVENTS.GROUP_REACTION_REMOVE, payload);\n }\n\n emitGroupDelete(payload: { messageId: string; sender: string; deleteType: \"me\" | \"everyone\" }) {\n this.emit(SOCKET_EVENTS.GROUP_DELETE, payload);\n }\n\n emitGroupPin(payload: { conversationId: string; sender: string; messageId: string; receiver: string }) {\n this.emit(SOCKET_EVENTS.GROUP_PIN, payload);\n }\n\n emitGroupUnpin(payload: { conversationId: string; sender: string; messageId: string; receiver: string }) {\n this.emit(SOCKET_EVENTS.GROUP_UNPIN, payload);\n }\n\n emitGroupStar(payload: { messageId: string; sender: string; conversationId: string }) {\n this.emit(SOCKET_EVENTS.GROUP_STAR, payload);\n }\n\n emitGroupUnstar(payload: { messageId: string; sender: string; conversationId: string }) {\n this.emit(SOCKET_EVENTS.GROUP_UNSTAR, payload);\n }\n\n emitGroupForward(payload: { messageId: string; sender: string; targetConversationIds: string[] }) {\n this.emit(SOCKET_EVENTS.GROUP_FORWARD, payload);\n }\n\n emitConversationUpdate(payload: { conversationId: string }) {\n this.emit(SOCKET_EVENTS.CONVERSATION_UPDATE, payload);\n }\n\n emitGroupLeave(payload: { conversationId: string; sender: string }) {\n this.emit(SOCKET_EVENTS.GROUP_LEAVE, payload);\n }\n\n emitGetOnlineUsers() {\n this.emit(SOCKET_EVENTS.GET_ONLINE_USERS);\n }\n}\n\nconst socketService = new SocketService();\nexport default socketService;\n","export const API_ENDPOINTS = {\n USER: {\n CLIENT_LOGIN: \"/user/login/client-user\",\n LIST: \"/user/list\",\n CONVERSATION: \"/conversation/list\",\n MESSAGE_LIST: \"/message/get-all-from-conversation\",\n PINNED_MESSAGE: (conversationId: string) => `message/pinned-messages?conversationId=${conversationId}`,\n STARRED_MESSAGE: (conversationId: string) => `message/starred-messages?conversationId=${conversationId}`,\n },\n GROUP: {\n CREATE: \"/conversation/group/create\",\n UPDATE_CONVERSATION: `/conversation/group/permission/update`,\n GET_CONVERSATION_INFO: (conversationId: string) => `/conversation/get/information/${conversationId}`,\n UPDATE_INFORMATION: `/conversation/group/information/update`,\n ADD_REMOVE_MEMBERS: \"/conversation/group/participants/add-remove\",\n ADD_REMOVE_ADMINS: \"/conversation/group/admins/add-remove\",\n SEARCH_MESSAGES: \"/message/search-messages\",\n SEARCH_MESSAGES_CONTEXT: (messageId: string) => `/message/searched-message/context?messageId=${messageId}`,\n BLOCK_UNBLOCK_USER: \"/user/block-unblock\"\n }\n} as const;\n","import { useStore } from './useStore';\nexport const useSocketStore = useStore;\nexport default useSocketStore;\n","import axios from \"axios\";\nimport { API_ENDPOINTS } from \"../constants/api.constants\";\n\nlet chatClientId = \"\";\nlet chatAccessToken = \"\";\nlet rateLimitResetAt = 0;\n\nexport const setChatClientId = (id: string) => {\n chatClientId = id;\n};\n\nexport const setChatAccessToken = (token: string) => {\n chatAccessToken = token;\n};\n\nexport const getRateLimitResetAt = () => rateLimitResetAt;\nexport const isRateLimited = () => Date.now() < rateLimitResetAt;\n\nconst apiClient = axios.create({\n baseURL: \"http://localhost:5000/api/v1\",\n withCredentials: true,\n});\n\nexport const setChatBaseURL = (url: string) => {\n apiClient.defaults.baseURL = url;\n};\n\napiClient.interceptors.request.use(\n (config) => {\n if (isRateLimited()) {\n return Promise.reject(new Error(\"Rate limit active — please wait before retrying.\"));\n }\n\n config.headers = config.headers ?? {};\n config.headers.set(\"ngrok-skip-browser-warning\", \"true\");\n config.headers.set(\"platform\", \"web\");\n config.headers.set(\"is-tenant\", \"true\");\n\n if (chatClientId) {\n config.headers.set(\"x-client-id\", chatClientId);\n }\n\n if (chatAccessToken) {\n config.headers.set(\"Authorization\", `Bearer ${chatAccessToken}`);\n }\n\n return config;\n },\n (error) => {\n return Promise.reject(error);\n }\n);\n\napiClient.interceptors.response.use(\n (response) => response,\n (error) => {\n if (error.response?.status === 429) {\n const resetHeader = error.response.headers?.[\"ratelimit-reset\"];\n const resetSeconds = resetHeader ? parseInt(String(resetHeader), 10) : 120;\n rateLimitResetAt = Date.now() + (Number.isFinite(resetSeconds) ? resetSeconds : 120) * 1000;\n try {\n const { useSocketStore } = require(\"../store/useSocketStore\");\n const store = useSocketStore.getState();\n store.setRateLimitResetAt(rateLimitResetAt);\n store.handleAppError(\"Rate limit exceeded, slow down\");\n } catch {\n // store not ready during SSR\n }\n }\n return Promise.reject(error);\n }\n);\n\nexport const clientUserLogin = async (name: string, email: string) => {\n try {\n const response = await apiClient.post(API_ENDPOINTS.USER.CLIENT_LOGIN, {\n name,\n email\n });\n return response.data;\n } catch (error: any) {\n console.error(\"Client user login failed:\", error);\n throw error;\n }\n};\n\nexport const fetchUsers = async () => {\n try {\n const response = await apiClient.get(API_ENDPOINTS.USER.LIST);\n return response.data;\n } catch (error: any) {\n console.error(\"List users failed:\", error);\n throw error;\n }\n};\n\nexport const fetchConversations = async (limit: number = 10, page: number = 1, search: string = \"\") => {\n try {\n const params: Record<string, any> = { limit, page };\n if (search) {\n params.search = search;\n }\n\n const response = await apiClient.get(API_ENDPOINTS.USER.CONVERSATION, {\n params\n });\n return response.data;\n } catch (error: any) {\n console.error(\"List conversations failed:\", error);\n throw error;\n }\n};\n\nexport const fetchMessages = async (\n conversationId: string,\n limit: number = 20,\n cursor?: string | null\n) => {\n try {\n const params: Record<string, string | number> = { conversationId, limit };\n if (cursor) {\n params.cursor = cursor;\n }\n\n const response = await apiClient.get(API_ENDPOINTS.USER.MESSAGE_LIST, { params });\n return response.data;\n } catch (error: any) {\n console.error(\"Fetch messages failed:\", error);\n throw error;\n }\n};\n\nexport const fetchPinnedMessages = async (conversationId: string) => {\n try {\n const response = await apiClient.get(API_ENDPOINTS.USER.PINNED_MESSAGE(conversationId));\n return response.data;\n } catch (error: any) {\n console.error(\"Fetch pinned messages failed:\", error);\n throw error;\n }\n};\n\nexport const fetchStarredMessages = async (conversationId: string) => {\n try {\n const response = await apiClient.get(API_ENDPOINTS.USER.STARRED_MESSAGE(conversationId));\n return response.data;\n } catch (error: any) {\n console.error(\"Fetch starred messages failed:\", error);\n throw error;\n }\n};\n\nexport const createGroup = async (name: string, description: string, members: string[], creatorId: string) => {\n try {\n const response = await apiClient.post(API_ENDPOINTS.GROUP.CREATE, {\n groupName: name,\n groupDescription: description,\n participants: members,\n creator: creatorId\n });\n return response.data;\n } catch (error: any) {\n console.error(\"Create group failed:\", error);\n throw error;\n }\n};\n\nexport const fetchConversationInfo = async (conversationId: string) => {\n try {\n const response = await apiClient.get(API_ENDPOINTS.GROUP.GET_CONVERSATION_INFO(conversationId));\n return response.data;\n } catch (error: any) {\n console.error(\"Fetch conversation info failed:\", error);\n throw error;\n }\n};\n\nexport const updateConversation = async (data: any) => {\n try {\n const response = await apiClient.patch(API_ENDPOINTS.GROUP.UPDATE_CONVERSATION, data);\n return response.data;\n } catch (error: any) {\n console.error(\"Update conversation failed:\", error);\n throw error;\n }\n};\n\nexport const updateGroupInformation = async (data: any) => {\n try {\n const response = await apiClient.patch(API_ENDPOINTS.GROUP.UPDATE_INFORMATION, data);\n return response.data;\n } catch (error: any) {\n console.error(\"Update group information failed:\", error);\n throw error;\n }\n};\n\nexport const addRemoveGroupMembers = async (data: { conversationId: string, participants: string[], type: 'add' | 'remove' }) => {\n try {\n const response = await apiClient.patch(API_ENDPOINTS.GROUP.ADD_REMOVE_MEMBERS, data);\n return response.data;\n } catch (error: any) {\n console.error(\"Add/Remove group members failed:\", error);\n throw error;\n }\n};\n\nexport const addRemoveGroupAdmins = async (data: { conversationId: string, groupAdmins: string[], type: 'add' | 'remove' }) => {\n try {\n const response = await apiClient.patch(API_ENDPOINTS.GROUP.ADD_REMOVE_ADMINS, data);\n return response.data;\n } catch (error: any) {\n console.error(\"Add/Remove group admins failed:\", error);\n throw error;\n }\n};\n\nexport const searchMessages = async (\n conversationId: string,\n search: string,\n limit: number = 20,\n cursor?: string | null\n) => {\n try {\n const params: Record<string, string | number> = { conversationId, search, limit };\n if (cursor) {\n params.cursor = cursor;\n }\n\n const response = await apiClient.get(API_ENDPOINTS.GROUP.SEARCH_MESSAGES, { params });\n return response.data;\n } catch (error: any) {\n console.error(\"Search messages failed:\", error);\n throw error;\n }\n};\n\nexport const searchMessagesContext = async (messageId: string) => {\n try {\n const response = await apiClient.get(API_ENDPOINTS.GROUP.SEARCH_MESSAGES_CONTEXT(messageId));\n return response.data;\n } catch (error: any) {\n console.error(\"Search messages context failed:\", error);\n throw error;\n }\n};\n\nexport const blockUnblockUser = async (data: { userId: string, type: 'block' | 'unblock' }) => {\n try {\n const response = await apiClient.patch(API_ENDPOINTS.GROUP.BLOCK_UNBLOCK_USER, data);\n return response.data;\n } catch (error: any) {\n console.error(\"Block/Unblock user failed:\", error);\n throw error;\n }\n};\n\nexport default apiClient;\n","export const findConversationIdByMessageId = (messagesByConversation: Record<string, any[]>, messageId: string) => {\n return Object.keys(messagesByConversation).find(cid =>\n messagesByConversation[cid].some((m: any) =>\n String(m._id || m.id) === String(messageId)\n )\n );\n};\n\nexport const normalizeId = (id: any) => String(id?._id || id?.id || id || \"\");\n\n/** unreadCount is now a number from the API; tolerate legacy per-user maps. */\nexport const normalizeUnreadCount = (unreadCount: unknown): number => {\n if (typeof unreadCount === \"number\") return unreadCount;\n return 0;\n};\n\nexport const incrementUnreadCount = (unreadCount: unknown): number =>\n normalizeUnreadCount(unreadCount) + 1;\n\nexport const emptyMessagesMetadata = () => ({\n nextCursor: null as string | null,\n hasMore: false,\n isFirstPage: true,\n});\n\nexport const extractMessageData = (payload: any) => {\n const messageId = payload.messageId || payload._id || payload.message?._id || payload.message?.id;\n const content = payload.content || payload.message?.content;\n const conversationId = payload.conversationId || payload.message?.conversationId || payload.message?.conversation_id;\n const status = payload.status || payload.message?.status;\n const isPinned = payload.isPinned ?? payload.message?.isPinned;\n const isStarred = payload.isStarred ?? payload.message?.isStarred;\n return { messageId, content, conversationId, status, isPinned, isStarred };\n};\n\nexport const isGroupConversation = (\n conversation: { conversationType?: string; isGroup?: boolean } | null | undefined\n): boolean => {\n if (!conversation) return false;\n return conversation.conversationType === \"group\" || !!conversation.isGroup;\n};\n\nexport const findConversationById = (conversations: any[], conversationId?: string | null) => {\n if (!conversationId) return undefined;\n return conversations.find((c) => String(c._id) === String(conversationId));\n};\n\nexport const resolveIsGroupFromPayload = (\n payload: any,\n conversations: any[]\n): boolean => {\n const conversationId =\n payload?.conversationId ||\n payload?.message?.conversationId ||\n payload?.message?.conversation_id;\n\n const fromStore = findConversationById(conversations, conversationId);\n if (fromStore) return isGroupConversation(fromStore);\n\n return (\n !!payload?.isGroup ||\n payload?.conversationType === \"group\" ||\n payload?.message?.conversationType === \"group\"\n );\n};\n\nexport const getOtherParticipantId = (\n conversation: any,\n loggedUserId?: string\n): string => {\n if (!conversation?.participants?.length) return \"\";\n const other =\n conversation.participants.find(\n (p: any) => String(p._id || p) !== String(loggedUserId)\n ) || conversation.participants[0];\n return String(other?._id || other || \"\");\n};\n\nexport const findConversationForChannel = (\n channel: { id: string; conversationId?: string | null; isGroup?: boolean } | null | undefined,\n loggedUserId: string | undefined,\n conversations: any[]\n): any | undefined => {\n if (!channel || !loggedUserId) return undefined;\n\n if (channel.conversationId) {\n const byId = findConversationById(conversations, channel.conversationId);\n if (byId) return byId;\n }\n\n if (channel.isGroup) {\n return conversations.find(\n (c) => isGroupConversation(c) && String(c._id) === String(channel.id)\n );\n }\n\n return conversations.find((c) => {\n if (isGroupConversation(c)) return false;\n const ids = (c.participants || []).map((p: any) => String(p._id || p));\n return ids.includes(String(channel.id)) && ids.includes(String(loggedUserId));\n });\n};\n\nexport const resolveConversationIdForChannel = (\n channel: { id: string; conversationId?: string | null; isGroup?: boolean } | null | undefined,\n loggedUserId: string | undefined,\n conversations: any[]\n): string | null => {\n const found = findConversationForChannel(channel, loggedUserId, conversations);\n if (found?._id) return String(found._id);\n if (channel?.conversationId) return String(channel.conversationId);\n return null;\n};\n\nconst getMessageContent = (message: any) => String(message?.content || \"\").trim();\n\nconst getMessageTimestamp = (message: any) => {\n const value = message?.createdAt || message?.timestamp;\n const time = value ? new Date(value).getTime() : NaN;\n return Number.isFinite(time) ? time : 0;\n};\n\nconst isOwnMessage = (message: any, loggedUserId?: string) => {\n if (message?.isOwnMessage) return true;\n if (!loggedUserId) return false;\n const senderId = message?.sender?._id || message?.sender?.id || message?.sender;\n return String(senderId) === String(loggedUserId);\n};\n\nconst STATUS_RANK: Record<string, number> = { sent: 1, delivered: 2, read: 3 };\n\nexport const pickBetterMessageStatus = (\n current?: string,\n incoming?: string\n): 'sent' | 'delivered' | 'read' | undefined => {\n if (!incoming) return current as any;\n if (!current) return incoming as any;\n return (STATUS_RANK[incoming] ?? 0) >= (STATUS_RANK[current] ?? 0)\n ? (incoming as 'sent' | 'delivered' | 'read')\n : (current as 'sent' | 'delivered' | 'read');\n};\n\n/** Merge API/store messages with optimistic local messages without duplicates. */\nexport const mergeChatMessages = (\n apiMessages: any[],\n localMessages: any[],\n loggedUserId?: string\n): any[] => {\n const merged = new Map<string, any>();\n\n apiMessages.forEach((message) => {\n const id = String(message?._id || message?.id || \"\");\n if (id) merged.set(id, message);\n });\n\n localMessages.forEach((localMessage) => {\n if (!localMessage) return;\n\n const localId = String(localMessage._id || localMessage.id || \"\");\n\n if (localId && merged.has(localId)) {\n const existing = merged.get(localId);\n merged.set(localId, {\n ...existing,\n ...localMessage,\n status: pickBetterMessageStatus(existing?.status, localMessage?.status),\n });\n return;\n }\n\n const duplicateInApi = apiMessages.some((apiMessage) => {\n const apiId = String(apiMessage?._id || apiMessage?.id || \"\");\n if (localId && apiId && localId === apiId) return true;\n\n if (!isOwnMessage(localMessage, loggedUserId)) return false;\n if (!isOwnMessage(apiMessage, loggedUserId)) return false;\n if (getMessageContent(localMessage) !== getMessageContent(apiMessage)) return false;\n\n return Math.abs(getMessageTimestamp(localMessage) - getMessageTimestamp(apiMessage)) < 120000;\n });\n\n if (duplicateInApi) return;\n\n const key = localId || `pending-${getMessageTimestamp(localMessage)}-${getMessageContent(localMessage)}`;\n if (!merged.has(key)) merged.set(key, localMessage);\n });\n\n return Array.from(merged.values()).filter((message, index, list) => {\n const id = String(message?._id || message?.id || \"\");\n if (!id) return true;\n return list.findIndex((m) => String(m?._id || m?.id || \"\") === id) === index;\n });\n};\n","type PendingForward = {\n targets: string[];\n source?: string;\n};\n\nconst pendingForwards = new Map<string, PendingForward>();\nlet lastPendingMessageId: string | null = null;\n\nexport const setPendingForward = (messageId: string, meta: PendingForward) => {\n if (!messageId) return;\n const key = String(messageId);\n pendingForwards.set(key, meta);\n lastPendingMessageId = key;\n};\n\nexport const takePendingForward = (messageId: string): PendingForward | undefined => {\n if (!messageId) return undefined;\n const key = String(messageId);\n const meta = pendingForwards.get(key);\n pendingForwards.delete(key);\n if (lastPendingMessageId === key) lastPendingMessageId = null;\n return meta;\n};\n\nexport const takeMostRecentPendingForward = (): PendingForward | undefined => {\n if (!lastPendingMessageId) return undefined;\n return takePendingForward(lastPendingMessageId);\n};\n\nexport const peekPendingForward = (messageId: string): PendingForward | undefined => {\n if (!messageId) return undefined;\n return pendingForwards.get(String(messageId));\n};\n\nexport const peekMostRecentPendingForward = (): PendingForward | undefined => {\n if (!lastPendingMessageId) return undefined;\n return pendingForwards.get(lastPendingMessageId);\n};\n\nexport const getLastPendingForwardMessageId = (): string | null => lastPendingMessageId;\n\nexport const clearPendingForward = (messageId?: string) => {\n if (messageId) {\n const key = String(messageId);\n pendingForwards.delete(key);\n if (lastPendingMessageId === key) lastPendingMessageId = null;\n return;\n }\n pendingForwards.clear();\n lastPendingMessageId = null;\n};\n","import { extractMessageData, findConversationIdByMessageId, incrementUnreadCount, isGroupConversation } from '../helpers/store.helpers';\n\nexport const handleReceivedDM = (set: any, get: any, lastDM: any) => {\n const { conversationId, messageId } = extractMessageData(lastDM);\n const loggedUserDetails = get().loggedUserDetails;\n const tempId = lastDM.tempId;\n const isFromSelf = loggedUserDetails && String(lastDM.sender?._id || lastDM.sender) === String(loggedUserDetails._id);\n const activeConversationId = get().activeConversationId;\n const isOpenConversation = conversationId && String(conversationId) === String(activeConversationId);\n\n const messageWithStatus = { ...lastDM, status: lastDM.status || 'sent' };\n\n set((state: any) => {\n const nextMessagesByConversation = { ...state.messagesByConversation };\n const newPendingActions = { ...state.messagePendingActions };\n\n if (conversationId) {\n const current = nextMessagesByConversation[conversationId] || [];\n\n let matchedId = messageId;\n if (tempId && state.messagePendingActions[tempId]) {\n matchedId = tempId;\n }\n\n const exists = current.some((m: any) => String(m._id || m.id) === String(messageId));\n\n if (matchedId && (matchedId === tempId)) {\n nextMessagesByConversation[conversationId] = current.map((m: any) =>\n String(m.id || m._id) === String(matchedId)\n ? { ...m, _id: messageId, id: messageId, status: messageWithStatus.status }\n : m\n );\n delete newPendingActions[matchedId];\n } else if (!exists) {\n nextMessagesByConversation[conversationId] = [...current, messageWithStatus];\n }\n }\n\n const nextConversations = state.conversations.map((c: any) => {\n if (String(c._id) !== String(conversationId)) return c;\n\n return {\n ...c,\n lastMessage: messageWithStatus,\n unreadCount: !isFromSelf && !isOpenConversation\n ? incrementUnreadCount(c.unreadCount)\n : c.unreadCount,\n };\n });\n\n return {\n lastDM: { ...messageWithStatus, isGroup: false },\n messagesByConversation: nextMessagesByConversation,\n conversations: nextConversations,\n messagePendingActions: newPendingActions\n };\n });\n\n if (\n !isFromSelf &&\n isOpenConversation &&\n conversationId &&\n loggedUserDetails?._id\n ) {\n const targetConv = get().conversations.find(\n (c: any) => String(c._id) === String(conversationId)\n );\n if (!isGroupConversation(targetConv)) {\n const senderId = String(lastDM.sender?._id || lastDM.sender || \"\");\n get().emitMarkAsRead({\n conversationId: String(conversationId),\n sender: String(loggedUserDetails._id),\n receiver: senderId,\n });\n }\n }\n};\n\nexport const handleEditDM = (set: any, get: any, payload: any) => {\n const { messageId, content, conversationId } = extractMessageData(payload);\n if (!messageId) return;\n\n set((state: any) => {\n let searchConversationId = conversationId;\n if (!searchConversationId) {\n searchConversationId = findConversationIdByMessageId(state.messagesByConversation, messageId);\n }\n if (!searchConversationId) {\n searchConversationId = state.conversations.find((c: any) =>\n String(c.lastMessage?._id || c.lastMessage?.id) === String(messageId)\n )?._id;\n }\n\n const normalizedEditPayload = { ...payload, messageId, content, conversationId: searchConversationId, _v: Date.now() };\n const newPendingActions = { ...state.messagePendingActions };\n if (newPendingActions[messageId]) {\n delete newPendingActions[messageId];\n }\n\n if (searchConversationId) {\n const messages = state.messagesByConversation[searchConversationId] || [];\n const index = messages.findIndex((m: any) => String(m._id || m.id) === String(messageId));\n\n if (index !== -1) {\n const newMessages = [...messages];\n newMessages[index] = { ...newMessages[index], ...normalizedEditPayload, isEdited: true };\n return {\n lastEditDM: normalizedEditPayload,\n messagesByConversation: { ...state.messagesByConversation, [searchConversationId]: newMessages },\n messagePendingActions: newPendingActions\n };\n }\n }\n\n return { lastEditDM: normalizedEditPayload, messagePendingActions: newPendingActions };\n });\n};\n\nexport const handleDeleteDM = (set: any, get: any, payload: any, type: 'me' | 'everyone') => {\n const { messageId, conversationId } = extractMessageData(payload);\n if (!messageId) return;\n set((state: any) => {\n const searchConversationId = conversationId || findConversationIdByMessageId(state.messagesByConversation, messageId);\n let updatedConversations = state.conversations;\n if (searchConversationId) {\n updatedConversations = state.conversations.map((c: any) => {\n if (String(c._id) === String(searchConversationId) && String(c.lastMessage?._id || c.lastMessage?.id) === String(messageId)) {\n return { ...c, lastMessage: type === 'me' ? { ...c.lastMessage, content: '' } : { ...c.lastMessage, isDeletedForEveryone: true, content: 'This message has been deleted' } };\n }\n return c;\n });\n }\n\n const messages = searchConversationId ? state.messagesByConversation[searchConversationId] || [] : [];\n let nextMessagesByConversation = state.messagesByConversation;\n if (searchConversationId) {\n if (type === 'me') {\n nextMessagesByConversation = { ...state.messagesByConversation, [searchConversationId]: messages.filter((m: any) => String(m._id || m.id) !== String(messageId)) };\n } else {\n nextMessagesByConversation = {\n ...state.messagesByConversation,\n [searchConversationId]: messages.map((m: any) => String(m._id || m.id) === String(messageId) ? { ...m, isDeletedForEveryone: true, content: '' } : m)\n };\n }\n }\n\n const newPendingActions = { ...state.messagePendingActions };\n if (newPendingActions[messageId]) {\n delete newPendingActions[messageId];\n }\n\n return {\n lastDeleteDM: { ...payload, deleteType: type },\n deletedForMeIds: type === 'me' && !state.deletedForMeIds.includes(messageId) ? [...state.deletedForMeIds, messageId] : state.deletedForMeIds,\n messagesByConversation: nextMessagesByConversation,\n conversations: updatedConversations,\n messagePendingActions: newPendingActions\n };\n });\n};\n","import { extractMessageData, incrementUnreadCount, isGroupConversation } from '../helpers/store.helpers';\nimport { getLastPendingForwardMessageId, peekPendingForward, clearPendingForward } from '../forwardPending.store';\n\nexport const handleReceivedGroupMessage = (set: any, get: any, lastDM: any) => {\n const { conversationId, messageId } = extractMessageData(lastDM);\n const loggedUserDetails = get().loggedUserDetails;\n const tempId = lastDM.tempId;\n const activeConversationId = get().activeConversationId;\n const isOpenConversation = conversationId && String(conversationId) === String(activeConversationId);\n const isFromSelf = loggedUserDetails && String(lastDM.sender?._id || lastDM.sender) === String(loggedUserDetails._id);\n\n const maybeClearForwardPending = () => {\n const pendingId = getLastPendingForwardMessageId();\n if (!pendingId) return;\n\n const pending = peekPendingForward(pendingId);\n const hitsTarget = pending?.targets?.some(\n (t) => String(t) === String(conversationId)\n );\n const isForwarded = !!(lastDM.isForwarded || lastDM.forwarded);\n\n if (hitsTarget || (isFromSelf && isForwarded)) {\n set((state: any) => {\n if (!state.messagePendingActions[pendingId]) return state;\n const newPendingActions = { ...state.messagePendingActions };\n delete newPendingActions[pendingId];\n return { messagePendingActions: newPendingActions };\n });\n clearPendingForward(pendingId);\n }\n };\n\n maybeClearForwardPending();\n\n if (isFromSelf) {\n set((state: any) => {\n const nextMessagesByConversation = { ...state.messagesByConversation };\n const newPendingActions = { ...state.messagePendingActions };\n let matchedTempId = tempId;\n\n if (conversationId) {\n const current = nextMessagesByConversation[conversationId] || [];\n\n if (!matchedTempId) {\n const optimisticMsg = current.find((m: any) =>\n String(m._id || '').startsWith('temp-') &&\n m.content === lastDM.content &&\n Math.abs(new Date(m.timestamp || m.createdAt).getTime() - new Date(lastDM.createdAt).getTime()) < 60000\n );\n if (optimisticMsg) matchedTempId = optimisticMsg.id;\n }\n\n const messageExists = current.some((m: any) => String(m._id || m.id) === String(messageId));\n if (!messageExists) {\n nextMessagesByConversation[conversationId] = [...current, {\n ...lastDM,\n _id: messageId,\n id: messageId,\n status: (lastDM.status || 'sent') as any\n }];\n } else {\n nextMessagesByConversation[conversationId] = current.map((m: any) =>\n String(m._id || m.id) === String(messageId)\n ? { ...m, status: (lastDM.status || 'sent') as any }\n : m\n );\n }\n\n if (matchedTempId) {\n delete newPendingActions[matchedTempId];\n nextMessagesByConversation[conversationId] = nextMessagesByConversation[conversationId].map((m: any) =>\n String(m.id || m._id) === String(matchedTempId)\n ? { ...m, _id: messageId, id: messageId, status: (lastDM.status || 'sent') as any }\n : m\n );\n }\n }\n\n const nextConversations = state.conversations.map((c: any) => {\n if (String(c._id) === String(conversationId)) {\n return { ...c, lastMessage: { ...lastDM, status: lastDM.status || 'sent' } };\n }\n return c;\n });\n return {\n lastDM: { ...lastDM, isGroup: true },\n messagePendingActions: newPendingActions,\n messagesByConversation: nextMessagesByConversation,\n conversations: nextConversations\n };\n });\n\n if (conversationId) {\n get().fetchConversationInfo(conversationId);\n }\n return;\n }\n\n set((state: any) => {\n const nextMessagesByConversation = { ...state.messagesByConversation };\n if (conversationId) {\n const current = nextMessagesByConversation[conversationId] || [];\n const exists = current.some((m: any) => String(m._id || m.id) === String(lastDM._id || lastDM.id));\n if (!exists) {\n nextMessagesByConversation[conversationId] = [...current, lastDM];\n }\n }\n\n const nextConversations = state.conversations.map((c: any) => {\n if (String(c._id) !== String(conversationId)) return c;\n\n return {\n ...c,\n lastMessage: lastDM,\n unreadCount: isOpenConversation\n ? 0\n : incrementUnreadCount(c.unreadCount),\n };\n });\n\n return { lastDM: { ...lastDM, isGroup: true }, messagesByConversation: nextMessagesByConversation, conversations: nextConversations };\n });\n\n if (conversationId) {\n get().fetchConversationInfo(conversationId);\n\n const targetConv = get().conversations.find(\n (c: any) => String(c._id) === String(conversationId)\n );\n const isGroupChat = isGroupConversation(targetConv);\n\n if (loggedUserDetails?._id && messageId && isGroupChat) {\n get().emitGroupMessageDelivered({\n conversationId,\n messageId,\n userId: loggedUserDetails._id\n });\n }\n\n if (isOpenConversation && loggedUserDetails?._id && isGroupChat) {\n get().emitGroupMarkRead({\n conversationId,\n userId: loggedUserDetails._id,\n });\n }\n }\n};\n","import { findConversationIdByMessageId, normalizeId } from '../helpers/store.helpers';\n\nconst normalizeGroupReactionEntry = (r: any) => {\n if (!r) return null;\n const reaction = r.reaction;\n const addedBy = r.addedBy || r.sender || r.userId;\n return {\n ...r,\n reaction,\n addedBy,\n sender: r.sender || addedBy\n };\n};\n\nconst mergeReactionLists = (existing: any[], incoming: any[]) => {\n const a = (existing || []).map(normalizeGroupReactionEntry).filter(Boolean);\n const b = (incoming || []).map(normalizeGroupReactionEntry).filter(Boolean);\n\n const map = new Map<string, any>();\n [...a, ...b].forEach((r: any) => {\n const key = `${String(r.reaction)}::${normalizeId(r.addedBy || r.sender)}`;\n map.set(key, r);\n });\n\n return Array.from(map.values());\n};\n\nexport const handleGroupReactionAddReceive = (set: any, get: any, payload: any) => {\n const messageId = payload.messageId || payload._id;\n const conversationId = payload.conversationId;\n\n if (!messageId) return;\n\n set((state: any) => {\n const cid = conversationId || findConversationIdByMessageId(state.messagesByConversation, messageId);\n if (!cid) return state;\n\n const messages = state.messagesByConversation[cid] || [];\n const idx = messages.findIndex((m: any) => String(m._id || m.id) === String(messageId));\n if (idx === -1) return state;\n\n const nextMessages = [...messages];\n const currentMsg = { ...nextMessages[idx] };\n\n if (Array.isArray(payload.reactions)) {\n \n currentMsg.reactions = mergeReactionLists(currentMsg.reactions || [], payload.reactions);\n } else {\n const incoming = normalizeGroupReactionEntry(payload);\n if (!incoming?.reaction) return state;\n\n const incomingAdderId = normalizeId(incoming.addedBy);\n const currentReactions = (currentMsg.reactions || []).map(normalizeGroupReactionEntry).filter(Boolean);\n\n const exists = currentReactions.some((r: any) =>\n r.reaction === incoming.reaction && normalizeId(r.addedBy || r.sender) === incomingAdderId\n );\n\n currentMsg.reactions = exists ? currentReactions : [...currentReactions, incoming];\n }\n\n nextMessages[idx] = currentMsg;\n\n return {\n lastReactionUpdate: { ...payload, messageId, action: 'add', _v: Date.now() },\n messagesByConversation: { ...state.messagesByConversation, [cid]: nextMessages }\n };\n });\n};\n\nexport const handleGroupReactionRemoveReceive = (set: any, get: any, payload: any) => {\n const messageId = payload.messageId || payload._id;\n const conversationId = payload.conversationId;\n\n if (!messageId) return;\n\n set((state: any) => {\n const cid = conversationId || findConversationIdByMessageId(state.messagesByConversation, messageId);\n if (!cid) return state;\n\n const messages = state.messagesByConversation[cid] || [];\n const idx = messages.findIndex((m: any) => String(m._id || m.id) === String(messageId));\n if (idx === -1) return state;\n\n const nextMessages = [...messages];\n const currentMsg = { ...nextMessages[idx] };\n\n const reaction = payload.reaction;\n const removedBy = payload.sender || payload.addedBy || payload.userId;\n\n if (reaction && removedBy) {\n const removedById = normalizeId(removedBy);\n const currentReactions = (currentMsg.reactions || []).map(normalizeGroupReactionEntry).filter(Boolean);\n currentMsg.reactions = currentReactions.filter((r: any) =>\n !(r.reaction === reaction && normalizeId(r.addedBy || r.sender) === removedById)\n );\n } else if (Array.isArray(payload.reactions) && payload.reactions.length > 0) {\n \n currentMsg.reactions = payload.reactions.map(normalizeGroupReactionEntry).filter(Boolean);\n }\n\n nextMessages[idx] = currentMsg;\n\n return {\n lastReactionUpdate: { ...payload, messageId, action: 'remove', _v: Date.now() },\n messagesByConversation: { ...state.messagesByConversation, [cid]: nextMessages }\n };\n });\n};\n","import { extractMessageData, findConversationIdByMessageId, normalizeId } from '../helpers/store.helpers';\n\nexport const handlePinUpdate = (set: any, get: any, payload: any) => {\n // If the backend returns the full list of pinned messages\n if (payload.pinnedMessage && Array.isArray(payload.pinnedMessage)) {\n const { conversationId, pinnedMessage } = payload;\n if (!conversationId) return;\n\n set((state: any) => {\n const messages = state.messagesByConversation[conversationId] || [];\n const pinnedIds = pinnedMessage.map((p: any) => String(p.messageId?._id || p.messageId || p._id));\n\n const newMessagesByConversation = {\n ...state.messagesByConversation,\n [conversationId]: messages.map((m: any) => ({\n ...m,\n isPinned: pinnedIds.includes(String(m._id || m.id))\n }))\n };\n\n const pinnedCount = payload.totalCount ?? pinnedMessage.length;\n\n const newPendingActions = { ...state.messagePendingActions };\n // Clear pin/unpin pending actions for all messages in this conversation\n messages.forEach((m: any) => {\n const mid = String(m._id || m.id);\n if (newPendingActions[mid] && (newPendingActions[mid].includes('pin') || newPendingActions[mid].includes('unpin'))) {\n delete newPendingActions[mid];\n }\n });\n\n return {\n lastPinUpdate: payload,\n messagesByConversation: newMessagesByConversation,\n pinnedMessagesByConversation: {\n ...state.pinnedMessagesByConversation,\n [conversationId]: pinnedMessage\n },\n conversations: state.conversations.map((c: any) =>\n String(c._id) === String(conversationId) ? { ...c, pinnedCount } : c\n ),\n liveConversationCounts: {\n ...state.liveConversationCounts,\n [conversationId]: {\n ...state.liveConversationCounts[conversationId],\n pinnedCount: pinnedCount\n }\n },\n messagePendingActions: newPendingActions\n };\n });\n return;\n }\n\n // Fallback for previous single-element logic\n const { messageId, conversationId, isPinned } = extractMessageData(payload);\n if (!messageId || !conversationId) return;\n\n set((state: any) => {\n const sid = conversationId || findConversationIdByMessageId(state.messagesByConversation, messageId);\n if (!sid) return state;\n\n const messages = state.messagesByConversation[sid] || [];\n const index = messages.findIndex((m: any) => String(m._id || m.id) === String(messageId));\n\n let newMessagesByConversation = state.messagesByConversation;\n const msg = index !== -1 ? messages[index] : null;\n\n // Determine if we are actually changing the pinned state\n const wasPinned = msg ? !!msg.isPinned : false;\n\n if (index !== -1) {\n const newMessages = [...messages];\n newMessages[index] = { ...newMessages[index], isPinned };\n newMessagesByConversation = { ...state.messagesByConversation, [sid]: newMessages };\n }\n\n const newPinnedByConv = { ...state.pinnedMessagesByConversation };\n if (isPinned) {\n const currentPinned = newPinnedByConv[sid] || [];\n if (!currentPinned.some((m: any) => String(m.messageId?._id || m.messageId?.id || m._id || m.id) === String(messageId))) {\n // For optimal drawer rendering, use the full message object if found.\n const fullMsg = msg ? { ...msg, isPinned: true } : payload;\n newPinnedByConv[sid] = [...currentPinned, fullMsg];\n }\n } else {\n newPinnedByConv[sid] = (newPinnedByConv[sid] || []).filter(\n (m: any) => String(m.messageId?._id || m.messageId?.id || m._id || m.id) !== String(messageId)\n );\n }\n\n const conversation = get().conversations?.find((c: any) => String(c._id) === String(sid));\n const existingCount = state.liveConversationCounts[sid]?.pinnedCount ?? conversation?.pinnedCount ?? 0;\n let pinnedCount = existingCount;\n\n if (isPinned && !wasPinned) {\n pinnedCount = existingCount + 1;\n } else if (!isPinned && wasPinned) {\n pinnedCount = Math.max(0, existingCount - 1);\n }\n\n if (payload.totalCount !== undefined) {\n pinnedCount = payload.totalCount;\n }\n\n const newPendingActions = { ...state.messagePendingActions };\n if (newPendingActions[messageId]) {\n delete newPendingActions[messageId];\n }\n\n return {\n lastPinUpdate: payload,\n messagesByConversation: newMessagesByConversation,\n pinnedMessagesByConversation: newPinnedByConv,\n conversations: state.conversations.map((c: any) =>\n String(c._id) === String(sid) ? { ...c, pinnedCount } : c\n ),\n liveConversationCounts: {\n ...state.liveConversationCounts,\n [sid]: {\n ...state.liveConversationCounts[sid],\n pinnedCount: pinnedCount\n }\n },\n messagePendingActions: newPendingActions\n };\n });\n};\n\nexport const handleStarUpdate = (set: any, get: any, payload: any) => {\n // If backend returns { messageId, starredBy } directly\n if (payload.starredBy && Array.isArray(payload.starredBy)) {\n const { messageId } = extractMessageData(payload);\n const { starredBy } = payload;\n if (!messageId) return;\n\n set((state: any) => {\n const sid = payload.conversationId || findConversationIdByMessageId(state.messagesByConversation, messageId);\n\n const newPendingActions = { ...state.messagePendingActions };\n if (newPendingActions[messageId]) {\n delete newPendingActions[messageId];\n }\n\n if (!sid) {\n return { lastStarUpdate: payload, messagePendingActions: newPendingActions };\n }\n\n // Make loggedUserId check absolutely bulletproof\n const loggedUserId = String(get().loggedUserDetails?._id || state.loggedUserDetails?._id || \"\");\n\n // If loggedUserId is blank for some reason, just check if starredBy is not empty.\n // Also strictly compare both as strings.\n const isStarred = starredBy.some((id: any) => String(id?._id || id) === loggedUserId)\n || (loggedUserId === \"\" && starredBy.length > 0);\n\n const messages = state.messagesByConversation[sid] || [];\n const index = messages.findIndex((m: any) => String(m._id || m.id) === String(messageId));\n\n let newMessagesByConversation = state.messagesByConversation;\n if (index !== -1) {\n const newMessages = [...messages];\n newMessages[index] = { ...newMessages[index], isStarred, starredBy };\n newMessagesByConversation = { ...state.messagesByConversation, [sid]: newMessages };\n }\n\n const newStarredByConv = { ...state.starredMessagesByConversation };\n const currentStarred = newStarredByConv[sid] || [];\n const exists = currentStarred.some((m: any) => String(m.messageId?._id || m.messageId || m._id || m.id) === String(messageId));\n\n const conversation = get().conversations?.find((c: any) => String(c._id) === String(sid));\n const existingCount = state.liveConversationCounts[sid]?.starredCount ?? conversation?.starredCount ?? 0;\n let starredCount = existingCount;\n\n if (isStarred && !exists) {\n // For optimal drawer rendering, use the full message object if found.\n const fullMessage = index !== -1 ? newMessagesByConversation[sid][index] : { ...payload, _id: messageId };\n newStarredByConv[sid] = [...currentStarred, fullMessage];\n starredCount = existingCount + 1;\n } else if (!isStarred && exists) {\n newStarredByConv[sid] = currentStarred.filter((m: any) => String(m.messageId?._id || m.messageId || m._id || m.id) !== String(messageId));\n starredCount = Math.max(0, existingCount - 1);\n }\n\n if (payload.totalCount !== undefined) {\n starredCount = payload.totalCount;\n }\n\n return {\n lastStarUpdate: payload,\n messagesByConversation: newMessagesByConversation,\n starredMessagesByConversation: newStarredByConv,\n conversations: state.conversations.map((c: any) =>\n String(c._id) === String(sid) ? { ...c, starredCount } : c\n ),\n liveConversationCounts: {\n ...state.liveConversationCounts,\n [sid]: {\n ...state.liveConversationCounts[sid],\n starredCount: starredCount\n }\n },\n messagePendingActions: newPendingActions\n };\n });\n return;\n }\n\n // Fallback for previous single-element logic\n const { messageId, isStarred, conversationId } = extractMessageData(payload);\n if (!messageId) return;\n\n set((state: any) => {\n const sid = conversationId || findConversationIdByMessageId(state.messagesByConversation, messageId);\n if (!sid) return { lastStarUpdate: payload };\n\n const messages = state.messagesByConversation[sid] || [];\n const index = messages.findIndex((m: any) => String(m._id || m.id) === String(messageId));\n\n let newMessagesByConversation = state.messagesByConversation;\n const msg = index !== -1 ? messages[index] : null;\n\n // Determine if we are actually changing the star state\n const wasStarred = msg ? !!msg.isStarred : false;\n\n if (index !== -1) {\n const newMessages = [...messages];\n newMessages[index] = { ...newMessages[index], isStarred };\n newMessagesByConversation = { ...state.messagesByConversation, [sid]: newMessages };\n }\n\n const newStarredByConv = { ...state.starredMessagesByConversation };\n if (isStarred) {\n const currentStarred = newStarredByConv[sid] || [];\n if (!currentStarred.some((m: any) => String(m?._id || m?.id || m.messageId?._id || m.messageId?.id) === String(messageId))) {\n const fullMsg = msg ? { ...msg, isStarred: true } : payload;\n newStarredByConv[sid] = [...currentStarred, fullMsg];\n }\n } else {\n newStarredByConv[sid] = (newStarredByConv[sid] || []).filter(\n (m: any) => String(m?._id || m?.id || m.messageId?._id || m.messageId?.id) !== String(messageId)\n );\n }\n\n const conversation = get().conversations?.find((c: any) => String(c._id) === String(sid));\n const existingCount = state.liveConversationCounts[sid]?.starredCount ?? conversation?.starredCount ?? 0;\n let starredCount = existingCount;\n\n if (isStarred && !wasStarred) {\n starredCount = existingCount + 1;\n } else if (!isStarred && wasStarred) {\n starredCount = Math.max(0, existingCount - 1);\n }\n\n if (payload.totalCount !== undefined) {\n starredCount = payload.totalCount;\n }\n\n const newPendingActions = { ...state.messagePendingActions };\n if (newPendingActions[messageId]) {\n delete newPendingActions[messageId];\n }\n\n return {\n lastStarUpdate: payload,\n messagesByConversation: newMessagesByConversation,\n starredMessagesByConversation: newStarredByConv,\n conversations: state.conversations.map((c: any) =>\n String(c._id) === String(sid) ? { ...c, starredCount } : c\n ),\n liveConversationCounts: {\n ...state.liveConversationCounts,\n [sid]: {\n ...state.liveConversationCounts[sid],\n starredCount: starredCount\n }\n },\n messagePendingActions: newPendingActions\n };\n });\n};\n\nexport const updateMessageReactions = (currentReactions: any[], payload: any, action?: 'add' | 'remove') => {\n // 1. If payload contains a full reactions array, use it (canonical from server)\n if (payload.reactions && Array.isArray(payload.reactions)) {\n return payload.reactions;\n }\n\n // 2. Otherwise handle incremental updates (reaction + sender)\n const { reaction, sender } = payload;\n if (!reaction) return currentReactions;\n\n const senderId = normalizeId(sender);\n const reactions = [...(currentReactions || [])];\n\n if (action === 'add') {\n const withoutUser = reactions.filter(\n (r) => normalizeId(r.sender || r.addedBy) !== senderId\n );\n withoutUser.push({\n reaction,\n sender: sender,\n addedBy: sender,\n addedAt: new Date().toISOString()\n });\n return withoutUser;\n } else if (action === 'remove') {\n return reactions.filter(r =>\n !(r.reaction === reaction && normalizeId(r.sender || r.addedBy) === senderId)\n );\n }\n\n return reactions;\n};\n\nexport const handleReactionChange = (set: any, get: any, payload: any, action: 'add' | 'remove') => {\n const { messageId, conversationId, reaction, sender } = payload;\n if (!messageId || !reaction) return;\n\n set((state: any) => {\n const searchConversationId = conversationId || findConversationIdByMessageId(state.messagesByConversation, messageId);\n if (!searchConversationId) return state;\n\n const messages = state.messagesByConversation[searchConversationId] || [];\n const index = messages.findIndex((m: any) => String(m._id || m.id) === String(messageId));\n\n if (index !== -1) {\n const newMessages = [...messages];\n const msg = { ...newMessages[index], reactions: [...(newMessages[index].reactions || [])] };\n\n if (action === 'add') {\n const senderId = String(sender?._id || sender);\n const withoutUser = msg.reactions.filter(\n (r: any) => String(r.addedBy?._id || r.addedBy || r.sender?._id || r.sender) !== senderId\n );\n withoutUser.push({ reaction, sender });\n msg.reactions = withoutUser;\n } else {\n msg.reactions = msg.reactions.filter((r: any) => !(r.reaction === reaction && String(r.sender?._id || r.sender) === String(sender?._id || sender)));\n }\n newMessages[index] = msg;\n return {\n lastReactionUpdate: { ...payload, action, _v: Date.now() },\n messagesByConversation: { ...state.messagesByConversation, [searchConversationId]: newMessages }\n };\n }\n return { lastReactionUpdate: { ...payload, action, _v: Date.now() } };\n });\n};\n","import socketService from \"../../services/socket.service\";\n\nexport const emitGroupMessageSend = (set: any, get: any, payload: any) => {\n const tempId = payload.tempId || `temp-${Date.now()}`;\n \n // Add to pending actions for optimistic UI\n set((state: any) => ({ \n messagePendingActions: { \n ...state.messagePendingActions, \n [tempId]: ['send'] \n } \n }));\n\n // Emit the group message\n socketService.emitGroupMessageSend({ ...payload, tempId });\n\n // Remove immediate conversation_update - let backend handle it after message is processed\n};\n","import { StateCreator } from 'zustand';\nimport socketService from '../../services/socket.service';\nimport { SOCKET_EVENTS } from '../../constants/socket.events.constants';\nimport { fetchUsers, fetchConversations, fetchMessages, fetchPinnedMessages, fetchStarredMessages, fetchConversationInfo, updateConversation, updateGroupInformation, addRemoveGroupMembers, addRemoveGroupAdmins, searchMessagesContext } from '../../services/api.service';\nimport { extractMessageData, findConversationIdByMessageId, incrementUnreadCount, normalizeUnreadCount, emptyMessagesMetadata, isGroupConversation, resolveIsGroupFromPayload } from '../helpers/store.helpers';\nimport { setPendingForward, peekPendingForward, peekMostRecentPendingForward, clearPendingForward, getLastPendingForwardMessageId } from '../forwardPending.store';\nimport { AppStoreState, SocketState } from '../types/store.types';\n\n// Logic Handlers\nimport { handleReceivedDM, handleEditDM, handleDeleteDM } from '../handlers/message.handlers';\nimport { handleReceivedGroupMessage } from '../handlers/group.handlers';\nimport { handleGroupReactionAddReceive, handleGroupReactionRemoveReceive } from '../handlers/group.reaction.handlers';\nimport { handlePinUpdate, handleStarUpdate } from '../handlers/interaction.handlers';\n\nconst safelyExtractArray = (res: any): any[] => {\n if (!res) return [];\n if (Array.isArray(res)) return res;\n if (Array.isArray(res.list)) return res.list;\n if (Array.isArray(res.data)) return res.data;\n if (Array.isArray(res.users)) return res.users;\n if (Array.isArray(res.conversations)) return res.conversations;\n if (Array.isArray(res.messages)) return res.messages;\n if (res.data && Array.isArray(res.data.list)) return res.data.list;\n if (res.data && Array.isArray(res.data.messages)) return res.data.messages;\n if (res.data && Array.isArray(res.data.users)) return res.data.users;\n if (res.data && Array.isArray(res.data.conversations)) return res.data.conversations;\n if (res.data && Array.isArray(res.data.data)) return res.data.data;\n if (res.data && Array.isArray(res.data.records)) return res.data.records;\n if (Array.isArray(res.result)) return res.result;\n return [];\n};\n\nconst clearForwardPendingActions = (set: any, ...messageIds: (string | undefined | null)[]) => {\n const originalPendingId = getLastPendingForwardMessageId();\n const ids = new Set(\n [originalPendingId, ...messageIds].filter(Boolean).map(String)\n );\n\n set((state: any) => {\n const newPendingActions = { ...state.messagePendingActions };\n ids.forEach((id) => {\n if (newPendingActions[id]) delete newPendingActions[id];\n });\n return Object.keys(newPendingActions).length === Object.keys(state.messagePendingActions).length\n ? state\n : { messagePendingActions: newPendingActions };\n });\n\n if (originalPendingId) clearPendingForward(originalPendingId);\n else clearPendingForward();\n};\n\nexport const createSocketSlice: StateCreator<AppStoreState, [], [], SocketState> = (set, get) => ({\n status: \"idle\",\n socketId: null,\n error: null,\n onlineUsers: [],\n allUsers: [],\n conversations: [],\n messagesByConversation: {},\n isFetchingAllUsers: false,\n isFetchingConversations: false,\n isFetchingMessages: false,\n isFetchingMessagesByConv: {},\n isFetchingInfo: {},\n conversationsPage: 1,\n conversationsHasMore: true,\n lastConversationsFetchKey: null as string | null,\n sidebarConversationsSearchKey: null as string | null,\n lastDM: null,\n lastEditDM: null,\n lastDeleteDM: null,\n lastPinUpdate: null,\n lastStarUpdate: null,\n lastReactionUpdate: null,\n lastStatusUpdate: null,\n lastDMMarkRead: null,\n deletedForMeIds: [],\n typingUsers: {},\n pinnedMessagesByConversation: {},\n starredMessagesByConversation: {},\n messagePendingActions: {},\n messagesMetadata: {},\n liveConversationCounts: {},\n isClearingChat: {},\n isDeletingConversation: {},\n conversationInfos: {},\n isSearchActive: false,\n searchedMessageId: null,\n activeConversationId: null,\n appError: null,\n composerDisabledReason: null,\n rateLimitResetAt: 0,\n\n activeChannel: null,\n setActiveChannel: (channel) => {\n set((state: any) => {\n const current = state.activeChannel;\n if (!channel && !current) return state;\n if (!channel) {\n return { activeChannel: null, activeConversationId: null };\n }\n\n const nextConversationId = channel.conversationId\n ? String(channel.conversationId)\n : null;\n\n if (current &&\n String(current.id) === String(channel.id) &&\n String(current.conversationId || \"\") === String(channel.conversationId || \"\") &&\n (current.pinnedCount ?? 0) === (channel.pinnedCount ?? 0) &&\n (current.starredCount ?? 0) === (channel.starredCount ?? 0) &&\n !!current.isLeft === !!channel.isLeft &&\n !!current.isBlocked === !!channel.isBlocked &&\n !!current.isGroup === !!channel.isGroup &&\n (current.name || \"\") === (channel.name || \"\") &&\n (current.image || \"\") === (channel.image || \"\") &&\n String(state.activeConversationId ?? \"\") === String(nextConversationId ?? \"\")\n ) {\n return state;\n }\n\n const target = nextConversationId\n ? state.conversations.find((c: any) => String(c._id) === String(nextConversationId))\n : null;\n const unreadAlreadyZero = !target?.unreadCount;\n\n return {\n activeChannel: channel,\n activeConversationId: nextConversationId,\n conversations: nextConversationId && !unreadAlreadyZero\n ? state.conversations.map((c: any) =>\n String(c._id) === String(nextConversationId)\n ? { ...c, unreadCount: 0 }\n : c\n )\n : state.conversations,\n };\n });\n },\n\n setActiveConversationId: (conversationId) => {\n set((state: any) => {\n const nextId = conversationId ?? null;\n if (String(state.activeConversationId ?? \"\") === String(nextId ?? \"\")) {\n return state;\n }\n\n if (!nextId) {\n return { activeConversationId: null };\n }\n\n const target = state.conversations.find((c: any) => String(c._id) === String(nextId));\n const unreadAlreadyZero = !target?.unreadCount;\n\n return {\n activeConversationId: nextId,\n conversations: unreadAlreadyZero\n ? state.conversations\n : state.conversations.map((c: any) =>\n String(c._id) === String(nextId)\n ? { ...c, unreadCount: 0 }\n : c\n ),\n };\n });\n },\n\n handleAppError: (message) => {\n const lower = message.toLowerCase();\n let type: import('../types/store.types').AppErrorState['type'] = 'generic';\n\n if (lower.includes('not a participant')) {\n type = 'participant';\n } else if (lower.includes('only group admins can send')) {\n type = 'permission';\n set({ composerDisabledReason: message });\n } else if (lower.includes('editing messages is disabled')) {\n type = 'edit';\n } else if (lower.includes('rate limit')) {\n type = 'rate_limit';\n }\n\n set({ appError: { message, type }, error: message, status: 'error' });\n\n if (type === 'participant') {\n set({ activeConversationId: null });\n }\n },\n\n clearAppError: () => set({ appError: null, composerDisabledReason: null, error: null }),\n\n setRateLimitResetAt: (resetAt) => set({ rateLimitResetAt: resetAt }),\n\n // Connection\n connectRequested: (config) => {\n set({ status: \"connecting\" });\n socketService.connect(config);\n },\n disconnectRequested: () => {\n socketService.disconnect();\n set({ status: \"disconnected\", socketId: null });\n },\n setConnecting: () => set({ status: \"connecting\" }),\n setConnected: ({ socketId }) => set({ status: \"connected\", socketId, error: null }),\n setDisconnected: () => set({ status: \"disconnected\", socketId: null }),\n setError: (error) => set({ status: \"error\", error }),\n\n // Users\n setOnlineUsers: (onlineUsers) => set({ onlineUsers }),\n fetchAllUsers: async (force = false) => {\n if (get().isFetchingAllUsers && !force) return;\n set({ isFetchingAllUsers: true });\n try {\n const response = await fetchUsers();\n const users = safelyExtractArray(response);\n set({ allUsers: users, isFetchingAllUsers: false });\n } catch (err) {\n set({ isFetchingAllUsers: false });\n }\n },\n emitGetOnlineUsers: () => socketService.emit(\"get_online_users\", {}),\n\n fetchConversationInfo: async (conversationId) => {\n if (!conversationId) return;\n\n const state = get() as any;\n if (state.isFetchingInfo?.[conversationId]) {\n await new Promise((resolve) => {\n const interval = setInterval(() => {\n if (!get().isFetchingInfo?.[conversationId]) {\n clearInterval(interval);\n resolve(undefined);\n }\n }, 50);\n setTimeout(() => {\n clearInterval(interval);\n resolve(undefined);\n }, 5000);\n });\n if (get().conversationInfos?.[conversationId]) return;\n }\n\n set((state) => ({\n isFetchingInfo: { ...(state.isFetchingInfo || {}), [conversationId]: true }\n }));\n\n try {\n const response = await fetchConversationInfo(conversationId);\n const raw =\n response?.data?.conversation ||\n response?.data?.data ||\n response?.conversation ||\n response?.data ||\n response;\n if (raw && (response?.success !== false)) {\n const normalized = {\n ...raw,\n _id: raw._id || raw.id || conversationId,\n createdAt: raw.createdAt || raw.created_at || raw.updatedAt || raw.updated_at,\n };\n set((state) => ({\n conversationInfos: { ...state.conversationInfos, [conversationId]: normalized }\n }));\n }\n } catch (error) {\n console.error(\"fetchConversationInfo failed:\", error);\n } finally {\n set((state) => {\n const isFetchingInfo = { ...(state.isFetchingInfo || {}) };\n delete isFetchingInfo[conversationId];\n return { isFetchingInfo };\n });\n }\n },\n\n updateGroupPermissions: async (conversationId, permissions) => {\n try {\n const response = await updateConversation({\n conversationId,\n groupPermissions: permissions\n });\n if (response.success) {\n // Refresh info\n await get().fetchConversationInfo(conversationId);\n // Notify other participants via socket\n get().emitConversationUpdate({ conversationId });\n }\n } catch (error) {\n console.error(\"updateGroupPermissions failed:\", error);\n }\n },\n\n updateGroupDetails: async (conversationId, details) => {\n try {\n const response = await updateGroupInformation({\n conversationId,\n ...details\n });\n if (response.success) {\n // Refresh info\n await get().fetchConversationInfo(conversationId);\n // Also refresh conversations list to update sidebar cache\n await get().fetchConversations(20, 1);\n // Notify other participants via socket\n get().emitConversationUpdate({ conversationId });\n }\n } catch (error) {\n console.error(\"updateGroupDetails failed:\", error);\n }\n },\n\n manageGroupMembers: async (payload) => {\n try {\n const response = await addRemoveGroupMembers(payload);\n if (response.success) {\n // Refresh info\n await get().fetchConversationInfo(payload.conversationId);\n // Notify other participants via socket\n get().emitConversationUpdate({ conversationId: payload.conversationId });\n }\n } catch (error) {\n console.error(\"manageGroupMembers failed:\", error);\n }\n },\n\n manageGroupAdmins: async (payload) => {\n try {\n const response = await addRemoveGroupAdmins(payload);\n if (response.success) {\n // Refresh info\n await get().fetchConversationInfo(payload.conversationId);\n // Notify other participants via socket\n get().emitConversationUpdate({ conversationId: payload.conversationId });\n }\n } catch (error) {\n console.error(\"manageGroupAdmins failed:\", error);\n }\n },\n\n // Messages Reception\n receivedDM: (lastDM) => handleReceivedDM(set, get, lastDM),\n receivedGroupMessage: (lastDM) => handleReceivedGroupMessage(set, get, lastDM),\n receivedEditDM: (payload) => handleEditDM(set, get, payload),\n receivedDeleteForMe: (payload) => handleDeleteDM(set, get, payload, 'me'),\n receivedDeleteForEveryone: (payload) => handleDeleteDM(set, get, payload, 'everyone'),\n receivedDmClearChat: (payload: { conversationId: string }) => {\n const { conversationId } = payload;\n if (!conversationId) return;\n\n set((state: any) => {\n const nextMessagesByConversation = { ...state.messagesByConversation };\n nextMessagesByConversation[conversationId] = [];\n\n const nextConversations = state.conversations.map((c: any) => c);\n\n // Keep isClearingChat: true while we re-fetch messages\n // This ensures the loader stays open until data is actually fresh from API\n const nextIsClearingChat = { ...state.isClearingChat, [conversationId]: true };\n\n return {\n messagesByConversation: nextMessagesByConversation,\n messagesMetadata: {\n ...state.messagesMetadata,\n [conversationId]: emptyMessagesMetadata()\n },\n conversations: nextConversations,\n isClearingChat: nextIsClearingChat\n };\n });\n\n // Re-fetch messages from API to ensure we are in sync with cleared state\n get().fetchMessages(conversationId).finally(() => {\n set((state: any) => {\n const nextIsClearingChat = { ...state.isClearingChat };\n delete nextIsClearingChat[conversationId];\n return { isClearingChat: nextIsClearingChat };\n });\n });\n },\n receivedGroupClearChat: (payload: { conversationId: string }) => {\n const { conversationId } = payload;\n if (!conversationId) return;\n\n set((state: any) => {\n const nextMessagesByConversation = { ...state.messagesByConversation };\n nextMessagesByConversation[conversationId] = [];\n\n const nextConversations = state.conversations.map((c: any) => c);\n\n const nextIsClearingChat = { ...state.isClearingChat, [conversationId]: true };\n\n return {\n messagesByConversation: nextMessagesByConversation,\n messagesMetadata: {\n ...state.messagesMetadata,\n [conversationId]: emptyMessagesMetadata()\n },\n conversations: nextConversations,\n isClearingChat: nextIsClearingChat\n };\n });\n\n get().fetchMessages(conversationId).finally(() => {\n set((state: any) => {\n const nextIsClearingChat = { ...state.isClearingChat };\n delete nextIsClearingChat[conversationId];\n return { isClearingChat: nextIsClearingChat };\n });\n });\n },\n receivedDmDeleteConversation: (payload: { conversationId: string }) => {\n const { conversationId } = payload;\n if (!conversationId) return;\n\n set((state: any) => ({\n isDeletingConversation: { ...state.isDeletingConversation, [conversationId]: true }\n }));\n\n get().fetchConversations(20, 1).finally(() => {\n set((state: any) => {\n const nextIsDeletingConversation = { ...state.isDeletingConversation };\n delete nextIsDeletingConversation[conversationId];\n \n const nextMessagesByConversation = { ...state.messagesByConversation };\n const nextMessagesMetadata = { ...state.messagesMetadata };\n delete nextMessagesByConversation[conversationId];\n delete nextMessagesMetadata[conversationId];\n\n return { \n isDeletingConversation: nextIsDeletingConversation,\n messagesByConversation: nextMessagesByConversation,\n messagesMetadata: nextMessagesMetadata\n };\n });\n });\n },\n receivedGroupDeleteConversation: (payload: { conversationId: string }) => {\n const { conversationId } = payload;\n if (!conversationId) return;\n\n set((state: any) => ({\n isDeletingConversation: { ...state.isDeletingConversation, [conversationId]: true }\n }));\n\n get().fetchConversations(20, 1).finally(() => {\n set((state: any) => {\n const nextIsDeletingConversation = { ...state.isDeletingConversation };\n delete nextIsDeletingConversation[conversationId];\n \n const nextMessagesByConversation = { ...state.messagesByConversation };\n const nextMessagesMetadata = { ...state.messagesMetadata };\n delete nextMessagesByConversation[conversationId];\n delete nextMessagesMetadata[conversationId];\n\n return { \n isDeletingConversation: nextIsDeletingConversation,\n messagesByConversation: nextMessagesByConversation,\n messagesMetadata: nextMessagesMetadata\n };\n });\n });\n },\n receivedReactionAdd: (payload) => handleGroupReactionAddReceive(set, get, payload),\n receivedReactionRemove: (payload) => handleGroupReactionRemoveReceive(set, get, payload),\n receivedGroupReactionAdd: (payload) => handleGroupReactionAddReceive(set, get, payload),\n receivedGroupReactionRemove: (payload) => handleGroupReactionRemoveReceive(set, get, payload),\n receivedPinUpdate: (payload) => handlePinUpdate(set, get, payload),\n receivedStarUpdate: (payload) => handleStarUpdate(set, get, payload),\n\n // Status Updates\n receivedStatusUpdate: (payload) => {\n let { conversationId, messageId, status } = extractMessageData(payload);\n\n if (!messageId) return;\n\n // Store the status update for useChatSync hook\n set({ lastStatusUpdate: payload });\n\n // Resolve conversationId if missing\n if (!conversationId) {\n conversationId = findConversationIdByMessageId(get().messagesByConversation, messageId);\n }\n\n if (!conversationId) return;\n\n set((state: any) => {\n const messages = state.messagesByConversation[conversationId] || [];\n return {\n messagesByConversation: {\n ...state.messagesByConversation,\n [conversationId]: messages.map((m: any) => String(m._id || m.id) === String(messageId) ? { ...m, status } : m)\n },\n conversations: state.conversations.map((c: any) =>\n (String(c._id) === String(conversationId) && c.lastMessage && String(c.lastMessage._id || c.lastMessage.id) === String(messageId))\n ? { ...c, lastMessage: { ...c.lastMessage, status } }\n : c\n )\n };\n });\n },\n\n receivedGroupStatusUpdate: (payload) => {\n let { messageId, status, conversationId } = extractMessageData(payload);\n\n // Sync with useChatSync hook\n set({ lastStatusUpdate: payload });\n\n // CASE 1: Specific Message Update\n if (messageId) {\n if (!conversationId) {\n conversationId = findConversationIdByMessageId(get().messagesByConversation, messageId);\n }\n\n if (!conversationId) return;\n\n set((state: any) => {\n const messages = state.messagesByConversation[conversationId] || [];\n return {\n messagesByConversation: {\n ...state.messagesByConversation,\n [conversationId]: messages.map((m: any) => \n String(m._id || m.id) === String(messageId) ? { ...m, status } : m\n )\n },\n conversations: state.conversations.map((c: any) =>\n (String(c._id) === String(conversationId) && c.lastMessage && String(c.lastMessage._id || c.lastMessage.id) === String(messageId))\n ? { ...c, lastMessage: { ...c.lastMessage, status } }\n : c\n )\n };\n });\n return;\n }\n\n // CASE 2: conversationId only (Whole conversation read update)\n if (conversationId && status === 'read') {\n set((state: any) => {\n const loggedUserDetails = get().loggedUserDetails || state.loggedUserDetails;\n const myId = loggedUserDetails?._id || loggedUserDetails?.id;\n\n const messages = state.messagesByConversation[conversationId] || [];\n // Mark all MY (sender) messages as read in this conversation\n const nextMessages = messages.map((m: any) => \n String(m.sender?._id || m.sender) === String(myId) ? { ...m, status: 'read' as const } : m\n );\n\n const nextConversations = state.conversations.map((c: any) => {\n if (String(c._id) !== String(conversationId)) return c;\n \n let nextLastMessage = c.lastMessage;\n if (nextLastMessage && String(nextLastMessage.sender?._id || nextLastMessage.sender) === String(myId)) {\n nextLastMessage = { ...nextLastMessage, status: 'read' };\n }\n\n return { ...c, lastMessage: nextLastMessage };\n });\n\n return {\n messagesByConversation: {\n ...state.messagesByConversation,\n [conversationId]: nextMessages\n },\n conversations: nextConversations\n };\n });\n }\n },\n\n receivedGroupLeave: (payload: any) => {\n const { conversationId, success } = payload;\n if (!success || !conversationId) return;\n\n set((state: any) => ({\n conversations: state.conversations.map((c: any) =>\n String(c._id) === String(conversationId) ? { ...c, isLeft: true } : c\n )\n }));\n },\n\n toggleBlock: (userId, isBlocked) => {\n set((state: any) => ({\n conversations: state.conversations.map((c: any) => {\n const otherParticipant = c.participants.find((p: any) => String(p._id || p) === String(userId));\n if (otherParticipant && !c.isGroup) {\n return { ...c, isBlocked };\n }\n return c;\n })\n }));\n },\n\n\n\n\n // Fetching\n fetchConversations: async (limit = 10, page = 1, search = \"\", force = false) => {\n const fetchKey = `${limit}:${page}:${search}`;\n const state = get();\n if (state.isFetchingConversations && !force) return;\n if (\n !force &&\n page === 1 &&\n state.lastConversationsFetchKey === fetchKey &&\n state.conversations.length > 0\n ) {\n return;\n }\n\n set({ isFetchingConversations: true, lastConversationsFetchKey: fetchKey });\n try {\n const response = await fetchConversations(limit, page, search);\n const data = safelyExtractArray(response);\n set((state) => ({\n conversations: page === 1 ? data : [...state.conversations, ...data],\n conversationsHasMore: data.length === limit,\n conversationsPage: page,\n isFetchingConversations: false,\n }));\n } catch (err) {\n set({ isFetchingConversations: false });\n }\n },\n resetConversations: () =>\n set({\n conversations: [],\n conversationsPage: 1,\n conversationsHasMore: true,\n lastConversationsFetchKey: null,\n sidebarConversationsSearchKey: null,\n }),\n\n fetchMessages: async (conversationId, limit = 20, cursor?: string | null) => {\n const isInitialLoad = cursor === undefined || cursor === null;\n const state = get();\n const meta = state.messagesMetadata[conversationId];\n\n if (state.isFetchingMessages) {\n if (isInitialLoad && meta?.isFirstPage) return;\n if (!isInitialLoad && meta?.nextCursor === cursor) return;\n }\n\n set({ isFetchingMessages: true });\n try {\n const response = await fetchMessages(\n conversationId,\n limit,\n isInitialLoad ? undefined : cursor\n );\n const data = safelyExtractArray(response);\n const pagination = response.data?.pagination;\n\n set((state: any) => {\n const existing = state.messagesByConversation[conversationId] || [];\n const merged = isInitialLoad ? data : [...data, ...existing];\n\n const uniqueMap = new Map();\n merged.forEach((m: any) => {\n const id = String(m._id || m.id);\n if (id) uniqueMap.set(id, m);\n });\n const unique = Array.from(uniqueMap.values());\n\n return {\n messagesByConversation: { ...state.messagesByConversation, [conversationId]: unique },\n messagesMetadata: {\n ...state.messagesMetadata,\n [conversationId]: {\n nextCursor: pagination?.nextCursor ?? null,\n hasMore: pagination?.hasNextPage ?? false,\n isFirstPage: isInitialLoad,\n },\n },\n isFetchingMessages: false,\n };\n });\n } catch (err: any) {\n console.error(\"fetchMessages failed:\", err);\n if (err?.response?.status === 429) {\n const resetHeader = err.response.headers?.[\"ratelimit-reset\"];\n const resetSeconds = resetHeader ? parseInt(String(resetHeader), 10) : 120;\n get().setRateLimitResetAt(Date.now() + resetSeconds * 1000);\n get().handleAppError(\"Rate limit exceeded, slow down\");\n }\n set({ isFetchingMessages: false });\n }\n },\n\n fetchPinnedMessages: async (conversationId) => {\n const response = await fetchPinnedMessages(conversationId);\n const data = safelyExtractArray(response);\n set((state) => ({ pinnedMessagesByConversation: { ...state.pinnedMessagesByConversation, [conversationId]: data } }));\n },\n fetchStarredMessages: async (conversationId) => {\n const response = await fetchStarredMessages(conversationId);\n const data = safelyExtractArray(response);\n set((state) => ({ starredMessagesByConversation: { ...state.starredMessagesByConversation, [conversationId]: data } }));\n },\n\n // Emissions\n emitDmSend: (payload) => {\n const tempId = payload.tempId || `temp-${Date.now()}`;\n set((state) => ({ messagePendingActions: { ...state.messagePendingActions, [tempId]: ['send'] } }));\n socketService.emit(\"dm_send\", { ...payload, tempId });\n },\n emitDmEdit: (payload) => {\n set((state) => ({ messagePendingActions: { ...state.messagePendingActions, [payload.messageId]: ['edit'] } }));\n socketService.emit(\"dm_edit\", payload);\n },\n emitDmDelete: (payload) => {\n set((state) => ({ messagePendingActions: { ...state.messagePendingActions, [payload.messageId]: ['delete'] } }));\n socketService.emit(\"dm_delete\", payload);\n },\n emitDmClearChat: (payload) => {\n set((state) => ({ isClearingChat: { ...state.isClearingChat, [payload.conversationId]: true } }));\n socketService.emitDmClearChat(payload);\n },\n emitGroupClearChat: (payload) => {\n set((state) => ({ isClearingChat: { ...state.isClearingChat, [payload.conversationId]: true } }));\n socketService.emitGroupClearChat(payload);\n },\n emitDmDeleteConversation: (payload) => {\n set((state) => ({ isDeletingConversation: { ...state.isDeletingConversation, [payload.conversationId]: true } }));\n socketService.emitDmDeleteConversation(payload);\n },\n emitGroupDeleteConversation: (payload) => {\n set((state) => ({ isDeletingConversation: { ...state.isDeletingConversation, [payload.conversationId]: true } }));\n socketService.emitGroupDeleteConversation(payload);\n },\n emitDmReactionAdd: (p) => {\n handleGroupReactionAddReceive(set, get, p);\n socketService.emit(\"dm_reaction_add\", p);\n },\n emitDmReactionRemove: (p) => {\n handleGroupReactionRemoveReceive(set, get, p);\n socketService.emit(\"dm_reaction_remove\", p);\n },\n emitDmPin: (p) => {\n handlePinUpdate(set, get, { ...p, isPinned: true });\n set((state) => ({ messagePendingActions: { ...state.messagePendingActions, [p.messageId]: ['pin'] } }));\n socketService.emit(\"dm_pin\", p);\n },\n emitDmUnpin: (p) => {\n handlePinUpdate(set, get, { ...p, isPinned: false });\n set((state) => ({ messagePendingActions: { ...state.messagePendingActions, [p.messageId]: ['unpin'] } }));\n socketService.emit(\"dm_unpin\", p);\n },\n emitDmStar: (p) => {\n handleStarUpdate(set, get, { ...p, isStarred: true });\n set((state) => ({ messagePendingActions: { ...state.messagePendingActions, [p.messageId]: ['star'] } }));\n socketService.emit(\"dm_star\", p);\n },\n emitDmUnstar: (p) => {\n handleStarUpdate(set, get, { ...p, isStarred: false });\n set((state) => ({ messagePendingActions: { ...state.messagePendingActions, [p.messageId]: ['unstar'] } }));\n socketService.emit(\"dm_unstar\", p);\n },\n emitDmForward: (p) => {\n const targetConversationId = p.targetConversationIds?.[0];\n\n setPendingForward(p.messageId, {\n targets: p.targetConversationIds || [],\n source: p.sourceConversationId,\n });\n\n set((state) => ({ messagePendingActions: { ...state.messagePendingActions, [p.messageId]: ['forward'] } }));\n socketService.emit(\"dm_forward\", {\n messageId: p.messageId,\n sender: p.sender,\n targetConversationIds: p.targetConversationIds,\n ...(targetConversationId ? { conversationId: String(targetConversationId) } : {}),\n ...(p.receiver ? { receiver: p.receiver } : {}),\n });\n },\n\n // Group Emissions\n emitGroupJoin: (p) => socketService.emitGroupJoin(p),\n emitGroupMessageSend: (payload) => {\n const { emitGroupMessageSend: triggerGroupSend } = require('../actions/group.actions');\n triggerGroupSend(set, get, payload);\n },\n emitGroupTypingStart: (p) => socketService.emitGroupTypingStart(p),\n\n emitGroupTypingStop: (p) => socketService.emitGroupTypingStop(p),\n emitGroupEdit: (p) => socketService.emitGroupEdit(p),\n emitGroupReactionAdd: (p) => {\n // optimistic update (backend group_reaction_*_receive payloads can be partial)\n handleGroupReactionAddReceive(set, get, p);\n socketService.emitGroupReactionAdd(p);\n },\n emitGroupReactionRemove: (p) => {\n // optimistic update (backend group_reaction_*_receive payloads can be partial)\n handleGroupReactionRemoveReceive(set, get, p);\n socketService.emitGroupReactionRemove(p);\n },\n emitGroupMarkRead: (p) => socketService.emitGroupMarkRead(p),\n emitGroupMessageDelivered: (p) => socketService.emit(SOCKET_EVENTS.GROUP_MESSAGE_DELIVERED, p),\n emitGroupDelete: (p) => {\n set((state) => ({ messagePendingActions: { ...state.messagePendingActions, [p.messageId]: ['delete'] } }));\n socketService.emitGroupDelete(p);\n },\n emitGroupPin: (p) => {\n handlePinUpdate(set, get, { ...p, isPinned: true });\n set((state) => ({ messagePendingActions: { ...state.messagePendingActions, [p.messageId]: ['pin'] } }));\n socketService.emitGroupPin(p);\n },\n emitGroupUnpin: (p) => {\n handlePinUpdate(set, get, { ...p, isPinned: false });\n set((state) => ({ messagePendingActions: { ...state.messagePendingActions, [p.messageId]: ['unpin'] } }));\n socketService.emitGroupUnpin(p);\n },\n emitGroupStar: (p) => {\n handleStarUpdate(set, get, { ...p, isStarred: true });\n set((state) => ({ messagePendingActions: { ...state.messagePendingActions, [p.messageId]: ['star'] } }));\n socketService.emitGroupStar(p);\n },\n emitGroupUnstar: (p) => {\n handleStarUpdate(set, get, { ...p, isStarred: false });\n set((state) => ({ messagePendingActions: { ...state.messagePendingActions, [p.messageId]: ['unstar'] } }));\n socketService.emitGroupUnstar(p);\n },\n emitGroupForward: (p) => {\n const targetConversationId = p.targetConversationIds?.[0];\n\n setPendingForward(p.messageId, {\n targets: p.targetConversationIds || [],\n source: p.sourceConversationId,\n });\n\n set((state) => ({ messagePendingActions: { ...state.messagePendingActions, [p.messageId]: ['forward'] } }));\n socketService.emitGroupForward({\n messageId: p.messageId,\n sender: p.sender,\n targetConversationIds: p.targetConversationIds,\n ...(targetConversationId ? { conversationId: String(targetConversationId) } : {}),\n ...(p.sourceConversationId ? { sourceConversationId: String(p.sourceConversationId) } : {}),\n });\n },\n clearForwardPending: (messageId) => {\n clearForwardPendingActions(set, messageId);\n },\n emitConversationUpdate: (p: { conversationId: string }) => socketService.emitConversationUpdate(p),\n emitGroupLeave: (p: { conversationId: string, sender: string }) => socketService.emitGroupLeave(p),\n\n emitTypingStart: (p) => socketService.emit(\"dm_typing_start\", p),\n emitTypingStop: (p) => socketService.emit(\"dm_typing_stop\", p),\n emitMarkAsRead: (p) => socketService.emit(\"dm_mark_read\", p),\n\n receivedDMMarkRead: (payload) => {\n const { conversationId } = payload;\n const readerId = payload.userId || payload.readerId || payload.readBy || payload.sender || payload.senderId;\n if (!conversationId) return;\n\n const readStatus = payload.status || 'read';\n\n set({ lastDMMarkRead: payload });\n\n set((state: any) => {\n const messages = state.messagesByConversation[conversationId] || [];\n const loggedUserDetails = get().loggedUserDetails || state.loggedUserDetails;\n const myId = loggedUserDetails?._id || loggedUserDetails?.id;\n\n const isReaderMe = String(readerId) === String(myId);\n\n const nextMessages = messages.map((m: any) => {\n if (isReaderMe) return m;\n const senderId = String(m.sender?._id || m.sender);\n if (senderId === String(myId)) {\n return { ...m, status: readStatus };\n }\n return m;\n });\n\n const nextConversations = state.conversations.map((c: any) => {\n if (String(c._id) !== String(conversationId)) return c;\n\n const nextUnreadCount = isReaderMe ? 0 : normalizeUnreadCount(c.unreadCount);\n\n let nextLastMessage = c.lastMessage;\n if (\n nextLastMessage &&\n !isReaderMe &&\n String(nextLastMessage.sender?._id || nextLastMessage.sender) === String(myId)\n ) {\n nextLastMessage = { ...nextLastMessage, status: readStatus };\n }\n\n return { ...c, unreadCount: nextUnreadCount, lastMessage: nextLastMessage };\n });\n\n return {\n messagesByConversation: {\n ...state.messagesByConversation,\n [conversationId]: nextMessages\n },\n conversations: nextConversations\n };\n });\n },\n\n receivedGroupMarkRead: (payload) => {\n const { conversationId } = payload;\n\n const readerId = payload.userId || payload.readerId || payload.sender || payload.senderId;\n if (!conversationId) return;\n\n set({ lastStatusUpdate: { conversationId, status: 'read' } });\n\n set((state: any) => {\n const messages = state.messagesByConversation[conversationId] || [];\n const loggedUserDetails = get().loggedUserDetails || state.loggedUserDetails;\n const myId = loggedUserDetails?._id || loggedUserDetails?.id;\n\n const isReaderMe = String(readerId) === String(myId);\n\n const nextMessages = messages.map((m: any) => {\n if (isReaderMe) return m;\n const senderId = String(m.sender?._id || m.sender);\n if (senderId === String(myId)) {\n return { ...m, status: 'read' as const };\n }\n return m;\n });\n\n const nextConversations = state.conversations.map((c: any) => {\n if (String(c._id) !== String(conversationId)) return c;\n\n const nextUnreadCount = isReaderMe ? 0 : normalizeUnreadCount(c.unreadCount);\n\n let nextLastMessage = c.lastMessage;\n if (\n nextLastMessage &&\n !isReaderMe &&\n String(nextLastMessage.sender?._id || nextLastMessage.sender) === String(myId)\n ) {\n nextLastMessage = { ...nextLastMessage, status: 'read' };\n }\n\n return { ...c, unreadCount: nextUnreadCount, lastMessage: nextLastMessage };\n });\n\n return {\n messagesByConversation: {\n ...state.messagesByConversation,\n [conversationId]: nextMessages\n },\n conversations: nextConversations\n };\n });\n },\n\n receivedMarkRead: (payload) => {\n const { conversationId } = payload;\n const readerId = payload.userId || payload.readerId || payload.sender || payload.senderId;\n if (!conversationId) return;\n set((state: any) => {\n const messages = state.messagesByConversation[conversationId] || [];\n const loggedUserDetails = get().loggedUserDetails || state.loggedUserDetails;\n const myId = loggedUserDetails?._id || loggedUserDetails?.id;\n\n const isReaderMe = String(readerId) === String(myId);\n\n // In groups, a \"read\" event means:\n // - if *I* read: clear *my* unread counter for this conversation (UI count should become 0)\n const nextMessages = messages;\n\n const nextConversations = state.conversations.map((c: any) => {\n if (String(c._id) !== String(conversationId)) return c;\n\n const nextUnreadCount = isReaderMe ? 0 : normalizeUnreadCount(c.unreadCount);\n\n const nextLastMessage = c.lastMessage || null;\n\n return { ...c, unreadCount: nextUnreadCount, lastMessage: nextLastMessage };\n });\n\n return {\n messagesByConversation: {\n ...state.messagesByConversation,\n [conversationId]: nextMessages\n },\n conversations: nextConversations\n };\n });\n },\n\n receivedCountUpdate: (payload) => {\n const { conversationId, pinnedCount, starredCount } = payload;\n if (!conversationId) return;\n set((state: any) => ({\n liveConversationCounts: {\n ...state.liveConversationCounts,\n [conversationId]: { pinnedCount, starredCount }\n },\n conversations: state.conversations.map((c: any) =>\n String(c._id) === String(conversationId)\n ? { ...c, pinnedCount, starredCount }\n : c\n )\n }));\n },\n\n receivedForward: (payload) => {\n const sourceMessageId =\n payload?.messageId ||\n payload?.sourceMessageId ||\n payload?.originalMessageId;\n\n const pendingForward =\n (sourceMessageId ? peekPendingForward(sourceMessageId) : undefined) ||\n peekMostRecentPendingForward();\n\n const forwardedPayload = payload?.message || payload?.forwardedMessage || payload;\n const { messageId: forwardedMessageId, conversationId: messageConversationId } = extractMessageData(forwardedPayload);\n\n clearForwardPendingActions(set, sourceMessageId, forwardedMessageId, payload?.originalMessageId);\n\n const targetFromPayload =\n payload?.targetConversationId ||\n payload?.targetConversationIds?.[0] ||\n forwardedPayload?.targetConversationId ||\n forwardedPayload?.targetConversationIds?.[0];\n\n let resolvedConversationId =\n pendingForward?.targets?.[0] ||\n targetFromPayload ||\n messageConversationId ||\n payload?.conversationId;\n\n if (\n pendingForward?.source &&\n pendingForward?.targets?.[0] &&\n String(resolvedConversationId) === String(pendingForward.source)\n ) {\n resolvedConversationId = pendingForward.targets[0];\n }\n\n const normalized = {\n ...(forwardedPayload?.message || forwardedPayload),\n conversationId: resolvedConversationId,\n isForwarded: true,\n };\n\n if (!resolvedConversationId && !normalized.content && !forwardedMessageId) return;\n\n const targetConversation = get().conversations.find(\n (c: any) => String(c._id) === String(resolvedConversationId)\n );\n const isGroup = isGroupConversation(targetConversation) ||\n resolveIsGroupFromPayload(normalized, get().conversations);\n\n if (isGroup) {\n handleReceivedGroupMessage(set, get, normalized);\n } else {\n handleReceivedDM(set, get, normalized);\n }\n\n if (resolvedConversationId) {\n get().fetchMessages(resolvedConversationId);\n }\n },\n\n // Typing\n setTypingStart: (payload) => {\n const { conversationId } = payload;\n const userId = payload.userId || payload.sender || payload.senderId;\n if (!conversationId || !userId) return;\n\n set((state: any) => {\n const current = state.typingUsers[conversationId] || [];\n if (!current.includes(String(userId))) {\n return { typingUsers: { ...state.typingUsers, [conversationId]: [...current, String(userId)] } };\n }\n return state;\n });\n },\n setTypingStop: (payload) => {\n const { conversationId } = payload;\n const userId = payload.userId || payload.sender || payload.senderId;\n if (!conversationId || !userId) return;\n\n set((state: any) => {\n const current = state.typingUsers[conversationId] || [];\n return {\n typingUsers: {\n ...state.typingUsers,\n [conversationId]: current.filter((id: string) => String(id) !== String(userId))\n }\n };\n });\n },\n\n updateConversation: (updated) => {\n if (!updated) return;\n\n const conversationId = updated._id || updated.conversationId;\n if (!conversationId) return;\n\n set((state: any) => {\n const nextConversationInfos = { ...state.conversationInfos };\n if (nextConversationInfos[conversationId]) {\n nextConversationInfos[conversationId] = {\n ...nextConversationInfos[conversationId],\n ...updated,\n groupPermissions: updated.groupPermissions\n ? { ...nextConversationInfos[conversationId].groupPermissions, ...updated.groupPermissions }\n : nextConversationInfos[conversationId].groupPermissions\n };\n }\n\n const nextConversations = state.conversations.map((c: any) => {\n if (String(c._id) !== String(conversationId)) return c;\n\n return {\n ...c,\n ...updated,\n lastMessage: updated.lastMessage || c.lastMessage,\n // Group conversation_update no longer carries per-user unread; keep local count\n unreadCount: updated.unreadCount !== undefined\n ? normalizeUnreadCount(updated.unreadCount)\n : normalizeUnreadCount(c.unreadCount),\n };\n });\n\n return {\n conversationInfos: nextConversationInfos,\n conversations: nextConversations\n };\n });\n },\n\n fetchSearchMessageContext: async (messageId) => {\n set({ isSearchActive: true, searchedMessageId: messageId, isFetchingMessages: true });\n try {\n const response = await searchMessagesContext(messageId);\n const data = response.data?.list || response.data?.messages || response.messages || response.data || [];\n const highlightId = response.data?.highlightMessageId || messageId;\n \n if (data.length > 0) {\n const conversationId = data[0].conversationId;\n if (conversationId) {\n set((state: any) => ({\n searchedMessageId: highlightId,\n messagesByConversation: {\n ...state.messagesByConversation,\n [conversationId]: data\n },\n messagesMetadata: {\n ...state.messagesMetadata,\n [conversationId]: {\n ...emptyMessagesMetadata(),\n hasMore: false,\n }\n },\n isFetchingMessages: false\n }));\n }\n } else {\n set({ isFetchingMessages: false });\n }\n } catch (error) {\n console.error(\"fetchSearchMessageContext failed:\", error);\n set({ isFetchingMessages: false });\n }\n },\n\n setSearchActive: (active) => set({ isSearchActive: active }),\n setSearchedMessageId: (messageId) => set({ searchedMessageId: messageId }),\n\n markDeletedForMe: (messageId) => set((state: any) => ({ deletedForMeIds: [...state.deletedForMeIds, messageId] })),\n});\n","import { create } from 'zustand';\nimport { persist } from 'zustand/middleware';\nimport { AppStoreState } from './types/store.types';\nimport { createAuthSlice } from './slices/auth.slice';\nimport { createSocketSlice } from './slices/socket.slice';\n\nexport const useStore = create<AppStoreState>()(\n persist(\n (set, get, store) => ({\n ...createAuthSlice(set, get, store),\n ...createSocketSlice(set, get, store),\n }),\n {\n name: 'chat-ui-storage',\n partialize: (state) => ({\n loggedUserDetails: state.loggedUserDetails,\n isAuthenticate: state.isAuthenticate,\n accessToken: state.accessToken,\n tenantId: state.tenantId,\n isTenant: state.isTenant,\n }),\n }\n )\n);\n\nexport default useStore;\n","import React, { createContext, useContext } from 'react';\nimport { IChannel, IMessage } from '../types/chats.types';\nimport { useStore } from '../store/useStore';\nimport { setChatClientId, setChatAccessToken, setChatBaseURL, clientUserLogin } from '../services/api.service';\nimport socketService from '../services/socket.service';\nimport { TooltipProvider } from '../ui/tooltip';\nimport { resolveUserFromAccessToken } from '../lib/utils';\nimport { useChatSync } from '../hooks/useChatSync';\n\nexport interface UIConfig {\n showSidebarAvatar?: boolean;\n sidebarAvatarColor?: string;\n showChannelDetails?: boolean; // if false, only show channel name\n messageDateFormat?: (date: string) => string;\n}\n\ninterface ChatContextValue {\n activeChannel: IChannel | null;\n setActiveChannel: (channel: IChannel | null) => void;\n onSendMessage?: (content: string, attachments: any[]) => void;\n client?: any;\n theme?: string;\n uiConfig: UIConfig;\n themeColor: string;\n channelsData?: IChannel[];\n messagesData?: Record<string, IMessage[]>;\n}\n\nconst ChatContext = createContext<ChatContextValue | undefined>(undefined);\n\nexport const useChatContext = () => {\n const context = useContext(ChatContext);\n if (!context) {\n throw new Error('useChatContext must be used within a Chat provider');\n }\n return context;\n};\n\nexport interface ChatProps {\n children: React.ReactNode;\n onSendMessage?: (content: string, attachments: any[]) => void;\n client?: { id: string };\n theme?: string;\n uiConfig?: UIConfig;\n themeColor?: string;\n accessToken?: string;\n loggedUserDetails?: any;\n apiUrl?: string;\n socketUrl?: string;\n channelsData?: IChannel[];\n messagesData?: Record<string, IMessage[]>;\n onMessageReceived?: (message: any) => void;\n onSocketConnected?: (socketId: string) => void;\n onSocketError?: (error: string) => void;\n}\n\nexport const Chat = ({\n children,\n onSendMessage,\n client,\n theme = \"light\",\n uiConfig = {\n showSidebarAvatar: true,\n showChannelDetails: true\n },\n themeColor = \"#7494ec\",\n accessToken,\n loggedUserDetails,\n apiUrl = \"http://localhost:5000/api/v1\",\n socketUrl = \"http://localhost:5000\",\n channelsData,\n messagesData,\n onMessageReceived,\n onSocketConnected,\n onSocketError\n}: ChatProps) => {\n const setSession = useStore((s) => s.setSession);\n const setSessionReady = useStore((s) => s.setSessionReady);\n const isSessionReady = useStore((s) => s.isSessionReady);\n const setActiveChannel = useStore((s) => s.setActiveChannel);\n const activeChannel = useStore((s) => s.activeChannel);\n const lastDM = useStore((s) => s.lastDM);\n const status = useStore((s) => s.status);\n const error = useStore((s) => s.error);\n\n // Keep real-time message sync active for composable MessageList + MessageInput usage\n useChatSync();\n\n React.useEffect(() => {\n const clientId = client?.id;\n\n const initializeChat = async () => {\n if (!clientId || !loggedUserDetails) return;\n\n setSessionReady(false);\n\n setChatClientId(clientId);\n if (apiUrl) setChatBaseURL(apiUrl);\n\n let currentToken = accessToken || \"\";\n let sessionUser = resolveUserFromAccessToken(currentToken, loggedUserDetails);\n\n // client-user must complete before any list/conversation API calls\n try {\n const loginResponse = await clientUserLogin(sessionUser.name, sessionUser.email);\n const loginData = loginResponse?.data ?? loginResponse;\n const loginToken = loginData?.accessToken || loginResponse?.accessToken || \"\";\n const loginUser = loginData?.user || loginResponse?.user;\n\n if (loginToken) {\n currentToken = loginToken;\n }\n if (loginUser) {\n sessionUser = {\n ...sessionUser,\n ...loginUser,\n _id: loginUser._id || sessionUser._id,\n };\n }\n } catch (error) {\n console.error(\"ChatContext: client-user login failed\", error);\n if (!currentToken) {\n setSessionReady(false);\n return;\n }\n }\n\n if (currentToken) {\n setChatAccessToken(currentToken);\n }\n\n setSession({\n accessToken: currentToken,\n user: sessionUser,\n tenantId: clientId,\n });\n\n const extraHeaders: Record<string, string> = {\n platform: \"web\",\n tenantId: clientId || \"\",\n isTenant: \"true\",\n };\n if (currentToken) {\n extraHeaders.Authorization = `Bearer ${currentToken}`;\n }\n\n const resolvedSocketUrl = (socketUrl || apiUrl || \"\").replace(/\\/api\\/v1\\/?$/, \"\");\n\n socketService.connect({\n url: resolvedSocketUrl,\n options: {\n path: \"/connection\",\n withCredentials: true,\n auth: currentToken ? { accessToken: currentToken } : {},\n query: {\n platform: \"web\",\n tenantId: clientId || \"\",\n isTenant: \"true\",\n },\n extraHeaders,\n transports: [\"websocket\", \"polling\"],\n reconnection: true,\n reconnectionAttempts: Infinity,\n reconnectionDelay: 2000,\n reconnectionDelayMax: 5000,\n timeout: 20000,\n },\n });\n\n setSessionReady(true);\n };\n\n initializeChat();\n\n return () => {\n setSessionReady(false);\n socketService.disconnect();\n };\n }, [client?.id, loggedUserDetails?._id, loggedUserDetails?.email, accessToken, apiUrl, socketUrl, setSession, setSessionReady]);\n\n // Handle External Callbacks\n React.useEffect(() => {\n if (lastDM && onMessageReceived) {\n onMessageReceived(lastDM);\n }\n }, [lastDM, onMessageReceived]);\n\n React.useEffect(() => {\n if (status === \"connected\" && onSocketConnected) {\n const socketId = useStore.getState().socketId;\n if (socketId) onSocketConnected(socketId);\n }\n }, [status, onSocketConnected]);\n\n React.useEffect(() => {\n if (status === \"error\" && error && onSocketError) {\n onSocketError(error);\n }\n }, [status, error, onSocketError]);\n\n const themeStyles = {\n '--chat-theme': themeColor,\n '--chat-theme-5': `${themeColor}0D`,\n '--chat-theme-10': `${themeColor}1A`,\n '--chat-theme-20': `${themeColor}33`,\n '--chat-theme-40': `${themeColor}66`,\n '--chat-theme-60': `${themeColor}99`,\n '--read-tick-color': '#4fb0ff'\n } as React.CSSProperties;\n\n const contextValue = React.useMemo(\n () => ({\n activeChannel,\n setActiveChannel,\n onSendMessage,\n client,\n theme,\n uiConfig,\n themeColor,\n channelsData,\n messagesData,\n }),\n [\n activeChannel,\n setActiveChannel,\n onSendMessage,\n client,\n theme,\n uiConfig,\n themeColor,\n channelsData,\n messagesData,\n ]\n );\n\n return (\n <ChatContext.Provider value={contextValue}>\n <TooltipProvider>\n <div style={themeStyles} className=\"chat-container-root h-full w-full\">\n {isSessionReady ? children : (\n <div className=\"flex h-full items-center justify-center text-gray-400 font-bold\">\n Initializing session...\n </div>\n )}\n </div>\n </TooltipProvider>\n </ChatContext.Provider>\n );\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\nexport function resolveUserFromAccessToken<T extends { _id?: string; name?: string; email?: string }>(\n accessToken: string | undefined,\n fallback: T\n): T {\n if (!accessToken) return fallback;\n\n try {\n const base64 = accessToken.split(\".\")[1];\n if (!base64) return fallback;\n\n const payload = JSON.parse(\n atob(base64.replace(/-/g, \"+\").replace(/_/g, \"/\"))\n ) as { _id?: string; id?: string; name?: string; email?: string };\n\n const id = payload._id || payload.id;\n if (!id) return fallback;\n\n return {\n ...fallback,\n _id: id,\n name: fallback.name || payload.name || \"\",\n email: fallback.email || payload.email || \"\",\n };\n } catch {\n return fallback;\n }\n}\n","\nimport * as React from \"react\"\nimport { Tooltip as TooltipPrimitive } from \"radix-ui\"\nimport { cn } from \"../lib/utils\"\n\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n )\n}\n\nfunction Tooltip({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n}\n\nfunction TooltipTrigger({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n \"bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance\",\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","import { useEffect, useState } from \"react\";\nimport { IMessage, IChannel } from \"../types/chats.types\";\nimport { useSocketStore } from \"../store/useSocketStore\";\nimport { useAuthStore } from \"../store/useAuthStore\";\nimport {\n findConversationById,\n getOtherParticipantId,\n isGroupConversation,\n resolveIsGroupFromPayload,\n} from \"../store/helpers/store.helpers\";\n\nexport const useChatSync = () => {\n const [localMessages, setLocalMessages] = useState<Record<string, IMessage[]>>({});\n\n const lastDM = useSocketStore((s) => s.lastDM);\n const lastEditDM = useSocketStore((s) => s.lastEditDM);\n const lastDeleteDM = useSocketStore((s) => s.lastDeleteDM);\n const lastPinUpdate = useSocketStore((s) => s.lastPinUpdate);\n const lastStarUpdate = useSocketStore((s) => s.lastStarUpdate);\n const lastReactionUpdate = useSocketStore((s) => s.lastReactionUpdate);\n const lastStatusUpdate = useSocketStore((s) => s.lastStatusUpdate);\n const lastDMMarkRead = useSocketStore((s) => s.lastDMMarkRead);\n const conversations = useSocketStore((s) => s.conversations);\n const messagesByConversation = useSocketStore((s) => s.messagesByConversation);\n const messagesMetadata = useSocketStore((s) => s.messagesMetadata);\n const lastDeletedForMe = useSocketStore((s) => (s as any).lastDeleteDM); // Use generic if not in type\n const loggedUserDetails = useAuthStore((s) => s.loggedUserDetails);\n\n // Sync with store message clearance or reset\n useEffect(() => {\n setLocalMessages(prev => {\n const next = { ...prev };\n let changed = false;\n\n Object.keys(messagesByConversation).forEach(cid => {\n const storeMessages = messagesByConversation[cid];\n const meta = messagesMetadata[cid];\n\n // If the store is explicitly empty for this conversation ID, \n // we must also clear our localMessages state for any key that contains messages from this cid\n if (storeMessages?.length === 0 && meta && !meta.hasMore && meta.isFirstPage) {\n Object.keys(next).forEach(key => {\n if (next[key] && next[key].some(m => String(m.conversationId) === String(cid))) {\n next[key] = [];\n changed = true;\n }\n });\n }\n });\n\n return changed ? next : prev;\n });\n }, [messagesByConversation, messagesMetadata]);\n\n // Sync Pin Updates (Real-time flag check)\n useEffect(() => {\n if (lastPinUpdate) {\n const { conversationId, pinnedMessage } = lastPinUpdate;\n const pinnedByMessageId = new Set((pinnedMessage || []).map((p: any) => String(p.messageId)));\n\n setLocalMessages(prev => {\n const next = { ...prev };\n Object.keys(next).forEach(cid => {\n // Update flags for all messages in local state\n next[cid] = next[cid].map(m => {\n const mid = String(m._id || m.id);\n return {\n ...m,\n isPinned: pinnedByMessageId.has(mid)\n };\n });\n });\n return next;\n });\n }\n }, [lastPinUpdate]);\n\n // Sync Star Updates\n useEffect(() => {\n if (lastStarUpdate) {\n const messageId = lastStarUpdate.messageId || lastStarUpdate._id;\n const isStarred = lastStarUpdate.isStarred ?? (Array.isArray(lastStarUpdate.starredBy) && lastStarUpdate.starredBy.length > 0);\n if (!messageId) return;\n const mid = String(messageId);\n setLocalMessages(prev => {\n const next = { ...prev };\n Object.keys(next).forEach(cid => {\n next[cid] = next[cid].map(m =>\n String(m._id || m.id) === mid ? { ...m, isStarred: !!isStarred } : m\n );\n });\n return next;\n });\n }\n }, [lastStarUpdate]);\n // Sync Reaction Updates\n useEffect(() => {\n if (!lastReactionUpdate) return;\n\n const messageId = lastReactionUpdate.messageId || lastReactionUpdate._id;\n if (!messageId) return;\n const mid = String(messageId);\n\n let storeReactions: any[] | undefined;\n for (const msgs of Object.values(messagesByConversation)) {\n const found = msgs.find((m: any) => String(m._id || m.id) === mid);\n if (found) {\n storeReactions = found.reactions;\n break;\n }\n }\n\n setLocalMessages(prev => {\n const next = { ...prev };\n let changed = false;\n\n Object.keys(next).forEach(channelId => {\n const messages = next[channelId];\n const index = messages.findIndex(m => String(m._id || m.id) === mid);\n if (index === -1) return;\n\n const updated = [...messages];\n const msg = { ...updated[index] };\n const { reaction, sender, action, reactions } = lastReactionUpdate;\n\n if (storeReactions) {\n msg.reactions = storeReactions;\n } else if (Array.isArray(reactions)) {\n const existing = msg.reactions || [];\n const merged = new Map<string, any>();\n [...existing, ...reactions].forEach((r: any) => {\n const key = `${r.reaction}::${String(r.addedBy?._id || r.addedBy || r.sender?._id || r.sender)}`;\n merged.set(key, r);\n });\n msg.reactions = action === 'remove' ? reactions : Array.from(merged.values());\n } else if (reaction) {\n msg.reactions = [...(msg.reactions || [])];\n if (action === 'add') {\n const senderId = String(sender?._id || sender);\n msg.reactions = msg.reactions.filter(\n (r: any) => String(r.sender?._id || r.sender || r.addedBy?._id || r.addedBy) !== senderId\n );\n msg.reactions.push({ reaction, sender, addedBy: sender });\n } else {\n msg.reactions = msg.reactions.filter((r: any) =>\n !(r.reaction === reaction && String(r.sender?._id || r.sender || r.addedBy?._id || r.addedBy) === String(sender?._id || sender))\n );\n }\n } else {\n return;\n }\n\n updated[index] = msg;\n next[channelId] = updated;\n changed = true;\n });\n\n return changed ? next : prev;\n });\n }, [lastReactionUpdate, messagesByConversation]);\n\n // Sync Deletions\n useEffect(() => {\n if (lastDeleteDM) {\n const messageId = lastDeleteDM.messageId || lastDeleteDM._id;\n const deleteType: 'me' | 'everyone' = lastDeleteDM.deleteType || 'everyone';\n\n setLocalMessages(prev => {\n const next = { ...prev };\n Object.keys(next).forEach(channelId => {\n if (deleteType === 'me') {\n // Remove message entirely — only visible to the one who deleted\n next[channelId] = next[channelId].filter(\n m => String(m._id || m.id) !== String(messageId)\n );\n } else {\n // Replace content with deleted placeholder for everyone\n next[channelId] = next[channelId].map(m =>\n String(m._id || m.id) === String(messageId)\n ? { ...m, isDeletedForEveryone: true }\n : m\n );\n }\n });\n return next;\n });\n }\n }, [lastDeleteDM]);\n\n // Sync Edits\n useEffect(() => {\n if (lastEditDM) {\n const messageId = lastEditDM.messageId || lastEditDM._id;\n const content = lastEditDM.content;\n if (!messageId) return;\n\n setLocalMessages(prev => {\n const next = { ...prev };\n Object.keys(next).forEach(channelId => {\n const messages = next[channelId];\n const index = messages.findIndex(m => String(m._id || m.id) === String(messageId));\n if (index !== -1) {\n const updated = [...messages];\n updated[index] = { ...updated[index], content, isEdited: true };\n next[channelId] = updated;\n }\n });\n return next;\n });\n }\n }, [lastEditDM]);\n\n // Sync Incoming Messages & Confirmation\n\n const handleMessageUpdate = (key: string, incomingMsg: IMessage, isMe: boolean) => {\n setLocalMessages(prev => {\n const currentMessages = prev[key] || [];\n const incomingId = String(incomingMsg._id || incomingMsg.id || \"\");\n\n if (isMe) {\n const optimisticIndex = currentMessages.findIndex((m) => {\n const mid = String(m._id || m.id || \"\");\n if (incomingId && mid === incomingId) return true;\n const isPending = !m._id || mid.startsWith(\"temp-\");\n if (!isPending) return false;\n return (\n m.content.trim() === incomingMsg.content.trim() &&\n Math.abs(\n new Date(m.timestamp).getTime() - new Date(incomingMsg.timestamp).getTime()\n ) < 120000\n );\n });\n\n if (optimisticIndex !== -1) {\n const newMessages = [...currentMessages];\n newMessages[optimisticIndex] = incomingMsg;\n return { ...prev, [key]: newMessages };\n }\n }\n\n if (\n incomingId &&\n currentMessages.some(\n (m) => String(m._id || m.id) === incomingId || String(m.id) === incomingId\n )\n ) {\n return prev;\n }\n\n return {\n ...prev,\n [key]: [...currentMessages, incomingMsg]\n };\n });\n };\n\n useEffect(() => {\n if (!lastDM) return;\n\n const loggedUserId = loggedUserDetails?._id;\n const isMe = String(lastDM.sender?._id || lastDM.sender) === String(loggedUserId);\n const conversationId = lastDM.conversationId\n ? String(lastDM.conversationId)\n : \"\";\n\n const matchedConversation = findConversationById(conversations, conversationId);\n const isGroup = resolveIsGroupFromPayload(lastDM, conversations);\n\n let storageKey = conversationId;\n if (!storageKey) {\n if (isMe) {\n storageKey = String(lastDM.receiver?._id || lastDM.receiver || \"\");\n } else {\n storageKey = String(lastDM.sender?._id || lastDM.sender || lastDM.fromUserId || \"\");\n }\n if (!storageKey) return;\n }\n\n const channelId = isGroup\n ? storageKey\n : getOtherParticipantId(matchedConversation, loggedUserId) ||\n String(\n isMe\n ? lastDM.receiver?._id || lastDM.receiver\n : lastDM.sender?._id || lastDM.sender || lastDM.fromUserId || \"\"\n ) ||\n storageKey;\n\n const incomingMsg: IMessage = {\n id: String(lastDM._id || lastDM.id || Date.now().toString()),\n _id: lastDM._id,\n content: lastDM.content || lastDM.message?.content || \"\",\n sender: lastDM.sender?.name || lastDM.fromUserId || (isMe ? \"Me\" : \"User\"),\n timestamp: lastDM.createdAt || new Date().toISOString(),\n isOwnMessage: isMe,\n channelId,\n conversationId: conversationId || storageKey,\n replyTo: lastDM.replyTo,\n status: lastDM.status || \"sent\",\n reactions: lastDM.reactions || [],\n };\n\n handleMessageUpdate(storageKey, incomingMsg, isMe);\n }, [lastDM, loggedUserDetails, conversations]);\n\n // Sync Status Updates (for double ticks, etc.)\n useEffect(() => {\n if (lastStatusUpdate) {\n const status = lastStatusUpdate.status;\n const targetId = lastStatusUpdate._id || lastStatusUpdate.messageId;\n const conversationId = lastStatusUpdate.conversationId || lastStatusUpdate.message?.conversationId;\n\n setLocalMessages(prev => {\n const next = { ...prev };\n\n if (targetId) {\n const msgId = String(targetId);\n Object.keys(next).forEach(key => {\n if (conversationId && key !== String(conversationId)) return;\n next[key] = next[key].map(m =>\n String(m._id || m.id) === msgId ? { ...m, status } : m\n );\n });\n } else if (conversationId && status === 'read') {\n const cid = String(conversationId);\n\n if (next[cid]) {\n next[cid] = next[cid].map(m =>\n m.isOwnMessage ? { ...m, status: 'read' } : m\n );\n }\n }\n\n return next;\n });\n }\n }, [lastStatusUpdate, loggedUserDetails]);\n\n // Sync DM Mark Read Updates (for blue ticks, etc.)\n useEffect(() => {\n if (lastDMMarkRead) {\n const { conversationId, readBy, status } = lastDMMarkRead;\n if (!conversationId) return;\n\n // Find the conversation to determine if it's a group or DM\n const currentConversation = conversations.find(c => String(c._id) === String(conversationId));\n const isGroup = isGroupConversation(currentConversation);\n\n // Skip group conversations - they are handled by the separate effect below\n if (isGroup) return;\n\n setLocalMessages(prev => {\n const next = { ...prev };\n\n const conversationKey = String(conversationId);\n\n // Update messages stored by conversationId (for DMs)\n if (next[conversationKey]) {\n // Only update messages that belong to current user (their own messages)\n next[conversationKey] = next[conversationKey].map(m =>\n m.isOwnMessage ? { ...m, status: status || 'read' } : m\n );\n }\n\n // Also update messages that might be stored by channel.id (for compatibility)\n Object.keys(next).forEach(key => {\n if (key !== conversationKey && next[key]) {\n next[key] = next[key].map(m =>\n m.isOwnMessage && m.conversationId === conversationId ? { ...m, status: status || 'read' } : m\n );\n }\n });\n\n return next;\n });\n }\n }, [lastDMMarkRead, conversations]);\n\n return { localMessages, setLocalMessages };\n};\n","import { useStore } from './useStore';\nexport const useAuthStore = useStore;\nexport default useAuthStore;\n","import { useEffect, useState } from 'react'\nimport { useStore } from '../store/useStore'\nimport { IAttachment, IChannel, IMessage } from '../types/chats.types'\nimport { useChatSync } from './useChatSync'\nimport {\n findConversationForChannel,\n getOtherParticipantId,\n isGroupConversation,\n} from '../store/helpers/store.helpers'\n\nexport interface ChatControllerState {\n replyTo: IMessage | null\n forwardMessage: IMessage | null\n isForwardModalOpen: boolean\n searchQuery: string\n debouncedSearch: string\n isCreateModalOpen: boolean\n}\n\nexport const useChatController = () => {\n const activeChannel = useStore((s) => s.activeChannel)\n const setActiveChannel = useStore((s) => s.setActiveChannel)\n const conversationId = useStore((s) => s.activeConversationId)\n const appError = useStore((s) => s.appError)\n const rateLimitResetAt = useStore((s) => s.rateLimitResetAt)\n const emitDmSend = useStore((s) => s.emitDmSend)\n const isFetchingMessages = useStore((s) => s.isFetchingMessages)\n const loggedUserDetails = useStore((s) => s.loggedUserDetails)\n const emitGroupMessageSend = useStore((s) => s.emitGroupMessageSend)\n const conversationInfos = useStore((s) => s.conversationInfos)\n const messagesByConversation = useStore((s) => s.messagesByConversation)\n const conversations = useStore((s) => s.conversations)\n\n const { localMessages, setLocalMessages } = useChatSync()\n const conversationMessages = conversationId\n ? messagesByConversation[conversationId] || []\n : []\n const currentLocalMessages = conversationId\n ? localMessages[conversationId] || []\n : []\n\n const [state, setState] = useState<ChatControllerState>({\n replyTo: null,\n forwardMessage: null,\n isForwardModalOpen: false,\n searchQuery: '',\n debouncedSearch: '',\n isCreateModalOpen: false,\n })\n\n const updateState = (updates: Partial<ChatControllerState>) => {\n setState((prev) => ({ ...prev, ...updates }))\n }\n\n useEffect(() => {\n const handler = setTimeout(() => {\n updateState({ debouncedSearch: state.searchQuery })\n }, 400)\n return () => clearTimeout(handler)\n }, [state.searchQuery])\n\n useEffect(() => {\n if (appError?.type === 'participant' && activeChannel) {\n setActiveChannel(null)\n }\n }, [appError?.type, activeChannel, setActiveChannel])\n\n const handleChannelSelect = (channel: IChannel) => {\n setActiveChannel(channel)\n updateState({ replyTo: null })\n }\n\n const handleSendMessage = (\n content: string,\n attachments: IAttachment[],\n replyTo?: IMessage | null,\n ) => {\n if (!activeChannel || !loggedUserDetails) return\n\n const activeConv = findConversationForChannel(\n activeChannel,\n loggedUserDetails._id,\n conversations,\n )\n const channelIsGroup = !!activeChannel.isGroup\n const isGroup =\n channelIsGroup && (!activeConv || isGroupConversation(activeConv))\n const dmReceiverId =\n getOtherParticipantId(activeConv, loggedUserDetails._id) ||\n String(activeChannel.id)\n\n const tempId = `temp-${Date.now()}`\n const newMessage: IMessage = {\n id: tempId,\n content,\n sender: 'Me',\n timestamp: new Date().toISOString(),\n isOwnMessage: true,\n channelId: isGroup ? String(conversationId) : dmReceiverId,\n conversationId: conversationId || '',\n replyTo: replyTo || undefined,\n attachments: attachments.map((a) => ({\n id: a.id,\n url: a.previewUrl,\n type: a.type,\n name: a.file.name,\n })),\n status: 'sent',\n }\n\n const messageStorageKey = conversationId || activeChannel.id\n setLocalMessages((prev) => ({\n ...prev,\n [messageStorageKey]: [...(prev[messageStorageKey] || []), newMessage],\n }))\n\n const payload = {\n tempId,\n sender: loggedUserDetails._id,\n receiver: isGroup ? undefined : dmReceiverId,\n content: newMessage.content,\n type: 'text',\n conversationId,\n replyTo: replyTo\n ? {\n _id: replyTo._id || replyTo.id,\n content: replyTo.content,\n attachments: replyTo.attachments || [],\n sender: {\n _id:\n (replyTo.sender as any)?._id ||\n (typeof replyTo.sender === 'string'\n ? replyTo.sender\n : ''),\n name: (replyTo.sender as any)?.name || '',\n },\n }\n : undefined,\n }\n\n if (attachments.length === 0) {\n if (isGroup) {\n emitGroupMessageSend(payload)\n } else {\n emitDmSend(payload)\n }\n }\n\n updateState({ replyTo: null })\n }\n\n return {\n activeChannel,\n setActiveChannel,\n conversationId,\n rateLimitResetAt,\n isFetchingMessages,\n loggedUserDetails,\n conversationInfos,\n conversationMessages,\n currentLocalMessages,\n state,\n updateState,\n handleChannelSelect,\n handleSendMessage,\n }\n}\n","export interface ChatLayoutConfig {\n /** Sidebar with profile + conversation list */\n sidebar?: boolean\n /** Logged-in user profile block at top of sidebar */\n loggedUserDetails?: boolean\n /** Conversation list in sidebar */\n channelList?: boolean\n /** Active channel header (name, actions, search) */\n header?: boolean\n /** Scrollable message area */\n messageList?: boolean\n /** Message composer / input box */\n input?: boolean\n /** Forward message modal */\n forwardModal?: boolean\n}\n\nexport const defaultChatLayoutConfig: Required<ChatLayoutConfig> = {\n sidebar: true,\n loggedUserDetails: true,\n channelList: true,\n header: true,\n messageList: true,\n input: true,\n forwardModal: true,\n}\n\nexport const mergeChatLayoutConfig = (\n config?: ChatLayoutConfig,\n): Required<ChatLayoutConfig> => ({\n ...defaultChatLayoutConfig,\n ...config,\n})\n","import * as React from \"react\"\nimport { Avatar as AvatarPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../lib/utils\"\n\n\nfunction Avatar({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Root> & {\n size?: \"default\" | \"sm\" | \"lg\"\n}) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n data-size={size}\n className={cn(\n \"group/avatar relative flex size-8 shrink-0 overflow-hidden rounded-full select-none data-[size=lg]:size-10 data-[size=sm]:size-6\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarImage({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn(\"aspect-square size-full\", className)}\n {...props}\n />\n )\n}\n\nfunction AvatarFallback({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn(\n \"bg-muted text-muted-foreground flex size-full items-center justify-center rounded-full text-sm group-data-[size=sm]/avatar:text-xs\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarBadge({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"avatar-badge\"\n className={cn(\n \"bg-primary text-primary-foreground ring-background absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full ring-2 select-none\",\n \"group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden\",\n \"group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2\",\n \"group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar-group\"\n className={cn(\n \"*:data-[slot=avatar]:ring-background group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarGroupCount({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar-group-count\"\n className={cn(\n \"bg-muted text-muted-foreground ring-background relative flex size-8 shrink-0 items-center justify-center rounded-full text-sm ring-2 group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Avatar,\n AvatarImage,\n AvatarFallback,\n AvatarBadge,\n AvatarGroup,\n AvatarGroupCount,\n}\n","import * as React from \"react\"\n\nimport { cn } from \"../lib/utils\"\n\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"../lib/utils\"\n\n\n\nconst buttonVariants = cva(\n \"inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n xs: \"h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n \"icon-xs\": \"size-6 rounded-md [&_svg:not([class*='size-'])]:size-3\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","import * as React from \"react\"\nimport { XIcon } from \"lucide-react\"\nimport { Dialog as DialogPrimitive } from \"radix-ui\"\nimport { cn } from \"../lib/utils\"\nimport { Button } from \"./button\"\n\n\nfunction Dialog({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 outline-none sm:max-w-lg\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showCloseButton?: boolean\n}) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close asChild>\n <Button variant=\"outline\">Close</Button>\n </DialogPrimitive.Close>\n )}\n </div>\n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n","import React, { useRef, useState, useMemo } from \"react\";\nimport { IUser } from \"../types/auth.types\";\nimport type { IChannel } from \"../types/chats.types\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"../ui/avatar\";\nimport { Search, UserPlus, X, Camera, Users, MessageCircle, Check, ArrowRight } from \"lucide-react\";\nimport { Input } from \"../ui/input\";\nimport { Button } from \"../ui/button\";\nimport {\n Dialog,\n DialogContent,\n DialogTitle,\n DialogTrigger,\n} from \"../ui/dialog\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"../ui/tooltip\";\nimport { cn } from \"../lib/utils\";\nimport { useStore } from \"../store/useStore\";\nimport { createGroup } from \"../services/api.service\";\nimport { isGroupConversation } from \"../store/helpers/store.helpers\";\nimport { useChatContext } from \"./ChatContext\";\n\n\nconst AVATAR_COLORS = [\"bg-[#4a6fa5]\", \"bg-[#3d8b5f]\", \"bg-[#9a7b4f]\", \"bg-[#9b4d5a]\"];\n\nconst getAvatarColor = (id: string) => {\n const hash = String(id).split(\"\").reduce((acc, char) => acc + char.charCodeAt(0), 0);\n return AVATAR_COLORS[hash % AVATAR_COLORS.length];\n};\n\nconst getInitials = (name: string) => {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length >= 2) return `${parts[0][0]}${parts[1][0]}`.toUpperCase();\n return name.slice(0, 2).toUpperCase();\n};\n\nconst formatMemberName = (name: string) =>\n name.charAt(0).toUpperCase() + name.slice(1);\n\ninterface LoggedUserDetailsProps {\n loggedUserDetails?: any;\n onUserSelect?: (channel: IChannel) => void;\n isCreateModalOpen?: boolean;\n setIsCreateModalOpen?: (open: boolean) => void;\n searchQuery?: string;\n setSearchQuery?: (val: string) => void;\n themeColor?: string;\n}\n\nconst LoggedUserDetails = ({\n loggedUserDetails: propsLoggedUserDetails,\n onUserSelect,\n isCreateModalOpen: propsIsCreateModalOpen,\n setIsCreateModalOpen: propsSetIsCreateModalOpen,\n searchQuery: propsSearchQuery,\n setSearchQuery: propsSetSearchQuery,\n themeColor: propsThemeColor,\n}: LoggedUserDetailsProps) => {\n const [internalIsOpen, setInternalIsOpen] = useState(false);\n const [internalSearch, setInternalSearch] = useState(\"\");\n\n const isCreateModalOpen = propsIsCreateModalOpen !== undefined ? propsIsCreateModalOpen : internalIsOpen;\n const setIsCreateModalOpen = propsSetIsCreateModalOpen || setInternalIsOpen;\n const searchQuery = propsSearchQuery !== undefined ? propsSearchQuery : internalSearch;\n const setSearchQuery = propsSetSearchQuery || setInternalSearch;\n\n const storeLoggedUserDetails = useStore((state) => state.loggedUserDetails);\n const effectiveLoggedUser = propsLoggedUserDetails || storeLoggedUserDetails;\n const { uiConfig, themeColor: contextThemeColor } = useChatContext();\n const themeColor = propsThemeColor || contextThemeColor || \"#6366f1\";\n const conversations = useStore((state) => state.conversations);\n const setActiveChannel = useStore((state) => state.setActiveChannel);\n const isSessionReady = useStore((state) => state.isSessionReady);\n const [state, setState] = useState({\n memberSearchQuery: \"\",\n activeTab: \"dm\" as \"dm\" | \"group\",\n groupName: \"\",\n groupDesc: \"\",\n selectedMembers: [] as any[],\n avatarPreview: null as string | null,\n });\n\n const updateState = (updates: Partial<typeof state>) => {\n setState((prev) => ({ ...prev, ...updates }));\n };\n\n const onlineUsersIds = useStore((state) => state.onlineUsers);\n const allUsers = useStore((state) => state.allUsers);\n const isFetchingUsers = useStore((state) => state.isFetchingAllUsers);\n const fetchAllUsers = useStore((state) => state.fetchAllUsers);\n const accessToken = useStore((state) => state.accessToken);\n\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n // Fetch all users for the selection list\n React.useEffect(() => {\n if (isSessionReady && accessToken) {\n fetchAllUsers();\n }\n }, [isSessionReady, accessToken, fetchAllUsers]);\n\n React.useEffect(() => {\n if (isCreateModalOpen && isSessionReady && accessToken) {\n fetchAllUsers(true);\n }\n }, [isCreateModalOpen, isSessionReady, accessToken, fetchAllUsers]);\n\n const memberSource = useMemo(() => {\n const users = Array.isArray(allUsers) ? allUsers : [];\n if (users.length > 0) return users;\n\n const map = new Map<string, any>();\n const safeConversations = Array.isArray(conversations) ? conversations : [];\n\n for (const conv of safeConversations) {\n if (isGroupConversation(conv)) continue;\n\n for (const p of conv.participants || []) {\n const id = String(p._id || p);\n if (!id || id === String(effectiveLoggedUser?._id)) continue;\n\n if (!map.has(id)) {\n map.set(\n id,\n typeof p === \"object\" && p?.name\n ? p\n : { _id: id, name: conv.name || \"User\", email: p?.email || \"\" }\n );\n }\n }\n }\n\n return Array.from(map.values());\n }, [allUsers, conversations, effectiveLoggedUser?._id]);\n\n const filteredMembers = memberSource.filter(m =>\n (String(m.name || '').toLowerCase().includes(state.memberSearchQuery.toLowerCase()) ||\n String(m.email || '').toLowerCase().includes(state.memberSearchQuery.toLowerCase())) &&\n String(m._id) !== String(effectiveLoggedUser?._id)\n );\n\n const user: IUser = {\n _id: effectiveLoggedUser?._id || \"1\",\n name: effectiveLoggedUser?.name ? (effectiveLoggedUser.name.charAt(0).toUpperCase() + effectiveLoggedUser.name.slice(1)) : \"User\",\n email: effectiveLoggedUser?.email || \"user@example.com\",\n role: effectiveLoggedUser?.role || \"user\",\n isActive: effectiveLoggedUser?.isActive ?? true,\n createdAt: effectiveLoggedUser?.createdAt ? new Date(effectiveLoggedUser.createdAt) : new Date(),\n updatedAt: effectiveLoggedUser?.updatedAt ? new Date(effectiveLoggedUser.updatedAt) : new Date(),\n image: effectiveLoggedUser?.image || \"\",\n };\n\n const handleMemberToggle = (member: any) => {\n setState((prev) => {\n const memberId = String(member._id);\n const exists = prev.selectedMembers.some((m) => String(m._id) === memberId);\n return {\n ...prev,\n selectedMembers: exists\n ? prev.selectedMembers.filter((m) => String(m._id) !== memberId)\n : [...prev.selectedMembers, member],\n };\n });\n };\n\n const handleAvatarChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (!file) return;\n\n const reader = new FileReader();\n reader.onloadend = () => updateState({ avatarPreview: reader.result as string });\n reader.readAsDataURL(file);\n };\n\n const resetCreateForm = () => {\n updateState({\n groupName: \"\",\n groupDesc: \"\",\n selectedMembers: [],\n avatarPreview: null,\n memberSearchQuery: \"\",\n activeTab: \"dm\",\n });\n if (fileInputRef.current) fileInputRef.current.value = \"\";\n };\n\n const fetchConversations = useStore((state) => state.fetchConversations);\n\n const handleCreateGroup = async () => {\n if (setIsCreateModalOpen) setIsCreateModalOpen(false);\n try {\n const groupName = state.groupName;\n const groupDescription = state.groupDesc;\n const members = state.selectedMembers.map((m) => m._id);\n const creatorId = effectiveLoggedUser?._id;\n\n const response = await createGroup(groupName, groupDescription, members, creatorId);\n\n await fetchConversations(10, 1, \"\", true);\n\n resetCreateForm();\n } catch (error) {\n console.error(\"Error creating group:\", error);\n }\n };\n\n const handleStartDM = (user: any) => {\n const existingDm = conversations.find((c) => {\n if (isGroupConversation(c)) return false;\n const ids = (c.participants || []).map((p: any) => String(p._id || p));\n return ids.includes(String(user._id)) && ids.includes(String(effectiveLoggedUser?._id));\n });\n\n const channelData: IChannel = {\n id: user._id,\n name: user.name.charAt(0).toUpperCase() + user.name.slice(1),\n image: user.image || `https://i.pravatar.cc/150?u=${user._id}`,\n isOnline: onlineUsersIds.includes(user._id),\n isGroup: false,\n conversationId: existingDm?._id ? String(existingDm._id) : undefined,\n };\n\n if (onUserSelect) {\n onUserSelect(channelData);\n } else {\n setActiveChannel(channelData);\n }\n\n if (setIsCreateModalOpen) setIsCreateModalOpen(false);\n resetCreateForm();\n };\n\n const modalThemeStyles = {\n \"--chat-theme\": themeColor,\n \"--chat-theme-5\": `${themeColor}0D`,\n \"--chat-theme-10\": `${themeColor}1A`,\n \"--chat-theme-20\": `${themeColor}33`,\n } as React.CSSProperties;\n\n return (\n <div className=\"border-b border-black/[0.06] bg-white px-4 py-4 md:px-5\">\n <div className=\"flex min-w-0 items-center gap-3\">\n {uiConfig.showSidebarAvatar !== false && (\n <div className=\"relative shrink-0\">\n <Avatar className=\"size-10 ring-2 ring-(--chat-theme-10)\">\n <AvatarImage src={user?.image} alt={user?.name} />\n <AvatarFallback className=\"bg-(--chat-theme-10) text-sm font-semibold text-(--chat-theme)\">\n {user.name.charAt(0).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n <span className=\"absolute bottom-0 right-0 size-2.5 rounded-full border-2 border-white bg-emerald-500\" />\n </div>\n )}\n\n <div className=\"min-w-0 flex-1\">\n <h2 className=\"truncate text-[15px] font-semibold text-[#0f172a] leading-tight\">\n {user.name}\n </h2>\n <p className=\"truncate text-xs text-muted-foreground\">\n {user.email}\n </p>\n </div>\n </div>\n\n <div className=\"mt-4 flex items-center gap-2\">\n <div className=\"relative group flex min-w-0 flex-1 items-center\">\n <Search\n className=\"absolute left-3.5 z-10 size-4 text-muted-foreground/50 transition-colors group-focus-within:text-(--chat-theme)\"\n />\n\n <Input\n placeholder=\"Search conversations...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery?.(e.target.value)}\n className=\"h-10 w-full rounded-xl border border-black/[0.06] bg-[#f8fafc] pl-10 pr-10 text-sm shadow-none placeholder:text-muted-foreground/50 focus-visible:border-(--chat-theme-20) focus-visible:ring-2 focus-visible:ring-(--chat-theme-10)\"\n />\n\n {searchQuery && (\n <button\n type=\"button\"\n onClick={() => setSearchQuery?.(\"\")}\n className=\"absolute right-3 flex size-5 items-center justify-center rounded-full bg-black/[0.06] transition-colors hover:bg-black/[0.1]\"\n >\n <X size={12} className=\"text-muted-foreground\" />\n </button>\n )}\n </div>\n\n <Dialog\n open={isCreateModalOpen}\n onOpenChange={(open) => {\n if (setIsCreateModalOpen) setIsCreateModalOpen(open);\n if (!open) resetCreateForm();\n }}\n >\n <Tooltip>\n <TooltipTrigger asChild>\n <DialogTrigger asChild>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"size-10 shrink-0 rounded-xl border-black/[0.08] bg-white hover:bg-(--chat-theme-5) hover:text-(--chat-theme)\"\n aria-label=\"Direct Message & Create Group\"\n >\n <UserPlus size={17} className=\"text-(--chat-theme)\" />\n </Button>\n </DialogTrigger>\n </TooltipTrigger>\n <TooltipContent align=\"end\" side=\"bottom\" className=\"text-xs font-bold px-3 py-1.5 rounded-lg shadow-xl shadow-black/10\">\n Direct Message & Create Group\n </TooltipContent>\n </Tooltip>\n\n <DialogContent\n showCloseButton={false}\n style={modalThemeStyles}\n className=\"flex h-[min(540px,90dvh)] w-[95vw] flex-col overflow-hidden rounded-2xl border border-black/[0.08] bg-white p-0 text-[#0f172a] shadow-[0_20px_50px_rgba(15,23,42,0.12)] sm:max-w-[420px]\"\n >\n {/* Header */}\n <div className=\"flex shrink-0 items-center justify-between px-5 pt-5 pb-3\">\n <DialogTitle className=\"text-base font-semibold text-[#0f172a]\">\n New chat\n </DialogTitle>\n <DialogTrigger asChild>\n <button\n type=\"button\"\n className=\"flex size-8 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-black/[0.04] hover:text-[#0f172a]\"\n >\n <X className=\"size-4\" />\n </button>\n </DialogTrigger>\n </div>\n\n {/* Pill tabs */}\n <div className=\"grid shrink-0 grid-cols-2 gap-2 px-5 pb-4\">\n {([\n { id: \"dm\" as const, label: \"Message\", icon: MessageCircle },\n { id: \"group\" as const, label: \"New group\", icon: Users },\n ]).map(({ id, label, icon: Icon }) => (\n <button\n key={id}\n type=\"button\"\n onClick={() => updateState({ activeTab: id })}\n className={cn(\n \"flex items-center justify-center gap-2 rounded-full border py-2 text-sm transition-colors\",\n state.activeTab === id\n ? \"border-(--chat-theme-20) bg-(--chat-theme-5) text-(--chat-theme)\"\n : \"border-black/[0.08] text-muted-foreground hover:border-black/[0.12] hover:text-[#0f172a]\"\n )}\n >\n <Icon className=\"size-4\" />\n {label}\n </button>\n ))}\n </div>\n\n {/* Message tab */}\n {state.activeTab === \"dm\" && (\n <div className=\"flex min-h-0 flex-1 flex-col\">\n <div className=\"relative shrink-0 px-5 pb-3\">\n <Search className=\"absolute left-8 top-1/2 size-4 -translate-y-1/2 text-muted-foreground/45\" />\n <Input\n placeholder=\"Search by name or email\"\n value={state.memberSearchQuery}\n onChange={(e) => updateState({ memberSearchQuery: e.target.value })}\n className=\"h-10 rounded-xl border-black/[0.06] bg-[#f8fafc] pl-10 text-sm text-[#0f172a] shadow-none placeholder:text-muted-foreground/60 focus-visible:border-(--chat-theme-20) focus-visible:ring-2 focus-visible:ring-(--chat-theme-10)\"\n />\n </div>\n\n <p className=\"shrink-0 px-5 pb-1 text-[11px] lowercase text-muted-foreground\">contacts</p>\n\n <div className=\"chat-message-scroll min-h-0 flex-1 overflow-y-auto pb-2\">\n {filteredMembers.map((member) => {\n const isOnline = onlineUsersIds.includes(member._id);\n return (\n <button\n type=\"button\"\n key={String(member._id)}\n onClick={() => handleStartDM(member)}\n className=\"flex w-full items-center gap-3 px-5 py-2.5 text-left transition-colors hover:bg-[#f8fafc]\"\n >\n <div className=\"relative shrink-0\">\n <div\n className={cn(\n \"flex size-10 items-center justify-center rounded-full text-sm font-semibold text-white\",\n getAvatarColor(String(member._id))\n )}\n >\n {member.image ? (\n <img src={member.image} alt=\"\" className=\"size-full rounded-full object-cover\" />\n ) : (\n getInitials(member.name)\n )}\n </div>\n {isOnline && (\n <span className=\"absolute bottom-0 right-0 size-2.5 rounded-full border-2 border-white bg-emerald-500\" />\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-sm font-semibold text-[#0f172a]\">\n {formatMemberName(member.name)}\n </p>\n <p className=\"truncate text-xs text-muted-foreground\">{member.email}</p>\n </div>\n <span\n className={cn(\n \"shrink-0 text-xs\",\n isOnline ? \"text-emerald-600\" : \"text-muted-foreground\"\n )}\n >\n {isOnline ? \"Active now\" : \"Offline\"}\n </span>\n </button>\n );\n })}\n {filteredMembers.length === 0 && (\n <p className=\"px-5 py-10 text-center text-sm text-muted-foreground\">No contacts found</p>\n )}\n </div>\n </div>\n )}\n\n {/* New group tab */}\n {state.activeTab === \"group\" && (\n <div className=\"grid min-h-0 flex-1 grid-rows-[auto_auto_1fr_auto]\">\n {/* Group info row */}\n <div className=\"flex shrink-0 gap-3 px-5 pb-4\">\n <button\n type=\"button\"\n onClick={() => fileInputRef.current?.click()}\n className=\"relative shrink-0 self-start\"\n >\n <div className=\"flex size-[52px] items-center justify-center overflow-hidden rounded-full border border-dashed border-black/[0.12] bg-[#f8fafc]\">\n {state.avatarPreview ? (\n <img src={state.avatarPreview} className=\"size-full object-cover\" alt=\"\" />\n ) : (\n <Camera className=\"size-4 text-muted-foreground/50\" />\n )}\n </div>\n <input\n type=\"file\"\n ref={fileInputRef}\n className=\"hidden\"\n accept=\"image/*\"\n onChange={handleAvatarChange}\n />\n </button>\n <div className=\"min-w-0 flex-1 space-y-2\">\n <Input\n placeholder=\"Group name\"\n value={state.groupName}\n onChange={(e) => updateState({ groupName: e.target.value })}\n className=\"h-9 rounded-lg border-black/[0.06] bg-[#f8fafc] text-sm text-[#0f172a] shadow-none placeholder:text-muted-foreground/60 focus-visible:border-(--chat-theme-20) focus-visible:ring-2 focus-visible:ring-(--chat-theme-10)\"\n />\n <Input\n placeholder=\"Description (optional)\"\n value={state.groupDesc}\n onChange={(e) => updateState({ groupDesc: e.target.value })}\n className=\"h-9 rounded-lg border-black/[0.06] bg-[#f8fafc] text-sm text-[#0f172a] shadow-none placeholder:text-muted-foreground/60 focus-visible:border-(--chat-theme-20) focus-visible:ring-2 focus-visible:ring-(--chat-theme-10)\"\n />\n </div>\n </div>\n\n {/* Search members */}\n <div className=\"shrink-0 border-t border-black/[0.05] px-5 pt-4 pb-1\">\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground/45\" />\n <Input\n placeholder=\"Search members\"\n value={state.memberSearchQuery}\n onChange={(e) => updateState({ memberSearchQuery: e.target.value })}\n className=\"h-10 rounded-xl border-black/[0.06] bg-[#f8fafc] pl-10 text-sm text-[#0f172a] shadow-none placeholder:text-muted-foreground/60 focus-visible:border-(--chat-theme-20) focus-visible:ring-2 focus-visible:ring-(--chat-theme-10)\"\n />\n </div>\n <p className=\"mt-3 mb-2 px-0.5 text-[11px] lowercase tracking-wide text-muted-foreground\">\n {state.selectedMembers.length === 0\n ? \"no members selected\"\n : `${state.selectedMembers.length} member${state.selectedMembers.length > 1 ? \"s\" : \"\"} selected`}\n </p>\n </div>\n\n {/* Member list */}\n <div className=\"chat-message-scroll min-h-0 overflow-y-auto pt-1\">\n {filteredMembers.map((member) => {\n const isSelected = state.selectedMembers.some(\n (m) => String(m._id) === String(member._id)\n );\n const isOnline = onlineUsersIds.includes(member._id);\n return (\n <button\n type=\"button\"\n key={String(member._id)}\n onClick={() => handleMemberToggle(member)}\n className=\"flex w-full items-center gap-3 px-5 py-2.5 text-left transition-colors hover:bg-[#f8fafc]\"\n >\n <div className=\"relative shrink-0\">\n <div\n className={cn(\n \"flex size-10 items-center justify-center rounded-full text-sm font-semibold text-white\",\n getAvatarColor(String(member._id))\n )}\n >\n {member.image ? (\n <img src={member.image} alt=\"\" className=\"size-full rounded-full object-cover\" />\n ) : (\n getInitials(member.name)\n )}\n </div>\n {isOnline && (\n <span className=\"absolute bottom-0 right-0 size-2.5 rounded-full border-2 border-white bg-emerald-500\" />\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-sm font-semibold text-[#0f172a]\">\n {formatMemberName(member.name)}\n </p>\n <p className=\"truncate text-xs text-muted-foreground\">{member.email}</p>\n </div>\n <div\n className={cn(\n \"flex size-5 shrink-0 items-center justify-center rounded-full border-2 transition-all duration-150\",\n isSelected ? \"border-transparent\" : \"border-black/25 bg-white\"\n )}\n style={\n isSelected\n ? { backgroundColor: themeColor, borderColor: themeColor }\n : undefined\n }\n aria-hidden\n >\n {isSelected && (\n <Check className=\"size-3 stroke-[2.5] text-white\" />\n )}\n </div>\n </button>\n );\n })}\n {filteredMembers.length === 0 && (\n <p className=\"px-5 py-8 text-center text-xs text-muted-foreground\">No members found</p>\n )}\n </div>\n\n {/* Footer */}\n <div className=\"flex shrink-0 justify-end border-t border-black/[0.06] px-5 py-3\">\n <Button\n onClick={handleCreateGroup}\n disabled={!state.groupName.trim() || state.selectedMembers.length === 0}\n className={cn(\n \"h-9 gap-2 rounded-lg px-4 text-sm font-medium transition-colors\",\n state.groupName.trim() && state.selectedMembers.length > 0\n ? \"border border-(--chat-theme) bg-(--chat-theme) text-white hover:opacity-90\"\n : \"border border-black/[0.1] bg-white text-muted-foreground hover:bg-[#f8fafc] disabled:opacity-50\"\n )}\n >\n Create group\n <ArrowRight className=\"size-4\" />\n </Button>\n </div>\n </div>\n )}\n </DialogContent>\n </Dialog>\n </div>\n </div>\n );\n};\n\nexport default LoggedUserDetails;","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\nimport { cn } from \"../lib/utils\"\n\n\nconst badgeVariants = cva(\n \"inline-flex items-center justify-center rounded-full border border-transparent px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n secondary:\n \"bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n destructive:\n \"bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n ghost: \"[a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 [a&]:hover:underline\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Badge({\n className,\n variant = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> &\n VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : \"span\"\n\n return (\n <Comp\n data-slot=\"badge\"\n data-variant={variant}\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nexport { Badge, badgeVariants }\n","\nimport * as React from \"react\"\nimport { ScrollArea as ScrollAreaPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../lib/utils\"\n\n\nfunction ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn(\"relative\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n className=\"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n )\n}\n\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n \"flex touch-none p-px transition-colors select-none\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n data-slot=\"scroll-area-thumb\"\n className=\"bg-border relative flex-1 rounded-full\"\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n )\n}\n\nexport { ScrollArea, ScrollBar }\n","import React, { useState, useEffect, useMemo, useRef } from \"react\";\nimport { Badge } from \"../ui/badge\";\nimport { ScrollArea } from \"../ui/scroll-area\";\nimport { Button } from \"../ui/button\";\nimport { Loader2, UserPlus, Search, X } from \"lucide-react\";\nimport { Input } from \"../ui/input\";\nimport { cn } from \"../lib/utils\";\nimport type { IChannel } from \"../types/chats.types\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"../ui/avatar\";\nimport { useStore } from \"../store/useStore\";\ninterface ChannelListProps {\n activeChannel: IChannel | null;\n onChannelSelect: (channel: IChannel) => void;\n onNewChatClick?: () => void;\n debouncedSearch?: string;\n}\n\nconst ChannelList = ({ activeChannel, onChannelSelect, onNewChatClick, debouncedSearch = \"\" }: ChannelListProps) => {\n\n const onlineUserIds = useStore((s) => s.onlineUsers);\n const allUsers = useStore((s) => s.allUsers);\n const typingUsersByConv = useStore((s) => s.typingUsers);\n const deletedForMeIds = useStore((s) => s.deletedForMeIds);\n const isFetchingUsers = useStore((s) => s.isFetchingAllUsers);\n const conversations = useStore((s) => s.conversations);\n const isFetchingConversations = useStore((s) => s.isFetchingConversations);\n const conversationsHasMore = useStore((s) => s.conversationsHasMore);\n const conversationsPage = useStore((s) => s.conversationsPage);\n\n const accessToken = useStore((s) => s.accessToken);\n const loggedUserDetails = useStore((s) => s.loggedUserDetails);\n const lastFetchKeyRef = useRef<string | null>(null);\n\n // Fetch all users on mount\n useEffect(() => {\n if (accessToken) {\n useStore.getState().fetchAllUsers();\n }\n }, [accessToken]);\n\n // Fetch conversations on mount or when search changes (once per key)\n useEffect(() => {\n if (!accessToken) return;\n\n const fetchKey = debouncedSearch;\n if (lastFetchKeyRef.current === fetchKey) return;\n\n const hadPreviousKey = lastFetchKeyRef.current !== null;\n lastFetchKeyRef.current = fetchKey;\n\n const { resetConversations, fetchConversations } = useStore.getState();\n if (hadPreviousKey) {\n resetConversations();\n }\n fetchConversations(10, 1, debouncedSearch, true);\n }, [accessToken, debouncedSearch]);\n\n\n\n const mappedChannels = useMemo(() => {\n const safeConversations = Array.isArray(conversations) ? conversations : [];\n return safeConversations\n .map((c) => {\n // Find the other participant ID\n const otherParticipantData = c.participants.find((p: any) => String(p._id || p) !== String(loggedUserDetails?._id)) || c.participants[0];\n const otherParticipantId = String(otherParticipantData?._id || otherParticipantData);\n\n // Resolve user details from allUsers if the object is missing\n const resolvedUser = typeof otherParticipantData === 'object' && otherParticipantData.name\n ? otherParticipantData\n : (Array.isArray(allUsers) ? allUsers : []).find(u => String(u._id) === otherParticipantId);\n\n const name = (c.conversationType === \"group\" || c.isGroup) ? (c.groupName || c.name || \"Group Chat\") : (resolvedUser?.name || \"Unknown User\");\n const image = (c.conversationType === \"group\" || c.isGroup) ? (c.image || \"\") : (resolvedUser?.image || `https://i.pravatar.cc/150?u=${otherParticipantId}`);\n const isOnline = (c.conversationType === \"group\" || c.isGroup) ? false : onlineUserIds.includes(otherParticipantId);\n\n // Calculate unread count for current user\n const unreadCount = typeof c.unreadCount === \"number\" ? c.unreadCount : 0;\n\n const isTyping = typingUsersByConv[String(c._id)]?.length > 0;\n\n let lastMessageContent = c.lastMessage?.content || \"No messages yet\";\n if (c.lastMessage) {\n if (c.lastMessage.isDeletedForEveryone) {\n lastMessageContent = \"This message has been deleted\";\n } else if (deletedForMeIds.includes(String(c.lastMessage._id || c.lastMessage.id))) {\n lastMessageContent = \"\";\n }\n }\n\n return {\n id: (c.conversationType === \"group\" || c.isGroup) ? String(c._id) : otherParticipantId,\n conversationId: String(c._id),\n name: name.charAt(0).toUpperCase() + name.slice(1),\n image: image,\n isOnline,\n isGroup: c.conversationType === \"group\" || c.isGroup,\n isLeft: c.isLeft || false,\n isBlocked: c.isBlocked || false,\n unreadCount,\n isTyping,\n pinnedCount: c.pinnedCount,\n starredCount: c.starredCount,\n lastMessage: {\n content: lastMessageContent,\n timestamp: c.lastMessage?.createdAt\n ? new Date(c.lastMessage.createdAt).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })\n : \"\",\n sender: \"User\"\n }\n } as IChannel & { isTyping: boolean };\n });\n }, [conversations, onlineUserIds, loggedUserDetails, allUsers, typingUsersByConv, deletedForMeIds]);\n\n const handleLoadMore = () => {\n if (!isFetchingConversations && conversationsHasMore) {\n useStore.getState().fetchConversations(10, conversationsPage + 1, debouncedSearch);\n }\n };\n\n if ((isFetchingUsers || (isFetchingConversations && conversations.length === 0)) && mappedChannels.length === 0) {\n return (\n <div className=\"flex flex-col items-center justify-center flex-1 min-h-0 bg-white space-y-4\">\n <Loader2 className=\"h-8 w-8 animate-spin text-(--chat-theme-40)\" />\n <p className=\"text-[10px] font-bold text-gray-400 uppercase tracking-widest transition-all\">Loading Sidebar...</p>\n </div>\n );\n }\n\n\n return (\n <div className=\"flex min-h-0 w-full flex-1 flex-col bg-white\">\n <div className=\"flex items-center justify-between px-4 py-3 md:px-5\">\n <h3 className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n Messages\n </h3>\n <span className=\"rounded-full bg-black/[0.04] px-2 py-0.5 text-[11px] font-medium text-muted-foreground\">\n {mappedChannels.length}\n </span>\n </div>\n\n {/* List Area */}\n <ScrollArea className=\"min-h-0 flex-1\">\n <div className=\"space-y-0.5 px-2 pb-3 md:px-3\">\n {mappedChannels.map((channel) => {\n const isActive = activeChannel?.id === channel.id;\n return (\n <div\n key={channel.id}\n className={cn(\n \"group relative flex cursor-pointer items-center gap-3 rounded-xl px-3 py-2.5 transition-all duration-200\",\n isActive\n ? \"bg-(--chat-theme-10) shadow-sm ring-1 ring-(--chat-theme-20)\"\n : \"hover:bg-black/[0.03] active:scale-[0.99]\",\n )}\n onClick={() => onChannelSelect(channel)}\n >\n {isActive && (\n <span className=\"absolute bottom-2 left-0 top-2 w-0.5 rounded-full bg-(--chat-theme)\" />\n )}\n\n {/* Avatar */}\n <div className=\"relative shrink-0\">\n <Avatar className=\"size-11\">\n <AvatarImage src={channel?.image} alt={channel?.name} />\n <AvatarFallback className={cn(\n \"text-sm font-semibold\",\n isActive ? \"bg-(--chat-theme-20) text-(--chat-theme)\" : \"bg-muted text-muted-foreground\"\n )}>\n {channel.name.charAt(0).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n {channel.isOnline && (\n <span className=\"absolute bottom-0 right-0 size-2.5 rounded-full border-2 border-white bg-emerald-500\" />\n )}\n </div>\n\n {/* Content */}\n <div className=\"flex min-w-0 flex-1 flex-col justify-center overflow-hidden\">\n <div className=\"mb-0.5 flex w-full min-w-0 items-center justify-between gap-2 overflow-hidden\">\n <h3 className={cn(\n \"min-w-0 flex-1 truncate text-[14px] font-semibold tracking-tight\",\n isActive ? \"text-(--chat-theme)\" : \"text-[#0f172a]\"\n )}>\n { channel.name}\n </h3>\n <div className=\"flex shrink-0 flex-col items-end gap-1\">\n <span className=\"text-[11px] font-medium text-muted-foreground\">\n {channel.lastMessage?.timestamp}\n </span>\n {channel.isLeft && (\n <span className=\"rounded-full bg-red-50 px-1.5 py-0.5 text-[9px] font-semibold text-red-600\">\n Left\n </span>\n )}\n </div>\n </div>\n\n <div className=\"flex w-full min-w-0 items-center justify-between gap-2 pr-1\">\n <p className={cn(\n \"min-w-0 line-clamp-1 text-[13px]\",\n channel.isTyping\n ? \"font-medium text-(--chat-theme)\"\n : \"text-muted-foreground\"\n )} >\n {channel.isTyping ? \"typing...\" : channel.lastMessage?.content}\n </p>\n {channel.unreadCount !== undefined && channel.unreadCount > 0 && (\n <Badge className={cn(\n \"flex h-5 min-w-5 items-center justify-center rounded-full border-none px-1.5 text-[10px] font-semibold\",\n isActive ? \"bg-(--chat-theme) text-white\" : \"bg-(--chat-theme) text-white\"\n )}>\n {channel.unreadCount}\n </Badge>\n )}\n </div>\n </div>\n </div>\n );\n })}\n\n {mappedChannels.length === 0 && (\n <div className=\"py-12 px-6 text-center space-y-5 flex flex-col items-center\">\n <div className=\"size-16 bg-gray-50 rounded-full flex items-center justify-center border-2 border-dashed border-gray-200\">\n <UserPlus className=\"size-8 text-gray-300\" />\n </div>\n <div className=\"space-y-1\">\n <p className=\"text-xs font-bold text-gray-500 uppercase tracking-widest\">No conversations</p>\n <p className=\"text-[10px] font-medium text-gray-400\">Start chatting with your team or create a new group.</p>\n </div>\n <Button\n onClick={onNewChatClick}\n variant=\"outline\"\n className=\"mt-4 rounded-xl border-dashed border-2 text-xs font-bold w-full bg-white hover:bg-gray-50 text-(--chat-theme) border-(--chat-theme-20)\"\n >\n <UserPlus className=\"mr-2 size-4\" /> Start a New Chat\n </Button>\n </div>\n )}\n </div>\n </ScrollArea>\n\n {/* Sticky Footer Loader Button */}\n {conversationsHasMore && mappedChannels.length > 0 && (\n <div className=\"flex justify-center items-center shrink-0 p-3 bg-white border-t border-border/40 sticky bottom-0 z-10 w-full shadow-[0_-15px_20px_-10px_rgba(0,0,0,0.03)] pb-6\">\n <Button\n variant=\"ghost\"\n className=\"h-10 text-xs font-bold bg-[#f3f4f6] hover:bg-(--chat-theme-10) hover:text-(--chat-theme) text-gray-500 rounded-xl transition-all w-full max-w-[200px]\"\n onClick={handleLoadMore}\n disabled={isFetchingConversations}\n >\n {isFetchingConversations ? (\n <>\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n Fetching...\n </>\n ) : (\n \"Load More Conversations\"\n )}\n </Button>\n </div>\n )}\n\n </div>\n );\n};\n\nexport default ChannelList;\n","import React from \"react\";\nimport { ArrowLeft, Pin, Star } from \"lucide-react\";\nimport { Button } from \"../../ui/button\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"../../ui/avatar\";\nimport type { IChannel } from \"../../types/chats.types\";\n\ninterface HeaderLeftSideProps {\n onBack?: () => void;\n activeChannel: IChannel;\n pinnedCount: number;\n starredCount: number;\n onOpenDetails: () => void;\n onOpenPins: () => void;\n onOpenStars: () => void;\n}\n\nconst HeaderLeftSide = ({\n onBack,\n activeChannel,\n pinnedCount,\n starredCount,\n onOpenDetails,\n onOpenPins,\n onOpenStars\n}: HeaderLeftSideProps) => {\n const statusLabel = activeChannel.isGroup\n ? \"Group chat\"\n : activeChannel.isOnline\n ? \"Active now\"\n : \"Offline\";\n\n return (\n <div className=\"flex min-w-0 items-center gap-3\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-9 shrink-0 rounded-full md:hidden\"\n onClick={onBack}\n >\n <ArrowLeft size={18} />\n </Button>\n\n <button\n type=\"button\"\n onClick={onOpenDetails}\n className=\"flex min-w-0 items-center gap-3 rounded-xl px-1 py-1 text-left transition-colors hover:bg-black/[0.03]\"\n >\n <div className=\"relative shrink-0\">\n <Avatar className=\"size-10 ring-2 ring-white\">\n <AvatarImage src={activeChannel.image || undefined} />\n <AvatarFallback className=\"bg-(--chat-theme-10) text-sm font-semibold text-(--chat-theme)\">\n {activeChannel.name.charAt(0).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n {!activeChannel.isGroup && activeChannel.isOnline && (\n <span className=\"absolute bottom-0 right-0 size-2.5 rounded-full border-2 border-white bg-emerald-500\" />\n )}\n </div>\n\n <div className=\"min-w-0\">\n <h1 className=\"truncate\">{activeChannel.name}</h1>\n <p className=\"truncate text-xs text-muted-foreground\">{statusLabel}</p>\n </div>\n </button>\n\n <div className=\"hidden items-center gap-1.5 sm:flex\">\n {activeChannel.isLeft && (\n <span className=\"rounded-full bg-red-50 px-2 py-0.5 text-[10px] font-semibold text-red-600\">\n Left\n </span>\n )}\n {pinnedCount > 0 && (\n <button\n type=\"button\"\n onClick={onOpenPins}\n className=\"inline-flex items-center gap-1 rounded-full bg-blue-50 px-2 py-0.5 text-[10px] font-semibold text-blue-600 transition-colors hover:bg-blue-100\"\n >\n <Pin size={10} className=\"fill-current\" />\n {pinnedCount}\n </button>\n )}\n {starredCount > 0 && (\n <button\n type=\"button\"\n onClick={onOpenStars}\n className=\"inline-flex items-center gap-1 rounded-full bg-amber-50 px-2 py-0.5 text-[10px] font-semibold text-amber-600 transition-colors hover:bg-amber-100\"\n >\n <Star size={10} className=\"fill-current\" />\n {starredCount}\n </button>\n )}\n </div>\n </div>\n );\n};\n\nexport default HeaderLeftSide;\n","\nimport * as React from \"react\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\nimport { DropdownMenu as DropdownMenuPrimitive } from \"radix-ui\"\nimport { cn } from \"../lib/utils\"\n\n\nfunction DropdownMenu({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return (\n <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n )\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return (\n <DropdownMenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return (\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return (\n <DropdownMenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"text-muted-foreground ml-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n","import React from \"react\";\nimport { \n Search, \n Phone, \n Video, \n MoreVertical, \n Info, \n UserKey, \n Users, \n ShieldUser, \n Paperclip, \n Pin, \n Star, \n MessageSquareX, \n Trash2,\n LogOut,\n Ban\n} from \"lucide-react\";\nimport { Button } from \"../../ui/button\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../../ui/dropdown-menu\";\nimport type { IChannel } from \"../../types/chats.types\";\n\ninterface HeaderRightSideProps {\n activeChannel: IChannel;\n isAdmin: boolean;\n canViewMembers: boolean;\n onOpenSearch: () => void;\n onOpenDetails: () => void;\n onOpenPermissions: () => void;\n onOpenMembers: () => void;\n onOpenAdmins: () => void;\n onOpenAttachments: () => void;\n onOpenPins: () => void;\n onOpenStars: () => void;\n onOpenClearChat: () => void;\n onOpenDeleteChannel: () => void;\n onOpenLeaveGroup?: () => void;\n onToggleBlock?: () => void;\n isBlocked?: boolean;\n}\n\nconst HeaderRightSide = ({\n activeChannel,\n isAdmin,\n canViewMembers,\n onOpenSearch,\n onOpenDetails,\n onOpenPermissions,\n onOpenMembers,\n onOpenAdmins,\n onOpenAttachments,\n onOpenPins,\n onOpenStars,\n onOpenClearChat,\n onOpenDeleteChannel,\n onOpenLeaveGroup,\n onToggleBlock,\n isBlocked\n}: HeaderRightSideProps) => {\n return (\n <div className=\"flex items-center gap-0.5 rounded-xl border border-black/[0.06] bg-black/[0.02] p-0.5\">\n <Button \n variant=\"ghost\" \n size=\"icon\" \n className=\"size-8 rounded-lg text-muted-foreground hover:bg-white hover:text-foreground hover:shadow-sm\" \n onClick={onOpenSearch}\n >\n <Search size={16} />\n </Button>\n <Button variant=\"ghost\" size=\"icon\" className=\"size-8 rounded-lg text-muted-foreground hover:bg-white hover:text-foreground hover:shadow-sm\">\n <Phone size={16} />\n </Button>\n <Button variant=\"ghost\" size=\"icon\" className=\"size-8 rounded-lg text-muted-foreground hover:bg-white hover:text-foreground hover:shadow-sm\">\n <Video size={16} />\n </Button>\n \n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" className=\"size-8 rounded-lg text-muted-foreground hover:bg-white hover:text-foreground hover:shadow-sm\">\n <MoreVertical size={16} />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-56 rounded-xl border-black/[0.08] p-1 shadow-xl\">\n <DropdownMenuLabel className=\"px-2 py-1.5 text-xs font-medium text-muted-foreground\">Channel options</DropdownMenuLabel>\n <DropdownMenuSeparator />\n \n <DropdownMenuItem className=\"gap-2 cursor-pointer text-[#374151]\" onClick={onOpenDetails}>\n <Info className=\"h-4 w-4\" />\n <span>View Details</span>\n </DropdownMenuItem>\n \n {activeChannel.isGroup && (\n <>\n {isAdmin && (\n <DropdownMenuItem className=\"gap-2 cursor-pointer text-[#374151]\" onClick={onOpenPermissions}>\n <UserKey className=\"h-4 w-4\" /> \n <span>Permission</span>\n </DropdownMenuItem>\n )}\n {canViewMembers && (\n <DropdownMenuItem className=\"gap-2 cursor-pointer text-[#374151]\" onClick={onOpenMembers}>\n <Users className=\"h-4 w-4\" />\n <span>Members</span>\n </DropdownMenuItem>\n )}\n {isAdmin && (\n <DropdownMenuItem className=\"gap-2 cursor-pointer text-[#374151]\" onClick={onOpenAdmins}>\n <ShieldUser className=\"h-4 w-4\" />\n <span>Admins</span>\n </DropdownMenuItem>\n )}\n </>\n )}\n \n <DropdownMenuItem className=\"gap-2 cursor-pointer text-[#374151]\" onClick={onOpenAttachments}>\n <Paperclip className=\"h-4 w-4\" />\n <span>Attachments</span>\n </DropdownMenuItem>\n \n <DropdownMenuItem className=\"gap-2 cursor-pointer text-[#374151]\" onClick={onOpenPins}>\n <Pin className=\"h-4 w-4\" />\n <span>Pin Messages</span>\n </DropdownMenuItem>\n \n <DropdownMenuItem className=\"gap-2 cursor-pointer text-[#374151]\" onClick={onOpenStars}>\n <Star className=\"h-4 w-4\" />\n <span>Favorite</span>\n </DropdownMenuItem>\n \n <DropdownMenuSeparator />\n \n <DropdownMenuItem\n className=\"text-red-600 gap-2 cursor-pointer\"\n onSelect={onOpenClearChat}\n >\n <MessageSquareX className=\"h-4 w-4\" />\n <span>Clear chats</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n className=\"text-red-600 gap-2 cursor-pointer\"\n onSelect={onOpenDeleteChannel}\n >\n <Trash2 className=\"h-4 w-4\" />\n <span>Delete Channel</span>\n </DropdownMenuItem>\n\n {activeChannel.isGroup && !activeChannel.isLeft && (\n <DropdownMenuItem\n className=\"text-red-600 gap-2 cursor-pointer\"\n onSelect={onOpenLeaveGroup}\n >\n <LogOut className=\"h-4 w-4\" />\n <span>Leave Group</span>\n </DropdownMenuItem>\n )}\n\n {!activeChannel.isGroup && (\n <DropdownMenuItem\n className=\"text-red-600 gap-2 cursor-pointer\"\n onSelect={onToggleBlock}\n >\n <Ban className=\"h-4 w-4\" />\n <span>{isBlocked ? \"Unblock User\" : \"Block User\"}</span>\n </DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n};\n\nexport default HeaderRightSide;\n","import React, { useRef, useCallback } from \"react\";\nimport { Loader2, Search } from \"lucide-react\";\n\ninterface HeaderSearchOverlayProps {\n searchQuery: string;\n isSearching: boolean;\n searchResults: any[];\n onSelectResult: (id: string) => void;\n hasMore?: boolean;\n isLoadingMore?: boolean;\n onLoadMore?: () => void;\n}\n\nconst HeaderSearchOverlay = ({\n searchQuery,\n isSearching,\n searchResults,\n onSelectResult,\n hasMore = false,\n isLoadingMore = false,\n onLoadMore,\n}: HeaderSearchOverlayProps) => {\n const scrollRef = useRef<HTMLDivElement>(null);\n\n const handleScroll = useCallback(() => {\n const el = scrollRef.current;\n if (!el || !hasMore || isLoadingMore || !onLoadMore) return;\n if (el.scrollTop + el.clientHeight >= el.scrollHeight - 40) {\n onLoadMore();\n }\n }, [hasMore, isLoadingMore, onLoadMore]);\n\n if (!searchQuery) return null;\n\n return (\n <div className=\"absolute top-full left-0 right-0 mt-3 max-h-[500px] overflow-hidden bg-white rounded-3xl shadow-[0_30px_70px_rgba(0,0,0,0.25)] border border-white/40 z-[101] flex flex-col animate-in fade-in zoom-in-95 duration-200\">\n <div className=\"p-4 border-b border-gray-100/50 bg-gray-50/50 flex items-center justify-between\">\n <span className=\"text-[10px] font-black text-gray-400 uppercase tracking-[0.2em] px-2 flex items-center gap-2\">\n <div className=\"size-1.5 rounded-full bg-primary animate-pulse\" />\n Deep Message Search\n </span>\n {searchResults.length > 0 && (\n <span className=\"text-[10px] font-black bg-primary text-white px-3 py-1 rounded-full shadow-lg shadow-primary/20\">\n {searchResults.length} Results{hasMore ? \"+\" : \"\"}\n </span>\n )}\n </div>\n <div\n ref={scrollRef}\n onScroll={handleScroll}\n className=\"overflow-y-auto p-3 flex flex-col gap-2 custom-scrollbar\"\n >\n {isSearching ? (\n <div className=\"flex flex-col items-center justify-center py-20 gap-4\">\n <div className=\"relative\">\n <Loader2 className=\"h-10 w-10 animate-spin text-primary opacity-20\" />\n <Loader2 className=\"absolute inset-0 h-10 w-10 animate-spin text-primary [animation-duration:3s]\" />\n </div>\n <span className=\"text-[11px] font-black text-gray-400 uppercase tracking-widest animate-pulse\">\n Scanning Archive...\n </span>\n </div>\n ) : searchResults.length > 0 ? (\n <>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-2\">\n {searchResults.map((m) => (\n <div\n key={m._id}\n className=\"p-4 bg-white/50 hover:bg-white rounded-[22px] cursor-pointer transition-all duration-300 border border-gray-100/50 hover:border-primary/20 hover:shadow-xl hover:shadow-primary/5 group flex flex-col gap-2 min-w-0\"\n onClick={() => onSelectResult(m._id)}\n >\n <div className=\"flex items-start justify-between gap-4 min-w-0\">\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm text-gray-600 leading-relaxed group-hover:text-gray-900 transition-colors break-all\">\n {m.content}\n </p>\n </div>\n <div className=\"flex flex-col items-end gap-1.5 flex-shrink-0\">\n <span className=\"text-[10px] font-black text-primary/40 uppercase tracking-widest group-hover:text-primary transition-colors\">\n {new Date(m.createdAt).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}\n </span>\n <span className=\"text-[9px] font-bold text-gray-400 bg-gray-50 px-2 py-1 rounded-lg border border-gray-100 whitespace-nowrap\">\n {new Date(m.createdAt).toLocaleDateString(undefined, { month: 'short', day: 'numeric' })}\n </span>\n </div>\n </div>\n </div>\n ))}\n </div>\n {isLoadingMore && (\n <div className=\"flex justify-center py-4\">\n <Loader2 className=\"h-5 w-5 animate-spin text-primary opacity-50\" />\n </div>\n )}\n </>\n ) : (\n <div className=\"py-24 flex flex-col items-center justify-center gap-6\">\n <div className=\"relative size-20 rounded-full bg-gray-50 flex items-center justify-center border-4 border-white shadow-inner\">\n <Search className=\"size-8 text-gray-200\" />\n <div className=\"absolute inset-0 rounded-full border border-gray-100 animate-ping opacity-20\" />\n </div>\n <div className=\"text-center space-y-2\">\n <p className=\"text-lg font-black text-gray-900 tracking-tight\">No results found</p>\n <p className=\"text-sm text-gray-400 font-medium\">\n We couldn't find any messages matching your query.\n </p>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default HeaderSearchOverlay;\n","import React, { useEffect, useState, useRef } from \"react\";\nimport {\n Search,\n} from \"lucide-react\";\n\nimport { Input } from \"../ui/input\";\nimport { Button } from \"../ui/button\";\n\nimport HeaderLeftSide from \"./header/HeaderLeftSide\";\nimport HeaderRightSide from \"./header/HeaderRightSide\";\nimport HeaderSearchOverlay from \"./header/HeaderSearchOverlay\";\n\n\nimport { useStore } from \"../store/useStore\";\nimport type { IChannel } from \"../types/chats.types\";\n\nimport PinnedMessagesDrawer from \"./header/PinnedMessagesDrawer\";\nimport StarredMessagesDrawer from \"./header/StarredMessagesDrawer\";\nimport AttachmentsDrawer from \"./header/AttachmentsDrawer\";\nimport ChannelDetailsDrawer from \"./header/ChannelDetailsDrawer\";\nimport PermissionDrawer from \"./header/PermissionDrawer\";\nimport AdminsDrawer from \"./header/AdminsDrawer\";\nimport MembersDrawer from \"./header/MembersDrawer\";\nimport ChatActionModal from \"./header/ChatActionModal\";\nimport { useGroupInfo } from \"../hooks/useGroupInfo\";\nimport { useDebounce } from \"../hooks/useDebounce\";\nimport { searchMessages, blockUnblockUser } from \"../services/api.service\";\n\nconst EMPTY_ARRAY: any[] = [];\nconst EMPTY_OBJECT: any = {};\n\ninterface ChannelHeaderProps {\n activeChannel: IChannel | null;\n conversationId: string | null;\n onBack?: () => void;\n}\n\nconst ChannelHeader = ({\n activeChannel,\n conversationId,\n onBack,\n}: ChannelHeaderProps) => {\n\n const [state, setState] = useState({\n isSearchOpen: false,\n searchQuery: \"\",\n isDetailsOpen: false,\n isAttachmentsOpen: false,\n isPinOpen: false,\n isFavoriteOpen: false,\n loadingIds: new Set<string>(),\n isClearChatAlertOpen: false,\n isDeletingConversationAlertOpen: false,\n isLeaveGroupAlertOpen: false,\n isPermissionOpen: false,\n isMembersOpen: false,\n isAdminsOpen: false,\n searchResults: [] as any[],\n isSearching: false,\n searchCursor: null as string | null,\n searchHasMore: false,\n isLoadingMoreSearch: false,\n isBlockAlertOpen: false,\n isBlocking: false\n });\n\n const updateState = (updates: Partial<typeof state>) => {\n setState((prev) => ({ ...prev, ...updates }));\n };\n\n\n const pinnedMessages =\n useStore((s) =>\n conversationId ? s.pinnedMessagesByConversation[conversationId] : null\n ) || EMPTY_ARRAY;\n\n const starredMessages =\n useStore((s) =>\n conversationId ? s.starredMessagesByConversation[conversationId] : null\n ) || EMPTY_ARRAY;\n\n const liveCounts =\n useStore((s) =>\n conversationId ? s.liveConversationCounts[conversationId] : null\n ) || EMPTY_OBJECT;\n\n const fetchPinnedMessages = useStore((s) => s.fetchPinnedMessages);\n const fetchStarredMessages = useStore((s) => s.fetchStarredMessages);\n\n const emitDmUnpin = useStore((s) => s.emitDmUnpin);\n const emitDmUnstar = useStore((s) => s.emitDmUnstar);\n const emitDmClearChat = useStore((s) => s.emitDmClearChat);\n const emitGroupClearChat = useStore((s) => s.emitGroupClearChat);\n const emitDmDeleteConversation = useStore((s) => s.emitDmDeleteConversation);\n const emitGroupDeleteConversation = useStore((s) => s.emitGroupDeleteConversation);\n const emitGroupLeave = useStore((s) => s.emitGroupLeave);\n\n const isClearingChat = useStore(\n (s) => s.isClearingChat[conversationId || \"\"]\n );\n\n const isDeletingConversation = useStore(\n (s) => s.isDeletingConversation[conversationId || \"\"]\n );\n\n const { info: currentConversationInfo, isAdmin, userPermissions, loggedUserDetails } = useGroupInfo(conversationId);\n const setSearchActive = useStore(s => s.setSearchActive);\n const fetchMessagesStore = useStore(s => s.fetchMessages);\n const fetchSearchMessageContext = useStore(s => s.fetchSearchMessageContext);\n const setSearchedMessageId = useStore(s => s.setSearchedMessageId);\n const isSearchActive = useStore(s => s.isSearchActive);\n\n const debouncedSearch = useDebounce(state.searchQuery, 800);\n\n useEffect(() => {\n if (debouncedSearch && conversationId) {\n updateState({ searchCursor: null, searchHasMore: false });\n handleSearch(debouncedSearch);\n } else {\n updateState({ searchResults: [], searchCursor: null, searchHasMore: false });\n }\n }, [debouncedSearch, conversationId]);\n\n const handleSearch = async (query: string, cursor?: string | null) => {\n if (!conversationId) return;\n const isFirstPage = !cursor;\n updateState({ isSearching: isFirstPage, isLoadingMoreSearch: !isFirstPage });\n try {\n const response = await searchMessages(conversationId, query, 20, cursor);\n const results = response.data?.list || response.data?.messages || response.messages || response.data || [];\n const pagination = response.data?.pagination;\n setState((prev) => ({\n ...prev,\n searchResults: isFirstPage ? results : [...prev.searchResults, ...results],\n isSearching: false,\n isLoadingMoreSearch: false,\n searchCursor: pagination?.nextCursor ?? null,\n searchHasMore: pagination?.hasNextPage ?? false,\n }));\n } catch (error) {\n console.error(\"Search failed:\", error);\n updateState({ isSearching: false, isLoadingMoreSearch: false });\n }\n };\n\n const handleLoadMoreSearch = () => {\n if (!debouncedSearch || !state.searchHasMore || state.isLoadingMoreSearch || !state.searchCursor) return;\n handleSearch(debouncedSearch, state.searchCursor);\n };\n\n const handleSelectSearchResult = async (messageId: string) => {\n await fetchSearchMessageContext(messageId);\n updateState({ isSearchOpen: false, searchQuery: \"\" });\n };\n\n const handleCloseSearch = () => {\n updateState({ isSearchOpen: false, searchQuery: \"\", searchResults: [] });\n if (isSearchActive) {\n setSearchActive(false);\n setSearchedMessageId(null);\n if (conversationId) {\n fetchMessagesStore(conversationId);\n }\n }\n };\n const canViewMembers = isAdmin || userPermissions.canAddMember || userPermissions.canRemoveMember;\n\n\n const prevIsClearingRef = useRef(isClearingChat);\n\n useEffect(() => {\n if (prevIsClearingRef.current === true && !isClearingChat) {\n updateState({ isClearChatAlertOpen: false });\n }\n prevIsClearingRef.current = isClearingChat;\n }, [isClearingChat]);\n\n const prevIsDeletingRef = useRef(isDeletingConversation);\n\n useEffect(() => {\n if (prevIsDeletingRef.current === true && !isDeletingConversation) {\n updateState({ isDeletingConversationAlertOpen: false });\n // When deletion is successful and the store is updated, close active chat\n onBack?.();\n }\n prevIsDeletingRef.current = isDeletingConversation;\n }, [isDeletingConversation, onBack]);\n\n useEffect(() => {\n if (state.isPinOpen && conversationId) {\n fetchPinnedMessages(conversationId);\n }\n }, [state.isPinOpen, conversationId, fetchPinnedMessages]);\n\n useEffect(() => {\n if (state.isFavoriteOpen && conversationId) {\n fetchStarredMessages(conversationId);\n }\n }, [state.isFavoriteOpen, conversationId, fetchStarredMessages]);\n\n if (!activeChannel) return null;\n\n const pinnedCount =\n (liveCounts?.pinnedCount ?? activeChannel.pinnedCount) ?? 0;\n\n const starredCount =\n (liveCounts?.starredCount ?? activeChannel.starredCount) ?? 0;\n\n const handleClearChat = () => {\n if (!loggedUserDetails?._id || !conversationId) return;\n\n if (activeChannel.isGroup) {\n emitGroupClearChat({\n conversationId,\n sender: loggedUserDetails._id,\n });\n } else {\n emitDmClearChat({\n conversationId,\n sender: loggedUserDetails._id,\n });\n }\n };\n\n const handleDeleteConversation = () => {\n if (!loggedUserDetails?._id || !conversationId) return;\n\n if (activeChannel.isGroup) {\n emitGroupDeleteConversation({\n conversationId,\n sender: loggedUserDetails._id,\n });\n } else {\n emitDmDeleteConversation({\n conversationId,\n sender: loggedUserDetails._id,\n receiver: activeChannel.id,\n });\n }\n };\n\n const handleLeaveGroup = () => {\n if (!loggedUserDetails?._id || !conversationId) return;\n emitGroupLeave({\n conversationId,\n sender: loggedUserDetails._id,\n });\n updateState({ isLeaveGroupAlertOpen: false });\n };\n\n const handleToggleBlock = async () => {\n if (!activeChannel?.id) return;\n \n try {\n updateState({ isBlocking: true });\n const type = activeChannel.isBlocked ? 'unblock' : 'block';\n const response = await blockUnblockUser({ userId: activeChannel.id, type });\n \n if (response && response.success) {\n // Update store state for this conversation/user\n useStore.getState().toggleBlock(activeChannel.id, type === 'block');\n updateState({ isBlockAlertOpen: false });\n }\n } catch (error) {\n console.error(\"Failed to block/unblock user:\", error);\n } finally {\n updateState({ isBlocking: false });\n }\n };\n\n\n\n const handleUnpin = (messageId: string) => {\n if (!loggedUserDetails?._id || !conversationId) return;\n updateState({ loadingIds: new Set(state.loadingIds).add(messageId) });\n emitDmUnpin({ conversationId, sender: loggedUserDetails._id, messageId, receiver: activeChannel.id });\n setTimeout(() => {\n fetchPinnedMessages(conversationId!);\n updateState({\n loadingIds: new Set([...state.loadingIds].filter(id => id !== messageId))\n });\n }, 400);\n };\n\n const formatRelativeTime = (dateStr: string) => {\n if (!dateStr) return \"\";\n const date = new Date(dateStr);\n if (isNaN(date.getTime())) return dateStr;\n return date.toLocaleDateString();\n };\n\n\n\n const handleUnstar = (messageId: string) => {\n if (!loggedUserDetails?._id || !conversationId) return;\n updateState({ loadingIds: new Set(state.loadingIds).add(messageId) });\n emitDmUnstar({ messageId, sender: loggedUserDetails._id, conversationId });\n setTimeout(() => {\n fetchStarredMessages(conversationId!);\n updateState({\n loadingIds: new Set([...state.loadingIds].filter(id => id !== messageId))\n });\n }, 400);\n };\n\n\n return (\n <div className=\"sticky top-0 z-30 flex h-16 shrink-0 items-center justify-between border-b border-black/[0.06] bg-white/95 px-4 backdrop-blur-md md:px-5\">\n {/* Backdrop Overlay when Search is Active */}\n {state.isSearchOpen && (\n <div\n className=\"fixed inset-0 backdrop-blur-sm z-[-1] animate-in fade-in duration-300\"\n onClick={handleCloseSearch}\n />\n )}\n\n {state.isSearchOpen ? (\n <div className=\"flex-1 flex items-center gap-4 animate-in fade-in slide-in-from-right-4 duration-300\">\n <div className=\"relative flex-1 group\">\n <Search className=\"absolute left-4 top-1/2 -translate-y-1/2 size-5 text-primary opacity-40 group-focus-within:opacity-100 transition-opacity\" />\n <Input\n autoFocus\n placeholder=\"Search for messages, media, and more...\"\n className=\"h-12 w-full pl-12 pr-4 rounded-2xl bg-gray-50 border-none focus-visible:ring-2 focus-visible:ring-primary/20 transition-all font-bold placeholder:text-muted-foreground/40 text-base\"\n value={state.searchQuery}\n onChange={(e) => updateState({ searchQuery: e.target.value })}\n onKeyDown={(e) => e.key === 'Escape' && handleCloseSearch()}\n />\n <HeaderSearchOverlay\n searchQuery={state.searchQuery}\n isSearching={state.isSearching}\n searchResults={state.searchResults}\n onSelectResult={handleSelectSearchResult}\n hasMore={state.searchHasMore}\n isLoadingMore={state.isLoadingMoreSearch}\n onLoadMore={handleLoadMoreSearch}\n />\n </div>\n <Button\n variant=\"ghost\"\n className=\"h-12 px-8 rounded-2xl text-xs font-black text-muted-foreground uppercase tracking-[0.2em] hover:bg-red-50 hover:text-red-500 transition-all\"\n onClick={handleCloseSearch}\n >\n Close\n </Button>\n </div>\n ) : (\n <>\n <HeaderLeftSide\n onBack={onBack}\n activeChannel={activeChannel}\n pinnedCount={pinnedCount}\n starredCount={starredCount}\n onOpenDetails={() => updateState({ isDetailsOpen: true })}\n onOpenPins={() => updateState({ isPinOpen: true })}\n onOpenStars={() => updateState({ isFavoriteOpen: true })}\n />\n\n <HeaderRightSide\n activeChannel={activeChannel}\n isAdmin={isAdmin}\n canViewMembers={canViewMembers}\n onOpenSearch={() => updateState({ isSearchOpen: true })}\n onOpenDetails={() => updateState({ isDetailsOpen: true })}\n onOpenPermissions={() => updateState({ isPermissionOpen: true })}\n onOpenMembers={() => updateState({ isMembersOpen: true })}\n onOpenAdmins={() => updateState({ isAdminsOpen: true })}\n onOpenAttachments={() => updateState({ isAttachmentsOpen: true })}\n onOpenPins={() => updateState({ isPinOpen: true })}\n onOpenStars={() => updateState({ isFavoriteOpen: true })}\n onOpenClearChat={() => updateState({ isClearChatAlertOpen: true })}\n onOpenDeleteChannel={() => updateState({ isDeletingConversationAlertOpen: true })}\n onOpenLeaveGroup={() => updateState({ isLeaveGroupAlertOpen: true })}\n onToggleBlock={() => updateState({ isBlockAlertOpen: true })}\n isBlocked={activeChannel?.isBlocked}\n />\n </>\n )}\n\n\n <ChatActionModal\n isOpen={state.isLeaveGroupAlertOpen}\n onOpenChange={(open) => updateState({ isLeaveGroupAlertOpen: open })}\n title=\"Leave Group?\"\n description=\"Are you sure you want to leave this group?\"\n warningTitle=\"Warning\"\n warningDescription=\"You will no longer be able to send or receive messages in this group.\"\n actionButtonText=\"Yes, leave group\"\n loadingText=\"Leaving...\"\n isLoading={false} // Add proper loading state if available in store\n onAction={handleLeaveGroup}\n type=\"delete\"\n />\n\n\n <ChatActionModal\n isOpen={state.isClearChatAlertOpen}\n onOpenChange={(open) => updateState({ isClearChatAlertOpen: open })}\n title=\"Clear chat history?\"\n description=\"This will permanently delete all messages in this conversation for you.\"\n warningTitle=\"Warning\"\n warningDescription=\"Other participants will still be able to see these messages. This action cannot be undone.\"\n actionButtonText=\"Yes, clear chat\"\n loadingText=\"Clearing...\"\n isLoading={!!isClearingChat}\n onAction={handleClearChat}\n type=\"clear\"\n />\n\n <ChatActionModal\n isOpen={state.isDeletingConversationAlertOpen}\n onOpenChange={(open) => updateState({ isDeletingConversationAlertOpen: open })}\n title=\"Delete Channel?\"\n description=\"This will permanently delete this conversation and all its contents for you.\"\n warningTitle=\"Critical Warning\"\n warningDescription=\"This action cannot be undone. You will lose access to all messages in this channel.\"\n actionButtonText=\"Yes, delete channel\"\n loadingText=\"Deleting...\"\n isLoading={!!isDeletingConversation}\n onAction={handleDeleteConversation}\n type=\"delete\"\n />\n\n <ChatActionModal\n isOpen={state.isBlockAlertOpen}\n onOpenChange={(open) => updateState({ isBlockAlertOpen: open })}\n title={activeChannel?.isBlocked ? \"Unblock User?\" : \"Block User?\"}\n description={activeChannel?.isBlocked ? `Are you sure you want to unblock ${activeChannel.name}?` : `Are you sure you want to block ${activeChannel.name}?`}\n warningTitle=\"Warning\"\n warningDescription={activeChannel?.isBlocked ? \"They will be able to send you messages again.\" : \"They will no longer be able to send you messages.\"}\n actionButtonText={activeChannel?.isBlocked ? \"Yes, unblock\" : \"Yes, block\"}\n loadingText={activeChannel?.isBlocked ? \"Unblocking...\" : \"Blocking...\"}\n isLoading={state.isBlocking}\n onAction={handleToggleBlock}\n type=\"block\"\n />\n\n <ChannelDetailsDrawer\n isOpen={state.isDetailsOpen}\n onOpenChange={(open: boolean) => updateState({ isDetailsOpen: open })}\n activeChannel={activeChannel}\n conversationInfo={currentConversationInfo}\n />\n\n <PermissionDrawer\n isOpen={state.isPermissionOpen}\n onOpenChange={(open: boolean) => updateState({ isPermissionOpen: open })}\n conversationId={conversationId}\n conversationInfo={currentConversationInfo}\n />\n\n <MembersDrawer\n isOpen={state.isMembersOpen}\n onOpenChange={(open: boolean) => updateState({ isMembersOpen: open })}\n conversationId={conversationId}\n conversationInfo={currentConversationInfo}\n />\n\n <AdminsDrawer\n isOpen={state.isAdminsOpen}\n onOpenChange={(open: boolean) => updateState({ isAdminsOpen: open })}\n conversationId={conversationId}\n conversationInfo={currentConversationInfo}\n />\n\n <AttachmentsDrawer\n isOpen={state.isAttachmentsOpen}\n onOpenChange={(open: boolean) => updateState({ isAttachmentsOpen: open })}\n />\n\n <PinnedMessagesDrawer isOpen={state.isPinOpen} onOpenChange={(open: boolean) => updateState({ isPinOpen: open })} pinnedMessages={pinnedMessages} loggedUserDetails={loggedUserDetails} conversationId={conversationId} activeChannel={activeChannel} loadingIds={state.loadingIds} formatRelativeTime={formatRelativeTime} onUnpin={handleUnpin} />\n <StarredMessagesDrawer isOpen={state.isFavoriteOpen} onOpenChange={(open: boolean) => updateState({ isFavoriteOpen: open })} starredMessages={starredMessages} loggedUserDetails={loggedUserDetails} conversationId={conversationId} activeChannel={activeChannel} loadingIds={state.loadingIds} formatRelativeTime={formatRelativeTime} onUnstar={handleUnstar} />\n\n </div>\n );\n};\n\nexport default ChannelHeader;","\nimport * as React from \"react\"\nimport { XIcon } from \"lucide-react\"\nimport { Dialog as SheetPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../lib/utils\"\n\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />\n}\n\nfunction SheetTrigger({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />\n}\n\nfunction SheetClose({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />\n}\n\nfunction SheetPortal({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\n}\n\nfunction SheetOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n showCloseButton?: boolean\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500\",\n side === \"right\" &&\n \"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm\",\n side === \"left\" &&\n \"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm\",\n side === \"top\" &&\n \"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b\",\n side === \"bottom\" &&\n \"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none\">\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Content>\n </SheetPortal>\n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"flex flex-col gap-1.5 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetTitle({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn(\"text-foreground font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n","import React from \"react\";\nimport { Pin } from \"lucide-react\";\nimport {\n Sheet,\n SheetContent,\n SheetHeader,\n SheetTitle,\n} from \"../../ui/sheet\";\nimport { useStore } from \"../../store/useStore\";\nimport {\n SavedMessageCard,\n parseSavedMessage,\n EMPTY_CONVERSATION_MESSAGES,\n} from \"./SavedMessageCard\";\n\ninterface PinnedMessagesDrawerProps {\n isOpen: boolean;\n onOpenChange: (open: boolean) => void;\n pinnedMessages: any[];\n loggedUserDetails: any;\n conversationId: string | null;\n activeChannel: any;\n loadingIds: Set<string>;\n formatRelativeTime: (date: string) => string;\n onUnpin: (messageId: string) => void;\n}\n\nconst PinnedMessagesDrawer = ({\n isOpen,\n onOpenChange,\n pinnedMessages,\n loggedUserDetails,\n conversationId,\n activeChannel,\n loadingIds,\n onUnpin,\n}: PinnedMessagesDrawerProps) => {\n const allUsers = useStore((s) => s.allUsers);\n const conversationMessages = useStore((s) =>\n conversationId\n ? s.messagesByConversation[conversationId] ?? EMPTY_CONVERSATION_MESSAGES\n : EMPTY_CONVERSATION_MESSAGES\n );\n\n return (\n <Sheet open={isOpen} onOpenChange={onOpenChange}>\n <SheetContent\n showCloseButton\n className=\"flex w-full flex-col gap-0 p-0 sm:max-w-[420px]\"\n >\n <SheetHeader className=\"border-b border-black/[0.06] px-5 py-4 pr-12 text-left\">\n <SheetTitle className=\"flex items-center gap-2 text-base font-semibold text-[#0f172a]\">\n <span className=\"inline-flex size-8 items-center justify-center rounded-lg bg-(--chat-theme-10) text-(--chat-theme)\">\n <Pin size={15} className=\"fill-current\" />\n </span>\n Pinned messages\n </SheetTitle>\n <p className=\"text-xs text-muted-foreground\">\n {pinnedMessages.length === 0\n ? \"No pinned messages in this chat\"\n : `${pinnedMessages.length} message${pinnedMessages.length === 1 ? \"\" : \"s\"} pinned`}\n </p>\n </SheetHeader>\n\n <div className=\"chat-message-scroll flex-1 overflow-y-auto bg-[#f8fafc] p-4\">\n {pinnedMessages.length > 0 ? (\n <div className=\"space-y-3\">\n {pinnedMessages.map((msg: any) => {\n const item = parseSavedMessage(msg, {\n loggedUserDetails,\n activeChannel,\n allUsers,\n conversationMessages,\n mode: \"pinned\",\n });\n const canUnpin =\n String(msg.pinnedBy?._id || msg.pinnedBy) ===\n String(loggedUserDetails?._id);\n\n return (\n <SavedMessageCard\n key={msg._id || item.id}\n item={item}\n variant=\"pinned\"\n badgeIcon={Pin}\n badgeClass=\"bg-(--chat-theme-10) text-(--chat-theme)\"\n quoteClass=\"bg-(--chat-theme-5) ring-1 ring-(--chat-theme-10)\"\n isLoading={loadingIds.has(item.id)}\n showAction={canUnpin}\n onAction={() => onUnpin(item.id)}\n />\n );\n })}\n </div>\n ) : (\n <div className=\"flex min-h-[300px] flex-col items-center justify-center text-center\">\n <div className=\"mb-4 flex size-14 items-center justify-center rounded-2xl bg-white shadow-sm ring-1 ring-black/[0.05]\">\n <Pin size={22} className=\"text-(--chat-theme-40)\" />\n </div>\n <p className=\"text-sm font-semibold text-[#0f172a]\">Nothing pinned yet</p>\n <p className=\"mt-1 max-w-[240px] text-xs leading-relaxed text-muted-foreground\">\n Long-press or use the message menu to pin important messages here.\n </p>\n </div>\n )}\n </div>\n </SheetContent>\n </Sheet>\n );\n};\n\nexport default PinnedMessagesDrawer;\n","import React from \"react\";\nimport { Loader2, LucideIcon, PinOff, StarOff } from \"lucide-react\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"../../ui/avatar\";\nimport { cn } from \"../../lib/utils\";\n\nexport const EMPTY_CONVERSATION_MESSAGES: any[] = [];\n\nexport type SavedMessageItem = {\n id: string;\n content: string;\n senderName: string;\n senderImage?: string;\n subtitle: string;\n dateLabel: string;\n};\n\nexport type SavedMessageParseContext = {\n loggedUserDetails?: { _id?: string; name?: string; image?: string };\n activeChannel?: { id?: string; name?: string; image?: string; isGroup?: boolean };\n allUsers?: Array<{ _id?: string; name?: string; image?: string }>;\n conversationMessages?: any[];\n mode?: \"pinned\" | \"starred\";\n};\n\nfunction getMessageId(msg: any): string {\n if (msg?.messageId && typeof msg.messageId === \"object\") {\n return String(msg.messageId._id || msg.messageId.id || \"\");\n }\n if (typeof msg?.messageId === \"string\") {\n return msg.messageId;\n }\n return String(msg?._id || msg?.id || \"\");\n}\n\nfunction getMessageObject(msg: any) {\n if (msg?.messageId && typeof msg.messageId === \"object\") {\n return msg.messageId;\n }\n return msg;\n}\n\nfunction readSenderFromRecord(record: any): { name: string; image?: string; id?: string } {\n if (!record) return { name: \"\" };\n\n const sender = record.sender ?? record.messageId?.sender;\n if (sender && typeof sender === \"object\") {\n return {\n id: String(sender._id || sender.id || \"\"),\n name: sender.name || sender.username || \"\",\n image: sender.image || sender.avatar,\n };\n }\n\n const senderId = String(\n record.senderId ||\n record.sender ||\n record.messageId?.senderId ||\n record.messageId?.sender ||\n \"\"\n );\n\n return { id: senderId || undefined, name: \"\", image: undefined };\n}\n\nfunction resolveSenderName(\n msg: any,\n ctx: SavedMessageParseContext\n): { name: string; image?: string } {\n const messageObj = getMessageObject(msg);\n const messageId = getMessageId(msg);\n const loggedId = String(ctx.loggedUserDetails?._id || \"\");\n\n const tryRecord = (record: any) => {\n const parsed = readSenderFromRecord(record);\n if (parsed.name) {\n const isSelf = parsed.id && loggedId && parsed.id === loggedId;\n return {\n name: isSelf ? \"You\" : parsed.name,\n image: parsed.image,\n };\n }\n return null;\n };\n\n // 1) Sender on pin/star record or nested message object\n for (const record of [messageObj, msg]) {\n const hit = tryRecord(record);\n if (hit) return hit;\n }\n\n // 2) Lookup full message from loaded conversation\n if (messageId && ctx.conversationMessages?.length) {\n const found = ctx.conversationMessages.find(\n (m) => String(m._id || m.id) === String(messageId)\n );\n if (found) {\n const hit = tryRecord(found);\n if (hit) return hit;\n\n const foundSenderId = String(found.sender?._id || found.sender || \"\");\n if (foundSenderId && loggedId && foundSenderId === loggedId) {\n return {\n name: \"You\",\n image: ctx.loggedUserDetails?.image,\n };\n }\n }\n }\n\n // 3) Resolve sender id from any available field\n const senderId = String(\n messageObj?.senderId ||\n msg?.senderId ||\n (typeof messageObj?.sender === \"string\" ? messageObj.sender : \"\") ||\n (typeof msg?.sender === \"string\" ? msg.sender : \"\") ||\n \"\"\n );\n\n if (senderId && loggedId && senderId === loggedId) {\n return {\n name: \"You\",\n image: ctx.loggedUserDetails?.image,\n };\n }\n\n if (senderId && ctx.allUsers?.length) {\n const user = ctx.allUsers.find((u) => String(u._id) === senderId);\n if (user?.name) {\n return { name: user.name, image: user.image };\n }\n }\n\n // 4) DM fallback — other participant is the active channel\n if (ctx.activeChannel && !ctx.activeChannel.isGroup && ctx.activeChannel.name) {\n return {\n name: ctx.activeChannel.name,\n image: ctx.activeChannel.image,\n };\n }\n\n // 5) Last resort — logged-in user if they pinned their own message in solo context\n if (ctx.loggedUserDetails?.name) {\n return {\n name: ctx.loggedUserDetails.name,\n image: ctx.loggedUserDetails.image,\n };\n }\n\n return { name: \"Member\" };\n}\n\nexport function parseSavedMessage(\n msg: any,\n ctx: SavedMessageParseContext = {}\n): SavedMessageItem {\n const mode = ctx.mode || \"pinned\";\n const messageObj = getMessageObject(msg);\n const id = getMessageId(msg);\n\n const rawContent =\n messageObj?.content ??\n msg?.content ??\n msg?.messageId?.content ??\n \"\";\n const content =\n typeof rawContent === \"string\" && rawContent.trim()\n ? rawContent.trim()\n : \"📎 Attachment\";\n\n const { name: senderName, image: senderImage } = resolveSenderName(msg, ctx);\n\n let subtitle = \"Message\";\n if (mode === \"pinned\") {\n const pinnerName = msg?.pinnedBy?.name || \"\";\n const pinnerId = msg?.pinnedBy?._id || msg?.pinnedBy;\n const byYou =\n String(pinnerId) === String(ctx.loggedUserDetails?._id) ||\n pinnerName === ctx.loggedUserDetails?.name;\n subtitle = byYou ? \"Pinned by you\" : `Pinned by ${pinnerName || \"member\"}`;\n } else {\n subtitle = senderName === \"You\" ? \"Starred by you\" : \"Starred message\";\n }\n\n const rawDate =\n msg?.pinnedAt ||\n msg?.starredAt ||\n msg?.createdAt ||\n messageObj?.createdAt ||\n \"\";\n\n return {\n id,\n content,\n senderName,\n senderImage,\n subtitle,\n dateLabel: formatSavedMessageDate(rawDate),\n };\n}\n\nexport function formatSavedMessageDate(dateStr?: string) {\n if (!dateStr) return \"\";\n const date = new Date(dateStr);\n if (Number.isNaN(date.getTime())) return String(dateStr);\n\n const now = new Date();\n const sameDay =\n date.getDate() === now.getDate() &&\n date.getMonth() === now.getMonth() &&\n date.getFullYear() === now.getFullYear();\n\n if (sameDay) {\n return `Today · ${date.toLocaleTimeString([], { hour: \"2-digit\", minute: \"2-digit\" })}`;\n }\n\n return date.toLocaleDateString([], {\n day: \"numeric\",\n month: \"short\",\n year: \"numeric\",\n });\n}\n\ntype SavedMessageCardProps = {\n item: SavedMessageItem;\n variant: \"pinned\" | \"starred\";\n badgeIcon: LucideIcon;\n badgeClass: string;\n quoteClass: string;\n isLoading?: boolean;\n showAction?: boolean;\n onAction?: () => void;\n};\n\nexport function SavedMessageCard({\n item,\n variant,\n badgeIcon: BadgeIcon,\n badgeClass,\n quoteClass,\n isLoading = false,\n showAction = true,\n onAction,\n}: SavedMessageCardProps) {\n const ActionIcon = variant === \"pinned\" ? PinOff : StarOff;\n const initial = item.senderName.charAt(0).toUpperCase();\n\n return (\n <article className=\"rounded-2xl bg-white p-3.5 shadow-[0_1px_2px_rgba(15,23,42,0.06)] ring-1 ring-black/[0.05] transition-all hover:shadow-[0_4px_14px_rgba(15,23,42,0.08)]\">\n <div className=\"mb-3 flex items-start gap-3\">\n <Avatar className=\"size-10 shrink-0 ring-2 ring-white\">\n <AvatarImage src={item.senderImage} alt={item.senderName} />\n <AvatarFallback className=\"bg-slate-100 text-sm font-semibold text-slate-600\">\n {initial}\n </AvatarFallback>\n </Avatar>\n\n <div className=\"min-w-0 flex-1 pt-0.5\">\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"min-w-0\">\n <p className=\"truncate text-[14px] font-semibold leading-tight text-[#0f172a]\">\n {item.senderName}\n </p>\n <p className=\"mt-0.5 truncate text-[11px] text-muted-foreground\">\n {item.subtitle}\n </p>\n </div>\n\n {showAction && onAction && (\n <button\n type=\"button\"\n onClick={onAction}\n disabled={isLoading}\n title={variant === \"pinned\" ? \"Unpin message\" : \"Remove star\"}\n className={cn(\n \"inline-flex size-8 shrink-0 items-center justify-center rounded-full text-muted-foreground transition-colors\",\n \"hover:bg-black/[0.05] hover:text-[#0f172a]\",\n \"disabled:cursor-not-allowed disabled:opacity-40\"\n )}\n >\n {isLoading ? (\n <Loader2 size={15} className=\"animate-spin\" />\n ) : (\n <ActionIcon size={15} />\n )}\n </button>\n )}\n </div>\n </div>\n </div>\n\n <div className={cn(\"rounded-xl px-3.5 py-3\", quoteClass)}>\n <p className=\"line-clamp-3 text-[13px] leading-6 text-[#334155] break-words\">\n {item.content}\n </p>\n </div>\n\n <div className=\"mt-3 flex items-center justify-between gap-2\">\n <span\n className={cn(\n \"inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide\",\n badgeClass\n )}\n >\n <BadgeIcon size={10} className={variant === \"starred\" ? \"fill-current\" : \"\"} />\n {variant === \"pinned\" ? \"Pinned\" : \"Starred\"}\n </span>\n {item.dateLabel && (\n <time className=\"text-[11px] text-muted-foreground\">{item.dateLabel}</time>\n )}\n </div>\n </article>\n );\n}\n","import React from \"react\";\nimport { Star } from \"lucide-react\";\nimport {\n Sheet,\n SheetContent,\n SheetHeader,\n SheetTitle,\n} from \"../../ui/sheet\";\nimport { useStore } from \"../../store/useStore\";\nimport {\n SavedMessageCard,\n parseSavedMessage,\n EMPTY_CONVERSATION_MESSAGES,\n} from \"./SavedMessageCard\";\n\ninterface StarredMessagesDrawerProps {\n isOpen: boolean;\n onOpenChange: (open: boolean) => void;\n starredMessages: any[];\n loggedUserDetails: any;\n conversationId: string | null;\n activeChannel: any;\n loadingIds: Set<string>;\n formatRelativeTime: (date: string) => string;\n onUnstar: (messageId: string) => void;\n}\n\nconst StarredMessagesDrawer = ({\n isOpen,\n onOpenChange,\n starredMessages,\n loggedUserDetails,\n conversationId,\n activeChannel,\n loadingIds,\n onUnstar,\n}: StarredMessagesDrawerProps) => {\n const allUsers = useStore((s) => s.allUsers);\n const conversationMessages = useStore((s) =>\n conversationId\n ? s.messagesByConversation[conversationId] ?? EMPTY_CONVERSATION_MESSAGES\n : EMPTY_CONVERSATION_MESSAGES\n );\n\n return (\n <Sheet open={isOpen} onOpenChange={onOpenChange}>\n <SheetContent\n showCloseButton\n className=\"flex w-full flex-col gap-0 p-0 sm:max-w-[420px]\"\n >\n <SheetHeader className=\"border-b border-black/[0.06] px-5 py-4 pr-12 text-left\">\n <SheetTitle className=\"flex items-center gap-2 text-base font-semibold text-[#0f172a]\">\n <span className=\"inline-flex size-8 items-center justify-center rounded-lg bg-amber-50 text-amber-500\">\n <Star size={15} className=\"fill-current\" />\n </span>\n Starred messages\n </SheetTitle>\n <p className=\"text-xs text-muted-foreground\">\n {starredMessages.length === 0\n ? \"No starred messages in this chat\"\n : `${starredMessages.length} message${starredMessages.length === 1 ? \"\" : \"s\"} saved for you`}\n </p>\n </SheetHeader>\n\n <div className=\"chat-message-scroll flex-1 overflow-y-auto bg-[#f8fafc] p-4\">\n {starredMessages.length > 0 ? (\n <div className=\"space-y-3\">\n {starredMessages.map((msg: any) => {\n const item = parseSavedMessage(msg, {\n loggedUserDetails,\n activeChannel,\n allUsers,\n conversationMessages,\n mode: \"starred\",\n });\n\n return (\n <SavedMessageCard\n key={msg._id || item.id}\n item={item}\n variant=\"starred\"\n badgeIcon={Star}\n badgeClass=\"bg-amber-50 text-amber-600\"\n quoteClass=\"bg-amber-50/70 ring-1 ring-amber-100\"\n isLoading={loadingIds.has(item.id)}\n onAction={() => onUnstar(item.id)}\n />\n );\n })}\n </div>\n ) : (\n <div className=\"flex min-h-[300px] flex-col items-center justify-center text-center\">\n <div className=\"mb-4 flex size-14 items-center justify-center rounded-2xl bg-white shadow-sm ring-1 ring-amber-100\">\n <Star size={22} className=\"fill-amber-400 text-amber-400\" />\n </div>\n <p className=\"text-sm font-semibold text-[#0f172a]\">Nothing starred yet</p>\n <p className=\"mt-1 max-w-[240px] text-xs leading-relaxed text-muted-foreground\">\n Star messages from the chat menu to keep them in your personal list.\n </p>\n </div>\n )}\n </div>\n </SheetContent>\n </Sheet>\n );\n};\n\nexport default StarredMessagesDrawer;\n","import React from 'react';\nimport { Paperclip, Download } from \"lucide-react\";\nimport {\n Sheet,\n SheetContent,\n SheetHeader,\n SheetTitle,\n SheetDescription,\n} from \"../../ui/sheet\";\nimport { Button } from \"../../ui/button\";\n\ninterface AttachmentsDrawerProps {\n isOpen: boolean;\n onOpenChange: (open: boolean) => void;\n}\n\nconst AttachmentsDrawer = ({ isOpen, onOpenChange }: AttachmentsDrawerProps) => {\n return (\n <Sheet open={isOpen} onOpenChange={onOpenChange}>\n <SheetContent className=\"sm:max-w-md border-none p-0 flex flex-col gap-0 overflow-hidden bg-white\">\n <SheetHeader className=\"px-8 pt-8 pb-4 shrink-0\">\n <SheetTitle className=\"text-xl font-bold text-gray-900\">Attachments</SheetTitle>\n <SheetDescription className=\"text-xs font-semibold text-gray-400 uppercase tracking-widest mt-1\">\n Media, links, and documents\n </SheetDescription>\n </SheetHeader>\n\n <div className=\"flex-1 overflow-y-auto px-6 pb-8 custom-scrollbar mt-4\">\n <div className=\"space-y-6\">\n {/* Media Section */}\n <div className=\"space-y-4\">\n <h3 className=\"text-[10px] font-black uppercase tracking-[0.2em] text-gray-400 px-2\">Media</h3>\n <div className=\"grid grid-cols-3 gap-2\">\n {[\n { id: 'm1', type: 'image', url: 'https://images.unsplash.com/photo-1515378791036-0648a3ef77b2?w=300&q=80', name: 'UI Design Ref' },\n { id: 'm2', type: 'image', url: 'https://images.unsplash.com/photo-1542831371-29b0f74f9713?w=300&q=80', name: 'Code Snippet' },\n { id: 'm3', type: 'video', url: 'https://www.w3schools.com/tags/movie.mp4', name: 'Demo Recording' },\n { id: 'm4', type: 'image', url: 'https://images.unsplash.com/photo-1498050108023-c5249f4df085?w=300&q=80', name: 'Workspace' },\n ].map((media) => (\n <div key={media.id} className=\"relative aspect-square rounded-xl overflow-hidden border border-gray-100 shadow-sm bg-gray-50 flex flex-col group\">\n <div className=\"relative flex-1 overflow-hidden\">\n {media.type === 'image' ? (\n <img\n src={media.url}\n alt={media.name}\n className=\"w-full h-full object-cover transition-transform duration-500 group-hover:scale-105\"\n />\n ) : (\n <div className=\"relative w-full h-full\">\n <video\n className=\"w-full h-full object-cover\"\n >\n <source src={media.url} type=\"video/mp4\" />\n </video>\n </div>\n )}\n </div>\n\n <div className=\"bg-white px-2 py-1.5 border-t border-gray-50 shrink-0 flex items-center justify-between gap-2\">\n <p className=\"text-[9px] font-bold text-gray-900 truncate flex-1\">{media.name}</p>\n <button className=\"size-6 rounded-lg bg-gray-50 flex items-center justify-center text-gray-900 hover:bg-gray-900 hover:text-white transition-all shrink-0\">\n <Download size={12} />\n </button>\n </div>\n </div>\n ))}\n </div>\n </div>\n\n {/* Files Section */}\n <div className=\"space-y-3\">\n <h3 className=\"text-[10px] font-black uppercase tracking-[0.2em] text-gray-400 px-2\">Recent Files</h3>\n {[\n { name: \"Project_Requirements.pdf\", size: \"2.4 MB\", type: \"pdf\", date: \"Today\" },\n { name: \"UI_Mockups_v2.fig\", size: \"14.1 MB\", type: \"fig\", date: \"Yesterday\" },\n { name: \"Q1_Financial_Report.xlsx\", size: \"1.1 MB\", type: \"excel\", date: \"Mar 15\" }\n ].map((file, i) => (\n <div key={i} className=\"group flex items-center gap-4 p-4 rounded-2xl border-2 border-transparent bg-gray-50/50 hover:bg-white hover:border-gray-100 hover:shadow-xl hover:shadow-gray-200/40 transition-all cursor-pointer\">\n <div className=\"w-12 h-12 bg-white rounded-xl shadow-sm border border-gray-100 flex items-center justify-center shrink-0 group-hover:bg-gray-900 group-hover:border-gray-900 transition-colors\">\n <Paperclip size={20} className=\"text-gray-400 group-hover:text-white transition-colors\" />\n </div>\n <div className=\"flex-1 overflow-hidden\">\n <p className=\"text-sm font-bold text-gray-900 truncate\">{file.name}</p>\n <div className=\"flex items-center gap-2 mt-1 text-[10px] font-bold text-gray-400 uppercase tracking-wider\">\n <span>{file.size}</span>\n <span className=\"size-1 rounded-full bg-gray-200\"></span>\n <span>{file.date}</span>\n </div>\n </div>\n <div className=\"opacity-0 group-hover:opacity-100 transition-opacity translate-x-1 group-hover:translate-x-0\">\n <Button variant=\"ghost\" size=\"icon\" className=\"size-10 rounded-full hover:bg-gray-100\">\n <Download size={18} className=\"text-gray-900\" />\n </Button>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n </SheetContent>\n </Sheet>\n );\n};\n\nexport default AttachmentsDrawer;\n","import * as React from \"react\"\n\nimport { cn } from \"../lib/utils\"\n\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","\nimport { useMemo } from 'react';\nimport { useStore } from '../store/useStore';\nimport { IConversationInfo, GroupPermissions } from '../store/types/store.types';\n\n\nexport const useGroupInfo = (conversationId: string | null | undefined) => {\n const conversationInfos = useStore((s) => s.conversationInfos);\n const loggedUserDetails = useStore((s) => s.loggedUserDetails);\n\n const info: IConversationInfo | null = conversationId ? (conversationInfos[conversationId] || null) : null;\n\n const isAdmin = useMemo(() => {\n if (!info || !loggedUserDetails) return false;\n return info.groupAdmins?.some((admin: any) =>\n (typeof admin === 'string' ? admin : admin._id) === String(loggedUserDetails._id)\n ) || false;\n }, [info, loggedUserDetails]);\n\n const isOwner = useMemo(() => {\n if (!info || !loggedUserDetails) return false;\n\n // Handle owner being either a string ID or a populated object like { _id: \"...\", name: \"...\" }\n let ownerId = null;\n if (info.owner) {\n ownerId = typeof info.owner === 'object' && info.owner !== null ?\n (info.owner._id || info.owner.id) :\n info.owner;\n }\n\n return String(ownerId) === String(loggedUserDetails._id);\n }, [info, loggedUserDetails]);\n\n const permissions: GroupPermissions | null = info?.groupPermissions || null;\n\n const userPermissions = useMemo(() => {\n return {\n canSendMessage: isOwner || isAdmin || !permissions?.onlyAdminCanSendMessage,\n canEditInfo: isOwner || isAdmin || !permissions?.onlyAdminCanEditInfo,\n canAddMember: isOwner || !!permissions?.allowMemberAdd,\n canRemoveMember: isOwner || !!permissions?.allowMemberRemove,\n canEditMessage: isOwner || isAdmin || !!permissions?.senderCanEditMessage,\n // You can add more derived permissions here as needed\n };\n }, [isOwner, isAdmin, permissions]);\n\n return {\n info,\n permissions,\n userPermissions,\n isAdmin,\n isOwner,\n loggedUserDetails\n };\n};\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { Calendar, Camera, Loader2, Mail, Save, User, Users } from \"lucide-react\";\nimport {\n Sheet,\n SheetContent,\n SheetHeader,\n SheetTitle,\n SheetDescription,\n} from \"../../ui/sheet\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"../../ui/avatar\";\nimport { Input } from \"../../ui/input\";\nimport { Textarea } from \"../../ui/textarea\";\nimport { Button } from \"../../ui/button\";\nimport { useGroupInfo } from \"../../hooks/useGroupInfo\";\nimport useStore from '../../store/useStore';\nimport { IConversationInfo } from '../../store/types/store.types';\n\ninterface ChannelDetailsDrawerProps {\n isOpen: boolean;\n onOpenChange: (open: boolean) => void;\n activeChannel: any;\n conversationInfo: IConversationInfo | null;\n}\n\nconst pickDate = (...values: unknown[]) => {\n for (const value of values) {\n if (!value) continue;\n const date = value instanceof Date ? value : new Date(String(value));\n if (!Number.isNaN(date.getTime())) return date;\n }\n return null;\n};\n\nconst ChannelDetailsDrawer = ({ isOpen, onOpenChange, activeChannel, conversationInfo }: ChannelDetailsDrawerProps) => {\n const updateGroupDetails = useStore((s) => s.updateGroupDetails);\n const conversations = useStore((s) => s.conversations);\n const allUsers = useStore((s) => s.allUsers);\n const loggedUserDetails = useStore((s) => s.loggedUserDetails);\n const storeActiveConversationId = useStore((s) => s.activeConversationId);\n\n const conversationId =\n conversationInfo?._id ||\n activeChannel?.conversationId ||\n storeActiveConversationId ||\n null;\n\n const { userPermissions } = useGroupInfo(conversationId);\n\n const messagesByConversation = useStore((s) => s.messagesByConversation);\n\n const storeConversation = useMemo(\n () => conversations.find((c) => conversationId && String(c._id) === String(conversationId)),\n [conversations, conversationId]\n );\n\n const isGroupChannel = useMemo(() => {\n if (storeConversation) {\n return storeConversation.conversationType === \"group\" || !!storeConversation.isGroup;\n }\n return !!activeChannel?.isGroup;\n }, [storeConversation, activeChannel?.isGroup]);\n\n const otherParticipantId = useMemo(() => {\n if (isGroupChannel || !storeConversation) return activeChannel?.id || null;\n\n const other = storeConversation.participants?.find(\n (p: any) => String(p._id || p) !== String(loggedUserDetails?._id)\n );\n return String(other?._id || other || activeChannel?.id || \"\");\n }, [isGroupChannel, storeConversation, loggedUserDetails?._id, activeChannel?.id]);\n\n const otherUser = useMemo(() => {\n if (isGroupChannel || !otherParticipantId) return null;\n return allUsers.find((u) => String(u._id) === String(otherParticipantId)) || null;\n }, [isGroupChannel, otherParticipantId, allUsers]);\n\n const resolvedCreatedAt = useMemo(\n () =>\n pickDate(\n conversationInfo?.createdAt,\n conversationInfo?.updatedAt,\n (storeConversation as any)?.createdAt,\n (storeConversation as any)?.created_at,\n (storeConversation as any)?.updatedAt,\n (storeConversation as any)?.lastMessage?.createdAt,\n otherUser?.createdAt,\n conversationId ? messagesByConversation[conversationId]?.[0]?.createdAt : null\n ),\n [conversationInfo, storeConversation, otherUser, conversationId, messagesByConversation]\n );\n\n const [detailsLoading, setDetailsLoading] = useState(false);\n const fetchStartedRef = useRef<string | null>(null);\n\n useEffect(() => {\n if (!isOpen) {\n fetchStartedRef.current = null;\n setDetailsLoading(false);\n return;\n }\n\n useStore.getState().fetchAllUsers();\n\n if (resolvedCreatedAt || !conversationId) {\n setDetailsLoading(false);\n return;\n }\n\n if (fetchStartedRef.current === conversationId) return;\n fetchStartedRef.current = conversationId;\n\n let cancelled = false;\n setDetailsLoading(true);\n\n const timeout = window.setTimeout(() => {\n if (!cancelled) setDetailsLoading(false);\n }, 2500);\n\n useStore\n .getState()\n .fetchConversationInfo(conversationId)\n .finally(() => {\n if (!cancelled) {\n setDetailsLoading(false);\n window.clearTimeout(timeout);\n }\n });\n\n return () => {\n cancelled = true;\n window.clearTimeout(timeout);\n };\n }, [isOpen, conversationId, resolvedCreatedAt]);\n\n const canEditInfo = activeChannel ? userPermissions.canEditInfo : false;\n\n const [isEditing, setIsEditing] = useState(false);\n const [name, setName] = useState('');\n const [description, setDescription] = useState('');\n const [image, setImage] = useState<string | null>(null);\n const [isSaving, setIsSaving] = useState(false);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (conversationInfo) {\n setName(conversationInfo.groupName || activeChannel?.name || '');\n setDescription(conversationInfo.groupDescription || '');\n setImage(conversationInfo.image || activeChannel?.image || null);\n } else if (activeChannel) {\n setName(activeChannel.name || '');\n setDescription('');\n setImage(activeChannel.image || null);\n }\n }, [conversationInfo, activeChannel]);\n\n if (!activeChannel) return null;\n\n const handleImageChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (file) {\n const reader = new FileReader();\n reader.onloadend = () => {\n setImage(reader.result as string);\n };\n reader.readAsDataURL(file);\n }\n };\n\n const handleSave = async () => {\n if (!activeChannel.conversationId) return;\n setIsSaving(true);\n try {\n await updateGroupDetails(activeChannel.conversationId, {\n groupName: name,\n groupDescription: description,\n groupImage: image || undefined\n });\n setIsEditing(false);\n } finally {\n setIsSaving(false);\n }\n };\n\n const formatDate = (date: Date) =>\n date.toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric'\n });\n\n const createdOnLabel = resolvedCreatedAt\n ? formatDate(resolvedCreatedAt)\n : detailsLoading\n ? \"Loading...\"\n : \"Not available\";\n\n return (\n <Sheet open={isOpen} onOpenChange={onOpenChange}>\n <SheetContent className=\"w-full sm:max-w-md flex flex-col h-full p-0\">\n <div className=\"p-6 border-b\">\n <SheetHeader>\n <SheetTitle className=\"text-xl font-bold\">Channel Details</SheetTitle>\n <SheetDescription>Background info and settings.</SheetDescription>\n </SheetHeader>\n </div>\n\n <div className=\"flex-1 overflow-y-auto\">\n <div className=\"flex flex-col items-center gap-5 p-8 bg-gradient-to-b from-gray-50/50 to-white border-b border-border/40\">\n <div className=\"relative group\">\n <input\n type=\"file\"\n ref={fileInputRef}\n className=\"hidden\"\n accept=\"image/*\"\n onChange={handleImageChange}\n />\n <Avatar className=\"h-28 w-28 border-2 border-white shadow-xl ring-1 ring-black/5\">\n <AvatarImage src={image || undefined} alt={name} />\n <AvatarFallback className=\"bg-[#f3f4f6] text-[#111827] font-bold text-4xl\">\n {(name || activeChannel.name).charAt(0).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n {isGroupChannel && canEditInfo && (\n <button\n onClick={() => fileInputRef.current?.click()}\n className=\"absolute bottom-1 right-1 p-2 bg-primary text-white rounded-full shadow-lg hover:scale-110 transition-transform flex items-center justify-center cursor-pointer\"\n title=\"Change group avatar\"\n >\n <Camera size={16} />\n </button>\n )}\n </div>\n\n {isEditing ? (\n <div className=\"w-full space-y-4 animate-in fade-in slide-in-from-top-2 duration-300\">\n <div className=\"space-y-1.5 px-2\">\n <label className=\"text-[10px] font-black text-muted-foreground uppercase tracking-wider\">Group Name</label>\n <Input\n value={name}\n onChange={(e) => setName(e.target.value)}\n className=\"h-11 font-bold shadow-sm focus-visible:ring-1\"\n placeholder=\"Enter group name\"\n />\n </div>\n <div className=\"space-y-1.5 px-2\">\n <label className=\"text-[10px] font-black text-muted-foreground uppercase tracking-wider\">Description</label>\n <Textarea\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n className=\"min-h-[100px] resize-none shadow-sm focus-visible:ring-1 text-sm font-medium\"\n placeholder=\"What is this group about?\"\n />\n </div>\n <div className=\"flex gap-2 px-2 pt-2\">\n <Button variant=\"outline\" className=\"flex-1 font-bold\" onClick={() => setIsEditing(false)}>Cancel</Button>\n <Button className=\"flex-1 font-bold\" onClick={handleSave} disabled={isSaving}>\n {isSaving ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <Save className=\"mr-2 h-4 w-4\" />}\n Save\n </Button>\n </div>\n </div>\n ) : (\n <div className=\"text-center w-full px-4\">\n <h2 className=\"text-2xl font-black text-[#111827] tracking-tight\">{name || activeChannel.name}</h2>\n <p className=\"text-sm font-medium text-muted-foreground mt-1.5 px-4 line-clamp-3\">\n {description || (isGroupChannel\n ? \"No description set for this group.\"\n : `Direct message with ${activeChannel.name}.`)}\n </p>\n {isGroupChannel && canEditInfo && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"mt-4 text-xs font-bold text-primary hover:text-primary hover:bg-primary/5 uppercase tracking-widest\"\n onClick={() => setIsEditing(true)}\n >\n Edit Details\n </Button>\n )}\n </div>\n )}\n </div>\n\n <div className=\"p-6 space-y-6\">\n <div className=\"grid grid-cols-1 gap-4\">\n <div className=\"flex items-center gap-4 p-4 rounded-2xl bg-gray-50 border border-gray-100/50\">\n <div className=\"p-2.5 bg-white shadow-sm rounded-xl text-muted-foreground\">\n <Calendar size={18} />\n </div>\n <div className=\"flex flex-col\">\n <span className=\"text-[10px] font-black text-muted-foreground uppercase tracking-widest\">Created On</span>\n <span className=\"text-sm font-bold text-[#111827]\">{createdOnLabel}</span>\n </div>\n </div>\n\n {!isGroupChannel && (otherUser?.email || activeChannel?.email) && (\n <div className=\"flex items-center gap-4 p-4 rounded-2xl bg-gray-50 border border-gray-100/50\">\n <div className=\"p-2.5 bg-white shadow-sm rounded-xl text-muted-foreground\">\n <Mail size={18} />\n </div>\n <div className=\"flex flex-col\">\n <span className=\"text-[10px] font-black text-muted-foreground uppercase tracking-widest\">Email</span>\n <span className=\"text-sm font-bold text-[#111827]\">\n {otherUser?.email || activeChannel?.email}\n </span>\n </div>\n </div>\n )}\n\n {isGroupChannel && (\n <>\n <div className=\"flex items-center gap-4 p-4 rounded-2xl bg-gray-50 border border-gray-100/50\">\n <div className=\"p-2.5 bg-white shadow-sm rounded-xl text-muted-foreground\">\n <User size={18} />\n </div>\n <div className=\"flex flex-col\">\n <span className=\"text-[10px] font-black text-muted-foreground uppercase tracking-widest\">Group Owner</span>\n <span className=\"text-sm font-bold text-[#111827]\">\n {conversationInfo?.owner?.name || (detailsLoading ? \"Loading...\" : \"Not available\")}\n </span>\n </div>\n </div>\n\n <div className=\"flex flex-col gap-4 p-4 rounded-2xl bg-gray-50 border border-gray-100/50\">\n <div className=\"flex items-center gap-4\">\n <div className=\"p-2.5 bg-white shadow-sm rounded-xl text-muted-foreground\">\n <Users size={18} />\n </div>\n <div className=\"flex flex-col\">\n <span className=\"text-[10px] font-black text-muted-foreground uppercase tracking-widest\">Participants</span>\n <span className=\"text-sm font-bold text-[#111827]\">\n {conversationInfo?.participants?.length || storeConversation?.participants?.length || 0} Members\n </span>\n </div>\n </div>\n\n <div className=\"pt-2 flex flex-wrap gap-2\">\n {(conversationInfo?.participants || storeConversation?.participants || []).map((p: any, index: number) => {\n const pId = typeof p === 'string' ? p : p._id;\n const pName = typeof p === 'string' ? \"Unknown\" : p.name;\n if (!pId) return null;\n\n return (\n <div\n key={`${pId}-${index}`}\n className=\"px-3 py-1 bg-white border border-gray-100 rounded-lg shadow-sm text-[11px] font-bold text-[#374151] flex items-center gap-1.5\"\n >\n <div className=\"size-1.5 rounded-full bg-green-500\" />\n {pName}\n </div>\n );\n })}\n </div>\n </div>\n </>\n )}\n </div>\n </div>\n </div>\n </SheetContent>\n </Sheet>\n );\n};\n\nexport default ChannelDetailsDrawer;\n","\nimport * as React from \"react\"\nimport { Switch as SwitchPrimitive } from \"radix-ui\"\nimport { cn } from \"../lib/utils\"\n\n\nfunction Switch({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n \"peer group/switch inline-flex shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-[1.15rem] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n \"pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0 dark:data-[state=checked]:bg-primary-foreground dark:data-[state=unchecked]:bg-foreground\"\n )}\n />\n </SwitchPrimitive.Root>\n )\n}\n\nexport { Switch }\n","\nimport React, { useState, useEffect } from 'react';\nimport { UserKey, Save, Loader2 } from \"lucide-react\";\nimport {\n Sheet,\n SheetContent,\n SheetHeader,\n SheetTitle,\n SheetDescription,\n} from \"../../ui/sheet\";\nimport { Switch } from \"../../ui/switch\";\nimport { Button } from \"../../ui/button\";\nimport useStore from '../../store/useStore';\nimport { GroupPermissions, IConversationInfo } from '../../store/types/store.types';\n\ninterface PermissionDrawerProps {\n isOpen: boolean;\n onOpenChange: (open: boolean) => void;\n conversationId: string | null | undefined;\n conversationInfo: IConversationInfo | null;\n}\n\nconst PermissionDrawer = ({ isOpen, onOpenChange, conversationId, conversationInfo }: PermissionDrawerProps) => {\n const updateGroupPermissions = useStore((s) => s.updateGroupPermissions);\n const [permissions, setPermissions] = useState<GroupPermissions | null>(null);\n const [isSaving, setIsSaving] = useState(false);\n\n useEffect(() => {\n if (conversationInfo?.groupPermissions) {\n setPermissions(conversationInfo.groupPermissions);\n }\n }, [conversationInfo]);\n\n if (!conversationId || !permissions) return null;\n\n const handleToggle = (key: keyof GroupPermissions) => {\n setPermissions(prev => prev ? { ...prev, [key]: !prev[key] } : null);\n };\n\n const handleSave = async () => {\n if (!conversationId || !permissions) return;\n setIsSaving(true);\n try {\n await updateGroupPermissions(conversationId, permissions);\n onOpenChange(false);\n } finally {\n setIsSaving(false);\n }\n };\n\n const permissionItems = [\n { key: 'onlyAdminCanSendMessage', label: 'Only Admin Can Send Message', desc: 'Restricts message sending to group administrators only.' },\n { key: 'onlyAdminCanEditInfo', label: 'Only Admin Can Edit Info', desc: 'Only admins can change group name, description, and avatar.' },\n { key: 'senderCanEditMessage', label: 'Sender Can Edit Message', desc: 'Allows users to edit their own sent messages.' },\n { key: 'allowMemberAdd', label: 'Only Admin Can Add Members', desc: 'Only administrators can add new participants to the group.', inverted: true },\n { key: 'allowMemberRemove', label: 'Only Admin Can Remove Members', desc: 'Only administrators can remove other participants.', inverted: true },\n { key: 'moderationEnabled', label: 'Moderation Enabled', desc: 'Enables advanced message moderation features.' },\n ];\n\n return (\n <Sheet open={isOpen} onOpenChange={onOpenChange}>\n <SheetContent className=\"w-full sm:max-w-md flex flex-col h-full p-0\">\n <div className=\"p-6 border-b\">\n <SheetHeader>\n <div className=\"flex items-center gap-3 mb-2\">\n <div className=\"p-2 bg-primary/10 rounded-lg text-primary\">\n <UserKey size={20} />\n </div>\n <SheetTitle className=\"text-xl font-bold\">Group Permissions</SheetTitle>\n </div>\n <SheetDescription>\n Manage what members can and cannot do in this group.\n </SheetDescription>\n </SheetHeader>\n </div>\n\n <div className=\"flex-1 overflow-y-auto p-6 space-y-6\">\n {permissionItems.map((item) => (\n <div key={item.key} className=\"flex items-start justify-between gap-4\">\n <div className=\"space-y-0.5\">\n <p className=\"text-sm font-semibold text-[#111827]\">{item.label}</p>\n <p className=\"text-xs text-muted-foreground leading-relaxed\">\n {item.desc}\n </p>\n </div>\n <Switch\n checked={\n 'inverted' in item && item.inverted\n ? !permissions[item.key as keyof GroupPermissions]\n : permissions[item.key as keyof GroupPermissions]\n }\n onCheckedChange={() => handleToggle(item.key as keyof GroupPermissions)}\n />\n </div>\n ))}\n </div>\n\n <div className=\"p-6 border-t bg-gray-50/50\">\n <Button \n className=\"w-full h-11 font-bold shadow-sm\" \n onClick={handleSave}\n disabled={isSaving}\n >\n {isSaving ? (\n <>\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n Saving Changes...\n </>\n ) : (\n <>\n <Save className=\"mr-2 h-4 w-4\" />\n Save Permissions\n </>\n )}\n </Button>\n </div>\n </SheetContent>\n </Sheet>\n );\n};\n\nexport default PermissionDrawer;\n","\nimport React, { useState, useMemo } from 'react';\nimport { ShieldUser, Mail, Plus, UserMinus, Search, Loader2 } from \"lucide-react\";\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"../../ui/avatar\";\nimport { Button } from \"../../ui/button\";\nimport { Input } from \"../../ui/input\";\nimport { Sheet, SheetContent,\n SheetHeader,\n SheetTitle,\n SheetDescription, } from '../../ui/sheet';\nimport useStore from '../../store/useStore';\nimport { IConversationInfo } from '../../store/types/store.types';\nimport { cn } from '../../lib/utils';\nimport { useGroupInfo } from '../../hooks/useGroupInfo';\n\ninterface AdminsDrawerProps {\n isOpen: boolean;\n onOpenChange: (open: boolean) => void;\n conversationId: string | null | undefined;\n conversationInfo: IConversationInfo | null;\n}\n\nconst AdminsDrawer = ({ isOpen, onOpenChange, conversationId, conversationInfo }: AdminsDrawerProps) => {\n const [searchQuery, setSearchQuery] = useState('');\n const [isManaging, setIsManaging] = useState<string | null>(null);\n\n const manageGroupAdmins = useStore((s) => s.manageGroupAdmins);\n const loggedUserDetails = useStore((s) => s.loggedUserDetails);\n\n const allParticipants = conversationInfo?.participants || [];\n const admins = conversationInfo?.groupAdmins || [];\n\n const { isOwner: hookIsOwner } = useGroupInfo(conversationId);\n\n // Filter participants based on search query\n const filteredParticipants = useMemo(() => {\n if (!searchQuery.trim()) return allParticipants;\n return allParticipants.filter(p => \n p.name?.toLowerCase().includes(searchQuery.toLowerCase()) || \n p.email?.toLowerCase().includes(searchQuery.toLowerCase())\n );\n }, [allParticipants, searchQuery]);\n\n if (!conversationId || !conversationInfo) return null;\n\n const handleManageAdmin = async (userId: string, type: 'add' | 'remove') => {\n setIsManaging(userId);\n try {\n await manageGroupAdmins({\n conversationId,\n groupAdmins: [userId],\n type\n });\n } finally {\n setIsManaging(null);\n }\n };\n\n const isAdmin = (userId: string) => admins.some(a => (typeof a === 'string' ? a : a._id) === userId);\n \n // Check if a specific user in the list is the owner. \n // We check info.owner for rendering other participants correctly.\n const isOwner = (userId: string) => {\n let oid = null;\n if (conversationInfo?.owner) {\n oid = typeof conversationInfo.owner === 'object' && conversationInfo.owner !== null ? \n (conversationInfo.owner._id || conversationInfo.owner.id) : \n conversationInfo.owner;\n }\n return String(userId) === String(oid);\n };\n const isMe = (userId: string) => String(userId) === String(loggedUserDetails?._id);\n\n // This checks if the CURRENT user is the owner, used to grant admin perms\n const iAmOwner = hookIsOwner;\n\n return (\n <Sheet open={isOpen} onOpenChange={onOpenChange}>\n <SheetContent className=\"w-full sm:max-w-md flex flex-col h-full p-0\">\n <div className=\"p-6 border-b bg-white z-10\">\n <SheetHeader>\n <div className=\"flex items-center gap-3 mb-2\">\n <div className=\"p-2 bg-red-50 text-red-600 rounded-lg\">\n <ShieldUser size={20} />\n </div>\n <SheetTitle className=\"text-xl font-bold\">Group Administrators</SheetTitle>\n </div>\n <SheetDescription>\n Manage who can adjust group settings and members.\n </SheetDescription>\n </SheetHeader>\n\n <div className=\"mt-6 relative group\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 size-4 text-muted-foreground group-focus-within:text-primary transition-colors\" />\n <Input \n placeholder=\"Search participants...\" \n className=\"pl-9 h-11 bg-gray-50 border-none rounded-xl font-bold text-sm focus-visible:ring-1\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n />\n </div>\n </div>\n\n <div className=\"flex-1 overflow-y-auto p-4 space-y-2\">\n <div className=\"px-2 pb-2\">\n <h3 className=\"text-[10px] font-black text-muted-foreground uppercase tracking-widest\">\n {searchQuery ? 'Search Results' : 'All Participants'} ({filteredParticipants.length})\n </h3>\n </div>\n\n {filteredParticipants.map((member, index) => {\n const memberId = typeof member === 'string' ? member : member._id;\n const memberName = typeof member === 'string' ? \"Unknown User\" : member.name;\n const memberEmail = typeof member === 'string' ? \"\" : member.email;\n const memberImage = typeof member === 'string' ? undefined : member.image;\n\n if (!memberId) return null;\n\n const userIsAdmin = isAdmin(memberId);\n const userIsOwner = isOwner(memberId);\n const userIsManaging = isManaging === memberId;\n\n return (\n <div key={`${memberId}-${index}`} className=\"flex items-center justify-between p-3 rounded-xl hover:bg-gray-50 transition-colors group\">\n <div className=\"flex items-center gap-3\">\n <Avatar className={cn(\n \"h-10 w-10 border ring-2 transition-all\",\n userIsAdmin ? \"border-red-100 ring-red-50/50\" : \"border-gray-100 ring-transparent\"\n )}>\n <AvatarImage src={memberImage} alt={memberName} />\n <AvatarFallback className={cn(\n \"font-bold\",\n userIsAdmin ? \"bg-red-50 text-red-700\" : \"bg-gray-100 text-gray-600\"\n )}>\n {memberName?.charAt(0).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n <div className=\"flex flex-col\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-semibold text-[#111827]\">{memberName}</span>\n {userIsOwner && (\n <span className=\"px-1.5 py-0.5 bg-amber-50 text-amber-600 text-[9px] font-black uppercase rounded border border-amber-100\">Owner</span>\n )}\n {userIsAdmin && !userIsOwner && (\n <span className=\"px-1.5 py-0.5 bg-red-50 text-red-600 text-[9px] font-black uppercase rounded border border-red-100\">Admin</span>\n )}\n </div>\n <span className=\"text-[11px] text-muted-foreground flex items-center gap-1\">\n <Mail size={10} />\n {memberEmail || \"No email\"}\n </span>\n </div>\n </div>\n \n {!userIsOwner && (\n <Button\n size=\"icon\"\n variant=\"ghost\"\n disabled={userIsManaging}\n onClick={() => handleManageAdmin(memberId, userIsAdmin ? 'remove' : 'add')}\n className={cn(\n \"size-9 rounded-full transition-all\",\n userIsAdmin \n ? \"text-red-500 hover:bg-red-50 hover:text-red-600\" \n : \"text-primary hover:bg-primary/5 hover:text-primary\"\n )}\n >\n {userIsManaging ? (\n <Loader2 size={16} className=\"animate-spin\" />\n ) : userIsAdmin ? (\n <UserMinus size={16} />\n ) : (\n <Plus size={16} />\n )}\n </Button>\n )}\n </div>\n );\n })}\n\n {filteredParticipants.length === 0 && (\n <div className=\"text-center py-12\">\n <ShieldUser className=\"mx-auto h-12 w-12 text-gray-200 mb-3\" />\n <p className=\"text-sm font-bold text-gray-400\">No participants found</p>\n </div>\n )}\n </div>\n </SheetContent>\n </Sheet>\n );\n};\n\nexport default AdminsDrawer;\n","\nimport React, { useState, useMemo } from 'react';\nimport { Users, ShieldCheck, Mail, UserPlus, UserMinus, Search, Loader2 } from \"lucide-react\";\nimport {\n Sheet,\n SheetContent,\n SheetHeader,\n SheetTitle,\n SheetDescription,\n} from \"../../ui/sheet\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"../../ui/avatar\";\nimport { Input } from \"../../ui/input\";\nimport { Button } from \"../../ui/button\";\nimport { useGroupInfo } from \"../../hooks/useGroupInfo\";\nimport { IConversationInfo } from '../../store/types/store.types';\nimport useStore from '../../store/useStore';\n\ninterface MembersDrawerProps {\n isOpen: boolean;\n onOpenChange: (open: boolean) => void;\n conversationId: string | null | undefined;\n conversationInfo: IConversationInfo | null;\n}\n\nconst MembersDrawer = ({ isOpen, onOpenChange, conversationId, conversationInfo }: MembersDrawerProps) => {\n const [searchQuery, setSearchQuery] = useState('');\n const [isManaging, setIsManaging] = useState<string | null>(null);\n\n const allUsers = useStore((s) => s.allUsers);\n const manageGroupMembers = useStore((s) => s.manageGroupMembers);\n const loggedUserDetails = useStore((s) => s.loggedUserDetails);\n\n // Filter users based on search query\n const filteredUsers = useMemo(() => {\n if (!searchQuery.trim()) return allUsers;\n return allUsers.filter(u =>\n u.name?.toLowerCase().includes(searchQuery.toLowerCase()) ||\n u.email?.toLowerCase().includes(searchQuery.toLowerCase())\n );\n }, [allUsers, searchQuery]);\n\n const { userPermissions } = useGroupInfo(conversationId);\n\n if (!conversationId || !conversationInfo) return null;\n\n const participants = conversationInfo.participants || [];\n const admins = conversationInfo.groupAdmins || [];\n\n let ownerId: string | null = null;\n if (conversationInfo.owner) {\n ownerId = typeof conversationInfo.owner === 'object' && conversationInfo.owner !== null ?\n (conversationInfo.owner._id || conversationInfo.owner.id) :\n conversationInfo.owner;\n }\n\n const canAdd = userPermissions.canAddMember;\n const canRemove = userPermissions.canRemoveMember;\n\n const handleManageMember = async (userId: string, type: 'add' | 'remove') => {\n setIsManaging(userId);\n try {\n await manageGroupMembers({\n conversationId,\n participants: [userId],\n type\n });\n } finally {\n setIsManaging(null);\n }\n };\n\n return (\n <Sheet open={isOpen} onOpenChange={onOpenChange}>\n <SheetContent className=\"w-full sm:max-w-md flex flex-col h-full p-0\">\n <div className=\"p-6 border-b space-y-4\">\n <SheetHeader>\n <div className=\"flex items-center gap-3\">\n <div className=\"p-2 bg-blue-50 text-blue-600 rounded-lg\">\n <Users size={20} />\n </div>\n <SheetTitle className=\"text-xl font-bold\">Group Management</SheetTitle>\n </div>\n <SheetDescription>\n Manage members and invite new people.\n </SheetDescription>\n </SheetHeader>\n\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 size-4 text-muted-foreground\" />\n <Input\n placeholder=\"Search users...\"\n className=\"pl-9 h-10 bg-gray-50 border-none rounded-xl text-sm font-medium\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n />\n </div>\n </div>\n\n <div className=\"flex-1 overflow-y-auto px-4 py-4 space-y-6\">\n {/* Current Members Section */}\n {!searchQuery && (\n <div className=\"space-y-3\">\n <h3 className=\"text-[10px] font-black text-muted-foreground uppercase tracking-widest px-2\">\n Current Members ({participants.length})\n </h3>\n <div className=\"space-y-1\">\n {participants.map((member, index) => {\n const memberId = typeof member === 'string' ? member : member._id;\n const memberName = typeof member === 'string' ? \"Unknown User\" : member.name;\n const memberEmail = typeof member === 'string' ? \"\" : member.email;\n const memberImage = typeof member === 'string' ? undefined : member.image;\n \n if (!memberId) return null;\n\n const isAdmin = admins.some(a => (typeof a === 'string' ? a : a._id) === memberId);\n const isOwner = memberId === ownerId;\n const isMe = memberId === loggedUserDetails?._id;\n\n return (\n <div key={`${memberId}-${index}`} className=\"flex items-center justify-between p-3 rounded-2xl hover:bg-gray-50 transition-all group\">\n <div className=\"flex items-center gap-3\">\n <Avatar className=\"h-10 w-10 border border-border/50\">\n <AvatarImage src={memberImage} alt={memberName} />\n <AvatarFallback className=\"bg-muted text-muted-foreground font-bold\">\n {memberName?.charAt(0).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n <div className=\"flex flex-col\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-bold text-[#111827]\">{memberName}</span>\n {isOwner && <span className=\"px-1.5 py-0.5 bg-amber-50 text-amber-600 text-[9px] font-black uppercase rounded border border-amber-100\">Owner</span>}\n </div>\n <span className=\"text-[11px] text-muted-foreground font-medium truncate max-w-[150px]\">{memberEmail}</span>\n </div>\n </div>\n\n <div className=\"flex items-center gap-2\">\n {isAdmin && !isOwner && <ShieldCheck size={14} className=\"text-blue-500\" />}\n {!isOwner && !isMe && canRemove && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 w-8 p-0 rounded-full hover:bg-red-50 hover:text-red-600 transition-colors\"\n onClick={() => handleManageMember(memberId, 'remove')}\n disabled={isManaging === memberId}\n >\n {isManaging === memberId ? (\n <Loader2 size={14} className=\"animate-spin\" />\n ) : (\n <UserMinus size={16} />\n )}\n </Button>\n )}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n )}\n\n {/* Search Results / All Users */}\n <div className=\"space-y-3 pb-8\">\n <h3 className=\"text-[10px] font-black text-muted-foreground uppercase tracking-widest px-2\">\n {searchQuery ? \"Search Results\" : \"Add New Members\"}\n </h3>\n <div className=\"space-y-1\">\n {filteredUsers.map((user, index) => {\n const isAlreadyMember = participants.some(p => {\n const pId = typeof p === 'string' ? p : p._id;\n return pId === user._id;\n });\n if (!searchQuery && isAlreadyMember) return null; // Only show non-members when not searching\n\n return (\n <div key={`${user._id}-${index}`} className=\"flex items-center justify-between p-3 rounded-2xl hover:bg-gray-50 transition-all border border-transparent hover:border-gray-100\">\n <div className=\"flex items-center gap-3\">\n <Avatar className=\"h-10 w-10 border border-border/50\">\n <AvatarImage src={user.image} alt={user.name} />\n <AvatarFallback className=\"bg-[#f3f4f6] text-[#111827] font-bold\">\n {user.name?.charAt(0).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n <div className=\"flex flex-col text-left\">\n <span className=\"text-sm font-bold text-[#111827] truncate max-w-[150px]\">{user.name}</span>\n <span className=\"text-[11px] text-muted-foreground font-medium truncate max-w-[150px]\">{user.email}</span>\n </div>\n </div>\n\n {isAlreadyMember ? (\n canRemove && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-9 w-9 p-0 rounded-xl hover:bg-red-50 hover:text-red-600 text-muted-foreground transition-all\"\n onClick={() => handleManageMember(user._id, 'remove')}\n disabled={isManaging === user._id}\n title=\"Remove from group\"\n >\n {isManaging === user._id ? (\n <Loader2 size={16} className=\"animate-spin\" />\n ) : (\n <UserMinus size={18} />\n )}\n </Button>\n )\n ) : (\n canAdd && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-9 w-9 p-0 rounded-xl hover:bg-blue-50 hover:text-blue-600 text-muted-foreground transition-all\"\n onClick={() => handleManageMember(user._id, 'add')}\n disabled={isManaging === user._id}\n title=\"Add to group\"\n >\n {isManaging === user._id ? (\n <Loader2 size={16} className=\"animate-spin\" />\n ) : (\n <UserPlus size={18} />\n )}\n </Button>\n )\n )}\n </div>\n );\n })}\n </div>\n </div>\n </div>\n </SheetContent>\n </Sheet>\n );\n};\n\nexport default MembersDrawer;\n","\nimport * as React from \"react\"\nimport { AlertDialog as AlertDialogPrimitive } from \"radix-ui\"\nimport { cn } from \"../lib/utils\"\nimport { Button } from \"./button\"\n\n\nfunction AlertDialog({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />\n}\n\nfunction AlertDialogTrigger({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return (\n <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n )\n}\n\nfunction AlertDialogPortal({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n return (\n <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\n )\n}\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n return (\n <AlertDialogPrimitive.Overlay\n data-slot=\"alert-dialog-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogContent({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Content> & {\n size?: \"default\" | \"sm\"\n}) {\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n data-slot=\"alert-dialog-content\"\n data-size={size}\n className={cn(\n \"group/alert-dialog-content fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 data-[size=sm]:max-w-xs data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[size=default]:sm:max-w-lg\",\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n )\n}\n\nfunction AlertDialogHeader({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\n \"grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogFooter({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\n \"text-lg font-semibold sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogMedia({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-media\"\n className={cn(\n \"mb-2 inline-flex size-16 items-center justify-center rounded-md bg-muted sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogAction({\n className,\n variant = \"default\",\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Action> &\n Pick<React.ComponentProps<typeof Button>, \"variant\" | \"size\">) {\n return (\n <Button variant={variant} size={size} asChild>\n <AlertDialogPrimitive.Action\n data-slot=\"alert-dialog-action\"\n className={cn(className)}\n {...props}\n />\n </Button>\n )\n}\n\nfunction AlertDialogCancel({\n className,\n variant = \"outline\",\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel> &\n Pick<React.ComponentProps<typeof Button>, \"variant\" | \"size\">) {\n return (\n <Button variant={variant} size={size} asChild>\n <AlertDialogPrimitive.Cancel\n data-slot=\"alert-dialog-cancel\"\n className={cn(className)}\n {...props}\n />\n </Button>\n )\n}\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n}\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"../lib/utils\"\n\n\nconst alertVariants = cva(\n \"relative grid w-full grid-cols-[0_1fr] items-start gap-y-0.5 rounded-lg border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current\",\n {\n variants: {\n variant: {\n default: \"bg-card text-card-foreground\",\n destructive:\n \"bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 [&>svg]:text-current\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Alert({\n className,\n variant,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof alertVariants>) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn(\n \"col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDescription({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n \"col-start-2 grid justify-items-start gap-1 text-sm text-muted-foreground [&_p]:leading-relaxed\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Alert, AlertTitle, AlertDescription }\n","import React from \"react\";\nimport { \n MessageSquareX, \n Trash2, \n AlertCircle,\n Ban\n} from \"lucide-react\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from \"../../ui/alert-dialog\";\nimport {\n Alert,\n AlertDescription,\n AlertTitle,\n} from \"../../ui/alert\";\n\ninterface ChatActionModalProps {\n isOpen: boolean;\n onOpenChange: (open: boolean) => void;\n title: string;\n description: string;\n warningTitle: string;\n warningDescription: string;\n actionButtonText: string;\n loadingText: string;\n isLoading: boolean;\n onAction: () => void;\n type: 'clear' | 'delete' | 'block';\n}\n\nconst ChatActionModal = ({\n isOpen,\n onOpenChange,\n title,\n description,\n warningTitle,\n warningDescription,\n actionButtonText,\n loadingText,\n isLoading,\n onAction,\n type\n}: ChatActionModalProps) => {\n const Icon = type === 'clear' ? MessageSquareX : type === 'block' ? Ban : Trash2;\n console.log(\"Rendering ChatActionModal with type:\", type,isOpen);\n\n return (\n <AlertDialog\n open={isOpen}\n onOpenChange={(open) => {\n if (isLoading) return;\n onOpenChange(open);\n }}\n >\n <AlertDialogContent className=\"max-w-[400px] p-0 overflow-hidden border-none shadow-2xl rounded-2xl\">\n <div className=\"px-6 pt-8 pb-6 flex flex-col items-center justify-center\">\n <div className=\"mb-4 rounded-full bg-red-100 p-3 ring-8 ring-red-50\">\n <Icon className=\"h-8 w-8 text-red-600\" />\n </div>\n\n <AlertDialogHeader className=\"space-y-2\">\n <AlertDialogTitle className=\"text-2xl font-bold tracking-tight text-center\">\n {title}\n </AlertDialogTitle>\n\n <AlertDialogDescription className=\"text-center text-base text-[#374151]\">\n {description}\n </AlertDialogDescription>\n </AlertDialogHeader>\n\n <Alert\n variant=\"destructive\"\n className=\"mt-6 border-red-200 bg-red-50 text-left w-full\"\n >\n <AlertCircle className=\"h-4 w-4 stroke-red-600\" />\n <AlertTitle className=\"text-red-800 font-semibold tracking-tight\">\n {warningTitle}\n </AlertTitle>\n <AlertDescription className=\"text-red-700/90 text-sm leading-snug\">\n {warningDescription}\n </AlertDescription>\n </Alert>\n </div>\n\n <AlertDialogFooter className=\"bg-gray-50 border-t border-gray-100 px-6 py-4 flex flex-row items-center gap-3 sm:justify-between w-full\">\n <AlertDialogCancel\n disabled={isLoading}\n className=\"mt-0 flex-1 border-gray-300 shadow-sm\"\n >\n Cancel\n </AlertDialogCancel>\n\n <AlertDialogAction\n onClick={(e) => {\n e.preventDefault();\n onAction();\n }}\n disabled={isLoading}\n className=\"bg-red-600 hover:bg-red-700 focus:ring-red-600 text-white flex-1 shadow-sm\"\n >\n {isLoading ? (\n <span className=\"flex items-center gap-2 justify-center\">\n <span className=\"h-4 w-4 animate-spin rounded-full border-2 border-white border-t-transparent\" />\n {loadingText}\n </span>\n ) : (\n actionButtonText\n )}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n );\n};\n\nexport default ChatActionModal;\n","import { useEffect, useState } from 'react';\n\nexport function useDebounce<T>(value: T, delay?: number): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay || 500);\n\n return () => {\n clearTimeout(timer);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n","import React, { useState, useEffect } from \"react\";\nimport {\n Pin,\n Star,\n Forward,\n Trash2,\n Check,\n X,\n Loader2\n} from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport { useStore } from \"../store/useStore\";\nimport type { IMessageAttachment } from \"../types/chats.types\";\nimport { Button } from \"../ui/button\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"../ui/avatar\";\n\n// Reusable Sub-components\nimport MessageStatus from \"./message/MessageStatus\";\nimport MessageAttachments from \"./message/MessageAttachments\";\nimport MessageReactions from \"./message/MessageReactions\";\nimport MessageToolbar from \"./message/MessageToolbar\";\nimport MessageReplySnippet from \"./message/MessageReplySnippet\";\nimport { useGroupInfo } from \"../hooks/useGroupInfo\";\n\nconst MessageItem = ({\n isSender,\n message,\n createdAt,\n attachments,\n messageId,\n receiver,\n isEdited,\n isDeletedForEveryone,\n reactions,\n conversationId,\n onReply,\n onForward,\n replyTo,\n isPinned,\n isStarred,\n isForwarded,\n status,\n isGroup,\n isSystemMessage,\n conversationInfo,\n isHighlighted,\n senderName,\n senderImage,\n}: {\n isSender: boolean;\n message: string;\n createdAt: string;\n attachments?: IMessageAttachment[];\n messageId?: string;\n receiver?: string;\n isEdited?: boolean;\n isDeletedForEveryone?: boolean;\n reactions?: any[];\n conversationId?: string;\n onReply?: () => void;\n onForward?: () => void;\n replyTo?: any;\n isPinned?: boolean;\n isStarred?: boolean;\n isForwarded?: boolean;\n status?: 'sent' | 'delivered' | 'read';\n isGroup?: boolean;\n isSystemMessage?: boolean;\n conversationInfo?: any;\n isHighlighted?: boolean;\n senderName?: string;\n senderImage?: string;\n}) => {\n const [state, setState] = useState({\n isHoverMessage: false,\n isEditing: false,\n editValue: String(message || \"\"),\n isDeleteOpen: false,\n isReactionOpen: false,\n });\n\n const updateState = (updates: Partial<typeof state>) => {\n setState((prev) => ({ ...prev, ...updates }));\n };\n\n // Logic Handlers for Sync\n useEffect(() => {\n updateState({ editValue: message });\n }, [message]);\n\n // Store actions (DMs)\n const emitDmEdit = useStore((s) => s.emitDmEdit);\n const emitDmDelete = useStore((s) => s.emitDmDelete);\n const emitDmReactionAdd = useStore((s) => s.emitDmReactionAdd);\n const emitDmReactionRemove = useStore((s) => s.emitDmReactionRemove);\n const emitDmPin = useStore((s) => s.emitDmPin);\n const emitDmUnpin = useStore((s) => s.emitDmUnpin);\n const emitDmStar = useStore((s) => s.emitDmStar);\n const emitDmUnstar = useStore((s) => s.emitDmUnstar);\n\n // Store actions (Groups)\n const emitGroupEdit = useStore((s) => s.emitGroupEdit);\n const emitGroupDelete = useStore((s) => s.emitGroupDelete);\n const emitGroupReactionAdd = useStore((s) => s.emitGroupReactionAdd);\n const emitGroupReactionRemove = useStore((s) => s.emitGroupReactionRemove);\n const emitGroupPin = useStore((s) => s.emitGroupPin);\n const emitGroupUnpin = useStore((s) => s.emitGroupUnpin);\n const emitGroupStar = useStore((s) => s.emitGroupStar);\n const emitGroupUnstar = useStore((s) => s.emitGroupUnstar);\n\n const messagePendingActions = useStore((s) => s.messagePendingActions);\n const allUsers = useStore((s) => s.allUsers);\n const loggedUserDetails = useStore((s) => s.loggedUserDetails);\n const pinnedMessagesByConversation = useStore((s) => s.pinnedMessagesByConversation);\n\n const mid = String(messageId || \"\");\n const pendingActions = messageId ? (messagePendingActions[messageId] || []) : [];\n\n // Logic states\n const isPending: boolean = Boolean(\n isSender &&\n (String(messageId || \"\").startsWith(\"temp-\") ||\n (messageId && (messagePendingActions[messageId] || []).includes(\"send\")))\n );\n const isEditPending = pendingActions.includes('edit');\n const isDeletePending = pendingActions.includes('delete');\n const isPinPending = pendingActions.includes('pin') || pendingActions.includes('unpin');\n const isStarPending = pendingActions.includes('star') || pendingActions.includes('unstar');\n const isAnyActionPending = pendingActions.length > 0 && (isDeletePending || isEditPending);\n\n const pinRecord = conversationId ? (pinnedMessagesByConversation[conversationId] || []).find((p: any) =>\n String(p.messageId?._id || p.messageId || p._id) === mid\n ) : null;\n const isPinnedByMe = pinRecord ? (String(pinRecord.pinnedBy?._id || pinRecord.pinnedBy || pinRecord.sender) === String(loggedUserDetails?._id)) : false;\n const canUnpin = !isPinned || isPinnedByMe;\n\n // Sync edit value if message changes externally\n useEffect(() => {\n updateState({ editValue: message });\n }, [message]);\n\n const { userPermissions } = useGroupInfo(conversationId || null);\n\n // Senders can edit if they are in a DM, or if group permissions allow it\n const canEdit = !isGroup || userPermissions.canEditMessage;\n\n const isRecent = () => {\n if (!createdAt) return false;\n const date = new Date(createdAt);\n if (!isNaN(date.getTime())) {\n const diff = Date.now() - date.getTime();\n return diff >= 0 && diff < 10 * 60 * 1000;\n }\n return false;\n };\n\n const handleSaveEdit = () => {\n if (!messageId || !loggedUserDetails || !receiver) return;\n if (isGroup) {\n if (!conversationId) return;\n emitGroupEdit({\n content: state.editValue.trim(),\n messageId,\n sender: loggedUserDetails._id,\n conversationId\n });\n } else {\n if (!receiver) return;\n emitDmEdit({\n content: state.editValue.trim(),\n messageId,\n sender: loggedUserDetails._id,\n receiver,\n });\n }\n updateState({ isEditing: false });\n };\n\n const handleCancelEdit = () => {\n updateState({ isEditing: false, editValue: message });\n };\n\n const handleDeleteMessage = (deleteType: 'me' | 'everyone') => {\n if (!messageId || !loggedUserDetails) return;\n\n if (isGroup) {\n if (!conversationId) return;\n emitGroupDelete({ messageId, sender: loggedUserDetails._id, deleteType, conversationId });\n } else {\n if (!receiver) return;\n emitDmDelete({ messageId, sender: loggedUserDetails._id, receiver, deleteType });\n }\n updateState({ isDeleteOpen: false });\n };\n\n const handleReactionClick = (emojiObject: any) => {\n if (!messageId || !loggedUserDetails) return;\n const reaction = typeof emojiObject === 'string' ? emojiObject : emojiObject.emoji || emojiObject.native;\n\n const hasReacted = reactions?.some((r: any) =>\n r.reaction === reaction && String(r.addedBy?._id || r.addedBy || r.sender?._id || r.sender) === String(loggedUserDetails._id)\n );\n\n if (hasReacted) {\n if (isGroup) {\n if (!conversationId) return;\n emitGroupReactionRemove({ messageId, sender: loggedUserDetails._id, reaction, conversationId });\n } else {\n if (!receiver) return;\n emitDmReactionRemove({ messageId, sender: loggedUserDetails._id, receiver, reaction, conversationId });\n }\n } else {\n if (isGroup) {\n if (!conversationId) return;\n emitGroupReactionAdd({ messageId, sender: loggedUserDetails._id, reaction, conversationId });\n } else {\n if (!receiver) return;\n emitDmReactionAdd({ messageId, sender: loggedUserDetails._id, receiver, reaction, conversationId });\n }\n }\n };\n\n const handlePinClick = () => {\n if (!messageId || !loggedUserDetails) return;\n if (isPinned) {\n if (!isPinnedByMe) return;\n if (isGroup) {\n if (!conversationId) return;\n emitGroupUnpin({ conversationId, sender: loggedUserDetails._id, messageId, receiver: \"\" });\n } else {\n emitDmUnpin({ conversationId, sender: loggedUserDetails._id, messageId, receiver: receiver || \"\" });\n }\n } else {\n if (isGroup) {\n if (!conversationId) return;\n emitGroupPin({ conversationId, sender: loggedUserDetails._id, messageId, receiver: \"\" });\n } else {\n emitDmPin({ conversationId, sender: loggedUserDetails._id, messageId, receiver: receiver || \"\" });\n }\n }\n };\n\n const handleStarClick = () => {\n if (!messageId || !loggedUserDetails || !conversationId) return;\n if (isStarred) {\n if (isGroup) {\n emitGroupUnstar({ messageId, sender: loggedUserDetails._id, conversationId });\n } else {\n emitDmUnstar({ messageId, sender: loggedUserDetails._id, conversationId });\n }\n } else {\n if (isGroup) {\n emitGroupStar({ messageId, sender: loggedUserDetails._id, conversationId });\n } else {\n emitDmStar({ messageId, sender: loggedUserDetails._id, conversationId });\n }\n }\n };\n\n const formatTime = () => {\n if (!createdAt) return \"\";\n const date = new Date(createdAt);\n if (isNaN(date.getTime())) return createdAt;\n return date.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit' });\n };\n\n // Group reactions by emoji\n const groupedReactions = reactions?.reduce((acc: any, r: any) => {\n acc[r.reaction] = (acc[r.reaction] || 0) + 1;\n return acc;\n }, {}) || {};\n\n const isGroupCreationMessage = message?.includes(\"New Group\") && message?.includes(\"created and you are invited\");\n\n if (isGroupCreationMessage || isSystemMessage) {\n return (\n <div className=\"flex w-full justify-center px-4 py-1\">\n <div className=\"max-w-[85%] rounded-full border border-black/[0.06] bg-white px-4 py-1.5 shadow-sm\">\n <p className=\"text-center text-[11px] font-medium text-muted-foreground\">\n {message}\n </p>\n </div>\n </div>\n );\n }\n\n const displayInitial = (senderName || \"U\").charAt(0).toUpperCase();\n\n return (\n <div\n className={cn(\n \"group/message relative mb-2 flex w-full px-3 md:px-4\",\n isSender ? \"justify-end\" : \"justify-start\"\n )}\n >\n {!isSender && (\n <Avatar className=\"mr-2.5 mt-0.5 size-8 shrink-0\">\n <AvatarImage src={senderImage} />\n <AvatarFallback className=\"bg-(--chat-theme-10) text-[11px] font-semibold text-(--chat-theme)\">\n {displayInitial}\n </AvatarFallback>\n </Avatar>\n )}\n\n {/* Message Container */}\n <div\n className={cn(\n \"relative flex min-w-0 max-w-[min(72%,520px)] flex-col\",\n isSender ? \"items-end\" : \"items-start\"\n )}\n onMouseEnter={() => updateState({ isHoverMessage: true })}\n onMouseLeave={() => updateState({ isHoverMessage: false })}\n >\n {/* Actions Toolbar */}\n {!state.isEditing && (state.isHoverMessage || state.isDeleteOpen || state.isReactionOpen) && !!mid && !isDeletedForEveryone && (\n <MessageToolbar\n isSender={isSender}\n isRecent={isRecent()}\n messageId={mid}\n isPinned={isPinned}\n isStarred={isStarred}\n isPinPending={isPinPending}\n isStarPending={isStarPending}\n isReactionOpen={state.isReactionOpen}\n isDeleteOpen={state.isDeleteOpen}\n setIsReactionOpen={(val) => updateState({ isReactionOpen: val })}\n setIsDeleteOpen={(val) => updateState({ isDeleteOpen: val })}\n onReply={onReply}\n onForward={onForward}\n onEdit={() => updateState({ isEditing: true })}\n onDelete={handleDeleteMessage}\n onReactionClick={handleReactionClick}\n onPinClick={handlePinClick}\n onStarClick={handleStarClick}\n canUnpin={canUnpin}\n canEdit={canEdit}\n />\n )}\n\n <div className={cn(\n \"relative group/bubble flex flex-col min-w-[60px]\",\n isSender ? \"items-end\" : \"items-start\",\n isAnyActionPending && \"opacity-60 grayscale-[0.3] cursor-not-allowed\"\n )}>\n {/* Pending Loader overlays */}\n {isAnyActionPending && (\n <div className=\"absolute inset-x-0 -top-6 flex items-center justify-center gap-1.5\">\n <Loader2 className=\"size-3.5 animate-spin text-(--chat-theme)\" />\n <span className=\"text-[9px] font-bold text-(--chat-theme) uppercase tracking-tight\">\n Processing...\n </span>\n </div>\n )}\n\n {isDeletedForEveryone ? (\n <div className={cn(\n \"flex items-center gap-2 px-4 py-2.5 rounded-[22px] border text-sm italic select-none\",\n isSender ? \"bg-(--chat-theme-10) border-(--chat-theme-20) text-(--chat-theme)/60\" : \"bg-muted/40 border-border/40 text-muted-foreground/60\"\n )}>\n <Trash2 className=\"size-3.5 shrink-0 opacity-50\" />\n <span>This message has been deleted</span>\n </div>\n ) : (\n <>\n {/* Bubble Content */}\n <div\n className={cn(\n \"relative flex min-w-[72px] flex-col gap-1 rounded-2xl px-3.5 py-2.5 text-sm shadow-sm transition-all duration-200\",\n isSender\n ? \"rounded-br-md bg-(--chat-theme) text-white\"\n : \"rounded-bl-md border border-black/[0.06] bg-white text-[#0f172a]\",\n isPending && \"opacity-70\",\n isHighlighted && (isSender\n ? \"ring-2 ring-amber-300/60\"\n : \"border-amber-200 bg-amber-50 ring-2 ring-amber-200/60\")\n )}\n >\n {/* Forwarded Indicator */}\n {isForwarded && (\n <div className={cn(\"flex items-center gap-1.5 mb-1.5 opacity-80\", isSender ? \"text-white\" : \"text-muted-foreground\")}>\n <Forward className=\"size-3.5\" />\n <span className=\"text-[10px] font-bold tracking-widest uppercase line-clamp-1 italic\">Forwarded</span>\n </div>\n )}\n\n <MessageReplySnippet replyTo={replyTo} isSender={isSender} loggedUserDetails={loggedUserDetails} allUsers={allUsers} />\n\n {state.isEditing ? (\n <div className=\"flex flex-col gap-2 min-w-[200px]\">\n <textarea\n autoFocus\n className=\"bg-transparent text-white border-none focus:ring-0 p-0 resize-none text-sm font-medium h-auto min-h-[40px]\"\n value={state.editValue}\n onChange={(e) => updateState({ editValue: e.target.value })}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); handleSaveEdit(); }\n else if (e.key === 'Escape') handleCancelEdit();\n }}\n />\n <div className=\"flex justify-end gap-1.5\">\n <Button size=\"icon\" variant=\"ghost\" className=\"h-7 w-7 text-white hover:bg-white/20 rounded-full\" onClick={handleSaveEdit}>\n <Check className=\"h-4 w-4\" />\n </Button>\n <Button size=\"icon\" variant=\"ghost\" className=\"h-7 w-7 text-white hover:bg-white/20 rounded-full\" onClick={handleCancelEdit}>\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n ) : (\n <div className=\"flex flex-col gap-0.5\">\n <p className=\"whitespace-pre-wrap break-words leading-relaxed\">\n {message}\n {isEdited && <span className=\"ml-1.5 text-[10px] opacity-60 italic\">(edited)</span>}\n </p>\n\n <div className={cn(\n \"flex items-center gap-1\",\n isSender ? \"justify-end\" : \"justify-start\"\n )}>\n <span className={cn(\n \"text-[10px] font-medium\",\n isSender ? \"text-white/70\" : \"text-muted-foreground/70\"\n )}>\n {formatTime()}\n </span>\n {isSender && <MessageStatus status={status} isPending={isPending} isGroup={isGroup} />}\n </div>\n </div>\n )}\n\n\n {/* Badges */}\n {isPinned && <div className={cn(\"absolute -top-3 flex items-center gap-1 px-2 py-0.5 rounded-full border shadow-sm z-30 animate-in zoom-in-50\", isSender ? \"-right-2 bg-blue-50 border-blue-200\" : \"-left-2 bg-blue-50 border-blue-200\")}><Pin className=\"size-2.5 text-blue-600 fill-blue-600\" /><span className=\"text-[8px] font-black text-blue-600 uppercase tracking-tighter\">Pinned</span></div>}\n {isStarred && <div className={cn(\"absolute -bottom-2 flex items-center justify-center size-5 bg-yellow-50 border border-yellow-200 rounded-full shadow-sm z-30 animate-in zoom-in-50\", isSender ? \"-left-2\" : \"-right-2\")}><Star className=\"size-3 text-yellow-500 fill-yellow-500\" /></div>}\n </div>\n\n <MessageReactions groupedReactions={groupedReactions} reactions={reactions} loggedUserId={loggedUserDetails?._id} isSender={isSender} isDeletedForEveryone={isDeletedForEveryone} onReactionClick={handleReactionClick} />\n <MessageAttachments attachments={attachments || []} isDeletedForEveryone={isDeletedForEveryone} />\n </>\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default MessageItem;\n","import React from 'react';\nimport { Clock, Check, CheckCheck } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\ninterface MessageStatusProps {\n status?: 'sent' | 'delivered' | 'read';\n isPending?: boolean;\n isGroup?: boolean;\n className?: string;\n}\n\nconst MessageStatus = ({ status, isPending, className }: MessageStatusProps) => {\n const resolvedStatus = status || 'sent';\n\n return (\n <span className={cn(\"inline-flex items-center ml-1 align-middle\", className)}>\n {isPending ? (\n <Clock className=\"size-3 text-white/50 animate-pulse\" aria-label=\"Sending\" />\n ) : resolvedStatus === 'read' ? (\n <CheckCheck\n className=\"size-3.5 text-(--read-tick-color)\"\n strokeWidth={2.5}\n aria-label=\"Read\"\n />\n ) : resolvedStatus === 'delivered' ? (\n <CheckCheck\n className=\"size-3.5 text-white/75\"\n strokeWidth={2.5}\n aria-label=\"Delivered\"\n />\n ) : (\n <Check\n className=\"size-3 text-white/70\"\n strokeWidth={2.5}\n aria-label=\"Sent\"\n />\n )}\n </span>\n );\n};\n\nexport default MessageStatus;\n","import React from 'react';\nimport { FileText, Download, FileSpreadsheet, FileIcon, Music, Film, PlayCircle } from \"lucide-react\";\nimport type { IMessageAttachment } from \"../../types/chats.types\";\n\nexport const getAttachmentIcon = (fileName: string, type: string, className?: string, size = 20) => {\n const ext = fileName.split('.').pop()?.toLowerCase() || '';\n if (type === 'audio' || ext === 'mp3' || ext === 'wav' || ext === 'ogg') return <Music size={size} className={className} color=\"#8b5cf6\" />;\n if (type === 'video' || ext === 'mp4' || ext === 'mov' || ext === 'webm') return <Film size={size} className={className} color=\"#ec4899\" />;\n if (ext === 'pdf') return <FileText size={size} className={className} color=\"#ef4444\" />;\n if (ext === 'doc' || ext === 'docx') return <FileText size={size} className={className} color=\"#3b82f6\" />;\n if (ext === 'xls' || ext === 'xlsx' || ext === 'csv') return <FileSpreadsheet size={size} className={className} color=\"#10b981\" />;\n return <FileIcon size={size} className={className} />;\n};\n\ninterface MessageAttachmentsProps {\n attachments: IMessageAttachment[];\n isDeletedForEveryone?: boolean;\n}\n\nconst MessageAttachments = ({ attachments, isDeletedForEveryone }: MessageAttachmentsProps) => {\n if (isDeletedForEveryone || !attachments || attachments.length === 0) return null;\n\n return (\n <div className=\"mt-2 flex flex-col gap-2 w-full max-w-[280px]\">\n {attachments.map((att) => (\n <div key={att.id} className=\"rounded-xl overflow-hidden border border-border/40 shadow-sm bg-white relative\">\n {att.type === \"image\" ? (\n <div className=\"relative group bg-muted/20 w-full flex items-center justify-center\">\n <img\n src={att.url || \"\"}\n alt={att.name || \"Image\"}\n className=\"w-full h-auto max-h-[300px] object-cover cursor-pointer hover:opacity-90 transition-opacity\"\n onClick={() => window.open(att.url, \"_blank\")}\n />\n {/* Download button overlaid for images */}\n <a\n href={att.url}\n download={att.name || \"image\"}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"absolute top-2 right-2 bg-black/60 hover:bg-black/80 text-white p-1.5 rounded-full opacity-0 group-hover:opacity-100 transition-opacity backdrop-blur-sm shadow-md z-10\"\n >\n <Download size={14} />\n </a>\n </div>\n ) : att.type === \"video\" ? (\n <div className=\"relative group bg-black w-full flex items-center justify-center min-h-[150px]\">\n <video\n src={att.url || \"\"}\n controls\n preload=\"metadata\"\n className=\"w-full h-auto max-h-[300px] object-contain rounded-t-lg bg-black/90 focus:outline-none\"\n controlsList=\"nodownload\"\n />\n {/* Download button overlaid for videos */}\n <a\n href={att.url}\n download={att.name || \"video\"}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"absolute top-2 right-2 bg-black/60 hover:bg-black/80 text-white p-1.5 rounded-full opacity-0 group-hover:opacity-100 transition-opacity backdrop-blur-sm shadow-md\"\n >\n <Download size={14} />\n </a>\n </div>\n ) : att.type === \"audio\" ? (\n <div className=\"p-3 bg-gradient-to-br from-gray-50 to-gray-100 flex flex-col gap-3\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"flex items-center gap-3 min-w-0\">\n <div className=\"size-8 rounded-full bg-purple-100 flex items-center justify-center shrink-0\">\n <Music size={16} className=\"text-purple-600\" />\n </div>\n <span className=\"text-xs font-bold text-gray-700 truncate min-w-0\">{att.name || \"Audio message\"}</span>\n </div>\n <a\n href={att.url}\n download={att.name || \"audio\"}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"text-muted-foreground/60 hover:text-(--chat-theme) transition-colors shrink-0\"\n >\n <Download size={16} />\n </a>\n </div>\n <audio\n src={att.url || \"\"}\n controls\n preload=\"metadata\"\n controlsList=\"nodownload\"\n className=\"w-full h-10 outline-none [&::-webkit-media-controls-panel]:bg-transparent\"\n />\n </div>\n ) : (\n <a href={att.url} download={att.name} target=\"_blank\" rel=\"noreferrer\" className=\"flex items-center gap-3 p-3 hover:bg-muted/30 transition-colors\">\n <div className=\"size-10 rounded-lg bg-[#f3f4f6] flex items-center justify-center shrink-0 shadow-inner\">\n {getAttachmentIcon(att.name || \"\", att.type || \"\", \"text-(--chat-theme)\")}\n </div>\n <div className=\"flex flex-col min-w-0 flex-1\">\n <span className=\"text-[11px] font-bold truncate text-(--chat-theme) uppercase\">{att.name}</span>\n <span className=\"text-[9px] text-muted-foreground font-bold\">Attachment</span>\n </div>\n <Download size={16} className=\"text-muted-foreground/50 shrink-0\" />\n </a>\n )}\n </div>\n ))}\n </div>\n );\n};\n\nexport default MessageAttachments;\n","import React from 'react';\nimport { cn } from \"../../lib/utils\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '../../ui/tooltip';\n\ninterface MessageReactionsProps {\n groupedReactions: Record<string, number>;\n reactions?: any[];\n loggedUserId?: string;\n isSender: boolean;\n isDeletedForEveryone?: boolean;\n onReactionClick: (emoji: string) => void;\n}\n\nconst MessageReactions = ({\n groupedReactions,\n reactions,\n loggedUserId,\n isSender,\n isDeletedForEveryone,\n onReactionClick\n}: MessageReactionsProps) => {\n if (isDeletedForEveryone || Object.keys(groupedReactions).length === 0) return null;\n\n return (\n <div className={cn(\n \"flex flex-wrap items-center gap-1 mt-1 z-10\",\n isSender ? \"justify-end mr-1\" : \"justify-start ml-1\"\n )}>\n {Object.entries(groupedReactions).map(([emoji, count]: [string, any]) => {\n const isReactedByMe = reactions?.some((r: any) =>\n r.reaction === emoji && \n String(r.sender?._id || r.sender || r.addedBy?._id || r.addedBy) === String(loggedUserId)\n );\n // Filter names of users who added this specific emoji\n const usersWhoReacted = reactions\n ?.filter((r: any) => r.reaction === emoji)\n .map((r: any) => {\n const user = r.addedBy || r.sender || r.userId;\n return typeof user === 'object' ? user.name : null;\n })\n .filter(Boolean) || [];\n\n const tooltipText = usersWhoReacted.join(\", \");\n\n return (\n <Tooltip key={emoji}>\n <TooltipTrigger asChild>\n <button\n key={emoji}\n onClick={() => onReactionClick(emoji)}\n className={cn(\n \"flex items-center gap-1 px-2 py-0.5 rounded-full text-xs border shadow-sm transition-all shadow-black/5\",\n isReactedByMe\n ? \"bg-(--chat-theme-10) border-(--chat-theme-20) text-(--chat-theme)\"\n : \"bg-white border-border/40 hover:bg-muted/50 text-[#111827]\"\n )}\n >\n <span>{emoji}</span>\n <span className=\"font-bold opacity-70\">{count}</span>\n </button>\n </TooltipTrigger>\n {tooltipText && (\n <TooltipContent side=\"top\" className=\"bg-slate-900 text-white font-medium\">\n <p>{tooltipText}</p>\n </TooltipContent>\n )}\n </Tooltip>\n );\n })}\n </div>\n );\n};\n\nexport default MessageReactions;\n","import * as React from \"react\"\nimport { Popover as PopoverPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../lib/utils\"\n\n\nfunction Popover({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nfunction PopoverHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"popover-header\"\n className={cn(\"flex flex-col gap-1 text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction PopoverTitle({ className, ...props }: React.ComponentProps<\"h2\">) {\n return (\n <div\n data-slot=\"popover-title\"\n className={cn(\"font-medium\", className)}\n {...props}\n />\n )\n}\n\nfunction PopoverDescription({\n className,\n ...props\n}: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"popover-description\"\n className={cn(\"text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n PopoverAnchor,\n PopoverHeader,\n PopoverTitle,\n PopoverDescription,\n}\n","import React from 'react';\nimport {\n CornerUpLeft, Forward, Smile, Pencil, Trash2, X, Pin, Star, Loader2\n} from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../../ui/button\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"../../ui/dropdown-menu\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"../../ui/popover\";\nimport EmojiPicker from \"emoji-picker-react\";\n\ninterface MessageToolbarProps {\n isSender: boolean;\n isRecent: boolean;\n messageId?: string;\n isPinned?: boolean;\n isStarred?: boolean;\n isPinPending?: boolean;\n isStarPending?: boolean;\n isReactionOpen: boolean;\n isDeleteOpen: boolean;\n setIsReactionOpen: (val: boolean) => void;\n setIsDeleteOpen: (val: boolean) => void;\n onReply?: () => void;\n onForward?: () => void;\n onEdit: () => void;\n onDelete: (type: 'me' | 'everyone') => void;\n onReactionClick: (emojiData: any) => void;\n onPinClick: () => void;\n onStarClick: () => void;\n canUnpin?: boolean;\n canEdit?: boolean;\n}\n\nconst MessageToolbar = ({\n isSender,\n isRecent,\n messageId,\n isPinned,\n isStarred,\n isPinPending,\n isStarPending,\n isReactionOpen,\n isDeleteOpen,\n setIsReactionOpen,\n setIsDeleteOpen,\n onReply,\n onForward,\n onEdit,\n onDelete,\n onReactionClick,\n onPinClick,\n onStarClick,\n canUnpin = true,\n canEdit = true\n}: MessageToolbarProps) => {\n return (\n <div className={cn(\n \"absolute -top-10 z-[100] flex items-center gap-1 rounded-full border bg-background/95 p-1 shadow-md backdrop-blur-sm\",\n isSender ? \"right-0\" : \"left-0\"\n )}>\n <Button variant=\"ghost\" size=\"icon\" className=\"size-8 rounded-full\" onClick={() => { onReply?.(); }}>\n <CornerUpLeft className=\"size-4\" />\n </Button>\n <Button variant=\"ghost\" size=\"icon\" className=\"size-8 rounded-full\" onClick={() => { onForward?.(); }}>\n <Forward className=\"size-4\" />\n </Button>\n\n <Popover open={isReactionOpen} onOpenChange={setIsReactionOpen}>\n <PopoverTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" className=\"size-8 rounded-full hover:bg-muted transition-all\">\n <Smile className=\"size-4 text-muted-foreground\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent\n className=\"w-auto p-0 border-none shadow-2xl rounded-2xl\"\n side=\"top\"\n align={isSender ? \"end\" : \"start\"}\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n <EmojiPicker\n onEmojiClick={(emojiData) => {\n onReactionClick(emojiData);\n setIsReactionOpen(false);\n }}\n width={300}\n height={400}\n reactionsDefaultOpen={true}\n allowExpandReactions={true}\n searchDisabled={false}\n />\n </PopoverContent>\n </Popover>\n\n {isSender && (\n <>\n {isRecent && canEdit && (\n <Button variant=\"ghost\" size=\"icon\" className=\"size-8 rounded-full\" onClick={onEdit}>\n <Pencil className=\"size-4\" />\n </Button>\n )}\n <DropdownMenu open={isDeleteOpen} onOpenChange={setIsDeleteOpen}>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" className=\"size-8 rounded-full text-destructive hover:bg-destructive/10\">\n <Trash2 className=\"size-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent side=\"top\" align={isSender ? \"end\" : \"start\"} className=\"rounded-xl border shadow-2xl min-w-[160px]\">\n {isRecent && (\n <DropdownMenuItem\n className=\"text-destructive focus:text-destructive focus:bg-destructive/5 font-semibold cursor-pointer gap-2 py-2.5\"\n onClick={() => onDelete('everyone')}\n >\n <Trash2 className=\"size-3.5\" />\n Delete for everyone\n </DropdownMenuItem>\n )}\n <DropdownMenuItem\n className=\"font-semibold cursor-pointer gap-2 py-2.5\"\n onClick={() => onDelete('me')}\n >\n <X className=\"size-3.5\" />\n Delete for me\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </>\n )}\n\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\n \"size-8 rounded-full transition-all\",\n isPinned && \"text-blue-600 bg-blue-50 hover:bg-blue-100\",\n isPinned && !canUnpin && \"opacity-40 cursor-not-allowed\"\n )}\n onClick={isPinned && !canUnpin ? undefined : onPinClick}\n disabled={isPinPending}\n >\n {isPinPending ? <Loader2 size={14} className=\"animate-spin\" /> : <Pin className={cn(\"size-4\", isPinned && \"fill-blue-600\")} />}\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\"size-8 rounded-full transition-all\", isStarred && \"text-yellow-500 bg-yellow-50 hover:bg-yellow-100\")}\n onClick={onStarClick}\n disabled={isStarPending}\n >\n {isStarPending ? <Loader2 size={14} className=\"animate-spin text-yellow-500\" /> : <Star className={cn(\"size-4\", isStarred && \"fill-yellow-500\")} />}\n </Button>\n </div>\n );\n};\n\nexport default MessageToolbar;\n","import React from 'react';\nimport { cn } from \"../../lib/utils\";\n\ninterface MessageReplySnippetProps {\n replyTo: any;\n isSender: boolean;\n loggedUserDetails: any;\n allUsers: any[];\n}\n\nconst MessageReplySnippet = ({ replyTo, isSender, loggedUserDetails, allUsers }: MessageReplySnippetProps) => {\n if (!replyTo) return null;\n\n return (\n <div\n className={cn(\n \"mb-1.5 p-2 px-3 rounded-xl border-l-4 transition-all flex flex-col gap-0.5 min-w-0\",\n isSender\n ? \"bg-black/20 border-white/40 text-white\"\n : \"bg-[#f3f4f6] border-(--chat-theme) text-foreground/80\"\n )}\n >\n <span\n className={cn(\n \"text-[10px] font-bold uppercase tracking-wider\",\n isSender ? \"text-white/70\" : \"text-(--chat-theme)\"\n )}\n >\n {(() => {\n const replySenderStr = String(replyTo.sender?._id || replyTo.sender || \"\");\n const loggedUserStr = String(loggedUserDetails?._id || \"\");\n\n if (replySenderStr && loggedUserStr === replySenderStr) return \"You\";\n\n const foundUser = allUsers.find((u: any) => String(u._id) === replySenderStr);\n const senderName = replyTo.sender?.name || foundUser?.name || (typeof replyTo.sender === 'string' && replyTo.sender.length < 20 ? replyTo.sender : \"\");\n\n return senderName || \"Someone\";\n })()}\n </span>\n <p className=\"text-[11px] break-words line-clamp-2 opacity-80 leading-snug\">\n {replyTo.content || (\n replyTo.attachments && replyTo.attachments.length > 0 ? (\n <>\n <span className=\"shrink-0 font-bold uppercase text-[9px] opacity-70\">\n {replyTo.attachments[0].type || \"File\"}:\n </span>\n <span className=\"truncate italic ml-1\">\n {replyTo.attachments[0].name || \"Attachment\"}\n </span>\n </>\n ) : \"Message\"\n )}\n </p>\n </div>\n );\n};\n\nexport default MessageReplySnippet;\n","import { MessageCircleMore, Loader2, History, X } from \"lucide-react\";\nimport React, { useRef, useLayoutEffect, useEffect } from \"react\";\nimport { Button } from \"../ui/button\";\n\nimport MessageItem from \"./MessageItem\";\n\nimport { IMessage, IChannel } from \"../types/chats.types\";\nimport { useStore } from \"../store/useStore\";\nimport { IConversationInfo } from \"../store/types/store.types\";\nimport { mergeChatMessages } from \"../store/helpers/store.helpers\";\n\ninterface ActiveChannelMessagesProps {\n activeChannel: IChannel | null;\n loggedUserId?: string;\n conversationMessages?: any[];\n localMessages?: IMessage[];\n isLoading?: boolean;\n conversationId?: string | null;\n onReply?: (message: IMessage) => void;\n onForward?: (message: IMessage) => void;\n conversationInfo: IConversationInfo | null;\n}\n\nconst ActiveChannelMessages = ({ activeChannel, loggedUserId, conversationMessages = [], localMessages = [], isLoading = false, conversationId, onReply, onForward, conversationInfo }: ActiveChannelMessagesProps) => {\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const bottomRef = useRef<HTMLDivElement>(null);\n const { fetchMessages, messagesMetadata, deletedForMeIds, searchedMessageId, isSearchActive, setSearchActive, setSearchedMessageId } = useStore();\n const currentMeta = conversationId\n ? messagesMetadata[conversationId]\n : { nextCursor: null, hasMore: false, isFirstPage: true };\n\n const mappedApiMessages = conversationMessages.map((m: any) => {\n const isOwn = String(m.sender?._id || m.sender) === String(loggedUserId);\n return {\n id: m._id,\n _id: m._id,\n content: m.content,\n sender: m.sender?.name || \"User\",\n receiver: activeChannel?.id,\n timestamp: m.createdAt,\n isOwnMessage: isOwn,\n channelId: activeChannel?.id || \"\",\n conversationId: m.conversationId || conversationId || \"\",\n isEdited: m.isEdited,\n isDeletedForEveryone: m.isDeletedForEveryone || m.isDeletedForEveryone === true,\n isDeletedForMe: m.isDeletedForMe || m.deletedForMe ||\n m.deletedBy?.includes(loggedUserId) ||\n (Array.isArray(m.deletedBy) && m.deletedBy.some((u: any) => String(u?._id || u) === String(loggedUserId))) ||\n (Array.isArray(m.deletedFor) && m.deletedFor.some((u: any) => String(u?._id || u) === String(loggedUserId))) || false,\n reactions: m.reactions || [],\n attachments: m.attachments?.map((at: any) => ({\n id: at._id,\n url: at.url,\n type: at.type,\n name: at.name\n })),\n replyTo: m.replyTo,\n isPinned: m.isPinnedMessage || m.isPinned,\n isStarred: m.isLoggedUserStarred || m.isStarred,\n isForwarded: m.isForwarded,\n status: m.status,\n isSystemMessage: m.isSystemMessage\n };\n });\n\n const displayMessages = (mergeChatMessages(mappedApiMessages, localMessages, loggedUserId) as (IMessage & { isDeletedForMe?: boolean })[])\n .filter(m => !deletedForMeIds.includes(String((m as any)._id || m.id)) && !m.isDeletedForMe)\n .filter(m => !conversationId || String(m.conversationId || \"\") === String(conversationId))\n .sort((a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime());\n\n const handleResetToNormal = () => {\n setSearchActive(false);\n setSearchedMessageId(null);\n if (conversationId) {\n fetchMessages(conversationId);\n }\n };\n\n const handleScroll = (e: React.UIEvent<HTMLDivElement>) => {\n const target = e.currentTarget;\n if (target.scrollTop === 0 && currentMeta?.hasMore && !isLoading && conversationId && currentMeta.nextCursor) {\n const prevScrollHeight = target.scrollHeight;\n fetchMessages(conversationId, 20, currentMeta.nextCursor).then(() => {\n if (scrollContainerRef.current) {\n const newScrollHeight = scrollContainerRef.current.scrollHeight;\n scrollContainerRef.current.scrollTop = newScrollHeight - prevScrollHeight;\n }\n });\n }\n };\n\n useLayoutEffect(() => {\n if (!isLoading && currentMeta?.isFirstPage && !searchedMessageId) {\n bottomRef.current?.scrollIntoView({ behavior: \"smooth\" });\n }\n }, [displayMessages.length, isLoading, currentMeta?.isFirstPage, searchedMessageId]);\n\n useEffect(() => {\n if (searchedMessageId && !isLoading) {\n const element = document.getElementById(`message-${searchedMessageId}`);\n if (element) {\n element.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n }\n }\n }, [searchedMessageId, isLoading, displayMessages.length]);\n\n if (!activeChannel) {\n return (\n <div className=\"flex h-full flex-col items-center justify-center gap-4 bg-[#fafbfc] px-6 text-muted-foreground\">\n <div className=\"flex size-16 items-center justify-center rounded-2xl border border-black/[0.06] bg-white shadow-sm\">\n <MessageCircleMore className=\"size-8 text-(--chat-theme-40)\" />\n </div>\n <div className=\"space-y-1 text-center\">\n <p className=\"text-base font-semibold text-[#0f172a]\">Select a conversation</p>\n <p className=\"max-w-[260px] text-sm text-muted-foreground\">\n Pick a chat from the sidebar or start a new one to begin messaging.\n </p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"relative flex h-full flex-col bg-[#fafbfc]\">\n {isSearchActive && (\n <div className=\"absolute top-6 left-1/2 -translate-x-1/2 z-40 animate-in slide-in-from-top-4 duration-500\">\n <div className=\"flex items-center bg-white rounded-2xl shadow-[0_15px_40px_rgba(0,0,0,0.15)] border border-primary/10 overflow-hidden ring-4 ring-white\">\n <div className=\"bg-primary px-4 py-2.5 flex items-center gap-2\">\n <History className=\"size-3.5 text-white animate-pulse\" />\n <span className=\"text-[10px] font-black text-white uppercase tracking-[0.2em]\">Search View</span>\n </div>\n <button\n onClick={handleResetToNormal}\n className=\"px-5 py-2.5 text-[10px] font-black uppercase tracking-[0.15em] text-primary hover:bg-primary/5 transition-all flex items-center gap-2 group\"\n >\n Back to Recent\n <X className=\"size-3 text-primary/40 group-hover:text-primary transition-colors\" />\n </button>\n </div>\n </div>\n )}\n\n {isLoading && currentMeta?.isFirstPage && (\n <div className=\"absolute inset-x-0 top-0 h-1 bg-(--chat-theme-10) overflow-hidden z-20\">\n <div className=\"h-full bg-(--chat-theme) w-1/3 animate-progress\" />\n </div>\n )}\n\n <div\n ref={scrollContainerRef}\n onScroll={handleScroll}\n className=\"chat-message-scroll min-h-0 flex-1 overflow-y-auto px-1 py-4 scroll-smooth md:px-2\"\n >\n <div className=\"flex w-full flex-col\">\n {isLoading && currentMeta?.hasMore && !currentMeta.isFirstPage && (\n <div className=\"flex justify-center py-4\">\n <Loader2 className=\"h-6 w-6 animate-spin text-(--chat-theme) opacity-50\" />\n </div>\n )}\n\n {displayMessages?.length > 0 ? (\n Object.entries(\n displayMessages.reduce((groups: Record<string, IMessage[]>, message: IMessage) => {\n const date = new Date(message.timestamp).toLocaleDateString('en-GB', {\n day: 'numeric',\n month: 'short',\n year: 'numeric'\n });\n if (!groups[date]) {\n groups[date] = [];\n }\n groups[date].push(message);\n return groups;\n }, {})\n ).map(([date, messages]) => (\n <div key={date} className=\"mb-4 flex flex-col\">\n <div className=\"sticky top-0 z-10 mb-3 flex justify-center py-1\">\n <span className=\"rounded-full border border-black/[0.06] bg-white/90 px-3 py-1 text-[11px] font-medium text-muted-foreground shadow-sm backdrop-blur-sm\">\n {date}\n </span>\n </div>\n {messages.map((m: IMessage) => {\n const senderLabel = typeof m.sender === \"string\" ? m.sender : \"User\";\n const senderImage = !m.isOwnMessage\n ? (activeChannel?.isGroup ? undefined : activeChannel?.image)\n : undefined;\n\n return (\n <div key={String(m.id)} id={`message-${m._id || m.id}`} className=\"w-full\">\n <MessageItem\n isSender={!!m.isOwnMessage}\n message={String(m.content || \"\")}\n createdAt={m.timestamp}\n attachments={m.attachments}\n messageId={m._id || m.id}\n receiver={m.receiver || activeChannel?.id}\n isEdited={!!m.isEdited}\n isDeletedForEveryone={!!m.isDeletedForEveryone}\n reactions={m.reactions || []}\n conversationId={m.conversationId || (activeChannel?.conversationId) || conversationId || \"\"}\n onReply={() => onReply?.(m)}\n onForward={() => onForward?.(m)}\n replyTo={m.replyTo}\n isPinned={!!m.isPinned}\n isStarred={!!m.isStarred}\n isForwarded={!!m.isForwarded}\n status={m.status}\n isSystemMessage={m.isSystemMessage}\n isGroup={activeChannel?.isGroup}\n conversationInfo={conversationInfo}\n isHighlighted={String(m._id || m.id) === String(searchedMessageId)}\n senderName={senderLabel}\n senderImage={senderImage}\n />\n </div>\n )})}\n </div>\n ))\n ) : !isLoading && (\n <div className=\"flex h-[360px] flex-col items-center justify-center gap-3 text-muted-foreground\">\n <div className=\"flex size-14 items-center justify-center rounded-2xl border border-dashed border-black/[0.08] bg-white\">\n <MessageCircleMore className=\"size-7 opacity-40\" />\n </div>\n <div className=\"space-y-1 text-center\">\n <p className=\"text-sm font-semibold text-[#0f172a]\">No messages yet</p>\n <p className=\"text-xs text-muted-foreground\">Send the first message to start the conversation.</p>\n </div>\n </div>\n )}\n\n\n\n <div ref={bottomRef} className=\"h-4\" />\n </div>\n </div>\n\n {isLoading && (\n <div className=\"absolute bottom-6 left-1/2 -translate-x-1/2 z-30 pointer-events-none\">\n <div className=\"flex items-center gap-3 px-5 py-2.5 bg-white/80 backdrop-blur-md rounded-2xl shadow-xl border border-border/40 animate-in fade-in slide-in-from-bottom-2 duration-400\">\n <Loader2 className=\"h-3.5 w-3.5 animate-spin text-(--chat-theme)\" />\n <span className=\"text-[10px] font-bold text-muted-foreground uppercase tracking-[0.15em]\">Loading messages...</span>\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport default ActiveChannelMessages;\n","import React, { useRef, useState } from \"react\";\nimport { Paperclip, Send, X, FileText, Smile } from \"lucide-react\";\n\nimport { Button } from \"../ui/button\";\nimport { Textarea } from \"../ui/textarea\";\nimport { ScrollArea, ScrollBar } from \"../ui/scroll-area\";\nimport { IAttachment, IChannel, IMessage } from \"../types/chats.types\";\nimport { cn } from \"../lib/utils\";\n\nimport EmojiPicker, { Theme } from \"emoji-picker-react\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../ui/popover\";\nimport { useStore } from \"../store/useStore\";\nimport { getAttachmentIcon } from \"./message/MessageAttachments\";\nimport { useGroupInfo } from \"../hooks/useGroupInfo\";\n\ninterface ChannelMessageBoxProps {\n activeChannel: IChannel | null;\n conversationId: string | null;\n onSendMessage?: (content: string, attachments: IAttachment[], replyTo?: IMessage | null) => void;\n replyTo?: IMessage | null;\n onCancelReply?: () => void;\n}\n\nconst MAX_ATTACHMENTS = 10;\n\n// Some browsers return empty mime type for docs, so we fallback by extension.\nconst getAttachmentType = (file: File): IAttachment[\"type\"] => {\n const mime = (file.type || \"\").toLowerCase();\n\n if (mime.startsWith(\"image/\")) return \"image\";\n if (mime.startsWith(\"video/\")) return \"video\";\n if (mime.startsWith(\"audio/\")) return \"audio\";\n\n return \"file\";\n};\n\nconst ChannelMessageBox = ({ activeChannel, conversationId, onSendMessage, replyTo, onCancelReply }: ChannelMessageBoxProps) => {\n const [state, setState] = useState({\n messageInput: \"\",\n attachments: [] as IAttachment[],\n isFocused: false,\n isTyping: false,\n attachmentError: \"\",\n });\n\n const updateState = (updates: Partial<typeof state>) => {\n setState((prev) => ({ ...prev, ...updates }));\n };\n const typingTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n const emitTypingStart = useStore((s) => s.emitTypingStart);\n const emitTypingStop = useStore((s) => s.emitTypingStop);\n const emitGroupTypingStart = useStore((s) => s.emitGroupTypingStart);\n const emitGroupTypingStop = useStore((s) => s.emitGroupTypingStop);\n\n const { permissions, isAdmin, loggedUserDetails } = useGroupInfo(conversationId);\n const composerDisabledReason = useStore((s) => s.composerDisabledReason);\n\n // ✅ show message under input (limit, etc.)\n\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n // ✅ fixes \"late message\" by keeping a sync counter\n const attachmentsCountRef = useRef(0);\n\n React.useEffect(() => {\n attachmentsCountRef.current = state.attachments.length;\n }, [state.attachments.length]);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n updateState({ messageInput: e.target.value });\n\n if (!conversationId || !loggedUserDetails || !activeChannel) return;\n\n const receiver = activeChannel.id;\n\n // Start typing\n if (!state.isTyping) {\n updateState({ isTyping: true });\n const typingPayload = {\n sender: loggedUserDetails!._id,\n userId: loggedUserDetails!._id, // Some handlers use userId\n receiver,\n conversationId\n };\n if (activeChannel.isGroup) {\n emitGroupTypingStart(typingPayload);\n } else {\n emitTypingStart(typingPayload);\n }\n }\n\n // Clear existing timeout\n if (typingTimeoutRef.current) clearTimeout(typingTimeoutRef.current);\n\n // Set timeout to stop typing\n typingTimeoutRef.current = setTimeout(() => {\n updateState({ isTyping: false });\n const typingPayload = {\n sender: loggedUserDetails!._id,\n userId: loggedUserDetails!._id,\n receiver,\n conversationId\n };\n if (activeChannel.isGroup) {\n emitGroupTypingStop(typingPayload);\n } else {\n emitTypingStop(typingPayload);\n }\n }, 2000);\n\n };\n\n const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const files = e.target.files ? Array.from(e.target.files) : [];\n if (!files.length) return;\n\n const currentCount = attachmentsCountRef.current;\n const remaining = MAX_ATTACHMENTS - currentCount;\n\n // already full\n if (remaining <= 0) {\n updateState({ attachmentError: `Maximum ${MAX_ATTACHMENTS} files allowed` });\n if (fileInputRef.current) fileInputRef.current.value = \"\";\n return;\n }\n\n // user selected too many at once -> show message immediately\n if (files.length > remaining) {\n updateState({\n attachmentError: `You can upload only ${remaining} more file${remaining > 1 ? \"s\" : \"\"}`\n });\n } else {\n updateState({ attachmentError: \"\" });\n }\n\n const filesToAdd = files.slice(0, remaining);\n\n // reserve slots immediately (prevents stale limit on quick consecutive selects)\n attachmentsCountRef.current = currentCount + filesToAdd.length;\n\n filesToAdd.forEach((file) => {\n const reader = new FileReader();\n reader.onload = (event) => {\n const newAttachment: IAttachment = {\n id: Date.now().toString() + Math.random().toString(36).substring(2, 9),\n file,\n previewUrl: event.target?.result as string,\n type: getAttachmentType(file),\n };\n\n setState((prev) => {\n if (prev.attachments.length >= MAX_ATTACHMENTS) return prev;\n return { ...prev, attachments: [...prev.attachments, newAttachment] };\n });\n };\n\n // Preview: DataURL works for images/videos and is fine for docs to show icon + name\n reader.readAsDataURL(file);\n });\n\n if (fileInputRef.current) fileInputRef.current.value = \"\";\n };\n\n const handleRemoveAttachment = (id: string) => {\n setState((prev) => {\n const nextAttachments = prev.attachments.filter((a) => a.id !== id);\n attachmentsCountRef.current = nextAttachments.length;\n return {\n ...prev,\n attachments: nextAttachments,\n attachmentError: nextAttachments.length < MAX_ATTACHMENTS ? \"\" : prev.attachmentError,\n };\n });\n };\n\n const handleSendMessage = () => {\n // Stop typing immediately on send\n if (typingTimeoutRef.current) clearTimeout(typingTimeoutRef.current);\n if (state.isTyping && conversationId && loggedUserDetails && activeChannel) {\n updateState({ isTyping: false });\n const typingPayload = {\n sender: loggedUserDetails!._id,\n userId: loggedUserDetails!._id,\n receiver: activeChannel.id,\n conversationId,\n };\n if (activeChannel.isGroup) {\n emitGroupTypingStop(typingPayload);\n } else {\n emitTypingStop(typingPayload);\n }\n }\n\n onSendMessage?.(state.messageInput.trim(), state.attachments, replyTo);\n\n updateState({\n messageInput: \"\",\n attachments: [],\n attachmentError: \"\",\n });\n attachmentsCountRef.current = 0;\n\n if (fileInputRef.current) fileInputRef.current.value = \"\";\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n handleSendMessage();\n }\n };\n\n if (!activeChannel) return null;\n\n if (activeChannel.isLeft) {\n return (\n <div className=\"px-8 pb-8\">\n <div className=\"w-full max-w-[90%] mx-auto p-4 rounded-2xl bg-gray-50 border border-gray-200 text-center\">\n <p className=\"text-sm font-bold text-muted-foreground italic\">\n You have left this group. You can no longer send messages.\n </p>\n </div>\n </div>\n );\n }\n\n if (activeChannel.isBlocked) {\n return (\n <div className=\"px-8 pb-8\">\n <div className=\"w-full max-w-[90%] mx-auto p-4 rounded-2xl bg-gray-50 border border-gray-200 text-center\">\n <p className=\"text-sm font-bold text-muted-foreground italic\">\n This user is blocked. You can no longer send messages.\n </p>\n </div>\n </div>\n );\n }\n\n const onlyAdminCanSendMessage = permissions?.onlyAdminCanSendMessage || false;\n const canSendMessage = (!activeChannel.isGroup || !onlyAdminCanSendMessage || isAdmin) && !composerDisabledReason;\n\n if (composerDisabledReason) {\n return (\n <div className=\"px-8 pb-8\">\n <div className=\"w-full max-w-[90%] mx-auto p-4 rounded-2xl bg-gray-50 border border-dashed border-gray-200 text-center\">\n <p className=\"text-sm font-bold text-muted-foreground italic\">\n {composerDisabledReason}\n </p>\n </div>\n </div>\n );\n }\n\n if (!canSendMessage) {\n return (\n <div className=\"px-8 pb-8\">\n <div className=\"w-full max-w-[90%] mx-auto p-4 rounded-2xl bg-gray-50 border border-dashed border-gray-200 text-center\">\n <p className=\"text-sm font-bold text-muted-foreground italic\">\n Only administrators can send messages to this group.\n </p>\n </div>\n </div>\n );\n }\n\n const containerClass = \"w-full\";\n\n return (\n <div className=\"px-3 pb-4 pt-3 md:px-4\">\n {/* Attachments Preview - aligned with input bar */}\n {state.attachments.length > 0 && (\n <div className=\"mb-4 animate-in fade-in slide-in-from-bottom-2 duration-300\">\n <div className={containerClass}>\n <div className=\"overflow-hidden \">\n <ScrollArea className=\"w-full\">\n <div className=\"flex gap-4 p-4\">\n {state.attachments.map((attachment) => (\n <div key={attachment.id} className=\"relative group shrink-0\">\n <div className=\"w-16 h-16 rounded-2xl overflow-hidden border-2 border-white bg-white shadow-md flex items-center justify-center\">\n {attachment.type === \"image\" ? (\n <img\n src={attachment.previewUrl}\n alt=\"preview\"\n className=\"w-full h-full object-cover\"\n />\n ) : attachment.type === \"video\" ? (\n <video\n src={attachment.previewUrl}\n className=\"w-full h-full object-cover\"\n muted\n />\n ) : (\n <div className=\"flex flex-col items-center justify-center gap-1 px-1 w-full relative z-10 h-full pt-1\">\n {getAttachmentIcon(attachment.file.name, attachment.type, \"text-(--chat-theme-60)\", 26)}\n <span className=\"text-[9px] font-bold text-(--chat-theme-60) truncate w-full text-center px-1\">\n {attachment.file.name}\n </span>\n </div>\n )}\n </div>\n\n <button\n type=\"button\"\n onClick={() => handleRemoveAttachment(attachment.id)}\n className=\"absolute -top-1.5 -right-1.5 size-6 bg-(--chat-theme) text-white rounded-full flex items-center justify-center shadow-lg hover:scale-110 active:scale-95 transition-all opacity-0 group-hover:opacity-100 ring-2 ring-white z-20\"\n aria-label={`Remove ${attachment.file.name}`}\n >\n <X size={12} />\n </button>\n </div>\n ))}\n </div>\n\n <ScrollBar orientation=\"horizontal\" />\n </ScrollArea>\n </div>\n </div>\n </div >\n )}\n\n {/* Reply Preview */}\n {replyTo && (\n <div className={cn(containerClass, \"mb-2 animate-in fade-in slide-in-from-bottom-2 duration-300\")}>\n <div className=\"flex items-center gap-3 bg-white/80 border border-border/40 p-3 py-2 rounded-2xl shadow-sm relative overflow-hidden\">\n <div className=\"absolute left-0 top-0 bottom-0 w-1 bg-(--chat-theme)\" />\n <div className=\"flex flex-col flex-1 min-w-0\">\n <span className=\"text-[10px] font-bold text-(--chat-theme) uppercase tracking-wider mb-0.5\">Replying to {replyTo.sender}</span>\n <p className=\"text-xs text-muted-foreground truncate\">{replyTo.content}</p>\n </div>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7 rounded-full hover:bg-muted\"\n onClick={onCancelReply}\n >\n <X size={14} />\n </Button>\n </div>\n </div>\n )}\n\n {/* Main Pill Bar */}\n <div\n className={cn(\n \"flex items-end gap-2 rounded-2xl border bg-[#f8fafc] p-2 transition-all duration-200\",\n containerClass,\n state.isFocused\n ? \"border-(--chat-theme-20) bg-white shadow-[0_0_0_3px_var(--chat-theme-10)]\"\n : \"border-black/[0.08]\"\n )}\n >\n {/* Attach button */}\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"shrink-0 size-9 rounded-full text-muted-foreground hover:text-[#111827] hover:bg-[#f3f4f6] transition-all\"\n onClick={() => fileInputRef.current?.click()}\n aria-label=\"Attach files\"\n >\n <Paperclip size={18} />\n </Button>\n\n <input\n type=\"file\"\n ref={fileInputRef}\n className=\"hidden\"\n multiple\n // ✅ images + videos + pdf/doc/docx/xls/xlsx\n accept=\"image/*,video/*,audio/*,.pdf,.doc,.docx,.xls,.xlsx\"\n onChange={handleFileChange}\n />\n\n {/* Emoji picker */}\n <Popover>\n <PopoverTrigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"shrink-0 size-9 rounded-full text-muted-foreground hover:text-[#111827] hover:bg-[#f3f4f6] transition-all\"\n aria-label=\"Open emoji picker\"\n >\n <Smile size={18} />\n </Button>\n </PopoverTrigger>\n\n <PopoverContent\n className=\"w-auto p-0 border-none shadow-2xl rounded-[20px] overflow-hidden mb-2\"\n align=\"start\"\n side=\"top\"\n >\n <EmojiPicker\n theme={Theme.LIGHT}\n onEmojiClick={(emojiData) => updateState({ messageInput: state.messageInput + emojiData.emoji })}\n lazyLoadEmojis\n searchPlaceholder=\"Search emojis...\"\n width={320}\n height={400}\n previewConfig={{ showPreview: false }}\n skinTonesDisabled\n />\n </PopoverContent>\n </Popover>\n\n {/* Textarea */}\n <Textarea\n id=\"message-input\"\n value={state.messageInput}\n onFocus={() => updateState({ isFocused: true })}\n onBlur={() => updateState({ isFocused: false })}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n placeholder={`Message ${activeChannel?.name}`}\n className=\"max-h-[120px] min-h-[40px] flex-1 resize-none overflow-hidden border-none bg-transparent px-2 py-2.5 text-sm shadow-none placeholder:text-muted-foreground/50 focus-visible:ring-0 focus-visible:ring-offset-0\"\n />\n\n {/* Send */}\n <Button\n type=\"button\"\n onClick={handleSendMessage}\n disabled={!state.messageInput.trim() && state.attachments.length === 0}\n className={cn(\n \"flex size-9 shrink-0 items-center justify-center rounded-xl transition-all duration-200\",\n state.messageInput.trim() || state.attachments.length > 0\n ? \"bg-(--chat-theme) text-white shadow-md hover:opacity-90\"\n : \"cursor-not-allowed bg-black/[0.06] text-muted-foreground\"\n )}\n aria-label=\"Send message\"\n >\n <Send size={16} className=\"ml-0.5\" />\n </Button>\n </div>\n\n {/* Error message under input */}\n {state.attachmentError && (\n <div className={cn(containerClass, \"mt-2 px-2\")}>\n <p className=\"text-[11px] font-semibold text-red-500\">{state.attachmentError}</p>\n </div>\n )}\n </div>\n );\n};\n\nexport default ChannelMessageBox;","import React, { useState, useMemo, useEffect, useRef, useCallback } from \"react\";\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from \"../ui/dialog\";\nimport { Input } from \"../ui/input\";\nimport { ScrollArea } from \"../ui/scroll-area\";\nimport { Loader2, Search, Send } from \"lucide-react\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"../ui/avatar\";\nimport { useStore } from \"../store/useStore\";\nimport type { IMessage, IChannel } from \"../types/chats.types\";\n\ninterface ForwardModalProps {\n isOpen: boolean;\n onClose: () => void;\n message: IMessage | null;\n onForwardComplete: (channel: IChannel) => void;\n}\n\nconst ForwardModal = ({ isOpen, onClose, message, onForwardComplete }: ForwardModalProps) => {\n const [search, setSearch] = useState(\"\");\n const [debouncedSearch, setDebouncedSearch] = useState(\"\");\n const targetChannelRef = useRef<IChannel | null>(null);\n const wasForwardingRef = useRef(false);\n const completionHandledRef = useRef(false);\n\n const emitDmForward = useStore((s) => s.emitDmForward);\n const emitGroupForward = useStore((s) => s.emitGroupForward);\n const loggedUserDetails = useStore((s) => s.loggedUserDetails);\n const pendingActions = useStore((s) => s.messagePendingActions);\n const storeConversations = useStore((s) => s.conversations);\n const allUsers = useStore((s) => s.allUsers);\n\n const mid = String((message as any)?._id || (message as any)?.id || \"\");\n const isForwarding = !!(mid && pendingActions[mid]?.includes(\"forward\"));\n\n const onCloseRef = useRef(onClose);\n const onForwardCompleteRef = useRef(onForwardComplete);\n useEffect(() => { onCloseRef.current = onClose; }, [onClose]);\n useEffect(() => { onForwardCompleteRef.current = onForwardComplete; }, [onForwardComplete]);\n\n const handleOpenChange = useCallback((open: boolean) => {\n if (!open) onCloseRef.current();\n }, []);\n\n useEffect(() => {\n if (isForwarding) {\n wasForwardingRef.current = true;\n\n const timeout = setTimeout(() => {\n useStore.getState().clearForwardPending(mid);\n }, 12000);\n\n return () => clearTimeout(timeout);\n }\n\n if (!wasForwardingRef.current || completionHandledRef.current) return;\n\n completionHandledRef.current = true;\n wasForwardingRef.current = false;\n\n const target = targetChannelRef.current;\n targetChannelRef.current = null;\n\n onCloseRef.current();\n\n if (target) {\n queueMicrotask(() => onForwardCompleteRef.current(target));\n }\n }, [isForwarding, mid]);\n\n useEffect(() => {\n if (!isOpen) {\n setSearch(\"\");\n setDebouncedSearch(\"\");\n targetChannelRef.current = null;\n wasForwardingRef.current = false;\n completionHandledRef.current = false;\n }\n }, [isOpen]);\n\n useEffect(() => {\n const handler = setTimeout(() => setDebouncedSearch(search), 400);\n return () => clearTimeout(handler);\n }, [search]);\n\n const mappedChannels = useMemo(() => {\n const sourceConversationId = message?.conversationId\n ? String(message.conversationId)\n : null;\n const query = debouncedSearch.trim().toLowerCase();\n\n return storeConversations\n .filter((c: any) => !sourceConversationId || String(c._id) !== sourceConversationId)\n .map((c: any) => {\n const isGroup = c.conversationType === \"group\" || c.isGroup;\n const otherParticipantData =\n c.participants?.find(\n (p: any) => String(p._id || p) !== String(loggedUserDetails?._id)\n ) || c.participants?.[0];\n const otherParticipantId = String(otherParticipantData?._id || otherParticipantData || \"\");\n const resolvedUser =\n typeof otherParticipantData === \"object\" && otherParticipantData?.name\n ? otherParticipantData\n : (Array.isArray(allUsers) ? allUsers : []).find(\n (u) => String(u._id) === otherParticipantId\n );\n const name = isGroup\n ? c.groupName || \"Group Chat\"\n : resolvedUser?.name || otherParticipantData?.name || \"Unknown User\";\n const image = isGroup\n ? c.image || \"\"\n : resolvedUser?.image || otherParticipantData?.image || `https://i.pravatar.cc/150?u=${otherParticipantId}`;\n\n return {\n id: isGroup ? String(c._id) : otherParticipantId,\n conversationId: String(c._id),\n name: name.charAt(0).toUpperCase() + name.slice(1),\n image,\n isOnline: false,\n isGroup,\n } as IChannel;\n })\n .filter((channel) => !query || channel.name.toLowerCase().includes(query));\n }, [storeConversations, allUsers, loggedUserDetails?._id, message?.conversationId, debouncedSearch]);\n\n const handleForward = (channel: IChannel) => {\n if (!message || !loggedUserDetails || !mid) return;\n\n completionHandledRef.current = false;\n targetChannelRef.current = channel;\n\n const targetConversationIds = [String(channel.conversationId)];\n const payload = {\n messageId: String(mid),\n sender: String(loggedUserDetails._id),\n sourceConversationId: message.conversationId ? String(message.conversationId) : undefined,\n targetConversationIds,\n ...(!channel.isGroup && channel.id ? { receiver: String(channel.id) } : {}),\n };\n\n if (channel.isGroup) {\n emitGroupForward(payload);\n } else {\n emitDmForward(payload);\n }\n };\n\n if (!isOpen || !message) return null;\n\n return (\n <Dialog open={isOpen} onOpenChange={handleOpenChange}>\n <DialogContent className=\"sm:max-w-md rounded-2xl overflow-hidden p-0 border-none bg-[#fdfdfe] shadow-2xl\">\n <DialogHeader className=\"pt-6 px-6 pb-2\">\n <DialogTitle className=\"text-xl font-bold flex items-center justify-between\">\n Forward Message\n </DialogTitle>\n </DialogHeader>\n\n <div className=\"px-6 pb-4\">\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 size-4 text-muted-foreground opacity-50\" />\n <Input\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder=\"Search conversations...\"\n className=\"pl-9 bg-[#f3f4f6] border-none rounded-xl h-11 focus-visible:ring-1 focus-visible:ring-(--chat-theme)\"\n disabled={isForwarding}\n />\n </div>\n </div>\n\n <div className=\"relative border-t border-border/40\">\n {isForwarding && (\n <div className=\"absolute inset-0 z-10 flex flex-col items-center justify-center bg-[#fdfdfe]/90 text-center animate-in fade-in duration-300\">\n <div className=\"size-12 rounded-full bg-(--chat-theme-10) flex items-center justify-center mb-3\">\n <Loader2 className=\"animate-spin text-(--chat-theme) size-6\" />\n </div>\n <p className=\"font-bold text-(--chat-theme)\">Forwarding message...</p>\n <p className=\"text-xs text-muted-foreground opacity-70\">Please wait while we send your message.</p>\n </div>\n )}\n\n <ScrollArea className=\"h-[300px]\">\n <div className=\"p-2 space-y-1\">\n {mappedChannels.length > 0 ? (\n mappedChannels.map((channel) => (\n <div\n key={channel.conversationId}\n className=\"flex justify-between items-center p-3 hover:bg-muted/40 rounded-xl transition-all cursor-pointer group\"\n onClick={() => !isForwarding && handleForward(channel)}\n >\n <div className=\"flex items-center gap-3\">\n <Avatar className=\"h-10 w-10\">\n <AvatarImage src={channel.image} />\n <AvatarFallback className=\"bg-muted text-muted-foreground font-bold text-xs\">\n {channel.name.charAt(0)}\n </AvatarFallback>\n </Avatar>\n <h3 className=\"font-bold text-sm text-[#111827]\">{channel.name}</h3>\n </div>\n <button\n type=\"button\"\n className=\"size-8 rounded-full bg-(--chat-theme-10) text-(--chat-theme) flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity\"\n >\n <Send className=\"size-4 -ml-0.5\" />\n </button>\n </div>\n ))\n ) : (\n <div className=\"flex flex-col items-center justify-center p-6 text-muted-foreground opacity-50\">\n <p className=\"text-sm\">No conversations found.</p>\n </div>\n )}\n </div>\n </ScrollArea>\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default ForwardModal;\n","\nimport React, { useEffect, useRef } from 'react';\nimport { useStore } from '../store/useStore';\nimport {\n findConversationForChannel,\n getOtherParticipantId,\n isGroupConversation,\n resolveConversationIdForChannel,\n} from '../store/helpers/store.helpers';\n\nexport const Channel = ({ children }: { children: React.ReactNode }) => {\n const activeChannel = useStore((s) => s.activeChannel);\n const activeConversationId = useStore((s) => s.activeConversationId);\n const setStoreActiveConversationId = useStore((s) => s.setActiveConversationId);\n const loggedUserDetails = useStore((s) => s.loggedUserDetails);\n\n const fetchMessages = useStore((s) => s.fetchMessages);\n const fetchConversationInfo = useStore((s) => s.fetchConversationInfo);\n const emitGroupJoin = useStore((s) => s.emitGroupJoin);\n const emitGroupMarkRead = useStore((s) => s.emitGroupMarkRead);\n const emitMarkAsRead = useStore((s) => s.emitMarkAsRead);\n\n const lastResolvedChannelRef = useRef<string | null>(null);\n const lastConversationActionsRef = useRef<string | null>(null);\n\n const activeChannelId = activeChannel?.id;\n const activeChannelConvId = activeChannel?.conversationId;\n const activeChannelIsGroup = !!activeChannel?.isGroup;\n\n const needsConversationResolve = !activeChannel?.conversationId;\n const conversationsLength = useStore((s) =>\n needsConversationResolve ? s.conversations.length : 0\n );\n\n // Reset per-channel guards when the selected channel identity changes\n useEffect(() => {\n lastResolvedChannelRef.current = null;\n lastConversationActionsRef.current = null;\n }, [activeChannelId, activeChannelConvId, activeChannelIsGroup]);\n\n // Resolve conversation id only when the channel object lacks conversationId (e.g. new DM)\n useEffect(() => {\n if (!activeChannel || !loggedUserDetails) return;\n if (activeChannel.conversationId) return;\n\n const channelKey = [\n String(activeChannel.id),\n String(!!activeChannel.isGroup),\n ].join(\"|\");\n\n if (lastResolvedChannelRef.current === channelKey) return;\n\n const nextId = resolveConversationIdForChannel(\n activeChannel,\n loggedUserDetails._id,\n useStore.getState().conversations\n );\n\n if (!nextId) return;\n\n lastResolvedChannelRef.current = channelKey;\n\n const currentId = useStore.getState().activeConversationId;\n if (String(currentId ?? \"\") !== String(nextId)) {\n setStoreActiveConversationId(nextId);\n }\n }, [\n activeChannelId,\n activeChannelConvId,\n activeChannelIsGroup,\n loggedUserDetails?._id,\n conversationsLength,\n setStoreActiveConversationId,\n ]);\n\n // Fetch messages / join / mark-read once per conversation switch\n useEffect(() => {\n if (!activeConversationId || !activeChannel || !loggedUserDetails) {\n return;\n }\n\n if (lastConversationActionsRef.current === activeConversationId) {\n return;\n }\n lastConversationActionsRef.current = activeConversationId;\n\n fetchMessages(activeConversationId);\n fetchConversationInfo(activeConversationId);\n\n const activeConv = findConversationForChannel(\n activeChannel,\n loggedUserDetails._id,\n useStore.getState().conversations\n );\n const convIsGroup = isGroupConversation(activeConv);\n const channelIsGroup = !!activeChannel.isGroup;\n const useGroupSocket = channelIsGroup && (!activeConv || convIsGroup);\n const useDmSocket = !channelIsGroup && (!activeConv || !convIsGroup);\n\n if (useGroupSocket) {\n emitGroupJoin({\n conversationId: activeConversationId,\n userId: String(loggedUserDetails._id),\n });\n emitGroupMarkRead({\n conversationId: activeConversationId,\n userId: String(loggedUserDetails._id),\n });\n } else if (useDmSocket) {\n const receiverId =\n getOtherParticipantId(activeConv, loggedUserDetails._id) ||\n String(activeChannel.id);\n\n emitMarkAsRead({\n conversationId: activeConversationId,\n sender: String(loggedUserDetails._id),\n receiver: receiverId,\n });\n }\n }, [activeConversationId, loggedUserDetails?._id, activeChannelId]);\n\n return (\n <div className=\"flex flex-col flex-1 h-full bg-[#fdfdfe] relative min-w-0 w-full overflow-hidden\">\n {children}\n </div>\n );\n};\n","import React from 'react'\nimport { cn } from '../lib/utils'\nimport { useChatController } from '../hooks/useChatController'\nimport {\n ChatLayoutConfig,\n mergeChatLayoutConfig,\n} from '../types/layout.types'\nimport LoggedUserDetails from './LoggedUserDetails'\nimport ChannelList from './ChannelList'\nimport ChannelHeader from './ChannelHeader'\nimport ActiveChannelMessages from './ActiveChannelMessages'\nimport ChannelMessageBox from './ChannelMessageBox'\nimport ForwardModal from './ForwardModal'\nimport { Channel } from './Channel'\n\nexport interface ChatLayoutProps {\n /** Toggle which UI blocks are rendered */\n layout?: ChatLayoutConfig\n /** Passed to LoggedUserDetails */\n loggedUserDetails?: any\n themeColor?: string\n className?: string\n shellClassName?: string\n}\n\n/**\n * Composable chat shell — turn sections on/off via `layout`.\n *\n * @example Full UI (default)\n * `<ChatLayout />`\n *\n * @example Messages only (no sidebar, header, or input)\n * `<ChatLayout layout={{ sidebar: false, header: false, input: false }} />`\n *\n * @example Custom — import pieces individually instead:\n * `import { Channel, MessageList } from '@realtimexsco/live-chat'`\n */\nconst ChatLayout = ({\n layout,\n loggedUserDetails: loggedUserDetailsProp,\n themeColor,\n className,\n shellClassName,\n}: ChatLayoutProps) => {\n const sections = mergeChatLayoutConfig(layout)\n const showSidebar =\n sections.sidebar &&\n (sections.loggedUserDetails || sections.channelList)\n\n const {\n activeChannel,\n setActiveChannel,\n conversationId,\n rateLimitResetAt,\n isFetchingMessages,\n loggedUserDetails,\n conversationInfos,\n conversationMessages,\n currentLocalMessages,\n state,\n updateState,\n handleChannelSelect,\n handleSendMessage,\n } = useChatController()\n\n const userDetails = loggedUserDetailsProp ?? loggedUserDetails\n\n return (\n <div\n className={cn(\n 'chat-shell chat-container-root flex h-full w-full overflow-hidden bg-[#f4f5f7] p-3 md:p-4',\n shellClassName,\n )}\n >\n <div\n className={cn(\n 'relative flex flex-1 overflow-hidden rounded-2xl border border-black/[0.06] bg-white shadow-[0_8px_30px_rgba(15,23,42,0.06)]',\n className,\n )}\n >\n {showSidebar && (\n <aside\n className={cn(\n 'flex h-full shrink-0 flex-col border-r border-black/[0.06] bg-white transition-all duration-300 ease-in-out',\n 'w-full md:w-[340px] lg:w-[360px] xl:w-[380px]',\n activeChannel ? 'hidden md:flex' : 'flex',\n )}\n >\n {sections.loggedUserDetails && (\n <LoggedUserDetails\n loggedUserDetails={userDetails}\n onUserSelect={handleChannelSelect}\n searchQuery={state.searchQuery}\n setSearchQuery={(val) =>\n updateState({ searchQuery: val })\n }\n isCreateModalOpen={state.isCreateModalOpen}\n setIsCreateModalOpen={(open) =>\n updateState({ isCreateModalOpen: open })\n }\n themeColor={themeColor}\n />\n )}\n {sections.channelList && (\n <ChannelList\n activeChannel={activeChannel}\n onChannelSelect={handleChannelSelect}\n onNewChatClick={() =>\n updateState({ isCreateModalOpen: true })\n }\n debouncedSearch={state.debouncedSearch}\n />\n )}\n </aside>\n )}\n\n <Channel>\n {rateLimitResetAt > Date.now() && (\n <div className=\"shrink-0 border-b border-amber-200/80 bg-amber-50 px-4 py-2 text-center text-xs font-medium text-amber-800\">\n Too many requests — please wait before trying again.\n </div>\n )}\n\n {sections.header && (\n <div className=\"shrink-0\">\n <ChannelHeader\n activeChannel={activeChannel}\n conversationId={conversationId}\n onBack={() => setActiveChannel(null)}\n />\n </div>\n )}\n\n {sections.messageList && (\n <div className=\"relative min-h-0 flex-1 overflow-hidden\">\n <ActiveChannelMessages\n activeChannel={activeChannel}\n loggedUserId={userDetails?._id}\n conversationMessages={conversationMessages}\n localMessages={currentLocalMessages}\n isLoading={isFetchingMessages}\n conversationId={conversationId}\n onReply={(msg) => updateState({ replyTo: msg })}\n onForward={(msg) =>\n updateState({\n forwardMessage: msg,\n isForwardModalOpen: true,\n })\n }\n conversationInfo={\n conversationId\n ? conversationInfos[conversationId] ||\n null\n : null\n }\n />\n </div>\n )}\n\n {sections.input && (\n <div className=\"shrink-0 border-t border-black/[0.06] bg-white\">\n <ChannelMessageBox\n activeChannel={activeChannel}\n conversationId={conversationId}\n onSendMessage={handleSendMessage}\n replyTo={state.replyTo}\n onCancelReply={() =>\n updateState({ replyTo: null })\n }\n />\n </div>\n )}\n </Channel>\n </div>\n\n {sections.forwardModal && (\n <ForwardModal\n isOpen={state.isForwardModalOpen}\n onClose={() =>\n updateState({ isForwardModalOpen: false })\n }\n message={state.forwardMessage}\n onForwardComplete={(channel) =>\n handleChannelSelect(channel)\n }\n />\n )}\n </div>\n )\n}\n\nexport default ChatLayout\n","import React from 'react'\nimport { Chat, UIConfig } from './ChatContext'\nimport ChatLayout from './ChatLayout'\nimport { ChatLayoutConfig } from '../types/layout.types'\n\ninterface ChatMainProps {\n clientId: string\n loggedUserDetails: any\n accessToken: string\n apiUrl?: string\n socketUrl?: string\n themeColor?: string\n theme?: string\n uiConfig?: UIConfig\n /** Control which sections render. Omit for full UI. */\n layout?: ChatLayoutConfig\n}\n\nconst ChatMain = (props: ChatMainProps) => {\n const clientObj = React.useMemo(() => ({ id: props.clientId }), [props.clientId])\n const uiConfigObj = React.useMemo(() => props.uiConfig || {}, [props.uiConfig])\n\n return (\n <Chat\n client={clientObj}\n accessToken={props.accessToken}\n loggedUserDetails={props.loggedUserDetails}\n themeColor={props.themeColor}\n theme={props.theme}\n uiConfig={uiConfigObj}\n apiUrl={props.apiUrl}\n socketUrl={props.socketUrl}\n >\n <ChatLayout\n layout={props.layout}\n loggedUserDetails={props.loggedUserDetails}\n themeColor={props.themeColor}\n />\n </Chat>\n )\n}\n\nexport default ChatMain\n","import ChatMain from \"./chat/ChatMain\";\nexport { ChatMain };\nexport default ChatMain;\nexport { Chat, type UIConfig, useChatContext } from \"./chat/ChatContext\";\nexport { useStore as useChatStore } from \"./store/useStore\";\nexport { default as socketService } from \"./services/socket.service\";\nexport { Channel } from \"./chat/Channel\";\nexport { default as ChannelList } from \"./chat/ChannelList\";\nexport { default as ChannelHeader } from \"./chat/ChannelHeader\";\nexport { default as MessageList } from \"./chat/ActiveChannelMessages\";\nexport { default as MessageInput } from \"./chat/ChannelMessageBox\";\nexport { default as LoggedUserDetails } from \"./chat/LoggedUserDetails\";\nexport { default as ForwardModal } from \"./chat/ForwardModal\";\nexport { default as ChatLayout } from \"./chat/ChatLayout\";\nexport { useChatController } from \"./hooks/useChatController\";\nexport {\n type ChatLayoutConfig,\n defaultChatLayoutConfig,\n mergeChatLayoutConfig,\n} from \"./types/layout.types\";\nexport { setChatClientId, setChatAccessToken, setChatBaseURL } from \"./services/api.service\";\nexport type { ISocketConfig } from \"./services/socket.service\";\nexport type { IChannel, IMessage, IAttachment } from \"./types/chats.types\";\n"]}
1
+ {"version":3,"sources":["../src/store/slices/auth.slice.ts","../src/constants/socket.events.constants.ts","../src/store/useSocketStore.ts","../src/services/socket.service.ts","../src/store/helpers/store.helpers.ts","../src/constants/api.constants.ts","../src/services/api.service.ts","../src/store/forwardPending.store.ts","../src/store/handlers/message.handlers.ts","../src/store/handlers/group.handlers.ts","../src/store/handlers/group.reaction.handlers.ts","../src/store/handlers/interaction.handlers.ts","../src/store/actions/group.actions.ts","../src/store/slices/socket.slice.ts","../src/store/useStore.ts","../src/chat/ChatContext.tsx","../src/lib/utils.ts","../src/ui/tooltip.tsx","../src/hooks/useChatSync.ts","../src/store/useAuthStore.ts","../src/hooks/useChatController.ts","../src/types/layout.types.ts","../src/ui/avatar.tsx","../src/ui/input.tsx","../src/ui/button.tsx","../src/ui/dialog.tsx","../src/chat/LoggedUserDetails.tsx","../src/ui/badge.tsx","../src/ui/scroll-area.tsx","../src/chat/ChannelList.tsx","../src/hooks/useConversationDraft.ts","../src/chat/header/HeaderLeftSide.tsx","../src/ui/dropdown-menu.tsx","../src/chat/header/HeaderRightSide.tsx","../src/chat/header/HeaderSearchOverlay.tsx","../src/chat/ChannelHeader.tsx","../src/ui/sheet.tsx","../src/chat/header/PinnedMessagesDrawer.tsx","../src/chat/header/SavedMessageCard.tsx","../src/chat/header/StarredMessagesDrawer.tsx","../src/chat/header/AttachmentsDrawer.tsx","../src/ui/textarea.tsx","../src/hooks/useGroupInfo.ts","../src/chat/header/ChannelDetailsDrawer.tsx","../src/ui/switch.tsx","../src/chat/header/PermissionDrawer.tsx","../src/chat/header/AdminsDrawer.tsx","../src/chat/header/MembersDrawer.tsx","../src/ui/alert-dialog.tsx","../src/ui/alert.tsx","../src/chat/header/ChatActionModal.tsx","../src/hooks/useDebounce.ts","../src/chat/MessageItem.tsx","../src/chat/message/MessageStatus.tsx","../src/chat/message/MessageAttachments.tsx","../src/chat/message/MessageReactions.tsx","../src/ui/popover.tsx","../src/chat/message/MessageToolbar.tsx","../src/chat/message/MessageReplySnippet.tsx","../src/chat/ActiveChannelMessages.tsx","../src/chat/ChannelMessageBox.tsx","../src/chat/ForwardModal.tsx","../src/chat/Channel.tsx","../src/chat/ChatLayout.tsx","../src/chat/ChatMain.tsx","../src/index.ts","../src/config/socket.config.ts","../src/helpers/general.ts"],"names":["useStore","socket_service_default","io","setChatClientId","setChatAccessToken","setChatBaseURL","axios","useSocketStore","conversationId","messageId","isStarred","state","create","persist","twMerge","clsx","React","TooltipPrimitive","useState","useEffect","createContext","useContext","error","rateLimitResetAt","emitGroupMessageSend","React3","AvatarPrimitive","React4","cva","Slot","React5","DialogPrimitive","React6","XIcon","useRef","useMemo","fetchConversations","user","Search","X","UserPlus","MessageCircle","Users","Camera","Check","ArrowRight","React8","React9","ScrollAreaPrimitive","useSyncExternalStore","useCallback","Loader2","ArrowLeft","Pin","Star","DropdownMenuPrimitive","React12","Phone","Video","MoreVertical","Info","UserKey","ShieldUser","Paperclip","MessageSquareX","Trash2","LogOut","Ban","SheetPrimitive","React15","PinOff","StarOff","Download","React20","Save","Calendar","Mail","User","React22","SwitchPrimitive","UserMinus","Plus","ShieldCheck","AlertDialogPrimitive","React26","React27","AlertCircle","fetchPinnedMessages","fetchStarredMessages","Clock","CheckCheck","Music","Film","FileText","FileSpreadsheet","FileIcon","PopoverPrimitive","React33","CornerUpLeft","Forward","Smile","EmojiPicker","Pencil","fetchMessages","useLayoutEffect","MessageCircleMore","History","Theme","Send","fetchConversationInfo","toast","name"],"mappings":"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","file":"index.cjs","sourcesContent":["import { StateCreator } from 'zustand';\nimport { AppStoreState, AuthState } from '../types/store.types';\n\nexport const createAuthSlice: StateCreator<AppStoreState, [], [], AuthState> = (set) => ({\n loggedUserDetails: null,\n isAuthenticate: false,\n accessToken: null,\n tenantId: null,\n isTenant: true,\n isSessionReady: false,\n\n setSession: (payload) => set((state) => ({\n accessToken: payload.accessToken,\n loggedUserDetails: payload.user || state.loggedUserDetails,\n tenantId: payload.tenantId || state.tenantId,\n isAuthenticate: true,\n })),\n setSessionReady: (ready) => set({ isSessionReady: ready }),\n clearSession: () => set({\n accessToken: null,\n loggedUserDetails: null,\n isAuthenticate: false,\n isSessionReady: false,\n }),\n});\n","export const SOCKET_EVENTS = {\n // Error Events\n ERROR: 'app_error',\n\n // Connection Events\n CONNECTION: 'connection',\n DISCONNECTION: 'disconnect',\n\n // User Events\n USER_ONLINE: 'user_online',\n USER_OFFLINE: 'user_offline',\n\n // Online Users Events\n GET_ONLINE_USERS: 'get_online_users',\n ONLINE_USERS_LIST: 'online_users_list',\n\n // Conversation Events\n CONVERSATION_UPDATE: 'conversation_update',\n\n // DM Events\n DM_SEND: 'dm_send',\n DM_RECEIVE: 'dm_receive',\n\n DM_TYPING_START: 'dm_typing_start',\n DM_TYPING_STOP: 'dm_typing_stop',\n\n DM_EDIT: 'dm_edit',\n DM_EDIT_RECEIVE: 'dm_edit_receive',\n\n DM_REACTION_ADD: 'dm_reaction_add',\n DM_REACTION_ADD_RECEIVE: 'dm_reaction_add_receive',\n\n DM_REACTION_REMOVE: 'dm_reaction_remove',\n DM_REACTION_REMOVE_RECEIVE: 'dm_reaction_remove_receive',\n\n DM_DELETE: 'dm_delete',\n DM_DELETE_ME: 'dm_delete_me',\n DM_DELETE_EVERYONE: 'dm_delete_everyone',\n\n DM_MARK_READ: 'dm_mark_read',\n DM_STATUS_UPDATE: 'dm_status_update',\n\n DM_PIN: 'dm_pin',\n DM_UNPIN: 'dm_unpin',\n DM_PIN_UPDATE: 'dm_pin_update',\n\n DM_STAR: 'dm_star',\n DM_UNSTAR: 'dm_unstar',\n DM_STAR_UPDATE: 'dm_star_update',\n\n DM_FORWARD: 'dm_forward',\n DM_FORWARD_RECEIVE: 'dm_forward_receive',\n CONVERSATION_STARRED_PINNED_COUNT_UPDATE:\n 'conversation_starred_pinned_count_update',\n\n DM_CLEAR_CHAT: 'dm_clear_chat',\n DM_CLEAR_CHAT_SUCCESS: 'dm_clear_chat_success',\n\n DM_DELETE_CONVERSATION: 'dm_delete_conversation',\n DM_DELETE_CONVERSATION_SUCCESS: 'dm_delete_conversation_success',\n\n\n // Group Events\n GROUP_JOIN: 'group_join',\n\n GROUP_MESSAGE_SEND: 'group_message_send',\n GROUP_MESSAGE_RECEIVE: 'group_message_receive',\n\n GROUP_MESSAGE_DELIVERED: 'group_message_delivered',\n GROUP_MESSAGE_READ: 'group_message_read',\n\n GROUP_STATUS_UPDATE: 'group_status_update',\n\n GROUP_TYPING_START: 'group_typing_start',\n GROUP_TYPING_STOP: 'group_typing_stop',\n\n GROUP_EDIT: 'group_edit',\n GROUP_EDIT_RECEIVE: 'group_edit_receive',\n\n GROUP_REACTION_ADD: 'group_reaction_add',\n GROUP_REACTION_ADD_RECEIVE: 'group_reaction_add_receive',\n\n GROUP_REACTION_REMOVE: 'group_reaction_remove',\n GROUP_REACTION_REMOVE_RECEIVE: 'group_reaction_remove_receive',\n\n GROUP_DELETE: 'group_delete',\n GROUP_DELETE_ME: 'group_delete_me',\n GROUP_DELETE_EVERYONE: 'group_delete_everyone',\n\n GROUP_PIN: 'group_pin',\n GROUP_UNPIN: 'group_unpin',\n GROUP_PIN_UPDATE: 'group_pin_update',\n\n GROUP_STAR: 'group_star',\n GROUP_UNSTAR: 'group_unstar',\n GROUP_STAR_UPDATE: 'group_star_update',\n\n GROUP_FORWARD: 'group_forward',\n GROUP_FORWARD_RECEIVE: 'group_forward_receive',\n\n GROUP_CLEAR_CHAT: 'group_clear_chat',\n GROUP_CLEAR_CHAT_SUCCESS: 'group_clear_chat_success',\n\n GROUP_DELETE_CONVERSATION: 'group_delete_conversation',\n GROUP_DELETE_CONVERSATION_SUCCESS: 'group_delete_conversation_success',\n\n\n GROUP_LEAVE: 'group_leave',\n GROUP_LEAVE_RECEIVE: 'group_leave_receive',\n};\n\n","import { useStore } from './useStore';\nexport const useSocketStore = useStore;\nexport default useSocketStore;\n","import { io, Socket } from \"socket.io-client\";\nimport { SOCKET_EVENTS } from \"../constants/socket.events.constants\";\nimport type { ISocketConfig } from \"../config/socket.config\";\n\nexport type { ISocketConfig } from \"../config/socket.config\";\n\n// Lazy getter to break circular dependency:\n// useStore → socket.slice → socket.service → useSocketStore → useStore\nconst getStore = () => {\n return require(\"../store/useSocketStore\").useSocketStore;\n};\n\nclass SocketService {\n private socket: Socket | null = null;\n private currentConfig: ISocketConfig | null = null;\n private isConnecting: boolean = false;\n\n connect(config: ISocketConfig) {\n if (\n this.socket?.connected &&\n this.currentConfig &&\n this.currentConfig.url === config.url &&\n JSON.stringify(this.currentConfig.options.auth) === JSON.stringify(config.options.auth) &&\n JSON.stringify(this.currentConfig.options.query) === JSON.stringify(config.options.query)\n ) {\n return;\n }\n\n if (this.isConnecting && this.currentConfig?.url === config.url) {\n return;\n }\n\n if (this.socket) {\n this.disconnect();\n }\n\n this.currentConfig = config;\n this.isConnecting = true;\n const { setConnecting, setConnected, setDisconnected, setError } = getStore().getState();\n\n setConnecting();\n\n this.socket = io(config.url, config.options);\n\n this.socket.on(\"connect\", () => {\n this.isConnecting = false;\n setConnected({ socketId: this.socket?.id || \"\" });\n this.emitGetOnlineUsers();\n });\n\n this.socket.on(\"disconnect\", () => {\n this.isConnecting = false;\n setDisconnected();\n });\n\n this.socket.on(\"connect_error\", (error: any) => {\n this.isConnecting = false;\n setError(error.message);\n });\n\n this.socket.on(SOCKET_EVENTS.ERROR, (payload) => {\n const message = typeof payload === \"string\" ? payload : payload?.message ?? \"app_error\";\n getStore().getState().handleAppError(message);\n });\n\n this.socket.on(SOCKET_EVENTS.DM_RECEIVE, (payload) => {\n getStore().getState().receivedDM(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_MESSAGE_RECEIVE, (payload) => {\n getStore().getState().receivedGroupMessage(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.CONVERSATION_UPDATE, (payload) => {\n if (!payload) return;\n getStore().getState().updateConversation(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.DM_EDIT_RECEIVE, (payload) => {\n getStore().getState().receivedEditDM(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.DM_DELETE_ME, (payload) => {\n getStore().getState().receivedDeleteForMe(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.DM_DELETE_EVERYONE, (payload) => {\n getStore().getState().receivedDeleteForEveryone(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.DM_CLEAR_CHAT_SUCCESS, (payload) => {\n getStore().getState().receivedDmClearChat(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_CLEAR_CHAT_SUCCESS, (payload) => {\n getStore().getState().receivedGroupClearChat(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.DM_DELETE_CONVERSATION_SUCCESS, (payload) => {\n getStore().getState().receivedDmDeleteConversation(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_DELETE_CONVERSATION_SUCCESS, (payload) => {\n getStore().getState().receivedGroupDeleteConversation(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.DM_REACTION_ADD_RECEIVE, (payload) => {\n getStore().getState().receivedReactionAdd(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.DM_REACTION_REMOVE_RECEIVE, (payload) => {\n getStore().getState().receivedReactionRemove(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.DM_PIN_UPDATE, (payload) => {\n getStore().getState().receivedPinUpdate(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.DM_STAR_UPDATE, (payload) => {\n getStore().getState().receivedStarUpdate(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.DM_STATUS_UPDATE, (payload) => {\n getStore().getState().receivedStatusUpdate(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.DM_MARK_READ, (payload) => {\n getStore().getState().receivedDMMarkRead(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_MESSAGE_READ, (payload) => {\n getStore().getState().receivedGroupMarkRead(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.DM_FORWARD_RECEIVE, (payload) => {\n getStore().getState().receivedForward(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.DM_TYPING_START, (payload) => {\n getStore().getState().setTypingStart(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.DM_TYPING_STOP, (payload) => {\n getStore().getState().setTypingStop(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.ONLINE_USERS_LIST, (payload) => {\n const users = payload?.onlineUsers || [];\n getStore().getState().setOnlineUsers(users);\n });\n\n this.socket.on(SOCKET_EVENTS.USER_ONLINE, () => {\n this.emitGetOnlineUsers();\n });\n\n this.socket.on(SOCKET_EVENTS.USER_OFFLINE, () => {\n this.emitGetOnlineUsers();\n });\n\n this.socket.on(SOCKET_EVENTS.CONVERSATION_STARRED_PINNED_COUNT_UPDATE, (payload) => {\n getStore().getState().receivedCountUpdate(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_EDIT_RECEIVE, (payload) => {\n getStore().getState().receivedEditDM(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_STATUS_UPDATE, (payload) => {\n getStore().getState().receivedGroupStatusUpdate(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_MESSAGE_DELIVERED, (payload) => {\n getStore().getState().receivedGroupStatusUpdate({\n ...payload,\n status: payload?.status || 'delivered',\n });\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_REACTION_ADD_RECEIVE, (payload) => {\n getStore().getState().receivedGroupReactionAdd(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_TYPING_START, (payload) => {\n getStore().getState().setTypingStart(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_TYPING_STOP, (payload) => {\n getStore().getState().setTypingStop(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_REACTION_REMOVE_RECEIVE, (payload) => {\n getStore().getState().receivedGroupReactionRemove(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_DELETE_ME, (payload) => {\n getStore().getState().receivedDeleteForMe(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_DELETE_EVERYONE, (payload) => {\n getStore().getState().receivedDeleteForEveryone(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_PIN_UPDATE, (payload) => {\n getStore().getState().receivedPinUpdate(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_STAR_UPDATE, (payload) => {\n getStore().getState().receivedStarUpdate(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_FORWARD_RECEIVE, (payload) => {\n getStore().getState().receivedForward(payload);\n });\n\n this.socket.on(SOCKET_EVENTS.GROUP_LEAVE_RECEIVE, (payload) => {\n getStore().getState().receivedGroupLeave(payload);\n });\n }\n\n disconnect() {\n if (this.socket) {\n this.socket.removeAllListeners();\n this.socket.disconnect();\n this.socket = null;\n this.currentConfig = null;\n this.isConnecting = false;\n }\n }\n\n emit(event: string, payload?: any) {\n if (this.socket) {\n this.socket.emit(event, payload);\n } else {\n console.error(`SocketService: Socket is not initialized. Cannot emit ${event}`);\n }\n }\n\n getSocket(): Socket | null {\n return this.socket;\n }\n\n emitDmSend(payload: any) {\n this.emit(SOCKET_EVENTS.DM_SEND, payload);\n }\n\n emitDmEdit(payload: { content: string; messageId: string; sender: string; receiver: string }) {\n this.emit(SOCKET_EVENTS.DM_EDIT, payload);\n }\n\n emitDmDelete(payload: { messageId: string; sender: string; receiver: string; deleteType: \"me\" | \"everyone\" }) {\n this.emit(SOCKET_EVENTS.DM_DELETE, payload);\n }\n\n emitDmClearChat(payload: { conversationId: string; sender: string }) {\n this.emit(SOCKET_EVENTS.DM_CLEAR_CHAT, payload);\n }\n\n emitGroupClearChat(payload: { conversationId: string; sender: string }) {\n this.emit(SOCKET_EVENTS.GROUP_CLEAR_CHAT, payload);\n }\n\n emitDmDeleteConversation(payload: { conversationId: string; sender: string; receiver: string }) {\n this.emit(SOCKET_EVENTS.DM_DELETE_CONVERSATION, payload);\n }\n\n emitGroupDeleteConversation(payload: { conversationId: string; sender: string }) {\n this.emit(SOCKET_EVENTS.GROUP_DELETE_CONVERSATION, payload);\n }\n\n emitDmReactionAdd(payload: { messageId: string; sender: string; receiver: string; reaction: string }) {\n this.emit(SOCKET_EVENTS.DM_REACTION_ADD, payload);\n }\n\n emitDmReactionRemove(payload: { messageId: string; sender: string; receiver: string; reaction: string }) {\n this.emit(SOCKET_EVENTS.DM_REACTION_REMOVE, payload);\n }\n\n emitTypingStart(payload: any) {\n this.emit(SOCKET_EVENTS.DM_TYPING_START, payload);\n }\n\n emitTypingStop(payload: any) {\n this.emit(SOCKET_EVENTS.DM_TYPING_STOP, payload);\n }\n\n emitMarkAsRead(payload: { conversationId: string; sender: string; receiver: string }) {\n this.emit(SOCKET_EVENTS.DM_MARK_READ, payload);\n }\n\n emitDmPin(payload: { conversationId: string; sender: string; messageId: string; receiver: string }) {\n this.emit(SOCKET_EVENTS.DM_PIN, payload);\n }\n\n emitDmUnpin(payload: { conversationId: string; sender: string; messageId: string; receiver: string }) {\n this.emit(SOCKET_EVENTS.DM_UNPIN, payload);\n }\n\n emitDmStar(payload: { messageId: string; sender: string }) {\n this.emit(SOCKET_EVENTS.DM_STAR, payload);\n }\n\n emitDmUnstar(payload: { messageId: string; sender: string }) {\n this.emit(SOCKET_EVENTS.DM_UNSTAR, payload);\n }\n\n emitDmForward(payload: { messageId: string; sender: string; targetConversationIds: string[] }) {\n this.emit(SOCKET_EVENTS.DM_FORWARD, payload);\n }\n\n emitGroupJoin(payload: { conversationId: string; userId: string }) {\n this.emit(SOCKET_EVENTS.GROUP_JOIN, payload);\n }\n\n emitGroupMessageSend(payload: any) {\n this.emit(SOCKET_EVENTS.GROUP_MESSAGE_SEND, payload);\n }\n\n emitGroupTypingStart(payload: { conversationId: string; userId: string }) {\n this.emit(SOCKET_EVENTS.GROUP_TYPING_START, payload);\n }\n\n emitGroupTypingStop(payload: { conversationId: string; userId: string }) {\n this.emit(SOCKET_EVENTS.GROUP_TYPING_STOP, payload);\n }\n\n emitGroupEdit(payload: any) {\n this.emit(SOCKET_EVENTS.GROUP_EDIT, payload);\n }\n\n emitGroupReactionAdd(payload: any) {\n this.emit(SOCKET_EVENTS.GROUP_REACTION_ADD, payload);\n }\n\n emitGroupMarkRead(payload: { conversationId: string; userId: string }) {\n this.emit(SOCKET_EVENTS.GROUP_MESSAGE_READ, payload);\n }\n\n emitGroupReactionRemove(payload: any) {\n this.emit(SOCKET_EVENTS.GROUP_REACTION_REMOVE, payload);\n }\n\n emitGroupDelete(payload: { messageId: string; sender: string; deleteType: \"me\" | \"everyone\" }) {\n this.emit(SOCKET_EVENTS.GROUP_DELETE, payload);\n }\n\n emitGroupPin(payload: { conversationId: string; sender: string; messageId: string; receiver: string }) {\n this.emit(SOCKET_EVENTS.GROUP_PIN, payload);\n }\n\n emitGroupUnpin(payload: { conversationId: string; sender: string; messageId: string; receiver: string }) {\n this.emit(SOCKET_EVENTS.GROUP_UNPIN, payload);\n }\n\n emitGroupStar(payload: { messageId: string; sender: string; conversationId: string }) {\n this.emit(SOCKET_EVENTS.GROUP_STAR, payload);\n }\n\n emitGroupUnstar(payload: { messageId: string; sender: string; conversationId: string }) {\n this.emit(SOCKET_EVENTS.GROUP_UNSTAR, payload);\n }\n\n emitGroupForward(payload: { messageId: string; sender: string; targetConversationIds: string[] }) {\n this.emit(SOCKET_EVENTS.GROUP_FORWARD, payload);\n }\n\n emitConversationUpdate(payload: { conversationId: string }) {\n this.emit(SOCKET_EVENTS.CONVERSATION_UPDATE, payload);\n }\n\n emitGroupLeave(payload: { conversationId: string; sender: string }) {\n this.emit(SOCKET_EVENTS.GROUP_LEAVE, payload);\n }\n\n emitGetOnlineUsers() {\n this.emit(SOCKET_EVENTS.GET_ONLINE_USERS);\n }\n}\n\nconst socketService = new SocketService();\nexport default socketService;\n","export const findConversationIdByMessageId = (messagesByConversation: Record<string, any[]>, messageId: string) => {\n return Object.keys(messagesByConversation).find(cid =>\n messagesByConversation[cid].some((m: any) =>\n String(m._id || m.id) === String(messageId)\n )\n );\n};\n\nexport const normalizeId = (id: any) => String(id?._id || id?.id || id || \"\");\n\n/** unreadCount is now a number from the API; tolerate legacy per-user maps. */\nexport const normalizeUnreadCount = (unreadCount: unknown): number => {\n if (typeof unreadCount === \"number\") return unreadCount;\n return 0;\n};\n\nexport const incrementUnreadCount = (unreadCount: unknown): number =>\n normalizeUnreadCount(unreadCount) + 1;\n\nexport const emptyMessagesMetadata = () => ({\n nextCursor: null as string | null,\n hasMore: false,\n isFirstPage: true,\n});\n\nexport const extractMessageData = (payload: any) => {\n const messageId = payload.messageId || payload._id || payload.message?._id || payload.message?.id;\n const content = payload.content || payload.message?.content;\n const conversationId = payload.conversationId || payload.message?.conversationId || payload.message?.conversation_id;\n const status = payload.status || payload.message?.status;\n const isPinned = payload.isPinned ?? payload.message?.isPinned;\n const isStarred = payload.isStarred ?? payload.message?.isStarred;\n return { messageId, content, conversationId, status, isPinned, isStarred };\n};\n\n\n/** Preserve last-message preview when socket/API sends partial updates (e.g. read receipts). */\nexport const mergeLastMessage = (existing?: any | null, incoming?: any | null) => {\n if (!incoming) return existing ?? null;\n if (!existing) return incoming;\n\n const content = incoming.content?.trim() ? incoming.content : existing.content;\n const createdAt =\n incoming.createdAt ??\n incoming.timestamp ??\n existing.createdAt ??\n existing.timestamp;\n\n return {\n ...existing,\n ...incoming,\n ...(content !== undefined ? { content } : {}),\n ...(createdAt !== undefined ? { createdAt } : {}),\n };\n};\n\nexport const getLatestMessageFromList = (messages: any[]): any | null => {\n if (!messages?.length) return null;\n\n return messages.reduce((latest, message) => {\n const latestTime = new Date(latest.createdAt || latest.timestamp || 0).getTime();\n const messageTime = new Date(message.createdAt || message.timestamp || 0).getTime();\n return messageTime >= latestTime ? message : latest;\n });\n};\n\nexport const resolveConversationLastMessage = (\n conversation: any,\n messagesByConversation: Record<string, any[]>\n): any | null => {\n const conversationId = String(conversation._id || conversation.id || \"\");\n const storedLast = conversation.lastMessage;\n\n if (storedLast?.content?.trim()) return storedLast;\n\n const latestFromMessages = getLatestMessageFromList(messagesByConversation[conversationId] || []);\n return mergeLastMessage(storedLast, latestFromMessages);\n};\n\nexport const syncConversationLastMessage = (\n conversations: any[],\n conversationId: string,\n messages: any[]\n) => {\n const latest = getLatestMessageFromList(messages);\n if (!latest) return conversations;\n\n return conversations.map((conversation) => {\n if (String(conversation._id) !== String(conversationId)) return conversation;\n\n return {\n ...conversation,\n lastMessage: mergeLastMessage(conversation.lastMessage, latest),\n };\n });\n};\n\nexport const isGroupConversation = (\n conversation: { conversationType?: string; isGroup?: boolean } | null | undefined\n): boolean => {\n if (!conversation) return false;\n return conversation.conversationType === \"group\" || !!conversation.isGroup;\n};\n\nexport const findConversationById = (conversations: any[], conversationId?: string | null) => {\n if (!conversationId) return undefined;\n return conversations.find((c) => String(c._id) === String(conversationId));\n};\n\nexport const resolveIsGroupFromPayload = (\n payload: any,\n conversations: any[]\n): boolean => {\n const conversationId =\n payload?.conversationId ||\n payload?.message?.conversationId ||\n payload?.message?.conversation_id;\n\n const fromStore = findConversationById(conversations, conversationId);\n if (fromStore) return isGroupConversation(fromStore);\n\n return (\n !!payload?.isGroup ||\n payload?.conversationType === \"group\" ||\n payload?.message?.conversationType === \"group\"\n );\n};\n\nexport const getOtherParticipantId = (\n conversation: any,\n loggedUserId?: string\n): string => {\n if (!conversation?.participants?.length) return \"\";\n const other =\n conversation.participants.find(\n (p: any) => String(p._id || p) !== String(loggedUserId)\n ) || conversation.participants[0];\n return String(other?._id || other || \"\");\n};\n\nexport const findConversationForChannel = (\n channel: { id: string; conversationId?: string | null; isGroup?: boolean } | null | undefined,\n loggedUserId: string | undefined,\n conversations: any[]\n): any | undefined => {\n if (!channel || !loggedUserId) return undefined;\n\n if (channel.conversationId) {\n const byId = findConversationById(conversations, channel.conversationId);\n if (byId) return byId;\n }\n\n if (channel.isGroup) {\n return conversations.find(\n (c) => isGroupConversation(c) && String(c._id) === String(channel.id)\n );\n }\n\n return conversations.find((c) => {\n if (isGroupConversation(c)) return false;\n const ids = (c.participants || []).map((p: any) => String(p._id || p));\n return ids.includes(String(channel.id)) && ids.includes(String(loggedUserId));\n });\n};\n\nexport const resolveConversationIdForChannel = (\n channel: { id: string; conversationId?: string | null; isGroup?: boolean } | null | undefined,\n loggedUserId: string | undefined,\n conversations: any[]\n): string | null => {\n const found = findConversationForChannel(channel, loggedUserId, conversations);\n if (found?._id) return String(found._id);\n if (channel?.conversationId) return String(channel.conversationId);\n return null;\n};\n\nconst getMessageContent = (message: any) => String(message?.content || \"\").trim();\n\nconst getMessageTimestamp = (message: any) => {\n const value = message?.createdAt || message?.timestamp;\n const time = value ? new Date(value).getTime() : NaN;\n return Number.isFinite(time) ? time : 0;\n};\n\nconst isOwnMessage = (message: any, loggedUserId?: string) => {\n if (message?.isOwnMessage) return true;\n if (!loggedUserId) return false;\n const senderId = message?.sender?._id || message?.sender?.id || message?.sender;\n return String(senderId) === String(loggedUserId);\n};\n\nconst STATUS_RANK: Record<string, number> = { sent: 1, delivered: 2, read: 3 };\n\nexport const pickBetterMessageStatus = (\n current?: string,\n incoming?: string\n): 'sent' | 'delivered' | 'read' | undefined => {\n if (!incoming) return current as any;\n if (!current) return incoming as any;\n return (STATUS_RANK[incoming] ?? 0) >= (STATUS_RANK[current] ?? 0)\n ? (incoming as 'sent' | 'delivered' | 'read')\n : (current as 'sent' | 'delivered' | 'read');\n};\n\n/** Merge API/store messages with optimistic local messages without duplicates. */\nexport const mergeChatMessages = (\n apiMessages: any[],\n localMessages: any[],\n loggedUserId?: string\n): any[] => {\n const merged = new Map<string, any>();\n\n apiMessages.forEach((message) => {\n const id = String(message?._id || message?.id || \"\");\n if (id) merged.set(id, message);\n });\n\n localMessages.forEach((localMessage) => {\n if (!localMessage) return;\n\n const localId = String(localMessage._id || localMessage.id || \"\");\n\n if (localId && merged.has(localId)) {\n const existing = merged.get(localId);\n merged.set(localId, {\n ...existing,\n ...localMessage,\n status: pickBetterMessageStatus(existing?.status, localMessage?.status),\n });\n return;\n }\n\n const duplicateInApi = apiMessages.some((apiMessage) => {\n const apiId = String(apiMessage?._id || apiMessage?.id || \"\");\n if (localId && apiId && localId === apiId) return true;\n\n if (!isOwnMessage(localMessage, loggedUserId)) return false;\n if (!isOwnMessage(apiMessage, loggedUserId)) return false;\n if (getMessageContent(localMessage) !== getMessageContent(apiMessage)) return false;\n\n return Math.abs(getMessageTimestamp(localMessage) - getMessageTimestamp(apiMessage)) < 120000;\n });\n\n if (duplicateInApi) return;\n\n const key = localId || `pending-${getMessageTimestamp(localMessage)}-${getMessageContent(localMessage)}`;\n if (!merged.has(key)) merged.set(key, localMessage);\n });\n\n return Array.from(merged.values()).filter((message, index, list) => {\n const id = String(message?._id || message?.id || \"\");\n if (!id) return true;\n return list.findIndex((m) => String(m?._id || m?.id || \"\") === id) === index;\n });\n};\n","export const API_ENDPOINTS = {\n USER: {\n CLIENT_LOGIN: \"/user/login/client-user\",\n LIST: \"/user/list\",\n CONVERSATION: \"/conversation/list\",\n MESSAGE_LIST: \"/message/get-all-from-conversation\",\n PINNED_MESSAGE: (conversationId: string) => `message/pinned-messages?conversationId=${conversationId}`,\n STARRED_MESSAGE: (conversationId: string) => `message/starred-messages?conversationId=${conversationId}`,\n },\n GROUP: {\n CREATE: \"/conversation/group/create\",\n UPDATE_CONVERSATION: `/conversation/group/permission/update`,\n GET_CONVERSATION_INFO: (conversationId: string) => `/conversation/get/information/${conversationId}`,\n UPDATE_INFORMATION: `/conversation/group/information/update`,\n ADD_REMOVE_MEMBERS: \"/conversation/group/participants/add-remove\",\n ADD_REMOVE_ADMINS: \"/conversation/group/admins/add-remove\",\n SEARCH_MESSAGES: \"/message/search-messages\",\n SEARCH_MESSAGES_CONTEXT: (messageId: string) => `/message/searched-message/context?messageId=${messageId}`,\n BLOCK_UNBLOCK_USER: \"/user/block-unblock\"\n }\n} as const;\n","import axios from \"axios\";\nimport { API_ENDPOINTS } from \"../constants/api.constants\";\n\nlet chatClientId = \"\";\nlet chatAccessToken = \"\";\nlet rateLimitResetAt = 0;\n\nexport const setChatClientId = (id: string) => {\n chatClientId = id;\n};\n\nexport const setChatAccessToken = (token: string) => {\n chatAccessToken = token;\n};\n\nexport const getRateLimitResetAt = () => rateLimitResetAt;\nexport const isRateLimited = () => Date.now() < rateLimitResetAt;\n\nconst apiClient = axios.create({\n baseURL: \"http://localhost:5000/api/v1\",\n withCredentials: true,\n});\n\nexport const setChatBaseURL = (url: string) => {\n apiClient.defaults.baseURL = url;\n};\n\napiClient.interceptors.request.use(\n (config) => {\n if (isRateLimited()) {\n return Promise.reject(new Error(\"Rate limit active — please wait before retrying.\"));\n }\n\n config.headers = config.headers ?? {};\n config.headers.set(\"ngrok-skip-browser-warning\", \"true\");\n config.headers.set(\"platform\", \"web\");\n config.headers.set(\"is-tenant\", \"true\");\n\n if (chatClientId) {\n config.headers.set(\"x-client-id\", chatClientId);\n }\n\n if (chatAccessToken) {\n config.headers.set(\"Authorization\", `Bearer ${chatAccessToken}`);\n }\n\n return config;\n },\n (error) => {\n return Promise.reject(error);\n }\n);\n\napiClient.interceptors.response.use(\n (response) => response,\n (error) => {\n if (error.response?.status === 429) {\n const resetHeader = error.response.headers?.[\"ratelimit-reset\"];\n const resetSeconds = resetHeader ? parseInt(String(resetHeader), 10) : 120;\n rateLimitResetAt = Date.now() + (Number.isFinite(resetSeconds) ? resetSeconds : 120) * 1000;\n try {\n const { useSocketStore } = require(\"../store/useSocketStore\");\n const store = useSocketStore.getState();\n store.setRateLimitResetAt(rateLimitResetAt);\n store.handleAppError(\"Rate limit exceeded, slow down\");\n } catch {\n // store not ready during SSR\n }\n }\n return Promise.reject(error);\n }\n);\n\nexport const clientUserLogin = async (name: string, email: string) => {\n try {\n const response = await apiClient.post(API_ENDPOINTS.USER.CLIENT_LOGIN, {\n name,\n email\n });\n return response.data;\n } catch (error: any) {\n console.error(\"Client user login failed:\", error);\n throw error;\n }\n};\n\nexport const fetchUsers = async () => {\n try {\n const response = await apiClient.get(API_ENDPOINTS.USER.LIST);\n return response.data;\n } catch (error: any) {\n console.error(\"List users failed:\", error);\n throw error;\n }\n};\n\nexport const fetchConversations = async (limit: number = 10, page: number = 1, search: string = \"\") => {\n try {\n const params: Record<string, any> = { limit, page };\n if (search) {\n params.search = search;\n }\n\n const response = await apiClient.get(API_ENDPOINTS.USER.CONVERSATION, {\n params\n });\n return response.data;\n } catch (error: any) {\n console.error(\"List conversations failed:\", error);\n throw error;\n }\n};\n\nexport const fetchMessages = async (\n conversationId: string,\n limit: number = 20,\n cursor?: string | null\n) => {\n try {\n const params: Record<string, string | number> = { conversationId, limit };\n if (cursor) {\n params.cursor = cursor;\n }\n\n const response = await apiClient.get(API_ENDPOINTS.USER.MESSAGE_LIST, { params });\n return response.data;\n } catch (error: any) {\n console.error(\"Fetch messages failed:\", error);\n throw error;\n }\n};\n\nexport const fetchPinnedMessages = async (conversationId: string) => {\n try {\n const response = await apiClient.get(API_ENDPOINTS.USER.PINNED_MESSAGE(conversationId));\n return response.data;\n } catch (error: any) {\n console.error(\"Fetch pinned messages failed:\", error);\n throw error;\n }\n};\n\nexport const fetchStarredMessages = async (conversationId: string) => {\n try {\n const response = await apiClient.get(API_ENDPOINTS.USER.STARRED_MESSAGE(conversationId));\n return response.data;\n } catch (error: any) {\n console.error(\"Fetch starred messages failed:\", error);\n throw error;\n }\n};\n\nexport const createGroup = async (name: string, description: string, members: string[], creatorId: string) => {\n try {\n const response = await apiClient.post(API_ENDPOINTS.GROUP.CREATE, {\n groupName: name,\n groupDescription: description,\n participants: members,\n creator: creatorId\n });\n return response.data;\n } catch (error: any) {\n console.error(\"Create group failed:\", error);\n throw error;\n }\n};\n\nexport const fetchConversationInfo = async (conversationId: string) => {\n try {\n const response = await apiClient.get(API_ENDPOINTS.GROUP.GET_CONVERSATION_INFO(conversationId));\n return response.data;\n } catch (error: any) {\n console.error(\"Fetch conversation info failed:\", error);\n throw error;\n }\n};\n\nexport const updateConversation = async (data: any) => {\n try {\n const response = await apiClient.patch(API_ENDPOINTS.GROUP.UPDATE_CONVERSATION, data);\n return response.data;\n } catch (error: any) {\n console.error(\"Update conversation failed:\", error);\n throw error;\n }\n};\n\nexport const updateGroupInformation = async (data: any) => {\n try {\n const response = await apiClient.patch(API_ENDPOINTS.GROUP.UPDATE_INFORMATION, data);\n return response.data;\n } catch (error: any) {\n console.error(\"Update group information failed:\", error);\n throw error;\n }\n};\n\nexport const addRemoveGroupMembers = async (data: { conversationId: string, participants: string[], type: 'add' | 'remove' }) => {\n try {\n const response = await apiClient.patch(API_ENDPOINTS.GROUP.ADD_REMOVE_MEMBERS, data);\n return response.data;\n } catch (error: any) {\n console.error(\"Add/Remove group members failed:\", error);\n throw error;\n }\n};\n\nexport const addRemoveGroupAdmins = async (data: { conversationId: string, groupAdmins: string[], type: 'add' | 'remove' }) => {\n try {\n const response = await apiClient.patch(API_ENDPOINTS.GROUP.ADD_REMOVE_ADMINS, data);\n return response.data;\n } catch (error: any) {\n console.error(\"Add/Remove group admins failed:\", error);\n throw error;\n }\n};\n\nexport const searchMessages = async (\n conversationId: string,\n search: string,\n limit: number = 20,\n cursor?: string | null\n) => {\n try {\n const params: Record<string, string | number> = { conversationId, search, limit };\n if (cursor) {\n params.cursor = cursor;\n }\n\n const response = await apiClient.get(API_ENDPOINTS.GROUP.SEARCH_MESSAGES, { params });\n return response.data;\n } catch (error: any) {\n console.error(\"Search messages failed:\", error);\n throw error;\n }\n};\n\nexport const searchMessagesContext = async (messageId: string) => {\n try {\n const response = await apiClient.get(API_ENDPOINTS.GROUP.SEARCH_MESSAGES_CONTEXT(messageId));\n return response.data;\n } catch (error: any) {\n console.error(\"Search messages context failed:\", error);\n throw error;\n }\n};\n\nexport const blockUnblockUser = async (data: { userId: string, type: 'block' | 'unblock' }) => {\n try {\n const response = await apiClient.patch(API_ENDPOINTS.GROUP.BLOCK_UNBLOCK_USER, data);\n return response.data;\n } catch (error: any) {\n console.error(\"Block/Unblock user failed:\", error);\n throw error;\n }\n};\n\nexport default apiClient;\n","type PendingForward = {\n targets: string[];\n source?: string;\n};\n\nconst pendingForwards = new Map<string, PendingForward>();\nlet lastPendingMessageId: string | null = null;\n\nexport const setPendingForward = (messageId: string, meta: PendingForward) => {\n if (!messageId) return;\n const key = String(messageId);\n pendingForwards.set(key, meta);\n lastPendingMessageId = key;\n};\n\nexport const takePendingForward = (messageId: string): PendingForward | undefined => {\n if (!messageId) return undefined;\n const key = String(messageId);\n const meta = pendingForwards.get(key);\n pendingForwards.delete(key);\n if (lastPendingMessageId === key) lastPendingMessageId = null;\n return meta;\n};\n\nexport const takeMostRecentPendingForward = (): PendingForward | undefined => {\n if (!lastPendingMessageId) return undefined;\n return takePendingForward(lastPendingMessageId);\n};\n\nexport const peekPendingForward = (messageId: string): PendingForward | undefined => {\n if (!messageId) return undefined;\n return pendingForwards.get(String(messageId));\n};\n\nexport const peekMostRecentPendingForward = (): PendingForward | undefined => {\n if (!lastPendingMessageId) return undefined;\n return pendingForwards.get(lastPendingMessageId);\n};\n\nexport const getLastPendingForwardMessageId = (): string | null => lastPendingMessageId;\n\nexport const clearPendingForward = (messageId?: string) => {\n if (messageId) {\n const key = String(messageId);\n pendingForwards.delete(key);\n if (lastPendingMessageId === key) lastPendingMessageId = null;\n return;\n }\n pendingForwards.clear();\n lastPendingMessageId = null;\n};\n","import { extractMessageData, findConversationIdByMessageId, incrementUnreadCount, isGroupConversation } from '../helpers/store.helpers';\n\nexport const handleReceivedDM = (set: any, get: any, lastDM: any) => {\n const { conversationId, messageId } = extractMessageData(lastDM);\n const loggedUserDetails = get().loggedUserDetails;\n const tempId = lastDM.tempId;\n const isFromSelf = loggedUserDetails && String(lastDM.sender?._id || lastDM.sender) === String(loggedUserDetails._id);\n const activeConversationId = get().activeConversationId;\n const isOpenConversation = conversationId && String(conversationId) === String(activeConversationId);\n\n const messageWithStatus = { ...lastDM, status: lastDM.status || 'sent' };\n\n set((state: any) => {\n const nextMessagesByConversation = { ...state.messagesByConversation };\n const newPendingActions = { ...state.messagePendingActions };\n\n if (conversationId) {\n const current = nextMessagesByConversation[conversationId] || [];\n\n let matchedId = messageId;\n if (tempId && state.messagePendingActions[tempId]) {\n matchedId = tempId;\n }\n\n const exists = current.some((m: any) => String(m._id || m.id) === String(messageId));\n\n if (matchedId && (matchedId === tempId)) {\n nextMessagesByConversation[conversationId] = current.map((m: any) =>\n String(m.id || m._id) === String(matchedId)\n ? { ...m, _id: messageId, id: messageId, status: messageWithStatus.status }\n : m\n );\n delete newPendingActions[matchedId];\n } else if (!exists) {\n nextMessagesByConversation[conversationId] = [...current, messageWithStatus];\n }\n }\n\n const nextConversations = state.conversations.map((c: any) => {\n if (String(c._id) !== String(conversationId)) return c;\n\n return {\n ...c,\n lastMessage: messageWithStatus,\n unreadCount: !isFromSelf && !isOpenConversation\n ? incrementUnreadCount(c.unreadCount)\n : c.unreadCount,\n };\n });\n\n return {\n lastDM: { ...messageWithStatus, isGroup: false },\n messagesByConversation: nextMessagesByConversation,\n conversations: nextConversations,\n messagePendingActions: newPendingActions\n };\n });\n\n if (\n !isFromSelf &&\n isOpenConversation &&\n conversationId &&\n loggedUserDetails?._id\n ) {\n const targetConv = get().conversations.find(\n (c: any) => String(c._id) === String(conversationId)\n );\n if (!isGroupConversation(targetConv)) {\n const senderId = String(lastDM.sender?._id || lastDM.sender || \"\");\n get().emitMarkAsRead({\n conversationId: String(conversationId),\n sender: String(loggedUserDetails._id),\n receiver: senderId,\n });\n }\n }\n};\n\nexport const handleEditDM = (set: any, get: any, payload: any) => {\n const { messageId, content, conversationId } = extractMessageData(payload);\n if (!messageId) return;\n\n set((state: any) => {\n // More robust lookup: Payload CID > find in messagesByConversation > find in conversations lastMessage\n let searchConversationId = conversationId;\n if (!searchConversationId) {\n searchConversationId = findConversationIdByMessageId(state.messagesByConversation, messageId);\n }\n if (!searchConversationId) {\n searchConversationId = state.conversations.find((c: any) =>\n String(c.lastMessage?._id || c.lastMessage?.id) === String(messageId)\n )?._id;\n }\n\n const normalizedEditPayload = { ...payload, messageId, content, conversationId: searchConversationId, _v: Date.now() };\n const newPendingActions = { ...state.messagePendingActions };\n if (newPendingActions[messageId]) {\n delete newPendingActions[messageId];\n }\n\n if (searchConversationId) {\n const messages = state.messagesByConversation[searchConversationId] || [];\n const index = messages.findIndex((m: any) => String(m._id || m.id) === String(messageId));\n\n if (index !== -1) {\n const newMessages = [...messages];\n newMessages[index] = { ...newMessages[index], ...normalizedEditPayload, isEdited: true };\n return {\n lastEditDM: normalizedEditPayload,\n messagesByConversation: { ...state.messagesByConversation, [searchConversationId]: newMessages },\n messagePendingActions: newPendingActions\n };\n }\n }\n\n // If not found in store messages, still trigger lastEditDM so useChatSync can catch it in localMessages\n return { lastEditDM: normalizedEditPayload, messagePendingActions: newPendingActions };\n });\n};\n\nexport const handleDeleteDM = (set: any, get: any, payload: any, type: 'me' | 'everyone') => {\n const { messageId, conversationId } = extractMessageData(payload);\n if (!messageId) return;\n set((state: any) => {\n const searchConversationId = conversationId || findConversationIdByMessageId(state.messagesByConversation, messageId);\n let updatedConversations = state.conversations;\n if (searchConversationId) {\n updatedConversations = state.conversations.map((c: any) => {\n if (String(c._id) === String(searchConversationId) && String(c.lastMessage?._id || c.lastMessage?.id) === String(messageId)) {\n return { ...c, lastMessage: type === 'me' ? { ...c.lastMessage, content: '' } : { ...c.lastMessage, isDeletedForEveryone: true, content: 'This message has been deleted' } };\n }\n return c;\n });\n }\n\n const messages = searchConversationId ? state.messagesByConversation[searchConversationId] || [] : [];\n let nextMessagesByConversation = state.messagesByConversation;\n if (searchConversationId) {\n if (type === 'me') {\n nextMessagesByConversation = { ...state.messagesByConversation, [searchConversationId]: messages.filter((m: any) => String(m._id || m.id) !== String(messageId)) };\n } else {\n nextMessagesByConversation = {\n ...state.messagesByConversation,\n [searchConversationId]: messages.map((m: any) => String(m._id || m.id) === String(messageId) ? { ...m, isDeletedForEveryone: true, content: '' } : m)\n };\n }\n }\n\n const newPendingActions = { ...state.messagePendingActions };\n if (newPendingActions[messageId]) {\n delete newPendingActions[messageId];\n }\n\n return {\n lastDeleteDM: { ...payload, deleteType: type },\n deletedForMeIds: type === 'me' && !state.deletedForMeIds.includes(messageId) ? [...state.deletedForMeIds, messageId] : state.deletedForMeIds,\n messagesByConversation: nextMessagesByConversation,\n conversations: updatedConversations,\n messagePendingActions: newPendingActions\n };\n });\n};\n","import { extractMessageData, incrementUnreadCount, isGroupConversation } from '../helpers/store.helpers';\nimport { getLastPendingForwardMessageId, peekPendingForward, clearPendingForward } from '../forwardPending.store';\n\nexport const handleReceivedGroupMessage = (set: any, get: any, lastDM: any) => {\n const { conversationId, messageId } = extractMessageData(lastDM);\n const loggedUserDetails = get().loggedUserDetails;\n const tempId = lastDM.tempId;\n const activeConversationId = get().activeConversationId;\n const isOpenConversation = conversationId && String(conversationId) === String(activeConversationId);\n const isFromSelf = loggedUserDetails && String(lastDM.sender?._id || lastDM.sender) === String(loggedUserDetails._id);\n\n const maybeClearForwardPending = () => {\n const pendingId = getLastPendingForwardMessageId();\n if (!pendingId) return;\n\n const pending = peekPendingForward(pendingId);\n const hitsTarget = pending?.targets?.some(\n (t) => String(t) === String(conversationId)\n );\n const isForwarded = !!(lastDM.isForwarded || lastDM.forwarded);\n\n if (hitsTarget || (isFromSelf && isForwarded)) {\n set((state: any) => {\n if (!state.messagePendingActions[pendingId]) return state;\n const newPendingActions = { ...state.messagePendingActions };\n delete newPendingActions[pendingId];\n return { messagePendingActions: newPendingActions };\n });\n clearPendingForward(pendingId);\n }\n };\n\n maybeClearForwardPending();\n\n // 1. Handle own message reflection (Single Tick / Confirmation)\n if (isFromSelf) {\n set((state: any) => {\n const nextMessagesByConversation = { ...state.messagesByConversation };\n const newPendingActions = { ...state.messagePendingActions };\n let matchedTempId = tempId;\n\n if (conversationId) {\n const current = nextMessagesByConversation[conversationId] || [];\n\n if (!matchedTempId) {\n const optimisticMsg = current.find((m: any) =>\n String(m._id || '').startsWith('temp-') &&\n m.content === lastDM.content &&\n Math.abs(new Date(m.timestamp || m.createdAt).getTime() - new Date(lastDM.createdAt).getTime()) < 60000\n );\n if (optimisticMsg) matchedTempId = optimisticMsg.id;\n }\n\n const messageExists = current.some((m: any) => String(m._id || m.id) === String(messageId));\n if (!messageExists) {\n nextMessagesByConversation[conversationId] = [...current, {\n ...lastDM,\n _id: messageId,\n id: messageId,\n status: (lastDM.status || 'sent') as any\n }];\n } else {\n nextMessagesByConversation[conversationId] = current.map((m: any) =>\n String(m._id || m.id) === String(messageId)\n ? { ...m, status: (lastDM.status || 'sent') as any }\n : m\n );\n }\n\n if (matchedTempId) {\n delete newPendingActions[matchedTempId];\n nextMessagesByConversation[conversationId] = nextMessagesByConversation[conversationId].map((m: any) =>\n String(m.id || m._id) === String(matchedTempId)\n ? { ...m, _id: messageId, id: messageId, status: (lastDM.status || 'sent') as any }\n : m\n );\n }\n }\n\n const nextConversations = state.conversations.map((c: any) => {\n if (String(c._id) === String(conversationId)) {\n return { ...c, lastMessage: { ...lastDM, status: lastDM.status || 'sent' } };\n }\n return c;\n });\n return {\n lastDM: { ...lastDM, isGroup: true },\n messagePendingActions: newPendingActions,\n messagesByConversation: nextMessagesByConversation,\n conversations: nextConversations\n };\n });\n\n if (conversationId) {\n get().fetchConversationInfo(conversationId);\n }\n return;\n }\n\n // 2. Handle messages from others (Receiving)\n set((state: any) => {\n const nextMessagesByConversation = { ...state.messagesByConversation };\n if (conversationId) {\n const current = nextMessagesByConversation[conversationId] || [];\n const exists = current.some((m: any) => String(m._id || m.id) === String(lastDM._id || lastDM.id));\n if (!exists) {\n nextMessagesByConversation[conversationId] = [...current, lastDM];\n }\n }\n\n const nextConversations = state.conversations.map((c: any) => {\n if (String(c._id) !== String(conversationId)) return c;\n\n return {\n ...c,\n lastMessage: lastDM,\n unreadCount: isOpenConversation\n ? 0\n : incrementUnreadCount(c.unreadCount),\n };\n });\n\n return { lastDM: { ...lastDM, isGroup: true }, messagesByConversation: nextMessagesByConversation, conversations: nextConversations };\n });\n\n if (conversationId) {\n get().fetchConversationInfo(conversationId);\n\n const targetConv = get().conversations.find(\n (c: any) => String(c._id) === String(conversationId)\n );\n const isGroupChat = isGroupConversation(targetConv);\n\n if (loggedUserDetails?._id && messageId && isGroupChat) {\n get().emitGroupMessageDelivered({\n conversationId,\n messageId,\n userId: loggedUserDetails._id\n });\n }\n\n if (isOpenConversation && loggedUserDetails?._id && isGroupChat) {\n get().emitGroupMarkRead({\n conversationId,\n userId: loggedUserDetails._id,\n });\n }\n }\n};\n","import { findConversationIdByMessageId, normalizeId } from '../helpers/store.helpers';\n\nconst normalizeGroupReactionEntry = (r: any) => {\n if (!r) return null;\n const reaction = r.reaction;\n const addedBy = r.addedBy || r.sender || r.userId;\n return {\n ...r,\n reaction,\n addedBy,\n sender: r.sender || addedBy\n };\n};\n\nconst mergeReactionLists = (existing: any[], incoming: any[]) => {\n const a = (existing || []).map(normalizeGroupReactionEntry).filter(Boolean);\n const b = (incoming || []).map(normalizeGroupReactionEntry).filter(Boolean);\n\n const map = new Map<string, any>();\n [...a, ...b].forEach((r: any) => {\n const key = `${String(r.reaction)}::${normalizeId(r.addedBy || r.sender)}`;\n map.set(key, r);\n });\n\n return Array.from(map.values());\n};\n\nexport const handleGroupReactionAddReceive = (set: any, get: any, payload: any) => {\n const messageId = payload.messageId || payload._id;\n const conversationId = payload.conversationId;\n\n if (!messageId) return;\n\n set((state: any) => {\n const cid = conversationId || findConversationIdByMessageId(state.messagesByConversation, messageId);\n if (!cid) return state;\n\n const messages = state.messagesByConversation[cid] || [];\n const idx = messages.findIndex((m: any) => String(m._id || m.id) === String(messageId));\n if (idx === -1) return state;\n\n const nextMessages = [...messages];\n const currentMsg = { ...nextMessages[idx] };\n\n if (Array.isArray(payload.reactions)) {\n \n currentMsg.reactions = mergeReactionLists(currentMsg.reactions || [], payload.reactions);\n } else {\n const incoming = normalizeGroupReactionEntry(payload);\n if (!incoming?.reaction) return state;\n\n const incomingAdderId = normalizeId(incoming.addedBy);\n const currentReactions = (currentMsg.reactions || []).map(normalizeGroupReactionEntry).filter(Boolean);\n\n const exists = currentReactions.some((r: any) =>\n r.reaction === incoming.reaction && normalizeId(r.addedBy || r.sender) === incomingAdderId\n );\n\n currentMsg.reactions = exists ? currentReactions : [...currentReactions, incoming];\n }\n\n nextMessages[idx] = currentMsg;\n\n return {\n lastReactionUpdate: { ...payload, messageId, action: 'add', _v: Date.now() },\n messagesByConversation: { ...state.messagesByConversation, [cid]: nextMessages }\n };\n });\n};\n\nexport const handleGroupReactionRemoveReceive = (set: any, get: any, payload: any) => {\n const messageId = payload.messageId || payload._id;\n const conversationId = payload.conversationId;\n\n if (!messageId) return;\n\n set((state: any) => {\n const cid = conversationId || findConversationIdByMessageId(state.messagesByConversation, messageId);\n if (!cid) return state;\n\n const messages = state.messagesByConversation[cid] || [];\n const idx = messages.findIndex((m: any) => String(m._id || m.id) === String(messageId));\n if (idx === -1) return state;\n\n const nextMessages = [...messages];\n const currentMsg = { ...nextMessages[idx] };\n\n const reaction = payload.reaction;\n const removedBy = payload.sender || payload.addedBy || payload.userId;\n\n if (reaction && removedBy) {\n const removedById = normalizeId(removedBy);\n const currentReactions = (currentMsg.reactions || []).map(normalizeGroupReactionEntry).filter(Boolean);\n currentMsg.reactions = currentReactions.filter((r: any) =>\n !(r.reaction === reaction && normalizeId(r.addedBy || r.sender) === removedById)\n );\n } else if (Array.isArray(payload.reactions) && payload.reactions.length > 0) {\n \n currentMsg.reactions = payload.reactions.map(normalizeGroupReactionEntry).filter(Boolean);\n }\n\n nextMessages[idx] = currentMsg;\n\n return {\n lastReactionUpdate: { ...payload, messageId, action: 'remove', _v: Date.now() },\n messagesByConversation: { ...state.messagesByConversation, [cid]: nextMessages }\n };\n });\n};\n","import { extractMessageData, findConversationIdByMessageId, normalizeId } from '../helpers/store.helpers';\n\nexport const handlePinUpdate = (set: any, get: any, payload: any) => {\n // If the backend returns the full list of pinned messages\n if (payload.pinnedMessage && Array.isArray(payload.pinnedMessage)) {\n const { conversationId, pinnedMessage } = payload;\n if (!conversationId) return;\n\n set((state: any) => {\n const messages = state.messagesByConversation[conversationId] || [];\n const pinnedIds = pinnedMessage.map((p: any) => String(p.messageId?._id || p.messageId || p._id));\n\n const newMessagesByConversation = {\n ...state.messagesByConversation,\n [conversationId]: messages.map((m: any) => ({\n ...m,\n isPinned: pinnedIds.includes(String(m._id || m.id))\n }))\n };\n\n const pinnedCount = payload.totalCount ?? pinnedMessage.length;\n\n const newPendingActions = { ...state.messagePendingActions };\n // Clear pin/unpin pending actions for all messages in this conversation\n messages.forEach((m: any) => {\n const mid = String(m._id || m.id);\n if (newPendingActions[mid] && (newPendingActions[mid].includes('pin') || newPendingActions[mid].includes('unpin'))) {\n delete newPendingActions[mid];\n }\n });\n\n return {\n lastPinUpdate: payload,\n messagesByConversation: newMessagesByConversation,\n pinnedMessagesByConversation: {\n ...state.pinnedMessagesByConversation,\n [conversationId]: pinnedMessage\n },\n conversations: state.conversations.map((c: any) =>\n String(c._id) === String(conversationId) ? { ...c, pinnedCount } : c\n ),\n liveConversationCounts: {\n ...state.liveConversationCounts,\n [conversationId]: {\n ...state.liveConversationCounts[conversationId],\n pinnedCount: pinnedCount\n }\n },\n messagePendingActions: newPendingActions\n };\n });\n return;\n }\n\n // Fallback for previous single-element logic\n const { messageId, conversationId, isPinned } = extractMessageData(payload);\n if (!messageId || !conversationId) return;\n\n set((state: any) => {\n const sid = conversationId || findConversationIdByMessageId(state.messagesByConversation, messageId);\n if (!sid) return state;\n\n const messages = state.messagesByConversation[sid] || [];\n const index = messages.findIndex((m: any) => String(m._id || m.id) === String(messageId));\n\n let newMessagesByConversation = state.messagesByConversation;\n const msg = index !== -1 ? messages[index] : null;\n\n // Determine if we are actually changing the pinned state\n const wasPinned = msg ? !!msg.isPinned : false;\n\n if (index !== -1) {\n const newMessages = [...messages];\n newMessages[index] = { ...newMessages[index], isPinned };\n newMessagesByConversation = { ...state.messagesByConversation, [sid]: newMessages };\n }\n\n const newPinnedByConv = { ...state.pinnedMessagesByConversation };\n if (isPinned) {\n const currentPinned = newPinnedByConv[sid] || [];\n if (!currentPinned.some((m: any) => String(m.messageId?._id || m.messageId?.id || m._id || m.id) === String(messageId))) {\n // For optimal drawer rendering, use the full message object if found.\n const fullMsg = msg ? { ...msg, isPinned: true } : payload;\n newPinnedByConv[sid] = [...currentPinned, fullMsg];\n }\n } else {\n newPinnedByConv[sid] = (newPinnedByConv[sid] || []).filter(\n (m: any) => String(m.messageId?._id || m.messageId?.id || m._id || m.id) !== String(messageId)\n );\n }\n\n const conversation = get().conversations?.find((c: any) => String(c._id) === String(sid));\n const existingCount = state.liveConversationCounts[sid]?.pinnedCount ?? conversation?.pinnedCount ?? 0;\n let pinnedCount = existingCount;\n\n if (isPinned && !wasPinned) {\n pinnedCount = existingCount + 1;\n } else if (!isPinned && wasPinned) {\n pinnedCount = Math.max(0, existingCount - 1);\n }\n\n if (payload.totalCount !== undefined) {\n pinnedCount = payload.totalCount;\n }\n\n const newPendingActions = { ...state.messagePendingActions };\n if (newPendingActions[messageId]) {\n delete newPendingActions[messageId];\n }\n\n return {\n lastPinUpdate: payload,\n messagesByConversation: newMessagesByConversation,\n pinnedMessagesByConversation: newPinnedByConv,\n conversations: state.conversations.map((c: any) =>\n String(c._id) === String(sid) ? { ...c, pinnedCount } : c\n ),\n liveConversationCounts: {\n ...state.liveConversationCounts,\n [sid]: {\n ...state.liveConversationCounts[sid],\n pinnedCount: pinnedCount\n }\n },\n messagePendingActions: newPendingActions\n };\n });\n};\n\nexport const handleStarUpdate = (set: any, get: any, payload: any) => {\n // If backend returns { messageId, starredBy } directly\n if (payload.starredBy && Array.isArray(payload.starredBy)) {\n const { messageId } = extractMessageData(payload);\n const { starredBy } = payload;\n if (!messageId) return;\n\n set((state: any) => {\n const sid = payload.conversationId || findConversationIdByMessageId(state.messagesByConversation, messageId);\n\n const newPendingActions = { ...state.messagePendingActions };\n if (newPendingActions[messageId]) {\n delete newPendingActions[messageId];\n }\n\n if (!sid) {\n return { lastStarUpdate: payload, messagePendingActions: newPendingActions };\n }\n\n // Make loggedUserId check absolutely bulletproof\n const loggedUserId = String(get().loggedUserDetails?._id || state.loggedUserDetails?._id || \"\");\n\n // If loggedUserId is blank for some reason, just check if starredBy is not empty.\n // Also strictly compare both as strings.\n const isStarred = starredBy.some((id: any) => String(id?._id || id) === loggedUserId)\n || (loggedUserId === \"\" && starredBy.length > 0);\n\n const messages = state.messagesByConversation[sid] || [];\n const index = messages.findIndex((m: any) => String(m._id || m.id) === String(messageId));\n\n let newMessagesByConversation = state.messagesByConversation;\n if (index !== -1) {\n const newMessages = [...messages];\n newMessages[index] = { ...newMessages[index], isStarred, starredBy };\n newMessagesByConversation = { ...state.messagesByConversation, [sid]: newMessages };\n }\n\n const newStarredByConv = { ...state.starredMessagesByConversation };\n const currentStarred = newStarredByConv[sid] || [];\n const exists = currentStarred.some((m: any) => String(m.messageId?._id || m.messageId || m._id || m.id) === String(messageId));\n\n const conversation = get().conversations?.find((c: any) => String(c._id) === String(sid));\n const existingCount = state.liveConversationCounts[sid]?.starredCount ?? conversation?.starredCount ?? 0;\n let starredCount = existingCount;\n\n if (isStarred && !exists) {\n // For optimal drawer rendering, use the full message object if found.\n const fullMessage = index !== -1 ? newMessagesByConversation[sid][index] : { ...payload, _id: messageId };\n newStarredByConv[sid] = [...currentStarred, fullMessage];\n starredCount = existingCount + 1;\n } else if (!isStarred && exists) {\n newStarredByConv[sid] = currentStarred.filter((m: any) => String(m.messageId?._id || m.messageId || m._id || m.id) !== String(messageId));\n starredCount = Math.max(0, existingCount - 1);\n }\n\n if (payload.totalCount !== undefined) {\n starredCount = payload.totalCount;\n }\n\n return {\n lastStarUpdate: payload,\n messagesByConversation: newMessagesByConversation,\n starredMessagesByConversation: newStarredByConv,\n conversations: state.conversations.map((c: any) =>\n String(c._id) === String(sid) ? { ...c, starredCount } : c\n ),\n liveConversationCounts: {\n ...state.liveConversationCounts,\n [sid]: {\n ...state.liveConversationCounts[sid],\n starredCount: starredCount\n }\n },\n messagePendingActions: newPendingActions\n };\n });\n return;\n }\n\n // Fallback for previous single-element logic\n const { messageId, isStarred, conversationId } = extractMessageData(payload);\n if (!messageId) return;\n\n set((state: any) => {\n const sid = conversationId || findConversationIdByMessageId(state.messagesByConversation, messageId);\n if (!sid) return { lastStarUpdate: payload };\n\n const messages = state.messagesByConversation[sid] || [];\n const index = messages.findIndex((m: any) => String(m._id || m.id) === String(messageId));\n\n let newMessagesByConversation = state.messagesByConversation;\n const msg = index !== -1 ? messages[index] : null;\n\n // Determine if we are actually changing the star state\n const wasStarred = msg ? !!msg.isStarred : false;\n\n if (index !== -1) {\n const newMessages = [...messages];\n newMessages[index] = { ...newMessages[index], isStarred };\n newMessagesByConversation = { ...state.messagesByConversation, [sid]: newMessages };\n }\n\n const newStarredByConv = { ...state.starredMessagesByConversation };\n if (isStarred) {\n const currentStarred = newStarredByConv[sid] || [];\n if (!currentStarred.some((m: any) => String(m?._id || m?.id || m.messageId?._id || m.messageId?.id) === String(messageId))) {\n const fullMsg = msg ? { ...msg, isStarred: true } : payload;\n newStarredByConv[sid] = [...currentStarred, fullMsg];\n }\n } else {\n newStarredByConv[sid] = (newStarredByConv[sid] || []).filter(\n (m: any) => String(m?._id || m?.id || m.messageId?._id || m.messageId?.id) !== String(messageId)\n );\n }\n\n const conversation = get().conversations?.find((c: any) => String(c._id) === String(sid));\n const existingCount = state.liveConversationCounts[sid]?.starredCount ?? conversation?.starredCount ?? 0;\n let starredCount = existingCount;\n\n if (isStarred && !wasStarred) {\n starredCount = existingCount + 1;\n } else if (!isStarred && wasStarred) {\n starredCount = Math.max(0, existingCount - 1);\n }\n\n if (payload.totalCount !== undefined) {\n starredCount = payload.totalCount;\n }\n\n const newPendingActions = { ...state.messagePendingActions };\n if (newPendingActions[messageId]) {\n delete newPendingActions[messageId];\n }\n\n return {\n lastStarUpdate: payload,\n messagesByConversation: newMessagesByConversation,\n starredMessagesByConversation: newStarredByConv,\n conversations: state.conversations.map((c: any) =>\n String(c._id) === String(sid) ? { ...c, starredCount } : c\n ),\n liveConversationCounts: {\n ...state.liveConversationCounts,\n [sid]: {\n ...state.liveConversationCounts[sid],\n starredCount: starredCount\n }\n },\n messagePendingActions: newPendingActions\n };\n });\n};\n\nexport const updateMessageReactions = (currentReactions: any[], payload: any, action?: 'add' | 'remove') => {\n // 1. If payload contains a full reactions array, use it (canonical from server)\n if (payload.reactions && Array.isArray(payload.reactions)) {\n return payload.reactions;\n }\n\n // 2. Otherwise handle incremental updates (reaction + sender)\n const { reaction, sender } = payload;\n if (!reaction) return currentReactions;\n\n const senderId = normalizeId(sender);\n const reactions = [...(currentReactions || [])];\n\n if (action === 'add') {\n const withoutUser = reactions.filter(\n (r) => normalizeId(r.sender || r.addedBy) !== senderId\n );\n withoutUser.push({\n reaction,\n sender: sender,\n addedBy: sender,\n addedAt: new Date().toISOString()\n });\n return withoutUser;\n } else if (action === 'remove') {\n return reactions.filter(r =>\n !(r.reaction === reaction && normalizeId(r.sender || r.addedBy) === senderId)\n );\n }\n\n return reactions;\n};\n\nexport const handleReactionChange = (set: any, get: any, payload: any, action: 'add' | 'remove') => {\n const { messageId, conversationId, reaction, sender } = payload;\n if (!messageId || !reaction) return;\n\n set((state: any) => {\n const searchConversationId = conversationId || findConversationIdByMessageId(state.messagesByConversation, messageId);\n if (!searchConversationId) return state;\n\n const messages = state.messagesByConversation[searchConversationId] || [];\n const index = messages.findIndex((m: any) => String(m._id || m.id) === String(messageId));\n\n if (index !== -1) {\n const newMessages = [...messages];\n const msg = { ...newMessages[index], reactions: [...(newMessages[index].reactions || [])] };\n\n if (action === 'add') {\n const senderId = String(sender?._id || sender);\n const withoutUser = msg.reactions.filter(\n (r: any) => String(r.addedBy?._id || r.addedBy || r.sender?._id || r.sender) !== senderId\n );\n withoutUser.push({ reaction, sender });\n msg.reactions = withoutUser;\n } else {\n msg.reactions = msg.reactions.filter((r: any) => !(r.reaction === reaction && String(r.sender?._id || r.sender) === String(sender?._id || sender)));\n }\n newMessages[index] = msg;\n return {\n lastReactionUpdate: { ...payload, action, _v: Date.now() },\n messagesByConversation: { ...state.messagesByConversation, [searchConversationId]: newMessages }\n };\n }\n return { lastReactionUpdate: { ...payload, action, _v: Date.now() } };\n });\n};\n","import socketService from \"../../services/socket.service\";\n\nexport const emitGroupMessageSend = (set: any, get: any, payload: any) => {\n const tempId = payload.tempId || `temp-${Date.now()}`;\n \n // Add to pending actions for optimistic UI\n set((state: any) => ({ \n messagePendingActions: { \n ...state.messagePendingActions, \n [tempId]: ['send'] \n } \n }));\n\n // Emit the group message\n socketService.emitGroupMessageSend({ ...payload, tempId });\n\n // Remove immediate conversation_update - let backend handle it after message is processed\n};\n","import { StateCreator } from 'zustand';\nimport socketService from '../../services/socket.service';\nimport { SOCKET_EVENTS } from '../../constants/socket.events.constants';\nimport { extractMessageData, findConversationIdByMessageId, incrementUnreadCount, normalizeUnreadCount, emptyMessagesMetadata, isGroupConversation, resolveIsGroupFromPayload, mergeLastMessage, syncConversationLastMessage, getLatestMessageFromList } from '../helpers/store.helpers';\n\nimport { fetchUsers, fetchConversations, fetchMessages, fetchPinnedMessages, fetchStarredMessages, fetchConversationInfo, updateConversation, updateGroupInformation, addRemoveGroupMembers, addRemoveGroupAdmins, searchMessagesContext } from '../../services/api.service';\nimport { setPendingForward, peekPendingForward, peekMostRecentPendingForward, clearPendingForward, getLastPendingForwardMessageId } from '../forwardPending.store';\nimport { AppStoreState, SocketState } from '../types/store.types';\n\n// Logic Handlers\nimport { handleReceivedDM, handleEditDM, handleDeleteDM } from '../handlers/message.handlers';\nimport { handleReceivedGroupMessage } from '../handlers/group.handlers';\nimport { handleGroupReactionAddReceive, handleGroupReactionRemoveReceive } from '../handlers/group.reaction.handlers';\nimport { handlePinUpdate, handleStarUpdate } from '../handlers/interaction.handlers';\n\nconst safelyExtractArray = (res: any): any[] => {\n if (!res) return [];\n if (Array.isArray(res)) return res;\n if (Array.isArray(res.list)) return res.list;\n if (Array.isArray(res.data)) return res.data;\n if (Array.isArray(res.users)) return res.users;\n if (Array.isArray(res.conversations)) return res.conversations;\n if (Array.isArray(res.messages)) return res.messages;\n if (res.data && Array.isArray(res.data.list)) return res.data.list;\n if (res.data && Array.isArray(res.data.messages)) return res.data.messages;\n if (res.data && Array.isArray(res.data.users)) return res.data.users;\n if (res.data && Array.isArray(res.data.conversations)) return res.data.conversations;\n if (res.data && Array.isArray(res.data.data)) return res.data.data;\n if (res.data && Array.isArray(res.data.records)) return res.data.records;\n if (Array.isArray(res.result)) return res.result;\n return [];\n};\n\nconst clearForwardPendingActions = (set: any, ...messageIds: (string | undefined | null)[]) => {\n const originalPendingId = getLastPendingForwardMessageId();\n const ids = new Set(\n [originalPendingId, ...messageIds].filter(Boolean).map(String)\n );\n\n set((state: any) => {\n const newPendingActions = { ...state.messagePendingActions };\n ids.forEach((id) => {\n if (newPendingActions[id]) delete newPendingActions[id];\n });\n return Object.keys(newPendingActions).length === Object.keys(state.messagePendingActions).length\n ? state\n : { messagePendingActions: newPendingActions };\n });\n\n if (originalPendingId) clearPendingForward(originalPendingId);\n else clearPendingForward();\n};\n\nexport const createSocketSlice: StateCreator<AppStoreState, [], [], SocketState> = (set, get) => ({\n status: \"idle\",\n socketId: null,\n error: null,\n onlineUsers: [],\n allUsers: [],\n conversations: [],\n messagesByConversation: {},\n isFetchingAllUsers: false,\n isFetchingConversations: false,\n isFetchingMessages: false,\n isFetchingMessagesByConv: {},\n isFetchingInfo: {},\n conversationsPage: 1,\n conversationsHasMore: true,\n lastConversationsFetchKey: null as string | null,\n sidebarConversationsSearchKey: null as string | null,\n lastDM: null,\n lastEditDM: null,\n lastDeleteDM: null,\n lastPinUpdate: null,\n lastStarUpdate: null,\n lastReactionUpdate: null,\n lastStatusUpdate: null,\n lastDMMarkRead: null,\n deletedForMeIds: [],\n typingUsers: {},\n pinnedMessagesByConversation: {},\n starredMessagesByConversation: {},\n messagePendingActions: {},\n messagesMetadata: {},\n liveConversationCounts: {},\n isClearingChat: {},\n isDeletingConversation: {},\n conversationInfos: {},\n isSearchActive: false,\n searchedMessageId: null,\n activeConversationId: null,\n appError: null,\n composerDisabledReason: null,\n rateLimitResetAt: 0,\n\n activeChannel: null,\n setActiveChannel: (channel) => {\n set((state: any) => {\n const current = state.activeChannel;\n if (!channel && !current) return state;\n if (!channel) {\n return { activeChannel: null, activeConversationId: null };\n }\n\n const nextConversationId = channel.conversationId\n ? String(channel.conversationId)\n : null;\n\n if (current &&\n String(current.id) === String(channel.id) &&\n String(current.conversationId || \"\") === String(channel.conversationId || \"\") &&\n (current.pinnedCount ?? 0) === (channel.pinnedCount ?? 0) &&\n (current.starredCount ?? 0) === (channel.starredCount ?? 0) &&\n !!current.isLeft === !!channel.isLeft &&\n !!current.isBlocked === !!channel.isBlocked &&\n !!current.isGroup === !!channel.isGroup &&\n (current.name || \"\") === (channel.name || \"\") &&\n (current.image || \"\") === (channel.image || \"\") &&\n String(state.activeConversationId ?? \"\") === String(nextConversationId ?? \"\")\n ) {\n return state;\n }\n\n const target = nextConversationId\n ? state.conversations.find((c: any) => String(c._id) === String(nextConversationId))\n : null;\n const unreadAlreadyZero = !target?.unreadCount;\n\n return {\n activeChannel: channel,\n activeConversationId: nextConversationId,\n conversations: nextConversationId && !unreadAlreadyZero\n ? state.conversations.map((c: any) =>\n String(c._id) === String(nextConversationId)\n ? { ...c, unreadCount: 0 }\n : c\n )\n : state.conversations,\n };\n });\n },\n\n setActiveConversationId: (conversationId) => {\n set((state: any) => {\n const nextId = conversationId ?? null;\n if (String(state.activeConversationId ?? \"\") === String(nextId ?? \"\")) {\n return state;\n }\n\n if (!nextId) {\n return { activeConversationId: null };\n }\n\n const target = state.conversations.find((c: any) => String(c._id) === String(nextId));\n const unreadAlreadyZero = !target?.unreadCount;\n\n return {\n activeConversationId: nextId,\n conversations: unreadAlreadyZero\n ? state.conversations\n : state.conversations.map((c: any) =>\n String(c._id) === String(nextId)\n ? { ...c, unreadCount: 0 }\n : c\n ),\n };\n });\n },\n\n handleAppError: (message) => {\n const lower = message.toLowerCase();\n let type: import('../types/store.types').AppErrorState['type'] = 'generic';\n\n if (lower.includes('not a participant')) {\n type = 'participant';\n } else if (lower.includes('only group admins can send')) {\n type = 'permission';\n set({ composerDisabledReason: message });\n } else if (lower.includes('editing messages is disabled')) {\n type = 'edit';\n } else if (lower.includes('rate limit')) {\n type = 'rate_limit';\n }\n\n set({ appError: { message, type }, error: message, status: 'error' });\n\n if (type === 'participant') {\n set({ activeConversationId: null });\n }\n },\n\n clearAppError: () => set({ appError: null, composerDisabledReason: null, error: null }),\n\n setRateLimitResetAt: (resetAt) => set({ rateLimitResetAt: resetAt }),\n\n // Connection\n connectRequested: (config) => {\n set({ status: \"connecting\" });\n socketService.connect(config);\n },\n disconnectRequested: () => {\n socketService.disconnect();\n set({ status: \"disconnected\", socketId: null });\n },\n setConnecting: () => set({ status: \"connecting\" }),\n setConnected: ({ socketId }) => set({ status: \"connected\", socketId, error: null }),\n setDisconnected: () => set({ status: \"disconnected\", socketId: null }),\n setError: (error) => set({ status: \"error\", error }),\n\n // Users\n setOnlineUsers: (onlineUsers) => set({ onlineUsers }),\n fetchAllUsers: async (force = false) => {\n if (get().isFetchingAllUsers && !force) return;\n set({ isFetchingAllUsers: true });\n try {\n const response = await fetchUsers();\n const users = safelyExtractArray(response);\n set({ allUsers: users, isFetchingAllUsers: false });\n } catch (err) {\n set({ isFetchingAllUsers: false });\n }\n },\n emitGetOnlineUsers: () => socketService.emit(\"get_online_users\", {}),\n\n fetchConversationInfo: async (conversationId) => {\n if (!conversationId) return;\n\n const state = get() as any;\n if (state.isFetchingInfo?.[conversationId]) {\n await new Promise((resolve) => {\n const interval = setInterval(() => {\n if (!get().isFetchingInfo?.[conversationId]) {\n clearInterval(interval);\n resolve(undefined);\n }\n }, 50);\n setTimeout(() => {\n clearInterval(interval);\n resolve(undefined);\n }, 5000);\n });\n if (get().conversationInfos?.[conversationId]) return;\n }\n\n set((state) => ({\n isFetchingInfo: { ...(state.isFetchingInfo || {}), [conversationId]: true }\n }));\n\n try {\n const response = await fetchConversationInfo(conversationId);\n const raw =\n response?.data?.conversation ||\n response?.data?.data ||\n response?.conversation ||\n response?.data ||\n response;\n if (raw && (response?.success !== false)) {\n const normalized = {\n ...raw,\n _id: raw._id || raw.id || conversationId,\n createdAt: raw.createdAt || raw.created_at || raw.updatedAt || raw.updated_at,\n };\n set((state) => ({\n conversationInfos: { ...state.conversationInfos, [conversationId]: normalized }\n }));\n }\n } catch (error) {\n console.error(\"fetchConversationInfo failed:\", error);\n } finally {\n set((state) => {\n const isFetchingInfo = { ...(state.isFetchingInfo || {}) };\n delete isFetchingInfo[conversationId];\n return { isFetchingInfo };\n });\n }\n },\n\n updateGroupPermissions: async (conversationId, permissions) => {\n try {\n const response = await updateConversation({\n conversationId,\n groupPermissions: permissions\n });\n if (response.success) {\n // Refresh info\n await get().fetchConversationInfo(conversationId);\n // Notify other participants via socket\n get().emitConversationUpdate({ conversationId });\n }\n } catch (error) {\n console.error(\"updateGroupPermissions failed:\", error);\n }\n },\n\n updateGroupDetails: async (conversationId, details) => {\n try {\n const response = await updateGroupInformation({\n conversationId,\n ...details\n });\n if (response.success) {\n // Refresh info\n await get().fetchConversationInfo(conversationId);\n // Also refresh conversations list to update sidebar cache\n await get().fetchConversations(20, 1);\n // Notify other participants via socket\n get().emitConversationUpdate({ conversationId });\n }\n } catch (error) {\n console.error(\"updateGroupDetails failed:\", error);\n }\n },\n\n manageGroupMembers: async (payload) => {\n try {\n const response = await addRemoveGroupMembers(payload);\n if (response.success) {\n // Refresh info\n await get().fetchConversationInfo(payload.conversationId);\n // Notify other participants via socket\n get().emitConversationUpdate({ conversationId: payload.conversationId });\n }\n } catch (error) {\n console.error(\"manageGroupMembers failed:\", error);\n }\n },\n\n manageGroupAdmins: async (payload) => {\n try {\n const response = await addRemoveGroupAdmins(payload);\n if (response.success) {\n // Refresh info\n await get().fetchConversationInfo(payload.conversationId);\n // Notify other participants via socket\n get().emitConversationUpdate({ conversationId: payload.conversationId });\n }\n } catch (error) {\n console.error(\"manageGroupAdmins failed:\", error);\n }\n },\n\n // Messages Reception\n receivedDM: (lastDM) => handleReceivedDM(set, get, lastDM),\n receivedGroupMessage: (lastDM) => handleReceivedGroupMessage(set, get, lastDM),\n receivedEditDM: (payload) => handleEditDM(set, get, payload),\n receivedDeleteForMe: (payload) => handleDeleteDM(set, get, payload, 'me'),\n receivedDeleteForEveryone: (payload) => handleDeleteDM(set, get, payload, 'everyone'),\n receivedDmClearChat: (payload: { conversationId: string }) => {\n const { conversationId } = payload;\n if (!conversationId) return;\n\n set((state: any) => {\n const nextMessagesByConversation = { ...state.messagesByConversation };\n nextMessagesByConversation[conversationId] = [];\n\n const nextConversations = state.conversations.map((c: any) => c);\n\n // Keep isClearingChat: true while we re-fetch messages\n // This ensures the loader stays open until data is actually fresh from API\n const nextIsClearingChat = { ...state.isClearingChat, [conversationId]: true };\n\n return {\n messagesByConversation: nextMessagesByConversation,\n messagesMetadata: {\n ...state.messagesMetadata,\n [conversationId]: emptyMessagesMetadata()\n },\n conversations: nextConversations,\n isClearingChat: nextIsClearingChat\n };\n });\n\n // Re-fetch messages from API to ensure we are in sync with cleared state\n get().fetchMessages(conversationId).finally(() => {\n set((state: any) => {\n const nextIsClearingChat = { ...state.isClearingChat };\n delete nextIsClearingChat[conversationId];\n return { isClearingChat: nextIsClearingChat };\n });\n });\n },\n receivedGroupClearChat: (payload: { conversationId: string }) => {\n const { conversationId } = payload;\n if (!conversationId) return;\n\n set((state: any) => {\n const nextMessagesByConversation = { ...state.messagesByConversation };\n nextMessagesByConversation[conversationId] = [];\n\n const nextConversations = state.conversations.map((c: any) => c);\n\n const nextIsClearingChat = { ...state.isClearingChat, [conversationId]: true };\n\n return {\n messagesByConversation: nextMessagesByConversation,\n messagesMetadata: {\n ...state.messagesMetadata,\n [conversationId]: emptyMessagesMetadata()\n },\n conversations: nextConversations,\n isClearingChat: nextIsClearingChat\n };\n });\n\n get().fetchMessages(conversationId).finally(() => {\n set((state: any) => {\n const nextIsClearingChat = { ...state.isClearingChat };\n delete nextIsClearingChat[conversationId];\n return { isClearingChat: nextIsClearingChat };\n });\n });\n },\n receivedDmDeleteConversation: (payload: { conversationId: string }) => {\n const { conversationId } = payload;\n if (!conversationId) return;\n\n set((state: any) => ({\n isDeletingConversation: { ...state.isDeletingConversation, [conversationId]: true }\n }));\n\n get().fetchConversations(20, 1).finally(() => {\n set((state: any) => {\n const nextIsDeletingConversation = { ...state.isDeletingConversation };\n delete nextIsDeletingConversation[conversationId];\n \n const nextMessagesByConversation = { ...state.messagesByConversation };\n const nextMessagesMetadata = { ...state.messagesMetadata };\n delete nextMessagesByConversation[conversationId];\n delete nextMessagesMetadata[conversationId];\n\n return { \n isDeletingConversation: nextIsDeletingConversation,\n messagesByConversation: nextMessagesByConversation,\n messagesMetadata: nextMessagesMetadata\n };\n });\n });\n },\n receivedGroupDeleteConversation: (payload: { conversationId: string }) => {\n const { conversationId } = payload;\n if (!conversationId) return;\n\n set((state: any) => ({\n isDeletingConversation: { ...state.isDeletingConversation, [conversationId]: true }\n }));\n\n get().fetchConversations(20, 1).finally(() => {\n set((state: any) => {\n const nextIsDeletingConversation = { ...state.isDeletingConversation };\n delete nextIsDeletingConversation[conversationId];\n \n const nextMessagesByConversation = { ...state.messagesByConversation };\n const nextMessagesMetadata = { ...state.messagesMetadata };\n delete nextMessagesByConversation[conversationId];\n delete nextMessagesMetadata[conversationId];\n\n return { \n isDeletingConversation: nextIsDeletingConversation,\n messagesByConversation: nextMessagesByConversation,\n messagesMetadata: nextMessagesMetadata\n };\n });\n });\n },\n receivedReactionAdd: (payload) => handleGroupReactionAddReceive(set, get, payload),\n receivedReactionRemove: (payload) => handleGroupReactionRemoveReceive(set, get, payload),\n receivedGroupReactionAdd: (payload) => handleGroupReactionAddReceive(set, get, payload),\n receivedGroupReactionRemove: (payload) => handleGroupReactionRemoveReceive(set, get, payload),\n receivedPinUpdate: (payload) => handlePinUpdate(set, get, payload),\n receivedStarUpdate: (payload) => handleStarUpdate(set, get, payload),\n\n // Status Updates\n receivedStatusUpdate: (payload) => {\n let { conversationId, messageId, status } = extractMessageData(payload);\n\n if (!messageId) return;\n\n // Store the status update for useChatSync hook\n set({ lastStatusUpdate: payload });\n\n // Resolve conversationId if missing\n if (!conversationId) {\n conversationId = findConversationIdByMessageId(get().messagesByConversation, messageId);\n }\n\n if (!conversationId) return;\n\n set((state: any) => {\n const messages = state.messagesByConversation[conversationId] || [];\n return {\n messagesByConversation: {\n ...state.messagesByConversation,\n [conversationId]: messages.map((m: any) => String(m._id || m.id) === String(messageId) ? { ...m, status } : m)\n },\n conversations: state.conversations.map((c: any) =>\n (String(c._id) === String(conversationId) && c.lastMessage && String(c.lastMessage._id || c.lastMessage.id) === String(messageId))\n ? { ...c, lastMessage: { ...c.lastMessage, status } }\n : c\n )\n };\n });\n },\n\n receivedGroupStatusUpdate: (payload) => {\n let { messageId, status, conversationId } = extractMessageData(payload);\n\n // Sync with useChatSync hook\n set({ lastStatusUpdate: payload });\n\n // CASE 1: Specific Message Update\n if (messageId) {\n if (!conversationId) {\n conversationId = findConversationIdByMessageId(get().messagesByConversation, messageId);\n }\n\n if (!conversationId) return;\n\n set((state: any) => {\n const messages = state.messagesByConversation[conversationId] || [];\n return {\n messagesByConversation: {\n ...state.messagesByConversation,\n [conversationId]: messages.map((m: any) => \n String(m._id || m.id) === String(messageId) ? { ...m, status } : m\n )\n },\n conversations: state.conversations.map((c: any) =>\n (String(c._id) === String(conversationId) && c.lastMessage && String(c.lastMessage._id || c.lastMessage.id) === String(messageId))\n ? { ...c, lastMessage: { ...c.lastMessage, status } }\n : c\n )\n };\n });\n return;\n }\n\n // CASE 2: conversationId only (Whole conversation read update)\n if (conversationId && status === 'read') {\n set((state: any) => {\n const loggedUserDetails = get().loggedUserDetails || state.loggedUserDetails;\n const myId = loggedUserDetails?._id || loggedUserDetails?.id;\n\n const messages = state.messagesByConversation[conversationId] || [];\n // Mark all MY (sender) messages as read in this conversation\n const nextMessages = messages.map((m: any) => \n String(m.sender?._id || m.sender) === String(myId) ? { ...m, status: 'read' as const } : m\n );\n\n const nextConversations = state.conversations.map((c: any) => {\n if (String(c._id) !== String(conversationId)) return c;\n \n let nextLastMessage = c.lastMessage;\n if (nextLastMessage && String(nextLastMessage.sender?._id || nextLastMessage.sender) === String(myId)) {\n nextLastMessage = { ...nextLastMessage, status: 'read' };\n }\n\n return { ...c, lastMessage: nextLastMessage };\n });\n\n return {\n messagesByConversation: {\n ...state.messagesByConversation,\n [conversationId]: nextMessages\n },\n conversations: nextConversations\n };\n });\n }\n },\n\n receivedGroupLeave: (payload: any) => {\n const { conversationId, success } = payload;\n if (!success || !conversationId) return;\n\n set((state: any) => ({\n conversations: state.conversations.map((c: any) =>\n String(c._id) === String(conversationId) ? { ...c, isLeft: true } : c\n )\n }));\n },\n\n toggleBlock: (userId, isBlocked) => {\n set((state: any) => ({\n conversations: state.conversations.map((c: any) => {\n const otherParticipant = c.participants.find((p: any) => String(p._id || p) === String(userId));\n if (otherParticipant && !c.isGroup) {\n return { ...c, isBlocked };\n }\n return c;\n })\n }));\n },\n\n\n\n\n // Fetching\n // Fetching\n fetchConversations: async (limit = 10, page = 1, search = \"\", force = false) => {\n const fetchKey = `${limit}:${page}:${search}`;\n const state = get();\n if (state.isFetchingConversations && !force) return;\n if (!force && page === 1 && (state as any).lastConversationsFetchKey === fetchKey && state.conversations.length > 0) {\n return;\n }\n\n set({ isFetchingConversations: true, lastConversationsFetchKey: fetchKey } as any);\n try {\n const response = await fetchConversations(limit, page, search);\n const data = safelyExtractArray(response);\n set((state) => ({\n conversations: page === 1\n ? data.map((incoming: any) => {\n const existing = state.conversations.find(\n (conversation: any) => String(conversation._id) === String(incoming._id)\n );\n return {\n ...incoming,\n lastMessage: mergeLastMessage(existing?.lastMessage, incoming.lastMessage),\n };\n })\n : [...state.conversations, ...data],\n conversationsHasMore: data.length === limit,\n conversationsPage: page,\n isFetchingConversations: false\n }));\n } catch (err) {\n set({ isFetchingConversations: false });\n }\n},\n resetConversations: () =>\n set({\n conversations: [],\n conversationsPage: 1,\n conversationsHasMore: true,\n lastConversationsFetchKey: null,\n sidebarConversationsSearchKey: null,\n }),\n\n fetchMessages: async (conversationId, limit = 20, cursor?: string | null) => {\n const isInitialLoad = cursor === undefined || cursor === null;\n const state = get();\n const meta = state.messagesMetadata[conversationId];\n\n if (state.isFetchingMessages) {\n if (isInitialLoad && meta?.isFirstPage) return;\n if (!isInitialLoad && meta?.nextCursor === cursor) return;\n }\n\n set({ isFetchingMessages: true });\n try {\n const response = await fetchMessages(\n conversationId,\n limit,\n isInitialLoad ? undefined : cursor\n );\n const data = safelyExtractArray(response);\n const pagination = response.data?.pagination;\n\n set((state: any) => {\n const existing = state.messagesByConversation[conversationId] || [];\n const merged = isInitialLoad ? data : [...data, ...existing];\n\n const uniqueMap = new Map();\n merged.forEach((m: any) => {\n const id = String(m._id || m.id);\n if (id) uniqueMap.set(id, m);\n });\n const unique = Array.from(uniqueMap.values());\n\n return {\n messagesByConversation: { ...state.messagesByConversation, [conversationId]: unique },\n messagesMetadata: {\n ...state.messagesMetadata,\n [conversationId]: {\n nextCursor: pagination?.nextCursor ?? null,\n hasMore: pagination?.hasNextPage ?? false,\n isFirstPage: isInitialLoad,\n },\n },\n conversations: isInitialLoad\n ? syncConversationLastMessage(state.conversations, conversationId, unique)\n : state.conversations,\n isFetchingMessages: false,\n };\n });\n } catch (err: any) {\n console.error(\"fetchMessages failed:\", err);\n if (err?.response?.status === 429) {\n const resetHeader = err.response.headers?.[\"ratelimit-reset\"];\n const resetSeconds = resetHeader ? parseInt(String(resetHeader), 10) : 120;\n get().setRateLimitResetAt(Date.now() + resetSeconds * 1000);\n get().handleAppError(\"Rate limit exceeded, slow down\");\n }\n set({ isFetchingMessages: false });\n }\n },\n\n fetchPinnedMessages: async (conversationId) => {\n const response = await fetchPinnedMessages(conversationId);\n const data = safelyExtractArray(response);\n set((state) => ({ pinnedMessagesByConversation: { ...state.pinnedMessagesByConversation, [conversationId]: data } }));\n },\n fetchStarredMessages: async (conversationId) => {\n const response = await fetchStarredMessages(conversationId);\n const data = safelyExtractArray(response);\n set((state) => ({ starredMessagesByConversation: { ...state.starredMessagesByConversation, [conversationId]: data } }));\n },\n\n // Emissions\n emitDmSend: (payload) => {\n const tempId = payload.tempId || `temp-${Date.now()}`;\n set((state) => ({ messagePendingActions: { ...state.messagePendingActions, [tempId]: ['send'] } }));\n socketService.emit(\"dm_send\", { ...payload, tempId });\n socketService.emit(\"conversation_update\", { conversationId: payload.conversationId });\n },\n emitDmEdit: (payload) => {\n set((state) => ({ messagePendingActions: { ...state.messagePendingActions, [payload.messageId]: ['edit'] } }));\n socketService.emit(\"dm_edit\", payload);\n },\n emitDmDelete: (payload) => {\n set((state) => ({ messagePendingActions: { ...state.messagePendingActions, [payload.messageId]: ['delete'] } }));\n socketService.emit(\"dm_delete\", payload);\n },\n emitDmClearChat: (payload) => {\n set((state) => ({ isClearingChat: { ...state.isClearingChat, [payload.conversationId]: true } }));\n socketService.emitDmClearChat(payload);\n },\n emitGroupClearChat: (payload) => {\n set((state) => ({ isClearingChat: { ...state.isClearingChat, [payload.conversationId]: true } }));\n socketService.emitGroupClearChat(payload);\n },\n emitDmDeleteConversation: (payload) => {\n set((state) => ({ isDeletingConversation: { ...state.isDeletingConversation, [payload.conversationId]: true } }));\n socketService.emitDmDeleteConversation(payload);\n },\n emitGroupDeleteConversation: (payload) => {\n set((state) => ({ isDeletingConversation: { ...state.isDeletingConversation, [payload.conversationId]: true } }));\n socketService.emitGroupDeleteConversation(payload);\n },\n emitDmReactionAdd: (p) => {\n handleGroupReactionAddReceive(set, get, p);\n socketService.emit(\"dm_reaction_add\", p);\n },\n emitDmReactionRemove: (p) => {\n handleGroupReactionRemoveReceive(set, get, p);\n socketService.emit(\"dm_reaction_remove\", p);\n },\n emitDmPin: (p) => {\n handlePinUpdate(set, get, { ...p, isPinned: true });\n set((state) => ({ messagePendingActions: { ...state.messagePendingActions, [p.messageId]: ['pin'] } }));\n socketService.emit(\"dm_pin\", p);\n },\n emitDmUnpin: (p) => {\n handlePinUpdate(set, get, { ...p, isPinned: false });\n set((state) => ({ messagePendingActions: { ...state.messagePendingActions, [p.messageId]: ['unpin'] } }));\n socketService.emit(\"dm_unpin\", p);\n },\n emitDmStar: (p) => {\n handleStarUpdate(set, get, { ...p, isStarred: true });\n set((state) => ({ messagePendingActions: { ...state.messagePendingActions, [p.messageId]: ['star'] } }));\n socketService.emit(\"dm_star\", p);\n },\n emitDmUnstar: (p) => {\n handleStarUpdate(set, get, { ...p, isStarred: false });\n set((state) => ({ messagePendingActions: { ...state.messagePendingActions, [p.messageId]: ['unstar'] } }));\n socketService.emit(\"dm_unstar\", p);\n },\n emitDmForward: (p) => {\n const targetConversationId = p.targetConversationIds?.[0];\n\n setPendingForward(p.messageId, {\n targets: p.targetConversationIds || [],\n source: p.sourceConversationId,\n });\n\n set((state) => ({ messagePendingActions: { ...state.messagePendingActions, [p.messageId]: ['forward'] } }));\n socketService.emit(\"dm_forward\", {\n messageId: p.messageId,\n sender: p.sender,\n targetConversationIds: p.targetConversationIds,\n ...(targetConversationId ? { conversationId: String(targetConversationId) } : {}),\n ...(p.receiver ? { receiver: p.receiver } : {}),\n });\n },\n\n // Group Emissions\n emitGroupJoin: (p) => socketService.emitGroupJoin(p),\n emitGroupMessageSend: (payload) => {\n const { emitGroupMessageSend: triggerGroupSend } = require('../actions/group.actions');\n triggerGroupSend(set, get, payload);\n },\n emitGroupTypingStart: (p) => socketService.emitGroupTypingStart(p),\n\n emitGroupTypingStop: (p) => socketService.emitGroupTypingStop(p),\n emitGroupEdit: (p) => socketService.emitGroupEdit(p),\n emitGroupReactionAdd: (p) => {\n // optimistic update (backend group_reaction_*_receive payloads can be partial)\n handleGroupReactionAddReceive(set, get, p);\n socketService.emitGroupReactionAdd(p);\n },\n emitGroupReactionRemove: (p) => {\n // optimistic update (backend group_reaction_*_receive payloads can be partial)\n handleGroupReactionRemoveReceive(set, get, p);\n socketService.emitGroupReactionRemove(p);\n },\n emitGroupMarkRead: (p) => socketService.emitGroupMarkRead(p),\n emitGroupMessageDelivered: (p) => socketService.emit(SOCKET_EVENTS.GROUP_MESSAGE_DELIVERED, p),\n emitGroupDelete: (p) => {\n set((state) => ({ messagePendingActions: { ...state.messagePendingActions, [p.messageId]: ['delete'] } }));\n socketService.emitGroupDelete(p);\n },\n emitGroupPin: (p) => {\n handlePinUpdate(set, get, { ...p, isPinned: true });\n set((state) => ({ messagePendingActions: { ...state.messagePendingActions, [p.messageId]: ['pin'] } }));\n socketService.emitGroupPin(p);\n },\n emitGroupUnpin: (p) => {\n handlePinUpdate(set, get, { ...p, isPinned: false });\n set((state) => ({ messagePendingActions: { ...state.messagePendingActions, [p.messageId]: ['unpin'] } }));\n socketService.emitGroupUnpin(p);\n },\n emitGroupStar: (p) => {\n handleStarUpdate(set, get, { ...p, isStarred: true });\n set((state) => ({ messagePendingActions: { ...state.messagePendingActions, [p.messageId]: ['star'] } }));\n socketService.emitGroupStar(p);\n },\n emitGroupUnstar: (p) => {\n handleStarUpdate(set, get, { ...p, isStarred: false });\n set((state) => ({ messagePendingActions: { ...state.messagePendingActions, [p.messageId]: ['unstar'] } }));\n socketService.emitGroupUnstar(p);\n },\n emitGroupForward: (p) => {\n const targetConversationId = p.targetConversationIds?.[0];\n\n setPendingForward(p.messageId, {\n targets: p.targetConversationIds || [],\n source: p.sourceConversationId,\n });\n\n set((state) => ({ messagePendingActions: { ...state.messagePendingActions, [p.messageId]: ['forward'] } }));\n socketService.emitGroupForward({\n messageId: p.messageId,\n sender: p.sender,\n targetConversationIds: p.targetConversationIds,\n ...(targetConversationId ? { conversationId: String(targetConversationId) } : {}),\n ...(p.sourceConversationId ? { sourceConversationId: String(p.sourceConversationId) } : {}),\n });\n },\n clearForwardPending: (messageId) => {\n clearForwardPendingActions(set, messageId);\n },\n emitConversationUpdate: (p: { conversationId: string }) => socketService.emitConversationUpdate(p),\n emitGroupLeave: (p: { conversationId: string, sender: string }) => socketService.emitGroupLeave(p),\n\n emitTypingStart: (p) => socketService.emit(\"dm_typing_start\", p),\n emitTypingStop: (p) => socketService.emit(\"dm_typing_stop\", p),\n emitMarkAsRead: (p) => socketService.emit(\"dm_mark_read\", p),\n\n receivedDMMarkRead: (payload) => {\n const { conversationId } = payload;\n const readerId = payload.userId || payload.readerId || payload.readBy || payload.sender || payload.senderId;\n if (!conversationId) return;\n\n // Store the mark read event for useChatSync hook\n set({ lastDMMarkRead: payload });\n\n set((state: any) => {\n const messages = state.messagesByConversation[conversationId] || [];\n const loggedUserDetails = get().loggedUserDetails || state.loggedUserDetails;\n const myId = loggedUserDetails?._id || loggedUserDetails?.id;\n\n const isReaderMe = String(readerId) === String(myId);\n\n // In DMs, when someone reads, mark all messages as read for the reader\n const nextMessages = messages.map((m: any) => ({ ...m, status: 'read' as const }));\n\n const nextConversations = state.conversations.map((c: any) => {\n if (String(c._id) !== String(conversationId)) return c;\n\n const nextUnreadCount = isReaderMe ? 0 : normalizeUnreadCount(c.unreadCount);\n\n let nextLastMessage = mergeLastMessage(c.lastMessage, { status: 'read' });\n if (!nextLastMessage?.content && messages.length) {\n nextLastMessage = mergeLastMessage(\n getLatestMessageFromList(messages),\n { status: 'read' }\n );\n }\n\n return { ...c, unreadCount: nextUnreadCount, lastMessage: nextLastMessage };\n });\n\n return {\n messagesByConversation: {\n ...state.messagesByConversation,\n [conversationId]: nextMessages\n },\n conversations: nextConversations\n };\n });\n },\n\n receivedGroupMarkRead: (payload) => {\n const { conversationId } = payload;\n\n const readerId = payload.userId || payload.readerId || payload.sender || payload.senderId;\n if (!conversationId) return;\n\n set({ lastStatusUpdate: { conversationId, status: 'read' } });\n\n set((state: any) => {\n const messages = state.messagesByConversation[conversationId] || [];\n const loggedUserDetails = get().loggedUserDetails || state.loggedUserDetails;\n const myId = loggedUserDetails?._id || loggedUserDetails?.id;\n\n const isReaderMe = String(readerId) === String(myId);\n\n const nextMessages = messages.map((m: any) => {\n if (isReaderMe) return m;\n const senderId = String(m.sender?._id || m.sender);\n if (senderId === String(myId)) {\n return { ...m, status: 'read' as const };\n }\n return m;\n });\n\n const nextConversations = state.conversations.map((c: any) => {\n if (String(c._id) !== String(conversationId)) return c;\n\n const nextUnreadCount = isReaderMe ? 0 : normalizeUnreadCount(c.unreadCount);\n\n let nextLastMessage = c.lastMessage;\n if (\n nextLastMessage &&\n !isReaderMe &&\n String(nextLastMessage.sender?._id || nextLastMessage.sender) === String(myId)\n ) {\n nextLastMessage = { ...nextLastMessage, status: 'read' };\n }\n\n return { ...c, unreadCount: nextUnreadCount, lastMessage: nextLastMessage };\n });\n\n return {\n messagesByConversation: {\n ...state.messagesByConversation,\n [conversationId]: nextMessages\n },\n conversations: nextConversations\n };\n });\n },\n\n receivedMarkRead: (payload) => {\n const { conversationId } = payload;\n const readerId = payload.userId || payload.readerId || payload.sender || payload.senderId;\n if (!conversationId) return;\n set((state: any) => {\n const messages = state.messagesByConversation[conversationId] || [];\n const loggedUserDetails = get().loggedUserDetails || state.loggedUserDetails;\n const myId = loggedUserDetails?._id || loggedUserDetails?.id;\n\n const isReaderMe = String(readerId) === String(myId);\n\n // In groups, a \"read\" event means:\n // - if *I* read: clear *my* unread counter for this conversation (UI count should become 0)\n const nextMessages = messages;\n\n const nextConversations = state.conversations.map((c: any) => {\n if (String(c._id) !== String(conversationId)) return c;\n\n const nextUnreadCount = isReaderMe ? 0 : normalizeUnreadCount(c.unreadCount);\n\n const nextLastMessage = c.lastMessage || null;\n\n return { ...c, unreadCount: nextUnreadCount, lastMessage: nextLastMessage };\n });\n\n return {\n messagesByConversation: {\n ...state.messagesByConversation,\n [conversationId]: nextMessages\n },\n conversations: nextConversations\n };\n });\n },\n\n receivedCountUpdate: (payload) => {\n const { conversationId, pinnedCount, starredCount } = payload;\n if (!conversationId) return;\n set((state: any) => ({\n liveConversationCounts: {\n ...state.liveConversationCounts,\n [conversationId]: { pinnedCount, starredCount }\n },\n conversations: state.conversations.map((c: any) =>\n String(c._id) === String(conversationId)\n ? { ...c, pinnedCount, starredCount }\n : c\n )\n }));\n },\n\n receivedForward: (payload) => {\n const sourceMessageId =\n payload?.messageId ||\n payload?.sourceMessageId ||\n payload?.originalMessageId;\n\n const pendingForward =\n (sourceMessageId ? peekPendingForward(sourceMessageId) : undefined) ||\n peekMostRecentPendingForward();\n\n const forwardedPayload = payload?.message || payload?.forwardedMessage || payload;\n const { messageId: forwardedMessageId, conversationId: messageConversationId } = extractMessageData(forwardedPayload);\n\n clearForwardPendingActions(set, sourceMessageId, forwardedMessageId, payload?.originalMessageId);\n\n const targetFromPayload =\n payload?.targetConversationId ||\n payload?.targetConversationIds?.[0] ||\n forwardedPayload?.targetConversationId ||\n forwardedPayload?.targetConversationIds?.[0];\n\n let resolvedConversationId =\n pendingForward?.targets?.[0] ||\n targetFromPayload ||\n messageConversationId ||\n payload?.conversationId;\n\n if (\n pendingForward?.source &&\n pendingForward?.targets?.[0] &&\n String(resolvedConversationId) === String(pendingForward.source)\n ) {\n resolvedConversationId = pendingForward.targets[0];\n }\n\n const normalized = {\n ...(forwardedPayload?.message || forwardedPayload),\n conversationId: resolvedConversationId,\n isForwarded: true,\n };\n\n if (!resolvedConversationId && !normalized.content && !forwardedMessageId) return;\n\n const targetConversation = get().conversations.find(\n (c: any) => String(c._id) === String(resolvedConversationId)\n );\n const isGroup = isGroupConversation(targetConversation) ||\n resolveIsGroupFromPayload(normalized, get().conversations);\n\n if (isGroup) {\n handleReceivedGroupMessage(set, get, normalized);\n } else {\n handleReceivedDM(set, get, normalized);\n }\n\n if (resolvedConversationId) {\n get().fetchMessages(resolvedConversationId);\n }\n },\n\n // Typing\n setTypingStart: (payload) => {\n const { conversationId } = payload;\n const userId = payload.userId || payload.sender || payload.senderId;\n if (!conversationId || !userId) return;\n\n set((state: any) => {\n const current = state.typingUsers[conversationId] || [];\n if (!current.includes(String(userId))) {\n return { typingUsers: { ...state.typingUsers, [conversationId]: [...current, String(userId)] } };\n }\n return state;\n });\n },\n setTypingStop: (payload) => {\n const { conversationId } = payload;\n const userId = payload.userId || payload.sender || payload.senderId;\n if (!conversationId || !userId) return;\n\n set((state: any) => {\n const current = state.typingUsers[conversationId] || [];\n return {\n typingUsers: {\n ...state.typingUsers,\n [conversationId]: current.filter((id: string) => String(id) !== String(userId))\n }\n };\n });\n },\n\n updateConversation: (updated) => {\n if (!updated) return;\n\n const conversationId = updated._id || updated.conversationId;\n if (!conversationId) return;\n\n set((state: any) => {\n const nextConversationInfos = { ...state.conversationInfos };\n if (nextConversationInfos[conversationId]) {\n nextConversationInfos[conversationId] = {\n ...nextConversationInfos[conversationId],\n ...updated,\n groupPermissions: updated.groupPermissions\n ? { ...nextConversationInfos[conversationId].groupPermissions, ...updated.groupPermissions }\n : nextConversationInfos[conversationId].groupPermissions\n };\n }\n\n const nextConversations = state.conversations.map((c: any) => {\n if (String(c._id) !== String(conversationId)) return c;\n\n return {\n ...c,\n ...updated,\n lastMessage: mergeLastMessage(c.lastMessage, updated.lastMessage),\n // Group conversation_update no longer carries per-user unread; keep local count\n unreadCount: updated.unreadCount !== undefined\n ? normalizeUnreadCount(updated.unreadCount)\n : normalizeUnreadCount(c.unreadCount),\n };\n });\n\n return {\n conversationInfos: nextConversationInfos,\n conversations: nextConversations\n };\n });\n },\n\n\n fetchSearchMessageContext: async (messageId) => {\n set({ isSearchActive: true, searchedMessageId: messageId, isFetchingMessages: true });\n try {\n const response = await searchMessagesContext(messageId);\n const data = response.data?.list || response.data?.messages || response.messages || response.data || [];\n const highlightId = response.data?.highlightMessageId || messageId;\n \n if (data.length > 0) {\n const conversationId = data[0].conversationId;\n if (conversationId) {\n set((state: any) => ({\n searchedMessageId: highlightId,\n messagesByConversation: {\n ...state.messagesByConversation,\n [conversationId]: data\n },\n messagesMetadata: {\n ...state.messagesMetadata,\n [conversationId]: {\n ...emptyMessagesMetadata(),\n hasMore: false,\n }\n },\n isFetchingMessages: false\n }));\n }\n } else {\n set({ isFetchingMessages: false });\n }\n } catch (error) {\n console.error(\"fetchSearchMessageContext failed:\", error);\n set({ isFetchingMessages: false });\n }\n },\n\n setSearchActive: (active) => set({ isSearchActive: active }),\n setSearchedMessageId: (messageId) => set({ searchedMessageId: messageId }),\n\n markDeletedForMe: (messageId) => set((state: any) => ({ deletedForMeIds: [...state.deletedForMeIds, messageId] })),\n});\n","import { create } from 'zustand';\nimport { persist } from 'zustand/middleware';\nimport { AppStoreState } from './types/store.types';\nimport { createAuthSlice } from './slices/auth.slice';\nimport { createSocketSlice } from './slices/socket.slice';\n\nexport const useStore = create<AppStoreState>()(\n persist(\n (set, get, store) => ({\n ...createAuthSlice(set, get, store),\n ...createSocketSlice(set, get, store),\n }),\n {\n name: 'chat-ui-storage',\n partialize: (state) => ({\n loggedUserDetails: state.loggedUserDetails,\n isAuthenticate: state.isAuthenticate,\n accessToken: state.accessToken,\n tenantId: state.tenantId,\n isTenant: state.isTenant,\n }),\n }\n )\n);\n\nexport default useStore;\n","import React, { createContext, useContext } from 'react';\nimport { IChannel, IMessage } from '../types/chats.types';\nimport { useStore } from '../store/useStore';\nimport { setChatClientId, setChatAccessToken, setChatBaseURL, clientUserLogin } from '../services/api.service';\nimport socketService from '../services/socket.service';\nimport { TooltipProvider } from '../ui/tooltip';\nimport { resolveUserFromAccessToken } from '../lib/utils';\nimport { useChatSync } from '../hooks/useChatSync';\n\nexport interface UIConfig {\n showSidebarAvatar?: boolean;\n sidebarAvatarColor?: string;\n showChannelDetails?: boolean; // if false, only show channel name\n messageDateFormat?: (date: string) => string;\n}\n\ninterface ChatContextValue {\n activeChannel: IChannel | null;\n setActiveChannel: (channel: IChannel | null) => void;\n onSendMessage?: (content: string, attachments: any[]) => void;\n client?: any;\n theme?: string;\n uiConfig: UIConfig;\n themeColor: string;\n channelsData?: IChannel[];\n messagesData?: Record<string, IMessage[]>;\n}\n\nconst ChatContext = createContext<ChatContextValue | undefined>(undefined);\n\nexport const useChatContext = () => {\n const context = useContext(ChatContext);\n if (!context) {\n throw new Error('useChatContext must be used within a Chat provider');\n }\n return context;\n};\n\nexport interface ChatProps {\n children: React.ReactNode;\n onSendMessage?: (content: string, attachments: any[]) => void;\n client?: { id: string };\n theme?: string;\n uiConfig?: UIConfig;\n themeColor?: string;\n accessToken?: string;\n loggedUserDetails?: any;\n apiUrl?: string;\n socketUrl?: string;\n channelsData?: IChannel[];\n messagesData?: Record<string, IMessage[]>;\n onMessageReceived?: (message: any) => void;\n onSocketConnected?: (socketId: string) => void;\n onSocketError?: (error: string) => void;\n}\n\nexport const Chat = ({\n children,\n onSendMessage,\n client,\n theme = \"light\",\n uiConfig = {\n showSidebarAvatar: true,\n showChannelDetails: true\n },\n themeColor = \"#7494ec\",\n accessToken,\n loggedUserDetails,\n apiUrl = \"http://localhost:5000/api/v1\",\n socketUrl = \"http://localhost:5000\",\n channelsData,\n messagesData,\n onMessageReceived,\n onSocketConnected,\n onSocketError\n}: ChatProps) => {\n const setSession = useStore((s) => s.setSession);\n const setSessionReady = useStore((s) => s.setSessionReady);\n const isSessionReady = useStore((s) => s.isSessionReady);\n const setActiveChannel = useStore((s) => s.setActiveChannel);\n const activeChannel = useStore((s) => s.activeChannel);\n const lastDM = useStore((s) => s.lastDM);\n const status = useStore((s) => s.status);\n const error = useStore((s) => s.error);\n\n // Keep real-time message sync active for composable MessageList + MessageInput usage\n useChatSync();\n\n React.useEffect(() => {\n const clientId = client?.id;\n\n const initializeChat = async () => {\n if (!clientId || !loggedUserDetails) return;\n\n setSessionReady(false);\n\n setChatClientId(clientId);\n if (apiUrl) setChatBaseURL(apiUrl);\n\n let currentToken = accessToken || \"\";\n let sessionUser = resolveUserFromAccessToken(currentToken, loggedUserDetails);\n\n // client-user must complete before any list/conversation API calls\n try {\n const loginResponse = await clientUserLogin(sessionUser.name, sessionUser.email);\n const loginData = loginResponse?.data ?? loginResponse;\n const loginToken = loginData?.accessToken || loginResponse?.accessToken || \"\";\n const loginUser = loginData?.user || loginResponse?.user;\n\n if (loginToken) {\n currentToken = loginToken;\n }\n if (loginUser) {\n sessionUser = {\n ...sessionUser,\n ...loginUser,\n _id: loginUser._id || sessionUser._id,\n };\n }\n } catch (error) {\n console.error(\"ChatContext: client-user login failed\", error);\n if (!currentToken) {\n setSessionReady(false);\n return;\n }\n }\n\n if (currentToken) {\n setChatAccessToken(currentToken);\n }\n\n setSession({\n accessToken: currentToken,\n user: sessionUser,\n tenantId: clientId,\n });\n\n const extraHeaders: Record<string, string> = {\n platform: \"web\",\n tenantId: clientId || \"\",\n isTenant: \"true\",\n };\n if (currentToken) {\n extraHeaders.Authorization = `Bearer ${currentToken}`;\n }\n\n const resolvedSocketUrl = (socketUrl || apiUrl || \"\").replace(/\\/api\\/v1\\/?$/, \"\");\n\n socketService.connect({\n url: resolvedSocketUrl,\n options: {\n path: \"/connection\",\n withCredentials: true,\n auth: currentToken ? { accessToken: currentToken } : {},\n query: {\n platform: \"web\",\n tenantId: clientId || \"\",\n isTenant: \"true\",\n },\n extraHeaders,\n transports: [\"websocket\", \"polling\"],\n reconnection: true,\n reconnectionAttempts: Infinity,\n reconnectionDelay: 2000,\n reconnectionDelayMax: 5000,\n timeout: 20000,\n },\n });\n\n setSessionReady(true);\n };\n\n initializeChat();\n\n return () => {\n setSessionReady(false);\n socketService.disconnect();\n };\n }, [client?.id, loggedUserDetails?._id, loggedUserDetails?.email, accessToken, apiUrl, socketUrl, setSession, setSessionReady]);\n\n // Handle External Callbacks\n React.useEffect(() => {\n if (lastDM && onMessageReceived) {\n onMessageReceived(lastDM);\n }\n }, [lastDM, onMessageReceived]);\n\n React.useEffect(() => {\n if (status === \"connected\" && onSocketConnected) {\n const socketId = useStore.getState().socketId;\n if (socketId) onSocketConnected(socketId);\n }\n }, [status, onSocketConnected]);\n\n React.useEffect(() => {\n if (status === \"error\" && error && onSocketError) {\n onSocketError(error);\n }\n }, [status, error, onSocketError]);\n\n const themeStyles = {\n '--chat-theme': themeColor,\n '--chat-theme-5': `${themeColor}0D`,\n '--chat-theme-10': `${themeColor}1A`,\n '--chat-theme-20': `${themeColor}33`,\n '--chat-theme-40': `${themeColor}66`,\n '--chat-theme-60': `${themeColor}99`,\n '--read-tick-color': '#4fb0ff'\n } as React.CSSProperties;\n\n const contextValue = React.useMemo(\n () => ({\n activeChannel,\n setActiveChannel,\n onSendMessage,\n client,\n theme,\n uiConfig,\n themeColor,\n channelsData,\n messagesData,\n }),\n [\n activeChannel,\n setActiveChannel,\n onSendMessage,\n client,\n theme,\n uiConfig,\n themeColor,\n channelsData,\n messagesData,\n ]\n );\n\n return (\n <ChatContext.Provider value={contextValue}>\n <TooltipProvider>\n <div style={themeStyles} className=\"chat-container-root h-full w-full\">\n {isSessionReady ? children : (\n <div className=\"flex h-full items-center justify-center text-gray-400 font-bold\">\n Initializing session...\n </div>\n )}\n </div>\n </TooltipProvider>\n </ChatContext.Provider>\n );\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\nexport function resolveUserFromAccessToken<T extends { _id?: string; name?: string; email?: string }>(\n accessToken: string | undefined,\n fallback: T\n): T {\n if (!accessToken) return fallback;\n\n try {\n const base64 = accessToken.split(\".\")[1];\n if (!base64) return fallback;\n\n const payload = JSON.parse(\n atob(base64.replace(/-/g, \"+\").replace(/_/g, \"/\"))\n ) as { _id?: string; id?: string; name?: string; email?: string };\n\n const id = payload._id || payload.id;\n if (!id) return fallback;\n\n return {\n ...fallback,\n _id: id,\n name: fallback.name || payload.name || \"\",\n email: fallback.email || payload.email || \"\",\n };\n } catch {\n return fallback;\n }\n}\n","\nimport * as React from \"react\"\nimport { Tooltip as TooltipPrimitive } from \"radix-ui\"\nimport { cn } from \"../lib/utils\"\n\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n )\n}\n\nfunction Tooltip({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n}\n\nfunction TooltipTrigger({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n \"bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance\",\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","import { useEffect, useState } from \"react\";\nimport { IMessage, IChannel } from \"../types/chats.types\";\nimport { useSocketStore } from \"../store/useSocketStore\";\nimport { useAuthStore } from \"../store/useAuthStore\";\nimport {\n findConversationById,\n getOtherParticipantId,\n isGroupConversation,\n resolveIsGroupFromPayload,\n} from \"../store/helpers/store.helpers\";\n\nexport const useChatSync = () => {\n const [localMessages, setLocalMessages] = useState<Record<string, IMessage[]>>({});\n\n const lastDM = useSocketStore((s) => s.lastDM);\n const lastEditDM = useSocketStore((s) => s.lastEditDM);\n const lastDeleteDM = useSocketStore((s) => s.lastDeleteDM);\n const lastPinUpdate = useSocketStore((s) => s.lastPinUpdate);\n const lastStarUpdate = useSocketStore((s) => s.lastStarUpdate);\n const lastReactionUpdate = useSocketStore((s) => s.lastReactionUpdate);\n const lastStatusUpdate = useSocketStore((s) => s.lastStatusUpdate);\n const lastDMMarkRead = useSocketStore((s) => s.lastDMMarkRead);\n const conversations = useSocketStore((s) => s.conversations);\n const messagesByConversation = useSocketStore((s) => s.messagesByConversation);\n const messagesMetadata = useSocketStore((s) => s.messagesMetadata);\n const lastDeletedForMe = useSocketStore((s) => (s as any).lastDeleteDM); // Use generic if not in type\n const loggedUserDetails = useAuthStore((s) => s.loggedUserDetails);\n\n // Sync with store message clearance or reset\n useEffect(() => {\n setLocalMessages(prev => {\n const next = { ...prev };\n let changed = false;\n\n Object.keys(messagesByConversation).forEach(cid => {\n const storeMessages = messagesByConversation[cid];\n const meta = messagesMetadata[cid];\n\n // If the store is explicitly empty for this conversation ID, \n // we must also clear our localMessages state for any key that contains messages from this cid\n if (storeMessages?.length === 0 && meta && !meta.hasMore && meta.isFirstPage) {\n Object.keys(next).forEach(key => {\n if (next[key] && next[key].some(m => String(m.conversationId) === String(cid))) {\n next[key] = [];\n changed = true;\n }\n });\n }\n });\n\n return changed ? next : prev;\n });\n }, [messagesByConversation, messagesMetadata]);\n\n // Sync Pin Updates (Real-time flag check)\n useEffect(() => {\n if (lastPinUpdate) {\n const { conversationId, pinnedMessage } = lastPinUpdate;\n const pinnedByMessageId = new Set((pinnedMessage || []).map((p: any) => String(p.messageId)));\n\n setLocalMessages(prev => {\n const next = { ...prev };\n Object.keys(next).forEach(cid => {\n // Update flags for all messages in local state\n next[cid] = next[cid].map(m => {\n const mid = String(m._id || m.id);\n return {\n ...m,\n isPinned: pinnedByMessageId.has(mid)\n };\n });\n });\n return next;\n });\n }\n }, [lastPinUpdate]);\n\n // Sync Star Updates\n useEffect(() => {\n if (lastStarUpdate) {\n const messageId = lastStarUpdate.messageId || lastStarUpdate._id;\n const isStarred = lastStarUpdate.isStarred ?? (Array.isArray(lastStarUpdate.starredBy) && lastStarUpdate.starredBy.length > 0);\n if (!messageId) return;\n const mid = String(messageId);\n setLocalMessages(prev => {\n const next = { ...prev };\n Object.keys(next).forEach(cid => {\n next[cid] = next[cid].map(m =>\n String(m._id || m.id) === mid ? { ...m, isStarred: !!isStarred } : m\n );\n });\n return next;\n });\n }\n }, [lastStarUpdate]);\n // Sync Reaction Updates\n useEffect(() => {\n if (!lastReactionUpdate) return;\n\n const messageId = lastReactionUpdate.messageId || lastReactionUpdate._id;\n if (!messageId) return;\n const mid = String(messageId);\n\n let storeReactions: any[] | undefined;\n for (const msgs of Object.values(messagesByConversation)) {\n const found = msgs.find((m: any) => String(m._id || m.id) === mid);\n if (found) {\n storeReactions = found.reactions;\n break;\n }\n }\n\n setLocalMessages(prev => {\n const next = { ...prev };\n let changed = false;\n\n Object.keys(next).forEach(channelId => {\n const messages = next[channelId];\n const index = messages.findIndex(m => String(m._id || m.id) === mid);\n if (index === -1) return;\n\n const updated = [...messages];\n const msg = { ...updated[index] };\n const { reaction, sender, action, reactions } = lastReactionUpdate;\n\n if (storeReactions) {\n msg.reactions = storeReactions;\n } else if (Array.isArray(reactions)) {\n const existing = msg.reactions || [];\n const merged = new Map<string, any>();\n [...existing, ...reactions].forEach((r: any) => {\n const key = `${r.reaction}::${String(r.addedBy?._id || r.addedBy || r.sender?._id || r.sender)}`;\n merged.set(key, r);\n });\n msg.reactions = action === 'remove' ? reactions : Array.from(merged.values());\n } else if (reaction) {\n msg.reactions = [...(msg.reactions || [])];\n if (action === 'add') {\n const senderId = String(sender?._id || sender);\n msg.reactions = msg.reactions.filter(\n (r: any) => String(r.sender?._id || r.sender || r.addedBy?._id || r.addedBy) !== senderId\n );\n msg.reactions.push({ reaction, sender, addedBy: sender });\n } else {\n msg.reactions = msg.reactions.filter((r: any) =>\n !(r.reaction === reaction && String(r.sender?._id || r.sender || r.addedBy?._id || r.addedBy) === String(sender?._id || sender))\n );\n }\n } else {\n return;\n }\n\n updated[index] = msg;\n next[channelId] = updated;\n changed = true;\n });\n\n return changed ? next : prev;\n });\n }, [lastReactionUpdate, messagesByConversation]);\n\n // Sync Deletions\n useEffect(() => {\n if (lastDeleteDM) {\n const messageId = lastDeleteDM.messageId || lastDeleteDM._id;\n const deleteType: 'me' | 'everyone' = lastDeleteDM.deleteType || 'everyone';\n\n setLocalMessages(prev => {\n const next = { ...prev };\n Object.keys(next).forEach(channelId => {\n if (deleteType === 'me') {\n // Remove message entirely — only visible to the one who deleted\n next[channelId] = next[channelId].filter(\n m => String(m._id || m.id) !== String(messageId)\n );\n } else {\n // Replace content with deleted placeholder for everyone\n next[channelId] = next[channelId].map(m =>\n String(m._id || m.id) === String(messageId)\n ? { ...m, isDeletedForEveryone: true }\n : m\n );\n }\n });\n return next;\n });\n }\n }, [lastDeleteDM]);\n\n // Sync Edits\n useEffect(() => {\n if (lastEditDM) {\n const messageId = lastEditDM.messageId || lastEditDM._id;\n const content = lastEditDM.content;\n if (!messageId) return;\n\n setLocalMessages(prev => {\n const next = { ...prev };\n Object.keys(next).forEach(channelId => {\n const messages = next[channelId];\n const index = messages.findIndex(m => String(m._id || m.id) === String(messageId));\n if (index !== -1) {\n const updated = [...messages];\n updated[index] = { ...updated[index], content, isEdited: true };\n next[channelId] = updated;\n }\n });\n return next;\n });\n }\n }, [lastEditDM]);\n\n // Sync Incoming Messages & Confirmation\n\n const handleMessageUpdate = (key: string, incomingMsg: IMessage, isMe: boolean) => {\n setLocalMessages(prev => {\n const currentMessages = prev[key] || [];\n const incomingId = String(incomingMsg._id || incomingMsg.id || \"\");\n\n if (isMe) {\n const optimisticIndex = currentMessages.findIndex((m) => {\n const mid = String(m._id || m.id || \"\");\n if (incomingId && mid === incomingId) return true;\n const isPending = !m._id || mid.startsWith(\"temp-\");\n if (!isPending) return false;\n return (\n m.content.trim() === incomingMsg.content.trim() &&\n Math.abs(\n new Date(m.timestamp).getTime() - new Date(incomingMsg.timestamp).getTime()\n ) < 120000\n );\n });\n\n if (optimisticIndex !== -1) {\n const newMessages = [...currentMessages];\n newMessages[optimisticIndex] = incomingMsg;\n return { ...prev, [key]: newMessages };\n }\n }\n\n if (\n incomingId &&\n currentMessages.some(\n (m) => String(m._id || m.id) === incomingId || String(m.id) === incomingId\n )\n ) {\n return prev;\n }\n\n return {\n ...prev,\n [key]: [...currentMessages, incomingMsg]\n };\n });\n };\n\n useEffect(() => {\n if (!lastDM) return;\n\n const loggedUserId = loggedUserDetails?._id;\n const isMe = String(lastDM.sender?._id || lastDM.sender) === String(loggedUserId);\n const conversationId = lastDM.conversationId\n ? String(lastDM.conversationId)\n : \"\";\n\n const matchedConversation = findConversationById(conversations, conversationId);\n const isGroup = resolveIsGroupFromPayload(lastDM, conversations);\n\n let storageKey = conversationId;\n if (!storageKey) {\n if (isMe) {\n storageKey = String(lastDM.receiver?._id || lastDM.receiver || \"\");\n } else {\n storageKey = String(lastDM.sender?._id || lastDM.sender || lastDM.fromUserId || \"\");\n }\n if (!storageKey) return;\n }\n\n const channelId = isGroup\n ? storageKey\n : getOtherParticipantId(matchedConversation, loggedUserId) ||\n String(\n isMe\n ? lastDM.receiver?._id || lastDM.receiver\n : lastDM.sender?._id || lastDM.sender || lastDM.fromUserId || \"\"\n ) ||\n storageKey;\n\n const incomingMsg: IMessage = {\n id: String(lastDM._id || lastDM.id || Date.now().toString()),\n _id: lastDM._id,\n content: lastDM.content || lastDM.message?.content || \"\",\n sender: lastDM.sender?.name || lastDM.fromUserId || (isMe ? \"Me\" : \"User\"),\n timestamp: lastDM.createdAt || new Date().toISOString(),\n isOwnMessage: isMe,\n channelId,\n conversationId: conversationId || storageKey,\n replyTo: lastDM.replyTo,\n status: lastDM.status || \"sent\",\n reactions: lastDM.reactions || [],\n };\n\n handleMessageUpdate(storageKey, incomingMsg, isMe);\n }, [lastDM, loggedUserDetails, conversations]);\n\n // Sync Status Updates (for double ticks, etc.)\n useEffect(() => {\n if (lastStatusUpdate) {\n const status = lastStatusUpdate.status;\n const targetId = lastStatusUpdate._id || lastStatusUpdate.messageId;\n const conversationId = lastStatusUpdate.conversationId || lastStatusUpdate.message?.conversationId;\n\n setLocalMessages(prev => {\n const next = { ...prev };\n\n if (targetId) {\n const msgId = String(targetId);\n Object.keys(next).forEach(key => {\n if (conversationId && key !== String(conversationId)) return;\n next[key] = next[key].map(m =>\n String(m._id || m.id) === msgId ? { ...m, status } : m\n );\n });\n } else if (conversationId && status === 'read') {\n const cid = String(conversationId);\n\n if (next[cid]) {\n next[cid] = next[cid].map(m =>\n m.isOwnMessage ? { ...m, status: 'read' } : m\n );\n }\n }\n\n return next;\n });\n }\n }, [lastStatusUpdate, loggedUserDetails]);\n\n // Sync DM Mark Read Updates (for blue ticks, etc.)\n useEffect(() => {\n if (lastDMMarkRead) {\n const { conversationId, readBy, status } = lastDMMarkRead;\n if (!conversationId) return;\n\n // Find the conversation to determine if it's a group or DM\n const currentConversation = conversations.find(c => String(c._id) === String(conversationId));\n const isGroup = isGroupConversation(currentConversation);\n\n // Skip group conversations - they are handled by the separate effect below\n if (isGroup) return;\n\n setLocalMessages(prev => {\n const next = { ...prev };\n\n const conversationKey = String(conversationId);\n\n // Update messages stored by conversationId (for DMs)\n if (next[conversationKey]) {\n // Only update messages that belong to current user (their own messages)\n next[conversationKey] = next[conversationKey].map(m =>\n m.isOwnMessage ? { ...m, status: status || 'read' } : m\n );\n }\n\n // Also update messages that might be stored by channel.id (for compatibility)\n Object.keys(next).forEach(key => {\n if (key !== conversationKey && next[key]) {\n next[key] = next[key].map(m =>\n m.isOwnMessage && m.conversationId === conversationId ? { ...m, status: status || 'read' } : m\n );\n }\n });\n\n return next;\n });\n }\n }, [lastDMMarkRead, conversations]);\n\n return { localMessages, setLocalMessages };\n};\n","import { useStore } from './useStore';\nexport const useAuthStore = useStore;\nexport default useAuthStore;\n","import { useEffect, useState } from 'react'\nimport { useStore } from '../store/useStore'\nimport { IAttachment, IChannel, IMessage } from '../types/chats.types'\nimport { useChatSync } from './useChatSync'\nimport {\n findConversationForChannel,\n getOtherParticipantId,\n isGroupConversation,\n} from '../store/helpers/store.helpers'\n\nexport interface ChatControllerState {\n replyTo: IMessage | null\n forwardMessage: IMessage | null\n isForwardModalOpen: boolean\n searchQuery: string\n debouncedSearch: string\n isCreateModalOpen: boolean\n}\n\nexport const useChatController = () => {\n const activeChannel = useStore((s) => s.activeChannel)\n const setActiveChannel = useStore((s) => s.setActiveChannel)\n const conversationId = useStore((s) => s.activeConversationId)\n const appError = useStore((s) => s.appError)\n const rateLimitResetAt = useStore((s) => s.rateLimitResetAt)\n const emitDmSend = useStore((s) => s.emitDmSend)\n const isFetchingMessages = useStore((s) => s.isFetchingMessages)\n const loggedUserDetails = useStore((s) => s.loggedUserDetails)\n const emitGroupMessageSend = useStore((s) => s.emitGroupMessageSend)\n const conversationInfos = useStore((s) => s.conversationInfos)\n const messagesByConversation = useStore((s) => s.messagesByConversation)\n const conversations = useStore((s) => s.conversations)\n\n const { localMessages, setLocalMessages } = useChatSync()\n const conversationMessages = conversationId\n ? messagesByConversation[conversationId] || []\n : []\n const currentLocalMessages = conversationId\n ? localMessages[conversationId] || []\n : []\n\n const [state, setState] = useState<ChatControllerState>({\n replyTo: null,\n forwardMessage: null,\n isForwardModalOpen: false,\n searchQuery: '',\n debouncedSearch: '',\n isCreateModalOpen: false,\n })\n\n const updateState = (updates: Partial<ChatControllerState>) => {\n setState((prev) => ({ ...prev, ...updates }))\n }\n\n useEffect(() => {\n const handler = setTimeout(() => {\n updateState({ debouncedSearch: state.searchQuery })\n }, 400)\n return () => clearTimeout(handler)\n }, [state.searchQuery])\n\n useEffect(() => {\n if (appError?.type === 'participant' && activeChannel) {\n setActiveChannel(null)\n }\n }, [appError?.type, activeChannel, setActiveChannel])\n\n const handleChannelSelect = (channel: IChannel) => {\n setActiveChannel(channel)\n updateState({ replyTo: null })\n }\n\n const handleSendMessage = (\n content: string,\n attachments: IAttachment[],\n replyTo?: IMessage | null,\n ) => {\n if (!activeChannel || !loggedUserDetails) return\n\n const activeConv = findConversationForChannel(\n activeChannel,\n loggedUserDetails._id,\n conversations,\n )\n const channelIsGroup = !!activeChannel.isGroup\n const isGroup =\n channelIsGroup && (!activeConv || isGroupConversation(activeConv))\n const dmReceiverId =\n getOtherParticipantId(activeConv, loggedUserDetails._id) ||\n String(activeChannel.id)\n\n const tempId = `temp-${Date.now()}`\n const newMessage: IMessage = {\n id: tempId,\n content,\n sender: 'Me',\n timestamp: new Date().toISOString(),\n isOwnMessage: true,\n channelId: isGroup ? String(conversationId) : dmReceiverId,\n conversationId: conversationId || '',\n replyTo: replyTo || undefined,\n attachments: attachments.map((a) => ({\n id: a.id,\n url: a.previewUrl,\n type: a.type,\n name: a.file.name,\n })),\n status: 'sent',\n }\n\n const messageStorageKey = conversationId || activeChannel.id\n setLocalMessages((prev) => ({\n ...prev,\n [messageStorageKey]: [...(prev[messageStorageKey] || []), newMessage],\n }))\n\n const payload = {\n tempId,\n sender: loggedUserDetails._id,\n receiver: isGroup ? undefined : dmReceiverId,\n content: newMessage.content,\n type: 'text',\n conversationId,\n replyTo: replyTo\n ? {\n _id: replyTo._id || replyTo.id,\n content: replyTo.content,\n attachments: replyTo.attachments || [],\n sender: {\n _id:\n (replyTo.sender as any)?._id ||\n (typeof replyTo.sender === 'string'\n ? replyTo.sender\n : ''),\n name: (replyTo.sender as any)?.name || '',\n },\n }\n : undefined,\n }\n\n if (attachments.length === 0) {\n if (isGroup) {\n emitGroupMessageSend(payload)\n } else {\n emitDmSend(payload)\n }\n }\n\n updateState({ replyTo: null })\n }\n\n return {\n activeChannel,\n setActiveChannel,\n conversationId,\n rateLimitResetAt,\n isFetchingMessages,\n loggedUserDetails,\n conversationInfos,\n conversationMessages,\n currentLocalMessages,\n state,\n updateState,\n handleChannelSelect,\n handleSendMessage,\n }\n}\n","export interface ChatLayoutConfig {\n /** Sidebar with profile + conversation list */\n sidebar?: boolean\n /** Logged-in user profile block at top of sidebar */\n loggedUserDetails?: boolean\n /** Conversation list in sidebar */\n channelList?: boolean\n /** Active channel header (name, actions, search) */\n header?: boolean\n /** Scrollable message area */\n messageList?: boolean\n /** Message composer / input box */\n input?: boolean\n /** Forward message modal */\n forwardModal?: boolean\n}\n\nexport const defaultChatLayoutConfig: Required<ChatLayoutConfig> = {\n sidebar: true,\n loggedUserDetails: true,\n channelList: true,\n header: true,\n messageList: true,\n input: true,\n forwardModal: true,\n}\n\nexport const mergeChatLayoutConfig = (\n config?: ChatLayoutConfig,\n): Required<ChatLayoutConfig> => ({\n ...defaultChatLayoutConfig,\n ...config,\n})\n","import * as React from \"react\"\nimport { Avatar as AvatarPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../lib/utils\"\n\n\nfunction Avatar({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Root> & {\n size?: \"default\" | \"sm\" | \"lg\"\n}) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n data-size={size}\n className={cn(\n \"group/avatar relative flex size-8 shrink-0 overflow-hidden rounded-full select-none data-[size=lg]:size-10 data-[size=sm]:size-6\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarImage({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn(\"aspect-square size-full\", className)}\n {...props}\n />\n )\n}\n\nfunction AvatarFallback({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn(\n \"bg-muted text-muted-foreground flex size-full items-center justify-center rounded-full text-sm group-data-[size=sm]/avatar:text-xs\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarBadge({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"avatar-badge\"\n className={cn(\n \"bg-primary text-primary-foreground ring-background absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full ring-2 select-none\",\n \"group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden\",\n \"group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2\",\n \"group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar-group\"\n className={cn(\n \"*:data-[slot=avatar]:ring-background group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarGroupCount({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar-group-count\"\n className={cn(\n \"bg-muted text-muted-foreground ring-background relative flex size-8 shrink-0 items-center justify-center rounded-full text-sm ring-2 group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Avatar,\n AvatarImage,\n AvatarFallback,\n AvatarBadge,\n AvatarGroup,\n AvatarGroupCount,\n}\n","import * as React from \"react\"\n\nimport { cn } from \"../lib/utils\"\n\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"../lib/utils\"\n\n\n\nconst buttonVariants = cva(\n \"inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n xs: \"h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n \"icon-xs\": \"size-6 rounded-md [&_svg:not([class*='size-'])]:size-3\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","import * as React from \"react\"\nimport { XIcon } from \"lucide-react\"\nimport { Dialog as DialogPrimitive } from \"radix-ui\"\nimport { cn } from \"../lib/utils\"\nimport { Button } from \"./button\"\n\n\nfunction Dialog({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 outline-none sm:max-w-lg\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showCloseButton?: boolean\n}) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close asChild>\n <Button variant=\"outline\">Close</Button>\n </DialogPrimitive.Close>\n )}\n </div>\n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n","import React, { useRef, useState, useMemo } from \"react\";\nimport { IUser } from \"../types/auth.types\";\nimport type { IChannel } from \"../types/chats.types\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"../ui/avatar\";\nimport { Search, UserPlus, X, Camera, Users, MessageCircle, Check, ArrowRight } from \"lucide-react\";\nimport { Input } from \"../ui/input\";\nimport { Button } from \"../ui/button\";\nimport {\n Dialog,\n DialogContent,\n DialogTitle,\n DialogTrigger,\n} from \"../ui/dialog\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"../ui/tooltip\";\nimport { cn } from \"../lib/utils\";\nimport { useStore } from \"../store/useStore\";\nimport { createGroup } from \"../services/api.service\";\nimport { isGroupConversation } from \"../store/helpers/store.helpers\";\nimport { useChatContext } from \"./ChatContext\";\n\n\nconst AVATAR_COLORS = [\"bg-[#4a6fa5]\", \"bg-[#3d8b5f]\", \"bg-[#9a7b4f]\", \"bg-[#9b4d5a]\"];\n\nconst getAvatarColor = (id: string) => {\n const hash = String(id).split(\"\").reduce((acc, char) => acc + char.charCodeAt(0), 0);\n return AVATAR_COLORS[hash % AVATAR_COLORS.length];\n};\n\nconst getInitials = (name: string) => {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length >= 2) return `${parts[0][0]}${parts[1][0]}`.toUpperCase();\n return name.slice(0, 2).toUpperCase();\n};\n\nconst formatMemberName = (name: string) =>\n name.charAt(0).toUpperCase() + name.slice(1);\n\ninterface LoggedUserDetailsProps {\n loggedUserDetails?: any;\n onUserSelect?: (channel: IChannel) => void;\n isCreateModalOpen?: boolean;\n setIsCreateModalOpen?: (open: boolean) => void;\n searchQuery?: string;\n setSearchQuery?: (val: string) => void;\n themeColor?: string;\n}\n\nconst LoggedUserDetails = ({\n loggedUserDetails: propsLoggedUserDetails,\n onUserSelect,\n isCreateModalOpen: propsIsCreateModalOpen,\n setIsCreateModalOpen: propsSetIsCreateModalOpen,\n searchQuery: propsSearchQuery,\n setSearchQuery: propsSetSearchQuery,\n themeColor: propsThemeColor,\n}: LoggedUserDetailsProps) => {\n const [internalIsOpen, setInternalIsOpen] = useState(false);\n const [internalSearch, setInternalSearch] = useState(\"\");\n\n const isCreateModalOpen = propsIsCreateModalOpen !== undefined ? propsIsCreateModalOpen : internalIsOpen;\n const setIsCreateModalOpen = propsSetIsCreateModalOpen || setInternalIsOpen;\n const searchQuery = propsSearchQuery !== undefined ? propsSearchQuery : internalSearch;\n const setSearchQuery = propsSetSearchQuery || setInternalSearch;\n\n const storeLoggedUserDetails = useStore((state) => state.loggedUserDetails);\n const effectiveLoggedUser = propsLoggedUserDetails || storeLoggedUserDetails;\n const { uiConfig, themeColor: contextThemeColor } = useChatContext();\n const themeColor = propsThemeColor || contextThemeColor || \"#6366f1\";\n const conversations = useStore((state) => state.conversations);\n const setActiveChannel = useStore((state) => state.setActiveChannel);\n const isSessionReady = useStore((state) => state.isSessionReady);\n const [state, setState] = useState({\n memberSearchQuery: \"\",\n activeTab: \"dm\" as \"dm\" | \"group\",\n groupName: \"\",\n groupDesc: \"\",\n selectedMembers: [] as any[],\n avatarPreview: null as string | null,\n });\n\n const updateState = (updates: Partial<typeof state>) => {\n setState((prev) => ({ ...prev, ...updates }));\n };\n\n const onlineUsersIds = useStore((state) => state.onlineUsers);\n const allUsers = useStore((state) => state.allUsers);\n const isFetchingUsers = useStore((state) => state.isFetchingAllUsers);\n const fetchAllUsers = useStore((state) => state.fetchAllUsers);\n const accessToken = useStore((state) => state.accessToken);\n\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n // Fetch all users for the selection list\n React.useEffect(() => {\n if (isSessionReady && accessToken) {\n fetchAllUsers();\n }\n }, [isSessionReady, accessToken, fetchAllUsers]);\n\n React.useEffect(() => {\n if (isCreateModalOpen && isSessionReady && accessToken) {\n fetchAllUsers(true);\n }\n }, [isCreateModalOpen, isSessionReady, accessToken, fetchAllUsers]);\n\n const memberSource = useMemo(() => {\n const users = Array.isArray(allUsers) ? allUsers : [];\n if (users.length > 0) return users;\n\n const map = new Map<string, any>();\n const safeConversations = Array.isArray(conversations) ? conversations : [];\n\n for (const conv of safeConversations) {\n if (isGroupConversation(conv)) continue;\n\n for (const p of conv.participants || []) {\n const id = String(p._id || p);\n if (!id || id === String(effectiveLoggedUser?._id)) continue;\n\n if (!map.has(id)) {\n map.set(\n id,\n typeof p === \"object\" && p?.name\n ? p\n : { _id: id, name: conv.name || \"User\", email: p?.email || \"\" }\n );\n }\n }\n }\n\n return Array.from(map.values());\n }, [allUsers, conversations, effectiveLoggedUser?._id]);\n\n const filteredMembers = memberSource.filter(m =>\n (String(m.name || '').toLowerCase().includes(state.memberSearchQuery.toLowerCase()) ||\n String(m.email || '').toLowerCase().includes(state.memberSearchQuery.toLowerCase())) &&\n String(m._id) !== String(effectiveLoggedUser?._id)\n );\n\n const user: IUser = {\n _id: effectiveLoggedUser?._id || \"1\",\n name: effectiveLoggedUser?.name ? (effectiveLoggedUser.name.charAt(0).toUpperCase() + effectiveLoggedUser.name.slice(1)) : \"User\",\n email: effectiveLoggedUser?.email || \"user@example.com\",\n role: effectiveLoggedUser?.role || \"user\",\n isActive: effectiveLoggedUser?.isActive ?? true,\n createdAt: effectiveLoggedUser?.createdAt ? new Date(effectiveLoggedUser.createdAt) : new Date(),\n updatedAt: effectiveLoggedUser?.updatedAt ? new Date(effectiveLoggedUser.updatedAt) : new Date(),\n image: effectiveLoggedUser?.image || \"\",\n };\n\n const handleMemberToggle = (member: any) => {\n setState((prev) => {\n const memberId = String(member._id);\n const exists = prev.selectedMembers.some((m) => String(m._id) === memberId);\n return {\n ...prev,\n selectedMembers: exists\n ? prev.selectedMembers.filter((m) => String(m._id) !== memberId)\n : [...prev.selectedMembers, member],\n };\n });\n };\n\n const handleAvatarChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (!file) return;\n\n const reader = new FileReader();\n reader.onloadend = () => updateState({ avatarPreview: reader.result as string });\n reader.readAsDataURL(file);\n };\n\n const resetCreateForm = () => {\n updateState({\n groupName: \"\",\n groupDesc: \"\",\n selectedMembers: [],\n avatarPreview: null,\n memberSearchQuery: \"\",\n activeTab: \"dm\",\n });\n if (fileInputRef.current) fileInputRef.current.value = \"\";\n };\n\n const fetchConversations = useStore((state) => state.fetchConversations);\n\n const handleCreateGroup = async () => {\n if (setIsCreateModalOpen) setIsCreateModalOpen(false);\n try {\n const groupName = state.groupName;\n const groupDescription = state.groupDesc;\n const members = state.selectedMembers.map((m) => m._id);\n const creatorId = effectiveLoggedUser?._id;\n\n const response = await createGroup(groupName, groupDescription, members, creatorId);\n\n await fetchConversations(10, 1, \"\", true);\n\n resetCreateForm();\n } catch (error) {\n console.error(\"Error creating group:\", error);\n }\n };\n\n const handleStartDM = (user: any) => {\n const existingDm = conversations.find((c) => {\n if (isGroupConversation(c)) return false;\n const ids = (c.participants || []).map((p: any) => String(p._id || p));\n return ids.includes(String(user._id)) && ids.includes(String(effectiveLoggedUser?._id));\n });\n\n const channelData: IChannel = {\n id: user._id,\n name: user.name.charAt(0).toUpperCase() + user.name.slice(1),\n image: user.image || `https://i.pravatar.cc/150?u=${user._id}`,\n isOnline: onlineUsersIds.includes(user._id),\n isGroup: false,\n conversationId: existingDm?._id ? String(existingDm._id) : undefined,\n };\n\n if (onUserSelect) {\n onUserSelect(channelData);\n } else {\n setActiveChannel(channelData);\n }\n\n if (setIsCreateModalOpen) setIsCreateModalOpen(false);\n resetCreateForm();\n };\n\n const modalThemeStyles = {\n \"--chat-theme\": themeColor,\n \"--chat-theme-5\": `${themeColor}0D`,\n \"--chat-theme-10\": `${themeColor}1A`,\n \"--chat-theme-20\": `${themeColor}33`,\n } as React.CSSProperties;\n\n return (\n <div className=\"border-b border-black/[0.06] bg-white px-4 py-4 md:px-5\">\n <div className=\"flex min-w-0 items-center gap-3\">\n {uiConfig.showSidebarAvatar !== false && (\n <div className=\"relative shrink-0\">\n <Avatar className=\"size-10 ring-2 ring-(--chat-theme-10)\">\n <AvatarImage src={user?.image} alt={user?.name} />\n <AvatarFallback className=\"bg-(--chat-theme-10) text-sm font-semibold text-(--chat-theme)\">\n {user.name.charAt(0).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n <span className=\"absolute bottom-0 right-0 size-2.5 rounded-full border-2 border-white bg-emerald-500\" />\n </div>\n )}\n\n <div className=\"min-w-0 flex-1\">\n <h2 className=\"truncate text-[15px] font-semibold text-[#0f172a] leading-tight\">\n {user.name}\n </h2>\n <p className=\"truncate text-xs text-muted-foreground\">\n {user.email}\n </p>\n </div>\n </div>\n\n <div className=\"mt-4 flex items-center gap-2\">\n <div className=\"relative group flex min-w-0 flex-1 items-center\">\n <Search\n className=\"absolute left-3.5 z-10 size-4 text-muted-foreground/50 transition-colors group-focus-within:text-(--chat-theme)\"\n />\n\n <Input\n placeholder=\"Search conversations...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery?.(e.target.value)}\n className=\"h-10 w-full rounded-xl border border-black/[0.06] bg-[#f8fafc] pl-10 pr-10 text-sm shadow-none placeholder:text-muted-foreground/50 focus-visible:border-(--chat-theme-20) focus-visible:ring-2 focus-visible:ring-(--chat-theme-10)\"\n />\n\n {searchQuery && (\n <button\n type=\"button\"\n onClick={() => setSearchQuery?.(\"\")}\n className=\"absolute right-3 flex size-5 items-center justify-center rounded-full bg-black/[0.06] transition-colors hover:bg-black/[0.1]\"\n >\n <X size={12} className=\"text-muted-foreground\" />\n </button>\n )}\n </div>\n\n <Dialog\n open={isCreateModalOpen}\n onOpenChange={(open) => {\n if (setIsCreateModalOpen) setIsCreateModalOpen(open);\n if (!open) resetCreateForm();\n }}\n >\n <Tooltip>\n <TooltipTrigger asChild>\n <DialogTrigger asChild>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"size-10 shrink-0 rounded-xl border-black/[0.08] bg-white hover:bg-(--chat-theme-5) hover:text-(--chat-theme)\"\n aria-label=\"Direct Message & Create Group\"\n >\n <UserPlus size={17} className=\"text-(--chat-theme)\" />\n </Button>\n </DialogTrigger>\n </TooltipTrigger>\n <TooltipContent align=\"end\" side=\"bottom\" className=\"text-xs font-bold px-3 py-1.5 rounded-lg shadow-xl shadow-black/10\">\n Direct Message & Create Group\n </TooltipContent>\n </Tooltip>\n\n <DialogContent\n showCloseButton={false}\n style={modalThemeStyles}\n className=\"flex h-[min(540px,90dvh)] w-[95vw] flex-col overflow-hidden rounded-2xl border border-black/[0.08] bg-white p-0 text-[#0f172a] shadow-[0_20px_50px_rgba(15,23,42,0.12)] sm:max-w-[420px]\"\n >\n {/* Header */}\n <div className=\"flex shrink-0 items-center justify-between px-5 pt-5 pb-3\">\n <DialogTitle className=\"text-base font-semibold text-[#0f172a]\">\n New chat\n </DialogTitle>\n <DialogTrigger asChild>\n <button\n type=\"button\"\n className=\"flex size-8 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-black/[0.04] hover:text-[#0f172a]\"\n >\n <X className=\"size-4\" />\n </button>\n </DialogTrigger>\n </div>\n\n {/* Pill tabs */}\n <div className=\"grid shrink-0 grid-cols-2 gap-2 px-5 pb-4\">\n {([\n { id: \"dm\" as const, label: \"Message\", icon: MessageCircle },\n { id: \"group\" as const, label: \"New group\", icon: Users },\n ]).map(({ id, label, icon: Icon }) => (\n <button\n key={id}\n type=\"button\"\n onClick={() => updateState({ activeTab: id })}\n className={cn(\n \"flex items-center justify-center gap-2 rounded-full border py-2 text-sm transition-colors\",\n state.activeTab === id\n ? \"border-(--chat-theme-20) bg-(--chat-theme-5) text-(--chat-theme)\"\n : \"border-black/[0.08] text-muted-foreground hover:border-black/[0.12] hover:text-[#0f172a]\"\n )}\n >\n <Icon className=\"size-4\" />\n {label}\n </button>\n ))}\n </div>\n\n {/* Message tab */}\n {state.activeTab === \"dm\" && (\n <div className=\"flex min-h-0 flex-1 flex-col\">\n <div className=\"relative shrink-0 px-5 pb-3\">\n <Search className=\"absolute left-8 top-1/2 size-4 -translate-y-1/2 text-muted-foreground/45\" />\n <Input\n placeholder=\"Search by name or email\"\n value={state.memberSearchQuery}\n onChange={(e) => updateState({ memberSearchQuery: e.target.value })}\n className=\"h-10 rounded-xl border-black/[0.06] bg-[#f8fafc] pl-10 text-sm text-[#0f172a] shadow-none placeholder:text-muted-foreground/60 focus-visible:border-(--chat-theme-20) focus-visible:ring-2 focus-visible:ring-(--chat-theme-10)\"\n />\n </div>\n\n <p className=\"shrink-0 px-5 pb-1 text-[11px] lowercase text-muted-foreground\">contacts</p>\n\n <div className=\"chat-message-scroll min-h-0 flex-1 overflow-y-auto pb-2\">\n {filteredMembers.map((member) => {\n const isOnline = onlineUsersIds.includes(member._id);\n return (\n <button\n type=\"button\"\n key={String(member._id)}\n onClick={() => handleStartDM(member)}\n className=\"flex w-full items-center gap-3 px-5 py-2.5 text-left transition-colors hover:bg-[#f8fafc]\"\n >\n <div className=\"relative shrink-0\">\n <div\n className={cn(\n \"flex size-10 items-center justify-center rounded-full text-sm font-semibold text-white\",\n getAvatarColor(String(member._id))\n )}\n >\n {member.image ? (\n <img src={member.image} alt=\"\" className=\"size-full rounded-full object-cover\" />\n ) : (\n getInitials(member.name)\n )}\n </div>\n {isOnline && (\n <span className=\"absolute bottom-0 right-0 size-2.5 rounded-full border-2 border-white bg-emerald-500\" />\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-sm font-semibold text-[#0f172a]\">\n {formatMemberName(member.name)}\n </p>\n <p className=\"truncate text-xs text-muted-foreground\">{member.email}</p>\n </div>\n <span\n className={cn(\n \"shrink-0 text-xs\",\n isOnline ? \"text-emerald-600\" : \"text-muted-foreground\"\n )}\n >\n {isOnline ? \"Active now\" : \"Offline\"}\n </span>\n </button>\n );\n })}\n {filteredMembers.length === 0 && (\n <p className=\"px-5 py-10 text-center text-sm text-muted-foreground\">No contacts found</p>\n )}\n </div>\n </div>\n )}\n\n {/* New group tab */}\n {state.activeTab === \"group\" && (\n <div className=\"grid min-h-0 flex-1 grid-rows-[auto_auto_1fr_auto]\">\n {/* Group info row */}\n <div className=\"flex shrink-0 gap-3 px-5 pb-4\">\n <button\n type=\"button\"\n onClick={() => fileInputRef.current?.click()}\n className=\"relative shrink-0 self-start\"\n >\n <div className=\"flex size-[52px] items-center justify-center overflow-hidden rounded-full border border-dashed border-black/[0.12] bg-[#f8fafc]\">\n {state.avatarPreview ? (\n <img src={state.avatarPreview} className=\"size-full object-cover\" alt=\"\" />\n ) : (\n <Camera className=\"size-4 text-muted-foreground/50\" />\n )}\n </div>\n <input\n type=\"file\"\n ref={fileInputRef}\n className=\"hidden\"\n accept=\"image/*\"\n onChange={handleAvatarChange}\n />\n </button>\n <div className=\"min-w-0 flex-1 space-y-2\">\n <Input\n placeholder=\"Group name\"\n value={state.groupName}\n onChange={(e) => updateState({ groupName: e.target.value })}\n className=\"h-9 rounded-lg border-black/[0.06] bg-[#f8fafc] text-sm text-[#0f172a] shadow-none placeholder:text-muted-foreground/60 focus-visible:border-(--chat-theme-20) focus-visible:ring-2 focus-visible:ring-(--chat-theme-10)\"\n />\n <Input\n placeholder=\"Description (optional)\"\n value={state.groupDesc}\n onChange={(e) => updateState({ groupDesc: e.target.value })}\n className=\"h-9 rounded-lg border-black/[0.06] bg-[#f8fafc] text-sm text-[#0f172a] shadow-none placeholder:text-muted-foreground/60 focus-visible:border-(--chat-theme-20) focus-visible:ring-2 focus-visible:ring-(--chat-theme-10)\"\n />\n </div>\n </div>\n\n {/* Search members */}\n <div className=\"shrink-0 border-t border-black/[0.05] px-5 pt-4 pb-1\">\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground/45\" />\n <Input\n placeholder=\"Search members\"\n value={state.memberSearchQuery}\n onChange={(e) => updateState({ memberSearchQuery: e.target.value })}\n className=\"h-10 rounded-xl border-black/[0.06] bg-[#f8fafc] pl-10 text-sm text-[#0f172a] shadow-none placeholder:text-muted-foreground/60 focus-visible:border-(--chat-theme-20) focus-visible:ring-2 focus-visible:ring-(--chat-theme-10)\"\n />\n </div>\n <p className=\"mt-3 mb-2 px-0.5 text-[11px] lowercase tracking-wide text-muted-foreground\">\n {state.selectedMembers.length === 0\n ? \"no members selected\"\n : `${state.selectedMembers.length} member${state.selectedMembers.length > 1 ? \"s\" : \"\"} selected`}\n </p>\n </div>\n\n {/* Member list */}\n <div className=\"chat-message-scroll min-h-0 overflow-y-auto pt-1\">\n {filteredMembers.map((member) => {\n const isSelected = state.selectedMembers.some(\n (m) => String(m._id) === String(member._id)\n );\n const isOnline = onlineUsersIds.includes(member._id);\n return (\n <button\n type=\"button\"\n key={String(member._id)}\n onClick={() => handleMemberToggle(member)}\n className=\"flex w-full items-center gap-3 px-5 py-2.5 text-left transition-colors hover:bg-[#f8fafc]\"\n >\n <div className=\"relative shrink-0\">\n <div\n className={cn(\n \"flex size-10 items-center justify-center rounded-full text-sm font-semibold text-white\",\n getAvatarColor(String(member._id))\n )}\n >\n {member.image ? (\n <img src={member.image} alt=\"\" className=\"size-full rounded-full object-cover\" />\n ) : (\n getInitials(member.name)\n )}\n </div>\n {isOnline && (\n <span className=\"absolute bottom-0 right-0 size-2.5 rounded-full border-2 border-white bg-emerald-500\" />\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-sm font-semibold text-[#0f172a]\">\n {formatMemberName(member.name)}\n </p>\n <p className=\"truncate text-xs text-muted-foreground\">{member.email}</p>\n </div>\n <div\n className={cn(\n \"flex size-5 shrink-0 items-center justify-center rounded-full border-2 transition-all duration-150\",\n isSelected ? \"border-transparent\" : \"border-black/25 bg-white\"\n )}\n style={\n isSelected\n ? { backgroundColor: themeColor, borderColor: themeColor }\n : undefined\n }\n aria-hidden\n >\n {isSelected && (\n <Check className=\"size-3 stroke-[2.5] text-white\" />\n )}\n </div>\n </button>\n );\n })}\n {filteredMembers.length === 0 && (\n <p className=\"px-5 py-8 text-center text-xs text-muted-foreground\">No members found</p>\n )}\n </div>\n\n {/* Footer */}\n <div className=\"flex shrink-0 justify-end border-t border-black/[0.06] px-5 py-3\">\n <Button\n onClick={handleCreateGroup}\n disabled={!state.groupName.trim() || state.selectedMembers.length === 0}\n className={cn(\n \"h-9 gap-2 rounded-lg px-4 text-sm font-medium transition-colors\",\n state.groupName.trim() && state.selectedMembers.length > 0\n ? \"border border-(--chat-theme) bg-(--chat-theme) text-white hover:opacity-90\"\n : \"border border-black/[0.1] bg-white text-muted-foreground hover:bg-[#f8fafc] disabled:opacity-50\"\n )}\n >\n Create group\n <ArrowRight className=\"size-4\" />\n </Button>\n </div>\n </div>\n )}\n </DialogContent>\n </Dialog>\n </div>\n </div>\n );\n};\n\nexport default LoggedUserDetails;","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\nimport { cn } from \"../lib/utils\"\n\n\nconst badgeVariants = cva(\n \"inline-flex items-center justify-center rounded-full border border-transparent px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n secondary:\n \"bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n destructive:\n \"bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n ghost: \"[a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 [a&]:hover:underline\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Badge({\n className,\n variant = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> &\n VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : \"span\"\n\n return (\n <Comp\n data-slot=\"badge\"\n data-variant={variant}\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nexport { Badge, badgeVariants }\n","\nimport * as React from \"react\"\nimport { ScrollArea as ScrollAreaPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../lib/utils\"\n\n\nfunction ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn(\"relative\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n className=\"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n )\n}\n\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n \"flex touch-none p-px transition-colors select-none\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n data-slot=\"scroll-area-thumb\"\n className=\"bg-border relative flex-1 rounded-full\"\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n )\n}\n\nexport { ScrollArea, ScrollBar }\n","import React, { useState, useEffect, useMemo, useRef } from \"react\";\nimport { Badge } from \"../ui/badge\";\nimport { ScrollArea } from \"../ui/scroll-area\";\nimport { Button } from \"../ui/button\";\nimport { Loader2, UserPlus, Search, X } from \"lucide-react\";\nimport { Input } from \"../ui/input\";\nimport { cn } from \"../lib/utils\";\nimport type { IChannel } from \"../types/chats.types\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"../ui/avatar\";\nimport { useStore } from \"../store/useStore\";\nimport { resolveConversationLastMessage } from \"../store/helpers/store.helpers\";\nimport { getConversationDraftPreview, useDraftRevision } from \"../hooks/useConversationDraft\";\ninterface ChannelListProps {\n activeChannel: IChannel | null;\n onChannelSelect: (channel: IChannel) => void;\n onNewChatClick?: () => void;\n debouncedSearch?: string;\n}\n\nconst ChannelList = ({ activeChannel, onChannelSelect, onNewChatClick, debouncedSearch = \"\" }: ChannelListProps) => {\n\n const onlineUserIds = useStore((s) => s.onlineUsers);\n const allUsers = useStore((s) => s.allUsers);\n const typingUsersByConv = useStore((s) => s.typingUsers);\n const deletedForMeIds = useStore((s) => s.deletedForMeIds);\n const isFetchingUsers = useStore((s) => s.isFetchingAllUsers);\n const conversations = useStore((s) => s.conversations);\n const messagesByConversation = useStore((s) => s.messagesByConversation);\n\n const isFetchingConversations = useStore((s) => s.isFetchingConversations);\n const conversationsHasMore = useStore((s) => s.conversationsHasMore);\n const conversationsPage = useStore((s) => s.conversationsPage);\n\n const accessToken = useStore((s) => s.accessToken);\n const loggedUserDetails = useStore((s) => s.loggedUserDetails);\n const lastFetchKeyRef = useRef<string | null>(null);\n useDraftRevision();\n\n // Fetch all users on mount\n useEffect(() => {\n if (accessToken) {\n useStore.getState().fetchAllUsers();\n }\n }, [accessToken]);\n\n // Fetch conversations on mount or when search changes (once per key)\n useEffect(() => {\n if (!accessToken) return;\n\n const fetchKey = debouncedSearch;\n if (lastFetchKeyRef.current === fetchKey) return;\n\n const hadPreviousKey = lastFetchKeyRef.current !== null;\n lastFetchKeyRef.current = fetchKey;\n\n const { resetConversations, fetchConversations } = useStore.getState();\n if (hadPreviousKey) {\n resetConversations();\n }\n fetchConversations(10, 1, debouncedSearch, true);\n }, [accessToken, debouncedSearch]);\n\n\n\n const mappedChannels = useMemo(() => {\n const safeConversations = Array.isArray(conversations) ? conversations : [];\n return safeConversations\n .map((c) => {\n // Find the other participant ID\n const otherParticipantData = c.participants.find((p: any) => String(p._id || p) !== String(loggedUserDetails?._id)) || c.participants[0];\n const otherParticipantId = String(otherParticipantData?._id || otherParticipantData);\n\n // Resolve user details from allUsers if the object is missing\n const resolvedUser = typeof otherParticipantData === 'object' && otherParticipantData.name\n ? otherParticipantData\n : (Array.isArray(allUsers) ? allUsers : []).find(u => String(u._id) === otherParticipantId);\n\n const name = (c.conversationType === \"group\" || c.isGroup) ? (c.groupName || c.name || \"Group Chat\") : (resolvedUser?.name || \"Unknown User\");\n const image = (c.conversationType === \"group\" || c.isGroup) ? (c.image || \"\") : (resolvedUser?.image || `https://i.pravatar.cc/150?u=${otherParticipantId}`);\n const isOnline = (c.conversationType === \"group\" || c.isGroup) ? false : onlineUserIds.includes(otherParticipantId);\n\n // Calculate unread count for current user\n const unreadCount = typeof c.unreadCount === \"number\" ? c.unreadCount : 0;\n\n const isTyping = typingUsersByConv[String(c._id)]?.length > 0;\n\n const resolvedLastMessage = resolveConversationLastMessage(c, messagesByConversation);\n\n let lastMessageContent = resolvedLastMessage?.content || \"No messages yet\";\n if (resolvedLastMessage) {\n if (resolvedLastMessage.isDeletedForEveryone) {\n lastMessageContent = \"This message has been deleted\";\n } else if (deletedForMeIds.includes(String(resolvedLastMessage._id || resolvedLastMessage.id))) {\n lastMessageContent = \"\";\n }\n }\n\n const conversationId = String(c._id);\n const draftPreview = getConversationDraftPreview(conversationId);\n\n return {\n id: (c.conversationType === \"group\" || c.isGroup) ? conversationId : otherParticipantId,\n conversationId,\n name: name.charAt(0).toUpperCase() + name.slice(1),\n image: image,\n isOnline,\n isGroup: c.conversationType === \"group\" || c.isGroup,\n isLeft: c.isLeft || false,\n isBlocked: c.isBlocked || false,\n unreadCount,\n isTyping,\n draftPreview,\n pinnedCount: c.pinnedCount,\n starredCount: c.starredCount,\n lastMessage: {\n content: lastMessageContent,\n timestamp: resolvedLastMessage?.createdAt\n ? new Date(resolvedLastMessage.createdAt).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })\n : \"\",\n sender: \"User\"\n }\n } as IChannel & { isTyping: boolean; draftPreview: string | null };\n });\n }, [conversations, messagesByConversation, onlineUserIds, loggedUserDetails, allUsers, typingUsersByConv, deletedForMeIds]);\n\n const handleLoadMore = () => {\n if (!isFetchingConversations && conversationsHasMore) {\n useStore.getState().fetchConversations(10, conversationsPage + 1, debouncedSearch);\n }\n };\n\n if ((isFetchingUsers || (isFetchingConversations && conversations.length === 0)) && mappedChannels.length === 0) {\n return (\n <div className=\"flex flex-col items-center justify-center flex-1 min-h-0 bg-white space-y-4\">\n <Loader2 className=\"h-8 w-8 animate-spin text-(--chat-theme-40)\" />\n <p className=\"text-[10px] font-bold text-gray-400 uppercase tracking-widest transition-all\">Loading Sidebar...</p>\n </div>\n );\n }\n\n\n return (\n <div className=\"flex min-h-0 w-full flex-1 flex-col bg-white\">\n <div className=\"flex items-center justify-between px-4 py-3 md:px-5\">\n <h3 className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n Messages\n </h3>\n <span className=\"rounded-full bg-black/[0.04] px-2 py-0.5 text-[11px] font-medium text-muted-foreground\">\n {mappedChannels.length}\n </span>\n </div>\n\n {/* List Area */}\n <ScrollArea className=\"min-h-0 flex-1\">\n <div className=\"space-y-0.5 px-2 pb-3 md:px-3\">\n {mappedChannels.map((channel) => {\n const isActive = activeChannel?.id === channel.id;\n return (\n <div\n key={channel.id}\n className={cn(\n \"group relative flex cursor-pointer items-center gap-3 rounded-xl px-3 py-2.5 transition-all duration-200\",\n isActive\n ? \"bg-(--chat-theme-10) shadow-sm ring-1 ring-(--chat-theme-20)\"\n : \"hover:bg-black/[0.03] active:scale-[0.99]\",\n )}\n onClick={() => onChannelSelect(channel)}\n >\n {isActive && (\n <span className=\"absolute bottom-2 left-0 top-2 w-0.5 rounded-full bg-(--chat-theme)\" />\n )}\n\n {/* Avatar */}\n <div className=\"relative shrink-0\">\n <Avatar className=\"size-11\">\n <AvatarImage src={channel?.image} alt={channel?.name} />\n <AvatarFallback className={cn(\n \"text-sm font-semibold\",\n isActive ? \"bg-(--chat-theme-20) text-(--chat-theme)\" : \"bg-muted text-muted-foreground\"\n )}>\n {channel.name.charAt(0).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n {channel.isOnline && (\n <span className=\"absolute bottom-0 right-0 size-2.5 rounded-full border-2 border-white bg-emerald-500\" />\n )}\n </div>\n\n {/* Content */}\n <div className=\"flex min-w-0 flex-1 flex-col justify-center overflow-hidden\">\n <div className=\"mb-0.5 flex w-full min-w-0 items-center justify-between gap-2 overflow-hidden\">\n <h3 className={cn(\n \"min-w-0 flex-1 truncate text-[14px] font-semibold tracking-tight\",\n isActive ? \"text-(--chat-theme)\" : \"text-[#0f172a]\"\n )}>\n { channel.name}\n </h3>\n <div className=\"flex shrink-0 flex-col items-end gap-1\">\n <span className=\"text-[11px] font-medium text-muted-foreground\">\n {channel.lastMessage?.timestamp}\n </span>\n {channel.isLeft && (\n <span className=\"rounded-full bg-red-50 px-1.5 py-0.5 text-[9px] font-semibold text-red-600\">\n Left\n </span>\n )}\n </div>\n </div>\n\n <div className=\"flex w-full min-w-0 items-center justify-between gap-2 pr-1\">\n <p className={cn(\n \"min-w-0 line-clamp-1 text-[13px]\",\n channel.isTyping || channel.draftPreview\n ? \"font-medium\"\n : \"text-muted-foreground\",\n channel.isTyping && \"text-(--chat-theme)\",\n !channel.isTyping && channel.draftPreview && \"text-muted-foreground\"\n )} >\n {channel.isTyping ? (\n \"typing...\"\n ) : channel.draftPreview ? (\n <>\n <span className=\"font-semibold text-rose-500\">Draft: </span>\n <span>{channel.draftPreview}</span>\n </>\n ) : (\n channel.lastMessage?.content\n )}\n </p>\n {channel.unreadCount !== undefined && channel.unreadCount > 0 && (\n <Badge className={cn(\n \"flex h-5 min-w-5 items-center justify-center rounded-full border-none px-1.5 text-[10px] font-semibold\",\n isActive ? \"bg-(--chat-theme) text-white\" : \"bg-(--chat-theme) text-white\"\n )}>\n {channel.unreadCount}\n </Badge>\n )}\n </div>\n </div>\n </div>\n );\n })}\n\n {mappedChannels.length === 0 && (\n <div className=\"py-12 px-6 text-center space-y-5 flex flex-col items-center\">\n <div className=\"size-16 bg-gray-50 rounded-full flex items-center justify-center border-2 border-dashed border-gray-200\">\n <UserPlus className=\"size-8 text-gray-300\" />\n </div>\n <div className=\"space-y-1\">\n <p className=\"text-xs font-bold text-gray-500 uppercase tracking-widest\">No conversations</p>\n <p className=\"text-[10px] font-medium text-gray-400\">Start chatting with your team or create a new group.</p>\n </div>\n <Button\n onClick={onNewChatClick}\n variant=\"outline\"\n className=\"mt-4 rounded-xl border-dashed border-2 text-xs font-bold w-full bg-white hover:bg-gray-50 text-(--chat-theme) border-(--chat-theme-20)\"\n >\n <UserPlus className=\"mr-2 size-4\" /> Start a New Chat\n </Button>\n </div>\n )}\n </div>\n </ScrollArea>\n\n {/* Sticky Footer Loader Button */}\n {conversationsHasMore && mappedChannels.length > 0 && (\n <div className=\"flex justify-center items-center shrink-0 p-3 bg-white border-t border-border/40 sticky bottom-0 z-10 w-full shadow-[0_-15px_20px_-10px_rgba(0,0,0,0.03)] pb-6\">\n <Button\n variant=\"ghost\"\n className=\"h-10 text-xs font-bold bg-[#f3f4f6] hover:bg-(--chat-theme-10) hover:text-(--chat-theme) text-gray-500 rounded-xl transition-all w-full max-w-[200px]\"\n onClick={handleLoadMore}\n disabled={isFetchingConversations}\n >\n {isFetchingConversations ? (\n <>\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n Fetching...\n </>\n ) : (\n \"Load More Conversations\"\n )}\n </Button>\n </div>\n )}\n\n </div>\n );\n};\n\nexport default ChannelList;\n","\nimport { useCallback, useEffect, useRef, useSyncExternalStore } from 'react';\nimport { IAttachment } from '../types/chats.types';\n\nexport interface ConversationDraft {\n messageInput: string;\n attachments: IAttachment[];\n}\n\nconst conversationDrafts = new Map<string, ConversationDraft>();\nconst DRAFT_PREVIEW_MAX_LENGTH = 50;\n\nconst emptyDraft = (): ConversationDraft => ({\n messageInput: '',\n attachments: [],\n});\n\nlet draftRevision = 0;\nconst draftListeners = new Set<() => void>();\n\nfunction notifyDraftChange() {\n draftRevision += 1;\n draftListeners.forEach((listener) => listener());\n}\n\nfunction subscribeToDrafts(listener: () => void) {\n draftListeners.add(listener);\n return () => {\n draftListeners.delete(listener);\n };\n}\n\nfunction getDraftRevision() {\n return draftRevision;\n}\n\nexport function useDraftRevision() {\n return useSyncExternalStore(subscribeToDrafts, getDraftRevision, getDraftRevision);\n}\n\nexport function getConversationDraft(conversationId: string | null): ConversationDraft {\n if (!conversationId) return emptyDraft();\n return conversationDrafts.get(conversationId) ?? emptyDraft();\n}\n\nexport function updateConversationDraft(conversationId: string | null, draft: ConversationDraft) {\n if (!conversationId) return;\n\n if (draft.messageInput.trim() || draft.attachments.length > 0) {\n conversationDrafts.set(conversationId, {\n messageInput: draft.messageInput,\n attachments: draft.attachments,\n });\n } else {\n conversationDrafts.delete(conversationId);\n }\n\n notifyDraftChange();\n}\n\nexport function clearConversationDraft(conversationId: string | null) {\n if (!conversationId) return;\n if (!conversationDrafts.has(conversationId)) return;\n\n conversationDrafts.delete(conversationId);\n notifyDraftChange();\n}\n\nexport function getConversationDraftPreview(conversationId: string | null): string | null {\n if (!conversationId) return null;\n\n const draft = conversationDrafts.get(conversationId);\n if (!draft) return null;\n\n const text = draft.messageInput.trim();\n if (text) {\n return text.length > DRAFT_PREVIEW_MAX_LENGTH\n ? `${text.slice(0, DRAFT_PREVIEW_MAX_LENGTH)}…`\n : text;\n }\n\n if (draft.attachments.length > 0) {\n return draft.attachments.length === 1 ? 'Attachment' : `${draft.attachments.length} attachments`;\n }\n\n return null;\n}\n\nexport function useConversationDraft(conversationId: string | null) {\n const composerRef = useRef<ConversationDraft>(emptyDraft());\n\n const syncComposerRef = useCallback((draft: ConversationDraft) => {\n composerRef.current = draft;\n }, []);\n\n useEffect(() => {\n const id = conversationId;\n\n return () => {\n if (!id) return;\n updateConversationDraft(id, composerRef.current);\n };\n }, [conversationId]);\n\n return {\n syncComposerRef,\n };\n}\n","import React from \"react\";\nimport { ArrowLeft, Pin, Star } from \"lucide-react\";\nimport { Button } from \"../../ui/button\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"../../ui/avatar\";\nimport type { IChannel } from \"../../types/chats.types\";\n\ninterface HeaderLeftSideProps {\n onBack?: () => void;\n activeChannel: IChannel;\n pinnedCount: number;\n starredCount: number;\n onOpenDetails: () => void;\n onOpenPins: () => void;\n onOpenStars: () => void;\n}\n\nconst HeaderLeftSide = ({\n onBack,\n activeChannel,\n pinnedCount,\n starredCount,\n onOpenDetails,\n onOpenPins,\n onOpenStars\n}: HeaderLeftSideProps) => {\n const statusLabel = activeChannel.isGroup\n ? \"Group chat\"\n : activeChannel.isOnline\n ? \"Active now\"\n : \"Offline\";\n\n return (\n <div className=\"flex min-w-0 items-center gap-3\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-9 shrink-0 rounded-full md:hidden\"\n onClick={onBack}\n >\n <ArrowLeft size={18} />\n </Button>\n\n <button\n type=\"button\"\n onClick={onOpenDetails}\n className=\"flex min-w-0 items-center gap-3 rounded-xl px-1 py-1 text-left transition-colors hover:bg-black/[0.03]\"\n >\n <div className=\"relative shrink-0\">\n <Avatar className=\"size-10 ring-2 ring-white\">\n <AvatarImage src={activeChannel.image || undefined} />\n <AvatarFallback className=\"bg-(--chat-theme-10) text-sm font-semibold text-(--chat-theme)\">\n {activeChannel.name.charAt(0).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n {!activeChannel.isGroup && activeChannel.isOnline && (\n <span className=\"absolute bottom-0 right-0 size-2.5 rounded-full border-2 border-white bg-emerald-500\" />\n )}\n </div>\n\n <div className=\"min-w-0\">\n <h1 className=\"truncate\">{activeChannel.name}</h1>\n <p className=\"truncate text-xs text-muted-foreground\">{statusLabel}</p>\n </div>\n </button>\n\n <div className=\"hidden items-center gap-1.5 sm:flex\">\n {activeChannel.isLeft && (\n <span className=\"rounded-full bg-red-50 px-2 py-0.5 text-[10px] font-semibold text-red-600\">\n Left\n </span>\n )}\n {pinnedCount > 0 && (\n <button\n type=\"button\"\n onClick={onOpenPins}\n className=\"inline-flex items-center gap-1 rounded-full bg-blue-50 px-2 py-0.5 text-[10px] font-semibold text-blue-600 transition-colors hover:bg-blue-100\"\n >\n <Pin size={10} className=\"fill-current\" />\n {pinnedCount}\n </button>\n )}\n {starredCount > 0 && (\n <button\n type=\"button\"\n onClick={onOpenStars}\n className=\"inline-flex items-center gap-1 rounded-full bg-amber-50 px-2 py-0.5 text-[10px] font-semibold text-amber-600 transition-colors hover:bg-amber-100\"\n >\n <Star size={10} className=\"fill-current\" />\n {starredCount}\n </button>\n )}\n </div>\n </div>\n );\n};\n\nexport default HeaderLeftSide;\n","\nimport * as React from \"react\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\nimport { DropdownMenu as DropdownMenuPrimitive } from \"radix-ui\"\nimport { cn } from \"../lib/utils\"\n\n\nfunction DropdownMenu({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return (\n <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n )\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return (\n <DropdownMenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return (\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return (\n <DropdownMenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"text-muted-foreground ml-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n","import React from \"react\";\nimport { \n Search, \n Phone, \n Video, \n MoreVertical, \n Info, \n UserKey, \n Users, \n ShieldUser, \n Paperclip, \n Pin, \n Star, \n MessageSquareX, \n Trash2,\n LogOut,\n Ban\n} from \"lucide-react\";\nimport { Button } from \"../../ui/button\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../../ui/dropdown-menu\";\nimport type { IChannel } from \"../../types/chats.types\";\n\ninterface HeaderRightSideProps {\n activeChannel: IChannel;\n isAdmin: boolean;\n canViewMembers: boolean;\n onOpenSearch: () => void;\n onOpenDetails: () => void;\n onOpenPermissions: () => void;\n onOpenMembers: () => void;\n onOpenAdmins: () => void;\n onOpenAttachments: () => void;\n onOpenPins: () => void;\n onOpenStars: () => void;\n onOpenClearChat: () => void;\n onOpenDeleteChannel: () => void;\n onOpenLeaveGroup?: () => void;\n onToggleBlock?: () => void;\n isBlocked?: boolean;\n}\n\nconst HeaderRightSide = ({\n activeChannel,\n isAdmin,\n canViewMembers,\n onOpenSearch,\n onOpenDetails,\n onOpenPermissions,\n onOpenMembers,\n onOpenAdmins,\n onOpenAttachments,\n onOpenPins,\n onOpenStars,\n onOpenClearChat,\n onOpenDeleteChannel,\n onOpenLeaveGroup,\n onToggleBlock,\n isBlocked\n}: HeaderRightSideProps) => {\n return (\n <div className=\"flex items-center gap-0.5 rounded-xl border border-black/[0.06] bg-black/[0.02] p-0.5\">\n <Button \n variant=\"ghost\" \n size=\"icon\" \n className=\"size-8 rounded-lg text-muted-foreground hover:bg-white hover:text-foreground hover:shadow-sm\" \n onClick={onOpenSearch}\n >\n <Search size={16} />\n </Button>\n <Button variant=\"ghost\" size=\"icon\" className=\"size-8 rounded-lg text-muted-foreground hover:bg-white hover:text-foreground hover:shadow-sm\">\n <Phone size={16} />\n </Button>\n <Button variant=\"ghost\" size=\"icon\" className=\"size-8 rounded-lg text-muted-foreground hover:bg-white hover:text-foreground hover:shadow-sm\">\n <Video size={16} />\n </Button>\n \n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" className=\"size-8 rounded-lg text-muted-foreground hover:bg-white hover:text-foreground hover:shadow-sm\">\n <MoreVertical size={16} />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-56 rounded-xl border-black/[0.08] p-1 shadow-xl\">\n <DropdownMenuLabel className=\"px-2 py-1.5 text-xs font-medium text-muted-foreground\">Channel options</DropdownMenuLabel>\n <DropdownMenuSeparator />\n \n <DropdownMenuItem className=\"gap-2 cursor-pointer text-[#374151]\" onClick={onOpenDetails}>\n <Info className=\"h-4 w-4\" />\n <span>View Details</span>\n </DropdownMenuItem>\n \n {activeChannel.isGroup && (\n <>\n {isAdmin && (\n <DropdownMenuItem className=\"gap-2 cursor-pointer text-[#374151]\" onClick={onOpenPermissions}>\n <UserKey className=\"h-4 w-4\" /> \n <span>Permission</span>\n </DropdownMenuItem>\n )}\n {canViewMembers && (\n <DropdownMenuItem className=\"gap-2 cursor-pointer text-[#374151]\" onClick={onOpenMembers}>\n <Users className=\"h-4 w-4\" />\n <span>Members</span>\n </DropdownMenuItem>\n )}\n {isAdmin && (\n <DropdownMenuItem className=\"gap-2 cursor-pointer text-[#374151]\" onClick={onOpenAdmins}>\n <ShieldUser className=\"h-4 w-4\" />\n <span>Admins</span>\n </DropdownMenuItem>\n )}\n </>\n )}\n \n <DropdownMenuItem className=\"gap-2 cursor-pointer text-[#374151]\" onClick={onOpenAttachments}>\n <Paperclip className=\"h-4 w-4\" />\n <span>Attachments</span>\n </DropdownMenuItem>\n \n <DropdownMenuItem className=\"gap-2 cursor-pointer text-[#374151]\" onClick={onOpenPins}>\n <Pin className=\"h-4 w-4\" />\n <span>Pin Messages</span>\n </DropdownMenuItem>\n \n <DropdownMenuItem className=\"gap-2 cursor-pointer text-[#374151]\" onClick={onOpenStars}>\n <Star className=\"h-4 w-4\" />\n <span>Favorite</span>\n </DropdownMenuItem>\n \n <DropdownMenuSeparator />\n \n <DropdownMenuItem\n className=\"text-red-600 gap-2 cursor-pointer\"\n onSelect={onOpenClearChat}\n >\n <MessageSquareX className=\"h-4 w-4\" />\n <span>Clear chats</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n className=\"text-red-600 gap-2 cursor-pointer\"\n onSelect={onOpenDeleteChannel}\n >\n <Trash2 className=\"h-4 w-4\" />\n <span>Delete Channel</span>\n </DropdownMenuItem>\n\n {activeChannel.isGroup && !activeChannel.isLeft && (\n <DropdownMenuItem\n className=\"text-red-600 gap-2 cursor-pointer\"\n onSelect={onOpenLeaveGroup}\n >\n <LogOut className=\"h-4 w-4\" />\n <span>Leave Group</span>\n </DropdownMenuItem>\n )}\n\n {!activeChannel.isGroup && (\n <DropdownMenuItem\n className=\"text-red-600 gap-2 cursor-pointer\"\n onSelect={onToggleBlock}\n >\n <Ban className=\"h-4 w-4\" />\n <span>{isBlocked ? \"Unblock User\" : \"Block User\"}</span>\n </DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n};\n\nexport default HeaderRightSide;\n","import React, { useRef, useCallback } from \"react\";\nimport { Loader2, Search } from \"lucide-react\";\n\ninterface HeaderSearchOverlayProps {\n searchQuery: string;\n isSearching: boolean;\n searchResults: any[];\n onSelectResult: (id: string) => void;\n hasMore?: boolean;\n isLoadingMore?: boolean;\n onLoadMore?: () => void;\n}\n\nconst HeaderSearchOverlay = ({\n searchQuery,\n isSearching,\n searchResults,\n onSelectResult,\n hasMore = false,\n isLoadingMore = false,\n onLoadMore,\n}: HeaderSearchOverlayProps) => {\n const scrollRef = useRef<HTMLDivElement>(null);\n\n const handleScroll = useCallback(() => {\n const el = scrollRef.current;\n if (!el || !hasMore || isLoadingMore || !onLoadMore) return;\n if (el.scrollTop + el.clientHeight >= el.scrollHeight - 40) {\n onLoadMore();\n }\n }, [hasMore, isLoadingMore, onLoadMore]);\n\n if (!searchQuery) return null;\n\n return (\n <div className=\"absolute top-full left-0 right-0 mt-3 max-h-[500px] overflow-hidden bg-white rounded-3xl shadow-[0_30px_70px_rgba(0,0,0,0.25)] border border-white/40 z-[101] flex flex-col animate-in fade-in zoom-in-95 duration-200\">\n <div className=\"p-4 border-b border-gray-100/50 bg-gray-50/50 flex items-center justify-between\">\n <span className=\"text-[10px] font-black text-gray-400 uppercase tracking-[0.2em] px-2 flex items-center gap-2\">\n <div className=\"size-1.5 rounded-full bg-primary animate-pulse\" />\n Deep Message Search\n </span>\n {searchResults.length > 0 && (\n <span className=\"text-[10px] font-black bg-primary text-white px-3 py-1 rounded-full shadow-lg shadow-primary/20\">\n {searchResults.length} Results{hasMore ? \"+\" : \"\"}\n </span>\n )}\n </div>\n <div\n ref={scrollRef}\n onScroll={handleScroll}\n className=\"overflow-y-auto p-3 flex flex-col gap-2 custom-scrollbar\"\n >\n {isSearching ? (\n <div className=\"flex flex-col items-center justify-center py-20 gap-4\">\n <div className=\"relative\">\n <Loader2 className=\"h-10 w-10 animate-spin text-primary opacity-20\" />\n <Loader2 className=\"absolute inset-0 h-10 w-10 animate-spin text-primary [animation-duration:3s]\" />\n </div>\n <span className=\"text-[11px] font-black text-gray-400 uppercase tracking-widest animate-pulse\">\n Scanning Archive...\n </span>\n </div>\n ) : searchResults.length > 0 ? (\n <>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-2\">\n {searchResults.map((m) => (\n <div\n key={m._id}\n className=\"p-4 bg-white/50 hover:bg-white rounded-[22px] cursor-pointer transition-all duration-300 border border-gray-100/50 hover:border-primary/20 hover:shadow-xl hover:shadow-primary/5 group flex flex-col gap-2 min-w-0\"\n onClick={() => onSelectResult(m._id)}\n >\n <div className=\"flex items-start justify-between gap-4 min-w-0\">\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm text-gray-600 leading-relaxed group-hover:text-gray-900 transition-colors break-all\">\n {m.content}\n </p>\n </div>\n <div className=\"flex flex-col items-end gap-1.5 flex-shrink-0\">\n <span className=\"text-[10px] font-black text-primary/40 uppercase tracking-widest group-hover:text-primary transition-colors\">\n {new Date(m.createdAt).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}\n </span>\n <span className=\"text-[9px] font-bold text-gray-400 bg-gray-50 px-2 py-1 rounded-lg border border-gray-100 whitespace-nowrap\">\n {new Date(m.createdAt).toLocaleDateString(undefined, { month: 'short', day: 'numeric' })}\n </span>\n </div>\n </div>\n </div>\n ))}\n </div>\n {isLoadingMore && (\n <div className=\"flex justify-center py-4\">\n <Loader2 className=\"h-5 w-5 animate-spin text-primary opacity-50\" />\n </div>\n )}\n </>\n ) : (\n <div className=\"py-24 flex flex-col items-center justify-center gap-6\">\n <div className=\"relative size-20 rounded-full bg-gray-50 flex items-center justify-center border-4 border-white shadow-inner\">\n <Search className=\"size-8 text-gray-200\" />\n <div className=\"absolute inset-0 rounded-full border border-gray-100 animate-ping opacity-20\" />\n </div>\n <div className=\"text-center space-y-2\">\n <p className=\"text-lg font-black text-gray-900 tracking-tight\">No results found</p>\n <p className=\"text-sm text-gray-400 font-medium\">\n We couldn't find any messages matching your query.\n </p>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default HeaderSearchOverlay;\n","import React, { useEffect, useState, useRef } from \"react\";\nimport {\n Search,\n} from \"lucide-react\";\n\nimport { Input } from \"../ui/input\";\nimport { Button } from \"../ui/button\";\n\nimport HeaderLeftSide from \"./header/HeaderLeftSide\";\nimport HeaderRightSide from \"./header/HeaderRightSide\";\nimport HeaderSearchOverlay from \"./header/HeaderSearchOverlay\";\n\n\nimport { useStore } from \"../store/useStore\";\nimport type { IChannel } from \"../types/chats.types\";\n\nimport PinnedMessagesDrawer from \"./header/PinnedMessagesDrawer\";\nimport StarredMessagesDrawer from \"./header/StarredMessagesDrawer\";\nimport AttachmentsDrawer from \"./header/AttachmentsDrawer\";\nimport ChannelDetailsDrawer from \"./header/ChannelDetailsDrawer\";\nimport PermissionDrawer from \"./header/PermissionDrawer\";\nimport AdminsDrawer from \"./header/AdminsDrawer\";\nimport MembersDrawer from \"./header/MembersDrawer\";\nimport ChatActionModal from \"./header/ChatActionModal\";\nimport { useGroupInfo } from \"../hooks/useGroupInfo\";\nimport { useDebounce } from \"../hooks/useDebounce\";\nimport { searchMessages, blockUnblockUser } from \"../services/api.service\";\n\nconst EMPTY_ARRAY: any[] = [];\nconst EMPTY_OBJECT: any = {};\n\ninterface ChannelHeaderProps {\n activeChannel: IChannel | null;\n conversationId: string | null;\n onBack?: () => void;\n}\n\nconst ChannelHeader = ({\n activeChannel,\n conversationId,\n onBack,\n}: ChannelHeaderProps) => {\n\n const [state, setState] = useState({\n isSearchOpen: false,\n searchQuery: \"\",\n isDetailsOpen: false,\n isAttachmentsOpen: false,\n isPinOpen: false,\n isFavoriteOpen: false,\n loadingIds: new Set<string>(),\n isClearChatAlertOpen: false,\n isDeletingConversationAlertOpen: false,\n isLeaveGroupAlertOpen: false,\n isPermissionOpen: false,\n isMembersOpen: false,\n isAdminsOpen: false,\n searchResults: [] as any[],\n isSearching: false,\n searchCursor: null as string | null,\n searchHasMore: false,\n isLoadingMoreSearch: false,\n isBlockAlertOpen: false,\n isBlocking: false\n });\n\n const updateState = (updates: Partial<typeof state>) => {\n setState((prev) => ({ ...prev, ...updates }));\n };\n\n\n const pinnedMessages =\n useStore((s) =>\n conversationId ? s.pinnedMessagesByConversation[conversationId] : null\n ) || EMPTY_ARRAY;\n\n const starredMessages =\n useStore((s) =>\n conversationId ? s.starredMessagesByConversation[conversationId] : null\n ) || EMPTY_ARRAY;\n\n const liveCounts =\n useStore((s) =>\n conversationId ? s.liveConversationCounts[conversationId] : null\n ) || EMPTY_OBJECT;\n\n const fetchPinnedMessages = useStore((s) => s.fetchPinnedMessages);\n const fetchStarredMessages = useStore((s) => s.fetchStarredMessages);\n\n const emitDmUnpin = useStore((s) => s.emitDmUnpin);\n const emitDmUnstar = useStore((s) => s.emitDmUnstar);\n const emitDmClearChat = useStore((s) => s.emitDmClearChat);\n const emitGroupClearChat = useStore((s) => s.emitGroupClearChat);\n const emitDmDeleteConversation = useStore((s) => s.emitDmDeleteConversation);\n const emitGroupDeleteConversation = useStore((s) => s.emitGroupDeleteConversation);\n const emitGroupLeave = useStore((s) => s.emitGroupLeave);\n\n const isClearingChat = useStore(\n (s) => s.isClearingChat[conversationId || \"\"]\n );\n\n const isDeletingConversation = useStore(\n (s) => s.isDeletingConversation[conversationId || \"\"]\n );\n\n const { info: currentConversationInfo, isAdmin, userPermissions, loggedUserDetails } = useGroupInfo(conversationId);\n const setSearchActive = useStore(s => s.setSearchActive);\n const fetchMessagesStore = useStore(s => s.fetchMessages);\n const fetchSearchMessageContext = useStore(s => s.fetchSearchMessageContext);\n const setSearchedMessageId = useStore(s => s.setSearchedMessageId);\n const isSearchActive = useStore(s => s.isSearchActive);\n\n const debouncedSearch = useDebounce(state.searchQuery, 800);\n\n useEffect(() => {\n if (debouncedSearch && conversationId) {\n updateState({ searchCursor: null, searchHasMore: false });\n handleSearch(debouncedSearch);\n } else {\n updateState({ searchResults: [], searchCursor: null, searchHasMore: false });\n }\n }, [debouncedSearch, conversationId]);\n\n const handleSearch = async (query: string, cursor?: string | null) => {\n if (!conversationId) return;\n const isFirstPage = !cursor;\n updateState({ isSearching: isFirstPage, isLoadingMoreSearch: !isFirstPage });\n try {\n const response = await searchMessages(conversationId, query, 20, cursor);\n const results = response.data?.list || response.data?.messages || response.messages || response.data || [];\n const pagination = response.data?.pagination;\n setState((prev) => ({\n ...prev,\n searchResults: isFirstPage ? results : [...prev.searchResults, ...results],\n isSearching: false,\n isLoadingMoreSearch: false,\n searchCursor: pagination?.nextCursor ?? null,\n searchHasMore: pagination?.hasNextPage ?? false,\n }));\n } catch (error) {\n console.error(\"Search failed:\", error);\n updateState({ isSearching: false, isLoadingMoreSearch: false });\n }\n };\n\n const handleLoadMoreSearch = () => {\n if (!debouncedSearch || !state.searchHasMore || state.isLoadingMoreSearch || !state.searchCursor) return;\n handleSearch(debouncedSearch, state.searchCursor);\n };\n\n const handleSelectSearchResult = async (messageId: string) => {\n await fetchSearchMessageContext(messageId);\n updateState({ isSearchOpen: false, searchQuery: \"\" });\n };\n\n const handleCloseSearch = () => {\n updateState({ isSearchOpen: false, searchQuery: \"\", searchResults: [] });\n if (isSearchActive) {\n setSearchActive(false);\n setSearchedMessageId(null);\n if (conversationId) {\n fetchMessagesStore(conversationId);\n }\n }\n };\n const canViewMembers = isAdmin || userPermissions.canAddMember || userPermissions.canRemoveMember;\n\n\n const prevIsClearingRef = useRef(isClearingChat);\n\n useEffect(() => {\n if (prevIsClearingRef.current === true && !isClearingChat) {\n updateState({ isClearChatAlertOpen: false });\n }\n prevIsClearingRef.current = isClearingChat;\n }, [isClearingChat]);\n\n const prevIsDeletingRef = useRef(isDeletingConversation);\n\n useEffect(() => {\n if (prevIsDeletingRef.current === true && !isDeletingConversation) {\n updateState({ isDeletingConversationAlertOpen: false });\n // When deletion is successful and the store is updated, close active chat\n onBack?.();\n }\n prevIsDeletingRef.current = isDeletingConversation;\n }, [isDeletingConversation, onBack]);\n\n useEffect(() => {\n if (state.isPinOpen && conversationId) {\n fetchPinnedMessages(conversationId);\n }\n }, [state.isPinOpen, conversationId, fetchPinnedMessages]);\n\n useEffect(() => {\n if (state.isFavoriteOpen && conversationId) {\n fetchStarredMessages(conversationId);\n }\n }, [state.isFavoriteOpen, conversationId, fetchStarredMessages]);\n\n if (!activeChannel) return null;\n\n const pinnedCount =\n (liveCounts?.pinnedCount ?? activeChannel.pinnedCount) ?? 0;\n\n const starredCount =\n (liveCounts?.starredCount ?? activeChannel.starredCount) ?? 0;\n\n const handleClearChat = () => {\n if (!loggedUserDetails?._id || !conversationId) return;\n\n if (activeChannel.isGroup) {\n emitGroupClearChat({\n conversationId,\n sender: loggedUserDetails._id,\n });\n } else {\n emitDmClearChat({\n conversationId,\n sender: loggedUserDetails._id,\n });\n }\n };\n\n const handleDeleteConversation = () => {\n if (!loggedUserDetails?._id || !conversationId) return;\n\n if (activeChannel.isGroup) {\n emitGroupDeleteConversation({\n conversationId,\n sender: loggedUserDetails._id,\n });\n } else {\n emitDmDeleteConversation({\n conversationId,\n sender: loggedUserDetails._id,\n receiver: activeChannel.id,\n });\n }\n };\n\n const handleLeaveGroup = () => {\n if (!loggedUserDetails?._id || !conversationId) return;\n emitGroupLeave({\n conversationId,\n sender: loggedUserDetails._id,\n });\n updateState({ isLeaveGroupAlertOpen: false });\n };\n\n const handleToggleBlock = async () => {\n if (!activeChannel?.id) return;\n \n try {\n updateState({ isBlocking: true });\n const type = activeChannel.isBlocked ? 'unblock' : 'block';\n const response = await blockUnblockUser({ userId: activeChannel.id, type });\n \n if (response && response.success) {\n // Update store state for this conversation/user\n useStore.getState().toggleBlock(activeChannel.id, type === 'block');\n updateState({ isBlockAlertOpen: false });\n }\n } catch (error) {\n console.error(\"Failed to block/unblock user:\", error);\n } finally {\n updateState({ isBlocking: false });\n }\n };\n\n\n\n const handleUnpin = (messageId: string) => {\n if (!loggedUserDetails?._id || !conversationId) return;\n updateState({ loadingIds: new Set(state.loadingIds).add(messageId) });\n emitDmUnpin({ conversationId, sender: loggedUserDetails._id, messageId, receiver: activeChannel.id });\n setTimeout(() => {\n fetchPinnedMessages(conversationId!);\n updateState({\n loadingIds: new Set([...state.loadingIds].filter(id => id !== messageId))\n });\n }, 400);\n };\n\n const formatRelativeTime = (dateStr: string) => {\n if (!dateStr) return \"\";\n const date = new Date(dateStr);\n if (isNaN(date.getTime())) return dateStr;\n return date.toLocaleDateString();\n };\n\n\n\n const handleUnstar = (messageId: string) => {\n if (!loggedUserDetails?._id || !conversationId) return;\n updateState({ loadingIds: new Set(state.loadingIds).add(messageId) });\n emitDmUnstar({ messageId, sender: loggedUserDetails._id, conversationId });\n setTimeout(() => {\n fetchStarredMessages(conversationId!);\n updateState({\n loadingIds: new Set([...state.loadingIds].filter(id => id !== messageId))\n });\n }, 400);\n };\n\n\n return (\n <div className=\"sticky top-0 z-30 flex h-16 shrink-0 items-center justify-between border-b border-black/[0.06] bg-white/95 px-4 backdrop-blur-md md:px-5\">\n {/* Backdrop Overlay when Search is Active */}\n {state.isSearchOpen && (\n <div\n className=\"fixed inset-0 backdrop-blur-sm z-[-1] animate-in fade-in duration-300\"\n onClick={handleCloseSearch}\n />\n )}\n\n {state.isSearchOpen ? (\n <div className=\"flex-1 flex items-center gap-4 animate-in fade-in slide-in-from-right-4 duration-300\">\n <div className=\"relative flex-1 group\">\n <Search className=\"absolute left-4 top-1/2 -translate-y-1/2 size-5 text-primary opacity-40 group-focus-within:opacity-100 transition-opacity\" />\n <Input\n autoFocus\n placeholder=\"Search for messages, media, and more...\"\n className=\"h-12 w-full pl-12 pr-4 rounded-2xl bg-gray-50 border-none focus-visible:ring-2 focus-visible:ring-primary/20 transition-all font-bold placeholder:text-muted-foreground/40 text-base\"\n value={state.searchQuery}\n onChange={(e) => updateState({ searchQuery: e.target.value })}\n onKeyDown={(e) => e.key === 'Escape' && handleCloseSearch()}\n />\n <HeaderSearchOverlay\n searchQuery={state.searchQuery}\n isSearching={state.isSearching}\n searchResults={state.searchResults}\n onSelectResult={handleSelectSearchResult}\n hasMore={state.searchHasMore}\n isLoadingMore={state.isLoadingMoreSearch}\n onLoadMore={handleLoadMoreSearch}\n />\n </div>\n <Button\n variant=\"ghost\"\n className=\"h-12 px-8 rounded-2xl text-xs font-black text-muted-foreground uppercase tracking-[0.2em] hover:bg-red-50 hover:text-red-500 transition-all\"\n onClick={handleCloseSearch}\n >\n Close\n </Button>\n </div>\n ) : (\n <>\n <HeaderLeftSide\n onBack={onBack}\n activeChannel={activeChannel}\n pinnedCount={pinnedCount}\n starredCount={starredCount}\n onOpenDetails={() => updateState({ isDetailsOpen: true })}\n onOpenPins={() => updateState({ isPinOpen: true })}\n onOpenStars={() => updateState({ isFavoriteOpen: true })}\n />\n\n <HeaderRightSide\n activeChannel={activeChannel}\n isAdmin={isAdmin}\n canViewMembers={canViewMembers}\n onOpenSearch={() => updateState({ isSearchOpen: true })}\n onOpenDetails={() => updateState({ isDetailsOpen: true })}\n onOpenPermissions={() => updateState({ isPermissionOpen: true })}\n onOpenMembers={() => updateState({ isMembersOpen: true })}\n onOpenAdmins={() => updateState({ isAdminsOpen: true })}\n onOpenAttachments={() => updateState({ isAttachmentsOpen: true })}\n onOpenPins={() => updateState({ isPinOpen: true })}\n onOpenStars={() => updateState({ isFavoriteOpen: true })}\n onOpenClearChat={() => updateState({ isClearChatAlertOpen: true })}\n onOpenDeleteChannel={() => updateState({ isDeletingConversationAlertOpen: true })}\n onOpenLeaveGroup={() => updateState({ isLeaveGroupAlertOpen: true })}\n onToggleBlock={() => updateState({ isBlockAlertOpen: true })}\n isBlocked={activeChannel?.isBlocked}\n />\n </>\n )}\n\n\n <ChatActionModal\n isOpen={state.isLeaveGroupAlertOpen}\n onOpenChange={(open) => updateState({ isLeaveGroupAlertOpen: open })}\n title=\"Leave Group?\"\n description=\"Are you sure you want to leave this group?\"\n warningTitle=\"Warning\"\n warningDescription=\"You will no longer be able to send or receive messages in this group.\"\n actionButtonText=\"Yes, leave group\"\n loadingText=\"Leaving...\"\n isLoading={false} // Add proper loading state if available in store\n onAction={handleLeaveGroup}\n type=\"delete\"\n />\n\n\n <ChatActionModal\n isOpen={state.isClearChatAlertOpen}\n onOpenChange={(open) => updateState({ isClearChatAlertOpen: open })}\n title=\"Clear chat history?\"\n description=\"This will permanently delete all messages in this conversation for you.\"\n warningTitle=\"Warning\"\n warningDescription=\"Other participants will still be able to see these messages. This action cannot be undone.\"\n actionButtonText=\"Yes, clear chat\"\n loadingText=\"Clearing...\"\n isLoading={!!isClearingChat}\n onAction={handleClearChat}\n type=\"clear\"\n />\n\n <ChatActionModal\n isOpen={state.isDeletingConversationAlertOpen}\n onOpenChange={(open) => updateState({ isDeletingConversationAlertOpen: open })}\n title=\"Delete Channel?\"\n description=\"This will permanently delete this conversation and all its contents for you.\"\n warningTitle=\"Critical Warning\"\n warningDescription=\"This action cannot be undone. You will lose access to all messages in this channel.\"\n actionButtonText=\"Yes, delete channel\"\n loadingText=\"Deleting...\"\n isLoading={!!isDeletingConversation}\n onAction={handleDeleteConversation}\n type=\"delete\"\n />\n\n <ChatActionModal\n isOpen={state.isBlockAlertOpen}\n onOpenChange={(open) => updateState({ isBlockAlertOpen: open })}\n title={activeChannel?.isBlocked ? \"Unblock User?\" : \"Block User?\"}\n description={activeChannel?.isBlocked ? `Are you sure you want to unblock ${activeChannel.name}?` : `Are you sure you want to block ${activeChannel.name}?`}\n warningTitle=\"Warning\"\n warningDescription={activeChannel?.isBlocked ? \"They will be able to send you messages again.\" : \"They will no longer be able to send you messages.\"}\n actionButtonText={activeChannel?.isBlocked ? \"Yes, unblock\" : \"Yes, block\"}\n loadingText={activeChannel?.isBlocked ? \"Unblocking...\" : \"Blocking...\"}\n isLoading={state.isBlocking}\n onAction={handleToggleBlock}\n type=\"block\"\n />\n\n <ChannelDetailsDrawer\n isOpen={state.isDetailsOpen}\n onOpenChange={(open: boolean) => updateState({ isDetailsOpen: open })}\n activeChannel={activeChannel}\n conversationInfo={currentConversationInfo}\n />\n\n <PermissionDrawer\n isOpen={state.isPermissionOpen}\n onOpenChange={(open: boolean) => updateState({ isPermissionOpen: open })}\n conversationId={conversationId}\n conversationInfo={currentConversationInfo}\n />\n\n <MembersDrawer\n isOpen={state.isMembersOpen}\n onOpenChange={(open: boolean) => updateState({ isMembersOpen: open })}\n conversationId={conversationId}\n conversationInfo={currentConversationInfo}\n />\n\n <AdminsDrawer\n isOpen={state.isAdminsOpen}\n onOpenChange={(open: boolean) => updateState({ isAdminsOpen: open })}\n conversationId={conversationId}\n conversationInfo={currentConversationInfo}\n />\n\n <AttachmentsDrawer\n isOpen={state.isAttachmentsOpen}\n onOpenChange={(open: boolean) => updateState({ isAttachmentsOpen: open })}\n />\n\n <PinnedMessagesDrawer isOpen={state.isPinOpen} onOpenChange={(open: boolean) => updateState({ isPinOpen: open })} pinnedMessages={pinnedMessages} loggedUserDetails={loggedUserDetails} conversationId={conversationId} activeChannel={activeChannel} loadingIds={state.loadingIds} formatRelativeTime={formatRelativeTime} onUnpin={handleUnpin} />\n <StarredMessagesDrawer isOpen={state.isFavoriteOpen} onOpenChange={(open: boolean) => updateState({ isFavoriteOpen: open })} starredMessages={starredMessages} loggedUserDetails={loggedUserDetails} conversationId={conversationId} activeChannel={activeChannel} loadingIds={state.loadingIds} formatRelativeTime={formatRelativeTime} onUnstar={handleUnstar} />\n\n </div>\n );\n};\n\nexport default ChannelHeader;","\nimport * as React from \"react\"\nimport { XIcon } from \"lucide-react\"\nimport { Dialog as SheetPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../lib/utils\"\n\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />\n}\n\nfunction SheetTrigger({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />\n}\n\nfunction SheetClose({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />\n}\n\nfunction SheetPortal({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\n}\n\nfunction SheetOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n showCloseButton?: boolean\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500\",\n side === \"right\" &&\n \"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm\",\n side === \"left\" &&\n \"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm\",\n side === \"top\" &&\n \"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b\",\n side === \"bottom\" &&\n \"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none\">\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Content>\n </SheetPortal>\n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"flex flex-col gap-1.5 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetTitle({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn(\"text-foreground font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n","import React from \"react\";\nimport { Pin } from \"lucide-react\";\nimport {\n Sheet,\n SheetContent,\n SheetHeader,\n SheetTitle,\n} from \"../../ui/sheet\";\nimport { useStore } from \"../../store/useStore\";\nimport {\n SavedMessageCard,\n parseSavedMessage,\n EMPTY_CONVERSATION_MESSAGES,\n} from \"./SavedMessageCard\";\n\ninterface PinnedMessagesDrawerProps {\n isOpen: boolean;\n onOpenChange: (open: boolean) => void;\n pinnedMessages: any[];\n loggedUserDetails: any;\n conversationId: string | null;\n activeChannel: any;\n loadingIds: Set<string>;\n formatRelativeTime: (date: string) => string;\n onUnpin: (messageId: string) => void;\n}\n\nconst PinnedMessagesDrawer = ({\n isOpen,\n onOpenChange,\n pinnedMessages,\n loggedUserDetails,\n conversationId,\n activeChannel,\n loadingIds,\n onUnpin,\n}: PinnedMessagesDrawerProps) => {\n const allUsers = useStore((s) => s.allUsers);\n const conversationMessages = useStore((s) =>\n conversationId\n ? s.messagesByConversation[conversationId] ?? EMPTY_CONVERSATION_MESSAGES\n : EMPTY_CONVERSATION_MESSAGES\n );\n\n return (\n <Sheet open={isOpen} onOpenChange={onOpenChange}>\n <SheetContent\n showCloseButton\n className=\"flex w-full flex-col gap-0 p-0 sm:max-w-[420px]\"\n >\n <SheetHeader className=\"border-b border-black/[0.06] px-5 py-4 pr-12 text-left\">\n <SheetTitle className=\"flex items-center gap-2 text-base font-semibold text-[#0f172a]\">\n <span className=\"inline-flex size-8 items-center justify-center rounded-lg bg-(--chat-theme-10) text-(--chat-theme)\">\n <Pin size={15} className=\"fill-current\" />\n </span>\n Pinned messages\n </SheetTitle>\n <p className=\"text-xs text-muted-foreground\">\n {pinnedMessages.length === 0\n ? \"No pinned messages in this chat\"\n : `${pinnedMessages.length} message${pinnedMessages.length === 1 ? \"\" : \"s\"} pinned`}\n </p>\n </SheetHeader>\n\n <div className=\"chat-message-scroll flex-1 overflow-y-auto bg-[#f8fafc] p-4\">\n {pinnedMessages.length > 0 ? (\n <div className=\"space-y-3\">\n {pinnedMessages.map((msg: any) => {\n const item = parseSavedMessage(msg, {\n loggedUserDetails,\n activeChannel,\n allUsers,\n conversationMessages,\n mode: \"pinned\",\n });\n const canUnpin =\n String(msg.pinnedBy?._id || msg.pinnedBy) ===\n String(loggedUserDetails?._id);\n\n return (\n <SavedMessageCard\n key={msg._id || item.id}\n item={item}\n variant=\"pinned\"\n badgeIcon={Pin}\n badgeClass=\"bg-(--chat-theme-10) text-(--chat-theme)\"\n quoteClass=\"bg-(--chat-theme-5) ring-1 ring-(--chat-theme-10)\"\n isLoading={loadingIds.has(item.id)}\n showAction={canUnpin}\n onAction={() => onUnpin(item.id)}\n />\n );\n })}\n </div>\n ) : (\n <div className=\"flex min-h-[300px] flex-col items-center justify-center text-center\">\n <div className=\"mb-4 flex size-14 items-center justify-center rounded-2xl bg-white shadow-sm ring-1 ring-black/[0.05]\">\n <Pin size={22} className=\"text-(--chat-theme-40)\" />\n </div>\n <p className=\"text-sm font-semibold text-[#0f172a]\">Nothing pinned yet</p>\n <p className=\"mt-1 max-w-[240px] text-xs leading-relaxed text-muted-foreground\">\n Long-press or use the message menu to pin important messages here.\n </p>\n </div>\n )}\n </div>\n </SheetContent>\n </Sheet>\n );\n};\n\nexport default PinnedMessagesDrawer;\n","import React from \"react\";\nimport { Loader2, LucideIcon, PinOff, StarOff } from \"lucide-react\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"../../ui/avatar\";\nimport { cn } from \"../../lib/utils\";\n\nexport const EMPTY_CONVERSATION_MESSAGES: any[] = [];\n\nexport type SavedMessageItem = {\n id: string;\n content: string;\n senderName: string;\n senderImage?: string;\n subtitle: string;\n dateLabel: string;\n};\n\nexport type SavedMessageParseContext = {\n loggedUserDetails?: { _id?: string; name?: string; image?: string };\n activeChannel?: { id?: string; name?: string; image?: string; isGroup?: boolean };\n allUsers?: Array<{ _id?: string; name?: string; image?: string }>;\n conversationMessages?: any[];\n mode?: \"pinned\" | \"starred\";\n};\n\nfunction getMessageId(msg: any): string {\n if (msg?.messageId && typeof msg.messageId === \"object\") {\n return String(msg.messageId._id || msg.messageId.id || \"\");\n }\n if (typeof msg?.messageId === \"string\") {\n return msg.messageId;\n }\n return String(msg?._id || msg?.id || \"\");\n}\n\nfunction getMessageObject(msg: any) {\n if (msg?.messageId && typeof msg.messageId === \"object\") {\n return msg.messageId;\n }\n return msg;\n}\n\nfunction readSenderFromRecord(record: any): { name: string; image?: string; id?: string } {\n if (!record) return { name: \"\" };\n\n const sender = record.sender ?? record.messageId?.sender;\n if (sender && typeof sender === \"object\") {\n return {\n id: String(sender._id || sender.id || \"\"),\n name: sender.name || sender.username || \"\",\n image: sender.image || sender.avatar,\n };\n }\n\n const senderId = String(\n record.senderId ||\n record.sender ||\n record.messageId?.senderId ||\n record.messageId?.sender ||\n \"\"\n );\n\n return { id: senderId || undefined, name: \"\", image: undefined };\n}\n\nfunction resolveSenderName(\n msg: any,\n ctx: SavedMessageParseContext\n): { name: string; image?: string } {\n const messageObj = getMessageObject(msg);\n const messageId = getMessageId(msg);\n const loggedId = String(ctx.loggedUserDetails?._id || \"\");\n\n const tryRecord = (record: any) => {\n const parsed = readSenderFromRecord(record);\n if (parsed.name) {\n const isSelf = parsed.id && loggedId && parsed.id === loggedId;\n return {\n name: isSelf ? \"You\" : parsed.name,\n image: parsed.image,\n };\n }\n return null;\n };\n\n // 1) Sender on pin/star record or nested message object\n for (const record of [messageObj, msg]) {\n const hit = tryRecord(record);\n if (hit) return hit;\n }\n\n // 2) Lookup full message from loaded conversation\n if (messageId && ctx.conversationMessages?.length) {\n const found = ctx.conversationMessages.find(\n (m) => String(m._id || m.id) === String(messageId)\n );\n if (found) {\n const hit = tryRecord(found);\n if (hit) return hit;\n\n const foundSenderId = String(found.sender?._id || found.sender || \"\");\n if (foundSenderId && loggedId && foundSenderId === loggedId) {\n return {\n name: \"You\",\n image: ctx.loggedUserDetails?.image,\n };\n }\n }\n }\n\n // 3) Resolve sender id from any available field\n const senderId = String(\n messageObj?.senderId ||\n msg?.senderId ||\n (typeof messageObj?.sender === \"string\" ? messageObj.sender : \"\") ||\n (typeof msg?.sender === \"string\" ? msg.sender : \"\") ||\n \"\"\n );\n\n if (senderId && loggedId && senderId === loggedId) {\n return {\n name: \"You\",\n image: ctx.loggedUserDetails?.image,\n };\n }\n\n if (senderId && ctx.allUsers?.length) {\n const user = ctx.allUsers.find((u) => String(u._id) === senderId);\n if (user?.name) {\n return { name: user.name, image: user.image };\n }\n }\n\n // 4) DM fallback — other participant is the active channel\n if (ctx.activeChannel && !ctx.activeChannel.isGroup && ctx.activeChannel.name) {\n return {\n name: ctx.activeChannel.name,\n image: ctx.activeChannel.image,\n };\n }\n\n // 5) Last resort — logged-in user if they pinned their own message in solo context\n if (ctx.loggedUserDetails?.name) {\n return {\n name: ctx.loggedUserDetails.name,\n image: ctx.loggedUserDetails.image,\n };\n }\n\n return { name: \"Member\" };\n}\n\nexport function parseSavedMessage(\n msg: any,\n ctx: SavedMessageParseContext = {}\n): SavedMessageItem {\n const mode = ctx.mode || \"pinned\";\n const messageObj = getMessageObject(msg);\n const id = getMessageId(msg);\n\n const rawContent =\n messageObj?.content ??\n msg?.content ??\n msg?.messageId?.content ??\n \"\";\n const content =\n typeof rawContent === \"string\" && rawContent.trim()\n ? rawContent.trim()\n : \"📎 Attachment\";\n\n const { name: senderName, image: senderImage } = resolveSenderName(msg, ctx);\n\n let subtitle = \"Message\";\n if (mode === \"pinned\") {\n const pinnerName = msg?.pinnedBy?.name || \"\";\n const pinnerId = msg?.pinnedBy?._id || msg?.pinnedBy;\n const byYou =\n String(pinnerId) === String(ctx.loggedUserDetails?._id) ||\n pinnerName === ctx.loggedUserDetails?.name;\n subtitle = byYou ? \"Pinned by you\" : `Pinned by ${pinnerName || \"member\"}`;\n } else {\n subtitle = senderName === \"You\" ? \"Starred by you\" : \"Starred message\";\n }\n\n const rawDate =\n msg?.pinnedAt ||\n msg?.starredAt ||\n msg?.createdAt ||\n messageObj?.createdAt ||\n \"\";\n\n return {\n id,\n content,\n senderName,\n senderImage,\n subtitle,\n dateLabel: formatSavedMessageDate(rawDate),\n };\n}\n\nexport function formatSavedMessageDate(dateStr?: string) {\n if (!dateStr) return \"\";\n const date = new Date(dateStr);\n if (Number.isNaN(date.getTime())) return String(dateStr);\n\n const now = new Date();\n const sameDay =\n date.getDate() === now.getDate() &&\n date.getMonth() === now.getMonth() &&\n date.getFullYear() === now.getFullYear();\n\n if (sameDay) {\n return `Today · ${date.toLocaleTimeString([], { hour: \"2-digit\", minute: \"2-digit\" })}`;\n }\n\n return date.toLocaleDateString([], {\n day: \"numeric\",\n month: \"short\",\n year: \"numeric\",\n });\n}\n\ntype SavedMessageCardProps = {\n item: SavedMessageItem;\n variant: \"pinned\" | \"starred\";\n badgeIcon: LucideIcon;\n badgeClass: string;\n quoteClass: string;\n isLoading?: boolean;\n showAction?: boolean;\n onAction?: () => void;\n};\n\nexport function SavedMessageCard({\n item,\n variant,\n badgeIcon: BadgeIcon,\n badgeClass,\n quoteClass,\n isLoading = false,\n showAction = true,\n onAction,\n}: SavedMessageCardProps) {\n const ActionIcon = variant === \"pinned\" ? PinOff : StarOff;\n const initial = item.senderName.charAt(0).toUpperCase();\n\n return (\n <article className=\"rounded-2xl bg-white p-3.5 shadow-[0_1px_2px_rgba(15,23,42,0.06)] ring-1 ring-black/[0.05] transition-all hover:shadow-[0_4px_14px_rgba(15,23,42,0.08)]\">\n <div className=\"mb-3 flex items-start gap-3\">\n <Avatar className=\"size-10 shrink-0 ring-2 ring-white\">\n <AvatarImage src={item.senderImage} alt={item.senderName} />\n <AvatarFallback className=\"bg-slate-100 text-sm font-semibold text-slate-600\">\n {initial}\n </AvatarFallback>\n </Avatar>\n\n <div className=\"min-w-0 flex-1 pt-0.5\">\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"min-w-0\">\n <p className=\"truncate text-[14px] font-semibold leading-tight text-[#0f172a]\">\n {item.senderName}\n </p>\n <p className=\"mt-0.5 truncate text-[11px] text-muted-foreground\">\n {item.subtitle}\n </p>\n </div>\n\n {showAction && onAction && (\n <button\n type=\"button\"\n onClick={onAction}\n disabled={isLoading}\n title={variant === \"pinned\" ? \"Unpin message\" : \"Remove star\"}\n className={cn(\n \"inline-flex size-8 shrink-0 items-center justify-center rounded-full text-muted-foreground transition-colors\",\n \"hover:bg-black/[0.05] hover:text-[#0f172a]\",\n \"disabled:cursor-not-allowed disabled:opacity-40\"\n )}\n >\n {isLoading ? (\n <Loader2 size={15} className=\"animate-spin\" />\n ) : (\n <ActionIcon size={15} />\n )}\n </button>\n )}\n </div>\n </div>\n </div>\n\n <div className={cn(\"rounded-xl px-3.5 py-3\", quoteClass)}>\n <p className=\"line-clamp-3 text-[13px] leading-6 text-[#334155] break-words\">\n {item.content}\n </p>\n </div>\n\n <div className=\"mt-3 flex items-center justify-between gap-2\">\n <span\n className={cn(\n \"inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide\",\n badgeClass\n )}\n >\n <BadgeIcon size={10} className={variant === \"starred\" ? \"fill-current\" : \"\"} />\n {variant === \"pinned\" ? \"Pinned\" : \"Starred\"}\n </span>\n {item.dateLabel && (\n <time className=\"text-[11px] text-muted-foreground\">{item.dateLabel}</time>\n )}\n </div>\n </article>\n );\n}\n","import React from \"react\";\nimport { Star } from \"lucide-react\";\nimport {\n Sheet,\n SheetContent,\n SheetHeader,\n SheetTitle,\n} from \"../../ui/sheet\";\nimport { useStore } from \"../../store/useStore\";\nimport {\n SavedMessageCard,\n parseSavedMessage,\n EMPTY_CONVERSATION_MESSAGES,\n} from \"./SavedMessageCard\";\n\ninterface StarredMessagesDrawerProps {\n isOpen: boolean;\n onOpenChange: (open: boolean) => void;\n starredMessages: any[];\n loggedUserDetails: any;\n conversationId: string | null;\n activeChannel: any;\n loadingIds: Set<string>;\n formatRelativeTime: (date: string) => string;\n onUnstar: (messageId: string) => void;\n}\n\nconst StarredMessagesDrawer = ({\n isOpen,\n onOpenChange,\n starredMessages,\n loggedUserDetails,\n conversationId,\n activeChannel,\n loadingIds,\n onUnstar,\n}: StarredMessagesDrawerProps) => {\n const allUsers = useStore((s) => s.allUsers);\n const conversationMessages = useStore((s) =>\n conversationId\n ? s.messagesByConversation[conversationId] ?? EMPTY_CONVERSATION_MESSAGES\n : EMPTY_CONVERSATION_MESSAGES\n );\n\n return (\n <Sheet open={isOpen} onOpenChange={onOpenChange}>\n <SheetContent\n showCloseButton\n className=\"flex w-full flex-col gap-0 p-0 sm:max-w-[420px]\"\n >\n <SheetHeader className=\"border-b border-black/[0.06] px-5 py-4 pr-12 text-left\">\n <SheetTitle className=\"flex items-center gap-2 text-base font-semibold text-[#0f172a]\">\n <span className=\"inline-flex size-8 items-center justify-center rounded-lg bg-amber-50 text-amber-500\">\n <Star size={15} className=\"fill-current\" />\n </span>\n Starred messages\n </SheetTitle>\n <p className=\"text-xs text-muted-foreground\">\n {starredMessages.length === 0\n ? \"No starred messages in this chat\"\n : `${starredMessages.length} message${starredMessages.length === 1 ? \"\" : \"s\"} saved for you`}\n </p>\n </SheetHeader>\n\n <div className=\"chat-message-scroll flex-1 overflow-y-auto bg-[#f8fafc] p-4\">\n {starredMessages.length > 0 ? (\n <div className=\"space-y-3\">\n {starredMessages.map((msg: any) => {\n const item = parseSavedMessage(msg, {\n loggedUserDetails,\n activeChannel,\n allUsers,\n conversationMessages,\n mode: \"starred\",\n });\n\n return (\n <SavedMessageCard\n key={msg._id || item.id}\n item={item}\n variant=\"starred\"\n badgeIcon={Star}\n badgeClass=\"bg-amber-50 text-amber-600\"\n quoteClass=\"bg-amber-50/70 ring-1 ring-amber-100\"\n isLoading={loadingIds.has(item.id)}\n onAction={() => onUnstar(item.id)}\n />\n );\n })}\n </div>\n ) : (\n <div className=\"flex min-h-[300px] flex-col items-center justify-center text-center\">\n <div className=\"mb-4 flex size-14 items-center justify-center rounded-2xl bg-white shadow-sm ring-1 ring-amber-100\">\n <Star size={22} className=\"fill-amber-400 text-amber-400\" />\n </div>\n <p className=\"text-sm font-semibold text-[#0f172a]\">Nothing starred yet</p>\n <p className=\"mt-1 max-w-[240px] text-xs leading-relaxed text-muted-foreground\">\n Star messages from the chat menu to keep them in your personal list.\n </p>\n </div>\n )}\n </div>\n </SheetContent>\n </Sheet>\n );\n};\n\nexport default StarredMessagesDrawer;\n","import React from 'react';\nimport { Paperclip, Download } from \"lucide-react\";\nimport {\n Sheet,\n SheetContent,\n SheetHeader,\n SheetTitle,\n SheetDescription,\n} from \"../../ui/sheet\";\nimport { Button } from \"../../ui/button\";\n\ninterface AttachmentsDrawerProps {\n isOpen: boolean;\n onOpenChange: (open: boolean) => void;\n}\n\nconst AttachmentsDrawer = ({ isOpen, onOpenChange }: AttachmentsDrawerProps) => {\n return (\n <Sheet open={isOpen} onOpenChange={onOpenChange}>\n <SheetContent className=\"sm:max-w-md border-none p-0 flex flex-col gap-0 overflow-hidden bg-white\">\n <SheetHeader className=\"px-8 pt-8 pb-4 shrink-0\">\n <SheetTitle className=\"text-xl font-bold text-gray-900\">Attachments</SheetTitle>\n <SheetDescription className=\"text-xs font-semibold text-gray-400 uppercase tracking-widest mt-1\">\n Media, links, and documents\n </SheetDescription>\n </SheetHeader>\n\n <div className=\"flex-1 overflow-y-auto px-6 pb-8 custom-scrollbar mt-4\">\n <div className=\"space-y-6\">\n {/* Media Section */}\n <div className=\"space-y-4\">\n <h3 className=\"text-[10px] font-black uppercase tracking-[0.2em] text-gray-400 px-2\">Media</h3>\n <div className=\"grid grid-cols-3 gap-2\">\n {[\n { id: 'm1', type: 'image', url: 'https://images.unsplash.com/photo-1515378791036-0648a3ef77b2?w=300&q=80', name: 'UI Design Ref' },\n { id: 'm2', type: 'image', url: 'https://images.unsplash.com/photo-1542831371-29b0f74f9713?w=300&q=80', name: 'Code Snippet' },\n { id: 'm3', type: 'video', url: 'https://www.w3schools.com/tags/movie.mp4', name: 'Demo Recording' },\n { id: 'm4', type: 'image', url: 'https://images.unsplash.com/photo-1498050108023-c5249f4df085?w=300&q=80', name: 'Workspace' },\n ].map((media) => (\n <div key={media.id} className=\"relative aspect-square rounded-xl overflow-hidden border border-gray-100 shadow-sm bg-gray-50 flex flex-col group\">\n <div className=\"relative flex-1 overflow-hidden\">\n {media.type === 'image' ? (\n <img\n src={media.url}\n alt={media.name}\n className=\"w-full h-full object-cover transition-transform duration-500 group-hover:scale-105\"\n />\n ) : (\n <div className=\"relative w-full h-full\">\n <video\n className=\"w-full h-full object-cover\"\n >\n <source src={media.url} type=\"video/mp4\" />\n </video>\n </div>\n )}\n </div>\n\n <div className=\"bg-white px-2 py-1.5 border-t border-gray-50 shrink-0 flex items-center justify-between gap-2\">\n <p className=\"text-[9px] font-bold text-gray-900 truncate flex-1\">{media.name}</p>\n <button className=\"size-6 rounded-lg bg-gray-50 flex items-center justify-center text-gray-900 hover:bg-gray-900 hover:text-white transition-all shrink-0\">\n <Download size={12} />\n </button>\n </div>\n </div>\n ))}\n </div>\n </div>\n\n {/* Files Section */}\n <div className=\"space-y-3\">\n <h3 className=\"text-[10px] font-black uppercase tracking-[0.2em] text-gray-400 px-2\">Recent Files</h3>\n {[\n { name: \"Project_Requirements.pdf\", size: \"2.4 MB\", type: \"pdf\", date: \"Today\" },\n { name: \"UI_Mockups_v2.fig\", size: \"14.1 MB\", type: \"fig\", date: \"Yesterday\" },\n { name: \"Q1_Financial_Report.xlsx\", size: \"1.1 MB\", type: \"excel\", date: \"Mar 15\" }\n ].map((file, i) => (\n <div key={i} className=\"group flex items-center gap-4 p-4 rounded-2xl border-2 border-transparent bg-gray-50/50 hover:bg-white hover:border-gray-100 hover:shadow-xl hover:shadow-gray-200/40 transition-all cursor-pointer\">\n <div className=\"w-12 h-12 bg-white rounded-xl shadow-sm border border-gray-100 flex items-center justify-center shrink-0 group-hover:bg-gray-900 group-hover:border-gray-900 transition-colors\">\n <Paperclip size={20} className=\"text-gray-400 group-hover:text-white transition-colors\" />\n </div>\n <div className=\"flex-1 overflow-hidden\">\n <p className=\"text-sm font-bold text-gray-900 truncate\">{file.name}</p>\n <div className=\"flex items-center gap-2 mt-1 text-[10px] font-bold text-gray-400 uppercase tracking-wider\">\n <span>{file.size}</span>\n <span className=\"size-1 rounded-full bg-gray-200\"></span>\n <span>{file.date}</span>\n </div>\n </div>\n <div className=\"opacity-0 group-hover:opacity-100 transition-opacity translate-x-1 group-hover:translate-x-0\">\n <Button variant=\"ghost\" size=\"icon\" className=\"size-10 rounded-full hover:bg-gray-100\">\n <Download size={18} className=\"text-gray-900\" />\n </Button>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n </SheetContent>\n </Sheet>\n );\n};\n\nexport default AttachmentsDrawer;\n","import * as React from \"react\"\n\nimport { cn } from \"../lib/utils\"\n\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","\nimport { useMemo } from 'react';\nimport { useStore } from '../store/useStore';\nimport { IConversationInfo, GroupPermissions } from '../store/types/store.types';\n\n\nexport const useGroupInfo = (conversationId: string | null | undefined) => {\n const conversationInfos = useStore((s) => s.conversationInfos);\n const loggedUserDetails = useStore((s) => s.loggedUserDetails);\n\n const info: IConversationInfo | null = conversationId ? (conversationInfos[conversationId] || null) : null;\n\n const isAdmin = useMemo(() => {\n if (!info || !loggedUserDetails) return false;\n return info.groupAdmins?.some((admin: any) =>\n (typeof admin === 'string' ? admin : admin._id) === String(loggedUserDetails._id)\n ) || false;\n }, [info, loggedUserDetails]);\n\n const isOwner = useMemo(() => {\n if (!info || !loggedUserDetails) return false;\n\n // Handle owner being either a string ID or a populated object like { _id: \"...\", name: \"...\" }\n let ownerId = null;\n if (info.owner) {\n ownerId = typeof info.owner === 'object' && info.owner !== null ?\n (info.owner._id || info.owner.id) :\n info.owner;\n }\n\n return String(ownerId) === String(loggedUserDetails._id);\n }, [info, loggedUserDetails]);\n\n const permissions: GroupPermissions | null = info?.groupPermissions || null;\n\n const userPermissions = useMemo(() => {\n return {\n canSendMessage: isOwner || isAdmin || !permissions?.onlyAdminCanSendMessage,\n canEditInfo: isOwner || isAdmin || !permissions?.onlyAdminCanEditInfo,\n canAddMember: isOwner || !!permissions?.allowMemberAdd,\n canRemoveMember: isOwner || !!permissions?.allowMemberRemove,\n canEditMessage: isOwner || isAdmin || !!permissions?.senderCanEditMessage,\n // You can add more derived permissions here as needed\n };\n }, [isOwner, isAdmin, permissions]);\n\n return {\n info,\n permissions,\n userPermissions,\n isAdmin,\n isOwner,\n loggedUserDetails\n };\n};\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { Calendar, Camera, Loader2, Mail, Save, User, Users } from \"lucide-react\";\nimport {\n Sheet,\n SheetContent,\n SheetHeader,\n SheetTitle,\n SheetDescription,\n} from \"../../ui/sheet\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"../../ui/avatar\";\nimport { Input } from \"../../ui/input\";\nimport { Textarea } from \"../../ui/textarea\";\nimport { Button } from \"../../ui/button\";\nimport { useGroupInfo } from \"../../hooks/useGroupInfo\";\nimport useStore from '../../store/useStore';\nimport { IConversationInfo } from '../../store/types/store.types';\n\ninterface ChannelDetailsDrawerProps {\n isOpen: boolean;\n onOpenChange: (open: boolean) => void;\n activeChannel: any;\n conversationInfo: IConversationInfo | null;\n}\n\nconst pickDate = (...values: unknown[]) => {\n for (const value of values) {\n if (!value) continue;\n const date = value instanceof Date ? value : new Date(String(value));\n if (!Number.isNaN(date.getTime())) return date;\n }\n return null;\n};\n\nconst ChannelDetailsDrawer = ({ isOpen, onOpenChange, activeChannel, conversationInfo }: ChannelDetailsDrawerProps) => {\n const updateGroupDetails = useStore((s) => s.updateGroupDetails);\n const conversations = useStore((s) => s.conversations);\n const allUsers = useStore((s) => s.allUsers);\n const loggedUserDetails = useStore((s) => s.loggedUserDetails);\n const storeActiveConversationId = useStore((s) => s.activeConversationId);\n\n const conversationId =\n conversationInfo?._id ||\n activeChannel?.conversationId ||\n storeActiveConversationId ||\n null;\n\n const { userPermissions } = useGroupInfo(conversationId);\n\n const messagesByConversation = useStore((s) => s.messagesByConversation);\n\n const storeConversation = useMemo(\n () => conversations.find((c) => conversationId && String(c._id) === String(conversationId)),\n [conversations, conversationId]\n );\n\n const isGroupChannel = useMemo(() => {\n if (storeConversation) {\n return storeConversation.conversationType === \"group\" || !!storeConversation.isGroup;\n }\n return !!activeChannel?.isGroup;\n }, [storeConversation, activeChannel?.isGroup]);\n\n const otherParticipantId = useMemo(() => {\n if (isGroupChannel || !storeConversation) return activeChannel?.id || null;\n\n const other = storeConversation.participants?.find(\n (p: any) => String(p._id || p) !== String(loggedUserDetails?._id)\n );\n return String(other?._id || other || activeChannel?.id || \"\");\n }, [isGroupChannel, storeConversation, loggedUserDetails?._id, activeChannel?.id]);\n\n const otherUser = useMemo(() => {\n if (isGroupChannel || !otherParticipantId) return null;\n return allUsers.find((u) => String(u._id) === String(otherParticipantId)) || null;\n }, [isGroupChannel, otherParticipantId, allUsers]);\n\n const resolvedCreatedAt = useMemo(\n () =>\n pickDate(\n conversationInfo?.createdAt,\n conversationInfo?.updatedAt,\n (storeConversation as any)?.createdAt,\n (storeConversation as any)?.created_at,\n (storeConversation as any)?.updatedAt,\n (storeConversation as any)?.lastMessage?.createdAt,\n otherUser?.createdAt,\n conversationId ? messagesByConversation[conversationId]?.[0]?.createdAt : null\n ),\n [conversationInfo, storeConversation, otherUser, conversationId, messagesByConversation]\n );\n\n const [detailsLoading, setDetailsLoading] = useState(false);\n const fetchStartedRef = useRef<string | null>(null);\n\n useEffect(() => {\n if (!isOpen) {\n fetchStartedRef.current = null;\n setDetailsLoading(false);\n return;\n }\n\n useStore.getState().fetchAllUsers();\n\n if (resolvedCreatedAt || !conversationId) {\n setDetailsLoading(false);\n return;\n }\n\n if (fetchStartedRef.current === conversationId) return;\n fetchStartedRef.current = conversationId;\n\n let cancelled = false;\n setDetailsLoading(true);\n\n const timeout = window.setTimeout(() => {\n if (!cancelled) setDetailsLoading(false);\n }, 2500);\n\n useStore\n .getState()\n .fetchConversationInfo(conversationId)\n .finally(() => {\n if (!cancelled) {\n setDetailsLoading(false);\n window.clearTimeout(timeout);\n }\n });\n\n return () => {\n cancelled = true;\n window.clearTimeout(timeout);\n };\n }, [isOpen, conversationId, resolvedCreatedAt]);\n\n const canEditInfo = activeChannel ? userPermissions.canEditInfo : false;\n\n const [isEditing, setIsEditing] = useState(false);\n const [name, setName] = useState('');\n const [description, setDescription] = useState('');\n const [image, setImage] = useState<string | null>(null);\n const [isSaving, setIsSaving] = useState(false);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (conversationInfo) {\n setName(conversationInfo.groupName || activeChannel?.name || '');\n setDescription(conversationInfo.groupDescription || '');\n setImage(conversationInfo.image || activeChannel?.image || null);\n } else if (activeChannel) {\n setName(activeChannel.name || '');\n setDescription('');\n setImage(activeChannel.image || null);\n }\n }, [conversationInfo, activeChannel]);\n\n if (!activeChannel) return null;\n\n const handleImageChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (file) {\n const reader = new FileReader();\n reader.onloadend = () => {\n setImage(reader.result as string);\n };\n reader.readAsDataURL(file);\n }\n };\n\n const handleSave = async () => {\n if (!activeChannel.conversationId) return;\n setIsSaving(true);\n try {\n await updateGroupDetails(activeChannel.conversationId, {\n groupName: name,\n groupDescription: description,\n groupImage: image || undefined\n });\n setIsEditing(false);\n } finally {\n setIsSaving(false);\n }\n };\n\n const formatDate = (date: Date) =>\n date.toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric'\n });\n\n const createdOnLabel = resolvedCreatedAt\n ? formatDate(resolvedCreatedAt)\n : detailsLoading\n ? \"Loading...\"\n : \"Not available\";\n\n return (\n <Sheet open={isOpen} onOpenChange={onOpenChange}>\n <SheetContent className=\"w-full sm:max-w-md flex flex-col h-full p-0\">\n <div className=\"p-6 border-b\">\n <SheetHeader>\n <SheetTitle className=\"text-xl font-bold\">Channel Details</SheetTitle>\n <SheetDescription>Background info and settings.</SheetDescription>\n </SheetHeader>\n </div>\n\n <div className=\"flex-1 overflow-y-auto\">\n <div className=\"flex flex-col items-center gap-5 p-8 bg-gradient-to-b from-gray-50/50 to-white border-b border-border/40\">\n <div className=\"relative group\">\n <input\n type=\"file\"\n ref={fileInputRef}\n className=\"hidden\"\n accept=\"image/*\"\n onChange={handleImageChange}\n />\n <Avatar className=\"h-28 w-28 border-2 border-white shadow-xl ring-1 ring-black/5\">\n <AvatarImage src={image || undefined} alt={name} />\n <AvatarFallback className=\"bg-[#f3f4f6] text-[#111827] font-bold text-4xl\">\n {(name || activeChannel.name).charAt(0).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n {isGroupChannel && canEditInfo && (\n <button\n onClick={() => fileInputRef.current?.click()}\n className=\"absolute bottom-1 right-1 p-2 bg-primary text-white rounded-full shadow-lg hover:scale-110 transition-transform flex items-center justify-center cursor-pointer\"\n title=\"Change group avatar\"\n >\n <Camera size={16} />\n </button>\n )}\n </div>\n\n {isEditing ? (\n <div className=\"w-full space-y-4 animate-in fade-in slide-in-from-top-2 duration-300\">\n <div className=\"space-y-1.5 px-2\">\n <label className=\"text-[10px] font-black text-muted-foreground uppercase tracking-wider\">Group Name</label>\n <Input\n value={name}\n onChange={(e) => setName(e.target.value)}\n className=\"h-11 font-bold shadow-sm focus-visible:ring-1\"\n placeholder=\"Enter group name\"\n />\n </div>\n <div className=\"space-y-1.5 px-2\">\n <label className=\"text-[10px] font-black text-muted-foreground uppercase tracking-wider\">Description</label>\n <Textarea\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n className=\"min-h-[100px] resize-none shadow-sm focus-visible:ring-1 text-sm font-medium\"\n placeholder=\"What is this group about?\"\n />\n </div>\n <div className=\"flex gap-2 px-2 pt-2\">\n <Button variant=\"outline\" className=\"flex-1 font-bold\" onClick={() => setIsEditing(false)}>Cancel</Button>\n <Button className=\"flex-1 font-bold\" onClick={handleSave} disabled={isSaving}>\n {isSaving ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <Save className=\"mr-2 h-4 w-4\" />}\n Save\n </Button>\n </div>\n </div>\n ) : (\n <div className=\"text-center w-full px-4\">\n <h2 className=\"text-2xl font-black text-[#111827] tracking-tight\">{name || activeChannel.name}</h2>\n <p className=\"text-sm font-medium text-muted-foreground mt-1.5 px-4 line-clamp-3\">\n {description || (isGroupChannel\n ? \"No description set for this group.\"\n : `Direct message with ${activeChannel.name}.`)}\n </p>\n {isGroupChannel && canEditInfo && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"mt-4 text-xs font-bold text-primary hover:text-primary hover:bg-primary/5 uppercase tracking-widest\"\n onClick={() => setIsEditing(true)}\n >\n Edit Details\n </Button>\n )}\n </div>\n )}\n </div>\n\n <div className=\"p-6 space-y-6\">\n <div className=\"grid grid-cols-1 gap-4\">\n <div className=\"flex items-center gap-4 p-4 rounded-2xl bg-gray-50 border border-gray-100/50\">\n <div className=\"p-2.5 bg-white shadow-sm rounded-xl text-muted-foreground\">\n <Calendar size={18} />\n </div>\n <div className=\"flex flex-col\">\n <span className=\"text-[10px] font-black text-muted-foreground uppercase tracking-widest\">Created On</span>\n <span className=\"text-sm font-bold text-[#111827]\">{createdOnLabel}</span>\n </div>\n </div>\n\n {!isGroupChannel && (otherUser?.email || activeChannel?.email) && (\n <div className=\"flex items-center gap-4 p-4 rounded-2xl bg-gray-50 border border-gray-100/50\">\n <div className=\"p-2.5 bg-white shadow-sm rounded-xl text-muted-foreground\">\n <Mail size={18} />\n </div>\n <div className=\"flex flex-col\">\n <span className=\"text-[10px] font-black text-muted-foreground uppercase tracking-widest\">Email</span>\n <span className=\"text-sm font-bold text-[#111827]\">\n {otherUser?.email || activeChannel?.email}\n </span>\n </div>\n </div>\n )}\n\n {isGroupChannel && (\n <>\n <div className=\"flex items-center gap-4 p-4 rounded-2xl bg-gray-50 border border-gray-100/50\">\n <div className=\"p-2.5 bg-white shadow-sm rounded-xl text-muted-foreground\">\n <User size={18} />\n </div>\n <div className=\"flex flex-col\">\n <span className=\"text-[10px] font-black text-muted-foreground uppercase tracking-widest\">Group Owner</span>\n <span className=\"text-sm font-bold text-[#111827]\">\n {conversationInfo?.owner?.name || (detailsLoading ? \"Loading...\" : \"Not available\")}\n </span>\n </div>\n </div>\n\n <div className=\"flex flex-col gap-4 p-4 rounded-2xl bg-gray-50 border border-gray-100/50\">\n <div className=\"flex items-center gap-4\">\n <div className=\"p-2.5 bg-white shadow-sm rounded-xl text-muted-foreground\">\n <Users size={18} />\n </div>\n <div className=\"flex flex-col\">\n <span className=\"text-[10px] font-black text-muted-foreground uppercase tracking-widest\">Participants</span>\n <span className=\"text-sm font-bold text-[#111827]\">\n {conversationInfo?.participants?.length || storeConversation?.participants?.length || 0} Members\n </span>\n </div>\n </div>\n\n <div className=\"pt-2 flex flex-wrap gap-2\">\n {(conversationInfo?.participants || storeConversation?.participants || []).map((p: any, index: number) => {\n const pId = typeof p === 'string' ? p : p._id;\n const pName = typeof p === 'string' ? \"Unknown\" : p.name;\n if (!pId) return null;\n\n return (\n <div\n key={`${pId}-${index}`}\n className=\"px-3 py-1 bg-white border border-gray-100 rounded-lg shadow-sm text-[11px] font-bold text-[#374151] flex items-center gap-1.5\"\n >\n <div className=\"size-1.5 rounded-full bg-green-500\" />\n {pName}\n </div>\n );\n })}\n </div>\n </div>\n </>\n )}\n </div>\n </div>\n </div>\n </SheetContent>\n </Sheet>\n );\n};\n\nexport default ChannelDetailsDrawer;\n","\nimport * as React from \"react\"\nimport { Switch as SwitchPrimitive } from \"radix-ui\"\nimport { cn } from \"../lib/utils\"\n\n\nfunction Switch({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n \"peer group/switch inline-flex shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-[1.15rem] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n \"pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0 dark:data-[state=checked]:bg-primary-foreground dark:data-[state=unchecked]:bg-foreground\"\n )}\n />\n </SwitchPrimitive.Root>\n )\n}\n\nexport { Switch }\n","\nimport React, { useState, useEffect } from 'react';\nimport { UserKey, Save, Loader2 } from \"lucide-react\";\nimport {\n Sheet,\n SheetContent,\n SheetHeader,\n SheetTitle,\n SheetDescription,\n} from \"../../ui/sheet\";\nimport { Switch } from \"../../ui/switch\";\nimport { Button } from \"../../ui/button\";\nimport useStore from '../../store/useStore';\nimport { GroupPermissions, IConversationInfo } from '../../store/types/store.types';\n\ninterface PermissionDrawerProps {\n isOpen: boolean;\n onOpenChange: (open: boolean) => void;\n conversationId: string | null | undefined;\n conversationInfo: IConversationInfo | null;\n}\n\nconst PermissionDrawer = ({ isOpen, onOpenChange, conversationId, conversationInfo }: PermissionDrawerProps) => {\n const updateGroupPermissions = useStore((s) => s.updateGroupPermissions);\n const [permissions, setPermissions] = useState<GroupPermissions | null>(null);\n const [isSaving, setIsSaving] = useState(false);\n\n useEffect(() => {\n if (conversationInfo?.groupPermissions) {\n setPermissions(conversationInfo.groupPermissions);\n }\n }, [conversationInfo]);\n\n if (!conversationId || !permissions) return null;\n\n const handleToggle = (key: keyof GroupPermissions) => {\n setPermissions(prev => prev ? { ...prev, [key]: !prev[key] } : null);\n };\n\n const handleSave = async () => {\n if (!conversationId || !permissions) return;\n setIsSaving(true);\n try {\n await updateGroupPermissions(conversationId, permissions);\n onOpenChange(false);\n } finally {\n setIsSaving(false);\n }\n };\n\n const permissionItems = [\n { key: 'onlyAdminCanSendMessage', label: 'Only Admin Can Send Message', desc: 'Restricts message sending to group administrators only.' },\n { key: 'onlyAdminCanEditInfo', label: 'Only Admin Can Edit Info', desc: 'Only admins can change group name, description, and avatar.' },\n { key: 'senderCanEditMessage', label: 'Sender Can Edit Message', desc: 'Allows users to edit their own sent messages.' },\n { key: 'allowMemberAdd', label: 'Only Admin Can Add Members', desc: 'Only administrators can add new participants to the group.', inverted: true },\n { key: 'allowMemberRemove', label: 'Only Admin Can Remove Members', desc: 'Only administrators can remove other participants.', inverted: true },\n { key: 'moderationEnabled', label: 'Moderation Enabled', desc: 'Enables advanced message moderation features.' },\n ];\n\n return (\n <Sheet open={isOpen} onOpenChange={onOpenChange}>\n <SheetContent className=\"w-full sm:max-w-md flex flex-col h-full p-0\">\n <div className=\"p-6 border-b\">\n <SheetHeader>\n <div className=\"flex items-center gap-3 mb-2\">\n <div className=\"p-2 bg-primary/10 rounded-lg text-primary\">\n <UserKey size={20} />\n </div>\n <SheetTitle className=\"text-xl font-bold\">Group Permissions</SheetTitle>\n </div>\n <SheetDescription>\n Manage what members can and cannot do in this group.\n </SheetDescription>\n </SheetHeader>\n </div>\n\n <div className=\"flex-1 overflow-y-auto p-6 space-y-6\">\n {permissionItems.map((item) => (\n <div key={item.key} className=\"flex items-start justify-between gap-4\">\n <div className=\"space-y-0.5\">\n <p className=\"text-sm font-semibold text-[#111827]\">{item.label}</p>\n <p className=\"text-xs text-muted-foreground leading-relaxed\">\n {item.desc}\n </p>\n </div>\n <Switch\n checked={\n 'inverted' in item && item.inverted\n ? !permissions[item.key as keyof GroupPermissions]\n : permissions[item.key as keyof GroupPermissions]\n }\n onCheckedChange={() => handleToggle(item.key as keyof GroupPermissions)}\n />\n </div>\n ))}\n </div>\n\n <div className=\"p-6 border-t bg-gray-50/50\">\n <Button \n className=\"w-full h-11 font-bold shadow-sm\" \n onClick={handleSave}\n disabled={isSaving}\n >\n {isSaving ? (\n <>\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n Saving Changes...\n </>\n ) : (\n <>\n <Save className=\"mr-2 h-4 w-4\" />\n Save Permissions\n </>\n )}\n </Button>\n </div>\n </SheetContent>\n </Sheet>\n );\n};\n\nexport default PermissionDrawer;\n","\nimport React, { useState, useMemo } from 'react';\nimport { ShieldUser, Mail, Plus, UserMinus, Search, Loader2 } from \"lucide-react\";\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"../../ui/avatar\";\nimport { Button } from \"../../ui/button\";\nimport { Input } from \"../../ui/input\";\nimport { Sheet, SheetContent,\n SheetHeader,\n SheetTitle,\n SheetDescription, } from '../../ui/sheet';\nimport useStore from '../../store/useStore';\nimport { IConversationInfo } from '../../store/types/store.types';\nimport { cn } from '../../lib/utils';\nimport { useGroupInfo } from '../../hooks/useGroupInfo';\n\ninterface AdminsDrawerProps {\n isOpen: boolean;\n onOpenChange: (open: boolean) => void;\n conversationId: string | null | undefined;\n conversationInfo: IConversationInfo | null;\n}\n\nconst AdminsDrawer = ({ isOpen, onOpenChange, conversationId, conversationInfo }: AdminsDrawerProps) => {\n const [searchQuery, setSearchQuery] = useState('');\n const [isManaging, setIsManaging] = useState<string | null>(null);\n\n const manageGroupAdmins = useStore((s) => s.manageGroupAdmins);\n const loggedUserDetails = useStore((s) => s.loggedUserDetails);\n\n const allParticipants = conversationInfo?.participants || [];\n const admins = conversationInfo?.groupAdmins || [];\n\n const { isOwner: hookIsOwner } = useGroupInfo(conversationId);\n\n // Filter participants based on search query\n const filteredParticipants = useMemo(() => {\n if (!searchQuery.trim()) return allParticipants;\n return allParticipants.filter(p => \n p.name?.toLowerCase().includes(searchQuery.toLowerCase()) || \n p.email?.toLowerCase().includes(searchQuery.toLowerCase())\n );\n }, [allParticipants, searchQuery]);\n\n if (!conversationId || !conversationInfo) return null;\n\n const handleManageAdmin = async (userId: string, type: 'add' | 'remove') => {\n setIsManaging(userId);\n try {\n await manageGroupAdmins({\n conversationId,\n groupAdmins: [userId],\n type\n });\n } finally {\n setIsManaging(null);\n }\n };\n\n const isAdmin = (userId: string) => admins.some(a => (typeof a === 'string' ? a : a._id) === userId);\n \n // Check if a specific user in the list is the owner. \n // We check info.owner for rendering other participants correctly.\n const isOwner = (userId: string) => {\n let oid = null;\n if (conversationInfo?.owner) {\n oid = typeof conversationInfo.owner === 'object' && conversationInfo.owner !== null ? \n (conversationInfo.owner._id || conversationInfo.owner.id) : \n conversationInfo.owner;\n }\n return String(userId) === String(oid);\n };\n const isMe = (userId: string) => String(userId) === String(loggedUserDetails?._id);\n\n // This checks if the CURRENT user is the owner, used to grant admin perms\n const iAmOwner = hookIsOwner;\n\n return (\n <Sheet open={isOpen} onOpenChange={onOpenChange}>\n <SheetContent className=\"w-full sm:max-w-md flex flex-col h-full p-0\">\n <div className=\"p-6 border-b bg-white z-10\">\n <SheetHeader>\n <div className=\"flex items-center gap-3 mb-2\">\n <div className=\"p-2 bg-red-50 text-red-600 rounded-lg\">\n <ShieldUser size={20} />\n </div>\n <SheetTitle className=\"text-xl font-bold\">Group Administrators</SheetTitle>\n </div>\n <SheetDescription>\n Manage who can adjust group settings and members.\n </SheetDescription>\n </SheetHeader>\n\n <div className=\"mt-6 relative group\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 size-4 text-muted-foreground group-focus-within:text-primary transition-colors\" />\n <Input \n placeholder=\"Search participants...\" \n className=\"pl-9 h-11 bg-gray-50 border-none rounded-xl font-bold text-sm focus-visible:ring-1\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n />\n </div>\n </div>\n\n <div className=\"flex-1 overflow-y-auto p-4 space-y-2\">\n <div className=\"px-2 pb-2\">\n <h3 className=\"text-[10px] font-black text-muted-foreground uppercase tracking-widest\">\n {searchQuery ? 'Search Results' : 'All Participants'} ({filteredParticipants.length})\n </h3>\n </div>\n\n {filteredParticipants.map((member, index) => {\n const memberId = typeof member === 'string' ? member : member._id;\n const memberName = typeof member === 'string' ? \"Unknown User\" : member.name;\n const memberEmail = typeof member === 'string' ? \"\" : member.email;\n const memberImage = typeof member === 'string' ? undefined : member.image;\n\n if (!memberId) return null;\n\n const userIsAdmin = isAdmin(memberId);\n const userIsOwner = isOwner(memberId);\n const userIsManaging = isManaging === memberId;\n\n return (\n <div key={`${memberId}-${index}`} className=\"flex items-center justify-between p-3 rounded-xl hover:bg-gray-50 transition-colors group\">\n <div className=\"flex items-center gap-3\">\n <Avatar className={cn(\n \"h-10 w-10 border ring-2 transition-all\",\n userIsAdmin ? \"border-red-100 ring-red-50/50\" : \"border-gray-100 ring-transparent\"\n )}>\n <AvatarImage src={memberImage} alt={memberName} />\n <AvatarFallback className={cn(\n \"font-bold\",\n userIsAdmin ? \"bg-red-50 text-red-700\" : \"bg-gray-100 text-gray-600\"\n )}>\n {memberName?.charAt(0).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n <div className=\"flex flex-col\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-semibold text-[#111827]\">{memberName}</span>\n {userIsOwner && (\n <span className=\"px-1.5 py-0.5 bg-amber-50 text-amber-600 text-[9px] font-black uppercase rounded border border-amber-100\">Owner</span>\n )}\n {userIsAdmin && !userIsOwner && (\n <span className=\"px-1.5 py-0.5 bg-red-50 text-red-600 text-[9px] font-black uppercase rounded border border-red-100\">Admin</span>\n )}\n </div>\n <span className=\"text-[11px] text-muted-foreground flex items-center gap-1\">\n <Mail size={10} />\n {memberEmail || \"No email\"}\n </span>\n </div>\n </div>\n \n {!userIsOwner && (\n <Button\n size=\"icon\"\n variant=\"ghost\"\n disabled={userIsManaging}\n onClick={() => handleManageAdmin(memberId, userIsAdmin ? 'remove' : 'add')}\n className={cn(\n \"size-9 rounded-full transition-all\",\n userIsAdmin \n ? \"text-red-500 hover:bg-red-50 hover:text-red-600\" \n : \"text-primary hover:bg-primary/5 hover:text-primary\"\n )}\n >\n {userIsManaging ? (\n <Loader2 size={16} className=\"animate-spin\" />\n ) : userIsAdmin ? (\n <UserMinus size={16} />\n ) : (\n <Plus size={16} />\n )}\n </Button>\n )}\n </div>\n );\n })}\n\n {filteredParticipants.length === 0 && (\n <div className=\"text-center py-12\">\n <ShieldUser className=\"mx-auto h-12 w-12 text-gray-200 mb-3\" />\n <p className=\"text-sm font-bold text-gray-400\">No participants found</p>\n </div>\n )}\n </div>\n </SheetContent>\n </Sheet>\n );\n};\n\nexport default AdminsDrawer;\n","\nimport React, { useState, useMemo } from 'react';\nimport { Users, ShieldCheck, Mail, UserPlus, UserMinus, Search, Loader2 } from \"lucide-react\";\nimport {\n Sheet,\n SheetContent,\n SheetHeader,\n SheetTitle,\n SheetDescription,\n} from \"../../ui/sheet\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"../../ui/avatar\";\nimport { Input } from \"../../ui/input\";\nimport { Button } from \"../../ui/button\";\nimport { useGroupInfo } from \"../../hooks/useGroupInfo\";\nimport { IConversationInfo } from '../../store/types/store.types';\nimport useStore from '../../store/useStore';\n\ninterface MembersDrawerProps {\n isOpen: boolean;\n onOpenChange: (open: boolean) => void;\n conversationId: string | null | undefined;\n conversationInfo: IConversationInfo | null;\n}\n\nconst MembersDrawer = ({ isOpen, onOpenChange, conversationId, conversationInfo }: MembersDrawerProps) => {\n const [searchQuery, setSearchQuery] = useState('');\n const [isManaging, setIsManaging] = useState<string | null>(null);\n\n const allUsers = useStore((s) => s.allUsers);\n const manageGroupMembers = useStore((s) => s.manageGroupMembers);\n const loggedUserDetails = useStore((s) => s.loggedUserDetails);\n\n // Filter users based on search query\n const filteredUsers = useMemo(() => {\n if (!searchQuery.trim()) return allUsers;\n return allUsers.filter(u =>\n u.name?.toLowerCase().includes(searchQuery.toLowerCase()) ||\n u.email?.toLowerCase().includes(searchQuery.toLowerCase())\n );\n }, [allUsers, searchQuery]);\n\n const { userPermissions } = useGroupInfo(conversationId);\n\n if (!conversationId || !conversationInfo) return null;\n\n const participants = conversationInfo.participants || [];\n const admins = conversationInfo.groupAdmins || [];\n\n let ownerId: string | null = null;\n if (conversationInfo.owner) {\n ownerId = typeof conversationInfo.owner === 'object' && conversationInfo.owner !== null ?\n (conversationInfo.owner._id || conversationInfo.owner.id) :\n conversationInfo.owner;\n }\n\n const canAdd = userPermissions.canAddMember;\n const canRemove = userPermissions.canRemoveMember;\n\n const handleManageMember = async (userId: string, type: 'add' | 'remove') => {\n setIsManaging(userId);\n try {\n await manageGroupMembers({\n conversationId,\n participants: [userId],\n type\n });\n } finally {\n setIsManaging(null);\n }\n };\n\n return (\n <Sheet open={isOpen} onOpenChange={onOpenChange}>\n <SheetContent className=\"w-full sm:max-w-md flex flex-col h-full p-0\">\n <div className=\"p-6 border-b space-y-4\">\n <SheetHeader>\n <div className=\"flex items-center gap-3\">\n <div className=\"p-2 bg-blue-50 text-blue-600 rounded-lg\">\n <Users size={20} />\n </div>\n <SheetTitle className=\"text-xl font-bold\">Group Management</SheetTitle>\n </div>\n <SheetDescription>\n Manage members and invite new people.\n </SheetDescription>\n </SheetHeader>\n\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 size-4 text-muted-foreground\" />\n <Input\n placeholder=\"Search users...\"\n className=\"pl-9 h-10 bg-gray-50 border-none rounded-xl text-sm font-medium\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n />\n </div>\n </div>\n\n <div className=\"flex-1 overflow-y-auto px-4 py-4 space-y-6\">\n {/* Current Members Section */}\n {!searchQuery && (\n <div className=\"space-y-3\">\n <h3 className=\"text-[10px] font-black text-muted-foreground uppercase tracking-widest px-2\">\n Current Members ({participants.length})\n </h3>\n <div className=\"space-y-1\">\n {participants.map((member, index) => {\n const memberId = typeof member === 'string' ? member : member._id;\n const memberName = typeof member === 'string' ? \"Unknown User\" : member.name;\n const memberEmail = typeof member === 'string' ? \"\" : member.email;\n const memberImage = typeof member === 'string' ? undefined : member.image;\n \n if (!memberId) return null;\n\n const isAdmin = admins.some(a => (typeof a === 'string' ? a : a._id) === memberId);\n const isOwner = memberId === ownerId;\n const isMe = memberId === loggedUserDetails?._id;\n\n return (\n <div key={`${memberId}-${index}`} className=\"flex items-center justify-between p-3 rounded-2xl hover:bg-gray-50 transition-all group\">\n <div className=\"flex items-center gap-3\">\n <Avatar className=\"h-10 w-10 border border-border/50\">\n <AvatarImage src={memberImage} alt={memberName} />\n <AvatarFallback className=\"bg-muted text-muted-foreground font-bold\">\n {memberName?.charAt(0).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n <div className=\"flex flex-col\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-bold text-[#111827]\">{memberName}</span>\n {isOwner && <span className=\"px-1.5 py-0.5 bg-amber-50 text-amber-600 text-[9px] font-black uppercase rounded border border-amber-100\">Owner</span>}\n </div>\n <span className=\"text-[11px] text-muted-foreground font-medium truncate max-w-[150px]\">{memberEmail}</span>\n </div>\n </div>\n\n <div className=\"flex items-center gap-2\">\n {isAdmin && !isOwner && <ShieldCheck size={14} className=\"text-blue-500\" />}\n {!isOwner && !isMe && canRemove && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 w-8 p-0 rounded-full hover:bg-red-50 hover:text-red-600 transition-colors\"\n onClick={() => handleManageMember(memberId, 'remove')}\n disabled={isManaging === memberId}\n >\n {isManaging === memberId ? (\n <Loader2 size={14} className=\"animate-spin\" />\n ) : (\n <UserMinus size={16} />\n )}\n </Button>\n )}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n )}\n\n {/* Search Results / All Users */}\n <div className=\"space-y-3 pb-8\">\n <h3 className=\"text-[10px] font-black text-muted-foreground uppercase tracking-widest px-2\">\n {searchQuery ? \"Search Results\" : \"Add New Members\"}\n </h3>\n <div className=\"space-y-1\">\n {filteredUsers.map((user, index) => {\n const isAlreadyMember = participants.some(p => {\n const pId = typeof p === 'string' ? p : p._id;\n return pId === user._id;\n });\n if (!searchQuery && isAlreadyMember) return null; // Only show non-members when not searching\n\n return (\n <div key={`${user._id}-${index}`} className=\"flex items-center justify-between p-3 rounded-2xl hover:bg-gray-50 transition-all border border-transparent hover:border-gray-100\">\n <div className=\"flex items-center gap-3\">\n <Avatar className=\"h-10 w-10 border border-border/50\">\n <AvatarImage src={user.image} alt={user.name} />\n <AvatarFallback className=\"bg-[#f3f4f6] text-[#111827] font-bold\">\n {user.name?.charAt(0).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n <div className=\"flex flex-col text-left\">\n <span className=\"text-sm font-bold text-[#111827] truncate max-w-[150px]\">{user.name}</span>\n <span className=\"text-[11px] text-muted-foreground font-medium truncate max-w-[150px]\">{user.email}</span>\n </div>\n </div>\n\n {isAlreadyMember ? (\n canRemove && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-9 w-9 p-0 rounded-xl hover:bg-red-50 hover:text-red-600 text-muted-foreground transition-all\"\n onClick={() => handleManageMember(user._id, 'remove')}\n disabled={isManaging === user._id}\n title=\"Remove from group\"\n >\n {isManaging === user._id ? (\n <Loader2 size={16} className=\"animate-spin\" />\n ) : (\n <UserMinus size={18} />\n )}\n </Button>\n )\n ) : (\n canAdd && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-9 w-9 p-0 rounded-xl hover:bg-blue-50 hover:text-blue-600 text-muted-foreground transition-all\"\n onClick={() => handleManageMember(user._id, 'add')}\n disabled={isManaging === user._id}\n title=\"Add to group\"\n >\n {isManaging === user._id ? (\n <Loader2 size={16} className=\"animate-spin\" />\n ) : (\n <UserPlus size={18} />\n )}\n </Button>\n )\n )}\n </div>\n );\n })}\n </div>\n </div>\n </div>\n </SheetContent>\n </Sheet>\n );\n};\n\nexport default MembersDrawer;\n","\nimport * as React from \"react\"\nimport { AlertDialog as AlertDialogPrimitive } from \"radix-ui\"\nimport { cn } from \"../lib/utils\"\nimport { Button } from \"./button\"\n\n\nfunction AlertDialog({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />\n}\n\nfunction AlertDialogTrigger({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return (\n <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n )\n}\n\nfunction AlertDialogPortal({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n return (\n <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\n )\n}\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n return (\n <AlertDialogPrimitive.Overlay\n data-slot=\"alert-dialog-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogContent({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Content> & {\n size?: \"default\" | \"sm\"\n}) {\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n data-slot=\"alert-dialog-content\"\n data-size={size}\n className={cn(\n \"group/alert-dialog-content fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 data-[size=sm]:max-w-xs data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[size=default]:sm:max-w-lg\",\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n )\n}\n\nfunction AlertDialogHeader({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\n \"grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogFooter({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\n \"text-lg font-semibold sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogMedia({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-media\"\n className={cn(\n \"mb-2 inline-flex size-16 items-center justify-center rounded-md bg-muted sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogAction({\n className,\n variant = \"default\",\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Action> &\n Pick<React.ComponentProps<typeof Button>, \"variant\" | \"size\">) {\n return (\n <Button variant={variant} size={size} asChild>\n <AlertDialogPrimitive.Action\n data-slot=\"alert-dialog-action\"\n className={cn(className)}\n {...props}\n />\n </Button>\n )\n}\n\nfunction AlertDialogCancel({\n className,\n variant = \"outline\",\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel> &\n Pick<React.ComponentProps<typeof Button>, \"variant\" | \"size\">) {\n return (\n <Button variant={variant} size={size} asChild>\n <AlertDialogPrimitive.Cancel\n data-slot=\"alert-dialog-cancel\"\n className={cn(className)}\n {...props}\n />\n </Button>\n )\n}\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n}\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"../lib/utils\"\n\n\nconst alertVariants = cva(\n \"relative grid w-full grid-cols-[0_1fr] items-start gap-y-0.5 rounded-lg border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current\",\n {\n variants: {\n variant: {\n default: \"bg-card text-card-foreground\",\n destructive:\n \"bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 [&>svg]:text-current\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Alert({\n className,\n variant,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof alertVariants>) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn(\n \"col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDescription({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n \"col-start-2 grid justify-items-start gap-1 text-sm text-muted-foreground [&_p]:leading-relaxed\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Alert, AlertTitle, AlertDescription }\n","import React from \"react\";\nimport { \n MessageSquareX, \n Trash2, \n AlertCircle,\n Ban\n} from \"lucide-react\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from \"../../ui/alert-dialog\";\nimport {\n Alert,\n AlertDescription,\n AlertTitle,\n} from \"../../ui/alert\";\n\ninterface ChatActionModalProps {\n isOpen: boolean;\n onOpenChange: (open: boolean) => void;\n title: string;\n description: string;\n warningTitle: string;\n warningDescription: string;\n actionButtonText: string;\n loadingText: string;\n isLoading: boolean;\n onAction: () => void;\n type: 'clear' | 'delete' | 'block';\n}\n\nconst ChatActionModal = ({\n isOpen,\n onOpenChange,\n title,\n description,\n warningTitle,\n warningDescription,\n actionButtonText,\n loadingText,\n isLoading,\n onAction,\n type\n}: ChatActionModalProps) => {\n const Icon = type === 'clear' ? MessageSquareX : type === 'block' ? Ban : Trash2;\n console.log(\"Rendering ChatActionModal with type:\", type,isOpen);\n\n return (\n <AlertDialog\n open={isOpen}\n onOpenChange={(open) => {\n if (isLoading) return;\n onOpenChange(open);\n }}\n >\n <AlertDialogContent className=\"max-w-[400px] p-0 overflow-hidden border-none shadow-2xl rounded-2xl\">\n <div className=\"px-6 pt-8 pb-6 flex flex-col items-center justify-center\">\n <div className=\"mb-4 rounded-full bg-red-100 p-3 ring-8 ring-red-50\">\n <Icon className=\"h-8 w-8 text-red-600\" />\n </div>\n\n <AlertDialogHeader className=\"space-y-2\">\n <AlertDialogTitle className=\"text-2xl font-bold tracking-tight text-center\">\n {title}\n </AlertDialogTitle>\n\n <AlertDialogDescription className=\"text-center text-base text-[#374151]\">\n {description}\n </AlertDialogDescription>\n </AlertDialogHeader>\n\n <Alert\n variant=\"destructive\"\n className=\"mt-6 border-red-200 bg-red-50 text-left w-full\"\n >\n <AlertCircle className=\"h-4 w-4 stroke-red-600\" />\n <AlertTitle className=\"text-red-800 font-semibold tracking-tight\">\n {warningTitle}\n </AlertTitle>\n <AlertDescription className=\"text-red-700/90 text-sm leading-snug\">\n {warningDescription}\n </AlertDescription>\n </Alert>\n </div>\n\n <AlertDialogFooter className=\"bg-gray-50 border-t border-gray-100 px-6 py-4 flex flex-row items-center gap-3 sm:justify-between w-full\">\n <AlertDialogCancel\n disabled={isLoading}\n className=\"mt-0 flex-1 border-gray-300 shadow-sm\"\n >\n Cancel\n </AlertDialogCancel>\n\n <AlertDialogAction\n onClick={(e) => {\n e.preventDefault();\n onAction();\n }}\n disabled={isLoading}\n className=\"bg-red-600 hover:bg-red-700 focus:ring-red-600 text-white flex-1 shadow-sm\"\n >\n {isLoading ? (\n <span className=\"flex items-center gap-2 justify-center\">\n <span className=\"h-4 w-4 animate-spin rounded-full border-2 border-white border-t-transparent\" />\n {loadingText}\n </span>\n ) : (\n actionButtonText\n )}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n );\n};\n\nexport default ChatActionModal;\n","import { useEffect, useState } from 'react';\n\nexport function useDebounce<T>(value: T, delay?: number): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay || 500);\n\n return () => {\n clearTimeout(timer);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n","import React, { useState, useEffect } from \"react\";\nimport {\n Pin,\n Star,\n Forward,\n Trash2,\n Check,\n X,\n Loader2\n} from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport { useStore } from \"../store/useStore\";\nimport type { IMessageAttachment } from \"../types/chats.types\";\nimport { Button } from \"../ui/button\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"../ui/avatar\";\n\n// Reusable Sub-components\nimport MessageStatus from \"./message/MessageStatus\";\nimport MessageAttachments from \"./message/MessageAttachments\";\nimport MessageReactions from \"./message/MessageReactions\";\nimport MessageToolbar from \"./message/MessageToolbar\";\nimport MessageReplySnippet from \"./message/MessageReplySnippet\";\nimport { useGroupInfo } from \"../hooks/useGroupInfo\";\n\nconst MessageItem = ({\n isSender,\n message,\n createdAt,\n attachments,\n messageId,\n receiver,\n isEdited,\n isDeletedForEveryone,\n reactions,\n conversationId,\n onReply,\n onForward,\n replyTo,\n isPinned,\n isStarred,\n isForwarded,\n status,\n isGroup,\n isSystemMessage,\n conversationInfo,\n isHighlighted,\n senderName,\n senderImage,\n}: {\n isSender: boolean;\n message: string;\n createdAt: string;\n attachments?: IMessageAttachment[];\n messageId?: string;\n receiver?: string;\n isEdited?: boolean;\n isDeletedForEveryone?: boolean;\n reactions?: any[];\n conversationId?: string;\n onReply?: () => void;\n onForward?: () => void;\n replyTo?: any;\n isPinned?: boolean;\n isStarred?: boolean;\n isForwarded?: boolean;\n status?: 'sent' | 'delivered' | 'read';\n isGroup?: boolean;\n isSystemMessage?: boolean;\n conversationInfo?: any;\n isHighlighted?: boolean;\n senderName?: string;\n senderImage?: string;\n}) => {\n const [state, setState] = useState({\n isHoverMessage: false,\n isEditing: false,\n editValue: String(message || \"\"),\n isDeleteOpen: false,\n isReactionOpen: false,\n });\n\n const updateState = (updates: Partial<typeof state>) => {\n setState((prev) => ({ ...prev, ...updates }));\n };\n\n // Logic Handlers for Sync\n useEffect(() => {\n updateState({ editValue: message });\n }, [message]);\n\n // Store actions (DMs)\n const emitDmEdit = useStore((s) => s.emitDmEdit);\n const emitDmDelete = useStore((s) => s.emitDmDelete);\n const emitDmReactionAdd = useStore((s) => s.emitDmReactionAdd);\n const emitDmReactionRemove = useStore((s) => s.emitDmReactionRemove);\n const emitDmPin = useStore((s) => s.emitDmPin);\n const emitDmUnpin = useStore((s) => s.emitDmUnpin);\n const emitDmStar = useStore((s) => s.emitDmStar);\n const emitDmUnstar = useStore((s) => s.emitDmUnstar);\n\n // Store actions (Groups)\n const emitGroupEdit = useStore((s) => s.emitGroupEdit);\n const emitGroupDelete = useStore((s) => s.emitGroupDelete);\n const emitGroupReactionAdd = useStore((s) => s.emitGroupReactionAdd);\n const emitGroupReactionRemove = useStore((s) => s.emitGroupReactionRemove);\n const emitGroupPin = useStore((s) => s.emitGroupPin);\n const emitGroupUnpin = useStore((s) => s.emitGroupUnpin);\n const emitGroupStar = useStore((s) => s.emitGroupStar);\n const emitGroupUnstar = useStore((s) => s.emitGroupUnstar);\n\n const messagePendingActions = useStore((s) => s.messagePendingActions);\n const allUsers = useStore((s) => s.allUsers);\n const loggedUserDetails = useStore((s) => s.loggedUserDetails);\n const pinnedMessagesByConversation = useStore((s) => s.pinnedMessagesByConversation);\n\n const mid = String(messageId || \"\");\n const pendingActions = messageId ? (messagePendingActions[messageId] || []) : [];\n\n // Logic states\n const isPending: boolean = Boolean(\n isSender &&\n (String(messageId || \"\").startsWith(\"temp-\") ||\n (messageId && (messagePendingActions[messageId] || []).includes(\"send\")))\n );\n const isEditPending = pendingActions.includes('edit');\n const isDeletePending = pendingActions.includes('delete');\n const isPinPending = pendingActions.includes('pin') || pendingActions.includes('unpin');\n const isStarPending = pendingActions.includes('star') || pendingActions.includes('unstar');\n const isAnyActionPending = pendingActions.length > 0 && (isDeletePending || isEditPending);\n\n const pinRecord = conversationId ? (pinnedMessagesByConversation[conversationId] || []).find((p: any) =>\n String(p.messageId?._id || p.messageId || p._id) === mid\n ) : null;\n const isPinnedByMe = pinRecord ? (String(pinRecord.pinnedBy?._id || pinRecord.pinnedBy || pinRecord.sender) === String(loggedUserDetails?._id)) : false;\n const canUnpin = !isPinned || isPinnedByMe;\n\n // Sync edit value if message changes externally\n useEffect(() => {\n updateState({ editValue: message });\n }, [message]);\n\n const { userPermissions } = useGroupInfo(conversationId || null);\n\n // Senders can edit if they are in a DM, or if group permissions allow it\n const canEdit = !isGroup || userPermissions.canEditMessage;\n\n const isRecent = () => {\n if (!createdAt) return false;\n const date = new Date(createdAt);\n if (!isNaN(date.getTime())) {\n const diff = Date.now() - date.getTime();\n return diff >= 0 && diff < 10 * 60 * 1000;\n }\n return false;\n };\n\n const handleSaveEdit = () => {\n if (!messageId || !loggedUserDetails || !receiver) return;\n if (isGroup) {\n if (!conversationId) return;\n emitGroupEdit({\n content: state.editValue.trim(),\n messageId,\n sender: loggedUserDetails._id,\n conversationId\n });\n } else {\n if (!receiver) return;\n emitDmEdit({\n content: state.editValue.trim(),\n messageId,\n sender: loggedUserDetails._id,\n receiver,\n });\n }\n updateState({ isEditing: false });\n };\n\n const handleCancelEdit = () => {\n updateState({ isEditing: false, editValue: message });\n };\n\n const handleDeleteMessage = (deleteType: 'me' | 'everyone') => {\n if (!messageId || !loggedUserDetails) return;\n\n if (isGroup) {\n if (!conversationId) return;\n emitGroupDelete({ messageId, sender: loggedUserDetails._id, deleteType, conversationId });\n } else {\n if (!receiver) return;\n emitDmDelete({ messageId, sender: loggedUserDetails._id, receiver, deleteType });\n }\n updateState({ isDeleteOpen: false });\n };\n\n const handleReactionClick = (emojiObject: any) => {\n if (!messageId || !loggedUserDetails) return;\n const reaction = typeof emojiObject === 'string' ? emojiObject : emojiObject.emoji || emojiObject.native;\n\n const hasReacted = reactions?.some((r: any) =>\n r.reaction === reaction && String(r.addedBy?._id || r.addedBy || r.sender?._id || r.sender) === String(loggedUserDetails._id)\n );\n\n if (hasReacted) {\n if (isGroup) {\n if (!conversationId) return;\n emitGroupReactionRemove({ messageId, sender: loggedUserDetails._id, reaction, conversationId });\n } else {\n if (!receiver) return;\n emitDmReactionRemove({ messageId, sender: loggedUserDetails._id, receiver, reaction, conversationId });\n }\n } else {\n if (isGroup) {\n if (!conversationId) return;\n emitGroupReactionAdd({ messageId, sender: loggedUserDetails._id, reaction, conversationId });\n } else {\n if (!receiver) return;\n emitDmReactionAdd({ messageId, sender: loggedUserDetails._id, receiver, reaction, conversationId });\n }\n }\n };\n\n const handlePinClick = () => {\n if (!messageId || !loggedUserDetails) return;\n if (isPinned) {\n if (!isPinnedByMe) return;\n if (isGroup) {\n if (!conversationId) return;\n emitGroupUnpin({ conversationId, sender: loggedUserDetails._id, messageId, receiver: \"\" });\n } else {\n emitDmUnpin({ conversationId, sender: loggedUserDetails._id, messageId, receiver: receiver || \"\" });\n }\n } else {\n if (isGroup) {\n if (!conversationId) return;\n emitGroupPin({ conversationId, sender: loggedUserDetails._id, messageId, receiver: \"\" });\n } else {\n emitDmPin({ conversationId, sender: loggedUserDetails._id, messageId, receiver: receiver || \"\" });\n }\n }\n };\n\n const handleStarClick = () => {\n if (!messageId || !loggedUserDetails || !conversationId) return;\n if (isStarred) {\n if (isGroup) {\n emitGroupUnstar({ messageId, sender: loggedUserDetails._id, conversationId });\n } else {\n emitDmUnstar({ messageId, sender: loggedUserDetails._id, conversationId });\n }\n } else {\n if (isGroup) {\n emitGroupStar({ messageId, sender: loggedUserDetails._id, conversationId });\n } else {\n emitDmStar({ messageId, sender: loggedUserDetails._id, conversationId });\n }\n }\n };\n\n const formatTime = () => {\n if (!createdAt) return \"\";\n const date = new Date(createdAt);\n if (isNaN(date.getTime())) return createdAt;\n return date.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit' });\n };\n\n // Group reactions by emoji\n const groupedReactions = reactions?.reduce((acc: any, r: any) => {\n acc[r.reaction] = (acc[r.reaction] || 0) + 1;\n return acc;\n }, {}) || {};\n\n const isGroupCreationMessage = message?.includes(\"New Group\") && message?.includes(\"created and you are invited\");\n\n if (isGroupCreationMessage || isSystemMessage) {\n return (\n <div className=\"flex w-full justify-center px-4 py-1\">\n <div className=\"max-w-[85%] rounded-full border border-black/[0.06] bg-white px-4 py-1.5 shadow-sm\">\n <p className=\"text-center text-[11px] font-medium text-muted-foreground\">\n {message}\n </p>\n </div>\n </div>\n );\n }\n\n const displayInitial = (senderName || \"U\").charAt(0).toUpperCase();\n\n return (\n <div\n className={cn(\n \"group/message relative mb-2 flex w-full px-3 md:px-4\",\n isSender ? \"justify-end\" : \"justify-start\"\n )}\n >\n {!isSender && (\n <Avatar className=\"mr-2.5 mt-0.5 size-8 shrink-0\">\n <AvatarImage src={senderImage} />\n <AvatarFallback className=\"bg-(--chat-theme-10) text-[11px] font-semibold text-(--chat-theme)\">\n {displayInitial}\n </AvatarFallback>\n </Avatar>\n )}\n\n {/* Message Container */}\n <div\n className={cn(\n \"relative flex min-w-0 max-w-[min(72%,520px)] flex-col\",\n isSender ? \"items-end\" : \"items-start\"\n )}\n onMouseEnter={() => updateState({ isHoverMessage: true })}\n onMouseLeave={() => updateState({ isHoverMessage: false })}\n >\n {/* Actions Toolbar */}\n {!state.isEditing && (state.isHoverMessage || state.isDeleteOpen || state.isReactionOpen) && !!mid && !isDeletedForEveryone && (\n <MessageToolbar\n isSender={isSender}\n isRecent={isRecent()}\n messageId={mid}\n isPinned={isPinned}\n isStarred={isStarred}\n isPinPending={isPinPending}\n isStarPending={isStarPending}\n isReactionOpen={state.isReactionOpen}\n isDeleteOpen={state.isDeleteOpen}\n setIsReactionOpen={(val) => updateState({ isReactionOpen: val })}\n setIsDeleteOpen={(val) => updateState({ isDeleteOpen: val })}\n onReply={onReply}\n onForward={onForward}\n onEdit={() => updateState({ isEditing: true })}\n onDelete={handleDeleteMessage}\n onReactionClick={handleReactionClick}\n onPinClick={handlePinClick}\n onStarClick={handleStarClick}\n canUnpin={canUnpin}\n canEdit={canEdit}\n />\n )}\n\n <div className={cn(\n \"relative group/bubble flex flex-col min-w-[60px]\",\n isSender ? \"items-end\" : \"items-start\",\n isAnyActionPending && \"opacity-60 grayscale-[0.3] cursor-not-allowed\"\n )}>\n {/* Pending Loader overlays */}\n {isAnyActionPending && (\n <div className=\"absolute inset-x-0 -top-6 flex items-center justify-center gap-1.5\">\n <Loader2 className=\"size-3.5 animate-spin text-(--chat-theme)\" />\n <span className=\"text-[9px] font-bold text-(--chat-theme) uppercase tracking-tight\">\n Processing...\n </span>\n </div>\n )}\n\n {isDeletedForEveryone ? (\n <div className={cn(\n \"flex items-center gap-2 px-4 py-2.5 rounded-[22px] border text-sm italic select-none\",\n isSender ? \"bg-(--chat-theme-10) border-(--chat-theme-20) text-(--chat-theme)/60\" : \"bg-muted/40 border-border/40 text-muted-foreground/60\"\n )}>\n <Trash2 className=\"size-3.5 shrink-0 opacity-50\" />\n <span>This message has been deleted</span>\n </div>\n ) : (\n <>\n {/* Bubble Content */}\n <div\n className={cn(\n \"relative flex min-w-[72px] flex-col gap-1 rounded-2xl px-3.5 py-2.5 text-sm shadow-sm transition-all duration-200\",\n isSender\n ? \"rounded-br-md bg-(--chat-theme) text-white\"\n : \"rounded-bl-md border border-black/[0.06] bg-white text-[#0f172a]\",\n isPending && \"opacity-70\",\n isHighlighted && (isSender\n ? \"ring-2 ring-amber-300/60\"\n : \"border-amber-200 bg-amber-50 ring-2 ring-amber-200/60\")\n )}\n >\n {/* Forwarded Indicator */}\n {isForwarded && (\n <div className={cn(\"flex items-center gap-1.5 mb-1.5 opacity-80\", isSender ? \"text-white\" : \"text-muted-foreground\")}>\n <Forward className=\"size-3.5\" />\n <span className=\"text-[10px] font-bold tracking-widest uppercase line-clamp-1 italic\">Forwarded</span>\n </div>\n )}\n\n <MessageReplySnippet replyTo={replyTo} isSender={isSender} loggedUserDetails={loggedUserDetails} allUsers={allUsers} />\n\n {state.isEditing ? (\n <div className=\"flex flex-col gap-2 min-w-[200px]\">\n <textarea\n autoFocus\n className=\"bg-transparent text-white border-none focus:ring-0 p-0 resize-none text-sm font-medium h-auto min-h-[40px]\"\n value={state.editValue}\n onChange={(e) => updateState({ editValue: e.target.value })}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); handleSaveEdit(); }\n else if (e.key === 'Escape') handleCancelEdit();\n }}\n />\n <div className=\"flex justify-end gap-1.5\">\n <Button size=\"icon\" variant=\"ghost\" className=\"h-7 w-7 text-white hover:bg-white/20 rounded-full\" onClick={handleSaveEdit}>\n <Check className=\"h-4 w-4\" />\n </Button>\n <Button size=\"icon\" variant=\"ghost\" className=\"h-7 w-7 text-white hover:bg-white/20 rounded-full\" onClick={handleCancelEdit}>\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n ) : (\n <div className=\"flex flex-col gap-0.5\">\n <p className=\"whitespace-pre-wrap break-words leading-relaxed\">\n {message}\n {isEdited && <span className=\"ml-1.5 text-[10px] opacity-60 italic\">(edited)</span>}\n </p>\n\n <div className={cn(\n \"flex items-center gap-1\",\n isSender ? \"justify-end\" : \"justify-start\"\n )}>\n <span className={cn(\n \"text-[10px] font-medium\",\n isSender ? \"text-white/70\" : \"text-muted-foreground/70\"\n )}>\n {formatTime()}\n </span>\n {isSender && <MessageStatus status={status} isPending={isPending} isGroup={isGroup} />}\n </div>\n </div>\n )}\n\n\n {/* Badges */}\n {isPinned && <div className={cn(\"absolute -top-3 flex items-center gap-1 px-2 py-0.5 rounded-full border shadow-sm z-30 animate-in zoom-in-50\", isSender ? \"-right-2 bg-blue-50 border-blue-200\" : \"-left-2 bg-blue-50 border-blue-200\")}><Pin className=\"size-2.5 text-blue-600 fill-blue-600\" /><span className=\"text-[8px] font-black text-blue-600 uppercase tracking-tighter\">Pinned</span></div>}\n {isStarred && <div className={cn(\"absolute -bottom-2 flex items-center justify-center size-5 bg-yellow-50 border border-yellow-200 rounded-full shadow-sm z-30 animate-in zoom-in-50\", isSender ? \"-left-2\" : \"-right-2\")}><Star className=\"size-3 text-yellow-500 fill-yellow-500\" /></div>}\n </div>\n\n <MessageReactions groupedReactions={groupedReactions} reactions={reactions} loggedUserId={loggedUserDetails?._id} isSender={isSender} isDeletedForEveryone={isDeletedForEveryone} onReactionClick={handleReactionClick} />\n <MessageAttachments attachments={attachments || []} isDeletedForEveryone={isDeletedForEveryone} />\n </>\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default MessageItem;\n","import React from 'react';\nimport { Clock, Check, CheckCheck } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\ninterface MessageStatusProps {\n status?: 'sent' | 'delivered' | 'read';\n isPending?: boolean;\n isGroup?: boolean;\n className?: string;\n}\n\nconst MessageStatus = ({ status, isPending, className }: MessageStatusProps) => {\n const resolvedStatus = status || 'sent';\n\n return (\n <span className={cn(\"inline-flex items-center ml-1 align-middle\", className)}>\n {isPending ? (\n <Clock className=\"size-3 text-white/50 animate-pulse\" aria-label=\"Sending\" />\n ) : resolvedStatus === 'read' ? (\n <CheckCheck\n className=\"size-3.5 text-(--read-tick-color)\"\n strokeWidth={2.5}\n aria-label=\"Read\"\n />\n ) : resolvedStatus === 'delivered' ? (\n <CheckCheck\n className=\"size-3.5 text-white/75\"\n strokeWidth={2.5}\n aria-label=\"Delivered\"\n />\n ) : (\n <Check\n className=\"size-3 text-white/70\"\n strokeWidth={2.5}\n aria-label=\"Sent\"\n />\n )}\n </span>\n );\n};\n\nexport default MessageStatus;\n","import React from 'react';\nimport { FileText, Download, FileSpreadsheet, FileIcon, Music, Film, PlayCircle } from \"lucide-react\";\nimport type { IMessageAttachment } from \"../../types/chats.types\";\n\nexport const getAttachmentIcon = (fileName: string, type: string, className?: string, size = 20) => {\n const ext = fileName.split('.').pop()?.toLowerCase() || '';\n if (type === 'audio' || ext === 'mp3' || ext === 'wav' || ext === 'ogg') return <Music size={size} className={className} color=\"#8b5cf6\" />;\n if (type === 'video' || ext === 'mp4' || ext === 'mov' || ext === 'webm') return <Film size={size} className={className} color=\"#ec4899\" />;\n if (ext === 'pdf') return <FileText size={size} className={className} color=\"#ef4444\" />;\n if (ext === 'doc' || ext === 'docx') return <FileText size={size} className={className} color=\"#3b82f6\" />;\n if (ext === 'xls' || ext === 'xlsx' || ext === 'csv') return <FileSpreadsheet size={size} className={className} color=\"#10b981\" />;\n return <FileIcon size={size} className={className} />;\n};\n\ninterface MessageAttachmentsProps {\n attachments: IMessageAttachment[];\n isDeletedForEveryone?: boolean;\n}\n\nconst MessageAttachments = ({ attachments, isDeletedForEveryone }: MessageAttachmentsProps) => {\n if (isDeletedForEveryone || !attachments || attachments.length === 0) return null;\n\n return (\n <div className=\"mt-2 flex flex-col gap-2 w-full max-w-[280px]\">\n {attachments.map((att) => (\n <div key={att.id} className=\"rounded-xl overflow-hidden border border-border/40 shadow-sm bg-white relative\">\n {att.type === \"image\" ? (\n <div className=\"relative group bg-muted/20 w-full flex items-center justify-center\">\n <img\n src={att.url || \"\"}\n alt={att.name || \"Image\"}\n className=\"w-full h-auto max-h-[300px] object-cover cursor-pointer hover:opacity-90 transition-opacity\"\n onClick={() => window.open(att.url, \"_blank\")}\n />\n {/* Download button overlaid for images */}\n <a\n href={att.url}\n download={att.name || \"image\"}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"absolute top-2 right-2 bg-black/60 hover:bg-black/80 text-white p-1.5 rounded-full opacity-0 group-hover:opacity-100 transition-opacity backdrop-blur-sm shadow-md z-10\"\n >\n <Download size={14} />\n </a>\n </div>\n ) : att.type === \"video\" ? (\n <div className=\"relative group bg-black w-full flex items-center justify-center min-h-[150px]\">\n <video\n src={att.url || \"\"}\n controls\n preload=\"metadata\"\n className=\"w-full h-auto max-h-[300px] object-contain rounded-t-lg bg-black/90 focus:outline-none\"\n controlsList=\"nodownload\"\n />\n {/* Download button overlaid for videos */}\n <a\n href={att.url}\n download={att.name || \"video\"}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"absolute top-2 right-2 bg-black/60 hover:bg-black/80 text-white p-1.5 rounded-full opacity-0 group-hover:opacity-100 transition-opacity backdrop-blur-sm shadow-md\"\n >\n <Download size={14} />\n </a>\n </div>\n ) : att.type === \"audio\" ? (\n <div className=\"p-3 bg-gradient-to-br from-gray-50 to-gray-100 flex flex-col gap-3\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"flex items-center gap-3 min-w-0\">\n <div className=\"size-8 rounded-full bg-purple-100 flex items-center justify-center shrink-0\">\n <Music size={16} className=\"text-purple-600\" />\n </div>\n <span className=\"text-xs font-bold text-gray-700 truncate min-w-0\">{att.name || \"Audio message\"}</span>\n </div>\n <a\n href={att.url}\n download={att.name || \"audio\"}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"text-muted-foreground/60 hover:text-(--chat-theme) transition-colors shrink-0\"\n >\n <Download size={16} />\n </a>\n </div>\n <audio\n src={att.url || \"\"}\n controls\n preload=\"metadata\"\n controlsList=\"nodownload\"\n className=\"w-full h-10 outline-none [&::-webkit-media-controls-panel]:bg-transparent\"\n />\n </div>\n ) : (\n <a href={att.url} download={att.name} target=\"_blank\" rel=\"noreferrer\" className=\"flex items-center gap-3 p-3 hover:bg-muted/30 transition-colors\">\n <div className=\"size-10 rounded-lg bg-[#f3f4f6] flex items-center justify-center shrink-0 shadow-inner\">\n {getAttachmentIcon(att.name || \"\", att.type || \"\", \"text-(--chat-theme)\")}\n </div>\n <div className=\"flex flex-col min-w-0 flex-1\">\n <span className=\"text-[11px] font-bold truncate text-(--chat-theme) uppercase\">{att.name}</span>\n <span className=\"text-[9px] text-muted-foreground font-bold\">Attachment</span>\n </div>\n <Download size={16} className=\"text-muted-foreground/50 shrink-0\" />\n </a>\n )}\n </div>\n ))}\n </div>\n );\n};\n\nexport default MessageAttachments;\n","import React from 'react';\nimport { cn } from \"../../lib/utils\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '../../ui/tooltip';\n\ninterface MessageReactionsProps {\n groupedReactions: Record<string, number>;\n reactions?: any[];\n loggedUserId?: string;\n isSender: boolean;\n isDeletedForEveryone?: boolean;\n onReactionClick: (emoji: string) => void;\n}\n\nconst MessageReactions = ({\n groupedReactions,\n reactions,\n loggedUserId,\n isSender,\n isDeletedForEveryone,\n onReactionClick\n}: MessageReactionsProps) => {\n if (isDeletedForEveryone || Object.keys(groupedReactions).length === 0) return null;\n\n return (\n <div className={cn(\n \"flex flex-wrap items-center gap-1 mt-1 z-10\",\n isSender ? \"justify-end mr-1\" : \"justify-start ml-1\"\n )}>\n {Object.entries(groupedReactions).map(([emoji, count]: [string, any]) => {\n const isReactedByMe = reactions?.some((r: any) =>\n r.reaction === emoji && \n String(r.sender?._id || r.sender || r.addedBy?._id || r.addedBy) === String(loggedUserId)\n );\n // Filter names of users who added this specific emoji\n const usersWhoReacted = reactions\n ?.filter((r: any) => r.reaction === emoji)\n .map((r: any) => {\n const user = r.addedBy || r.sender || r.userId;\n return typeof user === 'object' ? user.name : null;\n })\n .filter(Boolean) || [];\n\n const tooltipText = usersWhoReacted.join(\", \");\n\n return (\n <Tooltip key={emoji}>\n <TooltipTrigger asChild>\n <button\n onClick={() => onReactionClick(emoji)}\n className={cn(\n \"flex items-center gap-1 px-2 py-0.5 rounded-full text-xs border shadow-sm transition-all shadow-black/5 outline-none\",\n isReactedByMe\n ? \"bg-(--chat-theme-10) border-(--chat-theme-20) text-(--chat-theme)\"\n : \"bg-white border-border/40 hover:bg-muted/50 text-[#111827]\"\n )}\n >\n <span>{emoji}</span>\n <span className=\"font-bold opacity-70\">{count}</span>\n </button>\n </TooltipTrigger>\n {tooltipText && (\n <TooltipContent side=\"top\" className=\"bg-slate-900 text-white font-medium\">\n <p>{tooltipText}</p>\n </TooltipContent>\n )}\n </Tooltip>\n );\n })}\n </div>\n );\n};\n\nexport default MessageReactions;\n","import * as React from \"react\"\nimport { Popover as PopoverPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../lib/utils\"\n\n\nfunction Popover({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nfunction PopoverHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"popover-header\"\n className={cn(\"flex flex-col gap-1 text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction PopoverTitle({ className, ...props }: React.ComponentProps<\"h2\">) {\n return (\n <div\n data-slot=\"popover-title\"\n className={cn(\"font-medium\", className)}\n {...props}\n />\n )\n}\n\nfunction PopoverDescription({\n className,\n ...props\n}: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"popover-description\"\n className={cn(\"text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n PopoverAnchor,\n PopoverHeader,\n PopoverTitle,\n PopoverDescription,\n}\n","import React from 'react';\nimport {\n CornerUpLeft, Forward, Smile, Pencil, Trash2, X, Pin, Star, Loader2\n} from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../../ui/button\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"../../ui/dropdown-menu\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"../../ui/popover\";\nimport EmojiPicker from \"emoji-picker-react\";\n\ninterface MessageToolbarProps {\n isSender: boolean;\n isRecent: boolean;\n messageId?: string;\n isPinned?: boolean;\n isStarred?: boolean;\n isPinPending?: boolean;\n isStarPending?: boolean;\n isReactionOpen: boolean;\n isDeleteOpen: boolean;\n setIsReactionOpen: (val: boolean) => void;\n setIsDeleteOpen: (val: boolean) => void;\n onReply?: () => void;\n onForward?: () => void;\n onEdit: () => void;\n onDelete: (type: 'me' | 'everyone') => void;\n onReactionClick: (emojiData: any) => void;\n onPinClick: () => void;\n onStarClick: () => void;\n canUnpin?: boolean;\n canEdit?: boolean;\n}\n\nconst MessageToolbar = ({\n isSender,\n isRecent,\n messageId,\n isPinned,\n isStarred,\n isPinPending,\n isStarPending,\n isReactionOpen,\n isDeleteOpen,\n setIsReactionOpen,\n setIsDeleteOpen,\n onReply,\n onForward,\n onEdit,\n onDelete,\n onReactionClick,\n onPinClick,\n onStarClick,\n canUnpin = true,\n canEdit = true\n}: MessageToolbarProps) => {\n return (\n <div className={cn(\n \"absolute -top-10 z-20 flex items-center gap-1 rounded-full border bg-background/95 p-1 shadow-md backdrop-blur-sm\",\n isSender ? \"right-0\" : \"left-0\"\n )}>\n <Button variant=\"ghost\" size=\"icon\" className=\"size-8 rounded-full\" onClick={onReply}>\n <CornerUpLeft className=\"size-4\" />\n </Button>\n <Button variant=\"ghost\" size=\"icon\" className=\"size-8 rounded-full\" onClick={onForward}>\n <Forward className=\"size-4\" />\n </Button>\n\n <Popover open={isReactionOpen} onOpenChange={setIsReactionOpen}>\n <PopoverTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" className=\"size-8 rounded-full hover:bg-muted transition-all\">\n <Smile className=\"size-4 text-muted-foreground\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent\n className=\"w-auto p-0 border-none shadow-2xl rounded-2xl\"\n side=\"top\"\n align={isSender ? \"end\" : \"start\"}\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n <EmojiPicker\n onEmojiClick={(emojiData) => {\n onReactionClick(emojiData);\n setIsReactionOpen(false);\n }}\n width={300}\n height={400}\n reactionsDefaultOpen={true}\n allowExpandReactions={true}\n searchDisabled={false}\n />\n </PopoverContent>\n </Popover>\n\n {isSender && (\n <>\n {isRecent && canEdit && (\n <Button variant=\"ghost\" size=\"icon\" className=\"size-8 rounded-full\" onClick={onEdit}>\n <Pencil className=\"size-4\" />\n </Button>\n )}\n <DropdownMenu open={isDeleteOpen} onOpenChange={setIsDeleteOpen}>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" className=\"size-8 rounded-full text-destructive hover:bg-destructive/10\">\n <Trash2 className=\"size-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent side=\"top\" align={isSender ? \"end\" : \"start\"} className=\"rounded-xl border shadow-2xl min-w-[160px]\">\n {isRecent && (\n <DropdownMenuItem\n className=\"text-destructive focus:text-destructive focus:bg-destructive/5 font-semibold cursor-pointer gap-2 py-2.5\"\n onClick={() => onDelete('everyone')}\n >\n <Trash2 className=\"size-3.5\" />\n Delete for everyone\n </DropdownMenuItem>\n )}\n <DropdownMenuItem\n className=\"font-semibold cursor-pointer gap-2 py-2.5\"\n onClick={() => onDelete('me')}\n >\n <X className=\"size-3.5\" />\n Delete for me\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </>\n )}\n\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\n \"size-8 rounded-full transition-all\",\n isPinned && \"text-blue-600 bg-blue-50 hover:bg-blue-100\",\n isPinned && !canUnpin && \"opacity-40 cursor-not-allowed\"\n )}\n onClick={isPinned && !canUnpin ? undefined : onPinClick}\n disabled={isPinPending}\n >\n {isPinPending ? <Loader2 size={14} className=\"animate-spin\" /> : <Pin className={cn(\"size-4\", isPinned && \"fill-blue-600\")} />}\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\"size-8 rounded-full transition-all\", isStarred && \"text-yellow-500 bg-yellow-50 hover:bg-yellow-100\")}\n onClick={onStarClick}\n disabled={isStarPending}\n >\n {isStarPending ? <Loader2 size={14} className=\"animate-spin text-yellow-500\" /> : <Star className={cn(\"size-4\", isStarred && \"fill-yellow-500\")} />}\n </Button>\n </div>\n );\n};\n\nexport default MessageToolbar;\n","import React from 'react';\nimport { cn } from \"../../lib/utils\";\n\ninterface MessageReplySnippetProps {\n replyTo: any;\n isSender: boolean;\n loggedUserDetails: any;\n allUsers: any[];\n}\n\nconst MessageReplySnippet = ({ replyTo, isSender, loggedUserDetails, allUsers }: MessageReplySnippetProps) => {\n if (!replyTo) return null;\n\n return (\n <div\n className={cn(\n \"mb-1.5 p-2 px-3 rounded-xl border-l-4 transition-all flex flex-col gap-0.5 min-w-0\",\n isSender\n ? \"bg-black/20 border-white/40 text-white\"\n : \"bg-[#f3f4f6] border-(--chat-theme) text-foreground/80\"\n )}\n >\n <span\n className={cn(\n \"text-[10px] font-bold uppercase tracking-wider\",\n isSender ? \"text-white/70\" : \"text-(--chat-theme)\"\n )}\n >\n {(() => {\n const replySenderStr = String(replyTo.sender?._id || replyTo.sender || \"\");\n const loggedUserStr = String(loggedUserDetails?._id || \"\");\n\n if (replySenderStr && loggedUserStr === replySenderStr) return \"You\";\n\n const foundUser = allUsers.find((u: any) => String(u._id) === replySenderStr);\n const senderName = replyTo.sender?.name || foundUser?.name || (typeof replyTo.sender === 'string' && replyTo.sender.length < 20 ? replyTo.sender : \"\");\n\n return senderName || \"Someone\";\n })()}\n </span>\n <p className=\"text-[11px] break-words line-clamp-2 opacity-80 leading-snug\">\n {replyTo.content || (\n replyTo.attachments && replyTo.attachments.length > 0 ? (\n <>\n <span className=\"shrink-0 font-bold uppercase text-[9px] opacity-70\">\n {replyTo.attachments[0].type || \"File\"}:\n </span>\n <span className=\"truncate italic ml-1\">\n {replyTo.attachments[0].name || \"Attachment\"}\n </span>\n </>\n ) : \"Message\"\n )}\n </p>\n </div>\n );\n};\n\nexport default MessageReplySnippet;\n","import { MessageCircleMore, Loader2, History, X } from \"lucide-react\";\nimport React, { useRef, useLayoutEffect, useEffect } from \"react\";\nimport { Button } from \"../ui/button\";\n\nimport MessageItem from \"./MessageItem\";\n\nimport { IMessage, IChannel } from \"../types/chats.types\";\nimport { useStore } from \"../store/useStore\";\nimport { IConversationInfo } from \"../store/types/store.types\";\nimport { mergeChatMessages } from \"../store/helpers/store.helpers\";\n\ninterface ActiveChannelMessagesProps {\n activeChannel: IChannel | null;\n loggedUserId?: string;\n conversationMessages?: any[];\n localMessages?: IMessage[];\n isLoading?: boolean;\n conversationId?: string | null;\n onReply?: (message: IMessage) => void;\n onForward?: (message: IMessage) => void;\n conversationInfo: IConversationInfo | null;\n}\n\nconst ActiveChannelMessages = ({ activeChannel, loggedUserId, conversationMessages = [], localMessages = [], isLoading = false, conversationId, onReply, onForward, conversationInfo }: ActiveChannelMessagesProps) => {\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const bottomRef = useRef<HTMLDivElement>(null);\n const { fetchMessages, messagesMetadata, deletedForMeIds, searchedMessageId, isSearchActive, setSearchActive, setSearchedMessageId } = useStore();\n const currentMeta = conversationId\n ? messagesMetadata[conversationId]\n : { nextCursor: null, hasMore: false, isFirstPage: true };\n\n const mappedApiMessages = conversationMessages.map((m: any) => {\n const isOwn = String(m.sender?._id || m.sender) === String(loggedUserId);\n return {\n id: m._id,\n _id: m._id,\n content: m.content,\n sender: m.sender?.name || \"User\",\n receiver: activeChannel?.id,\n timestamp: m.createdAt,\n isOwnMessage: isOwn,\n channelId: activeChannel?.id || \"\",\n conversationId: m.conversationId || conversationId || \"\",\n isEdited: m.isEdited,\n isDeletedForEveryone: m.isDeletedForEveryone || m.isDeletedForEveryone === true,\n isDeletedForMe: m.isDeletedForMe || m.deletedForMe ||\n m.deletedBy?.includes(loggedUserId) ||\n (Array.isArray(m.deletedBy) && m.deletedBy.some((u: any) => String(u?._id || u) === String(loggedUserId))) ||\n (Array.isArray(m.deletedFor) && m.deletedFor.some((u: any) => String(u?._id || u) === String(loggedUserId))) || false,\n reactions: m.reactions || [],\n attachments: m.attachments?.map((at: any) => ({\n id: at._id,\n url: at.url,\n type: at.type,\n name: at.name\n })),\n replyTo: m.replyTo,\n isPinned: m.isPinnedMessage || m.isPinned,\n isStarred: m.isLoggedUserStarred || m.isStarred,\n isForwarded: m.isForwarded,\n status: m.status,\n isSystemMessage: m.isSystemMessage\n };\n });\n\n const displayMessages = (mergeChatMessages(mappedApiMessages, localMessages, loggedUserId) as (IMessage & { isDeletedForMe?: boolean })[])\n .filter(m => !deletedForMeIds.includes(String((m as any)._id || m.id)) && !m.isDeletedForMe)\n .filter(m => !conversationId || String(m.conversationId || \"\") === String(conversationId))\n .sort((a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime());\n\n const handleResetToNormal = () => {\n setSearchActive(false);\n setSearchedMessageId(null);\n if (conversationId) {\n fetchMessages(conversationId);\n }\n };\n\n const handleScroll = (e: React.UIEvent<HTMLDivElement>) => {\n const target = e.currentTarget;\n if (target.scrollTop === 0 && currentMeta?.hasMore && !isLoading && conversationId && currentMeta.nextCursor) {\n const prevScrollHeight = target.scrollHeight;\n fetchMessages(conversationId, 20, currentMeta.nextCursor).then(() => {\n if (scrollContainerRef.current) {\n const newScrollHeight = scrollContainerRef.current.scrollHeight;\n scrollContainerRef.current.scrollTop = newScrollHeight - prevScrollHeight;\n }\n });\n }\n };\n\n useLayoutEffect(() => {\n if (!isLoading && currentMeta?.isFirstPage && !searchedMessageId) {\n bottomRef.current?.scrollIntoView({ behavior: \"smooth\" });\n }\n }, [displayMessages.length, isLoading, currentMeta?.isFirstPage, searchedMessageId]);\n\n useEffect(() => {\n if (searchedMessageId && !isLoading) {\n const element = document.getElementById(`message-${searchedMessageId}`);\n if (element) {\n element.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n }\n }\n }, [searchedMessageId, isLoading, displayMessages.length]);\n\n if (!activeChannel) {\n return (\n <div className=\"flex h-full flex-col items-center justify-center gap-4 bg-[#fafbfc] px-6 text-muted-foreground\">\n <div className=\"flex size-16 items-center justify-center rounded-2xl border border-black/[0.06] bg-white shadow-sm\">\n <MessageCircleMore className=\"size-8 text-(--chat-theme-40)\" />\n </div>\n <div className=\"space-y-1 text-center\">\n <p className=\"text-base font-semibold text-[#0f172a]\">Select a conversation</p>\n <p className=\"max-w-[260px] text-sm text-muted-foreground\">\n Pick a chat from the sidebar or start a new one to begin messaging.\n </p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"relative flex h-full flex-col bg-[#fafbfc]\">\n {isSearchActive && (\n <div className=\"absolute top-6 left-1/2 -translate-x-1/2 z-40 animate-in slide-in-from-top-4 duration-500\">\n <div className=\"flex items-center bg-white rounded-2xl shadow-[0_15px_40px_rgba(0,0,0,0.15)] border border-primary/10 overflow-hidden ring-4 ring-white\">\n <div className=\"bg-primary px-4 py-2.5 flex items-center gap-2\">\n <History className=\"size-3.5 text-white animate-pulse\" />\n <span className=\"text-[10px] font-black text-white uppercase tracking-[0.2em]\">Search View</span>\n </div>\n <button\n onClick={handleResetToNormal}\n className=\"px-5 py-2.5 text-[10px] font-black uppercase tracking-[0.15em] text-primary hover:bg-primary/5 transition-all flex items-center gap-2 group\"\n >\n Back to Recent\n <X className=\"size-3 text-primary/40 group-hover:text-primary transition-colors\" />\n </button>\n </div>\n </div>\n )}\n\n {isLoading && currentMeta?.isFirstPage && (\n <div className=\"absolute inset-x-0 top-0 h-1 bg-(--chat-theme-10) overflow-hidden z-20\">\n <div className=\"h-full bg-(--chat-theme) w-1/3 animate-progress\" />\n </div>\n )}\n\n <div\n ref={scrollContainerRef}\n onScroll={handleScroll}\n className=\"chat-message-scroll min-h-0 flex-1 overflow-y-auto px-1 py-4 scroll-smooth md:px-2\"\n >\n <div className=\"flex w-full flex-col\">\n {isLoading && currentMeta?.hasMore && !currentMeta.isFirstPage && (\n <div className=\"flex justify-center py-4\">\n <Loader2 className=\"h-6 w-6 animate-spin text-(--chat-theme) opacity-50\" />\n </div>\n )}\n\n {displayMessages?.length > 0 ? (\n Object.entries(\n displayMessages.reduce((groups: Record<string, IMessage[]>, message: IMessage) => {\n const date = new Date(message.timestamp).toLocaleDateString('en-GB', {\n day: 'numeric',\n month: 'short',\n year: 'numeric'\n });\n if (!groups[date]) {\n groups[date] = [];\n }\n groups[date].push(message);\n return groups;\n }, {})\n ).map(([date, messages]) => (\n <div key={date} className=\"mb-4 flex flex-col\">\n <div className=\"sticky top-0 z-10 mb-3 flex justify-center py-1\">\n <span className=\"rounded-full border border-black/[0.06] bg-white/90 px-3 py-1 text-[11px] font-medium text-muted-foreground shadow-sm backdrop-blur-sm\">\n {date}\n </span>\n </div>\n {messages.map((m: IMessage) => {\n const senderLabel = typeof m.sender === \"string\" ? m.sender : \"User\";\n const senderImage = !m.isOwnMessage\n ? (activeChannel?.isGroup ? undefined : activeChannel?.image)\n : undefined;\n\n return (\n <div key={String(m.id)} id={`message-${m._id || m.id}`} className=\"w-full\">\n <MessageItem\n isSender={!!m.isOwnMessage}\n message={String(m.content || \"\")}\n createdAt={m.timestamp}\n attachments={m.attachments}\n messageId={m._id || m.id}\n receiver={m.receiver || activeChannel?.id}\n isEdited={!!m.isEdited}\n isDeletedForEveryone={!!m.isDeletedForEveryone}\n reactions={m.reactions || []}\n conversationId={m.conversationId || (activeChannel?.conversationId) || conversationId || \"\"}\n onReply={() => onReply?.(m)}\n onForward={() => onForward?.(m)}\n replyTo={m.replyTo}\n isPinned={!!m.isPinned}\n isStarred={!!m.isStarred}\n isForwarded={!!m.isForwarded}\n status={m.status}\n isSystemMessage={m.isSystemMessage}\n isGroup={activeChannel?.isGroup}\n conversationInfo={conversationInfo}\n isHighlighted={String(m._id || m.id) === String(searchedMessageId)}\n senderName={senderLabel}\n senderImage={senderImage}\n />\n </div>\n )})}\n </div>\n ))\n ) : !isLoading && (\n <div className=\"flex h-[360px] flex-col items-center justify-center gap-3 text-muted-foreground\">\n <div className=\"flex size-14 items-center justify-center rounded-2xl border border-dashed border-black/[0.08] bg-white\">\n <MessageCircleMore className=\"size-7 opacity-40\" />\n </div>\n <div className=\"space-y-1 text-center\">\n <p className=\"text-sm font-semibold text-[#0f172a]\">No messages yet</p>\n <p className=\"text-xs text-muted-foreground\">Send the first message to start the conversation.</p>\n </div>\n </div>\n )}\n\n\n\n <div ref={bottomRef} className=\"h-4\" />\n </div>\n </div>\n\n {isLoading && (\n <div className=\"absolute bottom-6 left-1/2 -translate-x-1/2 z-30 pointer-events-none\">\n <div className=\"flex items-center gap-3 px-5 py-2.5 bg-white/80 backdrop-blur-md rounded-2xl shadow-xl border border-border/40 animate-in fade-in slide-in-from-bottom-2 duration-400\">\n <Loader2 className=\"h-3.5 w-3.5 animate-spin text-(--chat-theme)\" />\n <span className=\"text-[10px] font-bold text-muted-foreground uppercase tracking-[0.15em]\">Loading messages...</span>\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport default ActiveChannelMessages;\n","import React, { useRef, useState } from \"react\";\nimport { Paperclip, Send, X, FileText, Smile } from \"lucide-react\";\n\nimport { Button } from \"../ui/button\";\nimport { Textarea } from \"../ui/textarea\";\nimport { ScrollArea, ScrollBar } from \"../ui/scroll-area\";\nimport { IAttachment, IChannel, IMessage } from \"../types/chats.types\";\nimport { cn } from \"../lib/utils\";\n\nimport EmojiPicker, { Theme } from \"emoji-picker-react\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../ui/popover\";\nimport { useStore } from \"../store/useStore\";\nimport { getAttachmentIcon } from \"./message/MessageAttachments\";\nimport { useGroupInfo } from \"../hooks/useGroupInfo\";\nimport { clearConversationDraft, getConversationDraft, updateConversationDraft, useConversationDraft } from \"../hooks/useConversationDraft\";\n\ninterface ChannelMessageBoxProps {\n activeChannel: IChannel | null;\n conversationId: string | null;\n onSendMessage?: (content: string, attachments: IAttachment[], replyTo?: IMessage | null) => void;\n replyTo?: IMessage | null;\n onCancelReply?: () => void;\n}\n\nconst MAX_ATTACHMENTS = 10;\n\n// Some browsers return empty mime type for docs, so we fallback by extension.\nconst getAttachmentType = (file: File): IAttachment[\"type\"] => {\n const mime = (file.type || \"\").toLowerCase();\n\n if (mime.startsWith(\"image/\")) return \"image\";\n if (mime.startsWith(\"video/\")) return \"video\";\n if (mime.startsWith(\"audio/\")) return \"audio\";\n\n return \"file\";\n};\n\nconst ChannelMessageBox = ({ activeChannel, conversationId, onSendMessage, replyTo, onCancelReply }: ChannelMessageBoxProps) => {\n const [state, setState] = useState({\n messageInput: \"\",\n attachments: [] as IAttachment[],\n isFocused: false,\n isTyping: false,\n attachmentError: \"\",\n });\n\n const updateState = (updates: Partial<typeof state>) => {\n setState((prev) => ({ ...prev, ...updates }));\n };\n const typingTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n const conversationIdRef = useRef(conversationId);\n conversationIdRef.current = conversationId;\n const { syncComposerRef } = useConversationDraft(conversationId);\n\n const emitTypingStart = useStore((s) => s.emitTypingStart);\n const emitTypingStop = useStore((s) => s.emitTypingStop);\n const emitGroupTypingStart = useStore((s) => s.emitGroupTypingStart);\n const emitGroupTypingStop = useStore((s) => s.emitGroupTypingStop);\n\n const { permissions, isAdmin, loggedUserDetails } = useGroupInfo(conversationId);\n const composerDisabledReason = useStore((s) => s.composerDisabledReason);\n\n // ✅ show message under input (limit, etc.)\n\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n // ✅ fixes \"late message\" by keeping a sync counter\n const attachmentsCountRef = useRef(0);\n\n React.useEffect(() => {\n attachmentsCountRef.current = state.attachments.length;\n }, [state.attachments.length]);\n\n \n React.useEffect(() => {\n const draft = {\n messageInput: state.messageInput,\n attachments: state.attachments,\n };\n syncComposerRef(draft);\n updateConversationDraft(conversationIdRef.current, draft);\n }, [state.messageInput, state.attachments, syncComposerRef]);\n\n React.useEffect(() => {\n if (typingTimeoutRef.current) {\n clearTimeout(typingTimeoutRef.current);\n typingTimeoutRef.current = null;\n }\n\n const draft = getConversationDraft(conversationId);\n attachmentsCountRef.current = draft.attachments.length;\n setState((prev) => ({\n ...prev,\n messageInput: draft.messageInput,\n attachments: draft.attachments,\n attachmentError: \"\",\n isTyping: false,\n }));\n\n if (fileInputRef.current) fileInputRef.current.value = \"\";\n }, [conversationId]);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n updateState({ messageInput: e.target.value });\n\n if (!conversationId || !loggedUserDetails || !activeChannel) return;\n\n const receiver = activeChannel.id;\n\n // Start typing\n if (!state.isTyping) {\n updateState({ isTyping: true });\n const typingPayload = {\n sender: loggedUserDetails!._id,\n userId: loggedUserDetails!._id, // Some handlers use userId\n receiver,\n conversationId\n };\n if (activeChannel.isGroup) {\n emitGroupTypingStart(typingPayload);\n } else {\n emitTypingStart(typingPayload);\n }\n }\n\n // Clear existing timeout\n if (typingTimeoutRef.current) clearTimeout(typingTimeoutRef.current);\n\n // Set timeout to stop typing\n typingTimeoutRef.current = setTimeout(() => {\n updateState({ isTyping: false });\n const typingPayload = {\n sender: loggedUserDetails!._id,\n userId: loggedUserDetails!._id,\n receiver,\n conversationId\n };\n if (activeChannel.isGroup) {\n emitGroupTypingStop(typingPayload);\n } else {\n emitTypingStop(typingPayload);\n }\n }, 2000);\n\n };\n\n const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const files = e.target.files ? Array.from(e.target.files) : [];\n if (!files.length) return;\n\n const currentCount = attachmentsCountRef.current;\n const remaining = MAX_ATTACHMENTS - currentCount;\n\n // already full\n if (remaining <= 0) {\n updateState({ attachmentError: `Maximum ${MAX_ATTACHMENTS} files allowed` });\n if (fileInputRef.current) fileInputRef.current.value = \"\";\n return;\n }\n\n // user selected too many at once -> show message immediately\n if (files.length > remaining) {\n updateState({\n attachmentError: `You can upload only ${remaining} more file${remaining > 1 ? \"s\" : \"\"}`\n });\n } else {\n updateState({ attachmentError: \"\" });\n }\n\n const filesToAdd = files.slice(0, remaining);\n\n // reserve slots immediately (prevents stale limit on quick consecutive selects)\n attachmentsCountRef.current = currentCount + filesToAdd.length;\n\n filesToAdd.forEach((file) => {\n const reader = new FileReader();\n reader.onload = (event) => {\n const newAttachment: IAttachment = {\n id: Date.now().toString() + Math.random().toString(36).substring(2, 9),\n file,\n previewUrl: event.target?.result as string,\n type: getAttachmentType(file),\n };\n\n setState((prev) => {\n if (prev.attachments.length >= MAX_ATTACHMENTS) return prev;\n return { ...prev, attachments: [...prev.attachments, newAttachment] };\n });\n };\n\n // Preview: DataURL works for images/videos and is fine for docs to show icon + name\n reader.readAsDataURL(file);\n });\n\n if (fileInputRef.current) fileInputRef.current.value = \"\";\n };\n\n const handleRemoveAttachment = (id: string) => {\n setState((prev) => {\n const nextAttachments = prev.attachments.filter((a) => a.id !== id);\n attachmentsCountRef.current = nextAttachments.length;\n return {\n ...prev,\n attachments: nextAttachments,\n attachmentError: nextAttachments.length < MAX_ATTACHMENTS ? \"\" : prev.attachmentError,\n };\n });\n };\n\n const handleSendMessage = () => {\n const trimmed = state.messageInput.trim();\n if (!trimmed && state.attachments.length === 0) return;\n // Stop typing immediately on send\n if (typingTimeoutRef.current) clearTimeout(typingTimeoutRef.current);\n if (state.isTyping && conversationId && loggedUserDetails && activeChannel) {\n updateState({ isTyping: false });\n const typingPayload = {\n sender: loggedUserDetails!._id,\n userId: loggedUserDetails!._id,\n receiver: activeChannel.id,\n conversationId,\n };\n if (activeChannel.isGroup) {\n emitGroupTypingStop(typingPayload);\n } else {\n emitTypingStop(typingPayload);\n }\n }\n\n onSendMessage?.(trimmed, state.attachments, replyTo);\n clearConversationDraft(conversationId);\n updateState({\n messageInput: \"\",\n attachments: [],\n attachmentError: \"\",\n });\n attachmentsCountRef.current = 0;\n\n if (fileInputRef.current) fileInputRef.current.value = \"\";\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n handleSendMessage();\n }\n };\n\n if (!activeChannel) return null;\n\n if (activeChannel.isLeft) {\n return (\n <div className=\"px-8 pb-8\">\n <div className=\"w-full max-w-[90%] mx-auto p-4 rounded-2xl bg-gray-50 border border-gray-200 text-center\">\n <p className=\"text-sm font-bold text-muted-foreground italic\">\n You have left this group. You can no longer send messages.\n </p>\n </div>\n </div>\n );\n }\n\n if (activeChannel.isBlocked) {\n return (\n <div className=\"px-8 pb-8\">\n <div className=\"w-full max-w-[90%] mx-auto p-4 rounded-2xl bg-gray-50 border border-gray-200 text-center\">\n <p className=\"text-sm font-bold text-muted-foreground italic\">\n This user is blocked. You can no longer send messages.\n </p>\n </div>\n </div>\n );\n }\n\n const onlyAdminCanSendMessage = permissions?.onlyAdminCanSendMessage || false;\n const canSendMessage = (!activeChannel.isGroup || !onlyAdminCanSendMessage || isAdmin) && !composerDisabledReason;\n\n if (composerDisabledReason) {\n return (\n <div className=\"px-8 pb-8\">\n <div className=\"w-full max-w-[90%] mx-auto p-4 rounded-2xl bg-gray-50 border border-dashed border-gray-200 text-center\">\n <p className=\"text-sm font-bold text-muted-foreground italic\">\n {composerDisabledReason}\n </p>\n </div>\n </div>\n );\n }\n\n if (!canSendMessage) {\n return (\n <div className=\"px-8 pb-8\">\n <div className=\"w-full max-w-[90%] mx-auto p-4 rounded-2xl bg-gray-50 border border-dashed border-gray-200 text-center\">\n <p className=\"text-sm font-bold text-muted-foreground italic\">\n Only administrators can send messages to this group.\n </p>\n </div>\n </div>\n );\n }\n\n const containerClass = \"w-full\";\n\n return (\n <div className=\"px-3 pb-4 pt-3 md:px-4\">\n {/* Attachments Preview - aligned with input bar */}\n {state.attachments.length > 0 && (\n <div className=\"mb-4 animate-in fade-in slide-in-from-bottom-2 duration-300\">\n <div className={containerClass}>\n <div className=\"overflow-hidden \">\n <ScrollArea className=\"w-full\">\n <div className=\"flex gap-4 p-4\">\n {state.attachments.map((attachment) => (\n <div key={attachment.id} className=\"relative group shrink-0\">\n <div className=\"w-16 h-16 rounded-2xl overflow-hidden border-2 border-white bg-white shadow-md flex items-center justify-center\">\n {attachment.type === \"image\" ? (\n <img\n src={attachment.previewUrl}\n alt=\"preview\"\n className=\"w-full h-full object-cover\"\n />\n ) : attachment.type === \"video\" ? (\n <video\n src={attachment.previewUrl}\n className=\"w-full h-full object-cover\"\n muted\n />\n ) : (\n <div className=\"flex flex-col items-center justify-center gap-1 px-1 w-full relative z-10 h-full pt-1\">\n {getAttachmentIcon(attachment.file.name, attachment.type, \"text-(--chat-theme-60)\", 26)}\n <span className=\"text-[9px] font-bold text-(--chat-theme-60) truncate w-full text-center px-1\">\n {attachment.file.name}\n </span>\n </div>\n )}\n </div>\n\n <button\n type=\"button\"\n onClick={() => handleRemoveAttachment(attachment.id)}\n className=\"absolute -top-1.5 -right-1.5 size-6 bg-(--chat-theme) text-white rounded-full flex items-center justify-center shadow-lg hover:scale-110 active:scale-95 transition-all opacity-0 group-hover:opacity-100 ring-2 ring-white z-20\"\n aria-label={`Remove ${attachment.file.name}`}\n >\n <X size={12} />\n </button>\n </div>\n ))}\n </div>\n\n <ScrollBar orientation=\"horizontal\" />\n </ScrollArea>\n </div>\n </div>\n </div >\n )}\n\n {/* Reply Preview */}\n {replyTo && (\n <div className={cn(containerClass, \"mb-2 animate-in fade-in slide-in-from-bottom-2 duration-300\")}>\n <div className=\"flex items-center gap-3 bg-white/80 border border-border/40 p-3 py-2 rounded-2xl shadow-sm relative overflow-hidden\">\n <div className=\"absolute left-0 top-0 bottom-0 w-1 bg-(--chat-theme)\" />\n <div className=\"flex flex-col flex-1 min-w-0\">\n <span className=\"text-[10px] font-bold text-(--chat-theme) uppercase tracking-wider mb-0.5\">Replying to {replyTo.sender}</span>\n <p className=\"text-xs text-muted-foreground truncate\">{replyTo.content}</p>\n </div>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7 rounded-full hover:bg-muted\"\n onClick={onCancelReply}\n >\n <X size={14} />\n </Button>\n </div>\n </div>\n )}\n\n {/* Main Pill Bar */}\n <div\n className={cn(\n \"flex items-end gap-2 rounded-2xl border bg-[#f8fafc] p-2 transition-all duration-200\",\n containerClass,\n state.isFocused\n ? \"border-(--chat-theme-20) bg-white shadow-[0_0_0_3px_var(--chat-theme-10)]\"\n : \"border-black/[0.08]\"\n )}\n >\n {/* Attach button */}\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"shrink-0 size-9 rounded-full text-muted-foreground hover:text-[#111827] hover:bg-[#f3f4f6] transition-all\"\n onClick={() => fileInputRef.current?.click()}\n aria-label=\"Attach files\"\n >\n <Paperclip size={18} />\n </Button>\n\n <input\n type=\"file\"\n ref={fileInputRef}\n className=\"hidden\"\n multiple\n // ✅ images + videos + pdf/doc/docx/xls/xlsx\n accept=\"image/*,video/*,audio/*,.pdf,.doc,.docx,.xls,.xlsx\"\n onChange={handleFileChange}\n />\n\n {/* Emoji picker */}\n <Popover>\n <PopoverTrigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"shrink-0 size-9 rounded-full text-muted-foreground hover:text-[#111827] hover:bg-[#f3f4f6] transition-all\"\n aria-label=\"Open emoji picker\"\n >\n <Smile size={18} />\n </Button>\n </PopoverTrigger>\n\n <PopoverContent\n className=\"w-auto p-0 border-none shadow-2xl rounded-[20px] overflow-hidden mb-2\"\n align=\"start\"\n side=\"top\"\n >\n <EmojiPicker\n theme={Theme.LIGHT}\n onEmojiClick={(emojiData) => updateState({ messageInput: state.messageInput + emojiData.emoji })}\n lazyLoadEmojis\n searchPlaceholder=\"Search emojis...\"\n width={320}\n height={400}\n previewConfig={{ showPreview: false }}\n skinTonesDisabled\n />\n </PopoverContent>\n </Popover>\n\n {/* Textarea */}\n <Textarea\n id=\"message-input\"\n value={state.messageInput}\n onFocus={() => updateState({ isFocused: true })}\n onBlur={() => updateState({ isFocused: false })}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n placeholder={`Message ${activeChannel?.name}`}\n className=\"max-h-[120px] min-h-[40px] flex-1 resize-none overflow-hidden border-none bg-transparent px-2 py-2.5 text-sm shadow-none placeholder:text-muted-foreground/50 focus-visible:ring-0 focus-visible:ring-offset-0\"\n />\n\n {/* Send */}\n <Button\n type=\"button\"\n onClick={handleSendMessage}\n disabled={!state.messageInput.trim() && state.attachments.length === 0}\n className={cn(\n \"flex size-9 shrink-0 items-center justify-center rounded-xl transition-all duration-200\",\n state.messageInput.trim() || state.attachments.length > 0\n ? \"bg-(--chat-theme) text-white shadow-md hover:opacity-90\"\n : \"cursor-not-allowed bg-black/[0.06] text-muted-foreground\"\n )}\n aria-label=\"Send message\"\n >\n <Send size={16} className=\"ml-0.5\" />\n </Button>\n </div>\n\n {/* Error message under input */}\n {state.attachmentError && (\n <div className={cn(containerClass, \"mt-2 px-2\")}>\n <p className=\"text-[11px] font-semibold text-red-500\">{state.attachmentError}</p>\n </div>\n )}\n </div>\n );\n};\n\nexport default ChannelMessageBox;","import React, { useState, useMemo, useEffect, useRef, useCallback } from \"react\";\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from \"../ui/dialog\";\nimport { Input } from \"../ui/input\";\nimport { ScrollArea } from \"../ui/scroll-area\";\nimport { Loader2, Search, Send } from \"lucide-react\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"../ui/avatar\";\nimport { useStore } from \"../store/useStore\";\nimport type { IMessage, IChannel } from \"../types/chats.types\";\n\ninterface ForwardModalProps {\n isOpen: boolean;\n onClose: () => void;\n message: IMessage | null;\n onForwardComplete: (channel: IChannel) => void;\n}\n\nconst ForwardModal = ({ isOpen, onClose, message, onForwardComplete }: ForwardModalProps) => {\n const [search, setSearch] = useState(\"\");\n const [debouncedSearch, setDebouncedSearch] = useState(\"\");\n const targetChannelRef = useRef<IChannel | null>(null);\n const wasForwardingRef = useRef(false);\n const completionHandledRef = useRef(false);\n\n const emitDmForward = useStore((s) => s.emitDmForward);\n const emitGroupForward = useStore((s) => s.emitGroupForward);\n const loggedUserDetails = useStore((s) => s.loggedUserDetails);\n const pendingActions = useStore((s) => s.messagePendingActions);\n const storeConversations = useStore((s) => s.conversations);\n const allUsers = useStore((s) => s.allUsers);\n\n const mid = String((message as any)?._id || (message as any)?.id || \"\");\n const isForwarding = !!(mid && pendingActions[mid]?.includes(\"forward\"));\n\n const onCloseRef = useRef(onClose);\n const onForwardCompleteRef = useRef(onForwardComplete);\n useEffect(() => { onCloseRef.current = onClose; }, [onClose]);\n useEffect(() => { onForwardCompleteRef.current = onForwardComplete; }, [onForwardComplete]);\n\n const handleOpenChange = useCallback((open: boolean) => {\n if (!open) onCloseRef.current();\n }, []);\n\n useEffect(() => {\n if (isForwarding) {\n wasForwardingRef.current = true;\n\n const timeout = setTimeout(() => {\n useStore.getState().clearForwardPending(mid);\n }, 12000);\n\n return () => clearTimeout(timeout);\n }\n\n if (!wasForwardingRef.current || completionHandledRef.current) return;\n\n completionHandledRef.current = true;\n wasForwardingRef.current = false;\n\n const target = targetChannelRef.current;\n targetChannelRef.current = null;\n\n onCloseRef.current();\n\n if (target) {\n queueMicrotask(() => onForwardCompleteRef.current(target));\n }\n }, [isForwarding, mid]);\n\n useEffect(() => {\n if (!isOpen) {\n setSearch(\"\");\n setDebouncedSearch(\"\");\n targetChannelRef.current = null;\n wasForwardingRef.current = false;\n completionHandledRef.current = false;\n }\n }, [isOpen]);\n\n useEffect(() => {\n const handler = setTimeout(() => setDebouncedSearch(search), 400);\n return () => clearTimeout(handler);\n }, [search]);\n\n const mappedChannels = useMemo(() => {\n const sourceConversationId = message?.conversationId\n ? String(message.conversationId)\n : null;\n const query = debouncedSearch.trim().toLowerCase();\n\n return storeConversations\n .filter((c: any) => !sourceConversationId || String(c._id) !== sourceConversationId)\n .map((c: any) => {\n const isGroup = c.conversationType === \"group\" || c.isGroup;\n const otherParticipantData =\n c.participants?.find(\n (p: any) => String(p._id || p) !== String(loggedUserDetails?._id)\n ) || c.participants?.[0];\n const otherParticipantId = String(otherParticipantData?._id || otherParticipantData || \"\");\n const resolvedUser =\n typeof otherParticipantData === \"object\" && otherParticipantData?.name\n ? otherParticipantData\n : (Array.isArray(allUsers) ? allUsers : []).find(\n (u) => String(u._id) === otherParticipantId\n );\n const name = isGroup\n ? c.groupName || \"Group Chat\"\n : resolvedUser?.name || otherParticipantData?.name || \"Unknown User\";\n const image = isGroup\n ? c.image || \"\"\n : resolvedUser?.image || otherParticipantData?.image || `https://i.pravatar.cc/150?u=${otherParticipantId}`;\n\n return {\n id: isGroup ? String(c._id) : otherParticipantId,\n conversationId: String(c._id),\n name: name.charAt(0).toUpperCase() + name.slice(1),\n image,\n isOnline: false,\n isGroup,\n } as IChannel;\n })\n .filter((channel) => !query || channel.name.toLowerCase().includes(query));\n }, [storeConversations, allUsers, loggedUserDetails?._id, message?.conversationId, debouncedSearch]);\n\n const handleForward = (channel: IChannel) => {\n if (!message || !loggedUserDetails || !mid) return;\n\n completionHandledRef.current = false;\n targetChannelRef.current = channel;\n\n const targetConversationIds = [String(channel.conversationId)];\n const payload = {\n messageId: String(mid),\n sender: String(loggedUserDetails._id),\n sourceConversationId: message.conversationId ? String(message.conversationId) : undefined,\n targetConversationIds,\n ...(!channel.isGroup && channel.id ? { receiver: String(channel.id) } : {}),\n };\n\n if (channel.isGroup) {\n emitGroupForward(payload);\n } else {\n emitDmForward(payload);\n }\n };\n\n if (!isOpen || !message) return null;\n\n return (\n <Dialog open={isOpen} onOpenChange={handleOpenChange}>\n <DialogContent className=\"sm:max-w-md rounded-2xl overflow-hidden p-0 border-none bg-[#fdfdfe] shadow-2xl\">\n <DialogHeader className=\"pt-6 px-6 pb-2\">\n <DialogTitle className=\"text-xl font-bold flex items-center justify-between\">\n Forward Message\n </DialogTitle>\n </DialogHeader>\n\n <div className=\"px-6 pb-4\">\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 size-4 text-muted-foreground opacity-50\" />\n <Input\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder=\"Search conversations...\"\n className=\"pl-9 bg-[#f3f4f6] border-none rounded-xl h-11 focus-visible:ring-1 focus-visible:ring-(--chat-theme)\"\n disabled={isForwarding}\n />\n </div>\n </div>\n\n <div className=\"relative border-t border-border/40\">\n {isForwarding && (\n <div className=\"absolute inset-0 z-10 flex flex-col items-center justify-center bg-[#fdfdfe]/90 text-center animate-in fade-in duration-300\">\n <div className=\"size-12 rounded-full bg-(--chat-theme-10) flex items-center justify-center mb-3\">\n <Loader2 className=\"animate-spin text-(--chat-theme) size-6\" />\n </div>\n <p className=\"font-bold text-(--chat-theme)\">Forwarding message...</p>\n <p className=\"text-xs text-muted-foreground opacity-70\">Please wait while we send your message.</p>\n </div>\n )}\n\n <ScrollArea className=\"h-[300px]\">\n <div className=\"p-2 space-y-1\">\n {mappedChannels.length > 0 ? (\n mappedChannels.map((channel) => (\n <div\n key={channel.conversationId}\n className=\"flex justify-between items-center p-3 hover:bg-muted/40 rounded-xl transition-all cursor-pointer group\"\n onClick={() => !isForwarding && handleForward(channel)}\n >\n <div className=\"flex items-center gap-3\">\n <Avatar className=\"h-10 w-10\">\n <AvatarImage src={channel.image} />\n <AvatarFallback className=\"bg-muted text-muted-foreground font-bold text-xs\">\n {channel.name.charAt(0)}\n </AvatarFallback>\n </Avatar>\n <h3 className=\"font-bold text-sm text-[#111827]\">{channel.name}</h3>\n </div>\n <button\n type=\"button\"\n className=\"size-8 rounded-full bg-(--chat-theme-10) text-(--chat-theme) flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity\"\n >\n <Send className=\"size-4 -ml-0.5\" />\n </button>\n </div>\n ))\n ) : (\n <div className=\"flex flex-col items-center justify-center p-6 text-muted-foreground opacity-50\">\n <p className=\"text-sm\">No conversations found.</p>\n </div>\n )}\n </div>\n </ScrollArea>\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default ForwardModal;\n","\nimport React, { useEffect, useRef } from 'react';\nimport { useStore } from '../store/useStore';\nimport {\n findConversationForChannel,\n getOtherParticipantId,\n isGroupConversation,\n resolveConversationIdForChannel,\n} from '../store/helpers/store.helpers';\n\nexport const Channel = ({ children }: { children: React.ReactNode }) => {\n const activeChannel = useStore((s) => s.activeChannel);\n const activeConversationId = useStore((s) => s.activeConversationId);\n const setStoreActiveConversationId = useStore((s) => s.setActiveConversationId);\n const loggedUserDetails = useStore((s) => s.loggedUserDetails);\n\n const fetchMessages = useStore((s) => s.fetchMessages);\n const fetchConversationInfo = useStore((s) => s.fetchConversationInfo);\n const emitGroupJoin = useStore((s) => s.emitGroupJoin);\n const emitGroupMarkRead = useStore((s) => s.emitGroupMarkRead);\n const emitMarkAsRead = useStore((s) => s.emitMarkAsRead);\n\n const lastResolvedChannelRef = useRef<string | null>(null);\n const lastConversationActionsRef = useRef<string | null>(null);\n\n const activeChannelId = activeChannel?.id;\n const activeChannelConvId = activeChannel?.conversationId;\n const activeChannelIsGroup = !!activeChannel?.isGroup;\n\n const needsConversationResolve = !activeChannel?.conversationId;\n const conversationsLength = useStore((s) =>\n needsConversationResolve ? s.conversations.length : 0\n );\n\n // Reset per-channel guards when the selected channel identity changes\n useEffect(() => {\n lastResolvedChannelRef.current = null;\n lastConversationActionsRef.current = null;\n }, [activeChannelId, activeChannelConvId, activeChannelIsGroup]);\n\n // Resolve conversation id only when the channel object lacks conversationId (e.g. new DM)\n useEffect(() => {\n if (!activeChannel || !loggedUserDetails) return;\n if (activeChannel.conversationId) return;\n\n const channelKey = [\n String(activeChannel.id),\n String(!!activeChannel.isGroup),\n ].join(\"|\");\n\n if (lastResolvedChannelRef.current === channelKey) return;\n\n const nextId = resolveConversationIdForChannel(\n activeChannel,\n loggedUserDetails._id,\n useStore.getState().conversations\n );\n\n if (!nextId) return;\n\n lastResolvedChannelRef.current = channelKey;\n\n const currentId = useStore.getState().activeConversationId;\n if (String(currentId ?? \"\") !== String(nextId)) {\n setStoreActiveConversationId(nextId);\n }\n }, [\n activeChannelId,\n activeChannelConvId,\n activeChannelIsGroup,\n loggedUserDetails?._id,\n conversationsLength,\n setStoreActiveConversationId,\n ]);\n\n // Fetch messages / join / mark-read once per conversation switch\n useEffect(() => {\n if (!activeConversationId || !activeChannel || !loggedUserDetails) {\n return;\n }\n\n if (lastConversationActionsRef.current === activeConversationId) {\n return;\n }\n lastConversationActionsRef.current = activeConversationId;\n\n fetchMessages(activeConversationId);\n fetchConversationInfo(activeConversationId);\n\n const activeConv = findConversationForChannel(\n activeChannel,\n loggedUserDetails._id,\n useStore.getState().conversations\n );\n const convIsGroup = isGroupConversation(activeConv);\n const channelIsGroup = !!activeChannel.isGroup;\n const useGroupSocket = channelIsGroup && (!activeConv || convIsGroup);\n const useDmSocket = !channelIsGroup && (!activeConv || !convIsGroup);\n\n if (useGroupSocket) {\n emitGroupJoin({\n conversationId: activeConversationId,\n userId: String(loggedUserDetails._id),\n });\n emitGroupMarkRead({\n conversationId: activeConversationId,\n userId: String(loggedUserDetails._id),\n });\n } else if (useDmSocket) {\n const receiverId =\n getOtherParticipantId(activeConv, loggedUserDetails._id) ||\n String(activeChannel.id);\n\n emitMarkAsRead({\n conversationId: activeConversationId,\n sender: String(loggedUserDetails._id),\n receiver: receiverId,\n });\n }\n }, [activeConversationId, loggedUserDetails?._id, activeChannelId]);\n\n return (\n <div className=\"flex flex-col flex-1 h-full bg-[#fdfdfe] relative min-w-0 w-full overflow-hidden\">\n {children}\n </div>\n );\n};\n","import React from 'react'\nimport { cn } from '../lib/utils'\nimport { useChatController } from '../hooks/useChatController'\nimport {\n ChatLayoutConfig,\n mergeChatLayoutConfig,\n} from '../types/layout.types'\nimport LoggedUserDetails from './LoggedUserDetails'\nimport ChannelList from './ChannelList'\nimport ChannelHeader from './ChannelHeader'\nimport ActiveChannelMessages from './ActiveChannelMessages'\nimport ChannelMessageBox from './ChannelMessageBox'\nimport ForwardModal from './ForwardModal'\nimport { Channel } from './Channel'\n\nexport interface ChatLayoutProps {\n /** Toggle which UI blocks are rendered */\n layout?: ChatLayoutConfig\n /** Passed to LoggedUserDetails */\n loggedUserDetails?: any\n themeColor?: string\n className?: string\n shellClassName?: string\n}\n\n/**\n * Composable chat shell — turn sections on/off via `layout`.\n *\n * @example Full UI (default)\n * `<ChatLayout />`\n *\n * @example Messages only (no sidebar, header, or input)\n * `<ChatLayout layout={{ sidebar: false, header: false, input: false }} />`\n *\n * @example Custom — import pieces individually instead:\n * `import { Channel, MessageList } from '@realtimexsco/live-chat'`\n */\nconst ChatLayout = ({\n layout,\n loggedUserDetails: loggedUserDetailsProp,\n themeColor,\n className,\n shellClassName,\n}: ChatLayoutProps) => {\n const sections = mergeChatLayoutConfig(layout)\n const showSidebar =\n sections.sidebar &&\n (sections.loggedUserDetails || sections.channelList)\n\n const {\n activeChannel,\n setActiveChannel,\n conversationId,\n rateLimitResetAt,\n isFetchingMessages,\n loggedUserDetails,\n conversationInfos,\n conversationMessages,\n currentLocalMessages,\n state,\n updateState,\n handleChannelSelect,\n handleSendMessage,\n } = useChatController()\n\n const userDetails = loggedUserDetailsProp ?? loggedUserDetails\n\n return (\n <div\n className={cn(\n 'chat-shell chat-container-root flex h-full w-full overflow-hidden bg-[#f4f5f7] p-3 md:p-4',\n shellClassName,\n )}\n >\n <div\n className={cn(\n 'relative flex flex-1 overflow-hidden rounded-2xl border border-black/[0.06] bg-white shadow-[0_8px_30px_rgba(15,23,42,0.06)]',\n className,\n )}\n >\n {showSidebar && (\n <aside\n className={cn(\n 'flex h-full shrink-0 flex-col border-r border-black/[0.06] bg-white transition-all duration-300 ease-in-out',\n 'w-full md:w-[340px] lg:w-[360px] xl:w-[380px]',\n activeChannel ? 'hidden md:flex' : 'flex',\n )}\n >\n {sections.loggedUserDetails && (\n <LoggedUserDetails\n loggedUserDetails={userDetails}\n onUserSelect={handleChannelSelect}\n searchQuery={state.searchQuery}\n setSearchQuery={(val) =>\n updateState({ searchQuery: val })\n }\n isCreateModalOpen={state.isCreateModalOpen}\n setIsCreateModalOpen={(open) =>\n updateState({ isCreateModalOpen: open })\n }\n themeColor={themeColor}\n />\n )}\n {sections.channelList && (\n <ChannelList\n activeChannel={activeChannel}\n onChannelSelect={handleChannelSelect}\n onNewChatClick={() =>\n updateState({ isCreateModalOpen: true })\n }\n debouncedSearch={state.debouncedSearch}\n />\n )}\n </aside>\n )}\n\n <Channel>\n {rateLimitResetAt > Date.now() && (\n <div className=\"shrink-0 border-b border-amber-200/80 bg-amber-50 px-4 py-2 text-center text-xs font-medium text-amber-800\">\n Too many requests — please wait before trying again.\n </div>\n )}\n\n {sections.header && (\n <div className=\"shrink-0\">\n <ChannelHeader\n activeChannel={activeChannel}\n conversationId={conversationId}\n onBack={() => setActiveChannel(null)}\n />\n </div>\n )}\n\n {sections.messageList && (\n <div className=\"relative min-h-0 flex-1 overflow-hidden\">\n <ActiveChannelMessages\n activeChannel={activeChannel}\n loggedUserId={userDetails?._id}\n conversationMessages={conversationMessages}\n localMessages={currentLocalMessages}\n isLoading={isFetchingMessages}\n conversationId={conversationId}\n onReply={(msg) => updateState({ replyTo: msg })}\n onForward={(msg) =>\n updateState({\n forwardMessage: msg,\n isForwardModalOpen: true,\n })\n }\n conversationInfo={\n conversationId\n ? conversationInfos[conversationId] ||\n null\n : null\n }\n />\n </div>\n )}\n\n {sections.input && (\n <div className=\"shrink-0 border-t border-black/[0.06] bg-white\">\n <ChannelMessageBox\n activeChannel={activeChannel}\n conversationId={conversationId}\n onSendMessage={handleSendMessage}\n replyTo={state.replyTo}\n onCancelReply={() =>\n updateState({ replyTo: null })\n }\n />\n </div>\n )}\n </Channel>\n </div>\n\n {sections.forwardModal && (\n <ForwardModal\n isOpen={state.isForwardModalOpen}\n onClose={() =>\n updateState({ isForwardModalOpen: false })\n }\n message={state.forwardMessage}\n onForwardComplete={(channel) =>\n handleChannelSelect(channel)\n }\n />\n )}\n </div>\n )\n}\n\nexport default ChatLayout\n","import React from 'react'\nimport { Chat, UIConfig } from './ChatContext'\nimport ChatLayout from './ChatLayout'\nimport { ChatLayoutConfig } from '../types/layout.types'\n\ninterface ChatMainProps {\n clientId: string\n loggedUserDetails: any\n accessToken: string\n apiUrl?: string\n socketUrl?: string\n themeColor?: string\n theme?: string\n uiConfig?: UIConfig\n /** Control which sections render. Omit for full UI. */\n layout?: ChatLayoutConfig\n}\n\nconst ChatMain = (props: ChatMainProps) => {\n const clientObj = React.useMemo(() => ({ id: props.clientId }), [props.clientId])\n const uiConfigObj = React.useMemo(() => props.uiConfig || {}, [props.uiConfig])\n\n return (\n <Chat\n client={clientObj}\n accessToken={props.accessToken}\n loggedUserDetails={props.loggedUserDetails}\n themeColor={props.themeColor}\n theme={props.theme}\n uiConfig={uiConfigObj}\n apiUrl={props.apiUrl}\n socketUrl={props.socketUrl}\n >\n <ChatLayout\n layout={props.layout}\n loggedUserDetails={props.loggedUserDetails}\n themeColor={props.themeColor}\n />\n </Chat>\n )\n}\n\nexport default ChatMain\n","import ChatMain from \"./chat/ChatMain\";\nexport { ChatMain };\nexport default ChatMain;\nexport { Chat, type UIConfig, useChatContext } from \"./chat/ChatContext\";\nexport { useStore as useChatStore } from \"./store/useStore\";\nexport { default as socketService } from \"./services/socket.service\";\nexport { Channel } from \"./chat/Channel\";\nexport { default as ChannelList } from \"./chat/ChannelList\";\nexport { default as ChannelHeader } from \"./chat/ChannelHeader\";\nexport { default as MessageList } from \"./chat/ActiveChannelMessages\";\nexport { default as MessageInput } from \"./chat/ChannelMessageBox\";\nexport { default as LoggedUserDetails } from \"./chat/LoggedUserDetails\";\nexport { default as ForwardModal } from \"./chat/ForwardModal\";\nexport { default as ChatLayout } from \"./chat/ChatLayout\";\nexport { useChatController } from \"./hooks/useChatController\";\nexport {\n type ChatLayoutConfig,\n defaultChatLayoutConfig,\n mergeChatLayoutConfig,\n} from \"./types/layout.types\";\nexport { setChatClientId, setChatAccessToken, setChatBaseURL } from \"./services/api.service\";\nexport type { ISocketConfig } from \"./config/socket.config\";\nexport { getSocketConfig } from \"./config/socket.config\";\nexport type { IChannel, IMessage, IAttachment } from \"./types/chats.types\";\nexport type {\n IDMMessage,\n IDMTyping,\n IDMEditMessage,\n IDMReaction,\n IDMDelete,\n IDMRead,\n IDMPin,\n IDMStar,\n IDMUnstar,\n IDMForward,\n} from \"./types/dm.types\";\nexport {\n showNotification,\n downloadFile,\n getResponsiveWidth,\n isEmpty,\n uniqueList,\n capitalizeFirst,\n getFirstAndLastNameOneCharacter,\n} from \"./helpers/general\";\n","import { ManagerOptions, SocketOptions } from \"socket.io-client\";\n\nexport interface ISocketConfig {\n url: string;\n options: Partial<ManagerOptions & SocketOptions>;\n}\n\nexport const getSocketConfig = (\n accessToken: string,\n tenantId: string,\n apiBaseUrl?: string\n): ISocketConfig => {\n const baseURL = (apiBaseUrl || \"\").replace(\"/api/v1\", \"\");\n\n return {\n url: baseURL,\n options: {\n path: \"/connection\",\n auth: {\n accessToken,\n },\n query: {\n platform: \"web\",\n tenantId: tenantId || \"\",\n isTenant: \"true\",\n },\n extraHeaders: {\n Authorization: `Bearer ${accessToken}`,\n platform: \"web\",\n tenantId: tenantId || \"\",\n isTenant: \"true\",\n },\n transports: [\"websocket\", \"polling\"],\n reconnection: true,\n reconnectionAttempts: Infinity,\n reconnectionDelay: 2000,\n reconnectionDelayMax: 5000,\n timeout: 20000,\n },\n };\n};\n","import { toast, type ToastOptions, type Renderable } from \"react-hot-toast\";\n\ntype NotificationType = \"success\" | \"error\" | \"info\" | \"warning\";\n\nexport const showNotification = (\n message: string,\n type: NotificationType = \"info\",\n icon?: Renderable,\n duration?: number\n) => {\n const options: ToastOptions = {\n icon,\n duration,\n };\n\n switch (type) {\n case \"success\":\n toast.success(message, options);\n break;\n case \"error\":\n toast.error(message, options);\n break;\n case \"info\":\n toast(message, options);\n break;\n case \"warning\":\n toast(message, { ...options, icon: \"⚠️\" });\n break;\n default:\n toast(message, options);\n }\n};\n\nexport const downloadFile = async (src: string, name: string) => {\n try {\n const link = document.createElement(\"a\");\n link.href = src;\n link.setAttribute(\"download\", name);\n link.setAttribute(\"rel\", \"noopener noreferrer\");\n link.click();\n\n showNotification(\"File Downloaded Successfully\", \"success\");\n } catch (err) {\n console.error(\"File download failed:\", err);\n showNotification(\"Failed to download file\", \"error\");\n }\n};\n\nexport const getResponsiveWidth = (width?: number): number => {\n const screenWidth = window.innerWidth;\n\n if (width) {\n return width;\n } else if (screenWidth < 640) {\n return 350;\n } else if (screenWidth >= 640 && screenWidth < 1024) {\n return 600;\n } else if (screenWidth >= 1024 && screenWidth < 1280) {\n return 800;\n } else {\n return 1000;\n }\n};\n\nexport const isEmpty = (value: any): boolean => {\n if (value === null || value === undefined) return true;\n\n if (typeof value === \"string\") return value.trim().length === 0;\n\n if (Array.isArray(value)) {\n return value.length === 0 || value.every((item) => isEmpty(item));\n }\n\n if (typeof value === \"object\") {\n return Object.keys(value).length === 0;\n }\n\n return false;\n};\n\nexport function uniqueList<T extends Record<string, any>>(\n list: T[],\n key: keyof T\n): T[] {\n const seen = new Set<string | number>();\n return list.filter((item) => {\n const value = item[key];\n if (seen.has(value)) return false;\n seen.add(value);\n return true;\n });\n}\n\nexport const capitalizeFirst = (str: string) =>\n str.charAt(0).toUpperCase() + str.slice(1);\n\nexport const getFirstAndLastNameOneCharacter = (name: string) => {\n const names = name.split(\" \");\n return names.map((name) => name.charAt(0).toUpperCase()).join(\"\");\n};\n"]}