Skip to content

Commit 98c6627

Browse files
kibanamachineCopilotalexwizp
authored
[9.4] Fix @elastic/eui/icon-accessibility-rules lint violations across @elastic/kibana-security files (#269654) (#272024)
# Backport This will backport the following commits from `main` to `9.4`: - [Fix `@elastic/eui/icon-accessibility-rules` lint violations across @elastic/kibana-security files (#269654)](#269654) <!--- Backport version: 9.6.6 --> ### Questions ? Please refer to the [Backport tool documentation](https://github.com/sorenlouv/backport) <!--BACKPORT [{"author":{"name":"Copilot","email":"198982749+Copilot@users.noreply.github.com"},"sourceCommit":{"committedDate":"2026-05-30T10:49:36Z","message":"Fix `@elastic/eui/icon-accessibility-rules` lint violations across @elastic/kibana-security files (#269654)\n\nResolves 36 ESLint `@elastic/eui/icon-accessibility-rules` violations\nacross 25 files owned by @elastic/kibana-security.\n\n## Changes\n\n- **Decorative icons** (adjacent to visible text): added\n`aria-hidden={true}`\n- Logo icons, category icons, chevrons, empty spacers, inputOutput\nicons, document/sort icons\n- **Meaningful icons** (convey standalone information): added\n`aria-label` with i18n\n - Warning icon in `role_table_display.tsx` → \"Deprecated\"\n - MinusCircle icon in `privilege_display.tsx` → \"None\"\n\nExample:\n\n```tsx\n// Decorative — icon next to visible text\n<EuiIcon type=\"logoElastic\" size=\"xxl\" aria-hidden={true} />\n\n// Meaningful — icon conveys status independently\n<EuiIcon\n type=\"warning\"\n color=\"warning\"\n size=\"s\"\n aria-label={i18n.translate(\n 'xpack.security.management.roles.roleTableDisplay.deprecatedIconAriaLabel',\n { defaultMessage: 'Deprecated' }\n )}\n/>\n```\n\n> [!WARNING]\n>\n> <details>\n> <summary>Firewall rules blocked me from connecting to one or more\naddresses (expand for details)</summary>\n>\n> #### I tried to connect to the following addresses, but was blocked by\nfirewall rules:\n>\n> - `ci-stats.kibana.dev`\n> - Triggering command:\n`/home/REDACTED/.nvm/versions/node/v24.14.1/bin/node\n/home/REDACTED/.nvm/versions/node/v24.14.1/bin/node\nscripts/yarn_install_scripts.js run ldd 0.8.2` (dns block)\n> - Triggering command:\n`/home/REDACTED/.nvm/versions/node/v24.14.1/bin/node\n/home/REDACTED/.nvm/versions/node/v24.14.1/bin/node scripts/kbn\nbootstrap` (dns block)\n> - `clients3.google.com`\n> - Triggering command:\n`/home/REDACTED/work/kibana/kibana/node_modules/@moonrepo/core-linux-x64-gnu/moon\n/home/REDACTED/work/kibana/kibana/node_modules/@moonrepo/core-linux-x64-gnu/moon\nrun :build-webpack ldd 0.8.2 &gt; b[i]) exit(0)` (dns block)\n> - `detectportal.firefox.com`\n> - Triggering command:\n`/home/REDACTED/work/kibana/kibana/node_modules/@moonrepo/core-linux-x64-gnu/moon\n/home/REDACTED/work/kibana/kibana/node_modules/@moonrepo/core-linux-x64-gnu/moon\nrun :build-webpack ldd 0.8.2 &gt; b[i]) exit(0)` (dns block)\n> - `google.com`\n> - Triggering command:\n`/home/REDACTED/work/kibana/kibana/node_modules/@moonrepo/core-linux-x64-gnu/moon\n/home/REDACTED/work/kibana/kibana/node_modules/@moonrepo/core-linux-x64-gnu/moon\nrun :build-webpack ldd 0.8.2 &gt; b[i]) exit(0)` (dns block)\n> - `googlechromelabs.github.io`\n> - Triggering command:\n`/home/REDACTED/.nvm/versions/node/v24.14.1/bin/node\n/home/REDACTED/.nvm/versions/node/v24.14.1/bin/node install.js\nyp-bin/ldd ldd b/li\u0004\u0018 nibrowser-gtk/sys/lib/libbrotlienc.so.1.0.7` (dns\nblock)\n> - `iojs.org`\n> - Triggering command: `/usr/bin/curl curl -q --fail --compressed -L -s\nREDACTED -o -` (dns block)\n>\n> If you need me to access, download, or install something from one of\nthese locations, you can either:\n>\n> - Configure [Actions setup\nsteps](https://gh.io/copilot/actions-setup-steps) to set up my\nenvironment, which run before the firewall is enabled\n> - Add the appropriate URLs or hosts to the custom allowlist in this\nrepository's [Copilot coding agent\nsettings](https://github.com/elastic/kibana/settings/copilot/coding_agent)\n(admins only)\n>\n> </details>\n\n---------\n\nCo-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>\nCo-authored-by: alexwizp <20072247+alexwizp@users.noreply.github.com>\nCo-authored-by: Alexey Antonov <alexwizp@gmail.com>\nCo-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>","sha":"a067907e6ac04afd33ea6a64b56a83dcb0aa5c09","branchLabelMapping":{"^v9.5.0$":"main","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["Project:Accessibility","release_note:skip","💝community","backport:version","a11y:agent-pr","v9.5.0","v9.4.2"],"title":"Fix `@elastic/eui/icon-accessibility-rules` lint violations across @elastic/kibana-security files","number":269654,"url":"https://github.com/elastic/kibana/pull/269654","mergeCommit":{"message":"Fix `@elastic/eui/icon-accessibility-rules` lint violations across @elastic/kibana-security files (#269654)\n\nResolves 36 ESLint `@elastic/eui/icon-accessibility-rules` violations\nacross 25 files owned by @elastic/kibana-security.\n\n## Changes\n\n- **Decorative icons** (adjacent to visible text): added\n`aria-hidden={true}`\n- Logo icons, category icons, chevrons, empty spacers, inputOutput\nicons, document/sort icons\n- **Meaningful icons** (convey standalone information): added\n`aria-label` with i18n\n - Warning icon in `role_table_display.tsx` → \"Deprecated\"\n - MinusCircle icon in `privilege_display.tsx` → \"None\"\n\nExample:\n\n```tsx\n// Decorative — icon next to visible text\n<EuiIcon type=\"logoElastic\" size=\"xxl\" aria-hidden={true} />\n\n// Meaningful — icon conveys status independently\n<EuiIcon\n type=\"warning\"\n color=\"warning\"\n size=\"s\"\n aria-label={i18n.translate(\n 'xpack.security.management.roles.roleTableDisplay.deprecatedIconAriaLabel',\n { defaultMessage: 'Deprecated' }\n )}\n/>\n```\n\n> [!WARNING]\n>\n> <details>\n> <summary>Firewall rules blocked me from connecting to one or more\naddresses (expand for details)</summary>\n>\n> #### I tried to connect to the following addresses, but was blocked by\nfirewall rules:\n>\n> - `ci-stats.kibana.dev`\n> - Triggering command:\n`/home/REDACTED/.nvm/versions/node/v24.14.1/bin/node\n/home/REDACTED/.nvm/versions/node/v24.14.1/bin/node\nscripts/yarn_install_scripts.js run ldd 0.8.2` (dns block)\n> - Triggering command:\n`/home/REDACTED/.nvm/versions/node/v24.14.1/bin/node\n/home/REDACTED/.nvm/versions/node/v24.14.1/bin/node scripts/kbn\nbootstrap` (dns block)\n> - `clients3.google.com`\n> - Triggering command:\n`/home/REDACTED/work/kibana/kibana/node_modules/@moonrepo/core-linux-x64-gnu/moon\n/home/REDACTED/work/kibana/kibana/node_modules/@moonrepo/core-linux-x64-gnu/moon\nrun :build-webpack ldd 0.8.2 &gt; b[i]) exit(0)` (dns block)\n> - `detectportal.firefox.com`\n> - Triggering command:\n`/home/REDACTED/work/kibana/kibana/node_modules/@moonrepo/core-linux-x64-gnu/moon\n/home/REDACTED/work/kibana/kibana/node_modules/@moonrepo/core-linux-x64-gnu/moon\nrun :build-webpack ldd 0.8.2 &gt; b[i]) exit(0)` (dns block)\n> - `google.com`\n> - Triggering command:\n`/home/REDACTED/work/kibana/kibana/node_modules/@moonrepo/core-linux-x64-gnu/moon\n/home/REDACTED/work/kibana/kibana/node_modules/@moonrepo/core-linux-x64-gnu/moon\nrun :build-webpack ldd 0.8.2 &gt; b[i]) exit(0)` (dns block)\n> - `googlechromelabs.github.io`\n> - Triggering command:\n`/home/REDACTED/.nvm/versions/node/v24.14.1/bin/node\n/home/REDACTED/.nvm/versions/node/v24.14.1/bin/node install.js\nyp-bin/ldd ldd b/li\u0004\u0018 nibrowser-gtk/sys/lib/libbrotlienc.so.1.0.7` (dns\nblock)\n> - `iojs.org`\n> - Triggering command: `/usr/bin/curl curl -q --fail --compressed -L -s\nREDACTED -o -` (dns block)\n>\n> If you need me to access, download, or install something from one of\nthese locations, you can either:\n>\n> - Configure [Actions setup\nsteps](https://gh.io/copilot/actions-setup-steps) to set up my\nenvironment, which run before the firewall is enabled\n> - Add the appropriate URLs or hosts to the custom allowlist in this\nrepository's [Copilot coding agent\nsettings](https://github.com/elastic/kibana/settings/copilot/coding_agent)\n(admins only)\n>\n> </details>\n\n---------\n\nCo-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>\nCo-authored-by: alexwizp <20072247+alexwizp@users.noreply.github.com>\nCo-authored-by: Alexey Antonov <alexwizp@gmail.com>\nCo-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>","sha":"a067907e6ac04afd33ea6a64b56a83dcb0aa5c09"}},"sourceBranch":"main","suggestedTargetBranches":["9.4"],"targetPullRequestStates":[{"branch":"main","label":"v9.5.0","branchLabelMappingKey":"^v9.5.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/269654","number":269654,"mergeCommit":{"message":"Fix `@elastic/eui/icon-accessibility-rules` lint violations across @elastic/kibana-security files (#269654)\n\nResolves 36 ESLint `@elastic/eui/icon-accessibility-rules` violations\nacross 25 files owned by @elastic/kibana-security.\n\n## Changes\n\n- **Decorative icons** (adjacent to visible text): added\n`aria-hidden={true}`\n- Logo icons, category icons, chevrons, empty spacers, inputOutput\nicons, document/sort icons\n- **Meaningful icons** (convey standalone information): added\n`aria-label` with i18n\n - Warning icon in `role_table_display.tsx` → \"Deprecated\"\n - MinusCircle icon in `privilege_display.tsx` → \"None\"\n\nExample:\n\n```tsx\n// Decorative — icon next to visible text\n<EuiIcon type=\"logoElastic\" size=\"xxl\" aria-hidden={true} />\n\n// Meaningful — icon conveys status independently\n<EuiIcon\n type=\"warning\"\n color=\"warning\"\n size=\"s\"\n aria-label={i18n.translate(\n 'xpack.security.management.roles.roleTableDisplay.deprecatedIconAriaLabel',\n { defaultMessage: 'Deprecated' }\n )}\n/>\n```\n\n> [!WARNING]\n>\n> <details>\n> <summary>Firewall rules blocked me from connecting to one or more\naddresses (expand for details)</summary>\n>\n> #### I tried to connect to the following addresses, but was blocked by\nfirewall rules:\n>\n> - `ci-stats.kibana.dev`\n> - Triggering command:\n`/home/REDACTED/.nvm/versions/node/v24.14.1/bin/node\n/home/REDACTED/.nvm/versions/node/v24.14.1/bin/node\nscripts/yarn_install_scripts.js run ldd 0.8.2` (dns block)\n> - Triggering command:\n`/home/REDACTED/.nvm/versions/node/v24.14.1/bin/node\n/home/REDACTED/.nvm/versions/node/v24.14.1/bin/node scripts/kbn\nbootstrap` (dns block)\n> - `clients3.google.com`\n> - Triggering command:\n`/home/REDACTED/work/kibana/kibana/node_modules/@moonrepo/core-linux-x64-gnu/moon\n/home/REDACTED/work/kibana/kibana/node_modules/@moonrepo/core-linux-x64-gnu/moon\nrun :build-webpack ldd 0.8.2 &gt; b[i]) exit(0)` (dns block)\n> - `detectportal.firefox.com`\n> - Triggering command:\n`/home/REDACTED/work/kibana/kibana/node_modules/@moonrepo/core-linux-x64-gnu/moon\n/home/REDACTED/work/kibana/kibana/node_modules/@moonrepo/core-linux-x64-gnu/moon\nrun :build-webpack ldd 0.8.2 &gt; b[i]) exit(0)` (dns block)\n> - `google.com`\n> - Triggering command:\n`/home/REDACTED/work/kibana/kibana/node_modules/@moonrepo/core-linux-x64-gnu/moon\n/home/REDACTED/work/kibana/kibana/node_modules/@moonrepo/core-linux-x64-gnu/moon\nrun :build-webpack ldd 0.8.2 &gt; b[i]) exit(0)` (dns block)\n> - `googlechromelabs.github.io`\n> - Triggering command:\n`/home/REDACTED/.nvm/versions/node/v24.14.1/bin/node\n/home/REDACTED/.nvm/versions/node/v24.14.1/bin/node install.js\nyp-bin/ldd ldd b/li\u0004\u0018 nibrowser-gtk/sys/lib/libbrotlienc.so.1.0.7` (dns\nblock)\n> - `iojs.org`\n> - Triggering command: `/usr/bin/curl curl -q --fail --compressed -L -s\nREDACTED -o -` (dns block)\n>\n> If you need me to access, download, or install something from one of\nthese locations, you can either:\n>\n> - Configure [Actions setup\nsteps](https://gh.io/copilot/actions-setup-steps) to set up my\nenvironment, which run before the firewall is enabled\n> - Add the appropriate URLs or hosts to the custom allowlist in this\nrepository's [Copilot coding agent\nsettings](https://github.com/elastic/kibana/settings/copilot/coding_agent)\n(admins only)\n>\n> </details>\n\n---------\n\nCo-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>\nCo-authored-by: alexwizp <20072247+alexwizp@users.noreply.github.com>\nCo-authored-by: Alexey Antonov <alexwizp@gmail.com>\nCo-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>","sha":"a067907e6ac04afd33ea6a64b56a83dcb0aa5c09"}},{"branch":"9.4","label":"v9.4.2","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"}]}] BACKPORT--> Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: alexwizp <20072247+alexwizp@users.noreply.github.com> Co-authored-by: Alexey Antonov <alexwizp@gmail.com>
1 parent 8796ce0 commit 98c6627

27 files changed

Lines changed: 157 additions & 70 deletions

File tree

src/platform/plugins/private/interactive_setup/public/app.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ export const App: FunctionComponent<AppProps> = ({ onSuccess }) => {
7676
${euiShadowM};
7777
`}
7878
>
79-
<EuiIcon type="logoElastic" size="xxl" />
79+
<EuiIcon type="logoElastic" size="xxl" aria-hidden={true} />
8080
</span>
8181
<EuiTitle size="m">
8282
<h1>

src/platform/plugins/private/interactive_setup/public/cluster_configuration_form.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ export const CertificatePanel: FunctionComponent<CertificatePanelProps> = ({
330330
<EuiPanel color={compressed ? 'subdued' : undefined} hasBorder={!compressed}>
331331
<EuiFlexGroup responsive={false} alignItems="center" gutterSize="m">
332332
<EuiFlexItem grow={false}>
333-
<EuiIcon type="document" size="l" />
333+
<EuiIcon type="document" size="l" aria-hidden={true} />
334334
</EuiFlexItem>
335335
<EuiFlexItem>
336336
<EuiFlexGroup responsive={false} gutterSize="none" justifyContent="spaceBetween">
@@ -453,7 +453,7 @@ const CertificateChain: FunctionComponent<CertificateChainProps> = ({ certificat
453453
<EuiSpacer size="s" />
454454
<EuiFlexGroup responsive={false} justifyContent="center">
455455
<EuiFlexItem grow={false}>
456-
<EuiIcon type="sortDown" color="subdued" />
456+
<EuiIcon type="sortDown" color="subdued" aria-hidden={true} />
457457
</EuiFlexItem>
458458
</EuiFlexGroup>
459459
<EuiSpacer size="s" />

x-pack/platform/packages/private/security/ui_components/src/kibana_privilege_table/change_all_privileges.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ export class ChangeAllPrivilegesControl extends Component<Props, State> {
8888
id="xpack.security.management.editRole.changeAllPrivilegesLink"
8989
defaultMessage="Bulk actions"
9090
/>{' '}
91-
<EuiIcon size="s" type="chevronSingleDown" />
91+
<EuiIcon size="s" type="chevronSingleDown" aria-hidden={true} />
9292
</EuiText>
9393
</EuiLink>
9494
);

x-pack/platform/packages/private/security/ui_components/src/kibana_privilege_table/feature_table.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ export class FeatureTable extends Component<Props, State> {
111111
>
112112
{category.euiIconType ? (
113113
<EuiFlexItem grow={false}>
114-
<EuiIcon size="m" type={category.euiIconType} />
114+
<EuiIcon size="m" type={category.euiIconType} aria-hidden={true} />
115115
</EuiFlexItem>
116116
) : null}
117117
<EuiFlexItem grow={1}>
@@ -279,7 +279,11 @@ export class FeatureTable extends Component<Props, State> {
279279
</EuiText>
280280
);
281281

282-
return renderFeatureMarkup(buttonContent, extraAction, <EuiIcon type="empty" />);
282+
return renderFeatureMarkup(
283+
buttonContent,
284+
extraAction,
285+
<EuiIcon type="empty" aria-hidden={true} />
286+
);
283287
}
284288

285289
if (primaryFeaturePrivileges.length === 0) {

x-pack/platform/packages/shared/security/form_components/src/form_label.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ export const FormLabel: FC<PropsWithChildren<FormLabelProps>> = (props) => {
5151

5252
{!isEqual ? (
5353
<EuiFlexItem grow={false}>
54-
<EuiIcon type="dot" color="success" size="s" />
54+
<EuiIcon type="dot" color="success" size="s" aria-hidden={true} />
5555
</EuiFlexItem>
5656
) : undefined}
5757
</EuiFlexGroup>

x-pack/platform/packages/shared/security/form_components/src/theme_keypad_menu.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export const ThemeKeyPadMenu: FunctionComponent<ThemeKeyPadMenuProps> = ({
4646
isDisabled={isDisabled}
4747
onChange={() => helpers.setValue(id)}
4848
>
49-
<EuiIcon type={icon} size="l" />
49+
<EuiIcon type={icon} size="l" aria-hidden={true} />
5050
</EuiKeyPadMenuItem>
5151
);
5252
};

x-pack/platform/plugins/shared/security/public/authentication/components/authentication_state_page/authentication_state_page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export const AuthenticationStatePage: FC<PropsWithChildren<Props>> = (props) =>
2727
const logo = customLogo ? (
2828
<EuiImage src={customLogo} size={40} alt="logo" />
2929
) : (
30-
<EuiIcon type="logoElastic" size="xxl" />
30+
<EuiIcon type="logoElastic" size="xxl" aria-hidden={true} />
3131
);
3232
// custom logo needs to be centered
3333
const logoStyle = customLogo ? { padding: 0 } : {};

x-pack/platform/plugins/shared/security/public/authentication/login/components/login_form/login_form.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ export class LoginForm extends Component<LoginFormProps, State> {
344344
>
345345
<EuiFlexGroup alignItems="center" gutterSize="m" responsive={false}>
346346
<EuiFlexItem grow={false}>
347-
<EuiIcon size="xl" type={provider.icon ?? 'empty'} />
347+
<EuiIcon size="xl" type={provider.icon ?? 'empty'} aria-hidden={true} />
348348
</EuiFlexItem>
349349
<EuiFlexItem>
350350
<EuiTitle size="xs">

x-pack/platform/plugins/shared/security/public/authentication/overwritten_session/__snapshots__/overwritten_session_page.test.tsx.snap

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

x-pack/platform/plugins/shared/security/public/management/role_mappings/edit_role_mapping/mapping_info_panel/mapping_info_panel.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ export class MappingInfoPanel extends Component<Props, State> {
187187
id="xpack.security.management.editRoleMapping.switchToRoleTemplates"
188188
defaultMessage="Switch to role templates"
189189
/>{' '}
190-
<EuiIcon size="s" type="inputOutput" />
190+
<EuiIcon size="s" type="inputOutput" aria-hidden={true} />
191191
</Fragment>
192192
</EuiLink>
193193
);
@@ -266,7 +266,7 @@ export class MappingInfoPanel extends Component<Props, State> {
266266
id="xpack.security.management.editRoleMapping.switchToRoles"
267267
defaultMessage="Switch to roles"
268268
/>{' '}
269-
<EuiIcon size="s" type="inputOutput" />
269+
<EuiIcon size="s" type="inputOutput" aria-hidden={true} />
270270
</Fragment>
271271
</EuiLink>
272272
);

0 commit comments

Comments
 (0)