用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/JetBrains/intellij-community --skill ui-accessibility命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Convert Product DSL module sets into bundled wrapper plugins.
Convert Product DSL module sets into bundled wrapper plugins.
Migrate IntelliJ JPS module tests to Bazel and debug Bazel-only test/runtime/plugin dependency failures.
正在显示 SKILL.md
| name | ui-accessibility |
| description | Review IntelliJ UI accessibility for keyboard, focus, labels, and screen readers. |
Use this skill when creating, changing, or reviewing UI in an IntelliJ-based IDE, including plugin UI. Do not use it just because a feature has a UI surface if the work is not on the UI itself. It covers accessibility expectations for Swing, Kotlin UI DSL, and other UI stacks, plus review and verification checks for keyboard use, screen readers, focus, labels, dynamic feedback, contrast, scaling, and localization.
Follow WCAG 2.2 as the primary accessibility standard.
Accessible context details are relevant only for Swing-based UI, including Kotlin UI DSL.
JLabel.setLabelFor(). Set or override the accessible name only when the inferred name is absent, ambiguous, or incorrect.AccessibleContext and its properties only when implicit metadata is missing, insufficient, or incorrect.component.getAccessibleContext().accessibleName = ... / accessibleDescription = ... for assigning one already-known value.AccessibleContextUtil when it adds value: copying metadata from another component, combining multiple accessible strings, avoiding duplicate descriptions, setting an accessible parent, or normalizing multiline text for screen readers.accessibleDescription in rare cases for supplementary text that already exists in the UI but is not otherwise read when the related component receives focus, such as comments, banners, hints, warnings, or inline explanations. Do not invent a separate description from scratch or duplicate the visible label/state.AccessibleRole.LABEL for plain text content and AccessibleRole.TEXT for editable or selectable text fields/text areas. Use the specific button role that matches behavior: PUSH_BUTTON, RADIO_BUTTON, TOGGLE_BUTTON, or HYPERLINK.AccessibleAction, AccessibleText, AccessibleSelection, AccessibleValue, or other Accessible* interfaces they implement before choosing interfaces manually.AccessibleAnnouncerUtil.announce() for the most important changes outside the focused component or changes that do not fit existing property-change support.AccessibleAnnouncerUtil.isAnnouncingAvailable() when code depends on announcement support.ScreenReader.isActive() only for the rare behavior that must differ for screen reader users. By default, the UI should behave the same for all users.Check the UI before finishing code changes:
Tab moves focus to the next focusable component and Shift+Tab moves it to the previous one. This applies for every focusable surface: dialogs, popups, tool windows, and embedded panels.Escape closes dialogs and popups. From a tool window it returns focus to the editor when that is the expected exit path.focusTraversalKeysEnabled = false; a Tab/Shift+Tab key binding or a component that consumes the key; a custom FocusTraversalPolicy.Tab currently does something other than move focus, the recommended fix is to move that behavior to a non-traversal key and leave Tab and Shift+Tab for traversal. Keep a Tab override only where it is a platform convention users already expect, such as Tab completing inside an open completion popup, and scope it to that state alone.ScreenReader.isActive().Tab order and compare that order against the visual layout. Note any key that overrides traversal and what it does instead.