Skip to content

feat(ui): add /theme picker (rebased from #543)#567

Merged
esengine merged 1 commit into
mainfrom
feat/theme-picker-rebased
May 10, 2026
Merged

feat(ui): add /theme picker (rebased from #543)#567
esengine merged 1 commit into
mainfrom
feat/theme-picker-rebased

Conversation

@esengine

Copy link
Copy Markdown
Owner

Re-land of @J3y0r's #543 on top of current main.

Why a fresh PR

The original #543 branched from before #549 / #552 / #555 / #560 /
#566 landed; #566 in particular reformatted `src/cli/ui/App.tsx`
around a new `` wrap, which made GitHub flag #543
as DIRTY and produced a ~400-line conflict on local merge (mostly
indentation, but with the wrap interleaved). Rebasing onto current
main was simpler than resolving the merge in-place.

What's in the PR

Same shape as #543:

  • New `ThemePicker` modal (`src/cli/ui/ThemePicker.tsx`) — a
    `SingleSelect` listing `auto` + every registered theme, marking
    the current preference and the active theme.
  • `/theme` slash handler now returns `{ openThemePicker: true }`
    on bare invocation; `/theme ` keeps its existing persist-
    and-report behaviour.
  • `/theme` slash entry moved from the `advanced` group to `setup`
    and `high-contrast` added to the arg completer.
  • App-level wiring: `pendingThemePicker` state, `modalOpen`
    inclusion, slash-result branch, and the picker render branch in
    the modal-conditional chain.

Delta vs #543

  • Rebased onto current main (post-fix(loop): derive tool-card running state from finally-guarded inflight set #566), so the `InflightProvider`
    wrap is preserved.
  • `tests/ui-slash-suggestions.test.tsx`: `countAdvancedCommands(true)`
    expectation updated 12 → 11 (the contributor caught the total going
    37 → 38 but missed the advanced count dropping by one when /theme
    moved out of advanced) and the matching `"+ 12 advanced"` string.

Test plan

  • `npm run verify` passes (lint + typecheck + 2431 tests + comment-policy gate)
  • `npm run build` clean
  • Smoke: `/theme` opens picker; arrow-key + Enter persists; `/theme tokyo-night` still works as a one-shot

Thanks @J3y0r for the contribution. Closing #543 in favour of this rebased version.

Surfaces a SingleSelect modal for the terminal theme preference. Bare
\`/theme\` opens the picker; \`/theme <name>\` keeps its existing
"persist and report" behaviour. Moves the slash entry from the
advanced group to setup and adds high-contrast to the arg completer.

Adapted from J3y0r's PR — repointed onto current main (which had
since reformatted App.tsx around the InflightProvider wrap from
#566) and the count test in tests/ui-slash-suggestions.test.tsx
updated from 12 → 11 advanced commands now that /theme has moved
out of the advanced bucket.

Thanks @J3y0r for the contribution.
@esengine esengine mentioned this pull request May 10, 2026
@esengine esengine merged commit 122d2e0 into main May 10, 2026
3 checks passed
@esengine esengine deleted the feat/theme-picker-rebased branch May 10, 2026 01:31
@esengine esengine mentioned this pull request May 10, 2026
5 tasks
ChasLui pushed a commit to ChasLui/DeepSeek-Reasonix that referenced this pull request May 23, 2026
Surfaces a SingleSelect modal for the terminal theme preference. Bare
\`/theme\` opens the picker; \`/theme <name>\` keeps its existing
"persist and report" behaviour. Moves the slash entry from the
advanced group to setup and adds high-contrast to the arg completer.

Adapted from J3y0r's PR — repointed onto current main (which had
since reformatted App.tsx around the InflightProvider wrap from
esengine#566) and the count test in tests/ui-slash-suggestions.test.tsx
updated from 12 → 11 advanced commands now that /theme has moved
out of the advanced bucket.

Thanks @J3y0r for the contribution.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant