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(); }); });