@squadbase/vantage 0.6.2-dev1.42c4e48 → 0.6.2-dev1.51e401a

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 (295) hide show
  1. package/dist/{build-MFWRPYKW.js → build-U7GO26HR.js} +7 -7
  2. package/dist/{build-MFWRPYKW.js.map → build-U7GO26HR.js.map} +1 -1
  3. package/dist/{check-ZBIH422T.js → check-MRVAIHG5.js} +5 -5
  4. package/dist/{check-ZBIH422T.js.map → check-MRVAIHG5.js.map} +1 -1
  5. package/dist/chunk-2IAPIOPS.js +152 -0
  6. package/dist/chunk-2IAPIOPS.js.map +1 -0
  7. package/dist/chunk-3RJEOP3J.js +174 -0
  8. package/dist/chunk-3RJEOP3J.js.map +1 -0
  9. package/dist/chunk-77CISBMG.js +7581 -0
  10. package/dist/chunk-77CISBMG.js.map +1 -0
  11. package/dist/{chunk-V3LF7BE7.js → chunk-ANZLVSEP.js} +4 -5
  12. package/dist/chunk-ANZLVSEP.js.map +1 -0
  13. package/dist/{chunk-XQUSGIDG.js → chunk-CKWPK4RO.js} +10 -3
  14. package/dist/chunk-CKWPK4RO.js.map +1 -0
  15. package/dist/chunk-EG4PX726.js +678 -0
  16. package/dist/chunk-EG4PX726.js.map +1 -0
  17. package/dist/chunk-NZ5QIIG4.js +74 -0
  18. package/dist/chunk-NZ5QIIG4.js.map +1 -0
  19. package/dist/{chunk-7DZGJQ3P.js → chunk-PJ4SPXHS.js} +23 -6
  20. package/dist/chunk-PJ4SPXHS.js.map +1 -0
  21. package/dist/{chunk-OB6UBJXF.js → chunk-QNOX7WLZ.js} +127 -36
  22. package/dist/chunk-QNOX7WLZ.js.map +1 -0
  23. package/dist/{chunk-PXRX5PEC.js → chunk-ROHNXP7J.js} +73 -4
  24. package/dist/chunk-ROHNXP7J.js.map +1 -0
  25. package/dist/{chunk-CEXAQQ5W.js → chunk-S5MDTHH7.js} +180 -18
  26. package/dist/chunk-S5MDTHH7.js.map +1 -0
  27. package/dist/{chunk-IBGOCWJB.js → chunk-SDJTTMLK.js} +247 -86
  28. package/dist/chunk-SDJTTMLK.js.map +1 -0
  29. package/dist/{chunk-QEWCYW3I.js → chunk-SHZM3EXB.js} +29 -8
  30. package/dist/chunk-SHZM3EXB.js.map +1 -0
  31. package/dist/chunk-TRMHNMMZ.js +61 -0
  32. package/dist/chunk-TRMHNMMZ.js.map +1 -0
  33. package/dist/{chunk-A2UUGASH.js → chunk-U736PVHY.js} +2 -2
  34. package/dist/chunk-U736PVHY.js.map +1 -0
  35. package/dist/{chunk-JKLLFVEU.js → chunk-UWSQUHX6.js} +4 -99
  36. package/dist/chunk-UWSQUHX6.js.map +1 -0
  37. package/dist/cli.js +6 -6
  38. package/dist/client/index.d.ts +2 -0
  39. package/dist/client/index.js +8 -2
  40. package/dist/client/index.js.map +1 -1
  41. package/dist/components/index.d.ts +1617 -101
  42. package/dist/components/index.js +7 -4
  43. package/dist/delta-text-CbrOaW83.d.ts +17 -0
  44. package/dist/{dev-DCTOHQ6W.js → dev-O42JFQ64.js} +7 -7
  45. package/dist/{dev-DCTOHQ6W.js.map → dev-O42JFQ64.js.map} +1 -1
  46. package/dist/doc/index.d.ts +215 -2
  47. package/dist/doc/index.js +423 -5
  48. package/dist/doc/index.js.map +1 -1
  49. package/dist/{doctor-5E2VEZPK.js → doctor-YD3XAAOT.js} +5 -5
  50. package/dist/{doctor-5E2VEZPK.js.map → doctor-YD3XAAOT.js.map} +1 -1
  51. package/dist/format-DihQkL1N.d.ts +249 -0
  52. package/dist/markdown/index.js +1 -1
  53. package/dist/markdown/index.js.map +1 -1
  54. package/dist/query/index.js +2 -2
  55. package/dist/{routes-3SGAFDMC.js → routes-PVKNT777.js} +4 -4
  56. package/dist/{routes-3SGAFDMC.js.map → routes-PVKNT777.js.map} +1 -1
  57. package/dist/slide/index.d.ts +272 -1
  58. package/dist/slide/index.js +1025 -4
  59. package/dist/slide/index.js.map +1 -1
  60. package/dist/table/index.js +11 -8
  61. package/dist/table/index.js.map +1 -1
  62. package/dist/ui/index.d.ts +8 -2
  63. package/dist/ui/index.js +22 -112
  64. package/dist/ui/index.js.map +1 -1
  65. package/dist/{upgrade-DBBE6GIR.js → upgrade-6DT7ADRP.js} +4 -4
  66. package/dist/{upgrade-DBBE6GIR.js.map → upgrade-6DT7ADRP.js.map} +1 -1
  67. package/dist/vite/index.js +3 -3
  68. package/docs/en/agent-skills.md +1 -1
  69. package/docs/en/changelog.md +2 -0
  70. package/docs/en/components.md +42 -17
  71. package/docs/en/doc/delta-text.md +40 -0
  72. package/docs/en/doc/doc-action-items.md +49 -0
  73. package/docs/en/doc/doc-callout.md +38 -0
  74. package/docs/en/doc/doc-data-table.md +60 -0
  75. package/docs/en/doc/doc-executive-summary.md +64 -0
  76. package/docs/en/doc/doc-figure.md +56 -0
  77. package/docs/en/doc/doc-key-findings.md +61 -0
  78. package/docs/en/doc/doc-kpi-scorecard.md +80 -0
  79. package/docs/en/doc/doc-notes-and-sources.md +43 -0
  80. package/docs/en/doc/doc-report-header.md +46 -0
  81. package/docs/en/pages-and-metadata.md +15 -0
  82. package/docs/en/parts/area-chart.md +99 -0
  83. package/docs/en/parts/bar-chart.md +91 -0
  84. package/docs/en/parts/bar-list.md +50 -0
  85. package/docs/en/parts/category-bar.md +37 -0
  86. package/docs/en/parts/chart-frame.md +39 -0
  87. package/docs/en/parts/data-table.md +22 -0
  88. package/docs/en/parts/delta.md +51 -0
  89. package/docs/en/parts/donut-chart.md +72 -0
  90. package/docs/en/parts/format.md +43 -0
  91. package/docs/en/parts/funnel-steps.md +2 -1
  92. package/docs/en/parts/heatmap.md +53 -0
  93. package/docs/en/parts/kpi-card.md +58 -0
  94. package/docs/en/parts/legend.md +35 -0
  95. package/docs/en/parts/line-chart.md +94 -0
  96. package/docs/en/parts/metric-value.md +3 -2
  97. package/docs/en/parts/progress-circle.md +33 -0
  98. package/docs/en/parts/sample-data.md +39 -0
  99. package/docs/en/parts/scatter-chart.md +56 -0
  100. package/docs/en/parts/sparkline.md +1 -1
  101. package/docs/en/parts/tracker.md +36 -0
  102. package/docs/en/parts/trend-indicator.md +17 -1
  103. package/docs/en/parts/updated-at.md +30 -0
  104. package/docs/en/parts/waterfall-chart.md +56 -0
  105. package/docs/en/slide/slide-chart-full.md +48 -0
  106. package/docs/en/slide/slide-chart-insight.md +52 -0
  107. package/docs/en/slide/slide-columns.md +46 -0
  108. package/docs/en/slide/slide-comparison.md +68 -0
  109. package/docs/en/slide/slide-cover.md +39 -0
  110. package/docs/en/slide/slide-exec-summary.md +47 -0
  111. package/docs/en/slide/slide-heading.md +38 -0
  112. package/docs/en/slide/slide-kpi-grid.md +55 -0
  113. package/docs/en/slide/slide-kpi-hero.md +58 -0
  114. package/docs/en/slide/slide-next-actions.md +49 -0
  115. package/docs/en/slide/slide-scorecard-table.md +54 -0
  116. package/docs/en/slide/slide-section.md +44 -0
  117. package/docs/en/slide/slide-source-line.md +34 -0
  118. package/docs/en/ui/alert-dialog.md +42 -0
  119. package/docs/en/ui/avatar.md +31 -0
  120. package/docs/en/ui/combobox.md +74 -0
  121. package/docs/en/ui/drawer.md +41 -0
  122. package/docs/en/ui/empty.md +1 -1
  123. package/docs/en/ui/error-state.md +4 -3
  124. package/docs/en/ui/field.md +42 -0
  125. package/docs/en/ui/hover-card.md +21 -0
  126. package/docs/en/ui/kbd.md +17 -0
  127. package/docs/en/ui/loading.md +1 -1
  128. package/docs/en/ui/pagination.md +36 -0
  129. package/docs/en/ui/radio-group.md +21 -0
  130. package/docs/en/ui/toast.md +44 -0
  131. package/docs/en/ui/toggle-group.md +4 -3
  132. package/docs/en/ui-and-theming.md +1 -1
  133. package/docs/index.json +917 -77
  134. package/docs/ja/agent-skills.md +1 -1
  135. package/docs/ja/changelog.md +2 -0
  136. package/docs/ja/components.md +39 -16
  137. package/docs/ja/doc/delta-text.md +40 -0
  138. package/docs/ja/doc/doc-action-items.md +49 -0
  139. package/docs/ja/doc/doc-callout.md +38 -0
  140. package/docs/ja/doc/doc-data-table.md +60 -0
  141. package/docs/ja/doc/doc-executive-summary.md +64 -0
  142. package/docs/ja/doc/doc-figure.md +56 -0
  143. package/docs/ja/doc/doc-key-findings.md +61 -0
  144. package/docs/ja/doc/doc-kpi-scorecard.md +80 -0
  145. package/docs/ja/doc/doc-notes-and-sources.md +43 -0
  146. package/docs/ja/doc/doc-report-header.md +46 -0
  147. package/docs/ja/page-types/slide.md +1 -0
  148. package/docs/ja/pages-and-metadata.md +15 -0
  149. package/docs/ja/parts/area-chart.md +49 -25
  150. package/docs/ja/parts/bar-chart.md +50 -24
  151. package/docs/ja/parts/bar-list.md +31 -8
  152. package/docs/ja/parts/chart-frame.md +36 -0
  153. package/docs/ja/parts/data-table.md +22 -0
  154. package/docs/ja/parts/delta.md +51 -0
  155. package/docs/ja/parts/donut-chart.md +45 -26
  156. package/docs/ja/parts/format.md +44 -0
  157. package/docs/ja/parts/funnel-steps.md +27 -8
  158. package/docs/ja/parts/heatmap.md +45 -0
  159. package/docs/ja/parts/kpi-card.md +56 -0
  160. package/docs/ja/parts/legend.md +36 -0
  161. package/docs/ja/parts/line-chart.md +48 -22
  162. package/docs/ja/parts/metric-value.md +3 -2
  163. package/docs/ja/parts/sample-data.md +61 -0
  164. package/docs/ja/parts/scatter-chart.md +69 -0
  165. package/docs/ja/parts/sparkline.md +1 -1
  166. package/docs/ja/parts/trend-indicator.md +17 -1
  167. package/docs/ja/parts/updated-at.md +27 -0
  168. package/docs/ja/parts/waterfall-chart.md +61 -0
  169. package/docs/ja/slide/slide-chart-full.md +48 -0
  170. package/docs/ja/slide/slide-chart-insight.md +52 -0
  171. package/docs/ja/slide/slide-columns.md +46 -0
  172. package/docs/ja/slide/slide-comparison.md +68 -0
  173. package/docs/ja/slide/slide-cover.md +39 -0
  174. package/docs/ja/slide/slide-exec-summary.md +47 -0
  175. package/docs/ja/slide/slide-heading.md +38 -0
  176. package/docs/ja/slide/slide-kpi-grid.md +55 -0
  177. package/docs/ja/slide/slide-kpi-hero.md +58 -0
  178. package/docs/ja/slide/slide-next-actions.md +49 -0
  179. package/docs/ja/slide/slide-scorecard-table.md +54 -0
  180. package/docs/ja/slide/slide-section.md +44 -0
  181. package/docs/ja/slide/slide-source-line.md +34 -0
  182. package/docs/ja/ui/empty.md +1 -1
  183. package/docs/ja/ui/error-state.md +4 -3
  184. package/docs/ja/ui/loading.md +1 -1
  185. package/docs/ja/ui/toggle-group.md +4 -3
  186. package/docs/ja/ui-and-theming.md +2 -2
  187. package/package.json +26 -24
  188. package/registry/ui/accordion.tsx +4 -2
  189. package/registry/ui/alert-dialog.tsx +3 -3
  190. package/registry/ui/alert.tsx +3 -1
  191. package/registry/ui/app-shell.tsx +145 -2
  192. package/registry/ui/area-chart.tsx +3111 -166
  193. package/registry/ui/attention-list.tsx +465 -0
  194. package/registry/ui/avatar.tsx +1 -1
  195. package/registry/ui/badge.tsx +3 -1
  196. package/registry/ui/bar-chart.tsx +3105 -164
  197. package/registry/ui/bar-list.tsx +3877 -181
  198. package/registry/ui/box-plot-chart.tsx +4214 -0
  199. package/registry/ui/breadcrumb.tsx +3 -1
  200. package/registry/ui/button.tsx +3 -1
  201. package/registry/ui/calendar.tsx +3 -1
  202. package/registry/ui/card.tsx +4 -2
  203. package/registry/ui/category-bar.tsx +1233 -16
  204. package/registry/ui/chart-frame.tsx +1604 -0
  205. package/registry/ui/checkbox.tsx +3 -1
  206. package/registry/ui/collapsible.tsx +3 -1
  207. package/registry/ui/combobox.tsx +2 -2
  208. package/registry/ui/command.tsx +3 -1
  209. package/registry/ui/dashboard-card.tsx +71 -28
  210. package/registry/ui/data-table.tsx +882 -68
  211. package/registry/ui/date-range-picker.tsx +400 -65
  212. package/registry/ui/delta.tsx +350 -0
  213. package/registry/ui/dialog.tsx +5 -3
  214. package/registry/ui/donut-chart.tsx +3184 -182
  215. package/registry/ui/drawer.tsx +1 -1
  216. package/registry/ui/dropdown-menu.tsx +5 -3
  217. package/registry/ui/echart.tsx +761 -69
  218. package/registry/ui/field.tsx +1 -1
  219. package/registry/ui/filter-bar.tsx +212 -26
  220. package/registry/ui/funnel-steps.tsx +3622 -53
  221. package/registry/ui/heatmap.tsx +2027 -0
  222. package/registry/ui/histogram-chart.tsx +4284 -0
  223. package/registry/ui/hover-card.tsx +2 -2
  224. package/registry/ui/input-group.tsx +3 -1
  225. package/registry/ui/input.tsx +3 -1
  226. package/registry/ui/kbd.tsx +3 -1
  227. package/registry/ui/kpi-card.tsx +905 -0
  228. package/registry/ui/label.tsx +3 -1
  229. package/registry/ui/legend.tsx +3817 -0
  230. package/registry/ui/line-chart.tsx +3109 -158
  231. package/registry/ui/metric-value.tsx +9 -1
  232. package/registry/ui/multi-select.tsx +170 -14
  233. package/registry/ui/page-shell.tsx +244 -51
  234. package/registry/ui/pagination.tsx +3 -1
  235. package/registry/ui/paired-chart.tsx +4086 -0
  236. package/registry/ui/placeholder.tsx +8 -2
  237. package/registry/ui/popover.tsx +4 -2
  238. package/registry/ui/progress-circle.tsx +773 -12
  239. package/registry/ui/progress.tsx +3 -1
  240. package/registry/ui/radio-group.tsx +1 -1
  241. package/registry/ui/sample-data.tsx +230 -0
  242. package/registry/ui/scatter-chart.tsx +4503 -0
  243. package/registry/ui/scroll-area.tsx +3 -2
  244. package/registry/ui/searchable-select.tsx +153 -10
  245. package/registry/ui/section-header.tsx +5 -3
  246. package/registry/ui/segmented-control.tsx +7 -2
  247. package/registry/ui/select.tsx +4 -2
  248. package/registry/ui/separator.tsx +3 -1
  249. package/registry/ui/sheet.tsx +4 -2
  250. package/registry/ui/sidebar.tsx +4 -2
  251. package/registry/ui/skeleton.tsx +4 -2
  252. package/registry/ui/slider.tsx +4 -2
  253. package/registry/ui/sparkline.tsx +84 -9
  254. package/registry/ui/spinner.tsx +3 -1
  255. package/registry/ui/states.tsx +194 -8
  256. package/registry/ui/status-badge.tsx +246 -39
  257. package/registry/ui/switch.tsx +3 -1
  258. package/registry/ui/table.tsx +4 -2
  259. package/registry/ui/tabs.tsx +5 -3
  260. package/registry/ui/textarea.tsx +3 -1
  261. package/registry/ui/toast.tsx +2 -2
  262. package/registry/ui/toggle-group.tsx +3 -1
  263. package/registry/ui/toggle.tsx +3 -1
  264. package/registry/ui/tooltip.tsx +10 -4
  265. package/registry/ui/tracker.tsx +798 -19
  266. package/registry/ui/trend-indicator.tsx +164 -9
  267. package/registry/ui/updated-at.tsx +276 -0
  268. package/registry/ui/waterfall-chart.tsx +4561 -0
  269. package/skills/vantage-add-feature/SKILL.md +5 -0
  270. package/skills/vantage-design/SKILL.md +60 -52
  271. package/skills/vantage-design/references/extract.md +26 -27
  272. package/skills/vantage-design/references/format.md +12 -172
  273. package/skills/vantage-design/references/presets.md +50 -110
  274. package/skills/vantage-pitfalls/SKILL.md +5 -0
  275. package/skills/vantage-slide/SKILL.md +54 -36
  276. package/templates/AGENTS.md +45 -16
  277. package/templates/agents/api.md +7 -0
  278. package/templates/agents/doc.md +48 -0
  279. package/templates/agents/page.md +69 -2
  280. package/templates/agents/slide.md +77 -3
  281. package/theme.css +247 -149
  282. package/dist/chunk-5ZOP4SQR.js +0 -47
  283. package/dist/chunk-5ZOP4SQR.js.map +0 -1
  284. package/dist/chunk-7DZGJQ3P.js.map +0 -1
  285. package/dist/chunk-A2UUGASH.js.map +0 -1
  286. package/dist/chunk-AG6RZ2RR.js +0 -3208
  287. package/dist/chunk-AG6RZ2RR.js.map +0 -1
  288. package/dist/chunk-CEXAQQ5W.js.map +0 -1
  289. package/dist/chunk-IBGOCWJB.js.map +0 -1
  290. package/dist/chunk-JKLLFVEU.js.map +0 -1
  291. package/dist/chunk-OB6UBJXF.js.map +0 -1
  292. package/dist/chunk-PXRX5PEC.js.map +0 -1
  293. package/dist/chunk-QEWCYW3I.js.map +0 -1
  294. package/dist/chunk-V3LF7BE7.js.map +0 -1
  295. package/dist/chunk-XQUSGIDG.js.map +0 -1
