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
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.
Summary
RemixSpinnerandRemixProgresshave 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
RemixSpinnerrenders a visualCustomPaintand accepts only style inputs.RemixProgressrequires a determinate value but renders only visual boxes.Flutter's standard
ProgressIndicatorexposessemanticsLabelandsemanticsValue; 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:
Suggested direction
@MixWidgetFortal wrappers forward those target parameters automatically.Acceptance criteria
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.