The tree is too big for an in-place flash to help — the other copy is usually off-screen. Clicking the ×N badge now pans/zooms the view to center the other copy and flashes it on arrival; clicking again cycles through the remaining copies (for someone drawn 3+ times).
Uses family-chart's exported handlers.cardToMiddle (centers a datum) keeping the current zoom via getCurrentZoom. The target coords come from the card's bound x/y (fallback: its transform attr). Verified against the library internals: setupZoom(f3Canvas) puts the zoom object on the svg's parent (so getCurrentZoom(svg) resolves), and .card_cont is positioned by d.x/d.y — the same space cardToMiddle uses. Falls back to an in-place flash if the zoom object isn't ready.
Frontend only, type-checks clean. Supersedes the flash-only behavior from the previous PR.
The tree is too big for an in-place flash to help — the other copy is usually off-screen. Clicking the `×N` badge now **pans/zooms the view to center the other copy** and flashes it on arrival; clicking again **cycles** through the remaining copies (for someone drawn 3+ times).
Uses family-chart's exported `handlers.cardToMiddle` (centers a datum) keeping the current zoom via `getCurrentZoom`. The target coords come from the card's bound `x/y` (fallback: its `transform` attr). Verified against the library internals: `setupZoom(f3Canvas)` puts the zoom object on the svg's parent (so `getCurrentZoom(svg)` resolves), and `.card_cont` is positioned by `d.x/d.y` — the same space `cardToMiddle` uses. Falls back to an in-place flash if the zoom object isn't ready.
Frontend only, type-checks clean. Supersedes the flash-only behavior from the previous PR.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
On a large tree the duplicate's other copy is usually off-screen, so flashing
in place wasn't enough. Clicking the ×N badge now pans/zooms the view to center
the other copy and flashes it on arrival; clicking again cycles through the
remaining copies (for a person drawn 3+ times).
Uses family-chart's exported handlers: cardToMiddle centers a datum (read from
the target card_cont's bound x/y, falling back to its transform attr), keeping
the current zoom level via getCurrentZoom. Verified against the lib: the svg's
parent (f3Canvas) holds the zoom object, and cards are positioned by datum x/y —
same coordinate space cardToMiddle expects. Falls back to an in-place flash if
the zoom object isn't ready. Frontend only; supersedes the flash-only behavior.
Signed-off-by: Justin Paul <[email protected]>
justin
merged commit 0ed6ba4505 into main2026-06-11 08:48:00 -04:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The tree is too big for an in-place flash to help — the other copy is usually off-screen. Clicking the
×Nbadge now pans/zooms the view to center the other copy and flashes it on arrival; clicking again cycles through the remaining copies (for someone drawn 3+ times).Uses family-chart's exported
handlers.cardToMiddle(centers a datum) keeping the current zoom viagetCurrentZoom. The target coords come from the card's boundx/y(fallback: itstransformattr). Verified against the library internals:setupZoom(f3Canvas)puts the zoom object on the svg's parent (sogetCurrentZoom(svg)resolves), and.card_contis positioned byd.x/d.y— the same spacecardToMiddleuses. Falls back to an in-place flash if the zoom object isn't ready.Frontend only, type-checks clean. Supersedes the flash-only behavior from the previous PR.
🤖 Generated with Claude Code