Sistema de componentes tematizado · Nuevo recurso

Sistema de diseño de Nuxt UI.

Crea un compositor de informes completo con Nuxt UI 4.11.3, componentes reales de Vue, referencias semánticas al tema, validación de entradas y un comportamiento explícito para borradores locales.

Guía de OpenDesign8 capítulos37 entradas de referenciaGuía de aplicación original
01

Vista previa de la interfaz del sistema de diseño de Nuxt UI

Edita todos los datos de ejemplo, elige una lista de verificación, revisa la validación y restablece.

Redacta un resumen de proyecto local y fácil de leerAbrir ejemplo completo
Componentes nativos de Vue de Nuxt UI 4.11.3 y complementos oficiales de Vite/Vue; estado local original. · Referencia de implementación
02

Referencia de diseño del sistema de diseño de Nuxt UI

Valores predeterminados de Nuxt UI 4.11.3, CSS semánticos compilados reales y contratos nativos de componentes Vue. Las decisiones originales sobre el diseño y la validación se indican por separado.

Alias de colores semánticos predeterminados

Fuente
Nombre / ReglaValor / ConfiguraciónUso
primarygreenAlias predeterminado real de Nuxt UI 4.11.3. Las propiedades de color de los componentes hacen referencia a nombres semánticos, mientras que la paleta configurada proporciona sus valores.
secondaryblueAlias predeterminado real de Nuxt UI 4.11.3. Las propiedades de color de los componentes hacen referencia a nombres semánticos, mientras que la paleta configurada proporciona sus valores.
successgreenAlias predeterminado real de Nuxt UI 4.11.3. Las propiedades de color de los componentes hacen referencia a nombres semánticos, mientras que la paleta configurada proporciona sus valores.
infoblueAlias predeterminado real de Nuxt UI 4.11.3. Las propiedades de color de los componentes hacen referencia a nombres semánticos, mientras que la paleta configurada proporciona sus valores.
warningyellowAlias predeterminado real de Nuxt UI 4.11.3. Las propiedades de color de los componentes hacen referencia a nombres semánticos, mientras que la paleta configurada proporciona sus valores.
errorredAlias predeterminado real de Nuxt UI 4.11.3. Las propiedades de color de los componentes hacen referencia a nombres semánticos, mientras que la paleta configurada proporciona sus valores.
neutralslateAlias predeterminado real de Nuxt UI 4.11.3. Las propiedades de color de los componentes hacen referencia a nombres semánticos, mientras que la paleta configurada proporciona sus valores.

Roles de texto claro

Fuente
Nombre / ReglaValor / ConfiguraciónUso
--ui-text-dimmedvar(--ui-color-neutral-400)Texto complementario con el menor énfasis. No uses este rol para etiquetas de campos obligatorios ni mensajes de validación.
--ui-text-mutedvar(--ui-color-neutral-500)Descripciones complementarias, como las indicaciones de campos y el párrafo introductorio de la vista previa original.
--ui-text-tonedvar(--ui-color-neutral-600)Jerarquía de lectura secundaria; compárala con el rol de texto normal antes de reducir aún más el contraste.
--ui-textvar(--ui-color-neutral-700)Rol de texto predeterminado para la lectura principal y el contenido introducido por el usuario.
--ui-text-highlightedvar(--ui-color-neutral-900)Encabezados y detalles en primer plano de alto énfasis, incluido el titular principal de la vista previa.
--ui-text-inverted#fffPrimer plano para una superficie oscura invertida; no es una anulación general para texto blanco en todos los colores de énfasis.

Superficies claras y bordes

Fuente
Nombre / ReglaValor / ConfiguraciónUso
--ui-bg#fffLienzo base y superficie clara de la tarjeta que se usa en el compositor completo.
--ui-bg-mutedvar(--ui-color-neutral-50)Superficie secundaria discreta para una zona secundaria en la apariencia clara.
--ui-bg-elevatedvar(--ui-color-neutral-100)Mayor separación del lienzo blanco para superficies secundarias elevadas o destacadas.
--ui-bg-accentedvar(--ui-color-neutral-200)Fondo neutro más marcado; asegúrate de que los valores de los campos se lean bien sobre él.
--ui-bg-invertedvar(--ui-color-neutral-900)Superficie neutra oscura que combina con el rol de primer plano invertido.
--ui-bordervar(--ui-color-neutral-200)Línea divisoria neutra predeterminada para los campos y los contornos de las tarjetas.
--ui-border-mutedvar(--ui-color-neutral-200)Separadores de bajo énfasis entre bloques relacionados, en lugar de límites marcados entre secciones.
--ui-border-accentedvar(--ui-color-neutral-300)Contorno neutro más marcado para los casos en que el borde predeterminado no ofrece suficiente separación.
--ui-border-invertedvar(--ui-color-neutral-900)Rol de borde para superficies invertidas; úsalo con el fondo previsto.

