Skip to content

[00132] Implement Rust Widget APIs for UI Effects and Visual Extras - #131

Merged
rorychatt merged 5 commits into
mainfrom
tendril/00132-ImplementRustWidgetAPIsForUIEffectsAndVisualExtras
Aug 10, 2026
Merged

[00132] Implement Rust Widget APIs for UI Effects and Visual Extras#131
rorychatt merged 5 commits into
mainfrom
tendril/00132-ImplementRustWidgetAPIsForUIEffectsAndVisualExtras

Conversation

@rorychatt

Copy link
Copy Markdown
Contributor

Fixes #129

Summary — 00132: Implement Rust Widget APIs for UI Effects and Visual Extras

Implements the five Rust widget APIs missing per Issue #129:
Confetti, Animation, StackedProgress, WireframeCallout, WireframeNote.

Changes

  • rusty/src/widgets/effects.rs (new)EffectTrigger, Confetti, AnimationType,
    AnimationEasing, AnimationDirection, Animation. The animation kind is exposed as
    animation_type (→ animationType) rather than type, to avoid clobbering the widget
    discriminator the Widget derive writes under "type".
  • rusty/src/widgets/progress.rs — added ProgressSegment and StackedProgress (a
    multi-segment progress bar with an on_select event), deliberately kept out of effects.rs
    since it is a progress bar, not an effect.
  • rusty/src/widgets/wireframe.rs (new)WireframeCallout and WireframeNote, design
    annotation widgets with no existing reference implementation; their prop shape is a documented
    assumption.
  • rusty/src/widgets/mod.rs — module declarations and re-exports for all five new types.
  • rusty/src/shared/widget_names.rs — registered the five new wire-format type strings in the
    Ivy widget-name mapping (animation/confetti/stacked_progress map to real Ivy widgets;
    wireframe_callout/wireframe_note are RustOnly). Not called for by the plan's own text, but
    required for cargo test to pass — a real, pre-existing gate this plan's new widgets tripped.
  • rusty-server/src/bin/widget_harness.rsEffects/Wireframe WidgetKind variants,
    EffectsApp (a Confetti per trigger, three Animation nodes, two StackedProgress bars — one
    wired to on_select), WireframeApp (a callout wrapping a TextBlock, an authored note).
  • e2e/app/index.html — five new renderWidget case arms (confetti, animation,
    stacked_progress, wireframe_callout, wireframe_note) and matching CSS.
  • e2e/tests/widgets/effects.spec.ts, wireframe.spec.ts (new) — Playwright coverage for
    every new widget, including the StackedProgress click → on_select → state round-trip.
  • rusty-docs/docs/03_widgets/34_stacked_progress.md, 35_effects.md, 36_wireframe.md
    (new)
    — widget reference docs.

Verification

All 9 verifications resolved:

Verification Result
RustFmt Pass
RustClippy Pass
VitePlusCheck Skipped — no src/frontend files changed
RustBuild Pass
NpmBuild Pass
RustTest Pass — 467+ passed across the workspace, 0 failed
VitePlusTest Skipped — no src/frontend files changed (1 pre-existing, unrelated failure noted for context)
PlaywrightE2E Pass — 149 passed
CheckResult Pass

Commits

  1. 6b7be02 — Add Confetti, Animation, StackedProgress, WireframeCallout, WireframeNote widgets
  2. b2ba911 — Add E2E harness support for effects and wireframe widgets
  3. 76aae58 — Add Playwright specs for effects and wireframe widgets
  4. d634163 — Add widget docs for StackedProgress, Effects, Wireframe
  5. 978ebf8 — EffectsApp: cover all three Confetti triggers, not just Click

Notable deviations

  • StackedProgress lives in progress.rs, not effects.rs — an explicit, plan-sanctioned
    deviation from the source issue.
  • widget_names.rs was edited even though the plan's Solution section doesn't mention it — a
    necessary fix for a pre-existing test gate the new widgets triggered.
  • The E2E renderer's data-attribute names for the new widgets (e.g. data-label,
    data-selected) differ cosmetically from the plan's illustrative names (data-segment-label,
    data-segment-index) but follow the file's own existing convention more closely.

Created using Ivy Tendril.

…ireframeNote widgets

Implements the five Rust widget APIs missing per GitHub Issue #129: Confetti
and Animation effects, a multi-segment StackedProgress bar, and the
WireframeCallout/WireframeNote design-annotation widgets. StackedProgress
lives in progress.rs rather than effects.rs since it is a progress bar, not
an effect. Registers the new wire-format widget types in widget_names.rs's
Ivy mapping (Confetti/Animation/StackedProgress have Ivy counterparts;
the wireframe widgets are Rust-only).
Adds Effects and Wireframe WidgetKind variants to widget_harness.rs with
EffectsApp (confetti, three animations, two stacked progress bars, one
wired to on_select) and WireframeApp views, plus matching case arms and
CSS in e2e/app/index.html's renderWidget client.
Covers confetti's trigger, the three animation nodes' type/easing/
visibility/direction, stacked progress segment rendering, the on_select
click-to-state-update flow, and the wireframe callout/note rendering.
The plan calls for "a Confetti per trigger" in the harness; add the
missing Auto and Hover nodes and update the spec to assert all three.
@rorychatt rorychatt self-assigned this Aug 10, 2026
@rorychatt
rorychatt merged commit febeb5d into main Aug 10, 2026
@rorychatt
rorychatt deleted the tendril/00132-ImplementRustWidgetAPIsForUIEffectsAndVisualExtras branch August 10, 2026 09:25
rorychatt added a commit that referenced this pull request Aug 10, 2026
Combines this plan's blade/breadcrumbs/pagination/toolbar widgets with
main's animation/confetti/stacked_progress/wireframe widgets (PR #131),
re-derives the widget_names.rs mapped-type count (38 -> 48) from the
actual merged list, and renumbers this plan's doc pages (34-37 ->
37-40) to avoid colliding with main's newly added 34-36.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Widgets] Implement Rust Widget APIs for UI Effects & Visual Extras

1 participant