@squadbase/vantage 0.6.2-dev1.5aae04e → 0.6.2-dev1.81c1bbe
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-2IAPIOPS.js +152 -0
- package/dist/chunk-2IAPIOPS.js.map +1 -0
- package/dist/chunk-57GHR5LN.js +163 -0
- package/dist/chunk-57GHR5LN.js.map +1 -0
- package/dist/{chunk-XPQSTZUU.js → chunk-7S52M2SL.js} +4 -3
- package/dist/chunk-7S52M2SL.js.map +1 -0
- package/dist/chunk-JXFCSF3K.js +673 -0
- package/dist/chunk-JXFCSF3K.js.map +1 -0
- package/dist/{chunk-HKSVYMYJ.js → chunk-RU6WKEOG.js} +56 -927
- package/dist/chunk-RU6WKEOG.js.map +1 -0
- package/dist/components/index.d.ts +3 -243
- package/dist/components/index.js +5 -2
- package/dist/doc/index.d.ts +194 -2
- package/dist/doc/index.js +334 -3
- package/dist/doc/index.js.map +1 -1
- package/dist/format-U0cQl069.d.ts +243 -0
- package/dist/slide/index.d.ts +177 -1
- package/dist/slide/index.js +864 -1
- package/dist/slide/index.js.map +1 -1
- package/dist/table/index.js +5 -2
- package/dist/table/index.js.map +1 -1
- package/dist/ui/index.d.ts +4 -1
- package/dist/ui/index.js +3 -3
- package/dist/ui/index.js.map +1 -1
- package/docs/en/components.md +11 -2
- package/docs/en/doc/doc-action-items.md +49 -0
- package/docs/en/doc/doc-callout.md +38 -0
- package/docs/en/doc/doc-data-table.md +60 -0
- package/docs/en/doc/doc-executive-summary.md +64 -0
- package/docs/en/doc/doc-figure.md +56 -0
- package/docs/en/doc/doc-key-findings.md +61 -0
- package/docs/en/doc/doc-kpi-scorecard.md +80 -0
- package/docs/en/doc/doc-report-header.md +46 -0
- package/docs/en/parts/area-chart.md +99 -0
- package/docs/en/parts/bar-chart.md +91 -0
- package/docs/en/parts/bar-list.md +50 -0
- package/docs/en/parts/category-bar.md +37 -0
- package/docs/en/parts/chart-frame.md +39 -0
- package/docs/en/parts/donut-chart.md +72 -0
- package/docs/en/parts/funnel-steps.md +2 -1
- package/docs/en/parts/heatmap.md +53 -0
- package/docs/en/parts/legend.md +35 -0
- package/docs/en/parts/line-chart.md +94 -0
- package/docs/en/parts/progress-circle.md +33 -0
- package/docs/en/parts/sample-data.md +39 -0
- package/docs/en/parts/scatter-chart.md +56 -0
- package/docs/en/parts/tracker.md +36 -0
- package/docs/en/parts/updated-at.md +30 -0
- package/docs/en/parts/waterfall-chart.md +56 -0
- package/docs/en/slide/slide-chart-insight.md +52 -0
- package/docs/en/slide/slide-cover.md +39 -0
- package/docs/en/slide/slide-exec-summary.md +47 -0
- package/docs/en/slide/slide-kpi-grid.md +55 -0
- package/docs/en/slide/slide-kpi-hero.md +58 -0
- package/docs/en/slide/slide-next-actions.md +49 -0
- package/docs/en/slide/slide-scorecard-table.md +54 -0
- package/docs/en/ui/alert-dialog.md +42 -0
- package/docs/en/ui/avatar.md +31 -0
- package/docs/en/ui/combobox.md +74 -0
- package/docs/en/ui/drawer.md +41 -0
- package/docs/en/ui/empty.md +1 -1
- package/docs/en/ui/error-state.md +4 -3
- package/docs/en/ui/field.md +42 -0
- package/docs/en/ui/hover-card.md +21 -0
- package/docs/en/ui/kbd.md +17 -0
- package/docs/en/ui/loading.md +1 -1
- package/docs/en/ui/pagination.md +36 -0
- package/docs/en/ui/radio-group.md +21 -0
- package/docs/en/ui/toast.md +44 -0
- package/docs/en/ui/toggle-group.md +4 -3
- package/docs/index.json +697 -77
- package/docs/ja/components.md +10 -1
- package/docs/ja/doc/doc-action-items.md +49 -0
- package/docs/ja/doc/doc-callout.md +38 -0
- package/docs/ja/doc/doc-data-table.md +60 -0
- package/docs/ja/doc/doc-executive-summary.md +64 -0
- package/docs/ja/doc/doc-figure.md +56 -0
- package/docs/ja/doc/doc-key-findings.md +61 -0
- package/docs/ja/doc/doc-kpi-scorecard.md +80 -0
- package/docs/ja/doc/doc-report-header.md +46 -0
- package/docs/ja/parts/area-chart.md +49 -25
- package/docs/ja/parts/bar-chart.md +50 -24
- package/docs/ja/parts/bar-list.md +31 -8
- package/docs/ja/parts/chart-frame.md +36 -0
- package/docs/ja/parts/donut-chart.md +45 -26
- package/docs/ja/parts/funnel-steps.md +27 -8
- package/docs/ja/parts/heatmap.md +45 -0
- package/docs/ja/parts/legend.md +36 -0
- package/docs/ja/parts/line-chart.md +48 -22
- package/docs/ja/parts/sample-data.md +61 -0
- package/docs/ja/parts/scatter-chart.md +69 -0
- package/docs/ja/parts/updated-at.md +27 -0
- package/docs/ja/parts/waterfall-chart.md +61 -0
- package/docs/ja/slide/slide-chart-insight.md +52 -0
- package/docs/ja/slide/slide-cover.md +39 -0
- package/docs/ja/slide/slide-exec-summary.md +47 -0
- package/docs/ja/slide/slide-kpi-grid.md +55 -0
- package/docs/ja/slide/slide-kpi-hero.md +58 -0
- package/docs/ja/slide/slide-next-actions.md +49 -0
- package/docs/ja/slide/slide-scorecard-table.md +54 -0
- package/docs/ja/ui/empty.md +1 -1
- package/docs/ja/ui/error-state.md +4 -3
- package/docs/ja/ui/loading.md +1 -1
- package/docs/ja/ui/toggle-group.md +4 -3
- package/package.json +2 -2
- package/registry/ui/area-chart.tsx +45 -19
- package/registry/ui/bar-chart.tsx +45 -19
- package/registry/ui/bar-list.tsx +44 -17
- package/registry/ui/box-plot-chart.tsx +45 -19
- package/registry/ui/category-bar.tsx +44 -17
- package/registry/ui/chart-frame.tsx +44 -17
- package/registry/ui/delta.tsx +4 -4
- package/registry/ui/donut-chart.tsx +46 -19
- package/registry/ui/echart.tsx +171 -54
- package/registry/ui/heatmap.tsx +45 -19
- package/registry/ui/histogram-chart.tsx +45 -19
- package/registry/ui/legend.tsx +44 -17
- package/registry/ui/line-chart.tsx +45 -19
- package/registry/ui/page-shell.tsx +7 -7
- package/registry/ui/paired-chart.tsx +45 -19
- package/registry/ui/sample-data.tsx +1 -1
- package/registry/ui/scatter-chart.tsx +45 -19
- package/registry/ui/slider.tsx +1 -1
- package/registry/ui/status-badge.tsx +8 -8
- package/registry/ui/tooltip.tsx +6 -2
- package/registry/ui/tracker.tsx +9 -3
- package/registry/ui/trend-indicator.tsx +2 -2
- package/registry/ui/waterfall-chart.tsx +45 -19
- package/skills/vantage-design/SKILL.md +27 -25
- package/skills/vantage-design/references/extract.md +16 -14
- package/skills/vantage-design/references/format.md +6 -5
- package/skills/vantage-design/references/presets.md +60 -110
- package/skills/vantage-slide/SKILL.md +54 -36
- package/templates/AGENTS.md +2 -2
- package/templates/agents/doc.md +45 -0
- package/templates/agents/page.md +22 -1
- package/templates/agents/slide.md +55 -2
- package/theme.css +16 -15
- package/dist/chunk-HKSVYMYJ.js.map +0 -1
- package/dist/chunk-XPQSTZUU.js.map +0 -1
package/docs/ja/components.md
CHANGED
|
@@ -3,13 +3,15 @@
|
|
|
3
3
|
> Vantage に同梱される shadcn/ui (Base UI) キットと、ダッシュボード用の複合コンポーネントのリファレンス。
|
|
4
4
|
|
|
5
5
|
Vantage は **shadcn/ui** をそのまま同梱しています。インストールもコピーも不要で、import するだけで
|
|
6
|
-
使えます。入り口は
|
|
6
|
+
使えます。入り口は 5 つのサブパスで、**サイドバーもこの 5 つで区切ってあります**(`/slide` と `/doc` は、スライドとドキュメントのページの中身に使う block 用です)。
|
|
7
7
|
|
|
8
8
|
| サブパス | 中身 |
|
|
9
9
|
| --- | --- |
|
|
10
10
|
| [`@squadbase/vantage/ui`](ui/button) | shadcn/ui のプリミティブ(Base UI 版)と、`cn()` などのユーティリティ |
|
|
11
11
|
| [`@squadbase/vantage/components`](parts/page-shell) | それらを組み上げたダッシュボード部品 |
|
|
12
12
|
| [`@squadbase/vantage/markdown`](markdown/markdown-renderer) | Markdown の描画だけ(重いので分離) |
|
|
13
|
+
| [`@squadbase/vantage/slide`](slide/slide-cover) | `.slide.tsx` の 1 枚の中身に置く block(表紙・要旨・KPI・グラフ・スコアカード・次の打ち手の 7 つ) |
|
|
14
|
+
| [`@squadbase/vantage/doc`](doc/doc-report-header) | `.doc.tsx` の `<Document>` の中に並べる節・部品の block(8 つ) |
|
|
13
15
|
|
|
14
16
|
```tsx
|
|
15
17
|
import { Button, Card, Badge } from "@squadbase/vantage/ui";
|
|
@@ -91,6 +93,13 @@ KPI は [`KpiCard`](parts/kpi-card)、増減は [`Delta`](parts/delta)(`compar
|
|
|
91
93
|
Markdown 描画は Shiki の全言語文法を抱えており、`components` のバレルに混ぜるとビルド出力が
|
|
92
94
|
10 MB 以上増えるため、意図的に分けてあります。
|
|
93
95
|
|
|
96
|
+
## `@squadbase/vantage/slide` と `@squadbase/vantage/doc`
|
|
97
|
+
|
|
98
|
+
[スライド](page-types/slide)と[ドキュメント](page-types/doc)のページに置く block です。`/components` とは別のサブパスで、`vantage add` のコピー対象にもなりません(import して使います)。
|
|
99
|
+
|
|
100
|
+
- **slide**: 1 枚の `<Slide>` の中身(`<Slide>` 自体は持ちません)。[`SlideCover`](slide/slide-cover) / [`SlideExecSummary`](slide/slide-exec-summary) / [`SlideKpiHero`](slide/slide-kpi-hero) / [`SlideKpiGrid`](slide/slide-kpi-grid) / [`SlideChartInsight`](slide/slide-chart-insight) / [`SlideScorecardTable`](slide/slide-scorecard-table) / [`SlideNextActions`](slide/slide-next-actions)
|
|
101
|
+
- **doc**: `<Document>` の中に並べる節や部品(`DocFigure` / `DocDataTable` / `DocCallout` は節の中に置く部品)。[`DocReportHeader`](doc/doc-report-header) / [`DocExecutiveSummary`](doc/doc-executive-summary) / [`DocKpiScorecard`](doc/doc-kpi-scorecard) / [`DocFigure`](doc/doc-figure) / [`DocDataTable`](doc/doc-data-table) / [`DocCallout`](doc/doc-callout) / [`DocKeyFindings`](doc/doc-key-findings) / [`DocActionItems`](doc/doc-action-items)
|
|
102
|
+
|
|
94
103
|
## 組み合わせる
|
|
95
104
|
|
|
96
105
|
```tsx
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# DocActionItems
|
|
2
|
+
|
|
3
|
+
> 次にやること。内容・担当・期限・期待する効果・優先度。
|
|
4
|
+
|
|
5
|
+
推奨する対応を並べるセクションです。内容・担当・期限・期待する効果・優先度を出します。既定の `table` は表、`asks` は読み手へのお願い(紹介・判断・採用など)を短い箇条書きにします。優先度は高・中・低の語だけで、バッジや色は付きません。
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { DocActionItems } from "@squadbase/vantage/doc";
|
|
9
|
+
import type { DocActionItemsProps, DocActionItem, DocActionPriority } from "@squadbase/vantage/doc";
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
> [!NOTE]
|
|
13
|
+
> これは **`<Document>` 直下に並べる 1 セクション分**です。見出し・本文の大きさや幅は `<Document>` が決めるので、ここでは寸法を指定しません。 `action` は `ReactNode` で、Markdown 文字列は解釈されません。 ページ全体の組み方は [ドキュメント](page-types/doc) を参照してください。
|
|
14
|
+
|
|
15
|
+
## props
|
|
16
|
+
|
|
17
|
+
| Prop | Type | Default | 説明 |
|
|
18
|
+
| --- | --- | --- | --- |
|
|
19
|
+
| `title` | `string` | `"推奨する対応"` | 見出しの文言。 |
|
|
20
|
+
| `headingLevel` | `2 \| 3` | `2` | 見出しのレベル。`<Document>` 直下は 2、別セクションの中は 3。 |
|
|
21
|
+
| `items` | `DocActionItem[]` | | 対応。重要なものから。**必須**。 |
|
|
22
|
+
| `items[].action` | `ReactNode` | | やること。**必須**。 |
|
|
23
|
+
| `items[].owner` | `string` | | 担当。 |
|
|
24
|
+
| `items[].due` | `string` | | 期限。書いたまま出る(「2026-11-15」「11 月末」)。 |
|
|
25
|
+
| `items[].impact` | `string` | | 期待する効果(「解約率 −0.5pt」)。`table` だけに出る。 |
|
|
26
|
+
| `items[].priority` | `"high" \| "medium" \| "low"` | | 優先度。高・中・低の語で出る(高は太字)。`table` だけに出る。 |
|
|
27
|
+
| `variant` | `"table" \| "asks"` | `"table"` | 表か、読み手へのお願いの箇条書きか。 |
|
|
28
|
+
|
|
29
|
+
## 使い方
|
|
30
|
+
|
|
31
|
+
```tsx
|
|
32
|
+
import { Document, DocActionItems } from "@squadbase/vantage/doc";
|
|
33
|
+
|
|
34
|
+
<Document>
|
|
35
|
+
<DocActionItems
|
|
36
|
+
items={[
|
|
37
|
+
{ action: "法人プランの導入支援を増員する", owner: "CS 部", due: "2026-11-15", impact: "解約率 −0.5pt", priority: "high" },
|
|
38
|
+
{ action: "紹介プログラムの特典を見直す", owner: "マーケティング部", due: "11 月末", impact: "紹介経由の新規 +10 社", priority: "medium" },
|
|
39
|
+
{ action: "料金ページの文言を改善する", owner: "プロダクト部", priority: "low" },
|
|
40
|
+
]}
|
|
41
|
+
/>
|
|
42
|
+
</Document>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## 注意
|
|
46
|
+
|
|
47
|
+
- `due` は書いたまま表示されます(「2026-11-15」「11 月末」)。値の無い担当・期限・効果は「—」になります。
|
|
48
|
+
- `variant="asks"` は担当と「`due` まで」だけを添えます(例: 「(CS 部・11 月末 まで)」)。効果と優先度は出しません。
|
|
49
|
+
- 印刷時、`asks` は項目 1 つごとにページをまたぎません。
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# DocCallout
|
|
2
|
+
|
|
3
|
+
> 本文の中の囲み。補足・示唆・注意・決定事項。
|
|
4
|
+
|
|
5
|
+
読み手に見落とされたくない 1 点を囲んで示す block です。`role="note"` の `div` に、種類ごとの意味色の左罫線が付きます(決定事項は中立色)。種類は「注意」「示唆」のような語でも表示されるので、色だけに頼りません。飾りには使いません。
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { DocCallout } from "@squadbase/vantage/doc";
|
|
9
|
+
import type { DocCalloutProps, DocCalloutKind } from "@squadbase/vantage/doc";
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
> [!NOTE]
|
|
13
|
+
> これは **本文やセクションの中に置く部品**です(`<Document>` 直下の 1 セクションではありません)。見出し・本文の大きさや幅は `<Document>` が決めるので、ここでは寸法を指定しません。 `children` は `string` か `ReactNode` で、Markdown 文字列は解釈されません。 ページ全体の組み方は [ドキュメント](page-types/doc) を参照してください。
|
|
14
|
+
|
|
15
|
+
## props
|
|
16
|
+
|
|
17
|
+
| Prop | Type | Default | 説明 |
|
|
18
|
+
| --- | --- | --- | --- |
|
|
19
|
+
| `kind` | `"note" \| "insight" \| "warning" \| "decision"` | `"note"` | 種類。補足 / 示唆 / 注意 / 決定事項。 |
|
|
20
|
+
| `title` | `string` | | 囲みの見出し(1 行)。渡すと「<種類の語>: <title>」と出る。省くと種類の語だけが出る。種類の語と同じ文字列を渡したときも 1 回だけ出る。 |
|
|
21
|
+
| `children` | `ReactNode` | | 本文。`string` なら段落になる。Markdown 文字列は解釈されない。**必須**。 |
|
|
22
|
+
|
|
23
|
+
## 使い方
|
|
24
|
+
|
|
25
|
+
```tsx
|
|
26
|
+
import { Document, DocCallout } from "@squadbase/vantage/doc";
|
|
27
|
+
|
|
28
|
+
<Document>
|
|
29
|
+
<DocCallout kind="warning" title="9 月の数値は速報値">
|
|
30
|
+
10 月 10 日の確定で変わることがあります。
|
|
31
|
+
</DocCallout>
|
|
32
|
+
</Document>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## 注意
|
|
36
|
+
|
|
37
|
+
- 種類の語(「補足」「示唆」「注意」「決定事項」)は block が付けます。`title` にも同じ語を書くと重複するので、見出しの内容だけを書きます。
|
|
38
|
+
- 印刷時は 1 ページに収まるよう、ページをまたぎません。
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# DocDataTable
|
|
2
|
+
|
|
3
|
+
> 印刷物の表に要る注記つきの表。タイトル・単位・合計行・脚注・出典。
|
|
4
|
+
|
|
5
|
+
印刷物の表に必要な要素を揃えた表です。タイトル、単位、右揃えの数値、合計行、強調行、脚注、出典を出します。素の `table` なので、スタイルと印刷時の行の分割回避は `<Document>` が担います(並べ替えやスクロールが要る画面向けの表は `DataTable`)。
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { DocDataTable } from "@squadbase/vantage/doc";
|
|
9
|
+
import type { DocDataTableProps, DocTableColumn, DocTableRow, DocTableCell } from "@squadbase/vantage/doc";
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
> [!NOTE]
|
|
13
|
+
> これは **本文やセクションの中に置く部品**です(`<Document>` 直下の 1 セクションではありません)。見出し・本文の大きさや幅は `<Document>` が決めるので、ここでは寸法を指定しません。 セルは文字列か数値で、`ReactNode` は渡せません。 ページ全体の組み方は [ドキュメント](page-types/doc) を参照してください。
|
|
14
|
+
|
|
15
|
+
## props
|
|
16
|
+
|
|
17
|
+
| Prop | Type | 説明 |
|
|
18
|
+
| --- | --- | --- |
|
|
19
|
+
| `title` | `string` | 表のタイトル(表の上のキャプション)。 |
|
|
20
|
+
| `unit` | `string` | 単位・スケール(「単位: 百万円」)。タイトルがあれば「(単位: 百万円)」と続く。 |
|
|
21
|
+
| `columns` | `DocTableColumn[]` | 列(`{ key; label; format?: ValueFormat; align?: "left" \| "right" \| "center" }`)。`format` を省くと桁区切りの数値。`align` を省くと数値の列は右揃え、それ以外は左揃え。**必須**。 |
|
|
22
|
+
| `rows` | `DocTableRow[]` | 行。`columns` の `key` を持つオブジェクト。セルは文字列か数値(`null` / `undefined` / 空文字は「—」)。**必須**。 |
|
|
23
|
+
| `total` | `DocTableRow` | 合計行(`tfoot`)。`rows` と同じキーで書く。 |
|
|
24
|
+
| `highlightRows` | `number[]` | 太字にする行の index(0 始まり、`rows` の添字)。 |
|
|
25
|
+
| `footnotes` | `{ mark: string; text: string }[]` | 脚注。セルの文字列に同じ `mark`(「※1」)を書くと対応する。 |
|
|
26
|
+
| `source` | `string` | 出典。キャプションに「出典: …」と出る。 |
|
|
27
|
+
| `asOf` | `string` | データを取った日。日付だけを書く(「2026-10-03」)。block が「データ時点」の語を付ける。 |
|
|
28
|
+
|
|
29
|
+
## 使い方
|
|
30
|
+
|
|
31
|
+
```tsx
|
|
32
|
+
import { Document, DocDataTable } from "@squadbase/vantage/doc";
|
|
33
|
+
|
|
34
|
+
<Document>
|
|
35
|
+
<DocDataTable
|
|
36
|
+
title="部門別の売上"
|
|
37
|
+
unit="単位: 百万円"
|
|
38
|
+
columns={[
|
|
39
|
+
{ key: "dept", label: "部門" },
|
|
40
|
+
{ key: "sales", label: "売上", format: "number" },
|
|
41
|
+
{ key: "share", label: "構成比", format: { type: "percent", digits: 1 } },
|
|
42
|
+
]}
|
|
43
|
+
rows={[
|
|
44
|
+
{ dept: "法人営業", sales: 312, share: 0.58 },
|
|
45
|
+
{ dept: "パートナー", sales: 148, share: 0.27 },
|
|
46
|
+
{ dept: "オンライン ※1", sales: 80, share: 0.15 },
|
|
47
|
+
]}
|
|
48
|
+
total={{ dept: "合計", sales: 540, share: 1 }}
|
|
49
|
+
highlightRows={[0]}
|
|
50
|
+
footnotes={[{ mark: "※1", text: "9 月から集計対象に追加" }]}
|
|
51
|
+
source="会計システム"
|
|
52
|
+
asOf="2026-10-03"
|
|
53
|
+
/>
|
|
54
|
+
</Document>
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## 注意
|
|
58
|
+
|
|
59
|
+
- 数値は `tabular-nums` で桁が揃い、値が無いセルは「—」になります。
|
|
60
|
+
- 印刷時は行ごとにページをまたぎません。長い表は行の間で改ページされ、キャプション(脚注・出典)は 1 ページにまとまります。
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# DocExecutiveSummary
|
|
2
|
+
|
|
3
|
+
> 結論を先に書く要旨。結論 1 文、要点 3〜5 個、任意で主要な数字。
|
|
4
|
+
|
|
5
|
+
結論を先に書く(BLUF)要旨のセクションです。結論の 1 文、番号付きの要点 3〜5 個、任意で最大 3 つの主要な数字を出します。数字の増減は渡した `delta` の符号から向きを決め、▲▼ と符号を必ず出すので、色が見えなくても向きが分かります。
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { DocExecutiveSummary } from "@squadbase/vantage/doc";
|
|
9
|
+
import type { DocExecutiveSummaryProps, DocSummaryMetric } from "@squadbase/vantage/doc";
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
> [!NOTE]
|
|
13
|
+
> これは **`<Document>` 直下に並べる 1 セクション分**です。見出し・本文の大きさや幅は `<Document>` が決めるので、ここでは寸法を指定しません。 `conclusion` と `points` は `string` か `ReactNode` で、Markdown 文字列は解釈されません。 ページ全体の組み方は [ドキュメント](page-types/doc) を参照してください。
|
|
14
|
+
|
|
15
|
+
## props
|
|
16
|
+
|
|
17
|
+
| Prop | Type | Default | 説明 |
|
|
18
|
+
| --- | --- | --- | --- |
|
|
19
|
+
| `title` | `string` | `"要旨"` | 見出しの文言。 |
|
|
20
|
+
| `headingLevel` | `2 \| 3` | `2` | 見出しのレベル。`<Document>` 直下は 2、別セクションの中は 3。 |
|
|
21
|
+
| `conclusion` | `ReactNode` | | 結論を 1 文で。太字で出る。**必須**。 |
|
|
22
|
+
| `points` | `ReactNode[]` | | 裏付ける要点。3〜5 個、重要な順。番号付きで出る。**必須**。 |
|
|
23
|
+
| `metrics` | `DocSummaryMetric[]` | | 主要な数字(最大 3、超えた分は無視)。 |
|
|
24
|
+
| `metrics[].label` | `string` | | 指標の名前。 |
|
|
25
|
+
| `metrics[].value` | `number \| null` | | 値。`null` は「—」。 |
|
|
26
|
+
| `metrics[].format` | `ValueFormat` | | `value` の書式(`"currency"`、`{ type: "percent", digits: 1 }` など)。 |
|
|
27
|
+
| `metrics[].display` | `string` | | 渡すと値の代わりにこの文字列を出す(「約 5,400 万円」)。 |
|
|
28
|
+
| `metrics[].delta` | `{ value: number; format?: ValueFormat }` | | 比較先からの増減そのもの(現在値 − 比較値)。向きは符号で決まり、▲▼ と符号を必ず出す。省くと比較を出さない。`format` を省くと指標の `format` を使う。 |
|
|
29
|
+
| `metrics[].comparisonLabel` | `string` | `"前期比"` | 比較の名前(「前月比」)。 |
|
|
30
|
+
| `metrics[].betterWhen` | `"up" \| "down"` | `"up"` | どちらに動くと良いか。解約率やコストは `"down"`。色は良し悪しだけを足す。 |
|
|
31
|
+
|
|
32
|
+
## 使い方
|
|
33
|
+
|
|
34
|
+
```tsx
|
|
35
|
+
import { Document, DocExecutiveSummary } from "@squadbase/vantage/doc";
|
|
36
|
+
|
|
37
|
+
<Document>
|
|
38
|
+
<DocExecutiveSummary
|
|
39
|
+
conclusion="9 月の売上は計画を上回ったが、新規獲得は目標に届いていない。"
|
|
40
|
+
points={[
|
|
41
|
+
"売上は 5,390 万円で、計画比 +3.7%。",
|
|
42
|
+
"解約率は 1.8% まで下がり、3 か月連続で改善。",
|
|
43
|
+
"新規獲得は 38 社で、目標の 50 社に未達。",
|
|
44
|
+
]}
|
|
45
|
+
metrics={[
|
|
46
|
+
{ label: "売上", value: 53_900_000, format: "currency", delta: { value: 3_700_000 }, comparisonLabel: "前月比" },
|
|
47
|
+
{
|
|
48
|
+
label: "解約率",
|
|
49
|
+
value: 0.018,
|
|
50
|
+
format: { type: "percent", digits: 1 },
|
|
51
|
+
delta: { value: -0.003, format: { type: "number", digits: 1, unit: "pt", divisor: 0.01 } },
|
|
52
|
+
comparisonLabel: "前月比",
|
|
53
|
+
betterWhen: "down",
|
|
54
|
+
},
|
|
55
|
+
]}
|
|
56
|
+
/>
|
|
57
|
+
</Document>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## 注意
|
|
61
|
+
|
|
62
|
+
- 下がることが良い指標は `betterWhen: "down"` にします(色の良し悪しが反転します。▲▼ と符号は実際の向きのままです)。
|
|
63
|
+
- `delta` は比較値ではなく増減そのものです。比率の指標(解約率など)は、例のように `format` で `pt` 表記にすると相対変化と読み違えません。
|
|
64
|
+
- 印刷時は、要点 1 つごと・主要な数字のタイル 1 つごとがページをまたぎません。セクション全体は途中で改ページされることがあります。
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# DocFigure
|
|
2
|
+
|
|
3
|
+
> 図の約束事を 1 か所に。主張のタイトル、単位、図、出典つきのキャプション。
|
|
4
|
+
|
|
5
|
+
図の約束事をまとめた block です。主張を書いたタイトル、単位、チャート(`children`)、出典と注記のキャプションを `figure` / `figcaption` で組みます。チャートは自由で、型付きグラフでも `EChart` でも画像でも構いません。出典と時点が無い数字は未完成として、`source` と `asOf` を最初から用意しています。
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { DocFigure } from "@squadbase/vantage/doc";
|
|
9
|
+
import type { DocFigureProps } from "@squadbase/vantage/doc";
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
> [!NOTE]
|
|
13
|
+
> これは **本文やセクションの中に置く部品**です(`<Document>` 直下の 1 セクションではありません)。見出し・本文の大きさや幅は `<Document>` が決めるので、ここでは寸法を指定しません。 `children` はチャート(`ReactNode`)です。 ページ全体の組み方は [ドキュメント](page-types/doc) を参照してください。
|
|
14
|
+
|
|
15
|
+
## props
|
|
16
|
+
|
|
17
|
+
| Prop | Type | 説明 |
|
|
18
|
+
| --- | --- | --- |
|
|
19
|
+
| `title` | `string` | 図が示す主張を文で(「解約率は 2 か月連続で低下」)。主題(「解約率の推移」)にしない。**必須**。 |
|
|
20
|
+
| `unit` | `string` | 単位・スケール(「単位: %」)。タイトルの直下に出る。定義や但し書きは `notes` に書く。 |
|
|
21
|
+
| `number` | `number` | 図の番号。キャプションに「図 N」と出る。 |
|
|
22
|
+
| `source` | `string` | データの出どころ。キャプションに「出典: …」と出る。 |
|
|
23
|
+
| `asOf` | `string` | データを取った日。日付だけを書く(「2026-10-03」)。block が「データ時点」の語を付ける。 |
|
|
24
|
+
| `notes` | `string[]` | 注記・定義。1 行 1 件。 |
|
|
25
|
+
| `children` | `ReactNode` | チャート。列の全幅を使う。**必須**。 |
|
|
26
|
+
|
|
27
|
+
## 使い方
|
|
28
|
+
|
|
29
|
+
```tsx
|
|
30
|
+
import { Document, DocFigure } from "@squadbase/vantage/doc";
|
|
31
|
+
import { EChart, type EChartsOption } from "@squadbase/vantage/components";
|
|
32
|
+
|
|
33
|
+
const option: EChartsOption = {
|
|
34
|
+
xAxis: { type: "category", data: ["7 月", "8 月", "9 月"] },
|
|
35
|
+
yAxis: { type: "value" },
|
|
36
|
+
series: [{ type: "line", data: [2.4, 2.1, 1.8] }],
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
<Document>
|
|
40
|
+
<DocFigure
|
|
41
|
+
number={1}
|
|
42
|
+
title="解約率は 2 か月連続で低下"
|
|
43
|
+
unit="単位: %"
|
|
44
|
+
source="課金システム"
|
|
45
|
+
asOf="2026-10-03"
|
|
46
|
+
notes={["解約率は、月初の契約数に対するその月の解約数の割合。"]}
|
|
47
|
+
>
|
|
48
|
+
<EChart option={option} height={240} ariaLabel="解約率の推移(7〜9 月)" />
|
|
49
|
+
</DocFigure>
|
|
50
|
+
</Document>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## 注意
|
|
54
|
+
|
|
55
|
+
- `children` のチャートには `title` を付けません。タイトルは `DocFigure` の `title` に書きます。チャートの読み上げ名が要るときは `ariaLabel` を使います。
|
|
56
|
+
- 図は印刷時に 1 ページに収まるよう、ページをまたぎません。
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# DocKeyFindings
|
|
2
|
+
|
|
3
|
+
> 分析で分かったこと 3〜5 件。結論の見出し、根拠、任意の数字。
|
|
4
|
+
|
|
5
|
+
「分かったこと」のセクションです。結論を書いた見出し、その下に根拠、任意で数字を 1 つ添えた発見を 3〜5 件並べます。各発見は番号付きの `h3` です。数字の増減は渡した `delta` の符号から向きを決め、▲▼ と符号を必ず出します。
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { DocKeyFindings } from "@squadbase/vantage/doc";
|
|
9
|
+
import type { DocKeyFindingsProps, DocFinding, DocFindingMetric } from "@squadbase/vantage/doc";
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
> [!NOTE]
|
|
13
|
+
> これは **`<Document>` 直下に並べる 1 セクション分**です。見出し・本文の大きさや幅は `<Document>` が決めるので、ここでは寸法を指定しません。 `evidence` は `string` か `ReactNode` で、Markdown 文字列は解釈されません。 ページ全体の組み方は [ドキュメント](page-types/doc) を参照してください。
|
|
14
|
+
|
|
15
|
+
## props
|
|
16
|
+
|
|
17
|
+
| Prop | Type | Default | 説明 |
|
|
18
|
+
| --- | --- | --- | --- |
|
|
19
|
+
| `title` | `string` | `"主要な発見"` | セクションの見出し。 |
|
|
20
|
+
| `headingLevel` | `2 \| 3` | `2` | 見出しのレベル。`<Document>` 直下は 2、別セクションの中は 3。 |
|
|
21
|
+
| `findings` | `DocFinding[]` | | 発見(`{ headline: string; evidence: ReactNode; metric?: DocFindingMetric }`)。3〜5 件、重要な順。**必須**。 |
|
|
22
|
+
| `findings[].metric` | `DocFindingMetric` | | 発見に添える数字 1 つ。以下のフィールドを持つ。 |
|
|
23
|
+
| `findings[].metric[].label` | `string` | | 指標の名前。 |
|
|
24
|
+
| `findings[].metric[].value` | `number \| null` | | 値。`null` は「—」。 |
|
|
25
|
+
| `findings[].metric[].format` | `ValueFormat` | | `value` の書式(`"currency"`、`{ type: "percent", digits: 1 }` など)。 |
|
|
26
|
+
| `findings[].metric[].display` | `string` | | 渡すと値の代わりにこの文字列を出す(「約 5,400 万円」)。 |
|
|
27
|
+
| `findings[].metric[].delta` | `{ value: number; format?: ValueFormat }` | | 比較先からの増減そのもの(現在値 − 比較値)。向きは符号で決まり、▲▼ と符号を必ず出す。省くと比較を出さない。`format` を省くと指標の `format` を使う。 |
|
|
28
|
+
| `findings[].metric[].comparisonLabel` | `string` | `"前期比"` | 比較の名前(「前月比」)。 |
|
|
29
|
+
| `findings[].metric[].betterWhen` | `"up" \| "down"` | `"up"` | どちらに動くと良いか。解約率やコストは `"down"`。色は良し悪しだけを足す。 |
|
|
30
|
+
|
|
31
|
+
## 使い方
|
|
32
|
+
|
|
33
|
+
```tsx
|
|
34
|
+
import { Document, DocKeyFindings } from "@squadbase/vantage/doc";
|
|
35
|
+
|
|
36
|
+
<Document>
|
|
37
|
+
<DocKeyFindings
|
|
38
|
+
findings={[
|
|
39
|
+
{
|
|
40
|
+
headline: "新規契約は法人プランが牽引した",
|
|
41
|
+
evidence: "法人プランの新規が前月比 +20%(20 社 → 24 社)。個人プランは横ばいだった。",
|
|
42
|
+
metric: { label: "法人プランの新規", value: 24, format: { type: "number", unit: "社" }, delta: { value: 4 }, comparisonLabel: "前月比" },
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
headline: "解約は導入 3 か月以内に集中している",
|
|
46
|
+
evidence: "解約の 62% が導入から 3 か月以内で、オンボーディングが分かれ目になっている。",
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
headline: "紹介経由の契約は定着率が高い",
|
|
50
|
+
evidence: "紹介経由で入った契約の 6 か月継続率は 91% で、広告経由の 74% を上回った。",
|
|
51
|
+
},
|
|
52
|
+
]}
|
|
53
|
+
/>
|
|
54
|
+
</Document>
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## 注意
|
|
58
|
+
|
|
59
|
+
- `headline` は話題ではなく、判断を含む文で書きます(「解約は法人プランに集中している」)。`headingLevel={3}` のときは発見が `h4` になります。
|
|
60
|
+
- `evidence` の文中の数字と `metric` の数字は食い違わないようにします(`delta` は増減そのもので、比率は自動では出ません)。
|
|
61
|
+
- 印刷時は発見 1 件ごとにページをまたぎません。
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# DocKpiScorecard
|
|
2
|
+
|
|
3
|
+
> 主要指標の一覧。実績・前期比・目標との差・推移。
|
|
4
|
+
|
|
5
|
+
主要指標を 1 か所にまとめるセクションです。実績、前期からの増減、目標に対する達成率、小さな推移を出します。既定の `table` は印刷に向き、`grid` は 3〜6 個の指標を `dl` のタイルで見せます。増減の向きは `delta` の符号、達成率は `value ÷ target` から block が計算します。
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { DocKpiScorecard } from "@squadbase/vantage/doc";
|
|
9
|
+
import type { DocKpiScorecardProps, DocScorecardMetric } from "@squadbase/vantage/doc";
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
> [!NOTE]
|
|
13
|
+
> これは **`<Document>` 直下に並べる 1 セクション分**です。見出し・本文の大きさや幅は `<Document>` が決めるので、ここでは寸法を指定しません。 `asOf` と `source` は block の下の 1 行に出ます。 ページ全体の組み方は [ドキュメント](page-types/doc) を参照してください。
|
|
14
|
+
|
|
15
|
+
## props
|
|
16
|
+
|
|
17
|
+
| Prop | Type | Default | 説明 |
|
|
18
|
+
| --- | --- | --- | --- |
|
|
19
|
+
| `title` | `string` | `"主要指標"` | 見出しの文言。 |
|
|
20
|
+
| `headingLevel` | `2 \| 3` | `2` | 見出しのレベル。`<Document>` 直下は 2、別セクションの中は 3。 |
|
|
21
|
+
| `metrics` | `DocScorecardMetric[]` | | 指標。**必須**。 |
|
|
22
|
+
| `metrics[].label` | `string` | | 指標の名前。 |
|
|
23
|
+
| `metrics[].value` | `number \| null` | | 値。`null` は「—」。 |
|
|
24
|
+
| `metrics[].format` | `ValueFormat` | | `value` の書式(`"currency"`、`{ type: "percent", digits: 1 }` など)。 |
|
|
25
|
+
| `metrics[].display` | `string` | | 渡すと値の代わりにこの文字列を出す(「約 5,400 万円」)。 |
|
|
26
|
+
| `metrics[].delta` | `{ value: number; format?: ValueFormat }` | | 比較先からの増減そのもの(現在値 − 比較値)。向きは符号で決まり、▲▼ と符号を必ず出す。省くと比較を出さない。`format` を省くと指標の `format` を使う。 |
|
|
27
|
+
| `metrics[].comparisonLabel` | `string` | `"前期比"` | 比較の名前(「前月比」)。 |
|
|
28
|
+
| `metrics[].betterWhen` | `"up" \| "down"` | `"up"` | どちらに動くと良いか。解約率やコストは `"down"`。色は良し悪しだけを足す。 |
|
|
29
|
+
| `metrics[].target` | `number` | | 期間の目標。`value` と同じ `format` で出し、達成率(value ÷ target)はここで計算する。 |
|
|
30
|
+
| `metrics[].trend` | `{ x: string; y: number }[]` | | 時系列 1 本(古い順、最後が現在値)。`value` と同じ単位で渡す。省くと「—」。2 点以上で `Sparkline` を描く。 |
|
|
31
|
+
| `variant` | `"table" \| "grid"` | `"table"` | 表か、タイルか。 |
|
|
32
|
+
| `asOf` | `string` | | 数字を取った日。日付だけを書く(「2026-10-03」)。block の下の 1 行に「データ時点 …」と出る。 |
|
|
33
|
+
| `source` | `string` | | 出典。block の下の 1 行に「出典: …」と出る。 |
|
|
34
|
+
|
|
35
|
+
## 使い方
|
|
36
|
+
|
|
37
|
+
```tsx
|
|
38
|
+
import { Document, DocKpiScorecard } from "@squadbase/vantage/doc";
|
|
39
|
+
|
|
40
|
+
<Document>
|
|
41
|
+
<DocKpiScorecard
|
|
42
|
+
asOf="2026-10-03"
|
|
43
|
+
source="会計システム"
|
|
44
|
+
metrics={[
|
|
45
|
+
{
|
|
46
|
+
label: "売上",
|
|
47
|
+
value: 53_900_000,
|
|
48
|
+
format: "currency",
|
|
49
|
+
delta: { value: 3_700_000 },
|
|
50
|
+
comparisonLabel: "前月比",
|
|
51
|
+
target: 52_000_000,
|
|
52
|
+
trend: [
|
|
53
|
+
{ x: "5 月", y: 48_000_000 },
|
|
54
|
+
{ x: "6 月", y: 49_000_000 },
|
|
55
|
+
{ x: "7 月", y: 50_000_000 },
|
|
56
|
+
{ x: "8 月", y: 50_200_000 },
|
|
57
|
+
{ x: "9 月", y: 53_900_000 },
|
|
58
|
+
],
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
label: "解約率",
|
|
62
|
+
value: 0.018,
|
|
63
|
+
format: { type: "percent", digits: 1 },
|
|
64
|
+
delta: { value: -0.003, format: { type: "number", digits: 1, unit: "pt", divisor: 0.01 } },
|
|
65
|
+
comparisonLabel: "前月比",
|
|
66
|
+
betterWhen: "down",
|
|
67
|
+
target: 0.02,
|
|
68
|
+
},
|
|
69
|
+
{ label: "新規獲得", value: 38, format: { type: "number", unit: "社" }, delta: { value: -4 }, comparisonLabel: "前月比", target: 50 },
|
|
70
|
+
]}
|
|
71
|
+
/>
|
|
72
|
+
</Document>
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## 注意
|
|
76
|
+
|
|
77
|
+
- 解約率やコストのように下がることが良い指標は `betterWhen: "down"`。値が無いセルは「—」になります。
|
|
78
|
+
- `target` と `trend` の `y` は `value` と同じ単位で渡します(`value` が円なら円)。`target` は指標の `format` で出ます。
|
|
79
|
+
- 表の「比較」列の見出しは、指標のうち最初に `comparisonLabel` を持つものの値で、どれも持たないと「前期比」です。列は 1 つなので、指標ごとに違う比較名にするなら `variant="grid"` を使います。
|
|
80
|
+
- 印刷時、`table` は行ごと、`grid` はタイル 1 つごとにページをまたぎません。
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# DocReportHeader
|
|
2
|
+
|
|
3
|
+
> ドキュメントの冒頭。タイトル、サブタイトル、期間・時点・作成者・出典。
|
|
4
|
+
|
|
5
|
+
ドキュメントの冒頭に置くセクションです。`h1` のタイトルと、期間・データ時点・作成者・出典の短い事実表(`dl`)を出します。`h1` を持つのはこの block だけで、以降のセクションは `h2` から始まります。
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { DocReportHeader } from "@squadbase/vantage/doc";
|
|
9
|
+
import type { DocReportHeaderProps } from "@squadbase/vantage/doc";
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
> [!NOTE]
|
|
13
|
+
> これは **`<Document>` 直下に並べる 1 セクション分**です。見出し・本文の大きさや幅は `<Document>` が決めるので、ここでは寸法を指定しません。 `subtitle` は `string` か `ReactNode` で、Markdown 文字列は解釈されません。 ページ全体の組み方は [ドキュメント](page-types/doc) を参照してください。
|
|
14
|
+
|
|
15
|
+
## props
|
|
16
|
+
|
|
17
|
+
| Prop | Type | 説明 |
|
|
18
|
+
| --- | --- | --- |
|
|
19
|
+
| `title` | `string` | ドキュメントの題(`h1`)。対象と期間を書き、スローガンにしない。**必須**。 |
|
|
20
|
+
| `subtitle` | `ReactNode` | 題の下の 1 行(誰向けか、など)。`string` か `ReactNode`。 |
|
|
21
|
+
| `period` | `string` | 数字の対象期間(「2026 年 9 月」「2026-07-01 〜 2026-09-30」)。 |
|
|
22
|
+
| `asOf` | `string` | データを取った日。日付だけを書く(「2026-10-03」)。block が「データ時点」の語を付ける。 |
|
|
23
|
+
| `author` | `string` | 作成者。 |
|
|
24
|
+
| `source` | `string` | 数字の出どころ(「受注管理システム、会計システム」)。1 つの文字列で書く。 |
|
|
25
|
+
|
|
26
|
+
## 使い方
|
|
27
|
+
|
|
28
|
+
```tsx
|
|
29
|
+
import { Document, DocReportHeader } from "@squadbase/vantage/doc";
|
|
30
|
+
|
|
31
|
+
<Document>
|
|
32
|
+
<DocReportHeader
|
|
33
|
+
title="2026 年 9 月 月次事業報告"
|
|
34
|
+
subtitle="経営会議向け"
|
|
35
|
+
period="2026-09-01 〜 2026-09-30"
|
|
36
|
+
asOf="2026-10-03"
|
|
37
|
+
author="事業企画チーム"
|
|
38
|
+
source="受注管理システム、会計システム"
|
|
39
|
+
/>
|
|
40
|
+
</Document>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## 注意
|
|
44
|
+
|
|
45
|
+
- 空の項目は「—」ではなく、行ごと省かれます。
|
|
46
|
+
- 印刷時はヘッダー全体が 1 ページに収まるよう、ページをまたぎません。
|
|
@@ -9,50 +9,74 @@
|
|
|
9
9
|
|
|
10
10
|
```tsx
|
|
11
11
|
import { AreaChart } from "@squadbase/vantage/components";
|
|
12
|
-
import type { AreaChartProps,
|
|
12
|
+
import type { AreaChartProps, ChartSeriesColor, ChartEventPayload } from "@squadbase/vantage/components";
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
| Prop | Type | Default | 説明 |
|
|
16
16
|
| --- | --- | --- | --- |
|
|
17
|
-
| `data` | `
|
|
18
|
-
| `index` | `string` | | x 軸に使う列名。**必須**。 |
|
|
19
|
-
| `categories` | `
|
|
20
|
-
| `colors` | `
|
|
21
|
-
| `
|
|
22
|
-
| `
|
|
23
|
-
| `
|
|
24
|
-
| `
|
|
25
|
-
| `
|
|
26
|
-
| `
|
|
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
|
-
| `
|
|
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` | |
|
|
40
|
-
| `
|
|
41
|
-
| `
|
|
42
|
-
| `
|
|
43
|
-
| `
|
|
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
|
|
47
|
-
>
|
|
70
|
+
> `colors` は Tailwind のクラスではなく**テーマの色名**(`"chart-1"`〜`"chart-5"`、意味色)です。
|
|
71
|
+
> ライト / ダークに追従します。任意の CSS カラーは渡せません。軸・凡例・ツールチップの色はいつもテーマから入ります。
|
|
48
72
|
|
|
49
73
|
## 構成比の推移を見る
|
|
50
74
|
|
|
51
|
-
`type
|
|
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
|
|
79
|
+
<AreaChart data={rows} index="month" categories={["オンライン", "店舗"]} areaOptions={{ type: "percent" }} />
|
|
56
80
|
```
|
|
57
81
|
|
|
58
82
|
## EChart との使い分け
|