@polymorphism-tech/morph-spec 3.2.0 → 4.3.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/README.md +1 -14
- package/bin/detect-agents.js +1 -1
- package/bin/morph-spec.js +403 -40
- package/bin/validate.js +5 -5
- package/docs/getting-started.md +0 -5
- package/docs/next-generation/AGENTS.md +521 -0
- package/docs/next-generation/ANALYSIS.md +555 -0
- package/docs/next-generation/ARCHITECTURE.md +436 -0
- package/docs/next-generation/CONTEXT-OPTIMIZATION.md +267 -0
- package/docs/next-generation/EXECUTION-FLOW.md +274 -0
- package/docs/next-generation/FEATURES.md +688 -0
- package/docs/next-generation/META-PROMPTS.md +235 -0
- package/docs/next-generation/MIGRATION-GUIDE.md +253 -0
- package/docs/next-generation/README.md +231 -0
- package/docs/next-generation/ROADMAP.md +801 -0
- package/docs/next-generation/THREAD-MANAGEMENT.md +240 -0
- package/docs/validation-checklist.md +0 -1
- package/package.json +5 -5
- package/src/commands/agents/agents-fuse.js +96 -0
- package/src/commands/agents/index.js +4 -0
- package/src/commands/agents/micro-agent.js +112 -0
- package/src/commands/{spawn-team.js → agents/spawn-team.js} +237 -172
- package/src/commands/agents/squad-template.js +146 -0
- package/src/commands/analytics/analytics.js +176 -0
- package/src/commands/context/context-prime.js +63 -0
- package/src/commands/context/core-four.js +54 -0
- package/src/commands/{create-story.js → feature/create-story.js} +357 -354
- package/src/commands/feature/index.js +6 -0
- package/src/commands/{shard-spec.js → feature/shard-spec.js} +2 -2
- package/src/commands/{sprint-status.js → feature/sprint-status.js} +1 -1
- package/src/commands/{generate-context.js → generation/generate-context.js} +40 -40
- package/src/commands/{generate.js → generation/generate.js} +4 -4
- package/src/commands/generation/index.js +5 -0
- package/src/commands/index.js +16 -0
- package/src/commands/{capture-pattern.js → learning/capture-pattern.js} +121 -121
- package/src/commands/learning/index.js +5 -0
- package/src/commands/mcp/mcp.js +102 -0
- package/src/commands/{detect-agents.js → project/detect-agents.js} +178 -178
- package/src/commands/project/detect-workflow.js +174 -0
- package/src/commands/{detect.js → project/detect.js} +104 -104
- package/src/commands/{doctor.js → project/doctor.js} +221 -4
- package/src/commands/project/index.js +10 -0
- package/src/commands/{init.js → project/init.js} +305 -295
- package/src/commands/{sync.js → project/sync.js} +167 -167
- package/src/commands/{update.js → project/update.js} +240 -240
- package/src/commands/{advance-phase.js → state/advance-phase.js} +101 -25
- package/src/commands/{approve.js → state/approve.js} +221 -221
- package/src/commands/state/index.js +8 -0
- package/src/commands/{rollback-phase.js → state/rollback-phase.js} +185 -185
- package/src/commands/{state.js → state/state.js} +334 -334
- package/src/commands/{validate-phase.js → state/validate-phase.js} +221 -221
- package/src/commands/tasks/index.js +4 -0
- package/src/commands/{task.js → tasks/task.js} +78 -78
- package/src/commands/templates/index.js +8 -0
- package/src/commands/templates/template-customize.js +101 -0
- package/src/commands/templates/template-list.js +128 -0
- package/src/commands/templates/template-render.js +174 -0
- package/src/commands/templates/template-show.js +131 -0
- package/src/commands/templates/template-validate.js +91 -0
- package/src/commands/threads/thread-template.js +103 -0
- package/src/commands/threads/threads.js +261 -0
- package/src/commands/trust/trust.js +205 -0
- package/src/commands/utils/index.js +7 -0
- package/src/commands/{session-summary.js → utils/session-summary.js} +291 -291
- package/src/commands/{troubleshoot.js → utils/troubleshoot.js} +222 -222
- package/src/commands/{analyze-blazor-concurrency.js → validation/analyze-blazor-concurrency.js} +193 -193
- package/src/commands/validation/index.js +8 -0
- package/src/commands/{lint-fluent.js → validation/lint-fluent.js} +352 -352
- package/src/commands/{validate-blazor-state.js → validation/validate-blazor-state.js} +210 -210
- package/src/commands/{validate-blazor.js → validation/validate-blazor.js} +156 -156
- package/src/commands/{validate-css.js → validation/validate-css.js} +84 -84
- package/src/core/index.js +10 -0
- package/src/{orchestrator.js → core/orchestrator.js} +8 -8
- package/src/core/registry/command-registry.js +302 -0
- package/src/core/registry/index.js +8 -0
- package/src/core/registry/validator-registry.js +204 -0
- package/src/core/state/index.js +8 -0
- package/src/{lib → core/state}/phase-state-machine.js +214 -214
- package/src/{lib → core/state}/state-manager.js +588 -534
- package/src/core/templates/index.js +9 -0
- package/src/core/templates/template-registry.js +335 -0
- package/src/core/templates/template-renderer.js +477 -0
- package/src/core/templates/template-validator.js +296 -0
- package/src/core/workflows/index.js +7 -0
- package/src/core/workflows/workflow-detector.js +452 -0
- package/src/lib/agents/micro-agent-factory.js +161 -0
- package/src/lib/{complexity-analyzer.js → analysis/complexity-analyzer.js} +441 -441
- package/src/lib/analysis/index.js +7 -0
- package/src/lib/analytics/analytics-engine.js +345 -0
- package/src/lib/{checkpoint-hooks.js → checkpoints/checkpoint-hooks.js} +35 -0
- package/src/lib/checkpoints/index.js +7 -0
- package/src/lib/context/context-bundler.js +240 -0
- package/src/lib/context/context-optimizer.js +212 -0
- package/src/lib/context/context-tracker.js +273 -0
- package/src/lib/context/core-four-tracker.js +201 -0
- package/src/lib/context/mcp-optimizer.js +200 -0
- package/src/lib/detectors/config-detector.js +223 -223
- package/src/lib/detectors/conversation-analyzer.js +163 -163
- package/src/lib/{design-system-detector.js → detectors/design-system-detector.js} +187 -187
- package/src/lib/detectors/index.js +87 -84
- package/src/lib/detectors/standards-generator.js +275 -275
- package/src/lib/detectors/structure-detector.js +245 -245
- package/src/lib/execution/fusion-executor.js +304 -0
- package/src/lib/execution/parallel-executor.js +270 -0
- package/src/lib/{context-generator.js → generators/context-generator.js} +526 -516
- package/src/lib/generators/index.js +10 -0
- package/src/lib/{metadata-extractor.js → generators/metadata-extractor.js} +387 -380
- package/src/lib/{recap-generator.js → generators/recap-generator.js} +205 -205
- package/src/lib/hooks/hook-executor.js +169 -0
- package/src/lib/hooks/stop-hook-executor.js +286 -0
- package/src/lib/hops/hop-composer.js +221 -0
- package/src/lib/learning/index.js +7 -0
- package/src/lib/orchestration/index.js +7 -0
- package/src/lib/{team-orchestrator.js → orchestration/team-orchestrator.js} +323 -323
- package/src/lib/stacks/index.js +7 -0
- package/src/lib/{stack-resolver.js → stacks/stack-resolver.js} +180 -148
- package/src/lib/standards/index.js +7 -0
- package/src/lib/{standards-context-injector.js → standards/standards-context-injector.js} +298 -288
- package/src/lib/threads/thread-coordinator.js +238 -0
- package/src/lib/threads/thread-manager.js +317 -0
- package/src/lib/tracking/artifact-trail.js +202 -0
- package/src/lib/troubleshooting/index.js +8 -0
- package/src/lib/{troubleshoot-grep.js → troubleshooting/troubleshoot-grep.js} +204 -204
- package/src/lib/{troubleshoot-index.js → troubleshooting/troubleshoot-index.js} +144 -144
- package/src/lib/trust/trust-manager.js +269 -0
- package/src/lib/validators/{architecture-validator.js → architecture/architecture-validator.js} +8 -8
- package/src/lib/validators/architecture/index.js +7 -0
- package/src/lib/{blazor-concurrency-analyzer.js → validators/blazor/blazor-concurrency-analyzer.js} +277 -288
- package/src/lib/{blazor-state-validator.js → validators/blazor/blazor-state-validator.js} +279 -291
- package/src/lib/{blazor-validator.js → validators/blazor/blazor-validator.js} +369 -374
- package/src/lib/validators/blazor/index.js +9 -0
- package/src/lib/validators/{content-validator.js → content/content-validator.js} +351 -351
- package/src/lib/validators/content/index.js +7 -0
- package/src/lib/validators/{contract-compliance-validator.js → contracts/contract-compliance-validator.js} +273 -273
- package/src/lib/validators/contracts/index.js +7 -0
- package/src/lib/{css-validator.js → validators/css/css-validator.js} +352 -352
- package/src/lib/validators/css/index.js +7 -0
- package/src/lib/validators/{design-system-validator.js → design-system/design-system-validator.js} +231 -231
- package/src/lib/validators/design-system/index.js +7 -0
- package/src/lib/validators/packages/index.js +7 -0
- package/src/lib/validators/shared/index.js +12 -0
- package/src/lib/validators/shared/issue-counter.js +18 -0
- package/src/lib/validators/shared/result-formatter.js +124 -0
- package/src/lib/{spec-validator.js → validators/spec-validator.js} +258 -258
- package/src/lib/validators/ui/index.js +7 -0
- package/src/lib/{validation-runner.js → validators/validation-runner.js} +286 -284
- package/src/ui/wizard-questions.js +0 -2
- package/src/utils/color-utils.js +70 -0
- package/src/utils/file-copier.js +188 -189
- package/src/utils/process-handler.js +97 -0
- package/stacks/blazor-azure/.morph/config/agents.json +948 -764
- package/stacks/blazor-azure/.morph/hooks/{pre-commit-tests.sh → pre-commit/tests-csharp.sh} +3 -2
- package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/cd-prod.yml.hbs +41 -0
- package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/cd-staging.yml.hbs +24 -0
- package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/ci-build.yml.hbs +23 -0
- package/stacks/nextjs-supabase/.morph/config/agents.json +345 -345
- package/stacks/nextjs-supabase/.morph/hooks/pre-commit/tests-typescript.sh +61 -0
- package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/cd-prod.yml.hbs +22 -0
- package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/cd-staging.yml.hbs +22 -0
- package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/ci-build.yml.hbs +35 -0
- package/stacks/nextjs-supabase/README.md +6 -15
- package/CLAUDE.md +0 -648
- package/bin/render-template.js +0 -349
- package/bin/semantic-detect-agents.js +0 -247
- package/bin/validate-agents-skills.js +0 -257
- package/bin/validate-agents.js +0 -70
- package/bin/validate-phase.js +0 -263
- package/docs/examples.md +0 -328
- package/docs/llm-interaction-config.md +0 -735
- package/scripts/reorganize-skills.cjs +0 -175
- package/scripts/validate-agents-structure.cjs +0 -52
- package/scripts/validate-skills.cjs +0 -180
- package/src/commands/deploy.js +0 -780
- package/src/commands/migrate-state.js +0 -158
- package/src/commands/upgrade.js +0 -346
- package/src/lib/continuous-validator.js +0 -421
- package/src/lib/decision-constraint-loader.js +0 -109
- package/src/lib/design-system-scaffolder.js +0 -299
- package/src/lib/hook-executor.js +0 -257
- package/src/lib/mockup-generator.js +0 -366
- package/src/lib/ui-detector.js +0 -350
- package/src/llm/schema-validator.js +0 -121
- package/src/sanitizer/.gitkeep +0 -0
- package/src/scanner/.gitkeep +0 -0
- package/src/types/index.js +0 -477
- package/src/ui/.gitkeep +0 -0
- package/src/writer/.gitkeep +0 -0
- package/stacks/blazor-azure/.azure/README.md +0 -293
- package/stacks/blazor-azure/.azure/docs/azure-devops-setup.md +0 -454
- package/stacks/blazor-azure/.azure/docs/branch-strategy.md +0 -398
- package/stacks/blazor-azure/.azure/docs/local-development.md +0 -515
- package/stacks/blazor-azure/.azure/pipelines/pipeline-variables.yml +0 -34
- package/stacks/blazor-azure/.azure/pipelines/prod-pipeline.yml +0 -319
- package/stacks/blazor-azure/.azure/pipelines/staging-pipeline.yml +0 -234
- package/stacks/blazor-azure/.azure/pipelines/templates/build-dotnet.yml +0 -75
- package/stacks/blazor-azure/.azure/pipelines/templates/deploy-app-service.yml +0 -94
- package/stacks/blazor-azure/.azure/pipelines/templates/deploy-container-app.yml +0 -120
- package/stacks/blazor-azure/.azure/pipelines/templates/infra-deploy.yml +0 -90
- package/stacks/blazor-azure/.claude/commands/morph-apply.md +0 -221
- package/stacks/blazor-azure/.claude/commands/morph-archive.md +0 -79
- package/stacks/blazor-azure/.claude/commands/morph-deploy.md +0 -529
- package/stacks/blazor-azure/.claude/commands/morph-infra.md +0 -209
- package/stacks/blazor-azure/.claude/commands/morph-preflight.md +0 -227
- package/stacks/blazor-azure/.claude/commands/morph-proposal.md +0 -122
- package/stacks/blazor-azure/.claude/commands/morph-status.md +0 -86
- package/stacks/blazor-azure/.claude/commands/morph-troubleshoot.md +0 -122
- package/stacks/blazor-azure/.claude/settings.local.json +0 -15
- package/stacks/blazor-azure/.claude/skills/level-0-meta/README.md +0 -7
- package/stacks/blazor-azure/.claude/skills/level-0-meta/code-review.md +0 -226
- package/stacks/blazor-azure/.claude/skills/level-0-meta/morph-checklist.md +0 -117
- package/stacks/blazor-azure/.claude/skills/level-0-meta/simulation-checklist.md +0 -77
- package/stacks/blazor-azure/.claude/skills/level-1-workflows/README.md +0 -7
- package/stacks/blazor-azure/.claude/skills/level-1-workflows/morph-replicate.md +0 -213
- package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-clarify.md +0 -131
- package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-design.md +0 -213
- package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-setup.md +0 -106
- package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-tasks.md +0 -164
- package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-uiux.md +0 -169
- package/stacks/blazor-azure/.claude/skills/level-2-domains/README.md +0 -14
- package/stacks/blazor-azure/.claude/skills/level-2-domains/ai-agents/ai-system-architect.md +0 -192
- package/stacks/blazor-azure/.claude/skills/level-2-domains/architecture/po-pm-advisor.md +0 -197
- package/stacks/blazor-azure/.claude/skills/level-2-domains/architecture/prompt-engineer.md +0 -189
- package/stacks/blazor-azure/.claude/skills/level-2-domains/architecture/seo-growth-hacker.md +0 -320
- package/stacks/blazor-azure/.claude/skills/level-2-domains/architecture/standards-architect.md +0 -156
- package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/dotnet-senior.md +0 -287
- package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/ef-modeler.md +0 -113
- package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/hangfire-orchestrator.md +0 -126
- package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/ms-agent-expert.md +0 -109
- package/stacks/blazor-azure/.claude/skills/level-2-domains/frontend/blazor-builder.md +0 -210
- package/stacks/blazor-azure/.claude/skills/level-2-domains/frontend/nextjs-expert.md +0 -154
- package/stacks/blazor-azure/.claude/skills/level-2-domains/frontend/ui-ux-designer.md +0 -191
- package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/azure-architect.md +0 -142
- package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/azure-deploy-specialist.md +0 -699
- package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/bicep-architect.md +0 -126
- package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/container-specialist.md +0 -131
- package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/devops-engineer.md +0 -119
- package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/asaas-financial.md +0 -130
- package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/azure-identity.md +0 -142
- package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/clerk-auth.md +0 -108
- package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/resend-email.md +0 -119
- package/stacks/blazor-azure/.claude/skills/level-2-domains/quality/code-analyzer.md +0 -235
- package/stacks/blazor-azure/.claude/skills/level-2-domains/quality/testing-specialist.md +0 -126
- package/stacks/blazor-azure/.claude/skills/level-3-technologies/README.md +0 -7
- package/stacks/blazor-azure/.claude/skills/level-4-patterns/README.md +0 -7
- package/stacks/blazor-azure/.morph/archive/.gitkeep +0 -25
- package/stacks/blazor-azure/.morph/docs/STORY-DRIVEN-DEVELOPMENT.md +0 -392
- package/stacks/blazor-azure/.morph/docs/workflows/design-impl.md +0 -37
- package/stacks/blazor-azure/.morph/docs/workflows/enforcement-pipeline.md +0 -668
- package/stacks/blazor-azure/.morph/docs/workflows/fast-track.md +0 -29
- package/stacks/blazor-azure/.morph/docs/workflows/full-morph.md +0 -76
- package/stacks/blazor-azure/.morph/docs/workflows/standard.md +0 -44
- package/stacks/blazor-azure/.morph/docs/workflows/ui-refresh.md +0 -39
- package/stacks/blazor-azure/.morph/examples/api-nextjs/README.md +0 -241
- package/stacks/blazor-azure/.morph/examples/api-nextjs/contracts.ts +0 -307
- package/stacks/blazor-azure/.morph/examples/api-nextjs/spec.md +0 -399
- package/stacks/blazor-azure/.morph/examples/api-nextjs/tasks.md +0 -168
- package/stacks/blazor-azure/.morph/examples/micro-saas/README.md +0 -125
- package/stacks/blazor-azure/.morph/examples/micro-saas/contracts.cs +0 -358
- package/stacks/blazor-azure/.morph/examples/micro-saas/decisions.md +0 -246
- package/stacks/blazor-azure/.morph/examples/micro-saas/spec.md +0 -236
- package/stacks/blazor-azure/.morph/examples/micro-saas/tasks.md +0 -150
- package/stacks/blazor-azure/.morph/examples/multi-agent/README.md +0 -309
- package/stacks/blazor-azure/.morph/examples/multi-agent/contracts.cs +0 -433
- package/stacks/blazor-azure/.morph/examples/multi-agent/spec.md +0 -479
- package/stacks/blazor-azure/.morph/examples/multi-agent/tasks.md +0 -185
- package/stacks/blazor-azure/.morph/examples/scheduled-reports/decisions.md +0 -158
- package/stacks/blazor-azure/.morph/examples/scheduled-reports/proposal.md +0 -95
- package/stacks/blazor-azure/.morph/examples/scheduled-reports/spec.md +0 -267
- package/stacks/blazor-azure/.morph/examples/state-v3.json +0 -188
- package/stacks/blazor-azure/.morph/features/.gitkeep +0 -25
- package/stacks/blazor-azure/.morph/hooks/README.md +0 -348
- package/stacks/blazor-azure/.morph/hooks/pre-commit-agents.sh +0 -24
- package/stacks/blazor-azure/.morph/hooks/pre-commit-all.sh +0 -48
- package/stacks/blazor-azure/.morph/hooks/pre-commit-specs.sh +0 -49
- package/stacks/blazor-azure/.morph/hooks/task-completed.js +0 -73
- package/stacks/blazor-azure/.morph/hooks/teammate-idle.js +0 -68
- package/stacks/blazor-azure/.morph/schemas/agent.schema.json +0 -296
- package/stacks/blazor-azure/.morph/schemas/tasks.schema.json +0 -220
- package/stacks/blazor-azure/.morph/specs/.gitkeep +0 -20
- package/stacks/blazor-azure/.morph/standards/agent-framework-blazor-ui.md +0 -359
- package/stacks/blazor-azure/.morph/standards/agent-framework-production.md +0 -410
- package/stacks/blazor-azure/.morph/standards/agent-framework-setup.md +0 -413
- package/stacks/blazor-azure/.morph/standards/agent-framework-workflows.md +0 -349
- package/stacks/blazor-azure/.morph/standards/agent-teams-workflow.md +0 -474
- package/stacks/blazor-azure/.morph/standards/architecture.md +0 -325
- package/stacks/blazor-azure/.morph/standards/azure.md +0 -605
- package/stacks/blazor-azure/.morph/standards/coding.md +0 -377
- package/stacks/blazor-azure/.morph/standards/dotnet10-migration.md +0 -520
- package/stacks/blazor-azure/.morph/standards/fluent-ui-setup.md +0 -590
- package/stacks/blazor-azure/.morph/standards/migration-guide.md +0 -514
- package/stacks/blazor-azure/.morph/standards/passkeys-auth.md +0 -423
- package/stacks/blazor-azure/.morph/standards/vector-search-rag.md +0 -536
- package/stacks/blazor-azure/.morph/templates/CONTEXT-FEATURE.md +0 -276
- package/stacks/blazor-azure/.morph/templates/CONTEXT.md +0 -170
- package/stacks/blazor-azure/.morph/templates/FluentDesignTheme.cs +0 -149
- package/stacks/blazor-azure/.morph/templates/MudTheme.cs +0 -281
- package/stacks/blazor-azure/.morph/templates/agent.cs +0 -163
- package/stacks/blazor-azure/.morph/templates/clarify-questions.md +0 -159
- package/stacks/blazor-azure/.morph/templates/component.razor +0 -239
- package/stacks/blazor-azure/.morph/templates/contracts/Commands.cs +0 -74
- package/stacks/blazor-azure/.morph/templates/contracts/Entities.cs +0 -25
- package/stacks/blazor-azure/.morph/templates/contracts/Queries.cs +0 -74
- package/stacks/blazor-azure/.morph/templates/contracts/README.md +0 -74
- package/stacks/blazor-azure/.morph/templates/contracts.cs +0 -217
- package/stacks/blazor-azure/.morph/templates/decisions.md +0 -123
- package/stacks/blazor-azure/.morph/templates/design-system.css +0 -226
- package/stacks/blazor-azure/.morph/templates/infra/.dockerignore.example +0 -89
- package/stacks/blazor-azure/.morph/templates/infra/Dockerfile.example +0 -82
- package/stacks/blazor-azure/.morph/templates/infra/README.md +0 -286
- package/stacks/blazor-azure/.morph/templates/infra/app-insights.bicep +0 -63
- package/stacks/blazor-azure/.morph/templates/infra/app-service.bicep +0 -164
- package/stacks/blazor-azure/.morph/templates/infra/azure-pipelines-deploy.yml +0 -480
- package/stacks/blazor-azure/.morph/templates/infra/container-app-env.bicep +0 -49
- package/stacks/blazor-azure/.morph/templates/infra/container-app.bicep +0 -156
- package/stacks/blazor-azure/.morph/templates/infra/deploy-checklist.md +0 -426
- package/stacks/blazor-azure/.morph/templates/infra/deploy.ps1 +0 -229
- package/stacks/blazor-azure/.morph/templates/infra/deploy.sh +0 -208
- package/stacks/blazor-azure/.morph/templates/infra/key-vault.bicep +0 -91
- package/stacks/blazor-azure/.morph/templates/infra/main.bicep +0 -189
- package/stacks/blazor-azure/.morph/templates/infra/parameters.dev.json +0 -29
- package/stacks/blazor-azure/.morph/templates/infra/parameters.prod.json +0 -29
- package/stacks/blazor-azure/.morph/templates/infra/parameters.staging.json +0 -29
- package/stacks/blazor-azure/.morph/templates/infra/sql-database.bicep +0 -103
- package/stacks/blazor-azure/.morph/templates/infra/storage.bicep +0 -106
- package/stacks/blazor-azure/.morph/templates/integrations/asaas-client.cs +0 -387
- package/stacks/blazor-azure/.morph/templates/integrations/asaas-webhook.cs +0 -351
- package/stacks/blazor-azure/.morph/templates/integrations/azure-identity-config.cs +0 -288
- package/stacks/blazor-azure/.morph/templates/integrations/clerk-config.cs +0 -258
- package/stacks/blazor-azure/.morph/templates/job.cs +0 -171
- package/stacks/blazor-azure/.morph/templates/migration.cs +0 -83
- package/stacks/blazor-azure/.morph/templates/proposal.md +0 -141
- package/stacks/blazor-azure/.morph/templates/recap.md +0 -94
- package/stacks/blazor-azure/.morph/templates/repository.cs +0 -141
- package/stacks/blazor-azure/.morph/templates/saas/subscription.cs +0 -347
- package/stacks/blazor-azure/.morph/templates/saas/tenant.cs +0 -338
- package/stacks/blazor-azure/.morph/templates/service.cs +0 -139
- package/stacks/blazor-azure/.morph/templates/simulation.md +0 -353
- package/stacks/blazor-azure/.morph/templates/spec.md +0 -149
- package/stacks/blazor-azure/.morph/templates/sprint-status.yaml +0 -68
- package/stacks/blazor-azure/.morph/templates/state.template.json +0 -222
- package/stacks/blazor-azure/.morph/templates/story.md +0 -143
- package/stacks/blazor-azure/.morph/templates/tasks.md +0 -257
- package/stacks/blazor-azure/.morph/templates/test.cs +0 -239
- package/stacks/blazor-azure/.morph/templates/ui-components.md +0 -362
- package/stacks/blazor-azure/.morph/templates/ui-design-system.md +0 -286
- package/stacks/blazor-azure/.morph/templates/ui-flows.md +0 -336
- package/stacks/blazor-azure/.morph/templates/ui-mockups.md +0 -133
- package/stacks/blazor-azure/.morph/test-infra/example.bicep +0 -59
- package/stacks/nextjs-supabase/.claude/skills/level-2-domains/backend/dotnet-supabase.md +0 -244
- package/stacks/nextjs-supabase/.claude/skills/level-2-domains/frontend/nextjs-supabase.md +0 -335
- package/stacks/nextjs-supabase/.claude/skills/level-2-domains/infrastructure/easypanel-deployer.md +0 -189
- package/stacks/nextjs-supabase/.claude/skills/level-2-domains/integrations/supabase-expert.md +0 -170
- package/stacks/nextjs-supabase/.morph/docs/easypanel-setup.md +0 -169
- package/stacks/nextjs-supabase/.morph/docs/supabase-mcp-setup.md +0 -247
- package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/README.md +0 -697
- package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/spec.md +0 -85
- package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/tasks.md +0 -86
- package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/README.md +0 -498
- package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/decisions.md +0 -121
- package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/spec.md +0 -138
- package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/tasks.md +0 -162
- package/stacks/nextjs-supabase/.morph/standards/easypanel-deploy.md +0 -191
- package/stacks/nextjs-supabase/.morph/standards/nextjs-patterns.md +0 -193
- package/stacks/nextjs-supabase/.morph/standards/supabase-auth.md +0 -171
- package/stacks/nextjs-supabase/.morph/standards/supabase-pgvector.md +0 -164
- package/stacks/nextjs-supabase/.morph/standards/supabase-rls.md +0 -179
- package/stacks/nextjs-supabase/.morph/standards/supabase-storage.md +0 -148
- package/stacks/nextjs-supabase/.morph/templates/contracts.cs +0 -173
- package/stacks/nextjs-supabase/.morph/templates/contracts.ts +0 -168
- package/stacks/nextjs-supabase/.morph/templates/decisions.md +0 -115
- package/stacks/nextjs-supabase/.morph/templates/dockerfile-api.dockerfile +0 -38
- package/stacks/nextjs-supabase/.morph/templates/dockerfile-web.dockerfile +0 -48
- package/stacks/nextjs-supabase/.morph/templates/proposal.md +0 -145
- package/stacks/nextjs-supabase/.morph/templates/recap.md +0 -134
- package/stacks/nextjs-supabase/.morph/templates/rls-policy.sql +0 -57
- package/stacks/nextjs-supabase/.morph/templates/spec.md +0 -231
- package/stacks/nextjs-supabase/.morph/templates/supabase-migration.sql +0 -100
- package/stacks/nextjs-supabase/.morph/templates/tasks.md +0 -257
- /package/src/commands/{search-patterns.js → learning/search-patterns.js} +0 -0
- /package/src/{lib → core/templates}/template-data-sources.js +0 -0
- /package/src/lib/{design-system-generator.js → generators/design-system-generator.js} +0 -0
- /package/src/lib/{learning-system.js → learning/learning-system.js} +0 -0
- /package/src/lib/validators/{package-validator.js → packages/package-validator.js} +0 -0
- /package/src/lib/validators/{ui-contrast-validator.js → ui/ui-contrast-validator.js} +0 -0
- /package/{src/generator → stacks/blazor-azure/.morph/templates}/.gitkeep +0 -0
- /package/{src/llm → stacks/nextjs-supabase/.morph/templates}/.gitkeep +0 -0
|
@@ -1,239 +0,0 @@
|
|
|
1
|
-
// ============================================================
|
|
2
|
-
// TEST TEMPLATE
|
|
3
|
-
// Generated by MORPH Framework
|
|
4
|
-
// ============================================================
|
|
5
|
-
|
|
6
|
-
using FluentAssertions;
|
|
7
|
-
using Microsoft.Extensions.Logging;
|
|
8
|
-
using NSubstitute;
|
|
9
|
-
using Xunit;
|
|
10
|
-
|
|
11
|
-
namespace MyProject.Tests.Unit.Features.{Feature};
|
|
12
|
-
|
|
13
|
-
/// <summary>
|
|
14
|
-
/// Unit tests for {Feature}Service.
|
|
15
|
-
/// </summary>
|
|
16
|
-
public class {Feature}ServiceTests
|
|
17
|
-
{
|
|
18
|
-
private readonly I{Feature}Repository _repository;
|
|
19
|
-
private readonly ILogger<{Feature}Service> _logger;
|
|
20
|
-
private readonly {Feature}Service _sut;
|
|
21
|
-
|
|
22
|
-
public {Feature}ServiceTests()
|
|
23
|
-
{
|
|
24
|
-
_repository = Substitute.For<I{Feature}Repository>();
|
|
25
|
-
_logger = Substitute.For<ILogger<{Feature}Service>>();
|
|
26
|
-
_sut = new {Feature}Service(_repository, _logger);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
#region GetByIdAsync Tests
|
|
30
|
-
|
|
31
|
-
[Fact]
|
|
32
|
-
public async Task GetByIdAsync_WithValidId_ReturnsDto()
|
|
33
|
-
{
|
|
34
|
-
// Arrange
|
|
35
|
-
var id = 1;
|
|
36
|
-
var entity = CreateTestEntity(id, "Test {Feature}");
|
|
37
|
-
_repository.GetByIdAsync(id, Arg.Any<CancellationToken>())
|
|
38
|
-
.Returns(entity);
|
|
39
|
-
|
|
40
|
-
// Act
|
|
41
|
-
var result = await _sut.GetByIdAsync(id);
|
|
42
|
-
|
|
43
|
-
// Assert
|
|
44
|
-
result.Should().NotBeNull();
|
|
45
|
-
result!.Id.Should().Be(id);
|
|
46
|
-
result.Name.Should().Be("Test {Feature}");
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
[Fact]
|
|
50
|
-
public async Task GetByIdAsync_WithInvalidId_ReturnsNull()
|
|
51
|
-
{
|
|
52
|
-
// Arrange
|
|
53
|
-
var id = 999;
|
|
54
|
-
_repository.GetByIdAsync(id, Arg.Any<CancellationToken>())
|
|
55
|
-
.Returns((Domain.Entities.{Feature}?)null);
|
|
56
|
-
|
|
57
|
-
// Act
|
|
58
|
-
var result = await _sut.GetByIdAsync(id);
|
|
59
|
-
|
|
60
|
-
// Assert
|
|
61
|
-
result.Should().BeNull();
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
#endregion
|
|
65
|
-
|
|
66
|
-
#region GetAllAsync Tests
|
|
67
|
-
|
|
68
|
-
[Fact]
|
|
69
|
-
public async Task GetAllAsync_ReturnsAllItems()
|
|
70
|
-
{
|
|
71
|
-
// Arrange
|
|
72
|
-
var entities = new List<Domain.Entities.{Feature}>
|
|
73
|
-
{
|
|
74
|
-
CreateTestEntity(1, "First"),
|
|
75
|
-
CreateTestEntity(2, "Second"),
|
|
76
|
-
CreateTestEntity(3, "Third")
|
|
77
|
-
};
|
|
78
|
-
_repository.GetAllAsync(Arg.Any<CancellationToken>())
|
|
79
|
-
.Returns(entities);
|
|
80
|
-
|
|
81
|
-
// Act
|
|
82
|
-
var result = await _sut.GetAllAsync();
|
|
83
|
-
|
|
84
|
-
// Assert
|
|
85
|
-
result.Should().HaveCount(3);
|
|
86
|
-
result[0].Name.Should().Be("First");
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
[Fact]
|
|
90
|
-
public async Task GetAllAsync_WithNoItems_ReturnsEmptyList()
|
|
91
|
-
{
|
|
92
|
-
// Arrange
|
|
93
|
-
_repository.GetAllAsync(Arg.Any<CancellationToken>())
|
|
94
|
-
.Returns(new List<Domain.Entities.{Feature}>());
|
|
95
|
-
|
|
96
|
-
// Act
|
|
97
|
-
var result = await _sut.GetAllAsync();
|
|
98
|
-
|
|
99
|
-
// Assert
|
|
100
|
-
result.Should().BeEmpty();
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
#endregion
|
|
104
|
-
|
|
105
|
-
#region CreateAsync Tests
|
|
106
|
-
|
|
107
|
-
[Fact]
|
|
108
|
-
public async Task CreateAsync_WithValidRequest_CreatesAndReturnsDto()
|
|
109
|
-
{
|
|
110
|
-
// Arrange
|
|
111
|
-
var request = new Create{Feature}Request("New {Feature}");
|
|
112
|
-
|
|
113
|
-
_repository
|
|
114
|
-
.When(x => x.AddAsync(Arg.Any<Domain.Entities.{Feature}>(), Arg.Any<CancellationToken>()))
|
|
115
|
-
.Do(x =>
|
|
116
|
-
{
|
|
117
|
-
// Simulate ID assignment
|
|
118
|
-
var entity = x.Arg<Domain.Entities.{Feature}>();
|
|
119
|
-
// entity.Id would be set by EF Core
|
|
120
|
-
});
|
|
121
|
-
|
|
122
|
-
// Act
|
|
123
|
-
var result = await _sut.CreateAsync(request);
|
|
124
|
-
|
|
125
|
-
// Assert
|
|
126
|
-
result.Should().NotBeNull();
|
|
127
|
-
result.Name.Should().Be("New {Feature}");
|
|
128
|
-
|
|
129
|
-
await _repository.Received(1).AddAsync(Arg.Any<Domain.Entities.{Feature}>(), Arg.Any<CancellationToken>());
|
|
130
|
-
await _repository.Received(1).SaveChangesAsync(Arg.Any<CancellationToken>());
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
[Theory]
|
|
134
|
-
[InlineData("")]
|
|
135
|
-
[InlineData(" ")]
|
|
136
|
-
[InlineData(null)]
|
|
137
|
-
public async Task CreateAsync_WithInvalidName_ThrowsValidationException(string? name)
|
|
138
|
-
{
|
|
139
|
-
// Arrange
|
|
140
|
-
var request = new Create{Feature}Request(name!);
|
|
141
|
-
|
|
142
|
-
// Act
|
|
143
|
-
var act = async () => await _sut.CreateAsync(request);
|
|
144
|
-
|
|
145
|
-
// Assert
|
|
146
|
-
await act.Should().ThrowAsync<ValidationException>();
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
#endregion
|
|
150
|
-
|
|
151
|
-
#region UpdateAsync Tests
|
|
152
|
-
|
|
153
|
-
[Fact]
|
|
154
|
-
public async Task UpdateAsync_WithValidRequest_UpdatesEntity()
|
|
155
|
-
{
|
|
156
|
-
// Arrange
|
|
157
|
-
var id = 1;
|
|
158
|
-
var entity = CreateTestEntity(id, "Original");
|
|
159
|
-
var request = new Update{Feature}Request("Updated");
|
|
160
|
-
|
|
161
|
-
_repository.GetByIdAsync(id, Arg.Any<CancellationToken>())
|
|
162
|
-
.Returns(entity);
|
|
163
|
-
|
|
164
|
-
// Act
|
|
165
|
-
await _sut.UpdateAsync(id, request);
|
|
166
|
-
|
|
167
|
-
// Assert
|
|
168
|
-
_repository.Received(1).Update(Arg.Any<Domain.Entities.{Feature}>());
|
|
169
|
-
await _repository.Received(1).SaveChangesAsync(Arg.Any<CancellationToken>());
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
[Fact]
|
|
173
|
-
public async Task UpdateAsync_WithNonExistentId_ThrowsNotFoundException()
|
|
174
|
-
{
|
|
175
|
-
// Arrange
|
|
176
|
-
var id = 999;
|
|
177
|
-
var request = new Update{Feature}Request("Updated");
|
|
178
|
-
|
|
179
|
-
_repository.GetByIdAsync(id, Arg.Any<CancellationToken>())
|
|
180
|
-
.Returns((Domain.Entities.{Feature}?)null);
|
|
181
|
-
|
|
182
|
-
// Act
|
|
183
|
-
var act = async () => await _sut.UpdateAsync(id, request);
|
|
184
|
-
|
|
185
|
-
// Assert
|
|
186
|
-
await act.Should().ThrowAsync<{Feature}NotFoundException>();
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
#endregion
|
|
190
|
-
|
|
191
|
-
#region DeleteAsync Tests
|
|
192
|
-
|
|
193
|
-
[Fact]
|
|
194
|
-
public async Task DeleteAsync_WithValidId_DeletesEntity()
|
|
195
|
-
{
|
|
196
|
-
// Arrange
|
|
197
|
-
var id = 1;
|
|
198
|
-
var entity = CreateTestEntity(id, "To Delete");
|
|
199
|
-
|
|
200
|
-
_repository.GetByIdAsync(id, Arg.Any<CancellationToken>())
|
|
201
|
-
.Returns(entity);
|
|
202
|
-
|
|
203
|
-
// Act
|
|
204
|
-
await _sut.DeleteAsync(id);
|
|
205
|
-
|
|
206
|
-
// Assert
|
|
207
|
-
_repository.Received(1).Remove(entity);
|
|
208
|
-
await _repository.Received(1).SaveChangesAsync(Arg.Any<CancellationToken>());
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
[Fact]
|
|
212
|
-
public async Task DeleteAsync_WithNonExistentId_ThrowsNotFoundException()
|
|
213
|
-
{
|
|
214
|
-
// Arrange
|
|
215
|
-
var id = 999;
|
|
216
|
-
|
|
217
|
-
_repository.GetByIdAsync(id, Arg.Any<CancellationToken>())
|
|
218
|
-
.Returns((Domain.Entities.{Feature}?)null);
|
|
219
|
-
|
|
220
|
-
// Act
|
|
221
|
-
var act = async () => await _sut.DeleteAsync(id);
|
|
222
|
-
|
|
223
|
-
// Assert
|
|
224
|
-
await act.Should().ThrowAsync<{Feature}NotFoundException>();
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
#endregion
|
|
228
|
-
|
|
229
|
-
#region Helper Methods
|
|
230
|
-
|
|
231
|
-
private static Domain.Entities.{Feature} CreateTestEntity(int id, string name)
|
|
232
|
-
{
|
|
233
|
-
return Domain.Entities.{Feature}.Create(name);
|
|
234
|
-
// Note: In real tests, you might need reflection to set the Id
|
|
235
|
-
// or use a factory method that accepts an id for testing
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
#endregion
|
|
239
|
-
}
|
|
@@ -1,362 +0,0 @@
|
|
|
1
|
-
# UI Components - {{FEATURE_NAME_TITLE}}
|
|
2
|
-
|
|
3
|
-
> Especificação dos componentes Fluent UI / MudBlazor utilizados nesta feature.
|
|
4
|
-
> Mapeia cada elemento visual para um componente concreto da biblioteca escolhida.
|
|
5
|
-
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## Decisão de Biblioteca UI
|
|
9
|
-
|
|
10
|
-
### Biblioteca Escolhida: {Fluent UI Blazor | MudBlazor | Híbrida}
|
|
11
|
-
|
|
12
|
-
**Justificativa:**
|
|
13
|
-
{Por que esta biblioteca foi escolhida para ESTA feature específica?}
|
|
14
|
-
|
|
15
|
-
**Critérios de decisão:**
|
|
16
|
-
- ✅ **{Critério 1}**: {Explicação}
|
|
17
|
-
- ✅ **{Critério 2}**: {Explicação}
|
|
18
|
-
- ⚠️ **{Trade-off}**: {O que foi sacrificado e por quê}
|
|
19
|
-
|
|
20
|
-
**Referência ADR**: Ver `decisions.md` - ADR-{número}: {Título da decisão}
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
## Componentes Mapeados
|
|
25
|
-
|
|
26
|
-
### {Nome do Elemento Visual}
|
|
27
|
-
|
|
28
|
-
**Biblioteca**: {Fluent UI | MudBlazor}
|
|
29
|
-
**Componente**: `{ComponentName}`
|
|
30
|
-
|
|
31
|
-
#### Props Principais
|
|
32
|
-
```csharp
|
|
33
|
-
<{ComponentName}
|
|
34
|
-
Prop1="{valor ou @binding}"
|
|
35
|
-
Prop2="{valor ou @binding}"
|
|
36
|
-
Prop3="{valor ou @binding}"
|
|
37
|
-
OnClick="@{Handler}" />
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
#### Propriedades Detalhadas
|
|
41
|
-
| Prop | Tipo | Valor | Descrição |
|
|
42
|
-
|------|------|-------|-----------|
|
|
43
|
-
| `Prop1` | `string` | `"{valor}"` | {Para que serve} |
|
|
44
|
-
| `Prop2` | `bool` | `true` | {Para que serve} |
|
|
45
|
-
| `Prop3` | `EventCallback` | `@Handler` | {Quando dispara} |
|
|
46
|
-
|
|
47
|
-
#### Estados
|
|
48
|
-
|
|
49
|
-
**1. Default (Estado Inicial)**
|
|
50
|
-
```razor
|
|
51
|
-
<{ComponentName}
|
|
52
|
-
Appearance="Appearance.Neutral"
|
|
53
|
-
Disabled="false">
|
|
54
|
-
{Conteúdo padrão}
|
|
55
|
-
</{ComponentName}>
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
**2. Loading**
|
|
59
|
-
```razor
|
|
60
|
-
@if (_isLoading)
|
|
61
|
-
{
|
|
62
|
-
<FluentSkeleton Width="100%" Height="40px" />
|
|
63
|
-
<!-- OU -->
|
|
64
|
-
<FluentProgress />
|
|
65
|
-
}
|
|
66
|
-
else
|
|
67
|
-
{
|
|
68
|
-
<{ComponentName} ... />
|
|
69
|
-
}
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
**3. Error**
|
|
73
|
-
```razor
|
|
74
|
-
@if (!string.IsNullOrEmpty(_error))
|
|
75
|
-
{
|
|
76
|
-
<FluentMessageBar Intent="MessageIntent.Error">
|
|
77
|
-
@_error
|
|
78
|
-
</FluentMessageBar>
|
|
79
|
-
}
|
|
80
|
-
<{ComponentName} ... />
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
**4. Empty (Sem Dados)**
|
|
84
|
-
```razor
|
|
85
|
-
@if (!_items.Any())
|
|
86
|
-
{
|
|
87
|
-
<FluentStack Orientation="Orientation.Vertical" HorizontalAlignment="HorizontalAlignment.Center">
|
|
88
|
-
<FluentLabel>Nenhum item encontrado</FluentLabel>
|
|
89
|
-
<FluentButton Appearance="Appearance.Accent" OnClick="@Create">
|
|
90
|
-
Criar Novo
|
|
91
|
-
</FluentButton>
|
|
92
|
-
</FluentStack>
|
|
93
|
-
}
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
**5. Success (Feedback Positivo)**
|
|
97
|
-
```razor
|
|
98
|
-
<FluentToast Intent="ToastIntent.Success" Timeout="3000">
|
|
99
|
-
Operação realizada com sucesso!
|
|
100
|
-
</FluentToast>
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
#### Eventos
|
|
104
|
-
|
|
105
|
-
| Evento | Handler | Ação |
|
|
106
|
-
|--------|---------|------|
|
|
107
|
-
| `OnClick` | `HandleClick` | {O que acontece ao clicar} |
|
|
108
|
-
| `OnChange` | `HandleChange` | {O que acontece ao mudar valor} |
|
|
109
|
-
| `OnSubmit` | `HandleSubmit` | {O que acontece ao submeter} |
|
|
110
|
-
|
|
111
|
-
#### Exemplo de Código Completo
|
|
112
|
-
|
|
113
|
-
```razor
|
|
114
|
-
<!-- {Nome do Componente}.razor -->
|
|
115
|
-
<{ComponentName}
|
|
116
|
-
Items="@_items"
|
|
117
|
-
Loading="@_isLoading"
|
|
118
|
-
OnClick="@HandleClick">
|
|
119
|
-
|
|
120
|
-
@if (_isLoading)
|
|
121
|
-
{
|
|
122
|
-
<FluentProgress />
|
|
123
|
-
}
|
|
124
|
-
else
|
|
125
|
-
{
|
|
126
|
-
@foreach (var item in _items)
|
|
127
|
-
{
|
|
128
|
-
<{ChildComponent} Data="@item" />
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
</{ComponentName}>
|
|
132
|
-
|
|
133
|
-
@code {
|
|
134
|
-
[Parameter] public List<ItemType> Items { get; set; } = new();
|
|
135
|
-
|
|
136
|
-
private bool _isLoading;
|
|
137
|
-
private string? _error;
|
|
138
|
-
|
|
139
|
-
protected override async Task OnInitializedAsync()
|
|
140
|
-
{
|
|
141
|
-
await LoadDataAsync();
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
private async Task LoadDataAsync()
|
|
145
|
-
{
|
|
146
|
-
_isLoading = true;
|
|
147
|
-
try
|
|
148
|
-
{
|
|
149
|
-
_items = await _service.GetItemsAsync();
|
|
150
|
-
}
|
|
151
|
-
catch (Exception ex)
|
|
152
|
-
{
|
|
153
|
-
_error = ex.Message;
|
|
154
|
-
}
|
|
155
|
-
finally
|
|
156
|
-
{
|
|
157
|
-
_isLoading = false;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
private async Task HandleClick(ItemType item)
|
|
162
|
-
{
|
|
163
|
-
// Ação ao clicar
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
#### Acessibilidade
|
|
169
|
-
|
|
170
|
-
**ARIA Attributes:**
|
|
171
|
-
- `role="{role}"`: {Propósito}
|
|
172
|
-
- `aria-label="{label}"`: {Descrição para screen readers}
|
|
173
|
-
- `aria-describedby="{id}"`: {Descrição adicional}
|
|
174
|
-
|
|
175
|
-
**Keyboard Navigation:**
|
|
176
|
-
- `Tab`: {Foca no elemento}
|
|
177
|
-
- `Enter/Space`: {Ativa o elemento}
|
|
178
|
-
- `Escape`: {Cancela/fecha}
|
|
179
|
-
- `Arrow Keys`: {Navega entre opções}
|
|
180
|
-
|
|
181
|
-
**Focus Management:**
|
|
182
|
-
- **Foco inicial**: {Onde o foco deve ir quando o componente aparece}
|
|
183
|
-
- **Focus trap**: {Se aplicável, como manter o foco dentro do componente (modals)}
|
|
184
|
-
|
|
185
|
-
---
|
|
186
|
-
|
|
187
|
-
## {Próximo Componente}
|
|
188
|
-
|
|
189
|
-
{Repita a estrutura acima para cada componente}
|
|
190
|
-
|
|
191
|
-
---
|
|
192
|
-
|
|
193
|
-
## Componentes Customizados
|
|
194
|
-
|
|
195
|
-
### {Nome do Componente Custom}
|
|
196
|
-
|
|
197
|
-
Se você precisar criar um componente que NÃO existe em Fluent UI ou MudBlazor:
|
|
198
|
-
|
|
199
|
-
**Composição:**
|
|
200
|
-
```razor
|
|
201
|
-
<!-- Components/{ComponentName}.razor -->
|
|
202
|
-
<div class="custom-component">
|
|
203
|
-
<FluentCard>
|
|
204
|
-
<FluentStack Orientation="Orientation.Vertical">
|
|
205
|
-
<!-- Composição de componentes existentes -->
|
|
206
|
-
</FluentStack>
|
|
207
|
-
</FluentCard>
|
|
208
|
-
</div>
|
|
209
|
-
|
|
210
|
-
@code {
|
|
211
|
-
// Lógica do componente
|
|
212
|
-
}
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
**Quando usar:**
|
|
216
|
-
- {Situação 1 que justifica componente custom}
|
|
217
|
-
- {Situação 2}
|
|
218
|
-
|
|
219
|
-
---
|
|
220
|
-
|
|
221
|
-
## Packages Necessários
|
|
222
|
-
|
|
223
|
-
### Fluent UI Blazor
|
|
224
|
-
```xml
|
|
225
|
-
<PackageReference Include="Microsoft.FluentUI.AspNetCore.Components" Version="4.0.0" />
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
```csharp
|
|
229
|
-
// Program.cs
|
|
230
|
-
builder.Services.AddFluentUIComponents();
|
|
231
|
-
```
|
|
232
|
-
|
|
233
|
-
```razor
|
|
234
|
-
// _Imports.razor
|
|
235
|
-
@using Microsoft.FluentUI.AspNetCore.Components
|
|
236
|
-
```
|
|
237
|
-
|
|
238
|
-
### MudBlazor (se híbrido)
|
|
239
|
-
```xml
|
|
240
|
-
<PackageReference Include="MudBlazor" Version="6.11.0" />
|
|
241
|
-
```
|
|
242
|
-
|
|
243
|
-
```csharp
|
|
244
|
-
// Program.cs
|
|
245
|
-
builder.Services.AddMudServices();
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
```razor
|
|
249
|
-
// _Imports.razor
|
|
250
|
-
@using MudBlazor
|
|
251
|
-
```
|
|
252
|
-
|
|
253
|
-
---
|
|
254
|
-
|
|
255
|
-
## Mapa de Componentes
|
|
256
|
-
|
|
257
|
-
Resumo visual de quais componentes são usados onde:
|
|
258
|
-
|
|
259
|
-
| Tela/Feature | Componente | Biblioteca | Complexidade |
|
|
260
|
-
|--------------|------------|------------|--------------|
|
|
261
|
-
| {Tela 1} | FluentDataGrid | Fluent UI | Média |
|
|
262
|
-
| {Tela 1} | FluentCard | Fluent UI | Baixa |
|
|
263
|
-
| {Tela 2} | MudChart | MudBlazor | Alta |
|
|
264
|
-
| {Tela 2} | FluentDialog | Fluent UI | Média |
|
|
265
|
-
|
|
266
|
-
---
|
|
267
|
-
|
|
268
|
-
---
|
|
269
|
-
|
|
270
|
-
## Checklist de Componentes CSS
|
|
271
|
-
|
|
272
|
-
> **IMPORTANTE:** Liste TODOS os componentes CSS necessarios ANTES de implementar.
|
|
273
|
-
> Use `morph-spec validate-css` para validar que todas as classes existem.
|
|
274
|
-
|
|
275
|
-
### Componentes CSS Novos (a criar)
|
|
276
|
-
|
|
277
|
-
Classes CSS customizadas que precisam ser criadas no `design-system.css`:
|
|
278
|
-
|
|
279
|
-
- [ ] `.{page-prefix}-{component}` - {Descricao do componente}
|
|
280
|
-
- [ ] `.{page-prefix}-{element}` - {Descricao do elemento}
|
|
281
|
-
|
|
282
|
-
**Exemplo:**
|
|
283
|
-
```markdown
|
|
284
|
-
- [ ] `.home-hero` - Container do hero section da home
|
|
285
|
-
- [ ] `.home-features` - Grid de features
|
|
286
|
-
- [ ] `.checkout-form` - Container do formulario de checkout
|
|
287
|
-
- [ ] `.checkout-summary` - Card de resumo do pedido
|
|
288
|
-
- [ ] `.modal-overlay` - Overlay escuro para modais customizados
|
|
289
|
-
- [ ] `.modal-container` - Container do modal com animacao
|
|
290
|
-
- [ ] `.card-premium` - Card com glow e borda especial
|
|
291
|
-
- [ ] `.button-shimmer` - Botao com efeito shimmer
|
|
292
|
-
```
|
|
293
|
-
|
|
294
|
-
### Componentes CSS Existentes (reutilizar)
|
|
295
|
-
|
|
296
|
-
Classes que ja existem no projeto (design-system.css ou bibliotecas):
|
|
297
|
-
|
|
298
|
-
- [x] `.{existing-class}` - {Onde esta definida}
|
|
299
|
-
|
|
300
|
-
**Exemplo:**
|
|
301
|
-
```markdown
|
|
302
|
-
- [x] `.page-layout` - design-system.css (estrutura padrao)
|
|
303
|
-
- [x] `.tip-box` - design-system.css (caixa de dica)
|
|
304
|
-
- [x] `FluentCard` - Fluent UI Blazor (componente)
|
|
305
|
-
```
|
|
306
|
-
|
|
307
|
-
### Variaveis CSS Novas
|
|
308
|
-
|
|
309
|
-
Variaveis CSS customizadas necessarias:
|
|
310
|
-
|
|
311
|
-
- [ ] `--{project}-{variable-name}` - {Descricao e valor}
|
|
312
|
-
|
|
313
|
-
**Exemplo:**
|
|
314
|
-
```markdown
|
|
315
|
-
- [ ] `--fishart-primary` - Cor primaria (#FF6B35)
|
|
316
|
-
- [ ] `--fishart-shadow-glow` - Sombra com glow (0 0 20px rgba(255, 107, 53, 0.3))
|
|
317
|
-
- [ ] `--fishart-gradient-hero` - Gradiente do hero (linear-gradient(...))
|
|
318
|
-
- [ ] `--fishart-transition-bounce` - Transicao com bounce (cubic-bezier(...))
|
|
319
|
-
```
|
|
320
|
-
|
|
321
|
-
### Animacoes CSS Novas
|
|
322
|
-
|
|
323
|
-
Keyframes e classes de animacao necessarias:
|
|
324
|
-
|
|
325
|
-
- [ ] `@keyframes {animation-name}` - {Descricao}
|
|
326
|
-
- [ ] `.animate-{name}` - Classe que aplica a animacao
|
|
327
|
-
|
|
328
|
-
**Exemplo:**
|
|
329
|
-
```markdown
|
|
330
|
-
- [ ] `@keyframes slideInUp` - Entrada de baixo para cima
|
|
331
|
-
- [ ] `.animate-slideInUp` - Aplica slideInUp com 0.5s ease
|
|
332
|
-
- [ ] `@keyframes scaleIn` - Zoom in suave
|
|
333
|
-
- [ ] `.animate-scaleIn` - Aplica scaleIn com 0.3s ease
|
|
334
|
-
- [ ] `.stagger-1` a `.stagger-5` - Delays para animacoes em sequencia
|
|
335
|
-
```
|
|
336
|
-
|
|
337
|
-
### Validacao Pre-Implementacao
|
|
338
|
-
|
|
339
|
-
Antes de iniciar FASE 5 (IMPLEMENT), validar:
|
|
340
|
-
|
|
341
|
-
```bash
|
|
342
|
-
# Criar todas as classes listadas acima no design-system.css
|
|
343
|
-
|
|
344
|
-
# Validar que nenhuma classe esta faltando
|
|
345
|
-
morph-spec validate-css src/MyApp.Web
|
|
346
|
-
|
|
347
|
-
# Output esperado: "All CSS classes are properly defined!"
|
|
348
|
-
```
|
|
349
|
-
|
|
350
|
-
---
|
|
351
|
-
|
|
352
|
-
## Referências
|
|
353
|
-
|
|
354
|
-
- [Fluent UI Components](https://www.fluentui-blazor.net/Components)
|
|
355
|
-
- [MudBlazor Components](https://mudblazor.com/components/list)
|
|
356
|
-
- [Guia Fluent UI Blazor](../../framework/standards/fluent-ui-blazor.md)
|
|
357
|
-
- [CSS Naming Convention](../../framework/standards/css-naming.md)
|
|
358
|
-
- [CSS Animations](../../framework/standards/css-animations.md)
|
|
359
|
-
|
|
360
|
-
---
|
|
361
|
-
|
|
362
|
-
*Template MORPH-SPEC v2.2.0 by Polymorphism Tech*
|