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

Vuestic UI デザインシステム.

ソースで確認したライト/ダークのプリセット、アクセシブルな評価ラベル、テキストエリアの入力検証、算出される平均値、完了した評価を保持する保存状態を備えた、Vuesticのネイティブな批評ワークシート。

OpenDesign ガイド9 章参考項目33件オリジナルアプリケーションガイド
01

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

明瞭さ、階層、フィードバックを評価し、意味のある所見を追加して、ローカル評価を保存します。

デザイン批評ワークシート完全な例を開く
Vuestic UI 1.10.3 と Vue 3 を使用。Material Icons は @quasar/extras 2.1.0 経由でローカルにバンドル。 · 実装リファレンス
02

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

Vuestic UI 1.10.3。プリセット値はインストール済みのカラーサービスから取得し、コンポーネント変数はその CSS から取得します。ワークシートではデフォルトのライトプリセットを使いながら、--va-font-family を system-ui に意図的に上書きしています。装飾的な図形と周囲のスケールはオリジナルです。

デフォルトのライトカラープリセット

ソース
名前 / ルール値 / 設定用途
primary#154EC1 評価と主要アクション。
secondary#767C88 セカンダリロール。
success#3D9209 保存済みの結果。
info#158DE3 情報ロール。
danger#E42222 エラー状態の役割。
warning#FFD43A 警告ロール。
backgroundPrimary#f6f6f6 デフォルトのメインサーフェス。
backgroundSecondary#FFFFFF デフォルトの浮き上がったサーフェス。
backgroundElement#ECF0F1 要素のサーフェス。
backgroundBorder#DEE5F2 境界の役割。
textPrimary#262824 本文テキスト。
textInverted#FFFFFF 反転したテキスト。
focus#49A8FF フォーカスの役割。

デフォルトのダークプリセットとの比較

ソース
名前 / ルール値 / 設定用途
primary#3472F0 公式のダークプリセットのリファレンス。ローカルのサンプルはライトのままです。
success#66BE33 公式のダークプリセットのリファレンス。ローカルのサンプルはライトのままです。
danger#F34030 公式のダークプリセットのリファレンス。ローカルのサンプルはライトのままです。
backgroundPrimary#050A10 公式のダークプリセットのリファレンス。ローカルのサンプルはライトのままです。
backgroundSecondary#1F262F 公式のダークプリセットのリファレンス。ローカルのサンプルはライトのままです。
backgroundElement#131A22 公式のダークプリセットのリファレンス。ローカルのサンプルはライトのままです。
backgroundBorder#3D4C58 公式のダークプリセットのリファレンス。ローカルのサンプルはライトのままです。
textPrimary#F1F1F1 公式のダークプリセットのリファレンス。ローカルのサンプルはライトのままです。
textInverted#0B121A 公式のダークプリセットのリファレンス。ローカルのサンプルはライトのままです。

ネイティブの CSS と明示的に定義したアプリケーションスケール

ソース
名前 / ルール値 / 設定用途
--va-font-family"Source Sans Pro", sans-serifライブラリのデフォルトは、この例で明示的に system-ui に上書きされています。
--va-button-border-radius0.25remコンパイル済みのネイティブボタンの角丸。
--va-form-element-border-radius0.25remコンパイル済みの共通フォームの角丸。
--va-button-content-py0.5remボタンの縦方向のコンテンツ余白。
--va-button-content-px0.75remボタンの横方向のコンテンツ余白。
--va-rating-number-item-margin0.1emネイティブの数値モードの間隔リファレンス。
--va-rating-number-item-font-weight700ネイティブの数値モードの強調リファレンス。
Application title34px / 1.15; 29px narrowオリジナルのタイトル階層。
Application spacing6 / 7 / 8 / 10 / 12 / 14 / 16 / 18 / 22 / 24 / 28 / 32pxVuestic のトークン階層ではなく、実際に使われているオリジナルのスタイルシート値。
Application panel radius14pxオリジナルの周辺形状。
LayoutFlexible form + 280px summary; stack below 760pxコンテンツの高さに合わせた埋め込みレイアウト。
03

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

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

DESIGN-vuestic-ui.md

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

ガイドをダウンロード

Vuestic UI デザインシステム:名前付きカラーをプリセットとして備えた、設定可能な Vue ライブラリ

名前付きカラーをプリセットとして備えた、設定可能な Vue ライブラリ

