skills/angular-awesome-forms/SKILL.md
Integrate Angular Awesome form controls (wa-input, wa-select, wa-checkbox, wa-switch, wa-slider, wa-textarea, wa-combobox, wa-color-picker, wa-number-input, wa-radio, wa-file-input) with Angular Reactive Forms and Template-Driven Forms. Use when binding [(ngModel)], using FormControl/FormGroup, implementing custom validation, handling wa-input/wa-change events, or building form layouts with Web Awesome components.
npx skillsauth add gedmarc/angular-awesome angular-awesome-formsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Integrate Web Awesome form controls with Angular's template-driven and reactive forms.
All implement ControlValueAccessor and work with [(ngModel)], [formControl], and [formControlName]:
| Control | Selector | Value Type |
|---------|----------|-----------|
| Input | wa-input | string |
| Number Input | wa-number-input | number |
| Textarea | wa-textarea | string |
| Select | wa-select | string \| string[] |
| Combobox | wa-combobox | string \| string[] |
| Checkbox | wa-checkbox | boolean |
| Switch | wa-switch | boolean |
| Radio | wa-radio | string |
| Slider | wa-slider | number |
| Color Picker | wa-color-picker | string |
| File Input | wa-file-input | FileList |
<form #f="ngForm" (ngSubmit)="onSubmit(f.value)">
<wa-input label="Name" [(ngModel)]="name" name="name" required></wa-input>
<wa-select label="Role" [(ngModel)]="role" name="role">
<wa-option value="admin">Admin</wa-option>
<wa-option value="user">User</wa-option>
</wa-select>
<wa-checkbox [(ngModel)]="agree" name="agree">I agree</wa-checkbox>
<wa-button type="submit" [disabled]="!f.valid">Submit</wa-button>
</form>
@Component({
standalone: true,
imports: [ReactiveFormsModule, WaInputDirective, WaSelectDirective, WaCheckboxDirective, WaButtonDirective, WaOptionDirective],
template: `
<form [formGroup]="form" (ngSubmit)="submit()">
<wa-input label="Email" formControlName="email"></wa-input>
<wa-number-input label="Age" formControlName="age" [min]="0" [max]="120"></wa-number-input>
<wa-select label="Country" formControlName="country">
<wa-option value="us">United States</wa-option>
<wa-option value="uk">United Kingdom</wa-option>
</wa-select>
<wa-switch formControlName="newsletter">Subscribe</wa-switch>
<wa-button type="submit" [disabled]="form.invalid">Save</wa-button>
</form>
`
})
export class ProfileForm {
form = new FormGroup({
email: new FormControl('', [Validators.required, Validators.email]),
age: new FormControl(null, [Validators.min(0), Validators.max(120)]),
country: new FormControl(''),
newsletter: new FormControl(false)
});
submit() { console.log(this.form.value); }
}
Form controls emit two key events:
(wa-input) — fires on every keystroke/interaction (use for live feedback)(wa-change) — fires on commit (blur, Enter, selection)<wa-input (wa-input)="onInput($event)" (wa-change)="onChange($event)"></wa-input>
Angular validation works out of the box. Add CSS classes or attribute selectors:
wa-input.ng-invalid.ng-touched { --wa-input-border-color: var(--wa-color-danger-600); }
Use wa-callout variant="danger" for error messages:
<wa-callout variant="danger" *ngIf="form.get('email')?.errors?.['required'] && form.get('email')?.touched">
Email is required.
</wa-callout>
<wa-input [disabled]="isDisabled" formControlName="name"></wa-input>
Or programmatically:
this.form.get('name')?.disable();
<wa-select multiple formControlName="tags">
<wa-option value="angular">Angular</wa-option>
<wa-option value="web">Web</wa-option>
</wa-select>
Value is string[] when multiple is set.
FormsModule for [(ngModel)] or ReactiveFormsModule for [formControl].WaInputDirective) — standalone, no module wrapping.wa-option must be used inside wa-select or wa-combobox for selectable items.(wa-change) for form submission triggers, (wa-input) for live filtering/search.development
Use Angular Awesome wrapper directives for Web Awesome web components in Angular 20+ projects. Trigger when tasks mention wa-* components (wa-button, wa-input, wa-dialog, wa-toast, wa-select, wa-checkbox, etc.), Angular Awesome directives, Web Awesome Angular integration, component variants/appearance/size tokens, slot projection, form control binding, or angular-awesome imports. Covers component usage, layout utilities, services (toast), theming, and accessibility.
development
Theme and style Angular Awesome components using Web Awesome design tokens, CSS custom properties, CSS parts, variant/appearance/size tokens, and layout utilities. Use when customizing component appearance, applying brand colors, overriding default styles, using CSS shadow parts, or configuring layout directives (cluster, stack, grid, gap, align, flank, frame, split).
development
Write and maintain tests for Angular Awesome wrapper directives, components, and services. Use when creating spec files for wa-* components, testing form control integration, testing event emission, testing toast/service behavior, running headless or BrowserStack tests, or debugging test failures in Angular Awesome.
development
Create a new Angular Awesome wrapper directive or component for a Web Awesome web component. Use when adding a new wa-* component wrapper, scaffolding a directive with its spec/rules/example files, wiring it into public-api.ts, updating the changelog, and regenerating docs. Covers the full end-to-end flow from llms.txt API extraction through to build verification.