+
+
+ 255 ? '#dc3545' : '#6c757d'
+ }}>
+ {charCount}/255
+
+
+
+ {sendError && (
+
+ Failed to send message. Please try again.
+
+ )}
+ {!isConnected && (
+
+ Disconnected. Reconnecting...
+
+ )}
+
+ );
+};
+
+export default React.memo(JKChatComposer);
+```
+
+**Key features:**
+- Local state for inputText (ephemeral, no need for Redux)
+- Character count display with red color when > 255
+- Disabled states: not connected, sending, invalid input
+- Error display for send failures
+- Disconnected warning
+- React.memo for performance
+- useCallback for handlers to prevent re-renders
+
+**Validation logic:**
+- Trim whitespace before checking length
+- Must be 1-255 characters after trim
+- Button disabled when invalid or disconnected or sending
+
+**Why local state for inputText:**
+Per Phase 6 design, input text is ephemeral UI state that doesn't need persistence across re-renders or sharing with other components.
+