@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 +1 @@
1
- {"version":3,"file":"useDataTableExplorerQueryState.d.ts","sourceRoot":"","sources":["../../../src/data-table-explorer/hooks/useDataTableExplorerQueryState.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAC,2BAA2B,EAAC,MAAM,iCAAiC,CAAC;AACjF,OAAO,KAAK,EACV,gCAAgC,EAChC,wBAAwB,EACzB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,+BAA+B,EAEhC,MAAM,UAAU,CAAC;AAElB,MAAM,MAAM,qCAAqC,GAAG;IAClD,UAAU,EAAE,gCAAgC,CAAC;IAC7C,mBAAmB,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,2BAA2B,CAAC,QAAQ,CAAC,CAAC;IAC9C,SAAS,EAAE,SAAS,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,wBAAwB,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,oCAAoC,GAAG;IACjD,SAAS,EAAE,UAAU,CAAC,OAAO,+BAA+B,CAAC,CAAC;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,2BAA2B,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC;IACxD,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;CAC/C,CAAC;AAEF;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,EAC7C,UAAU,EACV,mBAAmB,EACnB,MAAM,EACN,SAAS,EACT,gBAAgB,EAChB,OAAO,EACP,SAAS,GACV,EAAE,qCAAqC,GAAG,oCAAoC,CA4C9E"}
1
+ {"version":3,"file":"useDataTableExplorerQueryState.d.ts","sourceRoot":"","sources":["../../../src/data-table-explorer/hooks/useDataTableExplorerQueryState.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAC,2BAA2B,EAAC,MAAM,iCAAiC,CAAC;AACjF,OAAO,KAAK,EACV,gCAAgC,EAChC,kCAAkC,EAClC,wBAAwB,EACzB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,+BAA+B,EAEhC,MAAM,UAAU,CAAC;AAElB;;GAEG;AACH,MAAM,MAAM,qCAAqC,GAAG;IAClD,UAAU,EAAE,gCAAgC,CAAC;IAC7C,mBAAmB,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,2BAA2B,CAAC,QAAQ,CAAC,CAAC;IAC9C,SAAS,EAAE,SAAS,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,wBAAwB,CAAC;IAClC;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,cAAc,EAAE,kCAAkC,CAAC;CACpD,CAAC;AAEF,MAAM,MAAM,oCAAoC,GAAG;IACjD,SAAS,EAAE,UAAU,CAAC,OAAO,+BAA+B,CAAC,CAAC;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,2BAA2B,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC;IACxD,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;CAC/C,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAAC,EAC7C,UAAU,EACV,mBAAmB,EACnB,MAAM,EACN,SAAS,EACT,gBAAgB,EAChB,OAAO,EACP,aAAa,EACb,cAAc,GACf,EAAE,qCAAqC,GAAG,oCAAoC,CA4C9E"}
@@ -3,8 +3,11 @@ import { buildDataTableExplorerBaseQuery, buildDataTableExplorerPageQuery, } fro
3
3
  /**
4
4
  * Derives the dataTableExplorer's field and SQL state from the current schema,
5
5
  * selection, sorting, and pagination state.
6
+ *
7
+ * @param options Current schema, selection, pagination, sorting, and table
8
+ * reference inputs for query generation.
6
9
  */
7
- export function useDataTableExplorerQueryState({ pagination, rowSelectionVersion, schema, selection, selectionVersion, sorting, tableName, }) {
10
+ export function useDataTableExplorerQueryState({ pagination, rowSelectionVersion, schema, selection, selectionVersion, sorting, tableIdentity, tableReference, }) {
8
11
  const fields = schema.fields;
9
12
  const fieldNames = useMemo(() => fields.map((field) => field.name), [fields]);
10
13
  const filter = useMemo(() => {
@@ -19,17 +22,17 @@ export function useDataTableExplorerQueryState({ pagination, rowSelectionVersion
19
22
  columns: fieldNames,
20
23
  filter,
21
24
  sorting,
22
- tableName,
23
- }), [fieldNames, filter, sorting, tableName]);
25
+ tableName: tableReference,
26
+ }), [fieldNames, filter, sorting, tableReference]);
24
27
  const pageBaseQuery = useMemo(() => buildDataTableExplorerBaseQuery({
25
28
  columns: fieldNames,
26
29
  filter: rowFilter,
27
30
  sorting,
28
- tableName,
29
- }), [fieldNames, rowFilter, sorting, tableName]);
31
+ tableName: tableReference,
32
+ }), [fieldNames, rowFilter, sorting, tableReference]);
30
33
  return {
31
34
  baseQuery,
32
- datasetId: [tableName, ...fieldNames].join(''),
35
+ datasetId: [tableIdentity, ...fieldNames].join(''),
33
36
  fieldNames,
34
37
  fields,
35
38
  hasFilters: Array.isArray(filter) ? filter.length > 0 : Boolean(filter),
@@ -1 +1 @@
1
- {"version":3,"file":"useDataTableExplorerQueryState.js","sourceRoot":"","sources":["../../../src/data-table-explorer/hooks/useDataTableExplorerQueryState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,OAAO,CAAC;AAO9B,OAAO,EACL,+BAA+B,EAC/B,+BAA+B,GAChC,MAAM,UAAU,CAAC;AAsBlB;;;GAGG;AACH,MAAM,UAAU,8BAA8B,CAAC,EAC7C,UAAU,EACV,mBAAmB,EACnB,MAAM,EACN,SAAS,EACT,gBAAgB,EAChB,OAAO,EACP,SAAS,GAC6B;IACtC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9E,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE;QAC1B,KAAK,gBAAgB,CAAC;QACtB,OAAO,SAAS,CAAC,SAAS,EAAE,CAAC;IAC/B,CAAC,EAAE,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE;QAC7B,KAAK,mBAAmB,CAAC;QACzB,OAAO,SAAS,CAAC,SAAS,EAAE,CAAC;IAC/B,CAAC,EAAE,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,OAAO,CACvB,GAAG,EAAE,CACH,+BAA+B,CAAC;QAC9B,OAAO,EAAE,UAAU;QACnB,MAAM;QACN,OAAO;QACP,SAAS;KACV,CAAC,EACJ,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CACzC,CAAC;IACF,MAAM,aAAa,GAAG,OAAO,CAC3B,GAAG,EAAE,CACH,+BAA+B,CAAC;QAC9B,OAAO,EAAE,UAAU;QACnB,MAAM,EAAE,SAAS;QACjB,OAAO;QACP,SAAS;KACV,CAAC,EACJ,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAC5C,CAAC;IAEF,OAAO;QACL,SAAS;QACT,SAAS,EAAE,CAAC,SAAS,EAAE,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAC/C,UAAU;QACV,MAAM;QACN,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QACvE,SAAS,EAAE,+BAA+B,CACxC,aAAa,EACb,UAAU,CACX,CAAC,QAAQ,EAAE;QACZ,SAAS;KACV,CAAC;AACJ,CAAC","sourcesContent":["import {useMemo} from 'react';\nimport type {Selection} from '@uwdata/mosaic-core';\nimport type {DataTableExplorerStoreState} from '../createDataTableExplorerStore';\nimport type {\n DataTableExplorerPaginationState,\n DataTableExplorerSorting,\n} from '../types';\nimport {\n buildDataTableExplorerBaseQuery,\n buildDataTableExplorerPageQuery,\n} from '../utils';\n\nexport type UseDataTableExplorerQueryStateOptions = {\n pagination: DataTableExplorerPaginationState;\n rowSelectionVersion: number;\n schema: DataTableExplorerStoreState['schema'];\n selection: Selection;\n selectionVersion: number;\n sorting: DataTableExplorerSorting;\n tableName: string;\n};\n\nexport type UseDataTableExplorerQueryStateReturn = {\n baseQuery: ReturnType<typeof buildDataTableExplorerBaseQuery>;\n datasetId: string;\n fieldNames: string[];\n fields: DataTableExplorerStoreState['schema']['fields'];\n hasFilters: boolean;\n pageQuery: string;\n rowFilter: ReturnType<Selection['predicate']>;\n};\n\n/**\n * Derives the dataTableExplorer's field and SQL state from the current schema,\n * selection, sorting, and pagination state.\n */\nexport function useDataTableExplorerQueryState({\n pagination,\n rowSelectionVersion,\n schema,\n selection,\n selectionVersion,\n sorting,\n tableName,\n}: UseDataTableExplorerQueryStateOptions): UseDataTableExplorerQueryStateReturn {\n const fields = schema.fields;\n const fieldNames = useMemo(() => fields.map((field) => field.name), [fields]);\n const filter = useMemo(() => {\n void selectionVersion;\n return selection.predicate();\n }, [selection, selectionVersion]);\n const rowFilter = useMemo(() => {\n void rowSelectionVersion;\n return selection.predicate();\n }, [rowSelectionVersion, selection]);\n const baseQuery = useMemo(\n () =>\n buildDataTableExplorerBaseQuery({\n columns: fieldNames,\n filter,\n sorting,\n tableName,\n }),\n [fieldNames, filter, sorting, tableName],\n );\n const pageBaseQuery = useMemo(\n () =>\n buildDataTableExplorerBaseQuery({\n columns: fieldNames,\n filter: rowFilter,\n sorting,\n tableName,\n }),\n [fieldNames, rowFilter, sorting, tableName],\n );\n\n return {\n baseQuery,\n datasetId: [tableName, ...fieldNames].join('\u0001'),\n fieldNames,\n fields,\n hasFilters: Array.isArray(filter) ? filter.length > 0 : Boolean(filter),\n pageQuery: buildDataTableExplorerPageQuery(\n pageBaseQuery,\n pagination,\n ).toString(),\n rowFilter,\n };\n}\n"]}
1
+ {"version":3,"file":"useDataTableExplorerQueryState.js","sourceRoot":"","sources":["../../../src/data-table-explorer/hooks/useDataTableExplorerQueryState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,OAAO,CAAC;AAQ9B,OAAO,EACL,+BAA+B,EAC/B,+BAA+B,GAChC,MAAM,UAAU,CAAC;AAiClB;;;;;;GAMG;AACH,MAAM,UAAU,8BAA8B,CAAC,EAC7C,UAAU,EACV,mBAAmB,EACnB,MAAM,EACN,SAAS,EACT,gBAAgB,EAChB,OAAO,EACP,aAAa,EACb,cAAc,GACwB;IACtC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9E,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE;QAC1B,KAAK,gBAAgB,CAAC;QACtB,OAAO,SAAS,CAAC,SAAS,EAAE,CAAC;IAC/B,CAAC,EAAE,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE;QAC7B,KAAK,mBAAmB,CAAC;QACzB,OAAO,SAAS,CAAC,SAAS,EAAE,CAAC;IAC/B,CAAC,EAAE,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,OAAO,CACvB,GAAG,EAAE,CACH,+BAA+B,CAAC;QAC9B,OAAO,EAAE,UAAU;QACnB,MAAM;QACN,OAAO;QACP,SAAS,EAAE,cAAc;KAC1B,CAAC,EACJ,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,CAAC,CAC9C,CAAC;IACF,MAAM,aAAa,GAAG,OAAO,CAC3B,GAAG,EAAE,CACH,+BAA+B,CAAC;QAC9B,OAAO,EAAE,UAAU;QACnB,MAAM,EAAE,SAAS;QACjB,OAAO;QACP,SAAS,EAAE,cAAc;KAC1B,CAAC,EACJ,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,CAAC,CACjD,CAAC;IAEF,OAAO;QACL,SAAS;QACT,SAAS,EAAE,CAAC,aAAa,EAAE,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QACnD,UAAU;QACV,MAAM;QACN,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QACvE,SAAS,EAAE,+BAA+B,CACxC,aAAa,EACb,UAAU,CACX,CAAC,QAAQ,EAAE;QACZ,SAAS;KACV,CAAC;AACJ,CAAC","sourcesContent":["import {useMemo} from 'react';\nimport type {Selection} from '@uwdata/mosaic-core';\nimport type {DataTableExplorerStoreState} from '../createDataTableExplorerStore';\nimport type {\n DataTableExplorerPaginationState,\n DataTableExplorerSqlTableReference,\n DataTableExplorerSorting,\n} from '../types';\nimport {\n buildDataTableExplorerBaseQuery,\n buildDataTableExplorerPageQuery,\n} from '../utils';\n\n/**\n * Inputs used to derive memoized query state for a dataTableExplorer instance.\n */\nexport type UseDataTableExplorerQueryStateOptions = {\n pagination: DataTableExplorerPaginationState;\n rowSelectionVersion: number;\n schema: DataTableExplorerStoreState['schema'];\n selection: Selection;\n selectionVersion: number;\n sorting: DataTableExplorerSorting;\n /**\n * Stable SQLRooms table identity used to build dataset IDs and distinguish\n * tables that share schema/table names across catalogs.\n */\n tableIdentity: string;\n /**\n * Mosaic SQL table reference used in generated queries.\n */\n tableReference: DataTableExplorerSqlTableReference;\n};\n\nexport type UseDataTableExplorerQueryStateReturn = {\n baseQuery: ReturnType<typeof buildDataTableExplorerBaseQuery>;\n datasetId: string;\n fieldNames: string[];\n fields: DataTableExplorerStoreState['schema']['fields'];\n hasFilters: boolean;\n pageQuery: string;\n rowFilter: ReturnType<Selection['predicate']>;\n};\n\n/**\n * Derives the dataTableExplorer's field and SQL state from the current schema,\n * selection, sorting, and pagination state.\n *\n * @param options Current schema, selection, pagination, sorting, and table\n * reference inputs for query generation.\n */\nexport function useDataTableExplorerQueryState({\n pagination,\n rowSelectionVersion,\n schema,\n selection,\n selectionVersion,\n sorting,\n tableIdentity,\n tableReference,\n}: UseDataTableExplorerQueryStateOptions): UseDataTableExplorerQueryStateReturn {\n const fields = schema.fields;\n const fieldNames = useMemo(() => fields.map((field) => field.name), [fields]);\n const filter = useMemo(() => {\n void selectionVersion;\n return selection.predicate();\n }, [selection, selectionVersion]);\n const rowFilter = useMemo(() => {\n void rowSelectionVersion;\n return selection.predicate();\n }, [rowSelectionVersion, selection]);\n const baseQuery = useMemo(\n () =>\n buildDataTableExplorerBaseQuery({\n columns: fieldNames,\n filter,\n sorting,\n tableName: tableReference,\n }),\n [fieldNames, filter, sorting, tableReference],\n );\n const pageBaseQuery = useMemo(\n () =>\n buildDataTableExplorerBaseQuery({\n columns: fieldNames,\n filter: rowFilter,\n sorting,\n tableName: tableReference,\n }),\n [fieldNames, rowFilter, sorting, tableReference],\n );\n\n return {\n baseQuery,\n datasetId: [tableIdentity, ...fieldNames].join('\u0001'),\n fieldNames,\n fields,\n hasFilters: Array.isArray(filter) ? filter.length > 0 : Boolean(filter),\n pageQuery: buildDataTableExplorerPageQuery(\n pageBaseQuery,\n pagination,\n ).toString(),\n rowFilter,\n };\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  import type { QualifiedTableName } from '@sqlrooms/db';
2
2
  import type { MosaicClient, Selection } from '@uwdata/mosaic-core';
3
+ import type { TableRefNode } from '@uwdata/mosaic-sql';
3
4
  import type { Interval1D } from '@uwdata/mosaic-plot';
4
5
  import type { Field, Table } from 'apache-arrow';
5
6
  import type { Dispatch, SetStateAction } from 'react';
@@ -59,6 +60,15 @@ export type DataTableExplorerColumnState = {
59
60
  summary: DataTableExplorerSummaryState;
60
61
  };
61
62
  export type DataTableExplorerTableReference = string | QualifiedTableName;
63
+ /**
64
+ * Table reference accepted by dataTableExplorer query builders.
65
+ *
66
+ * Use a string for simple unqualified table names or for call sites that already
67
+ * require a string SQL boundary. Use a TableRefNode for qualified names,
68
+ * especially when schema or table identifier parts may contain dots or quotes,
69
+ * so Mosaic does not reparse those parts from a flattened string.
70
+ */
71
+ export type DataTableExplorerSqlTableReference = string | TableRefNode;
62
72
  export type DataTableExplorerOptions = {
63
73
  categoryLimit?: number;
64
74
  columns?: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/data-table-explorer/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/data-table-explorer/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/data-table-explorer/types.ts"],"names":[],"mappings":"","sourcesContent":["import type {QualifiedTableName} from '@sqlrooms/db';\nimport type {MosaicClient, Selection} from '@uwdata/mosaic-core';\nimport type {Interval1D} from '@uwdata/mosaic-plot';\nimport type {Field, Table} from 'apache-arrow';\nimport type {Dispatch, SetStateAction} from 'react';\n\nexport type DataTableExplorerSorting = Array<{id: string; desc: boolean}>;\n\nexport type DataTableExplorerPaginationState = {\n pageIndex: number;\n pageSize: number;\n};\n\nexport type DataTableExplorerBinValue = number | Date;\n\nexport type DataTableExplorerBin = {\n x0: DataTableExplorerBinValue;\n x1: DataTableExplorerBinValue;\n length: number;\n};\n\nexport type DataTableExplorerSummaryStatus = {\n error?: Error;\n isLoading: boolean;\n};\n\nexport type DataTableExplorerHistogramSummary =\n DataTableExplorerSummaryStatus & {\n filteredBins: DataTableExplorerBin[];\n filteredNullCount: number;\n interactor: Interval1D | null;\n kind: 'histogram';\n totalBins: DataTableExplorerBin[];\n totalNullCount: number;\n valueType: 'date' | 'number';\n };\n\nexport type DataTableExplorerCategoryBucket = {\n filteredCount: number;\n key: string;\n kind: 'null' | 'overflow' | 'unique' | 'value';\n label: string;\n selectable: boolean;\n totalCount: number;\n};\n\nexport type DataTableExplorerCategorySummary =\n DataTableExplorerSummaryStatus & {\n bucketCount: number;\n buckets: DataTableExplorerCategoryBucket[];\n client?: MosaicClient;\n kind: 'category';\n selectedKey?: string;\n toggleValue: (key: string) => void;\n };\n\nexport type DataTableExplorerUnsupportedSummary =\n DataTableExplorerSummaryStatus & {\n kind: 'unsupported';\n label: string;\n };\n\nexport type DataTableExplorerSummaryState =\n | DataTableExplorerCategorySummary\n | DataTableExplorerHistogramSummary\n | DataTableExplorerUnsupportedSummary;\n\nexport type DataTableExplorerColumnKind =\n | 'category'\n | 'histogram'\n | 'unsupported';\n\nexport type DataTableExplorerColumnState = {\n field: Field;\n kind: DataTableExplorerColumnKind;\n name: string;\n summary: DataTableExplorerSummaryState;\n};\n\nexport type DataTableExplorerTableReference = string | QualifiedTableName;\n\nexport type DataTableExplorerOptions = {\n categoryLimit?: number;\n columns?: string[];\n initialSorting?: DataTableExplorerSorting;\n pageSize?: number;\n selection?: Selection;\n selectionName?: string;\n summaryBins?: number;\n tableName: DataTableExplorerTableReference;\n};\n\nexport type UseDataTableExplorerReturn = {\n client: MosaicClient | null;\n columns: DataTableExplorerColumnState[];\n filteredRowCount?: number;\n hasFilters: boolean;\n isLoading: boolean;\n pageQuery: string;\n pageTable?: Table;\n pagination: DataTableExplorerPaginationState;\n reset: () => void;\n selection: Selection;\n setPagination: Dispatch<SetStateAction<DataTableExplorerPaginationState>>;\n setSorting: Dispatch<SetStateAction<DataTableExplorerSorting>>;\n sorting: DataTableExplorerSorting;\n sql: string;\n tableError?: Error;\n totalRowCount?: number;\n};\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/data-table-explorer/types.ts"],"names":[],"mappings":"","sourcesContent":["import type {QualifiedTableName} from '@sqlrooms/db';\nimport type {MosaicClient, Selection} from '@uwdata/mosaic-core';\nimport type {TableRefNode} from '@uwdata/mosaic-sql';\nimport type {Interval1D} from '@uwdata/mosaic-plot';\nimport type {Field, Table} from 'apache-arrow';\nimport type {Dispatch, SetStateAction} from 'react';\n\nexport type DataTableExplorerSorting = Array<{id: string; desc: boolean}>;\n\nexport type DataTableExplorerPaginationState = {\n pageIndex: number;\n pageSize: number;\n};\n\nexport type DataTableExplorerBinValue = number | Date;\n\nexport type DataTableExplorerBin = {\n x0: DataTableExplorerBinValue;\n x1: DataTableExplorerBinValue;\n length: number;\n};\n\nexport type DataTableExplorerSummaryStatus = {\n error?: Error;\n isLoading: boolean;\n};\n\nexport type DataTableExplorerHistogramSummary =\n DataTableExplorerSummaryStatus & {\n filteredBins: DataTableExplorerBin[];\n filteredNullCount: number;\n interactor: Interval1D | null;\n kind: 'histogram';\n totalBins: DataTableExplorerBin[];\n totalNullCount: number;\n valueType: 'date' | 'number';\n };\n\nexport type DataTableExplorerCategoryBucket = {\n filteredCount: number;\n key: string;\n kind: 'null' | 'overflow' | 'unique' | 'value';\n label: string;\n selectable: boolean;\n totalCount: number;\n};\n\nexport type DataTableExplorerCategorySummary =\n DataTableExplorerSummaryStatus & {\n bucketCount: number;\n buckets: DataTableExplorerCategoryBucket[];\n client?: MosaicClient;\n kind: 'category';\n selectedKey?: string;\n toggleValue: (key: string) => void;\n };\n\nexport type DataTableExplorerUnsupportedSummary =\n DataTableExplorerSummaryStatus & {\n kind: 'unsupported';\n label: string;\n };\n\nexport type DataTableExplorerSummaryState =\n | DataTableExplorerCategorySummary\n | DataTableExplorerHistogramSummary\n | DataTableExplorerUnsupportedSummary;\n\nexport type DataTableExplorerColumnKind =\n | 'category'\n | 'histogram'\n | 'unsupported';\n\nexport type DataTableExplorerColumnState = {\n field: Field;\n kind: DataTableExplorerColumnKind;\n name: string;\n summary: DataTableExplorerSummaryState;\n};\n\nexport type DataTableExplorerTableReference = string | QualifiedTableName;\n\n/**\n * Table reference accepted by dataTableExplorer query builders.\n *\n * Use a string for simple unqualified table names or for call sites that already\n * require a string SQL boundary. Use a TableRefNode for qualified names,\n * especially when schema or table identifier parts may contain dots or quotes,\n * so Mosaic does not reparse those parts from a flattened string.\n */\nexport type DataTableExplorerSqlTableReference = string | TableRefNode;\n\nexport type DataTableExplorerOptions = {\n categoryLimit?: number;\n columns?: string[];\n initialSorting?: DataTableExplorerSorting;\n pageSize?: number;\n selection?: Selection;\n selectionName?: string;\n summaryBins?: number;\n tableName: DataTableExplorerTableReference;\n};\n\nexport type UseDataTableExplorerReturn = {\n client: MosaicClient | null;\n columns: DataTableExplorerColumnState[];\n filteredRowCount?: number;\n hasFilters: boolean;\n isLoading: boolean;\n pageQuery: string;\n pageTable?: Table;\n pagination: DataTableExplorerPaginationState;\n reset: () => void;\n selection: Selection;\n setPagination: Dispatch<SetStateAction<DataTableExplorerPaginationState>>;\n setSorting: Dispatch<SetStateAction<DataTableExplorerSorting>>;\n sorting: DataTableExplorerSorting;\n sql: string;\n tableError?: Error;\n totalRowCount?: number;\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useDataTableExplorer.d.ts","sourceRoot":"","sources":["../../src/data-table-explorer/useDataTableExplorer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAC3B,MAAM,SAAS,CAAC;AAejB;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,wBAAwB,GAChC,0BAA0B,CA+G5B"}
1
+ {"version":3,"file":"useDataTableExplorer.d.ts","sourceRoot":"","sources":["../../src/data-table-explorer/useDataTableExplorer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAC3B,MAAM,SAAS,CAAC;AAcjB;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,wBAAwB,GAChC,0BAA0B,CA0H5B"}
@@ -1,4 +1,5 @@
1
1
  import { useDebounce } from '@sqlrooms/ui';
2
+ import { useMemo } from 'react';
2
3
  import { useStoreWithMosaic } from '../MosaicSlice';
3
4
  import { useDataTableExplorerSelection } from './hooks/useDataTableExplorerSelection';
4
5
  import { useDataTableExplorerStoreState } from './hooks/useDataTableExplorerStoreState';
@@ -7,16 +8,16 @@ import { useDataTableExplorerLifecycles } from './hooks/useDataTableExplorerLife
7
8
  import { useDataTableExplorerColumns } from './hooks/useDataTableExplorerColumns';
8
9
  import { useDataTableExplorerStatus } from './hooks/useDataTableExplorerStatus';
9
10
  import { useDataTableExplorerVisiblePage } from './hooks/useDataTableExplorerVisiblePage';
10
- function getTableReference(tableName) {
11
- return typeof tableName === 'string' ? tableName : tableName.toString();
12
- }
11
+ import { getMosaicRawSqlTableReference, getMosaicSqlTableReference, getMosaicTableIdentity, } from '../mosaicTableReference';
13
12
  /**
14
13
  * Aggregates Mosaic-backed schema, rows, counts, and summaries into the stable
15
14
  * public dataTableExplorer API consumed by the React table UI.
16
15
  */
17
16
  export function useDataTableExplorer(options) {
18
17
  const { categoryLimit = 20, columns, initialSorting = [], pageSize = 100, selection: providedSelection, selectionName, summaryBins = 18, tableName: table, } = options;
19
- const tableName = getTableReference(table);
18
+ const tableIdentity = useMemo(() => getMosaicTableIdentity(table), [table]);
19
+ const tableName = useMemo(() => getMosaicRawSqlTableReference(table), [table]);
20
+ const tableReference = useMemo(() => getMosaicSqlTableReference(table), [table]);
20
21
  const connection = useStoreWithMosaic((state) => state.mosaic.connection);
21
22
  const { selection, selectionVersion } = useDataTableExplorerSelection({
22
23
  selection: providedSelection,
@@ -27,7 +28,7 @@ export function useDataTableExplorer(options) {
27
28
  initialSorting,
28
29
  pageSize,
29
30
  });
30
- const schema = rawSchema.tableName === tableName
31
+ const schema = rawSchema.tableName === tableIdentity
31
32
  ? rawSchema
32
33
  : { ...rawSchema, fields: [], isLoading: true };
33
34
  const { baseQuery, datasetId, fieldNames, fields, hasFilters, pageQuery, rowFilter, } = useDataTableExplorerQueryState({
@@ -37,7 +38,8 @@ export function useDataTableExplorer(options) {
37
38
  selection,
38
39
  selectionVersion,
39
40
  sorting,
40
- tableName,
41
+ tableIdentity,
42
+ tableReference,
41
43
  });
42
44
  useDataTableExplorerLifecycles({
43
45
  categoryLimit,
@@ -53,7 +55,9 @@ export function useDataTableExplorer(options) {
53
55
  selectionVersion,
54
56
  sorting,
55
57
  summaryBins,
58
+ tableIdentity,
56
59
  tableName,
60
+ tableReference,
57
61
  });
58
62
  const dataTableExplorerColumns = useDataTableExplorerColumns({
59
63
  fields,
@@ -1 +1 @@
1
- {"version":3,"file":"useDataTableExplorer.js","sourceRoot":"","sources":["../../src/data-table-explorer/useDataTableExplorer.ts"],"names":[],"mappings":"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","sourcesContent":["import {useDebounce} from '@sqlrooms/ui';\nimport {useStoreWithMosaic} from '../MosaicSlice';\nimport type {\n DataTableExplorerOptions,\n UseDataTableExplorerReturn,\n} from './types';\nimport {useDataTableExplorerSelection} from './hooks/useDataTableExplorerSelection';\nimport {useDataTableExplorerStoreState} from './hooks/useDataTableExplorerStoreState';\nimport {useDataTableExplorerQueryState} from './hooks/useDataTableExplorerQueryState';\nimport {useDataTableExplorerLifecycles} from './hooks/useDataTableExplorerLifecycles';\nimport {useDataTableExplorerColumns} from './hooks/useDataTableExplorerColumns';\nimport {useDataTableExplorerStatus} from './hooks/useDataTableExplorerStatus';\nimport {useDataTableExplorerVisiblePage} from './hooks/useDataTableExplorerVisiblePage';\n\nfunction getTableReference(\n tableName: DataTableExplorerOptions['tableName'],\n): string {\n return typeof tableName === 'string' ? tableName : tableName.toString();\n}\n\n/**\n * Aggregates Mosaic-backed schema, rows, counts, and summaries into the stable\n * public dataTableExplorer API consumed by the React table UI.\n */\nexport function useDataTableExplorer(\n options: DataTableExplorerOptions,\n): UseDataTableExplorerReturn {\n const {\n categoryLimit = 20,\n columns,\n initialSorting = [],\n pageSize = 100,\n selection: providedSelection,\n selectionName,\n summaryBins = 18,\n tableName: table,\n } = options;\n\n const tableName = getTableReference(table);\n\n const connection = useStoreWithMosaic((state) => state.mosaic.connection);\n const {selection, selectionVersion} = useDataTableExplorerSelection({\n selection: providedSelection,\n selectionName,\n });\n const rowSelectionVersion = useDebounce(selectionVersion, 100);\n const {\n client,\n filteredCount,\n lastNonEmptyPageTable,\n page,\n pagination,\n dataTableExplorerStore,\n schema: rawSchema,\n setPagination,\n setSorting,\n sorting,\n summaries,\n totalCount,\n } = useDataTableExplorerStoreState({\n initialSorting,\n pageSize,\n });\n const schema =\n rawSchema.tableName === tableName\n ? rawSchema\n : {...rawSchema, fields: [], isLoading: true};\n const {\n baseQuery,\n datasetId,\n fieldNames,\n fields,\n hasFilters,\n pageQuery,\n rowFilter,\n } = useDataTableExplorerQueryState({\n pagination,\n rowSelectionVersion,\n schema,\n selection,\n selectionVersion,\n sorting,\n tableName,\n });\n useDataTableExplorerLifecycles({\n categoryLimit,\n columns,\n connection,\n fieldNames,\n fields,\n pageSize,\n pagination,\n dataTableExplorerStore,\n rowFilter,\n selection,\n selectionVersion,\n sorting,\n summaryBins,\n tableName,\n });\n const dataTableExplorerColumns = useDataTableExplorerColumns({\n fields,\n summaries,\n });\n const {isLoading, tableError} = useDataTableExplorerStatus({\n filteredCount,\n page,\n schema,\n summaries,\n totalCount,\n });\n const visiblePage = useDataTableExplorerVisiblePage({\n lastNonEmptyPageTable,\n page,\n pageDatasetId: datasetId,\n rowSelectionVersion,\n selectionVersion,\n });\n\n return {\n client,\n columns: dataTableExplorerColumns,\n filteredRowCount: filteredCount.count,\n hasFilters,\n isLoading,\n pageQuery,\n pageTable: visiblePage,\n pagination,\n reset: () => selection.reset(),\n selection,\n setPagination,\n setSorting,\n sorting,\n sql: baseQuery.toString(),\n tableError,\n totalRowCount: totalCount.count,\n };\n}\n"]}
1
+ {"version":3,"file":"useDataTableExplorer.js","sourceRoot":"","sources":["../../src/data-table-explorer/useDataTableExplorer.ts"],"names":[],"mappings":"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","sourcesContent":["import {useDebounce} from '@sqlrooms/ui';\nimport {useMemo} from 'react';\nimport {useStoreWithMosaic} from '../MosaicSlice';\nimport type {\n DataTableExplorerOptions,\n UseDataTableExplorerReturn,\n} from './types';\nimport {useDataTableExplorerSelection} from './hooks/useDataTableExplorerSelection';\nimport {useDataTableExplorerStoreState} from './hooks/useDataTableExplorerStoreState';\nimport {useDataTableExplorerQueryState} from './hooks/useDataTableExplorerQueryState';\nimport {useDataTableExplorerLifecycles} from './hooks/useDataTableExplorerLifecycles';\nimport {useDataTableExplorerColumns} from './hooks/useDataTableExplorerColumns';\nimport {useDataTableExplorerStatus} from './hooks/useDataTableExplorerStatus';\nimport {useDataTableExplorerVisiblePage} from './hooks/useDataTableExplorerVisiblePage';\nimport {\n getMosaicRawSqlTableReference,\n getMosaicSqlTableReference,\n getMosaicTableIdentity,\n} from '../mosaicTableReference';\n\n/**\n * Aggregates Mosaic-backed schema, rows, counts, and summaries into the stable\n * public dataTableExplorer API consumed by the React table UI.\n */\nexport function useDataTableExplorer(\n options: DataTableExplorerOptions,\n): UseDataTableExplorerReturn {\n const {\n categoryLimit = 20,\n columns,\n initialSorting = [],\n pageSize = 100,\n selection: providedSelection,\n selectionName,\n summaryBins = 18,\n tableName: table,\n } = options;\n\n const tableIdentity = useMemo(() => getMosaicTableIdentity(table), [table]);\n const tableName = useMemo(\n () => getMosaicRawSqlTableReference(table),\n [table],\n );\n const tableReference = useMemo(\n () => getMosaicSqlTableReference(table),\n [table],\n );\n\n const connection = useStoreWithMosaic((state) => state.mosaic.connection);\n const {selection, selectionVersion} = useDataTableExplorerSelection({\n selection: providedSelection,\n selectionName,\n });\n const rowSelectionVersion = useDebounce(selectionVersion, 100);\n const {\n client,\n filteredCount,\n lastNonEmptyPageTable,\n page,\n pagination,\n dataTableExplorerStore,\n schema: rawSchema,\n setPagination,\n setSorting,\n sorting,\n summaries,\n totalCount,\n } = useDataTableExplorerStoreState({\n initialSorting,\n pageSize,\n });\n const schema =\n rawSchema.tableName === tableIdentity\n ? rawSchema\n : {...rawSchema, fields: [], isLoading: true};\n const {\n baseQuery,\n datasetId,\n fieldNames,\n fields,\n hasFilters,\n pageQuery,\n rowFilter,\n } = useDataTableExplorerQueryState({\n pagination,\n rowSelectionVersion,\n schema,\n selection,\n selectionVersion,\n sorting,\n tableIdentity,\n tableReference,\n });\n useDataTableExplorerLifecycles({\n categoryLimit,\n columns,\n connection,\n fieldNames,\n fields,\n pageSize,\n pagination,\n dataTableExplorerStore,\n rowFilter,\n selection,\n selectionVersion,\n sorting,\n summaryBins,\n tableIdentity,\n tableName,\n tableReference,\n });\n const dataTableExplorerColumns = useDataTableExplorerColumns({\n fields,\n summaries,\n });\n const {isLoading, tableError} = useDataTableExplorerStatus({\n filteredCount,\n page,\n schema,\n summaries,\n totalCount,\n });\n const visiblePage = useDataTableExplorerVisiblePage({\n lastNonEmptyPageTable,\n page,\n pageDatasetId: datasetId,\n rowSelectionVersion,\n selectionVersion,\n });\n\n return {\n client,\n columns: dataTableExplorerColumns,\n filteredRowCount: filteredCount.count,\n hasFilters,\n isLoading,\n pageQuery,\n pageTable: visiblePage,\n pagination,\n reset: () => selection.reset(),\n selection,\n setPagination,\n setSorting,\n sorting,\n sql: baseQuery.toString(),\n tableError,\n totalRowCount: totalCount.count,\n };\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import type { FieldInfo } from '@uwdata/mosaic-core';
2
2
  import { Query } from '@uwdata/mosaic-sql';
3
3
  import * as arrow from 'apache-arrow';
4
- import type { DataTableExplorerBin, DataTableExplorerCategoryBucket, DataTableExplorerPaginationState, DataTableExplorerSorting, DataTableExplorerSummaryState } from './types';
4
+ import type { DataTableExplorerBin, DataTableExplorerCategoryBucket, DataTableExplorerPaginationState, DataTableExplorerSqlTableReference, DataTableExplorerSorting, DataTableExplorerSummaryState } from './types';
5
5
  export type CategoryCountRow = {
6
6
  bucketKind: 'null' | 'unique' | 'value';
7
7
  total: number;
@@ -11,28 +11,86 @@ type QueryWhereInput = Parameters<ReturnType<typeof Query.from>['where']>[0];
11
11
  export declare function isDataTableExplorerHistogramType(type: arrow.DataType): boolean;
12
12
  export declare function isDataTableExplorerUnsupportedSummaryType(type: arrow.DataType): boolean;
13
13
  export declare function getDataTableExplorerValueType(type: arrow.DataType): 'date' | 'number' | 'string';
14
- export declare function buildSchemaQuery(tableName: string, columns?: string[]): ReturnType<typeof Query.from>;
14
+ /**
15
+ * Builds a one-row schema probe query for a dataTableExplorer table.
16
+ *
17
+ * @param tableName Table reference to query. Pass a TableRefNode when the table
18
+ * reference is qualified or contains dotted identifier parts.
19
+ * @param columns Optional list of columns to include; when omitted, the query
20
+ * selects all columns.
21
+ * @returns Mosaic query used to infer Arrow field metadata from the table.
22
+ */
23
+ export declare function buildSchemaQuery(tableName: DataTableExplorerSqlTableReference, columns?: string[]): ReturnType<typeof Query.from>;
15
24
  export declare function fieldInfoToDataTableExplorerField(info: FieldInfo): arrow.Field;
25
+ /**
26
+ * Builds the base dataTableExplorer query before pagination is applied.
27
+ *
28
+ * @param args.columns Optional selected column names; when omitted, all columns
29
+ * are selected.
30
+ * @param args.filter Optional Mosaic where clause or clause array.
31
+ * @param args.sorting Optional sort descriptors applied in order.
32
+ * @param args.tableName Table reference to query. This accepts
33
+ * DataTableExplorerSqlTableReference so callers can pass TableRefNode values
34
+ * that preserve qualified identifier boundaries.
35
+ * @returns Mosaic query with projection, filtering, and sorting applied.
36
+ */
16
37
  export declare function buildDataTableExplorerBaseQuery(args: {
17
38
  columns?: string[];
18
39
  filter?: QueryWhereInput;
19
40
  sorting?: DataTableExplorerSorting;
20
- tableName: string;
41
+ tableName: DataTableExplorerSqlTableReference;
21
42
  }): import("@uwdata/mosaic-sql").SelectQuery;
43
+ /**
44
+ * Applies normalized dataTableExplorer pagination to a base query.
45
+ *
46
+ * @param baseQuery Query returned by buildDataTableExplorerBaseQuery.
47
+ * @param pagination Requested page index and page size.
48
+ * @returns A cloned Mosaic query with limit and offset applied.
49
+ */
22
50
  export declare function buildDataTableExplorerPageQuery(baseQuery: ReturnType<typeof buildDataTableExplorerBaseQuery>, pagination: DataTableExplorerPaginationState): import("@uwdata/mosaic-sql").SelectQuery;
23
51
  export declare function normalizeDataTableExplorerPagination(pagination: Partial<DataTableExplorerPaginationState> | undefined): DataTableExplorerPaginationState;
52
+ /**
53
+ * Builds a row-count query for a dataTableExplorer table.
54
+ *
55
+ * @param args.filter Optional Mosaic where clause or clause array.
56
+ * @param args.tableName Table reference to query. Pass a TableRefNode for
57
+ * qualified references that should not be reparsed from a string.
58
+ * @returns Mosaic query that returns a single count column.
59
+ */
24
60
  export declare function buildCountQuery(args: {
25
61
  filter?: QueryWhereInput;
26
- tableName: string;
62
+ tableName: DataTableExplorerSqlTableReference;
27
63
  }): import("@uwdata/mosaic-sql").SelectQuery;
64
+ /**
65
+ * Builds a distinct-value count query for one dataTableExplorer field.
66
+ *
67
+ * @param args.filter Optional Mosaic where clause or clause array.
68
+ * @param args.fieldName Field whose distinct non-null values should be counted.
69
+ * @param args.tableName Table reference to query. Pass a TableRefNode for
70
+ * qualified references that should not be reparsed from a string.
71
+ * @returns Mosaic query that returns a single distinct count column.
72
+ */
28
73
  export declare function buildDistinctCountQuery(args: {
29
74
  filter?: QueryWhereInput;
30
75
  fieldName: string;
31
- tableName: string;
76
+ tableName: DataTableExplorerSqlTableReference;
32
77
  }): import("@uwdata/mosaic-sql").SelectQuery;
33
78
  export declare function readCountData(data: unknown): number | undefined;
34
79
  export declare function rowsFromQueryResult<T>(data: unknown): T[];
35
- export declare function buildCategorySummaryQuery(tableName: string, fieldName: string, filter?: QueryWhereInput): import("@uwdata/mosaic-sql").SelectQuery;
80
+ /**
81
+ * Builds the category summary query used by dataTableExplorer categorical
82
+ * columns.
83
+ *
84
+ * @param tableName Table reference to query. This accepts
85
+ * DataTableExplorerSqlTableReference so callers can use TableRefNode when
86
+ * identifier boundaries must be preserved.
87
+ * @param fieldName Field to summarize into value, null, unique, and overflow
88
+ * buckets.
89
+ * @param filter Optional Mosaic where clause or clause array.
90
+ * @returns Mosaic query that produces bucket kind, typed value, and total count
91
+ * rows for category summaries.
92
+ */
93
+ export declare function buildCategorySummaryQuery(tableName: DataTableExplorerSqlTableReference, fieldName: string, filter?: QueryWhereInput): import("@uwdata/mosaic-sql").SelectQuery;
36
94
  export declare function splitHistogramBins(rows: Array<{
37
95
  x1: DataTableExplorerBin['x0'] | null;
38
96
  x2: DataTableExplorerBin['x1'] | null;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/data-table-explorer/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/data-table-explorer/utils.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,15 @@ export function getDataTableExplorerValueType(type) {
22
22
  }
23
23
  return 'string';
24
24
  }
25
+ /**
26
+ * Builds a one-row schema probe query for a dataTableExplorer table.
27
+ *
28
+ * @param tableName Table reference to query. Pass a TableRefNode when the table
29
+ * reference is qualified or contains dotted identifier parts.
30
+ * @param columns Optional list of columns to include; when omitted, the query
31
+ * selects all columns.
32
+ * @returns Mosaic query used to infer Arrow field metadata from the table.
33
+ */
25
34
  export function buildSchemaQuery(tableName, columns) {
26
35
  return Query.from(tableName)
27
36
  .select(columns?.length ? columns.map((name) => column(name)) : ['*'])
@@ -62,6 +71,18 @@ function createDataTableExplorerArrowType(sqlType) {
62
71
  export function fieldInfoToDataTableExplorerField(info) {
63
72
  return new arrow.Field(info.column, createDataTableExplorerArrowType(info.sqlType), info.nullable);
64
73
  }
74
+ /**
75
+ * Builds the base dataTableExplorer query before pagination is applied.
76
+ *
77
+ * @param args.columns Optional selected column names; when omitted, all columns
78
+ * are selected.
79
+ * @param args.filter Optional Mosaic where clause or clause array.
80
+ * @param args.sorting Optional sort descriptors applied in order.
81
+ * @param args.tableName Table reference to query. This accepts
82
+ * DataTableExplorerSqlTableReference so callers can pass TableRefNode values
83
+ * that preserve qualified identifier boundaries.
84
+ * @returns Mosaic query with projection, filtering, and sorting applied.
85
+ */
65
86
  export function buildDataTableExplorerBaseQuery(args) {
66
87
  const { columns, filter, sorting, tableName } = args;
67
88
  const query = Query.from(tableName)
@@ -72,6 +93,13 @@ export function buildDataTableExplorerBaseQuery(args) {
72
93
  }
73
94
  return query;
74
95
  }
96
+ /**
97
+ * Applies normalized dataTableExplorer pagination to a base query.
98
+ *
99
+ * @param baseQuery Query returned by buildDataTableExplorerBaseQuery.
100
+ * @param pagination Requested page index and page size.
101
+ * @returns A cloned Mosaic query with limit and offset applied.
102
+ */
75
103
  export function buildDataTableExplorerPageQuery(baseQuery, pagination) {
76
104
  const { pageIndex, pageSize } = normalizeDataTableExplorerPagination(pagination);
77
105
  return baseQuery
@@ -84,11 +112,28 @@ export function normalizeDataTableExplorerPagination(pagination) {
84
112
  const pageIndex = Math.max(0, Math.trunc(Number(pagination?.pageIndex) || 0));
85
113
  return { pageIndex, pageSize };
86
114
  }
115
+ /**
116
+ * Builds a row-count query for a dataTableExplorer table.
117
+ *
118
+ * @param args.filter Optional Mosaic where clause or clause array.
119
+ * @param args.tableName Table reference to query. Pass a TableRefNode for
120
+ * qualified references that should not be reparsed from a string.
121
+ * @returns Mosaic query that returns a single count column.
122
+ */
87
123
  export function buildCountQuery(args) {
88
124
  return Query.from(args.tableName)
89
125
  .select({ count: count() })
90
126
  .where(args.filter ?? []);
91
127
  }
128
+ /**
129
+ * Builds a distinct-value count query for one dataTableExplorer field.
130
+ *
131
+ * @param args.filter Optional Mosaic where clause or clause array.
132
+ * @param args.fieldName Field whose distinct non-null values should be counted.
133
+ * @param args.tableName Table reference to query. Pass a TableRefNode for
134
+ * qualified references that should not be reparsed from a string.
135
+ * @returns Mosaic query that returns a single distinct count column.
136
+ */
92
137
  export function buildDistinctCountQuery(args) {
93
138
  return Query.from(args.tableName)
94
139
  .select({
@@ -117,6 +162,19 @@ export function rowsFromQueryResult(data) {
117
162
  }
118
163
  return Array.from(data.toArray());
119
164
  }
165
+ /**
166
+ * Builds the category summary query used by dataTableExplorer categorical
167
+ * columns.
168
+ *
169
+ * @param tableName Table reference to query. This accepts
170
+ * DataTableExplorerSqlTableReference so callers can use TableRefNode when
171
+ * identifier boundaries must be preserved.
172
+ * @param fieldName Field to summarize into value, null, unique, and overflow
173
+ * buckets.
174
+ * @param filter Optional Mosaic where clause or clause array.
175
+ * @returns Mosaic query that produces bucket kind, typed value, and total count
176
+ * rows for category summaries.
177
+ */
120
178
  export function buildCategorySummaryQuery(tableName, fieldName, filter) {
121
179
  const col = column(fieldName);
122
180
  const counts = Query.from({ source: tableName })
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/data-table-explorer/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import type {FieldInfo} from '@uwdata/mosaic-core';\nimport {asc, column, count, desc, Query, sql, sum} from '@uwdata/mosaic-sql';\nimport * as arrow from 'apache-arrow';\nimport type {\n DataTableExplorerBin,\n DataTableExplorerCategoryBucket,\n DataTableExplorerPaginationState,\n DataTableExplorerSorting,\n DataTableExplorerSummaryState,\n} from './types';\n\nexport type CategoryCountRow = {\n bucketKind: 'null' | 'unique' | 'value';\n total: number;\n typedValue: unknown;\n};\n\ntype QueryWhereInput = Parameters<ReturnType<typeof Query.from>['where']>[0];\n\nexport function isDataTableExplorerHistogramType(\n type: arrow.DataType,\n): boolean {\n return (\n arrow.DataType.isDate(type) ||\n arrow.DataType.isTimestamp(type) ||\n arrow.DataType.isDecimal(type) ||\n arrow.DataType.isFloat(type) ||\n arrow.DataType.isInt(type)\n );\n}\n\nexport function isDataTableExplorerUnsupportedSummaryType(\n type: arrow.DataType,\n): boolean {\n return (\n arrow.DataType.isBinary(type) ||\n type.toString().toLowerCase().includes('geometry')\n );\n}\n\nexport function getDataTableExplorerValueType(\n type: arrow.DataType,\n): 'date' | 'number' | 'string' {\n if (arrow.DataType.isDate(type) || arrow.DataType.isTimestamp(type)) {\n return 'date';\n }\n if (\n arrow.DataType.isDecimal(type) ||\n arrow.DataType.isFloat(type) ||\n arrow.DataType.isInt(type)\n ) {\n return 'number';\n }\n return 'string';\n}\n\nexport function buildSchemaQuery(\n tableName: string,\n columns?: string[],\n): ReturnType<typeof Query.from> {\n return Query.from(tableName)\n .select(columns?.length ? columns.map((name) => column(name)) : ['*'])\n .limit(1);\n}\n\nfunction createDataTableExplorerArrowType(sqlType: string): arrow.DataType {\n const type = sqlType.toLowerCase();\n\n if (/^bool(ean)?/.test(type)) {\n return new arrow.Bool();\n }\n\n if (/^date$/.test(type)) {\n return new arrow.DateDay();\n }\n\n if (/^time$|^timestamp|^timestamptz/.test(type)) {\n return new arrow.TimestampMillisecond();\n }\n\n if (\n /^(tinyint|smallint|integer|bigint|hugeint|utinyint|usmallint|uinteger|ubigint|uhugeint)/.test(\n type,\n )\n ) {\n return new arrow.Int64();\n }\n\n if (/^(decimal|numeric)/.test(type)) {\n return new arrow.Decimal(38, 9);\n }\n\n if (/^(double|float|real)/.test(type)) {\n return new arrow.Float64();\n }\n\n if (/^(blob|bytea|binary|varbinary)/.test(type)) {\n return new arrow.Binary();\n }\n\n if (/^geometry/.test(type)) {\n return {\n toString() {\n return sqlType;\n },\n } as arrow.DataType;\n }\n\n return new arrow.Utf8();\n}\n\nexport function fieldInfoToDataTableExplorerField(\n info: FieldInfo,\n): arrow.Field {\n return new arrow.Field(\n info.column,\n createDataTableExplorerArrowType(info.sqlType),\n info.nullable,\n );\n}\n\nexport function buildDataTableExplorerBaseQuery(args: {\n columns?: string[];\n filter?: QueryWhereInput;\n sorting?: DataTableExplorerSorting;\n tableName: string;\n}) {\n const {columns, filter, sorting, tableName} = args;\n const query = Query.from(tableName)\n .select(columns?.length ? columns.map((name) => column(name)) : ['*'])\n .where(filter ?? []);\n\n if (sorting?.length) {\n query.orderby(\n sorting.map((entry) => (entry.desc ? desc(entry.id) : asc(entry.id))),\n );\n }\n\n return query;\n}\n\nexport function buildDataTableExplorerPageQuery(\n baseQuery: ReturnType<typeof buildDataTableExplorerBaseQuery>,\n pagination: DataTableExplorerPaginationState,\n) {\n const {pageIndex, pageSize} =\n normalizeDataTableExplorerPagination(pagination);\n\n return baseQuery\n .clone()\n .limit(pageSize)\n .offset(pageIndex * pageSize);\n}\n\nexport function normalizeDataTableExplorerPagination(\n pagination: Partial<DataTableExplorerPaginationState> | undefined,\n): DataTableExplorerPaginationState {\n const pageSize = Math.min(\n 1000,\n Math.max(1, Math.trunc(Number(pagination?.pageSize) || 0) || 100),\n );\n const pageIndex = Math.max(0, Math.trunc(Number(pagination?.pageIndex) || 0));\n\n return {pageIndex, pageSize};\n}\n\nexport function buildCountQuery(args: {\n filter?: QueryWhereInput;\n tableName: string;\n}) {\n return Query.from(args.tableName)\n .select({count: count()})\n .where(args.filter ?? []);\n}\n\nexport function buildDistinctCountQuery(args: {\n filter?: QueryWhereInput;\n fieldName: string;\n tableName: string;\n}) {\n return Query.from(args.tableName)\n .select({\n count: count(column(args.fieldName)).distinct(),\n })\n .where(args.filter ?? []);\n}\n\nexport function readCountData(data: unknown): number | undefined {\n if (!data || typeof data !== 'object') {\n return undefined;\n }\n\n if ('toArray' in data && typeof data.toArray === 'function') {\n return (data.toArray() as Array<{count?: number}>)[0]?.count;\n }\n\n if ('get' in data && typeof data.get === 'function') {\n return (data.get(0) as {count?: number} | undefined)?.count;\n }\n\n return undefined;\n}\n\nexport function rowsFromQueryResult<T>(data: unknown): T[] {\n if (\n !data ||\n typeof data !== 'object' ||\n !('toArray' in data) ||\n typeof (data as {toArray?: unknown}).toArray !== 'function'\n ) {\n return [];\n }\n\n return Array.from((data as {toArray(): T[]}).toArray());\n}\n\nexport function buildCategorySummaryQuery(\n tableName: string,\n fieldName: string,\n filter?: QueryWhereInput,\n) {\n const col = column(fieldName);\n const counts = Query.from({source: tableName})\n .select({\n bucket_kind: sql`CASE\n WHEN ${col} IS NULL THEN 'null'\n ELSE 'value'\n END`,\n typed_value: col,\n count: count(),\n })\n .groupby([\n sql`CASE\n WHEN ${col} IS NULL THEN 'null'\n ELSE 'value'\n END`,\n col,\n ])\n .where(filter ?? []);\n\n return Query.with({counts})\n .select({\n bucketKind: sql`CASE\n WHEN \"count\" = 1 AND \"bucket_kind\" = 'value' THEN 'unique'\n ELSE \"bucket_kind\"\n END`,\n typedValue: sql`CASE\n WHEN \"count\" = 1 AND \"bucket_kind\" = 'value' THEN NULL\n ELSE \"typed_value\"\n END`,\n total: sum('count'),\n })\n .from('counts')\n .groupby([\n sql`CASE\n WHEN \"count\" = 1 AND \"bucket_kind\" = 'value' THEN 'unique'\n ELSE \"bucket_kind\"\n END`,\n sql`CASE\n WHEN \"count\" = 1 AND \"bucket_kind\" = 'value' THEN NULL\n ELSE \"typed_value\"\n END`,\n ]);\n}\n\nexport function splitHistogramBins(\n rows: Array<{\n x1: DataTableExplorerBin['x0'] | null;\n x2: DataTableExplorerBin['x1'] | null;\n y: number;\n }>,\n) {\n let nullCount = 0;\n const bins: DataTableExplorerBin[] = [];\n\n for (const row of rows) {\n if (row.x1 == null || row.x2 == null) {\n nullCount += row.y;\n continue;\n }\n\n bins.push({\n x0: row.x1,\n x1: row.x2,\n length: row.y,\n });\n }\n\n bins.sort((left, right) => {\n const leftValue = left.x0 instanceof Date ? left.x0.getTime() : left.x0;\n const rightValue = right.x0 instanceof Date ? right.x0.getTime() : right.x0;\n return leftValue - rightValue;\n });\n\n return {bins, nullCount};\n}\n\nexport function buildCategoryBuckets(\n filteredRows: CategoryCountRow[],\n totalRows: CategoryCountRow[],\n categoryLimit: number,\n selectedKey?: string,\n) {\n const totalByKey = new Map(\n totalRows.map((row) => [serializeCategoryBucketKey(row), row.total]),\n );\n const filteredByKey = new Map(\n filteredRows.map((row) => [serializeCategoryBucketKey(row), row.total]),\n );\n\n const baseRows = totalRows\n .filter((row) => row.bucketKind === 'value')\n .slice()\n .sort(\n (left: CategoryCountRow, right: CategoryCountRow) =>\n right.total - left.total,\n );\n\n const visibleRows = baseRows.slice(0, categoryLimit);\n const overflowRows = baseRows.slice(categoryLimit);\n const buckets: DataTableExplorerCategoryBucket[] = visibleRows.map((row) => ({\n filteredCount: filteredByKey.get(serializeCategoryBucketKey(row)) ?? 0,\n key: serializeCategoryBucketKey(row),\n kind: 'value',\n label: String(row.typedValue),\n selectable: true,\n totalCount: row.total,\n }));\n\n const overflowTotalCount = overflowRows.reduce(\n (acc: number, row: CategoryCountRow) => acc + row.total,\n 0,\n );\n const overflowFilteredCount = overflowRows.reduce(\n (acc: number, row: CategoryCountRow) =>\n acc + (filteredByKey.get(serializeCategoryBucketKey(row)) ?? 0),\n 0,\n );\n if (overflowTotalCount > 0) {\n buckets.push({\n filteredCount: overflowFilteredCount,\n key: serializeCategoryBucketKey({\n bucketKind: 'unique',\n typedValue: '__sqlrooms_overflow__',\n }),\n kind: 'overflow',\n label: `${overflowRows.length} more`,\n selectable: false,\n totalCount: overflowTotalCount,\n });\n }\n\n const uniqueKey = serializeCategoryBucketKey({\n bucketKind: 'unique',\n typedValue: null,\n });\n const uniqueTotalCount = totalByKey.get(uniqueKey) ?? 0;\n if (uniqueTotalCount > 0) {\n buckets.push({\n filteredCount: filteredByKey.get(uniqueKey) ?? 0,\n key: uniqueKey,\n kind: 'unique',\n label: 'unique',\n selectable: false,\n totalCount: uniqueTotalCount,\n });\n }\n\n const nullKey = serializeCategoryBucketKey({\n bucketKind: 'null',\n typedValue: null,\n });\n const nullTotalCount = totalByKey.get(nullKey) ?? 0;\n if (nullTotalCount > 0) {\n buckets.push({\n filteredCount: filteredByKey.get(nullKey) ?? 0,\n key: nullKey,\n kind: 'null',\n label: 'null',\n selectable: true,\n totalCount: nullTotalCount,\n });\n }\n\n return {\n bucketCount: filteredRows.length,\n buckets,\n selectedKey,\n };\n}\n\nexport function isSelectableCategoryKey(key: string) {\n const parsedKey = parseCategoryBucketKey(key);\n return (\n parsedKey?.bucketKind !== 'unique' &&\n parsedKey?.typedValue !== '__sqlrooms_overflow__'\n );\n}\n\nexport function categoryKeyToSelectionValue(key?: string) {\n if (key === undefined) return undefined;\n const parsedKey = parseCategoryBucketKey(key);\n if (!parsedKey || parsedKey.bucketKind === 'unique') {\n return undefined;\n }\n return parsedKey.bucketKind === 'null' ? null : parsedKey.typedValue;\n}\n\nfunction normalizeCategoryBucketValue(value: unknown): unknown {\n if (value instanceof Date) {\n return {\n type: 'date',\n value: value.toISOString(),\n };\n }\n if (typeof value === 'bigint') {\n return {\n type: 'bigint',\n value: value.toString(),\n };\n }\n return value;\n}\n\nfunction denormalizeCategoryBucketValue(value: unknown): unknown {\n if (!value || typeof value !== 'object') {\n return value;\n }\n\n if (\n 'type' in value &&\n 'value' in value &&\n value.type === 'date' &&\n typeof value.value === 'string'\n ) {\n return new Date(value.value);\n }\n\n if (\n 'type' in value &&\n 'value' in value &&\n value.type === 'bigint' &&\n typeof value.value === 'string'\n ) {\n return BigInt(value.value);\n }\n\n return value;\n}\n\nexport function serializeCategoryBucketKey(row: {\n bucketKind: CategoryCountRow['bucketKind'];\n typedValue: unknown;\n}) {\n return JSON.stringify([\n row.bucketKind,\n normalizeCategoryBucketValue(row.typedValue),\n ]);\n}\n\nexport function parseCategoryBucketKey(key: string):\n | {\n bucketKind: CategoryCountRow['bucketKind'];\n typedValue: unknown;\n }\n | undefined {\n try {\n const parsed = JSON.parse(key) as [CategoryCountRow['bucketKind'], unknown];\n if (!Array.isArray(parsed) || parsed.length !== 2) {\n return undefined;\n }\n\n return {\n bucketKind: parsed[0],\n typedValue: denormalizeCategoryBucketValue(parsed[1]),\n };\n } catch {\n return undefined;\n }\n}\n\nexport function createEmptySummaryState(\n field: arrow.Field,\n): DataTableExplorerSummaryState {\n if (isDataTableExplorerUnsupportedSummaryType(field.type)) {\n return {\n isLoading: false,\n kind: 'unsupported',\n label: 'No summary',\n };\n }\n\n return isDataTableExplorerHistogramType(field.type)\n ? {\n filteredBins: [],\n filteredNullCount: 0,\n interactor: null,\n isLoading: true,\n kind: 'histogram',\n totalBins: [],\n totalNullCount: 0,\n valueType:\n getDataTableExplorerValueType(field.type) === 'date'\n ? 'date'\n : 'number',\n }\n : {\n bucketCount: 0,\n buckets: [],\n isLoading: true,\n kind: 'category',\n toggleValue: () => {},\n };\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/data-table-explorer/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import type {FieldInfo} from '@uwdata/mosaic-core';\nimport {asc, column, count, desc, Query, sql, sum} from '@uwdata/mosaic-sql';\nimport * as arrow from 'apache-arrow';\nimport type {\n DataTableExplorerBin,\n DataTableExplorerCategoryBucket,\n DataTableExplorerPaginationState,\n DataTableExplorerSqlTableReference,\n DataTableExplorerSorting,\n DataTableExplorerSummaryState,\n} from './types';\n\nexport type CategoryCountRow = {\n bucketKind: 'null' | 'unique' | 'value';\n total: number;\n typedValue: unknown;\n};\n\ntype QueryWhereInput = Parameters<ReturnType<typeof Query.from>['where']>[0];\n\nexport function isDataTableExplorerHistogramType(\n type: arrow.DataType,\n): boolean {\n return (\n arrow.DataType.isDate(type) ||\n arrow.DataType.isTimestamp(type) ||\n arrow.DataType.isDecimal(type) ||\n arrow.DataType.isFloat(type) ||\n arrow.DataType.isInt(type)\n );\n}\n\nexport function isDataTableExplorerUnsupportedSummaryType(\n type: arrow.DataType,\n): boolean {\n return (\n arrow.DataType.isBinary(type) ||\n type.toString().toLowerCase().includes('geometry')\n );\n}\n\nexport function getDataTableExplorerValueType(\n type: arrow.DataType,\n): 'date' | 'number' | 'string' {\n if (arrow.DataType.isDate(type) || arrow.DataType.isTimestamp(type)) {\n return 'date';\n }\n if (\n arrow.DataType.isDecimal(type) ||\n arrow.DataType.isFloat(type) ||\n arrow.DataType.isInt(type)\n ) {\n return 'number';\n }\n return 'string';\n}\n\n/**\n * Builds a one-row schema probe query for a dataTableExplorer table.\n *\n * @param tableName Table reference to query. Pass a TableRefNode when the table\n * reference is qualified or contains dotted identifier parts.\n * @param columns Optional list of columns to include; when omitted, the query\n * selects all columns.\n * @returns Mosaic query used to infer Arrow field metadata from the table.\n */\nexport function buildSchemaQuery(\n tableName: DataTableExplorerSqlTableReference,\n columns?: string[],\n): ReturnType<typeof Query.from> {\n return Query.from(tableName)\n .select(columns?.length ? columns.map((name) => column(name)) : ['*'])\n .limit(1);\n}\n\nfunction createDataTableExplorerArrowType(sqlType: string): arrow.DataType {\n const type = sqlType.toLowerCase();\n\n if (/^bool(ean)?/.test(type)) {\n return new arrow.Bool();\n }\n\n if (/^date$/.test(type)) {\n return new arrow.DateDay();\n }\n\n if (/^time$|^timestamp|^timestamptz/.test(type)) {\n return new arrow.TimestampMillisecond();\n }\n\n if (\n /^(tinyint|smallint|integer|bigint|hugeint|utinyint|usmallint|uinteger|ubigint|uhugeint)/.test(\n type,\n )\n ) {\n return new arrow.Int64();\n }\n\n if (/^(decimal|numeric)/.test(type)) {\n return new arrow.Decimal(38, 9);\n }\n\n if (/^(double|float|real)/.test(type)) {\n return new arrow.Float64();\n }\n\n if (/^(blob|bytea|binary|varbinary)/.test(type)) {\n return new arrow.Binary();\n }\n\n if (/^geometry/.test(type)) {\n return {\n toString() {\n return sqlType;\n },\n } as arrow.DataType;\n }\n\n return new arrow.Utf8();\n}\n\nexport function fieldInfoToDataTableExplorerField(\n info: FieldInfo,\n): arrow.Field {\n return new arrow.Field(\n info.column,\n createDataTableExplorerArrowType(info.sqlType),\n info.nullable,\n );\n}\n\n/**\n * Builds the base dataTableExplorer query before pagination is applied.\n *\n * @param args.columns Optional selected column names; when omitted, all columns\n * are selected.\n * @param args.filter Optional Mosaic where clause or clause array.\n * @param args.sorting Optional sort descriptors applied in order.\n * @param args.tableName Table reference to query. This accepts\n * DataTableExplorerSqlTableReference so callers can pass TableRefNode values\n * that preserve qualified identifier boundaries.\n * @returns Mosaic query with projection, filtering, and sorting applied.\n */\nexport function buildDataTableExplorerBaseQuery(args: {\n columns?: string[];\n filter?: QueryWhereInput;\n sorting?: DataTableExplorerSorting;\n tableName: DataTableExplorerSqlTableReference;\n}) {\n const {columns, filter, sorting, tableName} = args;\n const query = Query.from(tableName)\n .select(columns?.length ? columns.map((name) => column(name)) : ['*'])\n .where(filter ?? []);\n\n if (sorting?.length) {\n query.orderby(\n sorting.map((entry) => (entry.desc ? desc(entry.id) : asc(entry.id))),\n );\n }\n\n return query;\n}\n\n/**\n * Applies normalized dataTableExplorer pagination to a base query.\n *\n * @param baseQuery Query returned by buildDataTableExplorerBaseQuery.\n * @param pagination Requested page index and page size.\n * @returns A cloned Mosaic query with limit and offset applied.\n */\nexport function buildDataTableExplorerPageQuery(\n baseQuery: ReturnType<typeof buildDataTableExplorerBaseQuery>,\n pagination: DataTableExplorerPaginationState,\n) {\n const {pageIndex, pageSize} =\n normalizeDataTableExplorerPagination(pagination);\n\n return baseQuery\n .clone()\n .limit(pageSize)\n .offset(pageIndex * pageSize);\n}\n\nexport function normalizeDataTableExplorerPagination(\n pagination: Partial<DataTableExplorerPaginationState> | undefined,\n): DataTableExplorerPaginationState {\n const pageSize = Math.min(\n 1000,\n Math.max(1, Math.trunc(Number(pagination?.pageSize) || 0) || 100),\n );\n const pageIndex = Math.max(0, Math.trunc(Number(pagination?.pageIndex) || 0));\n\n return {pageIndex, pageSize};\n}\n\n/**\n * Builds a row-count query for a dataTableExplorer table.\n *\n * @param args.filter Optional Mosaic where clause or clause array.\n * @param args.tableName Table reference to query. Pass a TableRefNode for\n * qualified references that should not be reparsed from a string.\n * @returns Mosaic query that returns a single count column.\n */\nexport function buildCountQuery(args: {\n filter?: QueryWhereInput;\n tableName: DataTableExplorerSqlTableReference;\n}) {\n return Query.from(args.tableName)\n .select({count: count()})\n .where(args.filter ?? []);\n}\n\n/**\n * Builds a distinct-value count query for one dataTableExplorer field.\n *\n * @param args.filter Optional Mosaic where clause or clause array.\n * @param args.fieldName Field whose distinct non-null values should be counted.\n * @param args.tableName Table reference to query. Pass a TableRefNode for\n * qualified references that should not be reparsed from a string.\n * @returns Mosaic query that returns a single distinct count column.\n */\nexport function buildDistinctCountQuery(args: {\n filter?: QueryWhereInput;\n fieldName: string;\n tableName: DataTableExplorerSqlTableReference;\n}) {\n return Query.from(args.tableName)\n .select({\n count: count(column(args.fieldName)).distinct(),\n })\n .where(args.filter ?? []);\n}\n\nexport function readCountData(data: unknown): number | undefined {\n if (!data || typeof data !== 'object') {\n return undefined;\n }\n\n if ('toArray' in data && typeof data.toArray === 'function') {\n return (data.toArray() as Array<{count?: number}>)[0]?.count;\n }\n\n if ('get' in data && typeof data.get === 'function') {\n return (data.get(0) as {count?: number} | undefined)?.count;\n }\n\n return undefined;\n}\n\nexport function rowsFromQueryResult<T>(data: unknown): T[] {\n if (\n !data ||\n typeof data !== 'object' ||\n !('toArray' in data) ||\n typeof (data as {toArray?: unknown}).toArray !== 'function'\n ) {\n return [];\n }\n\n return Array.from((data as {toArray(): T[]}).toArray());\n}\n\n/**\n * Builds the category summary query used by dataTableExplorer categorical\n * columns.\n *\n * @param tableName Table reference to query. This accepts\n * DataTableExplorerSqlTableReference so callers can use TableRefNode when\n * identifier boundaries must be preserved.\n * @param fieldName Field to summarize into value, null, unique, and overflow\n * buckets.\n * @param filter Optional Mosaic where clause or clause array.\n * @returns Mosaic query that produces bucket kind, typed value, and total count\n * rows for category summaries.\n */\nexport function buildCategorySummaryQuery(\n tableName: DataTableExplorerSqlTableReference,\n fieldName: string,\n filter?: QueryWhereInput,\n) {\n const col = column(fieldName);\n const counts = Query.from({source: tableName})\n .select({\n bucket_kind: sql`CASE\n WHEN ${col} IS NULL THEN 'null'\n ELSE 'value'\n END`,\n typed_value: col,\n count: count(),\n })\n .groupby([\n sql`CASE\n WHEN ${col} IS NULL THEN 'null'\n ELSE 'value'\n END`,\n col,\n ])\n .where(filter ?? []);\n\n return Query.with({counts})\n .select({\n bucketKind: sql`CASE\n WHEN \"count\" = 1 AND \"bucket_kind\" = 'value' THEN 'unique'\n ELSE \"bucket_kind\"\n END`,\n typedValue: sql`CASE\n WHEN \"count\" = 1 AND \"bucket_kind\" = 'value' THEN NULL\n ELSE \"typed_value\"\n END`,\n total: sum('count'),\n })\n .from('counts')\n .groupby([\n sql`CASE\n WHEN \"count\" = 1 AND \"bucket_kind\" = 'value' THEN 'unique'\n ELSE \"bucket_kind\"\n END`,\n sql`CASE\n WHEN \"count\" = 1 AND \"bucket_kind\" = 'value' THEN NULL\n ELSE \"typed_value\"\n END`,\n ]);\n}\n\nexport function splitHistogramBins(\n rows: Array<{\n x1: DataTableExplorerBin['x0'] | null;\n x2: DataTableExplorerBin['x1'] | null;\n y: number;\n }>,\n) {\n let nullCount = 0;\n const bins: DataTableExplorerBin[] = [];\n\n for (const row of rows) {\n if (row.x1 == null || row.x2 == null) {\n nullCount += row.y;\n continue;\n }\n\n bins.push({\n x0: row.x1,\n x1: row.x2,\n length: row.y,\n });\n }\n\n bins.sort((left, right) => {\n const leftValue = left.x0 instanceof Date ? left.x0.getTime() : left.x0;\n const rightValue = right.x0 instanceof Date ? right.x0.getTime() : right.x0;\n return leftValue - rightValue;\n });\n\n return {bins, nullCount};\n}\n\nexport function buildCategoryBuckets(\n filteredRows: CategoryCountRow[],\n totalRows: CategoryCountRow[],\n categoryLimit: number,\n selectedKey?: string,\n) {\n const totalByKey = new Map(\n totalRows.map((row) => [serializeCategoryBucketKey(row), row.total]),\n );\n const filteredByKey = new Map(\n filteredRows.map((row) => [serializeCategoryBucketKey(row), row.total]),\n );\n\n const baseRows = totalRows\n .filter((row) => row.bucketKind === 'value')\n .slice()\n .sort(\n (left: CategoryCountRow, right: CategoryCountRow) =>\n right.total - left.total,\n );\n\n const visibleRows = baseRows.slice(0, categoryLimit);\n const overflowRows = baseRows.slice(categoryLimit);\n const buckets: DataTableExplorerCategoryBucket[] = visibleRows.map((row) => ({\n filteredCount: filteredByKey.get(serializeCategoryBucketKey(row)) ?? 0,\n key: serializeCategoryBucketKey(row),\n kind: 'value',\n label: String(row.typedValue),\n selectable: true,\n totalCount: row.total,\n }));\n\n const overflowTotalCount = overflowRows.reduce(\n (acc: number, row: CategoryCountRow) => acc + row.total,\n 0,\n );\n const overflowFilteredCount = overflowRows.reduce(\n (acc: number, row: CategoryCountRow) =>\n acc + (filteredByKey.get(serializeCategoryBucketKey(row)) ?? 0),\n 0,\n );\n if (overflowTotalCount > 0) {\n buckets.push({\n filteredCount: overflowFilteredCount,\n key: serializeCategoryBucketKey({\n bucketKind: 'unique',\n typedValue: '__sqlrooms_overflow__',\n }),\n kind: 'overflow',\n label: `${overflowRows.length} more`,\n selectable: false,\n totalCount: overflowTotalCount,\n });\n }\n\n const uniqueKey = serializeCategoryBucketKey({\n bucketKind: 'unique',\n typedValue: null,\n });\n const uniqueTotalCount = totalByKey.get(uniqueKey) ?? 0;\n if (uniqueTotalCount > 0) {\n buckets.push({\n filteredCount: filteredByKey.get(uniqueKey) ?? 0,\n key: uniqueKey,\n kind: 'unique',\n label: 'unique',\n selectable: false,\n totalCount: uniqueTotalCount,\n });\n }\n\n const nullKey = serializeCategoryBucketKey({\n bucketKind: 'null',\n typedValue: null,\n });\n const nullTotalCount = totalByKey.get(nullKey) ?? 0;\n if (nullTotalCount > 0) {\n buckets.push({\n filteredCount: filteredByKey.get(nullKey) ?? 0,\n key: nullKey,\n kind: 'null',\n label: 'null',\n selectable: true,\n totalCount: nullTotalCount,\n });\n }\n\n return {\n bucketCount: filteredRows.length,\n buckets,\n selectedKey,\n };\n}\n\nexport function isSelectableCategoryKey(key: string) {\n const parsedKey = parseCategoryBucketKey(key);\n return (\n parsedKey?.bucketKind !== 'unique' &&\n parsedKey?.typedValue !== '__sqlrooms_overflow__'\n );\n}\n\nexport function categoryKeyToSelectionValue(key?: string) {\n if (key === undefined) return undefined;\n const parsedKey = parseCategoryBucketKey(key);\n if (!parsedKey || parsedKey.bucketKind === 'unique') {\n return undefined;\n }\n return parsedKey.bucketKind === 'null' ? null : parsedKey.typedValue;\n}\n\nfunction normalizeCategoryBucketValue(value: unknown): unknown {\n if (value instanceof Date) {\n return {\n type: 'date',\n value: value.toISOString(),\n };\n }\n if (typeof value === 'bigint') {\n return {\n type: 'bigint',\n value: value.toString(),\n };\n }\n return value;\n}\n\nfunction denormalizeCategoryBucketValue(value: unknown): unknown {\n if (!value || typeof value !== 'object') {\n return value;\n }\n\n if (\n 'type' in value &&\n 'value' in value &&\n value.type === 'date' &&\n typeof value.value === 'string'\n ) {\n return new Date(value.value);\n }\n\n if (\n 'type' in value &&\n 'value' in value &&\n value.type === 'bigint' &&\n typeof value.value === 'string'\n ) {\n return BigInt(value.value);\n }\n\n return value;\n}\n\nexport function serializeCategoryBucketKey(row: {\n bucketKind: CategoryCountRow['bucketKind'];\n typedValue: unknown;\n}) {\n return JSON.stringify([\n row.bucketKind,\n normalizeCategoryBucketValue(row.typedValue),\n ]);\n}\n\nexport function parseCategoryBucketKey(key: string):\n | {\n bucketKind: CategoryCountRow['bucketKind'];\n typedValue: unknown;\n }\n | undefined {\n try {\n const parsed = JSON.parse(key) as [CategoryCountRow['bucketKind'], unknown];\n if (!Array.isArray(parsed) || parsed.length !== 2) {\n return undefined;\n }\n\n return {\n bucketKind: parsed[0],\n typedValue: denormalizeCategoryBucketValue(parsed[1]),\n };\n } catch {\n return undefined;\n }\n}\n\nexport function createEmptySummaryState(\n field: arrow.Field,\n): DataTableExplorerSummaryState {\n if (isDataTableExplorerUnsupportedSummaryType(field.type)) {\n return {\n isLoading: false,\n kind: 'unsupported',\n label: 'No summary',\n };\n }\n\n return isDataTableExplorerHistogramType(field.type)\n ? {\n filteredBins: [],\n filteredNullCount: 0,\n interactor: null,\n isLoading: true,\n kind: 'histogram',\n totalBins: [],\n totalNullCount: 0,\n valueType:\n getDataTableExplorerValueType(field.type) === 'date'\n ? 'date'\n : 'number',\n }\n : {\n bucketCount: 0,\n buckets: [],\n isLoading: true,\n kind: 'category',\n toggleValue: () => {},\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"DataTableBlockRenderer.d.ts","sourceRoot":"","sources":["../../../src/data-table-explorer/worksheet/DataTableBlockRenderer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,uCAAuC,EAAC,MAAM,qBAAqB,CAAC;AAEjF,OAAO,EAAC,EAAE,EAAc,MAAM,OAAO,CAAC;AAQtC,eAAO,MAAM,sBAAsB,EAAE,EAAE,CACrC,uCAAuC,CA2FxC,CAAC"}
1
+ {"version":3,"file":"DataTableBlockRenderer.d.ts","sourceRoot":"","sources":["../../../src/data-table-explorer/worksheet/DataTableBlockRenderer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,uCAAuC,EAAC,MAAM,qBAAqB,CAAC;AAEjF,OAAO,EAAC,EAAE,EAAc,MAAM,OAAO,CAAC;AAQtC,eAAO,MAAM,sBAAsB,EAAE,EAAE,CACrC,uCAAuC,CA4FxC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
- import { SpinnerPane } from '@sqlrooms/ui';
2
+ import { ScrollArea, ScrollBar, SpinnerPane } from '@sqlrooms/ui';
3
3
  import { useCallback } from 'react';
4
4
  import { useStoreWithMosaic } from '../../MosaicSlice';
5
5
  import { DataTableSelectorEmptyState } from '../../components/DataTableSelector';
@@ -30,6 +30,6 @@ export const DataTableBlockRenderer = ({ blockId, blockInstanceId, blockType, ca
30
30
  if (connection.status !== 'ready') {
31
31
  return (_jsx("div", { className: "flex h-full min-h-0 flex-col", children: _jsx("div", { className: "text-muted-foreground flex min-h-0 flex-1 items-center justify-center p-4 text-sm", children: "Mosaic connection is not ready." }) }));
32
32
  }
33
- return (_jsx(DataTableExplorer, { pageSize: 25, selectionName: selectionName, tableName: selectedTable.table, children: _jsxs("div", { className: "flex h-full min-h-0 flex-col", children: [_jsx(DataTableBlockHeader, { caption: caption, onCaptionChange: onCaptionChange, selectedTable: selectedTable, readOnly: readOnly, tables: tables, onTableChange: handleTableChange }), _jsx("div", { className: "min-h-0 flex-1 overflow-auto", children: _jsxs(DataTableExplorer.Table, { children: [_jsx(DataTableExplorer.Header, {}), _jsx(DataTableExplorer.Rows, {})] }) }), _jsx(DataTableExplorer.StatusBar, {})] }) }));
33
+ return (_jsx(DataTableExplorer, { pageSize: 25, selectionName: selectionName, tableName: selectedTable.table, children: _jsxs("div", { className: "flex h-full min-h-0 flex-col", children: [_jsx(DataTableBlockHeader, { caption: caption, onCaptionChange: onCaptionChange, selectedTable: selectedTable, readOnly: readOnly, tables: tables, onTableChange: handleTableChange }), _jsxs(ScrollArea, { className: "min-h-0 flex-1", children: [_jsxs(DataTableExplorer.Table, { children: [_jsx(DataTableExplorer.Header, {}), _jsx(DataTableExplorer.Rows, {})] }), _jsx(ScrollBar, { orientation: "horizontal" })] }), _jsx(DataTableExplorer.StatusBar, {})] }) }));
34
34
  };
35
35
  //# sourceMappingURL=DataTableBlockRenderer.js.map