@squadbase/vantage 0.6.1-dev2.5f947f1 → 0.6.2-dev1.0017a4d

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 (319) 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-X5NVCQKT.js} +9 -9
  4. package/dist/{build-O5TVNH4E.js.map → build-X5NVCQKT.js.map} +1 -1
  5. package/dist/{check-WFBEDHDR.js → check-ZBIH422T.js} +7 -7
  6. package/dist/{check-WFBEDHDR.js.map → check-ZBIH422T.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-2ICNHUG6.js +1820 -0
  10. package/dist/chunk-2ICNHUG6.js.map +1 -0
  11. package/dist/{chunk-5ZOP4SQR.js → chunk-2N72FKLB.js} +12 -7
  12. package/dist/chunk-2N72FKLB.js.map +1 -0
  13. package/dist/chunk-57GHR5LN.js +163 -0
  14. package/dist/chunk-57GHR5LN.js.map +1 -0
  15. package/dist/{chunk-BCE22JSM.js → chunk-7DZGJQ3P.js} +33 -14
  16. package/dist/chunk-7DZGJQ3P.js.map +1 -0
  17. package/dist/{chunk-RPZAALCX.js → chunk-7S52M2SL.js} +256 -165
  18. package/dist/chunk-7S52M2SL.js.map +1 -0
  19. package/dist/{chunk-QDZA5JSL.js → chunk-AABMKHEU.js} +4 -4
  20. package/dist/{chunk-QDZA5JSL.js.map → chunk-AABMKHEU.js.map} +1 -1
  21. package/dist/{chunk-KLEIVDUV.js → chunk-CEXAQQ5W.js} +150 -11
  22. package/dist/chunk-CEXAQQ5W.js.map +1 -0
  23. package/dist/{chunk-3G43C6OL.js → chunk-GNXCX4WE.js} +46 -3
  24. package/dist/chunk-GNXCX4WE.js.map +1 -0
  25. package/dist/{chunk-JGRMRXXZ.js → chunk-JKLLFVEU.js} +3 -3
  26. package/dist/{chunk-JGRMRXXZ.js.map → chunk-JKLLFVEU.js.map} +1 -1
  27. package/dist/chunk-JXFCSF3K.js +673 -0
  28. package/dist/chunk-JXFCSF3K.js.map +1 -0
  29. package/dist/{chunk-PXRX5PEC.js → chunk-PDOBHMUQ.js} +3 -3
  30. package/dist/chunk-PDOBHMUQ.js.map +1 -0
  31. package/dist/{chunk-ZVANIULZ.js → chunk-RNTDBX6S.js} +4 -4
  32. package/dist/{chunk-ZVANIULZ.js.map → chunk-RNTDBX6S.js.map} +1 -1
  33. package/dist/chunk-RU6WKEOG.js +7048 -0
  34. package/dist/chunk-RU6WKEOG.js.map +1 -0
  35. package/dist/{chunk-A2UUGASH.js → chunk-U736PVHY.js} +2 -2
  36. package/dist/chunk-U736PVHY.js.map +1 -0
  37. package/dist/{chunk-PVTHHV7X.js → chunk-V3LF7BE7.js} +27 -5
  38. package/dist/chunk-V3LF7BE7.js.map +1 -0
  39. package/dist/{chunk-EP6JHXSR.js → chunk-WAMZWZJB.js} +54 -9
  40. package/dist/chunk-WAMZWZJB.js.map +1 -0
  41. package/dist/{chunk-DTDVSFRY.js → chunk-XQUSGIDG.js} +17 -3
  42. package/dist/chunk-XQUSGIDG.js.map +1 -0
  43. package/dist/cli.js +15 -11
  44. package/dist/cli.js.map +1 -1
  45. package/dist/client/index.d.ts +32 -3
  46. package/dist/client/index.js +205 -12
  47. package/dist/client/index.js.map +1 -1
  48. package/dist/components/index.d.ts +1743 -29
  49. package/dist/components/index.js +7 -4
  50. package/dist/{dev-NZRLOQCL.js → dev-4XEDTELV.js} +24 -13
  51. package/dist/dev-4XEDTELV.js.map +1 -0
  52. package/dist/doc/index.d.ts +194 -2
  53. package/dist/doc/index.js +338 -5
  54. package/dist/doc/index.js.map +1 -1
  55. package/dist/{docs-ZGDJUHJI.js → docs-JVP4RPKT.js} +3 -3
  56. package/dist/{docs-ZGDJUHJI.js.map → docs-JVP4RPKT.js.map} +1 -1
  57. package/dist/{doctor-VFKEMR54.js → doctor-5E2VEZPK.js} +8 -8
  58. package/dist/doctor-5E2VEZPK.js.map +1 -0
  59. package/dist/format-U0cQl069.d.ts +243 -0
  60. package/dist/markdown/index.js +1 -1
  61. package/dist/markdown/index.js.map +1 -1
  62. package/dist/{preview-QDCIVVSR.js → preview-T6CLSQVX.js} +12 -4
  63. package/dist/preview-T6CLSQVX.js.map +1 -0
  64. package/dist/query/index.d.ts +0 -11
  65. package/dist/query/index.js +2 -2
  66. package/dist/{routes-RHP5FVGD.js → routes-3SGAFDMC.js} +6 -6
  67. package/dist/{routes-RHP5FVGD.js.map → routes-3SGAFDMC.js.map} +1 -1
  68. package/dist/{search-RFBELGY7.js → search-5LC4XPB5.js} +3 -3
  69. package/dist/{search-RFBELGY7.js.map → search-5LC4XPB5.js.map} +1 -1
  70. package/dist/slide/index.d.ts +177 -1
  71. package/dist/slide/index.js +917 -18
  72. package/dist/slide/index.js.map +1 -1
  73. package/dist/table/index.js +14 -10
  74. package/dist/table/index.js.map +1 -1
  75. package/dist/ui/index.d.ts +148 -12
  76. package/dist/ui/index.js +1340 -88
  77. package/dist/ui/index.js.map +1 -1
  78. package/dist/{upgrade-GF2P67M6.js → upgrade-JHXZBGQS.js} +7 -7
  79. package/dist/{upgrade-GF2P67M6.js.map → upgrade-JHXZBGQS.js.map} +1 -1
  80. package/dist/vite/index.d.ts +10 -0
  81. package/dist/vite/index.js +4 -4
  82. package/docs/en/changelog.md +24 -0
  83. package/docs/en/cli-reference.md +30 -0
  84. package/docs/en/components.md +40 -17
  85. package/docs/en/doc/doc-action-items.md +49 -0
  86. package/docs/en/doc/doc-callout.md +38 -0
  87. package/docs/en/doc/doc-data-table.md +60 -0
  88. package/docs/en/doc/doc-executive-summary.md +64 -0
  89. package/docs/en/doc/doc-figure.md +56 -0
  90. package/docs/en/doc/doc-key-findings.md +61 -0
  91. package/docs/en/doc/doc-kpi-scorecard.md +80 -0
  92. package/docs/en/doc/doc-report-header.md +46 -0
  93. package/docs/en/parts/area-chart.md +99 -0
  94. package/docs/en/parts/bar-chart.md +91 -0
  95. package/docs/en/parts/bar-list.md +50 -0
  96. package/docs/en/parts/category-bar.md +37 -0
  97. package/docs/en/parts/chart-frame.md +39 -0
  98. package/docs/en/parts/data-table.md +22 -0
  99. package/docs/en/parts/delta.md +50 -0
  100. package/docs/en/parts/donut-chart.md +72 -0
  101. package/docs/en/parts/format.md +43 -0
  102. package/docs/en/parts/funnel-steps.md +2 -1
  103. package/docs/en/parts/heatmap.md +53 -0
  104. package/docs/en/parts/kpi-card.md +57 -0
  105. package/docs/en/parts/legend.md +35 -0
  106. package/docs/en/parts/line-chart.md +94 -0
  107. package/docs/en/parts/metric-value.md +3 -2
  108. package/docs/en/parts/page-shell.md +1 -1
  109. package/docs/en/parts/progress-circle.md +33 -0
  110. package/docs/en/parts/sample-data.md +39 -0
  111. package/docs/en/parts/scatter-chart.md +56 -0
  112. package/docs/en/parts/sparkline.md +1 -1
  113. package/docs/en/parts/tracker.md +36 -0
  114. package/docs/en/parts/trend-indicator.md +17 -1
  115. package/docs/en/parts/updated-at.md +30 -0
  116. package/docs/en/parts/waterfall-chart.md +56 -0
  117. package/docs/en/slide/slide-chart-insight.md +52 -0
  118. package/docs/en/slide/slide-cover.md +39 -0
  119. package/docs/en/slide/slide-exec-summary.md +47 -0
  120. package/docs/en/slide/slide-kpi-grid.md +55 -0
  121. package/docs/en/slide/slide-kpi-hero.md +58 -0
  122. package/docs/en/slide/slide-next-actions.md +49 -0
  123. package/docs/en/slide/slide-scorecard-table.md +54 -0
  124. package/docs/en/ui/alert-dialog.md +42 -0
  125. package/docs/en/ui/avatar.md +31 -0
  126. package/docs/en/ui/combobox.md +74 -0
  127. package/docs/en/ui/drawer.md +41 -0
  128. package/docs/en/ui/empty.md +1 -1
  129. package/docs/en/ui/error-state.md +4 -3
  130. package/docs/en/ui/field.md +42 -0
  131. package/docs/en/ui/hover-card.md +21 -0
  132. package/docs/en/ui/kbd.md +17 -0
  133. package/docs/en/ui/loading.md +1 -1
  134. package/docs/en/ui/pagination.md +36 -0
  135. package/docs/en/ui/radio-group.md +21 -0
  136. package/docs/en/ui/toast.md +44 -0
  137. package/docs/en/ui/toggle-group.md +4 -3
  138. package/docs/en/ui-and-theming.md +1 -1
  139. package/docs/index.json +1024 -114
  140. package/docs/ja/changelog.md +55 -0
  141. package/docs/ja/cli-reference.md +29 -0
  142. package/docs/ja/components.md +66 -101
  143. package/docs/ja/doc/doc-action-items.md +49 -0
  144. package/docs/ja/doc/doc-callout.md +38 -0
  145. package/docs/ja/doc/doc-data-table.md +60 -0
  146. package/docs/ja/doc/doc-executive-summary.md +64 -0
  147. package/docs/ja/doc/doc-figure.md +56 -0
  148. package/docs/ja/doc/doc-key-findings.md +61 -0
  149. package/docs/ja/doc/doc-kpi-scorecard.md +80 -0
  150. package/docs/ja/doc/doc-report-header.md +46 -0
  151. package/docs/ja/page-types/csv.md +83 -0
  152. package/docs/ja/page-types/doc.md +83 -0
  153. package/docs/ja/page-types/excel.md +82 -0
  154. package/docs/ja/page-types/slide.md +132 -0
  155. package/docs/ja/page-types.md +47 -0
  156. package/docs/ja/parts/area-chart.md +85 -0
  157. package/docs/ja/parts/bar-chart.md +95 -0
  158. package/docs/ja/parts/bar-list.md +58 -0
  159. package/docs/ja/parts/category-bar.md +36 -0
  160. package/docs/ja/parts/chart-frame.md +36 -0
  161. package/docs/ja/parts/data-table.md +22 -0
  162. package/docs/ja/parts/delta.md +50 -0
  163. package/docs/ja/parts/donut-chart.md +66 -0
  164. package/docs/ja/parts/echart.md +3 -0
  165. package/docs/ja/parts/format.md +44 -0
  166. package/docs/ja/parts/funnel-steps.md +27 -8
  167. package/docs/ja/parts/heatmap.md +45 -0
  168. package/docs/ja/parts/kpi-card.md +55 -0
  169. package/docs/ja/parts/legend.md +36 -0
  170. package/docs/ja/parts/line-chart.md +84 -0
  171. package/docs/ja/parts/metric-value.md +3 -2
  172. package/docs/ja/parts/page-shell.md +1 -1
  173. package/docs/ja/parts/progress-circle.md +34 -0
  174. package/docs/ja/parts/sample-data.md +61 -0
  175. package/docs/ja/parts/scatter-chart.md +69 -0
  176. package/docs/ja/parts/sparkline.md +2 -2
  177. package/docs/ja/parts/tracker.md +32 -0
  178. package/docs/ja/parts/trend-indicator.md +17 -1
  179. package/docs/ja/parts/updated-at.md +27 -0
  180. package/docs/ja/parts/waterfall-chart.md +61 -0
  181. package/docs/ja/routing.md +8 -86
  182. package/docs/ja/slide/slide-chart-insight.md +52 -0
  183. package/docs/ja/slide/slide-cover.md +39 -0
  184. package/docs/ja/slide/slide-exec-summary.md +47 -0
  185. package/docs/ja/slide/slide-kpi-grid.md +55 -0
  186. package/docs/ja/slide/slide-kpi-hero.md +58 -0
  187. package/docs/ja/slide/slide-next-actions.md +49 -0
  188. package/docs/ja/slide/slide-scorecard-table.md +54 -0
  189. package/docs/ja/ui/alert-dialog.md +41 -0
  190. package/docs/ja/ui/avatar.md +31 -0
  191. package/docs/ja/ui/combobox.md +74 -0
  192. package/docs/ja/ui/drawer.md +41 -0
  193. package/docs/ja/ui/empty.md +1 -1
  194. package/docs/ja/ui/error-state.md +4 -3
  195. package/docs/ja/ui/field.md +42 -0
  196. package/docs/ja/ui/hover-card.md +21 -0
  197. package/docs/ja/ui/kbd.md +16 -0
  198. package/docs/ja/ui/loading.md +1 -1
  199. package/docs/ja/ui/pagination.md +36 -0
  200. package/docs/ja/ui/radio-group.md +21 -0
  201. package/docs/ja/ui/toast.md +46 -0
  202. package/docs/ja/ui/toggle-group.md +4 -3
  203. package/docs/ja/ui-and-theming.md +14 -7
  204. package/package.json +43 -29
  205. package/registry/ui/accordion.tsx +76 -0
  206. package/registry/ui/alert-dialog.tsx +189 -0
  207. package/registry/ui/alert.tsx +80 -0
  208. package/registry/ui/app-shell.tsx +287 -0
  209. package/registry/ui/area-chart.tsx +3701 -0
  210. package/registry/ui/attention-list.tsx +303 -0
  211. package/registry/ui/avatar.tsx +110 -0
  212. package/registry/ui/badge.tsx +56 -0
  213. package/registry/ui/bar-chart.tsx +3698 -0
  214. package/registry/ui/bar-list.tsx +3743 -0
  215. package/registry/ui/box-plot-chart.tsx +3906 -0
  216. package/registry/ui/breadcrumb.tsx +128 -0
  217. package/registry/ui/button.tsx +62 -0
  218. package/registry/ui/calendar.tsx +223 -0
  219. package/registry/ui/card.tsx +107 -0
  220. package/registry/ui/category-bar.tsx +1290 -0
  221. package/registry/ui/chart-frame.tsx +1393 -0
  222. package/registry/ui/checkbox.tsx +30 -0
  223. package/registry/ui/collapsible.tsx +23 -0
  224. package/registry/ui/combobox.tsx +310 -0
  225. package/registry/ui/command.tsx +198 -0
  226. package/registry/ui/dashboard-card.tsx +217 -0
  227. package/registry/ui/data-table.tsx +693 -146
  228. package/registry/ui/date-range-picker.tsx +390 -0
  229. package/registry/ui/delta.tsx +188 -0
  230. package/registry/ui/dialog.tsx +161 -0
  231. package/registry/ui/donut-chart.tsx +3751 -0
  232. package/registry/ui/drawer.tsx +229 -0
  233. package/registry/ui/dropdown-menu.tsx +274 -0
  234. package/registry/ui/echart.tsx +1040 -0
  235. package/registry/ui/field.tsx +240 -0
  236. package/registry/ui/filter-bar.tsx +392 -0
  237. package/registry/ui/funnel-steps.tsx +3569 -0
  238. package/registry/ui/heatmap.tsx +1786 -0
  239. package/registry/ui/histogram-chart.tsx +3986 -0
  240. package/registry/ui/hover-card.tsx +52 -0
  241. package/registry/ui/input-group.tsx +160 -0
  242. package/registry/ui/input.tsx +24 -0
  243. package/registry/ui/kbd.tsx +30 -0
  244. package/registry/ui/kpi-card.tsx +699 -0
  245. package/registry/ui/label.tsx +22 -0
  246. package/registry/ui/legend.tsx +3563 -0
  247. package/registry/ui/line-chart.tsx +3699 -0
  248. package/registry/ui/metric-value.tsx +62 -0
  249. package/registry/ui/multi-select.tsx +232 -0
  250. package/registry/ui/page-shell.tsx +282 -0
  251. package/registry/ui/pagination.tsx +140 -0
  252. package/registry/ui/paired-chart.tsx +3827 -0
  253. package/registry/ui/placeholder.tsx +36 -0
  254. package/registry/ui/popover.tsx +92 -0
  255. package/registry/ui/progress-circle.tsx +867 -0
  256. package/registry/ui/progress.tsx +85 -0
  257. package/registry/ui/radio-group.tsx +39 -0
  258. package/registry/ui/sample-data.tsx +86 -0
  259. package/registry/ui/scatter-chart.tsx +4212 -0
  260. package/registry/ui/scroll-area.tsx +56 -0
  261. package/registry/ui/searchable-select.tsx +214 -0
  262. package/registry/ui/section-header.tsx +43 -0
  263. package/registry/ui/segmented-control.tsx +76 -0
  264. package/registry/ui/select.tsx +255 -0
  265. package/registry/ui/separator.tsx +27 -0
  266. package/registry/ui/sheet.tsx +139 -0
  267. package/registry/ui/sidebar.tsx +725 -0
  268. package/registry/ui/skeleton.tsx +17 -0
  269. package/registry/ui/slider.tsx +56 -0
  270. package/registry/ui/sparkline.tsx +230 -0
  271. package/registry/ui/spinner.tsx +14 -0
  272. package/registry/ui/states.tsx +90 -0
  273. package/registry/ui/status-badge.tsx +121 -0
  274. package/registry/ui/switch.tsx +34 -0
  275. package/registry/ui/table.tsx +118 -0
  276. package/registry/ui/tabs.tsx +84 -0
  277. package/registry/ui/textarea.tsx +22 -0
  278. package/registry/ui/toast.tsx +250 -0
  279. package/registry/ui/toggle-group.tsx +91 -0
  280. package/registry/ui/toggle.tsx +47 -0
  281. package/registry/ui/tooltip.tsx +72 -0
  282. package/registry/ui/tracker.tsx +849 -0
  283. package/registry/ui/trend-indicator.tsx +74 -0
  284. package/registry/ui/updated-at.tsx +122 -0
  285. package/registry/ui/waterfall-chart.tsx +4248 -0
  286. package/skills/vantage-add-feature/SKILL.md +9 -7
  287. package/skills/vantage-design/SKILL.md +36 -24
  288. package/skills/vantage-design/references/extract.md +16 -14
  289. package/skills/vantage-design/references/format.md +6 -5
  290. package/skills/vantage-design/references/presets.md +60 -110
  291. package/skills/vantage-pitfalls/SKILL.md +5 -1
  292. package/skills/vantage-slide/SKILL.md +71 -36
  293. package/templates/AGENTS.md +24 -3
  294. package/templates/agents/api.md +29 -0
  295. package/templates/agents/csv.md +2 -1
  296. package/templates/agents/doc.md +49 -3
  297. package/templates/agents/page.md +54 -9
  298. package/templates/agents/slide.md +68 -3
  299. package/templates/agents/xlsx.md +2 -1
  300. package/theme.css +252 -132
  301. package/dist/add-EISGSZAH.js +0 -6
  302. package/dist/add-EISGSZAH.js.map +0 -1
  303. package/dist/chunk-3G43C6OL.js.map +0 -1
  304. package/dist/chunk-5ZOP4SQR.js.map +0 -1
  305. package/dist/chunk-A2UUGASH.js.map +0 -1
  306. package/dist/chunk-BCE22JSM.js.map +0 -1
  307. package/dist/chunk-DTDVSFRY.js.map +0 -1
  308. package/dist/chunk-EP6JHXSR.js.map +0 -1
  309. package/dist/chunk-KLEIVDUV.js.map +0 -1
  310. package/dist/chunk-LSRMRIXA.js +0 -2227
  311. package/dist/chunk-LSRMRIXA.js.map +0 -1
  312. package/dist/chunk-PVTHHV7X.js.map +0 -1
  313. package/dist/chunk-PXRX5PEC.js.map +0 -1
  314. package/dist/chunk-RPZAALCX.js.map +0 -1
  315. package/dist/chunk-T3FLAGI6.js +0 -316
  316. package/dist/chunk-T3FLAGI6.js.map +0 -1
  317. package/dist/dev-NZRLOQCL.js.map +0 -1
  318. package/dist/doctor-VFKEMR54.js.map +0 -1
  319. package/dist/preview-QDCIVVSR.js.map +0 -1
@@ -0,0 +1,41 @@
1
+ # Drawer
2
+
3
+ > 画面の端からスワイプで出し入れするパネル。
4
+
5
+ 画面の下(または上下左右)から出てくるパネルです。スワイプで閉じられるので、モバイルでの
6
+ 詳細表示やアクション一覧に向いています。デスクトップで広い面積のフォームを出すなら
7
+ [`Sheet`](ui/sheet) が素直です。Base UI の `Drawer` の上に作っています。
8
+
9
+ ```tsx
10
+ import {
11
+ Drawer,
12
+ DrawerTrigger,
13
+ DrawerContent,
14
+ DrawerHeader,
15
+ DrawerTitle,
16
+ DrawerDescription,
17
+ DrawerFooter,
18
+ DrawerClose,
19
+ } from "@squadbase/vantage/ui";
20
+ ```
21
+
22
+ ## パーツ
23
+
24
+ | パーツ | 役割 |
25
+ | --- | --- |
26
+ | `Drawer` | 状態。`open` / `defaultOpen` / `onOpenChange`、向き、スナップポイント |
27
+ | `DrawerTrigger` | 開くきっかけ。`render` でボタンにする |
28
+ | `DrawerContent` | 本体。オーバーレイとポータルを内包する |
29
+ | `DrawerHeader` / `DrawerTitle` / `DrawerDescription` | 見出し |
30
+ | `DrawerFooter` | ボタン行 |
31
+ | `DrawerClose` | 閉じるトリガー |
32
+
33
+ | Prop | Type | Default | 説明 |
34
+ | --- | --- | --- | --- |
35
+ | `swipeDirection` | `"down" \| "up" \| "left" \| "right"` | `"down"` | `Drawer` に渡す。閉じるときにスワイプする向き(= 出てくる端)。 |
36
+ | `showSwipeHandle` | `boolean` | `false` | `Drawer` に渡す。つまみ(ハンドル)を表示する。 |
37
+ | `snapPoints` | `(number \| string)[]` | | `Drawer` に渡す。途中で止まる高さ(`0.5` や `"20rem"`)。 |
38
+ | `modal` | `boolean` | `true` | `Drawer` に渡す。`false` で背景を操作可能にし、オーバーレイを出さない。 |
39
+
40
+ `DrawerTitle` は支援技術のために必須です。見せたくない場合も置いた上で `className="sr-only"` に
41
+ してください。
@@ -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
  );
@@ -0,0 +1,42 @@
1
+ # Field
2
+
3
+ > ラベル・説明・エラーを入力と束ねるフォームのレイアウト部品。
4
+
5
+ 入力 1 つぶんのラベル・補足説明・エラーメッセージを、決まった間隔と向きで並べる部品です。
6
+ 入力そのものは [`Input`](ui/input) や [`Switch`](ui/switch) などを
7
+ 中に置きます。
8
+
9
+ ```tsx
10
+ import {
11
+ Field,
12
+ FieldLabel,
13
+ FieldDescription,
14
+ FieldError,
15
+ FieldContent,
16
+ FieldTitle,
17
+ FieldGroup,
18
+ FieldSet,
19
+ FieldLegend,
20
+ FieldSeparator,
21
+ } from "@squadbase/vantage/ui";
22
+ ```
23
+
24
+ ## パーツ
25
+
26
+ | パーツ | 役割 |
27
+ | --- | --- |
28
+ | `Field` | 入力 1 つぶんの外枠。`orientation` で並び方を選ぶ |
29
+ | `FieldLabel` | ラベル(`Label` を使う)。`htmlFor` で入力と結ぶ |
30
+ | `FieldDescription` | 補足説明 |
31
+ | `FieldError` | エラー。`children` か `errors`(`{ message }[]`)を渡す。空なら描画しない |
32
+ | `FieldContent` | 横並びのときにラベルと説明をまとめる列 |
33
+ | `FieldTitle` | `<label>` ではない見出し |
34
+ | `FieldGroup` | 複数の `Field` を縦に並べる |
35
+ | `FieldSet` / `FieldLegend` | `<fieldset>` / `<legend>` |
36
+ | `FieldSeparator` | 区切り線。中に文字も置ける |
37
+
38
+ | Prop | Type | Default | 説明 |
39
+ | --- | --- | --- | --- |
40
+ | `orientation` | `"vertical" \| "horizontal" \| "responsive"` | `"vertical"` | `Field` に渡す。`responsive` はコンテナ幅が広いときだけ横並びにする。 |
41
+ | `data-invalid` | `boolean` | | `Field` に付けるとラベルと説明がエラー色になる。入力には `aria-invalid` を付ける。 |
42
+ | `errors` | `Array<{ message?: string } \| undefined>` | | `FieldError` に渡す。複数あれば箇条書きにし、重複は 1 つにまとめる。 |
@@ -0,0 +1,21 @@
1
+ # Hover Card
2
+
3
+ > リンクにホバーすると出るプレビューカード。
4
+
5
+ リンクや用語にポインタを載せたとき(キーボードではフォーカスしたとき)に、補足の内容を
6
+ カードで見せます。指標の定義やユーザーのプロフィールなど、**読むだけ**の情報向けです。
7
+ 操作を伴うなら [`Popover`](ui/popover)、短い一言なら
8
+ [`Tooltip`](ui/tooltip) を使ってください。Base UI の `PreviewCard` の上に作っています。
9
+
10
+ ```tsx
11
+ import { HoverCard, HoverCardTrigger, HoverCardContent } from "@squadbase/vantage/ui";
12
+ ```
13
+
14
+ `HoverCardTrigger` は既定で `<a>` を描画します。別の要素にしたい場合は `render` を渡します。
15
+
16
+ | Prop | Type | Default | 説明 |
17
+ | --- | --- | --- | --- |
18
+ | `side` | `"top" \| "right" \| "bottom" \| "left"` | `"bottom"` | `HoverCardContent` に渡す。トリガーのどちら側に出すか。 |
19
+ | `align` | `"start" \| "center" \| "end"` | `"center"` | `HoverCardContent` に渡す。 |
20
+ | `sideOffset` | `number` | `4` | `HoverCardContent` とトリガーの距離(px)。 |
21
+ | `delay` | `number` | `600` | `HoverCardTrigger` に渡す。開くまでのミリ秒。 |
@@ -0,0 +1,16 @@
1
+ # Kbd
2
+
3
+ > キーボードのキー表示。
4
+
5
+ ショートカットキーを表示するための小さな部品です。複数のキーは `KbdGroup` で並べます。
6
+
7
+ ```tsx
8
+ import { Kbd, KbdGroup } from "@squadbase/vantage/ui";
9
+ ```
10
+
11
+ | Prop | Type | 説明 |
12
+ | --- | --- | --- |
13
+ | `Kbd` | `ComponentProps<"kbd">` | 1 つのキー。 |
14
+ | `KbdGroup` | `ComponentProps<"div">` | キーを横に並べる。 |
15
+
16
+ ボタンや [`Tooltip`](ui/tooltip) の中に置くと、周りの文字色に合わせて馴染みます。
@@ -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)、ボタンの中など
@@ -0,0 +1,36 @@
1
+ # Pagination
2
+
3
+ > ページ送りのリンク列。
4
+
5
+ 一覧をページに分けたときのページ送りです。見た目だけの部品で、現在ページや総ページ数は
6
+ 持ちません — 状態は呼び出し側(URL の検索パラメータや `useState`)で管理します。
7
+
8
+ ```tsx
9
+ import {
10
+ Pagination,
11
+ PaginationContent,
12
+ PaginationItem,
13
+ PaginationLink,
14
+ PaginationPrevious,
15
+ PaginationNext,
16
+ PaginationEllipsis,
17
+ } from "@squadbase/vantage/ui";
18
+ ```
19
+
20
+ ## パーツ
21
+
22
+ | パーツ | 役割 |
23
+ | --- | --- |
24
+ | `Pagination` | `<nav>`。`aria-label="pagination"` 付き |
25
+ | `PaginationContent` / `PaginationItem` | `<ul>` / `<li>` |
26
+ | `PaginationLink` | 1 ページ分の `<a>`。`isActive` で現在ページを示す |
27
+ | `PaginationPrevious` / `PaginationNext` | 前後への `<a>`。`text` で文言を変える |
28
+ | `PaginationEllipsis` | 省略記号 |
29
+
30
+ | Prop | Type | Default | 説明 |
31
+ | --- | --- | --- | --- |
32
+ | `isActive` | `boolean` | | `PaginationLink` に渡す。`aria-current="page"` と枠線付きの見た目になる。 |
33
+ | `text` | `string` | `"Previous" / "Next"` | `PaginationPrevious` / `PaginationNext` のラベル(640px 未満では隠れる)。 |
34
+
35
+ リンクは素の `<a>` なので、`href` を渡すとそのまま遷移します。画面内の状態だけを変えたい場合は
36
+ `onClick` で `preventDefault()` してください。
@@ -0,0 +1,21 @@
1
+ # Radio Group
2
+
3
+ > 少数の選択肢から 1 つを選ぶラジオボタン。
4
+
5
+ 選択肢をすべて見せたまま 1 つ選ばせる入力です。選択肢が多いときは
6
+ [`Select`](ui/select)、横並びのボタンで切り替えたいときは
7
+ [`SegmentedControl`](parts/segmented-control) を検討してください。
8
+
9
+ ```tsx
10
+ import { RadioGroup, RadioGroupItem } from "@squadbase/vantage/ui";
11
+ ```
12
+
13
+ `RadioGroupItem` 自体はラベルを持ちません。`id` を振って [`Label`](ui/label) の
14
+ `htmlFor` と結んでください。
15
+
16
+ | Prop | Type | 説明 |
17
+ | --- | --- | --- |
18
+ | `value` | `unknown` | `RadioGroup` の選択値(制御)。 |
19
+ | `defaultValue` | `unknown` | `RadioGroup` の初期値(非制御)。 |
20
+ | `onValueChange` | `(value: unknown) => void` | `RadioGroup` に渡す。選ばれた `RadioGroupItem` の `value` を受け取る。 |
21
+ | `disabled` | `boolean` | グループ全体、または項目単位で無効にする。 |
@@ -0,0 +1,46 @@
1
+ # Toast
2
+
3
+ > 画面の隅に一時的に出る通知。
4
+
5
+ 保存完了や失敗など、操作の結果を短く知らせる通知です。Base UI の `Toast` の上に作っており、
6
+ `sonner` には依存しません。
7
+
8
+ ```tsx
9
+ import { Toaster, toast } from "@squadbase/vantage/ui";
10
+ ```
11
+
12
+ ## 使い方
13
+
14
+ アプリのルート付近を **`Toaster` で 1 度だけ包み**、どこからでも `toast.add()` を呼びます。
15
+ `Toaster` は子要素を描画したうえで、画面右下(モバイルでは下部中央)に通知の置き場を出します。
16
+
17
+ ```tsx
18
+ <Toaster>
19
+ <App />
20
+ </Toaster>;
21
+
22
+ toast.add({ title: "レポートを保存しました", type: "success" });
23
+ ```
24
+
25
+ `toast` はモジュール単位で 1 つ作られたマネージャで、`add` / `close` / `update` / `promise` を
26
+ 持ちます。
27
+
28
+ | Prop | Type | Default | 説明 |
29
+ | --- | --- | --- | --- |
30
+ | `title` | `ReactNode` | | 見出し。 |
31
+ | `description` | `ReactNode` | | 本文。 |
32
+ | `type` | `"success" \| "info" \| "warning" \| "error" \| "loading" \| string` | | 左に出すアイコンを決める。省略するとアイコン無し。 |
33
+ | `timeout` | `number` | `5000` | 自動で閉じるまでのミリ秒。`0` で閉じない。 |
34
+ | `actionProps` | `ButtonProps` | | 指定するとアクションボタンを出す(`children` がラベル、`onClick` が処理)。 |
35
+
36
+ `toast.add()` は ID を返します。`toast.update(id, {...})` で中身を差し替え、
37
+ `toast.close(id)` で閉じます。非同期処理には `toast.promise(promise, { loading, success, error })`
38
+ が使えます。
39
+
40
+ > [!NOTE]
41
+ > shadcn/ui の `sonner` 版(`toast("…")` / `toast.success("…")`)とは呼び出し方が違います。
42
+ > こちらは shadcn/ui の Base UI 版 `toast` と同じ API です。
43
+ > `Toaster` の外で個別のマネージャが要るときは `createToastManager()` で作り、
44
+ > `<Toaster toastManager={manager}>` に渡します。部品(`Toast` / `ToastTitle` /
45
+ > `ToastDescription` / `ToastAction` / `ToastClose` / `ToastViewport` / `ToastPortal` /
46
+ > `ToastProvider`、`useToastManager`)を組み直して独自の並びも作れます。
@@ -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
  > 単一選択ならそちらを使うのが確実です。
