@finos/legend-cube-builder 0.0.0-stage → 0.0.2

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 (301) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +5 -2
  3. package/lib/__lib__/LegendCubeCommand.d.ts +26 -0
  4. package/lib/__lib__/LegendCubeCommand.d.ts.map +1 -0
  5. package/lib/__lib__/LegendCubeCommand.js +40 -0
  6. package/lib/__lib__/LegendCubeCommand.js.map +1 -0
  7. package/lib/__lib__/LegendCubeHelpText.d.ts +19 -0
  8. package/lib/__lib__/LegendCubeHelpText.d.ts.map +1 -0
  9. package/lib/__lib__/LegendCubeHelpText.js +27 -0
  10. package/lib/__lib__/LegendCubeHelpText.js.map +1 -0
  11. package/lib/__lib__/LegendCubeLabels.d.ts +68 -0
  12. package/lib/__lib__/LegendCubeLabels.d.ts.map +1 -0
  13. package/lib/__lib__/LegendCubeLabels.js +109 -0
  14. package/lib/__lib__/LegendCubeLabels.js.map +1 -0
  15. package/lib/__lib__/LegendCubeTesting.d.ts +33 -0
  16. package/lib/__lib__/LegendCubeTesting.d.ts.map +1 -0
  17. package/lib/__lib__/LegendCubeTesting.js +34 -0
  18. package/lib/__lib__/LegendCubeTesting.js.map +1 -0
  19. package/lib/__test-utils__/CubeCanvasTestUtils.d.ts +24 -0
  20. package/lib/__test-utils__/CubeCanvasTestUtils.d.ts.map +1 -0
  21. package/lib/__test-utils__/CubeCanvasTestUtils.js +37 -0
  22. package/lib/__test-utils__/CubeCanvasTestUtils.js.map +1 -0
  23. package/lib/__test-utils__/CubeEngineTestSupport.d.ts +41 -0
  24. package/lib/__test-utils__/CubeEngineTestSupport.d.ts.map +1 -0
  25. package/lib/__test-utils__/CubeEngineTestSupport.js +76 -0
  26. package/lib/__test-utils__/CubeEngineTestSupport.js.map +1 -0
  27. package/lib/__test-utils__/CubeNorthwindTestQueries.d.ts +31 -0
  28. package/lib/__test-utils__/CubeNorthwindTestQueries.d.ts.map +1 -0
  29. package/lib/__test-utils__/CubeNorthwindTestQueries.js +102 -0
  30. package/lib/__test-utils__/CubeNorthwindTestQueries.js.map +1 -0
  31. package/lib/__test-utils__/CubePageTestUtils.d.ts +33 -0
  32. package/lib/__test-utils__/CubePageTestUtils.d.ts.map +1 -0
  33. package/lib/__test-utils__/CubePageTestUtils.js +68 -0
  34. package/lib/__test-utils__/CubePageTestUtils.js.map +1 -0
  35. package/lib/__test-utils__/CubeTestApplication.d.ts +30 -0
  36. package/lib/__test-utils__/CubeTestApplication.d.ts.map +1 -0
  37. package/lib/__test-utils__/CubeTestApplication.js +57 -0
  38. package/lib/__test-utils__/CubeTestApplication.js.map +1 -0
  39. package/lib/__test-utils__/FakeCubeEngine.d.ts +41 -0
  40. package/lib/__test-utils__/FakeCubeEngine.d.ts.map +1 -0
  41. package/lib/__test-utils__/FakeCubeEngine.js +85 -0
  42. package/lib/__test-utils__/FakeCubeEngine.js.map +1 -0
  43. package/lib/components/CubeButton.d.ts +20 -0
  44. package/lib/components/CubeButton.d.ts.map +1 -0
  45. package/lib/components/CubeButton.js +24 -0
  46. package/lib/components/CubeButton.js.map +1 -0
  47. package/lib/components/CubeEditor.d.ts +31 -0
  48. package/lib/components/CubeEditor.d.ts.map +1 -0
  49. package/lib/components/CubeEditor.js +90 -0
  50. package/lib/components/CubeEditor.js.map +1 -0
  51. package/lib/components/CubeNodeIcon.d.ts +23 -0
  52. package/lib/components/CubeNodeIcon.d.ts.map +1 -0
  53. package/lib/components/CubeNodeIcon.js +32 -0
  54. package/lib/components/CubeNodeIcon.js.map +1 -0
  55. package/lib/components/canvas/CubeCanvas.d.ts +37 -0
  56. package/lib/components/canvas/CubeCanvas.d.ts.map +1 -0
  57. package/lib/components/canvas/CubeCanvas.js +135 -0
  58. package/lib/components/canvas/CubeCanvas.js.map +1 -0
  59. package/lib/components/canvas/CubeCanvasContext.d.ts +19 -0
  60. package/lib/components/canvas/CubeCanvasContext.d.ts.map +1 -0
  61. package/lib/components/canvas/CubeCanvasContext.js +22 -0
  62. package/lib/components/canvas/CubeCanvasContext.js.map +1 -0
  63. package/lib/components/canvas/CubeCanvasContextMenu.d.ts +28 -0
  64. package/lib/components/canvas/CubeCanvasContextMenu.d.ts.map +1 -0
  65. package/lib/components/canvas/CubeCanvasContextMenu.js +35 -0
  66. package/lib/components/canvas/CubeCanvasContextMenu.js.map +1 -0
  67. package/lib/components/canvas/CubeCanvasDnd.d.ts +43 -0
  68. package/lib/components/canvas/CubeCanvasDnd.d.ts.map +1 -0
  69. package/lib/components/canvas/CubeCanvasDnd.js +51 -0
  70. package/lib/components/canvas/CubeCanvasDnd.js.map +1 -0
  71. package/lib/components/canvas/CubeCanvasEdge.d.ts +24 -0
  72. package/lib/components/canvas/CubeCanvasEdge.d.ts.map +1 -0
  73. package/lib/components/canvas/CubeCanvasEdge.js +33 -0
  74. package/lib/components/canvas/CubeCanvasEdge.js.map +1 -0
  75. package/lib/components/canvas/CubeCanvasElements.d.ts +64 -0
  76. package/lib/components/canvas/CubeCanvasElements.d.ts.map +1 -0
  77. package/lib/components/canvas/CubeCanvasElements.js +96 -0
  78. package/lib/components/canvas/CubeCanvasElements.js.map +1 -0
  79. package/lib/components/canvas/CubeCanvasLayout.d.ts +32 -0
  80. package/lib/components/canvas/CubeCanvasLayout.d.ts.map +1 -0
  81. package/lib/components/canvas/CubeCanvasLayout.js +63 -0
  82. package/lib/components/canvas/CubeCanvasLayout.js.map +1 -0
  83. package/lib/components/canvas/CubeCanvasNode.d.ts +29 -0
  84. package/lib/components/canvas/CubeCanvasNode.d.ts.map +1 -0
  85. package/lib/components/canvas/CubeCanvasNode.js +72 -0
  86. package/lib/components/canvas/CubeCanvasNode.js.map +1 -0
  87. package/lib/components/editors/CubeColumnPicker.d.ts +40 -0
  88. package/lib/components/editors/CubeColumnPicker.d.ts.map +1 -0
  89. package/lib/components/editors/CubeColumnPicker.js +51 -0
  90. package/lib/components/editors/CubeColumnPicker.js.map +1 -0
  91. package/lib/components/editors/CubeFilterEditor.d.ts +26 -0
  92. package/lib/components/editors/CubeFilterEditor.d.ts.map +1 -0
  93. package/lib/components/editors/CubeFilterEditor.js +90 -0
  94. package/lib/components/editors/CubeFilterEditor.js.map +1 -0
  95. package/lib/components/editors/CubeJoinEditor.d.ts +26 -0
  96. package/lib/components/editors/CubeJoinEditor.d.ts.map +1 -0
  97. package/lib/components/editors/CubeJoinEditor.js +76 -0
  98. package/lib/components/editors/CubeJoinEditor.js.map +1 -0
  99. package/lib/components/editors/CubeNodeEditorPanel.d.ts +29 -0
  100. package/lib/components/editors/CubeNodeEditorPanel.d.ts.map +1 -0
  101. package/lib/components/editors/CubeNodeEditorPanel.js +71 -0
  102. package/lib/components/editors/CubeNodeEditorPanel.js.map +1 -0
  103. package/lib/components/editors/CubeNodeEditorRegistry.d.ts +44 -0
  104. package/lib/components/editors/CubeNodeEditorRegistry.d.ts.map +1 -0
  105. package/lib/components/editors/CubeNodeEditorRegistry.js +30 -0
  106. package/lib/components/editors/CubeNodeEditorRegistry.js.map +1 -0
  107. package/lib/components/editors/CubeSourceEditor.d.ts +25 -0
  108. package/lib/components/editors/CubeSourceEditor.d.ts.map +1 -0
  109. package/lib/components/editors/CubeSourceEditor.js +42 -0
  110. package/lib/components/editors/CubeSourceEditor.js.map +1 -0
  111. package/lib/components/editors/CubeValueEditor.d.ts +40 -0
  112. package/lib/components/editors/CubeValueEditor.d.ts.map +1 -0
  113. package/lib/components/editors/CubeValueEditor.js +177 -0
  114. package/lib/components/editors/CubeValueEditor.js.map +1 -0
  115. package/lib/components/grid/CubeGridRegion.d.ts +23 -0
  116. package/lib/components/grid/CubeGridRegion.d.ts.map +1 -0
  117. package/lib/components/grid/CubeGridRegion.js +94 -0
  118. package/lib/components/grid/CubeGridRegion.js.map +1 -0
  119. package/lib/components/grid/CubeGridValues.d.ts +25 -0
  120. package/lib/components/grid/CubeGridValues.d.ts.map +1 -0
  121. package/lib/components/grid/CubeGridValues.js +95 -0
  122. package/lib/components/grid/CubeGridValues.js.map +1 -0
  123. package/lib/components/grid/CubeResultGrid.d.ts +26 -0
  124. package/lib/components/grid/CubeResultGrid.d.ts.map +1 -0
  125. package/lib/components/grid/CubeResultGrid.js +50 -0
  126. package/lib/components/grid/CubeResultGrid.js.map +1 -0
  127. package/lib/components/palette/CubePalette.d.ts +29 -0
  128. package/lib/components/palette/CubePalette.d.ts.map +1 -0
  129. package/lib/components/palette/CubePalette.js +73 -0
  130. package/lib/components/palette/CubePalette.js.map +1 -0
  131. package/lib/components/show-pure/CubeShowPureDialog.d.ts +23 -0
  132. package/lib/components/show-pure/CubeShowPureDialog.d.ts.map +1 -0
  133. package/lib/components/show-pure/CubeShowPureDialog.js +37 -0
  134. package/lib/components/show-pure/CubeShowPureDialog.js.map +1 -0
  135. package/lib/components/source-picker/CubeSourcePicker.d.ts +22 -0
  136. package/lib/components/source-picker/CubeSourcePicker.d.ts.map +1 -0
  137. package/lib/components/source-picker/CubeSourcePicker.js +89 -0
  138. package/lib/components/source-picker/CubeSourcePicker.js.map +1 -0
  139. package/lib/components/spec-transfer/CubeSpecTransferDialog.d.ts +26 -0
  140. package/lib/components/spec-transfer/CubeSpecTransferDialog.d.ts.map +1 -0
  141. package/lib/components/spec-transfer/CubeSpecTransferDialog.js +45 -0
  142. package/lib/components/spec-transfer/CubeSpecTransferDialog.js.map +1 -0
  143. package/lib/graph-manager/CubeEngine.d.ts +115 -0
  144. package/lib/graph-manager/CubeEngine.d.ts.map +1 -0
  145. package/lib/graph-manager/CubeEngine.js +61 -0
  146. package/lib/graph-manager/CubeEngine.js.map +1 -0
  147. package/lib/graph-manager/CubeModelOutlineHelper.d.ts +25 -0
  148. package/lib/graph-manager/CubeModelOutlineHelper.d.ts.map +1 -0
  149. package/lib/graph-manager/CubeModelOutlineHelper.js +24 -0
  150. package/lib/graph-manager/CubeModelOutlineHelper.js.map +1 -0
  151. package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts +26 -0
  152. package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts.map +1 -0
  153. package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js +22 -0
  154. package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js.map +1 -0
  155. package/lib/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.d.ts +27 -0
  156. package/lib/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.d.ts.map +1 -0
  157. package/lib/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.js +76 -0
  158. package/lib/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.js.map +1 -0
  159. package/lib/graph-manager/protocol/pure/v1/V1_CubeExecutionResultReader.d.ts +27 -0
  160. package/lib/graph-manager/protocol/pure/v1/V1_CubeExecutionResultReader.d.ts.map +1 -0
  161. package/lib/graph-manager/protocol/pure/v1/V1_CubeExecutionResultReader.js +82 -0
  162. package/lib/graph-manager/protocol/pure/v1/V1_CubeExecutionResultReader.js.map +1 -0
  163. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.d.ts +32 -0
  164. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.d.ts.map +1 -0
  165. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.js +195 -0
  166. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.js.map +1 -0
  167. package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.d.ts +20 -0
  168. package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.d.ts.map +1 -0
  169. package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.js +121 -0
  170. package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.js.map +1 -0
  171. package/lib/graph-manager/protocol/pure/v1/V1_CubeRelationTypeAdapter.d.ts +24 -0
  172. package/lib/graph-manager/protocol/pure/v1/V1_CubeRelationTypeAdapter.d.ts.map +1 -0
  173. package/lib/graph-manager/protocol/pure/v1/V1_CubeRelationTypeAdapter.js +43 -0
  174. package/lib/graph-manager/protocol/pure/v1/V1_CubeRelationTypeAdapter.js.map +1 -0
  175. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts +45 -0
  176. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts.map +1 -0
  177. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js +171 -0
  178. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js.map +1 -0
  179. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.d.ts +22 -0
  180. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.d.ts.map +1 -0
  181. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.js +79 -0
  182. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.js.map +1 -0
  183. package/lib/index.css +17 -0
  184. package/lib/index.css.map +1 -0
  185. package/lib/index.d.ts +25 -0
  186. package/lib/index.d.ts.map +1 -0
  187. package/lib/index.js +24 -0
  188. package/lib/index.js.map +1 -0
  189. package/lib/stores/CubeEditorState.d.ts +206 -0
  190. package/lib/stores/CubeEditorState.d.ts.map +1 -0
  191. package/lib/stores/CubeEditorState.js +551 -0
  192. package/lib/stores/CubeEditorState.js.map +1 -0
  193. package/lib/stores/CubeExecutionState.d.ts +67 -0
  194. package/lib/stores/CubeExecutionState.d.ts.map +1 -0
  195. package/lib/stores/CubeExecutionState.js +196 -0
  196. package/lib/stores/CubeExecutionState.js.map +1 -0
  197. package/lib/stores/CubeHost.d.ts +31 -0
  198. package/lib/stores/CubeHost.d.ts.map +1 -0
  199. package/lib/stores/CubeHost.js +17 -0
  200. package/lib/stores/CubeHost.js.map +1 -0
  201. package/lib/stores/CubeNodeEditorState.d.ts +85 -0
  202. package/lib/stores/CubeNodeEditorState.d.ts.map +1 -0
  203. package/lib/stores/CubeNodeEditorState.js +207 -0
  204. package/lib/stores/CubeNodeEditorState.js.map +1 -0
  205. package/lib/stores/CubeShowPureState.d.ts +38 -0
  206. package/lib/stores/CubeShowPureState.d.ts.map +1 -0
  207. package/lib/stores/CubeShowPureState.js +83 -0
  208. package/lib/stores/CubeShowPureState.js.map +1 -0
  209. package/lib/stores/CubeSourcePickerState.d.ts +98 -0
  210. package/lib/stores/CubeSourcePickerState.d.ts.map +1 -0
  211. package/lib/stores/CubeSourcePickerState.js +334 -0
  212. package/lib/stores/CubeSourcePickerState.js.map +1 -0
  213. package/lib/stores/CubeSpecTransferState.d.ts +60 -0
  214. package/lib/stores/CubeSpecTransferState.d.ts.map +1 -0
  215. package/lib/stores/CubeSpecTransferState.js +167 -0
  216. package/lib/stores/CubeSpecTransferState.js.map +1 -0
  217. package/lib/stores/LocalModelCatalog.d.ts +37 -0
  218. package/lib/stores/LocalModelCatalog.d.ts.map +1 -0
  219. package/lib/stores/LocalModelCatalog.js +49 -0
  220. package/lib/stores/LocalModelCatalog.js.map +1 -0
  221. package/lib/stores/editors/CubeFilterDraft.d.ts +61 -0
  222. package/lib/stores/editors/CubeFilterDraft.d.ts.map +1 -0
  223. package/lib/stores/editors/CubeFilterDraft.js +186 -0
  224. package/lib/stores/editors/CubeFilterDraft.js.map +1 -0
  225. package/lib/stores/editors/CubeJoinDraft.d.ts +63 -0
  226. package/lib/stores/editors/CubeJoinDraft.d.ts.map +1 -0
  227. package/lib/stores/editors/CubeJoinDraft.js +136 -0
  228. package/lib/stores/editors/CubeJoinDraft.js.map +1 -0
  229. package/lib/stores/editors/CubeNodeDraft.d.ts +38 -0
  230. package/lib/stores/editors/CubeNodeDraft.d.ts.map +1 -0
  231. package/lib/stores/editors/CubeNodeDraft.js +35 -0
  232. package/lib/stores/editors/CubeNodeDraft.js.map +1 -0
  233. package/lib/stores/editors/CubeNodeDraftRegistry.d.ts +29 -0
  234. package/lib/stores/editors/CubeNodeDraftRegistry.d.ts.map +1 -0
  235. package/lib/stores/editors/CubeNodeDraftRegistry.js +33 -0
  236. package/lib/stores/editors/CubeNodeDraftRegistry.js.map +1 -0
  237. package/lib/stores/fixtures/CubeNorthwindModel.d.ts +23 -0
  238. package/lib/stores/fixtures/CubeNorthwindModel.d.ts.map +1 -0
  239. package/lib/stores/fixtures/CubeNorthwindModel.js +338 -0
  240. package/lib/stores/fixtures/CubeNorthwindModel.js.map +1 -0
  241. package/package.json +81 -3
  242. package/src/__lib__/LegendCubeCommand.ts +44 -0
  243. package/src/__lib__/LegendCubeHelpText.ts +38 -0
  244. package/src/__lib__/LegendCubeLabels.ts +141 -0
  245. package/src/__lib__/LegendCubeTesting.ts +33 -0
  246. package/src/__test-utils__/CubeCanvasTestUtils.ts +53 -0
  247. package/src/__test-utils__/CubeEngineTestSupport.ts +137 -0
  248. package/src/__test-utils__/CubeNorthwindTestQueries.ts +165 -0
  249. package/src/__test-utils__/CubePageTestUtils.tsx +96 -0
  250. package/src/__test-utils__/CubeTestApplication.ts +82 -0
  251. package/src/__test-utils__/FakeCubeEngine.ts +139 -0
  252. package/src/components/CubeButton.tsx +35 -0
  253. package/src/components/CubeEditor.tsx +239 -0
  254. package/src/components/CubeNodeIcon.tsx +47 -0
  255. package/src/components/canvas/CubeCanvas.tsx +260 -0
  256. package/src/components/canvas/CubeCanvasContext.ts +31 -0
  257. package/src/components/canvas/CubeCanvasContextMenu.tsx +89 -0
  258. package/src/components/canvas/CubeCanvasDnd.ts +82 -0
  259. package/src/components/canvas/CubeCanvasEdge.tsx +57 -0
  260. package/src/components/canvas/CubeCanvasElements.ts +150 -0
  261. package/src/components/canvas/CubeCanvasLayout.ts +88 -0
  262. package/src/components/canvas/CubeCanvasNode.tsx +141 -0
  263. package/src/components/editors/CubeColumnPicker.tsx +114 -0
  264. package/src/components/editors/CubeFilterEditor.tsx +309 -0
  265. package/src/components/editors/CubeJoinEditor.tsx +224 -0
  266. package/src/components/editors/CubeNodeEditorPanel.tsx +204 -0
  267. package/src/components/editors/CubeNodeEditorRegistry.ts +61 -0
  268. package/src/components/editors/CubeSourceEditor.tsx +116 -0
  269. package/src/components/editors/CubeValueEditor.tsx +332 -0
  270. package/src/components/grid/CubeGridRegion.tsx +274 -0
  271. package/src/components/grid/CubeGridValues.ts +125 -0
  272. package/src/components/grid/CubeResultGrid.tsx +84 -0
  273. package/src/components/palette/CubePalette.tsx +177 -0
  274. package/src/components/show-pure/CubeShowPureDialog.tsx +101 -0
  275. package/src/components/source-picker/CubeSourcePicker.tsx +304 -0
  276. package/src/components/spec-transfer/CubeSpecTransferDialog.tsx +157 -0
  277. package/src/graph-manager/CubeEngine.ts +155 -0
  278. package/src/graph-manager/CubeModelOutlineHelper.ts +32 -0
  279. package/src/graph-manager/protocol/pure/CubeEngineBuilder.ts +34 -0
  280. package/src/graph-manager/protocol/pure/v1/V1_CubeEngineErrors.ts +109 -0
  281. package/src/graph-manager/protocol/pure/v1/V1_CubeExecutionResultReader.ts +115 -0
  282. package/src/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.ts +257 -0
  283. package/src/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.ts +157 -0
  284. package/src/graph-manager/protocol/pure/v1/V1_CubeRelationTypeAdapter.ts +58 -0
  285. package/src/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.ts +278 -0
  286. package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.ts +124 -0
  287. package/src/index.ts +41 -0
  288. package/src/stores/CubeEditorState.ts +702 -0
  289. package/src/stores/CubeExecutionState.ts +255 -0
  290. package/src/stores/CubeHost.ts +32 -0
  291. package/src/stores/CubeNodeEditorState.ts +255 -0
  292. package/src/stores/CubeShowPureState.ts +96 -0
  293. package/src/stores/CubeSourcePickerState.ts +426 -0
  294. package/src/stores/CubeSpecTransferState.ts +198 -0
  295. package/src/stores/LocalModelCatalog.ts +70 -0
  296. package/src/stores/editors/CubeFilterDraft.ts +241 -0
  297. package/src/stores/editors/CubeJoinDraft.ts +197 -0
  298. package/src/stores/editors/CubeNodeDraft.ts +46 -0
  299. package/src/stores/editors/CubeNodeDraftRegistry.ts +49 -0
  300. package/src/stores/fixtures/CubeNorthwindModel.ts +355 -0
  301. package/tsconfig.json +118 -0
