@squadbase/vantage 0.6.2-stg.3a2ba98 → 0.7.0-dev1.275b4ed

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 (346) 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-77CISBMG.js +7581 -0
  12. package/dist/chunk-77CISBMG.js.map +1 -0
  13. package/dist/{chunk-QDZA5JSL.js → chunk-AABMKHEU.js} +4 -4
  14. package/dist/{chunk-QDZA5JSL.js.map → chunk-AABMKHEU.js.map} +1 -1
  15. package/dist/{chunk-PVTHHV7X.js → chunk-ANZLVSEP.js} +28 -7
  16. package/dist/chunk-ANZLVSEP.js.map +1 -0
  17. package/dist/chunk-CKWPK4RO.js +50 -0
  18. package/dist/chunk-CKWPK4RO.js.map +1 -0
  19. package/dist/chunk-EG4PX726.js +678 -0
  20. package/dist/chunk-EG4PX726.js.map +1 -0
  21. package/dist/{chunk-3G43C6OL.js → chunk-GNXCX4WE.js} +46 -3
  22. package/dist/chunk-GNXCX4WE.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 +1768 -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/markdown/index.js +1 -1
  64. package/dist/markdown/index.js.map +1 -1
  65. package/dist/{preview-QDCIVVSR.js → preview-T6CLSQVX.js} +12 -4
  66. package/dist/preview-T6CLSQVX.js.map +1 -0
  67. package/dist/query/index.d.ts +0 -11
  68. package/dist/query/index.js +2 -2
  69. package/dist/{routes-RHP5FVGD.js → routes-PVKNT777.js} +6 -6
  70. package/dist/{routes-RHP5FVGD.js.map → routes-PVKNT777.js.map} +1 -1
  71. package/dist/{search-RFBELGY7.js → search-5LC4XPB5.js} +3 -3
  72. package/dist/{search-RFBELGY7.js.map → search-5LC4XPB5.js.map} +1 -1
  73. package/dist/slide/index.d.ts +272 -1
  74. package/dist/slide/index.js +1086 -19
  75. package/dist/slide/index.js.map +1 -1
  76. package/dist/table/index.js +14 -10
  77. package/dist/table/index.js.map +1 -1
  78. package/dist/ui/index.d.ts +148 -12
  79. package/dist/ui/index.js +1340 -88
  80. package/dist/ui/index.js.map +1 -1
  81. package/dist/{upgrade-GF2P67M6.js → upgrade-6DT7ADRP.js} +7 -7
  82. package/dist/{upgrade-GF2P67M6.js.map → upgrade-6DT7ADRP.js.map} +1 -1
  83. package/dist/vite/index.d.ts +10 -0
  84. package/dist/vite/index.js +4 -4
  85. package/docs/en/agent-skills.md +1 -1
  86. package/docs/en/changelog.md +82 -0
  87. package/docs/en/cli-reference.md +30 -0
  88. package/docs/en/components.md +42 -17
  89. package/docs/en/doc/delta-text.md +40 -0
  90. package/docs/en/doc/doc-action-items.md +49 -0
  91. package/docs/en/doc/doc-callout.md +38 -0
  92. package/docs/en/doc/doc-data-table.md +60 -0
  93. package/docs/en/doc/doc-executive-summary.md +64 -0
  94. package/docs/en/doc/doc-figure.md +56 -0
  95. package/docs/en/doc/doc-key-findings.md +61 -0
  96. package/docs/en/doc/doc-kpi-scorecard.md +80 -0
  97. package/docs/en/doc/doc-notes-and-sources.md +43 -0
  98. package/docs/en/doc/doc-report-header.md +46 -0
  99. package/docs/en/pages-and-metadata.md +15 -0
  100. package/docs/en/parts/area-chart.md +99 -0
  101. package/docs/en/parts/bar-chart.md +91 -0
  102. package/docs/en/parts/bar-list.md +50 -0
  103. package/docs/en/parts/category-bar.md +37 -0
  104. package/docs/en/parts/chart-frame.md +39 -0
  105. package/docs/en/parts/data-table.md +22 -0
  106. package/docs/en/parts/delta.md +51 -0
  107. package/docs/en/parts/donut-chart.md +72 -0
  108. package/docs/en/parts/format.md +43 -0
  109. package/docs/en/parts/funnel-steps.md +2 -1
  110. package/docs/en/parts/heatmap.md +53 -0
  111. package/docs/en/parts/kpi-card.md +58 -0
  112. package/docs/en/parts/legend.md +35 -0
  113. package/docs/en/parts/line-chart.md +94 -0
  114. package/docs/en/parts/metric-value.md +3 -2
  115. package/docs/en/parts/page-shell.md +1 -1
  116. package/docs/en/parts/progress-circle.md +33 -0
  117. package/docs/en/parts/sample-data.md +39 -0
  118. package/docs/en/parts/scatter-chart.md +56 -0
  119. package/docs/en/parts/sparkline.md +1 -1
  120. package/docs/en/parts/tracker.md +36 -0
  121. package/docs/en/parts/trend-indicator.md +17 -1
  122. package/docs/en/parts/updated-at.md +30 -0
  123. package/docs/en/parts/waterfall-chart.md +56 -0
  124. package/docs/en/slide/slide-chart-full.md +48 -0
  125. package/docs/en/slide/slide-chart-insight.md +52 -0
  126. package/docs/en/slide/slide-columns.md +46 -0
  127. package/docs/en/slide/slide-comparison.md +68 -0
  128. package/docs/en/slide/slide-cover.md +39 -0
  129. package/docs/en/slide/slide-exec-summary.md +47 -0
  130. package/docs/en/slide/slide-heading.md +38 -0
  131. package/docs/en/slide/slide-kpi-grid.md +55 -0
  132. package/docs/en/slide/slide-kpi-hero.md +58 -0
  133. package/docs/en/slide/slide-next-actions.md +49 -0
  134. package/docs/en/slide/slide-scorecard-table.md +54 -0
  135. package/docs/en/slide/slide-section.md +44 -0
  136. package/docs/en/slide/slide-source-line.md +34 -0
  137. package/docs/en/ui/alert-dialog.md +42 -0
  138. package/docs/en/ui/avatar.md +31 -0
  139. package/docs/en/ui/combobox.md +74 -0
  140. package/docs/en/ui/drawer.md +41 -0
  141. package/docs/en/ui/empty.md +1 -1
  142. package/docs/en/ui/error-state.md +4 -3
  143. package/docs/en/ui/field.md +42 -0
  144. package/docs/en/ui/hover-card.md +21 -0
  145. package/docs/en/ui/kbd.md +17 -0
  146. package/docs/en/ui/loading.md +1 -1
  147. package/docs/en/ui/pagination.md +36 -0
  148. package/docs/en/ui/radio-group.md +21 -0
  149. package/docs/en/ui/toast.md +44 -0
  150. package/docs/en/ui/toggle-group.md +4 -3
  151. package/docs/en/ui-and-theming.md +1 -1
  152. package/docs/index.json +1184 -114
  153. package/docs/ja/agent-skills.md +1 -1
  154. package/docs/ja/changelog.md +84 -0
  155. package/docs/ja/cli-reference.md +29 -0
  156. package/docs/ja/components.md +68 -101
  157. package/docs/ja/doc/delta-text.md +40 -0
  158. package/docs/ja/doc/doc-action-items.md +49 -0
  159. package/docs/ja/doc/doc-callout.md +38 -0
  160. package/docs/ja/doc/doc-data-table.md +60 -0
  161. package/docs/ja/doc/doc-executive-summary.md +64 -0
  162. package/docs/ja/doc/doc-figure.md +56 -0
  163. package/docs/ja/doc/doc-key-findings.md +61 -0
  164. package/docs/ja/doc/doc-kpi-scorecard.md +80 -0
  165. package/docs/ja/doc/doc-notes-and-sources.md +43 -0
  166. package/docs/ja/doc/doc-report-header.md +46 -0
  167. package/docs/ja/page-types/csv.md +83 -0
  168. package/docs/ja/page-types/doc.md +83 -0
  169. package/docs/ja/page-types/excel.md +82 -0
  170. package/docs/ja/page-types/slide.md +133 -0
  171. package/docs/ja/page-types.md +47 -0
  172. package/docs/ja/pages-and-metadata.md +15 -0
  173. package/docs/ja/parts/area-chart.md +85 -0
  174. package/docs/ja/parts/bar-chart.md +95 -0
  175. package/docs/ja/parts/bar-list.md +58 -0
  176. package/docs/ja/parts/category-bar.md +36 -0
  177. package/docs/ja/parts/chart-frame.md +36 -0
  178. package/docs/ja/parts/data-table.md +22 -0
  179. package/docs/ja/parts/delta.md +51 -0
  180. package/docs/ja/parts/donut-chart.md +66 -0
  181. package/docs/ja/parts/echart.md +3 -0
  182. package/docs/ja/parts/format.md +44 -0
  183. package/docs/ja/parts/funnel-steps.md +27 -8
  184. package/docs/ja/parts/heatmap.md +45 -0
  185. package/docs/ja/parts/kpi-card.md +56 -0
  186. package/docs/ja/parts/legend.md +36 -0
  187. package/docs/ja/parts/line-chart.md +84 -0
  188. package/docs/ja/parts/metric-value.md +3 -2
  189. package/docs/ja/parts/page-shell.md +1 -1
  190. package/docs/ja/parts/progress-circle.md +34 -0
  191. package/docs/ja/parts/sample-data.md +61 -0
  192. package/docs/ja/parts/scatter-chart.md +69 -0
  193. package/docs/ja/parts/sparkline.md +2 -2
  194. package/docs/ja/parts/tracker.md +32 -0
  195. package/docs/ja/parts/trend-indicator.md +17 -1
  196. package/docs/ja/parts/updated-at.md +27 -0
  197. package/docs/ja/parts/waterfall-chart.md +61 -0
  198. package/docs/ja/routing.md +8 -86
  199. package/docs/ja/slide/slide-chart-full.md +48 -0
  200. package/docs/ja/slide/slide-chart-insight.md +52 -0
  201. package/docs/ja/slide/slide-columns.md +46 -0
  202. package/docs/ja/slide/slide-comparison.md +68 -0
  203. package/docs/ja/slide/slide-cover.md +39 -0
  204. package/docs/ja/slide/slide-exec-summary.md +47 -0
  205. package/docs/ja/slide/slide-heading.md +38 -0
  206. package/docs/ja/slide/slide-kpi-grid.md +55 -0
  207. package/docs/ja/slide/slide-kpi-hero.md +58 -0
  208. package/docs/ja/slide/slide-next-actions.md +49 -0
  209. package/docs/ja/slide/slide-scorecard-table.md +54 -0
  210. package/docs/ja/slide/slide-section.md +44 -0
  211. package/docs/ja/slide/slide-source-line.md +34 -0
  212. package/docs/ja/ui/alert-dialog.md +41 -0
  213. package/docs/ja/ui/avatar.md +31 -0
  214. package/docs/ja/ui/combobox.md +74 -0
  215. package/docs/ja/ui/drawer.md +41 -0
  216. package/docs/ja/ui/empty.md +1 -1
  217. package/docs/ja/ui/error-state.md +4 -3
  218. package/docs/ja/ui/field.md +42 -0
  219. package/docs/ja/ui/hover-card.md +21 -0
  220. package/docs/ja/ui/kbd.md +16 -0
  221. package/docs/ja/ui/loading.md +1 -1
  222. package/docs/ja/ui/pagination.md +36 -0
  223. package/docs/ja/ui/radio-group.md +21 -0
  224. package/docs/ja/ui/toast.md +46 -0
  225. package/docs/ja/ui/toggle-group.md +4 -3
  226. package/docs/ja/ui-and-theming.md +14 -7
  227. package/package.json +43 -29
  228. package/registry/ui/accordion.tsx +76 -0
  229. package/registry/ui/alert-dialog.tsx +189 -0
  230. package/registry/ui/alert.tsx +80 -0
  231. package/registry/ui/app-shell.tsx +424 -0
  232. package/registry/ui/area-chart.tsx +3960 -0
  233. package/registry/ui/attention-list.tsx +465 -0
  234. package/registry/ui/avatar.tsx +110 -0
  235. package/registry/ui/badge.tsx +56 -0
  236. package/registry/ui/bar-chart.tsx +3954 -0
  237. package/registry/ui/bar-list.tsx +3998 -0
  238. package/registry/ui/box-plot-chart.tsx +4214 -0
  239. package/registry/ui/breadcrumb.tsx +128 -0
  240. package/registry/ui/button.tsx +62 -0
  241. package/registry/ui/calendar.tsx +223 -0
  242. package/registry/ui/card.tsx +107 -0
  243. package/registry/ui/category-bar.tsx +1498 -0
  244. package/registry/ui/chart-frame.tsx +1604 -0
  245. package/registry/ui/checkbox.tsx +30 -0
  246. package/registry/ui/collapsible.tsx +23 -0
  247. package/registry/ui/combobox.tsx +310 -0
  248. package/registry/ui/command.tsx +198 -0
  249. package/registry/ui/dashboard-card.tsx +217 -0
  250. package/registry/ui/data-table.tsx +896 -157
  251. package/registry/ui/date-range-picker.tsx +544 -0
  252. package/registry/ui/delta.tsx +350 -0
  253. package/registry/ui/dialog.tsx +161 -0
  254. package/registry/ui/donut-chart.tsx +4006 -0
  255. package/registry/ui/drawer.tsx +229 -0
  256. package/registry/ui/dropdown-menu.tsx +274 -0
  257. package/registry/ui/echart.tsx +1178 -0
  258. package/registry/ui/field.tsx +240 -0
  259. package/registry/ui/filter-bar.tsx +551 -0
  260. package/registry/ui/funnel-steps.tsx +3843 -0
  261. package/registry/ui/heatmap.tsx +2027 -0
  262. package/registry/ui/histogram-chart.tsx +4284 -0
  263. package/registry/ui/hover-card.tsx +52 -0
  264. package/registry/ui/input-group.tsx +160 -0
  265. package/registry/ui/input.tsx +24 -0
  266. package/registry/ui/kbd.tsx +30 -0
  267. package/registry/ui/kpi-card.tsx +905 -0
  268. package/registry/ui/label.tsx +22 -0
  269. package/registry/ui/legend.tsx +3817 -0
  270. package/registry/ui/line-chart.tsx +3958 -0
  271. package/registry/ui/metric-value.tsx +62 -0
  272. package/registry/ui/multi-select.tsx +382 -0
  273. package/registry/ui/page-shell.tsx +420 -0
  274. package/registry/ui/pagination.tsx +140 -0
  275. package/registry/ui/paired-chart.tsx +4086 -0
  276. package/registry/ui/placeholder.tsx +36 -0
  277. package/registry/ui/popover.tsx +92 -0
  278. package/registry/ui/progress-circle.tsx +1033 -0
  279. package/registry/ui/progress.tsx +85 -0
  280. package/registry/ui/radio-group.tsx +39 -0
  281. package/registry/ui/sample-data.tsx +230 -0
  282. package/registry/ui/scatter-chart.tsx +4503 -0
  283. package/registry/ui/scroll-area.tsx +56 -0
  284. package/registry/ui/searchable-select.tsx +352 -0
  285. package/registry/ui/section-header.tsx +43 -0
  286. package/registry/ui/segmented-control.tsx +76 -0
  287. package/registry/ui/select.tsx +255 -0
  288. package/registry/ui/separator.tsx +27 -0
  289. package/registry/ui/sheet.tsx +139 -0
  290. package/registry/ui/sidebar.tsx +725 -0
  291. package/registry/ui/skeleton.tsx +17 -0
  292. package/registry/ui/slider.tsx +56 -0
  293. package/registry/ui/sparkline.tsx +230 -0
  294. package/registry/ui/spinner.tsx +14 -0
  295. package/registry/ui/states.tsx +247 -0
  296. package/registry/ui/status-badge.tsx +286 -0
  297. package/registry/ui/switch.tsx +34 -0
  298. package/registry/ui/table.tsx +118 -0
  299. package/registry/ui/tabs.tsx +84 -0
  300. package/registry/ui/textarea.tsx +22 -0
  301. package/registry/ui/toast.tsx +250 -0
  302. package/registry/ui/toggle-group.tsx +91 -0
  303. package/registry/ui/toggle.tsx +47 -0
  304. package/registry/ui/tooltip.tsx +72 -0
  305. package/registry/ui/tracker.tsx +1015 -0
  306. package/registry/ui/trend-indicator.tsx +217 -0
  307. package/registry/ui/updated-at.tsx +276 -0
  308. package/registry/ui/waterfall-chart.tsx +4561 -0
  309. package/skills/vantage-add-feature/SKILL.md +14 -7
  310. package/skills/vantage-design/SKILL.md +62 -52
  311. package/skills/vantage-design/references/extract.md +26 -27
  312. package/skills/vantage-design/references/format.md +12 -172
  313. package/skills/vantage-design/references/presets.md +50 -110
  314. package/skills/vantage-pitfalls/SKILL.md +10 -1
  315. package/skills/vantage-slide/SKILL.md +71 -36
  316. package/templates/AGENTS.md +54 -16
  317. package/templates/agents/api.md +36 -0
  318. package/templates/agents/csv.md +2 -1
  319. package/templates/agents/doc.md +52 -3
  320. package/templates/agents/page.md +91 -10
  321. package/templates/agents/slide.md +90 -4
  322. package/templates/agents/xlsx.md +2 -1
  323. package/theme.css +247 -132
  324. package/dist/add-EISGSZAH.js +0 -6
  325. package/dist/add-EISGSZAH.js.map +0 -1
  326. package/dist/chunk-3G43C6OL.js.map +0 -1
  327. package/dist/chunk-5ZOP4SQR.js +0 -47
  328. package/dist/chunk-5ZOP4SQR.js.map +0 -1
  329. package/dist/chunk-A2UUGASH.js.map +0 -1
  330. package/dist/chunk-BCE22JSM.js.map +0 -1
  331. package/dist/chunk-DTDVSFRY.js +0 -29
  332. package/dist/chunk-DTDVSFRY.js.map +0 -1
  333. package/dist/chunk-EP6JHXSR.js.map +0 -1
  334. package/dist/chunk-JGRMRXXZ.js.map +0 -1
  335. package/dist/chunk-KLEIVDUV.js +0 -165
  336. package/dist/chunk-KLEIVDUV.js.map +0 -1
  337. package/dist/chunk-LSRMRIXA.js +0 -2227
  338. package/dist/chunk-LSRMRIXA.js.map +0 -1
  339. package/dist/chunk-PVTHHV7X.js.map +0 -1
  340. package/dist/chunk-PXRX5PEC.js.map +0 -1
  341. package/dist/chunk-RPZAALCX.js.map +0 -1
  342. package/dist/chunk-T3FLAGI6.js +0 -316
  343. package/dist/chunk-T3FLAGI6.js.map +0 -1
  344. package/dist/dev-NZRLOQCL.js.map +0 -1
  345. package/dist/doctor-VFKEMR54.js.map +0 -1
  346. package/dist/preview-QDCIVVSR.js.map +0 -1
