@squadbase/vantage 0.6.2-dev2.777fe38 → 0.6.2-dev2.e6d8401
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-U7GO26HR.js} +9 -9
- package/dist/{build-JB4VOMUI.js.map → build-U7GO26HR.js.map} +1 -1
- package/dist/{check-ZJYK6RLG.js → check-MRVAIHG5.js} +7 -7
- package/dist/{check-ZJYK6RLG.js.map → check-MRVAIHG5.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-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-BCE22JSM.js → chunk-PJ4SPXHS.js} +52 -16
- package/dist/chunk-PJ4SPXHS.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-O42JFQ64.js} +10 -10
- package/dist/dev-O42JFQ64.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-YD3XAAOT.js} +7 -7
- package/dist/{doctor-WHZXPERA.js.map → doctor-YD3XAAOT.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/agent-skills.md +1 -1
- 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/agent-skills.md +1 -1
- 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 +62 -52
- package/skills/vantage-design/references/extract.md +26 -27
- package/skills/vantage-design/references/format.md +12 -172
- package/skills/vantage-design/references/presets.md +50 -110
- package/skills/vantage-pitfalls/SKILL.md +10 -1
- package/skills/vantage-slide/SKILL.md +71 -36
- package/templates/AGENTS.md +53 -16
- 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 +55 -10
- package/templates/agents/slide.md +90 -4
- 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
|
@@ -7,27 +7,46 @@
|
|
|
7
7
|
|
|
8
8
|
```tsx
|
|
9
9
|
import { FunnelSteps, funnelStepsVariants } from "@squadbase/vantage/components";
|
|
10
|
-
import type { FunnelStep } from "@squadbase/vantage/components";
|
|
10
|
+
import type { FunnelStep, ChartColorToken } from "@squadbase/vantage/components";
|
|
11
11
|
```
|
|
12
12
|
|
|
13
13
|
| Prop | Type | Default | 説明 |
|
|
14
14
|
| --- | --- | --- | --- |
|
|
15
|
-
| `data` | `
|
|
16
|
-
| `
|
|
17
|
-
| `
|
|
18
|
-
| `
|
|
19
|
-
| `
|
|
20
|
-
| `
|
|
15
|
+
| `data` | `T[]` | | 各段。**必須**。**先頭が最大幅**になる。`index` / `categories` を省くと `{ label, value }` の形として読む。 |
|
|
16
|
+
| `index` | `keyof T & string` | `"label"` | ステップのラベルに使う列名。 |
|
|
17
|
+
| `categories` | `(keyof T & string)[]` | `["value"]` | 値に使う列名を 1 つだけ入れた配列。最初の 1 つだけを使う。 |
|
|
18
|
+
| `colors` | `ChartColorToken[]` | | 段の色(`"chart-1"`〜`"chart-5"`、段の順に繰り返す)。省略時はすべて `"chart-1"`(段は同じ量の絞り込みなので 1 色)。 |
|
|
19
|
+
| `labels` | `Record<string, string>` | | ステップの名前(`index` の値)→ 表示名。ラベルとデータ表に反映。 |
|
|
20
|
+
| `highlight` | `string` | | 伝えたい 1 段。`index` の値で渡す。この 1 段だけ濃い色になる(他は淡い色)。 |
|
|
21
|
+
| `showConversion` | `boolean` | | 段の間に転換率を出す。最も低い転換率だけが強調される。 |
|
|
22
|
+
| `comparison` | `{ values: readonly (number \| null)[]; label?: string }` | | 前期の各段の値(`data` と同じ順)。渡すと転換率の横に前期比(pt)を出し、最も下がった率を強調する。`label` の既定は「前期」。 |
|
|
23
|
+
| `format` | `ValueFormat` | `"compact"` | 値の書式。`"compact"` / `"number"` / `"currency"` / `"percent"` などか `{ type, digits, unit, … }`。KPI 系の `format` と同じ値を渡せる。 |
|
|
24
|
+
| `valueFormatter` | `(value: number) => string` | | 書式を関数で直接渡す逃げ道。`format` より優先する。 |
|
|
25
|
+
| `title` | `string` | | グラフの見出し。 |
|
|
26
|
+
| `summary` | `string` | | 1 文の要約。見出しの下に出す。 |
|
|
27
|
+
| `isLoading` | `boolean` | | 読み込み中。最終形と同じ形・高さのスケルトンを出す。 |
|
|
28
|
+
| `emptyState` | `{ title?: string; description?: string; action?: ReactNode }` | | `data` が空のときの表示。`title` の既定は「表示できるデータがありません」。 |
|
|
29
|
+
| `animate` | `boolean` | `false` | マウント時に幅を伸ばすアニメーション。 |
|
|
30
|
+
| `size` | `"sm" \| "md" \| "lg"` | `"md"` | 段の大きさ。 |
|
|
31
|
+
| `direction` | `"vertical" \| "horizontal"` | `"vertical"` | 並べる向き。 |
|
|
32
|
+
| `ariaLabel` | `string` | | グラフの説明(スクリーンリーダー向け)。 |
|
|
33
|
+
| `className` | `string` | | 外側の `<figure>` に足すクラス。高さは段数で決まる(`height` は持たない)。 |
|
|
21
34
|
|
|
22
35
|
## FunnelStep
|
|
23
36
|
|
|
37
|
+
`index` / `categories` を省いたときに読まれる行の形です。
|
|
38
|
+
|
|
24
39
|
```ts
|
|
25
40
|
interface FunnelStep {
|
|
26
41
|
label: string;
|
|
27
42
|
value: number;
|
|
28
|
-
color?: string; // 既定はテーマの chart 色
|
|
29
43
|
onClick?: () => void;
|
|
44
|
+
/** @deprecated Tailwind の bg クラス。`colors` を使う。 */
|
|
45
|
+
color?: string;
|
|
30
46
|
}
|
|
31
47
|
```
|
|
32
48
|
|
|
33
49
|
`onClick` を渡した段は押せるようになるので、その段の内訳へドリルダウンさせられます。
|
|
50
|
+
|
|
51
|
+
> [!NOTE]
|
|
52
|
+
> `formatValue` は**非推奨**です。`valueFormatter`(関数)か `format`(`"compact"` など)を使ってください。
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Heatmap
|
|
2
|
+
|
|
3
|
+
> 2 つのカテゴリの掛け合わせを濃淡で見せる型付きのヒートマップ。曜日 × 時間帯やコホートの継続率に。
|
|
4
|
+
|
|
5
|
+
マス目の濃さで値の大小を見せます。**行の配列(`data`)・横軸の列(`x`)・縦軸の列(`y`)・濃さを決める数値の列
|
|
6
|
+
(`value`)**を渡すだけで描けます。配色は 1 色の薄い → 濃いのグラデーション(既定 `--chart-1`)で、
|
|
7
|
+
レインボーにはしません。値が無いマスは塗らず、0 とは区別します(ツールチップとデータ表は「—」)。
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
import { Heatmap } from "@squadbase/vantage/components";
|
|
11
|
+
import type { HeatmapProps } from "@squadbase/vantage/components";
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
| Prop | Type | Default | 説明 |
|
|
15
|
+
| --- | --- | --- | --- |
|
|
16
|
+
| `data` | `Record<string, unknown>[]` | | 行の配列。**必須**。1 行が 1 マス(x と y の組)。同じ組が複数あれば後の行が勝つ。 |
|
|
17
|
+
| `x` | `string` | | 横軸(列)に使う列名。**必須**。 |
|
|
18
|
+
| `y` | `string` | | 縦軸(行)に使う列名。**必須**。先頭の行が一番上。 |
|
|
19
|
+
| `value` | `string` | | マスの濃さを決める数値の列名。**必須**。null・欠損・数値でない値のマスは塗らない。 |
|
|
20
|
+
| `xLabels` | `string[]` | | 横軸の並び順(と表示するマス)。省略時は `data` の出現順。ここに無い x の行は描かない。 |
|
|
21
|
+
| `yLabels` | `string[]` | | 縦軸の並び順(と表示するマス)。省略時は `data` の出現順。 |
|
|
22
|
+
| `labels` | `Record<string, string>` | | 列名・軸の値 → 表示名(軸・ツールチップ・データ表)。 |
|
|
23
|
+
| `format` | `ValueFormat` | `"number"` | 数値の書式(`"percent"` や `{ type: "number", unit: "件" }` など)。マス内・ツールチップ・データ表で同じ。 |
|
|
24
|
+
| `valueFormatter` | `(value: number) => string` | | 書式を関数で直接渡す逃げ道。`format` より優先。 |
|
|
25
|
+
| `tone` | `ChartSeriesColor` | `"chart-1"` | 濃淡の色。`"chart-1"`〜`"chart-5"` か意味色(`positive` / `warning` / `negative` / `neutral`)。 |
|
|
26
|
+
| `scale` | `{ min?: number; max?: number }` | | 濃さの固定スケール。省略時はデータの最小〜最大。継続率なら `{ min: 0, max: 100 }`。比べたい範囲が決まっているときだけ渡す。凡例の両端もこの値になる。 |
|
|
27
|
+
| `showValues` | `boolean` | `false` | マスの中に値を書く。 |
|
|
28
|
+
| `showLegend` | `boolean` | `true` | 凡例(薄い → 濃いの帯と両端の値)を出す。 |
|
|
29
|
+
| `showTooltip` | `boolean` | `true` | ホバーでツールチップを出す。 |
|
|
30
|
+
| `details` | `string[]` | | ツールチップとデータ表に添える同じ行の別の数値列。「SLA 未達 2件」のように出る。 |
|
|
31
|
+
| `flag` | `string` | | この列が真(`true` / 0 でない数)の行のマスに、注意色(`--negative`)の枠を付ける。ツールチップにも「要注意」と出る。 |
|
|
32
|
+
| `summary` | `string \| "auto"` | | 1 文要約。`"auto"` で最大のマスから生成。 |
|
|
33
|
+
| `title` | `string` | | グラフの見出し。プロット領域の読み上げ名にもなる。 |
|
|
34
|
+
| `isLoading` | `boolean` | | 読み込み中。最終形と同じ高さのスケルトンを出す。 |
|
|
35
|
+
| `emptyState` | `{ title?: string; description?: string; action?: ReactNode }` | | `data` が空のときの表示。高さは保たれる。既定の題は「表示できるデータがありません」。 |
|
|
36
|
+
| `height` | `number` | `288` | プロット領域の高さ(px)。 |
|
|
37
|
+
| `chartOptions` | `EChartsOption` | | 生成した option に最後に深くマージする逃げ道。 |
|
|
38
|
+
| `actions` | `boolean \| { includeTitle?: boolean }` | `false` | 右上に PNG 保存 / コピーのボタンを出す(ホバー時)。見出しと要約は既定で画像に含まれ、`includeTitle: false` で外せる。 |
|
|
39
|
+
| `fileName` | `string` | `"chart.png"` | PNG 保存時のファイル名(拡張子つき)。 |
|
|
40
|
+
| `className` | `string` | | 外枠(`<figure>`)のクラス。幅はここで決める。 |
|
|
41
|
+
| `ariaLabel` | `string` | | スクリーンリーダー向けのラベル。省略時は「<y の列>×<x の列>のヒートマップ」。 |
|
|
42
|
+
|
|
43
|
+
> [!NOTE]
|
|
44
|
+
> 濃さはデータの範囲に合わせて決まります。別々のヒートマップを並べて比べるときは、全部に同じ `scale` を
|
|
45
|
+
> 渡してください。`minValue` / `maxValue` は非推奨で、`scale` を使います。
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# KpiCard
|
|
2
|
+
|
|
3
|
+
> KPI 1 つ分のカード。値・増減・前期実績・結論の 1 文までを数値から組み立てる。
|
|
4
|
+
|
|
5
|
+
KPI を 1 つ見せるカードです。**数値と列挙値だけを渡せば**、上から「指標名 → 値 → 増減
|
|
6
|
+
([`Delta`](parts/delta))→ 前期の実績 → 結論の 1 文」の順に組み立てます。増減の向き・率・
|
|
7
|
+
色・目標までの残り・達成率・記録更新はすべてカードの中で計算するので、props どうしが食い違うことは
|
|
8
|
+
ありません。KPI タイルは `DashboardCardPreset` + `MetricValue` で組むより、まずこれを使ってください。
|
|
9
|
+
|
|
10
|
+
```tsx
|
|
11
|
+
import { KpiCard } from "@squadbase/vantage/components";
|
|
12
|
+
import type { KpiCardProps, KpiCardSource, Comparison, Polarity, ValueFormat } from "@squadbase/vantage/components";
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
| Prop | Type | Default | 説明 |
|
|
16
|
+
| --- | --- | --- | --- |
|
|
17
|
+
| `label` | `string` | | 指標名。**必須**。 |
|
|
18
|
+
| `value` | `number \| null \| undefined` | | 現在の値。**必須**。`null` / `undefined` は「—」と表示する。 |
|
|
19
|
+
| `format` | `ValueFormat` | `"compact"` | 値の書式(→ format / comparison のページ)。前期実績・目標・残りにも同じ書式を使う。 |
|
|
20
|
+
| `locale` | `string` | `"ja-JP"` | 書式のロケール。 |
|
|
21
|
+
| `comparison` | `Comparison` | | 比較の相手(`{ previous, vs, label? }`)。渡すと増減と前期実績の行が出る。 |
|
|
22
|
+
| `betterWhen` | `"up" \| "down"` | `"up"` | どちらに動くと良いか。解約率のように下がる方が良い指標は `"down"`。`polarity` より優先される。 |
|
|
23
|
+
| `polarity` | `"higher-is-better" \| "lower-is-better" \| "neutral"` | `"higher-is-better"` | 非推奨。`betterWhen` の古い名前。`"neutral"`(良し悪しの色をつけない)はこちらからだけ渡せる。 |
|
|
24
|
+
| `neutralBand` | `number` | `0.01` | 変化率の絶対値がこれ未満なら横ばいとして扱う。 |
|
|
25
|
+
| `showPrevious` | `boolean` | `true` | 前期の実績(「前期 400」)を出すか。`comparison` が要る。 |
|
|
26
|
+
| `summary` | `string` | | 結論の 1 文の**テンプレート**。下のプレースホルダをカードが埋める。 |
|
|
27
|
+
| `target` | `number` | | 今期の目標。「目標まであと …(… 達成)」の行が出る。 |
|
|
28
|
+
| `period` | `{ start: Date \| string \| number; end: Date \| string \| number }` | | 今期の期間。`target` と一緒に渡すと、期間中は「見込み」(このペースなら期末いくつ)が出る。 |
|
|
29
|
+
| `history` | `ReadonlyArray<number \| null \| undefined>` | | 今期で終わる系列(最後の点 = `value`)。記録更新のバッジが出る。 |
|
|
30
|
+
| `historyGrain` | `"day" \| "week" \| "month" \| "quarter" \| "year"` | `"month"` | `history` の粒度。 |
|
|
31
|
+
| `source` | `{ period?: string; count?: number; name?: string }` | | データの出所の注記(「2023-04 以降・48,210 件から集計・Snowflake」)。 |
|
|
32
|
+
| `updatedAt` | `Date \| string \| number` | | 最終更新時刻。「3 分前に更新」と出る。 |
|
|
33
|
+
| `now` | `Date \| number` | | 見込みと相対時刻の基準時刻(表示を固定したいとき)。 |
|
|
34
|
+
| `isLoading` | `boolean` | `false` | 値の代わりに、完成形と同じ形のスケルトンを出す。 |
|
|
35
|
+
| `className` | `string` | | 足すクラス。 |
|
|
36
|
+
|
|
37
|
+
## summary のプレースホルダ
|
|
38
|
+
|
|
39
|
+
`{value}` `{delta}` `{difference}` `{previous}` `{label}` `{target}` `{achievement}` `{remaining}` が
|
|
40
|
+
使えます。知らない名前はそのまま残り、値が無いものは「—」になります。
|
|
41
|
+
|
|
42
|
+
> [!WARNING]
|
|
43
|
+
> **テンプレートに数値を直接書かないでください。** 数値はすべてプレースホルダで差し込みます —
|
|
44
|
+
> 値が変わっても文が古くならないようにするためです。
|
|
45
|
+
|
|
46
|
+
```tsx
|
|
47
|
+
<KpiCard
|
|
48
|
+
label="売上"
|
|
49
|
+
value={48_200_000}
|
|
50
|
+
format="currency"
|
|
51
|
+
comparison={{ previous: 42_900_000, vs: "prior-period" }}
|
|
52
|
+
summary="{label}は前月から {difference}({delta})伸びています。"
|
|
53
|
+
/>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
増減だけを表やタイルの中に置きたいときは [`Delta`](parts/delta) を単体で使います。
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Legend
|
|
2
|
+
|
|
3
|
+
> 複数のグラフで共有する、HTML だけの独立した凡例。
|
|
4
|
+
|
|
5
|
+
複数のグラフで同じ系列を見せるとき、各グラフの凡例を消して、凡例を 1 つにまとめます。**系列名の配列
|
|
6
|
+
(`categories`)**を渡すだけで、`DonutChart` と同じ見た目(角丸の色見本と名前)の凡例が出ます。色はグラフと
|
|
7
|
+
同じ関数で決まるので、グラフに渡した `categories` / `colors` / `labels` と同じ値を渡せば食い違いません。
|
|
8
|
+
キャンバスも SVG も使わない HTML です。
|
|
9
|
+
|
|
10
|
+
```tsx
|
|
11
|
+
import { Legend } from "@squadbase/vantage/components";
|
|
12
|
+
import type { LegendProps } from "@squadbase/vantage/components";
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
| Prop | Type | Default | 説明 |
|
|
16
|
+
| --- | --- | --- | --- |
|
|
17
|
+
| `categories` | `string[]` | | 凡例に並べる系列名。**必須**。並び順が配色の順。空配列なら何も描かない。6 つ以上はグラフ側で「その他」にまとまるので、凡例も 5 つ +「その他」で渡す。 |
|
|
18
|
+
| `colors` | `ChartSeriesColor[] \| Record<string, ChartSeriesColor>` | `["chart-1", …, "chart-5"]` | 系列色。`"chart-1"`〜`"chart-5"` か意味色。配列は系列の順、record は系列名ごと。「その他」は常に灰色。意味色は棒の面の色(`--warning-fill` など)で出る。 |
|
|
19
|
+
| `labels` | `Record<string, string>` | | 系列名 → 表示名。グラフの `labels` と同じものを渡す。 |
|
|
20
|
+
| `layout` | `"horizontal" \| "vertical"` | `"horizontal"` | 並べ方。`horizontal` は折り返す横並び、`vertical` は縦並び。 |
|
|
21
|
+
| `ariaLabel` | `string` | `"凡例"` | 凡例の読み上げ名。 |
|
|
22
|
+
| `className` | `string` | | `<ul>` に足すクラス。 |
|
|
23
|
+
|
|
24
|
+
## グラフの凡例を消す
|
|
25
|
+
|
|
26
|
+
共有する側のグラフには `showLegend={false}` を渡します。
|
|
27
|
+
|
|
28
|
+
```tsx
|
|
29
|
+
<Legend categories={["東京店", "大阪店", "名古屋店"]} />
|
|
30
|
+
<LineChart data={sales} index="month" categories={stores} showLegend={false} />
|
|
31
|
+
<BarChart data={visitors} index="month" categories={stores} showLegend={false} />
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
> [!NOTE]
|
|
35
|
+
> グラフに `colors` を渡しているときは、`Legend` にも同じ `colors` を渡してください。省略するとトークン順の
|
|
36
|
+
> 色になり、グラフと食い違います。
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# LineChart
|
|
2
|
+
|
|
3
|
+
> 推移を線で見せる型付きグラフ。行・x 軸の列・系列の列を渡すだけ。
|
|
4
|
+
|
|
5
|
+
時系列の推移を折れ線で描きます。**行の配列(`data`)・x 軸の列名(`index`)・系列の列名(`categories`)**
|
|
6
|
+
を渡すだけで、凡例・ツールチップ・軸の書式まで揃います。配色はトークンに追従します。中身は
|
|
7
|
+
[`EChart`](parts/echart) です。
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
import { LineChart } from "@squadbase/vantage/components";
|
|
11
|
+
import type { LineChartProps, ChartSeriesColor, ChartEventPayload } from "@squadbase/vantage/components";
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
| Prop | Type | Default | 説明 |
|
|
15
|
+
| --- | --- | --- | --- |
|
|
16
|
+
| `data` | `T[]` | | 行の配列。**必須**。1 行が x 軸の 1 点。数値の列は number か数値文字列(SQL の DECIMAL など)で、それ以外は欠損として扱う。 |
|
|
17
|
+
| `index` | `keyof T & string` | | x 軸に使う列名。**必須**。 |
|
|
18
|
+
| `categories` | `NumericKeys<T>[]` | | 系列として描く列名(数値の列だけ渡せる)。**必須**。この順が凡例と配色の順。6 つ以上は合計の大きい 5 つ +「その他」にまとめる。 |
|
|
19
|
+
| `colors` | `ChartSeriesColor[] \| Record<string, ChartSeriesColor>` | `トークン順` | 系列色。`"chart-1"`〜`"chart-5"`(ライト / ダークに追従)か意味色 `"positive"` / `"warning"` / `"negative"` / `"neutral"`。配列は系列の順、record は系列名ごと。CSS カラーは渡せない。 |
|
|
20
|
+
| `labels` | `Record<string, string>` | | `index` の値・系列名 → 表示名(軸・凡例・ツールチップ・データ表に反映)。例 `{ jan: "1 月", sales: "売上" }`。 |
|
|
21
|
+
| `format` | `ValueFormat` | `"compact"` | 数値の書式。`"compact"` / `"number"` / `"currency"` / `"percent"` / `"multiple"` / `"duration"`、または `{ type, digits, currency, notation, unit, divisor, durationUnit }`。軸は短縮、ツールチップも同じ書式。KPI 系の `format` と同じ値を渡せる。 |
|
|
22
|
+
| `valueFormatter` | `(value: number) => string` | | 書式を関数で直接渡す逃げ道。`format` より優先する。 |
|
|
23
|
+
| `lineOptions` | `LineChartOptions` | | 折れ線固有の設定。`{ curveType, connectNulls, fitToData, targetLabelPosition }`(下の表)。 |
|
|
24
|
+
| `forecast` | `{ data: ChartForecastRow[]; category?: string; label?: string }` | | 予測。最初の系列(または `category`)の続きを点線と薄い帯で描く。`data` の行は実績と同じ `index` のキーに、`value`(と任意の `lower` / `upper`)を持つ。`label` の既定は「予測」。 |
|
|
25
|
+
| `comparison` | `{ category: string; vs: "prior-period" \| "prior-year" \| "target" \| "custom"; label?: string }` | | 比較系列。`categories` のうち 1 つを「前年」「計画」などの比較の線にする(細い灰色の実線)。ツールチップに主系列の差を添える。`vs: "custom"` では `label` が必須。 |
|
|
26
|
+
| `highlight` | `"auto" \| "none"` | | 最大値と最新値に値ラベルを付ける(最初の系列だけ・系列が 2 つ以下のときだけ)。既定は Line / Area が `"auto"`、Bar は `index` が日付・年月・年のときだけ `"auto"`。 |
|
|
27
|
+
| `provisionalFrom` | `string \| number` | | ここから先は確定前(速報)の点。`index` の値で渡す。薄い色・点線で描き、凡例とツールチップに `provisionalLabel` を出す。 |
|
|
28
|
+
| `provisionalLabel` | `string` | `"速報"` | 速報の呼び名(凡例・ツールチップ)。 |
|
|
29
|
+
| `target` | `number` | | 目標値。点線の水平線で示し、値軸は必ずこの値を含む。 |
|
|
30
|
+
| `targetLabel` | `string` | `「目標 <書式化した値>」` | 目標線のラベル。 |
|
|
31
|
+
| `annotations` | `ChartAnnotation[]` | | 任意の位置への注記。`{ at, label }` は縦線、`to` を足すと `at`〜`to` の区間の帯。`at` / `to` は `index` の値。横棒では描かない。 |
|
|
32
|
+
| `showLegend` | `boolean` | `true` | 凡例を出す。 |
|
|
33
|
+
| `showTooltip` | `boolean` | `true` | ホバーでツールチップを出す。 |
|
|
34
|
+
| `showGridLines` | `boolean` | `true` | 値軸の目盛り線。 |
|
|
35
|
+
| `showXAxis` | `boolean` | `true` | x 軸を出す。 |
|
|
36
|
+
| `showYAxis` | `boolean` | `true` | y 軸を出す。 |
|
|
37
|
+
| `startEndOnly` | `boolean` | `false` | x 軸のラベルを最初と最後だけにする。 |
|
|
38
|
+
| `yAxisWidth` | `number` | | y 軸ラベルの幅(px)。縦に並べた複数のグラフでプロット領域を揃えたいときに固定する。 |
|
|
39
|
+
| `minValue` | `number` | | 値軸の下限。指定した値から始める。データが下限を下回るときは軸を広げる。 |
|
|
40
|
+
| `maxValue` | `number` | | 値軸の上限(横棒は横軸)。データが上限を超えるときは軸を広げる。並べて比べる複数のグラフには同じ値を渡して軸をそろえる。 |
|
|
41
|
+
| `allowDecimals` | `boolean` | `true` | `false` で値軸の目盛りを整数に限る。 |
|
|
42
|
+
| `xAxisLabel` | `string` | | x 軸の名前。 |
|
|
43
|
+
| `yAxisLabel` | `string` | | y 軸の名前。 |
|
|
44
|
+
| `onValueChange` | `(value: ChartEventPayload) => void` | | 点(棒)のクリックで呼ばれる。クリックした行に `eventType` と `categoryClicked`(系列名)を足して渡し、同じ点をもう一度押すと `null`。渡すと選択以外が薄くなる。 |
|
|
45
|
+
| `title` | `string` | | グラフの見出し。 |
|
|
46
|
+
| `summary` | `string \| "auto"` | | グラフが言っていることの 1 文要約。見出しの下に出す。`"auto"` なら data から機械的に組む。向きの言い回しを手書きすると data とずれるので `"auto"` を使う。 |
|
|
47
|
+
| `isLoading` | `boolean` | | 読み込み中。最終形と同じ形・高さのスケルトンを出す。 |
|
|
48
|
+
| `emptyState` | `{ title?: string; description?: string; action?: ReactNode }` | | `data` が空のときの表示。高さは保たれる。`title` の既定は「表示できるデータがありません」。 |
|
|
49
|
+
| `height` | `number` | `288` | プロット領域の高さ(px)。文字列(CSS の長さ)は互換のために受けるだけで非推奨。 |
|
|
50
|
+
| `chartOptions` | `EChartsOption` | | 生成した ECharts の option に最後に深くマージする逃げ道。 |
|
|
51
|
+
| `actions` | `boolean \| { includeTitle?: boolean }` | `false` | 右上に PNG の保存 / コピーのボタンを出す(ホバー時)。`title` / `summary` は画像の上に含まれる。含めないなら `{ includeTitle: false }`。 |
|
|
52
|
+
| `fileName` | `string` | `"chart.png"` | PNG 保存時のファイル名(拡張子つき)。`actions` と使う。 |
|
|
53
|
+
| `ariaLabel` | `string` | | グラフの説明(スクリーンリーダー向け)。見出しがあればそちらが使われる。 |
|
|
54
|
+
| `className` | `string` | | 外側の `<figure>` に足すクラス。高さは `height` で決める。 |
|
|
55
|
+
|
|
56
|
+
### lineOptions
|
|
57
|
+
|
|
58
|
+
| Prop | Type | Default | 説明 |
|
|
59
|
+
| --- | --- | --- | --- |
|
|
60
|
+
| `curveType` | `"linear" \| "smooth" \| "step"` | `"linear"` | 線の形。 |
|
|
61
|
+
| `connectNulls` | `boolean` | `false` | 値の欠けた点(`null` など)をまたいで線をつなぐ。 |
|
|
62
|
+
| `fitToData` | `boolean` | `false` | 値軸を 0 からではなくデータの範囲に合わせる。 |
|
|
63
|
+
| `targetLabelPosition` | `"start" \| "end" \| "legend"` | `"start"` | 目標線(`target`)のラベルの置き場所。`"legend"` は凡例だけに出し、線の上には出さない。 |
|
|
64
|
+
|
|
65
|
+
> [!NOTE]
|
|
66
|
+
> `curveType` / `connectNulls` をグラフの props に直接渡す書き方、`autoMinValue`(`lineOptions.fitToData` を使う)、`loading`(`isLoading` を使う)は**非推奨**です。
|
|
67
|
+
|
|
68
|
+
> [!NOTE]
|
|
69
|
+
> `colors` は Tailwind のクラスではなく**テーマの色名**(`"chart-1"`〜`"chart-5"`、意味色)です。
|
|
70
|
+
> ライト / ダークに追従します。任意の CSS カラーは渡せません。軸・凡例・ツールチップの色はいつもテーマから入ります。
|
|
71
|
+
|
|
72
|
+
## 欠損のある系列
|
|
73
|
+
|
|
74
|
+
値が `null`・空文字・数値でない文字列の点は欠損として扱い、線が途切れます。`lineOptions={{ connectNulls: true }}` を
|
|
75
|
+
付けると欠損をまたいでつなぎます。
|
|
76
|
+
|
|
77
|
+
```tsx
|
|
78
|
+
<LineChart data={rows} index="date" categories={["CVR"]} lineOptions={{ connectNulls: true }} valueFormatter={(v) => `${v}%`} />
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## EChart との使い分け
|
|
82
|
+
|
|
83
|
+
まずこの型付きグラフで描き、二軸・散布図・ヒートマップ・注釈線など**この props で表せないもの
|
|
84
|
+
だけ** [`EChart`](parts/echart) に option を書いてください。
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
> KPI の数値。単位は MetricUnit で。
|
|
4
4
|
|
|
5
|
-
KPI
|
|
5
|
+
KPI の数値を大きく見せるための、字送りを詰めた表示です。KPI のタイルを 1 枚作るなら、増減や前期実績まで
|
|
6
|
+
出せる [`KpiCard`](parts/kpi-card) を先に検討してください。単位や補助的な文字は `MetricUnit` で
|
|
6
7
|
添えます。
|
|
7
8
|
|
|
8
9
|
```tsx
|
|
@@ -20,6 +21,6 @@ import { MetricValue, MetricUnit, metricValueVariants } from "@squadbase/vantage
|
|
|
20
21
|
```tsx
|
|
21
22
|
<DashboardCardPreset title="売上">
|
|
22
23
|
<MetricValue className="my-0">¥1,240,000</MetricValue>
|
|
23
|
-
<
|
|
24
|
+
<Delta value={1_240_000} comparison={{ previous: 1_103_000, vs: "prior-period" }} />
|
|
24
25
|
</DashboardCardPreset>
|
|
25
26
|
```
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# ProgressCircle
|
|
2
|
+
|
|
3
|
+
> 目標に対する達成率をリングで示す。中央に任意の内容を置ける。
|
|
4
|
+
|
|
5
|
+
`value / max` の割合だけリングを塗ります。children は中央に置かれるので、達成率の数値や
|
|
6
|
+
アイコンを入れます。単一の `<svg>` で、KPI タイルに並べても軽いままです。
|
|
7
|
+
|
|
8
|
+
```tsx
|
|
9
|
+
import { ProgressCircle } from "@squadbase/vantage/components";
|
|
10
|
+
import type { ChartColor } from "@squadbase/vantage/components";
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
| Prop | Type | Default | 説明 |
|
|
14
|
+
| --- | --- | --- | --- |
|
|
15
|
+
| `value` | `number` | `0` | 現在値。`0`〜`max` に丸める。 |
|
|
16
|
+
| `max` | `number` | `100` | 満タンの値。 |
|
|
17
|
+
| `radius` | `number` | `32` | 外側の半径(px)。全体は `radius * 2` 四方。 |
|
|
18
|
+
| `strokeWidth` | `number` | `6` | 線の太さ(px)。 |
|
|
19
|
+
| `color` | `ChartColor` | `"chart-1"` | `"chart-1"`〜`"chart-5"` か CSS カラー。地のリングは同じ色を淡くしたもの。 |
|
|
20
|
+
| `showAnimation` | `boolean` | `true` | マウント時と値の変化をアニメーションする。 |
|
|
21
|
+
| `children` | `ReactNode` | | 中央に置く内容(例: `72%`)。 |
|
|
22
|
+
| `className` | `string` | | 足すクラス。 |
|
|
23
|
+
|
|
24
|
+
残りの props は外側の `<div>` にそのまま渡ります。`role="progressbar"` と `aria-valuenow` が付きます。
|
|
25
|
+
|
|
26
|
+
## 値の書式は呼び出し側で
|
|
27
|
+
|
|
28
|
+
中央の表示は children そのものです。割合ではなく実数を見せたいときも、そのまま書いてください。
|
|
29
|
+
|
|
30
|
+
```tsx
|
|
31
|
+
<ProgressCircle value={3_400_000} max={5_000_000} radius={40} strokeWidth={8}>
|
|
32
|
+
<span className="text-xs">340万</span>
|
|
33
|
+
</ProgressCircle>
|
|
34
|
+
```
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# SampleData
|
|
2
|
+
|
|
3
|
+
> まだ実データにつながっていない「見本の値」に印を付ける。
|
|
4
|
+
|
|
5
|
+
下書きの段階で、クエリをつなぐ前に並べた値を囲みます。囲んだ中の `KpiCard` と `DashboardCardPreset` が、見出しに
|
|
6
|
+
**「見本の値」のバッジ**を出します。バッジは色だけでなく言葉で伝え、ツールチップで意味も説明します。実データを
|
|
7
|
+
つなぎ終えたら `SampleData` を外します。
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
import { SampleData, SampleBadge } from "@squadbase/vantage/components";
|
|
11
|
+
import type { SampleDataProps, SampleBadgeProps } from "@squadbase/vantage/components";
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## SampleData
|
|
15
|
+
|
|
16
|
+
| Prop | Type | Default | 説明 |
|
|
17
|
+
| --- | --- | --- | --- |
|
|
18
|
+
| `label` | `string` | `"見本の値"` | 印の文言。 |
|
|
19
|
+
| `children` | `ReactNode` | | 印を付けたい部品。 |
|
|
20
|
+
|
|
21
|
+
`SampleData` 自身は箱を持ちません(`display: contents`)。親の grid・subgrid から見ると中のカードが直接の子の
|
|
22
|
+
ままなので、`KpiCard` の行の区切りは揃ったままです。
|
|
23
|
+
|
|
24
|
+
カードは 1 枚につき印を 1 回だけ出します。`DashboardCardPreset` が見出しに出したら、その中のグラフや表は
|
|
25
|
+
重ねて出しません。素のグラフに印を付けたいときは `DashboardCardPreset` に入れてください。
|
|
26
|
+
|
|
27
|
+
## SampleBadge
|
|
28
|
+
|
|
29
|
+
バッジ単体です。`SampleData` の外で、見本であることを自分で示したいときに使います。`<span>` の属性もそのまま渡せます。
|
|
30
|
+
|
|
31
|
+
| Prop | Type | Default | 説明 |
|
|
32
|
+
| --- | --- | --- | --- |
|
|
33
|
+
| `label` | `string` | `"見本の値"` | 印の文言。 |
|
|
34
|
+
| `className` | `string` | | 足すクラス。 |
|
|
35
|
+
|
|
36
|
+
## SampleClaim と useSampleMark
|
|
37
|
+
|
|
38
|
+
自作のカード部品が `SampleData` に対応するための部品です。`useSampleMark()` は、いま印を出すべきなら
|
|
39
|
+
`{ label }`、なければ `null` を返します。印を出したカードは、中身を `<SampleClaim>` で包んで、内側の部品が
|
|
40
|
+
同じ印を繰り返さないようにします。
|
|
41
|
+
|
|
42
|
+
```tsx
|
|
43
|
+
import { SampleBadge, SampleClaim, useSampleMark } from "@squadbase/vantage/components";
|
|
44
|
+
|
|
45
|
+
function MyCard({ title, children }: { title: string; children: React.ReactNode }) {
|
|
46
|
+
const mark = useSampleMark();
|
|
47
|
+
return (
|
|
48
|
+
<section>
|
|
49
|
+
<h3>
|
|
50
|
+
{title} {mark && <SampleBadge label={mark.label} />}
|
|
51
|
+
</h3>
|
|
52
|
+
<SampleClaim>{children}</SampleClaim>
|
|
53
|
+
</section>
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
> [!NOTE]
|
|
59
|
+
> `SampleData` は「実データにまだつながっていない」ことを示します。速報値のように、実データだが確定前の値は
|
|
60
|
+
> `KpiCard` やグラフの `provisional` で示し、混ぜません。文中や見出しの中の値 1 つだけが仮なら
|
|
61
|
+
> [`Placeholder`](parts/placeholder) を使います。同じ値に両方は付けません。
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# ScatterChart
|
|
2
|
+
|
|
3
|
+
> 2 つの数値の関係と外れ値を見せる型付きの散布図。大きさを足せばバブルチャートになる。
|
|
4
|
+
|
|
5
|
+
広告費と売上、客単価と購入頻度のように、2 つの数値の関係を点の位置で見ます。**行の配列(`data`)と、
|
|
6
|
+
横軸・縦軸の列名(`x` / `y`)**を渡すだけで描けます。`size` でバブル、`series` で色分け(`--chart-1..5` を
|
|
7
|
+
固定順)、`labelKey` で点の名前の表示ができます。散布図は位置で読むので、軸は既定でデータの範囲に合わせ、
|
|
8
|
+
0 起点にしません。
|
|
9
|
+
|
|
10
|
+
```tsx
|
|
11
|
+
import { ScatterChart } from "@squadbase/vantage/components";
|
|
12
|
+
import type { ScatterChartProps, ScatterReferenceLine } from "@squadbase/vantage/components";
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
| Prop | Type | Default | 説明 |
|
|
16
|
+
| --- | --- | --- | --- |
|
|
17
|
+
| `data` | `Record<string, unknown>[]` | | 行の配列。**必須**。1 行が 1 点。x か y が数値でない行は描かない。 |
|
|
18
|
+
| `x` | `string` | | 横軸に使う数値の列名。**必須**。 |
|
|
19
|
+
| `y` | `string` | | 縦軸に使う数値の列名。**必須**。 |
|
|
20
|
+
| `size` | `string` | | 点の面積に使う数値の列名。渡すとバブルチャートになる。0 を基準に面積が比例し、null・0 以下は最小の大きさ。 |
|
|
21
|
+
| `index` | `string` | | 点の名前の列名。ツールチップの見出しとデータ表の先頭列になる。 |
|
|
22
|
+
| `labelKey` | `string` | | 点の脇に書く文字の列名。重なるラベルは自動で間引く(ツールチップには常に出る)。`index` が無ければ名前も兼ねる。 |
|
|
23
|
+
| `series` | `string` | | 系列分けの列名。値ごとに色を分け、凡例を出す。6 つ以上は点の多い 5 つ +「その他」(灰色)にまとまる。 |
|
|
24
|
+
| `seriesLabel` | `string` | | 凡例の見出し。系列があって凡例が出るときだけ、凡例の左に小さく書く。 |
|
|
25
|
+
| `highlight` | `string \| string[]` | | 前面に出す系列(`series` 列の値)。指定した系列は不透明で手前に、指定外は薄く背面に描く。 |
|
|
26
|
+
| `referenceLines` | `ScatterReferenceLine[]` | | 基準線(目標・平均・しきい値)。`{ axis: "x" \| "y", value, label? }`。中立色の破線で、軸の範囲が線まで広がる。 |
|
|
27
|
+
| `colors` | `ChartSeriesColor[] \| Record<string, ChartSeriesColor>` | `["chart-1", …, "chart-5"]` | 系列色。`"chart-1"`〜`"chart-5"` か意味色。配列は系列の出現順、record は系列名ごと。「その他」は常に灰色。 |
|
|
28
|
+
| `labels` | `Record<string, string>` | | 列名・系列の値 → 表示名(軸のタイトル・凡例・ツールチップ・データ表)。 |
|
|
29
|
+
| `format` | `ValueFormat` | `"compact"` | x・y・size の既定の書式。 |
|
|
30
|
+
| `xFormat` | `ValueFormat` | | 横軸と x の値の書式。`format` より優先。 |
|
|
31
|
+
| `yFormat` | `ValueFormat` | | 縦軸と y の値の書式。`format` より優先。 |
|
|
32
|
+
| `sizeFormat` | `ValueFormat` | | `size` の値の書式(ツールチップ・データ表)。 |
|
|
33
|
+
| `valueFormatter` | `(value: number) => string` | | 書式を関数で直接渡す逃げ道。x・y・size すべてに使われ、`format` 系より優先。 |
|
|
34
|
+
| `minValue` | `number` | | 縦軸の下限。データが下回れば広がる。 |
|
|
35
|
+
| `maxValue` | `number` | | 縦軸の上限。データが超えれば広がる。 |
|
|
36
|
+
| `xMinValue` | `number` | | 横軸の下限。 |
|
|
37
|
+
| `xMaxValue` | `number` | | 横軸の上限。並べて比べる散布図には同じ範囲を渡す。 |
|
|
38
|
+
| `fitToData` | `boolean` | `true` | 両軸をデータの範囲に合わせる。`false` で両軸を 0 から始める。 |
|
|
39
|
+
| `showLegend` | `boolean` | `true` | 凡例を出す(系列が 2 つ以上のときだけ)。 |
|
|
40
|
+
| `showTooltip` | `boolean` | `true` | ホバーでツールチップを出す。 |
|
|
41
|
+
| `summary` | `string \| "auto"` | | 1 文要約。`"auto"` で点の数と y が最大の点から組む。省略時は要約なし。 |
|
|
42
|
+
| `title` | `string` | | グラフの見出し。プロット領域の読み上げ名にもなる。 |
|
|
43
|
+
| `isLoading` | `boolean` | | 読み込み中。最終形と同じ高さのスケルトンを出す。 |
|
|
44
|
+
| `emptyState` | `{ title?: string; description?: string; action?: ReactNode }` | | `data` が空のときの表示。高さは保たれる。既定の題は「表示できるデータがありません」。 |
|
|
45
|
+
| `height` | `number` | `288` | プロット領域の高さ(px)。 |
|
|
46
|
+
| `chartOptions` | `EChartsOption` | | 生成した option に最後に深くマージする逃げ道。 |
|
|
47
|
+
| `actions` | `boolean \| { includeTitle?: boolean }` | `false` | 右上に PNG 保存 / コピーのボタンを出す(ホバー時)。見出しと要約は既定で画像に含まれ、`includeTitle: false` で外せる。 |
|
|
48
|
+
| `fileName` | `string` | `"chart.png"` | PNG 保存時のファイル名(拡張子つき)。 |
|
|
49
|
+
| `className` | `string` | | 外枠(`<figure>`)のクラス。幅はここで決める。 |
|
|
50
|
+
| `ariaLabel` | `string` | | 見出しが無いときのプロット領域の読み上げ名。 |
|
|
51
|
+
|
|
52
|
+
## 基準線と強調
|
|
53
|
+
|
|
54
|
+
目標や平均は `referenceLines` で引きます。数が多い点の中に埋もれる少数の系列は `highlight` で手前に出し、
|
|
55
|
+
残りを薄くします。
|
|
56
|
+
|
|
57
|
+
```tsx
|
|
58
|
+
<ScatterChart
|
|
59
|
+
data={rows}
|
|
60
|
+
x="spend"
|
|
61
|
+
y="roas"
|
|
62
|
+
series="channel"
|
|
63
|
+
highlight="SNS"
|
|
64
|
+
referenceLines={[{ axis: "y", value: 3, label: "目標 ROAS 3" }]}
|
|
65
|
+
/>
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
> [!NOTE]
|
|
69
|
+
> 幅が 480px 未満になると、ラベルは y が高い 2 点だけになり、凡例はプロットの下に移ります。
|
|
@@ -38,10 +38,10 @@ import type { SparklineDataPoint, SparklineVariant } from "@squadbase/vantage/co
|
|
|
38
38
|
|
|
39
39
|
## EChart との使い分け
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
軸・凡例・ツールチップ・複数系列が要るなら、まず型付きグラフ([`LineChart`](parts/line-chart)・[`AreaChart`](parts/area-chart)・[`BarChart`](parts/bar-chart))を使い、細かい制御が要るときだけ [`EChart`](parts/echart) を使います。
|
|
42
42
|
`Sparkline` が持つのは「値の並びの形」だけで、**目盛りも数値も出しません**。
|
|
43
43
|
|
|
44
44
|
> [!NOTE]
|
|
45
45
|
> `aria-hidden="true"` が付いているため、スクリーンリーダーには読まれません。実際の数値は
|
|
46
46
|
> [`MetricValue`](parts/metric-value) や
|
|
47
|
-
> [`
|
|
47
|
+
> [`Delta`](parts/delta) など、テキストとして隣に置いてください。
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Tracker
|
|
2
|
+
|
|
3
|
+
> 期間ごとの状態を小さなブロックの列で示す。稼働状況やバッチの結果に。
|
|
4
|
+
|
|
5
|
+
1 期間 = 1 ブロックで状態を色分けして並べます。日ごとの稼働状況・バッチの成否・日次目標の
|
|
6
|
+
達成 / 未達のような**連続した状態**に向きます。ブロックにホバーすると `tooltip` が出ます。
|
|
7
|
+
ECharts を使わない HTML で、配色はテーマに追従します。
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
import { Tracker } from "@squadbase/vantage/components";
|
|
11
|
+
import type { TrackerBlock, ChartColor } from "@squadbase/vantage/components";
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
| Prop | Type | Default | 説明 |
|
|
15
|
+
| --- | --- | --- | --- |
|
|
16
|
+
| `data` | `TrackerBlock[]` | | `{ color?: ChartColor; tooltip?: string; key?: string \| number }` の配列。**必須**。左から古い順。 |
|
|
17
|
+
| `defaultColor` | `ChartColor` | | `color` の無いブロックの色。既定は muted-foreground を淡くした灰色(データ無し・未実行に)。 |
|
|
18
|
+
| `hoverEffect` | `boolean` | `true` | ホバー中のブロックを薄くする。 |
|
|
19
|
+
| `className` | `string` | | 足すクラス。高さは既定 `h-8`。 |
|
|
20
|
+
|
|
21
|
+
残りの props は外側の `<div>` にそのまま渡ります。
|
|
22
|
+
|
|
23
|
+
## 状態に色を割り当てる
|
|
24
|
+
|
|
25
|
+
`color` はトークン名か CSS カラーです。失敗に `var(--destructive)` を使うと、テーマの
|
|
26
|
+
破壊的操作の色と揃います。
|
|
27
|
+
|
|
28
|
+
```tsx
|
|
29
|
+
const COLOR = { ok: "chart-2", warn: "chart-3", error: "var(--destructive)" } as const;
|
|
30
|
+
|
|
31
|
+
<Tracker data={days.map((d) => ({ color: COLOR[d.status], tooltip: `${d.date} ${d.label}` }))} />
|
|
32
|
+
```
|
|
@@ -1,6 +1,22 @@
|
|
|
1
1
|
# TrendIndicator
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> 非推奨。新規は Delta を使う。増減の矢印と変化率。
|
|
4
|
+
|
|
5
|
+
> [!WARNING]
|
|
6
|
+
> **非推奨です。新規のコードでは [`Delta`](parts/delta) を使ってください。**
|
|
7
|
+
> `TrendIndicator` は向き(`direction`)と色を手で渡すため、値と矢印が食い違うことがあります。`Delta` は今期と
|
|
8
|
+
> 比較相手の値から向き・率・色・ラベルを計算します。KPI をカードで見せるなら
|
|
9
|
+
> [`KpiCard`](parts/kpi-card) を使います。
|
|
10
|
+
|
|
11
|
+
```tsx
|
|
12
|
+
// 旧
|
|
13
|
+
<TrendIndicator value={12.4} direction="up" />
|
|
14
|
+
<TrendIndicator value={0.4} direction="down" positiveIsGood={false} />
|
|
15
|
+
|
|
16
|
+
// 新
|
|
17
|
+
<Delta value={1_240_000} comparison={{ previous: 1_103_000, vs: "prior-period" }} />
|
|
18
|
+
<Delta value={0.021} comparison={{ previous: 0.026, vs: "prior-period" }} polarity="lower-is-better" />
|
|
19
|
+
```
|
|
4
20
|
|
|
5
21
|
前期比などの変化を、矢印と変化率で示します。**「上がった=良い」とは限らない**ので、色は
|
|
6
22
|
`direction` と `positiveIsGood` の組み合わせで決まります — 解約率のように下がる方が良い指標では
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# UpdatedAt
|
|
2
|
+
|
|
3
|
+
> データの鮮度を示す更新時刻。相対時刻に、タイムゾーンつきの絶対時刻を添える。
|
|
4
|
+
|
|
5
|
+
「23 分前に更新」のような鮮度の表示です。`<time>` 要素で、`dateTime` に ISO 形式の時刻を持ち、ツールチップと
|
|
6
|
+
`title` に**タイムゾーンつきの絶対時刻**(「2026/10/20 16:41 JST」)が出ます。表示は 60 秒ごとに更新されます。
|
|
7
|
+
「今」が大事なページでは `variant="absolute-first"` で「16:41 更新(23 分前)」と併記します。
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
import { UpdatedAt } from "@squadbase/vantage/components";
|
|
11
|
+
import type { UpdatedAtProps } from "@squadbase/vantage/components";
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
| Prop | Type | Default | 説明 |
|
|
15
|
+
| --- | --- | --- | --- |
|
|
16
|
+
| `at` | `Date \| string \| number` | | データを最後に更新した時刻。**必須**。 |
|
|
17
|
+
| `variant` | `"relative" \| "absolute-first"` | `"relative"` | `relative` は「23 分前に更新」。`absolute-first` は「16:41 更新(23 分前)」で、今日でなければ日付も付く。 |
|
|
18
|
+
| `timeZone` | `string` | | 絶対時刻に使う IANA タイムゾーン(`"Asia/Tokyo"` など)。省略時は実行環境のもの。 |
|
|
19
|
+
| `prefix` | `string` | | ラベルの前に置く文字(`"売上データ: "`)。 |
|
|
20
|
+
| `now` | `Date \| number` | | 「現在時刻」を固定する(テスト・見本用)。渡すと 60 秒ごとの更新を止める。 |
|
|
21
|
+
| `className` | `string` | | 足すクラス。 |
|
|
22
|
+
|
|
23
|
+
1 分未満の差は「たった今」と出ます。
|
|
24
|
+
|
|
25
|
+
> [!NOTE]
|
|
26
|
+
> 最初の描画(サーバーとクライアント)は ISO の `dateTime` だけの空の `<time>` で、マウント後にラベルが入ります。
|
|
27
|
+
> 表示が閲覧者の時計とタイムゾーンに依存するためで、ハイドレーションの不一致は起きません。
|