@@ -0,0 +1,44 @@
1
+ # SlideSection
2
+
3
+ > 章の区切りの 1 枚。章タイトルと、任意で目次。
4
+
5
+ 章の区切りに置く 1 枚です。左に章タイトル、`items` を渡すと右に目次(番号つきの一覧)を出し、`current` の章を強調します。
6
+
7
+ ```tsx
8
+ import { SlideSection } from "@squadbase/vantage/slide";
9
+ import type { SlideSectionProps } 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
+ | `index` | `number` | 章番号。タイトルの上に「02」のように 2 桁で出る。 |
21
+ | `lead` | `string` | その章が何に答えるかを 1 行で。 |
22
+ | `items` | `string[]` | デッキの章の一覧。右側に番号つきの目次として出る。1 行ずつなので 6 件ほどまで。省くとタイトルが全幅を使う。 |
23
+ | `current` | `number` | `items` のうち強調する章(1 始まり)。 |
24
+
25
+ ## 使い方
26
+
27
+ ```tsx
28
+ import { Slide, SlideSection } from "@squadbase/vantage/slide";
29
+
30
+ <Slide>
31
+ <SlideSection
32
+ index={2}
33
+ title="解約の動向"
34
+ lead="どの層が、いつ離れているか"
35
+ items={["全体像", "解約の動向", "要因の分析", "次の打ち手"]}
36
+ current={2}
37
+ />
38
+ </Slide>
39
+ ```
40
+
41
+ ## 注意
42
+
43
+ - 段階表示(reveal)は持ちません。必要なら呼び出し側で `Steps` などで包んでください。
44
+ - 目次に出る番号は `items` の順で自動採番されます。`index` は章番号の表示だけに使われます。
@@ -0,0 +1,34 @@
1
+ # SlideSourceLine
2
+
3
+ > [部品] スライド 1 枚の足元の 1 行。時点・出典・ページ番号。
4
+
5
+ スライド 1 枚の足元に置く 1 行です。データの時点と出典、任意で右端にページ番号を出します。12 カラムのグリッドの最下段に置く**部品**で、1 枚まるごとの block ではありません。出すものがなければ何も描きません。
6
+
7
+ ```tsx
8
+ import { SlideSourceLine } from "@squadbase/vantage/slide";
9
+ import type { SlideSourceLineProps } 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
+ | `asOf` | `string` | 数字を取った日。日付のみ(例: `"2026-10-20"`)。「2026-10-20 時点」と表示される。「時点」は書かない。 |
20
+ | `source` | `string` | 出典(例: `"社内 BI"`)。「出典: 社内 BI」と表示される。 |
21
+ | `page` | `{ current: number; total: number }` | 右端に「3 / 12」と出すページ番号。呼び出し側から渡す。 |
22
+
23
+ ## 使い方
24
+
25
+ ```tsx
26
+ import { SlideSourceLine } from "@squadbase/vantage/slide";
27
+
28
+ <SlideSourceLine asOf="2026-10-20" source="社内 BI" page={{ current: 3, total: 12 }} />
29
+ ```
30
+
31
+ ## 注意
32
+
33
+ - ページ番号は SquadKit がスライドの位置を読めないため、`page` で渡します。
34
+ - 「… 時点」「出典: …」は固定の日本語です。
@@ -10,7 +10,7 @@ import { Empty } from "@squadbase/vantage/ui";
10
10
 
11
11
  | Prop | Type | Default | 説明 |
12
12
  | --- | --- | --- | --- |
13
- | `title` | `string` | `"Nothing here yet"` | 見出し。 |
13
+ | `title` | `string` | `"表示できるデータがありません"` | 見出し。 |
14
14
  | `description` | `string` | | 見出しの下の補足文。 |
15
15
  | `icon` | `ReactNode` | | 見出しの上に置く絵柄。 |
16
16
  | `action` | `ReactNode` | | 下部に置く次の一手(ボタンやリンク)。 |
@@ -10,8 +10,9 @@ import { ErrorState } from "@squadbase/vantage/ui";
10
10
 
11
11
  | Prop | Type | Default | 説明 |
12
12
  | --- | --- | --- | --- |
13
- | `title` | `string` | `"Something went wrong"` | 見出し。 |
14
- | `message` | `ReactNode` | | 詳細。エラーメッセージをそのまま出せます。 |
13
+ | `title` | `string` | `"データを読み込めませんでした"` | 見出し。 |
14
+ | `message` | `ReactNode` | `"時間をおいて再試行してください。解決しない場合は管理者にお問い合わせください。"` | 何が起きたか、次に何をすればよいかを平易な言葉で。 |
15
+ | `details` | `ReactNode` | | 技術的な詳細(エラーメッセージやステータスコード)。「詳細を表示」の中に折りたたまれます。 |
15
16
  | `action` | `ReactNode` | | 再試行ボタンなど。 |
16
17
  | `className` | `string` | | 足すクラス。 |
17
18
 
@@ -34,7 +35,7 @@ export default function Customers() {
34
35
  if (error)
35
36
  return (
36
37
  <ErrorState
37
- message={error.message}
38
+ details={error.message}
38
39
  action={<Button variant="outline" onClick={() => refetch()}>再試行</Button>}
39
40
  />
40
41
  );
@@ -12,7 +12,7 @@ import { Loading } from "@squadbase/vantage/ui";
12
12
 
13
13
  | Prop | Type | Default | 説明 |
14
14
  | --- | --- | --- | --- |
15
- | `label` | `string` | `"Loading…"` | スピナーの右に出すテキスト。 |
15
+ | `label` | `string` | `"読み込んでいます…"` | スピナーの右に出すテキスト。 |
16
16
  | `className` | `string` | | 足すクラス。既定では最小高 30vh で縦横中央に置かれます。 |
17
17
 
18
18
  レイアウトを保ったまま待たせたいときは [`Skeleton`](ui/skeleton)、ボタンの中など
@@ -14,14 +14,15 @@ import { ToggleGroup, ToggleGroupItem } from "@squadbase/vantage/ui";
14
14
  | --- | --- | --- | --- |
15
15
  | `value` | `string[]` | | 選択中の値。**単一選択でも配列**。 |
16
16
  | `onValueChange` | `(value: string[]) => void` | | 変更時。配列で返る。 |
17
- | `toggleMultiple` | `boolean` | | 複数選択を許す。 |
17
+ | `multiple` | `boolean` | `false` | `true` で複数選択を許す。 |
18
18
  | `variant` | `"default" \| "outline"` | `"default"` | |
19
19
  | `size` | `"default" \| "sm" \| "lg"` | `"default"` | |
20
20
  | `spacing` | `number` | `2` | 項目の間隔。`0` で連結された帯になる。 |
21
21
  | `orientation` | `"horizontal" \| "vertical"` | `"horizontal"` | |
22
22
 
23
23
  > [!WARNING]
24
- > Radix 版の `type="single"` / `type="multiple"` はありません。単一選択は「配列の長さを 1 に保つ」
25
- > という運用になります。その処理は
24
+ > Radix 版の `type="single"` / `type="multiple"` はありません。代わりに boolean の `multiple` が
25
+ > あり、既定(`false`)では同時に押せるのは 1 つだけです。ただし単一選択でも `value` は長さ 1 以下
26
+ > の配列になります。その扱いは
26
27
  > [`SegmentedControl`](parts/segmented-control) に入っているので、
27
28
  > 単一選択ならそちらを使うのが確実です。
@@ -39,8 +39,8 @@ export default function Overview() {
39
39
 
40
40
  `/components` にあるもの(抜粋): `PageShell`、`AppShell`、`DashboardCard`、`DataTable`、
41
41
  型付きチャート(`LineChart` / `AreaChart` / `BarChart` / `DonutChart` / `BarList` / `CategoryBar` /
42
- `ProgressCircle` / `Tracker`)、`EChart`、`FunnelSteps`、`FilterBar`、`DateRangePicker`、`MetricValue`、
43
- `TrendIndicator`。グラフはまず型付きチャートで描き、その props で表せない図(二軸・散布図・
42
+ `ProgressCircle` / `Tracker`)、`EChart`、`FunnelSteps`、`FilterBar`、`DateRangePicker`、`KpiCard`、
43
+ `Delta`。グラフはまず型付きチャートで描き、その props で表せない図(二軸・散布図・
44
44
  ヒートマップなど)だけ `EChart` に `EChartsOption` を渡します。
45
45
 
46
46
  各コンポーネントの props と使い方は [コンポーネント](components) タブにまとめてあります。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@squadbase/vantage",
3
- "version": "0.6.2-dev1.42c4e48",
3
+ "version": "0.6.2-dev1.51e401a",
4
4
  "description": "Data dashboard framework for Squadbase Editor. Vite-powered, config-free, one-file first.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -99,25 +99,6 @@
99
99
  "templates",
100
100
  "NOTICE"
101
101
  ],
102
- "scripts": {
103
- "build": "node scripts/build-docs.mjs && node scripts/build.mjs",
104
- "build:js": "tsup --no-dts",
105
- "build:types": "tsup --dts-only",
106
- "build:docs": "node scripts/build-docs.mjs",
107
- "dev": "tsup --watch --no-dts",
108
- "dev:types": "tsc --noEmit --watch",
109
- "test": "vitest run",
110
- "test:watch": "vitest",
111
- "registry": "node scripts/gen-registry.mjs",
112
- "registry:check": "node scripts/gen-registry.mjs --check",
113
- "typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.registry.json",
114
- "type-check": "tsc --noEmit && tsc --noEmit -p tsconfig.registry.json",
115
- "prepublishOnly": "node scripts/build-docs.mjs && node scripts/build.mjs",
116
- "release": "npm publish --@squadbase:registry=https://registry.npmjs.org",
117
- "site:install": "npm --prefix site install",
118
- "site:dev": "npm --prefix site run dev",
119
- "site:build": "npm --prefix site run build"
120
- },
121
102
  "dependencies": {
122
103
  "@base-ui/react": "^1.6.0",
123
104
  "@hono/node-server": "^2.1.5",
@@ -132,7 +113,7 @@
132
113
  "cmdk": "^1.1.1",
133
114
  "date-fns": "^4.1.0",
134
115
  "echarts": "^6.0.0",
135
- "esbuild": "^0.28.1",
116
+ "esbuild": "0.28.1",
136
117
  "fflate": "^0.8.3",
137
118
  "hono": "^4.13.13",
138
119
  "html-to-image": "^1.11.13",
@@ -141,8 +122,9 @@
141
122
  "picocolors": "^1.1.1",
142
123
  "react-day-picker": "^10.0.1",
143
124
  "read-excel-file": "^9.3.10",
125
+ "shiki": "3.23.0",
144
126
  "streamdown": "^2.5.0",
145
- "tailwind-merge": "^3.0.0",
127
+ "tailwind-merge": "3.6.0",
146
128
  "tailwindcss": "^4.3.3",
147
129
  "tw-animate-css": "^1.0.0",
148
130
  "vite": "^8.3.4"
@@ -167,6 +149,26 @@
167
149
  "react-dom": "^19.3.1",
168
150
  "tsup": "^8.5.1",
169
151
  "typescript": "^5.7.0",
170
- "vitest": "^5.0.5"
152
+ "vitest": "^5.0.5",
153
+ "@squadbase/squadkit": "0.0.0"
154
+ },
155
+ "gitHead": "51e401a7d56dedb01b1dc3061d24eb4398b03062",
156
+ "scripts": {
157
+ "build": "node scripts/build-docs.mjs && node scripts/build.mjs",
158
+ "build:js": "tsup --no-dts",
159
+ "build:types": "tsup --dts-only",
160
+ "build:docs": "node scripts/build-docs.mjs",
161
+ "dev": "tsup --watch --no-dts",
162
+ "dev:types": "tsc --noEmit --watch",
163
+ "test": "vitest run",
164
+ "test:watch": "vitest",
165
+ "registry": "node scripts/gen-registry.mjs",
166
+ "registry:check": "node scripts/gen-registry.mjs --check",
167
+ "typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.registry.json",
168
+ "type-check": "tsc --noEmit && tsc --noEmit -p tsconfig.registry.json",
169
+ "release": "pnpm publish --@squadbase:registry=https://registry.npmjs.org",
170
+ "site:install": "npm --prefix site install",
171
+ "site:dev": "npm --prefix site run dev",
172
+ "site:build": "npm --prefix site run build"
171
173
  }
172
- }
174
+ }
@@ -1,5 +1,7 @@
1
1
  // Copied by `vantage add ui accordion`. This file is yours to edit.
