hermes-agent/ui-tui/src/components
Brooklyn Nicholson 2a3e3157d2 fix(ui-tui): themed input text — typed text tracked the HOST terminal's fg, not the skin's
Live-repaint's composer gap: flip a light terminal to a dark skin and the
input goes black-on-black. The placeholder was already explicit truecolor
(theme muted), but TYPED text rendered with no color at all — the terminal's
default foreground — in both paint paths:

- the Ink render (<Text wrap="wrap">{rendered}</Text>, no color), and
- the fast-echo bypass, which writes raw cells straight to stdout.

The skin owns the background (OSC-11) but the default fg still belongs to
the host terminal's polarity, so any skin/terminal polarity mismatch made
input invisible. Every other transcript line already paints
theme.color.text (the completed inputBuf rows directly above the composer).

Give TextInput a color prop and paint both paths with it: the Ink <Text>
(chalk re-opens the outer color after the placeholder chips' embedded [39m
closes; INV cursor/selection cells never touch fg) and the fast-echo write
via colorizeEcho — same explicit-truecolor-only rule as colorizeHint, so
the bypass cell can't flash terminal-default before the next frame. All six
TextInput sites (composer, prompts, masked, billing ×2, session switcher)
pass theme text; no color ⇒ passthrough, unthemed inputs keep the terminal
default.

Tests: colorizeEcho SGR wrap + passthrough contracts; full ui-tui suite
1338✓; typecheck clean.
2026-07-22 15:56:39 -05:00
..
accordion.tsx feat(ui-tui): widget primitives — charts, accordion, shimmer, stable streams 2026-07-21 20:59:54 -05:00
activeSessionSwitcher.tsx fix(ui-tui): themed input text — typed text tracked the HOST terminal's fg, not the skin's 2026-07-22 15:56:39 -05:00
agentsOverlay.tsx refactor(ui-tui): every selectable list rides the shared selection chip — zero inverse left 2026-07-21 16:36:58 -05:00
appChrome.tsx fmt(js): npm run fix on merge (#68976) 2026-07-21 22:59:05 +00:00
appLayout.tsx fix(ui-tui): themed input text — typed text tracked the HOST terminal's fg, not the skin's 2026-07-22 15:56:39 -05:00
appOverlays.tsx feat(ui-tui): widget-app SDK — registry, host, dispatch; demos become apps 2026-07-21 20:59:52 -05:00
billingOverlay.tsx fix(ui-tui): themed input text — typed text tracked the HOST terminal's fg, not the skin's 2026-07-22 15:56:39 -05:00
branding.tsx feat(ui-tui): widget primitives — charts, accordion, shimmer, stable streams 2026-07-21 20:59:54 -05:00
fpsOverlay.tsx fix(tui): restore macOS copy behavior and theme polish (#17131) 2026-04-28 18:47:14 -05:00
gridStreamsDemo.tsx feat(ui-tui): widget primitives — charts, accordion, shimmer, stable streams 2026-07-21 20:59:54 -05:00
gridTestOverlay.tsx feat(ui-tui): widget-app SDK — registry, host, dispatch; demos become apps 2026-07-21 20:59:52 -05:00
helpHint.tsx style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
journey.tsx refactor(ui-tui): every selectable list rides the shared selection chip — zero inverse left 2026-07-21 16:36:58 -05:00
loaders.tsx perf(ui-tui): shimmer loaders share one clock and stop after a bounded period 2026-07-21 20:29:48 -05:00
markdown.tsx style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
maskedPrompt.tsx fix(ui-tui): themed input text — typed text tracked the HOST terminal's fg, not the skin's 2026-07-22 15:56:39 -05:00
messageLine.tsx fix(tui): clear selection on right-click copy + group transcript blocks 2026-06-02 22:03:38 -05:00
modelPicker.tsx fix(ui-tui): overlay width caps are absolute — clampOverlayWidth (Copilot review) 2026-07-21 16:36:58 -05:00
overlay.tsx feat(ui-tui): widget-grid 2-axis layout engine + overlay primitives (#20379 rebase) 2026-07-21 16:36:17 -05:00
overlayControls.tsx fix(tui): restore macOS copy behavior and theme polish (#17131) 2026-04-28 18:47:14 -05:00
overlayPrimitives.tsx fmt(js): npm run fix on merge (#68976) 2026-07-21 22:59:05 +00:00
overlayScrollbar.tsx refactor(ui-tui): DRY the chrome primitives — shared scrollbarColors + hintRgb 2026-07-21 16:36:57 -05:00
petPicker.tsx fix(ui-tui): overlay width caps are absolute — clampOverlayWidth (Copilot review) 2026-07-21 16:36:58 -05:00
petSprite.tsx style(desktop,tui): fix all lint/type/formatting issues 2026-06-26 01:04:33 -05:00
pluginsHub.tsx fix(ui-tui): overlay width caps are absolute — clampOverlayWidth (Copilot review) 2026-07-21 16:36:58 -05:00
prompts.tsx fix(ui-tui): themed input text — typed text tracked the HOST terminal's fg, not the skin's 2026-07-22 15:56:39 -05:00
queuedMessages.tsx fix(tui): restore macOS copy behavior and theme polish (#17131) 2026-04-28 18:47:14 -05:00
skillsHub.tsx fix(ui-tui): overlay width caps are absolute — clampOverlayWidth (Copilot review) 2026-07-21 16:36:58 -05:00
streamingAssistant.tsx fix(tui): clear selection on right-click copy + group transcript blocks 2026-06-02 22:03:38 -05:00
streamingMarkdown.tsx refactor(tui): tighten StreamingMd comments and fence folding 2026-07-18 23:42:10 -04:00
subscriptionOverlay.tsx feat(billing): plan chips and rows deep-link their tier (#68666) 2026-07-21 22:42:14 +05:30
textInput.tsx fix(ui-tui): themed input text — typed text tracked the HOST terminal's fg, not the skin's 2026-07-22 15:56:39 -05:00
themed.tsx refactor(tui): /clean pass across ui-tui — 49 files, −217 LOC 2026-04-16 22:32:53 -05:00
thinking.tsx feat(themes): element tokens (ui_tool, ui_thinking) + skinnable diffs 2026-07-21 21:00:43 -05:00
todoPanel.tsx fix(tui): restore macOS copy behavior and theme polish (#17131) 2026-04-28 18:47:14 -05:00
widgetGrid.tsx fmt(js): npm run fix on merge (#68976) 2026-07-21 22:59:05 +00:00