@squadbase/vantage 0.6.2-dev1.d7c0911 → 0.6.2-dev1.e85faec

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 (221) hide show
  1. package/dist/chunk-2IAPIOPS.js +152 -0
  2. package/dist/chunk-2IAPIOPS.js.map +1 -0
  3. package/dist/chunk-57GHR5LN.js +163 -0
  4. package/dist/chunk-57GHR5LN.js.map +1 -0
  5. package/dist/chunk-6OTTGAPO.js +44 -0
  6. package/dist/chunk-6OTTGAPO.js.map +1 -0
  7. package/dist/{chunk-XPQSTZUU.js → chunk-7S52M2SL.js} +4 -3
  8. package/dist/chunk-7S52M2SL.js.map +1 -0
  9. package/dist/chunk-JXFCSF3K.js +673 -0
  10. package/dist/chunk-JXFCSF3K.js.map +1 -0
  11. package/dist/{chunk-WRSX2MDK.js → chunk-QOXXOFGL.js} +115 -930
  12. package/dist/chunk-QOXXOFGL.js.map +1 -0
  13. package/dist/components/index.d.ts +13 -249
  14. package/dist/components/index.js +5 -2
  15. package/dist/delta-text-CvwBGJ95.d.ts +15 -0
  16. package/dist/doc/index.d.ts +215 -2
  17. package/dist/doc/index.js +300 -3
  18. package/dist/doc/index.js.map +1 -1
  19. package/dist/format-U0cQl069.d.ts +243 -0
  20. package/dist/slide/index.d.ts +272 -1
  21. package/dist/slide/index.js +968 -3
  22. package/dist/slide/index.js.map +1 -1
  23. package/dist/table/index.js +6 -3
  24. package/dist/table/index.js.map +1 -1
  25. package/dist/ui/index.d.ts +4 -1
  26. package/dist/ui/index.js +3 -3
  27. package/dist/ui/index.js.map +1 -1
  28. package/docs/en/components.md +13 -2
  29. package/docs/en/doc/delta-text.md +40 -0
  30. package/docs/en/doc/doc-action-items.md +49 -0
  31. package/docs/en/doc/doc-callout.md +38 -0
  32. package/docs/en/doc/doc-data-table.md +60 -0
  33. package/docs/en/doc/doc-executive-summary.md +64 -0
  34. package/docs/en/doc/doc-figure.md +56 -0
  35. package/docs/en/doc/doc-key-findings.md +61 -0
  36. package/docs/en/doc/doc-kpi-scorecard.md +80 -0
  37. package/docs/en/doc/doc-notes-and-sources.md +43 -0
  38. package/docs/en/doc/doc-report-header.md +46 -0
  39. package/docs/en/parts/area-chart.md +99 -0
  40. package/docs/en/parts/bar-chart.md +91 -0
  41. package/docs/en/parts/bar-list.md +50 -0
  42. package/docs/en/parts/category-bar.md +37 -0
  43. package/docs/en/parts/chart-frame.md +39 -0
  44. package/docs/en/parts/delta.md +4 -3
  45. package/docs/en/parts/donut-chart.md +72 -0
  46. package/docs/en/parts/funnel-steps.md +2 -1
  47. package/docs/en/parts/heatmap.md +53 -0
  48. package/docs/en/parts/kpi-card.md +2 -1
  49. package/docs/en/parts/legend.md +35 -0
  50. package/docs/en/parts/line-chart.md +94 -0
  51. package/docs/en/parts/progress-circle.md +33 -0
  52. package/docs/en/parts/sample-data.md +39 -0
  53. package/docs/en/parts/scatter-chart.md +56 -0
  54. package/docs/en/parts/tracker.md +36 -0
  55. package/docs/en/parts/updated-at.md +30 -0
  56. package/docs/en/parts/waterfall-chart.md +56 -0
  57. package/docs/en/slide/slide-chart-full.md +48 -0
  58. package/docs/en/slide/slide-chart-insight.md +52 -0
  59. package/docs/en/slide/slide-columns.md +46 -0
  60. package/docs/en/slide/slide-comparison.md +68 -0
  61. package/docs/en/slide/slide-cover.md +39 -0
  62. package/docs/en/slide/slide-exec-summary.md +47 -0
  63. package/docs/en/slide/slide-heading.md +38 -0
  64. package/docs/en/slide/slide-kpi-grid.md +55 -0
  65. package/docs/en/slide/slide-kpi-hero.md +58 -0
  66. package/docs/en/slide/slide-next-actions.md +49 -0
  67. package/docs/en/slide/slide-scorecard-table.md +54 -0
  68. package/docs/en/slide/slide-section.md +44 -0
  69. package/docs/en/slide/slide-source-line.md +34 -0
  70. package/docs/en/ui/alert-dialog.md +42 -0
  71. package/docs/en/ui/avatar.md +31 -0
  72. package/docs/en/ui/combobox.md +74 -0
  73. package/docs/en/ui/drawer.md +41 -0
  74. package/docs/en/ui/empty.md +1 -1
  75. package/docs/en/ui/error-state.md +4 -3
  76. package/docs/en/ui/field.md +42 -0
  77. package/docs/en/ui/hover-card.md +21 -0
  78. package/docs/en/ui/kbd.md +17 -0
  79. package/docs/en/ui/loading.md +1 -1
  80. package/docs/en/ui/pagination.md +36 -0
  81. package/docs/en/ui/radio-group.md +21 -0
  82. package/docs/en/ui/toast.md +44 -0
  83. package/docs/en/ui/toggle-group.md +4 -3
  84. package/docs/index.json +857 -77
  85. package/docs/ja/components.md +12 -1
  86. package/docs/ja/doc/delta-text.md +40 -0
  87. package/docs/ja/doc/doc-action-items.md +49 -0
  88. package/docs/ja/doc/doc-callout.md +38 -0
  89. package/docs/ja/doc/doc-data-table.md +60 -0
  90. package/docs/ja/doc/doc-executive-summary.md +64 -0
  91. package/docs/ja/doc/doc-figure.md +56 -0
  92. package/docs/ja/doc/doc-key-findings.md +61 -0
  93. package/docs/ja/doc/doc-kpi-scorecard.md +80 -0
  94. package/docs/ja/doc/doc-notes-and-sources.md +43 -0
  95. package/docs/ja/doc/doc-report-header.md +46 -0
  96. package/docs/ja/parts/area-chart.md +49 -25
  97. package/docs/ja/parts/bar-chart.md +50 -24
  98. package/docs/ja/parts/bar-list.md +31 -8
  99. package/docs/ja/parts/chart-frame.md +36 -0
  100. package/docs/ja/parts/delta.md +5 -4
  101. package/docs/ja/parts/donut-chart.md +45 -26
  102. package/docs/ja/parts/funnel-steps.md +27 -8
  103. package/docs/ja/parts/heatmap.md +45 -0
  104. package/docs/ja/parts/kpi-card.md +2 -1
  105. package/docs/ja/parts/legend.md +36 -0
  106. package/docs/ja/parts/line-chart.md +48 -22
  107. package/docs/ja/parts/sample-data.md +61 -0
  108. package/docs/ja/parts/scatter-chart.md +69 -0
  109. package/docs/ja/parts/updated-at.md +27 -0
  110. package/docs/ja/parts/waterfall-chart.md +61 -0
  111. package/docs/ja/slide/slide-chart-full.md +48 -0
  112. package/docs/ja/slide/slide-chart-insight.md +52 -0
  113. package/docs/ja/slide/slide-columns.md +46 -0
  114. package/docs/ja/slide/slide-comparison.md +68 -0
  115. package/docs/ja/slide/slide-cover.md +39 -0
  116. package/docs/ja/slide/slide-exec-summary.md +47 -0
  117. package/docs/ja/slide/slide-heading.md +38 -0
  118. package/docs/ja/slide/slide-kpi-grid.md +55 -0
  119. package/docs/ja/slide/slide-kpi-hero.md +58 -0
  120. package/docs/ja/slide/slide-next-actions.md +49 -0
  121. package/docs/ja/slide/slide-scorecard-table.md +54 -0
  122. package/docs/ja/slide/slide-section.md +44 -0
  123. package/docs/ja/slide/slide-source-line.md +34 -0
  124. package/docs/ja/ui/empty.md +1 -1
  125. package/docs/ja/ui/error-state.md +4 -3
  126. package/docs/ja/ui/loading.md +1 -1
  127. package/docs/ja/ui/toggle-group.md +4 -3
  128. package/package.json +26 -25
  129. package/registry/ui/accordion.tsx +1 -1
  130. package/registry/ui/alert-dialog.tsx +1 -1
  131. package/registry/ui/alert.tsx +1 -1
  132. package/registry/ui/app-shell.tsx +1 -1
  133. package/registry/ui/area-chart.tsx +89 -27
  134. package/registry/ui/attention-list.tsx +303 -0
  135. package/registry/ui/avatar.tsx +1 -1
  136. package/registry/ui/badge.tsx +1 -1
  137. package/registry/ui/bar-chart.tsx +89 -27
  138. package/registry/ui/bar-list.tsx +88 -25
  139. package/registry/ui/box-plot-chart.tsx +3906 -0
  140. package/registry/ui/breadcrumb.tsx +1 -1
  141. package/registry/ui/button.tsx +1 -1
  142. package/registry/ui/calendar.tsx +1 -1
  143. package/registry/ui/card.tsx +1 -1
  144. package/registry/ui/category-bar.tsx +55 -20
  145. package/registry/ui/chart-frame.tsx +57 -22
  146. package/registry/ui/checkbox.tsx +1 -1
  147. package/registry/ui/collapsible.tsx +1 -1
  148. package/registry/ui/combobox.tsx +1 -1
  149. package/registry/ui/command.tsx +1 -1
  150. package/registry/ui/dashboard-card.tsx +5 -5
  151. package/registry/ui/data-table.tsx +1 -1
  152. package/registry/ui/date-range-picker.tsx +1 -1
  153. package/registry/ui/delta.tsx +12 -9
  154. package/registry/ui/dialog.tsx +1 -1
  155. package/registry/ui/donut-chart.tsx +90 -27
  156. package/registry/ui/drawer.tsx +1 -1
  157. package/registry/ui/dropdown-menu.tsx +1 -1
  158. package/registry/ui/echart.tsx +195 -45
  159. package/registry/ui/field.tsx +1 -1
  160. package/registry/ui/filter-bar.tsx +1 -1
  161. package/registry/ui/funnel-steps.tsx +34 -6
  162. package/registry/ui/heatmap.tsx +56 -22
  163. package/registry/ui/histogram-chart.tsx +3986 -0
  164. package/registry/ui/hover-card.tsx +1 -1
  165. package/registry/ui/input-group.tsx +1 -1
  166. package/registry/ui/input.tsx +1 -1
  167. package/registry/ui/kbd.tsx +1 -1
  168. package/registry/ui/kpi-card.tsx +42 -15
  169. package/registry/ui/label.tsx +1 -1
  170. package/registry/ui/legend.tsx +88 -25
  171. package/registry/ui/line-chart.tsx +89 -27
  172. package/registry/ui/metric-value.tsx +1 -1
  173. package/registry/ui/multi-select.tsx +1 -1
  174. package/registry/ui/page-shell.tsx +11 -11
  175. package/registry/ui/pagination.tsx +1 -1
  176. package/registry/ui/paired-chart.tsx +3827 -0
  177. package/registry/ui/placeholder.tsx +1 -1
  178. package/registry/ui/popover.tsx +1 -1
  179. package/registry/ui/progress-circle.tsx +1 -1
  180. package/registry/ui/progress.tsx +1 -1
  181. package/registry/ui/radio-group.tsx +1 -1
  182. package/registry/ui/sample-data.tsx +2 -2
  183. package/registry/ui/scatter-chart.tsx +89 -27
  184. package/registry/ui/scroll-area.tsx +1 -1
  185. package/registry/ui/searchable-select.tsx +1 -1
  186. package/registry/ui/section-header.tsx +3 -3
  187. package/registry/ui/segmented-control.tsx +1 -1
  188. package/registry/ui/select.tsx +1 -1
  189. package/registry/ui/separator.tsx +1 -1
  190. package/registry/ui/sheet.tsx +1 -1
  191. package/registry/ui/sidebar.tsx +1 -1
  192. package/registry/ui/skeleton.tsx +1 -1
  193. package/registry/ui/slider.tsx +2 -2
  194. package/registry/ui/sparkline.tsx +1 -1
  195. package/registry/ui/spinner.tsx +1 -1
  196. package/registry/ui/states.tsx +1 -1
  197. package/registry/ui/status-badge.tsx +9 -9
  198. package/registry/ui/switch.tsx +1 -1
  199. package/registry/ui/table.tsx +1 -1
  200. package/registry/ui/tabs.tsx +1 -1
  201. package/registry/ui/textarea.tsx +1 -1
  202. package/registry/ui/toast.tsx +1 -1
  203. package/registry/ui/toggle-group.tsx +1 -1
  204. package/registry/ui/toggle.tsx +1 -1
  205. package/registry/ui/tooltip.tsx +7 -3
  206. package/registry/ui/tracker.tsx +10 -4
  207. package/registry/ui/trend-indicator.tsx +3 -3
  208. package/registry/ui/updated-at.tsx +1 -1
  209. package/registry/ui/waterfall-chart.tsx +89 -27
  210. package/skills/vantage-design/SKILL.md +34 -24
  211. package/skills/vantage-design/references/extract.md +16 -14
  212. package/skills/vantage-design/references/format.md +6 -5
  213. package/skills/vantage-design/references/presets.md +60 -110
  214. package/skills/vantage-slide/SKILL.md +54 -36
  215. package/templates/AGENTS.md +2 -2
  216. package/templates/agents/doc.md +48 -0
  217. package/templates/agents/page.md +32 -1
  218. package/templates/agents/slide.md +70 -2
  219. package/theme.css +25 -20
  220. package/dist/chunk-WRSX2MDK.js.map +0 -1
  221. package/dist/chunk-XPQSTZUU.js.map +0 -1
