Claude-skill-registry frontend-angular-component
Use when creating or modifying Angular components in Frontend (Angular 19) with proper base class inheritance, state management, and platform patterns.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/frontend-angular-component" ~/.claude/skills/majiayu000-claude-skill-registry-frontend-angular-component && rm -rf "$T"
manifest:
skills/data/frontend-angular-component/SKILL.mdsource content
Angular Component Development Workflow
Use when creating/modifying Angular 19 components with EasyPlatform base classes.
Decision Tree
What type of component? ├── Simple display (no state) → AppBaseComponent ├── Mutable view model → AppBaseVmComponent ├── User input form → AppBaseFormComponent (see frontend-angular-form skill) ├── Complex state / CRUD / list → AppBaseVmStoreComponent (see frontend-angular-store skill) └── Reusable presentational → AppBaseComponent + @Input/@Output
Rule: Always use
AppBase* (not Platform* directly) to get auth/role context.
Workflow
- Search existing components:
grep "{Feature}Component" --include="*.ts" - Read design system docs (see Read Directives below)
- Select base class from decision tree above
- Create files:
,{feature}.component.ts
,.html
, optionally.scss.store.ts - Implement using patterns from references
- Verify checklist below
Key Rules
- Wrap content with
<app-loading-and-error-indicator [target]="this"> - Use
with@for (item of items; track trackByItem)ngForTrackByItemProp - All subscriptions:
.pipe(this.untilDestroyed()).subscribe() - Store provided at component level:
providers: [FeatureStore] - All API calls through
subclasses (neverPlatformApiService
directly)HttpClient - Place logic in LOWEST layer: Entity/Model > Service > Component
File Location
src/Frontend/apps/{app-name}/src/app/features/{feature}/ ├── {feature}.component.ts|html|scss └── {feature}.store.ts (if using store)
⚠️ MUST READ Before Implementation
IMPORTANT: You MUST read these files before writing any code. Do NOT skip.
- ⚠️ MUST READ
— hierarchy, SCSS, platform APIs.claude/skills/shared/angular-design-system.md - ⚠️ MUST READ
— BEM HTML/SCSS examples.claude/skills/shared/bem-component-examples.md - ⚠️ MUST READ
— list, form, simple component patterns.claude/skills/frontend-angular-component/references/component-patterns.md - ⚠️ MUST READ target app design system:
anddocs/design-system/README.md02-component-catalog.md
Anti-Patterns
when auth needed -> useextends PlatformComponentAppBaseComponent
+ manual cleanup -> useprivate sub: Subscriptionthis.untilDestroyed()
-> useconstructor(private http: HttpClient)
subclassPlatformApiService- Missing
wrapper<app-loading-and-error-indicator> - Template elements without BEM classes
Verification Checklist
- Correct
class selectedAppBase* - Store provided at component level (if using store)
- Loading/error wrapped with
app-loading-and-error-indicator - All subscriptions use
untilDestroyed() - Track-by on
loops@for - Auth checks use
from base classhasRole() - All 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