Studio popover chrome: one SVG merged-outline path replaces bridge-and-fillet CSS#102
Merged
Merged
Conversation
Replace PopoverButton's bridge-and-fillet CSS (1px seam strip, radial- gradient concave corner patches, corner-visibility special cases, hand- synced seam colors) with computed geometry: the union of the trigger and panel rects becomes one rounded SVG path drawing the shared fill, border, and shadow. Concave fillets are the same arc code path with a flipped sweep flag; edges within 1.25px weld so alignment cases need no special- casing. - new base/outline.rs: pure rect-union -> rounded-path geometry, host unit tests - while open, the trigger's content re-parents into the popover top layer (which paints above everything); the in-flow button stays as an invisible size-pinned placeholder holding layout and focus - open/close animates by interpolating the panel's input rect and re- unioning per frame; rAF loop only while in flight; honors prefers-reduced-motion - tone vars now feed SVG gradient stops: one gradient flows continuously across trigger + panel - measurement robustness: first measure is synchronous (rAF-throttled environments), empty panel measurements rejected, data-story-wait gates on the final stabilization re-measure for deterministic captures - icon-menu open-menu story rewritten as a static preview using the real geometry; dead bridge/fillet CSS removed; story baselines regenerated ADR: docs/adr/2026-07-15-popover-svg-merged-outline.md Spike: spikes/contiguous-popup/index.html Technique: https://lab.photomancer.art/post/2026-07-15-contiguous-popup/ Co-Authored-By: Claude Fable 5 <[email protected]>
…ton-popup-ui-1e4d65 Story-image conflicts taken from main; all baselines regenerate in the next commit from the merged tree. Co-Authored-By: Claude Fable 5 <[email protected]>
Co-Authored-By: Claude Fable 5 <[email protected]>
Yona-Appletree
added a commit
that referenced
this pull request
Jul 16, 2026
…gate Brings in PR #92 (shader auto-apply + split-bar editor chrome), PR #102 (popover chrome as one SVG merged-outline path), PR #101 (auto-apply ADR), PR #100 (path-gated wgpu CI job), PR #99 (interp.f32 in DEFAULT_TARGETS). Conflicts were story-baseline PNGs only (both sides re-captured) — taken from main and re-captured from the merged tree in the follow-up commit. The auto-merged generated tailwind.css was discarded and regenerated with pinned [email protected] (braces verified balanced). Co-Authored-By: Claude Opus 4.8 <[email protected]>
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.
What
Replaces
PopoverButton's contiguous-border implementation — the 1px bridge strip, radial-gradient corner fillets, corner-visibility special cases, and hand-synced seam colors — with computed geometry: the union of the trigger and panel rects becomes one rounded SVG path that draws the shared fill, border, and shadow.Technique write-up: https://lab.photomancer.art/post/2026-07-15-contiguous-popup/ · Spike:
spikes/contiguous-popup/index.html(committed) · ADR:docs/adr/2026-07-15-popover-svg-merged-outline.mdHow
base/outline.rs(new): pure geometry, no DOM — rect union via a small grid, uniform arc emission (concave corners = flipped sweep flag), per-vertex radius clamping, 1.25px edge welding, device-pixel snapping. Host unit tests.prefers-reduced-motionjumps to the settled shape.ux-popover-chrome-*variables now feed SVG gradient stops and stroke — one gradient flows continuously across trigger + panel (impossible with the old multi-element chrome).PopoverButton/IconPopoverButton/PopoverPlacementprops identical; no consumer files touched.Measurement robustness (found via story-capture debugging)
data-story-waitnow waits for a real panel measurement, settled animation, and the final 250ms stabilization re-measure — popover story captures were bimodal before; two consecutive capture runs are now pixel-identical.Stories & baselines
icon_menu_stories.rsopen_menuhand-mocked the old bridge chrome; rewritten as a static, measurement-free preview using the realmerged_outline_pathon hardcoded rects (all six side/align variants).STUDIO_STORY_PNGS_CONCURRENCY=1— parallel captures hang Chrome on a loaded machine and produce AA artifacts).studio-story-checkis clean except the pre-existingbase__code-editor__overviewCodeMirror flake (churns across unrelated commits in history).Validation
just check✓ ·just build-rv32-builtins && just test✓ (153 suites)cargo test -p lpa-studio-web104/104 (8 new geometry tests)Review notes for Yona
The visual gate is yours: the regenerated popover/detail-popover/icon-menu baselines show the new chrome. Animation feel is best judged live (
just studio-web-dev-build) — constants areOPEN_ANIM_MS/CLOSE_ANIM_MS/TRIGGER_INFLATE_PXinpopover.rsif you want to tune.Plan: ~/.photomancer/planning/lp2025/2026-07-15-contiguous-popup-port/
🤖 Generated with Claude Code