@databricks/appkit-ui 0.0.2

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 (359) hide show
  1. package/CLAUDE.md +3 -0
  2. package/DCO +25 -0
  3. package/LICENSE +203 -0
  4. package/NOTICE.md +73 -0
  5. package/README.md +35 -0
  6. package/bin/setup-claude.js +190 -0
  7. package/dist/js/arrow/arrow-client.d.ts +64 -0
  8. package/dist/js/arrow/arrow-client.d.ts.map +1 -0
  9. package/dist/js/arrow/arrow-client.js +181 -0
  10. package/dist/js/arrow/arrow-client.js.map +1 -0
  11. package/dist/js/arrow/index.js +3 -0
  12. package/dist/js/arrow/lazy-arrow.d.ts +23 -0
  13. package/dist/js/arrow/lazy-arrow.d.ts.map +1 -0
  14. package/dist/js/arrow/lazy-arrow.js +86 -0
  15. package/dist/js/arrow/lazy-arrow.js.map +1 -0
  16. package/dist/js/constants.d.ts +10 -0
  17. package/dist/js/constants.d.ts.map +1 -0
  18. package/dist/js/constants.js +30 -0
  19. package/dist/js/constants.js.map +1 -0
  20. package/dist/js/index.d.ts +8 -0
  21. package/dist/js/index.js +8 -0
  22. package/dist/js/sse/connect-sse.d.ts +14 -0
  23. package/dist/js/sse/connect-sse.d.ts.map +1 -0
  24. package/dist/js/sse/connect-sse.js +128 -0
  25. package/dist/js/sse/connect-sse.js.map +1 -0
  26. package/dist/js/sse/types.d.ts +34 -0
  27. package/dist/js/sse/types.d.ts.map +1 -0
  28. package/dist/react/charts/area/index.d.ts +33 -0
  29. package/dist/react/charts/area/index.d.ts.map +1 -0
  30. package/dist/react/charts/area/index.js +29 -0
  31. package/dist/react/charts/area/index.js.map +1 -0
  32. package/dist/react/charts/bar/index.d.ts +43 -0
  33. package/dist/react/charts/bar/index.d.ts.map +1 -0
  34. package/dist/react/charts/bar/index.js +39 -0
  35. package/dist/react/charts/bar/index.js.map +1 -0
  36. package/dist/react/charts/base.d.ts +89 -0
  37. package/dist/react/charts/base.d.ts.map +1 -0
  38. package/dist/react/charts/base.js +123 -0
  39. package/dist/react/charts/base.js.map +1 -0
  40. package/dist/react/charts/chart-error-boundary.js +37 -0
  41. package/dist/react/charts/chart-error-boundary.js.map +1 -0
  42. package/dist/react/charts/constants.d.ts +22 -0
  43. package/dist/react/charts/constants.d.ts.map +1 -0
  44. package/dist/react/charts/constants.js +86 -0
  45. package/dist/react/charts/constants.js.map +1 -0
  46. package/dist/react/charts/create-chart.d.ts +26 -0
  47. package/dist/react/charts/create-chart.d.ts.map +1 -0
  48. package/dist/react/charts/create-chart.js +55 -0
  49. package/dist/react/charts/create-chart.js.map +1 -0
  50. package/dist/react/charts/empty.js +16 -0
  51. package/dist/react/charts/empty.js.map +1 -0
  52. package/dist/react/charts/error.js +16 -0
  53. package/dist/react/charts/error.js.map +1 -0
  54. package/dist/react/charts/heatmap/index.d.ts +42 -0
  55. package/dist/react/charts/heatmap/index.d.ts.map +1 -0
  56. package/dist/react/charts/heatmap/index.js +38 -0
  57. package/dist/react/charts/heatmap/index.js.map +1 -0
  58. package/dist/react/charts/index.js +18 -0
  59. package/dist/react/charts/line/index.d.ts +34 -0
  60. package/dist/react/charts/line/index.d.ts.map +1 -0
  61. package/dist/react/charts/line/index.js +30 -0
  62. package/dist/react/charts/line/index.js.map +1 -0
  63. package/dist/react/charts/loading.js +13 -0
  64. package/dist/react/charts/loading.js.map +1 -0
  65. package/dist/react/charts/normalize.d.ts +37 -0
  66. package/dist/react/charts/normalize.d.ts.map +1 -0
  67. package/dist/react/charts/normalize.js +256 -0
  68. package/dist/react/charts/normalize.js.map +1 -0
  69. package/dist/react/charts/options.d.ts +39 -0
  70. package/dist/react/charts/options.d.ts.map +1 -0
  71. package/dist/react/charts/options.js +212 -0
  72. package/dist/react/charts/options.js.map +1 -0
  73. package/dist/react/charts/pie/index.d.ts +57 -0
  74. package/dist/react/charts/pie/index.d.ts.map +1 -0
  75. package/dist/react/charts/pie/index.js +50 -0
  76. package/dist/react/charts/pie/index.js.map +1 -0
  77. package/dist/react/charts/radar/index.d.ts +32 -0
  78. package/dist/react/charts/radar/index.d.ts.map +1 -0
  79. package/dist/react/charts/radar/index.js +28 -0
  80. package/dist/react/charts/radar/index.js.map +1 -0
  81. package/dist/react/charts/scatter/index.d.ts +32 -0
  82. package/dist/react/charts/scatter/index.d.ts.map +1 -0
  83. package/dist/react/charts/scatter/index.js +28 -0
  84. package/dist/react/charts/scatter/index.js.map +1 -0
  85. package/dist/react/charts/theme.d.ts +23 -0
  86. package/dist/react/charts/theme.d.ts.map +1 -0
  87. package/dist/react/charts/theme.js +96 -0
  88. package/dist/react/charts/theme.js.map +1 -0
  89. package/dist/react/charts/types.d.ts +160 -0
  90. package/dist/react/charts/types.d.ts.map +1 -0
  91. package/dist/react/charts/types.js +17 -0
  92. package/dist/react/charts/types.js.map +1 -0
  93. package/dist/react/charts/utils.d.ts +36 -0
  94. package/dist/react/charts/utils.d.ts.map +1 -0
  95. package/dist/react/charts/utils.js +77 -0
  96. package/dist/react/charts/utils.js.map +1 -0
  97. package/dist/react/charts/wrapper.d.ts +65 -0
  98. package/dist/react/charts/wrapper.d.ts.map +1 -0
  99. package/dist/react/charts/wrapper.js +94 -0
  100. package/dist/react/charts/wrapper.js.map +1 -0
  101. package/dist/react/hooks/index.js +2 -0
  102. package/dist/react/hooks/types.d.ts +101 -0
  103. package/dist/react/hooks/types.d.ts.map +1 -0
  104. package/dist/react/hooks/use-analytics-query.d.ts +33 -0
  105. package/dist/react/hooks/use-analytics-query.d.ts.map +1 -0
  106. package/dist/react/hooks/use-analytics-query.js +146 -0
  107. package/dist/react/hooks/use-analytics-query.js.map +1 -0
  108. package/dist/react/hooks/use-chart-data.d.ts +54 -0
  109. package/dist/react/hooks/use-chart-data.d.ts.map +1 -0
  110. package/dist/react/hooks/use-chart-data.js +80 -0
  111. package/dist/react/hooks/use-chart-data.js.map +1 -0
  112. package/dist/react/hooks/use-mobile.js +21 -0
  113. package/dist/react/hooks/use-mobile.js.map +1 -0
  114. package/dist/react/hooks/use-query-hmr.js +19 -0
  115. package/dist/react/hooks/use-query-hmr.js.map +1 -0
  116. package/dist/react/index.d.ts +75 -0
  117. package/dist/react/index.js +79 -0
  118. package/dist/react/lib/format.js +42 -0
  119. package/dist/react/lib/format.js.map +1 -0
  120. package/dist/react/lib/utils.js +11 -0
  121. package/dist/react/lib/utils.js.map +1 -0
  122. package/dist/react/table/data-table.d.ts +47 -0
  123. package/dist/react/table/data-table.d.ts.map +1 -0
  124. package/dist/react/table/data-table.js +205 -0
  125. package/dist/react/table/data-table.js.map +1 -0
  126. package/dist/react/table/empty.js +16 -0
  127. package/dist/react/table/empty.js.map +1 -0
  128. package/dist/react/table/error.js +16 -0
  129. package/dist/react/table/error.js.map +1 -0
  130. package/dist/react/table/index.js +1 -0
  131. package/dist/react/table/loading.js +50 -0
  132. package/dist/react/table/loading.js.map +1 -0
  133. package/dist/react/table/table-wrapper.js +143 -0
  134. package/dist/react/table/table-wrapper.js.map +1 -0
  135. package/dist/react/table/types.d.ts +55 -0
  136. package/dist/react/table/types.d.ts.map +1 -0
  137. package/dist/react/ui/accordion.d.ts +25 -0
  138. package/dist/react/ui/accordion.d.ts.map +1 -0
  139. package/dist/react/ui/accordion.js +45 -0
  140. package/dist/react/ui/accordion.js.map +1 -0
  141. package/dist/react/ui/alert-dialog.d.ts +49 -0
  142. package/dist/react/ui/alert-dialog.d.ts.map +1 -0
  143. package/dist/react/ui/alert-dialog.js +82 -0
  144. package/dist/react/ui/alert-dialog.js.map +1 -0
  145. package/dist/react/ui/alert.d.ts +25 -0
  146. package/dist/react/ui/alert.d.ts.map +1 -0
  147. package/dist/react/ui/alert.js +38 -0
  148. package/dist/react/ui/alert.js.map +1 -0
  149. package/dist/react/ui/aspect-ratio.d.ts +10 -0
  150. package/dist/react/ui/aspect-ratio.d.ts.map +1 -0
  151. package/dist/react/ui/aspect-ratio.js +16 -0
  152. package/dist/react/ui/aspect-ratio.js.map +1 -0
  153. package/dist/react/ui/avatar.d.ts +20 -0
  154. package/dist/react/ui/avatar.d.ts.map +1 -0
  155. package/dist/react/ui/avatar.js +30 -0
  156. package/dist/react/ui/avatar.js.map +1 -0
  157. package/dist/react/ui/badge.d.ts +20 -0
  158. package/dist/react/ui/badge.d.ts.map +1 -0
  159. package/dist/react/ui/badge.js +26 -0
  160. package/dist/react/ui/badge.js.map +1 -0
  161. package/dist/react/ui/breadcrumb.d.ts +38 -0
  162. package/dist/react/ui/breadcrumb.d.ts.map +1 -0
  163. package/dist/react/ui/breadcrumb.js +71 -0
  164. package/dist/react/ui/breadcrumb.js.map +1 -0
  165. package/dist/react/ui/button-group.d.ts +29 -0
  166. package/dist/react/ui/button-group.d.ts.map +1 -0
  167. package/dist/react/ui/button-group.js +41 -0
  168. package/dist/react/ui/button-group.js.map +1 -0
  169. package/dist/react/ui/button.d.ts +22 -0
  170. package/dist/react/ui/button.d.ts.map +1 -0
  171. package/dist/react/ui/button.js +45 -0
  172. package/dist/react/ui/button.js.map +1 -0
  173. package/dist/react/ui/calendar.d.ts +27 -0
  174. package/dist/react/ui/calendar.d.ts.map +1 -0
  175. package/dist/react/ui/calendar.js +109 -0
  176. package/dist/react/ui/calendar.js.map +1 -0
  177. package/dist/react/ui/card.d.ts +35 -0
  178. package/dist/react/ui/card.d.ts.map +1 -0
  179. package/dist/react/ui/card.js +57 -0
  180. package/dist/react/ui/card.js.map +1 -0
  181. package/dist/react/ui/carousel.d.ts +48 -0
  182. package/dist/react/ui/carousel.d.ts.map +1 -0
  183. package/dist/react/ui/carousel.js +134 -0
  184. package/dist/react/ui/carousel.js.map +1 -0
  185. package/dist/react/ui/chart.d.ts +80 -0
  186. package/dist/react/ui/chart.d.ts.map +1 -0
  187. package/dist/react/ui/chart.js +143 -0
  188. package/dist/react/ui/chart.js.map +1 -0
  189. package/dist/react/ui/checkbox.d.ts +12 -0
  190. package/dist/react/ui/checkbox.d.ts.map +1 -0
  191. package/dist/react/ui/checkbox.js +24 -0
  192. package/dist/react/ui/checkbox.js.map +1 -0
  193. package/dist/react/ui/collapsible.d.ts +16 -0
  194. package/dist/react/ui/collapsible.d.ts.map +1 -0
  195. package/dist/react/ui/collapsible.js +26 -0
  196. package/dist/react/ui/collapsible.js.map +1 -0
  197. package/dist/react/ui/command.d.ts +53 -0
  198. package/dist/react/ui/command.d.ts.map +1 -0
  199. package/dist/react/ui/command.js +87 -0
  200. package/dist/react/ui/command.js.map +1 -0
  201. package/dist/react/ui/context-menu.d.ts +77 -0
  202. package/dist/react/ui/context-menu.d.ts.map +1 -0
  203. package/dist/react/ui/context-menu.js +125 -0
  204. package/dist/react/ui/context-menu.js.map +1 -0
  205. package/dist/react/ui/dialog.d.ts +48 -0
  206. package/dist/react/ui/dialog.d.ts.map +1 -0
  207. package/dist/react/ui/dialog.js +87 -0
  208. package/dist/react/ui/dialog.js.map +1 -0
  209. package/dist/react/ui/drawer.d.ts +45 -0
  210. package/dist/react/ui/drawer.d.ts.map +1 -0
  211. package/dist/react/ui/drawer.js +81 -0
  212. package/dist/react/ui/drawer.js.map +1 -0
  213. package/dist/react/ui/dropdown-menu.d.ts +78 -0
  214. package/dist/react/ui/dropdown-menu.d.ts.map +1 -0
  215. package/dist/react/ui/dropdown-menu.js +124 -0
  216. package/dist/react/ui/dropdown-menu.js.map +1 -0
  217. package/dist/react/ui/empty.d.ts +36 -0
  218. package/dist/react/ui/empty.d.ts.map +1 -0
  219. package/dist/react/ui/empty.js +62 -0
  220. package/dist/react/ui/empty.js.map +1 -0
  221. package/dist/react/ui/field.d.ts +65 -0
  222. package/dist/react/ui/field.d.ts.map +1 -0
  223. package/dist/react/ui/field.js +120 -0
  224. package/dist/react/ui/field.js.map +1 -0
  225. package/dist/react/ui/form.d.ts +46 -0
  226. package/dist/react/ui/form.d.ts.map +1 -0
  227. package/dist/react/ui/form.js +92 -0
  228. package/dist/react/ui/form.js.map +1 -0
  229. package/dist/react/ui/hover-card.d.ts +20 -0
  230. package/dist/react/ui/hover-card.d.ts.map +1 -0
  231. package/dist/react/ui/hover-card.js +35 -0
  232. package/dist/react/ui/hover-card.js.map +1 -0
  233. package/dist/react/ui/index.js +53 -0
  234. package/dist/react/ui/input-group.d.ts +44 -0
  235. package/dist/react/ui/input-group.d.ts.map +1 -0
  236. package/dist/react/ui/input-group.js +82 -0
  237. package/dist/react/ui/input-group.js.map +1 -0
  238. package/dist/react/ui/input-otp.d.ts +29 -0
  239. package/dist/react/ui/input-otp.d.ts.map +1 -0
  240. package/dist/react/ui/input-otp.js +47 -0
  241. package/dist/react/ui/input-otp.js.map +1 -0
  242. package/dist/react/ui/input.d.ts +12 -0
  243. package/dist/react/ui/input.d.ts.map +1 -0
  244. package/dist/react/ui/input.js +16 -0
  245. package/dist/react/ui/input.js.map +1 -0
  246. package/dist/react/ui/item.d.ts +63 -0
  247. package/dist/react/ui/item.d.ts.map +1 -0
  248. package/dist/react/ui/item.js +118 -0
  249. package/dist/react/ui/item.js.map +1 -0
  250. package/dist/react/ui/kbd.d.ts +14 -0
  251. package/dist/react/ui/kbd.d.ts.map +1 -0
  252. package/dist/react/ui/kbd.js +22 -0
  253. package/dist/react/ui/kbd.js.map +1 -0
  254. package/dist/react/ui/label.d.ts +12 -0
  255. package/dist/react/ui/label.d.ts.map +1 -0
  256. package/dist/react/ui/label.js +18 -0
  257. package/dist/react/ui/label.js.map +1 -0
  258. package/dist/react/ui/menubar.d.ts +85 -0
  259. package/dist/react/ui/menubar.d.ts.map +1 -0
  260. package/dist/react/ui/menubar.js +134 -0
  261. package/dist/react/ui/menubar.js.map +1 -0
  262. package/dist/react/ui/navigation-menu.d.ts +47 -0
  263. package/dist/react/ui/navigation-menu.d.ts.map +1 -0
  264. package/dist/react/ui/navigation-menu.js +82 -0
  265. package/dist/react/ui/navigation-menu.js.map +1 -0
  266. package/dist/react/ui/pagination.d.ts +40 -0
  267. package/dist/react/ui/pagination.d.ts.map +1 -0
  268. package/dist/react/ui/pagination.js +80 -0
  269. package/dist/react/ui/pagination.js.map +1 -0
  270. package/dist/react/ui/popover.d.ts +23 -0
  271. package/dist/react/ui/popover.d.ts.map +1 -0
  272. package/dist/react/ui/popover.js +38 -0
  273. package/dist/react/ui/popover.js.map +1 -0
  274. package/dist/react/ui/progress.d.ts +13 -0
  275. package/dist/react/ui/progress.d.ts.map +1 -0
  276. package/dist/react/ui/progress.js +21 -0
  277. package/dist/react/ui/progress.js.map +1 -0
  278. package/dist/react/ui/radio-group.d.ts +16 -0
  279. package/dist/react/ui/radio-group.d.ts.map +1 -0
  280. package/dist/react/ui/radio-group.js +31 -0
  281. package/dist/react/ui/radio-group.js.map +1 -0
  282. package/dist/react/ui/resizable.d.ts +22 -0
  283. package/dist/react/ui/resizable.d.ts.map +1 -0
  284. package/dist/react/ui/resizable.js +34 -0
  285. package/dist/react/ui/resizable.js.map +1 -0
  286. package/dist/react/ui/scroll-area.d.ts +18 -0
  287. package/dist/react/ui/scroll-area.d.ts.map +1 -0
  288. package/dist/react/ui/scroll-area.js +39 -0
  289. package/dist/react/ui/scroll-area.js.map +1 -0
  290. package/dist/react/ui/select.d.ts +53 -0
  291. package/dist/react/ui/select.d.ts.map +1 -0
  292. package/dist/react/ui/select.js +98 -0
  293. package/dist/react/ui/select.js.map +1 -0
  294. package/dist/react/ui/separator.d.ts +14 -0
  295. package/dist/react/ui/separator.d.ts.map +1 -0
  296. package/dist/react/ui/separator.js +20 -0
  297. package/dist/react/ui/separator.js.map +1 -0
  298. package/dist/react/ui/sheet.d.ts +41 -0
  299. package/dist/react/ui/sheet.d.ts.map +1 -0
  300. package/dist/react/ui/sheet.js +83 -0
  301. package/dist/react/ui/sheet.js.map +1 -0
  302. package/dist/react/ui/sidebar.d.ts +167 -0
  303. package/dist/react/ui/sidebar.d.ts.map +1 -0
  304. package/dist/react/ui/sidebar.js +379 -0
  305. package/dist/react/ui/sidebar.js.map +1 -0
  306. package/dist/react/ui/skeleton.d.ts +10 -0
  307. package/dist/react/ui/skeleton.d.ts.map +1 -0
  308. package/dist/react/ui/skeleton.js +15 -0
  309. package/dist/react/ui/skeleton.js.map +1 -0
  310. package/dist/react/ui/slider.d.ts +16 -0
  311. package/dist/react/ui/slider.d.ts.map +1 -0
  312. package/dist/react/ui/slider.js +40 -0
  313. package/dist/react/ui/slider.js.map +1 -0
  314. package/dist/react/ui/sonner.d.ts +10 -0
  315. package/dist/react/ui/sonner.d.ts.map +1 -0
  316. package/dist/react/ui/sonner.js +31 -0
  317. package/dist/react/ui/sonner.js.map +1 -0
  318. package/dist/react/ui/spinner.d.ts +10 -0
  319. package/dist/react/ui/spinner.d.ts.map +1 -0
  320. package/dist/react/ui/spinner.js +17 -0
  321. package/dist/react/ui/spinner.js.map +1 -0
  322. package/dist/react/ui/switch.d.ts +12 -0
  323. package/dist/react/ui/switch.d.ts.map +1 -0
  324. package/dist/react/ui/switch.js +22 -0
  325. package/dist/react/ui/switch.js.map +1 -0
  326. package/dist/react/ui/table.d.ts +39 -0
  327. package/dist/react/ui/table.d.ts.map +1 -0
  328. package/dist/react/ui/table.js +68 -0
  329. package/dist/react/ui/table.js.map +1 -0
  330. package/dist/react/ui/tabs.d.ts +24 -0
  331. package/dist/react/ui/tabs.d.ts.map +1 -0
  332. package/dist/react/ui/tabs.js +39 -0
  333. package/dist/react/ui/tabs.js.map +1 -0
  334. package/dist/react/ui/textarea.d.ts +11 -0
  335. package/dist/react/ui/textarea.d.ts.map +1 -0
  336. package/dist/react/ui/textarea.js +15 -0
  337. package/dist/react/ui/textarea.js.map +1 -0
  338. package/dist/react/ui/toggle-group.d.ts +27 -0
  339. package/dist/react/ui/toggle-group.d.ts.map +1 -0
  340. package/dist/react/ui/toggle-group.js +50 -0
  341. package/dist/react/ui/toggle-group.js.map +1 -0
  342. package/dist/react/ui/toggle.d.ts +20 -0
  343. package/dist/react/ui/toggle.d.ts.map +1 -0
  344. package/dist/react/ui/toggle.js +38 -0
  345. package/dist/react/ui/toggle.js.map +1 -0
  346. package/dist/react/ui/tooltip.d.ts +24 -0
  347. package/dist/react/ui/tooltip.d.ts.map +1 -0
  348. package/dist/react/ui/tooltip.js +39 -0
  349. package/dist/react/ui/tooltip.js.map +1 -0
  350. package/dist/shared/src/sql/helpers.d.ts +160 -0
  351. package/dist/shared/src/sql/helpers.d.ts.map +1 -0
  352. package/dist/shared/src/sql/helpers.js +103 -0
  353. package/dist/shared/src/sql/helpers.js.map +1 -0
  354. package/dist/shared/src/sql/types.d.ts +34 -0
  355. package/dist/shared/src/sql/types.d.ts.map +1 -0
  356. package/dist/styles.css +425 -0
  357. package/llms.txt +193 -0
  358. package/package.json +98 -0
  359. package/scripts/postinstall.js +6 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-chart.js","names":[],"sources":["../../../src/react/charts/create-chart.tsx"],"sourcesContent":["import { BaseChart } from \"./base\";\nimport type { ChartType, UnifiedChartProps } from \"./types\";\nimport { ChartWrapper } from \"./wrapper\";\n\n/**\n * Factory function to create chart components.\n * Eliminates boilerplate by generating components with the same pattern.\n *\n * @param chartType - The ECharts chart type\n * @param displayName - Component display name for React DevTools\n * @returns A typed chart component\n *\n * @example\n * ```tsx\n * export const BarChart = createChart<BarChartProps>(\"bar\", \"BarChart\");\n * export const LineChart = createChart<LineChartProps>(\"line\", \"LineChart\");\n * ```\n */\nexport function createChart<TProps extends UnifiedChartProps>(\n chartType: ChartType,\n displayName: string,\n) {\n const Component = (props: TProps) => {\n const {\n // Query props\n queryKey,\n parameters,\n format,\n transformer,\n // Data props\n data,\n // Common props\n height = 300,\n className,\n ariaLabel,\n testId,\n // All remaining props pass through to BaseChart\n ...chartProps\n } = props as TProps & {\n queryKey?: string;\n parameters?: Record<string, unknown>;\n format?: string;\n transformer?: unknown;\n data?: unknown;\n height?: number;\n className?: string;\n ariaLabel?: string;\n testId?: string;\n };\n\n const wrapperProps =\n data !== undefined\n ? { data, height, className, ariaLabel, testId }\n : {\n queryKey: queryKey as string,\n parameters,\n format,\n transformer,\n height,\n className,\n ariaLabel,\n testId: testId ?? `${chartType}-chart-${queryKey}`,\n };\n\n return (\n <ChartWrapper {...wrapperProps}>\n {(chartData) => (\n <BaseChart\n data={chartData}\n chartType={chartType}\n height={height}\n className={className}\n {...chartProps}\n />\n )}\n </ChartWrapper>\n );\n };\n\n Component.displayName = displayName;\n return Component;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAkBA,SAAgB,YACd,WACA,aACA;CACA,MAAM,aAAa,UAAkB;EACnC,MAAM,EAEJ,UACA,YACA,QACA,aAEA,MAEA,SAAS,KACT,WACA,WACA,QAEA,GAAG,eACD;AA0BJ,SACE,oBAAC;GAAa,GAdd,SAAS,SACL;IAAE;IAAM;IAAQ;IAAW;IAAW;IAAQ,GAC9C;IACY;IACV;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,UAAU,GAAG,UAAU,SAAS;IACzC;cAID,cACA,oBAAC;IACC,MAAM;IACK;IACH;IACG;IACX,GAAI;KACJ;IAES;;AAInB,WAAU,cAAc;AACxB,QAAO"}
