Skip to content

app: the history bar goes back into its corner vial without a pop - #636

Merged
foxnne merged 25 commits into
mainfrom
app/history-vial-return
Oct 19, 2026
Merged

foxnne merged 25 commits into
mainfrom
app/history-vial-return

Conversation

@foxnne

@foxnne foxnne commented Oct 19, 2026

Copy link
Copy Markdown
Collaborator

Stacked on #635 (app/history-vial, the history grip as a corner vial), which is on #633 and #583.

What changes

Going back into a card's corner vial, the history bar popped. Its bubbles all made for one drop in the middle of the vial's box, which was larger than the vial and off its centre, and they ran together there at the widest merge. The glass ended as a blob bigger than the vial, then snapped to the vial's size, and the vial's icon and liquid switched on in the frame the bar was gone.

The bar now changes into the vial instead of landing beside it:

  • Glass. Each bubble arrives as the vial's own circle on the card's corner (dome.Corner.home, dome.pullFrom). The glass between them lets go over the end of the run (dome.homeMerge), because any merge left between coincident circles bulges them by about a quarter of the merge distance.
  • Liquid. The vial's level drains as the stream pours out into the line, and refills as it pours back (dome.paintCornerLiquid).
  • Icon. It shrinks into the corner with the vial and grows back with it (dome.cornerIcon), with no fade.

Growing out runs the same way forwards. The vial swells briefly as the drops leave it.

I tried a crossfade of the vial's contents first, and dropped it at the user's request in favour of changing shape.

SDK impact

  • None (test-sdk-version passes)

Verified

  • macOS: in a sandbox at the slowest motion setting, I captured the corner frame by frame on the base build and on this one.
    • On the base build, a larger merged blob with no icon held for about six frames, then snapped smaller with the icon on.
    • With this change, the glass flows into the vial's outline and settles at its resting size. The icon grows back with it, and the liquid pours in and settles flat.
  • Gates: check-fmt, zig build, test, test-integration (81/81 steps), check-web, test-sdk-version, check-tests-reached.
  • Windows / Linux / Web: CI builds only.

🤖 Generated with Claude Code

foxnne and others added 11 commits October 18, 2026 16:03
`LiquidField.edge`: a place's outline (rect and corner radii). Its outside is one
more shape the field's shapes run into, so a shape near the outline joins the edge
by a neck, metaball-like, and the outline cuts the glass's coverage, so none of it
crosses. The rim and bend come from the joined shape, so there is no rim along the
cut. The edge takes the program's last shape slot, flagged 2, so the uniforms keep
their layout. `glassBubbles` takes it as `.edge`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The shapes a control of glass is made of (circles, capsules, panels as rounded
boxes), the cut of one by its place's outline as a polygon, and shape
interpolation: the geometry the orb system builds on, std-only and tested.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rom the top right

`LiquidField.Edge.cut` cuts glass by its place's outline with a bevel and lens band of its own along
the cut, rather than joining the place's outside: a piece of glass laid in a corner, bending the
border and ring it lies along. `light_across` turns a drop's rim light a quarter, for glass whose
edges that show face across the usual light (a place's top-right or bottom-right corner). Both reach
`core.dialogs.glassBubbles` as options.
The history's grip moves from the middle of the card's bottom edge, where a split's bar runs, to a
vial in its bottom-right corner: the corner orb, with a history icon. Its liquid (`app/Liquid.zig`)
sloshes as the pane moves, splashes as steps come and eases up, asking for frames only while it
moves. The bar grows out of it as one liquid: its bubbles pulled out small along arcs, joined and
then pinching off, the liquid pouring from the vial into the line. A pane's activity feed stacks
above the vial.
Going back into a card's corner vial, the bar's bubbles all made for one drop in the middle of the
vial's box, larger than the vial and off its centre, and ran together there at the widest merge.
So the glass ended as a blob bigger than the vial, which then snapped to the vial's size, and the
vial's icon and liquid switched on the frame the bar was gone.

The bar now changes into the vial rather than landing beside it. Each bubble arrives as the vial's
own circle on the card's corner (`dome.Corner.home`, `dome.pullFrom`). The glass between them lets
go over the end (`dome.homeMerge`), since any merge left between coincident circles bulges them.
The vial's liquid drains as the stream pours out into the line and refills as it pours back
(`dome.paintCornerLiquid`), and its icon shrinks into the corner with the vial and grows back with
it (`dome.cornerIcon`). Growing out runs the same way forwards.
foxnne and others added 7 commits October 19, 2026 09:16
The shapes a control of glass is made of (circles, capsules, panels as rounded
boxes), the cut of one by its place's outline as a polygon, and shape
interpolation: the geometry the orb system builds on, std-only and tested.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The history's grip moves from the middle of the card's bottom edge, where a split's bar runs, to a
vial in its bottom-right corner: the corner orb, with a history icon. Its liquid (`app/Liquid.zig`)
sloshes as the pane moves, splashes as steps come and eases up, asking for frames only while it
moves. The bar grows out of it as one liquid: its bubbles pulled out small along arcs, joined and
then pinching off, the liquid pouring from the vial into the line. A pane's activity feed stacks
above the vial.
…rom the top right

`LiquidField.Edge.cut` cuts glass by its place's outline with a bevel and lens band of its own along
the cut, rather than joining the place's outside: a piece of glass laid in a corner, bending the
border and ring it lies along. `light_across` turns a drop's rim light a quarter, for glass whose
edges that show face across the usual light (a place's top-right or bottom-right corner). Both reach
`core.dialogs.glassBubbles` as options.
@foxnne
foxnne force-pushed the app/history-vial branch 2 times, most recently from 507bc67 to 5a57b15 Compare October 19, 2026 15:03
@foxnne
foxnne force-pushed the app/history-vial-return branch 2 times, most recently from baa2e8f to cd733c0 Compare October 19, 2026 15:07
- The vial's liquid stays the one simulated liquid through the return. The bar drains it by
  lowering its level while out and refills it going back, so at the hand-off the surface no longer
  switches from a still, tipped level to the living one.
- The vial's icon is lit by the step's glow and the pointer while it grows back, as at rest, so
  its colour no longer snaps when the vial takes over.
- `pull` and `budded` go: both the dome and the corner call `pullFrom` with their home at the site.
- A unit test holds the no-pop properties: a bubble arrives as the home, the home is the vial
  whole, and no glass merges between them at the end.
Base automatically changed from app/history-vial to main October 19, 2026 18:34
@foxnne
foxnne marked this pull request as ready for review October 19, 2026 20:06
@foxnne
foxnne enabled auto-merge October 19, 2026 20:06
@foxnne
foxnne added this pull request to the merge queue Oct 19, 2026
Merged via the queue into main with commit 153ca4d Oct 19, 2026
11 checks passed
@foxnne
foxnne deleted the app/history-vial-return branch October 19, 2026 20:24
foxnne added a commit that referenced this pull request Oct 19, 2026
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