@squadbase/vantage 0.6.2-dev1.25d59a0 → 0.6.2-dev1.26a3cce

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 (211) hide show
  1. package/dist/{build-X5NVCQKT.js → build-U7GO26HR.js} +7 -7
  2. package/dist/{build-X5NVCQKT.js.map → build-U7GO26HR.js.map} +1 -1
  3. package/dist/{check-ZBIH422T.js → check-MRVAIHG5.js} +5 -5
  4. package/dist/{check-ZBIH422T.js.map → check-MRVAIHG5.js.map} +1 -1
  5. package/dist/chunk-2IAPIOPS.js +152 -0
  6. package/dist/chunk-2IAPIOPS.js.map +1 -0
  7. package/dist/chunk-57GHR5LN.js +163 -0
  8. package/dist/chunk-57GHR5LN.js.map +1 -0
  9. package/dist/chunk-6OTTGAPO.js +44 -0
  10. package/dist/chunk-6OTTGAPO.js.map +1 -0
  11. package/dist/{chunk-XPQSTZUU.js → chunk-7S52M2SL.js} +4 -3
  12. package/dist/chunk-7S52M2SL.js.map +1 -0
  13. package/dist/{chunk-V3LF7BE7.js → chunk-ANZLVSEP.js} +4 -5
  14. package/dist/chunk-ANZLVSEP.js.map +1 -0
  15. package/dist/{chunk-XQUSGIDG.js → chunk-CKWPK4RO.js} +10 -3
  16. package/dist/chunk-CKWPK4RO.js.map +1 -0
  17. package/dist/chunk-JXFCSF3K.js +673 -0
  18. package/dist/chunk-JXFCSF3K.js.map +1 -0
  19. package/dist/{chunk-7DZGJQ3P.js → chunk-PJ4SPXHS.js} +23 -6
  20. package/dist/chunk-PJ4SPXHS.js.map +1 -0
  21. package/dist/{chunk-HKSVYMYJ.js → chunk-QOXXOFGL.js} +61 -929
  22. package/dist/chunk-QOXXOFGL.js.map +1 -0
  23. package/dist/{chunk-CEXAQQ5W.js → chunk-S5MDTHH7.js} +180 -18
  24. package/dist/chunk-S5MDTHH7.js.map +1 -0
  25. package/dist/{chunk-2ICNHUG6.js → chunk-SDJTTMLK.js} +64 -7
  26. package/dist/chunk-SDJTTMLK.js.map +1 -0
  27. package/dist/{chunk-WAMZWZJB.js → chunk-SHZM3EXB.js} +19 -8
  28. package/dist/chunk-SHZM3EXB.js.map +1 -0
  29. package/dist/{chunk-JKLLFVEU.js → chunk-UWSQUHX6.js} +4 -99
  30. package/dist/chunk-UWSQUHX6.js.map +1 -0
  31. package/dist/cli.js +6 -6
  32. package/dist/client/index.d.ts +2 -0
  33. package/dist/client/index.js +8 -2
  34. package/dist/client/index.js.map +1 -1
  35. package/dist/components/index.d.ts +11 -247
  36. package/dist/components/index.js +5 -2
  37. package/dist/delta-text-CvwBGJ95.d.ts +15 -0
  38. package/dist/{dev-4XEDTELV.js → dev-O42JFQ64.js} +7 -7
  39. package/dist/{dev-4XEDTELV.js.map → dev-O42JFQ64.js.map} +1 -1
  40. package/dist/doc/index.d.ts +215 -2
  41. package/dist/doc/index.js +307 -3
  42. package/dist/doc/index.js.map +1 -1
  43. package/dist/{doctor-5E2VEZPK.js → doctor-YD3XAAOT.js} +5 -5
  44. package/dist/{doctor-5E2VEZPK.js.map → doctor-YD3XAAOT.js.map} +1 -1
  45. package/dist/format-U0cQl069.d.ts +243 -0
  46. package/dist/query/index.js +2 -2
  47. package/dist/{routes-3SGAFDMC.js → routes-PVKNT777.js} +4 -4
  48. package/dist/{routes-3SGAFDMC.js.map → routes-PVKNT777.js.map} +1 -1
  49. package/dist/slide/index.d.ts +272 -1
  50. package/dist/slide/index.js +972 -2
  51. package/dist/slide/index.js.map +1 -1
  52. package/dist/table/index.js +7 -4
  53. package/dist/table/index.js.map +1 -1
  54. package/dist/ui/index.d.ts +4 -1
  55. package/dist/ui/index.js +3 -3
  56. package/dist/ui/index.js.map +1 -1
  57. package/dist/{upgrade-JHXZBGQS.js → upgrade-6DT7ADRP.js} +4 -4
  58. package/dist/{upgrade-JHXZBGQS.js.map → upgrade-6DT7ADRP.js.map} +1 -1
  59. package/dist/vite/index.js +3 -3
  60. package/docs/en/agent-skills.md +1 -1
  61. package/docs/en/changelog.md +2 -0
  62. package/docs/en/components.md +13 -2
  63. package/docs/en/doc/delta-text.md +40 -0
  64. package/docs/en/doc/doc-action-items.md +49 -0
  65. package/docs/en/doc/doc-callout.md +38 -0
  66. package/docs/en/doc/doc-data-table.md +60 -0
  67. package/docs/en/doc/doc-executive-summary.md +64 -0
  68. package/docs/en/doc/doc-figure.md +56 -0
  69. package/docs/en/doc/doc-key-findings.md +61 -0
  70. package/docs/en/doc/doc-kpi-scorecard.md +80 -0
  71. package/docs/en/doc/doc-notes-and-sources.md +43 -0
  72. package/docs/en/doc/doc-report-header.md +46 -0
  73. package/docs/en/pages-and-metadata.md +15 -0
  74. package/docs/en/parts/area-chart.md +99 -0
  75. package/docs/en/parts/bar-chart.md +91 -0
  76. package/docs/en/parts/bar-list.md +50 -0
  77. package/docs/en/parts/category-bar.md +37 -0
  78. package/docs/en/parts/chart-frame.md +39 -0
  79. package/docs/en/parts/delta.md +4 -3
  80. package/docs/en/parts/donut-chart.md +72 -0
  81. package/docs/en/parts/funnel-steps.md +2 -1
  82. package/docs/en/parts/heatmap.md +53 -0
  83. package/docs/en/parts/kpi-card.md +2 -1
  84. package/docs/en/parts/legend.md +35 -0
  85. package/docs/en/parts/line-chart.md +94 -0
  86. package/docs/en/parts/progress-circle.md +33 -0
  87. package/docs/en/parts/sample-data.md +39 -0
  88. package/docs/en/parts/scatter-chart.md +56 -0
  89. package/docs/en/parts/tracker.md +36 -0
  90. package/docs/en/parts/updated-at.md +30 -0
  91. package/docs/en/parts/waterfall-chart.md +56 -0
  92. package/docs/en/slide/slide-chart-full.md +48 -0
  93. package/docs/en/slide/slide-chart-insight.md +52 -0
  94. package/docs/en/slide/slide-columns.md +46 -0
  95. package/docs/en/slide/slide-comparison.md +68 -0
  96. package/docs/en/slide/slide-cover.md +39 -0
  97. package/docs/en/slide/slide-exec-summary.md +47 -0
  98. package/docs/en/slide/slide-heading.md +38 -0
  99. package/docs/en/slide/slide-kpi-grid.md +55 -0
  100. package/docs/en/slide/slide-kpi-hero.md +58 -0
  101. package/docs/en/slide/slide-next-actions.md +49 -0
  102. package/docs/en/slide/slide-scorecard-table.md +54 -0
  103. package/docs/en/slide/slide-section.md +44 -0
  104. package/docs/en/slide/slide-source-line.md +34 -0
  105. package/docs/en/ui/alert-dialog.md +42 -0
  106. package/docs/en/ui/avatar.md +31 -0
  107. package/docs/en/ui/combobox.md +74 -0
  108. package/docs/en/ui/drawer.md +41 -0
  109. package/docs/en/ui/empty.md +1 -1
  110. package/docs/en/ui/error-state.md +4 -3
  111. package/docs/en/ui/field.md +42 -0
  112. package/docs/en/ui/hover-card.md +21 -0
  113. package/docs/en/ui/kbd.md +17 -0
  114. package/docs/en/ui/loading.md +1 -1
  115. package/docs/en/ui/pagination.md +36 -0
  116. package/docs/en/ui/radio-group.md +21 -0
  117. package/docs/en/ui/toast.md +44 -0
  118. package/docs/en/ui/toggle-group.md +4 -3
  119. package/docs/index.json +857 -77
  120. package/docs/ja/agent-skills.md +1 -1
  121. package/docs/ja/changelog.md +2 -0
  122. package/docs/ja/components.md +12 -1
  123. package/docs/ja/doc/delta-text.md +40 -0
  124. package/docs/ja/doc/doc-action-items.md +49 -0
  125. package/docs/ja/doc/doc-callout.md +38 -0
  126. package/docs/ja/doc/doc-data-table.md +60 -0
  127. package/docs/ja/doc/doc-executive-summary.md +64 -0
  128. package/docs/ja/doc/doc-figure.md +56 -0
  129. package/docs/ja/doc/doc-key-findings.md +61 -0
  130. package/docs/ja/doc/doc-kpi-scorecard.md +80 -0
  131. package/docs/ja/doc/doc-notes-and-sources.md +43 -0
  132. package/docs/ja/doc/doc-report-header.md +46 -0
  133. package/docs/ja/page-types/slide.md +1 -0
  134. package/docs/ja/pages-and-metadata.md +15 -0
  135. package/docs/ja/parts/area-chart.md +49 -25
  136. package/docs/ja/parts/bar-chart.md +50 -24
  137. package/docs/ja/parts/bar-list.md +31 -8
  138. package/docs/ja/parts/chart-frame.md +36 -0
  139. package/docs/ja/parts/delta.md +5 -4
  140. package/docs/ja/parts/donut-chart.md +45 -26
  141. package/docs/ja/parts/funnel-steps.md +27 -8
  142. package/docs/ja/parts/heatmap.md +45 -0
  143. package/docs/ja/parts/kpi-card.md +2 -1
  144. package/docs/ja/parts/legend.md +36 -0
  145. package/docs/ja/parts/line-chart.md +48 -22
  146. package/docs/ja/parts/sample-data.md +61 -0
  147. package/docs/ja/parts/scatter-chart.md +69 -0
  148. package/docs/ja/parts/updated-at.md +27 -0
  149. package/docs/ja/parts/waterfall-chart.md +61 -0
  150. package/docs/ja/slide/slide-chart-full.md +48 -0
  151. package/docs/ja/slide/slide-chart-insight.md +52 -0
  152. package/docs/ja/slide/slide-columns.md +46 -0
  153. package/docs/ja/slide/slide-comparison.md +68 -0
  154. package/docs/ja/slide/slide-cover.md +39 -0
  155. package/docs/ja/slide/slide-exec-summary.md +47 -0
  156. package/docs/ja/slide/slide-heading.md +38 -0
  157. package/docs/ja/slide/slide-kpi-grid.md +55 -0
  158. package/docs/ja/slide/slide-kpi-hero.md +58 -0
  159. package/docs/ja/slide/slide-next-actions.md +49 -0
  160. package/docs/ja/slide/slide-scorecard-table.md +54 -0
  161. package/docs/ja/slide/slide-section.md +44 -0
  162. package/docs/ja/slide/slide-source-line.md +34 -0
  163. package/docs/ja/ui/empty.md +1 -1
  164. package/docs/ja/ui/error-state.md +4 -3
  165. package/docs/ja/ui/loading.md +1 -1
  166. package/docs/ja/ui/toggle-group.md +4 -3
  167. package/package.json +2 -2
  168. package/registry/ui/area-chart.tsx +45 -19
  169. package/registry/ui/bar-chart.tsx +45 -19
  170. package/registry/ui/bar-list.tsx +44 -17
  171. package/registry/ui/box-plot-chart.tsx +45 -19
  172. package/registry/ui/category-bar.tsx +44 -17
  173. package/registry/ui/chart-frame.tsx +44 -17
  174. package/registry/ui/delta.tsx +11 -8
  175. package/registry/ui/donut-chart.tsx +46 -19
  176. package/registry/ui/echart.tsx +171 -54
  177. package/registry/ui/heatmap.tsx +45 -19
  178. package/registry/ui/histogram-chart.tsx +45 -19
  179. package/registry/ui/kpi-card.tsx +9 -4
  180. package/registry/ui/legend.tsx +44 -17
  181. package/registry/ui/line-chart.tsx +45 -19
  182. package/registry/ui/page-shell.tsx +7 -7
  183. package/registry/ui/paired-chart.tsx +45 -19
  184. package/registry/ui/sample-data.tsx +1 -1
  185. package/registry/ui/scatter-chart.tsx +45 -19
  186. package/registry/ui/slider.tsx +1 -1
  187. package/registry/ui/status-badge.tsx +8 -8
  188. package/registry/ui/tooltip.tsx +6 -2
  189. package/registry/ui/tracker.tsx +9 -3
  190. package/registry/ui/trend-indicator.tsx +2 -2
  191. package/registry/ui/waterfall-chart.tsx +45 -19
  192. package/skills/vantage-design/SKILL.md +54 -54
  193. package/skills/vantage-design/references/extract.md +26 -27
  194. package/skills/vantage-design/references/format.md +12 -172
  195. package/skills/vantage-design/references/presets.md +50 -110
  196. package/skills/vantage-pitfalls/SKILL.md +5 -0
  197. package/skills/vantage-slide/SKILL.md +54 -36
  198. package/templates/AGENTS.md +32 -16
  199. package/templates/agents/doc.md +48 -0
  200. package/templates/agents/page.md +23 -2
  201. package/templates/agents/slide.md +77 -3
  202. package/theme.css +23 -19
  203. package/dist/chunk-2ICNHUG6.js.map +0 -1
  204. package/dist/chunk-7DZGJQ3P.js.map +0 -1
  205. package/dist/chunk-CEXAQQ5W.js.map +0 -1
  206. package/dist/chunk-HKSVYMYJ.js.map +0 -1
  207. package/dist/chunk-JKLLFVEU.js.map +0 -1
  208. package/dist/chunk-V3LF7BE7.js.map +0 -1
  209. package/dist/chunk-WAMZWZJB.js.map +0 -1
  210. package/dist/chunk-XPQSTZUU.js.map +0 -1
  211. package/dist/chunk-XQUSGIDG.js.map +0 -1
