エンタープライズ向けコンポーネントシステム · 新しいリソース

Naive UI デザインシステム.

検証済みのテーマオブジェクトの値、行選択、展開、並べ替え、ページネーション、ローカルでの一括確認操作を備えた、ネイティブなNaive UIデータテーブル作業環境。

OpenDesign ガイド9 章リファレンス項目34件オリジナルアプリケーションガイド
01

Naive UIデザインシステムのインターフェースプレビュー

レコードを検索し、レビューの詳細を展開して、複数ページにわたる行を選択し、ローカルの項目を一括でレビュー済みにします。

リファレンスレビューキュー完全な例を開く
Vue 3とNConfigProviderのテーマオーバーライドを使用したNaive UI 2.45.3のネイティブ実装。· 実装リファレンス
02

Naive UIデザインシステムのデザインリファレンス

インストール済みパッケージから確認したNaive UI 2.45.3のcommonライトテーマオブジェクト。これらのcamelCaseプロパティはテーマのオーバーライドであり、公開されている--token CSSの変数命名規則ではありません。プレビュー独自のcommonオーバーライドは別途記載しています。

デフォルトのcommonカラー

ソース
名前 / ルール値 / 設定用途
primaryColor#18a058 デフォルトのプライマリーカラー(緑)。
primaryColorHover#36ad6a ホバー時の色。
primaryColorPressed#0c7a43 押下時の色。
primaryColorSuppl#36ad6a プライマリーカラーの補助色。
infoColor#2080f0 情報ロール。
successColor#18a058 成功状態の役割。
warningColor#f0a020 警告ロール。
errorColor#d03050 エラー状態の役割。
textColor1rgb(31, 34, 37)強調テキスト。
textColor2rgb(51, 54, 57)標準テキスト。
textColor3rgb(118, 124, 130)セカンダリテキスト。
borderColorrgb(224, 224, 230)標準の境界線。
dividerColorrgb(239, 239, 245)控えめな区切り線。
tableHeaderColorrgb(250, 250, 252)テーブルヘッダーの背景。

文字サイズとコントロールの寸法

ソース
名前 / ルール値 / 設定用途
fontFamilyv-sans, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"推奨UIフォントスタック。v-sansは自動的にダウンロードされません。
fontSize14pxデフォルトの文字サイズ14px。
fontSizeMini12px極小の文字サイズ。
fontSizeSmall14px小サイズコントロールの文字サイズ。
fontSizeMedium14px中サイズコントロールの文字サイズ。
fontSizeLarge15px大サイズコントロールの文字サイズ。
fontSizeHuge16px特大コントロールの文字サイズ。
lineHeight1.6デフォルトの行の高さ。
heightTiny22px極小コントロールの高さ。
heightSmall28px小さなコントロールの高さ。
heightMedium34px中サイズコントロールの高さ。
heightLarge40px大きなコントロールの高さ。
heightHuge46px特大コントロールの高さ。
borderRadius3pxデフォルトの角丸は3px。
borderRadiusSmall2px小サイズの角丸はデフォルトで2px。

プレビューで実際に使用するテーマオーバーライド

ソース
名前 / ルール値 / 設定用途
common.primaryColor#176b57 オリジナルの、より濃い緑のプライマリーアクション。
common.primaryColorHover#238a71 オリジナルの、連動するホバー時の値。
common.primaryColorPressed#115340 オリジナルの、連動する押下時の値。
common.borderRadius6pxオリジナルの角丸オーバーライド。デフォルトは3px。
Layout spacing32px outer / 24px section gaps / 16px toolbar gapオリジナルのページ間隔。Naiveの全体的な間隔スケールを示すものではありません。
03

Naive UIデザインシステム完全ガイド

実際のインターフェースで、このデザインシステムを選び、適用し、レビューするための実践ガイドです。

DESIGN-naive-ui.md

詳しいガイダンス、実装の出発点、ソースへのリンクをまとめています。

ガイドをダウンロード

Naive UIデザインシステム:Sassパイプラインではなく、JavaScriptのテーマオブジェクト

Sassパイプラインではなく、JavaScriptのテーマオブジェクト

Naive UIはVue 3のコンポーネントライブラリで、テーマのカスタマイズにはJavaScriptオブジェクトを使用します。レビューキューではthemeOverridesをNConfigProviderに渡します。commonセクションではprimaryColor、primaryColorHover、primaryColorPressed、borderRadiusをオーバーライドし、その他のコンポーネントのデフォルト値はプロバイダーから引き続き利用できます。

