Skip to content

chore: promote dev to prod (0.1.0)#2

Merged
chaudharydeepanshu merged 41 commits into
prodfrom
dev
Jul 19, 2026
Merged

chore: promote dev to prod (0.1.0)#2
chaudharydeepanshu merged 41 commits into
prodfrom
dev

Conversation

@chaudharydeepanshu

Copy link
Copy Markdown
Contributor

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.

…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.
@chaudharydeepanshu
chaudharydeepanshu requested a review from a team as a code owner July 19, 2026 07:41
@github-actions github-actions Bot added release Release promotion PR (manual) docs Documentation change (auto) labels Jul 19, 2026
@chaudharydeepanshu chaudharydeepanshu added the ready-to-test Triggers the full cross-target test run (manual) label Jul 19, 2026
@chaudharydeepanshu
chaudharydeepanshu merged commit 68e96ba into prod Jul 19, 2026
31 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs Documentation change (auto) ready-to-test Triggers the full cross-target test run (manual) release Release promotion PR (manual)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant