コンポーネント
Vantage に同梱される shadcn/ui (Base UI) キットと、ダッシュボード用の複合コンポーネントのリファレンス。
Vantage は shadcn/ui をそのまま同梱しています。インストールもコピーも不要で、import するだけで 使えます。公開されている入り口は 3 つで、サイドバーもこの 3 つで区切ってあります。
| サブパス | 中身 | 件数 |
|---|---|---|
@squadbase/vantage/ui |
shadcn/ui のプリミティブ(Base UI 版)と、cn() などのユーティリティ |
37 |
@squadbase/vantage/components |
それらを組み上げたダッシュボード部品 | 15 |
@squadbase/vantage/markdown |
Markdown の描画だけ(重いので分離) | 1 |
import { Button, Card, Badge } from "@squadbase/vantage/ui";
import { PageShell, DashboardCardPreset, EChart } from "@squadbase/vantage/components";
import { MarkdownRenderer } from "@squadbase/vantage/markdown";
Base UI ベースであること
同梱しているのは shadcn/ui の Base UI 版です。2026 年 7 月に shadcn/ui は既定のプリミティブを Radix UI から Base UI へ切り替えており、Vantage はその新しい方を採用して います。Radix 版から来た場合、主な違いは次の 4 点です。
-
asChildはありません。 代わりにrenderプロップに要素を渡します。// Radix 版 <PopoverTrigger asChild><Button>開く</Button></PopoverTrigger> // Base UI 版(Vantage) <PopoverTrigger render={<Button />}>開く</PopoverTrigger> -
Checkboxのcheckedはbooleanのみ。 中間状態はindeterminateプロップで表します。 -
ToggleGroupのvalueは配列。 単一選択にしたいときはSegmentedControlを使ってください。 -
SelectのonValueChangeはstring | null。nullのガードが 要ります。値とラベルが違うときのitemsは Vantage 側がSelectItemから自動で組むので、 通常は書かなくて済みます(別コンポーネントが項目を返す形のときだけ明示)。
状態は data-state="open" ではなく data-open / data-checked のような属性で表現されます。
Vantage の theme.css は両方の綴りを受ける custom variant を定義しているので、
data-open:animate-in のようなクラスはどちらの流儀でも書けます。
@squadbase/vantage/ui
shadcn/ui のプリミティブです。名前も props も shadcn/ui のものと同じなので、 shadcn/ui のドキュメント もそのまま参考になります。 サイドバーはアルファベット順ですが、ここでは用途で並べています。
フォームと入力
Button ·
Input ·
InputGroup ·
Textarea ·
Label ·
Select ·
Checkbox ·
Switch ·
Slider ·
Toggle ·
ToggleGroup ·
Calendar ·
Command
レイアウトとナビゲーション
Card ·
Tabs ·
Separator ·
ScrollArea ·
Sidebar ·
Breadcrumb ·
Accordion ·
Collapsible
データ表示
オーバーレイ
Dialog ·
Sheet ·
Popover ·
Tooltip ·
DropdownMenu
状態表示
Alert ·
Skeleton ·
Spinner ·
Loading ·
Empty ·
ErrorState
Loading / Empty / ErrorState の 3 つだけは shadcn/ui にはなく、Vantage が足したものです。
ユーティリティ
@squadbase/vantage/components
ui/ を組み上げた、ダッシュボード向けの複合部品です。
| コンポーネント | 概要 |
|---|---|
PageShell |
ヘッダー帯・サマリー・本文からなるページ枠 |
AppShell |
ナビゲーション定義を渡すだけのアプリ枠 |
SectionHeader |
セクション見出しとアクション |
DashboardCard |
ダッシュボードのタイル(プリセットとスケルトン付き) |
DataTable |
並べ替え・検索・ページング・選択を備えた表 |
EChart |
Apache ECharts のラッパー |
FunnelSteps |
ファネルの棒表示 |
Sparkline |
セルやタイルに置くインラインの推移グラフ |
FilterBar |
フィルタ一式を 1 つの値で扱う行 |
DateRangePicker |
プリセット付きの期間選択 |
SegmentedControl |
単一選択のセグメント |
SearchableSelect |
検索できる単一選択 |
MultiSelect |
検索できる複数選択 |
MetricValue |
KPI の数値と単位 |
TrendIndicator |
増減の矢印と変化率 |
StatusBadge |
ドット付きステータスバッジ |
Placeholder |
仮データであることを示すインラインの目印 |
@squadbase/vantage/markdown
MarkdownRenderer だけが置かれた独立のサブパスです。
Markdown 描画は Shiki の全言語文法を抱えており、components のバレルに混ぜるとビルド出力が
10 MB 以上増えるため、意図的に分けてあります。
組み合わせる
import { Button } from "@squadbase/vantage/ui";
import {
PageShell,
PageShellHeader,
PageShellHeading,
PageShellTitle,
PageShellDescription,
PageShellHeaderEnd,
PageShellActions,
PageShellContent,
DashboardCardPreset,
MetricValue,
TrendIndicator,
EChart,
type EChartsOption,
} from "@squadbase/vantage/components";
const option: EChartsOption = {
xAxis: { type: "category", data: monthly.map((m) => m.month) },
yAxis: { type: "value" },
series: [{ type: "bar", data: monthly.map((m) => m.revenue) }],
};
export default function Overview() {
return (
<PageShell>
<PageShellHeader>
<PageShellHeading>
<PageShellTitle>売上ダッシュボード</PageShellTitle>
<PageShellDescription>直近 6 か月の推移</PageShellDescription>
</PageShellHeading>
<PageShellHeaderEnd>
<PageShellActions>
<Button variant="outline">エクスポート</Button>
</PageShellActions>
</PageShellHeaderEnd>
</PageShellHeader>
<PageShellContent>
<div className="grid gap-4 md:grid-cols-3">
<DashboardCardPreset title="売上">
<MetricValue className="my-0">¥1,240,000</MetricValue>
<TrendIndicator value={12.4} direction="up" />
</DashboardCardPreset>
<DashboardCardPreset title="新規顧客">
<MetricValue className="my-0">128</MetricValue>
<TrendIndicator value={3.1} direction="down" />
</DashboardCardPreset>
<DashboardCardPreset title="解約率">
<MetricValue className="my-0">2.1%</MetricValue>
</DashboardCardPreset>
</div>
<DashboardCardPreset title="月次売上" className="mt-4">
<EChart option={option} height={320} />
</DashboardCardPreset>
</PageShellContent>
</PageShell>
);
}
テーマ
見た目は CSS 変数(デザイントークン)で決まります。色や角丸を変えたいときは、ページと同じ側に置いた
styles.css(src/ があれば src/styles.css)で変数だけを上書きします — 詳しくは
UI とテーマ を参照してください。
ソースを編集したいとき
コンポーネントの中身そのものを変えたい場合は、編集可能なコピーを取り出します。
vantage add ui data-table # 編集可能な DataTable を components/ へ
vantage add block sales-overview
このページの読み方
各コンポーネントのページには、動くプレビューとそのソースがタブで並んでいます。
プレビューのソース先頭にある export const client = "only"; はドキュメントサイト側の指定で、
アプリのコードには要りません。