@panoboard/core 1.1.5
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/cache/cache.d.ts +11 -0
- package/dist/cache/cache.d.ts.map +1 -0
- package/dist/cache/cache.js +42 -0
- package/dist/cache/cache.js.map +1 -0
- package/dist/cache/client.d.ts +9 -0
- package/dist/cache/client.d.ts.map +1 -0
- package/dist/cache/client.js +63 -0
- package/dist/cache/client.js.map +1 -0
- package/dist/cache/index.d.ts +4 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +17 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/keys.d.ts +2 -0
- package/dist/cache/keys.d.ts.map +1 -0
- package/dist/cache/keys.js +26 -0
- package/dist/cache/keys.js.map +1 -0
- package/dist/components/DashboardCard.d.ts +15 -0
- package/dist/components/DashboardCard.d.ts.map +1 -0
- package/dist/components/DashboardCard.js +80 -0
- package/dist/components/DashboardCard.js.map +1 -0
- package/dist/components/DashboardShell.d.ts +11 -0
- package/dist/components/DashboardShell.d.ts.map +1 -0
- package/dist/components/DashboardShell.js +115 -0
- package/dist/components/DashboardShell.js.map +1 -0
- package/dist/components/EmptyState.d.ts +6 -0
- package/dist/components/EmptyState.d.ts.map +1 -0
- package/dist/components/EmptyState.js +29 -0
- package/dist/components/EmptyState.js.map +1 -0
- package/dist/components/ErrorPage.d.ts +14 -0
- package/dist/components/ErrorPage.d.ts.map +1 -0
- package/dist/components/ErrorPage.js +132 -0
- package/dist/components/ErrorPage.js.map +1 -0
- package/dist/components/FilterBar.d.ts +8 -0
- package/dist/components/FilterBar.d.ts.map +1 -0
- package/dist/components/FilterBar.js +70 -0
- package/dist/components/FilterBar.js.map +1 -0
- package/dist/components/PanelGrid.d.ts +9 -0
- package/dist/components/PanelGrid.d.ts.map +1 -0
- package/dist/components/PanelGrid.js +26 -0
- package/dist/components/PanelGrid.js.map +1 -0
- package/dist/components/PanelWrapper.d.ts +8 -0
- package/dist/components/PanelWrapper.d.ts.map +1 -0
- package/dist/components/PanelWrapper.js +154 -0
- package/dist/components/PanelWrapper.js.map +1 -0
- package/dist/components/filters/BooleanFilter.d.ts +8 -0
- package/dist/components/filters/BooleanFilter.d.ts.map +1 -0
- package/dist/components/filters/BooleanFilter.js +36 -0
- package/dist/components/filters/BooleanFilter.js.map +1 -0
- package/dist/components/filters/CalendarGrid.d.ts +8 -0
- package/dist/components/filters/CalendarGrid.d.ts.map +1 -0
- package/dist/components/filters/CalendarGrid.js +159 -0
- package/dist/components/filters/CalendarGrid.js.map +1 -0
- package/dist/components/filters/DateRangeFilter.d.ts +10 -0
- package/dist/components/filters/DateRangeFilter.d.ts.map +1 -0
- package/dist/components/filters/DateRangeFilter.js +80 -0
- package/dist/components/filters/DateRangeFilter.js.map +1 -0
- package/dist/components/filters/FilterChips.d.ts +8 -0
- package/dist/components/filters/FilterChips.d.ts.map +1 -0
- package/dist/components/filters/FilterChips.js +94 -0
- package/dist/components/filters/FilterChips.js.map +1 -0
- package/dist/components/filters/MultiSelectFilter.d.ts +17 -0
- package/dist/components/filters/MultiSelectFilter.d.ts.map +1 -0
- package/dist/components/filters/MultiSelectFilter.js +80 -0
- package/dist/components/filters/MultiSelectFilter.js.map +1 -0
- package/dist/components/filters/NumberFilter.d.ts +10 -0
- package/dist/components/filters/NumberFilter.d.ts.map +1 -0
- package/dist/components/filters/NumberFilter.js +47 -0
- package/dist/components/filters/NumberFilter.js.map +1 -0
- package/dist/components/filters/SelectFilter.d.ts +16 -0
- package/dist/components/filters/SelectFilter.d.ts.map +1 -0
- package/dist/components/filters/SelectFilter.js +71 -0
- package/dist/components/filters/SelectFilter.js.map +1 -0
- package/dist/components/filters/TextFilter.d.ts +8 -0
- package/dist/components/filters/TextFilter.d.ts.map +1 -0
- package/dist/components/filters/TextFilter.js +57 -0
- package/dist/components/filters/TextFilter.js.map +1 -0
- package/dist/components/filters/useDropdown.d.ts +7 -0
- package/dist/components/filters/useDropdown.d.ts.map +1 -0
- package/dist/components/filters/useDropdown.js +41 -0
- package/dist/components/filters/useDropdown.js.map +1 -0
- package/dist/components/filters/useFilterUpdate.d.ts +2 -0
- package/dist/components/filters/useFilterUpdate.d.ts.map +1 -0
- package/dist/components/filters/useFilterUpdate.js +30 -0
- package/dist/components/filters/useFilterUpdate.js.map +1 -0
- package/dist/components/index.d.ts +59 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +75 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/panels/AreaChart.d.ts +7 -0
- package/dist/components/panels/AreaChart.d.ts.map +1 -0
- package/dist/components/panels/AreaChart.js +88 -0
- package/dist/components/panels/AreaChart.js.map +1 -0
- package/dist/components/panels/BarChart.d.ts +7 -0
- package/dist/components/panels/BarChart.d.ts.map +1 -0
- package/dist/components/panels/BarChart.js +99 -0
- package/dist/components/panels/BarChart.js.map +1 -0
- package/dist/components/panels/BoxPlotChart.d.ts +7 -0
- package/dist/components/panels/BoxPlotChart.d.ts.map +1 -0
- package/dist/components/panels/BoxPlotChart.js +41 -0
- package/dist/components/panels/BoxPlotChart.js.map +1 -0
- package/dist/components/panels/BulletChart.d.ts +7 -0
- package/dist/components/panels/BulletChart.d.ts.map +1 -0
- package/dist/components/panels/BulletChart.js +46 -0
- package/dist/components/panels/BulletChart.js.map +1 -0
- package/dist/components/panels/BumpChart.d.ts +7 -0
- package/dist/components/panels/BumpChart.d.ts.map +1 -0
- package/dist/components/panels/BumpChart.js +38 -0
- package/dist/components/panels/BumpChart.js.map +1 -0
- package/dist/components/panels/CalendarHeatmap.d.ts +7 -0
- package/dist/components/panels/CalendarHeatmap.d.ts.map +1 -0
- package/dist/components/panels/CalendarHeatmap.js +41 -0
- package/dist/components/panels/CalendarHeatmap.js.map +1 -0
- package/dist/components/panels/ChartTooltip.d.ts +48 -0
- package/dist/components/panels/ChartTooltip.d.ts.map +1 -0
- package/dist/components/panels/ChartTooltip.js +129 -0
- package/dist/components/panels/ChartTooltip.js.map +1 -0
- package/dist/components/panels/DonutChart.d.ts +7 -0
- package/dist/components/panels/DonutChart.d.ts.map +1 -0
- package/dist/components/panels/DonutChart.js +40 -0
- package/dist/components/panels/DonutChart.js.map +1 -0
- package/dist/components/panels/FunnelChart.d.ts +7 -0
- package/dist/components/panels/FunnelChart.d.ts.map +1 -0
- package/dist/components/panels/FunnelChart.js +32 -0
- package/dist/components/panels/FunnelChart.js.map +1 -0
- package/dist/components/panels/HeatmapChart.d.ts +7 -0
- package/dist/components/panels/HeatmapChart.d.ts.map +1 -0
- package/dist/components/panels/HeatmapChart.js +41 -0
- package/dist/components/panels/HeatmapChart.js.map +1 -0
- package/dist/components/panels/IframePanel.d.ts +6 -0
- package/dist/components/panels/IframePanel.d.ts.map +1 -0
- package/dist/components/panels/IframePanel.js +5 -0
- package/dist/components/panels/IframePanel.js.map +1 -0
- package/dist/components/panels/ImagePanel.d.ts +7 -0
- package/dist/components/panels/ImagePanel.d.ts.map +1 -0
- package/dist/components/panels/ImagePanel.js +9 -0
- package/dist/components/panels/ImagePanel.js.map +1 -0
- package/dist/components/panels/LineChart.d.ts +7 -0
- package/dist/components/panels/LineChart.d.ts.map +1 -0
- package/dist/components/panels/LineChart.js +87 -0
- package/dist/components/panels/LineChart.js.map +1 -0
- package/dist/components/panels/ListPanel.d.ts +7 -0
- package/dist/components/panels/ListPanel.d.ts.map +1 -0
- package/dist/components/panels/ListPanel.js +24 -0
- package/dist/components/panels/ListPanel.js.map +1 -0
- package/dist/components/panels/MarkdownPanel.d.ts +7 -0
- package/dist/components/panels/MarkdownPanel.d.ts.map +1 -0
- package/dist/components/panels/MarkdownPanel.js +39 -0
- package/dist/components/panels/MarkdownPanel.js.map +1 -0
- package/dist/components/panels/MetricPanel.d.ts +7 -0
- package/dist/components/panels/MetricPanel.d.ts.map +1 -0
- package/dist/components/panels/MetricPanel.js +23 -0
- package/dist/components/panels/MetricPanel.js.map +1 -0
- package/dist/components/panels/PanelEmpty.d.ts +2 -0
- package/dist/components/panels/PanelEmpty.d.ts.map +1 -0
- package/dist/components/panels/PanelEmpty.js +27 -0
- package/dist/components/panels/PanelEmpty.js.map +1 -0
- package/dist/components/panels/PanelError.d.ts +7 -0
- package/dist/components/panels/PanelError.d.ts.map +1 -0
- package/dist/components/panels/PanelError.js +21 -0
- package/dist/components/panels/PanelError.js.map +1 -0
- package/dist/components/panels/PanelSkeleton.d.ts +6 -0
- package/dist/components/panels/PanelSkeleton.d.ts.map +1 -0
- package/dist/components/panels/PanelSkeleton.js +24 -0
- package/dist/components/panels/PanelSkeleton.js.map +1 -0
- package/dist/components/panels/PieChart.d.ts +7 -0
- package/dist/components/panels/PieChart.d.ts.map +1 -0
- package/dist/components/panels/PieChart.js +40 -0
- package/dist/components/panels/PieChart.js.map +1 -0
- package/dist/components/panels/RadarChart.d.ts +7 -0
- package/dist/components/panels/RadarChart.d.ts.map +1 -0
- package/dist/components/panels/RadarChart.js +50 -0
- package/dist/components/panels/RadarChart.js.map +1 -0
- package/dist/components/panels/RadialBarChart.d.ts +7 -0
- package/dist/components/panels/RadialBarChart.d.ts.map +1 -0
- package/dist/components/panels/RadialBarChart.js +49 -0
- package/dist/components/panels/RadialBarChart.js.map +1 -0
- package/dist/components/panels/SankeyChart.d.ts +7 -0
- package/dist/components/panels/SankeyChart.d.ts.map +1 -0
- package/dist/components/panels/SankeyChart.js +39 -0
- package/dist/components/panels/SankeyChart.js.map +1 -0
- package/dist/components/panels/ScatterChart.d.ts +7 -0
- package/dist/components/panels/ScatterChart.d.ts.map +1 -0
- package/dist/components/panels/ScatterChart.js +54 -0
- package/dist/components/panels/ScatterChart.js.map +1 -0
- package/dist/components/panels/StatPanel.d.ts +8 -0
- package/dist/components/panels/StatPanel.d.ts.map +1 -0
- package/dist/components/panels/StatPanel.js +40 -0
- package/dist/components/panels/StatPanel.js.map +1 -0
- package/dist/components/panels/StreamChart.d.ts +7 -0
- package/dist/components/panels/StreamChart.d.ts.map +1 -0
- package/dist/components/panels/StreamChart.js +54 -0
- package/dist/components/panels/StreamChart.js.map +1 -0
- package/dist/components/panels/SunburstChart.d.ts +7 -0
- package/dist/components/panels/SunburstChart.d.ts.map +1 -0
- package/dist/components/panels/SunburstChart.js +60 -0
- package/dist/components/panels/SunburstChart.js.map +1 -0
- package/dist/components/panels/TablePanel.d.ts +7 -0
- package/dist/components/panels/TablePanel.d.ts.map +1 -0
- package/dist/components/panels/TablePanel.js +79 -0
- package/dist/components/panels/TablePanel.js.map +1 -0
- package/dist/components/panels/TreemapChart.d.ts +7 -0
- package/dist/components/panels/TreemapChart.d.ts.map +1 -0
- package/dist/components/panels/TreemapChart.js +59 -0
- package/dist/components/panels/TreemapChart.js.map +1 -0
- package/dist/components/panels/VideoPanel.d.ts +15 -0
- package/dist/components/panels/VideoPanel.d.ts.map +1 -0
- package/dist/components/panels/VideoPanel.js +25 -0
- package/dist/components/panels/VideoPanel.js.map +1 -0
- package/dist/components/panels/WaffleChart.d.ts +7 -0
- package/dist/components/panels/WaffleChart.d.ts.map +1 -0
- package/dist/components/panels/WaffleChart.js +46 -0
- package/dist/components/panels/WaffleChart.js.map +1 -0
- package/dist/components/panels/index.d.ts +3 -0
- package/dist/components/panels/index.d.ts.map +1 -0
- package/dist/components/panels/index.js +60 -0
- package/dist/components/panels/index.js.map +1 -0
- package/dist/components/panels/nivo-theme.d.ts +95 -0
- package/dist/components/panels/nivo-theme.d.ts.map +1 -0
- package/dist/components/panels/nivo-theme.js +140 -0
- package/dist/components/panels/nivo-theme.js.map +1 -0
- package/dist/components/panels/semantic-colors.d.ts +7 -0
- package/dist/components/panels/semantic-colors.d.ts.map +1 -0
- package/dist/components/panels/semantic-colors.js +100 -0
- package/dist/components/panels/semantic-colors.js.map +1 -0
- package/dist/components/ui/Button.d.ts +9 -0
- package/dist/components/ui/Button.d.ts.map +1 -0
- package/dist/components/ui/Button.js +40 -0
- package/dist/components/ui/Button.js.map +1 -0
- package/dist/components/ui/Tabs.d.ts +11 -0
- package/dist/components/ui/Tabs.d.ts.map +1 -0
- package/dist/components/ui/Tabs.js +28 -0
- package/dist/components/ui/Tabs.js.map +1 -0
- package/dist/connectors/bigquery.d.ts +26 -0
- package/dist/connectors/bigquery.d.ts.map +1 -0
- package/dist/connectors/bigquery.js +113 -0
- package/dist/connectors/bigquery.js.map +1 -0
- package/dist/connectors/index.d.ts +17 -0
- package/dist/connectors/index.d.ts.map +1 -0
- package/dist/connectors/index.js +23 -0
- package/dist/connectors/index.js.map +1 -0
- package/dist/connectors/params.d.ts +15 -0
- package/dist/connectors/params.d.ts.map +1 -0
- package/dist/connectors/params.js +46 -0
- package/dist/connectors/params.js.map +1 -0
- package/dist/connectors/postgres.d.ts +29 -0
- package/dist/connectors/postgres.d.ts.map +1 -0
- package/dist/connectors/postgres.js +130 -0
- package/dist/connectors/postgres.js.map +1 -0
- package/dist/connectors/redshift-data.d.ts +25 -0
- package/dist/connectors/redshift-data.d.ts.map +1 -0
- package/dist/connectors/redshift-data.js +237 -0
- package/dist/connectors/redshift-data.js.map +1 -0
- package/dist/connectors/redshift.d.ts +29 -0
- package/dist/connectors/redshift.d.ts.map +1 -0
- package/dist/connectors/redshift.js +138 -0
- package/dist/connectors/redshift.js.map +1 -0
- package/dist/connectors/registry.d.ts +7 -0
- package/dist/connectors/registry.d.ts.map +1 -0
- package/dist/connectors/registry.js +30 -0
- package/dist/connectors/registry.js.map +1 -0
- package/dist/connectors/snowflake.d.ts +37 -0
- package/dist/connectors/snowflake.d.ts.map +1 -0
- package/dist/connectors/snowflake.js +181 -0
- package/dist/connectors/snowflake.js.map +1 -0
- package/dist/connectors/types.d.ts +41 -0
- package/dist/connectors/types.d.ts.map +1 -0
- package/dist/connectors/types.js +15 -0
- package/dist/connectors/types.js.map +1 -0
- package/dist/connectors/url-parsers.d.ts +13 -0
- package/dist/connectors/url-parsers.d.ts.map +1 -0
- package/dist/connectors/url-parsers.js +95 -0
- package/dist/connectors/url-parsers.js.map +1 -0
- package/dist/connectors/url.d.ts +36 -0
- package/dist/connectors/url.d.ts.map +1 -0
- package/dist/connectors/url.js +139 -0
- package/dist/connectors/url.js.map +1 -0
- package/dist/filters/cascade.d.ts +13 -0
- package/dist/filters/cascade.d.ts.map +1 -0
- package/dist/filters/cascade.js +32 -0
- package/dist/filters/cascade.js.map +1 -0
- package/dist/filters/daterange.d.ts +8 -0
- package/dist/filters/daterange.d.ts.map +1 -0
- package/dist/filters/daterange.js +119 -0
- package/dist/filters/daterange.js.map +1 -0
- package/dist/filters/index.d.ts +7 -0
- package/dist/filters/index.d.ts.map +1 -0
- package/dist/filters/index.js +18 -0
- package/dist/filters/index.js.map +1 -0
- package/dist/filters/resolver.d.ts +3 -0
- package/dist/filters/resolver.d.ts.map +1 -0
- package/dist/filters/resolver.js +122 -0
- package/dist/filters/resolver.js.map +1 -0
- package/dist/filters/validation.d.ts +17 -0
- package/dist/filters/validation.d.ts.map +1 -0
- package/dist/filters/validation.js +84 -0
- package/dist/filters/validation.js.map +1 -0
- package/dist/formats.d.ts +4 -0
- package/dist/formats.d.ts.map +1 -0
- package/dist/formats.js +127 -0
- package/dist/formats.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/auth-provider.d.ts +22 -0
- package/dist/interfaces/auth-provider.d.ts.map +1 -0
- package/dist/interfaces/auth-provider.js +15 -0
- package/dist/interfaces/auth-provider.js.map +1 -0
- package/dist/interfaces/dashboard-store.d.ts +17 -0
- package/dist/interfaces/dashboard-store.d.ts.map +1 -0
- package/dist/interfaces/dashboard-store.js +15 -0
- package/dist/interfaces/dashboard-store.js.map +1 -0
- package/dist/interfaces/datasource-store.d.ts +6 -0
- package/dist/interfaces/datasource-store.d.ts.map +1 -0
- package/dist/interfaces/datasource-store.js +15 -0
- package/dist/interfaces/datasource-store.js.map +1 -0
- package/dist/interfaces/index.d.ts +4 -0
- package/dist/interfaces/index.d.ts.map +1 -0
- package/dist/interfaces/index.js +15 -0
- package/dist/interfaces/index.js.map +1 -0
- package/dist/locale/context.d.ts +6 -0
- package/dist/locale/context.d.ts.map +1 -0
- package/dist/locale/context.js +23 -0
- package/dist/locale/context.js.map +1 -0
- package/dist/locale/index.d.ts +2 -0
- package/dist/locale/index.d.ts.map +1 -0
- package/dist/locale/index.js +15 -0
- package/dist/locale/index.js.map +1 -0
- package/dist/query/array-expansion.d.ts +5 -0
- package/dist/query/array-expansion.d.ts.map +1 -0
- package/dist/query/array-expansion.js +39 -0
- package/dist/query/array-expansion.js.map +1 -0
- package/dist/query/index.d.ts +8 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +20 -0
- package/dist/query/index.js.map +1 -0
- package/dist/query/pipeline.d.ts +27 -0
- package/dist/query/pipeline.d.ts.map +1 -0
- package/dist/query/pipeline.js +49 -0
- package/dist/query/pipeline.js.map +1 -0
- package/dist/query/strategy/http.d.ts +7 -0
- package/dist/query/strategy/http.d.ts.map +1 -0
- package/dist/query/strategy/http.js +26 -0
- package/dist/query/strategy/http.js.map +1 -0
- package/dist/query/strategy/index.d.ts +4 -0
- package/dist/query/strategy/index.d.ts.map +1 -0
- package/dist/query/strategy/index.js +32 -0
- package/dist/query/strategy/index.js.map +1 -0
- package/dist/query/strategy/sql.d.ts +7 -0
- package/dist/query/strategy/sql.d.ts.map +1 -0
- package/dist/query/strategy/sql.js +40 -0
- package/dist/query/strategy/sql.js.map +1 -0
- package/dist/query/strategy/types.d.ts +6 -0
- package/dist/query/strategy/types.d.ts.map +1 -0
- package/dist/query/strategy/types.js +15 -0
- package/dist/query/strategy/types.js.map +1 -0
- package/dist/query/template.d.ts +7 -0
- package/dist/query/template.d.ts.map +1 -0
- package/dist/query/template.js +36 -0
- package/dist/query/template.js.map +1 -0
- package/dist/schemas/config.d.ts +74 -0
- package/dist/schemas/config.d.ts.map +1 -0
- package/dist/schemas/config.js +129 -0
- package/dist/schemas/config.js.map +1 -0
- package/dist/schemas/dashboard.d.ts +716 -0
- package/dist/schemas/dashboard.d.ts.map +1 -0
- package/dist/schemas/dashboard.js +314 -0
- package/dist/schemas/dashboard.js.map +1 -0
- package/dist/schemas/datasource.d.ts +252 -0
- package/dist/schemas/datasource.d.ts.map +1 -0
- package/dist/schemas/datasource.js +186 -0
- package/dist/schemas/datasource.js.map +1 -0
- package/dist/schemas/index.d.ts +5 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +18 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/theme.d.ts +36 -0
- package/dist/schemas/theme.d.ts.map +1 -0
- package/dist/schemas/theme.js +48 -0
- package/dist/schemas/theme.js.map +1 -0
- package/dist/startup/index.d.ts +3 -0
- package/dist/startup/index.d.ts.map +1 -0
- package/dist/startup/index.js +15 -0
- package/dist/startup/index.js.map +1 -0
- package/dist/startup/sql-lint.d.ts +13 -0
- package/dist/startup/sql-lint.d.ts.map +1 -0
- package/dist/startup/sql-lint.js +86 -0
- package/dist/startup/sql-lint.js.map +1 -0
- package/dist/theme/builtin.d.ts +5 -0
- package/dist/theme/builtin.d.ts.map +1 -0
- package/dist/theme/builtin.js +102 -0
- package/dist/theme/builtin.js.map +1 -0
- package/dist/theme/context.d.ts +7 -0
- package/dist/theme/context.d.ts.map +1 -0
- package/dist/theme/context.js +26 -0
- package/dist/theme/context.js.map +1 -0
- package/dist/theme/index.d.ts +3 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +16 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/loader-export.d.ts +2 -0
- package/dist/theme/loader-export.d.ts.map +1 -0
- package/dist/theme/loader-export.js +15 -0
- package/dist/theme/loader-export.js.map +1 -0
- package/dist/theme/loader.d.ts +11 -0
- package/dist/theme/loader.d.ts.map +1 -0
- package/dist/theme/loader.js +60 -0
- package/dist/theme/loader.js.map +1 -0
- package/package.json +148 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { QueryResult } from "../connectors/types";
|
|
2
|
+
interface CacheConfig {
|
|
3
|
+
enabled: boolean;
|
|
4
|
+
key_prefix: string;
|
|
5
|
+
default_ttl: string;
|
|
6
|
+
dashboard_ttl?: Record<string, string>;
|
|
7
|
+
}
|
|
8
|
+
export declare function resolveTtl(panelCacheTtl: string | undefined, slug: string, config: CacheConfig): number;
|
|
9
|
+
export declare function cachedQuery(config: CacheConfig, slug: string, panelId: string, panelCacheTtl: string | undefined, params: Record<string, unknown>, bypass: boolean, queryFn: () => Promise<QueryResult>, queryIdentifier?: string): Promise<QueryResult>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/cache/cache.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,UAAU,WAAW;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC;AAOD,wBAAgB,UAAU,CACxB,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,WAAW,GAClB,MAAM,CAKR;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,EACnC,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,WAAW,CAAC,CAuBtB"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// Copyright 2026 Mataki Labs LLC
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Business Source License 1.1 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// https://github.com/panoboard/panoboard/blob/main/LICENSE
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
import { cacheGet, cacheSet, isAvailable } from "./client";
|
|
15
|
+
import { buildCacheKey } from "./keys";
|
|
16
|
+
function parseTtlSeconds(ttl) {
|
|
17
|
+
const match = ttl.match(/^(\d+)s$/);
|
|
18
|
+
return match ? parseInt(match[1], 10) : 300;
|
|
19
|
+
}
|
|
20
|
+
export function resolveTtl(panelCacheTtl, slug, config) {
|
|
21
|
+
if (panelCacheTtl)
|
|
22
|
+
return parseTtlSeconds(panelCacheTtl);
|
|
23
|
+
if (config.dashboard_ttl?.[slug])
|
|
24
|
+
return parseTtlSeconds(config.dashboard_ttl[slug]);
|
|
25
|
+
return parseTtlSeconds(config.default_ttl);
|
|
26
|
+
}
|
|
27
|
+
export async function cachedQuery(config, slug, panelId, panelCacheTtl, params, bypass, queryFn, queryIdentifier) {
|
|
28
|
+
if (!config.enabled || !isAvailable() || bypass) {
|
|
29
|
+
const result = await queryFn();
|
|
30
|
+
return { ...result, fromCache: false };
|
|
31
|
+
}
|
|
32
|
+
const ttl = resolveTtl(panelCacheTtl, slug, config);
|
|
33
|
+
const key = buildCacheKey(config.key_prefix, slug, panelId, params, queryIdentifier);
|
|
34
|
+
const cached = await cacheGet(key);
|
|
35
|
+
if (cached) {
|
|
36
|
+
return { ...JSON.parse(cached), fromCache: true };
|
|
37
|
+
}
|
|
38
|
+
const result = await queryFn();
|
|
39
|
+
await cacheSet(key, ttl, JSON.stringify(result));
|
|
40
|
+
return { ...result, fromCache: false };
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/cache/cache.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,QAAQ,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAUvC,SAAS,eAAe,CAAC,GAAW;IAClC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACpC,OAAO,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,aAAiC,EACjC,IAAY,EACZ,MAAmB;IAEnB,IAAI,aAAa;QAAE,OAAO,eAAe,CAAC,aAAa,CAAC,CAAC;IACzD,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC;QAC9B,OAAO,eAAe,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,OAAO,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAmB,EACnB,IAAY,EACZ,OAAe,EACf,aAAiC,EACjC,MAA+B,EAC/B,MAAe,EACf,OAAmC,EACnC,eAAwB;IAExB,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,WAAW,EAAE,IAAI,MAAM,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,OAAO,EAAE,CAAC;QAC/B,OAAO,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACzC,CAAC;IAED,MAAM,GAAG,GAAG,UAAU,CAAC,aAAa,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACpD,MAAM,GAAG,GAAG,aAAa,CACvB,MAAM,CAAC,UAAU,EACjB,IAAI,EACJ,OAAO,EACP,MAAM,EACN,eAAe,CAChB,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACpD,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,OAAO,EAAE,CAAC;IAC/B,MAAM,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACjD,OAAO,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function initCache(config: {
|
|
2
|
+
url: string;
|
|
3
|
+
key_prefix?: string;
|
|
4
|
+
}): void;
|
|
5
|
+
export declare function isAvailable(): boolean;
|
|
6
|
+
export declare function cacheGet(key: string): Promise<string | null>;
|
|
7
|
+
export declare function cacheSet(key: string, ttl: number, value: string): Promise<void>;
|
|
8
|
+
export declare function closeCache(): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/cache/client.ts"],"names":[],"mappings":"AAmBA,wBAAgB,SAAS,CAAC,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,QAiBrE;AAED,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOlE;AAED,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAMhD"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// Copyright 2026 Mataki Labs LLC
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Business Source License 1.1 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// https://github.com/panoboard/panoboard/blob/main/LICENSE
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
import Redis from "ioredis";
|
|
15
|
+
let client = null;
|
|
16
|
+
let available = false;
|
|
17
|
+
export function initCache(config) {
|
|
18
|
+
client = new Redis(config.url, {
|
|
19
|
+
lazyConnect: true,
|
|
20
|
+
retryStrategy: (times) => Math.min(times * 500, 5000),
|
|
21
|
+
});
|
|
22
|
+
client.on("connect", () => {
|
|
23
|
+
available = true;
|
|
24
|
+
});
|
|
25
|
+
client.on("error", (err) => {
|
|
26
|
+
console.warn("Redis connection error:", err.message);
|
|
27
|
+
available = false;
|
|
28
|
+
});
|
|
29
|
+
client.connect().catch(() => {
|
|
30
|
+
console.warn("Redis connection failed at startup, continuing without cache");
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
export function isAvailable() {
|
|
34
|
+
return available && client !== null;
|
|
35
|
+
}
|
|
36
|
+
export async function cacheGet(key) {
|
|
37
|
+
if (!isAvailable())
|
|
38
|
+
return null;
|
|
39
|
+
try {
|
|
40
|
+
return await client.get(key);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export async function cacheSet(key, ttl, value) {
|
|
47
|
+
if (!isAvailable())
|
|
48
|
+
return;
|
|
49
|
+
try {
|
|
50
|
+
await client.setex(key, ttl, value);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// swallow
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export async function closeCache() {
|
|
57
|
+
if (client) {
|
|
58
|
+
await client.quit();
|
|
59
|
+
client = null;
|
|
60
|
+
available = false;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/cache/client.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,KAAK,MAAM,SAAS,CAAC;AAE5B,IAAI,MAAM,GAAiB,IAAI,CAAC;AAChC,IAAI,SAAS,GAAG,KAAK,CAAC;AAEtB,MAAM,UAAU,SAAS,CAAC,MAA4C;IACpE,MAAM,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE;QAC7B,WAAW,EAAE,IAAI;QACjB,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,EAAE,IAAI,CAAC;KACtD,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACxB,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;QAChC,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACrD,SAAS,GAAG,KAAK,CAAC;IACpB,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;QAC1B,OAAO,CAAC,IAAI,CACV,8DAA8D,CAC/D,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,SAAS,IAAI,MAAM,KAAK,IAAI,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,GAAW;IACxC,IAAI,CAAC,WAAW,EAAE;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,CAAC;QACH,OAAO,MAAM,MAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,GAAW,EACX,GAAW,EACX,KAAa;IAEb,IAAI,CAAC,WAAW,EAAE;QAAE,OAAO;IAC3B,IAAI,CAAC;QACH,MAAM,MAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,UAAU;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,MAAM,GAAG,IAAI,CAAC;QACd,SAAS,GAAG,KAAK,CAAC;IACpB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EACL,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,UAAU,GACX,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// Copyright 2026 Mataki Labs LLC
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Business Source License 1.1 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// https://github.com/panoboard/panoboard/blob/main/LICENSE
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
export { buildCacheKey } from "./keys";
|
|
15
|
+
export { cachedQuery, resolveTtl } from "./cache";
|
|
16
|
+
export { initCache, cacheGet, cacheSet, isAvailable, closeCache, } from "./client";
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cache/index.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,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EACL,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,UAAU,GACX,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/cache/keys.ts"],"names":[],"mappings":"AAgBA,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,eAAe,CAAC,EAAE,MAAM,GACvB,MAAM,CAYR"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Copyright 2026 Mataki Labs LLC
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Business Source License 1.1 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// https://github.com/panoboard/panoboard/blob/main/LICENSE
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
import { createHash } from "crypto";
|
|
15
|
+
export function buildCacheKey(prefix, slug, panelId, params, queryIdentifier) {
|
|
16
|
+
const sortedEntries = Object.entries(params).sort(([a], [b]) => a.localeCompare(b));
|
|
17
|
+
const hashInput = queryIdentifier
|
|
18
|
+
? JSON.stringify([queryIdentifier, sortedEntries])
|
|
19
|
+
: JSON.stringify(sortedEntries);
|
|
20
|
+
const hash = createHash("sha256")
|
|
21
|
+
.update(hashInput)
|
|
22
|
+
.digest("hex")
|
|
23
|
+
.slice(0, 16);
|
|
24
|
+
return `${prefix}:panel:${slug}:${panelId}:${hash}`;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/cache/keys.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,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,MAAM,UAAU,aAAa,CAC3B,MAAc,EACd,IAAY,EACZ,OAAe,EACf,MAA+B,EAC/B,eAAwB;IAExB,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAC7D,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CACnB,CAAC;IACF,MAAM,SAAS,GAAG,eAAe;QAC/B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;QAClD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC;SAC9B,MAAM,CAAC,SAAS,CAAC;SACjB,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChB,OAAO,GAAG,MAAM,UAAU,IAAI,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
interface PanelPosition {
|
|
2
|
+
col: number;
|
|
3
|
+
row: number;
|
|
4
|
+
width: number;
|
|
5
|
+
height: number;
|
|
6
|
+
}
|
|
7
|
+
interface DashboardCardProps {
|
|
8
|
+
slug: string;
|
|
9
|
+
title: string;
|
|
10
|
+
description?: string;
|
|
11
|
+
panels?: PanelPosition[];
|
|
12
|
+
}
|
|
13
|
+
export declare function DashboardCard({ slug, title, description, panels, }: DashboardCardProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=DashboardCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardCard.d.ts","sourceRoot":"","sources":["../../src/components/DashboardCard.tsx"],"names":[],"mappings":"AAmBA,UAAU,aAAa;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,kBAAkB;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;CAC1B;AAsID,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,KAAK,EACL,WAAW,EACX,MAAM,GACP,EAAE,kBAAkB,2CA+BpB"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// Copyright 2026 Mataki Labs LLC
|
|
3
|
+
//
|
|
4
|
+
// Licensed under the Business Source License 1.1 (the "License");
|
|
5
|
+
// you may not use this file except in compliance with the License.
|
|
6
|
+
// You may obtain a copy of the License at
|
|
7
|
+
//
|
|
8
|
+
// https://github.com/panoboard/panoboard/blob/main/LICENSE
|
|
9
|
+
//
|
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
// See the License for the specific language governing permissions and
|
|
14
|
+
// limitations under the License.
|
|
15
|
+
import { useState, useRef, useEffect } from "react";
|
|
16
|
+
import { Link } from "react-router";
|
|
17
|
+
import { MoreVertical, ExternalLink, Link2, Check } from "lucide-react";
|
|
18
|
+
import { useTheme } from "../theme/context";
|
|
19
|
+
// ─── Mini grid preview ────────────────────────────────────────────────────────
|
|
20
|
+
/** Renders a miniature panel grid showing actual panel positions as colored blocks. */
|
|
21
|
+
function MiniGrid({ panels }) {
|
|
22
|
+
const theme = useTheme();
|
|
23
|
+
const palette = theme.palette ?? [];
|
|
24
|
+
if (!panels || panels.length === 0) {
|
|
25
|
+
return (_jsx("div", { className: "aspect-video rounded-t-xl", style: {
|
|
26
|
+
backgroundColor: palette[0]
|
|
27
|
+
? `${palette[0]}15`
|
|
28
|
+
: "rgba(99,102,241,0.1)",
|
|
29
|
+
} }));
|
|
30
|
+
}
|
|
31
|
+
const GRID_COLS = 12;
|
|
32
|
+
const maxRow = Math.max(...panels.map((p) => p.row + p.height - 1), 1);
|
|
33
|
+
return (_jsx("div", { className: "aspect-video rounded-t-xl overflow-hidden relative", "aria-hidden": "true", children: _jsx("div", { className: "w-full h-full p-5", style: {
|
|
34
|
+
display: "grid",
|
|
35
|
+
gridTemplateColumns: `repeat(${GRID_COLS}, 1fr)`,
|
|
36
|
+
gridTemplateRows: `repeat(${maxRow}, 1fr)`,
|
|
37
|
+
gap: 10,
|
|
38
|
+
}, children: panels.map((panel, idx) => (_jsx("div", { style: {
|
|
39
|
+
gridColumn: `${panel.col} / span ${Math.min(panel.width, GRID_COLS - panel.col + 1)}`,
|
|
40
|
+
gridRow: `${panel.row} / span ${panel.height}`,
|
|
41
|
+
backgroundColor: `${palette[idx % palette.length] ?? "#6366f1"}60`,
|
|
42
|
+
borderRadius: 4,
|
|
43
|
+
} }, idx))) }) }));
|
|
44
|
+
}
|
|
45
|
+
function CardMenu({ slug }) {
|
|
46
|
+
const theme = useTheme();
|
|
47
|
+
const [open, setOpen] = useState(false);
|
|
48
|
+
const [copied, setCopied] = useState(false);
|
|
49
|
+
const ref = useRef(null);
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
if (!open)
|
|
52
|
+
return;
|
|
53
|
+
function handleClick(e) {
|
|
54
|
+
if (ref.current && !ref.current.contains(e.target)) {
|
|
55
|
+
setOpen(false);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
document.addEventListener("mousedown", handleClick);
|
|
59
|
+
return () => document.removeEventListener("mousedown", handleClick);
|
|
60
|
+
}, [open]);
|
|
61
|
+
function handleCopyLink(e) {
|
|
62
|
+
e.preventDefault();
|
|
63
|
+
const url = `${window.location.origin}/dashboards/${slug}`;
|
|
64
|
+
navigator.clipboard.writeText(url).then(() => {
|
|
65
|
+
setCopied(true);
|
|
66
|
+
setTimeout(() => setCopied(false), 2000);
|
|
67
|
+
});
|
|
68
|
+
setOpen(false);
|
|
69
|
+
}
|
|
70
|
+
return (_jsxs("div", { className: "relative shrink-0", ref: ref, children: [_jsx("button", { type: "button", onClick: (e) => {
|
|
71
|
+
e.preventDefault();
|
|
72
|
+
setOpen((v) => !v);
|
|
73
|
+
}, "aria-label": "Dashboard options", className: `${theme.typography.muted} hover:opacity-80 rounded p-1 transition-opacity`, children: _jsx(MoreVertical, { className: "w-4 h-4" }) }), open && (_jsxs("div", { className: `absolute right-0 top-full mt-1 z-50 min-w-35 rounded-lg border ${theme.surfaces.panelBorder} ${theme.surfaces.panel} shadow-xl backdrop-blur-sm py-1`, children: [_jsxs(Link, { to: `/dashboards/${slug}`, onClick: () => setOpen(false), className: `flex w-full items-center gap-2 px-3 py-2 text-sm ${theme.typography.muted} hover:opacity-80 transition-opacity`, children: [_jsx(ExternalLink, { className: "w-3.5 h-3.5" }), "Open"] }), _jsxs("button", { type: "button", onClick: handleCopyLink, className: `flex w-full items-center gap-2 px-3 py-2 text-sm ${theme.typography.muted} hover:opacity-80 transition-opacity`, children: [copied ? (_jsx(Check, { className: "w-3.5 h-3.5 text-emerald-400" })) : (_jsx(Link2, { className: "w-3.5 h-3.5" })), copied ? "Copied!" : "Copy Link"] })] }))] }));
|
|
74
|
+
}
|
|
75
|
+
// ─── DashboardCard ────────────────────────────────────────────────────────────
|
|
76
|
+
export function DashboardCard({ slug, title, description, panels, }) {
|
|
77
|
+
const theme = useTheme();
|
|
78
|
+
return (_jsxs("div", { className: `rounded-xl ${theme.surfaces.panel} border ${theme.surfaces.panelBorder} hover:shadow-lg hover:shadow-black/20 transition-shadow`, children: [_jsx(Link, { to: `/dashboards/${slug}`, className: "block", children: _jsx(MiniGrid, { panels: panels ?? [] }) }), _jsxs("div", { className: "p-4", children: [_jsxs("div", { className: "flex items-start justify-between gap-2", children: [_jsx(Link, { to: `/dashboards/${slug}`, className: "flex-1 min-w-0", children: _jsx("h3", { className: `${theme.typography.panelTitle} font-semibold text-base mt-1 truncate`, children: title }) }), _jsx(CardMenu, { slug: slug })] }), description && (_jsx("p", { className: `${theme.typography.muted} mt-1 line-clamp-2`, children: description }))] })] }));
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=DashboardCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardCard.js","sourceRoot":"","sources":["../../src/components/DashboardCard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
interface DashboardShellProps {
|
|
3
|
+
title: string;
|
|
4
|
+
description?: string;
|
|
5
|
+
refresh?: string;
|
|
6
|
+
filters?: ReactNode;
|
|
7
|
+
children: ReactNode;
|
|
8
|
+
}
|
|
9
|
+
export declare function DashboardShell({ title, description, refresh, filters, children, }: DashboardShellProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=DashboardShell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardShell.d.ts","sourceRoot":"","sources":["../../src/components/DashboardShell.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAE,KAAK,SAAS,EAAoC,MAAM,OAAO,CAAC;AAKzE,UAAU,mBAAmB;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAwBD,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,WAAW,EACX,OAAO,EACP,OAAO,EACP,QAAQ,GACT,EAAE,mBAAmB,2CAoJrB"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// Copyright 2026 Mataki Labs LLC
|
|
3
|
+
//
|
|
4
|
+
// Licensed under the Business Source License 1.1 (the "License");
|
|
5
|
+
// you may not use this file except in compliance with the License.
|
|
6
|
+
// You may obtain a copy of the License at
|
|
7
|
+
//
|
|
8
|
+
// https://github.com/panoboard/panoboard/blob/main/LICENSE
|
|
9
|
+
//
|
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
// See the License for the specific language governing permissions and
|
|
14
|
+
// limitations under the License.
|
|
15
|
+
import { useEffect, useCallback, useState } from "react";
|
|
16
|
+
import { useRevalidator, useSearchParams } from "react-router";
|
|
17
|
+
import { Maximize2, Minimize2 } from "lucide-react";
|
|
18
|
+
import { useTheme } from "../theme/context";
|
|
19
|
+
function parseRefreshSeconds(refresh) {
|
|
20
|
+
const match = refresh.match(/^(\d+)(s|m|h)?$/);
|
|
21
|
+
if (!match)
|
|
22
|
+
return 0;
|
|
23
|
+
const value = parseInt(match[1], 10);
|
|
24
|
+
switch (match[2]) {
|
|
25
|
+
case "m":
|
|
26
|
+
return value * 60;
|
|
27
|
+
case "h":
|
|
28
|
+
return value * 3600;
|
|
29
|
+
default:
|
|
30
|
+
return value;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function formatCountdown(seconds) {
|
|
34
|
+
if (seconds <= 0)
|
|
35
|
+
return "0s";
|
|
36
|
+
if (seconds < 60)
|
|
37
|
+
return `${seconds}s`;
|
|
38
|
+
const m = Math.floor(seconds / 60);
|
|
39
|
+
const s = seconds % 60;
|
|
40
|
+
return s > 0 ? `${m}m ${s}s` : `${m}m`;
|
|
41
|
+
}
|
|
42
|
+
export function DashboardShell({ title, description, refresh, filters, children, }) {
|
|
43
|
+
const theme = useTheme();
|
|
44
|
+
const revalidator = useRevalidator();
|
|
45
|
+
const [searchParams, setSearchParams] = useSearchParams();
|
|
46
|
+
const refreshSeconds = refresh ? parseRefreshSeconds(refresh) : 0;
|
|
47
|
+
const [countdown, setCountdown] = useState(refreshSeconds);
|
|
48
|
+
const isRefreshing = revalidator.state === "loading";
|
|
49
|
+
const isFullscreen = searchParams.get("fullscreen") === "1";
|
|
50
|
+
const [hintHidden, setHintHidden] = useState(false);
|
|
51
|
+
const hintVisible = !isFullscreen || !hintHidden;
|
|
52
|
+
// Hide the exit hint after a delay when entering fullscreen; reset when leaving
|
|
53
|
+
useEffect(() => {
|
|
54
|
+
if (!isFullscreen) {
|
|
55
|
+
return () => setHintHidden(false);
|
|
56
|
+
}
|
|
57
|
+
const timer = setTimeout(() => setHintHidden(true), 1500);
|
|
58
|
+
const handleKeyDown = (e) => {
|
|
59
|
+
if (e.key === "Escape") {
|
|
60
|
+
setSearchParams((prev) => {
|
|
61
|
+
const next = new URLSearchParams(prev);
|
|
62
|
+
next.delete("fullscreen");
|
|
63
|
+
return next;
|
|
64
|
+
}, { preventScrollReset: true });
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
window.addEventListener("keydown", handleKeyDown);
|
|
68
|
+
return () => {
|
|
69
|
+
clearTimeout(timer);
|
|
70
|
+
window.removeEventListener("keydown", handleKeyDown);
|
|
71
|
+
};
|
|
72
|
+
}, [isFullscreen, setSearchParams]);
|
|
73
|
+
const doRefresh = useCallback(() => {
|
|
74
|
+
revalidator.revalidate();
|
|
75
|
+
}, [revalidator]);
|
|
76
|
+
const toggleFullscreen = useCallback(() => {
|
|
77
|
+
setSearchParams((prev) => {
|
|
78
|
+
const next = new URLSearchParams(prev);
|
|
79
|
+
if (next.get("fullscreen") === "1") {
|
|
80
|
+
next.delete("fullscreen");
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
next.set("fullscreen", "1");
|
|
84
|
+
}
|
|
85
|
+
return next;
|
|
86
|
+
}, { preventScrollReset: true });
|
|
87
|
+
}, [setSearchParams]);
|
|
88
|
+
// Reset countdown when refresh completes (cleanup runs on transition from loading)
|
|
89
|
+
useEffect(() => {
|
|
90
|
+
if (!isRefreshing)
|
|
91
|
+
return;
|
|
92
|
+
return () => setCountdown(refreshSeconds);
|
|
93
|
+
}, [isRefreshing, refreshSeconds]);
|
|
94
|
+
// Countdown tick
|
|
95
|
+
useEffect(() => {
|
|
96
|
+
if (refreshSeconds <= 0 || isRefreshing)
|
|
97
|
+
return;
|
|
98
|
+
const interval = setInterval(() => {
|
|
99
|
+
setCountdown((prev) => {
|
|
100
|
+
if (prev <= 1) {
|
|
101
|
+
doRefresh();
|
|
102
|
+
return 0;
|
|
103
|
+
}
|
|
104
|
+
return prev - 1;
|
|
105
|
+
});
|
|
106
|
+
}, 1000);
|
|
107
|
+
return () => clearInterval(interval);
|
|
108
|
+
}, [refreshSeconds, isRefreshing, doRefresh]);
|
|
109
|
+
return (_jsxs("div", { className: "px-6 py-6 flex-1", children: [_jsxs("div", { className: "flex flex-col xl:flex-row xl:items-start gap-4 mb-6", children: [_jsxs("div", { className: "shrink-0", children: [_jsx("h1", { className: `${theme.typography.title} text-3xl! font-bold!`, children: title }), description && (_jsx("p", { className: `${theme.typography.muted} text-sm mt-1`, children: description }))] }), _jsxs("div", { className: "flex items-start gap-3 xl:ml-auto xl:mt-1", children: [filters, _jsxs("div", { className: "shrink-0 flex flex-col items-center gap-1", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("button", { onClick: doRefresh, disabled: isRefreshing, className: "bg-indigo-500 hover:bg-indigo-600 disabled:opacity-50 text-white rounded-lg px-4 py-2 text-sm font-medium transition", children: isRefreshing ? "Refreshing\u2026" : "Refresh Now" }), !isFullscreen && (_jsx("button", { onClick: toggleFullscreen, title: "Full screen", className: `${theme.filters.background} ${theme.typography.muted} hover:${theme.typography.value} rounded-lg p-2 transition`, children: _jsx(Maximize2, { className: "w-4 h-4" }) }))] }), refreshSeconds > 0 && (_jsx("span", { className: `${theme.typography.muted} text-xs`, children: isRefreshing
|
|
110
|
+
? "Refreshing\u2026"
|
|
111
|
+
: `Refreshes in ${formatCountdown(countdown)}` }))] })] })] }), children, isFullscreen && (_jsxs("div", { className: "fixed top-0 inset-x-0 z-50 flex justify-center group", children: [_jsx("div", { className: "h-4 w-64" }), _jsxs("button", { onClick: toggleFullscreen, className: `absolute top-0 flex items-center gap-2 bg-gray-900/80 hover:bg-gray-900 text-white rounded-b-lg px-4 py-2 text-sm font-medium shadow-lg backdrop-blur-sm transition-transform duration-300 ease-in-out ${hintVisible
|
|
112
|
+
? "translate-y-0"
|
|
113
|
+
: "-translate-y-full group-hover:translate-y-0"}`, children: [_jsx(Minimize2, { className: "w-4 h-4" }), "Exit Full Screen"] })] }))] }));
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=DashboardShell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardShell.js","sourceRoot":"","sources":["../../src/components/DashboardShell.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmptyState.d.ts","sourceRoot":"","sources":["../../src/components/EmptyState.tsx"],"names":[],"mappings":"AAkBA,UAAU,eAAe;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,UAAU,CAAC,EAAE,WAAgB,EAAE,EAAE,eAAe,2CAyF/D"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// Copyright 2026 Mataki Labs LLC
|
|
3
|
+
//
|
|
4
|
+
// Licensed under the Business Source License 1.1 (the "License");
|
|
5
|
+
// you may not use this file except in compliance with the License.
|
|
6
|
+
// You may obtain a copy of the License at
|
|
7
|
+
//
|
|
8
|
+
// https://github.com/panoboard/panoboard/blob/main/LICENSE
|
|
9
|
+
//
|
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
// See the License for the specific language governing permissions and
|
|
14
|
+
// limitations under the License.
|
|
15
|
+
import { useState } from "react";
|
|
16
|
+
import { BookOpen, Copy, Check } from "lucide-react";
|
|
17
|
+
import { useTheme } from "../theme/context";
|
|
18
|
+
export function EmptyState({ exampleYaml = "" }) {
|
|
19
|
+
const theme = useTheme();
|
|
20
|
+
const [copied, setCopied] = useState(false);
|
|
21
|
+
function handleCopy() {
|
|
22
|
+
navigator.clipboard.writeText(exampleYaml).then(() => {
|
|
23
|
+
setCopied(true);
|
|
24
|
+
setTimeout(() => setCopied(false), 2000);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
return (_jsx("div", { className: "flex items-center justify-center py-16", children: _jsxs("div", { className: "max-w-xl w-full text-center", children: [_jsxs("div", { className: "relative mb-10", children: [_jsx("div", { className: "absolute -inset-4 bg-indigo-400/5 rounded-full blur-3xl opacity-50" }), _jsx("div", { className: "relative flex justify-center", children: _jsx("div", { className: `w-64 h-64 ${theme.surfaces.panelHeader} rounded-2xl border-2 border-dashed ${theme.surfaces.panelBorder} flex flex-col items-center justify-center overflow-hidden`, children: _jsxs("div", { className: "w-48 space-y-3 p-6 opacity-60", children: [_jsxs("div", { className: "flex gap-2", children: [_jsx("div", { className: "h-2 w-8 bg-indigo-400/40 rounded" }), _jsx("div", { className: "h-2 w-12 bg-slate-600 rounded" })] }), _jsxs("div", { className: "flex gap-2 pl-4", children: [_jsx("div", { className: "h-2 w-16 bg-indigo-400/40 rounded" }), _jsx("div", { className: "h-2 w-6 bg-slate-600 rounded" })] }), _jsxs("div", { className: "flex gap-2 pl-4", children: [_jsx("div", { className: "h-2 w-10 bg-indigo-400/40 rounded" }), _jsx("div", { className: "h-2 w-20 bg-slate-600 rounded" })] }), _jsx("div", { className: "flex gap-2 pt-2", children: _jsx("div", { className: "h-2 w-24 bg-indigo-400/40 rounded" }) }), _jsxs("div", { className: "flex gap-2 pl-4", children: [_jsx("div", { className: "h-2 w-8 bg-indigo-400/40 rounded" }), _jsx("div", { className: "h-2 w-16 bg-slate-600 rounded" })] })] }) }) })] }), _jsx("h1", { className: `${theme.typography.title} text-3xl! font-bold! mb-3`, children: "No dashboards found" }), _jsxs("p", { className: `${theme.typography.muted} text-lg mb-10 max-w-md mx-auto leading-relaxed`, children: ["Define your first dashboard in a", " ", _jsx("code", { className: `${theme.surfaces.panelHeader} px-1.5 py-0.5 rounded text-indigo-400 font-mono text-sm italic`, children: "YAML" }), " ", "file to get started."] }), _jsxs("div", { className: "flex flex-col sm:flex-row items-center justify-center gap-4", children: [_jsxs("a", { href: "https://panoboard.dev/docs", target: "_blank", rel: "noopener noreferrer", className: "w-full sm:w-auto px-8 py-3 bg-indigo-400 hover:bg-indigo-400/90 text-slate-950 font-bold rounded-lg transition-all shadow-lg shadow-indigo-400/10 flex items-center justify-center gap-2", children: [_jsx(BookOpen, { className: "w-5 h-5" }), "View Documentation"] }), _jsxs("button", { onClick: handleCopy, className: `w-full sm:w-auto px-8 py-3 ${theme.surfaces.panelHeader} hover:opacity-90 ${theme.filters.text} font-bold rounded-lg transition-all border ${theme.surfaces.panelBorder} flex items-center justify-center gap-2`, children: [copied ? (_jsx(Check, { className: "w-5 h-5 text-emerald-400" })) : (_jsx(Copy, { className: "w-5 h-5" })), copied ? "Copied!" : "Copy Example YAML"] })] })] }) }));
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=EmptyState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmptyState.js","sourceRoot":"","sources":["../../src/components/EmptyState.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface ErrorPageProps {
|
|
2
|
+
code: number;
|
|
3
|
+
title: string;
|
|
4
|
+
description: string;
|
|
5
|
+
icon?: "not-found" | "lock";
|
|
6
|
+
primaryLabel?: string;
|
|
7
|
+
primaryHref?: string;
|
|
8
|
+
secondaryLabel?: string;
|
|
9
|
+
secondaryHref?: string;
|
|
10
|
+
header?: React.ReactNode;
|
|
11
|
+
footer?: React.ReactNode;
|
|
12
|
+
}
|
|
13
|
+
export declare function ErrorPage({ code, title, description, icon, primaryLabel, primaryHref, secondaryLabel, secondaryHref, header, footer, }: ErrorPageProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=ErrorPage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErrorPage.d.ts","sourceRoot":"","sources":["../../src/components/ErrorPage.tsx"],"names":[],"mappings":"AA0BA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC1B;AAED,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,KAAK,EACL,WAAW,EACX,IAAkB,EAClB,YAA2B,EAC3B,WAA2B,EAC3B,cAAuB,EACvB,aAAmB,EACnB,MAAM,EACN,MAAM,GACP,EAAE,cAAc,2CA2KhB"}
|