@panoboard/core 1.3.0 → 1.9.0
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/dist/annotations/executor.d.ts +32 -0
- package/dist/annotations/executor.d.ts.map +1 -0
- package/dist/annotations/executor.js +74 -0
- package/dist/annotations/executor.js.map +1 -0
- package/dist/annotations/index.d.ts +2 -0
- package/dist/annotations/index.d.ts.map +1 -0
- package/dist/annotations/index.js +15 -0
- package/dist/annotations/index.js.map +1 -0
- package/dist/cache/keys.d.ts.map +1 -1
- package/dist/cache/keys.js +4 -4
- package/dist/cache/keys.js.map +1 -1
- package/dist/components/ConfigErrorBanner.d.ts.map +1 -1
- package/dist/components/ConfigErrorBanner.js +38 -10
- package/dist/components/ConfigErrorBanner.js.map +1 -1
- package/dist/components/CrosshairContext.d.ts +13 -0
- package/dist/components/CrosshairContext.d.ts.map +1 -0
- package/dist/components/CrosshairContext.js +37 -0
- package/dist/components/CrosshairContext.js.map +1 -0
- package/dist/components/DashboardCard.d.ts +3 -1
- package/dist/components/DashboardCard.d.ts.map +1 -1
- package/dist/components/DashboardCard.js +65 -12
- package/dist/components/DashboardCard.js.map +1 -1
- package/dist/components/DashboardDescription.d.ts +19 -0
- package/dist/components/DashboardDescription.d.ts.map +1 -0
- package/dist/components/DashboardDescription.js +61 -0
- package/dist/components/DashboardDescription.js.map +1 -0
- package/dist/components/DashboardLinks.d.ts +8 -0
- package/dist/components/DashboardLinks.d.ts.map +1 -0
- package/dist/components/DashboardLinks.js +53 -0
- package/dist/components/DashboardLinks.js.map +1 -0
- package/dist/components/DashboardShell.d.ts +5 -1
- package/dist/components/DashboardShell.d.ts.map +1 -1
- package/dist/components/DashboardShell.js +42 -25
- package/dist/components/DashboardShell.js.map +1 -1
- package/dist/components/EmptyState.d.ts.map +1 -1
- package/dist/components/EmptyState.js +7 -1
- package/dist/components/EmptyState.js.map +1 -1
- package/dist/components/ErrorPage.d.ts.map +1 -1
- package/dist/components/ErrorPage.js +22 -33
- package/dist/components/ErrorPage.js.map +1 -1
- package/dist/components/FilterBar.d.ts.map +1 -1
- package/dist/components/FilterBar.js +21 -5
- package/dist/components/FilterBar.js.map +1 -1
- package/dist/components/NotificationCenter.d.ts +6 -0
- package/dist/components/NotificationCenter.d.ts.map +1 -0
- package/dist/components/NotificationCenter.js +83 -0
- package/dist/components/NotificationCenter.js.map +1 -0
- package/dist/components/NotificationIndicator.d.ts +6 -0
- package/dist/components/NotificationIndicator.d.ts.map +1 -0
- package/dist/components/NotificationIndicator.js +24 -0
- package/dist/components/NotificationIndicator.js.map +1 -0
- package/dist/components/PanelGrid.js +2 -2
- package/dist/components/PanelGrid.js.map +1 -1
- package/dist/components/PanelWrapper.d.ts +2 -1
- package/dist/components/PanelWrapper.d.ts.map +1 -1
- package/dist/components/PanelWrapper.js +101 -16
- package/dist/components/PanelWrapper.js.map +1 -1
- package/dist/components/RefreshContext.d.ts +3 -0
- package/dist/components/RefreshContext.d.ts.map +1 -0
- package/dist/components/RefreshContext.js +7 -0
- package/dist/components/RefreshContext.js.map +1 -0
- package/dist/components/RefreshControl.d.ts +17 -0
- package/dist/components/RefreshControl.d.ts.map +1 -0
- package/dist/components/RefreshControl.js +72 -0
- package/dist/components/RefreshControl.js.map +1 -0
- package/dist/components/SectionGrid.d.ts +9 -0
- package/dist/components/SectionGrid.d.ts.map +1 -0
- package/dist/components/SectionGrid.js +76 -0
- package/dist/components/SectionGrid.js.map +1 -0
- package/dist/components/SectionHeader.d.ts +8 -0
- package/dist/components/SectionHeader.d.ts.map +1 -0
- package/dist/components/SectionHeader.js +21 -0
- package/dist/components/SectionHeader.js.map +1 -0
- package/dist/components/TagPills.d.ts +7 -0
- package/dist/components/TagPills.d.ts.map +1 -0
- package/dist/components/TagPills.js +41 -0
- package/dist/components/TagPills.js.map +1 -0
- package/dist/components/filters/BooleanFilter.d.ts.map +1 -1
- package/dist/components/filters/BooleanFilter.js +1 -3
- package/dist/components/filters/BooleanFilter.js.map +1 -1
- package/dist/components/filters/CalendarGrid.d.ts.map +1 -1
- package/dist/components/filters/CalendarGrid.js +1 -1
- package/dist/components/filters/CalendarGrid.js.map +1 -1
- package/dist/components/filters/DateRangeFilter.d.ts.map +1 -1
- package/dist/components/filters/DateRangeFilter.js +4 -6
- package/dist/components/filters/DateRangeFilter.js.map +1 -1
- package/dist/components/filters/FilterChips.d.ts.map +1 -1
- package/dist/components/filters/FilterChips.js +71 -10
- package/dist/components/filters/FilterChips.js.map +1 -1
- package/dist/components/filters/IntervalFilter.d.ts +9 -0
- package/dist/components/filters/IntervalFilter.d.ts.map +1 -0
- package/dist/components/filters/IntervalFilter.js +32 -0
- package/dist/components/filters/IntervalFilter.js.map +1 -0
- package/dist/components/filters/MultiSelectFilter.d.ts.map +1 -1
- package/dist/components/filters/MultiSelectFilter.js +1 -3
- package/dist/components/filters/MultiSelectFilter.js.map +1 -1
- package/dist/components/filters/NumberFilter.d.ts.map +1 -1
- package/dist/components/filters/NumberFilter.js +5 -1
- package/dist/components/filters/NumberFilter.js.map +1 -1
- package/dist/components/filters/SelectFilter.d.ts +2 -1
- package/dist/components/filters/SelectFilter.d.ts.map +1 -1
- package/dist/components/filters/SelectFilter.js +9 -10
- package/dist/components/filters/SelectFilter.js.map +1 -1
- package/dist/components/filters/TextFilter.d.ts.map +1 -1
- package/dist/components/filters/TextFilter.js +5 -1
- package/dist/components/filters/TextFilter.js.map +1 -1
- package/dist/components/index.d.ts +11 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +14 -1
- package/dist/components/index.js.map +1 -1
- package/dist/components/panels/AnnotationLayer.d.ts +28 -0
- package/dist/components/panels/AnnotationLayer.d.ts.map +1 -0
- package/dist/components/panels/AnnotationLayer.js +102 -0
- package/dist/components/panels/AnnotationLayer.js.map +1 -0
- package/dist/components/panels/AreaChart.d.ts +3 -1
- package/dist/components/panels/AreaChart.d.ts.map +1 -1
- package/dist/components/panels/AreaChart.js +87 -5
- package/dist/components/panels/AreaChart.js.map +1 -1
- package/dist/components/panels/BarChart.d.ts.map +1 -1
- package/dist/components/panels/BarChart.js +61 -7
- package/dist/components/panels/BarChart.js.map +1 -1
- package/dist/components/panels/BulletChart.js +1 -1
- package/dist/components/panels/BulletChart.js.map +1 -1
- package/dist/components/panels/CalendarHeatmap.d.ts.map +1 -1
- package/dist/components/panels/CalendarHeatmap.js +7 -4
- package/dist/components/panels/CalendarHeatmap.js.map +1 -1
- package/dist/components/panels/ChartTooltip.d.ts.map +1 -1
- package/dist/components/panels/ChartTooltip.js +9 -48
- package/dist/components/panels/ChartTooltip.js.map +1 -1
- package/dist/components/panels/DataLinks.d.ts +35 -0
- package/dist/components/panels/DataLinks.d.ts.map +1 -0
- package/dist/components/panels/DataLinks.js +67 -0
- package/dist/components/panels/DataLinks.js.map +1 -0
- package/dist/components/panels/GaugePanel.d.ts +7 -0
- package/dist/components/panels/GaugePanel.d.ts.map +1 -0
- package/dist/components/panels/GaugePanel.js +116 -0
- package/dist/components/panels/GaugePanel.js.map +1 -0
- package/dist/components/panels/HistogramPanel.d.ts +18 -0
- package/dist/components/panels/HistogramPanel.d.ts.map +1 -0
- package/dist/components/panels/HistogramPanel.js +92 -0
- package/dist/components/panels/HistogramPanel.js.map +1 -0
- package/dist/components/panels/LineChart.d.ts +3 -1
- package/dist/components/panels/LineChart.d.ts.map +1 -1
- package/dist/components/panels/LineChart.js +90 -5
- package/dist/components/panels/LineChart.js.map +1 -1
- package/dist/components/panels/ListPanel.d.ts.map +1 -1
- package/dist/components/panels/ListPanel.js +1 -1
- package/dist/components/panels/ListPanel.js.map +1 -1
- package/dist/components/panels/MarkdownPanel.d.ts +15 -1
- package/dist/components/panels/MarkdownPanel.d.ts.map +1 -1
- package/dist/components/panels/MarkdownPanel.js +70 -7
- package/dist/components/panels/MarkdownPanel.js.map +1 -1
- package/dist/components/panels/MetricPanel.d.ts.map +1 -1
- package/dist/components/panels/MetricPanel.js +1 -1
- package/dist/components/panels/MetricPanel.js.map +1 -1
- package/dist/components/panels/PanelEmpty.d.ts.map +1 -1
- package/dist/components/panels/PanelEmpty.js +1 -1
- package/dist/components/panels/PanelEmpty.js.map +1 -1
- package/dist/components/panels/PanelError.d.ts.map +1 -1
- package/dist/components/panels/PanelError.js +4 -1
- package/dist/components/panels/PanelError.js.map +1 -1
- package/dist/components/panels/PanelSkeleton.js +2 -2
- package/dist/components/panels/PanelSkeleton.js.map +1 -1
- package/dist/components/panels/RadialBarChart.js +1 -1
- package/dist/components/panels/RadialBarChart.js.map +1 -1
- package/dist/components/panels/ScatterChart.d.ts +15 -1
- package/dist/components/panels/ScatterChart.d.ts.map +1 -1
- package/dist/components/panels/ScatterChart.js +96 -26
- package/dist/components/panels/ScatterChart.js.map +1 -1
- package/dist/components/panels/Sparkline.d.ts +21 -0
- package/dist/components/panels/Sparkline.d.ts.map +1 -0
- package/dist/components/panels/Sparkline.js +53 -0
- package/dist/components/panels/Sparkline.js.map +1 -0
- package/dist/components/panels/StatPanel.d.ts +3 -1
- package/dist/components/panels/StatPanel.d.ts.map +1 -1
- package/dist/components/panels/StatPanel.js +33 -4
- package/dist/components/panels/StatPanel.js.map +1 -1
- package/dist/components/panels/TablePanel.d.ts +2 -1
- package/dist/components/panels/TablePanel.d.ts.map +1 -1
- package/dist/components/panels/TablePanel.js +96 -6
- package/dist/components/panels/TablePanel.js.map +1 -1
- package/dist/components/panels/VideoPanel.d.ts.map +1 -1
- package/dist/components/panels/VideoPanel.js +1 -1
- package/dist/components/panels/VideoPanel.js.map +1 -1
- package/dist/components/panels/nivo-theme.d.ts +1 -44
- package/dist/components/panels/nivo-theme.d.ts.map +1 -1
- package/dist/components/panels/nivo-theme.js +9 -104
- package/dist/components/panels/nivo-theme.js.map +1 -1
- package/dist/components/panels/semantic-colors.d.ts.map +1 -1
- package/dist/components/panels/semantic-colors.js +2 -39
- package/dist/components/panels/semantic-colors.js.map +1 -1
- package/dist/components/ui/Button.d.ts +1 -1
- package/dist/components/ui/Button.d.ts.map +1 -1
- package/dist/components/ui/Button.js +6 -9
- package/dist/components/ui/Button.js.map +1 -1
- package/dist/components/ui/Tabs.d.ts.map +1 -1
- package/dist/components/ui/Tabs.js +1 -1
- package/dist/components/ui/Tabs.js.map +1 -1
- package/dist/connectors/bigquery.d.ts.map +1 -1
- package/dist/connectors/bigquery.js +6 -1
- package/dist/connectors/bigquery.js.map +1 -1
- package/dist/connectors/postgres.d.ts.map +1 -1
- package/dist/connectors/postgres.js +3 -0
- package/dist/connectors/postgres.js.map +1 -1
- package/dist/connectors/redshift.d.ts.map +1 -1
- package/dist/connectors/redshift.js +3 -0
- package/dist/connectors/redshift.js.map +1 -1
- package/dist/contexts/NotificationContext.d.ts +10 -0
- package/dist/contexts/NotificationContext.d.ts.map +1 -0
- package/dist/contexts/NotificationContext.js +24 -0
- package/dist/contexts/NotificationContext.js.map +1 -0
- package/dist/filters/daterange.d.ts +1 -1
- package/dist/filters/daterange.d.ts.map +1 -1
- package/dist/filters/daterange.js +54 -9
- package/dist/filters/daterange.js.map +1 -1
- package/dist/filters/index.d.ts +2 -0
- package/dist/filters/index.d.ts.map +1 -1
- package/dist/filters/index.js +2 -0
- package/dist/filters/index.js.map +1 -1
- package/dist/filters/interval.d.ts +13 -0
- package/dist/filters/interval.d.ts.map +1 -0
- package/dist/filters/interval.js +40 -0
- package/dist/filters/interval.js.map +1 -0
- package/dist/filters/resolver.d.ts +1 -1
- package/dist/filters/resolver.d.ts.map +1 -1
- package/dist/filters/resolver.js +28 -2
- package/dist/filters/resolver.js.map +1 -1
- package/dist/flattenTabs.d.ts +8 -0
- package/dist/flattenTabs.d.ts.map +1 -0
- package/dist/flattenTabs.js +24 -0
- package/dist/flattenTabs.js.map +1 -0
- package/dist/formats.d.ts +1 -1
- package/dist/formats.d.ts.map +1 -1
- package/dist/formats.js +19 -9
- package/dist/formats.js.map +1 -1
- package/dist/hooks/useNotifications.d.ts +5 -0
- package/dist/hooks/useNotifications.d.ts.map +1 -0
- package/dist/hooks/useNotifications.js +48 -0
- package/dist/hooks/useNotifications.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/interpolation.d.ts +10 -0
- package/dist/interpolation.d.ts.map +1 -0
- package/dist/interpolation.js +64 -0
- package/dist/interpolation.js.map +1 -0
- package/dist/panels/conditional.d.ts +12 -0
- package/dist/panels/conditional.d.ts.map +1 -0
- package/dist/panels/conditional.js +90 -0
- package/dist/panels/conditional.js.map +1 -0
- package/dist/panels/index.d.ts +11 -0
- package/dist/panels/index.d.ts.map +1 -0
- package/dist/panels/index.js +19 -0
- package/dist/panels/index.js.map +1 -0
- package/dist/panels/mappings.d.ts +40 -0
- package/dist/panels/mappings.d.ts.map +1 -0
- package/dist/panels/mappings.js +83 -0
- package/dist/panels/mappings.js.map +1 -0
- package/dist/panels/overrides.d.ts +37 -0
- package/dist/panels/overrides.d.ts.map +1 -0
- package/dist/panels/overrides.js +57 -0
- package/dist/panels/overrides.js.map +1 -0
- package/dist/panels/threshold-layers.d.ts +18 -0
- package/dist/panels/threshold-layers.d.ts.map +1 -0
- package/dist/panels/threshold-layers.js +35 -0
- package/dist/panels/threshold-layers.js.map +1 -0
- package/dist/panels/thresholds.d.ts +36 -0
- package/dist/panels/thresholds.d.ts.map +1 -0
- package/dist/panels/thresholds.js +81 -0
- package/dist/panels/thresholds.js.map +1 -0
- package/dist/schemas/annotations.d.ts +34 -0
- package/dist/schemas/annotations.d.ts.map +1 -0
- package/dist/schemas/annotations.js +19 -0
- package/dist/schemas/annotations.js.map +1 -0
- package/dist/schemas/config.d.ts +1 -0
- package/dist/schemas/config.d.ts.map +1 -1
- package/dist/schemas/config.js +1 -0
- package/dist/schemas/config.js.map +1 -1
- package/dist/schemas/dashboard.d.ts +5861 -235
- package/dist/schemas/dashboard.d.ts.map +1 -1
- package/dist/schemas/dashboard.js +173 -10
- package/dist/schemas/dashboard.js.map +1 -1
- package/dist/schemas/index.d.ts +6 -1
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +6 -1
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/mappings.d.ts +46 -0
- package/dist/schemas/mappings.d.ts.map +1 -0
- package/dist/schemas/mappings.js +46 -0
- package/dist/schemas/mappings.js.map +1 -0
- package/dist/schemas/overrides.d.ts +77 -0
- package/dist/schemas/overrides.d.ts.map +1 -0
- package/dist/schemas/overrides.js +38 -0
- package/dist/schemas/overrides.js.map +1 -0
- package/dist/schemas/theme.d.ts +89 -7
- package/dist/schemas/theme.d.ts.map +1 -1
- package/dist/schemas/theme.js +40 -24
- package/dist/schemas/theme.js.map +1 -1
- package/dist/schemas/thresholds.d.ts +19 -0
- package/dist/schemas/thresholds.d.ts.map +1 -0
- package/dist/schemas/thresholds.js +31 -0
- package/dist/schemas/thresholds.js.map +1 -0
- package/dist/schemas/transforms.d.ts +54 -0
- package/dist/schemas/transforms.d.ts.map +1 -0
- package/dist/schemas/transforms.js +51 -0
- package/dist/schemas/transforms.js.map +1 -0
- package/dist/startup/sql-lint.d.ts.map +1 -1
- package/dist/startup/sql-lint.js +3 -2
- package/dist/startup/sql-lint.js.map +1 -1
- package/dist/theme/builtin.d.ts.map +1 -1
- package/dist/theme/builtin.js +56 -62
- package/dist/theme/builtin.js.map +1 -1
- package/dist/theme/colors.d.ts +11 -0
- package/dist/theme/colors.d.ts.map +1 -0
- package/dist/theme/colors.js +71 -0
- package/dist/theme/colors.js.map +1 -0
- package/dist/theme/context.d.ts.map +1 -1
- package/dist/theme/context.js +16 -3
- package/dist/theme/context.js.map +1 -1
- package/dist/theme/loader-export.d.ts +1 -1
- package/dist/theme/loader-export.d.ts.map +1 -1
- package/dist/theme/loader-export.js +1 -1
- package/dist/theme/loader-export.js.map +1 -1
- package/dist/theme/loader.d.ts +8 -3
- package/dist/theme/loader.d.ts.map +1 -1
- package/dist/theme/loader.js +24 -13
- package/dist/theme/loader.js.map +1 -1
- package/dist/transforms/computed.d.ts +11 -0
- package/dist/transforms/computed.d.ts.map +1 -0
- package/dist/transforms/computed.js +24 -0
- package/dist/transforms/computed.js.map +1 -0
- package/dist/transforms/engine.d.ts +17 -0
- package/dist/transforms/engine.d.ts.map +1 -0
- package/dist/transforms/engine.js +65 -0
- package/dist/transforms/engine.js.map +1 -0
- package/dist/transforms/expression.d.ts +9 -0
- package/dist/transforms/expression.d.ts.map +1 -0
- package/dist/transforms/expression.js +306 -0
- package/dist/transforms/expression.js.map +1 -0
- package/dist/transforms/filter.d.ts +11 -0
- package/dist/transforms/filter.d.ts.map +1 -0
- package/dist/transforms/filter.js +10 -0
- package/dist/transforms/filter.js.map +1 -0
- package/dist/transforms/index.d.ts +10 -0
- package/dist/transforms/index.d.ts.map +1 -0
- package/dist/transforms/index.js +9 -0
- package/dist/transforms/index.js.map +1 -0
- package/dist/transforms/limit.d.ts +11 -0
- package/dist/transforms/limit.d.ts.map +1 -0
- package/dist/transforms/limit.js +4 -0
- package/dist/transforms/limit.js.map +1 -0
- package/dist/transforms/percentage.d.ts +11 -0
- package/dist/transforms/percentage.d.ts.map +1 -0
- package/dist/transforms/percentage.js +25 -0
- package/dist/transforms/percentage.js.map +1 -0
- package/dist/transforms/rename.d.ts +11 -0
- package/dist/transforms/rename.d.ts.map +1 -0
- package/dist/transforms/rename.js +17 -0
- package/dist/transforms/rename.js.map +1 -0
- package/dist/transforms/sort.d.ts +11 -0
- package/dist/transforms/sort.d.ts.map +1 -0
- package/dist/transforms/sort.js +21 -0
- package/dist/transforms/sort.js.map +1 -0
- package/dist/types/config-error.d.ts +1 -1
- package/dist/types/config-error.d.ts.map +1 -1
- package/dist/types/notification.d.ts +19 -0
- package/dist/types/notification.d.ts.map +1 -0
- package/dist/types/notification.js +15 -0
- package/dist/types/notification.js.map +1 -0
- package/package.json +12 -2
|
@@ -17,11 +17,16 @@ import { ChevronUp, ChevronDown } from "lucide-react";
|
|
|
17
17
|
import { formatValue } from "../../formats";
|
|
18
18
|
import { useTheme } from "../../theme/context";
|
|
19
19
|
import { useLocale } from "../../locale/context";
|
|
20
|
-
|
|
20
|
+
import { resolveThresholdColor, resolveSemanticHex } from "../../panels/thresholds";
|
|
21
|
+
import { resolveOverrides } from "../../panels/overrides";
|
|
22
|
+
import { applyMappings } from "../../panels/mappings";
|
|
23
|
+
import { evaluateConditional } from "../../panels/conditional";
|
|
24
|
+
import { DataLinkIcon, resolveDataLinks } from "./DataLinks";
|
|
25
|
+
function formatCell(value, format, locale = "en-US", decimals) {
|
|
21
26
|
if (value === null || value === undefined)
|
|
22
27
|
return "—";
|
|
23
28
|
if (format)
|
|
24
|
-
return formatValue(value, format, locale);
|
|
29
|
+
return formatValue(value, format, locale, decimals);
|
|
25
30
|
const str = String(value);
|
|
26
31
|
// Auto-detect ISO date strings and format them
|
|
27
32
|
if (/^\d{4}-\d{2}-\d{2}T/.test(str)) {
|
|
@@ -38,14 +43,35 @@ function formatCell(value, format, locale = "en-US") {
|
|
|
38
43
|
}
|
|
39
44
|
return str;
|
|
40
45
|
}
|
|
41
|
-
export function TablePanel({ panel, data }) {
|
|
46
|
+
export function TablePanel({ panel, data, filterValues = {} }) {
|
|
42
47
|
const theme = useTheme();
|
|
43
48
|
const locale = useLocale();
|
|
44
49
|
const table = panel.table;
|
|
50
|
+
const dataLinks = panel.data_links ?? [];
|
|
45
51
|
const dataColumns = data.columns;
|
|
46
52
|
const columns = table?.columns ??
|
|
47
53
|
dataColumns.map((c) => ({ key: c.name, label: c.name }));
|
|
48
54
|
const pageSize = table?.page_size ?? 25;
|
|
55
|
+
// Enrichment config from panel YAML
|
|
56
|
+
const overrides = panel.overrides;
|
|
57
|
+
const panelThresholds = panel.thresholds;
|
|
58
|
+
const mappings = panel.mappings;
|
|
59
|
+
// Pre-resolve overrides for each column
|
|
60
|
+
const columnOverrides = {};
|
|
61
|
+
if (overrides) {
|
|
62
|
+
for (const col of columns) {
|
|
63
|
+
columnOverrides[col.key] = resolveOverrides(col.key, overrides);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Pre-resolve conditional rules for each column from table config
|
|
67
|
+
const columnConditionals = {};
|
|
68
|
+
if (table?.columns) {
|
|
69
|
+
for (const col of table.columns) {
|
|
70
|
+
if (col.conditional) {
|
|
71
|
+
columnConditionals[col.key] = col.conditional;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
49
75
|
const [sortKey, setSortKey] = useState(table?.sort_by ?? columns[0]?.key);
|
|
50
76
|
const [sortDir, setSortDir] = useState(table?.sort_dir ?? "DESC");
|
|
51
77
|
const [page, setPage] = useState(0);
|
|
@@ -63,7 +89,6 @@ export function TablePanel({ panel, data }) {
|
|
|
63
89
|
const sorted = [...rows].sort((a, b) => {
|
|
64
90
|
const aVal = a[sortKey];
|
|
65
91
|
const bVal = b[sortKey];
|
|
66
|
-
// pg returns bigint/numeric columns as strings; coerce to number when possible
|
|
67
92
|
const aNum = Number(aVal);
|
|
68
93
|
const bNum = Number(bVal);
|
|
69
94
|
const cmp = !isNaN(aNum) && !isNaN(bNum)
|
|
@@ -73,7 +98,72 @@ export function TablePanel({ panel, data }) {
|
|
|
73
98
|
});
|
|
74
99
|
const paged = sorted.slice(page * pageSize, (page + 1) * pageSize);
|
|
75
100
|
const totalPages = Math.ceil(sorted.length / pageSize);
|
|
76
|
-
|
|
77
|
-
|
|
101
|
+
/**
|
|
102
|
+
* Resolve the display text and cell style for a given cell value.
|
|
103
|
+
*/
|
|
104
|
+
function resolveCellDisplay(value, colKey, colFormat, colDecimals) {
|
|
105
|
+
const ovr = columnOverrides[colKey];
|
|
106
|
+
const effectiveFormat = ovr?.format ?? colFormat;
|
|
107
|
+
const effectiveDecimals = ovr?.decimals ?? colDecimals;
|
|
108
|
+
const effectiveThresholds = ovr?.thresholds ?? panelThresholds;
|
|
109
|
+
// Apply value mappings first
|
|
110
|
+
const mapped = applyMappings(value, mappings);
|
|
111
|
+
if (mapped) {
|
|
112
|
+
const mappedBg = mapped.color
|
|
113
|
+
? resolveSemanticHex(mapped.color, theme)
|
|
114
|
+
: undefined;
|
|
115
|
+
return {
|
|
116
|
+
text: mapped.text,
|
|
117
|
+
bgColor: mappedBg ? `${mappedBg}18` : undefined,
|
|
118
|
+
textColor: mappedBg,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
// Evaluate conditional formatting rules (AFTER mappings, BEFORE thresholds)
|
|
122
|
+
const condRules = columnConditionals[colKey];
|
|
123
|
+
const condStyle = evaluateConditional(value, condRules);
|
|
124
|
+
if (condStyle) {
|
|
125
|
+
const condBg = condStyle.background
|
|
126
|
+
? resolveSemanticHex(condStyle.background, theme)
|
|
127
|
+
: undefined;
|
|
128
|
+
const condColor = condStyle.color
|
|
129
|
+
? resolveSemanticHex(condStyle.color, theme)
|
|
130
|
+
: undefined;
|
|
131
|
+
return {
|
|
132
|
+
text: formatCell(value, effectiveFormat, locale, effectiveDecimals),
|
|
133
|
+
bgColor: condBg ? `${condBg}18` : undefined,
|
|
134
|
+
textColor: condColor,
|
|
135
|
+
fontWeight: condStyle.weight === "bold" ? "bold" : undefined,
|
|
136
|
+
fontStyle: condStyle.italic ? "italic" : undefined,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
// Apply threshold coloring
|
|
140
|
+
const thresholdColorName = resolveThresholdColor(value, effectiveThresholds);
|
|
141
|
+
const thresholdHex = thresholdColorName
|
|
142
|
+
? resolveSemanticHex(thresholdColorName, theme)
|
|
143
|
+
: undefined;
|
|
144
|
+
// Apply override fixed color
|
|
145
|
+
const fixedColor = ovr?.color
|
|
146
|
+
? resolveSemanticHex(ovr.color, theme)
|
|
147
|
+
: undefined;
|
|
148
|
+
return {
|
|
149
|
+
text: formatCell(value, effectiveFormat, locale, effectiveDecimals),
|
|
150
|
+
bgColor: thresholdHex ? `${thresholdHex}18` : undefined,
|
|
151
|
+
textColor: fixedColor ?? thresholdHex,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
return (_jsxs("div", { className: "overflow-x-auto", children: [_jsxs("table", { className: "w-full text-sm", children: [_jsx("thead", { children: _jsxs("tr", { className: "border-b", style: { borderColor: theme.panel.border }, children: [columns.map((col) => {
|
|
155
|
+
const ovr = columnOverrides[col.key];
|
|
156
|
+
const displayLabel = ovr?.label ?? col.label;
|
|
157
|
+
return (_jsx("th", { className: `py-2 px-3 uppercase tracking-wide font-medium cursor-pointer select-none hover:opacity-80 transition ${col.align === "right" ? "text-right" : "text-left"}`, style: { color: theme.typography.label }, onClick: () => toggleSort(col.key), children: _jsxs("span", { className: "inline-flex items-center gap-1", children: [displayLabel, sortKey === col.key &&
|
|
158
|
+
(sortDir === "ASC" ? (_jsx(ChevronUp, { className: "w-3 h-3" })) : (_jsx(ChevronDown, { className: "w-3 h-3" })))] }) }, col.key));
|
|
159
|
+
}), dataLinks.length > 0 && (_jsx("th", { className: "py-2 px-3 uppercase tracking-wide font-medium text-right", style: { color: theme.typography.label }, children: "Links" }))] }) }), _jsx("tbody", { children: paged.map((row, i) => (_jsxs("tr", { className: "border-b opacity-90 hover:opacity-100", style: { borderColor: theme.panel.border }, children: [columns.map((col) => {
|
|
160
|
+
const cell = resolveCellDisplay(row[col.key], col.key, col.format, col.decimals);
|
|
161
|
+
return (_jsx("td", { className: `py-2.5 px-3 ${col.align === "right" ? "text-right tabular-nums" : ""} transition-colors duration-200`, style: {
|
|
162
|
+
backgroundColor: cell.bgColor,
|
|
163
|
+
color: cell.textColor ?? theme.filters.text,
|
|
164
|
+
fontWeight: cell.fontWeight,
|
|
165
|
+
fontStyle: cell.fontStyle,
|
|
166
|
+
}, children: cell.text }, col.key));
|
|
167
|
+
}), dataLinks.length > 0 && (_jsx("td", { className: `py-2.5 px-3 text-right`, children: _jsx(DataLinkIcon, { links: resolveDataLinks(dataLinks, row, filterValues) }) }))] }, i))) })] }), sorted.length > pageSize && (_jsxs("div", { className: "mt-3 flex justify-between items-center uppercase tracking-wide", style: { color: theme.typography.label }, children: [_jsxs("span", { children: ["Showing ", page * pageSize + 1, "-", Math.min((page + 1) * pageSize, sorted.length), " of ", sorted.length, " ", "results"] }), _jsxs("div", { className: "flex gap-2", children: [_jsx("button", { disabled: page === 0, onClick: () => setPage((p) => p - 1), className: "disabled:opacity-30 hover:opacity-80 transition", children: "\u2190 Prev" }), _jsx("button", { disabled: page >= totalPages - 1, onClick: () => setPage((p) => p + 1), className: "disabled:opacity-30 hover:opacity-80 transition", children: "Next \u2192" })] })] }))] }));
|
|
78
168
|
}
|
|
79
169
|
//# sourceMappingURL=TablePanel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TablePanel.js","sourceRoot":"","sources":["../../../src/components/panels/TablePanel.tsx"],"names":[],"mappings":";AAAA,iCAAiC;AACjC,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,+DAA+D;AAC/D,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"TablePanel.js","sourceRoot":"","sources":["../../../src/components/panels/TablePanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VideoPanel.d.ts","sourceRoot":"","sources":["../../../src/components/panels/VideoPanel.tsx"],"names":[],"mappings":"AAgBA,UAAU,eAAe;IACvB,KAAK,EAAE;QACL,KAAK,CAAC,EAAE;YACN,GAAG,CAAC,EAAE,MAAM,CAAC;YACb,QAAQ,CAAC,EAAE,OAAO,CAAC;YACnB,IAAI,CAAC,EAAE,OAAO,CAAC;YACf,KAAK,CAAC,EAAE,OAAO,CAAC;YAChB,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;SACpB,CAAC;KACH,CAAC;CACH;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"VideoPanel.d.ts","sourceRoot":"","sources":["../../../src/components/panels/VideoPanel.tsx"],"names":[],"mappings":"AAgBA,UAAU,eAAe;IACvB,KAAK,EAAE;QACL,KAAK,CAAC,EAAE;YACN,GAAG,CAAC,EAAE,MAAM,CAAC;YACb,QAAQ,CAAC,EAAE,OAAO,CAAC;YACnB,IAAI,CAAC,EAAE,OAAO,CAAC;YACf,KAAK,CAAC,EAAE,OAAO,CAAC;YAChB,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;SACpB,CAAC;KACH,CAAC;CACH;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,eAAe,2CAkCpD"}
|
|
@@ -18,7 +18,7 @@ export function VideoPanel({ panel }) {
|
|
|
18
18
|
const cfg = panel.video ?? {};
|
|
19
19
|
const { src, autoplay = false, loop = false, muted = false, poster, controls = true, } = cfg;
|
|
20
20
|
if (!src) {
|
|
21
|
-
return (_jsx("div", { className:
|
|
21
|
+
return (_jsx("div", { className: "flex items-center justify-center h-full", style: { color: theme.typography.muted }, children: "No video source configured" }));
|
|
22
22
|
}
|
|
23
23
|
return (_jsx("video", { src: src, autoPlay: autoplay, loop: loop, muted: muted, poster: poster, controls: controls, className: "w-full h-full object-contain" }));
|
|
24
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VideoPanel.js","sourceRoot":"","sources":["../../../src/components/panels/VideoPanel.tsx"],"names":[],"mappings":";AAAA,iCAAiC;AACjC,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,+DAA+D;AAC/D,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAe/C,MAAM,UAAU,UAAU,CAAC,EAAE,KAAK,EAAmB;IACnD,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;IAC9B,MAAM,EACJ,GAAG,EACH,QAAQ,GAAG,KAAK,EAChB,IAAI,GAAG,KAAK,EACZ,KAAK,GAAG,KAAK,EACb,MAAM,EACN,QAAQ,GAAG,IAAI,GAChB,GAAG,GAAG,CAAC;IAER,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CACL,cACE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"VideoPanel.js","sourceRoot":"","sources":["../../../src/components/panels/VideoPanel.tsx"],"names":[],"mappings":";AAAA,iCAAiC;AACjC,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,+DAA+D;AAC/D,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAe/C,MAAM,UAAU,UAAU,CAAC,EAAE,KAAK,EAAmB;IACnD,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;IAC9B,MAAM,EACJ,GAAG,EACH,QAAQ,GAAG,KAAK,EAChB,IAAI,GAAG,KAAK,EACZ,KAAK,GAAG,KAAK,EACb,MAAM,EACN,QAAQ,GAAG,IAAI,GAChB,GAAG,GAAG,CAAC;IAER,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CACL,cACE,SAAS,EAAC,yCAAyC,EACnD,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,2CAGpC,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,gBACE,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAC,8BAA8B,GACxC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Theme } from "../../schemas/theme";
|
|
2
2
|
/**
|
|
3
3
|
* Build a Nivo theme configuration object from a Panoboard Theme.
|
|
4
|
-
*
|
|
4
|
+
* Theme values are raw hex strings — no extraction needed.
|
|
5
5
|
*/
|
|
6
6
|
export declare function buildNivoTheme(theme: Theme): {
|
|
7
7
|
text: {
|
|
@@ -49,47 +49,4 @@ export declare function buildNivoTheme(theme: Theme): {
|
|
|
49
49
|
* Get the chart color palette from a Panoboard Theme.
|
|
50
50
|
*/
|
|
51
51
|
export declare function getChartPalette(theme: Theme): string[];
|
|
52
|
-
export declare const nivoDarkTheme: {
|
|
53
|
-
text: {
|
|
54
|
-
fontSize: number;
|
|
55
|
-
fill: string;
|
|
56
|
-
};
|
|
57
|
-
axis: {
|
|
58
|
-
ticks: {
|
|
59
|
-
text: {
|
|
60
|
-
fill: string;
|
|
61
|
-
fontSize: number;
|
|
62
|
-
};
|
|
63
|
-
};
|
|
64
|
-
legend: {
|
|
65
|
-
text: {
|
|
66
|
-
fill: string;
|
|
67
|
-
fontSize: number;
|
|
68
|
-
};
|
|
69
|
-
};
|
|
70
|
-
};
|
|
71
|
-
grid: {
|
|
72
|
-
line: {
|
|
73
|
-
stroke: string;
|
|
74
|
-
strokeWidth: number;
|
|
75
|
-
};
|
|
76
|
-
};
|
|
77
|
-
tooltip: {
|
|
78
|
-
container: {
|
|
79
|
-
background: string;
|
|
80
|
-
border: string;
|
|
81
|
-
borderRadius: number;
|
|
82
|
-
padding: string;
|
|
83
|
-
color: string;
|
|
84
|
-
fontSize: number;
|
|
85
|
-
};
|
|
86
|
-
};
|
|
87
|
-
legends: {
|
|
88
|
-
text: {
|
|
89
|
-
fill: string;
|
|
90
|
-
fontSize: number;
|
|
91
|
-
};
|
|
92
|
-
};
|
|
93
|
-
};
|
|
94
|
-
export declare const PALETTE: string[];
|
|
95
52
|
//# sourceMappingURL=nivo-theme.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nivo-theme.d.ts","sourceRoot":"","sources":["../../../src/components/panels/nivo-theme.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"nivo-theme.d.ts","sourceRoot":"","sources":["../../../src/components/panels/nivo-theme.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoB1C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,CAEtD"}
|
|
@@ -11,94 +11,29 @@
|
|
|
11
11
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
12
|
// See the License for the specific language governing permissions and
|
|
13
13
|
// limitations under the License.
|
|
14
|
-
/**
|
|
15
|
-
* Extract a hex color from a Tailwind arbitrary value class.
|
|
16
|
-
* e.g. "text-[#f8f8f2]" → "#f8f8f2", "bg-[#282a36]" → "#282a36"
|
|
17
|
-
* Falls back to the provided default if no hex is found.
|
|
18
|
-
*/
|
|
19
|
-
function extractHex(twClass, fallback) {
|
|
20
|
-
const match = twClass.match(/#[0-9a-fA-F]{3,8}/);
|
|
21
|
-
if (match)
|
|
22
|
-
return match[0];
|
|
23
|
-
// Map common named Tailwind colors to hex values
|
|
24
|
-
const namedColors = {
|
|
25
|
-
"slate-50": "#f8fafc",
|
|
26
|
-
"slate-100": "#f1f5f9",
|
|
27
|
-
"slate-200": "#e2e8f0",
|
|
28
|
-
"slate-300": "#cbd5e1",
|
|
29
|
-
"slate-400": "#94a3b8",
|
|
30
|
-
"slate-500": "#64748b",
|
|
31
|
-
"slate-600": "#475569",
|
|
32
|
-
"slate-700": "#334155",
|
|
33
|
-
"slate-800": "#1e293b",
|
|
34
|
-
"slate-900": "#0f172a",
|
|
35
|
-
"slate-950": "#020617",
|
|
36
|
-
"gray-50": "#f9fafb",
|
|
37
|
-
"gray-100": "#f3f4f6",
|
|
38
|
-
"gray-200": "#e5e7eb",
|
|
39
|
-
"gray-300": "#d1d5db",
|
|
40
|
-
"gray-400": "#9ca3af",
|
|
41
|
-
"gray-500": "#6b7280",
|
|
42
|
-
"gray-600": "#4b5563",
|
|
43
|
-
"gray-700": "#374151",
|
|
44
|
-
"gray-800": "#1f2937",
|
|
45
|
-
"gray-900": "#111827",
|
|
46
|
-
"gray-950": "#030712",
|
|
47
|
-
"zinc-50": "#fafafa",
|
|
48
|
-
"zinc-100": "#f4f4f5",
|
|
49
|
-
"zinc-200": "#e4e4e7",
|
|
50
|
-
"zinc-300": "#d4d4d8",
|
|
51
|
-
"zinc-400": "#a1a1aa",
|
|
52
|
-
"zinc-500": "#71717a",
|
|
53
|
-
"zinc-600": "#52525b",
|
|
54
|
-
"zinc-700": "#3f3f46",
|
|
55
|
-
"zinc-800": "#27272a",
|
|
56
|
-
"zinc-900": "#18181b",
|
|
57
|
-
"zinc-950": "#09090b",
|
|
58
|
-
white: "#ffffff",
|
|
59
|
-
black: "#000000",
|
|
60
|
-
"indigo-300": "#a5b4fc",
|
|
61
|
-
"indigo-400": "#818cf8",
|
|
62
|
-
"indigo-500": "#6366f1",
|
|
63
|
-
"red-400": "#f87171",
|
|
64
|
-
"emerald-400": "#34d399",
|
|
65
|
-
"amber-400": "#fbbf24",
|
|
66
|
-
};
|
|
67
|
-
for (const [name, hex] of Object.entries(namedColors)) {
|
|
68
|
-
if (twClass.includes(name))
|
|
69
|
-
return hex;
|
|
70
|
-
}
|
|
71
|
-
return fallback;
|
|
72
|
-
}
|
|
73
14
|
/**
|
|
74
15
|
* Build a Nivo theme configuration object from a Panoboard Theme.
|
|
75
|
-
*
|
|
16
|
+
* Theme values are raw hex strings — no extraction needed.
|
|
76
17
|
*/
|
|
77
18
|
export function buildNivoTheme(theme) {
|
|
78
|
-
const axisText = extractHex(theme.typography.label, "#94a3b8");
|
|
79
|
-
const axisLegend = extractHex(theme.typography.muted, "#94a3b8");
|
|
80
|
-
const gridLine = extractHex(theme.surfaces.panelBorder, "#1e293b");
|
|
81
|
-
const tooltipBg = extractHex(theme.surfaces.panel, "#141b2d");
|
|
82
|
-
const tooltipBorder = extractHex(theme.surfaces.panelBorder, "#334155");
|
|
83
|
-
const tooltipText = extractHex(theme.typography.panelTitle, "#f1f5f9");
|
|
84
19
|
return {
|
|
85
|
-
text: { fontSize: 11, fill:
|
|
20
|
+
text: { fontSize: 11, fill: theme.typography.label },
|
|
86
21
|
axis: {
|
|
87
|
-
ticks: { text: { fill:
|
|
88
|
-
legend: { text: { fill:
|
|
22
|
+
ticks: { text: { fill: theme.typography.label, fontSize: 11 } },
|
|
23
|
+
legend: { text: { fill: theme.typography.muted, fontSize: 12 } },
|
|
89
24
|
},
|
|
90
|
-
grid: { line: { stroke:
|
|
25
|
+
grid: { line: { stroke: theme.panel.border, strokeWidth: 1 } },
|
|
91
26
|
tooltip: {
|
|
92
27
|
container: {
|
|
93
|
-
background:
|
|
94
|
-
border: `1px solid ${
|
|
28
|
+
background: theme.panel.surface,
|
|
29
|
+
border: `1px solid ${theme.panel.border}`,
|
|
95
30
|
borderRadius: 8,
|
|
96
31
|
padding: "8px 12px",
|
|
97
|
-
color:
|
|
32
|
+
color: theme.panel.title,
|
|
98
33
|
fontSize: 12,
|
|
99
34
|
},
|
|
100
35
|
},
|
|
101
|
-
legends: { text: { fill:
|
|
36
|
+
legends: { text: { fill: theme.typography.muted, fontSize: 11 } },
|
|
102
37
|
};
|
|
103
38
|
}
|
|
104
39
|
/**
|
|
@@ -107,34 +42,4 @@ export function buildNivoTheme(theme) {
|
|
|
107
42
|
export function getChartPalette(theme) {
|
|
108
43
|
return theme.palette;
|
|
109
44
|
}
|
|
110
|
-
// Legacy exports for backwards compatibility during migration
|
|
111
|
-
export const nivoDarkTheme = {
|
|
112
|
-
text: { fontSize: 11, fill: "#94a3b8" },
|
|
113
|
-
axis: {
|
|
114
|
-
ticks: { text: { fill: "#64748b", fontSize: 11 } },
|
|
115
|
-
legend: { text: { fill: "#94a3b8", fontSize: 12 } },
|
|
116
|
-
},
|
|
117
|
-
grid: { line: { stroke: "#1e293b", strokeWidth: 1 } },
|
|
118
|
-
tooltip: {
|
|
119
|
-
container: {
|
|
120
|
-
background: "#141b2d",
|
|
121
|
-
border: "1px solid #334155",
|
|
122
|
-
borderRadius: 8,
|
|
123
|
-
padding: "8px 12px",
|
|
124
|
-
color: "#f1f5f9",
|
|
125
|
-
fontSize: 12,
|
|
126
|
-
},
|
|
127
|
-
},
|
|
128
|
-
legends: { text: { fill: "#94a3b8", fontSize: 11 } },
|
|
129
|
-
};
|
|
130
|
-
export const PALETTE = [
|
|
131
|
-
"#818cf8",
|
|
132
|
-
"#34d399",
|
|
133
|
-
"#f59e0b",
|
|
134
|
-
"#fb7185",
|
|
135
|
-
"#22d3ee",
|
|
136
|
-
"#a78bfa",
|
|
137
|
-
"#2dd4bf",
|
|
138
|
-
"#fb923c",
|
|
139
|
-
];
|
|
140
45
|
//# sourceMappingURL=nivo-theme.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nivo-theme.js","sourceRoot":"","sources":["../../../src/components/panels/nivo-theme.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,+DAA+D;AAC/D,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAIjC
|
|
1
|
+
{"version":3,"file":"nivo-theme.js","sourceRoot":"","sources":["../../../src/components/panels/nivo-theme.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,+DAA+D;AAC/D,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAIjC;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,KAAY;IACzC,OAAO;QACL,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE;QACpD,IAAI,EAAE;YACJ,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE;YAC/D,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE;SACjE;QACD,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE;QAC9D,OAAO,EAAE;YACP,SAAS,EAAE;gBACT,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO;gBAC/B,MAAM,EAAE,aAAa,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE;gBACzC,YAAY,EAAE,CAAC;gBACf,OAAO,EAAE,UAAU;gBACnB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK;gBACxB,QAAQ,EAAE,EAAE;aACb;SACF;QACD,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE;KAClE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAY;IAC1C,OAAO,KAAK,CAAC,OAAO,CAAC;AACvB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic-colors.d.ts","sourceRoot":"","sources":["../../../src/components/panels/semantic-colors.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"semantic-colors.d.ts","sourceRoot":"","sources":["../../../src/components/panels/semantic-colors.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AA6CjD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,KAAK,GACX,MAAM,GAAG,SAAS,CAKpB"}
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* to their semantic theme color. Returns a hex color or undefined if
|
|
17
17
|
* the value has no semantic meaning.
|
|
18
18
|
*
|
|
19
|
-
*
|
|
19
|
+
* Theme values are raw hex strings — no extraction needed.
|
|
20
20
|
*/
|
|
21
21
|
const SEMANTIC_MAP = {
|
|
22
22
|
// Negative / danger
|
|
@@ -49,42 +49,6 @@ const SEMANTIC_MAP = {
|
|
|
49
49
|
medium: "neutral",
|
|
50
50
|
open: "neutral",
|
|
51
51
|
};
|
|
52
|
-
const HEX_PATTERN = /#[0-9a-fA-F]{3,8}/;
|
|
53
|
-
const NAMED_COLORS = {
|
|
54
|
-
"emerald-400": "#34d399",
|
|
55
|
-
"emerald-500": "#10b981",
|
|
56
|
-
"emerald-600": "#059669",
|
|
57
|
-
"green-400": "#4ade80",
|
|
58
|
-
"green-500": "#22c55e",
|
|
59
|
-
"red-400": "#f87171",
|
|
60
|
-
"red-500": "#ef4444",
|
|
61
|
-
"red-600": "#dc2626",
|
|
62
|
-
"rose-400": "#fb7185",
|
|
63
|
-
"rose-500": "#f43f5e",
|
|
64
|
-
"amber-400": "#fbbf24",
|
|
65
|
-
"amber-500": "#f59e0b",
|
|
66
|
-
"amber-600": "#d97706",
|
|
67
|
-
"orange-400": "#fb923c",
|
|
68
|
-
"orange-500": "#f97316",
|
|
69
|
-
"yellow-400": "#facc15",
|
|
70
|
-
"yellow-500": "#eab308",
|
|
71
|
-
"slate-400": "#94a3b8",
|
|
72
|
-
"slate-500": "#64748b",
|
|
73
|
-
"gray-400": "#9ca3af",
|
|
74
|
-
"gray-500": "#6b7280",
|
|
75
|
-
"blue-400": "#60a5fa",
|
|
76
|
-
"blue-500": "#3b82f6",
|
|
77
|
-
};
|
|
78
|
-
function extractHex(twClass) {
|
|
79
|
-
const hexMatch = twClass.match(HEX_PATTERN);
|
|
80
|
-
if (hexMatch)
|
|
81
|
-
return hexMatch[0];
|
|
82
|
-
for (const [name, hex] of Object.entries(NAMED_COLORS)) {
|
|
83
|
-
if (twClass.includes(name))
|
|
84
|
-
return hex;
|
|
85
|
-
}
|
|
86
|
-
return undefined;
|
|
87
|
-
}
|
|
88
52
|
/**
|
|
89
53
|
* Given a series value string and the current theme, returns a hex color
|
|
90
54
|
* if the value has a known semantic meaning, or undefined otherwise.
|
|
@@ -94,7 +58,6 @@ export function extractSemanticColor(value, theme) {
|
|
|
94
58
|
const statusKey = SEMANTIC_MAP[key];
|
|
95
59
|
if (!statusKey)
|
|
96
60
|
return undefined;
|
|
97
|
-
|
|
98
|
-
return extractHex(twClass);
|
|
61
|
+
return theme.status[statusKey];
|
|
99
62
|
}
|
|
100
63
|
//# sourceMappingURL=semantic-colors.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic-colors.js","sourceRoot":"","sources":["../../../src/components/panels/semantic-colors.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,+DAA+D;AAC/D,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAIjC;;;;;;GAMG;AAEH,MAAM,YAAY,GAA0C;IAC1D,oBAAoB;IACpB,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,UAAU;IAClB,OAAO,EAAE,UAAU;IACnB,IAAI,EAAE,UAAU;IAChB,MAAM,EAAE,UAAU;IAElB,UAAU;IACV,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,SAAS;IACf,QAAQ,EAAE,SAAS;IACnB,WAAW,EAAE,SAAS;IACtB,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,SAAS;IAEf,qBAAqB;IACrB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,EAAE,EAAE,UAAU;IACd,EAAE,EAAE,UAAU;IACd,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,UAAU;IACrB,MAAM,EAAE,UAAU;IAClB,GAAG,EAAE,UAAU;IAEf,UAAU;IACV,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,SAAS;IACjB,IAAI,EAAE,SAAS;CAChB,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"semantic-colors.js","sourceRoot":"","sources":["../../../src/components/panels/semantic-colors.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,+DAA+D;AAC/D,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAIjC;;;;;;GAMG;AAEH,MAAM,YAAY,GAA0C;IAC1D,oBAAoB;IACpB,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,UAAU;IAClB,OAAO,EAAE,UAAU;IACnB,IAAI,EAAE,UAAU;IAChB,MAAM,EAAE,UAAU;IAElB,UAAU;IACV,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,SAAS;IACf,QAAQ,EAAE,SAAS;IACnB,WAAW,EAAE,SAAS;IACtB,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,SAAS;IAEf,qBAAqB;IACrB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,EAAE,EAAE,UAAU;IACd,EAAE,EAAE,UAAU;IACd,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,UAAU;IACrB,MAAM,EAAE,UAAU;IAClB,GAAG,EAAE,UAAU;IAEf,UAAU;IACV,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,SAAS;IACjB,IAAI,EAAE,SAAS;CAChB,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAAa,EACb,KAAY;IAEZ,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IACjC,OAAO,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ButtonHTMLAttributes } from "react";
|
|
2
|
-
export type ButtonVariant = "primary" | "secondary" | "
|
|
2
|
+
export type ButtonVariant = "primary" | "secondary" | "ghost";
|
|
3
3
|
export type ButtonSize = "sm" | "md" | "lg";
|
|
4
4
|
export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
5
5
|
variant?: ButtonVariant;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Button.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Button.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAElD,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;AAC9D,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5C,MAAM,WAAW,WAAY,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IAC1E,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAcD,eAAO,MAAM,MAAM,2GAsBlB,CAAC"}
|
|
@@ -13,22 +13,19 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
13
13
|
// See the License for the specific language governing permissions and
|
|
14
14
|
// limitations under the License.
|
|
15
15
|
import { forwardRef } from "react";
|
|
16
|
-
import { useTheme } from "../../theme/context";
|
|
17
16
|
const sizeClasses = {
|
|
18
17
|
sm: "px-3 py-1.5 text-xs",
|
|
19
18
|
md: "px-4 py-2 text-sm",
|
|
20
19
|
lg: "px-6 py-3 text-base",
|
|
21
20
|
};
|
|
21
|
+
const variantClasses = {
|
|
22
|
+
primary: "btn-primary",
|
|
23
|
+
secondary: "btn-secondary",
|
|
24
|
+
ghost: "btn-ghost",
|
|
25
|
+
};
|
|
22
26
|
export const Button = forwardRef(function Button({ variant = "primary", size = "md", className = "", children, ...rest }, ref) {
|
|
23
|
-
const theme = useTheme();
|
|
24
|
-
const variantClasses = {
|
|
25
|
-
primary: `${theme.typography.link} bg-indigo-600 hover:bg-indigo-500 text-white border border-transparent`,
|
|
26
|
-
secondary: `${theme.surfaces.panel} border ${theme.surfaces.panelBorder} ${theme.typography.panelTitle} hover:opacity-80`,
|
|
27
|
-
outline: `bg-transparent border ${theme.surfaces.panelBorder} ${theme.typography.panelTitle} hover:opacity-80`,
|
|
28
|
-
ghost: `bg-transparent border-transparent ${theme.typography.muted} hover:opacity-80`,
|
|
29
|
-
};
|
|
30
27
|
return (_jsx("button", { ref: ref, className: [
|
|
31
|
-
"inline-flex items-center justify-center gap-2 rounded-
|
|
28
|
+
"inline-flex items-center justify-center gap-2 rounded-[10px] font-medium focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--primary)]/50 disabled:pointer-events-none disabled:opacity-50",
|
|
32
29
|
sizeClasses[size],
|
|
33
30
|
variantClasses[variant],
|
|
34
31
|
className,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.js","sourceRoot":"","sources":["../../../src/components/ui/Button.tsx"],"names":[],"mappings":";AAAA,iCAAiC;AACjC,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,+DAA+D;AAC/D,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Button.js","sourceRoot":"","sources":["../../../src/components/ui/Button.tsx"],"names":[],"mappings":";AAAA,iCAAiC;AACjC,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,+DAA+D;AAC/D,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAWnC,MAAM,WAAW,GAA+B;IAC9C,EAAE,EAAE,qBAAqB;IACzB,EAAE,EAAE,mBAAmB;IACvB,EAAE,EAAE,qBAAqB;CAC1B,CAAC;AAEF,MAAM,cAAc,GAAkC;IACpD,OAAO,EAAE,aAAa;IACtB,SAAS,EAAE,eAAe;IAC1B,KAAK,EAAE,WAAW;CACnB,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAC9B,SAAS,MAAM,CACb,EAAE,OAAO,GAAG,SAAS,EAAE,IAAI,GAAG,IAAI,EAAE,SAAS,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EACvE,GAAG;IAEH,OAAO,CACL,iBACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE;YACT,kNAAkN;YAClN,WAAW,CAAC,IAAI,CAAC;YACjB,cAAc,CAAC,OAAO,CAAC;YACvB,SAAS;SACV;aACE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,GAAG,CAAC,KACR,IAAI,YAEP,QAAQ,GACF,CACV,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Tabs.tsx"],"names":[],"mappings":"AAgBA,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC;AAED,wBAAgB,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Tabs.tsx"],"names":[],"mappings":"AAgBA,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC;AAED,wBAAgB,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,SAAS,2CA8BzD"}
|
|
@@ -15,7 +15,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
15
15
|
import { useTheme } from "../../theme/context";
|
|
16
16
|
export function Tabs({ tabs, active, onChange }) {
|
|
17
17
|
const theme = useTheme();
|
|
18
|
-
return (_jsx("div", { className:
|
|
18
|
+
return (_jsx("div", { className: "flex items-center gap-6 border-b pb-3", style: { borderColor: theme.panel.border }, role: "tablist", children: tabs.map((tab) => {
|
|
19
19
|
const isActive = tab.id === active;
|
|
20
20
|
return (_jsx("button", { role: "tab", "aria-selected": isActive, onClick: () => onChange(tab.id), className: [
|
|
21
21
|
"text-sm font-medium pb-3 -mb-3 border-b-2 transition-colors",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tabs.js","sourceRoot":"","sources":["../../../src/components/ui/Tabs.tsx"],"names":[],"mappings":";AAAA,iCAAiC;AACjC,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,+DAA+D;AAC/D,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAa/C,MAAM,UAAU,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAa;IACxD,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IAEzB,OAAO,CACL,cACE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"Tabs.js","sourceRoot":"","sources":["../../../src/components/ui/Tabs.tsx"],"names":[],"mappings":";AAAA,iCAAiC;AACjC,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,+DAA+D;AAC/D,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAa/C,MAAM,UAAU,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAa;IACxD,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IAEzB,OAAO,CACL,cACE,SAAS,EAAC,uCAAuC,EACjD,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,EAC1C,IAAI,EAAC,SAAS,YAEb,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAChB,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,KAAK,MAAM,CAAC;YACnC,OAAO,CACL,iBAEE,IAAI,EAAC,KAAK,mBACK,QAAQ,EACvB,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAC/B,SAAS,EAAE;oBACT,6DAA6D;oBAC7D,QAAQ;wBACN,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,iBAAiB;wBAC3C,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,sCAAsC;iBACpE,CAAC,IAAI,CAAC,GAAG,CAAC,YAEV,GAAG,CAAC,KAAK,IAXL,GAAG,CAAC,EAAE,CAYJ,CACV,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bigquery.d.ts","sourceRoot":"","sources":["../../src/connectors/bigquery.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,oBAAoB,EACpB,UAAU,EACX,MAAM,SAAS,CAAC;AAMjB,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CA2BlE;AAMD,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EACA;QAAE,IAAI,EAAE,KAAK,CAAA;KAAE,GACf;QAAE,IAAI,EAAE,qBAAqB,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3E;AAMD,qBAAa,iBAAkB,YAAW,SAAS;IACjD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAG,UAAU,CAAU;IACpC,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,QAAQ,CAAC,CAAS;gBAEd,MAAM,EAAE,uBAAuB;IAmBrC,KAAK,CACT,OAAO,EAAE,YAAY,EACrB,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"bigquery.d.ts","sourceRoot":"","sources":["../../src/connectors/bigquery.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,oBAAoB,EACpB,UAAU,EACX,MAAM,SAAS,CAAC;AAMjB,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CA2BlE;AAMD,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EACA;QAAE,IAAI,EAAE,KAAK,CAAA;KAAE,GACf;QAAE,IAAI,EAAE,qBAAqB,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3E;AAMD,qBAAa,iBAAkB,YAAW,SAAS;IACjD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAG,UAAU,CAAU;IACpC,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,QAAQ,CAAC,CAAS;gBAEd,MAAM,EAAE,uBAAuB;IAmBrC,KAAK,CACT,OAAO,EAAE,YAAY,EACrB,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,WAAW,CAAC;IAiDjB,cAAc,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAe/C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|
|
@@ -69,9 +69,14 @@ export class BigQueryConnector {
|
|
|
69
69
|
const start = Date.now();
|
|
70
70
|
// Replace :param_name with @param_name (BigQuery named param syntax)
|
|
71
71
|
const normalizedSql = request.sql.replace(/:([a-zA-Z_][a-zA-Z0-9_]*)/g, (_match, name) => `@${name}`);
|
|
72
|
+
// BigQuery SDK throws if any param value is null without an explicit type.
|
|
73
|
+
// Strip nulls — unbound params will result in a "parameter not found" error
|
|
74
|
+
// from BigQuery, which surfaces as a panel-level 500, not a process crash.
|
|
75
|
+
const rawParams = request.params ?? options?.params ?? {};
|
|
76
|
+
const params = Object.fromEntries(Object.entries(rawParams).filter(([, v]) => v !== null && v !== undefined));
|
|
72
77
|
const queryOptions = {
|
|
73
78
|
query: normalizedSql,
|
|
74
|
-
params
|
|
79
|
+
params,
|
|
75
80
|
};
|
|
76
81
|
if (this.location !== undefined) {
|
|
77
82
|
queryOptions.location = this.location;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bigquery.js","sourceRoot":"","sources":["../../src/connectors/bigquery.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,+DAA+D;AAC/D,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAUlD,8EAA8E;AAC9E,gDAAgD;AAChD,8EAA8E;AAE9E,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO;YACV,OAAO,QAAQ,CAAC;QAElB,KAAK,OAAO,CAAC;QACb,KAAK,SAAS,CAAC;QACf,KAAK,SAAS,CAAC;QACf,KAAK,YAAY;YACf,OAAO,QAAQ,CAAC;QAElB,KAAK,MAAM;YACT,OAAO,SAAS,CAAC;QAEnB,KAAK,MAAM,CAAC;QACZ,KAAK,UAAU,CAAC;QAChB,KAAK,WAAW,CAAC;QACjB,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAEhB,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAEhB;YACE,OAAO,QAAQ,CAAC;IACpB,CAAC;AACH,CAAC;AAgBD,8EAA8E;AAC9E,2BAA2B;AAC3B,8EAA8E;AAE9E,MAAM,OAAO,iBAAiB;IACnB,EAAE,CAAS;IACX,IAAI,GAAG,UAAmB,CAAC;IAC5B,MAAM,CAAW;IACjB,QAAQ,CAAU;IAE1B,YAAY,MAA+B;QACzC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAEhC,MAAM,aAAa,GAA8C;YAC/D,SAAS,EAAE,MAAM,CAAC,OAAO;SAC1B,CAAC;QAEF,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;YAC/C,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACzB,aAAa,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;YACnD,CAAC;iBAAM,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,KAAK,CACT,OAAqB,EACrB,OAAsB;QAEtB,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEzB,qEAAqE;QACrE,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CACvC,4BAA4B,EAC5B,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAC7B,CAAC;QAEF,
|
|
1
|
+
{"version":3,"file":"bigquery.js","sourceRoot":"","sources":["../../src/connectors/bigquery.ts"],"names":[],"mappings":"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"}
|