@@ -7,8 +7,8 @@
7
7
  > このファイルと `agents/*.md` は、いずれも **Vantage フレームワークが所有する正本**の
8
8
  > コピーです。手で書き換えても、`vantage upgrade` を実行するとフレームワーク同梱の正本から
9
9
  > 再同期されて上書きされます。アプリ固有のメモは別ファイル(例: `README.md`)に書いてください。
10
- > 例外はプロジェクトルートの `DESIGN.md` で、これは**ユーザーが所有**します(`vantage upgrade` も
11
- > `vantage add agents` も触らない。→「デザインの意図(DESIGN.md)」)。
10
+ > 例外はプロジェクトルートの任意の `DESIGN.md` で、これは**ユーザーが所有**します(`vantage upgrade` も
11
+ > `vantage add agents` も触らない。→「見た目の規約」)。
12
12
  >
13
13
  > 手順を伴う踏み込んだワークフローは、同梱の Claude Code Skill に分かれています。このファイルは
14
14
  > 「地図」、`agents/*.md` は「種類ごとの静的リファレンス」、Skill は「手順書」という役割分担です。
@@ -47,6 +47,9 @@ UI キット・開発サーバー・API サーバー・ビルドはすべて Van
47
47
  - **`definePage` の値はリテラルで書く。** title/description/navLabel はビルド時に静的抽出される
