ydb-embedded-ui 11.2.0 → 11.3.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.
Files changed (105) hide show
  1. package/dist/components/DoughnutMetrics/DoughnutMetrics.d.ts +5 -3
  2. package/dist/components/DoughnutMetrics/DoughnutMetrics.js +18 -8
  3. package/dist/components/DoughnutMetrics/DoughnutMetrics.js.map +1 -1
  4. package/dist/components/DoughnutMetrics/DoughnutMetrics.scss +38 -27
  5. package/dist/components/MetricChart/MetricChart.d.ts +4 -9
  6. package/dist/components/MetricChart/MetricChart.js +10 -6
  7. package/dist/components/MetricChart/MetricChart.js.map +1 -1
  8. package/dist/components/MetricChart/MetricChart.scss +5 -7
  9. package/dist/components/QueriesActivityBar/QueriesActivityBar.js +5 -2
  10. package/dist/components/QueriesActivityBar/QueriesActivityBar.js.map +1 -1
  11. package/dist/components/QueriesActivityBar/QueriesActivityBar.scss +18 -21
  12. package/dist/components/QueriesActivityBar/QueriesActivityCharts.js +1 -13
  13. package/dist/components/QueriesActivityBar/QueriesActivityCharts.js.map +1 -1
  14. package/dist/components/SpeedMultiMeter/SpeedMultiMeter.scss +3 -0
  15. package/dist/components/VDiskInfo/VDiskInfo.js +43 -2
  16. package/dist/components/VDiskInfo/VDiskInfo.js.map +1 -1
  17. package/dist/components/VDiskInfo/i18n/en.json +3 -0
  18. package/dist/components/VDiskInfo/i18n/index.d.ts +1 -1
  19. package/dist/components/VDiskPopup/VDiskPopup.js +21 -2
  20. package/dist/components/VDiskPopup/VDiskPopup.js.map +1 -1
  21. package/dist/containers/App/App.d.ts +3 -10
  22. package/dist/containers/App/App.js +11 -8
  23. package/dist/containers/App/App.js.map +1 -1
  24. package/dist/containers/App/App.scss +1 -1
  25. package/dist/containers/App/AppTitleContext.d.ts +11 -0
  26. package/dist/containers/App/AppTitleContext.js +14 -0
  27. package/dist/containers/App/AppTitleContext.js.map +1 -0
  28. package/dist/containers/App/Providers.d.ts +2 -1
  29. package/dist/containers/App/Providers.js +3 -2
  30. package/dist/containers/App/Providers.js.map +1 -1
  31. package/dist/containers/AppWithClusters/AppWithClusters.d.ts +2 -1
  32. package/dist/containers/AppWithClusters/AppWithClusters.js +2 -2
  33. package/dist/containers/AppWithClusters/AppWithClusters.js.map +1 -1
  34. package/dist/containers/Cluster/Cluster.js +3 -1
  35. package/dist/containers/Cluster/Cluster.js.map +1 -1
  36. package/dist/containers/Cluster/ClusterOverview/components/ClusterMetricsCores.js +1 -11
  37. package/dist/containers/Cluster/ClusterOverview/components/ClusterMetricsCores.js.map +1 -1
  38. package/dist/containers/Cluster/ClusterOverview/components/ClusterMetricsMemory.js +1 -5
  39. package/dist/containers/Cluster/ClusterOverview/components/ClusterMetricsMemory.js.map +1 -1
  40. package/dist/containers/Cluster/ClusterOverview/components/ClusterMetricsStorage.js +1 -5
  41. package/dist/containers/Cluster/ClusterOverview/components/ClusterMetricsStorage.js.map +1 -1
  42. package/dist/containers/Node/Node.js +3 -1
  43. package/dist/containers/Node/Node.js.map +1 -1
  44. package/dist/containers/PDiskPage/PDiskPage.js +3 -1
  45. package/dist/containers/PDiskPage/PDiskPage.js.map +1 -1
  46. package/dist/containers/StorageGroupPage/StorageGroupPage.js +3 -1
  47. package/dist/containers/StorageGroupPage/StorageGroupPage.js.map +1 -1
  48. package/dist/containers/Tenant/Diagnostics/TenantOverview/DefaultOverviewContent/defaultDashboardConfig.js +1 -1
  49. package/dist/containers/Tenant/Diagnostics/TenantOverview/DefaultOverviewContent/defaultDashboardConfig.js.map +1 -1
  50. package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckPreview.scss +1 -0
  51. package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricsCards.d.ts +0 -8
  52. package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricsCards.js +26 -93
  53. package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricsCards.js.map +1 -1
  54. package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricsCards.scss +219 -5
  55. package/dist/containers/Tenant/Diagnostics/TenantOverview/TabCard/TabCard.d.ts +16 -0
  56. package/dist/containers/Tenant/Diagnostics/TenantOverview/TabCard/TabCard.js +16 -0
  57. package/dist/containers/Tenant/Diagnostics/TenantOverview/TabCard/TabCard.js.map +1 -0
  58. package/dist/containers/Tenant/Diagnostics/TenantOverview/TabCard/TabCard.scss +29 -0
  59. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantDashboard/TenantDashboard.js +3 -11
  60. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantDashboard/TenantDashboard.js.map +1 -1
  61. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantDashboard/TenantDashboard.scss +0 -8
  62. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.js +2 -6
  63. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.js.map +1 -1
  64. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.scss +13 -2
  65. package/dist/containers/Tenant/Diagnostics/TenantOverview/i18n/en.json +11 -3
  66. package/dist/containers/Tenant/Diagnostics/TenantOverview/i18n/index.d.ts +1 -1
  67. package/dist/containers/Tenant/Tenant.js +3 -1
  68. package/dist/containers/Tenant/Tenant.js.map +1 -1
  69. package/dist/containers/VDiskPage/VDiskPage.js +3 -1
  70. package/dist/containers/VDiskPage/VDiskPage.js.map +1 -1
  71. package/dist/store/reducers/tenant/tenant.d.ts +1 -0
  72. package/dist/store/reducers/tenant/tenant.js +7 -2
  73. package/dist/store/reducers/tenant/tenant.js.map +1 -1
  74. package/dist/store/reducers/tenant/types.d.ts +1 -1
  75. package/dist/store/state-url-mapping.d.ts +1 -0
  76. package/dist/store/state-url-mapping.js +2 -0
  77. package/dist/store/state-url-mapping.js.map +1 -1
  78. package/dist/utils/disks/prepareDisks.js +20 -1
  79. package/dist/utils/disks/prepareDisks.js.map +1 -1
  80. package/dist/utils/metrics/formatMetricLegend.d.ts +6 -0
  81. package/dist/utils/metrics/formatMetricLegend.js +17 -0
  82. package/dist/utils/metrics/formatMetricLegend.js.map +1 -0
  83. package/dist/utils/metrics/i18n/en.json +4 -0
  84. package/dist/utils/metrics/i18n/index.d.ts +2 -0
  85. package/dist/utils/metrics/i18n/index.js +5 -0
  86. package/dist/utils/metrics/i18n/index.js.map +1 -0
  87. package/dist/utils/metrics.d.ts +42 -0
  88. package/dist/utils/metrics.js +58 -0
  89. package/dist/utils/metrics.js.map +1 -0
  90. package/package.json +1 -1
  91. package/dist/components/DiagnosticCard/DiagnosticCard.d.ts +0 -9
  92. package/dist/components/DiagnosticCard/DiagnosticCard.js +0 -8
  93. package/dist/components/DiagnosticCard/DiagnosticCard.js.map +0 -1
  94. package/dist/components/DiagnosticCard/DiagnosticCard.scss +0 -35
  95. package/dist/components/TimeFrameSelector/TimeFrameSelector.d.ts +0 -9
  96. package/dist/components/TimeFrameSelector/TimeFrameSelector.js +0 -12
  97. package/dist/components/TimeFrameSelector/TimeFrameSelector.js.map +0 -1
  98. package/dist/components/TimeFrameSelector/TimeFrameSelector.scss +0 -4
  99. package/dist/containers/Tenant/Diagnostics/TenantOverview/DefaultOverviewContent/DefaultOverviewContent.d.ts +0 -5
  100. package/dist/containers/Tenant/Diagnostics/TenantOverview/DefaultOverviewContent/DefaultOverviewContent.js +0 -7
  101. package/dist/containers/Tenant/Diagnostics/TenantOverview/DefaultOverviewContent/DefaultOverviewContent.js.map +0 -1
  102. package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricCard/MetricCard.d.ts +0 -16
  103. package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricCard/MetricCard.js +0 -37
  104. package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricCard/MetricCard.js.map +0 -1
  105. package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricCard/MetricCard.scss +0 -48
