@polymorphism-tech/morph-spec 2.4.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +158 -26
- package/LICENSE +72 -72
- package/bin/detect-agents.js +225 -225
- package/bin/morph-spec.js +8 -0
- package/bin/render-template.js +302 -302
- package/bin/semantic-detect-agents.js +246 -246
- package/bin/validate-agents-skills.js +251 -251
- package/bin/validate-agents.js +69 -69
- package/bin/validate-phase.js +263 -263
- 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-archive.md +79 -79
- package/content/.claude/commands/morph-deploy.md +529 -0
- package/content/.claude/commands/morph-infra.md +209 -209
- package/content/.claude/commands/morph-preflight.md +227 -227
- package/content/.claude/commands/morph-troubleshoot.md +122 -122
- package/content/.claude/settings.local.json +15 -15
- package/content/.claude/skills/infra/azure-deploy-specialist.md +699 -0
- package/content/.claude/skills/level-0-meta/README.md +7 -0
- package/content/.claude/skills/{checklists → level-0-meta}/morph-checklist.md +117 -117
- package/content/.claude/skills/level-1-workflows/README.md +7 -0
- package/content/.claude/skills/{workflows → level-1-workflows}/morph-replicate.md +213 -213
- package/content/.claude/skills/{workflows → level-1-workflows}/phase-clarify.md +131 -131
- package/content/.claude/skills/{workflows → level-1-workflows}/phase-design.md +213 -205
- package/content/.claude/skills/{workflows → level-1-workflows}/phase-setup.md +106 -92
- package/content/.claude/skills/{workflows → level-1-workflows}/phase-tasks.md +164 -164
- package/content/.claude/skills/{workflows → level-1-workflows}/phase-uiux.md +169 -138
- package/content/.claude/skills/level-2-domains/README.md +14 -0
- package/content/.claude/skills/{specialists → level-2-domains/quality}/testing-specialist.md +126 -126
- package/content/.claude/skills/level-3-technologies/README.md +7 -0
- package/content/.claude/skills/level-4-patterns/README.md +7 -0
- package/content/.claude/skills/specialists/prompt-engineer.md +189 -0
- package/content/.claude/skills/specialists/seo-growth-hacker.md +320 -0
- package/content/.morph/.morphversion +5 -5
- package/content/.morph/archive/.gitkeep +25 -25
- package/content/.morph/config/agents.json +742 -358
- package/content/.morph/config/config.template.json +33 -0
- package/content/.morph/docs/STORY-DRIVEN-DEVELOPMENT.md +392 -392
- package/content/.morph/docs/workflows/enforcement-pipeline.md +668 -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 -158
- package/content/.morph/examples/scheduled-reports/proposal.md +95 -95
- package/content/.morph/examples/scheduled-reports/spec.md +267 -267
- package/content/.morph/examples/state-v3.json +188 -188
- package/content/.morph/features/.gitkeep +25 -25
- package/content/.morph/hooks/README.md +158 -0
- 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/hooks/task-completed.js +73 -0
- package/content/.morph/hooks/teammate-idle.js +68 -0
- package/content/.morph/project.md +160 -160
- package/content/.morph/schemas/agent.schema.json +296 -296
- package/content/.morph/schemas/tasks.schema.json +220 -220
- package/content/.morph/specs/.gitkeep +20 -20
- package/content/.morph/standards/agent-teams-workflow.md +474 -0
- package/content/.morph/standards/coding.md +377 -377
- 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/CONTEXT-FEATURE.md +276 -0
- package/content/.morph/templates/CONTEXT.md +170 -0
- package/content/.morph/templates/FluentDesignTheme.cs +149 -149
- package/content/.morph/templates/MudTheme.cs +281 -281
- package/content/.morph/templates/clarify-questions.md +159 -159
- package/content/.morph/templates/component.razor +239 -239
- package/content/.morph/templates/contracts/Commands.cs +74 -74
- package/content/.morph/templates/contracts/Entities.cs +25 -25
- package/content/.morph/templates/contracts/Queries.cs +74 -74
- package/content/.morph/templates/contracts/README.md +74 -74
- package/content/.morph/templates/contracts.cs +217 -217
- 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/azure-pipelines-deploy.yml +480 -0
- 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 -426
- 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/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/sprint-status.yaml +68 -68
- package/content/.morph/templates/story.md +143 -143
- package/content/.morph/templates/test.cs +239 -239
- 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/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/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/templates.md +418 -418
- package/package.json +1 -1
- package/scripts/postinstall.js +132 -132
- package/src/commands/advance-phase.js +83 -0
- package/src/commands/analyze-blazor-concurrency.js +193 -193
- package/src/commands/create-story.js +351 -351
- package/src/commands/deploy.js +780 -0
- package/src/commands/detect-agents.js +34 -6
- package/src/commands/detect.js +104 -104
- package/src/commands/generate-context.js +40 -0
- package/src/commands/generate.js +149 -149
- package/src/commands/lint-fluent.js +352 -352
- package/src/commands/rollback-phase.js +185 -185
- package/src/commands/session-summary.js +291 -291
- 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/troubleshoot.js +222 -222
- package/src/commands/validate-blazor-state.js +210 -210
- package/src/commands/validate-blazor.js +156 -156
- package/src/commands/validate-css.js +84 -84
- package/src/commands/validate-phase.js +221 -221
- package/src/lib/blazor-concurrency-analyzer.js +288 -288
- package/src/lib/blazor-state-validator.js +291 -291
- package/src/lib/blazor-validator.js +374 -374
- package/src/lib/context-generator.js +513 -0
- package/src/lib/css-validator.js +352 -352
- package/src/lib/design-system-detector.js +187 -0
- package/src/lib/design-system-generator.js +298 -298
- package/src/lib/design-system-scaffolder.js +299 -0
- package/src/lib/hook-executor.js +256 -0
- package/src/lib/learning-system.js +520 -520
- package/src/lib/mockup-generator.js +366 -366
- package/src/lib/spec-validator.js +258 -0
- package/src/lib/standards-context-injector.js +287 -0
- package/src/lib/team-orchestrator.js +322 -0
- package/src/lib/troubleshoot-grep.js +194 -194
- package/src/lib/troubleshoot-index.js +144 -144
- package/src/lib/ui-detector.js +350 -350
- package/src/lib/validation-runner.js +65 -13
- package/src/lib/validators/architecture-validator.js +387 -387
- package/src/lib/validators/design-system-validator.js +231 -0
- package/src/lib/validators/package-validator.js +360 -360
- package/src/lib/validators/ui-contrast-validator.js +422 -422
- package/src/utils/file-copier.js +9 -1
- package/src/utils/logger.js +32 -32
- package/src/utils/version-checker.js +175 -175
- /package/content/.claude/skills/{checklists → level-0-meta}/code-review.md +0 -0
- /package/content/.claude/skills/{checklists → level-0-meta}/simulation-checklist.md +0 -0
- /package/content/.claude/skills/{specialists → level-2-domains/ai-agents}/ai-system-architect.md +0 -0
- /package/content/.claude/skills/{specialists → level-2-domains/architecture}/po-pm-advisor.md +0 -0
- /package/content/.claude/skills/{specialists → level-2-domains/architecture}/standards-architect.md +0 -0
- /package/content/.claude/skills/{specialists → level-2-domains/backend}/dotnet-senior.md +0 -0
- /package/content/.claude/skills/{specialists → level-2-domains/backend}/ef-modeler.md +0 -0
- /package/content/.claude/skills/{specialists → level-2-domains/backend}/hangfire-orchestrator.md +0 -0
- /package/content/.claude/skills/{specialists → level-2-domains/backend}/ms-agent-expert.md +0 -0
- /package/content/.claude/skills/{stacks/dotnet-blazor.md → level-2-domains/frontend/blazor-builder.md} +0 -0
- /package/content/.claude/skills/{stacks/dotnet-nextjs.md → level-2-domains/frontend/nextjs-expert.md} +0 -0
- /package/content/.claude/skills/{specialists → level-2-domains/frontend}/ui-ux-designer.md +0 -0
- /package/content/.claude/skills/{specialists → level-2-domains/infrastructure}/azure-architect.md +0 -0
- /package/content/.claude/skills/{infra → level-2-domains/infrastructure}/bicep-architect.md +0 -0
- /package/content/.claude/skills/{infra → level-2-domains/infrastructure}/container-specialist.md +0 -0
- /package/content/.claude/skills/{infra → level-2-domains/infrastructure}/devops-engineer.md +0 -0
- /package/content/.claude/skills/{integrations → level-2-domains/integrations}/asaas-financial.md +0 -0
- /package/content/.claude/skills/{integrations → level-2-domains/integrations}/azure-identity.md +0 -0
- /package/content/.claude/skills/{integrations → level-2-domains/integrations}/clerk-auth.md +0 -0
- /package/content/.claude/skills/{integrations → level-2-domains/integrations}/resend-email.md +0 -0
- /package/content/.claude/skills/{specialists → level-2-domains/quality}/code-analyzer.md +0 -0
|
@@ -1,281 +1,281 @@
|
|
|
1
|
-
using MudBlazor;
|
|
2
|
-
|
|
3
|
-
namespace {Namespace}.Themes;
|
|
4
|
-
|
|
5
|
-
/// <summary>
|
|
6
|
-
/// MudBlazor Theme customizado para {Project Name}.
|
|
7
|
-
/// Gerado automaticamente baseado em ui-design-system.md
|
|
8
|
-
/// </summary>
|
|
9
|
-
/// <remarks>
|
|
10
|
-
/// Template MORPH-SPEC v2.1.1 by Polymorphism Tech
|
|
11
|
-
/// </remarks>
|
|
12
|
-
public static class AppTheme
|
|
13
|
-
{
|
|
14
|
-
/// <summary>
|
|
15
|
-
/// Tema Light Mode
|
|
16
|
-
/// </summary>
|
|
17
|
-
public static MudTheme LightTheme => new()
|
|
18
|
-
{
|
|
19
|
-
Palette = new PaletteLight
|
|
20
|
-
{
|
|
21
|
-
// Cores Principais
|
|
22
|
-
Primary = "#{hex da cor primária}", // Ex: #3b82f6
|
|
23
|
-
Secondary = "#{hex da cor secundária}", // Ex: #6b7280
|
|
24
|
-
Tertiary = "#{hex da cor terciária}", // Opcional
|
|
25
|
-
|
|
26
|
-
// Cores de Estado
|
|
27
|
-
Success = "#{hex}", // Ex: #10b981
|
|
28
|
-
Error = "#{hex}", // Ex: #ef4444
|
|
29
|
-
Warning = "#{hex}", // Ex: #f59e0b
|
|
30
|
-
Info = "#{hex}", // Ex: #06b6d4
|
|
31
|
-
|
|
32
|
-
// Background e Superfícies
|
|
33
|
-
Background = "#ffffff",
|
|
34
|
-
BackgroundGrey = "#{hex do gray-50}", // Ex: #f9fafb
|
|
35
|
-
Surface = "#ffffff",
|
|
36
|
-
|
|
37
|
-
// Text Colors
|
|
38
|
-
TextPrimary = "#{hex do gray-900}", // Texto principal
|
|
39
|
-
TextSecondary = "#{hex do gray-600}", // Texto secundário
|
|
40
|
-
TextDisabled = "#{hex do gray-400}", // Texto desabilitado
|
|
41
|
-
|
|
42
|
-
// Borders
|
|
43
|
-
Divider = "#{hex do gray-200}", // Divisores
|
|
44
|
-
DividerLight = "#{hex do gray-100}", // Divisores mais claros
|
|
45
|
-
Lines = "#{hex do gray-300}", // Linhas de borda
|
|
46
|
-
|
|
47
|
-
// Action colors (usados em botões, links, etc)
|
|
48
|
-
ActionDefault = "#{hex do gray-500}",
|
|
49
|
-
ActionDisabled = "#{hex do gray-300}",
|
|
50
|
-
ActionDisabledBackground = "#{hex do gray-100}",
|
|
51
|
-
|
|
52
|
-
// Outros
|
|
53
|
-
Dark = "#{hex do gray-800}",
|
|
54
|
-
DarkLighten = "#{hex do gray-700}",
|
|
55
|
-
DarkDarken = "#{hex do gray-900}",
|
|
56
|
-
|
|
57
|
-
// Overlay (usado em modais, dropdowns)
|
|
58
|
-
OverlayLight = "rgba(255, 255, 255, 0.95)",
|
|
59
|
-
OverlayDark = "rgba(33, 33, 33, 0.95)",
|
|
60
|
-
|
|
61
|
-
// Hover effects
|
|
62
|
-
HoverOpacity = 0.06, // Opacidade do hover (6%)
|
|
63
|
-
},
|
|
64
|
-
|
|
65
|
-
Typography = new Typography
|
|
66
|
-
{
|
|
67
|
-
// Font Families
|
|
68
|
-
Default = new Default
|
|
69
|
-
{
|
|
70
|
-
FontFamily = new[] { "{Font Name}", "-apple-system", "BlinkMacSystemFont", "Segoe UI", "Roboto", "sans-serif" },
|
|
71
|
-
FontSize = "1rem", // 16px
|
|
72
|
-
FontWeight = 400, // Regular
|
|
73
|
-
LineHeight = 1.5,
|
|
74
|
-
LetterSpacing = "normal",
|
|
75
|
-
},
|
|
76
|
-
|
|
77
|
-
H1 = new H1
|
|
78
|
-
{
|
|
79
|
-
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
80
|
-
FontSize = "2.25rem", // 36px
|
|
81
|
-
FontWeight = 700, // Bold
|
|
82
|
-
LineHeight = 1.2,
|
|
83
|
-
},
|
|
84
|
-
|
|
85
|
-
H2 = new H2
|
|
86
|
-
{
|
|
87
|
-
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
88
|
-
FontSize = "1.875rem", // 30px
|
|
89
|
-
FontWeight = 700,
|
|
90
|
-
LineHeight = 1.3,
|
|
91
|
-
},
|
|
92
|
-
|
|
93
|
-
H3 = new H3
|
|
94
|
-
{
|
|
95
|
-
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
96
|
-
FontSize = "1.5rem", // 24px
|
|
97
|
-
FontWeight = 600,
|
|
98
|
-
LineHeight = 1.4,
|
|
99
|
-
},
|
|
100
|
-
|
|
101
|
-
H4 = new H4
|
|
102
|
-
{
|
|
103
|
-
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
104
|
-
FontSize = "1.25rem", // 20px
|
|
105
|
-
FontWeight = 600,
|
|
106
|
-
LineHeight = 1.4,
|
|
107
|
-
},
|
|
108
|
-
|
|
109
|
-
H5 = new H5
|
|
110
|
-
{
|
|
111
|
-
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
112
|
-
FontSize = "1.125rem", // 18px
|
|
113
|
-
FontWeight = 600,
|
|
114
|
-
LineHeight = 1.5,
|
|
115
|
-
},
|
|
116
|
-
|
|
117
|
-
H6 = new H6
|
|
118
|
-
{
|
|
119
|
-
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
120
|
-
FontSize = "1rem", // 16px
|
|
121
|
-
FontWeight = 600,
|
|
122
|
-
LineHeight = 1.5,
|
|
123
|
-
},
|
|
124
|
-
|
|
125
|
-
Body1 = new Body1
|
|
126
|
-
{
|
|
127
|
-
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
128
|
-
FontSize = "1rem", // 16px
|
|
129
|
-
FontWeight = 400,
|
|
130
|
-
LineHeight = 1.5,
|
|
131
|
-
},
|
|
132
|
-
|
|
133
|
-
Body2 = new Body2
|
|
134
|
-
{
|
|
135
|
-
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
136
|
-
FontSize = "0.875rem", // 14px
|
|
137
|
-
FontWeight = 400,
|
|
138
|
-
LineHeight = 1.43,
|
|
139
|
-
},
|
|
140
|
-
|
|
141
|
-
Button = new Button
|
|
142
|
-
{
|
|
143
|
-
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
144
|
-
FontSize = "0.875rem", // 14px
|
|
145
|
-
FontWeight = 600, // Semibold
|
|
146
|
-
LineHeight = 1.75,
|
|
147
|
-
TextTransform = "none", // Ou "uppercase" se preferir
|
|
148
|
-
},
|
|
149
|
-
|
|
150
|
-
Caption = new Caption
|
|
151
|
-
{
|
|
152
|
-
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
153
|
-
FontSize = "0.75rem", // 12px
|
|
154
|
-
FontWeight = 400,
|
|
155
|
-
LineHeight = 1.66,
|
|
156
|
-
},
|
|
157
|
-
|
|
158
|
-
Subtitle1 = new Subtitle1
|
|
159
|
-
{
|
|
160
|
-
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
161
|
-
FontSize = "1rem",
|
|
162
|
-
FontWeight = 500, // Medium
|
|
163
|
-
LineHeight = 1.75,
|
|
164
|
-
},
|
|
165
|
-
|
|
166
|
-
Subtitle2 = new Subtitle2
|
|
167
|
-
{
|
|
168
|
-
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
169
|
-
FontSize = "0.875rem",
|
|
170
|
-
FontWeight = 500,
|
|
171
|
-
LineHeight = 1.57,
|
|
172
|
-
},
|
|
173
|
-
|
|
174
|
-
Overline = new Overline
|
|
175
|
-
{
|
|
176
|
-
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
177
|
-
FontSize = "0.75rem",
|
|
178
|
-
FontWeight = 600,
|
|
179
|
-
LineHeight = 2.66,
|
|
180
|
-
LetterSpacing = "0.08em",
|
|
181
|
-
},
|
|
182
|
-
},
|
|
183
|
-
|
|
184
|
-
Shadows = new Shadow
|
|
185
|
-
{
|
|
186
|
-
Elevation = new[]
|
|
187
|
-
{
|
|
188
|
-
"none", // 0
|
|
189
|
-
"0 1px 2px 0 rgba(0, 0, 0, 0.05)", // 1
|
|
190
|
-
"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)", // 2
|
|
191
|
-
"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)", // 3
|
|
192
|
-
"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)", // 4
|
|
193
|
-
"0 25px 50px -12px rgba(0, 0, 0, 0.25)", // 5
|
|
194
|
-
// Adicione mais elevações conforme necessário
|
|
195
|
-
}
|
|
196
|
-
},
|
|
197
|
-
|
|
198
|
-
LayoutProperties = new LayoutProperties
|
|
199
|
-
{
|
|
200
|
-
// Border Radius
|
|
201
|
-
DefaultBorderRadius = "6px", // md
|
|
202
|
-
|
|
203
|
-
// Drawer
|
|
204
|
-
DrawerWidthLeft = "240px",
|
|
205
|
-
DrawerWidthRight = "240px",
|
|
206
|
-
|
|
207
|
-
// AppBar
|
|
208
|
-
AppbarHeight = "64px",
|
|
209
|
-
},
|
|
210
|
-
|
|
211
|
-
ZIndex = new ZIndex
|
|
212
|
-
{
|
|
213
|
-
Drawer = 1200,
|
|
214
|
-
AppBar = 1100,
|
|
215
|
-
Dialog = 1300,
|
|
216
|
-
Popover = 1400,
|
|
217
|
-
Snackbar = 1500,
|
|
218
|
-
Tooltip = 1600,
|
|
219
|
-
},
|
|
220
|
-
};
|
|
221
|
-
|
|
222
|
-
/// <summary>
|
|
223
|
-
/// Tema Dark Mode (opcional - ajustar cores)
|
|
224
|
-
/// </summary>
|
|
225
|
-
public static MudTheme DarkTheme => new()
|
|
226
|
-
{
|
|
227
|
-
Palette = new PaletteDark
|
|
228
|
-
{
|
|
229
|
-
// Cores Principais (ajustar para dark mode)
|
|
230
|
-
Primary = "#{hex}",
|
|
231
|
-
Secondary = "#{hex}",
|
|
232
|
-
|
|
233
|
-
// Cores de Estado
|
|
234
|
-
Success = "#{hex}",
|
|
235
|
-
Error = "#{hex}",
|
|
236
|
-
Warning = "#{hex}",
|
|
237
|
-
Info = "#{hex}",
|
|
238
|
-
|
|
239
|
-
// Background e Superfícies (tons escuros)
|
|
240
|
-
Background = "#{hex do gray-900}",
|
|
241
|
-
BackgroundGrey = "#{hex do gray-800}",
|
|
242
|
-
Surface = "#{hex do gray-800}",
|
|
243
|
-
|
|
244
|
-
// Text Colors (invertidos)
|
|
245
|
-
TextPrimary = "#{hex do gray-50}",
|
|
246
|
-
TextSecondary = "#{hex do gray-400}",
|
|
247
|
-
TextDisabled = "#{hex do gray-600}",
|
|
248
|
-
|
|
249
|
-
// Etc... (ajustar conforme design system dark mode)
|
|
250
|
-
},
|
|
251
|
-
|
|
252
|
-
// Compartilhar Typography e outras configurações do LightTheme
|
|
253
|
-
Typography = LightTheme.Typography,
|
|
254
|
-
Shadows = LightTheme.Shadows,
|
|
255
|
-
LayoutProperties = LightTheme.LayoutProperties,
|
|
256
|
-
ZIndex = LightTheme.ZIndex,
|
|
257
|
-
};
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
/// <summary>
|
|
261
|
-
/// EXEMPLO DE USO:
|
|
262
|
-
///
|
|
263
|
-
/// // Program.cs
|
|
264
|
-
/// builder.Services.AddMudServices(config =>
|
|
265
|
-
/// {
|
|
266
|
-
/// config.SnackbarConfiguration.PositionClass = Defaults.Classes.Position.BottomRight;
|
|
267
|
-
/// });
|
|
268
|
-
///
|
|
269
|
-
/// // App.razor ou MainLayout.razor
|
|
270
|
-
/// <MudThemeProvider Theme="@AppTheme.LightTheme" />
|
|
271
|
-
/// <MudDialogProvider />
|
|
272
|
-
/// <MudSnackbarProvider />
|
|
273
|
-
///
|
|
274
|
-
/// // Para suportar dark mode dinâmico:
|
|
275
|
-
/// <MudThemeProvider @bind-IsDarkMode="@_isDarkMode"
|
|
276
|
-
/// Theme="@(_isDarkMode ? AppTheme.DarkTheme : AppTheme.LightTheme)" />
|
|
277
|
-
///
|
|
278
|
-
/// @code {
|
|
279
|
-
/// private bool _isDarkMode;
|
|
280
|
-
/// }
|
|
281
|
-
/// </summary>
|
|
1
|
+
using MudBlazor;
|
|
2
|
+
|
|
3
|
+
namespace {Namespace}.Themes;
|
|
4
|
+
|
|
5
|
+
/// <summary>
|
|
6
|
+
/// MudBlazor Theme customizado para {Project Name}.
|
|
7
|
+
/// Gerado automaticamente baseado em ui-design-system.md
|
|
8
|
+
/// </summary>
|
|
9
|
+
/// <remarks>
|
|
10
|
+
/// Template MORPH-SPEC v2.1.1 by Polymorphism Tech
|
|
11
|
+
/// </remarks>
|
|
12
|
+
public static class AppTheme
|
|
13
|
+
{
|
|
14
|
+
/// <summary>
|
|
15
|
+
/// Tema Light Mode
|
|
16
|
+
/// </summary>
|
|
17
|
+
public static MudTheme LightTheme => new()
|
|
18
|
+
{
|
|
19
|
+
Palette = new PaletteLight
|
|
20
|
+
{
|
|
21
|
+
// Cores Principais
|
|
22
|
+
Primary = "#{hex da cor primária}", // Ex: #3b82f6
|
|
23
|
+
Secondary = "#{hex da cor secundária}", // Ex: #6b7280
|
|
24
|
+
Tertiary = "#{hex da cor terciária}", // Opcional
|
|
25
|
+
|
|
26
|
+
// Cores de Estado
|
|
27
|
+
Success = "#{hex}", // Ex: #10b981
|
|
28
|
+
Error = "#{hex}", // Ex: #ef4444
|
|
29
|
+
Warning = "#{hex}", // Ex: #f59e0b
|
|
30
|
+
Info = "#{hex}", // Ex: #06b6d4
|
|
31
|
+
|
|
32
|
+
// Background e Superfícies
|
|
33
|
+
Background = "#ffffff",
|
|
34
|
+
BackgroundGrey = "#{hex do gray-50}", // Ex: #f9fafb
|
|
35
|
+
Surface = "#ffffff",
|
|
36
|
+
|
|
37
|
+
// Text Colors
|
|
38
|
+
TextPrimary = "#{hex do gray-900}", // Texto principal
|
|
39
|
+
TextSecondary = "#{hex do gray-600}", // Texto secundário
|
|
40
|
+
TextDisabled = "#{hex do gray-400}", // Texto desabilitado
|
|
41
|
+
|
|
42
|
+
// Borders
|
|
43
|
+
Divider = "#{hex do gray-200}", // Divisores
|
|
44
|
+
DividerLight = "#{hex do gray-100}", // Divisores mais claros
|
|
45
|
+
Lines = "#{hex do gray-300}", // Linhas de borda
|
|
46
|
+
|
|
47
|
+
// Action colors (usados em botões, links, etc)
|
|
48
|
+
ActionDefault = "#{hex do gray-500}",
|
|
49
|
+
ActionDisabled = "#{hex do gray-300}",
|
|
50
|
+
ActionDisabledBackground = "#{hex do gray-100}",
|
|
51
|
+
|
|
52
|
+
// Outros
|
|
53
|
+
Dark = "#{hex do gray-800}",
|
|
54
|
+
DarkLighten = "#{hex do gray-700}",
|
|
55
|
+
DarkDarken = "#{hex do gray-900}",
|
|
56
|
+
|
|
57
|
+
// Overlay (usado em modais, dropdowns)
|
|
58
|
+
OverlayLight = "rgba(255, 255, 255, 0.95)",
|
|
59
|
+
OverlayDark = "rgba(33, 33, 33, 0.95)",
|
|
60
|
+
|
|
61
|
+
// Hover effects
|
|
62
|
+
HoverOpacity = 0.06, // Opacidade do hover (6%)
|
|
63
|
+
},
|
|
64
|
+
|
|
65
|
+
Typography = new Typography
|
|
66
|
+
{
|
|
67
|
+
// Font Families
|
|
68
|
+
Default = new Default
|
|
69
|
+
{
|
|
70
|
+
FontFamily = new[] { "{Font Name}", "-apple-system", "BlinkMacSystemFont", "Segoe UI", "Roboto", "sans-serif" },
|
|
71
|
+
FontSize = "1rem", // 16px
|
|
72
|
+
FontWeight = 400, // Regular
|
|
73
|
+
LineHeight = 1.5,
|
|
74
|
+
LetterSpacing = "normal",
|
|
75
|
+
},
|
|
76
|
+
|
|
77
|
+
H1 = new H1
|
|
78
|
+
{
|
|
79
|
+
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
80
|
+
FontSize = "2.25rem", // 36px
|
|
81
|
+
FontWeight = 700, // Bold
|
|
82
|
+
LineHeight = 1.2,
|
|
83
|
+
},
|
|
84
|
+
|
|
85
|
+
H2 = new H2
|
|
86
|
+
{
|
|
87
|
+
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
88
|
+
FontSize = "1.875rem", // 30px
|
|
89
|
+
FontWeight = 700,
|
|
90
|
+
LineHeight = 1.3,
|
|
91
|
+
},
|
|
92
|
+
|
|
93
|
+
H3 = new H3
|
|
94
|
+
{
|
|
95
|
+
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
96
|
+
FontSize = "1.5rem", // 24px
|
|
97
|
+
FontWeight = 600,
|
|
98
|
+
LineHeight = 1.4,
|
|
99
|
+
},
|
|
100
|
+
|
|
101
|
+
H4 = new H4
|
|
102
|
+
{
|
|
103
|
+
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
104
|
+
FontSize = "1.25rem", // 20px
|
|
105
|
+
FontWeight = 600,
|
|
106
|
+
LineHeight = 1.4,
|
|
107
|
+
},
|
|
108
|
+
|
|
109
|
+
H5 = new H5
|
|
110
|
+
{
|
|
111
|
+
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
112
|
+
FontSize = "1.125rem", // 18px
|
|
113
|
+
FontWeight = 600,
|
|
114
|
+
LineHeight = 1.5,
|
|
115
|
+
},
|
|
116
|
+
|
|
117
|
+
H6 = new H6
|
|
118
|
+
{
|
|
119
|
+
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
120
|
+
FontSize = "1rem", // 16px
|
|
121
|
+
FontWeight = 600,
|
|
122
|
+
LineHeight = 1.5,
|
|
123
|
+
},
|
|
124
|
+
|
|
125
|
+
Body1 = new Body1
|
|
126
|
+
{
|
|
127
|
+
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
128
|
+
FontSize = "1rem", // 16px
|
|
129
|
+
FontWeight = 400,
|
|
130
|
+
LineHeight = 1.5,
|
|
131
|
+
},
|
|
132
|
+
|
|
133
|
+
Body2 = new Body2
|
|
134
|
+
{
|
|
135
|
+
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
136
|
+
FontSize = "0.875rem", // 14px
|
|
137
|
+
FontWeight = 400,
|
|
138
|
+
LineHeight = 1.43,
|
|
139
|
+
},
|
|
140
|
+
|
|
141
|
+
Button = new Button
|
|
142
|
+
{
|
|
143
|
+
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
144
|
+
FontSize = "0.875rem", // 14px
|
|
145
|
+
FontWeight = 600, // Semibold
|
|
146
|
+
LineHeight = 1.75,
|
|
147
|
+
TextTransform = "none", // Ou "uppercase" se preferir
|
|
148
|
+
},
|
|
149
|
+
|
|
150
|
+
Caption = new Caption
|
|
151
|
+
{
|
|
152
|
+
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
153
|
+
FontSize = "0.75rem", // 12px
|
|
154
|
+
FontWeight = 400,
|
|
155
|
+
LineHeight = 1.66,
|
|
156
|
+
},
|
|
157
|
+
|
|
158
|
+
Subtitle1 = new Subtitle1
|
|
159
|
+
{
|
|
160
|
+
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
161
|
+
FontSize = "1rem",
|
|
162
|
+
FontWeight = 500, // Medium
|
|
163
|
+
LineHeight = 1.75,
|
|
164
|
+
},
|
|
165
|
+
|
|
166
|
+
Subtitle2 = new Subtitle2
|
|
167
|
+
{
|
|
168
|
+
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
169
|
+
FontSize = "0.875rem",
|
|
170
|
+
FontWeight = 500,
|
|
171
|
+
LineHeight = 1.57,
|
|
172
|
+
},
|
|
173
|
+
|
|
174
|
+
Overline = new Overline
|
|
175
|
+
{
|
|
176
|
+
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
177
|
+
FontSize = "0.75rem",
|
|
178
|
+
FontWeight = 600,
|
|
179
|
+
LineHeight = 2.66,
|
|
180
|
+
LetterSpacing = "0.08em",
|
|
181
|
+
},
|
|
182
|
+
},
|
|
183
|
+
|
|
184
|
+
Shadows = new Shadow
|
|
185
|
+
{
|
|
186
|
+
Elevation = new[]
|
|
187
|
+
{
|
|
188
|
+
"none", // 0
|
|
189
|
+
"0 1px 2px 0 rgba(0, 0, 0, 0.05)", // 1
|
|
190
|
+
"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)", // 2
|
|
191
|
+
"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)", // 3
|
|
192
|
+
"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)", // 4
|
|
193
|
+
"0 25px 50px -12px rgba(0, 0, 0, 0.25)", // 5
|
|
194
|
+
// Adicione mais elevações conforme necessário
|
|
195
|
+
}
|
|
196
|
+
},
|
|
197
|
+
|
|
198
|
+
LayoutProperties = new LayoutProperties
|
|
199
|
+
{
|
|
200
|
+
// Border Radius
|
|
201
|
+
DefaultBorderRadius = "6px", // md
|
|
202
|
+
|
|
203
|
+
// Drawer
|
|
204
|
+
DrawerWidthLeft = "240px",
|
|
205
|
+
DrawerWidthRight = "240px",
|
|
206
|
+
|
|
207
|
+
// AppBar
|
|
208
|
+
AppbarHeight = "64px",
|
|
209
|
+
},
|
|
210
|
+
|
|
211
|
+
ZIndex = new ZIndex
|
|
212
|
+
{
|
|
213
|
+
Drawer = 1200,
|
|
214
|
+
AppBar = 1100,
|
|
215
|
+
Dialog = 1300,
|
|
216
|
+
Popover = 1400,
|
|
217
|
+
Snackbar = 1500,
|
|
218
|
+
Tooltip = 1600,
|
|
219
|
+
},
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
/// <summary>
|
|
223
|
+
/// Tema Dark Mode (opcional - ajustar cores)
|
|
224
|
+
/// </summary>
|
|
225
|
+
public static MudTheme DarkTheme => new()
|
|
226
|
+
{
|
|
227
|
+
Palette = new PaletteDark
|
|
228
|
+
{
|
|
229
|
+
// Cores Principais (ajustar para dark mode)
|
|
230
|
+
Primary = "#{hex}",
|
|
231
|
+
Secondary = "#{hex}",
|
|
232
|
+
|
|
233
|
+
// Cores de Estado
|
|
234
|
+
Success = "#{hex}",
|
|
235
|
+
Error = "#{hex}",
|
|
236
|
+
Warning = "#{hex}",
|
|
237
|
+
Info = "#{hex}",
|
|
238
|
+
|
|
239
|
+
// Background e Superfícies (tons escuros)
|
|
240
|
+
Background = "#{hex do gray-900}",
|
|
241
|
+
BackgroundGrey = "#{hex do gray-800}",
|
|
242
|
+
Surface = "#{hex do gray-800}",
|
|
243
|
+
|
|
244
|
+
// Text Colors (invertidos)
|
|
245
|
+
TextPrimary = "#{hex do gray-50}",
|
|
246
|
+
TextSecondary = "#{hex do gray-400}",
|
|
247
|
+
TextDisabled = "#{hex do gray-600}",
|
|
248
|
+
|
|
249
|
+
// Etc... (ajustar conforme design system dark mode)
|
|
250
|
+
},
|
|
251
|
+
|
|
252
|
+
// Compartilhar Typography e outras configurações do LightTheme
|
|
253
|
+
Typography = LightTheme.Typography,
|
|
254
|
+
Shadows = LightTheme.Shadows,
|
|
255
|
+
LayoutProperties = LightTheme.LayoutProperties,
|
|
256
|
+
ZIndex = LightTheme.ZIndex,
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/// <summary>
|
|
261
|
+
/// EXEMPLO DE USO:
|
|
262
|
+
///
|
|
263
|
+
/// // Program.cs
|
|
264
|
+
/// builder.Services.AddMudServices(config =>
|
|
265
|
+
/// {
|
|
266
|
+
/// config.SnackbarConfiguration.PositionClass = Defaults.Classes.Position.BottomRight;
|
|
267
|
+
/// });
|
|
268
|
+
///
|
|
269
|
+
/// // App.razor ou MainLayout.razor
|
|
270
|
+
/// <MudThemeProvider Theme="@AppTheme.LightTheme" />
|
|
271
|
+
/// <MudDialogProvider />
|
|
272
|
+
/// <MudSnackbarProvider />
|
|
273
|
+
///
|
|
274
|
+
/// // Para suportar dark mode dinâmico:
|
|
275
|
+
/// <MudThemeProvider @bind-IsDarkMode="@_isDarkMode"
|
|
276
|
+
/// Theme="@(_isDarkMode ? AppTheme.DarkTheme : AppTheme.LightTheme)" />
|
|
277
|
+
///
|
|
278
|
+
/// @code {
|
|
279
|
+
/// private bool _isDarkMode;
|
|
280
|
+
/// }
|
|
281
|
+
/// </summary>
|