@fr0/core
v0.1.0
Published
Pure TS core for fr0. Types, easings, presets, resolve(), validation.
Downloads
113
Readme
@fr0/core
The resolution layer — pure TypeScript, zero dependencies, no DOM.
Status
✅ Complete
Purpose
@fr0/core is the heart of the fr0 engine. Given a Timeline IR and a frame number, resolve(timeline, frame) returns a fully-resolved state for every layer — transforms applied, animations interpolated, text expressions evaluated — ready for any renderer to consume.
Key modules
| Module | Purpose |
|---|---|
| types/ | Timeline, Layer, Animation, Easing, Resolved, Validation, Input, Font, Capability |
| easings/ | 31 built-in curves + cubic-bezier solver + spring LUT + memoized parser |
| presets/ | 33 animation presets (entrance / exit / emphasis / text) |
| core/ | resolve, interpolate, resolveKeyframes, resolveAnimation, resolveLayer, applyLayout, sequence, series, loop, shape builders, path utils, noise, springs, random |
| validation/ | validate(unknown) + JSON Schema (draft-2020-12) + Damerau-Levenshtein suggestions |
| template/ | processTemplate (input resolution) + TemplateProcessor |
| capabilities/ | getCapabilities (dynamic preset introspection) |
| fonts/ | Bundled Inter + JetBrains Mono variable fonts |
Quick start
import { resolve, validate, type Timeline } from '@fr0/core';
const timeline: Timeline = { /* ... */ };
validate(timeline); // throws on invalid
const state = resolve(timeline, 0); // frame 0Testing
pnpm --filter @fr0/core testWhat this package is NOT
- Not a renderer (see
@fr0/renderer-canvas,@fr0/renderer-browser) - Not a player or UI component
- Not an encoder or exporter
