@squadbase/vantage 0.6.2-dev1.3e69e88 → 0.6.2-dev1.54bde93
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/add-4GHF2TX2.js +6 -0
- package/dist/add-4GHF2TX2.js.map +1 -0
- package/dist/{build-JB4VOMUI.js → build-A23M4GCH.js} +9 -9
- package/dist/{build-JB4VOMUI.js.map → build-A23M4GCH.js.map} +1 -1
- package/dist/{check-ZJYK6RLG.js → check-FBHT6W6J.js} +7 -7
- package/dist/{check-ZJYK6RLG.js.map → check-FBHT6W6J.js.map} +1 -1
- package/dist/chunk-2IAPIOPS.js +152 -0
- package/dist/chunk-2IAPIOPS.js.map +1 -0
- package/dist/{chunk-5ZOP4SQR.js → chunk-2N72FKLB.js} +12 -7
- package/dist/chunk-2N72FKLB.js.map +1 -0
- package/dist/chunk-57GHR5LN.js +163 -0
- package/dist/chunk-57GHR5LN.js.map +1 -0
- package/dist/{chunk-BCE22JSM.js → chunk-5C2SEDPH.js} +50 -14
- package/dist/chunk-5C2SEDPH.js.map +1 -0
- package/dist/chunk-6OTTGAPO.js +44 -0
- package/dist/chunk-6OTTGAPO.js.map +1 -0
- package/dist/{chunk-RPZAALCX.js → chunk-7S52M2SL.js} +256 -165
- package/dist/chunk-7S52M2SL.js.map +1 -0
- package/dist/{chunk-U2M6HGKQ.js → chunk-AABMKHEU.js} +4 -4
- package/dist/{chunk-U2M6HGKQ.js.map → chunk-AABMKHEU.js.map} +1 -1
- package/dist/{chunk-PVTHHV7X.js → chunk-ANZLVSEP.js} +28 -7
- package/dist/chunk-ANZLVSEP.js.map +1 -0
- package/dist/chunk-CKWPK4RO.js +50 -0
- package/dist/chunk-CKWPK4RO.js.map +1 -0
- package/dist/{chunk-QI3XQKHS.js → chunk-GNXCX4WE.js} +10 -3
- package/dist/chunk-GNXCX4WE.js.map +1 -0
- package/dist/chunk-JXFCSF3K.js +673 -0
- package/dist/chunk-JXFCSF3K.js.map +1 -0
- package/dist/{chunk-PXRX5PEC.js → chunk-PDOBHMUQ.js} +3 -3
- package/dist/chunk-PDOBHMUQ.js.map +1 -0
- package/dist/chunk-QOXXOFGL.js +7051 -0
- package/dist/chunk-QOXXOFGL.js.map +1 -0
- package/dist/{chunk-ZVANIULZ.js → chunk-RNTDBX6S.js} +4 -4
- package/dist/{chunk-ZVANIULZ.js.map → chunk-RNTDBX6S.js.map} +1 -1
- package/dist/chunk-S5MDTHH7.js +466 -0
- package/dist/chunk-S5MDTHH7.js.map +1 -0
- package/dist/chunk-SDJTTMLK.js +1877 -0
- package/dist/chunk-SDJTTMLK.js.map +1 -0
- package/dist/{chunk-EP6JHXSR.js → chunk-SHZM3EXB.js} +68 -12
- package/dist/chunk-SHZM3EXB.js.map +1 -0
- package/dist/{chunk-A2UUGASH.js → chunk-U736PVHY.js} +2 -2
- package/dist/chunk-U736PVHY.js.map +1 -0
- package/dist/{chunk-JGRMRXXZ.js → chunk-UWSQUHX6.js} +4 -99
- package/dist/chunk-UWSQUHX6.js.map +1 -0
- package/dist/cli.js +12 -11
- package/dist/cli.js.map +1 -1
- package/dist/client/index.d.ts +34 -3
- package/dist/client/index.js +211 -12
- package/dist/client/index.js.map +1 -1
- package/dist/components/index.d.ts +1740 -29
- package/dist/components/index.js +7 -4
- package/dist/delta-text-CvwBGJ95.d.ts +15 -0
- package/dist/{dev-FCEC3UKQ.js → dev-H4I2JL63.js} +10 -10
- package/dist/dev-H4I2JL63.js.map +1 -0
- package/dist/doc/index.d.ts +215 -2
- package/dist/doc/index.js +309 -5
- package/dist/doc/index.js.map +1 -1
- package/dist/{docs-EJJ3BECT.js → docs-JVP4RPKT.js} +3 -3
- package/dist/{docs-EJJ3BECT.js.map → docs-JVP4RPKT.js.map} +1 -1
- package/dist/{doctor-WHZXPERA.js → doctor-B2O3GJDU.js} +7 -7
- package/dist/{doctor-WHZXPERA.js.map → doctor-B2O3GJDU.js.map} +1 -1
- package/dist/format-U0cQl069.d.ts +243 -0
- package/dist/markdown/index.js +1 -1
- package/dist/markdown/index.js.map +1 -1
- package/dist/{preview-OGMCNQUO.js → preview-T6CLSQVX.js} +3 -3
- package/dist/{preview-OGMCNQUO.js.map → preview-T6CLSQVX.js.map} +1 -1
- package/dist/query/index.d.ts +0 -11
- package/dist/query/index.js +2 -2
- package/dist/{routes-GTFO5PUF.js → routes-PVKNT777.js} +6 -6
- package/dist/{routes-GTFO5PUF.js.map → routes-PVKNT777.js.map} +1 -1
- package/dist/{search-6Y422SV6.js → search-5LC4XPB5.js} +3 -3
- package/dist/{search-6Y422SV6.js.map → search-5LC4XPB5.js.map} +1 -1
- package/dist/slide/index.d.ts +272 -1
- package/dist/slide/index.js +974 -4
- package/dist/slide/index.js.map +1 -1
- package/dist/table/index.js +14 -10
- package/dist/table/index.js.map +1 -1
- package/dist/ui/index.d.ts +148 -12
- package/dist/ui/index.js +1340 -88
- package/dist/ui/index.js.map +1 -1
- package/dist/{upgrade-AL4KZZR4.js → upgrade-6DT7ADRP.js} +7 -7
- package/dist/{upgrade-AL4KZZR4.js.map → upgrade-6DT7ADRP.js.map} +1 -1
- package/dist/vite/index.d.ts +10 -0
- package/dist/vite/index.js +4 -4
- package/docs/en/changelog.md +2 -0
- package/docs/en/components.md +42 -17
- package/docs/en/doc/delta-text.md +40 -0
- 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-notes-and-sources.md +43 -0
- package/docs/en/doc/doc-report-header.md +46 -0
- package/docs/en/pages-and-metadata.md +15 -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/data-table.md +22 -0
- package/docs/en/parts/delta.md +51 -0
- package/docs/en/parts/donut-chart.md +72 -0
- package/docs/en/parts/format.md +43 -0
- package/docs/en/parts/funnel-steps.md +2 -1
- package/docs/en/parts/heatmap.md +53 -0
- package/docs/en/parts/kpi-card.md +58 -0
- package/docs/en/parts/legend.md +35 -0
- package/docs/en/parts/line-chart.md +94 -0
- package/docs/en/parts/metric-value.md +3 -2
- 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/sparkline.md +1 -1
- package/docs/en/parts/tracker.md +36 -0
- package/docs/en/parts/trend-indicator.md +17 -1
- package/docs/en/parts/updated-at.md +30 -0
- package/docs/en/parts/waterfall-chart.md +56 -0
- package/docs/en/slide/slide-chart-full.md +48 -0
- package/docs/en/slide/slide-chart-insight.md +52 -0
- package/docs/en/slide/slide-columns.md +46 -0
- package/docs/en/slide/slide-comparison.md +68 -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-heading.md +38 -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/slide/slide-section.md +44 -0
- package/docs/en/slide/slide-source-line.md +34 -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/en/ui-and-theming.md +1 -1
- package/docs/index.json +1184 -114
- package/docs/ja/changelog.md +33 -0
- package/docs/ja/components.md +68 -101
- package/docs/ja/doc/delta-text.md +40 -0
- 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-notes-and-sources.md +43 -0
- package/docs/ja/doc/doc-report-header.md +46 -0
- package/docs/ja/page-types/csv.md +83 -0
- package/docs/ja/page-types/doc.md +83 -0
- package/docs/ja/page-types/excel.md +82 -0
- package/docs/ja/page-types/slide.md +133 -0
- package/docs/ja/page-types.md +47 -0
- package/docs/ja/pages-and-metadata.md +15 -0
- package/docs/ja/parts/area-chart.md +85 -0
- package/docs/ja/parts/bar-chart.md +95 -0
- package/docs/ja/parts/bar-list.md +58 -0
- package/docs/ja/parts/category-bar.md +36 -0
- package/docs/ja/parts/chart-frame.md +36 -0
- package/docs/ja/parts/data-table.md +22 -0
- package/docs/ja/parts/delta.md +51 -0
- package/docs/ja/parts/donut-chart.md +66 -0
- package/docs/ja/parts/echart.md +3 -0
- package/docs/ja/parts/format.md +44 -0
- package/docs/ja/parts/funnel-steps.md +27 -8
- package/docs/ja/parts/heatmap.md +45 -0
- package/docs/ja/parts/kpi-card.md +56 -0
- package/docs/ja/parts/legend.md +36 -0
- package/docs/ja/parts/line-chart.md +84 -0
- package/docs/ja/parts/metric-value.md +3 -2
- package/docs/ja/parts/progress-circle.md +34 -0
- package/docs/ja/parts/sample-data.md +61 -0
- package/docs/ja/parts/scatter-chart.md +69 -0
- package/docs/ja/parts/sparkline.md +2 -2
- package/docs/ja/parts/tracker.md +32 -0
- package/docs/ja/parts/trend-indicator.md +17 -1
- package/docs/ja/parts/updated-at.md +27 -0
- package/docs/ja/parts/waterfall-chart.md +61 -0
- package/docs/ja/routing.md +8 -86
- package/docs/ja/slide/slide-chart-full.md +48 -0
- package/docs/ja/slide/slide-chart-insight.md +52 -0
- package/docs/ja/slide/slide-columns.md +46 -0
- package/docs/ja/slide/slide-comparison.md +68 -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-heading.md +38 -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/slide/slide-section.md +44 -0
- package/docs/ja/slide/slide-source-line.md +34 -0
- package/docs/ja/ui/alert-dialog.md +41 -0
- package/docs/ja/ui/avatar.md +31 -0
- package/docs/ja/ui/combobox.md +74 -0
- package/docs/ja/ui/drawer.md +41 -0
- package/docs/ja/ui/empty.md +1 -1
- package/docs/ja/ui/error-state.md +4 -3
- package/docs/ja/ui/field.md +42 -0
- package/docs/ja/ui/hover-card.md +21 -0
- package/docs/ja/ui/kbd.md +16 -0
- package/docs/ja/ui/loading.md +1 -1
- package/docs/ja/ui/pagination.md +36 -0
- package/docs/ja/ui/radio-group.md +21 -0
- package/docs/ja/ui/toast.md +46 -0
- package/docs/ja/ui/toggle-group.md +4 -3
- package/docs/ja/ui-and-theming.md +14 -7
- package/package.json +41 -31
- package/registry/ui/accordion.tsx +76 -0
- package/registry/ui/alert-dialog.tsx +189 -0
- package/registry/ui/alert.tsx +80 -0
- package/registry/ui/app-shell.tsx +287 -0
- package/registry/ui/area-chart.tsx +3701 -0
- package/registry/ui/attention-list.tsx +303 -0
- package/registry/ui/avatar.tsx +110 -0
- package/registry/ui/badge.tsx +56 -0
- package/registry/ui/bar-chart.tsx +3698 -0
- package/registry/ui/bar-list.tsx +3743 -0
- package/registry/ui/box-plot-chart.tsx +3906 -0
- package/registry/ui/breadcrumb.tsx +128 -0
- package/registry/ui/button.tsx +62 -0
- package/registry/ui/calendar.tsx +223 -0
- package/registry/ui/card.tsx +107 -0
- package/registry/ui/category-bar.tsx +1290 -0
- package/registry/ui/chart-frame.tsx +1393 -0
- package/registry/ui/checkbox.tsx +30 -0
- package/registry/ui/collapsible.tsx +23 -0
- package/registry/ui/combobox.tsx +310 -0
- package/registry/ui/command.tsx +198 -0
- package/registry/ui/dashboard-card.tsx +217 -0
- package/registry/ui/data-table.tsx +693 -146
- package/registry/ui/date-range-picker.tsx +390 -0
- package/registry/ui/delta.tsx +191 -0
- package/registry/ui/dialog.tsx +161 -0
- package/registry/ui/donut-chart.tsx +3751 -0
- package/registry/ui/drawer.tsx +229 -0
- package/registry/ui/dropdown-menu.tsx +274 -0
- package/registry/ui/echart.tsx +1040 -0
- package/registry/ui/field.tsx +240 -0
- package/registry/ui/filter-bar.tsx +392 -0
- package/registry/ui/funnel-steps.tsx +3569 -0
- package/registry/ui/heatmap.tsx +1786 -0
- package/registry/ui/histogram-chart.tsx +3986 -0
- package/registry/ui/hover-card.tsx +52 -0
- package/registry/ui/input-group.tsx +160 -0
- package/registry/ui/input.tsx +24 -0
- package/registry/ui/kbd.tsx +30 -0
- package/registry/ui/kpi-card.tsx +704 -0
- package/registry/ui/label.tsx +22 -0
- package/registry/ui/legend.tsx +3563 -0
- package/registry/ui/line-chart.tsx +3699 -0
- package/registry/ui/metric-value.tsx +62 -0
- package/registry/ui/multi-select.tsx +232 -0
- package/registry/ui/page-shell.tsx +282 -0
- package/registry/ui/pagination.tsx +140 -0
- package/registry/ui/paired-chart.tsx +3827 -0
- package/registry/ui/placeholder.tsx +36 -0
- package/registry/ui/popover.tsx +92 -0
- package/registry/ui/progress-circle.tsx +867 -0
- package/registry/ui/progress.tsx +85 -0
- package/registry/ui/radio-group.tsx +39 -0
- package/registry/ui/sample-data.tsx +86 -0
- package/registry/ui/scatter-chart.tsx +4212 -0
- package/registry/ui/scroll-area.tsx +56 -0
- package/registry/ui/searchable-select.tsx +214 -0
- package/registry/ui/section-header.tsx +43 -0
- package/registry/ui/segmented-control.tsx +76 -0
- package/registry/ui/select.tsx +255 -0
- package/registry/ui/separator.tsx +27 -0
- package/registry/ui/sheet.tsx +139 -0
- package/registry/ui/sidebar.tsx +725 -0
- package/registry/ui/skeleton.tsx +17 -0
- package/registry/ui/slider.tsx +56 -0
- package/registry/ui/sparkline.tsx +230 -0
- package/registry/ui/spinner.tsx +14 -0
- package/registry/ui/states.tsx +90 -0
- package/registry/ui/status-badge.tsx +121 -0
- package/registry/ui/switch.tsx +34 -0
- package/registry/ui/table.tsx +118 -0
- package/registry/ui/tabs.tsx +84 -0
- package/registry/ui/textarea.tsx +22 -0
- package/registry/ui/toast.tsx +250 -0
- package/registry/ui/toggle-group.tsx +91 -0
- package/registry/ui/toggle.tsx +47 -0
- package/registry/ui/tooltip.tsx +72 -0
- package/registry/ui/tracker.tsx +849 -0
- package/registry/ui/trend-indicator.tsx +74 -0
- package/registry/ui/updated-at.tsx +122 -0
- package/registry/ui/waterfall-chart.tsx +4248 -0
- package/skills/vantage-add-feature/SKILL.md +9 -7
- package/skills/vantage-design/SKILL.md +36 -24
- 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-pitfalls/SKILL.md +10 -1
- package/skills/vantage-slide/SKILL.md +71 -36
- package/templates/AGENTS.md +26 -3
- package/templates/agents/api.md +29 -0
- package/templates/agents/csv.md +2 -1
- package/templates/agents/doc.md +52 -3
- package/templates/agents/page.md +54 -9
- package/templates/agents/slide.md +83 -3
- package/templates/agents/xlsx.md +2 -1
- package/theme.css +247 -132
- package/dist/add-DY4AXANK.js +0 -6
- package/dist/add-DY4AXANK.js.map +0 -1
- package/dist/chunk-5ZOP4SQR.js.map +0 -1
- package/dist/chunk-A2UUGASH.js.map +0 -1
- package/dist/chunk-BCE22JSM.js.map +0 -1
- package/dist/chunk-DTDVSFRY.js +0 -29
- package/dist/chunk-DTDVSFRY.js.map +0 -1
- package/dist/chunk-EP6JHXSR.js.map +0 -1
- package/dist/chunk-JGRMRXXZ.js.map +0 -1
- package/dist/chunk-KLEIVDUV.js +0 -165
- package/dist/chunk-KLEIVDUV.js.map +0 -1
- package/dist/chunk-MP3QSOXL.js +0 -2232
- package/dist/chunk-MP3QSOXL.js.map +0 -1
- package/dist/chunk-PVTHHV7X.js.map +0 -1
- package/dist/chunk-PXRX5PEC.js.map +0 -1
- package/dist/chunk-QI3XQKHS.js.map +0 -1
- package/dist/chunk-RPZAALCX.js.map +0 -1
- package/dist/chunk-T3FLAGI6.js +0 -316
- package/dist/chunk-T3FLAGI6.js.map +0 -1
- package/dist/dev-FCEC3UKQ.js.map +0 -1
|
@@ -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
|
+
> 入れ替わるだけで、棒の向きと符号は変わりません。
|
package/docs/ja/routing.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# ファイルベースルーティング
|
|
2
2
|
|
|
3
|
-
> ファイルを置くだけでルートが生まれる。ページ・レイアウト・動的パラメータ・404/error
|
|
3
|
+
> ファイルを置くだけでルートが生まれる。ページ・レイアウト・動的パラメータ・404/error の規約。
|
|
4
4
|
|
|
5
5
|
Vantage のルーティングは **ファイルの配置がそのまま URL** になります。ルーターの設定は書きません。
|
|
6
6
|
|
|
@@ -46,92 +46,13 @@ Vantage のルーティングは **ファイルの配置がそのまま URL**
|
|
|
46
46
|
|
|
47
47
|
## tsx 以外もページになる
|
|
48
48
|
|
|
49
|
-
ルートになるのは `.tsx` / `.jsx`
|
|
50
|
-
|
|
51
|
-
tsx
|
|
49
|
+
ルートになるのは `.tsx` / `.jsx` だけではありません。**`<name>.slide.tsx`** はスライドデッキに、
|
|
50
|
+
**`<name>.doc.tsx`** はドキュメントに、**`.csv` と `.xlsx`** はそのまま表として読めるページに
|
|
51
|
+
なります。どれも URL の作り方は tsx と同じで、`.slide` / `.doc` と拡張子は URL に出ません
|
|
52
|
+
(`june.slide.tsx`・`june.csv` → `/june`)。`vantage routes` にも `useRoutes()` のナビにも同格で並びます。
|
|
52
53
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
`src/data/june.xlsx` を置いて `/data/june` を開くと、ダウンロードせずブラウザ上で表として
|
|
56
|
-
読めます。xlsx は複数シートを切り替えられ、元ファイルをダウンロードする導線も付きます。
|
|
57
|
-
|
|
58
|
-
描かれるのは**表計算ソフトそのものの見た目**です —— 列は A / B / C、左に行番号、ファイルの
|
|
59
|
-
1 行目はヘッダとして固定され、罫線はデータの外まで続きます。シートのタブは下端に並びます。
|
|
60
|
-
読み取り専用なので編集もソートもできません(セルを選んで `Cmd/Ctrl+C` でコピーはできます)。
|
|
61
|
-
並べ替えや絞り込みが要るデータは、`server/api/` から配って `DataTable` で描いてください。
|
|
62
|
-
|
|
63
|
-
- **タイトルはファイル名から導かれます**(`june.xlsx` → 「June」、`index.csv` はディレクトリ名)。
|
|
64
|
-
データファイルに `definePage` は書けないので、名前を変えたいときはファイルをリネームします。
|
|
65
|
-
- **パースはブラウザで行われます。** dev・ビルド後・デプロイ後で同じコードが同じバイトを読むので、
|
|
66
|
-
同じ URL が同じものを返します。25MB を超えるファイルはそのページにエラーが出ます
|
|
67
|
-
(`vantage check` が `FILE_PAGE_TOO_LARGE` で先に警告します)。
|
|
68
|
-
- 数式・グラフ・セル書式は再現されません。**値として読めれば十分**という設計です。
|
|
69
|
-
- ページにしたくないファイルは `_` を前置します(`_june.xlsx`)。tsx から自分で描きたいときは
|
|
70
|
-
こうしてルート化を止め、`@squadbase/vantage/table` の `FilePageView` を使います。
|
|
71
|
-
|
|
72
|
-
> [!WARNING]
|
|
73
|
-
> **ビューアの無い拡張子はルートになりません。** `.xls` / `.ods` / `.tsv` などを置いても
|
|
74
|
-
> 404 にすらならず、ナビにも `vantage routes` にも出ません。`vantage check` の
|
|
75
|
-
> `UNSUPPORTED_PAGE_FILE` 警告が唯一の告知点です。
|
|
76
|
-
|
|
77
|
-
### スライド(`.slide.tsx`)
|
|
78
|
-
|
|
79
|
-
`.slide` は**ページ種別サフィックス**で、URL には出ません(`src/june.slide.tsx` → `/june`)。
|
|
80
|
-
中身は `<SlideDeck>` を返す普通の React コンポーネントなので、`definePage` もナビも
|
|
81
|
-
通常のページと同じように効きます。
|
|
82
|
-
|
|
83
|
-
```tsx
|
|
84
|
-
import { definePage } from "@squadbase/vantage";
|
|
85
|
-
import { Slide, SlideDeck } from "@squadbase/vantage/slide";
|
|
86
|
-
|
|
87
|
-
export const page = definePage({ title: "6月度レビュー", navLabel: "6月度" });
|
|
88
|
-
|
|
89
|
-
export default function Deck() {
|
|
90
|
-
return (
|
|
91
|
-
<SlideDeck>
|
|
92
|
-
<Slide>…</Slide>
|
|
93
|
-
<Slide>…</Slide>
|
|
94
|
-
</SlideDeck>
|
|
95
|
-
);
|
|
96
|
-
}
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
1920×1080 の固定キャンバスに書き、画面サイズに合わせて縮小されます。キーボードとクリックで
|
|
100
|
-
送れ、左のスライド一覧は `L` で開閉、`F` で全画面、ツールバーから pptx を書き出せます。詳しくは
|
|
101
|
-
[UI とテーマ](ui-and-theming)。
|
|
102
|
-
|
|
103
|
-
> [!WARNING]
|
|
104
|
-
> `.slide` を付けられるのは**ルートになるページモジュールだけ**です。`_layout.slide.tsx` や
|
|
105
|
-
> `deck.slide.ts` は `INVALID_PAGE_VARIANT` エラーになります。また `june.slide.tsx` と
|
|
106
|
-
> `june.tsx`、`sales.csv` と `sales.tsx` はいずれも同じ URL に解決するので `ROUTE_CONFLICT` です。
|
|
107
|
-
|
|
108
|
-
### ドキュメント(`.doc.tsx`)
|
|
109
|
-
|
|
110
|
-
`.doc` も**ページ種別サフィックス**です(`src/june-summary.doc.tsx` → `/june-summary`)。上から下へ
|
|
111
|
-
読む文章のページで、中身は `<Document>` を返す普通の React コンポーネントです。
|
|
112
|
-
|
|
113
|
-
```tsx
|
|
114
|
-
import { definePage } from "@squadbase/vantage";
|
|
115
|
-
import { Document } from "@squadbase/vantage/doc";
|
|
116
|
-
|
|
117
|
-
export const page = definePage({ title: "6月度サマリー" });
|
|
118
|
-
|
|
119
|
-
export default function JuneSummary() {
|
|
120
|
-
return (
|
|
121
|
-
<Document>
|
|
122
|
-
<h1>6月度サマリー</h1>
|
|
123
|
-
<p>6月の売上は目標を 5% 上回りました。</p>
|
|
124
|
-
<table>…</table>
|
|
125
|
-
</Document>
|
|
126
|
-
);
|
|
127
|
-
}
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
`<Document>` の中の見出し・段落・リスト・表・引用・コードには、クラスを書かなくてもスタイルが
|
|
131
|
-
当たります。詳しくは [UI とテーマ](ui-and-theming)。右下の「PDF として保存」ボタン(ブラウザの
|
|
132
|
-
言語が日本語以外なら「Save as PDF」)から印刷ダイアログを開けます。印刷されるのはドキュメントの本文
|
|
133
|
-
だけで、アプリのヘッダーやサイドバーは載らず、ダークモードでもライトの配色で出ます。`.slide` と
|
|
134
|
-
同じく、`.doc` を付けられるのはルートになるページモジュールだけです。
|
|
54
|
+
それぞれの書き方・できること・制限、そして**置いてもページにならないファイル**(`.xls`・`.tsv`・
|
|
55
|
+
`.md` など)は [ページの種類](page-types) にまとめてあります。
|
|
135
56
|
|
|
136
57
|
## ルーティングされないディレクトリ
|
|
137
58
|
|
|
@@ -291,3 +212,4 @@ setSegments((prev) => [...prev, "enterprise"]);
|
|
|
291
212
|
## 次に読む
|
|
292
213
|
|
|
293
214
|
- [ページと definePage](pages-and-metadata) — ページの契約とメタデータ
|
|
215
|
+
- [ページの種類](page-types) — スライド・ドキュメント・CSV・Excel
|
|
@@ -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 枚目以降へ。
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# SlideExecSummary
|
|
2
|
+
|
|
3
|
+
> 結論を先に伝える 1 枚。アクションタイトルと 3〜5 個の要点。
|
|
4
|
+
|
|
5
|
+
結論が先の 1 枚です。アクションタイトルの下に、1 行の見出し(と任意の補足 1 行)を持つ要点を 3〜5 個並べます。
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { SlideExecSummary } from "@squadbase/vantage/slide";
|
|
9
|
+
import type { SlideExecSummaryProps, SlideExecSummaryPoint } 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
|
+
| `points` | `SlideExecSummaryPoint[]` | | 要点(`{ headline: string; detail?: string }`)。3〜5 個。**必須**。 |
|
|
21
|
+
| `layout` | `"rows" \| "columns"` | `"rows"` | `rows` は番号付きで縦に積む。`columns` は横に並べる(3〜4 個向き)。 |
|
|
22
|
+
| `asOf` | `string` | | 数字を取った日。日付のみ(例: `"2026-10-01"`)。block が「2026-10-01 時点」と 1 回だけ「時点」を付けるので、「時点」は書かない。 |
|
|
23
|
+
| `source` | `string` | | 出典(例: `"社内 BI"`)。「出典: 社内 BI」と表示される。 |
|
|
24
|
+
|
|
25
|
+
## 使い方
|
|
26
|
+
|
|
27
|
+
```tsx
|
|
28
|
+
import { Slide, SlideExecSummary } from "@squadbase/vantage/slide";
|
|
29
|
+
|
|
30
|
+
<Slide>
|
|
31
|
+
<SlideExecSummary
|
|
32
|
+
title="Q2 は売上が計画を 4% 上回り、解約の改善が次の課題"
|
|
33
|
+
points={[
|
|
34
|
+
{ headline: "売上は 5.4 億円で計画比 +4%", detail: "新規 38 社が牽引" },
|
|
35
|
+
{ headline: "解約率は 1.8% まで低下", detail: "オンボーディング刷新の効果" },
|
|
36
|
+
{ headline: "新規獲得は目標に 12 社届かず", detail: "紹介経由が想定の半分" },
|
|
37
|
+
]}
|
|
38
|
+
asOf="2026-10-20"
|
|
39
|
+
source="社内 BI"
|
|
40
|
+
/>
|
|
41
|
+
</Slide>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## 注意
|
|
45
|
+
|
|
46
|
+
- 6 個以上は描画されますが、`console.warn` が出ます。スライドを分けてください。
|
|
47
|
+
- `title` は話題(「売上の状況」)ではなく、結論の文で書きます。
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# SlideHeading
|
|
2
|
+
|
|
3
|
+
> [部品] スライド 1 枚の見出し。アクションタイトルと任意のアイブロウ。
|
|
4
|
+
|
|
5
|
+
スライド 1 枚の見出しです。ページの大きさの `h2` で、2 行までに収まります。上に小さなラベル(`eyebrow`、章名など)を添えられます。12 カラムのグリッドの最上段に置く**部品**で、1 枚まるごとの block ではありません。
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { SlideHeading } from "@squadbase/vantage/slide";
|
|
9
|
+
import type { SlideHeadingProps } from "@squadbase/vantage/slide";
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
> [!NOTE]
|
|
13
|
+
> これは **スライドの部品**で、1 枚まるごとの block ではありません。`<Slide>` 内の 12 カラムのグリッドの行として置きます(ルートはキャンバスいっぱい(100%×100%)には広がりません)。寸法はすべて部品の中で決まっているので、足さないでください。デッキの組み方は [スライド](page-types/slide) を参照してください。
|
|
14
|
+
|
|
15
|
+
## props
|
|
16
|
+
|
|
17
|
+
| Prop | Type | 説明 |
|
|
18
|
+
| --- | --- | --- |
|
|
19
|
+
| `title` | `string` | 結論を 1 文で書いた見出し(アクションタイトル)。2 行までに切り詰められる。**必須**。 |
|
|
20
|
+
| `eyebrow` | `string` | 見出しの上の短いラベル(「第 2 章 解約」)。 |
|
|
21
|
+
|
|
22
|
+
## 使い方
|
|
23
|
+
|
|
24
|
+
```tsx
|
|
25
|
+
import { Slide, SlideHeading } from "@squadbase/vantage/slide";
|
|
26
|
+
|
|
27
|
+
<Slide>
|
|
28
|
+
<div style={{ display: "grid", gridTemplateColumns: "repeat(12, 1fr)" }}>
|
|
29
|
+
<SlideHeading title="解約率は 6 月以降、毎月下がり続けている" eyebrow="第 2 章 解約" />
|
|
30
|
+
{/* …SlideColumns など… */}
|
|
31
|
+
</div>
|
|
32
|
+
</Slide>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## 注意
|
|
36
|
+
|
|
37
|
+
- 見出しは話題ではなく結論の文で書きます。
|
|
38
|
+
- 置いたグリッドの 12 カラムすべてにまたがります。
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# SlideKpiGrid
|
|
2
|
+
|
|
3
|
+
> 2〜4 個の KPI を並べるスコアボード。値・増減・目標。
|
|
4
|
+
|
|
5
|
+
2〜4 個の KPI カードを横に並べるスコアボードです。各カードにラベル・値・増減・目標が入り、幅は等分されます。
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { SlideKpiGrid } from "@squadbase/vantage/slide";
|
|
9
|
+
import type { SlideKpiGridProps, SlideKpiGridItem, SlideKpiGridDelta } 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
|
+
| `items` | `SlideKpiGridItem[]` | | KPI。2〜4 個。**必須**。各要素は下の `items[].…` の行。 |
|
|
21
|
+
| `items[].label` | `string` | | 指標名。**必須**。 |
|
|
22
|
+
| `items[].value` | `number \| null` | | 数値。`null` は「—」と表示される。**必須**。`format` で整形される。 |
|
|
23
|
+
| `items[].format` | `ValueFormat` | | 値の整形(`"currency"` / `"percent"` / `{ type: "number", unit: "社" }` など)。`delta` と `target` の既定の整形にもなる。 |
|
|
24
|
+
| `items[].display` | `string` | | 表示する文字だけを置き換える(元の数値は `value` のまま `data-raw` に残る)。 |
|
|
25
|
+
| `items[].delta` | `SlideKpiGridDelta` | | `{ value: number; format?: ValueFormat }`。増減の大きさを符号付きで(例: `0.074` と `format: "percent"` で「+7.4%」)。向きは符号で決まり、▲ ▼ と「増」「減」も出る。`format` の既定は item の `format`。 |
|
|
26
|
+
| `items[].betterWhen` | `"up" \| "down"` | `"up"` | `delta` のどちらの向きが良いか。色が決まる。 |
|
|
27
|
+
| `items[].comparisonLabel` | `string` | | `delta` の比較相手(「前月比」)。 |
|
|
28
|
+
| `items[].target` | `number` | | 目標。`format` は `value` と同じ。「目標 …(達成率 …)」と表示される。達成率は value ÷ target(`betterWhen` が `"down"` なら target ÷ value)。 |
|
|
29
|
+
| `asOf` | `string` | | 数字を取った日。日付のみ(例: `"2026-10-01"`)。block が「2026-10-01 時点」と 1 回だけ「時点」を付けるので、「時点」は書かない。 |
|
|
30
|
+
| `source` | `string` | | 出典(例: `"社内 BI"`)。「出典: 社内 BI」と表示される。 |
|
|
31
|
+
|
|
32
|
+
## 使い方
|
|
33
|
+
|
|
34
|
+
```tsx
|
|
35
|
+
import { Slide, SlideKpiGrid } from "@squadbase/vantage/slide";
|
|
36
|
+
|
|
37
|
+
<Slide>
|
|
38
|
+
<SlideKpiGrid
|
|
39
|
+
title="売上と継続率は計画どおり、新規獲得だけが未達"
|
|
40
|
+
items={[
|
|
41
|
+
{ label: "月次売上", value: 540_000_000, format: "currency", delta: { value: 0.074, format: "percent" }, comparisonLabel: "前月比", target: 520_000_000 },
|
|
42
|
+
{ label: "継続率", value: 0.982, format: { type: "percent", digits: 1 }, delta: { value: 0.004 }, comparisonLabel: "前月比", target: 0.98 },
|
|
43
|
+
{ label: "新規獲得", value: 38, format: { type: "number", unit: "社" }, delta: { value: -4 }, comparisonLabel: "前月比", target: 50 },
|
|
44
|
+
]}
|
|
45
|
+
asOf="2026-10-01"
|
|
46
|
+
source="社内 BI"
|
|
47
|
+
/>
|
|
48
|
+
</Slide>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## 注意
|
|
52
|
+
|
|
53
|
+
- 5 個以上は描画されますが `console.warn` が出ます。スライドを分けてください。
|
|
54
|
+
- 値・増減・目標は数値で渡します。整形は `format` が行い、文字を変えたいときだけ `display` を使います。
|
|
55
|
+
- 「目標 …(達成率 …)」「増」「減」などの文言は block が出す日本語固定です。
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# SlideKpiHero
|
|
2
|
+
|
|
3
|
+
> 1 つの数字を主役にする 1 枚。値・増減・推移の線。
|
|
4
|
+
|
|
5
|
+
1 つの数字を大きく見せる 1 枚です。左 6 カラムにラベルと値(と増減)、右 6 カラムに推移の線を置きます。`trend` を渡さなければ数字が全幅を使います。
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { SlideKpiHero } from "@squadbase/vantage/slide";
|
|
9
|
+
import type { SlideKpiHeroProps, SlideKpiHeroDelta } 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
|
+
| `label` | `string` | | 数字が何か(「月次売上」)。**必須**。 |
|
|
21
|
+
| `value` | `number \| null` | | 数値。`null` は「—」と表示される。**必須**。`format` で整形される(元の数値は `data-raw` に残り、書き出しやテストで使う)。 |
|
|
22
|
+
| `format` | `ValueFormat` | | 値の整形(`"currency"` / `"percent"` など)。`delta` の既定の整形にもなる。 |
|
|
23
|
+
| `display` | `string` | | 表示する文字だけを置き換える(元の数値は `value` のまま)。 |
|
|
24
|
+
| `delta` | `SlideKpiHeroDelta` | | `{ value: number; format?: ValueFormat }`。増減の大きさを符号付きで(例: `0.074` と `format: "percent"` で「+7.4%」)。向きは符号で決まり、▲ ▼ と「増」「減」も出る。`format` の既定は `format`。省くと増減は出ない。 |
|
|
25
|
+
| `betterWhen` | `"up" \| "down"` | `"up"` | `delta` のどちらの向きが良いか。色が決まる。 |
|
|
26
|
+
| `comparisonLabel` | `string` | | `delta` の比較相手(「前月比」)。 |
|
|
27
|
+
| `trend` | `{ x: string; y: number }[]` | | 右側の線の点。省くと数字だけの 1 枚になる。 |
|
|
28
|
+
| `asOf` | `string` | | 数字を取った日。日付のみ(例: `"2026-10-01"`)。block が「2026-10-01 時点」と 1 回だけ「時点」を付けるので、「時点」は書かない。 |
|
|
29
|
+
| `source` | `string` | | 出典(例: `"社内 BI"`)。「出典: 社内 BI」と表示される。 |
|
|
30
|
+
|
|
31
|
+
## 使い方
|
|
32
|
+
|
|
33
|
+
```tsx
|
|
34
|
+
import { Slide, SlideKpiHero } from "@squadbase/vantage/slide";
|
|
35
|
+
|
|
36
|
+
<Slide>
|
|
37
|
+
<SlideKpiHero
|
|
38
|
+
title="9 月の売上は過去最高の 5.4 億円"
|
|
39
|
+
label="月次売上"
|
|
40
|
+
value={540_000_000}
|
|
41
|
+
format="currency"
|
|
42
|
+
delta={{ value: 0.074, format: "percent" }}
|
|
43
|
+
comparisonLabel="前月比"
|
|
44
|
+
trend={[
|
|
45
|
+
{ x: "4 月", y: 460_000_000 }, { x: "5 月", y: 480_000_000 }, { x: "6 月", y: 490_000_000 },
|
|
46
|
+
{ x: "7 月", y: 500_000_000 }, { x: "8 月", y: 503_000_000 }, { x: "9 月", y: 540_000_000 },
|
|
47
|
+
]}
|
|
48
|
+
asOf="2026-10-01"
|
|
49
|
+
source="社内 BI"
|
|
50
|
+
/>
|
|
51
|
+
</Slide>
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## 注意
|
|
55
|
+
|
|
56
|
+
- コストのように下がることが良い指標は `betterWhen="down"` と書きます。色は `betterWhen` に従い、向き(▲ ▼ と「増」「減」)は `delta.value` の符号で決まります。
|
|
57
|
+
- 「増」「減」「… 時点」「出典: …」は block が出す日本語固定の文言です。
|
|
58
|
+
- グラフは `EChart` でアニメーションなし。pptx への書き出しはその描画を待ちます。
|