Skip to content

feat(web): notes picker reaches C6, plus a chord mode - #34

Merged
benjamin-small merged 1 commit into
mainfrom
notes-chord-mode
Oct 12, 2026
Merged

benjamin-small merged 1 commit into
mainfrom
notes-chord-mode

Conversation

@benjamin-small

Copy link
Copy Markdown
Owner

Summary

  • Picker spans C3–C6 (37 chips, one row per octave).
  • New Pick select: Single notes (default) or a triad — Major, Minor, Diminished, Augmented, Sus2, Sus4 (web/src/lib/notes/chords.ts).
  • In chord mode a chip press replaces the pick with that note's root-position triad; pressing the root again clears it; roots whose triad would pass C6 are aria-disabled with a hint. Changing the chord re-voices the current root; switching back to Single notes keeps the pick.
  • Share links carry &c=<chord>; unknown ids are dropped; Reset returns to Single notes.
  • No Rust changes — the engine already takes any three notes.

Validation

  • cargo fmt --check, cargo clippy, cargo test pass (clippy's one warning is pre-existing, in untouched code)
  • vitest 391/391 (new chords.test.ts + 9 chord-mode component tests), svelte-check 0 errors
  • Browser: #/notes?n=57&c=minor → pressing D4 gives D4/F4/A4 and ?n=62,65,69&c=minor; F♯5 and above greyed out; no console errors

…n the pressed note

The picker spans C3 to C6 (37 chips, one row per octave). A new Pick select offers Single notes or one of six triads (Major, Minor, Diminished, Augmented, Sus2, Sus4); in chord mode a chip press replaces the pick with that triad, the root again clears it, roots whose triad would pass C6 are aria-disabled with a hint, and changing the chord re-voices the current root. Share links carry c=<chord>; Reset returns to single notes. Tests, README and spec updated.
@benjamin-small
benjamin-small merged commit 8992684 into main Oct 12, 2026
6 checks passed
@benjamin-small
benjamin-small deleted the notes-chord-mode branch October 12, 2026 14:59
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