@polymorphism-tech/morph-spec 2.2.0 → 2.4.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 +314 -1673
- package/LICENSE +72 -72
- package/README.md +515 -516
- package/bin/detect-agents.js +225 -225
- package/bin/morph-spec.js +358 -173
- package/bin/render-template.js +302 -302
- package/bin/semantic-detect-agents.js +246 -246
- package/bin/task-manager.js +429 -0
- package/bin/validate-agents-skills.js +251 -251
- package/bin/validate-agents.js +69 -69
- package/bin/validate-phase.js +263 -263
- package/bin/validate.js +369 -0
- package/content/.azure/README.md +293 -293
- package/content/.azure/docs/azure-devops-setup.md +454 -454
- package/content/.azure/docs/branch-strategy.md +398 -398
- package/content/.azure/docs/local-development.md +515 -515
- package/content/.azure/pipelines/pipeline-variables.yml +34 -34
- package/content/.azure/pipelines/prod-pipeline.yml +319 -319
- package/content/.azure/pipelines/staging-pipeline.yml +234 -234
- package/content/.azure/pipelines/templates/build-dotnet.yml +75 -75
- package/content/.azure/pipelines/templates/deploy-app-service.yml +94 -94
- package/content/.azure/pipelines/templates/deploy-container-app.yml +120 -120
- package/content/.azure/pipelines/templates/infra-deploy.yml +90 -90
- package/content/.claude/commands/morph-apply.md +221 -158
- package/content/.claude/commands/morph-archive.md +79 -79
- package/content/.claude/commands/morph-infra.md +209 -209
- package/content/.claude/commands/morph-preflight.md +227 -0
- package/content/.claude/commands/morph-proposal.md +122 -101
- package/content/.claude/commands/morph-status.md +86 -86
- package/content/.claude/commands/morph-troubleshoot.md +122 -0
- package/content/.claude/settings.local.json +15 -15
- package/content/.claude/skills/checklists/code-review.md +226 -0
- package/content/.claude/skills/checklists/morph-checklist.md +117 -0
- package/content/.claude/skills/checklists/simulation-checklist.md +77 -0
- package/content/.claude/skills/infra/bicep-architect.md +126 -419
- package/content/.claude/skills/infra/container-specialist.md +131 -437
- package/content/.claude/skills/infra/devops-engineer.md +119 -405
- package/content/.claude/skills/integrations/asaas-financial.md +130 -333
- package/content/.claude/skills/integrations/azure-identity.md +142 -309
- package/content/.claude/skills/integrations/clerk-auth.md +108 -290
- package/content/.claude/skills/integrations/resend-email.md +119 -0
- package/content/.claude/skills/specialists/ai-system-architect.md +192 -604
- package/content/.claude/skills/specialists/azure-architect.md +142 -142
- package/content/.claude/skills/specialists/code-analyzer.md +235 -0
- package/content/.claude/skills/specialists/dotnet-senior.md +287 -0
- package/content/.claude/skills/specialists/ef-modeler.md +113 -200
- package/content/.claude/skills/specialists/hangfire-orchestrator.md +126 -245
- package/content/.claude/skills/specialists/ms-agent-expert.md +109 -263
- package/content/.claude/skills/specialists/po-pm-advisor.md +197 -197
- package/content/.claude/skills/specialists/standards-architect.md +156 -78
- package/content/.claude/skills/specialists/testing-specialist.md +126 -0
- package/content/.claude/skills/specialists/ui-ux-designer.md +191 -1060
- package/content/.claude/skills/stacks/dotnet-blazor.md +210 -588
- package/content/.claude/skills/stacks/dotnet-nextjs.md +154 -402
- package/content/.claude/skills/workflows/morph-replicate.md +213 -0
- package/content/.claude/{commands/morph-clarify.md → skills/workflows/phase-clarify.md} +5 -58
- package/content/.claude/{commands/morph-design.md → skills/workflows/phase-design.md} +16 -86
- package/content/.claude/{commands/morph-setup.md → skills/workflows/phase-setup.md} +9 -17
- package/content/.claude/skills/workflows/phase-tasks.md +164 -0
- package/content/.claude/{commands/morph-uiux.md → skills/workflows/phase-uiux.md} +15 -88
- package/content/.morph/.morphversion +5 -5
- package/content/.morph/archive/.gitkeep +25 -25
- package/content/.morph/config/agents.json +378 -242
- package/content/.morph/config/config.template.json +89 -108
- package/content/.morph/docs/STORY-DRIVEN-DEVELOPMENT.md +392 -392
- package/content/.morph/docs/workflows/design-impl.md +37 -0
- package/content/.morph/docs/workflows/fast-track.md +29 -0
- package/content/.morph/docs/workflows/full-morph.md +76 -0
- package/content/.morph/docs/workflows/standard.md +44 -0
- package/content/.morph/docs/workflows/ui-refresh.md +39 -0
- package/content/.morph/examples/api-nextjs/README.md +241 -241
- package/content/.morph/examples/api-nextjs/contracts.ts +307 -307
- package/content/.morph/examples/api-nextjs/spec.md +399 -399
- package/content/.morph/examples/api-nextjs/tasks.md +168 -168
- package/content/.morph/examples/micro-saas/README.md +125 -125
- package/content/.morph/examples/micro-saas/contracts.cs +358 -358
- package/content/.morph/examples/micro-saas/decisions.md +246 -246
- package/content/.morph/examples/micro-saas/spec.md +236 -236
- package/content/.morph/examples/micro-saas/tasks.md +150 -150
- package/content/.morph/examples/multi-agent/README.md +309 -309
- package/content/.morph/examples/multi-agent/contracts.cs +433 -433
- package/content/.morph/examples/multi-agent/spec.md +479 -479
- package/content/.morph/examples/multi-agent/tasks.md +185 -185
- package/content/.morph/examples/scheduled-reports/decisions.md +158 -0
- package/content/.morph/examples/scheduled-reports/proposal.md +95 -0
- package/content/.morph/examples/scheduled-reports/spec.md +267 -0
- package/content/.morph/examples/state-v3.json +188 -0
- package/content/.morph/features/.gitkeep +25 -25
- package/content/.morph/hooks/README.md +190 -239
- package/content/.morph/hooks/pre-commit-agents.sh +24 -24
- package/content/.morph/hooks/pre-commit-all.sh +48 -48
- package/content/.morph/hooks/pre-commit-specs.sh +49 -49
- package/content/.morph/hooks/pre-commit-tests.sh +60 -60
- package/content/.morph/project.md +160 -160
- package/content/.morph/schemas/agent.schema.json +296 -296
- package/content/.morph/schemas/tasks.schema.json +220 -0
- package/content/.morph/specs/.gitkeep +20 -20
- package/content/.morph/standards/agent-framework-blazor-ui.md +359 -0
- package/content/.morph/standards/agent-framework-production.md +410 -0
- package/content/.morph/standards/agent-framework-setup.md +413 -453
- package/content/.morph/standards/agent-framework-workflows.md +349 -0
- package/content/.morph/standards/architecture.md +325 -325
- package/content/.morph/standards/azure.md +605 -379
- package/content/.morph/standards/coding.md +377 -377
- package/content/.morph/standards/dotnet10-migration.md +520 -494
- package/content/.morph/standards/fluent-ui-setup.md +590 -590
- package/content/.morph/standards/migration-guide.md +514 -514
- package/content/.morph/standards/passkeys-auth.md +423 -423
- package/content/.morph/standards/vector-search-rag.md +536 -536
- package/content/.morph/state.json +17 -17
- package/content/.morph/templates/FluentDesignTheme.cs +149 -149
- package/content/.morph/templates/MudTheme.cs +281 -281
- package/content/.morph/templates/agent.cs +163 -172
- package/content/.morph/templates/clarify-questions.md +159 -0
- package/content/.morph/templates/component.razor +239 -239
- package/content/.morph/templates/contracts/Commands.cs +74 -0
- package/content/.morph/templates/contracts/Entities.cs +25 -0
- package/content/.morph/templates/contracts/Queries.cs +74 -0
- package/content/.morph/templates/contracts/README.md +74 -0
- package/content/.morph/templates/contracts.cs +217 -217
- package/content/.morph/templates/decisions.md +123 -106
- package/content/.morph/templates/design-system.css +226 -226
- package/content/.morph/templates/infra/.dockerignore.example +89 -89
- package/content/.morph/templates/infra/Dockerfile.example +82 -82
- package/content/.morph/templates/infra/README.md +286 -286
- package/content/.morph/templates/infra/app-insights.bicep +63 -63
- package/content/.morph/templates/infra/app-service.bicep +164 -164
- package/content/.morph/templates/infra/container-app-env.bicep +49 -49
- package/content/.morph/templates/infra/container-app.bicep +156 -156
- package/content/.morph/templates/infra/deploy-checklist.md +426 -0
- package/content/.morph/templates/infra/deploy.ps1 +229 -229
- package/content/.morph/templates/infra/deploy.sh +208 -208
- package/content/.morph/templates/infra/key-vault.bicep +91 -91
- package/content/.morph/templates/infra/main.bicep +189 -189
- package/content/.morph/templates/infra/parameters.dev.json +29 -29
- package/content/.morph/templates/infra/parameters.prod.json +29 -29
- package/content/.morph/templates/infra/parameters.staging.json +29 -29
- package/content/.morph/templates/infra/sql-database.bicep +103 -103
- package/content/.morph/templates/infra/storage.bicep +106 -106
- package/content/.morph/templates/integrations/asaas-client.cs +387 -387
- package/content/.morph/templates/integrations/asaas-webhook.cs +351 -351
- package/content/.morph/templates/integrations/azure-identity-config.cs +288 -288
- package/content/.morph/templates/integrations/clerk-config.cs +258 -258
- package/content/.morph/templates/job.cs +171 -171
- package/content/.morph/templates/migration.cs +83 -83
- package/content/.morph/templates/proposal.md +141 -155
- package/content/.morph/templates/recap.md +94 -105
- package/content/.morph/templates/repository.cs +141 -141
- package/content/.morph/templates/saas/subscription.cs +347 -347
- package/content/.morph/templates/saas/tenant.cs +338 -338
- package/content/.morph/templates/service.cs +139 -139
- package/content/.morph/templates/simulation.md +353 -0
- package/content/.morph/templates/spec.md +149 -148
- package/content/.morph/templates/sprint-status.yaml +68 -68
- package/content/.morph/templates/state.template.json +222 -222
- package/content/.morph/templates/story.md +143 -143
- package/content/.morph/templates/tasks.md +257 -235
- package/content/.morph/templates/test.cs +239 -239
- package/content/.morph/templates/ui-components.md +362 -276
- package/content/.morph/templates/ui-design-system.md +286 -286
- package/content/.morph/templates/ui-flows.md +336 -336
- package/content/.morph/templates/ui-mockups.md +133 -133
- package/content/.morph/test-infra/example.bicep +59 -59
- package/content/CLAUDE.md +150 -442
- package/content/README.md +79 -79
- package/detectors/config-detector.js +223 -223
- package/detectors/conversation-analyzer.js +163 -163
- package/detectors/index.js +84 -84
- package/detectors/standards-generator.js +275 -275
- package/detectors/structure-detector.js +245 -250
- package/docs/README.md +144 -149
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +977 -977
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +1048 -1048
- package/docs/api/scripts/collapse.js +38 -38
- package/docs/api/scripts/commonNav.js +28 -28
- package/docs/api/scripts/linenumber.js +25 -25
- package/docs/api/scripts/nav.js +12 -12
- package/docs/api/scripts/polyfill.js +3 -3
- package/docs/api/scripts/prettify/Apache-License-2.0.txt +202 -202
- package/docs/api/scripts/prettify/lang-css.js +2 -2
- package/docs/api/scripts/prettify/prettify.js +28 -28
- package/docs/api/scripts/search.js +98 -98
- package/docs/api/styles/jsdoc.css +776 -776
- package/docs/api/styles/prettify.css +80 -80
- package/docs/examples.md +328 -328
- package/docs/getting-started.md +301 -302
- package/docs/installation.md +361 -361
- package/docs/templates.md +418 -418
- package/docs/validation-checklist.md +265 -266
- package/package.json +80 -80
- package/scripts/postinstall.js +132 -132
- package/src/commands/advance-phase.js +183 -0
- package/src/commands/analyze-blazor-concurrency.js +193 -0
- package/src/commands/create-story.js +351 -351
- package/src/commands/detect-agents.js +139 -0
- package/src/commands/detect.js +104 -104
- package/src/commands/doctor.js +356 -280
- package/src/commands/generate.js +149 -149
- package/src/commands/init.js +258 -245
- package/src/commands/lint-fluent.js +352 -0
- package/src/commands/rollback-phase.js +185 -0
- package/src/commands/session-summary.js +291 -0
- package/src/commands/shard-spec.js +224 -224
- package/src/commands/sprint-status.js +250 -250
- package/src/commands/state.js +333 -333
- package/src/commands/sync.js +167 -167
- package/src/commands/task.js +78 -0
- package/src/commands/troubleshoot.js +222 -0
- package/src/commands/update.js +192 -159
- package/src/commands/validate-blazor-state.js +210 -0
- package/src/commands/validate-blazor.js +156 -0
- package/src/commands/validate-css.js +84 -0
- package/src/commands/validate-phase.js +221 -0
- package/src/lib/blazor-concurrency-analyzer.js +288 -0
- package/src/lib/blazor-state-validator.js +291 -0
- package/src/lib/blazor-validator.js +374 -0
- package/src/lib/complexity-analyzer.js +441 -292
- package/src/lib/continuous-validator.js +421 -0
- package/src/lib/css-validator.js +352 -0
- package/src/lib/decision-constraint-loader.js +109 -0
- package/src/lib/design-system-generator.js +298 -298
- package/src/lib/learning-system.js +520 -0
- package/src/lib/mockup-generator.js +366 -0
- package/src/lib/recap-generator.js +205 -0
- package/src/lib/state-manager.js +397 -340
- package/src/lib/troubleshoot-grep.js +194 -0
- package/src/lib/troubleshoot-index.js +144 -0
- package/src/lib/ui-detector.js +350 -0
- package/src/lib/validation-runner.js +231 -0
- package/src/lib/validators/architecture-validator.js +387 -0
- package/src/lib/validators/contract-compliance-validator.js +273 -0
- package/src/lib/validators/package-validator.js +360 -0
- package/src/lib/validators/ui-contrast-validator.js +422 -0
- package/src/utils/file-copier.js +179 -139
- package/src/utils/logger.js +32 -32
- package/src/utils/version-checker.js +175 -175
- package/content/.claude/commands/morph-costs.md +0 -206
- package/content/.claude/commands/morph-tasks.md +0 -319
- package/content/.claude/skills/specialists/cost-guardian.md +0 -110
- package/content/.claude/skills/stacks/shopify.md +0 -445
- package/content/.morph/config/azure-pricing.json +0 -70
- package/content/.morph/config/azure-pricing.schema.json +0 -50
- package/content/.morph/hooks/pre-commit-costs.sh +0 -91
- package/docs/api/cost-calculator.js.html +0 -513
- package/docs/api/design-system-generator.js.html +0 -382
- package/docs/api/global.html +0 -5263
- package/docs/api/index.html +0 -96
- package/docs/api/state-manager.js.html +0 -423
- package/src/commands/cost.js +0 -181
- package/src/commands/update-pricing.js +0 -206
- package/src/lib/cost-calculator.js +0 -429
|
@@ -1,336 +1,336 @@
|
|
|
1
|
-
# UI Flows - {{FEATURE_NAME_TITLE}}
|
|
2
|
-
|
|
3
|
-
> Fluxos de usuário completos mostrando navegação, decisões e edge cases.
|
|
4
|
-
> Documenta COMO o usuário se move pela feature do início ao fim.
|
|
5
|
-
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## Fluxo 1: {Nome do Fluxo Principal}
|
|
9
|
-
|
|
10
|
-
### Contexto
|
|
11
|
-
|
|
12
|
-
**Trigger (Gatilho):**
|
|
13
|
-
{O que inicia este fluxo? Ex: "Usuário clica em [+ Novo Pedido]"}
|
|
14
|
-
|
|
15
|
-
**Pré-condições:**
|
|
16
|
-
- {Condição 1 que deve ser verdadeira para iniciar o fluxo}
|
|
17
|
-
- {Condição 2}
|
|
18
|
-
|
|
19
|
-
**Objetivo:**
|
|
20
|
-
{O que o usuário quer alcançar ao final deste fluxo?}
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
### Happy Path (Caminho Ideal)
|
|
25
|
-
|
|
26
|
-
#### Passos
|
|
27
|
-
|
|
28
|
-
**1. {Tela/Componente Inicial}**: {Ação do usuário}
|
|
29
|
-
- Sistema: {Resposta do sistema}
|
|
30
|
-
- UI: {Mudança visual}
|
|
31
|
-
- Navegação: {Para onde vai}
|
|
32
|
-
|
|
33
|
-
**2. {Próxima Tela/Componente}**: {Próxima ação}
|
|
34
|
-
- Sistema: {Processamento backend}
|
|
35
|
-
- UI: {Feedback visual}
|
|
36
|
-
- Validação: {Regras aplicadas}
|
|
37
|
-
|
|
38
|
-
**3. {Tela/Componente Final}**: {Ação de conclusão}
|
|
39
|
-
- Sistema: {Persistência/salvamento}
|
|
40
|
-
- UI: {Mensagem de sucesso}
|
|
41
|
-
- Navegação: {Retorna para onde}
|
|
42
|
-
|
|
43
|
-
**Tempo estimado:** {X segundos/minutos para usuário completar}
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
### Diagrama de Fluxo (Happy Path)
|
|
48
|
-
|
|
49
|
-
```
|
|
50
|
-
┌─────────────────┐
|
|
51
|
-
│ Tela Inicial │
|
|
52
|
-
│ [Dashboard] │
|
|
53
|
-
└────────┬────────┘
|
|
54
|
-
│
|
|
55
|
-
│ Clica [+ Novo Pedido]
|
|
56
|
-
▼
|
|
57
|
-
┌─────────────────┐
|
|
58
|
-
│ Modal/Wizard │
|
|
59
|
-
│ Aberto │
|
|
60
|
-
└────────┬────────┘
|
|
61
|
-
│
|
|
62
|
-
│ ⟨Step 1⟩ Seleciona Cliente
|
|
63
|
-
▼
|
|
64
|
-
┌─────────────────┐
|
|
65
|
-
│ Cliente │
|
|
66
|
-
│ Selecionado │
|
|
67
|
-
└────────┬────────┘
|
|
68
|
-
│
|
|
69
|
-
│ Clica [Próximo]
|
|
70
|
-
▼
|
|
71
|
-
┌─────────────────┐
|
|
72
|
-
│ ⟨Step 2⟩ │
|
|
73
|
-
│ Produtos │
|
|
74
|
-
└────────┬────────┘
|
|
75
|
-
│
|
|
76
|
-
│ Adiciona Produtos
|
|
77
|
-
│ Total Calculado
|
|
78
|
-
▼
|
|
79
|
-
┌─────────────────┐
|
|
80
|
-
│ Lista de │
|
|
81
|
-
│ Produtos OK │
|
|
82
|
-
└────────┬────────┘
|
|
83
|
-
│
|
|
84
|
-
│ Clica [Próximo]
|
|
85
|
-
▼
|
|
86
|
-
┌─────────────────┐
|
|
87
|
-
│ ⟨Step 3⟩ │
|
|
88
|
-
│ Revisão │
|
|
89
|
-
└────────┬────────┘
|
|
90
|
-
│
|
|
91
|
-
│ Clica [Confirmar]
|
|
92
|
-
▼
|
|
93
|
-
┌─────────────────┐
|
|
94
|
-
│ ✅ Pedido │
|
|
95
|
-
│ Criado! │
|
|
96
|
-
└────────┬────────┘
|
|
97
|
-
│
|
|
98
|
-
│ Toast "Sucesso!"
|
|
99
|
-
│ Navega para Detalhes
|
|
100
|
-
▼
|
|
101
|
-
┌─────────────────┐
|
|
102
|
-
│ Tela Detalhes │
|
|
103
|
-
│ Pedido #12345 │
|
|
104
|
-
└─────────────────┘
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
---
|
|
108
|
-
|
|
109
|
-
### Edge Cases (Casos de Exceção)
|
|
110
|
-
|
|
111
|
-
#### 1. {Nome do Edge Case}
|
|
112
|
-
|
|
113
|
-
**Cenário:**
|
|
114
|
-
{Descrição da situação excepcional}
|
|
115
|
-
|
|
116
|
-
**Como o sistema lida:**
|
|
117
|
-
```
|
|
118
|
-
┌─────────────────┐
|
|
119
|
-
│ Passo Normal │
|
|
120
|
-
└────────┬────────┘
|
|
121
|
-
│
|
|
122
|
-
│ ❌ {Erro/Condição}
|
|
123
|
-
▼
|
|
124
|
-
┌─────────────────┐
|
|
125
|
-
│ Mensagem Erro │
|
|
126
|
-
│ FluentDialog │
|
|
127
|
-
└────────┬────────┘
|
|
128
|
-
│
|
|
129
|
-
┌────┴────┐
|
|
130
|
-
│ │
|
|
131
|
-
▼ ▼
|
|
132
|
-
[Tentar] [Cancelar]
|
|
133
|
-
Novamente
|
|
134
|
-
│ │
|
|
135
|
-
│ └──▶ [Volta Dashboard]
|
|
136
|
-
│
|
|
137
|
-
└──▶ [Repete Passo]
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
**UI:**
|
|
141
|
-
- Componente: {FluentDialog, FluentMessageBar, etc}
|
|
142
|
-
- Mensagem: "{Texto exato da mensagem}"
|
|
143
|
-
- Ações disponíveis: {Botões/links}
|
|
144
|
-
|
|
145
|
-
**Exemplo de código:**
|
|
146
|
-
```razor
|
|
147
|
-
@if (!string.IsNullOrEmpty(_error))
|
|
148
|
-
{
|
|
149
|
-
<FluentMessageBar Intent="MessageIntent.Error">
|
|
150
|
-
@_error
|
|
151
|
-
<FluentButton OnClick="@Retry">Tentar Novamente</FluentButton>
|
|
152
|
-
</FluentMessageBar>
|
|
153
|
-
}
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
---
|
|
157
|
-
|
|
158
|
-
#### 2. {Outro Edge Case}
|
|
159
|
-
|
|
160
|
-
{Repita a estrutura acima}
|
|
161
|
-
|
|
162
|
-
---
|
|
163
|
-
|
|
164
|
-
### Fluxos Alternativos
|
|
165
|
-
|
|
166
|
-
#### Alt 1: {Nome do Fluxo Alternativo}
|
|
167
|
-
|
|
168
|
-
**Diverge em:** {Em qual passo do happy path este fluxo se ramifica}
|
|
169
|
-
|
|
170
|
-
**Condição:** {O que causa a divergência}
|
|
171
|
-
|
|
172
|
-
**Passos:**
|
|
173
|
-
1. {Passo alternativo 1}
|
|
174
|
-
2. {Passo alternativo 2}
|
|
175
|
-
3. {Convergência de volta ao happy path OU conclusão diferente}
|
|
176
|
-
|
|
177
|
-
**Diagrama:**
|
|
178
|
-
```
|
|
179
|
-
[Happy Path]
|
|
180
|
-
│
|
|
181
|
-
├─{Condição}──▶ [Fluxo Alt]
|
|
182
|
-
│ │
|
|
183
|
-
│ └──▶ [Converge]
|
|
184
|
-
▼
|
|
185
|
-
[Continua...]
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
---
|
|
189
|
-
|
|
190
|
-
## Fluxo 2: {Segundo Fluxo Importante}
|
|
191
|
-
|
|
192
|
-
{Repita toda a estrutura acima para cada fluxo principal}
|
|
193
|
-
|
|
194
|
-
---
|
|
195
|
-
|
|
196
|
-
## Interações Comuns (Micro-Fluxos)
|
|
197
|
-
|
|
198
|
-
### {Ação Rápida - Ex: "Buscar Item"}
|
|
199
|
-
|
|
200
|
-
**Trigger:** {Usuário digita na search bar}
|
|
201
|
-
|
|
202
|
-
**Fluxo:**
|
|
203
|
-
```
|
|
204
|
-
[Input vazio] ──▶ [Usuário digita] ──▶ [Debounce 300ms] ──▶ [API Call]
|
|
205
|
-
│
|
|
206
|
-
▼
|
|
207
|
-
[Resultados]
|
|
208
|
-
│
|
|
209
|
-
┌─────────────┴──────────┐
|
|
210
|
-
▼ ▼
|
|
211
|
-
[Tem Resultados] [Vazio]
|
|
212
|
-
│ │
|
|
213
|
-
▼ ▼
|
|
214
|
-
[Mostra Lista] [Mostra "Não encontrado"]
|
|
215
|
-
```
|
|
216
|
-
|
|
217
|
-
**Componente:** `FluentAutocomplete`
|
|
218
|
-
|
|
219
|
-
**Código:**
|
|
220
|
-
```razor
|
|
221
|
-
<FluentAutocomplete TItem="Item"
|
|
222
|
-
SearchAsync="@SearchItemsAsync"
|
|
223
|
-
Placeholder="Buscar item..."
|
|
224
|
-
MinLength="2"
|
|
225
|
-
Debounce="300">
|
|
226
|
-
<ItemTemplate Context="item">
|
|
227
|
-
@item.Name
|
|
228
|
-
</ItemTemplate>
|
|
229
|
-
</FluentAutocomplete>
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
---
|
|
233
|
-
|
|
234
|
-
## Mapa de Navegação Completo
|
|
235
|
-
|
|
236
|
-
Visão geral de TODAS as telas e como se conectam:
|
|
237
|
-
|
|
238
|
-
```
|
|
239
|
-
┌──────────────┐
|
|
240
|
-
│ Dashboard │
|
|
241
|
-
└──────┬───────┘
|
|
242
|
-
│
|
|
243
|
-
┌─────────────────┼─────────────────┐
|
|
244
|
-
│ │ │
|
|
245
|
-
▼ ▼ ▼
|
|
246
|
-
┌─────────┐ ┌──────────┐ ┌─────────┐
|
|
247
|
-
│ Pedidos │ │ Clientes │ │Produtos │
|
|
248
|
-
└────┬────┘ └────┬─────┘ └────┬────┘
|
|
249
|
-
│ │ │
|
|
250
|
-
▼ ▼ ▼
|
|
251
|
-
[+ Novo] [+ Novo] [+ Novo]
|
|
252
|
-
│ │ │
|
|
253
|
-
└────────────────┴──────────────────┬┘
|
|
254
|
-
│
|
|
255
|
-
▼
|
|
256
|
-
┌───────────────┐
|
|
257
|
-
│ Modal Wizard │
|
|
258
|
-
│ (3 steps) │
|
|
259
|
-
└───────┬───────┘
|
|
260
|
-
│
|
|
261
|
-
▼
|
|
262
|
-
[Confirmar]
|
|
263
|
-
│
|
|
264
|
-
▼
|
|
265
|
-
┌───────────────┐
|
|
266
|
-
│ Tela Detalhes │
|
|
267
|
-
└───────┬───────┘
|
|
268
|
-
│
|
|
269
|
-
┌───────┴───────┐
|
|
270
|
-
│ │
|
|
271
|
-
▼ ▼
|
|
272
|
-
[Editar] [Voltar]
|
|
273
|
-
│ │
|
|
274
|
-
└───────┬───────┘
|
|
275
|
-
│
|
|
276
|
-
▼
|
|
277
|
-
[Dashboard]
|
|
278
|
-
```
|
|
279
|
-
|
|
280
|
-
---
|
|
281
|
-
|
|
282
|
-
## Estados de Loading
|
|
283
|
-
|
|
284
|
-
### {Onde há loading na feature}
|
|
285
|
-
|
|
286
|
-
**1. Carregamento Inicial:**
|
|
287
|
-
- **Onde:** {Primeira tela ao abrir}
|
|
288
|
-
- **Componente:** `FluentSkeleton` ou `FluentProgress`
|
|
289
|
-
- **Duração esperada:** {X ms}
|
|
290
|
-
|
|
291
|
-
**2. Carregamento de Ação:**
|
|
292
|
-
- **Onde:** {Ao submeter form, por exemplo}
|
|
293
|
-
- **Componente:** `FluentButton` com `Loading="true"`
|
|
294
|
-
- **Duração esperada:** {X ms}
|
|
295
|
-
|
|
296
|
-
**3. Carregamento Incremental:**
|
|
297
|
-
- **Onde:** {Infinite scroll, paginação}
|
|
298
|
-
- **Componente:** `FluentProgress` no rodapé
|
|
299
|
-
- **Duração esperada:** {X ms}
|
|
300
|
-
|
|
301
|
-
---
|
|
302
|
-
|
|
303
|
-
## Validações e Feedback
|
|
304
|
-
|
|
305
|
-
### Validações Client-Side
|
|
306
|
-
|
|
307
|
-
| Campo | Validação | Mensagem de Erro | Componente |
|
|
308
|
-
|-------|-----------|------------------|------------|
|
|
309
|
-
| {Nome} | Required | "Campo obrigatório" | FluentTextField |
|
|
310
|
-
| {Email} | Email format | "Email inválido" | FluentTextField |
|
|
311
|
-
| {CPF} | CPF válido | "CPF inválido" | FluentTextField |
|
|
312
|
-
|
|
313
|
-
### Validações Server-Side
|
|
314
|
-
|
|
315
|
-
| Ação | Validação | Erro Possível | Como Mostra |
|
|
316
|
-
|------|-----------|---------------|-------------|
|
|
317
|
-
| Criar Pedido | Cliente ativo | "Cliente inativo" | FluentMessageBar |
|
|
318
|
-
| Adicionar Produto | Estoque > 0 | "Sem estoque" | FluentDialog |
|
|
319
|
-
|
|
320
|
-
---
|
|
321
|
-
|
|
322
|
-
## Checklist de Fluxos
|
|
323
|
-
|
|
324
|
-
- [ ] Happy path documentado com todos os passos
|
|
325
|
-
- [ ] Diagramas ASCII de cada fluxo
|
|
326
|
-
- [ ] Edge cases identificados (erro, vazio, retry)
|
|
327
|
-
- [ ] Fluxos alternativos mapeados
|
|
328
|
-
- [ ] Loading states especificados
|
|
329
|
-
- [ ] Validações client-side e server-side listadas
|
|
330
|
-
- [ ] Mensagens de erro/sucesso definidas
|
|
331
|
-
- [ ] Navegação entre telas clara
|
|
332
|
-
- [ ] Tempo estimado de cada fluxo
|
|
333
|
-
|
|
334
|
-
---
|
|
335
|
-
|
|
336
|
-
*Template MORPH-SPEC v2.1.0 by Polymorphism Tech*
|
|
1
|
+
# UI Flows - {{FEATURE_NAME_TITLE}}
|
|
2
|
+
|
|
3
|
+
> Fluxos de usuário completos mostrando navegação, decisões e edge cases.
|
|
4
|
+
> Documenta COMO o usuário se move pela feature do início ao fim.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Fluxo 1: {Nome do Fluxo Principal}
|
|
9
|
+
|
|
10
|
+
### Contexto
|
|
11
|
+
|
|
12
|
+
**Trigger (Gatilho):**
|
|
13
|
+
{O que inicia este fluxo? Ex: "Usuário clica em [+ Novo Pedido]"}
|
|
14
|
+
|
|
15
|
+
**Pré-condições:**
|
|
16
|
+
- {Condição 1 que deve ser verdadeira para iniciar o fluxo}
|
|
17
|
+
- {Condição 2}
|
|
18
|
+
|
|
19
|
+
**Objetivo:**
|
|
20
|
+
{O que o usuário quer alcançar ao final deste fluxo?}
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
### Happy Path (Caminho Ideal)
|
|
25
|
+
|
|
26
|
+
#### Passos
|
|
27
|
+
|
|
28
|
+
**1. {Tela/Componente Inicial}**: {Ação do usuário}
|
|
29
|
+
- Sistema: {Resposta do sistema}
|
|
30
|
+
- UI: {Mudança visual}
|
|
31
|
+
- Navegação: {Para onde vai}
|
|
32
|
+
|
|
33
|
+
**2. {Próxima Tela/Componente}**: {Próxima ação}
|
|
34
|
+
- Sistema: {Processamento backend}
|
|
35
|
+
- UI: {Feedback visual}
|
|
36
|
+
- Validação: {Regras aplicadas}
|
|
37
|
+
|
|
38
|
+
**3. {Tela/Componente Final}**: {Ação de conclusão}
|
|
39
|
+
- Sistema: {Persistência/salvamento}
|
|
40
|
+
- UI: {Mensagem de sucesso}
|
|
41
|
+
- Navegação: {Retorna para onde}
|
|
42
|
+
|
|
43
|
+
**Tempo estimado:** {X segundos/minutos para usuário completar}
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
### Diagrama de Fluxo (Happy Path)
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
┌─────────────────┐
|
|
51
|
+
│ Tela Inicial │
|
|
52
|
+
│ [Dashboard] │
|
|
53
|
+
└────────┬────────┘
|
|
54
|
+
│
|
|
55
|
+
│ Clica [+ Novo Pedido]
|
|
56
|
+
▼
|
|
57
|
+
┌─────────────────┐
|
|
58
|
+
│ Modal/Wizard │
|
|
59
|
+
│ Aberto │
|
|
60
|
+
└────────┬────────┘
|
|
61
|
+
│
|
|
62
|
+
│ ⟨Step 1⟩ Seleciona Cliente
|
|
63
|
+
▼
|
|
64
|
+
┌─────────────────┐
|
|
65
|
+
│ Cliente │
|
|
66
|
+
│ Selecionado │
|
|
67
|
+
└────────┬────────┘
|
|
68
|
+
│
|
|
69
|
+
│ Clica [Próximo]
|
|
70
|
+
▼
|
|
71
|
+
┌─────────────────┐
|
|
72
|
+
│ ⟨Step 2⟩ │
|
|
73
|
+
│ Produtos │
|
|
74
|
+
└────────┬────────┘
|
|
75
|
+
│
|
|
76
|
+
│ Adiciona Produtos
|
|
77
|
+
│ Total Calculado
|
|
78
|
+
▼
|
|
79
|
+
┌─────────────────┐
|
|
80
|
+
│ Lista de │
|
|
81
|
+
│ Produtos OK │
|
|
82
|
+
└────────┬────────┘
|
|
83
|
+
│
|
|
84
|
+
│ Clica [Próximo]
|
|
85
|
+
▼
|
|
86
|
+
┌─────────────────┐
|
|
87
|
+
│ ⟨Step 3⟩ │
|
|
88
|
+
│ Revisão │
|
|
89
|
+
└────────┬────────┘
|
|
90
|
+
│
|
|
91
|
+
│ Clica [Confirmar]
|
|
92
|
+
▼
|
|
93
|
+
┌─────────────────┐
|
|
94
|
+
│ ✅ Pedido │
|
|
95
|
+
│ Criado! │
|
|
96
|
+
└────────┬────────┘
|
|
97
|
+
│
|
|
98
|
+
│ Toast "Sucesso!"
|
|
99
|
+
│ Navega para Detalhes
|
|
100
|
+
▼
|
|
101
|
+
┌─────────────────┐
|
|
102
|
+
│ Tela Detalhes │
|
|
103
|
+
│ Pedido #12345 │
|
|
104
|
+
└─────────────────┘
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
### Edge Cases (Casos de Exceção)
|
|
110
|
+
|
|
111
|
+
#### 1. {Nome do Edge Case}
|
|
112
|
+
|
|
113
|
+
**Cenário:**
|
|
114
|
+
{Descrição da situação excepcional}
|
|
115
|
+
|
|
116
|
+
**Como o sistema lida:**
|
|
117
|
+
```
|
|
118
|
+
┌─────────────────┐
|
|
119
|
+
│ Passo Normal │
|
|
120
|
+
└────────┬────────┘
|
|
121
|
+
│
|
|
122
|
+
│ ❌ {Erro/Condição}
|
|
123
|
+
▼
|
|
124
|
+
┌─────────────────┐
|
|
125
|
+
│ Mensagem Erro │
|
|
126
|
+
│ FluentDialog │
|
|
127
|
+
└────────┬────────┘
|
|
128
|
+
│
|
|
129
|
+
┌────┴────┐
|
|
130
|
+
│ │
|
|
131
|
+
▼ ▼
|
|
132
|
+
[Tentar] [Cancelar]
|
|
133
|
+
Novamente
|
|
134
|
+
│ │
|
|
135
|
+
│ └──▶ [Volta Dashboard]
|
|
136
|
+
│
|
|
137
|
+
└──▶ [Repete Passo]
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
**UI:**
|
|
141
|
+
- Componente: {FluentDialog, FluentMessageBar, etc}
|
|
142
|
+
- Mensagem: "{Texto exato da mensagem}"
|
|
143
|
+
- Ações disponíveis: {Botões/links}
|
|
144
|
+
|
|
145
|
+
**Exemplo de código:**
|
|
146
|
+
```razor
|
|
147
|
+
@if (!string.IsNullOrEmpty(_error))
|
|
148
|
+
{
|
|
149
|
+
<FluentMessageBar Intent="MessageIntent.Error">
|
|
150
|
+
@_error
|
|
151
|
+
<FluentButton OnClick="@Retry">Tentar Novamente</FluentButton>
|
|
152
|
+
</FluentMessageBar>
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
#### 2. {Outro Edge Case}
|
|
159
|
+
|
|
160
|
+
{Repita a estrutura acima}
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
### Fluxos Alternativos
|
|
165
|
+
|
|
166
|
+
#### Alt 1: {Nome do Fluxo Alternativo}
|
|
167
|
+
|
|
168
|
+
**Diverge em:** {Em qual passo do happy path este fluxo se ramifica}
|
|
169
|
+
|
|
170
|
+
**Condição:** {O que causa a divergência}
|
|
171
|
+
|
|
172
|
+
**Passos:**
|
|
173
|
+
1. {Passo alternativo 1}
|
|
174
|
+
2. {Passo alternativo 2}
|
|
175
|
+
3. {Convergência de volta ao happy path OU conclusão diferente}
|
|
176
|
+
|
|
177
|
+
**Diagrama:**
|
|
178
|
+
```
|
|
179
|
+
[Happy Path]
|
|
180
|
+
│
|
|
181
|
+
├─{Condição}──▶ [Fluxo Alt]
|
|
182
|
+
│ │
|
|
183
|
+
│ └──▶ [Converge]
|
|
184
|
+
▼
|
|
185
|
+
[Continua...]
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## Fluxo 2: {Segundo Fluxo Importante}
|
|
191
|
+
|
|
192
|
+
{Repita toda a estrutura acima para cada fluxo principal}
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## Interações Comuns (Micro-Fluxos)
|
|
197
|
+
|
|
198
|
+
### {Ação Rápida - Ex: "Buscar Item"}
|
|
199
|
+
|
|
200
|
+
**Trigger:** {Usuário digita na search bar}
|
|
201
|
+
|
|
202
|
+
**Fluxo:**
|
|
203
|
+
```
|
|
204
|
+
[Input vazio] ──▶ [Usuário digita] ──▶ [Debounce 300ms] ──▶ [API Call]
|
|
205
|
+
│
|
|
206
|
+
▼
|
|
207
|
+
[Resultados]
|
|
208
|
+
│
|
|
209
|
+
┌─────────────┴──────────┐
|
|
210
|
+
▼ ▼
|
|
211
|
+
[Tem Resultados] [Vazio]
|
|
212
|
+
│ │
|
|
213
|
+
▼ ▼
|
|
214
|
+
[Mostra Lista] [Mostra "Não encontrado"]
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
**Componente:** `FluentAutocomplete`
|
|
218
|
+
|
|
219
|
+
**Código:**
|
|
220
|
+
```razor
|
|
221
|
+
<FluentAutocomplete TItem="Item"
|
|
222
|
+
SearchAsync="@SearchItemsAsync"
|
|
223
|
+
Placeholder="Buscar item..."
|
|
224
|
+
MinLength="2"
|
|
225
|
+
Debounce="300">
|
|
226
|
+
<ItemTemplate Context="item">
|
|
227
|
+
@item.Name
|
|
228
|
+
</ItemTemplate>
|
|
229
|
+
</FluentAutocomplete>
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## Mapa de Navegação Completo
|
|
235
|
+
|
|
236
|
+
Visão geral de TODAS as telas e como se conectam:
|
|
237
|
+
|
|
238
|
+
```
|
|
239
|
+
┌──────────────┐
|
|
240
|
+
│ Dashboard │
|
|
241
|
+
└──────┬───────┘
|
|
242
|
+
│
|
|
243
|
+
┌─────────────────┼─────────────────┐
|
|
244
|
+
│ │ │
|
|
245
|
+
▼ ▼ ▼
|
|
246
|
+
┌─────────┐ ┌──────────┐ ┌─────────┐
|
|
247
|
+
│ Pedidos │ │ Clientes │ │Produtos │
|
|
248
|
+
└────┬────┘ └────┬─────┘ └────┬────┘
|
|
249
|
+
│ │ │
|
|
250
|
+
▼ ▼ ▼
|
|
251
|
+
[+ Novo] [+ Novo] [+ Novo]
|
|
252
|
+
│ │ │
|
|
253
|
+
└────────────────┴──────────────────┬┘
|
|
254
|
+
│
|
|
255
|
+
▼
|
|
256
|
+
┌───────────────┐
|
|
257
|
+
│ Modal Wizard │
|
|
258
|
+
│ (3 steps) │
|
|
259
|
+
└───────┬───────┘
|
|
260
|
+
│
|
|
261
|
+
▼
|
|
262
|
+
[Confirmar]
|
|
263
|
+
│
|
|
264
|
+
▼
|
|
265
|
+
┌───────────────┐
|
|
266
|
+
│ Tela Detalhes │
|
|
267
|
+
└───────┬───────┘
|
|
268
|
+
│
|
|
269
|
+
┌───────┴───────┐
|
|
270
|
+
│ │
|
|
271
|
+
▼ ▼
|
|
272
|
+
[Editar] [Voltar]
|
|
273
|
+
│ │
|
|
274
|
+
└───────┬───────┘
|
|
275
|
+
│
|
|
276
|
+
▼
|
|
277
|
+
[Dashboard]
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
## Estados de Loading
|
|
283
|
+
|
|
284
|
+
### {Onde há loading na feature}
|
|
285
|
+
|
|
286
|
+
**1. Carregamento Inicial:**
|
|
287
|
+
- **Onde:** {Primeira tela ao abrir}
|
|
288
|
+
- **Componente:** `FluentSkeleton` ou `FluentProgress`
|
|
289
|
+
- **Duração esperada:** {X ms}
|
|
290
|
+
|
|
291
|
+
**2. Carregamento de Ação:**
|
|
292
|
+
- **Onde:** {Ao submeter form, por exemplo}
|
|
293
|
+
- **Componente:** `FluentButton` com `Loading="true"`
|
|
294
|
+
- **Duração esperada:** {X ms}
|
|
295
|
+
|
|
296
|
+
**3. Carregamento Incremental:**
|
|
297
|
+
- **Onde:** {Infinite scroll, paginação}
|
|
298
|
+
- **Componente:** `FluentProgress` no rodapé
|
|
299
|
+
- **Duração esperada:** {X ms}
|
|
300
|
+
|
|
301
|
+
---
|
|
302
|
+
|
|
303
|
+
## Validações e Feedback
|
|
304
|
+
|
|
305
|
+
### Validações Client-Side
|
|
306
|
+
|
|
307
|
+
| Campo | Validação | Mensagem de Erro | Componente |
|
|
308
|
+
|-------|-----------|------------------|------------|
|
|
309
|
+
| {Nome} | Required | "Campo obrigatório" | FluentTextField |
|
|
310
|
+
| {Email} | Email format | "Email inválido" | FluentTextField |
|
|
311
|
+
| {CPF} | CPF válido | "CPF inválido" | FluentTextField |
|
|
312
|
+
|
|
313
|
+
### Validações Server-Side
|
|
314
|
+
|
|
315
|
+
| Ação | Validação | Erro Possível | Como Mostra |
|
|
316
|
+
|------|-----------|---------------|-------------|
|
|
317
|
+
| Criar Pedido | Cliente ativo | "Cliente inativo" | FluentMessageBar |
|
|
318
|
+
| Adicionar Produto | Estoque > 0 | "Sem estoque" | FluentDialog |
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
## Checklist de Fluxos
|
|
323
|
+
|
|
324
|
+
- [ ] Happy path documentado com todos os passos
|
|
325
|
+
- [ ] Diagramas ASCII de cada fluxo
|
|
326
|
+
- [ ] Edge cases identificados (erro, vazio, retry)
|
|
327
|
+
- [ ] Fluxos alternativos mapeados
|
|
328
|
+
- [ ] Loading states especificados
|
|
329
|
+
- [ ] Validações client-side e server-side listadas
|
|
330
|
+
- [ ] Mensagens de erro/sucesso definidas
|
|
331
|
+
- [ ] Navegação entre telas clara
|
|
332
|
+
- [ ] Tempo estimado de cada fluxo
|
|
333
|
+
|
|
334
|
+
---
|
|
335
|
+
|
|
336
|
+
*Template MORPH-SPEC v2.1.0 by Polymorphism Tech*
|