GATE01

Why

Why split-flap

A split-flap board doesn't just show a value — it arrives at one. The flaps tick through every glyph in between, and the wait is the whole experience. ptpt treats that delay as a feature, not a cost: text and images flip through the same Frame vocabulary, a Cell is one flapping unit, and a Board staggers a row of them so the whole display ripples like the real thing. A framework-agnostic core, with paper-thin wrappers on top.

GATE02

Departures

Five packages

At the center is @love-rox/ptpt-core, a framework-agnostic, zero-dependency engine (~3 KB gzip, ESM, ships its own styles.css). Pick whichever adapter (or adapters) suits your stack — core is pulled in automatically as a dependency.

GATE03

Stylesheet

One stylesheet everywhere

Import @love-rox/ptpt-core/styles.css once and every board gets a working dark split-flap look. Everything is themeable through custom properties on .ptpt-cell — width, height, flap duration, colors — or go fully headless and target the classes yourself.

recommended.csscss
@import "@love-rox/ptpt-core/styles.css";
GATE04

Behaviour

What's true across the board

  • Frames are the flaps — text, image, or element — each addressed by a slug; a bare string is normalized to a text frame.
  • A Board is one role="status" live region: cells are aria-hidden, and only the settled result is announced to screen readers.
  • prefers-reduced-motion is honored automatically — reducedMotion: 'instant' snaps to the target without animating.
  • Presets and delay functions ship as tree-shakable subpaths, so adding more never grows your bundle.
  • Pass a PresetDefinition object to a preset, not a bare string — a string is read as literal flap characters, not a preset name.
GATE05

Browser support

Browser support

The flip is built from transform: rotateX() and a moving box-shadow on three stacked half-cells — standard CSS supported across all modern browsers. No 3D libraries, no canvas, no dependencies.

GATE06

Versioning

Shared version line

All five packages release on the same shared version line, anchored to @love-rox/ptpt-core. Whenever any one of them changes, the others move to the same number — so you never have to wonder whether react@0.2.5 is compatible with core@0.3.0.

GATE07

License

License

MIT License. Free to use in personal and commercial projects.

final call · boarding

See it in action

The interactive demo lets you pick a preset and a flip mode, then watch a row of cells ripple to the next destination — just like a real departure board.

Open the demo