@@ -0,0 +1,36 @@
1
+ # Legend
2
+
3
+ > 複数のグラフで共有する、HTML だけの独立した凡例。
4
+
5
+ 複数のグラフで同じ系列を見せるとき、各グラフの凡例を消して、凡例を 1 つにまとめます。**系列名の配列
6
+ (`categories`)**を渡すだけで、`DonutChart` と同じ見た目(角丸の色見本と名前)の凡例が出ます。色はグラフと
7
+ 同じ関数で決まるので、グラフに渡した `categories` / `colors` / `labels` と同じ値を渡せば食い違いません。
8
+ キャンバスも SVG も使わない HTML です。
9
+
10
+ ```tsx
11
+ import { Legend } from "@squadbase/vantage/components";
12
+ import type { LegendProps } from "@squadbase/vantage/components";
13
+ ```
14
+
15
+ | Prop | Type | Default | 説明 |
16
+ | --- | --- | --- | --- |
17
+ | `categories` | `string[]` | | 凡例に並べる系列名。**必須**。並び順が配色の順。空配列なら何も描かない。6 つ以上はグラフ側で「その他」にまとまるので、凡例も 5 つ +「その他」で渡す。 |
18
+ | `colors` | `ChartSeriesColor[] \| Record<string, ChartSeriesColor>` | `["chart-1", …, "chart-5"]` | 系列色。`"chart-1"`〜`"chart-5"` か意味色。配列は系列の順、record は系列名ごと。「その他」は常に灰色。意味色は棒の面の色(`--warning-fill` など)で出る。 |
19
+ | `labels` | `Record<string, string>` | | 系列名 → 表示名。グラフの `labels` と同じものを渡す。 |
20
+ | `layout` | `"horizontal" \| "vertical"` | `"horizontal"` | 並べ方。`horizontal` は折り返す横並び、`vertical` は縦並び。 |
21
+ | `ariaLabel` | `string` | `"凡例"` | 凡例の読み上げ名。 |
22
+ | `className` | `string` | | `<ul>` に足すクラス。 |
23
+
24
+ ## グラフの凡例を消す
25
+
26
+ 共有する側のグラフには `showLegend={false}` を渡します。
27
+
28
+ ```tsx
29
+ <Legend categories={["東京店", "大阪店", "名古屋店"]} />
30
+ <LineChart data={sales} index="month" categories={stores} showLegend={false} />
31
+ <BarChart data={visitors} index="month" categories={stores} showLegend={false} />
32
+ ```
33
+
34
+ > [!NOTE]
35
+ > グラフに `colors` を渡しているときは、`Legend` にも同じ `colors` を渡してください。省略するとトークン順の
36
+ > 色になり、グラフと食い違います。
@@ -8,48 +8,74 @@
8
8
 
