Skip to content
ripper docs Open the console

Accessibility

The checkout is a region landmark named "ripper checkout — secure payment" with two live regions, and only one of them holds text at a time: a visually hidden, polite status region announces progress, steps and the outcome, and a visible, assertive alert region carries validation messages and failures. Every field is labelled; Tab order follows the visual order; Enter on the pay button pays; Escape cancels with user_cancelled.

accessibility.ariaLabel renames the landmark. announceErrors: false keeps the inline errors and stops announcing errors; progress, steps and the outcome are still announced (true, the default, announces validation once per pass, never per keystroke). reducedMotion: true switches the one animation off (so does prefers-reduced-motion).

const result = await ripper.collect({ amount: 4200, currency: 'GBP', accessibility: { ariaLabel: 'Pay Acme Coffee', announceErrors: true, reducedMotion: false } });

describedBy names ids on YOUR page. The checkout renders inside its own isolated root, and an id reference cannot reach out of it, so the runtime does the work for you: the named elements' text is copied into the checkout and kept in sync as it changes. aria-labelledby is not accepted — the label is ariaLabel only. Precedence, stated once: the React prop wins over the collect() option, which wins over the integration's default.

const result = await ripper.collect({ amount: 4200, currency: 'GBP', accessibility: { describedBy: 'order-summary' } });