@databricks/appkit-ui 0.3.0 → 0.4.1

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 (478) hide show
  1. package/CLAUDE.md +121 -1231
  2. package/NOTICE.md +1 -1
  3. package/bin/appkit.js +3 -0
  4. package/dist/cli/commands/docs.js +47 -0
  5. package/dist/cli/commands/docs.js.map +1 -0
  6. package/dist/cli/commands/generate-types.js +38 -0
  7. package/dist/cli/commands/generate-types.js.map +1 -0
  8. package/dist/cli/commands/lint.js +104 -0
  9. package/dist/cli/commands/lint.js.map +1 -0
  10. package/dist/cli/commands/setup.js +121 -0
  11. package/dist/cli/commands/setup.js.map +1 -0
  12. package/dist/cli/index.d.ts +1 -0
  13. package/dist/cli/index.js +24 -0
  14. package/dist/cli/index.js.map +1 -0
  15. package/dist/js/arrow/arrow-client.d.ts +48 -0
  16. package/dist/js/arrow/arrow-client.d.ts.map +1 -1
  17. package/dist/js/arrow/arrow-client.js +51 -3
  18. package/dist/js/arrow/arrow-client.js.map +1 -1
  19. package/dist/react/charts/area/index.d.ts +8 -19
  20. package/dist/react/charts/area/index.d.ts.map +1 -1
  21. package/dist/react/charts/area/index.js +5 -17
  22. package/dist/react/charts/area/index.js.map +1 -1
  23. package/dist/react/charts/bar/index.d.ts +7 -28
  24. package/dist/react/charts/bar/index.d.ts.map +1 -1
  25. package/dist/react/charts/bar/index.js +4 -26
  26. package/dist/react/charts/bar/index.js.map +1 -1
  27. package/dist/react/charts/base.d.ts +2 -2
  28. package/dist/react/charts/base.d.ts.map +1 -1
  29. package/dist/react/charts/create-chart.d.ts +2 -2
  30. package/dist/react/charts/create-chart.d.ts.map +1 -1
  31. package/dist/react/charts/heatmap/index.d.ts +9 -24
  32. package/dist/react/charts/heatmap/index.d.ts.map +1 -1
  33. package/dist/react/charts/heatmap/index.js +6 -22
  34. package/dist/react/charts/heatmap/index.js.map +1 -1
  35. package/dist/react/charts/line/index.d.ts +8 -20
  36. package/dist/react/charts/line/index.d.ts.map +1 -1
  37. package/dist/react/charts/line/index.js +5 -18
  38. package/dist/react/charts/line/index.js.map +1 -1
  39. package/dist/react/charts/normalize.js +16 -16
  40. package/dist/react/charts/normalize.js.map +1 -1
  41. package/dist/react/charts/options.d.ts.map +1 -1
  42. package/dist/react/charts/pie/index.d.ts +13 -35
  43. package/dist/react/charts/pie/index.d.ts.map +1 -1
  44. package/dist/react/charts/pie/index.js +9 -32
  45. package/dist/react/charts/pie/index.js.map +1 -1
  46. package/dist/react/charts/radar/index.d.ts +8 -18
  47. package/dist/react/charts/radar/index.d.ts.map +1 -1
  48. package/dist/react/charts/radar/index.js +5 -16
  49. package/dist/react/charts/radar/index.js.map +1 -1
  50. package/dist/react/charts/scatter/index.d.ts +8 -18
  51. package/dist/react/charts/scatter/index.d.ts.map +1 -1
  52. package/dist/react/charts/scatter/index.js +5 -16
  53. package/dist/react/charts/scatter/index.js.map +1 -1
  54. package/dist/react/charts/wrapper.d.ts +2 -2
  55. package/dist/react/charts/wrapper.d.ts.map +1 -1
  56. package/dist/react/hooks/use-analytics-query.js +12 -12
  57. package/dist/react/hooks/use-analytics-query.js.map +1 -1
  58. package/dist/react/table/data-table.d.ts +6 -3
  59. package/dist/react/table/data-table.d.ts.map +1 -1
  60. package/dist/react/table/data-table.js +4 -1
  61. package/dist/react/table/data-table.js.map +1 -1
  62. package/dist/react/table/table-wrapper.js +3 -3
  63. package/dist/react/table/table-wrapper.js.map +1 -1
  64. package/dist/react/ui/accordion.d.ts +9 -5
  65. package/dist/react/ui/accordion.d.ts.map +1 -1
  66. package/dist/react/ui/accordion.js +4 -0
  67. package/dist/react/ui/accordion.js.map +1 -1
  68. package/dist/react/ui/alert-dialog.d.ts +23 -12
  69. package/dist/react/ui/alert-dialog.d.ts.map +1 -1
  70. package/dist/react/ui/alert-dialog.js +11 -0
  71. package/dist/react/ui/alert-dialog.js.map +1 -1
  72. package/dist/react/ui/alert.d.ts +7 -4
  73. package/dist/react/ui/alert.d.ts.map +1 -1
  74. package/dist/react/ui/alert.js +3 -0
  75. package/dist/react/ui/alert.js.map +1 -1
  76. package/dist/react/ui/aspect-ratio.d.ts +3 -2
  77. package/dist/react/ui/aspect-ratio.d.ts.map +1 -1
  78. package/dist/react/ui/aspect-ratio.js +1 -0
  79. package/dist/react/ui/aspect-ratio.js.map +1 -1
  80. package/dist/react/ui/avatar.d.ts +7 -4
  81. package/dist/react/ui/avatar.d.ts.map +1 -1
  82. package/dist/react/ui/avatar.js +3 -0
  83. package/dist/react/ui/avatar.js.map +1 -1
  84. package/dist/react/ui/badge.d.ts +3 -2
  85. package/dist/react/ui/badge.d.ts.map +1 -1
  86. package/dist/react/ui/badge.js +1 -0
  87. package/dist/react/ui/badge.js.map +1 -1
  88. package/dist/react/ui/breadcrumb.d.ts +15 -8
  89. package/dist/react/ui/breadcrumb.d.ts.map +1 -1
  90. package/dist/react/ui/breadcrumb.js +7 -0
  91. package/dist/react/ui/breadcrumb.js.map +1 -1
  92. package/dist/react/ui/button-group.d.ts +7 -4
  93. package/dist/react/ui/button-group.d.ts.map +1 -1
  94. package/dist/react/ui/button-group.js +3 -0
  95. package/dist/react/ui/button-group.js.map +1 -1
  96. package/dist/react/ui/button.d.ts +3 -2
  97. package/dist/react/ui/button.d.ts.map +1 -1
  98. package/dist/react/ui/button.js +1 -0
  99. package/dist/react/ui/button.js.map +1 -1
  100. package/dist/react/ui/calendar.d.ts +5 -3
  101. package/dist/react/ui/calendar.d.ts.map +1 -1
  102. package/dist/react/ui/calendar.js +14 -12
  103. package/dist/react/ui/calendar.js.map +1 -1
  104. package/dist/react/ui/card.d.ts +15 -8
  105. package/dist/react/ui/card.d.ts.map +1 -1
  106. package/dist/react/ui/card.js +7 -0
  107. package/dist/react/ui/card.js.map +1 -1
  108. package/dist/react/ui/carousel.d.ts +11 -6
  109. package/dist/react/ui/carousel.d.ts.map +1 -1
  110. package/dist/react/ui/carousel.js +9 -4
  111. package/dist/react/ui/carousel.js.map +1 -1
  112. package/dist/react/ui/chart.d.ts +6 -5
  113. package/dist/react/ui/chart.d.ts.map +1 -1
  114. package/dist/react/ui/chart.js +2 -1
  115. package/dist/react/ui/chart.js.map +1 -1
  116. package/dist/react/ui/checkbox.d.ts +3 -2
  117. package/dist/react/ui/checkbox.d.ts.map +1 -1
  118. package/dist/react/ui/checkbox.js +1 -0
  119. package/dist/react/ui/checkbox.js.map +1 -1
  120. package/dist/react/ui/collapsible.d.ts +7 -4
  121. package/dist/react/ui/collapsible.d.ts.map +1 -1
  122. package/dist/react/ui/collapsible.js +3 -0
  123. package/dist/react/ui/collapsible.js.map +1 -1
  124. package/dist/react/ui/command.d.ts +19 -10
  125. package/dist/react/ui/command.d.ts.map +1 -1
  126. package/dist/react/ui/command.js +9 -0
  127. package/dist/react/ui/command.js.map +1 -1
  128. package/dist/react/ui/context-menu.d.ts +17 -16
  129. package/dist/react/ui/context-menu.d.ts.map +1 -1
  130. package/dist/react/ui/context-menu.js +1 -0
  131. package/dist/react/ui/context-menu.js.map +1 -1
  132. package/dist/react/ui/dialog.d.ts +21 -11
  133. package/dist/react/ui/dialog.d.ts.map +1 -1
  134. package/dist/react/ui/dialog.js +10 -0
  135. package/dist/react/ui/dialog.js.map +1 -1
  136. package/dist/react/ui/drawer.d.ts +21 -11
  137. package/dist/react/ui/drawer.d.ts.map +1 -1
  138. package/dist/react/ui/drawer.js +10 -0
  139. package/dist/react/ui/drawer.js.map +1 -1
  140. package/dist/react/ui/dropdown-menu.d.ts +17 -16
  141. package/dist/react/ui/dropdown-menu.d.ts.map +1 -1
  142. package/dist/react/ui/dropdown-menu.js +1 -0
  143. package/dist/react/ui/dropdown-menu.js.map +1 -1
  144. package/dist/react/ui/empty.d.ts +8 -7
  145. package/dist/react/ui/empty.d.ts.map +1 -1
  146. package/dist/react/ui/empty.js +1 -0
  147. package/dist/react/ui/empty.js.map +1 -1
  148. package/dist/react/ui/field.d.ts +21 -11
  149. package/dist/react/ui/field.d.ts.map +1 -1
  150. package/dist/react/ui/field.js +10 -0
  151. package/dist/react/ui/field.js.map +1 -1
  152. package/dist/react/ui/form.d.ts +14 -7
  153. package/dist/react/ui/form.d.ts.map +1 -1
  154. package/dist/react/ui/form.js +7 -0
  155. package/dist/react/ui/form.js.map +1 -1
  156. package/dist/react/ui/hover-card.d.ts +5 -4
  157. package/dist/react/ui/hover-card.d.ts.map +1 -1
  158. package/dist/react/ui/hover-card.js +1 -0
  159. package/dist/react/ui/hover-card.js.map +1 -1
  160. package/dist/react/ui/input-group.d.ts +13 -7
  161. package/dist/react/ui/input-group.d.ts.map +1 -1
  162. package/dist/react/ui/input-group.js +6 -0
  163. package/dist/react/ui/input-group.js.map +1 -1
  164. package/dist/react/ui/input-otp.d.ts +9 -5
  165. package/dist/react/ui/input-otp.d.ts.map +1 -1
  166. package/dist/react/ui/input-otp.js +4 -0
  167. package/dist/react/ui/input-otp.js.map +1 -1
  168. package/dist/react/ui/input.d.ts +3 -2
  169. package/dist/react/ui/input.d.ts.map +1 -1
  170. package/dist/react/ui/input.js +1 -0
  171. package/dist/react/ui/input.js.map +1 -1
  172. package/dist/react/ui/item.d.ts +12 -11
  173. package/dist/react/ui/item.d.ts.map +1 -1
  174. package/dist/react/ui/item.js +1 -0
  175. package/dist/react/ui/item.js.map +1 -1
  176. package/dist/react/ui/kbd.d.ts +4 -3
  177. package/dist/react/ui/kbd.d.ts.map +1 -1
  178. package/dist/react/ui/kbd.js +1 -0
  179. package/dist/react/ui/kbd.js.map +1 -1
  180. package/dist/react/ui/label.d.ts +3 -2
  181. package/dist/react/ui/label.d.ts.map +1 -1
  182. package/dist/react/ui/label.js +1 -0
  183. package/dist/react/ui/label.js.map +1 -1
  184. package/dist/react/ui/menubar.d.ts +18 -17
  185. package/dist/react/ui/menubar.d.ts.map +1 -1
  186. package/dist/react/ui/menubar.js +1 -0
  187. package/dist/react/ui/menubar.js.map +1 -1
  188. package/dist/react/ui/navigation-menu.d.ts +17 -9
  189. package/dist/react/ui/navigation-menu.d.ts.map +1 -1
  190. package/dist/react/ui/navigation-menu.js +8 -0
  191. package/dist/react/ui/navigation-menu.js.map +1 -1
  192. package/dist/react/ui/pagination.d.ts +15 -8
  193. package/dist/react/ui/pagination.d.ts.map +1 -1
  194. package/dist/react/ui/pagination.js +7 -0
  195. package/dist/react/ui/pagination.js.map +1 -1
  196. package/dist/react/ui/popover.d.ts +6 -5
  197. package/dist/react/ui/popover.d.ts.map +1 -1
  198. package/dist/react/ui/popover.js +1 -0
  199. package/dist/react/ui/popover.js.map +1 -1
  200. package/dist/react/ui/progress.d.ts +3 -2
  201. package/dist/react/ui/progress.d.ts.map +1 -1
  202. package/dist/react/ui/progress.js +1 -0
  203. package/dist/react/ui/progress.js.map +1 -1
  204. package/dist/react/ui/radio-group.d.ts +4 -3
  205. package/dist/react/ui/radio-group.d.ts.map +1 -1
  206. package/dist/react/ui/radio-group.js +1 -0
  207. package/dist/react/ui/radio-group.js.map +1 -1
  208. package/dist/react/ui/resizable.d.ts +7 -4
  209. package/dist/react/ui/resizable.d.ts.map +1 -1
  210. package/dist/react/ui/resizable.js +3 -0
  211. package/dist/react/ui/resizable.js.map +1 -1
  212. package/dist/react/ui/scroll-area.d.ts +5 -3
  213. package/dist/react/ui/scroll-area.d.ts.map +1 -1
  214. package/dist/react/ui/scroll-area.js +2 -0
  215. package/dist/react/ui/scroll-area.js.map +1 -1
  216. package/dist/react/ui/select.d.ts +23 -11
  217. package/dist/react/ui/select.d.ts.map +1 -1
  218. package/dist/react/ui/select.js +12 -0
  219. package/dist/react/ui/select.js.map +1 -1
  220. package/dist/react/ui/separator.d.ts +3 -2
  221. package/dist/react/ui/separator.d.ts.map +1 -1
  222. package/dist/react/ui/separator.js +1 -0
  223. package/dist/react/ui/separator.js.map +1 -1
  224. package/dist/react/ui/sheet.d.ts +17 -9
  225. package/dist/react/ui/sheet.d.ts.map +1 -1
  226. package/dist/react/ui/sheet.js +10 -0
  227. package/dist/react/ui/sheet.js.map +1 -1
  228. package/dist/react/ui/sidebar.d.ts +46 -24
  229. package/dist/react/ui/sidebar.d.ts.map +1 -1
  230. package/dist/react/ui/sidebar.js +23 -1
  231. package/dist/react/ui/sidebar.js.map +1 -1
  232. package/dist/react/ui/skeleton.d.ts +3 -2
  233. package/dist/react/ui/skeleton.d.ts.map +1 -1
  234. package/dist/react/ui/skeleton.js +1 -0
  235. package/dist/react/ui/skeleton.js.map +1 -1
  236. package/dist/react/ui/slider.d.ts +3 -2
  237. package/dist/react/ui/slider.d.ts.map +1 -1
  238. package/dist/react/ui/slider.js +1 -0
  239. package/dist/react/ui/slider.js.map +1 -1
  240. package/dist/react/ui/sonner.d.ts +3 -2
  241. package/dist/react/ui/sonner.d.ts.map +1 -1
  242. package/dist/react/ui/sonner.js +1 -0
  243. package/dist/react/ui/sonner.js.map +1 -1
  244. package/dist/react/ui/spinner.d.ts +3 -2
  245. package/dist/react/ui/spinner.d.ts.map +1 -1
  246. package/dist/react/ui/spinner.js +1 -0
  247. package/dist/react/ui/spinner.js.map +1 -1
  248. package/dist/react/ui/switch.d.ts +3 -2
  249. package/dist/react/ui/switch.d.ts.map +1 -1
  250. package/dist/react/ui/switch.js +1 -0
  251. package/dist/react/ui/switch.js.map +1 -1
  252. package/dist/react/ui/table.d.ts +10 -9
  253. package/dist/react/ui/table.d.ts.map +1 -1
  254. package/dist/react/ui/table.js +1 -0
  255. package/dist/react/ui/table.js.map +1 -1
  256. package/dist/react/ui/tabs.d.ts +9 -5
  257. package/dist/react/ui/tabs.d.ts.map +1 -1
  258. package/dist/react/ui/tabs.js +4 -0
  259. package/dist/react/ui/tabs.js.map +1 -1
  260. package/dist/react/ui/textarea.d.ts +3 -2
  261. package/dist/react/ui/textarea.d.ts.map +1 -1
  262. package/dist/react/ui/textarea.js +1 -0
  263. package/dist/react/ui/textarea.js.map +1 -1
  264. package/dist/react/ui/toggle-group.d.ts +4 -3
  265. package/dist/react/ui/toggle-group.d.ts.map +1 -1
  266. package/dist/react/ui/toggle-group.js +1 -0
  267. package/dist/react/ui/toggle-group.js.map +1 -1
  268. package/dist/react/ui/toggle.d.ts +3 -2
  269. package/dist/react/ui/toggle.d.ts.map +1 -1
  270. package/dist/react/ui/toggle.js +1 -0
  271. package/dist/react/ui/toggle.js.map +1 -1
  272. package/dist/react/ui/tooltip.d.ts +7 -5
  273. package/dist/react/ui/tooltip.d.ts.map +1 -1
  274. package/dist/react/ui/tooltip.js +2 -0
  275. package/dist/react/ui/tooltip.js.map +1 -1
  276. package/docs/docs/api/appkit/Class.AppKitError/index.html +77 -0
  277. package/docs/docs/api/appkit/Class.AppKitError.md +154 -0
  278. package/docs/docs/api/appkit/Class.AuthenticationError/index.html +110 -0
  279. package/docs/docs/api/appkit/Class.AuthenticationError.md +236 -0
  280. package/docs/docs/api/appkit/Class.ConfigurationError/index.html +112 -0
  281. package/docs/docs/api/appkit/Class.ConfigurationError.md +243 -0
  282. package/docs/docs/api/appkit/Class.ConnectionError/index.html +120 -0
  283. package/docs/docs/api/appkit/Class.ConnectionError.md +265 -0
  284. package/docs/docs/api/appkit/Class.ExecutionError/index.html +116 -0
  285. package/docs/docs/api/appkit/Class.ExecutionError.md +250 -0
  286. package/docs/docs/api/appkit/Class.InitializationError/index.html +104 -0
  287. package/docs/docs/api/appkit/Class.InitializationError.md +222 -0
  288. package/docs/docs/api/appkit/Class.Plugin/index.html +149 -0
  289. package/docs/docs/api/appkit/Class.Plugin.md +392 -0
  290. package/docs/docs/api/appkit/Class.ServerError/index.html +108 -0
  291. package/docs/docs/api/appkit/Class.ServerError.md +229 -0
  292. package/docs/docs/api/appkit/Class.TunnelError/index.html +108 -0
  293. package/docs/docs/api/appkit/Class.TunnelError.md +231 -0
  294. package/docs/docs/api/appkit/Class.ValidationError/index.html +106 -0
  295. package/docs/docs/api/appkit/Class.ValidationError.md +225 -0
  296. package/docs/docs/api/appkit/Function.appKitTypesPlugin/index.html +24 -0
  297. package/docs/docs/api/appkit/Function.appKitTypesPlugin.md +20 -0
  298. package/docs/docs/api/appkit/Function.createApp/index.html +24 -0
  299. package/docs/docs/api/appkit/Function.createApp.md +31 -0
  300. package/docs/docs/api/appkit/Function.isSQLTypeMarker/index.html +25 -0
  301. package/docs/docs/api/appkit/Function.isSQLTypeMarker.md +32 -0
  302. package/docs/docs/api/appkit/Interface.BasePluginConfig/index.html +28 -0
  303. package/docs/docs/api/appkit/Interface.BasePluginConfig.md +37 -0
  304. package/docs/docs/api/appkit/Interface.CacheConfig/index.html +63 -0
  305. package/docs/docs/api/appkit/Interface.CacheConfig.md +131 -0
  306. package/docs/docs/api/appkit/Interface.ITelemetry/index.html +73 -0
  307. package/docs/docs/api/appkit/Interface.ITelemetry.md +144 -0
  308. package/docs/docs/api/appkit/Interface.StreamExecutionSettings/index.html +26 -0
  309. package/docs/docs/api/appkit/Interface.StreamExecutionSettings.md +30 -0
  310. package/docs/docs/api/appkit/Interface.TelemetryConfig/index.html +32 -0
  311. package/docs/docs/api/appkit/Interface.TelemetryConfig.md +48 -0
  312. package/docs/docs/api/appkit/TypeAlias.IAppRouter/index.html +18 -0
  313. package/docs/docs/api/appkit/TypeAlias.IAppRouter.md +8 -0
  314. package/docs/docs/api/appkit/Variable.sql/index.html +98 -0
  315. package/docs/docs/api/appkit/Variable.sql.md +260 -0
  316. package/docs/docs/api/appkit/index.html +28 -0
  317. package/docs/docs/api/appkit-ui/data/AreaChart/index.html +29 -0
  318. package/docs/docs/api/appkit-ui/data/AreaChart.md +79 -0
  319. package/docs/docs/api/appkit-ui/data/BarChart/index.html +29 -0
  320. package/docs/docs/api/appkit-ui/data/BarChart.md +74 -0
  321. package/docs/docs/api/appkit-ui/data/DataTable/index.html +36 -0
  322. package/docs/docs/api/appkit-ui/data/DataTable.md +69 -0
  323. package/docs/docs/api/appkit-ui/data/DonutChart/index.html +29 -0
  324. package/docs/docs/api/appkit-ui/data/DonutChart.md +72 -0
  325. package/docs/docs/api/appkit-ui/data/HeatmapChart/index.html +35 -0
  326. package/docs/docs/api/appkit-ui/data/HeatmapChart.md +91 -0
  327. package/docs/docs/api/appkit-ui/data/LineChart/index.html +29 -0
  328. package/docs/docs/api/appkit-ui/data/LineChart.md +77 -0
  329. package/docs/docs/api/appkit-ui/data/PieChart/index.html +29 -0
  330. package/docs/docs/api/appkit-ui/data/PieChart.md +72 -0
  331. package/docs/docs/api/appkit-ui/data/RadarChart/index.html +29 -0
  332. package/docs/docs/api/appkit-ui/data/RadarChart.md +74 -0
  333. package/docs/docs/api/appkit-ui/data/ScatterChart/index.html +29 -0
  334. package/docs/docs/api/appkit-ui/data/ScatterChart.md +76 -0
  335. package/docs/docs/api/appkit-ui/index.html +23 -0
  336. package/docs/docs/api/appkit-ui/styling/index.html +74 -0
  337. package/docs/docs/api/appkit-ui/styling.md +81 -0
  338. package/docs/docs/api/appkit-ui/ui/Accordion/index.html +48 -0
  339. package/docs/docs/api/appkit-ui/ui/Accordion.md +139 -0
  340. package/docs/docs/api/appkit-ui/ui/Alert/index.html +41 -0
  341. package/docs/docs/api/appkit-ui/ui/Alert.md +89 -0
  342. package/docs/docs/api/appkit-ui/ui/AlertDialog/index.html +97 -0
  343. package/docs/docs/api/appkit-ui/ui/AlertDialog.md +282 -0
  344. package/docs/docs/api/appkit-ui/ui/AspectRatio/index.html +27 -0
  345. package/docs/docs/api/appkit-ui/ui/AspectRatio.md +46 -0
  346. package/docs/docs/api/appkit-ui/ui/Avatar/index.html +41 -0
  347. package/docs/docs/api/appkit-ui/ui/Avatar.md +90 -0
  348. package/docs/docs/api/appkit-ui/ui/Badge/index.html +27 -0
  349. package/docs/docs/api/appkit-ui/ui/Badge.md +38 -0
  350. package/docs/docs/api/appkit-ui/ui/Breadcrumb/index.html +69 -0
  351. package/docs/docs/api/appkit-ui/ui/Breadcrumb.md +193 -0
  352. package/docs/docs/api/appkit-ui/ui/Button/index.html +27 -0
  353. package/docs/docs/api/appkit-ui/ui/Button.md +39 -0
  354. package/docs/docs/api/appkit-ui/ui/ButtonGroup/index.html +38 -0
  355. package/docs/docs/api/appkit-ui/ui/ButtonGroup.md +68 -0
  356. package/docs/docs/api/appkit-ui/ui/Calendar/index.html +34 -0
  357. package/docs/docs/api/appkit-ui/ui/Calendar.md +154 -0
  358. package/docs/docs/api/appkit-ui/ui/Card/index.html +69 -0
  359. package/docs/docs/api/appkit-ui/ui/Card.md +222 -0
  360. package/docs/docs/api/appkit-ui/ui/Carousel/index.html +55 -0
  361. package/docs/docs/api/appkit-ui/ui/Carousel.md +152 -0
  362. package/docs/docs/api/appkit-ui/ui/ChartContainer/index.html +58 -0
  363. package/docs/docs/api/appkit-ui/ui/ChartContainer.md +343 -0
  364. package/docs/docs/api/appkit-ui/ui/Checkbox/index.html +27 -0
  365. package/docs/docs/api/appkit-ui/ui/Checkbox.md +53 -0
  366. package/docs/docs/api/appkit-ui/ui/Collapsible/index.html +41 -0
  367. package/docs/docs/api/appkit-ui/ui/Collapsible.md +125 -0
  368. package/docs/docs/api/appkit-ui/ui/Command/index.html +83 -0
  369. package/docs/docs/api/appkit-ui/ui/Command.md +287 -0
  370. package/docs/docs/api/appkit-ui/ui/ContextMenu/index.html +111 -0
  371. package/docs/docs/api/appkit-ui/ui/ContextMenu.md +419 -0
  372. package/docs/docs/api/appkit-ui/ui/Dialog/index.html +90 -0
  373. package/docs/docs/api/appkit-ui/ui/Dialog.md +285 -0
  374. package/docs/docs/api/appkit-ui/ui/Drawer/index.html +90 -0
  375. package/docs/docs/api/appkit-ui/ui/Drawer.md +387 -0
  376. package/docs/docs/api/appkit-ui/ui/DropdownMenu/index.html +111 -0
  377. package/docs/docs/api/appkit-ui/ui/DropdownMenu.md +478 -0
  378. package/docs/docs/api/appkit-ui/ui/Empty/index.html +54 -0
  379. package/docs/docs/api/appkit-ui/ui/Empty.md +109 -0
  380. package/docs/docs/api/appkit-ui/ui/Field/index.html +87 -0
  381. package/docs/docs/api/appkit-ui/ui/Field.md +201 -0
  382. package/docs/docs/api/appkit-ui/ui/FormControl/index.html +59 -0
  383. package/docs/docs/api/appkit-ui/ui/FormControl.md +128 -0
  384. package/docs/docs/api/appkit-ui/ui/HoverCard/index.html +39 -0
  385. package/docs/docs/api/appkit-ui/ui/HoverCard.md +131 -0
  386. package/docs/docs/api/appkit-ui/ui/Input/index.html +27 -0
  387. package/docs/docs/api/appkit-ui/ui/Input.md +35 -0
  388. package/docs/docs/api/appkit-ui/ui/InputGroup/index.html +59 -0
  389. package/docs/docs/api/appkit-ui/ui/InputGroup.md +123 -0
  390. package/docs/docs/api/appkit-ui/ui/InputOTP/index.html +48 -0
  391. package/docs/docs/api/appkit-ui/ui/InputOTP.md +124 -0
  392. package/docs/docs/api/appkit-ui/ui/Item/index.html +78 -0
  393. package/docs/docs/api/appkit-ui/ui/Item.md +185 -0
  394. package/docs/docs/api/appkit-ui/ui/Kbd/index.html +30 -0
  395. package/docs/docs/api/appkit-ui/ui/Kbd.md +39 -0
  396. package/docs/docs/api/appkit-ui/ui/Label/index.html +27 -0
  397. package/docs/docs/api/appkit-ui/ui/Label.md +44 -0
  398. package/docs/docs/api/appkit-ui/ui/Menubar/index.html +117 -0
  399. package/docs/docs/api/appkit-ui/ui/Menubar.md +484 -0
  400. package/docs/docs/api/appkit-ui/ui/NavigationMenu/index.html +76 -0
  401. package/docs/docs/api/appkit-ui/ui/NavigationMenu.md +338 -0
  402. package/docs/docs/api/appkit-ui/ui/Pagination/index.html +69 -0
  403. package/docs/docs/api/appkit-ui/ui/Pagination.md +191 -0
  404. package/docs/docs/api/appkit-ui/ui/Popover/index.html +45 -0
  405. package/docs/docs/api/appkit-ui/ui/Popover.md +173 -0
  406. package/docs/docs/api/appkit-ui/ui/Progress/index.html +27 -0
  407. package/docs/docs/api/appkit-ui/ui/Progress.md +51 -0
  408. package/docs/docs/api/appkit-ui/ui/RadioGroup/index.html +33 -0
  409. package/docs/docs/api/appkit-ui/ui/RadioGroup.md +83 -0
  410. package/docs/docs/api/appkit-ui/ui/ResizableHandle/index.html +41 -0
  411. package/docs/docs/api/appkit-ui/ui/ResizableHandle.md +136 -0
  412. package/docs/docs/api/appkit-ui/ui/ScrollArea/index.html +34 -0
  413. package/docs/docs/api/appkit-ui/ui/ScrollArea.md +83 -0
  414. package/docs/docs/api/appkit-ui/ui/Select/index.html +82 -0
  415. package/docs/docs/api/appkit-ui/ui/Select.md +267 -0
  416. package/docs/docs/api/appkit-ui/ui/Separator/index.html +27 -0
  417. package/docs/docs/api/appkit-ui/ui/Separator.md +56 -0
  418. package/docs/docs/api/appkit-ui/ui/Sheet/index.html +76 -0
  419. package/docs/docs/api/appkit-ui/ui/Sheet.md +236 -0
  420. package/docs/docs/api/appkit-ui/ui/Sidebar/index.html +183 -0
  421. package/docs/docs/api/appkit-ui/ui/Sidebar.md +490 -0
  422. package/docs/docs/api/appkit-ui/ui/Skeleton/index.html +27 -0
  423. package/docs/docs/api/appkit-ui/ui/Skeleton.md +43 -0
  424. package/docs/docs/api/appkit-ui/ui/Slider/index.html +27 -0
  425. package/docs/docs/api/appkit-ui/ui/Slider.md +61 -0
  426. package/docs/docs/api/appkit-ui/ui/Spinner/index.html +24 -0
  427. package/docs/docs/api/appkit-ui/ui/Spinner.md +22 -0
  428. package/docs/docs/api/appkit-ui/ui/Switch/index.html +27 -0
  429. package/docs/docs/api/appkit-ui/ui/Switch.md +46 -0
  430. package/docs/docs/api/appkit-ui/ui/Table/index.html +69 -0
  431. package/docs/docs/api/appkit-ui/ui/Table.md +236 -0
  432. package/docs/docs/api/appkit-ui/ui/Tabs/index.html +48 -0
  433. package/docs/docs/api/appkit-ui/ui/Tabs.md +177 -0
  434. package/docs/docs/api/appkit-ui/ui/Textarea/index.html +27 -0
  435. package/docs/docs/api/appkit-ui/ui/Textarea.md +35 -0
  436. package/docs/docs/api/appkit-ui/ui/Toaster/index.html +27 -0
  437. package/docs/docs/api/appkit-ui/ui/Toaster.md +75 -0
  438. package/docs/docs/api/appkit-ui/ui/Toggle/index.html +27 -0
  439. package/docs/docs/api/appkit-ui/ui/Toggle.md +48 -0
  440. package/docs/docs/api/appkit-ui/ui/ToggleGroup/index.html +33 -0
  441. package/docs/docs/api/appkit-ui/ui/ToggleGroup.md +88 -0
  442. package/docs/docs/api/appkit-ui/ui/Tooltip/index.html +46 -0
  443. package/docs/docs/api/appkit-ui/ui/Tooltip.md +134 -0
  444. package/docs/docs/api/appkit-ui.md +15 -0
  445. package/docs/docs/api/appkit.md +48 -0
  446. package/docs/docs/api/index.html +28 -0
  447. package/docs/docs/api.md +24 -0
  448. package/docs/docs/app-management/index.html +106 -0
  449. package/docs/docs/app-management.md +171 -0
  450. package/docs/docs/architecture/index.html +71 -0
  451. package/docs/docs/architecture.md +69 -0
  452. package/docs/docs/category/development/index.html +16 -0
  453. package/docs/docs/category/development.md +3 -0
  454. package/docs/docs/configuration/index.html +66 -0
  455. package/docs/docs/configuration.md +150 -0
  456. package/docs/docs/core-principles/index.html +38 -0
  457. package/docs/docs/core-principles.md +31 -0
  458. package/docs/docs/development/index.html +34 -0
  459. package/docs/docs/development/llm-guide/index.html +74 -0
  460. package/docs/docs/development/llm-guide.md +74 -0
  461. package/docs/docs/development/local-development/index.html +27 -0
  462. package/docs/docs/development/local-development.md +20 -0
  463. package/docs/docs/development/project-setup/index.html +69 -0
  464. package/docs/docs/development/project-setup.md +246 -0
  465. package/docs/docs/development/remote-bridge/index.html +76 -0
  466. package/docs/docs/development/remote-bridge.md +80 -0
  467. package/docs/docs/development/type-generation/index.html +65 -0
  468. package/docs/docs/development/type-generation.md +110 -0
  469. package/docs/docs/development.md +21 -0
  470. package/docs/docs/index.html +58 -0
  471. package/docs/docs/plugins/index.html +151 -0
  472. package/docs/docs/plugins.md +313 -0
  473. package/docs/docs.md +64 -0
  474. package/llms.txt +121 -1231
  475. package/package.json +7 -5
  476. package/scripts/postinstall.js +1 -1
  477. package/AGENTS.md +0 -1234
  478. package/bin/setup-claude.js +0 -190