48
48
  ため、変数・関数呼び出し・テンプレート補間は使わない。`page` エクスポートはランタイムでは
49
49
  読まれない。
50
+ - **アプリの表示言語は、ルート `_layout.tsx` の `export const lang = "en"`(リテラル。BCP 47)で指定する。**
51
+ `<html lang>` になり、日本語の文節改行とスライドの文言切り替えに効く。未指定は `"en"`。
52
+ 画面の文言・docs・コメントは、ユーザーが使う言語に合わせる(`lang` もその言語にする)。
50
53
 
51
54
  ## ディレクトリ構造(ページをどこに置くか)
52
55
 
@@ -95,12 +98,12 @@ root/
95
98
  | `@squadbase/vantage/ui` | shadcn/ui(Base UI バリアント)プリミティブ(`Button`・`Loading`・`ErrorState`・`Empty` ほか) |
96
99
  | `@squadbase/vantage/components` | 複合パーツ(`PageShell`・`DashboardCardPreset`・`DataTablePreset`、KPI の `KpiCard`・`Delta`、型付きチャート `LineChart`・`BarChart`・`AreaChart`・`DonutChart`・`BarList` ほか、`EChart`、書式の `formatValue`) |
97
100
  | `@squadbase/vantage/table` | `FilePageView`・`TableViewer`(データファイルページの表ビューア) |
98
- | `@squadbase/vantage/slide` | `SlideDeck`・`Slide`・`Steps`・`Step`・`MorphElement`・`useSlideNumber`・`useIsActiveSlide`(スライド専用。1920×1080 の固定キャンバス) |
99
- | `@squadbase/vantage/doc` | `Document`(ドキュメント専用。中の素の HTML 要素に見出し・表などのスタイルが当たる) |
101
+ | `@squadbase/vantage/slide` | `SlideDeck`・`Slide`・`Steps`・`Step`・`MorphElement`・`useSlideNumber`・`useIsActiveSlide`、1 枚分の block `SlideCover`・`SlideExecSummary`・`SlideKpiHero`・`SlideKpiGrid`・`SlideChartInsight`・`SlideScorecardTable`・`SlideNextActions`・`SlideSection`・`SlideComparison`・`SlideChartFull`、手書きの 1 枚に使う部品 `SlideHeading`・`SlideSourceLine`・`SlideColumns`・`SlideColumn`・`DeltaText`(スライド専用。1920×1080 の固定キャンバス) |
102
+ | `@squadbase/vantage/doc` | `Document`、ドキュメント用の block `DocReportHeader`・`DocExecutiveSummary`・`DocKpiScorecard`・`DocFigure`・`DocDataTable`・`DocCallout`・`DocKeyFindings`・`DocActionItems`・`DocNotesAndSources`、部品 `DeltaText`(ドキュメント専用。中の素の HTML 要素に見出し・表などのスタイルが当たる) |
100
103
  | `@squadbase/vantage/markdown` | `MarkdownRenderer`(Shiki を隔離するための専用サブパス) |
