Skip to content

UI upgrade: scrub fields, inspector grammar, timeline snapping, text & onboarding#2

Merged
Razee4315 merged 12 commits into
mainfrom
feat/ui-upgrade
Jun 18, 2026
Merged

UI upgrade: scrub fields, inspector grammar, timeline snapping, text & onboarding#2
Razee4315 merged 12 commits into
mainfrom
feat/ui-upgrade

Conversation

@Razee4315

@Razee4315 Razee4315 commented Jun 18, 2026

Copy link
Copy Markdown
Owner

Implements the full UI upgrade plan (docs/UI-Upgrade-Plan.md), learning ergonomics from palmier-pro. All 12 items shipped and CI-verified before merge.

Shipped

  • Phase 0 design tokens (spacing/elevation/shadow/motion/radius)
  • Phase 1a/b ScrubField (drag-or-type) + inspector section/row grammar
  • Phase 1c uniform hover lift + inspector accent spine
  • Phase 2a bundled OFL display fonts + in-typeface picker (model → scene → glyphon → commands; exports match the editor)
  • Phase 2b text background plate (editor SVG + baked export)
  • Phase 2c text corner-resize handles (scales font, no distortion)
  • Phase 2d canvas center/edge snap guides
  • Phase 3a/b timeline snapping + adaptive ruler ticks
  • Phase 4a polished recents card — scoped: reuses the existing single-session recovery (multi-recording history + real thumbnails are a deliberate future extension, since storage keeps one session by design)
  • Phase 4b one-time welcome card + Record coachmark

CI: frontend ✓, cross-crate model cascade ✓, full set ✓ (fonts + glyphon). Verified via GitHub CI (no local builds, per project rule).

… radius scales)

Phase 0 of the UI upgrade plan. Adds a spacing scale (--sp-2..24), an
elevation tier (--prominent) per theme, three shadow tiers, two motion
durations + easing, and radius-xs/sm. Purely additive — no view changes
yet; later phases build on these.
Phase 1a+1b. Adds src/ScrubField.tsx — drag-to-scrub OR click-to-type with
Shift (coarse) / Ctrl (fine) precision, live onInput + single onCommit undo
boundary, em-dash for mixed values. Introduces InspSection (tiny-caps header)
and InspRow (aligned, fixed-height) and reflows every inspector (text, box,
arrow, zoom, speed, timing, color) into labeled sections. Numeric controls
(size, opacity, thickness, zoom strength, speed rate, timing) are now
ScrubFields instead of range sliders. Coalescing-safe edits stream live;
zoom/speed commit on release to avoid undo spam.
Phase 1c. Card-like controls (tool rail, export chips, color swatches) share
one hover recipe — a 1px lift + shadow-sm over the motion tokens — and the
properties panel gets a subtle accent spine marking it as the active editing
surface.
…ions)

Phase 3b. Replaces the fixed <=12-tick rule with a pixel-aware ruler: a
measured timeline width (ResizeObserver) picks a nice major interval targeting
~90px between labels, plus minor subdivisions kept >=11px apart with a taller
midpoint tick. Reads cleanly at any clip length.
Phase 3a. Dragged timeline bands (zoom, speed, cut, annotation, trim) snap
their edges to the playhead, clip bounds, major ruler ticks, and every other
band's edges within a pixel-constant ~8px threshold (zoom-independent). A
dashed accent guide line flashes at the catch point. Move mode snaps whichever
edge lands closest, shifting the whole band.
Phase 2c. Selected text labels now show four corner handles; dragging one
scales the font (anchored to the opposite corner) so text grows typographically
instead of stretching. handleAt/hitTest share one normalized text-width helper,
and the on-canvas label previews the new size live, committing once on release.
Phase 2d. Dragging a text, box, or arrow on the canvas snaps its anchor, center,
and far edges to the canvas edges and center (0, 0.5, 1) within a pixel-constant
threshold, flashing dashed crosshair guide lines at the catch point.
Phase 4b. First launch shows a welcome card (value prop + 3-step explainer +
Start recording CTA), gated on a localStorage flag so it never re-nags.
Skipping it pops a coachmark anchored to the real Record button; both clear
once recording starts.
@Razee4315 Razee4315 self-assigned this Jun 18, 2026
@Razee4315 Razee4315 added the enhancement New feature or request label Jun 18, 2026
Phase 2b. Adds a 'background' flag to text annotations that draws a translucent
dark plate behind the glyphs — toggled with the BG button in the Text inspector.
Rendered in the editor overlay (SVG) and baked into exports via the scene's
shape pass (reusing the keystroke-chip backing pattern, sized by an estimated
text box). Field defaults off so older projects are unaffected.
Phase 2a. Bundles five OFL/Apache display fonts (Anton, Bebas Neue, Poppins,
Permanent Marker, Shrikhand) under assets/fonts/. Adds a 'font' field to text
annotations threaded through the model, scene, renderer, and commands; loads the
same TTFs into glyphon so exports match the editor. The Text inspector gains an
in-typeface font picker (each button rendered in its own face), and the on-canvas
label + inline editor preview the chosen font live.
Phase 4a. Replaces the plain 'Recover last session' button with a palmier-style
recents card (gradient thumb, label, duration, hover lift) reusing the existing
single-session recovery. Note: storage keeps one session by design, so this is a
grid-of-one; a multi-recording history + real frame thumbnails are a deliberate
future extension.
@Razee4315 Razee4315 marked this pull request as ready for review June 18, 2026 20:42
@Razee4315 Razee4315 merged commit d2d33a1 into main Jun 18, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant