Highlights
Hero — variant: "smooth"
A new variant alongside the existing default. Same base spring (300/30) with doubleSpring: 1 layered on top, so the shared tile glides into rest through a soft follower stage instead of snapping. default stays the crisp baseline.
transition({ type: "hero", variant: "smooth" })Hero — per-side HeroFit ("contain" | "cover")
Each side of a hero pair can now declare its own fit strategy via fromFit / toFit. The tile morphs the clip-path between the two so the same image can render contain on one screen and cover on the next without a hard cut.
Hero — provider tree split
Internals reorganized into orthogonal subtrees:
provider/chrome/—static,fade(handles outgoing/incoming page chrome)provider/variant/—default,smooth(handles physics)
Both are driven by dispatcher tables — no more if/switch on type or variant inside transition.ts. Adding a new chrome strategy or physics variant is now a single-file change.
The static type now consistently uses the temporary shared-element clone, matching fade; docstrings and transition.ts are simplified to reflect the unified clone path.
Axis — z provider split
axis/provider/z.ts is split into directional / non-directional submodules for readability. No behavior change.
Docs
- New web showcase: Airbnb Photo Tour (gallery + photo detail) demonstrating hero with image-fit between grid and detail views.
google-photos: extracted sharedPhotoGridLinkhelper.- Hero
llms.txtrefreshed; showcase catalog registers the new demo; newweb-showcase-shelllayout component.
Packages
All published at 6.3.0:
@ssgoi/core@ssgoi/react@ssgoi/svelte@ssgoi/vue@ssgoi/angular@ssgoi/solid