Skip to content

RemixSpinner and RemixProgress need optional semantics #90

Description

@leoafarias

Summary

RemixSpinner and RemixProgress have no first-class way to expose an accessible name or progress value. The generated Fortal wrappers therefore cannot forward one.

Found while validating #80 at b16636b017f3c8832d8f27f316cc24c0ad92ce8a, including the final generator/API decisions from stacked PR #84.

Evidence

  • RemixSpinner renders a visual CustomPaint and accepts only style inputs.
  • RemixProgress requires a determinate value but renders only visual boxes.
  • Neither source tree nor its component tests contains a semantic label/value contract.

Flutter's standard ProgressIndicator exposes semanticsLabel and semanticsValue; its determinate implementation can derive a percentage when an explicit value string is absent.

Decorative-by-default behavior is reasonable. The gap is that a consumer cannot opt into a named/status primitive through the Remix/Fortal API without wrapping the component and reimplementing its semantics ownership.

Expected

Consumers can choose:

  • a decorative spinner/progress indicator with no independent node;
  • a nondecorative indicator with one accessible name and appropriate value/state.

Suggested direction

  • Add optional semantic label/value inputs to the base Remix widgets.
  • Let the final @MixWidget Fortal wrappers forward those target parameters automatically.
  • For determinate progress, expose the normalized value in the same node.
  • Keep spinner announcements opt-in; animation alone must not repeatedly announce.

Acceptance criteria

  • Null semantic inputs keep the indicators decorative.
  • A labelled spinner exposes one noninteractive status/progress node.
  • A labelled determinate progress bar exposes one name and its current normalized value.
  • Updating progress changes the existing node rather than adding duplicates.
  • Generated Fortal wrappers forward the final API without handwritten drift.
  • Headless semantics tests cover decorative, labelled, and updated states.

Scope

This does not request indeterminate RemixProgress; PR #80 explicitly defers that visual/API capability. It only covers semantics for the indicator modes that already exist.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions