@squadbase/vantage 0.6.2 → 0.7.0-dev1.19083f7

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.
Files changed (355) hide show
  1. package/dist/add-4GHF2TX2.js +6 -0
  2. package/dist/add-4GHF2TX2.js.map +1 -0
  3. package/dist/{build-O5TVNH4E.js → build-U7GO26HR.js} +9 -9
  4. package/dist/{build-O5TVNH4E.js.map → build-U7GO26HR.js.map} +1 -1
  5. package/dist/{check-WFBEDHDR.js → check-MRVAIHG5.js} +7 -7
  6. package/dist/{check-WFBEDHDR.js.map → check-MRVAIHG5.js.map} +1 -1
  7. package/dist/chunk-2IAPIOPS.js +152 -0
  8. package/dist/chunk-2IAPIOPS.js.map +1 -0
  9. package/dist/chunk-3RJEOP3J.js +174 -0
  10. package/dist/chunk-3RJEOP3J.js.map +1 -0
  11. package/dist/{chunk-QDZA5JSL.js → chunk-AABMKHEU.js} +4 -4
  12. package/dist/{chunk-QDZA5JSL.js.map → chunk-AABMKHEU.js.map} +1 -1
  13. package/dist/{chunk-PVTHHV7X.js → chunk-ANZLVSEP.js} +28 -7
  14. package/dist/chunk-ANZLVSEP.js.map +1 -0
  15. package/dist/chunk-CKWPK4RO.js +50 -0
  16. package/dist/chunk-CKWPK4RO.js.map +1 -0
  17. package/dist/chunk-EG4PX726.js +678 -0
  18. package/dist/chunk-EG4PX726.js.map +1 -0
  19. package/dist/{chunk-3G43C6OL.js → chunk-GNXCX4WE.js} +46 -3
  20. package/dist/chunk-GNXCX4WE.js.map +1 -0
  21. package/dist/chunk-NYQJ5UY4.js +9028 -0
  22. package/dist/chunk-NYQJ5UY4.js.map +1 -0
  23. package/dist/chunk-NZ5QIIG4.js +74 -0
  24. package/dist/chunk-NZ5QIIG4.js.map +1 -0
  25. package/dist/{chunk-BCE22JSM.js → chunk-PJ4SPXHS.js} +52 -16
  26. package/dist/chunk-PJ4SPXHS.js.map +1 -0
  27. package/dist/{chunk-RPZAALCX.js → chunk-QNOX7WLZ.js} +256 -165
  28. package/dist/chunk-QNOX7WLZ.js.map +1 -0
  29. package/dist/{chunk-ZVANIULZ.js → chunk-RNTDBX6S.js} +4 -4
  30. package/dist/{chunk-ZVANIULZ.js.map → chunk-RNTDBX6S.js.map} +1 -1
  31. package/dist/{chunk-PXRX5PEC.js → chunk-ROHNXP7J.js} +73 -4
  32. package/dist/chunk-ROHNXP7J.js.map +1 -0
  33. package/dist/chunk-S5MDTHH7.js +466 -0
  34. package/dist/chunk-S5MDTHH7.js.map +1 -0
  35. package/dist/chunk-SDJTTMLK.js +1877 -0
  36. package/dist/chunk-SDJTTMLK.js.map +1 -0
  37. package/dist/{chunk-EP6JHXSR.js → chunk-SHZM3EXB.js} +68 -12
  38. package/dist/chunk-SHZM3EXB.js.map +1 -0
  39. package/dist/chunk-TRMHNMMZ.js +61 -0
  40. package/dist/chunk-TRMHNMMZ.js.map +1 -0
  41. package/dist/{chunk-A2UUGASH.js → chunk-U736PVHY.js} +2 -2
  42. package/dist/chunk-U736PVHY.js.map +1 -0
  43. package/dist/{chunk-JGRMRXXZ.js → chunk-UWSQUHX6.js} +4 -99
  44. package/dist/chunk-UWSQUHX6.js.map +1 -0
  45. package/dist/cli.js +15 -11
  46. package/dist/cli.js.map +1 -1
  47. package/dist/client/index.d.ts +34 -3
  48. package/dist/client/index.js +211 -12
  49. package/dist/client/index.js.map +1 -1
  50. package/dist/components/index.d.ts +2113 -30
  51. package/dist/components/index.js +7 -4
  52. package/dist/delta-text-CbrOaW83.d.ts +17 -0
  53. package/dist/{dev-NZRLOQCL.js → dev-O42JFQ64.js} +24 -13
  54. package/dist/dev-O42JFQ64.js.map +1 -0
  55. package/dist/doc/index.d.ts +215 -2
  56. package/dist/doc/index.js +423 -5
  57. package/dist/doc/index.js.map +1 -1
  58. package/dist/{docs-ZGDJUHJI.js → docs-JVP4RPKT.js} +3 -3
  59. package/dist/{docs-ZGDJUHJI.js.map → docs-JVP4RPKT.js.map} +1 -1
  60. package/dist/{doctor-VFKEMR54.js → doctor-YD3XAAOT.js} +8 -8
  61. package/dist/doctor-YD3XAAOT.js.map +1 -0
  62. package/dist/format-DihQkL1N.d.ts +249 -0
  63. package/dist/geo-japan-7BMSOJRX.js +8 -0
  64. package/dist/geo-japan-7BMSOJRX.js.map +1 -0
  65. package/dist/geo-us-GVOG7VXH.js +8 -0
  66. package/dist/geo-us-GVOG7VXH.js.map +1 -0
  67. package/dist/geo-world-35HL56UU.js +8 -0
  68. package/dist/geo-world-35HL56UU.js.map +1 -0
  69. package/dist/markdown/index.js +1 -1
  70. package/dist/markdown/index.js.map +1 -1
  71. package/dist/{preview-QDCIVVSR.js → preview-T6CLSQVX.js} +12 -4
  72. package/dist/preview-T6CLSQVX.js.map +1 -0
  73. package/dist/query/index.d.ts +0 -11
  74. package/dist/query/index.js +2 -2
  75. package/dist/{routes-RHP5FVGD.js → routes-PVKNT777.js} +6 -6
  76. package/dist/{routes-RHP5FVGD.js.map → routes-PVKNT777.js.map} +1 -1
  77. package/dist/{search-RFBELGY7.js → search-5LC4XPB5.js} +3 -3
  78. package/dist/{search-RFBELGY7.js.map → search-5LC4XPB5.js.map} +1 -1
  79. package/dist/slide/index.d.ts +272 -1
  80. package/dist/slide/index.js +1086 -19
  81. package/dist/slide/index.js.map +1 -1
  82. package/dist/table/index.js +14 -10
  83. package/dist/table/index.js.map +1 -1
  84. package/dist/ui/index.d.ts +148 -12
  85. package/dist/ui/index.js +1340 -88
  86. package/dist/ui/index.js.map +1 -1
  87. package/dist/{upgrade-GF2P67M6.js → upgrade-6DT7ADRP.js} +7 -7
  88. package/dist/{upgrade-GF2P67M6.js.map → upgrade-6DT7ADRP.js.map} +1 -1
  89. package/dist/vite/index.d.ts +10 -0
  90. package/dist/vite/index.js +4 -4
  91. package/docs/en/agent-skills.md +1 -1
  92. package/docs/en/changelog.md +82 -0
  93. package/docs/en/cli-reference.md +30 -0
  94. package/docs/en/components.md +42 -17
  95. package/docs/en/doc/delta-text.md +40 -0
  96. package/docs/en/doc/doc-action-items.md +49 -0
  97. package/docs/en/doc/doc-callout.md +38 -0
  98. package/docs/en/doc/doc-data-table.md +60 -0
  99. package/docs/en/doc/doc-executive-summary.md +64 -0
  100. package/docs/en/doc/doc-figure.md +56 -0
  101. package/docs/en/doc/doc-key-findings.md +61 -0
  102. package/docs/en/doc/doc-kpi-scorecard.md +80 -0
  103. package/docs/en/doc/doc-notes-and-sources.md +43 -0
  104. package/docs/en/doc/doc-report-header.md +46 -0
  105. package/docs/en/pages-and-metadata.md +15 -0
  106. package/docs/en/parts/area-chart.md +99 -0
  107. package/docs/en/parts/bar-chart.md +91 -0
  108. package/docs/en/parts/bar-list.md +50 -0
  109. package/docs/en/parts/category-bar.md +37 -0
  110. package/docs/en/parts/chart-frame.md +39 -0
  111. package/docs/en/parts/data-table.md +22 -0
  112. package/docs/en/parts/delta.md +51 -0
  113. package/docs/en/parts/donut-chart.md +72 -0
  114. package/docs/en/parts/format.md +43 -0
  115. package/docs/en/parts/funnel-steps.md +2 -1
  116. package/docs/en/parts/heatmap.md +53 -0
  117. package/docs/en/parts/kpi-card.md +58 -0
  118. package/docs/en/parts/legend.md +35 -0
  119. package/docs/en/parts/line-chart.md +94 -0
  120. package/docs/en/parts/metric-value.md +3 -2
  121. package/docs/en/parts/page-shell.md +1 -1
  122. package/docs/en/parts/progress-circle.md +33 -0
  123. package/docs/en/parts/sample-data.md +39 -0
  124. package/docs/en/parts/scatter-chart.md +56 -0
  125. package/docs/en/parts/sparkline.md +1 -1
  126. package/docs/en/parts/tracker.md +36 -0
  127. package/docs/en/parts/trend-indicator.md +17 -1
  128. package/docs/en/parts/updated-at.md +30 -0
  129. package/docs/en/parts/waterfall-chart.md +56 -0
  130. package/docs/en/slide/slide-chart-full.md +48 -0
  131. package/docs/en/slide/slide-chart-insight.md +52 -0
  132. package/docs/en/slide/slide-columns.md +46 -0
  133. package/docs/en/slide/slide-comparison.md +68 -0
  134. package/docs/en/slide/slide-cover.md +39 -0
  135. package/docs/en/slide/slide-exec-summary.md +47 -0
  136. package/docs/en/slide/slide-heading.md +38 -0
  137. package/docs/en/slide/slide-kpi-grid.md +55 -0
  138. package/docs/en/slide/slide-kpi-hero.md +58 -0
  139. package/docs/en/slide/slide-next-actions.md +49 -0
  140. package/docs/en/slide/slide-scorecard-table.md +54 -0
  141. package/docs/en/slide/slide-section.md +44 -0
  142. package/docs/en/slide/slide-source-line.md +34 -0
  143. package/docs/en/ui/alert-dialog.md +42 -0
  144. package/docs/en/ui/avatar.md +31 -0
  145. package/docs/en/ui/combobox.md +74 -0
  146. package/docs/en/ui/drawer.md +41 -0
  147. package/docs/en/ui/empty.md +1 -1
  148. package/docs/en/ui/error-state.md +4 -3
  149. package/docs/en/ui/field.md +42 -0
  150. package/docs/en/ui/hover-card.md +21 -0
  151. package/docs/en/ui/kbd.md +17 -0
  152. package/docs/en/ui/loading.md +1 -1
  153. package/docs/en/ui/pagination.md +36 -0
  154. package/docs/en/ui/radio-group.md +21 -0
  155. package/docs/en/ui/toast.md +44 -0
  156. package/docs/en/ui/toggle-group.md +4 -3
  157. package/docs/en/ui-and-theming.md +1 -1
  158. package/docs/index.json +1184 -114
  159. package/docs/ja/agent-skills.md +1 -1
  160. package/docs/ja/changelog.md +84 -0
  161. package/docs/ja/cli-reference.md +29 -0
  162. package/docs/ja/components.md +68 -101
  163. package/docs/ja/doc/delta-text.md +40 -0
  164. package/docs/ja/doc/doc-action-items.md +49 -0
  165. package/docs/ja/doc/doc-callout.md +38 -0
  166. package/docs/ja/doc/doc-data-table.md +60 -0
  167. package/docs/ja/doc/doc-executive-summary.md +64 -0
  168. package/docs/ja/doc/doc-figure.md +56 -0
  169. package/docs/ja/doc/doc-key-findings.md +61 -0
  170. package/docs/ja/doc/doc-kpi-scorecard.md +80 -0
  171. package/docs/ja/doc/doc-notes-and-sources.md +43 -0
  172. package/docs/ja/doc/doc-report-header.md +46 -0
  173. package/docs/ja/page-types/csv.md +83 -0
  174. package/docs/ja/page-types/doc.md +83 -0
  175. package/docs/ja/page-types/excel.md +82 -0
  176. package/docs/ja/page-types/slide.md +133 -0
  177. package/docs/ja/page-types.md +47 -0
  178. package/docs/ja/pages-and-metadata.md +15 -0
  179. package/docs/ja/parts/area-chart.md +85 -0
  180. package/docs/ja/parts/bar-chart.md +95 -0
  181. package/docs/ja/parts/bar-list.md +58 -0
  182. package/docs/ja/parts/category-bar.md +36 -0
  183. package/docs/ja/parts/chart-frame.md +36 -0
  184. package/docs/ja/parts/data-table.md +22 -0
  185. package/docs/ja/parts/delta.md +51 -0
  186. package/docs/ja/parts/donut-chart.md +66 -0
  187. package/docs/ja/parts/echart.md +3 -0
  188. package/docs/ja/parts/format.md +44 -0
  189. package/docs/ja/parts/funnel-steps.md +27 -8
  190. package/docs/ja/parts/heatmap.md +45 -0
  191. package/docs/ja/parts/kpi-card.md +56 -0
  192. package/docs/ja/parts/legend.md +36 -0
  193. package/docs/ja/parts/line-chart.md +84 -0
  194. package/docs/ja/parts/metric-value.md +3 -2
  195. package/docs/ja/parts/page-shell.md +1 -1
  196. package/docs/ja/parts/progress-circle.md +34 -0
  197. package/docs/ja/parts/sample-data.md +61 -0
  198. package/docs/ja/parts/scatter-chart.md +69 -0
  199. package/docs/ja/parts/sparkline.md +2 -2
  200. package/docs/ja/parts/tracker.md +32 -0
  201. package/docs/ja/parts/trend-indicator.md +17 -1
  202. package/docs/ja/parts/updated-at.md +27 -0
  203. package/docs/ja/parts/waterfall-chart.md +61 -0
  204. package/docs/ja/routing.md +8 -86
  205. package/docs/ja/slide/slide-chart-full.md +48 -0
  206. package/docs/ja/slide/slide-chart-insight.md +52 -0
  207. package/docs/ja/slide/slide-columns.md +46 -0
  208. package/docs/ja/slide/slide-comparison.md +68 -0
  209. package/docs/ja/slide/slide-cover.md +39 -0
  210. package/docs/ja/slide/slide-exec-summary.md +47 -0
  211. package/docs/ja/slide/slide-heading.md +38 -0
  212. package/docs/ja/slide/slide-kpi-grid.md +55 -0
  213. package/docs/ja/slide/slide-kpi-hero.md +58 -0
  214. package/docs/ja/slide/slide-next-actions.md +49 -0
  215. package/docs/ja/slide/slide-scorecard-table.md +54 -0
  216. package/docs/ja/slide/slide-section.md +44 -0
  217. package/docs/ja/slide/slide-source-line.md +34 -0
  218. package/docs/ja/ui/alert-dialog.md +41 -0
  219. package/docs/ja/ui/avatar.md +31 -0
  220. package/docs/ja/ui/combobox.md +74 -0
  221. package/docs/ja/ui/drawer.md +41 -0
  222. package/docs/ja/ui/empty.md +1 -1
  223. package/docs/ja/ui/error-state.md +4 -3
  224. package/docs/ja/ui/field.md +42 -0
  225. package/docs/ja/ui/hover-card.md +21 -0
  226. package/docs/ja/ui/kbd.md +16 -0
  227. package/docs/ja/ui/loading.md +1 -1
  228. package/docs/ja/ui/pagination.md +36 -0
  229. package/docs/ja/ui/radio-group.md +21 -0
  230. package/docs/ja/ui/toast.md +46 -0
  231. package/docs/ja/ui/toggle-group.md +4 -3
  232. package/docs/ja/ui-and-theming.md +14 -7
  233. package/package.json +43 -29
  234. package/registry/ui/accordion.tsx +76 -0
  235. package/registry/ui/alert-dialog.tsx +189 -0
  236. package/registry/ui/alert.tsx +80 -0
  237. package/registry/ui/app-shell.tsx +424 -0
  238. package/registry/ui/area-chart.tsx +3960 -0
  239. package/registry/ui/attention-list.tsx +465 -0
  240. package/registry/ui/avatar.tsx +110 -0
  241. package/registry/ui/badge.tsx +56 -0
  242. package/registry/ui/bar-chart.tsx +3954 -0
  243. package/registry/ui/bar-list.tsx +3998 -0
  244. package/registry/ui/box-plot-chart.tsx +4214 -0
  245. package/registry/ui/breadcrumb.tsx +128 -0
  246. package/registry/ui/button.tsx +62 -0
  247. package/registry/ui/calendar.tsx +223 -0
  248. package/registry/ui/card.tsx +107 -0
  249. package/registry/ui/category-bar.tsx +1498 -0
  250. package/registry/ui/chart-frame.tsx +1604 -0
  251. package/registry/ui/checkbox.tsx +30 -0
  252. package/registry/ui/collapsible.tsx +23 -0
  253. package/registry/ui/combo-chart.tsx +1851 -0
  254. package/registry/ui/combobox.tsx +310 -0
  255. package/registry/ui/command.tsx +198 -0
  256. package/registry/ui/dashboard-card.tsx +217 -0
  257. package/registry/ui/data-table.tsx +896 -157
  258. package/registry/ui/date-range-picker.tsx +544 -0
  259. package/registry/ui/delta.tsx +350 -0
  260. package/registry/ui/dialog.tsx +161 -0
  261. package/registry/ui/donut-chart.tsx +4006 -0
  262. package/registry/ui/drawer.tsx +229 -0
  263. package/registry/ui/dropdown-menu.tsx +274 -0
  264. package/registry/ui/echart.tsx +1178 -0
  265. package/registry/ui/field.tsx +240 -0
  266. package/registry/ui/filter-bar.tsx +551 -0
  267. package/registry/ui/funnel-steps.tsx +3843 -0
  268. package/registry/ui/heatmap.tsx +2027 -0
  269. package/registry/ui/histogram-chart.tsx +4284 -0
  270. package/registry/ui/hover-card.tsx +52 -0
  271. package/registry/ui/input-group.tsx +160 -0
  272. package/registry/ui/input.tsx +24 -0
  273. package/registry/ui/kbd.tsx +30 -0
  274. package/registry/ui/kpi-card.tsx +905 -0
  275. package/registry/ui/label.tsx +22 -0
  276. package/registry/ui/legend.tsx +3817 -0
  277. package/registry/ui/line-chart.tsx +3958 -0
  278. package/registry/ui/metric-value.tsx +62 -0
  279. package/registry/ui/multi-select.tsx +382 -0
  280. package/registry/ui/page-shell.tsx +420 -0
  281. package/registry/ui/pagination.tsx +140 -0
  282. package/registry/ui/paired-chart.tsx +4086 -0
  283. package/registry/ui/pivot-table.tsx +1259 -0
  284. package/registry/ui/placeholder.tsx +36 -0
  285. package/registry/ui/popover.tsx +92 -0
  286. package/registry/ui/progress-circle.tsx +1033 -0
  287. package/registry/ui/progress.tsx +85 -0
  288. package/registry/ui/radio-group.tsx +39 -0
  289. package/registry/ui/sample-data.tsx +230 -0
  290. package/registry/ui/scatter-chart.tsx +4503 -0
  291. package/registry/ui/scroll-area.tsx +56 -0
  292. package/registry/ui/searchable-select.tsx +352 -0
  293. package/registry/ui/section-header.tsx +43 -0
  294. package/registry/ui/segmented-control.tsx +76 -0
  295. package/registry/ui/select.tsx +255 -0
  296. package/registry/ui/separator.tsx +27 -0
  297. package/registry/ui/sheet.tsx +139 -0
  298. package/registry/ui/sidebar.tsx +725 -0
  299. package/registry/ui/skeleton.tsx +17 -0
  300. package/registry/ui/slider.tsx +56 -0
  301. package/registry/ui/sparkline.tsx +230 -0
  302. package/registry/ui/spinner.tsx +14 -0
  303. package/registry/ui/states.tsx +247 -0
  304. package/registry/ui/status-badge.tsx +286 -0
  305. package/registry/ui/switch.tsx +34 -0
  306. package/registry/ui/table.tsx +118 -0
  307. package/registry/ui/tabs.tsx +84 -0
  308. package/registry/ui/textarea.tsx +22 -0
  309. package/registry/ui/toast.tsx +250 -0
  310. package/registry/ui/toggle-group.tsx +91 -0
  311. package/registry/ui/toggle.tsx +47 -0
  312. package/registry/ui/tooltip.tsx +72 -0
  313. package/registry/ui/tracker.tsx +1015 -0
  314. package/registry/ui/treemap.tsx +1916 -0
  315. package/registry/ui/trend-indicator.tsx +217 -0
  316. package/registry/ui/updated-at.tsx +276 -0
  317. package/registry/ui/waterfall-chart.tsx +4561 -0
  318. package/skills/vantage-add-feature/SKILL.md +14 -7
  319. package/skills/vantage-design/SKILL.md +62 -52
  320. package/skills/vantage-design/references/extract.md +26 -27
  321. package/skills/vantage-design/references/format.md +12 -172
  322. package/skills/vantage-design/references/presets.md +50 -110
  323. package/skills/vantage-pitfalls/SKILL.md +10 -1
  324. package/skills/vantage-slide/SKILL.md +71 -36
  325. package/templates/AGENTS.md +54 -16
  326. package/templates/agents/api.md +36 -0
  327. package/templates/agents/csv.md +2 -1
  328. package/templates/agents/doc.md +52 -3
  329. package/templates/agents/page.md +91 -10
  330. package/templates/agents/slide.md +90 -4
  331. package/templates/agents/xlsx.md +2 -1
  332. package/theme.css +247 -132
  333. package/dist/add-EISGSZAH.js +0 -6
  334. package/dist/add-EISGSZAH.js.map +0 -1
  335. package/dist/chunk-3G43C6OL.js.map +0 -1
  336. package/dist/chunk-5ZOP4SQR.js +0 -47
  337. package/dist/chunk-5ZOP4SQR.js.map +0 -1
  338. package/dist/chunk-A2UUGASH.js.map +0 -1
  339. package/dist/chunk-BCE22JSM.js.map +0 -1
  340. package/dist/chunk-DTDVSFRY.js +0 -29
  341. package/dist/chunk-DTDVSFRY.js.map +0 -1
  342. package/dist/chunk-EP6JHXSR.js.map +0 -1
  343. package/dist/chunk-JGRMRXXZ.js.map +0 -1
  344. package/dist/chunk-KLEIVDUV.js +0 -165
  345. package/dist/chunk-KLEIVDUV.js.map +0 -1
  346. package/dist/chunk-LSRMRIXA.js +0 -2227
  347. package/dist/chunk-LSRMRIXA.js.map +0 -1
  348. package/dist/chunk-PVTHHV7X.js.map +0 -1
  349. package/dist/chunk-PXRX5PEC.js.map +0 -1
  350. package/dist/chunk-RPZAALCX.js.map +0 -1
  351. package/dist/chunk-T3FLAGI6.js +0 -316
  352. package/dist/chunk-T3FLAGI6.js.map +0 -1
  353. package/dist/dev-NZRLOQCL.js.map +0 -1
  354. package/dist/doctor-VFKEMR54.js.map +0 -1
  355. package/dist/preview-QDCIVVSR.js.map +0 -1
