diff --git a/src/workspaces/officerdev/src/apps/Chat/components/InputArea.tsx b/src/workspaces/officerdev/src/apps/Chat/components/InputArea.tsx index ee6a3f60..600fdb6b 100644 --- a/src/workspaces/officerdev/src/apps/Chat/components/InputArea.tsx +++ b/src/workspaces/officerdev/src/apps/Chat/components/InputArea.tsx @@ -115,7 +115,6 @@ export const InputArea = ({ manager, disabled }: InputAreaProps) => { // Native `disabled`, not a click guard: it also takes the field out of the tab order and stops a // paste, which a guard on send would not. disabled={!!disabled} - placeholder={disabled ? disabled.reason : undefined} onChange={(ev) => setInput(ev.target.value)} onKeyDown={(ev) => { // Enter is how anybody actually sends, so the interception has to be here as well as on the @@ -143,7 +142,10 @@ export const InputArea = ({ manager, disabled }: InputAreaProps) => { } } }} - placeholder="Type a message..." + // One placeholder, not two. It was declared twice on this element — the reason above and this + // below — and JSX takes the LAST, so the gate was applied and completely invisible: a disabled + // composer still inviting you to type a message. + placeholder={disabled ? disabled.reason : 'Type a message...'} rows={1} className="min-w-0 flex-1 resize-none rounded-lg border border-input bg-background/80 px-2 py-1.5 md:px-3 md:py-2 text-base md:text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-duck-teal/30 focus:border-duck-teal/50" />