implement-accessible-ui

Implement accessible Video.js UI components with ARIA, keyboard, and focus patterns.

931|91|Updated Aug 13, 2025
One-click install
npx skills add https://github.com/videojs/v10 --skill implement-accessible-ui
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: implement-accessible-ui
Source: https://github.com/videojs/v10/tree/main/.agents/skills/implement-accessible-ui
Command: npx skills add https://github.com/videojs/v10 --skill implement-accessible-ui

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve?

Building media player interfaces that work for keyboard, screen reader, and assistive technology users requires deep knowledge of ARIA roles, focus management, and WCAG rules that developers often get wrong.

Core Features & Use Cases

  • Semantics-First Workflow: Start from rendered output and define the expected name, role, state, keyboard, and focus contract before writing code.
  • On-Demand References: Load targeted guides for keyboard navigation, focus management, ARIA roles and states, React hooks, media-player behavior, and anti-patterns.
  • Use Case: When asked to make a custom volume slider keyboard accessible, the Skill produces correct slider semantics (aria-valuenow/min/max), arrow-key handling, announcements, focused tests, and browser verification.

Quick Start

Ask the assistant to make the custom volume slider in your Video.js player keyboard accessible and screen reader friendly.

Frequently Asked Questions about implement-accessible-ui

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I make a custom video slider keyboard accessible?

Give the slider role="slider" with aria-valuemin, aria-valuemax, aria-valuenow, and aria-valuetext, plus an aria-label. Arrow keys adjust by step, PageUp/PageDown by large steps, and Home/End jump to minimum and maximum.

How do I implement roving tabindex in a toolbar?

Set tabindex="0" on the active item and tabindex="-1" on all others, so the toolbar is a single tab stop. Arrow keys move focus and update tabindex values, which applies to toolbars, menus, tab lists, and listboxes.

Should I use aria-label or change the label for toggle buttons?

Keep the label constant and convey state with aria-pressed instead. For example a mute button keeps aria-label="Mute" while aria-pressed toggles between true and false, since changing labels breaks the accessible contract.

When should I use ARIA instead of native HTML elements?

Use native HTML whenever possible because elements like button include built-in keyboard handling and implicit roles. Add ARIA only when native semantics cannot express the control, since ARIA adds semantics but not behavior.

Why is removing focus outlines an accessibility violation?

Removing focus outlines without a visible replacement violates WCAG 2.4.7 because keyboard users cannot see where focus is. Use :focus-visible styles with at least 3:1 contrast, or reduce motion and styling through data attributes instead.

How do screen reader live regions work in a media player?

Create one visually hidden region with role="status", aria-live="polite", and aria-atomic="true" present in the DOM on load, then update its text to announce events like play, pause, volume, and seek. Reserve assertive announcements for errors only.