2
- // Generated from @squadbase/vantage src/ui/accordion.tsx by `npm run registry` (in Vantage, edit src/, not registry/).
2
+ // Generated from @squadbase/squadkit registry/ui/accordion.tsx by `pnpm run registry` (in Vantage, edit packages/squadkit, not registry/).
3
+ "use client"
4
+
3
5
  import { Accordion as AccordionPrimitive } from "@base-ui/react/accordion"
4
6
 
5
7
  import { cn } from "@squadbase/vantage/ui"
@@ -56,7 +58,7 @@ function AccordionContent({
56
58
  return (
57
59
  <AccordionPrimitive.Panel
58
60
  data-slot="accordion-content"
59
- className="overflow-hidden text-sm data-open:animate-accordion-down data-closed:animate-accordion-up"
61
+ className="overflow-hidden text-sm data-open:animate-accordion-down data-closed:animate-accordion-up motion-reduce:animate-none"
60
62
  {...props}
61
63
  >
62
64
  <div
@@ -1,5 +1,5 @@
1
1
  // Copied by `vantage add ui alert-dialog`. This file is yours to edit.
2
- // Generated from @squadbase/vantage src/ui/alert-dialog.tsx by `npm run registry` (in Vantage, edit src/, not registry/).
2
+ // Generated from @squadbase/squadkit registry/ui/alert-dialog.tsx by `pnpm run registry` (in Vantage, edit packages/squadkit, not registry/).
3
3
  "use client"
4
4
 
5
5
  import * as React from "react"
@@ -32,7 +32,7 @@ function AlertDialogOverlay({
32
32
  <AlertDialogPrimitive.Backdrop
33
33
  data-slot="alert-dialog-overlay"
34
34
  className={cn(
35
- "fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
35
+ "fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in motion-reduce:animate-none! data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
36
36
  className
37
37
  )}
38
38
  {...props}
@@ -54,7 +54,7 @@ function AlertDialogContent({
54
54
  data-slot="alert-dialog-content"
55
55
  data-size={size}
56
56
  className={cn(
57
- "group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
57
+ "group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-sm data-open:animate-in motion-reduce:animate-none! data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
58
58
  className
59
59
  )}
60
60
  {...props}
@@ -1,5 +1,7 @@
1
1
  // Copied by `vantage add ui alert`. This file is yours to edit.
2
- // Generated from @squadbase/vantage src/ui/alert.tsx by `npm run registry` (in Vantage, edit src/, not registry/).
2
+ // Generated from @squadbase/squadkit registry/ui/alert.tsx by `pnpm run registry` (in Vantage, edit packages/squadkit, not registry/).
3
+ "use client"
4
+
3
5
  import * as React from "react"
4
6
  import { cva, type VariantProps } from "class-variance-authority"
5
7
 
@@ -1,5 +1,7 @@
1
1
  // Copied by `vantage add ui app-shell`. This file is yours to edit.
2
- // Generated from @squadbase/vantage src/components/app-shell.tsx by `npm run registry` (in Vantage, edit src/, not registry/).
2
+ // Generated from @squadbase/squadkit registry/components/app-shell.tsx by `pnpm run registry` (in Vantage, edit packages/squadkit, not registry/).
3
+ "use client"
4
+
3
5
  /**
4
6
  * AppShell — the outermost application frame. `variant="sidebar"` (default)
5
7
  * renders a collapsible sidebar with nested nav groups; `variant="header"`
@@ -42,6 +44,142 @@ import {
42
44
  SidebarTrigger,
43
45
  } from "@squadbase/vantage/ui"
44
46
  import type { NavGroup, NavItem } from "@squadbase/vantage/components"
47
+ import { useSyncExternalStore } from "react"
48
+
49
+ /* ---------- inlined from @squadbase/squadkit registry/lib/locale.ts (internal to @squadbase/vantage) ---------- */
50
+
51
+ /**
52
+ * The display language of the parts and the defaults that follow it.
53
+ *
54
+ * The language comes from `<html lang>`: a tag starting with `ja` reads Japanese, anything else English.
55
+ * Without a usable `lang` (missing, invalid, or no `document` — SSR, Node) the locale is `FALLBACK_LOCALE`
56
+ * (`en-US`). A `locale` passed explicitly (a prop, an argument) always wins.
57
+ *
58
+ * Parts read the locale through `useLocale` (`hooks/use-locale`) and pass it down; the pure helpers here
59
+ * and in `format` / `comparison` / `chart-*` take it as an argument and fall back to `documentLocale()`.
60
+ */
61
+
62
+ /** The language of the built-in wording: Japanese or English. */
63
+ type UiLanguage = "ja" | "en"
64
+
65
+ /** The locale used when `<html lang>` gives none (and on the server). */
66
+ const FALLBACK_LOCALE = "en-US"
67
+
68
+ /** `"ja"` when `locale` starts with `ja` (`ja`, `ja-JP`), else `"en"`. A missing locale is `"en"`. */
69
+ function uiLanguage(locale: string | null | undefined): UiLanguage {
70
+ return typeof locale === "string" && locale.trim().toLowerCase().startsWith("ja") ? "ja" : "en"
71
+ }
72
+
73
+ /** A BCP 47 tag in its canonical form (`en-gb` → `en-GB`), or `FALLBACK_LOCALE` when it is empty or invalid. */
74
+ function normalizeLocale(tag: string | null | undefined): string {
75
+ const value = tag?.trim()
76
+ if (!value) return FALLBACK_LOCALE
77
+ try {
78
+ return Intl.getCanonicalLocales(value)[0] ?? FALLBACK_LOCALE
79
+ } catch {
80
+ return FALLBACK_LOCALE
81
+ }
82
+ }
83
+
84
+ /**
85
+ * The locale of the page: `document.documentElement.lang`, canonicalized. `FALLBACK_LOCALE` when it is empty or
86
+ * invalid, or there is no `document`. Parts read it through `useLocale`, never while rendering.
87
+ */
88
+ function documentLocale(): string {
89
+ if (typeof document === "undefined") return FALLBACK_LOCALE
90
+ return normalizeLocale(document.documentElement?.getAttribute("lang"))
91
+ }
92
+
93
+ /** `locale` when given, else the page's locale (`documentLocale()`). */
94
+ function resolveLocale(locale?: string | null): string {
95
+ return locale || documentLocale()
96
+ }
97
+
98
+ /** Picks the wording table of the locale's language. */
99
+ function pickLocale<T>(table: { ja: T; en: T }, locale?: string | null): T {
100
+ return table[uiLanguage(resolveLocale(locale))]
101
+ }
102
+
103
+ /** The currency `format="currency"` uses without a `currency`: JPY for Japanese, USD otherwise. */
104
+ function defaultCurrency(locale?: string | null): string {
105
+ return uiLanguage(resolveLocale(locale)) === "ja" ? "JPY" : "USD"
106
+ }
107
+
108
+ /** The month a fiscal year starts in (1–12) when none is given: April for Japanese, January otherwise. */
109
+ function defaultFiscalYearStartMonth(locale?: string | null): number {
110
+ return uiLanguage(resolveLocale(locale)) === "ja" ? 4 : 1
111
+ }
112
+
113
+ /** A day of the week, 0 = Sunday … 6 = Saturday (the `Date#getDay` / date-fns numbering). */
114
+ type WeekDay = 0 | 1 | 2 | 3 | 4 | 5 | 6
115
+
116
+ /** Locales whose week starts on Sunday when the runtime has no week data. */
117
+ const SUNDAY_FIRST = new Set(["en", "en-US", "en-CA"])
118
+
119
+ /**
120
+ * The first day of the week: Monday for Japanese; otherwise the locale's convention from `Intl.Locale`
121
+ * (`en-US` Sunday, `en-GB` Monday). Without week data in the runtime: Sunday for `en` / `en-US` / `en-CA`,
122
+ * Monday for the rest.
123
+ */
124
+ function weekStartsOn(locale?: string | null): WeekDay {
125
+ const tag = normalizeLocale(resolveLocale(locale))
126
+ if (uiLanguage(tag) === "ja") return 1
127
+ try {
128
+ const info = new Intl.Locale(tag) as Intl.Locale & {
129
+ getWeekInfo?: () => { firstDay: number }
130
+ weekInfo?: { firstDay: number }
131
+ }
132
+ const firstDay = info.getWeekInfo?.().firstDay ?? info.weekInfo?.firstDay
133
+ if (typeof firstDay === "number" && firstDay >= 1 && firstDay <= 7) return (firstDay % 7) as WeekDay
134
+ } catch {
135
+ // Fall through to the table below.
136
+ }
137
+ return SUNDAY_FIRST.has(tag) ? 0 : 1
138
+ }
139
+
140
+ /* ---------- inlined from @squadbase/squadkit registry/hooks/use-locale.ts (internal to @squadbase/vantage) ---------- */
141
+
142
+ const listeners = new Set<() => void>()
143
+ let observer: MutationObserver | null = null
144
+
145
+ /** One observer on `<html lang>` for every subscribed part. */
146
+ function subscribe(onChange: () => void): () => void {
147
+ if (typeof document === "undefined" || typeof MutationObserver === "undefined") return () => {}
148
+ listeners.add(onChange)
149
+ if (!observer) {
150
+ observer = new MutationObserver(() => {
151
+ for (const listener of [...listeners]) listener()
152
+ })
153
+ observer.observe(document.documentElement, { attributes: true, attributeFilter: ["lang"] })
154
+ }
155
+ return () => {
156
+ listeners.delete(onChange)
157
+ if (listeners.size === 0 && observer) {
158
+ observer.disconnect()
159
+ observer = null
160
+ }
161
+ }
162
+ }
163
+
164
+ const serverLocale = () => FALLBACK_LOCALE
165
+
166
+ /**
167
+ * The page's locale (`<html lang>`), following changes made while the page runs. On the server and during
168
+ * hydration it is `FALLBACK_LOCALE` (`en-US`), so the markup matches; it switches right after.
169
+ */
170
+ function useDocumentLocale(): string {
171
+ return useSyncExternalStore(subscribe, documentLocale, serverLocale)
172
+ }
173
+
174
+ /** The locale a part renders in: its `locale` prop when given, else the page's (`useDocumentLocale`). */
175
+ function useLocale(locale?: string | null): string {
176
+ const page = useDocumentLocale()
177
+ return locale || page
178
+ }
179
+
180
+ /* ---------- end of inlined code ---------- */
181
+
182
+ const PAGE_PLACEHOLDER = { ja: "ページを選択", en: "Select a page" }
45
183
 
46
184
  export interface AppShellSidebarProps {
47
185
  variant?: "sidebar"
@@ -85,9 +223,14 @@ function NavSelect({
85
223
  }) {
86
224
  const allItems = groups.flatMap((g) => g.items.flatMap(flattenItems))
87
225
  const currentValue = allItems.find((item) => item.isActive)?.href ?? ""
226
+ // Base UI's SelectValue renders the raw value (the href) unless `items` maps
227
+ // it to a label, so pass the page names explicitly.
228
+ const selectItems = allItems.map((item) => ({ value: item.href, label: item.label }))
229
+ const placeholder = PAGE_PLACEHOLDER[uiLanguage(useLocale())]
88
230
 
89
231
  return (
90
232
  <Select
233
+ items={selectItems}
91
234
  value={currentValue}
92
235
  onValueChange={(href) => {
93
236
  // Base UI reports `null` when the selection is cleared; there is no
@@ -96,7 +239,7 @@ function NavSelect({
96
239
  }}
97
240
  >
98
241
  <SelectTrigger size="sm" className="w-48">
99
- <SelectValue placeholder="ページを選択" />
242
+ <SelectValue placeholder={placeholder} />
100
243
  </SelectTrigger>
101
244
  {/*
102
245
  Page titles are author-written and often longer than the 12rem trigger,