Geometría compartida y tipografía de Tailwind

Fuente
Nombre / ReglaValor / ConfiguraciónUso
--ui-radius.25remValores predeterminados publicados de Nuxt UI o Tailwind en el resultado real de compilación. El diseño original usa un ancho máximo de 1100px y una separación de 24px.
--ui-container80remValores predeterminados publicados de Nuxt UI o Tailwind en el resultado real de compilación. El diseño original usa un ancho máximo de 1100px y una separación de 24px.
--spacing.25remValores predeterminados publicados de Nuxt UI o Tailwind en el resultado real de compilación. El diseño original usa un ancho máximo de 1100px y una separación de 24px.
--text-sm.875remValores predeterminados publicados de Nuxt UI o Tailwind en el resultado real de compilación. El diseño original usa un ancho máximo de 1100px y una separación de 24px.
--text-xl1.25remValores predeterminados publicados de Nuxt UI o Tailwind en el resultado real de compilación. El diseño original usa un ancho máximo de 1100px y una separación de 24px.
--text-4xl2.25remValores predeterminados publicados de Nuxt UI o Tailwind en el resultado real de compilación. El diseño original usa un ancho máximo de 1100px y una separación de 24px.

Contratos de los componentes de Vue

Fuente
Nombre / ReglaValor / ConfiguraciónUso
Vite pluginui({ colorMode: false })Genera las importaciones de componentes y temas, además de la integración necesaria con el navegador.
Vue plugincreateApp(App).use(ui)Importa ui desde @nuxt/ui/vue-plugin; importar un componente directamente no basta para completar la configuración independiente.
UAppApplication wrapperProporciona el contexto nativo de la aplicación para el árbol de componentes.
UFormFieldlabel, description, nameVincula el contexto del campo y el texto de apoyo legible al control.
UInput / UTextareav-modelAmbos campos de entrada son refs controlados de Vue; el área de texto también usa autoresize y rows.
USwitchv-model + labelLa opción de la lista de verificación es opcional y su estado es un booleano real.
UButton@click / color / variantLa composición principal y la opción de recuperación con contorno neutro usan variantes nativas.
UCardheader slot + default bodyMantiene el contenido del campo y el resultado legible en superficies nativas coincidentes.
UBadgecolor + variant="subtle"El texto y la apariencia distinguen el estado de espera del resultado compuesto localmente.
03

Nuxt UI: guía completa del sistema de diseño

Una guía práctica para elegir, aplicar y revisar este sistema en una interfaz real.

DESIGN-nuxt-ui.md

Orientación completa, un punto de partida para la implementación y enlaces al código fuente.

Descargar la guía

Nuxt UI: entorno de ejecución independiente de Vue para el sistema de diseño

Usa la vía de integración oficial de Vue

Este estudio ejecuta @nuxt/ui 4.11.3 en Vue 3 con Vite. No es una aplicación de Nuxt renderizada en el servidor. El plugin de Vite resuelve las plantillas de UI generadas, las importaciones automáticas de componentes y los alias del framework; el plugin de Vue registra la integración necesaria en tiempo de ejecución. El ejemplo completo incluye ambos para evitar una configuración engañosa que instala un paquete, pero deja sin resolver #build o #imports.

De esta guía de OpenDesign
  • @nuxt/ui/vite proporciona la integración en tiempo de compilación.
  • @nuxt/ui/vue-plugin proporciona el registro en tiempo de ejecución.
  • UApp envuelve el árbol de componentes nativos.

Mantén el contenedor de la aplicación y la hoja de estilos