@@ -1 +1 @@
1
- {"version":3,"file":"normalize.js","names":["xField","detected","resolvedXKey","resolvedYKeys","rawXData","rawYDataMap","xData","yDataMap"],"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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"}
1
+ {"version":3,"file":"normalize.js","names":[],"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":";;;;;;;;;;AAmBA,SAAS,aAAa,OAAyB;AAC7C,KAAI,OAAO,UAAU,SAAU,QAAO;AACtC,QAAO,0BAA0B,KAAK,MAAM;;;;;AAM9C,SAAS,eAAe,OAAyB;AAC/C,KAAI,OAAO,UAAU,SAAU,QAAO;AACtC,KAAI,OAAO,UAAU,SAAU,QAAO;AACtC,KAAI,OAAO,UAAU,UAAU;EAC7B,MAAM,UAAU,MAAM,MAAM;AAC5B,MAAI,YAAY,MAAM,aAAa,QAAQ,CAAE,QAAO;EACpD,MAAM,SAAS,OAAO,QAAQ;AAC9B,SAAO,CAAC,OAAO,MAAM,OAAO,IAAI,OAAO,SAAS,OAAO;;AAEzD,QAAO;;;;;AAMT,SAAS,gBAAgB,OAAyB;AAChD,KAAI,OAAO,UAAU,SAAU,QAAO;CACtC,MAAM,UAAU,MAAM,MAAM;AAC5B,KAAI,YAAY,GAAI,QAAO;AAC3B,KAAI,qBAAqB,KAAK,QAAQ,CAAE,QAAO;CAC/C,MAAM,SAAS,OAAO,QAAQ;AAC9B,QAAO,OAAO,MAAM,OAAO,IAAI,CAAC,OAAO,SAAS,OAAO;;;;;AAUzD,SAAS,qBACP,MACA,aAKA;AACA,KAAI,CAAC,QAAQ,KAAK,WAAW,EAC3B,QAAO;EAAE,QAAQ;EAAK,SAAS,CAAC,IAAI;EAAE,WAAW;EAAe;CAGlE,MAAM,WAAW,KAAK;CACtB,MAAM,OAAO,OAAO,KAAK,SAAS;CAGlC,MAAM,aAAa,KAAK,QAAQ,QAAQ;EACtC,MAAM,QAAQ,SAAS;EACvB,MAAM,wBAAwB,oBAAoB,MAAM,MACtD,IAAI,aAAa,CAAC,SAAS,EAAE,CAC9B;EACD,MAAM,oBAAoB,aAAa,MAAM;AAC7C,SAAO,yBAAyB;GAChC;CAGF,IAAI,aAAa,KAAK,QAAQ,QAAQ;EACpC,MAAM,QAAQ,SAAS;AACvB,SACE,gBAAgB,MAAM,IACtB,CAAC,aAAa,MAAM,IACpB,oBAAoB,MAAM,MAAM,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC;GAEhE;AAGF,KAAI,WAAW,WAAW,EACxB,cAAa,KAAK,QAAQ,QAAQ;EAChC,MAAM,QAAQ,SAAS;AACvB,SACE,gBAAgB,MAAM,IACtB,CAAC,aAAa,MAAM,IACpB,CAAC,WAAW,SAAS,IAAI,IACzB,CAAC,IAAI,aAAa,CAAC,SAAS,MAAM;GAEpC;CAIJ,MAAM,gBAAgB,KAAK,QAAQ,QAAQ;EACzC,MAAM,QAAQ,SAAS;AACvB,SAAO,eAAe,MAAM,IAAI,CAAC,WAAW,SAAS,IAAI;GACzD;AAIF,KAFqB,gBAAgB,gBAEhB,WAAW,SAAS,KAAK,WAAW,WAAW,GAAI;EACtE,MAAM,SAAS,WAAW,MAAM,WAAW,MAAM,KAAK;AAKtD,SAAO;GAAE;GAAQ,SAHf,cAAc,SAAS,IACnB,gBACA,KAAK,QAAQ,MAAM,MAAM,OAAO;GACZ,WAAW;GAAe;;CAGtD,MAAM,SAAS,WAAW,MAAM,WAAW,MAAM,KAAK;AAGtD,QAAO;EACL;EACA,SAHA,cAAc,SAAS,IAAI,gBAAgB,KAAK,QAAQ,MAAM,MAAM,OAAO;EAI3E,WAAW,WAAW,SAAS,IAAI,eAAe;EACnD;;;;;AAUH,SAAS,sBACP,OACA,UACA,aACiB;AACjB,KAAI,UAAU,QAAQ,UAAU,OAC9B,QAAO,WAAW,IAAI;AAExB,KAAI,OAAO,UAAU,SACnB,QAAO;AAET,KAAI,OAAO,UAAU,SACnB,QAAO,OAAO,MAAM;AAEtB,KAAI,OAAO,UAAU,UAAU;AAC7B,MAAI,eAAe,aAAa,MAAM,EAAE;GACtC,MAAM,YAAY,IAAI,KAAK,MAAM,CAAC,SAAS;AAC3C,OAAI,CAAC,OAAO,MAAM,UAAU,CAC1B,QAAO;;AAGX,MAAI,UAAU;GACZ,MAAM,UAAU,MAAM,MAAM;GAC5B,MAAM,SAAS,OAAO,QAAQ;AAC9B,OAAI,CAAC,OAAO,MAAM,OAAO,IAAI,OAAO,SAAS,OAAO,CAClD,QAAO;;AAGX,SAAO;;AAET,QAAO,OAAO,MAAM;;;;;AAUtB,SAAS,gBACP,MACA,QACA,SAIA;CACA,MAAM,QAA6B,EAAE;CACrC,MAAM,WAAgD,EAAE;AAExD,MAAK,MAAM,SAAS,QAClB,UAAS,SAAS,EAAE;CAGtB,MAAM,eAAe,KAAK,SAAS,KAAK,aAAa,KAAK,GAAG,QAAQ;AAErE,MAAK,MAAM,OAAO,MAAM;AACtB,QAAM,KAAK,sBAAsB,IAAI,SAAS,OAAO,aAAa,CAAC;AACnE,OAAK,MAAM,SAAS,QAClB,UAAS,OAAO,KAAK,sBAAsB,IAAI,QAAQ,MAAM,MAAM,CAAC;;AAIxE,QAAO;EAAE;EAAO;EAAU;;;;;;AAW5B,SAAgB,mBACd,MACA,MACA,MACA,aACqB;AACrB,KAAI,aAAa,KAAK,EAAE;EACtB,MAAM,QAAQ;EACd,MAAM,WAAW,YAAY,sBAAsB,OAAO,YAAY;EACtE,MAAM,eAAe,QAAQ,SAAS;EACtC,MAAM,gBAAgB,OAClB,MAAM,QAAQ,KAAK,GACjB,OACA,CAAC,KAAK,GACR,SAAS;EAEb,MAAM,EAAE,OAAO,UAAU,UAAU,gBACjC,YAAY,iBAAiB,OAAO,cAAc,cAAc;EAElE,IAAI,QAAQ,aAAa,SAAS;EAClC,IAAI,WAAgD,EAAE;AACtD,OAAK,MAAM,OAAO,cAChB,UAAS,OAAO,aAAa,YAAY,QAAQ,EAAE,CAAC;AAGtD,MAAI,SAAS,cAAc,aACzB,EAAC,CAAE,OAAO,YAAa,wBACrB,OACA,UACA,cACD;AAGH,SAAO;GACL;GACA;GACA,QAAQ;GACR,SAAS;GACT,WAAW,SAAS;GACrB;;CAIH,MAAM,WAAW;CACjB,MAAM,WAAW,qBAAqB,UAAU,YAAY;CAC5D,MAAM,eAAe,QAAQ,SAAS;CACtC,MAAM,gBAAgB,OAClB,MAAM,QAAQ,KAAK,GACjB,OACA,CAAC,KAAK,GACR,SAAS;CAEb,MAAM,EAAE,OAAO,UAAU,UAAU,gBAAgB,gBACjD,UACA,cACA,cACD;CAED,IAAI,QAAQ,aAAa,SAAS;CAClC,IAAI,WAAgD,EAAE;AACtD,MAAK,MAAM,OAAO,cAChB,UAAS,OAAO,aAAa,YAAY,QAAQ,EAAE,CAAC;AAGtD,KAAI,SAAS,cAAc,aACzB,EAAC,CAAE,OAAO,YAAa,wBACrB,OACA,UACA,cACD;AAGH,QAAO;EACL;EACA;EACA,QAAQ;EACR,SAAS;EACT,WAAW,SAAS;EACrB;;;;;;;;;;;AAgCH,SAAgB,qBACd,MACA,MACA,UACA,UACuB;CAEvB,MAAM,WAAW,aAAa,KAAK,GAC/B,qBAAqB,KAAK,GACzB;AAEL,KAAI,SAAS,WAAW,EACtB,QAAO;EACL,OAAO,EAAE;EACT,QAAQ,QAAQ;EAChB,SAAS,EAAE;EACX,WAAW;EACX,WAAW,EAAE;EACb,aAAa,EAAE;EACf,KAAK;EACL,KAAK;EACN;CAIH,MAAM,OAAO,OAAO,KAAK,SAAS,GAAG;CACrC,MAAM,eAAe,QAAQ,KAAK;CAClC,MAAM,mBAAmB,YAAY,KAAK;CAC1C,MAAM,mBAAmB,WACrB,MAAM,QAAQ,SAAS,GACrB,SAAS,KACT,WACF,KAAK;CAGT,MAAM,uBAAO,IAAI,KAAsB;CACvC,MAAM,uBAAO,IAAI,KAAsB;AAEvC,MAAK,MAAM,OAAO,UAAU;EAC1B,MAAM,OAAO,sBAAsB,IAAI,eAAe,OAAO,MAAM;EACnE,MAAM,OAAO,sBAAsB,IAAI,mBAAmB,OAAO,MAAM;AACvE,OAAK,IAAI,KAAK;AACd,OAAK,IAAI,KAAK;;CAGhB,MAAM,QAAQ,MAAM,KAAK,KAAK;CAC9B,MAAM,YAAY,MAAM,KAAK,KAAK;CAGlC,MAAM,4BAAY,IAAI,KAA8B;CACpD,MAAM,4BAAY,IAAI,KAA8B;AACpD,OAAM,SAAS,GAAG,MAAM;AACtB,YAAU,IAAI,GAAG,EAAE;GACnB;AACF,WAAU,SAAS,GAAG,MAAM;AAC1B,YAAU,IAAI,GAAG,EAAE;GACnB;CAGF,MAAM,cAA0C,EAAE;CAClD,IAAI,MAAM,OAAO;CACjB,IAAI,MAAM,OAAO;AAEjB,MAAK,MAAM,OAAO,UAAU;EAC1B,MAAM,OAAO,sBAAsB,IAAI,eAAe,OAAO,MAAM;EACnE,MAAM,OAAO,sBAAsB,IAAI,mBAAmB,OAAO,MAAM;EACvE,MAAM,QAAQ,sBAAsB,IAAI,mBAAmB,MAAM,MAAM;EAEvE,MAAM,OAAO,UAAU,IAAI,KAAK;EAChC,MAAM,OAAO,UAAU,IAAI,KAAK;EAChC,MAAM,WAAW,OAAO,UAAU,WAAW,QAAQ;AAErD,MAAI,SAAS,UAAa,SAAS,QAAW;AAC5C,eAAY,KAAK;IAAC;IAAM;IAAM;IAAS,CAAC;AACxC,SAAM,KAAK,IAAI,KAAK,SAAS;AAC7B,SAAM,KAAK,IAAI,KAAK,SAAS;;;AAKjC,KAAI,YAAY,WAAW,GAAG;AAC5B,QAAM;AACN,QAAM;;AAGR,QAAO;EACL;EACA,QAAQ;EACR,SAAS,CAAC,iBAAiB;EAC3B,WAAW;EACX;EACA;EACA;EACA;EACD;;;;;AAMH,SAAS,qBAAqB,OAAyC;CACrE,MAAM,SAAoC,EAAE;CAC5C,MAAM,SAAS,MAAM,OAAO,OAAO,KAAK,MAAM,EAAE,KAAK;AAErD,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,SAAS,KAAK;EACtC,MAAM,MAA+B,EAAE;AACvC,OAAK,MAAM,SAAS,OAElB,KAAI,SADQ,MAAM,SAAS,MAAM,EACf,IAAI,EAAE;AAE1B,SAAO,KAAK,IAAI;;AAGlB,QAAO"}
@@ -1 +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"}
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,MAAM,CAAA,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"}
@@ -1,55 +1,33 @@
1
1
  import { DonutChartProps, PieChartProps } from "../types.js";