101
104
  | `@squadbase/vantage/server` | `ApiContext`・`ApiHandler`・`HttpError`・`isHttpError`・`json`(server/ 側でのみ使う) |
102
105
 
103
- **KPI は `KpiCard`、増減は `Delta`(`comparison` と `polarity` を渡す)。** 向き・率・色は値から計算
106
+ **KPI は `KpiCard`、増減は `Delta`(`comparison` を渡し、下がって良い指標は `betterWhen="down"`)。** 向き・率・色は値から計算
104
107
  されるので手で渡さない。`TrendIndicator` は非推奨(`direction` を手で渡すので値と食い違いうる)。props は
105
108
  `vantage docs kpi-card` / `vantage docs delta` を引く。
106
109
 
@@ -123,17 +126,30 @@ import { KpiCard, Delta } from "@squadbase/vantage/components";
123
126
  - `server/` が**無い** → 外部 API を直接叩くなら `useQuery`(→ `agents/page.md`)。自前の API が
124
127
  要るようになったら `server/api/*.ts` を足すだけでよい(設定変更は不要)。
125
128
 
126
- ## デザインの意図(DESIGN.md)
129
+ ## 見た目の規約
127
130
 
128
- プロジェクトルートに `DESIGN.md` があれば、**UI(ページ・スライド・コンポーネント)を書く前に
129
- 読む。** 色・チャート・書体・レイアウトの使い分けがトークン名で書いてあるので、それに従って
130
- トークンで書く(値は `styles.css` にあり、`DESIGN.md` には色コードを書かない)。
131
+ 色・書体・角丸などの**値と色の割り当ては、テーマ(`styles.css` の `/* theme: <name> */` マーカー以降の
132
+ 上書き)だけが持つ。** ここには値を書かず、使い分けの規則だけを置く。UI(ページ・スライド・
133
+ コンポーネント)はこの規則に従い、色は必ずトークンで指定する(色コード・素のパレットクラスは書かない)。
131
134
 
132
- - **会話中の指示は `DESIGN.md` より優先する。** 同じ指示が繰り返されたら、`DESIGN.md` への
133
- 反映をユーザーに提案する。
134
- - **「色を変えて」「ブランドに合わせて」などデザイン全体の変更は、ファイルごとに直さない。**
135
- Skill `vantage-design` の手順で `DESIGN.md` と `styles.css` をまとめて更新する。
136
- - `DESIGN.md` はユーザーの持ち物。`vantage upgrade` は書き換えない。
135
+ - **意味トークン:** 良い = `positive`、悪い = `negative`、注意 = `warning`、情報 = `info`、
136
+ 中立 = `neutral`。系列色は `chart-1`〜`chart-5` を番号順に使う(5 系列まで。超えるなら「その他」に
137
+ まとめる)。増減の良否は指標の性質(コスト減・解約率減は良い)で決めて
138
+ positive / negative に分け(`KpiCard` / `Delta` の `betterWhen`。下がって良い指標は `betterWhen="down"`)、向きは ▲▼ や符号で表す。
139
+ - **レイアウト:** 内容はカードで包む。順序は KPI → チャート → 表。値が 1 つなら KPI にする
140
+ (1 本の棒グラフにしない)。強調は 1 画面(スライドは 1 枚)に 1 か所。数値には単位と比較対象を添える。
141
+ - **Do:** トークンで色を指定する / 色の意味をアプリ全体でそろえる / チャートのタイトルに結論を書く。
142
+ - **Don't:** 色コードや素のパレットクラスを書く / `dark:` を並べる / 3D・装飾目的のグラデーション・
143
+ 円グラフの多用 / 同じチャートで `negative` を普通の系列色に使う。
144
+ - スライド固有の規則は `agents/slide.md`。
145
+
146
+ **任意の `DESIGN.md`:** プロジェクトルートにあれば読んで従う(密度・スライドの見出し方針・
147
+ ブランド素材などユーザー固有の意図)。AGENTS.md の規則に加えて従うが、**色の割り当てはテーマを優先**
148
+ する。新規には作らない。ユーザーの持ち物で、`vantage upgrade` は書き換えも削除もしない。
149
+
150
+ **デザイン変更の依頼**(「もっと落ち着いた色に」「ブランドに合わせて」など)は、ファイルごとに
151
+ 直さず、テーマの切り替えかスタイルシートの上書きで完結させる。`DESIGN.md` には記録しない。今のテーマ名は
152
+ `styles.css` の `/* theme: <name> */` マーカーから読む。手順は Skill `vantage-design`。
137
153
 
138
154
  ## 何を書くか → どのファイルを読むか
139
155
 
@@ -172,7 +188,7 @@ vantage docs button # 1 ページ表示(短縮名。ui/button に解
172
188
  vantage docs parts/data-table # 完全な slug でも引ける
173
189
  vantage docs data-table --json # { slug, title, description, section, content }
174
190
  vantage docs --all # 全ページを連結(まとめて読み込む用)