UApp envuelve la composición. La hoja de estilos importa Tailwind CSS y @nuxt/ui, y la entrada principal importa esa hoja antes de montar la aplicación. La compilación genera componentes CSS reales y su comportamiento, en lugar de aproximaciones estáticas de tarjetas e interruptores. Esta configuración concreta del navegador permite inspeccionar la biblioteca; una aplicación Nuxt debe usar la configuración de módulo documentada para ella.

Nuxt UI: colores semánticos y variantes de componentes del sistema de diseño

Usa colores semánticos, no un verde copiado

La configuración predeterminada asigna el verde a primary y success, el azul a secondary e info, el amarillo a warning, el rojo a error y el gris pizarra a neutral. Los componentes nativos consumen esos alias mediante sus propiedades de color. Por ello, el botón principal para componer y el botón secundario con contorno neutro representan funciones de acción distintas, sin introducir una paleta personalizada y presentarla erróneamente como predeterminada de Nuxt UI.

Delimita claramente el ámbito de apariencia

El plugin de Vite está configurado con colorMode:false para este estudio solo con tema claro. La tabla de referencia enumera las declaraciones correspondientes de texto, superficie y borde para el tema claro. No afirma que esos valores literales también se apliquen al tema oscuro. Si un producto añade un modo de color, debe habilitar la integración elegida y verificar en conjunto sus controles, superficies y preferencias guardadas.

Nuxt UI: roles de texto, superficies y geometría del sistema de diseño

Interpreta las relaciones semánticas de CSS

El texto de apoyo usa --ui-text-muted, que apunta a neutral-500; el encabezado principal usa --ui-text-highlighted, que apunta a neutral-900. Las variables de superficie y borde también hacen referencia a la escala neutra configurada. La guía conserva esas relaciones en lugar de reducirlo todo a unos pocos valores hexadecimales inconexos, de modo que al cambiar la paleta neutra se mantenga un tema de componentes coherente.

Distingue los valores predeterminados compartidos de las decisiones de página

En esta versión, --ui-radius compartido es .25rem y --ui-container es 80rem. En cambio, el diseño original del encargo elige un ancho exterior máximo de 1100px, dos columnas con una separación de 24px y una sola columna por debajo de 700px. Los roles de texto reales de Tailwind determinan los tamaños del titular y del texto de apoyo. Esas decisiones de página están en el CSS proporcionado; no son requisitos inventados para toda la biblioteca.

Nuxt UI: composición de campos y validación local del sistema de diseño

Asigna a cada entrada un contexto de campo real

UFormField proporciona una etiqueta visible y un nombre alrededor de UInput o UTextarea. El campo de contexto también muestra el recuento de palabras calculado a partir de su contenido sin espacios al principio ni al final. Ambos controles usan v-model, por lo que los valores mostrados y el controlador de composición leen las mismas refs. El área de texto tiene un número inicial de filas adecuado y autoresize, lo que permite que el contenido más largo crezca en lugar de quedar oculto en un cuadro fijo recortado.

Valida antes de componer

Nuxt UI: borrador derivado y prevención de estados obsoletos del sistema de diseño

Combina únicamente el texto disponible

El resultado combina el título y el contexto proporcionados con una lista de verificación opcional y estática para compartir. Indica que se trata de un borrador local, no de una respuesta de IA. No hay ninguna llamada a un modelo, demora de carga ni contenido generado inventado. La lista de verificación opcional se controla mediante un booleano nativo de USwitch, y el texto compuesto refleja directamente esa selección.

Borra los resultados anteriores cuando cambien las entradas

Un watch de Vue sobre el título, el contexto y la lista de verificación elimina el resultado compuesto anterior cada vez que se edita alguno de ellos. La etiqueta de estado vuelve entonces a Esperando tu texto. Así se evita que un borrador obsoleto parezca actualizado mientras el usuario edita nuevas entradas. El recuento de palabras sigue siendo un valor computado, por lo que siempre corresponde al contexto actual.

Nuxt UI Estados vacíos y de restablecimiento completos del sistema de diseño

Aprovecha el panel de espera

Antes de crear el borrador, la tarjeta de la derecha explica por completo qué aparecerá y cómo funcionan la edición, la privacidad y el restablecimiento. No es un módulo de contenido vacío. Una vez creado el borrador, ese espacio muestra el texto completo y legible, con los saltos de línea y el ajuste de texto conservados. La insignia también indica el estado mediante texto, para que el color no sea la única señal.