2
- import * as react_jsx_runtime279 from "react/jsx-runtime";
2
+ import "react";
3
+ import * as react_jsx_runtime4 from "react/jsx-runtime";
3
4
 
4
5
  //#region src/react/charts/pie/index.d.ts
5
6
 
6
7
  /**
7
- * Pie Chart component.
8
- * Supports both JSON and Arrow data formats with automatic format selection.
8
+ * Pie Chart component for proportional data visualization.
9
9
  *
10
- * @example Simple usage
11
- * ```tsx
12
- * <PieChart
13
- * queryKey="market_share"
14
- * parameters={{ category: "tech" }}
15
- * />
16
- * ```
10
+ * **Important:** This component uses Apache ECharts architecture. Configure it via props, not by passing child components.
17
11
  *
18
- * @example With custom labels
19
- * ```tsx
20
- * <PieChart
21
- * queryKey="distribution"
22
- * showLabels={true}
23
- * labelPosition="inside"
24
- * />
25
- * ```
12
+ * **Best Practice:** Use the built-in data fetching by passing `queryKey` and `parameters` props instead of pre-fetching data with `useAnalyticsQuery`.
13
+ *
14
+ * Supports both query mode (queryKey + parameters) and data mode (static data).
26
15
  */
27
16
  declare const PieChart: {
28
- (props: PieChartProps): react_jsx_runtime279.JSX.Element;
17
+ (props: PieChartProps): react_jsx_runtime4.JSX.Element;
29
18
  displayName: string;
30
19
  };
