lesson keyboard: fix hit-test and replace slide-in with mask reveal
Created by: jedmund
Summary
Four commits that together fix the shared lesson keyboard's touch handling and its transition between interactive and overlay pages.
-
6577914reorder the ZStack so the keyboard is declared aboveLessonDetailView. The paging ScrollView's pan recognizer was swallowing taps in the right 45% before they reached the keyboard; putting the keyboard on top lets it win hit-testing. -
c35986bexcludeCLAUDE.mdfrom build sources in the xcodeproj. -
621232ddrop.id(config.id)and the opacity transition on the keyboard container. Keying on the per-page id tore the view down on every page change and caused a visible flicker between consecutive interactive pages. Props now diff against a stable instance. -
388d2f5switch the transition itself. RenamekeyboardBlurProgresstokeyboardSlideProgressand make it signed (-1...1): positive when an overlay page is exiting upward above the keyboard, negative when one is entering from below.LessonScreenno longer translates the keyboard. It holds the dock position and a mask clips whichever edge the moving overlay page currently covers, so the keyboard reads as revealed/occluded rather than sliding in. Blur still tracks the magnitude so the revealed strip starts blurred and sharpens as it docks.
Test plan
-
Interactive pages: taps on white and black keys play notes; left-side scroll still pages vertically; right-side scroll is inert. -
Flicker gone between Twelve Notes -> The White Keys -> Sharps and Flats. -
Twelve, Then Repeat -> Twelve Notes: keyboard is already docked, progressively revealed as the overlay page sweeps up. -
Sharps and Flats -> Two Names, One Key: overlay page rises from below, keyboard is progressively occluded from the bottom. -
Reverse directions mirror the forward transitions. -
Non-keyboard pages (reading, quiz, hardware) at rest show no ghost keyboard.