Primitives do one job perfectly. Motion lab ships cinematic UI states.
Name borrowed from the atom : one import, one problem, zero transitive drama.
Promise when smooth scroll really finishes. Finally hook your UI to the end of the scroll.
Reliable --vh / --vw on mobile Safari. End the 100vh lie once.
Typed paste payloads — image, file, html, text — from one event normalizer.
Snapshot and diff forms. Know changed fields, guard navigation — framework-agnostic.
Shortcut overlay, sequences, and groups — press ? and look professional.
Micro-stories for delete, load, and success — each package is a tiny performant scene, not a generic spinner.
Canvas dust-off removal. Map delete / dismiss to a satisfying disintegration. Promise when pixels settle.
Indeterminate loading with pit lane energy — car, crew, and looped cadence. start(), complete(), reset() your session.
Run-up while you await work; complete() to send the ball to the rope. Boundary flash for success.
Lego bricks scatter, snap into an F1 car, and drive off. Assembly loading with start(), complete(), reset().
Lego bricks scatter, snap into a rocket, and launch off. Assembly loading with start(), complete(), reset().
npm i snap-vanish f1-box-box cover-drive lego-f1-loading lego-rocket-loading
Small surface area, loud clarity. If it needs a README page to justify itself, the scope was wrong.
Loaders tell a 3-second story. Removals have consequences. These packages encode emotion without shipping a full game engine.
ESM + CJS + d.ts on every package. We respect both your bundler and your weekend.
The newest primitive in the set — but every package shares the same install story.
View docs →// 1. Install npm install scroll-into-view-promise // 2. Import import scrollIntoView from 'scroll-into-view-promise' // 3. Await await scrollIntoView(document.getElementById('pricing'))