@@ -0,0 +1,16 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+
3
+ //#region src/react/charts/empty.tsx
4
+ function EmptyState() {
5
+ return /* @__PURE__ */ jsx("div", {
6
+ className: "w-full p-8 text-center",
7
+ children: /* @__PURE__ */ jsx("p", {
8
+ className: "text-sm text-muted-foreground",
9
+ children: "No data available"
10
+ })
11
+ });
12
+ }
13
+
14
+ //#endregion
15
+ export { EmptyState };
16
+ //# sourceMappingURL=empty.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"empty.js","names":[],"sources":["../../../src/react/charts/empty.tsx"],"sourcesContent":["export function EmptyState() {\n return (\n <div className=\"w-full p-8 text-center\">\n <p className=\"text-sm text-muted-foreground\">No data available</p>\n </div>\n );\n}\n"],"mappings":";;;AAAA,SAAgB,aAAa;AAC3B,QACE,oBAAC;EAAI,WAAU;YACb,oBAAC;GAAE,WAAU;aAAgC;IAAqB;GAC9D"}
@@ -0,0 +1,16 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+
3
+ //#region src/react/charts/error.tsx
4
+ function ErrorState({ error }) {
5
+ return /* @__PURE__ */ jsx("div", {
6
+ className: "w-full p-8 text-center",
7
+ children: /* @__PURE__ */ jsxs("p", {
8
+ className: "text-sm text-destructive",
9
+ children: ["Error loading chart: ", error]
10
+ })
11
+ });
12
+ }
13
+
14
+ //#endregion
15
+ export { ErrorState };
16
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","names":[],"sources":["../../../src/react/charts/error.tsx"],"sourcesContent":["export function ErrorState({ error }: { error: string }) {\n return (\n <div className=\"w-full p-8 text-center\">\n <p className=\"text-sm text-destructive\">Error loading chart: {error}</p>\n </div>\n );\n}\n"],"mappings":";;;AAAA,SAAgB,WAAW,EAAE,SAA4B;AACvD,QACE,oBAAC;EAAI,WAAU;YACb,qBAAC;GAAE,WAAU;cAA2B,yBAAsB;IAAU;GACpE"}
@@ -0,0 +1,42 @@
1
+ import { HeatmapChartProps } from "../types.js";
2
+ import * as react_jsx_runtime276 from "react/jsx-runtime";
3
+
4
+ //#region src/react/charts/heatmap/index.d.ts
5
+
6
+ /**
7
+ * Heatmap Chart component.
8
+ * Supports both JSON and Arrow data formats with automatic format selection.
9
+ *
10
+ * Data should be in "long format" with three fields:
11
+ * - xKey: X-axis category (columns)
12
+ * - yAxisKey: Y-axis category (rows)
13
+ * - yKey: The numeric value for each cell
14
+ *
15
+ * @example Simple usage
16
+ * ```tsx
17
+ * <HeatmapChart
18
+ * queryKey="activity_matrix"
19
+ * xKey="day"
20
+ * yAxisKey="hour"
21
+ * yKey="count"
22
+ * />
23
+ * ```
24
+ *
25
+ * @example With custom color scale
26
+ * ```tsx
27
+ * <HeatmapChart
28
+ * queryKey="correlation_matrix"
29
+ * min={-1}
30
+ * max={1}
31
+ * showLabels={true}
32
+ * colorPalette="diverging"
33
+ * />
34
+ * ```
35
+ */
36
+ declare const HeatmapChart: {
37
+ (props: HeatmapChartProps): react_jsx_runtime276.JSX.Element;
38
+ displayName: string;
39
+ };
40
+ //#endregion
41
+ export { HeatmapChart };
42
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/react/charts/heatmap/index.tsx"],"sourcesContent":[],"mappings":";;;;;;;;AAiCA;;;;;;;;;;;;;;;;;;;;;;;;;;;cAAa"}
@@ -0,0 +1,38 @@
1
+ import { createChart } from "../create-chart.js";
2
+
3
+ //#region src/react/charts/heatmap/index.tsx
4
+ /**
5
+ * Heatmap Chart component.
6
+ * Supports both JSON and Arrow data formats with automatic format selection.
7
+ *
8
+ * Data should be in "long format" with three fields:
9
+ * - xKey: X-axis category (columns)
10
+ * - yAxisKey: Y-axis category (rows)
11
+ * - yKey: The numeric value for each cell
12
+ *
13
+ * @example Simple usage
14
+ * ```tsx
15
+ * <HeatmapChart
16
+ * queryKey="activity_matrix"
17
+ * xKey="day"
18
+ * yAxisKey="hour"
19
+ * yKey="count"
20
+ * />
21
+ * ```
22
+ *
23
+ * @example With custom color scale
24
+ * ```tsx
25
+ * <HeatmapChart
26
+ * queryKey="correlation_matrix"
27
+ * min={-1}
28
+ * max={1}
29
+ * showLabels={true}
30
+ * colorPalette="diverging"
31
+ * />
32
+ * ```
33
+ */
34
+ const HeatmapChart = createChart("heatmap", "HeatmapChart");
35
+
36
+ //#endregion
37
+ export { HeatmapChart };
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/react/charts/heatmap/index.tsx"],"sourcesContent":["import { createChart } from \"../create-chart\";\nimport type { HeatmapChartProps } from \"../types\";\n\n/**\n * Heatmap Chart component.\n * Supports both JSON and Arrow data formats with automatic format selection.\n *\n * Data should be in \"long format\" with three fields:\n * - xKey: X-axis category (columns)\n * - yAxisKey: Y-axis category (rows)\n * - yKey: The numeric value for each cell\n *\n * @example Simple usage\n * ```tsx\n * <HeatmapChart\n * queryKey=\"activity_matrix\"\n * xKey=\"day\"\n * yAxisKey=\"hour\"\n * yKey=\"count\"\n * />\n * ```\n *\n * @example With custom color scale\n * ```tsx\n * <HeatmapChart\n * queryKey=\"correlation_matrix\"\n * min={-1}\n * max={1}\n * showLabels={true}\n * colorPalette=\"diverging\"\n * />\n * ```\n */\nexport const HeatmapChart = createChart<HeatmapChartProps>(\n \"heatmap\",\n \"HeatmapChart\",\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCA,MAAa,eAAe,YAC1B,WACA,eACD"}
@@ -0,0 +1,18 @@
1
+ import { DATE_FIELD_PATTERNS, METADATA_DATE_PATTERNS, NAME_FIELD_PATTERNS } from "../../js/constants.js";
2
+ import { CHART_COLOR_VARS, CHART_COLOR_VARS_CATEGORICAL, CHART_COLOR_VARS_DIVERGING, CHART_COLOR_VARS_SEQUENTIAL, FALLBACK_COLORS, FALLBACK_COLORS_CATEGORICAL, FALLBACK_COLORS_DIVERGING, FALLBACK_COLORS_SEQUENTIAL } from "./constants.js";
3
+ import { isArrowTable, isDataProps, isQueryProps } from "./types.js";
4
+ import { createTimeSeriesData, formatLabel, sortTimeSeriesAscending, toChartArray, toChartValue, truncateLabel } from "./utils.js";
5
+ import { normalizeChartData, normalizeHeatmapData } from "./normalize.js";
6
+ import { buildCartesianOption, buildHeatmapOption, buildHorizontalBarOption, buildPieOption, buildRadarOption } from "./options.js";
7
+ import { useAllThemeColors, useThemeColors } from "./theme.js";
8
+ import { BaseChart } from "./base.js";
9
+ import { useChartData } from "../hooks/use-chart-data.js";
10
+ import { ChartWrapper } from "./wrapper.js";
11
+ import { createChart } from "./create-chart.js";
12
+ import { AreaChart } from "./area/index.js";
13
+ import { BarChart } from "./bar/index.js";
14
+ import { HeatmapChart } from "./heatmap/index.js";
15
+ import { LineChart } from "./line/index.js";
16
+ import { DonutChart, PieChart } from "./pie/index.js";
17
+ import { RadarChart } from "./radar/index.js";
18
+ import { ScatterChart } from "./scatter/index.js";
@@ -0,0 +1,34 @@
1
+ import { LineChartProps } from "../types.js";
2
+ import * as react_jsx_runtime277 from "react/jsx-runtime";
3
+
4
+ //#region src/react/charts/line/index.d.ts
5
+
6
+ /**
7
+ * Line Chart component.
8
+ * Supports both JSON and Arrow data formats with automatic format selection.
9
+ *
10
+ * @example Simple usage
11
+ * ```tsx
12
+ * <LineChart
13
+ * queryKey="revenue_over_time"
14
+ * parameters={{ period: "monthly" }}
15
+ * />
16
+ * ```
17
+ *
18
+ * @example With custom styling
19
+ * ```tsx
20
+ * <LineChart
21
+ * queryKey="trends"
22
+ * parameters={{ metric: "users" }}
23
+ * smooth={false}
24
+ * showSymbol={true}
25
+ * />
26
+ * ```
27
+ */
28
+ declare const LineChart: {
29
+ (props: LineChartProps): react_jsx_runtime277.JSX.Element;
30
+ displayName: string;
31
+ };
32
+ //#endregion
33
+ export { LineChart };
34
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/react/charts/line/index.tsx"],"sourcesContent":[],"mappings":";;;;;;;;AAyBA;;;;;;;;;;;;;;;;;;;cAAa"}
@@ -0,0 +1,30 @@
1
+ import { createChart } from "../create-chart.js";
2
+
3
+ //#region src/react/charts/line/index.tsx
4
+ /**
5
+ * Line Chart component.
6
+ * Supports both JSON and Arrow data formats with automatic format selection.
7
+ *
8
+ * @example Simple usage
9
+ * ```tsx
10
+ * <LineChart
11
+ * queryKey="revenue_over_time"
12
+ * parameters={{ period: "monthly" }}
13
+ * />
14
+ * ```
15
+ *
16
+ * @example With custom styling
17
+ * ```tsx
18
+ * <LineChart
19
+ * queryKey="trends"
20
+ * parameters={{ metric: "users" }}
21
+ * smooth={false}
22
+ * showSymbol={true}
23
+ * />
24
+ * ```
25
+ */
26
+ const LineChart = createChart("line", "LineChart");
27
+
28
+ //#endregion
29
+ export { LineChart };
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/react/charts/line/index.tsx"],"sourcesContent":["import { createChart } from \"../create-chart\";\nimport type { LineChartProps } from \"../types\";\n\n/**\n * Line Chart component.\n * Supports both JSON and Arrow data formats with automatic format selection.\n *\n * @example Simple usage\n * ```tsx\n * <LineChart\n * queryKey=\"revenue_over_time\"\n * parameters={{ period: \"monthly\" }}\n * />\n * ```\n *\n * @example With custom styling\n * ```tsx\n * <LineChart\n * queryKey=\"trends\"\n * parameters={{ metric: \"users\" }}\n * smooth={false}\n * showSymbol={true}\n * />\n * ```\n */\nexport const LineChart = createChart<LineChartProps>(\"line\", \"LineChart\");\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,MAAa,YAAY,YAA4B,QAAQ,YAAY"}
@@ -0,0 +1,13 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+
3
+ //#region src/react/charts/loading.tsx
4
+ function LoadingSkeleton({ height = 300 }) {
5
+ return /* @__PURE__ */ jsx("div", {
6
+ className: "w-full animate-pulse bg-muted rounded",
7
+ style: { height }
8
+ });
9
+ }
10
+
11
+ //#endregion
12
+ export { LoadingSkeleton };
13
+ //# sourceMappingURL=loading.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loading.js","names":[],"sources":["../../../src/react/charts/loading.tsx"],"sourcesContent":["export function LoadingSkeleton({\n height = 300,\n}: {\n height?: number | string;\n}) {\n return (\n <div className=\"w-full animate-pulse bg-muted rounded\" style={{ height }} />\n );\n}\n"],"mappings":";;;AAAA,SAAgB,gBAAgB,EAC9B,SAAS,OAGR;AACD,QACE,oBAAC;EAAI,WAAU;EAAwC,OAAO,EAAE,QAAQ;GAAI"}
@@ -0,0 +1,37 @@
1
+ import { ChartData, NormalizedChartData, NormalizedChartDataBase, Orientation } from "./types.js";
2
+
3
+ //#region src/react/charts/normalize.d.ts
4
+
5
+ /**
6
+ * Normalizes chart data from either Arrow or JSON format.
7
+ * Converts BigInt and Date values to chart-compatible types.
8
+ */
9
+ declare function normalizeChartData(data: ChartData, xKey?: string, yKey?: string | string[], orientation?: Orientation): NormalizedChartData;
10
+ /**
11
+ * Normalized data for heatmap charts.
12
+ * Extends base (not NormalizedChartData) because heatmaps don't use yDataMap.
13
+ * Instead, they use heatmapData which contains [xIndex, yIndex, value] tuples.
14
+ */
15
+ interface NormalizedHeatmapData extends NormalizedChartDataBase {
16
+ /** Y-axis categories (rows) */
17
+ yAxisData: (string | number)[];
18
+ /** Heatmap data as [xIndex, yIndex, value] tuples */
19
+ heatmapData: [number, number, number][];
20
+ /** Min value in the data */
21
+ min: number;
22
+ /** Max value in the data */
23
+ max: number;
24
+ }
25
+ /**
26
+ * Normalizes data specifically for heatmap charts.
27
+ * Expects data in format: { xKey: string, yAxisKey: string, valueKey: number }
28
+ *
29
+ * @param data - Raw data (Arrow Table or JSON array)
30
+ * @param xKey - Field key for X-axis (columns)
31
+ * @param yAxisKey - Field key for Y-axis (rows)
32
+ * @param valueKey - Field key for the cell values
33
+ */
34
+ declare function normalizeHeatmapData(data: ChartData, xKey?: string, yAxisKey?: string, valueKey?: string | string[]): NormalizedHeatmapData;
35
+ //#endregion
36
+ export { NormalizedHeatmapData, normalizeChartData, normalizeHeatmapData };
37
+ //# sourceMappingURL=normalize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.d.ts","names":[],"sources":["../../../src/react/charts/normalize.ts"],"sourcesContent":[],"mappings":";;;;;;AAuNA;;AACQ,iBADQ,kBAAA,CACR,IAAA,EAAA,SAAA,EAAA,IAAA,CAAA,EAAA,MAAA,EAAA,IAAA,CAAA,EAAA,MAAA,GAAA,MAAA,EAAA,EAAA,WAAA,CAAA,EAGQ,WAHR,CAAA,EAIL,mBAJK;;;;AAyFR;AAoBA;AAAoC,UApBnB,qBAAA,SAA8B,uBAoBX,CAAA;;WAKjC,EAAA,CAAA,MAAA,GAAA,MAAA,CAAA,EAAA;EAAqB;;;;;;;;;;;;;;;;iBALR,oBAAA,OACR,4EAIL"}
@@ -0,0 +1,256 @@
1
+ import { DATE_FIELD_PATTERNS, NAME_FIELD_PATTERNS } from "../../js/constants.js";
2
+ import { ArrowClient } from "../../js/arrow/arrow-client.js";
3
+ import "../../js/index.js";
4
+ import { isArrowTable } from "./types.js";
5
+ import { sortTimeSeriesAscending, toChartArray } from "./utils.js";
6
+
7
+ //#region src/react/charts/normalize.ts
8
+ /**
9
+ * Checks if a value looks like an ISO date string
10
+ */
11
+ function isDateString(value) {
12
+ if (typeof value !== "string") return false;
13
+ return /^\d{4}-\d{2}-\d{2}(T|$)/.test(value);
14
+ }
15
+ /**
16
+ * Checks if a value is numeric (number or numeric string)
17
+ */
18
+ function isNumericValue(value) {
19
+ if (typeof value === "number") return true;
20
+ if (typeof value === "bigint") return true;
21
+ if (typeof value === "string") {
22
+ const trimmed = value.trim();
23
+ if (trimmed === "" || isDateString(trimmed)) return false;
24
+ const parsed = Number(trimmed);
25
+ return !Number.isNaN(parsed) && Number.isFinite(parsed);
26
+ }
27
+ return false;
28
+ }
29
+ /**
30
+ * Checks if a value looks like a category/label (non-numeric string)
31
+ */
32
+ function isCategoryValue(value) {
33
+ if (typeof value !== "string") return false;
34
+ const trimmed = value.trim();
35
+ if (trimmed === "") return false;
36
+ if (/^\d{4}-\d{2}-\d{2}/.test(trimmed)) return false;
37
+ const parsed = Number(trimmed);
38
+ return Number.isNaN(parsed) || !Number.isFinite(parsed);
39
+ }
40
+ /**
41
+ * Detects fields from JSON data for charting
42
+ */
43
+ function detectFieldsFromJson(data, orientation) {
44
+ if (!data || data.length === 0) return {
45
+ xField: "x",
46
+ yFields: ["y"],
47
+ chartType: "categorical"
48
+ };
49
+ const firstRow = data[0];
50
+ const keys = Object.keys(firstRow);
51
+ const dateFields = keys.filter((key) => {
52
+ const value = firstRow[key];
53
+ const keyMatchesDatePattern = DATE_FIELD_PATTERNS.some((p) => key.toLowerCase().includes(p));
54
+ const valueIsDateString = isDateString(value);
55
+ return keyMatchesDatePattern || valueIsDateString;
56
+ });
57
+ let nameFields = keys.filter((key) => {
58
+ const value = firstRow[key];
59
+ return isCategoryValue(value) && !isDateString(value) && NAME_FIELD_PATTERNS.some((p) => key.toLowerCase().includes(p));
60
+ });
61
+ if (nameFields.length === 0) nameFields = keys.filter((key) => {
62
+ const value = firstRow[key];
63
+ return isCategoryValue(value) && !isDateString(value) && !dateFields.includes(key) && !key.toLowerCase().endsWith("_id");
64
+ });
65
+ const numericFields = keys.filter((key) => {
66
+ const value = firstRow[key];
67
+ return isNumericValue(value) && !dateFields.includes(key);
68
+ });
69
+ if (orientation === "horizontal" || nameFields.length > 0 && dateFields.length === 0) {
70
+ const xField$1 = nameFields[0] || dateFields[0] || keys[0];
71
+ return {
72
+ xField: xField$1,
73
+ yFields: numericFields.length > 0 ? numericFields : keys.filter((k) => k !== xField$1),
74
+ chartType: "categorical"
75
+ };
76
+ }
77
+ const xField = dateFields[0] || nameFields[0] || keys[0];
78
+ return {
79
+ xField,
80
+ yFields: numericFields.length > 0 ? numericFields : keys.filter((k) => k !== xField),
81
+ chartType: dateFields.length > 0 ? "timeseries" : "categorical"
82
+ };
83
+ }
84
+ /**
85
+ * Converts a JSON value to a chart-compatible value.
86
+ */
87
+ function jsonValueToChartValue(value, isYValue, isDateField) {
88
+ if (value === null || value === void 0) return isYValue ? 0 : "";
89
+ if (typeof value === "number") return value;
90
+ if (typeof value === "bigint") return Number(value);
91
+ if (typeof value === "string") {
92
+ if (isDateField && isDateString(value)) {
93
+ const timestamp = new Date(value).getTime();
94
+ if (!Number.isNaN(timestamp)) return timestamp;
95
+ }
96
+ if (isYValue) {
97
+ const trimmed = value.trim();
98
+ const parsed = Number(trimmed);
99
+ if (!Number.isNaN(parsed) && Number.isFinite(parsed)) return parsed;
100
+ }
101
+ return value;
102
+ }
103
+ return String(value);
104
+ }
105
+ /**
106
+ * Extracts chart data from JSON array
107
+ */
108
+ function extractFromJson(data, xField, yFields) {
109
+ const xData = [];
110
+ const yDataMap = {};
111
+ for (const field of yFields) yDataMap[field] = [];
112
+ const xIsDateField = data.length > 0 && isDateString(data[0][xField]);
113
+ for (const row of data) {
114
+ xData.push(jsonValueToChartValue(row[xField], false, xIsDateField));
115
+ for (const field of yFields) yDataMap[field].push(jsonValueToChartValue(row[field], true, false));
116
+ }
117
+ return {
118
+ xData,
119
+ yDataMap
120
+ };
121
+ }
122
+ /**
123
+ * Normalizes chart data from either Arrow or JSON format.
124
+ * Converts BigInt and Date values to chart-compatible types.
125
+ */
126
+ function normalizeChartData(data, xKey, yKey, orientation) {
127
+ if (isArrowTable(data)) {
128
+ const table = data;
129
+ const detected$1 = ArrowClient.detectFieldsFromArrow(table, orientation);
130
+ const resolvedXKey$1 = xKey ?? detected$1.xField;
131
+ const resolvedYKeys$1 = yKey ? Array.isArray(yKey) ? yKey : [yKey] : detected$1.yFields;
132
+ const { xData: rawXData$1, yDataMap: rawYDataMap$1 } = ArrowClient.extractChartData(table, resolvedXKey$1, resolvedYKeys$1);
133
+ let xData$1 = toChartArray(rawXData$1);
134
+ let yDataMap$1 = {};
135
+ for (const key of resolvedYKeys$1) yDataMap$1[key] = toChartArray(rawYDataMap$1[key] ?? []);
136
+ if (detected$1.chartType === "timeseries") ({xData: xData$1, yDataMap: yDataMap$1} = sortTimeSeriesAscending(xData$1, yDataMap$1, resolvedYKeys$1));
137
+ return {
138
+ xData: xData$1,
139
+ yDataMap: yDataMap$1,
140
+ xField: resolvedXKey$1,
141
+ yFields: resolvedYKeys$1,
142
+ chartType: detected$1.chartType
143
+ };
144
+ }
145
+ const jsonData = data;
146
+ const detected = detectFieldsFromJson(jsonData, orientation);
147
+ const resolvedXKey = xKey ?? detected.xField;
148
+ const resolvedYKeys = yKey ? Array.isArray(yKey) ? yKey : [yKey] : detected.yFields;
149
+ const { xData: rawXData, yDataMap: rawYDataMap } = extractFromJson(jsonData, resolvedXKey, resolvedYKeys);
150
+ let xData = toChartArray(rawXData);
151
+ let yDataMap = {};
152
+ for (const key of resolvedYKeys) yDataMap[key] = toChartArray(rawYDataMap[key] ?? []);
153
+ if (detected.chartType === "timeseries") ({xData, yDataMap} = sortTimeSeriesAscending(xData, yDataMap, resolvedYKeys));
154
+ return {
155
+ xData,
156
+ yDataMap,
157
+ xField: resolvedXKey,
158
+ yFields: resolvedYKeys,
159
+ chartType: detected.chartType
160
+ };
161
+ }
162
+ /**
163
+ * Normalizes data specifically for heatmap charts.
164
+ * Expects data in format: { xKey: string, yAxisKey: string, valueKey: number }
165
+ *
166
+ * @param data - Raw data (Arrow Table or JSON array)
167
+ * @param xKey - Field key for X-axis (columns)
168
+ * @param yAxisKey - Field key for Y-axis (rows)
169
+ * @param valueKey - Field key for the cell values
170
+ */
171
+ function normalizeHeatmapData(data, xKey, yAxisKey, valueKey) {
172
+ const jsonData = isArrowTable(data) ? extractJsonFromArrow(data) : data;
173
+ if (jsonData.length === 0) return {
174
+ xData: [],
175
+ xField: xKey ?? "x",
176
+ yFields: [],
177
+ chartType: "categorical",
178
+ yAxisData: [],
179
+ heatmapData: [],
180
+ min: 0,
181
+ max: 0
182
+ };
183
+ const keys = Object.keys(jsonData[0]);
184
+ const resolvedXKey = xKey ?? keys[0];
185
+ const resolvedYAxisKey = yAxisKey ?? keys[1];
186
+ const resolvedValueKey = valueKey ? Array.isArray(valueKey) ? valueKey[0] : valueKey : keys[2];
187
+ const xSet = /* @__PURE__ */ new Set();
188
+ const ySet = /* @__PURE__ */ new Set();
189
+ for (const row of jsonData) {
190
+ const xVal = jsonValueToChartValue(row[resolvedXKey], false, false);
191
+ const yVal = jsonValueToChartValue(row[resolvedYAxisKey], false, false);
192
+ xSet.add(xVal);
193
+ ySet.add(yVal);
194
+ }
195
+ const xData = Array.from(xSet);
196
+ const yAxisData = Array.from(ySet);
197
+ const xIndexMap = /* @__PURE__ */ new Map();
198
+ const yIndexMap = /* @__PURE__ */ new Map();
199
+ xData.forEach((v, i) => {
200
+ xIndexMap.set(v, i);
201
+ });
202
+ yAxisData.forEach((v, i) => {
203
+ yIndexMap.set(v, i);
204
+ });
205
+ const heatmapData = [];
206
+ let min = Number.POSITIVE_INFINITY;
207
+ let max = Number.NEGATIVE_INFINITY;
208
+ for (const row of jsonData) {
209
+ const xVal = jsonValueToChartValue(row[resolvedXKey], false, false);
210
+ const yVal = jsonValueToChartValue(row[resolvedYAxisKey], false, false);
211
+ const value = jsonValueToChartValue(row[resolvedValueKey], true, false);
212
+ const xIdx = xIndexMap.get(xVal);
213
+ const yIdx = yIndexMap.get(yVal);
214
+ const numValue = typeof value === "number" ? value : 0;
215
+ if (xIdx !== void 0 && yIdx !== void 0) {
216
+ heatmapData.push([
217
+ xIdx,
218
+ yIdx,
219
+ numValue
220
+ ]);
221
+ min = Math.min(min, numValue);
222
+ max = Math.max(max, numValue);
223
+ }
224
+ }
225
+ if (heatmapData.length === 0) {
226
+ min = 0;
227
+ max = 0;
228
+ }
229
+ return {
230
+ xData,
231
+ xField: resolvedXKey,
232
+ yFields: [resolvedValueKey],
233
+ chartType: "categorical",
234
+ yAxisData,
235
+ heatmapData,
236
+ min,
237
+ max
238
+ };
239
+ }
240
+ /**
241
+ * Helper to extract JSON array from Arrow table for heatmap processing.
242
+ */
243
+ function extractJsonFromArrow(table) {
244
+ const result = [];
245
+ const fields = table.schema.fields.map((f) => f.name);
246
+ for (let i = 0; i < table.numRows; i++) {
247
+ const row = {};
248
+ for (const field of fields) row[field] = table.getChild(field)?.get(i);
249
+ result.push(row);
250
+ }
251
+ return result;
252
+ }
253
+
254
+ //#endregion
255
+ export { normalizeChartData, normalizeHeatmapData };
256
+ //# sourceMappingURL=normalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.js","names":["xField","xData: (string | number)[]","yDataMap: Record<string, (string | number)[]>","detected","resolvedXKey","resolvedYKeys","rawXData","rawYDataMap","xData","yDataMap","heatmapData: [number, number, number][]","result: Record<string, unknown>[]","row: Record<string, unknown>"],"sources":["../../../src/react/charts/normalize.ts"],"sourcesContent":["import { ArrowClient } from \"@/js\";\nimport type { Table } from \"apache-arrow\";\nimport { DATE_FIELD_PATTERNS, NAME_FIELD_PATTERNS } from \"./constants\";\nimport type {\n ChartData,\n NormalizedChartData,\n NormalizedChartDataBase,\n Orientation,\n} from \"./types\";\nimport { isArrowTable } from \"./types\";\nimport { sortTimeSeriesAscending, toChartArray } from \"./utils\";\n\n// ============================================================================\n// Type Detection Helpers\n// ============================================================================\n\n/**\n * Checks if a value looks like an ISO date string\n */\nfunction isDateString(value: unknown): boolean {\n if (typeof value !== \"string\") return false;\n return /^\\d{4}-\\d{2}-\\d{2}(T|$)/.test(value);\n}\n\n/**\n * Checks if a value is numeric (number or numeric string)\n */\nfunction isNumericValue(value: unknown): boolean {\n if (typeof value === \"number\") return true;\n if (typeof value === \"bigint\") return true;\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (trimmed === \"\" || isDateString(trimmed)) return false;\n const parsed = Number(trimmed);\n return !Number.isNaN(parsed) && Number.isFinite(parsed);\n }\n return false;\n}\n\n/**\n * Checks if a value looks like a category/label (non-numeric string)\n */\nfunction isCategoryValue(value: unknown): boolean {\n if (typeof value !== \"string\") return false;\n const trimmed = value.trim();\n if (trimmed === \"\") return false;\n if (/^\\d{4}-\\d{2}-\\d{2}/.test(trimmed)) return false;\n const parsed = Number(trimmed);\n return Number.isNaN(parsed) || !Number.isFinite(parsed);\n}\n\n// ============================================================================\n// Field Detection\n// ============================================================================\n\n/**\n * Detects fields from JSON data for charting\n */\nfunction detectFieldsFromJson(\n data: Record<string, unknown>[],\n orientation?: Orientation,\n): {\n xField: string;\n yFields: string[];\n chartType: \"timeseries\" | \"categorical\";\n} {\n if (!data || data.length === 0) {\n return { xField: \"x\", yFields: [\"y\"], chartType: \"categorical\" };\n }\n\n const firstRow = data[0];\n const keys = Object.keys(firstRow);\n\n // Detect date fields by key name OR by value being a date string\n const dateFields = keys.filter((key) => {\n const value = firstRow[key];\n const keyMatchesDatePattern = DATE_FIELD_PATTERNS.some((p) =>\n key.toLowerCase().includes(p),\n );\n const valueIsDateString = isDateString(value);\n return keyMatchesDatePattern || valueIsDateString;\n });\n\n // Detect name/category fields by pattern AND value type\n let nameFields = keys.filter((key) => {\n const value = firstRow[key];\n return (\n isCategoryValue(value) &&\n !isDateString(value) &&\n NAME_FIELD_PATTERNS.some((p) => key.toLowerCase().includes(p))\n );\n });\n\n // Fallback: any string field that isn't a date or ID\n if (nameFields.length === 0) {\n nameFields = keys.filter((key) => {\n const value = firstRow[key];\n return (\n isCategoryValue(value) &&\n !isDateString(value) &&\n !dateFields.includes(key) &&\n !key.toLowerCase().endsWith(\"_id\")\n );\n });\n }\n\n // Detect numeric fields\n const numericFields = keys.filter((key) => {\n const value = firstRow[key];\n return isNumericValue(value) && !dateFields.includes(key);\n });\n\n const isHorizontal = orientation === \"horizontal\";\n\n if (isHorizontal || (nameFields.length > 0 && dateFields.length === 0)) {\n const xField = nameFields[0] || dateFields[0] || keys[0];\n const yFields =\n numericFields.length > 0\n ? numericFields\n : keys.filter((k) => k !== xField);\n return { xField, yFields, chartType: \"categorical\" };\n }\n\n const xField = dateFields[0] || nameFields[0] || keys[0];\n const yFields =\n numericFields.length > 0 ? numericFields : keys.filter((k) => k !== xField);\n return {\n xField,\n yFields,\n chartType: dateFields.length > 0 ? \"timeseries\" : \"categorical\",\n };\n}\n\n// ============================================================================\n// Value Conversion\n// ============================================================================\n\n/**\n * Converts a JSON value to a chart-compatible value.\n */\nfunction jsonValueToChartValue(\n value: unknown,\n isYValue: boolean,\n isDateField: boolean,\n): string | number {\n if (value === null || value === undefined) {\n return isYValue ? 0 : \"\";\n }\n if (typeof value === \"number\") {\n return value;\n }\n if (typeof value === \"bigint\") {\n return Number(value);\n }\n if (typeof value === \"string\") {\n if (isDateField && isDateString(value)) {\n const timestamp = new Date(value).getTime();\n if (!Number.isNaN(timestamp)) {\n return timestamp;\n }\n }\n if (isYValue) {\n const trimmed = value.trim();\n const parsed = Number(trimmed);\n if (!Number.isNaN(parsed) && Number.isFinite(parsed)) {\n return parsed;\n }\n }\n return value;\n }\n return String(value);\n}\n\n// ============================================================================\n// Data Extraction\n// ============================================================================\n\n/**\n * Extracts chart data from JSON array\n */\nfunction extractFromJson(\n data: Record<string, unknown>[],\n xField: string,\n yFields: string[],\n): {\n xData: (string | number)[];\n yDataMap: Record<string, (string | number)[]>;\n} {\n const xData: (string | number)[] = [];\n const yDataMap: Record<string, (string | number)[]> = {};\n\n for (const field of yFields) {\n yDataMap[field] = [];\n }\n\n const xIsDateField = data.length > 0 && isDateString(data[0][xField]);\n\n for (const row of data) {\n xData.push(jsonValueToChartValue(row[xField], false, xIsDateField));\n for (const field of yFields) {\n yDataMap[field].push(jsonValueToChartValue(row[field], true, false));\n }\n }\n\n return { xData, yDataMap };\n}\n\n// ============================================================================\n// Main Normalization Function\n// ============================================================================\n\n/**\n * Normalizes chart data from either Arrow or JSON format.\n * Converts BigInt and Date values to chart-compatible types.\n */\nexport function normalizeChartData(\n data: ChartData,\n xKey?: string,\n yKey?: string | string[],\n orientation?: Orientation,\n): NormalizedChartData {\n if (isArrowTable(data)) {\n const table = data as Table;\n const detected = ArrowClient.detectFieldsFromArrow(table, orientation);\n const resolvedXKey = xKey ?? detected.xField;\n const resolvedYKeys = yKey\n ? Array.isArray(yKey)\n ? yKey\n : [yKey]\n : detected.yFields;\n\n const { xData: rawXData, yDataMap: rawYDataMap } =\n ArrowClient.extractChartData(table, resolvedXKey, resolvedYKeys);\n\n let xData = toChartArray(rawXData);\n let yDataMap: Record<string, (string | number)[]> = {};\n for (const key of resolvedYKeys) {\n yDataMap[key] = toChartArray(rawYDataMap[key] ?? []);\n }\n\n if (detected.chartType === \"timeseries\") {\n ({ xData, yDataMap } = sortTimeSeriesAscending(\n xData,\n yDataMap,\n resolvedYKeys,\n ));\n }\n\n return {\n xData,\n yDataMap,\n xField: resolvedXKey,\n yFields: resolvedYKeys,\n chartType: detected.chartType,\n };\n }\n\n // JSON Array\n const jsonData = data as Record<string, unknown>[];\n const detected = detectFieldsFromJson(jsonData, orientation);\n const resolvedXKey = xKey ?? detected.xField;\n const resolvedYKeys = yKey\n ? Array.isArray(yKey)\n ? yKey\n : [yKey]\n : detected.yFields;\n\n const { xData: rawXData, yDataMap: rawYDataMap } = extractFromJson(\n jsonData,\n resolvedXKey,\n resolvedYKeys,\n );\n\n let xData = toChartArray(rawXData);\n let yDataMap: Record<string, (string | number)[]> = {};\n for (const key of resolvedYKeys) {\n yDataMap[key] = toChartArray(rawYDataMap[key] ?? []);\n }\n\n if (detected.chartType === \"timeseries\") {\n ({ xData, yDataMap } = sortTimeSeriesAscending(\n xData,\n yDataMap,\n resolvedYKeys,\n ));\n }\n\n return {\n xData,\n yDataMap,\n xField: resolvedXKey,\n yFields: resolvedYKeys,\n chartType: detected.chartType,\n };\n}\n\n// ============================================================================\n// Heatmap Data Normalization\n// ============================================================================\n\n/**\n * Normalized data for heatmap charts.\n * Extends base (not NormalizedChartData) because heatmaps don't use yDataMap.\n * Instead, they use heatmapData which contains [xIndex, yIndex, value] tuples.\n */\nexport interface NormalizedHeatmapData extends NormalizedChartDataBase {\n /** Y-axis categories (rows) */\n yAxisData: (string | number)[];\n /** Heatmap data as [xIndex, yIndex, value] tuples */\n heatmapData: [number, number, number][];\n /** Min value in the data */\n min: number;\n /** Max value in the data */\n max: number;\n}\n\n/**\n * Normalizes data specifically for heatmap charts.\n * Expects data in format: { xKey: string, yAxisKey: string, valueKey: number }\n *\n * @param data - Raw data (Arrow Table or JSON array)\n * @param xKey - Field key for X-axis (columns)\n * @param yAxisKey - Field key for Y-axis (rows)\n * @param valueKey - Field key for the cell values\n */\nexport function normalizeHeatmapData(\n data: ChartData,\n xKey?: string,\n yAxisKey?: string,\n valueKey?: string | string[],\n): NormalizedHeatmapData {\n // First, get the standard normalization\n const jsonData = isArrowTable(data)\n ? extractJsonFromArrow(data)\n : (data as Record<string, unknown>[]);\n\n if (jsonData.length === 0) {\n return {\n xData: [],\n xField: xKey ?? \"x\",\n yFields: [],\n chartType: \"categorical\",\n yAxisData: [],\n heatmapData: [],\n min: 0,\n max: 0,\n };\n }\n\n // Detect fields if not provided\n const keys = Object.keys(jsonData[0]);\n const resolvedXKey = xKey ?? keys[0];\n const resolvedYAxisKey = yAxisKey ?? keys[1];\n const resolvedValueKey = valueKey\n ? Array.isArray(valueKey)\n ? valueKey[0]\n : valueKey\n : keys[2];\n\n // Extract unique X and Y categories\n const xSet = new Set<string | number>();\n const ySet = new Set<string | number>();\n\n for (const row of jsonData) {\n const xVal = jsonValueToChartValue(row[resolvedXKey], false, false);\n const yVal = jsonValueToChartValue(row[resolvedYAxisKey], false, false);\n xSet.add(xVal);\n ySet.add(yVal);\n }\n\n const xData = Array.from(xSet);\n const yAxisData = Array.from(ySet);\n\n // Create index maps for fast lookup\n const xIndexMap = new Map<string | number, number>();\n const yIndexMap = new Map<string | number, number>();\n xData.forEach((v, i) => {\n xIndexMap.set(v, i);\n });\n yAxisData.forEach((v, i) => {\n yIndexMap.set(v, i);\n });\n\n // Build heatmap data and track min/max\n const heatmapData: [number, number, number][] = [];\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n\n for (const row of jsonData) {\n const xVal = jsonValueToChartValue(row[resolvedXKey], false, false);\n const yVal = jsonValueToChartValue(row[resolvedYAxisKey], false, false);\n const value = jsonValueToChartValue(row[resolvedValueKey], true, false);\n\n const xIdx = xIndexMap.get(xVal);\n const yIdx = yIndexMap.get(yVal);\n const numValue = typeof value === \"number\" ? value : 0;\n\n if (xIdx !== undefined && yIdx !== undefined) {\n heatmapData.push([xIdx, yIdx, numValue]);\n min = Math.min(min, numValue);\n max = Math.max(max, numValue);\n }\n }\n\n // Handle edge case where no valid data was found\n if (heatmapData.length === 0) {\n min = 0;\n max = 0;\n }\n\n return {\n xData,\n xField: resolvedXKey,\n yFields: [resolvedValueKey],\n chartType: \"categorical\",\n yAxisData,\n heatmapData,\n min,\n max,\n };\n}\n\n/**\n * Helper to extract JSON array from Arrow table for heatmap processing.\n */\nfunction extractJsonFromArrow(table: Table): Record<string, unknown>[] {\n const result: Record<string, unknown>[] = [];\n const fields = table.schema.fields.map((f) => f.name);\n\n for (let i = 0; i < table.numRows; i++) {\n const row: Record<string, unknown> = {};\n for (const field of fields) {\n const col = table.getChild(field);\n row[field] = col?.get(i);\n }\n result.push(row);\n }\n\n return result;\n}\n"],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { ChartType } from "./types.js";
2
+
3
+ //#region src/react/charts/options.d.ts
4
+ interface OptionBuilderContext {
5
+ xData: (string | number)[];
6
+ yDataMap: Record<string, (string | number)[]>;
7
+ yFields: string[];
8
+ colors: string[];
9
+ title?: string;
10
+ showLegend: boolean;
11
+ }
12
+ interface CartesianContext extends OptionBuilderContext {
13
+ chartType: ChartType;
14
+ isTimeSeries: boolean;
15
+ stacked: boolean;
16
+ smooth: boolean;
17
+ showSymbol: boolean;
18
+ symbolSize: number;
19
+ }
20
+ declare function buildRadarOption(ctx: OptionBuilderContext, showArea?: boolean): Record<string, unknown>;
21
+ declare function buildPieOption(ctx: OptionBuilderContext, chartType: "pie" | "donut", innerRadius: number, showLabels: boolean, labelPosition: string): Record<string, unknown>;
22
+ declare function buildHorizontalBarOption(ctx: OptionBuilderContext, stacked: boolean): Record<string, unknown>;
23
+ interface HeatmapContext extends OptionBuilderContext {
24
+ /** Y-axis categories (rows) */
25
+ yAxisData: (string | number)[];
26
+ /** Heatmap data as [xIndex, yIndex, value] tuples */
27
+ heatmapData: [number, number, number][];
28
+ /** Min value for color scale */
29
+ min: number;
30
+ /** Max value for color scale */
31
+ max: number;
32
+ /** Show value labels on cells */
33
+ showLabels: boolean;
34
+ }
35
+ declare function buildHeatmapOption(ctx: HeatmapContext): Record<string, unknown>;
36
+ declare function buildCartesianOption(ctx: CartesianContext): Record<string, unknown>;
37
+ //#endregion
38
+ export { CartesianContext, HeatmapContext, OptionBuilderContext, buildCartesianOption, buildHeatmapOption, buildHorizontalBarOption, buildPieOption, buildRadarOption };
39
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.ts","names":[],"sources":["../../../src/react/charts/options.ts"],"sourcesContent":[],"mappings":";;;UAOiB,oBAAA;;EAAA,QAAA,EAEL,MAFK,CAAA,MAAoB,EAAA,CAAA,MAAA,GAEzB,MAAA,CAAM,EAAA,CAAA;EAOD,OAAA,EAAA,MAAA,EAAA;EAAiB,MAAA,EAAA,MAAA,EAAA;OACrB,CAAA,EAAA,MAAA;YAD6B,EAAA,OAAA;;AAwB1B,UAxBC,gBAAA,SAAyB,oBAwBV,CAAA;EAAA,SAAA,EAvBnB,SAuBmB;cACzB,EAAA,OAAA;SAEJ,EAAA,OAAA;EAAM,MAAA,EAAA,OAAA;EAmCO,UAAA,EAAA,OAAc;EAAA,UAAA,EAAA,MAAA;;AAM3B,iBA5Ca,gBAAA,CA4Cb,GAAA,EA3CI,oBA2CJ,EAAA,QAAA,CAAA,EAAA,OAAA,CAAA,EAzCA,MAyCA,CAAA,MAAA,EAAA,OAAA,CAAA;AAAM,iBANO,cAAA,CAMP,GAAA,EALF,oBAKE,EAAA,SAAA,EAAA,KAAA,GAAA,OAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,aAAA,EAAA,MAAA,CAAA,EAAN,MAAM,CAAA,MAAA,EAAA,OAAA,CAAA;AAyCO,iBAAA,wBAAA,CAAwB,GAAA,EACjC,oBADiC,EAAA,OAAA,EAAA,OAAA,CAAA,EAGrC,MAHqC,CAAA,MAAA,EAAA,OAAA,CAAA;AAAA,UAyCvB,cAAA,SAAuB,oBAzCA,CAAA;;WAGrC,EAAA,CAAA,MAAA,GAAA,MAAA,CAAA,EAAA;EAAM;EAsCQ,WAAA,EAAA,CAAA,MAAe,EAAA,MAAA,EAAQ,MAAA,CAAA,EAAA;EAaxB;EAAkB,GAAA,EAAA,MAAA;;KAE/B,EAAA,MAAA;EAAM;EAsEO,UAAA,EAAA,OAAA;;AACT,iBAzES,kBAAA,CAyET,GAAA,EAxEA,cAwEA,CAAA,EAvEJ,MAuEI,CAAA,MAAA,EAAA,OAAA,CAAA;AACJ,iBAFa,oBAAA,CAEb,GAAA,EADI,gBACJ,CAAA,EAAA,MAAA,CAAA,MAAA,EAAA,OAAA,CAAA"}