@polymorphism-tech/morph-spec 2.3.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/CLAUDE.md +446 -1730
  2. package/README.md +515 -516
  3. package/bin/morph-spec.js +366 -294
  4. package/bin/task-manager.js +429 -368
  5. package/bin/validate.js +369 -268
  6. package/content/.claude/commands/morph-apply.md +221 -158
  7. package/content/.claude/commands/morph-deploy.md +529 -0
  8. package/content/.claude/commands/morph-preflight.md +227 -0
  9. package/content/.claude/commands/morph-proposal.md +122 -101
  10. package/content/.claude/commands/morph-status.md +86 -86
  11. package/content/.claude/commands/morph-troubleshoot.md +122 -0
  12. package/content/.claude/skills/infra/azure-deploy-specialist.md +699 -0
  13. package/content/.claude/skills/level-0-meta/README.md +7 -0
  14. package/content/.claude/skills/level-0-meta/code-review.md +226 -0
  15. package/content/.claude/skills/level-0-meta/morph-checklist.md +117 -0
  16. package/content/.claude/skills/level-0-meta/simulation-checklist.md +77 -0
  17. package/content/.claude/skills/level-1-workflows/README.md +7 -0
  18. package/content/.claude/skills/level-1-workflows/morph-replicate.md +213 -0
  19. package/content/.claude/{commands/morph-clarify.md → skills/level-1-workflows/phase-clarify.md} +131 -184
  20. package/content/.claude/{commands/morph-design.md → skills/level-1-workflows/phase-design.md} +213 -275
  21. package/content/.claude/skills/level-1-workflows/phase-setup.md +106 -0
  22. package/content/.claude/skills/level-1-workflows/phase-tasks.md +164 -0
  23. package/content/.claude/{commands/morph-uiux.md → skills/level-1-workflows/phase-uiux.md} +169 -211
  24. package/content/.claude/skills/level-2-domains/README.md +14 -0
  25. package/content/.claude/skills/level-2-domains/ai-agents/ai-system-architect.md +192 -0
  26. package/content/.claude/skills/{specialists → level-2-domains/architecture}/po-pm-advisor.md +197 -197
  27. package/content/.claude/skills/level-2-domains/architecture/standards-architect.md +156 -0
  28. package/content/.claude/skills/level-2-domains/backend/dotnet-senior.md +287 -0
  29. package/content/.claude/skills/level-2-domains/backend/ef-modeler.md +113 -0
  30. package/content/.claude/skills/level-2-domains/backend/hangfire-orchestrator.md +126 -0
  31. package/content/.claude/skills/level-2-domains/backend/ms-agent-expert.md +109 -0
  32. package/content/.claude/skills/level-2-domains/frontend/blazor-builder.md +210 -0
  33. package/content/.claude/skills/level-2-domains/frontend/nextjs-expert.md +154 -0
  34. package/content/.claude/skills/level-2-domains/frontend/ui-ux-designer.md +191 -0
  35. package/content/.claude/skills/{specialists → level-2-domains/infrastructure}/azure-architect.md +142 -142
  36. package/content/.claude/skills/level-2-domains/infrastructure/bicep-architect.md +126 -0
  37. package/content/.claude/skills/level-2-domains/infrastructure/container-specialist.md +131 -0
  38. package/content/.claude/skills/level-2-domains/infrastructure/devops-engineer.md +119 -0
  39. package/content/.claude/skills/level-2-domains/integrations/asaas-financial.md +130 -0
  40. package/content/.claude/skills/level-2-domains/integrations/azure-identity.md +142 -0
  41. package/content/.claude/skills/level-2-domains/integrations/clerk-auth.md +108 -0
  42. package/content/.claude/skills/level-2-domains/integrations/resend-email.md +119 -0
  43. package/content/.claude/skills/level-2-domains/quality/code-analyzer.md +235 -0
  44. package/content/.claude/skills/level-2-domains/quality/testing-specialist.md +126 -0
  45. package/content/.claude/skills/level-3-technologies/README.md +7 -0
  46. package/content/.claude/skills/level-4-patterns/README.md +7 -0
  47. package/content/.claude/skills/specialists/prompt-engineer.md +189 -0
  48. package/content/.claude/skills/specialists/seo-growth-hacker.md +320 -0
  49. package/content/.morph/config/agents.json +762 -242
  50. package/content/.morph/config/config.template.json +122 -108
  51. package/content/.morph/docs/workflows/design-impl.md +37 -0
  52. package/content/.morph/docs/workflows/enforcement-pipeline.md +668 -0
  53. package/content/.morph/docs/workflows/fast-track.md +29 -0
  54. package/content/.morph/docs/workflows/full-morph.md +76 -0
  55. package/content/.morph/docs/workflows/standard.md +44 -0
  56. package/content/.morph/docs/workflows/ui-refresh.md +39 -0
  57. package/content/.morph/examples/scheduled-reports/decisions.md +158 -0
  58. package/content/.morph/examples/scheduled-reports/proposal.md +95 -0
  59. package/content/.morph/examples/scheduled-reports/spec.md +267 -0
  60. package/content/.morph/hooks/README.md +348 -239
  61. package/content/.morph/hooks/pre-commit-agents.sh +24 -24
  62. package/content/.morph/hooks/task-completed.js +73 -0
  63. package/content/.morph/hooks/teammate-idle.js +68 -0
  64. package/content/.morph/schemas/tasks.schema.json +220 -0
  65. package/content/.morph/standards/agent-framework-blazor-ui.md +359 -0
  66. package/content/.morph/standards/agent-framework-production.md +410 -0
  67. package/content/.morph/standards/agent-framework-setup.md +413 -453
  68. package/content/.morph/standards/agent-framework-workflows.md +349 -0
  69. package/content/.morph/standards/agent-teams-workflow.md +474 -0
  70. package/content/.morph/standards/architecture.md +325 -325
  71. package/content/.morph/standards/azure.md +605 -379
  72. package/content/.morph/standards/dotnet10-migration.md +520 -494
  73. package/content/.morph/templates/CONTEXT-FEATURE.md +276 -0
  74. package/content/.morph/templates/CONTEXT.md +170 -0
  75. package/content/.morph/templates/agent.cs +163 -172
  76. package/content/.morph/templates/clarify-questions.md +159 -0
  77. package/content/.morph/templates/contracts/Commands.cs +74 -0
  78. package/content/.morph/templates/contracts/Entities.cs +25 -0
  79. package/content/.morph/templates/contracts/Queries.cs +74 -0
  80. package/content/.morph/templates/contracts/README.md +74 -0
  81. package/content/.morph/templates/decisions.md +123 -106
  82. package/content/.morph/templates/infra/azure-pipelines-deploy.yml +480 -0
  83. package/content/.morph/templates/infra/deploy-checklist.md +426 -0
  84. package/content/.morph/templates/proposal.md +141 -155
  85. package/content/.morph/templates/recap.md +94 -105
  86. package/content/.morph/templates/simulation.md +353 -0
  87. package/content/.morph/templates/spec.md +149 -148
  88. package/content/.morph/templates/state.template.json +222 -222
  89. package/content/.morph/templates/tasks.md +257 -235
  90. package/content/.morph/templates/ui-components.md +362 -276
  91. package/content/CLAUDE.md +150 -442
  92. package/detectors/structure-detector.js +245 -250
  93. package/docs/README.md +144 -149
  94. package/docs/getting-started.md +301 -302
  95. package/docs/installation.md +361 -361
  96. package/docs/validation-checklist.md +265 -266
  97. package/package.json +80 -80
  98. package/src/commands/advance-phase.js +266 -0
  99. package/src/commands/analyze-blazor-concurrency.js +193 -0
  100. package/src/commands/deploy.js +780 -0
  101. package/src/commands/detect-agents.js +167 -0
  102. package/src/commands/doctor.js +356 -280
  103. package/src/commands/generate-context.js +40 -0
  104. package/src/commands/init.js +258 -245
  105. package/src/commands/lint-fluent.js +352 -0
  106. package/src/commands/rollback-phase.js +185 -0
  107. package/src/commands/session-summary.js +291 -0
  108. package/src/commands/task.js +78 -75
  109. package/src/commands/troubleshoot.js +222 -0
  110. package/src/commands/update.js +192 -159
  111. package/src/commands/validate-blazor-state.js +210 -0
  112. package/src/commands/validate-blazor.js +156 -0
  113. package/src/commands/validate-css.js +84 -0
  114. package/src/commands/validate-phase.js +221 -0
  115. package/src/lib/blazor-concurrency-analyzer.js +288 -0
  116. package/src/lib/blazor-state-validator.js +291 -0
  117. package/src/lib/blazor-validator.js +374 -0
  118. package/src/lib/complexity-analyzer.js +441 -292
  119. package/src/lib/context-generator.js +513 -0
  120. package/src/lib/continuous-validator.js +421 -440
  121. package/src/lib/css-validator.js +352 -0
  122. package/src/lib/decision-constraint-loader.js +109 -0
  123. package/src/lib/design-system-detector.js +187 -0
  124. package/src/lib/design-system-scaffolder.js +299 -0
  125. package/src/lib/hook-executor.js +256 -0
  126. package/src/lib/recap-generator.js +205 -0
  127. package/src/lib/spec-validator.js +258 -0
  128. package/src/lib/standards-context-injector.js +287 -0
  129. package/src/lib/state-manager.js +397 -340
  130. package/src/lib/team-orchestrator.js +322 -0
  131. package/src/lib/troubleshoot-grep.js +194 -0
  132. package/src/lib/troubleshoot-index.js +144 -0
  133. package/src/lib/validation-runner.js +283 -0
  134. package/src/lib/validators/contract-compliance-validator.js +273 -0
  135. package/src/lib/validators/design-system-validator.js +231 -0
  136. package/src/utils/file-copier.js +187 -139
  137. package/content/.claude/commands/morph-costs.md +0 -206
  138. package/content/.claude/commands/morph-setup.md +0 -100
  139. package/content/.claude/commands/morph-tasks.md +0 -319
  140. package/content/.claude/skills/infra/bicep-architect.md +0 -419
  141. package/content/.claude/skills/infra/container-specialist.md +0 -437
  142. package/content/.claude/skills/infra/devops-engineer.md +0 -405
  143. package/content/.claude/skills/integrations/asaas-financial.md +0 -333
  144. package/content/.claude/skills/integrations/azure-identity.md +0 -309
  145. package/content/.claude/skills/integrations/clerk-auth.md +0 -290
  146. package/content/.claude/skills/specialists/ai-system-architect.md +0 -604
  147. package/content/.claude/skills/specialists/cost-guardian.md +0 -110
  148. package/content/.claude/skills/specialists/ef-modeler.md +0 -211
  149. package/content/.claude/skills/specialists/hangfire-orchestrator.md +0 -255
  150. package/content/.claude/skills/specialists/ms-agent-expert.md +0 -263
  151. package/content/.claude/skills/specialists/standards-architect.md +0 -78
  152. package/content/.claude/skills/specialists/ui-ux-designer.md +0 -1100
  153. package/content/.claude/skills/stacks/dotnet-blazor.md +0 -606
  154. package/content/.claude/skills/stacks/dotnet-nextjs.md +0 -402
  155. package/content/.claude/skills/stacks/shopify.md +0 -445
  156. package/content/.morph/config/azure-pricing.json +0 -70
  157. package/content/.morph/config/azure-pricing.schema.json +0 -50
  158. package/content/.morph/hooks/pre-commit-costs.sh +0 -91
  159. package/docs/api/cost-calculator.js.html +0 -513
  160. package/docs/api/design-system-generator.js.html +0 -382
  161. package/docs/api/global.html +0 -5263
  162. package/docs/api/index.html +0 -96
  163. package/docs/api/state-manager.js.html +0 -423
  164. package/src/commands/cost.js +0 -181
  165. package/src/commands/update-pricing.js +0 -206
  166. package/src/lib/cost-calculator.js +0 -429