Vuestic は createVuestic を通じて共通サービスを登録します。この例では vuestic-ui からネイティブコンポーネントをインポートし、デフォルトのライトカラープリセットを使います。評価、ボタン、進捗表示、成功アラートは、すべて同じサービスを通じてセマンティックな色名を解決します。

この OpenDesign ガイドから

このワークシートでは、これらのコンポーネントを具体的な形で活用しています。3つの評価項目を分け、補足となる所見を収集し、平均を計算して、保存したローカルの結果をロックします。色付きの評価項目マークと2列のレイアウトはアプリケーション独自のデザインであり、Vuestic の追加コンポーネントではありません。

関連する仕様を確認する

Vuestic UI デザインシステム:サービスのプリセットと CSS の形状変数を区別する

サービスのプリセットと CSS の形状変数を区別する

確認済みのライトプリセットでは、primary は #154EC1、success は #3D9209、textPrimary は #262824 です。ダークプリセットでは、ライトページを単に反転するのではなく、primary、text、surface に異なる値を使います。リファレンステーブルには両方のプリセットを記載し、プレビューは意図的にライトモードのままにしています。

コンポーネントの形状は、インストール済みのスタイルシートでいずれも 0.25rem に設定されている --va-button-border-radius や --va-form-element-border-radius などの CSS 変数で調整します。カラープリセットと CSS 変数の上書きでは解決する問題が異なります。セマンティックな役割にはサービスを、サポート対象のコンポーネント形状にはドキュメントに記載された変数を使います。

関連する仕様を確認する

Vuestic UI デザインシステム:必要なアイコンを読み込み、フォントの上書きを明示する

必要なアイコンを読み込み、フォントの上書きを明示する

Vuestic のデフォルトの --va-font-family は Source Sans Pro を指定します。この例では、読み込まれていないフォントに暗黙に依存せず、この変数を system-ui に上書きします。これにより、ネイティブコンポーネントのラベルとアプリケーションの文章で、利用可能なフォントスタックを明示的に共通使用できます。

デフォルトの評価アイコンには、star や star_outline などの Material Icons 名が使われます。ローカルのフォントスタイルシートは @quasar/extras から読み込まれ、フォントファイルとともにバンドルされます。このアセットがないと、星形の代わりにアイコン名の文字列がそのまま表示されることがあります。アイコンフォントは、アプリケーションのフォントファミリーの上書き設定とは分けて管理します。

関連する仕様を確認する

Vuestic UI デザインシステム:低い評価ではなく、未回答を示す状態としてゼロを使う

低い評価ではなく、未回答を示す状態としてゼロを使う

各 VaRating は、1つの評価項目の数値にバインドされます。最大値は5で、clearable が有効なため、現在の評価をもう一度選ぶと、その項目をゼロに戻せます。ゼロは完了済みの0点評価ではなく、「未評価」と表示します。

平均は、0より大きい評価の件数で割って算出します。これにより、ワークシートの入力途中で未回答の項目が平均を下げることはありません。保存には3項目すべてへの回答が必要なため、最終的な平均は常に評価全体を反映します。評価を変更すると、完了状況のチップ、進捗バー、サマリーがすぐに更新されます。

  1. 空のワークシートを保存し、評価未入力とコメントの各フィードバックを確認します。
  2. 明瞭さを4、階層を3、フィードバックを2にすると、平均は3.0になります。
  3. 具体的な所見を記入して保存します。続けて「最初から」を使い、ワークシート全体をリセットします。

関連する仕様を確認する

Vuestic UI デザインシステム:有意義な所見には意味のある文章と十分なスペースが必要です

有用な所見には、意味のある文章と十分なスペースが必要

VaTextareaには常時表示されるラベル、400文字の上限、文字数カウンターがあります。保存を試みた後、アプリケーションは前後の空白を除いた値が20文字以上あるか確認します。そのため、空白だけの文字列は見かけ上の文字数が十分でも要件を満たしません。

テキストエリアでは自動サイズ調整を有効にし、最小4行、最大12行に設定しています。これは単なるプロパティの例ではなく、動作に関わる設定です。自動サイズ調整がないと、最小行数の設定だけでは意図したとおりに入力欄が広がりません。修正版では、画面幅の狭い端末でも所見が見えるようにしつつ、非常に長い文章は通常どおりスクロールして読めるようにしています。

関連する仕様を確認する

Vuestic UI デザインシステム:進捗は評価の平均ではなく、完了状況から算出します