175
- vantage docs routing --lang en # 英語版(既定は ja)
191
+ vantage docs routing --lang en # 英語版(`--lang` 省略時は ja。アプリの文言の言語とは無関係)
176
192
  ```
177
193
 
178
194
  props の表・使用例・落とし穴はコンポーネントのページに載っている。**推測で props を書く前に
@@ -210,7 +226,7 @@ body・レスポンスの status と形)まで出る。`vantage check --json` /
210
226
  - **`vantage-app`** — アプリを一から作る / 構成を広げるときの進め方と検証の順序
211
227
  - **`vantage-add-feature`** — 既存アプリに page / api / ui を 1 つ足す定型
212
228
  - **`vantage-slide`** — `.slide.tsx` でスライドデッキを書く(キャンバスの予算・段階表示・pptx 書き出し)
213
- - **`vantage-design`** — `DESIGN.md` と `styles.css` をまとめて作る / 直す(配色・書体・ブランド合わせ)
229
+ - **`vantage-design`** — テーマの切り替え・`styles.css` の上書きで見た目を直す(配色・書体・ブランド合わせ)
214
230
  - **`vantage-pitfalls`** — Base UI(≠ Radix)の癖など、静かに壊れる落とし穴のリファレンス
215
231
  - **`project-storage`** — Squadbase の Project Storage(アップロード済みファイル)をブラウザから読み書きする
216
232
 
@@ -15,6 +15,13 @@ import { definePage } from "@squadbase/vantage"
15
15
  import { BarChart } from "@squadbase/vantage/components"
16
16
  import { Document } from "@squadbase/vantage/doc"
17
17
 
18
+ const weekly = [
19
+ { week: "第1週", 売上: 1180 },
20
+ { week: "第2週", 売上: 1240 },
21
+ { week: "第3週", 売上: 1210 },
22
+ { week: "第4週", 売上: 1620 },
23
+ ]
24
+
18
25
  export const page = definePage({ title: "6月度サマリー", navLabel: "6月度サマリー" })
19
26
  export default function JuneSummary() {
20
27
  return (
@@ -50,6 +57,30 @@ export default function JuneSummary() {
50
57
  - **ページ全体を包むのは `<Document>` だけ。** `PageShell` などのダッシュボード用の枠で包まない
51
58
  (本文の幅と余白は `<Document>` が決めます)。
52
59
 
60
+ ## まず block を探す
61
+
62
+ 1 節分の中身は、手で組む前に `@squadbase/vantage/doc` の block から探します(`<Document>` の直下に
63
+ 並べる。多くは 1 block = 1 節。`DocCallout`・`DocFigure`・`DocDataTable` は節ではなく、節の中(本文の間)に置く部品)。props は `vantage docs <name>`(例: `vantage docs doc-kpi-scorecard`)で引く。
64
+
65
+ | block | 用途 |
66
+ | --- | --- |
67
+ | `DocReportHeader` | レポートの冒頭(タイトル・サブタイトル・対象期間・データ時点・作成者・出典) |
68
+ | `DocExecutiveSummary` | 結論を先に述べる要約の節 |
69
+ | `DocKpiScorecard` | 主要指標をまとめたスコアカード |
70
+ | `DocFigure` | 図表 1 つとキャプション(チャートは children で渡す) |
71
+ | `DocDataTable` | 素の `table` による表 |
72
+ | `DocCallout` | 補足・示唆・注意・決定の囲み(`kind`: `note` / `insight` / `warning` / `decision`) |
73
+ | `DocKeyFindings` | 主要な発見の箇条 |
74
+ | `DocActionItems` | 次のアクション(担当・期限つき) |
75
+ | `DocNotesAndSources` | 末尾の注記・用語の定義・データソースをまとめた節 |
76
+
77
+ **props の渡し方は block 間で共通。** 数値は `value: number | null` と `format`(整形は block がする。表示を上書きするときだけ `display`。`null` は「—」)。前期比などは `delta: { value, format? }` と `comparisonLabel`(例 `"前年同期比"`)、良し悪しは指標ごとの `betterWhen`(`"up"` が既定、コストなど下がるほど良いものは `"down"`。向きは block が符号から出す)。目標は `target: number`。出典は `source`、時点は `asOf` に**日付だけ**(例 `"2026-09-30"`。「データ時点」は block が付けるので「時点」を書かない)。時系列は、単一系列なら `{ x, y }[]`(`trend`)。
78
+
79
+ 本文の中で増減を書くときは `DeltaText`(部品。「▲ +3.2%」の形で、文字サイズは持たず置かれた行に従う。`value` `format` `betterWhen` `comparisonLabel`)を使う。節ではなく文の中に置く。
80
+
81
+ block が合わない**1 節だけ**を素の HTML 要素で手で書く。import 元は `@squadbase/vantage/doc` のままで、
82
+ block のための新しい import 元はありません。本文は文字列か ReactNode で渡し、Markdown 文字列は渡さない。
83
+
53
84
  ## 見た目を変える
54
85
 
55
86
  配色・書体・本文の幅は `--doc-*` の CSS 変数です。既定値はアプリのトークンへの別名なので、
@@ -74,3 +105,20 @@ export default function JuneSummary() {
74
105
  `.doc` を付けられるのはルートになるページモジュールだけで、`_layout.doc.tsx` などは
75
106
  `INVALID_PAGE_VARIANT` エラーになります。`june.doc.tsx` と `june.tsx` は同じ URL に解決するので
76
107
  `ROUTE_CONFLICT` です。
108
+
109
+ ## ファイル形式の規約
110
+
111
+ 置き場所・URL・default export・`definePage` の書き方は全ページ共通(`agents/page.md` の
112
+ 「ページファイルの規約」)。ここではドキュメント固有のものだけを挙げます。
113
+
114
+ **MUST**
115
+
116
+ - ファイル名は `<name>.doc.tsx`(`.jsx` も可)。サフィックスは小文字で 1 つだけ。`.doc.mdx` は
117
+ `INVALID_PAGE_VARIANT`、`.DOC.tsx`・二重サフィックスは黙って通常ページになる
118
+ - default export は `<Document>` をルートに返す。フレームワークは包まない
119
+ - ドキュメントの部品は `@squadbase/vantage/doc` から import する
120
+
121
+ **SHOULD**
122
+
123
+ - `PageShell` で包まない・PDF の保存ボタンを自作しない(上の「書き方」)
124
+ - 数値はコードに直接書き、いつ時点の値かを本文に書く
@@ -4,7 +4,7 @@
4
4
  (ダッシュボード)を書くときに読んでください。前提となる不変条件・ディレクトリ構造は
5
5
  `AGENTS.md` を先に読んでいる想定です。
6
6
 
7
- プロジェクトルートに `DESIGN.md` があれば、書き始める前に読んで配色・書体・レイアウトの規則に従う。
7
+ 書き始める前に `AGENTS.md` の「見た目の規約」(と、あればプロジェクトルートの `DESIGN.md`)に従う。
8
8
 
9
9
  ## 最小アプリ(2 ファイル)
10
10
 
@@ -71,6 +71,7 @@ URL になる。各ページは**デフォルトエクスポートの React コ
71
71
  | `_404.tsx` | Not Found ページ |
72
72
  | `_error.tsx` | ルートが throw したときのエラーページ |
73
73
  | `monthly-report.slide.tsx` | `/monthly-report`(スライドデッキ。詳しくは `agents/slide.md`) |
74
+ | `june-summary.doc.tsx` | `/june-summary`(ドキュメント。詳しくは `agents/doc.md`) |
74
75
  | `sales-export.csv` | `/sales-export`(詳しくは `agents/csv.md`) |
75
76
  | `data/june.xlsx` | `/data/june`(詳しくは `agents/xlsx.md`) |
76
77
 
@@ -89,6 +90,26 @@ export default function MonthlyAnalysis() {
89
90
  }
90
91
  ```
