mui-v7-mastery
MUI V7 Mastery
Skill especializada em Material-UI V7 para criar interfaces profissionais e responsivas com React + TypeScript. Fornece conhecimento sobre migração, melhores práticas, e padrões avançados.
Quando Usar Esta Skill
Use esta skill quando:
- Criar dashboards ou interfaces administrativas
- Desenvolver aplicações React com Material Design
- Migrar de MUI V6 para V7
- Precisar de padrões responsivos mobile-first
- Configurar temas profissionais com dark mode
- Implementar componentes complexos (tabelas, formulários, etc)
- Quiser garantir uso correto da API do MUI V7
Filosofia de Uso do MUI V7
🎨 O MUI não é apenas para botões e barras!
O verdadeiro poder do MUI V7 está em:
- Sistema de Grid responsivo - Layouts profissionais que se adaptam
- Theming avançado - Personalização completa da marca
- Componentes compostos - Criar experiências ricas
- CSS Variables - Temas dinâmicos performáticos
- Design System - Consistência em toda aplicação
- Mobile-First by Default - Interfaces que funcionam perfeitamente em qualquer dispositivo
📱 Mobile-First Essentials
SEMPRE projete para mobile primeiro, depois expanda para desktop!
Princípios Fundamentais
- Comece em xs (0px) - Base styles funcionam em mobile
- Use
up()para expandir -theme.breakpoints.up('md')para desktop - Grid para layouts 2D - Cards, galerias, dashboards
- Stack para layouts 1D - Listas verticais/horizontais
- Touch targets ≥44px - Botões e ícones clicáveis (WCAG 2.2 AAA)
Breakpoints MUI V7
| Nome | Pixels | Dispositivo |
|---|---|---|
| xs | 0px | Mobile portrait |
| sm | 600px | Mobile landscape / Tablet portrait |
| md | 900px | Tablet landscape / Desktop small |
| lg | 1200px | Desktop |
| xl | 1536px | Desktop large |
Quando Usar Grid vs Stack
Precisa de layout?
│
├─ Itens em LINHAS E COLUNAS? → Grid
│ └─ Exemplo: Cards de produtos, dashboard tiles
│
└─ Itens em UMA DIREÇÃO? → Stack
├─ Vertical? → Stack (default)
└─ Horizontal? → Stack direction="row"
Quando Usar sx vs useMediaQuery
Precisa de responsividade?
│
├─ Apenas ESTILOS mudam? → sx prop
│ └─ fontSize, padding, display, width, etc
│
└─ LÓGICA/COMPORTAMENTO muda? → useMediaQuery
└─ Componentes diferentes, render condicional
Quick Start
1. Para Criar Nova Interface (Mobile-First)
// PASSO 1: Comece lendo as referências relevantes
// - Read references/responsive-design.md
// - Read references/advanced-theming.md
// - Read references/advanced-components.md
import { Container, Grid, Card, Stack, IconButton, useTheme, useMediaQuery } from '@mui/material';
function Dashboard() {
const theme = useTheme();
// PASSO 2: Defina breakpoint APENAS se lógica/comportamento mudar
const isMobile = useMediaQuery(theme.breakpoints.down('md'));
return (
<Container maxWidth="lg">
{/* PASSO 3: Mobile-first Grid (xs → md → lg) */}
<Grid container spacing={{ xs: 2, md: 3 }}>
{/* Mobile: 100% largura, Tablet: 50%, Desktop: 33% */}
<Grid size={{ xs: 12, md: 6, lg: 4 }}>
<Card sx={{
p: { xs: 2, md: 3 }, // Padding responsivo
minHeight: 200
}}>
{/* PASSO 4: Touch targets ≥44px em mobile */}
<Stack direction="row" spacing={1}>
<IconButton sx={{ minHeight: 44, minWidth: 44 }}>
<EditIcon />
</IconButton>
</Stack>
{/* PASSO 5: Componentes diferentes se necessário */}
{isMobile ? <MobileView /> : <DesktopView />}
</Card>
</Grid>
</Grid>
</Container>
);
}
2. Para Migrar de V6 para V7
# ANTES de qualquer código, leia:
# references/migration-v6-to-v7.md
# Depois execute os codemods:
npx @mui/codemod v7.0.0/grid-props src
npx @mui/codemod v7.0.0/lab-removed-components src
npx @mui/codemod v7.0.0/input-label-size-normal-medium src
# Configure ESLint para detectar código antigo:
node scripts/setup-mui-eslint.js
3. Para Configurar Tema Profissional
// Leia references/advanced-theming.md primeiro
import { createTheme, ThemeProvider } from '@mui/material/styles';
const theme = createTheme({
cssVariables: true, // ✅ Ativa CSS variables (recomendado V7)
colorSchemes: {
light: {
palette: {
primary: { main: '#1976d2' },
background: { default: '#fafafa' },
},
},
dark: {
palette: {
primary: { main: '#90caf9' },
background: { default: '#121212' },
},
},
},
typography: {
fontFamily: 'Inter, system-ui, sans-serif',
},
components: {
MuiButton: {
styleOverrides: {
root: {
textTransform: 'none',
borderRadius: 8,
},
},
},
},
});
Fluxo de Trabalho Recomendado
Para Qualquer Tarefa MUI
-
Identifique o tipo de trabalho:
- Nova interface? → Leia responsive-design.md + advanced-components.md
- Migração? → Leia migration-v6-to-v7.md primeiro
- Tema? → Leia advanced-theming.md
- Tudo junto? → Leia todos os references
-
Leia as referências relevantes:
// SEMPRE faça isso ANTES de escrever código view references/[arquivo-relevante].md -
Implemente seguindo os padrões:
- Use os exemplos das referências como base
- Adapte ao caso específico
- Siga as melhores práticas indicadas
-
Valide com ESLint (opcional mas recomendado):
node scripts/setup-mui-eslint.js npm run lint:mui
Recursos Disponíveis
📚 References (Leia conforme necessidade)
migration-v6-to-v7.md
Quando ler: Ao migrar código existente ou corrigir erros de breaking changes.
Contém:
- ❌ Sintaxe antiga vs ✅ Nova sintaxe V7
- Mudanças de breaking changes (Grid, imports, props)
- Codemods automáticos
- Guia passo-a-passo de migração
- Novos recursos do V7 (ESM, CSS Layers)
Situações de uso:
- Erros de import após atualizar para V7
- Componentes Grid não funcionando
- Props depreciadas sendo usadas
- Problemas com Hidden, Dialog.onBackdropClick, etc
responsive-design.md
Quando ler: Ao criar qualquer interface que precisa funcionar em mobile.
Contém:
- Sistema Grid completo com exemplos
- Breakpoints e useMediaQuery
- Padrões de navegação responsiva
- Cards, formulários e dialogs responsivos
- Mobile-first best practices
Situações de uso:
- Criar dashboards responsivos
- Layouts que se adaptam a diferentes telas
- Navegação mobile vs desktop
- Formulários otimizados para mobile
advanced-theming.md
Quando ler: Ao configurar tema personalizado ou dark mode.
Contém:
- Criação de tema com TypeScript
- CSS Variables (nova abordagem V7)
- Dark/Light mode toggle
- Customização avançada de componentes
- Variantes customizadas
- Module augmentation
Situações de uso:
- Aplicar identidade visual da marca
- Implementar dark mode
- Criar variantes customizadas de componentes
- Estilização global consistente
advanced-components.md
Quando ler: Ao implementar componentes complexos.
Contém:
- Dashboard layout completo
- Cards com skeleton loading
- Data tables avançadas (sort, search, pagination)
- Formulários com validação
- Sistema de toasts/snackbar
- Autocomplete assíncrono
- Performance (lazy loading, memoização, virtualização)
Situações de uso:
- Criar layouts profissionais
- Implementar tabelas de dados
- Formulários complexos com validação
- Loading states
- Listas grandes (virtualização)
🔧 Scripts
setup-mui-eslint.js
Propósito: Configurar ESLint para detectar sintaxe antiga do MUI V6 automaticamente.
Como usar:
node scripts/setup-mui-eslint.js
O que faz:
- Adiciona regras ESLint customizadas
- Detecta imports depreciados
- Avisa sobre props removidas
- Mensagens amigáveis e educativas (emoji + explicação)
- Cria scripts npm para migração automática
Mensagens exemplo:
- ❌ Deep imports não são mais suportados no MUI V7
- ✨ Este componente foi movido para @mui/material
- ⚠️ Grid foi renomeado. Considere migrar para novo Grid
- 🔄 Use onClose em vez de onBackdropClick
Mudanças Críticas V7 (Resumo Rápido)
❌ NÃO FUNCIONA MAIS:
// Deep imports
import createTheme from '@mui/material/styles/createTheme'; // ❌
// Grid antigo
import Grid from '@mui/material/Grid'; // ❌ (agora é GridLegacy)
// Grid2
import Grid2 from '@mui/material/Grid2'; // ❌ (agora é Grid)
// Componentes do lab
import Alert from '@mui/lab/Alert'; // ❌
// Props depreciadas
<Dialog onBackdropClick={...} /> // ❌
<InputLabel size="normal" /> // ❌
<Hidden xlUp>...</Hidden> // ❌
✅ USE AGORA:
// Imports corretos
import { createTheme } from '@mui/material/styles'; // ✅
// Novo Grid (era Grid2)
import Grid from '@mui/material/Grid'; // ✅
// Componentes movidos
import Alert from '@mui/material/Alert'; // ✅
// Props atualizadas
<Dialog onClose={(e, reason) => {...}} /> // ✅
<InputLabel size="medium" /> // ✅
<Box sx={{ display: { xl: 'none' } }} /> // ✅
Padrão de Resposta para Dashboards
Quando solicitado "criar um dashboard bonito", siga este padrão:
-
Leia as referências:
view references/responsive-design.md view references/advanced-components.md view references/advanced-theming.md -
Implemente com abordagem Mobile-First:
- Comece em xs (mobile) - Layout vertical, touch targets 44px
- Expanda para md (tablet) - 2 colunas, espaçamento maior
- Finalize em lg (desktop) - 3-4 colunas, densidade compacta
- Layout responsivo usando novo Grid V7
- Tema personalizado com dark mode
- Componentes profissionais (não apenas Button básico)
- Loading states (Skeleton)
- TypeScript sem
any
-
Inclua SEMPRE (Mobile-First):
- Container para centralização
- Grid com
size={{ xs: 12, md: 6, lg: 4 }} - Cards com padding responsivo
p={{ xs: 2, md: 3 }} - Touch targets ≥44px em IconButton/Button
- Stack para layouts verticais (não Grid direction="column")
- Skeleton para loading
- useMediaQuery APENAS se lógica mudar
- Theme com cssVariables
- Testado em 375px, 768px, 1200px
Dicas de Ouro 💡
Mobile-First (Prioridade!)
- Sempre comece em xs - Base styles para mobile primeiro
- Use
up()para expandir -theme.breakpoints.up('md'), nuncadown() - Touch targets ≥44px - Botões, ícones, links clicáveis
<IconButton sx={{ minHeight: 44, minWidth: 44 }}> - Spacing entre targets ≥10px - Evita cliques errados
- Grid para 2D, Stack para 1D - Não use
Grid direction="column" - sx para estilos, useMediaQuery para lógica
- Teste em 375px, 768px, 1200px - Limites críticos
Touch Targets (WCAG 2.2)
| Contexto | Visual | Touch Target | WCAG Level |
|---|---|---|---|
| Mobile primário | 40-48px | 48px | AAA |
| Desktop compacto | 32-36px | 44px | AAA |
| Mínimo legal | 24px | 24px | AA |
Padrão recomendado:
// Visual: 36px (compacto), Touch: 48px (seguro)
<Button sx={{
height: { xs: 40, md: 36 }, // Visual height
minHeight: { xs: 48, md: 44 } // Touch target
}}>
Action
</Button>
Performance
- Use
cssVariables: truepara temas dinâmicos - Implemente Skeleton para loading states
- Use lazy loading para componentes pesados
- Virtualize listas grandes (react-window)
- Compartilhe useMediaQuery - Evite duplicar em children
Responsividade
- Mobile-first SEMPRE - xs → sm → md → lg → xl
- Use
size={{ xs: 12, md: 6 }}no Grid sxprop para estilos responsivos:sx={{ fontSize: { xs: '14px', md: '16px' }, p: { xs: 2, md: 3 } }}- useMediaQuery APENAS para lógica condicional
- Teste em dispositivos reais, não só emulador
Theming
- Configure dark mode desde o início
- Use
theme.vars.*para CSS variables - Crie variantes no tema, não inline
- TypeScript com module augmentation
Componentes
- Leia advanced-components.md para padrões
- Use composition em vez de prop drilling
- Memoize componentes caros
- Skeleton > Loading spinner
Comandos Úteis
# Migração automática
npx @mui/codemod v7.0.0/lab-removed-components src
npx @mui/codemod v7.0.0/grid-props src
npx @mui/codemod v7.0.0/input-label-size-normal-medium src
# Setup ESLint (detecção de código antigo)
node scripts/setup-mui-eslint.js
# Lint MUI
npm run lint:mui
# Migração completa (após configurar ESLint)
npm run mui-migrate
Checklist de Qualidade Mobile-First
Antes de considerar uma interface MUI V7 completa:
Design Mobile-First
- Base styles em xs (0px) - Funciona em mobile primeiro
- Progressive enhancement com
up()-theme.breakpoints.up('md')eup('lg') - Touch targets ≥44px - Botões, ícones, links (WCAG 2.2 AAA)
- Visual height pode ser 32-36px SE touch target ≥44px
- Spacing entre elementos interativos ≥10px
- Grid para layouts 2D - Cards, dashboards, galerias
- Stack para layouts 1D - Listas verticais/horizontais
- Sem
Grid direction="column"- Use Stack
Responsividade
- Layout testado em 375px (mobile pequeno)
- Layout testado em 599px (edge sm breakpoint)
- Layout testado em 768px (tablet)
- Layout testado em 899px (edge md breakpoint)
- Layout testado em 1199px (edge lg breakpoint)
- Layout testado em 1920px (desktop grande)
- sx prop usado para estilos - fontSize, padding, display
- useMediaQuery usado APENAS para lógica - Componentes diferentes, render condicional
- useMediaQuery compartilhado - Não duplicado em children
- Sem valores hardcoded de pixels em breakpoints
Tema e Estilo
- Tema configurado com dark mode
-
cssVariables: trueativado - Sem erros de imports depreciados
Performance
- Loading states implementados (Skeleton)
- Componentes pesados com lazy loading
- Listas grandes virtualizadas (react-window)
- Componentes memoizados onde necessário
Code Quality
- TypeScript sem erros
- Nenhum uso de
any - Componentes seguem Atomic Design (quando aplicável)
Acessibilidade
- Contraste de cores adequado (WCAG AA mínimo)
- ARIA labels em elementos interativos
- Touch targets WCAG 2.2 compliant
- Testado com leitor de tela (quando crítico)
Recursos Externos
Lembre-se: O MUI V7 é poderoso quando usado completamente. Não se limite a botões - explore Grid, theming, composição e padrões avançados! 🚀
More from just-mpm/conformai
nextjs-pwa
Comprehensive guide for building Progressive Web Apps (PWA) with Next.js using modern 2025 approaches. Use when users need to implement PWA features in Next.js applications including installability, offline support, service workers, web app manifests, caching strategies, push notifications, or converting existing Next.js apps to PWA. Covers both native Next.js PWA support (zero dependencies, App Router) and Serwist package (advanced offline capabilities, service worker management). Also use when troubleshooting PWA issues, optimizing PWA performance, or migrating from deprecated packages like next-pwa.
44nextjs-16-specialist
This skill should be used when developing Next.js 16 applications with React, TypeScript, Material-UI V7, and Firebase. Provides comprehensive guidance on setup, best practices, error handling, and advanced patterns for production-ready applications.
4brainstorming
Use when creating or developing anything, before writing code or implementation plans - refines rough ideas into fully-formed designs through structured Socratic questioning, alternative exploration, and incremental validation
2firebase-master
Comprehensive Firebase skill for TypeScript/Next.js 16 projects. Use when configuring Firebase services (Firestore Client SDK with aggregations/vector search, Authentication, Storage, Cloud Functions v2, FCM push notifications, App Check bot protection), implementing security rules and indexes, troubleshooting Firebase errors, setting up auth providers (email/password, Google Sign-In), configuring VAPID keys for notifications, custom action URLs, reCAPTCHA Enterprise, replay protection, or resolving permission issues. Covers TypeScript patterns, Next.js 16 SSR/App Router integration, and common pain points like CORS, duplicate documents, notification setup, and bot abuse prevention.
2stripe-integration
Comprehensive guide for integrating Stripe with Firebase, Next.js, React, and TypeScript. Use when working with Stripe payments, subscriptions, webhooks, or checkout. Covers webhook setup with Firebase Cloud Functions v2, Next.js App Router webhook handling, signature verification, common errors and solutions, Stripe CLI usage, and MCP integration. Essential for setting up Stripe correctly in Firebase+Next.js+TypeScript projects.
2firebase-app-hosting
Guide for configuring, deploying, and troubleshooting Firebase App Hosting with Next.js and other frameworks. Use when setting up apphosting.yaml, debugging build/deploy errors, managing environment variables, configuring Cloud Run settings, or adapting projects for App Hosting production environment.
2