@@ -15,6 +15,7 @@ import { EFlag } from '../../types/api/enums';
15
15
  import { valueIsDefined } from '../../utils';
16
16
  import { cn } from '../../utils/cn';
17
17
  import { useAutoRefreshInterval, useTypedDispatch } from '../../utils/hooks';
18
+ import { useAppTitle } from '../App/AppTitleContext';
18
19
  import { PaginatedStorage } from '../Storage/PaginatedStorage';
19
20
  import { storageGroupPageKeyset } from './i18n';
20
21
  import './StorageGroupPage.scss';
@@ -38,11 +39,12 @@ export function StorageGroupPage() {
38
39
  });
39
40
  const storageGroupData = (_b = (_a = groupQuery.data) === null || _a === void 0 ? void 0 : _a.groups) === null || _b === void 0 ? void 0 : _b[0];
40
41
  const loading = groupQuery.isFetching && storageGroupData === undefined;
42
+ const { appTitle } = useAppTitle();
41
43
  const renderHelmet = () => {
42
44
  const pageTitle = groupId
43
45
  ? `${storageGroupPageKeyset('storage-group')} ${groupId}`
44
46
  : storageGroupPageKeyset('storage-group');
45
- return (_jsx(Helmet, { titleTemplate: `%s - ${pageTitle} — YDB Monitoring`, defaultTitle: `${pageTitle} — YDB Monitoring` }));
47
+ return (_jsx(Helmet, { titleTemplate: `%s - ${pageTitle} — ${appTitle}`, defaultTitle: `${pageTitle} — ${appTitle}` }));
46
48
  };
