@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
@@ -9,50 +9,74 @@
9
9
 
10
10
  ```tsx
11
11
  import { AreaChart } from "@squadbase/vantage/components";
12
- import type { AreaChartProps, ChartColor, ChartEventPayload } from "@squadbase/vantage/components";
12
+ import type { AreaChartProps, ChartSeriesColor, ChartEventPayload } from "@squadbase/vantage/components";
13
13
  ```
14
14
 
15
15
  | Prop | Type | Default | 説明 |
16
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` | 右上に凡例を出す。 |
17
+ | `data` | `T[]` | | 行の配列。**必須**。1 行が x 軸の 1 点。数値の列は number か数値文字列(SQL の DECIMAL など)で、それ以外は欠損として扱う。 |
18
+ | `index` | `keyof T & string` | | x 軸に使う列名。**必須**。 |
19
+ | `categories` | `NumericKeys<T>[]` | | 系列として描く列名(数値の列だけ渡せる)。**必須**。この順が凡例と配色の順。6 つ以上は合計の大きい 5 つ +「その他」にまとめる。 |
20
+ | `colors` | `ChartSeriesColor[] \| Record<string, ChartSeriesColor>` | `トークン順` | 系列色。`"chart-1"`〜`"chart-5"`(ライト / ダークに追従)か意味色 `"positive"` / `"warning"` / `"negative"` / `"neutral"`。配列は系列の順、record は系列名ごと。CSS カラーは渡せない。 |
21
+ | `labels` | `Record<string, string>` | | `index` の値・系列名 → 表示名(軸・凡例・ツールチップ・データ表に反映)。例 `{ jan: "1 月", sales: "売上" }`。 |
22
+ | `format` | `ValueFormat` | `"compact"` | 数値の書式。`"compact"` / `"number"` / `"currency"` / `"percent"` / `"multiple"` / `"duration"`、または `{ type, digits, currency, notation, unit, divisor, durationUnit }`。軸は短縮、ツールチップも同じ書式。KPI 系の `format` と同じ値を渡せる。 |
23
+ | `valueFormatter` | `(value: number) => string` | | 書式を関数で直接渡す逃げ道。`format` より優先する。 |
24
+ | `areaOptions` | `AreaChartOptions` | | 面グラフ固有の設定。`{ type, curveType, fill, connectNulls }`(下の表)。 |
25
+ | `forecast` | `{ data: ChartForecastRow[]; category?: string; label?: string }` | | 予測。最初の系列(または `category`)の続きを点線と薄い帯で描く。`data` の行は実績と同じ `index` のキーに、`value`(と任意の `lower` / `upper`)を持つ。`label` の既定は「予測」。 |
26
+ | `comparison` | `{ category: string; vs: "prior-period" \| "prior-year" \| "target" \| "custom"; label?: string }` | | 比較系列。`categories` のうち 1 つを「前年」「計画」などの比較の線にする(細い灰色の実線)。ツールチップに主系列の差を添える。`vs: "custom"` では `label` が必須。 |
27
+ | `highlight` | `"auto" \| "none"` | | 最大値と最新値に値ラベルを付ける(最初の系列だけ・系列が 2 つ以下のときだけ)。既定は Line / Area が `"auto"`、Bar は `index` が日付・年月・年のときだけ `"auto"`。 |
28
+ | `provisionalFrom` | `string \| number` | | ここから先は確定前(速報)の点。`index` の値で渡す。薄い色・点線で描き、凡例とツールチップに `provisionalLabel` を出す。 |
29
+ | `provisionalLabel` | `string` | `"速報"` | 速報の呼び名(凡例・ツールチップ)。 |
30
+ | `target` | `number` | | 目標値。点線の水平線で示し、値軸は必ずこの値を含む。 |
31
+ | `targetLabel` | `string` | `「目標 <書式化した値>」` | 目標線のラベル。 |
32
+ | `annotations` | `ChartAnnotation[]` | | 任意の位置への注記。`{ at, label }` は縦線、`to` を足すと `at`〜`to` の区間の帯。`at` / `to` は `index` の値。横棒では描かない。 |
33
+ | `showLegend` | `boolean` | `true` | 凡例を出す。 |
27
34
  | `showTooltip` | `boolean` | `true` | ホバーでツールチップを出す。 |
28
35
  | `showGridLines` | `boolean` | `true` | 値軸の目盛り線。 |
29
36
  | `showXAxis` | `boolean` | `true` | x 軸を出す。 |
30
37
  | `showYAxis` | `boolean` | `true` | y 軸を出す。 |
31
38
  | `startEndOnly` | `boolean` | `false` | x 軸のラベルを最初と最後だけにする。 |
32
39
  | `yAxisWidth` | `number` | | y 軸ラベルの幅(px)。縦に並べた複数のグラフでプロット領域を揃えたいときに固定する。 |
33
- | `minValue` | `number` | | 値軸の下限。 |
34
- | `maxValue` | `number` | | 値軸の上限。 |
35
- | `autoMinValue` | `boolean` | `false` | 値軸を 0 からではなくデータの範囲に合わせる。 |
36
- | `allowDecimals` | `boolean` | `true` | `false` で目盛りを整数に限る。 |
40
+ | `minValue` | `number` | | 値軸の下限。常に 0 起点なので、0 以下の値だけ有効(負の値の下に余白を取る)。 |
41
+ | `maxValue` | `number` | | 値軸の上限(横棒は横軸)。データが上限を超えるときは軸を広げる。並べて比べる複数のグラフには同じ値を渡して軸をそろえる。 |
42
+ | `allowDecimals` | `boolean` | `true` | `false` で値軸の目盛りを整数に限る。 |
37
43
  | `xAxisLabel` | `string` | | x 軸の名前。 |
38
44
  | `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` | | 足すクラス。 |
45
+ | `onValueChange` | `(value: ChartEventPayload) => void` | | 点(棒)のクリックで呼ばれる。クリックした行に `eventType` と `categoryClicked`(系列名)を足して渡し、同じ点をもう一度押すと `null`。渡すと選択以外が薄くなる。 |
46
+ | `title` | `string` | | グラフの見出し。 |
47
+ | `summary` | `string \| "auto"` | | グラフが言っていることの 1 文要約。見出しの下に出す。`"auto"` なら data から機械的に組む。向きの言い回しを手書きすると data とずれるので `"auto"` を使う。 |
48
+ | `isLoading` | `boolean` | | 読み込み中。最終形と同じ形・高さのスケルトンを出す。 |
49
+ | `emptyState` | `{ title?: string; description?: string; action?: ReactNode }` | | `data` が空のときの表示。高さは保たれる。`title` の既定は「表示できるデータがありません」。 |
50
+ | `height` | `number` | `288` | プロット領域の高さ(px)。文字列(CSS の長さ)は互換のために受けるだけで非推奨。 |
51
+ | `chartOptions` | `EChartsOption` | | 生成した ECharts の option に最後に深くマージする逃げ道。 |
52
+ | `actions` | `boolean \| { includeTitle?: boolean }` | `false` | 右上に PNG の保存 / コピーのボタンを出す(ホバー時)。`title` / `summary` は画像の上に含まれる。含めないなら `{ includeTitle: false }`。 |
53
+ | `fileName` | `string` | `"chart.png"` | PNG 保存時のファイル名(拡張子つき)。`actions` と使う。 |
54
+ | `ariaLabel` | `string` | | グラフの説明(スクリーンリーダー向け)。見出しがあればそちらが使われる。 |
55
+ | `className` | `string` | | 外側の `<figure>` に足すクラス。高さは `height` で決める。 |
56
+
57
+ ### areaOptions
58
+
59
+ | Prop | Type | Default | 説明 |
60
+ | --- | --- | --- | --- |
61
+ | `type` | `"default" \| "stacked" \| "percent"` | `"default"` | `"stacked"` は積み上げ、`"percent"` は各点の合計を 100% にした積み上げ(ツールチップは元の値)。 |
62
+ | `curveType` | `"linear" \| "smooth" \| "step"` | `"linear"` | 線の形。 |
63
+ | `fill` | `"gradient" \| "solid" \| "none"` | `"gradient"` | 面の塗り。 |
64
+ | `connectNulls` | `boolean` | `false` | 値の欠けた点(`null` など)をまたいで線をつなぐ。 |
65
+
66
+ > [!NOTE]
67
+ > `type` / `curveType` / `fill` / `connectNulls` をグラフの props に直接渡す書き方と、`autoMinValue`・`loading` は**非推奨**です(`areaOptions.*` と `isLoading` を使う。面グラフは常に 0 起点で `autoMinValue` は無視されます)。
44
68
 
45
69
  > [!NOTE]
46
- > `colors` は Tailwind のクラスではなく**色の値**です(キャンバスに描くため)。`"chart-2"` のような
47
- > トークン名ならライト / ダークに追従します。軸・凡例・ツールチップの色はいつもテーマから入ります。
70
+ > `colors` は Tailwind のクラスではなく**テーマの色名**(`"chart-1"`〜`"chart-5"`、意味色)です。
71
+ > ライト / ダークに追従します。任意の CSS カラーは渡せません。軸・凡例・ツールチップの色はいつもテーマから入ります。
48
72
 
49
73
  ## 構成比の推移を見る
50
74
 
51
- `type="percent"` にすると、各点の合計を 100% として積み上げます。値軸は 0〜100% に固定され、
52
- ツールチップには**元の値**が `valueFormatter` で出ます。
75
+ `areaOptions={{ type: "percent" }}` にすると、各点の合計を 100% として積み上げます。値軸は 0〜100% に固定され、
76
+ ツールチップには**元の値**が `format` / `valueFormatter` の書式で出ます。
53
77
 
54
78
  ```tsx
