@squadbase/vantage 0.6.1 → 0.6.2-dev1.31accb1

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.
Files changed (183) hide show
  1. package/dist/add-DY4AXANK.js +6 -0
  2. package/dist/add-DY4AXANK.js.map +1 -0
  3. package/dist/{build-O5TVNH4E.js → build-TVKFIVFQ.js} +8 -8
  4. package/dist/{build-O5TVNH4E.js.map → build-TVKFIVFQ.js.map} +1 -1
  5. package/dist/{check-WFBEDHDR.js → check-3KHZXZMQ.js} +6 -6
  6. package/dist/{check-WFBEDHDR.js.map → check-3KHZXZMQ.js.map} +1 -1
  7. package/dist/{chunk-PLST5Q7T.js → chunk-AG6RZ2RR.js} +1010 -23
  8. package/dist/chunk-AG6RZ2RR.js.map +1 -0
  9. package/dist/{chunk-KLEIVDUV.js → chunk-CEXAQQ5W.js} +150 -11
  10. package/dist/chunk-CEXAQQ5W.js.map +1 -0
  11. package/dist/{chunk-JGRMRXXZ.js → chunk-JKLLFVEU.js} +3 -3
  12. package/dist/{chunk-JGRMRXXZ.js.map → chunk-JKLLFVEU.js.map} +1 -1
  13. package/dist/{chunk-EP6JHXSR.js → chunk-LMUACBMA.js} +3 -3
  14. package/dist/{chunk-EP6JHXSR.js.map → chunk-LMUACBMA.js.map} +1 -1
  15. package/dist/{chunk-MXI3PZFT.js → chunk-OB6UBJXF.js} +156 -200
  16. package/dist/chunk-OB6UBJXF.js.map +1 -0
  17. package/dist/{chunk-BCE22JSM.js → chunk-P7W4LR3Z.js} +32 -13
  18. package/dist/chunk-P7W4LR3Z.js.map +1 -0
  19. package/dist/chunk-PXRX5PEC.js +54 -0
  20. package/dist/chunk-PXRX5PEC.js.map +1 -0
  21. package/dist/{chunk-3G43C6OL.js → chunk-QI3XQKHS.js} +39 -3
  22. package/dist/chunk-QI3XQKHS.js.map +1 -0
  23. package/dist/{chunk-QDZA5JSL.js → chunk-U2M6HGKQ.js} +3 -3
  24. package/dist/{chunk-QDZA5JSL.js.map → chunk-U2M6HGKQ.js.map} +1 -1
  25. package/dist/{chunk-T3FLAGI6.js → chunk-VA776YE5.js} +3 -3
  26. package/dist/{chunk-T3FLAGI6.js.map → chunk-VA776YE5.js.map} +1 -1
  27. package/dist/cli.js +14 -11
  28. package/dist/cli.js.map +1 -1
  29. package/dist/components/index.d.ts +223 -1
  30. package/dist/components/index.js +3 -2
  31. package/dist/{dev-NZRLOQCL.js → dev-GDKATCC7.js} +22 -11
  32. package/dist/dev-GDKATCC7.js.map +1 -0
  33. package/dist/doc/index.d.ts +4 -0
  34. package/dist/doc/index.js +107 -11
  35. package/dist/doc/index.js.map +1 -1
  36. package/dist/{docs-ZGDJUHJI.js → docs-EJJ3BECT.js} +3 -3
  37. package/dist/{docs-ZGDJUHJI.js.map → docs-EJJ3BECT.js.map} +1 -1
  38. package/dist/{doctor-VFKEMR54.js → doctor-WQXPXP6K.js} +7 -7
  39. package/dist/doctor-WQXPXP6K.js.map +1 -0
  40. package/dist/{preview-QDCIVVSR.js → preview-OGMCNQUO.js} +12 -4
  41. package/dist/preview-OGMCNQUO.js.map +1 -0
  42. package/dist/{routes-RHP5FVGD.js → routes-MWBWWOJ2.js} +5 -5
  43. package/dist/{routes-RHP5FVGD.js.map → routes-MWBWWOJ2.js.map} +1 -1
  44. package/dist/{search-RFBELGY7.js → search-6Y422SV6.js} +3 -3
  45. package/dist/{search-RFBELGY7.js.map → search-6Y422SV6.js.map} +1 -1
  46. package/dist/slide/index.js +61 -15
  47. package/dist/slide/index.js.map +1 -1
  48. package/dist/table/index.js +7 -5
  49. package/dist/table/index.js.map +1 -1
  50. package/dist/ui/index.d.ts +140 -10
  51. package/dist/ui/index.js +1406 -63
  52. package/dist/ui/index.js.map +1 -1
  53. package/dist/{upgrade-GF2P67M6.js → upgrade-HCANX4GQ.js} +6 -6
  54. package/dist/{upgrade-GF2P67M6.js.map → upgrade-HCANX4GQ.js.map} +1 -1
  55. package/dist/vite/index.js +3 -3
  56. package/docs/en/changelog.md +24 -0
  57. package/docs/en/cli-reference.md +30 -0
  58. package/docs/en/parts/page-shell.md +1 -1
  59. package/docs/en/routing.md +4 -2
  60. package/docs/index.json +291 -61
  61. package/docs/ja/changelog.md +50 -0
  62. package/docs/ja/cli-reference.md +29 -0
  63. package/docs/ja/components.md +33 -89
  64. package/docs/ja/page-types/csv.md +83 -0
  65. package/docs/ja/page-types/doc.md +83 -0
  66. package/docs/ja/page-types/excel.md +82 -0
  67. package/docs/ja/page-types/slide.md +132 -0
  68. package/docs/ja/page-types.md +47 -0
  69. package/docs/ja/parts/area-chart.md +61 -0
  70. package/docs/ja/parts/bar-chart.md +69 -0
  71. package/docs/ja/parts/bar-list.md +35 -0
  72. package/docs/ja/parts/category-bar.md +36 -0
  73. package/docs/ja/parts/donut-chart.md +47 -0
  74. package/docs/ja/parts/echart.md +3 -0
  75. package/docs/ja/parts/line-chart.md +58 -0
  76. package/docs/ja/parts/page-shell.md +1 -1
  77. package/docs/ja/parts/progress-circle.md +34 -0
  78. package/docs/ja/parts/sparkline.md +1 -1
  79. package/docs/ja/parts/tracker.md +32 -0
  80. package/docs/ja/routing.md +8 -84
  81. package/docs/ja/ui/alert-dialog.md +41 -0
  82. package/docs/ja/ui/avatar.md +31 -0
  83. package/docs/ja/ui/combobox.md +74 -0
  84. package/docs/ja/ui/drawer.md +41 -0
  85. package/docs/ja/ui/field.md +42 -0
  86. package/docs/ja/ui/hover-card.md +21 -0
  87. package/docs/ja/ui/kbd.md +16 -0
  88. package/docs/ja/ui/pagination.md +36 -0
  89. package/docs/ja/ui/radio-group.md +21 -0
  90. package/docs/ja/ui/toast.md +46 -0
  91. package/docs/ja/ui-and-theming.md +14 -7
  92. package/package.json +18 -12
  93. package/registry/ui/accordion.tsx +74 -0
  94. package/registry/ui/alert-dialog.tsx +189 -0
  95. package/registry/ui/alert.tsx +78 -0
  96. package/registry/ui/app-shell.tsx +281 -0
  97. package/registry/ui/area-chart.tsx +1015 -0
  98. package/registry/ui/avatar.tsx +110 -0
  99. package/registry/ui/badge.tsx +54 -0
  100. package/registry/ui/bar-chart.tsx +1013 -0
  101. package/registry/ui/bar-list.tsx +302 -0
  102. package/registry/ui/breadcrumb.tsx +126 -0
  103. package/registry/ui/button.tsx +60 -0
  104. package/registry/ui/calendar.tsx +221 -0
  105. package/registry/ui/card.tsx +105 -0
  106. package/registry/ui/category-bar.tsx +281 -0
  107. package/registry/ui/checkbox.tsx +28 -0
  108. package/registry/ui/collapsible.tsx +21 -0
  109. package/registry/ui/combobox.tsx +310 -0
  110. package/registry/ui/command.tsx +196 -0
  111. package/registry/ui/dashboard-card.tsx +174 -0
  112. package/registry/ui/data-table.tsx +16 -91
  113. package/registry/ui/date-range-picker.tsx +209 -0
  114. package/registry/ui/dialog.tsx +159 -0
  115. package/registry/ui/donut-chart.tsx +1004 -0
  116. package/registry/ui/drawer.tsx +229 -0
  117. package/registry/ui/dropdown-menu.tsx +272 -0
  118. package/registry/ui/echart.tsx +486 -0
  119. package/registry/ui/field.tsx +240 -0
  120. package/registry/ui/filter-bar.tsx +365 -0
  121. package/registry/ui/funnel-steps.tsx +274 -0
  122. package/registry/ui/hover-card.tsx +52 -0
  123. package/registry/ui/input-group.tsx +158 -0
  124. package/registry/ui/input.tsx +22 -0
  125. package/registry/ui/kbd.tsx +28 -0
  126. package/registry/ui/label.tsx +20 -0
  127. package/registry/ui/line-chart.tsx +1007 -0
  128. package/registry/ui/metric-value.tsx +54 -0
  129. package/registry/ui/multi-select.tsx +226 -0
  130. package/registry/ui/page-shell.tsx +227 -0
  131. package/registry/ui/pagination.tsx +138 -0
  132. package/registry/ui/placeholder.tsx +30 -0
  133. package/registry/ui/popover.tsx +90 -0
  134. package/registry/ui/progress-circle.tsx +272 -0
  135. package/registry/ui/progress.tsx +83 -0
  136. package/registry/ui/radio-group.tsx +39 -0
  137. package/registry/ui/scroll-area.tsx +55 -0
  138. package/registry/ui/searchable-select.tsx +209 -0
  139. package/registry/ui/section-header.tsx +41 -0
  140. package/registry/ui/segmented-control.tsx +71 -0
  141. package/registry/ui/select.tsx +253 -0
  142. package/registry/ui/separator.tsx +25 -0
  143. package/registry/ui/sheet.tsx +137 -0
  144. package/registry/ui/sidebar.tsx +723 -0
  145. package/registry/ui/skeleton.tsx +15 -0
  146. package/registry/ui/slider.tsx +54 -0
  147. package/registry/ui/sparkline.tsx +155 -0
  148. package/registry/ui/spinner.tsx +12 -0
  149. package/registry/ui/states.tsx +61 -0
  150. package/registry/ui/status-badge.tsx +79 -0
  151. package/registry/ui/switch.tsx +32 -0
  152. package/registry/ui/table.tsx +116 -0
  153. package/registry/ui/tabs.tsx +82 -0
  154. package/registry/ui/textarea.tsx +20 -0
  155. package/registry/ui/toast.tsx +250 -0
  156. package/registry/ui/toggle-group.tsx +89 -0
  157. package/registry/ui/toggle.tsx +45 -0
  158. package/registry/ui/tooltip.tsx +66 -0
  159. package/registry/ui/tracker.tsx +236 -0
  160. package/registry/ui/trend-indicator.tsx +62 -0
  161. package/skills/vantage-add-feature/SKILL.md +9 -7
  162. package/skills/vantage-design/SKILL.md +3 -1
  163. package/skills/vantage-design/references/format.md +1 -1
  164. package/skills/vantage-pitfalls/SKILL.md +5 -1
  165. package/skills/vantage-slide/SKILL.md +17 -0
  166. package/templates/AGENTS.md +10 -1
  167. package/templates/agents/api.md +29 -0
  168. package/templates/agents/csv.md +2 -1
  169. package/templates/agents/doc.md +6 -3
  170. package/templates/agents/page.md +22 -8
  171. package/templates/agents/slide.md +13 -1
  172. package/templates/agents/xlsx.md +2 -1
  173. package/theme.css +51 -1
  174. package/dist/add-EISGSZAH.js +0 -6
  175. package/dist/add-EISGSZAH.js.map +0 -1
  176. package/dist/chunk-3G43C6OL.js.map +0 -1
  177. package/dist/chunk-BCE22JSM.js.map +0 -1
  178. package/dist/chunk-KLEIVDUV.js.map +0 -1
  179. package/dist/chunk-MXI3PZFT.js.map +0 -1
  180. package/dist/chunk-PLST5Q7T.js.map +0 -1
  181. package/dist/dev-NZRLOQCL.js.map +0 -1
  182. package/dist/doctor-VFKEMR54.js.map +0 -1
  183. package/dist/preview-QDCIVVSR.js.map +0 -1