Restablecer los datos de ejemplo completos

Al restablecer los datos de ejemplo, se recuperan el título original, todo el contexto y la lista de verificación activada, y se borran el resultado y cualquier error. Así, la demostración no queda en blanco ni obliga a adivinar qué contenido debería aparecer. La comprobación en el navegador crea un borrador modificado y luego verifica que, tras restablecerlo, vuelva a aparecer el título completo de ejemplo.

Nuxt UI Tarjetas adaptables y flujo de texto del sistema de diseño

Mantén el resultado legible en pantallas estrechas

Por debajo de los 700 px, las dos tarjetas pasan a una sola columna y todas las entradas ocupan el ancho disponible. El borrador utiliza pre-wrap en lugar de una línea preformateada que no se ajusta, de modo que los títulos o las frases largas pueden ajustarse con naturalidad. Los botones se ajustan dentro de su grupo de acciones. Tras editar y crear un borrador, se comprueba la página a 280 px y también en tamaños de móvil, tableta y escritorio.

Inspecciona el estado tras las transiciones nativas

El estilo del interruptor incluye su transición de estado nativa. La comprobación visual espera antes de capturar el resultado, para no confundir una posición intermedia del control o un color transitorio de la pista con el estado final. Las comprobaciones funcionales verifican el efecto booleano: confirman que, al desactivar el interruptor, se elimina la lista de verificación del texto creado.

Nuxt UI Proyecto completo de Vue y Vite del sistema de diseño

Utiliza los cinco archivos proporcionados

El ejemplo incluye App.vue, main.js, style.css, vite.config.mjs e index.html. La configuración incluye @vitejs/plugin-vue y @nuxt/ui/vite; el punto de entrada principal instala @nuxt/ui/vue-plugin. Instalar solo @nuxt/ui y pegar App.vue no constituye un proyecto completo que pueda ejecutarse. La configuración con versiones fijadas reproduce la vista previa local con sus componentes nativos y estilos semánticos reales.

  1. Guarda juntos los cinco archivos proporcionados.
  2. Instala las dependencias con versiones fijadas.
  3. Ejecuta Vite en ese directorio.
  4. Prueba la entrada que falta, el resultado editado, la eliminación de la lista de verificación y el restablecimiento.

Mantén este estudio del navegador separado de la implementación

Nuxt UI Ejemplos de componentes del sistema de diseño

App.vue

Composición completa de componentes nativos y estado reactivo.

vue
<script setup>
import{ref,computed,watch}from'vue';
const title=ref('A calmer project handoff'),context=ref('Help a small team understand what is ready, what needs a decision, and who owns the next step.'),checklist=ref(true),error=ref(''),brief=ref('');const words=computed(()=>context.value.trim()?context.value.trim().split(/\s+/).length:0);watch([title,context,checklist],()=>{brief.value='';error.value=''});function compose(){if(!title.value.trim()||!context.value.trim()){error.value='Add both a title and context before composing.';return}brief.value=title.value.trim()+'\n\nPurpose\n'+context.value.trim()+(checklist.value?'\n\nBefore sharing\n• Name the next decision.\n• Identify an owner.\n• Include the source materials.':'')+'\n\nThis is a local draft, not a generated AI response.';}function reset(){title.value='A calmer project handoff';context.value='Help a small team understand what is ready, what needs a decision, and who owns the next step.';checklist.value=true;brief.value='';error.value=''}
</script>
<template><UApp><main><p class="text-primary font-semibold text-sm">NUXT UI / ORIGINAL BRIEF COMPOSER</p><h1 class="text-4xl font-bold tracking-tight mt-4 text-highlighted">Put the next step into words.</h1><p class="text-muted mt-5 max-w-2xl leading-7">A local composition tool using Nuxt UI 4.11.3 in a standalone Vue application. The preview assembles your text; it does not call an AI model.</p><div class="layout"><UCard><template #header><h2 class="font-semibold text-xl">Write the essentials</h2></template><div class="stack"><UFormField label="Brief title" name="title"><UInput v-model="title" class="w-full" placeholder="Name the work" aria-label="Brief title"/></UFormField><UFormField label="Context" name="context" :description="words+' words in your context'"><UTextarea v-model="context" class="w-full" autoresize :rows="5" placeholder="What should the next person understand?" aria-label="Context"/></UFormField><USwitch v-model="checklist" label="Include the sharing checklist"/><p v-if="error" role="alert" class="text-error text-sm">{{error}}</p><div class="flex flex-wrap gap-3"><UButton @click="compose">Compose local brief</UButton><UButton color="neutral" variant="outline" @click="reset">Reset sample</UButton></div></div></UCard><UCard><template #header><div class="flex justify-between gap-3 flex-wrap"><h2 class="font-semibold text-xl">Readable draft</h2><UBadge :color="brief?'success':'neutral'" variant="subtle">{{brief?'Composed locally':'Waiting for your text'}}</UBadge></div></template><div v-if="brief" class="brief" role="status">{{brief}}</div><div v-else class="space-y-4 text-muted leading-7"><p>Your draft will keep the title and context you provide, with an optional sharing checklist.</p><ul class="list-disc pl-5 space-y-2"><li>Editing any input clears an older composed result.</li><li>No content leaves the browser.</li><li>Reset returns to the complete sample inputs.</li></ul></div></UCard></div><p class="notes text-muted">Actual UCard, UFormField, UInput, UTextarea, USwitch, UButton and UBadge components with Nuxt UI’s default semantic theme. Original application content and state; this example uses Vue/Vite, not a Nuxt server.</p></main></UApp></template>

