@sqlrooms/mosaic 0.29.0-rc.1 → 0.29.0-rc.3
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 +161 -2
- package/dist/MosaicChart.d.ts +20 -0
- package/dist/MosaicChart.d.ts.map +1 -0
- package/dist/MosaicChart.js +25 -0
- package/dist/MosaicChart.js.map +1 -0
- package/dist/MosaicChartBuilder.d.ts +67 -0
- package/dist/MosaicChartBuilder.d.ts.map +1 -0
- package/dist/MosaicChartBuilder.js +33 -0
- package/dist/MosaicChartBuilder.js.map +1 -0
- package/dist/MosaicColorLegend.d.ts +18 -0
- package/dist/MosaicColorLegend.d.ts.map +1 -0
- package/dist/MosaicColorLegend.js +117 -0
- package/dist/MosaicColorLegend.js.map +1 -0
- package/dist/MosaicSlice.d.ts +27 -13
- package/dist/MosaicSlice.d.ts.map +1 -1
- package/dist/MosaicSlice.js +140 -42
- package/dist/MosaicSlice.js.map +1 -1
- package/dist/ResponsivePlot.d.ts +23 -0
- package/dist/ResponsivePlot.d.ts.map +1 -0
- package/dist/ResponsivePlot.js +43 -0
- package/dist/ResponsivePlot.js.map +1 -0
- package/dist/VgPlotChart.d.ts +24 -0
- package/dist/VgPlotChart.d.ts.map +1 -1
- package/dist/VgPlotChart.js +127 -21
- package/dist/VgPlotChart.js.map +1 -1
- package/dist/chart-builders/ChartBuilderActions.d.ts +6 -0
- package/dist/chart-builders/ChartBuilderActions.d.ts.map +1 -0
- package/dist/chart-builders/ChartBuilderActions.js +28 -0
- package/dist/chart-builders/ChartBuilderActions.js.map +1 -0
- package/dist/chart-builders/ChartBuilderContent.d.ts +28 -0
- package/dist/chart-builders/ChartBuilderContent.d.ts.map +1 -0
- package/dist/chart-builders/ChartBuilderContent.js +28 -0
- package/dist/chart-builders/ChartBuilderContent.js.map +1 -0
- package/dist/chart-builders/ChartBuilderContext.d.ts +16 -0
- package/dist/chart-builders/ChartBuilderContext.d.ts.map +1 -0
- package/dist/chart-builders/ChartBuilderContext.js +15 -0
- package/dist/chart-builders/ChartBuilderContext.js.map +1 -0
- package/dist/chart-builders/ChartBuilderDialog.d.ts +48 -0
- package/dist/chart-builders/ChartBuilderDialog.d.ts.map +1 -0
- package/dist/chart-builders/ChartBuilderDialog.js +30 -0
- package/dist/chart-builders/ChartBuilderDialog.js.map +1 -0
- package/dist/chart-builders/ChartBuilderFields.d.ts +6 -0
- package/dist/chart-builders/ChartBuilderFields.d.ts.map +1 -0
- package/dist/chart-builders/ChartBuilderFields.js +25 -0
- package/dist/chart-builders/ChartBuilderFields.js.map +1 -0
- package/dist/chart-builders/ChartBuilderRoot.d.ts +27 -0
- package/dist/chart-builders/ChartBuilderRoot.d.ts.map +1 -0
- package/dist/chart-builders/ChartBuilderRoot.js +61 -0
- package/dist/chart-builders/ChartBuilderRoot.js.map +1 -0
- package/dist/chart-builders/ChartBuilderTypeGrid.d.ts +7 -0
- package/dist/chart-builders/ChartBuilderTypeGrid.d.ts.map +1 -0
- package/dist/chart-builders/ChartBuilderTypeGrid.js +23 -0
- package/dist/chart-builders/ChartBuilderTypeGrid.js.map +1 -0
- package/dist/chart-builders/FieldSelectorInput.d.ts +13 -0
- package/dist/chart-builders/FieldSelectorInput.d.ts.map +1 -0
- package/dist/chart-builders/FieldSelectorInput.js +19 -0
- package/dist/chart-builders/FieldSelectorInput.js.map +1 -0
- package/dist/chart-builders/builders.d.ts +34 -0
- package/dist/chart-builders/builders.d.ts.map +1 -0
- package/dist/chart-builders/builders.js +51 -0
- package/dist/chart-builders/builders.js.map +1 -0
- package/dist/chart-builders/chartSpecTitle.d.ts +6 -0
- package/dist/chart-builders/chartSpecTitle.d.ts.map +1 -0
- package/dist/chart-builders/chartSpecTitle.js +8 -0
- package/dist/chart-builders/chartSpecTitle.js.map +1 -0
- package/dist/chart-builders/chartTypeUtils.d.ts +17 -0
- package/dist/chart-builders/chartTypeUtils.d.ts.map +1 -0
- package/dist/chart-builders/chartTypeUtils.js +55 -0
- package/dist/chart-builders/chartTypeUtils.js.map +1 -0
- package/dist/chart-builders/constants.d.ts +7 -0
- package/dist/chart-builders/constants.d.ts.map +1 -0
- package/dist/chart-builders/constants.js +34 -0
- package/dist/chart-builders/constants.js.map +1 -0
- package/dist/chart-builders/createChartBuilderStore.d.ts +11 -0
- package/dist/chart-builders/createChartBuilderStore.d.ts.map +1 -0
- package/dist/chart-builders/createChartBuilderStore.js +26 -0
- package/dist/chart-builders/createChartBuilderStore.js.map +1 -0
- package/dist/chart-builders/describeChartSpecs.d.ts +9 -0
- package/dist/chart-builders/describeChartSpecs.d.ts.map +1 -0
- package/dist/chart-builders/describeChartSpecs.js +41 -0
- package/dist/chart-builders/describeChartSpecs.js.map +1 -0
- package/dist/chart-builders/hooks/useChartFieldForm.d.ts +13 -0
- package/dist/chart-builders/hooks/useChartFieldForm.d.ts.map +1 -0
- package/dist/chart-builders/hooks/useChartFieldForm.js +12 -0
- package/dist/chart-builders/hooks/useChartFieldForm.js.map +1 -0
- package/dist/chart-builders/types.d.ts +23 -0
- package/dist/chart-builders/types.d.ts.map +1 -0
- package/dist/chart-builders/types.js +17 -0
- package/dist/chart-builders/types.js.map +1 -0
- package/dist/chart-types/base-types.d.ts +54 -0
- package/dist/chart-types/base-types.d.ts.map +1 -0
- package/dist/chart-types/base-types.js +6 -0
- package/dist/chart-types/base-types.js.map +1 -0
- package/dist/chart-types/box-plot/definition.d.ts +4 -0
- package/dist/chart-types/box-plot/definition.d.ts.map +1 -0
- package/dist/chart-types/box-plot/definition.js +45 -0
- package/dist/chart-types/box-plot/definition.js.map +1 -0
- package/dist/chart-types/box-plot/index.d.ts +3 -0
- package/dist/chart-types/box-plot/index.d.ts.map +1 -0
- package/dist/chart-types/box-plot/index.js +3 -0
- package/dist/chart-types/box-plot/index.js.map +1 -0
- package/dist/chart-types/box-plot/schema.d.ts +17 -0
- package/dist/chart-types/box-plot/schema.d.ts.map +1 -0
- package/dist/chart-types/box-plot/schema.js +12 -0
- package/dist/chart-types/box-plot/schema.js.map +1 -0
- package/dist/chart-types/bubble-chart/definition.d.ts +4 -0
- package/dist/chart-types/bubble-chart/definition.d.ts.map +1 -0
- package/dist/chart-types/bubble-chart/definition.js +48 -0
- package/dist/chart-types/bubble-chart/definition.js.map +1 -0
- package/dist/chart-types/bubble-chart/index.d.ts +3 -0
- package/dist/chart-types/bubble-chart/index.d.ts.map +1 -0
- package/dist/chart-types/bubble-chart/index.js +3 -0
- package/dist/chart-types/bubble-chart/index.js.map +1 -0
- package/dist/chart-types/bubble-chart/schema.d.ts +17 -0
- package/dist/chart-types/bubble-chart/schema.d.ts.map +1 -0
- package/dist/chart-types/bubble-chart/schema.js +12 -0
- package/dist/chart-types/bubble-chart/schema.js.map +1 -0
- package/dist/chart-types/count-plot/definition.d.ts +4 -0
- package/dist/chart-types/count-plot/definition.d.ts.map +1 -0
- package/dist/chart-types/count-plot/definition.js +50 -0
- package/dist/chart-types/count-plot/definition.js.map +1 -0
- package/dist/chart-types/count-plot/index.d.ts +3 -0
- package/dist/chart-types/count-plot/index.d.ts.map +1 -0
- package/dist/chart-types/count-plot/index.js +3 -0
- package/dist/chart-types/count-plot/index.js.map +1 -0
- package/dist/chart-types/count-plot/schema.d.ts +15 -0
- package/dist/chart-types/count-plot/schema.d.ts.map +1 -0
- package/dist/chart-types/count-plot/schema.js +11 -0
- package/dist/chart-types/count-plot/schema.js.map +1 -0
- package/dist/chart-types/custom-spec/definition.d.ts +4 -0
- package/dist/chart-types/custom-spec/definition.d.ts.map +1 -0
- package/dist/chart-types/custom-spec/definition.js +28 -0
- package/dist/chart-types/custom-spec/definition.js.map +1 -0
- package/dist/chart-types/custom-spec/index.d.ts +3 -0
- package/dist/chart-types/custom-spec/index.d.ts.map +1 -0
- package/dist/chart-types/custom-spec/index.js +3 -0
- package/dist/chart-types/custom-spec/index.js.map +1 -0
- package/dist/chart-types/custom-spec/schema.d.ts +11 -0
- package/dist/chart-types/custom-spec/schema.d.ts.map +1 -0
- package/dist/chart-types/custom-spec/schema.js +9 -0
- package/dist/chart-types/custom-spec/schema.js.map +1 -0
- package/dist/chart-types/ecdf/definition.d.ts +4 -0
- package/dist/chart-types/ecdf/definition.d.ts.map +1 -0
- package/dist/chart-types/ecdf/definition.js +47 -0
- package/dist/chart-types/ecdf/definition.js.map +1 -0
- package/dist/chart-types/ecdf/index.d.ts +3 -0
- package/dist/chart-types/ecdf/index.d.ts.map +1 -0
- package/dist/chart-types/ecdf/index.js +3 -0
- package/dist/chart-types/ecdf/index.js.map +1 -0
- package/dist/chart-types/ecdf/schema.d.ts +15 -0
- package/dist/chart-types/ecdf/schema.d.ts.map +1 -0
- package/dist/chart-types/ecdf/schema.js +11 -0
- package/dist/chart-types/ecdf/schema.js.map +1 -0
- package/dist/chart-types/heatmap/definition.d.ts +4 -0
- package/dist/chart-types/heatmap/definition.d.ts.map +1 -0
- package/dist/chart-types/heatmap/definition.js +49 -0
- package/dist/chart-types/heatmap/definition.js.map +1 -0
- package/dist/chart-types/heatmap/index.d.ts +3 -0
- package/dist/chart-types/heatmap/index.d.ts.map +1 -0
- package/dist/chart-types/heatmap/index.js +3 -0
- package/dist/chart-types/heatmap/index.js.map +1 -0
- package/dist/chart-types/heatmap/schema.d.ts +17 -0
- package/dist/chart-types/heatmap/schema.d.ts.map +1 -0
- package/dist/chart-types/heatmap/schema.js +12 -0
- package/dist/chart-types/heatmap/schema.js.map +1 -0
- package/dist/chart-types/histogram/definition.d.ts +4 -0
- package/dist/chart-types/histogram/definition.d.ts.map +1 -0
- package/dist/chart-types/histogram/definition.js +49 -0
- package/dist/chart-types/histogram/definition.js.map +1 -0
- package/dist/chart-types/histogram/index.d.ts +3 -0
- package/dist/chart-types/histogram/index.d.ts.map +1 -0
- package/dist/chart-types/histogram/index.js +3 -0
- package/dist/chart-types/histogram/index.js.map +1 -0
- package/dist/chart-types/histogram/schema.d.ts +15 -0
- package/dist/chart-types/histogram/schema.d.ts.map +1 -0
- package/dist/chart-types/histogram/schema.js +11 -0
- package/dist/chart-types/histogram/schema.js.map +1 -0
- package/dist/chart-types/index.d.ts +109 -0
- package/dist/chart-types/index.d.ts.map +1 -0
- package/dist/chart-types/index.js +70 -0
- package/dist/chart-types/index.js.map +1 -0
- package/dist/chart-types/line-chart/definition.d.ts +4 -0
- package/dist/chart-types/line-chart/definition.d.ts.map +1 -0
- package/dist/chart-types/line-chart/definition.js +46 -0
- package/dist/chart-types/line-chart/definition.js.map +1 -0
- package/dist/chart-types/line-chart/index.d.ts +3 -0
- package/dist/chart-types/line-chart/index.d.ts.map +1 -0
- package/dist/chart-types/line-chart/index.js +3 -0
- package/dist/chart-types/line-chart/index.js.map +1 -0
- package/dist/chart-types/line-chart/schema.d.ts +17 -0
- package/dist/chart-types/line-chart/schema.d.ts.map +1 -0
- package/dist/chart-types/line-chart/schema.js +12 -0
- package/dist/chart-types/line-chart/schema.js.map +1 -0
- package/dist/chart-types/registry.d.ts +5 -0
- package/dist/chart-types/registry.d.ts.map +1 -0
- package/dist/chart-types/registry.js +28 -0
- package/dist/chart-types/registry.js.map +1 -0
- package/dist/dashboard/DashboardPanelErrorBoundary.d.ts +17 -0
- package/dist/dashboard/DashboardPanelErrorBoundary.d.ts.map +1 -0
- package/dist/dashboard/DashboardPanelErrorBoundary.js +21 -0
- package/dist/dashboard/DashboardPanelErrorBoundary.js.map +1 -0
- package/dist/dashboard/MosaicDashboard.d.ts +18 -0
- package/dist/dashboard/MosaicDashboard.d.ts.map +1 -0
- package/dist/dashboard/MosaicDashboard.js +91 -0
- package/dist/dashboard/MosaicDashboard.js.map +1 -0
- package/dist/dashboard/MosaicDashboardContext.d.ts +12 -0
- package/dist/dashboard/MosaicDashboardContext.d.ts.map +1 -0
- package/dist/dashboard/MosaicDashboardContext.js +10 -0
- package/dist/dashboard/MosaicDashboardContext.js.map +1 -0
- package/dist/dashboard/MosaicDashboardPanel.d.ts +3 -0
- package/dist/dashboard/MosaicDashboardPanel.d.ts.map +1 -0
- package/dist/dashboard/MosaicDashboardPanel.js +26 -0
- package/dist/dashboard/MosaicDashboardPanel.js.map +1 -0
- package/dist/dashboard/MosaicDashboardPanelDragOverlay.d.ts +8 -0
- package/dist/dashboard/MosaicDashboardPanelDragOverlay.d.ts.map +1 -0
- package/dist/dashboard/MosaicDashboardPanelDragOverlay.js +17 -0
- package/dist/dashboard/MosaicDashboardPanelDragOverlay.js.map +1 -0
- package/dist/dashboard/MosaicDashboardPanelHeader.d.ts +13 -0
- package/dist/dashboard/MosaicDashboardPanelHeader.d.ts.map +1 -0
- package/dist/dashboard/MosaicDashboardPanelHeader.js +30 -0
- package/dist/dashboard/MosaicDashboardPanelHeader.js.map +1 -0
- package/dist/dashboard/MosaicDashboardPanelLayout.d.ts +10 -0
- package/dist/dashboard/MosaicDashboardPanelLayout.d.ts.map +1 -0
- package/dist/dashboard/MosaicDashboardPanelLayout.js +25 -0
- package/dist/dashboard/MosaicDashboardPanelLayout.js.map +1 -0
- package/dist/dashboard/MosaicDashboardPanels.d.ts +2 -0
- package/dist/dashboard/MosaicDashboardPanels.d.ts.map +1 -0
- package/dist/dashboard/MosaicDashboardPanels.js +52 -0
- package/dist/dashboard/MosaicDashboardPanels.js.map +1 -0
- package/dist/dashboard/MosaicDashboardProfilerPanelRenderer.d.ts +3 -0
- package/dist/dashboard/MosaicDashboardProfilerPanelRenderer.d.ts.map +1 -0
- package/dist/dashboard/MosaicDashboardProfilerPanelRenderer.js +32 -0
- package/dist/dashboard/MosaicDashboardProfilerPanelRenderer.js.map +1 -0
- package/dist/dashboard/MosaicDashboardSlice.d.ts +523 -0
- package/dist/dashboard/MosaicDashboardSlice.d.ts.map +1 -0
- package/dist/dashboard/MosaicDashboardSlice.js +615 -0
- package/dist/dashboard/MosaicDashboardSlice.js.map +1 -0
- package/dist/dashboard/MosaicDashboardToolbar.d.ts +3 -0
- package/dist/dashboard/MosaicDashboardToolbar.d.ts.map +1 -0
- package/dist/dashboard/MosaicDashboardToolbar.js +81 -0
- package/dist/dashboard/MosaicDashboardToolbar.js.map +1 -0
- package/dist/dashboard/MosaicDashboardVgPlotHeaderActions.d.ts +4 -0
- package/dist/dashboard/MosaicDashboardVgPlotHeaderActions.d.ts.map +1 -0
- package/dist/dashboard/MosaicDashboardVgPlotHeaderActions.js +29 -0
- package/dist/dashboard/MosaicDashboardVgPlotHeaderActions.js.map +1 -0
- package/dist/dashboard/MosaicDashboardVgPlotPanelRenderer.d.ts +3 -0
- package/dist/dashboard/MosaicDashboardVgPlotPanelRenderer.d.ts.map +1 -0
- package/dist/dashboard/MosaicDashboardVgPlotPanelRenderer.js +68 -0
- package/dist/dashboard/MosaicDashboardVgPlotPanelRenderer.js.map +1 -0
- package/dist/dashboard/VgPlotSpecPopoverEditor.d.ts +8 -0
- package/dist/dashboard/VgPlotSpecPopoverEditor.d.ts.map +1 -0
- package/dist/dashboard/VgPlotSpecPopoverEditor.js +40 -0
- package/dist/dashboard/VgPlotSpecPopoverEditor.js.map +1 -0
- package/dist/dashboard/chart-settings/ChartSettings.d.ts +39 -0
- package/dist/dashboard/chart-settings/ChartSettings.d.ts.map +1 -0
- package/dist/dashboard/chart-settings/ChartSettings.js +90 -0
- package/dist/dashboard/chart-settings/ChartSettings.js.map +1 -0
- package/dist/dashboard/chart-settings/ChartSettingsContext.d.ts +20 -0
- package/dist/dashboard/chart-settings/ChartSettingsContext.d.ts.map +1 -0
- package/dist/dashboard/chart-settings/ChartSettingsContext.js +14 -0
- package/dist/dashboard/chart-settings/ChartSettingsContext.js.map +1 -0
- package/dist/dashboard/chart-settings/ChartSettingsPanel.d.ts +11 -0
- package/dist/dashboard/chart-settings/ChartSettingsPanel.d.ts.map +1 -0
- package/dist/dashboard/chart-settings/ChartSettingsPanel.js +8 -0
- package/dist/dashboard/chart-settings/ChartSettingsPanel.js.map +1 -0
- package/dist/dashboard/chart-settings/ChartTypeSelector.d.ts +11 -0
- package/dist/dashboard/chart-settings/ChartTypeSelector.d.ts.map +1 -0
- package/dist/dashboard/chart-settings/ChartTypeSelector.js +17 -0
- package/dist/dashboard/chart-settings/ChartTypeSelector.js.map +1 -0
- package/dist/dashboard/chart-settings/DynamicChartSettings.d.ts +11 -0
- package/dist/dashboard/chart-settings/DynamicChartSettings.d.ts.map +1 -0
- package/dist/dashboard/chart-settings/DynamicChartSettings.js +19 -0
- package/dist/dashboard/chart-settings/DynamicChartSettings.js.map +1 -0
- package/dist/dashboard/chart-settings/index.d.ts +6 -0
- package/dist/dashboard/chart-settings/index.d.ts.map +1 -0
- package/dist/dashboard/chart-settings/index.js +6 -0
- package/dist/dashboard/chart-settings/index.js.map +1 -0
- package/dist/dashboard/chart-settings/useTableColumns.d.ts +3 -0
- package/dist/dashboard/chart-settings/useTableColumns.d.ts.map +1 -0
- package/dist/dashboard/chart-settings/useTableColumns.js +12 -0
- package/dist/dashboard/chart-settings/useTableColumns.js.map +1 -0
- package/dist/dashboard/defaultPanelRenderers.d.ts +3 -0
- package/dist/dashboard/defaultPanelRenderers.d.ts.map +1 -0
- package/dist/dashboard/defaultPanelRenderers.js +11 -0
- package/dist/dashboard/defaultPanelRenderers.js.map +1 -0
- package/dist/dashboard/generateMosaicChartSpec.d.ts +15 -0
- package/dist/dashboard/generateMosaicChartSpec.d.ts.map +1 -0
- package/dist/dashboard/generateMosaicChartSpec.js +30 -0
- package/dist/dashboard/generateMosaicChartSpec.js.map +1 -0
- package/dist/editor/MosaicChartContainer.d.ts +51 -0
- package/dist/editor/MosaicChartContainer.d.ts.map +1 -0
- package/dist/editor/MosaicChartContainer.js +39 -0
- package/dist/editor/MosaicChartContainer.js.map +1 -0
- package/dist/editor/MosaicChartDisplay.d.ts +18 -0
- package/dist/editor/MosaicChartDisplay.d.ts.map +1 -0
- package/dist/editor/MosaicChartDisplay.js +26 -0
- package/dist/editor/MosaicChartDisplay.js.map +1 -0
- package/dist/editor/MosaicChartEditorActions.d.ts +20 -0
- package/dist/editor/MosaicChartEditorActions.d.ts.map +1 -0
- package/dist/editor/MosaicChartEditorActions.js +18 -0
- package/dist/editor/MosaicChartEditorActions.js.map +1 -0
- package/dist/editor/MosaicCodeMirrorEditor.d.ts +15 -0
- package/dist/editor/MosaicCodeMirrorEditor.d.ts.map +1 -0
- package/dist/editor/MosaicCodeMirrorEditor.js +26 -0
- package/dist/editor/MosaicCodeMirrorEditor.js.map +1 -0
- package/dist/editor/MosaicEditorContext.d.ts +8 -0
- package/dist/editor/MosaicEditorContext.d.ts.map +1 -0
- package/dist/editor/MosaicEditorContext.js +14 -0
- package/dist/editor/MosaicEditorContext.js.map +1 -0
- package/dist/editor/MosaicSpecEditorPanel.d.ts +20 -0
- package/dist/editor/MosaicSpecEditorPanel.d.ts.map +1 -0
- package/dist/editor/MosaicSpecEditorPanel.js +25 -0
- package/dist/editor/MosaicSpecEditorPanel.js.map +1 -0
- package/dist/editor/mosaicSchema.d.ts +20 -0
- package/dist/editor/mosaicSchema.d.ts.map +1 -0
- package/dist/editor/mosaicSchema.js +57 -0
- package/dist/editor/mosaicSchema.js.map +1 -0
- package/dist/editor/types.d.ts +72 -0
- package/dist/editor/types.d.ts.map +1 -0
- package/dist/editor/types.js +2 -0
- package/dist/editor/types.js.map +1 -0
- package/dist/editor/useMosaicChartEditor.d.ts +9 -0
- package/dist/editor/useMosaicChartEditor.d.ts.map +1 -0
- package/dist/editor/useMosaicChartEditor.js +199 -0
- package/dist/editor/useMosaicChartEditor.js.map +1 -0
- package/dist/index.d.ts +53 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -1
- package/dist/index.js.map +1 -1
- package/dist/profiler/MosaicProfiler.d.ts +32 -0
- package/dist/profiler/MosaicProfiler.d.ts.map +1 -0
- package/dist/profiler/MosaicProfiler.js +57 -0
- package/dist/profiler/MosaicProfiler.js.map +1 -0
- package/dist/profiler/MosaicProfilerHeader.d.ts +7 -0
- package/dist/profiler/MosaicProfilerHeader.d.ts.map +1 -0
- package/dist/profiler/MosaicProfilerHeader.js +196 -0
- package/dist/profiler/MosaicProfilerHeader.js.map +1 -0
- package/dist/profiler/MosaicProfilerRows.d.ts +9 -0
- package/dist/profiler/MosaicProfilerRows.d.ts.map +1 -0
- package/dist/profiler/MosaicProfilerRows.js +65 -0
- package/dist/profiler/MosaicProfilerRows.js.map +1 -0
- package/dist/profiler/MosaicProfilerStatusBar.d.ts +9 -0
- package/dist/profiler/MosaicProfilerStatusBar.d.ts.map +1 -0
- package/dist/profiler/MosaicProfilerStatusBar.js +28 -0
- package/dist/profiler/MosaicProfilerStatusBar.js.map +1 -0
- package/dist/profiler/ProfilerCategoryClient.d.ts +50 -0
- package/dist/profiler/ProfilerCategoryClient.d.ts.map +1 -0
- package/dist/profiler/ProfilerCategoryClient.js +121 -0
- package/dist/profiler/ProfilerCategoryClient.js.map +1 -0
- package/dist/profiler/ProfilerCountClient.d.ts +28 -0
- package/dist/profiler/ProfilerCountClient.d.ts.map +1 -0
- package/dist/profiler/ProfilerCountClient.js +51 -0
- package/dist/profiler/ProfilerCountClient.js.map +1 -0
- package/dist/profiler/ProfilerHistogramClient.d.ts +69 -0
- package/dist/profiler/ProfilerHistogramClient.d.ts.map +1 -0
- package/dist/profiler/ProfilerHistogramClient.js +179 -0
- package/dist/profiler/ProfilerHistogramClient.js.map +1 -0
- package/dist/profiler/ProfilerPageClient.d.ts +37 -0
- package/dist/profiler/ProfilerPageClient.d.ts.map +1 -0
- package/dist/profiler/ProfilerPageClient.js +65 -0
- package/dist/profiler/ProfilerPageClient.js.map +1 -0
- package/dist/profiler/ProfilerUnsupportedSummaryClient.d.ts +24 -0
- package/dist/profiler/ProfilerUnsupportedSummaryClient.d.ts.map +1 -0
- package/dist/profiler/ProfilerUnsupportedSummaryClient.js +51 -0
- package/dist/profiler/ProfilerUnsupportedSummaryClient.js.map +1 -0
- package/dist/profiler/createProfilerStore.d.ts +45 -0
- package/dist/profiler/createProfilerStore.d.ts.map +1 -0
- package/dist/profiler/createProfilerStore.js +120 -0
- package/dist/profiler/createProfilerStore.js.map +1 -0
- package/dist/profiler/layout.d.ts +7 -0
- package/dist/profiler/layout.d.ts.map +1 -0
- package/dist/profiler/layout.js +13 -0
- package/dist/profiler/layout.js.map +1 -0
- package/dist/profiler/profilerController.d.ts +64 -0
- package/dist/profiler/profilerController.d.ts.map +1 -0
- package/dist/profiler/profilerController.js +123 -0
- package/dist/profiler/profilerController.js.map +1 -0
- package/dist/profiler/types.d.ts +86 -0
- package/dist/profiler/types.d.ts.map +1 -0
- package/dist/profiler/types.js +2 -0
- package/dist/profiler/types.js.map +1 -0
- package/dist/profiler/useMosaicProfiler.d.ts +7 -0
- package/dist/profiler/useMosaicProfiler.d.ts.map +1 -0
- package/dist/profiler/useMosaicProfiler.js +339 -0
- package/dist/profiler/useMosaicProfiler.js.map +1 -0
- package/dist/profiler/utils.d.ts +61 -0
- package/dist/profiler/utils.d.ts.map +1 -0
- package/dist/profiler/utils.js +347 -0
- package/dist/profiler/utils.js.map +1 -0
- package/dist/tableInterop.d.ts +30 -0
- package/dist/tableInterop.d.ts.map +1 -0
- package/dist/tableInterop.js +85 -0
- package/dist/tableInterop.js.map +1 -0
- package/dist/useMosaicClient.d.ts +5 -15
- package/dist/useMosaicClient.d.ts.map +1 -1
- package/dist/useMosaicClient.js +22 -6
- package/dist/useMosaicClient.js.map +1 -1
- package/package.json +30 -6
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { MosaicClient, queryFieldInfo, } from '@uwdata/mosaic-core';
|
|
2
|
+
import { Interval1D, bin } from '@uwdata/mosaic-plot';
|
|
3
|
+
import { count, Query } from '@uwdata/mosaic-sql';
|
|
4
|
+
import { rowsFromQueryResult, splitHistogramBins } from './utils';
|
|
5
|
+
export class ProfilerHistogramClient extends MosaicClient {
|
|
6
|
+
type = 'rectY';
|
|
7
|
+
filteredError;
|
|
8
|
+
filteredLoading = true;
|
|
9
|
+
field;
|
|
10
|
+
fieldInfo;
|
|
11
|
+
fieldInfoPromise;
|
|
12
|
+
filteredBins;
|
|
13
|
+
filteredNullCount;
|
|
14
|
+
interactor;
|
|
15
|
+
onStateChange;
|
|
16
|
+
select;
|
|
17
|
+
tableName;
|
|
18
|
+
totalBins;
|
|
19
|
+
totalError;
|
|
20
|
+
totalLoading = true;
|
|
21
|
+
totalNullCount;
|
|
22
|
+
valueType;
|
|
23
|
+
constructor(options) {
|
|
24
|
+
super(options.selection);
|
|
25
|
+
this.field = options.field;
|
|
26
|
+
this.onStateChange = options.onStateChange;
|
|
27
|
+
this.tableName = options.tableName;
|
|
28
|
+
this.valueType = options.valueType;
|
|
29
|
+
const binned = bin(options.field.name, { steps: options.steps })(this, 'x');
|
|
30
|
+
this.select = { x1: binned.x1, x2: binned.x2, y: count() };
|
|
31
|
+
this.interactor = new Interval1D(this, {
|
|
32
|
+
brush: undefined,
|
|
33
|
+
channel: 'x',
|
|
34
|
+
field: options.field.name,
|
|
35
|
+
peers: false,
|
|
36
|
+
selection: options.selection,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
get filterStable() {
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
emitSummary() {
|
|
43
|
+
const totalRows = this.totalBins ?? (this.totalLoading ? (this.filteredBins ?? []) : []);
|
|
44
|
+
const total = splitHistogramBins(totalRows);
|
|
45
|
+
const filteredRows = this.filteredBins ?? (this.filteredLoading ? (this.totalBins ?? []) : []);
|
|
46
|
+
const filtered = splitHistogramBins(filteredRows);
|
|
47
|
+
this.onStateChange({
|
|
48
|
+
error: this.filteredError ?? this.totalError,
|
|
49
|
+
filteredBins: filtered.bins,
|
|
50
|
+
filteredNullCount: this.filteredNullCount ??
|
|
51
|
+
(this.filteredLoading ? total.nullCount : filtered.nullCount),
|
|
52
|
+
interactor: this.interactor,
|
|
53
|
+
isLoading: this.filteredLoading || this.totalLoading,
|
|
54
|
+
kind: 'histogram',
|
|
55
|
+
totalBins: total.bins,
|
|
56
|
+
totalNullCount: this.totalNullCount ??
|
|
57
|
+
(this.totalLoading ? filtered.nullCount : total.nullCount),
|
|
58
|
+
valueType: this.valueType,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
async ensureFieldInfo() {
|
|
62
|
+
if (this.fieldInfo) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (!this.fieldInfoPromise) {
|
|
66
|
+
this.fieldInfoPromise = queryFieldInfo(this.coordinator, [
|
|
67
|
+
{
|
|
68
|
+
table: this.tableName,
|
|
69
|
+
column: this.field.name,
|
|
70
|
+
stats: ['min', 'max'],
|
|
71
|
+
},
|
|
72
|
+
])
|
|
73
|
+
.then(([info]) => {
|
|
74
|
+
this.fieldInfo = info;
|
|
75
|
+
})
|
|
76
|
+
.catch((error) => {
|
|
77
|
+
this.fieldInfo = undefined;
|
|
78
|
+
this.fieldInfoPromise = undefined;
|
|
79
|
+
throw error;
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
await this.fieldInfoPromise;
|
|
83
|
+
}
|
|
84
|
+
setTotalError(error) {
|
|
85
|
+
this.totalError = error;
|
|
86
|
+
this.totalLoading = false;
|
|
87
|
+
this.emitSummary();
|
|
88
|
+
}
|
|
89
|
+
setTotalLoading(isLoading) {
|
|
90
|
+
this.totalLoading = isLoading;
|
|
91
|
+
if (isLoading) {
|
|
92
|
+
this.totalError = undefined;
|
|
93
|
+
}
|
|
94
|
+
this.emitSummary();
|
|
95
|
+
}
|
|
96
|
+
setTotalRows(rows) {
|
|
97
|
+
const { nullCount } = splitHistogramBins(rows);
|
|
98
|
+
this.totalBins = rows;
|
|
99
|
+
this.totalNullCount = nullCount;
|
|
100
|
+
this.totalError = undefined;
|
|
101
|
+
this.totalLoading = false;
|
|
102
|
+
this.emitSummary();
|
|
103
|
+
}
|
|
104
|
+
queryPending() {
|
|
105
|
+
this.filteredLoading = true;
|
|
106
|
+
this.filteredError = undefined;
|
|
107
|
+
this.emitSummary();
|
|
108
|
+
return this;
|
|
109
|
+
}
|
|
110
|
+
async prepare() {
|
|
111
|
+
await this.ensureFieldInfo();
|
|
112
|
+
}
|
|
113
|
+
query(filter = []) {
|
|
114
|
+
return Query.from({ source: this.tableName })
|
|
115
|
+
.select(this.select)
|
|
116
|
+
.groupby([this.select.x1, this.select.x2])
|
|
117
|
+
.where(filter);
|
|
118
|
+
}
|
|
119
|
+
queryResult(data) {
|
|
120
|
+
const rows = rowsFromQueryResult(data);
|
|
121
|
+
const { nullCount } = splitHistogramBins(rows);
|
|
122
|
+
this.filteredBins = rows;
|
|
123
|
+
this.filteredNullCount = nullCount;
|
|
124
|
+
this.filteredError = undefined;
|
|
125
|
+
this.filteredLoading = false;
|
|
126
|
+
this.emitSummary();
|
|
127
|
+
return this;
|
|
128
|
+
}
|
|
129
|
+
queryError(error) {
|
|
130
|
+
this.filteredError = error;
|
|
131
|
+
this.filteredLoading = false;
|
|
132
|
+
this.emitSummary();
|
|
133
|
+
return this;
|
|
134
|
+
}
|
|
135
|
+
channelField(channel) {
|
|
136
|
+
if (channel !== 'x') {
|
|
137
|
+
throw new Error('ProfilerHistogramClient only supports x bins');
|
|
138
|
+
}
|
|
139
|
+
if (!this.fieldInfo) {
|
|
140
|
+
throw new Error('Field info is required before histogram binning');
|
|
141
|
+
}
|
|
142
|
+
return this.fieldInfo;
|
|
143
|
+
}
|
|
144
|
+
get plot() {
|
|
145
|
+
const markSet = new Set([this]);
|
|
146
|
+
return {
|
|
147
|
+
getAttribute(_name) {
|
|
148
|
+
return undefined;
|
|
149
|
+
},
|
|
150
|
+
markSet,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
export class ProfilerHistogramTotalClient extends MosaicClient {
|
|
155
|
+
summaryClient;
|
|
156
|
+
constructor(options) {
|
|
157
|
+
super();
|
|
158
|
+
this.summaryClient = options.summaryClient;
|
|
159
|
+
}
|
|
160
|
+
async prepare() {
|
|
161
|
+
await this.summaryClient.ensureFieldInfo();
|
|
162
|
+
}
|
|
163
|
+
queryPending() {
|
|
164
|
+
this.summaryClient.setTotalLoading(true);
|
|
165
|
+
return this;
|
|
166
|
+
}
|
|
167
|
+
query(filter = []) {
|
|
168
|
+
return this.summaryClient.query(filter);
|
|
169
|
+
}
|
|
170
|
+
queryResult(data) {
|
|
171
|
+
this.summaryClient.setTotalRows(rowsFromQueryResult(data));
|
|
172
|
+
return this;
|
|
173
|
+
}
|
|
174
|
+
queryError(error) {
|
|
175
|
+
this.summaryClient.setTotalError(error);
|
|
176
|
+
return this;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=ProfilerHistogramClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProfilerHistogramClient.js","sourceRoot":"","sources":["../../src/profiler/ProfilerHistogramClient.ts"],"names":[],"mappings":"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","sourcesContent":["import type {FieldInfo} from '@uwdata/mosaic-core';\nimport {\n MosaicClient,\n queryFieldInfo,\n type Selection,\n} from '@uwdata/mosaic-core';\nimport {Interval1D, bin} from '@uwdata/mosaic-plot';\nimport {count, type ExprNode, Query} from '@uwdata/mosaic-sql';\nimport type * as arrow from 'apache-arrow';\nimport type {MosaicProfilerHistogramSummary} from './types';\nimport {rowsFromQueryResult, splitHistogramBins} from './utils';\n\ntype HistogramStateChange = (summary: MosaicProfilerHistogramSummary) => void;\n\ntype HistogramClientOptions = {\n field: arrow.Field;\n onStateChange: HistogramStateChange;\n selection: Selection;\n steps: number;\n tableName: string;\n valueType: 'date' | 'number';\n};\n\ntype HistogramRow = {\n x1: number | Date | null;\n x2: number | Date | null;\n y: number;\n};\n\nexport class ProfilerHistogramClient extends MosaicClient {\n readonly type = 'rectY';\n private filteredError?: Error;\n private filteredLoading = true;\n private readonly field: arrow.Field;\n private fieldInfo?: FieldInfo;\n private fieldInfoPromise?: Promise<void>;\n private filteredBins?: HistogramRow[];\n private filteredNullCount?: number;\n private readonly interactor: Interval1D;\n private readonly onStateChange: HistogramStateChange;\n private readonly select: {\n x1: ExprNode;\n x2: ExprNode;\n y: ExprNode;\n };\n private readonly tableName: string;\n private totalBins?: HistogramRow[];\n private totalError?: Error;\n private totalLoading = true;\n private totalNullCount?: number;\n private readonly valueType: 'date' | 'number';\n\n constructor(options: HistogramClientOptions) {\n super(options.selection);\n this.field = options.field;\n this.onStateChange = options.onStateChange;\n this.tableName = options.tableName;\n this.valueType = options.valueType;\n\n const binned = bin(options.field.name, {steps: options.steps})(\n this,\n 'x',\n ) as unknown as {\n x1: ExprNode;\n x2: ExprNode;\n };\n this.select = {x1: binned.x1, x2: binned.x2, y: count()};\n this.interactor = new Interval1D(this, {\n brush: undefined,\n channel: 'x',\n field: options.field.name,\n peers: false,\n selection: options.selection,\n });\n }\n\n override get filterStable(): boolean {\n return true;\n }\n\n private emitSummary() {\n const totalRows =\n this.totalBins ?? (this.totalLoading ? (this.filteredBins ?? []) : []);\n const total = splitHistogramBins(totalRows);\n const filteredRows =\n this.filteredBins ?? (this.filteredLoading ? (this.totalBins ?? []) : []);\n const filtered = splitHistogramBins(filteredRows);\n\n this.onStateChange({\n error: this.filteredError ?? this.totalError,\n filteredBins: filtered.bins,\n filteredNullCount:\n this.filteredNullCount ??\n (this.filteredLoading ? total.nullCount : filtered.nullCount),\n interactor: this.interactor,\n isLoading: this.filteredLoading || this.totalLoading,\n kind: 'histogram',\n totalBins: total.bins,\n totalNullCount:\n this.totalNullCount ??\n (this.totalLoading ? filtered.nullCount : total.nullCount),\n valueType: this.valueType,\n });\n }\n\n async ensureFieldInfo(): Promise<void> {\n if (this.fieldInfo) {\n return;\n }\n\n if (!this.fieldInfoPromise) {\n this.fieldInfoPromise = queryFieldInfo(this.coordinator!, [\n {\n table: this.tableName,\n column: this.field.name,\n stats: ['min', 'max'],\n },\n ])\n .then(([info]) => {\n this.fieldInfo = info;\n })\n .catch((error) => {\n this.fieldInfo = undefined;\n this.fieldInfoPromise = undefined;\n throw error;\n });\n }\n\n await this.fieldInfoPromise;\n }\n\n setTotalError(error?: Error) {\n this.totalError = error;\n this.totalLoading = false;\n this.emitSummary();\n }\n\n setTotalLoading(isLoading: boolean) {\n this.totalLoading = isLoading;\n if (isLoading) {\n this.totalError = undefined;\n }\n this.emitSummary();\n }\n\n setTotalRows(rows: HistogramRow[]) {\n const {nullCount} = splitHistogramBins(rows);\n this.totalBins = rows;\n this.totalNullCount = nullCount;\n this.totalError = undefined;\n this.totalLoading = false;\n this.emitSummary();\n }\n\n override queryPending(): this {\n this.filteredLoading = true;\n this.filteredError = undefined;\n this.emitSummary();\n return this;\n }\n\n override async prepare(): Promise<void> {\n await this.ensureFieldInfo();\n }\n\n override query(filter: Array<ExprNode> = []): Query {\n return Query.from({source: this.tableName})\n .select(this.select)\n .groupby([this.select.x1, this.select.x2])\n .where(filter);\n }\n\n override queryResult(data: unknown): this {\n const rows = rowsFromQueryResult<HistogramRow>(data);\n const {nullCount} = splitHistogramBins(rows);\n this.filteredBins = rows;\n this.filteredNullCount = nullCount;\n this.filteredError = undefined;\n this.filteredLoading = false;\n this.emitSummary();\n return this;\n }\n\n override queryError(error: Error): this {\n this.filteredError = error;\n this.filteredLoading = false;\n this.emitSummary();\n return this;\n }\n\n channelField(channel: string) {\n if (channel !== 'x') {\n throw new Error('ProfilerHistogramClient only supports x bins');\n }\n if (!this.fieldInfo) {\n throw new Error('Field info is required before histogram binning');\n }\n return this.fieldInfo;\n }\n\n get plot(): {\n getAttribute(name: string): undefined;\n markSet: Set<ProfilerHistogramClient>;\n } {\n const markSet = new Set([this]);\n return {\n getAttribute(_name: string) {\n return undefined;\n },\n markSet,\n };\n }\n}\n\ntype ProfilerHistogramTotalClientOptions = {\n summaryClient: ProfilerHistogramClient;\n};\n\nexport class ProfilerHistogramTotalClient extends MosaicClient {\n private readonly summaryClient: ProfilerHistogramClient;\n\n constructor(options: ProfilerHistogramTotalClientOptions) {\n super();\n this.summaryClient = options.summaryClient;\n }\n\n override async prepare(): Promise<void> {\n await this.summaryClient.ensureFieldInfo();\n }\n\n override queryPending(): this {\n this.summaryClient.setTotalLoading(true);\n return this;\n }\n\n override query(filter: Array<ExprNode> = []): Query {\n return this.summaryClient.query(filter);\n }\n\n override queryResult(data: unknown): this {\n this.summaryClient.setTotalRows(rowsFromQueryResult<HistogramRow>(data));\n return this;\n }\n\n override queryError(error: Error): this {\n this.summaryClient.setTotalError(error);\n return this;\n }\n}\n"]}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { MosaicClient, type Selection } from '@uwdata/mosaic-core';
|
|
2
|
+
import { type ExprNode, type Query } from '@uwdata/mosaic-sql';
|
|
3
|
+
import type { Table } from 'apache-arrow';
|
|
4
|
+
import type { MosaicProfilerPaginationState, MosaicProfilerSorting } from './types';
|
|
5
|
+
export type ProfilerPageState = {
|
|
6
|
+
datasetId?: string;
|
|
7
|
+
error?: Error;
|
|
8
|
+
isLoading: boolean;
|
|
9
|
+
pageTable?: Table;
|
|
10
|
+
};
|
|
11
|
+
type ProfilerPageClientOptions = {
|
|
12
|
+
columns: string[];
|
|
13
|
+
filter?: ReturnType<Selection['predicate']>;
|
|
14
|
+
onStateChange: (state: ProfilerPageState) => void;
|
|
15
|
+
pagination: MosaicProfilerPaginationState;
|
|
16
|
+
sorting: MosaicProfilerSorting;
|
|
17
|
+
tableName: string;
|
|
18
|
+
};
|
|
19
|
+
export declare class ProfilerPageClient extends MosaicClient {
|
|
20
|
+
private readonly columns;
|
|
21
|
+
private readonly datasetId;
|
|
22
|
+
private error?;
|
|
23
|
+
private readonly filter?;
|
|
24
|
+
private readonly onStateChange;
|
|
25
|
+
private readonly pagination;
|
|
26
|
+
private pageTable?;
|
|
27
|
+
private readonly sorting;
|
|
28
|
+
private readonly tableName;
|
|
29
|
+
constructor(options: ProfilerPageClientOptions);
|
|
30
|
+
get filterStable(): boolean;
|
|
31
|
+
queryPending(): this;
|
|
32
|
+
query(filter?: Array<ExprNode>): Query;
|
|
33
|
+
queryResult(data: unknown): this;
|
|
34
|
+
queryError(error: Error): this;
|
|
35
|
+
}
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=ProfilerPageClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProfilerPageClient.d.ts","sourceRoot":"","sources":["../../src/profiler/ProfilerPageClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAE,KAAK,SAAS,EAAC,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAC,KAAK,QAAQ,EAAE,KAAK,KAAK,EAAC,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,EACV,6BAA6B,EAC7B,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAGjB,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,KAAK,CAAC;CACnB,CAAC;AAEF,KAAK,yBAAyB,GAAG;IAC/B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;IAC5C,aAAa,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAClD,UAAU,EAAE,6BAA6B,CAAC;IAC1C,OAAO,EAAE,qBAAqB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,qBAAa,kBAAmB,SAAQ,YAAY;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAW;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,KAAK,CAAC,CAAQ;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAqC;IAC7D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqC;IACnE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgC;IAC3D,OAAO,CAAC,SAAS,CAAC,CAAQ;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,OAAO,EAAE,yBAAyB;IAW9C,IAAa,YAAY,IAAI,OAAO,CAEnC;IAEQ,YAAY,IAAI,IAAI;IAUpB,KAAK,CAAC,MAAM,GAAE,KAAK,CAAC,QAAQ,CAAM,GAAG,KAAK;IAa1C,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAWhC,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;CAUxC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { MosaicClient } from '@uwdata/mosaic-core';
|
|
2
|
+
import { buildProfilerBaseQuery, buildProfilerPageQuery } from './utils';
|
|
3
|
+
export class ProfilerPageClient extends MosaicClient {
|
|
4
|
+
columns;
|
|
5
|
+
datasetId;
|
|
6
|
+
error;
|
|
7
|
+
filter;
|
|
8
|
+
onStateChange;
|
|
9
|
+
pagination;
|
|
10
|
+
pageTable;
|
|
11
|
+
sorting;
|
|
12
|
+
tableName;
|
|
13
|
+
constructor(options) {
|
|
14
|
+
super();
|
|
15
|
+
this.columns = options.columns;
|
|
16
|
+
this.datasetId = [options.tableName, ...options.columns].join('\u0001');
|
|
17
|
+
this.filter = options.filter ?? [];
|
|
18
|
+
this.onStateChange = options.onStateChange;
|
|
19
|
+
this.pagination = options.pagination;
|
|
20
|
+
this.sorting = options.sorting;
|
|
21
|
+
this.tableName = options.tableName;
|
|
22
|
+
}
|
|
23
|
+
get filterStable() {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
queryPending() {
|
|
27
|
+
this.onStateChange({
|
|
28
|
+
datasetId: this.datasetId,
|
|
29
|
+
error: this.error,
|
|
30
|
+
isLoading: true,
|
|
31
|
+
pageTable: this.pageTable,
|
|
32
|
+
});
|
|
33
|
+
return this;
|
|
34
|
+
}
|
|
35
|
+
query(filter = []) {
|
|
36
|
+
const resolvedFilter = this.filter ?? filter;
|
|
37
|
+
return buildProfilerPageQuery(buildProfilerBaseQuery({
|
|
38
|
+
columns: this.columns,
|
|
39
|
+
filter: resolvedFilter,
|
|
40
|
+
sorting: this.sorting,
|
|
41
|
+
tableName: this.tableName,
|
|
42
|
+
}), this.pagination);
|
|
43
|
+
}
|
|
44
|
+
queryResult(data) {
|
|
45
|
+
this.error = undefined;
|
|
46
|
+
this.pageTable = data;
|
|
47
|
+
this.onStateChange({
|
|
48
|
+
datasetId: this.datasetId,
|
|
49
|
+
isLoading: false,
|
|
50
|
+
pageTable: this.pageTable,
|
|
51
|
+
});
|
|
52
|
+
return this;
|
|
53
|
+
}
|
|
54
|
+
queryError(error) {
|
|
55
|
+
this.error = error;
|
|
56
|
+
this.onStateChange({
|
|
57
|
+
datasetId: this.datasetId,
|
|
58
|
+
error,
|
|
59
|
+
isLoading: false,
|
|
60
|
+
pageTable: this.pageTable,
|
|
61
|
+
});
|
|
62
|
+
return this;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=ProfilerPageClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProfilerPageClient.js","sourceRoot":"","sources":["../../src/profiler/ProfilerPageClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAiB,MAAM,qBAAqB,CAAC;AAOjE,OAAO,EAAC,sBAAsB,EAAE,sBAAsB,EAAC,MAAM,SAAS,CAAC;AAkBvE,MAAM,OAAO,kBAAmB,SAAQ,YAAY;IACjC,OAAO,CAAW;IAClB,SAAS,CAAS;IAC3B,KAAK,CAAS;IACL,MAAM,CAAsC;IAC5C,aAAa,CAAqC;IAClD,UAAU,CAAgC;IACnD,SAAS,CAAS;IACT,OAAO,CAAwB;IAC/B,SAAS,CAAS;IAEnC,YAAY,OAAkC;QAC5C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACrC,CAAC;IAED,IAAa,YAAY;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IAEQ,YAAY;QACnB,IAAI,CAAC,aAAa,CAAC;YACjB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS,EAAE,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAEQ,KAAK,CAAC,SAA0B,EAAE;QACzC,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC;QAC7C,OAAO,sBAAsB,CAC3B,sBAAsB,CAAC;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,cAAc;YACtB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,EACF,IAAI,CAAC,UAAU,CAChB,CAAC;IACJ,CAAC;IAEQ,WAAW,CAAC,IAAa;QAChC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,IAAa,CAAC;QAC/B,IAAI,CAAC,aAAa,CAAC;YACjB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAEQ,UAAU,CAAC,KAAY;QAC9B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,aAAa,CAAC;YACjB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK;YACL,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;CACF","sourcesContent":["import {MosaicClient, type Selection} from '@uwdata/mosaic-core';\nimport {type ExprNode, type Query} from '@uwdata/mosaic-sql';\nimport type {Table} from 'apache-arrow';\nimport type {\n MosaicProfilerPaginationState,\n MosaicProfilerSorting,\n} from './types';\nimport {buildProfilerBaseQuery, buildProfilerPageQuery} from './utils';\n\nexport type ProfilerPageState = {\n datasetId?: string;\n error?: Error;\n isLoading: boolean;\n pageTable?: Table;\n};\n\ntype ProfilerPageClientOptions = {\n columns: string[];\n filter?: ReturnType<Selection['predicate']>;\n onStateChange: (state: ProfilerPageState) => void;\n pagination: MosaicProfilerPaginationState;\n sorting: MosaicProfilerSorting;\n tableName: string;\n};\n\nexport class ProfilerPageClient extends MosaicClient {\n private readonly columns: string[];\n private readonly datasetId: string;\n private error?: Error;\n private readonly filter?: ReturnType<Selection['predicate']>;\n private readonly onStateChange: (state: ProfilerPageState) => void;\n private readonly pagination: MosaicProfilerPaginationState;\n private pageTable?: Table;\n private readonly sorting: MosaicProfilerSorting;\n private readonly tableName: string;\n\n constructor(options: ProfilerPageClientOptions) {\n super();\n this.columns = options.columns;\n this.datasetId = [options.tableName, ...options.columns].join('\\u0001');\n this.filter = options.filter ?? [];\n this.onStateChange = options.onStateChange;\n this.pagination = options.pagination;\n this.sorting = options.sorting;\n this.tableName = options.tableName;\n }\n\n override get filterStable(): boolean {\n return false;\n }\n\n override queryPending(): this {\n this.onStateChange({\n datasetId: this.datasetId,\n error: this.error,\n isLoading: true,\n pageTable: this.pageTable,\n });\n return this;\n }\n\n override query(filter: Array<ExprNode> = []): Query {\n const resolvedFilter = this.filter ?? filter;\n return buildProfilerPageQuery(\n buildProfilerBaseQuery({\n columns: this.columns,\n filter: resolvedFilter,\n sorting: this.sorting,\n tableName: this.tableName,\n }),\n this.pagination,\n );\n }\n\n override queryResult(data: unknown): this {\n this.error = undefined;\n this.pageTable = data as Table;\n this.onStateChange({\n datasetId: this.datasetId,\n isLoading: false,\n pageTable: this.pageTable,\n });\n return this;\n }\n\n override queryError(error: Error): this {\n this.error = error;\n this.onStateChange({\n datasetId: this.datasetId,\n error,\n isLoading: false,\n pageTable: this.pageTable,\n });\n return this;\n }\n}\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { MosaicClient, type Selection } from '@uwdata/mosaic-core';
|
|
2
|
+
import { type ExprNode, type Query } from '@uwdata/mosaic-sql';
|
|
3
|
+
import type * as arrow from 'apache-arrow';
|
|
4
|
+
import type { MosaicProfilerUnsupportedSummary } from './types';
|
|
5
|
+
type UnsupportedSummaryClientOptions = {
|
|
6
|
+
field: arrow.Field;
|
|
7
|
+
onStateChange: (summary: MosaicProfilerUnsupportedSummary) => void;
|
|
8
|
+
selection: Selection;
|
|
9
|
+
tableName: string;
|
|
10
|
+
};
|
|
11
|
+
export declare class ProfilerUnsupportedSummaryClient extends MosaicClient {
|
|
12
|
+
private count;
|
|
13
|
+
private readonly field;
|
|
14
|
+
private readonly onStateChange;
|
|
15
|
+
private readonly tableName;
|
|
16
|
+
constructor(options: UnsupportedSummaryClientOptions);
|
|
17
|
+
get filterStable(): boolean;
|
|
18
|
+
queryPending(): this;
|
|
19
|
+
query(filter?: Array<ExprNode>): Query;
|
|
20
|
+
queryResult(data: unknown): this;
|
|
21
|
+
queryError(error: Error): this;
|
|
22
|
+
}
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=ProfilerUnsupportedSummaryClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProfilerUnsupportedSummaryClient.d.ts","sourceRoot":"","sources":["../../src/profiler/ProfilerUnsupportedSummaryClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAE,KAAK,SAAS,EAAC,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAC,KAAK,QAAQ,EAAE,KAAK,KAAK,EAAC,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAC,gCAAgC,EAAC,MAAM,SAAS,CAAC;AAG9D,KAAK,+BAA+B,GAAG;IACrC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;IACnB,aAAa,EAAE,CAAC,OAAO,EAAE,gCAAgC,KAAK,IAAI,CAAC;IACnE,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,qBAAa,gCAAiC,SAAQ,YAAY;IAChE,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAEpB;IACV,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,OAAO,EAAE,+BAA+B;IAOpD,IAAa,YAAY,IAAI,OAAO,CAEnC;IAEQ,YAAY,IAAI,IAAI;IASpB,KAAK,CAAC,MAAM,GAAE,KAAK,CAAC,QAAQ,CAAM,GAAG,KAAK;IAQ1C,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAUhC,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;CASxC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { MosaicClient } from '@uwdata/mosaic-core';
|
|
2
|
+
import { buildDistinctCountQuery, readCountData } from './utils';
|
|
3
|
+
export class ProfilerUnsupportedSummaryClient extends MosaicClient {
|
|
4
|
+
count = 0;
|
|
5
|
+
field;
|
|
6
|
+
onStateChange;
|
|
7
|
+
tableName;
|
|
8
|
+
constructor(options) {
|
|
9
|
+
super(options.selection);
|
|
10
|
+
this.field = options.field;
|
|
11
|
+
this.onStateChange = options.onStateChange;
|
|
12
|
+
this.tableName = options.tableName;
|
|
13
|
+
}
|
|
14
|
+
get filterStable() {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
queryPending() {
|
|
18
|
+
this.onStateChange({
|
|
19
|
+
isLoading: true,
|
|
20
|
+
kind: 'unsupported',
|
|
21
|
+
label: `${this.count.toLocaleString()} distinct values`,
|
|
22
|
+
});
|
|
23
|
+
return this;
|
|
24
|
+
}
|
|
25
|
+
query(filter = []) {
|
|
26
|
+
return buildDistinctCountQuery({
|
|
27
|
+
fieldName: this.field.name,
|
|
28
|
+
filter,
|
|
29
|
+
tableName: this.tableName,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
queryResult(data) {
|
|
33
|
+
this.count = readCountData(data) ?? 0;
|
|
34
|
+
this.onStateChange({
|
|
35
|
+
isLoading: false,
|
|
36
|
+
kind: 'unsupported',
|
|
37
|
+
label: `${this.count.toLocaleString()} distinct values`,
|
|
38
|
+
});
|
|
39
|
+
return this;
|
|
40
|
+
}
|
|
41
|
+
queryError(error) {
|
|
42
|
+
this.onStateChange({
|
|
43
|
+
error,
|
|
44
|
+
isLoading: false,
|
|
45
|
+
kind: 'unsupported',
|
|
46
|
+
label: `${this.count.toLocaleString()} distinct values`,
|
|
47
|
+
});
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=ProfilerUnsupportedSummaryClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProfilerUnsupportedSummaryClient.js","sourceRoot":"","sources":["../../src/profiler/ProfilerUnsupportedSummaryClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAiB,MAAM,qBAAqB,CAAC;AAIjE,OAAO,EAAC,uBAAuB,EAAE,aAAa,EAAC,MAAM,SAAS,CAAC;AAS/D,MAAM,OAAO,gCAAiC,SAAQ,YAAY;IACxD,KAAK,GAAG,CAAC,CAAC;IACD,KAAK,CAAc;IACnB,aAAa,CAEpB;IACO,SAAS,CAAS;IAEnC,YAAY,OAAwC;QAClD,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACrC,CAAC;IAED,IAAa,YAAY;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IAEQ,YAAY;QACnB,IAAI,CAAC,aAAa,CAAC;YACjB,SAAS,EAAE,IAAI;YACf,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,kBAAkB;SACxD,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAEQ,KAAK,CAAC,SAA0B,EAAE;QACzC,OAAO,uBAAuB,CAAC;YAC7B,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;YAC1B,MAAM;YACN,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;IACL,CAAC;IAEQ,WAAW,CAAC,IAAa;QAChC,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,aAAa,CAAC;YACjB,SAAS,EAAE,KAAK;YAChB,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,kBAAkB;SACxD,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAEQ,UAAU,CAAC,KAAY;QAC9B,IAAI,CAAC,aAAa,CAAC;YACjB,KAAK;YACL,SAAS,EAAE,KAAK;YAChB,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,kBAAkB;SACxD,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;CACF","sourcesContent":["import {MosaicClient, type Selection} from '@uwdata/mosaic-core';\nimport {type ExprNode, type Query} from '@uwdata/mosaic-sql';\nimport type * as arrow from 'apache-arrow';\nimport type {MosaicProfilerUnsupportedSummary} from './types';\nimport {buildDistinctCountQuery, readCountData} from './utils';\n\ntype UnsupportedSummaryClientOptions = {\n field: arrow.Field;\n onStateChange: (summary: MosaicProfilerUnsupportedSummary) => void;\n selection: Selection;\n tableName: string;\n};\n\nexport class ProfilerUnsupportedSummaryClient extends MosaicClient {\n private count = 0;\n private readonly field: arrow.Field;\n private readonly onStateChange: (\n summary: MosaicProfilerUnsupportedSummary,\n ) => void;\n private readonly tableName: string;\n\n constructor(options: UnsupportedSummaryClientOptions) {\n super(options.selection);\n this.field = options.field;\n this.onStateChange = options.onStateChange;\n this.tableName = options.tableName;\n }\n\n override get filterStable(): boolean {\n return false;\n }\n\n override queryPending(): this {\n this.onStateChange({\n isLoading: true,\n kind: 'unsupported',\n label: `${this.count.toLocaleString()} distinct values`,\n });\n return this;\n }\n\n override query(filter: Array<ExprNode> = []): Query {\n return buildDistinctCountQuery({\n fieldName: this.field.name,\n filter,\n tableName: this.tableName,\n });\n }\n\n override queryResult(data: unknown): this {\n this.count = readCountData(data) ?? 0;\n this.onStateChange({\n isLoading: false,\n kind: 'unsupported',\n label: `${this.count.toLocaleString()} distinct values`,\n });\n return this;\n }\n\n override queryError(error: Error): this {\n this.onStateChange({\n error,\n isLoading: false,\n kind: 'unsupported',\n label: `${this.count.toLocaleString()} distinct values`,\n });\n return this;\n }\n}\n"]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type * as arrow from 'apache-arrow';
|
|
2
|
+
import type { Dispatch, SetStateAction } from 'react';
|
|
3
|
+
import type { ProfilerCountState } from './ProfilerCountClient';
|
|
4
|
+
import type { ProfilerPageState } from './ProfilerPageClient';
|
|
5
|
+
import type { MosaicProfilerPaginationState, MosaicProfilerSorting, MosaicProfilerSummaryState } from './types';
|
|
6
|
+
export type ProfilerStoreState = {
|
|
7
|
+
filteredCount: ProfilerCountState;
|
|
8
|
+
lastNonEmptyPageTable?: {
|
|
9
|
+
datasetId: string;
|
|
10
|
+
pageTable: arrow.Table;
|
|
11
|
+
};
|
|
12
|
+
page: ProfilerPageState;
|
|
13
|
+
pagination: MosaicProfilerPaginationState;
|
|
14
|
+
schema: {
|
|
15
|
+
error?: Error;
|
|
16
|
+
fields: arrow.Field[];
|
|
17
|
+
isLoading: boolean;
|
|
18
|
+
};
|
|
19
|
+
setFilteredCount: (state: ProfilerCountState) => void;
|
|
20
|
+
setPage: (state: ProfilerPageState) => void;
|
|
21
|
+
setPagination: Dispatch<SetStateAction<MosaicProfilerPaginationState>>;
|
|
22
|
+
setSchemaError: (error?: Error) => void;
|
|
23
|
+
setSchemaLoading: (isLoading: boolean) => void;
|
|
24
|
+
setSchemaSuccess: (fields: arrow.Field[]) => void;
|
|
25
|
+
setSorting: Dispatch<SetStateAction<MosaicProfilerSorting>>;
|
|
26
|
+
setSummary: (fieldName: string, summary: MosaicProfilerSummaryState) => void;
|
|
27
|
+
setTotalCount: (state: ProfilerCountState) => void;
|
|
28
|
+
sorting: MosaicProfilerSorting;
|
|
29
|
+
summaries: Record<string, MosaicProfilerSummaryState>;
|
|
30
|
+
syncPageSize: (pageSize: number) => void;
|
|
31
|
+
totalCount: ProfilerCountState;
|
|
32
|
+
clearSummaries: () => void;
|
|
33
|
+
initializeSummaries: (fields: arrow.Field[]) => void;
|
|
34
|
+
resetPageIndex: () => void;
|
|
35
|
+
};
|
|
36
|
+
export type ProfilerStore = ReturnType<typeof createProfilerStore>;
|
|
37
|
+
/**
|
|
38
|
+
* Creates a profiler-local vanilla Zustand store that aggregates schema, row,
|
|
39
|
+
* count, and summary state for a single `useMosaicProfiler()` instance.
|
|
40
|
+
*/
|
|
41
|
+
export declare function createProfilerStore(options: {
|
|
42
|
+
initialSorting?: MosaicProfilerSorting;
|
|
43
|
+
pageSize: number;
|
|
44
|
+
}): import("zustand").StoreApi<ProfilerStoreState>;
|
|
45
|
+
//# sourceMappingURL=createProfilerStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createProfilerStore.d.ts","sourceRoot":"","sources":["../../src/profiler/createProfilerStore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAC,QAAQ,EAAE,cAAc,EAAC,MAAM,OAAO,CAAC;AAEpD,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EACV,6BAA6B,EAC7B,qBAAqB,EACrB,0BAA0B,EAC3B,MAAM,SAAS,CAAC;AAWjB,MAAM,MAAM,kBAAkB,GAAG;IAC/B,aAAa,EAAE,kBAAkB,CAAC;IAClC,qBAAqB,CAAC,EAAE;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC;KACxB,CAAC;IACF,IAAI,EAAE,iBAAiB,CAAC;IACxB,UAAU,EAAE,6BAA6B,CAAC;IAC1C,MAAM,EAAE;QACN,KAAK,CAAC,EAAE,KAAK,CAAC;QACd,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;QACtB,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;IACF,gBAAgB,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACtD,OAAO,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC5C,aAAa,EAAE,QAAQ,CAAC,cAAc,CAAC,6BAA6B,CAAC,CAAC,CAAC;IACvE,cAAc,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IACxC,gBAAgB,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,gBAAgB,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC;IAClD,UAAU,EAAE,QAAQ,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAC5D,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,0BAA0B,KAAK,IAAI,CAAC;IAC7E,aAAa,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACnD,OAAO,EAAE,qBAAqB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;IACtD,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,UAAU,EAAE,kBAAkB,CAAC;IAC/B,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,mBAAmB,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC;IACrD,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEnE;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IAC3C,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,QAAQ,EAAE,MAAM,CAAC;CAClB,kDAyIA"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { castDraft, produce } from 'immer';
|
|
2
|
+
import { createStore } from 'zustand/vanilla';
|
|
3
|
+
import { createEmptySummaryState, normalizeProfilerPagination } from './utils';
|
|
4
|
+
function resolveSetStateAction(next, previous) {
|
|
5
|
+
// Preserve React-style setter semantics so hook callers can pass either
|
|
6
|
+
// a concrete value or an updater function to the local profiler store.
|
|
7
|
+
return typeof next === 'function'
|
|
8
|
+
? next(previous)
|
|
9
|
+
: next;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Creates a profiler-local vanilla Zustand store that aggregates schema, row,
|
|
13
|
+
* count, and summary state for a single `useMosaicProfiler()` instance.
|
|
14
|
+
*/
|
|
15
|
+
export function createProfilerStore(options) {
|
|
16
|
+
const { initialSorting = [], pageSize } = options;
|
|
17
|
+
return createStore((set) => ({
|
|
18
|
+
filteredCount: { isLoading: false },
|
|
19
|
+
lastNonEmptyPageTable: undefined,
|
|
20
|
+
page: { isLoading: false },
|
|
21
|
+
pagination: normalizeProfilerPagination({ pageIndex: 0, pageSize }),
|
|
22
|
+
schema: {
|
|
23
|
+
fields: [],
|
|
24
|
+
isLoading: false,
|
|
25
|
+
},
|
|
26
|
+
setFilteredCount: (nextState) => {
|
|
27
|
+
set((state) => produce(state, (draft) => {
|
|
28
|
+
draft.filteredCount = nextState;
|
|
29
|
+
}));
|
|
30
|
+
},
|
|
31
|
+
setPage: (nextState) => {
|
|
32
|
+
set((state) => produce(state, (draft) => {
|
|
33
|
+
draft.page = castDraft(nextState);
|
|
34
|
+
if (nextState.datasetId &&
|
|
35
|
+
nextState.pageTable &&
|
|
36
|
+
nextState.pageTable.numRows > 0) {
|
|
37
|
+
draft.lastNonEmptyPageTable = {
|
|
38
|
+
datasetId: nextState.datasetId,
|
|
39
|
+
pageTable: castDraft(nextState.pageTable),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}));
|
|
43
|
+
},
|
|
44
|
+
setPagination: (next) => {
|
|
45
|
+
set((state) => produce(state, (draft) => {
|
|
46
|
+
draft.pagination = normalizeProfilerPagination(resolveSetStateAction(next, state.pagination));
|
|
47
|
+
}));
|
|
48
|
+
},
|
|
49
|
+
setSchemaError: (error) => {
|
|
50
|
+
set((state) => produce(state, (draft) => {
|
|
51
|
+
draft.schema.error = error;
|
|
52
|
+
draft.schema.isLoading = false;
|
|
53
|
+
}));
|
|
54
|
+
},
|
|
55
|
+
setSchemaLoading: (isLoading) => {
|
|
56
|
+
set((state) => produce(state, (draft) => {
|
|
57
|
+
draft.schema.isLoading = isLoading;
|
|
58
|
+
if (isLoading) {
|
|
59
|
+
draft.schema.error = undefined;
|
|
60
|
+
}
|
|
61
|
+
}));
|
|
62
|
+
},
|
|
63
|
+
setSchemaSuccess: (fields) => {
|
|
64
|
+
set((state) => produce(state, (draft) => {
|
|
65
|
+
draft.schema.error = undefined;
|
|
66
|
+
draft.schema.fields = fields;
|
|
67
|
+
draft.schema.isLoading = false;
|
|
68
|
+
}));
|
|
69
|
+
},
|
|
70
|
+
setSorting: (next) => {
|
|
71
|
+
set((state) => produce(state, (draft) => {
|
|
72
|
+
draft.sorting = resolveSetStateAction(next, state.sorting);
|
|
73
|
+
draft.pagination.pageIndex = 0;
|
|
74
|
+
}));
|
|
75
|
+
},
|
|
76
|
+
setSummary: (fieldName, summary) => {
|
|
77
|
+
set((state) => produce(state, (draft) => {
|
|
78
|
+
draft.summaries[fieldName] = summary;
|
|
79
|
+
}));
|
|
80
|
+
},
|
|
81
|
+
setTotalCount: (nextState) => {
|
|
82
|
+
set((state) => produce(state, (draft) => {
|
|
83
|
+
draft.totalCount = nextState;
|
|
84
|
+
}));
|
|
85
|
+
},
|
|
86
|
+
sorting: initialSorting,
|
|
87
|
+
summaries: {},
|
|
88
|
+
syncPageSize: (nextPageSize) => {
|
|
89
|
+
set((state) => produce(state, (draft) => {
|
|
90
|
+
if (draft.pagination.pageSize === nextPageSize) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
draft.pagination = normalizeProfilerPagination({
|
|
94
|
+
pageIndex: 0,
|
|
95
|
+
pageSize: nextPageSize,
|
|
96
|
+
});
|
|
97
|
+
}));
|
|
98
|
+
},
|
|
99
|
+
totalCount: { isLoading: false },
|
|
100
|
+
clearSummaries: () => {
|
|
101
|
+
set((state) => produce(state, (draft) => {
|
|
102
|
+
draft.summaries = {};
|
|
103
|
+
}));
|
|
104
|
+
},
|
|
105
|
+
initializeSummaries: (fields) => {
|
|
106
|
+
set((state) => produce(state, (draft) => {
|
|
107
|
+
draft.summaries = Object.fromEntries(fields.map((field) => [field.name, createEmptySummaryState(field)]));
|
|
108
|
+
}));
|
|
109
|
+
},
|
|
110
|
+
resetPageIndex: () => {
|
|
111
|
+
set((state) => produce(state, (draft) => {
|
|
112
|
+
draft.pagination = normalizeProfilerPagination({
|
|
113
|
+
...draft.pagination,
|
|
114
|
+
pageIndex: 0,
|
|
115
|
+
});
|
|
116
|
+
}));
|
|
117
|
+
},
|
|
118
|
+
}));
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=createProfilerStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createProfilerStore.js","sourceRoot":"","sources":["../../src/profiler/createProfilerStore.ts"],"names":[],"mappings":"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","sourcesContent":["import {castDraft, produce} from 'immer';\nimport type * as arrow from 'apache-arrow';\nimport type {Dispatch, SetStateAction} from 'react';\nimport {createStore} from 'zustand/vanilla';\nimport type {ProfilerCountState} from './ProfilerCountClient';\nimport type {ProfilerPageState} from './ProfilerPageClient';\nimport type {\n MosaicProfilerPaginationState,\n MosaicProfilerSorting,\n MosaicProfilerSummaryState,\n} from './types';\nimport {createEmptySummaryState, normalizeProfilerPagination} from './utils';\n\nfunction resolveSetStateAction<T>(next: SetStateAction<T>, previous: T): T {\n // Preserve React-style setter semantics so hook callers can pass either\n // a concrete value or an updater function to the local profiler store.\n return typeof next === 'function'\n ? (next as (value: T) => T)(previous)\n : next;\n}\n\nexport type ProfilerStoreState = {\n filteredCount: ProfilerCountState;\n lastNonEmptyPageTable?: {\n datasetId: string;\n pageTable: arrow.Table;\n };\n page: ProfilerPageState;\n pagination: MosaicProfilerPaginationState;\n schema: {\n error?: Error;\n fields: arrow.Field[];\n isLoading: boolean;\n };\n setFilteredCount: (state: ProfilerCountState) => void;\n setPage: (state: ProfilerPageState) => void;\n setPagination: Dispatch<SetStateAction<MosaicProfilerPaginationState>>;\n setSchemaError: (error?: Error) => void;\n setSchemaLoading: (isLoading: boolean) => void;\n setSchemaSuccess: (fields: arrow.Field[]) => void;\n setSorting: Dispatch<SetStateAction<MosaicProfilerSorting>>;\n setSummary: (fieldName: string, summary: MosaicProfilerSummaryState) => void;\n setTotalCount: (state: ProfilerCountState) => void;\n sorting: MosaicProfilerSorting;\n summaries: Record<string, MosaicProfilerSummaryState>;\n syncPageSize: (pageSize: number) => void;\n totalCount: ProfilerCountState;\n clearSummaries: () => void;\n initializeSummaries: (fields: arrow.Field[]) => void;\n resetPageIndex: () => void;\n};\n\nexport type ProfilerStore = ReturnType<typeof createProfilerStore>;\n\n/**\n * Creates a profiler-local vanilla Zustand store that aggregates schema, row,\n * count, and summary state for a single `useMosaicProfiler()` instance.\n */\nexport function createProfilerStore(options: {\n initialSorting?: MosaicProfilerSorting;\n pageSize: number;\n}) {\n const {initialSorting = [], pageSize} = options;\n\n return createStore<ProfilerStoreState>((set) => ({\n filteredCount: {isLoading: false},\n lastNonEmptyPageTable: undefined,\n page: {isLoading: false},\n pagination: normalizeProfilerPagination({pageIndex: 0, pageSize}),\n schema: {\n fields: [],\n isLoading: false,\n },\n setFilteredCount: (nextState) => {\n set((state) =>\n produce(state, (draft) => {\n draft.filteredCount = nextState;\n }),\n );\n },\n setPage: (nextState) => {\n set((state) =>\n produce(state, (draft) => {\n draft.page = castDraft(nextState);\n if (\n nextState.datasetId &&\n nextState.pageTable &&\n nextState.pageTable.numRows > 0\n ) {\n draft.lastNonEmptyPageTable = {\n datasetId: nextState.datasetId,\n pageTable: castDraft(nextState.pageTable),\n };\n }\n }),\n );\n },\n setPagination: (next) => {\n set((state) =>\n produce(state, (draft) => {\n draft.pagination = normalizeProfilerPagination(\n resolveSetStateAction(next, state.pagination),\n );\n }),\n );\n },\n setSchemaError: (error) => {\n set((state) =>\n produce(state, (draft) => {\n draft.schema.error = error;\n draft.schema.isLoading = false;\n }),\n );\n },\n setSchemaLoading: (isLoading) => {\n set((state) =>\n produce(state, (draft) => {\n draft.schema.isLoading = isLoading;\n if (isLoading) {\n draft.schema.error = undefined;\n }\n }),\n );\n },\n setSchemaSuccess: (fields) => {\n set((state) =>\n produce(state, (draft) => {\n draft.schema.error = undefined;\n draft.schema.fields = fields;\n draft.schema.isLoading = false;\n }),\n );\n },\n setSorting: (next) => {\n set((state) =>\n produce(state, (draft) => {\n draft.sorting = resolveSetStateAction(next, state.sorting);\n draft.pagination.pageIndex = 0;\n }),\n );\n },\n setSummary: (fieldName, summary) => {\n set((state) =>\n produce(state, (draft) => {\n draft.summaries[fieldName] = summary;\n }),\n );\n },\n setTotalCount: (nextState) => {\n set((state) =>\n produce(state, (draft) => {\n draft.totalCount = nextState;\n }),\n );\n },\n sorting: initialSorting,\n summaries: {},\n syncPageSize: (nextPageSize) => {\n set((state) =>\n produce(state, (draft) => {\n if (draft.pagination.pageSize === nextPageSize) {\n return;\n }\n draft.pagination = normalizeProfilerPagination({\n pageIndex: 0,\n pageSize: nextPageSize,\n });\n }),\n );\n },\n totalCount: {isLoading: false},\n clearSummaries: () => {\n set((state) =>\n produce(state, (draft) => {\n draft.summaries = {};\n }),\n );\n },\n initializeSummaries: (fields) => {\n set((state) =>\n produce(state, (draft) => {\n draft.summaries = Object.fromEntries(\n fields.map((field) => [field.name, createEmptySummaryState(field)]),\n );\n }),\n );\n },\n resetPageIndex: () => {\n set((state) =>\n produce(state, (draft) => {\n draft.pagination = normalizeProfilerPagination({\n ...draft.pagination,\n pageIndex: 0,\n });\n }),\n );\n },\n }));\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { MosaicProfilerColumnState } from './types';
|
|
2
|
+
export declare const PROFILER_ROW_NUMBER_COLUMN_WIDTH_PX = 40;
|
|
3
|
+
export declare const PROFILER_DEFAULT_COLUMN_WIDTH_PX = 140;
|
|
4
|
+
export declare const PROFILER_UNSUPPORTED_COLUMN_WIDTH_PX = 104;
|
|
5
|
+
export declare function getProfilerColumnWidthPx(column: MosaicProfilerColumnState): 140 | 104;
|
|
6
|
+
export declare function getProfilerTableWidth(columns: MosaicProfilerColumnState[]): number;
|
|
7
|
+
//# sourceMappingURL=layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/profiler/layout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,yBAAyB,EAAC,MAAM,SAAS,CAAC;AAEvD,eAAO,MAAM,mCAAmC,KAAK,CAAC;AACtD,eAAO,MAAM,gCAAgC,MAAM,CAAC;AACpD,eAAO,MAAM,oCAAoC,MAAM,CAAC;AAExD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,yBAAyB,aAIzE;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,yBAAyB,EAAE,UAQzE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const PROFILER_ROW_NUMBER_COLUMN_WIDTH_PX = 40;
|
|
2
|
+
export const PROFILER_DEFAULT_COLUMN_WIDTH_PX = 140;
|
|
3
|
+
export const PROFILER_UNSUPPORTED_COLUMN_WIDTH_PX = 104;
|
|
4
|
+
export function getProfilerColumnWidthPx(column) {
|
|
5
|
+
return column.kind === 'unsupported'
|
|
6
|
+
? PROFILER_UNSUPPORTED_COLUMN_WIDTH_PX
|
|
7
|
+
: PROFILER_DEFAULT_COLUMN_WIDTH_PX;
|
|
8
|
+
}
|
|
9
|
+
export function getProfilerTableWidth(columns) {
|
|
10
|
+
return (PROFILER_ROW_NUMBER_COLUMN_WIDTH_PX +
|
|
11
|
+
columns.reduce((total, column) => total + getProfilerColumnWidthPx(column), 0));
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/profiler/layout.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mCAAmC,GAAG,EAAE,CAAC;AACtD,MAAM,CAAC,MAAM,gCAAgC,GAAG,GAAG,CAAC;AACpD,MAAM,CAAC,MAAM,oCAAoC,GAAG,GAAG,CAAC;AAExD,MAAM,UAAU,wBAAwB,CAAC,MAAiC;IACxE,OAAO,MAAM,CAAC,IAAI,KAAK,aAAa;QAClC,CAAC,CAAC,oCAAoC;QACtC,CAAC,CAAC,gCAAgC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAoC;IACxE,OAAO,CACL,mCAAmC;QACnC,OAAO,CAAC,MAAM,CACZ,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,GAAG,wBAAwB,CAAC,MAAM,CAAC,EAC3D,CAAC,CACF,CACF,CAAC;AACJ,CAAC","sourcesContent":["import type {MosaicProfilerColumnState} from './types';\n\nexport const PROFILER_ROW_NUMBER_COLUMN_WIDTH_PX = 40;\nexport const PROFILER_DEFAULT_COLUMN_WIDTH_PX = 140;\nexport const PROFILER_UNSUPPORTED_COLUMN_WIDTH_PX = 104;\n\nexport function getProfilerColumnWidthPx(column: MosaicProfilerColumnState) {\n return column.kind === 'unsupported'\n ? PROFILER_UNSUPPORTED_COLUMN_WIDTH_PX\n : PROFILER_DEFAULT_COLUMN_WIDTH_PX;\n}\n\nexport function getProfilerTableWidth(columns: MosaicProfilerColumnState[]) {\n return (\n PROFILER_ROW_NUMBER_COLUMN_WIDTH_PX +\n columns.reduce(\n (total, column) => total + getProfilerColumnWidthPx(column),\n 0,\n )\n );\n}\n"]}
|