@@ -0,0 +1,32 @@
1
+ # Tracker
2
+
3
+ > 期間ごとの状態を小さなブロックの列で示す。稼働状況やバッチの結果に。
4
+
5
+ 1 期間 = 1 ブロックで状態を色分けして並べます。日ごとの稼働状況・バッチの成否・日次目標の
6
+ 達成 / 未達のような**連続した状態**に向きます。ブロックにホバーすると `tooltip` が出ます。
7
+ ECharts を使わない HTML で、配色はテーマに追従します。
8
+
9
+ ```tsx
10
+ import { Tracker } from "@squadbase/vantage/components";
11
+ import type { TrackerBlock, ChartColor } from "@squadbase/vantage/components";
12
+ ```
13
+
14
+ | Prop | Type | Default | 説明 |
15
+ | --- | --- | --- | --- |
16
+ | `data` | `TrackerBlock[]` | | `{ color?: ChartColor; tooltip?: string; key?: string \| number }` の配列。**必須**。左から古い順。 |
17
+ | `defaultColor` | `ChartColor` | | `color` の無いブロックの色。既定は muted-foreground を淡くした灰色(データ無し・未実行に)。 |
18
+ | `hoverEffect` | `boolean` | `true` | ホバー中のブロックを薄くする。 |
19
+ | `className` | `string` | | 足すクラス。高さは既定 `h-8`。 |
20
+
21
+ 残りの props は外側の `<div>` にそのまま渡ります。
22
+
23
+ ## 状態に色を割り当てる
24
+
25
+ `color` はトークン名か CSS カラーです。失敗に `var(--destructive)` を使うと、テーマの
26
+ 破壊的操作の色と揃います。
27
+
28
+ ```tsx
29
+ const COLOR = { ok: "chart-2", warn: "chart-3", error: "var(--destructive)" } as const;
30
+
31
+ <Tracker data={days.map((d) => ({ color: COLOR[d.status], tooltip: `${d.date} ${d.label}` }))} />
32
+ ```
@@ -1,6 +1,22 @@
1
1
  # TrendIndicator
2
2
 
3
- > 増減の矢印と変化率。良し悪しは positiveIsGood で決まる。
3
+ > 非推奨。新規は Delta を使う。増減の矢印と変化率。
4
+
5
+ > [!WARNING]
6
+ > **非推奨です。新規のコードでは [`Delta`](parts/delta) を使ってください。**
7
+ > `TrendIndicator` は向き(`direction`)と色を手で渡すため、値と矢印が食い違うことがあります。`Delta` は今期と
8
+ > 比較相手の値から向き・率・色・ラベルを計算します。KPI をカードで見せるなら
9
+ > [`KpiCard`](parts/kpi-card) を使います。
10
+
11
+ ```tsx
12
+ // 旧
13
+ <TrendIndicator value={12.4} direction="up" />
14
+ <TrendIndicator value={0.4} direction="down" positiveIsGood={false} />
15
+
16
+ // 新
17
+ <Delta value={1_240_000} comparison={{ previous: 1_103_000, vs: "prior-period" }} />
18
+ <Delta value={0.021} comparison={{ previous: 0.026, vs: "prior-period" }} polarity="lower-is-better" />
19
+ ```
4
20
 
5
21
  前期比などの変化を、矢印と変化率で示します。**「上がった=良い」とは限らない**ので、色は
6
22
  `direction` と `positiveIsGood` の組み合わせで決まります — 解約率のように下がる方が良い指標では
