@salesforce/afv-skills 1.37.0 → 1.38.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. package/package.json +1 -1
  2. package/skills/agentforce-generate/README.md +20 -3
  3. package/skills/agentforce-generate/SKILL.md +253 -440
  4. package/skills/agentforce-generate/assets/agent-spec-template.md +6 -2
  5. package/skills/agentforce-generate/assets/agents/order-service.agent +16 -12
  6. package/skills/agentforce-generate/assets/agents/production-faq.agent +4 -4
  7. package/skills/agentforce-generate/assets/agents/router-first.agent +5 -5
  8. package/skills/agentforce-generate/assets/agents/template-single-subagent.agent +4 -4
  9. package/skills/agentforce-generate/assets/agents/verification-gate.agent +8 -6
  10. package/skills/agentforce-generate/assets/agents/voice-knowledge-grounded.agent +9 -9
  11. package/skills/agentforce-generate/assets/agents/voice-service-agent.agent +7 -7
  12. package/skills/agentforce-generate/assets/patterns/README.md +3 -3
  13. package/skills/agentforce-generate/assets/patterns/action-callbacks.agent +5 -5
  14. package/skills/agentforce-generate/assets/patterns/advanced-input-bindings.agent +6 -8
  15. package/skills/agentforce-generate/assets/patterns/bidirectional-routing.agent +11 -13
  16. package/skills/agentforce-generate/assets/patterns/critical-input-collection.agent +11 -16
  17. package/skills/agentforce-generate/assets/patterns/lifecycle-events.agent +2 -3
  18. package/skills/agentforce-generate/assets/patterns/llm-controlled-actions.agent +6 -7
  19. package/skills/agentforce-generate/assets/patterns/open-gate-routing.agent +3 -3
  20. package/skills/agentforce-generate/assets/patterns/prompt-template-action.agent +14 -19
  21. package/skills/agentforce-generate/assets/patterns/system-instruction-overrides.agent +11 -20
  22. package/skills/agentforce-generate/references/actions-reference.md +2 -2
  23. package/skills/agentforce-generate/references/agent-audit-and-repair.md +135 -0
  24. package/skills/agentforce-generate/references/agent-audit-candidate-verification.md +160 -0
  25. package/skills/agentforce-generate/references/agent-audit-diagnostic-catalog.md +156 -0
  26. package/skills/agentforce-generate/references/agent-audit-diagnostics-actions-state.md +176 -0
  27. package/skills/agentforce-generate/references/agent-audit-diagnostics-architecture-evaluation.md +68 -0
  28. package/skills/agentforce-generate/references/agent-audit-diagnostics-instructions-routing.md +283 -0
  29. package/skills/agentforce-generate/references/agent-audit-evaluation-loop.md +191 -0
  30. package/skills/agentforce-generate/references/agent-audit-repair-report.md +143 -0
  31. package/skills/agentforce-generate/references/agent-audit-scope-path-review.md +180 -0
  32. package/skills/agentforce-generate/references/agent-design-and-spec-creation.md +105 -59
  33. package/skills/agentforce-generate/references/agent-script-core-language.md +144 -61
  34. package/skills/agentforce-generate/references/agent-subagent-map-diagrams.md +33 -23
  35. package/skills/agentforce-generate/references/agent-validation-and-debugging.md +37 -11
  36. package/skills/agentforce-generate/references/agentscript-toolchain.md +112 -0
  37. package/skills/agentforce-generate/references/architecture-patterns.md +81 -18
  38. package/skills/agentforce-generate/references/common-control-flow-pitfalls.md +255 -0
  39. package/skills/agentforce-generate/references/control-flow-actions-sequencing.md +198 -0
  40. package/skills/agentforce-generate/references/control-flow-lifecycle-side-effects.md +87 -0
  41. package/skills/agentforce-generate/references/examples.md +22 -22
  42. package/skills/agentforce-generate/references/instruction-resolution.md +123 -83
  43. package/skills/agentforce-generate/references/known-issues.md +1 -2
  44. package/skills/agentforce-generate/references/optimization-pattern-1-data-flow.md +4 -0
  45. package/skills/agentforce-generate/references/optimization-pattern-2-deterministic-logic.md +33 -0
  46. package/skills/agentforce-generate/references/optimization-pattern-3-reference-syntax.md +32 -3
  47. package/skills/agentforce-generate/references/optimization-pattern-4-escalation.md +2 -2
  48. package/skills/agentforce-generate/references/patterns-by-requirement.md +3 -1
  49. package/skills/agentforce-generate/references/posture-and-determinism.md +103 -22
  50. package/skills/agentforce-generate/references/reference-map.md +19 -3
  51. package/skills/agentforce-generate/references/scoring-rubric.md +1 -1
  52. package/skills/agentforce-generate/references/voice-latency-heuristics.md +4 -0
  53. package/skills/agentforce-generate/references/voice-modality-reference.md +4 -4
  54. package/skills/agentforce-generate/references/zen-of-agentscript.md +139 -23
  55. package/skills/agentforce-generate/scripts/agentscript-sdk-loader.mjs +133 -0
  56. package/skills/agentforce-generate/scripts/index-agent.mjs +141 -0
  57. package/skills/agentforce-generate/scripts/setup-agentscript-sdk.mjs +337 -0
  58. package/skills/automation-sandbox-post-copy-config-generate/SKILL.md +1 -1
  59. package/skills/automation-sandbox-post-copy-configure/SKILL.md +433 -0
  60. package/skills/automation-sandbox-post-copy-configure/assets/api_request_templates.json +89 -0
  61. package/skills/automation-sandbox-post-copy-configure/examples/sample_config_input.json +40 -0
  62. package/skills/automation-sandbox-post-copy-configure/examples/sample_execution_summary.md +79 -0
  63. package/skills/automation-sandbox-post-copy-configure/references/api_endpoints.md +273 -0
  64. package/skills/automation-sandbox-post-copy-configure/references/authentication.md +94 -0
  65. package/skills/automation-sandbox-post-copy-configure/references/execution_phasing.md +93 -0
  66. package/skills/automation-sandbox-post-copy-configure/references/rules_gotchas.md +35 -0
  67. package/skills/automation-sandbox-post-copy-configure/scripts/classify-patch-result.mjs +88 -0
  68. package/skills/automation-sandbox-post-copy-configure/scripts/map-metadata-key.mjs +98 -0
  69. package/skills/automation-sandbox-post-copy-configure/scripts/plan-phases.mjs +98 -0
  70. package/skills/automation-sandbox-post-copy-configure/scripts/resolve-target-org.mjs +56 -0
  71. package/skills/design-systems-slds-validate/SKILL.md +14 -13
  72. package/skills/dx-code-analyzer-custom-rule-create/examples/xpath-examples.md +1 -1
  73. package/skills/dx-code-analyzer-custom-rule-create/references/xpath-patterns-security.md +1 -1
  74. package/skills/dx-org-devhub-configure/SKILL.md +268 -0
  75. package/skills/dx-org-devhub-configure/examples/status-output.md +39 -0
  76. package/skills/dx-org-devhub-configure/scripts/devhub.sh +650 -0
  77. package/skills/dx-org-devhub-configure/scripts/test-devhub.sh +116 -0
  78. package/skills/dx-org-manage/SKILL.md +135 -42
  79. package/skills/dx-org-manage/assets/derive-alias.sh +95 -0
  80. package/skills/dx-org-manage/assets/scratch-def.seed.json +6 -0
  81. package/skills/dx-org-manage/examples/README.md +1 -1
  82. package/skills/dx-org-manage/examples/scratch-orgs/delete_output.json +8 -0
  83. package/skills/dx-org-manage/examples/scratch-orgs/display_output.json +23 -0
  84. package/skills/dx-org-manage/examples/scratch-orgs/list_output.json +58 -0
  85. package/skills/dx-org-manage/examples/scratch-orgs/resume_output.json +38 -0
  86. package/skills/dx-org-manage/examples/scratch-orgs/success_definition_file.json +1 -1
  87. package/skills/dx-org-manage/examples/scratch-orgs/success_edition.json +1 -1
  88. package/skills/dx-org-manage/examples/scratch-orgs/success_shape.json +41 -0
  89. package/skills/dx-org-manage/examples/scratch-orgs/success_snapshot.json +1 -1
  90. package/skills/dx-org-manage/examples/snapshots/error_output.json +3 -3
  91. package/skills/dx-org-manage/references/creating-scratch-org.md +2 -2
  92. package/skills/dx-org-manage/references/creating-snapshot.md +1 -2
  93. package/skills/dx-org-manage/references/definition_file_options.md +24 -0
  94. package/skills/dx-org-manage/references/edition_types.md +10 -8
  95. package/skills/dx-org-manage/references/opening-org.md +11 -12
  96. package/skills/dx-org-manage/references/scratch-org-create.md +303 -0
  97. package/skills/dx-org-manage/references/scratch-org-operations.md +135 -0
  98. package/skills/experience-aura-lwc-migrate/SKILL.md +120 -0
  99. package/skills/experience-aura-lwc-migrate/references/aura-api-expert.md +170 -0
  100. package/skills/experience-aura-lwc-migrate/references/aura-data-expert.md +172 -0
  101. package/skills/experience-aura-lwc-migrate/references/aura-migration-guidelines.md +299 -0
  102. package/skills/experience-aura-lwc-migrate/references/aura-prd-framework.md +79 -0
  103. package/skills/experience-aura-lwc-migrate/references/aura-redundant-code-expert.md +24 -0
  104. package/skills/experience-aura-lwc-migrate/references/aura-reference-expert.md +140 -0
  105. package/skills/experience-aura-lwc-migrate/references/aura-resolver-expert.md +115 -0
  106. package/skills/experience-aura-lwc-migrate/references/aura-slots-expert.md +67 -0
  107. package/skills/experience-aura-lwc-migrate/references/aura-style-expert.md +62 -0
  108. package/skills/experience-aura-lwc-migrate/references/aura-to-lwc-completeness-checklist.md +188 -0
  109. package/skills/experience-aura-lwc-migrate/references/aura-values-expert.md +67 -0
  110. package/skills/experience-content-media-search/SKILL.md +17 -12
  111. package/skills/experience-content-media-stock-image-search/SKILL.md +192 -0
  112. package/skills/experience-content-media-stock-image-search/scripts/download-stock-image.py +102 -0
  113. package/skills/experience-lds-best-practices-apply/SKILL.md +245 -0
  114. package/skills/experience-lds-best-practices-apply/references/adapter-apis.md +1640 -0
  115. package/skills/experience-lds-best-practices-apply/references/lds-data-consistency.md +126 -0
  116. package/skills/experience-lds-best-practices-apply/references/lds-expert.md +429 -0
  117. package/skills/experience-lds-best-practices-apply/references/lds-referential-integrity.md +322 -0
  118. package/skills/experience-lds-best-practices-apply/references/wire-adapter-types.md +1511 -0
  119. package/skills/experience-lds-graphql-generate/SKILL.md +222 -0
  120. package/skills/experience-lds-graphql-generate/references/generation-guide.md +236 -0
  121. package/skills/experience-lds-graphql-generate/references/generation-mutation.md +277 -0
  122. package/skills/experience-lds-graphql-generate/references/generation-query.md +237 -0
  123. package/skills/experience-lds-graphql-generate/scripts/fetch-lds-graphql-schema.sh +230 -0
  124. package/skills/experience-lds-graphql-generate/scripts/test-lds-graphql-query.sh +128 -0
  125. package/skills/experience-lwc-accessibility-validate/SKILL.md +112 -0
  126. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-1-1-1-non-text-content.md +88 -0
  127. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-1-3-1-i-lists.md +52 -0
  128. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-1-3-1-ii-tables.md +106 -0
  129. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-1-3-1-iii-form-labels.md +78 -0
  130. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-1-3-1-iv-regions.md +26 -0
  131. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-1-3-1-v-groups.md +66 -0
  132. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-1-3-5-identify-input.md +70 -0
  133. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-1-4-3-contrast.md +115 -0
  134. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-2-1-1-keyboard.md +47 -0
  135. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-2-4-4-link-purpose.md +39 -0
  136. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-2-4-6-headings-labels.md +50 -0
  137. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-2-5-1-pointer-gestures.md +54 -0
  138. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-2-5-2-pointer-cancellation.md +49 -0
  139. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-2-5-3-label-in-name.md +77 -0
  140. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-2-5-7-dragging-movement.md +45 -0
  141. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-3-2-1-on-focus.md +55 -0
  142. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-3-2-2-on-input.md +51 -0
  143. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-3-3-1-error-identification.md +84 -0
  144. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-3-3-2-labels-instructions.md +50 -0
  145. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-3-3-3-error-suggestion.md +64 -0
  146. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-4-1-2-i-name.md +105 -0
  147. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-4-1-2-ii-role.md +99 -0
  148. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-4-1-2-iii-value.md +97 -0
  149. package/skills/experience-lwc-accessibility-validate/references/vision/sc-1-1-1-non-text-content.md +83 -0
  150. package/skills/experience-lwc-accessibility-validate/references/vision/sc-1-4-1-use-of-color.md +62 -0
  151. package/skills/experience-lwc-accessibility-validate/references/vision/sc-1-4-10-resize-reflow.md +18 -0
  152. package/skills/experience-lwc-accessibility-validate/references/vision/sc-1-4-11-non-text-contrast.md +43 -0
  153. package/skills/experience-lwc-accessibility-validate/references/vision/sc-1-4-3-contrast.md +25 -0
  154. package/skills/experience-lwc-accessibility-validate/scripts/contrast-ratio.py +153 -0
  155. package/skills/experience-lwc-design-generate/SKILL.md +261 -0
  156. package/skills/experience-lwc-design-generate/references/figma-to-prd-blueprint.md +66 -0
  157. package/skills/experience-lwc-design-generate/references/prd-analysis-template.md +17 -0
  158. package/skills/experience-lwc-design-generate/scripts/check-component-name.sh +75 -0
  159. package/skills/experience-lwc-design-generate/scripts/detect-project-tools.sh +97 -0
  160. package/skills/experience-lwc-runtime-observe/SKILL.md +244 -0
  161. package/skills/experience-lwc-runtime-observe/examples/component-preview-and-dom.md +41 -0
  162. package/skills/experience-lwc-runtime-observe/scripts/extract-dom.sh +79 -0
  163. package/skills/experience-lwc-runtime-observe/scripts/open-frontdoor.sh +46 -0
  164. package/skills/experience-lwc-runtime-observe/scripts/verify-toolchain.sh +48 -0
  165. package/skills/experience-lwc-security-validate/SKILL.md +151 -0
  166. package/skills/experience-lwc-security-validate/examples/review-report.md +6 -0
  167. package/skills/experience-lwc-security-validate/examples/score-report.sarif.json +32 -0
  168. package/skills/experience-lwc-security-validate/references/lws-security-expert.md +986 -0
  169. package/skills/experience-lwc-security-validate/references/security-analysis.md +611 -0
  170. package/skills/experience-lwc-security-validate/scripts/check-lwc-import.sh +166 -0
  171. package/skills/experience-lwc-security-validate/scripts/validate-sarif.sh +131 -0
  172. package/skills/experience-ui-bundle-2gp-deploy/SKILL.md +454 -0
  173. package/skills/experience-ui-bundle-2gp-deploy/assets/CustomApplication.app-meta.xml +12 -0
  174. package/skills/experience-ui-bundle-2gp-deploy/assets/PermissionSet.permissionset-meta.xml +9 -0
  175. package/skills/experience-ui-bundle-2gp-deploy/scripts/find-bundle-package-dir.sh +53 -0
  176. package/skills/experience-ui-bundle-agentforce-client-generate/SKILL.md +104 -26
  177. package/skills/experience-ui-bundle-agentforce-client-generate/references/constraints.md +35 -24
  178. package/skills/experience-ui-bundle-agentforce-client-generate/references/examples.md +92 -1
  179. package/skills/experience-ui-bundle-agentforce-client-generate/references/style-tokens.md +2 -0
  180. package/skills/experience-ui-bundle-agentforce-client-generate/references/troubleshooting.md +14 -1
  181. package/skills/experience-ui-bundle-agentforce-client-generate/scripts/detect-framework.sh +67 -0
  182. package/skills/experience-ui-bundle-deploy/SKILL.md +83 -14
  183. package/skills/experience-ui-bundle-deploy/assets/Communities.settings-meta.xml +19 -0
  184. package/skills/experience-ui-bundle-deploy/assets/org-setup.config.template.json +5 -0
  185. package/skills/experience-ui-bundle-deploy/assets/social-login-auth-providers.apex +158 -0
  186. package/skills/experience-ui-bundle-deploy/references/config-scaffold.md +13 -1
  187. package/skills/experience-ui-bundle-deploy/references/social-login.md +179 -0
  188. package/skills/experience-ui-bundle-frontend-generate/SKILL.md +14 -0
  189. package/skills/experience-ui-bundle-mfa-configure/SKILL.md +6 -5
  190. package/skills/experience-ui-bundle-mfa-configure/references/social-login.md +15 -7
  191. package/skills/experience-ui-bundle-salesforce-data-access/SKILL.md +41 -5
  192. package/skills/experience-ui-bundle-salesforce-data-access/references/caching.md +10 -22
  193. package/skills/experience-ui-bundle-salesforce-data-access/references/graphql-hand-authoring.md +4 -19
  194. package/skills/experience-ui-bundle-salesforce-data-access/references/migration.md +5 -0
  195. package/skills/experience-ui-bundle-salesforce-data-access/references/sdk-api.md +33 -150
  196. package/skills/mobile-platform-native-capabilities-integrate/references/nfc.md +35 -0
  197. package/skills/platform-apex-generate/SKILL.md +8 -7
  198. package/skills/platform-apex-test-generate/SKILL.md +3 -1
  199. package/skills/platform-apex-test-run/SKILL.md +9 -8
  200. package/skills/platform-lightning-type-widget-coordinate/SKILL.md +1 -1
  201. package/skills/platform-lightning-type-widget-coordinate/examples/existing-lightning-type-with-widget-prompt.md +1 -1
  202. package/skills/platform-lightning-type-widget-coordinate/examples/new-lightning-type-with-widget-prompt.md +1 -1
  203. package/skills/platform-lightning-type-widget-coordinate/references/validation-gates.md +3 -3
  204. package/skills/platform-mcp-tool-widget-coordinate/SKILL.md +43 -67
  205. package/skills/platform-mcp-tool-widget-coordinate/examples/action-name-source-prompt.md +1 -2
  206. package/skills/platform-mcp-tool-widget-coordinate/examples/apex-invocable-source-prompt.md +2 -3
  207. package/skills/platform-mcp-tool-widget-coordinate/examples/nested-object-list-source-prompt.md +163 -0
  208. package/skills/platform-mcp-tool-widget-coordinate/examples/nested-object-single-source-prompt.md +198 -0
  209. package/skills/platform-mcp-tool-widget-coordinate/examples/pasted-tool-output-prompt.md +0 -1
  210. package/skills/platform-mcp-tool-widget-coordinate/references/build-plan-format.md +17 -11
  211. package/skills/platform-mcp-tool-widget-coordinate/references/mcp-tool-output-discovery.md +48 -15
  212. package/skills/platform-mcp-tool-widget-coordinate/references/two-clt-modeling.md +73 -10
  213. package/skills/platform-mcp-tool-widget-coordinate/references/validation-gates.md +48 -8
  214. package/skills/platform-policy-rule-generate/SKILL.md +22 -12
  215. package/skills/platform-policy-rule-generate/references/deploy-errors.md +1 -1
  216. package/skills/platform-policy-rule-generate/references/policy-schema-full.md +8 -29
  217. package/skills/platform-policy-rule-generate/references/templates-advanced.md +1 -1
  218. package/skills/platform-sharing-owd-configure/SKILL.md +20 -8
  219. package/skills/platform-sharing-owd-configure/references/access_levels.md +14 -1
  220. package/skills/platform-sharing-rules-generate/SKILL.md +67 -35
  221. package/skills/platform-sharing-rules-generate/examples/create-cases.md +16 -17
  222. package/skills/platform-sharing-rules-generate/examples/delete-cases.md +34 -79
  223. package/skills/platform-sharing-rules-generate/examples/edit-cases.md +13 -26
  224. package/skills/platform-sharing-rules-generate/scripts/count-remaining-rules.sh +33 -0
  225. package/skills/platform-widget-generate/SKILL.md +3 -5
  226. package/skills/platform-widget-generate/examples/conditional.json +18 -13
  227. package/skills/platform-widget-generate/examples/list-with-foreach.json +2 -2
  228. package/skills/platform-widget-generate/examples/single-object.json +2 -2
  229. package/skills/platform-widget-generate/references/schema-from-lightning-type.md +27 -6
  230. package/skills/platform-widget-generate/references/widget-bundle-layout.md +4 -3
  231. package/skills/service-itsm-agentic-setup-cmdb-access-assign/SKILL.md +287 -0
  232. package/skills/service-itsm-agentic-setup-cmdb-access-assign/references/mcp-invocation.md +260 -0
  233. package/skills/service-itsm-agentic-setup-cmdb-bundle-deploy/SKILL.md +252 -0
  234. package/skills/service-itsm-agentic-setup-cmdb-bundle-deploy/references/mcp-invocation.md +204 -0
  235. package/skills/service-itsm-agentic-setup-cmdb-configure/SKILL.md +259 -0
  236. package/skills/service-itsm-agentic-setup-cmdb-configure/references/mcp-invocation.md +188 -0
  237. package/skills/service-itsm-agentic-setup-cmdb-coordinate/SKILL.md +197 -0
  238. package/skills/service-itsm-agentic-setup-cmdb-coordinate/examples/output-templates.md +77 -0
  239. package/skills/service-itsm-agentic-setup-cmdb-discovery-configure/SKILL.md +316 -0
  240. package/skills/service-itsm-agentic-setup-cmdb-discovery-configure/references/mcp-invocation.md +221 -0
  241. package/skills/service-itsm-incident-priority-configure/SKILL.md +168 -0
  242. package/skills/service-itsm-incident-priority-configure/examples/matrix-operations.md +200 -0
  243. package/skills/service-itsm-incident-priority-configure/examples/render-matrix.md +54 -0
  244. package/skills/service-itsm-incident-priority-configure/examples/seed-full-matrix.md +52 -0
  245. package/skills/service-itsm-incident-priority-configure/references/sf-cli-invocation.md +264 -0
  246. package/skills/platform-mcp-tool-widget-coordinate/examples/nested-object-source-prompt.md +0 -191
  247. package/skills/platform-policy-rule-generate/references/fixtures-index.md +0 -29