91
92
 
93
+ ### ページファイルの規約(`.tsx` / `.slide.tsx` / `.doc.tsx` 共通)
94
+
95
+ **MUST**
96
+
97
+ - ページルートの配下に置く。`components/` などの走査対象外のディレクトリに置いたファイルはページに
98
+ ならず、エラーも出ない。`_` 始まりの名前は予約名(`_layout` / `_404` / `_error`)にだけ使う
99
+ (それ以外の `_` 始まりはページにならない。予約名にサフィックスを付けると `INVALID_PAGE_VARIANT`)
100
+ - URL はサフィックスと拡張子を除いたパスで決まる。同じ URL になる別ファイル(`june.tsx` /
101
+ `june.slide.tsx` / `june.doc.tsx` / `june.csv`)を並べない(`ROUTE_CONFLICT`)。テンプレートの
102
+ 未編集の `index.tsx` だけは例外で、`index.slide.tsx` / `index.doc.tsx` が `/` を取れる
103
+ - default export は React の関数コンポーネント(無いと `MISSING_DEFAULT_EXPORT`。関数かどうかは
104
+ 検査されない)
105
+ - `definePage({ ... })` にはオブジェクトリテラルを直接渡し、`title` / `description` / `navLabel` は
106
+ 文字列リテラルで書く。ビルド時に静的抽出されるので、変数・関数呼び出し・spread・shorthand・
107
+ `${}` を含むテンプレート文字列は**エラーにならず黙ってメタなし**になる
108
+
109
+ **SHOULD**
110
+
111
+ - `definePage` に `title` と `navLabel` を書く(ナビの表示名とブラウザのタブ名になる)
112
+
92
113
  ### ナビはルート一覧から組む
93
114
 
94
115
  `useRoutes()` がページルート一覧(スキャン順)を返すので、リンク配列を手で持たない。
