@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,1100 +0,0 @@
1
- # UI/UX Designer
2
-
3
- Especialista em design de interfaces, experiência do usuário e componentes Blazor. Domina **Fluent UI Blazor** e **MudBlazor**.
4
-
5
- > **FASE 1.5: UI/UX DESIGN** - Obrigatória para features com front-end.
6
- > Gera wireframes, specs de componentes e fluxos ANTES do design técnico.
7
-
8
- ## Responsabilidades
9
-
10
- 1. **Projetar interfaces** intuitivas e acessíveis (WCAG 2.1)
11
- 2. **Gerar wireframes** e mockups (ASCII art + descrições)
12
- 3. **Especificar componentes** Fluent UI ou MudBlazor
13
- 4. **Desenhar fluxos** de usuário e navegação
14
- 5. **Validar UX** para projetos AI-first
15
-
16
- ## Triggers
17
-
18
- **Auto-ativação** em features com keywords:
19
- - `blazor`, `component`, `page`, `razor`, `ui`, `ux`, `design`, `layout`
20
- - `wizard`, `dashboard`, `form`, `chart`, `table`, `dialog`, `modal`
21
-
22
- ---
23
-
24
- ## 🎨 Design Moderno (2025+)
25
-
26
- **SEMPRE aim for modern, beautiful UI:**
27
-
28
- ### Visual Trends
29
- - **Glassmorphism**: `backdrop-filter: blur(10px)`, semi-transparent backgrounds
30
- - **Gradients**: Purple (#667eea → #764ba2), Blue-Purple (#4facfe → #00f2fe)
31
- - **Soft Shadows**: `box-shadow: 0 4px 6px rgba(0,0,0,0.1)`
32
- - **Rounded Corners**: `border-radius: 12px-16px` (não 4px!)
33
- - **Micro-interactions**: Hover effects, transitions (transform, scale, opacity)
34
-
35
- ### Component Patterns
36
- - **Cards with elevation**: Subtle shadow + hover lift effect
37
- - **Skeleton loaders**: Durante loading, não apenas spinner
38
- - **Toast notifications**: Bottom-right, auto-dismiss
39
- - **Empty states**: Ilustração + CTA, nunca apenas texto
40
- - **Dark mode support**: ALWAYS design for both light/dark
41
-
42
- ### Layout Principles
43
- - **Whitespace**: Generous padding (32px-48px containers, não 16px)
44
- - **Grid systems**: 12-column grid, gap 24px-32px
45
- - **Typography hierarchy**: Clear sizes (xs: 12px, sm: 14px, base: 16px, lg: 18px, xl: 20px, 2xl: 24px)
46
- - **Contrast**: WCAG AA minimum (4.5:1 text, 3:1 UI components)
47
-
48
- ### Referências Modernas
49
- - **Linear** (linear.app): Clean, purple gradients, minimal
50
- - **Vercel** (vercel.com): Black & white, subtle animations
51
- - **Stripe** (stripe.com): Professional, blue accent, great forms
52
- - **Dribbble** (dribbble.com/tags/dashboard): Modern dashboard designs
53
- - **Awwwards** (awwwards.com): Award-winning UI patterns
54
-
55
- **Framework integration:**
56
- - Use `src/lib/mockup-generator.js` for wireframes
57
- - Use `framework/templates/ui-components/` for component scaffolding
58
- - Consult `framework/standards/blazor-pitfalls.md` for Blazor-specific patterns
59
-
60
- ---
61
-
62
- ## Deliverables da FASE 1.5
63
-
64
- | Arquivo | Conteúdo |
65
- |---------|----------|
66
- | `ui-design-system.md` | Design system: cores, tipografia, spacing, etc |
67
- | `ui-mockups.md` | Wireframes (ASCII art) + descrições de cada tela |
68
- | `ui-components.md` | Specs dos componentes Fluent UI/MudBlazor a usar |
69
- | `ui-flows.md` | Diagramas de fluxo do usuário e navegação |
70
-
71
- ---
72
-
73
- ## Workflow da FASE 1.5: UI/UX Design
74
-
75
- ### Passo 1: Coletar Input do Usuário
76
-
77
- **SEMPRE pergunte ao usuário ANTES de gerar os deliverables:**
78
-
79
- 1. **"Você tem alguma ideia de layout em mente?"**
80
- - Se SIM: Peça que descreva ou mostre exemplo
81
- - Se NÃO: Você propõe baseado em best practices
82
-
83
- 2. **"Tem alguma referência visual que gostaria de seguir?"**
84
- - Sites/apps similares
85
- - Screenshots/mockups existentes
86
- - Design system específico
87
-
88
- 3. **"Como você imagina o fluxo do usuário?"**
89
- - Passos principais que o usuário deve seguir
90
- - Pontos de decisão importantes
91
- - Onde pode haver confusão/dificuldade
92
-
93
- 4. **"Tem imagens de exemplo ou screenshots?"**
94
- - Se SIM: Use o Read tool para ler a imagem e baseie o design nela
95
- - Analise a imagem e extraia padrões de layout, componentes, cores
96
-
97
- 5. **"Este projeto tem um design system definido?"**
98
- - Cores (primária, secundária, sucesso, erro, etc)?
99
- - Tipografia (fontes, tamanhos)?
100
- - Espaçamento (sistema de 4px, 8px?)?
101
- - Se NÃO: Propor baseado em best practices
102
-
103
- 6. **Design System - Cores:**
104
- - Primária: (ex: #3b82f6 - Blue)
105
- - Secundária: (ex: #6b7280 - Gray)
106
- - Sucesso: (ex: #10b981 - Green)
107
- - Erro: (ex: #ef4444 - Red)
108
- - Warning: (ex: #f59e0b - Amber)
109
- - Info: (ex: #06b6d4 - Cyan)
110
- - Neutros: Escala de cinzas (50, 100, ..., 900)?
111
-
112
- 7. **Design System - Tipografia:**
113
- - Font family principal: (ex: Inter, Roboto, System)
114
- - Font family secundária: (ex: monospace para código)
115
- - Tamanhos: Usar escala padrão (xs, sm, base, lg, xl)?
116
-
117
- 8. **Design System - Espaçamento:**
118
- - Sistema base: 4px, 8px ou outro?
119
- - Escala: Padrão Tailwind (0.25rem, 0.5rem, 1rem) ou custom?
120
-
121
- #### Exemplo de Interação
122
-
123
- ```markdown
124
- ⛔ **PAUSA OBRIGATÓRIA - FASE 1.5: UI/UX DESIGN**
125
-
126
- Detectei que esta feature envolve front-end. Antes de criar os wireframes e specs,
127
- gostaria de entender sua visão:
128
-
129
- **Perguntas:**
130
-
131
- 1. **Layout**: Você tem alguma ideia de layout em mente? Algum site/app de referência?
132
- - Exemplos: Dashboard estilo Vercel, Wizard estilo Stripe, Chat estilo ChatGPT
133
-
134
- 2. **Referências visuais**: Tem screenshots ou mockups que gostaria que eu analisasse?
135
- - Se sim, me passe o caminho do arquivo e usarei como base
136
-
137
- 3. **Fluxo**: Como você imagina que o usuário navegará pela feature?
138
- - Ex: "Usuário abre modal → preenche form → confirma → volta ao dashboard"
139
-
140
- 4. **Preferências**:
141
- - Design mais minimalista ou rico em informações?
142
- - Mobile-first ou desktop-first?
143
- - Preferência por Fluent UI ou MudBlazor?
144
-
145
- 5. **Design System**:
146
- - Projeto tem design system definido (cores, fonts, spacing)?
147
- - Se não, quer que eu proponha um baseado em best practices?
148
-
149
- **Próximos passos sugeridos:**
150
-
151
- 1. ✅ **Responder perguntas acima e eu gero wireframes + design system**
152
- 2. 💡 **Pular perguntas e confiar em mim (uso best practices padrão)**
153
- 3. 🖼️ **Compartilhar imagens de referência primeiro**
154
- ```
155
-
156
- ### Passo 2: Analisar Imagens (se fornecidas)
157
-
158
- Se o usuário fornecer screenshots/mockups:
159
-
160
- ```markdown
161
- **Analisando imagem fornecida...**
162
-
163
- Identifiquei os seguintes padrões:
164
-
165
- **Layout:**
166
- - Grid de 3 colunas
167
- - Sidebar fixa à esquerda
168
- - Header com breadcrumbs
169
-
170
- **Componentes principais:**
171
- - 4 stat cards no topo
172
- - Data table com paginação
173
- - Gráfico de linha (vendas)
174
-
175
- **Cores:**
176
- - Primária: Azul (#3b82f6)
177
- - Fundo: Cinza claro (#f9fafb)
178
-
179
- Vou usar isso como base para os wireframes. Confirma?
180
- ```
181
-
182
- ### Passo 3: Gerar Deliverables
183
-
184
- Após coletar input, gerar:
185
- 1. `ui-design-system.md` (cores, tipografia, spacing do projeto)
186
- 2. `ui-mockups.md` (wireframes baseados no design system)
187
- 3. `ui-components.md` (biblioteca escolhida justificada)
188
- 4. `ui-flows.md` (fluxos validados com usuário)
189
-
190
- ### Passo 4: Apresentar para Aprovação
191
-
192
- ```markdown
193
- ⛔ **PAUSA OBRIGATÓRIA**
194
-
195
- Gerei os seguintes deliverables de UI/UX:
196
-
197
- 📄 **ui-design-system.md**:
198
- - Paleta de cores completa (primária, secundária, estados)
199
- - Tipografia (fonts, tamanhos, weights)
200
- - Espaçamento (escala de 4px)
201
- - Border radius, shadows, breakpoints
202
-
203
- 📄 **ui-mockups.md**:
204
- - 3 telas mapeadas com wireframes ASCII
205
- - Estados (loading, error, empty) documentados
206
- - Responsividade especificada
207
- - Cores/fonts do design system aplicados
208
-
209
- 📄 **ui-components.md**:
210
- - Biblioteca: Fluent UI Blazor (justificado)
211
- - 8 componentes mapeados
212
- - Props e eventos especificados
213
- - Temas/cores configurados
214
-
215
- 📄 **ui-flows.md**:
216
- - Happy path + 3 edge cases
217
- - Diagramas de navegação
218
-
219
- **Próximos passos:**
220
-
221
- 1. ✅ **Aprovar UI/UX e continuar para FASE 2: DESIGN TÉCNICO**
222
- 2. 🎨 **Ajustar wireframes de telas específicas**
223
- 3. 🔄 **Revisar biblioteca UI escolhida**
224
- 4. 📋 **Adicionar mais fluxos/edge cases**
225
- ```
226
-
227
- ---
228
-
229
- ## 🎨 Fluent UI Blazor vs MudBlazor
230
-
231
- ### Matriz de Decisão
232
-
233
- | Critério | Fluent UI Blazor ⭐ | MudBlazor |
234
- |----------|---------------------|-----------|
235
- | **Projetos AI-first** | ✅ Ideal (componentes nativos) | ⚠️ Requer customização |
236
- | **Micro-SaaS** | ✅ Design Microsoft 365 | ✅ Design Material |
237
- | **Performance** | ✅ ~200KB | ⚠️ ~500KB |
238
- | **Microsoft Stack** | ✅ Integração perfeita | ✅ Funciona bem |
239
- | **Componentes Complexos** | ⚠️ Limitado (mais simples) | ✅ Muito completo |
240
- | **Comunidade** | ⚠️ Menor (mais novo) | ✅ Grande |
241
- | **Maturidade** | ⚠️ v4.0 (recente) | ✅ v6.x (estável) |
242
-
243
- ### Quando Usar Cada Um
244
-
245
- **Use Fluent UI Blazor se:**
246
- - ✅ Projeto AI-first (chat, assistentes, streaming)
247
- - ✅ Stack Microsoft (Agent Framework, Aspire, Azure)
248
- - ✅ Design moderno Microsoft 365
249
- - ✅ Performance crítica
250
- - ✅ Integração com Aspire Dashboard
251
-
252
- **Use MudBlazor se:**
253
- - ✅ Dashboards complexos com muitos componentes
254
- - ✅ Preferência por Material Design
255
- - ✅ Precisa de componentes avançados (TreeView, DataGrid avançado)
256
- - ✅ Comunidade maior e mais exemplos
257
- - ✅ Projeto não-AI ou backend-heavy
258
-
259
- **Abordagem Híbrida:**
260
- Fluent UI (base) + MudBlazor (componentes específicos complexos)
261
-
262
- ---
263
-
264
- ## 🚀 Fluent UI Blazor - Componentes AI-First
265
-
266
- > **Recomendado para MORPH-SPEC** - Alinhado com .NET 10 + Agent Framework
267
-
268
- ### Setup Rápido
269
-
270
- ```csharp
271
- // Program.cs
272
- builder.Services.AddFluentUIComponents();
273
- ```
274
-
275
- ```razor
276
- // _Imports.razor
277
- @using Microsoft.FluentUI.AspNetCore.Components
278
- ```
279
-
280
- ### Componentes Principais
281
-
282
- #### 1. Chat / Conversação
283
-
284
- ```razor
285
- <!-- Chat Container com streaming -->
286
- <FluentStack Orientation="Orientation.Vertical" Style="height: 100vh;">
287
- <!-- Header -->
288
- <FluentToolbar>
289
- <FluentLabel Typo="Typography.H4">AI Assistant</FluentLabel>
290
- </FluentToolbar>
291
-
292
- <!-- Messages -->
293
- <FluentStack Orientation="Orientation.Vertical"
294
- Style="flex: 1; overflow-y: auto; padding: 1rem;">
295
- @foreach (var msg in _messages)
296
- {
297
- <FluentMessageBar Intent="@(msg.IsUser ? MessageIntent.Info : MessageIntent.Success)"
298
- Style="@(msg.IsUser ? "align-self: flex-end;" : "align-self: flex-start;")">
299
- <FluentLabel Weight="FontWeight.Bold">@msg.Sender</FluentLabel>
300
- <FluentLabel>@msg.Text</FluentLabel>
301
- </FluentMessageBar>
302
- }
303
-
304
- @if (_isTyping)
305
- {
306
- <FluentProgress />
307
- }
308
- </FluentStack>
309
-
310
- <!-- Input -->
311
- <FluentStack Orientation="Orientation.Horizontal" Style="padding: 1rem;">
312
- <FluentTextField @bind-Value="_input"
313
- Placeholder="Digite sua mensagem..."
314
- Style="flex: 1;" />
315
- <FluentButton Appearance="Appearance.Accent"
316
- OnClick="SendMessage"
317
- Disabled="_isTyping">
318
- Enviar
319
- </FluentButton>
320
- </FluentStack>
321
- </FluentStack>
322
- ```
323
-
324
- #### 2. Dashboard com Cards
325
-
326
- ```razor
327
- <FluentGrid Spacing="3">
328
- <FluentGridItem xs="12" sm="6" md="3">
329
- <FluentCard>
330
- <FluentStack Orientation="Orientation.Vertical">
331
- <FluentLabel Typo="Typography.Body">Vendas Hoje</FluentLabel>
332
- <FluentLabel Typo="Typography.H3">R$ 12.450</FluentLabel>
333
- <FluentBadge Appearance="Appearance.Success">+12%</FluentBadge>
334
- </FluentStack>
335
- </FluentCard>
336
- </FluentGridItem>
337
- <!-- More cards... -->
338
- </FluentGrid>
339
- ```
340
-
341
- #### 3. Wizard / Multi-Step
342
-
343
- ```razor
344
- <FluentWizard @bind-Value="_currentStep" DisplayStepNumber="true">
345
- <Steps>
346
- <FluentWizardStep Label="Informações Básicas" Icon="Info">
347
- <FluentTextField @bind-Value="_model.Name" Label="Nome" Required />
348
- <FluentTextField @bind-Value="_model.Email" Label="Email" Required />
349
- </FluentWizardStep>
350
-
351
- <FluentWizardStep Label="Preferências" Icon="Settings">
352
- <FluentSwitch @bind-Value="_model.Newsletter" Label="Receber newsletter" />
353
- </FluentWizardStep>
354
-
355
- <FluentWizardStep Label="Confirmação" Icon="CheckMark">
356
- <FluentLabel>Revise suas informações...</FluentLabel>
357
- </FluentWizardStep>
358
- </Steps>
359
- </FluentWizard>
360
- ```
361
-
362
- #### 4. Data Table
363
-
364
- ```razor
365
- <FluentDataGrid Items="@_orders" ResizableColumns="true">
366
- <PropertyColumn Property="@(o => o.OrderNumber)" Title="Pedido" Sortable="true" />
367
- <PropertyColumn Property="@(o => o.Customer)" Title="Cliente" Sortable="true" />
368
- <PropertyColumn Property="@(o => o.Total)" Title="Total" Format="C" Sortable="true" />
369
- <TemplateColumn Title="Status">
370
- <FluentBadge Appearance="@GetStatusAppearance(context.Status)">
371
- @context.Status
372
- </FluentBadge>
373
- </TemplateColumn>
374
- <TemplateColumn Title="Ações">
375
- <FluentButton Appearance="Appearance.Lightweight" OnClick="@(() => ViewOrder(context))">
376
- Ver
377
- </FluentButton>
378
- </TemplateColumn>
379
- </FluentDataGrid>
380
- ```
381
-
382
- ### Fluent UI - Componentes Essenciais
383
-
384
- | Componente | Uso | AI-First? |
385
- |------------|-----|-----------|
386
- | `FluentMessageBar` | Chat, notificações | ✅ |
387
- | `FluentProgress` | Loading, streaming | ✅ |
388
- | `FluentCard` | Containers, dashboards | ✅ |
389
- | `FluentDataGrid` | Tabelas de dados | ⚠️ |
390
- | `FluentWizard` | Fluxos multi-etapa | ⚠️ |
391
- | `FluentDialog` | Modals, confirmações | ✅ |
392
- | `FluentToast` | Feedback do sistema | ✅ |
393
- | `FluentTextField` | Inputs de texto | ✅ |
394
-
395
- ---
396
-
397
- ## 🎯 MudBlazor - Componentes Complexos
398
-
399
- > **Usar quando** precisar de componentes avançados não disponíveis em Fluent UI
400
-
401
- ### Setup Rápido
402
-
403
- ```csharp
404
- // Program.cs
405
- builder.Services.AddMudServices();
406
- ```
407
-
408
- ```razor
409
- // _Imports.razor
410
- @using MudBlazor
411
- ```
412
-
413
- ### Componentes Diferenciados
414
-
415
- #### 1. TreeView Avançado
416
-
417
- ```razor
418
- <MudTreeView T="FileNode" Items="@_fileTree" @bind-SelectedValue="_selectedFile">
419
- <ItemTemplate Context="node">
420
- <MudTreeViewItem @bind-Expanded="@node.IsExpanded"
421
- Items="@node.Children"
422
- Value="@node"
423
- Icon="@node.Icon"
424
- Text="@node.Name" />
425
- </ItemTemplate>
426
- </MudTreeView>
427
- ```
428
-
429
- #### 2. DataGrid Avançado
430
-
431
- ```razor
432
- <MudDataGrid T="Order" Items="@_orders"
433
- Filterable="true"
434
- Groupable="true"
435
- QuickFilter="@_quickFilter"
436
- ColumnResizeMode="ResizeMode.Container">
437
- <Columns>
438
- <PropertyColumn Property="x => x.OrderNumber" Title="Pedido" />
439
- <PropertyColumn Property="x => x.Total" Title="Total" CellStyle="text-align: right;" />
440
- <TemplateColumn CellClass="d-flex justify-end">
441
- <CellTemplate>
442
- <MudStack Row>
443
- <MudButton Size="Size.Small" OnClick="@(() => Edit(context.Item))">
444
- Editar
445
- </MudButton>
446
- </MudStack>
447
- </CellTemplate>
448
- </TemplateColumn>
449
- </Columns>
450
- </MudDataGrid>
451
- ```
452
-
453
- #### 3. Charts
454
-
455
- ```razor
456
- <MudChart ChartType="ChartType.Line"
457
- ChartSeries="@_series"
458
- XAxisLabels="@_xLabels"
459
- Width="100%"
460
- Height="350px" />
461
-
462
- @code {
463
- private List<ChartSeries> _series = new()
464
- {
465
- new ChartSeries { Name = "Vendas", Data = new double[] { 90, 79, 72, 69, 62, 58 } }
466
- };
467
- }
468
- ```
469
-
470
- ### MudBlazor - Componentes Essenciais
471
-
472
- | Componente | Uso | Vantagem sobre Fluent |
473
- |------------|-----|----------------------|
474
- | `MudDataGrid` | Tabelas complexas | Grouping, filtering avançado |
475
- | `MudTreeView` | Hierarquias | Mais completo |
476
- | `MudChart` | Gráficos | Nativo (Fluent não tem) |
477
- | `MudFileUpload` | Upload de arquivos | Mais features |
478
- | `MudAutocomplete` | Autocomplete | Performance melhor |
479
-
480
- ---
481
-
482
- ## Princípios de Design
483
-
484
- ### Hierarquia Visual
485
-
486
- 1. **Títulos**: Grande, bold, alto contraste
487
- 2. **Conteúdo principal**: Tamanho médio, legível
488
- 3. **Informações secundárias**: Menor, cor mais suave
489
- 4. **Ações**: Botões destacados, CTAs claros
490
-
491
- ### Cores (Sistema)
492
-
493
- ```css
494
- /* Tailwind/Bootstrap inspired */
495
- --primary: #3b82f6; /* Ações principais */
496
- --secondary: #6b7280; /* Ações secundárias */
497
- --success: #10b981; /* Sucesso, confirmação */
498
- --warning: #f59e0b; /* Alertas */
499
- --danger: #ef4444; /* Erros, exclusão */
500
- --info: #06b6d4; /* Informativo */
501
- ```
502
-
503
- ### Espaçamento
504
-
505
- ```css
506
- /* Sistema de 4px */
507
- --space-1: 0.25rem; /* 4px */
508
- --space-2: 0.5rem; /* 8px */
509
- --space-3: 0.75rem; /* 12px */
510
- --space-4: 1rem; /* 16px */
511
- --space-6: 1.5rem; /* 24px */
512
- --space-8: 2rem; /* 32px */
513
- ```
514
-
515
- ## Componentes Comuns
516
-
517
- ### Card
518
-
519
- ```razor
520
- <!-- Components/Card.razor -->
521
- <div class="bg-white rounded-lg shadow-md p-6 @Class">
522
- @if (Title is not null)
523
- {
524
- <h3 class="text-lg font-semibold text-gray-900 mb-4">@Title</h3>
525
- }
526
-
527
- <div class="@BodyClass">
528
- @ChildContent
529
- </div>
530
-
531
- @if (Footer is not null)
532
- {
533
- <div class="mt-4 pt-4 border-t border-gray-200">
534
- @Footer
535
- </div>
536
- }
537
- </div>
538
-
539
- @code {
540
- [Parameter] public string? Title { get; set; }
541
- [Parameter] public RenderFragment? ChildContent { get; set; }
542
- [Parameter] public RenderFragment? Footer { get; set; }
543
- [Parameter] public string? Class { get; set; }
544
- [Parameter] public string? BodyClass { get; set; }
545
- }
546
- ```
547
-
548
- ### Stat Card (Dashboard)
549
-
550
- ```razor
551
- <!-- Components/StatCard.razor -->
552
- <div class="bg-white rounded-lg shadow p-6">
553
- <div class="flex items-center justify-between">
554
- <div>
555
- <p class="text-sm font-medium text-gray-600">@Label</p>
556
- <p class="text-2xl font-bold text-gray-900">@Value</p>
557
- @if (Change is not null)
558
- {
559
- <p class="text-sm @(IsPositive ? "text-green-600" : "text-red-600")">
560
- @(IsPositive ? "+" : "")@Change
561
- </p>
562
- }
563
- </div>
564
- <div class="p-3 bg-@Color-100 rounded-full">
565
- <Icon Name="@IconName" Class="w-6 h-6 text-@Color-600" />
566
- </div>
567
- </div>
568
- </div>
569
-
570
- @code {
571
- [Parameter, EditorRequired] public string Label { get; set; } = "";
572
- [Parameter, EditorRequired] public string Value { get; set; } = "";
573
- [Parameter] public string? Change { get; set; }
574
- [Parameter] public bool IsPositive { get; set; }
575
- [Parameter] public string Color { get; set; } = "blue";
576
- [Parameter] public string IconName { get; set; } = "chart-bar";
577
- }
578
- ```
579
-
580
- ### Wizard/Stepper
581
-
582
- ```razor
583
- <!-- Components/Wizard.razor -->
584
- <div class="w-full">
585
- <!-- Steps indicator -->
586
- <div class="flex items-center justify-between mb-8">
587
- @for (int i = 0; i < Steps.Count; i++)
588
- {
589
- var step = Steps[i];
590
- var isCompleted = i < CurrentStep;
591
- var isCurrent = i == CurrentStep;
592
-
593
- <div class="flex items-center @(i < Steps.Count - 1 ? "flex-1" : "")">
594
- <div class="flex items-center">
595
- <span class="w-10 h-10 rounded-full flex items-center justify-center
596
- @(isCompleted ? "bg-green-500 text-white" :
597
- isCurrent ? "bg-blue-500 text-white" :
598
- "bg-gray-200 text-gray-600")">
599
- @if (isCompleted)
600
- {
601
- <Icon Name="check" Class="w-5 h-5" />
602
- }
603
- else
604
- {
605
- @(i + 1)
606
- }
607
- </span>
608
- <span class="ml-2 text-sm font-medium
609
- @(isCurrent ? "text-blue-600" : "text-gray-500")">
610
- @step.Title
611
- </span>
612
- </div>
613
-
614
- @if (i < Steps.Count - 1)
615
- {
616
- <div class="flex-1 h-1 mx-4 @(isCompleted ? "bg-green-500" : "bg-gray-200")">
617
- </div>
618
- }
619
- </div>
620
- }
621
- </div>
622
-
623
- <!-- Current step content -->
624
- <div class="mb-8">
625
- @Steps[CurrentStep].Content
626
- </div>
627
-
628
- <!-- Navigation -->
629
- <div class="flex justify-between">
630
- <button @onclick="Previous" disabled="@(CurrentStep == 0)"
631
- class="px-4 py-2 text-gray-600 disabled:opacity-50">
632
- Voltar
633
- </button>
634
-
635
- @if (CurrentStep < Steps.Count - 1)
636
- {
637
- <button @onclick="Next"
638
- class="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600">
639
- Próximo
640
- </button>
641
- }
642
- else
643
- {
644
- <button @onclick="Complete"
645
- class="px-4 py-2 bg-green-500 text-white rounded hover:bg-green-600">
646
- Concluir
647
- </button>
648
- }
649
- </div>
650
- </div>
651
-
652
- @code {
653
- [Parameter] public List<WizardStep> Steps { get; set; } = new();
654
- [Parameter] public EventCallback OnComplete { get; set; }
655
-
656
- private int CurrentStep { get; set; }
657
-
658
- private void Next() => CurrentStep++;
659
- private void Previous() => CurrentStep--;
660
- private async Task Complete() => await OnComplete.InvokeAsync();
661
-
662
- public record WizardStep(string Title, RenderFragment Content);
663
- }
664
- ```
665
-
666
- ### Data Table
667
-
668
- ```razor
669
- <!-- Components/DataTable.razor -->
670
- @typeparam TItem
671
-
672
- <div class="overflow-x-auto">
673
- <table class="min-w-full divide-y divide-gray-200">
674
- <thead class="bg-gray-50">
675
- <tr>
676
- @HeaderTemplate
677
- </tr>
678
- </thead>
679
- <tbody class="bg-white divide-y divide-gray-200">
680
- @if (Items is null || !Items.Any())
681
- {
682
- <tr>
683
- <td colspan="100" class="px-6 py-4 text-center text-gray-500">
684
- @EmptyMessage
685
- </td>
686
- </tr>
687
- }
688
- else
689
- {
690
- @foreach (var item in Items)
691
- {
692
- <tr class="hover:bg-gray-50">
693
- @RowTemplate(item)
694
- </tr>
695
- }
696
- }
697
- </tbody>
698
- </table>
699
- </div>
700
-
701
- @code {
702
- [Parameter] public IEnumerable<TItem>? Items { get; set; }
703
- [Parameter] public RenderFragment? HeaderTemplate { get; set; }
704
- [Parameter] public RenderFragment<TItem> RowTemplate { get; set; } = default!;
705
- [Parameter] public string EmptyMessage { get; set; } = "Nenhum registro encontrado.";
706
- }
707
- ```
708
-
709
- ## Padrões de Layout
710
-
711
- ### Dashboard Layout
712
-
713
- ```razor
714
- <div class="min-h-screen bg-gray-100">
715
- <!-- Sidebar -->
716
- <aside class="fixed inset-y-0 left-0 w-64 bg-white shadow-lg">
717
- <!-- Sidebar content -->
718
- </aside>
719
-
720
- <!-- Main content -->
721
- <main class="ml-64 p-8">
722
- <!-- Header -->
723
- <header class="mb-8">
724
- <h1 class="text-2xl font-bold text-gray-900">Dashboard</h1>
725
- </header>
726
-
727
- <!-- Stats grid -->
728
- <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8">
729
- <StatCard Label="Vendas" Value="R$ 12.450" Change="+12%" IsPositive />
730
- <!-- More stats -->
731
- </div>
732
-
733
- <!-- Content grid -->
734
- <div class="grid grid-cols-1 lg:grid-cols-3 gap-6">
735
- <Card Title="Pedidos Recentes" Class="lg:col-span-2">
736
- <!-- Table -->
737
- </Card>
738
- <Card Title="Atividade">
739
- <!-- Activity feed -->
740
- </Card>
741
- </div>
742
- </main>
743
- </div>
744
- ```
745
-
746
- ## Acessibilidade (A11y)
747
-
748
- 1. **Contraste**: Mínimo 4.5:1 para texto
749
- 2. **Focus visible**: Outline em elementos focáveis
750
- 3. **Labels**: Todo input com label associado
751
- 4. **ARIA**: Roles e labels onde necessário
752
- 5. **Keyboard nav**: Tab order lógico
753
-
754
- ```razor
755
- <!-- Exemplo acessível -->
756
- <label for="email" class="block text-sm font-medium text-gray-700">
757
- Email
758
- </label>
759
- <input
760
- id="email"
761
- type="email"
762
- aria-describedby="email-hint"
763
- class="mt-1 block w-full rounded-md border-gray-300 shadow-sm
764
- focus:border-blue-500 focus:ring-blue-500" />
765
- <p id="email-hint" class="mt-1 text-sm text-gray-500">
766
- Usaremos para enviar atualizações.
767
- </p>
768
- ```
769
-
770
- ---
771
-
772
- ## 📐 Como Gerar os Deliverables (FASE 1.5)
773
-
774
- ### 1. ui-mockups.md - Wireframes ASCII
775
-
776
- **Estrutura:**
777
- ```markdown
778
- # UI Mockups - {Feature Name}
779
-
780
- ## Tela 1: {Nome da Tela}
781
-
782
- ### Wireframe
783
- [ASCII art wireframe aqui]
784
-
785
- ### Descrição
786
- - **Propósito**: {O que o usuário faz nesta tela}
787
- - **Componentes**: {Lista de componentes principais}
788
- - **Interações**: {O que acontece ao clicar, hover, etc}
789
- - **Estados**: {Loading, erro, vazio, sucesso}
790
-
791
- ### Responsividade
792
- - **Desktop**: {Layout desktop}
793
- - **Mobile**: {Adaptações mobile}
794
- ```
795
-
796
- **Exemplo - Dashboard de Vendas:**
797
-
798
- ```
799
- ## Tela 1: Dashboard Principal
800
-
801
- ### Wireframe
802
-
803
- ┌─────────────────────────────────────────────────────────┐
804
- │ [≡] Dashboard de Vendas [🔔] [👤] [⚙] │
805
- ├─────────────────────────────────────────────────────────┤
806
- │ │
807
- │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
808
- │ │ Vendas │ │ Pedidos │ │ Clientes │ │ Ticket │ │
809
- │ │ R$ 45.2K │ │ 342 │ │ 128 │ │ R$ 132 │ │
810
- │ │ +12% ▲ │ │ +8% ▲ │ │ +15% ▲ │ │ -3% ▼ │ │
811
- │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
812
- │ │
813
- │ ┌─────────────────────────────────┐ ┌───────────────┐ │
814
- │ │ Vendas por Mês │ │ Top Produtos │ │
815
- │ │ │ │ │ │
816
- │ │ ╭─╮ │ │ 1. Produto A │ │
817
- │ │ ╭──╯ ╰─╮ ╭──╮ │ │ 2. Produto B │ │
818
- │ │ ─╯ ╰─────╯ ╰── │ │ 3. Produto C │ │
819
- │ │ JAN FEV MAR ABR MAI │ │ │ │
820
- │ └─────────────────────────────────┘ └───────────────┘ │
821
- │ │
822
- │ ┌─────────────────────────────────────────────────────┐│
823
- │ │ Últimos Pedidos [🔍 Buscar] [➕] ││
824
- │ ├──────────┬──────────┬──────────┬─────────────────────┤│
825
- │ │ #12345 │ João S. │ R$ 250 │ [Ver] [Editar] ││
826
- │ │ #12346 │ Maria O. │ R$ 180 │ [Ver] [Editar] ││
827
- │ │ #12347 │ Pedro M. │ R$ 420 │ [Ver] [Editar] ││
828
- │ └──────────┴──────────┴──────────┴─────────────────────┘│
829
- └─────────────────────────────────────────────────────────┘
830
- ```
831
-
832
- ### Descrição
833
- - **Propósito**: Visão geral das vendas e métricas do dia
834
- - **Componentes**: 4 stat cards, 1 chart (line), 1 lista (top 5), 1 data table
835
- - **Interações**:
836
- - Stat cards: Hover mostra detalhes
837
- - Chart: Tooltip nos pontos
838
- - Tabela: Ordenar colunas, buscar, paginação
839
- - **Estados**:
840
- - Loading: Skeleton dos cards
841
- - Erro: Message bar no topo
842
- - Vazio: "Nenhuma venda hoje" com CTA
843
-
844
- ### Responsividade
845
- - **Desktop**: 4 colunas de stat cards, chart 66% + sidebar 33%
846
- - **Mobile**: Stack vertical, stat cards 100% width, chart 100%
847
- ```
848
-
849
- ### 2. ui-components.md - Specs de Componentes
850
-
851
- **Estrutura:**
852
- ```markdown
853
- # UI Components - {Feature Name}
854
-
855
- ## Biblioteca Escolhida: {Fluent UI | MudBlazor | Híbrida}
856
-
857
- ### Justificativa
858
- {Por que escolheu esta biblioteca para esta feature}
859
-
860
- ## Componentes Mapeados
861
-
862
- ### {Nome do Componente}
863
- - **Biblioteca**: {Fluent UI | MudBlazor}
864
- - **Componente**: `{ComponentName}`
865
- - **Props Principais**:
866
- - `prop1`: {descrição}
867
- - `prop2`: {descrição}
868
- - **Eventos**:
869
- - `OnClick`: {descrição}
870
- - **Estados**:
871
- - Default: {descrição}
872
- - Loading: {descrição}
873
- - Error: {descrição}
874
- - **Acessibilidade**:
875
- - ARIA: {roles/labels}
876
- - Keyboard: {navegação}
877
- ```
878
-
879
- **Exemplo:**
880
-
881
- ```markdown
882
- ## Biblioteca Escolhida: Fluent UI Blazor
883
-
884
- ### Justificativa
885
- Dashboard AI-first com chat integrado. Fluent UI oferece componentes nativos
886
- de chat (FluentMessageBar, FluentProgress) e design Microsoft 365 consistente
887
- com o restante do sistema.
888
-
889
- ## Componentes Mapeados
890
-
891
- ### Stat Card (Métricas de Vendas)
892
- - **Biblioteca**: Fluent UI
893
- - **Componente**: `FluentCard` + `FluentStack` + `FluentBadge`
894
- - **Props Principais**:
895
- - `Title`: "Vendas Hoje"
896
- - `Value`: "R$ 45.200"
897
- - `Change`: "+12%"
898
- - `IsPositive`: true
899
- - **Eventos**:
900
- - `OnClick`: Navega para detalhes da métrica
901
- - **Estados**:
902
- - Default: Mostra valor + badge de mudança
903
- - Loading: `FluentSkeleton` no lugar do valor
904
- - Error: FluentMessageBar "Erro ao carregar"
905
- - **Acessibilidade**:
906
- - ARIA: role="region" aria-label="Estatísticas de vendas"
907
- - Keyboard: Focável com Tab, Enter para expandir
908
-
909
- ### Data Table (Últimos Pedidos)
910
- - **Biblioteca**: Fluent UI
911
- - **Componente**: `FluentDataGrid<Order>`
912
- - **Props Principais**:
913
- - `Items`: `@_orders` (List<Order>)
914
- - `ResizableColumns`: true
915
- - `Virtualize`: true (se > 100 itens)
916
- - **Colunas**:
917
- 1. PropertyColumn: OrderNumber (Sortable)
918
- 2. PropertyColumn: CustomerName (Sortable)
919
- 3. PropertyColumn: Total (Format="C", Sortable)
920
- 4. TemplateColumn: Ações (Ver, Editar)
921
- - **Eventos**:
922
- - `OnRowClick`: Expande detalhes inline
923
- - **Estados**:
924
- - Empty: "Nenhum pedido encontrado" com CTA "Criar pedido"
925
- - Loading: FluentProgress acima da tabela
926
- - Error: FluentMessageBar Intent="Error"
927
- - **Acessibilidade**:
928
- - ARIA: role="grid", aria-sort nos headers
929
- - Keyboard: Navegação com setas, Enter para ações
930
- ```
931
-
932
- ### 3. ui-flows.md - Fluxos de Usuário
933
-
934
- **Estrutura:**
935
- ```markdown
936
- # UI Flows - {Feature Name}
937
-
938
- ## Fluxo 1: {Nome do Fluxo}
939
-
940
- ### Trigger
941
- {O que inicia este fluxo}
942
-
943
- ### Passos
944
- 1. **{Tela/Componente}**: {Ação do usuário}
945
- - {Resultado da ação}
946
- - {Navegação/transição}
947
-
948
- 2. **{Tela/Componente}**: {Próxima ação}
949
- ...
950
-
951
- ### Happy Path
952
- {Caminho ideal sem erros}
953
-
954
- ### Edge Cases
955
- - **{Caso}**: {Como o sistema lida}
956
-
957
- ### Diagrama
958
- [Fluxograma ASCII]
959
- ```
960
-
961
- **Exemplo:**
962
-
963
- ```markdown
964
- ## Fluxo 1: Criar Novo Pedido
965
-
966
- ### Trigger
967
- Usuário clica no botão [+ Novo Pedido] no dashboard
968
-
969
- ### Passos
970
-
971
- 1. **Dashboard**: Clica [+ Novo Pedido]
972
- - Modal/Wizard abre com Fluent UI Wizard
973
- - 3 steps: Cliente, Produtos, Revisão
974
-
975
- 2. **Step 1 - Sele ção de Cliente**:
976
- - FluentAutocomplete para buscar cliente
977
- - Ou [+ Novo Cliente] para criar inline
978
- - [Próximo] habilitado apenas se cliente selecionado
979
-
980
- 3. **Step 2 - Adicionar Produtos**:
981
- - FluentDataGrid com produtos disponíveis
982
- - Coluna com FluentNumberField para quantidade
983
- - [Adicionar] adiciona à lista do pedido
984
- - Lista de produtos adicionados (removível)
985
- - Total calculado em tempo real
986
-
987
- 4. **Step 3 - Revisão**:
988
- - FluentCard resumo do pedido
989
- - [Voltar] para editar
990
- - [Confirmar] cria o pedido
991
-
992
- 5. **Confirmação**:
993
- - FluentToast "Pedido #12348 criado com sucesso!"
994
- - Navega para detalhes do pedido OU volta ao dashboard
995
-
996
- ### Happy Path
997
- Dashboard → Wizard (3 steps) → Confirmação → Dashboard
998
-
999
- ### Edge Cases
1000
- - **Cliente não encontrado**: Oferece [+ Novo Cliente] inline
1001
- - **Produto sem estoque**: FluentMessageBar alerta, não permite adicionar
1002
- - **Rede falha no confirmar**: FluentDialog "Erro ao salvar" + [Tentar novamente]
1003
- - **Usuário fecha Wizard**: FluentDialog "Descartar pedido?" [Sim] [Não]
1004
-
1005
- ### Diagrama
1006
-
1007
- ```
1008
- [Dashboard]
1009
-
1010
- ├─[+ Novo Pedido]─┐
1011
- │ │
1012
- ▼ │
1013
- [Wizard: Step 1] │
1014
- (Cliente) │
1015
- │ │
1016
- ├─[Próximo] │
1017
- │ │
1018
- ▼ │
1019
- [Wizard: Step 2] │
1020
- (Produtos) │
1021
- │ │
1022
- ├─[Próximo] │
1023
- │ │
1024
- ▼ │
1025
- [Wizard: Step 3] │
1026
- (Revisão) │
1027
- │ │
1028
- ├─[Confirmar] │
1029
- │ │
1030
- ▼ │
1031
- [✅ Pedido Criado] │
1032
- │ │
1033
- └─────────────────┘
1034
- [Dashboard]
1035
- ```
1036
- ```
1037
-
1038
- ### Checklist para FASE 1.5
1039
-
1040
- Ao gerar deliverables de UI/UX, validar:
1041
-
1042
- - [ ] **ui-mockups.md**:
1043
- - [ ] Wireframes ASCII de TODAS as telas
1044
- - [ ] Descrições detalhadas (propósito, componentes, interações, estados)
1045
- - [ ] Responsividade especificada (desktop + mobile)
1046
- - [ ] Empty states e error states documentados
1047
-
1048
- - [ ] **ui-components.md**:
1049
- - [ ] Biblioteca escolhida justificada (Fluent UI vs MudBlazor)
1050
- - [ ] Todos os componentes mapeados (nome + props + eventos)
1051
- - [ ] Estados documentados (default, loading, error, empty)
1052
- - [ ] Acessibilidade validada (ARIA, keyboard navigation)
1053
-
1054
- - [ ] **ui-flows.md**:
1055
- - [ ] Fluxos principais identificados (happy path)
1056
- - [ ] Edge cases documentados (erro, vazio, retry)
1057
- - [ ] Diagramas ASCII de cada fluxo
1058
- - [ ] Navegação entre telas clara
1059
-
1060
- - [ ] **decisions.md** (atualizar):
1061
- - [ ] ADR: Por que Fluent UI (ou MudBlazor)?
1062
- - [ ] ADR: Por que este layout específico?
1063
- - [ ] Trade-offs discutidos (performance vs features)
1064
-
1065
- ---
1066
-
1067
- ## Documentação de Referência
1068
-
1069
- ### Fluent UI Blazor
1070
- - [Fluent UI Blazor Docs](https://www.fluentui-blazor.net/)
1071
- - [Fluent UI Blazor GitHub](https://github.com/microsoft/fluentui-blazor)
1072
- - [Components Gallery](https://www.fluentui-blazor.net/Components)
1073
- - **[Guia Completo: Fluent UI Setup](../../.morph/standards/fluent-ui-setup.md)**
1074
-
1075
- ### MudBlazor
1076
- - [MudBlazor Docs](https://mudblazor.com/)
1077
- - [Components Gallery](https://mudblazor.com/components/list)
1078
- - [GitHub](https://github.com/MudBlazor/MudBlazor)
1079
-
1080
- ### Design & Acessibilidade
1081
- - [WCAG Guidelines](https://www.w3.org/WAI/WCAG21/quickref/)
1082
- - [Microsoft Fluent Design System](https://fluent2.microsoft.design/)
1083
- - [Material Design](https://m3.material.io/)
1084
- - [Blazor Components](https://learn.microsoft.com/aspnet/core/blazor/components/)
1085
-
1086
- ## Checklist de UI
1087
-
1088
- - [ ] Hierarquia visual clara
1089
- - [ ] Cores do sistema de design
1090
- - [ ] Espaçamento consistente (múltiplos de 4px)
1091
- - [ ] Responsivo (mobile-first)
1092
- - [ ] Estados: hover, focus, disabled, error
1093
- - [ ] Loading states (skeleton/spinner)
1094
- - [ ] Empty states informativos
1095
- - [ ] Mensagens de erro claras
1096
- - [ ] Acessibilidade básica (WCAG AA)
1097
-
1098
- ---
1099
-
1100
- *MORPH-SPEC by Polymorphism Tech*