Système de composants thématisé · Nouvelle ressource

Système de design Nuxt UI.

Créez un compositeur de briefs Nuxt UI 4.11.3 complet, avec de véritables composants Vue, des références sémantiques au thème, la validation des champs et un comportement explicite pour les brouillons locaux.

Guide OpenDesign8 chapitres37 entrées de référenceGuide de l’application d’origine
01

Aperçu de l’interface du système de design Nuxt UI

Modifiez les exemples de saisie complets, choisissez une liste de contrôle, examinez la validation et réinitialisez.

Rédigez un brief de projet local et lisibleOuvrir l’exemple complet
Nuxt UI 4.11.3, composants Vue natifs et plug-ins officiels Vite/Vue ; état local d’origine. · Référence de mise en œuvre
02

Référence de conception du système de design Nuxt UI

Valeurs par défaut de Nuxt UI 4.11.3, CSS sémantique réellement compilée et contrats des composants Vue natifs. Les choix de mise en page et de validation d’origine sont indiqués séparément.

Alias de couleurs sémantiques par défaut

Source
Nom / règleValeur / configurationUtilisation
primarygreenAlias par défaut réel de Nuxt UI 4.11.3. Les propriétés de couleur des composants font référence à des noms sémantiques, auxquels la palette configurée attribue leurs valeurs.
secondaryblueAlias par défaut réel de Nuxt UI 4.11.3. Les propriétés de couleur des composants font référence à des noms sémantiques, auxquels la palette configurée attribue leurs valeurs.
successgreenAlias par défaut réel de Nuxt UI 4.11.3. Les propriétés de couleur des composants font référence à des noms sémantiques, auxquels la palette configurée attribue leurs valeurs.
infoblueAlias par défaut réel de Nuxt UI 4.11.3. Les propriétés de couleur des composants font référence à des noms sémantiques, auxquels la palette configurée attribue leurs valeurs.
warningyellowAlias par défaut réel de Nuxt UI 4.11.3. Les propriétés de couleur des composants font référence à des noms sémantiques, auxquels la palette configurée attribue leurs valeurs.
errorredAlias par défaut réel de Nuxt UI 4.11.3. Les propriétés de couleur des composants font référence à des noms sémantiques, auxquels la palette configurée attribue leurs valeurs.
neutralslateAlias par défaut réel de Nuxt UI 4.11.3. Les propriétés de couleur des composants font référence à des noms sémantiques, auxquels la palette configurée attribue leurs valeurs.

Rôles de texte clairs

Source
Nom / règleValeur / configurationUtilisation
--ui-text-dimmedvar(--ui-color-neutral-400)Texte complémentaire au niveau d’importance le plus faible. N’utilisez pas ce rôle pour les libellés obligatoires des champs ni pour les messages de validation.
--ui-text-mutedvar(--ui-color-neutral-500)Descriptions complémentaires, comme les indications des champs et le paragraphe d’introduction de l’aperçu d’origine.
--ui-text-tonedvar(--ui-color-neutral-600)Hiérarchie de lecture secondaire ; comparez-la au rôle de texte normal avant de réduire davantage le contraste.
--ui-textvar(--ui-color-neutral-700)Rôle de texte par défaut pour le fil de lecture principal et le contenu saisi par l’utilisateur.
--ui-text-highlightedvar(--ui-color-neutral-900)Titres et éléments de premier plan fortement mis en valeur, notamment le titre principal de l’aperçu.
--ui-text-inverted#fffPremier plan destiné à une surface sombre inversée ; ce rôle ne sert pas à remplacer généralement le texte par du blanc sur chaque couleur d’accentuation.

Surfaces claires et bordures

Source
Nom / règleValeur / configurationUtilisation
--ui-bg#fffFond de base et surface claire de la carte utilisée dans le composeur complet.
--ui-bg-mutedvar(--ui-color-neutral-50)Surface d’appoint discrète pour une zone secondaire dans l’apparence claire.
--ui-bg-elevatedvar(--ui-color-neutral-100)Contraste renforcé avec le fond blanc pour les surfaces secondaires surélevées ou mises en évidence.
--ui-bg-accentedvar(--ui-color-neutral-200)Fond neutre plus marqué ; veillez à ce que les valeurs des champs restent lisibles dessus.
--ui-bg-invertedvar(--ui-color-neutral-900)Surface neutre sombre à associer au rôle de premier plan inversé.
--ui-bordervar(--ui-color-neutral-200)Ligne de séparation neutre par défaut pour les champs et les contours des cartes.
--ui-border-mutedvar(--ui-color-neutral-200)Séparateurs peu marqués entre les blocs associés, plutôt que de fortes délimitations de section.
--ui-border-accentedvar(--ui-color-neutral-300)Contour neutre plus marqué lorsque la bordure par défaut ne suffit pas à assurer une séparation nette.
--ui-border-invertedvar(--ui-color-neutral-900)Rôle de bordure pour les surfaces inversées ; utilisez-le avec l’arrière-plan prévu à cet effet.

