@finos/legend-cube-builder 0.0.4 → 0.0.6

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