Claude Code Plugins

Community-maintained marketplace

Feedback

Use when creating reactive forms with validation, async validators, dependent validation, and FormArrays using platform patterns.

Install Skill

Shared

Installs to .agents/skills, used by Codex, Amp, Warp, Cursor, OpenCode, and more.

CodexAmp
Warp
CursorOpenCode
Cline
Gemini CLI
GitHub Copilot
Personal

Available across projects.

$npx skills-installer add @majiayu000/claude-skill-registry/angular-form --client shared
Project

Writes to .agents/skills.

$npx skills-installer add @majiayu000/claude-skill-registry/angular-form -p --client shared
Note: Review the skill instructions before using it.

SKILL.md

name frontend-angular-form
description Use when creating reactive forms with validation, async validators, dependent validation, and FormArrays using platform patterns.
infer true
allowed-tools Read, Write, Edit, Grep, Glob, Bash

Angular Form Development Workflow

Use when creating/modifying reactive forms with validation, async validators, dependent validation, or FormArrays.

Decision Tree

What type of form?
├── Basic form (no auth)    → PlatformFormComponent
├── Form with auth context  → AppBaseFormComponent (typical choice)
├── With async validation   → AppBaseFormComponent + ifAsyncValidator
├── Cross-field validation  → AppBaseFormComponent + dependentValidations
└── Dynamic fields          → AppBaseFormComponent + FormArray config

Workflow

  1. Search existing forms: grep "{Feature}FormComponent" --include="*.ts"
  2. Read design system docs (see Read Directives below)
  3. Define ViewModel interface for form data
  4. Implement initialFormConfig() with controls, validators, dependentValidations
  5. Implement initOrReloadVm() for create/edit mode data loading
  6. Add onSubmit() with validateForm() guard
  7. Template with BEM classes on all form elements
  8. Verify checklist below

Key Rules

  • Always call validateForm() before submit
  • Use ifAsyncValidator(condition, validator) - never run async validators unconditionally
  • Configure dependentValidations for cross-field re-validation
  • FormArrays use { modelItems, itemControl } config pattern
  • Use formControls('name') to access control in template
  • Loading state: isLoading$('save')() in template

File Location

src/Frontend/apps/{app-name}/src/app/features/{feature}/
├── {feature}-form.component.ts|html|scss

⚠️ MUST READ Before Implementation

IMPORTANT: You MUST read these files before writing any code. Do NOT skip.

  1. ⚠️ MUST READ .claude/skills/shared/angular-design-system.md — hierarchy, SCSS, platform APIs
  2. ⚠️ MUST READ .claude/skills/shared/bem-component-examples.md — BEM form examples
  3. ⚠️ MUST READ .claude/skills/frontend-angular-form/references/form-patterns.md — basic, async, dependent, FormArray patterns
  4. ⚠️ MUST READ target app design system: docs/design-system/03-form-patterns.md

Anti-Patterns

  • Missing validateForm() before submit
  • Async validator without ifAsyncValidator conditional wrapper
  • Missing [formGroupName]="i" in FormArray template loops
  • Form elements without BEM classes
  • Missing error messages for validation rules

Verification Checklist

  • initialFormConfig returns form configuration
  • initOrReloadVm handles create + edit modes
  • validateForm() called before submit
  • Async validators wrapped with ifAsyncValidator
  • dependentValidations configured for cross-field rules
  • FormArrays use modelItems + itemControl
  • Error messages for all validation rules
  • All form elements have BEM classes

IMPORTANT Task Planning Notes

  • Always plan and break many small todo tasks
  • Always add a final review todo task to review the works done at the end to find any fix or enhancement needed