From architecture-angular
Gera todos os elementos da camada Feature de uma solução Angular com NgRx, RxJS, Signals e Reactive Forms. Use sempre que o usuário mencionar "criar feature Angular", "camada feature", "smart component", "dumb component", "feature component", "feature page", "feature store", "NgRx feature", "actions Angular", "reducers Angular", "effects Angular", "selectors Angular", "reactive form Angular", "feature service", "feature routing", "lazy load Angular", "rota feature", "criar módulo feature". Também dispara quando o usuário pedir para criar qualquer um destes itens: SmartComponent, DumbComponent, FeaturePage, NgRxStore, Actions, Reducers, Effects, Selectors, ReactiveForm, FeatureService, FeatureRouting em contexto Angular. NÃO use para a camada Core (use angular-core-layer) ou Shared — apenas para Features isoladas e lazy loaded.
How this skill is triggered — by the user, by Claude, or both
Slash command
/architecture-angular:angular-feature-layerThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Skill para geração da **camada Feature** de uma solução Angular seguindo Clean Architecture, com NgRx, RxJS, Signals e Reactive Forms integrados.
Skill para geração da camada Feature de uma solução Angular seguindo Clean Architecture, com NgRx, RxJS, Signals e Reactive Forms integrados.
Cada Feature é um módulo isolado, carregado sob demanda (lazy loaded). Contém tudo que pertence exclusivamente àquela funcionalidade.
features/
└── [nome-feature]/
├── components/ → Smart Components (consomem Store, serviços)
│ └── [nome]/
│ ├── [nome].component.ts
│ ├── [nome].component.html
│ └── [nome].component.scss
├── pages/ → Pages (componentes roteados, orquestram layout)
│ └── [nome]-page/
├── store/ → NgRx (Actions, Reducers, Effects, Selectors, State)
│ ├── [nome].actions.ts
│ ├── [nome].reducer.ts
│ ├── [nome].effects.ts
│ ├── [nome].selectors.ts
│ └── [nome].state.ts
├── forms/ → Reactive Forms (builders, validators)
│ └── [nome].form.ts
├── services/ → Feature Services (lógica local da feature)
│ └── [nome].service.ts
└── [nome].routes.ts → Routing (lazy routes desta feature)
Identifique qual item o usuário quer criar e leia o arquivo de referência correspondente:
| Item | Arquivo de referência | Quando usar |
|---|---|---|
| Smart / Dumb Component | references/feature-components.md | Componentes que consomem Store ou recebem @Input |
| Pages | references/feature-pages.md | Componentes roteados que orquestram layout |
| Store NgRx | references/feature-store.md | Actions, Reducers, Effects, Selectors, State |
| Forms | references/feature-forms.md | Reactive Forms, FormBuilder, validators customizados |
| Feature Services | references/feature-services.md | Lógica local, estado temporário da feature |
| Routing | references/feature-routing.md | Rotas lazy loaded, guards, resolvers por feature |
Pergunte ao usuário:
users, orders, dashboard)User, Order)Confirme com o usuário:
Leia o arquivo de referência do item solicitado e gere os arquivos TypeScript completos.
Entregue:
.ts com paths corretos (src/app/features/[feature]/...)standalone: true (Angular 17+)inject(), não via constructorChangeDetectionStrategy.OnPush em Smart ComponentscreateEntityAdapter para coleções de entidadescreateFeature() do NgRx para registrar a store da featuretoSignal() com selectors para interopFormBuilder com nonNullable para evitar | null| Tipo | Padrão | Exemplo |
|---|---|---|
| Feature folder | kebab-case | users/, order-management/ |
| Actions | [Feature]Actions.verb | UsersActions.loadAll |
| Reducer | [feature]Reducer | usersReducer |
| Effects class | [Feature]Effects | UsersEffects |
| Selectors | select[Feature][Campo] | selectUsersAll, selectUsersLoading |
| Feature state | [Feature]State | UsersState |
| Form class | [Feature]Form | UserForm |
Effect não dispara
EffectsModule.forFeature([XEffects]) ou provideEffects([XEffects]) está registradostore.dispatch()Selector retorna undefined
provideState(featureName, reducer) está no routing da featurefeatureName do createFeature bate com o registradoReactive Form não valida
nonNullable: true no FormBuilder para evitar valores nullReactiveFormsModule está nos imports do componente standaloneLazy loading não funciona
loadComponent ou loadChildren corretamenteCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub brunocesharp/claude --plugin architecture-angular