この OpenDesign ガイドから

リファレンステーブルには、インストール済みの2.45.3から取得したcommonライトテーマの実際の値を記載しています。camelCaseのキーをもとにCSS変数名を作り出してはいません。デフォルトのプライマリーカラーは#18a058、デフォルトの角丸は3pxです。この例で使う濃い緑と6pxの角丸は、明示的にオリジナルのオーバーライドとして設定しています。

関連する仕様を確認する

Naive UIデザインシステム:高密度UIの文字サイズとコントロールの高さ

高密度UIの文字サイズとコントロールの高さ

commonテーマでは、文字サイズ14px、行の高さ1.6を使用します。小サイズと中サイズの文字サイズはいずれも14pxですが、コントロールの高さは異なります。heightSmallは28px、heightMediumは34pxです。したがって、サイズ名が表すのは単なる文字サイズの段階ではなく、コンポーネントの寸法です。

推奨フォントスタックの先頭にはv-sansがありますが、このライブラリはこの例を表示するためにそのフォントのダウンロードを必須としていません。ページ全体ではsystem-uiを使い、見出しを34px、補足セクションのタイトルを18pxにしています。これらのページスタイルはオリジナルです。このライブラリを採用するデザイナーは、テーマのコントロール用スケールと、ランディングページのより大きなエディトリアル階層を区別する必要があります。

関連する仕様を確認する

Naive UIデザインシステム:カラム定義が動作を担う

カラム定義が動作を担う

NDataTableにはcolumns配列とrecords配列を渡します。この例では、選択カラム、展開カラム、名前付きデータカラムの順に並べています。Referenceカラムには、強調表示した名前と小さく表示した安定IDを描画します。Entriesカラムでは数値比較を行い、名前カラムではデフォルトのソーターを使います。Reviewカラムでは、レコードのステータスに応じてネイティブのNTagを描画します。

この設定は、テーブル見出しを装飾として並べただけのスクリーンショットではなく、実際に動作します。Entriesカラムを並べ替える際は、書式設定済みの文字列ではなく数値を比較します。行を展開すると、各レコード固有のレビュー上の質問が表示されます。データテーブルは行の表示を制御し、レコードの意味づけはアプリケーションが担います。

関連する仕様を確認する

Naive UIデザインシステム:並べ替えても選択状態を維持する

並べ替えても選択状態を維持する

row-key関数は各レコードの安定IDを返します。checked-row-keysとupdate:checked-row-keysを使って、Vueの状態で選択を制御します。並べ替えやページ移動でレコードの表示位置が変わっても、一括操作で使う識別子は変わりません。代わりに配列のインデックスを使うと、行の順序が変わったときにこの対応関係が不安定になります。

選択列では、アーカイブ済みレコードを選択できません。履歴を確認できるよう表示は維持されますが、レビュー対象には追加できません。また、アクションの実行時にもステータスを確認するため、データの変更内容は画面上の制限と一致します。実際のシステムでは、サーバー側でも認可を適用する必要があります。チェックボックスを無効にしても、権限の境界にはなりません。

  1. 最初のページで、レビュー可能なレコードを1件選択します。
  2. 次のページに移動し、選択件数が維持されていることを確認します。
  3. 一括処理を実行し、選択したレコードのステータスだけが変わり、アーカイブ済みレコードには影響しないことを確認します。

関連する仕様を確認する

Naive UI デザインシステムでは、行を展開してから一括処理を判断します

一括判断の前に行を展開する

各行を展開すると、ナビゲーションでのキーボード操作の確認や、空状態の意味の違いの比較など、具体的なタスクが表示されます。展開領域は、汎用的な説明を繰り返すのではなく、レビュー判断に役立つ情報を提供します。展開列ではrenderExpandを使い、該当レコードの下に通常のコンテンツを表示します。

狭い画面でもテーブルの列構成を維持し、scroll-x=640を指定します。これにより、ページをビューポート内に保ったまま、テーブル領域を水平方向にスクロールできます。モバイルではツールバーを縦に並べますが、スクリーンショットをすっきり見せるためにデータを暗黙に省くことはありません。

関連する仕様を確認する

Naive UI デザインシステムの一括レビューは、ローカルデータの変換です

一括レビューはローカルデータの変換処理

制御対象のキー配列が空の場合、「選択項目をレビュー済みにする」ボタンは無効になります。実行するとレコードをマッピングし、選択済みでアーカイブされていない項目だけを「レビュー済み」に変更します。その後、選択を解除し、ローカルで実行した処理の内容を正確に示すネイティブの成功アラートを表示します。カードヘッダーのレビュー済み件数は、独立して加算するのではなく、レコードから算出します。