@@ -32,11 +32,16 @@ export default function Overview() {
32
32
  ```
33
33
 
34
34
  `/ui` にあるもの(抜粋): `Button`、`Card`、`Table` プリミティブ、`Tabs`、`Input` / `Select` /
35
- `Checkbox` / `Switch` / `Slider`、`Calendar`、`Dialog` / `Sheet` / `Popover` / `Tooltip` /
36
- `DropdownMenu`、`Sidebar`、`Alert` / `Skeleton` / `Spinner`、`Loading` / `Empty` / `ErrorState`。
35
+ `Checkbox` / `RadioGroup` / `Switch` / `Slider` / `Combobox` / `Field`、`Calendar`、`Dialog` /
36
+ `AlertDialog` / `Sheet` / `Drawer` / `Popover` / `HoverCard` / `Tooltip` / `DropdownMenu`、`Sidebar`、
37
+ `Pagination`、`Avatar`、`Kbd`、`Toaster` + `toast.add()`、`Alert` / `Skeleton` / `Spinner`、
38
+ `Loading` / `Empty` / `ErrorState`。
37
39
 
38
40
  `/components` にあるもの(抜粋): `PageShell`、`AppShell`、`DashboardCard`、`DataTable`、
39
- `EChart`、`FunnelSteps`、`FilterBar`、`DateRangePicker`、`MetricValue`、`TrendIndicator`。
41
+ 型付きチャート(`LineChart` / `AreaChart` / `BarChart` / `DonutChart` / `BarList` / `CategoryBar` /
42
+ `ProgressCircle` / `Tracker`)、`EChart`、`FunnelSteps`、`FilterBar`、`DateRangePicker`、`KpiCard`、
43
+ `Delta`。グラフはまず型付きチャートで描き、その props で表せない図(二軸・散布図・
44
+ ヒートマップなど)だけ `EChart` に `EChartsOption` を渡します。
40
45
 
41
46
  各コンポーネントの props と使い方は [コンポーネント](components) タブにまとめてあります。
42
47
 
@@ -203,13 +208,15 @@ import { cn } from "@squadbase/vantage/ui";
203
208
  コンポーネントの中身を自分のものにしたいときは、編集可能なソースを `components/` にコピーします。
204
209
 
205
210
  ```bash
206
- vantage add ui data-table # 編集可能な DataTable をコピー
211
+ vantage add ui data-table # 編集可能な DataTable をコピー → components/ui/data-table.tsx
212
+ vantage add ui bar-chart # /components の部品も同じく add ui で取り出せる
207
213
  vantage add block sales-overview
208
214
  ```
209
215
 
210
- > [!NOTE]
211
- > 現行プロトタイプで `vantage add` がコピーできるのは `data-table`(ui)と `sales-overview`(block)
212
- > のみです。その他の UI コンポーネントは import 専用です。
216
+ `/ui` のプリミティブも `/components` の部品も、すべて kebab-case の名前で `add ui` に渡せます
217
+ (各コンポーネントのページに取り込みコマンドがあります)。コピーの中の import は公開サブパス
218
+ (`@squadbase/vantage/ui` など)に書き換わっているので、そのまま動きます。使うだけならコピーは
219
+ 要りません。import が既定です。
213
220
 
214
221
  ## 次に読む
215
222
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@squadbase/vantage",
3
- "version": "0.6.1-dev2.5f947f1",
3
+ "version": "0.6.2-dev1.0017a4d",
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,62 +99,76 @@
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
- "typecheck": "tsc --noEmit",
110
- "type-check": "tsc --noEmit",
111
- "prepublishOnly": "node scripts/build-docs.mjs && node scripts/build.mjs",
112
- "release": "npm publish --@squadbase:registry=https://registry.npmjs.org",
113
- "site:install": "npm --prefix site install",
114
- "site:dev": "npm --prefix site run dev",
115
- "site:build": "npm --prefix site run build"
116
- },
117
102
  "dependencies": {
118
103
  "@base-ui/react": "^1.6.0",
119
- "@hono/node-server": "^2.0.8",
104
+ "@hono/node-server": "^2.1.5",
120
105
  "@streamdown/code": "^1.1.1",
121
- "@tailwindcss/vite": "^4.3.2",
106
+ "@tailwindcss/vite": "^4.3.3",
122
107
  "@tanstack/react-query": "^5.101.2",
123
108
  "@tanstack/react-router": "^1.170.17",
124
109
  "@tanstack/react-table": "^8.21.3",
125
- "@vitejs/plugin-react": "^6.0.3",
110
+ "@vitejs/plugin-react": "^6.1.2",
126
111
  "class-variance-authority": "^0.7.1",
127
112
  "clsx": "^2.1.1",
128
113
  "cmdk": "^1.1.1",
129
114
  "date-fns": "^4.1.0",
130
115
  "echarts": "^6.0.0",
131
- "esbuild": "^0.28.1",
116
+ "esbuild": "0.28.1",
132
117
  "fflate": "^0.8.3",
133
- "hono": "^4.13.5",
118
+ "hono": "^4.13.13",
134
119
  "html-to-image": "^1.11.13",
135
120
  "lucide-react": "^0.468.0",
136
121
  "papaparse": "^5.7.0",
137
122
  "picocolors": "^1.1.1",
138
123
  "react-day-picker": "^10.0.1",
139
124
  "read-excel-file": "^9.3.10",
125
+ "shiki": "3.23.0",
140
126
  "streamdown": "^2.5.0",
141
- "tailwind-merge": "^3.0.0",
142
- "tailwindcss": "^4.3.2",
127
+ "tailwind-merge": "3.6.0",
128
+ "tailwindcss": "^4.3.3",
143
129
  "tw-animate-css": "^1.0.0",
144
- "vite": "^8.1.4"
130
+ "vite": "^8.3.4"
145
131
  },
146
132
  "peerDependencies": {
147
133
  "react": ">=18.2.0",
148
- "react-dom": ">=18.2.0"
134
+ "react-dom": ">=18.2.0",
135
+ "typescript": ">=5.0.0"
136
+ },
137
+ "peerDependenciesMeta": {
138
+ "typescript": {
139
+ "optional": true
140
+ }
149
141
  },
150
142
  "devDependencies": {
151
143
  "@types/node": "^22.10.0",
152
144
  "@types/papaparse": "^5.5.2",
153
145
  "@types/react": "^19.2.0",
154
146
  "@types/react-dom": "^19.2.0",
155
- "react": "^19.2.7",
156
- "react-dom": "^19.2.7",
147
+ "jsdom": "^26.0.0",
148
+ "react": "^19.3.1",
149
+ "react-dom": "^19.3.1",
157
150
  "tsup": "^8.5.1",
158
- "typescript": "^5.7.0"
151
+ "typescript": "^5.7.0",
152
+ "vitest": "^5.0.5",
153
+ "@squadbase/squadkit": "0.0.0"
154
+ },
155
+ "gitHead": "0017a4d13781ae1f7e5b6425487b6ba9a212a628",
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"
159
173
  }
160
- }
174
+ }
@@ -0,0 +1,76 @@
1
+ // Copied by `vantage add ui accordion`. This file is yours to edit.
2
+ // Generated from @squadbase/squadkit registry/ui/accordion.tsx by `pnpm run registry` (in Vantage, edit packages/squadkit, not registry/).
3
+ "use client"
4
+
5
+ import { Accordion as AccordionPrimitive } from "@base-ui/react/accordion"
6
+
7
+ import { cn } from "@squadbase/vantage/ui"
8
+ import { ChevronDownIcon, ChevronUpIcon } from "lucide-react"
9
+
10
+ function Accordion({ className, ...props }: AccordionPrimitive.Root.Props) {
11
+ return (
12
+ <AccordionPrimitive.Root
13
+ data-slot="accordion"
14
+ className={cn("flex w-full flex-col", className)}
15
+ {...props}
16
+ />
17
+ )
18
+ }
19
+
20
+ function AccordionItem({ className, ...props }: AccordionPrimitive.Item.Props) {
21
+ return (
22
+ <AccordionPrimitive.Item
23
+ data-slot="accordion-item"
24
+ className={cn("not-last:border-b", className)}
25
+ {...props}
26
+ />
27
+ )
28
+ }
29
+
30
+ function AccordionTrigger({
31
+ className,
32
+ children,
33
+ ...props
34
+ }: AccordionPrimitive.Trigger.Props) {
35
+ return (
36
+ <AccordionPrimitive.Header className="flex">
37
+ <AccordionPrimitive.Trigger
38
+ data-slot="accordion-trigger"
39
+ className={cn(
40
+ "group/accordion-trigger relative flex flex-1 items-start justify-between rounded-lg border border-transparent py-2.5 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:after:border-ring aria-disabled:pointer-events-none aria-disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground",
41
+ className
42
+ )}
43
+ {...props}
44
+ >
45
+ {children}
46
+ <ChevronDownIcon data-slot="accordion-trigger-icon" className="pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden" />
47
+ <ChevronUpIcon data-slot="accordion-trigger-icon" className="pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline" />
48
+ </AccordionPrimitive.Trigger>
49
+ </AccordionPrimitive.Header>
50
+ )
51
+ }
52
+
53
+ function AccordionContent({
54
+ className,
55
+ children,
56
+ ...props
57
+ }: AccordionPrimitive.Panel.Props) {
58
+ return (
59
+ <AccordionPrimitive.Panel
60
+ data-slot="accordion-content"
61
+ className="overflow-hidden text-sm data-open:animate-accordion-down data-closed:animate-accordion-up motion-reduce:animate-none"
62
+ {...props}
63
+ >
64
+ <div
65
+ className={cn(
66
+ "h-(--accordion-panel-height) pt-0 pb-2.5 data-ending-style:h-0 data-starting-style:h-0 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4",
67
+ className
68
+ )}
69
+ >
70
+ {children}
71
+ </div>
72
+ </AccordionPrimitive.Panel>
73
+ )
74
+ }
75
+
76
+ export { Accordion, AccordionItem, AccordionTrigger, AccordionContent }