From bb244037c13ea09c93fe614f5c6915f6a709521c Mon Sep 17 00:00:00 2001
From: Alexey Antonov
Date: Fri, 13 Feb 2026 11:28:05 +0200
Subject: [PATCH 1/2] Address @elastic/eui/require-table-caption lint
violations across `@elastic/actionable-obs-team` files (#250682)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
> [!CAUTION]
> ⚠️ **Changes / translations were made by GenAI**. I’ve reviewed them
carefully, but your code owners’ expert eyes will ensure they’re 100%
right.
## Summary
This PR applies the auto-fix for the newly introduced
`@elastic/eui/require-table-caption`.
This rule ensure `EuiInMemoryTable`, `EuiBasicTable` have a
`tableCaption` prop for accessibility.
## Changes
1. 🎯 Added missing `tableCaption` attributes to elements flagged by
`@elastic/eui/require-table-caption` — accessibility leveled up!
## Related
- https://github.com/elastic/eui/pull/9168
This time, to avoid annoying approvals collection, we've broken files
down by teams. Now, we are waiting a review only from your team!
---------
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Miguel Martín
(cherry picked from commit 29698cfcb53529ff4e63f483df1a06d8c9ceaf15)
# Conflicts:
# x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/components/certificates/certificates_list.tsx
---
.../components/alert_overview/alert_overview.tsx | 10 +++++++++-
.../components/burn_rate_rule_editor/dependencies.tsx | 8 +++++++-
.../components/compact_view/slo_list_compact_view.tsx | 3 +++
.../components/alerts/rule_monitors_table.tsx | 3 +++
.../components/certificates/certificates_list.tsx | 4 ++++
.../components/common/components/stderr_logs.tsx | 1 +
.../common/monitor_test_result/browser_steps_list.tsx | 3 +++
.../monitor_summary/test_runs_table.tsx | 3 +++
.../management/monitor_list_table/monitor_list.tsx | 3 +++
.../compact_view/components/monitors_table.tsx | 4 ++++
.../settings/data_retention/dsl_retention_tab.tsx | 3 +++
.../test_now_mode/simple/ping_list/ping_list_table.tsx | 3 +++
.../components/certificates/certificates_list.tsx | 4 ++++
.../components/monitor/ping_list/ping_list_table.tsx | 3 +++
.../availability_reporting/availability_reporting.tsx | 4 ++++
.../components/overview/monitor_list/monitor_list.tsx | 4 ++++
.../components/synthetics/check_steps/stderr_logs.tsx | 1 +
.../components/synthetics/check_steps/steps_list.tsx | 3 +++
.../app/rum_dashboard/impactful_metrics/js_errors.tsx | 3 +++
19 files changed, 68 insertions(+), 2 deletions(-)
diff --git a/x-pack/solutions/observability/plugins/observability/public/components/alert_overview/alert_overview.tsx b/x-pack/solutions/observability/plugins/observability/public/components/alert_overview/alert_overview.tsx
index c0fbb0bb79702..0df9e61b9f7af 100644
--- a/x-pack/solutions/observability/plugins/observability/public/components/alert_overview/alert_overview.tsx
+++ b/x-pack/solutions/observability/plugins/observability/public/components/alert_overview/alert_overview.tsx
@@ -216,7 +216,15 @@ export const AlertOverview = memo(
-
+
>
);
}
diff --git a/x-pack/solutions/observability/plugins/slo/public/components/burn_rate_rule_editor/dependencies.tsx b/x-pack/solutions/observability/plugins/slo/public/components/burn_rate_rule_editor/dependencies.tsx
index 1aaf32a748f30..a2a99a39c9538 100644
--- a/x-pack/solutions/observability/plugins/slo/public/components/burn_rate_rule_editor/dependencies.tsx
+++ b/x-pack/solutions/observability/plugins/slo/public/components/burn_rate_rule_editor/dependencies.tsx
@@ -160,7 +160,13 @@ export function Dependencies({ currentRuleId, dependencies, onChange }: Dependen
-
+
{sloToAddRule ? (
{
pageSize,
showPerPageOptions: true,
}}
+ tableCaption={i18n.translate('xpack.synthetics.ruleDetails.monitorsTable.caption', {
+ defaultMessage: 'Rule monitors',
+ })}
/>
);
};
diff --git a/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/certificates/certificates_list.tsx b/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/certificates/certificates_list.tsx
index 5d3a99eea947f..fc22e3d2a6101 100644
--- a/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/certificates/certificates_list.tsx
+++ b/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/certificates/certificates_list.tsx
@@ -9,6 +9,7 @@ import React from 'react';
import moment from 'moment';
import type { Direction } from '@elastic/eui';
import { EuiBasicTable } from '@elastic/eui';
+import { i18n } from '@kbn/i18n';
import type { Cert, CertMonitor, CertResult } from '../../../../../common/runtime_types';
import { useDateFormat } from '../../../../hooks/use_date_format';
import { CertStatus } from './cert_status';
@@ -104,6 +105,9 @@ export const CertificateList: React.FC = ({ page, certificates, sort, onC
columns={columns}
items={certificates?.certs ?? []}
pagination={pagination}
+ tableCaption={i18n.translate('xpack.synthetics.certificates.certificatesList.tableCaption', {
+ defaultMessage: 'Certificates overview',
+ })}
onChange={(newVal) => {
onChange(newVal.page as Page, newVal.sort as CertSort);
}}
diff --git a/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/common/components/stderr_logs.tsx b/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/common/components/stderr_logs.tsx
index d70d827cc813d..768d3892ae3ed 100644
--- a/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/common/components/stderr_logs.tsx
+++ b/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/common/components/stderr_logs.tsx
@@ -149,6 +149,7 @@ export const StdErrorLogs = ({
pageSizeOptions: [2, 5, 10, 20, 50],
}}
onTableChange={onTableChange}
+ tableCaption={title ?? TEST_RUN_LOGS_LABEL}
/>
>
);
diff --git a/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/common/monitor_test_result/browser_steps_list.tsx b/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/common/monitor_test_result/browser_steps_list.tsx
index b54d6e4fe8b94..7f55146e272eb 100644
--- a/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/common/monitor_test_result/browser_steps_list.tsx
+++ b/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/common/monitor_test_result/browser_steps_list.tsx
@@ -324,6 +324,9 @@ export const BrowserStepsList = ({
defaultMessage: 'No data found',
})
}
+ tableCaption={i18n.translate('xpack.synthetics.monitor.browserStepsList.caption', {
+ defaultMessage: 'Step results',
+ })}
tableLayout="auto"
itemId="_id"
itemIdToExpandedRowMap={testNowMode || showExpand ? expandedMap : undefined}
diff --git a/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_summary/test_runs_table.tsx b/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_summary/test_runs_table.tsx
index 10be6e0ca9979..e903eddc9f3f0 100644
--- a/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_summary/test_runs_table.tsx
+++ b/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_summary/test_runs_table.tsx
@@ -316,6 +316,9 @@ export const TestRunsTable = ({
}
: undefined
}
+ tableCaption={i18n.translate('xpack.synthetics.monitorDetails.summary.testRunsCaption', {
+ defaultMessage: 'Recent test runs',
+ })}
/>
);
diff --git a/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_list_table/monitor_list.tsx b/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_list_table/monitor_list.tsx
index b13be3fe05cc4..62193a187b508 100644
--- a/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_list_table/monitor_list.tsx
+++ b/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_list_table/monitor_list.tsx
@@ -126,6 +126,9 @@ export const MonitorList = ({
aria-label={i18n.translate('xpack.synthetics.management.monitorList.title', {
defaultMessage: 'Synthetics monitors list',
})}
+ tableCaption={i18n.translate('xpack.synthetics.management.monitorList.caption', {
+ defaultMessage: 'Synthetics monitors',
+ })}
error={error?.body?.message}
loading={loading}
itemId="config_id"
diff --git a/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/compact_view/components/monitors_table.tsx b/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/compact_view/components/monitors_table.tsx
index 626844f6efe0b..e02568dfc4632 100644
--- a/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/compact_view/components/monitors_table.tsx
+++ b/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/compact_view/components/monitors_table.tsx
@@ -4,6 +4,7 @@
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
+import { i18n } from '@kbn/i18n';
import React, { useCallback } from 'react';
import type { EuiTableRowProps } from '@elastic/eui';
import { EuiBasicTable } from '@elastic/eui';
@@ -71,6 +72,9 @@ export const MonitorsTable = ({
rowProps={getRowProps}
data-test-subj="syntheticsCompactViewTable"
tableLayout="auto"
+ tableCaption={i18n.translate('xpack.synthetics.monitorsTable.tableCaption', {
+ defaultMessage: 'Compact monitors list',
+ })}
/>
);
};
diff --git a/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/settings/data_retention/dsl_retention_tab.tsx b/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/settings/data_retention/dsl_retention_tab.tsx
index 612140c2bff5a..c16fca2cf8f63 100644
--- a/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/settings/data_retention/dsl_retention_tab.tsx
+++ b/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/settings/data_retention/dsl_retention_tab.tsx
@@ -32,6 +32,9 @@ export const DslRetentionTab = () => {
loading={loading === true}
columns={DSL_RETENTION_COLUMNS}
tableLayout="auto"
+ tableCaption={i18n.translate('xpack.synthetics.dslRetention.table.caption', {
+ defaultMessage: 'Retention overview',
+ })}
/>
);
};
diff --git a/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/test_now_mode/simple/ping_list/ping_list_table.tsx b/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/test_now_mode/simple/ping_list/ping_list_table.tsx
index bfadb7dbb2e97..304c2c6459f28 100644
--- a/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/test_now_mode/simple/ping_list/ping_list_table.tsx
+++ b/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/test_now_mode/simple/ping_list/ping_list_table.tsx
@@ -127,6 +127,9 @@ export function PingListTable({ loading, error, pings, onChange }: Props) {
defaultMessage: 'No history found',
})
}
+ tableCaption={i18n.translate('xpack.synthetics.pingList.pingListCaption', {
+ defaultMessage: 'Ping history',
+ })}
tableLayout="auto"
onChange={onChange}
/>
diff --git a/x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/components/certificates/certificates_list.tsx b/x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/components/certificates/certificates_list.tsx
index 75c7a6af586f7..6ea0621eb4026 100644
--- a/x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/components/certificates/certificates_list.tsx
+++ b/x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/components/certificates/certificates_list.tsx
@@ -7,6 +7,7 @@
import React from 'react';
import moment from 'moment';
+import { i18n } from '@kbn/i18n';
import type { Direction } from '@elastic/eui';
import { EuiBasicTable } from '@elastic/eui';
import { CertStatus } from './cert_status';
@@ -113,6 +114,9 @@ export const CertificateList: React.FC = ({ page, certificates, sort, onC
direction: sort.direction,
},
}}
+ tableCaption={i18n.translate('xpack.uptime.certificatesList.caption', {
+ defaultMessage: 'Certificates overview',
+ })}
noItemsMessage={
certificates.loading ? (
LOADING_CERTIFICATES
diff --git a/x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/ping_list_table.tsx b/x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/ping_list_table.tsx
index 6d50bf42438e3..debe1239596fd 100644
--- a/x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/ping_list_table.tsx
+++ b/x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/ping_list_table.tsx
@@ -240,6 +240,9 @@ export function PingListTable({ loading, error, pings, pagination, onChange, fai
defaultMessage: 'No history found',
})
}
+ tableCaption={i18n.translate('xpack.uptime.pingList.pingHistoryCaption', {
+ defaultMessage: 'Ping history',
+ })}
tableLayout="auto"
rowProps={getRowProps}
onChange={onChange}
diff --git a/x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/components/monitor/status_details/availability_reporting/availability_reporting.tsx b/x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/components/monitor/status_details/availability_reporting/availability_reporting.tsx
index 3498dde3f756d..89d9525a34eca 100644
--- a/x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/components/monitor/status_details/availability_reporting/availability_reporting.tsx
+++ b/x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/components/monitor/status_details/availability_reporting/availability_reporting.tsx
@@ -8,6 +8,7 @@
import React, { useState } from 'react';
import type { Criteria, Pagination } from '@elastic/eui';
import { EuiBasicTable, EuiSpacer } from '@elastic/eui';
+import { i18n } from '@kbn/i18n';
import { FormattedMessage } from '@kbn/i18n-react';
import type { StatusTag } from './location_status_tags';
import { TagLabel } from './tag_label';
@@ -81,6 +82,9 @@ export const AvailabilityReporting: React.FC = ({ allLocations }) => {
columns={cols}
items={allLocations.slice(pageIndex * pageSize, pageIndex * pageSize + pageSize)}
onChange={onTableChange}
+ tableCaption={i18n.translate('xpack.uptime.availabilityReporting.tableCaption', {
+ defaultMessage: 'Availability overview',
+ })}
{...paginationProps}
/>
>
diff --git a/x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list.tsx b/x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list.tsx
index 2bfd6d6913104..891865da7d5a0 100644
--- a/x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list.tsx
+++ b/x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list.tsx
@@ -4,6 +4,7 @@
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
+import { i18n } from '@kbn/i18n';
import React, { useState } from 'react';
import useDebounce from 'react-use/lib/useDebounce';
import {
@@ -224,6 +225,9 @@ export const MonitorListComponent: ({
>
);
diff --git a/x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/components/synthetics/check_steps/steps_list.tsx b/x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/components/synthetics/check_steps/steps_list.tsx
index ab7e0c1b93238..8d3b49d99325d 100644
--- a/x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/components/synthetics/check_steps/steps_list.tsx
+++ b/x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/components/synthetics/check_steps/steps_list.tsx
@@ -236,6 +236,9 @@ export const StepsList = ({
>
);
From dc3412b9b663bec5439d84194b87dc5404727e58 Mon Sep 17 00:00:00 2001
From: Alexey Antonov
Date: Wed, 18 Feb 2026 13:44:39 +0200
Subject: [PATCH 2/2] fix jest
---
.../synthetics/components/certificates/certificates.test.tsx | 2 +-
.../availability_reporting/availability_reporting.test.tsx | 2 +-
.../uptime/public/legacy_uptime/pages/certificates.test.tsx | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/certificates/certificates.test.tsx b/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/certificates/certificates.test.tsx
index 7f68054d25426..10c11d7a3693d 100644
--- a/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/certificates/certificates.test.tsx
+++ b/x-pack/solutions/observability/plugins/synthetics/public/apps/synthetics/components/certificates/certificates.test.tsx
@@ -13,7 +13,7 @@ describe('CertificatesPage', () => {
it('renders expected elements for valid props', async () => {
const { findByText } = render();
- expect(await findByText('This table contains 0 rows; Page 1 of 0.')).toBeInTheDocument();
+ expect(await findByText('Certificates overview; Page 1 of 0.')).toBeInTheDocument();
expect(await findByText('No Certificates found.')).toBeInTheDocument();
});
});
diff --git a/x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/components/monitor/status_details/availability_reporting/availability_reporting.test.tsx b/x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/components/monitor/status_details/availability_reporting/availability_reporting.test.tsx
index 4351e909be32a..ba665ff02c5e4 100644
--- a/x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/components/monitor/status_details/availability_reporting/availability_reporting.test.tsx
+++ b/x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/components/monitor/status_details/availability_reporting/availability_reporting.test.tsx
@@ -42,7 +42,7 @@ describe('AvailabilityReporting component', () => {
it('renders correctly against snapshot', async () => {
const { findByText } = render();
- expect(await findByText('This table contains 3 rows.')).toBeInTheDocument();
+ expect(await findByText('Availability overview')).toBeInTheDocument();
expect(await findByText('au-heartbeat')).toBeInTheDocument();
});
});
diff --git a/x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/pages/certificates.test.tsx b/x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/pages/certificates.test.tsx
index 252ea7dea1312..c4f84e7ff1bfe 100644
--- a/x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/pages/certificates.test.tsx
+++ b/x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/pages/certificates.test.tsx
@@ -13,7 +13,7 @@ describe('CertificatesPage', () => {
it('renders expected elements for valid props', async () => {
const { findByText } = render();
- expect(await findByText('This table contains 0 rows; Page 1 of 0.')).toBeInTheDocument();
+ expect(await findByText('Certificates overview; Page 1 of 0.')).toBeInTheDocument();
expect(await findByText('No Certificates found.')).toBeInTheDocument();
});
});