@@ -42,49 +42,52 @@ export function Messages({
4242
4343 return (
4444 < div className = "flex flex-col gap-1.5 px-1 py-1.5" >
45- { items . map ( ( msg ) => (
46- < div
47- key = { msg . id }
48- className = { `flex gap-1.5 items-start ${ msg . dialogId && onMessageClick ? "cursor-pointer hover:opacity-80 active:opacity-60 transition-opacity" : "cursor-pointer" } ` }
49- onClick = { ( ) => {
50- if ( msg . dialogId && onMessageClick ) {
51- onMessageClick ( msg . dialogId , msg . id ) ;
52- } else {
53- onMarkAsRead ?.( msg . id ) ;
54- }
55- } }
56- >
57- { /* Avatar */ }
45+ { items
46+ . slice ( )
47+ . reverse ( )
48+ . map ( ( msg ) => (
5849 < div
59- className = { `shrink-0 w-6 h-6 rounded-full flex items-center justify-center text-white font-semibold ${ senderColor ( msg . sender ) } ` }
60- style = { { fontSize : "9px" } }
61- title = { msg . sender }
50+ key = { msg . id }
51+ className = { `flex gap-1.5 items-start ${ msg . dialogId && onMessageClick ? "cursor-pointer hover:opacity-80 active:opacity-60 transition-opacity" : "cursor-pointer" } ` }
52+ onClick = { ( ) => {
53+ if ( msg . dialogId && onMessageClick ) {
54+ onMessageClick ( msg . dialogId , msg . id ) ;
55+ } else {
56+ onMarkAsRead ?.( msg . id ) ;
57+ }
58+ } }
6259 >
63- { senderInitial ( msg . sender ) }
64- </ div >
65-
66- { /* Bubble */ }
67- < div className = "flex-1 min-w-0" >
68- < div className = "flex items-baseline gap-1 mb-0.5" >
69- < span className = "text-[9px] font-semibold text-stone-600 truncate" >
70- { msg . sender }
71- </ span >
72- < span className = "text-[8px] text-stone-400 shrink-0" >
73- { formatTime ( msg . timestamp ) }
74- </ span >
75- { ! msg . read && (
76- < Bell
77- className = "w-4 h-4 text-amber-500 animate-[bell-shake_0.75s_infinite]"
78- fill = "currentColor"
79- />
80- ) }
60+ { /* Avatar */ }
61+ < div
62+ className = { `shrink-0 w-6 h-6 rounded-full flex items-center justify-center text-white font-semibold ${ senderColor ( msg . sender ) } ` }
63+ style = { { fontSize : "9px" } }
64+ title = { msg . sender }
65+ >
66+ { senderInitial ( msg . sender ) }
8167 </ div >
82- < div className = "bg-stone-100 border border-stone-200 rounded-lg rounded-tl-none px-2 py-1 text-[10px] text-stone-700 leading-snug wrap-break-word" >
83- { msg . content }
68+
69+ { /* Bubble */ }
70+ < div className = "flex-1 min-w-0" >
71+ < div className = "flex items-baseline gap-1 mb-0.5" >
72+ < span className = "text-[9px] font-semibold text-stone-600 truncate" >
73+ { msg . sender }
74+ </ span >
75+ < span className = "text-[8px] text-stone-400 shrink-0" >
76+ { formatTime ( msg . timestamp ) }
77+ </ span >
78+ { ! msg . read && (
79+ < Bell
80+ className = "w-4 h-4 text-amber-500 animate-[bell-shake_0.75s_infinite]"
81+ fill = "currentColor"
82+ />
83+ ) }
84+ </ div >
85+ < div className = "bg-stone-100 border border-stone-200 rounded-lg rounded-tl-none px-2 py-1 text-[10px] text-stone-700 leading-snug wrap-break-word" >
86+ { msg . content }
87+ </ div >
8488 </ div >
8589 </ div >
86- </ div >
87- ) ) }
90+ ) ) }
8891 </ div >
8992 ) ;
9093}
0 commit comments