55
- <AreaChart data={rows} index="month" categories={["オンライン", "店舗"]} type="percent" />
79
+ <AreaChart data={rows} index="month" categories={["オンライン", "店舗"]} areaOptions={{ type: "percent" }} />
56
80
  ```
57
81
 
58
82
  ## EChart との使い分け
@@ -3,50 +3,76 @@
3
3
  > 比較を棒で見せる型付きグラフ。横並び・積み上げ・横棒に切り替えられる。
4
4
 
5
5
  カテゴリごとの値を棒で比べます。**行の配列(`data`)・カテゴリの列名(`index`)・系列の列名(`categories`)**
6
- を渡すだけで描け、`type` で横並び / 積み上げ / 100% 積み上げ、`layout` で縦棒 / 横棒を切り替えます。
6
+ を渡すだけで描け、`barOptions.type` で横並び / 積み上げ / 100% 積み上げ、`barOptions.layout` で縦棒 / 横棒を切り替えます。
7
7
  配色はトークンに追従します。中身は [`EChart`](parts/echart) です。
8
8
 
9
9
  ```tsx
10
10
  import { BarChart } from "@squadbase/vantage/components";
11
- import type { BarChartProps, ChartColor, ChartEventPayload } from "@squadbase/vantage/components";
11
+ import type { BarChartProps, 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
- | `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` | 右上に凡例を出す。 |
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
+ | `barOptions` | `BarChartOptions<T>` | | 棒グラフ固有の設定。`{ type, layout, barCategoryGap, showZeroValues, targetKey, highlight }`(下の表)。 |
24
+ | `thresholds` | `ChartThreshold[]` | | 棒を値で色分けする。`{ lt?, lte?, gt?, gte?, tone }` を上から順に見て、最初に当たった規則の意味色(`"positive"` / `"warning"` / `"negative"` / `"neutral"`)で塗る。積み上げでは無視。例 `[{ gt: 2, tone: "negative" }, { gt: 1.5, tone: "warning" }]` |
25
+ | `highlight` | `"auto" \| "none"` | | 最大値と最新値に値ラベルを付ける(最初の系列だけ・系列が 2 つ以下のときだけ)。既定は Line / Area が `"auto"`、Bar は `index` が日付・年月・年のときだけ `"auto"`。 |
26
+ | `provisionalFrom` | `string \| number` | | ここから先は確定前(速報)の点。`index` の値で渡す。薄い色・点線で描き、凡例とツールチップに `provisionalLabel` を出す。 |
27
+ | `provisionalLabel` | `string` | `"速報"` | 速報の呼び名(凡例・ツールチップ)。 |
28
+ | `target` | `number` | | 目標値。点線の水平線で示し、値軸は必ずこの値を含む。 |
29
+ | `targetLabel` | `string` | `「目標 <書式化した値>」` | 目標線のラベル。 |
30
+ | `annotations` | `ChartAnnotation[]` | | 任意の位置への注記。`{ at, label }` は縦線、`to` を足すと `at`〜`to` の区間の帯。`at` / `to` は `index` の値。横棒では描かない。 |
31
+ | `showLegend` | `boolean` | `true` | 凡例を出す。 |
25
32
  | `showTooltip` | `boolean` | `true` | ホバーでツールチップを出す。 |
26
33
  | `showGridLines` | `boolean` | `true` | 値軸の目盛り線。 |
27
34
  | `showXAxis` | `boolean` | `true` | x 軸を出す。 |
28
35
  | `showYAxis` | `boolean` | `true` | y 軸を出す。 |
29
36
  | `startEndOnly` | `boolean` | `false` | x 軸のラベルを最初と最後だけにする。 |
30
37
  | `yAxisWidth` | `number` | | y 軸ラベルの幅(px)。縦に並べた複数のグラフでプロット領域を揃えたいときに固定する。 |
31
- | `minValue` | `number` | | 値軸の下限。 |
32
- | `maxValue` | `number` | | 値軸の上限。 |
33
- | `autoMinValue` | `boolean` | `false` | 値軸を 0 からではなくデータの範囲に合わせる。 |
34
- | `allowDecimals` | `boolean` | `true` | `false` で目盛りを整数に限る。 |
38
+ | `minValue` | `number` | | 値軸の下限。常に 0 起点なので、0 以下の値だけ有効(負の値の下に余白を取る)。 |
39
+ | `maxValue` | `number` | | 値軸の上限(横棒は横軸)。データが上限を超えるときは軸を広げる。並べて比べる複数のグラフには同じ値を渡して軸をそろえる。 |
40
+ | `allowDecimals` | `boolean` | `true` | `false` で値軸の目盛りを整数に限る。 |
35
41
  | `xAxisLabel` | `string` | | x 軸の名前。 |
36
42
  | `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` | | 足すクラス。 |
43
+ | `onValueChange` | `(value: ChartEventPayload) => void` | | 点(棒)のクリックで呼ばれる。クリックした行に `eventType` と `categoryClicked`(系列名)を足して渡し、同じ点をもう一度押すと `null`。渡すと選択以外が薄くなる。 |
44
+ | `title` | `string` | | グラフの見出し。 |
45
+ | `summary` | `string \| "auto"` | | グラフが言っていることの 1 文要約。見出しの下に出す。`"auto"` なら data から機械的に組む。向きの言い回しを手書きすると data とずれるので `"auto"` を使う。 |
46
+ | `isLoading` | `boolean` | | 読み込み中。最終形と同じ形・高さのスケルトンを出す。 |
47
+ | `emptyState` | `{ title?: string; description?: string; action?: ReactNode }` | | `data` が空のときの表示。高さは保たれる。`title` の既定は「表示できるデータがありません」。 |
48
+ | `height` | `number` | `288` | プロット領域の高さ(px)。文字列(CSS の長さ)は互換のために受けるだけで非推奨。 |
49
+ | `chartOptions` | `EChartsOption` | | 生成した ECharts の option に最後に深くマージする逃げ道。 |
50
+ | `actions` | `boolean \| { includeTitle?: boolean }` | `false` | 右上に PNG の保存 / コピーのボタンを出す(ホバー時)。`title` / `summary` は画像の上に含まれる。含めないなら `{ includeTitle: false }`。 |
51
+ | `fileName` | `string` | `"chart.png"` | PNG 保存時のファイル名(拡張子つき)。`actions` と使う。 |
52
+ | `ariaLabel` | `string` | | グラフの説明(スクリーンリーダー向け)。見出しがあればそちらが使われる。 |
53
+ | `className` | `string` | | 外側の `<figure>` に足すクラス。高さは `height` で決める。 |
54
+
55
+ ### barOptions
56
+
57
+ | Prop | Type | Default | 説明 |
58
+ | --- | --- | --- | --- |
59
+ | `type` | `"default" \| "stacked" \| "percent"` | `"default"` | `"default"` は横並び、`"stacked"` は積み上げ、`"percent"` は各カテゴリの合計を 100% にした積み上げ。 |
60
+ | `layout` | `"horizontal" \| "vertical"` | `"horizontal"` | `"vertical"` はカテゴリを縦に並べた**横棒**(先頭の行が一番上)。ラベルの長いランキング向け。1 系列の横棒は淡い色が既定。 |
61
+ | `barCategoryGap` | `string \| number` | | カテゴリ間の隙間(`"20%"` や px)。省略時は ECharts の既定。 |
62
+ | `showZeroValues` | `boolean` | `true` | 値が 0 の棒に「0」の値ラベルを付ける(積み上げでは付けない)。 |
63
+ | `targetKey` | `NumericKeys<T>` | | 棒ごとの目標値が入った `data` の列名。各棒に短い目標マーカーを引き、ツールチップに達成率を足す。1 系列と積み上げで使える。渡すとグラフ全体の `target` 線は描かない。 |
64
+ | `highlight` | `string \| number` | | 横棒(`layout: "vertical"`)の 1 系列で伝えたい 1 本。`index` の値で渡す(例 `"東京店"`)。この 1 本だけ濃い色になる。 |
65
+
66
+ > [!NOTE]
67
+ > `type` / `layout` / `barCategoryGap` をグラフの props に直接渡す書き方と、`autoMinValue`・`loading` は**非推奨**です(`barOptions.*` と `isLoading` を使う。棒グラフは常に 0 起点で `autoMinValue` は無視されます)。
42
68
 
43
69
  > [!NOTE]
44
- > `colors` は Tailwind のクラスではなく**色の値**です(キャンバスに描くため)。`"chart-2"` のような
45
- > トークン名ならライト / ダークに追従します。軸・凡例・ツールチップの色はいつもテーマから入ります。
70
+ > `colors` は Tailwind のクラスではなく**テーマの色名**(`"chart-1"`〜`"chart-5"`、意味色)です。
71
+ > ライト / ダークに追従します。任意の CSS カラーは渡せません。軸・凡例・ツールチップの色はいつもテーマから入ります。
46
72
 
47
73
  ## 横棒のランキング
48
74
 
49
- ラベルが長いときは `layout="vertical"` で横棒にします。`yAxisWidth` でラベル幅を固定すると、
75
+ ラベルが長いときは `barOptions={{ layout: "vertical" }}` で横棒にします。`yAxisWidth` でラベル幅を固定すると、
50
76
  長いラベルは省略されます。行の順に上から並ぶので、並べ替えは `data` 側で済ませてください。
51
77
 
52
78
  ```tsx
@@ -54,7 +80,7 @@ import type { BarChartProps, ChartColor, ChartEventPayload } from "@squadbase/va
54
80
  data={stores}
55
81
  index="store"
56
82
  categories={["売上"]}
57
- layout="vertical"
83
+ barOptions={{ layout: "vertical" }}
58
84
  yAxisWidth={96}
59
85
  showLegend={false}
60
86
  />
@@ -8,18 +8,41 @@
8
8
 
9
9
  ```tsx
10
10
  import { BarList } from "@squadbase/vantage/components";
11
- import type { BarListItem, ChartColor } from "@squadbase/vantage/components";
11
+ import type { BarListItem, BarListOptions, ChartSeriesColor } from "@squadbase/vantage/components";
12
12
  ```
13
13
 
14
14
  | Prop | Type | Default | 説明 |
15
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` | | 足すクラス。 |
16
+ | `data` | `T[]` | | 行の配列。**必須**。`index` / `categories` を省くと `{ name, value, href?, key? }` の形として読む。 |
17
+ | `index` | `keyof T & string` | `"name"` | 行の名前に使う列名。 |
18
+ | `categories` | `(keyof T & string)[]` | `["value"]` | 値に使う列名を 1 つだけ入れた配列(`["売上"]`)。最初の 1 つだけを使う。 |
19
+ | `colors` | `ChartSeriesColor \| ChartSeriesColor[]` | `"chart-1"` | バーの色(`"chart-1"`〜`"chart-5"` か意味色、最初の 1 つだけを使う)。全行を同じ淡い色で塗り、順位はバーの長さで読む。 |
20
+ | `labels` | `Record<string, string>` | | 行の名前(`index` の値)→ 表示名。行のラベルとデータ表に反映。 |
21
+ | `thresholds` | `ChartThreshold[]` | | 行の値で意味色に塗り分ける(最初に当たった規則。どれにも当たらない行は通常色)。例 `[{ lt: 40, tone: "negative" }, { lt: 70, tone: "warning" }]` |
22
+ | `highlight` | `string` | | 伝えたい 1 行。`index` の値で渡す。この 1 行だけ濃い色になる。「その他」は選べない。 |
23
+ | `barListOptions` | `BarListOptions` | | BarList 固有の設定。`{ sortOrder, maxItems, otherLabel, exclude, showShare }`(下の表)。 |
24
+ | `format` | `ValueFormat` | `"compact"` | 値の書式。`"compact"` / `"number"` / `"currency"` / `"percent"` などか `{ type, digits, unit, … }`。KPI 系の `format` と同じ値を渡せる。 |
25
+ | `valueFormatter` | `(value: number) => string` | | 書式を関数で直接渡す逃げ道。`format` より優先する。 |
26
+ | `title` | `string` | | グラフの見出し。 |
27
+ | `summary` | `string` | | 1 文の要約。見出しの下に出す。 |
28
+ | `isLoading` | `boolean` | | 読み込み中。最終形と同じ形・高さのスケルトンを出す。 |
29
+ | `emptyState` | `{ title?: string; description?: string; action?: ReactNode }` | | `data` が空のときの表示。`title` の既定は「表示できるデータがありません」。 |
30
+ | `onValueChange` | `(item: T) => void` | | 渡すと行がボタンになり、クリックした行を受け取る(絞り込みの起点に)。「その他」の行は押せない。 |
31
+ | `ariaLabel` | `string` | | グラフの説明(スクリーンリーダー向け)。 |
32
+ | `className` | `string` | | 外側の `<figure>` に足すクラス。リストの高さは行数で決まる(`height` は持たない)。 |
33
+
34
+ ### barListOptions
35
+
36
+ | Prop | Type | Default | 説明 |
37
+ | --- | --- | --- | --- |
38
+ | `sortOrder` | `"descending" \| "ascending" \| "none"` | `"descending"` | 並べ順。`"none"` は渡した順。「その他」は常に最後。 |
39
+ | `maxItems` | `number` | `5` | 個別に出す行の数。超えた分は合計して「その他」の 1 行にまとめる。 |
40
+ | `otherLabel` | `string` | `"その他"` | まとめた行のラベル。 |
41
+ | `exclude` | `readonly string[]` | | 順位に入れず、常に「その他」へ足す行の名前。例 `["(not set)"]`。 |
42
+ | `showShare` | `boolean` | `false` | 値の横に構成比(全行の合計に対する割合。整数 %)を添える。例「¥8,240万 · 43%」。 |
43
+
44
+ > [!NOTE]
45
+ > 次の旧 props は**非推奨**です。`sortOrder` → `barListOptions.sortOrder`、`color` → `colors`、`formatValue` → `valueFormatter` か `format`、`showAnimation` は入場アニメーションを持たないため不要です。`BarListItem.color`(行ごとの色)も非推奨で、行ごとの色は持ちません。
23
46
 
24
47
  残りの props は外側の `<div>` にそのまま渡ります。
25
48
 
@@ -0,0 +1,36 @@
1
+ # ChartFrame
2
+
3
+ > 型付きグラフが共通で使う枠。見出し・要約・読み込み中・空の状態を、高さを保ったまま出す。
4
+
5
+ `LineChart` や `BarChart` などの型付きグラフが内部で使っている枠です。任意の見出しと 1 文の要約を、
6
+ **固定の高さのプロット領域**の上に置きます。プロット領域は見出しで名前が付き、要約で説明されるので、スクリーン
7
+ リーダーには「グラフがある」だけでなく「何を言っているか」が届きます。読み込み中は最終形と同じ形のスケルトン、
8
+ データが無いときは空の表示を、**どちらも高さを変えずに**出します。
9
+
10
+ 通常は型付きグラフの `title` / `summary` / `isLoading` / `emptyState` を使えば足ります。`ChartFrame` を直接使うのは、
11
+ 自前の HTML のグラフを同じ作法で包みたいときです。
12
+
13
+ ```tsx
14
+ import { ChartFrame } from "@squadbase/vantage/components";
15
+ import type { ChartFrameProps, ChartSkeletonVariant } from "@squadbase/vantage/components";
16
+ ```
17
+
18
+ | Prop | Type | Default | 説明 |
19
+ | --- | --- | --- | --- |
20
+ | `title` | `string` | | グラフの見出し。プロット領域の `aria-labelledby` になる。 |
21
+ | `summary` | `string` | | 1 文の要約。見出しの下に出し、プロット領域の `aria-describedby` になる。 |
22
+ | `isLoading` | `boolean` | `false` | 読み込み中。`variant` の形のスケルトンを同じ高さで出す。 |
23
+ | `isEmpty` | `boolean` | `false` | データが無い。高さを保ったまま `emptyState` を出す。 |
24
+ | `emptyState` | `{ title?: string; description?: string; action?: ReactNode }` | | 空のときの表示。題の既定は「表示できるデータがありません」。操作は 1 つだけ置ける。 |
25
+ | `height` | `number \| string` | `288` | プロット領域の高さ。数値は px。 |
26
+ | `variant` | `"line" \| "area" \| "bar" \| "donut" \| "list"` | `"line"` | スケルトンの形。包むグラフに合わせる。 |
27
+ | `ariaLabel` | `string` | | 見出しが無いときのプロット領域のラベル。 |
28
+ | `plotRole` | `"img" \| "group"` | `"img"` | プロット領域の役割。canvas のグラフは `img`。行がボタンやリンクになる HTML のグラフは `group` にして中身を読ませる。 |
29
+ | `dataTable` | `{ caption?: string; columns: string[]; rows: string[][] }` | | 値の表。画面には出さず(`sr-only`)、スクリーンリーダー向けに図の中に置く。先頭の列が行の見出し。 |
30
+ | `children` | `ReactNode` | | プロット本体。読み込み中・空のときは描かない。 |
31
+ | `className` | `string` | | 外枠(`<figure>`)のクラス。 |
32
+
33
+ `ref` はプロット領域(高さが決まっている要素)を指し、`className` とその他の属性は外側の `<figure>` に渡ります。
34
+
35
+ > [!NOTE]
36
+ > プロット領域は読み込み中・空・表示のどの状態でも同じ高さです。高さを揃えるための余白を自分で足さないでください。
@@ -4,8 +4,8 @@
4
4
 
5
5
  値の変化を「↑ +12.4% 前期比」の 1 行で示します。**向き・率・色・文言はすべて `value` と `comparison`
6
6
  から計算**され、外から渡すことはできません — そのため矢印と色が食い違うことがありません。色だけに
7
- 頼らず、矢印と符号が必ず付きます。解約率のように上がると悪い指標は `polarity="lower-is-better"` を
8
- 渡してください。
7
+ 頼らず、矢印と符号が必ず付きます。解約率のように上がると悪い指標は `betterWhen="down"` を
8
+ 渡してください(古い名前の `polarity` も使えます)。
9
9
 
10
10
  非推奨の [`TrendIndicator`](parts/trend-indicator) の置き換えです。
11
11
 
@@ -18,7 +18,8 @@ import type { DeltaProps, Comparison, Polarity } from "@squadbase/vantage/compon
18
18
  | --- | --- | --- | --- |
19
19
  | `value` | `number \| null \| undefined` | | 現在の値。**必須**。前の値は `comparison` から取る。 |
20
20
  | `comparison` | `Comparison` | | 比較の相手。**必須**(増減に必ずラベルが付くように)。下の表を参照。 |
21
- | `polarity` | `"higher-is-better" \| "lower-is-better"` | `"higher-is-better"` | 上がることが良いか。 |
21
+ | `betterWhen` | `"up" \| "down"` | `"up"` | どちらに動くと良いか。解約率のように下がる方が良い指標は `"down"`。`polarity` より優先される。 |
22
+ | `polarity` | `"higher-is-better" \| "lower-is-better" \| "neutral"` | `"higher-is-better"` | 非推奨。`betterWhen` の古い名前。`"neutral"`(良し悪しの色をつけない)はこちらからだけ渡せる。 |
22
23
  | `neutralBand` | `number` | `0.01` | 変化率の絶対値がこれ未満なら横ばい(–)として扱う。既定は 1%。 |
23
24
  | `variant` | `"badge" \| "inline"` | `"badge"` | 枠付きのバッジか、文中に置く素の文字か。 |
24
25
  | `locale` | `string` | `"ja-JP"` | 率の書式のロケール。 |
@@ -43,7 +44,7 @@ import type { DeltaProps, Comparison, Polarity } from "@squadbase/vantage/compon
43
44
  <Delta value={1_240_000} comparison={{ previous: 1_103_000, vs: "prior-period" }} />
44
45
 
45
46
  // 下がる方が良い指標
46
- <Delta value={0.021} comparison={{ previous: 0.026, vs: "prior-period" }} polarity="lower-is-better" />
47
+ <Delta value={0.021} comparison={{ previous: 0.026, vs: "prior-period" }} betterWhen="down" />
47
48
  ```
48
49
 
49
50
  色は `--positive` / `--negative` / `--neutral` のトークンで決まります。KPI を 1 枚のカードで見せる
@@ -2,46 +2,65 @@
2
2
 
3
3
  > 構成比を見せる型付きのドーナツ / 円グラフ。中央に合計を出す。
4
4
 
5
- 構成比をドーナツ(または円)で描きます。**行の配列(`data`)・名前の列(`category`)・値の列(`value`)**
6
- を渡すだけで描け、ドーナツの穴には合計(または `label`)が出ます。中央のラベルはキャンバスではなく
5
+ 構成比をドーナツ(または円)で描きます。**行の配列(`data`)・名前の列(`index`)・値の列(`categories`)**
6
+ を渡すだけで描けます。ドーナツの穴には `donutOptions.centerLabel` で合計や最大の切片を出せます。中央のラベルはキャンバスではなく
7
7
  HTML なので、ページの文字色・書体のまま表示されます。配色はトークンに追従します。
8
8
 
9
9
  ```tsx
10
10
  import { DonutChart } from "@squadbase/vantage/components";
11
- import type { DonutChartProps, ChartColor, ChartEventPayload } from "@squadbase/vantage/components";
11
+ import type { DonutChartProps, DonutChartOptions, ChartSeriesColor, ChartEventPayload } from "@squadbase/vantage/components";
12
12
  ```
13
13
 
14
14
  | Prop | Type | Default | 説明 |
15
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 のみ)。 |
16
+ | `data` | `T[]` | | 行の配列。**必須**。1 行が 1 切片。 |
17
+ | `index` | `keyof T & string` | | 切片の名前に使う列名。 |
18
+ | `categories` | `(keyof T & string)[]` | | 切片の大きさに使う列名を 1 つだけ入れた配列(`["売上"]`)。最初の 1 つだけを使う。number か数値文字列。0 以下と欠損は 0 扱い。 |
19
+ | `colors` | `ChartSeriesColor[]` | `トークン順` | 切片の色(大きい順)。`"chart-1"`〜`"chart-5"` か意味色。「その他」は常に灰色。 |
20
+ | `labels` | `Record<string, string>` | | 切片の名前(`index` の値)→ 表示名。凡例・ツールチップ・データ表に反映。 |
21
+ | `donutOptions` | `DonutChartOptions` | | ドーナツ固有の設定。`{ variant, centerLabel, totalLabel, unit, showLegend, maxSlices }`(下の表)。 |
22
+ | `format` | `ValueFormat` | `"compact"` | 値の書式。`"compact"` / `"number"` / `"currency"` / `"percent"` などか `{ type, digits, unit, … }`。KPI 系の `format` と同じ値を渡せる。 |
23
+ | `valueFormatter` | `(value: number) => string` | | 書式を関数で直接渡す逃げ道。`format` より優先する。 |
24
+ | `title` | `string` | | グラフの見出し。 |
25
+ | `summary` | `string \| "auto"` | | 1 文の要約。`"auto"` なら slices から「最大は <名前>(<構成比>)」を組む。順位や構成比を文に書くなら `"auto"` を使う。 |
26
+ | `isLoading` | `boolean` | | 読み込み中。同じ形・高さのスケルトンを出す。 |
27
+ | `emptyState` | `{ title?: string; description?: string; action?: ReactNode }` | | `data` が空のときの表示。高さは保たれる。 |
28
+ | `height` | `number` | `288` | プロット領域の高さ(px)。文字列は互換のために受けるだけで非推奨。 |
29
+ | `chartOptions` | `EChartsOption` | | 生成した ECharts の option に最後に深くマージする逃げ道。 |
30
+ | `actions` | `boolean \| { includeTitle?: boolean }` | `false` | 右上に PNG の保存 / コピーのボタンを出す(ホバー時)。 |
31
+ | `fileName` | `string` | `"chart.png"` | PNG 保存時のファイル名(拡張子つき)。 |
24
32
  | `showTooltip` | `boolean` | `true` | ホバーで名前・値・構成比を出す。 |
25
33
  | `onValueChange` | `(value: ChartEventPayload) => void` | | 切片のクリックで呼ばれる。行に `eventType: "slice"` と `categoryClicked`(切片名)を足して渡し、同じ切片をもう一度押すと `null`。 |
26
- | `loading` | `boolean` | | ローディング表示を出す。 |
27
- | `ariaLabel` | `string` | | チャートの説明。 |
28
- | `className` | `string` | `"size-40"` | 外枠のクラス。大きさはここで決める。 |
34
+ | `ariaLabel` | `string` | | チャートの説明(スクリーンリーダー向け)。 |
35
+ | `className` | `string` | | 外側の `<figure>` に足すクラス。大きさは `height`(既定 288px)で決める。幅は親に合わせて広がる。 |
29
36
 
30
- ## 凡例を添える
37
+ ### donutOptions
31
38
 
32
- 凡例は持ちません(切片が 5 つ程度ならツールチップで足りるため)。並べて見せたいときは、
33
- 行ごとに同じ色を当てた [`BarList`](parts/bar-list) や表を隣に置いてください。
39
+ | Prop | Type | Default | 説明 |
40
+ | --- | --- | --- | --- |
41
+ | `variant` | `"donut" \| "pie"` | `"donut"` | 穴あきか、円か。 |
42
+ | `centerLabel` | `"none" \| "total" \| "top" \| ReactNode` | `"none"` | 穴の中央に出すもの。`"total"` は合計、`"top"` は最大の切片の名前と構成比。ノードを渡すとそのまま置く。donut のみ。合計は KPI と重複しがちなので既定は出さない。 |
43
+ | `totalLabel` | `string` | `"合計"` | `"total"` の見出し。 |
44
+ | `unit` | `string` | | `"total"` の合計に添える単位(`"セッション"`)。 |
45
+ | `showLegend` | `boolean` | `true` | 凡例(名前と構成比、大きい順)を出す。広いときは右、狭いときは下。消すと、広いときだけ大きい 2 切片に外ラベルが出る。 |
46
+ | `maxSlices` | `number` | `5` | 個別に描く切片の数。超えた分は「その他」1 切片にまとめる。 |
47
+
48
+ > [!NOTE]
49
+ > 旧 props は**非推奨**です。`category` → `index`、`value` → `categories={[value]}`、`variant` → `donutOptions.variant`、`label` / `showLabel` → `donutOptions.centerLabel`、`loading` → `isLoading`。
50
+
51
+ ## 凡例と中央のラベル
52
+
53
+ 名前と構成比を並べた凡例が付きます(広いときは右、狭いときは下)。消すには
54
+ `donutOptions={{ showLegend: false }}`。穴の中央には `centerLabel` で合計や最大の切片を出せます。
34
55
 
35
56
  ```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>
57
+ <DonutChart
58
+ data={rows}
59
+ index="channel"
60
+ categories={["sessions"]}
61
+ donutOptions={{ centerLabel: "total", unit: "セッション" }}
62
+ />
44
63
  ```
45
64
 
46
65
  > [!NOTE]
47
- > 切片が 6 つを超えると色が繰り返されます。小さい切片は「その他」にまとめてから渡してください。
66
+ > 切片が 5 つを超えると、小さい切片は「その他」にまとまります(`donutOptions.maxSlices` で変えられます)。
@@ -7,27 +7,46 @@
7
7
 
8
8
  ```tsx
9
9
  import { FunnelSteps, funnelStepsVariants } from "@squadbase/vantage/components";
10
- import type { FunnelStep } from "@squadbase/vantage/components";
10
+ import type { FunnelStep, ChartColorToken } from "@squadbase/vantage/components";
11
11
  ```
12
12
 
13
13
  | Prop | Type | Default | 説明 |
14
14
  | --- | --- | --- | --- |
15
- | `data` | `FunnelStep[]` | | 各段。**先頭が最大幅**になる。 |
16
- | `showConversion` | `boolean` | | 段の間に転換率を出す。 |
17
- | `formatValue` | `(value: number) => string` | | 値の書式。既定はそのまま。 |
18
- | `animate` | `boolean` | | マウント時に幅を伸ばすアニメーション。 |
19
- | `size` | `"sm" \| "md" \| "lg"` | `"md"` | |
20
- | `direction` | `"vertical" \| "horizontal"` | `"vertical"` | |
15
+ | `data` | `T[]` | | 各段。**必須**。**先頭が最大幅**になる。`index` / `categories` を省くと `{ label, value }` の形として読む。 |
16
+ | `index` | `keyof T & string` | `"label"` | ステップのラベルに使う列名。 |
17
+ | `categories` | `(keyof T & string)[]` | `["value"]` | 値に使う列名を 1 つだけ入れた配列。最初の 1 つだけを使う。 |
18
+ | `colors` | `ChartColorToken[]` | | 段の色(`"chart-1"`〜`"chart-5"`、段の順に繰り返す)。省略時はすべて `"chart-1"`(段は同じ量の絞り込みなので 1 色)。 |
19
+ | `labels` | `Record<string, string>` | | ステップの名前(`index` の値)→ 表示名。ラベルとデータ表に反映。 |
20
+ | `highlight` | `string` | | 伝えたい 1 段。`index` の値で渡す。この 1 段だけ濃い色になる(他は淡い色)。 |
21
+ | `showConversion` | `boolean` | | 段の間に転換率を出す。最も低い転換率だけが強調される。 |
22
+ | `comparison` | `{ values: readonly (number \| null)[]; label?: string }` | | 前期の各段の値(`data` と同じ順)。渡すと転換率の横に前期比(pt)を出し、最も下がった率を強調する。`label` の既定は「前期」。 |
23
+ | `format` | `ValueFormat` | `"compact"` | 値の書式。`"compact"` / `"number"` / `"currency"` / `"percent"` などか `{ type, digits, unit, … }`。KPI 系の `format` と同じ値を渡せる。 |
24
+ | `valueFormatter` | `(value: number) => string` | | 書式を関数で直接渡す逃げ道。`format` より優先する。 |
25
+ | `title` | `string` | | グラフの見出し。 |
26
+ | `summary` | `string` | | 1 文の要約。見出しの下に出す。 |
27
+ | `isLoading` | `boolean` | | 読み込み中。最終形と同じ形・高さのスケルトンを出す。 |
28
+ | `emptyState` | `{ title?: string; description?: string; action?: ReactNode }` | | `data` が空のときの表示。`title` の既定は「表示できるデータがありません」。 |
29
+ | `animate` | `boolean` | `false` | マウント時に幅を伸ばすアニメーション。 |
30
+ | `size` | `"sm" \| "md" \| "lg"` | `"md"` | 段の大きさ。 |
31
+ | `direction` | `"vertical" \| "horizontal"` | `"vertical"` | 並べる向き。 |
32
+ | `ariaLabel` | `string` | | グラフの説明(スクリーンリーダー向け)。 |
33
+ | `className` | `string` | | 外側の `<figure>` に足すクラス。高さは段数で決まる(`height` は持たない)。 |
21
34
 
22
35
  ## FunnelStep
23
36
 
37
+ `index` / `categories` を省いたときに読まれる行の形です。
38
+
24
39
  ```ts
25
40
  interface FunnelStep {
26
41
  label: string;
27
42
  value: number;
28
- color?: string; // 既定はテーマの chart 色
29
43
  onClick?: () => void;
44
+ /** @deprecated Tailwind の bg クラス。`colors` を使う。 */
45
+ color?: string;
30
46
  }
31
47
  ```
32
48
 
33
49
  `onClick` を渡した段は押せるようになるので、その段の内訳へドリルダウンさせられます。
50
+
51
+ > [!NOTE]
52
+ > `formatValue` は**非推奨**です。`valueFormatter`(関数)か `format`(`"compact"` など)を使ってください。
@@ -0,0 +1,45 @@
1
+ # Heatmap
2
+
3
+ > 2 つのカテゴリの掛け合わせを濃淡で見せる型付きのヒートマップ。曜日 × 時間帯やコホートの継続率に。
4
+
5
+ マス目の濃さで値の大小を見せます。**行の配列(`data`)・横軸の列(`x`)・縦軸の列(`y`)・濃さを決める数値の列
6
+ (`value`)**を渡すだけで描けます。配色は 1 色の薄い → 濃いのグラデーション(既定 `--chart-1`)で、
7
+ レインボーにはしません。値が無いマスは塗らず、0 とは区別します(ツールチップとデータ表は「—」)。
8
+
9
+ ```tsx
10
+ import { Heatmap } from "@squadbase/vantage/components";
11
+ import type { HeatmapProps } from "@squadbase/vantage/components";
12
+ ```
13
+
14
+ | Prop | Type | Default | 説明 |
15
+ | --- | --- | --- | --- |
16
+ | `data` | `Record<string, unknown>[]` | | 行の配列。**必須**。1 行が 1 マス(x と y の組)。同じ組が複数あれば後の行が勝つ。 |
17
+ | `x` | `string` | | 横軸(列)に使う列名。**必須**。 |
18
+ | `y` | `string` | | 縦軸(行)に使う列名。**必須**。先頭の行が一番上。 |
19
+ | `value` | `string` | | マスの濃さを決める数値の列名。**必須**。null・欠損・数値でない値のマスは塗らない。 |
20
+ | `xLabels` | `string[]` | | 横軸の並び順(と表示するマス)。省略時は `data` の出現順。ここに無い x の行は描かない。 |
21
+ | `yLabels` | `string[]` | | 縦軸の並び順(と表示するマス)。省略時は `data` の出現順。 |
22
+ | `labels` | `Record<string, string>` | | 列名・軸の値 → 表示名(軸・ツールチップ・データ表)。 |
23
+ | `format` | `ValueFormat` | `"number"` | 数値の書式(`"percent"` や `{ type: "number", unit: "件" }` など)。マス内・ツールチップ・データ表で同じ。 |
24
+ | `valueFormatter` | `(value: number) => string` | | 書式を関数で直接渡す逃げ道。`format` より優先。 |
25
+ | `tone` | `ChartSeriesColor` | `"chart-1"` | 濃淡の色。`"chart-1"`〜`"chart-5"` か意味色(`positive` / `warning` / `negative` / `neutral`)。 |
26
+ | `scale` | `{ min?: number; max?: number }` | | 濃さの固定スケール。省略時はデータの最小〜最大。継続率なら `{ min: 0, max: 100 }`。比べたい範囲が決まっているときだけ渡す。凡例の両端もこの値になる。 |
27
+ | `showValues` | `boolean` | `false` | マスの中に値を書く。 |
28
+ | `showLegend` | `boolean` | `true` | 凡例(薄い → 濃いの帯と両端の値)を出す。 |
29
+ | `showTooltip` | `boolean` | `true` | ホバーでツールチップを出す。 |
30
+ | `details` | `string[]` | | ツールチップとデータ表に添える同じ行の別の数値列。「SLA 未達 2件」のように出る。 |
31
+ | `flag` | `string` | | この列が真(`true` / 0 でない数)の行のマスに、注意色(`--negative`)の枠を付ける。ツールチップにも「要注意」と出る。 |
32
+ | `summary` | `string \| "auto"` | | 1 文要約。`"auto"` で最大のマスから生成。 |
33
+ | `title` | `string` | | グラフの見出し。プロット領域の読み上げ名にもなる。 |
34
+ | `isLoading` | `boolean` | | 読み込み中。最終形と同じ高さのスケルトンを出す。 |
35
+ | `emptyState` | `{ title?: string; description?: string; action?: ReactNode }` | | `data` が空のときの表示。高さは保たれる。既定の題は「表示できるデータがありません」。 |
36
+ | `height` | `number` | `288` | プロット領域の高さ(px)。 |
37
+ | `chartOptions` | `EChartsOption` | | 生成した option に最後に深くマージする逃げ道。 |
38
+ | `actions` | `boolean \| { includeTitle?: boolean }` | `false` | 右上に PNG 保存 / コピーのボタンを出す(ホバー時)。見出しと要約は既定で画像に含まれ、`includeTitle: false` で外せる。 |
39
+ | `fileName` | `string` | `"chart.png"` | PNG 保存時のファイル名(拡張子つき)。 |
40
+ | `className` | `string` | | 外枠(`<figure>`)のクラス。幅はここで決める。 |
41
+ | `ariaLabel` | `string` | | スクリーンリーダー向けのラベル。省略時は「<y の列>×<x の列>のヒートマップ」。 |
42
+
43
+ > [!NOTE]
44
+ > 濃さはデータの範囲に合わせて決まります。別々のヒートマップを並べて比べるときは、全部に同じ `scale` を
45
+ > 渡してください。`minValue` / `maxValue` は非推奨で、`scale` を使います。
@@ -19,7 +19,8 @@ import type { KpiCardProps, KpiCardSource, Comparison, Polarity, ValueFormat } f
19
19
  | `format` | `ValueFormat` | `"compact"` | 値の書式(→ format / comparison のページ)。前期実績・目標・残りにも同じ書式を使う。 |
20
20
  | `locale` | `string` | `"ja-JP"` | 書式のロケール。 |
21
21
  | `comparison` | `Comparison` | | 比較の相手(`{ previous, vs, label? }`)。渡すと増減と前期実績の行が出る。 |
22
- | `polarity` | `"higher-is-better" \| "lower-is-better"` | `"higher-is-better"` | 上がることが良いか。解約率のように下がる方が良い指標は `"lower-is-better"`。 |
22
+ | `betterWhen` | `"up" \| "down"` | `"up"` | どちらに動くと良いか。解約率のように下がる方が良い指標は `"down"`。`polarity` より優先される。 |
23
+ | `polarity` | `"higher-is-better" \| "lower-is-better" \| "neutral"` | `"higher-is-better"` | 非推奨。`betterWhen` の古い名前。`"neutral"`(良し悪しの色をつけない)はこちらからだけ渡せる。 |
23
24
  | `neutralBand` | `number` | `0.01` | 変化率の絶対値がこれ未満なら横ばいとして扱う。 |
24
25
  | `showPrevious` | `boolean` | `true` | 前期の実績(「前期 400」)を出すか。`comparison` が要る。 |
25
26
  | `summary` | `string` | | 結論の 1 文の**テンプレート**。下のプレースホルダをカードが埋める。 |