Sistema de componentes empresariais · Novo recurso

Sistema de design Naive UI.

Uma bancada nativa de tabelas de dados Naive UI, com valores verificados do objeto de tema, seleção de linhas, expansão, ordenação, paginação e uma ação local para revisar lotes.

Guia OpenDesign9 capítulos34 entradas de referênciaGuia de aplicação original
01

Prévia de interface do sistema de design Naive UI

Pesquise registros, expanda o contexto de revisão, selecione linhas em várias páginas e marque um lote como revisado localmente.

Fila de revisão de referênciasAbrir exemplo completo
Naive UI 2.45.3 nativo com Vue 3 e substituições de tema do NConfigProvider. · Referência de implementação
02

Referência de design do sistema de design Naive UI

Objeto common do tema claro do Naive UI 2.45.3, inspecionado no pacote instalado. Essas propriedades camelCase são substituições do tema, não um esquema público de nomes de variáveis CSS --token. As substituições personalizadas de common da prévia são listadas separadamente.

Cores comuns padrão

Fonte
Nome / RegraValor / ConfiguraçãoUso
primaryColor#18a058 Verde primário padrão.
primaryColorHover#36ad6a Variação para foco por mouse.
primaryColorPressed#0c7a43 Variação para pressionado.
primaryColorSuppl#36ad6a Cor primária complementar.
infoColor#2080f0 Função informativa.
successColor#18a058 Função de sucesso.
warningColor#f0a020 Função de aviso.
errorColor#d03050 Função de erro.
textColor1rgb(31, 34, 37)Texto forte.
textColor2rgb(51, 54, 57)Texto normal.
textColor3rgb(118, 124, 130)Texto secundário.
borderColorrgb(224, 224, 230)Borda padrão.
dividerColorrgb(239, 239, 245)Separadores sutis.
tableHeaderColorrgb(250, 250, 252)Plano de fundo do cabeçalho da tabela.

Tipografia e geometria dos controles

Fonte
Nome / RegraValor / ConfiguraçãoUso
fontFamilyv-sans, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"Pilha de fontes preferencial da interface; v-sans não é baixada automaticamente.
fontSize14pxTamanho de texto padrão de 14px.
fontSizeMini12pxTamanho de texto mínimo.
fontSizeSmall14pxTexto pequeno dos controles.
fontSizeMedium14pxTexto médio dos controles.
fontSizeLarge15pxTexto grande dos controles.
fontSizeHuge16pxTexto enorme dos controles.
lineHeight1.6Ritmo padrão do texto.
heightTiny22pxAltura mínima dos controles.
heightSmall28pxAltura pequena de controle.
heightMedium34pxAltura média dos controles.
heightLarge40pxAltura grande de controle.
heightHuge46pxAltura máxima dos controles.
borderRadius3pxRaio padrão de 3px.
borderRadiusSmall2pxRaio pequeno padrão de 2px.

Substituições reais do tema da prévia

Fonte
Nome / RegraValor / ConfiguraçãoUso
common.primaryColor#176b57 Cor original mais escura da ação primária.
common.primaryColorHover#238a71 Valor original coordenado para foco por mouse.
common.primaryColorPressed#115340 Valor original coordenado para pressionado.
common.borderRadius6pxSubstituição original do raio; o padrão é 3px.
Layout spacing32px outer / 24px section gaps / 16px toolbar gapEspaçamento original da página, não uma escala global de espaçamento atribuída ao Naive.
03

Naive UI Guia completo do sistema de design

Um guia prático para escolher, aplicar e avaliar este sistema em uma interface real.

DESIGN-naive-ui.md

Orientações completas, um ponto de partida para a implementação e links para o código-fonte.

Baixar o guia

Naive UI Um objeto de tema do sistema de design JavaScript, não um pipeline Sass

Um objeto de tema JavaScript, não um fluxo Sass

Naive UI é uma biblioteca de componentes Vue 3 cuja personalização de tema é expressa por meio de um objeto JavaScript. A fila de revisão passa themeOverrides para NConfigProvider. Sua seção common substitui primaryColor, primaryColorHover, primaryColorPressed e borderRadius, enquanto os demais padrões dos componentes continuam disponíveis pelo provider.

Com base neste guia de OpenDesign

A tabela de referência apresenta valores reais do tema claro comum da versão instalada 2.45.3. Ela não inventa nomes de variáveis CSS a partir dessas chaves camelCase. A cor primária padrão é #18a058 e o raio padrão da borda é de três pixels; o verde mais escuro e o raio de seis pixels deste exemplo são explicitamente substituições originais.

Consulte a especificação de apoio

Naive UI Tipografia e alturas de controles para interfaces densas no sistema de design

Tipografia e alturas de controles para interfaces densas

