@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,6 @@
1
+ export { add, syncAgentsFile } from './chunk-AABMKHEU.js';
2
+ import './chunk-RNTDBX6S.js';
3
+ import './chunk-GNXCX4WE.js';
4
+ import './chunk-C2CX6GLX.js';
5
+ //# sourceMappingURL=add-4GHF2TX2.js.map
6
+ //# sourceMappingURL=add-4GHF2TX2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"add-4GHF2TX2.js"}
@@ -1,12 +1,12 @@
1
- import { runDiagnostics } from './chunk-BCE22JSM.js';
2
- import './chunk-JGRMRXXZ.js';
3
- import { vantagePlugin } from './chunk-T3FLAGI6.js';
4
- import { generateArtifacts } from './chunk-EP6JHXSR.js';
5
- import './chunk-KLEIVDUV.js';
6
- import { scanProject, timedAsync } from './chunk-ZVANIULZ.js';
1
+ import { runDiagnostics } from './chunk-7DZGJQ3P.js';
2
+ import './chunk-JKLLFVEU.js';
3
+ import { vantagePlugin } from './chunk-2ICNHUG6.js';
4
+ import { generateArtifacts } from './chunk-WAMZWZJB.js';
5
+ import './chunk-CEXAQQ5W.js';
6
+ import { scanProject, timedAsync } from './chunk-RNTDBX6S.js';
7
7
  import './chunk-46QI6GFC.js';
8
8
  import './chunk-B7LLBNLV.js';
9
- import { printDiagnostics, log, applyApiBaseUrlFlag } from './chunk-3G43C6OL.js';
9
+ import { printDiagnostics, log, applyApiBaseUrlFlag } from './chunk-GNXCX4WE.js';
10
10
  import { VANTAGE_DIR, MANIFEST_SCHEMA_VERSION } from './chunk-C2CX6GLX.js';
11
11
  import fs from 'fs';
12
12
  import path from 'path';
@@ -104,5 +104,5 @@ function writeDeployManifest(root, model) {
104
104
  }
105
105
 
106
106
  export { build };