評価の平均ではなく、完了状況から進捗を算出する

進捗バーは、肯定的な回答が付いた基準の数を示し、「評価済みの基準数 ÷ 3 × 100」で算出します。横に表示される大きな数値は、評価の平均です。分母が異なるため、両者を混同しないでください。3つの評価がすべて低くても、完了率は100%になることがあります。

完了を示す文では、分子と分母を明記しています。平均には「評価済み基準の平均」とラベルを付け、概要にも各基準のスコアを表示します。こうしたラベルがあることで、説明のない進捗バーを全体的な品質評価だと誤解せず、計算内容を理解できます。

関連する仕様を確認する

Vuestic UI デザインシステム:明示的にリセットするまで、完了したローカル評価を変更できないようにします

完了したローカル評価は、明示的にリセットされるまで変更できないようにする

保存時には、まずattemptedをtrueにしてから、すべての評価と所見を確認し、条件を満たした場合に保存状態を有効にします。保存フラグが有効になると、評価とテキストエリアは読み取り専用になり、「保存」ボタンも無効になります。成功アラートには、評価がローカルに保存され、何も送信されていないことを明記します。

「最初から」では、1つのハンドラーですべての評価、メモ、バリデーションの表示、保存状態をクリアします。保存後に値を1つでも変更すると確認表示が実態に合わなくなるため、リセット操作は明示的にしています。この例はバックエンド、アカウント、レビューの送信先を想定していません。

関連する仕様を確認する

Vuestic UI デザインシステム:各評価項目に基準名と値を含めてラベルを付けます

各評価項目に基準名と値を含めてラベルを付けます

標準のVaRating項目は、アクセシビリティツリーにボタンとして公開されます。aria-item-labelには基準名とvalue/maxのプレースホルダーが含まれるため、「明瞭さの評価、5点中4点」のようなラベルになります。同じページに3つの評価項目が並んでも、区別のつかない星型コントロールが15個ある状態を避けられます。

テキストエリアには独自の可視ラベルがあり、進捗バーには完了状況のラベルが付いています。保存アラートはステータス領域です。装飾目的の基準マークは支援技術から隠しています。ローカルテストでは、ARIA属性の有無だけに頼らず、ラベル付きの評価ボタンを実際にクリックしてバリデーションを確認し、最終レイアウトを幅280pxで検証しました。

  • 繰り返し表示される各評価項目に、基準ごとのラベルを付けます。
  • 未回答と読み取り専用の状態は、見た目で区別できるようにします。
  • 実際の標準コントロールを操作したうえで、数値の概要を確認します。

関連する仕様を確認する

Vuestic UI デザインシステム:プラグイン、コンポーネントCSS、ローカルのアイコンアセットを含めます

プラグイン、コンポーネント CSS、ローカルのアイコンアセットを含める

エントリーポイントではcreateVuesticを登録し、元のレイアウトスタイルシートより前にvuestic-ui/cssを読み込みます。App.vueでは使用するすべてのコンポーネントをインポートしているため、説明のない自動インポート設定に依存しません。共通のフォント上書きは、ライブラリCSSの後に適用します。

パッケージコマンドで@quasar/extrasを使うのは、ローカルのMaterial Iconsフォントを取得するためだけです。Quasarを登録したり、そのコンポーネントをワークシートに混在させたりすることはありません。上記のSFCとスタイルシートは、下記のVite Vueセットアップにそのまま追加できます。生成されるスタンドアロンプレビューは必要なアセットをインライン化するため、リモートフォントを取得しません。

関連する仕様を確認する

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

標準コンポーネントを使った評価ワークシートの全体例

VaRating、VaTextarea、VaButton、VaChip、VaProgressBar、VaAlertを1つの評価モデルに接続します。