@@ -109,7 +130,7 @@ routes.map((r) => (
109
130
  ```
110
131
 
111
132
  `RouteInfo`: `path`(`/sales/:id`)・`to`(`/sales/$id`)・`params`・`dynamic`・`index`・`label`・
112
- `title`・`description`・`navLabel`・`kind`(`"module"` | `"file"`)・`variant`(`"slide"`)。
133
+ `title`・`description`・`navLabel`・`kind`(`"module"` | `"file"`)・`variant`(`"slide"` | `"doc"`)。
113
134
  後ろの 2 つで、ナビをダッシュボード / スライド / データに分けたりアイコンを変えたりできます。
114
135
 
115
136
  ### フィルタ状態は URL に置く
@@ -4,7 +4,13 @@
4
4
  スライドデッキを書くときに読んでください。不変条件・ディレクトリ構造は `AGENTS.md` を
5
5
  先に読んでいる想定です。
6
6
 
7
- プロジェクトルートに `DESIGN.md` があれば、書き始める前に読んで「スライド」の節と配色・書体の規則に従う。
7
+ 書き始める前に `AGENTS.md` の「見た目の規約」(と、あればプロジェクトルートの `DESIGN.md`)に従う。
8
+ スライド固有の規則:
9
+
10
+ - 1 枚に 1 メッセージ。見出しに結論を書く。
11
+ - 色は `--slide-bg` / `--slide-fg` / `--slide-accent` / `--slide-muted` を使う(既定では
12
+ `--background` / `--foreground` / `--primary` / `--muted-foreground` に連動)。
13
+ - 強調色は 1 枚につき 1 か所まで。
8
14
 
9
15
  ## スライドは `.slide.tsx` で書く
10
16
 
@@ -19,6 +25,7 @@
19
25
  - 新規プロジェクトでまだ `/` が空いている場合のみ、`index.slide.tsx` を使ってよい。
20
26
 
21
27
  ```tsx
28
+ import { definePage } from "@squadbase/vantage"
22
29
  import { Slide, SlideDeck } from "@squadbase/vantage/slide"
23
30
 
24
31
  export const page = definePage({ title: "6月度レビュー", navLabel: "6月度" })
@@ -34,8 +41,10 @@ export default function Deck() {
34
41
 
35
42
  **`<Slide>` は `<SlideDeck>` の直接の子に書く。** `SlideDeck` は直下の `<Slide>` 要素だけを数えるので、
36
43
  `<Slide>` を自作コンポーネント(`<Slide1 />` など)や Fragment で包むと 1 枚も数えられず「1 / 0」に
37
- なります(`{items.map((x) => <Slide key={x.id}>…</Slide>)}` のような配列は可)。共通の部品は
38
- `<Slide>` の**中**に置くコンポーネントとして切り出します(`<Slide><CoverPage /></Slide>`)。
44
+ なります(`{items.map((x) => <Slide key={x.id}>…</Slide>)}` のような配列はファイル形式としては可。
45
+ 1 枚の中で視覚要素を `map` で量産しない方針は `vantage-slide` skill の「繰り返す要素は `map` ではなく
46
+ コンポーネント」)。共通の部品は `<Slide>` の**中**に置くコンポーネントとして切り出します
47
+ (`<Slide><CoverPage /></Slide>`)。
39
48
 
40
49
  1920×1080 の固定キャンバスに絶対 px で書き、画面サイズに合わせて縮小されます。キー / クリックで
41
50
  送れ、左のスライド一覧(サムネイル列)は `L` で開閉、`F` で全画面、ツールバーから pptx を
@@ -51,3 +60,68 @@ pptx が壊れる条件、説明と図表のデータ時点の揃え方)。
51
60
  `.slide` を付けられるのはルートになるページモジュールだけで、`_layout.slide.tsx` などは
52
61
  `INVALID_PAGE_VARIANT` エラーになります。`june.slide.tsx` と `june.tsx` は同じ URL に解決するので
53
62
  `ROUTE_CONFLICT` です。
63
+
64
+ ## まず block を探す
65
+
66
+ 1 枚分の中身は、手で組む前に `@squadbase/vantage/slide` の block から探します(`<Slide>` の**中**に
67
+ 置く。ルートは 100% で、`<Slide>` 自体は持たない)。props は `vantage docs <name>`(例:
68
+ `vantage docs slide-kpi-hero`)で引く。
69
+
70
+ | block | 用途 |
71
+ | --- | --- |
72
+ | `SlideCover` | 表紙(タイトル・サブタイトル・期間) |
73
+ | `SlideExecSummary` | 結論を先に述べるエグゼクティブサマリー |
74
+ | `SlideKpiHero` | 主要な KPI 1 つを大きく見せる |
75
+ | `SlideKpiGrid` | 複数の KPI を並べる |
76
+ | `SlideChartInsight` | チャート 1 つと、そこから読み取れること |
77
+ | `SlideScorecardTable` | 指標と目標・達成度を表にしたスコアカード |
78
+ | `SlideNextActions` | 次のアクション(担当・期限つき) |
79
+ | `SlideSection` | 章の扉(`items` を渡すと番号付きのアジェンダ。`current` の章を強調) |
80
+ | `SlideComparison` | A vs B・前後の 2〜3 列比較(各列に見出し・主要数値・箇条) |
81
+ | `SlideChartFull` | チャートを全幅に置き、注記を 1 行添える |
82
+
83
+ **手書きの 1 枚には部品を使う。** block が合わない 1 枚でも、見出し・出典行・列割りは自前で組まず、
84
+ 次の部品を使う(どれも `@squadbase/vantage/slide`。1 枚にはならないので `<Slide>` の中に並べる)。
85
+
86
+ | 部品 | 用途 |
87
+ | --- | --- |
88
+ | `SlideHeading` | 見出し(`title`、任意で `eyebrow`)。1 枚の先頭に置く |
89
+ | `SlideSourceLine` | 足元の出典・時点(`source` `asOf`)。`page={{ current, total }}` を渡すとページ番号も出す |
90
+ | `SlideColumns` / `SlideColumn` | 12 列の割り付け(`<SlideColumn span={8}>` と `span={4}` など)。`align` は `start` / `center` / `stretch` |
91
+ | `DeltaText` | 増減の文字(「▲ +3.2%」)。`value` `format` `betterWhen` `comparisonLabel` |
92
+
93
+ `SlideSection` は `Steps` を持たない。順に見せたいときは呼び出し側で `<Steps>` で包む。
94
+
95
+ ```tsx
96
+ import { Slide, SlideDeck, SlideCover, SlideExecSummary } from "@squadbase/vantage/slide"
97
+ // <SlideDeck><Slide><SlideCover … /></Slide><Slide><SlideExecSummary … /></Slide></SlideDeck>
98
+ ```
99
+
100
+ **props の渡し方は block 間で共通。** 数値は `value: number | null` と `format`(整形は block がする。表示を上書きするときだけ `display`。`null` は「—」)。前期比などは `delta: { value, format? }` と `comparisonLabel`(例 `"前年同期比"`)、良し悪しは指標ごとの `betterWhen`(`"up"` が既定、コストなど下がるほど良いものは `"down"`。向きは block が符号から出す)。目標は `target: number`。出典は `source`(文字列)、時点は `asOf` に**日付だけ**(例 `"2026-09-30"`。「時点」は block が付けるので書かない)。時系列は、単一系列なら `{ x, y }[]`(kpi-hero の `trend`。scorecard に `trend` は無い)、複数系列なら `{ categories, series }`(chart-insight の `chart`)。
101
+
102
+ block が合わない**1 枚だけ**を手で書く(デッキ全体を手書きに切り替えない)。import 元は
103
+ `@squadbase/vantage/slide` のままで、block のための新しい import 元はありません。
104
+
105
+ ## ファイル形式の規約
106
+
107
+ 置き場所・URL・default export・`definePage` の書き方は全ページ共通(`agents/page.md` の
108
+ 「ページファイルの規約」)。ここではスライド固有のものだけを挙げます。**中身の値(キャンバス・
109
+ セーフエリア・グリッド・文字サイズ・余白)は `vantage-slide` skill を参照。**
110
+
111
+ **MUST**(破ると黙って壊れるものが多い。`vantage check` が拾うのは名前の誤りだけ)
112
+
113
+ - ファイル名は `<name>.slide.tsx`(`.jsx` も可)。サフィックスは小文字で 1 つだけ。`.slide.ts` は
114
+ `INVALID_PAGE_VARIANT`、`.SLIDE.tsx`・二重サフィックス・`.slide.test.tsx` は黙って通常ページになる
115
+ - default export は `<SlideDeck>` をルートに返す。フレームワークは包まない
116
+ - `<Slide>` は `<SlideDeck>` の直接の子(配列は可。Fragment・自作コンポーネントで包まない)
117
+ - `<Step>` は `<Steps>` の直接の子(包むと常に表示される)
118
+ - スライドの部品は `@squadbase/vantage/slide` から import する
119
+
120
+ **SHOULD**
121
+
122
+ - 1 ファイル = 1 デッキ。ヘルパーコンポーネント・定数も同じ `.slide.tsx` に書く
123
+ - 各 `<Slide>` のルート要素は `width: "100%"; height: "100%"` でキャンバスを埋める
124
+ - canvas に描くチャート(`EChart`)は `data-waitfor="canvas"` で包む(無いと pptx でそのスライドが白紙になりうる)
125
+ - pptx に出る中身をアプリの Context(router / query / テーマ)に依存させない
126
+ - `MorphElement` の `id` はページ内で一意にし、入れ子にしない。遷移先の `<Slide>` で `transition.morph` を有効にする
127
+ - pptx 用などの依存を追加しない(html-to-image / fflate は自動で入る)
package/theme.css CHANGED
@@ -1,6 +1,6 @@
1
1
  /* GENERATED by scripts/gen-theme.mjs — do not edit. Sources:
2
2
  * packages/squadkit/registry/theme/theme.css (UI part tokens)
3
- * packages/vantage/src/theme/framework.css (slide / document styles) */
3
+ * packages/squadkit/theme/slide-doc.css (slide / document styles) */
4
4
 
5
5
  /**
6
6
  * Vantage design tokens. Imported after `@import "tailwindcss"` by the
@@ -62,10 +62,10 @@
62
62
  sans-serif;
63
63
 
64
64
  --chart-1: oklch(0.55 0.2 262);
65
- --chart-2: oklch(0.7 0.14 215);
66
- --chart-3: oklch(0.6 0.23 295);
67
- --chart-4: oklch(0.63 0.24 330);
68
- --chart-5: oklch(0.78 0.19 125);
65
+ --chart-2: oklch(0.62 0.17 118);
66
+ --chart-3: oklch(0.5 0.19 352);
67
+ --chart-4: oklch(0.62 0.1 195);
68
+ --chart-5: oklch(0.44 0.18 300);
69
69
 
70
70
  /* Semantic status tokens — see the contract above the `@theme inline` block. */
71
71
  --positive: oklch(0.52 0.14 150);
@@ -115,16 +115,16 @@
115
115
  --accent: oklch(0.3 0.02 262);
116
116
  --accent-foreground: oklch(0.96 0.005 255);
117
117
  --destructive: oklch(0.704 0.191 22.216);
118
- --destructive-foreground: oklch(0.985 0 0);
118
+ --destructive-foreground: oklch(0.145 0.02 262);
119
119
  --border: oklch(1 0 0 / 10%);
120
120
  --input: oklch(1 0 0 / 15%);
121
121
  --ring: oklch(0.6 0.15 262);
122
122
 
123
- --chart-1: oklch(0.55 0.2 262);
124
- --chart-2: oklch(0.76 0.14 215);
125
- --chart-3: oklch(0.68 0.2 295);
126
- --chart-4: oklch(0.7 0.22 330);
127
- --chart-5: oklch(0.82 0.18 125);
123
+ --chart-1: oklch(0.56 0.19 262);
124
+ --chart-2: oklch(0.75 0.17 118);
125
+ --chart-3: oklch(0.64 0.19 352);
126
+ --chart-4: oklch(0.78 0.105 195);
127
+ --chart-5: oklch(0.71 0.17 300);
128
128
 
129
129
  --positive: oklch(0.76 0.15 150);
130
130
  --positive-subtle: oklch(0.27 0.05 150);
@@ -145,7 +145,7 @@
145
145
  --sidebar: oklch(0.2 0.014 262);
146
146
  --sidebar-foreground: oklch(0.96 0.005 255);
147
147
  --sidebar-primary: oklch(0.68 0.19 262);
148
- --sidebar-primary-foreground: oklch(0.985 0 0);
148
+ --sidebar-primary-foreground: oklch(0.145 0.02 262);
149
149
  --sidebar-accent: oklch(0.3 0.02 262);
150
150
  --sidebar-accent-foreground: oklch(0.96 0.005 255);
151
151
  --sidebar-border: oklch(1 0 0 / 10%);
@@ -162,7 +162,8 @@
162
162
  text or icons — use --<tone>. Same lightness step from the page in both
163
163
  modes (light 0.62 / dark 0.56: ~0.36-0.40 OKLCH L away from --background,
164
164
  >= 3:1 against --background and --card), so a fill is never strong in one
165
- mode and faint in the other. Presets do not override it.
165
+ mode and faint in the other. Presets may tune hue and chroma within the
166
+ status bands while preserving contrast and fill strength (tests/theme-presets.test.ts).
166
167
  --warning-fill is the exception: amber (light 0.79 / dark 0.73, ~#f5b324 / ~#d99a1e) is
167
168
  a light colour by nature, so it is ~2:1 on the light page (still >= 0.18 L away)
168
169
  and ~7-8:1 on the dark one; dark text (--foreground in light, --background in dark) sits on it at >= 4.5:1.
@@ -359,17 +360,20 @@
359
360
  /**
360
361
  * Vantage framework styles: the slide / document tokens and the document
361
362
  * typesetting. The UI parts' tokens live in SquadKit
362
- * (packages/squadkit/registry/theme/theme.css); scripts/gen-theme.mjs appends
363
- * this file to them to produce packages/vantage/theme.css.
363
+ * (packages/squadkit/registry/theme/theme.css); packages/vantage/scripts/gen-theme.mjs
364
+ * appends this file to them to produce packages/vantage/theme.css.
364
365
  */
365
366
 
366
367
  :root {
367
368
  /* Slides (@squadbase/vantage/slide).
368
- These are aliases, not values. Custom properties resolve lazily, so
369
+ These are aliases, not values. A var() in a custom property is resolved
370
+ on the element that declares it and inherited as that result, so
369
371
  pointing them at the tokens above is enough for a deck to follow `.dark`
370
- and `[data-theme="dark"]` on its own — restating them in the dark block
371
- below would create two places to keep in step for no gain. A deck
372
- overrides any of them inline through `<SlideDeck theme>`. */
372
+ and `[data-theme="dark"]` set on :root — restating them in the dark block
373
+ below would create two places to keep in step for no gain. Tokens
374
+ overridden on a descendant (a scoped theme) do not reach them: re-declare
375
+ the aliases there. A deck overrides any of them inline through
376
+ `<SlideDeck theme>`. */
373
377
  --slide-bg: var(--background);
374
378
  --slide-fg: var(--foreground);
375
379
  --slide-accent: var(--primary);