@polymorphism-tech/morph-spec 1.0.4 → 2.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.
- package/CLAUDE.md +1381 -0
- package/LICENSE +72 -0
- package/README.md +89 -6
- package/bin/detect-agents.js +225 -0
- package/bin/morph-spec.js +120 -0
- package/bin/render-template.js +302 -0
- package/bin/semantic-detect-agents.js +246 -0
- package/bin/validate-agents-skills.js +239 -0
- package/bin/validate-agents.js +69 -0
- package/bin/validate-phase.js +263 -0
- package/content/.azure/README.md +293 -0
- package/content/.azure/docs/azure-devops-setup.md +454 -0
- package/content/.azure/docs/branch-strategy.md +398 -0
- package/content/.azure/docs/local-development.md +515 -0
- package/content/.azure/pipelines/pipeline-variables.yml +34 -0
- package/content/.azure/pipelines/prod-pipeline.yml +319 -0
- package/content/.azure/pipelines/staging-pipeline.yml +234 -0
- package/content/.azure/pipelines/templates/build-dotnet.yml +75 -0
- package/content/.azure/pipelines/templates/deploy-app-service.yml +94 -0
- package/content/.azure/pipelines/templates/deploy-container-app.yml +120 -0
- package/content/.azure/pipelines/templates/infra-deploy.yml +90 -0
- package/content/.claude/commands/morph-apply.md +118 -26
- package/content/.claude/commands/morph-archive.md +9 -9
- package/content/.claude/commands/morph-clarify.md +184 -0
- package/content/.claude/commands/morph-design.md +275 -0
- package/content/.claude/commands/morph-proposal.md +56 -15
- package/content/.claude/commands/morph-setup.md +100 -0
- package/content/.claude/commands/morph-status.md +47 -32
- package/content/.claude/commands/morph-tasks.md +319 -0
- package/content/.claude/commands/morph-uiux.md +211 -0
- package/content/.claude/skills/specialists/ai-system-architect.md +604 -0
- package/content/.claude/skills/specialists/ms-agent-expert.md +143 -89
- package/content/.claude/skills/specialists/ui-ux-designer.md +744 -9
- package/content/.claude/skills/stacks/dotnet-blazor.md +244 -8
- package/content/.claude/skills/stacks/dotnet-nextjs.md +2 -2
- package/content/.morph/.morphversion +5 -0
- package/content/.morph/config/agents.json +101 -8
- package/content/.morph/config/azure-pricing.json +70 -0
- package/content/.morph/config/azure-pricing.schema.json +50 -0
- package/content/.morph/config/config.template.json +15 -3
- package/content/.morph/docs/STORY-DRIVEN-DEVELOPMENT.md +392 -0
- package/content/.morph/hooks/README.md +239 -0
- package/content/.morph/hooks/pre-commit-agents.sh +24 -0
- package/content/.morph/hooks/pre-commit-all.sh +48 -0
- package/content/.morph/hooks/pre-commit-costs.sh +91 -0
- package/content/.morph/hooks/pre-commit-specs.sh +49 -0
- package/content/.morph/hooks/pre-commit-tests.sh +60 -0
- package/content/.morph/project.md +5 -4
- package/content/.morph/schemas/agent.schema.json +296 -0
- package/content/.morph/standards/agent-framework-setup.md +453 -0
- package/content/.morph/standards/architecture.md +142 -7
- package/content/.morph/standards/azure.md +218 -23
- package/content/.morph/standards/coding.md +47 -12
- package/content/.morph/standards/dotnet10-migration.md +494 -0
- package/content/.morph/standards/fluent-ui-setup.md +590 -0
- package/content/.morph/standards/migration-guide.md +514 -0
- package/content/.morph/standards/passkeys-auth.md +423 -0
- package/content/.morph/standards/vector-search-rag.md +536 -0
- package/content/.morph/state.json +18 -0
- package/content/.morph/templates/FluentDesignTheme.cs +149 -0
- package/content/.morph/templates/MudTheme.cs +281 -0
- package/content/.morph/templates/contracts.cs +55 -55
- package/content/.morph/templates/decisions.md +4 -4
- package/content/.morph/templates/design-system.css +226 -0
- package/content/.morph/templates/infra/.dockerignore.example +89 -0
- package/content/.morph/templates/infra/Dockerfile.example +82 -0
- package/content/.morph/templates/infra/README.md +286 -0
- package/content/.morph/templates/infra/app-service.bicep +164 -0
- package/content/.morph/templates/infra/deploy.ps1 +229 -0
- package/content/.morph/templates/infra/deploy.sh +208 -0
- package/content/.morph/templates/infra/main.bicep +41 -7
- package/content/.morph/templates/infra/parameters.dev.json +6 -0
- package/content/.morph/templates/infra/parameters.prod.json +6 -0
- package/content/.morph/templates/infra/parameters.staging.json +29 -0
- package/content/.morph/templates/proposal.md +3 -3
- package/content/.morph/templates/recap.md +3 -3
- package/content/.morph/templates/spec.md +9 -8
- package/content/.morph/templates/sprint-status.yaml +68 -0
- package/content/.morph/templates/state.template.json +222 -0
- package/content/.morph/templates/story.md +143 -0
- package/content/.morph/templates/tasks.md +1 -1
- package/content/.morph/templates/ui-components.md +276 -0
- package/content/.morph/templates/ui-design-system.md +286 -0
- package/content/.morph/templates/ui-flows.md +336 -0
- package/content/.morph/templates/ui-mockups.md +133 -0
- package/content/.morph/test-infra/example.bicep +59 -0
- package/content/CLAUDE.md +124 -0
- package/content/README.md +79 -0
- package/detectors/config-detector.js +223 -0
- package/detectors/conversation-analyzer.js +163 -0
- package/detectors/index.js +84 -0
- package/detectors/standards-generator.js +275 -0
- package/detectors/structure-detector.js +221 -0
- package/docs/README.md +149 -0
- package/docs/api/cost-calculator.js.html +513 -0
- package/docs/api/design-system-generator.js.html +382 -0
- package/docs/api/fonts/Montserrat/Montserrat-Bold.eot +0 -0
- package/docs/api/fonts/Montserrat/Montserrat-Bold.ttf +0 -0
- package/docs/api/fonts/Montserrat/Montserrat-Bold.woff +0 -0
- package/docs/api/fonts/Montserrat/Montserrat-Bold.woff2 +0 -0
- package/docs/api/fonts/Montserrat/Montserrat-Regular.eot +0 -0
- package/docs/api/fonts/Montserrat/Montserrat-Regular.ttf +0 -0
- package/docs/api/fonts/Montserrat/Montserrat-Regular.woff +0 -0
- package/docs/api/fonts/Montserrat/Montserrat-Regular.woff2 +0 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.eot +0 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +978 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.ttf +0 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff +0 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff2 +0 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.eot +0 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +1049 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.ttf +0 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff +0 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff2 +0 -0
- package/docs/api/global.html +5263 -0
- package/docs/api/index.html +96 -0
- package/docs/api/scripts/collapse.js +39 -0
- package/docs/api/scripts/commonNav.js +28 -0
- package/docs/api/scripts/linenumber.js +25 -0
- package/docs/api/scripts/nav.js +12 -0
- package/docs/api/scripts/polyfill.js +4 -0
- package/docs/api/scripts/prettify/Apache-License-2.0.txt +202 -0
- package/docs/api/scripts/prettify/lang-css.js +2 -0
- package/docs/api/scripts/prettify/prettify.js +28 -0
- package/docs/api/scripts/search.js +99 -0
- package/docs/api/state-manager.js.html +423 -0
- package/docs/api/styles/jsdoc.css +776 -0
- package/docs/api/styles/prettify.css +80 -0
- package/docs/examples.md +328 -0
- package/docs/getting-started.md +302 -0
- package/docs/installation.md +361 -0
- package/docs/templates.md +418 -0
- package/docs/validation-checklist.md +266 -0
- package/package.json +39 -12
- package/src/commands/cost.js +181 -0
- package/src/commands/create-story.js +283 -0
- package/src/commands/detect.js +104 -0
- package/src/commands/doctor.js +67 -0
- package/src/commands/generate.js +149 -0
- package/src/commands/init.js +69 -45
- package/src/commands/shard-spec.js +224 -0
- package/src/commands/sprint-status.js +250 -0
- package/src/commands/state.js +333 -0
- package/src/commands/sync.js +167 -0
- package/src/commands/update-pricing.js +206 -0
- package/src/commands/update.js +88 -13
- package/src/lib/complexity-analyzer.js +292 -0
- package/src/lib/cost-calculator.js +429 -0
- package/src/lib/design-system-generator.js +298 -0
- package/src/lib/state-manager.js +340 -0
- package/src/utils/file-copier.js +59 -0
- package/src/utils/version-checker.js +175 -0
|
@@ -1,17 +1,443 @@
|
|
|
1
1
|
# UI/UX Designer
|
|
2
2
|
|
|
3
|
-
Especialista em design de interfaces, experiência do usuário e componentes Blazor
|
|
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.
|
|
4
7
|
|
|
5
8
|
## Responsabilidades
|
|
6
9
|
|
|
7
|
-
1. **Projetar interfaces** intuitivas e acessíveis
|
|
8
|
-
2. **
|
|
9
|
-
3. **
|
|
10
|
-
4. **
|
|
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
|
|
11
15
|
|
|
12
16
|
## Triggers
|
|
13
17
|
|
|
14
|
-
|
|
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
|
+
## Deliverables da FASE 1.5
|
|
23
|
+
|
|
24
|
+
| Arquivo | Conteúdo |
|
|
25
|
+
|---------|----------|
|
|
26
|
+
| `ui-design-system.md` | Design system: cores, tipografia, spacing, etc |
|
|
27
|
+
| `ui-mockups.md` | Wireframes (ASCII art) + descrições de cada tela |
|
|
28
|
+
| `ui-components.md` | Specs dos componentes Fluent UI/MudBlazor a usar |
|
|
29
|
+
| `ui-flows.md` | Diagramas de fluxo do usuário e navegação |
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Workflow da FASE 1.5: UI/UX Design
|
|
34
|
+
|
|
35
|
+
### Passo 1: Coletar Input do Usuário
|
|
36
|
+
|
|
37
|
+
**SEMPRE pergunte ao usuário ANTES de gerar os deliverables:**
|
|
38
|
+
|
|
39
|
+
1. **"Você tem alguma ideia de layout em mente?"**
|
|
40
|
+
- Se SIM: Peça que descreva ou mostre exemplo
|
|
41
|
+
- Se NÃO: Você propõe baseado em best practices
|
|
42
|
+
|
|
43
|
+
2. **"Tem alguma referência visual que gostaria de seguir?"**
|
|
44
|
+
- Sites/apps similares
|
|
45
|
+
- Screenshots/mockups existentes
|
|
46
|
+
- Design system específico
|
|
47
|
+
|
|
48
|
+
3. **"Como você imagina o fluxo do usuário?"**
|
|
49
|
+
- Passos principais que o usuário deve seguir
|
|
50
|
+
- Pontos de decisão importantes
|
|
51
|
+
- Onde pode haver confusão/dificuldade
|
|
52
|
+
|
|
53
|
+
4. **"Tem imagens de exemplo ou screenshots?"**
|
|
54
|
+
- Se SIM: Use o Read tool para ler a imagem e baseie o design nela
|
|
55
|
+
- Analise a imagem e extraia padrões de layout, componentes, cores
|
|
56
|
+
|
|
57
|
+
5. **"Este projeto tem um design system definido?"**
|
|
58
|
+
- Cores (primária, secundária, sucesso, erro, etc)?
|
|
59
|
+
- Tipografia (fontes, tamanhos)?
|
|
60
|
+
- Espaçamento (sistema de 4px, 8px?)?
|
|
61
|
+
- Se NÃO: Propor baseado em best practices
|
|
62
|
+
|
|
63
|
+
6. **Design System - Cores:**
|
|
64
|
+
- Primária: (ex: #3b82f6 - Blue)
|
|
65
|
+
- Secundária: (ex: #6b7280 - Gray)
|
|
66
|
+
- Sucesso: (ex: #10b981 - Green)
|
|
67
|
+
- Erro: (ex: #ef4444 - Red)
|
|
68
|
+
- Warning: (ex: #f59e0b - Amber)
|
|
69
|
+
- Info: (ex: #06b6d4 - Cyan)
|
|
70
|
+
- Neutros: Escala de cinzas (50, 100, ..., 900)?
|
|
71
|
+
|
|
72
|
+
7. **Design System - Tipografia:**
|
|
73
|
+
- Font family principal: (ex: Inter, Roboto, System)
|
|
74
|
+
- Font family secundária: (ex: monospace para código)
|
|
75
|
+
- Tamanhos: Usar escala padrão (xs, sm, base, lg, xl)?
|
|
76
|
+
|
|
77
|
+
8. **Design System - Espaçamento:**
|
|
78
|
+
- Sistema base: 4px, 8px ou outro?
|
|
79
|
+
- Escala: Padrão Tailwind (0.25rem, 0.5rem, 1rem) ou custom?
|
|
80
|
+
|
|
81
|
+
#### Exemplo de Interação
|
|
82
|
+
|
|
83
|
+
```markdown
|
|
84
|
+
⛔ **PAUSA OBRIGATÓRIA - FASE 1.5: UI/UX DESIGN**
|
|
85
|
+
|
|
86
|
+
Detectei que esta feature envolve front-end. Antes de criar os wireframes e specs,
|
|
87
|
+
gostaria de entender sua visão:
|
|
88
|
+
|
|
89
|
+
**Perguntas:**
|
|
90
|
+
|
|
91
|
+
1. **Layout**: Você tem alguma ideia de layout em mente? Algum site/app de referência?
|
|
92
|
+
- Exemplos: Dashboard estilo Vercel, Wizard estilo Stripe, Chat estilo ChatGPT
|
|
93
|
+
|
|
94
|
+
2. **Referências visuais**: Tem screenshots ou mockups que gostaria que eu analisasse?
|
|
95
|
+
- Se sim, me passe o caminho do arquivo e usarei como base
|
|
96
|
+
|
|
97
|
+
3. **Fluxo**: Como você imagina que o usuário navegará pela feature?
|
|
98
|
+
- Ex: "Usuário abre modal → preenche form → confirma → volta ao dashboard"
|
|
99
|
+
|
|
100
|
+
4. **Preferências**:
|
|
101
|
+
- Design mais minimalista ou rico em informações?
|
|
102
|
+
- Mobile-first ou desktop-first?
|
|
103
|
+
- Preferência por Fluent UI ou MudBlazor?
|
|
104
|
+
|
|
105
|
+
5. **Design System**:
|
|
106
|
+
- Projeto tem design system definido (cores, fonts, spacing)?
|
|
107
|
+
- Se não, quer que eu proponha um baseado em best practices?
|
|
108
|
+
|
|
109
|
+
**Próximos passos sugeridos:**
|
|
110
|
+
|
|
111
|
+
1. ✅ **Responder perguntas acima e eu gero wireframes + design system**
|
|
112
|
+
2. 💡 **Pular perguntas e confiar em mim (uso best practices padrão)**
|
|
113
|
+
3. 🖼️ **Compartilhar imagens de referência primeiro**
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Passo 2: Analisar Imagens (se fornecidas)
|
|
117
|
+
|
|
118
|
+
Se o usuário fornecer screenshots/mockups:
|
|
119
|
+
|
|
120
|
+
```markdown
|
|
121
|
+
**Analisando imagem fornecida...**
|
|
122
|
+
|
|
123
|
+
Identifiquei os seguintes padrões:
|
|
124
|
+
|
|
125
|
+
**Layout:**
|
|
126
|
+
- Grid de 3 colunas
|
|
127
|
+
- Sidebar fixa à esquerda
|
|
128
|
+
- Header com breadcrumbs
|
|
129
|
+
|
|
130
|
+
**Componentes principais:**
|
|
131
|
+
- 4 stat cards no topo
|
|
132
|
+
- Data table com paginação
|
|
133
|
+
- Gráfico de linha (vendas)
|
|
134
|
+
|
|
135
|
+
**Cores:**
|
|
136
|
+
- Primária: Azul (#3b82f6)
|
|
137
|
+
- Fundo: Cinza claro (#f9fafb)
|
|
138
|
+
|
|
139
|
+
Vou usar isso como base para os wireframes. Confirma?
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Passo 3: Gerar Deliverables
|
|
143
|
+
|
|
144
|
+
Após coletar input, gerar:
|
|
145
|
+
1. `ui-design-system.md` (cores, tipografia, spacing do projeto)
|
|
146
|
+
2. `ui-mockups.md` (wireframes baseados no design system)
|
|
147
|
+
3. `ui-components.md` (biblioteca escolhida justificada)
|
|
148
|
+
4. `ui-flows.md` (fluxos validados com usuário)
|
|
149
|
+
|
|
150
|
+
### Passo 4: Apresentar para Aprovação
|
|
151
|
+
|
|
152
|
+
```markdown
|
|
153
|
+
⛔ **PAUSA OBRIGATÓRIA**
|
|
154
|
+
|
|
155
|
+
Gerei os seguintes deliverables de UI/UX:
|
|
156
|
+
|
|
157
|
+
📄 **ui-design-system.md**:
|
|
158
|
+
- Paleta de cores completa (primária, secundária, estados)
|
|
159
|
+
- Tipografia (fonts, tamanhos, weights)
|
|
160
|
+
- Espaçamento (escala de 4px)
|
|
161
|
+
- Border radius, shadows, breakpoints
|
|
162
|
+
|
|
163
|
+
📄 **ui-mockups.md**:
|
|
164
|
+
- 3 telas mapeadas com wireframes ASCII
|
|
165
|
+
- Estados (loading, error, empty) documentados
|
|
166
|
+
- Responsividade especificada
|
|
167
|
+
- Cores/fonts do design system aplicados
|
|
168
|
+
|
|
169
|
+
📄 **ui-components.md**:
|
|
170
|
+
- Biblioteca: Fluent UI Blazor (justificado)
|
|
171
|
+
- 8 componentes mapeados
|
|
172
|
+
- Props e eventos especificados
|
|
173
|
+
- Temas/cores configurados
|
|
174
|
+
|
|
175
|
+
📄 **ui-flows.md**:
|
|
176
|
+
- Happy path + 3 edge cases
|
|
177
|
+
- Diagramas de navegação
|
|
178
|
+
|
|
179
|
+
**Próximos passos:**
|
|
180
|
+
|
|
181
|
+
1. ✅ **Aprovar UI/UX e continuar para FASE 2: DESIGN TÉCNICO**
|
|
182
|
+
2. 🎨 **Ajustar wireframes de telas específicas**
|
|
183
|
+
3. 🔄 **Revisar biblioteca UI escolhida**
|
|
184
|
+
4. 📋 **Adicionar mais fluxos/edge cases**
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## 🎨 Fluent UI Blazor vs MudBlazor
|
|
190
|
+
|
|
191
|
+
### Matriz de Decisão
|
|
192
|
+
|
|
193
|
+
| Critério | Fluent UI Blazor ⭐ | MudBlazor |
|
|
194
|
+
|----------|---------------------|-----------|
|
|
195
|
+
| **Projetos AI-first** | ✅ Ideal (componentes nativos) | ⚠️ Requer customização |
|
|
196
|
+
| **Micro-SaaS** | ✅ Design Microsoft 365 | ✅ Design Material |
|
|
197
|
+
| **Performance** | ✅ ~200KB | ⚠️ ~500KB |
|
|
198
|
+
| **Microsoft Stack** | ✅ Integração perfeita | ✅ Funciona bem |
|
|
199
|
+
| **Componentes Complexos** | ⚠️ Limitado (mais simples) | ✅ Muito completo |
|
|
200
|
+
| **Comunidade** | ⚠️ Menor (mais novo) | ✅ Grande |
|
|
201
|
+
| **Maturidade** | ⚠️ v4.0 (recente) | ✅ v6.x (estável) |
|
|
202
|
+
|
|
203
|
+
### Quando Usar Cada Um
|
|
204
|
+
|
|
205
|
+
**Use Fluent UI Blazor se:**
|
|
206
|
+
- ✅ Projeto AI-first (chat, assistentes, streaming)
|
|
207
|
+
- ✅ Stack Microsoft (Agent Framework, Aspire, Azure)
|
|
208
|
+
- ✅ Design moderno Microsoft 365
|
|
209
|
+
- ✅ Performance crítica
|
|
210
|
+
- ✅ Integração com Aspire Dashboard
|
|
211
|
+
|
|
212
|
+
**Use MudBlazor se:**
|
|
213
|
+
- ✅ Dashboards complexos com muitos componentes
|
|
214
|
+
- ✅ Preferência por Material Design
|
|
215
|
+
- ✅ Precisa de componentes avançados (TreeView, DataGrid avançado)
|
|
216
|
+
- ✅ Comunidade maior e mais exemplos
|
|
217
|
+
- ✅ Projeto não-AI ou backend-heavy
|
|
218
|
+
|
|
219
|
+
**Abordagem Híbrida:**
|
|
220
|
+
Fluent UI (base) + MudBlazor (componentes específicos complexos)
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## 🚀 Fluent UI Blazor - Componentes AI-First
|
|
225
|
+
|
|
226
|
+
> **Recomendado para MORPH-SPEC** - Alinhado com .NET 10 + Agent Framework
|
|
227
|
+
|
|
228
|
+
### Setup Rápido
|
|
229
|
+
|
|
230
|
+
```csharp
|
|
231
|
+
// Program.cs
|
|
232
|
+
builder.Services.AddFluentUIComponents();
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
```razor
|
|
236
|
+
// _Imports.razor
|
|
237
|
+
@using Microsoft.FluentUI.AspNetCore.Components
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### Componentes Principais
|
|
241
|
+
|
|
242
|
+
#### 1. Chat / Conversação
|
|
243
|
+
|
|
244
|
+
```razor
|
|
245
|
+
<!-- Chat Container com streaming -->
|
|
246
|
+
<FluentStack Orientation="Orientation.Vertical" Style="height: 100vh;">
|
|
247
|
+
<!-- Header -->
|
|
248
|
+
<FluentToolbar>
|
|
249
|
+
<FluentLabel Typo="Typography.H4">AI Assistant</FluentLabel>
|
|
250
|
+
</FluentToolbar>
|
|
251
|
+
|
|
252
|
+
<!-- Messages -->
|
|
253
|
+
<FluentStack Orientation="Orientation.Vertical"
|
|
254
|
+
Style="flex: 1; overflow-y: auto; padding: 1rem;">
|
|
255
|
+
@foreach (var msg in _messages)
|
|
256
|
+
{
|
|
257
|
+
<FluentMessageBar Intent="@(msg.IsUser ? MessageIntent.Info : MessageIntent.Success)"
|
|
258
|
+
Style="@(msg.IsUser ? "align-self: flex-end;" : "align-self: flex-start;")">
|
|
259
|
+
<FluentLabel Weight="FontWeight.Bold">@msg.Sender</FluentLabel>
|
|
260
|
+
<FluentLabel>@msg.Text</FluentLabel>
|
|
261
|
+
</FluentMessageBar>
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
@if (_isTyping)
|
|
265
|
+
{
|
|
266
|
+
<FluentProgress />
|
|
267
|
+
}
|
|
268
|
+
</FluentStack>
|
|
269
|
+
|
|
270
|
+
<!-- Input -->
|
|
271
|
+
<FluentStack Orientation="Orientation.Horizontal" Style="padding: 1rem;">
|
|
272
|
+
<FluentTextField @bind-Value="_input"
|
|
273
|
+
Placeholder="Digite sua mensagem..."
|
|
274
|
+
Style="flex: 1;" />
|
|
275
|
+
<FluentButton Appearance="Appearance.Accent"
|
|
276
|
+
OnClick="SendMessage"
|
|
277
|
+
Disabled="_isTyping">
|
|
278
|
+
Enviar
|
|
279
|
+
</FluentButton>
|
|
280
|
+
</FluentStack>
|
|
281
|
+
</FluentStack>
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
#### 2. Dashboard com Cards
|
|
285
|
+
|
|
286
|
+
```razor
|
|
287
|
+
<FluentGrid Spacing="3">
|
|
288
|
+
<FluentGridItem xs="12" sm="6" md="3">
|
|
289
|
+
<FluentCard>
|
|
290
|
+
<FluentStack Orientation="Orientation.Vertical">
|
|
291
|
+
<FluentLabel Typo="Typography.Body">Vendas Hoje</FluentLabel>
|
|
292
|
+
<FluentLabel Typo="Typography.H3">R$ 12.450</FluentLabel>
|
|
293
|
+
<FluentBadge Appearance="Appearance.Success">+12%</FluentBadge>
|
|
294
|
+
</FluentStack>
|
|
295
|
+
</FluentCard>
|
|
296
|
+
</FluentGridItem>
|
|
297
|
+
<!-- More cards... -->
|
|
298
|
+
</FluentGrid>
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
#### 3. Wizard / Multi-Step
|
|
302
|
+
|
|
303
|
+
```razor
|
|
304
|
+
<FluentWizard @bind-Value="_currentStep" DisplayStepNumber="true">
|
|
305
|
+
<Steps>
|
|
306
|
+
<FluentWizardStep Label="Informações Básicas" Icon="Info">
|
|
307
|
+
<FluentTextField @bind-Value="_model.Name" Label="Nome" Required />
|
|
308
|
+
<FluentTextField @bind-Value="_model.Email" Label="Email" Required />
|
|
309
|
+
</FluentWizardStep>
|
|
310
|
+
|
|
311
|
+
<FluentWizardStep Label="Preferências" Icon="Settings">
|
|
312
|
+
<FluentSwitch @bind-Value="_model.Newsletter" Label="Receber newsletter" />
|
|
313
|
+
</FluentWizardStep>
|
|
314
|
+
|
|
315
|
+
<FluentWizardStep Label="Confirmação" Icon="CheckMark">
|
|
316
|
+
<FluentLabel>Revise suas informações...</FluentLabel>
|
|
317
|
+
</FluentWizardStep>
|
|
318
|
+
</Steps>
|
|
319
|
+
</FluentWizard>
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
#### 4. Data Table
|
|
323
|
+
|
|
324
|
+
```razor
|
|
325
|
+
<FluentDataGrid Items="@_orders" ResizableColumns="true">
|
|
326
|
+
<PropertyColumn Property="@(o => o.OrderNumber)" Title="Pedido" Sortable="true" />
|
|
327
|
+
<PropertyColumn Property="@(o => o.Customer)" Title="Cliente" Sortable="true" />
|
|
328
|
+
<PropertyColumn Property="@(o => o.Total)" Title="Total" Format="C" Sortable="true" />
|
|
329
|
+
<TemplateColumn Title="Status">
|
|
330
|
+
<FluentBadge Appearance="@GetStatusAppearance(context.Status)">
|
|
331
|
+
@context.Status
|
|
332
|
+
</FluentBadge>
|
|
333
|
+
</TemplateColumn>
|
|
334
|
+
<TemplateColumn Title="Ações">
|
|
335
|
+
<FluentButton Appearance="Appearance.Lightweight" OnClick="@(() => ViewOrder(context))">
|
|
336
|
+
Ver
|
|
337
|
+
</FluentButton>
|
|
338
|
+
</TemplateColumn>
|
|
339
|
+
</FluentDataGrid>
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
### Fluent UI - Componentes Essenciais
|
|
343
|
+
|
|
344
|
+
| Componente | Uso | AI-First? |
|
|
345
|
+
|------------|-----|-----------|
|
|
346
|
+
| `FluentMessageBar` | Chat, notificações | ✅ |
|
|
347
|
+
| `FluentProgress` | Loading, streaming | ✅ |
|
|
348
|
+
| `FluentCard` | Containers, dashboards | ✅ |
|
|
349
|
+
| `FluentDataGrid` | Tabelas de dados | ⚠️ |
|
|
350
|
+
| `FluentWizard` | Fluxos multi-etapa | ⚠️ |
|
|
351
|
+
| `FluentDialog` | Modals, confirmações | ✅ |
|
|
352
|
+
| `FluentToast` | Feedback do sistema | ✅ |
|
|
353
|
+
| `FluentTextField` | Inputs de texto | ✅ |
|
|
354
|
+
|
|
355
|
+
---
|
|
356
|
+
|
|
357
|
+
## 🎯 MudBlazor - Componentes Complexos
|
|
358
|
+
|
|
359
|
+
> **Usar quando** precisar de componentes avançados não disponíveis em Fluent UI
|
|
360
|
+
|
|
361
|
+
### Setup Rápido
|
|
362
|
+
|
|
363
|
+
```csharp
|
|
364
|
+
// Program.cs
|
|
365
|
+
builder.Services.AddMudServices();
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
```razor
|
|
369
|
+
// _Imports.razor
|
|
370
|
+
@using MudBlazor
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
### Componentes Diferenciados
|
|
374
|
+
|
|
375
|
+
#### 1. TreeView Avançado
|
|
376
|
+
|
|
377
|
+
```razor
|
|
378
|
+
<MudTreeView T="FileNode" Items="@_fileTree" @bind-SelectedValue="_selectedFile">
|
|
379
|
+
<ItemTemplate Context="node">
|
|
380
|
+
<MudTreeViewItem @bind-Expanded="@node.IsExpanded"
|
|
381
|
+
Items="@node.Children"
|
|
382
|
+
Value="@node"
|
|
383
|
+
Icon="@node.Icon"
|
|
384
|
+
Text="@node.Name" />
|
|
385
|
+
</ItemTemplate>
|
|
386
|
+
</MudTreeView>
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
#### 2. DataGrid Avançado
|
|
390
|
+
|
|
391
|
+
```razor
|
|
392
|
+
<MudDataGrid T="Order" Items="@_orders"
|
|
393
|
+
Filterable="true"
|
|
394
|
+
Groupable="true"
|
|
395
|
+
QuickFilter="@_quickFilter"
|
|
396
|
+
ColumnResizeMode="ResizeMode.Container">
|
|
397
|
+
<Columns>
|
|
398
|
+
<PropertyColumn Property="x => x.OrderNumber" Title="Pedido" />
|
|
399
|
+
<PropertyColumn Property="x => x.Total" Title="Total" CellStyle="text-align: right;" />
|
|
400
|
+
<TemplateColumn CellClass="d-flex justify-end">
|
|
401
|
+
<CellTemplate>
|
|
402
|
+
<MudStack Row>
|
|
403
|
+
<MudButton Size="Size.Small" OnClick="@(() => Edit(context.Item))">
|
|
404
|
+
Editar
|
|
405
|
+
</MudButton>
|
|
406
|
+
</MudStack>
|
|
407
|
+
</CellTemplate>
|
|
408
|
+
</TemplateColumn>
|
|
409
|
+
</Columns>
|
|
410
|
+
</MudDataGrid>
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
#### 3. Charts
|
|
414
|
+
|
|
415
|
+
```razor
|
|
416
|
+
<MudChart ChartType="ChartType.Line"
|
|
417
|
+
ChartSeries="@_series"
|
|
418
|
+
XAxisLabels="@_xLabels"
|
|
419
|
+
Width="100%"
|
|
420
|
+
Height="350px" />
|
|
421
|
+
|
|
422
|
+
@code {
|
|
423
|
+
private List<ChartSeries> _series = new()
|
|
424
|
+
{
|
|
425
|
+
new ChartSeries { Name = "Vendas", Data = new double[] { 90, 79, 72, 69, 62, 58 } }
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
### MudBlazor - Componentes Essenciais
|
|
431
|
+
|
|
432
|
+
| Componente | Uso | Vantagem sobre Fluent |
|
|
433
|
+
|------------|-----|----------------------|
|
|
434
|
+
| `MudDataGrid` | Tabelas complexas | Grouping, filtering avançado |
|
|
435
|
+
| `MudTreeView` | Hierarquias | Mais completo |
|
|
436
|
+
| `MudChart` | Gráficos | Nativo (Fluent não tem) |
|
|
437
|
+
| `MudFileUpload` | Upload de arquivos | Mais features |
|
|
438
|
+
| `MudAutocomplete` | Autocomplete | Performance melhor |
|
|
439
|
+
|
|
440
|
+
---
|
|
15
441
|
|
|
16
442
|
## Princípios de Design
|
|
17
443
|
|
|
@@ -301,12 +727,321 @@ Keywords: `wizard`, `dashboard`, `complex form`, `drag-drop`, `chart`, `ui`, `ux
|
|
|
301
727
|
</p>
|
|
302
728
|
```
|
|
303
729
|
|
|
730
|
+
---
|
|
731
|
+
|
|
732
|
+
## 📐 Como Gerar os Deliverables (FASE 1.5)
|
|
733
|
+
|
|
734
|
+
### 1. ui-mockups.md - Wireframes ASCII
|
|
735
|
+
|
|
736
|
+
**Estrutura:**
|
|
737
|
+
```markdown
|
|
738
|
+
# UI Mockups - {Feature Name}
|
|
739
|
+
|
|
740
|
+
## Tela 1: {Nome da Tela}
|
|
741
|
+
|
|
742
|
+
### Wireframe
|
|
743
|
+
[ASCII art wireframe aqui]
|
|
744
|
+
|
|
745
|
+
### Descrição
|
|
746
|
+
- **Propósito**: {O que o usuário faz nesta tela}
|
|
747
|
+
- **Componentes**: {Lista de componentes principais}
|
|
748
|
+
- **Interações**: {O que acontece ao clicar, hover, etc}
|
|
749
|
+
- **Estados**: {Loading, erro, vazio, sucesso}
|
|
750
|
+
|
|
751
|
+
### Responsividade
|
|
752
|
+
- **Desktop**: {Layout desktop}
|
|
753
|
+
- **Mobile**: {Adaptações mobile}
|
|
754
|
+
```
|
|
755
|
+
|
|
756
|
+
**Exemplo - Dashboard de Vendas:**
|
|
757
|
+
|
|
758
|
+
```
|
|
759
|
+
## Tela 1: Dashboard Principal
|
|
760
|
+
|
|
761
|
+
### Wireframe
|
|
762
|
+
|
|
763
|
+
┌─────────────────────────────────────────────────────────┐
|
|
764
|
+
│ [≡] Dashboard de Vendas [🔔] [👤] [⚙] │
|
|
765
|
+
├─────────────────────────────────────────────────────────┤
|
|
766
|
+
│ │
|
|
767
|
+
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
|
768
|
+
│ │ Vendas │ │ Pedidos │ │ Clientes │ │ Ticket │ │
|
|
769
|
+
│ │ R$ 45.2K │ │ 342 │ │ 128 │ │ R$ 132 │ │
|
|
770
|
+
│ │ +12% ▲ │ │ +8% ▲ │ │ +15% ▲ │ │ -3% ▼ │ │
|
|
771
|
+
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
|
|
772
|
+
│ │
|
|
773
|
+
│ ┌─────────────────────────────────┐ ┌───────────────┐ │
|
|
774
|
+
│ │ Vendas por Mês │ │ Top Produtos │ │
|
|
775
|
+
│ │ │ │ │ │
|
|
776
|
+
│ │ ╭─╮ │ │ 1. Produto A │ │
|
|
777
|
+
│ │ ╭──╯ ╰─╮ ╭──╮ │ │ 2. Produto B │ │
|
|
778
|
+
│ │ ─╯ ╰─────╯ ╰── │ │ 3. Produto C │ │
|
|
779
|
+
│ │ JAN FEV MAR ABR MAI │ │ │ │
|
|
780
|
+
│ └─────────────────────────────────┘ └───────────────┘ │
|
|
781
|
+
│ │
|
|
782
|
+
│ ┌─────────────────────────────────────────────────────┐│
|
|
783
|
+
│ │ Últimos Pedidos [🔍 Buscar] [➕] ││
|
|
784
|
+
│ ├──────────┬──────────┬──────────┬─────────────────────┤│
|
|
785
|
+
│ │ #12345 │ João S. │ R$ 250 │ [Ver] [Editar] ││
|
|
786
|
+
│ │ #12346 │ Maria O. │ R$ 180 │ [Ver] [Editar] ││
|
|
787
|
+
│ │ #12347 │ Pedro M. │ R$ 420 │ [Ver] [Editar] ││
|
|
788
|
+
│ └──────────┴──────────┴──────────┴─────────────────────┘│
|
|
789
|
+
└─────────────────────────────────────────────────────────┘
|
|
790
|
+
```
|
|
791
|
+
|
|
792
|
+
### Descrição
|
|
793
|
+
- **Propósito**: Visão geral das vendas e métricas do dia
|
|
794
|
+
- **Componentes**: 4 stat cards, 1 chart (line), 1 lista (top 5), 1 data table
|
|
795
|
+
- **Interações**:
|
|
796
|
+
- Stat cards: Hover mostra detalhes
|
|
797
|
+
- Chart: Tooltip nos pontos
|
|
798
|
+
- Tabela: Ordenar colunas, buscar, paginação
|
|
799
|
+
- **Estados**:
|
|
800
|
+
- Loading: Skeleton dos cards
|
|
801
|
+
- Erro: Message bar no topo
|
|
802
|
+
- Vazio: "Nenhuma venda hoje" com CTA
|
|
803
|
+
|
|
804
|
+
### Responsividade
|
|
805
|
+
- **Desktop**: 4 colunas de stat cards, chart 66% + sidebar 33%
|
|
806
|
+
- **Mobile**: Stack vertical, stat cards 100% width, chart 100%
|
|
807
|
+
```
|
|
808
|
+
|
|
809
|
+
### 2. ui-components.md - Specs de Componentes
|
|
810
|
+
|
|
811
|
+
**Estrutura:**
|
|
812
|
+
```markdown
|
|
813
|
+
# UI Components - {Feature Name}
|
|
814
|
+
|
|
815
|
+
## Biblioteca Escolhida: {Fluent UI | MudBlazor | Híbrida}
|
|
816
|
+
|
|
817
|
+
### Justificativa
|
|
818
|
+
{Por que escolheu esta biblioteca para esta feature}
|
|
819
|
+
|
|
820
|
+
## Componentes Mapeados
|
|
821
|
+
|
|
822
|
+
### {Nome do Componente}
|
|
823
|
+
- **Biblioteca**: {Fluent UI | MudBlazor}
|
|
824
|
+
- **Componente**: `{ComponentName}`
|
|
825
|
+
- **Props Principais**:
|
|
826
|
+
- `prop1`: {descrição}
|
|
827
|
+
- `prop2`: {descrição}
|
|
828
|
+
- **Eventos**:
|
|
829
|
+
- `OnClick`: {descrição}
|
|
830
|
+
- **Estados**:
|
|
831
|
+
- Default: {descrição}
|
|
832
|
+
- Loading: {descrição}
|
|
833
|
+
- Error: {descrição}
|
|
834
|
+
- **Acessibilidade**:
|
|
835
|
+
- ARIA: {roles/labels}
|
|
836
|
+
- Keyboard: {navegação}
|
|
837
|
+
```
|
|
838
|
+
|
|
839
|
+
**Exemplo:**
|
|
840
|
+
|
|
841
|
+
```markdown
|
|
842
|
+
## Biblioteca Escolhida: Fluent UI Blazor
|
|
843
|
+
|
|
844
|
+
### Justificativa
|
|
845
|
+
Dashboard AI-first com chat integrado. Fluent UI oferece componentes nativos
|
|
846
|
+
de chat (FluentMessageBar, FluentProgress) e design Microsoft 365 consistente
|
|
847
|
+
com o restante do sistema.
|
|
848
|
+
|
|
849
|
+
## Componentes Mapeados
|
|
850
|
+
|
|
851
|
+
### Stat Card (Métricas de Vendas)
|
|
852
|
+
- **Biblioteca**: Fluent UI
|
|
853
|
+
- **Componente**: `FluentCard` + `FluentStack` + `FluentBadge`
|
|
854
|
+
- **Props Principais**:
|
|
855
|
+
- `Title`: "Vendas Hoje"
|
|
856
|
+
- `Value`: "R$ 45.200"
|
|
857
|
+
- `Change`: "+12%"
|
|
858
|
+
- `IsPositive`: true
|
|
859
|
+
- **Eventos**:
|
|
860
|
+
- `OnClick`: Navega para detalhes da métrica
|
|
861
|
+
- **Estados**:
|
|
862
|
+
- Default: Mostra valor + badge de mudança
|
|
863
|
+
- Loading: `FluentSkeleton` no lugar do valor
|
|
864
|
+
- Error: FluentMessageBar "Erro ao carregar"
|
|
865
|
+
- **Acessibilidade**:
|
|
866
|
+
- ARIA: role="region" aria-label="Estatísticas de vendas"
|
|
867
|
+
- Keyboard: Focável com Tab, Enter para expandir
|
|
868
|
+
|
|
869
|
+
### Data Table (Últimos Pedidos)
|
|
870
|
+
- **Biblioteca**: Fluent UI
|
|
871
|
+
- **Componente**: `FluentDataGrid<Order>`
|
|
872
|
+
- **Props Principais**:
|
|
873
|
+
- `Items`: `@_orders` (List<Order>)
|
|
874
|
+
- `ResizableColumns`: true
|
|
875
|
+
- `Virtualize`: true (se > 100 itens)
|
|
876
|
+
- **Colunas**:
|
|
877
|
+
1. PropertyColumn: OrderNumber (Sortable)
|
|
878
|
+
2. PropertyColumn: CustomerName (Sortable)
|
|
879
|
+
3. PropertyColumn: Total (Format="C", Sortable)
|
|
880
|
+
4. TemplateColumn: Ações (Ver, Editar)
|
|
881
|
+
- **Eventos**:
|
|
882
|
+
- `OnRowClick`: Expande detalhes inline
|
|
883
|
+
- **Estados**:
|
|
884
|
+
- Empty: "Nenhum pedido encontrado" com CTA "Criar pedido"
|
|
885
|
+
- Loading: FluentProgress acima da tabela
|
|
886
|
+
- Error: FluentMessageBar Intent="Error"
|
|
887
|
+
- **Acessibilidade**:
|
|
888
|
+
- ARIA: role="grid", aria-sort nos headers
|
|
889
|
+
- Keyboard: Navegação com setas, Enter para ações
|
|
890
|
+
```
|
|
891
|
+
|
|
892
|
+
### 3. ui-flows.md - Fluxos de Usuário
|
|
893
|
+
|
|
894
|
+
**Estrutura:**
|
|
895
|
+
```markdown
|
|
896
|
+
# UI Flows - {Feature Name}
|
|
897
|
+
|
|
898
|
+
## Fluxo 1: {Nome do Fluxo}
|
|
899
|
+
|
|
900
|
+
### Trigger
|
|
901
|
+
{O que inicia este fluxo}
|
|
902
|
+
|
|
903
|
+
### Passos
|
|
904
|
+
1. **{Tela/Componente}**: {Ação do usuário}
|
|
905
|
+
- {Resultado da ação}
|
|
906
|
+
- {Navegação/transição}
|
|
907
|
+
|
|
908
|
+
2. **{Tela/Componente}**: {Próxima ação}
|
|
909
|
+
...
|
|
910
|
+
|
|
911
|
+
### Happy Path
|
|
912
|
+
{Caminho ideal sem erros}
|
|
913
|
+
|
|
914
|
+
### Edge Cases
|
|
915
|
+
- **{Caso}**: {Como o sistema lida}
|
|
916
|
+
|
|
917
|
+
### Diagrama
|
|
918
|
+
[Fluxograma ASCII]
|
|
919
|
+
```
|
|
920
|
+
|
|
921
|
+
**Exemplo:**
|
|
922
|
+
|
|
923
|
+
```markdown
|
|
924
|
+
## Fluxo 1: Criar Novo Pedido
|
|
925
|
+
|
|
926
|
+
### Trigger
|
|
927
|
+
Usuário clica no botão [+ Novo Pedido] no dashboard
|
|
928
|
+
|
|
929
|
+
### Passos
|
|
930
|
+
|
|
931
|
+
1. **Dashboard**: Clica [+ Novo Pedido]
|
|
932
|
+
- Modal/Wizard abre com Fluent UI Wizard
|
|
933
|
+
- 3 steps: Cliente, Produtos, Revisão
|
|
934
|
+
|
|
935
|
+
2. **Step 1 - Sele ção de Cliente**:
|
|
936
|
+
- FluentAutocomplete para buscar cliente
|
|
937
|
+
- Ou [+ Novo Cliente] para criar inline
|
|
938
|
+
- [Próximo] habilitado apenas se cliente selecionado
|
|
939
|
+
|
|
940
|
+
3. **Step 2 - Adicionar Produtos**:
|
|
941
|
+
- FluentDataGrid com produtos disponíveis
|
|
942
|
+
- Coluna com FluentNumberField para quantidade
|
|
943
|
+
- [Adicionar] adiciona à lista do pedido
|
|
944
|
+
- Lista de produtos adicionados (removível)
|
|
945
|
+
- Total calculado em tempo real
|
|
946
|
+
|
|
947
|
+
4. **Step 3 - Revisão**:
|
|
948
|
+
- FluentCard resumo do pedido
|
|
949
|
+
- [Voltar] para editar
|
|
950
|
+
- [Confirmar] cria o pedido
|
|
951
|
+
|
|
952
|
+
5. **Confirmação**:
|
|
953
|
+
- FluentToast "Pedido #12348 criado com sucesso!"
|
|
954
|
+
- Navega para detalhes do pedido OU volta ao dashboard
|
|
955
|
+
|
|
956
|
+
### Happy Path
|
|
957
|
+
Dashboard → Wizard (3 steps) → Confirmação → Dashboard
|
|
958
|
+
|
|
959
|
+
### Edge Cases
|
|
960
|
+
- **Cliente não encontrado**: Oferece [+ Novo Cliente] inline
|
|
961
|
+
- **Produto sem estoque**: FluentMessageBar alerta, não permite adicionar
|
|
962
|
+
- **Rede falha no confirmar**: FluentDialog "Erro ao salvar" + [Tentar novamente]
|
|
963
|
+
- **Usuário fecha Wizard**: FluentDialog "Descartar pedido?" [Sim] [Não]
|
|
964
|
+
|
|
965
|
+
### Diagrama
|
|
966
|
+
|
|
967
|
+
```
|
|
968
|
+
[Dashboard]
|
|
969
|
+
│
|
|
970
|
+
├─[+ Novo Pedido]─┐
|
|
971
|
+
│ │
|
|
972
|
+
▼ │
|
|
973
|
+
[Wizard: Step 1] │
|
|
974
|
+
(Cliente) │
|
|
975
|
+
│ │
|
|
976
|
+
├─[Próximo] │
|
|
977
|
+
│ │
|
|
978
|
+
▼ │
|
|
979
|
+
[Wizard: Step 2] │
|
|
980
|
+
(Produtos) │
|
|
981
|
+
│ │
|
|
982
|
+
├─[Próximo] │
|
|
983
|
+
│ │
|
|
984
|
+
▼ │
|
|
985
|
+
[Wizard: Step 3] │
|
|
986
|
+
(Revisão) │
|
|
987
|
+
│ │
|
|
988
|
+
├─[Confirmar] │
|
|
989
|
+
│ │
|
|
990
|
+
▼ │
|
|
991
|
+
[✅ Pedido Criado] │
|
|
992
|
+
│ │
|
|
993
|
+
└─────────────────┘
|
|
994
|
+
[Dashboard]
|
|
995
|
+
```
|
|
996
|
+
```
|
|
997
|
+
|
|
998
|
+
### Checklist para FASE 1.5
|
|
999
|
+
|
|
1000
|
+
Ao gerar deliverables de UI/UX, validar:
|
|
1001
|
+
|
|
1002
|
+
- [ ] **ui-mockups.md**:
|
|
1003
|
+
- [ ] Wireframes ASCII de TODAS as telas
|
|
1004
|
+
- [ ] Descrições detalhadas (propósito, componentes, interações, estados)
|
|
1005
|
+
- [ ] Responsividade especificada (desktop + mobile)
|
|
1006
|
+
- [ ] Empty states e error states documentados
|
|
1007
|
+
|
|
1008
|
+
- [ ] **ui-components.md**:
|
|
1009
|
+
- [ ] Biblioteca escolhida justificada (Fluent UI vs MudBlazor)
|
|
1010
|
+
- [ ] Todos os componentes mapeados (nome + props + eventos)
|
|
1011
|
+
- [ ] Estados documentados (default, loading, error, empty)
|
|
1012
|
+
- [ ] Acessibilidade validada (ARIA, keyboard navigation)
|
|
1013
|
+
|
|
1014
|
+
- [ ] **ui-flows.md**:
|
|
1015
|
+
- [ ] Fluxos principais identificados (happy path)
|
|
1016
|
+
- [ ] Edge cases documentados (erro, vazio, retry)
|
|
1017
|
+
- [ ] Diagramas ASCII de cada fluxo
|
|
1018
|
+
- [ ] Navegação entre telas clara
|
|
1019
|
+
|
|
1020
|
+
- [ ] **decisions.md** (atualizar):
|
|
1021
|
+
- [ ] ADR: Por que Fluent UI (ou MudBlazor)?
|
|
1022
|
+
- [ ] ADR: Por que este layout específico?
|
|
1023
|
+
- [ ] Trade-offs discutidos (performance vs features)
|
|
1024
|
+
|
|
1025
|
+
---
|
|
1026
|
+
|
|
304
1027
|
## Documentação de Referência
|
|
305
1028
|
|
|
306
|
-
|
|
307
|
-
- [
|
|
308
|
-
- [Blazor
|
|
1029
|
+
### Fluent UI Blazor
|
|
1030
|
+
- [Fluent UI Blazor Docs](https://www.fluentui-blazor.net/)
|
|
1031
|
+
- [Fluent UI Blazor GitHub](https://github.com/microsoft/fluentui-blazor)
|
|
1032
|
+
- [Components Gallery](https://www.fluentui-blazor.net/Components)
|
|
1033
|
+
- **[Guia Completo: Fluent UI Setup](../../.morph/standards/fluent-ui-setup.md)**
|
|
1034
|
+
|
|
1035
|
+
### MudBlazor
|
|
1036
|
+
- [MudBlazor Docs](https://mudblazor.com/)
|
|
1037
|
+
- [Components Gallery](https://mudblazor.com/components/list)
|
|
1038
|
+
- [GitHub](https://github.com/MudBlazor/MudBlazor)
|
|
1039
|
+
|
|
1040
|
+
### Design & Acessibilidade
|
|
309
1041
|
- [WCAG Guidelines](https://www.w3.org/WAI/WCAG21/quickref/)
|
|
1042
|
+
- [Microsoft Fluent Design System](https://fluent2.microsoft.design/)
|
|
1043
|
+
- [Material Design](https://m3.material.io/)
|
|
1044
|
+
- [Blazor Components](https://learn.microsoft.com/aspnet/core/blazor/components/)
|
|
310
1045
|
|
|
311
1046
|
## Checklist de UI
|
|
312
1047
|
|