@finos/legend-cube-builder 0.0.4 → 0.0.5

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 (609) hide show
  1. package/README.md +9 -3
  2. package/docs/adding-an-operation.md +22 -12
  3. package/docs/demo/DEMO-FAST-NOTES.md +67 -0
  4. package/docs/demo/README.md +102 -0
  5. package/docs/demo/specs/duckdb-sales-pivot.cube.json +110 -0
  6. package/docs/demo/specs/trades-desks-1-joined.cube.json +123 -0
  7. package/docs/demo/specs/trades-desks-2-grouped.cube.json +140 -0
  8. package/docs/demo/specs/trades-desks-3-ranked.cube.json +158 -0
  9. package/docs/demo/specs/trades-desks-4-extended.cube.json +208 -0
  10. package/docs/demo/specs/trades-desks-5-final.cube.json +248 -0
  11. package/docs/hosting.md +50 -3
  12. package/docs/testing.md +32 -0
  13. package/lib/__lib__/LegendCubeCommand.d.ts +2 -0
  14. package/lib/__lib__/LegendCubeCommand.d.ts.map +1 -1
  15. package/lib/__lib__/LegendCubeCommand.js +7 -0
  16. package/lib/__lib__/LegendCubeCommand.js.map +1 -1
  17. package/lib/__lib__/LegendCubeFunctionLabels.d.ts +29 -0
  18. package/lib/__lib__/LegendCubeFunctionLabels.d.ts.map +1 -0
  19. package/lib/__lib__/LegendCubeFunctionLabels.js +31 -0
  20. package/lib/__lib__/LegendCubeFunctionLabels.js.map +1 -0
  21. package/lib/__lib__/LegendCubeHelpText.d.ts +5 -1
  22. package/lib/__lib__/LegendCubeHelpText.d.ts.map +1 -1
  23. package/lib/__lib__/LegendCubeHelpText.js +14 -2
  24. package/lib/__lib__/LegendCubeHelpText.js.map +1 -1
  25. package/lib/__lib__/LegendCubeLabels.d.ts +100 -8
  26. package/lib/__lib__/LegendCubeLabels.d.ts.map +1 -1
  27. package/lib/__lib__/LegendCubeLabels.js +129 -14
  28. package/lib/__lib__/LegendCubeLabels.js.map +1 -1
  29. package/lib/__lib__/LegendCubeProjectSourceLabels.d.ts +26 -0
  30. package/lib/__lib__/LegendCubeProjectSourceLabels.d.ts.map +1 -0
  31. package/lib/__lib__/LegendCubeProjectSourceLabels.js +26 -0
  32. package/lib/__lib__/LegendCubeProjectSourceLabels.js.map +1 -0
  33. package/lib/__lib__/LegendCubeServiceLabels.d.ts +27 -0
  34. package/lib/__lib__/LegendCubeServiceLabels.d.ts.map +1 -0
  35. package/lib/__lib__/LegendCubeServiceLabels.js +32 -0
  36. package/lib/__lib__/LegendCubeServiceLabels.js.map +1 -0
  37. package/lib/__lib__/LegendCubeTesting.d.ts +7 -0
  38. package/lib/__lib__/LegendCubeTesting.d.ts.map +1 -1
  39. package/lib/__lib__/LegendCubeTesting.js +7 -0
  40. package/lib/__lib__/LegendCubeTesting.js.map +1 -1
  41. package/lib/__test-utils__/CubeEngineTestSupport.d.ts +1 -1
  42. package/lib/__test-utils__/CubeEngineTestSupport.d.ts.map +1 -1
  43. package/lib/__test-utils__/CubeEngineTestSupport.js +2 -2
  44. package/lib/__test-utils__/CubeEngineTestSupport.js.map +1 -1
  45. package/lib/__test-utils__/CubeExpressionTestUtils.d.ts +8 -1
  46. package/lib/__test-utils__/CubeExpressionTestUtils.d.ts.map +1 -1
  47. package/lib/__test-utils__/CubeExpressionTestUtils.js +20 -3
  48. package/lib/__test-utils__/CubeExpressionTestUtils.js.map +1 -1
  49. package/lib/__test-utils__/CubeFunctionTestOutline.d.ts +26 -0
  50. package/lib/__test-utils__/CubeFunctionTestOutline.d.ts.map +1 -0
  51. package/lib/__test-utils__/CubeFunctionTestOutline.js +56 -0
  52. package/lib/__test-utils__/CubeFunctionTestOutline.js.map +1 -0
  53. package/lib/__test-utils__/CubeLambdaCorpus.d.ts +36 -0
  54. package/lib/__test-utils__/CubeLambdaCorpus.d.ts.map +1 -0
  55. package/lib/__test-utils__/CubeLambdaCorpus.js +83 -0
  56. package/lib/__test-utils__/CubeLambdaCorpus.js.map +1 -0
  57. package/lib/__test-utils__/CubePageTestUtils.d.ts +6 -0
  58. package/lib/__test-utils__/CubePageTestUtils.d.ts.map +1 -1
  59. package/lib/__test-utils__/CubePageTestUtils.js +21 -0
  60. package/lib/__test-utils__/CubePageTestUtils.js.map +1 -1
  61. package/lib/__test-utils__/CubeTestApplication.d.ts +9 -0
  62. package/lib/__test-utils__/CubeTestApplication.d.ts.map +1 -1
  63. package/lib/__test-utils__/CubeTestApplication.js +16 -0
  64. package/lib/__test-utils__/CubeTestApplication.js.map +1 -1
  65. package/lib/__test-utils__/FakeCubeEngine.d.ts +5 -0
  66. package/lib/__test-utils__/FakeCubeEngine.d.ts.map +1 -1
  67. package/lib/__test-utils__/FakeCubeEngine.js +17 -0
  68. package/lib/__test-utils__/FakeCubeEngine.js.map +1 -1
  69. package/lib/__test-utils__/FakeCubeIngestCatalog.d.ts +7 -1
  70. package/lib/__test-utils__/FakeCubeIngestCatalog.d.ts.map +1 -1
  71. package/lib/__test-utils__/FakeCubeIngestCatalog.js +16 -0
  72. package/lib/__test-utils__/FakeCubeIngestCatalog.js.map +1 -1
  73. package/lib/__test-utils__/FakeCubeServiceCatalog.d.ts +26 -0
  74. package/lib/__test-utils__/FakeCubeServiceCatalog.d.ts.map +1 -0
  75. package/lib/__test-utils__/FakeCubeServiceCatalog.js +40 -0
  76. package/lib/__test-utils__/FakeCubeServiceCatalog.js.map +1 -0
  77. package/lib/components/CubeAddItems.d.ts.map +1 -1
  78. package/lib/components/CubeAddItems.js +9 -6
  79. package/lib/components/CubeAddItems.js.map +1 -1
  80. package/lib/components/CubeDialogTheme.d.ts +25 -0
  81. package/lib/components/CubeDialogTheme.d.ts.map +1 -0
  82. package/lib/components/CubeDialogTheme.js +25 -0
  83. package/lib/components/CubeDialogTheme.js.map +1 -0
  84. package/lib/components/CubeEditor.d.ts +12 -1
  85. package/lib/components/CubeEditor.d.ts.map +1 -1
  86. package/lib/components/CubeEditor.js +16 -14
  87. package/lib/components/CubeEditor.js.map +1 -1
  88. package/lib/components/CubeFileMenu.d.ts +28 -0
  89. package/lib/components/CubeFileMenu.d.ts.map +1 -0
  90. package/lib/components/CubeFileMenu.js +77 -0
  91. package/lib/components/CubeFileMenu.js.map +1 -0
  92. package/lib/components/CubeLambdaImportBanner.d.ts +26 -0
  93. package/lib/components/CubeLambdaImportBanner.d.ts.map +1 -0
  94. package/lib/components/CubeLambdaImportBanner.js +47 -0
  95. package/lib/components/CubeLambdaImportBanner.js.map +1 -0
  96. package/lib/components/CubeNodeIcon.d.ts.map +1 -1
  97. package/lib/components/CubeNodeIcon.js +5 -1
  98. package/lib/components/CubeNodeIcon.js.map +1 -1
  99. package/lib/components/CubeSchemaColumnsTable.d.ts.map +1 -1
  100. package/lib/components/CubeSchemaColumnsTable.js +2 -2
  101. package/lib/components/CubeSchemaColumnsTable.js.map +1 -1
  102. package/lib/components/canvas/CubeCanvas.d.ts.map +1 -1
  103. package/lib/components/canvas/CubeCanvas.js +38 -5
  104. package/lib/components/canvas/CubeCanvas.js.map +1 -1
  105. package/lib/components/canvas/CubeCanvasContextMenu.d.ts.map +1 -1
  106. package/lib/components/canvas/CubeCanvasContextMenu.js +2 -1
  107. package/lib/components/canvas/CubeCanvasContextMenu.js.map +1 -1
  108. package/lib/components/canvas/CubeCanvasElements.d.ts +18 -1
  109. package/lib/components/canvas/CubeCanvasElements.d.ts.map +1 -1
  110. package/lib/components/canvas/CubeCanvasElements.js +58 -3
  111. package/lib/components/canvas/CubeCanvasElements.js.map +1 -1
  112. package/lib/components/canvas/CubeCanvasLayout.js +1 -1
  113. package/lib/components/canvas/CubeCanvasNode.d.ts.map +1 -1
  114. package/lib/components/canvas/CubeCanvasNode.js +8 -4
  115. package/lib/components/canvas/CubeCanvasNode.js.map +1 -1
  116. package/lib/components/dev-settings/CubeDevSettings.d.ts +35 -0
  117. package/lib/components/dev-settings/CubeDevSettings.d.ts.map +1 -0
  118. package/lib/components/dev-settings/CubeDevSettings.js +50 -0
  119. package/lib/components/dev-settings/CubeDevSettings.js.map +1 -0
  120. package/lib/components/editors/CubeColumnChecklist.d.ts.map +1 -1
  121. package/lib/components/editors/CubeColumnChecklist.js +2 -2
  122. package/lib/components/editors/CubeColumnChecklist.js.map +1 -1
  123. package/lib/components/editors/CubeColumnPicker.d.ts.map +1 -1
  124. package/lib/components/editors/CubeColumnPicker.js +3 -3
  125. package/lib/components/editors/CubeColumnPicker.js.map +1 -1
  126. package/lib/components/editors/CubeConcatEditor.js +2 -2
  127. package/lib/components/editors/CubeConcatEditor.js.map +1 -1
  128. package/lib/components/editors/CubeExpressionFilterEditor.d.ts +25 -0
  129. package/lib/components/editors/CubeExpressionFilterEditor.d.ts.map +1 -0
  130. package/lib/components/editors/CubeExpressionFilterEditor.js +83 -0
  131. package/lib/components/editors/CubeExpressionFilterEditor.js.map +1 -0
  132. package/lib/components/editors/CubeExtendEditor.d.ts +2 -0
  133. package/lib/components/editors/CubeExtendEditor.d.ts.map +1 -1
  134. package/lib/components/editors/CubeExtendEditor.js +3 -3
  135. package/lib/components/editors/CubeExtendEditor.js.map +1 -1
  136. package/lib/components/editors/CubeFilterEditor.d.ts.map +1 -1
  137. package/lib/components/editors/CubeFilterEditor.js +13 -2
  138. package/lib/components/editors/CubeFilterEditor.js.map +1 -1
  139. package/lib/components/editors/CubeFunctionSourceEditor.d.ts +25 -0
  140. package/lib/components/editors/CubeFunctionSourceEditor.d.ts.map +1 -0
  141. package/lib/components/editors/CubeFunctionSourceEditor.js +55 -0
  142. package/lib/components/editors/CubeFunctionSourceEditor.js.map +1 -0
  143. package/lib/components/editors/CubeJoinEditor.d.ts.map +1 -1
  144. package/lib/components/editors/CubeJoinEditor.js +16 -4
  145. package/lib/components/editors/CubeJoinEditor.js.map +1 -1
  146. package/lib/components/editors/CubeNodeEditorPanel.d.ts.map +1 -1
  147. package/lib/components/editors/CubeNodeEditorPanel.js +18 -8
  148. package/lib/components/editors/CubeNodeEditorPanel.js.map +1 -1
  149. package/lib/components/editors/CubeNodeEditorPopper.d.ts +5 -1
  150. package/lib/components/editors/CubeNodeEditorPopper.d.ts.map +1 -1
  151. package/lib/components/editors/CubeNodeEditorPopper.js +10 -2
  152. package/lib/components/editors/CubeNodeEditorPopper.js.map +1 -1
  153. package/lib/components/editors/CubeNodeEditorRegistry.d.ts.map +1 -1
  154. package/lib/components/editors/CubeNodeEditorRegistry.js +9 -1
  155. package/lib/components/editors/CubeNodeEditorRegistry.js.map +1 -1
  156. package/lib/components/editors/CubePivotEditor.d.ts +26 -0
  157. package/lib/components/editors/CubePivotEditor.d.ts.map +1 -0
  158. package/lib/components/editors/CubePivotEditor.js +93 -0
  159. package/lib/components/editors/CubePivotEditor.js.map +1 -0
  160. package/lib/components/editors/CubeRestrictEditor.d.ts.map +1 -1
  161. package/lib/components/editors/CubeRestrictEditor.js +2 -2
  162. package/lib/components/editors/CubeRestrictEditor.js.map +1 -1
  163. package/lib/components/editors/CubeServiceSourceEditor.d.ts +25 -0
  164. package/lib/components/editors/CubeServiceSourceEditor.d.ts.map +1 -0
  165. package/lib/components/editors/CubeServiceSourceEditor.js +41 -0
  166. package/lib/components/editors/CubeServiceSourceEditor.js.map +1 -0
  167. package/lib/components/grid/CubeColumnFormatDialog.d.ts +28 -0
  168. package/lib/components/grid/CubeColumnFormatDialog.d.ts.map +1 -0
  169. package/lib/components/grid/CubeColumnFormatDialog.js +94 -0
  170. package/lib/components/grid/CubeColumnFormatDialog.js.map +1 -0
  171. package/lib/components/grid/CubeDrilldownBar.d.ts +37 -0
  172. package/lib/components/grid/CubeDrilldownBar.d.ts.map +1 -0
  173. package/lib/components/grid/CubeDrilldownBar.js +77 -0
  174. package/lib/components/grid/CubeDrilldownBar.js.map +1 -0
  175. package/lib/components/grid/CubeGridRegion.d.ts.map +1 -1
  176. package/lib/components/grid/CubeGridRegion.js +40 -26
  177. package/lib/components/grid/CubeGridRegion.js.map +1 -1
  178. package/lib/components/grid/CubeGridValues.d.ts +31 -1
  179. package/lib/components/grid/CubeGridValues.d.ts.map +1 -1
  180. package/lib/components/grid/CubeGridValues.js +108 -1
  181. package/lib/components/grid/CubeGridValues.js.map +1 -1
  182. package/lib/components/grid/CubeResultGrid.d.ts +68 -5
  183. package/lib/components/grid/CubeResultGrid.d.ts.map +1 -1
  184. package/lib/components/grid/CubeResultGrid.js +308 -35
  185. package/lib/components/grid/CubeResultGrid.js.map +1 -1
  186. package/lib/components/grid/CubeRunStatsPanel.d.ts +28 -0
  187. package/lib/components/grid/CubeRunStatsPanel.d.ts.map +1 -0
  188. package/lib/components/grid/CubeRunStatsPanel.js +61 -0
  189. package/lib/components/grid/CubeRunStatsPanel.js.map +1 -0
  190. package/lib/components/grid/CubeServerSideGrid.d.ts +36 -0
  191. package/lib/components/grid/CubeServerSideGrid.d.ts.map +1 -0
  192. package/lib/components/grid/CubeServerSideGrid.js +114 -0
  193. package/lib/components/grid/CubeServerSideGrid.js.map +1 -0
  194. package/lib/components/grid/CubeSqlDialog.d.ts +24 -0
  195. package/lib/components/grid/CubeSqlDialog.d.ts.map +1 -0
  196. package/lib/components/grid/CubeSqlDialog.js +39 -0
  197. package/lib/components/grid/CubeSqlDialog.js.map +1 -0
  198. package/lib/components/grid/CubeSqlFormat.d.ts +20 -0
  199. package/lib/components/grid/CubeSqlFormat.d.ts.map +1 -0
  200. package/lib/components/grid/CubeSqlFormat.js +32 -0
  201. package/lib/components/grid/CubeSqlFormat.js.map +1 -0
  202. package/lib/components/palette/CubePalette.d.ts.map +1 -1
  203. package/lib/components/palette/CubePalette.js +32 -13
  204. package/lib/components/palette/CubePalette.js.map +1 -1
  205. package/lib/components/show-pure/CubeShowPureDialog.d.ts +4 -1
  206. package/lib/components/show-pure/CubeShowPureDialog.d.ts.map +1 -1
  207. package/lib/components/show-pure/CubeShowPureDialog.js +8 -4
  208. package/lib/components/show-pure/CubeShowPureDialog.js.map +1 -1
  209. package/lib/components/source-picker/CubeDataProductTab.d.ts.map +1 -1
  210. package/lib/components/source-picker/CubeDataProductTab.js +37 -16
  211. package/lib/components/source-picker/CubeDataProductTab.js.map +1 -1
  212. package/lib/components/source-picker/CubeDirectConnectionTab.d.ts.map +1 -1
  213. package/lib/components/source-picker/CubeDirectConnectionTab.js +6 -4
  214. package/lib/components/source-picker/CubeDirectConnectionTab.js.map +1 -1
  215. package/lib/components/source-picker/CubeFunctionSteps.d.ts +36 -0
  216. package/lib/components/source-picker/CubeFunctionSteps.d.ts.map +1 -0
  217. package/lib/components/source-picker/CubeFunctionSteps.js +76 -0
  218. package/lib/components/source-picker/CubeFunctionSteps.js.map +1 -0
  219. package/lib/components/source-picker/CubeIngestTab.d.ts.map +1 -1
  220. package/lib/components/source-picker/CubeIngestTab.js +39 -16
  221. package/lib/components/source-picker/CubeIngestTab.js.map +1 -1
  222. package/lib/components/source-picker/CubeInlineModelTab.d.ts +3 -2
  223. package/lib/components/source-picker/CubeInlineModelTab.d.ts.map +1 -1
  224. package/lib/components/source-picker/CubeInlineModelTab.js +23 -13
  225. package/lib/components/source-picker/CubeInlineModelTab.js.map +1 -1
  226. package/lib/components/source-picker/CubePickerListItem.d.ts +47 -0
  227. package/lib/components/source-picker/CubePickerListItem.d.ts.map +1 -0
  228. package/lib/components/source-picker/CubePickerListItem.js +62 -0
  229. package/lib/components/source-picker/CubePickerListItem.js.map +1 -0
  230. package/lib/components/source-picker/CubeProjectTab.d.ts +4 -3
  231. package/lib/components/source-picker/CubeProjectTab.d.ts.map +1 -1
  232. package/lib/components/source-picker/CubeProjectTab.js +7 -4
  233. package/lib/components/source-picker/CubeProjectTab.js.map +1 -1
  234. package/lib/components/source-picker/CubeServiceTab.d.ts +27 -0
  235. package/lib/components/source-picker/CubeServiceTab.d.ts.map +1 -0
  236. package/lib/components/source-picker/CubeServiceTab.js +36 -0
  237. package/lib/components/source-picker/CubeServiceTab.js.map +1 -0
  238. package/lib/components/source-picker/CubeSourcePicker.d.ts.map +1 -1
  239. package/lib/components/source-picker/CubeSourcePicker.js +16 -3
  240. package/lib/components/source-picker/CubeSourcePicker.js.map +1 -1
  241. package/lib/components/source-picker/CubeTablePreview.d.ts +29 -0
  242. package/lib/components/source-picker/CubeTablePreview.d.ts.map +1 -0
  243. package/lib/components/source-picker/CubeTablePreview.js +10 -0
  244. package/lib/components/source-picker/CubeTablePreview.js.map +1 -0
  245. package/lib/components/spec-transfer/CubeImportPureDialog.d.ts +27 -0
  246. package/lib/components/spec-transfer/CubeImportPureDialog.d.ts.map +1 -0
  247. package/lib/components/spec-transfer/CubeImportPureDialog.js +38 -0
  248. package/lib/components/spec-transfer/CubeImportPureDialog.js.map +1 -0
  249. package/lib/components/spec-transfer/CubeSpecTransferDialog.d.ts.map +1 -1
  250. package/lib/components/spec-transfer/CubeSpecTransferDialog.js +9 -3
  251. package/lib/components/spec-transfer/CubeSpecTransferDialog.js.map +1 -1
  252. package/lib/graph-manager/CubeDataProductCatalog.d.ts +10 -0
  253. package/lib/graph-manager/CubeDataProductCatalog.d.ts.map +1 -1
  254. package/lib/graph-manager/CubeDataProductCatalog.js.map +1 -1
  255. package/lib/graph-manager/CubeEngine.d.ts +46 -1
  256. package/lib/graph-manager/CubeEngine.d.ts.map +1 -1
  257. package/lib/graph-manager/CubeEngine.js.map +1 -1
  258. package/lib/graph-manager/CubeEngineClientSettings.d.ts +43 -0
  259. package/lib/graph-manager/CubeEngineClientSettings.d.ts.map +1 -0
  260. package/lib/graph-manager/CubeEngineClientSettings.js +51 -0
  261. package/lib/graph-manager/CubeEngineClientSettings.js.map +1 -0
  262. package/lib/graph-manager/CubeIngest.d.ts +5 -0
  263. package/lib/graph-manager/CubeIngest.d.ts.map +1 -1
  264. package/lib/graph-manager/CubeIngest.js +10 -0
  265. package/lib/graph-manager/CubeIngest.js.map +1 -1
  266. package/lib/graph-manager/CubeIngestCatalog.d.ts +26 -0
  267. package/lib/graph-manager/CubeIngestCatalog.d.ts.map +1 -1
  268. package/lib/graph-manager/CubeIngestCatalog.js +6 -0
  269. package/lib/graph-manager/CubeIngestCatalog.js.map +1 -1
  270. package/lib/graph-manager/CubeLakehouseRuntime.d.ts +29 -0
  271. package/lib/graph-manager/CubeLakehouseRuntime.d.ts.map +1 -0
  272. package/lib/graph-manager/CubeLakehouseRuntime.js +40 -0
  273. package/lib/graph-manager/CubeLakehouseRuntime.js.map +1 -0
  274. package/lib/graph-manager/CubeProjectCatalog.d.ts +3 -3
  275. package/lib/graph-manager/CubeService.d.ts +20 -0
  276. package/lib/graph-manager/CubeService.d.ts.map +1 -0
  277. package/lib/graph-manager/CubeService.js +22 -0
  278. package/lib/graph-manager/CubeService.js.map +1 -0
  279. package/lib/graph-manager/CubeServiceCatalog.d.ts +31 -0
  280. package/lib/graph-manager/CubeServiceCatalog.d.ts.map +1 -0
  281. package/lib/graph-manager/CubeServiceCatalog.js +17 -0
  282. package/lib/graph-manager/CubeServiceCatalog.js.map +1 -0
  283. package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts +52 -5
  284. package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts.map +1 -1
  285. package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js +63 -5
  286. package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js.map +1 -1
  287. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.d.ts +9 -6
  288. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.d.ts.map +1 -1
  289. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.js +12 -8
  290. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.js.map +1 -1
  291. package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.d.ts +30 -0
  292. package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.d.ts.map +1 -0
  293. package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.js +229 -0
  294. package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.js.map +1 -0
  295. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.d.ts.map +1 -1
  296. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.js +18 -9
  297. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.js.map +1 -1
  298. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.d.ts +4 -9
  299. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.d.ts.map +1 -1
  300. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.js +2 -1
  301. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.js.map +1 -1
  302. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.d.ts +34 -0
  303. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.d.ts.map +1 -0
  304. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.js +332 -0
  305. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.js.map +1 -0
  306. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.d.ts.map +1 -1
  307. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.js +49 -10
  308. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.js.map +1 -1
  309. package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.d.ts +1 -1
  310. package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.d.ts.map +1 -1
  311. package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.js +3 -1
  312. package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.js.map +1 -1
  313. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.d.ts +2 -1
  314. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.d.ts.map +1 -1
  315. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.js +2 -1
  316. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.js.map +1 -1
  317. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts +18 -0
  318. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts.map +1 -1
  319. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js +74 -6
  320. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js.map +1 -1
  321. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.d.ts.map +1 -1
  322. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.js +7 -4
  323. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.js.map +1 -1
  324. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.d.ts +31 -0
  325. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.d.ts.map +1 -0
  326. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.js +69 -0
  327. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.js.map +1 -0
  328. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.d.ts.map +1 -1
  329. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.js +6 -2
  330. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.js.map +1 -1
  331. package/lib/index.css +2 -2
  332. package/lib/index.css.map +1 -1
  333. package/lib/index.d.ts +12 -3
  334. package/lib/index.d.ts.map +1 -1
  335. package/lib/index.js +10 -1
  336. package/lib/index.js.map +1 -1
  337. package/lib/stores/CubeAddPlacement.d.ts +10 -3
  338. package/lib/stores/CubeAddPlacement.d.ts.map +1 -1
  339. package/lib/stores/CubeAddPlacement.js +16 -5
  340. package/lib/stores/CubeAddPlacement.js.map +1 -1
  341. package/lib/stores/CubeDevSettingsState.d.ts +47 -0
  342. package/lib/stores/CubeDevSettingsState.d.ts.map +1 -0
  343. package/lib/stores/CubeDevSettingsState.js +99 -0
  344. package/lib/stores/CubeDevSettingsState.js.map +1 -0
  345. package/lib/stores/CubeEditorState.d.ts +173 -43
  346. package/lib/stores/CubeEditorState.d.ts.map +1 -1
  347. package/lib/stores/CubeEditorState.js +498 -113
  348. package/lib/stores/CubeEditorState.js.map +1 -1
  349. package/lib/stores/CubeEngineChecks.d.ts +59 -0
  350. package/lib/stores/CubeEngineChecks.d.ts.map +1 -0
  351. package/lib/stores/CubeEngineChecks.js +100 -0
  352. package/lib/stores/CubeEngineChecks.js.map +1 -0
  353. package/lib/stores/CubeExamples.d.ts.map +1 -1
  354. package/lib/stores/CubeExamples.js +39 -2
  355. package/lib/stores/CubeExamples.js.map +1 -1
  356. package/lib/stores/CubeExamplesState.d.ts +1 -1
  357. package/lib/stores/CubeExamplesState.d.ts.map +1 -1
  358. package/lib/stores/CubeExamplesState.js +2 -2
  359. package/lib/stores/CubeExamplesState.js.map +1 -1
  360. package/lib/stores/CubeExecutionState.d.ts.map +1 -1
  361. package/lib/stores/CubeExecutionState.js +24 -33
  362. package/lib/stores/CubeExecutionState.js.map +1 -1
  363. package/lib/stores/CubeExportState.d.ts +41 -0
  364. package/lib/stores/CubeExportState.d.ts.map +1 -0
  365. package/lib/stores/CubeExportState.js +134 -0
  366. package/lib/stores/CubeExportState.js.map +1 -0
  367. package/lib/stores/CubeExpressionFilterCheck.d.ts +51 -0
  368. package/lib/stores/CubeExpressionFilterCheck.d.ts.map +1 -0
  369. package/lib/stores/CubeExpressionFilterCheck.js +134 -0
  370. package/lib/stores/CubeExpressionFilterCheck.js.map +1 -0
  371. package/lib/stores/CubeExtendTyping.d.ts +6 -14
  372. package/lib/stores/CubeExtendTyping.d.ts.map +1 -1
  373. package/lib/stores/CubeExtendTyping.js +6 -33
  374. package/lib/stores/CubeExtendTyping.js.map +1 -1
  375. package/lib/stores/CubeFunctionRecheck.d.ts +30 -0
  376. package/lib/stores/CubeFunctionRecheck.d.ts.map +1 -0
  377. package/lib/stores/CubeFunctionRecheck.js +67 -0
  378. package/lib/stores/CubeFunctionRecheck.js.map +1 -0
  379. package/lib/stores/CubeGridFetcher.d.ts +75 -0
  380. package/lib/stores/CubeGridFetcher.d.ts.map +1 -0
  381. package/lib/stores/CubeGridFetcher.js +197 -0
  382. package/lib/stores/CubeGridFetcher.js.map +1 -0
  383. package/lib/stores/CubeGridQuickActions.d.ts +18 -6
  384. package/lib/stores/CubeGridQuickActions.d.ts.map +1 -1
  385. package/lib/stores/CubeGridQuickActions.js +32 -12
  386. package/lib/stores/CubeGridQuickActions.js.map +1 -1
  387. package/lib/stores/CubeGridState.d.ts +136 -0
  388. package/lib/stores/CubeGridState.d.ts.map +1 -0
  389. package/lib/stores/CubeGridState.js +317 -0
  390. package/lib/stores/CubeGridState.js.map +1 -0
  391. package/lib/stores/CubeHost.d.ts +42 -0
  392. package/lib/stores/CubeHost.d.ts.map +1 -1
  393. package/lib/stores/CubeHost.js +4 -0
  394. package/lib/stores/CubeHost.js.map +1 -1
  395. package/lib/stores/CubeLambdaImportState.d.ts +118 -0
  396. package/lib/stores/CubeLambdaImportState.d.ts.map +1 -0
  397. package/lib/stores/CubeLambdaImportState.js +302 -0
  398. package/lib/stores/CubeLambdaImportState.js.map +1 -0
  399. package/lib/stores/CubeLambdaSources.d.ts +45 -0
  400. package/lib/stores/CubeLambdaSources.d.ts.map +1 -0
  401. package/lib/stores/CubeLambdaSources.js +261 -0
  402. package/lib/stores/CubeLambdaSources.js.map +1 -0
  403. package/lib/stores/CubeQueryRun.d.ts +59 -0
  404. package/lib/stores/CubeQueryRun.d.ts.map +1 -0
  405. package/lib/stores/CubeQueryRun.js +101 -0
  406. package/lib/stores/CubeQueryRun.js.map +1 -0
  407. package/lib/stores/CubeRunStatsState.d.ts +61 -0
  408. package/lib/stores/CubeRunStatsState.d.ts.map +1 -0
  409. package/lib/stores/CubeRunStatsState.js +54 -0
  410. package/lib/stores/CubeRunStatsState.js.map +1 -0
  411. package/lib/stores/CubeRunningStepLambda.d.ts +25 -0
  412. package/lib/stores/CubeRunningStepLambda.d.ts.map +1 -0
  413. package/lib/stores/CubeRunningStepLambda.js +45 -0
  414. package/lib/stores/CubeRunningStepLambda.js.map +1 -0
  415. package/lib/stores/CubeServiceRecheck.d.ts +29 -0
  416. package/lib/stores/CubeServiceRecheck.d.ts.map +1 -0
  417. package/lib/stores/CubeServiceRecheck.js +33 -0
  418. package/lib/stores/CubeServiceRecheck.js.map +1 -0
  419. package/lib/stores/CubeShowPureState.d.ts +14 -1
  420. package/lib/stores/CubeShowPureState.d.ts.map +1 -1
  421. package/lib/stores/CubeShowPureState.js +41 -11
  422. package/lib/stores/CubeShowPureState.js.map +1 -1
  423. package/lib/stores/CubeSourcePickerState.d.ts +20 -4
  424. package/lib/stores/CubeSourcePickerState.d.ts.map +1 -1
  425. package/lib/stores/CubeSourcePickerState.js +75 -14
  426. package/lib/stores/CubeSourcePickerState.js.map +1 -1
  427. package/lib/stores/LocalModelCatalog.d.ts.map +1 -1
  428. package/lib/stores/LocalModelCatalog.js +3 -1
  429. package/lib/stores/LocalModelCatalog.js.map +1 -1
  430. package/lib/stores/editors/CubeExpressionFilterDraft.d.ts +91 -0
  431. package/lib/stores/editors/CubeExpressionFilterDraft.d.ts.map +1 -0
  432. package/lib/stores/editors/CubeExpressionFilterDraft.js +254 -0
  433. package/lib/stores/editors/CubeExpressionFilterDraft.js.map +1 -0
  434. package/lib/stores/editors/CubeFunctionDraft.d.ts +34 -0
  435. package/lib/stores/editors/CubeFunctionDraft.d.ts.map +1 -0
  436. package/lib/stores/editors/CubeFunctionDraft.js +69 -0
  437. package/lib/stores/editors/CubeFunctionDraft.js.map +1 -0
  438. package/lib/stores/editors/CubeNodeDraftRegistry.d.ts +4 -2
  439. package/lib/stores/editors/CubeNodeDraftRegistry.d.ts.map +1 -1
  440. package/lib/stores/editors/CubeNodeDraftRegistry.js +20 -3
  441. package/lib/stores/editors/CubeNodeDraftRegistry.js.map +1 -1
  442. package/lib/stores/editors/CubePivotDraft.d.ts +93 -0
  443. package/lib/stores/editors/CubePivotDraft.d.ts.map +1 -0
  444. package/lib/stores/editors/CubePivotDraft.js +267 -0
  445. package/lib/stores/editors/CubePivotDraft.js.map +1 -0
  446. package/lib/stores/fixtures/CubeSalesDuckDbModel.d.ts +26 -0
  447. package/lib/stores/fixtures/CubeSalesDuckDbModel.d.ts.map +1 -0
  448. package/lib/stores/fixtures/CubeSalesDuckDbModel.js +46 -0
  449. package/lib/stores/fixtures/CubeSalesDuckDbModel.js.map +1 -0
  450. package/lib/stores/fixtures/CubeTradesModel.d.ts +4 -0
  451. package/lib/stores/fixtures/CubeTradesModel.d.ts.map +1 -1
  452. package/lib/stores/fixtures/CubeTradesModel.js +31 -1
  453. package/lib/stores/fixtures/CubeTradesModel.js.map +1 -1
  454. package/lib/stores/source-picker/CubeDataProductTabState.d.ts +34 -5
  455. package/lib/stores/source-picker/CubeDataProductTabState.d.ts.map +1 -1
  456. package/lib/stores/source-picker/CubeDataProductTabState.js +111 -26
  457. package/lib/stores/source-picker/CubeDataProductTabState.js.map +1 -1
  458. package/lib/stores/source-picker/CubeDirectConnectionTabState.d.ts +25 -2
  459. package/lib/stores/source-picker/CubeDirectConnectionTabState.d.ts.map +1 -1
  460. package/lib/stores/source-picker/CubeDirectConnectionTabState.js +183 -31
  461. package/lib/stores/source-picker/CubeDirectConnectionTabState.js.map +1 -1
  462. package/lib/stores/source-picker/CubeIngestTabState.d.ts +22 -9
  463. package/lib/stores/source-picker/CubeIngestTabState.d.ts.map +1 -1
  464. package/lib/stores/source-picker/CubeIngestTabState.js +84 -29
  465. package/lib/stores/source-picker/CubeIngestTabState.js.map +1 -1
  466. package/lib/stores/source-picker/CubeInlineModelTabState.d.ts +100 -4
  467. package/lib/stores/source-picker/CubeInlineModelTabState.d.ts.map +1 -1
  468. package/lib/stores/source-picker/CubeInlineModelTabState.js +415 -28
  469. package/lib/stores/source-picker/CubeInlineModelTabState.js.map +1 -1
  470. package/lib/stores/source-picker/CubeProjectTabState.d.ts +18 -3
  471. package/lib/stores/source-picker/CubeProjectTabState.d.ts.map +1 -1
  472. package/lib/stores/source-picker/CubeProjectTabState.js +26 -1
  473. package/lib/stores/source-picker/CubeProjectTabState.js.map +1 -1
  474. package/lib/stores/source-picker/CubeServiceTabState.d.ts +74 -0
  475. package/lib/stores/source-picker/CubeServiceTabState.d.ts.map +1 -0
  476. package/lib/stores/source-picker/CubeServiceTabState.js +216 -0
  477. package/lib/stores/source-picker/CubeServiceTabState.js.map +1 -0
  478. package/lib/stores/source-picker/CubeSourcePickerTab.d.ts +15 -3
  479. package/lib/stores/source-picker/CubeSourcePickerTab.d.ts.map +1 -1
  480. package/lib/stores/source-picker/CubeSourcePickerTab.js +21 -0
  481. package/lib/stores/source-picker/CubeSourcePickerTab.js.map +1 -1
  482. package/package.json +10 -9
  483. package/src/__lib__/LegendCubeCommand.ts +7 -0
  484. package/src/__lib__/LegendCubeFunctionLabels.ts +41 -0
  485. package/src/__lib__/LegendCubeHelpText.ts +23 -1
  486. package/src/__lib__/LegendCubeLabels.ts +170 -13
  487. package/src/__lib__/LegendCubeProjectSourceLabels.ts +26 -0
  488. package/src/__lib__/LegendCubeServiceLabels.ts +41 -0
  489. package/src/__lib__/LegendCubeTesting.ts +7 -0
  490. package/src/__test-utils__/CubeEngineTestSupport.ts +2 -1
  491. package/src/__test-utils__/CubeExpressionTestUtils.ts +29 -2
  492. package/src/__test-utils__/CubeFunctionTestOutline.ts +78 -0
  493. package/src/__test-utils__/CubeLambdaCorpus.ts +137 -0
  494. package/src/__test-utils__/CubePageTestUtils.tsx +34 -0
  495. package/src/__test-utils__/CubeTestApplication.ts +25 -0
  496. package/src/__test-utils__/FakeCubeEngine.ts +27 -0
  497. package/src/__test-utils__/FakeCubeIngestCatalog.ts +18 -0
  498. package/src/__test-utils__/FakeCubeServiceCatalog.ts +57 -0
  499. package/src/components/CubeAddItems.tsx +13 -6
  500. package/src/components/CubeDialogTheme.ts +25 -0
  501. package/src/components/CubeEditor.tsx +155 -129
  502. package/src/components/CubeFileMenu.tsx +127 -0
  503. package/src/components/CubeLambdaImportBanner.tsx +97 -0
  504. package/src/components/CubeNodeIcon.tsx +7 -0
  505. package/src/components/CubeSchemaColumnsTable.tsx +7 -2
  506. package/src/components/canvas/CubeCanvas.tsx +52 -13
  507. package/src/components/canvas/CubeCanvasContextMenu.tsx +33 -2
  508. package/src/components/canvas/CubeCanvasElements.ts +76 -3
  509. package/src/components/canvas/CubeCanvasLayout.ts +1 -1
  510. package/src/components/canvas/CubeCanvasNode.tsx +30 -3
  511. package/src/components/dev-settings/CubeDevSettings.tsx +154 -0
  512. package/src/components/editors/CubeColumnChecklist.tsx +8 -2
  513. package/src/components/editors/CubeColumnPicker.tsx +6 -3
  514. package/src/components/editors/CubeConcatEditor.tsx +2 -2
  515. package/src/components/editors/CubeExpressionFilterEditor.tsx +193 -0
  516. package/src/components/editors/CubeExtendEditor.tsx +3 -3
  517. package/src/components/editors/CubeFilterEditor.tsx +13 -1
  518. package/src/components/editors/CubeFunctionSourceEditor.tsx +140 -0
  519. package/src/components/editors/CubeJoinEditor.tsx +23 -4
  520. package/src/components/editors/CubeNodeEditorPanel.tsx +22 -10
  521. package/src/components/editors/CubeNodeEditorPopper.tsx +9 -1
  522. package/src/components/editors/CubeNodeEditorRegistry.ts +12 -0
  523. package/src/components/editors/CubePivotEditor.tsx +277 -0
  524. package/src/components/editors/CubeRestrictEditor.tsx +8 -2
  525. package/src/components/editors/CubeServiceSourceEditor.tsx +77 -0
  526. package/src/components/grid/CubeColumnFormatDialog.tsx +289 -0
  527. package/src/components/grid/CubeDrilldownBar.tsx +219 -0
  528. package/src/components/grid/CubeGridRegion.tsx +170 -54
  529. package/src/components/grid/CubeGridValues.ts +146 -1
  530. package/src/components/grid/CubeResultGrid.tsx +443 -41
  531. package/src/components/grid/CubeRunStatsPanel.tsx +156 -0
  532. package/src/components/grid/CubeServerSideGrid.tsx +200 -0
  533. package/src/components/grid/CubeSqlDialog.tsx +90 -0
  534. package/src/components/grid/CubeSqlFormat.ts +37 -0
  535. package/src/components/palette/CubePalette.tsx +45 -12
  536. package/src/components/show-pure/CubeShowPureDialog.tsx +19 -5
  537. package/src/components/source-picker/CubeDataProductTab.tsx +169 -75
  538. package/src/components/source-picker/CubeDirectConnectionTab.tsx +42 -30
  539. package/src/components/source-picker/CubeFunctionSteps.tsx +244 -0
  540. package/src/components/source-picker/CubeIngestTab.tsx +159 -79
  541. package/src/components/source-picker/CubeInlineModelTab.tsx +110 -81
  542. package/src/components/source-picker/CubePickerListItem.tsx +118 -0
  543. package/src/components/source-picker/CubeProjectTab.tsx +6 -3
  544. package/src/components/source-picker/CubeServiceTab.tsx +151 -0
  545. package/src/components/source-picker/CubeSourcePicker.tsx +54 -18
  546. package/src/components/source-picker/CubeTablePreview.tsx +49 -0
  547. package/src/components/spec-transfer/CubeImportPureDialog.tsx +122 -0
  548. package/src/components/spec-transfer/CubeSpecTransferDialog.tsx +21 -8
  549. package/src/graph-manager/CubeDataProductCatalog.ts +11 -0
  550. package/src/graph-manager/CubeEngine.ts +51 -1
  551. package/src/graph-manager/CubeEngineClientSettings.ts +64 -0
  552. package/src/graph-manager/CubeIngest.ts +15 -0
  553. package/src/graph-manager/CubeIngestCatalog.ts +33 -0
  554. package/src/graph-manager/CubeLakehouseRuntime.ts +43 -0
  555. package/src/graph-manager/CubeProjectCatalog.ts +3 -3
  556. package/src/graph-manager/CubeService.ts +29 -0
  557. package/src/graph-manager/CubeServiceCatalog.ts +35 -0
  558. package/src/graph-manager/protocol/pure/CubeEngineBuilder.ts +115 -5
  559. package/src/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.ts +13 -7
  560. package/src/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.ts +312 -0
  561. package/src/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.ts +35 -9
  562. package/src/graph-manager/protocol/pure/v1/V1_CubeIngestModel.ts +6 -15
  563. package/src/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.ts +471 -0
  564. package/src/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.ts +70 -15
  565. package/src/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.ts +3 -1
  566. package/src/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.ts +7 -1
  567. package/src/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.ts +122 -7
  568. package/src/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.ts +9 -4
  569. package/src/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.ts +92 -0
  570. package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.ts +6 -1
  571. package/src/index.ts +32 -2
  572. package/src/stores/CubeAddPlacement.ts +25 -5
  573. package/src/stores/CubeDevSettingsState.ts +117 -0
  574. package/src/stores/CubeEditorState.ts +687 -197
  575. package/src/stores/CubeEngineChecks.ts +240 -0
  576. package/src/stores/CubeExamples.ts +70 -1
  577. package/src/stores/CubeExamplesState.ts +4 -2
  578. package/src/stores/CubeExecutionState.ts +26 -57
  579. package/src/stores/CubeExportState.ts +196 -0
  580. package/src/stores/CubeExpressionFilterCheck.ts +218 -0
  581. package/src/stores/CubeExtendTyping.ts +6 -46
  582. package/src/stores/CubeFunctionRecheck.ts +97 -0
  583. package/src/stores/CubeGridFetcher.ts +302 -0
  584. package/src/stores/CubeGridQuickActions.ts +33 -11
  585. package/src/stores/CubeGridState.ts +450 -0
  586. package/src/stores/CubeHost.ts +48 -0
  587. package/src/stores/CubeLambdaImportState.ts +434 -0
  588. package/src/stores/CubeLambdaSources.ts +390 -0
  589. package/src/stores/CubeQueryRun.ts +169 -0
  590. package/src/stores/CubeRunStatsState.ts +91 -0
  591. package/src/stores/CubeRunningStepLambda.ts +62 -0
  592. package/src/stores/CubeServiceRecheck.ts +53 -0
  593. package/src/stores/CubeShowPureState.ts +51 -12
  594. package/src/stores/CubeSourcePickerState.ts +89 -13
  595. package/src/stores/LocalModelCatalog.ts +6 -1
  596. package/src/stores/editors/CubeExpressionFilterDraft.ts +385 -0
  597. package/src/stores/editors/CubeFunctionDraft.ts +92 -0
  598. package/src/stores/editors/CubeNodeDraftRegistry.ts +27 -2
  599. package/src/stores/editors/CubePivotDraft.ts +355 -0
  600. package/src/stores/fixtures/CubeSalesDuckDbModel.ts +54 -0
  601. package/src/stores/fixtures/CubeTradesModel.ts +36 -1
  602. package/src/stores/source-picker/CubeDataProductTabState.ts +162 -35
  603. package/src/stores/source-picker/CubeDirectConnectionTabState.ts +246 -47
  604. package/src/stores/source-picker/CubeIngestTabState.ts +112 -38
  605. package/src/stores/source-picker/CubeInlineModelTabState.ts +514 -34
  606. package/src/stores/source-picker/CubeProjectTabState.ts +35 -3
  607. package/src/stores/source-picker/CubeServiceTabState.ts +288 -0
  608. package/src/stores/source-picker/CubeSourcePickerTab.ts +31 -2
  609. package/tsconfig.json +50 -0