Géométrie partagée et typographie Tailwind

Source
Nom / règleValeur / configurationUtilisation
--ui-radius.25remValeurs par défaut publiées de Nuxt UI ou de Tailwind dans le résultat réellement compilé. La mise en page d’origine utilise une largeur maximale de 1100px et un espacement de 24px.
--ui-container80remValeurs par défaut publiées de Nuxt UI ou de Tailwind dans le résultat réellement compilé. La mise en page d’origine utilise une largeur maximale de 1100px et un espacement de 24px.
--spacing.25remValeurs par défaut publiées de Nuxt UI ou de Tailwind dans le résultat réellement compilé. La mise en page d’origine utilise une largeur maximale de 1100px et un espacement de 24px.
--text-sm.875remValeurs par défaut publiées de Nuxt UI ou de Tailwind dans le résultat réellement compilé. La mise en page d’origine utilise une largeur maximale de 1100px et un espacement de 24px.
--text-xl1.25remValeurs par défaut publiées de Nuxt UI ou de Tailwind dans le résultat réellement compilé. La mise en page d’origine utilise une largeur maximale de 1100px et un espacement de 24px.
--text-4xl2.25remValeurs par défaut publiées de Nuxt UI ou de Tailwind dans le résultat réellement compilé. La mise en page d’origine utilise une largeur maximale de 1100px et un espacement de 24px.

Contrats des composants Vue

Source
Nom / règleValeur / configurationUtilisation
Vite pluginui({ colorMode: false })Génère les imports des composants et du thème, ainsi que l’intégration requise au navigateur.
Vue plugincreateApp(App).use(ui)Importez ui depuis @nuxt/ui/vue-plugin ; importer un composant brut ne suffit pas à configurer l’environnement autonome.
UAppApplication wrapperFournit le contexte de l’application native à l’arborescence des composants.
UFormFieldlabel, description, nameRelie le contexte du champ et le texte d’aide lisible au contrôle.
UInput / UTextareav-modelLes deux champs sont contrôlés par des références Vue ; la zone de texte utilise également autoresize et rows.
USwitchv-model + labelLe choix facultatif de la liste de contrôle correspond à un véritable état booléen.
UButton@click / color / variantLa composition principale et l’action de rétablissement au contour neutre utilisent des variantes natives.
UCardheader slot + default bodyPrésente le contenu du champ et le résultat lisible sur des surfaces natives assorties.
UBadgecolor + variant="subtle"Le texte et l’apparence distinguent l’état d’attente du résultat composé localement.
03

Guide complet du système de design Nuxt UI

Un guide pratique pour choisir, appliquer et évaluer ce système dans une interface réelle.

DESIGN-nuxt-ui.md

Des conseils complets, un point de départ pour la mise en œuvre et des liens vers les sources.

Télécharger le guide

Environnement d’exécution Vue autonome du système de design Nuxt UI

Utilisez le parcours d’intégration officiel de Vue

Cette étude exécute @nuxt/ui 4.11.3 avec Vue 3 et Vite. Il ne s’agit pas d’une application Nuxt avec rendu côté serveur. Le plug-in Vite résout les modèles d’interface générés, les imports automatiques des composants et les alias du framework ; le plug-in Vue enregistre l’intégration requise à l’exécution. L’exemple complet inclut les deux plug-ins, évitant ainsi une configuration trompeuse qui installe un package sans résoudre #build ou #imports.

Extrait de ce guide OpenDesign
  • @nuxt/ui/vite fournit l’intégration à la compilation.
  • @nuxt/ui/vue-plugin fournit l’enregistrement à l’exécution.
  • UApp enveloppe l’arborescence native des composants.

Conservez le composant englobant de l’application et la feuille de style

