chore: promote dev to prod (0.1.0)#2
Merged
Merged
Conversation
…, no phantom shadow
…g, blocked covered content, Escape dismissal
…eal route entrance
…e three-schools docs
…click reset PaneDividerRegion consolidates all divider interactivity for both layouts: drag, double-click reset to default width, Tab focus, arrow-key resize, Enter collapse/restore, Home/End jumps, and screen-reader adjustable semantics (share value + stepped values). PaneScope exposes collapse state and collapse/restore actions to pane descendants — the hamburger recipe. AdaptiveSplit translates model space to directional sides at its boundary so PaneSide/PaneCollapsible stay directional with an end-positioned primary (state, config, jumps all mirrored). Settle-to-width extracted as the single settle primitive; model gains defaultWidth(); PaneConfig gains dividerSemanticsLabel.
Up to three panes across two width thresholds: PaneRole priority decides who wins a partition slot (primary survives to the narrowest window), the pane list's order decides placement — decoupled, per Compose's ThreePaneScaffold. The top-priority visible pane flexes; the others hold draggable widths through the shared PaneWidthModel and the full PaneDividerRegion contract (drag, keyboard, double-click reset, screen readers). Hidden panes stay alive in Offstage with tickers paused, so pane state and dragged widths survive partition round trips. PaneSpec deliberately skips value equality (builder closures) — the layout compares sizing fields directly.
…rked alive collapsedListBuilder/collapsedDetailBuilder (and AdaptiveSplit's primary/secondary equivalents): when a pane snaps shut, the app can render purpose-built rail content laid out at the actual collapsedSize instead of the clipped-at-minimum default. The real pane parks in Offstage with tickers paused, state alive; the list pane gains its own reparenting GlobalKey so collapse/restore/mode switches move the live element instead of remounting it. Example: tickets list collapses to a VS Code-style 56px rail — expand chevron plus per-ticket icons that restore and navigate.
…pty pane collapses into rail slot Rail item taps select without restoring (the Discord model — only the chevron expands). PaneScope exposes collapsedSize so the surviving pane shows its own restore affordance only when the neighbor is FULLY hidden (a visible rail already carries the expand control); the example swaps the hamburger for a view-sidebar icon under that gate. The empty placeholder branch now collapses through the same rail/clip slot as content instead of squishing raw into the parked width.
…d limits Expanded geometry renders at compact width during the empty-pane retreat; there maxListRatio*width can drop below minListWidth and the screen-reader share strings crashed on double.clamp's inverted-bounds ArgumentError. All three layouts now guard like PaneWidthModel does (ceiling at or below floor pins to the floor). Regression test covers the exact repro: both+56 rail, collapse empty detail, resize compact.
A collapsed pane no longer animates through the crossing: the rail docks at its parked width from the first expanded frame (fixed end slot + background spacer while the list slides in; divider anchored to the docked boundary), a parked LIST skips the entry slide entirely, and the empty-pane reveal/retreat is skipped when parked. The collapse animation belongs to the moment the user collapsed; a window resize isn't that moment — and route mode's popping route already animates the full-screen detail away. Rail entrance flourishes are the app's own business inside its rail builder. Also keeps the reflow-to-floor clip (live reflow down to the floor width, rigid below it) for parked panes without a rail.
…prediction ThreePaneLayout was built on a guessed customer with zero real consumers, and a generic pane scaffold trying to satisfy every imaginable pane expectation becomes config soup that serves none. The package returns to its three proven, universal widgets (ListDetailLayout, AdaptiveSplit, showAdaptiveModal). Multi-pane shapes get built app-side first, sharp and specific; a widget graduates into the package only when a second consumer proves the generic shape. The collapse-vs-summon design insight (wide-view divider mechanics vs narrow-view floating presentation) is banked for when that day comes.
The Adaptive prefix was redundant inside adaptive_layouts, and the family now reads with one naming rule: ListDetailLayout for selection-driven pairs, SplitLayout for peer panes. Files, tests, and every doc reference swept; zero grep hits for the old name.
Restructured from one flat Usage pile into widget-per-section: a which-widget decision table up front, ListDetailLayout / SplitLayout / showAdaptiveModal each self-contained, the shared divider system in its own clearly-both-layouts section, and all resize behavior consolidated under one 'How resizing behaves' contract list. Reference tables fold into details blocks; the why-explanations keep their collapsed homes.
The 'why not push a route' explanation predated CompactDetailMode.route and read as the package arguing against its own feature. Reframed as the real layering: widget-level state engine as the foundation, route mode earning platform behaviors on top via the keyed-element handoff that a route-first design cannot perform.
…de-drifted README rebuilt on the fleet skeleton (mural's): opening paragraph, the why-a-package question quote, Quick start with the three-doors trio, one core-concept section (The morph), a Usage umbrella of scenario subsections, internals folded after Platform support, example app as a Docs-table row. The guarantee quote no longer reads as arguing against route mode. ARCHITECTURE: file tree caught up (route machinery, collapse, divider region, scope, memory, entry style), PaneConfig field list and settle knobs current, list-pane key noted, divider-interaction and collapse/PaneScope architecture documented, route design-decision row updated to the layering. ROADMAP: real test counts (174 + 12 journeys), configurable hit zone, parked-pane crossing exception, settle knobs, PaneScope collapsedSize. UPDATING: invariant 4 rewritten to the reflow-to-floor truth, list key in the morph invariants, stale 24px/12px failure-mode row fixed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
First stable promotion. Everything on dev: ListDetailLayout (inline/overlay/route compact modes, empty-pane behaviors, crossing motion), SplitLayout, showAdaptiveModal with the live container-transform swap, the shared divider system (anchors, snap-collapse, icon rails, PaneScope, WAI-ARIA keyboard/semantics), and the docs set on the fleet structure.
Releases 0.1.0 from CHANGELOG.md once merged; publish waits on the prod environment approval.