@squadbase/vantage 0.6.2-dev2.777fe38 → 0.6.2-dev2.b5837f0
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 +1021 -14
- 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 +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 +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,39 @@
|
|
|
1
|
+
# SlideCover
|
|
2
|
+
|
|
3
|
+
> The cover of a deck — title, subtitle, period, author and as-of line on one slide.
|
|
4
|
+
|
|
5
|
+
The cover of a deck. The title sits in the left 8 columns; period, author and as-of go on one line at the foot.
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { SlideCover } from "@squadbase/vantage/slide";
|
|
9
|
+
import type { SlideCoverProps } from "@squadbase/vantage/slide";
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
> [!NOTE]
|
|
13
|
+
> This is **the content of one `<Slide>`**. It does not include `<Slide>` itself, so put it directly inside one. The root fills the canvas (1920×1080) at 100% and takes no `className`. Margins, text sizes and the grid are fixed inside the block (a 12-column grid on 1920×1080), so don't add your own dimensions. For how to build a deck, see [Slide](page-types/slide). The labels the block adds (「… 時点」, 「出典: …」) are fixed in Japanese and cannot be overridden; `title`, `subtitle`, `period` and `author` are your own text.
|
|
14
|
+
|
|
15
|
+
## Props
|
|
16
|
+
|
|
17
|
+
| Prop | Type | Description |
|
|
18
|
+
| --- | --- | --- |
|
|
19
|
+
| `title` | `string` | The name of the deck. **Required.** |
|
|
20
|
+
| `subtitle` | `string` | One line under the title. |
|
|
21
|
+
| `period` | `string` | The period covered, e.g. "Jul–Sep 2026". |
|
|
22
|
+
| `author` | `string` | Author or team. |
|
|
23
|
+
| `asOf` | `string` | The date the numbers were taken, date only (e.g. `"2026-10-20"`). The block adds 「時点」 once, so don't write it. The label is fixed in Japanese. |
|
|
24
|
+
| `source` | `string` | Where the numbers come from (e.g. `"社内 BI"`). Shown as 「出典: 社内 BI」; the "出典:" label is fixed in Japanese. |
|
|
25
|
+
|
|
26
|
+
## Usage
|
|
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
|
+
## Notes
|
|
37
|
+
|
|
38
|
+
- Use one cover per deck. Later slides carry their headline in the action title of the other blocks.
|
|
39
|
+
- Keep the subtitle to one line of purpose or audience; move longer explanations to later slides.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# SlideExecSummary
|
|
2
|
+
|
|
3
|
+
> The conclusion-first slide — an action title and 3–5 points.
|
|
4
|
+
|
|
5
|
+
The conclusion-first slide. Under the action title it lists 3–5 points, each a one-line headline with an optional supporting line.
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { SlideExecSummary } from "@squadbase/vantage/slide";
|
|
9
|
+
import type { SlideExecSummaryProps, SlideExecSummaryPoint } from "@squadbase/vantage/slide";
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
> [!NOTE]
|
|
13
|
+
> This is **the content of one `<Slide>`**. It does not include `<Slide>` itself, so put it directly inside one. The root fills the canvas (1920×1080) at 100% and takes no `className`. Margins, text sizes and the grid are fixed inside the block (a 12-column grid on 1920×1080), so don't add your own dimensions. For how to build a deck, see [Slide](page-types/slide). The labels the block adds (「… 時点」, 「出典: …」) are fixed in Japanese and cannot be overridden; `title`, `points[].headline` and `points[].detail` are your own text.
|
|
14
|
+
|
|
15
|
+
## Props
|
|
16
|
+
|
|
17
|
+
| Prop | Type | Default | Description |
|
|
18
|
+
| --- | --- | --- | --- |
|
|
19
|
+
| `title` | `string` | | The conclusion as one sentence (an action title). **Required.** |
|
|
20
|
+
| `points` | `SlideExecSummaryPoint[]` | | Points (`{ headline: string; detail?: string }`), 3–5 of them. **Required.** |
|
|
21
|
+
| `layout` | `"rows" \| "columns"` | `"rows"` | `rows` stacks them numbered; `columns` puts them side by side (best with 3–4). |
|
|
22
|
+
| `asOf` | `string` | | The date the numbers were taken, date only (e.g. `"2026-10-01"`). The block adds 「時点」 once, so don't write it. The label is fixed in Japanese. |
|
|
23
|
+
| `source` | `string` | | Where the numbers come from (e.g. `"社内 BI"`). Shown as 「出典: 社内 BI」; the "出典:" label is fixed in Japanese. |
|
|
24
|
+
|
|
25
|
+
## Usage
|
|
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
|
+
## Notes
|
|
45
|
+
|
|
46
|
+
- More than 5 points are still drawn but log a `console.warn` — split the slide.
|
|
47
|
+
- Write `title` as a conclusion sentence, not a topic ("Sales status").
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# SlideHeading
|
|
2
|
+
|
|
3
|
+
> [Part] The title of one slide — an action title with an optional eyebrow.
|
|
4
|
+
|
|
5
|
+
The title of one slide: an `h2` at the page size, clamped to 2 lines, with an optional small label above it (`eyebrow`, e.g. the chapter). It is a **part** for the top row of a slide's 12-column grid, not a whole-slide block.
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { SlideHeading } from "@squadbase/vantage/slide";
|
|
9
|
+
import type { SlideHeadingProps } from "@squadbase/vantage/slide";
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
> [!NOTE]
|
|
13
|
+
> This is **a slide part**, not a whole-slide block. Place it as a row in the 12-column grid inside a `<Slide>`; its root does not fill the canvas (100%×100%). All dimensions are fixed inside the part, so do not add your own. For how to build a deck, see [Slide](page-types/slide).
|
|
14
|
+
|
|
15
|
+
## Props
|
|
16
|
+
|
|
17
|
+
| Prop | Type | Description |
|
|
18
|
+
| --- | --- | --- |
|
|
19
|
+
| `title` | `string` | The conclusion as one sentence (an action title). Clamped to 2 lines. **Required.** |
|
|
20
|
+
| `eyebrow` | `string` | A short label above the title ("Chapter 2: Churn"). |
|
|
21
|
+
|
|
22
|
+
## Usage
|
|
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="Churn has fallen every month since June" eyebrow="Chapter 2: Churn" />
|
|
30
|
+
{/* …SlideColumns and so on… */}
|
|
31
|
+
</div>
|
|
32
|
+
</Slide>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Notes
|
|
36
|
+
|
|
37
|
+
- Write the title as the conclusion, not as a topic.
|
|
38
|
+
- It spans all 12 columns of the grid it sits in.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# SlideKpiGrid
|
|
2
|
+
|
|
3
|
+
> A scoreboard of 2–4 KPIs — value, change and target.
|
|
4
|
+
|
|
5
|
+
A scoreboard of 2–4 KPI cards side by side, each with label, value, change and target. They share the width equally.
|
|
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
|
+
> This is **the content of one `<Slide>`**. It does not include `<Slide>` itself, so put it directly inside one. The root fills the canvas (1920×1080) at 100% and takes no `className`. Margins, text sizes and the grid are fixed inside the block (a 12-column grid on 1920×1080), so don't add your own dimensions. For how to build a deck, see [Slide](page-types/slide). The labels the block adds (「… 時点」, 「出典: …」, 「目標 …(達成率 …)」, 「増」/「減」/「横ばい」) are fixed in Japanese and cannot be overridden; `title`, `items[].label`, `items[].display` and `items[].comparisonLabel` are your own text.
|
|
14
|
+
|
|
15
|
+
## Props
|
|
16
|
+
|
|
17
|
+
| Prop | Type | Default | Description |
|
|
18
|
+
| --- | --- | --- | --- |
|
|
19
|
+
| `title` | `string` | | The conclusion as one sentence (an action title). **Required.** |
|
|
20
|
+
| `items` | `SlideKpiGridItem[]` | | The KPIs, 2–4 of them. **Required.** Each item is described in the `items[].…` rows below. |
|
|
21
|
+
| `items[].label` | `string` | | The metric name. **Required.** |
|
|
22
|
+
| `items[].value` | `number \| null` | | The number. `null` shows 「—」. **Required.** Formatted with `format`. |
|
|
23
|
+
| `items[].format` | `ValueFormat` | | How to format the value (`"currency"`, `"percent"`, `{ type: "number", unit: "社" }`, …). Also the default format of `delta` and `target`. |
|
|
24
|
+
| `items[].display` | `string` | | Replaces the shown text only (the number behind it stays `value`, kept as `data-raw`). |
|
|
25
|
+
| `items[].delta` | `SlideKpiGridDelta` | | `{ value: number; format?: ValueFormat }`. The size of the change, signed (e.g. `0.074` with `format: "percent"` shows 「+7.4%」). The direction comes from the sign, and ▲ ▼ with 「増」「減」 always show. `format` defaults to the item's `format`. |
|
|
26
|
+
| `items[].betterWhen` | `"up" \| "down"` | `"up"` | Which direction of `delta` is good. Drives the colour. |
|
|
27
|
+
| `items[].comparisonLabel` | `string` | | What `delta` is against (e.g. 「前月比」). |
|
|
28
|
+
| `items[].target` | `number` | | The target, in the same `format` as `value`. Shown as 「目標 …(達成率 …)」. The rate is value ÷ target (target ÷ value when `betterWhen` is `"down"`). |
|
|
29
|
+
| `asOf` | `string` | | The date the numbers were taken, date only (e.g. `"2026-10-01"`). The block adds 「時点」 once, so don't write it. The label is fixed in Japanese. |
|
|
30
|
+
| `source` | `string` | | Where the numbers come from (e.g. `"社内 BI"`). Shown as 「出典: 社内 BI」; the "出典:" label is fixed in Japanese. |
|
|
31
|
+
|
|
32
|
+
## Usage
|
|
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
|
+
## Notes
|
|
52
|
+
|
|
53
|
+
- More than 4 are still drawn but log a `console.warn` — split the slide.
|
|
54
|
+
- Pass value, change and target as numbers. `format` formats them; use `display` only to change the shown text.
|
|
55
|
+
- Wording such as 「目標 …(達成率 …)」 and 「増」/「減」 comes from the block and is fixed in Japanese.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# SlideKpiHero
|
|
2
|
+
|
|
3
|
+
> One number as the hero — value, change and a trend line.
|
|
4
|
+
|
|
5
|
+
One number, large. The label, value and change take the left 6 columns and the trend line the right 6. Without `trend` the number takes the full width.
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { SlideKpiHero } from "@squadbase/vantage/slide";
|
|
9
|
+
import type { SlideKpiHeroProps, SlideKpiHeroDelta } from "@squadbase/vantage/slide";
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
> [!NOTE]
|
|
13
|
+
> This is **the content of one `<Slide>`**. It does not include `<Slide>` itself, so put it directly inside one. The root fills the canvas (1920×1080) at 100% and takes no `className`. Margins, text sizes and the grid are fixed inside the block (a 12-column grid on 1920×1080), so don't add your own dimensions. For how to build a deck, see [Slide](page-types/slide). The labels the block adds (「… 時点」, 「出典: …」, 「増」/「減」/「横ばい」) are fixed in Japanese and cannot be overridden; `title`, `label`, `comparisonLabel` and `display` are your own text.
|
|
14
|
+
|
|
15
|
+
## Props
|
|
16
|
+
|
|
17
|
+
| Prop | Type | Default | Description |
|
|
18
|
+
| --- | --- | --- | --- |
|
|
19
|
+
| `title` | `string` | | The conclusion as one sentence (an action title). **Required.** |
|
|
20
|
+
| `label` | `string` | | What the number is ("Monthly revenue"). **Required.** |
|
|
21
|
+
| `value` | `number \| null` | | The number. `null` shows 「—」. **Required.** Formatted with `format` (the number is kept as `data-raw` for export and tests). |
|
|
22
|
+
| `format` | `ValueFormat` | | How to format the value (`"currency"`, `"percent"`, …). Also the default format of `delta`. |
|
|
23
|
+
| `display` | `string` | | Replaces the shown text only (the number behind it stays `value`). |
|
|
24
|
+
| `delta` | `SlideKpiHeroDelta` | | `{ value: number; format?: ValueFormat }`. The size of the change, signed (e.g. `0.074` with `format: "percent"` shows 「+7.4%」). The direction comes from the sign, and ▲ ▼ with 「増」「減」 always show. `format` defaults to the metric's `format`. Omit for no change. |
|
|
25
|
+
| `betterWhen` | `"up" \| "down"` | `"up"` | Which direction of `delta` is good. Drives the colour. |
|
|
26
|
+
| `comparisonLabel` | `string` | | What `delta` is against (e.g. 「前月比」). |
|
|
27
|
+
| `trend` | `{ x: string; y: number }[]` | | Points of the line on the right; leave out for a number alone. |
|
|
28
|
+
| `asOf` | `string` | | The date the numbers were taken, date only (e.g. `"2026-10-01"`). The block adds 「時点」 once, so don't write it. The label is fixed in Japanese. |
|
|
29
|
+
| `source` | `string` | | Where the numbers come from (e.g. `"社内 BI"`). Shown as 「出典: 社内 BI」; the "出典:" label is fixed in Japanese. |
|
|
30
|
+
|
|
31
|
+
## Usage
|
|
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
|
+
## Notes
|
|
55
|
+
|
|
56
|
+
- For a metric where a fall is good (cost), write `betterWhen="down"`. The colour follows `betterWhen`; the direction (▲ ▼ and 「増」/「減」) comes from the sign of `delta.value`.
|
|
57
|
+
- 「増」, 「減」, 「… 時点」 and 「出典: …」 are wording the block adds, fixed in Japanese.
|
|
58
|
+
- The chart is an `EChart` with animation off; the pptx export waits for it.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# SlideNextActions
|
|
2
|
+
|
|
3
|
+
> What happens next — 3–5 actions with owner, due date and the metric to check.
|
|
4
|
+
|
|
5
|
+
The closing slide of most reports: what happens next. Each action can carry an owner, a due date and the metric that shows it worked.
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { SlideNextActions } from "@squadbase/vantage/slide";
|
|
9
|
+
import type { SlideNextActionsProps, SlideNextActionsItem } from "@squadbase/vantage/slide";
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
> [!NOTE]
|
|
13
|
+
> This is **the content of one `<Slide>`**. It does not include `<Slide>` itself, so put it directly inside one. The root fills the canvas (1920×1080) at 100% and takes no `className`. Margins, text sizes and the grid are fixed inside the block (a 12-column grid on 1920×1080), so don't add your own dimensions. For how to build a deck, see [Slide](page-types/slide). The labels the block adds (the column headers 担当 / 期限 / 確認する指標, 「… 時点」, 「出典: …」) are fixed in Japanese and cannot be overridden; `title` and the `items[]` fields are your own text.
|
|
14
|
+
|
|
15
|
+
## Props
|
|
16
|
+
|
|
17
|
+
| Prop | Type | Description |
|
|
18
|
+
| --- | --- | --- |
|
|
19
|
+
| `title` | `string` | The decision or plan as one sentence. **Required.** |
|
|
20
|
+
| `items` | `SlideNextActionsItem[]` | Actions, 3–5. **Required.** Each item is described in the `items[].…` rows below. |
|
|
21
|
+
| `items[].action` | `string` | What to do, as one sentence starting from the object (about 40 characters at most). **Required.** |
|
|
22
|
+
| `items[].owner` | `string` | The owner. |
|
|
23
|
+
| `items[].due` | `string` | The due date, shown as written on one line ("10/31"; about 10 characters at most). |
|
|
24
|
+
| `items[].metric` | `string` | What to look at to know it worked. |
|
|
25
|
+
| `asOf` | `string` | The date the numbers were taken, date only (e.g. `"2026-10-01"`). The block adds 「時点」 once, so don't write it. The label is fixed in Japanese. |
|
|
26
|
+
| `source` | `string` | Where the numbers come from (e.g. `"社内 BI"`). Shown as 「出典: 社内 BI」; the "出典:" label is fixed in Japanese. |
|
|
27
|
+
|
|
28
|
+
## Usage
|
|
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
|
+
## Notes
|
|
46
|
+
|
|
47
|
+
- The owner, due and metric columns appear only when at least one item has a value.
|
|
48
|
+
- The column headers (担当 / 期限 / 確認する指標) are fixed in Japanese and cannot be overridden.
|
|
49
|
+
- `due` is shown as written ("10/31", "by next week"). More than 5 items log a `console.warn`.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# SlideScorecardTable
|
|
2
|
+
|
|
3
|
+
> A scorecard table — target vs actual per metric, with a status.
|
|
4
|
+
|
|
5
|
+
A table of target, actual and attainment per metric with a status (on track / at risk / off track). The status is a coloured dot and a word, so colour is never the only cue.
|
|
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
|
+
> This is **the content of one `<Slide>`**. It does not include `<Slide>` itself, so put it directly inside one. The root fills the canvas (1920×1080) at 100% and takes no `className`. Margins, text sizes and the grid are fixed inside the block (a 12-column grid on 1920×1080), so don't add your own dimensions. For how to build a deck, see [Slide](page-types/slide). The labels the block adds are fixed in Japanese: the status words (順調 / 要注意 / 遅延) and the `asOf` / `source` line (「… 時点」, 「出典: …」) cannot be overridden. The header words can be replaced with `columns` (default 指標 / 目標 / 実績 / 達成率 / 状態); `title`, `rows[].metric` and `rows[].display` are your own text.
|
|
14
|
+
|
|
15
|
+
## Props
|
|
16
|
+
|
|
17
|
+
| Prop | Type | Default | Description |
|
|
18
|
+
| --- | --- | --- | --- |
|
|
19
|
+
| `title` | `string` | | The conclusion as one sentence (an action title). **Required.** |
|
|
20
|
+
| `rows` | `SlideScorecardRow[]` | | Rows, up to 8. **Required.** Each row is described in the `rows[].…` rows below. |
|
|
21
|
+
| `rows[].metric` | `string` | | The metric name (about 20 characters at most). **Required.** |
|
|
22
|
+
| `rows[].value` | `number \| null` | | The actual. `null` shows 「—」. **Required.** |
|
|
23
|
+
| `rows[].format` | `ValueFormat` | | How to format `value` and `target` (`"currency"`, `"percent"`, …). |
|
|
24
|
+
| `rows[].display` | `string` | | Replaces the shown actual only (the number behind it stays `value`). |
|
|
25
|
+
| `rows[].target` | `number` | | The target, in the same `format` as `value`. When any row has a target, the attainment column appears (value ÷ target). |
|
|
26
|
+
| `rows[].betterWhen` | `"up" \| "down"` | `"up"` | Which direction is good. With `"down"` the rate is target ÷ value, so beating a cost target reads above 100%. |
|
|
27
|
+
| `rows[].status` | `SlideScorecardStatus` | | `"on"` (順調) / `"risk"` (要注意) / `"off"` (遅延). Given, not derived from the values. **Required.** |
|
|
28
|
+
| `columns` | `Partial<Record<"metric" \| "target" \| "actual" \| "attainment" \| "status", string>>` | | Override header words; omitted columns keep the default (指標 / 目標 / 実績 / 達成率 / 状態). The status words (順調 / 要注意 / 遅延) cannot be overridden. |
|
|
29
|
+
| `asOf` | `string` | | The date the numbers were taken, date only (e.g. `"2026-10-01"`). The block adds 「時点」 once, so don't write it. The label is fixed in Japanese. |
|
|
30
|
+
| `source` | `string` | | Where the numbers come from (e.g. `"社内 BI"`). Shown as 「出典: 社内 BI」; the "出典:" label is fixed in Japanese. |
|
|
31
|
+
|
|
32
|
+
## Usage
|
|
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
|
+
## Notes
|
|
53
|
+
|
|
54
|
+
- From 7 rows the text drops from body to caption size. More than 8 are drawn with a `console.warn`.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# SlideSection
|
|
2
|
+
|
|
3
|
+
> A chapter divider — the chapter title, optionally with an agenda.
|
|
4
|
+
|
|
5
|
+
A slide that divides the deck into chapters. The chapter title sits on the left; with `items` the right side shows a numbered agenda with the `current` chapter emphasised.
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { SlideSection } from "@squadbase/vantage/slide";
|
|
9
|
+
import type { SlideSectionProps } from "@squadbase/vantage/slide";
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
> [!NOTE]
|
|
13
|
+
> This is **the content of one `<Slide>`**. It does not include `<Slide>` itself, so put it directly inside one. The root fills the canvas (1920×1080) at 100% and takes no `className`. Margins, text sizes and the grid are fixed inside the block (a 12-column grid on 1920×1080), so don't add your own dimensions. For how to build a deck, see [Slide](page-types/slide). The labels the block adds (「… 時点」, 「出典: …」) are fixed in Japanese; `title`, `lead`, `points` and the like are your own text.
|
|
14
|
+
|
|
15
|
+
## Props
|
|
16
|
+
|
|
17
|
+
| Prop | Type | Description |
|
|
18
|
+
| --- | --- | --- |
|
|
19
|
+
| `title` | `string` | The chapter title. **Required.** |
|
|
20
|
+
| `index` | `number` | The chapter number, shown above the title as two digits ("02"). |
|
|
21
|
+
| `lead` | `string` | One line saying what the chapter answers. |
|
|
22
|
+
| `items` | `string[]` | The chapters of the deck, shown at the right as a numbered agenda. One line each, so about 6 at most. Without it the title takes the full width. |
|
|
23
|
+
| `current` | `number` | The chapter in `items` to emphasise (1-based). |
|
|
24
|
+
|
|
25
|
+
## Usage
|
|
26
|
+
|
|
27
|
+
```tsx
|
|
28
|
+
import { Slide, SlideSection } from "@squadbase/vantage/slide";
|
|
29
|
+
|
|
30
|
+
<Slide>
|
|
31
|
+
<SlideSection
|
|
32
|
+
index={2}
|
|
33
|
+
title="Churn trends"
|
|
34
|
+
lead="Which segments leave, and when"
|
|
35
|
+
items={["Overview", "Churn trends", "Drivers", "Next actions"]}
|
|
36
|
+
current={2}
|
|
37
|
+
/>
|
|
38
|
+
</Slide>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Notes
|
|
42
|
+
|
|
43
|
+
- It has no reveal steps. If you want one, wrap it yourself (for example in `Steps`).
|
|
44
|
+
- The agenda numbers are assigned from the order of `items`; `index` only controls the chapter number above the title.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# SlideSourceLine
|
|
2
|
+
|
|
3
|
+
> [Part] The footer line of one slide — as-of date, source and page number.
|
|
4
|
+
|
|
5
|
+
The footer line of one slide: the data's as-of date and source, and optionally the page number at the right. It is a **part** for the bottom row of a slide's 12-column grid, not a whole-slide block. It renders nothing when it has nothing to show.
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { SlideSourceLine } from "@squadbase/vantage/slide";
|
|
9
|
+
import type { SlideSourceLineProps } from "@squadbase/vantage/slide";
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
> [!NOTE]
|
|
13
|
+
> This is **a slide part**, not a whole-slide block. Place it as a row in the 12-column grid inside a `<Slide>`; its root does not fill the canvas (100%×100%). All dimensions are fixed inside the part, so do not add your own. For how to build a deck, see [Slide](page-types/slide).
|
|
14
|
+
|
|
15
|
+
## Props
|
|
16
|
+
|
|
17
|
+
| Prop | Type | Description |
|
|
18
|
+
| --- | --- | --- |
|
|
19
|
+
| `asOf` | `string` | The date the numbers were taken, date only (e.g. `"2026-10-20"`). Shown as 「2026-10-20 時点」; don't write 「時点」 yourself. |
|
|
20
|
+
| `source` | `string` | Where the numbers come from (e.g. `"BI"`). Shown as 「出典: BI」. |
|
|
21
|
+
| `page` | `{ current: number; total: number }` | The page number, shown at the right as "3 / 12". Passed in by the caller. |
|
|
22
|
+
|
|
23
|
+
## Usage
|
|
24
|
+
|
|
25
|
+
```tsx
|
|
26
|
+
import { SlideSourceLine } from "@squadbase/vantage/slide";
|
|
27
|
+
|
|
28
|
+
<SlideSourceLine asOf="2026-10-20" source="BI" page={{ current: 3, total: 12 }} />
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Notes
|
|
32
|
+
|
|
33
|
+
- The page number is passed through `page` because SquadKit cannot read the slide's position from the framework.
|
|
34
|
+
- 「… 時点」 and 「出典: …」 are fixed in Japanese.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Alert Dialog
|
|
2
|
+
|
|
3
|
+
> A modal that asks for confirmation before an irreversible action.
|
|
4
|
+
|
|
5
|
+
A modal that asks for an explicit answer before an action that can't be undone, such as a delete.
|
|
6
|
+
Unlike [`Dialog`](ui/dialog), it does not close when the backdrop is clicked.
|
|
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
|
+
## Parts
|
|
24
|
+
|
|
25
|
+
| Part | Role |
|
|
26
|
+
| --- | --- |
|
|
27
|
+
| `AlertDialog` | The state: `open` / `defaultOpen` / `onOpenChange` |
|
|
28
|
+
| `AlertDialogTrigger` | What opens it; `render` turns it into a button |
|
|
29
|
+
| `AlertDialogContent` | The panel. `size` picks the width |
|
|
30
|
+
| `AlertDialogMedia` | The icon tile beside the heading |
|
|
31
|
+
| `AlertDialogHeader` / `AlertDialogTitle` / `AlertDialogDescription` | The heading block |
|
|
32
|
+
| `AlertDialogFooter` | The button row |
|
|
33
|
+
| `AlertDialogCancel` | The dismiss button (`variant="outline"` by default; also takes `size`) |
|
|
34
|
+
| `AlertDialogAction` | The confirm button. Takes the `Button` props as they are |
|
|
35
|
+
|
|
36
|
+
| Prop | Type | Default | Description |
|
|
37
|
+
| --- | --- | --- | --- |
|
|
38
|
+
| `size` | `"default" \| "sm"` | `"default"` | Passed to `AlertDialogContent`. `sm` lays the buttons out in two columns. |
|
|
39
|
+
|
|
40
|
+
`AlertDialogAction` **does not close the dialog on its own**. Set `open` to `false` when your work
|
|
41
|
+
finishes. If it is fine to close immediately, use `AlertDialogCancel` instead and give it the
|
|
42
|
+
`variant` you want, since it closes the dialog.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Avatar
|
|
2
|
+
|
|
3
|
+
> A user's photo or initials.
|
|
4
|
+
|
|
5
|
+
Shows a user or owner as a small circle. When the image fails to load, or there is no `src`, it
|
|
6
|
+
shows the content of `AvatarFallback` (initials, for example).
|
|
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
|
+
## Parts
|
|
20
|
+
|
|
21
|
+
| Part | Role |
|
|
22
|
+
| --- | --- |
|
|
23
|
+
| `Avatar` | The frame. `size` picks the dimensions |
|
|
24
|
+
| `AvatarImage` | The image. Not rendered if loading fails |
|
|
25
|
+
| `AvatarFallback` | What shows when there is no image |
|
|
26
|
+
| `AvatarBadge` | A small dot at the bottom right (an online indicator, say) |
|
|
27
|
+
| `AvatarGroup` / `AvatarGroupCount` | Overlapping row. `AvatarGroupCount` is the remainder, such as "+4" |
|
|
28
|
+
|
|
29
|
+
| Prop | Type | Default | Description |
|
|
30
|
+
| --- | --- | --- | --- |
|
|
31
|
+
| `size` | `"default" \| "sm" \| "lg"` | `"default"` | Passed to `Avatar`. `sm` is 24px, `default` is 32px, `lg` is 40px. |
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Combobox
|
|
2
|
+
|
|
3
|
+
> A select you filter by typing.
|
|
4
|
+
|
|
5
|
+
An input where you type to narrow the options and pick one (or several). For just a few options,
|
|
6
|
+
[`Select`](ui/select) takes fewer steps. It is built on Base UI's `Combobox`.
|
|
7
|
+
|
|
8
|
+
```tsx
|
|
9
|
+
import {
|
|
10
|
+
Combobox,
|
|
11
|
+
ComboboxInput,
|
|
12
|
+
ComboboxContent,
|
|
13
|
+
ComboboxEmpty,
|
|
14
|
+
ComboboxList,
|
|
15
|
+
ComboboxItem,
|
|
16
|
+
ComboboxGroup,
|
|
17
|
+
ComboboxLabel,
|
|
18
|
+
ComboboxCollection,
|
|
19
|
+
ComboboxSeparator,
|
|
20
|
+
ComboboxChips,
|
|
21
|
+
ComboboxChip,
|
|
22
|
+
ComboboxChipsInput,
|
|
23
|
+
ComboboxTrigger,
|
|
24
|
+
ComboboxValue,
|
|
25
|
+
useComboboxAnchor,
|
|
26
|
+
} from "@squadbase/vantage/ui";
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Parts
|
|
30
|
+
|
|
31
|
+
| Part | Role |
|
|
32
|
+
| --- | --- |
|
|
33
|
+
| `Combobox` | The state: `items` / `value` / `defaultValue` / `onValueChange` / `multiple` |
|
|
34
|
+
| `ComboboxInput` | The input. `showTrigger` (default `true`) and `showClear` (default `false`) toggle the buttons on the right |
|
|
35
|
+
| `ComboboxContent` | The popup. `side` / `align` / `anchor` |
|
|
36
|
+
| `ComboboxList` | The options. Pass a function as the child and it receives the filtered `items` one by one |
|
|
37
|
+
| `ComboboxItem` | One option. `value` is required |
|
|
38
|
+
| `ComboboxEmpty` | Shown when nothing matches |
|
|
39
|
+
| `ComboboxGroup` / `ComboboxLabel` / `ComboboxCollection` / `ComboboxSeparator` | Grouping |
|
|
40
|
+
| `ComboboxChips` / `ComboboxChip` / `ComboboxChipsInput` | Show a multiple selection as chips. `ComboboxChip` has a remove button; `showRemove={false}` hides it |
|
|
41
|
+
| `ComboboxTrigger` / `ComboboxValue` | The button-opened form, without the input |
|
|
42
|
+
| `useComboboxAnchor` | A ref that makes the chip frame the popup's reference |
|
|
43
|
+
|
|
44
|
+
| Prop | Type | Default | Description |
|
|
45
|
+
| --- | --- | --- | --- |
|
|
46
|
+
| `items` | `readonly unknown[]` | | The options passed to `Combobox`. They are filtered as the user types and handed to the function in `ComboboxList`. |
|
|
47
|
+
| `multiple` | `boolean` | `false` | Allow selecting several. |
|
|
48
|
+
| `onValueChange` | `(value) => void` | | Called when the selection changes. In single-select mode it can also receive `null` for no selection. |
|
|
49
|
+
|
|
50
|
+
## Multiple selection
|
|
51
|
+
|
|
52
|
+
Add `multiple`, and place the chips and a `ComboboxChipsInput` inside `ComboboxChips`. To match the
|
|
53
|
+
popup's width to the chip frame, give the ref from `useComboboxAnchor()` to both
|
|
54
|
+
`ComboboxChips` and `ComboboxContent`.
|
|
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="Add a metric" />
|
|
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
|
+
```
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Drawer
|
|
2
|
+
|
|
3
|
+
> A panel you swipe in and out from the edge of the screen.
|
|
4
|
+
|
|
5
|
+
A panel that comes in from the bottom of the screen (or any edge). You can dismiss it by
|
|
6
|
+
swiping, so it suits detail views and action lists on mobile. For a large form on desktop,
|
|
7
|
+
[`Sheet`](ui/sheet) is the more natural choice. It is built on Base UI's `Drawer`.
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
import {
|
|
11
|
+
Drawer,
|
|
12
|
+
DrawerTrigger,
|
|
13
|
+
DrawerContent,
|
|
14
|
+
DrawerHeader,
|
|
15
|
+
DrawerTitle,
|
|
16
|
+
DrawerDescription,
|
|
17
|
+
DrawerFooter,
|
|
18
|
+
DrawerClose,
|
|
19
|
+
} from "@squadbase/vantage/ui";
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Parts
|
|
23
|
+
|
|
24
|
+
| Part | Role |
|
|
25
|
+
| --- | --- |
|
|
26
|
+
| `Drawer` | The state: `open` / `defaultOpen` / `onOpenChange`, direction, snap points |
|
|
27
|
+
| `DrawerTrigger` | What opens it; `render` turns it into a button |
|
|
28
|
+
| `DrawerContent` | The panel. It includes the overlay and the portal |
|
|
29
|
+
| `DrawerHeader` / `DrawerTitle` / `DrawerDescription` | The heading block |
|
|
30
|
+
| `DrawerFooter` | The button row |
|
|
31
|
+
| `DrawerClose` | Anything that closes it |
|
|
32
|
+
|
|
33
|
+
| Prop | Type | Default | Description |
|
|
34
|
+
| --- | --- | --- | --- |
|
|
35
|
+
| `swipeDirection` | `"down" \| "up" \| "left" \| "right"` | `"down"` | Passed to `Drawer`. The direction you swipe to dismiss it (which is also the edge it comes from). |
|
|
36
|
+
| `showSwipeHandle` | `boolean` | `false` | Passed to `Drawer`. Shows a grab handle. |
|
|
37
|
+
| `snapPoints` | `(number \| string)[]` | | Passed to `Drawer`. Heights where it can rest part-way (`0.5` or `"20rem"`). |
|
|
38
|
+
| `modal` | `boolean` | `true` | Passed to `Drawer`. With `false` the page behind stays interactive and no overlay is shown. |
|
|
39
|
+
|
|
40
|
+
`DrawerTitle` is required for assistive technology. If you don't want it visible, keep it and add
|
|
41
|
+
`className="sr-only"`.
|
package/docs/en/ui/empty.md
CHANGED
|
@@ -10,7 +10,7 @@ import { Empty } from "@squadbase/vantage/ui";
|
|
|
10
10
|
|
|
11
11
|
| Prop | Type | Default | Description |
|
|
12
12
|
| --- | --- | --- | --- |
|
|
13
|
-
| `title` | `string` | `"
|
|
13
|
+
| `title` | `string` | `"表示できるデータがありません"` | The heading. |
|
|
14
14
|
| `description` | `string` | | Supporting text under the heading. |
|
|
15
15
|
| `icon` | `ReactNode` | | Artwork above the heading. |
|
|
16
16
|
| `action` | `ReactNode` | | The next step — a button or link — at the bottom. |
|
|
@@ -11,8 +11,9 @@ import { ErrorState } from "@squadbase/vantage/ui";
|
|
|
11
11
|
|
|
12
12
|
| Prop | Type | Default | Description |
|
|
13
13
|
| --- | --- | --- | --- |
|
|
14
|
-
| `title` | `string` | `"
|
|
15
|
-
| `message` | `ReactNode` |
|
|
14
|
+
| `title` | `string` | `"データを読み込めませんでした"` | The heading. |
|
|
15
|
+
| `message` | `ReactNode` | `"時間をおいて再試行してください。解決しない場合は管理者にお問い合わせください。"` | What happened and what to do next, in plain words. |
|
|
16
|
+
| `details` | `ReactNode` | | Technical detail (error message, status code). Folded behind a "詳細を表示" disclosure. |
|
|
16
17
|
| `action` | `ReactNode` | | A retry button, typically. |
|
|
17
18
|
| `className` | `string` | | Classes to add. |
|
|
18
19
|
|
|
@@ -35,7 +36,7 @@ export default function Customers() {
|
|
|
35
36
|
if (error)
|
|
36
37
|
return (
|
|
37
38
|
<ErrorState
|
|
38
|
-
|
|
39
|
+
details={error.message}
|
|
39
40
|
action={<Button variant="outline" onClick={() => refetch()}>Retry</Button>}
|
|
40
41
|
/>
|
|
41
42
|
);
|