@@ -0,0 +1,204 @@
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 { QuestionCircleIcon, TimesIcon } from '@finos/legend-art';
18
+ import {
19
+ isIncompleteError,
20
+ isSchemasError,
21
+ type QueryNode,
22
+ type Schema,
23
+ UnknownNode,
24
+ } from '@finos/legend-cube';
25
+ import { observer } from 'mobx-react-lite';
26
+ import {
27
+ CUBE_NODE_HELP_TEXT,
28
+ SELECT_NODE_TOOLTIP,
29
+ } from '../../__lib__/LegendCubeHelpText.js';
30
+ import { READ_ONLY_CUBE_TITLE } from '../../__lib__/LegendCubeLabels.js';
31
+ import { LEGEND_CUBE_TEST_ID } from '../../__lib__/LegendCubeTesting.js';
32
+ import type { CubeEditorState } from '../../stores/CubeEditorState.js';
33
+ import { CUBE_NODE_DRAFT_FACTORIES } from '../../stores/editors/CubeNodeDraftRegistry.js';
34
+ import { CubeButton } from '../CubeButton.js';
35
+ import { CubeNodeIcon } from '../CubeNodeIcon.js';
36
+ import { CUBE_NODE_EDITORS } from './CubeNodeEditorRegistry.js';
37
+
38
+ /** The problems of the edited node against its inputs, as Apply would leave it */
39
+ const validateEdited = (
40
+ node: QueryNode,
41
+ inputSchemas: readonly Schema[],
42
+ ): string[] => {
43
+ const errors: string[] = [];
44
+ node.validate(inputSchemas, errors);
45
+ return [...new Set(errors)];
46
+ };
47
+
48
+ /**
49
+ * The node editor, in a side panel (spec §17.5): the node's label and id, its
50
+ * help, Select, and its type's editor. Edits stay in the panel until Apply
51
+ * or closing it; Cancel drops them. While an input is missing or invalid,
52
+ * the panel shows why instead of the editor, since there would be no
53
+ * columns to pick.
54
+ */
55
+ export const CubeNodeEditorPanel = observer(
56
+ (props: { editorState: CubeEditorState }) => {
57
+ const { editorState } = props;
58
+ const { nodeEditor, readOnly } = editorState;
59
+ const { node, draft, edited } = nodeEditor;
60
+ if (!node || !draft || !edited) {
61
+ return null;
62
+ }
63
+ const { query } = editorState.document;
64
+ const definition = editorState.registry.get(node.type);
65
+ const isCapture = query.selected === node.id;
66
+ const inputProblems = editorState
67
+ .getNodeErrors(node.id)
68
+ .filter((error) => isSchemasError(error) || isIncompleteError(error));
69
+ const inputSchemas = query
70
+ .getInputIds(node.id)
71
+ .map((inputId) =>
72
+ inputId === undefined
73
+ ? undefined
74
+ : editorState.analysis.schemas.get(inputId),
75
+ )
76
+ .filter((schema): schema is Schema => schema !== undefined);
77
+ const Editor = CUBE_NODE_EDITORS.get(node.type);
78
+ const isEditable = CUBE_NODE_DRAFT_FACTORIES.has(node.type);
79
+ const problems =
80
+ isEditable && !inputProblems.length
81
+ ? validateEdited(edited, inputSchemas)
82
+ : [];
83
+ return (
84
+ <div
85
+ className="flex h-full flex-col border-l border-[var(--color-border-default)] bg-[var(--color-bg-panel)]"
86
+ data-testid={LEGEND_CUBE_TEST_ID.NODE_EDITOR}
87
+ >
88
+ <div className="flex h-8 shrink-0 items-center gap-2 border-b border-[var(--color-border-default)] bg-[var(--color-bg-panel-header)] px-2">
89
+ <CubeNodeIcon
90
+ icon={definition?.icon}
91
+ className="shrink-0 text-[var(--color-text-secondary)]"
92
+ />
93
+ <span className="min-w-0 truncate text-lg font-medium">
94
+ {definition?.label ?? 'Unknown'}
95
+ </span>
96
+ <span className="shrink-0 text-base text-[var(--color-text-muted)]">
97
+ {node.id}
98
+ </span>
99
+ {definition?.beta && (
100
+ <span className="shrink-0 rounded-sm bg-[var(--color-accent)] px-1 text-xs font-medium text-[var(--color-text-on-accent)]">
101
+ BETA
102
+ </span>
103
+ )}
104
+ <span
105
+ className="shrink-0 text-[var(--color-text-secondary)]"
106
+ title={
107
+ CUBE_NODE_HELP_TEXT[node.type] ??
108
+ CUBE_NODE_HELP_TEXT[UnknownNode.TYPE]
109
+ }
110
+ role="img"
111
+ aria-label="Help"
112
+ >
113
+ <QuestionCircleIcon />
114
+ </span>
115
+ <span className="flex-1" />
116
+ {isCapture ? (
117
+ <span
118
+ className="shrink-0 text-base text-[var(--color-text-secondary)]"
119
+ title={SELECT_NODE_TOOLTIP}
120
+ >
121
+ (Selected)
122
+ </span>
123
+ ) : (
124
+ <button
125
+ className="shrink-0 text-base text-[var(--color-accent)] underline"
126
+ title={SELECT_NODE_TOOLTIP}
127
+ onClick={() => editorState.select(node.id)}
128
+ >
129
+ Select
130
+ </button>
131
+ )}
132
+ <button
133
+ className="flex h-6 w-6 shrink-0 items-center justify-center text-[var(--color-text-secondary)] hover:text-[var(--color-text-primary)]"
134
+ title={
135
+ nodeEditor.hasChanges && !readOnly
136
+ ? 'Close, applying the changes'
137
+ : 'Close'
138
+ }
139
+ aria-label="Close the editor"
140
+ onClick={() => nodeEditor.close()}
141
+ >
142
+ <TimesIcon />
143
+ </button>
144
+ </div>
145
+ <div className="min-h-0 flex-1 overflow-auto p-2">
146
+ {inputProblems.length ? (
147
+ <div
148
+ className="text-base text-[var(--color-status-warn)]"
149
+ role="alert"
150
+ >
151
+ {inputProblems.map((problem) => (
152
+ <div key={problem}>{problem}</div>
153
+ ))}
154
+ </div>
155
+ ) : Editor ? (
156
+ <Editor
157
+ editorState={editorState}
158
+ draft={draft}
159
+ inputSchemas={inputSchemas}
160
+ readOnly={readOnly}
161
+ />
162
+ ) : (
163
+ <div className="text-base text-[var(--color-text-secondary)]">
164
+ {`${node.describe()}: this node can't be edited.`}
165
+ </div>
166
+ )}
167
+ {problems.length > 0 && (
168
+ <div
169
+ className="mt-3 border-t border-[var(--color-border-subtle)] pt-2 text-base text-[var(--color-status-error)]"
170
+ role="alert"
171
+ aria-label="Problems"
172
+ >
173
+ {problems.map((problem) => (
174
+ <div key={problem}>{problem}</div>
175
+ ))}
176
+ </div>
177
+ )}
178
+ </div>
179
+ {isEditable && (
180
+ <div className="flex h-10 shrink-0 items-center justify-end gap-2 border-t border-[var(--color-border-default)] px-2">
181
+ <CubeButton
182
+ title="Drop the changes and close"
183
+ onClick={() => nodeEditor.cancel()}
184
+ >
185
+ Cancel
186
+ </CubeButton>
187
+ <CubeButton
188
+ primary={true}
189
+ title={
190
+ readOnly
191
+ ? READ_ONLY_CUBE_TITLE
192
+ : 'Store the changes, as one step to undo'
193
+ }
194
+ disabled={readOnly || !nodeEditor.hasChanges}
195
+ onClick={() => nodeEditor.apply()}
196
+ >
197
+ Apply
198
+ </CubeButton>
199
+ </div>
200
+ )}
201
+ </div>
202
+ );
203
+ },
204
+ );
@@ -0,0 +1,61 @@
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
+ Filter,
19
+ Join,
20
+ RelationalTableSource,
21
+ type Schema,
22
+ } from '@finos/legend-cube';
23
+ import type { CubeEditorState } from '../../stores/CubeEditorState.js';
24
+ import type { CubeNodeDraft } from '../../stores/editors/CubeNodeDraft.js';
25
+ import { CubeFilterEditor } from './CubeFilterEditor.js';
26
+ import { CubeJoinEditor } from './CubeJoinEditor.js';
27
+ import { CubeSourceEditor } from './CubeSourceEditor.js';
28
+
29
+ /**
30
+ * What the panel gives a node type's editor (PLAN §7.4). Edits go to the
31
+ * draft, which the panel's Apply stores; an action on the document goes
32
+ * through `editorState.nodeEditor` (e.g. `swapInputs`), which applies the
33
+ * draft first, so the panel never loses its edits under a replaced node.
34
+ */
35
+ export interface CubeNodeEditorProps {
36
+ readonly editorState: CubeEditorState;
37
+ /** The node's draft, made by its type's factory in `CUBE_NODE_DRAFT_FACTORIES` */
38
+ readonly draft: CubeNodeDraft;
39
+ /**
40
+ * The schemas of the node's inputs, in port order, e.g. a Join's Left then
41
+ * Right. All are there: the panel shows the upstream error instead of the
42
+ * editor while an input is missing or invalid.
43
+ */
44
+ readonly inputSchemas: readonly Schema[];
45
+ /** The cube was saved by a newer version: show, don't edit */
46
+ readonly readOnly: boolean;
47
+ }
48
+
49
+ /**
50
+ * The editor of each node type, by type. A type without one shows its
51
+ * description; a type with one either has a draft factory in
52
+ * `CUBE_NODE_DRAFT_FACTORIES` or edits nothing (a source).
53
+ */
54
+ export const CUBE_NODE_EDITORS: ReadonlyMap<
55
+ string,
56
+ React.FC<CubeNodeEditorProps>
57
+ > = new Map<string, React.FC<CubeNodeEditorProps>>([
58
+ [RelationalTableSource.TYPE, CubeSourceEditor],
59
+ [Filter.TYPE, CubeFilterEditor],
60
+ [Join.TYPE, CubeJoinEditor],
61
+ ]);
@@ -0,0 +1,116 @@
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 { PanelLoadingIndicator } from '@finos/legend-art';
18
+ import {
19
+ getRelationalDisplayName,
20
+ RelationalTableSource,
21
+ } from '@finos/legend-cube';
22
+ import { guaranteeType } from '@finos/legend-shared';
23
+ import { flowResult } from 'mobx';
24
+ import { observer } from 'mobx-react-lite';
25
+ import {
26
+ CUBE_PENDING_LABEL,
27
+ getColumnTypeLabel,
28
+ } from '../../__lib__/LegendCubeLabels.js';
29
+ import { CubeButton } from '../CubeButton.js';
30
+ import { CubeColumnTypeIcon } from './CubeColumnPicker.js';
31
+ import type { CubeNodeEditorProps } from './CubeNodeEditorRegistry.js';
32
+
33
+ /**
34
+ * A table source (spec §17.6): where it reads from, its columns as the engine
35
+ * typed them, and Refresh, which types the table again. Nothing here is
36
+ * edited, so a refresh is no undo step.
37
+ */
38
+ export const CubeSourceEditor = observer((props: CubeNodeEditorProps) => {
39
+ const { editorState } = props;
40
+ const source = guaranteeType(props.draft.original, RelationalTableSource);
41
+ const refreshing = editorState.isPendingSource(source);
42
+ const { resolution } = source;
43
+ const warnings = editorState.warnings.get(source.key) ?? [];
44
+ return (
45
+ <div className="relative flex flex-col gap-2">
46
+ <dl className="grid grid-cols-[max-content_1fr] gap-x-3 gap-y-1 text-base">
47
+ <dt className="text-[var(--color-text-secondary)]">Database</dt>
48
+ <dd className="min-w-0 break-all">{source.database}</dd>
49
+ <dt className="text-[var(--color-text-secondary)]">Schema</dt>
50
+ <dd>{getRelationalDisplayName(source.schema)}</dd>
51
+ <dt className="text-[var(--color-text-secondary)]">Table</dt>
52
+ <dd>{getRelationalDisplayName(source.table)}</dd>
53
+ </dl>
54
+ <div className="flex items-center gap-2">
55
+ <CubeButton
56
+ title="Type the table again with the engine, e.g. after its columns changed"
57
+ disabled={refreshing}
58
+ onClick={() => {
59
+ flowResult(editorState.refreshSource(source.id)).catch(
60
+ editorState.host.applicationStore.alertUnhandledError,
61
+ );
62
+ }}
63
+ >
64
+ Refresh
65
+ </CubeButton>
66
+ {refreshing && (
67
+ <span className="text-base text-[var(--color-text-secondary)]">
68
+ {CUBE_PENDING_LABEL.REFRESHING_SOURCE}
69
+ </span>
70
+ )}
71
+ </div>
72
+ <PanelLoadingIndicator isLoading={refreshing} />
73
+ {warnings.map((warning) => (
74
+ <div
75
+ key={warning}
76
+ className="text-sm text-[var(--color-status-warn)]"
77
+ role="status"
78
+ >
79
+ {warning}
80
+ </div>
81
+ ))}
82
+ {resolution.kind === 'resolved' ? (
83
+ <table className="w-full text-base" aria-label="Columns">
84
+ <thead>
85
+ <tr className="text-left text-[var(--color-text-secondary)]">
86
+ <th className="font-normal">Column</th>
87
+ <th className="font-normal">Type</th>
88
+ </tr>
89
+ </thead>
90
+ <tbody>
91
+ {resolution.schema.columns.map((column) => (
92
+ <tr key={column.name}>
93
+ <td className="break-all pr-2">{column.name}</td>
94
+ <td title={column.type.fullName}>
95
+ <span className="flex items-center gap-1">
96
+ <CubeColumnTypeIcon
97
+ type={column.type}
98
+ className="text-[var(--color-text-secondary)]"
99
+ />
100
+ {getColumnTypeLabel(column)}
101
+ </span>
102
+ </td>
103
+ </tr>
104
+ ))}
105
+ </tbody>
106
+ </table>
107
+ ) : (
108
+ <div className="text-base text-[var(--color-text-secondary)]">
109
+ {resolution.kind === 'failed'
110
+ ? resolution.message
111
+ : 'The table has not been typed yet.'}
112
+ </div>
113
+ )}
114
+ </div>
115
+ );
116
+ });