Pular para o conteúdo

Nuxt 4

Tutorial completo para usar Sinapse em Nuxt 4: projeto, Tailwind v4, tema inline, validação e primeiro botão com shadcn-vue.

Tutorial por stack

Nuxt usa Sinapse como tema antes do shadcn-nuxt

Este fluxo separa a base visual do motor de componentes: primeiro Tailwind v4 e tema inline gerado pela CLI, depois shadcn-nuxt para auto-import e comportamento.

  1. 01 Crie ou abra um projeto Nuxt 4
  2. 02 Instale Tailwind v4 no Vite do Nuxt
  3. 03 Aplique o tema ITpS com o CLI
  4. 04 Valide os tokens em uma página Nuxt
  5. 05 Adicione shadcn-nuxt e inicialize shadcn-vue
  6. 06 Adicione só o Button e valide no Nuxt

1 · Projeto

Crie ou abra um projeto Nuxt 4

Se o projeto já existe, entre nele. Em projeto novo, crie com o starter atual do Nuxt e siga com pnpm.

terminal

pnpm create nuxt@latest meu-app
cd meu-app
pnpm install

2 · Tailwind v4

Instale Tailwind v4 no Vite do Nuxt

O Sinapse precisa do Tailwind v4. No Nuxt, registre o CSS global e adicione o plugin @tailwindcss/vite dentro de vite.plugins.

terminal

pnpm add tailwindcss @tailwindcss/vite

nuxt.config.ts

import tailwindcss from '@tailwindcss/vite'

export default defineNuxtConfig({
  css: ['~/assets/css/main.css'],
  vite: {
    plugins: [tailwindcss()],
  },
})

Se o seu nuxt.config.ts já tem modules, appConfig ou outras chaves, preserve tudo e adicione apenas css e vite.plugins.

3 · CSS Sinapse

Aplique o tema ITpS com o CLI

No Nuxt 4, mantenha o CSS principal em app/assets/css/main.css. Rode o CLI ITpS para instalar @itps/styles, escrever o tema inline e remover blocos shadcn que sobrescrevem os tokens.

terminal

pnpm dlx github:ITPS/sinapse-ui-cli init

estrutura sugerida

app/
└── assets/
    └── css/
        └── main.css

app/assets/css/main.css

@import "tailwindcss";

/* itps-theme:start */
/* tema ITpS gerado pela CLI */
/* itps-theme:end */

Enquanto os pacotes forem usados por tarball, rode pnpm --package=./itps-cli-0.3.0.tgz dlx itps init --package ./itps-styles-0.3.0.tgz.

4 · Validação Sinapse

Valide os tokens em uma página Nuxt

Antes de instalar shadcn-nuxt, confirme que o Nuxt está carregando o tema. Se este botão aparecer com azul institucional, texto contrastante e radius, os tokens ITpS estão disponíveis.

app/pages/index.vue

<template>
  <button
    type="button"
    class="rounded-md bg-primary px-4 py-2 text-primary-foreground"
  >
    Sinapse rodando
  </button>
</template>

5 · Biblioteca

Adicione shadcn-nuxt e inicialize shadcn-vue

Use shadcn-nuxt para integração com auto-import do Nuxt e depois rode o init do shadcn-vue. Quando a CLI pedir a cor base, mantenha neutral.

terminal

pnpm dlx nuxi@latest module add shadcn-nuxt

nuxt.config.ts (trecho)

export default defineNuxtConfig({
  modules: ['shadcn-nuxt'],
  shadcn: {
    prefix: '',
    componentDir: './components/ui',
  },
})

terminal

pnpm dlx nuxi prepare

terminal

pnpm dlx shadcn-vue@latest init

Se o init do shadcn-vue recriar blocos :root/.dark/@theme no CSS, rode pnpm dlx github:ITPS/sinapse-ui-cli init novamente para limpar e reaplicar o tema ITpS. Alguns componentes do shadcn-vue usam VueUse em SSR; o plugin de ssrWidth abaixo evita hidratação inconsistente em componentes responsivos.

6 · Primeiro componente

Adicione só o Button e valide no Nuxt

Nuxt auto-importa o componente quando shadcn-nuxt está configurado. Depois de adicionar o Button, rode o comando individual da CLI para adicionar as variants itps sem alterar as variants originais do shadcn-vue.

app/plugins/ssr-width.ts

import { provideSSRWidth } from '@vueuse/core'

export default defineNuxtPlugin((nuxtApp) => {
  provideSSRWidth(1024, nuxtApp.vueApp)
})

terminal

pnpm dlx shadcn-vue@latest add button
pnpm dlx github:ITPS/sinapse-ui-cli add button

app/pages/index.vue

<template>
  <Button variant="itps">Sinapse rodando</Button>
</template>

O comando add é por componente: pnpm dlx github:ITPS/sinapse-ui-cli add button adapta só o Button. Ele não instala todos os componentes; para outros componentes documentados, use pnpm dlx github:ITPS/sinapse-ui-cli add <nome>. Quando não houver adapter de patch, o comando confirma o contrato theme-only sem alterar arquivos.

Próximos passos

Continue com a referência certa