@squadbase/vantage 0.6.2-dev1.9d91dda → 0.6.2-dev1.a881d95

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 (339) hide show
  1. package/dist/add-4GHF2TX2.js +6 -0
  2. package/dist/add-4GHF2TX2.js.map +1 -0
  3. package/dist/{build-TVKFIVFQ.js → build-U7GO26HR.js} +9 -9
  4. package/dist/{build-TVKFIVFQ.js.map → build-U7GO26HR.js.map} +1 -1
  5. package/dist/{check-3KHZXZMQ.js → check-MRVAIHG5.js} +7 -7
  6. package/dist/{check-3KHZXZMQ.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-U2M6HGKQ.js → chunk-AABMKHEU.js} +4 -4
  14. package/dist/{chunk-U2M6HGKQ.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-QI3XQKHS.js → chunk-GNXCX4WE.js} +10 -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-P7W4LR3Z.js → chunk-PJ4SPXHS.js} +24 -7
  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-CEXAQQ5W.js → chunk-S5MDTHH7.js} +180 -18
  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-LMUACBMA.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-JKLLFVEU.js → chunk-UWSQUHX6.js} +4 -99
  44. package/dist/chunk-UWSQUHX6.js.map +1 -0
  45. package/dist/cli.js +12 -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 +1761 -30
  51. package/dist/components/index.js +7 -4
  52. package/dist/delta-text-CbrOaW83.d.ts +17 -0
  53. package/dist/{dev-GDKATCC7.js → dev-O42JFQ64.js} +10 -10
  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-EJJ3BECT.js → docs-JVP4RPKT.js} +3 -3
  59. package/dist/{docs-EJJ3BECT.js.map → docs-JVP4RPKT.js.map} +1 -1
  60. package/dist/{doctor-WQXPXP6K.js → doctor-YD3XAAOT.js} +7 -7
  61. package/dist/{doctor-WQXPXP6K.js.map → doctor-YD3XAAOT.js.map} +1 -1
  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-OGMCNQUO.js → preview-T6CLSQVX.js} +3 -3
  66. package/dist/{preview-OGMCNQUO.js.map → preview-T6CLSQVX.js.map} +1 -1
  67. package/dist/query/index.d.ts +0 -11
  68. package/dist/query/index.js +2 -2
  69. package/dist/{routes-MWBWWOJ2.js → routes-PVKNT777.js} +6 -6
  70. package/dist/{routes-MWBWWOJ2.js.map → routes-PVKNT777.js.map} +1 -1
  71. package/dist/{search-6Y422SV6.js → search-5LC4XPB5.js} +3 -3
  72. package/dist/{search-6Y422SV6.js.map → search-5LC4XPB5.js.map} +1 -1
  73. package/dist/slide/index.d.ts +272 -1
  74. package/dist/slide/index.js +1025 -4
  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-HCANX4GQ.js → upgrade-6DT7ADRP.js} +7 -7
  82. package/dist/{upgrade-HCANX4GQ.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 +2 -0
  87. package/docs/en/components.md +42 -17
  88. package/docs/en/doc/delta-text.md +40 -0
  89. package/docs/en/doc/doc-action-items.md +49 -0
  90. package/docs/en/doc/doc-callout.md +38 -0
  91. package/docs/en/doc/doc-data-table.md +60 -0
  92. package/docs/en/doc/doc-executive-summary.md +64 -0
  93. package/docs/en/doc/doc-figure.md +56 -0
  94. package/docs/en/doc/doc-key-findings.md +61 -0
  95. package/docs/en/doc/doc-kpi-scorecard.md +80 -0
  96. package/docs/en/doc/doc-notes-and-sources.md +43 -0
  97. package/docs/en/doc/doc-report-header.md +46 -0
  98. package/docs/en/pages-and-metadata.md +15 -0
  99. package/docs/en/parts/area-chart.md +99 -0
  100. package/docs/en/parts/bar-chart.md +91 -0
  101. package/docs/en/parts/bar-list.md +50 -0
  102. package/docs/en/parts/category-bar.md +37 -0
  103. package/docs/en/parts/chart-frame.md +39 -0
  104. package/docs/en/parts/data-table.md +22 -0
  105. package/docs/en/parts/delta.md +51 -0
  106. package/docs/en/parts/donut-chart.md +72 -0
  107. package/docs/en/parts/format.md +43 -0
  108. package/docs/en/parts/funnel-steps.md +2 -1
  109. package/docs/en/parts/heatmap.md +53 -0
  110. package/docs/en/parts/kpi-card.md +58 -0
  111. package/docs/en/parts/legend.md +35 -0
  112. package/docs/en/parts/line-chart.md +94 -0
  113. package/docs/en/parts/metric-value.md +3 -2
  114. package/docs/en/parts/progress-circle.md +33 -0
  115. package/docs/en/parts/sample-data.md +39 -0
  116. package/docs/en/parts/scatter-chart.md +56 -0
  117. package/docs/en/parts/sparkline.md +1 -1
  118. package/docs/en/parts/tracker.md +36 -0
  119. package/docs/en/parts/trend-indicator.md +17 -1
  120. package/docs/en/parts/updated-at.md +30 -0
  121. package/docs/en/parts/waterfall-chart.md +56 -0
  122. package/docs/en/slide/slide-chart-full.md +48 -0
  123. package/docs/en/slide/slide-chart-insight.md +52 -0
  124. package/docs/en/slide/slide-columns.md +46 -0
  125. package/docs/en/slide/slide-comparison.md +68 -0
  126. package/docs/en/slide/slide-cover.md +39 -0
  127. package/docs/en/slide/slide-exec-summary.md +47 -0
  128. package/docs/en/slide/slide-heading.md +38 -0
  129. package/docs/en/slide/slide-kpi-grid.md +55 -0
  130. package/docs/en/slide/slide-kpi-hero.md +58 -0
  131. package/docs/en/slide/slide-next-actions.md +49 -0
  132. package/docs/en/slide/slide-scorecard-table.md +54 -0
  133. package/docs/en/slide/slide-section.md +44 -0
  134. package/docs/en/slide/slide-source-line.md +34 -0
  135. package/docs/en/ui/alert-dialog.md +42 -0
  136. package/docs/en/ui/avatar.md +31 -0
  137. package/docs/en/ui/combobox.md +74 -0
  138. package/docs/en/ui/drawer.md +41 -0
  139. package/docs/en/ui/empty.md +1 -1
  140. package/docs/en/ui/error-state.md +4 -3
  141. package/docs/en/ui/field.md +42 -0
  142. package/docs/en/ui/hover-card.md +21 -0
  143. package/docs/en/ui/kbd.md +17 -0
  144. package/docs/en/ui/loading.md +1 -1
  145. package/docs/en/ui/pagination.md +36 -0
  146. package/docs/en/ui/radio-group.md +21 -0
  147. package/docs/en/ui/toast.md +44 -0
  148. package/docs/en/ui/toggle-group.md +4 -3
  149. package/docs/en/ui-and-theming.md +1 -1
  150. package/docs/index.json +1184 -114
  151. package/docs/ja/agent-skills.md +1 -1
  152. package/docs/ja/changelog.md +33 -0
  153. package/docs/ja/components.md +68 -101
  154. package/docs/ja/doc/delta-text.md +40 -0
  155. package/docs/ja/doc/doc-action-items.md +49 -0
  156. package/docs/ja/doc/doc-callout.md +38 -0
  157. package/docs/ja/doc/doc-data-table.md +60 -0
  158. package/docs/ja/doc/doc-executive-summary.md +64 -0
  159. package/docs/ja/doc/doc-figure.md +56 -0
  160. package/docs/ja/doc/doc-key-findings.md +61 -0
  161. package/docs/ja/doc/doc-kpi-scorecard.md +80 -0
  162. package/docs/ja/doc/doc-notes-and-sources.md +43 -0
  163. package/docs/ja/doc/doc-report-header.md +46 -0
  164. package/docs/ja/page-types/csv.md +83 -0
  165. package/docs/ja/page-types/doc.md +83 -0
  166. package/docs/ja/page-types/excel.md +82 -0
  167. package/docs/ja/page-types/slide.md +133 -0
  168. package/docs/ja/page-types.md +47 -0
  169. package/docs/ja/pages-and-metadata.md +15 -0
  170. package/docs/ja/parts/area-chart.md +85 -0
  171. package/docs/ja/parts/bar-chart.md +95 -0
  172. package/docs/ja/parts/bar-list.md +58 -0
  173. package/docs/ja/parts/category-bar.md +36 -0
  174. package/docs/ja/parts/chart-frame.md +36 -0
  175. package/docs/ja/parts/data-table.md +22 -0
  176. package/docs/ja/parts/delta.md +51 -0
  177. package/docs/ja/parts/donut-chart.md +66 -0
  178. package/docs/ja/parts/echart.md +3 -0
  179. package/docs/ja/parts/format.md +44 -0
  180. package/docs/ja/parts/funnel-steps.md +27 -8
  181. package/docs/ja/parts/heatmap.md +45 -0
  182. package/docs/ja/parts/kpi-card.md +56 -0
  183. package/docs/ja/parts/legend.md +36 -0
  184. package/docs/ja/parts/line-chart.md +84 -0
  185. package/docs/ja/parts/metric-value.md +3 -2
  186. package/docs/ja/parts/progress-circle.md +34 -0
  187. package/docs/ja/parts/sample-data.md +61 -0
  188. package/docs/ja/parts/scatter-chart.md +69 -0
  189. package/docs/ja/parts/sparkline.md +2 -2
  190. package/docs/ja/parts/tracker.md +32 -0
  191. package/docs/ja/parts/trend-indicator.md +17 -1
  192. package/docs/ja/parts/updated-at.md +27 -0
  193. package/docs/ja/parts/waterfall-chart.md +61 -0
  194. package/docs/ja/routing.md +8 -86
  195. package/docs/ja/slide/slide-chart-full.md +48 -0
  196. package/docs/ja/slide/slide-chart-insight.md +52 -0
  197. package/docs/ja/slide/slide-columns.md +46 -0
  198. package/docs/ja/slide/slide-comparison.md +68 -0
  199. package/docs/ja/slide/slide-cover.md +39 -0
  200. package/docs/ja/slide/slide-exec-summary.md +47 -0
  201. package/docs/ja/slide/slide-heading.md +38 -0
  202. package/docs/ja/slide/slide-kpi-grid.md +55 -0
  203. package/docs/ja/slide/slide-kpi-hero.md +58 -0
  204. package/docs/ja/slide/slide-next-actions.md +49 -0
  205. package/docs/ja/slide/slide-scorecard-table.md +54 -0
  206. package/docs/ja/slide/slide-section.md +44 -0
  207. package/docs/ja/slide/slide-source-line.md +34 -0
  208. package/docs/ja/ui/alert-dialog.md +41 -0
  209. package/docs/ja/ui/avatar.md +31 -0
  210. package/docs/ja/ui/combobox.md +74 -0
  211. package/docs/ja/ui/drawer.md +41 -0
  212. package/docs/ja/ui/empty.md +1 -1
  213. package/docs/ja/ui/error-state.md +4 -3
  214. package/docs/ja/ui/field.md +42 -0
  215. package/docs/ja/ui/hover-card.md +21 -0
  216. package/docs/ja/ui/kbd.md +16 -0
  217. package/docs/ja/ui/loading.md +1 -1
  218. package/docs/ja/ui/pagination.md +36 -0
  219. package/docs/ja/ui/radio-group.md +21 -0
  220. package/docs/ja/ui/toast.md +46 -0
  221. package/docs/ja/ui/toggle-group.md +4 -3
  222. package/docs/ja/ui-and-theming.md +14 -7
  223. package/package.json +41 -31
  224. package/registry/ui/accordion.tsx +76 -0
  225. package/registry/ui/alert-dialog.tsx +189 -0
  226. package/registry/ui/alert.tsx +80 -0
  227. package/registry/ui/app-shell.tsx +424 -0
  228. package/registry/ui/area-chart.tsx +3960 -0
  229. package/registry/ui/attention-list.tsx +465 -0
  230. package/registry/ui/avatar.tsx +110 -0
  231. package/registry/ui/badge.tsx +56 -0
  232. package/registry/ui/bar-chart.tsx +3954 -0
  233. package/registry/ui/bar-list.tsx +3998 -0
  234. package/registry/ui/box-plot-chart.tsx +4214 -0
  235. package/registry/ui/breadcrumb.tsx +128 -0
  236. package/registry/ui/button.tsx +62 -0
  237. package/registry/ui/calendar.tsx +223 -0
  238. package/registry/ui/card.tsx +107 -0
  239. package/registry/ui/category-bar.tsx +1498 -0
  240. package/registry/ui/chart-frame.tsx +1604 -0
  241. package/registry/ui/checkbox.tsx +30 -0
  242. package/registry/ui/collapsible.tsx +23 -0
  243. package/registry/ui/combobox.tsx +310 -0
  244. package/registry/ui/command.tsx +198 -0
  245. package/registry/ui/dashboard-card.tsx +217 -0
  246. package/registry/ui/data-table.tsx +896 -157
  247. package/registry/ui/date-range-picker.tsx +544 -0
  248. package/registry/ui/delta.tsx +350 -0
  249. package/registry/ui/dialog.tsx +161 -0
  250. package/registry/ui/donut-chart.tsx +4006 -0
  251. package/registry/ui/drawer.tsx +229 -0
  252. package/registry/ui/dropdown-menu.tsx +274 -0
  253. package/registry/ui/echart.tsx +1178 -0
  254. package/registry/ui/field.tsx +240 -0
  255. package/registry/ui/filter-bar.tsx +551 -0
  256. package/registry/ui/funnel-steps.tsx +3843 -0
  257. package/registry/ui/heatmap.tsx +2027 -0
  258. package/registry/ui/histogram-chart.tsx +4284 -0
  259. package/registry/ui/hover-card.tsx +52 -0
  260. package/registry/ui/input-group.tsx +160 -0
  261. package/registry/ui/input.tsx +24 -0
  262. package/registry/ui/kbd.tsx +30 -0
  263. package/registry/ui/kpi-card.tsx +905 -0
  264. package/registry/ui/label.tsx +22 -0
  265. package/registry/ui/legend.tsx +3817 -0
  266. package/registry/ui/line-chart.tsx +3958 -0
  267. package/registry/ui/metric-value.tsx +62 -0
  268. package/registry/ui/multi-select.tsx +382 -0
  269. package/registry/ui/page-shell.tsx +420 -0
  270. package/registry/ui/pagination.tsx +140 -0
  271. package/registry/ui/paired-chart.tsx +4086 -0
  272. package/registry/ui/placeholder.tsx +36 -0
  273. package/registry/ui/popover.tsx +92 -0
  274. package/registry/ui/progress-circle.tsx +1033 -0
  275. package/registry/ui/progress.tsx +85 -0
  276. package/registry/ui/radio-group.tsx +39 -0
  277. package/registry/ui/sample-data.tsx +230 -0
  278. package/registry/ui/scatter-chart.tsx +4503 -0
  279. package/registry/ui/scroll-area.tsx +56 -0
  280. package/registry/ui/searchable-select.tsx +352 -0
  281. package/registry/ui/section-header.tsx +43 -0
  282. package/registry/ui/segmented-control.tsx +76 -0
  283. package/registry/ui/select.tsx +255 -0
  284. package/registry/ui/separator.tsx +27 -0
  285. package/registry/ui/sheet.tsx +139 -0
  286. package/registry/ui/sidebar.tsx +725 -0
  287. package/registry/ui/skeleton.tsx +17 -0
  288. package/registry/ui/slider.tsx +56 -0
  289. package/registry/ui/sparkline.tsx +230 -0
  290. package/registry/ui/spinner.tsx +14 -0
  291. package/registry/ui/states.tsx +247 -0
  292. package/registry/ui/status-badge.tsx +286 -0
  293. package/registry/ui/switch.tsx +34 -0
  294. package/registry/ui/table.tsx +118 -0
  295. package/registry/ui/tabs.tsx +84 -0
  296. package/registry/ui/textarea.tsx +22 -0
  297. package/registry/ui/toast.tsx +250 -0
  298. package/registry/ui/toggle-group.tsx +91 -0
  299. package/registry/ui/toggle.tsx +47 -0
  300. package/registry/ui/tooltip.tsx +72 -0
  301. package/registry/ui/tracker.tsx +1015 -0
  302. package/registry/ui/trend-indicator.tsx +217 -0
  303. package/registry/ui/updated-at.tsx +276 -0
  304. package/registry/ui/waterfall-chart.tsx +4561 -0
  305. package/skills/vantage-add-feature/SKILL.md +14 -7
  306. package/skills/vantage-design/SKILL.md +60 -52
  307. package/skills/vantage-design/references/extract.md +26 -27
  308. package/skills/vantage-design/references/format.md +12 -172
  309. package/skills/vantage-design/references/presets.md +50 -110
  310. package/skills/vantage-pitfalls/SKILL.md +10 -1
  311. package/skills/vantage-slide/SKILL.md +54 -36
  312. package/templates/AGENTS.md +53 -16
  313. package/templates/agents/api.md +7 -0
  314. package/templates/agents/csv.md +2 -1
  315. package/templates/agents/doc.md +52 -3
  316. package/templates/agents/page.md +91 -10
  317. package/templates/agents/slide.md +77 -3
  318. package/templates/agents/xlsx.md +2 -1
  319. package/theme.css +247 -138
  320. package/dist/add-DY4AXANK.js +0 -6
  321. package/dist/add-DY4AXANK.js.map +0 -1
  322. package/dist/chunk-5ZOP4SQR.js +0 -47
  323. package/dist/chunk-5ZOP4SQR.js.map +0 -1
  324. package/dist/chunk-A2UUGASH.js.map +0 -1
  325. package/dist/chunk-CEXAQQ5W.js.map +0 -1
  326. package/dist/chunk-DTDVSFRY.js +0 -29
  327. package/dist/chunk-DTDVSFRY.js.map +0 -1
  328. package/dist/chunk-JKLLFVEU.js.map +0 -1
  329. package/dist/chunk-LMUACBMA.js.map +0 -1
  330. package/dist/chunk-NKFBFDRZ.js +0 -2241
  331. package/dist/chunk-NKFBFDRZ.js.map +0 -1
  332. package/dist/chunk-P7W4LR3Z.js.map +0 -1
  333. package/dist/chunk-PVTHHV7X.js.map +0 -1
  334. package/dist/chunk-PXRX5PEC.js.map +0 -1
  335. package/dist/chunk-QI3XQKHS.js.map +0 -1
  336. package/dist/chunk-RPZAALCX.js.map +0 -1
  337. package/dist/chunk-VA776YE5.js +0 -316
  338. package/dist/chunk-VA776YE5.js.map +0 -1
  339. package/dist/dev-GDKATCC7.js.map +0 -1
@@ -0,0 +1,61 @@
1
+ # DocKeyFindings
2
+
3
+ > 分析で分かったこと 3〜5 件。結論の見出し、根拠、任意の数字。
4
+
5
+ 「分かったこと」のセクションです。結論を書いた見出し、その下に根拠、任意で数字を 1 つ添えた発見を 3〜5 件並べます。各発見は番号付きの `h3` です。数字の増減は渡した `delta` の符号から向きを決め、▲▼ と符号を必ず出します。
6
+
7
+ ```tsx
8
+ import { DocKeyFindings } from "@squadbase/vantage/doc";
9
+ import type { DocKeyFindingsProps, DocFinding, DocFindingMetric } from "@squadbase/vantage/doc";
10
+ ```
11
+
12
+ > [!NOTE]
13
+ > これは **`<Document>` 直下に並べる 1 セクション分**です。見出し・本文の大きさや幅は `<Document>` が決めるので、ここでは寸法を指定しません。 `evidence` は `string` か `ReactNode` で、Markdown 文字列は解釈されません。 ページ全体の組み方は [ドキュメント](page-types/doc) を参照してください。
14
+
15
+ ## props
16
+
17
+ | Prop | Type | Default | 説明 |
18
+ | --- | --- | --- | --- |
19
+ | `title` | `string` | `"主要な発見"` | セクションの見出し。 |
20
+ | `headingLevel` | `2 \| 3` | `2` | 見出しのレベル。`<Document>` 直下は 2、別セクションの中は 3。 |
21
+ | `findings` | `DocFinding[]` | | 発見(`{ headline: string; evidence: ReactNode; metric?: DocFindingMetric }`)。3〜5 件、重要な順。**必須**。 |
22
+ | `findings[].metric` | `DocFindingMetric` | | 発見に添える数字 1 つ。以下のフィールドを持つ。 |
23
+ | `findings[].metric[].label` | `string` | | 指標の名前。 |
24
+ | `findings[].metric[].value` | `number \| null` | | 値。`null` は「—」。 |
25
+ | `findings[].metric[].format` | `ValueFormat` | | `value` の書式(`"currency"`、`{ type: "percent", digits: 1 }` など)。 |
26
+ | `findings[].metric[].display` | `string` | | 渡すと値の代わりにこの文字列を出す(「約 5,400 万円」)。 |
27
+ | `findings[].metric[].delta` | `{ value: number; format?: ValueFormat }` | | 比較先からの増減そのもの(現在値 − 比較値)。向きは符号で決まり、▲▼ と符号を必ず出す。省くと比較を出さない。`format` を省くと指標の `format` を使う。 |
28
+ | `findings[].metric[].comparisonLabel` | `string` | `"前期比"` | 比較の名前(「前月比」)。 |
29
+ | `findings[].metric[].betterWhen` | `"up" \| "down"` | `"up"` | どちらに動くと良いか。解約率やコストは `"down"`。色は良し悪しだけを足す。 |
30
+
31
+ ## 使い方
32
+
33
+ ```tsx
34
+ import { Document, DocKeyFindings } from "@squadbase/vantage/doc";
35
+
36
+ <Document>
37
+ <DocKeyFindings
38
+ findings={[
39
+ {
40
+ headline: "新規契約は法人プランが牽引した",
41
+ evidence: "法人プランの新規が前月比 +20%(20 社 → 24 社)。個人プランは横ばいだった。",
42
+ metric: { label: "法人プランの新規", value: 24, format: { type: "number", unit: "社" }, delta: { value: 4 }, comparisonLabel: "前月比" },
43
+ },
44
+ {
45
+ headline: "解約は導入 3 か月以内に集中している",
46
+ evidence: "解約の 62% が導入から 3 か月以内で、オンボーディングが分かれ目になっている。",
47
+ },
48
+ {
49
+ headline: "紹介経由の契約は定着率が高い",
50
+ evidence: "紹介経由で入った契約の 6 か月継続率は 91% で、広告経由の 74% を上回った。",
51
+ },
52
+ ]}
53
+ />
54
+ </Document>
55
+ ```
56
+
57
+ ## 注意
58
+
59
+ - `headline` は話題ではなく、判断を含む文で書きます(「解約は法人プランに集中している」)。`headingLevel={3}` のときは発見が `h4` になります。
60
+ - `evidence` の文中の数字と `metric` の数字は食い違わないようにします(`delta` は増減そのもので、比率は自動では出ません)。
61
+ - 印刷時は発見 1 件ごとにページをまたぎません。
@@ -0,0 +1,80 @@
1
+ # DocKpiScorecard
2
+
3
+ > 主要指標の一覧。実績・前期比・目標との差・推移。
4
+
5
+ 主要指標を 1 か所にまとめるセクションです。実績、前期からの増減、目標に対する達成率、小さな推移を出します。既定の `table` は印刷に向き、`grid` は 3〜6 個の指標を `dl` のタイルで見せます。増減の向きは `delta` の符号、達成率は `value ÷ target` から block が計算します。
6
+
7
+ ```tsx
8
+ import { DocKpiScorecard } from "@squadbase/vantage/doc";
9
+ import type { DocKpiScorecardProps, DocScorecardMetric } from "@squadbase/vantage/doc";
10
+ ```
11
+
12
+ > [!NOTE]
13
+ > これは **`<Document>` 直下に並べる 1 セクション分**です。見出し・本文の大きさや幅は `<Document>` が決めるので、ここでは寸法を指定しません。 `asOf` と `source` は block の下の 1 行に出ます。 ページ全体の組み方は [ドキュメント](page-types/doc) を参照してください。
14
+
15
+ ## props
16
+
17
+ | Prop | Type | Default | 説明 |
18
+ | --- | --- | --- | --- |
19
+ | `title` | `string` | `"主要指標"` | 見出しの文言。 |
20
+ | `headingLevel` | `2 \| 3` | `2` | 見出しのレベル。`<Document>` 直下は 2、別セクションの中は 3。 |
21
+ | `metrics` | `DocScorecardMetric[]` | | 指標。**必須**。 |
22
+ | `metrics[].label` | `string` | | 指標の名前。 |
23
+ | `metrics[].value` | `number \| null` | | 値。`null` は「—」。 |
24
+ | `metrics[].format` | `ValueFormat` | | `value` の書式(`"currency"`、`{ type: "percent", digits: 1 }` など)。 |
25
+ | `metrics[].display` | `string` | | 渡すと値の代わりにこの文字列を出す(「約 5,400 万円」)。 |
26
+ | `metrics[].delta` | `{ value: number; format?: ValueFormat }` | | 比較先からの増減そのもの(現在値 − 比較値)。向きは符号で決まり、▲▼ と符号を必ず出す。省くと比較を出さない。`format` を省くと指標の `format` を使う。 |
27
+ | `metrics[].comparisonLabel` | `string` | `"前期比"` | 比較の名前(「前月比」)。 |
28
+ | `metrics[].betterWhen` | `"up" \| "down"` | `"up"` | どちらに動くと良いか。解約率やコストは `"down"`。色は良し悪しだけを足す。 |
29
+ | `metrics[].target` | `number` | | 期間の目標。`value` と同じ `format` で出し、達成率(value ÷ target)はここで計算する。 |
30
+ | `metrics[].trend` | `{ x: string; y: number }[]` | | 時系列 1 本(古い順、最後が現在値)。`value` と同じ単位で渡す。省くと「—」。2 点以上で `Sparkline` を描く。 |
31
+ | `variant` | `"table" \| "grid"` | `"table"` | 表か、タイルか。 |
32
+ | `asOf` | `string` | | 数字を取った日。日付だけを書く(「2026-10-03」)。block の下の 1 行に「データ時点 …」と出る。 |
33
+ | `source` | `string` | | 出典。block の下の 1 行に「出典: …」と出る。 |
34
+
35
+ ## 使い方
36
+
37
+ ```tsx
38
+ import { Document, DocKpiScorecard } from "@squadbase/vantage/doc";
39
+
40
+ <Document>
41
+ <DocKpiScorecard
42
+ asOf="2026-10-03"
43
+ source="会計システム"
44
+ metrics={[
45
+ {
46
+ label: "売上",
47
+ value: 53_900_000,
48
+ format: "currency",
49
+ delta: { value: 3_700_000 },
50
+ comparisonLabel: "前月比",
51
+ target: 52_000_000,
52
+ trend: [
53
+ { x: "5 月", y: 48_000_000 },
54
+ { x: "6 月", y: 49_000_000 },
55
+ { x: "7 月", y: 50_000_000 },
56
+ { x: "8 月", y: 50_200_000 },
57
+ { x: "9 月", y: 53_900_000 },
58
+ ],
59
+ },
60
+ {
61
+ label: "解約率",
62
+ value: 0.018,
63
+ format: { type: "percent", digits: 1 },
64
+ delta: { value: -0.003, format: { type: "number", digits: 1, unit: "pt", divisor: 0.01 } },
65
+ comparisonLabel: "前月比",
66
+ betterWhen: "down",
67
+ target: 0.02,
68
+ },
69
+ { label: "新規獲得", value: 38, format: { type: "number", unit: "社" }, delta: { value: -4 }, comparisonLabel: "前月比", target: 50 },
70
+ ]}
71
+ />
72
+ </Document>
73
+ ```
74
+
75
+ ## 注意
76
+
77
+ - 解約率やコストのように下がることが良い指標は `betterWhen: "down"`。値が無いセルは「—」になります。
78
+ - `target` と `trend` の `y` は `value` と同じ単位で渡します(`value` が円なら円)。`target` は指標の `format` で出ます。
79
+ - 表の「比較」列の見出しは、指標のうち最初に `comparisonLabel` を持つものの値で、どれも持たないと「前期比」です。列は 1 つなので、指標ごとに違う比較名にするなら `variant="grid"` を使います。
80
+ - 印刷時、`table` は行ごと、`grid` はタイル 1 つごとにページをまたぎません。
@@ -0,0 +1,43 @@
1
+ # DocNotesAndSources
2
+
3
+ > ドキュメント末尾の注記・用語の定義・出典。
4
+
5
+ ドキュメントの最後に置く節です。注記(番号つき)、用語の定義、出典(データ時点つき)をまとめて出します。中身のない部分は描かれず、3 つとも空なら何も出ません。
6
+
7
+ ```tsx
8
+ import { DocNotesAndSources } from "@squadbase/vantage/doc";
9
+ import type { DocNotesAndSourcesProps, DocDefinition, DocSource } from "@squadbase/vantage/doc";
10
+ ```
11
+
12
+ > [!NOTE]
13
+ > これは **`<Document>` 直下に置く 1 セクション**です。見出し・本文の大きさや幅は `<Document>` が決めるので、ここでは寸法を指定しません。Markdown 文字列は解釈されません。ページ全体の組み方は [ドキュメント](page-types/doc) を参照してください。
14
+
15
+ ## props
16
+
17
+ | Prop | Type | Default | 説明 |
18
+ | --- | --- | --- | --- |
19
+ | `title` | `string` | `"注記・出典"` | 節の見出し。 |
20
+ | `headingLevel` | `2 \| 3` | `2` | 見出しの階層。`<Document>` 直下なら `2`、別の節の中なら `3`。小見出しは 1 つ下がる。 |
21
+ | `notes` | `ReactNode[]` | | 注記。番号つきの一覧で出る(速報値・除外条件など)。 |
22
+ | `definitions` | `DocDefinition[]` | | 用語の定義。`{ term: string; description: ReactNode }`。 |
23
+ | `sources` | `DocSource[]` | | 出典。`{ name: string; asOf?: string }`。`asOf` は日付のみ(例: `"2026-10-03"`)で、「(データ時点 2026-10-03)」と出る。 |
24
+
25
+ ## 使い方
26
+
27
+ ```tsx
28
+ import { Document, DocNotesAndSources } from "@squadbase/vantage/doc";
29
+
30
+ <Document>
31
+ {/* …本文の節… */}
32
+ <DocNotesAndSources
33
+ notes={["9 月の数値は速報値です。確定値は 10 月 10 日に更新します。", "返金分は売上から除いています。"]}
34
+ definitions={[{ term: "解約率", description: "月初契約数に対する、当月に解約した契約数の割合。" }]}
35
+ sources={[{ name: "契約管理 DB", asOf: "2026-10-03" }, { name: "会計システム" }]}
36
+ />
37
+ </Document>
38
+ ```
39
+
40
+ ## 注意
41
+
42
+ - 小見出し「注記」「用語の定義」「出典」と「(データ時点 …)」は固定の日本語です。
43
+ - 各部分は印刷時に途中で改ページされないようにまとまります。
@@ -0,0 +1,46 @@
1
+ # DocReportHeader
2
+
3
+ > ドキュメントの冒頭。タイトル、サブタイトル、期間・時点・作成者・出典。
4
+
5
+ ドキュメントの冒頭に置くセクションです。`h1` のタイトルと、期間・データ時点・作成者・出典の短い事実表(`dl`)を出します。`h1` を持つのはこの block だけで、以降のセクションは `h2` から始まります。
6
+
7
+ ```tsx
8
+ import { DocReportHeader } from "@squadbase/vantage/doc";
9
+ import type { DocReportHeaderProps } from "@squadbase/vantage/doc";
10
+ ```
11
+
12
+ > [!NOTE]
13
+ > これは **`<Document>` 直下に並べる 1 セクション分**です。見出し・本文の大きさや幅は `<Document>` が決めるので、ここでは寸法を指定しません。 `subtitle` は `string` か `ReactNode` で、Markdown 文字列は解釈されません。 ページ全体の組み方は [ドキュメント](page-types/doc) を参照してください。
14
+
15
+ ## props
16
+
17
+ | Prop | Type | 説明 |
18
+ | --- | --- | --- |
19
+ | `title` | `string` | ドキュメントの題(`h1`)。対象と期間を書き、スローガンにしない。**必須**。 |
20
+ | `subtitle` | `ReactNode` | 題の下の 1 行(誰向けか、など)。`string` か `ReactNode`。 |
21
+ | `period` | `string` | 数字の対象期間(「2026 年 9 月」「2026-07-01 〜 2026-09-30」)。 |
22
+ | `asOf` | `string` | データを取った日。日付だけを書く(「2026-10-03」)。block が「データ時点」の語を付ける。 |
23
+ | `author` | `string` | 作成者。 |
24
+ | `source` | `string` | 数字の出どころ(「受注管理システム、会計システム」)。1 つの文字列で書く。 |
25
+
26
+ ## 使い方
27
+
28
+ ```tsx
29
+ import { Document, DocReportHeader } from "@squadbase/vantage/doc";
30
+
31
+ <Document>
32
+ <DocReportHeader
33
+ title="2026 年 9 月 月次事業報告"
34
+ subtitle="経営会議向け"
35
+ period="2026-09-01 〜 2026-09-30"
36
+ asOf="2026-10-03"
37
+ author="事業企画チーム"
38
+ source="受注管理システム、会計システム"
39
+ />
40
+ </Document>
41
+ ```
42
+
43
+ ## 注意
44
+
45
+ - 空の項目は「—」ではなく、行ごと省かれます。
46
+ - 印刷時はヘッダー全体が 1 ページに収まるよう、ページをまたぎません。
@@ -0,0 +1,83 @@
1
+ # CSV
2
+
3
+ > .csv を置くだけで表として読めるページになる。列の型の推定、ファイル名からのタイトル、25MB / 20 万行の上限。
4
+
5
+ `.csv` を置くだけで、そのファイルは**表として読めるページ**になります(`src/sales-export.csv` →
6
+ `/sales-export`)。tsx は書きません。ダウンロードしなくても、ブラウザでそのまま中身を確かめられます。
7
+
8
+ ## 置き方
9
+
10
+ ページ走査のルート(`src/` があればその中)にファイルを置くだけです。
11
+
12
+ | ファイル | ルート | タイトル |
13
+ |---|---|---|
14
+ | `sales-export.csv` | `/sales-export` | Sales Export |
15
+ | `data/june.csv` | `/data/june` | June |
16
+ | `regions/index.csv` | `/regions` | Regions |
17
+
18
+ - **タイトルはファイル名から作られます。** 区切り(`-`・`_`)で単語に分け、先頭を大文字にします。
19
+ `index.csv` はディレクトリ名を使います。データファイルに `definePage` は書けないので、
20
+ 名前を変えたいときはファイルをリネームします。
21
+ - 見出しの下には元のファイル名が、右上にはダウンロードボタンが出ます。
22
+
23
+ ## できること
24
+
25
+ - **表計算ソフトの見た目で読める。** 列は A / B / C、左に行番号、1 行目はヘッダとして固定され、
26
+ 下端に行数と列数が出ます。セルを選んで `Cmd/Ctrl+C` でコピーできます。
27
+ - **列の型を推定。** 先頭 500 行を見て、9 割以上が数値なら数値列(桁区切り・右寄せ)、
28
+ `2026-06-30` の形の日付なら日付列として扱います。
29
+ - **文字コードを自動判定。** UTF-8(BOM あり / なし)で読み、文字化けが多ければ Shift_JIS で
30
+ 読み直します。Excel から書き出した日本語の CSV もそのまま置けます。
31
+ - **ダークモードに追従。** 配色はアプリのテーマトークンで塗られます。
32
+
33
+ ## 制限
34
+
35
+ - **読み取り専用です。** 編集・並べ替え・絞り込みはできません。それが要るデータは
36
+ `server/api/` から配って [`DataTable`](parts/data-table) で描きます。
37
+ - **25MB を超えるファイルは表示されません。** パースはブラウザで行うためです。そのページには
38
+ エラーとダウンロードボタンが出て、`vantage check` も `FILE_PAGE_TOO_LARGE` で先に警告します。
39
+ - **20 万行を超えると、先頭の 20 万行だけを表示します。** 下端に「First 200,000 of … rows」と
40
+ 出るので、残りはダウンロードして見ます。
41
+ - 1 行目は必ずヘッダとして扱われます。空行は読み飛ばされます。
42
+ - **`.tsv` はページになりません**(`UNSUPPORTED_PAGE_FILE` 警告)。`.csv` に変換して置きます
43
+ (ほかの形式は [ページにならないファイル](page-types))。
44
+ - ページにしたくない `.csv` は `_` を前置します(`_sales-export.csv`)。
45
+
46
+ ## 自分で描く
47
+
48
+ タイトルや説明を自分で付けたいときは、`_` を前置してページになるのを止め、tsx から
49
+ `FilePageView` で描きます。ファイルの URL は `?url&no-inline` を付けて import します
50
+ (小さいファイルが JS に埋め込まれて、ダウンロードできなくなるのを防ぐためです)。
51
+
52
+ ```tsx
53
+ // src/sales.tsx → /sales(src/_sales-export.csv を描く)
54
+ import { definePage } from "@squadbase/vantage";
55
+ import { FilePageView } from "@squadbase/vantage/table";
56
+ import src from "./_sales-export.csv?url&no-inline";
57
+
58
+ export const page = definePage({ title: "売上エクスポート" });
59
+
60
+ export default function Sales() {
61
+ return <FilePageView src={src} kind="csv" fileName="sales-export.csv" title="売上エクスポート" />;
62
+ }
63
+ ```
64
+
65
+ ダッシュボードの一部として表だけを埋めたいときは `loadWorkbook` と `TableViewer` を組み合わせます
66
+ ([Excel](page-types/excel) の API を参照)。
67
+
68
+ ## API
69
+
70
+ ```tsx
71
+ import { FilePageView } from "@squadbase/vantage/table";
72
+ ```
73
+
74
+ ### FilePageView
75
+
76
+ ファイルページそのものです。URL を渡すと、取得・パース・表示まで行います。
77
+
78
+ | Prop | Type | Default | 説明 |
79
+ | --- | --- | --- | --- |
80
+ | `src` | `string` | | ファイルの URL。`import src from "./_x.csv?url&no-inline"` で得る。 |
81
+ | `kind` | `"csv" \| "xlsx"` | | ファイルの種類(拡張子からドットを除いたもの)。 |
82
+ | `fileName` | `string` | | 元のファイル名。見出しの下とダウンロード時の名前に使う。 |
83
+ | `title` | `string` | `fileName` | 見出し。 |
@@ -0,0 +1,83 @@
1
+ # ドキュメント
2
+
3
+ > <name>.doc.tsx を置くと上から読む文章のページになる。クラス無しで組版され、「PDF として保存」で印刷できる。
4
+
5
+ `<name>.doc.tsx` を置くと、そのページは**ドキュメント**になります(`src/june-summary.doc.tsx` →
6
+ `/june-summary`)。報告書や調査のまとめのように、文章と図表を上から読む形で残したいときに使います。
7
+
8
+ ## 置き方
9
+
10
+ 中身は `<Document>` を返す普通の React コンポーネントです。中には素の HTML 要素をそのまま書きます。
11
+
12
+ ```tsx
13
+ // src/june-summary.doc.tsx → /june-summary
14
+ import { definePage } from "@squadbase/vantage";
15
+ import { Document } from "@squadbase/vantage/doc";
16
+
17
+ export const page = definePage({ title: "6月度サマリー" });
18
+
19
+ export default function JuneSummary() {
20
+ return (
21
+ <Document>
22
+ <h1>6月度サマリー</h1>
23
+ <p>6月の売上は目標を 5% 上回りました。</p>
24
+ <table>…</table>
25
+ </Document>
26
+ );
27
+ }
28
+ ```
29
+
30
+ ## できること
31
+
32
+ - **クラスを書かなくても組版される。** `h1`〜`h4`・`p`・`ul` / `ol`・`table`・`blockquote`・
33
+ `pre` / `code`・`hr`・`a`・`figure` / `figcaption`・`img` に、見出しの大きさ・余白・罫線が当たります。
34
+ 要素に Tailwind のクラスを付ければ、そちらが優先されます。
35
+ - **チャートを文中に置ける。** [`EChart`](parts/echart) をそのまま段落の間に置けます。
36
+ - **PDF として保存。** 右下の「PDF として保存」ボタン(ブラウザの言語が日本語以外なら
37
+ 「Save as PDF」)でブラウザの印刷ダイアログが開きます。紙に載るのはドキュメントの本文だけで、
38
+ アプリのヘッダーやサイドバーは載りません。
39
+ - **ダークモードでもライトで印刷。** 印刷の間だけライトの配色に切り替え、チャートも描き直してから
40
+ 印刷します。終われば元に戻ります。
41
+ - **テーマに追従。** 配色・書体・本文の幅は `--doc-*` トークンで、既定はアプリのトークンを指します
42
+ (一覧は [UI とテーマ](ui-and-theming))。
43
+
44
+ ## 制限
45
+
46
+ - **PDF はブラウザの印刷機能で作ります。** Vantage が PDF ファイルを生成するわけではないので、
47
+ 改ページの位置や余白はブラウザの印刷設定に従います。
48
+ - 印刷ボタンは消せません。ドキュメントからの出口として、常に右下に出ます。
49
+ - `.doc` を付けられるのはルートになる `.tsx` / `.jsx` だけです
50
+ ([ページにならないファイル](page-types))。
51
+
52
+ ## API
53
+
54
+ ```tsx
55
+ import { Document } from "@squadbase/vantage/doc";
56
+ import type { DocumentTheme } from "@squadbase/vantage/doc";
57
+ ```
58
+
59
+ ### Document
60
+
61
+ `<article>` の props(`className`・`style`・`id` など)もそのまま渡せます。
62
+
63
+ | Prop | Type | 説明 |
64
+ | --- | --- | --- |
65
+ | `theme` | `DocumentTheme` | このドキュメントだけ配色・書体を上書きする。省いた項目はアプリのテーマに従う。 |
66
+
67
+ ### DocumentTheme
68
+
69
+ どれも CSS の値をそのまま書きます(`"#2563eb"`・`"16px"` など)。
70
+
71
+ | Prop | Type | 説明 |
72
+ | --- | --- | --- |
73
+ | `fg` | `string` | 本文の色。 |
74
+ | `muted` | `string` | 引用・キャプションの色。 |
75
+ | `accent` | `string` | リンクの色。 |
76
+ | `border` | `string` | 罫線の色。 |
77
+ | `subtle` | `string` | インラインコード・コードブロック・表の見出し行の背景。 |
78
+ | `fontBody` | `string` | 本文の書体。 |
79
+ | `fontHeading` | `string` | 見出しの書体。 |
80
+ | `fontMono` | `string` | コードの書体。 |
81
+ | `sizeBody` | `string` | 本文の文字サイズ。 |
82
+ | `lineHeight` | `string` | 本文の行間。 |
83
+ | `maxWidth` | `string` | 本文の幅。 |
@@ -0,0 +1,82 @@
1
+ # Excel
2
+
3
+ > .xlsx を置くだけで表として読めるページになる。シートの切り替えと元ファイルのダウンロード付き。
4
+
5
+ `.xlsx` を置くだけで、そのブックは**表として読めるページ**になります(`src/data/june.xlsx` →
6
+ `/data/june`)。ビューアは [CSV](page-types/csv) と同じもので、下端のタブでシートを切り替えられます。
7
+
8
+ ## 置き方
9
+
10
+ ページ走査のルート(`src/` があればその中)にファイルを置くだけです。タイトルはファイル名から
11
+ 作られます(`june.xlsx` → 「June」、`index.xlsx` はディレクトリ名)。名前を変えたいときは
12
+ ファイルをリネームします。
13
+
14
+ ## できること
15
+
16
+ - **シートを切り替える。** ブックに 2 枚以上シートがあれば、下端にシート名のタブが並びます。
17
+ - **元ファイルをダウンロードする。** 右上のボタンで、置いた `.xlsx` そのものが落とせます。
18
+ - **値として読める。** 日付のセルは日付として、数値は桁区切りで右寄せに表示されます。
19
+ そのほかの見た目・コピー・型の推定は [CSV](page-types/csv) と同じです。
20
+
21
+ ## 制限
22
+
23
+ - **数式・グラフ・セル書式・結合セルは再現されません。** 表示されるのはセルの値だけです
24
+ (数式は計算結果の値)。見た目まで共有したいときはダウンロードしてもらいます。
25
+ - **25MB を超えるブックは表示されず、20 万行を超えるシートは先頭 20 万行だけ**を表示します
26
+ ([CSV](page-types/csv) と同じ)。
27
+ - パスワード付きや壊れたブックは、そのページにエラーが出ます。
28
+ - **`.xls`・`.xlsm`・`.xlsb`・`.ods`・`.numbers` はページになりません**(`UNSUPPORTED_PAGE_FILE`
29
+ 警告)。Excel で `.xlsx` として保存し直して置きます。
30
+ - ページにしたくない `.xlsx` は `_` を前置します(`_june.xlsx`)。Excel が開いている間にできる
31
+ `~$june.xlsx` は無視されます。
32
+
33
+ ## 自分で描く
34
+
35
+ タイトルを付けたいときは、`_` を前置してページになるのを止め、[CSV](page-types/csv) と同じく
36
+ `FilePageView` に `kind="xlsx"` を渡します。
37
+
38
+ ダッシュボードのカードの中に表だけを埋めたいときは、`loadWorkbook` でパースして `TableViewer` で
39
+ 描きます。`height` を渡すと、ビューポートの残りを埋めずにその高さに収まります。
40
+
41
+ ```tsx
42
+ import { useQuery } from "@squadbase/vantage/query";
43
+ import { TableViewer, loadWorkbook } from "@squadbase/vantage/table";
44
+ import src from "./_june.xlsx?url&no-inline";
45
+
46
+ export function JuneTable() {
47
+ const { data } = useQuery({ queryKey: ["june.xlsx"], queryFn: () => loadWorkbook(src, "xlsx") });
48
+ const sheet = data?.sheets[0];
49
+ return sheet ? <TableViewer sheet={sheet} height={360} /> : null;
50
+ }
51
+ ```
52
+
53
+ ## API
54
+
55
+ ```tsx
56
+ import {
57
+ FilePageView, TableViewer, SheetGrid, loadWorkbook, toSheet,
58
+ } from "@squadbase/vantage/table";
59
+ ```
60
+
61
+ `FilePageView` の props は [CSV](page-types/csv) を参照してください。
62
+
63
+ ### TableViewer
64
+
65
+ 1 シートを枠付きで描きます。下端にシートのタブと行数・列数が出ます。
66
+
67
+ | Prop | Type | Default | 説明 |
68
+ | --- | --- | --- | --- |
69
+ | `sheet` | `TableSheet` | | 描くシート。`loadWorkbook` か `toSheet` で作る。 |
70
+ | `sheetNames` | `string[]` | | 全シートの名前。2 つ以上あるとタブが出る。 |
71
+ | `activeSheet` | `number` | `0` | 選ばれているタブの位置。 |
72
+ | `onSheetChange` | `(index: number) => void` | | タブが押されたとき。 |
73
+ | `height` | `number \| string` | | 枠の高さ。省くとビューポートの残りを埋める。 |
74
+ | `className` | `string` | | 枠に足すクラス。 |
75
+
76
+ ### 関数
77
+
78
+ | 名前 | 役割 |
79
+ |---|---|
80
+ | `loadWorkbook(src, kind)` | URL のファイルを取得してパースし、`{ sheets: TableSheet[] }` を返す。失敗は `FilePageError` で reject |
81
+ | `toSheet(name, rows)` | 行の配列(1 行目がヘッダ)から `TableSheet` を作る。手元のデータを `TableViewer` で見せたいとき |
82
+ | `SheetGrid` | グリッド本体だけ。高さの決まった親の中に置く |
@@ -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()` | 今見えているスライドかどうか。入場アニメーションを始める合図に使う |