@sqlrooms/mosaic 0.29.0-rc.3 → 0.29.0-rc.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +90 -1
- package/dist/MosaicChartBuilder.d.ts +0 -4
- package/dist/MosaicChartBuilder.d.ts.map +1 -1
- package/dist/MosaicChartBuilder.js +0 -6
- package/dist/MosaicChartBuilder.js.map +1 -1
- package/dist/MosaicSlice.d.ts +17 -10
- package/dist/MosaicSlice.d.ts.map +1 -1
- package/dist/MosaicSlice.js +4 -1
- package/dist/MosaicSlice.js.map +1 -1
- package/dist/boxplot/BoxPlotClient.d.ts +58 -0
- package/dist/boxplot/BoxPlotClient.d.ts.map +1 -0
- package/dist/boxplot/BoxPlotClient.js +264 -0
- package/dist/boxplot/BoxPlotClient.js.map +1 -0
- package/dist/chart/MosaicDashboardChart.d.ts +14 -0
- package/dist/chart/MosaicDashboardChart.d.ts.map +1 -0
- package/dist/chart/MosaicDashboardChart.js +21 -0
- package/dist/chart/MosaicDashboardChart.js.map +1 -0
- package/dist/chart/MosaicDashboardChartContent.d.ts +16 -0
- package/dist/chart/MosaicDashboardChartContent.d.ts.map +1 -0
- package/dist/chart/MosaicDashboardChartContent.js +18 -0
- package/dist/chart/MosaicDashboardChartContent.js.map +1 -0
- package/dist/chart/MosaicDashboardChartHeaderActions.d.ts +4 -0
- package/dist/chart/MosaicDashboardChartHeaderActions.d.ts.map +1 -0
- package/dist/chart/MosaicDashboardChartHeaderActions.js +16 -0
- package/dist/chart/MosaicDashboardChartHeaderActions.js.map +1 -0
- package/dist/chart/MosaicDashboardChartRenderer.d.ts +3 -0
- package/dist/chart/MosaicDashboardChartRenderer.d.ts.map +1 -0
- package/dist/chart/MosaicDashboardChartRenderer.js +31 -0
- package/dist/chart/MosaicDashboardChartRenderer.js.map +1 -0
- package/dist/chart/MosaicDashboardComponentChart.d.ts +14 -0
- package/dist/chart/MosaicDashboardComponentChart.d.ts.map +1 -0
- package/dist/chart/MosaicDashboardComponentChart.js +11 -0
- package/dist/chart/MosaicDashboardComponentChart.js.map +1 -0
- package/dist/chart/MosaicDashboardVgPlotChart.d.ts +10 -0
- package/dist/chart/MosaicDashboardVgPlotChart.d.ts.map +1 -0
- package/dist/chart/MosaicDashboardVgPlotChart.js +10 -0
- package/dist/chart/MosaicDashboardVgPlotChart.js.map +1 -0
- package/dist/chart/MosaicDashboardVgPlotError.d.ts +8 -0
- package/dist/chart/MosaicDashboardVgPlotError.d.ts.map +1 -0
- package/dist/chart/MosaicDashboardVgPlotError.js +11 -0
- package/dist/chart/MosaicDashboardVgPlotError.js.map +1 -0
- package/dist/{dashboard → chart}/chart-settings/ChartSettings.d.ts +12 -7
- package/dist/chart/chart-settings/ChartSettings.d.ts.map +1 -0
- package/dist/chart/chart-settings/ChartSettings.js +71 -0
- package/dist/chart/chart-settings/ChartSettings.js.map +1 -0
- package/dist/chart/chart-settings/ChartSettingsContent.d.ts +13 -0
- package/dist/chart/chart-settings/ChartSettingsContent.d.ts.map +1 -0
- package/dist/chart/chart-settings/ChartSettingsContent.js +18 -0
- package/dist/chart/chart-settings/ChartSettingsContent.js.map +1 -0
- package/dist/chart/chart-settings/ChartSettingsContext.d.ts +27 -0
- package/dist/chart/chart-settings/ChartSettingsContext.d.ts.map +1 -0
- package/dist/chart/chart-settings/ChartSettingsContext.js +35 -0
- package/dist/chart/chart-settings/ChartSettingsContext.js.map +1 -0
- package/dist/chart/chart-settings/ChartSettingsPanel.d.ts +14 -0
- package/dist/chart/chart-settings/ChartSettingsPanel.d.ts.map +1 -0
- package/dist/chart/chart-settings/ChartSettingsPanel.js +17 -0
- package/dist/chart/chart-settings/ChartSettingsPanel.js.map +1 -0
- package/dist/chart/chart-settings/ChartSpecViewerPanel.d.ts +9 -0
- package/dist/chart/chart-settings/ChartSpecViewerPanel.d.ts.map +1 -0
- package/dist/chart/chart-settings/ChartSpecViewerPanel.js +11 -0
- package/dist/chart/chart-settings/ChartSpecViewerPanel.js.map +1 -0
- package/dist/chart/chart-settings/ChartTypeSelector.d.ts +9 -0
- package/dist/chart/chart-settings/ChartTypeSelector.d.ts.map +1 -0
- package/dist/chart/chart-settings/ChartTypeSelector.js +16 -0
- package/dist/chart/chart-settings/ChartTypeSelector.js.map +1 -0
- package/dist/chart/chart-settings/useTableColumns.d.ts.map +1 -0
- package/dist/{dashboard → chart}/chart-settings/useTableColumns.js +1 -1
- package/dist/chart/chart-settings/useTableColumns.js.map +1 -0
- package/dist/chart/useBrushSelectionParams.d.ts +3 -0
- package/dist/chart/useBrushSelectionParams.d.ts.map +1 -0
- package/dist/chart/useBrushSelectionParams.js +16 -0
- package/dist/chart/useBrushSelectionParams.js.map +1 -0
- package/dist/chart/useChartRetainer.d.ts +3 -0
- package/dist/chart/useChartRetainer.d.ts.map +1 -0
- package/dist/chart/useChartRetainer.js +11 -0
- package/dist/chart/useChartRetainer.js.map +1 -0
- package/dist/chart/useGenerateSpec.d.ts +13 -0
- package/dist/chart/useGenerateSpec.d.ts.map +1 -0
- package/dist/chart/useGenerateSpec.js +32 -0
- package/dist/chart/useGenerateSpec.js.map +1 -0
- package/dist/chart-builders/AggregationSelector.d.ts +11 -0
- package/dist/chart-builders/AggregationSelector.d.ts.map +1 -0
- package/dist/chart-builders/AggregationSelector.js +9 -0
- package/dist/chart-builders/AggregationSelector.js.map +1 -0
- package/dist/chart-builders/ChartBuilderActions.d.ts +2 -2
- package/dist/chart-builders/ChartBuilderActions.d.ts.map +1 -1
- package/dist/chart-builders/ChartBuilderActions.js +24 -16
- package/dist/chart-builders/ChartBuilderActions.js.map +1 -1
- package/dist/chart-builders/ChartBuilderContent.d.ts +4 -6
- package/dist/chart-builders/ChartBuilderContent.d.ts.map +1 -1
- package/dist/chart-builders/ChartBuilderContent.js.map +1 -1
- package/dist/chart-builders/ChartBuilderContext.d.ts +5 -6
- package/dist/chart-builders/ChartBuilderContext.d.ts.map +1 -1
- package/dist/chart-builders/ChartBuilderContext.js.map +1 -1
- package/dist/chart-builders/ChartBuilderDialog.d.ts +7 -10
- package/dist/chart-builders/ChartBuilderDialog.d.ts.map +1 -1
- package/dist/chart-builders/ChartBuilderDialog.js +1 -1
- package/dist/chart-builders/ChartBuilderDialog.js.map +1 -1
- package/dist/chart-builders/ChartBuilderFields.d.ts +2 -2
- package/dist/chart-builders/ChartBuilderFields.d.ts.map +1 -1
- package/dist/chart-builders/ChartBuilderFields.js +28 -14
- package/dist/chart-builders/ChartBuilderFields.js.map +1 -1
- package/dist/chart-builders/ChartBuilderRoot.d.ts +4 -6
- package/dist/chart-builders/ChartBuilderRoot.d.ts.map +1 -1
- package/dist/chart-builders/ChartBuilderRoot.js +9 -28
- package/dist/chart-builders/ChartBuilderRoot.js.map +1 -1
- package/dist/chart-builders/ColumnSelector.d.ts +15 -0
- package/dist/chart-builders/ColumnSelector.d.ts.map +1 -0
- package/dist/chart-builders/ColumnSelector.js +31 -0
- package/dist/chart-builders/ColumnSelector.js.map +1 -0
- package/dist/chart-builders/Field.d.ts +11 -0
- package/dist/chart-builders/Field.d.ts.map +1 -0
- package/dist/chart-builders/Field.js +9 -0
- package/dist/chart-builders/Field.js.map +1 -0
- package/dist/chart-builders/FieldSelectorInput.d.ts +2 -1
- package/dist/chart-builders/FieldSelectorInput.d.ts.map +1 -1
- package/dist/chart-builders/FieldSelectorInput.js +5 -5
- package/dist/chart-builders/FieldSelectorInput.js.map +1 -1
- package/dist/chart-builders/MultiFieldSelector.d.ts +14 -0
- package/dist/chart-builders/MultiFieldSelector.d.ts.map +1 -0
- package/dist/chart-builders/MultiFieldSelector.js +53 -0
- package/dist/chart-builders/MultiFieldSelector.js.map +1 -0
- package/dist/chart-builders/TemporalGranularitySelector.d.ts +10 -0
- package/dist/chart-builders/TemporalGranularitySelector.d.ts.map +1 -0
- package/dist/chart-builders/TemporalGranularitySelector.js +37 -0
- package/dist/chart-builders/TemporalGranularitySelector.js.map +1 -0
- package/dist/chart-builders/chartSpecTitle.d.ts +1 -1
- package/dist/chart-builders/chartSpecTitle.d.ts.map +1 -1
- package/dist/chart-builders/chartSpecTitle.js.map +1 -1
- package/dist/chart-builders/chartTypeUtils.d.ts +5 -9
- package/dist/chart-builders/chartTypeUtils.d.ts.map +1 -1
- package/dist/chart-builders/chartTypeUtils.js +24 -32
- package/dist/chart-builders/chartTypeUtils.js.map +1 -1
- package/dist/chart-builders/constants.d.ts +5 -0
- package/dist/chart-builders/constants.d.ts.map +1 -1
- package/dist/chart-builders/constants.js +13 -0
- package/dist/chart-builders/constants.js.map +1 -1
- package/dist/chart-builders/createChartBuilderStore.d.ts +5 -5
- package/dist/chart-builders/createChartBuilderStore.d.ts.map +1 -1
- package/dist/chart-builders/createChartBuilderStore.js.map +1 -1
- package/dist/chart-types/base-types.d.ts +112 -18
- package/dist/chart-types/base-types.d.ts.map +1 -1
- package/dist/chart-types/base-types.js +6 -1
- package/dist/chart-types/base-types.js.map +1 -1
- package/dist/chart-types/box-plot/BoxPlotSettings.d.ts +3 -0
- package/dist/chart-types/box-plot/BoxPlotSettings.d.ts.map +1 -0
- package/dist/chart-types/box-plot/BoxPlotSettings.js +9 -0
- package/dist/chart-types/box-plot/BoxPlotSettings.js.map +1 -0
- package/dist/chart-types/box-plot/definition.d.ts +3 -3
- package/dist/chart-types/box-plot/definition.d.ts.map +1 -1
- package/dist/chart-types/box-plot/definition.js +10 -36
- package/dist/chart-types/box-plot/definition.js.map +1 -1
- package/dist/chart-types/box-plot/renderer/BoxPlotErrorBoundary.d.ts +18 -0
- package/dist/chart-types/box-plot/renderer/BoxPlotErrorBoundary.d.ts.map +1 -0
- package/dist/chart-types/box-plot/renderer/BoxPlotErrorBoundary.js +28 -0
- package/dist/chart-types/box-plot/renderer/BoxPlotErrorBoundary.js.map +1 -0
- package/dist/chart-types/box-plot/renderer/BoxPlotPanelRenderer.d.ts +9 -0
- package/dist/chart-types/box-plot/renderer/BoxPlotPanelRenderer.d.ts.map +1 -0
- package/dist/chart-types/box-plot/renderer/BoxPlotPanelRenderer.js +115 -0
- package/dist/chart-types/box-plot/renderer/BoxPlotPanelRenderer.js.map +1 -0
- package/dist/chart-types/box-plot/renderer/constants.d.ts +24 -0
- package/dist/chart-types/box-plot/renderer/constants.d.ts.map +1 -0
- package/dist/chart-types/box-plot/renderer/constants.js +17 -0
- package/dist/chart-types/box-plot/renderer/constants.js.map +1 -0
- package/dist/chart-types/box-plot/renderer/plot.d.ts +14 -0
- package/dist/chart-types/box-plot/renderer/plot.d.ts.map +1 -0
- package/dist/chart-types/box-plot/renderer/plot.js +91 -0
- package/dist/chart-types/box-plot/renderer/plot.js.map +1 -0
- package/dist/chart-types/box-plot/renderer/useBoxPlotClient.d.ts +14 -0
- package/dist/chart-types/box-plot/renderer/useBoxPlotClient.d.ts.map +1 -0
- package/dist/chart-types/box-plot/renderer/useBoxPlotClient.js +45 -0
- package/dist/chart-types/box-plot/renderer/useBoxPlotClient.js.map +1 -0
- package/dist/chart-types/box-plot/renderer/utils.d.ts +6 -0
- package/dist/chart-types/box-plot/renderer/utils.d.ts.map +1 -0
- package/dist/chart-types/box-plot/renderer/utils.js +34 -0
- package/dist/chart-types/box-plot/renderer/utils.js.map +1 -0
- package/dist/chart-types/box-plot/schema.d.ts +4 -5
- package/dist/chart-types/box-plot/schema.d.ts.map +1 -1
- package/dist/chart-types/box-plot/schema.js +2 -3
- package/dist/chart-types/box-plot/schema.js.map +1 -1
- package/dist/chart-types/box-plot/tool.d.ts +44 -0
- package/dist/chart-types/box-plot/tool.d.ts.map +1 -0
- package/dist/chart-types/box-plot/tool.js +59 -0
- package/dist/chart-types/box-plot/tool.js.map +1 -0
- package/dist/chart-types/bubble-chart/BubbleChartSettings.d.ts +3 -0
- package/dist/chart-types/bubble-chart/BubbleChartSettings.d.ts.map +1 -0
- package/dist/chart-types/bubble-chart/BubbleChartSettings.js +9 -0
- package/dist/chart-types/bubble-chart/BubbleChartSettings.js.map +1 -0
- package/dist/chart-types/bubble-chart/definition.d.ts +3 -3
- package/dist/chart-types/bubble-chart/definition.d.ts.map +1 -1
- package/dist/chart-types/bubble-chart/definition.js +10 -39
- package/dist/chart-types/bubble-chart/definition.js.map +1 -1
- package/dist/chart-types/bubble-chart/schema.d.ts +2 -1
- package/dist/chart-types/bubble-chart/schema.d.ts.map +1 -1
- package/dist/chart-types/bubble-chart/schema.js +6 -3
- package/dist/chart-types/bubble-chart/schema.js.map +1 -1
- package/dist/chart-types/bubble-chart/spec.d.ts +4 -0
- package/dist/chart-types/bubble-chart/spec.d.ts.map +1 -0
- package/dist/chart-types/bubble-chart/spec.js +31 -0
- package/dist/chart-types/bubble-chart/spec.js.map +1 -0
- package/dist/chart-types/bubble-chart/tool.d.ts +46 -0
- package/dist/chart-types/bubble-chart/tool.d.ts.map +1 -0
- package/dist/chart-types/bubble-chart/tool.js +58 -0
- package/dist/chart-types/bubble-chart/tool.js.map +1 -0
- package/dist/chart-types/chart-config.d.ts +92 -0
- package/dist/chart-types/chart-config.d.ts.map +1 -0
- package/dist/chart-types/chart-config.js +47 -0
- package/dist/chart-types/chart-config.js.map +1 -0
- package/dist/chart-types/count-plot/CountPlotSettings.d.ts +3 -0
- package/dist/chart-types/count-plot/CountPlotSettings.d.ts.map +1 -0
- package/dist/chart-types/count-plot/CountPlotSettings.js +9 -0
- package/dist/chart-types/count-plot/CountPlotSettings.js.map +1 -0
- package/dist/chart-types/count-plot/definition.d.ts +3 -3
- package/dist/chart-types/count-plot/definition.d.ts.map +1 -1
- package/dist/chart-types/count-plot/definition.js +10 -41
- package/dist/chart-types/count-plot/definition.js.map +1 -1
- package/dist/chart-types/count-plot/schema.d.ts +0 -1
- package/dist/chart-types/count-plot/schema.d.ts.map +1 -1
- package/dist/chart-types/count-plot/schema.js +4 -2
- package/dist/chart-types/count-plot/schema.js.map +1 -1
- package/dist/chart-types/count-plot/spec.d.ts +4 -0
- package/dist/chart-types/count-plot/spec.d.ts.map +1 -0
- package/dist/chart-types/count-plot/spec.js +49 -0
- package/dist/chart-types/count-plot/spec.js.map +1 -0
- package/dist/chart-types/count-plot/tool.d.ts +42 -0
- package/dist/chart-types/count-plot/tool.d.ts.map +1 -0
- package/dist/chart-types/count-plot/tool.js +55 -0
- package/dist/chart-types/count-plot/tool.js.map +1 -0
- package/dist/chart-types/custom-spec/CustomSpecSettings.d.ts +7 -0
- package/dist/chart-types/custom-spec/CustomSpecSettings.d.ts.map +1 -0
- package/dist/chart-types/custom-spec/CustomSpecSettings.js +30 -0
- package/dist/chart-types/custom-spec/CustomSpecSettings.js.map +1 -0
- package/dist/chart-types/custom-spec/definition.d.ts +3 -3
- package/dist/chart-types/custom-spec/definition.d.ts.map +1 -1
- package/dist/chart-types/custom-spec/definition.js +8 -19
- package/dist/chart-types/custom-spec/definition.js.map +1 -1
- package/dist/chart-types/custom-spec/schema.d.ts +6 -3
- package/dist/chart-types/custom-spec/schema.d.ts.map +1 -1
- package/dist/chart-types/custom-spec/schema.js +3 -2
- package/dist/chart-types/custom-spec/schema.js.map +1 -1
- package/dist/chart-types/custom-spec/spec.d.ts +4 -0
- package/dist/chart-types/custom-spec/spec.d.ts.map +1 -0
- package/dist/chart-types/custom-spec/spec.js +24 -0
- package/dist/chart-types/custom-spec/spec.js.map +1 -0
- package/dist/chart-types/errors.d.ts +23 -0
- package/dist/chart-types/errors.d.ts.map +1 -0
- package/dist/chart-types/errors.js +26 -0
- package/dist/chart-types/errors.js.map +1 -0
- package/dist/chart-types/heatmap/HeatmapSettings.d.ts +3 -0
- package/dist/chart-types/heatmap/HeatmapSettings.d.ts.map +1 -0
- package/dist/chart-types/heatmap/HeatmapSettings.js +9 -0
- package/dist/chart-types/heatmap/HeatmapSettings.js.map +1 -0
- package/dist/chart-types/heatmap/definition.d.ts +3 -3
- package/dist/chart-types/heatmap/definition.d.ts.map +1 -1
- package/dist/chart-types/heatmap/definition.js +10 -40
- package/dist/chart-types/heatmap/definition.js.map +1 -1
- package/dist/chart-types/heatmap/schema.d.ts +0 -1
- package/dist/chart-types/heatmap/schema.d.ts.map +1 -1
- package/dist/chart-types/heatmap/schema.js +2 -3
- package/dist/chart-types/heatmap/schema.js.map +1 -1
- package/dist/chart-types/heatmap/spec.d.ts +4 -0
- package/dist/chart-types/heatmap/spec.d.ts.map +1 -0
- package/dist/chart-types/heatmap/spec.js +32 -0
- package/dist/chart-types/heatmap/spec.js.map +1 -0
- package/dist/chart-types/heatmap/tool.d.ts +44 -0
- package/dist/chart-types/heatmap/tool.d.ts.map +1 -0
- package/dist/chart-types/heatmap/tool.js +59 -0
- package/dist/chart-types/heatmap/tool.js.map +1 -0
- package/dist/chart-types/histogram/HistogramSettings.d.ts +3 -0
- package/dist/chart-types/histogram/HistogramSettings.d.ts.map +1 -0
- package/dist/chart-types/histogram/HistogramSettings.js +9 -0
- package/dist/chart-types/histogram/HistogramSettings.js.map +1 -0
- package/dist/chart-types/histogram/definition.d.ts +3 -3
- package/dist/chart-types/histogram/definition.d.ts.map +1 -1
- package/dist/chart-types/histogram/definition.js +10 -40
- package/dist/chart-types/histogram/definition.js.map +1 -1
- package/dist/chart-types/histogram/schema.d.ts +0 -1
- package/dist/chart-types/histogram/schema.d.ts.map +1 -1
- package/dist/chart-types/histogram/schema.js +4 -2
- package/dist/chart-types/histogram/schema.js.map +1 -1
- package/dist/chart-types/histogram/spec.d.ts +4 -0
- package/dist/chart-types/histogram/spec.d.ts.map +1 -0
- package/dist/chart-types/histogram/spec.js +36 -0
- package/dist/chart-types/histogram/spec.js.map +1 -0
- package/dist/chart-types/histogram/tool.d.ts +42 -0
- package/dist/chart-types/histogram/tool.d.ts.map +1 -0
- package/dist/chart-types/histogram/tool.js +55 -0
- package/dist/chart-types/histogram/tool.js.map +1 -0
- package/dist/chart-types/index.d.ts +102 -96
- package/dist/chart-types/index.d.ts.map +1 -1
- package/dist/chart-types/index.js +71 -41
- package/dist/chart-types/index.js.map +1 -1
- package/dist/chart-types/line-chart/LineChartSettings.d.ts +7 -0
- package/dist/chart-types/line-chart/LineChartSettings.d.ts.map +1 -0
- package/dist/chart-types/line-chart/LineChartSettings.js +22 -0
- package/dist/chart-types/line-chart/LineChartSettings.js.map +1 -0
- package/dist/chart-types/line-chart/definition.d.ts +3 -3
- package/dist/chart-types/line-chart/definition.d.ts.map +1 -1
- package/dist/chart-types/line-chart/definition.js +10 -37
- package/dist/chart-types/line-chart/definition.js.map +1 -1
- package/dist/chart-types/line-chart/schema.d.ts +69 -3
- package/dist/chart-types/line-chart/schema.d.ts.map +1 -1
- package/dist/chart-types/line-chart/schema.js +30 -3
- package/dist/chart-types/line-chart/schema.js.map +1 -1
- package/dist/chart-types/line-chart/spec.d.ts +4 -0
- package/dist/chart-types/line-chart/spec.d.ts.map +1 -0
- package/dist/chart-types/line-chart/spec.js +91 -0
- package/dist/chart-types/line-chart/spec.js.map +1 -0
- package/dist/chart-types/line-chart/tool.d.ts +68 -0
- package/dist/chart-types/line-chart/tool.d.ts.map +1 -0
- package/dist/chart-types/line-chart/tool.js +66 -0
- package/dist/chart-types/line-chart/tool.js.map +1 -0
- package/dist/chart-types/tool-schemas.d.ts +8 -0
- package/dist/chart-types/tool-schemas.d.ts.map +1 -0
- package/dist/chart-types/tool-schemas.js +18 -0
- package/dist/chart-types/tool-schemas.js.map +1 -0
- package/dist/chart-types/tool-types.d.ts +26 -0
- package/dist/chart-types/tool-types.d.ts.map +1 -0
- package/dist/chart-types/tool-types.js +2 -0
- package/dist/chart-types/tool-types.js.map +1 -0
- package/dist/chart-types/tool-validation.d.ts +3 -0
- package/dist/chart-types/tool-validation.d.ts.map +1 -0
- package/dist/chart-types/tool-validation.js +11 -0
- package/dist/chart-types/tool-validation.js.map +1 -0
- package/dist/chart-types/useChartTypeDefinition.d.ts +3 -0
- package/dist/chart-types/useChartTypeDefinition.d.ts.map +1 -0
- package/dist/chart-types/useChartTypeDefinition.js +8 -0
- package/dist/chart-types/useChartTypeDefinition.js.map +1 -0
- package/dist/dashboard/MosaicDashboard.d.ts.map +1 -1
- package/dist/dashboard/MosaicDashboard.js +7 -11
- package/dist/dashboard/MosaicDashboard.js.map +1 -1
- package/dist/dashboard/MosaicDashboardEmptyState.d.ts +2 -0
- package/dist/dashboard/MosaicDashboardEmptyState.d.ts.map +1 -0
- package/dist/dashboard/MosaicDashboardEmptyState.js +50 -0
- package/dist/dashboard/MosaicDashboardEmptyState.js.map +1 -0
- package/dist/dashboard/MosaicDashboardPanelLayout.d.ts.map +1 -1
- package/dist/dashboard/MosaicDashboardPanelLayout.js +23 -2
- package/dist/dashboard/MosaicDashboardPanelLayout.js.map +1 -1
- package/dist/dashboard/MosaicDashboardPanels.d.ts.map +1 -1
- package/dist/dashboard/MosaicDashboardPanels.js +2 -1
- package/dist/dashboard/MosaicDashboardPanels.js.map +1 -1
- package/dist/dashboard/MosaicDashboardSlice.d.ts +212 -87
- package/dist/dashboard/MosaicDashboardSlice.d.ts.map +1 -1
- package/dist/dashboard/MosaicDashboardSlice.js +65 -18
- package/dist/dashboard/MosaicDashboardSlice.js.map +1 -1
- package/dist/dashboard/MosaicDashboardToolbar.d.ts.map +1 -1
- package/dist/dashboard/MosaicDashboardToolbar.js +9 -4
- package/dist/dashboard/MosaicDashboardToolbar.js.map +1 -1
- package/dist/dashboard/defaultPanelRenderers.d.ts.map +1 -1
- package/dist/dashboard/defaultPanelRenderers.js +6 -4
- package/dist/dashboard/defaultPanelRenderers.js.map +1 -1
- package/dist/dashboard/utils.d.ts +3 -0
- package/dist/dashboard/utils.d.ts.map +1 -0
- package/dist/dashboard/utils.js +16 -0
- package/dist/dashboard/utils.js.map +1 -0
- package/dist/index.d.ts +6 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -7
- package/dist/index.js.map +1 -1
- package/dist/{dashboard → profiler}/MosaicDashboardProfilerPanelRenderer.d.ts +1 -1
- package/dist/profiler/MosaicDashboardProfilerPanelRenderer.d.ts.map +1 -0
- package/dist/{dashboard → profiler}/MosaicDashboardProfilerPanelRenderer.js +2 -2
- package/dist/profiler/MosaicDashboardProfilerPanelRenderer.js.map +1 -0
- package/dist/text/MosaicDashboardTextRenderer.d.ts +3 -0
- package/dist/text/MosaicDashboardTextRenderer.d.ts.map +1 -0
- package/dist/text/MosaicDashboardTextRenderer.js +46 -0
- package/dist/text/MosaicDashboardTextRenderer.js.map +1 -0
- package/package.json +38 -35
- package/dist/chart-builders/builders.d.ts +0 -34
- package/dist/chart-builders/builders.d.ts.map +0 -1
- package/dist/chart-builders/builders.js +0 -51
- package/dist/chart-builders/builders.js.map +0 -1
- package/dist/chart-builders/describeChartSpecs.d.ts +0 -9
- package/dist/chart-builders/describeChartSpecs.d.ts.map +0 -1
- package/dist/chart-builders/describeChartSpecs.js +0 -41
- package/dist/chart-builders/describeChartSpecs.js.map +0 -1
- package/dist/chart-builders/hooks/useChartFieldForm.d.ts +0 -13
- package/dist/chart-builders/hooks/useChartFieldForm.d.ts.map +0 -1
- package/dist/chart-builders/hooks/useChartFieldForm.js +0 -12
- package/dist/chart-builders/hooks/useChartFieldForm.js.map +0 -1
- package/dist/chart-builders/types.d.ts +0 -23
- package/dist/chart-builders/types.d.ts.map +0 -1
- package/dist/chart-builders/types.js +0 -17
- package/dist/chart-builders/types.js.map +0 -1
- package/dist/chart-types/box-plot/index.d.ts +0 -3
- package/dist/chart-types/box-plot/index.d.ts.map +0 -1
- package/dist/chart-types/box-plot/index.js +0 -3
- package/dist/chart-types/box-plot/index.js.map +0 -1
- package/dist/chart-types/bubble-chart/index.d.ts +0 -3
- package/dist/chart-types/bubble-chart/index.d.ts.map +0 -1
- package/dist/chart-types/bubble-chart/index.js +0 -3
- package/dist/chart-types/bubble-chart/index.js.map +0 -1
- package/dist/chart-types/count-plot/index.d.ts +0 -3
- package/dist/chart-types/count-plot/index.d.ts.map +0 -1
- package/dist/chart-types/count-plot/index.js +0 -3
- package/dist/chart-types/count-plot/index.js.map +0 -1
- package/dist/chart-types/custom-spec/index.d.ts +0 -3
- package/dist/chart-types/custom-spec/index.d.ts.map +0 -1
- package/dist/chart-types/custom-spec/index.js +0 -3
- package/dist/chart-types/custom-spec/index.js.map +0 -1
- package/dist/chart-types/ecdf/definition.d.ts +0 -4
- package/dist/chart-types/ecdf/definition.d.ts.map +0 -1
- package/dist/chart-types/ecdf/definition.js +0 -47
- package/dist/chart-types/ecdf/definition.js.map +0 -1
- package/dist/chart-types/ecdf/index.d.ts +0 -3
- package/dist/chart-types/ecdf/index.d.ts.map +0 -1
- package/dist/chart-types/ecdf/index.js +0 -3
- package/dist/chart-types/ecdf/index.js.map +0 -1
- package/dist/chart-types/ecdf/schema.d.ts +0 -15
- package/dist/chart-types/ecdf/schema.d.ts.map +0 -1
- package/dist/chart-types/ecdf/schema.js +0 -11
- package/dist/chart-types/ecdf/schema.js.map +0 -1
- package/dist/chart-types/heatmap/index.d.ts +0 -3
- package/dist/chart-types/heatmap/index.d.ts.map +0 -1
- package/dist/chart-types/heatmap/index.js +0 -3
- package/dist/chart-types/heatmap/index.js.map +0 -1
- package/dist/chart-types/histogram/index.d.ts +0 -3
- package/dist/chart-types/histogram/index.d.ts.map +0 -1
- package/dist/chart-types/histogram/index.js +0 -3
- package/dist/chart-types/histogram/index.js.map +0 -1
- package/dist/chart-types/line-chart/index.d.ts +0 -3
- package/dist/chart-types/line-chart/index.d.ts.map +0 -1
- package/dist/chart-types/line-chart/index.js +0 -3
- package/dist/chart-types/line-chart/index.js.map +0 -1
- package/dist/chart-types/registry.d.ts +0 -5
- package/dist/chart-types/registry.d.ts.map +0 -1
- package/dist/chart-types/registry.js +0 -28
- package/dist/chart-types/registry.js.map +0 -1
- package/dist/dashboard/MosaicDashboardProfilerPanelRenderer.d.ts.map +0 -1
- package/dist/dashboard/MosaicDashboardProfilerPanelRenderer.js.map +0 -1
- package/dist/dashboard/MosaicDashboardVgPlotHeaderActions.d.ts +0 -4
- package/dist/dashboard/MosaicDashboardVgPlotHeaderActions.d.ts.map +0 -1
- package/dist/dashboard/MosaicDashboardVgPlotHeaderActions.js +0 -29
- package/dist/dashboard/MosaicDashboardVgPlotHeaderActions.js.map +0 -1
- package/dist/dashboard/MosaicDashboardVgPlotPanelRenderer.d.ts +0 -3
- package/dist/dashboard/MosaicDashboardVgPlotPanelRenderer.d.ts.map +0 -1
- package/dist/dashboard/MosaicDashboardVgPlotPanelRenderer.js +0 -68
- package/dist/dashboard/MosaicDashboardVgPlotPanelRenderer.js.map +0 -1
- package/dist/dashboard/VgPlotSpecPopoverEditor.d.ts +0 -8
- package/dist/dashboard/VgPlotSpecPopoverEditor.d.ts.map +0 -1
- package/dist/dashboard/VgPlotSpecPopoverEditor.js +0 -40
- package/dist/dashboard/VgPlotSpecPopoverEditor.js.map +0 -1
- package/dist/dashboard/chart-settings/ChartSettings.d.ts.map +0 -1
- package/dist/dashboard/chart-settings/ChartSettings.js +0 -90
- package/dist/dashboard/chart-settings/ChartSettings.js.map +0 -1
- package/dist/dashboard/chart-settings/ChartSettingsContext.d.ts +0 -20
- package/dist/dashboard/chart-settings/ChartSettingsContext.d.ts.map +0 -1
- package/dist/dashboard/chart-settings/ChartSettingsContext.js +0 -14
- package/dist/dashboard/chart-settings/ChartSettingsContext.js.map +0 -1
- package/dist/dashboard/chart-settings/ChartSettingsPanel.d.ts +0 -11
- package/dist/dashboard/chart-settings/ChartSettingsPanel.d.ts.map +0 -1
- package/dist/dashboard/chart-settings/ChartSettingsPanel.js +0 -8
- package/dist/dashboard/chart-settings/ChartSettingsPanel.js.map +0 -1
- package/dist/dashboard/chart-settings/ChartTypeSelector.d.ts +0 -11
- package/dist/dashboard/chart-settings/ChartTypeSelector.d.ts.map +0 -1
- package/dist/dashboard/chart-settings/ChartTypeSelector.js +0 -17
- package/dist/dashboard/chart-settings/ChartTypeSelector.js.map +0 -1
- package/dist/dashboard/chart-settings/DynamicChartSettings.d.ts +0 -11
- package/dist/dashboard/chart-settings/DynamicChartSettings.d.ts.map +0 -1
- package/dist/dashboard/chart-settings/DynamicChartSettings.js +0 -19
- package/dist/dashboard/chart-settings/DynamicChartSettings.js.map +0 -1
- package/dist/dashboard/chart-settings/index.d.ts +0 -6
- package/dist/dashboard/chart-settings/index.d.ts.map +0 -1
- package/dist/dashboard/chart-settings/index.js +0 -6
- package/dist/dashboard/chart-settings/index.js.map +0 -1
- package/dist/dashboard/chart-settings/useTableColumns.d.ts.map +0 -1
- package/dist/dashboard/chart-settings/useTableColumns.js.map +0 -1
- package/dist/dashboard/generateMosaicChartSpec.d.ts +0 -15
- package/dist/dashboard/generateMosaicChartSpec.d.ts.map +0 -1
- package/dist/dashboard/generateMosaicChartSpec.js +0 -30
- package/dist/dashboard/generateMosaicChartSpec.js.map +0 -1
- /package/dist/{dashboard → chart}/chart-settings/useTableColumns.d.ts +0 -0
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import { MosaicClient, clauseInterval, } from '@uwdata/mosaic-core';
|
|
2
|
+
function quoteIdentifier(identifier) {
|
|
3
|
+
return `"${identifier.replace(/"/g, '""')}"`;
|
|
4
|
+
}
|
|
5
|
+
function quoteTableReference(tableName) {
|
|
6
|
+
return tableName.split('.').map(quoteIdentifier).join('.');
|
|
7
|
+
}
|
|
8
|
+
function normalizeFilter(filter) {
|
|
9
|
+
if (!filter) {
|
|
10
|
+
return [];
|
|
11
|
+
}
|
|
12
|
+
const filters = Array.isArray(filter) ? filter.flat(Infinity) : [filter];
|
|
13
|
+
return filters
|
|
14
|
+
.map((expr) => {
|
|
15
|
+
if (typeof expr === 'boolean') {
|
|
16
|
+
return expr ? null : 'FALSE';
|
|
17
|
+
}
|
|
18
|
+
return `(${expr.toString()})`;
|
|
19
|
+
})
|
|
20
|
+
.filter((expr) => Boolean(expr));
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Type guard to check if data has a toArray method.
|
|
24
|
+
*/
|
|
25
|
+
function hasToArrayMethod(data) {
|
|
26
|
+
return (data !== null &&
|
|
27
|
+
data !== undefined &&
|
|
28
|
+
typeof data === 'object' &&
|
|
29
|
+
'toArray' in data &&
|
|
30
|
+
typeof data.toArray === 'function');
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Safely extract rows from query result data.
|
|
34
|
+
* Handles both direct arrays and objects with toArray() method.
|
|
35
|
+
* Returns empty array if data is invalid or doesn't have expected structure.
|
|
36
|
+
*/
|
|
37
|
+
function rowsFromQueryResult(data) {
|
|
38
|
+
// Handle direct arrays
|
|
39
|
+
if (Array.isArray(data)) {
|
|
40
|
+
return data;
|
|
41
|
+
}
|
|
42
|
+
// Handle objects with toArray() method (Arrow Tables, Mosaic results, etc.)
|
|
43
|
+
if (!hasToArrayMethod(data)) {
|
|
44
|
+
return [];
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
const result = data.toArray();
|
|
48
|
+
// Validate that toArray() returned an array
|
|
49
|
+
if (!Array.isArray(result)) {
|
|
50
|
+
console.warn('BoxPlotClient: toArray() did not return an array', typeof result);
|
|
51
|
+
return [];
|
|
52
|
+
}
|
|
53
|
+
return result;
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
console.error('BoxPlotClient: Error calling toArray():', error);
|
|
57
|
+
return [];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function numericValue(value) {
|
|
61
|
+
const numeric = Number(value);
|
|
62
|
+
return Number.isFinite(numeric) ? numeric : undefined;
|
|
63
|
+
}
|
|
64
|
+
export function buildBoxPlotQuery(args) {
|
|
65
|
+
const table = quoteTableReference(args.tableName);
|
|
66
|
+
const x = quoteIdentifier(args.x);
|
|
67
|
+
const y = quoteIdentifier(args.y);
|
|
68
|
+
const filters = normalizeFilter(args.filter).join(' AND ');
|
|
69
|
+
const where = [`${y} IS NOT NULL`, filters].filter(Boolean).join(' AND ');
|
|
70
|
+
return `
|
|
71
|
+
WITH base AS (
|
|
72
|
+
SELECT
|
|
73
|
+
${x} AS "category",
|
|
74
|
+
TRY_CAST(${y} AS DOUBLE) AS "value"
|
|
75
|
+
FROM ${table}
|
|
76
|
+
WHERE ${where}
|
|
77
|
+
),
|
|
78
|
+
stats AS (
|
|
79
|
+
SELECT
|
|
80
|
+
"category",
|
|
81
|
+
COUNT(*)::DOUBLE AS "count",
|
|
82
|
+
quantile_cont("value", 0.25) AS "q1",
|
|
83
|
+
quantile_cont("value", 0.5) AS "median",
|
|
84
|
+
quantile_cont("value", 0.75) AS "q3"
|
|
85
|
+
FROM base
|
|
86
|
+
WHERE "value" IS NOT NULL
|
|
87
|
+
GROUP BY "category"
|
|
88
|
+
),
|
|
89
|
+
fences AS (
|
|
90
|
+
SELECT
|
|
91
|
+
*,
|
|
92
|
+
"q1" - 1.5 * ("q3" - "q1") AS "lowerFence",
|
|
93
|
+
"q3" + 1.5 * ("q3" - "q1") AS "upperFence"
|
|
94
|
+
FROM stats
|
|
95
|
+
),
|
|
96
|
+
whiskers AS (
|
|
97
|
+
SELECT
|
|
98
|
+
b."category",
|
|
99
|
+
MIN(b."value") AS "whiskerLow",
|
|
100
|
+
MAX(b."value") AS "whiskerHigh"
|
|
101
|
+
FROM base b
|
|
102
|
+
JOIN fences f ON b."category" IS NOT DISTINCT FROM f."category"
|
|
103
|
+
WHERE b."value" BETWEEN f."lowerFence" AND f."upperFence"
|
|
104
|
+
GROUP BY b."category"
|
|
105
|
+
),
|
|
106
|
+
summary AS (
|
|
107
|
+
SELECT
|
|
108
|
+
'summary' AS "rowKind",
|
|
109
|
+
f."category",
|
|
110
|
+
f."count",
|
|
111
|
+
f."q1",
|
|
112
|
+
f."median",
|
|
113
|
+
f."q3",
|
|
114
|
+
f."lowerFence",
|
|
115
|
+
f."upperFence",
|
|
116
|
+
w."whiskerLow",
|
|
117
|
+
w."whiskerHigh",
|
|
118
|
+
NULL::DOUBLE AS "value"
|
|
119
|
+
FROM fences f
|
|
120
|
+
JOIN whiskers w ON w."category" IS NOT DISTINCT FROM f."category"
|
|
121
|
+
),
|
|
122
|
+
outliers AS (
|
|
123
|
+
SELECT
|
|
124
|
+
'outlier' AS "rowKind",
|
|
125
|
+
b."category",
|
|
126
|
+
NULL::DOUBLE AS "count",
|
|
127
|
+
NULL::DOUBLE AS "q1",
|
|
128
|
+
NULL::DOUBLE AS "median",
|
|
129
|
+
NULL::DOUBLE AS "q3",
|
|
130
|
+
NULL::DOUBLE AS "lowerFence",
|
|
131
|
+
NULL::DOUBLE AS "upperFence",
|
|
132
|
+
NULL::DOUBLE AS "whiskerLow",
|
|
133
|
+
NULL::DOUBLE AS "whiskerHigh",
|
|
134
|
+
b."value"
|
|
135
|
+
FROM base b
|
|
136
|
+
JOIN fences f ON b."category" IS NOT DISTINCT FROM f."category"
|
|
137
|
+
WHERE b."value" < f."lowerFence" OR b."value" > f."upperFence"
|
|
138
|
+
)
|
|
139
|
+
SELECT * FROM summary
|
|
140
|
+
UNION ALL
|
|
141
|
+
SELECT * FROM outliers
|
|
142
|
+
ORDER BY "category", "rowKind", "value"
|
|
143
|
+
`.trim();
|
|
144
|
+
}
|
|
145
|
+
export class BoxPlotClient extends MosaicClient {
|
|
146
|
+
onStateChange;
|
|
147
|
+
tableName;
|
|
148
|
+
x;
|
|
149
|
+
y;
|
|
150
|
+
selection;
|
|
151
|
+
state = {
|
|
152
|
+
isLoading: true,
|
|
153
|
+
outliers: [],
|
|
154
|
+
summaries: [],
|
|
155
|
+
};
|
|
156
|
+
destroyed = false;
|
|
157
|
+
constructor(options) {
|
|
158
|
+
super(options.selection);
|
|
159
|
+
this.onStateChange = options.onStateChange;
|
|
160
|
+
this.tableName = options.tableName;
|
|
161
|
+
this.x = options.x;
|
|
162
|
+
this.y = options.y;
|
|
163
|
+
this.selection = options.selection;
|
|
164
|
+
}
|
|
165
|
+
get filterStable() {
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
fields() {
|
|
169
|
+
return [this.x, this.y];
|
|
170
|
+
}
|
|
171
|
+
emitState(next) {
|
|
172
|
+
if (this.destroyed) {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
this.state = { ...this.state, ...next };
|
|
176
|
+
this.onStateChange(this.state);
|
|
177
|
+
}
|
|
178
|
+
queryPending() {
|
|
179
|
+
this.emitState({ error: undefined, isLoading: true });
|
|
180
|
+
return this;
|
|
181
|
+
}
|
|
182
|
+
query(filter) {
|
|
183
|
+
return buildBoxPlotQuery({
|
|
184
|
+
filter,
|
|
185
|
+
tableName: this.tableName,
|
|
186
|
+
x: this.x,
|
|
187
|
+
y: this.y,
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
queryResult(data) {
|
|
191
|
+
const rows = rowsFromQueryResult(data);
|
|
192
|
+
const summaries = [];
|
|
193
|
+
const outliers = [];
|
|
194
|
+
for (const row of rows) {
|
|
195
|
+
if (row.rowKind === 'summary') {
|
|
196
|
+
const count = numericValue(row.count);
|
|
197
|
+
const q1 = numericValue(row.q1);
|
|
198
|
+
const median = numericValue(row.median);
|
|
199
|
+
const q3 = numericValue(row.q3);
|
|
200
|
+
const lowerFence = numericValue(row.lowerFence);
|
|
201
|
+
const upperFence = numericValue(row.upperFence);
|
|
202
|
+
const whiskerLow = numericValue(row.whiskerLow);
|
|
203
|
+
const whiskerHigh = numericValue(row.whiskerHigh);
|
|
204
|
+
if (count === undefined ||
|
|
205
|
+
q1 === undefined ||
|
|
206
|
+
median === undefined ||
|
|
207
|
+
q3 === undefined ||
|
|
208
|
+
lowerFence === undefined ||
|
|
209
|
+
upperFence === undefined ||
|
|
210
|
+
whiskerLow === undefined ||
|
|
211
|
+
whiskerHigh === undefined) {
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
summaries.push({
|
|
215
|
+
category: row.category,
|
|
216
|
+
count,
|
|
217
|
+
lowerFence,
|
|
218
|
+
median,
|
|
219
|
+
q1,
|
|
220
|
+
q3,
|
|
221
|
+
upperFence,
|
|
222
|
+
whiskerHigh,
|
|
223
|
+
whiskerLow,
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
else if (row.rowKind === 'outlier') {
|
|
227
|
+
const value = numericValue(row.value);
|
|
228
|
+
if (value !== undefined) {
|
|
229
|
+
outliers.push({
|
|
230
|
+
category: row.category,
|
|
231
|
+
value,
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
this.emitState({
|
|
237
|
+
error: undefined,
|
|
238
|
+
isLoading: false,
|
|
239
|
+
outliers,
|
|
240
|
+
summaries,
|
|
241
|
+
});
|
|
242
|
+
return this;
|
|
243
|
+
}
|
|
244
|
+
queryError(error) {
|
|
245
|
+
this.emitState({ error, isLoading: false });
|
|
246
|
+
return this;
|
|
247
|
+
}
|
|
248
|
+
updateYBrush(extent) {
|
|
249
|
+
const normalized = extent
|
|
250
|
+
? [Math.min(...extent), Math.max(...extent)]
|
|
251
|
+
: undefined;
|
|
252
|
+
this.emitState({ yBrush: normalized });
|
|
253
|
+
const clause = clauseInterval(this.y, normalized ?? null, { source: this });
|
|
254
|
+
this.selection.update(clause);
|
|
255
|
+
}
|
|
256
|
+
reset() {
|
|
257
|
+
this.updateYBrush();
|
|
258
|
+
}
|
|
259
|
+
destroy() {
|
|
260
|
+
this.destroyed = true;
|
|
261
|
+
super.destroy();
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
//# sourceMappingURL=BoxPlotClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BoxPlotClient.js","sourceRoot":"","sources":["../../src/boxplot/BoxPlotClient.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n MosaicClient,\n clauseInterval,\n type Selection,\n} from '@uwdata/mosaic-core';\nimport type {ExprNode, FilterExpr} from '@uwdata/mosaic-sql';\n\nexport type BoxPlotSummaryRow = {\n category: unknown;\n count: number;\n lowerFence: number;\n median: number;\n q1: number;\n q3: number;\n upperFence: number;\n whiskerHigh: number;\n whiskerLow: number;\n};\n\nexport type BoxPlotOutlierRow = {\n category: unknown;\n value: number;\n};\n\nexport type BoxPlotState = {\n error?: Error;\n isLoading: boolean;\n outliers: BoxPlotOutlierRow[];\n summaries: BoxPlotSummaryRow[];\n yBrush?: [number, number];\n};\n\nexport type BoxPlotClientOptions = {\n onStateChange: (state: BoxPlotState) => void;\n selection: Selection;\n tableName: string;\n x: string;\n y: string;\n};\n\ntype BoxPlotQueryRow = Partial<BoxPlotSummaryRow & BoxPlotOutlierRow> & {\n rowKind?: 'summary' | 'outlier';\n};\n\nfunction quoteIdentifier(identifier: string): string {\n return `\"${identifier.replace(/\"/g, '\"\"')}\"`;\n}\n\nfunction quoteTableReference(tableName: string): string {\n return tableName.split('.').map(quoteIdentifier).join('.');\n}\n\nfunction normalizeFilter(filter?: FilterExpr | null): string[] {\n if (!filter) {\n return [];\n }\n const filters = Array.isArray(filter) ? filter.flat(Infinity) : [filter];\n return filters\n .map((expr) => {\n if (typeof expr === 'boolean') {\n return expr ? null : 'FALSE';\n }\n return `(${(expr as string | ExprNode).toString()})`;\n })\n .filter((expr): expr is string => Boolean(expr));\n}\n\n/**\n * Type guard to check if data has a toArray method.\n */\nfunction hasToArrayMethod(data: unknown): data is {toArray: () => unknown} {\n return (\n data !== null &&\n data !== undefined &&\n typeof data === 'object' &&\n 'toArray' in data &&\n typeof (data as Record<string, unknown>).toArray === 'function'\n );\n}\n\n/**\n * Safely extract rows from query result data.\n * Handles both direct arrays and objects with toArray() method.\n * Returns empty array if data is invalid or doesn't have expected structure.\n */\nfunction rowsFromQueryResult<T>(data: unknown): T[] {\n // Handle direct arrays\n if (Array.isArray(data)) {\n return data as T[];\n }\n\n // Handle objects with toArray() method (Arrow Tables, Mosaic results, etc.)\n if (!hasToArrayMethod(data)) {\n return [];\n }\n\n try {\n const result = data.toArray();\n\n // Validate that toArray() returned an array\n if (!Array.isArray(result)) {\n console.warn(\n 'BoxPlotClient: toArray() did not return an array',\n typeof result,\n );\n return [];\n }\n\n return result as T[];\n } catch (error) {\n console.error('BoxPlotClient: Error calling toArray():', error);\n return [];\n }\n}\n\nfunction numericValue(value: unknown): number | undefined {\n const numeric = Number(value);\n return Number.isFinite(numeric) ? numeric : undefined;\n}\n\nexport function buildBoxPlotQuery(args: {\n filter?: FilterExpr | null;\n tableName: string;\n x: string;\n y: string;\n}): string {\n const table = quoteTableReference(args.tableName);\n const x = quoteIdentifier(args.x);\n const y = quoteIdentifier(args.y);\n const filters = normalizeFilter(args.filter).join(' AND ');\n const where = [`${y} IS NOT NULL`, filters].filter(Boolean).join(' AND ');\n\n return `\nWITH base AS (\n SELECT\n ${x} AS \"category\",\n TRY_CAST(${y} AS DOUBLE) AS \"value\"\n FROM ${table}\n WHERE ${where}\n),\nstats AS (\n SELECT\n \"category\",\n COUNT(*)::DOUBLE AS \"count\",\n quantile_cont(\"value\", 0.25) AS \"q1\",\n quantile_cont(\"value\", 0.5) AS \"median\",\n quantile_cont(\"value\", 0.75) AS \"q3\"\n FROM base\n WHERE \"value\" IS NOT NULL\n GROUP BY \"category\"\n),\nfences AS (\n SELECT\n *,\n \"q1\" - 1.5 * (\"q3\" - \"q1\") AS \"lowerFence\",\n \"q3\" + 1.5 * (\"q3\" - \"q1\") AS \"upperFence\"\n FROM stats\n),\nwhiskers AS (\n SELECT\n b.\"category\",\n MIN(b.\"value\") AS \"whiskerLow\",\n MAX(b.\"value\") AS \"whiskerHigh\"\n FROM base b\n JOIN fences f ON b.\"category\" IS NOT DISTINCT FROM f.\"category\"\n WHERE b.\"value\" BETWEEN f.\"lowerFence\" AND f.\"upperFence\"\n GROUP BY b.\"category\"\n),\nsummary AS (\n SELECT\n 'summary' AS \"rowKind\",\n f.\"category\",\n f.\"count\",\n f.\"q1\",\n f.\"median\",\n f.\"q3\",\n f.\"lowerFence\",\n f.\"upperFence\",\n w.\"whiskerLow\",\n w.\"whiskerHigh\",\n NULL::DOUBLE AS \"value\"\n FROM fences f\n JOIN whiskers w ON w.\"category\" IS NOT DISTINCT FROM f.\"category\"\n),\noutliers AS (\n SELECT\n 'outlier' AS \"rowKind\",\n b.\"category\",\n NULL::DOUBLE AS \"count\",\n NULL::DOUBLE AS \"q1\",\n NULL::DOUBLE AS \"median\",\n NULL::DOUBLE AS \"q3\",\n NULL::DOUBLE AS \"lowerFence\",\n NULL::DOUBLE AS \"upperFence\",\n NULL::DOUBLE AS \"whiskerLow\",\n NULL::DOUBLE AS \"whiskerHigh\",\n b.\"value\"\n FROM base b\n JOIN fences f ON b.\"category\" IS NOT DISTINCT FROM f.\"category\"\n WHERE b.\"value\" < f.\"lowerFence\" OR b.\"value\" > f.\"upperFence\"\n)\nSELECT * FROM summary\nUNION ALL\nSELECT * FROM outliers\nORDER BY \"category\", \"rowKind\", \"value\"\n`.trim();\n}\n\nexport class BoxPlotClient extends MosaicClient {\n private readonly onStateChange: (state: BoxPlotState) => void;\n private readonly tableName: string;\n private readonly x: string;\n private readonly y: string;\n private readonly selection: Selection;\n private state: BoxPlotState = {\n isLoading: true,\n outliers: [],\n summaries: [],\n };\n private destroyed = false;\n\n constructor(options: BoxPlotClientOptions) {\n super(options.selection);\n this.onStateChange = options.onStateChange;\n this.tableName = options.tableName;\n this.x = options.x;\n this.y = options.y;\n this.selection = options.selection;\n }\n\n override get filterStable(): boolean {\n return false;\n }\n\n fields(): string[] {\n return [this.x, this.y];\n }\n\n private emitState(next: Partial<BoxPlotState>) {\n if (this.destroyed) {\n return;\n }\n this.state = {...this.state, ...next};\n this.onStateChange(this.state);\n }\n\n override queryPending(): this {\n this.emitState({error: undefined, isLoading: true});\n return this;\n }\n\n override query(filter?: FilterExpr | null): string {\n return buildBoxPlotQuery({\n filter,\n tableName: this.tableName,\n x: this.x,\n y: this.y,\n });\n }\n\n override queryResult(data: unknown): this {\n const rows = rowsFromQueryResult<BoxPlotQueryRow>(data);\n const summaries: BoxPlotSummaryRow[] = [];\n const outliers: BoxPlotOutlierRow[] = [];\n\n for (const row of rows) {\n if (row.rowKind === 'summary') {\n const count = numericValue(row.count);\n const q1 = numericValue(row.q1);\n const median = numericValue(row.median);\n const q3 = numericValue(row.q3);\n const lowerFence = numericValue(row.lowerFence);\n const upperFence = numericValue(row.upperFence);\n const whiskerLow = numericValue(row.whiskerLow);\n const whiskerHigh = numericValue(row.whiskerHigh);\n if (\n count === undefined ||\n q1 === undefined ||\n median === undefined ||\n q3 === undefined ||\n lowerFence === undefined ||\n upperFence === undefined ||\n whiskerLow === undefined ||\n whiskerHigh === undefined\n ) {\n continue;\n }\n summaries.push({\n category: row.category,\n count,\n lowerFence,\n median,\n q1,\n q3,\n upperFence,\n whiskerHigh,\n whiskerLow,\n });\n } else if (row.rowKind === 'outlier') {\n const value = numericValue(row.value);\n if (value !== undefined) {\n outliers.push({\n category: row.category,\n value,\n });\n }\n }\n }\n\n this.emitState({\n error: undefined,\n isLoading: false,\n outliers,\n summaries,\n });\n return this;\n }\n\n override queryError(error: Error): this {\n this.emitState({error, isLoading: false});\n return this;\n }\n\n updateYBrush(extent?: [number, number]) {\n const normalized = extent\n ? ([Math.min(...extent), Math.max(...extent)] as [number, number])\n : undefined;\n this.emitState({yBrush: normalized});\n const clause = clauseInterval(this.y, normalized ?? null, {source: this});\n this.selection.update(clause);\n }\n\n reset() {\n this.updateYBrush();\n }\n\n override destroy() {\n this.destroyed = true;\n super.destroy();\n }\n}\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type FC } from 'react';
|
|
2
|
+
import { type ChartPanelConfig } from '../dashboard/MosaicDashboardSlice';
|
|
3
|
+
import { MosaicReadyConnection } from '../MosaicSlice';
|
|
4
|
+
import { ChartTypeDefinition } from '../chart-types/base-types';
|
|
5
|
+
export type MosaicDashboardChartProps = {
|
|
6
|
+
dashboardId: string;
|
|
7
|
+
chartTypeDef: ChartTypeDefinition;
|
|
8
|
+
tableName: string;
|
|
9
|
+
connection: MosaicReadyConnection;
|
|
10
|
+
selectionName: string;
|
|
11
|
+
panel: ChartPanelConfig;
|
|
12
|
+
};
|
|
13
|
+
export declare const MosaicDashboardChart: FC<MosaicDashboardChartProps>;
|
|
14
|
+
//# sourceMappingURL=MosaicDashboardChart.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MosaicDashboardChart.d.ts","sourceRoot":"","sources":["../../src/chart/MosaicDashboardChart.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,EAAc,MAAM,OAAO,CAAC;AAG3C,OAAO,EACL,KAAK,gBAAgB,EAEtB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAC,qBAAqB,EAAC,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAC,mBAAmB,EAAC,MAAM,2BAA2B,CAAC;AAG9D,MAAM,MAAM,yBAAyB,GAAG;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,mBAAmB,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,qBAAqB,CAAC;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,gBAAgB,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC,yBAAyB,CA2D9D,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback } from 'react';
|
|
3
|
+
import { ChartSettingsContent } from './chart-settings/ChartSettingsContent';
|
|
4
|
+
import { MosaicDashboardPanelLayout } from '../dashboard/MosaicDashboardPanelLayout';
|
|
5
|
+
import { useStoreWithMosaicDashboard, } from '../dashboard/MosaicDashboardSlice';
|
|
6
|
+
import { useGenerateSpec } from './useGenerateSpec';
|
|
7
|
+
import { MosaicDashboardChartContent } from './MosaicDashboardChartContent';
|
|
8
|
+
export const MosaicDashboardChart = ({ chartTypeDef, tableName, connection, dashboardId, selectionName, panel, }) => {
|
|
9
|
+
const updatePanel = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.updatePanel);
|
|
10
|
+
const isSettingsOpen = panel.config.settingsOpen;
|
|
11
|
+
const handleOpenChange = useCallback((isOpen) => {
|
|
12
|
+
updatePanel(dashboardId, panel.id, {
|
|
13
|
+
config: { ...panel.config, settingsOpen: isOpen },
|
|
14
|
+
});
|
|
15
|
+
}, [dashboardId, panel.config, panel.id, updatePanel]);
|
|
16
|
+
const spec = useGenerateSpec(tableName, panel.config.settings, chartTypeDef);
|
|
17
|
+
const settingsContent = (_jsx(ChartSettingsContent, { dashboardId: dashboardId, panel: panel, spec: spec.spec, tableName: tableName, onClose: () => handleOpenChange(false) }));
|
|
18
|
+
const chartContent = (_jsx("div", { className: "h-full overflow-auto p-2", children: _jsx(MosaicDashboardChartContent, { dashboardId: dashboardId, panel: panel, selectionName: selectionName, chartTypeDefinition: chartTypeDef, tableName: tableName, connection: connection, spec: spec }) }));
|
|
19
|
+
return (_jsx("div", { className: "h-full min-h-0", children: _jsx(MosaicDashboardPanelLayout, { isOpen: isSettingsOpen, onIsOpenChange: handleOpenChange, settings: settingsContent, content: chartContent }) }));
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=MosaicDashboardChart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MosaicDashboardChart.js","sourceRoot":"","sources":["../../src/chart/MosaicDashboardChart.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAU,WAAW,EAAC,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAC,oBAAoB,EAAC,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAC,0BAA0B,EAAC,MAAM,yCAAyC,CAAC;AACnF,OAAO,EAEL,2BAA2B,GAC5B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAGlD,OAAO,EAAC,2BAA2B,EAAC,MAAM,+BAA+B,CAAC;AAW1E,MAAM,CAAC,MAAM,oBAAoB,GAAkC,CAAC,EAClE,YAAY,EACZ,SAAS,EACT,UAAU,EACV,WAAW,EACX,aAAa,EACb,KAAK,GACN,EAAE,EAAE;IACH,MAAM,WAAW,GAAG,2BAA2B,CAC7C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,CAC7C,CAAC;IAEF,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC;IAEjD,MAAM,gBAAgB,GAAG,WAAW,CAClC,CAAC,MAAe,EAAE,EAAE;QAClB,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE;YACjC,MAAM,EAAE,EAAC,GAAG,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAC;SAChD,CAAC,CAAC;IACL,CAAC,EACD,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CACnD,CAAC;IAEF,MAAM,IAAI,GAAG,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAE7E,MAAM,eAAe,GAAG,CACtB,KAAC,oBAAoB,IACnB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,GACtC,CACH,CAAC;IAEF,MAAM,YAAY,GAAG,CACnB,cAAK,SAAS,EAAC,0BAA0B,YACvC,KAAC,2BAA2B,IAC1B,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE,aAAa,EAC5B,mBAAmB,EAAE,YAAY,EACjC,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAAI,GACV,GACE,CACP,CAAC;IAEF,OAAO,CACL,cAAK,SAAS,EAAC,gBAAgB,YAC7B,KAAC,0BAA0B,IACzB,MAAM,EAAE,cAAc,EACtB,cAAc,EAAE,gBAAgB,EAChC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,YAAY,GACrB,GACE,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {type FC, useCallback} from 'react';\nimport {ChartSettingsContent} from './chart-settings/ChartSettingsContent';\nimport {MosaicDashboardPanelLayout} from '../dashboard/MosaicDashboardPanelLayout';\nimport {\n type ChartPanelConfig,\n useStoreWithMosaicDashboard,\n} from '../dashboard/MosaicDashboardSlice';\nimport {useGenerateSpec} from './useGenerateSpec';\nimport {MosaicReadyConnection} from '../MosaicSlice';\nimport {ChartTypeDefinition} from '../chart-types/base-types';\nimport {MosaicDashboardChartContent} from './MosaicDashboardChartContent';\n\nexport type MosaicDashboardChartProps = {\n dashboardId: string;\n chartTypeDef: ChartTypeDefinition;\n tableName: string;\n connection: MosaicReadyConnection;\n selectionName: string;\n panel: ChartPanelConfig;\n};\n\nexport const MosaicDashboardChart: FC<MosaicDashboardChartProps> = ({\n chartTypeDef,\n tableName,\n connection,\n dashboardId,\n selectionName,\n panel,\n}) => {\n const updatePanel = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.updatePanel,\n );\n\n const isSettingsOpen = panel.config.settingsOpen;\n\n const handleOpenChange = useCallback(\n (isOpen: boolean) => {\n updatePanel(dashboardId, panel.id, {\n config: {...panel.config, settingsOpen: isOpen},\n });\n },\n [dashboardId, panel.config, panel.id, updatePanel],\n );\n\n const spec = useGenerateSpec(tableName, panel.config.settings, chartTypeDef);\n\n const settingsContent = (\n <ChartSettingsContent\n dashboardId={dashboardId}\n panel={panel}\n spec={spec.spec}\n tableName={tableName}\n onClose={() => handleOpenChange(false)}\n />\n );\n\n const chartContent = (\n <div className=\"h-full overflow-auto p-2\">\n <MosaicDashboardChartContent\n dashboardId={dashboardId}\n panel={panel}\n selectionName={selectionName}\n chartTypeDefinition={chartTypeDef}\n tableName={tableName}\n connection={connection}\n spec={spec}\n />\n </div>\n );\n\n return (\n <div className=\"h-full min-h-0\">\n <MosaicDashboardPanelLayout\n isOpen={isSettingsOpen}\n onIsOpenChange={handleOpenChange}\n settings={settingsContent}\n content={chartContent}\n />\n </div>\n );\n};\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type FC } from 'react';
|
|
2
|
+
import { ChartTypeDefinition } from '../chart-types/base-types';
|
|
3
|
+
import { UseGenerateSpecResult } from './useGenerateSpec';
|
|
4
|
+
import { MosaicReadyConnection } from '../MosaicSlice';
|
|
5
|
+
import { ChartPanelConfig } from '../dashboard/MosaicDashboardSlice';
|
|
6
|
+
export type MosaicDashboardChartContentProps = {
|
|
7
|
+
chartTypeDefinition: ChartTypeDefinition;
|
|
8
|
+
tableName: string;
|
|
9
|
+
connection: MosaicReadyConnection;
|
|
10
|
+
spec: UseGenerateSpecResult;
|
|
11
|
+
selectionName: string;
|
|
12
|
+
panel: ChartPanelConfig;
|
|
13
|
+
dashboardId: string;
|
|
14
|
+
};
|
|
15
|
+
export declare const MosaicDashboardChartContent: FC<MosaicDashboardChartContentProps>;
|
|
16
|
+
//# sourceMappingURL=MosaicDashboardChartContent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MosaicDashboardChartContent.d.ts","sourceRoot":"","sources":["../../src/chart/MosaicDashboardChartContent.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,EAAC,MAAM,OAAO,CAAC;AAC9B,OAAO,EACL,mBAAmB,EAGpB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAC,qBAAqB,EAAC,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAC,qBAAqB,EAAC,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAC,gBAAgB,EAAC,MAAM,mCAAmC,CAAC;AAInE,MAAM,MAAM,gCAAgC,GAAG;IAC7C,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,qBAAqB,CAAC;IAClC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,gBAAgB,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,EAAE,CAC1C,gCAAgC,CAqCjC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { isComponentChartType, isSpecChartType, } from '../chart-types/base-types';
|
|
3
|
+
import { MosaicDashboardVgPlotChart } from './MosaicDashboardVgPlotChart';
|
|
4
|
+
import { MosaicDashboardComponentChart } from './MosaicDashboardComponentChart';
|
|
5
|
+
import { useChartRetainer } from './useChartRetainer';
|
|
6
|
+
import { useBrushSelectionParams } from './useBrushSelectionParams';
|
|
7
|
+
export const MosaicDashboardChartContent = ({ selectionName, panel, dashboardId, chartTypeDefinition, tableName, connection, spec, }) => {
|
|
8
|
+
const retention = useChartRetainer(dashboardId, panel.id);
|
|
9
|
+
const params = useBrushSelectionParams(selectionName);
|
|
10
|
+
if (isSpecChartType(chartTypeDefinition)) {
|
|
11
|
+
return (_jsx(MosaicDashboardVgPlotChart, { spec: spec, retention: retention, params: params }));
|
|
12
|
+
}
|
|
13
|
+
if (isComponentChartType(chartTypeDefinition)) {
|
|
14
|
+
return (_jsx(MosaicDashboardComponentChart, { tableName: tableName, panel: panel, chartTypeDefinition: chartTypeDefinition, connection: connection, retention: retention, params: params }));
|
|
15
|
+
}
|
|
16
|
+
throw new Error('Unsupported chart type definition');
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=MosaicDashboardChartContent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MosaicDashboardChartContent.js","sourceRoot":"","sources":["../../src/chart/MosaicDashboardChartContent.tsx"],"names":[],"mappings":";AACA,OAAO,EAEL,oBAAoB,EACpB,eAAe,GAChB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAC,0BAA0B,EAAC,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAC,6BAA6B,EAAC,MAAM,iCAAiC,CAAC;AAI9E,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAC,uBAAuB,EAAC,MAAM,2BAA2B,CAAC;AAYlE,MAAM,CAAC,MAAM,2BAA2B,GAEpC,CAAC,EACH,aAAa,EACb,KAAK,EACL,WAAW,EACX,mBAAmB,EACnB,SAAS,EACT,UAAU,EACV,IAAI,GACL,EAAE,EAAE;IACH,MAAM,SAAS,GAAG,gBAAgB,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,uBAAuB,CAAC,aAAa,CAAC,CAAC;IAEtD,IAAI,eAAe,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACzC,OAAO,CACL,KAAC,0BAA0B,IACzB,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,GACd,CACH,CAAC;IACJ,CAAC;IAED,IAAI,oBAAoB,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC9C,OAAO,CACL,KAAC,6BAA6B,IAC5B,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EACZ,mBAAmB,EAAE,mBAAmB,EACxC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,GACd,CACH,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;AACvD,CAAC,CAAC","sourcesContent":["import {type FC} from 'react';\nimport {\n ChartTypeDefinition,\n isComponentChartType,\n isSpecChartType,\n} from '../chart-types/base-types';\nimport {MosaicDashboardVgPlotChart} from './MosaicDashboardVgPlotChart';\nimport {MosaicDashboardComponentChart} from './MosaicDashboardComponentChart';\nimport {UseGenerateSpecResult} from './useGenerateSpec';\nimport {MosaicReadyConnection} from '../MosaicSlice';\nimport {ChartPanelConfig} from '../dashboard/MosaicDashboardSlice';\nimport {useChartRetainer} from './useChartRetainer';\nimport {useBrushSelectionParams} from './useBrushSelectionParams';\n\nexport type MosaicDashboardChartContentProps = {\n chartTypeDefinition: ChartTypeDefinition;\n tableName: string;\n connection: MosaicReadyConnection;\n spec: UseGenerateSpecResult;\n selectionName: string;\n panel: ChartPanelConfig;\n dashboardId: string;\n};\n\nexport const MosaicDashboardChartContent: FC<\n MosaicDashboardChartContentProps\n> = ({\n selectionName,\n panel,\n dashboardId,\n chartTypeDefinition,\n tableName,\n connection,\n spec,\n}) => {\n const retention = useChartRetainer(dashboardId, panel.id);\n const params = useBrushSelectionParams(selectionName);\n\n if (isSpecChartType(chartTypeDefinition)) {\n return (\n <MosaicDashboardVgPlotChart\n spec={spec}\n retention={retention}\n params={params}\n />\n );\n }\n\n if (isComponentChartType(chartTypeDefinition)) {\n return (\n <MosaicDashboardComponentChart\n tableName={tableName}\n panel={panel}\n chartTypeDefinition={chartTypeDefinition}\n connection={connection}\n retention={retention}\n params={params}\n />\n );\n }\n\n throw new Error('Unsupported chart type definition');\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MosaicDashboardChartHeaderActions.d.ts","sourceRoot":"","sources":["../../src/chart/MosaicDashboardChartHeaderActions.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAC,KAAK,EAAE,EAAc,MAAM,OAAO,CAAC;AAC3C,OAAO,EACL,KAAK,uBAAuB,EAE7B,MAAM,mCAAmC,CAAC;AAE3C,eAAO,MAAM,iCAAiC,EAAE,EAAE,CAAC,uBAAuB,CAmCzE,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Button, Tooltip, TooltipContent, TooltipTrigger } from '@sqlrooms/ui';
|
|
3
|
+
import { SettingsIcon } from 'lucide-react';
|
|
4
|
+
import { useCallback } from 'react';
|
|
5
|
+
import { useStoreWithMosaicDashboard, } from '../dashboard/MosaicDashboardSlice';
|
|
6
|
+
export const MosaicDashboardChartHeaderActions = ({ dashboardId, panel, }) => {
|
|
7
|
+
const updatePanel = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.updatePanel);
|
|
8
|
+
const isSettingsOpen = Boolean(panel.config.settingsOpen);
|
|
9
|
+
const handleToggleSettings = useCallback(() => {
|
|
10
|
+
updatePanel(dashboardId, panel.id, {
|
|
11
|
+
config: { ...panel.config, settingsOpen: !isSettingsOpen },
|
|
12
|
+
});
|
|
13
|
+
}, [dashboardId, isSettingsOpen, panel.config, panel.id, updatePanel]);
|
|
14
|
+
return (_jsx(_Fragment, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon", className: "data-[state=active]:bg-accent h-6 w-6", title: "Chart settings", onClick: handleToggleSettings, "data-state": isSettingsOpen ? 'active' : 'inactive', children: _jsx(SettingsIcon, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: "Chart settings" })] }) }));
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=MosaicDashboardChartHeaderActions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MosaicDashboardChartHeaderActions.js","sourceRoot":"","sources":["../../src/chart/MosaicDashboardChartHeaderActions.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAC,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAU,WAAW,EAAC,MAAM,OAAO,CAAC;AAC3C,OAAO,EAEL,2BAA2B,GAC5B,MAAM,mCAAmC,CAAC;AAE3C,MAAM,CAAC,MAAM,iCAAiC,GAAgC,CAAC,EAC7E,WAAW,EACX,KAAK,GACN,EAAE,EAAE;IACH,MAAM,WAAW,GAAG,2BAA2B,CAC7C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,CAC7C,CAAC;IAEF,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAE1D,MAAM,oBAAoB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5C,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE;YACjC,MAAM,EAAE,EAAC,GAAG,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,cAAc,EAAC;SACzD,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;IAEvE,OAAO,CACL,4BACE,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,uCAAuC,EACjD,KAAK,EAAC,gBAAgB,EACtB,OAAO,EAAE,oBAAoB,gBACjB,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,YAElD,KAAC,YAAY,IAAC,SAAS,EAAC,aAAa,GAAG,GACjC,GACM,EACjB,KAAC,cAAc,iCAAgC,IACvC,GACT,CACJ,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {Button, Tooltip, TooltipContent, TooltipTrigger} from '@sqlrooms/ui';\nimport {SettingsIcon} from 'lucide-react';\nimport {type FC, useCallback} from 'react';\nimport {\n type ChartPanelRendererProps,\n useStoreWithMosaicDashboard,\n} from '../dashboard/MosaicDashboardSlice';\n\nexport const MosaicDashboardChartHeaderActions: FC<ChartPanelRendererProps> = ({\n dashboardId,\n panel,\n}) => {\n const updatePanel = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.updatePanel,\n );\n\n const isSettingsOpen = Boolean(panel.config.settingsOpen);\n\n const handleToggleSettings = useCallback(() => {\n updatePanel(dashboardId, panel.id, {\n config: {...panel.config, settingsOpen: !isSettingsOpen},\n });\n }, [dashboardId, isSettingsOpen, panel.config, panel.id, updatePanel]);\n\n return (\n <>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"data-[state=active]:bg-accent h-6 w-6\"\n title=\"Chart settings\"\n onClick={handleToggleSettings}\n data-state={isSettingsOpen ? 'active' : 'inactive'}\n >\n <SettingsIcon className=\"h-3.5 w-3.5\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Chart settings</TooltipContent>\n </Tooltip>\n </>\n );\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MosaicDashboardChartRenderer.d.ts","sourceRoot":"","sources":["../../src/chart/MosaicDashboardChartRenderer.tsx"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,4BAA4B,EACjC,KAAK,gBAAgB,EAGtB,MAAM,mCAAmC,CAAC;AAwD3C,eAAO,MAAM,4BAA4B,EAAE,4BAA4B,CAAC,gBAAgB,CAKrF,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { SpinnerPane } from '@sqlrooms/ui';
|
|
3
|
+
import { BarChart3Icon } from 'lucide-react';
|
|
4
|
+
import { MosaicDashboardChartHeaderActions } from './MosaicDashboardChartHeaderActions';
|
|
5
|
+
import { useStoreWithMosaicDashboard, } from '../dashboard/MosaicDashboardSlice';
|
|
6
|
+
import { useChartTypeDefinition } from '../chart-types/useChartTypeDefinition';
|
|
7
|
+
import { MosaicDashboardChart } from './MosaicDashboardChart';
|
|
8
|
+
const MosaicDashboardChartRenderer = ({ panel, dashboardId, selectionName, }) => {
|
|
9
|
+
const connection = useStoreWithMosaicDashboard((state) => state.mosaic.connection);
|
|
10
|
+
const chartTypeDef = useChartTypeDefinition(panel.config.chartType);
|
|
11
|
+
const tableName = panel.source?.tableName;
|
|
12
|
+
if (!chartTypeDef) {
|
|
13
|
+
return (_jsxs("div", { className: "text-muted-foreground flex h-full items-center justify-center text-sm", children: ["Unknown chart type: ", panel.config.chartType] }));
|
|
14
|
+
}
|
|
15
|
+
if (!tableName) {
|
|
16
|
+
return (_jsx("div", { className: "text-muted-foreground flex h-full items-center justify-center text-sm", children: "Please select a data table first" }));
|
|
17
|
+
}
|
|
18
|
+
if (connection.status === 'loading' || connection.status === 'idle') {
|
|
19
|
+
return _jsx(SpinnerPane, { className: "h-full w-full" });
|
|
20
|
+
}
|
|
21
|
+
if (connection.status === 'error') {
|
|
22
|
+
return (_jsx("div", { className: "text-muted-foreground flex h-full items-center justify-center text-sm", children: "Mosaic connection failed" }));
|
|
23
|
+
}
|
|
24
|
+
return (_jsx(MosaicDashboardChart, { dashboardId: dashboardId, selectionName: selectionName, panel: panel, chartTypeDef: chartTypeDef, tableName: tableName, connection: connection }));
|
|
25
|
+
};
|
|
26
|
+
export const mosaicDashboardChartRenderer = {
|
|
27
|
+
component: MosaicDashboardChartRenderer,
|
|
28
|
+
headerActions: MosaicDashboardChartHeaderActions,
|
|
29
|
+
icon: BarChart3Icon,
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=MosaicDashboardChartRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MosaicDashboardChartRenderer.js","sourceRoot":"","sources":["../../src/chart/MosaicDashboardChartRenderer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;AACzC,OAAO,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAC,iCAAiC,EAAC,MAAM,qCAAqC,CAAC;AACtF,OAAO,EAIL,2BAA2B,GAC5B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAC,sBAAsB,EAAC,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAC,oBAAoB,EAAC,MAAM,wBAAwB,CAAC;AAE5D,MAAM,4BAA4B,GAAgC,CAAC,EACjE,KAAK,EACL,WAAW,EACX,aAAa,GACd,EAAE,EAAE;IACH,MAAM,UAAU,GAAG,2BAA2B,CAC5C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CACnC,CAAC;IAEF,MAAM,YAAY,GAAG,sBAAsB,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC;IAE1C,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,CACL,eAAK,SAAS,EAAC,uEAAuE,qCAC/D,KAAK,CAAC,MAAM,CAAC,SAAS,IACvC,CACP,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CACL,cAAK,SAAS,EAAC,uEAAuE,iDAEhF,CACP,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QACpE,OAAO,KAAC,WAAW,IAAC,SAAS,EAAC,eAAe,GAAG,CAAC;IACnD,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAClC,OAAO,CACL,cAAK,SAAS,EAAC,uEAAuE,yCAEhF,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,KAAC,oBAAoB,IACnB,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,GACtB,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GACvC;IACE,SAAS,EAAE,4BAA4B;IACvC,aAAa,EAAE,iCAAiC;IAChD,IAAI,EAAE,aAAa;CACpB,CAAC","sourcesContent":["import {SpinnerPane} from '@sqlrooms/ui';\nimport {BarChart3Icon} from 'lucide-react';\nimport {type FC} from 'react';\nimport {MosaicDashboardChartHeaderActions} from './MosaicDashboardChartHeaderActions';\nimport {\n type MosaicDashboardPanelRenderer,\n type ChartPanelConfig,\n type ChartPanelRendererProps,\n useStoreWithMosaicDashboard,\n} from '../dashboard/MosaicDashboardSlice';\nimport {useChartTypeDefinition} from '../chart-types/useChartTypeDefinition';\nimport {MosaicDashboardChart} from './MosaicDashboardChart';\n\nconst MosaicDashboardChartRenderer: FC<ChartPanelRendererProps> = ({\n panel,\n dashboardId,\n selectionName,\n}) => {\n const connection = useStoreWithMosaicDashboard(\n (state) => state.mosaic.connection,\n );\n\n const chartTypeDef = useChartTypeDefinition(panel.config.chartType);\n const tableName = panel.source?.tableName;\n\n if (!chartTypeDef) {\n return (\n <div className=\"text-muted-foreground flex h-full items-center justify-center text-sm\">\n Unknown chart type: {panel.config.chartType}\n </div>\n );\n }\n\n if (!tableName) {\n return (\n <div className=\"text-muted-foreground flex h-full items-center justify-center text-sm\">\n Please select a data table first\n </div>\n );\n }\n\n if (connection.status === 'loading' || connection.status === 'idle') {\n return <SpinnerPane className=\"h-full w-full\" />;\n }\n\n if (connection.status === 'error') {\n return (\n <div className=\"text-muted-foreground flex h-full items-center justify-center text-sm\">\n Mosaic connection failed\n </div>\n );\n }\n\n return (\n <MosaicDashboardChart\n dashboardId={dashboardId}\n selectionName={selectionName}\n panel={panel}\n chartTypeDef={chartTypeDef}\n tableName={tableName}\n connection={connection}\n />\n );\n};\n\nexport const mosaicDashboardChartRenderer: MosaicDashboardPanelRenderer<ChartPanelConfig> =\n {\n component: MosaicDashboardChartRenderer,\n headerActions: MosaicDashboardChartHeaderActions,\n icon: BarChart3Icon,\n };\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { ComponentChartTypeDefinition, ChartRetainer, BrushSelectionParams } from '../chart-types/base-types';
|
|
3
|
+
import { ChartPanelConfig } from '../dashboard/MosaicDashboardSlice';
|
|
4
|
+
import { MosaicReadyConnection } from '../MosaicSlice';
|
|
5
|
+
export type MosaicDashboardComponentChartProps = {
|
|
6
|
+
tableName: string;
|
|
7
|
+
panel: ChartPanelConfig;
|
|
8
|
+
chartTypeDefinition: ComponentChartTypeDefinition;
|
|
9
|
+
connection: MosaicReadyConnection;
|
|
10
|
+
retention: ChartRetainer;
|
|
11
|
+
params: BrushSelectionParams | undefined;
|
|
12
|
+
};
|
|
13
|
+
export declare const MosaicDashboardComponentChart: FC<MosaicDashboardComponentChartProps>;
|
|
14
|
+
//# sourceMappingURL=MosaicDashboardComponentChart.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MosaicDashboardComponentChart.d.ts","sourceRoot":"","sources":["../../src/chart/MosaicDashboardComponentChart.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAC,EAAE,EAAC,MAAM,OAAO,CAAC;AAChC,OAAO,EACL,4BAA4B,EAC5B,aAAa,EACb,oBAAoB,EACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAC,gBAAgB,EAAC,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAC,qBAAqB,EAAC,MAAM,gBAAgB,CAAC;AAErD,MAAM,MAAM,kCAAkC,GAAG;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,gBAAgB,CAAC;IACxB,mBAAmB,EAAE,4BAA4B,CAAC;IAClD,UAAU,EAAE,qBAAqB,CAAC;IAClC,SAAS,EAAE,aAAa,CAAC;IACzB,MAAM,EAAE,oBAAoB,GAAG,SAAS,CAAC;CAC1C,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,EAAE,CAC5C,kCAAkC,CAgBnC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export const MosaicDashboardComponentChart = ({ tableName, panel, chartTypeDefinition, connection, retention, params, }) => {
|
|
3
|
+
return React.createElement(chartTypeDefinition.renderer, {
|
|
4
|
+
tableName,
|
|
5
|
+
config: panel.config,
|
|
6
|
+
coordinator: connection.coordinator,
|
|
7
|
+
params,
|
|
8
|
+
retention,
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=MosaicDashboardComponentChart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MosaicDashboardComponentChart.js","sourceRoot":"","sources":["../../src/chart/MosaicDashboardComponentChart.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAW,MAAM,OAAO,CAAC;AAkBhC,MAAM,CAAC,MAAM,6BAA6B,GAEtC,CAAC,EACH,SAAS,EACT,KAAK,EACL,mBAAmB,EACnB,UAAU,EACV,SAAS,EACT,MAAM,GACP,EAAE,EAAE;IACH,OAAO,KAAK,CAAC,aAAa,CAAC,mBAAmB,CAAC,QAAQ,EAAE;QACvD,SAAS;QACT,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,MAAM;QACN,SAAS;KACV,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["import React, {FC} from 'react';\nimport {\n ComponentChartTypeDefinition,\n ChartRetainer,\n BrushSelectionParams,\n} from '../chart-types/base-types';\nimport {ChartPanelConfig} from '../dashboard/MosaicDashboardSlice';\nimport {MosaicReadyConnection} from '../MosaicSlice';\n\nexport type MosaicDashboardComponentChartProps = {\n tableName: string;\n panel: ChartPanelConfig;\n chartTypeDefinition: ComponentChartTypeDefinition;\n connection: MosaicReadyConnection;\n retention: ChartRetainer;\n params: BrushSelectionParams | undefined;\n};\n\nexport const MosaicDashboardComponentChart: FC<\n MosaicDashboardComponentChartProps\n> = ({\n tableName,\n panel,\n chartTypeDefinition,\n connection,\n retention,\n params,\n}) => {\n return React.createElement(chartTypeDefinition.renderer, {\n tableName,\n config: panel.config,\n coordinator: connection.coordinator,\n params,\n retention,\n });\n};\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { UseGenerateSpecResult } from './useGenerateSpec';
|
|
3
|
+
import { ChartRetainer, BrushSelectionParams } from '../chart-types/base-types';
|
|
4
|
+
export type MosaicDashboardVgPlotChartProps = {
|
|
5
|
+
spec: UseGenerateSpecResult;
|
|
6
|
+
retention: ChartRetainer;
|
|
7
|
+
params: BrushSelectionParams | undefined;
|
|
8
|
+
};
|
|
9
|
+
export declare const MosaicDashboardVgPlotChart: FC<MosaicDashboardVgPlotChartProps>;
|
|
10
|
+
//# sourceMappingURL=MosaicDashboardVgPlotChart.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MosaicDashboardVgPlotChart.d.ts","sourceRoot":"","sources":["../../src/chart/MosaicDashboardVgPlotChart.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,EAAE,EAAC,MAAM,OAAO,CAAC;AACzB,OAAO,EAAC,qBAAqB,EAAC,MAAM,mBAAmB,CAAC;AAGxD,OAAO,EAAC,aAAa,EAAE,oBAAoB,EAAC,MAAM,2BAA2B,CAAC;AAE9E,MAAM,MAAM,+BAA+B,GAAG;IAC5C,IAAI,EAAE,qBAAqB,CAAC;IAC5B,SAAS,EAAE,aAAa,CAAC;IACzB,MAAM,EAAE,oBAAoB,GAAG,SAAS,CAAC;CAC1C,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,EAAE,CACzC,+BAA+B,CAWhC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { MosaicDashboardVgPlotError } from './MosaicDashboardVgPlotError';
|
|
3
|
+
import { VgPlotChart } from '../VgPlotChart';
|
|
4
|
+
export const MosaicDashboardVgPlotChart = ({ spec, retention, params }) => {
|
|
5
|
+
if (spec.error) {
|
|
6
|
+
return (_jsx("div", { className: "flex h-full flex-col items-center justify-center", children: _jsx(MosaicDashboardVgPlotError, { error: spec.error }) }));
|
|
7
|
+
}
|
|
8
|
+
return _jsx(VgPlotChart, { spec: spec.spec, params: params, retention: retention });
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=MosaicDashboardVgPlotChart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MosaicDashboardVgPlotChart.js","sourceRoot":"","sources":["../../src/chart/MosaicDashboardVgPlotChart.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAC,0BAA0B,EAAC,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAS3C,MAAM,CAAC,MAAM,0BAA0B,GAEnC,CAAC,EAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAC,EAAE,EAAE;IAChC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,CACL,cAAK,SAAS,EAAC,kDAAkD,YAC/D,KAAC,0BAA0B,IAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAI,GAC7C,CACP,CAAC;IACJ,CAAC;IAED,OAAO,KAAC,WAAW,IAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAI,CAAC;AAChF,CAAC,CAAC","sourcesContent":["import {FC} from 'react';\nimport {UseGenerateSpecResult} from './useGenerateSpec';\nimport {MosaicDashboardVgPlotError} from './MosaicDashboardVgPlotError';\nimport {VgPlotChart} from '../VgPlotChart';\nimport {ChartRetainer, BrushSelectionParams} from '../chart-types/base-types';\n\nexport type MosaicDashboardVgPlotChartProps = {\n spec: UseGenerateSpecResult;\n retention: ChartRetainer;\n params: BrushSelectionParams | undefined;\n};\n\nexport const MosaicDashboardVgPlotChart: FC<\n MosaicDashboardVgPlotChartProps\n> = ({spec, retention, params}) => {\n if (spec.error) {\n return (\n <div className=\"flex h-full flex-col items-center justify-center\">\n <MosaicDashboardVgPlotError error={spec.error} />\n </div>\n );\n }\n\n return <VgPlotChart spec={spec.spec} params={params} retention={retention} />;\n};\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type FC } from 'react';
|
|
2
|
+
import { ChartSpecError } from '../chart-types/errors';
|
|
3
|
+
interface MosaicDashboardVgPlotErrorProps {
|
|
4
|
+
error: ChartSpecError;
|
|
5
|
+
}
|
|
6
|
+
export declare const MosaicDashboardVgPlotError: FC<MosaicDashboardVgPlotErrorProps>;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=MosaicDashboardVgPlotError.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MosaicDashboardVgPlotError.d.ts","sourceRoot":"","sources":["../../src/chart/MosaicDashboardVgPlotError.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,EAAC,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAC,cAAc,EAAsB,MAAM,uBAAuB,CAAC;AAE1E,UAAU,+BAA+B;IACvC,KAAK,EAAE,cAAc,CAAC;CACvB;AAED,eAAO,MAAM,0BAA0B,EAAE,EAAE,CACzC,+BAA+B,CAqBhC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { SpecGenerationError } from '../chart-types/errors';
|
|
3
|
+
export const MosaicDashboardVgPlotError = ({ error }) => {
|
|
4
|
+
// Configuration issues - user just needs to configure settings
|
|
5
|
+
if (error instanceof SpecGenerationError) {
|
|
6
|
+
return (_jsxs(_Fragment, { children: [_jsx("div", { className: "text-center font-medium", children: "Configure chart to display visualization" }), _jsx("div", { className: "text-center text-xs", children: error.message })] }));
|
|
7
|
+
}
|
|
8
|
+
// Generic error fallback
|
|
9
|
+
return (_jsxs(_Fragment, { children: [_jsx("div", { className: "text-center font-medium", children: "Unable to display chart" }), _jsx("div", { className: "text-center text-xs", children: error.message })] }));
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=MosaicDashboardVgPlotError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MosaicDashboardVgPlotError.js","sourceRoot":"","sources":["../../src/chart/MosaicDashboardVgPlotError.tsx"],"names":[],"mappings":";AACA,OAAO,EAAiB,mBAAmB,EAAC,MAAM,uBAAuB,CAAC;AAM1E,MAAM,CAAC,MAAM,0BAA0B,GAEnC,CAAC,EAAC,KAAK,EAAC,EAAE,EAAE;IACd,+DAA+D;IAC/D,IAAI,KAAK,YAAY,mBAAmB,EAAE,CAAC;QACzC,OAAO,CACL,8BACE,cAAK,SAAS,EAAC,yBAAyB,yDAElC,EACN,cAAK,SAAS,EAAC,qBAAqB,YAAE,KAAK,CAAC,OAAO,GAAO,IACzD,CACJ,CAAC;IACJ,CAAC;IAED,yBAAyB;IACzB,OAAO,CACL,8BACE,cAAK,SAAS,EAAC,yBAAyB,wCAA8B,EACtE,cAAK,SAAS,EAAC,qBAAqB,YAAE,KAAK,CAAC,OAAO,GAAO,IACzD,CACJ,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {type FC} from 'react';\nimport {ChartSpecError, SpecGenerationError} from '../chart-types/errors';\n\ninterface MosaicDashboardVgPlotErrorProps {\n error: ChartSpecError;\n}\n\nexport const MosaicDashboardVgPlotError: FC<\n MosaicDashboardVgPlotErrorProps\n> = ({error}) => {\n // Configuration issues - user just needs to configure settings\n if (error instanceof SpecGenerationError) {\n return (\n <>\n <div className=\"text-center font-medium\">\n Configure chart to display visualization\n </div>\n <div className=\"text-center text-xs\">{error.message}</div>\n </>\n );\n }\n\n // Generic error fallback\n return (\n <>\n <div className=\"text-center font-medium\">Unable to display chart</div>\n <div className=\"text-center text-xs\">{error.message}</div>\n </>\n );\n};\n"]}
|