107
- //# sourceMappingURL=build-O5TVNH4E.js.map
108
- //# sourceMappingURL=build-O5TVNH4E.js.map
107
+ //# sourceMappingURL=build-X5NVCQKT.js.map
108
+ //# sourceMappingURL=build-X5NVCQKT.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/build.ts"],"names":["viteBuild"],"mappings":"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","file":"build-O5TVNH4E.js","sourcesContent":["import fs from \"node:fs\"\nimport path from \"node:path\"\nimport { build as viteBuild, loadEnv } from \"vite\"\nimport { MANIFEST_SCHEMA_VERSION, VANTAGE_DIR } from \"../core/constants\"\nimport { runDiagnostics } from \"../core/diagnostics\"\nimport { generateArtifacts } from \"../core/generate\"\nimport { timedAsync } from \"../core/profile\"\nimport { scanProject } from \"../core/scan\"\nimport type { RouteModel } from \"../core/types\"\nimport { vantagePlugin } from \"../vite/index\"\nimport { applyApiBaseUrlFlag, log, printDiagnostics, type ParsedArgs } from \"./util\"\n\nconst SERVER_ENTRY = `// AUTO-GENERATED by @squadbase/vantage.\nimport path from \"node:path\"\nimport { fileURLToPath } from \"node:url\"\nimport { startNodeServer } from \"@squadbase/vantage/server/node\"\nimport { apiRoutes } from \"./server-routes.gen\"\n\nconst clientDir = path.resolve(path.dirname(fileURLToPath(import.meta.url)), \"../client\")\nstartNodeServer({ apiRoutes, clientDir })\n`\n\n/** `vantage build` — build client and (optionally) server into dist/. */\nexport async function build(root: string, args: ParsedArgs): Promise<number> {\n const model = scanProject(root)\n const errors = runDiagnostics(root, model).filter((d) => d.severity === \"error\")\n if (errors.length) {\n printDiagnostics(errors)\n log.error(\"Fix the errors above before building.\")\n return 1\n }\n\n const mode = \"production\"\n // `--api-base-url` feeds the client's PUBLIC_API_BASE_URL. Setting it on\n // process.env (before loadEnv/Vite read env) makes the flag win over any .env\n // value and keeps the single env-prefix mechanism — no Vite `define`.\n applyApiBaseUrlFlag(args)\n const env = { ...process.env, ...loadEnv(mode, root, \"\") }\n const quiet = Boolean(args.flags.json)\n\n // Write .vantage/ up front instead of letting the plugin do it at\n // configResolved: the server bundle reads server-routes.gen.ts, so once the\n // artifacts exist the two builds no longer depend on each other and can run\n // at the same time (they write to dist/client and dist/server respectively).\n generateArtifacts({ root, model })\n\n if (!quiet) log.step(model.hasServer ? \"Building client and server…\" : \"Building client…\")\n\n const clientBuild = timedAsync(\"build:client\", async () => {\n await viteBuild({\n configFile: false,\n root,\n mode,\n plugins: [vantagePlugin({ root, env, model, artifactsWritten: true })],\n logLevel: quiet ? \"silent\" : args.flags.verbose ? \"info\" : \"warn\",\n })\n // The HTML input lives in .vantage/, so Vite emits it to dist/client/.vantage/.\n // Hoist it to dist/client/index.html (asset URLs are already root-absolute).\n relocateClientHtml(root)\n })\n\n const serverBuild = model.hasServer\n ? timedAsync(\"build:server\", () => buildServer(root))\n : Promise.resolve()\n\n await Promise.all([clientBuild, serverBuild])\n\n writeDeployManifest(root, model)\n if (!quiet) log.ok(`Build complete → ${path.relative(process.cwd(), path.join(root, \"dist\")) || \"dist\"}/`)\n\n if (args.flags.json) {\n process.stdout.write(\n JSON.stringify({\n ok: true,\n mode: model.hasServer ? \"fullstack\" : \"spa\",\n output: \"dist\",\n pages: model.pages.length,\n apis: model.apis.length,\n }) + \"\\n\",\n )\n }\n return 0\n}\n\nfunction relocateClientHtml(root: string): void {\n const clientDir = path.join(root, \"dist\", \"client\")\n const nested = path.join(clientDir, VANTAGE_DIR, \"index.html\")\n const target = path.join(clientDir, \"index.html\")\n if (fs.existsSync(nested)) {\n fs.mkdirSync(clientDir, { recursive: true })\n fs.renameSync(nested, target)\n fs.rmSync(path.join(clientDir, VANTAGE_DIR), { recursive: true, force: true })\n }\n}\n\nasync function buildServer(root: string): Promise<void> {\n // Loaded here, not at module scope: an SPA project never builds a server and\n // should not pay for esbuild's binary being brought up.\n const { build: esbuildBuild } = await import(\"esbuild\")\n const vantageDir = path.join(root, VANTAGE_DIR)\n const entry = path.join(vantageDir, \"server-entry.ts\")\n fs.writeFileSync(entry, SERVER_ENTRY)\n await esbuildBuild({\n entryPoints: [entry],\n outfile: path.join(root, \"dist\", \"server\", \"index.mjs\"),\n bundle: true,\n platform: \"node\",\n format: \"esm\",\n target: \"node20\",\n logLevel: \"warning\",\n banner: { js: \"// @squadbase/vantage server bundle\" },\n })\n}\n\nfunction writeDeployManifest(root: string, model: RouteModel): void {\n const dist = path.join(root, \"dist\")\n fs.mkdirSync(dist, { recursive: true })\n const manifest = {\n schemaVersion: MANIFEST_SCHEMA_VERSION,\n mode: model.hasServer ? \"fullstack\" : \"spa\",\n client: \"./client\",\n ...(model.hasServer ? { server: \"./server/index.mjs\" } : {}),\n spaFallback: \"./client/index.html\",\n runtime: \"node\",\n }\n fs.writeFileSync(path.join(dist, \"vantage-manifest.json\"), JSON.stringify(manifest, null, 2) + \"\\n\")\n}\n"]}
1
+ {"version":3,"sources":["../src/cli/build.ts"],"names":["viteBuild"],"mappings":"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","file":"build-X5NVCQKT.js","sourcesContent":["import fs from \"node:fs\"\nimport path from \"node:path\"\nimport { build as viteBuild, loadEnv } from \"vite\"\nimport { MANIFEST_SCHEMA_VERSION, VANTAGE_DIR } from \"../core/constants\"\nimport { runDiagnostics } from \"../core/diagnostics\"\nimport { generateArtifacts } from \"../core/generate\"\nimport { timedAsync } from \"../core/profile\"\nimport { scanProject } from \"../core/scan\"\nimport type { RouteModel } from \"../core/types\"\nimport { vantagePlugin } from \"../vite/index\"\nimport { applyApiBaseUrlFlag, log, printDiagnostics, type ParsedArgs } from \"./util\"\n\nconst SERVER_ENTRY = `// AUTO-GENERATED by @squadbase/vantage.\nimport path from \"node:path\"\nimport { fileURLToPath } from \"node:url\"\nimport { startNodeServer } from \"@squadbase/vantage/server/node\"\nimport { apiRoutes } from \"./server-routes.gen\"\n\nconst clientDir = path.resolve(path.dirname(fileURLToPath(import.meta.url)), \"../client\")\nstartNodeServer({ apiRoutes, clientDir })\n`\n\n/** `vantage build` — build client and (optionally) server into dist/. */\nexport async function build(root: string, args: ParsedArgs): Promise<number> {\n const model = scanProject(root)\n const errors = runDiagnostics(root, model).filter((d) => d.severity === \"error\")\n if (errors.length) {\n printDiagnostics(errors)\n log.error(\"Fix the errors above before building.\")\n return 1\n }\n\n const mode = \"production\"\n // `--api-base-url` feeds the client's PUBLIC_API_BASE_URL. Setting it on\n // process.env (before loadEnv/Vite read env) makes the flag win over any .env\n // value and keeps the single env-prefix mechanism — no Vite `define`.\n applyApiBaseUrlFlag(args)\n const env = { ...process.env, ...loadEnv(mode, root, \"\") }\n const quiet = Boolean(args.flags.json)\n\n // Write .vantage/ up front instead of letting the plugin do it at\n // configResolved: the server bundle reads server-routes.gen.ts, so once the\n // artifacts exist the two builds no longer depend on each other and can run\n // at the same time (they write to dist/client and dist/server respectively).\n generateArtifacts({ root, model })\n\n if (!quiet) log.step(model.hasServer ? \"Building client and server…\" : \"Building client…\")\n\n const clientBuild = timedAsync(\"build:client\", async () => {\n await viteBuild({\n configFile: false,\n root,\n mode,\n plugins: [vantagePlugin({ root, env, model, artifactsWritten: true })],\n logLevel: quiet ? \"silent\" : args.flags.verbose ? \"info\" : \"warn\",\n })\n // The HTML input lives in .vantage/, so Vite emits it to dist/client/.vantage/.\n // Hoist it to dist/client/index.html (asset URLs are already root-absolute).\n relocateClientHtml(root)\n })\n\n const serverBuild = model.hasServer\n ? timedAsync(\"build:server\", () => buildServer(root))\n : Promise.resolve()\n\n await Promise.all([clientBuild, serverBuild])\n\n writeDeployManifest(root, model)\n if (!quiet) log.ok(`Build complete → ${path.relative(process.cwd(), path.join(root, \"dist\")) || \"dist\"}/`)\n\n if (args.flags.json) {\n process.stdout.write(\n JSON.stringify({\n ok: true,\n mode: model.hasServer ? \"fullstack\" : \"spa\",\n output: \"dist\",\n pages: model.pages.length,\n apis: model.apis.length,\n }) + \"\\n\",\n )\n }\n return 0\n}\n\nfunction relocateClientHtml(root: string): void {\n const clientDir = path.join(root, \"dist\", \"client\")\n const nested = path.join(clientDir, VANTAGE_DIR, \"index.html\")\n const target = path.join(clientDir, \"index.html\")\n if (fs.existsSync(nested)) {\n fs.mkdirSync(clientDir, { recursive: true })\n fs.renameSync(nested, target)\n fs.rmSync(path.join(clientDir, VANTAGE_DIR), { recursive: true, force: true })\n }\n}\n\nasync function buildServer(root: string): Promise<void> {\n // Loaded here, not at module scope: an SPA project never builds a server and\n // should not pay for esbuild's binary being brought up.\n const { build: esbuildBuild } = await import(\"esbuild\")\n const vantageDir = path.join(root, VANTAGE_DIR)\n const entry = path.join(vantageDir, \"server-entry.ts\")\n fs.writeFileSync(entry, SERVER_ENTRY)\n await esbuildBuild({\n entryPoints: [entry],\n outfile: path.join(root, \"dist\", \"server\", \"index.mjs\"),\n bundle: true,\n platform: \"node\",\n format: \"esm\",\n target: \"node20\",\n logLevel: \"warning\",\n banner: { js: \"// @squadbase/vantage server bundle\" },\n })\n}\n\nfunction writeDeployManifest(root: string, model: RouteModel): void {\n const dist = path.join(root, \"dist\")\n fs.mkdirSync(dist, { recursive: true })\n const manifest = {\n schemaVersion: MANIFEST_SCHEMA_VERSION,\n mode: model.hasServer ? \"fullstack\" : \"spa\",\n client: \"./client\",\n ...(model.hasServer ? { server: \"./server/index.mjs\" } : {}),\n spaFallback: \"./client/index.html\",\n runtime: \"node\",\n }\n fs.writeFileSync(path.join(dist, \"vantage-manifest.json\"), JSON.stringify(manifest, null, 2) + \"\\n\")\n}\n"]}
@@ -1,8 +1,8 @@
1
- import { runDiagnostics } from './chunk-BCE22JSM.js';
2
- import './chunk-JGRMRXXZ.js';
3
- import './chunk-KLEIVDUV.js';
4
- import { scanProject } from './chunk-ZVANIULZ.js';
5
- import { printJson, log, printDiagnostics } from './chunk-3G43C6OL.js';
1
+ import { runDiagnostics } from './chunk-7DZGJQ3P.js';
2
+ import './chunk-JKLLFVEU.js';
3
+ import './chunk-CEXAQQ5W.js';
4
+ import { scanProject } from './chunk-RNTDBX6S.js';
5
+ import { printJson, log, printDiagnostics } from './chunk-GNXCX4WE.js';
6
6
  import './chunk-C2CX6GLX.js';