31
20
  /**
32
21
  * Donut Chart component (Pie chart with inner radius).
33
- * Supports both JSON and Arrow data formats with automatic format selection.
34
22
  *
35
- * @example Simple usage
36
- * ```tsx
37
- * <DonutChart
38
- * queryKey="budget_allocation"
39
- * parameters={{ year: 2024 }}
40
- * />
41
- * ```
23
+ * **Important:** This component uses Apache ECharts architecture. Configure it via props, not by passing child components.
24
+ *
25
+ * **Best Practice:** Use the built-in data fetching by passing `queryKey` and `parameters` props instead of pre-fetching data with `useAnalyticsQuery`.
42
26
  *
43
- * @example Custom inner radius
44
- * ```tsx
45
- * <DonutChart
46
- * queryKey="progress"
47
- * innerRadius={60}
48
- * />
49
- * ```
27
+ * Supports both query mode (queryKey + parameters) and data mode (static data).
50
28
  */
51
29
  declare const DonutChart: {
52
- (props: DonutChartProps): react_jsx_runtime279.JSX.Element;
30
+ (props: DonutChartProps): react_jsx_runtime4.JSX.Element;
53
31
  displayName: string;
54
32
  };
55
33
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/react/charts/pie/index.tsx"],"sourcesContent":[],"mappings":";;;;;;;;AAwBA;;;;;AAsBA;;;;;;;;;;;;;cAtBa;;;;;;;;;;;;;;;;;;;;;;;;cAsBA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/react/charts/pie/index.tsx"],"sourcesContent":[],"mappings":";;;;;;;;;AAaA;;;;;AAWA;AAA6E,cAXhE,QAWgE,EAAA;;;;;;;;;;;;;cAAhE"}
@@ -2,46 +2,23 @@ import { createChart } from "../create-chart.js";
2
2
 