@@ -1,276 +1,362 @@
1
- # UI Components - {{FEATURE_NAME_TITLE}}
2
-
3
- > Especificação dos componentes Fluent UI / MudBlazor utilizados nesta feature.
4
- > Mapeia cada elemento visual para um componente concreto da biblioteca escolhida.
5
-
6
- ---
7
-
8
- ## Decisão de Biblioteca UI
9
-
10
- ### Biblioteca Escolhida: {Fluent UI Blazor | MudBlazor | Híbrida}
11
-
12
- **Justificativa:**
13
- {Por que esta biblioteca foi escolhida para ESTA feature específica?}
14
-
15
- **Critérios de decisão:**
16
- - ✅ **{Critério 1}**: {Explicação}
17
- - ✅ **{Critério 2}**: {Explicação}
18
- - ⚠️ **{Trade-off}**: {O que foi sacrificado e por quê}
19
-
20
- **Referência ADR**: Ver `decisions.md` - ADR-{número}: {Título da decisão}
21
-
22
- ---
23
-
24
- ## Componentes Mapeados
25
-
26
- ### {Nome do Elemento Visual}
27
-
28
- **Biblioteca**: {Fluent UI | MudBlazor}
29
- **Componente**: `{ComponentName}`
30
-
31
- #### Props Principais
32
- ```csharp
33
- <{ComponentName}
34
- Prop1="{valor ou @binding}"
35
- Prop2="{valor ou @binding}"
36
- Prop3="{valor ou @binding}"
37
- OnClick="@{Handler}" />
38
- ```
39
-
40
- #### Propriedades Detalhadas
41
- | Prop | Tipo | Valor | Descrição |
42
- |------|------|-------|-----------|
43
- | `Prop1` | `string` | `"{valor}"` | {Para que serve} |
44
- | `Prop2` | `bool` | `true` | {Para que serve} |
45
- | `Prop3` | `EventCallback` | `@Handler` | {Quando dispara} |
46
-
47
- #### Estados
48
-
49
- **1. Default (Estado Inicial)**
50
- ```razor
51
- <{ComponentName}
52
- Appearance="Appearance.Neutral"
53
- Disabled="false">
54
- {Conteúdo padrão}
55
- </{ComponentName}>
56
- ```
57
-
58
- **2. Loading**
59
- ```razor
60
- @if (_isLoading)
61
- {
62
- <FluentSkeleton Width="100%" Height="40px" />
63
- <!-- OU -->
64
- <FluentProgress />
65
- }
66
- else
67
- {
68
- <{ComponentName} ... />
69
- }
70
- ```
71
-
72
- **3. Error**
73
- ```razor
74
- @if (!string.IsNullOrEmpty(_error))
75
- {
76
- <FluentMessageBar Intent="MessageIntent.Error">
77
- @_error
78
- </FluentMessageBar>
79
- }
80
- <{ComponentName} ... />
81
- ```
82
-
83
- **4. Empty (Sem Dados)**
84
- ```razor
85
- @if (!_items.Any())
86
- {
87
- <FluentStack Orientation="Orientation.Vertical" HorizontalAlignment="HorizontalAlignment.Center">
88
- <FluentLabel>Nenhum item encontrado</FluentLabel>
89
- <FluentButton Appearance="Appearance.Accent" OnClick="@Create">
90
- Criar Novo
91
- </FluentButton>
92
- </FluentStack>
93
- }
94
- ```
95
-
96
- **5. Success (Feedback Positivo)**
97
- ```razor
98
- <FluentToast Intent="ToastIntent.Success" Timeout="3000">
99
- Operação realizada com sucesso!
100
- </FluentToast>
101
- ```
102
-
103
- #### Eventos
104
-
105
- | Evento | Handler | Ação |
106
- |--------|---------|------|
107
- | `OnClick` | `HandleClick` | {O que acontece ao clicar} |
108
- | `OnChange` | `HandleChange` | {O que acontece ao mudar valor} |
109
- | `OnSubmit` | `HandleSubmit` | {O que acontece ao submeter} |
110
-
111
- #### Exemplo de Código Completo
112
-
113
- ```razor
114
- <!-- {Nome do Componente}.razor -->
115
- <{ComponentName}
116
- Items="@_items"
117
- Loading="@_isLoading"
118
- OnClick="@HandleClick">
119
-
120
- @if (_isLoading)
121
- {
122
- <FluentProgress />
123
- }
124
- else
125
- {
126
- @foreach (var item in _items)
127
- {
128
- <{ChildComponent} Data="@item" />
129
- }
130
- }
131
- </{ComponentName}>
132
-
133
- @code {
134
- [Parameter] public List<ItemType> Items { get; set; } = new();
135
-
136
- private bool _isLoading;
137
- private string? _error;
138
-
139
- protected override async Task OnInitializedAsync()
140
- {
141
- await LoadDataAsync();
142
- }
143
-
144
- private async Task LoadDataAsync()
145
- {
146
- _isLoading = true;
147
- try
148
- {
149
- _items = await _service.GetItemsAsync();
150
- }
151
- catch (Exception ex)
152
- {
153
- _error = ex.Message;
154
- }
155
- finally
156
- {
157
- _isLoading = false;
158
- }
159
- }
160
-
161
- private async Task HandleClick(ItemType item)
162
- {
163
- // Ação ao clicar
164
- }
165
- }
166
- ```
167
-
168
- #### Acessibilidade
169
-
170
- **ARIA Attributes:**
171
- - `role="{role}"`: {Propósito}
172
- - `aria-label="{label}"`: {Descrição para screen readers}
173
- - `aria-describedby="{id}"`: {Descrição adicional}
174
-
175
- **Keyboard Navigation:**
176
- - `Tab`: {Foca no elemento}
177
- - `Enter/Space`: {Ativa o elemento}
178
- - `Escape`: {Cancela/fecha}
179
- - `Arrow Keys`: {Navega entre opções}
180
-
181
- **Focus Management:**
182
- - **Foco inicial**: {Onde o foco deve ir quando o componente aparece}
183
- - **Focus trap**: {Se aplicável, como manter o foco dentro do componente (modals)}
184
-
185
- ---
186
-
187
- ## {Próximo Componente}
188
-
189
- {Repita a estrutura acima para cada componente}
190
-
191
- ---
192
-
193
- ## Componentes Customizados
194
-
195
- ### {Nome do Componente Custom}
196
-
197
- Se você precisar criar um componente que NÃO existe em Fluent UI ou MudBlazor:
198
-
199
- **Composição:**
200
- ```razor
201
- <!-- Components/{ComponentName}.razor -->
202
- <div class="custom-component">
203
- <FluentCard>
204
- <FluentStack Orientation="Orientation.Vertical">
205
- <!-- Composição de componentes existentes -->
206
- </FluentStack>
207
- </FluentCard>
208
- </div>
209
-
210
- @code {
211
- // Lógica do componente
212
- }
213
- ```
214
-
215
- **Quando usar:**
216
- - {Situação 1 que justifica componente custom}
217
- - {Situação 2}
218
-
219
- ---
220
-
221
- ## Packages Necessários
222
-
223
- ### Fluent UI Blazor
224
- ```xml
225
- <PackageReference Include="Microsoft.FluentUI.AspNetCore.Components" Version="4.0.0" />
226
- ```
227
-
228
- ```csharp
229
- // Program.cs
230
- builder.Services.AddFluentUIComponents();
231
- ```
232
-
233
- ```razor
234
- // _Imports.razor
235
- @using Microsoft.FluentUI.AspNetCore.Components
236
- ```
237
-
238
- ### MudBlazor (se híbrido)
239
- ```xml
240
- <PackageReference Include="MudBlazor" Version="6.11.0" />
241
- ```
242
-
243
- ```csharp
244
- // Program.cs
245
- builder.Services.AddMudServices();
246
- ```
247
-
248
- ```razor
249
- // _Imports.razor
250
- @using MudBlazor
251
- ```
252
-
253
- ---
254
-
255
- ## Mapa de Componentes
256
-
257
- Resumo visual de quais componentes são usados onde:
258
-
259
- | Tela/Feature | Componente | Biblioteca | Complexidade |
260
- |--------------|------------|------------|--------------|
261
- | {Tela 1} | FluentDataGrid | Fluent UI | Média |
262
- | {Tela 1} | FluentCard | Fluent UI | Baixa |
263
- | {Tela 2} | MudChart | MudBlazor | Alta |
264
- | {Tela 2} | FluentDialog | Fluent UI | Média |
265
-
266
- ---
267
-
268
- ## Referências
269
-
270
- - [Fluent UI Components](https://www.fluentui-blazor.net/Components)
271
- - [MudBlazor Components](https://mudblazor.com/components/list)
272
- - [Guia Fluent UI Setup](../.morph/standards/fluent-ui-setup.md)
273
-
274
- ---
275
-
276
- *Template MORPH-SPEC v2.1.0 by Polymorphism Tech*
1
+ # UI Components - {{FEATURE_NAME_TITLE}}
2
+
3
+ > Especificação dos componentes Fluent UI / MudBlazor utilizados nesta feature.
4
+ > Mapeia cada elemento visual para um componente concreto da biblioteca escolhida.
5
+
6
+ ---
7
+
8
+ ## Decisão de Biblioteca UI
9
+
10
+ ### Biblioteca Escolhida: {Fluent UI Blazor | MudBlazor | Híbrida}
11
+
12
+ **Justificativa:**
13
+ {Por que esta biblioteca foi escolhida para ESTA feature específica?}
14
+
15
+ **Critérios de decisão:**
16
+ - ✅ **{Critério 1}**: {Explicação}
17
+ - ✅ **{Critério 2}**: {Explicação}
18
+ - ⚠️ **{Trade-off}**: {O que foi sacrificado e por quê}
19
+
20
+ **Referência ADR**: Ver `decisions.md` - ADR-{número}: {Título da decisão}
21
+
22
+ ---
23
+
24
+ ## Componentes Mapeados
25
+
26
+ ### {Nome do Elemento Visual}
27
+
28
+ **Biblioteca**: {Fluent UI | MudBlazor}
29
+ **Componente**: `{ComponentName}`
30
+
31
+ #### Props Principais
32
+ ```csharp
33
+ <{ComponentName}
34
+ Prop1="{valor ou @binding}"
35
+ Prop2="{valor ou @binding}"
36
+ Prop3="{valor ou @binding}"
37
+ OnClick="@{Handler}" />
38
+ ```
39
+
40
+ #### Propriedades Detalhadas
41
+ | Prop | Tipo | Valor | Descrição |
42
+ |------|------|-------|-----------|
43
+ | `Prop1` | `string` | `"{valor}"` | {Para que serve} |
44
+ | `Prop2` | `bool` | `true` | {Para que serve} |
45
+ | `Prop3` | `EventCallback` | `@Handler` | {Quando dispara} |
46
+
47
+ #### Estados
48
+
49
+ **1. Default (Estado Inicial)**
50
+ ```razor
51
+ <{ComponentName}
52
+ Appearance="Appearance.Neutral"
53
+ Disabled="false">
54
+ {Conteúdo padrão}
55
+ </{ComponentName}>
56
+ ```
57
+
58
+ **2. Loading**
59
+ ```razor
60
+ @if (_isLoading)
61
+ {
62
+ <FluentSkeleton Width="100%" Height="40px" />
63
+ <!-- OU -->
64
+ <FluentProgress />
65
+ }
66
+ else
67
+ {
68
+ <{ComponentName} ... />
69
+ }
70
+ ```
71
+
72
+ **3. Error**
73
+ ```razor
74
+ @if (!string.IsNullOrEmpty(_error))
75
+ {
76
+ <FluentMessageBar Intent="MessageIntent.Error">
77
+ @_error
78
+ </FluentMessageBar>
79
+ }
80
+ <{ComponentName} ... />
81
+ ```
82
+
83
+ **4. Empty (Sem Dados)**
84
+ ```razor
85
+ @if (!_items.Any())
86
+ {
87
+ <FluentStack Orientation="Orientation.Vertical" HorizontalAlignment="HorizontalAlignment.Center">
88
+ <FluentLabel>Nenhum item encontrado</FluentLabel>
89
+ <FluentButton Appearance="Appearance.Accent" OnClick="@Create">
90
+ Criar Novo
91
+ </FluentButton>
92
+ </FluentStack>
93
+ }
94
+ ```
95
+
96
+ **5. Success (Feedback Positivo)**
97
+ ```razor
98
+ <FluentToast Intent="ToastIntent.Success" Timeout="3000">
99
+ Operação realizada com sucesso!
100
+ </FluentToast>
101
+ ```
102
+
103
+ #### Eventos
104
+
105
+ | Evento | Handler | Ação |
106
+ |--------|---------|------|
107
+ | `OnClick` | `HandleClick` | {O que acontece ao clicar} |
108
+ | `OnChange` | `HandleChange` | {O que acontece ao mudar valor} |
109
+ | `OnSubmit` | `HandleSubmit` | {O que acontece ao submeter} |
110
+
111
+ #### Exemplo de Código Completo
112
+
113
+ ```razor
114
+ <!-- {Nome do Componente}.razor -->
115
+ <{ComponentName}
116
+ Items="@_items"
117
+ Loading="@_isLoading"
118
+ OnClick="@HandleClick">
119
+
120
+ @if (_isLoading)
121
+ {
122
+ <FluentProgress />
123
+ }
124
+ else
125
+ {
126
+ @foreach (var item in _items)
127
+ {
128
+ <{ChildComponent} Data="@item" />
129
+ }
130
+ }
131
+ </{ComponentName}>
132
+
133
+ @code {
134
+ [Parameter] public List<ItemType> Items { get; set; } = new();
135
+
136
+ private bool _isLoading;
137
+ private string? _error;
138
+
139
+ protected override async Task OnInitializedAsync()
140
+ {
141
+ await LoadDataAsync();
142
+ }
143
+
144
+ private async Task LoadDataAsync()
145
+ {
146
+ _isLoading = true;
147
+ try
148
+ {
149
+ _items = await _service.GetItemsAsync();
150
+ }
151
+ catch (Exception ex)
152
+ {
153
+ _error = ex.Message;
154
+ }
155
+ finally
156
+ {
157
+ _isLoading = false;
158
+ }
159
+ }
160
+
161
+ private async Task HandleClick(ItemType item)
162
+ {
163
+ // Ação ao clicar
164
+ }
165
+ }
166
+ ```
167
+
168
+ #### Acessibilidade
169
+
170
+ **ARIA Attributes:**
171
+ - `role="{role}"`: {Propósito}
172
+ - `aria-label="{label}"`: {Descrição para screen readers}
173
+ - `aria-describedby="{id}"`: {Descrição adicional}
174
+
175
+ **Keyboard Navigation:**
176
+ - `Tab`: {Foca no elemento}
177
+ - `Enter/Space`: {Ativa o elemento}
178
+ - `Escape`: {Cancela/fecha}
179
+ - `Arrow Keys`: {Navega entre opções}
180
+
181
+ **Focus Management:**
182
+ - **Foco inicial**: {Onde o foco deve ir quando o componente aparece}
183
+ - **Focus trap**: {Se aplicável, como manter o foco dentro do componente (modals)}
184
+
185
+ ---
186
+
187
+ ## {Próximo Componente}
188
+
189
+ {Repita a estrutura acima para cada componente}
190
+
191
+ ---
192
+
193
+ ## Componentes Customizados
194
+
195
+ ### {Nome do Componente Custom}
196
+
197
+ Se você precisar criar um componente que NÃO existe em Fluent UI ou MudBlazor:
198
+
199
+ **Composição:**
200
+ ```razor
201
+ <!-- Components/{ComponentName}.razor -->
202
+ <div class="custom-component">
203
+ <FluentCard>
204
+ <FluentStack Orientation="Orientation.Vertical">
205
+ <!-- Composição de componentes existentes -->
206
+ </FluentStack>
207
+ </FluentCard>
208
+ </div>
209
+
210
+ @code {
211
+ // Lógica do componente
212
+ }
213
+ ```
214
+
215
+ **Quando usar:**
216
+ - {Situação 1 que justifica componente custom}
217
+ - {Situação 2}
218
+
219
+ ---
220
+
221
+ ## Packages Necessários
222
+
223
+ ### Fluent UI Blazor
224
+ ```xml
225
+ <PackageReference Include="Microsoft.FluentUI.AspNetCore.Components" Version="4.0.0" />
226
+ ```
227
+
228
+ ```csharp
229
+ // Program.cs
230
+ builder.Services.AddFluentUIComponents();
231
+ ```
232
+
233
+ ```razor
234
+ // _Imports.razor
235
+ @using Microsoft.FluentUI.AspNetCore.Components
236
+ ```
237
+
238
+ ### MudBlazor (se híbrido)
239
+ ```xml
240
+ <PackageReference Include="MudBlazor" Version="6.11.0" />
241
+ ```
242
+
243
+ ```csharp
244
+ // Program.cs
245
+ builder.Services.AddMudServices();
246
+ ```
247
+
248
+ ```razor
249
+ // _Imports.razor
250
+ @using MudBlazor
251
+ ```
252
+
253
+ ---
254
+
255
+ ## Mapa de Componentes
256
+
257
+ Resumo visual de quais componentes são usados onde:
258
+
259
+ | Tela/Feature | Componente | Biblioteca | Complexidade |
260
+ |--------------|------------|------------|--------------|
261
+ | {Tela 1} | FluentDataGrid | Fluent UI | Média |
262
+ | {Tela 1} | FluentCard | Fluent UI | Baixa |
263
+ | {Tela 2} | MudChart | MudBlazor | Alta |
264
+ | {Tela 2} | FluentDialog | Fluent UI | Média |
265
+
266
+ ---
267
+
268
+ ---
269
+
270
+ ## Checklist de Componentes CSS
271
+
272
+ > **IMPORTANTE:** Liste TODOS os componentes CSS necessarios ANTES de implementar.
273
+ > Use `morph-spec validate-css` para validar que todas as classes existem.
274
+
275
+ ### Componentes CSS Novos (a criar)
276
+
277
+ Classes CSS customizadas que precisam ser criadas no `design-system.css`:
278
+
279
+ - [ ] `.{page-prefix}-{component}` - {Descricao do componente}
280
+ - [ ] `.{page-prefix}-{element}` - {Descricao do elemento}
281
+
282
+ **Exemplo:**
283
+ ```markdown
284
+ - [ ] `.home-hero` - Container do hero section da home
285
+ - [ ] `.home-features` - Grid de features
286
+ - [ ] `.checkout-form` - Container do formulario de checkout
287
+ - [ ] `.checkout-summary` - Card de resumo do pedido
288
+ - [ ] `.modal-overlay` - Overlay escuro para modais customizados
289
+ - [ ] `.modal-container` - Container do modal com animacao
290
+ - [ ] `.card-premium` - Card com glow e borda especial
291
+ - [ ] `.button-shimmer` - Botao com efeito shimmer
292
+ ```
293
+
294
+ ### Componentes CSS Existentes (reutilizar)
295
+
296
+ Classes que ja existem no projeto (design-system.css ou bibliotecas):
297
+
298
+ - [x] `.{existing-class}` - {Onde esta definida}
299
+
300
+ **Exemplo:**
301
+ ```markdown
302
+ - [x] `.page-layout` - design-system.css (estrutura padrao)
303
+ - [x] `.tip-box` - design-system.css (caixa de dica)
304
+ - [x] `FluentCard` - Fluent UI Blazor (componente)
305
+ ```
306
+
307
+ ### Variaveis CSS Novas
308
+
309
+ Variaveis CSS customizadas necessarias:
310
+
311
+ - [ ] `--{project}-{variable-name}` - {Descricao e valor}
312
+
313
+ **Exemplo:**
314
+ ```markdown
315
+ - [ ] `--fishart-primary` - Cor primaria (#FF6B35)
316
+ - [ ] `--fishart-shadow-glow` - Sombra com glow (0 0 20px rgba(255, 107, 53, 0.3))
317
+ - [ ] `--fishart-gradient-hero` - Gradiente do hero (linear-gradient(...))
318
+ - [ ] `--fishart-transition-bounce` - Transicao com bounce (cubic-bezier(...))
319
+ ```
320
+
321
+ ### Animacoes CSS Novas
322
+
323
+ Keyframes e classes de animacao necessarias:
324
+
325
+ - [ ] `@keyframes {animation-name}` - {Descricao}
326
+ - [ ] `.animate-{name}` - Classe que aplica a animacao
327
+
328
+ **Exemplo:**
329
+ ```markdown
330
+ - [ ] `@keyframes slideInUp` - Entrada de baixo para cima
331
+ - [ ] `.animate-slideInUp` - Aplica slideInUp com 0.5s ease
332
+ - [ ] `@keyframes scaleIn` - Zoom in suave
333
+ - [ ] `.animate-scaleIn` - Aplica scaleIn com 0.3s ease
334
+ - [ ] `.stagger-1` a `.stagger-5` - Delays para animacoes em sequencia
335
+ ```
336
+
337
+ ### Validacao Pre-Implementacao
338
+
339
+ Antes de iniciar FASE 5 (IMPLEMENT), validar:
340
+
341
+ ```bash
342
+ # Criar todas as classes listadas acima no design-system.css
343
+
344
+ # Validar que nenhuma classe esta faltando
345
+ morph-spec validate-css src/MyApp.Web
346
+
347
+ # Output esperado: "All CSS classes are properly defined!"
348
+ ```
349
+
350
+ ---
351
+
352
+ ## Referências
353
+
354
+ - [Fluent UI Components](https://www.fluentui-blazor.net/Components)
355
+ - [MudBlazor Components](https://mudblazor.com/components/list)
356
+ - [Guia Fluent UI Blazor](../../framework/standards/fluent-ui-blazor.md)
357
+ - [CSS Naming Convention](../../framework/standards/css-naming.md)
358
+ - [CSS Animations](../../framework/standards/css-animations.md)
359
+
360
+ ---
361
+
362
+ *Template MORPH-SPEC v2.2.0 by Polymorphism Tech*