@sqlrooms/mosaic 0.29.0-rc.7 → 0.29.0-rc.8
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/LICENSE.md +2 -1
- package/README.md +134 -0
- package/dist/MosaicSlice.d.ts +1 -0
- package/dist/MosaicSlice.d.ts.map +1 -1
- package/dist/MosaicSlice.js.map +1 -1
- package/dist/VgPlotChart.d.ts.map +1 -1
- package/dist/VgPlotChart.js +9 -3
- package/dist/VgPlotChart.js.map +1 -1
- package/dist/ai/ai.d.ts +9 -4
- package/dist/ai/ai.d.ts.map +1 -1
- package/dist/ai/ai.js +91 -49
- package/dist/ai/ai.js.map +1 -1
- package/dist/ai.d.ts.map +1 -1
- package/dist/ai.js.map +1 -1
- package/dist/charts/MosaicChart.d.ts +3 -1
- package/dist/charts/MosaicChart.d.ts.map +1 -1
- package/dist/charts/MosaicChart.js +2 -2
- package/dist/charts/MosaicChart.js.map +1 -1
- package/dist/charts/MosaicChartError.d.ts +8 -2
- package/dist/charts/MosaicChartError.d.ts.map +1 -1
- package/dist/charts/MosaicChartError.js +29 -3
- package/dist/charts/MosaicChartError.js.map +1 -1
- package/dist/charts/MosaicChartSettingsButton.d.ts +15 -0
- package/dist/charts/MosaicChartSettingsButton.d.ts.map +1 -0
- package/dist/charts/MosaicChartSettingsButton.js +7 -0
- package/dist/charts/MosaicChartSettingsButton.js.map +1 -0
- package/dist/charts/MosaicChartView.d.ts +2 -0
- package/dist/charts/MosaicChartView.d.ts.map +1 -1
- package/dist/charts/MosaicChartView.js +20 -7
- package/dist/charts/MosaicChartView.js.map +1 -1
- package/dist/charts/chart-settings/MosaicChartSettings.d.ts.map +1 -1
- package/dist/charts/chart-settings/MosaicChartSettings.js +3 -3
- package/dist/charts/chart-settings/MosaicChartSettings.js.map +1 -1
- package/dist/charts/chart-settings/MosaicChartSettingsPanel.js +1 -1
- package/dist/charts/chart-settings/MosaicChartSettingsPanel.js.map +1 -1
- package/dist/charts/chart-settings/MosaicChartTypeSelector.d.ts.map +1 -1
- package/dist/charts/chart-settings/MosaicChartTypeSelector.js +11 -4
- package/dist/charts/chart-settings/MosaicChartTypeSelector.js.map +1 -1
- package/dist/charts/chart-types/base-types.d.ts +17 -6
- package/dist/charts/chart-types/base-types.d.ts.map +1 -1
- package/dist/charts/chart-types/base-types.js +3 -0
- package/dist/charts/chart-types/base-types.js.map +1 -1
- package/dist/charts/chart-types/box-plot/renderer/BoxPlotClient.d.ts.map +1 -1
- package/dist/charts/chart-types/box-plot/renderer/BoxPlotClient.js +3 -8
- package/dist/charts/chart-types/box-plot/renderer/BoxPlotClient.js.map +1 -1
- package/dist/charts/chart-types/chart-config.d.ts +3 -1
- package/dist/charts/chart-types/chart-config.d.ts.map +1 -1
- package/dist/charts/chart-types/chart-config.js +2 -2
- package/dist/charts/chart-types/chart-config.js.map +1 -1
- package/dist/charts/chart-types/count-plot/spec.d.ts +2 -1
- package/dist/charts/chart-types/count-plot/spec.d.ts.map +1 -1
- package/dist/charts/chart-types/count-plot/spec.js +65 -34
- package/dist/charts/chart-types/count-plot/spec.js.map +1 -1
- package/dist/charts/chart-types/count-plot/tool.js +1 -1
- package/dist/charts/chart-types/count-plot/tool.js.map +1 -1
- package/dist/charts/chart-types/createDefaultChartTypes.js +2 -2
- package/dist/charts/chart-types/createDefaultChartTypes.js.map +1 -1
- package/dist/charts/chart-types/custom-spec/spec.d.ts +2 -1
- package/dist/charts/chart-types/custom-spec/spec.d.ts.map +1 -1
- package/dist/charts/chart-types/custom-spec/spec.js +16 -12
- package/dist/charts/chart-types/custom-spec/spec.js.map +1 -1
- package/dist/charts/chart-types/errors.d.ts +25 -0
- package/dist/charts/chart-types/errors.d.ts.map +1 -1
- package/dist/charts/chart-types/errors.js +38 -0
- package/dist/charts/chart-types/errors.js.map +1 -1
- package/dist/charts/chart-types/heatmap/spec.d.ts +2 -1
- package/dist/charts/chart-types/heatmap/spec.d.ts.map +1 -1
- package/dist/charts/chart-types/heatmap/spec.js +53 -21
- package/dist/charts/chart-types/heatmap/spec.js.map +1 -1
- package/dist/charts/chart-types/heatmap/tool.js +2 -2
- package/dist/charts/chart-types/heatmap/tool.js.map +1 -1
- package/dist/charts/chart-types/histogram/HistogramSettings.d.ts.map +1 -1
- package/dist/charts/chart-types/histogram/HistogramSettings.js +3 -1
- package/dist/charts/chart-types/histogram/HistogramSettings.js.map +1 -1
- package/dist/charts/chart-types/histogram/schema.d.ts +2 -0
- package/dist/charts/chart-types/histogram/schema.d.ts.map +1 -1
- package/dist/charts/chart-types/histogram/schema.js +1 -0
- package/dist/charts/chart-types/histogram/schema.js.map +1 -1
- package/dist/charts/chart-types/histogram/spec.d.ts +2 -1
- package/dist/charts/chart-types/histogram/spec.d.ts.map +1 -1
- package/dist/charts/chart-types/histogram/spec.js +50 -27
- package/dist/charts/chart-types/histogram/spec.js.map +1 -1
- package/dist/charts/chart-types/histogram/tool.d.ts +2 -0
- package/dist/charts/chart-types/histogram/tool.d.ts.map +1 -1
- package/dist/charts/chart-types/histogram/tool.js +1 -1
- package/dist/charts/chart-types/histogram/tool.js.map +1 -1
- package/dist/charts/chart-types/index.d.ts +4 -4
- package/dist/charts/chart-types/index.js +4 -4
- package/dist/charts/chart-types/index.js.map +1 -1
- package/dist/charts/chart-types/line-chart/LineChartSettings.d.ts.map +1 -1
- package/dist/charts/chart-types/line-chart/LineChartSettings.js +4 -13
- package/dist/charts/chart-types/line-chart/LineChartSettings.js.map +1 -1
- package/dist/charts/chart-types/line-chart/LineChartXFieldSelector.d.ts +7 -0
- package/dist/charts/chart-types/line-chart/LineChartXFieldSelector.d.ts.map +1 -0
- package/dist/charts/chart-types/line-chart/LineChartXFieldSelector.js +22 -0
- package/dist/charts/chart-types/line-chart/LineChartXFieldSelector.js.map +1 -0
- package/dist/charts/chart-types/line-chart/LineChartYFieldsSelector.d.ts +7 -0
- package/dist/charts/chart-types/line-chart/LineChartYFieldsSelector.d.ts.map +1 -0
- package/dist/charts/chart-types/line-chart/LineChartYFieldsSelector.js +42 -0
- package/dist/charts/chart-types/line-chart/LineChartYFieldsSelector.js.map +1 -0
- package/dist/charts/chart-types/line-chart/schema.d.ts +2 -0
- package/dist/charts/chart-types/line-chart/schema.d.ts.map +1 -1
- package/dist/charts/chart-types/line-chart/schema.js +5 -0
- package/dist/charts/chart-types/line-chart/schema.js.map +1 -1
- package/dist/charts/chart-types/line-chart/spec.d.ts +2 -1
- package/dist/charts/chart-types/line-chart/spec.d.ts.map +1 -1
- package/dist/charts/chart-types/line-chart/spec.js +97 -65
- package/dist/charts/chart-types/line-chart/spec.js.map +1 -1
- package/dist/charts/chart-types/line-chart/tool.d.ts +2 -0
- package/dist/charts/chart-types/line-chart/tool.d.ts.map +1 -1
- package/dist/charts/chart-types/line-chart/tool.js +1 -1
- package/dist/charts/chart-types/line-chart/tool.js.map +1 -1
- package/dist/charts/chart-types/line-chart/utils.d.ts +7 -0
- package/dist/charts/chart-types/line-chart/utils.d.ts.map +1 -0
- package/dist/charts/chart-types/line-chart/utils.js +17 -0
- package/dist/charts/chart-types/line-chart/utils.js.map +1 -0
- package/dist/charts/chart-types/mosaicChartTypes.d.ts +4 -2
- package/dist/charts/chart-types/mosaicChartTypes.d.ts.map +1 -1
- package/dist/charts/chart-types/mosaicChartTypes.js +2 -2
- package/dist/charts/chart-types/mosaicChartTypes.js.map +1 -1
- package/dist/charts/chart-types/scatter-plot/ScatterPlotSettings.d.ts +3 -0
- package/dist/charts/chart-types/scatter-plot/ScatterPlotSettings.d.ts.map +1 -0
- package/dist/charts/chart-types/{bubble-chart/BubbleChartSettings.js → scatter-plot/ScatterPlotSettings.js} +4 -4
- package/dist/charts/chart-types/scatter-plot/ScatterPlotSettings.js.map +1 -0
- package/dist/charts/chart-types/scatter-plot/definition.d.ts +4 -0
- package/dist/charts/chart-types/scatter-plot/definition.d.ts.map +1 -0
- package/dist/charts/chart-types/scatter-plot/definition.js +24 -0
- package/dist/charts/chart-types/scatter-plot/definition.js.map +1 -0
- package/dist/charts/chart-types/{bubble-chart → scatter-plot}/schema.d.ts +5 -5
- package/dist/charts/chart-types/scatter-plot/schema.d.ts.map +1 -0
- package/dist/charts/chart-types/{bubble-chart → scatter-plot}/schema.js +5 -5
- package/dist/charts/chart-types/scatter-plot/schema.js.map +1 -0
- package/dist/charts/chart-types/scatter-plot/spec.d.ts +5 -0
- package/dist/charts/chart-types/scatter-plot/spec.d.ts.map +1 -0
- package/dist/charts/chart-types/scatter-plot/spec.js +81 -0
- package/dist/charts/chart-types/scatter-plot/spec.js.map +1 -0
- package/dist/charts/chart-types/{bubble-chart → scatter-plot}/tool.d.ts +3 -3
- package/dist/charts/chart-types/{bubble-chart → scatter-plot}/tool.d.ts.map +1 -1
- package/dist/charts/chart-types/{bubble-chart → scatter-plot}/tool.js +17 -13
- package/dist/charts/chart-types/scatter-plot/tool.js.map +1 -0
- package/dist/charts/dashboard/MosaicDashboardChartHeaderActions.d.ts.map +1 -1
- package/dist/charts/dashboard/MosaicDashboardChartHeaderActions.js +12 -5
- package/dist/charts/dashboard/MosaicDashboardChartHeaderActions.js.map +1 -1
- package/dist/charts/dashboard/MosaicDashboardChartRenderer.d.ts.map +1 -1
- package/dist/charts/dashboard/MosaicDashboardChartRenderer.js +2 -2
- package/dist/charts/dashboard/MosaicDashboardChartRenderer.js.map +1 -1
- package/dist/charts/useChartDataPolicy.d.ts.map +1 -1
- package/dist/charts/useChartDataPolicy.js +2 -1
- package/dist/charts/useChartDataPolicy.js.map +1 -1
- package/dist/charts/useChartPanelClients.d.ts +8 -0
- package/dist/charts/useChartPanelClients.d.ts.map +1 -0
- package/dist/charts/useChartPanelClients.js +22 -0
- package/dist/charts/useChartPanelClients.js.map +1 -0
- package/dist/charts/useMosaicChartRenderContext.d.ts +2 -3
- package/dist/charts/useMosaicChartRenderContext.d.ts.map +1 -1
- package/dist/charts/useMosaicChartRenderContext.js +15 -15
- package/dist/charts/useMosaicChartRenderContext.js.map +1 -1
- package/dist/charts/worksheet/ChartBlockHeader.d.ts.map +1 -1
- package/dist/charts/worksheet/ChartBlockHeader.js +4 -3
- package/dist/charts/worksheet/ChartBlockHeader.js.map +1 -1
- package/dist/charts/worksheet/ChartBlockRenderer.d.ts.map +1 -1
- package/dist/charts/worksheet/ChartBlockRenderer.js +3 -13
- package/dist/charts/worksheet/ChartBlockRenderer.js.map +1 -1
- package/dist/column-types-utils.d.ts.map +1 -1
- package/dist/column-types-utils.js +12 -4
- package/dist/column-types-utils.js.map +1 -1
- package/dist/components/AggregationSelector.d.ts.map +1 -1
- package/dist/components/AggregationSelector.js +9 -2
- package/dist/components/AggregationSelector.js.map +1 -1
- package/dist/components/BlockCaptionEditor.d.ts +20 -0
- package/dist/components/BlockCaptionEditor.d.ts.map +1 -0
- package/dist/components/BlockCaptionEditor.js +15 -0
- package/dist/components/BlockCaptionEditor.js.map +1 -0
- package/dist/components/ColorSelector.d.ts +12 -0
- package/dist/components/ColorSelector.d.ts.map +1 -0
- package/dist/components/ColorSelector.js +14 -0
- package/dist/components/ColorSelector.js.map +1 -0
- package/dist/components/ColumnSelector.d.ts +1 -0
- package/dist/components/ColumnSelector.d.ts.map +1 -1
- package/dist/components/ColumnSelector.js +2 -2
- package/dist/components/ColumnSelector.js.map +1 -1
- package/dist/components/Combobox.d.ts +45 -0
- package/dist/components/Combobox.d.ts.map +1 -0
- package/dist/components/Combobox.js +58 -0
- package/dist/components/Combobox.js.map +1 -0
- package/dist/components/FieldSelectorInput.d.ts +1 -0
- package/dist/components/FieldSelectorInput.d.ts.map +1 -1
- package/dist/components/FieldSelectorInput.js +4 -9
- package/dist/components/FieldSelectorInput.js.map +1 -1
- package/dist/components/MultiFieldSelector.d.ts +4 -1
- package/dist/components/MultiFieldSelector.d.ts.map +1 -1
- package/dist/components/MultiFieldSelector.js +4 -13
- package/dist/components/MultiFieldSelector.js.map +1 -1
- package/dist/components/TemporalGranularitySelector.d.ts.map +1 -1
- package/dist/components/TemporalGranularitySelector.js +13 -9
- package/dist/components/TemporalGranularitySelector.js.map +1 -1
- package/dist/components/useCombobox.d.ts +23 -0
- package/dist/components/useCombobox.d.ts.map +1 -0
- package/dist/components/useCombobox.js +26 -0
- package/dist/components/useCombobox.js.map +1 -0
- package/dist/constants/chart-colors.d.ts +3 -0
- package/dist/constants/chart-colors.d.ts.map +1 -0
- package/dist/constants/chart-colors.js +5 -0
- package/dist/constants/chart-colors.js.map +1 -0
- package/dist/dashboard/DefaultMosaicDashboardBlock.d.ts +2 -1
- package/dist/dashboard/DefaultMosaicDashboardBlock.d.ts.map +1 -1
- package/dist/dashboard/DefaultMosaicDashboardBlock.js +1 -1
- package/dist/dashboard/DefaultMosaicDashboardBlock.js.map +1 -1
- package/dist/dashboard/MosaicDashboardSlice.d.ts +22 -4
- package/dist/dashboard/MosaicDashboardSlice.d.ts.map +1 -1
- package/dist/dashboard/MosaicDashboardSlice.js +55 -0
- package/dist/dashboard/MosaicDashboardSlice.js.map +1 -1
- package/dist/dashboard/components/ResetFiltersButton.d.ts +14 -0
- package/dist/dashboard/components/ResetFiltersButton.d.ts.map +1 -0
- package/dist/dashboard/components/ResetFiltersButton.js +15 -0
- package/dist/dashboard/components/ResetFiltersButton.js.map +1 -0
- package/dist/dashboard/dashboard-types.d.ts +9 -3
- package/dist/dashboard/dashboard-types.d.ts.map +1 -1
- package/dist/dashboard/hooks/useDashboardResetFilters.d.ts +14 -0
- package/dist/dashboard/hooks/useDashboardResetFilters.d.ts.map +1 -0
- package/dist/dashboard/hooks/useDashboardResetFilters.js +39 -0
- package/dist/dashboard/hooks/useDashboardResetFilters.js.map +1 -0
- package/dist/dashboard/hooks/usePanelResetFilters.d.ts +16 -0
- package/dist/dashboard/hooks/usePanelResetFilters.d.ts.map +1 -0
- package/dist/dashboard/hooks/usePanelResetFilters.js +47 -0
- package/dist/dashboard/hooks/usePanelResetFilters.js.map +1 -0
- package/dist/dashboard/toolbar/MosaicDashboardAddPanelDropdown.d.ts.map +1 -1
- package/dist/dashboard/toolbar/MosaicDashboardAddPanelDropdown.js +3 -3
- package/dist/dashboard/toolbar/MosaicDashboardAddPanelDropdown.js.map +1 -1
- package/dist/dashboard/toolbar/MosaicDashboardDataTableSelector.d.ts +7 -0
- package/dist/dashboard/toolbar/MosaicDashboardDataTableSelector.d.ts.map +1 -0
- package/dist/dashboard/toolbar/MosaicDashboardDataTableSelector.js +18 -0
- package/dist/dashboard/toolbar/MosaicDashboardDataTableSelector.js.map +1 -0
- package/dist/dashboard/toolbar/MosaicDashboardResetFiltersButton.d.ts.map +1 -1
- package/dist/dashboard/toolbar/MosaicDashboardResetFiltersButton.js +4 -32
- package/dist/dashboard/toolbar/MosaicDashboardResetFiltersButton.js.map +1 -1
- package/dist/dashboard/toolbar/MosaicDashboardToolbar.d.ts +2 -2
- package/dist/dashboard/toolbar/MosaicDashboardToolbar.d.ts.map +1 -1
- package/dist/dashboard/toolbar/MosaicDashboardToolbar.js +12 -10
- package/dist/dashboard/toolbar/MosaicDashboardToolbar.js.map +1 -1
- package/dist/dashboard/usePanelClientRegistration.d.ts +7 -0
- package/dist/dashboard/usePanelClientRegistration.d.ts.map +1 -0
- package/dist/dashboard/usePanelClientRegistration.js +30 -0
- package/dist/dashboard/usePanelClientRegistration.js.map +1 -0
- package/dist/dashboard/usePanelClients.d.ts +7 -0
- package/dist/dashboard/usePanelClients.d.ts.map +1 -0
- package/dist/dashboard/usePanelClients.js +13 -0
- package/dist/dashboard/usePanelClients.js.map +1 -0
- package/dist/data-table-explorer/DataTableExplorer.d.ts +4 -2
- package/dist/data-table-explorer/DataTableExplorer.d.ts.map +1 -1
- package/dist/data-table-explorer/DataTableExplorer.js +4 -4
- package/dist/data-table-explorer/DataTableExplorer.js.map +1 -1
- package/dist/data-table-explorer/DataTableExplorerCategoryClient.d.ts.map +1 -1
- package/dist/data-table-explorer/DataTableExplorerCategoryClient.js +1 -0
- package/dist/data-table-explorer/DataTableExplorerCategoryClient.js.map +1 -1
- package/dist/data-table-explorer/createDataTableExplorerStore.d.ts +3 -0
- package/dist/data-table-explorer/createDataTableExplorerStore.d.ts.map +1 -1
- package/dist/data-table-explorer/createDataTableExplorerStore.js +6 -0
- package/dist/data-table-explorer/createDataTableExplorerStore.js.map +1 -1
- package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerHeaderActions.d.ts +4 -0
- package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerHeaderActions.d.ts.map +1 -0
- package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerHeaderActions.js +13 -0
- package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerHeaderActions.js.map +1 -0
- package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerPanelRenderer.d.ts.map +1 -1
- package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerPanelRenderer.js +22 -7
- package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerPanelRenderer.js.map +1 -1
- package/dist/data-table-explorer/dashboard/useDataTableExplorerPanelClients.d.ts +13 -0
- package/dist/data-table-explorer/dashboard/useDataTableExplorerPanelClients.d.ts.map +1 -0
- package/dist/data-table-explorer/dashboard/useDataTableExplorerPanelClients.js +32 -0
- package/dist/data-table-explorer/dashboard/useDataTableExplorerPanelClients.js.map +1 -0
- package/dist/data-table-explorer/dataTableExplorerController.d.ts +5 -1
- package/dist/data-table-explorer/dataTableExplorerController.d.ts.map +1 -1
- package/dist/data-table-explorer/dataTableExplorerController.js +5 -2
- package/dist/data-table-explorer/dataTableExplorerController.js.map +1 -1
- package/dist/data-table-explorer/hooks/useDataTableExplorerColumns.d.ts +12 -0
- package/dist/data-table-explorer/hooks/useDataTableExplorerColumns.d.ts.map +1 -0
- package/dist/data-table-explorer/hooks/useDataTableExplorerColumns.js +19 -0
- package/dist/data-table-explorer/hooks/useDataTableExplorerColumns.js.map +1 -0
- package/dist/data-table-explorer/hooks/useDataTableExplorerLifecycles.d.ts +30 -0
- package/dist/data-table-explorer/hooks/useDataTableExplorerLifecycles.d.ts.map +1 -0
- package/dist/data-table-explorer/hooks/useDataTableExplorerLifecycles.js +120 -0
- package/dist/data-table-explorer/hooks/useDataTableExplorerLifecycles.js.map +1 -0
- package/dist/data-table-explorer/hooks/useDataTableExplorerQueryState.d.ts +28 -0
- package/dist/data-table-explorer/hooks/useDataTableExplorerQueryState.d.ts.map +1 -0
- package/dist/data-table-explorer/hooks/useDataTableExplorerQueryState.js +40 -0
- package/dist/data-table-explorer/hooks/useDataTableExplorerQueryState.js.map +1 -0
- package/dist/data-table-explorer/hooks/useDataTableExplorerSelection.d.ts +13 -0
- package/dist/data-table-explorer/hooks/useDataTableExplorerSelection.d.ts.map +1 -0
- package/dist/data-table-explorer/hooks/useDataTableExplorerSelection.js +40 -0
- package/dist/data-table-explorer/hooks/useDataTableExplorerSelection.js.map +1 -0
- package/dist/data-table-explorer/hooks/useDataTableExplorerStatus.d.ts +18 -0
- package/dist/data-table-explorer/hooks/useDataTableExplorerStatus.d.ts.map +1 -0
- package/dist/data-table-explorer/hooks/useDataTableExplorerStatus.js +23 -0
- package/dist/data-table-explorer/hooks/useDataTableExplorerStatus.js.map +1 -0
- package/dist/data-table-explorer/hooks/useDataTableExplorerStoreState.d.ts +27 -0
- package/dist/data-table-explorer/hooks/useDataTableExplorerStoreState.d.ts.map +1 -0
- package/dist/data-table-explorer/hooks/useDataTableExplorerStoreState.js +28 -0
- package/dist/data-table-explorer/hooks/useDataTableExplorerStoreState.js.map +1 -0
- package/dist/data-table-explorer/hooks/useDataTableExplorerVisiblePage.d.ts +15 -0
- package/dist/data-table-explorer/hooks/useDataTableExplorerVisiblePage.d.ts.map +1 -0
- package/dist/data-table-explorer/hooks/useDataTableExplorerVisiblePage.js +21 -0
- package/dist/data-table-explorer/hooks/useDataTableExplorerVisiblePage.js.map +1 -0
- package/dist/data-table-explorer/types.d.ts +6 -3
- package/dist/data-table-explorer/types.d.ts.map +1 -1
- package/dist/data-table-explorer/types.js.map +1 -1
- package/dist/data-table-explorer/useDataTableExplorer.d.ts.map +1 -1
- package/dist/data-table-explorer/useDataTableExplorer.js +12 -275
- package/dist/data-table-explorer/useDataTableExplorer.js.map +1 -1
- package/dist/data-table-explorer/worksheet/DataTableBlockHeader.d.ts +1 -0
- package/dist/data-table-explorer/worksheet/DataTableBlockHeader.d.ts.map +1 -1
- package/dist/data-table-explorer/worksheet/DataTableBlockHeader.js +4 -2
- package/dist/data-table-explorer/worksheet/DataTableBlockHeader.js.map +1 -1
- package/dist/data-table-explorer/worksheet/DataTableBlockRenderer.d.ts.map +1 -1
- package/dist/data-table-explorer/worksheet/DataTableBlockRenderer.js +3 -3
- package/dist/data-table-explorer/worksheet/DataTableBlockRenderer.js.map +1 -1
- package/dist/index.d.ts +8 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -3
- package/dist/index.js.map +1 -1
- package/dist/useVgPlotChartRender.d.ts.map +1 -1
- package/dist/useVgPlotChartRender.js +125 -24
- package/dist/useVgPlotChartRender.js.map +1 -1
- package/dist/useVgPlotChartRetention.d.ts +11 -0
- package/dist/useVgPlotChartRetention.d.ts.map +1 -1
- package/dist/useVgPlotChartRetention.js.map +1 -1
- package/package.json +14 -14
- package/dist/charts/chart-types/bubble-chart/BubbleChartSettings.d.ts +0 -3
- package/dist/charts/chart-types/bubble-chart/BubbleChartSettings.d.ts.map +0 -1
- package/dist/charts/chart-types/bubble-chart/BubbleChartSettings.js.map +0 -1
- package/dist/charts/chart-types/bubble-chart/definition.d.ts +0 -4
- package/dist/charts/chart-types/bubble-chart/definition.d.ts.map +0 -1
- package/dist/charts/chart-types/bubble-chart/definition.js +0 -24
- package/dist/charts/chart-types/bubble-chart/definition.js.map +0 -1
- package/dist/charts/chart-types/bubble-chart/schema.d.ts.map +0 -1
- package/dist/charts/chart-types/bubble-chart/schema.js.map +0 -1
- package/dist/charts/chart-types/bubble-chart/spec.d.ts +0 -4
- package/dist/charts/chart-types/bubble-chart/spec.d.ts.map +0 -1
- package/dist/charts/chart-types/bubble-chart/spec.js +0 -31
- package/dist/charts/chart-types/bubble-chart/spec.js.map +0 -1
- package/dist/charts/chart-types/bubble-chart/tool.js.map +0 -1
- package/dist/hooks/useDataTable.d.ts +0 -3
- package/dist/hooks/useDataTable.d.ts.map +0 -1
- package/dist/hooks/useDataTable.js +0 -28
- package/dist/hooks/useDataTable.js.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * {@include ../README.md}\n * @packageDocumentation\n */\nexport {\n isParam,\n isSelection,\n makeClient,\n Param,\n Selection,\n} from '@uwdata/mosaic-core';\nexport {astToDOM, astToESM, parseSpec} from '@uwdata/mosaic-spec';\nexport type {Spec} from '@uwdata/mosaic-spec';\nexport {asc, column, desc, Query, sql} from '@uwdata/mosaic-sql';\nexport * as vg from '@uwdata/vgplot';\nexport {\n MosaicDashboard,\n MosaicDashboardRoot,\n type MosaicDashboardProps,\n type MosaicDashboardRootProps,\n} from './dashboard/MosaicDashboard';\nexport {\n createMosaicDashboardBlockDefinition,\n type CreateMosaicDashboardBlockDefinitionOptions,\n type MosaicDashboardBlockRenderProps,\n} from './dashboard/createMosaicDashboardBlockDefinition';\nexport {DefaultMosaicDashboardBlock} from './dashboard/DefaultMosaicDashboardBlock';\nexport {useMosaicDashboardContext} from './dashboard/MosaicDashboardContext';\nexport {MosaicDashboardPanelErrorBoundary} from './dashboard/panel/MosaicDashboardPanelErrorBoundary';\nexport {createDefaultMosaicDashboardPanelRenderers} from './dashboard/createDefaultMosaicDashboardPanelRenderers';\nexport {defaultAddPanelActions} from './dashboard/defaultPanelActions';\nexport {useSelectedOrFirstTable} from './dashboard/useSelectedOrFirstTable';\nexport {useTablesWithColumns} from './hooks/useTablesWithColumns';\nexport {MosaicDashboardPanelLayout} from './dashboard/panel/MosaicDashboardPanelLayout';\nexport {addDataTableExplorerPanelAction} from './data-table-explorer/addDataTableExplorerPanelAction';\nexport {addChartPanelAction} from './charts/addChartPanelAction';\nexport {\n createMosaicDashboardDataTableExplorerPanelConfig,\n createMosaicDashboardChartPanelConfig,\n createDefaultMosaicDashboardConfig,\n createMosaicDashboardSlice,\n getMosaicDashboardDockId,\n getMosaicDashboardGridId,\n getMosaicDashboardPanelId,\n getMosaicDashboardSelectionName,\n isChartPanelConfig,\n MOSAIC_DASHBOARD_PANEL,\n MosaicDashboardSliceConfig,\n useStoreWithMosaicDashboard,\n} from './dashboard/MosaicDashboardSlice';\nexport {\n MOSAIC_DASHBOARD_DATA_TABLE_EXPLORER_PANEL_TYPE,\n MOSAIC_DASHBOARD_CHART_PANEL_TYPE,\n MOSAIC_DASHBOARD_CHART_PANEL_TYPE as MOSAIC_DASHBOARD_VGPLOT_PANEL_TYPE,\n MosaicDashboardEntry,\n MosaicDashboardPanelConfig,\n} from './dashboard/dashboard-types';\nexport type {\n MosaicDashboardAddPanelAction,\n MosaicDashboardAddPanelActionContext,\n OnStartDashboard,\n} from './dashboard/action-types';\nexport type {\n CreateMosaicDashboardSliceProps,\n MosaicDashboardPanelRenderer,\n MosaicDashboardPanelRendererProps,\n MosaicDashboardSliceConfig as MosaicDashboardSliceConfigType,\n MosaicDashboardSliceState,\n MosaicDashboardStoreState,\n} from './dashboard/MosaicDashboardSlice';\nexport type {\n MosaicDashboardEntry as MosaicDashboardEntryType,\n MosaicDashboardPanelConfig as MosaicDashboardPanelConfigType,\n ChartPanelConfig,\n} from './dashboard/dashboard-types';\nexport type {\n MosaicDashboardLayoutType,\n MosaicDashboardPanelSource,\n DataTableExplorerPanelConfig,\n} from './dashboard/core-types';\nexport {\n createMosaicColorLegendPlot,\n MosaicColorLegend,\n type MosaicColorLegendProps,\n} from './MosaicColorLegend';\nexport {\n createDefaultMosaicConfig,\n createMosaicSlice,\n MosaicSliceConfig,\n type CreateMosaicSliceProps,\n type MosaicClientOptions,\n type MosaicPreAggregateOptions,\n type MosaicSliceState,\n type TrackedClient,\n} from './MosaicSlice';\nexport {DataPointLimitError} from './DataPointLimitError';\nexport {\n MosaicChartView,\n type MosaicChartViewProps,\n} from './charts/MosaicChartView';\nexport {\n MosaicChartSettingsPanel,\n type MosaicChartSettingsPanelProps,\n} from './charts/MosaicChartSettingsPanel';\nexport {useBrushSelectionParams} from './charts/useBrushSelectionParams';\nexport {\n useChartRetainer,\n useChartRetainerByKey,\n} from './charts/useChartRetainer';\nexport {\n DEFAULT_CHART_MAX_DATA_POINTS,\n assertChartDataPolicy,\n createChartRuntimeIssueFromError,\n getQueryResultRowCount,\n resolveChartDataPolicy,\n type ChartDataPolicy,\n type ChartDataPolicyOverride,\n type ChartDataPolicyContext,\n type ChartRuntimeIssue,\n type ChartRuntimeIssueContext,\n type ChartRuntimeIssueReporter,\n} from './chart-runtime';\nexport {\n DataTableExplorer,\n type DataTableExplorerCompoundHeaderProps,\n type DataTableExplorerCompoundResetButtonProps,\n type DataTableExplorerCompoundRowsProps,\n type DataTableExplorerCompoundStatusBarProps,\n type DataTableExplorerCompoundTableProps,\n type DataTableExplorerProps,\n type DataTableExplorerRootProps,\n} from './data-table-explorer/DataTableExplorer';\nexport {DataTableBlockRenderer} from './data-table-explorer/worksheet/DataTableBlockRenderer';\nexport {\n DataTableExplorerHeader,\n type DataTableExplorerHeaderProps,\n} from './data-table-explorer/DataTableExplorerHeader';\nexport {\n DataTableExplorerRows,\n type DataTableExplorerRowsProps,\n} from './data-table-explorer/DataTableExplorerRows';\nexport {\n DataTableExplorerStatusBar,\n type DataTableExplorerStatusBarProps,\n} from './data-table-explorer/DataTableExplorerStatusBar';\nexport {useDataTableExplorer} from './data-table-explorer/useDataTableExplorer';\nexport {\n ResponsivePlot,\n type PlotSize,\n type ResponsivePlotProps,\n} from './ResponsivePlot';\nexport {useMosaicClient, type UseMosaicClientOptions} from './useMosaicClient';\nexport {VgPlotChart} from './VgPlotChart';\nexport {\n DASHBOARD_AI_INSTRUCTIONS,\n MAP_TOOL_KEY,\n createDashboardAgentTool,\n createDashboardAiTools,\n} from './ai/ai';\nexport type {\n CreateDashboardAgentToolOptions,\n CreateDashboardAiToolsOptions,\n DashboardAgentResult,\n DashboardAgentRunResult,\n DashboardAgentToolCall,\n DashboardAiAdapter,\n DashboardAiStore,\n DashboardAiTable,\n CreateDashboardToolDepsOptions,\n} from './ai/ai';\n\n// Compound components\nexport {MosaicSpecChart} from './MosaicChart';\nexport {MosaicChartBuilder} from './MosaicChartBuilder';\n\n// Editor hooks and context\nexport {useMosaicEditorContext} from './editor/MosaicEditorContext';\nexport {\n getCachedMosaicSchema,\n loadMosaicSchema,\n preloadMosaicSchema,\n} from './editor/mosaicSchema';\nexport {useMosaicChartEditor} from './editor/useMosaicChartEditor';\n\n// Editor types\nexport type {MosaicChartContainerProps} from './editor/MosaicChartContainer';\nexport type {MosaicChartDisplayProps} from './editor/MosaicChartDisplay';\nexport type {MosaicChartEditorActionsProps} from './editor/MosaicChartEditorActions';\nexport type {MosaicCodeMirrorEditorProps} from './editor/MosaicCodeMirrorEditor';\nexport type {MosaicSpecEditorPanelProps} from './editor/MosaicSpecEditorPanel';\nexport type {\n MosaicEditorActions,\n MosaicEditorContextValue,\n MosaicEditorState,\n OnMosaicSpecChange,\n UseMosaicChartEditorOptions,\n UseMosaicChartEditorReturn,\n} from './editor/types';\nexport {\n getDataTableExplorerTableWidth,\n DATA_TABLE_EXPLORER_DEFAULT_COLUMN_WIDTH_PX,\n DATA_TABLE_EXPLORER_ROW_NUMBER_COLUMN_WIDTH_PX,\n DATA_TABLE_EXPLORER_UNSUPPORTED_COLUMN_WIDTH_PX,\n} from './data-table-explorer/layout';\nexport type {\n DataTableExplorerCategoryBucket,\n DataTableExplorerCategorySummary,\n DataTableExplorerColumnKind,\n DataTableExplorerColumnState,\n DataTableExplorerHistogramSummary,\n DataTableExplorerOptions,\n DataTableExplorerPaginationState,\n DataTableExplorerSorting,\n DataTableExplorerSummaryState,\n UseDataTableExplorerReturn,\n} from './data-table-explorer/types';\n\n// Chart builder components\nexport type {ChartBuilderActionsProps} from './chart-builders/ChartBuilderActions';\nexport {ChartBuilderActions} from './chart-builders/ChartBuilderActions';\nexport type {ChartBuilderContentProps} from './chart-builders/ChartBuilderContent';\nexport {ChartBuilderContent} from './chart-builders/ChartBuilderContent';\nexport {\n useChartBuilderContext,\n useChartBuilderStore,\n} from './chart-builders/ChartBuilderContext';\nexport type {ChartBuilderContextValue} from './chart-builders/ChartBuilderContext';\nexport type {\n ChartBuilderDialogContentProps,\n ChartBuilderDialogProps,\n ChartBuilderTriggerProps,\n} from './chart-builders/ChartBuilderDialog';\nexport {\n ChartBuilderDialogContent,\n ChartBuilderTrigger,\n} from './chart-builders/ChartBuilderDialog';\nexport type {ChartBuilderRootProps} from './chart-builders/ChartBuilderRoot';\nexport {ChartBuilderRoot} from './chart-builders/ChartBuilderRoot';\nexport type {ChartBuilderFieldsProps} from './chart-builders/ChartBuilderFields';\nexport {ChartBuilderFields} from './chart-builders/ChartBuilderFields';\nexport {Field} from './components/Field';\nexport {TableSelector} from './components/TableSelector';\nexport {ColumnSelector} from './components/ColumnSelector';\nexport {MultiFieldSelector} from './components/MultiFieldSelector';\nexport {\n ColumnsProvider,\n useColumnsContext,\n type ColumnsContextValue,\n} from './components/ColumnsContext';\nexport type {ChartBuilderTypeGridProps} from './chart-builders/ChartBuilderTypeGrid';\nexport {ChartBuilderTypeGrid} from './chart-builders/ChartBuilderTypeGrid';\nexport {buildChartTitleForSpec} from './chart-builders/chartSpecTitle';\nexport {\n boxPlotChartType,\n bubbleChartChartType,\n countPlotChartType,\n createDefaultChartTypes,\n customSpecChartType,\n heatmapChartType,\n histogramChartType,\n isSpecChartType,\n isComponentChartType,\n lineChartChartType,\n mosaicChartTypes,\n ChartConfig,\n HistogramChartSettings,\n LineChartSettings,\n CountPlotChartSettings,\n BubbleChartSettings,\n HeatmapChartSettings,\n BoxPlotChartSettings,\n // Tool helpers, parameters, and AI tool creators\n BaseChartToolParameters,\n validateColumnExists,\n HistogramToolParameters,\n LineChartToolParameters,\n CountPlotToolParameters,\n HeatmapToolParameters,\n BubbleChartToolParameters,\n BoxPlotToolParameters,\n createHistogramAiTool,\n createLineChartAiTool,\n createCountPlotAiTool,\n createHeatmapAiTool,\n createBubbleChartAiTool,\n createBoxPlotAiTool,\n createChartTools,\n // New panel and dashboard tools\n createDataTableExplorerTool,\n createListPanelsTool,\n createRemovePanelTool,\n DataTableExplorerToolParameters,\n ListPanelsToolParameters,\n RemovePanelToolParameters,\n} from './charts/chart-types';\nexport type {\n ChartSettings,\n ChartType,\n ChartToolExecutionContext,\n DashboardToolDeps,\n ResolvedChartResources,\n CreateChartParams,\n CreateChartResult,\n HistogramToolParams,\n LineChartToolParams,\n CountPlotToolParams,\n HeatmapToolParams,\n BubbleChartToolParams,\n BoxPlotToolParams,\n DataTableExplorerToolParams,\n ListPanelsToolParams,\n RemovePanelToolParams,\n} from './charts/chart-types';\nexport {\n buildChartTypeTitle,\n canCreateChartFromType,\n} from './chart-builders/chartTypeUtils';\nexport {\n NUMERIC_COLUMN_TYPES,\n QUANTITATIVE_COLUMN_TYPES,\n TEMPORAL_COLUMN_TYPES,\n} from './column-types-utils';\nexport type {FieldSelectorInputProps} from './components/FieldSelectorInput';\nexport type {\n ChartBuilderColumn,\n ChartBuilderDashboardPanelOutput,\n ChartBuilderField,\n ChartSpec,\n ChartTypeDefinition,\n} from './charts/chart-types/base-types';\nexport {MosaicCodeMirrorEditor} from './editor/MosaicCodeMirrorEditor';\n\n// Dashboard agent\n\nexport {MosaicChart} from './charts/MosaicChart';\nexport {useParseChartConfig} from './charts/useParseChartConfig';\nexport {ChartBlockRenderer} from './charts/worksheet/ChartBlockRenderer';\nexport {useDataTable} from './hooks/useDataTable';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * {@include ../README.md}\n * @packageDocumentation\n */\nexport {\n isParam,\n isSelection,\n makeClient,\n Param,\n Selection,\n} from '@uwdata/mosaic-core';\nexport {astToDOM, astToESM, parseSpec} from '@uwdata/mosaic-spec';\nexport type {Spec} from '@uwdata/mosaic-spec';\nexport {asc, column, desc, Query, sql} from '@uwdata/mosaic-sql';\nexport * as vg from '@uwdata/vgplot';\nexport {\n MosaicDashboard,\n MosaicDashboardRoot,\n type MosaicDashboardProps,\n type MosaicDashboardRootProps,\n} from './dashboard/MosaicDashboard';\nexport {\n createMosaicDashboardBlockDefinition,\n type CreateMosaicDashboardBlockDefinitionOptions,\n type MosaicDashboardBlockRenderProps,\n} from './dashboard/createMosaicDashboardBlockDefinition';\nexport {DefaultMosaicDashboardBlock} from './dashboard/DefaultMosaicDashboardBlock';\nexport {useMosaicDashboardContext} from './dashboard/MosaicDashboardContext';\nexport {MosaicDashboardPanelErrorBoundary} from './dashboard/panel/MosaicDashboardPanelErrorBoundary';\nexport {createDefaultMosaicDashboardPanelRenderers} from './dashboard/createDefaultMosaicDashboardPanelRenderers';\nexport {defaultAddPanelActions} from './dashboard/defaultPanelActions';\nexport {useSelectedOrFirstTable} from './dashboard/useSelectedOrFirstTable';\nexport {useTablesWithColumns} from './hooks/useTablesWithColumns';\nexport {MosaicDashboardPanelLayout} from './dashboard/panel/MosaicDashboardPanelLayout';\nexport {usePanelClientRegistration} from './dashboard/usePanelClientRegistration';\nexport {usePanelClients} from './dashboard/usePanelClients';\nexport {\n usePanelResetFilters,\n type UsePanelResetFiltersOptions,\n type UsePanelResetFiltersReturn,\n} from './dashboard/hooks/usePanelResetFilters';\nexport {\n useDashboardResetFilters,\n type UseDashboardResetFiltersOptions,\n type UseDashboardResetFiltersReturn,\n} from './dashboard/hooks/useDashboardResetFilters';\nexport {\n ResetFiltersButton,\n type ResetFiltersButtonProps,\n} from './dashboard/components/ResetFiltersButton';\nexport {addDataTableExplorerPanelAction} from './data-table-explorer/addDataTableExplorerPanelAction';\nexport {addChartPanelAction} from './charts/addChartPanelAction';\nexport {\n createMosaicDashboardDataTableExplorerPanelConfig,\n createMosaicDashboardChartPanelConfig,\n createDefaultMosaicDashboardConfig,\n createMosaicDashboardSlice,\n getMosaicDashboardDockId,\n getMosaicDashboardGridId,\n getMosaicDashboardPanelId,\n getMosaicDashboardSelectionName,\n isChartPanelConfig,\n MOSAIC_DASHBOARD_PANEL,\n MosaicDashboardSliceConfig,\n useStoreWithMosaicDashboard,\n} from './dashboard/MosaicDashboardSlice';\nexport {\n MOSAIC_DASHBOARD_DATA_TABLE_EXPLORER_PANEL_TYPE,\n MOSAIC_DASHBOARD_CHART_PANEL_TYPE,\n MOSAIC_DASHBOARD_CHART_PANEL_TYPE as MOSAIC_DASHBOARD_VGPLOT_PANEL_TYPE,\n MosaicDashboardEntry,\n MosaicDashboardPanelConfig,\n} from './dashboard/dashboard-types';\nexport type {\n MosaicDashboardAddPanelAction,\n MosaicDashboardAddPanelActionContext,\n OnStartDashboard,\n} from './dashboard/action-types';\nexport type {\n CreateMosaicDashboardSliceProps,\n MosaicDashboardPanelRenderer,\n MosaicDashboardPanelRendererProps,\n MosaicDashboardSliceConfig as MosaicDashboardSliceConfigType,\n MosaicDashboardSliceState,\n MosaicDashboardStoreState,\n} from './dashboard/MosaicDashboardSlice';\nexport type {\n MosaicDashboardEntry as MosaicDashboardEntryType,\n MosaicDashboardPanelConfig as MosaicDashboardPanelConfigType,\n ChartPanelConfig,\n} from './dashboard/dashboard-types';\nexport type {\n MosaicDashboardLayoutType,\n MosaicDashboardPanelSource,\n DataTableExplorerPanelConfig,\n} from './dashboard/core-types';\nexport {\n createMosaicColorLegendPlot,\n MosaicColorLegend,\n type MosaicColorLegendProps,\n} from './MosaicColorLegend';\nexport {\n createDefaultMosaicConfig,\n createMosaicSlice,\n MosaicSliceConfig,\n type CreateMosaicSliceProps,\n type MosaicClientOptions,\n type MosaicPreAggregateOptions,\n type MosaicSliceState,\n type TrackedClient,\n} from './MosaicSlice';\nexport {DataPointLimitError} from './DataPointLimitError';\nexport {\n MosaicChartView,\n type MosaicChartViewProps,\n} from './charts/MosaicChartView';\nexport {\n MosaicChartSettingsPanel,\n type MosaicChartSettingsPanelProps,\n} from './charts/MosaicChartSettingsPanel';\nexport {useBrushSelectionParams} from './charts/useBrushSelectionParams';\nexport {\n useChartRetainer,\n useChartRetainerByKey,\n} from './charts/useChartRetainer';\nexport {\n DEFAULT_CHART_MAX_DATA_POINTS,\n assertChartDataPolicy,\n createChartRuntimeIssueFromError,\n getQueryResultRowCount,\n resolveChartDataPolicy,\n type ChartDataPolicy,\n type ChartDataPolicyOverride,\n type ChartDataPolicyContext,\n type ChartRuntimeIssue,\n type ChartRuntimeIssueContext,\n type ChartRuntimeIssueReporter,\n} from './chart-runtime';\nexport {\n DataTableExplorer,\n type DataTableExplorerCompoundHeaderProps,\n type DataTableExplorerCompoundResetButtonProps,\n type DataTableExplorerCompoundRowsProps,\n type DataTableExplorerCompoundStatusBarProps,\n type DataTableExplorerCompoundTableProps,\n type DataTableExplorerProps,\n type DataTableExplorerRootProps,\n} from './data-table-explorer/DataTableExplorer';\nexport {DataTableBlockRenderer} from './data-table-explorer/worksheet/DataTableBlockRenderer';\nexport {\n DataTableExplorerHeader,\n type DataTableExplorerHeaderProps,\n} from './data-table-explorer/DataTableExplorerHeader';\nexport {\n DataTableExplorerRows,\n type DataTableExplorerRowsProps,\n} from './data-table-explorer/DataTableExplorerRows';\nexport {\n DataTableExplorerStatusBar,\n type DataTableExplorerStatusBarProps,\n} from './data-table-explorer/DataTableExplorerStatusBar';\nexport {useDataTableExplorer} from './data-table-explorer/useDataTableExplorer';\nexport {\n ResponsivePlot,\n type PlotSize,\n type ResponsivePlotProps,\n} from './ResponsivePlot';\nexport {useMosaicClient, type UseMosaicClientOptions} from './useMosaicClient';\nexport {VgPlotChart} from './VgPlotChart';\nexport {\n DASHBOARD_AI_INSTRUCTIONS,\n MAP_TOOL_KEY,\n createDashboardAgentTool,\n createDashboardAiTools,\n} from './ai/ai';\nexport type {\n CreateDashboardAgentToolOptions,\n CreateDashboardAiToolsOptions,\n DashboardAgentResult,\n DashboardAgentRunResult,\n DashboardAgentToolCall,\n DashboardAiAdapter,\n DashboardAiStore,\n DashboardAiTable,\n CreateDashboardToolDepsOptions,\n} from './ai/ai';\n\n// Compound components\nexport {MosaicSpecChart} from './MosaicChart';\nexport {MosaicChartBuilder} from './MosaicChartBuilder';\n\n// Editor hooks and context\nexport {useMosaicEditorContext} from './editor/MosaicEditorContext';\nexport {\n getCachedMosaicSchema,\n loadMosaicSchema,\n preloadMosaicSchema,\n} from './editor/mosaicSchema';\nexport {useMosaicChartEditor} from './editor/useMosaicChartEditor';\n\n// Editor types\nexport type {MosaicChartContainerProps} from './editor/MosaicChartContainer';\nexport type {MosaicChartDisplayProps} from './editor/MosaicChartDisplay';\nexport type {MosaicChartEditorActionsProps} from './editor/MosaicChartEditorActions';\nexport type {MosaicCodeMirrorEditorProps} from './editor/MosaicCodeMirrorEditor';\nexport type {MosaicSpecEditorPanelProps} from './editor/MosaicSpecEditorPanel';\nexport type {\n MosaicEditorActions,\n MosaicEditorContextValue,\n MosaicEditorState,\n OnMosaicSpecChange,\n UseMosaicChartEditorOptions,\n UseMosaicChartEditorReturn,\n} from './editor/types';\nexport {\n getDataTableExplorerTableWidth,\n DATA_TABLE_EXPLORER_DEFAULT_COLUMN_WIDTH_PX,\n DATA_TABLE_EXPLORER_ROW_NUMBER_COLUMN_WIDTH_PX,\n DATA_TABLE_EXPLORER_UNSUPPORTED_COLUMN_WIDTH_PX,\n} from './data-table-explorer/layout';\nexport type {\n DataTableExplorerCategoryBucket,\n DataTableExplorerCategorySummary,\n DataTableExplorerColumnKind,\n DataTableExplorerColumnState,\n DataTableExplorerHistogramSummary,\n DataTableExplorerOptions,\n DataTableExplorerPaginationState,\n DataTableExplorerSorting,\n DataTableExplorerSummaryState,\n DataTableExplorerTableReference,\n UseDataTableExplorerReturn,\n} from './data-table-explorer/types';\n\n// Chart builder components\nexport type {ChartBuilderActionsProps} from './chart-builders/ChartBuilderActions';\nexport {ChartBuilderActions} from './chart-builders/ChartBuilderActions';\nexport type {ChartBuilderContentProps} from './chart-builders/ChartBuilderContent';\nexport {ChartBuilderContent} from './chart-builders/ChartBuilderContent';\nexport {\n useChartBuilderContext,\n useChartBuilderStore,\n} from './chart-builders/ChartBuilderContext';\nexport type {ChartBuilderContextValue} from './chart-builders/ChartBuilderContext';\nexport type {\n ChartBuilderDialogContentProps,\n ChartBuilderDialogProps,\n ChartBuilderTriggerProps,\n} from './chart-builders/ChartBuilderDialog';\nexport {\n ChartBuilderDialogContent,\n ChartBuilderTrigger,\n} from './chart-builders/ChartBuilderDialog';\nexport type {ChartBuilderRootProps} from './chart-builders/ChartBuilderRoot';\nexport {ChartBuilderRoot} from './chart-builders/ChartBuilderRoot';\nexport type {ChartBuilderFieldsProps} from './chart-builders/ChartBuilderFields';\nexport {ChartBuilderFields} from './chart-builders/ChartBuilderFields';\nexport {Field} from './components/Field';\nexport {TableSelector} from './components/TableSelector';\nexport {ColumnSelector} from './components/ColumnSelector';\nexport {MultiFieldSelector} from './components/MultiFieldSelector';\nexport {\n ColumnsProvider,\n useColumnsContext,\n type ColumnsContextValue,\n} from './components/ColumnsContext';\nexport type {ChartBuilderTypeGridProps} from './chart-builders/ChartBuilderTypeGrid';\nexport {ChartBuilderTypeGrid} from './chart-builders/ChartBuilderTypeGrid';\nexport {buildChartTitleForSpec} from './chart-builders/chartSpecTitle';\nexport {\n boxPlotChartType,\n scatterPlotChartType,\n countPlotChartType,\n createDefaultChartTypes,\n customSpecChartType,\n heatmapChartType,\n histogramChartType,\n isSpecChartType,\n isComponentChartType,\n lineChartChartType,\n mosaicChartTypes,\n ChartConfig,\n HistogramChartSettings,\n LineChartSettings,\n CountPlotChartSettings,\n ScatterPlotChartSettings,\n HeatmapChartSettings,\n BoxPlotChartSettings,\n // Tool helpers, parameters, and AI tool creators\n BaseChartToolParameters,\n validateColumnExists,\n HistogramToolParameters,\n LineChartToolParameters,\n CountPlotToolParameters,\n HeatmapToolParameters,\n ScatterPlotToolParameters,\n BoxPlotToolParameters,\n createHistogramAiTool,\n createLineChartAiTool,\n createCountPlotAiTool,\n createHeatmapAiTool,\n createScatterPlotAiTool,\n createBoxPlotAiTool,\n createChartTools,\n // New panel and dashboard tools\n createDataTableExplorerTool,\n createListPanelsTool,\n createRemovePanelTool,\n DataTableExplorerToolParameters,\n ListPanelsToolParameters,\n RemovePanelToolParameters,\n} from './charts/chart-types';\nexport type {\n ChartSettings,\n ChartType,\n ChartToolExecutionContext,\n DashboardToolDeps,\n ResolvedChartResources,\n CreateChartParams,\n CreateChartResult,\n HistogramToolParams,\n LineChartToolParams,\n CountPlotToolParams,\n HeatmapToolParams,\n ScatterPlotToolParams,\n BoxPlotToolParams,\n DataTableExplorerToolParams,\n ListPanelsToolParams,\n RemovePanelToolParams,\n} from './charts/chart-types';\nexport {\n buildChartTypeTitle,\n canCreateChartFromType,\n} from './chart-builders/chartTypeUtils';\nexport {\n NUMERIC_COLUMN_TYPES,\n QUANTITATIVE_COLUMN_TYPES,\n TEMPORAL_COLUMN_TYPES,\n} from './column-types-utils';\nexport type {FieldSelectorInputProps} from './components/FieldSelectorInput';\nexport type {\n ChartBuilderColumn,\n ChartBuilderDashboardPanelOutput,\n ChartBuilderField,\n ChartSpec,\n ChartTypeDefinition,\n} from './charts/chart-types/base-types';\nexport {MosaicCodeMirrorEditor} from './editor/MosaicCodeMirrorEditor';\n\n// Dashboard agent\n\nexport {MosaicChart} from './charts/MosaicChart';\nexport {useParseChartConfig} from './charts/useParseChartConfig';\nexport {ChartBlockRenderer} from './charts/worksheet/ChartBlockRenderer';\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useVgPlotChartRender.d.ts","sourceRoot":"","sources":["../src/useVgPlotChartRender.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,SAAS,EAAC,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAsB,IAAI,EAAC,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAC,mBAAmB,EAAC,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC/B,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"useVgPlotChartRender.d.ts","sourceRoot":"","sources":["../src/useVgPlotChartRender.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,SAAS,EAAC,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAsB,IAAI,EAAC,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAC,mBAAmB,EAAC,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC/B,MAAM,iBAAiB,CAAC;AAkRzB,KAAK,0BAA0B,GAAG;IAChC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACrD,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;IAC7C,aAAa,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC/B,WAAW,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACxC,cAAc,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACrD,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,UAAU,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACpC,mBAAmB,CAAC,EAAE,wBAAwB,CAAC;IAC/C,oBAAoB,CAAC,EAAE,yBAAyB,CAAC;CAClD,CAAC;AAEF;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,YAAY,EACZ,IAAI,EACJ,OAAO,EACP,MAAM,EACN,aAAa,EACb,WAAW,EACX,cAAc,EACd,OAAO,EACP,UAAU,EACV,mBAAmB,EACnB,oBAAoB,GACrB,EAAE,0BAA0B,QAsH5B"}
|
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
import { astToDOM, parseSpec } from '@uwdata/mosaic-spec';
|
|
2
2
|
import { useLayoutEffect, useRef } from 'react';
|
|
3
3
|
import { assertChartDataPolicy, createChartRuntimeIssueFromError, } from './chart-runtime';
|
|
4
|
+
/**
|
|
5
|
+
* Symbols used to store original mark handlers before wrapping.
|
|
6
|
+
* This allows wrapMarkHandlers to be idempotent - it stores the original
|
|
7
|
+
* handlers once and reuses them on subsequent calls, preventing nested wrappers.
|
|
8
|
+
*/
|
|
9
|
+
const ORIGINAL_QUERY_PENDING = Symbol('originalQueryPending');
|
|
10
|
+
const ORIGINAL_QUERY_RESULT = Symbol('originalQueryResult');
|
|
11
|
+
const ORIGINAL_QUERY_ERROR = Symbol('originalQueryError');
|
|
4
12
|
function getPlotInstance(element) {
|
|
5
|
-
|
|
13
|
+
let htmlElement = element;
|
|
14
|
+
if (!htmlElement?.classList.contains('plot')) {
|
|
15
|
+
htmlElement = htmlElement?.querySelector('.plot');
|
|
16
|
+
}
|
|
17
|
+
const plot = htmlElement.value;
|
|
6
18
|
return plot && typeof plot === 'object' ? plot : null;
|
|
7
19
|
}
|
|
8
20
|
function resizeChartElement(element, size) {
|
|
@@ -38,44 +50,125 @@ function attachPlotElement(container, element) {
|
|
|
38
50
|
}
|
|
39
51
|
container.replaceChildren(element);
|
|
40
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Checks the aggregate state of all chart marks and reports errors when all marks are done.
|
|
55
|
+
* This function is called after mark handlers complete to determine if the chart succeeded or failed.
|
|
56
|
+
*
|
|
57
|
+
* @param chart - Retained chart with mark state tracking
|
|
58
|
+
* @param onError - Callback invoked with first error when marks fail
|
|
59
|
+
* @param runtimeIssueReporter - Optional reporter for runtime issues
|
|
60
|
+
* @param runtimeIssueContext - Context for runtime issue reporting
|
|
61
|
+
* @param dataPolicy - Optional policy for validating chart data
|
|
62
|
+
*/
|
|
63
|
+
function checkAndReportAggregateState(chart, onError, runtimeIssueReporter, runtimeIssueContext, dataPolicy) {
|
|
64
|
+
if (!chart.markStates || chart.markStates.size === 0) {
|
|
65
|
+
return; // No marks tracked yet
|
|
66
|
+
}
|
|
67
|
+
// Check if all marks are done (only success or error, not pending or idle)
|
|
68
|
+
const allDone = Array.from(chart.markStates.values()).every((state) => state === 'success' || state === 'error');
|
|
69
|
+
if (!allDone) {
|
|
70
|
+
return; // Wait for all marks to finish
|
|
71
|
+
}
|
|
72
|
+
// All marks done - determine aggregate state
|
|
73
|
+
const hasError = Array.from(chart.markStates.values()).some((state) => state === 'error');
|
|
74
|
+
if (hasError) {
|
|
75
|
+
// Find first error
|
|
76
|
+
const firstErrorMark = Array.from(chart.markStates.entries()).find(([, state]) => state === 'error')?.[0];
|
|
77
|
+
const error = firstErrorMark && chart.markErrors?.get(firstErrorMark);
|
|
78
|
+
if (error) {
|
|
79
|
+
chart.error = error; // For standalone case
|
|
80
|
+
onError(error);
|
|
81
|
+
if (runtimeIssueContext) {
|
|
82
|
+
runtimeIssueReporter?.reportIssue(createChartRuntimeIssueFromError(error, runtimeIssueContext, dataPolicy));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
// All successful
|
|
88
|
+
delete chart.error;
|
|
89
|
+
runtimeIssueReporter?.clearIssue();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Wraps chart mark handlers (queryPending, queryResult, queryError) to track state and report errors.
|
|
94
|
+
* This function is idempotent - it stores original handlers in Symbols and only wraps once.
|
|
95
|
+
* Subsequent calls update the closures with fresh dataPolicy/runtimeIssue reporters without nesting wrappers.
|
|
96
|
+
*
|
|
97
|
+
* Pre-populates all queryable marks with 'idle' state for proper aggregate state tracking.
|
|
98
|
+
*
|
|
99
|
+
* @param chart - Retained chart whose marks will be wrapped
|
|
100
|
+
* @param onError - Callback invoked when mark errors occur
|
|
101
|
+
* @param dataPolicy - Optional policy for validating chart data
|
|
102
|
+
* @param runtimeIssueContext - Context for runtime issue reporting
|
|
103
|
+
* @param runtimeIssueReporter - Optional reporter for runtime issues
|
|
104
|
+
*/
|
|
41
105
|
function wrapMarkHandlers(chart, onError, dataPolicy, runtimeIssueContext, runtimeIssueReporter) {
|
|
42
106
|
const plot = getPlotInstance(chart.element);
|
|
43
107
|
if (!plot?.marks) {
|
|
44
108
|
return;
|
|
45
109
|
}
|
|
110
|
+
// Initialize tracking
|
|
111
|
+
if (!chart.markStates) {
|
|
112
|
+
chart.markStates = new Map();
|
|
113
|
+
}
|
|
114
|
+
if (!chart.markErrors) {
|
|
115
|
+
chart.markErrors = new Map();
|
|
116
|
+
}
|
|
46
117
|
plot.marks.forEach((mark) => {
|
|
118
|
+
const markWithOriginals = mark;
|
|
119
|
+
// Pre-populate tracking for all queryable marks
|
|
120
|
+
if (mark.queryPending || mark.queryResult || mark.queryError) {
|
|
121
|
+
chart.markStates.set(mark, 'idle');
|
|
122
|
+
}
|
|
123
|
+
// Wrap queryPending - store original if not already stored
|
|
124
|
+
if (mark.queryPending) {
|
|
125
|
+
if (!markWithOriginals[ORIGINAL_QUERY_PENDING]) {
|
|
126
|
+
markWithOriginals[ORIGINAL_QUERY_PENDING] = mark.queryPending;
|
|
127
|
+
}
|
|
128
|
+
const originalPending = markWithOriginals[ORIGINAL_QUERY_PENDING];
|
|
129
|
+
mark.queryPending = function () {
|
|
130
|
+
chart.markStates.set(mark, 'pending');
|
|
131
|
+
return originalPending.call(this);
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
// Wrap queryResult - store original if not already stored
|
|
47
135
|
if (mark.queryResult) {
|
|
48
|
-
|
|
49
|
-
|
|
136
|
+
if (!markWithOriginals[ORIGINAL_QUERY_RESULT]) {
|
|
137
|
+
markWithOriginals[ORIGINAL_QUERY_RESULT] = mark.queryResult;
|
|
138
|
+
}
|
|
139
|
+
const originalQueryResult = markWithOriginals[ORIGINAL_QUERY_RESULT];
|
|
140
|
+
mark.queryResult = function (data) {
|
|
50
141
|
try {
|
|
51
142
|
assertChartDataPolicy(dataPolicy, data);
|
|
52
|
-
|
|
53
|
-
|
|
143
|
+
chart.markStates.set(mark, 'success');
|
|
144
|
+
chart.markErrors.delete(mark);
|
|
145
|
+
checkAndReportAggregateState(chart, onError, runtimeIssueReporter, runtimeIssueContext, dataPolicy);
|
|
146
|
+
return originalQueryResult.call(this, data);
|
|
54
147
|
}
|
|
55
148
|
catch (error) {
|
|
56
149
|
const normalizedError = error instanceof Error ? error : new Error(String(error));
|
|
57
|
-
|
|
58
|
-
chart.
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
if (mark.queryError) {
|
|
63
|
-
return mark.queryError(normalizedError);
|
|
150
|
+
chart.markStates.set(mark, 'error');
|
|
151
|
+
chart.markErrors.set(mark, normalizedError);
|
|
152
|
+
checkAndReportAggregateState(chart, onError, runtimeIssueReporter, runtimeIssueContext, dataPolicy);
|
|
153
|
+
if (markWithOriginals[ORIGINAL_QUERY_ERROR]) {
|
|
154
|
+
return markWithOriginals[ORIGINAL_QUERY_ERROR].call(this, normalizedError);
|
|
64
155
|
}
|
|
65
156
|
return undefined;
|
|
66
157
|
}
|
|
67
158
|
};
|
|
68
159
|
}
|
|
160
|
+
// Wrap queryError - store original if not already stored
|
|
69
161
|
if (mark.queryError) {
|
|
70
|
-
|
|
71
|
-
|
|
162
|
+
if (!markWithOriginals[ORIGINAL_QUERY_ERROR]) {
|
|
163
|
+
markWithOriginals[ORIGINAL_QUERY_ERROR] = mark.queryError;
|
|
164
|
+
}
|
|
165
|
+
const originalQueryError = markWithOriginals[ORIGINAL_QUERY_ERROR];
|
|
166
|
+
mark.queryError = function (error) {
|
|
72
167
|
const normalizedError = error instanceof Error ? error : new Error(String(error));
|
|
73
|
-
|
|
74
|
-
chart.
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}
|
|
78
|
-
originalQueryError.call(mark, error);
|
|
168
|
+
chart.markStates?.set(mark, 'error');
|
|
169
|
+
chart.markErrors?.set(mark, normalizedError);
|
|
170
|
+
checkAndReportAggregateState(chart, onError, runtimeIssueReporter, runtimeIssueContext, dataPolicy);
|
|
171
|
+
return originalQueryError.call(this, error);
|
|
79
172
|
};
|
|
80
173
|
}
|
|
81
174
|
});
|
|
@@ -91,21 +184,29 @@ export function useVgPlotChartRender({ containerRef, spec, specKey, params, cont
|
|
|
91
184
|
return;
|
|
92
185
|
}
|
|
93
186
|
if (cachedChart) {
|
|
187
|
+
// Check aggregate state before clearing to preserve error state
|
|
188
|
+
checkAndReportAggregateState(cachedChart, onError, runtimeIssueReporter, runtimeIssueContext, dataPolicy);
|
|
189
|
+
// Clear mark states when reusing cached chart - marks will re-register on next query
|
|
190
|
+
if (cachedChart.markStates) {
|
|
191
|
+
cachedChart.markStates.clear();
|
|
192
|
+
}
|
|
193
|
+
if (cachedChart.markErrors) {
|
|
194
|
+
cachedChart.markErrors.clear();
|
|
195
|
+
}
|
|
94
196
|
attachPlotElement(container, asPlotDomElement(cachedChart.element));
|
|
95
197
|
if (containerSize) {
|
|
96
198
|
resizeChartElement(cachedChart.element, containerSize);
|
|
97
199
|
}
|
|
98
200
|
// Re-wrap mark handlers with fresh closures for dataPolicy/runtimeIssue reporting
|
|
99
201
|
wrapMarkHandlers(cachedChart, onError, dataPolicy, runtimeIssueContext, runtimeIssueReporter);
|
|
100
|
-
// Restore error state from cached chart
|
|
101
|
-
if (cachedChart.error) {
|
|
102
|
-
onError(cachedChart.error);
|
|
103
|
-
}
|
|
104
202
|
return;
|
|
105
203
|
}
|
|
106
204
|
if (!containerSize) {
|
|
107
205
|
return;
|
|
108
206
|
}
|
|
207
|
+
// Clear any previous runtime issues when starting to render a new chart spec
|
|
208
|
+
// This ensures stale errors don't persist when the chart configuration changes
|
|
209
|
+
runtimeIssueReporter?.clearIssue();
|
|
109
210
|
// Create new chart
|
|
110
211
|
const renderVersion = ++renderVersionRef.current;
|
|
111
212
|
let cancelled = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useVgPlotChartRender.js","sourceRoot":"","sources":["../src/useVgPlotChartRender.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,QAAQ,EAAE,SAAS,EAAO,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAC,eAAe,EAAE,MAAM,EAAC,MAAM,OAAO,CAAC;AAG9C,OAAO,EACL,qBAAqB,EACrB,gCAAgC,GAIjC,MAAM,iBAAiB,CAAC;AAezB,SAAS,eAAe,CAAC,OAAe;IACtC,MAAM,IAAI,GAAI,OAA2C,CAAC,KAAK,CAAC;IAChE,OAAO,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAE,IAAqB,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1E,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAe,EAAE,IAAc;IACzD,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,CAAC,IAAI,EAAE,YAAY,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5D,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/D,IAAI,YAAY,IAAI,aAAa,EAAE,CAAC;QAClC,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;IACrB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,IAAU,EACV,IAAc,EACd,MAA4C;IAE5C,MAAM,SAAS,GAAG;QAChB,GAAG,IAAI;QACP,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,IAAI,CAAC,MAAM;KACZ,CAAC;IAEV,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,MAAM;QACpB,CAAC,CAAC,EAAC,MAAM,EAAE,MAA4C,EAAC;QACxD,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO,CAAC,MAAM,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;AAChD,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe;IACvC,OAAO,OAAyB,CAAC;AACnC,CAAC;AAED,SAAS,iBAAiB,CACxB,SAAsB,EACtB,OAAuB;IAEvB,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;QAC1E,OAAO;IACT,CAAC;IACD,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,gBAAgB,CACvB,KAA0B,EAC1B,OAA+B,EAC/B,UAAmC,EACnC,mBAA8C,EAC9C,oBAAgD;IAEhD,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;QACjB,OAAO;IACT,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAmB,EAAE,EAAE;QACzC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC;YAC7C,IAAI,CAAC,WAAW,GAAG,CAAC,IAAa,EAAE,EAAE;gBACnC,IAAI,CAAC;oBACH,qBAAqB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;oBACxC,oBAAoB,EAAE,UAAU,EAAE,CAAC;oBACnC,OAAO,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC9C,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,eAAe,GACnB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC5D,OAAO,CAAC,eAAe,CAAC,CAAC;oBACzB,KAAK,CAAC,KAAK,GAAG,eAAe,CAAC;oBAC9B,IAAI,mBAAmB,EAAE,CAAC;wBACxB,oBAAoB,EAAE,WAAW,CAC/B,gCAAgC,CAC9B,eAAe,EACf,mBAAmB,EACnB,UAAU,CACX,CACF,CAAC;oBACJ,CAAC;oBACD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;wBACpB,OAAO,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;oBAC1C,CAAC;oBACD,OAAO,SAAS,CAAC;gBACnB,CAAC;YACH,CAAC,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC;YAC3C,IAAI,CAAC,UAAU,GAAG,CAAC,KAAc,EAAE,EAAE;gBACnC,MAAM,eAAe,GACnB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC5D,OAAO,CAAC,eAAe,CAAC,CAAC;gBACzB,KAAK,CAAC,KAAK,GAAG,eAAe,CAAC;gBAC9B,IAAI,mBAAmB,EAAE,CAAC;oBACxB,oBAAoB,EAAE,WAAW,CAC/B,gCAAgC,CAC9B,eAAe,EACf,mBAAmB,EACnB,UAAU,CACX,CACF,CAAC;gBACJ,CAAC;gBACD,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACvC,CAAC,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAgBD;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,EACnC,YAAY,EACZ,IAAI,EACJ,OAAO,EACP,MAAM,EACN,aAAa,EACb,WAAW,EACX,cAAc,EACd,OAAO,EACP,UAAU,EACV,mBAAmB,EACnB,oBAAoB,GACO;IAC3B,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAEnC,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;QACvC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,iBAAiB,CAAC,SAAS,EAAE,gBAAgB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;YACpE,IAAI,aAAa,EAAE,CAAC;gBAClB,kBAAkB,CAAC,WAAW,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;YACzD,CAAC;YAED,kFAAkF;YAClF,gBAAgB,CACd,WAAW,EACX,OAAO,EACP,UAAU,EACV,mBAAmB,EACnB,oBAAoB,CACrB,CAAC;YAEF,wCAAwC;YACxC,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;gBACtB,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;YAED,OAAO;QACT,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QAED,mBAAmB;QACnB,MAAM,aAAa,GAAG,EAAE,gBAAgB,CAAC,OAAO,CAAC;QACjD,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,KAAK,sBAAsB,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,CAAC;aACrD,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YAChB,IACE,SAAS;gBACT,aAAa,KAAK,gBAAgB,CAAC,OAAO;gBAC1C,CAAC,YAAY,CAAC,OAAO,EACrB,CAAC;gBACD,OAAO;YACT,CAAC;YAED,MAAM,SAAS,GAAwB;gBACrC,OAAO;gBACP,MAAM;gBACN,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;aACzC,CAAC;YAEF,cAAc,CAAC,SAAS,CAAC,CAAC;YAC1B,iBAAiB,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAEjD,mCAAmC;YACnC,gBAAgB,CACd,SAAS,EACT,OAAO,EACP,UAAU,EACV,mBAAmB,EACnB,oBAAoB,CACrB,CAAC;QACJ,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACf,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO;YACT,CAAC;YAED,oCAAoC;YACpC,MAAM,eAAe,GACnB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5D,OAAO,CAAC,eAAe,CAAC,CAAC;YACzB,IAAI,mBAAmB,EAAE,CAAC;gBACxB,oBAAoB,EAAE,WAAW,CAAC;oBAChC,IAAI,EAAE,cAAc;oBACpB,OAAO,EAAE,mBAAmB,CAAC,OAAO;oBACpC,SAAS,EAAE,mBAAmB,CAAC,SAAS;oBACxC,OAAO,EAAE,eAAe,CAAC,OAAO;oBAChC,WAAW,EAAE,KAAK;iBACnB,CAAC,CAAC;YACL,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,eAAe,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QAEL,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC;QACF,uDAAuD;IACzD,CAAC,EAAE;QACD,aAAa;QACb,OAAO;QACP,WAAW;QACX,cAAc;QACd,OAAO;QACP,UAAU;QACV,mBAAmB;QACnB,oBAAoB;KACrB,CAAC,CAAC;AACL,CAAC","sourcesContent":["import {Param, Selection} from '@uwdata/mosaic-core';\nimport {astToDOM, parseSpec, Spec} from '@uwdata/mosaic-spec';\nimport {useLayoutEffect, useRef} from 'react';\nimport {PlotSize} from './ResponsivePlot';\nimport {RetainedVgPlotChart} from './useVgPlotChartRetention';\nimport {\n assertChartDataPolicy,\n createChartRuntimeIssueFromError,\n type ChartDataPolicy,\n type ChartRuntimeIssueContext,\n type ChartRuntimeIssueReporter,\n} from './chart-runtime';\n\ntype PlotDomElement = HTMLElement | SVGSVGElement;\n\ntype QueryableMark = {\n queryResult?: (data: unknown) => unknown;\n queryError?: (error: unknown) => unknown;\n};\n\ntype PlotInstance = {\n marks?: Array<{destroy?: () => void} & QueryableMark>;\n render?: () => Promise<unknown> | unknown;\n setAttribute?: (name: string, value: unknown) => boolean;\n};\n\nfunction getPlotInstance(element: object): PlotInstance | null {\n const plot = (element as HTMLElement & {value?: unknown}).value;\n return plot && typeof plot === 'object' ? (plot as PlotInstance) : null;\n}\n\nfunction resizeChartElement(element: object, size: PlotSize): boolean {\n const plot = getPlotInstance(element);\n if (!plot?.setAttribute || !plot.render) {\n return false;\n }\n\n const widthChanged = plot.setAttribute('width', size.width);\n const heightChanged = plot.setAttribute('height', size.height);\n if (widthChanged || heightChanged) {\n void plot.render();\n }\n return true;\n}\n\nasync function createSpecChartElement(\n spec: Spec,\n size: PlotSize,\n params?: Map<string, Param<any> | Selection>,\n): Promise<PlotDomElement> {\n const sizedSpec = {\n ...spec,\n width: size.width,\n height: size.height,\n } as Spec;\n\n const ast = await parseSpec(sizedSpec);\n const options = params\n ? {params: params as unknown as Map<string, Param<any>>}\n : undefined;\n\n return (await astToDOM(ast, options)).element;\n}\n\nfunction asPlotDomElement(element: object): PlotDomElement {\n return element as PlotDomElement;\n}\n\nfunction attachPlotElement(\n container: HTMLElement,\n element: PlotDomElement,\n) {\n if (container.childNodes.length === 1 && container.firstChild === element) {\n return;\n }\n container.replaceChildren(element);\n}\n\nfunction wrapMarkHandlers(\n chart: RetainedVgPlotChart,\n onError: (error: Error) => void,\n dataPolicy?: ChartDataPolicy | null,\n runtimeIssueContext?: ChartRuntimeIssueContext,\n runtimeIssueReporter?: ChartRuntimeIssueReporter,\n) {\n const plot = getPlotInstance(chart.element);\n if (!plot?.marks) {\n return;\n }\n\n plot.marks.forEach((mark: QueryableMark) => {\n if (mark.queryResult) {\n const originalQueryResult = mark.queryResult;\n mark.queryResult = (data: unknown) => {\n try {\n assertChartDataPolicy(dataPolicy, data);\n runtimeIssueReporter?.clearIssue();\n return originalQueryResult.call(mark, data);\n } catch (error) {\n const normalizedError =\n error instanceof Error ? error : new Error(String(error));\n onError(normalizedError);\n chart.error = normalizedError;\n if (runtimeIssueContext) {\n runtimeIssueReporter?.reportIssue(\n createChartRuntimeIssueFromError(\n normalizedError,\n runtimeIssueContext,\n dataPolicy,\n ),\n );\n }\n if (mark.queryError) {\n return mark.queryError(normalizedError);\n }\n return undefined;\n }\n };\n }\n if (mark.queryError) {\n const originalQueryError = mark.queryError;\n mark.queryError = (error: unknown) => {\n const normalizedError =\n error instanceof Error ? error : new Error(String(error));\n onError(normalizedError);\n chart.error = normalizedError;\n if (runtimeIssueContext) {\n runtimeIssueReporter?.reportIssue(\n createChartRuntimeIssueFromError(\n normalizedError,\n runtimeIssueContext,\n dataPolicy,\n ),\n );\n }\n originalQueryError.call(mark, error);\n };\n }\n });\n}\n\ntype UseVgPlotChartRenderParams = {\n containerRef: React.RefObject<HTMLDivElement | null>;\n spec: Spec;\n specKey: string | null;\n params?: Map<string, Param<any> | Selection>;\n containerSize: PlotSize | null;\n cachedChart: RetainedVgPlotChart | null;\n onChartCreated: (chart: RetainedVgPlotChart) => void;\n onError: (error: Error) => void;\n dataPolicy?: ChartDataPolicy | null;\n runtimeIssueContext?: ChartRuntimeIssueContext;\n runtimeIssueReporter?: ChartRuntimeIssueReporter;\n};\n\n/**\n * Hook to handle chart rendering lifecycle: creating, caching, and displaying vgplot charts.\n */\nexport function useVgPlotChartRender({\n containerRef,\n spec,\n specKey,\n params,\n containerSize,\n cachedChart,\n onChartCreated,\n onError,\n dataPolicy,\n runtimeIssueContext,\n runtimeIssueReporter,\n}: UseVgPlotChartRenderParams) {\n const renderVersionRef = useRef(0);\n\n useLayoutEffect(() => {\n const container = containerRef.current;\n if (!container) {\n return;\n }\n\n if (cachedChart) {\n attachPlotElement(container, asPlotDomElement(cachedChart.element));\n if (containerSize) {\n resizeChartElement(cachedChart.element, containerSize);\n }\n\n // Re-wrap mark handlers with fresh closures for dataPolicy/runtimeIssue reporting\n wrapMarkHandlers(\n cachedChart,\n onError,\n dataPolicy,\n runtimeIssueContext,\n runtimeIssueReporter,\n );\n\n // Restore error state from cached chart\n if (cachedChart.error) {\n onError(cachedChart.error);\n }\n\n return;\n }\n\n if (!containerSize) {\n return;\n }\n\n // Create new chart\n const renderVersion = ++renderVersionRef.current;\n let cancelled = false;\n\n void createSpecChartElement(spec, containerSize, params)\n .then((element) => {\n if (\n cancelled ||\n renderVersion !== renderVersionRef.current ||\n !containerRef.current\n ) {\n return;\n }\n\n const nextChart: RetainedVgPlotChart = {\n element,\n params,\n specKey: specKey ?? JSON.stringify(spec),\n };\n\n onChartCreated(nextChart);\n attachPlotElement(containerRef.current, element);\n\n // Wrap marks with runtime handlers\n wrapMarkHandlers(\n nextChart,\n onError,\n dataPolicy,\n runtimeIssueContext,\n runtimeIssueReporter,\n );\n })\n .catch((error) => {\n if (cancelled) {\n return;\n }\n\n // Normalize error to Error instance\n const normalizedError =\n error instanceof Error ? error : new Error(String(error));\n onError(normalizedError);\n if (runtimeIssueContext) {\n runtimeIssueReporter?.reportIssue({\n kind: 'render-error',\n panelId: runtimeIssueContext.panelId,\n chartType: runtimeIssueContext.chartType,\n message: normalizedError.message,\n recoverable: false,\n });\n }\n console.error('[VgPlotChart] Error rendering chart:', normalizedError);\n });\n\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n containerSize,\n specKey,\n cachedChart,\n onChartCreated,\n onError,\n dataPolicy,\n runtimeIssueContext,\n runtimeIssueReporter,\n ]);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"useVgPlotChartRender.js","sourceRoot":"","sources":["../src/useVgPlotChartRender.ts"],"names":[],"mappings":"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","sourcesContent":["import {Param, Selection} from '@uwdata/mosaic-core';\nimport {astToDOM, parseSpec, Spec} from '@uwdata/mosaic-spec';\nimport {useLayoutEffect, useRef} from 'react';\nimport {PlotSize} from './ResponsivePlot';\nimport {RetainedVgPlotChart} from './useVgPlotChartRetention';\nimport {\n assertChartDataPolicy,\n createChartRuntimeIssueFromError,\n type ChartDataPolicy,\n type ChartRuntimeIssueContext,\n type ChartRuntimeIssueReporter,\n} from './chart-runtime';\n\ntype PlotDomElement = HTMLElement | SVGSVGElement;\n\ntype QueryableMark = {\n queryPending?: () => unknown;\n queryResult?: (data: unknown) => unknown;\n queryError?: (error: unknown) => unknown;\n};\n\ntype PlotInstance = {\n marks?: Array<{destroy?: () => void} & QueryableMark>;\n render?: () => Promise<unknown> | unknown;\n setAttribute?: (name: string, value: unknown) => boolean;\n};\n\n/**\n * Symbols used to store original mark handlers before wrapping.\n * This allows wrapMarkHandlers to be idempotent - it stores the original\n * handlers once and reuses them on subsequent calls, preventing nested wrappers.\n */\nconst ORIGINAL_QUERY_PENDING = Symbol('originalQueryPending');\nconst ORIGINAL_QUERY_RESULT = Symbol('originalQueryResult');\nconst ORIGINAL_QUERY_ERROR = Symbol('originalQueryError');\n\n/**\n * QueryableMark extended with Symbol properties for storing original handlers.\n * Used internally by wrapMarkHandlers to detect and prevent re-wrapping.\n */\ntype MarkWithOriginals = QueryableMark & {\n [ORIGINAL_QUERY_PENDING]?: () => unknown;\n [ORIGINAL_QUERY_RESULT]?: (data: unknown) => unknown;\n [ORIGINAL_QUERY_ERROR]?: (error: unknown) => unknown;\n};\n\nfunction getPlotInstance(element: object): PlotInstance | null {\n let htmlElement = element as HTMLElement | null;\n\n if (!htmlElement?.classList.contains('plot')) {\n htmlElement = htmlElement?.querySelector('.plot') as HTMLElement | null;\n }\n\n const plot = (htmlElement as {value?: unknown}).value;\n\n return plot && typeof plot === 'object' ? (plot as PlotInstance) : null;\n}\n\nfunction resizeChartElement(element: object, size: PlotSize): boolean {\n const plot = getPlotInstance(element);\n if (!plot?.setAttribute || !plot.render) {\n return false;\n }\n\n const widthChanged = plot.setAttribute('width', size.width);\n const heightChanged = plot.setAttribute('height', size.height);\n if (widthChanged || heightChanged) {\n void plot.render();\n }\n return true;\n}\n\nasync function createSpecChartElement(\n spec: Spec,\n size: PlotSize,\n params?: Map<string, Param<any> | Selection>,\n): Promise<PlotDomElement> {\n const sizedSpec = {\n ...spec,\n width: size.width,\n height: size.height,\n } as Spec;\n\n const ast = await parseSpec(sizedSpec);\n const options = params\n ? {params: params as unknown as Map<string, Param<any>>}\n : undefined;\n\n return (await astToDOM(ast, options)).element;\n}\n\nfunction asPlotDomElement(element: object): PlotDomElement {\n return element as PlotDomElement;\n}\n\nfunction attachPlotElement(container: HTMLElement, element: PlotDomElement) {\n if (container.childNodes.length === 1 && container.firstChild === element) {\n return;\n }\n container.replaceChildren(element);\n}\n\n/**\n * Checks the aggregate state of all chart marks and reports errors when all marks are done.\n * This function is called after mark handlers complete to determine if the chart succeeded or failed.\n *\n * @param chart - Retained chart with mark state tracking\n * @param onError - Callback invoked with first error when marks fail\n * @param runtimeIssueReporter - Optional reporter for runtime issues\n * @param runtimeIssueContext - Context for runtime issue reporting\n * @param dataPolicy - Optional policy for validating chart data\n */\nfunction checkAndReportAggregateState(\n chart: RetainedVgPlotChart,\n onError: (error: Error) => void,\n runtimeIssueReporter: ChartRuntimeIssueReporter | undefined,\n runtimeIssueContext: ChartRuntimeIssueContext | undefined,\n dataPolicy: ChartDataPolicy | null | undefined,\n) {\n if (!chart.markStates || chart.markStates.size === 0) {\n return; // No marks tracked yet\n }\n\n // Check if all marks are done (only success or error, not pending or idle)\n const allDone = Array.from(chart.markStates.values()).every(\n (state) => state === 'success' || state === 'error',\n );\n\n if (!allDone) {\n return; // Wait for all marks to finish\n }\n\n // All marks done - determine aggregate state\n const hasError = Array.from(chart.markStates.values()).some(\n (state) => state === 'error',\n );\n\n if (hasError) {\n // Find first error\n const firstErrorMark = Array.from(chart.markStates.entries()).find(\n ([, state]) => state === 'error',\n )?.[0];\n const error = firstErrorMark && chart.markErrors?.get(firstErrorMark);\n\n if (error) {\n chart.error = error; // For standalone case\n onError(error);\n if (runtimeIssueContext) {\n runtimeIssueReporter?.reportIssue(\n createChartRuntimeIssueFromError(\n error,\n runtimeIssueContext,\n dataPolicy,\n ),\n );\n }\n }\n } else {\n // All successful\n delete chart.error;\n runtimeIssueReporter?.clearIssue();\n }\n}\n\n/**\n * Wraps chart mark handlers (queryPending, queryResult, queryError) to track state and report errors.\n * This function is idempotent - it stores original handlers in Symbols and only wraps once.\n * Subsequent calls update the closures with fresh dataPolicy/runtimeIssue reporters without nesting wrappers.\n *\n * Pre-populates all queryable marks with 'idle' state for proper aggregate state tracking.\n *\n * @param chart - Retained chart whose marks will be wrapped\n * @param onError - Callback invoked when mark errors occur\n * @param dataPolicy - Optional policy for validating chart data\n * @param runtimeIssueContext - Context for runtime issue reporting\n * @param runtimeIssueReporter - Optional reporter for runtime issues\n */\nfunction wrapMarkHandlers(\n chart: RetainedVgPlotChart,\n onError: (error: Error) => void,\n dataPolicy?: ChartDataPolicy | null,\n runtimeIssueContext?: ChartRuntimeIssueContext,\n runtimeIssueReporter?: ChartRuntimeIssueReporter,\n) {\n const plot = getPlotInstance(chart.element);\n if (!plot?.marks) {\n return;\n }\n\n // Initialize tracking\n if (!chart.markStates) {\n chart.markStates = new Map();\n }\n if (!chart.markErrors) {\n chart.markErrors = new Map();\n }\n\n plot.marks.forEach((mark: QueryableMark) => {\n const markWithOriginals = mark as MarkWithOriginals;\n\n // Pre-populate tracking for all queryable marks\n if (mark.queryPending || mark.queryResult || mark.queryError) {\n chart.markStates!.set(mark, 'idle');\n }\n\n // Wrap queryPending - store original if not already stored\n if (mark.queryPending) {\n if (!markWithOriginals[ORIGINAL_QUERY_PENDING]) {\n markWithOriginals[ORIGINAL_QUERY_PENDING] = mark.queryPending;\n }\n const originalPending = markWithOriginals[ORIGINAL_QUERY_PENDING]!;\n mark.queryPending = function (this: QueryableMark) {\n chart.markStates!.set(mark, 'pending');\n return originalPending.call(this);\n };\n }\n\n // Wrap queryResult - store original if not already stored\n if (mark.queryResult) {\n if (!markWithOriginals[ORIGINAL_QUERY_RESULT]) {\n markWithOriginals[ORIGINAL_QUERY_RESULT] = mark.queryResult;\n }\n const originalQueryResult = markWithOriginals[ORIGINAL_QUERY_RESULT]!;\n mark.queryResult = function (this: QueryableMark, data: unknown) {\n try {\n assertChartDataPolicy(dataPolicy, data);\n chart.markStates!.set(mark, 'success');\n chart.markErrors!.delete(mark);\n checkAndReportAggregateState(\n chart,\n onError,\n runtimeIssueReporter,\n runtimeIssueContext,\n dataPolicy,\n );\n return originalQueryResult.call(this, data);\n } catch (error) {\n const normalizedError =\n error instanceof Error ? error : new Error(String(error));\n chart.markStates!.set(mark, 'error');\n chart.markErrors!.set(mark, normalizedError);\n checkAndReportAggregateState(\n chart,\n onError,\n runtimeIssueReporter,\n runtimeIssueContext,\n dataPolicy,\n );\n if (markWithOriginals[ORIGINAL_QUERY_ERROR]) {\n return markWithOriginals[ORIGINAL_QUERY_ERROR].call(\n this,\n normalizedError,\n );\n }\n return undefined;\n }\n };\n }\n\n // Wrap queryError - store original if not already stored\n if (mark.queryError) {\n if (!markWithOriginals[ORIGINAL_QUERY_ERROR]) {\n markWithOriginals[ORIGINAL_QUERY_ERROR] = mark.queryError;\n }\n const originalQueryError = markWithOriginals[ORIGINAL_QUERY_ERROR]!;\n mark.queryError = function (this: QueryableMark, error: unknown) {\n const normalizedError =\n error instanceof Error ? error : new Error(String(error));\n\n chart.markStates?.set(mark, 'error');\n chart.markErrors?.set(mark, normalizedError);\n\n checkAndReportAggregateState(\n chart,\n onError,\n runtimeIssueReporter,\n runtimeIssueContext,\n dataPolicy,\n );\n return originalQueryError.call(this, error);\n };\n }\n });\n}\n\ntype UseVgPlotChartRenderParams = {\n containerRef: React.RefObject<HTMLDivElement | null>;\n spec: Spec;\n specKey: string | null;\n params?: Map<string, Param<any> | Selection>;\n containerSize: PlotSize | null;\n cachedChart: RetainedVgPlotChart | null;\n onChartCreated: (chart: RetainedVgPlotChart) => void;\n onError: (error: Error) => void;\n dataPolicy?: ChartDataPolicy | null;\n runtimeIssueContext?: ChartRuntimeIssueContext;\n runtimeIssueReporter?: ChartRuntimeIssueReporter;\n};\n\n/**\n * Hook to handle chart rendering lifecycle: creating, caching, and displaying vgplot charts.\n */\nexport function useVgPlotChartRender({\n containerRef,\n spec,\n specKey,\n params,\n containerSize,\n cachedChart,\n onChartCreated,\n onError,\n dataPolicy,\n runtimeIssueContext,\n runtimeIssueReporter,\n}: UseVgPlotChartRenderParams) {\n const renderVersionRef = useRef(0);\n\n useLayoutEffect(() => {\n const container = containerRef.current;\n if (!container) {\n return;\n }\n\n if (cachedChart) {\n // Check aggregate state before clearing to preserve error state\n checkAndReportAggregateState(\n cachedChart,\n onError,\n runtimeIssueReporter,\n runtimeIssueContext,\n dataPolicy,\n );\n\n // Clear mark states when reusing cached chart - marks will re-register on next query\n if (cachedChart.markStates) {\n cachedChart.markStates.clear();\n }\n if (cachedChart.markErrors) {\n cachedChart.markErrors.clear();\n }\n attachPlotElement(container, asPlotDomElement(cachedChart.element));\n if (containerSize) {\n resizeChartElement(cachedChart.element, containerSize);\n }\n\n // Re-wrap mark handlers with fresh closures for dataPolicy/runtimeIssue reporting\n wrapMarkHandlers(\n cachedChart,\n onError,\n dataPolicy,\n runtimeIssueContext,\n runtimeIssueReporter,\n );\n\n return;\n }\n\n if (!containerSize) {\n return;\n }\n\n // Clear any previous runtime issues when starting to render a new chart spec\n // This ensures stale errors don't persist when the chart configuration changes\n runtimeIssueReporter?.clearIssue();\n\n // Create new chart\n const renderVersion = ++renderVersionRef.current;\n let cancelled = false;\n\n void createSpecChartElement(spec, containerSize, params)\n .then((element) => {\n if (\n cancelled ||\n renderVersion !== renderVersionRef.current ||\n !containerRef.current\n ) {\n return;\n }\n\n const nextChart: RetainedVgPlotChart = {\n element,\n params,\n specKey: specKey ?? JSON.stringify(spec),\n };\n\n onChartCreated(nextChart);\n attachPlotElement(containerRef.current, element);\n\n // Wrap marks with runtime handlers\n wrapMarkHandlers(\n nextChart,\n onError,\n dataPolicy,\n runtimeIssueContext,\n runtimeIssueReporter,\n );\n })\n .catch((error) => {\n if (cancelled) {\n return;\n }\n\n // Normalize error to Error instance\n const normalizedError =\n error instanceof Error ? error : new Error(String(error));\n onError(normalizedError);\n if (runtimeIssueContext) {\n runtimeIssueReporter?.reportIssue({\n kind: 'render-error',\n panelId: runtimeIssueContext.panelId,\n chartType: runtimeIssueContext.chartType,\n message: normalizedError.message,\n recoverable: false,\n });\n }\n console.error('[VgPlotChart] Error rendering chart:', normalizedError);\n });\n\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n containerSize,\n specKey,\n cachedChart,\n onChartCreated,\n onError,\n dataPolicy,\n runtimeIssueContext,\n runtimeIssueReporter,\n ]);\n}\n"]}
|
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
import { Param, Selection } from '@uwdata/mosaic-core';
|
|
2
|
+
/**
|
|
3
|
+
* State of a chart mark during its lifecycle.
|
|
4
|
+
* - idle: Mark is registered but has not started querying
|
|
5
|
+
* - pending: Mark is actively querying data
|
|
6
|
+
* - success: Mark query completed successfully
|
|
7
|
+
* - error: Mark query failed with an error
|
|
8
|
+
*/
|
|
9
|
+
type MarkState = 'idle' | 'pending' | 'success' | 'error';
|
|
2
10
|
export type RetainedVgPlotChart = {
|
|
3
11
|
element: object;
|
|
4
12
|
params?: Map<string, Param<any> | Selection>;
|
|
5
13
|
specKey: string;
|
|
6
14
|
error?: Error;
|
|
15
|
+
markStates?: Map<object, MarkState>;
|
|
16
|
+
markErrors?: Map<object, Error>;
|
|
7
17
|
};
|
|
8
18
|
export type VgPlotChartRetention = {
|
|
9
19
|
chart?: RetainedVgPlotChart;
|
|
@@ -18,4 +28,5 @@ export declare function useVgPlotChartRetention(specKey: string | null, params:
|
|
|
18
28
|
getCachedChart: () => RetainedVgPlotChart | null;
|
|
19
29
|
setCachedChart: (chart: RetainedVgPlotChart) => void;
|
|
20
30
|
};
|
|
31
|
+
export {};
|
|
21
32
|
//# sourceMappingURL=useVgPlotChartRetention.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useVgPlotChartRetention.d.ts","sourceRoot":"","sources":["../src/useVgPlotChartRetention.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,SAAS,EAAC,MAAM,qBAAqB,CAAC;AAGrD,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"useVgPlotChartRetention.d.ts","sourceRoot":"","sources":["../src/useVgPlotChartRetention.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,SAAS,EAAC,MAAM,qBAAqB,CAAC;AAGrD;;;;;;GAMG;AACH,KAAK,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAE1D,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACpC,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;CAChD,CAAC;AAaF,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,mBAAmB,QAKpE;AAoBD;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,EACvD,iBAAiB,CAAC,EAAE,oBAAoB;0BAaD,mBAAmB,GAAG,IAAI;4BA0BvD,mBAAmB;EAQ9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useVgPlotChartRetention.js","sourceRoot":"","sources":["../src/useVgPlotChartRetention.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAE,SAAS,EAAE,MAAM,EAAC,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useVgPlotChartRetention.js","sourceRoot":"","sources":["../src/useVgPlotChartRetention.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAE,SAAS,EAAE,MAAM,EAAC,MAAM,OAAO,CAAC;AA+BrD,SAAS,eAAe,CAAC,OAAe;IACtC,MAAM,IAAI,GAAI,OAA2C,CAAC,KAAK,CAAC;IAChE,OAAO,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAE,IAAqB,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAA0B;IACnE,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC5B,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAC1B,IAA0C,EAC1C,KAA2C;IAE3C,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;QAChC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAsB,EACtB,MAAuD,EACvD,iBAAwC;IAExC,MAAM,aAAa,GAAG,MAAM,CAA6B,IAAI,CAAC,CAAC;IAE/D,uCAAuC;IACvC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC;QACpC,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YACvC,0BAA0B,CAAC,KAAK,CAAC,CAAC;YAClC,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC;QAC/B,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,MAAM,cAAc,GAAG,WAAW,CAAC,GAA+B,EAAE;QAClE,MAAM,MAAM,GAAG,iBAAiB,EAAE,KAAK,CAAC;QACxC,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC;QAEpC,wBAAwB;QACxB,IACE,KAAK;YACL,KAAK,CAAC,OAAO,KAAK,OAAO;YACzB,mBAAmB,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,qBAAqB;QACrB,IACE,MAAM;YACN,MAAM,CAAC,OAAO,KAAK,OAAO;YAC1B,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1C,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAEzC,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,KAA0B,EAAE,EAAE;QAC7B,aAAa,CAAC,OAAO,GAAG,KAAK,CAAC;QAC9B,iBAAiB,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC,EACD,CAAC,iBAAiB,CAAC,CACpB,CAAC;IAEF,OAAO,EAAC,cAAc,EAAE,cAAc,EAAC,CAAC;AAC1C,CAAC","sourcesContent":["import {Param, Selection} from '@uwdata/mosaic-core';\nimport {useCallback, useEffect, useRef} from 'react';\n\n/**\n * State of a chart mark during its lifecycle.\n * - idle: Mark is registered but has not started querying\n * - pending: Mark is actively querying data\n * - success: Mark query completed successfully\n * - error: Mark query failed with an error\n */\ntype MarkState = 'idle' | 'pending' | 'success' | 'error';\n\nexport type RetainedVgPlotChart = {\n element: object;\n params?: Map<string, Param<any> | Selection>;\n specKey: string;\n error?: Error;\n markStates?: Map<object, MarkState>;\n markErrors?: Map<object, Error>;\n};\n\nexport type VgPlotChartRetention = {\n chart?: RetainedVgPlotChart;\n setChart: (chart: RetainedVgPlotChart) => void;\n};\n\ntype PlotInstance = {\n marks?: Array<{destroy?: () => void}>;\n render?: () => Promise<unknown> | unknown;\n setAttribute?: (name: string, value: unknown) => boolean;\n};\n\nfunction getPlotInstance(element: object): PlotInstance | null {\n const plot = (element as HTMLElement & {value?: unknown}).value;\n return plot && typeof plot === 'object' ? (plot as PlotInstance) : null;\n}\n\nexport function destroyRetainedVgPlotChart(chart: RetainedVgPlotChart) {\n const plot = getPlotInstance(chart.element);\n plot?.marks?.forEach((mark) => {\n mark.destroy?.();\n });\n}\n\nfunction areEquivalentParams(\n left?: Map<string, Param<any> | Selection>,\n right?: Map<string, Param<any> | Selection>,\n) {\n if (left === right) {\n return true;\n }\n if (!left || !right || left.size !== right.size) {\n return false;\n }\n for (const [key, value] of left) {\n if (right.get(key) !== value) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Hook to manage chart retention (caching) across spec changes.\n * Handles chart lifecycle: retrieval, storage, and cleanup.\n */\nexport function useVgPlotChartRetention(\n specKey: string | null,\n params: Map<string, Param<any> | Selection> | undefined,\n externalRetention?: VgPlotChartRetention,\n) {\n const localChartRef = useRef<RetainedVgPlotChart | null>(null);\n\n // Clean up old chart when spec changes\n useEffect(() => {\n const local = localChartRef.current;\n if (local && local.specKey !== specKey) {\n destroyRetainedVgPlotChart(local);\n localChartRef.current = null;\n }\n }, [specKey]);\n\n const getCachedChart = useCallback((): RetainedVgPlotChart | null => {\n const cached = externalRetention?.chart;\n const local = localChartRef.current;\n\n // Try local cache first\n if (\n local &&\n local.specKey === specKey &&\n areEquivalentParams(local.params, params)\n ) {\n return local;\n }\n\n // Try external cache\n if (\n cached &&\n cached.specKey === specKey &&\n areEquivalentParams(cached.params, params)\n ) {\n return cached;\n }\n\n return null;\n }, [specKey, params, externalRetention]);\n\n const setCachedChart = useCallback(\n (chart: RetainedVgPlotChart) => {\n localChartRef.current = chart;\n externalRetention?.setChart(chart);\n },\n [externalRetention],\n );\n\n return {getCachedChart, setCachedChart};\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sqlrooms/mosaic",
|
|
3
|
-
"version": "0.29.0-rc.
|
|
3
|
+
"version": "0.29.0-rc.8",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/sqlrooms/sqlrooms.git"
|
|
@@ -44,18 +44,18 @@
|
|
|
44
44
|
"dependencies": {
|
|
45
45
|
"@observablehq/plot": "^0.6.17",
|
|
46
46
|
"@paralleldrive/cuid2": "^3.0.0",
|
|
47
|
-
"@sqlrooms/blocks": "0.29.0-rc.
|
|
48
|
-
"@sqlrooms/codemirror": "0.29.0-rc.
|
|
49
|
-
"@sqlrooms/color-scales": "0.29.0-rc.
|
|
50
|
-
"@sqlrooms/data-table": "0.29.0-rc.
|
|
51
|
-
"@sqlrooms/db": "0.29.0-rc.
|
|
52
|
-
"@sqlrooms/documents": "0.29.0-rc.
|
|
53
|
-
"@sqlrooms/duckdb": "0.29.0-rc.
|
|
54
|
-
"@sqlrooms/layout": "0.29.0-rc.
|
|
55
|
-
"@sqlrooms/layout-config": "0.29.0-rc.
|
|
56
|
-
"@sqlrooms/room-store": "0.29.0-rc.
|
|
57
|
-
"@sqlrooms/ui": "0.29.0-rc.
|
|
58
|
-
"@sqlrooms/utils": "0.29.0-rc.
|
|
47
|
+
"@sqlrooms/blocks": "0.29.0-rc.8",
|
|
48
|
+
"@sqlrooms/codemirror": "0.29.0-rc.8",
|
|
49
|
+
"@sqlrooms/color-scales": "0.29.0-rc.8",
|
|
50
|
+
"@sqlrooms/data-table": "0.29.0-rc.8",
|
|
51
|
+
"@sqlrooms/db": "0.29.0-rc.8",
|
|
52
|
+
"@sqlrooms/documents": "0.29.0-rc.8",
|
|
53
|
+
"@sqlrooms/duckdb": "0.29.0-rc.8",
|
|
54
|
+
"@sqlrooms/layout": "0.29.0-rc.8",
|
|
55
|
+
"@sqlrooms/layout-config": "0.29.0-rc.8",
|
|
56
|
+
"@sqlrooms/room-store": "0.29.0-rc.8",
|
|
57
|
+
"@sqlrooms/ui": "0.29.0-rc.8",
|
|
58
|
+
"@sqlrooms/utils": "0.29.0-rc.8",
|
|
59
59
|
"@uwdata/flechette": "^2.2.6",
|
|
60
60
|
"@uwdata/mosaic-core": "^0.21.0",
|
|
61
61
|
"@uwdata/mosaic-plot": "^0.21.0",
|
|
@@ -86,5 +86,5 @@
|
|
|
86
86
|
"publishConfig": {
|
|
87
87
|
"access": "public"
|
|
88
88
|
},
|
|
89
|
-
"gitHead": "
|
|
89
|
+
"gitHead": "dcb1a51631c5fa87b49d3e78ae6c0023eccd4189"
|
|
90
90
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BubbleChartSettings.d.ts","sourceRoot":"","sources":["../../../../src/charts/chart-types/bubble-chart/BubbleChartSettings.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,EAAC,MAAM,OAAO,CAAC;AAK9B,eAAO,MAAM,4BAA4B,EAAE,EAqB1C,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BubbleChartSettings.js","sourceRoot":"","sources":["../../../../src/charts/chart-types/bubble-chart/BubbleChartSettings.tsx"],"names":[],"mappings":";AACA,OAAO,EAAC,KAAK,EAAC,MAAM,2BAA2B,CAAC;AAChD,OAAO,EAAC,cAAc,EAAC,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAC,6BAA6B,EAAC,MAAM,iDAAiD,CAAC;AAE9F,MAAM,CAAC,MAAM,4BAA4B,GAAO,GAAG,EAAE;IACnD,MAAM,EAAC,cAAc,EAAE,MAAM,EAAC,GAC5B,6BAA6B,CAAC,cAAc,CAAC,CAAC;IAEhD,OAAO,CACL,eAAK,SAAS,EAAC,WAAW,aACxB,KAAC,KAAK,IAAC,KAAK,EAAC,SAAS,EAAC,QAAQ,kBAC7B,KAAC,cAAc,CAAC,OAAO,IACrB,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,EACxB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,GACvC,GACI,EAER,KAAC,KAAK,IAAC,KAAK,EAAC,SAAS,EAAC,QAAQ,kBAC7B,KAAC,cAAc,CAAC,OAAO,IACrB,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,EACxB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,GACvC,GACI,IACJ,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {type FC} from 'react';\nimport {Field} from '../../../components/Field';\nimport {ColumnSelector} from '../../../components/ColumnSelector';\nimport {useMosaicChartSettingsContext} from '../../chart-settings/MosaicChartSettingsContext';\n\nexport const BubbleChartSettingsComponent: FC = () => {\n const {onChangeConfig, config} =\n useMosaicChartSettingsContext('bubble-chart');\n\n return (\n <div className=\"space-y-4\">\n <Field label=\"X Field\" required>\n <ColumnSelector.Numeric\n value={config.settings.x}\n onChange={(x) => onChangeConfig('x', x)}\n />\n </Field>\n\n <Field label=\"Y Field\" required>\n <ColumnSelector.Numeric\n value={config.settings.y}\n onChange={(y) => onChangeConfig('y', y)}\n />\n </Field>\n </div>\n );\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../../../src/charts/chart-types/bubble-chart/definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAC,iBAAiB,EAAsB,MAAM,UAAU,CAAC;AAUhE,eAAO,MAAM,oBAAoB,EAAE,uBAAuB,CAAC,iBAAiB,CAgBzE,CAAC"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { BubbleChartSettings } from './schema';
|
|
2
|
-
import { titleFromDescription } from '../../../chart-builders/chartTypeUtils';
|
|
3
|
-
import { BubbleChartSettingsComponent } from './BubbleChartSettings';
|
|
4
|
-
import { createBubbleChartAiTool } from './tool';
|
|
5
|
-
import { Workflow } from 'lucide-react';
|
|
6
|
-
import { createBubbleChartSpec } from './spec';
|
|
7
|
-
import { DEFAULT_CHART_MAX_DATA_POINTS } from '../../../chart-runtime';
|
|
8
|
-
const DESCRIPTION = 'Create a bubble chart';
|
|
9
|
-
export const bubbleChartChartType = {
|
|
10
|
-
id: 'bubble-chart',
|
|
11
|
-
label: 'Bubble Chart',
|
|
12
|
-
description: DESCRIPTION,
|
|
13
|
-
icon: Workflow,
|
|
14
|
-
schema: BubbleChartSettings,
|
|
15
|
-
settingsComponent: BubbleChartSettingsComponent,
|
|
16
|
-
buildTitle: titleFromDescription(DESCRIPTION),
|
|
17
|
-
createTool: createBubbleChartAiTool,
|
|
18
|
-
getDataPolicy: () => ({
|
|
19
|
-
maxRows: DEFAULT_CHART_MAX_DATA_POINTS,
|
|
20
|
-
reason: 'Bubble charts render one point per row. Use a heatmap or another aggregated chart for larger datasets.',
|
|
21
|
-
}),
|
|
22
|
-
createSpec: createBubbleChartSpec,
|
|
23
|
-
};
|
|
24
|
-
//# sourceMappingURL=definition.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"definition.js","sourceRoot":"","sources":["../../../../src/charts/chart-types/bubble-chart/definition.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,mBAAmB,EAAC,MAAM,UAAU,CAAC;AAChE,OAAO,EAAC,oBAAoB,EAAC,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAC,4BAA4B,EAAC,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAC,uBAAuB,EAAC,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAC,QAAQ,EAAC,MAAM,cAAc,CAAC;AACtC,OAAO,EAAC,qBAAqB,EAAC,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAC,6BAA6B,EAAC,MAAM,wBAAwB,CAAC;AAErE,MAAM,WAAW,GAAG,uBAAuB,CAAC;AAE5C,MAAM,CAAC,MAAM,oBAAoB,GAC/B;IACE,EAAE,EAAE,cAAc;IAClB,KAAK,EAAE,cAAc;IACrB,WAAW,EAAE,WAAW;IACxB,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,mBAAmB;IAC3B,iBAAiB,EAAE,4BAA4B;IAC/C,UAAU,EAAE,oBAAoB,CAAC,WAAW,CAAC;IAC7C,UAAU,EAAE,uBAAuB;IACnC,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;QACpB,OAAO,EAAE,6BAA6B;QACtC,MAAM,EACJ,wGAAwG;KAC3G,CAAC;IACF,UAAU,EAAE,qBAAqB;CAClC,CAAC","sourcesContent":["import type {SpecChartTypeDefinition} from '../base-types';\nimport {BubbleChartConfig, BubbleChartSettings} from './schema';\nimport {titleFromDescription} from '../../../chart-builders/chartTypeUtils';\nimport {BubbleChartSettingsComponent} from './BubbleChartSettings';\nimport {createBubbleChartAiTool} from './tool';\nimport {Workflow} from 'lucide-react';\nimport {createBubbleChartSpec} from './spec';\nimport {DEFAULT_CHART_MAX_DATA_POINTS} from '../../../chart-runtime';\n\nconst DESCRIPTION = 'Create a bubble chart';\n\nexport const bubbleChartChartType: SpecChartTypeDefinition<BubbleChartConfig> =\n {\n id: 'bubble-chart',\n label: 'Bubble Chart',\n description: DESCRIPTION,\n icon: Workflow,\n schema: BubbleChartSettings,\n settingsComponent: BubbleChartSettingsComponent,\n buildTitle: titleFromDescription(DESCRIPTION),\n createTool: createBubbleChartAiTool,\n getDataPolicy: () => ({\n maxRows: DEFAULT_CHART_MAX_DATA_POINTS,\n reason:\n 'Bubble charts render one point per row. Use a heatmap or another aggregated chart for larger datasets.',\n }),\n createSpec: createBubbleChartSpec,\n };\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/charts/chart-types/bubble-chart/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAGtB,eAAO,MAAM,mBAAmB;;;;iBAO9B,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEtE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;iBAK5B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/charts/chart-types/bubble-chart/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,EAAC,6BAA6B,EAAC,MAAM,uBAAuB,CAAC;AAEpE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IACvE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IACvE,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,2CAA2C,CAAC;CACzD,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;IACpC,QAAQ,EAAE,mBAAmB;IAC7B,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACpC,UAAU,EAAE,6BAA6B,CAAC,QAAQ,EAAE;CACrD,CAAC,CAAC","sourcesContent":["import {z} from 'zod';\nimport {ChartDataPolicyOverrideConfig} from '../data-policy-schema';\n\nexport const BubbleChartSettings = z.object({\n x: z.string().optional().describe('Numeric column for X axis position'),\n y: z.string().optional().describe('Numeric column for Y axis position'),\n size: z\n .string()\n .optional()\n .describe('Numeric column for bubble size (optional)'),\n});\n\nexport type BubbleChartSettings = z.infer<typeof BubbleChartSettings>;\n\nexport const BubbleChartConfig = z.object({\n chartType: z.literal('bubble-chart'),\n settings: BubbleChartSettings,\n settingsOpen: z.boolean().optional(),\n dataPolicy: ChartDataPolicyOverrideConfig.optional(),\n});\n\nexport type BubbleChartConfig = z.infer<typeof BubbleChartConfig>;\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../../../../src/charts/chart-types/bubble-chart/spec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAC,mBAAmB,EAAC,MAAM,UAAU,CAAC;AAK7C,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,EAAC,CAAC,EAAE,CAAC,EAAC,EAAE,mBAAmB,GAC1B,IAAI,CA2BN"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { ChartSpecError } from '../errors';
|
|
2
|
-
const FG_COLOR = 'var(--color-chart-1)';
|
|
3
|
-
export function createBubbleChartSpec(tableName, { x, y }) {
|
|
4
|
-
if (!x) {
|
|
5
|
-
throw new ChartSpecError('X field is required for bubble chart');
|
|
6
|
-
}
|
|
7
|
-
if (!y) {
|
|
8
|
-
throw new ChartSpecError('Y field is required for bubble chart');
|
|
9
|
-
}
|
|
10
|
-
return {
|
|
11
|
-
plot: [
|
|
12
|
-
{
|
|
13
|
-
mark: 'dot',
|
|
14
|
-
data: { from: tableName, filterBy: '$brush' },
|
|
15
|
-
x,
|
|
16
|
-
y,
|
|
17
|
-
fill: FG_COLOR,
|
|
18
|
-
fillOpacity: 0.5,
|
|
19
|
-
r: 3,
|
|
20
|
-
},
|
|
21
|
-
{ select: 'intervalXY', as: '$brush' },
|
|
22
|
-
],
|
|
23
|
-
xLabel: x,
|
|
24
|
-
yLabel: y,
|
|
25
|
-
height: 250,
|
|
26
|
-
width: 380,
|
|
27
|
-
margins: { left: 50, right: 20, top: 20, bottom: 50 },
|
|
28
|
-
params: { brush: { select: 'crossfilter' } },
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"spec.js","sourceRoot":"","sources":["../../../../src/charts/chart-types/bubble-chart/spec.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,cAAc,EAAC,MAAM,WAAW,CAAC;AAEzC,MAAM,QAAQ,GAAG,sBAAsB,CAAC;AAExC,MAAM,UAAU,qBAAqB,CACnC,SAAiB,EACjB,EAAC,CAAC,EAAE,CAAC,EAAsB;IAE3B,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,IAAI,cAAc,CAAC,sCAAsC,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,IAAI,cAAc,CAAC,sCAAsC,CAAC,CAAC;IACnE,CAAC;IACD,OAAO;QACL,IAAI,EAAE;YACJ;gBACE,IAAI,EAAE,KAAK;gBACX,IAAI,EAAE,EAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAC;gBAC3C,CAAC;gBACD,CAAC;gBACD,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,GAAG;gBAChB,CAAC,EAAE,CAAC;aACL;YACD,EAAC,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ,EAAC;SACrC;QACD,MAAM,EAAE,CAAC;QACT,MAAM,EAAE,CAAC;QACT,MAAM,EAAE,GAAG;QACX,KAAK,EAAE,GAAG;QACV,OAAO,EAAE,EAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAC;QACnD,MAAM,EAAE,EAAC,KAAK,EAAE,EAAC,MAAM,EAAE,aAAa,EAAC,EAAC;KACjC,CAAC;AACZ,CAAC","sourcesContent":["import type {Spec} from '@uwdata/mosaic-spec';\nimport {BubbleChartSettings} from './schema';\nimport {ChartSpecError} from '../errors';\n\nconst FG_COLOR = 'var(--color-chart-1)';\n\nexport function createBubbleChartSpec(\n tableName: string,\n {x, y}: BubbleChartSettings,\n): Spec {\n if (!x) {\n throw new ChartSpecError('X field is required for bubble chart');\n }\n if (!y) {\n throw new ChartSpecError('Y field is required for bubble chart');\n }\n return {\n plot: [\n {\n mark: 'dot',\n data: {from: tableName, filterBy: '$brush'},\n x,\n y,\n fill: FG_COLOR,\n fillOpacity: 0.5,\n r: 3,\n },\n {select: 'intervalXY', as: '$brush'},\n ],\n xLabel: x,\n yLabel: y,\n height: 250,\n width: 380,\n margins: {left: 50, right: 20, top: 20, bottom: 50},\n params: {brush: {select: 'crossfilter'}},\n } as Spec;\n}\n"]}
|