@@ -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` エラーになります。
@@ -0,0 +1,61 @@
1
+ # AreaChart
2
+
3
+ > 推移を面で見せる型付きグラフ。行・x 軸の列・系列の列を渡すだけ。
4
+
5
+ 時系列の推移を面で描きます。ECharts の option を組む代わりに、**行の配列(`data`)・x 軸の列名(`index`)・
6
+ 系列の列名(`categories`)**を渡すだけで、凡例・ツールチップ・軸の書式まで揃います。配色は
7
+ `--chart-1`〜`--chart-5` のトークンに追従し、ライト / ダークを切り替えても追いかけます。中身は
8
+ [`EChart`](parts/echart) です。
9
+
10
+ ```tsx
11
+ import { AreaChart } from "@squadbase/vantage/components";
12
+ import type { AreaChartProps, ChartColor, ChartEventPayload } from "@squadbase/vantage/components";
13
+ ```
14
+
15
+ | Prop | Type | Default | 説明 |
16
+ | --- | --- | --- | --- |
17
+ | `data` | `Record<string, unknown>[]` | | 行の配列。**必須**。1 行が x 軸の 1 点。数値の列は number か数値文字列(SQL の DECIMAL など)で、それ以外は欠損として扱う。 |
18
+ | `index` | `string` | | x 軸に使う列名。**必須**。 |
19
+ | `categories` | `string[]` | | 系列として描く列名。**必須**。この順が凡例と配色の順になる。 |
20
+ | `colors` | `ChartColor[]` | `["chart-1", …, "chart-5"]` | 系列色。`"chart-1"`〜`"chart-5"`(ライト / ダークに追従)か CSS カラー。足りなければ繰り返す。 |
21
+ | `valueFormatter` | `(value: number) => string` | | 値軸の目盛りとツールチップの書式。既定は 3 桁区切り。 |
22
+ | `type` | `"default" \| "stacked" \| "percent"` | `"default"` | `stacked` は積み上げ、`percent` は各点の合計を 100% にした積み上げ(ツールチップは元の値)。 |
23
+ | `curveType` | `"linear" \| "smooth" \| "step"` | `"linear"` | 線の形。 |
24
+ | `connectNulls` | `boolean` | `false` | 欠損した点をまたいで線をつなぐ。 |
25
+ | `fill` | `"gradient" \| "solid" \| "none"` | `"gradient"` | 面の塗り。 |
26
+ | `showLegend` | `boolean` | `true` | 右上に凡例を出す。 |
27
+ | `showTooltip` | `boolean` | `true` | ホバーでツールチップを出す。 |
28
+ | `showGridLines` | `boolean` | `true` | 値軸の目盛り線。 |
29
+ | `showXAxis` | `boolean` | `true` | x 軸を出す。 |
30
+ | `showYAxis` | `boolean` | `true` | y 軸を出す。 |
31
+ | `startEndOnly` | `boolean` | `false` | x 軸のラベルを最初と最後だけにする。 |
32
+ | `yAxisWidth` | `number` | | y 軸ラベルの幅(px)。縦に並べた複数のグラフでプロット領域を揃えたいときに固定する。 |
33
+ | `minValue` | `number` | | 値軸の下限。 |
34
+ | `maxValue` | `number` | | 値軸の上限。 |
35
+ | `autoMinValue` | `boolean` | `false` | 値軸を 0 からではなくデータの範囲に合わせる。 |
36
+ | `allowDecimals` | `boolean` | `true` | `false` で目盛りを整数に限る。 |
37
+ | `xAxisLabel` | `string` | | x 軸の名前。 |
38
+ | `yAxisLabel` | `string` | | y 軸の名前。 |
39
+ | `onValueChange` | `(value: ChartEventPayload) => void` | | 点のクリックで呼ばれる。クリックした行に `eventType` と `categoryClicked`(系列名)を足して渡し、同じ点をもう一度押すと `null`。渡すと選択以外が薄くなる。 |
40
+ | `height` | `string \| number` | | 高さ。数値は px。省略時は `h-80`(320px)。`className` の高さクラスでも決められる。 |
41
+ | `loading` | `boolean` | | ローディング表示を出す。 |
42
+ | `ariaLabel` | `string` | | チャートの説明(スクリーンリーダー向け)。 |
43
+ | `className` | `string` | | 足すクラス。 |
44
+
45
+ > [!NOTE]
46
+ > `colors` は Tailwind のクラスではなく**色の値**です(キャンバスに描くため)。`"chart-2"` のような
47
+ > トークン名ならライト / ダークに追従します。軸・凡例・ツールチップの色はいつもテーマから入ります。
48
+
49
+ ## 構成比の推移を見る
50
+
51
+ `type="percent"` にすると、各点の合計を 100% として積み上げます。値軸は 0〜100% に固定され、
52
+ ツールチップには**元の値**が `valueFormatter` で出ます。
53
+
54
+ ```tsx
55
+ <AreaChart data={rows} index="month" categories={["オンライン", "店舗"]} type="percent" />
56
+ ```
57
+
58
+ ## EChart との使い分け
59
+
60
+ まずこの型付きグラフで描き、二軸・散布図・ヒートマップ・注釈線など**この props で表せないもの
61
+ だけ** [`EChart`](parts/echart) に option を書いてください。
@@ -0,0 +1,69 @@
1
+ # BarChart
2
+
3
+ > 比較を棒で見せる型付きグラフ。横並び・積み上げ・横棒に切り替えられる。
4
+
5
+ カテゴリごとの値を棒で比べます。**行の配列(`data`)・カテゴリの列名(`index`)・系列の列名(`categories`)**
6
+ を渡すだけで描け、`type` で横並び / 積み上げ / 100% 積み上げ、`layout` で縦棒 / 横棒を切り替えます。
7
+ 配色はトークンに追従します。中身は [`EChart`](parts/echart) です。
8
+
9
+ ```tsx
10
+ import { BarChart } from "@squadbase/vantage/components";
11
+ import type { BarChartProps, ChartColor, ChartEventPayload } from "@squadbase/vantage/components";
12
+ ```
13
+
14
+ | Prop | Type | Default | 説明 |
15
+ | --- | --- | --- | --- |
16
+ | `data` | `Record<string, unknown>[]` | | 行の配列。**必須**。1 行が x 軸の 1 点。数値の列は number か数値文字列(SQL の DECIMAL など)で、それ以外は欠損として扱う。 |
17
+ | `index` | `string` | | x 軸に使う列名。**必須**。 |
18
+ | `categories` | `string[]` | | 系列として描く列名。**必須**。この順が凡例と配色の順になる。 |
19
+ | `colors` | `ChartColor[]` | `["chart-1", …, "chart-5"]` | 系列色。`"chart-1"`〜`"chart-5"`(ライト / ダークに追従)か CSS カラー。足りなければ繰り返す。 |
20
+ | `valueFormatter` | `(value: number) => string` | | 値軸の目盛りとツールチップの書式。既定は 3 桁区切り。 |
21
+ | `type` | `"default" \| "stacked" \| "percent"` | `"default"` | `default` は横並び、`stacked` は積み上げ、`percent` は各カテゴリの合計を 100% にした積み上げ。 |
22
+ | `layout` | `"horizontal" \| "vertical"` | `"horizontal"` | `vertical` はカテゴリを縦に並べた**横棒**(先頭の行が一番上)。ラベルの長いランキング向け。 |
23
+ | `barCategoryGap` | `string \| number` | | カテゴリ間の隙間(`"30%"` や px)。 |
24
+ | `showLegend` | `boolean` | `true` | 右上に凡例を出す。 |
25
+ | `showTooltip` | `boolean` | `true` | ホバーでツールチップを出す。 |
26
+ | `showGridLines` | `boolean` | `true` | 値軸の目盛り線。 |
27
+ | `showXAxis` | `boolean` | `true` | x 軸を出す。 |
28
+ | `showYAxis` | `boolean` | `true` | y 軸を出す。 |
29
+ | `startEndOnly` | `boolean` | `false` | x 軸のラベルを最初と最後だけにする。 |
30
+ | `yAxisWidth` | `number` | | y 軸ラベルの幅(px)。縦に並べた複数のグラフでプロット領域を揃えたいときに固定する。 |
31
+ | `minValue` | `number` | | 値軸の下限。 |
32
+ | `maxValue` | `number` | | 値軸の上限。 |
33
+ | `autoMinValue` | `boolean` | `false` | 値軸を 0 からではなくデータの範囲に合わせる。 |
34
+ | `allowDecimals` | `boolean` | `true` | `false` で目盛りを整数に限る。 |
35
+ | `xAxisLabel` | `string` | | x 軸の名前。 |
36
+ | `yAxisLabel` | `string` | | y 軸の名前。 |
37
+ | `onValueChange` | `(value: ChartEventPayload) => void` | | 棒のクリックで呼ばれる。クリックした行に `eventType` と `categoryClicked`(系列名)を足して渡し、同じ点をもう一度押すと `null`。渡すと選択以外が薄くなる。 |
38
+ | `height` | `string \| number` | | 高さ。数値は px。省略時は `h-80`(320px)。`className` の高さクラスでも決められる。 |
39
+ | `loading` | `boolean` | | ローディング表示を出す。 |
40
+ | `ariaLabel` | `string` | | チャートの説明(スクリーンリーダー向け)。 |
41
+ | `className` | `string` | | 足すクラス。 |
42
+
43
+ > [!NOTE]
44
+ > `colors` は Tailwind のクラスではなく**色の値**です(キャンバスに描くため)。`"chart-2"` のような
45
+ > トークン名ならライト / ダークに追従します。軸・凡例・ツールチップの色はいつもテーマから入ります。
46
+
47
+ ## 横棒のランキング
48
+
49
+ ラベルが長いときは `layout="vertical"` で横棒にします。`yAxisWidth` でラベル幅を固定すると、
50
+ 長いラベルは省略されます。行の順に上から並ぶので、並べ替えは `data` 側で済ませてください。
51
+
52
+ ```tsx
53
+ <BarChart
54
+ data={stores}
55
+ index="store"
56
+ categories={["売上"]}
57
+ layout="vertical"
58
+ yAxisWidth={96}
59
+ showLegend={false}
60
+ />
61
+ ```
62
+
63
+ 数件のランキングを軸なしで並べるだけなら、[`BarList`](parts/bar-list) のほうが軽く、
64
+ カードにも収まります。
65
+
66
+ ## EChart との使い分け
67
+
68
+ まずこの型付きグラフで描き、二軸・散布図・ヒートマップ・注釈線など**この props で表せないもの
69
+ だけ** [`EChart`](parts/echart) に option を書いてください。
@@ -0,0 +1,35 @@
1
+ # BarList
2
+
3
+ > 名前と値を横棒で並べるランキング。軸なしで、カードに収まる軽さ。
4
+
5
+ 名前と値の組を、値に比例した淡い横棒で並べます。アクセスの多いページ・店舗別の売上・
6
+ エラーの種類別件数のような**上位 N 件**に向きます。ECharts を使わない HTML なので、カードの中に
7
+ いくつ置いても軽く、配色はテーマに追従します。
8
+
9
+ ```tsx
10
+ import { BarList } from "@squadbase/vantage/components";
11
+ import type { BarListItem, ChartColor } from "@squadbase/vantage/components";
12
+ ```
13
+
14
+ | Prop | Type | Default | 説明 |
15
+ | --- | --- | --- | --- |
16
+ | `data` | `BarListItem[]` | | `{ name: string; value: number; href?: string; key?: string; color?: ChartColor }` の配列。**必須**。 |
17
+ | `valueFormatter` | `(value: number) => string` | | 右端の数値の書式。既定は 3 桁区切り。 |
18
+ | `sortOrder` | `"descending" \| "ascending" \| "none"` | `"descending"` | 並べ順。`none` は渡した順。 |
19
+ | `color` | `ChartColor` | `"chart-1"` | バーの色(淡く塗る)。行ごとに変えるなら `data[].color`。 |
20
+ | `showAnimation` | `boolean` | `false` | マウント時にバーを伸ばす。 |
21
+ | `onValueChange` | `(item: BarListItem) => void` | | 渡すと行がボタンになり、クリックした行を受け取る(絞り込みの起点に)。 |
22
+ | `className` | `string` | | 足すクラス。 |
23
+
24
+ 残りの props は外側の `<div>` にそのまま渡ります。
25
+
26
+ ## リンクにする
27
+
28
+ `href` を持つ行は名前がリンクになります。`http(s)://` で始まるものは新しいタブで開きます。
29
+
30
+ ```tsx
31
+ <BarList data={pages.map((p) => ({ name: p.path, value: p.views, href: p.url }))} />
32
+ ```
33
+
34
+ 棒の長さは**最大値に対する比**です。全体に対する割合を見せたいなら
35
+ [`CategoryBar`](parts/category-bar) か [`DonutChart`](parts/donut-chart) を使います。
@@ -0,0 +1,36 @@
1
+ # CategoryBar
2
+
3
+ > 1 本の棒を区間に色分けし、現在値をマーカーで示す。
4
+
5
+ 1 本の棒を `values` の比で色分けし、区切りに累計値を出します。`marker` を渡すと、その値の位置に
6
+ 目印が立ちます。スコアの判定帯(要改善 / 標準 / 良好)・予算の消化・構成比の 1 本表示に向きます。
7
+ ECharts を使わない HTML で、配色はテーマに追従します。
8
+
9
+ ```tsx
10
+ import { CategoryBar } from "@squadbase/vantage/components";
11
+ import type { CategoryBarMarker, ChartColor } from "@squadbase/vantage/components";
12
+ ```
13
+
14
+ | Prop | Type | Default | 説明 |
15
+ | --- | --- | --- | --- |
16
+ | `values` | `number[]` | | 各区間の幅(相対値)。**必須**。合計が 100 である必要はない。負の値は 0 扱い。 |
17
+ | `colors` | `ChartColor[]` | `["chart-1", …, "chart-5"]` | 区間の色(順に対応)。`"chart-1"`〜`"chart-5"` か CSS カラー。 |
18
+ | `marker` | `CategoryBarMarker` | | `{ value: number; tooltip?: string; showAnimation?: boolean }`。`value` は `values` の合計と同じ尺度。 |
19
+ | `showLabels` | `boolean` | `true` | 棒の上に区切りの累計値を出す。狭い区間のラベルは省く。 |
20
+ | `valueFormatter` | `(value: number) => string` | | 区切りの数値の書式。 |
21
+ | `className` | `string` | | 足すクラス。 |
22
+
23
+ 残りの props は外側の `<div>` にそのまま渡ります。
24
+
25
+ ## 判定帯に色を合わせる
26
+
27
+ `colors` は区間の順に対応します。「悪い → 良い」の帯なら、暖色から寒色へ並べると読みやすく
28
+ なります。マーカーの色は、乗っている区間の色になります。
29
+
30
+ ```tsx
31
+ <CategoryBar
32
+ values={[60, 20, 20]}
33
+ colors={["chart-5", "chart-3", "chart-2"]}
34
+ marker={{ value: 72, tooltip: "今月のスコア: 72" }}
35
+ />
36
+ ```
@@ -0,0 +1,47 @@
1
+ # DonutChart
2
+
3
+ > 構成比を見せる型付きのドーナツ / 円グラフ。中央に合計を出す。
4
+
5
+ 構成比をドーナツ(または円)で描きます。**行の配列(`data`)・名前の列(`category`)・値の列(`value`)**
6
+ を渡すだけで描け、ドーナツの穴には合計(または `label`)が出ます。中央のラベルはキャンバスではなく
7
+ HTML なので、ページの文字色・書体のまま表示されます。配色はトークンに追従します。
8
+
9
+ ```tsx
10
+ import { DonutChart } from "@squadbase/vantage/components";
11
+ import type { DonutChartProps, ChartColor, ChartEventPayload } from "@squadbase/vantage/components";
12
+ ```
13
+
14
+ | Prop | Type | Default | 説明 |
15
+ | --- | --- | --- | --- |
16
+ | `data` | `Record<string, unknown>[]` | | 行の配列。**必須**。1 行が 1 切片。 |
17
+ | `category` | `string` | | 切片の名前に使う列名。**必須**。 |
18
+ | `value` | `string` | | 切片の大きさに使う列名。**必須**。number か数値文字列。0 以下と欠損は 0 扱い。 |
19
+ | `colors` | `ChartColor[]` | `["chart-1", …, "chart-5"]` | 切片の色(行の順)。`"chart-1"`〜`"chart-5"` か CSS カラー。足りなければ繰り返す。 |
20
+ | `variant` | `"donut" \| "pie"` | `"donut"` | 穴あき(中央ラベルあり)か、円か。 |
21
+ | `valueFormatter` | `(value: number) => string` | | ツールチップと中央ラベルの書式。 |
22
+ | `label` | `ReactNode` | | 中央ラベル。省略時は合計を `valueFormatter` で書いたもの。 |
23
+ | `showLabel` | `boolean` | `true` | 中央ラベルを出す(donut のみ)。 |
24
+ | `showTooltip` | `boolean` | `true` | ホバーで名前・値・構成比を出す。 |
25
+ | `onValueChange` | `(value: ChartEventPayload) => void` | | 切片のクリックで呼ばれる。行に `eventType: "slice"` と `categoryClicked`(切片名)を足して渡し、同じ切片をもう一度押すと `null`。 |
26
+ | `loading` | `boolean` | | ローディング表示を出す。 |
27
+ | `ariaLabel` | `string` | | チャートの説明。 |
28
+ | `className` | `string` | `"size-40"` | 外枠のクラス。大きさはここで決める。 |
29
+
30
+ ## 凡例を添える
31
+
32
+ 凡例は持ちません(切片が 5 つ程度ならツールチップで足りるため)。並べて見せたいときは、
33
+ 行ごとに同じ色を当てた [`BarList`](parts/bar-list) や表を隣に置いてください。
34
+
35
+ ```tsx
36
+ <div className="flex items-center gap-6">
37
+ <DonutChart data={rows} category="channel" value="sessions" label="9.7万" className="size-48" />
38
+ <BarList
39
+ data={rows.map((r, i) => ({ name: r.channel, value: r.sessions, color: `chart-${(i % 5) + 1}` }))}
40
+ sortOrder="none"
41
+ className="flex-1"
42
+ />
43
+ </div>
44
+ ```
45
+
46
+ > [!NOTE]
47
+ > 切片が 6 つを超えると色が繰り返されます。小さい切片は「その他」にまとめてから渡してください。
@@ -7,6 +7,9 @@ Apache ECharts をそのまま使えるようにした薄いラッパーです
7
7
  系列色は `--chart-1` 〜 `--chart-5`、軸・凡例・ツールチップは文字色と境界色のトークンから組まれ、