vue
<script setup>
import {ref,computed} from 'vue';
import {VaRating,VaTextarea,VaButton,VaAlert,VaChip,VaProgressBar} from 'vuestic-ui';
const criteria=ref([{name:'Clarity',hint:'Can you tell what the next action will do?',value:0},{name:'Hierarchy',hint:'Does the most important information stand out?',value:0},{name:'Feedback',hint:'Does the page explain what changed?',value:0}]);
const note=ref(''),attempted=ref(false),saved=ref(false);
const rated=computed(()=>criteria.value.filter(x=>x.value>0).length),average=computed(()=>rated.value?(criteria.value.reduce((a,x)=>a+x.value,0)/rated.value).toFixed(1):'—');
const noteError=computed(()=>attempted.value&&note.value.trim().length<20);
function save(){attempted.value=true;if(rated.value===3&&note.value.trim().length>=20)saved.value=true}
function reset(){criteria.value.forEach(x=>x.value=0);note.value='';saved.value=false;attempted.value=false}
</script>
<template><main class="review-shell"><header><p class="eyebrow">DESIGN CRITIQUE · PERSONAL WORKSHEET</p><h1>Turn an impression into useful feedback.</h1><p>Review an interface using three specific questions. Keep one concrete observation alongside the scores.</p></header><div class="review-layout"><section class="review-form"><div class="form-head"><h2>Your assessment</h2><VaChip outline size="small">{{rated}} of 3 rated</VaChip></div><div v-for="(criterion,index) in criteria" :key="criterion.name" class="criterion"><div class="criterion-mark" :class="'mark-'+index" aria-hidden="true"><i></i><b></b></div><div class="criterion-body"><h3>{{criterion.name}}</h3><p>{{criterion.hint}}</p><VaRating v-model="criterion.value" :max="5" clearable color="primary" :readonly="saved" :aria-label="criterion.name+' rating: '+criterion.value+' of 5'" :aria-item-label="criterion.name+' score {value} of {max}'"/><span class="score">{{criterion.value?criterion.value+' / 5':'Not rated'}}</span></div></div><p v-if="attempted&&rated<3" class="error" role="alert">Rate all three criteria before saving.</p><VaTextarea v-model="note" label="One concrete observation" placeholder="For example: the Save button gives no confirmation after the form closes." autosize :min-rows="4" :max-rows="12" :max-length="400" counter :error="noteError" :error-messages="noteError?['Write at least 20 meaningful characters.']:[]" :readonly="saved"/><div class="actions"><VaButton @click="save" :disabled="saved">Save assessment</VaButton><VaButton preset="secondary" @click="reset">Start again</VaButton></div></section><aside><div class="summary"><p class="eyebrow">ASSESSMENT SNAPSHOT</p><div class="average">{{average}}<span>/ 5</span></div><p class="average-label">Average of rated criteria</p><VaProgressBar :model-value="rated/3*100" color="primary" aria-label="Criteria completion"/><p class="completion">{{rated}} of 3 criteria completed</p><p class="guidance">A score starts a conversation. Your example explains what should change and why.</p><dl><div v-for="criterion in criteria" :key="criterion.name"><dt>{{criterion.name}}</dt><dd>{{criterion.value||'—'}}</dd></div></dl></div><VaAlert v-if="saved" color="success" outline class="saved" role="status"><strong>Assessment saved locally.</strong><p>All three criteria and your observation are captured in this preview. Nothing was sent.</p></VaAlert><p v-else class="local-note">This worksheet stores only local page state. It does not submit a review to another person.</p></aside></div></main></template>

コードリファレンス

  • 0は未評価を意味し、平均の計算から除外されます。
  • 保存には、3つすべての評価と、空白を除いて20文字以上のメモが必要です。
  • 保存後は、「最初から」を押すまで評価とテキストが読み取り専用になります。

元のレイアウトとタイポグラフィ設定の全体例

明示的なフォントの上書き、レスポンシブカード、装飾用の基準マーク。

