+ {/* Avatar */}
+
+ {getInitials(senderName)}
+
+
+ {/* Message content */}
+
+
+
+ {senderName || 'Unknown'}
+
+
+ {formatTimestamp(createdAt)}
+
+
+
+ {text}
+
+
+
+ );
+ };
+
+ JKChatMessage.propTypes = {
+ message: PropTypes.shape({
+ id: PropTypes.string.isRequired,
+ senderId: PropTypes.string.isRequired,
+ senderName: PropTypes.string,
+ message: PropTypes.string.isRequired,
+ createdAt: PropTypes.string.isRequired
+ }).isRequired
+ };
+
+ export default React.memo(JKChatMessage);
+ ```
+
+**Component features:**
+- Avatar with initials (first + last name initials)
+- Sender name in bold
+- Relative timestamp (via formatTimestamp utility)
+- Message text with word wrapping
+- React.memo for performance (prevents re-renders on list scroll)
+- Inline styles (SCSS in Plan 8.3 if needed)
+
+**Verification:**
+- Component renders message correctly
+- Initials generated properly
+- Timestamp formatted correctly
+- No PropTypes warnings
+