Skip to content

UI overhaul Phase 7a: extract InputSettingsForm from App.tsx - #199

Merged
slittycode merged 1 commit into
mainfrom
claude/ui-phase7a-app-input-form
Jun 25, 2026
Merged

UI overhaul Phase 7a: extract InputSettingsForm from App.tsx#199
slittycode merged 1 commit into
mainfrom
claude/ui-phase7a-app-input-form

Conversation

@slittycode

Copy link
Copy Markdown
Owner

What

Begins the App.tsx cleanup (the third "all three" target) with the safe, self-contained piece: extracts the analysis-settings controls — the ANALYSIS MODE selector plus the pitch/note, MT3, and AI-interpretation toggles — into a stateless InputSettingsForm component.

Changes

  • New components/InputSettingsForm.tsx renders the four sibling controls verbatim. Fully controlled — every value and change handler is owned by App and passed in (isAnalyzing, analysisMode, the three requested flags + setters, the config-enabled flags, phase2StatusBadge, phase2HelperCopy). The native <input>/<select> controls keep their exact aria-labels (ANALYSIS MODE / PITCH/NOTE TRANSLATION / MT3 POLYPHONIC TRANSCRIPTION / AI INTERPRETATION) so the Playwright smoke suite's getByLabel + check/uncheck locators keep working.
  • App.tsx mounts it in place inside the input-panel; all state stays in App.
  • App.tsx: 1515 → 1406.

Chain of custody / contract

Untouched. Pure move — the input-panel testid, the phase2-status-inline testid, and the locked input-panel background (rgb 68,68,68) are all preserved. State and handlers stay in App.

Verification

  • npm run lint (tsc) ✅
  • npm run lint:style
  • npm run build
  • npm run test:unit830 passed, zero test changes (pure move)
  • Playwright smoke (drives these native controls via getByLabel) + Chromatic gate in CI.

Next

The App.tsx hooks — useEstimatePolling and useAnalysisProjection (the latter chain-of-custody critical, must preserve identical signature/deps/try-catch) — are separate, riskier refactors I'll tackle individually as follow-ups.

🤖 Generated with Claude Code

https://claude.ai/code/session_016to3B8Hf9eAGxAbzpQNvku


Generated by Claude Code

Begin the App.tsx cleanup (the third "all three" target) with the safe,
self-contained piece: extract the analysis-settings controls — the ANALYSIS
MODE selector plus the pitch/note, MT3, and AI-interpretation toggles — into
a stateless InputSettingsForm component.

- New components/InputSettingsForm.tsx renders the four sibling controls
  verbatim. It's fully controlled: every value and change handler is owned by
  App and passed in (isAnalyzing, analysisMode, the three requested flags +
  their setters, the config-enabled flags, phase2StatusBadge,
  phase2HelperCopy). The native <input>/<select> controls keep their exact
  aria-labels (ANALYSIS MODE / PITCH/NOTE TRANSLATION / MT3 POLYPHONIC
  TRANSCRIPTION / AI INTERPRETATION) so the Playwright smoke suite's
  getByLabel + check/uncheck locators keep working.
- App.tsx mounts it in place inside the input-panel; all state stays in App.

Pure move — no behavior change; the input-panel testid, the
phase2-status-inline testid, and the locked input-panel background are
untouched. App.tsx: 1515 -> 1406. tsc, lint:style, build, and all 830 unit
tests green with zero test changes. (App.tsx hooks — useEstimatePolling /
useAnalysisProjection — are separate, riskier refactors left for follow-ups.)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016to3B8Hf9eAGxAbzpQNvku
@slittycode
slittycode merged commit 8734220 into main Jun 25, 2026
5 checks passed
@slittycode
slittycode deleted the claude/ui-phase7a-app-input-form branch June 25, 2026 03:14
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.

2 participants