8
8
  ライト / ダークの切り替えにも追いかけます。
9
9
 
10
+ > [!TIP]
11
+ > まず型付きグラフ([`AreaChart`](parts/area-chart)・[`BarChart`](parts/bar-chart)・[`LineChart`](parts/line-chart)・[`DonutChart`](parts/donut-chart))を使い、二軸・散布図・ヒートマップなど細かい制御が要るときだけ `EChart` に option を書いてください。
12
+
10
13
  ```tsx
11
14
  import { EChart } from "@squadbase/vantage/components";
12
15
  import type { EChartsOption } from "@squadbase/vantage/components";
@@ -0,0 +1,58 @@
1
+ # LineChart
2
+
3
+ > 推移を線で見せる型付きグラフ。行・x 軸の列・系列の列を渡すだけ。
4
+
5
+ 時系列の推移を折れ線で描きます。**行の配列(`data`)・x 軸の列名(`index`)・系列の列名(`categories`)**
6
+ を渡すだけで、凡例・ツールチップ・軸の書式まで揃います。配色はトークンに追従します。中身は
7
+ [`EChart`](parts/echart) です。
8
+
9
+ ```tsx
10
+ import { LineChart } from "@squadbase/vantage/components";
11
+ import type { LineChartProps, ChartColor, ChartEventPayload } from "@squadbase/vantage/components";
12
+ ```
13
+
14
+ | Prop | Type | Default | 説明 |
15
+ | --- | --- | --- | --- |
16
+ | `data` | `Record<string, unknown>[]` | | 行の配列。**必須**。1 行が x 軸の 1 点。数値の列は number か数値文字列(SQL の DECIMAL など)で、それ以外は欠損として扱う。 |
17
+ | `index` | `string` | | x 軸に使う列名。**必須**。 |
18
+ | `categories` | `string[]` | | 系列として描く列名。**必須**。この順が凡例と配色の順になる。 |
19
+ | `colors` | `ChartColor[]` | `["chart-1", …, "chart-5"]` | 系列色。`"chart-1"`〜`"chart-5"`(ライト / ダークに追従)か CSS カラー。足りなければ繰り返す。 |
20
+ | `valueFormatter` | `(value: number) => string` | | 値軸の目盛りとツールチップの書式。既定は 3 桁区切り。 |
21
+ | `curveType` | `"linear" \| "smooth" \| "step"` | `"linear"` | 線の形。 |
22
+ | `connectNulls` | `boolean` | `false` | 欠損した点をまたいで線をつなぐ。 |
23
+ | `showLegend` | `boolean` | `true` | 右上に凡例を出す。 |
24
+ | `showTooltip` | `boolean` | `true` | ホバーでツールチップを出す。 |
25
+ | `showGridLines` | `boolean` | `true` | 値軸の目盛り線。 |
26
+ | `showXAxis` | `boolean` | `true` | x 軸を出す。 |
27
+ | `showYAxis` | `boolean` | `true` | y 軸を出す。 |
28
+ | `startEndOnly` | `boolean` | `false` | x 軸のラベルを最初と最後だけにする。 |
29
+ | `yAxisWidth` | `number` | | y 軸ラベルの幅(px)。縦に並べた複数のグラフでプロット領域を揃えたいときに固定する。 |
30
+ | `minValue` | `number` | | 値軸の下限。 |
31
+ | `maxValue` | `number` | | 値軸の上限。 |
32
+ | `autoMinValue` | `boolean` | `false` | 値軸を 0 からではなくデータの範囲に合わせる。 |
33
+ | `allowDecimals` | `boolean` | `true` | `false` で目盛りを整数に限る。 |
34
+ | `xAxisLabel` | `string` | | x 軸の名前。 |
35
+ | `yAxisLabel` | `string` | | y 軸の名前。 |
36
+ | `onValueChange` | `(value: ChartEventPayload) => void` | | 点のクリックで呼ばれる。クリックした行に `eventType` と `categoryClicked`(系列名)を足して渡し、同じ点をもう一度押すと `null`。渡すと選択以外が薄くなる。 |
37
+ | `height` | `string \| number` | | 高さ。数値は px。省略時は `h-80`(320px)。`className` の高さクラスでも決められる。 |
38
+ | `loading` | `boolean` | | ローディング表示を出す。 |
39
+ | `ariaLabel` | `string` | | チャートの説明(スクリーンリーダー向け)。 |
40
+ | `className` | `string` | | 足すクラス。 |
41
+
42
+ > [!NOTE]
43
+ > `colors` は Tailwind のクラスではなく**色の値**です(キャンバスに描くため)。`"chart-2"` のような
44
+ > トークン名ならライト / ダークに追従します。軸・凡例・ツールチップの色はいつもテーマから入ります。
45
+
46
+ ## 欠損のある系列
47
+
48
+ 値が `null`・空文字・数値でない文字列の点は欠損として扱い、線が途切れます。`connectNulls` を
49
+ 付けると欠損をまたいでつなぎます。
50
+
51
+ ```tsx
52
+ <LineChart data={rows} index="date" categories={["CVR"]} connectNulls valueFormatter={(v) => `${v}%`} />
53
+ ```
54
+
55
+ ## EChart との使い分け
56
+
57
+ まずこの型付きグラフで描き、二軸・散布図・ヒートマップ・注釈線など**この props で表せないもの
58
+ だけ** [`EChart`](parts/echart) に option を書いてください。
@@ -27,7 +27,7 @@ import {
27
27
  | パーツ | 役割 |
28
28
  | --- | --- |
29
29
  | `PageShell` | 全体の縦積み |
30
- | `PageShellHeader` | 下線付きのヘッダー帯。左に見出し、右に `HeaderEnd` の 2 列 |
30
+ | `PageShellHeader` | 下線付きのヘッダー帯。左に見出し、右に `HeaderEnd`。幅が足りないと `HeaderEnd` は見出しの下へ回り込む |
31
31
  | `PageShellHeading` / `PageShellTitle` / `PageShellDescription` | 見出しブロック |
32
32
  | `PageShellHeaderEnd` | 右端の縦積み |
33
33
  | `PageShellMeta` | 「最終更新 10 分前」のような補足 |
@@ -0,0 +1,34 @@
1
+ # ProgressCircle
2
+
3
+ > 目標に対する達成率をリングで示す。中央に任意の内容を置ける。
4
+
5
+ `value / max` の割合だけリングを塗ります。children は中央に置かれるので、達成率の数値や
6
+ アイコンを入れます。単一の `<svg>` で、KPI タイルに並べても軽いままです。
7
+
8
+ ```tsx
9
+ import { ProgressCircle } from "@squadbase/vantage/components";
10
+ import type { ChartColor } from "@squadbase/vantage/components";
11
+ ```
12
+
13
+ | Prop | Type | Default | 説明 |
14
+ | --- | --- | --- | --- |
15
+ | `value` | `number` | `0` | 現在値。`0`〜`max` に丸める。 |
16
+ | `max` | `number` | `100` | 満タンの値。 |
17
+ | `radius` | `number` | `32` | 外側の半径(px)。全体は `radius * 2` 四方。 |
18
+ | `strokeWidth` | `number` | `6` | 線の太さ(px)。 |
19
+ | `color` | `ChartColor` | `"chart-1"` | `"chart-1"`〜`"chart-5"` か CSS カラー。地のリングは同じ色を淡くしたもの。 |
20
+ | `showAnimation` | `boolean` | `true` | マウント時と値の変化をアニメーションする。 |
21
+ | `children` | `ReactNode` | | 中央に置く内容(例: `72%`)。 |
22
+ | `className` | `string` | | 足すクラス。 |
23
+
24
+ 残りの props は外側の `<div>` にそのまま渡ります。`role="progressbar"` と `aria-valuenow` が付きます。
25
+
26
+ ## 値の書式は呼び出し側で
27
+
28
+ 中央の表示は children そのものです。割合ではなく実数を見せたいときも、そのまま書いてください。
29
+
30
+ ```tsx
31
+ <ProgressCircle value={3_400_000} max={5_000_000} radius={40} strokeWidth={8}>
32
+ <span className="text-xs">340万</span>
33
+ </ProgressCircle>
34
+ ```
@@ -38,7 +38,7 @@ import type { SparklineDataPoint, SparklineVariant } from "@squadbase/vantage/co
38
38
 
39
39
  ## EChart との使い分け
40
40
 
41
- 軸・凡例・ツールチップ・複数系列が要るなら [`EChart`](parts/echart) を使います。
41
+ 軸・凡例・ツールチップ・複数系列が要るなら、まず型付きグラフ([`LineChart`](parts/line-chart)・[`AreaChart`](parts/area-chart)・[`BarChart`](parts/bar-chart))を使い、細かい制御が要るときだけ [`EChart`](parts/echart) を使います。
42
42
  `Sparkline` が持つのは「値の並びの形」だけで、**目盛りも数値も出しません**。
43
43
 
44
44
  > [!NOTE]
@@ -0,0 +1,32 @@
1
+ # Tracker
2
+
3
+ > 期間ごとの状態を小さなブロックの列で示す。稼働状況やバッチの結果に。
4
+
5
+ 1 期間 = 1 ブロックで状態を色分けして並べます。日ごとの稼働状況・バッチの成否・日次目標の
6
+ 達成 / 未達のような**連続した状態**に向きます。ブロックにホバーすると `tooltip` が出ます。
7
+ ECharts を使わない HTML で、配色はテーマに追従します。
8
+
9
+ ```tsx
10
+ import { Tracker } from "@squadbase/vantage/components";
11
+ import type { TrackerBlock, ChartColor } from "@squadbase/vantage/components";
12
+ ```
13
+
14
+ | Prop | Type | Default | 説明 |
15
+ | --- | --- | --- | --- |
16
+ | `data` | `TrackerBlock[]` | | `{ color?: ChartColor; tooltip?: string; key?: string \| number }` の配列。**必須**。左から古い順。 |
17
+ | `defaultColor` | `ChartColor` | | `color` の無いブロックの色。既定は muted-foreground を淡くした灰色(データ無し・未実行に)。 |
18
+ | `hoverEffect` | `boolean` | `true` | ホバー中のブロックを薄くする。 |
19
+ | `className` | `string` | | 足すクラス。高さは既定 `h-8`。 |
20
+
21
+ 残りの props は外側の `<div>` にそのまま渡ります。
22
+
23
+ ## 状態に色を割り当てる
24
+
25
+ `color` はトークン名か CSS カラーです。失敗に `var(--destructive)` を使うと、テーマの
26
+ 破壊的操作の色と揃います。
27
+
28
+ ```tsx
29
+ const COLOR = { ok: "chart-2", warn: "chart-3", error: "var(--destructive)" } as const;
30
+
31
+ <Tracker data={days.map((d) => ({ color: COLOR[d.status], tooltip: `${d.date} ${d.label}` }))} />
32
+ ```
@@ -1,6 +1,6 @@
1
1
  # ファイルベースルーティング
2
2
 
3
- > ファイルを置くだけでルートが生まれる。ページ・レイアウト・動的パラメータ・404/error の規約と、tsx 以外のページ(csv / xlsx / スライド / ドキュメント)。
3
+ > ファイルを置くだけでルートが生まれる。ページ・レイアウト・動的パラメータ・404/error の規約。
4
4
 
5
5
  Vantage のルーティングは **ファイルの配置がそのまま URL** になります。ルーターの設定は書きません。
6
6
 
@@ -46,90 +46,13 @@ Vantage のルーティングは **ファイルの配置がそのまま URL**
46
46
 
47
47
  ## tsx 以外もページになる
48
48
 
49
- ルートになるのは `.tsx` / `.jsx` だけではありません。**`.csv` と `.xlsx`** はそのまま表として
50
- 読めるページになり、**`<name>.slide.tsx`** はスライドデッキに、**`<name>.doc.tsx`** はドキュメントになります。どれも URL の作り方は
51
- tsx と同じで、`vantage routes` にも `useRoutes()` のナビにも同格で並びます。
49
+ ルートになるのは `.tsx` / `.jsx` だけではありません。**`<name>.slide.tsx`** はスライドデッキに、
50
+ **`<name>.doc.tsx`** はドキュメントに、**`.csv` と `.xlsx`** はそのまま表として読めるページに
51
+ なります。どれも URL の作り方は tsx と同じで、`.slide` / `.doc` と拡張子は URL に出ません
52
+ (`june.slide.tsx`・`june.csv` → `/june`)。`vantage routes` にも `useRoutes()` のナビにも同格で並びます。
52
53
 
53
- ### データファイル(`.csv` / `.xlsx`)
54
-
55
- `src/data/june.xlsx` を置いて `/data/june` を開くと、ダウンロードせずブラウザ上で表として
56
- 読めます。xlsx は複数シートを切り替えられ、元ファイルをダウンロードする導線も付きます。
57
-
58
- 描かれるのは**表計算ソフトそのものの見た目**です —— 列は A / B / C、左に行番号、ファイルの
59
- 1 行目はヘッダとして固定され、罫線はデータの外まで続きます。シートのタブは下端に並びます。
60
- 読み取り専用なので編集もソートもできません(セルを選んで `Cmd/Ctrl+C` でコピーはできます)。
61
- 並べ替えや絞り込みが要るデータは、`server/api/` から配って `DataTable` で描いてください。
62
-
63
- - **タイトルはファイル名から導かれます**(`june.xlsx` → 「June」、`index.csv` はディレクトリ名)。
64
- データファイルに `definePage` は書けないので、名前を変えたいときはファイルをリネームします。
65
- - **パースはブラウザで行われます。** dev・ビルド後・デプロイ後で同じコードが同じバイトを読むので、
66
- 同じ URL が同じものを返します。25MB を超えるファイルはそのページにエラーが出ます
67
- (`vantage check` が `FILE_PAGE_TOO_LARGE` で先に警告します)。
68
- - 数式・グラフ・セル書式は再現されません。**値として読めれば十分**という設計です。
69
- - ページにしたくないファイルは `_` を前置します(`_june.xlsx`)。tsx から自分で描きたいときは
70
- こうしてルート化を止め、`@squadbase/vantage/table` の `FilePageView` を使います。
71
-
72
- > [!WARNING]
73
- > **ビューアの無い拡張子はルートになりません。** `.xls` / `.ods` / `.tsv` などを置いても
74
- > 404 にすらならず、ナビにも `vantage routes` にも出ません。`vantage check` の
75
- > `UNSUPPORTED_PAGE_FILE` 警告が唯一の告知点です。
76
-
77
- ### スライド(`.slide.tsx`)
78
-
79
- `.slide` は**ページ種別サフィックス**で、URL には出ません(`src/june.slide.tsx` → `/june`)。
80
- 中身は `<SlideDeck>` を返す普通の React コンポーネントなので、`definePage` もナビも
81
- 通常のページと同じように効きます。
82
-
83
- ```tsx
84
- import { definePage } from "@squadbase/vantage";
85
- import { Slide, SlideDeck } from "@squadbase/vantage/slide";
86
-
87
- export const page = definePage({ title: "6月度レビュー", navLabel: "6月度" });
88
-
89
- export default function Deck() {
90
- return (
91
- <SlideDeck>
92
- <Slide>…</Slide>
93
- <Slide>…</Slide>
94
- </SlideDeck>
95
- );
96
- }
97
- ```
98
-
99
- 1920×1080 の固定キャンバスに書き、画面サイズに合わせて縮小されます。キーボードとクリックで
100
- 送れ、左のスライド一覧は `L` で開閉、`F` で全画面、ツールバーから pptx を書き出せます。詳しくは
101
- [UI とテーマ](ui-and-theming)。
102
-
103
- > [!WARNING]
104
- > `.slide` を付けられるのは**ルートになるページモジュールだけ**です。`_layout.slide.tsx` や
105
- > `deck.slide.ts` は `INVALID_PAGE_VARIANT` エラーになります。また `june.slide.tsx` と
106
- > `june.tsx`、`sales.csv` と `sales.tsx` はいずれも同じ URL に解決するので `ROUTE_CONFLICT` です。
107
-
108
- ### ドキュメント(`.doc.tsx`)
109
-
110
- `.doc` も**ページ種別サフィックス**です(`src/june-summary.doc.tsx` → `/june-summary`)。上から下へ
111
- 読む文章のページで、中身は `<Document>` を返す普通の React コンポーネントです。
112
-
113
- ```tsx
114
- import { definePage } from "@squadbase/vantage";
115
- import { Document } from "@squadbase/vantage/doc";
116
-
117
- export const page = definePage({ title: "6月度サマリー" });
118
-
119
- export default function JuneSummary() {
120
- return (
121
- <Document>
122
- <h1>6月度サマリー</h1>
123
- <p>6月の売上は目標を 5% 上回りました。</p>
124
- <table>…</table>
125
- </Document>
126
- );
127
- }
128
- ```
129
-
130
- `<Document>` の中の見出し・段落・リスト・表・引用・コードには、クラスを書かなくてもスタイルが
131
- 当たります。詳しくは [UI とテーマ](ui-and-theming)。`.slide` と同じく、`.doc` を付けられるのは
132
- ルートになるページモジュールだけです。
54
+ それぞれの書き方・できること・制限、そして**置いてもページにならないファイル**(`.xls`・`.tsv`・
55
+ `.md` など)は [ページの種類](page-types) にまとめてあります。
133
56
 
134
57
  ## ルーティングされないディレクトリ
135
58
 
@@ -289,3 +212,4 @@ setSegments((prev) => [...prev, "enterprise"]);
289
212
  ## 次に読む
290
213
 
291
214
  - [ページと definePage](pages-and-metadata) — ページの契約とメタデータ
215
+ - [ページの種類](page-types) — スライド・ドキュメント・CSV・Excel
@@ -0,0 +1,41 @@
1
+ # Alert Dialog
2
+
3
+ > 取り消せない操作の前に確認するモーダル。
4
+
5
+ 削除など取り消せない操作の前に、ユーザーの明示的な返答を求めるモーダルです。
6
+ [`Dialog`](ui/dialog) と違い、背景のクリックでは閉じません。
7
+
8
+ ```tsx
9
+ import {
10
+ AlertDialog,
11
+ AlertDialogTrigger,
12
+ AlertDialogContent,
13
+ AlertDialogHeader,
14
+ AlertDialogMedia,
15
+ AlertDialogTitle,
16
+ AlertDialogDescription,
17
+ AlertDialogFooter,
18
+ AlertDialogCancel,
19
+ AlertDialogAction,
20
+ } from "@squadbase/vantage/ui";
21
+ ```
22
+
23
+ ## パーツ
24
+
25
+ | パーツ | 役割 |
26
+ | --- | --- |
27
+ | `AlertDialog` | 状態。`open` / `defaultOpen` / `onOpenChange` |
28
+ | `AlertDialogTrigger` | 開くきっかけ。`render` でボタンにする |
29
+ | `AlertDialogContent` | 本体。`size` で幅を選ぶ |
30
+ | `AlertDialogMedia` | 見出し横のアイコン枠 |
31
+ | `AlertDialogHeader` / `AlertDialogTitle` / `AlertDialogDescription` | 見出し |
32
+ | `AlertDialogFooter` | ボタン行 |
33
+ | `AlertDialogCancel` | 閉じるボタン(既定 `variant="outline"`) |
34
+ | `AlertDialogAction` | 実行ボタン。`Button` の props をそのまま取る |
35
+
36
+ | Prop | Type | Default | 説明 |
37
+ | --- | --- | --- | --- |
38
+ | `size` | `"default" \| "sm"` | `"default"` | `AlertDialogContent` に渡す。`sm` はボタンを 2 列に並べる。 |
39
+
40
+ `AlertDialogAction` は**押しても自動では閉じません**。処理が終わったら `open` を `false` に
41
+ するか、閉じてよいなら `AlertDialogCancel` と同じく `render` で包んでください。