7
7
 
8
8
  // @squadbase/vantage — generated build. Do not edit.
@@ -34,5 +34,5 @@ async function check(root, args) {
34
34
  }
35
35
 
36
36
  export { check };
37
- //# sourceMappingURL=check-WFBEDHDR.js.map
38
- //# sourceMappingURL=check-WFBEDHDR.js.map
37
+ //# sourceMappingURL=check-ZBIH422T.js.map
38
+ //# sourceMappingURL=check-ZBIH422T.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/check.ts"],"names":[],"mappings":";;;;;;;;;;AAKA,eAAsB,KAAA,CAAM,MAAc,IAAA,EAAmC;AAC3E,EAAA,MAAM,KAAA,GAAQ,YAAY,IAAI,CAAA;AAC9B,EAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,IAAA,EAAM,KAAK,CAAA;AACxC,EAAA,MAAM,SAAS,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,OAAO,CAAA;AACzD,EAAA,MAAM,WAAW,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,SAAS,CAAA;AAE7D,EAAA,IAAI,IAAA,CAAK,MAAM,IAAA,EAAM;AACnB,IAAA,SAAA,CAAU;AAAA,MACR,EAAA,EAAI,OAAO,MAAA,KAAW,CAAA;AAAA,MACtB,YAAY,MAAA,CAAO,MAAA;AAAA,MACnB,cAAc,QAAA,CAAS,MAAA;AAAA,MACvB,WAAA,EAAa;AAAA,KACd,CAAA;AACD,IAAA,OAAO,MAAA,CAAO,SAAS,CAAA,GAAI,CAAA;AAAA,EAC7B;AAEA,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,GAAA,CAAI,GAAG,oBAAoB,CAAA;AAC3B,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,EAAA,IAAI,MAAA,CAAO,MAAA,EAAQ,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,OAAO,MAAM,CAAA,WAAA,EAAc,QAAA,CAAS,MAAM,CAAA,YAAA,CAAc,CAAA;AAAA,OACnF,GAAA,CAAI,IAAA,CAAK,CAAA,EAAG,QAAA,CAAS,MAAM,CAAA,YAAA,CAAc,CAAA;AAC9C,EAAA,OAAO,MAAA,CAAO,SAAS,CAAA,GAAI,CAAA;AAC7B","file":"check-WFBEDHDR.js","sourcesContent":["import { runDiagnostics } from \"../core/diagnostics\"\nimport { scanProject } from \"../core/scan\"\nimport { log, printDiagnostics, printJson, type ParsedArgs } from \"./util\"\n\n/** `vantage check` — static verification of the project. */\nexport async function check(root: string, args: ParsedArgs): Promise<number> {\n const model = scanProject(root)\n const diags = runDiagnostics(root, model)\n const errors = diags.filter((d) => d.severity === \"error\")\n const warnings = diags.filter((d) => d.severity === \"warning\")\n\n if (args.flags.json) {\n printJson({\n ok: errors.length === 0,\n errorCount: errors.length,\n warningCount: warnings.length,\n diagnostics: diags,\n })\n return errors.length ? 1 : 0\n }\n\n if (diags.length === 0) {\n log.ok(\"No problems found.\")\n return 0\n }\n printDiagnostics(diags)\n console.log(\"\")\n if (errors.length) log.error(`${errors.length} error(s), ${warnings.length} warning(s).`)\n else log.warn(`${warnings.length} warning(s).`)\n return errors.length ? 1 : 0\n}\n"]}
1
+ {"version":3,"sources":["../src/cli/check.ts"],"names":[],"mappings":";;;;;;;;;;AAKA,eAAsB,KAAA,CAAM,MAAc,IAAA,EAAmC;AAC3E,EAAA,MAAM,KAAA,GAAQ,YAAY,IAAI,CAAA;AAC9B,EAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,IAAA,EAAM,KAAK,CAAA;AACxC,EAAA,MAAM,SAAS,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,OAAO,CAAA;AACzD,EAAA,MAAM,WAAW,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,SAAS,CAAA;AAE7D,EAAA,IAAI,IAAA,CAAK,MAAM,IAAA,EAAM;AACnB,IAAA,SAAA,CAAU;AAAA,MACR,EAAA,EAAI,OAAO,MAAA,KAAW,CAAA;AAAA,MACtB,YAAY,MAAA,CAAO,MAAA;AAAA,MACnB,cAAc,QAAA,CAAS,MAAA;AAAA,MACvB,WAAA,EAAa;AAAA,KACd,CAAA;AACD,IAAA,OAAO,MAAA,CAAO,SAAS,CAAA,GAAI,CAAA;AAAA,EAC7B;AAEA,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,GAAA,CAAI,GAAG,oBAAoB,CAAA;AAC3B,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,EAAA,IAAI,MAAA,CAAO,MAAA,EAAQ,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,OAAO,MAAM,CAAA,WAAA,EAAc,QAAA,CAAS,MAAM,CAAA,YAAA,CAAc,CAAA;AAAA,OACnF,GAAA,CAAI,IAAA,CAAK,CAAA,EAAG,QAAA,CAAS,MAAM,CAAA,YAAA,CAAc,CAAA;AAC9C,EAAA,OAAO,MAAA,CAAO,SAAS,CAAA,GAAI,CAAA;AAC7B","file":"check-ZBIH422T.js","sourcesContent":["import { runDiagnostics } from \"../core/diagnostics\"\nimport { scanProject } from \"../core/scan\"\nimport { log, printDiagnostics, printJson, type ParsedArgs } from \"./util\"\n\n/** `vantage check` — static verification of the project. */\nexport async function check(root: string, args: ParsedArgs): Promise<number> {\n const model = scanProject(root)\n const diags = runDiagnostics(root, model)\n const errors = diags.filter((d) => d.severity === \"error\")\n const warnings = diags.filter((d) => d.severity === \"warning\")\n\n if (args.flags.json) {\n printJson({\n ok: errors.length === 0,\n errorCount: errors.length,\n warningCount: warnings.length,\n diagnostics: diags,\n })\n return errors.length ? 1 : 0\n }\n\n if (diags.length === 0) {\n log.ok(\"No problems found.\")\n return 0\n }\n printDiagnostics(diags)\n console.log(\"\")\n if (errors.length) log.error(`${errors.length} error(s), ${warnings.length} warning(s).`)\n else log.warn(`${warnings.length} warning(s).`)\n return errors.length ? 1 : 0\n}\n"]}
@@ -0,0 +1,152 @@
1
+ import { cn } from './chunk-U736PVHY.js';
2
+ import { forwardRef, useState, useEffect } from 'react';
3
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
4
+
5
+ // @squadbase/vantage — generated build. Do not edit.
6
+ var VB_WIDTH = 100;
7
+ function normalizeData(values, height, vPad = 2) {
8
+ const min = Math.min(...values);
9
+ const max = Math.max(...values);
10
+ const range = max - min;
11
+ const drawHeight = height - vPad * 2;
12
+ if (range === 0) return values.map(() => vPad + drawHeight / 2);
13
+ return values.map((v) => height - vPad - (v - min) / range * drawHeight);
14
+ }
15
+ function buildLinePath(ys) {
16
+ if (ys.length === 0) return "";
17
+ const step = ys.length > 1 ? VB_WIDTH / (ys.length - 1) : 0;
18
+ return ys.map((y, i) => `${i === 0 ? "M" : "L"}${(i * step).toFixed(2)},${y.toFixed(2)}`).join(" ");
19
+ }
20
+ function buildAreaPath(ys, height) {
21
+ if (ys.length === 0) return "";
22
+ const step = ys.length > 1 ? VB_WIDTH / (ys.length - 1) : 0;
23
+ const lastX = ((ys.length - 1) * step).toFixed(2);
24
+ return `${buildLinePath(ys)} L${lastX},${height} L0,${height} Z`;
25
+ }
26
+ function sparklineHighlightPoints(values) {
27
+ if (values.length === 0) return [];
28
+ const last = values.length - 1;
29
+ const points = [{ kind: "latest", index: last }];
30
+ let maxI = 0;
31
+ let minI = 0;
32
+ let max = values[0];
33
+ let min = max;
34
+ values.forEach((v, i) => {
35
+ if (v >= max) [max, maxI] = [v, i];
36
+ if (v <= min) [min, minI] = [v, i];
37
+ });
38
+ const latest = values[last];
39
+ if (max === min) return points;
40
+ if (max !== latest) points.push({ kind: "max", index: maxI });
41
+ if (min !== latest) points.push({ kind: "min", index: minI });
42
+ return points;
43
+ }
44
+ function buildBarRects(ys, height, gap = 1) {
45
+ const barW = Math.max(1, VB_WIDTH / ys.length - gap);
46
+ return ys.map((y, i) => ({ x: i * (barW + gap), y, w: barW, h: height - y }));
47
+ }
48
+ var NO_ROWS = [];
49
+ var Sparkline = forwardRef(function Sparkline2({
50
+ data = NO_ROWS,
51
+ variant = "line",
52
+ height = 40,
53
+ color = "text-chart-1",
54
+ area = false,
55
+ animate = false,
56
+ highlight = "auto",
57
+ "aria-label": ariaLabel,
58
+ className,
59
+ ...props
60
+ }, ref) {
61
+ const [mounted, setMounted] = useState(false);
62
+ useEffect(() => {
63
+ if (animate) setMounted(true);
64
+ }, [animate]);
65
+ if (data.length === 0) return null;
66
+ const values = data.map((d) => d.value);
67
+ const ys = normalizeData(values, height);
68
+ const step = ys.length > 1 ? VB_WIDTH / (ys.length - 1) : 0;
69
+ const points = variant !== "line" ? [] : highlight === "auto" ? sparklineHighlightPoints(values) : highlight === "latest" ? [{ kind: "latest", index: values.length - 1 }] : [];
70
+ return /* @__PURE__ */ jsxs(
71
+ "svg",
72
+ {
73
+ ref,
74
+ "data-slot": "sparkline",
75
+ viewBox: `0 0 ${VB_WIDTH} ${height}`,
76
+ preserveAspectRatio: "none",
77
+ width: "100%",
78
+ height,
79
+ role: ariaLabel ? "img" : void 0,
80
+ "aria-label": ariaLabel,
81
+ "aria-hidden": ariaLabel ? void 0 : true,
82
+ className: cn("overflow-visible", className),
83
+ ...props,
84
+ children: [
85
+ variant === "line" && /* @__PURE__ */ jsxs(Fragment, { children: [
86
+ area && /* @__PURE__ */ jsx(
87
+ "path",
88
+ {
89
+ d: buildAreaPath(ys, height),
90
+ strokeWidth: 0,
91
+ className: cn("fill-current opacity-15", color)
92
+ }
93
+ ),
94
+ /* @__PURE__ */ jsx(
95
+ "path",
96
+ {
97
+ d: buildLinePath(ys),
98
+ fill: "none",
99
+ strokeWidth: 1.5,
100
+ strokeLinecap: "round",
101
+ strokeLinejoin: "round",
102
+ vectorEffect: "non-scaling-stroke",
103
+ pathLength: animate ? 1 : void 0,
104
+ strokeDasharray: animate ? 1 : void 0,
105
+ strokeDashoffset: animate ? mounted ? 0 : 1 : void 0,
106
+ className: cn("stroke-current", animate && "motion-reduce:transition-none!", color),
107
+ style: animate ? { transition: "stroke-dashoffset 0.6s ease-in-out" } : void 0
108
+ }
109
+ ),
110
+ points.map((p) => {
111
+ const x = (p.index * step).toFixed(2);
112
+ const y = (ys[p.index] ?? 0).toFixed(2);
113
+ return /* @__PURE__ */ jsx(
114
+ "path",
115
+ {
116
+ "data-slot": "sparkline-point",
117
+ "data-point": p.kind,
118
+ d: `M${x},${y} L${x},${y}`,
119
+ fill: "none",
120
+ strokeWidth: p.kind === "latest" ? 5 : 4,
121
+ strokeLinecap: "round",
122
+ vectorEffect: "non-scaling-stroke",
123
+ className: cn("stroke-current", p.kind === "latest" ? color : "text-muted-foreground")
124
+ },
125
+ p.kind
126
+ );
127
+ })
128
+ ] }),
129
+ variant === "bar" && buildBarRects(ys, height).map((rect, i) => /* @__PURE__ */ jsx(
130
+ "rect",
131
+ {
132
+ x: rect.x,
133
+ y: animate ? mounted ? rect.y : height : rect.y,
134
+ width: rect.w,
135
+ height: animate ? mounted ? rect.h : 0 : rect.h,
136
+ rx: 0.5,
137
+ className: cn("fill-current", animate && "motion-reduce:transition-none!", color),
138
+ style: animate ? {
139
+ transition: `height 0.4s ease-out ${i * 0.02}s, y 0.4s ease-out ${i * 0.02}s`
140
+ } : void 0
141
+ },
142
+ i
143
+ ))
144
+ ]
145
+ }
146
+ );
147
+ });
148
+ Sparkline.displayName = "Sparkline";
149
+
150
+ export { Sparkline };
151
+ //# sourceMappingURL=chunk-2IAPIOPS.js.map
152
+ //# sourceMappingURL=chunk-2IAPIOPS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../squadkit/registry/charts/sparkline.tsx"],"names":["Sparkline"],"mappings":"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","file":"chunk-2IAPIOPS.js","sourcesContent":["\"use client\"\n\n/**\n * Sparkline — an inline trend micro-chart. Deliberately *not* an `EChart`: a\n * sparkline sits inside table cells and KPI tiles by the dozen, where one\n * ECharts instance per cell would be wasteful. This renders a single stateless\n * `<svg>` instead, so hundreds of them stay cheap.\n */\nimport { forwardRef, useEffect, useState, type SVGAttributes } from \"react\"\n\nimport { cn } from \"../lib/utils\"\nimport type { ChartHighlight } from \"../lib/types\"\n\nexport type SparklineVariant = \"line\" | \"bar\"\n\nexport interface SparklineDataPoint {\n value: number\n label?: string\n}\n\nexport interface SparklineProps extends SVGAttributes<SVGSVGElement> {\n data: SparklineDataPoint[]\n variant?: SparklineVariant\n height?: number\n /** Tailwind text-colour class; drives both stroke and fill via `currentColor`. */\n color?: string\n area?: boolean\n /** マウント時に線を引く / 棒を伸ばす。既定 `false`(`prefers-reduced-motion` では常に無効)。 */\n animate?: boolean\n /**\n * 点の強調(Tufte 流)。`\"auto\"` は最新・最大・最小の 3 点だけに小さな点を打つ\n * (最新は系列の色、最大・最小は muted)。`\"latest\"` は最新の 1 点だけ、`\"none\"` は線だけ。`variant=\"line\"` のときだけ効く。既定 `\"auto\"`。\n */\n highlight?: ChartHighlight | \"latest\"\n /** 指定すると `role=\"img\"` で読み上げ対象にする。省略時は装飾として `aria-hidden`。 */\n \"aria-label\"?: string\n className?: string\n}\n\nconst VB_WIDTH = 100\n\n/** Map raw values onto SVG y-coordinates (inverted, padded). */\nfunction normalizeData(values: number[], height: number, vPad = 2): number[] {\n const min = Math.min(...values)\n const max = Math.max(...values)\n const range = max - min\n const drawHeight = height - vPad * 2\n if (range === 0) return values.map(() => vPad + drawHeight / 2)\n return values.map((v) => height - vPad - ((v - min) / range) * drawHeight)\n}\n\nfunction buildLinePath(ys: number[]): string {\n if (ys.length === 0) return \"\"\n const step = ys.length > 1 ? VB_WIDTH / (ys.length - 1) : 0\n return ys\n .map((y, i) => `${i === 0 ? \"M\" : \"L\"}${(i * step).toFixed(2)},${y.toFixed(2)}`)\n .join(\" \")\n}\n\nfunction buildAreaPath(ys: number[], height: number): string {\n if (ys.length === 0) return \"\"\n const step = ys.length > 1 ? VB_WIDTH / (ys.length - 1) : 0\n const lastX = ((ys.length - 1) * step).toFixed(2)\n return `${buildLinePath(ys)} L${lastX},${height} L0,${height} Z`\n}\n\nexport type SparklinePointKind = \"latest\" | \"max\" | \"min\"\n\nexport interface SparklinePoint {\n kind: SparklinePointKind\n index: number\n}\n\n/**\n * The points a Tufte-style sparkline marks: the latest, the max and the min.\n * A point that is both latest and max/min is drawn once, as `latest`; a flat\n * series marks only the latest. Ties pick the most recent occurrence.\n */\nexport function sparklineHighlightPoints(values: number[]): SparklinePoint[] {\n if (values.length === 0) return []\n const last = values.length - 1\n const points: SparklinePoint[] = [{ kind: \"latest\", index: last }]\n let maxI = 0\n let minI = 0\n let max = values[0] as number\n let min = max\n values.forEach((v, i) => {\n if (v >= max) [max, maxI] = [v, i]\n if (v <= min) [min, minI] = [v, i]\n })\n const latest = values[last] as number\n if (max === min) return points\n if (max !== latest) points.push({ kind: \"max\", index: maxI })\n if (min !== latest) points.push({ kind: \"min\", index: minI })\n return points\n}\n\ninterface BarRect {\n x: number\n y: number\n w: number\n h: number\n}\n\nfunction buildBarRects(ys: number[], height: number, gap = 1): BarRect[] {\n const barW = Math.max(1, VB_WIDTH / ys.length - gap)\n return ys.map((y, i) => ({ x: i * (barW + gap), y, w: barW, h: height - y }))\n}\n\n/** Rows not given yet (a draft fills props in steps): draw the empty state, keep the same array between renders. */\nconst NO_ROWS: never[] = []\n\nexport const Sparkline = forwardRef<SVGSVGElement, SparklineProps>(function Sparkline(\n {\n data = NO_ROWS,\n variant = \"line\",\n height = 40,\n color = \"text-chart-1\",\n area = false,\n animate = false,\n highlight = \"auto\",\n \"aria-label\": ariaLabel,\n className,\n ...props\n },\n ref,\n) {\n const [mounted, setMounted] = useState(false)\n\n useEffect(() => {\n if (animate) setMounted(true)\n }, [animate])\n\n if (data.length === 0) return null\n\n const values = data.map((d) => d.value)\n const ys = normalizeData(values, height)\n const step = ys.length > 1 ? VB_WIDTH / (ys.length - 1) : 0\n const points =\n variant !== \"line\"\n ? []\n : highlight === \"auto\"\n ? sparklineHighlightPoints(values)\n : highlight === \"latest\"\n ? [{ kind: \"latest\" as const, index: values.length - 1 }]\n : []\n\n return (\n <svg\n ref={ref}\n data-slot=\"sparkline\"\n viewBox={`0 0 ${VB_WIDTH} ${height}`}\n preserveAspectRatio=\"none\"\n width=\"100%\"\n height={height}\n role={ariaLabel ? \"img\" : undefined}\n aria-label={ariaLabel}\n aria-hidden={ariaLabel ? undefined : true}\n className={cn(\"overflow-visible\", className)}\n {...props}\n >\n {variant === \"line\" && (\n <>\n {area && (\n <path\n d={buildAreaPath(ys, height)}\n strokeWidth={0}\n className={cn(\"fill-current opacity-15\", color)}\n />\n )}\n <path\n d={buildLinePath(ys)}\n fill=\"none\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n vectorEffect=\"non-scaling-stroke\"\n pathLength={animate ? 1 : undefined}\n strokeDasharray={animate ? 1 : undefined}\n strokeDashoffset={animate ? (mounted ? 0 : 1) : undefined}\n className={cn(\"stroke-current\", animate && \"motion-reduce:transition-none!\", color)}\n style={animate ? { transition: \"stroke-dashoffset 0.6s ease-in-out\" } : undefined}\n />\n {/* A zero-length round-capped stroke with a non-scaling width stays a\n circle even though the viewBox stretches (`preserveAspectRatio=\"none\"`). */}\n {points.map((p) => {\n const x = (p.index * step).toFixed(2)\n const y = (ys[p.index] ?? 0).toFixed(2)\n return (\n <path\n key={p.kind}\n data-slot=\"sparkline-point\"\n data-point={p.kind}\n d={`M${x},${y} L${x},${y}`}\n fill=\"none\"\n strokeWidth={p.kind === \"latest\" ? 5 : 4}\n strokeLinecap=\"round\"\n vectorEffect=\"non-scaling-stroke\"\n className={cn(\"stroke-current\", p.kind === \"latest\" ? color : \"text-muted-foreground\")}\n />\n )\n })}\n </>\n )}\n\n {variant === \"bar\" &&\n buildBarRects(ys, height).map((rect, i) => (\n <rect\n key={i}\n x={rect.x}\n y={animate ? (mounted ? rect.y : height) : rect.y}\n width={rect.w}\n height={animate ? (mounted ? rect.h : 0) : rect.h}\n rx={0.5}\n className={cn(\"fill-current\", animate && \"motion-reduce:transition-none!\", color)}\n style={\n animate\n ? {\n transition: `height 0.4s ease-out ${i * 0.02}s, y 0.4s ease-out ${i * 0.02}s`,\n }\n : undefined\n }\n />\n ))}\n </svg>\n )\n})\nSparkline.displayName = \"Sparkline\"\n"]}