9
9
  ```tsx
10
10
  import { LineChart } from "@squadbase/vantage/components";
11
- import type { LineChartProps, ChartColor, ChartEventPayload } from "@squadbase/vantage/components";
11
+ import type { LineChartProps, ChartSeriesColor, ChartEventPayload } from "@squadbase/vantage/components";
12
12
  ```
13
13
 
14
14
  | Prop | Type | Default | 説明 |
15
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` | 右上に凡例を出す。 |
16
+ | `data` | `T[]` | | 行の配列。**必須**。1 行が x 軸の 1 点。数値の列は number か数値文字列(SQL の DECIMAL など)で、それ以外は欠損として扱う。 |
17
+ | `index` | `keyof T & string` | | x 軸に使う列名。**必須**。 |
18
+ | `categories` | `NumericKeys<T>[]` | | 系列として描く列名(数値の列だけ渡せる)。**必須**。この順が凡例と配色の順。6 つ以上は合計の大きい 5 つ +「その他」にまとめる。 |
19
+ | `colors` | `ChartSeriesColor[] \| Record<string, ChartSeriesColor>` | `トークン順` | 系列色。`"chart-1"`〜`"chart-5"`(ライト / ダークに追従)か意味色 `"positive"` / `"warning"` / `"negative"` / `"neutral"`。配列は系列の順、record は系列名ごと。CSS カラーは渡せない。 |
20
+ | `labels` | `Record<string, string>` | | `index` の値・系列名 → 表示名(軸・凡例・ツールチップ・データ表に反映)。例 `{ jan: "1 月", sales: "売上" }`。 |
21
+ | `format` | `ValueFormat` | `"compact"` | 数値の書式。`"compact"` / `"number"` / `"currency"` / `"percent"` / `"multiple"` / `"duration"`、または `{ type, digits, currency, notation, unit, divisor, durationUnit }`。軸は短縮、ツールチップも同じ書式。KPI 系の `format` と同じ値を渡せる。 |
22
+ | `valueFormatter` | `(value: number) => string` | | 書式を関数で直接渡す逃げ道。`format` より優先する。 |
23
+ | `lineOptions` | `LineChartOptions` | | 折れ線固有の設定。`{ curveType, connectNulls, fitToData, targetLabelPosition }`(下の表)。 |
24
+ | `forecast` | `{ data: ChartForecastRow[]; category?: string; label?: string }` | | 予測。最初の系列(または `category`)の続きを点線と薄い帯で描く。`data` の行は実績と同じ `index` のキーに、`value`(と任意の `lower` / `upper`)を持つ。`label` の既定は「予測」。 |
25
+ | `comparison` | `{ category: string; vs: "prior-period" \| "prior-year" \| "target" \| "custom"; label?: string }` | | 比較系列。`categories` のうち 1 つを「前年」「計画」などの比較の線にする(細い灰色の実線)。ツールチップに主系列の差を添える。`vs: "custom"` では `label` が必須。 |
26
+ | `highlight` | `"auto" \| "none"` | | 最大値と最新値に値ラベルを付ける(最初の系列だけ・系列が 2 つ以下のときだけ)。既定は Line / Area が `"auto"`、Bar は `index` が日付・年月・年のときだけ `"auto"`。 |
27
+ | `provisionalFrom` | `string \| number` | | ここから先は確定前(速報)の点。`index` の値で渡す。薄い色・点線で描き、凡例とツールチップに `provisionalLabel` を出す。 |
28
+ | `provisionalLabel` | `string` | `"速報"` | 速報の呼び名(凡例・ツールチップ)。 |
29
+ | `target` | `number` | | 目標値。点線の水平線で示し、値軸は必ずこの値を含む。 |
30
+ | `targetLabel` | `string` | `「目標 <書式化した値>」` | 目標線のラベル。 |
31
+ | `annotations` | `ChartAnnotation[]` | | 任意の位置への注記。`{ at, label }` は縦線、`to` を足すと `at`〜`to` の区間の帯。`at` / `to` は `index` の値。横棒では描かない。 |
32
+ | `showLegend` | `boolean` | `true` | 凡例を出す。 |
24
33
  | `showTooltip` | `boolean` | `true` | ホバーでツールチップを出す。 |
25
34
  | `showGridLines` | `boolean` | `true` | 値軸の目盛り線。 |
26
35
  | `showXAxis` | `boolean` | `true` | x 軸を出す。 |
27
36
  | `showYAxis` | `boolean` | `true` | y 軸を出す。 |
28
37
  | `startEndOnly` | `boolean` | `false` | x 軸のラベルを最初と最後だけにする。 |
29
38
  | `yAxisWidth` | `number` | | y 軸ラベルの幅(px)。縦に並べた複数のグラフでプロット領域を揃えたいときに固定する。 |
30
- | `minValue` | `number` | | 値軸の下限。 |
31
- | `maxValue` | `number` | | 値軸の上限。 |
32
- | `autoMinValue` | `boolean` | `false` | 値軸を 0 からではなくデータの範囲に合わせる。 |
33
- | `allowDecimals` | `boolean` | `true` | `false` で目盛りを整数に限る。 |
39
+ | `minValue` | `number` | | 値軸の下限。指定した値から始める。データが下限を下回るときは軸を広げる。 |
40
+ | `maxValue` | `number` | | 値軸の上限(横棒は横軸)。データが上限を超えるときは軸を広げる。並べて比べる複数のグラフには同じ値を渡して軸をそろえる。 |
41
+ | `allowDecimals` | `boolean` | `true` | `false` で値軸の目盛りを整数に限る。 |
34
42
  | `xAxisLabel` | `string` | | x 軸の名前。 |
35
43
  | `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` | | 足すクラス。 |
44
+ | `onValueChange` | `(value: ChartEventPayload) => void` | | 点(棒)のクリックで呼ばれる。クリックした行に `eventType` と `categoryClicked`(系列名)を足して渡し、同じ点をもう一度押すと `null`。渡すと選択以外が薄くなる。 |
45
+ | `title` | `string` | | グラフの見出し。 |
46
+ | `summary` | `string \| "auto"` | | グラフが言っていることの 1 文要約。見出しの下に出す。`"auto"` なら data から機械的に組む。向きの言い回しを手書きすると data とずれるので `"auto"` を使う。 |
47
+ | `isLoading` | `boolean` | | 読み込み中。最終形と同じ形・高さのスケルトンを出す。 |
48
+ | `emptyState` | `{ title?: string; description?: string; action?: ReactNode }` | | `data` が空のときの表示。高さは保たれる。`title` の既定は「表示できるデータがありません」。 |
49
+ | `height` | `number` | `288` | プロット領域の高さ(px)。文字列(CSS の長さ)は互換のために受けるだけで非推奨。 |
50
+ | `chartOptions` | `EChartsOption` | | 生成した ECharts の option に最後に深くマージする逃げ道。 |
51
+ | `actions` | `boolean \| { includeTitle?: boolean }` | `false` | 右上に PNG の保存 / コピーのボタンを出す(ホバー時)。`title` / `summary` は画像の上に含まれる。含めないなら `{ includeTitle: false }`。 |
52
+ | `fileName` | `string` | `"chart.png"` | PNG 保存時のファイル名(拡張子つき)。`actions` と使う。 |
53
+ | `ariaLabel` | `string` | | グラフの説明(スクリーンリーダー向け)。見出しがあればそちらが使われる。 |
54
+ | `className` | `string` | | 外側の `<figure>` に足すクラス。高さは `height` で決める。 |
55
+
56
+ ### lineOptions
57
+
58
+ | Prop | Type | Default | 説明 |
59
+ | --- | --- | --- | --- |
60
+ | `curveType` | `"linear" \| "smooth" \| "step"` | `"linear"` | 線の形。 |
61
+ | `connectNulls` | `boolean` | `false` | 値の欠けた点(`null` など)をまたいで線をつなぐ。 |
62
+ | `fitToData` | `boolean` | `false` | 値軸を 0 からではなくデータの範囲に合わせる。 |
63
+ | `targetLabelPosition` | `"start" \| "end" \| "legend"` | `"start"` | 目標線(`target`)のラベルの置き場所。`"legend"` は凡例だけに出し、線の上には出さない。 |
64
+
65
+ > [!NOTE]
66
+ > `curveType` / `connectNulls` をグラフの props に直接渡す書き方、`autoMinValue`(`lineOptions.fitToData` を使う)、`loading`(`isLoading` を使う)は**非推奨**です。
41
67
 
42
68
  > [!NOTE]
43
- > `colors` は Tailwind のクラスではなく**色の値**です(キャンバスに描くため)。`"chart-2"` のような
44
- > トークン名ならライト / ダークに追従します。軸・凡例・ツールチップの色はいつもテーマから入ります。
69
+ > `colors` は Tailwind のクラスではなく**テーマの色名**(`"chart-1"`〜`"chart-5"`、意味色)です。
70
+ > ライト / ダークに追従します。任意の CSS カラーは渡せません。軸・凡例・ツールチップの色はいつもテーマから入ります。
45
71
 
46
72
  ## 欠損のある系列
47
73
 
48
- 値が `null`・空文字・数値でない文字列の点は欠損として扱い、線が途切れます。`connectNulls` を
74
+ 値が `null`・空文字・数値でない文字列の点は欠損として扱い、線が途切れます。`lineOptions={{ connectNulls: true }}` を
49
75
  付けると欠損をまたいでつなぎます。
50
76
 
51
77
  ```tsx
