@squadbase/vantage 0.6.1 → 0.6.2-dev1.0017a4d
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-O5TVNH4E.js → build-X5NVCQKT.js} +9 -9
- package/dist/{build-O5TVNH4E.js.map → build-X5NVCQKT.js.map} +1 -1
- package/dist/{check-WFBEDHDR.js → check-ZBIH422T.js} +7 -7
- package/dist/{check-WFBEDHDR.js.map → check-ZBIH422T.js.map} +1 -1
- package/dist/chunk-2IAPIOPS.js +152 -0
- package/dist/chunk-2IAPIOPS.js.map +1 -0
- package/dist/chunk-2ICNHUG6.js +1820 -0
- package/dist/chunk-2ICNHUG6.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-7DZGJQ3P.js} +33 -14
- package/dist/chunk-7DZGJQ3P.js.map +1 -0
- package/dist/{chunk-MXI3PZFT.js → chunk-7S52M2SL.js} +257 -210
- package/dist/chunk-7S52M2SL.js.map +1 -0
- package/dist/{chunk-QDZA5JSL.js → chunk-AABMKHEU.js} +4 -4
- package/dist/{chunk-QDZA5JSL.js.map → chunk-AABMKHEU.js.map} +1 -1
- package/dist/{chunk-KLEIVDUV.js → chunk-CEXAQQ5W.js} +150 -11
- package/dist/chunk-CEXAQQ5W.js.map +1 -0
- package/dist/{chunk-3G43C6OL.js → chunk-GNXCX4WE.js} +46 -3
- package/dist/chunk-GNXCX4WE.js.map +1 -0
- package/dist/{chunk-JGRMRXXZ.js → chunk-JKLLFVEU.js} +3 -3
- package/dist/{chunk-JGRMRXXZ.js.map → chunk-JKLLFVEU.js.map} +1 -1
- package/dist/chunk-JXFCSF3K.js +673 -0
- package/dist/chunk-JXFCSF3K.js.map +1 -0
- package/dist/chunk-PDOBHMUQ.js +54 -0
- package/dist/chunk-PDOBHMUQ.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-RU6WKEOG.js +7048 -0
- package/dist/chunk-RU6WKEOG.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-PVTHHV7X.js → chunk-V3LF7BE7.js} +27 -5
- package/dist/chunk-V3LF7BE7.js.map +1 -0
- package/dist/{chunk-EP6JHXSR.js → chunk-WAMZWZJB.js} +54 -9
- package/dist/chunk-WAMZWZJB.js.map +1 -0
- package/dist/{chunk-DTDVSFRY.js → chunk-XQUSGIDG.js} +17 -3
- package/dist/chunk-XQUSGIDG.js.map +1 -0
- package/dist/cli.js +15 -11
- package/dist/cli.js.map +1 -1
- package/dist/client/index.d.ts +32 -3
- package/dist/client/index.js +205 -12
- package/dist/client/index.js.map +1 -1
- package/dist/components/index.d.ts +1743 -29
- package/dist/components/index.js +7 -3
- package/dist/{dev-NZRLOQCL.js → dev-4XEDTELV.js} +24 -13
- package/dist/dev-4XEDTELV.js.map +1 -0
- package/dist/doc/index.d.ts +198 -2
- package/dist/doc/index.js +438 -11
- package/dist/doc/index.js.map +1 -1
- package/dist/{docs-ZGDJUHJI.js → docs-JVP4RPKT.js} +3 -3
- package/dist/{docs-ZGDJUHJI.js.map → docs-JVP4RPKT.js.map} +1 -1
- package/dist/{doctor-VFKEMR54.js → doctor-5E2VEZPK.js} +8 -8
- package/dist/doctor-5E2VEZPK.js.map +1 -0
- 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-QDCIVVSR.js → preview-T6CLSQVX.js} +12 -4
- package/dist/preview-T6CLSQVX.js.map +1 -0
- package/dist/query/index.d.ts +0 -11
- package/dist/query/index.js +2 -2
- package/dist/{routes-RHP5FVGD.js → routes-3SGAFDMC.js} +6 -6
- package/dist/{routes-RHP5FVGD.js.map → routes-3SGAFDMC.js.map} +1 -1
- package/dist/{search-RFBELGY7.js → search-5LC4XPB5.js} +3 -3
- package/dist/{search-RFBELGY7.js.map → search-5LC4XPB5.js.map} +1 -1
- package/dist/slide/index.d.ts +177 -1
- package/dist/slide/index.js +917 -18
- package/dist/slide/index.js.map +1 -1
- package/dist/table/index.js +14 -9
- package/dist/table/index.js.map +1 -1
- package/dist/ui/index.d.ts +148 -12
- package/dist/ui/index.js +1340 -87
- package/dist/ui/index.js.map +1 -1
- package/dist/{upgrade-GF2P67M6.js → upgrade-JHXZBGQS.js} +7 -7
- package/dist/{upgrade-GF2P67M6.js.map → upgrade-JHXZBGQS.js.map} +1 -1
- package/dist/vite/index.d.ts +10 -0
- package/dist/vite/index.js +4 -4
- package/docs/en/changelog.md +24 -0
- package/docs/en/cli-reference.md +30 -0
- package/docs/en/components.md +40 -17
- 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/data-table.md +22 -0
- package/docs/en/parts/delta.md +50 -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 +57 -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/page-shell.md +1 -1
- 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/routing.md +4 -2
- 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/en/ui-and-theming.md +1 -1
- package/docs/index.json +1024 -114
- package/docs/ja/changelog.md +55 -0
- package/docs/ja/cli-reference.md +29 -0
- package/docs/ja/components.md +66 -101
- 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/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 +132 -0
- package/docs/ja/page-types.md +47 -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 +50 -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 +55 -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/page-shell.md +1 -1
- 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 -84
- 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/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 +43 -29
- 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 +188 -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 +699 -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 +5 -1
- package/skills/vantage-slide/SKILL.md +71 -36
- package/templates/AGENTS.md +24 -3
- package/templates/agents/api.md +29 -0
- package/templates/agents/csv.md +2 -1
- package/templates/agents/doc.md +51 -3
- package/templates/agents/page.md +54 -9
- package/templates/agents/slide.md +68 -3
- package/templates/agents/xlsx.md +2 -1
- package/theme.css +284 -128
- package/dist/add-EISGSZAH.js +0 -6
- package/dist/add-EISGSZAH.js.map +0 -1
- package/dist/chunk-3G43C6OL.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.map +0 -1
- package/dist/chunk-EP6JHXSR.js.map +0 -1
- package/dist/chunk-KLEIVDUV.js.map +0 -1
- package/dist/chunk-MXI3PZFT.js.map +0 -1
- package/dist/chunk-PLST5Q7T.js +0 -2221
- package/dist/chunk-PLST5Q7T.js.map +0 -1
- package/dist/chunk-PVTHHV7X.js.map +0 -1
- package/dist/chunk-T3FLAGI6.js +0 -316
- package/dist/chunk-T3FLAGI6.js.map +0 -1
- package/dist/dev-NZRLOQCL.js.map +0 -1
- package/dist/doctor-VFKEMR54.js.map +0 -1
- package/dist/preview-QDCIVVSR.js.map +0 -1
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,90 +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)。`.slide` と同じく、`.doc` を付けられるのは
|
|
132
|
-
ルートになるページモジュールだけです。
|
|
54
|
+
それぞれの書き方・できること・制限、そして**置いてもページにならないファイル**(`.xls`・`.tsv`・
|
|
55
|
+
`.md` など)は [ページの種類](page-types) にまとめてあります。
|
|
133
56
|
|
|
134
57
|
## ルーティングされないディレクトリ
|
|
135
58
|
|
|
@@ -289,3 +212,4 @@ setSegments((prev) => [...prev, "enterprise"]);
|
|
|
289
212
|
## 次に読む
|
|
290
213
|
|
|
291
214
|
- [ページと definePage](pages-and-metadata) — ページの契約とメタデータ
|
|
215
|
+
- [ページの種類](page-types) — スライド・ドキュメント・CSV・Excel
|
|
@@ -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,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,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 への書き出しはその描画を待ちます。
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# SlideNextActions
|
|
2
|
+
|
|
3
|
+
> 次の打ち手。担当・期限・確認する指標つきで 3〜5 件。
|
|
4
|
+
|
|
5
|
+
次に何をするかを示す 1 枚で、多くのレポートの最後に置きます。アクションごとに担当・期限・確認する指標を添えられます。
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { SlideNextActions } from "@squadbase/vantage/slide";
|
|
9
|
+
import type { SlideNextActionsProps, SlideNextActionsItem } 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
|
+
| `items` | `SlideNextActionsItem[]` | 打ち手。3〜5 件。**必須**。各要素は下の `items[].…` の行。 |
|
|
21
|
+
| `items[].action` | `string` | 何をするか(目的語から始めて 1 文。40 文字程度まで)。**必須**。 |
|
|
22
|
+
| `items[].owner` | `string` | 担当。 |
|
|
23
|
+
| `items[].due` | `string` | 期限。書いたまま 1 行で表示される(「10/31」。10 文字程度まで)。 |
|
|
24
|
+
| `items[].metric` | `string` | 確認する指標。 |
|
|
25
|
+
| `asOf` | `string` | 数字を取った日。日付のみ(例: `"2026-10-01"`)。block が「2026-10-01 時点」と 1 回だけ「時点」を付けるので、「時点」は書かない。 |
|
|
26
|
+
| `source` | `string` | 出典(例: `"社内 BI"`)。「出典: 社内 BI」と表示される。 |
|
|
27
|
+
|
|
28
|
+
## 使い方
|
|
29
|
+
|
|
30
|
+
```tsx
|
|
31
|
+
import { Slide, SlideNextActions } from "@squadbase/vantage/slide";
|
|
32
|
+
|
|
33
|
+
<Slide>
|
|
34
|
+
<SlideNextActions
|
|
35
|
+
title="解約と新規獲得の施策を 3 つ、11 月末までに始める"
|
|
36
|
+
items={[
|
|
37
|
+
{ action: "解約予兆スコアの上位 50 社に CS が連絡する", owner: "CS 部 山田", due: "10/31", metric: "解約率 1.5% 以下" },
|
|
38
|
+
{ action: "紹介プログラムの特典を見直す", owner: "マーケ 佐藤", due: "11/15", metric: "紹介経由の新規 20 社" },
|
|
39
|
+
{ action: "料金ページの導線を改善する", owner: "プロダクト 鈴木", due: "11/30", metric: "申込率 +1pt" },
|
|
40
|
+
]}
|
|
41
|
+
/>
|
|
42
|
+
</Slide>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## 注意
|
|
46
|
+
|
|
47
|
+
- 担当・期限・確認する指標の列は、1 件でも値があるときだけ出ます。
|
|
48
|
+
- 列見出し(担当 / 期限 / 確認する指標)は block が出す日本語固定で、上書きできません。
|
|
49
|
+
- `due` は書いたまま表示されます(「10/31」「来週まで」)。6 件以上は `console.warn` が出ます。
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# SlideScorecardTable
|
|
2
|
+
|
|
3
|
+
> 指標ごとの目標と実績、状態を並べるスコアカード表。
|
|
4
|
+
|
|
5
|
+
指標ごとに目標・実績・達成率と、状態(順調 / 要注意 / 遅延)を並べる表の 1 枚です。状態は色付きの点と言葉の両方で示すので、色だけに頼りません。
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { SlideScorecardTable } from "@squadbase/vantage/slide";
|
|
9
|
+
import type { SlideScorecardTableProps, SlideScorecardRow, SlideScorecardStatus } 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
|
+
| `rows` | `SlideScorecardRow[]` | | 行。8 行まで。**必須**。各要素は下の `rows[].…` の行。 |
|
|
21
|
+
| `rows[].metric` | `string` | | 指標名(20 文字程度まで)。**必須**。 |
|
|
22
|
+
| `rows[].value` | `number \| null` | | 実績。`null` は「—」と表示される。**必須**。 |
|
|
23
|
+
| `rows[].format` | `ValueFormat` | | `value` と `target` の整形(`"currency"` / `"percent"` など)。 |
|
|
24
|
+
| `rows[].display` | `string` | | 表示する実績の文字だけを置き換える(元の数値は `value` のまま)。 |
|
|
25
|
+
| `rows[].target` | `number` | | 目標。`format` は `value` と同じ。どれかの行に目標があると達成率の列が出る(value ÷ target)。 |
|
|
26
|
+
| `rows[].betterWhen` | `"up" \| "down"` | `"up"` | どちらの向きが良いか。`"down"` なら達成率は target ÷ value になり、コストの目標を下回ると 100% を超える。 |
|
|
27
|
+
| `rows[].status` | `SlideScorecardStatus` | | `"on"`(順調)/ `"risk"`(要注意)/ `"off"`(遅延)。値から導かず、渡したものをそのまま出す。**必須**。 |
|
|
28
|
+
| `columns` | `Partial<Record<"metric" \| "target" \| "actual" \| "attainment" \| "status", string>>` | | 見出しの語を差し替える。省いた列は既定(指標 / 目標 / 実績 / 達成率 / 状態)。状態の言葉(順調 / 要注意 / 遅延)は上書きできない。 |
|
|
29
|
+
| `asOf` | `string` | | 数字を取った日。日付のみ(例: `"2026-10-01"`)。block が「2026-10-01 時点」と 1 回だけ「時点」を付けるので、「時点」は書かない。 |
|
|
30
|
+
| `source` | `string` | | 出典(例: `"社内 BI"`)。「出典: 社内 BI」と表示される。 |
|
|
31
|
+
|
|
32
|
+
## 使い方
|
|
33
|
+
|
|
34
|
+
```tsx
|
|
35
|
+
import { Slide, SlideScorecardTable } from "@squadbase/vantage/slide";
|
|
36
|
+
|
|
37
|
+
<Slide>
|
|
38
|
+
<SlideScorecardTable
|
|
39
|
+
title="4 指標のうち 2 つが目標どおり、解約と新規が遅れている"
|
|
40
|
+
rows={[
|
|
41
|
+
{ metric: "月次売上", value: 540_000_000, target: 520_000_000, format: "currency", status: "on" },
|
|
42
|
+
{ metric: "継続率", value: 0.982, target: 0.98, format: { type: "percent", digits: 1 }, status: "on" },
|
|
43
|
+
{ metric: "解約率", value: 0.018, target: 0.015, format: { type: "percent", digits: 1 }, betterWhen: "down", status: "risk" },
|
|
44
|
+
{ metric: "新規獲得", value: 38, target: 50, format: { type: "number", unit: "社" }, status: "off" },
|
|
45
|
+
]}
|
|
46
|
+
asOf="2026-10-01"
|
|
47
|
+
source="社内 BI"
|
|
48
|
+
/>
|
|
49
|
+
</Slide>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## 注意
|
|
53
|
+
|
|
54
|
+
- 7 行からは文字が本文から注記のサイズに下がります。9 行以上は描画されますが `console.warn` が出ます。
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Alert Dialog
|
|
2
|
+
|
|
3
|
+
> 取り消せない操作の前に確認するモーダル。
|
|
4
|
+
|
|
5
|
+
削除など取り消せない操作の前に、ユーザーの明示的な返答を求めるモーダルです。
|
|
6
|
+
[`Dialog`](ui/dialog) と違い、背景のクリックでは閉じません。
|
|
7
|
+
|
|
8
|
+
```tsx
|
|
9
|
+
import {
|
|
10
|
+
AlertDialog,
|
|
11
|
+
AlertDialogTrigger,
|
|
12
|
+
AlertDialogContent,
|
|
13
|
+
AlertDialogHeader,
|
|
14
|
+
AlertDialogMedia,
|
|
15
|
+
AlertDialogTitle,
|
|
16
|
+
AlertDialogDescription,
|
|
17
|
+
AlertDialogFooter,
|
|
18
|
+
AlertDialogCancel,
|
|
19
|
+
AlertDialogAction,
|
|
20
|
+
} from "@squadbase/vantage/ui";
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## パーツ
|
|
24
|
+
|
|
25
|
+
| パーツ | 役割 |
|
|
26
|
+
| --- | --- |
|
|
27
|
+
| `AlertDialog` | 状態。`open` / `defaultOpen` / `onOpenChange` |
|
|
28
|
+
| `AlertDialogTrigger` | 開くきっかけ。`render` でボタンにする |
|
|
29
|
+
| `AlertDialogContent` | 本体。`size` で幅を選ぶ |
|
|
30
|
+
| `AlertDialogMedia` | 見出し横のアイコン枠 |
|
|
31
|
+
| `AlertDialogHeader` / `AlertDialogTitle` / `AlertDialogDescription` | 見出し |
|
|
32
|
+
| `AlertDialogFooter` | ボタン行 |
|
|
33
|
+
| `AlertDialogCancel` | 閉じるボタン(既定 `variant="outline"`) |
|
|
34
|
+
| `AlertDialogAction` | 実行ボタン。`Button` の props をそのまま取る |
|
|
35
|
+
|
|
36
|
+
| Prop | Type | Default | 説明 |
|
|
37
|
+
| --- | --- | --- | --- |
|
|
38
|
+
| `size` | `"default" \| "sm"` | `"default"` | `AlertDialogContent` に渡す。`sm` はボタンを 2 列に並べる。 |
|
|
39
|
+
|
|
40
|
+
`AlertDialogAction` は**押しても自動では閉じません**。処理が終わったら `open` を `false` に
|
|
41
|
+
するか、閉じてよいなら `AlertDialogCancel` と同じく `render` で包んでください。
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Avatar
|
|
2
|
+
|
|
3
|
+
> ユーザーの顔写真またはイニシャル。
|
|
4
|
+
|
|
5
|
+
ユーザーやオーナーを小さな丸で示します。画像が読み込めないとき・`src` が無いときは
|
|
6
|
+
`AvatarFallback` の中身(イニシャルなど)を出します。
|
|
7
|
+
|
|
8
|
+
```tsx
|
|
9
|
+
import {
|
|
10
|
+
Avatar,
|
|
11
|
+
AvatarImage,
|
|
12
|
+
AvatarFallback,
|
|
13
|
+
AvatarBadge,
|
|
14
|
+
AvatarGroup,
|
|
15
|
+
AvatarGroupCount,
|
|
16
|
+
} from "@squadbase/vantage/ui";
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## パーツ
|
|
20
|
+
|
|
21
|
+
| パーツ | 役割 |
|
|
22
|
+
| --- | --- |
|
|
23
|
+
| `Avatar` | 外枠。`size` で大きさを選ぶ |
|
|
24
|
+
| `AvatarImage` | 画像。読み込みに失敗すると描画されない |
|
|
25
|
+
| `AvatarFallback` | 画像が無いときの中身 |
|
|
26
|
+
| `AvatarBadge` | 右下の小さな丸(オンライン表示など) |
|
|
27
|
+
| `AvatarGroup` / `AvatarGroupCount` | 重ねて並べる。`AvatarGroupCount` は「+4」などの残数 |
|
|
28
|
+
|
|
29
|
+
| Prop | Type | Default | 説明 |
|
|
30
|
+
| --- | --- | --- | --- |
|
|
31
|
+
| `size` | `"default" \| "sm" \| "lg"` | `"default"` | `Avatar` に渡す。`sm` は 24px、`default` は 32px、`lg` は 40px。 |
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Combobox
|
|
2
|
+
|
|
3
|
+
> 入力して候補を絞り込むセレクト。
|
|
4
|
+
|
|
5
|
+
テキストを打って候補を絞り込み、1 つ(または複数)を選ぶ入力です。候補が数件なら
|
|
6
|
+
[`Select`](ui/select) のほうが手数が少なくて済みます。Base UI の `Combobox` の上に
|
|
7
|
+
作っています。
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
import {
|
|
11
|
+
Combobox,
|
|
12
|
+
ComboboxInput,
|
|
13
|
+
ComboboxContent,
|
|
14
|
+
ComboboxEmpty,
|
|
15
|
+
ComboboxList,
|
|
16
|
+
ComboboxItem,
|
|
17
|
+
ComboboxGroup,
|
|
18
|
+
ComboboxLabel,
|
|
19
|
+
ComboboxCollection,
|
|
20
|
+
ComboboxSeparator,
|
|
21
|
+
ComboboxChips,
|
|
22
|
+
ComboboxChip,
|
|
23
|
+
ComboboxChipsInput,
|
|
24
|
+
ComboboxTrigger,
|
|
25
|
+
ComboboxValue,
|
|
26
|
+
useComboboxAnchor,
|
|
27
|
+
} from "@squadbase/vantage/ui";
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## パーツ
|
|
31
|
+
|
|
32
|
+
| パーツ | 役割 |
|
|
33
|
+
| --- | --- |
|
|
34
|
+
| `Combobox` | 状態。`items` / `value` / `defaultValue` / `onValueChange` / `multiple` |
|
|
35
|
+
| `ComboboxInput` | 入力欄。`showTrigger`(既定 `true`)/ `showClear` で右端のボタンを出す |
|
|
36
|
+
| `ComboboxContent` | 候補のポップアップ。`side` / `align` / `anchor` |
|
|
37
|
+
| `ComboboxList` | 候補の並び。子に関数を渡すと、絞り込み後の `items` が 1 件ずつ渡る |
|
|
38
|
+
| `ComboboxItem` | 1 候補。`value` は必須 |
|
|
39
|
+
| `ComboboxEmpty` | 一致する候補が無いときの表示 |
|
|
40
|
+
| `ComboboxGroup` / `ComboboxLabel` / `ComboboxCollection` / `ComboboxSeparator` | グループ分け |
|
|
41
|
+
| `ComboboxChips` / `ComboboxChip` / `ComboboxChipsInput` | 複数選択をチップで見せる |
|
|
42
|
+
| `ComboboxTrigger` / `ComboboxValue` | 入力欄を使わずボタンで開く形 |
|
|
43
|
+
| `useComboboxAnchor` | チップ枠をポップアップの基準にするための ref |
|
|
44
|
+
|
|
45
|
+
| Prop | Type | Default | 説明 |
|
|
46
|
+
| --- | --- | --- | --- |
|
|
47
|
+
| `items` | `readonly unknown[]` | | `Combobox` に渡す候補。入力に応じて絞り込まれ、`ComboboxList` の関数に渡る。 |
|
|
48
|
+
| `multiple` | `boolean` | `false` | 複数選択にする。 |
|
|
49
|
+
| `onValueChange` | `(value) => void` | | 選択が変わったとき。単一選択では未選択の `null` も渡りうる。 |
|
|
50
|
+
|
|
51
|
+
## 複数選択
|
|
52
|
+
|
|
53
|
+
`multiple` を付け、`ComboboxChips` の中にチップと `ComboboxChipsInput` を置きます。ポップアップを
|
|
54
|
+
チップ枠の幅に合わせるには `useComboboxAnchor()` の ref を両方に渡します。
|
|
55
|
+
|
|
56
|
+
```tsx
|
|
57
|
+
const anchor = useComboboxAnchor();
|
|
58
|
+
|
|
59
|
+
<Combobox items={metrics} multiple>
|
|
60
|
+
<ComboboxChips ref={anchor}>
|
|
61
|
+
<ComboboxValue>
|
|
62
|
+
{(values: string[]) =>
|
|
63
|
+
values.map((v) => <ComboboxChip key={v}>{v}</ComboboxChip>)
|
|
64
|
+
}
|
|
65
|
+
</ComboboxValue>
|
|
66
|
+
<ComboboxChipsInput placeholder="指標を追加" />
|
|
67
|
+
</ComboboxChips>
|
|
68
|
+
<ComboboxContent anchor={anchor}>
|
|
69
|
+
<ComboboxList>
|
|
70
|
+
{(item: string) => <ComboboxItem key={item} value={item}>{item}</ComboboxItem>}
|
|
71
|
+
</ComboboxList>
|
|
72
|
+
</ComboboxContent>
|
|
73
|
+
</Combobox>;
|
|
74
|
+
```
|