O tema common usa texto de quatorze pixels com altura de linha de 1.6. Os tamanhos de texto pequeno e médio são ambos de quatorze pixels, mas as alturas dos controles são diferentes. heightSmall tem vinte e oito pixels e heightMedium tem trinta e quatro pixels; portanto, os nomes dos tamanhos descrevem a geometria dos componentes, não apenas uma progressão do tamanho da fonte.

A pilha de fontes preferencial começa com v-sans, mas a biblioteca não exige que essa fonte seja baixada para renderizar este exemplo. A página ao redor usa system-ui, um título de 34px e títulos de seção de apoio de 18px. Esses estilos da página são originais. Ao adotar a biblioteca, o designer deve distinguir a escala dos controles do tema da hierarquia editorial maior de uma página inicial.

Consulte a especificação de apoio

Naive UI As definições de colunas do sistema de design incluem comportamento

As definições das colunas determinam o comportamento

NDataTable recebe um array de colunas e um array de registros. O exemplo começa com uma coluna de seleção, seguida por uma coluna expansível e, depois, colunas de dados nomeadas. A coluna Reference exibe um nome em destaque e um ID estável menor. Entries usa um comparador numérico, enquanto a coluna de nome usa o classificador padrão. Review renderiza um NTag nativo de acordo com o status do registro.

Essa configuração define comportamento real, em vez de uma captura de tela com títulos de tabela decorativos. A ordenação da coluna Entries compara quantidades numéricas, não strings formatadas. O conteúdo expandido mostra a pergunta específica de revisão de cada registro. A tabela de dados controla a exibição das linhas, enquanto a aplicação define o significado desses registros.

Consulte a especificação de apoio

Naive UI A seleção no sistema de design deve persistir após a reordenação

A seleção deve ser preservada ao reordenar

A função row-key retorna o ID estável de cada registro. checked-row-keys e update:checked-row-keys mantêm a seleção controlada no estado do Vue. A ordenação ou a paginação pode alterar a posição de exibição de um registro sem mudar a identidade usada pela ação em lote. Usar índices do array no lugar disso tornaria essa relação frágil quando a ordem das linhas mudasse.

A coluna de seleção desativa os registros Arquivados. Eles continuam visíveis para oferecer contexto histórico, mas não podem ser adicionados ao lote de revisão. A aplicação também verifica o status ao executar a ação, mantendo a alteração dos dados consistente com a restrição visível. Em um sistema real, o servidor ainda precisaria aplicar as regras de autorização; uma caixa de seleção desativada não é uma barreira de permissão.

  1. Selecione um registro que possa ser revisado na primeira página.
  2. Avance para a próxima página e confira se a contagem da seleção foi preservada.
  3. Execute a ação em lote e confirme que o status do registro selecionado foi alterado sem afetar nenhum registro arquivado.

Consulte a especificação de apoio

Naive UI Expanda as linhas do sistema de design antes de decidir sobre uma ação em lote

Expanda as linhas antes de tomar uma decisão em lote

Cada linha expansível inclui uma tarefa concreta, como verificar a navegação pelo teclado ou comparar diferentes significados para estados vazios. Assim, a área expandida fornece informações úteis para uma decisão de revisão, em vez de repetir outra descrição genérica. A coluna expansível usa renderExpand para gerar conteúdo comum abaixo do registro correspondente.

A tabela mantém a estrutura das colunas em telas estreitas e recebe scroll-x=640. Assim, a região nativa da tabela pode rolar horizontalmente enquanto a página permanece dentro da janela de visualização. A barra de ferramentas se empilha em dispositivos móveis, mas os dados não são removidos silenciosamente para deixar a captura de tela mais limpa.

Consulte a especificação de apoio

Naive UI A revisão em lote do sistema de design é uma transformação local dos dados

A revisão em lote é uma transformação local dos dados

O botão Mark selected reviewed fica desativado quando o array controlado de chaves está vazio. Quando acionado, ele percorre os registros e altera para Reviewed apenas os itens selecionados que não estejam arquivados. Em seguida, a seleção é limpa e um alerta de sucesso nativo informa exatamente a operação local realizada. A contagem de itens revisados no cabeçalho do cartão é derivada dos registros, em vez de ser incrementada separadamente.

Nenhum repositório, serviço de revisão ou documento externo é alterado. Uma implementação assíncrona real precisaria tratar carregamento, rejeição e falhas parciais. A seleção não deve ser limpa antes de se saber quais atualizações foram concluídas com sucesso. Este exemplo mantém a operação síncrona e explicitamente local, para que a mensagem de sucesso corresponda ao código.

  • O botão em lote indica se há alguma chave selecionada.
  • A contagem de itens revisados é derivada dos mesmos registros exibidos na tabela.
  • O aviso de resultado informa que nenhum repositório foi alterado.

Consulte a especificação de apoio