52
- <LineChart data={rows} index="date" categories={["CVR"]} connectNulls valueFormatter={(v) => `${v}%`} />
78
+ <LineChart data={rows} index="date" categories={["CVR"]} lineOptions={{ connectNulls: true }} valueFormatter={(v) => `${v}%`} />
53
79
  ```
54
80
 
55
81
  ## EChart との使い分け
@@ -0,0 +1,61 @@
1
+ # SampleData
2
+
3
+ > まだ実データにつながっていない「見本の値」に印を付ける。
4
+
5
+ 下書きの段階で、クエリをつなぐ前に並べた値を囲みます。囲んだ中の `KpiCard` と `DashboardCardPreset` が、見出しに
6
+ **「見本の値」のバッジ**を出します。バッジは色だけでなく言葉で伝え、ツールチップで意味も説明します。実データを
7
+ つなぎ終えたら `SampleData` を外します。
8
+
9
+ ```tsx
10
+ import { SampleData, SampleBadge } from "@squadbase/vantage/components";
11
+ import type { SampleDataProps, SampleBadgeProps } from "@squadbase/vantage/components";
12
+ ```
13
+
14
+ ## SampleData
15
+
16
+ | Prop | Type | Default | 説明 |
17
+ | --- | --- | --- | --- |
18
+ | `label` | `string` | `"見本の値"` | 印の文言。 |
19
+ | `children` | `ReactNode` | | 印を付けたい部品。 |
20
+
21
+ `SampleData` 自身は箱を持ちません(`display: contents`)。親の grid・subgrid から見ると中のカードが直接の子の
22
+ ままなので、`KpiCard` の行の区切りは揃ったままです。
23
+
24
+ カードは 1 枚につき印を 1 回だけ出します。`DashboardCardPreset` が見出しに出したら、その中のグラフや表は
25
+ 重ねて出しません。素のグラフに印を付けたいときは `DashboardCardPreset` に入れてください。
26
+
27
+ ## SampleBadge
28
+
29
+ バッジ単体です。`SampleData` の外で、見本であることを自分で示したいときに使います。`<span>` の属性もそのまま渡せます。
30
+
31
+ | Prop | Type | Default | 説明 |
32
+ | --- | --- | --- | --- |
33
+ | `label` | `string` | `"見本の値"` | 印の文言。 |
34
+ | `className` | `string` | | 足すクラス。 |
35
+
36
+ ## SampleClaim と useSampleMark
37
+
38
+ 自作のカード部品が `SampleData` に対応するための部品です。`useSampleMark()` は、いま印を出すべきなら
39
+ `{ label }`、なければ `null` を返します。印を出したカードは、中身を `<SampleClaim>` で包んで、内側の部品が
40
+ 同じ印を繰り返さないようにします。
41
+
42
+ ```tsx
43
+ import { SampleBadge, SampleClaim, useSampleMark } from "@squadbase/vantage/components";
44
+
45
+ function MyCard({ title, children }: { title: string; children: React.ReactNode }) {
46
+ const mark = useSampleMark();
47
+ return (
48
+ <section>
49
+ <h3>
50
+ {title} {mark && <SampleBadge label={mark.label} />}
51
+ </h3>
52
+ <SampleClaim>{children}</SampleClaim>
53
+ </section>
54
+ );
55
+ }
56
+ ```
57
+
58
+ > [!NOTE]
59
+ > `SampleData` は「実データにまだつながっていない」ことを示します。速報値のように、実データだが確定前の値は
60
+ > `KpiCard` やグラフの `provisional` で示し、混ぜません。文中や見出しの中の値 1 つだけが仮なら
61
+ > [`Placeholder`](parts/placeholder) を使います。同じ値に両方は付けません。
@@ -0,0 +1,69 @@
1
+ # ScatterChart
2
+
3
+ > 2 つの数値の関係と外れ値を見せる型付きの散布図。大きさを足せばバブルチャートになる。
4
+
5
+ 広告費と売上、客単価と購入頻度のように、2 つの数値の関係を点の位置で見ます。**行の配列(`data`)と、
6
+ 横軸・縦軸の列名(`x` / `y`)**を渡すだけで描けます。`size` でバブル、`series` で色分け(`--chart-1..5` を
7
+ 固定順)、`labelKey` で点の名前の表示ができます。散布図は位置で読むので、軸は既定でデータの範囲に合わせ、
8
+ 0 起点にしません。
9
+
10
+ ```tsx
11
+ import { ScatterChart } from "@squadbase/vantage/components";
12
+ import type { ScatterChartProps, ScatterReferenceLine } from "@squadbase/vantage/components";
13
+ ```
14
+
15
+ | Prop | Type | Default | 説明 |
16
+ | --- | --- | --- | --- |
17
+ | `data` | `Record<string, unknown>[]` | | 行の配列。**必須**。1 行が 1 点。x か y が数値でない行は描かない。 |
18
+ | `x` | `string` | | 横軸に使う数値の列名。**必須**。 |
19
+ | `y` | `string` | | 縦軸に使う数値の列名。**必須**。 |
20
+ | `size` | `string` | | 点の面積に使う数値の列名。渡すとバブルチャートになる。0 を基準に面積が比例し、null・0 以下は最小の大きさ。 |
21
+ | `index` | `string` | | 点の名前の列名。ツールチップの見出しとデータ表の先頭列になる。 |
22
+ | `labelKey` | `string` | | 点の脇に書く文字の列名。重なるラベルは自動で間引く(ツールチップには常に出る)。`index` が無ければ名前も兼ねる。 |
23
+ | `series` | `string` | | 系列分けの列名。値ごとに色を分け、凡例を出す。6 つ以上は点の多い 5 つ +「その他」(灰色)にまとまる。 |
24
+ | `seriesLabel` | `string` | | 凡例の見出し。系列があって凡例が出るときだけ、凡例の左に小さく書く。 |
25
+ | `highlight` | `string \| string[]` | | 前面に出す系列(`series` 列の値)。指定した系列は不透明で手前に、指定外は薄く背面に描く。 |
26
+ | `referenceLines` | `ScatterReferenceLine[]` | | 基準線(目標・平均・しきい値)。`{ axis: "x" \| "y", value, label? }`。中立色の破線で、軸の範囲が線まで広がる。 |
27
+ | `colors` | `ChartSeriesColor[] \| Record<string, ChartSeriesColor>` | `["chart-1", …, "chart-5"]` | 系列色。`"chart-1"`〜`"chart-5"` か意味色。配列は系列の出現順、record は系列名ごと。「その他」は常に灰色。 |
28
+ | `labels` | `Record<string, string>` | | 列名・系列の値 → 表示名(軸のタイトル・凡例・ツールチップ・データ表)。 |
29
+ | `format` | `ValueFormat` | `"compact"` | x・y・size の既定の書式。 |
30
+ | `xFormat` | `ValueFormat` | | 横軸と x の値の書式。`format` より優先。 |
31
+ | `yFormat` | `ValueFormat` | | 縦軸と y の値の書式。`format` より優先。 |
32
+ | `sizeFormat` | `ValueFormat` | | `size` の値の書式(ツールチップ・データ表)。 |
33
+ | `valueFormatter` | `(value: number) => string` | | 書式を関数で直接渡す逃げ道。x・y・size すべてに使われ、`format` 系より優先。 |
34
+ | `minValue` | `number` | | 縦軸の下限。データが下回れば広がる。 |
35
+ | `maxValue` | `number` | | 縦軸の上限。データが超えれば広がる。 |
36
+ | `xMinValue` | `number` | | 横軸の下限。 |
37
+ | `xMaxValue` | `number` | | 横軸の上限。並べて比べる散布図には同じ範囲を渡す。 |
38
+ | `fitToData` | `boolean` | `true` | 両軸をデータの範囲に合わせる。`false` で両軸を 0 から始める。 |
39
+ | `showLegend` | `boolean` | `true` | 凡例を出す(系列が 2 つ以上のときだけ)。 |
40
+ | `showTooltip` | `boolean` | `true` | ホバーでツールチップを出す。 |
41
+ | `summary` | `string \| "auto"` | | 1 文要約。`"auto"` で点の数と y が最大の点から組む。省略時は要約なし。 |
42
+ | `title` | `string` | | グラフの見出し。プロット領域の読み上げ名にもなる。 |
43
+ | `isLoading` | `boolean` | | 読み込み中。最終形と同じ高さのスケルトンを出す。 |
44
+ | `emptyState` | `{ title?: string; description?: string; action?: ReactNode }` | | `data` が空のときの表示。高さは保たれる。既定の題は「表示できるデータがありません」。 |
45
+ | `height` | `number` | `288` | プロット領域の高さ(px)。 |
46
+ | `chartOptions` | `EChartsOption` | | 生成した option に最後に深くマージする逃げ道。 |
47
+ | `actions` | `boolean \| { includeTitle?: boolean }` | `false` | 右上に PNG 保存 / コピーのボタンを出す(ホバー時)。見出しと要約は既定で画像に含まれ、`includeTitle: false` で外せる。 |
48
+ | `fileName` | `string` | `"chart.png"` | PNG 保存時のファイル名(拡張子つき)。 |
49
+ | `className` | `string` | | 外枠(`<figure>`)のクラス。幅はここで決める。 |
50
+ | `ariaLabel` | `string` | | 見出しが無いときのプロット領域の読み上げ名。 |
51
+
52
+ ## 基準線と強調
53
+
54
+ 目標や平均は `referenceLines` で引きます。数が多い点の中に埋もれる少数の系列は `highlight` で手前に出し、
55
+ 残りを薄くします。
56
+
57
+ ```tsx
58
+ <ScatterChart
59
+ data={rows}
60
+ x="spend"
61
+ y="roas"
62
+ series="channel"
63
+ highlight="SNS"
64
+ referenceLines={[{ axis: "y", value: 3, label: "目標 ROAS 3" }]}
65
+ />
66
+ ```
67
+
68
+ > [!NOTE]
69
+ > 幅が 480px 未満になると、ラベルは y が高い 2 点だけになり、凡例はプロットの下に移ります。
@@ -0,0 +1,27 @@
1
+ # UpdatedAt
2
+
3
+ > データの鮮度を示す更新時刻。相対時刻に、タイムゾーンつきの絶対時刻を添える。
4
+
5
+ 「23 分前に更新」のような鮮度の表示です。`<time>` 要素で、`dateTime` に ISO 形式の時刻を持ち、ツールチップと
6
+ `title` に**タイムゾーンつきの絶対時刻**(「2026/10/20 16:41 JST」)が出ます。表示は 60 秒ごとに更新されます。
7
+ 「今」が大事なページでは `variant="absolute-first"` で「16:41 更新(23 分前)」と併記します。
8
+
9
+ ```tsx
10
+ import { UpdatedAt } from "@squadbase/vantage/components";
11
+ import type { UpdatedAtProps } from "@squadbase/vantage/components";
12
+ ```
13
+
14
+ | Prop | Type | Default | 説明 |
15
+ | --- | --- | --- | --- |
16
+ | `at` | `Date \| string \| number` | | データを最後に更新した時刻。**必須**。 |
17
+ | `variant` | `"relative" \| "absolute-first"` | `"relative"` | `relative` は「23 分前に更新」。`absolute-first` は「16:41 更新(23 分前)」で、今日でなければ日付も付く。 |
18
+ | `timeZone` | `string` | | 絶対時刻に使う IANA タイムゾーン(`"Asia/Tokyo"` など)。省略時は実行環境のもの。 |
19
+ | `prefix` | `string` | | ラベルの前に置く文字(`"売上データ: "`)。 |
20
+ | `now` | `Date \| number` | | 「現在時刻」を固定する(テスト・見本用)。渡すと 60 秒ごとの更新を止める。 |
21
+ | `className` | `string` | | 足すクラス。 |
22
+
23
+ 1 分未満の差は「たった今」と出ます。
24
+
25
+ > [!NOTE]
26
+ > 最初の描画(サーバーとクライアント)は ISO の `dateTime` だけの空の `<time>` で、マウント後にラベルが入ります。
27
+ > 表示が閲覧者の時計とタイムゾーンに依存するためで、ハイドレーションの不一致は起きません。
@@ -0,0 +1,61 @@
1
+ # WaterfallChart
2
+
3
+ > 増減の積み上がりを見せる型付きのウォーターフォール。売上から粗利までの内訳や、前期からの増減要因に。
4
+
5
+ 段ごとの増減が累計をどう動かすかを、階段状の棒で描きます。**行の配列(`data`)・段の名前の列(`index`)・
6
+ 金額の列(`categories`)**を渡し、合計の段は `totals` に名前で挙げます。合計の行の値は省けば直前までの累計を
7
+ 計算します。増加は `--positive-fill`、減少は `--negative-fill`、合計は `--chart-1`。各棒には符号つきの金額も
8
+ 書くので、色だけで向きを伝えません。縦軸は常に 0 を含みます。
9
+
10
+ ```tsx
11
+ import { WaterfallChart } from "@squadbase/vantage/components";
12
+ import type { WaterfallChartProps, WaterfallMode } from "@squadbase/vantage/components";
13
+ ```
14
+
15
+ | Prop | Type | Default | 説明 |
16
+ | --- | --- | --- | --- |
17
+ | `data` | `Record<string, unknown>[]` | | 行の配列。**必須**。1 行が 1 段で、並びがそのまま左から右の順。値は number か数値文字列。null は棒を描かず「—」。 |
18
+ | `index` | `string` | | 段の名前に使う列名。**必須**。 |
19
+ | `categories` | `string[]` | | 金額の列名を 1 つだけ入れた配列(`["amount"]`)。**必須**。2 つ以上渡しても最初の 1 つだけを使う。 |
20
+ | `totals` | `string[]` | | 合計の段にする行の `index` の値。0 から累計まで届く棒になる。値が null なら直前までの累計。 |
21
+ | `polarity` | `"higher-is-better" \| "lower-is-better" \| "neutral"` | `"higher-is-better"` | 増えるのが良いか。解約数のように増えて悪い指標は `lower-is-better` で増減の色が入れ替わる。`neutral` は増減とも中立色(符号は付く)。 |
22
+ | `mode` | `"total" \| "delta"` | `"total"` | `delta` は増減の段だけを、開始を 0 とした累計増減の軸で描き、末尾に「純増」の棒を足す。開始・終了の値は図の上の注記に出る。合計に対して増減が小さい(目安 5% 未満)ときに使う。 |
23
+ | `labels` | `Record<string, string>` | | 段の名前 → 表示名(軸・ツールチップ・データ表)。無いキーはそのまま。 |
24
+ | `format` | `ValueFormat` | `"compact"` | 数値の書式(`"currency"` や `{ type: "number", unit: "件" }` など)。軸・棒のラベル・ツールチップで同じ。 |
25
+ | `valueFormatter` | `(value: number) => string` | | 書式を関数で直接渡す逃げ道。`format` より優先。 |
26
+ | `minValue` | `number` | | 縦軸の下限。軸は常に 0 を含むので 0 以下の値だけ有効。データが下回れば広がる。 |
27
+ | `maxValue` | `number` | | 縦軸の上限。データが超えれば広がる。並べて比べるグラフには同じ値を渡して軸をそろえる。 |
28
+ | `yAxisWidth` | `number` | | y 軸ラベルの幅(px)。並べたグラフのプロット領域を揃えたいときに固定する。 |
29
+ | `showValues` | `boolean` | `true` | 各棒に符号つきの増減額(合計は累計)を書く。 |
30
+ | `showTooltip` | `boolean` | `true` | ホバーで増減と累計を出す。 |
31
+ | `summary` | `string \| "auto"` | | グラフが言っていることの 1 文要約。`"auto"` で最初と最後の値、最大の増加・減少から組む。省略時は要約なし。 |
32
+ | `title` | `string` | | グラフの見出し。プロット領域の読み上げ名にもなる。 |
33
+ | `isLoading` | `boolean` | | 読み込み中。最終形と同じ高さのスケルトンを出す。 |
34
+ | `emptyState` | `{ title?: string; description?: string; action?: ReactNode }` | | `data` が空のときの表示。高さは保たれる。既定の題は「表示できるデータがありません」。 |
35
+ | `height` | `number` | `288` | プロット領域の高さ(px)。 |
36
+ | `chartOptions` | `EChartsOption` | | 生成した option に最後に深くマージする逃げ道。 |
37
+ | `actions` | `boolean \| { includeTitle?: boolean }` | `false` | 右上に PNG 保存 / コピーのボタンを出す(ホバー時)。見出しと要約は既定で画像に含まれ、`includeTitle: false` で外せる。 |
38
+ | `fileName` | `string` | `"chart.png"` | PNG 保存時のファイル名(拡張子つき)。 |
39
+ | `className` | `string` | | 外枠(`<figure>`)のクラス。幅はここで決める。 |
40
+ | `ariaLabel` | `string` | | 見出しが無いときのプロット領域の読み上げ名。 |
41
+
42
+ ## 増減が小さいときは delta
43
+
44
+ 総額に対して増減が小さいと、棒が総額の高い軸に埋もれて線のようになります。`mode="delta"` にすると
45
+ 増減だけを 0 起点の累計で描き、最後に「純増」の棒を足します。`totals` に挙げた行(前期・当期)は棒にならず、
46
+ 図の上の注記になります。
47
+
48
+ ```tsx
49
+ <WaterfallChart
50
+ data={rows}
51
+ index="item"
52
+ categories={["amount"]}
53
+ totals={["前期", "当期"]}
54
+ mode="delta"
55
+ format="currency"
56
+ />
57
+ ```
58
+
59
+ > [!NOTE]
60
+ > 解約数や原価のように増えて悪い値の段を並べるときは `polarity="lower-is-better"` にします。色の意味が
61
+ > 入れ替わるだけで、棒の向きと符号は変わりません。
@@ -0,0 +1,48 @@
1
+ # SlideChartFull
2
+
3
+ > グラフ 1 つを 12 カラム全幅で見せる 1 枚。下に 1 行の注記。
4
+
5
+ 横幅が要るグラフ(カテゴリが多い・系列が長い)を全幅で見せる 1 枚です。グラフの下に、読み方や注目点を 1 行(`note`)で添えられます。
6
+
7
+ ```tsx
8
+ import { SlideChartFull } from "@squadbase/vantage/slide";
9
+ import type { SlideChartFullProps } from "@squadbase/vantage/slide";
10
+ ```
11
+
12
+ > [!NOTE]
13
+ > これは **`<Slide>` 1 枚の中身**です。`<Slide>` 自体は持たないので、`<Slide>` の直下に置いてください。ルートはキャンバス(1920×1080)いっぱい(100%)に広がり、`className` は受けません。余白・文字サイズ・グリッドは block の中で決まっている(1920×1080 の 12 カラム)ので、寸法を足さないでください。デッキの組み方は [スライド](page-types/slide) を参照してください。
14
+
15
+ ## props
16
+
17
+ | Prop | Type | 説明 |
18
+ | --- | --- | --- |
19
+ | `title` | `string` | 結論を 1 文で書いた見出し(アクションタイトル)。**必須**。 |
20
+ | `chart` | `SlideChartInsightChart` | `{ type: "line" \| "bar" \| "area"; categories: string[]; series: { name: string; data: number[] }[] }`。**必須**。`SlideChartInsight` と同じ形・同じ描画。系列が 2 つ以上なら凡例が出る。 |
21
+ | `note` | `string` | グラフの下の 1 行。読み方や注目点。60 文字ほどまで。 |
22
+ | `asOf` | `string` | 数字を取った日。日付のみ(例: `"2026-10-01"`)。「2026-10-01 時点」と表示される。「時点」は書かない。 |
23
+ | `source` | `string` | 出典(例: `"社内 BI"`)。「出典: 社内 BI」と表示される。 |
24
+
25
+ ## 使い方
26
+
27
+ ```tsx
28
+ import { Slide, SlideChartFull } from "@squadbase/vantage/slide";
29
+
30
+ <Slide>
31
+ <SlideChartFull
32
+ title="売上は 9 月に過去最高を更新した"
33
+ chart={{
34
+ type: "line",
35
+ categories: ["4 月", "5 月", "6 月", "7 月", "8 月", "9 月"],
36
+ series: [{ name: "売上(百万円)", data: [460, 480, 490, 500, 503, 540] }],
37
+ }}
38
+ note="9 月は大型案件 2 件の計上を含む"
39
+ asOf="2026-10-01"
40
+ source="社内 BI"
41
+ />
42
+ </Slide>
43
+ ```
44
+
45
+ ## 注意
46
+
47
+ - グラフは `EChart` でアニメーションなし・ツールチップなし。pptx への書き出しはその描画(`data-waitfor="canvas"`)を待ちます。
48
+ - 読み解きの文を並べたいときは `SlideChartInsight` を使います。
@@ -0,0 +1,52 @@
1
+ # SlideChartInsight
2
+
3
+ > グラフ 1 つと、その読み解き。レポートでいちばん多い 1 枚。
4
+
5
+ グラフ 1 つ(12 カラムのうち 8)と、その読み解き(残りの 4、最大 3 点)を並べる 1 枚です。グラフは `line` / `bar` / `area`。キャンバス用の文字サイズで、ツールチップとアニメーションなしで組まれるので、pptx に見た目のまま書き出せます。
6
+
7
+ ```tsx
8
+ import { SlideChartInsight } from "@squadbase/vantage/slide";
9
+ import type { SlideChartInsightProps, SlideChartInsightChart } from "@squadbase/vantage/slide";
10
+ ```
11
+
12
+ > [!NOTE]
13
+ > これは **`<Slide>` 1 枚の中身**です。`<Slide>` 自体は持たないので、`<Slide>` の直下に置いてください。ルートはキャンバス(1920×1080)いっぱい(100%)に広がり、`className` は受けません。余白・文字サイズ・グリッドは block の中で決まっている(1920×1080 の 12 カラム)ので、寸法を足さないでください。デッキの組み方は [スライド](page-types/slide) を参照してください。
14
+
15
+ ## props
16
+
17
+ | Prop | Type | Default | 説明 |
18
+ | --- | --- | --- | --- |
19
+ | `title` | `string` | | 結論を 1 文で書いた見出し(アクションタイトル)。**必須**。 |
20
+ | `chart` | `SlideChartInsightChart` | | `{ type: "line" \| "bar" \| "area"; categories: string[]; series: { name: string; data: number[] }[] }`。**必須**。系列が 2 つ以上なら凡例が出る。 |
21
+ | `insights` | `string[]` | | グラフの読み解き。2〜3 点。**必須**。 |
22
+ | `chartSide` | `"left" \| "right"` | `"left"` | グラフを置く側。 |
23
+ | `asOf` | `string` | | 数字を取った日。日付のみ(例: `"2026-10-01"`)。block が「2026-10-01 時点」と 1 回だけ「時点」を付けるので、「時点」は書かない。 |
24
+ | `source` | `string` | | 出典(例: `"社内 BI"`)。「出典: 社内 BI」と表示される。 |
25
+
26
+ ## 使い方
27
+
28
+ ```tsx
29
+ import { Slide, SlideChartInsight } from "@squadbase/vantage/slide";
30
+
31
+ <Slide>
32
+ <SlideChartInsight
33
+ title="解約率は 6 月以降、毎月下がり続けている"
34
+ chart={{
35
+ type: "line",
36
+ categories: ["6 月", "7 月", "8 月", "9 月"],
37
+ series: [{ name: "解約率(%)", data: [2.7, 2.4, 2.1, 1.8] }],
38
+ }}
39
+ insights={[
40
+ "オンボーディング刷新後の 3 か月で 0.9pt 低下",
41
+ "低下は中小企業プランが中心",
42
+ ]}
43
+ asOf="2026-10-01"
44
+ source="社内 BI"
45
+ />
46
+ </Slide>
47
+ ```
48
+
49
+ ## 注意
50
+
51
+ - 4 点以上の `insights` は描画されますが `console.warn` が出ます。スライドを分けてください。
52
+ - 型付きグラフ(`LineChart` など)は使いません。この block が `EChart` で直接組みます。
@@ -0,0 +1,46 @@
1
+ # SlideColumns
2
+
3
+ > [部品] スライド本文の 12 カラム配置。SlideColumns と SlideColumn。
4
+
5
+ スライド本文の 12 カラム配置です。`SlideColumns` の中に `SlideColumn` を並べ、それぞれが `span` カラム分を取ります(8 / 4、6 / 6、4 / 4 / 4 など)。グリッドの本文の行に置く**部品**で、1 枚まるごとの block ではありません。
6
+
7
+ ```tsx
8
+ import { SlideColumns, SlideColumn } from "@squadbase/vantage/slide";
9
+ import type { SlideColumnsProps, SlideColumnProps } from "@squadbase/vantage/slide";
10
+ ```
11
+
12
+ > [!NOTE]
13
+ > これは **スライドの部品**で、1 枚まるごとの block ではありません。`<Slide>` 内の 12 カラムのグリッドの行として置きます(ルートはキャンバスいっぱい(100%×100%)には広がりません)。寸法はすべて部品の中で決まっているので、足さないでください。デッキの組み方は [スライド](page-types/slide) を参照してください。
14
+
15
+ ## props
16
+
17
+ ### SlideColumns
18
+
19
+ | Prop | Type | Default | 説明 |
20
+ | --- | --- | --- | --- |
21
+ | `children` | `ReactNode` | | `SlideColumn` を並べる。**必須**。 |
22
+ | `align` | `"start" \| "center" \| "stretch"` | `"stretch"` | 行の中での縦方向の揃え。 |
23
+
24
+ ### SlideColumn
25
+
26
+ | Prop | Type | 説明 |
27
+ | --- | --- | --- |
28
+ | `span` | `number` | 12 カラムのうち何カラム分を取るか(1〜12)。**必須**。 |
29
+ | `children` | `ReactNode` | 列の中身。**必須**。 |
30
+
31
+ ## 使い方
32
+
33
+ ```tsx
34
+ import { SlideColumns, SlideColumn } from "@squadbase/vantage/slide";
35
+
36
+ <SlideColumns align="center">
37
+ <SlideColumn span={8}>{/* グラフ */}</SlideColumn>
38
+ <SlideColumn span={4}>{/* 読み解き */}</SlideColumn>
39
+ </SlideColumns>
40
+ ```
41
+
42
+ ## 注意
43
+
44
+ - 並べた `span` の合計は 12 にします。
45
+ - 間隔とカラム数はスライドの仕様値で決まっています。
46
+ - 列の中身が列の高さいっぱいに広がるべきときは、その中身側で `height: "100%"` を指定します。
@@ -0,0 +1,68 @@
1
+ # SlideComparison
2
+
3
+ > A と B、施策の前と後を 2〜3 列で並べる 1 枚。
4
+
5
+ 2〜3 列を横に並べて比べる 1 枚です。各列に見出し・主役の数字(と増減)・要点を置き、下に 1 行の結論(`verdict`)を出せます。列は 12 カラムを等分します(6 / 6 または 4 / 4 / 4)。
6
+
7
+ ```tsx
8
+ import { SlideComparison } from "@squadbase/vantage/slide";
9
+ import type { SlideComparisonProps, SlideComparisonColumn } from "@squadbase/vantage/slide";
10
+ ```
11
+
12
+ > [!NOTE]
13
+ > これは **`<Slide>` 1 枚の中身**です。`<Slide>` 自体は持たないので、`<Slide>` の直下に置いてください。ルートはキャンバス(1920×1080)いっぱい(100%)に広がり、`className` は受けません。余白・文字サイズ・グリッドは block の中で決まっている(1920×1080 の 12 カラム)ので、寸法を足さないでください。デッキの組み方は [スライド](page-types/slide) を参照してください。
14
+
15
+ ## props
16
+
17
+ | Prop | Type | 説明 |
18
+ | --- | --- | --- |
19
+ | `title` | `string` | 結論を 1 文で書いた見出し(アクションタイトル)。**必須**。 |
20
+ | `columns` | `SlideComparisonColumn[]` | 2〜3 列。**必須**。各列は下の表のとおり。 |
21
+ | `verdict` | `string` | どちらが優れるか、何が続くかを 1 行で。 |
22
+ | `asOf` | `string` | 数字を取った日。日付のみ(例: `"2026-10-01"`)。「2026-10-01 時点」と表示される。「時点」は書かない。 |
23
+ | `source` | `string` | 出典(例: `"社内 BI"`)。「出典: 社内 BI」と表示される。 |
24
+
25
+ ### SlideComparisonColumn
26
+
27
+ | Prop | Type | Default | 説明 |
28
+ | --- | --- | --- | --- |
29
+ | `heading` | `string` | | その列が何か(「旧プラン」「施策前」)。**必須**。 |
30
+ | `points` | `string[]` | | 短い要点。**必須**。1 列 3 件まで、1 件 24 文字ほどまで。列ごとに同じ種類の要点を同じ順で書く。 |
31
+ | `value` | `number \| null` | | 主役の数字。`null` は「—」。`format` で整形される。 |
32
+ | `format` | `ValueFormat` | | 値の整形(`"currency"` / `"percent"` など)。`delta` の既定の整形にもなる。 |
33
+ | `display` | `string` | | 整形済みの文字列(「1.2 億円」)。`value` より優先される。 |
34
+ | `delta` | `{ value: number \| null; format?: ValueFormat }` | | 主役の数字の増減そのもの(`percent` なら比率)。向きは符号で決まる。`format` を省くと列の `format` を使う。 |
35
+ | `comparisonLabel` | `string` | | `delta` が何との比較かを示す名前(「前月比」「旧プラン比」)。増減の前に薄く出る。 |
36
+ | `betterWhen` | `"up" \| "down"` | `"up"` | `delta` のどちらの向きが良いか。解約率・コストは `"down"`。 |
37
+
38
+ ## 使い方
39
+
40
+ ```tsx
41
+ import { Slide, SlideComparison } from "@squadbase/vantage/slide";
42
+
43
+ <Slide>
44
+ <SlideComparison
45
+ title="新プランは旧プランより解約が少ない"
46
+ columns={[
47
+ { heading: "旧プラン", value: 0.024, format: "percent", points: ["月額 9,800 円", "導入支援なし"] },
48
+ {
49
+ heading: "新プラン",
50
+ value: 0.018,
51
+ format: "percent",
52
+ delta: { value: -0.006 },
53
+ comparisonLabel: "旧プラン比",
54
+ betterWhen: "down",
55
+ points: ["月額 12,800 円", "導入支援つき"],
56
+ },
57
+ ]}
58
+ verdict="導入支援の有無が解約率の差の主因"
59
+ asOf="2026-10-01"
60
+ source="社内 BI"
61
+ />
62
+ </Slide>
63
+ ```
64
+
65
+ ## 注意
66
+
67
+ - 列が 2〜3 でない、または要点が多い・長いと、コンソールに警告が出ます。スライドを分けてください。
68
+ - 増減は `DeltaText`(▲ ▼ と「増」「減」つき)で描かれます。極性は `betterWhen` のみで指定します。
@@ -0,0 +1,39 @@
1
+ # SlideCover
2
+
3
+ > デッキの表紙。タイトル・サブタイトル・期間・作成者・時点を 1 枚に収める。
4
+
5
+ デッキの表紙です。タイトルは左 8 カラムに置かれ、期間・作成者・時点は下端の 1 行にまとまります。
6
+
7
+ ```tsx
8
+ import { SlideCover } from "@squadbase/vantage/slide";
9
+ import type { SlideCoverProps } from "@squadbase/vantage/slide";
10
+ ```
11
+
12
+ > [!NOTE]
13
+ > これは **`<Slide>` 1 枚の中身**です。`<Slide>` 自体は持たないので、`<Slide>` の直下に置いてください。ルートはキャンバス(1920×1080)いっぱい(100%)に広がり、`className` は受けません。余白・文字サイズ・グリッドは block の中で決まっている(1920×1080 の 12 カラム)ので、寸法を足さないでください。デッキの組み方は [スライド](page-types/slide) を参照してください。
14
+
15
+ ## props
16
+
17
+ | Prop | Type | 説明 |
18
+ | --- | --- | --- |
19
+ | `title` | `string` | デッキの名前。**必須**。 |
20
+ | `subtitle` | `string` | タイトルの下の 1 行。 |
21
+ | `period` | `string` | 対象期間(「2026 年 7 月〜9 月」)。 |
22
+ | `author` | `string` | 作成者・チーム名。 |
23
+ | `asOf` | `string` | 数字を取った日。日付のみ(例: `"2026-10-20"`)。block が「2026-10-20 時点」と 1 回だけ「時点」を付けるので、「時点」は書かない。 |
24
+ | `source` | `string` | 出典(例: `"社内 BI"`)。「出典: 社内 BI」と表示される。 |
25
+
26
+ ## 使い方
27
+
28
+ ```tsx
29
+ import { Slide, SlideCover } from "@squadbase/vantage/slide";
30
+
31
+ <Slide>
32
+ <SlideCover title="2026 年度 第 2 四半期 事業レビュー" subtitle="売上・解約・新規獲得の振り返りと次の打ち手" period="2026 年 7 月〜9 月" author="事業企画チーム" asOf="2026-10-20" source="社内 BI" />
33
+ </Slide>
34
+ ```
35
+
36
+ ## 注意
37
+
38
+ - 表紙は 1 デッキに 1 枚です。2 枚目以降の見出しは他の block のアクションタイトルで書きます。
39
+ - サブタイトルは目的や読み手を 1 行で。長い説明は 2 枚目以降へ。