@squadbase/vantage 0.6.2-stg.3a2ba98 → 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,133 @@
1
+ # スライド
2
+
3
+ > <name>.slide.tsx を置くとスライドデッキのページになる。1920×1080 のキャンバス、段階表示、トランジション、pptx 書き出し。
4
+
5
+ `<name>.slide.tsx` を置くと、そのページは**スライドデッキ**になります(`src/june.slide.tsx` →
6
+ `/june`)。分析の結論を誰かに伝えるときの形です。下のプレビューはクリックか `→` で送れます。
7
+
8
+ ## 置き方
9
+
10
+ 中身は `<SlideDeck>` を返す普通の React コンポーネントです。`<Slide>` 1 つが 1 枚になります。
11
+
12
+ ```tsx
13
+ // src/june.slide.tsx → /june
14
+ import { definePage } from "@squadbase/vantage";
15
+ import { Slide, SlideDeck, Step, Steps } from "@squadbase/vantage/slide";
16
+
17
+ export const page = definePage({ title: "6月度レビュー", navLabel: "6月度" });
18
+
19
+ export default function Deck() {
20
+ return (
21
+ <SlideDeck>
22
+ <Slide>
23
+ <h1 style={{ fontSize: 96 }}>売上は目標を 5% 上回った</h1>
24
+ </Slide>
25
+ <Slide>
26
+ <Steps>
27
+ <Step><p style={{ fontSize: 48 }}>1. 関東の既存顧客が +8%</p></Step>
28
+ <Step><p style={{ fontSize: 48 }}>2. 中部の新規開拓が立ち上がった</p></Step>
29
+ </Steps>
30
+ </Slide>
31
+ </SlideDeck>
32
+ );
33
+ }
34
+ ```
35
+
36
+ ## できること
37
+
38
+ - **画面サイズに合わせて縮小。** スライドは 1920×1080 の固定キャンバスに px で書き、表示先に
39
+ 合わせて拡大縮小されます。ノート PC でもプロジェクターでも同じ見た目です。
40
+ - **キーボードとクリックで送る。** `→` / `Space` / `PageDown` で次へ、`←` / `PageUp` で前へ、
41
+ `Home` / `End` で最初と最後へ。スライドの左右をクリックしても送れます。
42
+ - **段階表示。** `<Steps>` の中の `<Step>` は、次へ進むたびに 1 つずつ現れます。
43
+ - **トランジション。** `<Slide transition={…}>` で入り方を決めます。同じ `id` の
44
+ `<MorphElement>` を前後のスライドに置き `morph: true` にすると、その要素が連続して動きます。
45
+ - **3 つの見え方。** 左にスライド一覧(`L` で開閉)、スライドのみ、全画面(`F`)。一覧の開閉と
46
+ 今のページは URL(`?rail=` / `?p=`)に入るので、そのまま共有できます。`Esc` でデッキを抜けます。
47
+ - **PowerPoint に書き出す。** ツールバーのボタンで、全スライドを `.pptx` として保存します。
48
+ - **日本語の改行。** ルート `_layout.tsx` に `export const lang = "ja"` を書くと、見出しが文節の途中で折れず、ツールバーも日本語になります([アプリの表示言語](pages-and-metadata))。
49
+ - **テーマに追従。** 配色と書体は `--slide-*` トークンで、既定はアプリのトークンを指すので
50
+ ダークモードにも追従します。デッキごとに `theme` で上書きできます。
51
+
52
+ ダッシュボードの中に 16:9 の枠として埋め込むときは `<SlideDeck embedded>` にします
53
+ (既定は画面全体を覆い、アプリのナビはその下に残ります)。
54
+
55
+ ## 制限
56
+
57
+ - **pptx は画像で書き出されます。** 受け取り側にフォントが要らず日本語も崩れませんが、
58
+ PowerPoint で文字を検索・編集することはできません。
59
+ - **発表者ノートや発表者用ウィンドウはありません。**
60
+ - **スライドの中で `@squadbase/vantage/ui` を使わないでください。** UI キットはダッシュボード向けの
61
+ rem 単位なので、1920×1080 を縮小すると `text-sm` のボタンは実効 8px ほどになり読めません。
62
+ - iframe の中など、ブラウザが全画面を許さない場所では全画面ボタンが出ません。
63
+ - `.slide` を付けられるのはルートになる `.tsx` / `.jsx` だけです
64
+ ([ページにならないファイル](page-types))。
65
+
66
+ キャンバスの縦方向の予算・文字サイズの目安・pptx 書き出しが崩れる条件など、書き方の作法は同梱の
67
+ **`vantage-slide` スキル**にあります([エージェント Skill](agent-skills))。
68
+
69
+ ## API
70
+
71
+ ```tsx
72
+ import {
73
+ SlideDeck, Slide, Steps, Step, MorphElement,
74
+ useSlideNumber, useIsActiveSlide,
75
+ } from "@squadbase/vantage/slide";
76
+ ```
77
+
78
+ ### SlideDeck
79
+
80
+ デッキの器です。子に `<Slide>` を並べます。
81
+
82
+ | Prop | Type | Default | 説明 |
83
+ | --- | --- | --- | --- |
84
+ | `theme` | `SlideTheme` | | このデッキだけ配色・書体を上書きする。省いた項目はアプリのテーマに従う。 |
85
+ | `embedded` | `boolean` | `false` | 画面全体を覆わず、ページの流れの中に 16:9 で置く。 |
86
+ | `rail` | `boolean` | `!embedded` | スライド一覧を開いた状態で始めるか。読み手は `L` でいつでも切り替えられる。 |
87
+ | `exportName` | `string` | `URL の最後のセグメント` | 書き出す pptx のファイル名(拡張子なし)。 |
88
+
89
+ `SlideTheme` のキー: `bg`・`fg`・`accent`・`muted`・`fontDisplay`・`fontBody`(CSS の値)、
90
+ `sizeHero`・`sizeBody`・`radius`(キャンバス上の px)。
91
+
92
+ ### Slide
93
+
94
+ | Prop | Type | 説明 |
95
+ | --- | --- | --- |
96
+ | `transition` | `SlideTransition` | このスライドに入るときの動き。省くと切り替えは一瞬。 |
97
+
98
+ `SlideTransition` は `duration`(ms、必須)・`easing`・`enter` / `exit`(Web Animations の
99
+ `keyframes` を持つ)・`morph`(`true` か `{ duration, easing, delay }`)を持ちます。
100
+
101
+ ```tsx
102
+ <Slide
103
+ transition={{
104
+ duration: 500,
105
+ enter: { keyframes: [{ opacity: 0 }, { opacity: 1 }] },
106
+ morph: true,
107
+ }}
108
+ >
109
+ ```
110
+
111
+ ### Steps / Step
112
+
113
+ `<Steps>` の直下に置いた `<Step>` が、次へ進むたびに 1 つずつ現れます。前のスライドから戻ってきた
114
+ ときは、すべて出た状態で表示されます。
115
+
116
+ | Prop | Type | Default | 説明 |
117
+ | --- | --- | --- | --- |
118
+ | `duration` | `number` | `180` | `Step` に渡す。フェードインの長さ(ms)。 |
119
+
120
+ ### MorphElement
121
+
122
+ | Prop | Type | 説明 |
123
+ | --- | --- | --- |
124
+ | `id` | `string` | 前後のスライドで同じ値を付けた要素どうしが、連続して動く。 |
125
+ | `className` | `string` | 足すクラス。子が 1 つの HTML 要素ならそこへ、それ以外はラッパーの `<div>` へ付く。 |
126
+ | `style` | `CSSProperties` | `className` と同じ要素に足すスタイル。 |
127
+
128
+ ### フック
129
+
130
+ | 名前 | 返すもの |
131
+ |---|---|
132
+ | `useSlideNumber()` | `{ current, total }`。ページ番号のフッター用 |
133
+ | `useIsActiveSlide()` | 今見えているスライドかどうか。入場アニメーションを始める合図に使う |
@@ -0,0 +1,47 @@
1
+ # ページの種類
2
+
3
+ > 通常ページ・スライド・ドキュメント・CSV・Excel の 5 種類。それぞれの置き方とできること、ページにならないファイル。
4
+
5
+ Vantage のページは **5 種類**あります。どれもファイルを置くだけでページになり、URL の作り方は同じ
6
+ です([ファイルベースルーティング](routing))。違うのは「何が描かれるか」だけです。
7
+
8
+ | 種類 | 置き方 | できること |
9
+ |---|---|---|
10
+ | 通常ページ | `sales.tsx` | ダッシュボード。表・チャート・フィルタを自由に組む |
11
+ | [スライド](page-types/slide) | `june.slide.tsx` | 発表用のスライドデッキ。段階表示・トランジション・pptx 書き出し |
12
+ | [ドキュメント](page-types/doc) | `june-summary.doc.tsx` | 上から読む報告書。クラス無しで組版され、PDF として保存できる |
13
+ | [CSV](page-types/csv) | `sales-export.csv` | ファイルを置くだけで表として読める |
14
+ | [Excel](page-types/excel) | `june.xlsx` | CSV と同じ表ビューアに、シートの切り替えが付く |
15
+
16
+ - **`.slide` / `.doc` と拡張子は URL に出ません。** `june.slide.tsx`・`june.csv`・`june.tsx` は
17
+ どれも `/june` です。同じ URL に 2 つ置くと `vantage check` が `ROUTE_CONFLICT` エラーを出します。
18
+ - **ナビにも同格で並びます。** `vantage routes` と `useRoutes()` には 5 種類が区別なく出て、
19
+ `kind`(`"module"` / `"file"`)と `variant`(`"slide"` / `"doc"`)で見分けられます。
20
+ - 通常ページ・スライド・ドキュメントは React コンポーネントなので
21
+ [`definePage`](pages-and-metadata) が効きます。CSV と Excel はファイル名がタイトルになります。
22
+
23
+ どれにするか迷ったら、**繰り返し見に来る数字はダッシュボード、誰かに伝える結論はスライド、
24
+ 残しておく説明はドキュメント、受け取ったデータをそのまま見せたいなら CSV / Excel** です。
25
+
26
+ ## ページにならないファイル
27
+
28
+ ページ走査のルート(`src/` があればその中)に置いても、次のファイルはページになりません。
29
+
30
+ | ファイル | どうなるか |
31
+ |---|---|
32
+ | `.xls`・`.xlsm`・`.xlsb`・`.ods`・`.tsv`・`.numbers`・`.parquet` | ルートにならない。`vantage check` が `UNSUPPORTED_PAGE_FILE` 警告を出す |
33
+ | `.md`・`.json`・`.txt` など | 何も言わずに無視される(コードから読む用途があるため) |
34
+ | `_` で始まるファイル(`_draft.tsx`・`_june.xlsx`) | プライベート。`_layout` などの予約名を除き、ルートにならない |
35
+ | `~$june.xlsx` | Excel が開いている間に作るロックファイル。無視される |
36
+ | `components/`・`hooks/`・`lib/` の中のファイル | 走査されない(`server/`・`public/` も同じ) |
37
+
38
+ ビューアの無い表計算ファイルは、404 にすらならず**黙って消えます**。ナビにも `vantage routes` にも
39
+ 出ないので、`vantage check` の警告が唯一の手がかりです。`.xlsx` か `.csv` に変換して置き直すか、
40
+ `.tsx` のページから [`TableViewer`](page-types/excel) で描いてください。
41
+
42
+ Markdown(`.md`)はページになりません。Markdown を見せたいときは `.tsx` のページで
43
+ [`MarkdownRenderer`](markdown/markdown-renderer) に文字列を渡します。
44
+
45
+ > [!WARNING]
46
+ > `.slide` / `.doc` を付けられるのは**ルートになるページモジュール(`.tsx` / `.jsx`)だけ**です。
47
+ > `_layout.slide.tsx` や `deck.slide.ts`、`notes.doc.css` は `INVALID_PAGE_VARIANT` エラーになります。
@@ -60,6 +60,21 @@ export default function MonthlyAnalysis() {
60
60
  **ファイルをリネーム**するか、`_` を前置してルート化を止め、tsx から `FilePageView` で描いて
61
61
  そこに `definePage` を書きます。
62
62
 
63
+ ## アプリの表示言語
64
+
65
+ ルートの `_layout.tsx` で `lang` をリテラルでエクスポートすると、`<html lang>` に入ります。
66
+
67
+ ```tsx
68
+ // src/_layout.tsx
69
+ export const lang = "ja"
70
+ ```
71
+
72
+ - 値は BCP 47 の言語タグ(`"ja"` / `"en"` / `"ja-JP"` など)。変数やテンプレート補間は読まれません。
73
+ - 読まれるのはルートの `_layout.tsx` だけです。入れ子のレイアウトやページに書いても無視されます。
74
+ - 未指定、または形式が不正な値は `"en"` になります(診断で警告します)。何も書かないアプリの出力は従来どおりです。
75
+ - `ja` を指定すると、スライドと doc ページの日本語が文節の途中で折れなくなり(`word-break: auto-phrase`)、スライドのツールバーの文言も日本語になります。
76
+ - dev では `lang` を書き換えると自動で再読み込みされます。
77
+
63
78
  ## Fast Refresh との関係
64
79
 
65
80
  `page` のような非コンポーネントのエクスポートがあっても、Vantage はそれを内部で扱うため
@@ -0,0 +1,85 @@
1
+ # AreaChart
2
+
3
+ > 推移を面で見せる型付きグラフ。行・x 軸の列・系列の列を渡すだけ。
4
+
5
+ 時系列の推移を面で描きます。ECharts の option を組む代わりに、**行の配列(`data`)・x 軸の列名(`index`)・
6
+ 系列の列名(`categories`)**を渡すだけで、凡例・ツールチップ・軸の書式まで揃います。配色は
7
+ `--chart-1`〜`--chart-5` のトークンに追従し、ライト / ダークを切り替えても追いかけます。中身は
8
+ [`EChart`](parts/echart) です。
9
+
10
+ ```tsx
11
+ import { AreaChart } from "@squadbase/vantage/components";
12
+ import type { AreaChartProps, ChartSeriesColor, ChartEventPayload } from "@squadbase/vantage/components";
13
+ ```
14
+
15
+ | Prop | Type | Default | 説明 |
16
+ | --- | --- | --- | --- |
17
+ | `data` | `T[]` | | 行の配列。**必須**。1 行が x 軸の 1 点。数値の列は number か数値文字列(SQL の DECIMAL など)で、それ以外は欠損として扱う。 |
18
+ | `index` | `keyof T & string` | | x 軸に使う列名。**必須**。 |
19
+ | `categories` | `NumericKeys<T>[]` | | 系列として描く列名(数値の列だけ渡せる)。**必須**。この順が凡例と配色の順。6 つ以上は合計の大きい 5 つ +「その他」にまとめる。 |
20
+ | `colors` | `ChartSeriesColor[] \| Record<string, ChartSeriesColor>` | `トークン順` | 系列色。`"chart-1"`〜`"chart-5"`(ライト / ダークに追従)か意味色 `"positive"` / `"warning"` / `"negative"` / `"neutral"`。配列は系列の順、record は系列名ごと。CSS カラーは渡せない。 |
21
+ | `labels` | `Record<string, string>` | | `index` の値・系列名 → 表示名(軸・凡例・ツールチップ・データ表に反映)。例 `{ jan: "1 月", sales: "売上" }`。 |
22
+ | `format` | `ValueFormat` | `"compact"` | 数値の書式。`"compact"` / `"number"` / `"currency"` / `"percent"` / `"multiple"` / `"duration"`、または `{ type, digits, currency, notation, unit, divisor, durationUnit }`。軸は短縮、ツールチップも同じ書式。KPI 系の `format` と同じ値を渡せる。 |
23
+ | `valueFormatter` | `(value: number) => string` | | 書式を関数で直接渡す逃げ道。`format` より優先する。 |
24
+ | `areaOptions` | `AreaChartOptions` | | 面グラフ固有の設定。`{ type, curveType, fill, connectNulls }`(下の表)。 |
25
+ | `forecast` | `{ data: ChartForecastRow[]; category?: string; label?: string }` | | 予測。最初の系列(または `category`)の続きを点線と薄い帯で描く。`data` の行は実績と同じ `index` のキーに、`value`(と任意の `lower` / `upper`)を持つ。`label` の既定は「予測」。 |
26
+ | `comparison` | `{ category: string; vs: "prior-period" \| "prior-year" \| "target" \| "custom"; label?: string }` | | 比較系列。`categories` のうち 1 つを「前年」「計画」などの比較の線にする(細い灰色の実線)。ツールチップに主系列の差を添える。`vs: "custom"` では `label` が必須。 |
27
+ | `highlight` | `"auto" \| "none"` | | 最大値と最新値に値ラベルを付ける(最初の系列だけ・系列が 2 つ以下のときだけ)。既定は Line / Area が `"auto"`、Bar は `index` が日付・年月・年のときだけ `"auto"`。 |
28
+ | `provisionalFrom` | `string \| number` | | ここから先は確定前(速報)の点。`index` の値で渡す。薄い色・点線で描き、凡例とツールチップに `provisionalLabel` を出す。 |
29
+ | `provisionalLabel` | `string` | `"速報"` | 速報の呼び名(凡例・ツールチップ)。 |
30
+ | `target` | `number` | | 目標値。点線の水平線で示し、値軸は必ずこの値を含む。 |
31
+ | `targetLabel` | `string` | `「目標 <書式化した値>」` | 目標線のラベル。 |
32
+ | `annotations` | `ChartAnnotation[]` | | 任意の位置への注記。`{ at, label }` は縦線、`to` を足すと `at`〜`to` の区間の帯。`at` / `to` は `index` の値。横棒では描かない。 |
33
+ | `showLegend` | `boolean` | `true` | 凡例を出す。 |
34
+ | `showTooltip` | `boolean` | `true` | ホバーでツールチップを出す。 |
35
+ | `showGridLines` | `boolean` | `true` | 値軸の目盛り線。 |
36
+ | `showXAxis` | `boolean` | `true` | x 軸を出す。 |
37
+ | `showYAxis` | `boolean` | `true` | y 軸を出す。 |
38
+ | `startEndOnly` | `boolean` | `false` | x 軸のラベルを最初と最後だけにする。 |
39
+ | `yAxisWidth` | `number` | | y 軸ラベルの幅(px)。縦に並べた複数のグラフでプロット領域を揃えたいときに固定する。 |
40
+ | `minValue` | `number` | | 値軸の下限。常に 0 起点なので、0 以下の値だけ有効(負の値の下に余白を取る)。 |
41
+ | `maxValue` | `number` | | 値軸の上限(横棒は横軸)。データが上限を超えるときは軸を広げる。並べて比べる複数のグラフには同じ値を渡して軸をそろえる。 |
42
+ | `allowDecimals` | `boolean` | `true` | `false` で値軸の目盛りを整数に限る。 |
43
+ | `xAxisLabel` | `string` | | x 軸の名前。 |
44
+ | `yAxisLabel` | `string` | | y 軸の名前。 |
45
+ | `onValueChange` | `(value: ChartEventPayload) => void` | | 点(棒)のクリックで呼ばれる。クリックした行に `eventType` と `categoryClicked`(系列名)を足して渡し、同じ点をもう一度押すと `null`。渡すと選択以外が薄くなる。 |
46
+ | `title` | `string` | | グラフの見出し。 |
47
+ | `summary` | `string \| "auto"` | | グラフが言っていることの 1 文要約。見出しの下に出す。`"auto"` なら data から機械的に組む。向きの言い回しを手書きすると data とずれるので `"auto"` を使う。 |
48
+ | `isLoading` | `boolean` | | 読み込み中。最終形と同じ形・高さのスケルトンを出す。 |
49
+ | `emptyState` | `{ title?: string; description?: string; action?: ReactNode }` | | `data` が空のときの表示。高さは保たれる。`title` の既定は「表示できるデータがありません」。 |
50
+ | `height` | `number` | `288` | プロット領域の高さ(px)。文字列(CSS の長さ)は互換のために受けるだけで非推奨。 |
51
+ | `chartOptions` | `EChartsOption` | | 生成した ECharts の option に最後に深くマージする逃げ道。 |
52
+ | `actions` | `boolean \| { includeTitle?: boolean }` | `false` | 右上に PNG の保存 / コピーのボタンを出す(ホバー時)。`title` / `summary` は画像の上に含まれる。含めないなら `{ includeTitle: false }`。 |
53
+ | `fileName` | `string` | `"chart.png"` | PNG 保存時のファイル名(拡張子つき)。`actions` と使う。 |
54
+ | `ariaLabel` | `string` | | グラフの説明(スクリーンリーダー向け)。見出しがあればそちらが使われる。 |
55
+ | `className` | `string` | | 外側の `<figure>` に足すクラス。高さは `height` で決める。 |
56
+
57
+ ### areaOptions
58
+
59
+ | Prop | Type | Default | 説明 |
60
+ | --- | --- | --- | --- |
61
+ | `type` | `"default" \| "stacked" \| "percent"` | `"default"` | `"stacked"` は積み上げ、`"percent"` は各点の合計を 100% にした積み上げ(ツールチップは元の値)。 |
62
+ | `curveType` | `"linear" \| "smooth" \| "step"` | `"linear"` | 線の形。 |
63
+ | `fill` | `"gradient" \| "solid" \| "none"` | `"gradient"` | 面の塗り。 |
64
+ | `connectNulls` | `boolean` | `false` | 値の欠けた点(`null` など)をまたいで線をつなぐ。 |
65
+
66
+ > [!NOTE]
67
+ > `type` / `curveType` / `fill` / `connectNulls` をグラフの props に直接渡す書き方と、`autoMinValue`・`loading` は**非推奨**です(`areaOptions.*` と `isLoading` を使う。面グラフは常に 0 起点で `autoMinValue` は無視されます)。
68
+
69
+ > [!NOTE]
70
+ > `colors` は Tailwind のクラスではなく**テーマの色名**(`"chart-1"`〜`"chart-5"`、意味色)です。
71
+ > ライト / ダークに追従します。任意の CSS カラーは渡せません。軸・凡例・ツールチップの色はいつもテーマから入ります。
72
+
73
+ ## 構成比の推移を見る
74
+
75
+ `areaOptions={{ type: "percent" }}` にすると、各点の合計を 100% として積み上げます。値軸は 0〜100% に固定され、
76
+ ツールチップには**元の値**が `format` / `valueFormatter` の書式で出ます。
77
+
78
+ ```tsx
79
+ <AreaChart data={rows} index="month" categories={["オンライン", "店舗"]} areaOptions={{ type: "percent" }} />
80
+ ```
81
+
82
+ ## EChart との使い分け
83
+
84
+ まずこの型付きグラフで描き、二軸・散布図・ヒートマップ・注釈線など**この props で表せないもの
85
+ だけ** [`EChart`](parts/echart) に option を書いてください。
@@ -0,0 +1,95 @@
1
+ # BarChart
2
+
3
+ > 比較を棒で見せる型付きグラフ。横並び・積み上げ・横棒に切り替えられる。
4
+
5
+ カテゴリごとの値を棒で比べます。**行の配列(`data`)・カテゴリの列名(`index`)・系列の列名(`categories`)**
6
+ を渡すだけで描け、`barOptions.type` で横並び / 積み上げ / 100% 積み上げ、`barOptions.layout` で縦棒 / 横棒を切り替えます。
7
+ 配色はトークンに追従します。中身は [`EChart`](parts/echart) です。
8
+
9
+ ```tsx
10
+ import { BarChart } from "@squadbase/vantage/components";
11
+ import type { BarChartProps, 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
+ | `barOptions` | `BarChartOptions<T>` | | 棒グラフ固有の設定。`{ type, layout, barCategoryGap, showZeroValues, targetKey, highlight }`(下の表)。 |
24
+ | `thresholds` | `ChartThreshold[]` | | 棒を値で色分けする。`{ lt?, lte?, gt?, gte?, tone }` を上から順に見て、最初に当たった規則の意味色(`"positive"` / `"warning"` / `"negative"` / `"neutral"`)で塗る。積み上げでは無視。例 `[{ gt: 2, tone: "negative" }, { gt: 1.5, tone: "warning" }]` |
25
+ | `highlight` | `"auto" \| "none"` | | 最大値と最新値に値ラベルを付ける(最初の系列だけ・系列が 2 つ以下のときだけ)。既定は Line / Area が `"auto"`、Bar は `index` が日付・年月・年のときだけ `"auto"`。 |
26
+ | `provisionalFrom` | `string \| number` | | ここから先は確定前(速報)の点。`index` の値で渡す。薄い色・点線で描き、凡例とツールチップに `provisionalLabel` を出す。 |
27
+ | `provisionalLabel` | `string` | `"速報"` | 速報の呼び名(凡例・ツールチップ)。 |
28
+ | `target` | `number` | | 目標値。点線の水平線で示し、値軸は必ずこの値を含む。 |
29
+ | `targetLabel` | `string` | `「目標 <書式化した値>」` | 目標線のラベル。 |
30
+ | `annotations` | `ChartAnnotation[]` | | 任意の位置への注記。`{ at, label }` は縦線、`to` を足すと `at`〜`to` の区間の帯。`at` / `to` は `index` の値。横棒では描かない。 |
31
+ | `showLegend` | `boolean` | `true` | 凡例を出す。 |
32
+ | `showTooltip` | `boolean` | `true` | ホバーでツールチップを出す。 |
33
+ | `showGridLines` | `boolean` | `true` | 値軸の目盛り線。 |
34
+ | `showXAxis` | `boolean` | `true` | x 軸を出す。 |
35
+ | `showYAxis` | `boolean` | `true` | y 軸を出す。 |
36
+ | `startEndOnly` | `boolean` | `false` | x 軸のラベルを最初と最後だけにする。 |
37
+ | `yAxisWidth` | `number` | | y 軸ラベルの幅(px)。縦に並べた複数のグラフでプロット領域を揃えたいときに固定する。 |
38
+ | `minValue` | `number` | | 値軸の下限。常に 0 起点なので、0 以下の値だけ有効(負の値の下に余白を取る)。 |
39
+ | `maxValue` | `number` | | 値軸の上限(横棒は横軸)。データが上限を超えるときは軸を広げる。並べて比べる複数のグラフには同じ値を渡して軸をそろえる。 |
40
+ | `allowDecimals` | `boolean` | `true` | `false` で値軸の目盛りを整数に限る。 |
41
+ | `xAxisLabel` | `string` | | x 軸の名前。 |
42
+ | `yAxisLabel` | `string` | | y 軸の名前。 |
43
+ | `onValueChange` | `(value: ChartEventPayload) => void` | | 点(棒)のクリックで呼ばれる。クリックした行に `eventType` と `categoryClicked`(系列名)を足して渡し、同じ点をもう一度押すと `null`。渡すと選択以外が薄くなる。 |
44
+ | `title` | `string` | | グラフの見出し。 |
45
+ | `summary` | `string \| "auto"` | | グラフが言っていることの 1 文要約。見出しの下に出す。`"auto"` なら data から機械的に組む。向きの言い回しを手書きすると data とずれるので `"auto"` を使う。 |
46
+ | `isLoading` | `boolean` | | 読み込み中。最終形と同じ形・高さのスケルトンを出す。 |
47
+ | `emptyState` | `{ title?: string; description?: string; action?: ReactNode }` | | `data` が空のときの表示。高さは保たれる。`title` の既定は「表示できるデータがありません」。 |
48
+ | `height` | `number` | `288` | プロット領域の高さ(px)。文字列(CSS の長さ)は互換のために受けるだけで非推奨。 |
49
+ | `chartOptions` | `EChartsOption` | | 生成した ECharts の option に最後に深くマージする逃げ道。 |
50
+ | `actions` | `boolean \| { includeTitle?: boolean }` | `false` | 右上に PNG の保存 / コピーのボタンを出す(ホバー時)。`title` / `summary` は画像の上に含まれる。含めないなら `{ includeTitle: false }`。 |
51
+ | `fileName` | `string` | `"chart.png"` | PNG 保存時のファイル名(拡張子つき)。`actions` と使う。 |
52
+ | `ariaLabel` | `string` | | グラフの説明(スクリーンリーダー向け)。見出しがあればそちらが使われる。 |
53
+ | `className` | `string` | | 外側の `<figure>` に足すクラス。高さは `height` で決める。 |
54
+
55
+ ### barOptions
56
+
57
+ | Prop | Type | Default | 説明 |
58
+ | --- | --- | --- | --- |
59
+ | `type` | `"default" \| "stacked" \| "percent"` | `"default"` | `"default"` は横並び、`"stacked"` は積み上げ、`"percent"` は各カテゴリの合計を 100% にした積み上げ。 |
60
+ | `layout` | `"horizontal" \| "vertical"` | `"horizontal"` | `"vertical"` はカテゴリを縦に並べた**横棒**(先頭の行が一番上)。ラベルの長いランキング向け。1 系列の横棒は淡い色が既定。 |
61
+ | `barCategoryGap` | `string \| number` | | カテゴリ間の隙間(`"20%"` や px)。省略時は ECharts の既定。 |
62
+ | `showZeroValues` | `boolean` | `true` | 値が 0 の棒に「0」の値ラベルを付ける(積み上げでは付けない)。 |
63
+ | `targetKey` | `NumericKeys<T>` | | 棒ごとの目標値が入った `data` の列名。各棒に短い目標マーカーを引き、ツールチップに達成率を足す。1 系列と積み上げで使える。渡すとグラフ全体の `target` 線は描かない。 |
64
+ | `highlight` | `string \| number` | | 横棒(`layout: "vertical"`)の 1 系列で伝えたい 1 本。`index` の値で渡す(例 `"東京店"`)。この 1 本だけ濃い色になる。 |
65
+
66
+ > [!NOTE]
67
+ > `type` / `layout` / `barCategoryGap` をグラフの props に直接渡す書き方と、`autoMinValue`・`loading` は**非推奨**です(`barOptions.*` と `isLoading` を使う。棒グラフは常に 0 起点で `autoMinValue` は無視されます)。
68
+
69
+ > [!NOTE]
70
+ > `colors` は Tailwind のクラスではなく**テーマの色名**(`"chart-1"`〜`"chart-5"`、意味色)です。
71
+ > ライト / ダークに追従します。任意の CSS カラーは渡せません。軸・凡例・ツールチップの色はいつもテーマから入ります。
72
+
73
+ ## 横棒のランキング
74
+
75
+ ラベルが長いときは `barOptions={{ layout: "vertical" }}` で横棒にします。`yAxisWidth` でラベル幅を固定すると、
76
+ 長いラベルは省略されます。行の順に上から並ぶので、並べ替えは `data` 側で済ませてください。
77
+
78
+ ```tsx
79
+ <BarChart
80
+ data={stores}
81
+ index="store"
82
+ categories={["売上"]}
83
+ barOptions={{ layout: "vertical" }}
84
+ yAxisWidth={96}
85
+ showLegend={false}
86
+ />
87
+ ```
88
+
89
+ 数件のランキングを軸なしで並べるだけなら、[`BarList`](parts/bar-list) のほうが軽く、
90
+ カードにも収まります。
91
+
92
+ ## EChart との使い分け
93
+
94
+ まずこの型付きグラフで描き、二軸・散布図・ヒートマップ・注釈線など**この props で表せないもの
95
+ だけ** [`EChart`](parts/echart) に option を書いてください。
@@ -0,0 +1,58 @@
1
+ # BarList
2
+
3
+ > 名前と値を横棒で並べるランキング。軸なしで、カードに収まる軽さ。
4
+
5
+ 名前と値の組を、値に比例した淡い横棒で並べます。アクセスの多いページ・店舗別の売上・
6
+ エラーの種類別件数のような**上位 N 件**に向きます。ECharts を使わない HTML なので、カードの中に
7
+ いくつ置いても軽く、配色はテーマに追従します。
8
+
9
+ ```tsx
10
+ import { BarList } from "@squadbase/vantage/components";
11
+ import type { BarListItem, BarListOptions, ChartSeriesColor } from "@squadbase/vantage/components";
12
+ ```
13
+
14
+ | Prop | Type | Default | 説明 |
15
+ | --- | --- | --- | --- |
16
+ | `data` | `T[]` | | 行の配列。**必須**。`index` / `categories` を省くと `{ name, value, href?, key? }` の形として読む。 |
17
+ | `index` | `keyof T & string` | `"name"` | 行の名前に使う列名。 |
18
+ | `categories` | `(keyof T & string)[]` | `["value"]` | 値に使う列名を 1 つだけ入れた配列(`["売上"]`)。最初の 1 つだけを使う。 |
19
+ | `colors` | `ChartSeriesColor \| ChartSeriesColor[]` | `"chart-1"` | バーの色(`"chart-1"`〜`"chart-5"` か意味色、最初の 1 つだけを使う)。全行を同じ淡い色で塗り、順位はバーの長さで読む。 |
20
+ | `labels` | `Record<string, string>` | | 行の名前(`index` の値)→ 表示名。行のラベルとデータ表に反映。 |
21
+ | `thresholds` | `ChartThreshold[]` | | 行の値で意味色に塗り分ける(最初に当たった規則。どれにも当たらない行は通常色)。例 `[{ lt: 40, tone: "negative" }, { lt: 70, tone: "warning" }]` |
22
+ | `highlight` | `string` | | 伝えたい 1 行。`index` の値で渡す。この 1 行だけ濃い色になる。「その他」は選べない。 |
23
+ | `barListOptions` | `BarListOptions` | | BarList 固有の設定。`{ sortOrder, maxItems, otherLabel, exclude, showShare }`(下の表)。 |
24
+ | `format` | `ValueFormat` | `"compact"` | 値の書式。`"compact"` / `"number"` / `"currency"` / `"percent"` などか `{ type, digits, unit, … }`。KPI 系の `format` と同じ値を渡せる。 |
25
+ | `valueFormatter` | `(value: number) => string` | | 書式を関数で直接渡す逃げ道。`format` より優先する。 |
26
+ | `title` | `string` | | グラフの見出し。 |
27
+ | `summary` | `string` | | 1 文の要約。見出しの下に出す。 |
28
+ | `isLoading` | `boolean` | | 読み込み中。最終形と同じ形・高さのスケルトンを出す。 |
29
+ | `emptyState` | `{ title?: string; description?: string; action?: ReactNode }` | | `data` が空のときの表示。`title` の既定は「表示できるデータがありません」。 |
30
+ | `onValueChange` | `(item: T) => void` | | 渡すと行がボタンになり、クリックした行を受け取る(絞り込みの起点に)。「その他」の行は押せない。 |
31
+ | `ariaLabel` | `string` | | グラフの説明(スクリーンリーダー向け)。 |
32
+ | `className` | `string` | | 外側の `<figure>` に足すクラス。リストの高さは行数で決まる(`height` は持たない)。 |
33
+
34
+ ### barListOptions
35
+
36
+ | Prop | Type | Default | 説明 |
37
+ | --- | --- | --- | --- |
38
+ | `sortOrder` | `"descending" \| "ascending" \| "none"` | `"descending"` | 並べ順。`"none"` は渡した順。「その他」は常に最後。 |
39
+ | `maxItems` | `number` | `5` | 個別に出す行の数。超えた分は合計して「その他」の 1 行にまとめる。 |
40
+ | `otherLabel` | `string` | `"その他"` | まとめた行のラベル。 |
41
+ | `exclude` | `readonly string[]` | | 順位に入れず、常に「その他」へ足す行の名前。例 `["(not set)"]`。 |
42
+ | `showShare` | `boolean` | `false` | 値の横に構成比(全行の合計に対する割合。整数 %)を添える。例「¥8,240万 · 43%」。 |
43
+
44
+ > [!NOTE]
45
+ > 次の旧 props は**非推奨**です。`sortOrder` → `barListOptions.sortOrder`、`color` → `colors`、`formatValue` → `valueFormatter` か `format`、`showAnimation` は入場アニメーションを持たないため不要です。`BarListItem.color`(行ごとの色)も非推奨で、行ごとの色は持ちません。
46
+
47
+ 残りの props は外側の `<div>` にそのまま渡ります。
48
+
49
+ ## リンクにする
50
+
51
+ `href` を持つ行は名前がリンクになります。`http(s)://` で始まるものは新しいタブで開きます。
52
+
53
+ ```tsx
54
+ <BarList data={pages.map((p) => ({ name: p.path, value: p.views, href: p.url }))} />
55
+ ```
56
+
57
+ 棒の長さは**最大値に対する比**です。全体に対する割合を見せたいなら
58
+ [`CategoryBar`](parts/category-bar) か [`DonutChart`](parts/donut-chart) を使います。
@@ -0,0 +1,36 @@
1
+ # CategoryBar
2
+
3
+ > 1 本の棒を区間に色分けし、現在値をマーカーで示す。
4
+
5
+ 1 本の棒を `values` の比で色分けし、区切りに累計値を出します。`marker` を渡すと、その値の位置に
6
+ 目印が立ちます。スコアの判定帯(要改善 / 標準 / 良好)・予算の消化・構成比の 1 本表示に向きます。
7
+ ECharts を使わない HTML で、配色はテーマに追従します。
8
+
9
+ ```tsx
10
+ import { CategoryBar } from "@squadbase/vantage/components";
11
+ import type { CategoryBarMarker, ChartColor } from "@squadbase/vantage/components";
12
+ ```
13
+
14
+ | Prop | Type | Default | 説明 |
15
+ | --- | --- | --- | --- |
16
+ | `values` | `number[]` | | 各区間の幅(相対値)。**必須**。合計が 100 である必要はない。負の値は 0 扱い。 |
17
+ | `colors` | `ChartColor[]` | `["chart-1", …, "chart-5"]` | 区間の色(順に対応)。`"chart-1"`〜`"chart-5"` か CSS カラー。 |
18
+ | `marker` | `CategoryBarMarker` | | `{ value: number; tooltip?: string; showAnimation?: boolean }`。`value` は `values` の合計と同じ尺度。 |
19
+ | `showLabels` | `boolean` | `true` | 棒の上に区切りの累計値を出す。狭い区間のラベルは省く。 |
20
+ | `valueFormatter` | `(value: number) => string` | | 区切りの数値の書式。 |
21
+ | `className` | `string` | | 足すクラス。 |
22
+
23
+ 残りの props は外側の `<div>` にそのまま渡ります。
24
+
25
+ ## 判定帯に色を合わせる
26
+
27
+ `colors` は区間の順に対応します。「悪い → 良い」の帯なら、暖色から寒色へ並べると読みやすく
28
+ なります。マーカーの色は、乗っている区間の色になります。
29
+
30
+ ```tsx
31
+ <CategoryBar
32
+ values={[60, 20, 20]}
33
+ colors={["chart-5", "chart-3", "chart-2"]}
34
+ marker={{ value: 72, tooltip: "今月のスコア: 72" }}
35
+ />
36
+ ```
@@ -0,0 +1,36 @@
1
+ # ChartFrame
2
+
3
+ > 型付きグラフが共通で使う枠。見出し・要約・読み込み中・空の状態を、高さを保ったまま出す。
4
+
5
+ `LineChart` や `BarChart` などの型付きグラフが内部で使っている枠です。任意の見出しと 1 文の要約を、
6
+ **固定の高さのプロット領域**の上に置きます。プロット領域は見出しで名前が付き、要約で説明されるので、スクリーン
7
+ リーダーには「グラフがある」だけでなく「何を言っているか」が届きます。読み込み中は最終形と同じ形のスケルトン、
8
+ データが無いときは空の表示を、**どちらも高さを変えずに**出します。
9
+
10
+ 通常は型付きグラフの `title` / `summary` / `isLoading` / `emptyState` を使えば足ります。`ChartFrame` を直接使うのは、
11
+ 自前の HTML のグラフを同じ作法で包みたいときです。
12
+
13
+ ```tsx
14
+ import { ChartFrame } from "@squadbase/vantage/components";
15
+ import type { ChartFrameProps, ChartSkeletonVariant } from "@squadbase/vantage/components";
16
+ ```
17
+
18
+ | Prop | Type | Default | 説明 |
19
+ | --- | --- | --- | --- |
20
+ | `title` | `string` | | グラフの見出し。プロット領域の `aria-labelledby` になる。 |
21
+ | `summary` | `string` | | 1 文の要約。見出しの下に出し、プロット領域の `aria-describedby` になる。 |
22
+ | `isLoading` | `boolean` | `false` | 読み込み中。`variant` の形のスケルトンを同じ高さで出す。 |
23
+ | `isEmpty` | `boolean` | `false` | データが無い。高さを保ったまま `emptyState` を出す。 |
24
+ | `emptyState` | `{ title?: string; description?: string; action?: ReactNode }` | | 空のときの表示。題の既定は「表示できるデータがありません」。操作は 1 つだけ置ける。 |
25
+ | `height` | `number \| string` | `288` | プロット領域の高さ。数値は px。 |
26
+ | `variant` | `"line" \| "area" \| "bar" \| "donut" \| "list"` | `"line"` | スケルトンの形。包むグラフに合わせる。 |
27
+ | `ariaLabel` | `string` | | 見出しが無いときのプロット領域のラベル。 |
28
+ | `plotRole` | `"img" \| "group"` | `"img"` | プロット領域の役割。canvas のグラフは `img`。行がボタンやリンクになる HTML のグラフは `group` にして中身を読ませる。 |
29
+ | `dataTable` | `{ caption?: string; columns: string[]; rows: string[][] }` | | 値の表。画面には出さず(`sr-only`)、スクリーンリーダー向けに図の中に置く。先頭の列が行の見出し。 |
30
+ | `children` | `ReactNode` | | プロット本体。読み込み中・空のときは描かない。 |
31
+ | `className` | `string` | | 外枠(`<figure>`)のクラス。 |
32
+
33
+ `ref` はプロット領域(高さが決まっている要素)を指し、`className` とその他の属性は外側の `<figure>` に渡ります。
34
+
35
+ > [!NOTE]
36
+ > プロット領域は読み込み中・空・表示のどの状態でも同じ高さです。高さを揃えるための余白を自分で足さないでください。
@@ -55,6 +55,28 @@ import type { ColumnDef, SortingState, PaginationState } from "@squadbase/vantag
55
55
 
56
56
  `useDataTable()` を使うと、子コンポーネントから TanStack の `table` インスタンスを直接触れます。
57
57
 
58
+ ## 列の書式と CSV 書き出し
59
+
60
+ `cell` を書かない列は `meta.format` で数値を整形できます(右寄せ・tabular-nums、null は `meta.nullLabel`、既定 `—`)。行ごとに通貨が変わるときは関数で渡します。`DataTableExport` は画面と同じ並べ替え・絞り込み後の順で、BOM 付き UTF-8 の CSV を書き出します。`DataTablePreset` なら `exportable` だけで toolbar に置けます。
61
+
62
+ ```tsx
63
+ const columns: ColumnDef<Row>[] = [
64
+ { accessorKey: "month", header: "月" },
65
+ {
66
+ accessorKey: "revenue",
67
+ header: "売上",
68
+ meta: { format: (row) => ({ type: "currency", currency: row.currency, notation: "standard" }) },
69
+ },
70
+ ];
71
+
72
+ <DataTable columns={columns} data={rows}>
73
+ <DataTableToolbar toolbar={<DataTableExport fileName="sales.csv" />} />
74
+ <DataTableContent />
75
+ </DataTable>;
76
+ ```
77
+
78
+ `values="raw"` で生の値、`scope="page"` で表示中のページだけを書き出せます。サーバー側でページングするときは `rowCount`(総件数)・`manualSorting`・`manualFiltering`・`isLoading` も使えます。
79
+
58
80
  ## サーバー側でページングする
59
81
 
60
82
  `pagination` と `onPaginationChange` を自分で持ち、`pageCount` に総ページ数を渡します。
@@ -0,0 +1,51 @@
1
+ # Delta
2
+
3
+ > 比較相手に対する増減。矢印・符号付きの率・比較ラベルを値から導く。
4
+
5
+ 値の変化を「↑ +12.4% 前期比」の 1 行で示します。**向き・率・色・文言はすべて `value` と `comparison`
6
+ から計算**され、外から渡すことはできません — そのため矢印と色が食い違うことがありません。色だけに
7
+ 頼らず、矢印と符号が必ず付きます。解約率のように上がると悪い指標は `betterWhen="down"` を
8
+ 渡してください(古い名前の `polarity` も使えます)。
9
+
10
+ 非推奨の [`TrendIndicator`](parts/trend-indicator) の置き換えです。
11
+
12
+ ```tsx
13
+ import { Delta } from "@squadbase/vantage/components";
14
+ import type { DeltaProps, Comparison, Polarity } from "@squadbase/vantage/components";
15
+ ```
16
+
17
+ | Prop | Type | Default | 説明 |
18
+ | --- | --- | --- | --- |
19
+ | `value` | `number \| null \| undefined` | | 現在の値。**必須**。前の値は `comparison` から取る。 |
20
+ | `comparison` | `Comparison` | | 比較の相手。**必須**(増減に必ずラベルが付くように)。下の表を参照。 |
21
+ | `betterWhen` | `"up" \| "down"` | `"up"` | どちらに動くと良いか。解約率のように下がる方が良い指標は `"down"`。`polarity` より優先される。 |
22
+ | `polarity` | `"higher-is-better" \| "lower-is-better" \| "neutral"` | `"higher-is-better"` | 非推奨。`betterWhen` の古い名前。`"neutral"`(良し悪しの色をつけない)はこちらからだけ渡せる。 |
23
+ | `neutralBand` | `number` | `0.01` | 変化率の絶対値がこれ未満なら横ばい(–)として扱う。既定は 1%。 |
24
+ | `variant` | `"badge" \| "inline"` | `"badge"` | 枠付きのバッジか、文中に置く素の文字か。 |
25
+ | `locale` | `string` | `"ja-JP"` | 率の書式のロケール。 |
26
+ | `showLabel` | `boolean` | `true` | 率のあとに比較ラベル(「前期比」)を出すか。 |
27
+ | `className` | `string` | | 足すクラス。 |
28
+
29
+ ## Comparison
30
+
31
+ | Prop | Type | 説明 |
32
+ | --- | --- | --- |
33
+ | `previous` | `number \| null \| undefined` | 比較相手の値。`null` や `0` のときは率が出せないので「—」になる。 |
34
+ | `vs` | `"prior-period" \| "prior-year" \| "target"` | 比較の種類。ラベルは順に「前期比」「前年同期比」「目標比」。 |
35
+ | `label` | `string` | ラベルを差し替える(「先週比」など)。 |
36
+
37
+ ## TrendIndicator からの置き換え
38
+
39
+ ```tsx
40
+ // 旧: 向きと色を手で決めていた
41
+ <TrendIndicator value={12.4} direction="up" />
42
+
43
+ // 新: 今期と前期の値を渡すだけ
44
+ <Delta value={1_240_000} comparison={{ previous: 1_103_000, vs: "prior-period" }} />
45
+
46
+ // 下がる方が良い指標
47
+ <Delta value={0.021} comparison={{ previous: 0.026, vs: "prior-period" }} betterWhen="down" />
48
+ ```
49
+
50
+ 色は `--positive` / `--negative` / `--neutral` のトークンで決まります。KPI を 1 枚のカードで見せる
51
+ なら [`KpiCard`](parts/kpi-card) が中で `Delta` を使います。