@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
|
@@ -2,27 +2,17 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { useCallback } from 'react';
|
|
3
3
|
import { MosaicChart } from '../MosaicChart';
|
|
4
4
|
import { useParseChartConfig } from '../useParseChartConfig';
|
|
5
|
-
import { useDataTable } from '
|
|
5
|
+
import { useDataTable } from '@sqlrooms/db';
|
|
6
6
|
import { useTablesWithColumns } from '../../hooks/useTablesWithColumns';
|
|
7
7
|
import { ChartBlockHeader } from './ChartBlockHeader';
|
|
8
8
|
import { ChartSelectorEmptyState } from './ChartSelectorEmptyState';
|
|
9
|
-
function getBlockDocumentChartSelectionName({ documentId, blockId, selectionGroupId, }) {
|
|
10
|
-
return selectionGroupId
|
|
11
|
-
? `worksheet:${documentId}:chart-group:${selectionGroupId}:brush`
|
|
12
|
-
: `worksheet:${documentId}:chart-block:${blockId}:brush`;
|
|
13
|
-
}
|
|
14
9
|
function getBlockDocumentChartRuntimeKey({ documentId, blockId, }) {
|
|
15
10
|
return `worksheet:${documentId}:chart-block:${blockId}`;
|
|
16
11
|
}
|
|
17
|
-
export const ChartBlockRenderer = ({ documentId, blockId, tableName, config,
|
|
12
|
+
export const ChartBlockRenderer = ({ documentId, blockId, tableName, config, caption, readOnly, onTableNameChange, onConfigChange, onCaptionChange, }) => {
|
|
18
13
|
const tables = useTablesWithColumns();
|
|
19
14
|
const selectedTable = useDataTable(tableName);
|
|
20
15
|
const parseChartConfigResult = useParseChartConfig(config);
|
|
21
|
-
const selectionName = getBlockDocumentChartSelectionName({
|
|
22
|
-
documentId,
|
|
23
|
-
blockId,
|
|
24
|
-
selectionGroupId,
|
|
25
|
-
});
|
|
26
16
|
const runtimeKey = getBlockDocumentChartRuntimeKey({ documentId, blockId });
|
|
27
17
|
const handleSettingsOpenChange = useCallback((settingsOpen) => {
|
|
28
18
|
if (parseChartConfigResult.success) {
|
|
@@ -42,6 +32,6 @@ export const ChartBlockRenderer = ({ documentId, blockId, tableName, config, sel
|
|
|
42
32
|
return (_jsxs("div", { className: "text-muted-foreground flex h-full items-center justify-center text-sm", children: ["Invalid chart configuration: ", parseChartConfigResult.error] }));
|
|
43
33
|
}
|
|
44
34
|
const chartConfig = parseChartConfigResult.config;
|
|
45
|
-
return (_jsxs("div", { className: "flex h-105 min-h-80 flex-col", children: [_jsx(ChartBlockHeader, { caption: caption, chartConfig: chartConfig, selectedTable: selectedTable, onCaptionChange: onCaptionChange, onSettingsOpenChange: handleSettingsOpenChange, onTableChange: handleTableChange, readOnly: readOnly, tables: tables }), _jsx("div", { className: "min-h-0 flex-1", children: _jsx(MosaicChart, { dataTable: selectedTable,
|
|
35
|
+
return (_jsxs("div", { className: "flex h-105 min-h-80 flex-col", children: [_jsx(ChartBlockHeader, { caption: caption, chartConfig: chartConfig, selectedTable: selectedTable, onCaptionChange: onCaptionChange, onSettingsOpenChange: handleSettingsOpenChange, onTableChange: handleTableChange, readOnly: readOnly, tables: tables }), _jsx("div", { className: "min-h-0 flex-1", children: _jsx(MosaicChart, { dataTable: selectedTable, config: chartConfig, runtimeKey: runtimeKey, onConfigChange: handleConfigChange }) })] }));
|
|
46
36
|
};
|
|
47
37
|
//# sourceMappingURL=ChartBlockRenderer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartBlockRenderer.js","sourceRoot":"","sources":["../../../src/charts/worksheet/ChartBlockRenderer.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAK,WAAW,EAAC,MAAM,OAAO,CAAC;AAEtC,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAC,mBAAmB,EAAC,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAC,YAAY,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"ChartBlockRenderer.js","sourceRoot":"","sources":["../../../src/charts/worksheet/ChartBlockRenderer.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAK,WAAW,EAAC,MAAM,OAAO,CAAC;AAEtC,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAC,mBAAmB,EAAC,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAC,oBAAoB,EAAC,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAC,uBAAuB,EAAC,MAAM,2BAA2B,CAAC;AAElE,SAAS,+BAA+B,CAAC,EACvC,UAAU,EACV,OAAO,GACyD;IAChE,OAAO,aAAa,UAAU,gBAAgB,OAAO,EAAE,CAAC;AAC1D,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAwC,CAAC,EACtE,UAAU,EACV,OAAO,EACP,SAAS,EACT,MAAM,EACN,OAAO,EACP,QAAQ,EACR,iBAAiB,EACjB,cAAc,EACd,eAAe,GAChB,EAAE,EAAE;IACH,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAC;IACtC,MAAM,aAAa,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAE9C,MAAM,sBAAsB,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAE3D,MAAM,UAAU,GAAG,+BAA+B,CAAC,EAAC,UAAU,EAAE,OAAO,EAAC,CAAC,CAAC;IAE1E,MAAM,wBAAwB,GAAG,WAAW,CAC1C,CAAC,YAAqB,EAAE,EAAE;QACxB,IAAI,sBAAsB,CAAC,OAAO,EAAE,CAAC;YACnC,cAAc,EAAE,CAAC,EAAC,GAAG,sBAAsB,CAAC,MAAM,EAAE,YAAY,EAAC,CAAC,CAAC;QACrE,CAAC;IACH,CAAC,EACD,CAAC,sBAAsB,EAAE,cAAc,CAAC,CACzC,CAAC;IAEF,MAAM,kBAAkB,GAAG,WAAW,CACpC,CAAC,UAAuB,EAAE,EAAE;QAC1B,cAAc,EAAE,CAAC,UAAU,CAAC,CAAC;IAC/B,CAAC,EACD,CAAC,cAAc,CAAC,CACjB,CAAC;IAEF,MAAM,iBAAiB,GAAG,WAAW,CACnC,CAAC,KAAgB,EAAE,EAAE;QACnB,iBAAiB,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9C,CAAC,EACD,CAAC,iBAAiB,CAAC,CACpB,CAAC;IAEF,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,CACL,KAAC,uBAAuB,IACtB,QAAQ,EAAE,QAAQ,IAAI,CAAC,iBAAiB,EACxC,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,MAAM,GACd,CACH,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,CAAC;QACpC,OAAO,CACL,eAAK,SAAS,EAAC,uEAAuE,8CACtD,sBAAsB,CAAC,KAAK,IACtD,CACP,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,sBAAsB,CAAC,MAAM,CAAC;IAElD,OAAO,CACL,eAAK,SAAS,EAAC,8BAA8B,aAC3C,KAAC,gBAAgB,IACf,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,EAC5B,eAAe,EAAE,eAAe,EAChC,oBAAoB,EAAE,wBAAwB,EAC9C,aAAa,EAAE,iBAAiB,EAChC,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,GACd,EACF,cAAK,SAAS,EAAC,gBAAgB,YAC7B,KAAC,WAAW,IACV,SAAS,EAAE,aAAa,EACxB,MAAM,EAAE,WAAW,EACnB,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,kBAAkB,GAClC,GACE,IACF,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import type {DataTable} from '@sqlrooms/db';\nimport type {BlockDocumentChartRendererProps} from '@sqlrooms/documents';\nimport {FC, useCallback} from 'react';\nimport type {ChartConfig} from '../chart-types/chart-config';\nimport {MosaicChart} from '../MosaicChart';\nimport {useParseChartConfig} from '../useParseChartConfig';\nimport {useDataTable} from '@sqlrooms/db';\nimport {useTablesWithColumns} from '../../hooks/useTablesWithColumns';\nimport {ChartBlockHeader} from './ChartBlockHeader';\nimport {ChartSelectorEmptyState} from './ChartSelectorEmptyState';\n\nfunction getBlockDocumentChartRuntimeKey({\n documentId,\n blockId,\n}: Pick<BlockDocumentChartRendererProps, 'documentId' | 'blockId'>) {\n return `worksheet:${documentId}:chart-block:${blockId}`;\n}\n\nexport const ChartBlockRenderer: FC<BlockDocumentChartRendererProps> = ({\n documentId,\n blockId,\n tableName,\n config,\n caption,\n readOnly,\n onTableNameChange,\n onConfigChange,\n onCaptionChange,\n}) => {\n const tables = useTablesWithColumns();\n const selectedTable = useDataTable(tableName);\n\n const parseChartConfigResult = useParseChartConfig(config);\n\n const runtimeKey = getBlockDocumentChartRuntimeKey({documentId, blockId});\n\n const handleSettingsOpenChange = useCallback(\n (settingsOpen: boolean) => {\n if (parseChartConfigResult.success) {\n onConfigChange?.({...parseChartConfigResult.config, settingsOpen});\n }\n },\n [parseChartConfigResult, onConfigChange],\n );\n\n const handleConfigChange = useCallback(\n (nextConfig: ChartConfig) => {\n onConfigChange?.(nextConfig);\n },\n [onConfigChange],\n );\n\n const handleTableChange = useCallback(\n (table: DataTable) => {\n onTableNameChange?.(table.table.toString());\n },\n [onTableNameChange],\n );\n\n if (!selectedTable) {\n return (\n <ChartSelectorEmptyState\n disabled={readOnly || !onTableNameChange}\n onChange={handleTableChange}\n tables={tables}\n />\n );\n }\n\n if (!parseChartConfigResult.success) {\n return (\n <div className=\"text-muted-foreground flex h-full items-center justify-center text-sm\">\n Invalid chart configuration: {parseChartConfigResult.error}\n </div>\n );\n }\n\n const chartConfig = parseChartConfigResult.config;\n\n return (\n <div className=\"flex h-105 min-h-80 flex-col\">\n <ChartBlockHeader\n caption={caption}\n chartConfig={chartConfig}\n selectedTable={selectedTable}\n onCaptionChange={onCaptionChange}\n onSettingsOpenChange={handleSettingsOpenChange}\n onTableChange={handleTableChange}\n readOnly={readOnly}\n tables={tables}\n />\n <div className=\"min-h-0 flex-1\">\n <MosaicChart\n dataTable={selectedTable}\n config={chartConfig}\n runtimeKey={runtimeKey}\n onConfigChange={handleConfigChange}\n />\n </div>\n </div>\n );\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"column-types-utils.d.ts","sourceRoot":"","sources":["../src/column-types-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"column-types-utils.d.ts","sourceRoot":"","sources":["../src/column-types-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,eAAO,MAAM,oBAAoB,UAgBhC,CAAC;AAEF,eAAO,MAAM,qBAAqB,UAQjC,CAAC;AAEF,eAAO,MAAM,yBAAyB,UAGrC,CAAC;AAEF,eAAO,MAAM,wBAAwB,UAAsC,CAAC;AAE5E,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAE7D"}
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Column type constants for chart field type filtering
|
|
3
3
|
*/
|
|
4
|
+
/**
|
|
5
|
+
* Normalizes DuckDB column types by removing parameter lists.
|
|
6
|
+
* E.g., "DECIMAL(10,2)" → "DECIMAL", "VARCHAR(255)" → "VARCHAR"
|
|
7
|
+
*/
|
|
8
|
+
function normalizeColumnType(columnType) {
|
|
9
|
+
const parenIndex = columnType.indexOf('(');
|
|
10
|
+
return parenIndex === -1 ? columnType : columnType.substring(0, parenIndex);
|
|
11
|
+
}
|
|
4
12
|
export const NUMERIC_COLUMN_TYPES = [
|
|
5
13
|
'BIGINT',
|
|
6
14
|
'BIT',
|
|
@@ -33,15 +41,15 @@ export const QUANTITATIVE_COLUMN_TYPES = [
|
|
|
33
41
|
];
|
|
34
42
|
export const CATEGORICAL_COLUMN_TYPES = ['VARCHAR', 'TEXT', 'BLOB', 'ENUM'];
|
|
35
43
|
export function isTemporalType(columnType) {
|
|
36
|
-
return TEMPORAL_COLUMN_TYPES.includes(columnType);
|
|
44
|
+
return TEMPORAL_COLUMN_TYPES.includes(normalizeColumnType(columnType));
|
|
37
45
|
}
|
|
38
46
|
export function isQuantitativeType(columnType) {
|
|
39
|
-
return QUANTITATIVE_COLUMN_TYPES.includes(columnType);
|
|
47
|
+
return QUANTITATIVE_COLUMN_TYPES.includes(normalizeColumnType(columnType));
|
|
40
48
|
}
|
|
41
49
|
export function isNumericType(columnType) {
|
|
42
|
-
return NUMERIC_COLUMN_TYPES.includes(columnType);
|
|
50
|
+
return NUMERIC_COLUMN_TYPES.includes(normalizeColumnType(columnType));
|
|
43
51
|
}
|
|
44
52
|
export function isCategoricalType(columnType) {
|
|
45
|
-
return CATEGORICAL_COLUMN_TYPES.includes(columnType);
|
|
53
|
+
return CATEGORICAL_COLUMN_TYPES.includes(normalizeColumnType(columnType));
|
|
46
54
|
}
|
|
47
55
|
//# sourceMappingURL=column-types-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"column-types-utils.js","sourceRoot":"","sources":["../src/column-types-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,QAAQ;IACR,KAAK;IACL,SAAS;IACT,QAAQ;IACR,OAAO;IACP,SAAS;IACT,SAAS;IACT,MAAM;IACN,UAAU;IACV,SAAS;IACT,SAAS;IACT,UAAU;IACV,UAAU;IACV,WAAW;IACX,UAAU;CACX,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,MAAM;IACN,MAAM;IACN,WAAW;IACX,cAAc;IACd,cAAc;IACd,aAAa;IACb,aAAa;CACd,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,GAAG,oBAAoB;IACvB,GAAG,qBAAqB;CACzB,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAE5E,MAAM,UAAU,cAAc,CAAC,UAAkB;IAC/C,OAAO,qBAAqB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"column-types-utils.js","sourceRoot":"","sources":["../src/column-types-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,SAAS,mBAAmB,CAAC,UAAkB;IAC7C,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3C,OAAO,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,QAAQ;IACR,KAAK;IACL,SAAS;IACT,QAAQ;IACR,OAAO;IACP,SAAS;IACT,SAAS;IACT,MAAM;IACN,UAAU;IACV,SAAS;IACT,SAAS;IACT,UAAU;IACV,UAAU;IACV,WAAW;IACX,UAAU;CACX,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,MAAM;IACN,MAAM;IACN,WAAW;IACX,cAAc;IACd,cAAc;IACd,aAAa;IACb,aAAa;CACd,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,GAAG,oBAAoB;IACvB,GAAG,qBAAqB;CACzB,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAE5E,MAAM,UAAU,cAAc,CAAC,UAAkB;IAC/C,OAAO,qBAAqB,CAAC,QAAQ,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,UAAkB;IACnD,OAAO,yBAAyB,CAAC,QAAQ,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,UAAkB;IAC9C,OAAO,oBAAoB,CAAC,QAAQ,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,UAAkB;IAClD,OAAO,wBAAwB,CAAC,QAAQ,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC;AAC5E,CAAC","sourcesContent":["/**\n * Column type constants for chart field type filtering\n */\n\n/**\n * Normalizes DuckDB column types by removing parameter lists.\n * E.g., \"DECIMAL(10,2)\" → \"DECIMAL\", \"VARCHAR(255)\" → \"VARCHAR\"\n */\nfunction normalizeColumnType(columnType: string): string {\n const parenIndex = columnType.indexOf('(');\n return parenIndex === -1 ? columnType : columnType.substring(0, parenIndex);\n}\n\nexport const NUMERIC_COLUMN_TYPES = [\n 'BIGINT',\n 'BIT',\n 'DECIMAL',\n 'DOUBLE',\n 'FLOAT',\n 'HUGEINT',\n 'INTEGER',\n 'REAL',\n 'SMALLINT',\n 'TINYINT',\n 'UBIGINT',\n 'UHUGEINT',\n 'UINTEGER',\n 'USMALLINT',\n 'UTINYINT',\n];\n\nexport const TEMPORAL_COLUMN_TYPES = [\n 'DATE',\n 'TIME',\n 'TIMESTAMP',\n 'TIMESTAMP_MS',\n 'TIMESTAMP_NS',\n 'TIMESTAMP_S',\n 'TIMESTAMPTZ',\n];\n\nexport const QUANTITATIVE_COLUMN_TYPES = [\n ...NUMERIC_COLUMN_TYPES,\n ...TEMPORAL_COLUMN_TYPES,\n];\n\nexport const CATEGORICAL_COLUMN_TYPES = ['VARCHAR', 'TEXT', 'BLOB', 'ENUM'];\n\nexport function isTemporalType(columnType: string): boolean {\n return TEMPORAL_COLUMN_TYPES.includes(normalizeColumnType(columnType));\n}\n\nexport function isQuantitativeType(columnType: string): boolean {\n return QUANTITATIVE_COLUMN_TYPES.includes(normalizeColumnType(columnType));\n}\n\nexport function isNumericType(columnType: string): boolean {\n return NUMERIC_COLUMN_TYPES.includes(normalizeColumnType(columnType));\n}\n\nexport function isCategoricalType(columnType: string): boolean {\n return CATEGORICAL_COLUMN_TYPES.includes(normalizeColumnType(columnType));\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AggregationSelector.d.ts","sourceRoot":"","sources":["../../src/components/AggregationSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,EAAE,EAAC,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"AggregationSelector.d.ts","sourceRoot":"","sources":["../../src/components/AggregationSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,EAAE,EAAC,MAAM,OAAO,CAAC;AAC9B,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,YAAY,CAAC;AAGlD,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,iBAAiB,CAAC;IACzB,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;CAC9C;AASD;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,EAAE,CAAC,wBAAwB,CAoB5D,CAAC"}
|
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
2
|
+
import { Combobox } from './Combobox';
|
|
3
|
+
const AGGREGATION_OPTIONS = [
|
|
4
|
+
{ value: 'sum', label: 'SUM' },
|
|
5
|
+
{ value: 'avg', label: 'AVG' },
|
|
6
|
+
{ value: 'min', label: 'MIN' },
|
|
7
|
+
{ value: 'max', label: 'MAX' },
|
|
8
|
+
];
|
|
3
9
|
/**
|
|
4
10
|
* Dropdown for selecting an aggregation function (SUM, AVG, MIN, MAX).
|
|
5
11
|
*/
|
|
6
12
|
export const AggregationSelector = ({ value, onChange, }) => {
|
|
7
|
-
|
|
13
|
+
const selectedOption = AGGREGATION_OPTIONS.find((opt) => opt.value === value);
|
|
14
|
+
return (_jsxs(Combobox, { value: value, onChange: onChange, children: [_jsx(Combobox.Trigger, { className: "w-[100px] shadow-none", children: _jsx("span", { children: selectedOption?.label ?? value.toUpperCase() }) }), _jsx(Combobox.Content, { children: AGGREGATION_OPTIONS.map((option) => (_jsx(Combobox.Item, { value: option.value, children: _jsx("span", { className: "text-xs", children: option.label }) }, option.value))) })] }));
|
|
8
15
|
};
|
|
9
16
|
//# sourceMappingURL=AggregationSelector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AggregationSelector.js","sourceRoot":"","sources":["../../src/components/AggregationSelector.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"AggregationSelector.js","sourceRoot":"","sources":["../../src/components/AggregationSelector.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AAOpC,MAAM,mBAAmB,GAAG;IAC1B,EAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAC;IAC5B,EAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAC;IAC5B,EAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAC;IAC5B,EAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAC;CACpB,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAiC,CAAC,EAChE,KAAK,EACL,QAAQ,GACT,EAAE,EAAE;IACH,MAAM,cAAc,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;IAE9E,OAAO,CACL,MAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,aACxC,KAAC,QAAQ,CAAC,OAAO,IAAC,SAAS,EAAC,uBAAuB,YACjD,yBAAO,cAAc,EAAE,KAAK,IAAI,KAAK,CAAC,WAAW,EAAE,GAAQ,GAC1C,EACnB,KAAC,QAAQ,CAAC,OAAO,cACd,mBAAmB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACnC,KAAC,QAAQ,CAAC,IAAI,IAAoB,KAAK,EAAE,MAAM,CAAC,KAAK,YACnD,eAAM,SAAS,EAAC,SAAS,YAAE,MAAM,CAAC,KAAK,GAAQ,IAD7B,MAAM,CAAC,KAAK,CAEhB,CACjB,CAAC,GACe,IACV,CACZ,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import type {FC} from 'react';\nimport type {AggregateFunction} from '../schemas';\nimport {Combobox} from './Combobox';\n\nexport interface AggregationSelectorProps {\n value: AggregateFunction;\n onChange: (value: AggregateFunction) => void;\n}\n\nconst AGGREGATION_OPTIONS = [\n {value: 'sum', label: 'SUM'},\n {value: 'avg', label: 'AVG'},\n {value: 'min', label: 'MIN'},\n {value: 'max', label: 'MAX'},\n] as const;\n\n/**\n * Dropdown for selecting an aggregation function (SUM, AVG, MIN, MAX).\n */\nexport const AggregationSelector: FC<AggregationSelectorProps> = ({\n value,\n onChange,\n}) => {\n const selectedOption = AGGREGATION_OPTIONS.find((opt) => opt.value === value);\n\n return (\n <Combobox value={value} onChange={onChange}>\n <Combobox.Trigger className=\"w-[100px] shadow-none\">\n <span>{selectedOption?.label ?? value.toUpperCase()}</span>\n </Combobox.Trigger>\n <Combobox.Content>\n {AGGREGATION_OPTIONS.map((option) => (\n <Combobox.Item key={option.value} value={option.value}>\n <span className=\"text-xs\">{option.label}</span>\n </Combobox.Item>\n ))}\n </Combobox.Content>\n </Combobox>\n );\n};\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
type BlockCaptionEditorProps = {
|
|
3
|
+
className?: string;
|
|
4
|
+
value?: string;
|
|
5
|
+
placeholder?: string;
|
|
6
|
+
isReadOnly?: boolean;
|
|
7
|
+
onChange: (value: string) => void;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Editable caption field for blocks (charts, queries, etc.).
|
|
11
|
+
*
|
|
12
|
+
* @param value - Current caption text
|
|
13
|
+
* @param className - Optional CSS class name
|
|
14
|
+
* @param placeholder - Placeholder text when empty
|
|
15
|
+
* @param isReadOnly - Whether the caption is editable
|
|
16
|
+
* @param onChange - Callback when caption changes
|
|
17
|
+
*/
|
|
18
|
+
export declare const BlockCaptionEditor: FC<BlockCaptionEditorProps>;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=BlockCaptionEditor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlockCaptionEditor.d.ts","sourceRoot":"","sources":["../../src/components/BlockCaptionEditor.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,EAAE,EAAC,MAAM,OAAO,CAAC;AAGzB,KAAK,uBAAuB,GAAG;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,EAAE,EAAE,CAAC,uBAAuB,CAgB1D,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn, EditableText } from '@sqlrooms/ui';
|
|
3
|
+
/**
|
|
4
|
+
* Editable caption field for blocks (charts, queries, etc.).
|
|
5
|
+
*
|
|
6
|
+
* @param value - Current caption text
|
|
7
|
+
* @param className - Optional CSS class name
|
|
8
|
+
* @param placeholder - Placeholder text when empty
|
|
9
|
+
* @param isReadOnly - Whether the caption is editable
|
|
10
|
+
* @param onChange - Callback when caption changes
|
|
11
|
+
*/
|
|
12
|
+
export const BlockCaptionEditor = ({ value, className, placeholder, isReadOnly, onChange, }) => {
|
|
13
|
+
return (_jsx(EditableText, { className: cn('h-8 min-w-0 flex-1 text-sm font-medium', className), value: value ?? '', placeholder: placeholder, isReadOnly: isReadOnly, onChange: onChange }));
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=BlockCaptionEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlockCaptionEditor.js","sourceRoot":"","sources":["../../src/components/BlockCaptionEditor.tsx"],"names":[],"mappings":";AACA,OAAO,EAAC,EAAE,EAAE,YAAY,EAAC,MAAM,cAAc,CAAC;AAU9C;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAgC,CAAC,EAC9D,KAAK,EACL,SAAS,EACT,WAAW,EACX,UAAU,EACV,QAAQ,GACT,EAAE,EAAE;IACH,OAAO,CACL,KAAC,YAAY,IACX,SAAS,EAAE,EAAE,CAAC,wCAAwC,EAAE,SAAS,CAAC,EAClE,KAAK,EAAE,KAAK,IAAI,EAAE,EAClB,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ,GAClB,CACH,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {FC} from 'react';\nimport {cn, EditableText} from '@sqlrooms/ui';\n\ntype BlockCaptionEditorProps = {\n className?: string;\n value?: string;\n placeholder?: string;\n isReadOnly?: boolean;\n onChange: (value: string) => void;\n};\n\n/**\n * Editable caption field for blocks (charts, queries, etc.).\n *\n * @param value - Current caption text\n * @param className - Optional CSS class name\n * @param placeholder - Placeholder text when empty\n * @param isReadOnly - Whether the caption is editable\n * @param onChange - Callback when caption changes\n */\nexport const BlockCaptionEditor: FC<BlockCaptionEditorProps> = ({\n value,\n className,\n placeholder,\n isReadOnly,\n onChange,\n}) => {\n return (\n <EditableText\n className={cn('h-8 min-w-0 flex-1 text-sm font-medium', className)}\n value={value ?? ''}\n placeholder={placeholder}\n isReadOnly={isReadOnly}\n onChange={onChange}\n />\n );\n};\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { FC } from 'react';
|
|
2
|
+
export type ColorSelectorProps = {
|
|
3
|
+
value: string;
|
|
4
|
+
items: readonly string[];
|
|
5
|
+
onChange: (color: string) => void;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Dropdown for selecting a color from the chart color palette.
|
|
9
|
+
* Displays colors as circular indicators.
|
|
10
|
+
*/
|
|
11
|
+
export declare const ColorSelector: FC<ColorSelectorProps>;
|
|
12
|
+
//# sourceMappingURL=ColorSelector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ColorSelector.d.ts","sourceRoot":"","sources":["../../src/components/ColorSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,EAAE,EAAC,MAAM,OAAO,CAAC;AAqB9B,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,kBAAkB,CAsBhD,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Combobox } from './Combobox';
|
|
3
|
+
import { cn } from '@sqlrooms/ui';
|
|
4
|
+
const ColorSelectorItem = ({ color, className }) => {
|
|
5
|
+
return (_jsxs(_Fragment, { children: [_jsx("div", { className: cn('h-4 w-4 rounded-full border border-gray-300', className), style: { backgroundColor: color } }), _jsx("span", { className: "sr-only", children: color })] }));
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Dropdown for selecting a color from the chart color palette.
|
|
9
|
+
* Displays colors as circular indicators.
|
|
10
|
+
*/
|
|
11
|
+
export const ColorSelector = ({ value, items, onChange, }) => {
|
|
12
|
+
return (_jsxs(Combobox, { value: value, onChange: onChange, children: [_jsx(Combobox.Trigger, { className: "w-auto gap-1.5 px-2 shadow-none [&>svg]:ml-0", ariaLabel: "Select color", children: _jsx(ColorSelectorItem, { color: value, className: "h-3.5 w-3.5 shrink-0" }) }), _jsx(Combobox.Content, { children: items.map((color) => (_jsx(Combobox.Item, { value: color, children: _jsx(ColorSelectorItem, { color: color }) }, color))) })] }));
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=ColorSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ColorSelector.js","sourceRoot":"","sources":["../../src/components/ColorSelector.tsx"],"names":[],"mappings":";AACA,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AACpC,OAAO,EAAC,EAAE,EAAC,MAAM,cAAc,CAAC;AAOhC,MAAM,iBAAiB,GAA+B,CAAC,EAAC,KAAK,EAAE,SAAS,EAAC,EAAE,EAAE;IAC3E,OAAO,CACL,8BACE,cACE,SAAS,EAAE,EAAE,CAAC,6CAA6C,EAAE,SAAS,CAAC,EACvE,KAAK,EAAE,EAAC,eAAe,EAAE,KAAK,EAAC,GAC/B,EACF,eAAM,SAAS,EAAC,SAAS,YAAE,KAAK,GAAQ,IACvC,CACJ,CAAC;AACJ,CAAC,CAAC;AAQF;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAA2B,CAAC,EACpD,KAAK,EACL,KAAK,EACL,QAAQ,GACT,EAAE,EAAE;IACH,OAAO,CACL,MAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,aACxC,KAAC,QAAQ,CAAC,OAAO,IACf,SAAS,EAAC,8CAA8C,EACxD,SAAS,EAAC,cAAc,YAExB,KAAC,iBAAiB,IAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAC,sBAAsB,GAAG,GACnD,EACnB,KAAC,QAAQ,CAAC,OAAO,cACd,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACpB,KAAC,QAAQ,CAAC,IAAI,IAAa,KAAK,EAAE,KAAK,YACrC,KAAC,iBAAiB,IAAC,KAAK,EAAE,KAAK,GAAI,IADjB,KAAK,CAET,CACjB,CAAC,GACe,IACV,CACZ,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import type {FC} from 'react';\nimport {Combobox} from './Combobox';\nimport {cn} from '@sqlrooms/ui';\n\ntype ColorSelectorItemProps = {\n color: string;\n className?: string;\n};\n\nconst ColorSelectorItem: FC<ColorSelectorItemProps> = ({color, className}) => {\n return (\n <>\n <div\n className={cn('h-4 w-4 rounded-full border border-gray-300', className)}\n style={{backgroundColor: color}}\n />\n <span className=\"sr-only\">{color}</span>\n </>\n );\n};\n\nexport type ColorSelectorProps = {\n value: string;\n items: readonly string[];\n onChange: (color: string) => void;\n};\n\n/**\n * Dropdown for selecting a color from the chart color palette.\n * Displays colors as circular indicators.\n */\nexport const ColorSelector: FC<ColorSelectorProps> = ({\n value,\n items,\n onChange,\n}) => {\n return (\n <Combobox value={value} onChange={onChange}>\n <Combobox.Trigger\n className=\"w-auto gap-1.5 px-2 shadow-none [&>svg]:ml-0\"\n ariaLabel=\"Select color\"\n >\n <ColorSelectorItem color={value} className=\"h-3.5 w-3.5 shrink-0\" />\n </Combobox.Trigger>\n <Combobox.Content>\n {items.map((color) => (\n <Combobox.Item key={color} value={color}>\n <ColorSelectorItem color={color} />\n </Combobox.Item>\n ))}\n </Combobox.Content>\n </Combobox>\n );\n};\n"]}
|
|
@@ -4,6 +4,7 @@ export interface ColumnSelectorProps {
|
|
|
4
4
|
value: string | undefined;
|
|
5
5
|
onChange: (value: string) => void;
|
|
6
6
|
placeholder?: string;
|
|
7
|
+
className?: string;
|
|
7
8
|
}
|
|
8
9
|
export declare const ColumnSelector: FC<ColumnSelectorProps> & {
|
|
9
10
|
Numeric: FC<Omit<ColumnSelectorProps, "types">>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnSelector.d.ts","sourceRoot":"","sources":["../../src/components/ColumnSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,EAAC,MAAM,OAAO,CAAC;AAS9B,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"ColumnSelector.d.ts","sourceRoot":"","sources":["../../src/components/ColumnSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,EAAC,MAAM,OAAO,CAAC;AAS9B,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAgDD,eAAO,MAAM,cAAc;;;;CAIzB,CAAC"}
|
|
@@ -11,13 +11,13 @@ import { useColumnsContext } from './ColumnsContext';
|
|
|
11
11
|
* - `<ColumnSelector.Quantitative />` - numeric + temporal
|
|
12
12
|
* - `<ColumnSelector.Categorical />` - text/enum types
|
|
13
13
|
*/
|
|
14
|
-
const ColumnSelectorRoot = ({ types, value, onChange, placeholder, }) => {
|
|
14
|
+
const ColumnSelectorRoot = ({ types, value, onChange, placeholder, className, }) => {
|
|
15
15
|
const { columns } = useColumnsContext();
|
|
16
16
|
return (_jsx(FieldSelectorInput, { field: {
|
|
17
17
|
key: '',
|
|
18
18
|
label: '',
|
|
19
19
|
types,
|
|
20
|
-
}, value: value, columns: columns, onChange: onChange, placeholder: placeholder ?? 'Select column…' }));
|
|
20
|
+
}, value: value, columns: columns, onChange: onChange, placeholder: placeholder ?? 'Select column…', className: className }));
|
|
21
21
|
};
|
|
22
22
|
const Numeric = (props) => (_jsx(ColumnSelectorRoot, { ...props, types: NUMERIC_COLUMN_TYPES }));
|
|
23
23
|
const Quantitative = (props) => (_jsx(ColumnSelectorRoot, { ...props, types: QUANTITATIVE_COLUMN_TYPES }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnSelector.js","sourceRoot":"","sources":["../../src/components/ColumnSelector.tsx"],"names":[],"mappings":";AACA,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAC,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"ColumnSelector.js","sourceRoot":"","sources":["../../src/components/ColumnSelector.tsx"],"names":[],"mappings":";AACA,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAC,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AAUnD;;;;;;;;GAQG;AACH,MAAM,kBAAkB,GAA4B,CAAC,EACnD,KAAK,EACL,KAAK,EACL,QAAQ,EACR,WAAW,EACX,SAAS,GACV,EAAE,EAAE;IACH,MAAM,EAAC,OAAO,EAAC,GAAG,iBAAiB,EAAE,CAAC;IAEtC,OAAO,CACL,KAAC,kBAAkB,IACjB,KAAK,EAAE;YACL,GAAG,EAAE,EAAE;YACP,KAAK,EAAE,EAAE;YACT,KAAK;SACN,EACD,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,IAAI,gBAAgB,EAC5C,SAAS,EAAE,SAAS,GACpB,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,OAAO,GAA2C,CAAC,KAAK,EAAE,EAAE,CAAC,CACjE,KAAC,kBAAkB,OAAK,KAAK,EAAE,KAAK,EAAE,oBAAoB,GAAI,CAC/D,CAAC;AAEF,MAAM,YAAY,GAA2C,CAAC,KAAK,EAAE,EAAE,CAAC,CACtE,KAAC,kBAAkB,OAAK,KAAK,EAAE,KAAK,EAAE,yBAAyB,GAAI,CACpE,CAAC;AAEF,MAAM,WAAW,GAA2C,CAAC,KAAK,EAAE,EAAE,CAAC,CACrE,KAAC,kBAAkB,OAAK,KAAK,EAAE,KAAK,EAAE,wBAAwB,GAAI,CACnE,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE;IAC9D,OAAO;IACP,YAAY;IACZ,WAAW;CACZ,CAAC,CAAC","sourcesContent":["import {type FC} from 'react';\nimport {FieldSelectorInput} from './FieldSelectorInput';\nimport {\n NUMERIC_COLUMN_TYPES,\n QUANTITATIVE_COLUMN_TYPES,\n CATEGORICAL_COLUMN_TYPES,\n} from '../column-types-utils';\nimport {useColumnsContext} from './ColumnsContext';\n\nexport interface ColumnSelectorProps {\n types?: string[];\n value: string | undefined;\n onChange: (value: string) => void;\n placeholder?: string;\n className?: string;\n}\n\n/**\n * Simplified wrapper around FieldSelectorInput for selecting a table column.\n * Removes the field prop requirement for easier composition.\n *\n * Can be used as:\n * - `<ColumnSelector.Numeric />` - numeric types only\n * - `<ColumnSelector.Quantitative />` - numeric + temporal\n * - `<ColumnSelector.Categorical />` - text/enum types\n */\nconst ColumnSelectorRoot: FC<ColumnSelectorProps> = ({\n types,\n value,\n onChange,\n placeholder,\n className,\n}) => {\n const {columns} = useColumnsContext();\n\n return (\n <FieldSelectorInput\n field={{\n key: '',\n label: '',\n types,\n }}\n value={value}\n columns={columns}\n onChange={onChange}\n placeholder={placeholder ?? 'Select column…'}\n className={className}\n />\n );\n};\n\nconst Numeric: FC<Omit<ColumnSelectorProps, 'types'>> = (props) => (\n <ColumnSelectorRoot {...props} types={NUMERIC_COLUMN_TYPES} />\n);\n\nconst Quantitative: FC<Omit<ColumnSelectorProps, 'types'>> = (props) => (\n <ColumnSelectorRoot {...props} types={QUANTITATIVE_COLUMN_TYPES} />\n);\n\nconst Categorical: FC<Omit<ColumnSelectorProps, 'types'>> = (props) => (\n <ColumnSelectorRoot {...props} types={CATEGORICAL_COLUMN_TYPES} />\n);\n\nexport const ColumnSelector = Object.assign(ColumnSelectorRoot, {\n Numeric,\n Quantitative,\n Categorical,\n});\n"]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type FC, type PropsWithChildren } from 'react';
|
|
2
|
+
import { type UseComboboxOptions } from './useCombobox';
|
|
3
|
+
type ComboboxRootProps<T extends string = string> = PropsWithChildren<UseComboboxOptions<T> & {
|
|
4
|
+
currentValue?: string;
|
|
5
|
+
}>;
|
|
6
|
+
declare function ComboboxRoot<T extends string = string>({ value, onChange, currentValue, children, }: ComboboxRootProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
type ComboboxTriggerProps = {
|
|
8
|
+
className?: string;
|
|
9
|
+
ariaLabel?: string;
|
|
10
|
+
};
|
|
11
|
+
type ComboboxContentProps = {
|
|
12
|
+
searchable?: boolean;
|
|
13
|
+
searchPlaceholder?: string;
|
|
14
|
+
emptyMessage?: string;
|
|
15
|
+
};
|
|
16
|
+
type ComboboxItemProps = {
|
|
17
|
+
value: string;
|
|
18
|
+
isSelected?: boolean;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Compound component for Popover-based combobox selectors.
|
|
22
|
+
*
|
|
23
|
+
* Example usage:
|
|
24
|
+
* ```tsx
|
|
25
|
+
* <Combobox value={value} onChange={onChange}>
|
|
26
|
+
* <Combobox.Trigger>
|
|
27
|
+
* <span>{selectedLabel}</span>
|
|
28
|
+
* </Combobox.Trigger>
|
|
29
|
+
* <Combobox.Content searchable searchPlaceholder="Search...">
|
|
30
|
+
* {options.map(opt => (
|
|
31
|
+
* <Combobox.Item key={opt.value} value={opt.value}>
|
|
32
|
+
* <span>{opt.label}</span>
|
|
33
|
+
* </Combobox.Item>
|
|
34
|
+
* ))}
|
|
35
|
+
* </Combobox.Content>
|
|
36
|
+
* </Combobox>
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare const Combobox: typeof ComboboxRoot & {
|
|
40
|
+
Trigger: FC<PropsWithChildren<ComboboxTriggerProps>>;
|
|
41
|
+
Content: FC<PropsWithChildren<ComboboxContentProps>>;
|
|
42
|
+
Item: FC<PropsWithChildren<ComboboxItemProps>>;
|
|
43
|
+
};
|
|
44
|
+
export {};
|
|
45
|
+
//# sourceMappingURL=Combobox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Combobox.d.ts","sourceRoot":"","sources":["../../src/components/Combobox.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EAAE,EACP,KAAK,iBAAiB,EAGvB,MAAM,OAAO,CAAC;AAef,OAAO,EAAc,KAAK,kBAAkB,EAAC,MAAM,eAAe,CAAC;AAoBnE,KAAK,iBAAiB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI,iBAAiB,CACnE,kBAAkB,CAAC,CAAC,CAAC,GAAG;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CACF,CAAC;AAEF,iBAAS,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,EAC/C,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,QAAQ,GACT,EAAE,iBAAiB,CAAC,CAAC,CAAC,2CActB;AAED,KAAK,oBAAoB,GAAG;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAyBF,KAAK,oBAAoB,GAAG;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAuBF,KAAK,iBAAiB,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAuBF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,QAAQ;;;;CAInB,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useContext, } from 'react';
|
|
3
|
+
import { Button, cn, Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, Popover, PopoverContent, PopoverTrigger, } from '@sqlrooms/ui';
|
|
4
|
+
import { Check, ChevronsUpDown } from 'lucide-react';
|
|
5
|
+
import { useCombobox } from './useCombobox';
|
|
6
|
+
const ComboboxContext = createContext(null);
|
|
7
|
+
function useComboboxContext() {
|
|
8
|
+
const context = useContext(ComboboxContext);
|
|
9
|
+
if (!context) {
|
|
10
|
+
throw new Error('Combobox compound components must be used within Combobox');
|
|
11
|
+
}
|
|
12
|
+
return context;
|
|
13
|
+
}
|
|
14
|
+
function ComboboxRoot({ value, onChange, currentValue, children, }) {
|
|
15
|
+
const { popoverProps, handleSelect, open } = useCombobox({ value, onChange });
|
|
16
|
+
return (_jsx(ComboboxContext.Provider, { value: {
|
|
17
|
+
open,
|
|
18
|
+
currentValue: currentValue ?? String(value),
|
|
19
|
+
handleSelect,
|
|
20
|
+
}, children: _jsx(Popover, { ...popoverProps, children: children }) }));
|
|
21
|
+
}
|
|
22
|
+
const ComboboxTrigger = ({ children, className, ariaLabel, }) => {
|
|
23
|
+
const { open } = useComboboxContext();
|
|
24
|
+
return (_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { variant: "outline", role: "combobox", "aria-expanded": open, "aria-label": ariaLabel, className: cn('h-8 justify-between text-xs font-normal', className), children: [children, _jsx(ChevronsUpDown, { className: "ml-2 h-3.5 w-3.5 shrink-0 opacity-50" })] }) }));
|
|
25
|
+
};
|
|
26
|
+
const ComboboxContent = ({ children, searchable = false, searchPlaceholder = 'Search...', emptyMessage = 'No matching option.', }) => {
|
|
27
|
+
return (_jsx(PopoverContent, { className: "w-[--radix-popover-trigger-width] p-0 text-xs", children: _jsxs(Command, { children: [searchable && (_jsx(CommandInput, { placeholder: searchPlaceholder, className: "text-xs" })), _jsxs(CommandList, { children: [_jsx(CommandEmpty, { children: emptyMessage }), _jsx(CommandGroup, { children: children })] })] }) }));
|
|
28
|
+
};
|
|
29
|
+
const ComboboxItem = ({ value, children, isSelected, }) => {
|
|
30
|
+
const { currentValue, handleSelect } = useComboboxContext();
|
|
31
|
+
const selected = isSelected ?? currentValue === value;
|
|
32
|
+
return (_jsxs(CommandItem, { value: value, onSelect: handleSelect, children: [_jsx(Check, { className: cn('h-3.5 w-3.5 shrink-0', selected ? 'opacity-100' : 'opacity-0') }), children] }));
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Compound component for Popover-based combobox selectors.
|
|
36
|
+
*
|
|
37
|
+
* Example usage:
|
|
38
|
+
* ```tsx
|
|
39
|
+
* <Combobox value={value} onChange={onChange}>
|
|
40
|
+
* <Combobox.Trigger>
|
|
41
|
+
* <span>{selectedLabel}</span>
|
|
42
|
+
* </Combobox.Trigger>
|
|
43
|
+
* <Combobox.Content searchable searchPlaceholder="Search...">
|
|
44
|
+
* {options.map(opt => (
|
|
45
|
+
* <Combobox.Item key={opt.value} value={opt.value}>
|
|
46
|
+
* <span>{opt.label}</span>
|
|
47
|
+
* </Combobox.Item>
|
|
48
|
+
* ))}
|
|
49
|
+
* </Combobox.Content>
|
|
50
|
+
* </Combobox>
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export const Combobox = Object.assign(ComboboxRoot, {
|
|
54
|
+
Trigger: ComboboxTrigger,
|
|
55
|
+
Content: ComboboxContent,
|
|
56
|
+
Item: ComboboxItem,
|
|
57
|
+
});
|
|
58
|
+
//# sourceMappingURL=Combobox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Combobox.js","sourceRoot":"","sources":["../../src/components/Combobox.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n type FC,\n type PropsWithChildren,\n createContext,\n useContext,\n} from 'react';\nimport {\n Button,\n cn,\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '@sqlrooms/ui';\nimport {Check, ChevronsUpDown} from 'lucide-react';\nimport {useCombobox, type UseComboboxOptions} from './useCombobox';\n\ninterface ComboboxContextValue {\n open: boolean;\n currentValue: string;\n handleSelect: (value: string) => void;\n}\n\nconst ComboboxContext = createContext<ComboboxContextValue | null>(null);\n\nfunction useComboboxContext() {\n const context = useContext(ComboboxContext);\n if (!context) {\n throw new Error(\n 'Combobox compound components must be used within Combobox',\n );\n }\n return context;\n}\n\ntype ComboboxRootProps<T extends string = string> = PropsWithChildren<\n UseComboboxOptions<T> & {\n currentValue?: string;\n }\n>;\n\nfunction ComboboxRoot<T extends string = string>({\n value,\n onChange,\n currentValue,\n children,\n}: ComboboxRootProps<T>) {\n const {popoverProps, handleSelect, open} = useCombobox({value, onChange});\n\n return (\n <ComboboxContext.Provider\n value={{\n open,\n currentValue: currentValue ?? String(value),\n handleSelect,\n }}\n >\n <Popover {...popoverProps}>{children}</Popover>\n </ComboboxContext.Provider>\n );\n}\n\ntype ComboboxTriggerProps = {\n className?: string;\n ariaLabel?: string;\n};\n\nconst ComboboxTrigger: FC<PropsWithChildren<ComboboxTriggerProps>> = ({\n children,\n className,\n ariaLabel,\n}) => {\n const {open} = useComboboxContext();\n\n return (\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n role=\"combobox\"\n aria-expanded={open}\n aria-label={ariaLabel}\n className={cn('h-8 justify-between text-xs font-normal', className)}\n >\n {children}\n <ChevronsUpDown className=\"ml-2 h-3.5 w-3.5 shrink-0 opacity-50\" />\n </Button>\n </PopoverTrigger>\n );\n};\n\ntype ComboboxContentProps = {\n searchable?: boolean;\n searchPlaceholder?: string;\n emptyMessage?: string;\n};\n\nconst ComboboxContent: FC<PropsWithChildren<ComboboxContentProps>> = ({\n children,\n searchable = false,\n searchPlaceholder = 'Search...',\n emptyMessage = 'No matching option.',\n}) => {\n return (\n <PopoverContent className=\"w-[--radix-popover-trigger-width] p-0 text-xs\">\n <Command>\n {searchable && (\n <CommandInput placeholder={searchPlaceholder} className=\"text-xs\" />\n )}\n <CommandList>\n <CommandEmpty>{emptyMessage}</CommandEmpty>\n <CommandGroup>{children}</CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n );\n};\n\ntype ComboboxItemProps = {\n value: string;\n isSelected?: boolean;\n};\n\nconst ComboboxItem: FC<PropsWithChildren<ComboboxItemProps>> = ({\n value,\n children,\n isSelected,\n}) => {\n const {currentValue, handleSelect} = useComboboxContext();\n const selected = isSelected ?? currentValue === value;\n\n return (\n <CommandItem value={value} onSelect={handleSelect}>\n <Check\n className={cn(\n 'h-3.5 w-3.5 shrink-0',\n selected ? 'opacity-100' : 'opacity-0',\n )}\n />\n {children}\n </CommandItem>\n );\n};\n\n/**\n * Compound component for Popover-based combobox selectors.\n *\n * Example usage:\n * ```tsx\n * <Combobox value={value} onChange={onChange}>\n * <Combobox.Trigger>\n * <span>{selectedLabel}</span>\n * </Combobox.Trigger>\n * <Combobox.Content searchable searchPlaceholder=\"Search...\">\n * {options.map(opt => (\n * <Combobox.Item key={opt.value} value={opt.value}>\n * <span>{opt.label}</span>\n * </Combobox.Item>\n * ))}\n * </Combobox.Content>\n * </Combobox>\n * ```\n */\nexport const Combobox = Object.assign(ComboboxRoot, {\n Trigger: ComboboxTrigger,\n Content: ComboboxContent,\n Item: ComboboxItem,\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldSelectorInput.d.ts","sourceRoot":"","sources":["../../src/components/FieldSelectorInput.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FieldSelectorInput.d.ts","sourceRoot":"","sources":["../../src/components/FieldSelectorInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,kCAAkC,CAAC;AAI1C,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,iBAAiB,CAAC;IACzB,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAsDhE,CAAC"}
|
|
@@ -1,19 +1,14 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { useState } from 'react';
|
|
2
|
+
import { Combobox } from './Combobox';
|
|
3
|
+
import { cn } from '@sqlrooms/ui';
|
|
5
4
|
/**
|
|
6
5
|
* A searchable dropdown selector for choosing a table column for a chart builder field.
|
|
7
6
|
*/
|
|
8
|
-
export const FieldSelectorInput = ({ field, columns, value, onChange, placeholder = 'Select...', }) => {
|
|
9
|
-
const [open, setOpen] = useState(false);
|
|
7
|
+
export const FieldSelectorInput = ({ field, columns, value, onChange, className, placeholder = 'Select...', }) => {
|
|
10
8
|
const filteredColumns = field.types
|
|
11
9
|
? columns.filter((col) => field.types.some((t) => col.type.toUpperCase() === t.toUpperCase()))
|
|
12
10
|
: columns;
|
|
13
11
|
const selectedColumn = filteredColumns.find((col) => col.name === value);
|
|
14
|
-
return (_jsx("div", { className:
|
|
15
|
-
onChange(currentValue);
|
|
16
|
-
setOpen(false);
|
|
17
|
-
}, children: [_jsx(Check, { className: cn('mr-2 h-3.5 w-3.5 shrink-0', value === col.name ? 'opacity-100' : 'opacity-0') }), _jsx("span", { className: "truncate text-xs", children: col.name }), _jsx("span", { className: "text-muted-foreground ml-auto text-[8px]", children: col.type })] }, col.name))) })] })] }) })] }) }));
|
|
12
|
+
return (_jsx("div", { className: cn('@container flex flex-col gap-1', className), children: _jsxs(Combobox, { value: value ?? '', onChange: onChange, children: [_jsx(Combobox.Trigger, { className: "w-full", children: selectedColumn ? (_jsxs("span", { className: "flex min-w-0 items-baseline gap-1", children: [_jsx("span", { className: "truncate text-xs", children: selectedColumn.name }), _jsx("span", { className: "text-muted-foreground hidden overflow-hidden text-[8px] whitespace-nowrap @[180px]:inline", children: selectedColumn.type })] })) : value ? (_jsx("span", { className: "flex min-w-0 items-baseline gap-1", children: _jsx("span", { className: "truncate text-xs", children: value }) })) : (_jsx("span", { className: "text-muted-foreground truncate text-xs", children: placeholder })) }), _jsx(Combobox.Content, { searchable: true, searchPlaceholder: "Search columns...", emptyMessage: "No matching column.", children: filteredColumns.map((col) => (_jsxs(Combobox.Item, { value: col.name, children: [_jsx("span", { className: "truncate text-xs", children: col.name }), _jsx("span", { className: "text-muted-foreground ml-auto text-[8px]", children: col.type })] }, col.name))) })] }) }));
|
|
18
13
|
};
|
|
19
14
|
//# sourceMappingURL=FieldSelectorInput.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldSelectorInput.js","sourceRoot":"","sources":["../../src/components/FieldSelectorInput.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"FieldSelectorInput.js","sourceRoot":"","sources":["../../src/components/FieldSelectorInput.tsx"],"names":[],"mappings":";AAKA,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AACpC,OAAO,EAAC,EAAE,EAAC,MAAM,cAAc,CAAC;AAWhC;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAsC,CAAC,EACpE,KAAK,EACL,OAAO,EACP,KAAK,EACL,QAAQ,EACR,SAAS,EACT,WAAW,GAAG,WAAW,GAC1B,EAAE,EAAE;IACH,MAAM,eAAe,GAAG,KAAK,CAAC,KAAK;QACjC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CACrB,KAAK,CAAC,KAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CACrE;QACH,CAAC,CAAC,OAAO,CAAC;IAEZ,MAAM,cAAc,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;IAEzE,OAAO,CACL,cAAK,SAAS,EAAE,EAAE,CAAC,gCAAgC,EAAE,SAAS,CAAC,YAC7D,MAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,aAC9C,KAAC,QAAQ,CAAC,OAAO,IAAC,SAAS,EAAC,QAAQ,YACjC,cAAc,CAAC,CAAC,CAAC,CAChB,gBAAM,SAAS,EAAC,mCAAmC,aACjD,eAAM,SAAS,EAAC,kBAAkB,YAAE,cAAc,CAAC,IAAI,GAAQ,EAC/D,eAAM,SAAS,EAAC,2FAA2F,YACxG,cAAc,CAAC,IAAI,GACf,IACF,CACR,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CACV,eAAM,SAAS,EAAC,mCAAmC,YACjD,eAAM,SAAS,EAAC,kBAAkB,YAAE,KAAK,GAAQ,GAC5C,CACR,CAAC,CAAC,CAAC,CACF,eAAM,SAAS,EAAC,wCAAwC,YACrD,WAAW,GACP,CACR,GACgB,EACnB,KAAC,QAAQ,CAAC,OAAO,IACf,UAAU,QACV,iBAAiB,EAAC,mBAAmB,EACrC,YAAY,EAAC,qBAAqB,YAEjC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAC5B,MAAC,QAAQ,CAAC,IAAI,IAAgB,KAAK,EAAE,GAAG,CAAC,IAAI,aAC3C,eAAM,SAAS,EAAC,kBAAkB,YAAE,GAAG,CAAC,IAAI,GAAQ,EACpD,eAAM,SAAS,EAAC,0CAA0C,YACvD,GAAG,CAAC,IAAI,GACJ,KAJW,GAAG,CAAC,IAAI,CAKZ,CACjB,CAAC,GACe,IACV,GACP,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import React from 'react';\nimport {\n ChartBuilderColumn,\n ChartBuilderField,\n} from '../charts/chart-types/base-types';\nimport {Combobox} from './Combobox';\nimport {cn} from '@sqlrooms/ui';\n\nexport interface FieldSelectorInputProps {\n field: ChartBuilderField;\n columns: ChartBuilderColumn[];\n value: string | undefined;\n onChange: (value: string) => void;\n placeholder?: string;\n className?: string;\n}\n\n/**\n * A searchable dropdown selector for choosing a table column for a chart builder field.\n */\nexport const FieldSelectorInput: React.FC<FieldSelectorInputProps> = ({\n field,\n columns,\n value,\n onChange,\n className,\n placeholder = 'Select...',\n}) => {\n const filteredColumns = field.types\n ? columns.filter((col) =>\n field.types!.some((t) => col.type.toUpperCase() === t.toUpperCase()),\n )\n : columns;\n\n const selectedColumn = filteredColumns.find((col) => col.name === value);\n\n return (\n <div className={cn('@container flex flex-col gap-1', className)}>\n <Combobox value={value ?? ''} onChange={onChange}>\n <Combobox.Trigger className=\"w-full\">\n {selectedColumn ? (\n <span className=\"flex min-w-0 items-baseline gap-1\">\n <span className=\"truncate text-xs\">{selectedColumn.name}</span>\n <span className=\"text-muted-foreground hidden overflow-hidden text-[8px] whitespace-nowrap @[180px]:inline\">\n {selectedColumn.type}\n </span>\n </span>\n ) : value ? (\n <span className=\"flex min-w-0 items-baseline gap-1\">\n <span className=\"truncate text-xs\">{value}</span>\n </span>\n ) : (\n <span className=\"text-muted-foreground truncate text-xs\">\n {placeholder}\n </span>\n )}\n </Combobox.Trigger>\n <Combobox.Content\n searchable\n searchPlaceholder=\"Search columns...\"\n emptyMessage=\"No matching column.\"\n >\n {filteredColumns.map((col) => (\n <Combobox.Item key={col.name} value={col.name}>\n <span className=\"truncate text-xs\">{col.name}</span>\n <span className=\"text-muted-foreground ml-auto text-[8px]\">\n {col.type}\n </span>\n </Combobox.Item>\n ))}\n </Combobox.Content>\n </Combobox>\n </div>\n );\n};\n"]}
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import { type FC } from 'react';
|
|
2
2
|
import type { YFieldConfig } from '../charts/chart-types/line-chart/schema';
|
|
3
|
+
type RenderItemFunction = (fieldConfig: YFieldConfig, index: number, handleUpdate: (index: number, updates: Partial<YFieldConfig>) => void) => React.ReactNode;
|
|
3
4
|
export interface MultiFieldSelectorProps {
|
|
4
5
|
types?: string[];
|
|
5
6
|
value: YFieldConfig[];
|
|
6
7
|
onChange: (value: YFieldConfig[]) => void;
|
|
7
|
-
|
|
8
|
+
onAdd: (fieldName: string) => void;
|
|
9
|
+
renderItem?: RenderItemFunction;
|
|
8
10
|
}
|
|
9
11
|
export declare const MultiFieldSelector: FC<MultiFieldSelectorProps> & {
|
|
10
12
|
Numeric: FC<Omit<MultiFieldSelectorProps, "types">>;
|
|
11
13
|
Quantitative: FC<Omit<MultiFieldSelectorProps, "types">>;
|
|
12
14
|
Categorical: FC<Omit<MultiFieldSelectorProps, "types">>;
|
|
13
15
|
};
|
|
16
|
+
export {};
|
|
14
17
|
//# sourceMappingURL=MultiFieldSelector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiFieldSelector.d.ts","sourceRoot":"","sources":["../../src/components/MultiFieldSelector.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAuB,KAAK,EAAE,EAAC,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"MultiFieldSelector.d.ts","sourceRoot":"","sources":["../../src/components/MultiFieldSelector.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAuB,KAAK,EAAE,EAAC,MAAM,OAAO,CAAC;AAQpD,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,yCAAyC,CAAC;AAE1E,KAAK,kBAAkB,GAAG,CACxB,WAAW,EAAE,YAAY,EACzB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,IAAI,KAClE,KAAK,CAAC,SAAS,CAAC;AAErB,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC;IAC1C,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,UAAU,CAAC,EAAE,kBAAkB,CAAC;CACjC;AAmGD,eAAO,MAAM,kBAAkB;;;;CAI7B,CAAC"}
|
|
@@ -3,7 +3,6 @@ import { Button } from '@sqlrooms/ui';
|
|
|
3
3
|
import { Trash2 } from 'lucide-react';
|
|
4
4
|
import { useCallback, useMemo } from 'react';
|
|
5
5
|
import { ColumnSelector } from './ColumnSelector';
|
|
6
|
-
import { AggregationSelector } from './AggregationSelector';
|
|
7
6
|
import { ColumnsProvider, useColumnsContext } from './ColumnsContext';
|
|
8
7
|
import { NUMERIC_COLUMN_TYPES, QUANTITATIVE_COLUMN_TYPES, CATEGORICAL_COLUMN_TYPES, } from '../column-types-utils';
|
|
9
8
|
/**
|
|
@@ -16,7 +15,7 @@ import { NUMERIC_COLUMN_TYPES, QUANTITATIVE_COLUMN_TYPES, CATEGORICAL_COLUMN_TYP
|
|
|
16
15
|
* - `<MultiFieldSelector.Quantitative />` - numeric + temporal
|
|
17
16
|
* - `<MultiFieldSelector.Categorical />` - text/enum types
|
|
18
17
|
*/
|
|
19
|
-
const MultiFieldSelectorRoot = ({ types, value, onChange,
|
|
18
|
+
const MultiFieldSelectorRoot = ({ types, value, onChange, onAdd, renderItem, }) => {
|
|
20
19
|
const { columns } = useColumnsContext();
|
|
21
20
|
const selectedFieldNames = useMemo(() => value.map((v) => v.field), [value]);
|
|
22
21
|
const availableColumns = useMemo(() => columns.filter((col) => !selectedFieldNames.includes(col.name)), [columns, selectedFieldNames]);
|
|
@@ -28,19 +27,11 @@ const MultiFieldSelectorRoot = ({ types, value, onChange, showAggregation = fals
|
|
|
28
27
|
const handleRemove = useCallback((index) => {
|
|
29
28
|
onChange(value.filter((_, i) => i !== index));
|
|
30
29
|
}, [value, onChange]);
|
|
31
|
-
const handleAdd = useCallback((fieldName) => {
|
|
32
|
-
if (fieldName) {
|
|
33
|
-
onChange([...value, { field: fieldName, aggregate: 'sum' }]);
|
|
34
|
-
}
|
|
35
|
-
}, [value, onChange]);
|
|
36
30
|
return (_jsxs("div", { className: "space-y-1", children: [value.map((fieldConfig, index) => {
|
|
37
|
-
const aggregate = fieldConfig.aggregate || 'sum';
|
|
38
31
|
return (_jsxs("div", { className: "grid items-end gap-2", style: {
|
|
39
|
-
gridTemplateColumns:
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
}, children: [_jsx(ColumnSelector, { types: types, value: fieldConfig.field, onChange: (newField) => handleUpdate(index, { field: newField }) }), showAggregation && (_jsx(AggregationSelector, { value: aggregate, onChange: (agg) => handleUpdate(index, { aggregate: agg }) })), _jsx(Button, { variant: "ghost", size: "icon", onClick: () => handleRemove(index), className: "h-8 w-8 shrink-0", children: _jsx(Trash2, { className: "text-destructive h-4 w-4" }) })] }, fieldConfig.field));
|
|
43
|
-
}), _jsx(ColumnsProvider, { columns: availableColumns, children: _jsx(ColumnSelector, { types: types, value: undefined, onChange: handleAdd, placeholder: "Select field..." }) })] }));
|
|
32
|
+
gridTemplateColumns: 'minmax(120px, 1fr) auto 32px',
|
|
33
|
+
}, children: [_jsx(ColumnSelector, { types: types, value: fieldConfig.field, onChange: (newField) => handleUpdate(index, { field: newField }) }), renderItem && renderItem(fieldConfig, index, handleUpdate), _jsx(Button, { variant: "ghost", size: "icon", onClick: () => handleRemove(index), className: "h-8 w-8 shrink-0", children: _jsx(Trash2, { className: "text-destructive h-4 w-4" }) })] }, fieldConfig.field));
|
|
34
|
+
}), _jsx(ColumnsProvider, { columns: availableColumns, children: _jsx(ColumnSelector, { types: types, value: undefined, onChange: onAdd, placeholder: "Select field..." }) })] }));
|
|
44
35
|
};
|
|
45
36
|
const Numeric = (props) => (_jsx(MultiFieldSelectorRoot, { ...props, types: NUMERIC_COLUMN_TYPES }));
|
|
46
37
|
const Quantitative = (props) => (_jsx(MultiFieldSelectorRoot, { ...props, types: QUANTITATIVE_COLUMN_TYPES }));
|