CSS
:root{--va-font-family:system-ui,sans-serif}html,body,#app{height:auto;min-height:0;margin:0}*{box-sizing:border-box}body{background:#f3f5f8;color:#262824;font-family:system-ui,sans-serif}.review-shell{max-width:1100px;margin:auto;padding:32px}.eyebrow{font-size:10px;font-weight:700;letter-spacing:.13em;color:#667182}h1{font-size:34px;line-height:1.15;margin:12px 0;max-width:710px}header>p:last-child{max-width:640px;line-height:1.6;font-size:15px;color:#677080}.review-layout{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:24px;margin-top:28px}.review-form,.summary{background:white;border:1px solid #dee5f2;border-radius:14px;padding:24px;min-width:0}.form-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.form-head h2{font-size:20px;font-weight:650}.criterion{display:flex;gap:18px;padding:24px 0;border-bottom:1px solid #e6eaf0}.criterion:last-of-type{margin-bottom:24px}.criterion-body{min-width:0;flex:1}.criterion h3{font-size:16px;font-weight:650;margin:0 0 6px}.criterion p{font-size:13px;line-height:1.5;color:#677080;margin:0 0 12px}.criterion-mark{width:58px;height:58px;border-radius:12px;flex-shrink:0;position:relative;overflow:hidden;background:#e8efff}.criterion-mark i,.criterion-mark b{position:absolute;display:block}.mark-0 i{width:27px;height:27px;background:#7a9cdf;border-radius:50%;left:10px;top:14px}.mark-0 b{width:14px;height:14px;background:#154ec1;border-radius:50%;left:31px;top:22px}.mark-1{background:#eee8f8}.mark-1 i{width:15px;height:34px;background:#9273b6;left:10px;top:13px}.mark-1 b{width:15px;height:19px;background:#c2aedb;left:32px;top:28px}.mark-2{background:#e6f0e0}.mark-2 i{width:36px;height:23px;border-radius:6px;background:#86a16f;left:11px;top:14px}.mark-2 b{border:8px solid transparent;border-top-color:#86a16f;left:17px;top:33px}.score{display:block;font-size:11px;color:#667182;margin-top:7px}.actions{display:flex;gap:12px;flex-wrap:wrap;margin-top:22px}.average{font-size:64px;line-height:1.2;font-weight:650;margin-top:16px;color:#154ec1}.average span{font-size:19px;color:#78828f;font-weight:400;margin-left:8px}.average-label{font-size:12px;color:#697482;margin:5px 0 24px}.completion{font-size:11px;color:#687387;margin-top:10px}.guidance{font-size:14px;line-height:1.6;margin:24px 0}.summary dl>div{display:flex;justify-content:space-between;border-top:1px solid #e6eaf0;padding:12px 0;font-size:13px}.summary dd{font-weight:700}.saved{margin-top:16px;font-size:13px;line-height:1.6}.saved p{margin-top:7px}.local-note{font-size:12px;line-height:1.6;color:#687387;padding:16px 5px}.error{font-size:13px;color:#b71717;margin-bottom:16px}@media(max-width:760px){.review-shell{padding:20px}.review-layout{grid-template-columns:minmax(0,1fr)}h1{font-size:29px}}@media(max-width:360px){.review-shell{padding:14px}.review-form,.summary{padding:16px}.criterion{gap:12px}.criterion-mark{width:38px;height:48px}.criterion-mark i,.criterion-mark b{transform:scale(.7);transform-origin:left}.criterion-mark i{left:4px}.criterion-mark b{left:18px}.actions>*{width:100%}.va-textarea{max-width:100%}}

コードリファレンス

  • Material Iconsは独自のフォントファミリーを維持します。
  • ドキュメント全体の高さの最小値は設定しません。
04

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

実装の出発点

Vuestic UI 1.10.3と@quasar/extras 2.1.0のローカルMaterial Iconsを確認済みです。ソースコード例は両方ともすべて掲載しているため、外部フォントサービスは不要です。

JavaScript
// npm create vite@latest vuestic-review -- --template vue
// cd vuestic-review && npm install
// npm install [email protected] @quasar/[email protected]
// Save the complete examples as src/App.vue and src/style.css.
// src/main.js:
import {createApp} from 'vue';
import {createVuestic} from 'vuestic-ui';
import 'vuestic-ui/css';
import '@quasar/extras/material-icons/material-icons.css';
import './style.css';
import App from './App.vue';
createApp(App).use(createVuestic()).mount('#app');
// index.html: <div id="app"></div><script type="module" src="/src/main.js"></script>
// npm run dev

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

AI エージェント用プロンプト
Vuestic UI 1.10.3を使い、標準のVaRatingによる3つの評価基準、VaTextarea、進捗表示、ステータス表示、保存・リセット操作を備えたデザイン批評ワークシートを再現します。評価済みの基準から平均を算出し、保存には3つすべての評価と、空白を除いて20文字以上のメモを必須とします。批評の全体が見えるよう、テキストエリアの自動サイズ調整を維持し、保存後の読み取り専用状態とリセット動作も一貫させてください。createVuestic、標準のCSS、ローカルのアイコンフォントを含めます。これはローカルに記録する批評であり、検査バッチサービスではありません。
05

Vuestic UI デザインシステムのソースと適用範囲

デフォルトのライトカラープリセットと、明示的なシステムフォントの上書きを使用したVuestic UI 1.10.3。元の批評用の質問とアートワーク。保存状態はローカルに保持され、外部へのレビュー送信や再読み込み後の永続化はありません。