UApp enveloppe la composition. La feuille de style importe Tailwind CSS et @nuxt/ui, et le point d’entrée principal importe cette feuille avant de monter l’application. La compilation produit de véritables composants CSS et leur comportement, plutôt que de simples imitations statiques de cartes et d’interrupteurs. Il s’agit d’une configuration concrète pour examiner la bibliothèque dans un navigateur ; une application Nuxt doit utiliser la configuration de module décrite dans sa propre documentation.

Couleurs sémantiques et variantes de composants du système de design Nuxt UI

Utilisez des couleurs sémantiques plutôt qu’un vert repris tel quel

La configuration par défaut associe primary et success au vert, secondary et info au bleu, warning au jaune, error au rouge et neutral à l’ardoise. Les composants natifs utilisent ces alias via leurs propriétés de couleur. Le bouton principal de composition et le bouton de réinitialisation neutre au contour visible représentent donc des rôles d’action distincts, sans introduire de palette personnalisée présentée à tort comme une valeur par défaut de Nuxt UI.

Délimitez clairement le périmètre de l’apparence

Le plug-in Vite est configuré avec colorMode:false pour cette étude en mode clair uniquement. Le tableau de référence répertorie les déclarations correspondantes pour le texte, les surfaces et les bordures clairs. Il ne prétend pas que ces valeurs littérales s’appliquent également au thème sombre. Pour ajouter un mode de couleur à un produit, activez l’intégration choisie et vérifiez ensemble ses contrôles, ses surfaces et ses préférences enregistrées.

Rôles de texte, surfaces et géométrie du système de design Nuxt UI

Lire les relations sémantiques CSS

Le texte d’accompagnement utilise --ui-text-muted, qui pointe vers neutral-500 ; le titre principal utilise --ui-text-highlighted, qui pointe vers neutral-900. Les variables de surface et de bordure font de même référence à l’échelle de neutres configurée. Le guide préserve ces relations au lieu de tout réduire à quelques valeurs hexadécimales sans lien entre elles. Ainsi, la modification de la palette de neutres conserve la cohérence du thème des composants.

Distinguer les valeurs par défaut partagées des choix propres à la page

Dans cette version, --ui-radius vaut .25rem et --ui-container vaut 80rem. La mise en page du brief d’origine choisit plutôt une largeur maximale extérieure de 1100px, deux colonnes séparées par un espace de 24px et une seule colonne sous 700px. Les rôles typographiques réels de Tailwind définissent les tailles du titre et du texte d’accompagnement. Ces choix propres à la page figurent dans CSS fourni ; ils ne sont pas présentés à tort comme des exigences applicables à toute la bibliothèque.

Composition de champs et validation locale dans le système de design Nuxt UI

Fournir un véritable contexte de champ à chaque saisie

UFormField fournit un libellé visible et un nom autour de UInput ou UTextarea. Le champ de contexte affiche également le nombre de mots, calculé à partir de son contenu sans espaces superflus au début ni à la fin. Les deux contrôles utilisent v-model : les valeurs affichées et le gestionnaire de composition lisent donc les mêmes refs. La zone de texte comporte un nombre de lignes initial utile et s’agrandit automatiquement. Le contenu utilisateur plus long peut ainsi s’afficher sans être tronqué dans une zone fixe.

Valider avant de composer

Brouillon dérivé du système de design Nuxt UI et prévention des états obsolètes

Assembler uniquement le texte disponible

La sortie combine le titre et le contexte fournis avec une liste statique facultative de conseils à partager. Le résultat indique qu’il s’agit d’un brouillon local, et non d’une réponse générée par une IA. Aucun appel à un modèle, délai de chargement ou contenu généré fictif n’est ajouté. La liste facultative est contrôlée par un booléen natif USwitch, et le texte assemblé reflète directement ce choix.

Effacer l’ancien résultat lorsque les saisies changent

Un watch Vue portant sur le titre, le contexte et la liste efface le résultat composé après chaque modification. Le badge d’état revient alors à « En attente de votre texte ». Cela évite qu’un brouillon obsolète semble à jour lorsque l’utilisateur modifie de nouvelles saisies. Le nombre de mots reste une valeur calculée : il ne peut donc pas diverger du contexte actuel.

États vide et réinitialisé complets dans le système de design Nuxt UI

Rendre le panneau d’attente utile

