Design System

O design system do Nitro UI usa Tailwind CSS para uma tematização simples e personalização fácil.

Tailwind CSS

O Tailwind CSS usa uma configuração CSS-first, permitindo que você defina seus design tokens com a diretiva @theme diretamente no seu CSS. Isso torna seu tema portátil, de fácil manutenção e fácil de personalizar.

app/assets/css/main.css
@import "tailwindcss";
@import "@nitro/ui";

@theme {
  /* Your custom design tokens go here */
}
Consulte a documentação do Tailwind CSS para todas as opções de personalização de variáveis de tema disponíveis.
O Tailwind CSS v4 alterou seu Preflight para que os botões usem cursor: default em vez de cursor: pointer, para corresponder aos padrões do navegador. Se você quiser restaurar o cursor de ponteiro globalmente, adicione estes estilos base ao seu CSS:
app/assets/css/main.css
@layer base {
  button:not(:disabled),
  [role="button"]:not(:disabled) {
    cursor: pointer;
  }
}

Fontes

Use as variáveis de tema --font-* para personalizar as utilidades de família de fontes no seu projeto.

app/assets/css/main.css
@import "tailwindcss";
@import "@nitro/ui";

@theme {
  --font-sans: 'Public Sans', system-ui, sans-serif;
  --font-mono: 'JetBrains Mono', monospace;
}
As fontes definidas aqui são automaticamente carregadas e otimizadas pelo módulo @nuxt/fonts.

Cores

Use as variáveis de tema --color-* para personalizar suas cores ou sobrescrever as cores padrão.

app/assets/css/main.css
@import "tailwindcss";
@import "@nitro/ui";

@theme static {
  /* Override default green color */
  --color-green-50: #EFFDF5;
  --color-green-100: #D9FBE8;
  --color-green-200: #B3F5D1;
  --color-green-300: #75EDAE;
  --color-green-400: #00DC82;
  --color-green-500: #00C16A;
  --color-green-600: #00A155;
  --color-green-700: #007F45;
  --color-green-800: #016538;
  --color-green-900: #0A5331;
  --color-green-950: #052E16;

  /* Define new custom color */
  --color-brand-50: #fef2f2;
  --color-brand-100: #fee2e2;
  --color-brand-200: #fecaca;
  --color-brand-300: #fca5a5;
  --color-brand-400: #f87171;
  --color-brand-500: #ef4444;
  --color-brand-600: #dc2626;
  --color-brand-700: #b91c1c;
  --color-brand-800: #991b1b;
  --color-brand-900: #7f1d1d;
  --color-brand-950: #450a0a;
}
Ao adicionar cores personalizadas, certifique-se de definir todos os tons de 50 a 950 para cada cor.

Breakpoints

Use as variáveis de tema --breakpoint-* para personalizar seus breakpoints.

app/assets/css/main.css
@import "tailwindcss";
@import "@nitro/ui";

@theme {
  --breakpoint-3xl: 1920px;
  --breakpoint-4xl: 2560px;
  --breakpoint-5xl: 3840px;
}

Cores

O sistema de cores do Nitro UI é baseado em nomes semânticos em vez de valores de cor específicos. Essa abordagem torna sua UI mais fácil de manter e permite trocar de tema facilmente.

Cores semânticas

O Nitro UI fornece aliases de cor semânticos que descrevem o propósito da cor. Cada alias é definido com base em uma cor da sua configuração @theme, que pode ser qualquer cor que você definir, além da paleta padrão do Tailwind CSS.

ColorDefaultDescription
primarygreenMain CTAs, active navigation, brand elements, important links
secondaryblueSecondary buttons, alternative actions, complementary UI elements
successgreenSuccess messages, completed states, positive confirmations
infoblueInfo alerts, tooltips, help text, neutral notifications
warningyellowWarning messages, pending states, attention-needed items
errorredError messages, validation errors, destructive actions
neutralslateText, borders, backgrounds, disabled states

Essas cores semânticas estão disponíveis na prop color dos componentes do Nitro UI:

<template>
  <NButton color="primary">Save Changes</NButton>
</template>
Experimente o seletor de tema no header para ver instantaneamente como diferentes esquemas de cores afetam toda a UI!

Configuração em tempo de execução

Você pode configurar essas cores em tempo de execução no seu arquivo app.config.ts, na chave ui.colors, permitindo a personalização dinâmica do tema sem reiniciar o servidor:

app/app.config.ts
export default defineAppConfig({
  ui: {
    colors: {
      primary: 'blue',
      secondary: 'purple',
      neutral: 'zinc'
    }
  }
})

Você pode configurar essas cores em tempo de execução no seu arquivo vite.config.ts, na chave ui.colors, permitindo a personalização dinâmica do tema:

vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import ui from '@nitro/ui/vite'

export default defineConfig({
  plugins: [
    vue(),
    ui({
      ui: {
        colors: {
          primary: 'blue',
          secondary: 'purple',
          neutral: 'zinc'
        }
      }
    })
  ]
})
Você só pode usar cores que existem no seu tema. Uma das opções:
  • Use Tailwind's default colors (like blue, green, zinc)
  • Define custom colors first using the @theme directive (like brand in our example above)

Estender cores

Você pode querer definir cores semânticas adicionais além das padrão, como adicionar uma cor tertiary:

Primeiro, registre a nova cor no seu nuxt.config.ts, na chave ui.theme.colors:

nuxt.config.ts
export default defineNuxtConfig({
  ui: {
    theme: {
      colors: [
        'primary',
        'secondary',
        'tertiary',
        'info',
        'success',
        'warning',
        'error'
      ]
    }
  }
})

Depois, atribua-a no seu app.config.ts, na chave ui.colors:

app/app.config.ts
export default defineAppConfig({
  ui: {
    colors: {
      primary: 'blue',
      secondary: 'purple',
      tertiary: 'indigo'
    }
  }
})

Registre e atribua a nova cor no seu arquivo vite.config.ts:

vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import ui from '@nitro/ui/vite'

export default defineConfig({
  plugins: [
    vue(),
    ui({
      theme: {
        colors: [
          'primary',
          'secondary',
          'tertiary',
          'info',
          'success',
          'warning',
          'error'
        ]
      },
      ui: {
        colors: {
          primary: 'blue',
          secondary: 'purple',
          tertiary: 'indigo'
        }
      }
    })
  ]
})

Por fim, use essa nova cor em componentes que suportam a prop color ou como uma classe:

<NButton color="tertiary">
  Special Action
</NButton>