<!-- Auto-generated by `velinstyle docs generate`. Do not edit. Source: components/velin-form-summary.js -->

# <velin-form-summary>

Source: `components/velin-form-summary.js`

## Minimal working example
Copy-paste starter (load CSS + `velinstyle-components` / `bootFromDOM` as needed):

```html
<form novalidate>
  <velin-form-summary></velin-form-summary>
  <label class="velin-label" for="email">Email</label>
  <input id="email" class="velin-input" type="email" required>
  <button type="submit" class="velin-btn velin-btn--primary">Send</button>
</form>
```

## Accessibility
WCAG contract status: **pass** (framework target: AAA).

- **Roles:** `alert`, `link`
- **Keyboard:** Summary links move focus to the offending field
- **Live region:** `assertive`
- **Notes:** Disables native validation bubbles and renders a focusable role=alert summary. Sets aria-invalid and wires aria-describedby to per-field messages (WCAG 3.3.1, 3.3.3, 4.1.2). Field errors clear as soon as the field becomes valid.

## Attributes
| Attribute | Notes |
| --- | --- |
| `for` | Observed — triggers `attributeChangedCallback` when changed |
| `heading` | Observed — triggers `attributeChangedCallback` when changed |
## Events
- `velin-form-error-focus` (bubbles)
- `velin-form-invalid` (bubbles)
- `velin-form-valid` (bubbles)
## CSS parts
_None._
## Slots
_None._
## Public API
| Kind | Name |
| --- | --- |
| Method | `clear()` |
| Method | `focusFirstError()` |
| Method | `validate()` |
| Property | `errors` |
| Property | `form` |
| Property | `headingText` |
