@squadbase/vantage 0.0.1 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -4
- package/dist/{chunk-ZGDU5YLH.js → chunk-5L2MH2NG.js} +16 -7
- package/dist/chunk-5L2MH2NG.js.map +1 -0
- package/dist/chunk-7IPAXPPY.js +51 -0
- package/dist/chunk-7IPAXPPY.js.map +1 -0
- package/dist/chunk-A2UUGASH.js +12 -0
- package/dist/chunk-A2UUGASH.js.map +1 -0
- package/dist/chunk-DTDVSFRY.js +29 -0
- package/dist/chunk-DTDVSFRY.js.map +1 -0
- package/dist/chunk-WQZYXXQW.js +2249 -0
- package/dist/chunk-WQZYXXQW.js.map +1 -0
- package/dist/{chunk-73J5ZD4C.js → chunk-YLAB6UQS.js} +17 -3
- package/dist/chunk-YLAB6UQS.js.map +1 -0
- package/dist/cli.js +607 -36
- package/dist/cli.js.map +1 -1
- package/dist/client/index.d.ts +2 -1
- package/dist/client/index.js +3 -1
- package/dist/client/index.js.map +1 -1
- package/dist/components/index.d.ts +575 -0
- package/dist/components/index.js +2097 -0
- package/dist/components/index.js.map +1 -0
- package/dist/{define-page-B6y9TOfZ.d.ts → define-page-BfhrK99G.d.ts} +5 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/markdown/index.d.ts +9 -0
- package/dist/markdown/index.js +26 -0
- package/dist/markdown/index.js.map +1 -0
- package/dist/query/index.d.ts +95 -2
- package/dist/query/index.js +102 -1
- package/dist/query/index.js.map +1 -1
- package/dist/router/index.d.ts +86 -1
- package/dist/router/index.js +71 -7
- package/dist/router/index.js.map +1 -1
- package/dist/server/node.js +6 -1
- package/dist/server/node.js.map +1 -1
- package/dist/ui/index.d.ts +316 -200
- package/dist/ui/index.js +566 -511
- package/dist/ui/index.js.map +1 -1
- package/dist/vite/index.js +2 -2
- package/docs/en/agent-skills.md +89 -0
- package/docs/en/api-and-server.md +84 -0
- package/docs/en/build-and-deploy.md +280 -0
- package/docs/en/cli-reference.md +311 -0
- package/docs/en/components.md +235 -0
- package/docs/en/data-fetching.md +142 -0
- package/docs/en/environment-variables.md +69 -0
- package/docs/en/getting-started.md +95 -0
- package/docs/en/index.md +65 -0
- package/docs/en/markdown/markdown-renderer.md +44 -0
- package/docs/en/pages-and-metadata.md +59 -0
- package/docs/en/parts/app-shell.md +54 -0
- package/docs/en/parts/dashboard-card.md +64 -0
- package/docs/en/parts/data-table.md +86 -0
- package/docs/en/parts/date-range-picker.md +41 -0
- package/docs/en/parts/echart.md +53 -0
- package/docs/en/parts/filter-bar.md +66 -0
- package/docs/en/parts/funnel-steps.md +33 -0
- package/docs/en/parts/metric-value.md +23 -0
- package/docs/en/parts/multi-select.md +27 -0
- package/docs/en/parts/page-shell.md +45 -0
- package/docs/en/parts/placeholder.md +38 -0
- package/docs/en/parts/searchable-select.md +47 -0
- package/docs/en/parts/section-header.md +20 -0
- package/docs/en/parts/segmented-control.md +25 -0
- package/docs/en/parts/sparkline.md +47 -0
- package/docs/en/parts/status-badge.md +44 -0
- package/docs/en/parts/trend-indicator.md +26 -0
- package/docs/en/routing.md +177 -0
- package/docs/en/ui/accordion.md +36 -0
- package/docs/en/ui/alert.md +31 -0
- package/docs/en/ui/badge.md +23 -0
- package/docs/en/ui/breadcrumb.md +38 -0
- package/docs/en/ui/button.md +39 -0
- package/docs/en/ui/calendar.md +28 -0
- package/docs/en/ui/card.md +35 -0
- package/docs/en/ui/checkbox.md +34 -0
- package/docs/en/ui/cn.md +34 -0
- package/docs/en/ui/collapsible.md +21 -0
- package/docs/en/ui/command.md +37 -0
- package/docs/en/ui/dialog.md +52 -0
- package/docs/en/ui/dropdown-menu.md +50 -0
- package/docs/en/ui/empty.md +22 -0
- package/docs/en/ui/error-state.md +50 -0
- package/docs/en/ui/input-group.md +30 -0
- package/docs/en/ui/input.md +28 -0
- package/docs/en/ui/label.md +19 -0
- package/docs/en/ui/loading.md +19 -0
- package/docs/en/ui/popover.md +34 -0
- package/docs/en/ui/progress.md +28 -0
- package/docs/en/ui/scroll-area.md +23 -0
- package/docs/en/ui/select.md +63 -0
- package/docs/en/ui/separator.md +15 -0
- package/docs/en/ui/sheet.md +28 -0
- package/docs/en/ui/sidebar.md +92 -0
- package/docs/en/ui/skeleton.md +16 -0
- package/docs/en/ui/slider.md +21 -0
- package/docs/en/ui/spinner.md +14 -0
- package/docs/en/ui/switch.md +19 -0
- package/docs/en/ui/table.md +24 -0
- package/docs/en/ui/tabs.md +23 -0
- package/docs/en/ui/textarea.md +15 -0
- package/docs/en/ui/toggle-group.md +26 -0
- package/docs/en/ui/toggle.md +19 -0
- package/docs/en/ui/tooltip.md +22 -0
- package/docs/en/ui/use-is-mobile.md +18 -0
- package/docs/en/ui-and-theming.md +95 -0
- package/docs/index.json +1346 -0
- package/docs/ja/agent-skills.md +87 -0
- package/docs/ja/api-and-server.md +84 -0
- package/docs/ja/build-and-deploy.md +279 -0
- package/docs/ja/cli-reference.md +305 -0
- package/docs/ja/components.md +231 -0
- package/docs/ja/data-fetching.md +142 -0
- package/docs/ja/environment-variables.md +68 -0
- package/docs/ja/getting-started.md +95 -0
- package/docs/ja/index.md +65 -0
- package/docs/ja/markdown/markdown-renderer.md +43 -0
- package/docs/ja/pages-and-metadata.md +59 -0
- package/docs/ja/parts/app-shell.md +54 -0
- package/docs/ja/parts/dashboard-card.md +64 -0
- package/docs/ja/parts/data-table.md +85 -0
- package/docs/ja/parts/date-range-picker.md +41 -0
- package/docs/ja/parts/echart.md +52 -0
- package/docs/ja/parts/filter-bar.md +64 -0
- package/docs/ja/parts/funnel-steps.md +33 -0
- package/docs/ja/parts/metric-value.md +25 -0
- package/docs/ja/parts/multi-select.md +27 -0
- package/docs/ja/parts/page-shell.md +45 -0
- package/docs/ja/parts/placeholder.md +37 -0
- package/docs/ja/parts/searchable-select.md +47 -0
- package/docs/ja/parts/section-header.md +20 -0
- package/docs/ja/parts/segmented-control.md +26 -0
- package/docs/ja/parts/sparkline.md +47 -0
- package/docs/ja/parts/status-badge.md +44 -0
- package/docs/ja/parts/trend-indicator.md +26 -0
- package/docs/ja/routing.md +175 -0
- package/docs/ja/ui/accordion.md +37 -0
- package/docs/ja/ui/alert.md +31 -0
- package/docs/ja/ui/badge.md +23 -0
- package/docs/ja/ui/breadcrumb.md +38 -0
- package/docs/ja/ui/button.md +39 -0
- package/docs/ja/ui/calendar.md +28 -0
- package/docs/ja/ui/card.md +35 -0
- package/docs/ja/ui/checkbox.md +34 -0
- package/docs/ja/ui/cn.md +34 -0
- package/docs/ja/ui/collapsible.md +21 -0
- package/docs/ja/ui/command.md +36 -0
- package/docs/ja/ui/dialog.md +51 -0
- package/docs/ja/ui/dropdown-menu.md +50 -0
- package/docs/ja/ui/empty.md +22 -0
- package/docs/ja/ui/error-state.md +50 -0
- package/docs/ja/ui/input-group.md +30 -0
- package/docs/ja/ui/input.md +28 -0
- package/docs/ja/ui/label.md +19 -0
- package/docs/ja/ui/loading.md +19 -0
- package/docs/ja/ui/popover.md +34 -0
- package/docs/ja/ui/progress.md +28 -0
- package/docs/ja/ui/scroll-area.md +24 -0
- package/docs/ja/ui/select.md +64 -0
- package/docs/ja/ui/separator.md +15 -0
- package/docs/ja/ui/sheet.md +28 -0
- package/docs/ja/ui/sidebar.md +92 -0
- package/docs/ja/ui/skeleton.md +16 -0
- package/docs/ja/ui/slider.md +21 -0
- package/docs/ja/ui/spinner.md +14 -0
- package/docs/ja/ui/switch.md +19 -0
- package/docs/ja/ui/table.md +24 -0
- package/docs/ja/ui/tabs.md +24 -0
- package/docs/ja/ui/textarea.md +15 -0
- package/docs/ja/ui/toggle-group.md +27 -0
- package/docs/ja/ui/toggle.md +19 -0
- package/docs/ja/ui/tooltip.md +22 -0
- package/docs/ja/ui/use-is-mobile.md +18 -0
- package/docs/ja/ui-and-theming.md +95 -0
- package/package.json +29 -4
- package/registry/blocks/sales-overview.tsx +43 -19
- package/registry/ui/data-table.tsx +702 -102
- package/skills/vantage-add-feature/SKILL.md +153 -0
- package/skills/vantage-app/SKILL.md +291 -0
- package/skills/vantage-pitfalls/SKILL.md +139 -0
- package/templates/AGENTS.md +313 -0
- package/theme.css +178 -40
- package/dist/chunk-73J5ZD4C.js.map +0 -1
- package/dist/chunk-ATYZ45XL.js +0 -19
- package/dist/chunk-ATYZ45XL.js.map +0 -1
- package/dist/chunk-ZGDU5YLH.js.map +0 -1
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# ScrollArea
|
|
2
|
+
|
|
3
|
+
> OS 依存しないスクロールバーを持つ領域。
|
|
4
|
+
|
|
5
|
+
高さを固定した領域に、OS 標準ではないスクロールバーを付けます。ドロップダウンの中身や、長い
|
|
6
|
+
ログの表示に使います。
|
|
7
|
+
|
|
8
|
+
```tsx
|
|
9
|
+
import { ScrollArea, ScrollBar } from "@squadbase/vantage/ui";
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
高さ(または幅)は `className` で指定します。既定は縦スクロールで、横に流したいときは
|
|
13
|
+
`ScrollBar orientation="horizontal"` を子に置きます。
|
|
14
|
+
|
|
15
|
+
```tsx
|
|
16
|
+
<ScrollArea className="w-96 whitespace-nowrap">
|
|
17
|
+
<div className="flex gap-3">…</div>
|
|
18
|
+
<ScrollBar orientation="horizontal" />
|
|
19
|
+
</ScrollArea>
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
> [!NOTE]
|
|
23
|
+
> スクロールバー自体を消したいだけなら、`no-scrollbar` ユーティリティが `theme.css` に定義されて
|
|
24
|
+
> います。
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Select
|
|
2
|
+
|
|
3
|
+
> 単一選択のセレクト。onValueChange は null を渡しうる。
|
|
4
|
+
|
|
5
|
+
候補から 1 つ選ぶ入力です。候補が多くて検索したい場合は
|
|
6
|
+
[`SearchableSelect`](parts/searchable-select)、少数を横並びで見せたい場合は
|
|
7
|
+
[`SegmentedControl`](parts/segmented-control) を検討してください。
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
import {
|
|
11
|
+
Select,
|
|
12
|
+
SelectTrigger,
|
|
13
|
+
SelectValue,
|
|
14
|
+
SelectContent,
|
|
15
|
+
SelectGroup,
|
|
16
|
+
SelectLabel,
|
|
17
|
+
SelectItem,
|
|
18
|
+
SelectSeparator,
|
|
19
|
+
SelectScrollUpButton,
|
|
20
|
+
SelectScrollDownButton,
|
|
21
|
+
} from "@squadbase/vantage/ui";
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## パーツ
|
|
25
|
+
|
|
26
|
+
| パーツ | 役割 |
|
|
27
|
+
| --- | --- |
|
|
28
|
+
| `Select` | 状態。`value` / `defaultValue` / `onValueChange` / `items` |
|
|
29
|
+
| `SelectTrigger` | 閉じているときの見た目。`size`: `default` \| `sm` |
|
|
30
|
+
| `SelectValue` | 選択中の表示。`placeholder` は未選択時 |
|
|
31
|
+
| `SelectContent` | 開いたときのリスト |
|
|
32
|
+
| `SelectGroup` + `SelectLabel` | 見出し付きのグループ |
|
|
33
|
+
| `SelectItem` | 1 項目。`value` は必須 |
|
|
34
|
+
|
|
35
|
+
> [!WARNING]
|
|
36
|
+
> `onValueChange` は **`string | null`** を渡します(Base UI では選択解除がありうるため)。
|
|
37
|
+
> `null` を握りつぶすガードを必ず書いてください。
|
|
38
|
+
>
|
|
39
|
+
> ```tsx
|
|
40
|
+
> <Select onValueChange={(value) => value !== null && setRegion(value)}>
|
|
41
|
+
> ```
|
|
42
|
+
|
|
43
|
+
> [!WARNING]
|
|
44
|
+
> `SelectValue` は既定で**選択中の `value` をそのまま表示します** — `SelectItem` の中身は見ません。
|
|
45
|
+
> `value="kanto"` なら、トリガーには「関東」ではなく `kanto` と出ます。値とラベルの対応を
|
|
46
|
+
> `items` に渡してください。
|
|
47
|
+
>
|
|
48
|
+
> ```tsx
|
|
49
|
+
> const regions = { hokkaido: "北海道", kanto: "関東", kansai: "関西" };
|
|
50
|
+
>
|
|
51
|
+
> <Select items={regions} value={region} onValueChange={…}>
|
|
52
|
+
> <SelectTrigger><SelectValue placeholder="地域を選ぶ" /></SelectTrigger>
|
|
53
|
+
> …
|
|
54
|
+
> </Select>;
|
|
55
|
+
> ```
|
|
56
|
+
>
|
|
57
|
+
> `items` を持たせたくない場合は、`SelectValue` の children に関数を渡しても同じことができます。
|
|
58
|
+
>
|
|
59
|
+
> ```tsx
|
|
60
|
+
> <SelectValue>{(value) => regions[value] ?? "地域を選ぶ"}</SelectValue>
|
|
61
|
+
> ```
|
|
62
|
+
|
|
63
|
+
`SelectContent` は既定で選択中の項目をトリガーに重ねて開きます。素直に下へ開かせたいときは
|
|
64
|
+
`alignItemWithTrigger={false}` を渡します。
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Separator
|
|
2
|
+
|
|
3
|
+
> 1 本の区切り線。
|
|
4
|
+
|
|
5
|
+
内容を分ける線です。`orientation="vertical"` にするときは、親に高さが要ります。
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { Separator } from "@squadbase/vantage/ui";
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Default | 説明 |
|
|
12
|
+
| --- | --- | --- | --- |
|
|
13
|
+
| `orientation` | `"horizontal" \| "vertical"` | `"horizontal"` | 線の向き。 |
|
|
14
|
+
|
|
15
|
+
装飾目的の線なので、支援技術には読み上げられません。
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Sheet
|
|
2
|
+
|
|
3
|
+
> 画面の端から出るパネル。
|
|
4
|
+
|
|
5
|
+
画面の端から滑り出すパネルです。フィルタ一式や詳細の編集など、モーダルより広い面積が要る場面に
|
|
6
|
+
向いています。
|
|
7
|
+
|
|
8
|
+
```tsx
|
|
9
|
+
import {
|
|
10
|
+
Sheet,
|
|
11
|
+
SheetTrigger,
|
|
12
|
+
SheetContent,
|
|
13
|
+
SheetHeader,
|
|
14
|
+
SheetTitle,
|
|
15
|
+
SheetDescription,
|
|
16
|
+
SheetFooter,
|
|
17
|
+
SheetClose,
|
|
18
|
+
} from "@squadbase/vantage/ui";
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
構成は [`Dialog`](ui/dialog) と同じで、違うのは出てくる向きだけです。
|
|
22
|
+
|
|
23
|
+
| Prop | Type | Default | 説明 |
|
|
24
|
+
| --- | --- | --- | --- |
|
|
25
|
+
| `side` | `"top" \| "right" \| "bottom" \| "left"` | `"right"` | `SheetContent` に渡す。どの端から出すか。 |
|
|
26
|
+
|
|
27
|
+
`SheetTitle` は支援技術のために必須です。見せたくない場合も置いた上で `className="sr-only"` に
|
|
28
|
+
してください。
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Sidebar
|
|
2
|
+
|
|
3
|
+
> 折りたためるアプリのサイドバー一式。
|
|
4
|
+
|
|
5
|
+
アプリ全体のナビゲーションを組むための、20 以上のパーツからなるキットです。ナビゲーションの
|
|
6
|
+
定義を配列で渡すだけで済ませたいなら、これを直接使うより
|
|
7
|
+
[`AppShell`](parts/app-shell) の方が早く終わります。
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
import {
|
|
11
|
+
Sidebar,
|
|
12
|
+
SidebarProvider,
|
|
13
|
+
SidebarInset,
|
|
14
|
+
SidebarTrigger,
|
|
15
|
+
SidebarHeader,
|
|
16
|
+
SidebarContent,
|
|
17
|
+
SidebarFooter,
|
|
18
|
+
SidebarGroup,
|
|
19
|
+
SidebarGroupLabel,
|
|
20
|
+
SidebarGroupContent,
|
|
21
|
+
SidebarGroupAction,
|
|
22
|
+
SidebarMenu,
|
|
23
|
+
SidebarMenuItem,
|
|
24
|
+
SidebarMenuButton,
|
|
25
|
+
SidebarMenuAction,
|
|
26
|
+
SidebarMenuBadge,
|
|
27
|
+
SidebarMenuSkeleton,
|
|
28
|
+
SidebarMenuSub,
|
|
29
|
+
SidebarMenuSubItem,
|
|
30
|
+
SidebarMenuSubButton,
|
|
31
|
+
SidebarSeparator,
|
|
32
|
+
SidebarInput,
|
|
33
|
+
SidebarRail,
|
|
34
|
+
useSidebar,
|
|
35
|
+
} from "@squadbase/vantage/ui";
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## 骨組み
|
|
39
|
+
|
|
40
|
+
`SidebarProvider` が開閉の状態を持ち、`Sidebar` と `SidebarInset`(本文側)がその中に並びます。
|
|
41
|
+
|
|
42
|
+
```tsx
|
|
43
|
+
<SidebarProvider>
|
|
44
|
+
<Sidebar>
|
|
45
|
+
<SidebarHeader>Acme Analytics</SidebarHeader>
|
|
46
|
+
<SidebarContent>
|
|
47
|
+
<SidebarGroup>
|
|
48
|
+
<SidebarGroupLabel>分析</SidebarGroupLabel>
|
|
49
|
+
<SidebarGroupContent>
|
|
50
|
+
<SidebarMenu>
|
|
51
|
+
<SidebarMenuItem>
|
|
52
|
+
<SidebarMenuButton isActive>概要</SidebarMenuButton>
|
|
53
|
+
</SidebarMenuItem>
|
|
54
|
+
<SidebarMenuItem>
|
|
55
|
+
<SidebarMenuButton>売上</SidebarMenuButton>
|
|
56
|
+
<SidebarMenuBadge>12</SidebarMenuBadge>
|
|
57
|
+
</SidebarMenuItem>
|
|
58
|
+
</SidebarMenu>
|
|
59
|
+
</SidebarGroupContent>
|
|
60
|
+
</SidebarGroup>
|
|
61
|
+
</SidebarContent>
|
|
62
|
+
<SidebarRail />
|
|
63
|
+
</Sidebar>
|
|
64
|
+
|
|
65
|
+
<SidebarInset>
|
|
66
|
+
<SidebarTrigger />
|
|
67
|
+
{children}
|
|
68
|
+
</SidebarInset>
|
|
69
|
+
</SidebarProvider>
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## 覚えておくと効くもの
|
|
73
|
+
|
|
74
|
+
| もの | 効果 |
|
|
75
|
+
| --- | --- |
|
|
76
|
+
| `SidebarMenuButton` の `isActive` | 現在地の強調 |
|
|
77
|
+
| `SidebarMenuButton` の `tooltip` | 折りたたみ時にラベルをツールチップで見せる |
|
|
78
|
+
| `SidebarMenuButton` の `render` | リンクコンポーネントに差し替える |
|
|
79
|
+
| `SidebarRail` | 端をドラッグして開閉できる細い帯 |
|
|
80
|
+
| `SidebarMenuSkeleton` | 読み込み中のメニュー |
|
|
81
|
+
| `useSidebar()` | 開閉状態とモバイル判定を読む |
|
|
82
|
+
|
|
83
|
+
## リンクにする
|
|
84
|
+
|
|
85
|
+
```tsx
|
|
86
|
+
import { Link } from "@squadbase/vantage/router";
|
|
87
|
+
|
|
88
|
+
<SidebarMenuButton render={<Link to="/sales" />}>売上</SidebarMenuButton>;
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
> [!NOTE]
|
|
92
|
+
> `asChild` は Base UI にはありません。`render` に要素を渡します。
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Skeleton
|
|
2
|
+
|
|
3
|
+
> 中身と同じ形をした読み込み中の箱。
|
|
4
|
+
|
|
5
|
+
あとから入る中身と同じ形の箱を、読み込み中に置いておくためのものです。
|
|
6
|
+
[`Loading`](ui/loading) の全画面スピナーと違い、レイアウトを保ったまま待てます。
|
|
7
|
+
|
|
8
|
+
```tsx
|
|
9
|
+
import { Skeleton } from "@squadbase/vantage/ui";
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
大きさは `className` で決めます(`h-4 w-32` のように)。実際に入る要素と同じ高さにしておくと、
|
|
13
|
+
読み込み完了時に画面が跳ねません。
|
|
14
|
+
|
|
15
|
+
ダッシュボードのタイルには、同じ形をあらかじめ組んである
|
|
16
|
+
[`DashboardCardSkeleton`](parts/dashboard-card) が使えます。
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Slider
|
|
2
|
+
|
|
3
|
+
> つまみで数値を選ぶ。範囲指定にも対応。
|
|
4
|
+
|
|
5
|
+
数値をつまみで選ぶ入力です。`value` に配列を渡すとつまみが増え、範囲指定になります。
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { Slider } from "@squadbase/vantage/ui";
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Default | 説明 |
|
|
12
|
+
| --- | --- | --- | --- |
|
|
13
|
+
| `value` | `number \| number[]` | | つまみの位置。配列なら範囲指定になる。 |
|
|
14
|
+
| `defaultValue` | `number \| number[]` | | 非制御時の初期値。 |
|
|
15
|
+
| `onValueChange` | `(value: number \| number[]) => void` | | 変更時。`value` に渡した形と同じ形が返る。 |
|
|
16
|
+
| `min` | `number` | `0` | 下限。 |
|
|
17
|
+
| `max` | `number` | `100` | 上限。 |
|
|
18
|
+
| `step` | `number` | `1` | 刻み。 |
|
|
19
|
+
| `disabled` | `boolean` | | 操作を無効にする。 |
|
|
20
|
+
|
|
21
|
+
つまみは端で内側に収まるよう配置されるので、`min` / `max` のところでトラックからはみ出しません。
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Spinner
|
|
2
|
+
|
|
3
|
+
> いちばん小さい待機表示。
|
|
4
|
+
|
|
5
|
+
回転するアイコンだけの待機表示です。ボタンの中など、狭い場所に置きます。
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { Spinner } from "@squadbase/vantage/ui";
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
`<svg>` そのものなので、大きさは `size-*`、色は `text-*` で決まります。
|
|
12
|
+
|
|
13
|
+
画面ぶんの読み込みには [`Loading`](ui/loading)、レイアウトを保ったまま待たせるなら
|
|
14
|
+
[`Skeleton`](ui/skeleton) を使ってください。
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Switch
|
|
2
|
+
|
|
3
|
+
> 即時に効く設定のトグル。
|
|
4
|
+
|
|
5
|
+
その場で効く設定の切り替えです。フォームを送信して初めて効く項目には
|
|
6
|
+
[`Checkbox`](ui/checkbox) の方が適しています。
|
|
7
|
+
|
|
8
|
+
```tsx
|
|
9
|
+
import { Switch } from "@squadbase/vantage/ui";
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
| Prop | Type | Default | 説明 |
|
|
13
|
+
| --- | --- | --- | --- |
|
|
14
|
+
| `checked` | `boolean` | | オン/オフ。 |
|
|
15
|
+
| `onCheckedChange` | `(checked: boolean) => void` | | 変更時。 |
|
|
16
|
+
| `size` | `"default" \| "sm"` | `"default"` | 大きさ。 |
|
|
17
|
+
| `disabled` | `boolean` | | 操作を無効にする。 |
|
|
18
|
+
|
|
19
|
+
ラベルは [`Label`](ui/label) で包むと、文字の側を押しても切り替わります。
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Table
|
|
2
|
+
|
|
3
|
+
> 素の表プリミティブ。並べ替えや検索が要るなら DataTable を。
|
|
4
|
+
|
|
5
|
+
`<table>` 一式にテーマの罫線と余白を付けただけのプリミティブです。並べ替え・検索・ページングが
|
|
6
|
+
要るなら [`DataTable`](parts/data-table) を使ってください。
|
|
7
|
+
|
|
8
|
+
```tsx
|
|
9
|
+
import {
|
|
10
|
+
Table,
|
|
11
|
+
TableHeader,
|
|
12
|
+
TableBody,
|
|
13
|
+
TableFooter,
|
|
14
|
+
TableRow,
|
|
15
|
+
TableHead,
|
|
16
|
+
TableCell,
|
|
17
|
+
TableCaption,
|
|
18
|
+
} from "@squadbase/vantage/ui";
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
対応は素の HTML そのままです — `Table` は `<table>`、`TableHeader` は `<thead>`、`TableHead` は
|
|
22
|
+
`<th>`、`TableCell` は `<td>`。props もネイティブのものが通ります。
|
|
23
|
+
|
|
24
|
+
数値の列は `text-right tabular-nums` を付けると桁が揃います。
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Tabs
|
|
2
|
+
|
|
3
|
+
> 表示を切り替えるタブ。
|
|
4
|
+
|
|
5
|
+
同じ場所に複数の内容を出し分けます。ボタン 2〜4 個で切り替えるだけなら
|
|
6
|
+
[`SegmentedControl`](parts/segmented-control) の方が場所を取りません。
|
|
7
|
+
|
|
8
|
+
```tsx
|
|
9
|
+
import { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants } from "@squadbase/vantage/ui";
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## パーツ
|
|
13
|
+
|
|
14
|
+
| パーツ | 役割 |
|
|
15
|
+
| --- | --- |
|
|
16
|
+
| `Tabs` | 状態。`value` / `defaultValue` / `onValueChange`、`orientation` |
|
|
17
|
+
| `TabsList` | タブの帯。`variant`: `default`(塗り)\| `line`(下線) |
|
|
18
|
+
| `TabsTrigger` | タブ 1 つ。`value` は必須 |
|
|
19
|
+
| `TabsContent` | 対応する中身 |
|
|
20
|
+
|
|
21
|
+
URL に状態を残したい場合は、`value` を検索パラメータと結び付けてください
|
|
22
|
+
([ルーティング](routing) を参照)。
|
|
23
|
+
|
|
24
|
+
`orientation="vertical"` にすると縦並びになります。
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Textarea
|
|
2
|
+
|
|
3
|
+
> 複数行のテキスト入力。
|
|
4
|
+
|
|
5
|
+
複数行の入力です。props はネイティブの `<textarea>` と同じです。
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { Textarea } from "@squadbase/vantage/ui";
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
高さは `rows` か `className`(`min-h-32` など)で決めます。`aria-invalid` を付けるとエラー色に
|
|
12
|
+
なるのは [`Input`](ui/input) と同じです。
|
|
13
|
+
|
|
14
|
+
上下にツールバーを付けたいときは、[`InputGroup`](ui/input-group) の
|
|
15
|
+
`InputGroupTextarea` と `align="block-end"` の組み合わせが使えます。
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# ToggleGroup
|
|
2
|
+
|
|
3
|
+
> トグルの束。value は常に配列。
|
|
4
|
+
|
|
5
|
+
複数のトグルをひとつの帯にまとめます。Base UI では**単一選択でも `value` は配列**です — 単一
|
|
6
|
+
選択が欲しいだけなら [`SegmentedControl`](parts/segmented-control) がその面倒を
|
|
7
|
+
引き受けます。
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
import { ToggleGroup, ToggleGroupItem } from "@squadbase/vantage/ui";
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
| Prop | Type | Default | 説明 |
|
|
14
|
+
| --- | --- | --- | --- |
|
|
15
|
+
| `value` | `string[]` | | 選択中の値。**単一選択でも配列**。 |
|
|
16
|
+
| `onValueChange` | `(value: string[]) => void` | | 変更時。配列で返る。 |
|
|
17
|
+
| `toggleMultiple` | `boolean` | | 複数選択を許す。 |
|
|
18
|
+
| `variant` | `"default" \| "outline"` | `"default"` | |
|
|
19
|
+
| `size` | `"default" \| "sm" \| "lg"` | `"default"` | |
|
|
20
|
+
| `spacing` | `number` | `2` | 項目の間隔。`0` で連結された帯になる。 |
|
|
21
|
+
| `orientation` | `"horizontal" \| "vertical"` | `"horizontal"` | |
|
|
22
|
+
|
|
23
|
+
> [!WARNING]
|
|
24
|
+
> Radix 版の `type="single"` / `type="multiple"` はありません。単一選択は「配列の長さを 1 に保つ」
|
|
25
|
+
> という運用になります。その処理は
|
|
26
|
+
> [`SegmentedControl`](parts/segmented-control) に入っているので、
|
|
27
|
+
> 単一選択ならそちらを使うのが確実です。
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Toggle
|
|
2
|
+
|
|
3
|
+
> 押した状態を保つボタン。
|
|
4
|
+
|
|
5
|
+
押すとその状態が残るボタンです。複数を束ねたいときは
|
|
6
|
+
[`ToggleGroup`](ui/toggle-group) を使います。
|
|
7
|
+
|
|
8
|
+
```tsx
|
|
9
|
+
import { Toggle, toggleVariants } from "@squadbase/vantage/ui";
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
| Prop | Type | Default | 説明 |
|
|
13
|
+
| --- | --- | --- | --- |
|
|
14
|
+
| `pressed` | `boolean` | | 押された状態。 |
|
|
15
|
+
| `onPressedChange` | `(pressed: boolean) => void` | | 変更時。 |
|
|
16
|
+
| `variant` | `"default" \| "outline"` | `"default"` | 見た目。 |
|
|
17
|
+
| `size` | `"default" \| "sm" \| "lg"` | `"default"` | 大きさ。 |
|
|
18
|
+
|
|
19
|
+
アイコンだけの場合は `aria-label` を必ず付けてください。
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Tooltip
|
|
2
|
+
|
|
3
|
+
> ホバーで出る短い説明。
|
|
4
|
+
|
|
5
|
+
ホバーやフォーカスで出る短い説明です。中に操作を置きたくなったら
|
|
6
|
+
[`Popover`](ui/popover) の出番です。
|
|
7
|
+
|
|
8
|
+
```tsx
|
|
9
|
+
import { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from "@squadbase/vantage/ui";
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## パーツ
|
|
13
|
+
|
|
14
|
+
| パーツ | 役割 |
|
|
15
|
+
| --- | --- |
|
|
16
|
+
| `TooltipProvider` | 遅延の共有設定。`delay`(既定 `0`、ミリ秒) |
|
|
17
|
+
| `Tooltip` | 1 つ分の状態 |
|
|
18
|
+
| `TooltipTrigger` | きっかけ。`render` で任意の要素にする |
|
|
19
|
+
| `TooltipContent` | 中身。`side`(既定 `top`)/ `align` / `sideOffset` |
|
|
20
|
+
|
|
21
|
+
> [!NOTE]
|
|
22
|
+
> ツールチップはタッチ環境では出ません。**必要な情報をツールチップだけに置かないでください**。
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# useIsMobile()
|
|
2
|
+
|
|
3
|
+
> 画面幅が狭いかどうかを返すフック。
|
|
4
|
+
|
|
5
|
+
ビューポートが狭い(768px 未満)かどうかを返すフックです。[`Sidebar`](ui/sidebar) が
|
|
6
|
+
モバイルでシートに切り替わる判定にも使っています。
|
|
7
|
+
|
|
8
|
+
```tsx
|
|
9
|
+
import { useIsMobile } from "@squadbase/vantage/ui";
|
|
10
|
+
|
|
11
|
+
export default function Overview() {
|
|
12
|
+
const isMobile = useIsMobile();
|
|
13
|
+
return <EChart option={option} height={isMobile ? 200 : 360} />;
|
|
14
|
+
}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
`matchMedia` を購読しているので、幅を変えると再描画されます。初回描画では `false` から始まる点に
|
|
18
|
+
注意してください(レイアウトの分岐は、可能なら CSS のブレークポイントで書く方が確実です)。
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# UI とテーマ
|
|
2
|
+
|
|
3
|
+
> 組み込み UI キットを import する。styles.css でテーマトークンを上書きする。add でソースをコピーする。
|
|
4
|
+
|
|
5
|
+
Vantage は **shadcn/ui**(Base UI 版)と、Tailwind v4 ベースのテーマを同梱しています。設定不要で
|
|
6
|
+
すぐ使えます。
|
|
7
|
+
|
|
8
|
+
## UI キットを使う
|
|
9
|
+
|
|
10
|
+
入り口は 2 つです。shadcn/ui のプリミティブは `@squadbase/vantage/ui`、それらを組み上げた
|
|
11
|
+
ダッシュボード部品は `@squadbase/vantage/components` から import します。
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
import { Button } from "@squadbase/vantage/ui";
|
|
15
|
+
import { DashboardCardPreset, MetricValue } from "@squadbase/vantage/components";
|
|
16
|
+
|
|
17
|
+
export default function Overview() {
|
|
18
|
+
return (
|
|
19
|
+
<div className="grid gap-4 p-6 md:grid-cols-3">
|
|
20
|
+
<DashboardCardPreset title="売上">
|
|
21
|
+
<MetricValue className="my-0">¥1,240,000</MetricValue>
|
|
22
|
+
</DashboardCardPreset>
|
|
23
|
+
<DashboardCardPreset title="新規顧客">
|
|
24
|
+
<MetricValue className="my-0">128</MetricValue>
|
|
25
|
+
</DashboardCardPreset>
|
|
26
|
+
<DashboardCardPreset title="解約率">
|
|
27
|
+
<MetricValue className="my-0">2.1%</MetricValue>
|
|
28
|
+
</DashboardCardPreset>
|
|
29
|
+
</div>
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
`/ui` にあるもの(抜粋): `Button`、`Card`、`Table` プリミティブ、`Tabs`、`Input` / `Select` /
|
|
35
|
+
`Checkbox` / `Switch` / `Slider`、`Calendar`、`Dialog` / `Sheet` / `Popover` / `Tooltip` /
|
|
36
|
+
`DropdownMenu`、`Sidebar`、`Alert` / `Skeleton` / `Spinner`、`Loading` / `Empty` / `ErrorState`。
|
|
37
|
+
|
|
38
|
+
`/components` にあるもの(抜粋): `PageShell`、`AppShell`、`DashboardCard`、`DataTable`、
|
|
39
|
+
`EChart`、`FunnelSteps`、`FilterBar`、`DateRangePicker`、`MetricValue`、`TrendIndicator`。
|
|
40
|
+
|
|
41
|
+
各コンポーネントの props と使い方は [コンポーネント](components) タブにまとめてあります。
|
|
42
|
+
|
|
43
|
+
## Tailwind はそのまま使える
|
|
44
|
+
|
|
45
|
+
`className` に Tailwind ユーティリティを書くだけで効きます。`tailwind.config` も `postcss.config`
|
|
46
|
+
も書きません(書くと禁止ファイルとしてエラーになります)。クラス結合には `cn()` が使えます。
|
|
47
|
+
|
|
48
|
+
```tsx
|
|
49
|
+
import { cn } from "@squadbase/vantage/ui";
|
|
50
|
+
|
|
51
|
+
<div className={cn("p-4", isActive && "bg-accent")} />;
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## テーマトークンを上書きする
|
|
55
|
+
|
|
56
|
+
色や角丸などのデザイントークンは CSS 変数です。上書きしたいときは、プロジェクトルートに
|
|
57
|
+
`styles.css` を置き、**CSS 変数だけ**を上書きします。このファイルはテーマの後に自動 import されます。
|
|
58
|
+
|
|
59
|
+
```css
|
|
60
|
+
/* styles.css — CSS 変数の上書きのみ */
|
|
61
|
+
:root {
|
|
62
|
+
--primary: oklch(0.55 0.22 265);
|
|
63
|
+
}
|
|
64
|
+
.dark,
|
|
65
|
+
[data-theme="dark"] {
|
|
66
|
+
--primary: oklch(0.72 0.19 265);
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
> [!WARNING]
|
|
71
|
+
> `styles.css` で許されるのは **CSS 変数(テーマトークン)の上書き**です。`tailwind.config` の
|
|
72
|
+
> 持ち込みはできません(禁止ファイル)。
|
|
73
|
+
|
|
74
|
+
トークンは shadcn/ui の neutral パレット(oklch)に、チャート用の `--chart-1` 〜 `--chart-5` と
|
|
75
|
+
サイドバー用の `--sidebar-*` を足したものです。`--chart-*` を変えると
|
|
76
|
+
[`EChart`](parts/echart) の配色も一緒に変わります。チャートは CSS 変数を実際に読み取って
|
|
77
|
+
テーマを組み立てるためです。
|
|
78
|
+
|
|
79
|
+
## ソースを編集したいとき: `vantage add`
|
|
80
|
+
|
|
81
|
+
コンポーネントの中身を自分のものにしたいときは、編集可能なソースを `components/` にコピーします。
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
vantage add ui data-table # 編集可能な DataTable をコピー
|
|
85
|
+
vantage add block sales-overview
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
> [!NOTE]
|
|
89
|
+
> 現行プロトタイプで `vantage add` がコピーできるのは `data-table`(ui)と `sales-overview`(block)
|
|
90
|
+
> のみです。その他の UI コンポーネントは import 専用です。
|
|
91
|
+
|
|
92
|
+
## 次に読む
|
|
93
|
+
|
|
94
|
+
- [コンポーネント](components) — 全コンポーネントの props リファレンス
|
|
95
|
+
- [CLI リファレンス](cli-reference) — 全コマンド
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@squadbase/vantage",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Data dashboard framework for Squadbase Editor. Vite-powered, config-free, one-file first.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -50,6 +50,14 @@
|
|
|
50
50
|
"types": "./dist/ui/index.d.ts",
|
|
51
51
|
"default": "./dist/ui/index.js"
|
|
52
52
|
},
|
|
53
|
+
"./components": {
|
|
54
|
+
"types": "./dist/components/index.d.ts",
|
|
55
|
+
"default": "./dist/components/index.js"
|
|
56
|
+
},
|
|
57
|
+
"./markdown": {
|
|
58
|
+
"types": "./dist/markdown/index.d.ts",
|
|
59
|
+
"default": "./dist/markdown/index.js"
|
|
60
|
+
},
|
|
53
61
|
"./server": {
|
|
54
62
|
"types": "./dist/server/index.d.ts",
|
|
55
63
|
"default": "./dist/server/index.js"
|
|
@@ -71,25 +79,42 @@
|
|
|
71
79
|
},
|
|
72
80
|
"files": [
|
|
73
81
|
"dist",
|
|
82
|
+
"docs",
|
|
74
83
|
"theme.css",
|
|
75
|
-
"registry"
|
|
84
|
+
"registry",
|
|
85
|
+
"skills",
|
|
86
|
+
"templates"
|
|
76
87
|
],
|
|
77
88
|
"scripts": {
|
|
78
|
-
"build": "tsup",
|
|
89
|
+
"build": "node scripts/build-docs.mjs && tsup",
|
|
90
|
+
"build:docs": "node scripts/build-docs.mjs",
|
|
79
91
|
"dev": "tsup --watch",
|
|
80
92
|
"typecheck": "tsc --noEmit",
|
|
81
|
-
"prepublishOnly": "tsup"
|
|
93
|
+
"prepublishOnly": "node scripts/build-docs.mjs && tsup"
|
|
82
94
|
},
|
|
83
95
|
"dependencies": {
|
|
96
|
+
"@base-ui/react": "^1.6.0",
|
|
84
97
|
"@hono/node-server": "^2.0.8",
|
|
98
|
+
"@streamdown/code": "^1.1.1",
|
|
85
99
|
"@tailwindcss/vite": "^4.3.2",
|
|
86
100
|
"@tanstack/react-query": "^5.101.2",
|
|
87
101
|
"@tanstack/react-router": "^1.170.17",
|
|
102
|
+
"@tanstack/react-table": "^8.21.3",
|
|
88
103
|
"@vitejs/plugin-react": "^6.0.3",
|
|
104
|
+
"class-variance-authority": "^0.7.1",
|
|
105
|
+
"clsx": "^2.1.1",
|
|
106
|
+
"cmdk": "^1.1.1",
|
|
107
|
+
"date-fns": "^4.1.0",
|
|
108
|
+
"echarts": "^6.0.0",
|
|
89
109
|
"esbuild": "^0.28.1",
|
|
90
110
|
"hono": "^4.12.30",
|
|
111
|
+
"lucide-react": "^0.468.0",
|
|
91
112
|
"picocolors": "^1.1.1",
|
|
113
|
+
"react-day-picker": "^10.0.1",
|
|
114
|
+
"streamdown": "^2.5.0",
|
|
115
|
+
"tailwind-merge": "^3.0.0",
|
|
92
116
|
"tailwindcss": "^4.3.2",
|
|
117
|
+
"tw-animate-css": "^1.0.0",
|
|
93
118
|
"vite": "^8.1.4"
|
|
94
119
|
},
|
|
95
120
|
"peerDependencies": {
|