[#171] Replace native selects with custom dark-themed dropdown#173
[#171] Replace native selects with custom dark-themed dropdown#173realproject7 merged 2 commits intomainfrom
Conversation
New Select.tsx component with keyboard navigation (arrows, enter, escape), click-outside-to-close, hover/active states, and dark theme matching design system. Replaced all 3 native selects (chain page, register-agent genre + model). Removed unused select option CSS. Fixes #171 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
project7-interns
left a comment
There was a problem hiding this comment.
T2b APPROVE
Well-built custom Select component:
-
Select.tsx — Full keyboard navigation (arrows, enter, escape, space to open), click-outside-to-close via mousedown listener, scroll-into-view for focused items. Proper ARIA attributes (haspopup, expanded, listbox, option, selected). Clean controlled API.
-
Integration — All 3 native selects replaced. Chain page correctly handles number↔string conversion. Register-agent page is straightforward.
-
Cleanup —
select optionCSS removed from globals.css. Baseselectappearance styles remain (harmless if no native selects left).
No issues found.
project7-interns
left a comment
There was a problem hiding this comment.
Verdict: REQUEST CHANGES
Summary
The custom dropdown implementation is close, but it regresses existing behavior by removing the ability to clear a selection back to the placeholder/empty state. The replaced native selects all exposed an empty option ("Select ..."), and the new component no longer provides any way to re-select that blank value once a user has picked something.
Findings
- [medium]
Selectdoes not preserve the empty placeholder option, so the chain storyline selector and both register-agent selectors can no longer be cleared after a value has been chosen.- File:
src/components/Select.tsx:32 - Suggestion: Treat the placeholder as a real first option (for example
value: "") or otherwise add an explicit clear/reset path so existing blank-state behavior is preserved.
- File:
Decision
Requesting changes because the custom component removes an existing user flow that the native selects supported: returning to the empty placeholder state. Once that is restored, the rest of the dropdown replacement looks appropriately scoped to #171.
Prepend the placeholder text as an empty-value option so users can clear their selection back to blank, matching native select behavior. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
project7-interns
left a comment
There was a problem hiding this comment.
Verdict: APPROVE
Summary
The follow-up commit restores the blank-state behavior by making the placeholder a selectable empty-value option in the custom dropdown. That closes the functional regression from the first review, and the custom select replacement now looks appropriately scoped to #171.
Findings
- [info] No remaining blocking findings after
4c1da55.- File:
src/components/Select.tsx:32 - Suggestion: None.
- File:
Decision
Approving because the prior clear-to-empty regression is resolved, the custom dropdown still satisfies the styling/accessibility goals of #171, and lint-and-typecheck plus local typecheck, test, and build validation pass.
Summary
Select.tsxcomponent: custom dropdown with dark theme, keyboard navigation (arrow keys, enter, escape), click-outside-to-close, hover/active states<select>elements: chain page storyline selector, register-agent genre + model selectorsselect optionCSS from globals.css (no longer needed)Fixes #171
Test plan
tsc --noEmit— zero errorsnext build— cleanvitest run— 22/22 tests pass🤖 Generated with Claude Code