This plan tracks the selected priority sequence:
- Motion tokens
- State surfaces
- Notification primitives
- CardStory container
- FeedTimeline
- Menu contract
Status legend:
- not started
- [~] in progress
- complete
- Status: [x]
- Goal: reusable motion language that can be applied consistently across widgets, transitions, and app flows.
- Deliverables:
MotionTokensconfig object (durations, distances, opacity ranges, easing defaults).- Preset catalog (
focus_bump,settle,shake,stagger_in,toast_pop,peek_reveal). - Helper APIs that consume tokens instead of hard-coded constants.
- Example update showing token overrides.
- Acceptance criteria:
- Presets compile without breaking existing API surface.
- One place to tune global "feel" for animations.
- Existing cinematic example can switch token set in <= 10 lines.
- Likely files:
src/cinematic.rssrc/widget_animation.rssrc/transition_preset.rssrc/lib.rsexamples/cinematic_peek_glance_carddeck_showcase.rs
- Status: [x]
- Goal: first-class surfaces for loading/empty/error/offline states with consistent visuals and interaction behavior.
- Deliverables:
SurfaceStateenum (Loading,Empty,Error,Offline,Ready).- Reusable state surface widget or adapter layer.
- Optional action affordances (
Retry,Open settings,Dismiss) via callbacks/events. - Default icon/text layout with style overrides.
- Acceptance criteria:
- App can switch state with one API call.
- State surface supports no_std-friendly text/icon representation.
- Keyboard/encoder navigation can focus retry action when available.
- Likely files:
src/widgets/mod.rssrc/context.rssrc/input.rssrc/style.rssrc/lib.rsexamples/new state surface demo
- Status: [x]
- Goal: composable heads-up + action-sheet notification UX.
- Deliverables:
HeadsUpBannerprimitive (ttl, auto-dismiss, manual dismiss).NotificationActionSheetprimitive (title/body/actions).- Event model for open/close/action-selected.
- Preset choreography for enter/exit.
- Acceptance criteria:
- Heads-up notification can animate in/out and auto-expire.
- Action sheet supports at least 2 actions + cancel/back.
- Works with pointer and key/encoder input paths.
- Likely files:
src/widgets/mod.rssrc/context.rssrc/input.rssrc/cinematic.rssrc/lib.rsexamples/new notifications demo
- Status: [x]
- Goal: summary -> detail -> graph narrative container with built-in transitions.
- Deliverables:
CardStorystate container (current card index, direction, transitions).- Navigation helpers (next/prev/jump).
- Integration with motion presets for card transitions.
- Optional indicator (dots/progress/index label).
- Acceptance criteria:
- Supports at least 3 cards with smooth forward/back transitions.
- Back handling semantics are predictable and testable.
- Demo app can build a card story in < 30 lines of setup.
- Likely files:
src/cinematic.rssrc/context.rssrc/widgets/mod.rssrc/lib.rsexamples/cinematic_peek_glance_carddeck_showcase.rs(or split example)
- Status: [x]
- Goal: feed/timeline primitive with compact rows, expanded preview, and detail pin behavior.
- Deliverables:
FeedTimelinewidget model (items, selected index, scroll offset).- Row rendering variants (compact vs expanded).
- Optional peek/pin transitions using existing cinematic helpers.
- Event outputs for selected/opened/acted-on items.
- Acceptance criteria:
- Scrolling and selection remain smooth under fixed capacity constraints.
- Expanded item transitions do not break dirty-render assumptions.
- Works with encoder-style incremental navigation.
- Likely files:
src/widgets/mod.rssrc/context.rssrc/state.rssrc/input.rssrc/lib.rsexamples/new feed timeline demo
- Status: [x]
- Goal: codify predictable menu semantics across components.
- Deliverables:
MenuContractpolicy (select/back/open/close/focus movement rules).- Shared key mapping defaults for list/menu/dropdown/action sheets.
- Contract-focused tests for regression safety.
- Documentation for expected UX behavior.
- Acceptance criteria:
- Menu-like widgets use the same back/confirm semantics by default.
- Contract can be overridden per-widget when needed.
- Tests cover edge cases (top/bottom boundaries, nested open states, back behavior).
- Likely files:
src/context.rssrc/input.rssrc/widget.rstests/gui.rsdocs/interaction-behavior-contract.md
- Iteration A: (1) Motion tokens
- Iteration B: (2) State surfaces + (3) Notification primitives
- Iteration C: (4) CardStory + (5) FeedTimeline
- Iteration D: (6) Menu contract + regression hardening
- Keep API additions additive where possible.
- Prefer preset-first APIs with sensible defaults, optional advanced overrides.
- Add at least one focused example per milestone to make UX intent visible quickly.