3
3
  //#region src/react/charts/pie/index.tsx
4
4
  /**
5
- * Pie Chart component.
6
- * Supports both JSON and Arrow data formats with automatic format selection.
5
+ * Pie Chart component for proportional data visualization.
7
6
  *
8
- * @example Simple usage
9
- * ```tsx
10
- * <PieChart
11
- * queryKey="market_share"
12
- * parameters={{ category: "tech" }}
13
- * />
14
- * ```
7
+ * **Important:** This component uses Apache ECharts architecture. Configure it via props, not by passing child components.
15
8
  *
16
- * @example With custom labels
17
- * ```tsx
18
- * <PieChart
19
- * queryKey="distribution"
20
- * showLabels={true}
21
- * labelPosition="inside"
22
- * />
23
- * ```
9
+ * **Best Practice:** Use the built-in data fetching by passing `queryKey` and `parameters` props instead of pre-fetching data with `useAnalyticsQuery`.
10
+ *
11
+ * Supports both query mode (queryKey + parameters) and data mode (static data).
24
12
  */
25
13
  const PieChart = createChart("pie", "PieChart");
26
14
  /**
27
15
  * Donut Chart component (Pie chart with inner radius).
28
- * Supports both JSON and Arrow data formats with automatic format selection.
29
16
  *
30
- * @example Simple usage
31
- * ```tsx
32
- * <DonutChart
33
- * queryKey="budget_allocation"
34
- * parameters={{ year: 2024 }}
35
- * />
36
- * ```
17
+ * **Important:** This component uses Apache ECharts architecture. Configure it via props, not by passing child components.
18
+ *
19
+ * **Best Practice:** Use the built-in data fetching by passing `queryKey` and `parameters` props instead of pre-fetching data with `useAnalyticsQuery`.
37
20
  *
38
- * @example Custom inner radius
39
- * ```tsx
40
- * <DonutChart
41
- * queryKey="progress"
42
- * innerRadius={60}
43
- * />
44
- * ```
21
+ * Supports both query mode (queryKey + parameters) and data mode (static data).
45
22
  */
46
23
  const DonutChart = createChart("donut", "DonutChart");
47
24
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/react/charts/pie/index.tsx"],"sourcesContent":["import { createChart } from \"../create-chart\";\nimport type { DonutChartProps, PieChartProps } from \"../types\";\n\n/**\n * Pie Chart component.\n * Supports both JSON and Arrow data formats with automatic format selection.\n *\n * @example Simple usage\n * ```tsx\n * <PieChart\n * queryKey=\"market_share\"\n * parameters={{ category: \"tech\" }}\n * />\n * ```\n *\n * @example With custom labels\n * ```tsx\n * <PieChart\n * queryKey=\"distribution\"\n * showLabels={true}\n * labelPosition=\"inside\"\n * />\n * ```\n */\nexport const PieChart = createChart<PieChartProps>(\"pie\", \"PieChart\");\n\n/**\n * Donut Chart component (Pie chart with inner radius).\n * Supports both JSON and Arrow data formats with automatic format selection.\n *\n * @example Simple usage\n * ```tsx\n * <DonutChart\n * queryKey=\"budget_allocation\"\n * parameters={{ year: 2024 }}\n * />\n * ```\n *\n * @example Custom inner radius\n * ```tsx\n * <DonutChart\n * queryKey=\"progress\"\n * innerRadius={60}\n * />\n * ```\n */\nexport const DonutChart = createChart<DonutChartProps>(\"donut\", \"DonutChart\");\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAwBA,MAAa,WAAW,YAA2B,OAAO,WAAW;;;;;;;;;;;;;;;;;;;;;AAsBrE,MAAa,aAAa,YAA6B,SAAS,aAAa"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/react/charts/pie/index.tsx"],"sourcesContent":["import type { JSX } from \"react\";\nimport { createChart } from \"../create-chart\";\nimport type { DonutChartProps, PieChartProps } from \"../types\";\n\n/**\n * Pie Chart component for proportional data visualization.\n *\n * **Important:** This component uses Apache ECharts architecture. Configure it via props, not by passing child components.\n *\n * **Best Practice:** Use the built-in data fetching by passing `queryKey` and `parameters` props instead of pre-fetching data with `useAnalyticsQuery`.\n *\n * Supports both query mode (queryKey + parameters) and data mode (static data).\n */\nexport const PieChart = createChart<PieChartProps>(\"pie\", \"PieChart\");\n\n/**\n * Donut Chart component (Pie chart with inner radius).\n *\n * **Important:** This component uses Apache ECharts architecture. Configure it via props, not by passing child components.\n *\n * **Best Practice:** Use the built-in data fetching by passing `queryKey` and `parameters` props instead of pre-fetching data with `useAnalyticsQuery`.\n *\n * Supports both query mode (queryKey + parameters) and data mode (static data).\n */\nexport const DonutChart = createChart<DonutChartProps>(\"donut\", \"DonutChart\");\n\n// Type-only definitions for documentation generation (not used at runtime)\n/**\n * Pie Chart component for proportional data visualization.\n *\n * **Important:** This component uses Apache ECharts architecture. Configure it via props, not by passing child components.\n *\n * **Best Practice:** Use the built-in data fetching by passing `queryKey` and `parameters` props instead of pre-fetching data with `useAnalyticsQuery`.\n *\n * Supports both query mode (queryKey + parameters) and data mode (static data).\n */\nexport function PieChartDoc(props: PieChartProps): JSX.Element {\n return PieChart(props);\n}\n\n/**\n * Donut Chart component (Pie chart with inner radius).\n *\n * **Important:** This component uses Apache ECharts architecture. Configure it via props, not by passing child components.\n *\n * **Best Practice:** Use the built-in data fetching by passing `queryKey` and `parameters` props instead of pre-fetching data with `useAnalyticsQuery`.\n *\n * Supports both query mode (queryKey + parameters) and data mode (static data).\n */\nexport function DonutChartDoc(props: DonutChartProps): JSX.Element {\n return DonutChart(props);\n}\n"],"mappings":";;;;;;;;;;;;AAaA,MAAa,WAAW,YAA2B,OAAO,WAAW;;;;;;;;;;AAWrE,MAAa,aAAa,YAA6B,SAAS,aAAa"}
@@ -1,30 +1,20 @@
1
1
  import { RadarChartProps } from "../types.js";
2
- import * as react_jsx_runtime281 from "react/jsx-runtime";
2
+ import "react";
3
+ import * as react_jsx_runtime6 from "react/jsx-runtime";
3
4
 
4
5
  //#region src/react/charts/radar/index.d.ts
5
6
 
6
7
  /**
7
- * Radar Chart component.
8
- * Supports both JSON and Arrow data formats with automatic format selection.
8
+ * Radar Chart component for multi-dimensional data comparison.
9
9
  *
10
- * @example Simple usage
11
- * ```tsx
12
- * <RadarChart
13
- * queryKey="skills_assessment"
14
- * parameters={{ userId: "123" }}
15
- * />
16
- * ```
10
+ * **Important:** This component uses Apache ECharts architecture. Configure it via props, not by passing child components.
17
11
  *
18
- * @example With custom styling
19
- * ```tsx
20
- * <RadarChart
21
- * queryKey="performance_metrics"
22
- * showArea={true}
23
- * />
24
- * ```
12
+ * **Best Practice:** Use the built-in data fetching by passing `queryKey` and `parameters` props instead of pre-fetching data with `useAnalyticsQuery`.
13
+ *
14
+ * Supports both query mode (queryKey + parameters) and data mode (static data).
25
15
  */
26
16
  declare const RadarChart: {
27
- (props: RadarChartProps): react_jsx_runtime281.JSX.Element;
17
+ (props: RadarChartProps): react_jsx_runtime6.JSX.Element;
28
18
  displayName: string;
29
19
  };
30
20
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/react/charts/radar/index.tsx"],"sourcesContent":[],"mappings":";;;;;;;;AAuBA;;;;;;;;;;;;;;;;;cAAa"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/react/charts/radar/index.tsx"],"sourcesContent":[],"mappings":";;;;;;;;;AAaA;;;;;;cAAa"}
@@ -2,24 +2,13 @@ import { createChart } from "../create-chart.js";
2
2
 
3
3
  //#region src/react/charts/radar/index.tsx
4
4
  /**
5
- * Radar Chart component.
6
- * Supports both JSON and Arrow data formats with automatic format selection.
5
+ * Radar Chart component for multi-dimensional data comparison.
7
6
  *
8
- * @example Simple usage
9
- * ```tsx
10
- * <RadarChart
11
- * queryKey="skills_assessment"
12
- * parameters={{ userId: "123" }}
13
- * />
14
- * ```
7
+ * **Important:** This component uses Apache ECharts architecture. Configure it via props, not by passing child components.
15
8
  *
16
- * @example With custom styling
17
- * ```tsx
18
- * <RadarChart
19
- * queryKey="performance_metrics"
20
- * showArea={true}
21
- * />
22
- * ```
9
+ * **Best Practice:** Use the built-in data fetching by passing `queryKey` and `parameters` props instead of pre-fetching data with `useAnalyticsQuery`.
10
+ *
11
+ * Supports both query mode (queryKey + parameters) and data mode (static data).
23
12
  */
24
13
  const RadarChart = createChart("radar", "RadarChart");
25
14
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/react/charts/radar/index.tsx"],"sourcesContent":["import { createChart } from \"../create-chart\";\nimport type { RadarChartProps } from \"../types\";\n\n/**\n * Radar Chart component.\n * Supports both JSON and Arrow data formats with automatic format selection.\n *\n * @example Simple usage\n * ```tsx\n * <RadarChart\n * queryKey=\"skills_assessment\"\n * parameters={{ userId: \"123\" }}\n * />\n * ```\n *\n * @example With custom styling\n * ```tsx\n * <RadarChart\n * queryKey=\"performance_metrics\"\n * showArea={true}\n * />\n * ```\n */\nexport const RadarChart = createChart<RadarChartProps>(\"radar\", \"RadarChart\");\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAuBA,MAAa,aAAa,YAA6B,SAAS,aAAa"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/react/charts/radar/index.tsx"],"sourcesContent":["import type { JSX } from \"react\";\nimport { createChart } from \"../create-chart\";\nimport type { RadarChartProps } from \"../types\";\n\n/**\n * Radar Chart component for multi-dimensional data comparison.\n *\n * **Important:** This component uses Apache ECharts architecture. Configure it via props, not by passing child components.\n *\n * **Best Practice:** Use the built-in data fetching by passing `queryKey` and `parameters` props instead of pre-fetching data with `useAnalyticsQuery`.\n *\n * Supports both query mode (queryKey + parameters) and data mode (static data).\n */\nexport const RadarChart = createChart<RadarChartProps>(\"radar\", \"RadarChart\");\n\n// Type-only definition for documentation generation (not used at runtime)\n/**\n * Radar Chart component for multi-dimensional data comparison.\n *\n * **Important:** This component uses Apache ECharts architecture. Configure it via props, not by passing child components.\n *\n * **Best Practice:** Use the built-in data fetching by passing `queryKey` and `parameters` props instead of pre-fetching data with `useAnalyticsQuery`.\n *\n * Supports both query mode (queryKey + parameters) and data mode (static data).\n */\nexport function RadarChartDoc(props: RadarChartProps): JSX.Element {\n return RadarChart(props);\n}\n"],"mappings":";;;;;;;;;;;;AAaA,MAAa,aAAa,YAA6B,SAAS,aAAa"}
@@ -1,30 +1,20 @@
1
1
  import { ScatterChartProps } from "../types.js";
2
- import * as react_jsx_runtime282 from "react/jsx-runtime";
2
+ import "react";
3
+ import * as react_jsx_runtime7 from "react/jsx-runtime";
3
4
 
4
5
  //#region src/react/charts/scatter/index.d.ts
5
6
 
6
7
  /**
7
- * Scatter Chart component.
8
- * Supports both JSON and Arrow data formats with automatic format selection.
8
+ * Scatter Chart component for correlation and distribution visualization.
9
9
  *
10
- * @example Simple usage
11
- * ```tsx
12
- * <ScatterChart
13
- * queryKey="correlation_data"
14
- * parameters={{ metrics: ["revenue", "growth"] }}
15
- * />
16
- * ```
10
+ * **Important:** This component uses Apache ECharts architecture. Configure it via props, not by passing child components.
17
11
  *
18
- * @example With custom symbol size
19
- * ```tsx
20
- * <ScatterChart
21
- * queryKey="data_points"
22
- * symbolSize={12}
23
- * />
24
- * ```
12
+ * **Best Practice:** Use the built-in data fetching by passing `queryKey` and `parameters` props instead of pre-fetching data with `useAnalyticsQuery`.
13
+ *
14
+ * Supports both query mode (queryKey + parameters) and data mode (static data).
25
15
  */
26
16
  declare const ScatterChart: {
27
- (props: ScatterChartProps): react_jsx_runtime282.JSX.Element;
17
+ (props: ScatterChartProps): react_jsx_runtime7.JSX.Element;
28
18
  displayName: string;
29
19
  };
30
20
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/react/charts/scatter/index.tsx"],"sourcesContent":[],"mappings":";;;;;;;;AAuBA;;;;;;;;;;;;;;;;;cAAa"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/react/charts/scatter/index.tsx"],"sourcesContent":[],"mappings":";;;;;;;;;AAaA;;;;;;cAAa"}
@@ -2,24 +2,13 @@ import { createChart } from "../create-chart.js";
2
2
 
3
3
  //#region src/react/charts/scatter/index.tsx
4
4
  /**
5
- * Scatter Chart component.
6
- * Supports both JSON and Arrow data formats with automatic format selection.
5
+ * Scatter Chart component for correlation and distribution visualization.
7
6
  *
8
- * @example Simple usage
9
- * ```tsx
10
- * <ScatterChart
11
- * queryKey="correlation_data"
12
- * parameters={{ metrics: ["revenue", "growth"] }}
13
- * />
14
- * ```
7
+ * **Important:** This component uses Apache ECharts architecture. Configure it via props, not by passing child components.
15
8
  *
16
- * @example With custom symbol size
17
- * ```tsx
18
- * <ScatterChart
19
- * queryKey="data_points"
20
- * symbolSize={12}
21
- * />
22
- * ```
9
+ * **Best Practice:** Use the built-in data fetching by passing `queryKey` and `parameters` props instead of pre-fetching data with `useAnalyticsQuery`.
10
+ *
11
+ * Supports both query mode (queryKey + parameters) and data mode (static data).
23
12
  */
24
13
  const ScatterChart = createChart("scatter", "ScatterChart");
25
14
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/react/charts/scatter/index.tsx"],"sourcesContent":["import { createChart } from \"../create-chart\";\nimport type { ScatterChartProps } from \"../types\";\n\n/**\n * Scatter Chart component.\n * Supports both JSON and Arrow data formats with automatic format selection.\n *\n * @example Simple usage\n * ```tsx\n * <ScatterChart\n * queryKey=\"correlation_data\"\n * parameters={{ metrics: [\"revenue\", \"growth\"] }}\n * />\n * ```\n *\n * @example With custom symbol size\n * ```tsx\n * <ScatterChart\n * queryKey=\"data_points\"\n * symbolSize={12}\n * />\n * ```\n */\nexport const ScatterChart = createChart<ScatterChartProps>(\n \"scatter\",\n \"ScatterChart\",\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAuBA,MAAa,eAAe,YAC1B,WACA,eACD"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/react/charts/scatter/index.tsx"],"sourcesContent":["import type { JSX } from \"react\";\nimport { createChart } from \"../create-chart\";\nimport type { ScatterChartProps } from \"../types\";\n\n/**\n * Scatter Chart component for correlation and distribution visualization.\n *\n * **Important:** This component uses Apache ECharts architecture. Configure it via props, not by passing child components.\n *\n * **Best Practice:** Use the built-in data fetching by passing `queryKey` and `parameters` props instead of pre-fetching data with `useAnalyticsQuery`.\n *\n * Supports both query mode (queryKey + parameters) and data mode (static data).\n */\nexport const ScatterChart = createChart<ScatterChartProps>(\n \"scatter\",\n \"ScatterChart\",\n);\n\n// Type-only definition for documentation generation (not used at runtime)\n/**\n * Scatter Chart component for correlation and distribution visualization.\n *\n * **Important:** This component uses Apache ECharts architecture. Configure it via props, not by passing child components.\n *\n * **Best Practice:** Use the built-in data fetching by passing `queryKey` and `parameters` props instead of pre-fetching data with `useAnalyticsQuery`.\n *\n * Supports both query mode (queryKey + parameters) and data mode (static data).\n */\nexport function ScatterChartDoc(props: ScatterChartProps): JSX.Element {\n return ScatterChart(props);\n}\n"],"mappings":";;;;;;;;;;;;AAaA,MAAa,eAAe,YAC1B,WACA,eACD"}
@@ -1,6 +1,6 @@
1
1
  import { ChartData, DataFormat } from "./types.js";
2
2
  import { ReactNode } from "react";
3
- import * as react_jsx_runtime285 from "react/jsx-runtime";
3
+ import * as react_jsx_runtime10 from "react/jsx-runtime";
4
4
 
5
5
  //#region src/react/charts/wrapper.d.ts
6
6
  interface ChartWrapperQueryProps {
@@ -59,7 +59,7 @@ type ChartWrapperProps = CommonProps & (ChartWrapperQueryProps | ChartWrapperDat
59
59
  * </ChartWrapper>
60
60
  * ```
61
61
  */
62
- declare function ChartWrapper(props: ChartWrapperProps): react_jsx_runtime285.JSX.Element;
62
+ declare function ChartWrapper(props: ChartWrapperProps): react_jsx_runtime10.JSX.Element;
63
63
  //#endregion
64
64
  export { ChartWrapper, ChartWrapperProps };
65
65
  //# sourceMappingURL=wrapper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wrapper.d.ts","names":[],"sources":["../../../src/react/charts/wrapper.tsx"],"sourcesContent":[],"mappings":";;;;;UAaU,sBAAA;;;EAAA;EAAsB,UAAA,CAAA,EAIjB,MAJiB,CAAA,MAAA,EAAA,OAAA,CAAA;;QAMrB,CAAA,EAAA,UAAA;;aAEqB,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EAAN,CAAM,EAAA,GAAA,CAAA;EAAC;EAKvB,IAAA,CAAA,EAAA,KAAA;AAEO;UAFP,qBAAA,CAUW;;MAUY,EAlBzB,SAkByB;EAAS;EAG9B,QAAA,CAAA,EAAA,KAAA;EAAiB,UAAA,CAAA,EAAA,KAAA;QAAG,CAAA,EAAA,KAAA;aAC7B,CAAA,EAAA,KAAA;;UAdO,WAAA,CAcuC;EA0GjC;EAAY,MAAA,CAAA,EAAA,MAAA;;WAAyB,CAAA,EAAA,MAAA;EAAA;;;;;mBA9GlC,cAAc;;KAGrB,iBAAA,GAAoB,eAC7B,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;iBA0GZ,YAAA,QAAoB,oBAAiB,oBAAA,CAAA,GAAA,CAAA"}
1
+ {"version":3,"file":"wrapper.d.ts","names":[],"sources":["../../../src/react/charts/wrapper.tsx"],"sourcesContent":[],"mappings":";;;;;UAaU,sBAAA;;;EAAA;EAAsB,UAAA,CAAA,EAIjB,MAJiB,CAAA,MAAA,EAAA,OAAA,CAAA;;QAMrB,CAAA,EAAA,UAAA;;aAEqB,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EAAN,CAAM,EAAA,GAAA,CAAA;EAAC;EAKvB,IAAA,CAAA,EAAA,KAAA;AAEO;UAFP,qBAAA,CAUW;;MAUY,EAlBzB,SAkByB;EAAS;EAG9B,QAAA,CAAA,EAAA,KAAA;EAAiB,UAAA,CAAA,EAAA,KAAA;QAAG,CAAA,EAAA,KAAA;aAC7B,CAAA,EAAA,KAAA;;UAdO,WAAA,CAcuC;EA0GjC;EAAY,MAAA,CAAA,EAAA,MAAA;;WAAyB,CAAA,EAAA,MAAA;EAAA;;;;;mBA9GlC,cAAc;;KAGrB,iBAAA,GAAoB,eAC7B,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;iBA0GZ,YAAA,QAAoB,oBAAiB,mBAAA,CAAA,GAAA,CAAA"}
@@ -60,8 +60,8 @@ function useAnalyticsQuery(queryKey, parameters, options = {}) {
60
60
  });
61
61
  if (new Blob([serialized]).size > maxParametersSize) throw new Error("useAnalyticsQuery: Parameters size exceeds the maximum allowed size");
62
62
  return serialized;
63
- } catch (error$1) {
64
- console.error("useAnalyticsQuery: Failed to serialize parameters", error$1);
63
+ } catch (error) {
64
+ console.error("useAnalyticsQuery: Failed to serialize parameters", error);
65
65
  return null;
66
66
  }
67
67
  }, [
@@ -98,8 +98,8 @@ function useAnalyticsQuery(queryKey, parameters, options = {}) {
98
98
  setLoading(false);
99
99
  setData(table);
100
100
  return;
101
- } catch (error$1) {
102
- console.error("[useAnalyticsQuery] Failed to fetch Arrow data", error$1);
101
+ } catch (error) {
102
+ console.error("[useAnalyticsQuery] Failed to fetch Arrow data", error);
103
103
  setLoading(false);
104
104
  setError("Unable to load data, please try again");
105
105
  return;
@@ -111,21 +111,21 @@ function useAnalyticsQuery(queryKey, parameters, options = {}) {
111
111
  if (parsed.code) console.error(`[useAnalyticsQuery] Code: ${parsed.code}, Message: ${errorMsg}`);
112
112
  return;
113
113
  }
114
- } catch (error$1) {
115
- console.warn("[useAnalyticsQuery] Malformed message received", error$1);
114
+ } catch (error) {
115
+ console.warn("[useAnalyticsQuery] Malformed message received", error);
116
116
  }
117
117
  },
118
- onError: (error$1) => {
118
+ onError: (error) => {
119
119
  if (abortController.signal.aborted) return;
120
120
  setLoading(false);
121
121
  let userMessage = "Unable to load data, please try again";
122
- if (error$1 instanceof Error) {
123
- if (error$1.name === "AbortError") userMessage = "Request timed out, please try again";
124
- else if (error$1.message.includes("Failed to fetch")) userMessage = "Network error. Please check your connection.";
122
+ if (error instanceof Error) {
123
+ if (error.name === "AbortError") userMessage = "Request timed out, please try again";
124
+ else if (error.message.includes("Failed to fetch")) userMessage = "Network error. Please check your connection.";
125
125
  console.error("[useAnalyticsQuery] Error", {
126
126
  queryKey,
127
- error: error$1.message,
128
- stack: error$1.stack
127
+ error: error.message,
128
+ stack: error.stack
129
129
  });
130
130
  }
131
131
  setError(userMessage);
@@ -1 +1 @@
1
- {"version":3,"file":"use-analytics-query.js","names":["error"],"sources":["../../../src/react/hooks/use-analytics-query.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { ArrowClient, connectSSE } from \"@/js\";\nimport type {\n AnalyticsFormat,\n InferParams,\n InferResultByFormat,\n QueryKey,\n UseAnalyticsQueryOptions,\n UseAnalyticsQueryResult,\n} from \"./types\";\nimport { useQueryHMR } from \"./use-query-hmr\";\n\nfunction getDevMode() {\n const url = new URL(window.location.href);\n const searchParams = url.searchParams;\n const dev = searchParams.get(\"dev\");\n\n return dev ? `?dev=${dev}` : \"\";\n}\n\nfunction getArrowStreamUrl(id: string) {\n return `/api/analytics/arrow-result/${id}`;\n}\n\n/**\n * Subscribe to an analytics query over SSE and returns its latest result.\n * Integration hook between client and analytics plugin.\n *\n * The return type is automatically inferred based on the format:\n * - `format: \"JSON\"` (default): Returns typed array from QueryRegistry\n * - `format: \"ARROW\"`: Returns TypedArrowTable with row type preserved\n *\n * Note: User context execution is determined by query file naming:\n * - `queryKey.obo.sql`: Executes as user (OBO = on-behalf-of / user delegation)\n * - `queryKey.sql`: Executes as service principal\n *\n * @param queryKey - Analytics query identifier\n * @param parameters - Query parameters (type-safe based on QueryRegistry)\n * @param options - Analytics query settings including format\n * @returns Query result state with format-appropriate data type\n *\n * @example JSON format (default)\n * ```typescript\n * const { data } = useAnalyticsQuery(\"spend_data\", params);\n * // data: Array<{ group_key: string; cost_usd: number; ... }> | null\n * ```\n *\n * @example Arrow format\n * ```typescript\n * const { data } = useAnalyticsQuery(\"spend_data\", params, { format: \"ARROW\" });\n * // data: TypedArrowTable<{ group_key: string; cost_usd: number; ... }> | null\n * ```\n */\nexport function useAnalyticsQuery<\n T = unknown,\n K extends QueryKey = QueryKey,\n F extends AnalyticsFormat = \"JSON\",\n>(\n queryKey: K,\n parameters?: InferParams<K> | null,\n options: UseAnalyticsQueryOptions<F> = {} as UseAnalyticsQueryOptions<F>,\n): UseAnalyticsQueryResult<InferResultByFormat<T, K, F>> {\n const format = options?.format ?? \"JSON\";\n const maxParametersSize = options?.maxParametersSize ?? 100 * 1024;\n const autoStart = options?.autoStart ?? true;\n\n const devMode = getDevMode();\n const urlSuffix = `/api/analytics/query/${encodeURIComponent(queryKey)}${devMode}`;\n\n type ResultType = InferResultByFormat<T, K, F>;\n const [data, setData] = useState<ResultType | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const abortControllerRef = useRef<AbortController | null>(null);\n\n if (!queryKey || queryKey.trim().length === 0) {\n throw new Error(\n \"useAnalyticsQuery: 'queryKey' must be a non-empty string.\",\n );\n }\n\n const payload = useMemo(() => {\n try {\n const serialized = JSON.stringify({ parameters, format });\n const sizeInBytes = new Blob([serialized]).size;\n if (sizeInBytes > maxParametersSize) {\n throw new Error(\n \"useAnalyticsQuery: Parameters size exceeds the maximum allowed size\",\n );\n }\n\n return serialized;\n } catch (error) {\n console.error(\"useAnalyticsQuery: Failed to serialize parameters\", error);\n return null;\n }\n }, [parameters, format, maxParametersSize]);\n\n const start = useCallback(() => {\n if (payload === null) {\n setError(\"Failed to serialize query parameters\");\n return;\n }\n\n // Abort previous request if exists\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n\n setLoading(true);\n setError(null);\n setData(null);\n\n const abortController = new AbortController();\n abortControllerRef.current = abortController;\n\n connectSSE({\n url: urlSuffix,\n payload: payload,\n signal: abortController.signal,\n onMessage: async (message) => {\n try {\n const parsed = JSON.parse(message.data);\n\n // success - JSON format\n if (parsed.type === \"result\") {\n setLoading(false);\n setData(parsed.data as ResultType);\n return;\n }\n\n // success - Arrow format\n if (parsed.type === \"arrow\") {\n try {\n const arrowData = await ArrowClient.fetchArrow(\n getArrowStreamUrl(parsed.statement_id),\n );\n const table = await ArrowClient.processArrowBuffer(arrowData);\n setLoading(false);\n // Table is cast to TypedArrowTable with row type from QueryRegistry\n setData(table as ResultType);\n return;\n } catch (error) {\n console.error(\n \"[useAnalyticsQuery] Failed to fetch Arrow data\",\n error,\n );\n setLoading(false);\n setError(\"Unable to load data, please try again\");\n return;\n }\n }\n\n // error\n if (parsed.type === \"error\" || parsed.error || parsed.code) {\n const errorMsg =\n parsed.error || parsed.message || \"Unable to execute query\";\n\n setLoading(false);\n setError(errorMsg);\n\n if (parsed.code) {\n console.error(\n `[useAnalyticsQuery] Code: ${parsed.code}, Message: ${errorMsg}`,\n );\n }\n return;\n }\n } catch (error) {\n console.warn(\"[useAnalyticsQuery] Malformed message received\", error);\n }\n },\n onError: (error) => {\n if (abortController.signal.aborted) return;\n setLoading(false);\n\n let userMessage = \"Unable to load data, please try again\";\n\n if (error instanceof Error) {\n if (error.name === \"AbortError\") {\n userMessage = \"Request timed out, please try again\";\n } else if (error.message.includes(\"Failed to fetch\")) {\n userMessage = \"Network error. Please check your connection.\";\n }\n\n console.error(\"[useAnalyticsQuery] Error\", {\n queryKey,\n error: error.message,\n stack: error.stack,\n });\n }\n setError(userMessage);\n },\n });\n }, [queryKey, payload, urlSuffix]);\n\n useEffect(() => {\n if (autoStart) {\n start();\n }\n\n return () => {\n abortControllerRef.current?.abort();\n };\n }, [start, autoStart]);\n\n // Enable HMR for query updates in dev mode\n useQueryHMR(queryKey, start);\n\n return { data, loading, error };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-analytics-query.js","names":[],"sources":["../../../src/react/hooks/use-analytics-query.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { ArrowClient, connectSSE } from \"@/js\";\nimport type {\n AnalyticsFormat,\n InferParams,\n InferResultByFormat,\n QueryKey,\n UseAnalyticsQueryOptions,\n UseAnalyticsQueryResult,\n} from \"./types\";\nimport { useQueryHMR } from \"./use-query-hmr\";\n\nfunction getDevMode() {\n const url = new URL(window.location.href);\n const searchParams = url.searchParams;\n const dev = searchParams.get(\"dev\");\n\n return dev ? `?dev=${dev}` : \"\";\n}\n\nfunction getArrowStreamUrl(id: string) {\n return `/api/analytics/arrow-result/${id}`;\n}\n\n/**\n * Subscribe to an analytics query over SSE and returns its latest result.\n * Integration hook between client and analytics plugin.\n *\n * The return type is automatically inferred based on the format:\n * - `format: \"JSON\"` (default): Returns typed array from QueryRegistry\n * - `format: \"ARROW\"`: Returns TypedArrowTable with row type preserved\n *\n * Note: User context execution is determined by query file naming:\n * - `queryKey.obo.sql`: Executes as user (OBO = on-behalf-of / user delegation)\n * - `queryKey.sql`: Executes as service principal\n *\n * @param queryKey - Analytics query identifier\n * @param parameters - Query parameters (type-safe based on QueryRegistry)\n * @param options - Analytics query settings including format\n * @returns Query result state with format-appropriate data type\n *\n * @example JSON format (default)\n * ```typescript\n * const { data } = useAnalyticsQuery(\"spend_data\", params);\n * // data: Array<{ group_key: string; cost_usd: number; ... }> | null\n * ```\n *\n * @example Arrow format\n * ```typescript\n * const { data } = useAnalyticsQuery(\"spend_data\", params, { format: \"ARROW\" });\n * // data: TypedArrowTable<{ group_key: string; cost_usd: number; ... }> | null\n * ```\n */\nexport function useAnalyticsQuery<\n T = unknown,\n K extends QueryKey = QueryKey,\n F extends AnalyticsFormat = \"JSON\",\n>(\n queryKey: K,\n parameters?: InferParams<K> | null,\n options: UseAnalyticsQueryOptions<F> = {} as UseAnalyticsQueryOptions<F>,\n): UseAnalyticsQueryResult<InferResultByFormat<T, K, F>> {\n const format = options?.format ?? \"JSON\";\n const maxParametersSize = options?.maxParametersSize ?? 100 * 1024;\n const autoStart = options?.autoStart ?? true;\n\n const devMode = getDevMode();\n const urlSuffix = `/api/analytics/query/${encodeURIComponent(queryKey)}${devMode}`;\n\n type ResultType = InferResultByFormat<T, K, F>;\n const [data, setData] = useState<ResultType | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const abortControllerRef = useRef<AbortController | null>(null);\n\n if (!queryKey || queryKey.trim().length === 0) {\n throw new Error(\n \"useAnalyticsQuery: 'queryKey' must be a non-empty string.\",\n );\n }\n\n const payload = useMemo(() => {\n try {\n const serialized = JSON.stringify({ parameters, format });\n const sizeInBytes = new Blob([serialized]).size;\n if (sizeInBytes > maxParametersSize) {\n throw new Error(\n \"useAnalyticsQuery: Parameters size exceeds the maximum allowed size\",\n );\n }\n\n return serialized;\n } catch (error) {\n console.error(\"useAnalyticsQuery: Failed to serialize parameters\", error);\n return null;\n }\n }, [parameters, format, maxParametersSize]);\n\n const start = useCallback(() => {\n if (payload === null) {\n setError(\"Failed to serialize query parameters\");\n return;\n }\n\n // Abort previous request if exists\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n\n setLoading(true);\n setError(null);\n setData(null);\n\n const abortController = new AbortController();\n abortControllerRef.current = abortController;\n\n connectSSE({\n url: urlSuffix,\n payload: payload,\n signal: abortController.signal,\n onMessage: async (message) => {\n try {\n const parsed = JSON.parse(message.data);\n\n // success - JSON format\n if (parsed.type === \"result\") {\n setLoading(false);\n setData(parsed.data as ResultType);\n return;\n }\n\n // success - Arrow format\n if (parsed.type === \"arrow\") {\n try {\n const arrowData = await ArrowClient.fetchArrow(\n getArrowStreamUrl(parsed.statement_id),\n );\n const table = await ArrowClient.processArrowBuffer(arrowData);\n setLoading(false);\n // Table is cast to TypedArrowTable with row type from QueryRegistry\n setData(table as ResultType);\n return;\n } catch (error) {\n console.error(\n \"[useAnalyticsQuery] Failed to fetch Arrow data\",\n error,\n );\n setLoading(false);\n setError(\"Unable to load data, please try again\");\n return;\n }\n }\n\n // error\n if (parsed.type === \"error\" || parsed.error || parsed.code) {\n const errorMsg =\n parsed.error || parsed.message || \"Unable to execute query\";\n\n setLoading(false);\n setError(errorMsg);\n\n if (parsed.code) {\n console.error(\n `[useAnalyticsQuery] Code: ${parsed.code}, Message: ${errorMsg}`,\n );\n }\n return;\n }\n } catch (error) {\n console.warn(\"[useAnalyticsQuery] Malformed message received\", error);\n }\n },\n onError: (error) => {\n if (abortController.signal.aborted) return;\n setLoading(false);\n\n let userMessage = \"Unable to load data, please try again\";\n\n if (error instanceof Error) {\n if (error.name === \"AbortError\") {\n userMessage = \"Request timed out, please try again\";\n } else if (error.message.includes(\"Failed to fetch\")) {\n userMessage = \"Network error. Please check your connection.\";\n }\n\n console.error(\"[useAnalyticsQuery] Error\", {\n queryKey,\n error: error.message,\n stack: error.stack,\n });\n }\n setError(userMessage);\n },\n });\n }, [queryKey, payload, urlSuffix]);\n\n useEffect(() => {\n if (autoStart) {\n start();\n }\n\n return () => {\n abortControllerRef.current?.abort();\n };\n }, [start, autoStart]);\n\n // Enable HMR for query updates in dev mode\n useQueryHMR(queryKey, start);\n\n return { data, loading, error };\n}\n"],"mappings":"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"}
@@ -1,10 +1,11 @@
1
1
  import { DataTableProps } from "./types.js";
2
- import * as react_jsx_runtime0 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime11 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/react/table/data-table.d.ts
5
5
 
6
6
  /**
7
7
  * Production-ready data table with automatic data fetching and state management
8
+ *
8
9
  * Features:
9
10
  * - Automatic column generation from data structure
10
11
  * - Integrated with useAnalyticsQuery for data fetching
@@ -12,9 +13,11 @@ import * as react_jsx_runtime0 from "react/jsx-runtime";
12
13
  * - Dynamic filtering, sorting and pagination
13
14
  * - Column visibility controls
14
15
  * - Responsive design
16
+ * - Supports opinionated mode (auto columns) and full-control mode (`children(table)`)
17
+ *
15
18
  * @param props - Props for the DataTable component
16
19
  * @param props.queryKey - The query key to fetch the data
17
- * @param props.parameters - The parameters to pass to the query
20
+ * @param props.parameters - The parameters to pass to the query. Required - use `{}` if none.
18
21
  * @param props.filterColumn - The column to filter by
19
22
  * @param props.filterPlaceholder - The placeholder for the filter input
20
23
  * @param props.children - Optional children for full control mode
@@ -41,7 +44,7 @@ import * as react_jsx_runtime0 from "react/jsx-runtime";
41
44
  * )}
42
45
  * </DataTable>
43
46
  */
44
- declare function DataTable(props: DataTableProps): react_jsx_runtime0.JSX.Element;
47
+ declare function DataTable(props: DataTableProps): react_jsx_runtime11.JSX.Element;
45
48
  //#endregion
46
49
  export { DataTable };
47
50
  //# sourceMappingURL=data-table.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"data-table.d.ts","names":[],"sources":["../../../src/react/table/data-table.tsx"],"sourcesContent":[],"mappings":";;;;;;;;AAmEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAgB,SAAA,QAAiB,iBAAc,kBAAA,CAAA,GAAA,CAAA"}
1
+ {"version":3,"file":"data-table.d.ts","names":[],"sources":["../../../src/react/table/data-table.tsx"],"sourcesContent":[],"mappings":";;;;;;;;AAsEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAgB,SAAA,QAAiB,iBAAc,mBAAA,CAAA,GAAA,CAAA"}
@@ -12,6 +12,7 @@ import { ChevronDown } from "lucide-react";
12
12
  //#region src/react/table/data-table.tsx
13
13
  /**
14
14
  * Production-ready data table with automatic data fetching and state management
15
+ *
15
16
  * Features:
16
17
  * - Automatic column generation from data structure
17
18
  * - Integrated with useAnalyticsQuery for data fetching
@@ -19,9 +20,11 @@ import { ChevronDown } from "lucide-react";
19
20
  * - Dynamic filtering, sorting and pagination
20
21
  * - Column visibility controls
21
22
  * - Responsive design
23
+ * - Supports opinionated mode (auto columns) and full-control mode (`children(table)`)
24
+ *
22
25
  * @param props - Props for the DataTable component
23
26
  * @param props.queryKey - The query key to fetch the data
24
- * @param props.parameters - The parameters to pass to the query
27
+ * @param props.parameters - The parameters to pass to the query. Required - use `{}` if none.
25
28
  * @param props.filterColumn - The column to filter by
26
29
  * @param props.filterPlaceholder - The placeholder for the filter input
27
30
  * @param props.children - Optional children for full control mode