@openchoreo/backstage-plugin-openchoreo-observability 1.1.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/CHANGELOG.md +5 -0
- package/README.md +22 -0
- package/dist/api/FinOpsAgentApi.esm.js +43 -0
- package/dist/api/FinOpsAgentApi.esm.js.map +1 -0
- package/dist/api/ObservabilityApi.esm.js +568 -0
- package/dist/api/ObservabilityApi.esm.js.map +1 -0
- package/dist/api/ObserverUrlCache.esm.js +59 -0
- package/dist/api/ObserverUrlCache.esm.js.map +1 -0
- package/dist/api/RCAAgentApi.esm.js +104 -0
- package/dist/api/RCAAgentApi.esm.js.map +1 -0
- package/dist/components/Alerts/AlertRow.esm.js +203 -0
- package/dist/components/Alerts/AlertRow.esm.js.map +1 -0
- package/dist/components/Alerts/AlertsActions.esm.js +77 -0
- package/dist/components/Alerts/AlertsActions.esm.js.map +1 -0
- package/dist/components/Alerts/AlertsFilter.esm.js +95 -0
- package/dist/components/Alerts/AlertsFilter.esm.js.map +1 -0
- package/dist/components/Alerts/AlertsTable.esm.js +63 -0
- package/dist/components/Alerts/AlertsTable.esm.js.map +1 -0
- package/dist/components/Alerts/ObservabilityAlertsPage.esm.js +251 -0
- package/dist/components/Alerts/ObservabilityAlertsPage.esm.js.map +1 -0
- package/dist/components/Alerts/types.esm.js +4 -0
- package/dist/components/Alerts/types.esm.js.map +1 -0
- package/dist/components/CostAnalysis/CostAnalysisPage.esm.js +141 -0
- package/dist/components/CostAnalysis/CostAnalysisPage.esm.js.map +1 -0
- package/dist/components/CostAnalysis/CostAnalysisReport.esm.js +128 -0
- package/dist/components/CostAnalysis/CostAnalysisReport.esm.js.map +1 -0
- package/dist/components/CostAnalysis/CostAnalysisReportView.esm.js +517 -0
- package/dist/components/CostAnalysis/CostAnalysisReportView.esm.js.map +1 -0
- package/dist/components/CostAnalysis/CostAnalysisTable.esm.js +149 -0
- package/dist/components/CostAnalysis/CostAnalysisTable.esm.js.map +1 -0
- package/dist/components/CostAnalysis/FinOpsApplyButton.esm.js +112 -0
- package/dist/components/CostAnalysis/FinOpsApplyButton.esm.js.map +1 -0
- package/dist/components/CostAnalysis/index.esm.js +2 -0
- package/dist/components/CostAnalysis/index.esm.js.map +1 -0
- package/dist/components/Incidents/IncidentRow.esm.js +258 -0
- package/dist/components/Incidents/IncidentRow.esm.js.map +1 -0
- package/dist/components/Incidents/IncidentsActions.esm.js +77 -0
- package/dist/components/Incidents/IncidentsActions.esm.js.map +1 -0
- package/dist/components/Incidents/IncidentsFilter.esm.js +144 -0
- package/dist/components/Incidents/IncidentsFilter.esm.js.map +1 -0
- package/dist/components/Incidents/IncidentsTable.esm.js +68 -0
- package/dist/components/Incidents/IncidentsTable.esm.js.map +1 -0
- package/dist/components/Incidents/ObservabilityProjectIncidentsPage.esm.js +283 -0
- package/dist/components/Incidents/ObservabilityProjectIncidentsPage.esm.js.map +1 -0
- package/dist/components/Incidents/types.esm.js +8 -0
- package/dist/components/Incidents/types.esm.js.map +1 -0
- package/dist/components/Metrics/ChartTooltip.esm.js +53 -0
- package/dist/components/Metrics/ChartTooltip.esm.js.map +1 -0
- package/dist/components/Metrics/HTTPMetricsSection.esm.js +109 -0
- package/dist/components/Metrics/HTTPMetricsSection.esm.js.map +1 -0
- package/dist/components/Metrics/MetricGraphByComponent.esm.js +99 -0
- package/dist/components/Metrics/MetricGraphByComponent.esm.js.map +1 -0
- package/dist/components/Metrics/MetricsActions.esm.js +30 -0
- package/dist/components/Metrics/MetricsActions.esm.js.map +1 -0
- package/dist/components/Metrics/MetricsFilters.esm.js +49 -0
- package/dist/components/Metrics/MetricsFilters.esm.js.map +1 -0
- package/dist/components/Metrics/ObservabilityMetricsPage.esm.js +196 -0
- package/dist/components/Metrics/ObservabilityMetricsPage.esm.js.map +1 -0
- package/dist/components/Metrics/styles.esm.js +55 -0
- package/dist/components/Metrics/styles.esm.js.map +1 -0
- package/dist/components/Metrics/utils.esm.js +221 -0
- package/dist/components/Metrics/utils.esm.js.map +1 -0
- package/dist/components/RCA/RCAActions.esm.js +42 -0
- package/dist/components/RCA/RCAActions.esm.js.map +1 -0
- package/dist/components/RCA/RCAFilters.esm.js +100 -0
- package/dist/components/RCA/RCAFilters.esm.js.map +1 -0
- package/dist/components/RCA/RCAPage.esm.js +137 -0
- package/dist/components/RCA/RCAPage.esm.js.map +1 -0
- package/dist/components/RCA/RCAReport/EntityLinkContext.esm.js +9 -0
- package/dist/components/RCA/RCAReport/EntityLinkContext.esm.js.map +1 -0
- package/dist/components/RCA/RCAReport/FormattedText.esm.js +94 -0
- package/dist/components/RCA/RCAReport/FormattedText.esm.js.map +1 -0
- package/dist/components/RCA/RCAReport/RCAReportView.esm.js +308 -0
- package/dist/components/RCA/RCAReport/RCAReportView.esm.js.map +1 -0
- package/dist/components/RCA/RCAReport/sections/AssessmentSection.esm.js +113 -0
- package/dist/components/RCA/RCAReport/sections/AssessmentSection.esm.js.map +1 -0
- package/dist/components/RCA/RCAReport/sections/ChatPanelSection.esm.js +272 -0
- package/dist/components/RCA/RCAReport/sections/ChatPanelSection.esm.js.map +1 -0
- package/dist/components/RCA/RCAReport/sections/ExcludedCausesSection.esm.js +48 -0
- package/dist/components/RCA/RCAReport/sections/ExcludedCausesSection.esm.js.map +1 -0
- package/dist/components/RCA/RCAReport/sections/IncidentOverviewSection.esm.js +205 -0
- package/dist/components/RCA/RCAReport/sections/IncidentOverviewSection.esm.js.map +1 -0
- package/dist/components/RCA/RCAReport/sections/InvestigationPathSection.esm.js +121 -0
- package/dist/components/RCA/RCAReport/sections/InvestigationPathSection.esm.js.map +1 -0
- package/dist/components/RCA/RCAReport/sections/PatchTabContent.esm.js +593 -0
- package/dist/components/RCA/RCAReport/sections/PatchTabContent.esm.js.map +1 -0
- package/dist/components/RCA/RCAReport/sections/QuickFixesPanelSection.esm.js +35 -0
- package/dist/components/RCA/RCAReport/sections/QuickFixesPanelSection.esm.js.map +1 -0
- package/dist/components/RCA/RCAReport/sections/RecommendationsSection.esm.js +54 -0
- package/dist/components/RCA/RCAReport/sections/RecommendationsSection.esm.js.map +1 -0
- package/dist/components/RCA/RCAReport/sections/RootCausesSection.esm.js +526 -0
- package/dist/components/RCA/RCAReport/sections/RootCausesSection.esm.js.map +1 -0
- package/dist/components/RCA/RCAReport/sections/SystemTimelineSection.esm.js +70 -0
- package/dist/components/RCA/RCAReport/sections/SystemTimelineSection.esm.js.map +1 -0
- package/dist/components/RCA/RCAReport/sections/VisibilityImprovementsSection.esm.js +54 -0
- package/dist/components/RCA/RCAReport/sections/VisibilityImprovementsSection.esm.js.map +1 -0
- package/dist/components/RCA/RCAReport/styles.esm.js +467 -0
- package/dist/components/RCA/RCAReport/styles.esm.js.map +1 -0
- package/dist/components/RCA/RCAReport.esm.js +109 -0
- package/dist/components/RCA/RCAReport.esm.js.map +1 -0
- package/dist/components/RCA/RCATable.esm.js +140 -0
- package/dist/components/RCA/RCATable.esm.js.map +1 -0
- package/dist/components/RuntimeLogs/LogEntry.esm.js +182 -0
- package/dist/components/RuntimeLogs/LogEntry.esm.js.map +1 -0
- package/dist/components/RuntimeLogs/LogsActions.esm.js +106 -0
- package/dist/components/RuntimeLogs/LogsActions.esm.js.map +1 -0
- package/dist/components/RuntimeLogs/LogsFilter.esm.js +200 -0
- package/dist/components/RuntimeLogs/LogsFilter.esm.js.map +1 -0
- package/dist/components/RuntimeLogs/LogsTable.esm.js +91 -0
- package/dist/components/RuntimeLogs/LogsTable.esm.js.map +1 -0
- package/dist/components/RuntimeLogs/ObservabilityProjectRuntimeLogsPage.esm.js +220 -0
- package/dist/components/RuntimeLogs/ObservabilityProjectRuntimeLogsPage.esm.js.map +1 -0
- package/dist/components/RuntimeLogs/ObservabilityRuntimeLogsPage.esm.js +222 -0
- package/dist/components/RuntimeLogs/ObservabilityRuntimeLogsPage.esm.js.map +1 -0
- package/dist/components/RuntimeLogs/styles.esm.js +256 -0
- package/dist/components/RuntimeLogs/styles.esm.js.map +1 -0
- package/dist/components/RuntimeLogs/types.esm.js +16 -0
- package/dist/components/RuntimeLogs/types.esm.js.map +1 -0
- package/dist/components/TimeRangeFilter/TimeRangeFilter.esm.js +280 -0
- package/dist/components/TimeRangeFilter/TimeRangeFilter.esm.js.map +1 -0
- package/dist/components/Traces/ObservabilityTracesPage.esm.js +165 -0
- package/dist/components/Traces/ObservabilityTracesPage.esm.js.map +1 -0
- package/dist/components/Traces/TracesActions.esm.js +37 -0
- package/dist/components/Traces/TracesActions.esm.js.map +1 -0
- package/dist/components/Traces/TracesFilters.esm.js +121 -0
- package/dist/components/Traces/TracesFilters.esm.js.map +1 -0
- package/dist/components/Traces/TracesTable.esm.js +137 -0
- package/dist/components/Traces/TracesTable.esm.js.map +1 -0
- package/dist/components/Traces/WaterfallView.esm.js +567 -0
- package/dist/components/Traces/WaterfallView.esm.js.map +1 -0
- package/dist/components/Traces/styles.esm.js +198 -0
- package/dist/components/Traces/styles.esm.js.map +1 -0
- package/dist/components/Traces/utils.esm.js +19 -0
- package/dist/components/Traces/utils.esm.js.map +1 -0
- package/dist/hooks/useAutoSelectFirstEnvironment.esm.js +25 -0
- package/dist/hooks/useAutoSelectFirstEnvironment.esm.js.map +1 -0
- package/dist/hooks/useComponentAlerts.esm.js +80 -0
- package/dist/hooks/useComponentAlerts.esm.js.map +1 -0
- package/dist/hooks/useDataPlaneNetPolProvider.esm.js +55 -0
- package/dist/hooks/useDataPlaneNetPolProvider.esm.js.map +1 -0
- package/dist/hooks/useDebouncedSearch.esm.js +24 -0
- package/dist/hooks/useDebouncedSearch.esm.js.map +1 -0
- package/dist/hooks/useFilters.esm.js +29 -0
- package/dist/hooks/useFilters.esm.js.map +1 -0
- package/dist/hooks/useFinOpsReport.esm.js +66 -0
- package/dist/hooks/useFinOpsReport.esm.js.map +1 -0
- package/dist/hooks/useFinOpsReports.esm.js +70 -0
- package/dist/hooks/useFinOpsReports.esm.js.map +1 -0
- package/dist/hooks/useGetComponentsByProject.esm.js +57 -0
- package/dist/hooks/useGetComponentsByProject.esm.js.map +1 -0
- package/dist/hooks/useGetEnvironmentsByNamespace.esm.js +53 -0
- package/dist/hooks/useGetEnvironmentsByNamespace.esm.js.map +1 -0
- package/dist/hooks/useGetNamespaceAndProjectByEntity.esm.js +40 -0
- package/dist/hooks/useGetNamespaceAndProjectByEntity.esm.js.map +1 -0
- package/dist/hooks/useMetrics.esm.js +107 -0
- package/dist/hooks/useMetrics.esm.js.map +1 -0
- package/dist/hooks/useProjectIncidents.esm.js +111 -0
- package/dist/hooks/useProjectIncidents.esm.js.map +1 -0
- package/dist/hooks/useProjectRuntimeLogs.esm.js +185 -0
- package/dist/hooks/useProjectRuntimeLogs.esm.js.map +1 -0
- package/dist/hooks/useRCAReportByAlert.esm.js +54 -0
- package/dist/hooks/useRCAReportByAlert.esm.js.map +1 -0
- package/dist/hooks/useRCAReports.esm.js +75 -0
- package/dist/hooks/useRCAReports.esm.js.map +1 -0
- package/dist/hooks/useRuntimeLogs.esm.js +147 -0
- package/dist/hooks/useRuntimeLogs.esm.js.map +1 -0
- package/dist/hooks/useSpanDetails.esm.js +71 -0
- package/dist/hooks/useSpanDetails.esm.js.map +1 -0
- package/dist/hooks/useTraceSpans.esm.js +80 -0
- package/dist/hooks/useTraceSpans.esm.js.map +1 -0
- package/dist/hooks/useTraces.esm.js +112 -0
- package/dist/hooks/useTraces.esm.js.map +1 -0
- package/dist/hooks/useUpdateIncident.esm.js +50 -0
- package/dist/hooks/useUpdateIncident.esm.js.map +1 -0
- package/dist/hooks/useUrlFilters.esm.js +63 -0
- package/dist/hooks/useUrlFilters.esm.js.map +1 -0
- package/dist/hooks/useUrlFiltersForAlerts.esm.js +80 -0
- package/dist/hooks/useUrlFiltersForAlerts.esm.js.map +1 -0
- package/dist/hooks/useUrlFiltersForIncidents.esm.js +87 -0
- package/dist/hooks/useUrlFiltersForIncidents.esm.js.map +1 -0
- package/dist/hooks/useUrlFiltersForRuntimeLogs.esm.js +135 -0
- package/dist/hooks/useUrlFiltersForRuntimeLogs.esm.js.map +1 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.esm.js +2 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/plugin.esm.js +107 -0
- package/dist/plugin.esm.js.map +1 -0
- package/dist/routes.esm.js +8 -0
- package/dist/routes.esm.js.map +1 -0
- package/dist/types.esm.js +18 -0
- package/dist/types.esm.js.map +1 -0
- package/dist/utils/applyResourceChange.esm.js +79 -0
- package/dist/utils/applyResourceChange.esm.js.map +1 -0
- package/dist/utils/urlTimeRange.esm.js +52 -0
- package/dist/utils/urlTimeRange.esm.js.map +1 -0
- package/package.json +81 -0
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { Grid, TextField, FormControl, InputLabel, Select, MenuItem, Checkbox } from '@material-ui/core';
|
|
3
|
+
import { Skeleton } from '@material-ui/lab';
|
|
4
|
+
import { TimeRangeFilter } from '../TimeRangeFilter/TimeRangeFilter.esm.js';
|
|
5
|
+
import { useDebouncedSearch } from '../../hooks/useDebouncedSearch.esm.js';
|
|
6
|
+
|
|
7
|
+
const TracesFilters = ({
|
|
8
|
+
filters,
|
|
9
|
+
onFiltersChange,
|
|
10
|
+
environments,
|
|
11
|
+
environmentsLoading,
|
|
12
|
+
components,
|
|
13
|
+
componentsLoading,
|
|
14
|
+
disabled = false
|
|
15
|
+
}) => {
|
|
16
|
+
const [searchInput, handleSearchChange] = useDebouncedSearch(
|
|
17
|
+
filters.searchQuery,
|
|
18
|
+
(value) => onFiltersChange({ searchQuery: value }),
|
|
19
|
+
500
|
|
20
|
+
);
|
|
21
|
+
const handleEnvironmentChange = (event) => {
|
|
22
|
+
const selectedEnvironment = environments.find(
|
|
23
|
+
(env) => env.uid === event.target.value
|
|
24
|
+
);
|
|
25
|
+
if (selectedEnvironment) {
|
|
26
|
+
onFiltersChange({ environment: selectedEnvironment });
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
const handleComponentChange = (event) => {
|
|
30
|
+
const value = event.target.value;
|
|
31
|
+
onFiltersChange({ components: value });
|
|
32
|
+
};
|
|
33
|
+
return /* @__PURE__ */ jsxs(Grid, { container: true, spacing: 3, children: [
|
|
34
|
+
/* @__PURE__ */ jsx(Grid, { item: true, xs: 12, md: 3, children: /* @__PURE__ */ jsx(
|
|
35
|
+
TextField,
|
|
36
|
+
{
|
|
37
|
+
fullWidth: true,
|
|
38
|
+
label: "Search Trace ID",
|
|
39
|
+
variant: "outlined",
|
|
40
|
+
value: searchInput,
|
|
41
|
+
onChange: handleSearchChange,
|
|
42
|
+
placeholder: "Enter Trace ID to search",
|
|
43
|
+
disabled
|
|
44
|
+
}
|
|
45
|
+
) }),
|
|
46
|
+
/* @__PURE__ */ jsx(Grid, { item: true, xs: 12, md: 3, children: /* @__PURE__ */ jsxs(
|
|
47
|
+
FormControl,
|
|
48
|
+
{
|
|
49
|
+
fullWidth: true,
|
|
50
|
+
disabled: disabled || componentsLoading,
|
|
51
|
+
variant: "outlined",
|
|
52
|
+
children: [
|
|
53
|
+
/* @__PURE__ */ jsx(InputLabel, { id: "components-label", children: "Components" }),
|
|
54
|
+
componentsLoading ? /* @__PURE__ */ jsx(Skeleton, { variant: "rect", height: 56 }) : /* @__PURE__ */ jsx(
|
|
55
|
+
Select,
|
|
56
|
+
{
|
|
57
|
+
multiple: true,
|
|
58
|
+
value: filters.components || [],
|
|
59
|
+
onChange: handleComponentChange,
|
|
60
|
+
labelId: "components-label",
|
|
61
|
+
label: "Component",
|
|
62
|
+
renderValue: (selected) => {
|
|
63
|
+
const selectedArray = selected;
|
|
64
|
+
if (selectedArray.length === 0) return "All";
|
|
65
|
+
return selectedArray.map((id) => {
|
|
66
|
+
const comp = components.find((c) => c.name === id);
|
|
67
|
+
return comp?.displayName || comp?.name || id;
|
|
68
|
+
}).join(", ");
|
|
69
|
+
},
|
|
70
|
+
children: components.map((component) => {
|
|
71
|
+
return /* @__PURE__ */ jsxs(MenuItem, { value: component.name, children: [
|
|
72
|
+
/* @__PURE__ */ jsx(
|
|
73
|
+
Checkbox,
|
|
74
|
+
{
|
|
75
|
+
checked: (filters.components || []).indexOf(component.name) > -1
|
|
76
|
+
}
|
|
77
|
+
),
|
|
78
|
+
component.displayName || component.name
|
|
79
|
+
] }, component.name);
|
|
80
|
+
})
|
|
81
|
+
}
|
|
82
|
+
)
|
|
83
|
+
]
|
|
84
|
+
}
|
|
85
|
+
) }),
|
|
86
|
+
/* @__PURE__ */ jsx(Grid, { item: true, xs: 12, md: 3, children: /* @__PURE__ */ jsxs(
|
|
87
|
+
FormControl,
|
|
88
|
+
{
|
|
89
|
+
fullWidth: true,
|
|
90
|
+
disabled: disabled || environmentsLoading,
|
|
91
|
+
variant: "outlined",
|
|
92
|
+
children: [
|
|
93
|
+
/* @__PURE__ */ jsx(InputLabel, { id: "environment-label", children: "Environment" }),
|
|
94
|
+
environmentsLoading ? /* @__PURE__ */ jsx(Skeleton, { variant: "rect", height: 56 }) : /* @__PURE__ */ jsx(
|
|
95
|
+
Select,
|
|
96
|
+
{
|
|
97
|
+
value: filters.environment?.uid || "",
|
|
98
|
+
onChange: handleEnvironmentChange,
|
|
99
|
+
labelId: "environment-label",
|
|
100
|
+
label: "Environment",
|
|
101
|
+
children: environments.map((env) => /* @__PURE__ */ jsx(MenuItem, { value: env.uid || env.name, children: env.displayName || env.name }, env.uid || env.name))
|
|
102
|
+
}
|
|
103
|
+
)
|
|
104
|
+
]
|
|
105
|
+
}
|
|
106
|
+
) }),
|
|
107
|
+
/* @__PURE__ */ jsx(Grid, { item: true, xs: 12, md: 3, children: /* @__PURE__ */ jsx(
|
|
108
|
+
TimeRangeFilter,
|
|
109
|
+
{
|
|
110
|
+
value: filters.timeRange,
|
|
111
|
+
customStartTime: filters.customStartTime,
|
|
112
|
+
customEndTime: filters.customEndTime,
|
|
113
|
+
onChange: onFiltersChange,
|
|
114
|
+
disabled
|
|
115
|
+
}
|
|
116
|
+
) })
|
|
117
|
+
] });
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
export { TracesFilters };
|
|
121
|
+
//# sourceMappingURL=TracesFilters.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TracesFilters.esm.js","sources":["../../../src/components/Traces/TracesFilters.tsx"],"sourcesContent":["import { FC, ChangeEvent } from 'react';\nimport {\n FormControl,\n InputLabel,\n Select,\n MenuItem,\n Grid,\n TextField,\n Checkbox,\n} from '@material-ui/core';\nimport { Skeleton } from '@material-ui/lab';\nimport { type Environment, Filters } from '../../types';\nimport { TimeRangeFilter } from '../TimeRangeFilter';\nimport { Component } from '../../hooks/useGetComponentsByProject';\nimport { useDebouncedSearch } from '../../hooks/useDebouncedSearch';\n\ninterface TracesFiltersProps {\n filters: Filters;\n onFiltersChange: (filters: Partial<Filters>) => void;\n environments: Environment[];\n environmentsLoading: boolean;\n components: Component[];\n componentsLoading: boolean;\n disabled?: boolean;\n}\n\nexport const TracesFilters: FC<TracesFiltersProps> = ({\n filters,\n onFiltersChange,\n environments,\n environmentsLoading,\n components,\n componentsLoading,\n disabled = false,\n}) => {\n const [searchInput, handleSearchChange] = useDebouncedSearch(\n filters.searchQuery,\n value => onFiltersChange({ searchQuery: value }),\n 500,\n );\n\n const handleEnvironmentChange = (event: ChangeEvent<{ value: unknown }>) => {\n const selectedEnvironment = environments.find(\n env => env.uid === (event.target.value as string),\n );\n if (selectedEnvironment) {\n onFiltersChange({ environment: selectedEnvironment });\n }\n };\n\n const handleComponentChange = (event: ChangeEvent<{ value: unknown }>) => {\n const value = event.target.value as string[];\n onFiltersChange({ components: value });\n };\n\n return (\n <Grid container spacing={3}>\n <Grid item xs={12} md={3}>\n <TextField\n fullWidth\n label=\"Search Trace ID\"\n variant=\"outlined\"\n value={searchInput}\n onChange={handleSearchChange}\n placeholder=\"Enter Trace ID to search\"\n disabled={disabled}\n />\n </Grid>\n\n <Grid item xs={12} md={3}>\n <FormControl\n fullWidth\n disabled={disabled || componentsLoading}\n variant=\"outlined\"\n >\n <InputLabel id=\"components-label\">Components</InputLabel>\n {componentsLoading ? (\n <Skeleton variant=\"rect\" height={56} />\n ) : (\n <Select\n multiple\n value={filters.components || []}\n onChange={handleComponentChange}\n labelId=\"components-label\"\n label=\"Component\"\n renderValue={selected => {\n const selectedArray = selected as string[];\n if (selectedArray.length === 0) return 'All';\n return selectedArray\n .map(id => {\n const comp = components.find(c => c.name === id);\n return comp?.displayName || comp?.name || id;\n })\n .join(', ');\n }}\n >\n {components.map(component => {\n return (\n <MenuItem key={component.name} value={component.name}>\n <Checkbox\n checked={\n (filters.components || []).indexOf(component.name) > -1\n }\n />\n {component.displayName || component.name}\n </MenuItem>\n );\n })}\n </Select>\n )}\n </FormControl>\n </Grid>\n\n <Grid item xs={12} md={3}>\n <FormControl\n fullWidth\n disabled={disabled || environmentsLoading}\n variant=\"outlined\"\n >\n <InputLabel id=\"environment-label\">Environment</InputLabel>\n {environmentsLoading ? (\n <Skeleton variant=\"rect\" height={56} />\n ) : (\n <Select\n value={filters.environment?.uid || ''}\n onChange={handleEnvironmentChange}\n labelId=\"environment-label\"\n label=\"Environment\"\n >\n {environments.map((env: Environment) => (\n <MenuItem key={env.uid || env.name} value={env.uid || env.name}>\n {env.displayName || env.name}\n </MenuItem>\n ))}\n </Select>\n )}\n </FormControl>\n </Grid>\n\n <Grid item xs={12} md={3}>\n <TimeRangeFilter\n value={filters.timeRange}\n customStartTime={filters.customStartTime}\n customEndTime={filters.customEndTime}\n onChange={onFiltersChange}\n disabled={disabled}\n />\n </Grid>\n </Grid>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, Fragment } from 'react';
|
|
3
|
+
import { Paper, Box, Table, TableHead, TableRow, TableCell, TableBody, Tooltip, IconButton, CircularProgress, Typography } from '@material-ui/core';
|
|
4
|
+
import ExpandMoreIcon from '@material-ui/icons/ExpandMore';
|
|
5
|
+
import ExpandLessIcon from '@material-ui/icons/ExpandLess';
|
|
6
|
+
import { WaterfallView } from './WaterfallView.esm.js';
|
|
7
|
+
import { useTracesTableStyles } from './styles.esm.js';
|
|
8
|
+
import { formatDuration } from './utils.esm.js';
|
|
9
|
+
|
|
10
|
+
const TracesTable = ({
|
|
11
|
+
traces,
|
|
12
|
+
traceSpans,
|
|
13
|
+
spanDetails,
|
|
14
|
+
loading = false
|
|
15
|
+
}) => {
|
|
16
|
+
const classes = useTracesTableStyles();
|
|
17
|
+
const [expandedRows, setExpandedRows] = useState(/* @__PURE__ */ new Set());
|
|
18
|
+
const toggleRowExpansion = (traceId) => {
|
|
19
|
+
const newExpanded = new Set(expandedRows);
|
|
20
|
+
if (newExpanded.has(traceId)) {
|
|
21
|
+
newExpanded.delete(traceId);
|
|
22
|
+
} else {
|
|
23
|
+
newExpanded.add(traceId);
|
|
24
|
+
traceSpans.fetchSpans(traceId);
|
|
25
|
+
}
|
|
26
|
+
setExpandedRows(newExpanded);
|
|
27
|
+
};
|
|
28
|
+
const renderEmptyState = () => {
|
|
29
|
+
if (loading) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
return /* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsx(TableCell, { colSpan: 6, children: /* @__PURE__ */ jsxs(Box, { className: classes.emptyState, children: [
|
|
33
|
+
/* @__PURE__ */ jsx(Typography, { variant: "h6", gutterBottom: true, children: "No traces found" }),
|
|
34
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body2", children: "Try adjusting your filters or time range to see more traces." })
|
|
35
|
+
] }) }) });
|
|
36
|
+
};
|
|
37
|
+
return /* @__PURE__ */ jsx(Paper, { className: classes.tablePaper, children: /* @__PURE__ */ jsx(Box, { className: classes.tableContainer, children: /* @__PURE__ */ jsxs(Table, { className: classes.table, "aria-label": "traces table", stickyHeader: true, children: [
|
|
38
|
+
/* @__PURE__ */ jsx(TableHead, { children: /* @__PURE__ */ jsxs(TableRow, { children: [
|
|
39
|
+
/* @__PURE__ */ jsx(TableCell, { className: classes.headerCell, width: "12%", children: "Trace Name" }),
|
|
40
|
+
/* @__PURE__ */ jsx(TableCell, { className: classes.headerCell, width: "20%", children: "Start Time" }),
|
|
41
|
+
/* @__PURE__ */ jsx(TableCell, { className: classes.headerCell, width: "20%", children: "End Time" }),
|
|
42
|
+
/* @__PURE__ */ jsx(TableCell, { className: classes.headerCell, width: "12%", children: "Duration" }),
|
|
43
|
+
/* @__PURE__ */ jsx(TableCell, { className: classes.headerCell, width: "12%", children: "Number of Spans" }),
|
|
44
|
+
/* @__PURE__ */ jsx(
|
|
45
|
+
TableCell,
|
|
46
|
+
{
|
|
47
|
+
className: classes.headerCell,
|
|
48
|
+
width: "12%",
|
|
49
|
+
align: "right",
|
|
50
|
+
children: "Details"
|
|
51
|
+
}
|
|
52
|
+
)
|
|
53
|
+
] }) }),
|
|
54
|
+
/* @__PURE__ */ jsxs(TableBody, { children: [
|
|
55
|
+
traces.length === 0 && !loading && renderEmptyState(),
|
|
56
|
+
traces.map((trace) => {
|
|
57
|
+
const isExpanded = expandedRows.has(trace.traceId);
|
|
58
|
+
const spans = traceSpans.getSpans(trace.traceId);
|
|
59
|
+
const spansLoading = traceSpans.isLoading(trace.traceId);
|
|
60
|
+
const spansError = traceSpans.getError(trace.traceId);
|
|
61
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
62
|
+
/* @__PURE__ */ jsxs(
|
|
63
|
+
TableRow,
|
|
64
|
+
{
|
|
65
|
+
className: `${classes.traceRow} ${isExpanded ? classes.expandedRow : ""} ${trace.hasErrors ? classes.errorRow : ""}`,
|
|
66
|
+
onClick: () => toggleRowExpansion(trace.traceId),
|
|
67
|
+
children: [
|
|
68
|
+
/* @__PURE__ */ jsxs(
|
|
69
|
+
TableCell,
|
|
70
|
+
{
|
|
71
|
+
component: "th",
|
|
72
|
+
scope: "row",
|
|
73
|
+
width: "12%",
|
|
74
|
+
className: classes.traceIdCell,
|
|
75
|
+
children: [
|
|
76
|
+
trace.hasErrors && /* @__PURE__ */ jsx(Tooltip, { title: "This trace contains errors", arrow: true, children: /* @__PURE__ */ jsx(
|
|
77
|
+
"span",
|
|
78
|
+
{
|
|
79
|
+
className: classes.errorStripe,
|
|
80
|
+
role: "presentation"
|
|
81
|
+
}
|
|
82
|
+
) }),
|
|
83
|
+
/* @__PURE__ */ jsx(Tooltip, { title: trace.traceId, children: /* @__PURE__ */ jsx("span", { children: trace.traceName || `${trace.traceId.slice(0, 8)}...` }) })
|
|
84
|
+
]
|
|
85
|
+
}
|
|
86
|
+
),
|
|
87
|
+
/* @__PURE__ */ jsx(TableCell, { width: "20%", className: classes.traceCell, children: trace.startTime }),
|
|
88
|
+
/* @__PURE__ */ jsx(TableCell, { width: "20%", className: classes.traceCell, children: trace.endTime }),
|
|
89
|
+
/* @__PURE__ */ jsx(TableCell, { width: "12%", className: classes.traceCell, children: formatDuration(trace.durationNs) }),
|
|
90
|
+
/* @__PURE__ */ jsx(TableCell, { width: "12%", className: classes.traceCell, children: trace.spanCount }),
|
|
91
|
+
/* @__PURE__ */ jsx(TableCell, { width: "12%", align: "right", children: /* @__PURE__ */ jsx(
|
|
92
|
+
IconButton,
|
|
93
|
+
{
|
|
94
|
+
size: "small",
|
|
95
|
+
onClick: (e) => {
|
|
96
|
+
e.stopPropagation();
|
|
97
|
+
toggleRowExpansion(trace.traceId);
|
|
98
|
+
},
|
|
99
|
+
className: classes.expandIcon,
|
|
100
|
+
children: isExpanded ? /* @__PURE__ */ jsx(ExpandLessIcon, {}) : /* @__PURE__ */ jsx(ExpandMoreIcon, {})
|
|
101
|
+
}
|
|
102
|
+
) })
|
|
103
|
+
]
|
|
104
|
+
}
|
|
105
|
+
),
|
|
106
|
+
isExpanded && /* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsxs(TableCell, { colSpan: 6, style: { padding: 0 }, children: [
|
|
107
|
+
spansLoading && /* @__PURE__ */ jsx(
|
|
108
|
+
Box,
|
|
109
|
+
{
|
|
110
|
+
display: "flex",
|
|
111
|
+
justifyContent: "center",
|
|
112
|
+
alignItems: "center",
|
|
113
|
+
p: 2,
|
|
114
|
+
children: /* @__PURE__ */ jsx(CircularProgress, { size: 24 })
|
|
115
|
+
}
|
|
116
|
+
),
|
|
117
|
+
spansError && /* @__PURE__ */ jsx(Box, { p: 2, children: /* @__PURE__ */ jsxs(Typography, { variant: "body2", color: "error", children: [
|
|
118
|
+
"Failed to load spans: ",
|
|
119
|
+
spansError
|
|
120
|
+
] }) }),
|
|
121
|
+
!spansLoading && !spansError && spans && /* @__PURE__ */ jsx(
|
|
122
|
+
WaterfallView,
|
|
123
|
+
{
|
|
124
|
+
traceId: trace.traceId,
|
|
125
|
+
spans,
|
|
126
|
+
spanDetails
|
|
127
|
+
}
|
|
128
|
+
)
|
|
129
|
+
] }) })
|
|
130
|
+
] }, trace.traceId);
|
|
131
|
+
})
|
|
132
|
+
] })
|
|
133
|
+
] }) }) });
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
export { TracesTable };
|
|
137
|
+
//# sourceMappingURL=TracesTable.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TracesTable.esm.js","sources":["../../../src/components/Traces/TracesTable.tsx"],"sourcesContent":["import { FC, useState, Fragment } from 'react';\nimport {\n Table,\n TableHead,\n TableBody,\n TableRow,\n TableCell,\n Paper,\n IconButton,\n Tooltip,\n Box,\n Typography,\n CircularProgress,\n} from '@material-ui/core';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport ExpandLessIcon from '@material-ui/icons/ExpandLess';\nimport { WaterfallView } from './WaterfallView';\nimport { useTracesTableStyles } from './styles';\nimport { Trace, Span, SpanDetails } from '../../types';\nimport { formatDuration } from './utils';\n\ninterface TraceSpansHook {\n fetchSpans: (traceId: string) => Promise<void>;\n getSpans: (traceId: string) => Span[] | undefined;\n isLoading: (traceId: string) => boolean;\n getError: (traceId: string) => string | undefined;\n}\n\ninterface SpanDetailsHook {\n fetchSpanDetails: (traceId: string, spanId: string) => Promise<void>;\n getDetails: (traceId: string, spanId: string) => SpanDetails | undefined;\n isLoading: (traceId: string, spanId: string) => boolean;\n getError: (traceId: string, spanId: string) => string | undefined;\n}\n\ninterface TracesTableProps {\n traces: Trace[];\n traceSpans: TraceSpansHook;\n spanDetails: SpanDetailsHook;\n loading?: boolean;\n}\n\nexport const TracesTable: FC<TracesTableProps> = ({\n traces,\n traceSpans,\n spanDetails,\n loading = false,\n}) => {\n const classes = useTracesTableStyles();\n const [expandedRows, setExpandedRows] = useState<Set<string>>(new Set());\n\n const toggleRowExpansion = (traceId: string) => {\n const newExpanded = new Set(expandedRows);\n if (newExpanded.has(traceId)) {\n newExpanded.delete(traceId);\n } else {\n newExpanded.add(traceId);\n // Trigger on-demand span fetch when expanding\n traceSpans.fetchSpans(traceId);\n }\n setExpandedRows(newExpanded);\n };\n\n const renderEmptyState = () => {\n if (loading) {\n return null;\n }\n\n return (\n <TableRow>\n <TableCell colSpan={6}>\n <Box className={classes.emptyState}>\n <Typography variant=\"h6\" gutterBottom>\n No traces found\n </Typography>\n <Typography variant=\"body2\">\n Try adjusting your filters or time range to see more traces.\n </Typography>\n </Box>\n </TableCell>\n </TableRow>\n );\n };\n\n return (\n <Paper className={classes.tablePaper}>\n <Box className={classes.tableContainer}>\n <Table className={classes.table} aria-label=\"traces table\" stickyHeader>\n <TableHead>\n <TableRow>\n <TableCell className={classes.headerCell} width=\"12%\">\n Trace Name\n </TableCell>\n <TableCell className={classes.headerCell} width=\"20%\">\n Start Time\n </TableCell>\n <TableCell className={classes.headerCell} width=\"20%\">\n End Time\n </TableCell>\n <TableCell className={classes.headerCell} width=\"12%\">\n Duration\n </TableCell>\n <TableCell className={classes.headerCell} width=\"12%\">\n Number of Spans\n </TableCell>\n <TableCell\n className={classes.headerCell}\n width=\"12%\"\n align=\"right\"\n >\n Details\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {traces.length === 0 && !loading && renderEmptyState()}\n\n {traces.map(trace => {\n const isExpanded = expandedRows.has(trace.traceId);\n const spans = traceSpans.getSpans(trace.traceId);\n const spansLoading = traceSpans.isLoading(trace.traceId);\n const spansError = traceSpans.getError(trace.traceId);\n\n return (\n <Fragment key={trace.traceId}>\n <TableRow\n className={`${classes.traceRow} ${\n isExpanded ? classes.expandedRow : ''\n } ${trace.hasErrors ? classes.errorRow : ''}`}\n onClick={() => toggleRowExpansion(trace.traceId)}\n >\n <TableCell\n component=\"th\"\n scope=\"row\"\n width=\"12%\"\n className={classes.traceIdCell}\n >\n {trace.hasErrors && (\n <Tooltip title=\"This trace contains errors\" arrow>\n <span\n className={classes.errorStripe}\n role=\"presentation\"\n />\n </Tooltip>\n )}\n <Tooltip title={trace.traceId}>\n <span>\n {trace.traceName || `${trace.traceId.slice(0, 8)}...`}\n </span>\n </Tooltip>\n </TableCell>\n <TableCell width=\"20%\" className={classes.traceCell}>\n {trace.startTime}\n </TableCell>\n <TableCell width=\"20%\" className={classes.traceCell}>\n {trace.endTime}\n </TableCell>\n <TableCell width=\"12%\" className={classes.traceCell}>\n {formatDuration(trace.durationNs)}\n </TableCell>\n <TableCell width=\"12%\" className={classes.traceCell}>\n {trace.spanCount}\n </TableCell>\n <TableCell width=\"12%\" align=\"right\">\n <IconButton\n size=\"small\"\n onClick={e => {\n e.stopPropagation();\n toggleRowExpansion(trace.traceId);\n }}\n className={classes.expandIcon}\n >\n {isExpanded ? <ExpandLessIcon /> : <ExpandMoreIcon />}\n </IconButton>\n </TableCell>\n </TableRow>\n\n {isExpanded && (\n <TableRow>\n <TableCell colSpan={6} style={{ padding: 0 }}>\n {spansLoading && (\n <Box\n display=\"flex\"\n justifyContent=\"center\"\n alignItems=\"center\"\n p={2}\n >\n <CircularProgress size={24} />\n </Box>\n )}\n {spansError && (\n <Box p={2}>\n <Typography variant=\"body2\" color=\"error\">\n Failed to load spans: {spansError}\n </Typography>\n </Box>\n )}\n {!spansLoading && !spansError && spans && (\n <WaterfallView\n traceId={trace.traceId}\n spans={spans}\n spanDetails={spanDetails}\n />\n )}\n </TableCell>\n </TableRow>\n )}\n </Fragment>\n );\n })}\n </TableBody>\n </Table>\n </Box>\n </Paper>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AA0CO,MAAM,cAAoC,CAAC;AAAA,EAChD,MAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA,GAAU;AACZ,CAAA,KAAM;AACJ,EAAA,MAAM,UAAU,oBAAA,EAAqB;AACrC,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,IAAI,QAAA,iBAAsB,IAAI,KAAK,CAAA;AAEvE,EAAA,MAAM,kBAAA,GAAqB,CAAC,OAAA,KAAoB;AAC9C,IAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,YAAY,CAAA;AACxC,IAAA,IAAI,WAAA,CAAY,GAAA,CAAI,OAAO,CAAA,EAAG;AAC5B,MAAA,WAAA,CAAY,OAAO,OAAO,CAAA;AAAA,IAC5B,CAAA,MAAO;AACL,MAAA,WAAA,CAAY,IAAI,OAAO,CAAA;AAEvB,MAAA,UAAA,CAAW,WAAW,OAAO,CAAA;AAAA,IAC/B;AACA,IAAA,eAAA,CAAgB,WAAW,CAAA;AAAA,EAC7B,CAAA;AAEA,EAAA,MAAM,mBAAmB,MAAM;AAC7B,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,uBACE,GAAA,CAAC,QAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,SAAA,EAAA,EAAU,OAAA,EAAS,GAClB,QAAA,kBAAA,IAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,UAAA,EACtB,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,IAAA,EAAK,YAAA,EAAY,MAAC,QAAA,EAAA,iBAAA,EAEtC,CAAA;AAAA,sBACA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,OAAA,EAAQ,QAAA,EAAA,8DAAA,EAE5B;AAAA,KAAA,EACF,GACF,CAAA,EACF,CAAA;AAAA,EAEJ,CAAA;AAEA,EAAA,2BACG,KAAA,EAAA,EAAM,SAAA,EAAW,QAAQ,UAAA,EACxB,QAAA,kBAAA,GAAA,CAAC,OAAI,SAAA,EAAW,OAAA,CAAQ,cAAA,EACtB,QAAA,kBAAA,IAAA,CAAC,SAAM,SAAA,EAAW,OAAA,CAAQ,OAAO,YAAA,EAAW,cAAA,EAAe,cAAY,IAAA,EACrE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,SAAA,EAAA,EACC,+BAAC,QAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,aAAU,SAAA,EAAW,OAAA,CAAQ,UAAA,EAAY,KAAA,EAAM,OAAM,QAAA,EAAA,YAAA,EAEtD,CAAA;AAAA,0BACC,SAAA,EAAA,EAAU,SAAA,EAAW,QAAQ,UAAA,EAAY,KAAA,EAAM,OAAM,QAAA,EAAA,YAAA,EAEtD,CAAA;AAAA,0BACC,SAAA,EAAA,EAAU,SAAA,EAAW,QAAQ,UAAA,EAAY,KAAA,EAAM,OAAM,QAAA,EAAA,UAAA,EAEtD,CAAA;AAAA,0BACC,SAAA,EAAA,EAAU,SAAA,EAAW,QAAQ,UAAA,EAAY,KAAA,EAAM,OAAM,QAAA,EAAA,UAAA,EAEtD,CAAA;AAAA,0BACC,SAAA,EAAA,EAAU,SAAA,EAAW,QAAQ,UAAA,EAAY,KAAA,EAAM,OAAM,QAAA,EAAA,iBAAA,EAEtD,CAAA;AAAA,sBACA,GAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACC,WAAW,OAAA,CAAQ,UAAA;AAAA,UACnB,KAAA,EAAM,KAAA;AAAA,UACN,KAAA,EAAM,OAAA;AAAA,UACP,QAAA,EAAA;AAAA;AAAA;AAED,KAAA,EACF,CAAA,EACF,CAAA;AAAA,yBACC,SAAA,EAAA,EACE,QAAA,EAAA;AAAA,MAAA,MAAA,CAAO,MAAA,KAAW,CAAA,IAAK,CAAC,OAAA,IAAW,gBAAA,EAAiB;AAAA,MAEpD,MAAA,CAAO,IAAI,CAAA,KAAA,KAAS;AACnB,QAAA,MAAM,UAAA,GAAa,YAAA,CAAa,GAAA,CAAI,KAAA,CAAM,OAAO,CAAA;AACjD,QAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AAC/C,QAAA,MAAM,YAAA,GAAe,UAAA,CAAW,SAAA,CAAU,KAAA,CAAM,OAAO,CAAA;AACvD,QAAA,MAAM,UAAA,GAAa,UAAA,CAAW,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AAEpD,QAAA,4BACG,QAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,IAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,CAAA,EAAG,OAAA,CAAQ,QAAQ,IAC5B,UAAA,GAAa,OAAA,CAAQ,WAAA,GAAc,EACrC,CAAA,CAAA,EAAI,KAAA,CAAM,SAAA,GAAY,OAAA,CAAQ,WAAW,EAAE,CAAA,CAAA;AAAA,cAC3C,OAAA,EAAS,MAAM,kBAAA,CAAmB,KAAA,CAAM,OAAO,CAAA;AAAA,cAE/C,QAAA,EAAA;AAAA,gCAAA,IAAA;AAAA,kBAAC,SAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAU,IAAA;AAAA,oBACV,KAAA,EAAM,KAAA;AAAA,oBACN,KAAA,EAAM,KAAA;AAAA,oBACN,WAAW,OAAA,CAAQ,WAAA;AAAA,oBAElB,QAAA,EAAA;AAAA,sBAAA,KAAA,CAAM,6BACL,GAAA,CAAC,OAAA,EAAA,EAAQ,KAAA,EAAM,4BAAA,EAA6B,OAAK,IAAA,EAC/C,QAAA,kBAAA,GAAA;AAAA,wBAAC,MAAA;AAAA,wBAAA;AAAA,0BACC,WAAW,OAAA,CAAQ,WAAA;AAAA,0BACnB,IAAA,EAAK;AAAA;AAAA,uBACP,EACF,CAAA;AAAA,0CAED,OAAA,EAAA,EAAQ,KAAA,EAAO,KAAA,CAAM,OAAA,EACpB,8BAAC,MAAA,EAAA,EACE,QAAA,EAAA,KAAA,CAAM,SAAA,IAAa,CAAA,EAAG,MAAM,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAC,CAAC,OAClD,CAAA,EACF;AAAA;AAAA;AAAA,iBACF;AAAA,gCACA,GAAA,CAAC,aAAU,KAAA,EAAM,KAAA,EAAM,WAAW,OAAA,CAAQ,SAAA,EACvC,gBAAM,SAAA,EACT,CAAA;AAAA,gCACA,GAAA,CAAC,aAAU,KAAA,EAAM,KAAA,EAAM,WAAW,OAAA,CAAQ,SAAA,EACvC,gBAAM,OAAA,EACT,CAAA;AAAA,gCACA,GAAA,CAAC,SAAA,EAAA,EAAU,KAAA,EAAM,KAAA,EAAM,SAAA,EAAW,QAAQ,SAAA,EACvC,QAAA,EAAA,cAAA,CAAe,KAAA,CAAM,UAAU,CAAA,EAClC,CAAA;AAAA,gCACA,GAAA,CAAC,aAAU,KAAA,EAAM,KAAA,EAAM,WAAW,OAAA,CAAQ,SAAA,EACvC,gBAAM,SAAA,EACT,CAAA;AAAA,gCACA,GAAA,CAAC,SAAA,EAAA,EAAU,KAAA,EAAM,KAAA,EAAM,OAAM,OAAA,EAC3B,QAAA,kBAAA,GAAA;AAAA,kBAAC,UAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,OAAA;AAAA,oBACL,SAAS,CAAA,CAAA,KAAK;AACZ,sBAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,sBAAA,kBAAA,CAAmB,MAAM,OAAO,CAAA;AAAA,oBAClC,CAAA;AAAA,oBACA,WAAW,OAAA,CAAQ,UAAA;AAAA,oBAElB,QAAA,EAAA,UAAA,mBAAa,GAAA,CAAC,cAAA,EAAA,EAAe,CAAA,uBAAM,cAAA,EAAA,EAAe;AAAA;AAAA,iBACrD,EACF;AAAA;AAAA;AAAA,WACF;AAAA,UAEC,UAAA,oBACC,GAAA,CAAC,QAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,SAAA,EAAA,EAAU,OAAA,EAAS,CAAA,EAAG,KAAA,EAAO,EAAE,OAAA,EAAS,CAAA,EAAE,EACxC,QAAA,EAAA;AAAA,YAAA,YAAA,oBACC,GAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,MAAA;AAAA,gBACR,cAAA,EAAe,QAAA;AAAA,gBACf,UAAA,EAAW,QAAA;AAAA,gBACX,CAAA,EAAG,CAAA;AAAA,gBAEH,QAAA,kBAAA,GAAA,CAAC,gBAAA,EAAA,EAAiB,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA,aAC9B;AAAA,YAED,UAAA,oBACC,GAAA,CAAC,GAAA,EAAA,EAAI,CAAA,EAAG,CAAA,EACN,+BAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,OAAA,EAAQ,KAAA,EAAM,OAAA,EAAQ,QAAA,EAAA;AAAA,cAAA,wBAAA;AAAA,cACjB;AAAA,aAAA,EACzB,CAAA,EACF,CAAA;AAAA,YAED,CAAC,YAAA,IAAgB,CAAC,UAAA,IAAc,KAAA,oBAC/B,GAAA;AAAA,cAAC,aAAA;AAAA,cAAA;AAAA,gBACC,SAAS,KAAA,CAAM,OAAA;AAAA,gBACf,KAAA;AAAA,gBACA;AAAA;AAAA;AACF,WAAA,EAEJ,CAAA,EACF;AAAA,SAAA,EAAA,EAjFW,MAAM,OAmFrB,CAAA;AAAA,MAEJ,CAAC;AAAA,KAAA,EACH;AAAA,GAAA,EACF,GACF,CAAA,EACF,CAAA;AAEJ;;;;"}
|