@@ -15,55 +15,207 @@
15
15
  */
16
16
 
17
17
  import { clsx } from '@finos/legend-art';
18
- import type { TypeFamily } from '@finos/legend-cube';
18
+ import {
19
+ AggregationFunction,
20
+ type CheckedDrilldown,
21
+ type ColumnFormat,
22
+ DEFAULT_PRESENTATION,
23
+ foldColumnName,
24
+ getColumnFormat,
25
+ type Presentation,
26
+ type TypeFamily,
27
+ } from '@finos/legend-cube';
19
28
  import {
20
29
  DataGrid,
21
30
  type DataGridCellRendererParams,
31
+ type DataGridColumn,
22
32
  type DataGridColumnDefinition,
23
33
  type DataGridDefaultMenuItem,
24
34
  type DataGridGetContextMenuItemsParams,
35
+ type DataGridIAggFuncParams,
25
36
  type DataGridMenuItemDef,
26
37
  } from '@finos/legend-lego/data-grid';
38
+ import { flowResult } from 'mobx';
27
39
  import { memo, useCallback, useMemo } from 'react';
28
- import { NULL_CELL_TEXT } from '../../__lib__/LegendCubeLabels.js';
40
+ import {
41
+ CUBE_FORMAT_NOT_A_NUMBER,
42
+ NULL_CELL_TEXT,
43
+ READ_ONLY_CUBE_TITLE,
44
+ } from '../../__lib__/LegendCubeLabels.js';
29
45
  import { LEGEND_CUBE_TEST_ID } from '../../__lib__/LegendCubeTesting.js';
30
46
  import type { CubeResultValue } from '../../graph-manager/CubeEngine.js';
31
47
  import type { CubeEditorState } from '../../stores/CubeEditorState.js';
32
48
  import type { CubeExecutionResult } from '../../stores/CubeExecutionState.js';
33
- import { getCubeGridQuickActions } from '../../stores/CubeGridQuickActions.js';
49
+ import { getCubeExportFileName } from '../../stores/CubeExportState.js';
50
+ import {
51
+ CubeGridCellKind,
52
+ getCubeGridQuickActions,
53
+ } from '../../stores/CubeGridQuickActions.js';
54
+ import {
55
+ CUBE_GRID_COLUMN_ID_PREFIX,
56
+ type CubeGridRowData,
57
+ } from '../../stores/CubeGridState.js';
34
58
  import {
35
59
  compareCellValues,
36
60
  formatCellValue,
61
+ formatColumnValue,
62
+ formatGroupRowValue,
63
+ getTypeScale,
37
64
  isNumericFamily,
38
65
  } from './CubeGridValues.js';
39
66
 
40
67
  type CubeRow = readonly CubeResultValue[];
41
68
 
42
- /** A column's id in the grid: its position, as `c<position>` */
43
- const COLUMN_ID_PREFIX = 'c';
69
+ /** A row of either mode: a run's row in local mode, a level's row in server-side mode */
70
+ export type CubeAnyRow = CubeRow | CubeGridRowData;
71
+
72
+ const COLUMN_ID_PREFIX = CUBE_GRID_COLUMN_ID_PREFIX;
44
73
 
45
74
  /**
46
- * The grid's context menu (spec §12.4): on a cell, its quick actions, then
47
- * ag-grid's own items, which M7 curates; elsewhere ag-grid's only. Read when
48
- * the menu opens, so it reflects the cube and the run as they are then.
75
+ * A cell of a row, and what it holds: a run row's value; on a group row, its
76
+ * key in a group column, else its aggregation, or nothing
49
77
  */
50
- export const getCubeGridContextMenuItems = (
78
+ const cellOf = (
51
79
  editorState: CubeEditorState,
52
- params: DataGridGetContextMenuItemsParams<CubeRow>,
53
- ): (DataGridDefaultMenuItem | DataGridMenuItemDef<CubeRow>)[] => {
54
- const defaultItems = params.defaultItems ?? [];
80
+ row: CubeAnyRow | undefined,
81
+ position: number,
82
+ ): [CubeResultValue, CubeGridCellKind] => {
83
+ if (!row || Array.isArray(row)) {
84
+ return [
85
+ (row as CubeRow | undefined)?.[position] ?? null,
86
+ CubeGridCellKind.VALUE,
87
+ ];
88
+ }
89
+ const data = row as CubeGridRowData;
90
+ const value = data.cells[position];
91
+ if (!data.isGroup) {
92
+ return [value ?? null, CubeGridCellKind.VALUE];
93
+ }
94
+ const name = editorState.execution.result?.schema.columns[position]?.name;
95
+ const keys = editorState.grid.drilldown?.columns.slice(0, data.keys.length);
96
+ return name !== undefined && keys?.includes(name)
97
+ ? [value ?? null, CubeGridCellKind.VALUE]
98
+ : value === undefined
99
+ ? [null, CubeGridCellKind.EMPTY]
100
+ : [value, CubeGridCellKind.AGGREGATE];
101
+ };
102
+
103
+ /**
104
+ * The menu's Export (spec §12.5, PLAN §11.10), in place of ag-grid's export of
105
+ * the fetched rows: CSV of the whole query, run on the engine with no row
106
+ * limit and sorted as the grid is; Excel of the rows the grid shows
107
+ */
108
+ const getCubeExportItem = <Row extends CubeAnyRow>(
109
+ editorState: CubeEditorState,
110
+ params: DataGridGetContextMenuItemsParams<Row>,
111
+ ): DataGridMenuItemDef<Row> => {
112
+ const { result } = editorState.execution;
113
+ const { isExporting } = editorState.export;
114
+ return {
115
+ name: 'Export',
116
+ subMenu: [
117
+ {
118
+ name: 'CSV (whole query)',
119
+ disabled: !result || isExporting,
120
+ tooltip:
121
+ 'Runs the whole query on the engine, with no row limit, sorted as the grid is',
122
+ action: () => {
123
+ if (result) {
124
+ const sortModel = params.api
125
+ .getColumnState()
126
+ .filter((column) => column.sort)
127
+ .sort((a, b) => (a.sortIndex ?? 0) - (b.sortIndex ?? 0))
128
+ .map((column) => ({
129
+ colId: column.colId,
130
+ sort: column.sort as 'asc' | 'desc',
131
+ }));
132
+ const depth = editorState.grid.drilldown?.columns.length ?? 0;
133
+ flowResult(
134
+ editorState.export.exportCsv(
135
+ result,
136
+ editorState.grid.toSorts(result, sortModel, depth),
137
+ ),
138
+ ).catch(editorState.host.applicationStore.alertUnhandledError);
139
+ }
140
+ },
141
+ },
142
+ {
143
+ name: 'Excel (rows shown)',
144
+ tooltip:
145
+ 'The rows the grid has loaded, expanded groups included, as the grid shows them',
146
+ action: () =>
147
+ params.api.exportDataAsExcel({
148
+ fileName: getCubeExportFileName(editorState.document.name, 'xlsx'),
149
+ // a group row's key as the grid shows it, not ag-grid's ' -> key'
150
+ processRowGroupCallback: ({ node }) => {
151
+ const data = node.data as CubeAnyRow | undefined;
152
+ if (data && !Array.isArray(data)) {
153
+ const key = (data as CubeGridRowData).keys.at(-1) ?? null;
154
+ return key === null ? NULL_CELL_TEXT : String(key);
155
+ }
156
+ return node.key ?? NULL_CELL_TEXT;
157
+ },
158
+ }),
159
+ },
160
+ ],
161
+ };
162
+ };
163
+
164
+ /** ag-grid's own items the menu keeps (spec §12.4), after the cell's */
165
+ const CUBE_GRID_MENU_ITEMS: readonly DataGridDefaultMenuItem[] = [
166
+ 'autoSizeAll',
167
+ 'resetColumns',
168
+ 'separator',
169
+ 'copy',
170
+ 'copyWithHeaders',
171
+ ];
172
+
173
+ /**
174
+ * The grid's context menu (spec §12.4, PLAN §11.10), curated: on a cell,
175
+ * 'Drilldown by' its column and the quick actions, then a separator; then,
176
+ * anywhere, sizing and resetting the columns, copying, and Cube's Export. Not
177
+ * ag-grid's cut, paste or client export, which would export the fetched rows
178
+ * only. Read when the menu opens, so it reflects the cube and the run as they
179
+ * are then.
180
+ */
181
+ export const getCubeGridContextMenuItems = <Row extends CubeAnyRow>(
182
+ editorState: CubeEditorState,
183
+ params: DataGridGetContextMenuItemsParams<Row>,
184
+ ): (DataGridDefaultMenuItem | DataGridMenuItemDef<Row>)[] => {
185
+ const common: (DataGridDefaultMenuItem | DataGridMenuItemDef<Row>)[] = [
186
+ ...CUBE_GRID_MENU_ITEMS,
187
+ getCubeExportItem(editorState, params),
188
+ ];
55
189
  const colId = params.column?.getColId();
56
190
  if (!colId?.startsWith(COLUMN_ID_PREFIX)) {
57
- return defaultItems;
191
+ return common;
58
192
  }
59
193
  const position = Number(colId.slice(COLUMN_ID_PREFIX.length));
60
- const cell = params.node?.data?.[position] ?? null;
61
- const actions = getCubeGridQuickActions(editorState, position, cell);
62
- if (!actions.length) {
63
- return defaultItems;
194
+ // local mode's group rows hold ag-grid's totals, not a row (review of M7)
195
+ const [cell, kind] =
196
+ params.node?.group && !params.node.data
197
+ ? [null, CubeGridCellKind.EMPTY]
198
+ : cellOf(editorState, params.node?.data, position);
199
+ const actions = getCubeGridQuickActions(editorState, position, cell, kind);
200
+ const column = editorState.execution.result?.schema.columns[position];
201
+ if (!actions.length || !column) {
202
+ return common;
64
203
  }
204
+ const drilldownBlocker = editorState.grid.getAddLevelBlocker(column.name);
205
+ // only number columns are formatted (spec §13.1)
206
+ const formatBlocker = editorState.readOnly
207
+ ? READ_ONLY_CUBE_TITLE
208
+ : isNumericFamily(column.type.family)
209
+ ? undefined
210
+ : CUBE_FORMAT_NOT_A_NUMBER;
65
211
  return [
66
- ...actions.map((quickAction): DataGridMenuItemDef<CubeRow> => {
212
+ {
213
+ name: `Drilldown by "${column.name}"`,
214
+ disabled: drilldownBlocker !== undefined,
215
+ ...(drilldownBlocker === undefined ? {} : { tooltip: drilldownBlocker }),
216
+ action: () => editorState.grid.addLevel(column.name),
217
+ },
218
+ ...actions.map((quickAction): DataGridMenuItemDef<Row> => {
67
219
  const tooltip = quickAction.disabledReason ?? quickAction.hint;
68
220
  return {
69
221
  name: quickAction.label,
@@ -73,29 +225,259 @@ export const getCubeGridContextMenuItems = (
73
225
  };
74
226
  }),
75
227
  'separator',
76
- ...defaultItems,
228
+ {
229
+ name: 'Format Column…',
230
+ disabled: formatBlocker !== undefined,
231
+ ...(formatBlocker === undefined ? {} : { tooltip: formatBlocker }),
232
+ action: () => editorState.grid.openFormat(column.name),
233
+ },
234
+ ...common,
77
235
  ];
78
236
  };
79
237
 
80
238
  /**
81
239
  * A cell: its value as the column's family shows it (`formatCellValue`), with
82
- * the exact value on hover when the two differ
240
+ * the exact value on hover when the two differ; nothing for a group row's
241
+ * column with no aggregation (`undefined`)
83
242
  */
84
- const CubeCell: React.FC<
85
- DataGridCellRendererParams<CubeRow, CubeResultValue> & {
243
+ export const CubeCell: React.FC<
244
+ DataGridCellRendererParams<CubeAnyRow, CubeResultValue | undefined> & {
86
245
  family: TypeFamily;
246
+ /** The column's format (PLAN §11.10), on a number column that has one */
247
+ format?: ColumnFormat | undefined;
248
+ /**
249
+ * A group row shows a count in this column, which is never formatted (a
250
+ * count is not money, spec §13.1), but where the column is the group's key
251
+ */
252
+ countOnGroupRows?: boolean | undefined;
253
+ /** The column's name and the drill-down's levels, to tell a group row's key */
254
+ columnName?: string | undefined;
255
+ levels?: readonly string[] | undefined;
256
+ /** The digits after the point the column's type keeps, e.g. 4 for `Numeric(14,4)`; none for a type without */
257
+ scale?: number | undefined;
87
258
  }
88
259
  > = (props) => {
89
- if (props.value === null || props.value === undefined) {
260
+ if (props.value === undefined) {
261
+ return null;
262
+ }
263
+ if (props.value === null) {
90
264
  return (
91
265
  <span className="text-[var(--color-text-muted)]">{NULL_CELL_TEXT}</span>
92
266
  );
93
267
  }
94
268
  const exact = String(props.value);
95
- const shown = formatCellValue(props.value, props.family);
269
+ const row = props.data;
270
+ // a value a group row aggregates: local mode's group rows, or a server-side
271
+ // group row's cell in a column that isn't one of the group's keys
272
+ const isGroupRowKey =
273
+ row !== undefined &&
274
+ !Array.isArray(row) &&
275
+ (row as CubeGridRowData).isGroup &&
276
+ (props.levels ?? [])
277
+ .slice(0, (row as CubeGridRowData).keys.length)
278
+ .includes(props.columnName ?? '');
279
+ // never a group's key: year 2024 and id 13 keep no comma
280
+ const isAggregate =
281
+ !isGroupRowKey &&
282
+ (props.node.group === true ||
283
+ (row !== undefined &&
284
+ !Array.isArray(row) &&
285
+ (row as CubeGridRowData).isGroup));
286
+ // local mode's group row totalling the column by ag-grid's own count
287
+ const isLocalCount =
288
+ props.node.group === true && props.column?.getAggFunc() === 'count';
289
+ const isCount =
290
+ isLocalCount ||
291
+ (props.countOnGroupRows === true &&
292
+ row !== undefined &&
293
+ !Array.isArray(row) &&
294
+ (row as CubeGridRowData).isGroup &&
295
+ !(props.levels ?? [])
296
+ .slice(0, (row as CubeGridRowData).keys.length)
297
+ .includes(props.columnName ?? ''));
298
+ const formatted =
299
+ props.format && !isCount
300
+ ? formatColumnValue(props.value, props.format)
301
+ : undefined;
302
+ if (formatted) {
303
+ return (
304
+ <span
305
+ title={exact}
306
+ className={clsx({
307
+ 'text-[var(--color-status-error)]':
308
+ props.format?.redIfNegative && formatted.negative,
309
+ })}
310
+ >
311
+ {formatted.text}
312
+ </span>
313
+ );
314
+ }
315
+ const shown = isAggregate
316
+ ? formatGroupRowValue(props.value, props.family, props.scale)
317
+ : formatCellValue(props.value, props.family);
96
318
  return shown === exact ? <>{exact}</> : <span title={exact}>{shown}</span>;
97
319
  };
98
320
 
321
+ /** The class of a number column's cells, which Excel exports as numbers (`CUBE_EXCEL_STYLES`) */
322
+ const CUBE_EXCEL_NUMBER_CLASS = 'cube-excel-number';
323
+
324
+ /**
325
+ * The grid's Excel styles: a number column's cells are numbers in the
326
+ * workbook, where ag-grid would write the exact text it holds as text
327
+ */
328
+ export const CUBE_EXCEL_STYLES = [
329
+ { id: CUBE_EXCEL_NUMBER_CLASS, dataType: 'Number' as const },
330
+ ];
331
+
332
+ /** The group-row aggregations that count, whose cells keep no format */
333
+ const COUNT_AGGREGATIONS: readonly AggregationFunction[] = [
334
+ AggregationFunction.COUNT,
335
+ AggregationFunction.DISTINCT_COUNT,
336
+ ];
337
+
338
+ /**
339
+ * The grid's columns: the run's, from Cube's own schema of the node that ran,
340
+ * by position, so any column name works, with the type in the header's
341
+ * tooltip; numbers right-aligned and sorted exactly as the engine wrote them
342
+ */
343
+ export const buildCubeColumnDefs = <Row extends CubeAnyRow>(
344
+ result: CubeExecutionResult,
345
+ valueAt: (
346
+ row: Row | undefined,
347
+ position: number,
348
+ ) => CubeResultValue | undefined,
349
+ presentation: Presentation = DEFAULT_PRESENTATION,
350
+ drilldown?: CheckedDrilldown | undefined,
351
+ ): DataGridColumnDefinition<Row, CubeResultValue | undefined>[] =>
352
+ result.schema.columns.map((column, position) => {
353
+ const numeric = isNumericFamily(column.type.family);
354
+ const width = presentation.columnWidths.find(
355
+ (each) => foldColumnName(each.column) === foldColumnName(column.name),
356
+ )?.width;
357
+ return {
358
+ colId: `${COLUMN_ID_PREFIX}${position}`,
359
+ headerName: column.name,
360
+ headerTooltip: `${column.type.displayName}${column.nullable ? '?' : ''} (${column.type.fullName})`,
361
+ valueGetter: (params) => valueAt(params.data, position),
362
+ cellRenderer: CubeCell,
363
+ cellRendererParams: {
364
+ family: column.type.family,
365
+ // only number columns are formatted (spec §13.1)
366
+ format: numeric
367
+ ? getColumnFormat(presentation.columnHints ?? [], column.name)
368
+ : undefined,
369
+ countOnGroupRows: drilldown
370
+ ? COUNT_AGGREGATIONS.includes(
371
+ drilldown.aggregationOf(column.name) as AggregationFunction,
372
+ )
373
+ : false,
374
+ columnName: column.name,
375
+ levels: drilldown?.columns ?? [],
376
+ scale: getTypeScale(column.type),
377
+ },
378
+ ...(width === undefined ? {} : { width }),
379
+ ...(numeric
380
+ ? {
381
+ type: 'rightAligned',
382
+ comparator: compareCellValues,
383
+ // a number in Excel, though it reaches the grid as exact text; a
384
+ // column's own cell class replaces its type's, so the type's is
385
+ // kept too
386
+ cellClass: ['ag-right-aligned-cell', CUBE_EXCEL_NUMBER_CLASS],
387
+ }
388
+ : {}),
389
+ };
390
+ });
391
+
392
+ /**
393
+ * Keeps a column's width when the user resizes it, by dragging or from the
394
+ * menu (PLAN §11.10): the cube saves it, with no undo step
395
+ */
396
+ export const keepCubeColumnWidths = (
397
+ editorState: CubeEditorState,
398
+ result: CubeExecutionResult,
399
+ event: {
400
+ readonly finished: boolean;
401
+ readonly source: string;
402
+ readonly columns?: readonly DataGridColumn[] | null | undefined;
403
+ },
404
+ ): void => {
405
+ if (
406
+ !event.finished ||
407
+ (event.source !== 'uiColumnResized' && event.source !== 'autosizeColumns')
408
+ ) {
409
+ return;
410
+ }
411
+ (event.columns ?? []).forEach((column) => {
412
+ const colId = column.getColId();
413
+ const name = colId.startsWith(COLUMN_ID_PREFIX)
414
+ ? result.schema.columns[Number(colId.slice(COLUMN_ID_PREFIX.length))]
415
+ ?.name
416
+ : undefined;
417
+ if (name !== undefined) {
418
+ editorState.setColumnWidth(name, column.getActualWidth());
419
+ }
420
+ });
421
+ };
422
+
423
+ /** A value as a JS number, for local mode's filters and totals; `null` for none or text that isn't one */
424
+ const toNumber = (value: CubeResultValue | undefined): number | null => {
425
+ if (value === null || value === undefined || value === '') {
426
+ return null;
427
+ }
428
+ const number = Number(value);
429
+ return Number.isFinite(number) ? number : null;
430
+ };
431
+
432
+ /** The numbers among a group's values, for local mode's totals */
433
+ const numbersOf = (params: DataGridIAggFuncParams): number[] =>
434
+ params.values
435
+ .map((value: unknown) => toNumber(value as CubeResultValue))
436
+ .filter((value): value is number => value !== null);
437
+
438
+ /**
439
+ * Local mode's totals over a group's values, read as JS numbers: the engine
440
+ * writes integers and decimals as exact text, which ag-grid's own would join
441
+ * as text; a total past a double's precision is rounded, as local mode works
442
+ * on the fetched rows in the browser
443
+ */
444
+ export const LOCAL_AGGREGATIONS = {
445
+ sum: (params: DataGridIAggFuncParams) =>
446
+ numbersOf(params).reduce((total, value) => total + value, 0),
447
+ avg: (params: DataGridIAggFuncParams) => {
448
+ const numbers = numbersOf(params);
449
+ return numbers.length
450
+ ? numbers.reduce((total, value) => total + value, 0) / numbers.length
451
+ : null;
452
+ },
453
+ min: (params: DataGridIAggFuncParams) => {
454
+ const numbers = numbersOf(params);
455
+ return numbers.length ? Math.min(...numbers) : null;
456
+ },
457
+ max: (params: DataGridIAggFuncParams) => {
458
+ const numbers = numbersOf(params);
459
+ return numbers.length ? Math.max(...numbers) : null;
460
+ },
461
+ };
462
+
463
+ const LOCAL_COLUMN_DEFAULTS: DataGridColumnDefinition<CubeRow> = {
464
+ enableRowGroup: true,
465
+ enablePivot: true,
466
+ enableValue: true,
467
+ filter: 'agTextColumnFilter',
468
+ };
469
+
470
+ const LOCAL_SIDE_BAR = {
471
+ toolPanels: ['columns', 'filters'],
472
+ };
473
+
474
+ const LOCAL_STATUS_BAR = {
475
+ statusPanels: [
476
+ { statusPanel: 'agTotalAndFilteredRowCountComponent', align: 'left' },
477
+ { statusPanel: 'agAggregationComponent', align: 'right' },
478
+ ],
479
+ };
480
+
99
481
  /**
100
482
  * The rows of a run (PLAN §9): columns from Cube's own schema of the capture
101
483
  * node, by position, so any column name works. Numbers are right-aligned and
@@ -106,31 +488,39 @@ export const CubeResultGrid = memo(
106
488
  (props: {
107
489
  editorState: CubeEditorState;
108
490
  result: CubeExecutionResult;
491
+ presentation: Presentation;
109
492
  darkMode: boolean;
110
493
  }) => {
111
- const { editorState, result, darkMode } = props;
494
+ const { editorState, result, presentation, darkMode } = props;
112
495
  const getContextMenuItems = useCallback(
113
496
  (params: DataGridGetContextMenuItemsParams<CubeRow>) =>
114
497
  getCubeGridContextMenuItems(editorState, params),
115
498
  [editorState],
116
499
  );
117
500
  const columnDefs = useMemo(
118
- (): DataGridColumnDefinition<CubeRow, CubeResultValue>[] =>
119
- result.schema.columns.map((column, position) => {
120
- const numeric = isNumericFamily(column.type.family);
121
- return {
122
- colId: `${COLUMN_ID_PREFIX}${position}`,
123
- headerName: column.name,
124
- headerTooltip: `${column.type.displayName}${column.nullable ? '?' : ''} (${column.type.fullName})`,
125
- valueGetter: (params) => params.data?.[position] ?? null,
126
- cellRenderer: CubeCell,
127
- cellRendererParams: { family: column.type.family },
128
- ...(numeric
129
- ? { type: 'rightAligned', comparator: compareCellValues }
130
- : {}),
131
- };
132
- }),
133
- [result],
501
+ () =>
502
+ buildCubeColumnDefs<CubeRow>(
503
+ result,
504
+ (row, position) => row?.[position] ?? null,
505
+ presentation,
506
+ ).map(
507
+ (
508
+ column,
509
+ position,
510
+ ): DataGridColumnDefinition<CubeRow, CubeResultValue | undefined> =>
511
+ isNumericFamily(
512
+ result.schema.columns[position]?.type.family as TypeFamily,
513
+ )
514
+ ? {
515
+ ...column,
516
+ filter: 'agNumberColumnFilter',
517
+ filterValueGetter: (params: { data: CubeRow | undefined }) =>
518
+ toNumber(params.data?.[position] ?? null),
519
+ allowedAggFuncs: ['sum', 'avg', 'min', 'max', 'count'],
520
+ }
521
+ : { ...column, allowedAggFuncs: ['count'] },
522
+ ),
523
+ [result, presentation],
134
524
  );
135
525
  return (
136
526
  <div
@@ -146,6 +536,18 @@ export const CubeResultGrid = memo(
146
536
  suppressFieldDotNotation={true}
147
537
  tooltipShowDelay={500}
148
538
  getContextMenuItems={getContextMenuItems}
539
+ // local mode (spec §12.1): ag-grid's own grouping, pivot and
540
+ // filters on the run's rows, with their panels and totals
541
+ defaultColDef={LOCAL_COLUMN_DEFAULTS}
542
+ aggFuncs={LOCAL_AGGREGATIONS}
543
+ rowGroupPanelShow="always"
544
+ sideBar={LOCAL_SIDE_BAR}
545
+ statusBar={LOCAL_STATUS_BAR}
546
+ cellSelection={true}
547
+ excelStyles={CUBE_EXCEL_STYLES}
548
+ onColumnResized={(event) =>
549
+ keepCubeColumnWidths(editorState, result, event)
550
+ }
149
551
  />
150
552
  </div>
151
553
  );