@finos/legend-cube-builder 0.0.4 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -3
- package/docs/adding-an-operation.md +24 -12
- package/docs/demo/DEMO-FAST-NOTES.md +67 -0
- package/docs/demo/README.md +102 -0
- package/docs/demo/specs/duckdb-sales-pivot.cube.json +110 -0
- package/docs/demo/specs/trades-desks-1-joined.cube.json +123 -0
- package/docs/demo/specs/trades-desks-2-grouped.cube.json +140 -0
- package/docs/demo/specs/trades-desks-3-ranked.cube.json +158 -0
- package/docs/demo/specs/trades-desks-4-extended.cube.json +208 -0
- package/docs/demo/specs/trades-desks-5-final.cube.json +248 -0
- package/docs/hosting.md +83 -5
- package/docs/testing.md +32 -0
- package/lib/__lib__/LegendCubeCommand.d.ts +2 -0
- package/lib/__lib__/LegendCubeCommand.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeCommand.js +7 -0
- package/lib/__lib__/LegendCubeCommand.js.map +1 -1
- package/lib/__lib__/LegendCubeFunctionLabels.d.ts +29 -0
- package/lib/__lib__/LegendCubeFunctionLabels.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeFunctionLabels.js +31 -0
- package/lib/__lib__/LegendCubeFunctionLabels.js.map +1 -0
- package/lib/__lib__/LegendCubeHelpText.d.ts +5 -1
- package/lib/__lib__/LegendCubeHelpText.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeHelpText.js +16 -2
- package/lib/__lib__/LegendCubeHelpText.js.map +1 -1
- package/lib/__lib__/LegendCubeLabels.d.ts +130 -9
- package/lib/__lib__/LegendCubeLabels.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeLabels.js +169 -17
- package/lib/__lib__/LegendCubeLabels.js.map +1 -1
- package/lib/__lib__/LegendCubeNavigation.d.ts +23 -0
- package/lib/__lib__/LegendCubeNavigation.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeNavigation.js +33 -0
- package/lib/__lib__/LegendCubeNavigation.js.map +1 -0
- package/lib/__lib__/LegendCubeProjectSourceLabels.d.ts +26 -0
- package/lib/__lib__/LegendCubeProjectSourceLabels.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeProjectSourceLabels.js +26 -0
- package/lib/__lib__/LegendCubeProjectSourceLabels.js.map +1 -0
- package/lib/__lib__/LegendCubeServiceLabels.d.ts +27 -0
- package/lib/__lib__/LegendCubeServiceLabels.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeServiceLabels.js +32 -0
- package/lib/__lib__/LegendCubeServiceLabels.js.map +1 -0
- package/lib/__lib__/LegendCubeTesting.d.ts +10 -1
- package/lib/__lib__/LegendCubeTesting.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeTesting.js +9 -0
- package/lib/__lib__/LegendCubeTesting.js.map +1 -1
- package/lib/__lib__/LegendCubeTour.d.ts +62 -0
- package/lib/__lib__/LegendCubeTour.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeTour.js +149 -0
- package/lib/__lib__/LegendCubeTour.js.map +1 -0
- package/lib/__test-utils__/CubeEngineTestSupport.d.ts +1 -1
- package/lib/__test-utils__/CubeEngineTestSupport.d.ts.map +1 -1
- package/lib/__test-utils__/CubeEngineTestSupport.js +2 -2
- package/lib/__test-utils__/CubeEngineTestSupport.js.map +1 -1
- package/lib/__test-utils__/CubeExampleTestUtils.d.ts +34 -0
- package/lib/__test-utils__/CubeExampleTestUtils.d.ts.map +1 -0
- package/lib/__test-utils__/CubeExampleTestUtils.js +72 -0
- package/lib/__test-utils__/CubeExampleTestUtils.js.map +1 -0
- package/lib/__test-utils__/CubeExpressionTestUtils.d.ts +8 -1
- package/lib/__test-utils__/CubeExpressionTestUtils.d.ts.map +1 -1
- package/lib/__test-utils__/CubeExpressionTestUtils.js +20 -3
- package/lib/__test-utils__/CubeExpressionTestUtils.js.map +1 -1
- package/lib/__test-utils__/CubeFunctionTestOutline.d.ts +26 -0
- package/lib/__test-utils__/CubeFunctionTestOutline.d.ts.map +1 -0
- package/lib/__test-utils__/CubeFunctionTestOutline.js +56 -0
- package/lib/__test-utils__/CubeFunctionTestOutline.js.map +1 -0
- package/lib/__test-utils__/CubeLambdaCorpus.d.ts +36 -0
- package/lib/__test-utils__/CubeLambdaCorpus.d.ts.map +1 -0
- package/lib/__test-utils__/CubeLambdaCorpus.js +83 -0
- package/lib/__test-utils__/CubeLambdaCorpus.js.map +1 -0
- package/lib/__test-utils__/CubePageTestUtils.d.ts +6 -0
- package/lib/__test-utils__/CubePageTestUtils.d.ts.map +1 -1
- package/lib/__test-utils__/CubePageTestUtils.js +21 -0
- package/lib/__test-utils__/CubePageTestUtils.js.map +1 -1
- package/lib/__test-utils__/CubeTestApplication.d.ts +9 -0
- package/lib/__test-utils__/CubeTestApplication.d.ts.map +1 -1
- package/lib/__test-utils__/CubeTestApplication.js +16 -0
- package/lib/__test-utils__/CubeTestApplication.js.map +1 -1
- package/lib/__test-utils__/CubeVariantTestUtils.d.ts +16 -0
- package/lib/__test-utils__/CubeVariantTestUtils.d.ts.map +1 -0
- package/lib/__test-utils__/CubeVariantTestUtils.js +66 -0
- package/lib/__test-utils__/CubeVariantTestUtils.js.map +1 -0
- package/lib/__test-utils__/FakeCubeEngine.d.ts +5 -0
- package/lib/__test-utils__/FakeCubeEngine.d.ts.map +1 -1
- package/lib/__test-utils__/FakeCubeEngine.js +17 -0
- package/lib/__test-utils__/FakeCubeEngine.js.map +1 -1
- package/lib/__test-utils__/FakeCubeIngestCatalog.d.ts +7 -1
- package/lib/__test-utils__/FakeCubeIngestCatalog.d.ts.map +1 -1
- package/lib/__test-utils__/FakeCubeIngestCatalog.js +16 -0
- package/lib/__test-utils__/FakeCubeIngestCatalog.js.map +1 -1
- package/lib/__test-utils__/FakeCubeServiceCatalog.d.ts +26 -0
- package/lib/__test-utils__/FakeCubeServiceCatalog.d.ts.map +1 -0
- package/lib/__test-utils__/FakeCubeServiceCatalog.js +40 -0
- package/lib/__test-utils__/FakeCubeServiceCatalog.js.map +1 -0
- package/lib/components/CubeAddItems.d.ts.map +1 -1
- package/lib/components/CubeAddItems.js +11 -7
- package/lib/components/CubeAddItems.js.map +1 -1
- package/lib/components/CubeDialogTheme.d.ts +25 -0
- package/lib/components/CubeDialogTheme.d.ts.map +1 -0
- package/lib/components/CubeDialogTheme.js +25 -0
- package/lib/components/CubeDialogTheme.js.map +1 -0
- package/lib/components/CubeEditor.d.ts +12 -1
- package/lib/components/CubeEditor.d.ts.map +1 -1
- package/lib/components/CubeEditor.js +22 -14
- package/lib/components/CubeEditor.js.map +1 -1
- package/lib/components/CubeFileMenu.d.ts +28 -0
- package/lib/components/CubeFileMenu.d.ts.map +1 -0
- package/lib/components/CubeFileMenu.js +78 -0
- package/lib/components/CubeFileMenu.js.map +1 -0
- package/lib/components/CubeLambdaImportBanner.d.ts +26 -0
- package/lib/components/CubeLambdaImportBanner.d.ts.map +1 -0
- package/lib/components/CubeLambdaImportBanner.js +47 -0
- package/lib/components/CubeLambdaImportBanner.js.map +1 -0
- package/lib/components/CubeNodeIcon.d.ts.map +1 -1
- package/lib/components/CubeNodeIcon.js +6 -1
- package/lib/components/CubeNodeIcon.js.map +1 -1
- package/lib/components/CubeSchemaColumnsTable.d.ts.map +1 -1
- package/lib/components/CubeSchemaColumnsTable.js +2 -2
- package/lib/components/CubeSchemaColumnsTable.js.map +1 -1
- package/lib/components/canvas/CubeCanvas.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvas.js +40 -6
- package/lib/components/canvas/CubeCanvas.js.map +1 -1
- package/lib/components/canvas/CubeCanvasContextMenu.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvasContextMenu.js +2 -1
- package/lib/components/canvas/CubeCanvasContextMenu.js.map +1 -1
- package/lib/components/canvas/CubeCanvasElements.d.ts +18 -1
- package/lib/components/canvas/CubeCanvasElements.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvasElements.js +58 -3
- package/lib/components/canvas/CubeCanvasElements.js.map +1 -1
- package/lib/components/canvas/CubeCanvasLayout.js +1 -1
- package/lib/components/canvas/CubeCanvasNode.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvasNode.js +11 -4
- package/lib/components/canvas/CubeCanvasNode.js.map +1 -1
- package/lib/components/dev-settings/CubeDevSettings.d.ts +35 -0
- package/lib/components/dev-settings/CubeDevSettings.d.ts.map +1 -0
- package/lib/components/dev-settings/CubeDevSettings.js +54 -0
- package/lib/components/dev-settings/CubeDevSettings.js.map +1 -0
- package/lib/components/editors/CubeColumnChecklist.d.ts.map +1 -1
- package/lib/components/editors/CubeColumnChecklist.js +2 -2
- package/lib/components/editors/CubeColumnChecklist.js.map +1 -1
- package/lib/components/editors/CubeColumnPicker.d.ts.map +1 -1
- package/lib/components/editors/CubeColumnPicker.js +6 -4
- package/lib/components/editors/CubeColumnPicker.js.map +1 -1
- package/lib/components/editors/CubeConcatEditor.js +2 -2
- package/lib/components/editors/CubeConcatEditor.js.map +1 -1
- package/lib/components/editors/CubeExplodeEditor.d.ts +26 -0
- package/lib/components/editors/CubeExplodeEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeExplodeEditor.js +61 -0
- package/lib/components/editors/CubeExplodeEditor.js.map +1 -0
- package/lib/components/editors/CubeExpressionFilterEditor.d.ts +25 -0
- package/lib/components/editors/CubeExpressionFilterEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeExpressionFilterEditor.js +86 -0
- package/lib/components/editors/CubeExpressionFilterEditor.js.map +1 -0
- package/lib/components/editors/CubeExtendEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeExtendEditor.js +13 -12
- package/lib/components/editors/CubeExtendEditor.js.map +1 -1
- package/lib/components/editors/CubeFilterEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeFilterEditor.js +13 -2
- package/lib/components/editors/CubeFilterEditor.js.map +1 -1
- package/lib/components/editors/CubeFunctionSourceEditor.d.ts +25 -0
- package/lib/components/editors/CubeFunctionSourceEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeFunctionSourceEditor.js +55 -0
- package/lib/components/editors/CubeFunctionSourceEditor.js.map +1 -0
- package/lib/components/editors/CubeJoinEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeJoinEditor.js +16 -4
- package/lib/components/editors/CubeJoinEditor.js.map +1 -1
- package/lib/components/editors/CubeJsonFieldsTree.d.ts +46 -0
- package/lib/components/editors/CubeJsonFieldsTree.d.ts.map +1 -0
- package/lib/components/editors/CubeJsonFieldsTree.js +93 -0
- package/lib/components/editors/CubeJsonFieldsTree.js.map +1 -0
- package/lib/components/editors/CubeNodeEditorPanel.d.ts.map +1 -1
- package/lib/components/editors/CubeNodeEditorPanel.js +18 -8
- package/lib/components/editors/CubeNodeEditorPanel.js.map +1 -1
- package/lib/components/editors/CubeNodeEditorPopper.d.ts +5 -1
- package/lib/components/editors/CubeNodeEditorPopper.d.ts.map +1 -1
- package/lib/components/editors/CubeNodeEditorPopper.js +10 -2
- package/lib/components/editors/CubeNodeEditorPopper.js.map +1 -1
- package/lib/components/editors/CubeNodeEditorRegistry.d.ts.map +1 -1
- package/lib/components/editors/CubeNodeEditorRegistry.js +11 -1
- package/lib/components/editors/CubeNodeEditorRegistry.js.map +1 -1
- package/lib/components/editors/CubePivotEditor.d.ts +26 -0
- package/lib/components/editors/CubePivotEditor.d.ts.map +1 -0
- package/lib/components/editors/CubePivotEditor.js +93 -0
- package/lib/components/editors/CubePivotEditor.js.map +1 -0
- package/lib/components/editors/CubeRestrictEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeRestrictEditor.js +2 -2
- package/lib/components/editors/CubeRestrictEditor.js.map +1 -1
- package/lib/components/editors/CubeServiceSourceEditor.d.ts +25 -0
- package/lib/components/editors/CubeServiceSourceEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeServiceSourceEditor.js +41 -0
- package/lib/components/editors/CubeServiceSourceEditor.js.map +1 -0
- package/lib/components/grid/CubeColumnFormatDialog.d.ts +28 -0
- package/lib/components/grid/CubeColumnFormatDialog.d.ts.map +1 -0
- package/lib/components/grid/CubeColumnFormatDialog.js +94 -0
- package/lib/components/grid/CubeColumnFormatDialog.js.map +1 -0
- package/lib/components/grid/CubeDrilldownBar.d.ts +37 -0
- package/lib/components/grid/CubeDrilldownBar.d.ts.map +1 -0
- package/lib/components/grid/CubeDrilldownBar.js +77 -0
- package/lib/components/grid/CubeDrilldownBar.js.map +1 -0
- package/lib/components/grid/CubeGridRegion.d.ts.map +1 -1
- package/lib/components/grid/CubeGridRegion.js +43 -28
- package/lib/components/grid/CubeGridRegion.js.map +1 -1
- package/lib/components/grid/CubeGridValues.d.ts +36 -4
- package/lib/components/grid/CubeGridValues.d.ts.map +1 -1
- package/lib/components/grid/CubeGridValues.js +116 -4
- package/lib/components/grid/CubeGridValues.js.map +1 -1
- package/lib/components/grid/CubeJsonExplorerDialog.d.ts +27 -0
- package/lib/components/grid/CubeJsonExplorerDialog.d.ts.map +1 -0
- package/lib/components/grid/CubeJsonExplorerDialog.js +102 -0
- package/lib/components/grid/CubeJsonExplorerDialog.js.map +1 -0
- package/lib/components/grid/CubeJsonViewerDialog.d.ts +27 -0
- package/lib/components/grid/CubeJsonViewerDialog.d.ts.map +1 -0
- package/lib/components/grid/CubeJsonViewerDialog.js +68 -0
- package/lib/components/grid/CubeJsonViewerDialog.js.map +1 -0
- package/lib/components/grid/CubeResultGrid.d.ts +81 -6
- package/lib/components/grid/CubeResultGrid.d.ts.map +1 -1
- package/lib/components/grid/CubeResultGrid.js +400 -35
- package/lib/components/grid/CubeResultGrid.js.map +1 -1
- package/lib/components/grid/CubeRunStatsPanel.d.ts +28 -0
- package/lib/components/grid/CubeRunStatsPanel.d.ts.map +1 -0
- package/lib/components/grid/CubeRunStatsPanel.js +61 -0
- package/lib/components/grid/CubeRunStatsPanel.js.map +1 -0
- package/lib/components/grid/CubeServerSideGrid.d.ts +36 -0
- package/lib/components/grid/CubeServerSideGrid.d.ts.map +1 -0
- package/lib/components/grid/CubeServerSideGrid.js +116 -0
- package/lib/components/grid/CubeServerSideGrid.js.map +1 -0
- package/lib/components/grid/CubeSqlDialog.d.ts +24 -0
- package/lib/components/grid/CubeSqlDialog.d.ts.map +1 -0
- package/lib/components/grid/CubeSqlDialog.js +39 -0
- package/lib/components/grid/CubeSqlDialog.js.map +1 -0
- package/lib/components/grid/CubeSqlFormat.d.ts +20 -0
- package/lib/components/grid/CubeSqlFormat.d.ts.map +1 -0
- package/lib/components/grid/CubeSqlFormat.js +32 -0
- package/lib/components/grid/CubeSqlFormat.js.map +1 -0
- package/lib/components/palette/CubePalette.d.ts.map +1 -1
- package/lib/components/palette/CubePalette.js +36 -14
- package/lib/components/palette/CubePalette.js.map +1 -1
- package/lib/components/show-pure/CubeShowPureDialog.d.ts +4 -1
- package/lib/components/show-pure/CubeShowPureDialog.d.ts.map +1 -1
- package/lib/components/show-pure/CubeShowPureDialog.js +8 -4
- package/lib/components/show-pure/CubeShowPureDialog.js.map +1 -1
- package/lib/components/source-picker/CubeDataProductTab.d.ts.map +1 -1
- package/lib/components/source-picker/CubeDataProductTab.js +37 -16
- package/lib/components/source-picker/CubeDataProductTab.js.map +1 -1
- package/lib/components/source-picker/CubeDirectConnectionTab.d.ts.map +1 -1
- package/lib/components/source-picker/CubeDirectConnectionTab.js +6 -4
- package/lib/components/source-picker/CubeDirectConnectionTab.js.map +1 -1
- package/lib/components/source-picker/CubeFunctionSteps.d.ts +36 -0
- package/lib/components/source-picker/CubeFunctionSteps.d.ts.map +1 -0
- package/lib/components/source-picker/CubeFunctionSteps.js +76 -0
- package/lib/components/source-picker/CubeFunctionSteps.js.map +1 -0
- package/lib/components/source-picker/CubeIngestTab.d.ts +2 -2
- package/lib/components/source-picker/CubeIngestTab.d.ts.map +1 -1
- package/lib/components/source-picker/CubeIngestTab.js +49 -20
- package/lib/components/source-picker/CubeIngestTab.js.map +1 -1
- package/lib/components/source-picker/CubeInlineModelTab.d.ts +3 -2
- package/lib/components/source-picker/CubeInlineModelTab.d.ts.map +1 -1
- package/lib/components/source-picker/CubeInlineModelTab.js +23 -13
- package/lib/components/source-picker/CubeInlineModelTab.js.map +1 -1
- package/lib/components/source-picker/CubePickerListItem.d.ts +47 -0
- package/lib/components/source-picker/CubePickerListItem.d.ts.map +1 -0
- package/lib/components/source-picker/CubePickerListItem.js +62 -0
- package/lib/components/source-picker/CubePickerListItem.js.map +1 -0
- package/lib/components/source-picker/CubeProjectTab.d.ts +4 -3
- package/lib/components/source-picker/CubeProjectTab.d.ts.map +1 -1
- package/lib/components/source-picker/CubeProjectTab.js +7 -4
- package/lib/components/source-picker/CubeProjectTab.js.map +1 -1
- package/lib/components/source-picker/CubeServiceTab.d.ts +27 -0
- package/lib/components/source-picker/CubeServiceTab.d.ts.map +1 -0
- package/lib/components/source-picker/CubeServiceTab.js +36 -0
- package/lib/components/source-picker/CubeServiceTab.js.map +1 -0
- package/lib/components/source-picker/CubeSourcePicker.d.ts.map +1 -1
- package/lib/components/source-picker/CubeSourcePicker.js +16 -3
- package/lib/components/source-picker/CubeSourcePicker.js.map +1 -1
- package/lib/components/source-picker/CubeTablePreview.d.ts +29 -0
- package/lib/components/source-picker/CubeTablePreview.d.ts.map +1 -0
- package/lib/components/source-picker/CubeTablePreview.js +10 -0
- package/lib/components/source-picker/CubeTablePreview.js.map +1 -0
- package/lib/components/spec-transfer/CubeImportPureDialog.d.ts +27 -0
- package/lib/components/spec-transfer/CubeImportPureDialog.d.ts.map +1 -0
- package/lib/components/spec-transfer/CubeImportPureDialog.js +38 -0
- package/lib/components/spec-transfer/CubeImportPureDialog.js.map +1 -0
- package/lib/components/spec-transfer/CubeSpecTransferDialog.d.ts.map +1 -1
- package/lib/components/spec-transfer/CubeSpecTransferDialog.js +9 -3
- package/lib/components/spec-transfer/CubeSpecTransferDialog.js.map +1 -1
- package/lib/components/tour/CubeTour.d.ts +36 -0
- package/lib/components/tour/CubeTour.d.ts.map +1 -0
- package/lib/components/tour/CubeTour.js +183 -0
- package/lib/components/tour/CubeTour.js.map +1 -0
- package/lib/graph-manager/CubeDataProductCatalog.d.ts +10 -0
- package/lib/graph-manager/CubeDataProductCatalog.d.ts.map +1 -1
- package/lib/graph-manager/CubeDataProductCatalog.js.map +1 -1
- package/lib/graph-manager/CubeEngine.d.ts +46 -1
- package/lib/graph-manager/CubeEngine.d.ts.map +1 -1
- package/lib/graph-manager/CubeEngine.js.map +1 -1
- package/lib/graph-manager/CubeEngineClientSettings.d.ts +43 -0
- package/lib/graph-manager/CubeEngineClientSettings.d.ts.map +1 -0
- package/lib/graph-manager/CubeEngineClientSettings.js +51 -0
- package/lib/graph-manager/CubeEngineClientSettings.js.map +1 -0
- package/lib/graph-manager/CubeIngest.d.ts +5 -0
- package/lib/graph-manager/CubeIngest.d.ts.map +1 -1
- package/lib/graph-manager/CubeIngest.js +10 -0
- package/lib/graph-manager/CubeIngest.js.map +1 -1
- package/lib/graph-manager/CubeIngestCatalog.d.ts +26 -0
- package/lib/graph-manager/CubeIngestCatalog.d.ts.map +1 -1
- package/lib/graph-manager/CubeIngestCatalog.js +6 -0
- package/lib/graph-manager/CubeIngestCatalog.js.map +1 -1
- package/lib/graph-manager/CubeLakehouseRuntime.d.ts +29 -0
- package/lib/graph-manager/CubeLakehouseRuntime.d.ts.map +1 -0
- package/lib/graph-manager/CubeLakehouseRuntime.js +40 -0
- package/lib/graph-manager/CubeLakehouseRuntime.js.map +1 -0
- package/lib/graph-manager/CubeProjectCatalog.d.ts +3 -3
- package/lib/graph-manager/CubeService.d.ts +20 -0
- package/lib/graph-manager/CubeService.d.ts.map +1 -0
- package/lib/graph-manager/CubeService.js +22 -0
- package/lib/graph-manager/CubeService.js.map +1 -0
- package/lib/graph-manager/CubeServiceCatalog.d.ts +31 -0
- package/lib/graph-manager/CubeServiceCatalog.d.ts.map +1 -0
- package/lib/graph-manager/CubeServiceCatalog.js +17 -0
- package/lib/graph-manager/CubeServiceCatalog.js.map +1 -0
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts +52 -5
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js +63 -5
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.d.ts +9 -6
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.js +12 -8
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.d.ts +30 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.js +229 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.js +18 -9
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.d.ts +4 -9
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.js +2 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.d.ts +34 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.js +332 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.js +49 -10
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.d.ts +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.js +3 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.d.ts +2 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.js +2 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts +18 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js +74 -6
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.js +7 -4
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.d.ts +31 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.js +69 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.js +6 -2
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.js.map +1 -1
- package/lib/index.css +2 -2
- package/lib/index.css.map +1 -1
- package/lib/index.d.ts +13 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +11 -1
- package/lib/index.js.map +1 -1
- package/lib/stores/CubeAddPlacement.d.ts +10 -3
- package/lib/stores/CubeAddPlacement.d.ts.map +1 -1
- package/lib/stores/CubeAddPlacement.js +16 -5
- package/lib/stores/CubeAddPlacement.js.map +1 -1
- package/lib/stores/CubeDevSettingsState.d.ts +47 -0
- package/lib/stores/CubeDevSettingsState.d.ts.map +1 -0
- package/lib/stores/CubeDevSettingsState.js +99 -0
- package/lib/stores/CubeDevSettingsState.js.map +1 -0
- package/lib/stores/CubeEditorState.d.ts +189 -43
- package/lib/stores/CubeEditorState.d.ts.map +1 -1
- package/lib/stores/CubeEditorState.js +532 -117
- package/lib/stores/CubeEditorState.js.map +1 -1
- package/lib/stores/CubeEngineChecks.d.ts +59 -0
- package/lib/stores/CubeEngineChecks.d.ts.map +1 -0
- package/lib/stores/CubeEngineChecks.js +100 -0
- package/lib/stores/CubeEngineChecks.js.map +1 -0
- package/lib/stores/CubeExamples.d.ts.map +1 -1
- package/lib/stores/CubeExamples.js +136 -2
- package/lib/stores/CubeExamples.js.map +1 -1
- package/lib/stores/CubeExamplesState.d.ts +1 -1
- package/lib/stores/CubeExamplesState.d.ts.map +1 -1
- package/lib/stores/CubeExamplesState.js +6 -3
- package/lib/stores/CubeExamplesState.js.map +1 -1
- package/lib/stores/CubeExecutionState.d.ts.map +1 -1
- package/lib/stores/CubeExecutionState.js +24 -33
- package/lib/stores/CubeExecutionState.js.map +1 -1
- package/lib/stores/CubeExportState.d.ts +41 -0
- package/lib/stores/CubeExportState.d.ts.map +1 -0
- package/lib/stores/CubeExportState.js +134 -0
- package/lib/stores/CubeExportState.js.map +1 -0
- package/lib/stores/CubeExpressionFilterCheck.d.ts +51 -0
- package/lib/stores/CubeExpressionFilterCheck.d.ts.map +1 -0
- package/lib/stores/CubeExpressionFilterCheck.js +134 -0
- package/lib/stores/CubeExpressionFilterCheck.js.map +1 -0
- package/lib/stores/CubeExtendTyping.d.ts +6 -14
- package/lib/stores/CubeExtendTyping.d.ts.map +1 -1
- package/lib/stores/CubeExtendTyping.js +6 -33
- package/lib/stores/CubeExtendTyping.js.map +1 -1
- package/lib/stores/CubeFunctionRecheck.d.ts +30 -0
- package/lib/stores/CubeFunctionRecheck.d.ts.map +1 -0
- package/lib/stores/CubeFunctionRecheck.js +67 -0
- package/lib/stores/CubeFunctionRecheck.js.map +1 -0
- package/lib/stores/CubeGridFetcher.d.ts +75 -0
- package/lib/stores/CubeGridFetcher.d.ts.map +1 -0
- package/lib/stores/CubeGridFetcher.js +197 -0
- package/lib/stores/CubeGridFetcher.js.map +1 -0
- package/lib/stores/CubeGridQuickActions.d.ts +25 -6
- package/lib/stores/CubeGridQuickActions.d.ts.map +1 -1
- package/lib/stores/CubeGridQuickActions.js +52 -23
- package/lib/stores/CubeGridQuickActions.js.map +1 -1
- package/lib/stores/CubeGridState.d.ts +136 -0
- package/lib/stores/CubeGridState.d.ts.map +1 -0
- package/lib/stores/CubeGridState.js +317 -0
- package/lib/stores/CubeGridState.js.map +1 -0
- package/lib/stores/CubeHost.d.ts +42 -0
- package/lib/stores/CubeHost.d.ts.map +1 -1
- package/lib/stores/CubeHost.js +4 -0
- package/lib/stores/CubeHost.js.map +1 -1
- package/lib/stores/CubeLambdaImportState.d.ts +118 -0
- package/lib/stores/CubeLambdaImportState.d.ts.map +1 -0
- package/lib/stores/CubeLambdaImportState.js +302 -0
- package/lib/stores/CubeLambdaImportState.js.map +1 -0
- package/lib/stores/CubeLambdaSources.d.ts +45 -0
- package/lib/stores/CubeLambdaSources.d.ts.map +1 -0
- package/lib/stores/CubeLambdaSources.js +261 -0
- package/lib/stores/CubeLambdaSources.js.map +1 -0
- package/lib/stores/CubePureText.d.ts +20 -0
- package/lib/stores/CubePureText.d.ts.map +1 -0
- package/lib/stores/CubePureText.js +24 -0
- package/lib/stores/CubePureText.js.map +1 -0
- package/lib/stores/CubeQueryRun.d.ts +59 -0
- package/lib/stores/CubeQueryRun.d.ts.map +1 -0
- package/lib/stores/CubeQueryRun.js +101 -0
- package/lib/stores/CubeQueryRun.js.map +1 -0
- package/lib/stores/CubeRunStatsState.d.ts +61 -0
- package/lib/stores/CubeRunStatsState.d.ts.map +1 -0
- package/lib/stores/CubeRunStatsState.js +54 -0
- package/lib/stores/CubeRunStatsState.js.map +1 -0
- package/lib/stores/CubeRunningStepLambda.d.ts +25 -0
- package/lib/stores/CubeRunningStepLambda.d.ts.map +1 -0
- package/lib/stores/CubeRunningStepLambda.js +45 -0
- package/lib/stores/CubeRunningStepLambda.js.map +1 -0
- package/lib/stores/CubeServiceRecheck.d.ts +29 -0
- package/lib/stores/CubeServiceRecheck.d.ts.map +1 -0
- package/lib/stores/CubeServiceRecheck.js +33 -0
- package/lib/stores/CubeServiceRecheck.js.map +1 -0
- package/lib/stores/CubeShowPureState.d.ts +14 -1
- package/lib/stores/CubeShowPureState.d.ts.map +1 -1
- package/lib/stores/CubeShowPureState.js +41 -11
- package/lib/stores/CubeShowPureState.js.map +1 -1
- package/lib/stores/CubeSourcePickerState.d.ts +20 -4
- package/lib/stores/CubeSourcePickerState.d.ts.map +1 -1
- package/lib/stores/CubeSourcePickerState.js +75 -14
- package/lib/stores/CubeSourcePickerState.js.map +1 -1
- package/lib/stores/CubeTourState.d.ts +49 -0
- package/lib/stores/CubeTourState.d.ts.map +1 -0
- package/lib/stores/CubeTourState.js +92 -0
- package/lib/stores/CubeTourState.js.map +1 -0
- package/lib/stores/LegendCubeHost.d.ts +88 -0
- package/lib/stores/LegendCubeHost.d.ts.map +1 -0
- package/lib/stores/LegendCubeHost.js +149 -0
- package/lib/stores/LegendCubeHost.js.map +1 -0
- package/lib/stores/LocalModelCatalog.d.ts.map +1 -1
- package/lib/stores/LocalModelCatalog.js +3 -1
- package/lib/stores/LocalModelCatalog.js.map +1 -1
- package/lib/stores/editors/CubeExplodeDraft.d.ts +87 -0
- package/lib/stores/editors/CubeExplodeDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeExplodeDraft.js +221 -0
- package/lib/stores/editors/CubeExplodeDraft.js.map +1 -0
- package/lib/stores/editors/CubeExpressionFilterDraft.d.ts +94 -0
- package/lib/stores/editors/CubeExpressionFilterDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeExpressionFilterDraft.js +258 -0
- package/lib/stores/editors/CubeExpressionFilterDraft.js.map +1 -0
- package/lib/stores/editors/CubeExtendDraft.d.ts +9 -0
- package/lib/stores/editors/CubeExtendDraft.d.ts.map +1 -1
- package/lib/stores/editors/CubeExtendDraft.js +26 -0
- package/lib/stores/editors/CubeExtendDraft.js.map +1 -1
- package/lib/stores/editors/CubeFunctionDraft.d.ts +34 -0
- package/lib/stores/editors/CubeFunctionDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeFunctionDraft.js +69 -0
- package/lib/stores/editors/CubeFunctionDraft.js.map +1 -0
- package/lib/stores/editors/CubeNodeDraftRegistry.d.ts +4 -2
- package/lib/stores/editors/CubeNodeDraftRegistry.d.ts.map +1 -1
- package/lib/stores/editors/CubeNodeDraftRegistry.js +25 -3
- package/lib/stores/editors/CubeNodeDraftRegistry.js.map +1 -1
- package/lib/stores/editors/CubePivotDraft.d.ts +93 -0
- package/lib/stores/editors/CubePivotDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubePivotDraft.js +267 -0
- package/lib/stores/editors/CubePivotDraft.js.map +1 -0
- package/lib/stores/fixtures/CubeSalesDuckDbModel.d.ts +27 -0
- package/lib/stores/fixtures/CubeSalesDuckDbModel.d.ts.map +1 -0
- package/lib/stores/fixtures/CubeSalesDuckDbModel.js +52 -0
- package/lib/stores/fixtures/CubeSalesDuckDbModel.js.map +1 -0
- package/lib/stores/fixtures/CubeTradesModel.d.ts +4 -0
- package/lib/stores/fixtures/CubeTradesModel.d.ts.map +1 -1
- package/lib/stores/fixtures/CubeTradesModel.js +31 -1
- package/lib/stores/fixtures/CubeTradesModel.js.map +1 -1
- package/lib/stores/source-picker/CubeDataProductTabState.d.ts +34 -5
- package/lib/stores/source-picker/CubeDataProductTabState.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeDataProductTabState.js +111 -26
- package/lib/stores/source-picker/CubeDataProductTabState.js.map +1 -1
- package/lib/stores/source-picker/CubeDirectConnectionTabState.d.ts +25 -2
- package/lib/stores/source-picker/CubeDirectConnectionTabState.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeDirectConnectionTabState.js +183 -31
- package/lib/stores/source-picker/CubeDirectConnectionTabState.js.map +1 -1
- package/lib/stores/source-picker/CubeIngestTabState.d.ts +62 -15
- package/lib/stores/source-picker/CubeIngestTabState.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeIngestTabState.js +212 -60
- package/lib/stores/source-picker/CubeIngestTabState.js.map +1 -1
- package/lib/stores/source-picker/CubeInlineModelTabState.d.ts +100 -4
- package/lib/stores/source-picker/CubeInlineModelTabState.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeInlineModelTabState.js +415 -28
- package/lib/stores/source-picker/CubeInlineModelTabState.js.map +1 -1
- package/lib/stores/source-picker/CubeProjectTabState.d.ts +18 -3
- package/lib/stores/source-picker/CubeProjectTabState.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeProjectTabState.js +26 -1
- package/lib/stores/source-picker/CubeProjectTabState.js.map +1 -1
- package/lib/stores/source-picker/CubeServiceTabState.d.ts +74 -0
- package/lib/stores/source-picker/CubeServiceTabState.d.ts.map +1 -0
- package/lib/stores/source-picker/CubeServiceTabState.js +216 -0
- package/lib/stores/source-picker/CubeServiceTabState.js.map +1 -0
- package/lib/stores/source-picker/CubeSourcePickerTab.d.ts +15 -3
- package/lib/stores/source-picker/CubeSourcePickerTab.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeSourcePickerTab.js +21 -0
- package/lib/stores/source-picker/CubeSourcePickerTab.js.map +1 -1
- package/lib/stores/variant/CubeJson.d.ts +48 -0
- package/lib/stores/variant/CubeJson.d.ts.map +1 -0
- package/lib/stores/variant/CubeJson.js +207 -0
- package/lib/stores/variant/CubeJson.js.map +1 -0
- package/lib/stores/variant/CubeJsonExplorerState.d.ts +88 -0
- package/lib/stores/variant/CubeJsonExplorerState.d.ts.map +1 -0
- package/lib/stores/variant/CubeJsonExplorerState.js +297 -0
- package/lib/stores/variant/CubeJsonExplorerState.js.map +1 -0
- package/lib/stores/variant/CubeJsonFieldsState.d.ts +83 -0
- package/lib/stores/variant/CubeJsonFieldsState.d.ts.map +1 -0
- package/lib/stores/variant/CubeJsonFieldsState.js +207 -0
- package/lib/stores/variant/CubeJsonFieldsState.js.map +1 -0
- package/lib/stores/variant/CubeJsonOffers.d.ts +76 -0
- package/lib/stores/variant/CubeJsonOffers.d.ts.map +1 -0
- package/lib/stores/variant/CubeJsonOffers.js +250 -0
- package/lib/stores/variant/CubeJsonOffers.js.map +1 -0
- package/lib/stores/variant/CubeJsonParse.d.ts +28 -0
- package/lib/stores/variant/CubeJsonParse.d.ts.map +1 -0
- package/lib/stores/variant/CubeJsonParse.js +53 -0
- package/lib/stores/variant/CubeJsonParse.js.map +1 -0
- package/lib/stores/variant/CubeJsonSampling.d.ts +41 -0
- package/lib/stores/variant/CubeJsonSampling.d.ts.map +1 -0
- package/lib/stores/variant/CubeJsonSampling.js +59 -0
- package/lib/stores/variant/CubeJsonSampling.js.map +1 -0
- package/lib/stores/variant/CubeJsonShape.d.ts +87 -0
- package/lib/stores/variant/CubeJsonShape.d.ts.map +1 -0
- package/lib/stores/variant/CubeJsonShape.js +209 -0
- package/lib/stores/variant/CubeJsonShape.js.map +1 -0
- package/lib/stores/variant/CubeJsonViewerState.d.ts +33 -0
- package/lib/stores/variant/CubeJsonViewerState.d.ts.map +1 -0
- package/lib/stores/variant/CubeJsonViewerState.js +53 -0
- package/lib/stores/variant/CubeJsonViewerState.js.map +1 -0
- package/package.json +10 -9
- package/src/__lib__/LegendCubeCommand.ts +7 -0
- package/src/__lib__/LegendCubeFunctionLabels.ts +41 -0
- package/src/__lib__/LegendCubeHelpText.ts +27 -1
- package/src/__lib__/LegendCubeLabels.ts +225 -16
- package/src/__lib__/LegendCubeNavigation.ts +48 -0
- package/src/__lib__/LegendCubeProjectSourceLabels.ts +26 -0
- package/src/__lib__/LegendCubeServiceLabels.ts +41 -0
- package/src/__lib__/LegendCubeTesting.ts +9 -0
- package/src/__lib__/LegendCubeTour.ts +173 -0
- package/src/__test-utils__/CubeEngineTestSupport.ts +2 -1
- package/src/__test-utils__/CubeExampleTestUtils.ts +119 -0
- package/src/__test-utils__/CubeExpressionTestUtils.ts +29 -2
- package/src/__test-utils__/CubeFunctionTestOutline.ts +78 -0
- package/src/__test-utils__/CubeLambdaCorpus.ts +137 -0
- package/src/__test-utils__/CubePageTestUtils.tsx +34 -0
- package/src/__test-utils__/CubeTestApplication.ts +25 -0
- package/src/__test-utils__/CubeVariantTestUtils.ts +103 -0
- package/src/__test-utils__/FakeCubeEngine.ts +27 -0
- package/src/__test-utils__/FakeCubeIngestCatalog.ts +18 -0
- package/src/__test-utils__/FakeCubeServiceCatalog.ts +57 -0
- package/src/components/CubeAddItems.tsx +15 -6
- package/src/components/CubeDialogTheme.ts +25 -0
- package/src/components/CubeEditor.tsx +170 -129
- package/src/components/CubeFileMenu.tsx +129 -0
- package/src/components/CubeLambdaImportBanner.tsx +97 -0
- package/src/components/CubeNodeIcon.tsx +9 -0
- package/src/components/CubeSchemaColumnsTable.tsx +7 -2
- package/src/components/canvas/CubeCanvas.tsx +65 -10
- package/src/components/canvas/CubeCanvasContextMenu.tsx +33 -2
- package/src/components/canvas/CubeCanvasElements.ts +76 -3
- package/src/components/canvas/CubeCanvasLayout.ts +1 -1
- package/src/components/canvas/CubeCanvasNode.tsx +37 -3
- package/src/components/dev-settings/CubeDevSettings.tsx +169 -0
- package/src/components/editors/CubeColumnChecklist.tsx +8 -2
- package/src/components/editors/CubeColumnPicker.tsx +9 -3
- package/src/components/editors/CubeConcatEditor.tsx +2 -2
- package/src/components/editors/CubeExplodeEditor.tsx +207 -0
- package/src/components/editors/CubeExpressionFilterEditor.tsx +210 -0
- package/src/components/editors/CubeExtendEditor.tsx +34 -21
- package/src/components/editors/CubeFilterEditor.tsx +13 -1
- package/src/components/editors/CubeFunctionSourceEditor.tsx +140 -0
- package/src/components/editors/CubeJoinEditor.tsx +23 -4
- package/src/components/editors/CubeJsonFieldsTree.tsx +316 -0
- package/src/components/editors/CubeNodeEditorPanel.tsx +22 -10
- package/src/components/editors/CubeNodeEditorPopper.tsx +9 -1
- package/src/components/editors/CubeNodeEditorRegistry.ts +15 -0
- package/src/components/editors/CubePivotEditor.tsx +277 -0
- package/src/components/editors/CubeRestrictEditor.tsx +8 -2
- package/src/components/editors/CubeServiceSourceEditor.tsx +77 -0
- package/src/components/grid/CubeColumnFormatDialog.tsx +289 -0
- package/src/components/grid/CubeDrilldownBar.tsx +219 -0
- package/src/components/grid/CubeGridRegion.tsx +190 -56
- package/src/components/grid/CubeGridValues.ts +154 -4
- package/src/components/grid/CubeJsonExplorerDialog.tsx +304 -0
- package/src/components/grid/CubeJsonViewerDialog.tsx +190 -0
- package/src/components/grid/CubeResultGrid.tsx +586 -42
- package/src/components/grid/CubeRunStatsPanel.tsx +156 -0
- package/src/components/grid/CubeServerSideGrid.tsx +213 -0
- package/src/components/grid/CubeSqlDialog.tsx +90 -0
- package/src/components/grid/CubeSqlFormat.ts +37 -0
- package/src/components/palette/CubePalette.tsx +54 -12
- package/src/components/show-pure/CubeShowPureDialog.tsx +19 -5
- package/src/components/source-picker/CubeDataProductTab.tsx +169 -75
- package/src/components/source-picker/CubeDirectConnectionTab.tsx +42 -30
- package/src/components/source-picker/CubeFunctionSteps.tsx +244 -0
- package/src/components/source-picker/CubeIngestTab.tsx +195 -83
- package/src/components/source-picker/CubeInlineModelTab.tsx +110 -81
- package/src/components/source-picker/CubePickerListItem.tsx +118 -0
- package/src/components/source-picker/CubeProjectTab.tsx +6 -3
- package/src/components/source-picker/CubeServiceTab.tsx +151 -0
- package/src/components/source-picker/CubeSourcePicker.tsx +54 -18
- package/src/components/source-picker/CubeTablePreview.tsx +49 -0
- package/src/components/spec-transfer/CubeImportPureDialog.tsx +122 -0
- package/src/components/spec-transfer/CubeSpecTransferDialog.tsx +21 -8
- package/src/components/tour/CubeTour.tsx +317 -0
- package/src/graph-manager/CubeDataProductCatalog.ts +11 -0
- package/src/graph-manager/CubeEngine.ts +51 -1
- package/src/graph-manager/CubeEngineClientSettings.ts +64 -0
- package/src/graph-manager/CubeIngest.ts +15 -0
- package/src/graph-manager/CubeIngestCatalog.ts +33 -0
- package/src/graph-manager/CubeLakehouseRuntime.ts +43 -0
- package/src/graph-manager/CubeProjectCatalog.ts +3 -3
- package/src/graph-manager/CubeService.ts +29 -0
- package/src/graph-manager/CubeServiceCatalog.ts +35 -0
- package/src/graph-manager/protocol/pure/CubeEngineBuilder.ts +115 -5
- package/src/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.ts +13 -7
- package/src/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.ts +312 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.ts +35 -9
- package/src/graph-manager/protocol/pure/v1/V1_CubeIngestModel.ts +6 -15
- package/src/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.ts +471 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.ts +70 -15
- package/src/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.ts +3 -1
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.ts +7 -1
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.ts +122 -7
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.ts +9 -4
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.ts +92 -0
- package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.ts +6 -1
- package/src/index.ts +39 -2
- package/src/stores/CubeAddPlacement.ts +25 -5
- package/src/stores/CubeDevSettingsState.ts +117 -0
- package/src/stores/CubeEditorState.ts +722 -201
- package/src/stores/CubeEngineChecks.ts +240 -0
- package/src/stores/CubeExamples.ts +188 -1
- package/src/stores/CubeExamplesState.ts +13 -3
- package/src/stores/CubeExecutionState.ts +26 -57
- package/src/stores/CubeExportState.ts +196 -0
- package/src/stores/CubeExpressionFilterCheck.ts +218 -0
- package/src/stores/CubeExtendTyping.ts +6 -46
- package/src/stores/CubeFunctionRecheck.ts +97 -0
- package/src/stores/CubeGridFetcher.ts +302 -0
- package/src/stores/CubeGridQuickActions.ts +56 -23
- package/src/stores/CubeGridState.ts +450 -0
- package/src/stores/CubeHost.ts +48 -0
- package/src/stores/CubeLambdaImportState.ts +434 -0
- package/src/stores/CubeLambdaSources.ts +390 -0
- package/src/stores/CubePureText.ts +28 -0
- package/src/stores/CubeQueryRun.ts +169 -0
- package/src/stores/CubeRunStatsState.ts +91 -0
- package/src/stores/CubeRunningStepLambda.ts +62 -0
- package/src/stores/CubeServiceRecheck.ts +53 -0
- package/src/stores/CubeShowPureState.ts +51 -12
- package/src/stores/CubeSourcePickerState.ts +89 -13
- package/src/stores/CubeTourState.ts +116 -0
- package/src/stores/LegendCubeHost.ts +243 -0
- package/src/stores/LocalModelCatalog.ts +6 -1
- package/src/stores/editors/CubeExplodeDraft.ts +272 -0
- package/src/stores/editors/CubeExpressionFilterDraft.ts +389 -0
- package/src/stores/editors/CubeExtendDraft.ts +29 -0
- package/src/stores/editors/CubeFunctionDraft.ts +92 -0
- package/src/stores/editors/CubeNodeDraftRegistry.ts +34 -2
- package/src/stores/editors/CubePivotDraft.ts +355 -0
- package/src/stores/fixtures/CubeSalesDuckDbModel.ts +60 -0
- package/src/stores/fixtures/CubeTradesModel.ts +36 -1
- package/src/stores/source-picker/CubeDataProductTabState.ts +162 -35
- package/src/stores/source-picker/CubeDirectConnectionTabState.ts +246 -47
- package/src/stores/source-picker/CubeIngestTabState.ts +331 -106
- package/src/stores/source-picker/CubeInlineModelTabState.ts +514 -34
- package/src/stores/source-picker/CubeProjectTabState.ts +35 -3
- package/src/stores/source-picker/CubeServiceTabState.ts +288 -0
- package/src/stores/source-picker/CubeSourcePickerTab.ts +31 -2
- package/src/stores/variant/CubeJson.ts +229 -0
- package/src/stores/variant/CubeJsonExplorerState.ts +378 -0
- package/src/stores/variant/CubeJsonFieldsState.ts +252 -0
- package/src/stores/variant/CubeJsonOffers.ts +359 -0
- package/src/stores/variant/CubeJsonParse.ts +75 -0
- package/src/stores/variant/CubeJsonSampling.ts +90 -0
- package/src/stores/variant/CubeJsonShape.ts +279 -0
- package/src/stores/variant/CubeJsonViewerState.ts +59 -0
- package/tsconfig.json +72 -1
|
@@ -0,0 +1,122 @@
|
|
|
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
|
+
PanelLoadingIndicator,
|
|
25
|
+
} from '@finos/legend-art';
|
|
26
|
+
import { flowResult } from 'mobx';
|
|
27
|
+
import { observer } from 'mobx-react-lite';
|
|
28
|
+
import { LEGEND_CUBE_TEST_ID } from '../../__lib__/LegendCubeTesting.js';
|
|
29
|
+
import type { CubeEditorState } from '../../stores/CubeEditorState.js';
|
|
30
|
+
import { CUBE_PRIMARY_BUTTON_DARK_MODE } from '../CubeDialogTheme.js';
|
|
31
|
+
|
|
32
|
+
const TEXT_AREA_CLASS_NAME =
|
|
33
|
+
'h-80 w-full resize-none rounded-sm border border-[var(--color-border-default)] bg-[var(--color-bg-input)] p-1 font-mono text-sm text-[var(--color-text-primary)]';
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Import Pure (PLAN §11.18): a lambda pasted as Pure, as Show Pure shows one,
|
|
37
|
+
* or as the engine's JSON, read into the steps Cube writes it with, in
|
|
38
|
+
* place of this cube
|
|
39
|
+
*/
|
|
40
|
+
export const CubeImportPureDialog = observer(
|
|
41
|
+
(props: { editorState: CubeEditorState }) => {
|
|
42
|
+
const { editorState } = props;
|
|
43
|
+
const { lambdaImport } = editorState;
|
|
44
|
+
const { applicationStore } = editorState.host;
|
|
45
|
+
const darkMode =
|
|
46
|
+
!applicationStore.layoutService.TEMPORARY__isLightColorThemeEnabled;
|
|
47
|
+
const importText = (): void => {
|
|
48
|
+
flowResult(lambdaImport.importText()).catch(
|
|
49
|
+
applicationStore.alertUnhandledError,
|
|
50
|
+
);
|
|
51
|
+
};
|
|
52
|
+
return (
|
|
53
|
+
<Dialog
|
|
54
|
+
open={lambdaImport.isDialogOpen}
|
|
55
|
+
onClose={() => lambdaImport.closeDialog()}
|
|
56
|
+
>
|
|
57
|
+
<Modal darkMode={darkMode} className="w-[720px] max-w-full">
|
|
58
|
+
<ModalHeader>
|
|
59
|
+
<div className="modal__title">Import Pure</div>
|
|
60
|
+
</ModalHeader>
|
|
61
|
+
<PanelLoadingIndicator isLoading={lambdaImport.isImporting} />
|
|
62
|
+
<ModalBody>
|
|
63
|
+
<div
|
|
64
|
+
className="flex flex-col gap-2"
|
|
65
|
+
data-testid={LEGEND_CUBE_TEST_ID.IMPORT_PURE}
|
|
66
|
+
>
|
|
67
|
+
<div className="text-base text-[var(--color-text-secondary)]">
|
|
68
|
+
Paste a query, as Show Pure shows one, e.g.{' '}
|
|
69
|
+
<code>
|
|
70
|
+
{'|#>{db::Store.SCHEMA.TABLE}#->filter(x | $x.ID > 1)'}
|
|
71
|
+
</code>
|
|
72
|
+
, or its JSON. Cube reads it into steps that replace this cube;
|
|
73
|
+
Undo brings it back. Its sources are read where the source
|
|
74
|
+
dialog reads them.
|
|
75
|
+
</div>
|
|
76
|
+
<textarea
|
|
77
|
+
className={TEXT_AREA_CLASS_NAME}
|
|
78
|
+
aria-label="Pure query"
|
|
79
|
+
placeholder="Pure query"
|
|
80
|
+
spellCheck={false}
|
|
81
|
+
value={lambdaImport.text}
|
|
82
|
+
onChange={(event) => lambdaImport.setText(event.target.value)}
|
|
83
|
+
/>
|
|
84
|
+
{lambdaImport.dialogError !== undefined && (
|
|
85
|
+
<div
|
|
86
|
+
className="break-words text-base text-[var(--color-status-error)]"
|
|
87
|
+
role="alert"
|
|
88
|
+
>
|
|
89
|
+
{lambdaImport.dialogError.message}
|
|
90
|
+
{lambdaImport.dialogError.detail !== undefined && (
|
|
91
|
+
<details>
|
|
92
|
+
<summary className="cursor-pointer">Details</summary>
|
|
93
|
+
<pre className="whitespace-pre-wrap text-sm">
|
|
94
|
+
{lambdaImport.dialogError.detail}
|
|
95
|
+
</pre>
|
|
96
|
+
</details>
|
|
97
|
+
)}
|
|
98
|
+
</div>
|
|
99
|
+
)}
|
|
100
|
+
</div>
|
|
101
|
+
</ModalBody>
|
|
102
|
+
<ModalFooter>
|
|
103
|
+
<ModalFooterButton
|
|
104
|
+
darkMode={CUBE_PRIMARY_BUTTON_DARK_MODE}
|
|
105
|
+
formatText={false}
|
|
106
|
+
text="Import"
|
|
107
|
+
disabled={!lambdaImport.text.trim() || lambdaImport.isImporting}
|
|
108
|
+
onClick={importText}
|
|
109
|
+
/>
|
|
110
|
+
<ModalFooterButton
|
|
111
|
+
darkMode={darkMode}
|
|
112
|
+
formatText={false}
|
|
113
|
+
type="secondary"
|
|
114
|
+
text="Cancel"
|
|
115
|
+
onClick={() => lambdaImport.closeDialog()}
|
|
116
|
+
/>
|
|
117
|
+
</ModalFooter>
|
|
118
|
+
</Modal>
|
|
119
|
+
</Dialog>
|
|
120
|
+
);
|
|
121
|
+
},
|
|
122
|
+
);
|
|
@@ -23,10 +23,15 @@ import {
|
|
|
23
23
|
ModalHeader,
|
|
24
24
|
PanelLoadingIndicator,
|
|
25
25
|
} from '@finos/legend-art';
|
|
26
|
+
import { CodeEditor } from '@finos/legend-lego/code-editor';
|
|
26
27
|
import { flowResult } from 'mobx';
|
|
27
28
|
import { observer } from 'mobx-react-lite';
|
|
28
29
|
import type { CubeEditorState } from '../../stores/CubeEditorState.js';
|
|
29
30
|
import { CUBE_SPEC_TRANSFER_MODE } from '../../stores/CubeSpecTransferState.js';
|
|
31
|
+
import { CUBE_PRIMARY_BUTTON_DARK_MODE } from '../CubeDialogTheme.js';
|
|
32
|
+
|
|
33
|
+
/** The code editor's language: legend-code-editor's `CODE_EDITOR_LANGUAGE.JSON` */
|
|
34
|
+
const JSON_LANGUAGE = 'json';
|
|
30
35
|
|
|
31
36
|
const TEXT_AREA_CLASS_NAME =
|
|
32
37
|
'h-80 w-full resize-none rounded-sm border border-[var(--color-border-default)] bg-[var(--color-bg-input)] p-1 font-mono text-sm text-[var(--color-text-primary)]';
|
|
@@ -60,12 +65,20 @@ export const CubeSpecTransferDialog = observer(
|
|
|
60
65
|
<div className="flex flex-col gap-2">
|
|
61
66
|
{isExport ? (
|
|
62
67
|
transfer.exportText !== undefined && (
|
|
63
|
-
|
|
64
|
-
|
|
68
|
+
// a code editor, so each object and list folds from the gutter
|
|
69
|
+
<div
|
|
70
|
+
className="h-80 w-full overflow-hidden rounded-sm border border-[var(--color-border-default)]"
|
|
65
71
|
aria-label="Cube spec"
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
72
|
+
>
|
|
73
|
+
<CodeEditor
|
|
74
|
+
inputValue={transfer.exportText}
|
|
75
|
+
language={JSON_LANGUAGE}
|
|
76
|
+
isReadOnly={true}
|
|
77
|
+
hideMinimap={true}
|
|
78
|
+
hideActionBar={true}
|
|
79
|
+
extraEditorOptions={{ scrollBeyondLastLine: false }}
|
|
80
|
+
/>
|
|
81
|
+
</div>
|
|
69
82
|
)
|
|
70
83
|
) : (
|
|
71
84
|
<>
|
|
@@ -115,7 +128,7 @@ export const CubeSpecTransferDialog = observer(
|
|
|
115
128
|
{isExport ? (
|
|
116
129
|
<>
|
|
117
130
|
<ModalFooterButton
|
|
118
|
-
darkMode={
|
|
131
|
+
darkMode={CUBE_PRIMARY_BUTTON_DARK_MODE}
|
|
119
132
|
formatText={false}
|
|
120
133
|
text="Copy"
|
|
121
134
|
disabled={transfer.exportText === undefined}
|
|
@@ -126,7 +139,7 @@ export const CubeSpecTransferDialog = observer(
|
|
|
126
139
|
}}
|
|
127
140
|
/>
|
|
128
141
|
<ModalFooterButton
|
|
129
|
-
darkMode={
|
|
142
|
+
darkMode={CUBE_PRIMARY_BUTTON_DARK_MODE}
|
|
130
143
|
formatText={false}
|
|
131
144
|
text="Download"
|
|
132
145
|
disabled={transfer.exportText === undefined}
|
|
@@ -135,7 +148,7 @@ export const CubeSpecTransferDialog = observer(
|
|
|
135
148
|
</>
|
|
136
149
|
) : (
|
|
137
150
|
<ModalFooterButton
|
|
138
|
-
darkMode={
|
|
151
|
+
darkMode={CUBE_PRIMARY_BUTTON_DARK_MODE}
|
|
139
152
|
formatText={false}
|
|
140
153
|
text="Import"
|
|
141
154
|
disabled={!transfer.importText.trim() || transfer.isReadingFile}
|
|
@@ -0,0 +1,317 @@
|
|
|
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 { BasePopper } from '@finos/legend-art';
|
|
18
|
+
import { noop } from '@finos/legend-shared';
|
|
19
|
+
import { observer } from 'mobx-react-lite';
|
|
20
|
+
import { useEffect, useId, useMemo, useRef, useState } from 'react';
|
|
21
|
+
import { createPortal } from 'react-dom';
|
|
22
|
+
import {
|
|
23
|
+
CUBE_TOUR_ANCHOR_ATTRIBUTE,
|
|
24
|
+
CUBE_TOUR_LABEL,
|
|
25
|
+
type CUBE_TOUR_ANCHOR,
|
|
26
|
+
type CubeTourStep,
|
|
27
|
+
} from '../../__lib__/LegendCubeTour.js';
|
|
28
|
+
import type { CubeEditorState } from '../../stores/CubeEditorState.js';
|
|
29
|
+
import { CubeButton } from '../CubeButton.js';
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Above the canvas, the grid and the node editor (1250), below MUI's dialogs
|
|
33
|
+
* (1300); inside the dialog that hosts the page, if one does
|
|
34
|
+
*/
|
|
35
|
+
export const CUBE_TOUR_Z_INDEX = 1290;
|
|
36
|
+
|
|
37
|
+
/** Room around the controls shown, and between them and the card */
|
|
38
|
+
const PADDING = 4;
|
|
39
|
+
const GAP = 12;
|
|
40
|
+
/** The card's width (Legend's root is 62.5%, so it is written in pixels) */
|
|
41
|
+
const CARD_WIDTH = 340;
|
|
42
|
+
const DIM = 'rgba(0, 0, 0, 0.45)';
|
|
43
|
+
|
|
44
|
+
const MODIFIERS = [
|
|
45
|
+
{ name: 'offset', options: { offset: [0, GAP + PADDING] } },
|
|
46
|
+
{ name: 'flip', options: { padding: GAP } },
|
|
47
|
+
{
|
|
48
|
+
name: 'preventOverflow',
|
|
49
|
+
options: { rootBoundary: 'viewport', padding: GAP, altAxis: true },
|
|
50
|
+
},
|
|
51
|
+
];
|
|
52
|
+
|
|
53
|
+
type CubePopperInstance = NonNullable<
|
|
54
|
+
Extract<
|
|
55
|
+
React.ComponentProps<typeof BasePopper>['popperRef'],
|
|
56
|
+
React.RefObject<unknown>
|
|
57
|
+
>['current']
|
|
58
|
+
>;
|
|
59
|
+
|
|
60
|
+
interface Box {
|
|
61
|
+
left: number;
|
|
62
|
+
top: number;
|
|
63
|
+
width: number;
|
|
64
|
+
height: number;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/** The page's controls that carry the anchor */
|
|
68
|
+
const findAnchored = (root: Element, anchor: CUBE_TOUR_ANCHOR): Element[] =>
|
|
69
|
+
Array.from(
|
|
70
|
+
root.querySelectorAll(`[${CUBE_TOUR_ANCHOR_ATTRIBUTE}~="${anchor}"]`),
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
/** The box around the anchor's controls that have a size; none if none has */
|
|
74
|
+
const boxOf = (root: Element, anchor: CUBE_TOUR_ANCHOR): Box | undefined =>
|
|
75
|
+
findAnchored(root, anchor)
|
|
76
|
+
.map((element) => element.getBoundingClientRect())
|
|
77
|
+
.filter((rect) => rect.width > 0 || rect.height > 0)
|
|
78
|
+
.reduce<Box | undefined>((box, rect) => {
|
|
79
|
+
if (!box) {
|
|
80
|
+
return {
|
|
81
|
+
left: rect.left,
|
|
82
|
+
top: rect.top,
|
|
83
|
+
width: rect.width,
|
|
84
|
+
height: rect.height,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
const left = Math.min(box.left, rect.left);
|
|
88
|
+
const top = Math.min(box.top, rect.top);
|
|
89
|
+
return {
|
|
90
|
+
left,
|
|
91
|
+
top,
|
|
92
|
+
width: Math.max(box.left + box.width, rect.right) - left,
|
|
93
|
+
height: Math.max(box.top + box.height, rect.bottom) - top,
|
|
94
|
+
};
|
|
95
|
+
}, undefined);
|
|
96
|
+
|
|
97
|
+
const isSameBox = (a: Box | undefined, b: Box | undefined): boolean =>
|
|
98
|
+
a === b ||
|
|
99
|
+
(a !== undefined &&
|
|
100
|
+
b !== undefined &&
|
|
101
|
+
a.left === b.left &&
|
|
102
|
+
a.top === b.top &&
|
|
103
|
+
a.width === b.width &&
|
|
104
|
+
a.height === b.height);
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* The editor's guided tour (PLAN §11.21): the page dimmed but for the
|
|
108
|
+
* current step's controls, and a card beside them, or in the middle of the
|
|
109
|
+
* page for a step that points at nothing. The controls are followed as the
|
|
110
|
+
* page moves them (a panel resized, the grid loaded). Clicks on the page
|
|
111
|
+
* are held while it shows; Esc ends it, the arrow keys move through it.
|
|
112
|
+
*/
|
|
113
|
+
export const CubeTour = observer(
|
|
114
|
+
(props: {
|
|
115
|
+
editorState: CubeEditorState;
|
|
116
|
+
/** The page, whose controls the steps point at */
|
|
117
|
+
root: HTMLElement | null;
|
|
118
|
+
}) => {
|
|
119
|
+
const { editorState, root } = props;
|
|
120
|
+
const { tour } = editorState;
|
|
121
|
+
const { step } = tour;
|
|
122
|
+
const titleId = useId();
|
|
123
|
+
const textId = useId();
|
|
124
|
+
const [box, setBox] = useState<Box | undefined>(undefined);
|
|
125
|
+
const popperRef = useRef<CubePopperInstance>(null);
|
|
126
|
+
const isShown = useMemo(
|
|
127
|
+
() =>
|
|
128
|
+
(candidate: CubeTourStep): boolean =>
|
|
129
|
+
candidate.anchor === undefined ||
|
|
130
|
+
(root !== null && findAnchored(root, candidate.anchor).length > 0),
|
|
131
|
+
[root],
|
|
132
|
+
);
|
|
133
|
+
|
|
134
|
+
// the step's controls followed, frame by frame, while it shows
|
|
135
|
+
const anchor = step?.anchor;
|
|
136
|
+
useEffect(() => {
|
|
137
|
+
if (anchor === undefined || !root) {
|
|
138
|
+
setBox(undefined);
|
|
139
|
+
return undefined;
|
|
140
|
+
}
|
|
141
|
+
let frame = 0;
|
|
142
|
+
const follow = (): void => {
|
|
143
|
+
const next = boxOf(root, anchor);
|
|
144
|
+
setBox((current) => (isSameBox(current, next) ? current : next));
|
|
145
|
+
frame = requestAnimationFrame(follow);
|
|
146
|
+
};
|
|
147
|
+
follow();
|
|
148
|
+
return () => cancelAnimationFrame(frame);
|
|
149
|
+
}, [anchor, root]);
|
|
150
|
+
useEffect(() => {
|
|
151
|
+
popperRef.current?.update().catch(noop());
|
|
152
|
+
}, [box]);
|
|
153
|
+
|
|
154
|
+
// the tour's keys come first: the page's shortcuts wait while it shows
|
|
155
|
+
const isOpen = step !== undefined;
|
|
156
|
+
useEffect(() => {
|
|
157
|
+
if (!isOpen) {
|
|
158
|
+
return undefined;
|
|
159
|
+
}
|
|
160
|
+
const onKeyDown = (event: KeyboardEvent): void => {
|
|
161
|
+
if (event.key === 'Escape') {
|
|
162
|
+
tour.close();
|
|
163
|
+
} else if (event.key === 'ArrowRight') {
|
|
164
|
+
tour.move(1, isShown);
|
|
165
|
+
} else if (event.key === 'ArrowLeft') {
|
|
166
|
+
tour.move(-1, isShown);
|
|
167
|
+
} else {
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
event.preventDefault();
|
|
171
|
+
event.stopPropagation();
|
|
172
|
+
};
|
|
173
|
+
window.addEventListener('keydown', onKeyDown, true);
|
|
174
|
+
return () => window.removeEventListener('keydown', onKeyDown, true);
|
|
175
|
+
}, [isOpen, tour, isShown]);
|
|
176
|
+
|
|
177
|
+
const spotlight = useMemo(
|
|
178
|
+
() =>
|
|
179
|
+
box && {
|
|
180
|
+
left: box.left - PADDING,
|
|
181
|
+
top: box.top - PADDING,
|
|
182
|
+
width: box.width + 2 * PADDING,
|
|
183
|
+
height: box.height + 2 * PADDING,
|
|
184
|
+
},
|
|
185
|
+
[box],
|
|
186
|
+
);
|
|
187
|
+
// the popper reads the spotlight wherever it places the card
|
|
188
|
+
const latest = useRef(spotlight);
|
|
189
|
+
latest.current = spotlight;
|
|
190
|
+
const virtualAnchor = useMemo(
|
|
191
|
+
() => ({
|
|
192
|
+
getBoundingClientRect: (): DOMRect => {
|
|
193
|
+
const current = latest.current ?? {
|
|
194
|
+
left: 0,
|
|
195
|
+
top: 0,
|
|
196
|
+
width: 0,
|
|
197
|
+
height: 0,
|
|
198
|
+
};
|
|
199
|
+
return DOMRect.fromRect({
|
|
200
|
+
x: current.left,
|
|
201
|
+
y: current.top,
|
|
202
|
+
width: current.width,
|
|
203
|
+
height: current.height,
|
|
204
|
+
});
|
|
205
|
+
},
|
|
206
|
+
}),
|
|
207
|
+
[],
|
|
208
|
+
);
|
|
209
|
+
|
|
210
|
+
if (!step || !root) {
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
// counted over the whole tour, steady while an example loads and adds
|
|
214
|
+
// the controls of later steps; a step skipped skips its number
|
|
215
|
+
const position = tour.index + 1;
|
|
216
|
+
const isLast = tour.steps.filter(isShown).at(-1) === step;
|
|
217
|
+
// a page hosted in a dialog, as Studio hosts Cube, keeps the tour in the
|
|
218
|
+
// dialog's layer, above the page
|
|
219
|
+
const container =
|
|
220
|
+
root.closest<HTMLElement>('.MuiDialog-root') ?? root.ownerDocument.body;
|
|
221
|
+
const card = (
|
|
222
|
+
<div
|
|
223
|
+
// a new card for each step, so its Next button takes the focus
|
|
224
|
+
key={tour.index}
|
|
225
|
+
className="legend-cube__tour flex flex-col gap-2 rounded-md border border-[var(--color-border-default)] bg-[var(--color-bg-elevated)] p-3 text-[var(--color-text-primary)] shadow-lg"
|
|
226
|
+
style={{ width: CARD_WIDTH, maxWidth: `calc(100vw - ${2 * GAP}px)` }}
|
|
227
|
+
role="dialog"
|
|
228
|
+
aria-modal="true"
|
|
229
|
+
aria-labelledby={titleId}
|
|
230
|
+
aria-describedby={textId}
|
|
231
|
+
>
|
|
232
|
+
<div className="flex items-baseline gap-2">
|
|
233
|
+
<h2 id={titleId} className="min-w-0 flex-1 text-lg font-medium">
|
|
234
|
+
{step.title}
|
|
235
|
+
</h2>
|
|
236
|
+
<span className="shrink-0 text-sm text-[var(--color-text-secondary)]">
|
|
237
|
+
{CUBE_TOUR_LABEL.progress(position, tour.steps.length)}
|
|
238
|
+
</span>
|
|
239
|
+
</div>
|
|
240
|
+
<p id={textId} className="text-base leading-snug">
|
|
241
|
+
{step.text}
|
|
242
|
+
{tour.openedExample && tour.index === 0 && (
|
|
243
|
+
<> {CUBE_TOUR_LABEL.EXAMPLE_OPENED}</>
|
|
244
|
+
)}
|
|
245
|
+
</p>
|
|
246
|
+
<div className="flex items-center gap-2">
|
|
247
|
+
{!isLast && (
|
|
248
|
+
<button
|
|
249
|
+
type="button"
|
|
250
|
+
className="text-sm text-[var(--color-text-secondary)] underline hover:text-[var(--color-text-primary)]"
|
|
251
|
+
onClick={() => tour.close()}
|
|
252
|
+
>
|
|
253
|
+
{CUBE_TOUR_LABEL.END}
|
|
254
|
+
</button>
|
|
255
|
+
)}
|
|
256
|
+
<span className="flex-1" />
|
|
257
|
+
{position > 1 && (
|
|
258
|
+
<CubeButton onClick={() => tour.move(-1, isShown)}>
|
|
259
|
+
{CUBE_TOUR_LABEL.BACK}
|
|
260
|
+
</CubeButton>
|
|
261
|
+
)}
|
|
262
|
+
<CubeButton
|
|
263
|
+
primary={true}
|
|
264
|
+
// the keyboard follows the tour: Enter moves on
|
|
265
|
+
autoFocus={true}
|
|
266
|
+
onClick={() => tour.move(1, isShown)}
|
|
267
|
+
>
|
|
268
|
+
{isLast ? CUBE_TOUR_LABEL.DONE : CUBE_TOUR_LABEL.NEXT}
|
|
269
|
+
</CubeButton>
|
|
270
|
+
</div>
|
|
271
|
+
</div>
|
|
272
|
+
);
|
|
273
|
+
return createPortal(
|
|
274
|
+
<div
|
|
275
|
+
className="legend-cube__tour-layer"
|
|
276
|
+
style={{ position: 'fixed', inset: 0, zIndex: CUBE_TOUR_Z_INDEX }}
|
|
277
|
+
// the page underneath takes no clicks, and shows no menu, meanwhile
|
|
278
|
+
onContextMenu={(event) => event.preventDefault()}
|
|
279
|
+
>
|
|
280
|
+
{spotlight ? (
|
|
281
|
+
<>
|
|
282
|
+
<div
|
|
283
|
+
aria-hidden={true}
|
|
284
|
+
style={{
|
|
285
|
+
position: 'fixed',
|
|
286
|
+
...spotlight,
|
|
287
|
+
borderRadius: 6,
|
|
288
|
+
boxShadow: `0 0 0 2px var(--color-accent), 0 0 0 9999px ${DIM}`,
|
|
289
|
+
pointerEvents: 'none',
|
|
290
|
+
}}
|
|
291
|
+
/>
|
|
292
|
+
<BasePopper
|
|
293
|
+
open={true}
|
|
294
|
+
role="presentation"
|
|
295
|
+
popperRef={popperRef}
|
|
296
|
+
anchorEl={virtualAnchor}
|
|
297
|
+
container={container}
|
|
298
|
+
placement={step.placement ?? 'bottom'}
|
|
299
|
+
modifiers={MODIFIERS}
|
|
300
|
+
style={{ zIndex: CUBE_TOUR_Z_INDEX + 1 }}
|
|
301
|
+
>
|
|
302
|
+
{card}
|
|
303
|
+
</BasePopper>
|
|
304
|
+
</>
|
|
305
|
+
) : (
|
|
306
|
+
<div
|
|
307
|
+
className="flex items-center justify-center"
|
|
308
|
+
style={{ position: 'fixed', inset: 0, background: DIM }}
|
|
309
|
+
>
|
|
310
|
+
{card}
|
|
311
|
+
</div>
|
|
312
|
+
)}
|
|
313
|
+
</div>,
|
|
314
|
+
container,
|
|
315
|
+
);
|
|
316
|
+
},
|
|
317
|
+
);
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import type { Schema } from '@finos/legend-cube';
|
|
18
|
+
import type { PlainObject } from '@finos/legend-shared';
|
|
18
19
|
import {
|
|
19
20
|
type CubeDataProductEnvironmentType,
|
|
20
21
|
type CubeDataProductProject,
|
|
@@ -243,3 +244,13 @@ export interface CubeDataProductCatalog {
|
|
|
243
244
|
signal?: AbortSignal,
|
|
244
245
|
): Promise<ReadonlyMap<string, CubeAccessPointGroupAccess>>;
|
|
245
246
|
}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Where a data product cube's engine reads the project its data products
|
|
250
|
+
* are in, as protocol JSON: by default the project at the version they were
|
|
251
|
+
* deployed from (a pointer); a host's own, e.g. Studio's workspace, whose
|
|
252
|
+
* data products aren't deployed. Fails with a `CubeEngineError`
|
|
253
|
+
*/
|
|
254
|
+
export interface CubeDataProductModelSource {
|
|
255
|
+
getProjectModel(project: CubeDataProductProject): Promise<PlainObject>;
|
|
256
|
+
}
|
|
@@ -84,10 +84,45 @@ export interface CubeOutlineRuntime {
|
|
|
84
84
|
readonly connections?: readonly CubeOutlineConnection[];
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
-
/**
|
|
87
|
+
/** A parameter of a function, as its signature declares it */
|
|
88
|
+
export interface CubeOutlineFunctionParameter {
|
|
89
|
+
readonly name: string;
|
|
90
|
+
/** Its type's path, as written, e.g. `Float` */
|
|
91
|
+
readonly type: string;
|
|
92
|
+
/** Its multiplicity, as written, e.g. `[1]`, `[0..1]` or `[*]` */
|
|
93
|
+
readonly multiplicity: string;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/** A column a function declares it returns, e.g. `ID:Integer` */
|
|
97
|
+
export interface CubeOutlineFunctionColumn {
|
|
98
|
+
readonly name: string;
|
|
99
|
+
readonly type: string;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** A function of a model that returns a relation (PLAN §6.5), as plain data */
|
|
103
|
+
export interface CubeOutlineFunction {
|
|
104
|
+
/** The path the lambda calls it by, e.g. `sales::ordersAbove` */
|
|
105
|
+
readonly path: string;
|
|
106
|
+
/** The engine's full name, e.g. `sales::ordersAbove_Float_1__Relation_1_` */
|
|
107
|
+
readonly signature: string;
|
|
108
|
+
readonly parameters: readonly CubeOutlineFunctionParameter[];
|
|
109
|
+
readonly columns: readonly CubeOutlineFunctionColumn[];
|
|
110
|
+
/**
|
|
111
|
+
* The runtime it reads through, as its body's `from()` names it, directly
|
|
112
|
+
* or through a function it calls; none when it leaves the runtime to its
|
|
113
|
+
* caller
|
|
114
|
+
*/
|
|
115
|
+
readonly runtime?: string | undefined;
|
|
116
|
+
/** Why it can't be added, e.g. a parameter Cube can't take a value for */
|
|
117
|
+
readonly problem?: string | undefined;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/** What a model offers the source picker: its databases, runtimes and functions, as plain data */
|
|
88
121
|
export interface CubeModelOutline {
|
|
89
122
|
readonly databases: readonly CubeOutlineDatabase[];
|
|
90
123
|
readonly runtimes: readonly CubeOutlineRuntime[];
|
|
124
|
+
/** Its functions that return a relation; optional, as an outline from before them has none */
|
|
125
|
+
readonly functions?: readonly CubeOutlineFunction[] | undefined;
|
|
91
126
|
}
|
|
92
127
|
|
|
93
128
|
export enum CubeEngineErrorKind {
|
|
@@ -192,8 +227,23 @@ export interface CubeEngine {
|
|
|
192
227
|
lambda: IR,
|
|
193
228
|
options?: { abortController?: AbortController | undefined },
|
|
194
229
|
): Promise<CubeResult>;
|
|
230
|
+
/**
|
|
231
|
+
* Runs an execution lambda and gives its rows as CSV text (PLAN §11.10):
|
|
232
|
+
* the engine's own, a header row first, every value as the engine writes
|
|
233
|
+
* it; rejects with a `CubeEngineError`
|
|
234
|
+
*/
|
|
235
|
+
exportCsv(
|
|
236
|
+
model: ModelContext,
|
|
237
|
+
lambda: IR,
|
|
238
|
+
options?: { abortController?: AbortController | undefined },
|
|
239
|
+
): Promise<string>;
|
|
195
240
|
/** The Pure text of a lambda, for display only: never parsed back */
|
|
196
241
|
renderPure(lambda: IR): Promise<string>;
|
|
242
|
+
/**
|
|
243
|
+
* A lambda as the engine receives it, pretty-printed, its numbers kept
|
|
244
|
+
* exact (PLAN §11.16): for a viewer to copy while debugging a run
|
|
245
|
+
*/
|
|
246
|
+
serializeLambda(lambda: IR): string;
|
|
197
247
|
/**
|
|
198
248
|
* An Extend column's expression as the engine's JSON (PLAN §11.7), located
|
|
199
249
|
* under the source id; rejects with a `CubeEngineError` placed in the text
|
|
@@ -0,0 +1,64 @@
|
|
|
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
|
+
/** What Dev Settings changes on an engine client: the engine server client's own setters */
|
|
18
|
+
export interface CubeEngineClientControls {
|
|
19
|
+
setBaseUrl(url: string | undefined): void;
|
|
20
|
+
setCompression(enabled: boolean): void;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* The settings every engine client of Cube shares (PLAN §11.16): the
|
|
25
|
+
* engine's URL and whether requests are compressed. The engine, the
|
|
26
|
+
* connection explorer and the catalogs each have their own client, built
|
|
27
|
+
* from the same configuration; each registers here, so Dev Settings changes
|
|
28
|
+
* them all at once. A change takes effect from the next request.
|
|
29
|
+
*/
|
|
30
|
+
export class CubeEngineClientSettings {
|
|
31
|
+
/** The URL the host configured, to go back to */
|
|
32
|
+
readonly defaultBaseUrl: string | undefined;
|
|
33
|
+
baseUrl: string | undefined;
|
|
34
|
+
requestCompression: boolean;
|
|
35
|
+
private readonly clients: CubeEngineClientControls[] = [];
|
|
36
|
+
|
|
37
|
+
constructor(config: {
|
|
38
|
+
readonly baseUrl?: string | undefined;
|
|
39
|
+
readonly enableCompression?: boolean | undefined;
|
|
40
|
+
}) {
|
|
41
|
+
this.defaultBaseUrl = config.baseUrl;
|
|
42
|
+
this.baseUrl = config.baseUrl;
|
|
43
|
+
this.requestCompression = Boolean(config.enableCompression);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** Adds a client built from the same configuration, given the settings changed since */
|
|
47
|
+
register(client: CubeEngineClientControls): void {
|
|
48
|
+
this.clients.push(client);
|
|
49
|
+
if (this.baseUrl !== this.defaultBaseUrl) {
|
|
50
|
+
client.setBaseUrl(this.baseUrl);
|
|
51
|
+
}
|
|
52
|
+
client.setCompression(this.requestCompression);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
setBaseUrl(url: string | undefined): void {
|
|
56
|
+
this.baseUrl = url;
|
|
57
|
+
this.clients.forEach((client) => client.setBaseUrl(url));
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
setRequestCompression(enabled: boolean): void {
|
|
61
|
+
this.requestCompression = enabled;
|
|
62
|
+
this.clients.forEach((client) => client.setCompression(enabled));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -118,6 +118,21 @@ export interface CubeIngestUrn {
|
|
|
118
118
|
readonly definition: string;
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
+
/** The URN's environment segment of each class */
|
|
122
|
+
const URN_ENVIRONMENTS: Readonly<
|
|
123
|
+
Record<CubeDataProductEnvironmentType, string>
|
|
124
|
+
> = {
|
|
125
|
+
[CubeDataProductEnvironmentType.PRODUCTION]: 'prod',
|
|
126
|
+
[CubeDataProductEnvironmentType.PRODUCTION_PARALLEL]: 'prod-parallel',
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* The URN of a definition deployed from SDLC, as `parseCubeIngestUrn` reads
|
|
131
|
+
* it: for a host naming definitions of its own, e.g. Studio's workspace
|
|
132
|
+
*/
|
|
133
|
+
export const formatCubeIngestUrn = (urn: CubeIngestUrn): string =>
|
|
134
|
+
`urn:lakehouse:${URN_ENVIRONMENTS[urn.environmentType]}:ingest:definition:alloy-git:${urn.groupId}~${urn.artifactId}~${urn.definition}`;
|
|
135
|
+
|
|
121
136
|
const SDLC_DEPLOYED_URN =
|
|
122
137
|
/^urn:lakehouse:(?<environment>[^:]+):ingest:definition:alloy-git:(?<groupId>[^~]+)~(?<artifactId>[^~]+)~(?<definition>.+)$/u;
|
|
123
138
|
|