+ {expandable ? (
+
setOpen((value) => !value)}
+ >
+ {row}
+
+ ) : (
+ row
+ )}
+ {expandable && open ? (
+
+ {children}
+
+ ) : null}
+
+ )
+}
+
+/** Sticky composer banner until next Send — stalled / failed turn honesty. */
+export function StoppedTurnBanner({
+ reason,
+ testId = 'stopped-turn-banner',
+}: {
+ reason: string
+ testId?: string
+}) {
+ const T = useTokens()
+ const text = reason.trim() || 'The mouth stopped without saying why.'
+ return (
+