Referencia de código

  • Mantén juntos los cinco archivos fuente.

main.js

Montaje de Vue y complemento de ejecución de Nuxt UI.

javascript
import{createApp}from'vue';import ui from'@nuxt/ui/vue-plugin';import App from'./App.vue';import './style.css';createApp(App).use(ui).mount('#app');

Referencia de código

  • Mantén juntos los cinco archivos fuente.

style.css

Importaciones del tema nativo y diseño adaptable original.

css
@import 'tailwindcss';
@import '@nuxt/ui';
body{margin:0}*{box-sizing:border-box}main{max-width:1100px;margin:auto;padding:32px}.layout{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin-top:32px}.stack{display:grid;gap:24px}.brief{white-space:pre-wrap;line-height:1.7;overflow-wrap:anywhere}.notes{font-size:13px;line-height:1.6;margin-top:24px}@media(max-width:700px){main{padding:16px}.layout{grid-template-columns:1fr}}textarea{min-height:150px}button{max-width:100%}

Referencia de código

  • Mantén juntos los cinco archivos fuente.

vite.config.mjs

Compilador de Vue y complemento de compilación de Nuxt UI.

javascript
import{defineConfig}from'vite';import vue from'@vitejs/plugin-vue';import ui from'@nuxt/ui/vite';export default defineConfig({plugins:[vue(),ui({colorMode:false})],base:'./',build:{cssCodeSplit:false}});

Referencia de código

  • Mantén juntos los cinco archivos fuente.

index.html

Documento raíz completo del navegador.

HTML
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Project brief composer</title></head><body><div id="app"></div><script type="module" src="./main.js"></script></body></html>

Referencia de código

  • Mantén juntos los cinco archivos fuente.
04

Nuxt UI Configuración del agente del sistema de diseño

Punto de partida para la implementación

Guarda primero los cinco archivos proporcionados. Usa una versión de Node compatible con las versiones fijadas de Vite y Nuxt UI (la compilación local utilizó Node 22.17).

sh
npm init -y
npm install [email protected] [email protected] @nuxt/[email protected] [email protected] [email protected] @vitejs/[email protected]
npx vite --host 127.0.0.1

Una instrucción para tu proyecto

Instrucción para el agente
Implementa el compositor de borradores independiente completo en Nuxt UI 4.11.3 con los complementos oficiales de Vite y Vue. Conserva los colores semánticos, los contextos de UFormField, las referencias controladas de entradas e interruptores, la validación con trim, el recuento de palabras calculado, el borrado de resultados obsoletos, el contenido de espera completo y el restablecimiento. No des a entender que se llama a una IA ni que se guarda en un backend.
05

Nuxt UI Fuentes y alcance del sistema de diseño

Componentes reales de Nuxt UI en una aplicación independiente de navegador con Vue/Vite. El compositor de borradores es código original de OpenDesign y no llama a un modelo de IA, un servidor de Nuxt ni un servicio de persistencia.