@@ -0,0 +1,27 @@
1
+ # UpdatedAt
2
+
3
+ > データの鮮度を示す更新時刻。相対時刻に、タイムゾーンつきの絶対時刻を添える。
4
+
5
+ 「23 分前に更新」のような鮮度の表示です。`<time>` 要素で、`dateTime` に ISO 形式の時刻を持ち、ツールチップと
6
+ `title` に**タイムゾーンつきの絶対時刻**(「2026/10/20 16:41 JST」)が出ます。表示は 60 秒ごとに更新されます。
7
+ 「今」が大事なページでは `variant="absolute-first"` で「16:41 更新(23 分前)」と併記します。
8
+
9
+ ```tsx
10
+ import { UpdatedAt } from "@squadbase/vantage/components";
11
+ import type { UpdatedAtProps } from "@squadbase/vantage/components";
12
+ ```
13
+
14
+ | Prop | Type | Default | 説明 |
15
+ | --- | --- | --- | --- |
16
+ | `at` | `Date \| string \| number` | | データを最後に更新した時刻。**必須**。 |
17
+ | `variant` | `"relative" \| "absolute-first"` | `"relative"` | `relative` は「23 分前に更新」。`absolute-first` は「16:41 更新(23 分前)」で、今日でなければ日付も付く。 |
18
+ | `timeZone` | `string` | | 絶対時刻に使う IANA タイムゾーン(`"Asia/Tokyo"` など)。省略時は実行環境のもの。 |
19
+ | `prefix` | `string` | | ラベルの前に置く文字(`"売上データ: "`)。 |
20
+ | `now` | `Date \| number` | | 「現在時刻」を固定する(テスト・見本用)。渡すと 60 秒ごとの更新を止める。 |
21
+ | `className` | `string` | | 足すクラス。 |
22
+
23
+ 1 分未満の差は「たった今」と出ます。
24
+
25
+ > [!NOTE]
26
+ > 最初の描画(サーバーとクライアント)は ISO の `dateTime` だけの空の `<time>` で、マウント後にラベルが入ります。
27
+ > 表示が閲覧者の時計とタイムゾーンに依存するためで、ハイドレーションの不一致は起きません。
@@ -0,0 +1,61 @@
1
+ # WaterfallChart
2
+
3
+ > 増減の積み上がりを見せる型付きのウォーターフォール。売上から粗利までの内訳や、前期からの増減要因に。
4
+
5
+ 段ごとの増減が累計をどう動かすかを、階段状の棒で描きます。**行の配列(`data`)・段の名前の列(`index`)・
6
+ 金額の列(`categories`)**を渡し、合計の段は `totals` に名前で挙げます。合計の行の値は省けば直前までの累計を
7
+ 計算します。増加は `--positive-fill`、減少は `--negative-fill`、合計は `--chart-1`。各棒には符号つきの金額も
8
+ 書くので、色だけで向きを伝えません。縦軸は常に 0 を含みます。
9
+
10
+ ```tsx
11
+ import { WaterfallChart } from "@squadbase/vantage/components";
12
+ import type { WaterfallChartProps, WaterfallMode } from "@squadbase/vantage/components";
13
+ ```
14
+
15
+ | Prop | Type | Default | 説明 |
16
+ | --- | --- | --- | --- |
17
+ | `data` | `Record<string, unknown>[]` | | 行の配列。**必須**。1 行が 1 段で、並びがそのまま左から右の順。値は number か数値文字列。null は棒を描かず「—」。 |
18
+ | `index` | `string` | | 段の名前に使う列名。**必須**。 |
19
+ | `categories` | `string[]` | | 金額の列名を 1 つだけ入れた配列(`["amount"]`)。**必須**。2 つ以上渡しても最初の 1 つだけを使う。 |
20
+ | `totals` | `string[]` | | 合計の段にする行の `index` の値。0 から累計まで届く棒になる。値が null なら直前までの累計。 |
21
+ | `polarity` | `"higher-is-better" \| "lower-is-better" \| "neutral"` | `"higher-is-better"` | 増えるのが良いか。解約数のように増えて悪い指標は `lower-is-better` で増減の色が入れ替わる。`neutral` は増減とも中立色(符号は付く)。 |
22
+ | `mode` | `"total" \| "delta"` | `"total"` | `delta` は増減の段だけを、開始を 0 とした累計増減の軸で描き、末尾に「純増」の棒を足す。開始・終了の値は図の上の注記に出る。合計に対して増減が小さい(目安 5% 未満)ときに使う。 |
23
+ | `labels` | `Record<string, string>` | | 段の名前 → 表示名(軸・ツールチップ・データ表)。無いキーはそのまま。 |
24
+ | `format` | `ValueFormat` | `"compact"` | 数値の書式(`"currency"` や `{ type: "number", unit: "件" }` など)。軸・棒のラベル・ツールチップで同じ。 |
25
+ | `valueFormatter` | `(value: number) => string` | | 書式を関数で直接渡す逃げ道。`format` より優先。 |
26
+ | `minValue` | `number` | | 縦軸の下限。軸は常に 0 を含むので 0 以下の値だけ有効。データが下回れば広がる。 |
27
+ | `maxValue` | `number` | | 縦軸の上限。データが超えれば広がる。並べて比べるグラフには同じ値を渡して軸をそろえる。 |
28
+ | `yAxisWidth` | `number` | | y 軸ラベルの幅(px)。並べたグラフのプロット領域を揃えたいときに固定する。 |
29
+ | `showValues` | `boolean` | `true` | 各棒に符号つきの増減額(合計は累計)を書く。 |
30
+ | `showTooltip` | `boolean` | `true` | ホバーで増減と累計を出す。 |
31
+ | `summary` | `string \| "auto"` | | グラフが言っていることの 1 文要約。`"auto"` で最初と最後の値、最大の増加・減少から組む。省略時は要約なし。 |
32
+ | `title` | `string` | | グラフの見出し。プロット領域の読み上げ名にもなる。 |
33
+ | `isLoading` | `boolean` | | 読み込み中。最終形と同じ高さのスケルトンを出す。 |
34
+ | `emptyState` | `{ title?: string; description?: string; action?: ReactNode }` | | `data` が空のときの表示。高さは保たれる。既定の題は「表示できるデータがありません」。 |
35
+ | `height` | `number` | `288` | プロット領域の高さ(px)。 |
36
+ | `chartOptions` | `EChartsOption` | | 生成した option に最後に深くマージする逃げ道。 |
37
+ | `actions` | `boolean \| { includeTitle?: boolean }` | `false` | 右上に PNG 保存 / コピーのボタンを出す(ホバー時)。見出しと要約は既定で画像に含まれ、`includeTitle: false` で外せる。 |
38
+ | `fileName` | `string` | `"chart.png"` | PNG 保存時のファイル名(拡張子つき)。 |
39
+ | `className` | `string` | | 外枠(`<figure>`)のクラス。幅はここで決める。 |
40
+ | `ariaLabel` | `string` | | 見出しが無いときのプロット領域の読み上げ名。 |
41
+
42
+ ## 増減が小さいときは delta
43
+
44
+ 総額に対して増減が小さいと、棒が総額の高い軸に埋もれて線のようになります。`mode="delta"` にすると
45
+ 増減だけを 0 起点の累計で描き、最後に「純増」の棒を足します。`totals` に挙げた行(前期・当期)は棒にならず、
46
+ 図の上の注記になります。
47
+
48
+ ```tsx
49
+ <WaterfallChart
50
+ data={rows}
51
+ index="item"
52
+ categories={["amount"]}
53
+ totals={["前期", "当期"]}
54
+ mode="delta"
55
+ format="currency"
56
+ />
57
+ ```
58
+
59
+ > [!NOTE]
60
+ > 解約数や原価のように増えて悪い値の段を並べるときは `polarity="lower-is-better"` にします。色の意味が
61
+ > 入れ替わるだけで、棒の向きと符号は変わりません。
@@ -1,6 +1,6 @@
1
1
  # ファイルベースルーティング