@@ -0,0 +1,66 @@
1
+ # DonutChart
2
+
3
+ > 構成比を見せる型付きのドーナツ / 円グラフ。中央に合計を出す。
4
+
5
+ 構成比をドーナツ(または円)で描きます。**行の配列(`data`)・名前の列(`index`)・値の列(`categories`)**
6
+ を渡すだけで描けます。ドーナツの穴には `donutOptions.centerLabel` で合計や最大の切片を出せます。中央のラベルはキャンバスではなく
7
+ HTML なので、ページの文字色・書体のまま表示されます。配色はトークンに追従します。
8
+
9
+ ```tsx
10
+ import { DonutChart } from "@squadbase/vantage/components";
11
+ import type { DonutChartProps, DonutChartOptions, ChartSeriesColor, ChartEventPayload } from "@squadbase/vantage/components";
12
+ ```
13
+
14
+ | Prop | Type | Default | 説明 |
15
+ | --- | --- | --- | --- |
16
+ | `data` | `T[]` | | 行の配列。**必須**。1 行が 1 切片。 |
17
+ | `index` | `keyof T & string` | | 切片の名前に使う列名。 |
18
+ | `categories` | `(keyof T & string)[]` | | 切片の大きさに使う列名を 1 つだけ入れた配列(`["売上"]`)。最初の 1 つだけを使う。number か数値文字列。0 以下と欠損は 0 扱い。 |
19
+ | `colors` | `ChartSeriesColor[]` | `トークン順` | 切片の色(大きい順)。`"chart-1"`〜`"chart-5"` か意味色。「その他」は常に灰色。 |
20
+ | `labels` | `Record<string, string>` | | 切片の名前(`index` の値)→ 表示名。凡例・ツールチップ・データ表に反映。 |
21
+ | `donutOptions` | `DonutChartOptions` | | ドーナツ固有の設定。`{ variant, centerLabel, totalLabel, unit, showLegend, maxSlices }`(下の表)。 |
22
+ | `format` | `ValueFormat` | `"compact"` | 値の書式。`"compact"` / `"number"` / `"currency"` / `"percent"` などか `{ type, digits, unit, … }`。KPI 系の `format` と同じ値を渡せる。 |
23
+ | `valueFormatter` | `(value: number) => string` | | 書式を関数で直接渡す逃げ道。`format` より優先する。 |
24
+ | `title` | `string` | | グラフの見出し。 |
25
+ | `summary` | `string \| "auto"` | | 1 文の要約。`"auto"` なら slices から「最大は <名前>(<構成比>)」を組む。順位や構成比を文に書くなら `"auto"` を使う。 |
26
+ | `isLoading` | `boolean` | | 読み込み中。同じ形・高さのスケルトンを出す。 |
27
+ | `emptyState` | `{ title?: string; description?: string; action?: ReactNode }` | | `data` が空のときの表示。高さは保たれる。 |
28
+ | `height` | `number` | `288` | プロット領域の高さ(px)。文字列は互換のために受けるだけで非推奨。 |
29
+ | `chartOptions` | `EChartsOption` | | 生成した ECharts の option に最後に深くマージする逃げ道。 |
30
+ | `actions` | `boolean \| { includeTitle?: boolean }` | `false` | 右上に PNG の保存 / コピーのボタンを出す(ホバー時)。 |
31
+ | `fileName` | `string` | `"chart.png"` | PNG 保存時のファイル名(拡張子つき)。 |
32
+ | `showTooltip` | `boolean` | `true` | ホバーで名前・値・構成比を出す。 |
33
+ | `onValueChange` | `(value: ChartEventPayload) => void` | | 切片のクリックで呼ばれる。行に `eventType: "slice"` と `categoryClicked`(切片名)を足して渡し、同じ切片をもう一度押すと `null`。 |
34
+ | `ariaLabel` | `string` | | チャートの説明(スクリーンリーダー向け)。 |
35
+ | `className` | `string` | | 外側の `<figure>` に足すクラス。大きさは `height`(既定 288px)で決める。幅は親に合わせて広がる。 |
36
+
37
+ ### donutOptions
38
+
39
+ | Prop | Type | Default | 説明 |
40
+ | --- | --- | --- | --- |
41
+ | `variant` | `"donut" \| "pie"` | `"donut"` | 穴あきか、円か。 |
42
+ | `centerLabel` | `"none" \| "total" \| "top" \| ReactNode` | `"none"` | 穴の中央に出すもの。`"total"` は合計、`"top"` は最大の切片の名前と構成比。ノードを渡すとそのまま置く。donut のみ。合計は KPI と重複しがちなので既定は出さない。 |
43
+ | `totalLabel` | `string` | `"合計"` | `"total"` の見出し。 |
44
+ | `unit` | `string` | | `"total"` の合計に添える単位(`"セッション"`)。 |
45
+ | `showLegend` | `boolean` | `true` | 凡例(名前と構成比、大きい順)を出す。広いときは右、狭いときは下。消すと、広いときだけ大きい 2 切片に外ラベルが出る。 |
46
+ | `maxSlices` | `number` | `5` | 個別に描く切片の数。超えた分は「その他」1 切片にまとめる。 |
47
+
48
+ > [!NOTE]
49
+ > 旧 props は**非推奨**です。`category` → `index`、`value` → `categories={[value]}`、`variant` → `donutOptions.variant`、`label` / `showLabel` → `donutOptions.centerLabel`、`loading` → `isLoading`。
50
+
51
+ ## 凡例と中央のラベル
52
+
53
+ 名前と構成比を並べた凡例が付きます(広いときは右、狭いときは下)。消すには
54
+ `donutOptions={{ showLegend: false }}`。穴の中央には `centerLabel` で合計や最大の切片を出せます。
55
+
56
+ ```tsx
57
+ <DonutChart
58
+ data={rows}
59
+ index="channel"
60
+ categories={["sessions"]}
61
+ donutOptions={{ centerLabel: "total", unit: "セッション" }}
62
+ />
63
+ ```
64
+
65
+ > [!NOTE]
66
+ > 切片が 5 つを超えると、小さい切片は「その他」にまとまります(`donutOptions.maxSlices` で変えられます)。
@@ -7,6 +7,9 @@ Apache ECharts をそのまま使えるようにした薄いラッパーです
7
7
  系列色は `--chart-1` 〜 `--chart-5`、軸・凡例・ツールチップは文字色と境界色のトークンから組まれ、