@@ -0,0 +1,64 @@
1
+ ## SC 3.3.3 - Error Suggestion (Level AA)
2
+
3
+ If an input error is automatically detected and suggestions for correction are known, then the suggestions are provided to the user, unless it would jeopardize the security or purpose of the content.
4
+
5
+ ## SC: 3.3.3 - Error Suggestion
6
+
7
+ **What is a Sufficient Error Suggestion?**
8
+
9
+ A suggestion is sufficient if it clearly states the correction needed. You should not flag messages that are already clear just to make them more verbose. The goal is to ensure a corrective suggestion exists, not to rewrite it.
10
+
11
+ - **Sufficient Suggestion Examples (DO NOT FLAG these as violations):**
12
+
13
+ - For an input field that requires only numbers, use a clear and direct error message. For example, "Please enter numbers only."
14
+ - For a password confirmation that doesn't match, use a clear and direct error message: For example, "Passwords do not match."
15
+
16
+ - **Insufficient Suggestion Examples (These SHOULD BE FLAGGED):**
17
+ - "Invalid input."
18
+ - "Access Denied."
19
+ - "Error."
20
+ - "Please fix this field."
21
+
22
+ For each form field that can produce an input error, check the following:
23
+
24
+ - The form field provides a clear error message that indicates what went wrong and how it can be fixed, when an input error is detected.
25
+ - The error message includes a suggestion for correcting the error. Some examples include, requiring a specific format, requesting acceptable values, or defining a valid range of values.
26
+ - If the input requires a specific format (for example, a date or email format), the error message suggests that the user input their information using that format. The error message suggestion can be present either in input error messages or validation error messages.
27
+ - If the input requires a value from a limited set of values (for example, a drop-down menu) the error message suggests selecting from the available options.
28
+ - If the user must validate that they're above a certain age (for example, 18 years or older), the error message must explicitly state that requirement in the error message (for example, "You must be 18 or older to proceed.").
29
+ - If the input field has an error message, it must be programmatically associated with the field.
30
+ - If error messages are displayed at the top of a component without a clear and direct association to the fields that require a correction, then flag this as an accessibility improvement/violation against WCAG 3.3.1. Also, recommend moving the error messages to a location that directly associates the error to the input field that needs to be corrected.
31
+
32
+ Common violations to check:
33
+
34
+ - Missing error messages for input fields that can produce errors.
35
+ - Error messages that do not include suggestions for correction.
36
+ - Error messages that are unclear or do not guide the user on how to correct the error.
37
+ - Error messages that are not visually adjacent (exclude toast messages) to the input field(for example, error message at the top of the form), forcing users to scan the page to locate the field that needs correction.
38
+ - Error messages which includes suggestions but are not conveyed to assistive technology. For example, the error suggestion messages and the field are not programmatically associated using `aria-describedby`.
39
+
40
+ Special Rules:
41
+
42
+ - Error suggestions should be persistent enough for all users to perceive and understand without arbitrary time limits. The error message must not disappear after certain time limit and should be visible at all times.
43
+ - Toast notifications are designed to be accessible and the toast events are designed to follow accessibility guidelines.
44
+
45
+ **ABSOLUTE AND STRICT EXCLUSION RULES FOR SC 3.3.3 'Error Suggestion':**
46
+
47
+ - \*\*DO NOT flag that the field "cannot be empty" or that it needs a value for optional fields(not marked as required). The absence of a value is valid for an optional field.
48
+ - **DO NOT flag for using `aria-describedby` that references conditionally rendered error messages is valid and common. When the referenced element is not in the DOM, browsers and screen readers handle this gracefully.
49
+ **DO NOT flag for components in the lightning namespace (prefixed with `lightning-`) if there is no form field validation or eror handling or programmatic association. They have built-in, accessible error handling and field validation that complies with WCAG standards.
50
+
51
+ Rules to follow:
52
+
53
+ - Find all violations of SC 3.3.3 'Error Suggestion' in the provided HTML and JS files (exclude CSS).
54
+ - Focus on form inputs that can produce input errors.
55
+ - If no changes or action are needed, then produce an empty list. Do not conclude 'no action is needed' or 'correctly implemented' if no violations found.
56
+ - Critically evaluate each field against the specific guidance above. Do not conclude 'no action is needed' or 'correctly implemented' if no violations found.
57
+ - For each issue found, provide a separate, detailed report.
58
+ - Keep issues concise, avoid duplicated issues or unnecessary or non-applicable problems.
59
+ - Assume that any imported functionality works as expected and was already analyzed.
60
+ - Components do not supplement or provide global functionalities.
61
+ - Lightning base components (`lightning-input`, `lightning-combobox`, `lightning-textarea`, `lightning-icon`, etc.) provide their own accessible labeling, ARIA, and error handling in shadow DOM via their dedicated attributes (`label`, `alternative-text`, field-level validation). When such a component is given a `label` attribute it is already programmatically labeled — even with `variant="label-hidden"`, which hides the label visually but keeps it for assistive technology. Do **not** flag a sibling/wrapper `<label>` or `<span>` for a missing `for`/`id` when the actual control is a self-labeling Lightning component, and do not treat a visible heading as if it were the control's only label. This also covers navigation and icon base components (`lightning-vertical-navigation-item`, `lightning-vertical-navigation-item-icon`, `lightning-button-icon`, etc.): when a `label` (or `alternative-text`) attribute is supplied, the base component renders it as the visible link/control text **and** exposes it as the accessible name, and any `icon-name` is decorative — do not emit a 4.1.2 "verify the label is associated with the icon" warning, even a hedged one. The presence of the `label` attribute is the association.
62
+ - Resolve template bindings before judging them. A template expression like `{someValue}` refers to a property or getter on the component's controller (`.js`/`.ts`) — including `@api` properties and `get someValue()` getters — not to a module-level imported constant (which LWC templates cannot bind to). Check the controller for the binding's definition before concluding a value is undefined, empty, or missing. When reviewing a diff, verify which side is the corrected code; do not assume the change introduced the problem.
63
+ - Prefer a real `<button>` for actions; for a link, `href="#"` with `event.preventDefault()` (the canonical SLDS pattern). Don't recommend `href="javascript:void(0)"` as a first-line remediation — it's a no-op-anchor anti-pattern. It is acceptable only as a last resort when moving `<a>` → `<button>` is genuinely impossible, and even then only when paired with the full set of attributes that make the anchor behave as an accessible button (`role="button"`, keyboard activation, etc.) — `void(0)` on its own is an incomplete fix. Don't flag existing `javascript:void(0)` as a violation.
64
+ - ARIA attribute spelling depends on the element type. On a **plain HTML element** (`div`, `span`, `button`, `input`, `a`, `img`, `iframe`, …) the only valid spelling is the W3C form `aria-labelledby` / `aria-describedby`; the hyphen-split `aria-labelled-by` / `aria-described-by` there **is** a real bug — keep flagging it. But on an **LWC component tag** (`lightning-*` or a custom `ns-name` element), the hyphen-split form is the kebab-case binding of the component's `@api ariaLabelledBy` / `ariaDescribedBy` property (each capital letter maps to `-` + lowercase), and LWC reflects it to the spec-correct `aria-labelledby` in the rendered DOM. Do **not** flag `aria-labelled-by` on a component tag as a misspelling, and do not claim it "breaks the accessible name computation" — you cannot determine that from the attribute name alone, because both `aria-labelled-by` (via `@api` property kebab-casing) and `aria-labelledby` (via LWC's ARIA reflection) can wire to the same property depending on the component. Treat a hyphen-split ARIA attribute on a component tag as a valid binding, not a violation.
@@ -0,0 +1,105 @@
1
+ ## SC 4.1.2 - Name, Role, Value (Level A)
2
+
3
+ For all user interface components, the name and role can be programmatically determined; states, properties, and values that can be set by the user can be programmatically set; and notification of changes to these items is available to user agents, including assistive technologies.
4
+
5
+ ## SC: 4.1.2 (i) - Name Only
6
+
7
+ Analyze the files using following context:
8
+
9
+ _Goal_ : People, including users using assistive technology understand the intent of all user interface components
10
+
11
+ _What to do_ : Review provided HTML and JS code for accessibility violations per WCAG 4.1.2 (i) Name to ensure components have an accessible name. Ignore the Roles, States and Values parts of the Success Criterion for this review
12
+
13
+ Name could be visible or invisible. Sometimes, name are required to be visible, in which case it is identified using attributes such as `label` or `aria-label`.
14
+
15
+ Following are some preferred sufficient techniques that can help satisfy name-only success criterion:
16
+
17
+ - ARIA14: Using `aria-label` attribute to provide an invisible label where a visible label cannot be used. For sighted users, the context and visual appearance can provide sufficient cues to determine the purpose and presence of control element on component. In other situations, elements are given `aria-label` to provide an accessible names when native labeling element is not supported by control. For elements that use `aria-label`, check that the value of attribute property properly describes the purpose of elements where user input is required
18
+
19
+ - Note that `aria-label` may be disregarded in some situations where `aria-labelledby` is used for same object and for overriding native name, including `alt` and/or other attributes related authoring techniques
20
+ - ARIA16: Using `aria-labelledby` attribute to provide a name for user interface controls. For each user interface control element where an `aria-labelledby` attribute is present, check that the value of the `aria-labelledby` attribute is an id of an element or a space separated list of ids referenced on the web page. Also check that the text of the referenced element or elements accurately labels the user interface control
21
+ - Like `aria-describedby`, `aria-labelledby` can accept multiple reference ids using a space seperated list, such as `label` and other elements, to allow for additional detail by concatenating multiple sources of information. This is useful in situations where sighted users use information from the surrounding context to identify a control. Also, a `label` element will always be exposed by accessibility API, while a `span` could have been used, it would lose the advantage of the larger clickable region
22
+ - While `aria-labelledby` appears similar to native HTML `label` element, there are some differences:
23
+ - `aria-labelledby` can reference more than one text element while `label` element can only reference one
24
+ - `aria-labelledby` can be used for variety of elements while `label` element can only ever be used on form elements
25
+ - Clicking on a `label` element focussed the associated form field. Same is not true with `aria-labelledby` use. If focus behavior is required, use `label` or implement this using JS scripting
26
+ - G108: Use markup to expose name, or related user-settable properties to be set. Check for proper markup, such that the name for each user interface component can be determined and that user interface components that accept user input can all be operated from Assistive Technology
27
+ - H91: For each instance of links and form elements, check that the name, value, and state are specified. In some instances, the text is associated with the control through a required HTML attribute. Like, Submit buttons using the button element text or image `alt` attribute as the name. In case of form control, label elements; `aria-label` or `aria-labelledby` properties; or the `title` attribute is used
28
+ - H44: Use `label` elements to associate text labels with form controls. The objective is to use the label element to explicitly associate a form control with a label. A label is attached to a specific form control through the use of the `for` attribute. The value of the `for` attribute must be the same as the value of the `id` attribute of the form control. The `id` attribute may have the same value as the `name` attribute, but both must be provided, and the `id` must be unique in the same DOM tree
29
+ - Elements that use explicitly associated labels are as follows:
30
+ - input type(s) for text
31
+ - `input type="date"`
32
+ - `input type="datetime-local"`
33
+ - `input type="email"`
34
+ - `input type="month"`
35
+ - `input type="number"`
36
+ - `input type="password"`
37
+ - `input type="search"`
38
+ - `input type="tel"`
39
+ - `input type="text"`
40
+ - `input type="time"`
41
+ - `input type="url"`
42
+ - `input type="week"`
43
+ - `input type="checkbox"`
44
+ - `input type="color"`
45
+ - `input type="file"`
46
+ - `input type="radio"`
47
+ - `input type="range"`
48
+ - `select`
49
+ - `textarea`
50
+ - Some cases where the `label` HTML element is ignored:
51
+ - a `button` element when the label is provided by the content
52
+ - `input type="button"` when the label is provided by the content
53
+ - `input type="hidden"`
54
+ - `input type="image"` when the label is provided by the `alt` attribute
55
+ - `input type="reset"` when the label is label provided by the `value` attribute
56
+ - `input type="submit"` when the label is label provided by the `value` attribute
57
+ - For all input elements of type `text`, `file` or `password`, for all `textarea` elements, and for all `select` elements in the Web page
58
+ - Check that there is a `label` element that identifies the purpose of control before `input`, `textarea` or `select` element
59
+ - Check that `for` attribute of `label` element matches `id` of `input`, `textarea` or `select` element
60
+ - Check that the `label` element is visible
61
+ - And, for all input elements of type `checkbox` or `radio` in Web page:
62
+ - Check for the presence of a `label` element that identifies the purpose of the control after the input element
63
+ - Check that the `for` attribute of the `label` element matches the `id` of the `input` element
64
+ - Check that `label` element is visible
65
+ - H64: Check that each `iframe` element in HTML source code for the presence of a `title` attribute. Also, that the `title` attribute contains text that describes the `iframe`'s content. Note that `title` attribute is not interchangeable with the `name` attribute. The `name` is not presented to the user, only the `title` is
66
+ - H65: For all form controls that are not associated with `label` element, check that the control has a `title` attribute, and that the purpose of form control is clear to users who can see the control and that `title` attribute identifies purpose and that it matches apparent visual purpose
67
+ - H88: For each HTML page, check that the page uses only elements, attributes that are defined in the specification, used in manner prescribed by specification and that the page can be parsed correctly, according to rules of specification - G135: Using accessibility API features to expose name, to allow user-settable name to be directly set, and to provide notification of changes by rendering content. Additionally, check that the name for each user interface component can be found - G10: Changes to the name on the component, check that the accessibility tool is alerted of change and that the component continues to work with assistive technologies
68
+ _Rules to follow_ :
69
+
70
+ * Require programmatically determinable name for all user interface components.
71
+ * For each component that violates #1, compile a concise list of issues for user to review, along with an action report on sufficient technique that can help resolve violation for component under review.
72
+ - For each issue found, provide a separate, detailed report.
73
+ - Keep issues concise, avoid duplicated issues or unnecessary or non-applicable problems.
74
+ - Assume that any imported functionality works as expected and was already analyzed.
75
+ - Components do not supplement or provide global functionalities.
76
+ - Lightning base components (`lightning-input`, `lightning-combobox`, `lightning-textarea`, `lightning-icon`, etc.) provide their own accessible labeling, ARIA, and error handling in shadow DOM via their dedicated attributes (`label`, `alternative-text`, field-level validation). When such a component is given a `label` attribute it is already programmatically labeled — even with `variant="label-hidden"`, which hides the label visually but keeps it for assistive technology. Do **not** flag a sibling/wrapper `<label>` or `<span>` for a missing `for`/`id` when the actual control is a self-labeling Lightning component, and do not treat a visible heading as if it were the control's only label. This also covers navigation and icon base components (`lightning-vertical-navigation-item`, `lightning-vertical-navigation-item-icon`, `lightning-button-icon`, etc.): when a `label` (or `alternative-text`) attribute is supplied, the base component renders it as the visible link/control text **and** exposes it as the accessible name, and any `icon-name` is decorative — do not emit a 4.1.2 "verify the label is associated with the icon" warning, even a hedged one. The presence of the `label` attribute is the association.
77
+ - Resolve template bindings before judging them. A template expression like `{someValue}` refers to a property or getter on the component's controller (`.js`/`.ts`) — including `@api` properties and `get someValue()` getters — not to a module-level imported constant (which LWC templates cannot bind to). Check the controller for the binding's definition before concluding a value is undefined, empty, or missing. When reviewing a diff, verify which side is the corrected code; do not assume the change introduced the problem.
78
+ - Prefer a real `<button>` for actions; for a link, `href="#"` with `event.preventDefault()` (the canonical SLDS pattern). Don't recommend `href="javascript:void(0)"` as a first-line remediation — it's a no-op-anchor anti-pattern. It is acceptable only as a last resort when moving `<a>` → `<button>` is genuinely impossible, and even then only when paired with the full set of attributes that make the anchor behave as an accessible button (`role="button"`, keyboard activation, etc.) — `void(0)` on its own is an incomplete fix. Don't flag existing `javascript:void(0)` as a violation.
79
+ - ARIA attribute spelling depends on the element type. On a **plain HTML element** (`div`, `span`, `button`, `input`, `a`, `img`, `iframe`, …) the only valid spelling is the W3C form `aria-labelledby` / `aria-describedby`; the hyphen-split `aria-labelled-by` / `aria-described-by` there **is** a real bug — keep flagging it. But on an **LWC component tag** (`lightning-*` or a custom `ns-name` element), the hyphen-split form is the kebab-case binding of the component's `@api ariaLabelledBy` / `ariaDescribedBy` property (each capital letter maps to `-` + lowercase), and LWC reflects it to the spec-correct `aria-labelledby` in the rendered DOM. Do **not** flag `aria-labelled-by` on a component tag as a misspelling, and do not claim it "breaks the accessible name computation" — you cannot determine that from the attribute name alone, because both `aria-labelled-by` (via `@api` property kebab-casing) and `aria-labelledby` (via LWC's ARIA reflection) can wire to the same property depending on the component. Treat a hyphen-split ARIA attribute on a component tag as a valid binding, not a violation.
80
+
81
+ **ABSOLUTE AND STRICT EXCLUSION RULES FOR SC 4.1.2 'NAME' ANALYSIS (AND WHEN NOT TO FLAG):**
82
+
83
+ - **PRIMARY RULE:** A user interface component **PASSES** the 'Name' criterion if it has _any_ programmatically determinable accessible name, whether visible or invisible, provided through valid HTML or ARIA.
84
+ - **DO NOT FLAG:** If an element already has a programmatically determinable name via:
85
+ - Its text content (e.g., button text, heading text, link text).
86
+ - An associated `<label>` element.
87
+ - An `aria-label` attribute.
88
+ - An `aria-labelledby` attribute (and the referenced ID exists within the provided code).
89
+ - An `alt` attribute for `<img>` elements (unless decorative `alt=""`).
90
+ - A `title` attribute for `<iframe>` elements or form controls not associated with a `<label>`.
91
+ - **SPECIFIC EXCLUSIONS (DO NOT FLAG):**
92
+ - **Semantic HTML elements (e.g., `<h1>`-`<h6>`, `<a>`, `<button>`, `<form>`, `<iframe>`, `<img>`)** used with their native naming mechanisms (text content, `alt`, `title`). These automatically pass.
93
+ - **Generic HTML elements (`div`, `span`)** used _solely_ for visual layout, styling, or as non-semantic containers. They do not require an accessible name unless they are _explicitly_ implemented as a custom interactive control (e.g., a custom button).
94
+ - **Crucially, if an element uses `aria-label` or `aria-labelledby` to provide an accessible name, it **automatically passes** the 'Name' criterion.** DO NOT flag these elements for "missing labels" or "missing visible labels," as `aria-label` / `aria-labelledby` are valid ways to provide a programmatic name.
95
+ - The only exception is if the _value_ of `aria-label` or the ID(s) referenced by `aria-labelledby` are clearly empty, nonsensical, or refer to non-existent elements within the provided code snippet.
96
+ - **DO NOT flag any issues related to 'Role', 'State', or 'Value'.** Focus **exclusively** on 'Name' as defined by WCAG 4.1.2 (i).
97
+ - **DO NOT suggest general "semantic structure" improvements or general best practices that are not directly related to a missing or incorrect accessible name.**
98
+ - **Specifically for `<a>` (link) elements:** If an `<a>` element has its accessible name provided by its text content or `aria-label`/`aria-labelledby`, it **passes** the 'Name' criterion. DO NOT flag its `href` attribute (e.g., `href="#"` or `href="javascript:void(0)"`) as a 'Name' issue; this relates to link purpose or behavior, not its accessible name.
99
+ - **Specifically for ARIA attributes**:
100
+ - **`aria-label` and `aria-labelledby`**: These are valid ways to provide an accessible name. Only suggest them if a user interface component _truly lacks a programmatically determinable accessible name_ through any other means.
101
+ - **`alt` attribute for `<img>`**: Flag missing `alt` attributes for `<img>` elements that convey information. If the image is purely decorative, suggest `alt=""`.
102
+ - **`title` attribute**: Only suggest the `title` attribute for form controls that are _not_ associated with a `<label>` element, and ensure its purpose is clear and matches visual intent. Also, ensure `<iframe>` elements have a descriptive `title` attribute.
103
+ - **For `spinbutton` and similar roles (e.g., `slider`, `progressbar`)**: Ensure `aria-valuemin`, `aria-valuemax`, and `aria-valuenow` use **numeric** values. Flag as an error if non-numeric values are used.
104
+ - **Focus strictly on identifying where a user interface component's _accessible name_ cannot be programmatically determined, or where an explicit ARIA naming attribute (if used) is invalid or misleading (e.g., empty `aria-label`, `aria-labelledby` referencing non-existent ID).**
105
+ - **DO NOT flag Salesforce Lightning Base Components (e.g., `lightning-card`, `lightning-record-edit-form`, `lightning-input-field`, `lightning-button`). Assume these components **automatically pass** the 'Name' criterion because Salesforce ensures their accessible names are handled implicitly and correctly.** Only flag if a custom override _explicitly breaks_ their inherent name determination, which is highly unlikely in standard usage.
@@ -0,0 +1,99 @@
1
+ ## SC 4.1.2 - Name, Role, Value (Level A)
2
+
3
+ For all user interface components, the name and role can be programmatically determined; states, properties, and values that can be set by the user can be programmatically set; and notification of changes to these items is available to user agents, including assistive technologies.
4
+
5
+ ## SC: 4.1.2 (ii) - Role Only
6
+
7
+ Analyze the given file using the following framework:
8
+
9
+ Review the provided HTML and JS files for accessibility violations per WCAG 2.2 SC 4.1.2, 'Role' ('Name' and 'Value' from this rule should not be considered). For all elements on the page, ensure that the element has the correct role assigned to it in order to determine if they meet SC 4.1.2. If they do not meet this success criterion, flag it as a violation.
10
+
11
+ **ABSOLUTE AND STRICT EXCLUSION RULES FOR SC 4.1.2 'ROLE' ANALYSIS:**
12
+
13
+ - **DO NOT flag semantic HTML elements (e.g., `<h1>`-`<h6>`, `<a>`, `<ul>`, `<li>`, `<button>`, `<form>`) if their native implicit role correctly matches their intended function.** These elements **automatically pass** the 'Role' criterion by default.
14
+ - **DO NOT flag generic HTML elements (`div`, `span`) used _solely_ for visual layout, styling, or as non-semantic containers.** These elements inherently have no semantic role and **do not require an ARIA role for SC 4.1.2 'Role' compliance**. Do not suggest adding `role="presentation"`, `role="group"`, `role="region"`, or any other role to them unless they are _explicitly_ implemented as a custom interactive control.
15
+ - **DO NOT suggest general "semantic structure" improvements (e.g., wrapping in `<section>`), "accessible name" issues (e.g., `aria-label`), "value" issues, or general best practices.** These are **outside the narrow scope** of SC 4.1.2 'Role' analysis.
16
+ - **Specifically for `role="separator"`**: ONLY suggest this role if the element is an interactive divider (e.g., a resizable split handle) or a critical, non-interactive semantic divider within an ARIA widget (e.g., within a menu or toolbar). DO NOT suggest it for purely visual lines or spacing.
17
+ **DO NOT flag Salesforce Lightning Base Components (e.g., `lightning-card`, `lightning-record-edit-form`, `lightning-input-field`, `lightning-button`). Assume these components **automatically pass** the 'Role' criterion because Salesforce ensures their roles and basic accessibility are handled implicitly and correctly.** Only flag if a custom override _explicitly breaks_ their inherent role determination, which is highly unlikely in standard usage.
18
+
19
+ For each of the following role categories, make sure that the given markup contains the relevant role to its intended purpose, either implicitly via semantic HTML, or explicitly via the role attribute. For any markup that is missing a role or uses an invalid role, flag this as a violation and suggest a fix by inferring the purpose of the markup and mapping this to a relevant role or semantic HTML element.
20
+
21
+ If semantic HTML is used and the programmatic behavior of the markup via Javascript matches its usual function, then this meets the criterion implicitly. This rule targets markup that is used to create custom implementations of controls or interface elements are programmed to behave differently than their implicit purpose.
22
+
23
+ In determining this, attempt to infer the intent of the code and determine whether the code in question maps to any valid role. Given discretion, if the code reasonably maps to a valid ARIA role, then that role should be used. This means that in some cases there can be code that does not explicitly violate SC 4.1.2 but should be flagged by you to be updated.
24
+
25
+ Some examples to be considered, but not limited to: - When template loop syntax (e.g., `for:each`, `v-for`, `map()`) or some other list enumeration is present, check if any list related role should be used. Also, consider whether list children also need to be updated with the role relevant to the parent role.
26
+
27
+ The following roles should be considered:
28
+ `toolbar`
29
+ `tooltip`
30
+ `feed`
31
+ `math`
32
+ `presentation`
33
+ `note`
34
+ `application`
35
+ `article`
36
+ `cell`
37
+ `columnheader`
38
+ `definition`
39
+ `directory`
40
+ `document`
41
+ `figure`
42
+ `group`
43
+ `heading`
44
+ `img`
45
+ `list`
46
+ `listitem`
47
+ `meter`
48
+ `row`
49
+ `rowgroup`
50
+ `rowheader`
51
+ `separator`
52
+ `table`
53
+ `term`
54
+ `scrollbar`
55
+ `searchbox`
56
+ `separator`
57
+ `slider`
58
+ `spinbutton`
59
+ `switch`
60
+ `tab`
61
+ `tabpanel`
62
+ `treeitem`
63
+ `combobox`
64
+ `menu`
65
+ `menubar`
66
+ `tablist`
67
+ `tree`
68
+ `treegrid`
69
+ `banner`
70
+ `complementary`
71
+ `contentinfo`
72
+ `form`
73
+ `main`
74
+ `navigation`
75
+ `region`
76
+ `search`
77
+ `alert`
78
+ `log`
79
+ `marquee`
80
+ `status`
81
+ `timer`
82
+ `alertdialog`
83
+ `dialog`
84
+
85
+ Also make sure to check that relationships between roles are present. For roles that require some role in its descendant tree, ensure that an element in the child subtree has that role. Inversely, for roles that require some role in its ancestor tree, ensure that some parent has that role. Any case in which these requirements are not met should be flagged as a violation. For example, a `listitem` role on a child element must be matched with a `list` role on a parent element.
86
+
87
+ Do not use Abstract Roles.
88
+
89
+ Rules to follow:
90
+
91
+ - Find all violations of SC 4.1.2 'Role' in the provided HTML and JS files.
92
+ - For each issue found, provide a separate, detailed report.
93
+ - Keep issues concise, avoid duplicated issues or unnecessary or non-applicable problems.
94
+ - Assume that any imported functionality works as expected and was already analyzed.
95
+ - Components do not supplement or provide global functionalities.
96
+ - Lightning base components (`lightning-input`, `lightning-combobox`, `lightning-textarea`, `lightning-icon`, etc.) provide their own accessible labeling, ARIA, and error handling in shadow DOM via their dedicated attributes (`label`, `alternative-text`, field-level validation). When such a component is given a `label` attribute it is already programmatically labeled — even with `variant="label-hidden"`, which hides the label visually but keeps it for assistive technology. Do **not** flag a sibling/wrapper `<label>` or `<span>` for a missing `for`/`id` when the actual control is a self-labeling Lightning component, and do not treat a visible heading as if it were the control's only label. This also covers navigation and icon base components (`lightning-vertical-navigation-item`, `lightning-vertical-navigation-item-icon`, `lightning-button-icon`, etc.): when a `label` (or `alternative-text`) attribute is supplied, the base component renders it as the visible link/control text **and** exposes it as the accessible name, and any `icon-name` is decorative — do not emit a 4.1.2 "verify the label is associated with the icon" warning, even a hedged one. The presence of the `label` attribute is the association.
97
+ - Resolve template bindings before judging them. A template expression like `{someValue}` refers to a property or getter on the component's controller (`.js`/`.ts`) — including `@api` properties and `get someValue()` getters — not to a module-level imported constant (which LWC templates cannot bind to). Check the controller for the binding's definition before concluding a value is undefined, empty, or missing. When reviewing a diff, verify which side is the corrected code; do not assume the change introduced the problem.
98
+ - Prefer a real `<button>` for actions; for a link, `href="#"` with `event.preventDefault()` (the canonical SLDS pattern). Don't recommend `href="javascript:void(0)"` as a first-line remediation — it's a no-op-anchor anti-pattern. It is acceptable only as a last resort when moving `<a>` → `<button>` is genuinely impossible, and even then only when paired with the full set of attributes that make the anchor behave as an accessible button (`role="button"`, keyboard activation, etc.) — `void(0)` on its own is an incomplete fix. Don't flag existing `javascript:void(0)` as a violation.
99
+ - ARIA attribute spelling depends on the element type. On a **plain HTML element** (`div`, `span`, `button`, `input`, `a`, `img`, `iframe`, …) the only valid spelling is the W3C form `aria-labelledby` / `aria-describedby`; the hyphen-split `aria-labelled-by` / `aria-described-by` there **is** a real bug — keep flagging it. But on an **LWC component tag** (`lightning-*` or a custom `ns-name` element), the hyphen-split form is the kebab-case binding of the component's `@api ariaLabelledBy` / `ariaDescribedBy` property (each capital letter maps to `-` + lowercase), and LWC reflects it to the spec-correct `aria-labelledby` in the rendered DOM. Do **not** flag `aria-labelled-by` on a component tag as a misspelling, and do not claim it "breaks the accessible name computation" — you cannot determine that from the attribute name alone, because both `aria-labelled-by` (via `@api` property kebab-casing) and `aria-labelledby` (via LWC's ARIA reflection) can wire to the same property depending on the component. Treat a hyphen-split ARIA attribute on a component tag as a valid binding, not a violation.
@@ -0,0 +1,97 @@
1
+ ## SC 4.1.2 - Name, Role, Value (Level A)
2
+
3
+ For all user interface components, the name and role can be programmatically determined; states, properties, and values that can be set by the user can be programmatically set; and notification of changes to these items is available to user agents, including assistive technologies.
4
+
5
+ ## SC: 4.1.2 (iii) - Value Only
6
+
7
+ Analyze the files using following context:
8
+
9
+ _Goal_: People using assistive technology understand all components correctly
10
+
11
+ _What to do_: Review the provided code for accessibility issues, focusing specifically and only on the Value requirement of 4.1.2 S.C. to ensure components have a valid value set. There is one exception- for ID Reference/List attributes, check only value syntax, not whether referenced elements exist. Attribute value(s) that is set on HTML element is the value that the attribute gets after being parsed and computed according to it's specifications. It may differ from the value that is actually written in the HTML code due to trimming whitespace or non-digits characters, default value(s), or case-insensitivity
12
+
13
+ - Enumerated attributes take on a finite set of states, the attribute value is either the state of the attribute, or the keyword that maps to it; even for the default states.
14
+ - The state for such an attribute is derived by combining the attribute's value, a set of keyword/state mappings given in the specification of each attribute, and two possible special states that can also be given in the specification of the attribute
15
+ - These special states are the invalid value default and the missing value default
16
+ - Note: Multiple keywords can map to the same state. The empty string can be a valid keyword. Note that the missing value default applies only when the attribute is missing, not when it is present with an empty string value
17
+ - For reflection purposes, states which have any keywords mapping to them are said to have a canonical keyword
18
+ - For boolean attributes, the attribute value is true when the attribute is present and false otherwise
19
+ - The presence of a boolean attribute on an element represents the true value, and the absence of the attribute represents the false value. If the attribute is present, its value must either be the empty string or a value that is an ASCII case-insensitive match for the attribute's canonical name, with no leading or trailing whitespace
20
+ - Note: The values "true" and "false" are not allowed on boolean attributes. To represent a false value, the attribute has to be omitted altogether
21
+ - If the attribute is present, its value must either be the empty string or a value that is an ASCII case-insensitive match for the attribute's canonical name, with no leading or trailing whitespace
22
+ - For attributes whose value is used in a case-insensitive context, the attribute value is the lowercase version of the value written in the HTML code
23
+ - For attributes that accept numbers, the attribute value is the result of parsing the value written in the HTML code according to the rules for parsing this kind of number. Following are some forms of a number for which individual parsing rules are applied:
24
+ - Signed integers
25
+ - Non-negative integers
26
+ - Floating-point numbers
27
+ - The Infinity and Not-a-Number (NaN) values are not valid floating-point numbers
28
+ - The valid floating-point number concept is typically only used to restrict what is allowed for authors, while the user agent requirements use the rules for parsing floating-point number values
29
+ - Percentages and lengths
30
+ - Nonzero percentages and lengths
31
+ - Lists of floating-point numbers
32
+ - Lists of dimensions
33
+ - For aria-\* attributes, the attribute value is computed as indicated by it's type in the WAI-ARIA specification and the HTML Accessibility API Mappings
34
+
35
+ _Rules to follow_:
36
+
37
+ - Require programmatically determinable ARIA state or property for all user interface components to have a valid value. This rule is applicable to any WAI-ARIA state or property that has a non-empty ("") attribute value specified on an HTML or SVG element and which is not programmatically hidden. Each target has an attribute value that is valid according to its WAI-ARIA value type specification.
38
+ - An element is programmatically hidden if either it has a computed CSS property visibility whose value is not 'visible'; or at least one of the following is true for any of its inclusive ancestors in DOM tree:
39
+ - has computed CSS property of display of 'none'; or
40
+ - has `aria-hidden` attribute set to 'true'
41
+ - note: being programmatically hidden can change as users interact with the user interface component, while being marked decorative should stay the same through all states.
42
+ - Following are some WAI-ARIA attributes types that are subject to consideration:
43
+ - `aria-activedescendant`
44
+ - `aria-atomic`
45
+ - `aria-autocomplete`
46
+ - `aria-busy`
47
+ - `aria-checked`
48
+ - `aria-colcount`
49
+ - `aria-colindex`
50
+ - `aria-colspan`
51
+ - `aria-controls`
52
+ - `aria-current`
53
+ - `aria-describedby`
54
+ - `aria-disabled`
55
+ - `aria-errormessage`
56
+ - `aria-expanded`
57
+ - `aria-flowto`
58
+ - `aria-haspopup`
59
+ - `aria-hidden`
60
+ - `aria-invalid`
61
+ - `aria-keyshortcuts`
62
+ - `aria-label`
63
+ - `aria-labelledby`
64
+ - `aria-level`
65
+ - `aria-live`
66
+ - `aria-modal`
67
+ - `aria-multiline`
68
+ - `aria-multiselectable`
69
+ - `aria-orientation`
70
+ - `aria-owns`
71
+ - `aria-placeholder`
72
+ - `aria-posinset`
73
+ - `aria-pressed`
74
+ - `aria-readonly`
75
+ - `aria-relevant`
76
+ - `aria-required`
77
+ - `aria-roledescription`
78
+ - `aria-rowcount`
79
+ - `aria-rowindex`
80
+ - `aria-rowspan`
81
+ - `aria-selected`
82
+ - `aria-setsize`
83
+ - `aria-sort`
84
+ - `aria-valuemax`
85
+ - `aria-valuemin`
86
+ - `aria-valuenow`
87
+ - `aria-valuetext`
88
+ - For each component that violates #1 rule, compile a concise list of issues for user to review.
89
+
90
+ - For each issue found, provide a separate, detailed report.
91
+ - Keep issues concise, avoid duplicated issues or unnecessary or non-applicable problems.
92
+ - Assume that any imported functionality works as expected and was already analyzed.
93
+ - Components do not supplement or provide global functionalities.
94
+ - Lightning base components (`lightning-input`, `lightning-combobox`, `lightning-textarea`, `lightning-icon`, etc.) provide their own accessible labeling, ARIA, and error handling in shadow DOM via their dedicated attributes (`label`, `alternative-text`, field-level validation). When such a component is given a `label` attribute it is already programmatically labeled — even with `variant="label-hidden"`, which hides the label visually but keeps it for assistive technology. Do **not** flag a sibling/wrapper `<label>` or `<span>` for a missing `for`/`id` when the actual control is a self-labeling Lightning component, and do not treat a visible heading as if it were the control's only label. This also covers navigation and icon base components (`lightning-vertical-navigation-item`, `lightning-vertical-navigation-item-icon`, `lightning-button-icon`, etc.): when a `label` (or `alternative-text`) attribute is supplied, the base component renders it as the visible link/control text **and** exposes it as the accessible name, and any `icon-name` is decorative — do not emit a 4.1.2 "verify the label is associated with the icon" warning, even a hedged one. The presence of the `label` attribute is the association.
95
+ - Resolve template bindings before judging them. A template expression like `{someValue}` refers to a property or getter on the component's controller (`.js`/`.ts`) — including `@api` properties and `get someValue()` getters — not to a module-level imported constant (which LWC templates cannot bind to). Check the controller for the binding's definition before concluding a value is undefined, empty, or missing. When reviewing a diff, verify which side is the corrected code; do not assume the change introduced the problem.
96
+ - Prefer a real `<button>` for actions; for a link, `href="#"` with `event.preventDefault()` (the canonical SLDS pattern). Don't recommend `href="javascript:void(0)"` as a first-line remediation — it's a no-op-anchor anti-pattern. It is acceptable only as a last resort when moving `<a>` → `<button>` is genuinely impossible, and even then only when paired with the full set of attributes that make the anchor behave as an accessible button (`role="button"`, keyboard activation, etc.) — `void(0)` on its own is an incomplete fix. Don't flag existing `javascript:void(0)` as a violation.
97
+ - ARIA attribute spelling depends on the element type. On a **plain HTML element** (`div`, `span`, `button`, `input`, `a`, `img`, `iframe`, …) the only valid spelling is the W3C form `aria-labelledby` / `aria-describedby`; the hyphen-split `aria-labelled-by` / `aria-described-by` there **is** a real bug — keep flagging it. But on an **LWC component tag** (`lightning-*` or a custom `ns-name` element), the hyphen-split form is the kebab-case binding of the component's `@api ariaLabelledBy` / `ariaDescribedBy` property (each capital letter maps to `-` + lowercase), and LWC reflects it to the spec-correct `aria-labelledby` in the rendered DOM. Do **not** flag `aria-labelled-by` on a component tag as a misspelling, and do not claim it "breaks the accessible name computation" — you cannot determine that from the attribute name alone, because both `aria-labelled-by` (via `@api` property kebab-casing) and `aria-labelledby` (via LWC's ARIA reflection) can wire to the same property depending on the component. Treat a hyphen-split ARIA attribute on a component tag as a valid binding, not a violation.
@@ -0,0 +1,83 @@
1
+ ## SC 1.1.1 - Non-text Content (Level A)
2
+
3
+ All non-text content that is presented to the user has a text alternative that serves the equivalent purpose, except for specific situations such as controls or input, time-based media, test, sensory, CAPTCHA, and decoration or formatting.
4
+
5
+ You are a UI/UX accessibility expert specializing in visual analysis of non-text content for WCAG 2.1 SC 1.1.1 compliance. Your job is to analyze Lightning Web Component screenshots to identify non-text content accessibility issues.
6
+
7
+ Your task is to visually identify non-text content accessibility issues by examining component screenshots. Look for the following problems:
8
+
9
+ IMAGES AND GRAPHICS ISSUES:
10
+
11
+ - Images that appear to convey important information but may lack proper alt text
12
+ - Decorative images that should be hidden from screen readers
13
+ - Complex images (charts, diagrams, infographics) that need detailed descriptions
14
+ - Images used as the sole means of conveying critical information
15
+ - Icons or graphics that serve as functional elements without visible labels
16
+
17
+ INTERACTIVE ELEMENT ISSUES:
18
+
19
+ - Image buttons without visible text labels that may lack accessible names
20
+ - Icon-only buttons that could be inaccessible to screen reader users
21
+ - Interactive graphics or controls without clear purpose indication
22
+ - Image maps or clickable areas without visible context
23
+ - Custom controls using images without text alternatives
24
+
25
+ VISUAL CONTENT ANALYSIS:
26
+
27
+ - Charts, graphs, or data visualizations that convey information
28
+ - Infographics with important data or concepts
29
+ - Diagrams or technical illustrations
30
+ - Screenshots or images containing text that users need to read
31
+ - Visual indicators (status icons, progress indicators) without text equivalents
32
+
33
+ DECORATIVE VS INFORMATIVE ASSESSMENT:
34
+
35
+ - Identify which images are purely decorative vs informative
36
+ - Spot images that might be incorrectly treated as decorative when they convey meaning
37
+ - Recognize when decorative images are given unnecessary descriptions
38
+ - Assess whether informative images have sufficient context
39
+
40
+ MISSING TEXT ALTERNATIVES INDICATORS:
41
+
42
+ - Images that clearly convey information but have no visible text nearby
43
+ - Standalone icons without accompanying text labels
44
+ - Complex visual content without explanatory text
45
+ - Interactive elements identified only by images
46
+ - Status or notification indicators using only visual cues
47
+
48
+ CONTEXTUAL ANALYSIS:
49
+
50
+ - Examine surrounding text and layout to understand image purpose
51
+ - Identify when images duplicate information already in text
52
+ - Assess whether visual content adds unique information
53
+ - Determine if images are essential to understanding the content
54
+
55
+ LIGHTNING WEB COMPONENT SPECIFIC ISSUES:
56
+
57
+ - Lightning icons used in interactive contexts without labels
58
+ - SLDS utility icons that may need accessible names
59
+ - Custom image components without proper accessibility implementation
60
+ - Media components without visible identification
61
+ - Background images used to convey information
62
+
63
+ For any issues you find, provide specific descriptions of what non-text content appears problematic and actionable recommendations for ensuring proper text alternatives. Focus on real accessibility impacts for users who cannot see or fully perceive the visual content.
64
+
65
+ VIOLATION CATEGORIES (use these standardized categories):
66
+
67
+ - **nontext-missing-alternative**: Basic images/content lacking text alternatives
68
+ - **nontext-complex-needs-description**: Charts, diagrams needing detailed descriptions
69
+ - **nontext-interactive-missing-label**: Interactive elements without accessible names
70
+ - **nontext-status-missing-text**: Status indicators relying only on visual cues
71
+ - **nontext-decorative-has-description**: Decorative content incorrectly given descriptions
72
+ - **nontext-unclear-purpose**: Ambiguity between decorative vs informative content
73
+
74
+ ANALYSIS APPROACH:
75
+
76
+ 1. Scan the entire component for all non-text content
77
+ 2. Categorize content as informative, functional, or decorative
78
+ 3. Identify content that likely lacks proper text alternatives
79
+ 4. Assess the accessibility impact on users with visual impairments
80
+ 5. Choose appropriate standardized violation category
81
+ 6. Provide specific, actionable recommendations
82
+
83
+ Focus on identifying visual patterns that typically indicate missing or inadequate text alternatives rather than assuming what alt text exists in the code.
@@ -0,0 +1,62 @@
1
+ ## SC 1.4.1 - Use of Color (Level A)
2
+
3
+ Color is not used as the only visual means of conveying information, indicating an action, prompting a response, or distinguishing a visual element.
4
+
5
+ You are a UI/UX accessibility expert specializing in ensuring color is not used as the only visual means of conveying information, indicating actions, prompting responses, or distinguishing visual elements for WCAG 2.2 SC 1.4.1 Use of Color compliance.
6
+
7
+ KEY CONSIDERATIONS:
8
+
9
+ - Users with partial sight often experience limited color vision
10
+ - Many older users do not see color well
11
+ - Users with limited-color or monochrome displays cannot access color-only information
12
+ - Examples of information conveyed by color: "required fields are red", "error is shown in red", "Mary's sales are in red, Tom's are in blue"
13
+ - Examples of indications of action: using color to indicate a link will open in a new window, or that a database entry has been updated successfully
14
+ - Examples of prompting response: using highlighting on form fields to indicate a required field had been left blank
15
+ - This should NOT discourage use of color, or even color coding, _if_ it is complemented by other visual indication
16
+ - If content uses colors that differ in both hue AND lightness with contrast ratio of 3:1 or greater, this counts as additional visual distinction
17
+ - However, if content relies on user's ability to accurately perceive or differentiate a particular color, an additional visual indicator is required regardless of contrast ratio (e.g., knowing whether outline is green for valid or red for invalid)
18
+
19
+ EXCEPTIONS:
20
+ This SC does not apply to:
21
+
22
+ - Situations where color has NOT been used to convey information, indicate an action, prompt a response, or distinguish a visual element
23
+ - Hyperlinks styled to appear no different than neighboring static text (such lack of differentiation is poor usability but not a 1.4.1 failure)
24
+ - The appearance of a component determined by the browser/user agent and not modified by the author
25
+ - Visited vs unvisited link states (technical constraints prevent authors from controlling this adequately per W3C documentation)
26
+
27
+ FAILING EXAMPLES (from WCAG 2.2):
28
+
29
+ - F13: Images in the content that convey information by color differences but without text alternative
30
+ - F73: Creating links that are not visually identifiable via other means (eg., underlined, bolded, italicized, sufficient difference in lightness, etc)
31
+ - F81: Identifying required or error fields using color differences only
32
+
33
+ SUFFICIENT TECHNIQUES (from WCAG 2.2):
34
+ Situation A - If color of particular words, backgrounds, or other content is used to indicate information:
35
+
36
+ - G14: Ensuring color differences used to convey information, such as required form fields are also explicitly available in text
37
+ - G205: Include a text cue or character cues as part of the programmatically determinable name for colored form control labels
38
+ - G182: Incorporate additional visual cues for each place where color alone is used to convey information such as changes to font style, addition of underlines, bold or italics, or changes to font size or weight
39
+ - G183: Ensuring a contrast ratio of 3:1 with surrounding text and providing additional visual cues on hover for links or controls where color alone is used to identify them, such as an underline, font change, etc.
40
+
41
+ Situation B - If color is used for an image to convey information:
42
+
43
+ - G111: Ensure that when color differences are used to convey information within non-text content, patterns are included to convey the same information in a manner that does not depend on color
44
+ - G14: Ensuring that information conveyed by color differences is also available in text and that text is not conditional content
45
+
46
+ VIOLATION CATEGORIES:
47
+
48
+ - color-only-elements: Links, required or error fields indicated by color alone (F81, F73)
49
+ - color-only-chart: Indicators, charts, or graphs using only color without patterns/labels (G111, G14)
50
+ - color-only-information: Images use color differences to convey information, but the text alternative for image does not (F13)
51
+
52
+ RULES TO FOLLOW:
53
+
54
+ 1. Scan component screenshots for all instances where color conveys information of particular words, backgrounds, or other content
55
+ 1.1. For each identified instance, verify if information is also available in text and that text is not conditional content
56
+ 1.2. For each identified instance, check that same information is available through text or character hues.
57
+ 1.3. For each identified instance, check that information is also styled or uses a font that makes it visually distinct from other text around it
58
+ 1.4. For each identified instance, check that the contrast ratio of at least 3:1 is achieved with surrounding text, and that hovering over link causes a visual enhancement of the link (e.g., underline, font change, etc.)
59
+ 2. Scan component screenshots for all instances where color is used in an image
60
+ 2.1. For each identified instance, check that information conveyed by color is also conveyed by using patterns that do not rely on color
61
+ 2.2. For each identified instance, check that information is also available in text that is not conditional content.
62
+ 3. For each component screenshot instance that violates rules #1, #2, compile a concise list of issues with specific, actionable recommendations referencing appropriate WCAG sufficient techniques.
@@ -0,0 +1,18 @@
1
+ You are a UI/UX expert reviewer specializing in responsive design and layout issues. Your job is to analyze Lightning Web Components (LWCs) displayed at different zoom levels to identify resize and reflow problems.
2
+
3
+ You will be provided with images of the same LWC component at three different zoom levels:
4
+
5
+ - 1x (100% zoom - normal size)
6
+ - 2x (200% zoom - double size)
7
+ - 4x (400% zoom - quadruple size)
8
+
9
+ Your task is to identify resize/reflow issues by comparing how the component renders across these zoom levels. Look for the following problems:
10
+
11
+ ACCESSIBILITY CONCERNS:
12
+
13
+ - Text that becomes too small to read comfortably at higher zoom levels
14
+ - Interactive elements that become difficult to target
15
+ - Poor contrast or readability issues that emerge at different zoom levels
16
+ - Focus indicators that become invisible or problematic
17
+
18
+ For any issues you find, provide specific, actionable feedback for fixing resize/reflow problems. Focus on real usability and accessibility impacts rather than minor cosmetic differences.
@@ -0,0 +1,43 @@
1
+ ## SC 1.4.11 - Non-text Contrast (Level AA)
2
+
3
+ The visual presentation of UI components and graphical objects has a contrast ratio of at least 3:1 against adjacent colors, except for inactive components and where the appearance is determined by the user agent and not modified by the author.
4
+
5
+ You are an UI/UX accessibility expert in visual cues to ensure a 3:1 contrast ratio against adjacent colors, including background for WCAG 2.2 SC 1.4.11 Non-Text Contrast compliance.
6
+
7
+ Analyze the files using the following context:
8
+
9
+ - _Key Considerations_:
10
+
11
+ - The 3:1 ratio is a strict threshold; values like 2.99:1 fail.
12
+ - Evaluate colors from the underlying markup/styles, not from pixel-sampled renderings, to ignore anti-aliasing effects.
13
+ - Component states (focus, hover, selected) must also meet the contrast requirements. The indicator for the state must contrast with its surroundings.
14
+ - If a visual boundary is the only way to identify a control, that boundary must have sufficient contrast.
15
+
16
+ - _Exceptions_: This SC does not apply to:
17
+ - Inactive components.
18
+ - The appearance of a component determined by the browser/user agent and not modified by the author.
19
+ - Graphics where a specific presentation is essential, such as logos, flags, screenshots, or heatmaps.
20
+
21
+ _Failing Examples_:
22
+
23
+ - A text input field with a light grey border on a white background that doesn't meet the 3:1 contrast ratio.
24
+ - The checkmark in a checked checkbox has insufficient contrast with the checkbox's background.
25
+ - A focus indicator (e.g., an outline) is not distinguishable from the adjacent background.
26
+ - An icon's meaningful parts have insufficient contrast with the background.
27
+
28
+ _Sufficient Techniques_:
29
+
30
+ - For UI Components and States:
31
+ - G195: Using an author-supplied, visible focus indicator.
32
+ - G174: Providing a control with sufficient contrast that allows users to switch to a presentation that uses sufficient contrast.
33
+ - For Graphical Objects:
34
+ - G207: Ensuring that a contrast ratio of 3:1 is provided for icons.
35
+ - G209: Providing sufficient contrast at boundaries between adjoining colors.
36
+
37
+ _Related SCs_: 1.4.1 Use of Color; 2.4.7 Focus Visible; 2.4.8 Visual Presentation.
38
+
39
+ _Rules to follow_:
40
+
41
+ 1. For each UI component, identify the visual indicators for its existence and state. Test the contrast of these indicators against adjacent colors in all states (default, focused, selected, etc.).
42
+ 2. For each graphical object, identify the parts essential for understanding its meaning. Check the contrast of these parts against adjacent colors. If there are multiple colors or gradients, test the area with the least contrast.
43
+ 3. For any issue found, provide a clear, detailed description of the non-text contrast problem. Include actionable recommendations for achieving compliance, referencing the sufficient techniques where applicable.