Naive UI Um componente Vue do sistema de design sem necessidade de importação de CSS

Um componente Vue sem importação obrigatória de CSS

Instale [email protected] em um projeto Vue 3 e importe os componentes usados por App.vue. Naive UI fornece os estilos dos componentes em tempo de execução; ao contrário de muitas bibliotecas que priorizam CSS, ela não exige a importação de uma folha de estilos global do pacote para esses componentes. O style.css fornecido contém apenas o layout original da área de trabalho.

NConfigProvider recebe as localidades em inglês para os componentes e as datas, além da substituição do tema common. O SFC completo pode ser compilado com o plugin padrão do Vue para Vite. O exemplo independente inclui esse componente compilado, mantendo os componentes nativos e o comportamento da aplicação disponíveis sem solicitações de rede.

Consulte a especificação de apoio

Naive UI Os limites entre tema e dados do sistema de design podem ser inspecionados

Os limites entre tema e dados continuam inspecionáveis

A área de trabalho é uma pequena biblioteca de referência, não um painel administrativo genérico com métricas inventadas. Cada linha contém dados de exemplo, cada status tem um significado explícito e o texto expandido oferece um motivo concreto para inspecioná-la. A tabela do tema e o SFC completo tornam reproduzíveis tanto os estilos quanto o comportamento.

Ao adotar Naive UI em um sistema maior, mantenha coordenadas as substituições globais de common e as substituições no nível dos componentes. As cores padrão, de foco por mouse e de pressionado da cor primária devem ser avaliadas em conjunto. Evite usar estilos em elementos internos gerados como primeira estratégia de personalização quando o provider oferece uma superfície de tema compatível.

Consulte a especificação de apoio

Naive UI Exemplos de componentes do sistema de design

Fila de revisão completa em Vue

Configuração das colunas de DataTable, chaves de linha estáveis, seleção, expansão e paginação controlada.

vue
<script setup>
import {ref,computed,h} from 'vue';
import {NConfigProvider,NDataTable,NButton,NInput,NTag,NAlert,NCard,NSpace,enUS,dateEnUS} from 'naive-ui';
const themeOverrides={common:{primaryColor:'#176b57',primaryColorHover:'#238a71',primaryColorPressed:'#115340',borderRadius:'6px'}};
const rows=ref([{id:'DS-101',name:'Navigation patterns',owner:'Maya',items:18,status:'Needs review',note:'Check keyboard movement between primary and overflow navigation.'},{id:'DS-102',name:'Empty-state copy',owner:'Alex',items:9,status:'Needs review',note:'Compare first-use guidance with filtered-empty and permission-empty states.'},{id:'DS-103',name:'Color role mapping',owner:'Jules',items:24,status:'Reviewed',note:'Semantic aliases were compared in light and dark appearances.'},{id:'DS-104',name:'Form error summary',owner:'Sam',items:12,status:'Needs review',note:'Verify error links focus the corresponding input.'},{id:'DS-105',name:'Legacy icon export',owner:'Maya',items:36,status:'Archived',note:'Historical export retained for reference; batch review is disabled.'},{id:'DS-106',name:'Density variants',owner:'Alex',items:15,status:'Needs review',note:'Check compact controls with long translated labels.'}]);
const query=ref(''),checked=ref([]),page=ref(1),notice=ref('');const filtered=computed(()=>rows.value.filter(r=>(r.name+' '+r.owner).toLowerCase().includes(query.value.toLowerCase())));
const columns=[{type:'selection',disabled:r=>r.status==='Archived'},{type:'expand',renderExpand:r=>h('div',{class:'row-note'},r.note)},{title:'Reference',key:'name',sorter:'default',width:240,render:r=>h('div',[h('strong',r.name),h('div',{class:'row-id'},r.id)])},{title:'Owner',key:'owner',width:100},{title:'Entries',key:'items',sorter:(a,b)=>a.items-b.items,width:95},{title:'Review',key:'status',width:140,render:r=>h(NTag,{type:r.status==='Reviewed'?'success':r.status==='Archived'?'default':'warning',bordered:false},{default:()=>r.status})}];
const pagination=computed(()=>({page:page.value,pageSize:4,onChange:p=>page.value=p}));function apply(){rows.value=rows.value.map(r=>checked.value.includes(r.id)&&r.status!=='Archived'?{...r,status:'Reviewed'}:r);notice.value=`Marked ${checked.value.length} selected references reviewed in this preview. No repository was changed.`;checked.value=[];}
</script>
<template><NConfigProvider :locale="enUS" :date-locale="dateEnUS" :theme-overrides="themeOverrides"><main class="review-desk"><header><p class="eyebrow">NAIVE UI / REFERENCE REVIEW</p><h1>A review queue with context.</h1><p>Search, expand a row, compare entry counts, and apply a local batch action.</p></header><NCard title="Reference library"><template #header-extra><NTag :bordered="false" type="success">{{rows.filter(r=>r.status==='Reviewed').length}} reviewed</NTag></template><div class="toolbar"><NInput v-model:value="query" placeholder="Search reference or owner" clearable aria-label="Search reference or owner" @update:value="page=1"/><NButton type="primary" :disabled="!checked.length" @click="apply">Mark selected reviewed</NButton></div><p class="selection-note">{{checked.length}} selected · Selection uses stable IDs and can span pages.</p><NDataTable :columns="columns" :data="filtered" :row-key="r=>r.id" :checked-row-keys="checked" @update:checked-row-keys="keys=>checked=keys" :pagination="pagination" :scroll-x="640" :single-line="false"/><NAlert v-if="notice" type="success" class="notice">{{notice}}</NAlert></NCard><div class="notes"><section><h2>Expand before judging</h2><p>The expand control reveals a concrete review question for each reference. A title alone is not enough context for a meaningful batch decision.</p></section><section><h2>Archived is a separate state</h2><p>Archived records stay visible but cannot join the batch selection. Search and pagination never change the underlying review data.</p></section></div><footer>Native Naive UI 2.45.3 DataTable, Input, Button, Tag, Card and Alert. All records and mutations are local examples.</footer></main></NConfigProvider></template>