47
49
  const renderPageMeta = () => {
48
50
  if (!groupId) {
@@ -1 +1 @@
1
- {"version":3,"file":"StorageGroupPage.js","sourceRoot":"","sources":["../../../src/containers/StorageGroupPage/StorageGroupPage.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StorageGroupPage.js","sourceRoot":"","sources":["../../../src/containers/StorageGroupPage/StorageGroupPage.tsx"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ export const defaultDashboardConfig = [
10
10
  ],
11
11
  },
12
12
  {
13
- title: i18n('charts.transaction-latency', { percentile: '' }),
13
+ title: i18n('charts.queries-latency', { percentile: '' }),
14
14
  metrics: [
15
15
  {
16
16
  target: 'queries.latencies.p50',
@@ -1 +1 @@
1
- {"version":3,"file":"defaultDashboardConfig.js","sourceRoot":"","sources":["../../../../../../src/containers/Tenant/Diagnostics/TenantOverview/DefaultOverviewContent/defaultDashboardConfig.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,MAAM,CAAC,MAAM,sBAAsB,GAAkB;IACjD;QACI,KAAK,EAAE,IAAI,CAAC,2BAA2B,CAAC;QACxC,OAAO,EAAE;YACL;gBACI,MAAM,EAAE,kBAAkB;gBAC1B,KAAK,EAAE,IAAI,CAAC,2BAA2B,CAAC;aAC3C;SACJ;KACJ;IACD;QACI,KAAK,EAAE,IAAI,CAAC,4BAA4B,EAAE,EAAC,UAAU,EAAE,EAAE,EAAC,CAAC;QAC3D,OAAO,EAAE;YACL;gBACI,MAAM,EAAE,uBAAuB;gBAC/B,KAAK,EAAE,KAAK;aACf;YACD;gBACI,MAAM,EAAE,uBAAuB;gBAC/B,KAAK,EAAE,KAAK;aACf;YACD;gBACI,MAAM,EAAE,uBAAuB;gBAC/B,KAAK,EAAE,KAAK;aACf;YACD;gBACI,MAAM,EAAE,uBAAuB;gBAC/B,KAAK,EAAE,KAAK;aACf;SACJ;QACD,OAAO,EAAE;YACL,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,IAAI;SACnB;KACJ;CACJ,CAAC"}
1
+ {"version":3,"file":"defaultDashboardConfig.js","sourceRoot":"","sources":["../../../../../../src/containers/Tenant/Diagnostics/TenantOverview/DefaultOverviewContent/defaultDashboardConfig.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,MAAM,CAAC,MAAM,sBAAsB,GAAkB;IACjD;QACI,KAAK,EAAE,IAAI,CAAC,2BAA2B,CAAC;QACxC,OAAO,EAAE;YACL;gBACI,MAAM,EAAE,kBAAkB;gBAC1B,KAAK,EAAE,IAAI,CAAC,2BAA2B,CAAC;aAC3C;SACJ;KACJ;IACD;QACI,KAAK,EAAE,IAAI,CAAC,wBAAwB,EAAE,EAAC,UAAU,EAAE,EAAE,EAAC,CAAC;QACvD,OAAO,EAAE;YACL;gBACI,MAAM,EAAE,uBAAuB;gBAC/B,KAAK,EAAE,KAAK;aACf;YACD;gBACI,MAAM,EAAE,uBAAuB;gBAC/B,KAAK,EAAE,KAAK;aACf;YACD;gBACI,MAAM,EAAE,uBAAuB;gBAC/B,KAAK,EAAE,KAAK;aACf;YACD;gBACI,MAAM,EAAE,uBAAuB;gBAC/B,KAAK,EAAE,KAAK;aACf;SACJ;QACD,OAAO,EAAE;YACL,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,IAAI;SACnB;KACJ;CACJ,CAAC"}
@@ -1,5 +1,6 @@
1
1
  .ydb-healthcheck-preview {
2
2
  $block: &;
3
+ border-radius: var(--g-border-radius-s);
3
4
 
4
5
  &__skeleton {
5
6
  width: 100%;
@@ -1,13 +1,5 @@
1
1
  import type { TenantMetricStats, TenantPoolsStats, TenantStorageStats } from '../../../../../store/reducers/tenants/utils';
2
2
  import './MetricsCards.scss';
3
- export interface TenantMetrics {
4
- memoryUsed?: number;
5
- memoryLimit?: number;
6
- cpuUsed?: number;
7
- cpuUsage?: number;
8
- storageUsed?: number;
9
- storageLimit?: number;
10
- }
11
3
  interface MetricsCardsProps {
12
4
  poolsCpuStats?: TenantPoolsStats[];
13
5
  memoryStats?: TenantMetricStats[];
@@ -1,121 +1,54 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Flex } from '@gravity-ui/uikit';
2
3
  import { Link, useLocation } from 'react-router-dom';
3
4
  import { parseQuery } from '../../../../../routes';
4
5
  import { TENANT_METRICS_TABS_IDS } from '../../../../../store/reducers/tenant/constants';
5
- import { METRIC_STATUS, MetricStatusToSeverity, } from '../../../../../store/reducers/tenants/contants';
6
- import { getMetricStatusFromUsage } from '../../../../../store/reducers/tenants/utils';
7
- import { formatBytes } from '../../../../../utils/bytesParsers';
8
6
  import { cn } from '../../../../../utils/cn';
9
7
  import { SHOW_NETWORK_UTILIZATION } from '../../../../../utils/constants';
10
- import { formatStorageValues } from '../../../../../utils/dataFormatters/dataFormatters';
11
8
  import { useSetting, useTypedSelector } from '../../../../../utils/hooks';
9
+ import { calculateMetricAggregates } from '../../../../../utils/metrics';
10
+ import { formatCoresLegend, formatStorageLegend, } from '../../../../../utils/metrics/formatMetricLegend';
12
11
  import { TenantTabsGroups, getTenantPath } from '../../../TenantPages';
12
+ import { TabCard } from '../TabCard/TabCard';
13
13
  import i18n from '../i18n';
14
- import { MetricCard } from './MetricCard/MetricCard';
15
14
  import './MetricsCards.scss';
16
- const b = cn('metrics-cards');
15
+ const b = cn('tenant-metrics-cards');
17
16
  export function MetricsCards({ poolsCpuStats, memoryStats, blobStorageStats, tabletStorageStats, networkStats, }) {
18
17
  const location = useLocation();
19
18
  const { metricsTab } = useTypedSelector((state) => state.tenant);
20
19
  const queryParams = parseQuery(location);
21
- // Allow tabs untoggle behaviour
22
- const getTabIfNotActive = (tab) => {
23
- if (tab === metricsTab) {
24
- return '';
25
- }
26
- return tab;
27
- };
28
20
  const tabLinks = {
29
21
  [TENANT_METRICS_TABS_IDS.cpu]: getTenantPath({
30
22
  ...queryParams,
31
- [TenantTabsGroups.metricsTab]: getTabIfNotActive(TENANT_METRICS_TABS_IDS.cpu),
23
+ [TenantTabsGroups.metricsTab]: TENANT_METRICS_TABS_IDS.cpu,
32
24
  }),
33
25
  [TENANT_METRICS_TABS_IDS.storage]: getTenantPath({
34
26
  ...queryParams,
35
- [TenantTabsGroups.metricsTab]: getTabIfNotActive(TENANT_METRICS_TABS_IDS.storage),
27
+ [TenantTabsGroups.metricsTab]: TENANT_METRICS_TABS_IDS.storage,
36
28
  }),
37
29
  [TENANT_METRICS_TABS_IDS.memory]: getTenantPath({
38
30
  ...queryParams,
39
- [TenantTabsGroups.metricsTab]: getTabIfNotActive(TENANT_METRICS_TABS_IDS.memory),
31
+ [TenantTabsGroups.metricsTab]: TENANT_METRICS_TABS_IDS.memory,
40
32
  }),
41
33
  };
42
- return (_jsxs("div", { className: b(), children: [_jsx(Link, { to: tabLinks.cpu, className: b('tab'), children: _jsx(CPUCard, { poolsCpuStats: poolsCpuStats, active: metricsTab === TENANT_METRICS_TABS_IDS.cpu }) }), _jsx(Link, { to: tabLinks.storage, className: b('tab'), children: _jsx(StorageCard, { blobStorageStats: blobStorageStats, tabletStorageStats: tabletStorageStats, active: metricsTab === TENANT_METRICS_TABS_IDS.storage }) }), _jsx(Link, { to: tabLinks.memory, className: b('tab'), children: _jsx(MemoryCard, { memoryStats: memoryStats, active: metricsTab === TENANT_METRICS_TABS_IDS.memory }) }), _jsx(NetworkCard, { networkStats: networkStats })] }));
43
- }
44
- function CPUCard({ poolsCpuStats = [], active }) {
45
- let status = METRIC_STATUS.Unspecified;
46
- const metrics = poolsCpuStats
47
- // Use only pools that directly indicate resources available to perform user queries
48
- .filter((pool) => !(pool.name === 'Batch' || pool.name === 'IO'))
49
- .map((pool) => {
50
- const { name, usage, limit, used } = pool;
51
- const poolStatus = getMetricStatusFromUsage(usage);
52
- if (MetricStatusToSeverity[poolStatus] > MetricStatusToSeverity[status]) {
53
- status = poolStatus;
54
- }
55
- return {
56
- title: name,
57
- value: used,
58
- capacity: limit,
59
- };
60
- });
61
- return (_jsx(MetricCard, { label: i18n('cards.cpu-label'), active: active, metrics: metrics, status: status }));
62
- }
63
- function StorageCard({ blobStorageStats = [], tabletStorageStats, active }) {
64
- let status = METRIC_STATUS.Unspecified;
65
- // Display tablet storage stats if limits are set and blob storage stats otherwise
66
- const storageStats = tabletStorageStats || blobStorageStats;
67
- const metrics = storageStats.map((metric) => {
68
- const { name, used, limit, usage } = metric;
69
- const metircStatus = getMetricStatusFromUsage(usage);
70
- if (MetricStatusToSeverity[metircStatus] > MetricStatusToSeverity[status]) {
71
- status = metircStatus;
72
- }
73
- return {
74
- title: name,
75
- value: used,
76
- capacity: limit,
77
- formatValues: formatStorageValues,
78
- };
79
- });
80
- return (_jsx(MetricCard, { label: i18n('cards.storage-label'), active: active, metrics: metrics, status: status }));
81
- }
82
- function MemoryCard({ active, memoryStats = [] }) {
83
- let status = METRIC_STATUS.Unspecified;
84
- const metrics = memoryStats.map((metric) => {
85
- const { name, used, limit, usage } = metric;
86
- const metircStatus = getMetricStatusFromUsage(usage);
87
- if (MetricStatusToSeverity[metircStatus] > MetricStatusToSeverity[status]) {
88
- status = metircStatus;
89
- }
90
- return {
91
- title: name,
92
- value: used,
93
- capacity: limit,
94
- formatValues: formatStorageValues,
95
- };
96
- });
97
- return (_jsx(MetricCard, { label: i18n('cards.memory-label'), active: active, metrics: metrics, status: status }));
98
- }
99
- function NetworkCard({ networkStats }) {
34
+ // Use only pools that directly indicate resources available to perform user queries
35
+ const cpuPools = (poolsCpuStats || []).filter((pool) => !(pool.name === 'Batch' || pool.name === 'IO'));
36
+ const cpuMetrics = calculateMetricAggregates(cpuPools);
37
+ // Calculate storage metrics using utility
38
+ const storageStats = tabletStorageStats || blobStorageStats || [];
39
+ const storageMetrics = calculateMetricAggregates(storageStats);
40
+ const storageGroupCount = storageStats.length;
41
+ // Calculate memory metrics using utility
42
+ const memoryMetrics = calculateMetricAggregates(memoryStats);
43
+ // Calculate network metrics using utility
100
44
  const [showNetworkUtilization] = useSetting(SHOW_NETWORK_UTILIZATION);
101
- if (!showNetworkUtilization || !networkStats) {
102
- return null;
103
- }
104
- let status = METRIC_STATUS.Unspecified;
105
- const metrics = networkStats.map((metric) => {
106
- const { used, limit, usage } = metric;
107
- const metricStatus = getMetricStatusFromUsage(usage);
108
- if (MetricStatusToSeverity[metricStatus] > MetricStatusToSeverity[status]) {
109
- status = metricStatus;
110
- }
111
- return {
112
- title: formatBytes({ value: limit, withSpeedLabel: true }),
113
- value: used,
114
- capacity: limit,
115
- percents: true,
116
- withOverflow: true,
117
- };
118
- });
119
- return (_jsx(MetricCard, { interactive: false, label: i18n('cards.network-label'), note: i18n('cards.network-note'), metrics: metrics, status: status }));
45
+ const networkMetrics = networkStats ? calculateMetricAggregates(networkStats) : null;
46
+ return (_jsxs(Flex, { className: b(), alignItems: "center", children: [_jsx("div", { className: b('link-container', {
47
+ active: metricsTab === TENANT_METRICS_TABS_IDS.cpu,
48
+ }), children: _jsx(Link, { to: tabLinks.cpu, className: b('link'), children: _jsx(TabCard, { label: i18n('cards.cpu-label'), sublabel: i18n('context_cpu-load'), value: cpuMetrics.totalUsed, limit: cpuMetrics.totalLimit, legendFormatter: formatCoresLegend, active: metricsTab === TENANT_METRICS_TABS_IDS.cpu, helpText: i18n('context_cpu-description') }) }) }), _jsx("div", { className: b('link-container', {
49
+ active: metricsTab === TENANT_METRICS_TABS_IDS.storage,
50
+ }), children: _jsx(Link, { to: tabLinks.storage, className: b('link'), children: _jsx(TabCard, { label: i18n('cards.storage-label'), sublabel: i18n('context_storage-groups', { count: storageGroupCount }), value: storageMetrics.totalUsed, limit: storageMetrics.totalLimit, legendFormatter: formatStorageLegend, active: metricsTab === TENANT_METRICS_TABS_IDS.storage, helpText: i18n('context_storage-description') }) }) }), _jsx("div", { className: b('link-container', {
51
+ active: metricsTab === TENANT_METRICS_TABS_IDS.memory,
52
+ }), children: _jsx(Link, { to: tabLinks.memory, className: b('link'), children: _jsx(TabCard, { label: i18n('cards.memory-label'), sublabel: i18n('context_memory-used'), value: memoryMetrics.totalUsed, limit: memoryMetrics.totalLimit, legendFormatter: formatStorageLegend, active: metricsTab === TENANT_METRICS_TABS_IDS.memory, helpText: i18n('context_memory-description') }) }) }), showNetworkUtilization && networkStats && networkMetrics && (_jsx("div", { className: b('link-container'), children: _jsx("div", { className: b('link'), children: _jsx(TabCard, { label: i18n('cards.network-label'), sublabel: i18n('context_network-evaluation'), value: networkMetrics.totalUsed, limit: networkMetrics.totalLimit, legendFormatter: formatStorageLegend, active: false, clickable: false, helpText: i18n('context_network-description') }) }) }))] }));
120
53
  }
121
54
  //# sourceMappingURL=MetricsCards.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MetricsCards.js","sourceRoot":"","sources":["../../../../../../src/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricsCards.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MetricsCards.js","sourceRoot":"","sources":["../../../../../../src/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricsCards.tsx"],"names":[],"mappings":"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"}
@@ -1,12 +1,226 @@
1
- .metrics-cards {
2
- display: flex;
3
- gap: 16px;
1
+ // Mixins for pseudo-element patterns
4
2
 
5
- margin-bottom: 32px;
3
+ /**
4
+ * Base mixin for creating positioned pseudo-elements with consistent sizing
5
+ * Used as foundation for all tab filler pseudo-elements
6
+ * @param {string} $side - Which side to position the element (left|right)
7
+ * @param {length} $height - Height of the pseudo-element
8
+ */
6
9
 
7
- &__tab {
10
+ @mixin pseudo-base($side: left, $height: var(--tab-filler-size)) {
11
+ position: absolute;
12
+ top: 100%;
13
+ #{$side}: 0;
14
+ width: var(--tab-filler-size);
15
+ height: $height;
16
+
17
+ content: '';
18
+
19
+ background-color: var(--g-color-base-background);
20
+ }
21
+
22
+ /**
23
+ * Creates a vertical filler for active tab states
24
+ * Used to extend the active tab's background below the container
25
+ * @param {string} $side - Which side to position the filler (left|right)
26
+ */
27
+
28
+ @mixin pseudo-active-filler($side: left) {
29
+ @include pseudo-base($side, var(--g-spacing-3));
30
+ border-#{$side}: var(--tab-border-width) solid var(--g-color-line-generic);
31
+ }
32
+
33
+ /**
34
+ * Creates a rounded corner filler for inactive tab states
35
+ * Provides visual separation between tabs with border and radius
36
+ * @param {string} $side - Which side to position the filler (left|right)
37
+ */
38
+
39
+ @mixin pseudo-inactive-filler($side: left) {
40
+ border-top: var(--tab-border-width) solid var(--g-color-line-generic);
41
+ @include pseudo-base($side, var(--tab-filler-size));
42
+ border-#{$side}: var(--tab-border-width) solid var(--g-color-line-generic);
43
+ border-top-#{$side}-radius: var(--g-border-radius-s);
44
+ }
45
+
46
+ /**
47
+ * Creates a simple background fill without borders
48
+ * Used as a background layer behind other pseudo-elements
49
+ * @param {string} $side - Which side to position the fill (left|right)
50
+ */
51
+
52
+ @mixin pseudo-background-fill($side: left) {
53
+ @include pseudo-base($side, var(--tab-filler-size));
54
+ }
55
+
56
+ // Utility mixins for common patterns
57
+
58
+ /**
59
+ * Consistent tab border styling for both active and inactive states
60
+ * Creates the characteristic tab shape with top and side borders only
61
+ * @param {color} $color - Border color to use
62
+ */
63
+
64
+ @mixin tab-border-base($color) {
65
+ border: var(--tab-border-width) solid $color;
66
+ border-bottom: none;
67
+ border-radius: var(--g-border-radius-s) var(--g-border-radius-s) 0 0;
68
+ }
69
+
70
+ /**
71
+ * Complete edge filler system for first/last tabs
72
+ * Handles all pseudo-element states (active/inactive, ::before/::after)
73
+ * Creates the complex tab connection visuals for edge containers
74
+ * @param {string} $side - Which edge this applies to (left|right)
75
+ */
76
+
77
+ @mixin tab-edge-filler($side) {
78
+ &.tenant-metrics-cards__link-container_active::after {
79
+ @include pseudo-active-filler($side);
80
+ }
81
+
82
+ &:not(.tenant-metrics-cards__link-container_active)::after {
83
+ @include pseudo-inactive-filler($side);
84
+ }
85
+
86
+ &:not(.tenant-metrics-cards__link-container_active)::before {
87
+ @include pseudo-background-fill($side);
88
+ }
89
+ }
90
+
91
+ .tenant-metrics-cards {
92
+ // CSS Variables for consistent design system
93
+ --tab-border-width: 1px;
94
+ --tab-filler-size: 10px;
95
+ --tab-overlap: -1px;
96
+ --tab-lift-offset: -6px;
97
+ --tab-border-compensation: 1px;
98
+ --tab-adjusted-spacing: calc(var(--g-spacing-3) - var(--tab-border-width));
99
+ --z-tab-base: 100;
100
+ --z-tab-active: 110;
101
+ --g-border-radius-xxl: 12px;
102
+
103
+ // Fallback for browsers without :has() support
104
+ @supports not selector(:has(*)) {
105
+ &__link-container:not(:last-child) {
106
+ padding-right: var(--tab-adjusted-spacing);
107
+
108
+ border-right: var(--tab-border-width) solid var(--g-color-line-generic);
109
+ border-bottom-right-radius: var(--g-border-radius-xxl);
110
+ }
111
+ }
112
+
113
+ &__link {
8
114
  text-decoration: none;
9
115
 
10
116
  color: inherit;
117
+
118
+ &:hover {
119
+ text-decoration: none;
120
+ }
121
+ }
122
+
123
+ &__link-container {
124
+ position: relative;
125
+ z-index: var(--z-tab-base);
126
+
127
+ flex: 1;
128
+
129
+ margin-left: var(--tab-overlap);
130
+ padding: 0 var(--g-spacing-3) var(--g-spacing-3) var(--g-spacing-3);
131
+
132
+ border-bottom: var(--tab-border-width) solid var(--g-color-line-generic);
133
+ background: var(--g-color-base-background);
134
+
135
+ .tenant-tab-card__card-container {
136
+ border: 1px solid transparent;
137
+ border-top: none;
138
+
139
+ & > div {
140
+ transform: translateY(1px);
141
+ }
142
+ }
143
+
144
+ &:nth-child(1) {
145
+ z-index: calc(var(--z-tab-base) + 3);
146
+ }
147
+
148
+ &:nth-child(2) {
149
+ z-index: calc(var(--z-tab-base) + 2);
150
+ }
151
+
152
+ &:nth-child(3) {
153
+ z-index: calc(var(--z-tab-base) + 1);
154
+ }
155
+
156
+ &:nth-child(4) {
157
+ z-index: calc(var(--z-tab-base) + 0);
158
+ }
159
+
160
+ // Reset edge padding for first/last elements
161
+ &:first-child {
162
+ margin-left: 0;
163
+ }
164
+
165
+ &:first-child {
166
+ padding-left: 0;
167
+ @include tab-edge-filler(left);
168
+ }
169
+
170
+ &:last-child {
171
+ margin-right: 0;
172
+ padding-right: 0;
173
+ @include tab-edge-filler(right);
174
+ }
175
+ }
176
+
177
+ &__link {
178
+ display: block;
179
+ }
180
+
181
+ // Active state styling
182
+ &__link-container_active {
183
+ z-index: var(--z-tab-active) !important;
184
+
185
+ padding: 0;
186
+
187
+ border-bottom: 0;
188
+ background: var(--g-color-base-background);
189
+
190
+ transform: translateY(var(--tab-lift-offset));
191
+
192
+ .tenant-tab-card__card-container {
193
+ border: none;
194
+ border-radius: var(--g-border-radius-xs);
195
+
196
+ & > div {
197
+ transform: translateY(0);
198
+ }
199
+ }
200
+
201
+ .tenant-metrics-cards__link {
202
+ padding-bottom: var(--tab-border-compensation);
203
+ @include tab-border-base(var(--g-color-line-generic));
204
+ }
205
+ }
206
+
207
+ // Adjacent tab styling (modern browsers with :has() support)
208
+ &__link-container:has(+ &__link-container_active) {
209
+ padding-right: var(--tab-adjusted-spacing);
210
+
211
+ border-right: var(--tab-border-width) solid var(--g-color-line-generic);
212
+ border-bottom-right-radius: var(--g-border-radius-xxl);
213
+ }
214
+
215
+ &__link-container_active + &__link-container {
216
+ padding-left: var(--tab-adjusted-spacing);
217
+
218
+ border-left: var(--tab-border-width) solid var(--g-color-line-generic);
219
+ border-bottom-left-radius: var(--g-border-radius-xxl);
220
+ }
221
+
222
+ // Reset padding for specific cases
223
+ &__link-container:not(:has(+ &__link-container_active)) {
224
+ padding-right: 0;
11
225
  }
12
226
  }
@@ -0,0 +1,16 @@
1
+ import './TabCard.scss';
2
+ interface TabCardProps {
3
+ label: string;
4
+ sublabel?: string;
5
+ value: number;
6
+ limit: number;
7
+ active?: boolean;
8
+ helpText?: string;
9
+ clickable?: boolean;
10
+ legendFormatter: (params: {
11
+ value: number;
12
+ capacity: number;
13
+ }) => string;
14
+ }
15
+ export declare function TabCard({ label, sublabel, value, limit, active, helpText, clickable, legendFormatter, }: TabCardProps): import("react/jsx-runtime").JSX.Element;
16
+ export {};
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Card, Flex } from '@gravity-ui/uikit';
3
+ import { DoughnutMetrics } from '../../../../../components/DoughnutMetrics/DoughnutMetrics';
4
+ import { getDiagramValues } from '../../../../../containers/Cluster/ClusterOverview/utils';
5
+ import { cn } from '../../../../../utils/cn';
6
+ import './TabCard.scss';
7
+ const b = cn('tenant-tab-card');
8
+ export function TabCard({ label, sublabel, value, limit, active, helpText, clickable = true, legendFormatter, }) {
9
+ const { status, percents, legend, fill } = getDiagramValues({
10
+ value,
11
+ capacity: limit,
12
+ legendFormatter,
13
+ });
14
+ return (_jsx("div", { className: b({ active }), children: _jsx(Card, { className: b('card-container', { active, clickable }), type: "container", view: active ? 'outlined' : 'raised', children: _jsxs(Flex, { gap: 3, alignItems: "center", children: [_jsx(DoughnutMetrics, { size: "small", status: status, fillWidth: fill, className: b('doughnut'), children: _jsx(DoughnutMetrics.Value, { variant: "subheader-1", children: percents }) }), _jsxs("div", { className: b('legend-wrapper'), children: [_jsx(DoughnutMetrics.Legend, { variant: "subheader-2", children: legend }), _jsx(DoughnutMetrics.Legend, { variant: "body-1", color: "secondary", note: helpText, noteIconSize: "s", children: sublabel || label })] })] }) }) }));
15
+ }
16
+ //# sourceMappingURL=TabCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabCard.js","sourceRoot":"","sources":["../../../../../../src/containers/Tenant/Diagnostics/TenantOverview/TabCard/TabCard.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,IAAI,EAAE,IAAI,EAAC,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAC,eAAe,EAAC,MAAM,2DAA2D,CAAC;AAC1F,OAAO,EAAC,gBAAgB,EAAC,MAAM,yDAAyD,CAAC;AACzF,OAAO,EAAC,EAAE,EAAC,MAAM,yBAAyB,CAAC;AAE3C,OAAO,gBAAgB,CAAC;AAExB,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,CAAC;AAahC,MAAM,UAAU,OAAO,CAAC,EACpB,KAAK,EACL,QAAQ,EACR,KAAK,EACL,KAAK,EACL,MAAM,EACN,QAAQ,EACR,SAAS,GAAG,IAAI,EAChB,eAAe,GACJ;IACX,MAAM,EAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAC,GAAG,gBAAgB,CAAC;QACtD,KAAK;QACL,QAAQ,EAAE,KAAK;QACf,eAAe;KAClB,CAAC,CAAC;IAEH,OAAO,CACH,cAAK,SAAS,EAAE,CAAC,CAAC,EAAC,MAAM,EAAC,CAAC,YACvB,KAAC,IAAI,IACD,SAAS,EAAE,CAAC,CAAC,gBAAgB,EAAE,EAAC,MAAM,EAAE,SAAS,EAAC,CAAC,EACnD,IAAI,EAAC,WAAW,EAChB,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,YAEpC,MAAC,IAAI,IAAC,GAAG,EAAE,CAAC,EAAE,UAAU,EAAC,QAAQ,aAC7B,KAAC,eAAe,IACZ,IAAI,EAAC,OAAO,EACZ,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,IAAI,EACf,SAAS,EAAE,CAAC,CAAC,UAAU,CAAC,YAExB,KAAC,eAAe,CAAC,KAAK,IAAC,OAAO,EAAC,aAAa,YACvC,QAAQ,GACW,GACV,EAClB,eAAK,SAAS,EAAE,CAAC,CAAC,gBAAgB,CAAC,aAC/B,KAAC,eAAe,CAAC,MAAM,IAAC,OAAO,EAAC,aAAa,YACxC,MAAM,GACc,EACzB,KAAC,eAAe,CAAC,MAAM,IACnB,OAAO,EAAC,QAAQ,EAChB,KAAK,EAAC,WAAW,EACjB,IAAI,EAAE,QAAQ,EACd,YAAY,EAAC,GAAG,YAEf,QAAQ,IAAI,KAAK,GACG,IACvB,IACH,GACJ,GACL,CACT,CAAC;AACN,CAAC"}
@@ -0,0 +1,29 @@
1
+ .tenant-tab-card {
2
+ border-radius: var(--g-border-radius-s);
3
+
4
+ &__card-container {
5
+ padding: var(--g-spacing-4);
6
+
7
+ border: 0;
8
+ border-radius: var(--g-border-radius-s);
9
+ }
10
+
11
+ &__card-container_clickable {
12
+ cursor: pointer;
13
+
14
+ // Smooth hover transition
15
+ transition: background-color 0.15s ease;
16
+
17
+ &:hover {
18
+ background-color: var(--g-color-base-float-hover);
19
+ }
20
+ }
21
+
22
+ &__card-container_active {
23
+ cursor: default !important;
24
+
25
+ &:hover {
26
+ background-color: transparent;
27
+ }
28
+ }
29
+ }
@@ -1,9 +1,6 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import React from 'react';
3
- import { Flex } from '@gravity-ui/uikit';
4
- import { StringParam, useQueryParam } from 'use-query-params';
5
3
  import { MetricChart } from '../../../../../components/MetricChart';
6
- import { TimeFrameSelector } from '../../../../../components/TimeFrameSelector/TimeFrameSelector';
7
4
  import { cn } from '../../../../../utils/cn';
8
5
  import { useAutoRefreshInterval } from '../../../../../utils/hooks';
9
6
  import './TenantDashboard.scss';
@@ -12,7 +9,6 @@ const CHART_WIDTH_FULL = 872;
12
9
  const b = cn('ydb-tenant-dashboard');
13
10
  export const TenantDashboard = ({ database, charts }) => {
14
11
  const [isDashboardHidden, setIsDashboardHidden] = React.useState(true);
15
- const [timeFrame = '1h', setTimeframe] = useQueryParam('timeframe', StringParam);
16
12
  const [autoRefreshInterval] = useAutoRefreshInterval();
17
13
  // Refetch data only if dashboard successfully loaded
18
14
  const shouldRefresh = isDashboardHidden ? 0 : autoRefreshInterval;
@@ -33,13 +29,9 @@ export const TenantDashboard = ({ database, charts }) => {
33
29
  // If there is only one chart, display it with full width
34
30
  const chartWidth = charts.length === 1 ? CHART_WIDTH_FULL : CHART_WIDTH;
35
31
  const chartHeight = CHART_WIDTH / 1.5;
36
- const renderChartToolbar = React.useCallback((chartConfig) => (_jsx(Flex, { className: b('toolbar'), justifyContent: "space-between", alignItems: "center", children: _jsx("div", { children: chartConfig.title }) })), []);
37
32
  const renderContent = () => {
38
- return charts.map((chartConfig) => {
39
- const chartId = chartConfig.metrics.map(({ target }) => target).join('&');
40
- return (_jsx(MetricChart, { database: database, metrics: chartConfig.metrics, timeFrame: timeFrame, chartOptions: chartConfig.options, autorefresh: shouldRefresh, width: chartWidth, height: chartHeight, onChartDataStatusChange: handleChartDataStatusChange, isChartVisible: !isDashboardHidden, renderChartToolbar: () => renderChartToolbar(chartConfig) }, chartId));
41
- });
33
+ return charts.map((chartConfig, index) => (_jsx(MetricChart, { database: database, metrics: chartConfig.metrics, chartOptions: chartConfig.options, autorefresh: shouldRefresh, width: chartWidth, height: chartHeight, onChartDataStatusChange: handleChartDataStatusChange, isChartVisible: !isDashboardHidden, title: chartConfig.title }, index)));
42
34
  };
43
- return (_jsxs("div", { className: b(null), style: { display: isDashboardHidden ? 'none' : undefined }, children: [_jsx("div", { className: b('controls'), children: _jsx(TimeFrameSelector, { value: timeFrame, onChange: setTimeframe }) }), _jsx("div", { className: b('charts'), children: renderContent() })] }));
35
+ return (_jsx("div", { className: b(null), style: { display: isDashboardHidden ? 'none' : undefined }, children: _jsx("div", { className: b('charts'), children: renderContent() }) }));
44
36
  };
45
37
  //# sourceMappingURL=TenantDashboard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TenantDashboard.js","sourceRoot":"","sources":["../../../../../../src/containers/Tenant/Diagnostics/TenantOverview/TenantDashboard/TenantDashboard.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TenantDashboard.js","sourceRoot":"","sources":["../../../../../../src/containers/Tenant/Diagnostics/TenantOverview/TenantDashboard/TenantDashboard.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,WAAW,EAAC,MAAM,uCAAuC,CAAC;AAMlE,OAAO,EAAC,EAAE,EAAC,MAAM,yBAAyB,CAAC;AAC3C,OAAO,EAAC,sBAAsB,EAAC,MAAM,4BAA4B,CAAC;AAElE,OAAO,wBAAwB,CAAC;AAEhC,MAAM,WAAW,GAAG,GAAG,CAAC;AACxB,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B,MAAM,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,CAAC;AAarC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAAC,QAAQ,EAAE,MAAM,EAAuB,EAAE,EAAE;IACxE,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAU,IAAI,CAAC,CAAC;IAChF,MAAM,CAAC,mBAAmB,CAAC,GAAG,sBAAsB,EAAE,CAAC;IAEvD,qDAAqD;IACrD,MAAM,aAAa,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC;IAElE;;;;;;;;OAQG;IACH,MAAM,2BAA2B,GAAG,CAAC,WAA4B,EAAE,EAAE;QACjE,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC5B,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACL,CAAC,CAAC;IAEF,yDAAyD;IACzD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC;IACxE,MAAM,WAAW,GAAG,WAAW,GAAG,GAAG,CAAC;IAEtC,MAAM,aAAa,GAAG,GAAG,EAAE;QACvB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE,CAAC,CACtC,KAAC,WAAW,IAER,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,WAAW,CAAC,OAAO,EAC5B,YAAY,EAAE,WAAW,CAAC,OAAO,EACjC,WAAW,EAAE,aAAa,EAC1B,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,WAAW,EACnB,uBAAuB,EAAE,2BAA2B,EACpD,cAAc,EAAE,CAAC,iBAAiB,EAClC,KAAK,EAAE,WAAW,CAAC,KAAK,IATnB,KAAK,CAUZ,CACL,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,OAAO,CACH,cAAK,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAC,YAC7E,cAAK,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,YAAG,aAAa,EAAE,GAAO,GAClD,CACT,CAAC;AACN,CAAC,CAAC"}