@sqlrooms/mosaic 0.29.0-rc.2 → 0.29.0-rc.4
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 +209 -0
- package/dist/MosaicChartBuilder.d.ts +44 -13
- package/dist/MosaicChartBuilder.d.ts.map +1 -1
- package/dist/MosaicChartBuilder.js +22 -30
- package/dist/MosaicChartBuilder.js.map +1 -1
- package/dist/MosaicSlice.d.ts +28 -10
- package/dist/MosaicSlice.d.ts.map +1 -1
- package/dist/MosaicSlice.js +77 -11
- 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 +18 -2
- package/dist/VgPlotChart.d.ts.map +1 -1
- package/dist/VgPlotChart.js +112 -26
- package/dist/VgPlotChart.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/chart/chart-settings/ChartSettings.d.ts +44 -0
- 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 +3 -0
- package/dist/chart/chart-settings/useTableColumns.d.ts.map +1 -0
- package/dist/chart/chart-settings/useTableColumns.js +12 -0
- 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 +6 -0
- package/dist/chart-builders/ChartBuilderActions.d.ts.map +1 -0
- package/dist/chart-builders/ChartBuilderActions.js +36 -0
- package/dist/chart-builders/ChartBuilderActions.js.map +1 -0
- package/dist/chart-builders/ChartBuilderContent.d.ts +12 -12
- package/dist/chart-builders/ChartBuilderContent.d.ts.map +1 -1
- package/dist/chart-builders/ChartBuilderContent.js +21 -52
- package/dist/chart-builders/ChartBuilderContent.js.map +1 -1
- package/dist/chart-builders/ChartBuilderContext.d.ts +8 -4
- package/dist/chart-builders/ChartBuilderContext.d.ts.map +1 -1
- package/dist/chart-builders/ChartBuilderContext.js +5 -0
- package/dist/chart-builders/ChartBuilderContext.js.map +1 -1
- package/dist/chart-builders/ChartBuilderDialog.d.ts +30 -8
- package/dist/chart-builders/ChartBuilderDialog.d.ts.map +1 -1
- package/dist/chart-builders/ChartBuilderDialog.js +25 -10
- package/dist/chart-builders/ChartBuilderDialog.js.map +1 -1
- 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 +39 -0
- package/dist/chart-builders/ChartBuilderFields.js.map +1 -0
- package/dist/chart-builders/ChartBuilderRoot.d.ts +25 -0
- package/dist/chart-builders/ChartBuilderRoot.d.ts.map +1 -0
- package/dist/chart-builders/ChartBuilderRoot.js +42 -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/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 +3 -4
- package/dist/chart-builders/chartSpecTitle.d.ts.map +1 -1
- package/dist/chart-builders/chartSpecTitle.js +3 -5
- package/dist/chart-builders/chartSpecTitle.js.map +1 -1
- package/dist/chart-builders/chartTypeUtils.d.ts +13 -0
- package/dist/chart-builders/chartTypeUtils.d.ts.map +1 -0
- package/dist/chart-builders/chartTypeUtils.js +47 -0
- package/dist/chart-builders/chartTypeUtils.js.map +1 -0
- package/dist/chart-builders/constants.d.ts +12 -0
- package/dist/chart-builders/constants.d.ts.map +1 -0
- package/dist/chart-builders/constants.js +47 -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-types/base-types.d.ts +148 -0
- package/dist/chart-types/base-types.d.ts.map +1 -0
- package/dist/chart-types/base-types.js +11 -0
- package/dist/chart-types/base-types.js.map +1 -0
- 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 +4 -0
- package/dist/chart-types/box-plot/definition.d.ts.map +1 -0
- package/dist/chart-types/box-plot/definition.js +19 -0
- package/dist/chart-types/box-plot/definition.js.map +1 -0
- 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 +16 -0
- package/dist/chart-types/box-plot/schema.d.ts.map +1 -0
- package/dist/chart-types/box-plot/schema.js +11 -0
- package/dist/chart-types/box-plot/schema.js.map +1 -0
- 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 +4 -0
- package/dist/chart-types/bubble-chart/definition.d.ts.map +1 -0
- package/dist/chart-types/bubble-chart/definition.js +19 -0
- package/dist/chart-types/bubble-chart/definition.js.map +1 -0
- package/dist/chart-types/bubble-chart/schema.d.ts +18 -0
- package/dist/chart-types/bubble-chart/schema.d.ts.map +1 -0
- package/dist/chart-types/bubble-chart/schema.js +15 -0
- package/dist/chart-types/bubble-chart/schema.js.map +1 -0
- 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 +4 -0
- package/dist/chart-types/count-plot/definition.d.ts.map +1 -0
- package/dist/chart-types/count-plot/definition.js +19 -0
- package/dist/chart-types/count-plot/definition.js.map +1 -0
- package/dist/chart-types/count-plot/schema.d.ts +14 -0
- package/dist/chart-types/count-plot/schema.d.ts.map +1 -0
- package/dist/chart-types/count-plot/schema.js +13 -0
- package/dist/chart-types/count-plot/schema.js.map +1 -0
- 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 +4 -0
- package/dist/chart-types/custom-spec/definition.d.ts.map +1 -0
- package/dist/chart-types/custom-spec/definition.js +17 -0
- package/dist/chart-types/custom-spec/definition.js.map +1 -0
- package/dist/chart-types/custom-spec/schema.d.ts +14 -0
- package/dist/chart-types/custom-spec/schema.d.ts.map +1 -0
- package/dist/chart-types/custom-spec/schema.js +10 -0
- package/dist/chart-types/custom-spec/schema.js.map +1 -0
- 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 +4 -0
- package/dist/chart-types/heatmap/definition.d.ts.map +1 -0
- package/dist/chart-types/heatmap/definition.js +19 -0
- package/dist/chart-types/heatmap/definition.js.map +1 -0
- package/dist/chart-types/heatmap/schema.d.ts +16 -0
- package/dist/chart-types/heatmap/schema.d.ts.map +1 -0
- package/dist/chart-types/heatmap/schema.js +11 -0
- package/dist/chart-types/heatmap/schema.js.map +1 -0
- 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 +4 -0
- package/dist/chart-types/histogram/definition.d.ts.map +1 -0
- package/dist/chart-types/histogram/definition.js +19 -0
- package/dist/chart-types/histogram/definition.js.map +1 -0
- package/dist/chart-types/histogram/schema.d.ts +14 -0
- package/dist/chart-types/histogram/schema.d.ts.map +1 -0
- package/dist/chart-types/histogram/schema.js +13 -0
- package/dist/chart-types/histogram/schema.js.map +1 -0
- 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 +115 -0
- package/dist/chart-types/index.d.ts.map +1 -0
- package/dist/chart-types/index.js +100 -0
- package/dist/chart-types/index.js.map +1 -0
- 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 +4 -0
- package/dist/chart-types/line-chart/definition.d.ts.map +1 -0
- package/dist/chart-types/line-chart/definition.js +19 -0
- package/dist/chart-types/line-chart/definition.js.map +1 -0
- package/dist/chart-types/line-chart/schema.d.ts +83 -0
- package/dist/chart-types/line-chart/schema.d.ts.map +1 -0
- package/dist/chart-types/line-chart/schema.js +39 -0
- package/dist/chart-types/line-chart/schema.js.map +1 -0
- 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/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 +2 -4
- package/dist/dashboard/MosaicDashboard.d.ts.map +1 -1
- package/dist/dashboard/MosaicDashboard.js +38 -19
- package/dist/dashboard/MosaicDashboard.js.map +1 -1
- package/dist/dashboard/MosaicDashboardContext.d.ts +1 -0
- package/dist/dashboard/MosaicDashboardContext.d.ts.map +1 -1
- package/dist/dashboard/MosaicDashboardContext.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/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 +46 -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 +53 -0
- package/dist/dashboard/MosaicDashboardPanels.js.map +1 -0
- package/dist/dashboard/MosaicDashboardSlice.d.ts +607 -27
- package/dist/dashboard/MosaicDashboardSlice.d.ts.map +1 -1
- package/dist/dashboard/MosaicDashboardSlice.js +525 -93
- package/dist/dashboard/MosaicDashboardSlice.js.map +1 -1
- package/dist/dashboard/MosaicDashboardToolbar.d.ts.map +1 -1
- package/dist/dashboard/MosaicDashboardToolbar.js +74 -7
- package/dist/dashboard/MosaicDashboardToolbar.js.map +1 -1
- package/dist/dashboard/defaultPanelRenderers.d.ts +3 -0
- package/dist/dashboard/defaultPanelRenderers.d.ts.map +1 -0
- package/dist/dashboard/defaultPanelRenderers.js +13 -0
- package/dist/dashboard/defaultPanelRenderers.js.map +1 -0
- 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/editor/MosaicChartDisplay.d.ts.map +1 -1
- package/dist/editor/MosaicChartDisplay.js +6 -1
- package/dist/editor/MosaicChartDisplay.js.map +1 -1
- package/dist/index.d.ts +28 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -3
- package/dist/index.js.map +1 -1
- package/dist/profiler/MosaicDashboardProfilerPanelRenderer.d.ts +3 -0
- package/dist/profiler/MosaicDashboardProfilerPanelRenderer.d.ts.map +1 -0
- package/dist/profiler/MosaicDashboardProfilerPanelRenderer.js +32 -0
- package/dist/profiler/MosaicDashboardProfilerPanelRenderer.js.map +1 -0
- package/dist/profiler/useMosaicProfiler.d.ts.map +1 -1
- package/dist/profiler/useMosaicProfiler.js.map +1 -1
- package/dist/tableInterop.js.map +1 -1
- 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/dist/useMosaicClient.d.ts +4 -15
- package/dist/useMosaicClient.d.ts.map +1 -1
- package/dist/useMosaicClient.js +10 -4
- package/dist/useMosaicClient.js.map +1 -1
- package/package.json +40 -31
- package/dist/chart-builders/builders.d.ts +0 -7
- package/dist/chart-builders/builders.d.ts.map +0 -1
- package/dist/chart-builders/builders.js +0 -280
- package/dist/chart-builders/builders.js.map +0 -1
- package/dist/chart-builders/createMosaicChartTool.d.ts +0 -45
- package/dist/chart-builders/createMosaicChartTool.d.ts.map +0 -1
- package/dist/chart-builders/createMosaicChartTool.js +0 -109
- package/dist/chart-builders/createMosaicChartTool.js.map +0 -1
- package/dist/chart-builders/describeChartSpecs.d.ts +0 -7
- package/dist/chart-builders/describeChartSpecs.d.ts.map +0 -1
- package/dist/chart-builders/describeChartSpecs.js +0 -38
- package/dist/chart-builders/describeChartSpecs.js.map +0 -1
- package/dist/chart-builders/types.d.ts +0 -40
- package/dist/chart-builders/types.d.ts.map +0 -1
- package/dist/chart-builders/types.js +0 -2
- package/dist/chart-builders/types.js.map +0 -1
- package/dist/dashboard/MosaicDashboardChartPanel.d.ts +0 -3
- package/dist/dashboard/MosaicDashboardChartPanel.d.ts.map +0 -1
- package/dist/dashboard/MosaicDashboardChartPanel.js +0 -49
- package/dist/dashboard/MosaicDashboardChartPanel.js.map +0 -1
- package/dist/dashboard/MosaicDashboardCharts.d.ts +0 -3
- package/dist/dashboard/MosaicDashboardCharts.d.ts.map +0 -1
- package/dist/dashboard/MosaicDashboardCharts.js +0 -45
- package/dist/dashboard/MosaicDashboardCharts.js.map +0 -1
- package/dist/dashboard/MosaicDashboardProfiler.d.ts +0 -3
- package/dist/dashboard/MosaicDashboardProfiler.d.ts.map +0 -1
- package/dist/dashboard/MosaicDashboardProfiler.js +0 -21
- package/dist/dashboard/MosaicDashboardProfiler.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/use-mosaic.d.ts +0 -11
- package/dist/use-mosaic.d.ts.map +0 -1
- package/dist/use-mosaic.js +0 -42
- package/dist/use-mosaic.js.map +0 -1
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button, cn } from '@sqlrooms/ui';
|
|
3
|
+
import { useCallback, useMemo } from 'react';
|
|
4
|
+
import { useChartBuilderContext, useChartBuilderStore, } from './ChartBuilderContext';
|
|
5
|
+
import { buildChartTypeTitle, canCreateChartFromType } from './chartTypeUtils';
|
|
6
|
+
export const ChartBuilderActions = ({ className, }) => {
|
|
7
|
+
const { onCreateChart, templates } = useChartBuilderContext();
|
|
8
|
+
const selectedTemplateId = useChartBuilderStore((state) => state.selectedTemplateId);
|
|
9
|
+
const fieldValues = useChartBuilderStore((state) => state.fieldValues);
|
|
10
|
+
const reset = useChartBuilderStore((state) => state.reset);
|
|
11
|
+
const selectedTemplate = useMemo(() => templates.find((template) => template.id === selectedTemplateId), [templates, selectedTemplateId]);
|
|
12
|
+
const canCreate = canCreateChartFromType(selectedTemplate, fieldValues);
|
|
13
|
+
const handleCreateChart = useCallback(() => {
|
|
14
|
+
if (!selectedTemplate || !canCreate || !selectedTemplateId) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const title = buildChartTypeTitle(selectedTemplate, fieldValues);
|
|
18
|
+
onCreateChart(title, {
|
|
19
|
+
chartType: selectedTemplateId,
|
|
20
|
+
settings: fieldValues,
|
|
21
|
+
});
|
|
22
|
+
reset();
|
|
23
|
+
}, [
|
|
24
|
+
selectedTemplate,
|
|
25
|
+
canCreate,
|
|
26
|
+
selectedTemplateId,
|
|
27
|
+
fieldValues,
|
|
28
|
+
onCreateChart,
|
|
29
|
+
reset,
|
|
30
|
+
]);
|
|
31
|
+
if (!selectedTemplate) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
return (_jsxs("div", { className: cn('flex items-center justify-end gap-2', className), children: [_jsx(Button, { variant: "outline", size: "sm", onClick: reset, children: "Back" }), _jsx(Button, { size: "sm", onClick: handleCreateChart, disabled: !canCreate, children: "Create" })] }));
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=ChartBuilderActions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartBuilderActions.js","sourceRoot":"","sources":["../../src/chart-builders/ChartBuilderActions.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,MAAM,EAAE,EAAE,EAAC,MAAM,cAAc,CAAC;AACxC,OAAO,EAAK,WAAW,EAAE,OAAO,EAAC,MAAM,OAAO,CAAC;AAC/C,OAAO,EACL,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAC,mBAAmB,EAAE,sBAAsB,EAAC,MAAM,kBAAkB,CAAC;AAO7E,MAAM,CAAC,MAAM,mBAAmB,GAAiC,CAAC,EAChE,SAAS,GACV,EAAE,EAAE;IACH,MAAM,EAAC,aAAa,EAAE,SAAS,EAAC,GAAG,sBAAsB,EAAE,CAAC;IAC5D,MAAM,kBAAkB,GAAG,oBAAoB,CAC7C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,kBAAkB,CACpC,CAAC;IACF,MAAM,WAAW,GAAG,oBAAoB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACvE,MAAM,KAAK,GAAG,oBAAoB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAE3D,MAAM,gBAAgB,GAAG,OAAO,CAC9B,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,kBAAkB,CAAC,EACtE,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAChC,CAAC;IAEF,MAAM,SAAS,GAAG,sBAAsB,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;IAExE,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;QACzC,IAAI,CAAC,gBAAgB,IAAI,CAAC,SAAS,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC3D,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,mBAAmB,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;QACjE,aAAa,CAAC,KAAK,EAAE;YACnB,SAAS,EAAE,kBAAkB;YAC7B,QAAQ,EAAE,WAAW;SACP,CAAC,CAAC;QAClB,KAAK,EAAE,CAAC;IACV,CAAC,EAAE;QACD,gBAAgB;QAChB,SAAS;QACT,kBAAkB;QAClB,WAAW;QACX,aAAa;QACb,KAAK;KACN,CAAC,CAAC;IAEH,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,qCAAqC,EAAE,SAAS,CAAC,aAClE,KAAC,MAAM,IAAC,OAAO,EAAC,SAAS,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,KAAK,qBAEzC,EACT,KAAC,MAAM,IAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,SAAS,uBAEzD,IACL,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {Button, cn} from '@sqlrooms/ui';\nimport {FC, useCallback, useMemo} from 'react';\nimport {\n useChartBuilderContext,\n useChartBuilderStore,\n} from './ChartBuilderContext';\nimport {buildChartTypeTitle, canCreateChartFromType} from './chartTypeUtils';\nimport type {ChartConfig} from '../chart-types';\n\nexport interface ChartBuilderActionsProps {\n className?: string;\n}\n\nexport const ChartBuilderActions: FC<ChartBuilderActionsProps> = ({\n className,\n}) => {\n const {onCreateChart, templates} = useChartBuilderContext();\n const selectedTemplateId = useChartBuilderStore(\n (state) => state.selectedTemplateId,\n );\n const fieldValues = useChartBuilderStore((state) => state.fieldValues);\n const reset = useChartBuilderStore((state) => state.reset);\n\n const selectedTemplate = useMemo(\n () => templates.find((template) => template.id === selectedTemplateId),\n [templates, selectedTemplateId],\n );\n\n const canCreate = canCreateChartFromType(selectedTemplate, fieldValues);\n\n const handleCreateChart = useCallback(() => {\n if (!selectedTemplate || !canCreate || !selectedTemplateId) {\n return;\n }\n\n const title = buildChartTypeTitle(selectedTemplate, fieldValues);\n onCreateChart(title, {\n chartType: selectedTemplateId,\n settings: fieldValues,\n } as ChartConfig);\n reset();\n }, [\n selectedTemplate,\n canCreate,\n selectedTemplateId,\n fieldValues,\n onCreateChart,\n reset,\n ]);\n\n if (!selectedTemplate) {\n return null;\n }\n\n return (\n <div className={cn('flex items-center justify-end gap-2', className)}>\n <Button variant=\"outline\" size=\"sm\" onClick={reset}>\n Back\n </Button>\n <Button size=\"sm\" onClick={handleCreateChart} disabled={!canCreate}>\n Create\n </Button>\n </div>\n );\n};\n"]}
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import type { Spec } from '@uwdata/mosaic-spec';
|
|
2
1
|
import React from 'react';
|
|
3
|
-
import {
|
|
4
|
-
|
|
2
|
+
import type { ChartConfig } from '../chart-types';
|
|
3
|
+
import { type ChartBuilderRootProps } from './ChartBuilderRoot';
|
|
4
|
+
import type { ChartBuilderColumn, ChartTypeDefinition } from '../chart-types/base-types';
|
|
5
|
+
type StandaloneChartBuilderContentProps = {
|
|
5
6
|
/** Table name to use in generated specs */
|
|
6
7
|
tableName: string;
|
|
7
8
|
/** Available columns for field selectors */
|
|
8
9
|
columns: ChartBuilderColumn[];
|
|
9
10
|
/** Callback when a chart spec is created */
|
|
10
|
-
onCreateChart: (
|
|
11
|
-
/**
|
|
12
|
-
|
|
11
|
+
onCreateChart: (title: string, config: ChartConfig) => void;
|
|
12
|
+
/** Optional chart types to show (defaults to all registered types) */
|
|
13
|
+
chartTypes?: ChartTypeDefinition[];
|
|
13
14
|
/** Custom class name */
|
|
14
15
|
className?: string;
|
|
15
|
-
}
|
|
16
|
+
};
|
|
17
|
+
export type ChartBuilderContentProps = Partial<Omit<ChartBuilderRootProps, 'children'>> & Pick<StandaloneChartBuilderContentProps, 'className'>;
|
|
16
18
|
/**
|
|
17
19
|
* Standalone chart builder UI for creating Mosaic charts from templates.
|
|
18
20
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* Step 3: Confirm to generate spec
|
|
22
|
-
*
|
|
23
|
-
* Can be used directly without a dialog wrapper.
|
|
21
|
+
* Can be used directly with props, or inside `<MosaicChartBuilder>` where it
|
|
22
|
+
* consumes the surrounding builder context.
|
|
24
23
|
*/
|
|
25
24
|
export declare const ChartBuilderContent: React.FC<ChartBuilderContentProps>;
|
|
25
|
+
export {};
|
|
26
26
|
//# sourceMappingURL=ChartBuilderContent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartBuilderContent.d.ts","sourceRoot":"","sources":["../../src/chart-builders/ChartBuilderContent.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,
|
|
1
|
+
{"version":3,"file":"ChartBuilderContent.d.ts","sourceRoot":"","sources":["../../src/chart-builders/ChartBuilderContent.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAIhD,OAAO,EAAmB,KAAK,qBAAqB,EAAC,MAAM,oBAAoB,CAAC;AAEhF,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,2BAA2B,CAAC;AAEnC,KAAK,kCAAkC,GAAG;IACxC,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,4CAA4C;IAC5C,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IAC5D,sEAAsE;IACtE,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACnC,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,OAAO,CAC5C,IAAI,CAAC,qBAAqB,EAAE,UAAU,CAAC,CACxC,GACC,IAAI,CAAC,kCAAkC,EAAE,WAAW,CAAC,CAAC;AAoBxD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAalE,CAAC"}
|
|
@@ -1,59 +1,28 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
import { cn } from '@sqlrooms/ui';
|
|
3
|
+
import { ChartBuilderActions } from './ChartBuilderActions';
|
|
4
|
+
import { useChartBuilderContext } from './ChartBuilderContext';
|
|
5
|
+
import { ChartBuilderFields } from './ChartBuilderFields';
|
|
6
|
+
import { ChartBuilderRoot } from './ChartBuilderRoot';
|
|
7
|
+
import { ChartBuilderTypeGrid } from './ChartBuilderTypeGrid';
|
|
8
|
+
function isStandaloneProps(props) {
|
|
9
|
+
return Boolean(props.tableName && props.columns && props.onCreateChart);
|
|
10
|
+
}
|
|
11
|
+
function ChartBuilderContentBody({ className }) {
|
|
12
|
+
useChartBuilderContext();
|
|
13
|
+
return (_jsxs("div", { className: cn('flex flex-col gap-2', className), children: [_jsx(ChartBuilderTypeGrid, {}), _jsx(ChartBuilderFields, {}), _jsx(ChartBuilderActions, {})] }));
|
|
14
|
+
}
|
|
6
15
|
/**
|
|
7
16
|
* Standalone chart builder UI for creating Mosaic charts from templates.
|
|
8
17
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* Step 3: Confirm to generate spec
|
|
12
|
-
*
|
|
13
|
-
* Can be used directly without a dialog wrapper.
|
|
18
|
+
* Can be used directly with props, or inside `<MosaicChartBuilder>` where it
|
|
19
|
+
* consumes the surrounding builder context.
|
|
14
20
|
*/
|
|
15
|
-
export const ChartBuilderContent = (
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
setFieldValues({});
|
|
22
|
-
}, []);
|
|
23
|
-
const handleSelectBuilder = useCallback((builder) => {
|
|
24
|
-
setSelectedBuilder(builder);
|
|
25
|
-
setFieldValues({});
|
|
26
|
-
}, []);
|
|
27
|
-
const handleFieldChange = useCallback((key, value) => {
|
|
28
|
-
setFieldValues((prev) => ({ ...prev, [key]: value }));
|
|
29
|
-
}, []);
|
|
30
|
-
const canCreate = useMemo(() => {
|
|
31
|
-
if (!selectedBuilder)
|
|
32
|
-
return false;
|
|
33
|
-
return selectedBuilder.fields
|
|
34
|
-
.filter((f) => f.required ?? true)
|
|
35
|
-
.every((f) => fieldValues[f.key]);
|
|
36
|
-
}, [selectedBuilder, fieldValues]);
|
|
37
|
-
const handleCreate = useCallback(() => {
|
|
38
|
-
if (!selectedBuilder || !canCreate)
|
|
39
|
-
return;
|
|
40
|
-
const spec = selectedBuilder.createSpec(tableName, fieldValues);
|
|
41
|
-
const title = selectedBuilder.fields.length > 0
|
|
42
|
-
? `${selectedBuilder.description.replace(/^Create (a |an )?/, '')} - ${Object.values(fieldValues).join(', ')}`
|
|
43
|
-
: selectedBuilder.description.replace(/^Create (a |an )?/, '');
|
|
44
|
-
onCreateChart(spec, title);
|
|
45
|
-
handleReset();
|
|
46
|
-
}, [
|
|
47
|
-
selectedBuilder,
|
|
48
|
-
canCreate,
|
|
49
|
-
tableName,
|
|
50
|
-
fieldValues,
|
|
51
|
-
onCreateChart,
|
|
52
|
-
handleReset,
|
|
53
|
-
]);
|
|
54
|
-
return (_jsxs("div", { className: cn('flex flex-col gap-2', className), children: [!selectedBuilder ? (_jsx("div", { className: "grid grid-cols-2 gap-2 py-2", children: resolvedBuilders.map((builder) => {
|
|
55
|
-
const Icon = builder.icon;
|
|
56
|
-
return (_jsxs("button", { className: cn('flex items-center gap-3 rounded-md border p-3 text-left transition-colors', 'hover:bg-accent hover:text-accent-foreground'), onClick: () => handleSelectBuilder(builder), children: [_jsx(Icon, { className: "h-5 w-5 shrink-0 opacity-70" }), _jsx("span", { className: "text-sm", children: builder.description })] }, builder.id));
|
|
57
|
-
}) })) : (_jsx("div", { className: "flex flex-col gap-4 py-2", children: selectedBuilder.fields.length === 0 ? (_jsx("p", { className: "text-muted-foreground text-sm", children: "This chart type has no configurable fields. A template spec will be created that you can edit manually." })) : (selectedBuilder.fields.map((field) => (_jsx(FieldSelectorInput, { field: field, columns: columns, value: fieldValues[field.key], onChange: (v) => handleFieldChange(field.key, v) }, field.key)))) })), selectedBuilder && (_jsxs("div", { className: "flex items-center justify-end gap-2", children: [_jsx(Button, { variant: "outline", size: "sm", onClick: handleReset, children: "Back" }), _jsx(Button, { size: "sm", onClick: handleCreate, disabled: !canCreate, children: "Create" })] }))] }));
|
|
21
|
+
export const ChartBuilderContent = (props) => {
|
|
22
|
+
if (isStandaloneProps(props)) {
|
|
23
|
+
const { className, ...rootProps } = props;
|
|
24
|
+
return (_jsx(ChartBuilderRoot, { ...rootProps, children: _jsx(ChartBuilderContentBody, { className: className }) }));
|
|
25
|
+
}
|
|
26
|
+
return _jsx(ChartBuilderContentBody, { className: props.className });
|
|
58
27
|
};
|
|
59
28
|
//# sourceMappingURL=ChartBuilderContent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartBuilderContent.js","sourceRoot":"","sources":["../../src/chart-builders/ChartBuilderContent.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"ChartBuilderContent.js","sourceRoot":"","sources":["../../src/chart-builders/ChartBuilderContent.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,EAAE,EAAC,MAAM,cAAc,CAAC;AAGhC,OAAO,EAAC,mBAAmB,EAAC,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAC,sBAAsB,EAAC,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAC,gBAAgB,EAA6B,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAC,oBAAoB,EAAC,MAAM,wBAAwB,CAAC;AAwB5D,SAAS,iBAAiB,CACxB,KAA+B;IAE/B,OAAO,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,uBAAuB,CAAC,EAAC,SAAS,EAAuB;IAChE,sBAAsB,EAAE,CAAC;IAEzB,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,aAClD,KAAC,oBAAoB,KAAG,EACxB,KAAC,kBAAkB,KAAG,EACtB,KAAC,mBAAmB,KAAG,IACnB,CACP,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAuC,CACrE,KAAK,EACL,EAAE;IACF,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,EAAC,SAAS,EAAE,GAAG,SAAS,EAAC,GAAG,KAAK,CAAC;QACxC,OAAO,CACL,KAAC,gBAAgB,OAAK,SAAS,YAC7B,KAAC,uBAAuB,IAAC,SAAS,EAAE,SAAS,GAAI,GAChC,CACpB,CAAC;IACJ,CAAC;IAED,OAAO,KAAC,uBAAuB,IAAC,SAAS,EAAE,KAAK,CAAC,SAAS,GAAI,CAAC;AACjE,CAAC,CAAC","sourcesContent":["import {cn} from '@sqlrooms/ui';\nimport React from 'react';\nimport type {ChartConfig} from '../chart-types';\nimport {ChartBuilderActions} from './ChartBuilderActions';\nimport {useChartBuilderContext} from './ChartBuilderContext';\nimport {ChartBuilderFields} from './ChartBuilderFields';\nimport {ChartBuilderRoot, type ChartBuilderRootProps} from './ChartBuilderRoot';\nimport {ChartBuilderTypeGrid} from './ChartBuilderTypeGrid';\nimport type {\n ChartBuilderColumn,\n ChartTypeDefinition,\n} from '../chart-types/base-types';\n\ntype StandaloneChartBuilderContentProps = {\n /** Table name to use in generated specs */\n tableName: string;\n /** Available columns for field selectors */\n columns: ChartBuilderColumn[];\n /** Callback when a chart spec is created */\n onCreateChart: (title: string, config: ChartConfig) => void;\n /** Optional chart types to show (defaults to all registered types) */\n chartTypes?: ChartTypeDefinition[];\n /** Custom class name */\n className?: string;\n};\n\nexport type ChartBuilderContentProps = Partial<\n Omit<ChartBuilderRootProps, 'children'>\n> &\n Pick<StandaloneChartBuilderContentProps, 'className'>;\n\nfunction isStandaloneProps(\n props: ChartBuilderContentProps,\n): props is StandaloneChartBuilderContentProps {\n return Boolean(props.tableName && props.columns && props.onCreateChart);\n}\n\nfunction ChartBuilderContentBody({className}: {className?: string}) {\n useChartBuilderContext();\n\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n <ChartBuilderTypeGrid />\n <ChartBuilderFields />\n <ChartBuilderActions />\n </div>\n );\n}\n\n/**\n * Standalone chart builder UI for creating Mosaic charts from templates.\n *\n * Can be used directly with props, or inside `<MosaicChartBuilder>` where it\n * consumes the surrounding builder context.\n */\nexport const ChartBuilderContent: React.FC<ChartBuilderContentProps> = (\n props,\n) => {\n if (isStandaloneProps(props)) {\n const {className, ...rootProps} = props;\n return (\n <ChartBuilderRoot {...rootProps}>\n <ChartBuilderContentBody className={className} />\n </ChartBuilderRoot>\n );\n }\n\n return <ChartBuilderContentBody className={props.className} />;\n};\n"]}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
1
|
+
import type { ChartConfig } from '../chart-types';
|
|
2
|
+
import type { ChartBuilderStore, ChartBuilderStoreState } from './createChartBuilderStore';
|
|
3
|
+
import type { ChartBuilderColumn, ChartTypeDefinition } from '../chart-types/base-types';
|
|
3
4
|
export type ChartBuilderContextValue = {
|
|
4
5
|
tableName: string;
|
|
5
6
|
columns: ChartBuilderColumn[];
|
|
6
|
-
onCreateChart: (
|
|
7
|
-
|
|
7
|
+
onCreateChart: (title: string, config: ChartConfig) => void;
|
|
8
|
+
templates: ChartTypeDefinition[];
|
|
9
|
+
availableTemplates: ChartTypeDefinition[];
|
|
10
|
+
store: ChartBuilderStore;
|
|
8
11
|
};
|
|
9
12
|
export declare const ChartBuilderContext: import("react").Context<ChartBuilderContextValue | null>;
|
|
10
13
|
export declare function useChartBuilderContext(): ChartBuilderContextValue;
|
|
14
|
+
export declare function useChartBuilderStore<T>(selector: (state: ChartBuilderStoreState) => T): T;
|
|
11
15
|
//# sourceMappingURL=ChartBuilderContext.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartBuilderContext.d.ts","sourceRoot":"","sources":["../../src/chart-builders/ChartBuilderContext.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ChartBuilderContext.d.ts","sourceRoot":"","sources":["../../src/chart-builders/ChartBuilderContext.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EACV,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,wBAAwB,GAAG;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IAC5D,SAAS,EAAE,mBAAmB,EAAE,CAAC;IACjC,kBAAkB,EAAE,mBAAmB,EAAE,CAAC;IAC1C,KAAK,EAAE,iBAAiB,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,mBAAmB,0DACsB,CAAC;AAEvD,wBAAgB,sBAAsB,IAAI,wBAAwB,CAQjE;AAED,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,QAAQ,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,CAAC,GAC7C,CAAC,CAGH"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createContext, useContext } from 'react';
|
|
2
|
+
import { useStore } from 'zustand';
|
|
2
3
|
export const ChartBuilderContext = createContext(null);
|
|
3
4
|
export function useChartBuilderContext() {
|
|
4
5
|
const ctx = useContext(ChartBuilderContext);
|
|
@@ -7,4 +8,8 @@ export function useChartBuilderContext() {
|
|
|
7
8
|
}
|
|
8
9
|
return ctx;
|
|
9
10
|
}
|
|
11
|
+
export function useChartBuilderStore(selector) {
|
|
12
|
+
const { store } = useChartBuilderContext();
|
|
13
|
+
return useStore(store, selector);
|
|
14
|
+
}
|
|
10
15
|
//# sourceMappingURL=ChartBuilderContext.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartBuilderContext.js","sourceRoot":"","sources":["../../src/chart-builders/ChartBuilderContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAE,UAAU,EAAC,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ChartBuilderContext.js","sourceRoot":"","sources":["../../src/chart-builders/ChartBuilderContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAE,UAAU,EAAC,MAAM,OAAO,CAAC;AAChD,OAAO,EAAC,QAAQ,EAAC,MAAM,SAAS,CAAC;AAoBjC,MAAM,CAAC,MAAM,mBAAmB,GAC9B,aAAa,CAAkC,IAAI,CAAC,CAAC;AAEvD,MAAM,UAAU,sBAAsB;IACpC,MAAM,GAAG,GAAG,UAAU,CAAC,mBAAmB,CAAC,CAAC;IAC5C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CACb,gFAAgF,CACjF,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,QAA8C;IAE9C,MAAM,EAAC,KAAK,EAAC,GAAG,sBAAsB,EAAE,CAAC;IACzC,OAAO,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACnC,CAAC","sourcesContent":["import {createContext, useContext} from 'react';\nimport {useStore} from 'zustand';\nimport type {ChartConfig} from '../chart-types';\nimport type {\n ChartBuilderStore,\n ChartBuilderStoreState,\n} from './createChartBuilderStore';\nimport type {\n ChartBuilderColumn,\n ChartTypeDefinition,\n} from '../chart-types/base-types';\n\nexport type ChartBuilderContextValue = {\n tableName: string;\n columns: ChartBuilderColumn[];\n onCreateChart: (title: string, config: ChartConfig) => void;\n templates: ChartTypeDefinition[];\n availableTemplates: ChartTypeDefinition[];\n store: ChartBuilderStore;\n};\n\nexport const ChartBuilderContext =\n createContext<ChartBuilderContextValue | null>(null);\n\nexport function useChartBuilderContext(): ChartBuilderContextValue {\n const ctx = useContext(ChartBuilderContext);\n if (!ctx) {\n throw new Error(\n 'ChartBuilder compound components must be rendered inside <MosaicChartBuilder>.',\n );\n }\n return ctx;\n}\n\nexport function useChartBuilderStore<T>(\n selector: (state: ChartBuilderStoreState) => T,\n): T {\n const {store} = useChartBuilderContext();\n return useStore(store, selector);\n}\n"]}
|
|
@@ -1,6 +1,21 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import {
|
|
1
|
+
import { type ButtonProps } from '@sqlrooms/ui';
|
|
2
|
+
import React, { PropsWithChildren } from 'react';
|
|
3
|
+
import type { ChartConfig } from '../chart-types';
|
|
4
|
+
import type { ChartBuilderColumn, ChartTypeDefinition } from '../chart-types/base-types';
|
|
5
|
+
export type ChartBuilderTriggerProps = ButtonProps;
|
|
6
|
+
export declare const ChartBuilderTrigger: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
|
|
7
|
+
export type ChartBuilderDialogContentProps = PropsWithChildren<{
|
|
8
|
+
/** Override dialog title (default "Add Chart") */
|
|
9
|
+
title?: string;
|
|
10
|
+
/** Override dialog description */
|
|
11
|
+
description?: string;
|
|
12
|
+
className?: string;
|
|
13
|
+
}>;
|
|
14
|
+
/**
|
|
15
|
+
* The dialog content pane that renders the chart-builder steps.
|
|
16
|
+
* Must be rendered inside `<MosaicChartBuilder>`.
|
|
17
|
+
*/
|
|
18
|
+
export declare const ChartBuilderDialogContent: React.FC<ChartBuilderDialogContentProps>;
|
|
4
19
|
export interface ChartBuilderDialogProps {
|
|
5
20
|
/** Whether the dialog is open */
|
|
6
21
|
open: boolean;
|
|
@@ -11,13 +26,20 @@ export interface ChartBuilderDialogProps {
|
|
|
11
26
|
/** Available columns for field selectors */
|
|
12
27
|
columns: ChartBuilderColumn[];
|
|
13
28
|
/** Callback when a chart spec is created */
|
|
14
|
-
onCreateChart: (
|
|
15
|
-
/**
|
|
16
|
-
|
|
29
|
+
onCreateChart: (title: string, config: ChartConfig) => void;
|
|
30
|
+
/** Optional chart types to show (defaults to all registered types) */
|
|
31
|
+
chartTypes?: ChartTypeDefinition[];
|
|
17
32
|
}
|
|
18
33
|
/**
|
|
19
|
-
* Dialog wrapper for the chart builder.
|
|
20
|
-
*
|
|
34
|
+
* Dialog wrapper for the chart builder (legacy API).
|
|
35
|
+
*
|
|
36
|
+
* @deprecated Prefer the compound form:
|
|
37
|
+
* ```tsx
|
|
38
|
+
* <MosaicChartBuilder tableName={…} columns={…} onCreateChart={…}>
|
|
39
|
+
* <MosaicChartBuilder.Trigger />
|
|
40
|
+
* <MosaicChartBuilder.Dialog />
|
|
41
|
+
* </MosaicChartBuilder>
|
|
42
|
+
* ```
|
|
21
43
|
*/
|
|
22
44
|
export declare const ChartBuilderDialog: React.FC<ChartBuilderDialogProps>;
|
|
23
45
|
//# sourceMappingURL=ChartBuilderDialog.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartBuilderDialog.d.ts","sourceRoot":"","sources":["../../src/chart-builders/ChartBuilderDialog.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ChartBuilderDialog.d.ts","sourceRoot":"","sources":["../../src/chart-builders/ChartBuilderDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,WAAW,EAMjB,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,EAAC,iBAAiB,EAAC,MAAM,OAAO,CAAC;AAC/C,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAGhD,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,wBAAwB,GAAG,WAAW,CAAC;AAEnD,eAAO,MAAM,mBAAmB,uFAgB9B,CAAC;AAGH,MAAM,MAAM,8BAA8B,GAAG,iBAAiB,CAAC;IAC7D,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,KAAK,CAAC,EAAE,CAC9C,8BAA8B,CAgB/B,CAAC;AAEF,MAAM,WAAW,uBAAuB;IACtC,iCAAiC;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,8CAA8C;IAC9C,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,4CAA4C;IAC5C,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IAC5D,sEAAsE;IACtE,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACpC;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAkBhE,CAAC"}
|
|
@@ -1,15 +1,30 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger, } from '@sqlrooms/ui';
|
|
3
|
+
import { Plus } from 'lucide-react';
|
|
4
|
+
import React from 'react';
|
|
3
5
|
import { ChartBuilderContent } from './ChartBuilderContent';
|
|
6
|
+
import { ChartBuilderRoot } from './ChartBuilderRoot';
|
|
7
|
+
export const ChartBuilderTrigger = React.forwardRef(({ children, ...props }, ref) => {
|
|
8
|
+
return (_jsx(DialogTrigger, { asChild: true, children: _jsx(Button, { ref: ref, variant: "outline", size: "sm", ...props, children: children ?? (_jsxs(_Fragment, { children: [_jsx(Plus, { className: "mr-1 h-4 w-4" }), "Add Chart"] })) }) }));
|
|
9
|
+
});
|
|
10
|
+
ChartBuilderTrigger.displayName = 'ChartBuilderTrigger';
|
|
4
11
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
12
|
+
* The dialog content pane that renders the chart-builder steps.
|
|
13
|
+
* Must be rendered inside `<MosaicChartBuilder>`.
|
|
7
14
|
*/
|
|
8
|
-
export const
|
|
9
|
-
|
|
10
|
-
onCreateChart(spec, title);
|
|
11
|
-
onOpenChange(false);
|
|
12
|
-
};
|
|
13
|
-
return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsxs(DialogContent, { className: "sm:max-w-lg", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Add Chart" }), _jsx(DialogDescription, { children: "Select a chart type to create." })] }), _jsx(ChartBuilderContent, { tableName: tableName, columns: columns, onCreateChart: handleCreateChart, builders: builders })] }) }));
|
|
15
|
+
export const ChartBuilderDialogContent = ({ title = 'Add Chart', description = 'Select a chart type to create.', className, children, }) => {
|
|
16
|
+
return (_jsxs(DialogContent, { className: className ?? 'sm:max-w-lg', children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: title }), _jsx(DialogDescription, { children: description })] }), children ?? _jsx(ChartBuilderContent, {})] }));
|
|
14
17
|
};
|
|
18
|
+
/**
|
|
19
|
+
* Dialog wrapper for the chart builder (legacy API).
|
|
20
|
+
*
|
|
21
|
+
* @deprecated Prefer the compound form:
|
|
22
|
+
* ```tsx
|
|
23
|
+
* <MosaicChartBuilder tableName={…} columns={…} onCreateChart={…}>
|
|
24
|
+
* <MosaicChartBuilder.Trigger />
|
|
25
|
+
* <MosaicChartBuilder.Dialog />
|
|
26
|
+
* </MosaicChartBuilder>
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export const ChartBuilderDialog = ({ open, onOpenChange, tableName, columns, onCreateChart, chartTypes, }) => (_jsx(ChartBuilderRoot, { open: open, onOpenChange: onOpenChange, tableName: tableName, columns: columns, onCreateChart: onCreateChart, chartTypes: chartTypes, children: _jsx(ChartBuilderDialogContent, {}) }));
|
|
15
30
|
//# sourceMappingURL=ChartBuilderDialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartBuilderDialog.js","sourceRoot":"","sources":["../../src/chart-builders/ChartBuilderDialog.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,MAAM,
|
|
1
|
+
{"version":3,"file":"ChartBuilderDialog.js","sourceRoot":"","sources":["../../src/chart-builders/ChartBuilderDialog.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,MAAM,EAEN,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,aAAa,GACd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,IAAI,EAAC,MAAM,cAAc,CAAC;AAClC,OAAO,KAA0B,MAAM,OAAO,CAAC;AAE/C,OAAO,EAAC,mBAAmB,EAAC,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AAQpD,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC,UAAU,CAGjD,CAAC,EAAC,QAAQ,EAAE,GAAG,KAAK,EAAC,EAAE,GAAG,EAAE,EAAE;IAC9B,OAAO,CACL,KAAC,aAAa,IAAC,OAAO,kBACpB,KAAC,MAAM,IAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAC,SAAS,EAAC,IAAI,EAAC,IAAI,KAAK,KAAK,YACpD,QAAQ,IAAI,CACX,8BACE,KAAC,IAAI,IAAC,SAAS,EAAC,cAAc,GAAG,iBAEhC,CACJ,GACM,GACK,CACjB,CAAC;AACJ,CAAC,CAAC,CAAC;AACH,mBAAmB,CAAC,WAAW,GAAG,qBAAqB,CAAC;AAUxD;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAElC,CAAC,EACH,KAAK,GAAG,WAAW,EACnB,WAAW,GAAG,gCAAgC,EAC9C,SAAS,EACT,QAAQ,GACT,EAAE,EAAE;IACH,OAAO,CACL,MAAC,aAAa,IAAC,SAAS,EAAE,SAAS,IAAI,aAAa,aAClD,MAAC,YAAY,eACX,KAAC,WAAW,cAAE,KAAK,GAAe,EAClC,KAAC,iBAAiB,cAAE,WAAW,GAAqB,IACvC,EACd,QAAQ,IAAI,KAAC,mBAAmB,KAAG,IACtB,CACjB,CAAC;AACJ,CAAC,CAAC;AAiBF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAsC,CAAC,EACpE,IAAI,EACJ,YAAY,EACZ,SAAS,EACT,OAAO,EACP,aAAa,EACb,UAAU,GACX,EAAE,EAAE,CAAC,CACJ,KAAC,gBAAgB,IACf,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,EAChB,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,UAAU,YAEtB,KAAC,yBAAyB,KAAG,GACZ,CACpB,CAAC","sourcesContent":["import {\n Button,\n type ButtonProps,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from '@sqlrooms/ui';\nimport {Plus} from 'lucide-react';\nimport React, {PropsWithChildren} from 'react';\nimport type {ChartConfig} from '../chart-types';\nimport {ChartBuilderContent} from './ChartBuilderContent';\nimport {ChartBuilderRoot} from './ChartBuilderRoot';\nimport type {\n ChartBuilderColumn,\n ChartTypeDefinition,\n} from '../chart-types/base-types';\n\nexport type ChartBuilderTriggerProps = ButtonProps;\n\nexport const ChartBuilderTrigger = React.forwardRef<\n HTMLButtonElement,\n ChartBuilderTriggerProps\n>(({children, ...props}, ref) => {\n return (\n <DialogTrigger asChild>\n <Button ref={ref} variant=\"outline\" size=\"sm\" {...props}>\n {children ?? (\n <>\n <Plus className=\"mr-1 h-4 w-4\" />\n Add Chart\n </>\n )}\n </Button>\n </DialogTrigger>\n );\n});\nChartBuilderTrigger.displayName = 'ChartBuilderTrigger';\n\nexport type ChartBuilderDialogContentProps = PropsWithChildren<{\n /** Override dialog title (default \"Add Chart\") */\n title?: string;\n /** Override dialog description */\n description?: string;\n className?: string;\n}>;\n\n/**\n * The dialog content pane that renders the chart-builder steps.\n * Must be rendered inside `<MosaicChartBuilder>`.\n */\nexport const ChartBuilderDialogContent: React.FC<\n ChartBuilderDialogContentProps\n> = ({\n title = 'Add Chart',\n description = 'Select a chart type to create.',\n className,\n children,\n}) => {\n return (\n <DialogContent className={className ?? 'sm:max-w-lg'}>\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n {children ?? <ChartBuilderContent />}\n </DialogContent>\n );\n};\n\nexport interface ChartBuilderDialogProps {\n /** Whether the dialog is open */\n open: boolean;\n /** Callback when dialog open state changes */\n onOpenChange: (open: boolean) => void;\n /** Table name to use in generated specs */\n tableName: string;\n /** Available columns for field selectors */\n columns: ChartBuilderColumn[];\n /** Callback when a chart spec is created */\n onCreateChart: (title: string, config: ChartConfig) => void;\n /** Optional chart types to show (defaults to all registered types) */\n chartTypes?: ChartTypeDefinition[];\n}\n\n/**\n * Dialog wrapper for the chart builder (legacy API).\n *\n * @deprecated Prefer the compound form:\n * ```tsx\n * <MosaicChartBuilder tableName={…} columns={…} onCreateChart={…}>\n * <MosaicChartBuilder.Trigger />\n * <MosaicChartBuilder.Dialog />\n * </MosaicChartBuilder>\n * ```\n */\nexport const ChartBuilderDialog: React.FC<ChartBuilderDialogProps> = ({\n open,\n onOpenChange,\n tableName,\n columns,\n onCreateChart,\n chartTypes,\n}) => (\n <ChartBuilderRoot\n open={open}\n onOpenChange={onOpenChange}\n tableName={tableName}\n columns={columns}\n onCreateChart={onCreateChart}\n chartTypes={chartTypes}\n >\n <ChartBuilderDialogContent />\n </ChartBuilderRoot>\n);\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartBuilderFields.d.ts","sourceRoot":"","sources":["../../src/chart-builders/ChartBuilderFields.tsx"],"names":[],"mappings":"AACA,OAAO,EAAC,EAAE,EAAuB,MAAM,OAAO,CAAC;AAQ/C,MAAM,WAAW,uBAAuB;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,kBAAkB,EAAE,EAAE,CAAC,uBAAuB,CAyD1D,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from '@sqlrooms/ui';
|
|
3
|
+
import { useCallback, useMemo } from 'react';
|
|
4
|
+
import { useChartBuilderContext, useChartBuilderStore, } from './ChartBuilderContext';
|
|
5
|
+
import { ChartSettingsProvider } from '../chart/chart-settings/ChartSettingsContext';
|
|
6
|
+
export const ChartBuilderFields = ({ className, }) => {
|
|
7
|
+
const { columns, templates } = useChartBuilderContext();
|
|
8
|
+
const chartTypeDefinitionId = useChartBuilderStore((state) => state.selectedTemplateId);
|
|
9
|
+
const fieldValues = useChartBuilderStore((state) => state.fieldValues);
|
|
10
|
+
const setFieldValue = useChartBuilderStore((state) => state.setFieldValue);
|
|
11
|
+
const chartTypeDefinition = useMemo(() => templates.find((template) => template.id === chartTypeDefinitionId), [templates, chartTypeDefinitionId]);
|
|
12
|
+
const handleChange = useCallback((config) => {
|
|
13
|
+
// Update all changed values from settings
|
|
14
|
+
Object.entries(config.settings).forEach(([key, value]) => {
|
|
15
|
+
if (fieldValues[key] !== value) {
|
|
16
|
+
setFieldValue(key, value);
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
}, [fieldValues, setFieldValue]);
|
|
20
|
+
// Create a config object for the context
|
|
21
|
+
const config = useMemo(() => {
|
|
22
|
+
if (!chartTypeDefinition) {
|
|
23
|
+
return {
|
|
24
|
+
chartType: 'histogram',
|
|
25
|
+
settings: {},
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
chartType: chartTypeDefinition.id,
|
|
30
|
+
settings: fieldValues,
|
|
31
|
+
};
|
|
32
|
+
}, [chartTypeDefinition, fieldValues]);
|
|
33
|
+
if (!chartTypeDefinition) {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
const SettingsComponent = chartTypeDefinition.settingsComponent;
|
|
37
|
+
return (_jsx("div", { className: cn('flex flex-col gap-4 py-2', className), children: _jsx(ChartSettingsProvider, { config: config, columns: columns, onChange: handleChange, children: _jsx(SettingsComponent, {}) }) }));
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=ChartBuilderFields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartBuilderFields.js","sourceRoot":"","sources":["../../src/chart-builders/ChartBuilderFields.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,EAAE,EAAC,MAAM,cAAc,CAAC;AAChC,OAAO,EAAK,WAAW,EAAE,OAAO,EAAC,MAAM,OAAO,CAAC;AAC/C,OAAO,EACL,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAC,qBAAqB,EAAC,MAAM,8CAA8C,CAAC;AAOnF,MAAM,CAAC,MAAM,kBAAkB,GAAgC,CAAC,EAC9D,SAAS,GACV,EAAE,EAAE;IACH,MAAM,EAAC,OAAO,EAAE,SAAS,EAAC,GAAG,sBAAsB,EAAE,CAAC;IACtD,MAAM,qBAAqB,GAAG,oBAAoB,CAChD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,kBAAkB,CACpC,CAAC;IACF,MAAM,WAAW,GAAG,oBAAoB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACvE,MAAM,aAAa,GAAG,oBAAoB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAE3E,MAAM,mBAAmB,GAAG,OAAO,CACjC,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,qBAAqB,CAAC,EACzE,CAAC,SAAS,EAAE,qBAAqB,CAAC,CACnC,CAAC;IAEF,MAAM,YAAY,GAAG,WAAW,CAC9B,CAAC,MAAmB,EAAE,EAAE;QACtB,0CAA0C;QAC1C,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YACvD,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC/B,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,EACD,CAAC,WAAW,EAAE,aAAa,CAAC,CAC7B,CAAC;IAEF,yCAAyC;IACzC,MAAM,MAAM,GAAgB,OAAO,CAAC,GAAG,EAAE;QACvC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzB,OAAO;gBACL,SAAS,EAAE,WAAW;gBACtB,QAAQ,EAAE,EAAE;aACb,CAAC;QACJ,CAAC;QACD,OAAO;YACL,SAAS,EAAE,mBAAmB,CAAC,EAAE;YACjC,QAAQ,EAAE,WAAW;SACP,CAAC;IACnB,CAAC,EAAE,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC,CAAC;IAEvC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,iBAAiB,CAAC;IAChE,OAAO,CACL,cAAK,SAAS,EAAE,EAAE,CAAC,0BAA0B,EAAE,SAAS,CAAC,YACvD,KAAC,qBAAqB,IACpB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,YAAY,YAEtB,KAAC,iBAAiB,KAAG,GACC,GACpB,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {cn} from '@sqlrooms/ui';\nimport {FC, useCallback, useMemo} from 'react';\nimport {\n useChartBuilderContext,\n useChartBuilderStore,\n} from './ChartBuilderContext';\nimport {ChartSettingsProvider} from '../chart/chart-settings/ChartSettingsContext';\nimport type {ChartConfig} from '../chart-types';\n\nexport interface ChartBuilderFieldsProps {\n className?: string;\n}\n\nexport const ChartBuilderFields: FC<ChartBuilderFieldsProps> = ({\n className,\n}) => {\n const {columns, templates} = useChartBuilderContext();\n const chartTypeDefinitionId = useChartBuilderStore(\n (state) => state.selectedTemplateId,\n );\n const fieldValues = useChartBuilderStore((state) => state.fieldValues);\n const setFieldValue = useChartBuilderStore((state) => state.setFieldValue);\n\n const chartTypeDefinition = useMemo(\n () => templates.find((template) => template.id === chartTypeDefinitionId),\n [templates, chartTypeDefinitionId],\n );\n\n const handleChange = useCallback(\n (config: ChartConfig) => {\n // Update all changed values from settings\n Object.entries(config.settings).forEach(([key, value]) => {\n if (fieldValues[key] !== value) {\n setFieldValue(key, value);\n }\n });\n },\n [fieldValues, setFieldValue],\n );\n\n // Create a config object for the context\n const config: ChartConfig = useMemo(() => {\n if (!chartTypeDefinition) {\n return {\n chartType: 'histogram',\n settings: {},\n };\n }\n return {\n chartType: chartTypeDefinition.id,\n settings: fieldValues,\n } as ChartConfig;\n }, [chartTypeDefinition, fieldValues]);\n\n if (!chartTypeDefinition) {\n return null;\n }\n\n const SettingsComponent = chartTypeDefinition.settingsComponent;\n return (\n <div className={cn('flex flex-col gap-4 py-2', className)}>\n <ChartSettingsProvider\n config={config}\n columns={columns}\n onChange={handleChange}\n >\n <SettingsComponent />\n </ChartSettingsProvider>\n </div>\n );\n};\n"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React, { PropsWithChildren } from 'react';
|
|
2
|
+
import type { ChartConfig } from '../chart-types';
|
|
3
|
+
import type { ChartBuilderColumn, ChartTypeDefinition } from '../chart-types/base-types';
|
|
4
|
+
export type ChartBuilderRootProps = PropsWithChildren<{
|
|
5
|
+
/** Table name to use in generated specs */
|
|
6
|
+
tableName: string;
|
|
7
|
+
/** Available columns for field selectors */
|
|
8
|
+
columns: ChartBuilderColumn[];
|
|
9
|
+
/** Callback when a chart spec is created */
|
|
10
|
+
onCreateChart: (title: string, metadata: ChartConfig) => void;
|
|
11
|
+
/** Optional chart types to show (defaults to an empty array) */
|
|
12
|
+
chartTypes?: ChartTypeDefinition[];
|
|
13
|
+
/** Controlled open state */
|
|
14
|
+
open?: boolean;
|
|
15
|
+
/** Callback when open state changes */
|
|
16
|
+
onOpenChange?: (open: boolean) => void;
|
|
17
|
+
}>;
|
|
18
|
+
/**
|
|
19
|
+
* Compound-component root that provides shared chart-builder state via context
|
|
20
|
+
* and renders a Radix `Dialog`.
|
|
21
|
+
*
|
|
22
|
+
* Supports both controlled (`open`/`onOpenChange`) and uncontrolled usage.
|
|
23
|
+
*/
|
|
24
|
+
export declare const ChartBuilderRoot: React.FC<ChartBuilderRootProps>;
|
|
25
|
+
//# sourceMappingURL=ChartBuilderRoot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartBuilderRoot.d.ts","sourceRoot":"","sources":["../../src/chart-builders/ChartBuilderRoot.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EACZ,iBAAiB,EAKlB,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAGhD,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,qBAAqB,GAAG,iBAAiB,CAAC;IACpD,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,4CAA4C;IAC5C,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,KAAK,IAAI,CAAC;IAC9D,gEAAgE;IAChE,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACnC,4BAA4B;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,uCAAuC;IACvC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACxC,CAAC,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CA+D5D,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Dialog } from '@sqlrooms/ui';
|
|
3
|
+
import { useCallback, useEffect, useMemo, useState, } from 'react';
|
|
4
|
+
import { ChartBuilderContext } from './ChartBuilderContext';
|
|
5
|
+
import { createChartBuilderStore } from './createChartBuilderStore';
|
|
6
|
+
/**
|
|
7
|
+
* Compound-component root that provides shared chart-builder state via context
|
|
8
|
+
* and renders a Radix `Dialog`.
|
|
9
|
+
*
|
|
10
|
+
* Supports both controlled (`open`/`onOpenChange`) and uncontrolled usage.
|
|
11
|
+
*/
|
|
12
|
+
export const ChartBuilderRoot = ({ tableName, columns, onCreateChart, chartTypes, open, onOpenChange, children, }) => {
|
|
13
|
+
const [uncontrolledOpen, setUncontrolledOpen] = useState(false);
|
|
14
|
+
const [store] = useState(() => createChartBuilderStore());
|
|
15
|
+
const isControlled = open !== undefined;
|
|
16
|
+
const resolvedOpen = isControlled ? open : uncontrolledOpen;
|
|
17
|
+
const resolvedOnOpenChange = useMemo(() => (isControlled ? (onOpenChange ?? (() => { })) : setUncontrolledOpen), [isControlled, onOpenChange]);
|
|
18
|
+
// All resolved chart types are available by default
|
|
19
|
+
// (Filtering by schema compatibility was removed in favour of runtime validation)
|
|
20
|
+
const availableChartTypes = useMemo(() => chartTypes ?? [], [chartTypes]);
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
const { selectedTemplateId, reset } = store.getState();
|
|
23
|
+
if (selectedTemplateId &&
|
|
24
|
+
!availableChartTypes.some((template) => template.id === selectedTemplateId)) {
|
|
25
|
+
reset();
|
|
26
|
+
}
|
|
27
|
+
}, [availableChartTypes, store]);
|
|
28
|
+
const handleCreateChart = useCallback((title, config) => {
|
|
29
|
+
onCreateChart(title, config);
|
|
30
|
+
resolvedOnOpenChange(false);
|
|
31
|
+
}, [onCreateChart, resolvedOnOpenChange]);
|
|
32
|
+
const ctx = useMemo(() => ({
|
|
33
|
+
tableName,
|
|
34
|
+
columns,
|
|
35
|
+
onCreateChart: handleCreateChart,
|
|
36
|
+
templates: availableChartTypes,
|
|
37
|
+
availableTemplates: availableChartTypes, // TODO: why we need both templates and availableTemplates? can we remove one of them?
|
|
38
|
+
store,
|
|
39
|
+
}), [availableChartTypes, columns, handleCreateChart, store, tableName]);
|
|
40
|
+
return (_jsx(ChartBuilderContext.Provider, { value: ctx, children: _jsx(Dialog, { open: resolvedOpen, onOpenChange: resolvedOnOpenChange, children: children }) }));
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=ChartBuilderRoot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartBuilderRoot.js","sourceRoot":"","sources":["../../src/chart-builders/ChartBuilderRoot.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AACpC,OAAc,EAEZ,WAAW,EACX,SAAS,EACT,OAAO,EACP,QAAQ,GACT,MAAM,OAAO,CAAC;AAEf,OAAO,EAAC,mBAAmB,EAAC,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAC,uBAAuB,EAAC,MAAM,2BAA2B,CAAC;AAqBlE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAoC,CAAC,EAChE,SAAS,EACT,OAAO,EACP,aAAa,EACb,UAAU,EACV,IAAI,EACJ,YAAY,EACZ,QAAQ,GACT,EAAE,EAAE;IACH,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChE,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,uBAAuB,EAAE,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,IAAI,KAAK,SAAS,CAAC;IACxC,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAE5D,MAAM,oBAAoB,GAAG,OAAO,CAClC,GAAG,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,EACzE,CAAC,YAAY,EAAE,YAAY,CAAC,CAC7B,CAAC;IAEF,oDAAoD;IACpD,kFAAkF;IAClF,MAAM,mBAAmB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAE1E,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,EAAC,kBAAkB,EAAE,KAAK,EAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrD,IACE,kBAAkB;YAClB,CAAC,mBAAmB,CAAC,IAAI,CACvB,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,kBAAkB,CACjD,EACD,CAAC;YACD,KAAK,EAAE,CAAC;QACV,CAAC;IACH,CAAC,EAAE,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC,CAAC;IAEjC,MAAM,iBAAiB,GACrB,WAAW,CACT,CAAC,KAAa,EAAE,MAAmB,EAAE,EAAE;QACrC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC7B,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC,EACD,CAAC,aAAa,EAAE,oBAAoB,CAAC,CACtC,CAAC;IAEJ,MAAM,GAAG,GAAG,OAAO,CACjB,GAAG,EAAE,CAAC,CAAC;QACL,SAAS;QACT,OAAO;QACP,aAAa,EAAE,iBAAiB;QAChC,SAAS,EAAE,mBAAmB;QAC9B,kBAAkB,EAAE,mBAAmB,EAAE,sFAAsF;QAC/H,KAAK;KACN,CAAC,EACF,CAAC,mBAAmB,EAAE,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,CAAC,CACpE,CAAC;IAEF,OAAO,CACL,KAAC,mBAAmB,CAAC,QAAQ,IAAC,KAAK,EAAE,GAAG,YACtC,KAAC,MAAM,IAAC,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,oBAAoB,YAC3D,QAAQ,GACF,GACoB,CAChC,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {Dialog} from '@sqlrooms/ui';\nimport React, {\n PropsWithChildren,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport type {ChartConfig} from '../chart-types';\nimport {ChartBuilderContext} from './ChartBuilderContext';\nimport {createChartBuilderStore} from './createChartBuilderStore';\nimport type {\n ChartBuilderColumn,\n ChartTypeDefinition,\n} from '../chart-types/base-types';\n\nexport type ChartBuilderRootProps = PropsWithChildren<{\n /** Table name to use in generated specs */\n tableName: string;\n /** Available columns for field selectors */\n columns: ChartBuilderColumn[];\n /** Callback when a chart spec is created */\n onCreateChart: (title: string, metadata: ChartConfig) => void;\n /** Optional chart types to show (defaults to an empty array) */\n chartTypes?: ChartTypeDefinition[];\n /** Controlled open state */\n open?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n}>;\n\n/**\n * Compound-component root that provides shared chart-builder state via context\n * and renders a Radix `Dialog`.\n *\n * Supports both controlled (`open`/`onOpenChange`) and uncontrolled usage.\n */\nexport const ChartBuilderRoot: React.FC<ChartBuilderRootProps> = ({\n tableName,\n columns,\n onCreateChart,\n chartTypes,\n open,\n onOpenChange,\n children,\n}) => {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(false);\n const [store] = useState(() => createChartBuilderStore());\n const isControlled = open !== undefined;\n const resolvedOpen = isControlled ? open : uncontrolledOpen;\n\n const resolvedOnOpenChange = useMemo(\n () => (isControlled ? (onOpenChange ?? (() => {})) : setUncontrolledOpen),\n [isControlled, onOpenChange],\n );\n\n // All resolved chart types are available by default\n // (Filtering by schema compatibility was removed in favour of runtime validation)\n const availableChartTypes = useMemo(() => chartTypes ?? [], [chartTypes]);\n\n useEffect(() => {\n const {selectedTemplateId, reset} = store.getState();\n if (\n selectedTemplateId &&\n !availableChartTypes.some(\n (template) => template.id === selectedTemplateId,\n )\n ) {\n reset();\n }\n }, [availableChartTypes, store]);\n\n const handleCreateChart: (title: string, config: ChartConfig) => void =\n useCallback(\n (title: string, config: ChartConfig) => {\n onCreateChart(title, config);\n resolvedOnOpenChange(false);\n },\n [onCreateChart, resolvedOnOpenChange],\n );\n\n const ctx = useMemo(\n () => ({\n tableName,\n columns,\n onCreateChart: handleCreateChart,\n templates: availableChartTypes,\n availableTemplates: availableChartTypes, // TODO: why we need both templates and availableTemplates? can we remove one of them?\n store,\n }),\n [availableChartTypes, columns, handleCreateChart, store, tableName],\n );\n\n return (\n <ChartBuilderContext.Provider value={ctx}>\n <Dialog open={resolvedOpen} onOpenChange={resolvedOnOpenChange}>\n {children}\n </Dialog>\n </ChartBuilderContext.Provider>\n );\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartBuilderTypeGrid.d.ts","sourceRoot":"","sources":["../../src/chart-builders/ChartBuilderTypeGrid.tsx"],"names":[],"mappings":"AACA,OAAO,KAAgB,MAAM,OAAO,CAAC;AAMrC,MAAM,WAAW,yBAAyB;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CA2DpE,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from '@sqlrooms/ui';
|
|
3
|
+
import { useMemo } from 'react';
|
|
4
|
+
import { useChartBuilderContext, useChartBuilderStore, } from './ChartBuilderContext';
|
|
5
|
+
export const ChartBuilderTypeGrid = ({ className, showWhenSelected = false, }) => {
|
|
6
|
+
const { availableTemplates } = useChartBuilderContext();
|
|
7
|
+
const selectedTemplateId = useChartBuilderStore((state) => state.selectedTemplateId);
|
|
8
|
+
const selectTemplate = useChartBuilderStore((state) => state.selectTemplate);
|
|
9
|
+
const shouldRender = showWhenSelected || !selectedTemplateId;
|
|
10
|
+
const availableCount = availableTemplates.length;
|
|
11
|
+
const selectedTemplate = useMemo(() => availableTemplates.find((template) => template.id === selectedTemplateId), [availableTemplates, selectedTemplateId]);
|
|
12
|
+
if (!shouldRender)
|
|
13
|
+
return null;
|
|
14
|
+
if (availableCount === 0) {
|
|
15
|
+
return (_jsx("p", { className: cn('text-muted-foreground py-4 text-sm', className), children: "No built-in chart types are available for the current table schema." }));
|
|
16
|
+
}
|
|
17
|
+
return (_jsx("div", { className: cn('grid grid-cols-2 gap-2 py-2', className), children: availableTemplates.map((template) => {
|
|
18
|
+
const Icon = template.icon;
|
|
19
|
+
const isSelected = selectedTemplate?.id === template.id;
|
|
20
|
+
return (_jsxs("button", { type: "button", className: cn('flex items-start gap-3 rounded-md border p-3 text-left transition-colors', 'hover:bg-accent hover:text-accent-foreground', isSelected && 'border-primary bg-accent text-accent-foreground'), onClick: () => selectTemplate(template.id), children: [_jsx(Icon, { className: "mt-0.5 h-5 w-5 shrink-0 opacity-70" }), _jsxs("span", { className: "min-w-0", children: [_jsx("span", { className: "block text-sm font-medium", children: template.label ?? template.description }), _jsx("span", { className: "text-muted-foreground block text-xs", children: template.description })] })] }, template.id));
|
|
21
|
+
}) }));
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=ChartBuilderTypeGrid.js.map
|