@squadbase/vantage 0.6.2-dev1.9d91dda → 0.6.2-dev1.ac99e02
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/dist/add-4GHF2TX2.js +6 -0
- package/dist/add-4GHF2TX2.js.map +1 -0
- package/dist/{build-TVKFIVFQ.js → build-MFWRPYKW.js} +7 -7
- package/dist/{build-TVKFIVFQ.js.map → build-MFWRPYKW.js.map} +1 -1
- package/dist/{check-3KHZXZMQ.js → check-ZBIH422T.js} +5 -5
- package/dist/{check-3KHZXZMQ.js.map → check-ZBIH422T.js.map} +1 -1
- package/dist/{chunk-P7W4LR3Z.js → chunk-7DZGJQ3P.js} +3 -3
- package/dist/{chunk-P7W4LR3Z.js.map → chunk-7DZGJQ3P.js.map} +1 -1
- package/dist/{chunk-U2M6HGKQ.js → chunk-AABMKHEU.js} +4 -4
- package/dist/{chunk-U2M6HGKQ.js.map → chunk-AABMKHEU.js.map} +1 -1
- package/dist/{chunk-NKFBFDRZ.js → chunk-AG6RZ2RR.js} +981 -14
- package/dist/chunk-AG6RZ2RR.js.map +1 -0
- package/dist/{chunk-QI3XQKHS.js → chunk-GNXCX4WE.js} +10 -3
- package/dist/chunk-GNXCX4WE.js.map +1 -0
- package/dist/chunk-IBGOCWJB.js +1716 -0
- package/dist/chunk-IBGOCWJB.js.map +1 -0
- package/dist/{chunk-RPZAALCX.js → chunk-OB6UBJXF.js} +153 -153
- package/dist/{chunk-RPZAALCX.js.map → chunk-OB6UBJXF.js.map} +1 -1
- package/dist/{chunk-LMUACBMA.js → chunk-QEWCYW3I.js} +43 -8
- package/dist/chunk-QEWCYW3I.js.map +1 -0
- package/dist/{chunk-ZVANIULZ.js → chunk-RNTDBX6S.js} +4 -4
- package/dist/{chunk-ZVANIULZ.js.map → chunk-RNTDBX6S.js.map} +1 -1
- package/dist/{chunk-PVTHHV7X.js → chunk-V3LF7BE7.js} +27 -5
- package/dist/chunk-V3LF7BE7.js.map +1 -0
- package/dist/{chunk-DTDVSFRY.js → chunk-XQUSGIDG.js} +17 -3
- package/dist/chunk-XQUSGIDG.js.map +1 -0
- package/dist/cli.js +12 -11
- package/dist/cli.js.map +1 -1
- package/dist/client/index.d.ts +32 -3
- package/dist/client/index.js +205 -12
- package/dist/client/index.js.map +1 -1
- package/dist/components/index.d.ts +216 -1
- package/dist/components/index.js +2 -2
- package/dist/{dev-GDKATCC7.js → dev-DCTOHQ6W.js} +8 -8
- package/dist/dev-DCTOHQ6W.js.map +1 -0
- package/dist/{docs-EJJ3BECT.js → docs-JVP4RPKT.js} +3 -3
- package/dist/{docs-EJJ3BECT.js.map → docs-JVP4RPKT.js.map} +1 -1
- package/dist/{doctor-WQXPXP6K.js → doctor-5E2VEZPK.js} +5 -5
- package/dist/{doctor-WQXPXP6K.js.map → doctor-5E2VEZPK.js.map} +1 -1
- package/dist/{preview-OGMCNQUO.js → preview-T6CLSQVX.js} +3 -3
- package/dist/{preview-OGMCNQUO.js.map → preview-T6CLSQVX.js.map} +1 -1
- package/dist/query/index.d.ts +0 -11
- package/dist/query/index.js +2 -2
- package/dist/{routes-MWBWWOJ2.js → routes-3SGAFDMC.js} +4 -4
- package/dist/{routes-MWBWWOJ2.js.map → routes-3SGAFDMC.js.map} +1 -1
- package/dist/{search-6Y422SV6.js → search-5LC4XPB5.js} +3 -3
- package/dist/{search-6Y422SV6.js.map → search-5LC4XPB5.js.map} +1 -1
- package/dist/table/index.js +7 -6
- package/dist/table/index.js.map +1 -1
- package/dist/ui/index.d.ts +140 -10
- package/dist/ui/index.js +1405 -63
- package/dist/ui/index.js.map +1 -1
- package/dist/{upgrade-HCANX4GQ.js → upgrade-DBBE6GIR.js} +6 -6
- package/dist/{upgrade-HCANX4GQ.js.map → upgrade-DBBE6GIR.js.map} +1 -1
- package/dist/vite/index.d.ts +10 -0
- package/dist/vite/index.js +3 -3
- package/docs/index.json +291 -61
- package/docs/ja/changelog.md +26 -0
- package/docs/ja/components.md +33 -89
- package/docs/ja/page-types/csv.md +83 -0
- package/docs/ja/page-types/doc.md +83 -0
- package/docs/ja/page-types/excel.md +82 -0
- package/docs/ja/page-types/slide.md +132 -0
- package/docs/ja/page-types.md +47 -0
- package/docs/ja/parts/area-chart.md +61 -0
- package/docs/ja/parts/bar-chart.md +69 -0
- package/docs/ja/parts/bar-list.md +35 -0
- package/docs/ja/parts/category-bar.md +36 -0
- package/docs/ja/parts/donut-chart.md +47 -0
- package/docs/ja/parts/echart.md +3 -0
- package/docs/ja/parts/line-chart.md +58 -0
- package/docs/ja/parts/progress-circle.md +34 -0
- package/docs/ja/parts/sparkline.md +1 -1
- package/docs/ja/parts/tracker.md +32 -0
- package/docs/ja/routing.md +8 -86
- package/docs/ja/ui/alert-dialog.md +41 -0
- package/docs/ja/ui/avatar.md +31 -0
- package/docs/ja/ui/combobox.md +74 -0
- package/docs/ja/ui/drawer.md +41 -0
- package/docs/ja/ui/field.md +42 -0
- package/docs/ja/ui/hover-card.md +21 -0
- package/docs/ja/ui/kbd.md +16 -0
- package/docs/ja/ui/pagination.md +36 -0
- package/docs/ja/ui/radio-group.md +21 -0
- package/docs/ja/ui/toast.md +46 -0
- package/docs/ja/ui-and-theming.md +14 -7
- package/package.json +21 -13
- package/registry/ui/accordion.tsx +74 -0
- package/registry/ui/alert-dialog.tsx +189 -0
- package/registry/ui/alert.tsx +78 -0
- package/registry/ui/app-shell.tsx +281 -0
- package/registry/ui/area-chart.tsx +1015 -0
- package/registry/ui/avatar.tsx +110 -0
- package/registry/ui/badge.tsx +54 -0
- package/registry/ui/bar-chart.tsx +1013 -0
- package/registry/ui/bar-list.tsx +302 -0
- package/registry/ui/breadcrumb.tsx +126 -0
- package/registry/ui/button.tsx +60 -0
- package/registry/ui/calendar.tsx +221 -0
- package/registry/ui/card.tsx +105 -0
- package/registry/ui/category-bar.tsx +281 -0
- package/registry/ui/checkbox.tsx +28 -0
- package/registry/ui/collapsible.tsx +21 -0
- package/registry/ui/combobox.tsx +310 -0
- package/registry/ui/command.tsx +196 -0
- package/registry/ui/dashboard-card.tsx +174 -0
- package/registry/ui/data-table.tsx +16 -91
- package/registry/ui/date-range-picker.tsx +209 -0
- package/registry/ui/dialog.tsx +159 -0
- package/registry/ui/donut-chart.tsx +1004 -0
- package/registry/ui/drawer.tsx +229 -0
- package/registry/ui/dropdown-menu.tsx +272 -0
- package/registry/ui/echart.tsx +486 -0
- package/registry/ui/field.tsx +240 -0
- package/registry/ui/filter-bar.tsx +365 -0
- package/registry/ui/funnel-steps.tsx +274 -0
- package/registry/ui/hover-card.tsx +52 -0
- package/registry/ui/input-group.tsx +158 -0
- package/registry/ui/input.tsx +22 -0
- package/registry/ui/kbd.tsx +28 -0
- package/registry/ui/label.tsx +20 -0
- package/registry/ui/line-chart.tsx +1007 -0
- package/registry/ui/metric-value.tsx +54 -0
- package/registry/ui/multi-select.tsx +226 -0
- package/registry/ui/page-shell.tsx +227 -0
- package/registry/ui/pagination.tsx +138 -0
- package/registry/ui/placeholder.tsx +30 -0
- package/registry/ui/popover.tsx +90 -0
- package/registry/ui/progress-circle.tsx +272 -0
- package/registry/ui/progress.tsx +83 -0
- package/registry/ui/radio-group.tsx +39 -0
- package/registry/ui/scroll-area.tsx +55 -0
- package/registry/ui/searchable-select.tsx +209 -0
- package/registry/ui/section-header.tsx +41 -0
- package/registry/ui/segmented-control.tsx +71 -0
- package/registry/ui/select.tsx +253 -0
- package/registry/ui/separator.tsx +25 -0
- package/registry/ui/sheet.tsx +137 -0
- package/registry/ui/sidebar.tsx +723 -0
- package/registry/ui/skeleton.tsx +15 -0
- package/registry/ui/slider.tsx +54 -0
- package/registry/ui/sparkline.tsx +155 -0
- package/registry/ui/spinner.tsx +12 -0
- package/registry/ui/states.tsx +61 -0
- package/registry/ui/status-badge.tsx +79 -0
- package/registry/ui/switch.tsx +32 -0
- package/registry/ui/table.tsx +116 -0
- package/registry/ui/tabs.tsx +82 -0
- package/registry/ui/textarea.tsx +20 -0
- package/registry/ui/toast.tsx +250 -0
- package/registry/ui/toggle-group.tsx +89 -0
- package/registry/ui/toggle.tsx +45 -0
- package/registry/ui/tooltip.tsx +66 -0
- package/registry/ui/tracker.tsx +236 -0
- package/registry/ui/trend-indicator.tsx +62 -0
- package/skills/vantage-add-feature/SKILL.md +9 -7
- package/skills/vantage-pitfalls/SKILL.md +5 -1
- package/templates/AGENTS.md +10 -1
- package/templates/agents/csv.md +2 -1
- package/templates/agents/doc.md +4 -3
- package/templates/agents/page.md +22 -8
- package/templates/agents/xlsx.md +2 -1
- package/dist/add-DY4AXANK.js +0 -6
- package/dist/add-DY4AXANK.js.map +0 -1
- package/dist/chunk-DTDVSFRY.js.map +0 -1
- package/dist/chunk-LMUACBMA.js.map +0 -1
- package/dist/chunk-NKFBFDRZ.js.map +0 -1
- package/dist/chunk-PVTHHV7X.js.map +0 -1
- package/dist/chunk-QI3XQKHS.js.map +0 -1
- package/dist/chunk-VA776YE5.js +0 -316
- package/dist/chunk-VA776YE5.js.map +0 -1
- package/dist/dev-GDKATCC7.js.map +0 -1
package/docs/ja/changelog.md
CHANGED
|
@@ -20,6 +20,32 @@ Vantage のリリースごとの変更点です。新しいものが上に来ま
|
|
|
20
20
|
そのままでは届きませんでした。`--allowed-hosts` は環境変数 **`VANTAGE_ALLOWED_HOSTS`** でも
|
|
21
21
|
渡せます(フラグが優先)。どちらも指定しなければ挙動は従来どおりです。詳細は
|
|
22
22
|
[CLI リファレンス](cli-reference)を参照してください。
|
|
23
|
+
- **型付きチャート 8 種**を `@squadbase/vantage/components` に追加しました。`LineChart` /
|
|
24
|
+
`AreaChart` / `BarChart` / `DonutChart`(ECharts で描画)は `data`・`index`・`categories` を
|
|
25
|
+
渡すだけで描け、`EChartsOption` を書く必要がありません。`BarList` / `CategoryBar` /
|
|
26
|
+
`ProgressCircle` / `Tracker` は SVG と Tailwind で描く軽い部品です。色は既定でテーマの
|
|
27
|
+
`--chart-1..5` に追従し、指定するときはトークン名(`"chart-1"`〜`"chart-5"`)か CSS 色を渡します。
|
|
28
|
+
`EChart` は型付きチャートで表せない図のための逃げ道として残ります。
|
|
29
|
+
- **UI プリミティブ 10 種**を `@squadbase/vantage/ui` に追加しました: `Avatar`・`Pagination`・
|
|
30
|
+
`RadioGroup`・`AlertDialog`・`Drawer`・`Toast`(`<Toaster>` + `toast.add()`)・`Field`・
|
|
31
|
+
`Combobox`・`HoverCard`・`Kbd`。
|
|
32
|
+
- **[コンポーネント](components)に一覧ギャラリー**を足しました。カテゴリで絞り込め、各部品の
|
|
33
|
+
`vantage add ui` コマンドをコピーできます。
|
|
34
|
+
- **[ページの種類](page-types)**のガイドを足しました(`.csv` / `.xlsx` / `.slide.tsx` /
|
|
35
|
+
`.doc.tsx` の書き方と、ページにならないファイル)。
|
|
36
|
+
|
|
37
|
+
### 変更
|
|
38
|
+
|
|
39
|
+
- **`vantage add ui <name>` で `/ui` と `/components` の部品をすべて取り出せるようになりました。**
|
|
40
|
+
これまでコピーできたのは `data-table` だけでした。registry は `src/` から生成するようになり、
|
|
41
|
+
コピーの中の import は公開サブパスに書き換わっています(→ [UI とテーマ](ui-and-theming))。
|
|
42
|
+
|
|
43
|
+
### 修正
|
|
44
|
+
|
|
45
|
+
- **`.xlsx` のページで日付が 1 日ずれて表示されなくなりました。** Excel の日付はタイムゾーンを
|
|
46
|
+
持たないのに、ブラウザのタイムゾーンで表示していたため、UTC より西(アメリカなど)では
|
|
47
|
+
`2026-06-02` が `6/1` と前日に、時刻付きのセルは UTC より東(日本など)でも夜の時刻が翌日に
|
|
48
|
+
ずれていました。いまはどのタイムゾーンでもファイルに書かれた日付・時刻のまま表示します。
|
|
23
49
|
|
|
24
50
|
## v0.6.2
|
|
25
51
|
|
package/docs/ja/components.md
CHANGED
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
> Vantage に同梱される shadcn/ui (Base UI) キットと、ダッシュボード用の複合コンポーネントのリファレンス。
|
|
4
4
|
|
|
5
5
|
Vantage は **shadcn/ui** をそのまま同梱しています。インストールもコピーも不要で、import するだけで
|
|
6
|
-
|
|
6
|
+
使えます。入り口は 3 つのサブパスで、**サイドバーもこの 3 つで区切ってあります**。
|
|
7
7
|
|
|
8
|
-
| サブパス | 中身 |
|
|
9
|
-
| --- | --- |
|
|
10
|
-
| [`@squadbase/vantage/ui`](ui/button) | shadcn/ui のプリミティブ(Base UI 版)と、`cn()` などのユーティリティ |
|
|
11
|
-
| [`@squadbase/vantage/components`](parts/page-shell) | それらを組み上げたダッシュボード部品 |
|
|
12
|
-
| [`@squadbase/vantage/markdown`](markdown/markdown-renderer) | Markdown の描画だけ(重いので分離) |
|
|
8
|
+
| サブパス | 中身 |
|
|
9
|
+
| --- | --- |
|
|
10
|
+
| [`@squadbase/vantage/ui`](ui/button) | shadcn/ui のプリミティブ(Base UI 版)と、`cn()` などのユーティリティ |
|
|
11
|
+
| [`@squadbase/vantage/components`](parts/page-shell) | それらを組み上げたダッシュボード部品 |
|
|
12
|
+
| [`@squadbase/vantage/markdown`](markdown/markdown-renderer) | Markdown の描画だけ(重いので分離) |
|
|
13
13
|
|
|
14
14
|
```tsx
|
|
15
15
|
import { Button, Card, Badge } from "@squadbase/vantage/ui";
|
|
@@ -17,9 +17,27 @@ import { PageShell, DashboardCardPreset, EChart } from "@squadbase/vantage/compo
|
|
|
17
17
|
import { MarkdownRenderer } from "@squadbase/vantage/markdown";
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
+
## 一覧
|
|
21
|
+
|
|
22
|
+
用途で絞り込めます。カードを開くと、動くプレビュー・import 文・props が見られます。
|
|
23
|
+
|
|
24
|
+
## どちらを使うか
|
|
25
|
+
|
|
26
|
+
似た役割のものが並んでいる組み合わせです。迷ったら左の列の条件で選んでください。
|
|
27
|
+
|
|
28
|
+
| 迷いやすい組み合わせ | 選び方 |
|
|
29
|
+
| --- | --- |
|
|
30
|
+
| [`Badge`](ui/badge) / [`StatusBadge`](parts/status-badge) | 件数やタグなど**ただのラベル**は `Badge`。`active` / `failed` のような**レコードの状態**を色付きドットで示すなら `StatusBadge`(色は状態名から自動で決まる)。 |
|
|
31
|
+
| [`ToggleGroup`](ui/toggle-group) / [`SegmentedControl`](parts/segmented-control) | 表示期間やビューの切り替えのような**単一選択**は `SegmentedControl`(値は `string`)。複数を同時に押せる**トグルの束**が要るときだけ `ToggleGroup`(値は常に配列)。 |
|
|
32
|
+
| [`Select`](ui/select) / [`SearchableSelect`](parts/searchable-select) / [`MultiSelect`](parts/multi-select) / [`FilterBar`](parts/filter-bar) | 候補が**数個**なら `Select`。**多くて探したい**なら `SearchableSelect`、**複数選ぶ**なら `MultiSelect`。ページ上部に並ぶ**絞り込み一式**は、個別に置かず `FilterBar`(`FilterBarSelect` / `FilterBarMultiSelect`)でまとめて 1 つの値として扱う。 |
|
|
33
|
+
| [`Sparkline`](parts/sparkline) / [`EChart`](parts/echart) | 表のセルや KPI タイルの隅に置く、**軸も凡例もない小さな推移**は `Sparkline`。軸・ツールチップ・凡例のある**本格的なグラフ**は `EChart`。 |
|
|
34
|
+
| [`Skeleton`](ui/skeleton) / [`DashboardCardSkeleton`](parts/dashboard-card) / [`Placeholder`](parts/placeholder) | **読み込み中**の任意の形は `Skeleton`、ダッシュボードのタイル 1 枚分なら `DashboardCardSkeleton`。`Placeholder` は読み込み中ではなく、**中身が仮データであること**を示す目印。 |
|
|
35
|
+
| [`Loading`](ui/loading) / [`Empty`](ui/empty) / [`ErrorState`](ui/error-state) | データ取得の 3 状態に 1 つずつ対応する。**取得中**は `Loading`、**0 件**は `Empty`、**失敗**は `ErrorState`(`action` に再試行ボタンを置ける)。 |
|
|
36
|
+
|
|
20
37
|
> [!NOTE]
|
|
21
38
|
> UI キットは**パッケージから import して使う**のが基本です(コピーしません)。中身を書き換えたい
|
|
22
|
-
> ときだけ [`vantage add`](cli-reference)
|
|
39
|
+
> ときだけ [`vantage add ui`](cli-reference) で編集可能なソースを取り出します。各コンポーネントの
|
|
40
|
+
> ページ冒頭に、import 文と取り出しコマンドをコピーできる行があります。
|
|
23
41
|
|
|
24
42
|
## Base UI ベースであること
|
|
25
43
|
|
|
@@ -53,87 +71,14 @@ Vantage の `theme.css` は両方の綴りを受ける custom variant を定義
|
|
|
53
71
|
|
|
54
72
|
shadcn/ui のプリミティブです。名前も props も shadcn/ui のものと同じなので、
|
|
55
73
|
[shadcn/ui のドキュメント](https://ui.shadcn.com/docs/components) もそのまま参考になります。
|
|
56
|
-
サイドバーはアルファベット順ですが、ここでは用途で並べています。
|
|
57
|
-
|
|
58
|
-
### フォームと入力
|
|
59
|
-
|
|
60
|
-
[`Button`](ui/button) ·
|
|
61
|
-
[`Input`](ui/input) ·
|
|
62
|
-
[`InputGroup`](ui/input-group) ·
|
|
63
|
-
[`Textarea`](ui/textarea) ·
|
|
64
|
-
[`Label`](ui/label) ·
|
|
65
|
-
[`Select`](ui/select) ·
|
|
66
|
-
[`Checkbox`](ui/checkbox) ·
|
|
67
|
-
[`Switch`](ui/switch) ·
|
|
68
|
-
[`Slider`](ui/slider) ·
|
|
69
|
-
[`Toggle`](ui/toggle) ·
|
|
70
|
-
[`ToggleGroup`](ui/toggle-group) ·
|
|
71
|
-
[`Calendar`](ui/calendar) ·
|
|
72
|
-
[`Command`](ui/command)
|
|
73
|
-
|
|
74
|
-
### レイアウトとナビゲーション
|
|
75
|
-
|
|
76
|
-
[`Card`](ui/card) ·
|
|
77
|
-
[`Tabs`](ui/tabs) ·
|
|
78
|
-
[`Separator`](ui/separator) ·
|
|
79
|
-
[`ScrollArea`](ui/scroll-area) ·
|
|
80
|
-
[`Sidebar`](ui/sidebar) ·
|
|
81
|
-
[`Breadcrumb`](ui/breadcrumb) ·
|
|
82
|
-
[`Accordion`](ui/accordion) ·
|
|
83
|
-
[`Collapsible`](ui/collapsible)
|
|
84
|
-
|
|
85
|
-
### データ表示
|
|
86
|
-
|
|
87
|
-
[`Table`](ui/table) ·
|
|
88
|
-
[`Badge`](ui/badge) ·
|
|
89
|
-
[`Progress`](ui/progress)
|
|
90
|
-
|
|
91
|
-
### オーバーレイ
|
|
92
|
-
|
|
93
|
-
[`Dialog`](ui/dialog) ·
|
|
94
|
-
[`Sheet`](ui/sheet) ·
|
|
95
|
-
[`Popover`](ui/popover) ·
|
|
96
|
-
[`Tooltip`](ui/tooltip) ·
|
|
97
|
-
[`DropdownMenu`](ui/dropdown-menu)
|
|
98
|
-
|
|
99
|
-
### 状態表示
|
|
100
|
-
|
|
101
|
-
[`Alert`](ui/alert) ·
|
|
102
|
-
[`Skeleton`](ui/skeleton) ·
|
|
103
|
-
[`Spinner`](ui/spinner) ·
|
|
104
|
-
[`Loading`](ui/loading) ·
|
|
105
|
-
[`Empty`](ui/empty) ·
|
|
106
|
-
[`ErrorState`](ui/error-state)
|
|
107
|
-
|
|
108
74
|
`Loading` / `Empty` / `ErrorState` の 3 つだけは shadcn/ui にはなく、Vantage が足したものです。
|
|
109
75
|
|
|
110
|
-
### ユーティリティ
|
|
111
|
-
|
|
112
|
-
[`cn()`](ui/cn) · [`useIsMobile()`](ui/use-is-mobile)
|
|
113
|
-
|
|
114
76
|
## `@squadbase/vantage/components`
|
|
115
77
|
|
|
116
|
-
`ui/`
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
| [`PageShell`](parts/page-shell) | ヘッダー帯・サマリー・本文からなるページ枠 |
|
|
121
|
-
| [`AppShell`](parts/app-shell) | ナビゲーション定義を渡すだけのアプリ枠 |
|
|
122
|
-
| [`SectionHeader`](parts/section-header) | セクション見出しとアクション |
|
|
123
|
-
| [`DashboardCard`](parts/dashboard-card) | ダッシュボードのタイル(プリセットとスケルトン付き) |
|
|
124
|
-
| [`DataTable`](parts/data-table) | 並べ替え・検索・ページング・選択を備えた表 |
|
|
125
|
-
| [`EChart`](parts/echart) | Apache ECharts のラッパー |
|
|
126
|
-
| [`FunnelSteps`](parts/funnel-steps) | ファネルの棒表示 |
|
|
127
|
-
| [`Sparkline`](parts/sparkline) | セルやタイルに置くインラインの推移グラフ |
|
|
128
|
-
| [`FilterBar`](parts/filter-bar) | フィルタ一式を 1 つの値で扱う行 |
|
|
129
|
-
| [`DateRangePicker`](parts/date-range-picker) | プリセット付きの期間選択 |
|
|
130
|
-
| [`SegmentedControl`](parts/segmented-control) | 単一選択のセグメント |
|
|
131
|
-
| [`SearchableSelect`](parts/searchable-select) | 検索できる単一選択 |
|
|
132
|
-
| [`MultiSelect`](parts/multi-select) | 検索できる複数選択 |
|
|
133
|
-
| [`MetricValue`](parts/metric-value) | KPI の数値と単位 |
|
|
134
|
-
| [`TrendIndicator`](parts/trend-indicator) | 増減の矢印と変化率 |
|
|
135
|
-
| [`StatusBadge`](parts/status-badge) | ドット付きステータスバッジ |
|
|
136
|
-
| [`Placeholder`](parts/placeholder) | 仮データであることを示すインラインの目印 |
|
|
78
|
+
`ui/` を組み上げた、ダッシュボード向けの複合部品です。ページ枠(`PageShell` / `AppShell`)、
|
|
79
|
+
タイル(`DashboardCard`)、表(`DataTable`)、グラフ(`EChart` / `Sparkline` / `FunnelSteps`)、
|
|
80
|
+
フィルタ(`FilterBar` / `DateRangePicker` など)、KPI 表示(`MetricValue` / `TrendIndicator`)が
|
|
81
|
+
入っています。
|
|
137
82
|
|
|
138
83
|
## `@squadbase/vantage/markdown`
|
|
139
84
|
|
|
@@ -214,16 +159,15 @@ export default function Overview() {
|
|
|
214
159
|
|
|
215
160
|
## ソースを編集したいとき
|
|
216
161
|
|
|
217
|
-
|
|
162
|
+
コンポーネントの中身そのものを変えたい場合は、編集可能なコピーを取り出します。名前は各ページ冒頭の
|
|
163
|
+
「ソースを取り出す」の行に出ているものです。
|
|
218
164
|
|
|
219
165
|
```bash
|
|
220
|
-
vantage add ui data-table # 編集可能な DataTable を components/ へ
|
|
166
|
+
vantage add ui data-table # 編集可能な DataTable を components/ui/ へ
|
|
221
167
|
vantage add block sales-overview
|
|
222
168
|
```
|
|
223
169
|
|
|
224
|
-
|
|
225
|
-
> 現行プロトタイプで `vantage add` がコピーできるのは `data-table`(ui)と `sales-overview`(block)
|
|
226
|
-
> のみです。その他のコンポーネントは import 専用です。
|
|
170
|
+
`cn()` と `useIsMobile()`、`@squadbase/vantage/markdown` は取り出しの対象外で、import 専用です。
|
|
227
171
|
|
|
228
172
|
## このページの読み方
|
|
229
173
|
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# CSV
|
|
2
|
+
|
|
3
|
+
> .csv を置くだけで表として読めるページになる。列の型の推定、ファイル名からのタイトル、25MB / 20 万行の上限。
|
|
4
|
+
|
|
5
|
+
`.csv` を置くだけで、そのファイルは**表として読めるページ**になります(`src/sales-export.csv` →
|
|
6
|
+
`/sales-export`)。tsx は書きません。ダウンロードしなくても、ブラウザでそのまま中身を確かめられます。
|
|
7
|
+
|
|
8
|
+
## 置き方
|
|
9
|
+
|
|
10
|
+
ページ走査のルート(`src/` があればその中)にファイルを置くだけです。
|
|
11
|
+
|
|
12
|
+
| ファイル | ルート | タイトル |
|
|
13
|
+
|---|---|---|
|
|
14
|
+
| `sales-export.csv` | `/sales-export` | Sales Export |
|
|
15
|
+
| `data/june.csv` | `/data/june` | June |
|
|
16
|
+
| `regions/index.csv` | `/regions` | Regions |
|
|
17
|
+
|
|
18
|
+
- **タイトルはファイル名から作られます。** 区切り(`-`・`_`)で単語に分け、先頭を大文字にします。
|
|
19
|
+
`index.csv` はディレクトリ名を使います。データファイルに `definePage` は書けないので、
|
|
20
|
+
名前を変えたいときはファイルをリネームします。
|
|
21
|
+
- 見出しの下には元のファイル名が、右上にはダウンロードボタンが出ます。
|
|
22
|
+
|
|
23
|
+
## できること
|
|
24
|
+
|
|
25
|
+
- **表計算ソフトの見た目で読める。** 列は A / B / C、左に行番号、1 行目はヘッダとして固定され、
|
|
26
|
+
下端に行数と列数が出ます。セルを選んで `Cmd/Ctrl+C` でコピーできます。
|
|
27
|
+
- **列の型を推定。** 先頭 500 行を見て、9 割以上が数値なら数値列(桁区切り・右寄せ)、
|
|
28
|
+
`2026-06-30` の形の日付なら日付列として扱います。
|
|
29
|
+
- **文字コードを自動判定。** UTF-8(BOM あり / なし)で読み、文字化けが多ければ Shift_JIS で
|
|
30
|
+
読み直します。Excel から書き出した日本語の CSV もそのまま置けます。
|
|
31
|
+
- **ダークモードに追従。** 配色はアプリのテーマトークンで塗られます。
|
|
32
|
+
|
|
33
|
+
## 制限
|
|
34
|
+
|
|
35
|
+
- **読み取り専用です。** 編集・並べ替え・絞り込みはできません。それが要るデータは
|
|
36
|
+
`server/api/` から配って [`DataTable`](parts/data-table) で描きます。
|
|
37
|
+
- **25MB を超えるファイルは表示されません。** パースはブラウザで行うためです。そのページには
|
|
38
|
+
エラーとダウンロードボタンが出て、`vantage check` も `FILE_PAGE_TOO_LARGE` で先に警告します。
|
|
39
|
+
- **20 万行を超えると、先頭の 20 万行だけを表示します。** 下端に「First 200,000 of … rows」と
|
|
40
|
+
出るので、残りはダウンロードして見ます。
|
|
41
|
+
- 1 行目は必ずヘッダとして扱われます。空行は読み飛ばされます。
|
|
42
|
+
- **`.tsv` はページになりません**(`UNSUPPORTED_PAGE_FILE` 警告)。`.csv` に変換して置きます
|
|
43
|
+
(ほかの形式は [ページにならないファイル](page-types))。
|
|
44
|
+
- ページにしたくない `.csv` は `_` を前置します(`_sales-export.csv`)。
|
|
45
|
+
|
|
46
|
+
## 自分で描く
|
|
47
|
+
|
|
48
|
+
タイトルや説明を自分で付けたいときは、`_` を前置してページになるのを止め、tsx から
|
|
49
|
+
`FilePageView` で描きます。ファイルの URL は `?url&no-inline` を付けて import します
|
|
50
|
+
(小さいファイルが JS に埋め込まれて、ダウンロードできなくなるのを防ぐためです)。
|
|
51
|
+
|
|
52
|
+
```tsx
|
|
53
|
+
// src/sales.tsx → /sales(src/_sales-export.csv を描く)
|
|
54
|
+
import { definePage } from "@squadbase/vantage";
|
|
55
|
+
import { FilePageView } from "@squadbase/vantage/table";
|
|
56
|
+
import src from "./_sales-export.csv?url&no-inline";
|
|
57
|
+
|
|
58
|
+
export const page = definePage({ title: "売上エクスポート" });
|
|
59
|
+
|
|
60
|
+
export default function Sales() {
|
|
61
|
+
return <FilePageView src={src} kind="csv" fileName="sales-export.csv" title="売上エクスポート" />;
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
ダッシュボードの一部として表だけを埋めたいときは `loadWorkbook` と `TableViewer` を組み合わせます
|
|
66
|
+
([Excel](page-types/excel) の API を参照)。
|
|
67
|
+
|
|
68
|
+
## API
|
|
69
|
+
|
|
70
|
+
```tsx
|
|
71
|
+
import { FilePageView } from "@squadbase/vantage/table";
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### FilePageView
|
|
75
|
+
|
|
76
|
+
ファイルページそのものです。URL を渡すと、取得・パース・表示まで行います。
|
|
77
|
+
|
|
78
|
+
| Prop | Type | Default | 説明 |
|
|
79
|
+
| --- | --- | --- | --- |
|
|
80
|
+
| `src` | `string` | | ファイルの URL。`import src from "./_x.csv?url&no-inline"` で得る。 |
|
|
81
|
+
| `kind` | `"csv" \| "xlsx"` | | ファイルの種類(拡張子からドットを除いたもの)。 |
|
|
82
|
+
| `fileName` | `string` | | 元のファイル名。見出しの下とダウンロード時の名前に使う。 |
|
|
83
|
+
| `title` | `string` | `fileName` | 見出し。 |
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# ドキュメント
|
|
2
|
+
|
|
3
|
+
> <name>.doc.tsx を置くと上から読む文章のページになる。クラス無しで組版され、「PDF として保存」で印刷できる。
|
|
4
|
+
|
|
5
|
+
`<name>.doc.tsx` を置くと、そのページは**ドキュメント**になります(`src/june-summary.doc.tsx` →
|
|
6
|
+
`/june-summary`)。報告書や調査のまとめのように、文章と図表を上から読む形で残したいときに使います。
|
|
7
|
+
|
|
8
|
+
## 置き方
|
|
9
|
+
|
|
10
|
+
中身は `<Document>` を返す普通の React コンポーネントです。中には素の HTML 要素をそのまま書きます。
|
|
11
|
+
|
|
12
|
+
```tsx
|
|
13
|
+
// src/june-summary.doc.tsx → /june-summary
|
|
14
|
+
import { definePage } from "@squadbase/vantage";
|
|
15
|
+
import { Document } from "@squadbase/vantage/doc";
|
|
16
|
+
|
|
17
|
+
export const page = definePage({ title: "6月度サマリー" });
|
|
18
|
+
|
|
19
|
+
export default function JuneSummary() {
|
|
20
|
+
return (
|
|
21
|
+
<Document>
|
|
22
|
+
<h1>6月度サマリー</h1>
|
|
23
|
+
<p>6月の売上は目標を 5% 上回りました。</p>
|
|
24
|
+
<table>…</table>
|
|
25
|
+
</Document>
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## できること
|
|
31
|
+
|
|
32
|
+
- **クラスを書かなくても組版される。** `h1`〜`h4`・`p`・`ul` / `ol`・`table`・`blockquote`・
|
|
33
|
+
`pre` / `code`・`hr`・`a`・`figure` / `figcaption`・`img` に、見出しの大きさ・余白・罫線が当たります。
|
|
34
|
+
要素に Tailwind のクラスを付ければ、そちらが優先されます。
|
|
35
|
+
- **チャートを文中に置ける。** [`EChart`](parts/echart) をそのまま段落の間に置けます。
|
|
36
|
+
- **PDF として保存。** 右下の「PDF として保存」ボタン(ブラウザの言語が日本語以外なら
|
|
37
|
+
「Save as PDF」)でブラウザの印刷ダイアログが開きます。紙に載るのはドキュメントの本文だけで、
|
|
38
|
+
アプリのヘッダーやサイドバーは載りません。
|
|
39
|
+
- **ダークモードでもライトで印刷。** 印刷の間だけライトの配色に切り替え、チャートも描き直してから
|
|
40
|
+
印刷します。終われば元に戻ります。
|
|
41
|
+
- **テーマに追従。** 配色・書体・本文の幅は `--doc-*` トークンで、既定はアプリのトークンを指します
|
|
42
|
+
(一覧は [UI とテーマ](ui-and-theming))。
|
|
43
|
+
|
|
44
|
+
## 制限
|
|
45
|
+
|
|
46
|
+
- **PDF はブラウザの印刷機能で作ります。** Vantage が PDF ファイルを生成するわけではないので、
|
|
47
|
+
改ページの位置や余白はブラウザの印刷設定に従います。
|
|
48
|
+
- 印刷ボタンは消せません。ドキュメントからの出口として、常に右下に出ます。
|
|
49
|
+
- `.doc` を付けられるのはルートになる `.tsx` / `.jsx` だけです
|
|
50
|
+
([ページにならないファイル](page-types))。
|
|
51
|
+
|
|
52
|
+
## API
|
|
53
|
+
|
|
54
|
+
```tsx
|
|
55
|
+
import { Document } from "@squadbase/vantage/doc";
|
|
56
|
+
import type { DocumentTheme } from "@squadbase/vantage/doc";
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Document
|
|
60
|
+
|
|
61
|
+
`<article>` の props(`className`・`style`・`id` など)もそのまま渡せます。
|
|
62
|
+
|
|
63
|
+
| Prop | Type | 説明 |
|
|
64
|
+
| --- | --- | --- |
|
|
65
|
+
| `theme` | `DocumentTheme` | このドキュメントだけ配色・書体を上書きする。省いた項目はアプリのテーマに従う。 |
|
|
66
|
+
|
|
67
|
+
### DocumentTheme
|
|
68
|
+
|
|
69
|
+
どれも CSS の値をそのまま書きます(`"#2563eb"`・`"16px"` など)。
|
|
70
|
+
|
|
71
|
+
| Prop | Type | 説明 |
|
|
72
|
+
| --- | --- | --- |
|
|
73
|
+
| `fg` | `string` | 本文の色。 |
|
|
74
|
+
| `muted` | `string` | 引用・キャプションの色。 |
|
|
75
|
+
| `accent` | `string` | リンクの色。 |
|
|
76
|
+
| `border` | `string` | 罫線の色。 |
|
|
77
|
+
| `subtle` | `string` | インラインコード・コードブロック・表の見出し行の背景。 |
|
|
78
|
+
| `fontBody` | `string` | 本文の書体。 |
|
|
79
|
+
| `fontHeading` | `string` | 見出しの書体。 |
|
|
80
|
+
| `fontMono` | `string` | コードの書体。 |
|
|
81
|
+
| `sizeBody` | `string` | 本文の文字サイズ。 |
|
|
82
|
+
| `lineHeight` | `string` | 本文の行間。 |
|
|
83
|
+
| `maxWidth` | `string` | 本文の幅。 |
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Excel
|
|
2
|
+
|
|
3
|
+
> .xlsx を置くだけで表として読めるページになる。シートの切り替えと元ファイルのダウンロード付き。
|
|
4
|
+
|
|
5
|
+
`.xlsx` を置くだけで、そのブックは**表として読めるページ**になります(`src/data/june.xlsx` →
|
|
6
|
+
`/data/june`)。ビューアは [CSV](page-types/csv) と同じもので、下端のタブでシートを切り替えられます。
|
|
7
|
+
|
|
8
|
+
## 置き方
|
|
9
|
+
|
|
10
|
+
ページ走査のルート(`src/` があればその中)にファイルを置くだけです。タイトルはファイル名から
|
|
11
|
+
作られます(`june.xlsx` → 「June」、`index.xlsx` はディレクトリ名)。名前を変えたいときは
|
|
12
|
+
ファイルをリネームします。
|
|
13
|
+
|
|
14
|
+
## できること
|
|
15
|
+
|
|
16
|
+
- **シートを切り替える。** ブックに 2 枚以上シートがあれば、下端にシート名のタブが並びます。
|
|
17
|
+
- **元ファイルをダウンロードする。** 右上のボタンで、置いた `.xlsx` そのものが落とせます。
|
|
18
|
+
- **値として読める。** 日付のセルは日付として、数値は桁区切りで右寄せに表示されます。
|
|
19
|
+
そのほかの見た目・コピー・型の推定は [CSV](page-types/csv) と同じです。
|
|
20
|
+
|
|
21
|
+
## 制限
|
|
22
|
+
|
|
23
|
+
- **数式・グラフ・セル書式・結合セルは再現されません。** 表示されるのはセルの値だけです
|
|
24
|
+
(数式は計算結果の値)。見た目まで共有したいときはダウンロードしてもらいます。
|
|
25
|
+
- **25MB を超えるブックは表示されず、20 万行を超えるシートは先頭 20 万行だけ**を表示します
|
|
26
|
+
([CSV](page-types/csv) と同じ)。
|
|
27
|
+
- パスワード付きや壊れたブックは、そのページにエラーが出ます。
|
|
28
|
+
- **`.xls`・`.xlsm`・`.xlsb`・`.ods`・`.numbers` はページになりません**(`UNSUPPORTED_PAGE_FILE`
|
|
29
|
+
警告)。Excel で `.xlsx` として保存し直して置きます。
|
|
30
|
+
- ページにしたくない `.xlsx` は `_` を前置します(`_june.xlsx`)。Excel が開いている間にできる
|
|
31
|
+
`~$june.xlsx` は無視されます。
|
|
32
|
+
|
|
33
|
+
## 自分で描く
|
|
34
|
+
|
|
35
|
+
タイトルを付けたいときは、`_` を前置してページになるのを止め、[CSV](page-types/csv) と同じく
|
|
36
|
+
`FilePageView` に `kind="xlsx"` を渡します。
|
|
37
|
+
|
|
38
|
+
ダッシュボードのカードの中に表だけを埋めたいときは、`loadWorkbook` でパースして `TableViewer` で
|
|
39
|
+
描きます。`height` を渡すと、ビューポートの残りを埋めずにその高さに収まります。
|
|
40
|
+
|
|
41
|
+
```tsx
|
|
42
|
+
import { useQuery } from "@squadbase/vantage/query";
|
|
43
|
+
import { TableViewer, loadWorkbook } from "@squadbase/vantage/table";
|
|
44
|
+
import src from "./_june.xlsx?url&no-inline";
|
|
45
|
+
|
|
46
|
+
export function JuneTable() {
|
|
47
|
+
const { data } = useQuery({ queryKey: ["june.xlsx"], queryFn: () => loadWorkbook(src, "xlsx") });
|
|
48
|
+
const sheet = data?.sheets[0];
|
|
49
|
+
return sheet ? <TableViewer sheet={sheet} height={360} /> : null;
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## API
|
|
54
|
+
|
|
55
|
+
```tsx
|
|
56
|
+
import {
|
|
57
|
+
FilePageView, TableViewer, SheetGrid, loadWorkbook, toSheet,
|
|
58
|
+
} from "@squadbase/vantage/table";
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
`FilePageView` の props は [CSV](page-types/csv) を参照してください。
|
|
62
|
+
|
|
63
|
+
### TableViewer
|
|
64
|
+
|
|
65
|
+
1 シートを枠付きで描きます。下端にシートのタブと行数・列数が出ます。
|
|
66
|
+
|
|
67
|
+
| Prop | Type | Default | 説明 |
|
|
68
|
+
| --- | --- | --- | --- |
|
|
69
|
+
| `sheet` | `TableSheet` | | 描くシート。`loadWorkbook` か `toSheet` で作る。 |
|
|
70
|
+
| `sheetNames` | `string[]` | | 全シートの名前。2 つ以上あるとタブが出る。 |
|
|
71
|
+
| `activeSheet` | `number` | `0` | 選ばれているタブの位置。 |
|
|
72
|
+
| `onSheetChange` | `(index: number) => void` | | タブが押されたとき。 |
|
|
73
|
+
| `height` | `number \| string` | | 枠の高さ。省くとビューポートの残りを埋める。 |
|
|
74
|
+
| `className` | `string` | | 枠に足すクラス。 |
|
|
75
|
+
|
|
76
|
+
### 関数
|
|
77
|
+
|
|
78
|
+
| 名前 | 役割 |
|
|
79
|
+
|---|---|
|
|
80
|
+
| `loadWorkbook(src, kind)` | URL のファイルを取得してパースし、`{ sheets: TableSheet[] }` を返す。失敗は `FilePageError` で reject |
|
|
81
|
+
| `toSheet(name, rows)` | 行の配列(1 行目がヘッダ)から `TableSheet` を作る。手元のデータを `TableViewer` で見せたいとき |
|
|
82
|
+
| `SheetGrid` | グリッド本体だけ。高さの決まった親の中に置く |
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# スライド
|
|
2
|
+
|
|
3
|
+
> <name>.slide.tsx を置くとスライドデッキのページになる。1920×1080 のキャンバス、段階表示、トランジション、pptx 書き出し。
|
|
4
|
+
|
|
5
|
+
`<name>.slide.tsx` を置くと、そのページは**スライドデッキ**になります(`src/june.slide.tsx` →
|
|
6
|
+
`/june`)。分析の結論を誰かに伝えるときの形です。下のプレビューはクリックか `→` で送れます。
|
|
7
|
+
|
|
8
|
+
## 置き方
|
|
9
|
+
|
|
10
|
+
中身は `<SlideDeck>` を返す普通の React コンポーネントです。`<Slide>` 1 つが 1 枚になります。
|
|
11
|
+
|
|
12
|
+
```tsx
|
|
13
|
+
// src/june.slide.tsx → /june
|
|
14
|
+
import { definePage } from "@squadbase/vantage";
|
|
15
|
+
import { Slide, SlideDeck, Step, Steps } from "@squadbase/vantage/slide";
|
|
16
|
+
|
|
17
|
+
export const page = definePage({ title: "6月度レビュー", navLabel: "6月度" });
|
|
18
|
+
|
|
19
|
+
export default function Deck() {
|
|
20
|
+
return (
|
|
21
|
+
<SlideDeck>
|
|
22
|
+
<Slide>
|
|
23
|
+
<h1 style={{ fontSize: 96 }}>売上は目標を 5% 上回った</h1>
|
|
24
|
+
</Slide>
|
|
25
|
+
<Slide>
|
|
26
|
+
<Steps>
|
|
27
|
+
<Step><p style={{ fontSize: 48 }}>1. 関東の既存顧客が +8%</p></Step>
|
|
28
|
+
<Step><p style={{ fontSize: 48 }}>2. 中部の新規開拓が立ち上がった</p></Step>
|
|
29
|
+
</Steps>
|
|
30
|
+
</Slide>
|
|
31
|
+
</SlideDeck>
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## できること
|
|
37
|
+
|
|
38
|
+
- **画面サイズに合わせて縮小。** スライドは 1920×1080 の固定キャンバスに px で書き、表示先に
|
|
39
|
+
合わせて拡大縮小されます。ノート PC でもプロジェクターでも同じ見た目です。
|
|
40
|
+
- **キーボードとクリックで送る。** `→` / `Space` / `PageDown` で次へ、`←` / `PageUp` で前へ、
|
|
41
|
+
`Home` / `End` で最初と最後へ。スライドの左右をクリックしても送れます。
|
|
42
|
+
- **段階表示。** `<Steps>` の中の `<Step>` は、次へ進むたびに 1 つずつ現れます。
|
|
43
|
+
- **トランジション。** `<Slide transition={…}>` で入り方を決めます。同じ `id` の
|
|
44
|
+
`<MorphElement>` を前後のスライドに置き `morph: true` にすると、その要素が連続して動きます。
|
|
45
|
+
- **3 つの見え方。** 左にスライド一覧(`L` で開閉)、スライドのみ、全画面(`F`)。一覧の開閉と
|
|
46
|
+
今のページは URL(`?rail=` / `?p=`)に入るので、そのまま共有できます。`Esc` でデッキを抜けます。
|
|
47
|
+
- **PowerPoint に書き出す。** ツールバーのボタンで、全スライドを `.pptx` として保存します。
|
|
48
|
+
- **テーマに追従。** 配色と書体は `--slide-*` トークンで、既定はアプリのトークンを指すので
|
|
49
|
+
ダークモードにも追従します。デッキごとに `theme` で上書きできます。
|
|
50
|
+
|
|
51
|
+
ダッシュボードの中に 16:9 の枠として埋め込むときは `<SlideDeck embedded>` にします
|
|
52
|
+
(既定は画面全体を覆い、アプリのナビはその下に残ります)。
|
|
53
|
+
|
|
54
|
+
## 制限
|
|
55
|
+
|
|
56
|
+
- **pptx は画像で書き出されます。** 受け取り側にフォントが要らず日本語も崩れませんが、
|
|
57
|
+
PowerPoint で文字を検索・編集することはできません。
|
|
58
|
+
- **発表者ノートや発表者用ウィンドウはありません。**
|
|
59
|
+
- **スライドの中で `@squadbase/vantage/ui` を使わないでください。** UI キットはダッシュボード向けの
|
|
60
|
+
rem 単位なので、1920×1080 を縮小すると `text-sm` のボタンは実効 8px ほどになり読めません。
|
|
61
|
+
- iframe の中など、ブラウザが全画面を許さない場所では全画面ボタンが出ません。
|
|
62
|
+
- `.slide` を付けられるのはルートになる `.tsx` / `.jsx` だけです
|
|
63
|
+
([ページにならないファイル](page-types))。
|
|
64
|
+
|
|
65
|
+
キャンバスの縦方向の予算・文字サイズの目安・pptx 書き出しが崩れる条件など、書き方の作法は同梱の
|
|
66
|
+
**`vantage-slide` スキル**にあります([エージェント Skill](agent-skills))。
|
|
67
|
+
|
|
68
|
+
## API
|
|
69
|
+
|
|
70
|
+
```tsx
|
|
71
|
+
import {
|
|
72
|
+
SlideDeck, Slide, Steps, Step, MorphElement,
|
|
73
|
+
useSlideNumber, useIsActiveSlide,
|
|
74
|
+
} from "@squadbase/vantage/slide";
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### SlideDeck
|
|
78
|
+
|
|
79
|
+
デッキの器です。子に `<Slide>` を並べます。
|
|
80
|
+
|
|
81
|
+
| Prop | Type | Default | 説明 |
|
|
82
|
+
| --- | --- | --- | --- |
|
|
83
|
+
| `theme` | `SlideTheme` | | このデッキだけ配色・書体を上書きする。省いた項目はアプリのテーマに従う。 |
|
|
84
|
+
| `embedded` | `boolean` | `false` | 画面全体を覆わず、ページの流れの中に 16:9 で置く。 |
|
|
85
|
+
| `rail` | `boolean` | `!embedded` | スライド一覧を開いた状態で始めるか。読み手は `L` でいつでも切り替えられる。 |
|
|
86
|
+
| `exportName` | `string` | `URL の最後のセグメント` | 書き出す pptx のファイル名(拡張子なし)。 |
|
|
87
|
+
|
|
88
|
+
`SlideTheme` のキー: `bg`・`fg`・`accent`・`muted`・`fontDisplay`・`fontBody`(CSS の値)、
|
|
89
|
+
`sizeHero`・`sizeBody`・`radius`(キャンバス上の px)。
|
|
90
|
+
|
|
91
|
+
### Slide
|
|
92
|
+
|
|
93
|
+
| Prop | Type | 説明 |
|
|
94
|
+
| --- | --- | --- |
|
|
95
|
+
| `transition` | `SlideTransition` | このスライドに入るときの動き。省くと切り替えは一瞬。 |
|
|
96
|
+
|
|
97
|
+
`SlideTransition` は `duration`(ms、必須)・`easing`・`enter` / `exit`(Web Animations の
|
|
98
|
+
`keyframes` を持つ)・`morph`(`true` か `{ duration, easing, delay }`)を持ちます。
|
|
99
|
+
|
|
100
|
+
```tsx
|
|
101
|
+
<Slide
|
|
102
|
+
transition={{
|
|
103
|
+
duration: 500,
|
|
104
|
+
enter: { keyframes: [{ opacity: 0 }, { opacity: 1 }] },
|
|
105
|
+
morph: true,
|
|
106
|
+
}}
|
|
107
|
+
>
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Steps / Step
|
|
111
|
+
|
|
112
|
+
`<Steps>` の直下に置いた `<Step>` が、次へ進むたびに 1 つずつ現れます。前のスライドから戻ってきた
|
|
113
|
+
ときは、すべて出た状態で表示されます。
|
|
114
|
+
|
|
115
|
+
| Prop | Type | Default | 説明 |
|
|
116
|
+
| --- | --- | --- | --- |
|
|
117
|
+
| `duration` | `number` | `180` | `Step` に渡す。フェードインの長さ(ms)。 |
|
|
118
|
+
|
|
119
|
+
### MorphElement
|
|
120
|
+
|
|
121
|
+
| Prop | Type | 説明 |
|
|
122
|
+
| --- | --- | --- |
|
|
123
|
+
| `id` | `string` | 前後のスライドで同じ値を付けた要素どうしが、連続して動く。 |
|
|
124
|
+
| `className` | `string` | 足すクラス。子が 1 つの HTML 要素ならそこへ、それ以外はラッパーの `<div>` へ付く。 |
|
|
125
|
+
| `style` | `CSSProperties` | `className` と同じ要素に足すスタイル。 |
|
|
126
|
+
|
|
127
|
+
### フック
|
|
128
|
+
|
|
129
|
+
| 名前 | 返すもの |
|
|
130
|
+
|---|---|
|
|
131
|
+
| `useSlideNumber()` | `{ current, total }`。ページ番号のフッター用 |
|
|
132
|
+
| `useIsActiveSlide()` | 今見えているスライドかどうか。入場アニメーションを始める合図に使う |
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# ページの種類
|
|
2
|
+
|
|
3
|
+
> 通常ページ・スライド・ドキュメント・CSV・Excel の 5 種類。それぞれの置き方とできること、ページにならないファイル。
|
|
4
|
+
|
|
5
|
+
Vantage のページは **5 種類**あります。どれもファイルを置くだけでページになり、URL の作り方は同じ
|
|
6
|
+
です([ファイルベースルーティング](routing))。違うのは「何が描かれるか」だけです。
|
|
7
|
+
|
|
8
|
+
| 種類 | 置き方 | できること |
|
|
9
|
+
|---|---|---|
|
|
10
|
+
| 通常ページ | `sales.tsx` | ダッシュボード。表・チャート・フィルタを自由に組む |
|
|
11
|
+
| [スライド](page-types/slide) | `june.slide.tsx` | 発表用のスライドデッキ。段階表示・トランジション・pptx 書き出し |
|
|
12
|
+
| [ドキュメント](page-types/doc) | `june-summary.doc.tsx` | 上から読む報告書。クラス無しで組版され、PDF として保存できる |
|
|
13
|
+
| [CSV](page-types/csv) | `sales-export.csv` | ファイルを置くだけで表として読める |
|
|
14
|
+
| [Excel](page-types/excel) | `june.xlsx` | CSV と同じ表ビューアに、シートの切り替えが付く |
|
|
15
|
+
|
|
16
|
+
- **`.slide` / `.doc` と拡張子は URL に出ません。** `june.slide.tsx`・`june.csv`・`june.tsx` は
|
|
17
|
+
どれも `/june` です。同じ URL に 2 つ置くと `vantage check` が `ROUTE_CONFLICT` エラーを出します。
|
|
18
|
+
- **ナビにも同格で並びます。** `vantage routes` と `useRoutes()` には 5 種類が区別なく出て、
|
|
19
|
+
`kind`(`"module"` / `"file"`)と `variant`(`"slide"` / `"doc"`)で見分けられます。
|
|
20
|
+
- 通常ページ・スライド・ドキュメントは React コンポーネントなので
|
|
21
|
+
[`definePage`](pages-and-metadata) が効きます。CSV と Excel はファイル名がタイトルになります。
|
|
22
|
+
|
|
23
|
+
どれにするか迷ったら、**繰り返し見に来る数字はダッシュボード、誰かに伝える結論はスライド、
|
|
24
|
+
残しておく説明はドキュメント、受け取ったデータをそのまま見せたいなら CSV / Excel** です。
|
|
25
|
+
|
|
26
|
+
## ページにならないファイル
|
|
27
|
+
|
|
28
|
+
ページ走査のルート(`src/` があればその中)に置いても、次のファイルはページになりません。
|
|
29
|
+
|
|
30
|
+
| ファイル | どうなるか |
|
|
31
|
+
|---|---|
|
|
32
|
+
| `.xls`・`.xlsm`・`.xlsb`・`.ods`・`.tsv`・`.numbers`・`.parquet` | ルートにならない。`vantage check` が `UNSUPPORTED_PAGE_FILE` 警告を出す |
|
|
33
|
+
| `.md`・`.json`・`.txt` など | 何も言わずに無視される(コードから読む用途があるため) |
|
|
34
|
+
| `_` で始まるファイル(`_draft.tsx`・`_june.xlsx`) | プライベート。`_layout` などの予約名を除き、ルートにならない |
|
|
35
|
+
| `~$june.xlsx` | Excel が開いている間に作るロックファイル。無視される |
|
|
36
|
+
| `components/`・`hooks/`・`lib/` の中のファイル | 走査されない(`server/`・`public/` も同じ) |
|
|
37
|
+
|
|
38
|
+
ビューアの無い表計算ファイルは、404 にすらならず**黙って消えます**。ナビにも `vantage routes` にも
|
|
39
|
+
出ないので、`vantage check` の警告が唯一の手がかりです。`.xlsx` か `.csv` に変換して置き直すか、
|
|
40
|
+
`.tsx` のページから [`TableViewer`](page-types/excel) で描いてください。
|
|
41
|
+
|
|
42
|
+
Markdown(`.md`)はページになりません。Markdown を見せたいときは `.tsx` のページで
|
|
43
|
+
[`MarkdownRenderer`](markdown/markdown-renderer) に文字列を渡します。
|
|
44
|
+
|
|
45
|
+
> [!WARNING]
|
|
46
|
+
> `.slide` / `.doc` を付けられるのは**ルートになるページモジュール(`.tsx` / `.jsx`)だけ**です。
|
|
47
|
+
> `_layout.slide.tsx` や `deck.slide.ts`、`notes.doc.css` は `INVALID_PAGE_VARIANT` エラーになります。
|