@sqlrooms/mosaic 0.29.0-rc.8 → 0.29.0-rc.9

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 (363) hide show
  1. package/README.md +84 -74
  2. package/dist/ai/agentIntent.d.ts +5 -0
  3. package/dist/ai/agentIntent.d.ts.map +1 -0
  4. package/dist/ai/agentIntent.js +8 -0
  5. package/dist/ai/agentIntent.js.map +1 -0
  6. package/dist/ai/block-document/constants.d.ts +9 -0
  7. package/dist/ai/block-document/constants.d.ts.map +1 -0
  8. package/dist/ai/block-document/constants.js +9 -0
  9. package/dist/ai/block-document/constants.js.map +1 -0
  10. package/dist/ai/block-document/createAddMosaicDashboardBlockTool.d.ts +48 -0
  11. package/dist/ai/block-document/createAddMosaicDashboardBlockTool.d.ts.map +1 -0
  12. package/dist/ai/block-document/createAddMosaicDashboardBlockTool.js +59 -0
  13. package/dist/ai/block-document/createAddMosaicDashboardBlockTool.js.map +1 -0
  14. package/dist/ai/block-document/createBlockDocumentChartTools.d.ts +19 -0
  15. package/dist/ai/block-document/createBlockDocumentChartTools.d.ts.map +1 -0
  16. package/dist/ai/block-document/createBlockDocumentChartTools.js +37 -0
  17. package/dist/ai/block-document/createBlockDocumentChartTools.js.map +1 -0
  18. package/dist/ai/block-document/createBlockDocumentDataTableExplorerTool.d.ts +32 -0
  19. package/dist/ai/block-document/createBlockDocumentDataTableExplorerTool.d.ts.map +1 -0
  20. package/dist/ai/block-document/createBlockDocumentDataTableExplorerTool.js +37 -0
  21. package/dist/ai/block-document/createBlockDocumentDataTableExplorerTool.js.map +1 -0
  22. package/dist/ai/constants.d.ts +3 -0
  23. package/dist/ai/constants.d.ts.map +1 -0
  24. package/dist/ai/constants.js +3 -0
  25. package/dist/ai/constants.js.map +1 -0
  26. package/dist/ai/createDataTableExplorerTool.d.ts +69 -0
  27. package/dist/ai/createDataTableExplorerTool.d.ts.map +1 -0
  28. package/dist/ai/createDataTableExplorerTool.js +68 -0
  29. package/dist/ai/createDataTableExplorerTool.js.map +1 -0
  30. package/dist/ai/dashboard/constants.d.ts +6 -0
  31. package/dist/ai/dashboard/constants.d.ts.map +1 -0
  32. package/dist/ai/dashboard/constants.js +6 -0
  33. package/dist/ai/dashboard/constants.js.map +1 -0
  34. package/dist/ai/dashboard/createDashboardAgentTool.d.ts +17 -0
  35. package/dist/ai/dashboard/createDashboardAgentTool.d.ts.map +1 -0
  36. package/dist/ai/dashboard/createDashboardAgentTool.js +205 -0
  37. package/dist/ai/dashboard/createDashboardAgentTool.js.map +1 -0
  38. package/dist/ai/dashboard/createDashboardAiAdapter.d.ts +14 -0
  39. package/dist/ai/dashboard/createDashboardAiAdapter.d.ts.map +1 -0
  40. package/dist/ai/dashboard/createDashboardAiAdapter.js +75 -0
  41. package/dist/ai/dashboard/createDashboardAiAdapter.js.map +1 -0
  42. package/dist/ai/dashboard/createDashboardAiTools.d.ts +26 -0
  43. package/dist/ai/dashboard/createDashboardAiTools.d.ts.map +1 -0
  44. package/dist/ai/dashboard/createDashboardAiTools.js +40 -0
  45. package/dist/ai/dashboard/createDashboardAiTools.js.map +1 -0
  46. package/dist/ai/dashboard/createDashboardChartTools.d.ts +27 -0
  47. package/dist/ai/dashboard/createDashboardChartTools.d.ts.map +1 -0
  48. package/dist/ai/dashboard/createDashboardChartTools.js +55 -0
  49. package/dist/ai/dashboard/createDashboardChartTools.js.map +1 -0
  50. package/dist/ai/dashboard/createDashboardDataTableExplorerTool.d.ts +23 -0
  51. package/dist/ai/dashboard/createDashboardDataTableExplorerTool.d.ts.map +1 -0
  52. package/dist/ai/dashboard/createDashboardDataTableExplorerTool.js +29 -0
  53. package/dist/ai/dashboard/createDashboardDataTableExplorerTool.js.map +1 -0
  54. package/dist/ai/dashboard/createListDashboardPanelsTool.d.ts +28 -0
  55. package/dist/ai/dashboard/createListDashboardPanelsTool.d.ts.map +1 -0
  56. package/dist/ai/dashboard/createListDashboardPanelsTool.js +54 -0
  57. package/dist/ai/dashboard/createListDashboardPanelsTool.js.map +1 -0
  58. package/dist/ai/dashboard/dashboard-types.d.ts +59 -0
  59. package/dist/ai/dashboard/dashboard-types.d.ts.map +1 -0
  60. package/dist/ai/dashboard/dashboard-types.js +2 -0
  61. package/dist/ai/dashboard/dashboard-types.js.map +1 -0
  62. package/dist/ai/database-types.d.ts +12 -0
  63. package/dist/ai/database-types.d.ts.map +1 -0
  64. package/dist/ai/database-types.js +2 -0
  65. package/dist/ai/database-types.js.map +1 -0
  66. package/dist/ai/errors.d.ts +8 -0
  67. package/dist/ai/errors.d.ts.map +1 -0
  68. package/dist/ai/errors.js +11 -0
  69. package/dist/ai/errors.js.map +1 -0
  70. package/dist/ai/tool-helpers.d.ts +28 -29
  71. package/dist/ai/tool-helpers.d.ts.map +1 -1
  72. package/dist/ai/tool-helpers.js +38 -76
  73. package/dist/ai/tool-helpers.js.map +1 -1
  74. package/dist/ai/tool-schemas.d.ts +9 -4
  75. package/dist/ai/tool-schemas.d.ts.map +1 -1
  76. package/dist/ai/tool-schemas.js +12 -12
  77. package/dist/ai/tool-schemas.js.map +1 -1
  78. package/dist/ai/tool-types.d.ts +19 -1
  79. package/dist/ai/tool-types.d.ts.map +1 -1
  80. package/dist/ai/tool-types.js.map +1 -1
  81. package/dist/ai/types.d.ts +64 -0
  82. package/dist/ai/types.d.ts.map +1 -0
  83. package/dist/ai/types.js +2 -0
  84. package/dist/ai/types.js.map +1 -0
  85. package/dist/ai.d.ts +16 -2
  86. package/dist/ai.d.ts.map +1 -1
  87. package/dist/ai.js +14 -5
  88. package/dist/ai.js.map +1 -1
  89. package/dist/charts/MosaicChart.js +1 -1
  90. package/dist/charts/MosaicChart.js.map +1 -1
  91. package/dist/charts/MosaicChartView.d.ts.map +1 -1
  92. package/dist/charts/MosaicChartView.js +1 -2
  93. package/dist/charts/MosaicChartView.js.map +1 -1
  94. package/dist/charts/chart-settings/MosaicChartSpecViewerPanel.d.ts.map +1 -1
  95. package/dist/charts/chart-settings/MosaicChartSpecViewerPanel.js +2 -1
  96. package/dist/charts/chart-settings/MosaicChartSpecViewerPanel.js.map +1 -1
  97. package/dist/charts/chart-settings/MosaicChartTypeSelector.d.ts.map +1 -1
  98. package/dist/charts/chart-settings/MosaicChartTypeSelector.js +4 -11
  99. package/dist/charts/chart-settings/MosaicChartTypeSelector.js.map +1 -1
  100. package/dist/charts/chart-types/base-types.d.ts +27 -23
  101. package/dist/charts/chart-types/base-types.d.ts.map +1 -1
  102. package/dist/charts/chart-types/base-types.js +3 -1
  103. package/dist/charts/chart-types/base-types.js.map +1 -1
  104. package/dist/charts/chart-types/box-plot/definition.d.ts.map +1 -1
  105. package/dist/charts/chart-types/box-plot/definition.js +1 -0
  106. package/dist/charts/chart-types/box-plot/definition.js.map +1 -1
  107. package/dist/charts/chart-types/box-plot/renderer/BoxPlotClient.d.ts +37 -3
  108. package/dist/charts/chart-types/box-plot/renderer/BoxPlotClient.d.ts.map +1 -1
  109. package/dist/charts/chart-types/box-plot/renderer/BoxPlotClient.js +26 -6
  110. package/dist/charts/chart-types/box-plot/renderer/BoxPlotClient.js.map +1 -1
  111. package/dist/charts/chart-types/box-plot/renderer/BoxPlotPanelRenderer.js +2 -2
  112. package/dist/charts/chart-types/box-plot/renderer/BoxPlotPanelRenderer.js.map +1 -1
  113. package/dist/charts/chart-types/box-plot/renderer/useBoxPlotClient.d.ts +12 -1
  114. package/dist/charts/chart-types/box-plot/renderer/useBoxPlotClient.d.ts.map +1 -1
  115. package/dist/charts/chart-types/box-plot/renderer/useBoxPlotClient.js +13 -3
  116. package/dist/charts/chart-types/box-plot/renderer/useBoxPlotClient.js.map +1 -1
  117. package/dist/charts/chart-types/box-plot/tool.d.ts +20 -24
  118. package/dist/charts/chart-types/box-plot/tool.d.ts.map +1 -1
  119. package/dist/charts/chart-types/box-plot/tool.js +25 -33
  120. package/dist/charts/chart-types/box-plot/tool.js.map +1 -1
  121. package/dist/charts/chart-types/box-plot/validation.d.ts +9 -0
  122. package/dist/charts/chart-types/box-plot/validation.d.ts.map +1 -0
  123. package/dist/charts/chart-types/box-plot/validation.js +32 -0
  124. package/dist/charts/chart-types/box-plot/validation.js.map +1 -0
  125. package/dist/charts/chart-types/column-types.d.ts +8 -0
  126. package/dist/charts/chart-types/column-types.d.ts.map +1 -0
  127. package/dist/charts/chart-types/column-types.js +2 -0
  128. package/dist/charts/chart-types/column-types.js.map +1 -0
  129. package/dist/charts/chart-types/count-plot/definition.d.ts.map +1 -1
  130. package/dist/charts/chart-types/count-plot/definition.js +1 -0
  131. package/dist/charts/chart-types/count-plot/definition.js.map +1 -1
  132. package/dist/charts/chart-types/count-plot/spec.d.ts.map +1 -1
  133. package/dist/charts/chart-types/count-plot/spec.js +1 -19
  134. package/dist/charts/chart-types/count-plot/spec.js.map +1 -1
  135. package/dist/charts/chart-types/count-plot/tool.d.ts +19 -24
  136. package/dist/charts/chart-types/count-plot/tool.d.ts.map +1 -1
  137. package/dist/charts/chart-types/count-plot/tool.js +25 -32
  138. package/dist/charts/chart-types/count-plot/tool.js.map +1 -1
  139. package/dist/charts/chart-types/count-plot/validation.d.ts +8 -0
  140. package/dist/charts/chart-types/count-plot/validation.d.ts.map +1 -0
  141. package/dist/charts/chart-types/count-plot/validation.js +20 -0
  142. package/dist/charts/chart-types/count-plot/validation.js.map +1 -0
  143. package/dist/charts/chart-types/createChartInstructions.d.ts +3 -0
  144. package/dist/charts/chart-types/createChartInstructions.d.ts.map +1 -0
  145. package/dist/charts/chart-types/createChartInstructions.js +12 -0
  146. package/dist/charts/chart-types/createChartInstructions.js.map +1 -0
  147. package/dist/charts/chart-types/createChartTools.d.ts +15 -9
  148. package/dist/charts/chart-types/createChartTools.d.ts.map +1 -1
  149. package/dist/charts/chart-types/createChartTools.js +16 -10
  150. package/dist/charts/chart-types/createChartTools.js.map +1 -1
  151. package/dist/charts/chart-types/custom-spec/definition.d.ts.map +1 -1
  152. package/dist/charts/chart-types/custom-spec/definition.js +1 -0
  153. package/dist/charts/chart-types/custom-spec/definition.js.map +1 -1
  154. package/dist/charts/chart-types/errors.d.ts +10 -0
  155. package/dist/charts/chart-types/errors.d.ts.map +1 -1
  156. package/dist/charts/chart-types/errors.js +18 -0
  157. package/dist/charts/chart-types/errors.js.map +1 -1
  158. package/dist/charts/chart-types/heatmap/definition.d.ts.map +1 -1
  159. package/dist/charts/chart-types/heatmap/definition.js +1 -0
  160. package/dist/charts/chart-types/heatmap/definition.js.map +1 -1
  161. package/dist/charts/chart-types/heatmap/spec.d.ts.map +1 -1
  162. package/dist/charts/chart-types/heatmap/spec.js +1 -33
  163. package/dist/charts/chart-types/heatmap/spec.js.map +1 -1
  164. package/dist/charts/chart-types/heatmap/tool.d.ts +20 -24
  165. package/dist/charts/chart-types/heatmap/tool.d.ts.map +1 -1
  166. package/dist/charts/chart-types/heatmap/tool.js +26 -36
  167. package/dist/charts/chart-types/heatmap/tool.js.map +1 -1
  168. package/dist/charts/chart-types/heatmap/validation.d.ts +9 -0
  169. package/dist/charts/chart-types/heatmap/validation.d.ts.map +1 -0
  170. package/dist/charts/chart-types/heatmap/validation.js +34 -0
  171. package/dist/charts/chart-types/heatmap/validation.js.map +1 -0
  172. package/dist/charts/chart-types/histogram/definition.d.ts.map +1 -1
  173. package/dist/charts/chart-types/histogram/definition.js +1 -0
  174. package/dist/charts/chart-types/histogram/definition.js.map +1 -1
  175. package/dist/charts/chart-types/histogram/spec.d.ts.map +1 -1
  176. package/dist/charts/chart-types/histogram/spec.js +1 -21
  177. package/dist/charts/chart-types/histogram/spec.js.map +1 -1
  178. package/dist/charts/chart-types/histogram/tool.d.ts +37 -24
  179. package/dist/charts/chart-types/histogram/tool.d.ts.map +1 -1
  180. package/dist/charts/chart-types/histogram/tool.js +38 -32
  181. package/dist/charts/chart-types/histogram/tool.js.map +1 -1
  182. package/dist/charts/chart-types/histogram/validation.d.ts +9 -0
  183. package/dist/charts/chart-types/histogram/validation.d.ts.map +1 -0
  184. package/dist/charts/chart-types/histogram/validation.js +22 -0
  185. package/dist/charts/chart-types/histogram/validation.js.map +1 -0
  186. package/dist/charts/chart-types/index.d.ts +1 -7
  187. package/dist/charts/chart-types/index.d.ts.map +1 -1
  188. package/dist/charts/chart-types/index.js +2 -8
  189. package/dist/charts/chart-types/index.js.map +1 -1
  190. package/dist/charts/chart-types/line-chart/definition.d.ts.map +1 -1
  191. package/dist/charts/chart-types/line-chart/definition.js +1 -0
  192. package/dist/charts/chart-types/line-chart/definition.js.map +1 -1
  193. package/dist/charts/chart-types/line-chart/spec.d.ts.map +1 -1
  194. package/dist/charts/chart-types/line-chart/spec.js +5 -46
  195. package/dist/charts/chart-types/line-chart/spec.js.map +1 -1
  196. package/dist/charts/chart-types/line-chart/tool.d.ts +26 -24
  197. package/dist/charts/chart-types/line-chart/tool.d.ts.map +1 -1
  198. package/dist/charts/chart-types/line-chart/tool.js +26 -38
  199. package/dist/charts/chart-types/line-chart/tool.js.map +1 -1
  200. package/dist/charts/chart-types/line-chart/validation.d.ts +16 -0
  201. package/dist/charts/chart-types/line-chart/validation.d.ts.map +1 -0
  202. package/dist/charts/chart-types/line-chart/validation.js +43 -0
  203. package/dist/charts/chart-types/line-chart/validation.js.map +1 -0
  204. package/dist/charts/chart-types/resolveChartTypes.d.ts +3 -0
  205. package/dist/charts/chart-types/resolveChartTypes.d.ts.map +1 -0
  206. package/dist/charts/chart-types/resolveChartTypes.js +8 -0
  207. package/dist/charts/chart-types/resolveChartTypes.js.map +1 -0
  208. package/dist/charts/chart-types/scatter-plot/definition.d.ts.map +1 -1
  209. package/dist/charts/chart-types/scatter-plot/definition.js +1 -0
  210. package/dist/charts/chart-types/scatter-plot/definition.js.map +1 -1
  211. package/dist/charts/chart-types/scatter-plot/spec.d.ts.map +1 -1
  212. package/dist/charts/chart-types/scatter-plot/spec.js +1 -45
  213. package/dist/charts/chart-types/scatter-plot/spec.js.map +1 -1
  214. package/dist/charts/chart-types/scatter-plot/tool.d.ts +21 -24
  215. package/dist/charts/chart-types/scatter-plot/tool.d.ts.map +1 -1
  216. package/dist/charts/chart-types/scatter-plot/tool.js +28 -41
  217. package/dist/charts/chart-types/scatter-plot/tool.js.map +1 -1
  218. package/dist/charts/chart-types/scatter-plot/validation.d.ts +13 -0
  219. package/dist/charts/chart-types/scatter-plot/validation.d.ts.map +1 -0
  220. package/dist/charts/chart-types/scatter-plot/validation.js +52 -0
  221. package/dist/charts/chart-types/scatter-plot/validation.js.map +1 -0
  222. package/dist/charts/chart-types/tool-types.d.ts +43 -0
  223. package/dist/charts/chart-types/tool-types.d.ts.map +1 -0
  224. package/dist/charts/chart-types/tool-types.js +2 -0
  225. package/dist/charts/chart-types/tool-types.js.map +1 -0
  226. package/dist/charts/chart-types/utils.d.ts +3 -0
  227. package/dist/charts/chart-types/utils.d.ts.map +1 -0
  228. package/dist/charts/chart-types/utils.js +4 -0
  229. package/dist/charts/chart-types/utils.js.map +1 -0
  230. package/dist/charts/dashboard/MosaicDashboardChartRenderer.d.ts.map +1 -1
  231. package/dist/charts/dashboard/MosaicDashboardChartRenderer.js +5 -3
  232. package/dist/charts/dashboard/MosaicDashboardChartRenderer.js.map +1 -1
  233. package/dist/charts/useChartDataPolicy.js +2 -2
  234. package/dist/charts/useChartDataPolicy.js.map +1 -1
  235. package/dist/components/AggregationSelector.d.ts.map +1 -1
  236. package/dist/components/AggregationSelector.js +1 -1
  237. package/dist/components/AggregationSelector.js.map +1 -1
  238. package/dist/components/ColorSelector.d.ts.map +1 -1
  239. package/dist/components/ColorSelector.js +1 -2
  240. package/dist/components/ColorSelector.js.map +1 -1
  241. package/dist/components/FieldSelectorInput.d.ts.map +1 -1
  242. package/dist/components/FieldSelectorInput.js +3 -3
  243. package/dist/components/FieldSelectorInput.js.map +1 -1
  244. package/dist/components/TemporalGranularitySelector.d.ts.map +1 -1
  245. package/dist/components/TemporalGranularitySelector.js +1 -1
  246. package/dist/components/TemporalGranularitySelector.js.map +1 -1
  247. package/dist/dashboard/MosaicDashboardCommands.d.ts +19 -0
  248. package/dist/dashboard/MosaicDashboardCommands.d.ts.map +1 -0
  249. package/dist/dashboard/MosaicDashboardCommands.js +226 -0
  250. package/dist/dashboard/MosaicDashboardCommands.js.map +1 -0
  251. package/dist/dashboard/dashboard-types.d.ts.map +1 -1
  252. package/dist/dashboard/dashboard-types.js.map +1 -1
  253. package/dist/dashboard/panel/MosaicDashboardPanel.d.ts.map +1 -1
  254. package/dist/dashboard/panel/MosaicDashboardPanel.js +1 -1
  255. package/dist/dashboard/panel/MosaicDashboardPanel.js.map +1 -1
  256. package/dist/dashboard/panel/MosaicDashboardPanelLayout.d.ts.map +1 -1
  257. package/dist/dashboard/panel/MosaicDashboardPanelLayout.js +3 -3
  258. package/dist/dashboard/panel/MosaicDashboardPanelLayout.js.map +1 -1
  259. package/dist/dashboard/panel/MosaicDashboardPanels.d.ts.map +1 -1
  260. package/dist/dashboard/panel/MosaicDashboardPanels.js +4 -2
  261. package/dist/dashboard/panel/MosaicDashboardPanels.js.map +1 -1
  262. package/dist/dashboard/toolbar/MosaicDashboardDataTableSelector.d.ts.map +1 -1
  263. package/dist/dashboard/toolbar/MosaicDashboardDataTableSelector.js +4 -4
  264. package/dist/dashboard/toolbar/MosaicDashboardDataTableSelector.js.map +1 -1
  265. package/dist/dashboard/toolbar/MosaicDashboardToolbar.d.ts.map +1 -1
  266. package/dist/dashboard/toolbar/MosaicDashboardToolbar.js +5 -3
  267. package/dist/dashboard/toolbar/MosaicDashboardToolbar.js.map +1 -1
  268. package/dist/dashboard/useSelectedOrFirstTable.d.ts +1 -1
  269. package/dist/dashboard/useSelectedOrFirstTable.d.ts.map +1 -1
  270. package/dist/dashboard/useSelectedOrFirstTable.js +10 -8
  271. package/dist/dashboard/useSelectedOrFirstTable.js.map +1 -1
  272. package/dist/data-table-explorer/DataTableExplorerCategoryClient.d.ts +3 -2
  273. package/dist/data-table-explorer/DataTableExplorerCategoryClient.d.ts.map +1 -1
  274. package/dist/data-table-explorer/DataTableExplorerCategoryClient.js +3 -3
  275. package/dist/data-table-explorer/DataTableExplorerCategoryClient.js.map +1 -1
  276. package/dist/data-table-explorer/DataTableExplorerCountClient.d.ts +3 -1
  277. package/dist/data-table-explorer/DataTableExplorerCountClient.d.ts.map +1 -1
  278. package/dist/data-table-explorer/DataTableExplorerCountClient.js +3 -3
  279. package/dist/data-table-explorer/DataTableExplorerCountClient.js.map +1 -1
  280. package/dist/data-table-explorer/DataTableExplorerHistogramClient.d.ts +3 -2
  281. package/dist/data-table-explorer/DataTableExplorerHistogramClient.d.ts.map +1 -1
  282. package/dist/data-table-explorer/DataTableExplorerHistogramClient.js +4 -4
  283. package/dist/data-table-explorer/DataTableExplorerHistogramClient.js.map +1 -1
  284. package/dist/data-table-explorer/DataTableExplorerPageClient.d.ts +3 -1
  285. package/dist/data-table-explorer/DataTableExplorerPageClient.d.ts.map +1 -1
  286. package/dist/data-table-explorer/DataTableExplorerPageClient.js +3 -1
  287. package/dist/data-table-explorer/DataTableExplorerPageClient.js.map +1 -1
  288. package/dist/data-table-explorer/DataTableExplorerUnsupportedSummaryClient.d.ts +3 -2
  289. package/dist/data-table-explorer/DataTableExplorerUnsupportedSummaryClient.d.ts.map +1 -1
  290. package/dist/data-table-explorer/DataTableExplorerUnsupportedSummaryClient.js +3 -3
  291. package/dist/data-table-explorer/DataTableExplorerUnsupportedSummaryClient.js.map +1 -1
  292. package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerPanelRenderer.d.ts.map +1 -1
  293. package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerPanelRenderer.js +7 -4
  294. package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerPanelRenderer.js.map +1 -1
  295. package/dist/data-table-explorer/dataTableExplorerController.d.ts +58 -2
  296. package/dist/data-table-explorer/dataTableExplorerController.d.ts.map +1 -1
  297. package/dist/data-table-explorer/dataTableExplorerController.js +68 -8
  298. package/dist/data-table-explorer/dataTableExplorerController.js.map +1 -1
  299. package/dist/data-table-explorer/hooks/useDataTableExplorerLifecycles.d.ts +23 -1
  300. package/dist/data-table-explorer/hooks/useDataTableExplorerLifecycles.d.ts.map +1 -1
  301. package/dist/data-table-explorer/hooks/useDataTableExplorerLifecycles.js +46 -13
  302. package/dist/data-table-explorer/hooks/useDataTableExplorerLifecycles.js.map +1 -1
  303. package/dist/data-table-explorer/hooks/useDataTableExplorerQueryState.d.ts +17 -3
  304. package/dist/data-table-explorer/hooks/useDataTableExplorerQueryState.d.ts.map +1 -1
  305. package/dist/data-table-explorer/hooks/useDataTableExplorerQueryState.js +9 -6
  306. package/dist/data-table-explorer/hooks/useDataTableExplorerQueryState.js.map +1 -1
  307. package/dist/data-table-explorer/types.d.ts +10 -0
  308. package/dist/data-table-explorer/types.d.ts.map +1 -1
  309. package/dist/data-table-explorer/types.js.map +1 -1
  310. package/dist/data-table-explorer/useDataTableExplorer.d.ts.map +1 -1
  311. package/dist/data-table-explorer/useDataTableExplorer.js +10 -6
  312. package/dist/data-table-explorer/useDataTableExplorer.js.map +1 -1
  313. package/dist/data-table-explorer/utils.d.ts +64 -6
  314. package/dist/data-table-explorer/utils.d.ts.map +1 -1
  315. package/dist/data-table-explorer/utils.js +58 -0
  316. package/dist/data-table-explorer/utils.js.map +1 -1
  317. package/dist/data-table-explorer/worksheet/DataTableBlockRenderer.d.ts.map +1 -1
  318. package/dist/data-table-explorer/worksheet/DataTableBlockRenderer.js +2 -2
  319. package/dist/data-table-explorer/worksheet/DataTableBlockRenderer.js.map +1 -1
  320. package/dist/index.d.ts +49 -29
  321. package/dist/index.d.ts.map +1 -1
  322. package/dist/index.js +81 -25
  323. package/dist/index.js.map +1 -1
  324. package/dist/mosaicTableReference.d.ts +59 -0
  325. package/dist/mosaicTableReference.d.ts.map +1 -0
  326. package/dist/mosaicTableReference.js +68 -0
  327. package/dist/mosaicTableReference.js.map +1 -0
  328. package/dist/useVgPlotChartRender.d.ts.map +1 -1
  329. package/dist/useVgPlotChartRender.js +26 -1
  330. package/dist/useVgPlotChartRender.js.map +1 -1
  331. package/dist/utils/table-lookup.d.ts +7 -0
  332. package/dist/utils/table-lookup.d.ts.map +1 -0
  333. package/dist/utils/table-lookup.js +10 -0
  334. package/dist/utils/table-lookup.js.map +1 -0
  335. package/package.json +14 -14
  336. package/dist/ai/ai.d.ts +0 -108
  337. package/dist/ai/ai.d.ts.map +0 -1
  338. package/dist/ai/ai.js +0 -461
  339. package/dist/ai/ai.js.map +0 -1
  340. package/dist/ai/data-table-explorer-tool.d.ts +0 -40
  341. package/dist/ai/data-table-explorer-tool.d.ts.map +0 -1
  342. package/dist/ai/data-table-explorer-tool.js +0 -75
  343. package/dist/ai/data-table-explorer-tool.js.map +0 -1
  344. package/dist/ai/list-panels-tool.d.ts +0 -35
  345. package/dist/ai/list-panels-tool.d.ts.map +0 -1
  346. package/dist/ai/list-panels-tool.js +0 -66
  347. package/dist/ai/list-panels-tool.js.map +0 -1
  348. package/dist/ai/remove-panel-tool.d.ts +0 -31
  349. package/dist/ai/remove-panel-tool.d.ts.map +0 -1
  350. package/dist/ai/remove-panel-tool.js +0 -55
  351. package/dist/ai/remove-panel-tool.js.map +0 -1
  352. package/dist/ai/tool-validation.d.ts +0 -3
  353. package/dist/ai/tool-validation.d.ts.map +0 -1
  354. package/dist/ai/tool-validation.js +0 -11
  355. package/dist/ai/tool-validation.js.map +0 -1
  356. package/dist/components/Combobox.d.ts +0 -45
  357. package/dist/components/Combobox.d.ts.map +0 -1
  358. package/dist/components/Combobox.js +0 -58
  359. package/dist/components/Combobox.js.map +0 -1
  360. package/dist/components/useCombobox.d.ts +0 -23
  361. package/dist/components/useCombobox.d.ts.map +0 -1
  362. package/dist/components/useCombobox.js +0 -26
  363. package/dist/components/useCombobox.js.map +0 -1
@@ -1,9 +1,8 @@
1
1
  import { z } from 'zod';
2
- import type { DashboardToolDeps } from '../base-types';
3
- export declare const LineChartToolParameters: z.ZodObject<{
4
- artifactId: z.ZodOptional<z.ZodString>;
5
- tableName: z.ZodOptional<z.ZodString>;
6
- createArtifactIfMissing: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
2
+ import { ChartToolParams, ChartToolOutput } from '../tool-types';
3
+ export declare const LineChartToolInput: z.ZodObject<{
4
+ tableName: z.ZodString;
5
+ title: z.ZodOptional<z.ZodString>;
7
6
  panelId: z.ZodOptional<z.ZodString>;
8
7
  reasoning: z.ZodString;
9
8
  settings: z.ZodObject<{
@@ -31,9 +30,9 @@ export declare const LineChartToolParameters: z.ZodObject<{
31
30
  showLegend: z.ZodNonOptional<z.ZodDefault<z.ZodOptional<z.ZodBoolean>>>;
32
31
  }, z.core.$strip>;
33
32
  }, z.core.$strip>;
34
- export type LineChartToolParams = z.infer<typeof LineChartToolParameters>;
35
- export declare function createLineChartAiTool(deps: DashboardToolDeps): import("ai").Tool<{
36
- createArtifactIfMissing: boolean;
33
+ export type LineChartToolInput = z.infer<typeof LineChartToolInput>;
34
+ export declare function createLineChartAiTool({ databaseAdapter, addChart, maxDataPoints, }: ChartToolParams): import("ai").Tool<{
35
+ tableName: string;
37
36
  reasoning: string;
38
37
  settings: {
39
38
  x: string;
@@ -45,22 +44,25 @@ export declare function createLineChartAiTool(deps: DashboardToolDeps): import("
45
44
  }[];
46
45
  showLegend: boolean;
47
46
  };
48
- artifactId?: string | undefined;
49
- tableName?: string | undefined;
47
+ title?: string | undefined;
50
48
  panelId?: string | undefined;
51
- }, {
52
- llmResult: {
53
- success: boolean;
54
- details: string;
55
- data: import("..").PanelResult;
56
- errorMessage?: undefined;
57
- };
58
- } | {
59
- llmResult: {
60
- success: boolean;
61
- errorMessage: string;
62
- details?: undefined;
63
- data?: undefined;
49
+ }, ChartToolOutput<{
50
+ chartType: "line-chart";
51
+ settings: {
52
+ showLegend: boolean;
53
+ x?: string | undefined;
54
+ xInterval?: "second" | "minute" | "hour" | "day" | "week" | "month" | "quarter" | "year" | undefined;
55
+ yFields?: {
56
+ field: string;
57
+ aggregate: "sum" | "max" | "min" | "avg";
58
+ color?: string | undefined;
59
+ }[] | undefined;
64
60
  };
65
- }>;
61
+ settingsOpen?: boolean | undefined;
62
+ dataPolicy?: {
63
+ disabled?: boolean | undefined;
64
+ maxRows?: number | undefined;
65
+ reason?: string | undefined;
66
+ } | undefined;
67
+ }>>;
66
68
  //# sourceMappingURL=tool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../../../src/charts/chart-types/line-chart/tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAItB,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAYrD,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAElC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE1E,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkF5D"}
1
+ {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../../../src/charts/chart-types/line-chart/tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAStB,OAAO,EAAC,eAAe,EAAE,eAAe,EAAC,MAAM,eAAe,CAAC;AAO/D,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAE7B,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEpE,wBAAgB,qBAAqB,CAAC,EACpC,eAAe,EACf,QAAQ,EACR,aAAa,GACd,EAAE,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAoDjB"}
@@ -1,16 +1,16 @@
1
1
  import { tool } from 'ai';
2
2
  import { LineChartSettings } from './schema';
3
3
  import { AggregateFunction, TemporalInterval } from '../../../schemas';
4
- import { BaseChartToolParameters } from '../../../ai/tool-schemas';
5
- import { validateColumnExists } from '../../../ai/tool-validation';
4
+ import { BaseChartToolInput } from '../../../ai/tool-schemas';
6
5
  import { NUMERIC_COLUMN_TYPES, QUANTITATIVE_COLUMN_TYPES, TEMPORAL_COLUMN_TYPES, } from '../../../column-types-utils';
7
- import { createOrUpdateChartPanel } from '../../../ai/tool-helpers';
6
+ import { validateLineChartSettings } from './validation';
7
+ import { ensureTable } from '../../../ai/tool-helpers';
8
8
  const AGGREGATE_FUNCTIONS = AggregateFunction.options;
9
9
  const TEMPORAL_INTERVALS = TemporalInterval.options;
10
- export const LineChartToolParameters = BaseChartToolParameters.extend({
10
+ export const LineChartToolInput = BaseChartToolInput.extend({
11
11
  settings: LineChartSettings.required(),
12
12
  });
13
- export function createLineChartAiTool(deps) {
13
+ export function createLineChartAiTool({ databaseAdapter, addChart, maxDataPoints, }) {
14
14
  return tool({
15
15
  description: `Line chart: shows trends and changes over time or ordered continuous variable. Connects data points to show progression.
16
16
 
@@ -24,49 +24,37 @@ Required:
24
24
  Optional: xInterval for temporal grouping (${TEMPORAL_INTERVALS.join(', ')}) when x is temporal (${TEMPORAL_COLUMN_TYPES.join(', ')}).
25
25
  Multiple yFields create multi-line chart for comparing metrics.
26
26
 
27
- NOTE: Line charts with aggregation (xInterval or aggregate functions) handle large datasets well. Without aggregation, line charts plot individual points and should not be used for tables with more than ${deps.maxDataPoints.toLocaleString()} rows - use aggregated visualizations instead.
28
-
29
- To UPDATE an existing line chart: provide the panelId parameter. Otherwise creates new panel.
27
+ NOTE: Line charts with aggregation (xInterval or aggregate functions) handle large datasets well. Without aggregation, line charts plot individual points and should not be used for tables with more than ${maxDataPoints.toLocaleString()} rows - use aggregated visualizations instead.
30
28
 
31
29
  Do NOT use for: single point distributions (use histogram), categorical counts (use count-plot), two-variable correlations (use scatter-plot).`,
32
- inputSchema: LineChartToolParameters,
33
- execute: async (params, context) => {
30
+ inputSchema: LineChartToolInput,
31
+ execute: async ({ tableName, title, settings, panelId }) => {
34
32
  try {
35
- const artifactId = deps.resolveArtifact(params.artifactId, params.createArtifactIfMissing, context);
36
- const { tableName, columns } = deps.resolveTable(artifactId, params.tableName);
37
- // Validate settings
38
- validateColumnExists(params.settings.x, QUANTITATIVE_COLUMN_TYPES, columns, 'x');
39
- for (const yField of params.settings.yFields) {
40
- validateColumnExists(yField.field, NUMERIC_COLUMN_TYPES, columns, 'yFields');
41
- }
42
- const result = createOrUpdateChartPanel(deps, {
43
- panelId: params.panelId,
44
- dashboardId: artifactId,
33
+ const dataTable = ensureTable(databaseAdapter, tableName);
34
+ validateLineChartSettings({
35
+ dataTable,
36
+ settings,
37
+ });
38
+ const chartConfig = {
39
+ chartType: 'line-chart',
40
+ settings,
41
+ };
42
+ await addChart({
45
43
  tableName,
46
- title: params.settings.x
47
- ? `Line chart - ${params.settings.yFields?.map((f) => f.field).join(', ') || ''} over ${params.settings.x}`
48
- : 'Line chart',
49
- config: {
50
- chartType: 'line-chart',
51
- settings: params.settings,
52
- },
44
+ panelId,
45
+ title,
46
+ config: chartConfig,
53
47
  });
54
48
  return {
55
- llmResult: {
56
- success: true,
57
- details: params.panelId
58
- ? `Updated line chart "${result.title}".`
59
- : `Created line chart "${result.title}".`,
60
- data: result,
61
- },
49
+ success: true,
50
+ details: `Generated line chart configuration.`,
51
+ data: chartConfig,
62
52
  };
63
53
  }
64
54
  catch (error) {
65
55
  return {
66
- llmResult: {
67
- success: false,
68
- errorMessage: error instanceof Error ? error.message : String(error),
69
- },
56
+ success: false,
57
+ errorMessage: error instanceof Error ? error.message : String(error),
70
58
  };
71
59
  }
72
60
  },
@@ -1 +1 @@
1
- {"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../../src/charts/chart-types/line-chart/tool.ts"],"names":[],"mappings":"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","sourcesContent":["import {tool} from 'ai';\nimport {z} from 'zod';\nimport {LineChartSettings} from './schema';\nimport {AggregateFunction, TemporalInterval} from '../../../schemas';\nimport {BaseChartToolParameters} from '../../../ai/tool-schemas';\nimport type {DashboardToolDeps} from '../base-types';\nimport {validateColumnExists} from '../../../ai/tool-validation';\nimport {\n NUMERIC_COLUMN_TYPES,\n QUANTITATIVE_COLUMN_TYPES,\n TEMPORAL_COLUMN_TYPES,\n} from '../../../column-types-utils';\nimport {createOrUpdateChartPanel} from '../../../ai/tool-helpers';\n\nconst AGGREGATE_FUNCTIONS = AggregateFunction.options;\nconst TEMPORAL_INTERVALS = TemporalInterval.options;\n\nexport const LineChartToolParameters = BaseChartToolParameters.extend({\n settings: LineChartSettings.required(),\n});\n\nexport type LineChartToolParams = z.infer<typeof LineChartToolParameters>;\n\nexport function createLineChartAiTool(deps: DashboardToolDeps) {\n return tool({\n description: `Line chart: shows trends and changes over time or ordered continuous variable. Connects data points to show progression.\n\nUse when: user asks about \"trend\", \"over time\", \"changes in\", \"time series\", \"progression of\", \"track X over Y\".\nExample queries: \"population growth over time\", \"temperature trend by month\", \"show land development over years\", \"elevation changes along route\", \"average precipitation by season\".\n\nRequired:\n- x: quantitative column (${QUANTITATIVE_COLUMN_TYPES.join(', ')})\n- yFields: array of {field: string (numeric: ${NUMERIC_COLUMN_TYPES.join(', ')}), aggregate?: ${AGGREGATE_FUNCTIONS.join('|')}}\n\nOptional: xInterval for temporal grouping (${TEMPORAL_INTERVALS.join(', ')}) when x is temporal (${TEMPORAL_COLUMN_TYPES.join(', ')}).\nMultiple yFields create multi-line chart for comparing metrics.\n\nNOTE: Line charts with aggregation (xInterval or aggregate functions) handle large datasets well. Without aggregation, line charts plot individual points and should not be used for tables with more than ${deps.maxDataPoints.toLocaleString()} rows - use aggregated visualizations instead.\n\nTo UPDATE an existing line chart: provide the panelId parameter. Otherwise creates new panel.\n\nDo NOT use for: single point distributions (use histogram), categorical counts (use count-plot), two-variable correlations (use scatter-plot).`,\n inputSchema: LineChartToolParameters,\n execute: async (params, context) => {\n try {\n const artifactId = deps.resolveArtifact(\n params.artifactId,\n params.createArtifactIfMissing,\n context,\n );\n const {tableName, columns} = deps.resolveTable(\n artifactId,\n params.tableName,\n );\n\n // Validate settings\n validateColumnExists(\n params.settings.x,\n QUANTITATIVE_COLUMN_TYPES,\n columns,\n 'x',\n );\n\n for (const yField of params.settings.yFields) {\n validateColumnExists(\n yField.field,\n NUMERIC_COLUMN_TYPES,\n columns,\n 'yFields',\n );\n }\n\n const result = createOrUpdateChartPanel(deps, {\n panelId: params.panelId,\n dashboardId: artifactId,\n tableName,\n title: params.settings.x\n ? `Line chart - ${params.settings.yFields?.map((f) => f.field).join(', ') || ''} over ${params.settings.x}`\n : 'Line chart',\n config: {\n chartType: 'line-chart',\n settings: params.settings,\n },\n });\n\n return {\n llmResult: {\n success: true,\n details: params.panelId\n ? `Updated line chart \"${result.title}\".`\n : `Created line chart \"${result.title}\".`,\n data: result,\n },\n };\n } catch (error) {\n return {\n llmResult: {\n success: false,\n errorMessage:\n error instanceof Error ? error.message : String(error),\n },\n };\n }\n },\n });\n}\n"]}
1
+ {"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../../src/charts/chart-types/line-chart/tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAExB,OAAO,EAAkB,iBAAiB,EAAC,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAC,iBAAiB,EAAE,gBAAgB,EAAC,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAC,kBAAkB,EAAC,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAC,yBAAyB,EAAC,MAAM,cAAc,CAAC;AACvD,OAAO,EAAC,WAAW,EAAC,MAAM,0BAA0B,CAAC;AAErD,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,OAAO,CAAC;AACtD,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,OAAO,CAAC;AAEpD,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,MAAM,CAAC;IAC1D,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,EAAE;CACvC,CAAC,CAAC;AAIH,MAAM,UAAU,qBAAqB,CAAC,EACpC,eAAe,EACf,QAAQ,EACR,aAAa,GACG;IAChB,OAAO,IAAI,CAAuD;QAChE,WAAW,EAAE;;;;;;4BAMW,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC;+CACjB,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC;;6CAEhF,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;;;6MAG0E,aAAa,CAAC,cAAc,EAAE;;+IAE5F;QAC3I,WAAW,EAAE,kBAAkB;QAC/B,OAAO,EAAE,KAAK,EAAE,EAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAC,EAAE,EAAE;YACvD,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,WAAW,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;gBAE1D,yBAAyB,CAAC;oBACxB,SAAS;oBACT,QAAQ;iBACT,CAAC,CAAC;gBAEH,MAAM,WAAW,GAAoB;oBACnC,SAAS,EAAE,YAAqB;oBAChC,QAAQ;iBACT,CAAC;gBAEF,MAAM,QAAQ,CAAC;oBACb,SAAS;oBACT,OAAO;oBACP,KAAK;oBACL,MAAM,EAAE,WAAW;iBACpB,CAAC,CAAC;gBAEH,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,qCAAqC;oBAC9C,IAAI,EAAE,WAAW;iBAClB,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,YAAY,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBACrE,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC","sourcesContent":["import {tool} from 'ai';\nimport {z} from 'zod';\nimport {LineChartConfig, LineChartSettings} from './schema';\nimport {AggregateFunction, TemporalInterval} from '../../../schemas';\nimport {BaseChartToolInput} from '../../../ai/tool-schemas';\nimport {\n NUMERIC_COLUMN_TYPES,\n QUANTITATIVE_COLUMN_TYPES,\n TEMPORAL_COLUMN_TYPES,\n} from '../../../column-types-utils';\nimport {ChartToolParams, ChartToolOutput} from '../tool-types';\nimport {validateLineChartSettings} from './validation';\nimport {ensureTable} from '../../../ai/tool-helpers';\n\nconst AGGREGATE_FUNCTIONS = AggregateFunction.options;\nconst TEMPORAL_INTERVALS = TemporalInterval.options;\n\nexport const LineChartToolInput = BaseChartToolInput.extend({\n settings: LineChartSettings.required(),\n});\n\nexport type LineChartToolInput = z.infer<typeof LineChartToolInput>;\n\nexport function createLineChartAiTool({\n databaseAdapter,\n addChart,\n maxDataPoints,\n}: ChartToolParams) {\n return tool<LineChartToolInput, ChartToolOutput<LineChartConfig>>({\n description: `Line chart: shows trends and changes over time or ordered continuous variable. Connects data points to show progression.\n\nUse when: user asks about \"trend\", \"over time\", \"changes in\", \"time series\", \"progression of\", \"track X over Y\".\nExample queries: \"population growth over time\", \"temperature trend by month\", \"show land development over years\", \"elevation changes along route\", \"average precipitation by season\".\n\nRequired:\n- x: quantitative column (${QUANTITATIVE_COLUMN_TYPES.join(', ')})\n- yFields: array of {field: string (numeric: ${NUMERIC_COLUMN_TYPES.join(', ')}), aggregate?: ${AGGREGATE_FUNCTIONS.join('|')}}\n\nOptional: xInterval for temporal grouping (${TEMPORAL_INTERVALS.join(', ')}) when x is temporal (${TEMPORAL_COLUMN_TYPES.join(', ')}).\nMultiple yFields create multi-line chart for comparing metrics.\n\nNOTE: Line charts with aggregation (xInterval or aggregate functions) handle large datasets well. Without aggregation, line charts plot individual points and should not be used for tables with more than ${maxDataPoints.toLocaleString()} rows - use aggregated visualizations instead.\n\nDo NOT use for: single point distributions (use histogram), categorical counts (use count-plot), two-variable correlations (use scatter-plot).`,\n inputSchema: LineChartToolInput,\n execute: async ({tableName, title, settings, panelId}) => {\n try {\n const dataTable = ensureTable(databaseAdapter, tableName);\n\n validateLineChartSettings({\n dataTable,\n settings,\n });\n\n const chartConfig: LineChartConfig = {\n chartType: 'line-chart' as const,\n settings,\n };\n\n await addChart({\n tableName,\n panelId,\n title,\n config: chartConfig,\n });\n\n return {\n success: true,\n details: `Generated line chart configuration.`,\n data: chartConfig,\n };\n } catch (error) {\n return {\n success: false,\n errorMessage: error instanceof Error ? error.message : String(error),\n };\n }\n },\n });\n}\n"]}
@@ -0,0 +1,16 @@
1
+ import { LineChartSettings } from './schema';
2
+ import { ValidateSpecOptions } from '../base-types';
3
+ import { TableColumn } from '@sqlrooms/duckdb';
4
+ import { AggregateFunction, TemporalInterval } from '../../../schemas';
5
+ export type ValidatedLineChartSettings = {
6
+ xColumn: TableColumn;
7
+ yColumns: {
8
+ field: string;
9
+ column: TableColumn;
10
+ aggregate: AggregateFunction;
11
+ color: string;
12
+ }[];
13
+ xInterval?: TemporalInterval;
14
+ };
15
+ export declare function validateLineChartSettings({ dataTable, settings: { x, yFields, xInterval }, }: ValidateSpecOptions<LineChartSettings>): ValidatedLineChartSettings;
16
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../src/charts/chart-types/line-chart/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAC,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAC,mBAAmB,EAAC,MAAM,eAAe,CAAC;AAOlD,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAC,iBAAiB,EAAE,gBAAgB,EAAC,MAAM,kBAAkB,CAAC;AAGrE,MAAM,MAAM,0BAA0B,GAAG;IACvC,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,WAAW,CAAC;QACpB,SAAS,EAAE,iBAAiB,CAAC;QAC7B,KAAK,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;IACJ,SAAS,CAAC,EAAE,gBAAgB,CAAC;CAC9B,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,EACxC,SAAS,EACT,QAAQ,EAAE,EAAC,CAAC,EAAE,OAAY,EAAE,SAAS,EAAC,GACvC,EAAE,mBAAmB,CAAC,iBAAiB,CAAC,GAAG,0BAA0B,CAgDrE"}
@@ -0,0 +1,43 @@
1
+ import { InvalidColumnTypeError, MissingColumnsError, RequiredFieldsError, } from '../errors';
2
+ import { isNumericType, isQuantitativeType } from '../../../column-types-utils';
3
+ import { DEFAULT_CHART_FALLBACK_COLOR } from '../../../constants/chart-colors';
4
+ export function validateLineChartSettings({ dataTable, settings: { x, yFields = [], xInterval }, }) {
5
+ // Basic validation for required fields
6
+ if (!x || yFields.length === 0) {
7
+ throw new RequiredFieldsError([
8
+ ...(x ? [] : ['X-axis']),
9
+ ...(yFields.length > 0 ? [] : ['Y-axis']),
10
+ ]);
11
+ }
12
+ // Validate X and Y field existence
13
+ const xColumn = dataTable.columns.find((col) => col.name === x);
14
+ const yColumns = yFields.map((y) => ({
15
+ field: y.field,
16
+ column: dataTable.columns.find((col) => col.name === y.field),
17
+ aggregate: y.aggregate ?? 'sum',
18
+ color: y.color ?? DEFAULT_CHART_FALLBACK_COLOR,
19
+ }));
20
+ const missingYColumns = yColumns.filter((y) => !y.column);
21
+ if (!xColumn || missingYColumns.length > 0) {
22
+ throw new MissingColumnsError([
23
+ ...(xColumn ? [] : ['X-axis']),
24
+ ...missingYColumns.map((y) => y.field),
25
+ ]);
26
+ }
27
+ // Validate X and Y field types
28
+ if (!isQuantitativeType(xColumn.type)) {
29
+ throw new InvalidColumnTypeError(xColumn.name, 'quantitative');
30
+ }
31
+ const invalidYFields = yColumns.filter((y) => {
32
+ return y.column && !isNumericType(y.column.type);
33
+ });
34
+ if (invalidYFields.length > 0) {
35
+ throw new InvalidColumnTypeError(invalidYFields.map(({ field }) => field), 'numeric');
36
+ }
37
+ return {
38
+ xColumn,
39
+ yColumns,
40
+ xInterval,
41
+ };
42
+ }
43
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../../src/charts/chart-types/line-chart/validation.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAC,aAAa,EAAE,kBAAkB,EAAC,MAAM,6BAA6B,CAAC;AAG9E,OAAO,EAAC,4BAA4B,EAAC,MAAM,iCAAiC,CAAC;AAa7E,MAAM,UAAU,yBAAyB,CAAC,EACxC,SAAS,EACT,QAAQ,EAAE,EAAC,CAAC,EAAE,OAAO,GAAG,EAAE,EAAE,SAAS,EAAC,GACC;IACvC,uCAAuC;IACvC,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,mBAAmB,CAAC;YAC5B,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACxB,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;SAC1C,CAAC,CAAC;IACL,CAAC;IAED,mCAAmC;IACnC,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACnC,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC;QAC7D,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,KAAK;QAC/B,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,4BAA4B;KAC/C,CAAC,CAAC,CAAC;IAEJ,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAE1D,IAAI,CAAC,OAAO,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,mBAAmB,CAAC;YAC5B,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC9B,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;SACvC,CAAC,CAAC;IACL,CAAC;IAED,+BAA+B;IAC/B,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,sBAAsB,CAAC,OAAO,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QAC3C,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,sBAAsB,CAC9B,cAAc,CAAC,GAAG,CAAC,CAAC,EAAC,KAAK,EAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EACtC,SAAS,CACV,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO;QACP,QAAQ;QACR,SAAS;KACoB,CAAC;AAClC,CAAC","sourcesContent":["import {LineChartSettings} from './schema';\nimport {ValidateSpecOptions} from '../base-types';\nimport {\n InvalidColumnTypeError,\n MissingColumnsError,\n RequiredFieldsError,\n} from '../errors';\nimport {isNumericType, isQuantitativeType} from '../../../column-types-utils';\nimport {TableColumn} from '@sqlrooms/duckdb';\nimport {AggregateFunction, TemporalInterval} from '../../../schemas';\nimport {DEFAULT_CHART_FALLBACK_COLOR} from '../../../constants/chart-colors';\n\nexport type ValidatedLineChartSettings = {\n xColumn: TableColumn;\n yColumns: {\n field: string;\n column: TableColumn;\n aggregate: AggregateFunction;\n color: string;\n }[];\n xInterval?: TemporalInterval;\n};\n\nexport function validateLineChartSettings({\n dataTable,\n settings: {x, yFields = [], xInterval},\n}: ValidateSpecOptions<LineChartSettings>): ValidatedLineChartSettings {\n // Basic validation for required fields\n if (!x || yFields.length === 0) {\n throw new RequiredFieldsError([\n ...(x ? [] : ['X-axis']),\n ...(yFields.length > 0 ? [] : ['Y-axis']),\n ]);\n }\n\n // Validate X and Y field existence\n const xColumn = dataTable.columns.find((col) => col.name === x);\n const yColumns = yFields.map((y) => ({\n field: y.field,\n column: dataTable.columns.find((col) => col.name === y.field),\n aggregate: y.aggregate ?? 'sum',\n color: y.color ?? DEFAULT_CHART_FALLBACK_COLOR,\n }));\n\n const missingYColumns = yColumns.filter((y) => !y.column);\n\n if (!xColumn || missingYColumns.length > 0) {\n throw new MissingColumnsError([\n ...(xColumn ? [] : ['X-axis']),\n ...missingYColumns.map((y) => y.field),\n ]);\n }\n\n // Validate X and Y field types\n if (!isQuantitativeType(xColumn.type)) {\n throw new InvalidColumnTypeError(xColumn.name, 'quantitative');\n }\n\n const invalidYFields = yColumns.filter((y) => {\n return y.column && !isNumericType(y.column.type);\n });\n\n if (invalidYFields.length > 0) {\n throw new InvalidColumnTypeError(\n invalidYFields.map(({field}) => field),\n 'numeric',\n );\n }\n\n return {\n xColumn,\n yColumns,\n xInterval,\n } as ValidatedLineChartSettings;\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import { ChartTypeDefinition } from './base-types';
2
+ export declare function resolveChartTypes(chartTypes: ChartTypeDefinition<any>[] | undefined): ChartTypeDefinition<any>[];
3
+ //# sourceMappingURL=resolveChartTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveChartTypes.d.ts","sourceRoot":"","sources":["../../../src/charts/chart-types/resolveChartTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,mBAAmB,EAAC,MAAM,cAAc,CAAC;AAGjD,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,mBAAmB,CAAC,GAAG,CAAC,EAAE,GAAG,SAAS,GACjD,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAM5B"}
@@ -0,0 +1,8 @@
1
+ import { createDefaultChartTypes } from './createDefaultChartTypes';
2
+ export function resolveChartTypes(chartTypes) {
3
+ if (chartTypes === undefined) {
4
+ return createDefaultChartTypes({ includeCustomSpec: false });
5
+ }
6
+ return chartTypes;
7
+ }
8
+ //# sourceMappingURL=resolveChartTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveChartTypes.js","sourceRoot":"","sources":["../../../src/charts/chart-types/resolveChartTypes.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,uBAAuB,EAAC,MAAM,2BAA2B,CAAC;AAElE,MAAM,UAAU,iBAAiB,CAC/B,UAAkD;IAElD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,uBAAuB,CAAC,EAAC,iBAAiB,EAAE,KAAK,EAAC,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC","sourcesContent":["import {ChartTypeDefinition} from './base-types';\nimport {createDefaultChartTypes} from './createDefaultChartTypes';\n\nexport function resolveChartTypes(\n chartTypes: ChartTypeDefinition<any>[] | undefined,\n): ChartTypeDefinition<any>[] {\n if (chartTypes === undefined) {\n return createDefaultChartTypes({includeCustomSpec: false});\n }\n\n return chartTypes;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../../../src/charts/chart-types/scatter-plot/definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAC,sBAAsB,EAA2B,MAAM,UAAU,CAAC;AAU1E,eAAO,MAAM,oBAAoB,EAAE,uBAAuB,CAAC,sBAAsB,CAgB9E,CAAC"}
1
+ {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../../../src/charts/chart-types/scatter-plot/definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAC,sBAAsB,EAA2B,MAAM,UAAU,CAAC;AAU1E,eAAO,MAAM,oBAAoB,EAAE,uBAAuB,CAAC,sBAAsB,CAiB9E,CAAC"}
@@ -10,6 +10,7 @@ export const scatterPlotChartType = {
10
10
  id: 'scatter-plot',
11
11
  label: 'Scatter Plot',
12
12
  description: DESCRIPTION,
13
+ aiDescription: `${DESCRIPTION} - relationship between two numeric columns (avoid for >10k rows, use heatmap instead)`,
13
14
  icon: Workflow,
14
15
  schema: ScatterPlotChartSettings,
15
16
  settingsComponent: ScatterPlotSettingsComponent,
@@ -1 +1 @@
1
- {"version":3,"file":"definition.js","sourceRoot":"","sources":["../../../../src/charts/chart-types/scatter-plot/definition.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,wBAAwB,EAAC,MAAM,UAAU,CAAC;AAC1E,OAAO,EAAC,oBAAoB,EAAC,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAC,4BAA4B,EAAC,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAC,uBAAuB,EAAC,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAC,QAAQ,EAAC,MAAM,cAAc,CAAC;AACtC,OAAO,EAAC,qBAAqB,EAAC,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAC,6BAA6B,EAAC,MAAM,wBAAwB,CAAC;AAErE,MAAM,WAAW,GAAG,6BAA6B,CAAC;AAElD,MAAM,CAAC,MAAM,oBAAoB,GAC/B;IACE,EAAE,EAAE,cAAc;IAClB,KAAK,EAAE,cAAc;IACrB,WAAW,EAAE,WAAW;IACxB,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,wBAAwB;IAChC,iBAAiB,EAAE,4BAA4B;IAC/C,UAAU,EAAE,oBAAoB,CAAC,WAAW,CAAC;IAC7C,UAAU,EAAE,uBAAuB;IACnC,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;QACpB,OAAO,EAAE,6BAA6B;QACtC,MAAM,EACJ,yGAAyG;KAC5G,CAAC;IACF,UAAU,EAAE,qBAAqB;CAClC,CAAC","sourcesContent":["import type {SpecChartTypeDefinition} from '../base-types';\nimport {ScatterPlotChartConfig, ScatterPlotChartSettings} from './schema';\nimport {titleFromDescription} from '../../../chart-builders/chartTypeUtils';\nimport {ScatterPlotSettingsComponent} from './ScatterPlotSettings';\nimport {createScatterPlotAiTool} from './tool';\nimport {Workflow} from 'lucide-react';\nimport {createScatterPlotSpec} from './spec';\nimport {DEFAULT_CHART_MAX_DATA_POINTS} from '../../../chart-runtime';\n\nconst DESCRIPTION = 'Create a scatter plot chart';\n\nexport const scatterPlotChartType: SpecChartTypeDefinition<ScatterPlotChartConfig> =\n {\n id: 'scatter-plot',\n label: 'Scatter Plot',\n description: DESCRIPTION,\n icon: Workflow,\n schema: ScatterPlotChartSettings,\n settingsComponent: ScatterPlotSettingsComponent,\n buildTitle: titleFromDescription(DESCRIPTION),\n createTool: createScatterPlotAiTool,\n getDataPolicy: () => ({\n maxRows: DEFAULT_CHART_MAX_DATA_POINTS,\n reason:\n 'Scatter charts render one point per row. Use a heatmap or another aggregated chart for larger datasets.',\n }),\n createSpec: createScatterPlotSpec,\n };\n"]}
1
+ {"version":3,"file":"definition.js","sourceRoot":"","sources":["../../../../src/charts/chart-types/scatter-plot/definition.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,wBAAwB,EAAC,MAAM,UAAU,CAAC;AAC1E,OAAO,EAAC,oBAAoB,EAAC,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAC,4BAA4B,EAAC,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAC,uBAAuB,EAAC,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAC,QAAQ,EAAC,MAAM,cAAc,CAAC;AACtC,OAAO,EAAC,qBAAqB,EAAC,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAC,6BAA6B,EAAC,MAAM,wBAAwB,CAAC;AAErE,MAAM,WAAW,GAAG,6BAA6B,CAAC;AAElD,MAAM,CAAC,MAAM,oBAAoB,GAC/B;IACE,EAAE,EAAE,cAAc;IAClB,KAAK,EAAE,cAAc;IACrB,WAAW,EAAE,WAAW;IACxB,aAAa,EAAE,GAAG,WAAW,wFAAwF;IACrH,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,wBAAwB;IAChC,iBAAiB,EAAE,4BAA4B;IAC/C,UAAU,EAAE,oBAAoB,CAAC,WAAW,CAAC;IAC7C,UAAU,EAAE,uBAAuB;IACnC,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;QACpB,OAAO,EAAE,6BAA6B;QACtC,MAAM,EACJ,yGAAyG;KAC5G,CAAC;IACF,UAAU,EAAE,qBAAqB;CAClC,CAAC","sourcesContent":["import type {SpecChartTypeDefinition} from '../base-types';\nimport {ScatterPlotChartConfig, ScatterPlotChartSettings} from './schema';\nimport {titleFromDescription} from '../../../chart-builders/chartTypeUtils';\nimport {ScatterPlotSettingsComponent} from './ScatterPlotSettings';\nimport {createScatterPlotAiTool} from './tool';\nimport {Workflow} from 'lucide-react';\nimport {createScatterPlotSpec} from './spec';\nimport {DEFAULT_CHART_MAX_DATA_POINTS} from '../../../chart-runtime';\n\nconst DESCRIPTION = 'Create a scatter plot chart';\n\nexport const scatterPlotChartType: SpecChartTypeDefinition<ScatterPlotChartConfig> =\n {\n id: 'scatter-plot',\n label: 'Scatter Plot',\n description: DESCRIPTION,\n aiDescription: `${DESCRIPTION} - relationship between two numeric columns (avoid for >10k rows, use heatmap instead)`,\n icon: Workflow,\n schema: ScatterPlotChartSettings,\n settingsComponent: ScatterPlotSettingsComponent,\n buildTitle: titleFromDescription(DESCRIPTION),\n createTool: createScatterPlotAiTool,\n getDataPolicy: () => ({\n maxRows: DEFAULT_CHART_MAX_DATA_POINTS,\n reason:\n 'Scatter charts render one point per row. Use a heatmap or another aggregated chart for larger datasets.',\n }),\n createSpec: createScatterPlotSpec,\n };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../../../../src/charts/chart-types/scatter-plot/spec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAC,wBAAwB,EAAC,MAAM,UAAU,CAAC;AAMlD,OAAO,EAAC,iBAAiB,EAAyB,MAAM,eAAe,CAAC;AAMxE,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,iBAAiB,CAAC,wBAAwB,CAAC,GACnD,IAAI,CAoCN"}
1
+ {"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../../../../src/charts/chart-types/scatter-plot/spec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAC,wBAAwB,EAAC,MAAM,UAAU,CAAC;AAIlD,OAAO,EAAC,iBAAiB,EAAyB,MAAM,eAAe,CAAC;AAKxE,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,iBAAiB,CAAC,wBAAwB,CAAC,GACnD,IAAI,CAoCN"}
@@ -1,6 +1,5 @@
1
- import { InvalidColumnTypeError, MissingColumnsError, RequiredFieldsError, } from '../errors';
1
+ import { validateScatterPlotSettings } from './validation';
2
2
  import { getChartTableReference } from '../base-types';
3
- import { isNumericType } from '../../../column-types-utils';
4
3
  const FG_COLOR = 'var(--color-chart-1)';
5
4
  const DEFAULT_POINT_SIZE = 3;
6
5
  export function createScatterPlotSpec(options) {
@@ -35,47 +34,4 @@ export function createScatterPlotSpec(options) {
35
34
  params: { brush: { select: 'crossfilter' } },
36
35
  };
37
36
  }
38
- function validateScatterPlotSettings({ dataTable, settings: { x, y, size }, }) {
39
- // Basic validation for required fields
40
- if (!x || !y) {
41
- throw new RequiredFieldsError([
42
- ...(x ? [] : ['X field']),
43
- ...(y ? [] : ['Y field']),
44
- ]);
45
- }
46
- // Validate X and Y field existence
47
- const xColumn = dataTable.columns.find((col) => col.name === x);
48
- const yColumn = dataTable.columns.find((col) => col.name === y);
49
- if (!xColumn || !yColumn) {
50
- throw new MissingColumnsError([
51
- ...(xColumn ? [] : [x]),
52
- ...(yColumn ? [] : [y]),
53
- ]);
54
- }
55
- // Validate X and Y field are numeric
56
- const xIsNumeric = isNumericType(xColumn.type);
57
- const yIsNumeric = isNumericType(yColumn.type);
58
- if (!xIsNumeric || !yIsNumeric) {
59
- throw new InvalidColumnTypeError([
60
- ...(!xIsNumeric ? [xColumn.name] : []),
61
- ...(!yIsNumeric ? [yColumn.name] : []),
62
- ], 'numeric');
63
- }
64
- // Validate size field if provided
65
- let sizeColumn = undefined;
66
- if (size) {
67
- sizeColumn = dataTable.columns.find((col) => col.name === size);
68
- if (!sizeColumn) {
69
- throw new MissingColumnsError([size]);
70
- }
71
- if (!isNumericType(sizeColumn.type)) {
72
- throw new InvalidColumnTypeError([sizeColumn.name], 'numeric');
73
- }
74
- }
75
- return {
76
- xColumn,
77
- yColumn,
78
- sizeColumn,
79
- };
80
- }
81
37
  //# sourceMappingURL=spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"spec.js","sourceRoot":"","sources":["../../../../src/charts/chart-types/scatter-plot/spec.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Spec} from '@uwdata/mosaic-spec';\nimport {ScatterPlotChartSettings} from './schema';\nimport {\n InvalidColumnTypeError,\n MissingColumnsError,\n RequiredFieldsError,\n} from '../errors';\nimport {CreateSpecOptions, getChartTableReference} from '../base-types';\nimport {isNumericType} from '../../../column-types-utils';\n\nconst FG_COLOR = 'var(--color-chart-1)';\nconst DEFAULT_POINT_SIZE = 3;\n\nexport function createScatterPlotSpec(\n options: CreateSpecOptions<ScatterPlotChartSettings>,\n): Spec {\n const {dataTable, selectionName} = options;\n\n const {xColumn, yColumn, sizeColumn} = validateScatterPlotSettings(options);\n\n const dotMark: Record<string, unknown> = {\n mark: 'dot',\n data: {from: getChartTableReference(dataTable), filterBy: '$brush'},\n x: xColumn.name,\n y: yColumn.name,\n fill: FG_COLOR,\n fillOpacity: 0.5,\n };\n\n // If size column is provided, use it for point radius; otherwise use fixed size\n if (sizeColumn) {\n dotMark.r = sizeColumn.name;\n } else {\n dotMark.r = DEFAULT_POINT_SIZE;\n }\n\n const plot: unknown[] = [dotMark];\n\n if (selectionName) {\n plot.push({select: 'intervalXY', as: '$brush'});\n }\n\n return {\n plot,\n xLabel: xColumn.name,\n yLabel: yColumn.name,\n height: 250,\n width: 380,\n margins: {left: 50, right: 20, top: 20, bottom: 50},\n params: {brush: {select: 'crossfilter'}},\n } as Spec;\n}\n\nfunction validateScatterPlotSettings({\n dataTable,\n settings: {x, y, size},\n}: CreateSpecOptions<ScatterPlotChartSettings>) {\n // Basic validation for required fields\n if (!x || !y) {\n throw new RequiredFieldsError([\n ...(x ? [] : ['X field']),\n ...(y ? [] : ['Y field']),\n ]);\n }\n\n // Validate X and Y field existence\n const xColumn = dataTable.columns.find((col) => col.name === x);\n const yColumn = dataTable.columns.find((col) => col.name === y);\n\n if (!xColumn || !yColumn) {\n throw new MissingColumnsError([\n ...(xColumn ? [] : [x]),\n ...(yColumn ? [] : [y]),\n ]);\n }\n\n // Validate X and Y field are numeric\n const xIsNumeric = isNumericType(xColumn.type);\n const yIsNumeric = isNumericType(yColumn.type);\n if (!xIsNumeric || !yIsNumeric) {\n throw new InvalidColumnTypeError(\n [\n ...(!xIsNumeric ? [xColumn.name] : []),\n ...(!yIsNumeric ? [yColumn.name] : []),\n ],\n 'numeric',\n );\n }\n\n // Validate size field if provided\n let sizeColumn = undefined;\n if (size) {\n sizeColumn = dataTable.columns.find((col) => col.name === size);\n if (!sizeColumn) {\n throw new MissingColumnsError([size]);\n }\n if (!isNumericType(sizeColumn.type)) {\n throw new InvalidColumnTypeError([sizeColumn.name], 'numeric');\n }\n }\n\n return {\n xColumn,\n yColumn,\n sizeColumn,\n };\n}\n"]}
1
+ {"version":3,"file":"spec.js","sourceRoot":"","sources":["../../../../src/charts/chart-types/scatter-plot/spec.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,2BAA2B,EAAC,MAAM,cAAc,CAAC;AAEzD,OAAO,EAAoB,sBAAsB,EAAC,MAAM,eAAe,CAAC;AAExE,MAAM,QAAQ,GAAG,sBAAsB,CAAC;AACxC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAE7B,MAAM,UAAU,qBAAqB,CACnC,OAAoD;IAEpD,MAAM,EAAC,SAAS,EAAE,aAAa,EAAC,GAAG,OAAO,CAAC;IAE3C,MAAM,EAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAC,GAAG,2BAA2B,CAAC,OAAO,CAAC,CAAC;IAE5E,MAAM,OAAO,GAA4B;QACvC,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,EAAC,IAAI,EAAE,sBAAsB,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAC;QACnE,CAAC,EAAE,OAAO,CAAC,IAAI;QACf,CAAC,EAAE,OAAO,CAAC,IAAI;QACf,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,GAAG;KACjB,CAAC;IAEF,gFAAgF;IAChF,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC;IAC9B,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,CAAC,GAAG,kBAAkB,CAAC;IACjC,CAAC;IAED,MAAM,IAAI,GAAc,CAAC,OAAO,CAAC,CAAC;IAElC,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ,EAAC,CAAC,CAAC;IAClD,CAAC;IAED,OAAO;QACL,IAAI;QACJ,MAAM,EAAE,OAAO,CAAC,IAAI;QACpB,MAAM,EAAE,OAAO,CAAC,IAAI;QACpB,MAAM,EAAE,GAAG;QACX,KAAK,EAAE,GAAG;QACV,OAAO,EAAE,EAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAC;QACnD,MAAM,EAAE,EAAC,KAAK,EAAE,EAAC,MAAM,EAAE,aAAa,EAAC,EAAC;KACjC,CAAC;AACZ,CAAC","sourcesContent":["import type {Spec} from '@uwdata/mosaic-spec';\nimport {ScatterPlotChartSettings} from './schema';\n\nimport {validateScatterPlotSettings} from './validation';\n\nimport {CreateSpecOptions, getChartTableReference} from '../base-types';\n\nconst FG_COLOR = 'var(--color-chart-1)';\nconst DEFAULT_POINT_SIZE = 3;\n\nexport function createScatterPlotSpec(\n options: CreateSpecOptions<ScatterPlotChartSettings>,\n): Spec {\n const {dataTable, selectionName} = options;\n\n const {xColumn, yColumn, sizeColumn} = validateScatterPlotSettings(options);\n\n const dotMark: Record<string, unknown> = {\n mark: 'dot',\n data: {from: getChartTableReference(dataTable), filterBy: '$brush'},\n x: xColumn.name,\n y: yColumn.name,\n fill: FG_COLOR,\n fillOpacity: 0.5,\n };\n\n // If size column is provided, use it for point radius; otherwise use fixed size\n if (sizeColumn) {\n dotMark.r = sizeColumn.name;\n } else {\n dotMark.r = DEFAULT_POINT_SIZE;\n }\n\n const plot: unknown[] = [dotMark];\n\n if (selectionName) {\n plot.push({select: 'intervalXY', as: '$brush'});\n }\n\n return {\n plot,\n xLabel: xColumn.name,\n yLabel: yColumn.name,\n height: 250,\n width: 380,\n margins: {left: 50, right: 20, top: 20, bottom: 50},\n params: {brush: {select: 'crossfilter'}},\n } as Spec;\n}\n"]}
@@ -1,9 +1,8 @@
1
1
  import { z } from 'zod';
2
- import { type DashboardToolDeps } from '../base-types';
3
- export declare const ScatterPlotToolParameters: z.ZodObject<{
4
- artifactId: z.ZodOptional<z.ZodString>;
5
- tableName: z.ZodOptional<z.ZodString>;
6
- createArtifactIfMissing: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
2
+ import { ChartToolParams, ChartToolOutput } from '../tool-types';
3
+ export declare const ScatterPlotToolInput: z.ZodObject<{
4
+ tableName: z.ZodString;
5
+ title: z.ZodOptional<z.ZodString>;
7
6
  panelId: z.ZodOptional<z.ZodString>;
8
7
  reasoning: z.ZodString;
9
8
  settings: z.ZodObject<{
@@ -12,31 +11,29 @@ export declare const ScatterPlotToolParameters: z.ZodObject<{
12
11
  size: z.ZodNonOptional<z.ZodOptional<z.ZodString>>;
13
12
  }, z.core.$strip>;
14
13
  }, z.core.$strip>;
15
- export type ScatterPlotToolParams = z.infer<typeof ScatterPlotToolParameters>;
16
- export declare function createScatterPlotAiTool(deps: DashboardToolDeps): import("ai").Tool<{
17
- createArtifactIfMissing: boolean;
14
+ export type ScatterPlotToolInput = z.infer<typeof ScatterPlotToolInput>;
15
+ export declare function createScatterPlotAiTool({ databaseAdapter, addChart, maxDataPoints, }: ChartToolParams): import("ai").Tool<{
16
+ tableName: string;
18
17
  reasoning: string;
19
18
  settings: {
20
19
  x: string;
21
20
  y: string;
22
21
  size: string;
23
22
  };
24
- artifactId?: string | undefined;
25
- tableName?: string | undefined;
23
+ title?: string | undefined;
26
24
  panelId?: string | undefined;
27
- }, {
28
- llmResult: {
29
- success: boolean;
30
- details: string;
31
- data: import("..").PanelResult;
32
- errorMessage?: undefined;
33
- };
34
- } | {
35
- llmResult: {
36
- success: boolean;
37
- errorMessage: string;
38
- details?: undefined;
39
- data?: undefined;
25
+ }, ChartToolOutput<{
26
+ chartType: "scatter-plot";
27
+ settings: {
28
+ x?: string | undefined;
29
+ y?: string | undefined;
30
+ size?: string | undefined;
40
31
  };
41
- }>;
32
+ settingsOpen?: boolean | undefined;
33
+ dataPolicy?: {
34
+ disabled?: boolean | undefined;
35
+ maxRows?: number | undefined;
36
+ reason?: string | undefined;
37
+ } | undefined;
38
+ }>>;
42
39
  //# sourceMappingURL=tool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../../../src/charts/chart-types/scatter-plot/tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAGtB,OAAO,EAAC,KAAK,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAKrD,eAAO,MAAM,yBAAyB;;;;;;;;;;;iBAEpC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE9E,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;GAuF9D"}
1
+ {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../../../src/charts/chart-types/scatter-plot/tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAItB,OAAO,EAAC,eAAe,EAAE,eAAe,EAAC,MAAM,eAAe,CAAC;AAI/D,eAAO,MAAM,oBAAoB;;;;;;;;;;iBAE/B,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAExE,wBAAgB,uBAAuB,CAAC,EACtC,eAAe,EACf,QAAQ,EACR,aAAa,GACd,EAAE,eAAe;;;;;;;;;;;;;;;;;;;;;;;IAiDjB"}
@@ -1,13 +1,13 @@
1
1
  import { tool } from 'ai';
2
2
  import { ScatterPlotChartSettings } from './schema';
3
- import { BaseChartToolParameters } from '../../../ai/tool-schemas';
4
- import { validateColumnExists } from '../../../ai/tool-validation';
3
+ import { BaseChartToolInput } from '../../../ai/tool-schemas';
5
4
  import { NUMERIC_COLUMN_TYPES } from '../../../column-types-utils';
6
- import { createOrUpdateChartPanel } from '../../../ai/tool-helpers';
7
- export const ScatterPlotToolParameters = BaseChartToolParameters.extend({
5
+ import { validateScatterPlotSettings } from './validation';
6
+ import { ensureTable } from '../../../ai/tool-helpers';
7
+ export const ScatterPlotToolInput = BaseChartToolInput.extend({
8
8
  settings: ScatterPlotChartSettings.required(),
9
9
  });
10
- export function createScatterPlotAiTool(deps) {
10
+ export function createScatterPlotAiTool({ databaseAdapter, addChart, maxDataPoints, }) {
11
11
  return tool({
12
12
  description: `Scatter chart: plots individual points positioned by two numeric columns (x, y), with optional size dimension.
13
13
 
@@ -17,51 +17,38 @@ Example queries: "plot latitude vs longitude", "show correlation between elevati
17
17
  Required: x and y must be numeric (${NUMERIC_COLUMN_TYPES.join(', ')}).
18
18
  Optional: size can encode a third numeric dimension (magnitude, frequency, count).
19
19
 
20
- IMPORTANT: Scatter charts render ALL rows as individual points. Do NOT create scatter charts for tables with more than ${deps.maxDataPoints.toLocaleString()} rows - use aggregated visualizations instead (histogram, count-plot, line-chart with time intervals, or heatmap).
20
+ IMPORTANT: Scatter charts render ALL rows as individual points. Do NOT create scatter charts for tables with more than ${maxDataPoints.toLocaleString()} rows - use aggregated visualizations instead (histogram, count-plot, line-chart with time intervals, or heatmap).
21
21
 
22
- To UPDATE an existing scatter chart: provide the panelId parameter. Otherwise creates new panel.
23
-
24
- Do NOT use for: distributions (use histogram), categorical counts (use count-plot), trends over time (use line-chart), or large datasets (>${deps.maxDataPoints.toLocaleString()} rows).`,
25
- inputSchema: ScatterPlotToolParameters,
26
- execute: async (params, context) => {
22
+ Do NOT use for: distributions (use histogram), categorical counts (use count-plot), trends over time (use line-chart), or large datasets (>${maxDataPoints.toLocaleString()} rows).`,
23
+ inputSchema: ScatterPlotToolInput,
24
+ execute: async ({ tableName, title, settings, panelId }) => {
27
25
  try {
28
- const artifactId = deps.resolveArtifact(params.artifactId, params.createArtifactIfMissing, context);
29
- const { tableName, columns } = deps.resolveTable(artifactId, params.tableName);
30
- // Validate settings
31
- validateColumnExists(params.settings.x, NUMERIC_COLUMN_TYPES, columns, 'x');
32
- validateColumnExists(params.settings.y, NUMERIC_COLUMN_TYPES, columns, 'y');
33
- // Validate size if provided
34
- if (params.settings.size) {
35
- validateColumnExists(params.settings.size, NUMERIC_COLUMN_TYPES, columns, 'size');
36
- }
37
- const result = createOrUpdateChartPanel(deps, {
38
- panelId: params.panelId,
39
- dashboardId: artifactId,
26
+ const dataTable = ensureTable(databaseAdapter, tableName);
27
+ validateScatterPlotSettings({
28
+ dataTable,
29
+ settings,
30
+ maxDataPoints,
31
+ });
32
+ const chartConfig = {
33
+ chartType: 'scatter-plot',
34
+ settings,
35
+ };
36
+ await addChart({
40
37
  tableName,
41
- title: params.settings.x && params.settings.y
42
- ? `Scatter chart - ${params.settings.x} vs ${params.settings.y}`
43
- : 'Scatter chart',
44
- config: {
45
- chartType: 'scatter-plot',
46
- settings: params.settings,
47
- },
38
+ panelId,
39
+ config: chartConfig,
40
+ title,
48
41
  });
49
42
  return {
50
- llmResult: {
51
- success: true,
52
- details: params.panelId
53
- ? `Updated scatter chart "${result.title}".`
54
- : `Created scatter chart "${result.title}".`,
55
- data: result,
56
- },
43
+ success: true,
44
+ details: `Generated scatter chart configuration.`,
45
+ data: chartConfig,
57
46
  };
58
47
  }
59
48
  catch (error) {
60
49
  return {
61
- llmResult: {
62
- success: false,
63
- errorMessage: error instanceof Error ? error.message : String(error),
64
- },
50
+ success: false,
51
+ errorMessage: error instanceof Error ? error.message : String(error),
65
52
  };
66
53
  }
67
54
  },