Skip to content

feat: command builder accessibility, keyboard navigation, reset, and validation states - #213

Open
bade2brazy wants to merge 1 commit into
soroban-testkit:mainfrom
bade2brazy:fix/issues-203-207
Open

bade2brazy wants to merge 1 commit into
soroban-testkit:mainfrom
bade2brazy:fix/issues-203-207

Conversation

@bade2brazy

@bade2brazy bade2brazy commented Oct 18, 2026 •

Copy link
Copy Markdown

Summary

Closes #203
Closes #204
Closes #205
Closes #206
Closes #207

This pull request enhances the Soroban Testkit command builder with WAI-ARIA accessibility compliance, keyboard workflow navigation, default reset capabilities, clipboard feedback, and input validation with error recovery.

Key Changes

  • Accessibility Assertions (Feature: Add accessibility assertions for the command builder #203):
    • Added WAI-ARIA tab pattern (role="tablist", aria-label="CLI commands", role="tab", aria-selected, aria-controls, id).
    • Added tabpanel relationship (role="tabpanel", id, aria-labelledby).
    • Explicitly associated labels and form inputs using htmlFor and id.
    • Added screen-reader announcement live region with role="status" and aria-live="polite".
  • Keyboard Workflow Navigation (Feature: Add keyboard interaction tests for workflow navigation #204):
    • Implemented roving tabIndex (0 for active tab, -1 for inactive tabs).
    • Added arrow navigation (ArrowRight / ArrowLeft, ArrowDown / ArrowUp) across workflow tabs with automatic cycling.
    • Added jump navigation with Home (first tab) and End (last tab).
  • Reset Behavior (Feature: Add tests for reset behavior after customized inputs #205):
    • Added Reset action to restore customized options back to canonical workflow defaults (DEFAULT_OPTIONS).
    • Updates generated command string and announces reset to assistive technology.
    • Clears active validation errors upon reset.
  • Clipboard Success & Failure States (Feature: Add tests for clipboard success and failure states #206):
    • Visual and accessible status for copy success (Copied label, polite live region announcement).
    • Visual and accessible status for copy failure (Failed label, error styling, failure announcement).
    • Graceful error recovery: status and error styling revert back to Copy after timeout to allow retrying.
  • Invalid Builder Input States (Feature: Add tests for invalid builder input states #207):
    • Added validation for required paths (cannot be empty or whitespace) and limits identifiers (fn and ramp validated as valid Rust identifiers).
    • Displays inline role="alert" messages linked to inputs via aria-invalid and aria-describedby.
    • Safely disables clipboard copy while inputs are invalid.
  • Testing & Documentation:
    • Expanded unit tests in src/testkit.test.ts for input validation rules.
    • Added comprehensive test suites in src/App.test.tsx covering accessibility assertions, keyboard navigation, reset behavior, clipboard success/error handling, and invalid input states.
    • Updated README.md documenting new CLI workbench capabilities.

…set, and validation states

- Add ARIA tablist/tab/tabpanel attributes, accessible labels, and live region (fixes soroban-testkit#203)
- Add arrow key and Home/End keyboard navigation across workflow tabs with roving tabIndex (fixes soroban-testkit#204)
- Add reset button to restore workflow defaults and announce reset (fixes soroban-testkit#205)
- Add clipboard success and failure states with error recovery and live announcements (fixes soroban-testkit#206)
- Add validation for required paths and Rust identifiers with alert states (fixes soroban-testkit#207)
- Add comprehensive test suites for accessibility, keyboard navigation, reset, clipboard, and validation
- Update README documentation with new capabilities
@drips-wave

drips-wave Bot commented Oct 18, 2026

Copy link
Copy Markdown

@bade2brazy Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant