@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
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Copyright (c) 2026-present, Goldman Sachs
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import { flowResult } from 'mobx';
18
+ import { observer } from 'mobx-react-lite';
19
+ import { LEGEND_CUBE_TEST_ID } from '../../__lib__/LegendCubeTesting.js';
20
+ import type { CubeEditorState } from '../../stores/CubeEditorState.js';
21
+ import {
22
+ type CubeRunStat,
23
+ MAX_CUBE_RUN_STATS,
24
+ } from '../../stores/CubeRunStatsState.js';
25
+ import { CubeButton } from '../CubeButton.js';
26
+ import { formatDuration } from './CubeGridValues.js';
27
+ import { formatCubeSql, formatCubeSqlStatement } from './CubeSqlFormat.js';
28
+
29
+ /** Why a run has no Pure nor JSON: it failed before its lambda was written */
30
+ const NO_LAMBDA_TITLE = 'This run failed before its query was written';
31
+
32
+ /** A run's time of day, as the viewer's clock shows it */
33
+ const formatTime = (finishedAt: number): string =>
34
+ new Date(finishedAt).toLocaleTimeString();
35
+
36
+ /**
37
+ * The page's latest runs, newest first (spec §12.6, PLAN §11.10): each
38
+ * Execute, fetch of the grid's rows, export and Pivot value load, with when
39
+ * it finished, how long it took, and its SQL to read and copy; its Pure, as
40
+ * it ran, and its lambda's JSON, and why it failed (PLAN §11.16)
41
+ */
42
+ export const CubeRunStatsPanel = observer(
43
+ (props: { editorState: CubeEditorState }) => {
44
+ const { editorState } = props;
45
+ const { applicationStore } = editorState.host;
46
+ const { entries } = editorState.runStats;
47
+ const copy = (sql: readonly string[]): void => {
48
+ applicationStore.clipboardService
49
+ .copyTextToClipboard(formatCubeSql(sql))
50
+ .catch(applicationStore.alertUnhandledError);
51
+ };
52
+ const showPure = (entry: CubeRunStat): void => {
53
+ flowResult(editorState.showPure.openRun(entry)).catch(
54
+ applicationStore.alertUnhandledError,
55
+ );
56
+ };
57
+ const copyJson = (entry: CubeRunStat): void => {
58
+ if (entry.lambda !== undefined) {
59
+ applicationStore.clipboardService
60
+ .copyTextToClipboard(
61
+ editorState.host.engine.serializeLambda(entry.lambda),
62
+ { notifySuccessMessage: 'The lambda JSON was copied' },
63
+ )
64
+ .catch(applicationStore.alertUnhandledError);
65
+ }
66
+ };
67
+ return (
68
+ <div
69
+ className="max-h-60 shrink-0 overflow-auto border-b border-[var(--color-border-default)] p-2 text-base"
70
+ data-testid={LEGEND_CUBE_TEST_ID.RUN_STATS}
71
+ >
72
+ {!entries.length ? (
73
+ <div className="text-[var(--color-text-secondary)]">
74
+ Nothing has run yet.
75
+ </div>
76
+ ) : (
77
+ <ol className="flex flex-col gap-1" aria-label="Latest runs">
78
+ {entries.map((entry) => (
79
+ <li key={entry.id} className="flex flex-col">
80
+ <div className="flex items-center gap-3">
81
+ <span className="min-w-0 flex-1 truncate" title={entry.label}>
82
+ {entry.label}
83
+ </span>
84
+ <span className="text-[var(--color-text-secondary)]">
85
+ {formatTime(entry.finishedAt)}
86
+ </span>
87
+ <span className="w-16 text-right text-[var(--color-text-secondary)]">
88
+ {formatDuration(entry.durationMs)}
89
+ </span>
90
+ <CubeButton
91
+ disabled={entry.lambda === undefined}
92
+ title={
93
+ entry.lambda === undefined
94
+ ? NO_LAMBDA_TITLE
95
+ : 'Show the Pure query this run sent'
96
+ }
97
+ onClick={() => showPure(entry)}
98
+ >
99
+ Show Pure
100
+ </CubeButton>
101
+ <CubeButton
102
+ disabled={entry.lambda === undefined}
103
+ title={
104
+ entry.lambda === undefined
105
+ ? NO_LAMBDA_TITLE
106
+ : 'Copy the lambda this run sent, as the engine received it'
107
+ }
108
+ onClick={() => copyJson(entry)}
109
+ >
110
+ Copy JSON
111
+ </CubeButton>
112
+ <CubeButton
113
+ disabled={!entry.sql.length}
114
+ title={
115
+ entry.sql.length
116
+ ? 'Copy the SQL'
117
+ : 'The engine gave no SQL for this run'
118
+ }
119
+ onClick={() => copy(entry.sql)}
120
+ >
121
+ Copy SQL
122
+ </CubeButton>
123
+ </div>
124
+ {entry.error !== undefined && (
125
+ <div className="whitespace-pre-wrap break-words text-sm text-[var(--color-status-error)]">
126
+ {`Failed: ${entry.error}`}
127
+ </div>
128
+ )}
129
+ {entry.sql.length > 0 && (
130
+ <details>
131
+ <summary className="cursor-pointer text-sm text-[var(--color-text-secondary)]">
132
+ SQL
133
+ </summary>
134
+ {entry.sql.map((statement, index) => (
135
+ <pre
136
+ // statements hold no state, and the same one may run twice
137
+ // eslint-disable-next-line react/no-array-index-key
138
+ key={index}
139
+ className="whitespace-pre-wrap font-mono text-sm"
140
+ >
141
+ {formatCubeSqlStatement(statement)}
142
+ </pre>
143
+ ))}
144
+ </details>
145
+ )}
146
+ </li>
147
+ ))}
148
+ </ol>
149
+ )}
150
+ <div className="mt-1 text-sm text-[var(--color-text-muted)]">
151
+ {`The latest ${MAX_CUBE_RUN_STATS} runs on this page are kept.`}
152
+ </div>
153
+ </div>
154
+ );
155
+ },
156
+ );
@@ -0,0 +1,200 @@
1
+ /**
2
+ * Copyright (c) 2026-present, Goldman Sachs
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import { clsx } from '@finos/legend-art';
18
+ import type { Presentation, TypeFamily } from '@finos/legend-cube';
19
+ import {
20
+ DataGrid,
21
+ type DataGridCellRendererParams,
22
+ type DataGridColumnDefinition,
23
+ type DataGridGetContextMenuItemsParams,
24
+ type DataGridServerSideDatasource,
25
+ type DataGridServerSideGetRowsParams,
26
+ } from '@finos/legend-lego/data-grid';
27
+ import { memo, useCallback, useEffect, useMemo, useState } from 'react';
28
+ import { NULL_CELL_TEXT } from '../../__lib__/LegendCubeLabels.js';
29
+ import { LEGEND_CUBE_TEST_ID } from '../../__lib__/LegendCubeTesting.js';
30
+ import type { CubeEditorState } from '../../stores/CubeEditorState.js';
31
+ import type { CubeExecutionResult } from '../../stores/CubeExecutionState.js';
32
+ import type {
33
+ CubeGridRowData,
34
+ CubeGridSortRequest,
35
+ } from '../../stores/CubeGridState.js';
36
+ import { formatCellValue } from './CubeGridValues.js';
37
+ import {
38
+ buildCubeColumnDefs,
39
+ CUBE_EXCEL_STYLES,
40
+ getCubeGridContextMenuItems,
41
+ keepCubeColumnWidths,
42
+ } from './CubeResultGrid.js';
43
+
44
+ /** A group row's key as text, for export and copy: `(null)` for an empty one; nothing on a run row */
45
+ const groupKeyText = (row: CubeGridRowData | undefined): string => {
46
+ if (!row?.isGroup) {
47
+ return '';
48
+ }
49
+ const key = row.keys.at(-1) ?? null;
50
+ return key === null ? NULL_CELL_TEXT : String(key);
51
+ };
52
+
53
+ /** A group's key in the groups' column, as its level's column shows a value */
54
+ const CubeGroupKey: React.FC<
55
+ DataGridCellRendererParams<CubeGridRowData> & {
56
+ families: readonly TypeFamily[];
57
+ }
58
+ > = (props) => {
59
+ const { data, families } = props;
60
+ if (!data?.isGroup) {
61
+ return null;
62
+ }
63
+ const key = data.keys.at(-1) ?? null;
64
+ const family = families[data.keys.length - 1];
65
+ if (key === null || family === undefined) {
66
+ return (
67
+ <span className="text-[var(--color-text-muted)]">{NULL_CELL_TEXT}</span>
68
+ );
69
+ }
70
+ return <>{formatCellValue(key, family)}</>;
71
+ };
72
+
73
+ /**
74
+ * The rows of a run in server-side mode (spec §12.1, PLAN §11.10): ag-grid's
75
+ * server-side row model asks for each level as it is shown, sorted by its
76
+ * headers, and the grid's state answers from the run on screen. With a
77
+ * drill-down, the levels are groups of the run's rows, each expandable down
78
+ * to the rows, shown in a column of their own with each group's count.
79
+ * Every level is answered whole, cut at the run's row limit, and ag-grid's
80
+ * blocks are taken from it.
81
+ */
82
+ export const CubeServerSideGrid = memo(
83
+ (props: {
84
+ editorState: CubeEditorState;
85
+ result: CubeExecutionResult;
86
+ /** The drill-down's levels, as the run names them: the grid is built anew when they change */
87
+ levels: readonly string[];
88
+ presentation: Presentation;
89
+ darkMode: boolean;
90
+ }) => {
91
+ const { editorState, result, levels, presentation, darkMode } = props;
92
+ const { grid } = editorState;
93
+ // a new grid for each run and drill-down (its key): its own token, taken
94
+ // before ag-grid's first request, and its levels say anew
95
+ const [token] = useState(() => grid.beginGrid());
96
+ useEffect(() => {
97
+ grid.resetLevels();
98
+ }, [grid]);
99
+ const { drilldown } = grid;
100
+ const getContextMenuItems = useCallback(
101
+ (params: DataGridGetContextMenuItemsParams<CubeGridRowData>) =>
102
+ getCubeGridContextMenuItems(editorState, params),
103
+ [editorState],
104
+ );
105
+ const columnDefs = useMemo(
106
+ (): DataGridColumnDefinition<CubeGridRowData>[] =>
107
+ buildCubeColumnDefs<CubeGridRowData>(
108
+ result,
109
+ (row, position) => row?.cells[position],
110
+ presentation,
111
+ drilldown,
112
+ ),
113
+ [result, presentation, drilldown],
114
+ );
115
+ const families = useMemo(
116
+ () =>
117
+ levels.map(
118
+ (level) => result.schema.lookup(level)?.type.family as TypeFamily,
119
+ ),
120
+ [result, levels],
121
+ );
122
+ const datasource = useMemo(
123
+ (): DataGridServerSideDatasource<CubeGridRowData> => ({
124
+ getRows: (params: DataGridServerSideGetRowsParams<CubeGridRowData>) => {
125
+ const keys = params.parentNode.data?.keys ?? [];
126
+ const { startRow = 0, endRow, sortModel } = params.request;
127
+ grid
128
+ .loadRows(
129
+ result,
130
+ keys,
131
+ sortModel as readonly CubeGridSortRequest[],
132
+ token,
133
+ )
134
+ .then((rows) => {
135
+ // rows the grid no longer shows are left alone
136
+ if (rows) {
137
+ params.success({
138
+ rowData: rows.slice(startRow, endRow ?? rows.length),
139
+ rowCount: rows.length,
140
+ });
141
+ }
142
+ })
143
+ // the grid region shows the error
144
+ .catch(() => params.fail());
145
+ },
146
+ }),
147
+ [grid, result, token],
148
+ );
149
+ const hasLevels = levels.length > 0;
150
+ return (
151
+ <div
152
+ className={clsx('h-full w-full', {
153
+ 'ag-theme-balham': !darkMode,
154
+ 'ag-theme-balham-dark': darkMode,
155
+ })}
156
+ data-testid={LEGEND_CUBE_TEST_ID.RESULT_GRID}
157
+ >
158
+ <DataGrid<CubeGridRowData>
159
+ rowModelType="serverSide"
160
+ serverSideDatasource={datasource}
161
+ columnDefs={columnDefs}
162
+ getRowId={(params) => params.data.id}
163
+ suppressFieldDotNotation={true}
164
+ tooltipShowDelay={500}
165
+ getContextMenuItems={getContextMenuItems}
166
+ serverSideSortAllLevels={true}
167
+ excelStyles={CUBE_EXCEL_STYLES}
168
+ onColumnResized={(event) =>
169
+ keepCubeColumnWidths(editorState, result, event)
170
+ }
171
+ {...(hasLevels
172
+ ? {
173
+ treeData: true,
174
+ isServerSideGroup: (data: CubeGridRowData) => data.isGroup,
175
+ getServerSideGroupKey: (data: CubeGridRowData) => data.id,
176
+ getChildCount: (data: CubeGridRowData) => data.count ?? 0,
177
+ autoGroupColumnDef: {
178
+ // the key, as export and copy read it, not the row's id
179
+ valueGetter: (params: {
180
+ data: CubeGridRowData | undefined;
181
+ }) => groupKeyText(params.data),
182
+ headerName: levels.join(' › '),
183
+ // the groups stay in view as the grid scrolls sideways
184
+ pinned: 'left' as const,
185
+ headerTooltip: `The groups, by ${levels.join(', then ')}`,
186
+ minWidth: 200,
187
+ sortable: true,
188
+ cellRendererParams: {
189
+ innerRenderer: CubeGroupKey,
190
+ innerRendererParams: { families },
191
+ },
192
+ },
193
+ }
194
+ : {})}
195
+ />
196
+ </div>
197
+ );
198
+ },
199
+ );
200
+ CubeServerSideGrid.displayName = 'CubeServerSideGrid';
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Copyright (c) 2026-present, Goldman Sachs
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import {
18
+ Dialog,
19
+ Modal,
20
+ ModalBody,
21
+ ModalFooter,
22
+ ModalFooterButton,
23
+ ModalHeader,
24
+ } from '@finos/legend-art';
25
+ import { CodeEditor } from '@finos/legend-lego/code-editor';
26
+ import { observer } from 'mobx-react-lite';
27
+ import { LEGEND_CUBE_TEST_ID } from '../../__lib__/LegendCubeTesting.js';
28
+ import type { CubeEditorState } from '../../stores/CubeEditorState.js';
29
+ import { formatCubeSql } from './CubeSqlFormat.js';
30
+ import { CUBE_PRIMARY_BUTTON_DARK_MODE } from '../CubeDialogTheme.js';
31
+
32
+ /** The code editor's language: legend-code-editor's `CODE_EDITOR_LANGUAGE.SQL` */
33
+ const SQL_LANGUAGE = 'sql';
34
+
35
+ /** The SQL the run's database ran, formatted, with Copy: a dialog, as Legend Query's executed SQL */
36
+ export const CubeSqlDialog = observer(
37
+ (props: { editorState: CubeEditorState; onClose: () => void }) => {
38
+ const { editorState, onClose } = props;
39
+ const { applicationStore } = editorState.host;
40
+ const sql = editorState.execution.result?.sql ?? [];
41
+ const darkMode =
42
+ !applicationStore.layoutService.TEMPORARY__isLightColorThemeEnabled;
43
+ const text = formatCubeSql(sql);
44
+ const copySql = (): void => {
45
+ applicationStore.clipboardService
46
+ .copyTextToClipboard(text)
47
+ .catch(applicationStore.alertUnhandledError);
48
+ };
49
+ return (
50
+ <Dialog open={sql.length > 0} onClose={onClose}>
51
+ <Modal darkMode={darkMode} className="w-[960px] max-w-full">
52
+ <ModalHeader>
53
+ <div className="modal__title">Executed SQL</div>
54
+ </ModalHeader>
55
+ <ModalBody>
56
+ <div
57
+ className="h-[60vh] w-full overflow-hidden rounded-sm border border-[var(--color-border-default)]"
58
+ aria-label="Executed SQL"
59
+ data-testid={LEGEND_CUBE_TEST_ID.SQL_PANEL}
60
+ >
61
+ <CodeEditor
62
+ inputValue={text}
63
+ isReadOnly={true}
64
+ language={SQL_LANGUAGE}
65
+ hideMinimap={true}
66
+ hideActionBar={true}
67
+ extraEditorOptions={{ scrollBeyondLastLine: false }}
68
+ />
69
+ </div>
70
+ </ModalBody>
71
+ <ModalFooter>
72
+ <ModalFooterButton
73
+ darkMode={CUBE_PRIMARY_BUTTON_DARK_MODE}
74
+ formatText={false}
75
+ text="Copy SQL"
76
+ onClick={copySql}
77
+ />
78
+ <ModalFooterButton
79
+ darkMode={darkMode}
80
+ formatText={false}
81
+ type="secondary"
82
+ text="Close"
83
+ onClick={onClose}
84
+ />
85
+ </ModalFooter>
86
+ </Modal>
87
+ </Dialog>
88
+ );
89
+ },
90
+ );
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Copyright (c) 2026-present, Goldman Sachs
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import { format } from 'sql-formatter';
18
+
19
+ /** A statement laid out on lines, as Legend Query shows its SQL; as it came when it can't be read */
20
+ export const formatCubeSqlStatement = (statement: string): string => {
21
+ try {
22
+ return format(statement, { language: 'sql' });
23
+ } catch {
24
+ return statement;
25
+ }
26
+ };
27
+
28
+ /** A run's statements, each formatted, numbered as Legend Query numbers them when there are several */
29
+ export const formatCubeSql = (statements: readonly string[]): string =>
30
+ statements.length === 1
31
+ ? formatCubeSqlStatement(statements[0] as string)
32
+ : statements
33
+ .map(
34
+ (statement, index) =>
35
+ `--QUERY #${index + 1}\n${formatCubeSqlStatement(statement)}`,
36
+ )
37
+ .join('\n\n');
@@ -18,30 +18,46 @@ import { ChevronLeftIcon, ChevronRightIcon, clsx } from '@finos/legend-art';
18
18
  import {
19
19
  type AnyNodeDefinition,
20
20
  DataProductAccessPointSource,
21
+ FunctionSource,
22
+ IngestDatasetSource,
23
+ ServiceSource,
21
24
  } from '@finos/legend-cube';
22
25
  import { observer } from 'mobx-react-lite';
23
26
  import { useRef } from 'react';
24
27
  import { useDrag } from 'react-dnd';
25
28
  import {
29
+ getCubeNodeBadge,
26
30
  OTHER_SOURCE_KIND_TITLE,
27
31
  READ_ONLY_CUBE_TITLE,
28
32
  } from '../../__lib__/LegendCubeLabels.js';
29
33
  import { LEGEND_CUBE_TEST_ID } from '../../__lib__/LegendCubeTesting.js';
30
- import { addCubeNode } from '../../stores/CubeAddPlacement.js';
34
+ import {
35
+ addCubeNode,
36
+ getCubeAddDatabaseProblem,
37
+ } from '../../stores/CubeAddPlacement.js';
31
38
  import type { CubeEditorState } from '../../stores/CubeEditorState.js';
32
39
  import {
33
40
  CUBE_DND_TYPE,
34
41
  type CubePaletteDragItem,
35
42
  } from '../canvas/CubeCanvasDnd.js';
36
43
  import { CubeNodeIcon } from '../CubeNodeIcon.js';
44
+ import { CubePageMenu } from '../dev-settings/CubeDevSettings.js';
37
45
 
38
46
  /** Shown in the palette while the cube has no node yet (spec §17.2, worded for the canvas) */
39
47
  export const PALETTE_EMPTY_HINT = 'Drag items onto the canvas.';
40
48
 
49
+ /** What a source item picks, for its tooltip: a table, unless its type says otherwise */
50
+ const SOURCE_PICKS: Readonly<Record<string, string>> = {
51
+ [FunctionSource.TYPE]: 'a function',
52
+ [DataProductAccessPointSource.TYPE]: 'an access point',
53
+ [IngestDatasetSource.TYPE]: 'a data set',
54
+ [ServiceSource.TYPE]: 'a service',
55
+ };
56
+
41
57
  /** What an item does, for its tooltip */
42
58
  const describeItem = (definition: AnyNodeDefinition): string =>
43
59
  definition.kind === 'source'
44
- ? `Click, or drop it on the canvas, to pick ${definition.type === DataProductAccessPointSource.TYPE ? 'an access point' : 'a table'}`
60
+ ? `Click, or drop it on the canvas, to pick ${SOURCE_PICKS[definition.type] ?? 'a table'}`
45
61
  : 'Click, or drop it on the canvas, to add it after the selected node; drop it on a node to add it after that node';
46
62
 
47
63
  const CubePaletteItem = observer(
@@ -57,7 +73,12 @@ const CubePaletteItem = observer(
57
73
  !readOnly &&
58
74
  definition.kind === 'source' &&
59
75
  !editorState.canAddNode(definition.type);
60
- const disabled = readOnly || otherKind;
76
+ // nor a transform its database can't run, after the selected node (PLAN §11.12)
77
+ const databaseProblem =
78
+ readOnly || definition.kind === 'source'
79
+ ? undefined
80
+ : getCubeAddDatabaseProblem(editorState, definition.type);
81
+ const disabled = readOnly || otherKind || databaseProblem !== undefined;
61
82
  const ref = useRef<HTMLDivElement>(null);
62
83
  const [, dragConnector] = useDrag<CubePaletteDragItem>(
63
84
  () => ({
@@ -65,13 +86,16 @@ const CubePaletteItem = observer(
65
86
  item: { nodeType: definition.type },
66
87
  canDrag: () =>
67
88
  !editorState.readOnly &&
68
- (definition.kind !== 'source' ||
69
- editorState.canAddNode(definition.type)),
89
+ (definition.kind === 'source'
90
+ ? editorState.canAddNode(definition.type)
91
+ : getCubeAddDatabaseProblem(editorState, definition.type) ===
92
+ undefined),
70
93
  }),
71
94
  [editorState, definition.type, definition.kind],
72
95
  );
73
96
  dragConnector(ref);
74
- const label = `${definition.label}${definition.beta ? ' (BETA)' : ''}`;
97
+ const badge = getCubeNodeBadge(definition);
98
+ const label = `${definition.label}${badge ? ` (${badge})` : ''}`;
75
99
  const add = (): void => {
76
100
  if (!disabled) {
77
101
  addCubeNode(editorState, definition.type);
@@ -96,9 +120,11 @@ const CubePaletteItem = observer(
96
120
  ? READ_ONLY_CUBE_TITLE
97
121
  : otherKind
98
122
  ? OTHER_SOURCE_KIND_TITLE
99
- : collapsed
100
- ? `${label}: ${describeItem(definition)}`
101
- : describeItem(definition)
123
+ : databaseProblem !== undefined
124
+ ? databaseProblem
125
+ : collapsed
126
+ ? `${label}: ${describeItem(definition)}`
127
+ : describeItem(definition)
102
128
  }
103
129
  onClick={add}
104
130
  onKeyDown={(event) => {
@@ -116,9 +142,9 @@ const CubePaletteItem = observer(
116
142
  {!collapsed && (
117
143
  <span className="min-w-0 flex-1 truncate">{definition.label}</span>
118
144
  )}
119
- {!collapsed && definition.beta && (
145
+ {!collapsed && badge && (
120
146
  <span className="shrink-0 rounded-sm bg-[var(--color-accent)] px-1 text-xs font-medium text-[var(--color-text-on-accent)]">
121
- BETA
147
+ {badge}
122
148
  </span>
123
149
  )}
124
150
  </div>
@@ -144,7 +170,14 @@ export const CubePalette = observer(
144
170
  )}
145
171
  data-testid={LEGEND_CUBE_TEST_ID.PALETTE}
146
172
  >
147
- <div className="flex h-8 shrink-0 items-center border-b border-[var(--color-border-default)] bg-[var(--color-bg-panel-header)] px-2">
173
+ <div
174
+ className={clsx(
175
+ 'flex shrink-0 items-center border-b border-[var(--color-border-default)] bg-[var(--color-bg-panel-header)] px-2',
176
+ // collapsed, the menu sits above the button that expands it
177
+ collapsed ? 'flex-col py-1' : 'h-8 gap-1',
178
+ )}
179
+ >
180
+ <CubePageMenu editorState={editorState} />
148
181
  {!collapsed && (
149
182
  <span className="min-w-0 flex-1 truncate text-base font-medium">
150
183
  Add to the query
@@ -24,10 +24,17 @@ import {
24
24
  PanelLoadingIndicator,
25
25
  } from '@finos/legend-art';
26
26
  import { observer } from 'mobx-react-lite';
27
- import { CUBE_PENDING_LABEL } from '../../__lib__/LegendCubeLabels.js';
27
+ import {
28
+ CUBE_PENDING_LABEL,
29
+ CUBE_RUN_PURE_NOTE,
30
+ } from '../../__lib__/LegendCubeLabels.js';
28
31
  import type { CubeEditorState } from '../../stores/CubeEditorState.js';
32
+ import { CUBE_PRIMARY_BUTTON_DARK_MODE } from '../CubeDialogTheme.js';
29
33
 
30
- /** The Pure text of what Execute would run, read-only, with Copy */
34
+ /**
35
+ * The Pure text of what Execute would run, read-only, with Copy; or of a run
36
+ * from the Runs panel, as it ran (PLAN §11.16)
37
+ */
31
38
  export const CubeShowPureDialog = observer(
32
39
  (props: { editorState: CubeEditorState }) => {
33
40
  const { editorState } = props;
@@ -35,17 +42,24 @@ export const CubeShowPureDialog = observer(
35
42
  const { applicationStore } = editorState.host;
36
43
  const darkMode =
37
44
  !applicationStore.layoutService.TEMPORARY__isLightColorThemeEnabled;
38
- const { text, error } = showPure;
45
+ const { text, error, run } = showPure;
39
46
 
40
47
  return (
41
48
  <Dialog open={showPure.isOpen} onClose={() => showPure.close()}>
42
49
  <Modal darkMode={darkMode} className="w-[800px] max-w-full">
43
50
  <ModalHeader>
44
- <div className="modal__title">Pure query</div>
51
+ <div className="modal__title truncate" title={run}>
52
+ {run === undefined ? 'Pure query' : `Pure query of ${run}`}
53
+ </div>
45
54
  </ModalHeader>
46
55
  <PanelLoadingIndicator isLoading={showPure.isRendering} />
47
56
  <ModalBody>
48
57
  <div className="flex flex-col gap-2">
58
+ {run !== undefined && (
59
+ <div className="text-base text-[var(--color-text-secondary)]">
60
+ {CUBE_RUN_PURE_NOTE}
61
+ </div>
62
+ )}
49
63
  {showPure.isRendering && (
50
64
  <div className="text-base text-[var(--color-text-secondary)]">
51
65
  {CUBE_PENDING_LABEL.RENDERING_QUERY}
@@ -71,7 +85,7 @@ export const CubeShowPureDialog = observer(
71
85
  </ModalBody>
72
86
  <ModalFooter>
73
87
  <ModalFooterButton
74
- darkMode={darkMode}
88
+ darkMode={CUBE_PRIMARY_BUTTON_DARK_MODE}
75
89
  formatText={false}
76
90
  text="Copy to Clipboard"
77
91
  disabled={text === undefined}