UI スタイル
@vizejs/ui のコンポーネントは、ビジュアル用のスタイルシートがなくても動作します。Vize のオプションのスタイルを使うには、ベース、パレットを 1 つ、そしてページで使うコンポーネントをインポートします。
import "@vizejs/ui/base.css";
import "@vizejs/ui/theme-preset-paper.css";
import "@vizejs/ui/component-button.css";
import "@vizejs/ui/component-input.css";
import "@vizejs/ui/component-textarea.css";
import "@vizejs/ui/component-checkbox.css";
import "@vizejs/ui/component-switch.css";
import "@vizejs/ui/component-dialog.css";
import "@vizejs/ui/component-card.css";
import "@vizejs/ui/component-badge.css";
import "@vizejs/ui/component-alert.css";
import "@vizejs/ui/component-tooltip.css";
// Add these only when their low-level behavior is used without the JS entry:
// import "@vizejs/ui/component-progress-bar.css";
// import "@vizejs/ui/component-scroll-area.css";
// import "@vizejs/ui/motion.css";
<template>
<main data-vize-theme="paper">
<Button>Save changes</Button>
</main>
</template>
base.css はセマンティックトークン、密度、forced-colors ポリシーを提供します。これは既存の theme.css エクスポートのエイリアスです。アプリケーションの要素をリセットしたり、スタイルの付いていない Vize コンポーネントを変更したりすることはありません。コンポーネントファイルは素の CSS アセットであり、JavaScript や Vue の API は変わりません。あるコンポーネントをインポートしても、他のコンポーネントのビジュアルルールが追加されることはありません。
Input、Textarea、Checkbox、Switch にはそれぞれ専用の CSS エクスポートがあります。テキストフィールドはネイティブの編集とリサイズの挙動を保持します。Checkbox はチェック状態と混在状態を区別し、Switch は状態が変わるとつまみが移動します。小さな状態遷移は prefers-reduced-motion の下では停止します。キーボードユーザーにはフォーカスが見えたままで、forced-colors モードではネイティブのチェックボックスのマークが保たれます。コンポーネントファイルは各テーマ境界でローカルの上書きをリセットするため、Signal のページ内にネストされた Paper のフォームも Paper の書体とプロポーションを保ちます。
Card、Badge、Alert、Tooltip にもそれぞれ個別のビジュアルファイルがあります。Card は variant、density、tone のフックを使います。Badge はラベル、カウント、ステータステキストを区別します。Alert は閉じるボタンを追加せずにライブリージョンのバリアントに従います。Tooltip はトリガーのキーボードフォーカスを見えたままにし、フローティング位置が計測された後にのみ短い登場アニメーションを開始します。静的な Card のサーフェスはアニメーションしません。Badge のトーン変化と Alert/Tooltip の登場アニメーションは prefers-reduced-motion の下では停止し、forced-colors モードではシステムの境界線が復元されます。これらのスタイルは Shadow DOM ホストを含め、ネストされたテーマ境界でリセットされます。
既存の ProgressBar と ScrollArea の構造およびモーションのレシピも、CSS のみの独立したファイルとして公開されています。それらの JavaScript エントリは、必要な挙動のためにすでにレガシーの集約スタイルシートを読み込みます。JavaScript エントリを使わずに CSS フックを使う場合や、スタイルシートを明示的に制御する場合は、独立したファイルをインポートしてください。1 つのページで両方の経路をインポートするのは避けてください。
| プリセット | 特徴 |
|---|---|
paper |
温かみのある紙、インク、細い罫線、角張ったコントロール |
signal |
シャープなエッジと控えめな奥行きを持つ、密度の高いグラファイトの面 |
atelier |
静かなスタジオ風のニュートラルカラーに、抑えたアクセントを 1 つ |
スタイルの切り替えを提供するには、上の単一のプリセットのインポートを、提供したいプリセットに置き換えます。各スタイルシートは自身のスコープ内でのみ有効になります。
import "@vizejs/ui/theme-preset-paper.css";
import "@vizejs/ui/theme-preset-signal.css";
import "@vizejs/ui/theme-preset-atelier.css";
document.documentElement.dataset.vizeTheme = "signal";
既存の midnight、play、high-contrast、headless プリセットも引き続き利用できます。ダイアログやツールチップがドキュメントの body にテレポートされる場合は、フローティングコンテンツがページと同じパレットを継承するよう、<html> に data-vize-theme を設定してください。保存された設定を使う場合は、@vizejs/ui/theme-scope が描画前に実行されるブートストラップスクリプトを提供します。以前の theme.css、theme-preset-*.css、style.css のインポートも引き続き動作します。ただし style.css にはすでにベースとすべてのレガシープリセットが含まれているため、base.css と一緒にインポートするのは避けてください。
Button には短いホバー、押下、フォーカスのフィードバックがあります。dialog.css を使うと、Dialog は表示時にアニメーションし、200ms の退出アニメーションを行います。閉じると、フォーカスの閉じ込め、外側の inert、スクロールロックは即座に解除されます。退出中のシートはアニメーションが終わるまで inert のままで、支援技術からも隠されます。Headless の Dialog は引き続き即座にアンマウントされ、prefers-reduced-motion: reduce に一致する場合はスタイル付きの Dialog も同様です。どちらのビジュアルファイルも、forced-colors モードで明確な境界を保ちます。Vize のカスケードレイヤーの外にあるアプリケーションの CSS は、どのルールでも上書きできます。