diff --git a/public/assets/icons/arrow-down-icon.svg b/public/assets/icons/arrow-down-icon.svg new file mode 100644 index 0000000..bcb8640 --- /dev/null +++ b/public/assets/icons/arrow-down-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/assets/icons/chevron-right-icon.svg b/public/assets/icons/chevron-right-icon.svg new file mode 100644 index 0000000..ee9eac3 --- /dev/null +++ b/public/assets/icons/chevron-right-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/assets/icons/compose-icon.svg b/public/assets/icons/compose-icon.svg new file mode 100644 index 0000000..5d3863f --- /dev/null +++ b/public/assets/icons/compose-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/assets/icons/emoji-icon.svg b/public/assets/icons/emoji-icon.svg new file mode 100644 index 0000000..3f5c181 --- /dev/null +++ b/public/assets/icons/emoji-icon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/assets/icons/gallery-icon.svg b/public/assets/icons/gallery-icon.svg new file mode 100644 index 0000000..8fccd97 --- /dev/null +++ b/public/assets/icons/gallery-icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/assets/icons/gif-icon.svg b/public/assets/icons/gif-icon.svg new file mode 100644 index 0000000..6390458 --- /dev/null +++ b/public/assets/icons/gif-icon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/assets/icons/search-icon.svg b/public/assets/icons/search-icon.svg new file mode 100644 index 0000000..70b69db --- /dev/null +++ b/public/assets/icons/search-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/assets/icons/settings-bell-icon.svg b/public/assets/icons/settings-bell-icon.svg new file mode 100644 index 0000000..892b013 --- /dev/null +++ b/public/assets/icons/settings-bell-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/assets/icons/settings-lock-icon.svg b/public/assets/icons/settings-lock-icon.svg new file mode 100644 index 0000000..05dfa28 --- /dev/null +++ b/public/assets/icons/settings-lock-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/assets/icons/settings-privacy-icon.svg b/public/assets/icons/settings-privacy-icon.svg new file mode 100644 index 0000000..9fdf7c9 --- /dev/null +++ b/public/assets/icons/settings-privacy-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/assets/icons/settings-profile-icon.svg b/public/assets/icons/settings-profile-icon.svg new file mode 100644 index 0000000..aff1b92 --- /dev/null +++ b/public/assets/icons/settings-profile-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/assets/icons/shield-verified-icon.svg b/public/assets/icons/shield-verified-icon.svg index 2c65278..97d6103 100644 --- a/public/assets/icons/shield-verified-icon.svg +++ b/public/assets/icons/shield-verified-icon.svg @@ -1,4 +1,3 @@ - - - + + diff --git a/public/assets/icons/star-outline-icon.svg b/public/assets/icons/star-outline-icon.svg new file mode 100644 index 0000000..e318905 --- /dev/null +++ b/public/assets/icons/star-outline-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/assets/icons/three-dots-icon.svg b/public/assets/icons/three-dots-icon.svg new file mode 100644 index 0000000..8629c4c --- /dev/null +++ b/public/assets/icons/three-dots-icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/app/(agent)/agent/dashboard/component/ProfileCard.tsx b/src/app/(agent)/agent/dashboard/component/ProfileCard.tsx index 1d18c07..8191687 100644 --- a/src/app/(agent)/agent/dashboard/component/ProfileCard.tsx +++ b/src/app/(agent)/agent/dashboard/component/ProfileCard.tsx @@ -86,7 +86,10 @@ export function ProfileCard({ {/* Action Buttons */}
- + + {/* Top row - Name, status, actions */} +
+
+

+ {name} +

+ + + {role} + + + {lastSeen} + +
+
+ + +
+
+ + {/* User profile row */} +
+ {/* Avatar */} +
+
+ {name} +
+ {isOnline && ( +
+ )} +
+ + {/* User info */} +
+
+ + {name} + + Verified + {pronouns && ( + + ({pronouns}) + + )} +
+ + {/* Expertise tags */} + {expertise.length > 0 && ( +
+ {expertise.map((tag, index) => ( + + + {tag} + + {index < expertise.length - 1 && ( + | + )} + + ))} +
+ )} +
+
+
+ ); +} diff --git a/src/app/(agent)/agent/message/component/ConversationItem.tsx b/src/app/(agent)/agent/message/component/ConversationItem.tsx new file mode 100644 index 0000000..54dd46d --- /dev/null +++ b/src/app/(agent)/agent/message/component/ConversationItem.tsx @@ -0,0 +1,65 @@ +'use client'; + +import Image from 'next/image'; + +interface ConversationItemProps { + id: string; + name: string; + avatar: string; + lastMessage: string; + date: string; + isOnline?: boolean; + isSelected?: boolean; + onClick?: () => void; +} + +export function ConversationItem({ + id, + name, + avatar, + lastMessage, + date, + isOnline = false, + isSelected = false, + onClick, +}: ConversationItemProps) { + return ( +
+ {/* Avatar with online indicator */} +
+
+ {name} +
+ {isOnline && ( +
+ )} +
+ + {/* Content */} +
+

+ {name} +

+

+ {lastMessage} +

+
+ + {/* Date */} +

+ {date} +

+
+ ); +} diff --git a/src/app/(agent)/agent/message/component/ConversationList.tsx b/src/app/(agent)/agent/message/component/ConversationList.tsx new file mode 100644 index 0000000..c281ab7 --- /dev/null +++ b/src/app/(agent)/agent/message/component/ConversationList.tsx @@ -0,0 +1,41 @@ +'use client'; + +import Image from 'next/image'; +import { ConversationItem } from './ConversationItem'; + +interface Conversation { + id: string; + name: string; + avatar: string; + lastMessage: string; + date: string; + isOnline?: boolean; +} + +interface ConversationListProps { + conversations: Conversation[]; + selectedId: string | null; + onSelect: (id: string) => void; +} + +export function ConversationList({ + conversations, + selectedId, + onSelect, +}: ConversationListProps) { + return ( +
+ {/* Scrollable conversation list */} +
+ {conversations.map((conversation) => ( + onSelect(conversation.id)} + /> + ))} +
+
+ ); +} diff --git a/src/app/(agent)/agent/message/component/MessageInput.tsx b/src/app/(agent)/agent/message/component/MessageInput.tsx new file mode 100644 index 0000000..9cff087 --- /dev/null +++ b/src/app/(agent)/agent/message/component/MessageInput.tsx @@ -0,0 +1,98 @@ +'use client'; + +import Image from 'next/image'; +import { useState } from 'react'; + +interface MessageInputProps { + onSend?: (message: string) => void; +} + +export function MessageInput({ onSend }: MessageInputProps) { + const [message, setMessage] = useState(''); + + const handleSend = () => { + if (message.trim() && onSend) { + onSend(message.trim()); + setMessage(''); + } + }; + + const handleKeyDown = (e: React.KeyboardEvent) => { + if (e.key === 'Enter' && !e.shiftKey) { + e.preventDefault(); + handleSend(); + } + }; + + return ( +
+ {/* Text input area */} +
+