2
2
 
3
- > ファイルを置くだけでルートが生まれる。ページ・レイアウト・動的パラメータ・404/error の規約と、tsx 以外のページ(csv / xlsx / スライド / ドキュメント)。
3
+ > ファイルを置くだけでルートが生まれる。ページ・レイアウト・動的パラメータ・404/error の規約。
4
4
 
5
5
  Vantage のルーティングは **ファイルの配置がそのまま URL** になります。ルーターの設定は書きません。
6
6
 
@@ -46,92 +46,13 @@ Vantage のルーティングは **ファイルの配置がそのまま URL**
46
46
 
47
47
  ## tsx 以外もページになる
48
48
 
49
- ルートになるのは `.tsx` / `.jsx` だけではありません。**`.csv` と `.xlsx`** はそのまま表として
50
- 読めるページになり、**`<name>.slide.tsx`** はスライドデッキに、**`<name>.doc.tsx`** はドキュメントになります。どれも URL の作り方は
51
- tsx と同じで、`vantage routes` にも `useRoutes()` のナビにも同格で並びます。
49
+ ルートになるのは `.tsx` / `.jsx` だけではありません。**`<name>.slide.tsx`** はスライドデッキに、
50
+ **`<name>.doc.tsx`** はドキュメントに、**`.csv` と `.xlsx`** はそのまま表として読めるページに
51
+ なります。どれも URL の作り方は tsx と同じで、`.slide` / `.doc` と拡張子は URL に出ません
52
+ (`june.slide.tsx`・`june.csv` → `/june`)。`vantage routes` にも `useRoutes()` のナビにも同格で並びます。
52
53
 
53
- ### データファイル(`.csv` / `.xlsx`)
54
-
55
- `src/data/june.xlsx` を置いて `/data/june` を開くと、ダウンロードせずブラウザ上で表として
56
- 読めます。xlsx は複数シートを切り替えられ、元ファイルをダウンロードする導線も付きます。
57
-
58
- 描かれるのは**表計算ソフトそのものの見た目**です —— 列は A / B / C、左に行番号、ファイルの
59
- 1 行目はヘッダとして固定され、罫線はデータの外まで続きます。シートのタブは下端に並びます。
60
- 読み取り専用なので編集もソートもできません(セルを選んで `Cmd/Ctrl+C` でコピーはできます)。
61
- 並べ替えや絞り込みが要るデータは、`server/api/` から配って `DataTable` で描いてください。
62
-
63
- - **タイトルはファイル名から導かれます**(`june.xlsx` → 「June」、`index.csv` はディレクトリ名)。
64
- データファイルに `definePage` は書けないので、名前を変えたいときはファイルをリネームします。
65
- - **パースはブラウザで行われます。** dev・ビルド後・デプロイ後で同じコードが同じバイトを読むので、
66
- 同じ URL が同じものを返します。25MB を超えるファイルはそのページにエラーが出ます
67
- (`vantage check` が `FILE_PAGE_TOO_LARGE` で先に警告します)。
68
- - 数式・グラフ・セル書式は再現されません。**値として読めれば十分**という設計です。
69
- - ページにしたくないファイルは `_` を前置します(`_june.xlsx`)。tsx から自分で描きたいときは
70
- こうしてルート化を止め、`@squadbase/vantage/table` の `FilePageView` を使います。
71
-
72
- > [!WARNING]
73
- > **ビューアの無い拡張子はルートになりません。** `.xls` / `.ods` / `.tsv` などを置いても
74
- > 404 にすらならず、ナビにも `vantage routes` にも出ません。`vantage check` の
75
- > `UNSUPPORTED_PAGE_FILE` 警告が唯一の告知点です。
76
-
77
- ### スライド(`.slide.tsx`)
78
-
79
- `.slide` は**ページ種別サフィックス**で、URL には出ません(`src/june.slide.tsx` → `/june`)。
80
- 中身は `<SlideDeck>` を返す普通の React コンポーネントなので、`definePage` もナビも
81
- 通常のページと同じように効きます。
82
-
83
- ```tsx
84
- import { definePage } from "@squadbase/vantage";
85
- import { Slide, SlideDeck } from "@squadbase/vantage/slide";
86
-
87
- export const page = definePage({ title: "6月度レビュー", navLabel: "6月度" });
88
-
89
- export default function Deck() {
90
- return (
91
- <SlideDeck>
92
- <Slide>…</Slide>
93
- <Slide>…</Slide>
94
- </SlideDeck>
95
- );
96
- }
97
- ```
98
-
99
- 1920×1080 の固定キャンバスに書き、画面サイズに合わせて縮小されます。キーボードとクリックで
100
- 送れ、左のスライド一覧は `L` で開閉、`F` で全画面、ツールバーから pptx を書き出せます。詳しくは
101
- [UI とテーマ](ui-and-theming)。
102
-
103
- > [!WARNING]
104
- > `.slide` を付けられるのは**ルートになるページモジュールだけ**です。`_layout.slide.tsx` や
105
- > `deck.slide.ts` は `INVALID_PAGE_VARIANT` エラーになります。また `june.slide.tsx` と
106
- > `june.tsx`、`sales.csv` と `sales.tsx` はいずれも同じ URL に解決するので `ROUTE_CONFLICT` です。
107
-
108
- ### ドキュメント(`.doc.tsx`)
109
-
110
- `.doc` も**ページ種別サフィックス**です(`src/june-summary.doc.tsx` → `/june-summary`)。上から下へ
111
- 読む文章のページで、中身は `<Document>` を返す普通の React コンポーネントです。
112
-
113
- ```tsx
114
- import { definePage } from "@squadbase/vantage";
115
- import { Document } from "@squadbase/vantage/doc";
116
-
117
- export const page = definePage({ title: "6月度サマリー" });
118
-
119
- export default function JuneSummary() {
120
- return (
121
- <Document>
122
- <h1>6月度サマリー</h1>
123
- <p>6月の売上は目標を 5% 上回りました。</p>
124
- <table>…</table>
125
- </Document>
126
- );
127
- }
128
- ```
129
-
130
- `<Document>` の中の見出し・段落・リスト・表・引用・コードには、クラスを書かなくてもスタイルが
131
- 当たります。詳しくは [UI とテーマ](ui-and-theming)。右下の「PDF として保存」ボタン(ブラウザの
132
- 言語が日本語以外なら「Save as PDF」)から印刷ダイアログを開けます。印刷されるのはドキュメントの本文
133
- だけで、アプリのヘッダーやサイドバーは載らず、ダークモードでもライトの配色で出ます。`.slide` と
134
- 同じく、`.doc` を付けられるのはルートになるページモジュールだけです。
54
+ それぞれの書き方・できること・制限、そして**置いてもページにならないファイル**(`.xls`・`.tsv`・
55
+ `.md` など)は [ページの種類](page-types) にまとめてあります。
135
56
 