Avant la composition, la carte de droite explique en détail ce qui s’affichera, ainsi que le fonctionnement de la modification, de la confidentialité et de la réinitialisation. Ce n’est pas un module de contenu vide. Après la composition, l’espace affiche le brouillon complet et lisible, en préservant les retours à la ligne et le renvoi à la ligne. Le badge répète l’état sous forme de texte : la couleur n’est donc pas le seul repère.

Réinitialiser avec toutes les saisies de l’exemple

La réinitialisation restaure le titre d’origine, le contexte complet et la liste activée, tout en effaçant le résultat et les éventuelles erreurs. Elle ne laisse pas une démonstration vide qui obligerait le lecteur à deviner quel contenu saisir. Le test dans le navigateur compose un brief modifié, puis vérifie qu’après la réinitialisation, le titre complet de l’exemple est rétabli.

Cartes adaptatives et flux du texte dans le système de design Nuxt UI

Préserver la lisibilité du résultat sur les petits écrans

Sous 700px, les deux cartes passent sur une seule colonne et toutes les saisies utilisent la largeur disponible. Le brouillon utilise pre-wrap plutôt qu’un texte préformaté impossible à renvoyer à la ligne ; un titre ou une phrase longue peut donc se répartir naturellement. Les boutons passent à la ligne dans leur groupe d’actions. La page est vérifiée à 280px ainsi qu’aux formats téléphone, tablette et ordinateur, après une véritable modification et une composition.

Examiner l’état après les transitions natives

Le style de Switch inclut sa transition d’état native. La vérification visuelle attend avant de capturer le résultat, afin de ne pas confondre la position intermédiaire du curseur ou la couleur de la piste avec l’état final. Les tests fonctionnels vérifient l’effet du booléen en confirmant qu’un commutateur désactivé retire bien la liste du texte composé.

Projet Vue et Vite complet pour le système de design Nuxt UI

Utiliser les cinq fichiers fournis

L’exemple fournit App.vue, main.js, style.css, vite.config.mjs et index.html. La configuration inclut @vitejs/plugin-vue et @nuxt/ui/vite ; le point d’entrée principal installe @nuxt/ui/vue-plugin. Installer uniquement @nuxt/ui et coller App.vue ne constitue pas un projet complet exécutable. Cette configuration avec versions épinglées reproduit l’aperçu local avec les composants natifs et les styles sémantiques réellement utilisés.

  1. Enregistrer ensemble les cinq fichiers fournis.
  2. Installer les dépendances avec leurs versions épinglées.
  3. Lancer Vite dans ce répertoire.
  4. Tester la saisie manquante, la modification du résultat, le retrait de la liste et la réinitialisation.

Garder cette étude dans le navigateur, séparée du déploiement

Exemples de composants du système de design Nuxt UI

App.vue

Composition complète de composants natifs et état réactif.

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>

Référence du code

  • Conserver ensemble les cinq fichiers source.

main.js

Montage Vue et plugin d’exécution 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');

Référence du code

  • Conserver ensemble les cinq fichiers source.

style.css

Imports du thème natif et mise en page adaptative d’origine.

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%}

Référence du code

  • Conserver ensemble les cinq fichiers source.

vite.config.mjs

Compilateur Vue et plugin de build 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}});

Référence du code

  • Conserver ensemble les cinq fichiers source.

index.html

Document racine complet pour le navigateur.

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>

Référence du code

  • Conserver ensemble les cinq fichiers source.
04

Configuration de l’agent pour le système de design Nuxt UI

Point de départ de l’implémentation

Enregistrez d’abord les cinq fichiers fournis. Utilisez une version de Node prise en charge par les versions épinglées de Vite et de Nuxt UI (la version locale a été compilée avec 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

Un prompt pour votre projet

Prompt pour l’agent IA
Implémentez le composeur de brief Vue autonome complet Nuxt UI 4.11.3 avec les plugins officiels Vite et Vue. Préservez les couleurs sémantiques, les contextes UFormField, les refs contrôlant les saisies et le commutateur, la validation après suppression des espaces superflus, le calcul du nombre de mots, l’effacement des résultats obsolètes, le contenu complet de l’état d’attente et la réinitialisation. Ne laissez pas entendre qu’un appel à une IA ou un enregistrement sur un serveur est effectué.
05

Sources et périmètre du système de design Nuxt UI

Composants Nuxt UI réels dans une application navigateur Vue/Vite autonome. Le compositeur de brief est un code OpenDesign original et ne fait appel ni à un modèle d’IA, ni à un serveur Nuxt, ni à un service de persistance.