8
8
  ライト / ダークの切り替えにも追いかけます。
9
9
 
10
+ > [!TIP]
11
+ > まず型付きグラフ([`AreaChart`](parts/area-chart)・[`BarChart`](parts/bar-chart)・[`LineChart`](parts/line-chart)・[`DonutChart`](parts/donut-chart))を使い、二軸・散布図・ヒートマップなど細かい制御が要るときだけ `EChart` に option を書いてください。
12
+
10
13
  ```tsx
11
14
  import { EChart } from "@squadbase/vantage/components";
12
15
  import type { EChartsOption } from "@squadbase/vantage/components";
@@ -0,0 +1,44 @@
1
+ # format / comparison
2
+
3
+ > KPI・表・グラフで共有する数値の書式(formatValue)と、増減の計算(computeComparison)。
4
+
5
+ `KpiCard` / `Delta` が内部で使っている数値の書式と比較の計算を、そのまま関数として使えます。表の
6
+ セルやグラフの `valueFormatter` を KPI と同じ書式に揃えたいときに使ってください。短縮(「4.8億」
7
+ など)は `Intl.NumberFormat` に任せており、単位の文字列を自前で持ちません。
8
+
9
+ ```tsx
10
+ import {
11
+ formatValue,
12
+ formatDelta,
13
+ toValueFormatter,
14
+ computeComparison,
15
+ } from "@squadbase/vantage/components";
16
+ import type { ValueFormat, Comparison, ComparisonResult } from "@squadbase/vantage/components";
17
+ ```
18
+
19
+ ## ValueFormat
20
+
21
+ `"number" | "compact" | "currency" | "percent" | "multiple"` のどれか、または
22
+ `{ type, digits?, currency? }`。既定は `"compact"`、通貨の既定は `JPY`、ロケールの既定は `"ja-JP"`。
23
+ `percent` は比率(`0.124` → 12.4%)を受け取ります。値が `null` / `undefined` / `NaN` のときは「—」を
24
+ 返します。
25
+
26
+ | Prop | Type | 説明 |
27
+ | --- | --- | --- |
28
+ | `formatValue(value, format?, locale?)` | `string` | 値を書式化する。 |
29
+ | `formatDelta(value, format?, locale?)` | `string` | 差分用。0 以外は常に符号が付く(`+12.4%`)。 |
30
+ | `toValueFormatter(format?, locale?)` | `(value) => string` | 書式とロケールを束ねた 1 引数の関数。グラフの `valueFormatter` に渡せる。 |
31
+
32
+ ```tsx
33
+ formatValue(48_200_000, "currency"); // "¥48,200,000"
34
+ formatValue(0.021, { type: "percent", digits: 1 }); // "2.1%"
35
+ <LineChart valueFormatter={toValueFormatter("compact")} … />
36
+ ```
37
+
38
+ ## computeComparison
39
+
40
+ `computeComparison(current, comparison, { polarity?, neutralBand? })` が
41
+ `{ current, previous, difference, ratio, direction, sentiment, label, vs }` を返します。率は前の値が
42
+ 0 でない数のときだけ出し、`neutralBand`(既定 0.01)未満の変化は `direction: "flat"` になります。
43
+ `sentiment`(`"positive" | "negative" | "neutral"`)は `polarity` で決まります。表示は
44
+ [`Delta`](parts/delta) に任せ、自前で矢印や色を組まないでください。
@@ -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` | `FunnelStep[]` | | 各段。**先頭が最大幅**になる。 |
16
- | `showConversion` | `boolean` | | 段の間に転換率を出す。 |
17
- | `formatValue` | `(value: number) => string` | | 値の書式。既定はそのまま。 |
18
- | `animate` | `boolean` | | マウント時に幅を伸ばすアニメーション。 |
19
- | `size` | `"sm" \| "md" \| "lg"` | `"md"` | |
20
- | `direction` | `"vertical" \| "horizontal"` | `"vertical"` | |
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 の数値を大きく見せるための、字送りを詰めた表示です。単位や補助的な文字は `MetricUnit` で
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
- <TrendIndicator value={12.4} direction="up" />
24
+ <Delta value={1_240_000} comparison={{ previous: 1_103_000, vs: "prior-period" }} />
24
25
  </DashboardCardPreset>
25
26
  ```
@@ -27,7 +27,7 @@ import {
27
27
  | パーツ | 役割 |
28
28
  | --- | --- |
29
29
  | `PageShell` | 全体の縦積み |
30
- | `PageShellHeader` | 下線付きのヘッダー帯。左に見出し、右に `HeaderEnd` の 2 列 |
30
+ | `PageShellHeader` | 下線付きのヘッダー帯。左に見出し、右に `HeaderEnd`。幅が足りないと `HeaderEnd` は見出しの下へ回り込む |
31
31
  | `PageShellHeading` / `PageShellTitle` / `PageShellDescription` | 見出しブロック |
32
32
  | `PageShellHeaderEnd` | 右端の縦積み |
33
33
  | `PageShellMeta` | 「最終更新 10 分前」のような補足 |
@@ -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
- 軸・凡例・ツールチップ・複数系列が要るなら [`EChart`](parts/echart) を使います。
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
- > [`TrendIndicator`](parts/trend-indicator) など、テキストとして隣に置いてください。
47
+ > [`Delta`](parts/delta) など、テキストとして隣に置いてください。