136
57
  ## ルーティングされないディレクトリ
137
58
 
@@ -291,3 +212,4 @@ setSegments((prev) => [...prev, "enterprise"]);
291
212
  ## 次に読む
292
213
 
293
214
  - [ページと definePage](pages-and-metadata) — ページの契約とメタデータ
215
+ - [ページの種類](page-types) — スライド・ドキュメント・CSV・Excel
@@ -0,0 +1,48 @@
1
+ # SlideChartFull
2
+
3
+ > グラフ 1 つを 12 カラム全幅で見せる 1 枚。下に 1 行の注記。
4
+
5
+ 横幅が要るグラフ(カテゴリが多い・系列が長い)を全幅で見せる 1 枚です。グラフの下に、読み方や注目点を 1 行(`note`)で添えられます。
6
+
7
+ ```tsx
8
+ import { SlideChartFull } from "@squadbase/vantage/slide";
9
+ import type { SlideChartFullProps } from "@squadbase/vantage/slide";
10
+ ```
11
+
12
+ > [!NOTE]
13
+ > これは **`<Slide>` 1 枚の中身**です。`<Slide>` 自体は持たないので、`<Slide>` の直下に置いてください。ルートはキャンバス(1920×1080)いっぱい(100%)に広がり、`className` は受けません。余白・文字サイズ・グリッドは block の中で決まっている(1920×1080 の 12 カラム)ので、寸法を足さないでください。デッキの組み方は [スライド](page-types/slide) を参照してください。
14
+
15
+ ## props
16
+
17
+ | Prop | Type | 説明 |
18
+ | --- | --- | --- |
19
+ | `title` | `string` | 結論を 1 文で書いた見出し(アクションタイトル)。**必須**。 |
20
+ | `chart` | `SlideChartInsightChart` | `{ type: "line" \| "bar" \| "area"; categories: string[]; series: { name: string; data: number[] }[] }`。**必須**。`SlideChartInsight` と同じ形・同じ描画。系列が 2 つ以上なら凡例が出る。 |
21
+ | `note` | `string` | グラフの下の 1 行。読み方や注目点。60 文字ほどまで。 |
22
+ | `asOf` | `string` | 数字を取った日。日付のみ(例: `"2026-10-01"`)。「2026-10-01 時点」と表示される。「時点」は書かない。 |
23
+ | `source` | `string` | 出典(例: `"社内 BI"`)。「出典: 社内 BI」と表示される。 |
24
+
25
+ ## 使い方
26
+
27
+ ```tsx
28
+ import { Slide, SlideChartFull } from "@squadbase/vantage/slide";
29
+
30
+ <Slide>
31
+ <SlideChartFull
32
+ title="売上は 9 月に過去最高を更新した"
33
+ chart={{
34
+ type: "line",
35
+ categories: ["4 月", "5 月", "6 月", "7 月", "8 月", "9 月"],
36
+ series: [{ name: "売上(百万円)", data: [460, 480, 490, 500, 503, 540] }],
37
+ }}
38
+ note="9 月は大型案件 2 件の計上を含む"
39
+ asOf="2026-10-01"
40
+ source="社内 BI"
41
+ />
42
+ </Slide>
43
+ ```
44
+
45
+ ## 注意
46
+
47
+ - グラフは `EChart` でアニメーションなし・ツールチップなし。pptx への書き出しはその描画(`data-waitfor="canvas"`)を待ちます。
48
+ - 読み解きの文を並べたいときは `SlideChartInsight` を使います。
@@ -0,0 +1,52 @@
1
+ # SlideChartInsight
2
+
3
+ > グラフ 1 つと、その読み解き。レポートでいちばん多い 1 枚。
4
+
5
+ グラフ 1 つ(12 カラムのうち 8)と、その読み解き(残りの 4、最大 3 点)を並べる 1 枚です。グラフは `line` / `bar` / `area`。キャンバス用の文字サイズで、ツールチップとアニメーションなしで組まれるので、pptx に見た目のまま書き出せます。
6
+
7
+ ```tsx
8
+ import { SlideChartInsight } from "@squadbase/vantage/slide";
9
+ import type { SlideChartInsightProps, SlideChartInsightChart } from "@squadbase/vantage/slide";
10
+ ```
11
+
12
+ > [!NOTE]
13
+ > これは **`<Slide>` 1 枚の中身**です。`<Slide>` 自体は持たないので、`<Slide>` の直下に置いてください。ルートはキャンバス(1920×1080)いっぱい(100%)に広がり、`className` は受けません。余白・文字サイズ・グリッドは block の中で決まっている(1920×1080 の 12 カラム)ので、寸法を足さないでください。デッキの組み方は [スライド](page-types/slide) を参照してください。
14
+
15
+ ## props
16
+
17
+ | Prop | Type | Default | 説明 |
18
+ | --- | --- | --- | --- |
19
+ | `title` | `string` | | 結論を 1 文で書いた見出し(アクションタイトル)。**必須**。 |
20
+ | `chart` | `SlideChartInsightChart` | | `{ type: "line" \| "bar" \| "area"; categories: string[]; series: { name: string; data: number[] }[] }`。**必須**。系列が 2 つ以上なら凡例が出る。 |
21
+ | `insights` | `string[]` | | グラフの読み解き。2〜3 点。**必須**。 |
22
+ | `chartSide` | `"left" \| "right"` | `"left"` | グラフを置く側。 |
23
+ | `asOf` | `string` | | 数字を取った日。日付のみ(例: `"2026-10-01"`)。block が「2026-10-01 時点」と 1 回だけ「時点」を付けるので、「時点」は書かない。 |
24
+ | `source` | `string` | | 出典(例: `"社内 BI"`)。「出典: 社内 BI」と表示される。 |
25
+
26
+ ## 使い方
27
+
28
+ ```tsx
29
+ import { Slide, SlideChartInsight } from "@squadbase/vantage/slide";
30
+
31
+ <Slide>
32
+ <SlideChartInsight
33
+ title="解約率は 6 月以降、毎月下がり続けている"
34
+ chart={{
35
+ type: "line",
36
+ categories: ["6 月", "7 月", "8 月", "9 月"],
37
+ series: [{ name: "解約率(%)", data: [2.7, 2.4, 2.1, 1.8] }],
38
+ }}
39
+ insights={[
40
+ "オンボーディング刷新後の 3 か月で 0.9pt 低下",
41
+ "低下は中小企業プランが中心",
42
+ ]}
43
+ asOf="2026-10-01"
44
+ source="社内 BI"
45
+ />
46
+ </Slide>
47
+ ```
48
+
49
+ ## 注意
50
+
51
+ - 4 点以上の `insights` は描画されますが `console.warn` が出ます。スライドを分けてください。
52
+ - 型付きグラフ(`LineChart` など)は使いません。この block が `EChart` で直接組みます。
@@ -0,0 +1,46 @@
1
+ # SlideColumns
2
+
3
+ > [部品] スライド本文の 12 カラム配置。SlideColumns と SlideColumn。
4
+
5
+ スライド本文の 12 カラム配置です。`SlideColumns` の中に `SlideColumn` を並べ、それぞれが `span` カラム分を取ります(8 / 4、6 / 6、4 / 4 / 4 など)。グリッドの本文の行に置く**部品**で、1 枚まるごとの block ではありません。
6
+
7
+ ```tsx
8
+ import { SlideColumns, SlideColumn } from "@squadbase/vantage/slide";
9
+ import type { SlideColumnsProps, SlideColumnProps } from "@squadbase/vantage/slide";
10
+ ```
11
+
12
+ > [!NOTE]
13
+ > これは **スライドの部品**で、1 枚まるごとの block ではありません。`<Slide>` 内の 12 カラムのグリッドの行として置きます(ルートはキャンバスいっぱい(100%×100%)には広がりません)。寸法はすべて部品の中で決まっているので、足さないでください。デッキの組み方は [スライド](page-types/slide) を参照してください。
14
+
15
+ ## props
16
+
17
+ ### SlideColumns
18
+
19
+ | Prop | Type | Default | 説明 |
20
+ | --- | --- | --- | --- |
21
+ | `children` | `ReactNode` | | `SlideColumn` を並べる。**必須**。 |
22
+ | `align` | `"start" \| "center" \| "stretch"` | `"stretch"` | 行の中での縦方向の揃え。 |
23
+
24
+ ### SlideColumn
25
+
26
+ | Prop | Type | 説明 |
27
+ | --- | --- | --- |
28
+ | `span` | `number` | 12 カラムのうち何カラム分を取るか(1〜12)。**必須**。 |
29
+ | `children` | `ReactNode` | 列の中身。**必須**。 |
30
+
31
+ ## 使い方
32
+
33
+ ```tsx
34
+ import { SlideColumns, SlideColumn } from "@squadbase/vantage/slide";
35
+
36
+ <SlideColumns align="center">
37
+ <SlideColumn span={8}>{/* グラフ */}</SlideColumn>
38
+ <SlideColumn span={4}>{/* 読み解き */}</SlideColumn>
39
+ </SlideColumns>
40
+ ```
41
+
42
+ ## 注意
43
+
44
+ - 並べた `span` の合計は 12 にします。
45
+ - 間隔とカラム数はスライドの仕様値で決まっています。
46
+ - 列の中身が列の高さいっぱいに広がるべきときは、その中身側で `height: "100%"` を指定します。
@@ -0,0 +1,68 @@
1
+ # SlideComparison
2
+
3
+ > A と B、施策の前と後を 2〜3 列で並べる 1 枚。
4
+
5
+ 2〜3 列を横に並べて比べる 1 枚です。各列に見出し・主役の数字(と増減)・要点を置き、下に 1 行の結論(`verdict`)を出せます。列は 12 カラムを等分します(6 / 6 または 4 / 4 / 4)。
6
+
7
+ ```tsx
8
+ import { SlideComparison } from "@squadbase/vantage/slide";
9
+ import type { SlideComparisonProps, SlideComparisonColumn } from "@squadbase/vantage/slide";
10
+ ```
11
+
12
+ > [!NOTE]
13
+ > これは **`<Slide>` 1 枚の中身**です。`<Slide>` 自体は持たないので、`<Slide>` の直下に置いてください。ルートはキャンバス(1920×1080)いっぱい(100%)に広がり、`className` は受けません。余白・文字サイズ・グリッドは block の中で決まっている(1920×1080 の 12 カラム)ので、寸法を足さないでください。デッキの組み方は [スライド](page-types/slide) を参照してください。
14
+
15
+ ## props
16
+
17
+ | Prop | Type | 説明 |
18
+ | --- | --- | --- |
19
+ | `title` | `string` | 結論を 1 文で書いた見出し(アクションタイトル)。**必須**。 |
20
+ | `columns` | `SlideComparisonColumn[]` | 2〜3 列。**必須**。各列は下の表のとおり。 |
21
+ | `verdict` | `string` | どちらが優れるか、何が続くかを 1 行で。 |
22
+ | `asOf` | `string` | 数字を取った日。日付のみ(例: `"2026-10-01"`)。「2026-10-01 時点」と表示される。「時点」は書かない。 |
23
+ | `source` | `string` | 出典(例: `"社内 BI"`)。「出典: 社内 BI」と表示される。 |
24
+
25
+ ### SlideComparisonColumn
26
+
27
+ | Prop | Type | Default | 説明 |
28
+ | --- | --- | --- | --- |
29
+ | `heading` | `string` | | その列が何か(「旧プラン」「施策前」)。**必須**。 |
30
+ | `points` | `string[]` | | 短い要点。**必須**。1 列 3 件まで、1 件 24 文字ほどまで。列ごとに同じ種類の要点を同じ順で書く。 |
31
+ | `value` | `number \| null` | | 主役の数字。`null` は「—」。`format` で整形される。 |
32
+ | `format` | `ValueFormat` | | 値の整形(`"currency"` / `"percent"` など)。`delta` の既定の整形にもなる。 |
33
+ | `display` | `string` | | 整形済みの文字列(「1.2 億円」)。`value` より優先される。 |
34
+ | `delta` | `{ value: number \| null; format?: ValueFormat }` | | 主役の数字の増減そのもの(`percent` なら比率)。向きは符号で決まる。`format` を省くと列の `format` を使う。 |
35
+ | `comparisonLabel` | `string` | | `delta` が何との比較かを示す名前(「前月比」「旧プラン比」)。増減の前に薄く出る。 |
36
+ | `betterWhen` | `"up" \| "down"` | `"up"` | `delta` のどちらの向きが良いか。解約率・コストは `"down"`。 |
37
+
38
+ ## 使い方
39
+
40
+ ```tsx
41
+ import { Slide, SlideComparison } from "@squadbase/vantage/slide";
42
+
43
+ <Slide>
44
+ <SlideComparison
45
+ title="新プランは旧プランより解約が少ない"
46
+ columns={[
47
+ { heading: "旧プラン", value: 0.024, format: "percent", points: ["月額 9,800 円", "導入支援なし"] },
48
+ {
49
+ heading: "新プラン",
50
+ value: 0.018,
51
+ format: "percent",
52
+ delta: { value: -0.006 },
53
+ comparisonLabel: "旧プラン比",
54
+ betterWhen: "down",
55
+ points: ["月額 12,800 円", "導入支援つき"],
56
+ },
57
+ ]}
58
+ verdict="導入支援の有無が解約率の差の主因"
59
+ asOf="2026-10-01"
60
+ source="社内 BI"
61
+ />
62
+ </Slide>
63
+ ```
64
+
65
+ ## 注意
66
+
67
+ - 列が 2〜3 でない、または要点が多い・長いと、コンソールに警告が出ます。スライドを分けてください。
68
+ - 増減は `DeltaText`(▲ ▼ と「増」「減」つき)で描かれます。極性は `betterWhen` のみで指定します。
@@ -0,0 +1,39 @@
1
+ # SlideCover
2
+
3
+ > デッキの表紙。タイトル・サブタイトル・期間・作成者・時点を 1 枚に収める。
4
+
5
+ デッキの表紙です。タイトルは左 8 カラムに置かれ、期間・作成者・時点は下端の 1 行にまとまります。
6
+
7
+ ```tsx
8
+ import { SlideCover } from "@squadbase/vantage/slide";
9
+ import type { SlideCoverProps } from "@squadbase/vantage/slide";
10
+ ```
11
+
12
+ > [!NOTE]
13
+ > これは **`<Slide>` 1 枚の中身**です。`<Slide>` 自体は持たないので、`<Slide>` の直下に置いてください。ルートはキャンバス(1920×1080)いっぱい(100%)に広がり、`className` は受けません。余白・文字サイズ・グリッドは block の中で決まっている(1920×1080 の 12 カラム)ので、寸法を足さないでください。デッキの組み方は [スライド](page-types/slide) を参照してください。
14
+
15
+ ## props
16
+
17
+ | Prop | Type | 説明 |
18
+ | --- | --- | --- |
19
+ | `title` | `string` | デッキの名前。**必須**。 |
20
+ | `subtitle` | `string` | タイトルの下の 1 行。 |
21
+ | `period` | `string` | 対象期間(「2026 年 7 月〜9 月」)。 |
22
+ | `author` | `string` | 作成者・チーム名。 |
23
+ | `asOf` | `string` | 数字を取った日。日付のみ(例: `"2026-10-20"`)。block が「2026-10-20 時点」と 1 回だけ「時点」を付けるので、「時点」は書かない。 |
24
+ | `source` | `string` | 出典(例: `"社内 BI"`)。「出典: 社内 BI」と表示される。 |
25
+
26
+ ## 使い方
27
+
28
+ ```tsx
29
+ import { Slide, SlideCover } from "@squadbase/vantage/slide";
30
+
31
+ <Slide>
32
+ <SlideCover title="2026 年度 第 2 四半期 事業レビュー" subtitle="売上・解約・新規獲得の振り返りと次の打ち手" period="2026 年 7 月〜9 月" author="事業企画チーム" asOf="2026-10-20" source="社内 BI" />
33
+ </Slide>
34
+ ```
35
+
36
+ ## 注意
37
+
38
+ - 表紙は 1 デッキに 1 枚です。2 枚目以降の見出しは他の block のアクションタイトルで書きます。
39
+ - サブタイトルは目的や読み手を 1 行で。長い説明は 2 枚目以降へ。
@@ -0,0 +1,47 @@
1
+ # SlideExecSummary
2
+
3
+ > 結論を先に伝える 1 枚。アクションタイトルと 3〜5 個の要点。
4
+
5
+ 結論が先の 1 枚です。アクションタイトルの下に、1 行の見出し(と任意の補足 1 行)を持つ要点を 3〜5 個並べます。
6
+
7
+ ```tsx
8
+ import { SlideExecSummary } from "@squadbase/vantage/slide";
9
+ import type { SlideExecSummaryProps, SlideExecSummaryPoint } from "@squadbase/vantage/slide";
10
+ ```
11
+
12
+ > [!NOTE]
13
+ > これは **`<Slide>` 1 枚の中身**です。`<Slide>` 自体は持たないので、`<Slide>` の直下に置いてください。ルートはキャンバス(1920×1080)いっぱい(100%)に広がり、`className` は受けません。余白・文字サイズ・グリッドは block の中で決まっている(1920×1080 の 12 カラム)ので、寸法を足さないでください。デッキの組み方は [スライド](page-types/slide) を参照してください。
14
+
15
+ ## props
16
+
17
+ | Prop | Type | Default | 説明 |
18
+ | --- | --- | --- | --- |
19
+ | `title` | `string` | | 結論を 1 文で書いた見出し(アクションタイトル)。**必須**。 |
20
+ | `points` | `SlideExecSummaryPoint[]` | | 要点(`{ headline: string; detail?: string }`)。3〜5 個。**必須**。 |
21
+ | `layout` | `"rows" \| "columns"` | `"rows"` | `rows` は番号付きで縦に積む。`columns` は横に並べる(3〜4 個向き)。 |
22
+ | `asOf` | `string` | | 数字を取った日。日付のみ(例: `"2026-10-01"`)。block が「2026-10-01 時点」と 1 回だけ「時点」を付けるので、「時点」は書かない。 |
23
+ | `source` | `string` | | 出典(例: `"社内 BI"`)。「出典: 社内 BI」と表示される。 |
24
+
25
+ ## 使い方
26
+
27
+ ```tsx
28
+ import { Slide, SlideExecSummary } from "@squadbase/vantage/slide";
29
+
30
+ <Slide>
31
+ <SlideExecSummary
32
+ title="Q2 は売上が計画を 4% 上回り、解約の改善が次の課題"
33
+ points={[
34
+ { headline: "売上は 5.4 億円で計画比 +4%", detail: "新規 38 社が牽引" },
35
+ { headline: "解約率は 1.8% まで低下", detail: "オンボーディング刷新の効果" },
36
+ { headline: "新規獲得は目標に 12 社届かず", detail: "紹介経由が想定の半分" },
37
+ ]}
38
+ asOf="2026-10-20"
39
+ source="社内 BI"
40
+ />
41
+ </Slide>
42
+ ```
43
+
44
+ ## 注意
45
+
46
+ - 6 個以上は描画されますが、`console.warn` が出ます。スライドを分けてください。
47
+ - `title` は話題(「売上の状況」)ではなく、結論の文で書きます。
@@ -0,0 +1,38 @@
1
+ # SlideHeading
2
+
3
+ > [部品] スライド 1 枚の見出し。アクションタイトルと任意のアイブロウ。
4
+
5
+ スライド 1 枚の見出しです。ページの大きさの `h2` で、2 行までに収まります。上に小さなラベル(`eyebrow`、章名など)を添えられます。12 カラムのグリッドの最上段に置く**部品**で、1 枚まるごとの block ではありません。
6
+
7
+ ```tsx
8
+ import { SlideHeading } from "@squadbase/vantage/slide";
9
+ import type { SlideHeadingProps } from "@squadbase/vantage/slide";
10
+ ```
11
+
12
+ > [!NOTE]
13
+ > これは **スライドの部品**で、1 枚まるごとの block ではありません。`<Slide>` 内の 12 カラムのグリッドの行として置きます(ルートはキャンバスいっぱい(100%×100%)には広がりません)。寸法はすべて部品の中で決まっているので、足さないでください。デッキの組み方は [スライド](page-types/slide) を参照してください。
14
+
15
+ ## props
16
+
17
+ | Prop | Type | 説明 |
18
+ | --- | --- | --- |
19
+ | `title` | `string` | 結論を 1 文で書いた見出し(アクションタイトル)。2 行までに切り詰められる。**必須**。 |
20
+ | `eyebrow` | `string` | 見出しの上の短いラベル(「第 2 章 解約」)。 |
21
+
22
+ ## 使い方
23
+
24
+ ```tsx
25
+ import { Slide, SlideHeading } from "@squadbase/vantage/slide";
26
+
27
+ <Slide>
28
+ <div style={{ display: "grid", gridTemplateColumns: "repeat(12, 1fr)" }}>
29
+ <SlideHeading title="解約率は 6 月以降、毎月下がり続けている" eyebrow="第 2 章 解約" />
30
+ {/* …SlideColumns など… */}
31
+ </div>
32
+ </Slide>
33
+ ```
34
+
35
+ ## 注意
36
+
37
+ - 見出しは話題ではなく結論の文で書きます。
38
+ - 置いたグリッドの 12 カラムすべてにまたがります。