Loading...
Loading...
Builds accessible, production-ready frontend components. Use when building UI components, forms, modals, or any React/Vue/Svelte frontend work — before writing component code.
npx skill4agent add sentry01/copilot-cli-skills building-frontend-componentsreferences/patterns.mdreferences/patterns.md// REQUIRED attributes
<div
role="dialog"
aria-modal="true"
aria-labelledby="modal-title-id"
ref={dialogRef}
>
<h2 id="modal-title-id">{title}</h2>
</div>
// REQUIRED behaviors
// 1. Focus first interactive element on open
// 2. Trap focus within modal (Tab cycles inside)
// 3. Restore focus to trigger element on close
// 4. Close on Escape keyreferences/patterns.md// REQUIRED: Link errors to fields
<input
id="email"
aria-invalid={errors.email ? 'true' : 'false'}
aria-describedby={errors.email ? 'email-error' : undefined}
/>
{errors.email && (
<span id="email-error" role="alert">
{errors.email.message}
</span>
)}
// REQUIRED: Form identification
<form aria-label="Login form">
{/* or aria-labelledby pointing to a heading */}
</form>| Element | Requirements |
|---|---|
| Button | Visible focus indicator, disabled state styling |
| Link | Underline or clear affordance, focus visible |
| Custom control | |
| Menu/Dropdown | |
aria-disableddisabledoutline: none#2563ebrole="dialog"aria-modalrole="alert"aria-invalidaria-describedby| What Agent Did | What Was Missing |
|---|---|
| Modal with Escape handling | No |
| Form with labels | No |
| Error message display | No |
| Inline styles | No design tokens, creates maintenance burden |
references/patterns.mdprefers-reduced-motionany