Sheet pane: inline always-on draggable pane + permanent bottom sheets - #38
Conversation
SheetPane: an inline, permanently-visible bottom pane that drags fluidly with the finger and spring-snaps to detents on release, entirely native-side — no PHP round-trips while tracking. Unlike BottomSheet (a presented UISheetPresentationController) it renders inside the screen's own layer, so floating chrome — the Liquid Glass tab bar, FABs — stays above it. The Maps/Flighty always-on pane pattern. Dragging the pane's non-scrolling area moves the pane; drags inside a child scroll-view scroll the content. BottomSheet grows the presented-sheet variant of the same pattern: `permanent` disables swipe-away dismissal (drag only snaps between detents) and `background-interaction` keeps the view behind the sheet interactive (HIG "sheets with interaction behind").
- BottomSheet on Android now honours `permanent`: drag-to-hide is blocked via confirmValueChange, back press via ModalBottomSheetProperties, and scrim taps no longer fire @Dismiss. - `background_interaction` is documented as iOS-only on the PHP methods: M3's ModalBottomSheet is a modal window, so the scrim always intercepts background touches — sheet-pane is the cross-platform answer for a live background. - Both sheet-pane renderers now report fractional detents faithfully (truncating 560.5 to 560 failed the applied-detent equality on the republish and nudged the pane after every drag) and only fire @change when the pane settles on a DIFFERENT detent. - CollectorElementsTest covers the sheet-pane attribute surface (kebab + camel + defaults + on_change) and the new bottom-sheet props, including filter_var string-boolean parsing. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Pushed fixes from review: Android now honours Remaining from review, deliberately left: Android 🤖 Generated with Claude Code |
Two halves of the Maps/Flighty "always-on pane" pattern:
<native:sheet-pane>— an inline, permanently-visible bottom pane that drags fluidly with the finger and spring-snaps to detents on release, entirely native-side (no PHP round-trips while tracking). Renders inside the screen's own layer — unlikeBottomSheet's presentedUISheetPresentationController— so floating chrome (Liquid Glass tab bar, FABs) stays above it. Dragging the header/grabber moves the pane; drags inside a child scroll-view scroll the content (per-touch responder precedence).BottomSheetadditions for the presented variant:permanent(no swipe-away — drag only snaps between detents) andbackground-interaction(view behind stays usable — HIG "sheets with interaction behind").Draft — in-flight feature branch packaged from the working tree so it has a home; review/finish at leisure.