mcpField
M
mui-v7-mastery

mui-v7-mastery

github.com/just-mpmDesign & UI48 installs
Repository

About mui-v7-mastery

mui-v7-mastery is a skill for building React and TypeScript interfaces with Material UI V7, covering responsive design, theming, complex components, and migration from V6. Topic-specific references and workflows guide implementation and upgrades.

Key features

  1. 01Mobile-first responsive design guidance
  2. 02Theme and dark-mode configuration
  3. 03Patterns for complex components
  4. 04MUI V6-to-V7 migration guidance
  5. 05ESLint checks for legacy syntax

Use cases

  1. 01Build responsive dashboards and admin interfaces
  2. 02Configure branded themes and dark mode
  3. 03Migrate an existing project to MUI V7
  4. 04Implement data tables and complex forms

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/just-mpm/conformai --skill mui-v7-mastery

After installing, type/mui-v7-masteryin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

references/
advanced-components.md
advanced-theming.md
migration-v6-to-v7.md
responsive-design.md
scripts/
setup-mui-eslint.js

Details

From the project README

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:

  1. Sistema de Grid responsivo - Layouts profissionais que se adaptam
  2. Theming avançado - Personalização completa da marca
  3. Componentes compostos - Criar experiências ricas
  4. CSS Variables - Temas dinâmicos performáticos
  5. Design System - Consistência em toda aplicação
  6. 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
  1. Comece em xs (0px) - Base styles funcionam em mobile
  2. Use up() para expandir - theme.breakpoints.up('md') para desktop
  3. Grid para layouts 2D - Cards, galerias, dashboards
  4. Stack para layouts 1D - Listas verticais/horizontais
  5. Touch targets ≥44px - Botões e ícones clicáveis (WCAG 2.2 AAA)
Breakpoints MUI V7
NomePixelsDispositivo
xs0pxMobile portrait
sm600pxMobile landscape / Tablet portrait
md900pxTablet landscape / Desktop small
lg1200pxDesktop
xl1536pxDesktop 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
  1. 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
  2. Leia as referências relevantes:

    // SEMPRE faça isso ANTES de escrever código
    view references/[arquivo-relevante].md
    
  3. Implemente seguindo os padrões:

    • Use os exemplos das referências como base
    • Adapte ao caso específico
    • Siga as melhores práticas indicadas
  4. 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:

  1. Leia as referências:

    view references/responsive-design.md
    view references/advanced-components.md
    view references/advanced-theming.md
    
  2. 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
  3. 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'), nunca down()
  • 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)
ContextoVisualTouch TargetWCAG Level
Mobile primário40-48px48pxAAA
Desktop compacto32-36px44pxAAA
Mínimo legal24px24pxAA

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: true para 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
  • sx prop 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') e up('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: true ativado
  • 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! 🚀

Comments

Markdown supported