Referência de código

  • A seleção usa IDs de referência estáveis como chaves.
  • As linhas arquivadas são desativadas pelo predicado da coluna de seleção.
  • A substituição do tema common é fornecida por meio de NConfigProvider.

Layout original da área de trabalho

Tipografia da página e espaçamento responsivo ao redor da tabela de dados nativa.

css
*{box-sizing:border-box}body{margin:0;background:#f5f7f6;color:#1f2225;font-family:system-ui,sans-serif;font-size:14px;line-height:1.6}.review-desk{max-width:1120px;margin:auto;padding:32px}header{max-width:720px;margin-bottom:28px}h1{font-size:34px;line-height:1.2;letter-spacing:-.03em;margin:10px 0 16px}.eyebrow{font-size:11px;letter-spacing:.12em;font-weight:700;color:#426258}.toolbar{display:flex;align-items:center;gap:16px}.toolbar .n-input{max-width:360px}.selection-note,.row-id{font-size:12px;color:#767c82}.row-id{margin-top:4px}.row-note{padding:12px 16px;max-width:65ch;color:#335547}.notice{margin-top:20px}.notes{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin-top:24px}.notes section{border-top:2px solid #c8d7cf;padding:18px 0}.notes h2{font-size:18px;margin:0 0 10px}.notes p{margin:0}footer{font-size:12px;color:#767c82;margin-top:20px}@media(max-width:700px){.review-desk{padding:20px 16px}h1{font-size:28px}.toolbar{align-items:stretch;flex-direction:column}.toolbar .n-input{max-width:none}.notes{grid-template-columns:1fr}.n-card>.n-card__content{padding:16px!important}}

Referência de código

  • Naive UI injeta os estilos dos componentes; esta folha de estilos contém apenas o layout da aplicação.
04

Configuração do agente sistema de design Naive UI

Ponto de partida para implementação

Verificado com Vue 3 e Naive UI 2.45.3. Usa a compilação padrão de SFC. Todos os registros de referência são locais.

javascript
// Create the project first:
// npm create vite@latest naive-ui-specimen -- --template vue
// cd naive-ui-specimen && npm install
// In a Vite Vue 3 project:
// npm install [email protected]
// Save the complete component above as App.vue and layout as style.css.
import {createApp} from 'vue';
import App from './App.vue';
import './style.css';
createApp(App).mount('#app');
// index.html contains <div id="app"></div>.
// NConfigProvider, locales, themeOverrides and component imports are in App.vue.
// No Naive UI global CSS import is required for these components.
// Keep the template index.html and replace its entry with the code above.
// npm run dev

Um prompt para seu projeto

Prompt para agente de IA
Use a fila de revisão de referências do Naive UI 2.45.3 com NConfigProvider e colunas nativas de NDataTable, expansão, ordenação, paginação e seleção. Preserve as chaves de referência estáveis ao filtrar ou mudar de página e faça com que a ação em lote opere sobre os registros selecionados, não apenas sobre as linhas visíveis. Vincule os estados vazio e de ação desabilitada à coleção real. Mantenha o themeOverrides fornecido como substituições da aplicação, distintas dos padrões do pacote, com o layout original completo. A fila é para revisão local de referências, não um serviço de importação de conjuntos de dados.
05

Fontes e escopo do sistema de design Naive UI

Naive UI 2.45.3. Os padrões do tema e as substituições originais são identificados separadamente. Os registros de revisão e as alterações em lote permanecem locais.