|
1 | 1 | --- |
2 | 2 | name: ui5-best-practices-accessibility |
3 | | -description: > |
| 3 | +description: | |
4 | 4 | This skill should be used when the user asks to audit, fix, check, review, or |
5 | | - improve accessibility, a11y, ARIA, landmarks, labeling, heading levels, |
6 | | - keyboard shortcuts, screen reader support, invisible messaging, reading order, |
7 | | - or touch target size in UI5 application files (views, fragments, controllers). |
8 | | - Also use when the user creates a new UI5 view, fragment, or controller and |
9 | | - wants it to be accessible, or asks whether a specific control (Dialog, Table, |
10 | | - Panel, etc.) meets accessibility requirements. |
11 | | -allowed-tools: Read Bash AskUserQuestion |
| 5 | + improve accessibility, a11y, ARIA, WCAG compliance, landmarks, labeling, heading |
| 6 | + levels, focus handling, keyboard navigation, keyboard shortcuts, screen reader |
| 7 | + support, invisible messaging, reading order, or touch / target size in UI5 |
| 8 | + application files (views, fragments, controllers). Also use when the user |
| 9 | + creates a new UI5 view, fragment, or controller and wants it to be accessible, |
| 10 | + or asks whether a specific control (Dialog, Table, Panel, etc.) meets |
| 11 | + accessibility requirements. |
| 12 | +
|
| 13 | + Keywords: accessibility, a11y, ARIA, WCAG, screen reader, NVDA, JAWS, VoiceOver, |
| 14 | + landmark, landmarkInfo, accessibleRole, ariaLabelledBy, ariaDescribedBy, |
| 15 | + labelFor, tooltip, alt text, decorative, heading level, initialFocus, F6, |
| 16 | + fast nav, fastnavgroup, tabindex, CommandExecution, keyboard shortcut, |
| 17 | + InvisibleMessage, announce, reading order, reactiveAreaMode, target size. |
12 | 18 | --- |
13 | 19 |
|
14 | 20 | # Accessibility Review |
@@ -46,14 +52,14 @@ API pattern and wrong/correct examples. |
46 | 52 |
|
47 | 53 | | # | Topic | What to detect | Topic file | |
48 | 54 | |---|-------|---------------|------------| |
49 | | -| 1 | Landmarks | `DynamicPage`, `Page`, `Panel`, `ObjectPage`, `FlexibleColumnLayout` missing `landmarkInfo` or `accessibleRole`; landmark role set without its corresponding label (e.g. `rootRole` without `rootLabel`) | `${CLAUDE_SKILL_DIR}/references/landmark.md` | |
50 | | -| 2 | Labeling | Inputs without `<Label labelFor>` (except inside `SimpleForm`); Tables without `ariaLabelledBy`; icon-only `Button` without `tooltip`; standalone `Icon` without `alt` and not marked `decorative`; `Image` with `decorative=false` and no `alt`; `Dialog` with `showHeader:false` and no `ariaLabelledBy` | `${CLAUDE_SKILL_DIR}/references/labeling.md` | |
51 | | -| 3 | Heading levels | `<Title>` without explicit `level`; heading level jumps (e.g. H1 → H3) within a view | `${CLAUDE_SKILL_DIR}/references/heading.md` | |
52 | | -| 4 | Focus handling | `Dialog` or `Popover` without `initialFocus` when a specific starting element is required; larger composite areas that act as distinct logical regions and need a `sap-ui-fastnavgroup` `CustomData` entry; `tabindex` values greater than 0 in rendered HTML | `${CLAUDE_SKILL_DIR}/references/keyboard.md` | |
53 | | -| 5 | Keyboard shortcuts | Action buttons (save, delete, etc.) using plain `press=".onX"` that should support keyboard shortcuts but have no `CommandExecution` | `${CLAUDE_SKILL_DIR}/references/shortcut.md` | |
54 | | -| 6 | Invisible messaging | Dynamic state changes (save confirmations, errors, filter results) that are visible-only with no `InvisibleMessage.announce()` call in the handler | `${CLAUDE_SKILL_DIR}/references/invisible-message.md` | |
55 | | -| 7 | Reading order | Controls visually reordered via CSS/layout but out of sequence in XML; `ariaDescribedBy` pointing to IDs that appear later in the DOM | `${CLAUDE_SKILL_DIR}/references/reading-order.md` | |
56 | | -| 8 | Target size | `Link`, `ObjectIdentifier`, `ObjectStatus`, `ObjectNumber`, `ObjectMarker`, `ObjectAttribute` inside an interactive container without `reactiveAreaMode`; or in other dense layout without spacing | `${CLAUDE_SKILL_DIR}/references/target-size.md` | |
| 55 | +| 1 | Landmarks | `DynamicPage`, `Page`, `Panel`, `ObjectPage`, `FlexibleColumnLayout` missing `landmarkInfo` or `accessibleRole`; landmark role set without its corresponding label (e.g. `rootRole` without `rootLabel`) | `references/landmark.md` | |
| 56 | +| 2 | Labeling | Inputs without `<Label labelFor>` (except inside `SimpleForm`); Tables without `ariaLabelledBy`; icon-only `Button` without `tooltip`; standalone `Icon` without `alt` and not marked `decorative`; `Image` with `decorative=false` and no `alt`; `Dialog` with `showHeader:false` and no `ariaLabelledBy` | `references/labeling.md` | |
| 57 | +| 3 | Heading levels | `<Title>` without explicit `level`; heading level jumps (e.g. H1 → H3) within a view | `references/heading.md` | |
| 58 | +| 4 | Focus & keyboard | `Dialog` or `Popover` without `initialFocus` when a specific starting element is required; larger composite areas that act as distinct logical regions and need a `sap-ui-fastnavgroup` `CustomData` entry; `tabindex` values greater than 0 in rendered HTML | `references/keyboard.md` | |
| 59 | +| 5 | Keyboard shortcuts | Action buttons (save, delete, etc.) using plain `press=".onX"` that should support keyboard shortcuts but have no `CommandExecution` | `references/shortcut.md` | |
| 60 | +| 6 | Invisible messaging | Dynamic state changes (save confirmations, errors, filter results) that are visible-only with no `InvisibleMessage.announce()` call in the handler | `references/invisible-message.md` | |
| 61 | +| 7 | Reading order | Controls visually reordered via CSS/layout but out of sequence in XML; `ariaDescribedBy` pointing to IDs that appear later in the DOM | `references/reading-order.md` | |
| 62 | +| 8 | Target size | `Link`, `ObjectIdentifier`, `ObjectStatus`, `ObjectNumber`, `ObjectMarker`, `ObjectAttribute` inside an interactive container without `reactiveAreaMode`; or in other dense layout without spacing | `references/target-size.md` | |
57 | 63 |
|
58 | 64 | ## Step 3 — Report |
59 | 65 |
|
|
0 commit comments