リポジトリ、レビューサービス、外部ドキュメントは変更されません。実際に非同期処理を実装する場合は、読み込み中、拒否、部分的な失敗への対応が必要です。どの更新が成功したか判明する前に選択を解除してはいけません。このサンプルでは処理を同期的かつ明示的にローカルで行い、成功メッセージがコードの動作と一致するようにしています。

  • 一括処理ボタンは、何かが選択されているかどうかに応じて状態が変わります。
  • レビュー済み件数は、テーブルに表示されている同じレコードから算出されます。
  • 結果の通知では、リポジトリが変更されていないことを明示します。

関連する仕様を確認する

Naive UI デザインシステムのVueコンポーネントにはCSSのインポートが不要です

CSSのインポートが必須ではないVueコンポーネント

Vue 3プロジェクトに[email protected]をインストールし、App.vueで使用するコンポーネントをインポートします。Naive UIは実行時にコンポーネントのスタイルを適用します。CSSを前提とする多くのライブラリとは異なり、これらのコンポーネントではパッケージのスタイルシートをグローバルにインポートする必要はありません。付属のstyle.cssには、元のワークベンチのレイアウトだけが含まれています。

NConfigProviderには、コンポーネントと日付の英語ロケールに加え、共通テーマのオーバーライドを渡します。完全なSFCは、標準のVite Vueプラグインでコンパイルできます。単体で動作するサンプルにはコンパイル済みコンポーネントが含まれており、ネットワークリクエストなしでネイティブコンポーネントとアプリケーションの動作を確認できます。

関連する仕様を確認する

Naive UI デザインシステムではテーマとデータの境界を確認できます

テーマとデータの境界を確認できる状態に保つ

このワークベンチは、小規模なリファレンスライブラリです。根拠のない指標を追加した汎用的な管理ダッシュボードではありません。各行にはサンプルコンテンツを使用し、ステータスごとに明確な意味を定めています。展開時のテキストには、確認する具体的な理由が示されています。テーマの表と完全なSFCにより、スタイルと動作の両方を再現できます。

Naive UIをより大きなシステムに取り入れる際は、共通のグローバルオーバーライドとコンポーネント単位のオーバーライドを整合させてください。プライマリカラーのデフォルト、ホバー、押下時の色は、まとめて確認する必要があります。プロバイダーがサポートするテーマ設定がある場合は、生成された内部要素へのスタイル指定を最初のカスタマイズ手段にしないでください。

関連する仕様を確認する

Naive UI デザインシステムのコンポーネント例

Vueのレビューキュー完全版

DataTableの列設定、安定した行キー、選択、展開、制御対象のページネーション。

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>

コードリファレンス

  • 選択状態は、安定したリファレンスIDをキーとして管理します。
  • 選択列の条件により、アーカイブ済みの行は選択できません。
  • 共通テーマのオーバーライドはNConfigProviderから渡します。

元のワークベンチのレイアウト

ネイティブのデータテーブルの周囲にある、ページのタイポグラフィとレスポンシブな余白。

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

コードリファレンス

  • Naive UIがコンポーネントのスタイルを適用します。このスタイルシートにはアプリケーションのレイアウトだけが含まれています。
04

Naive UI デザインシステムのエージェント設定

実装の出発点

Vue 3およびNaive UI 2.45.3で検証済みです。標準のSFCコンパイルを使用します。すべてのリファレンスレコードはローカルにあります。

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

あなたのプロジェクト向けプロンプト

AI エージェント用プロンプト
Naive UI 2.45.3のリファレンスレビューキューを、NConfigProviderとネイティブのNDataTable列、展開、ソート、ページネーション、選択機能とともに使用します。フィルタリングやページ変更の際は安定したリファレンスキーを維持し、一括処理は表示中の行だけでなく、選択済みのレコードを対象にします。空状態とアクション無効時の状態は、実際のコレクションに連動させてください。付属のthemeOverridesは、パッケージのデフォルトとは区別したアプリケーション側のオーバーライドとして維持し、元のレイアウト全体を残します。このキューはローカルでのリファレンスレビュー用であり、データセットのインポートサービスではありません。
05

Naive UI デザインシステムのソースと対象範囲

Naive UI 2.45.3。テーマのデフォルトと元のオーバーライドを区別しています。レビュー記録と一括変更はローカルに保持されます。