@salesforce/afv-skills 1.8.0 → 1.9.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 (488) hide show
  1. package/package.json +1 -1
  2. package/skills/activating-datacloud/CREDITS.md +5 -0
  3. package/skills/activating-datacloud/README.md +39 -0
  4. package/skills/activating-datacloud/SKILL.md +118 -0
  5. package/skills/analyzing-omnistudio-dependencies/CREDITS.md +5 -0
  6. package/skills/analyzing-omnistudio-dependencies/SKILL.md +477 -0
  7. package/skills/analyzing-omnistudio-dependencies/references/dependency-patterns.md +508 -0
  8. package/skills/analyzing-omnistudio-dependencies/references/namespace-guide.md +300 -0
  9. package/skills/building-omnistudio-callable-apex/CREDITS.md +9 -0
  10. package/skills/building-omnistudio-callable-apex/README.md +80 -0
  11. package/skills/building-omnistudio-callable-apex/SKILL.md +276 -0
  12. package/skills/building-omnistudio-callable-apex/assets/pattern_callable_openinterface.cls +40 -0
  13. package/skills/building-omnistudio-callable-apex/assets/pattern_callable_vanilla.cls +32 -0
  14. package/skills/building-omnistudio-callable-apex/assets/pattern_migration.cls +54 -0
  15. package/skills/building-omnistudio-callable-apex/assets/pattern_openinterface.cls +45 -0
  16. package/skills/building-omnistudio-callable-apex/assets/pattern_test_class.cls +65 -0
  17. package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/IndustriesCallableException.cls +7 -0
  18. package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/Industries_QuoteByProductCallable.cls +115 -0
  19. package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/Industries_QuoteByProductCallableTest.cls +189 -0
  20. package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/TRANSCRIPT.md +115 -0
  21. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/IndustriesCallableException.cls +7 -0
  22. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomCallable.cls +74 -0
  23. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomCallableTest.cls +146 -0
  24. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomRemoteClass.cls +16 -0
  25. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/TRANSCRIPT.md +120 -0
  26. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/IndustriesCallableException.cls +7 -0
  27. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomCallable.cls +73 -0
  28. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomCallableTest.cls +128 -0
  29. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomVlocityOpenInterface2.cls +23 -0
  30. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/TRANSCRIPT.md +75 -0
  31. package/skills/building-omnistudio-datamapper/CREDITS.md +5 -0
  32. package/skills/building-omnistudio-datamapper/SKILL.md +270 -0
  33. package/skills/building-omnistudio-datamapper/assets/completion-summary-template.md +28 -0
  34. package/skills/building-omnistudio-datamapper/assets/omni-data-transform-extract.json +6 -0
  35. package/skills/building-omnistudio-datamapper/assets/omni-data-transform-item.json +12 -0
  36. package/skills/building-omnistudio-datamapper/assets/omni-data-transform-load.json +6 -0
  37. package/skills/building-omnistudio-datamapper/assets/omni-data-transform-transform.json +6 -0
  38. package/skills/building-omnistudio-datamapper/references/best-practices.md +277 -0
  39. package/skills/building-omnistudio-datamapper/references/naming-conventions.md +145 -0
  40. package/skills/building-omnistudio-flexcard/CREDITS.md +5 -0
  41. package/skills/building-omnistudio-flexcard/SKILL.md +325 -0
  42. package/skills/building-omnistudio-flexcard/assets/omni-ui-card.json +10 -0
  43. package/skills/building-omnistudio-flexcard/references/best-practices.md +291 -0
  44. package/skills/building-omnistudio-flexcard/references/data-binding-guide.md +311 -0
  45. package/skills/building-omnistudio-flexcard/references/scoring-rubric.md +66 -0
  46. package/skills/building-omnistudio-flexcard/scripts/flexcard-commands.sh +24 -0
  47. package/skills/building-omnistudio-integration-procedure/CREDITS.md +5 -0
  48. package/skills/building-omnistudio-integration-procedure/SKILL.md +275 -0
  49. package/skills/building-omnistudio-integration-procedure/assets/omni-process-element-dr-extract.json +10 -0
  50. package/skills/building-omnistudio-integration-procedure/assets/omni-process-element-set-values.json +10 -0
  51. package/skills/building-omnistudio-integration-procedure/assets/omni-process-ip.json +12 -0
  52. package/skills/building-omnistudio-integration-procedure/assets/scoring-report-format.txt +14 -0
  53. package/skills/building-omnistudio-integration-procedure/references/best-practices.md +388 -0
  54. package/skills/building-omnistudio-integration-procedure/references/element-types.md +588 -0
  55. package/skills/building-omnistudio-integration-procedure/scripts/cli-commands.sh +18 -0
  56. package/skills/building-omnistudio-omniscript/CREDITS.md +5 -0
  57. package/skills/building-omnistudio-omniscript/SKILL.md +367 -0
  58. package/skills/building-omnistudio-omniscript/assets/omni-process-element-step.json +10 -0
  59. package/skills/building-omnistudio-omniscript/assets/omni-process-element-text-block.json +11 -0
  60. package/skills/building-omnistudio-omniscript/assets/omni-process-omniscript.json +12 -0
  61. package/skills/building-omnistudio-omniscript/references/best-practices.md +480 -0
  62. package/skills/building-omnistudio-omniscript/references/element-types.md +1172 -0
  63. package/skills/building-omnistudio-omniscript/scripts/check-duplicate-omniscript.sh +13 -0
  64. package/skills/building-omnistudio-omniscript/scripts/cli-reference.sh +21 -0
  65. package/skills/building-omnistudio-omniscript/scripts/deploy-omniscript.sh +29 -0
  66. package/skills/building-sf-integrations/CREDITS.md +5 -0
  67. package/skills/building-sf-integrations/README.md +95 -0
  68. package/skills/building-sf-integrations/SKILL.md +192 -0
  69. package/skills/building-sf-integrations/assets/callouts/callout-retry-handler.cls +167 -0
  70. package/skills/building-sf-integrations/assets/callouts/http-response-handler.cls +257 -0
  71. package/skills/building-sf-integrations/assets/callouts/rest-queueable-callout.cls +262 -0
  72. package/skills/building-sf-integrations/assets/callouts/rest-sync-callout.cls +211 -0
  73. package/skills/building-sf-integrations/assets/cdc/cdc-handler.cls +246 -0
  74. package/skills/building-sf-integrations/assets/cdc/cdc-subscriber-trigger.trigger +139 -0
  75. package/skills/building-sf-integrations/assets/endpoint-security/example.cspTrustedSite-meta.xml +58 -0
  76. package/skills/building-sf-integrations/assets/endpoint-security/example.remoteSite-meta.xml +39 -0
  77. package/skills/building-sf-integrations/assets/external-credentials/jwt-external-credential.externalCredential-meta.xml +90 -0
  78. package/skills/building-sf-integrations/assets/external-credentials/oauth-external-credential.externalCredential-meta.xml +87 -0
  79. package/skills/building-sf-integrations/assets/external-services/external-service-operations.md +221 -0
  80. package/skills/building-sf-integrations/assets/external-services/openapi-registration.externalServiceRegistration-meta.xml +193 -0
  81. package/skills/building-sf-integrations/assets/named-credentials/certificate-auth.namedCredential-meta.xml +62 -0
  82. package/skills/building-sf-integrations/assets/named-credentials/custom-auth.namedCredential-meta.xml +71 -0
  83. package/skills/building-sf-integrations/assets/named-credentials/oauth-client-credentials.namedCredential-meta.xml +51 -0
  84. package/skills/building-sf-integrations/assets/named-credentials/oauth-jwt-bearer.namedCredential-meta.xml +67 -0
  85. package/skills/building-sf-integrations/assets/platform-events/event-publisher.cls +191 -0
  86. package/skills/building-sf-integrations/assets/platform-events/event-subscriber-action.cls +295 -0
  87. package/skills/building-sf-integrations/assets/platform-events/event-subscriber-trigger.trigger +108 -0
  88. package/skills/building-sf-integrations/assets/platform-events/platform-event-definition.object-meta.xml +124 -0
  89. package/skills/building-sf-integrations/assets/soap/soap-callout-service.cls +186 -0
  90. package/skills/building-sf-integrations/assets/soap/wsdl2apex-guide.md +213 -0
  91. package/skills/building-sf-integrations/hooks/scripts/suggest_credential_setup.py +271 -0
  92. package/skills/building-sf-integrations/hooks/scripts/validate_integration.py +363 -0
  93. package/skills/building-sf-integrations/references/callout-patterns.md +719 -0
  94. package/skills/building-sf-integrations/references/cdc-guide.md +288 -0
  95. package/skills/building-sf-integrations/references/cli-reference.md +94 -0
  96. package/skills/building-sf-integrations/references/event-driven-architecture-guide.md +266 -0
  97. package/skills/building-sf-integrations/references/event-patterns.md +838 -0
  98. package/skills/building-sf-integrations/references/external-services-guide.md +303 -0
  99. package/skills/building-sf-integrations/references/messaging-api-v2.md +609 -0
  100. package/skills/building-sf-integrations/references/named-credentials-automation.md +201 -0
  101. package/skills/building-sf-integrations/references/named-credentials-guide.md +173 -0
  102. package/skills/building-sf-integrations/references/platform-events-guide.md +288 -0
  103. package/skills/building-sf-integrations/references/rest-callout-patterns.md +288 -0
  104. package/skills/building-sf-integrations/references/scoring-rubric.md +59 -0
  105. package/skills/building-sf-integrations/references/security-best-practices.md +248 -0
  106. package/skills/building-sf-integrations/scripts/README.md +100 -0
  107. package/skills/building-sf-integrations/scripts/configure-named-credential.sh +236 -0
  108. package/skills/building-sf-integrations/scripts/set-api-credential.sh +146 -0
  109. package/skills/building-sf-integrations/scripts/templates/setup-credentials-with-csp.sh +158 -0
  110. package/skills/configuring-connected-apps/CREDITS.md +3 -0
  111. package/skills/configuring-connected-apps/README.md +99 -0
  112. package/skills/configuring-connected-apps/SKILL.md +224 -0
  113. package/skills/configuring-connected-apps/assets/connected-app-basic.xml +29 -0
  114. package/skills/configuring-connected-apps/assets/connected-app-canvas.xml +62 -0
  115. package/skills/configuring-connected-apps/assets/connected-app-jwt.xml +49 -0
  116. package/skills/configuring-connected-apps/assets/connected-app-oauth.xml +65 -0
  117. package/skills/configuring-connected-apps/assets/eca-global-oauth.xml +36 -0
  118. package/skills/configuring-connected-apps/assets/eca-oauth-settings.xml +36 -0
  119. package/skills/configuring-connected-apps/assets/eca-policies.xml +36 -0
  120. package/skills/configuring-connected-apps/assets/external-client-app.xml +35 -0
  121. package/skills/configuring-connected-apps/references/example-usage.md +256 -0
  122. package/skills/configuring-connected-apps/references/migration-guide.md +328 -0
  123. package/skills/configuring-connected-apps/references/oauth-flows-reference.md +660 -0
  124. package/skills/configuring-connected-apps/references/security-checklist.md +209 -0
  125. package/skills/configuring-connected-apps/references/testing-validation-guide.md +275 -0
  126. package/skills/connecting-datacloud/CREDITS.md +5 -0
  127. package/skills/connecting-datacloud/README.md +59 -0
  128. package/skills/connecting-datacloud/SKILL.md +155 -0
  129. package/skills/connecting-datacloud/examples/connections/heroku-postgres.json +15 -0
  130. package/skills/connecting-datacloud/examples/connections/ingest-api-connection.json +5 -0
  131. package/skills/connecting-datacloud/examples/connections/ingest-api-schema.json +31 -0
  132. package/skills/connecting-datacloud/examples/connections/redshift.json +16 -0
  133. package/skills/connecting-datacloud/examples/connections/sharepoint-unstructured.json +20 -0
  134. package/skills/connecting-datacloud/examples/connections/snowflake-connection.json +42 -0
  135. package/skills/debugging-apex-logs/CREDITS.md +22 -0
  136. package/skills/debugging-apex-logs/README.md +74 -0
  137. package/skills/debugging-apex-logs/SKILL.md +172 -0
  138. package/skills/debugging-apex-logs/assets/benchmarking-template.cls +327 -0
  139. package/skills/debugging-apex-logs/assets/cpu-heap-optimization.cls +307 -0
  140. package/skills/debugging-apex-logs/assets/dml-in-loop-fix.cls +219 -0
  141. package/skills/debugging-apex-logs/assets/null-pointer-fix.cls +252 -0
  142. package/skills/debugging-apex-logs/assets/soql-in-loop-fix.cls +157 -0
  143. package/skills/debugging-apex-logs/references/analysis-playbook.md +53 -0
  144. package/skills/debugging-apex-logs/references/benchmarking-guide.md +287 -0
  145. package/skills/debugging-apex-logs/references/cli-commands.md +368 -0
  146. package/skills/debugging-apex-logs/references/common-issues.md +68 -0
  147. package/skills/debugging-apex-logs/references/debug-log-reference.md +328 -0
  148. package/skills/debugging-apex-logs/references/log-analysis-tools.md +248 -0
  149. package/skills/debugging-apex-logs/references/scoring-rubric.md +21 -0
  150. package/skills/deploying-metadata/CREDITS.md +25 -0
  151. package/skills/deploying-metadata/README.md +104 -0
  152. package/skills/deploying-metadata/SKILL.md +214 -0
  153. package/skills/deploying-metadata/assets/destructiveChanges.xml +143 -0
  154. package/skills/deploying-metadata/assets/package.xml +121 -0
  155. package/skills/deploying-metadata/references/agent-deployment-guide.md +628 -0
  156. package/skills/deploying-metadata/references/deploy.sh +73 -0
  157. package/skills/deploying-metadata/references/deployment-report-template.md +89 -0
  158. package/skills/deploying-metadata/references/deployment-workflows.md +395 -0
  159. package/skills/deploying-metadata/references/orchestration.md +183 -0
  160. package/skills/deploying-metadata/references/trigger-deployment-safety.md +376 -0
  161. package/skills/deploying-omnistudio-datapacks/CREDITS.md +5 -0
  162. package/skills/deploying-omnistudio-datapacks/README.md +88 -0
  163. package/skills/deploying-omnistudio-datapacks/SKILL.md +174 -0
  164. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle/TRANSCRIPT.md +124 -0
  165. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle/deploy-business-internet-plus-bundle.yaml +11 -0
  166. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle-deploy/TRANSCRIPT.md +142 -0
  167. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle-deploy/deploy-business-internet-plus-bundle.yaml +10 -0
  168. package/skills/deploying-omnistudio-datapacks/references/job-file-template.md +42 -0
  169. package/skills/deploying-omnistudio-datapacks/references/troubleshooting-matrix.md +24 -0
  170. package/skills/developing-agentforce/assets/metadata/http-callout-flow.flow-meta.xml +1 -1
  171. package/skills/developing-agentforce/references/actions-reference.md +8 -8
  172. package/skills/fetching-salesforce-docs/README.md +66 -0
  173. package/skills/fetching-salesforce-docs/SKILL.md +209 -0
  174. package/skills/fetching-salesforce-docs/requirements.txt +2 -0
  175. package/skills/fetching-salesforce-docs/scripts/extract_help_salesforce.py +497 -0
  176. package/skills/fetching-salesforce-docs/scripts/extract_salesforce_doc.py +357 -0
  177. package/skills/fetching-salesforce-docs/scripts/runtime_bootstrap.py +58 -0
  178. package/skills/generating-apex/CREDITS.md +1 -26
  179. package/skills/generating-apex-test/CREDITS.md +2 -27
  180. package/skills/generating-lwc-components/CREDITS.md +5 -0
  181. package/skills/generating-lwc-components/README.md +126 -0
  182. package/skills/generating-lwc-components/SKILL.md +191 -0
  183. package/skills/generating-lwc-components/assets/apex-controller/LwcController.cls +327 -0
  184. package/skills/generating-lwc-components/assets/basic-component/basicComponent.css +72 -0
  185. package/skills/generating-lwc-components/assets/basic-component/basicComponent.html +111 -0
  186. package/skills/generating-lwc-components/assets/basic-component/basicComponent.js +163 -0
  187. package/skills/generating-lwc-components/assets/basic-component/basicComponent.js-meta.xml +137 -0
  188. package/skills/generating-lwc-components/assets/datatable-component/datatableComponent.html +111 -0
  189. package/skills/generating-lwc-components/assets/datatable-component/datatableComponent.js +367 -0
  190. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.css +63 -0
  191. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.html +154 -0
  192. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.js +348 -0
  193. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.js-meta.xml +87 -0
  194. package/skills/generating-lwc-components/assets/form-component/formComponent.html +165 -0
  195. package/skills/generating-lwc-components/assets/form-component/formComponent.js +275 -0
  196. package/skills/generating-lwc-components/assets/graphql-component/graphqlComponent.html +100 -0
  197. package/skills/generating-lwc-components/assets/graphql-component/graphqlComponent.js +336 -0
  198. package/skills/generating-lwc-components/assets/jest-test/componentName.test.js.example +371 -0
  199. package/skills/generating-lwc-components/assets/message-channel/RecordSelected.messageChannel-meta.xml +71 -0
  200. package/skills/generating-lwc-components/assets/message-channel/lmsPublisher.js +103 -0
  201. package/skills/generating-lwc-components/assets/message-channel/lmsSubscriber.js +181 -0
  202. package/skills/generating-lwc-components/assets/modal-component/modalComponent.html +85 -0
  203. package/skills/generating-lwc-components/assets/modal-component/modalComponent.js +199 -0
  204. package/skills/generating-lwc-components/assets/record-picker/recordPicker.html +55 -0
  205. package/skills/generating-lwc-components/assets/record-picker/recordPicker.js +199 -0
  206. package/skills/generating-lwc-components/assets/state-store/store.js +282 -0
  207. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.css +65 -0
  208. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.html +95 -0
  209. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.js-meta.xml +75 -0
  210. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.test.ts.example +301 -0
  211. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.ts +295 -0
  212. package/skills/generating-lwc-components/assets/workspace-api/workspaceComponent.html +71 -0
  213. package/skills/generating-lwc-components/assets/workspace-api/workspaceComponent.js +316 -0
  214. package/skills/generating-lwc-components/hooks/scripts/lwc-lsp-validate.py +295 -0
  215. package/skills/generating-lwc-components/hooks/scripts/post-tool-validate.py +347 -0
  216. package/skills/generating-lwc-components/hooks/scripts/slds_data/deprecated_patterns.json +74 -0
  217. package/skills/generating-lwc-components/hooks/scripts/slds_data/styling_hooks.json +111 -0
  218. package/skills/generating-lwc-components/hooks/scripts/slds_data/valid_slds_classes.json +127 -0
  219. package/skills/generating-lwc-components/hooks/scripts/slds_linter_wrapper.py +294 -0
  220. package/skills/generating-lwc-components/hooks/scripts/slds_rules/__init__.py +22 -0
  221. package/skills/generating-lwc-components/hooks/scripts/template_validator.py +332 -0
  222. package/skills/generating-lwc-components/hooks/scripts/validate_slds.py +595 -0
  223. package/skills/generating-lwc-components/references/accessibility-guide.md +843 -0
  224. package/skills/generating-lwc-components/references/advanced-features.md +108 -0
  225. package/skills/generating-lwc-components/references/async-notification-patterns.md +661 -0
  226. package/skills/generating-lwc-components/references/cli-commands.md +545 -0
  227. package/skills/generating-lwc-components/references/component-patterns.md +1476 -0
  228. package/skills/generating-lwc-components/references/flow-integration-guide.md +675 -0
  229. package/skills/generating-lwc-components/references/jest-testing.md +1011 -0
  230. package/skills/generating-lwc-components/references/lms-guide.md +860 -0
  231. package/skills/generating-lwc-components/references/lwc-best-practices.md +1310 -0
  232. package/skills/generating-lwc-components/references/performance-guide.md +861 -0
  233. package/skills/generating-lwc-components/references/scoring-and-testing.md +116 -0
  234. package/skills/generating-lwc-components/references/slds-blueprints.json +14389 -0
  235. package/skills/generating-lwc-components/references/slds-design-guide.md +166 -0
  236. package/skills/generating-lwc-components/references/state-management.md +642 -0
  237. package/skills/generating-lwc-components/references/template-anti-patterns.md +948 -0
  238. package/skills/generating-lwc-components/references/triangle-pattern.md +365 -0
  239. package/skills/generating-lwc-components/scripts/local-dev-preview.sh +34 -0
  240. package/skills/generating-mermaid-diagrams/CREDITS.md +46 -0
  241. package/skills/generating-mermaid-diagrams/README.md +114 -0
  242. package/skills/generating-mermaid-diagrams/SKILL.md +218 -0
  243. package/skills/generating-mermaid-diagrams/assets/agentforce/agent-flow.md +313 -0
  244. package/skills/generating-mermaid-diagrams/assets/architecture/system-landscape.md +351 -0
  245. package/skills/generating-mermaid-diagrams/assets/datamodel/b2b-commerce-erd.md +317 -0
  246. package/skills/generating-mermaid-diagrams/assets/datamodel/campaigns-erd.md +195 -0
  247. package/skills/generating-mermaid-diagrams/assets/datamodel/consent-erd.md +262 -0
  248. package/skills/generating-mermaid-diagrams/assets/datamodel/files-erd.md +266 -0
  249. package/skills/generating-mermaid-diagrams/assets/datamodel/forecasting-erd.md +261 -0
  250. package/skills/generating-mermaid-diagrams/assets/datamodel/fsl-erd.md +332 -0
  251. package/skills/generating-mermaid-diagrams/assets/datamodel/party-model-erd.md +237 -0
  252. package/skills/generating-mermaid-diagrams/assets/datamodel/quote-order-erd.md +277 -0
  253. package/skills/generating-mermaid-diagrams/assets/datamodel/revenue-cloud-erd.md +343 -0
  254. package/skills/generating-mermaid-diagrams/assets/datamodel/sales-cloud-erd.md +192 -0
  255. package/skills/generating-mermaid-diagrams/assets/datamodel/salesforce-erd.md +209 -0
  256. package/skills/generating-mermaid-diagrams/assets/datamodel/scheduler-erd.md +276 -0
  257. package/skills/generating-mermaid-diagrams/assets/datamodel/service-cloud-erd.md +217 -0
  258. package/skills/generating-mermaid-diagrams/assets/datamodel/territory-management-erd.md +241 -0
  259. package/skills/generating-mermaid-diagrams/assets/integration/api-sequence.md +387 -0
  260. package/skills/generating-mermaid-diagrams/assets/oauth/authorization-code-pkce.md +197 -0
  261. package/skills/generating-mermaid-diagrams/assets/oauth/authorization-code.md +152 -0
  262. package/skills/generating-mermaid-diagrams/assets/oauth/client-credentials.md +233 -0
  263. package/skills/generating-mermaid-diagrams/assets/oauth/device-authorization.md +295 -0
  264. package/skills/generating-mermaid-diagrams/assets/oauth/jwt-bearer.md +256 -0
  265. package/skills/generating-mermaid-diagrams/assets/oauth/refresh-token.md +281 -0
  266. package/skills/generating-mermaid-diagrams/assets/oauth/user-agent-social-sign-on.md +281 -0
  267. package/skills/generating-mermaid-diagrams/assets/role-hierarchy/user-hierarchy.md +322 -0
  268. package/skills/generating-mermaid-diagrams/references/color-palette.md +464 -0
  269. package/skills/generating-mermaid-diagrams/references/diagram-conventions.md +313 -0
  270. package/skills/generating-mermaid-diagrams/references/erd-conventions.md +320 -0
  271. package/skills/generating-mermaid-diagrams/references/mermaid-reference.md +434 -0
  272. package/skills/generating-mermaid-diagrams/references/mermaid-styling.md +81 -0
  273. package/skills/generating-mermaid-diagrams/references/preview-guide.md +49 -0
  274. package/skills/generating-mermaid-diagrams/references/usage-examples.md +340 -0
  275. package/skills/generating-mermaid-diagrams/scripts/README.md +160 -0
  276. package/skills/generating-mermaid-diagrams/scripts/mermaid_preview.py +654 -0
  277. package/skills/generating-mermaid-diagrams/scripts/query-org-metadata.py +293 -0
  278. package/skills/generating-visual-diagrams/CREDITS.md +80 -0
  279. package/skills/generating-visual-diagrams/README.md +83 -0
  280. package/skills/generating-visual-diagrams/SKILL.md +208 -0
  281. package/skills/generating-visual-diagrams/assets/architecture/integration-flow.md +55 -0
  282. package/skills/generating-visual-diagrams/assets/erd/core-objects.md +131 -0
  283. package/skills/generating-visual-diagrams/assets/erd/custom-objects.md +60 -0
  284. package/skills/generating-visual-diagrams/assets/lwc/dashboard-card.md +45 -0
  285. package/skills/generating-visual-diagrams/assets/lwc/data-table.md +57 -0
  286. package/skills/generating-visual-diagrams/assets/lwc/record-form.md +60 -0
  287. package/skills/generating-visual-diagrams/assets/review/apex-review.md +57 -0
  288. package/skills/generating-visual-diagrams/assets/review/lwc-review.md +48 -0
  289. package/skills/generating-visual-diagrams/references/architect-aesthetic-guide.md +257 -0
  290. package/skills/generating-visual-diagrams/references/examples-index.md +35 -0
  291. package/skills/generating-visual-diagrams/references/gemini-cli-setup.md +65 -0
  292. package/skills/generating-visual-diagrams/references/interview-questions.md +529 -0
  293. package/skills/generating-visual-diagrams/references/iteration-workflow.md +173 -0
  294. package/skills/generating-visual-diagrams/scripts/check-prerequisites.sh +101 -0
  295. package/skills/generating-visual-diagrams/scripts/generate_image.py +243 -0
  296. package/skills/handling-sf-data/CREDITS.md +5 -0
  297. package/skills/handling-sf-data/README.md +112 -0
  298. package/skills/handling-sf-data/SKILL.md +235 -0
  299. package/skills/handling-sf-data/assets/bulk/bulk-insert-10000.apex +293 -0
  300. package/skills/handling-sf-data/assets/bulk/bulk-insert-200.apex +208 -0
  301. package/skills/handling-sf-data/assets/bulk/bulk-insert-500.apex +219 -0
  302. package/skills/handling-sf-data/assets/bulk/bulk-upsert-external-id.apex +324 -0
  303. package/skills/handling-sf-data/assets/cleanup/delete-by-created-date.apex +319 -0
  304. package/skills/handling-sf-data/assets/cleanup/delete-by-name.apex +240 -0
  305. package/skills/handling-sf-data/assets/cleanup/delete-test-data.apex +311 -0
  306. package/skills/handling-sf-data/assets/cleanup/rollback-transaction.apex +266 -0
  307. package/skills/handling-sf-data/assets/csv/account-import.csv +11 -0
  308. package/skills/handling-sf-data/assets/csv/contact-import.csv +11 -0
  309. package/skills/handling-sf-data/assets/csv/custom-object-import.csv +11 -0
  310. package/skills/handling-sf-data/assets/csv/opportunity-import.csv +11 -0
  311. package/skills/handling-sf-data/assets/factories/account-factory.apex +165 -0
  312. package/skills/handling-sf-data/assets/factories/case-factory.apex +237 -0
  313. package/skills/handling-sf-data/assets/factories/contact-factory.apex +168 -0
  314. package/skills/handling-sf-data/assets/factories/custom-object-factory.apex +260 -0
  315. package/skills/handling-sf-data/assets/factories/event-factory.apex +275 -0
  316. package/skills/handling-sf-data/assets/factories/hierarchy-factory.apex +372 -0
  317. package/skills/handling-sf-data/assets/factories/lead-factory.apex +190 -0
  318. package/skills/handling-sf-data/assets/factories/opportunity-factory.apex +206 -0
  319. package/skills/handling-sf-data/assets/factories/task-factory.apex +246 -0
  320. package/skills/handling-sf-data/assets/factories/user-factory.apex +278 -0
  321. package/skills/handling-sf-data/assets/json/account-contact-tree.json +130 -0
  322. package/skills/handling-sf-data/assets/json/account-opportunity-tree.json +110 -0
  323. package/skills/handling-sf-data/assets/json/full-hierarchy-tree.json +188 -0
  324. package/skills/handling-sf-data/assets/soql/aggregate.soql +226 -0
  325. package/skills/handling-sf-data/assets/soql/child-to-parent.soql +162 -0
  326. package/skills/handling-sf-data/assets/soql/parent-to-child.soql +153 -0
  327. package/skills/handling-sf-data/assets/soql/polymorphic.soql +198 -0
  328. package/skills/handling-sf-data/assets/soql/subquery.soql +287 -0
  329. package/skills/handling-sf-data/references/anonymous-apex-guide.md +98 -0
  330. package/skills/handling-sf-data/references/bulk-operations-guide.md +94 -0
  331. package/skills/handling-sf-data/references/bulk-testing-example.md +194 -0
  332. package/skills/handling-sf-data/references/cleanup-rollback-example.md +322 -0
  333. package/skills/handling-sf-data/references/cleanup-rollback-guide.md +84 -0
  334. package/skills/handling-sf-data/references/crud-workflow-example.md +183 -0
  335. package/skills/handling-sf-data/references/governor-limits-reference.md +74 -0
  336. package/skills/handling-sf-data/references/orchestration.md +174 -0
  337. package/skills/handling-sf-data/references/relationship-query-examples.md +249 -0
  338. package/skills/handling-sf-data/references/sf-cli-data-commands.md +158 -0
  339. package/skills/handling-sf-data/references/soql-relationship-guide.md +84 -0
  340. package/skills/handling-sf-data/references/test-data-best-practices.md +104 -0
  341. package/skills/handling-sf-data/references/test-data-factory-usage.md +290 -0
  342. package/skills/handling-sf-data/references/test-data-patterns.md +98 -0
  343. package/skills/handling-sf-data/scripts/soql_validator.py +292 -0
  344. package/skills/handling-sf-data/scripts/validate_data_operation.py +379 -0
  345. package/skills/harmonizing-datacloud/CREDITS.md +3 -0
  346. package/skills/harmonizing-datacloud/README.md +31 -0
  347. package/skills/harmonizing-datacloud/SKILL.md +117 -0
  348. package/skills/modeling-omnistudio-epc-catalog/CREDITS.md +14 -0
  349. package/skills/modeling-omnistudio-epc-catalog/README.md +89 -0
  350. package/skills/modeling-omnistudio-epc-catalog/SKILL.md +395 -0
  351. package/skills/modeling-omnistudio-epc-catalog/assets/attribute-assignment-template.json +402 -0
  352. package/skills/modeling-omnistudio-epc-catalog/assets/compiled-attribute-overrides-template.json +43 -0
  353. package/skills/modeling-omnistudio-epc-catalog/assets/completion-block-template.txt +8 -0
  354. package/skills/modeling-omnistudio-epc-catalog/assets/decomposition-relationships-template.json +233 -0
  355. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_AttributeAssignments.json +514 -0
  356. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_CompiledAttributeOverrides.json +21 -0
  357. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_DataPack.json +649 -0
  358. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_DecompositionRelationships.json +200 -0
  359. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ObjectFieldAttributes.json +138 -0
  360. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_OrchestrationScenarios.json +54 -0
  361. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_OverrideDefinitions.json +266 -0
  362. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ParentKeys.json +23 -0
  363. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_PriceListEntries.json +54 -0
  364. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_PricebookEntries.json +35 -0
  365. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ProductChildItems.json +34 -0
  366. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_RuleAssignments.json +21 -0
  367. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_AttributeAssignments.json +410 -0
  368. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_DataPack.json +535 -0
  369. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_DecompositionRelationships.json +35 -0
  370. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ObjectFieldAttributes.json +138 -0
  371. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_OrchestrationScenarios.json +28 -0
  372. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ParentKeys.json +23 -0
  373. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_PriceListEntries.json +220 -0
  374. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_PricebookEntries.json +35 -0
  375. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ProductChildItems.json +414 -0
  376. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_AttributeAssignments.json +382 -0
  377. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_DataPack.json +565 -0
  378. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_DecompositionRelationships.json +35 -0
  379. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ObjectFieldAttributes.json +104 -0
  380. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_OrchestrationScenarios.json +28 -0
  381. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ParentKeys.json +13 -0
  382. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_PriceListEntries.json +106 -0
  383. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_PricebookEntries.json +35 -0
  384. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ProductChildItems.json +72 -0
  385. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_AttributeAssignments.json +142 -0
  386. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_DataPack.json +377 -0
  387. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_DecompositionRelationships.json +35 -0
  388. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ObjectFieldAttributes.json +36 -0
  389. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ParentKeys.json +8 -0
  390. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_PriceListEntries.json +54 -0
  391. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_PricebookEntries.json +35 -0
  392. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ProductChildItems.json +34 -0
  393. package/skills/modeling-omnistudio-epc-catalog/assets/object-field-attributes-template.json +138 -0
  394. package/skills/modeling-omnistudio-epc-catalog/assets/orchestration-scenarios-template.json +54 -0
  395. package/skills/modeling-omnistudio-epc-catalog/assets/override-definitions-template.json +134 -0
  396. package/skills/modeling-omnistudio-epc-catalog/assets/parent-keys-template.json +29 -0
  397. package/skills/modeling-omnistudio-epc-catalog/assets/price-list-entries-template.json +158 -0
  398. package/skills/modeling-omnistudio-epc-catalog/assets/pricebook-entries-template.json +35 -0
  399. package/skills/modeling-omnistudio-epc-catalog/assets/product-child-item-template.json +338 -0
  400. package/skills/modeling-omnistudio-epc-catalog/assets/product2-offer-template.json +527 -0
  401. package/skills/modeling-omnistudio-epc-catalog/examples/.gitkeep +1 -0
  402. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_AttributeAssignments.json +95 -0
  403. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_CompiledAttributeOverrides.json +1 -0
  404. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_DataPack.json +214 -0
  405. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_DecompositionRelationships.json +28 -0
  406. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ObjectFieldAttributes.json +98 -0
  407. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_OrchestrationScenarios.json +22 -0
  408. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_OverrideDefinitions.json +1 -0
  409. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ParentKeys.json +13 -0
  410. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_PriceListEntries.json +35 -0
  411. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_PricebookEntries.json +28 -0
  412. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ProductChildItems.json +110 -0
  413. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/TRANSCRIPT.md +58 -0
  414. package/skills/modeling-omnistudio-epc-catalog/references/epc-field-guide.md +90 -0
  415. package/skills/modeling-omnistudio-epc-catalog/references/naming-conventions.md +80 -0
  416. package/skills/modeling-omnistudio-epc-catalog/references/scoring-model.md +57 -0
  417. package/skills/modeling-omnistudio-epc-catalog/scripts/cli-validation-commands.sh +19 -0
  418. package/skills/modeling-omnistudio-epc-catalog/scripts/sample-invocations.sh +18 -0
  419. package/skills/orchestrating-datacloud/CREDITS.md +15 -0
  420. package/skills/orchestrating-datacloud/README.md +129 -0
  421. package/skills/orchestrating-datacloud/SKILL.md +236 -0
  422. package/skills/orchestrating-datacloud/UPSTREAM.md +45 -0
  423. package/skills/orchestrating-datacloud/assets/definitions/activation-target.template.json +5 -0
  424. package/skills/orchestrating-datacloud/assets/definitions/activation.template.json +7 -0
  425. package/skills/orchestrating-datacloud/assets/definitions/calculated-insight.template.json +7 -0
  426. package/skills/orchestrating-datacloud/assets/definitions/data-action-target.template.json +5 -0
  427. package/skills/orchestrating-datacloud/assets/definitions/data-action.template.json +5 -0
  428. package/skills/orchestrating-datacloud/assets/definitions/data-graph.template.json +21 -0
  429. package/skills/orchestrating-datacloud/assets/definitions/data-stream.template.json +55 -0
  430. package/skills/orchestrating-datacloud/assets/definitions/dmo.template.json +17 -0
  431. package/skills/orchestrating-datacloud/assets/definitions/identity-resolution.template.json +30 -0
  432. package/skills/orchestrating-datacloud/assets/definitions/mapping.template.json +14 -0
  433. package/skills/orchestrating-datacloud/assets/definitions/relationship.template.json +12 -0
  434. package/skills/orchestrating-datacloud/assets/definitions/search-index.template.json +9 -0
  435. package/skills/orchestrating-datacloud/assets/definitions/segment.template.json +16 -0
  436. package/skills/orchestrating-datacloud/references/feature-readiness.md +157 -0
  437. package/skills/orchestrating-datacloud/references/plugin-setup.md +140 -0
  438. package/skills/orchestrating-datacloud/scripts/bootstrap-plugin.sh +53 -0
  439. package/skills/orchestrating-datacloud/scripts/diagnose-org.mjs +511 -0
  440. package/skills/orchestrating-datacloud/scripts/generate-manifest.mjs +68 -0
  441. package/skills/orchestrating-datacloud/scripts/verify-plugin.sh +58 -0
  442. package/skills/preparing-datacloud/CREDITS.md +7 -0
  443. package/skills/preparing-datacloud/README.md +51 -0
  444. package/skills/preparing-datacloud/SKILL.md +191 -0
  445. package/skills/preparing-datacloud/examples/ingestion-api/.env.example +8 -0
  446. package/skills/preparing-datacloud/examples/ingestion-api/README.md +48 -0
  447. package/skills/preparing-datacloud/examples/ingestion-api/send-data.py +144 -0
  448. package/skills/querying-soql/CREDITS.md +21 -0
  449. package/skills/querying-soql/README.md +41 -0
  450. package/skills/querying-soql/SKILL.md +143 -0
  451. package/skills/querying-soql/assets/aggregate-queries.soql +242 -0
  452. package/skills/querying-soql/assets/basic-queries.soql +188 -0
  453. package/skills/querying-soql/assets/bulkified-query-pattern.cls +280 -0
  454. package/skills/querying-soql/assets/optimization-patterns.soql +259 -0
  455. package/skills/querying-soql/assets/relationship-queries.soql +203 -0
  456. package/skills/querying-soql/assets/selector-class.cls +219 -0
  457. package/skills/querying-soql/references/anti-patterns.md +348 -0
  458. package/skills/querying-soql/references/cli-commands.md +358 -0
  459. package/skills/querying-soql/references/field-coverage-rules.md +514 -0
  460. package/skills/querying-soql/references/query-optimization.md +142 -0
  461. package/skills/querying-soql/references/selector-patterns.md +479 -0
  462. package/skills/querying-soql/references/soql-reference.md +227 -0
  463. package/skills/querying-soql/references/soql-syntax-reference.md +208 -0
  464. package/skills/querying-soql/scripts/post-tool-validate.py +322 -0
  465. package/skills/retrieving-datacloud/CREDITS.md +7 -0
  466. package/skills/retrieving-datacloud/README.md +44 -0
  467. package/skills/retrieving-datacloud/SKILL.md +120 -0
  468. package/skills/retrieving-datacloud/examples/search-indexes/hybrid-structured.json +44 -0
  469. package/skills/retrieving-datacloud/examples/search-indexes/vector-knowledge.json +43 -0
  470. package/skills/running-apex-tests/CREDITS.md +22 -0
  471. package/skills/running-apex-tests/README.md +94 -0
  472. package/skills/running-apex-tests/SKILL.md +158 -0
  473. package/skills/running-apex-tests/assets/basic-test.cls +169 -0
  474. package/skills/running-apex-tests/assets/bulk-test.cls +255 -0
  475. package/skills/running-apex-tests/assets/dml-mock.cls +339 -0
  476. package/skills/running-apex-tests/assets/mock-callout-test.cls +353 -0
  477. package/skills/running-apex-tests/assets/stub-provider-example.cls +364 -0
  478. package/skills/running-apex-tests/assets/test-data-factory.cls +328 -0
  479. package/skills/running-apex-tests/hooks/scripts/parse-test-results.py +364 -0
  480. package/skills/running-apex-tests/references/cli-commands.md +289 -0
  481. package/skills/running-apex-tests/references/mocking-patterns.md +500 -0
  482. package/skills/running-apex-tests/references/performance-optimization.md +283 -0
  483. package/skills/running-apex-tests/references/test-fix-loop.md +49 -0
  484. package/skills/running-apex-tests/references/test-patterns.md +154 -0
  485. package/skills/running-apex-tests/references/testing-best-practices.md +509 -0
  486. package/skills/segmenting-datacloud/CREDITS.md +3 -0
  487. package/skills/segmenting-datacloud/README.md +36 -0
  488. package/skills/segmenting-datacloud/SKILL.md +115 -0
@@ -0,0 +1,843 @@
1
+ <!-- Parent: generating-lwc-components/SKILL.md -->
2
+ # Accessibility Guide for LWC
3
+
4
+ Comprehensive guide to building WCAG 2.1 AA compliant Lightning Web Components.
5
+
6
+ ---
7
+
8
+ ## Table of Contents
9
+
10
+ 1. [Accessibility Standards](#accessibility-standards)
11
+ 2. [Semantic HTML](#semantic-html)
12
+ 3. [ARIA Attributes](#aria-attributes)
13
+ 4. [Keyboard Navigation](#keyboard-navigation)
14
+ 5. [Focus Management](#focus-management)
15
+ 6. [Color and Contrast](#color-and-contrast)
16
+ 7. [Screen Reader Support](#screen-reader-support)
17
+ 8. [Live Regions](#live-regions)
18
+ 9. [Form Accessibility](#form-accessibility)
19
+ 10. [Common Patterns](#common-patterns)
20
+ 11. [Testing](#testing)
21
+ 12. [Tools and Resources](#tools-and-resources)
22
+
23
+ ---
24
+
25
+ ## Accessibility Standards
26
+
27
+ ### WCAG 2.1 AA Compliance
28
+
29
+ All Lightning Web Components should meet WCAG 2.1 Level AA standards.
30
+
31
+ | Principle | Description |
32
+ |-----------|-------------|
33
+ | **Perceivable** | Information must be presentable to users in ways they can perceive |
34
+ | **Operable** | UI components must be operable (keyboard, mouse, voice) |
35
+ | **Understandable** | Information and UI must be understandable |
36
+ | **Robust** | Content must work with assistive technologies |
37
+
38
+ ### Key Requirements
39
+
40
+ | Requirement | Standard | Implementation |
41
+ |-------------|----------|----------------|
42
+ | **Color contrast** | 4.5:1 for normal text, 3:1 for large text | Use SLDS color tokens |
43
+ | **Keyboard navigation** | All interactive elements accessible via keyboard | Tab order, Enter/Space triggers |
44
+ | **Screen reader support** | ARIA labels, roles, live regions | Proper semantic HTML + ARIA |
45
+ | **Focus indicators** | Visible focus state | Use SLDS focus utilities |
46
+ | **Alternative text** | All images have alt text | `alt` attribute on images |
47
+
48
+ ---
49
+
50
+ ## Semantic HTML
51
+
52
+ ### Use Proper HTML Elements
53
+
54
+ ```html
55
+ <!-- BAD: Non-semantic markup -->
56
+ <div onclick={handleClick}>Click me</div>
57
+
58
+ <!-- GOOD: Semantic button -->
59
+ <button onclick={handleClick}>Click me</button>
60
+ ```
61
+
62
+ ### Headings Hierarchy
63
+
64
+ ```html
65
+ <!-- BAD: Skipping heading levels -->
66
+ <h1>Page Title</h1>
67
+ <h3>Subsection</h3> <!-- Skipped h2 -->
68
+
69
+ <!-- GOOD: Logical heading structure -->
70
+ <h1>Page Title</h1>
71
+ <h2>Main Section</h2>
72
+ <h3>Subsection</h3>
73
+ ```
74
+
75
+ ### Landmarks
76
+
77
+ ```html
78
+ <template>
79
+ <header class="slds-page-header">
80
+ <h1>Dashboard</h1>
81
+ </header>
82
+
83
+ <nav aria-label="Primary navigation">
84
+ <ul>
85
+ <li><a href="#home">Home</a></li>
86
+ <li><a href="#accounts">Accounts</a></li>
87
+ </ul>
88
+ </nav>
89
+
90
+ <main>
91
+ <article>
92
+ <h2>Account Details</h2>
93
+ <!-- Content -->
94
+ </article>
95
+ </main>
96
+
97
+ <aside aria-label="Related information">
98
+ <!-- Sidebar content -->
99
+ </aside>
100
+
101
+ <footer>
102
+ <p>Copyright 2025</p>
103
+ </footer>
104
+ </template>
105
+ ```
106
+
107
+ ---
108
+
109
+ ## ARIA Attributes
110
+
111
+ ### ARIA Labels
112
+
113
+ ```html
114
+ <!-- Icon button without visible text -->
115
+ <button aria-label="Delete record" onclick={handleDelete}>
116
+ <lightning-icon icon-name="utility:delete" size="small"></lightning-icon>
117
+ </button>
118
+
119
+ <!-- Form field with additional context -->
120
+ <lightning-input
121
+ label="Phone"
122
+ aria-describedby="phone-help"
123
+ value={phone}
124
+ onchange={handlePhoneChange}>
125
+ </lightning-input>
126
+ <div id="phone-help" class="slds-text-color_weak">
127
+ Enter phone number with country code
128
+ </div>
129
+ ```
130
+
131
+ ### ARIA Roles
132
+
133
+ ```html
134
+ <!-- Custom list -->
135
+ <div role="list">
136
+ <div role="listitem">Item 1</div>
137
+ <div role="listitem">Item 2</div>
138
+ </div>
139
+
140
+ <!-- Alert message -->
141
+ <div role="alert" class="slds-notify slds-notify_alert">
142
+ <span class="slds-assistive-text">Error</span>
143
+ <p>Form validation failed</p>
144
+ </div>
145
+
146
+ <!-- Dialog/Modal -->
147
+ <div role="dialog"
148
+ aria-modal="true"
149
+ aria-labelledby="modal-heading"
150
+ aria-describedby="modal-description">
151
+ <h2 id="modal-heading">Confirm Action</h2>
152
+ <p id="modal-description">Are you sure you want to delete this record?</p>
153
+ </div>
154
+ ```
155
+
156
+ ### ARIA States
157
+
158
+ ```html
159
+ <!-- Expandable section -->
160
+ <button
161
+ aria-expanded={isExpanded}
162
+ aria-controls="details-section"
163
+ onclick={toggleExpanded}>
164
+ Show Details
165
+ </button>
166
+ <div id="details-section" class={sectionClass}>
167
+ <!-- Details content -->
168
+ </div>
169
+
170
+ <!-- Loading state -->
171
+ <div aria-busy={isLoading}>
172
+ <template lwc:if={isLoading}>
173
+ <lightning-spinner alternative-text="Loading data"></lightning-spinner>
174
+ </template>
175
+ <template lwc:else>
176
+ <!-- Content -->
177
+ </template>
178
+ </div>
179
+
180
+ <!-- Required field -->
181
+ <lightning-input
182
+ label="Name"
183
+ required
184
+ aria-required="true"
185
+ value={name}>
186
+ </lightning-input>
187
+ ```
188
+
189
+ ---
190
+
191
+ ## Keyboard Navigation
192
+
193
+ ### Tab Order
194
+
195
+ ```html
196
+ <!-- Natural tab order -->
197
+ <form>
198
+ <lightning-input label="First Name" tabindex="0"></lightning-input>
199
+ <lightning-input label="Last Name" tabindex="0"></lightning-input>
200
+ <lightning-button label="Submit" tabindex="0"></lightning-button>
201
+ </form>
202
+
203
+ <!-- Skip to main content link -->
204
+ <a href="#main-content" class="slds-assistive-text slds-assistive-text_focus">
205
+ Skip to main content
206
+ </a>
207
+ <main id="main-content">
208
+ <!-- Content -->
209
+ </main>
210
+ ```
211
+
212
+ ### Keyboard Event Handlers
213
+
214
+ ```javascript
215
+ // accountCard.js
216
+ export default class AccountCard extends LightningElement {
217
+ handleKeyDown(event) {
218
+ // Enter or Space activates
219
+ if (event.key === 'Enter' || event.key === ' ') {
220
+ event.preventDefault();
221
+ this.handleSelect();
222
+ }
223
+
224
+ // Arrow navigation
225
+ if (event.key === 'ArrowDown') {
226
+ event.preventDefault();
227
+ this.focusNextItem();
228
+ } else if (event.key === 'ArrowUp') {
229
+ event.preventDefault();
230
+ this.focusPreviousItem();
231
+ }
232
+
233
+ // Escape closes
234
+ if (event.key === 'Escape') {
235
+ this.handleClose();
236
+ }
237
+ }
238
+
239
+ focusNextItem() {
240
+ const items = this.template.querySelectorAll('[role="listitem"]');
241
+ const currentIndex = Array.from(items).indexOf(document.activeElement);
242
+ const nextIndex = (currentIndex + 1) % items.length;
243
+ items[nextIndex].focus();
244
+ }
245
+
246
+ focusPreviousItem() {
247
+ const items = this.template.querySelectorAll('[role="listitem"]');
248
+ const currentIndex = Array.from(items).indexOf(document.activeElement);
249
+ const prevIndex = currentIndex === 0 ? items.length - 1 : currentIndex - 1;
250
+ items[prevIndex].focus();
251
+ }
252
+ }
253
+ ```
254
+
255
+ ```html
256
+ <!-- accountCard.html -->
257
+ <template>
258
+ <div role="list">
259
+ <template for:each={accounts} for:item="account">
260
+ <div key={account.Id}
261
+ role="listitem"
262
+ tabindex="0"
263
+ onkeydown={handleKeyDown}
264
+ onclick={handleSelect}
265
+ data-id={account.Id}>
266
+ {account.Name}
267
+ </div>
268
+ </template>
269
+ </div>
270
+ </template>
271
+ ```
272
+
273
+ ---
274
+
275
+ ## Focus Management
276
+
277
+ ### Focus Trap in Modals
278
+
279
+ ```javascript
280
+ // composableModal.js
281
+ export default class ComposableModal extends LightningElement {
282
+ _focusableElements = [];
283
+ _isOpen = false;
284
+
285
+ @api
286
+ toggleModal() {
287
+ this._isOpen = !this._isOpen;
288
+
289
+ if (this._isOpen) {
290
+ // Capture focusable elements
291
+ this._focusableElements = this.getFocusableElements();
292
+
293
+ // Focus first element
294
+ requestAnimationFrame(() => {
295
+ this._focusableElements[0]?.focus();
296
+ });
297
+
298
+ // Add keyboard listener
299
+ window.addEventListener('keydown', this._handleKeyDown);
300
+
301
+ // Store previous focus
302
+ this._previousFocus = document.activeElement;
303
+ } else {
304
+ // Remove keyboard listener
305
+ window.removeEventListener('keydown', this._handleKeyDown);
306
+
307
+ // Restore focus
308
+ this._previousFocus?.focus();
309
+ }
310
+ }
311
+
312
+ getFocusableElements() {
313
+ const selector = [
314
+ 'a[href]',
315
+ 'button:not([disabled])',
316
+ 'input:not([disabled])',
317
+ 'select:not([disabled])',
318
+ 'textarea:not([disabled])',
319
+ '[tabindex]:not([tabindex="-1"])'
320
+ ].join(',');
321
+
322
+ return Array.from(this.template.querySelectorAll(selector));
323
+ }
324
+
325
+ _handleKeyDown = (event) => {
326
+ if (event.key === 'Tab') {
327
+ this.trapFocus(event);
328
+ } else if (event.key === 'Escape') {
329
+ this.toggleModal();
330
+ }
331
+ }
332
+
333
+ trapFocus(event) {
334
+ const firstElement = this._focusableElements[0];
335
+ const lastElement = this._focusableElements[this._focusableElements.length - 1];
336
+ const activeElement = this.template.activeElement;
337
+
338
+ if (event.shiftKey) {
339
+ // Shift+Tab: Moving backward
340
+ if (activeElement === firstElement) {
341
+ event.preventDefault();
342
+ lastElement.focus();
343
+ }
344
+ } else {
345
+ // Tab: Moving forward
346
+ if (activeElement === lastElement) {
347
+ event.preventDefault();
348
+ firstElement.focus();
349
+ }
350
+ }
351
+ }
352
+
353
+ disconnectedCallback() {
354
+ window.removeEventListener('keydown', this._handleKeyDown);
355
+ }
356
+ }
357
+ ```
358
+
359
+ ### Managing Focus After Actions
360
+
361
+ ```javascript
362
+ handleDelete(event) {
363
+ const itemId = event.target.dataset.id;
364
+ const itemIndex = this.items.findIndex(item => item.Id === itemId);
365
+
366
+ // Delete item
367
+ this.items = this.items.filter(item => item.Id !== itemId);
368
+
369
+ // Focus next item or previous if last item deleted
370
+ requestAnimationFrame(() => {
371
+ const focusIndex = itemIndex < this.items.length ? itemIndex : itemIndex - 1;
372
+ if (focusIndex >= 0) {
373
+ const nextItem = this.template.querySelector(`[data-id="${this.items[focusIndex].Id}"]`);
374
+ nextItem?.focus();
375
+ }
376
+ });
377
+ }
378
+ ```
379
+
380
+ ---
381
+
382
+ ## Color and Contrast
383
+
384
+ ### Use SLDS Color Tokens
385
+
386
+ ```css
387
+ /* BAD: Hardcoded colors */
388
+ .my-component {
389
+ color: #333333;
390
+ background-color: #ffffff;
391
+ border-color: #dddddd;
392
+ }
393
+
394
+ /* GOOD: SLDS tokens with proper contrast */
395
+ .my-component {
396
+ color: var(--slds-g-color-on-surface, #181818);
397
+ background-color: var(--slds-g-color-surface-container-1, #ffffff);
398
+ border-color: var(--slds-g-color-border-1, #c9c9c9);
399
+ }
400
+ ```
401
+
402
+ ### Testing Contrast
403
+
404
+ ```html
405
+ <!-- Text: 4.5:1 minimum contrast ratio -->
406
+ <p class="slds-text-body_regular">Regular body text</p>
407
+
408
+ <!-- Large text (18pt+): 3:1 minimum -->
409
+ <h1 class="slds-text-heading_large">Large heading</h1>
410
+
411
+ <!-- Links: Must be distinguishable from surrounding text -->
412
+ <p>
413
+ Visit our <a href="/help" class="slds-text-link">help center</a> for support.
414
+ </p>
415
+ ```
416
+
417
+ ### Color Independence
418
+
419
+ ```html
420
+ <!-- BAD: Relies only on color to convey status -->
421
+ <span class="text-red">Error</span>
422
+
423
+ <!-- GOOD: Uses icon + text + color -->
424
+ <span class="slds-text-color_error">
425
+ <lightning-icon icon-name="utility:error" size="x-small"></lightning-icon>
426
+ Error
427
+ </span>
428
+
429
+ <!-- GOOD: Status indicators with patterns -->
430
+ <div class="slds-badge slds-theme_error">
431
+ <lightning-icon icon-name="utility:close" size="xx-small"></lightning-icon>
432
+ Failed
433
+ </div>
434
+ ```
435
+
436
+ ---
437
+
438
+ ## Screen Reader Support
439
+
440
+ ### Assistive Text
441
+
442
+ ```html
443
+ <!-- Hidden text for screen readers -->
444
+ <span class="slds-assistive-text">Required field</span>
445
+ <lightning-input label="Email" required value={email}></lightning-input>
446
+
447
+ <!-- Button with icon only -->
448
+ <button aria-label="Edit record">
449
+ <lightning-icon icon-name="utility:edit" size="small"></lightning-icon>
450
+ <span class="slds-assistive-text">Edit</span>
451
+ </button>
452
+
453
+ <!-- Loading state announcement -->
454
+ <template lwc:if={isLoading}>
455
+ <span class="slds-assistive-text">Loading data, please wait</span>
456
+ <lightning-spinner size="small"></lightning-spinner>
457
+ </template>
458
+ ```
459
+
460
+ ### Image Alternative Text
461
+
462
+ ```html
463
+ <!-- Decorative images (no alt needed, hide from screen readers) -->
464
+ <img src="decorative-icon.png" alt="" role="presentation">
465
+
466
+ <!-- Informative images (descriptive alt text) -->
467
+ <img src="chart.png" alt="Sales trend showing 15% increase over last quarter">
468
+
469
+ <!-- Functional images (describe action) -->
470
+ <a href="/profile">
471
+ <img src="user-avatar.png" alt="View your profile">
472
+ </a>
473
+ ```
474
+
475
+ ---
476
+
477
+ ## Live Regions
478
+
479
+ ### ARIA Live Regions
480
+
481
+ ```javascript
482
+ // notificationComponent.js
483
+ export default class NotificationComponent extends LightningElement {
484
+ @track messages = [];
485
+
486
+ addMessage(message, type = 'info') {
487
+ const id = Date.now();
488
+ this.messages = [...this.messages, { id, message, type }];
489
+
490
+ // Auto-remove after 5 seconds
491
+ setTimeout(() => {
492
+ this.messages = this.messages.filter(m => m.id !== id);
493
+ }, 5000);
494
+ }
495
+ }
496
+ ```
497
+
498
+ ```html
499
+ <!-- notificationComponent.html -->
500
+ <template>
501
+ <!-- Polite: Announced after current speech -->
502
+ <div aria-live="polite" aria-atomic="true" class="slds-assistive-text">
503
+ <template for:each={messages} for:item="msg">
504
+ <p key={msg.id}>{msg.message}</p>
505
+ </template>
506
+ </div>
507
+
508
+ <!-- Visual notifications -->
509
+ <div class="slds-notify-container">
510
+ <template for:each={messages} for:item="msg">
511
+ <div key={msg.id} class={msg.type} role="status">
512
+ <p>{msg.message}</p>
513
+ </div>
514
+ </template>
515
+ </div>
516
+ </template>
517
+ ```
518
+
519
+ ### Assertive vs Polite
520
+
521
+ ```html
522
+ <!-- Polite: Non-urgent updates (search results, status changes) -->
523
+ <div aria-live="polite" class="slds-assistive-text">
524
+ {searchResultsCount} results found
525
+ </div>
526
+
527
+ <!-- Assertive: Urgent messages (errors, warnings) -->
528
+ <div aria-live="assertive" role="alert" class="slds-notify slds-notify_alert">
529
+ <span class="slds-assistive-text">Error</span>
530
+ Form submission failed. Please correct the errors and try again.
531
+ </div>
532
+ ```
533
+
534
+ ---
535
+
536
+ ## Form Accessibility
537
+
538
+ ### Accessible Form Fields
539
+
540
+ ```html
541
+ <template>
542
+ <form onsubmit={handleSubmit}>
543
+ <!-- Required field with validation -->
544
+ <lightning-input
545
+ label="Email"
546
+ type="email"
547
+ name="email"
548
+ required
549
+ value={email}
550
+ onchange={handleEmailChange}
551
+ message-when-value-missing="Email is required"
552
+ message-when-bad-input="Please enter a valid email">
553
+ </lightning-input>
554
+
555
+ <!-- Field with help text -->
556
+ <lightning-input
557
+ label="Phone"
558
+ type="tel"
559
+ value={phone}
560
+ field-level-help="Enter phone number with country code"
561
+ aria-describedby="phone-help"
562
+ onchange={handlePhoneChange}>
563
+ </lightning-input>
564
+ <div id="phone-help" class="slds-text-color_weak slds-m-top_xx-small">
565
+ Format: +1 (555) 555-5555
566
+ </div>
567
+
568
+ <!-- Error state -->
569
+ <template lwc:if={errors.industry}>
570
+ <lightning-input
571
+ label="Industry"
572
+ value={industry}
573
+ variant="label-hidden"
574
+ aria-invalid="true"
575
+ aria-describedby="industry-error"
576
+ class="slds-has-error">
577
+ </lightning-input>
578
+ <div id="industry-error" class="slds-form-element__help" role="alert">
579
+ {errors.industry}
580
+ </div>
581
+ </template>
582
+
583
+ <!-- Submit button -->
584
+ <lightning-button
585
+ type="submit"
586
+ label="Save"
587
+ variant="brand"
588
+ disabled={isSubmitting}>
589
+ </lightning-button>
590
+ </form>
591
+ </template>
592
+ ```
593
+
594
+ ### Fieldset and Legend
595
+
596
+ ```html
597
+ <!-- Radio button group -->
598
+ <fieldset class="slds-form-element">
599
+ <legend class="slds-form-element__legend slds-form-element__label">
600
+ Contact Method <abbr class="slds-required" title="required">*</abbr>
601
+ </legend>
602
+ <div class="slds-form-element__control">
603
+ <lightning-radio-group
604
+ name="contactMethod"
605
+ label="Contact Method"
606
+ options={contactOptions}
607
+ value={selectedMethod}
608
+ onchange={handleMethodChange}
609
+ variant="label-hidden"
610
+ required>
611
+ </lightning-radio-group>
612
+ </div>
613
+ </fieldset>
614
+ ```
615
+
616
+ ---
617
+
618
+ ## Common Patterns
619
+
620
+ ### Accessible Tabs
621
+
622
+ ```javascript
623
+ // tabsComponent.js
624
+ export default class TabsComponent extends LightningElement {
625
+ @track activeTab = 'tab1';
626
+
627
+ handleTabKeyDown(event) {
628
+ const tabs = Array.from(this.template.querySelectorAll('[role="tab"]'));
629
+ const currentIndex = tabs.indexOf(event.target);
630
+
631
+ let nextIndex;
632
+ if (event.key === 'ArrowRight') {
633
+ nextIndex = (currentIndex + 1) % tabs.length;
634
+ } else if (event.key === 'ArrowLeft') {
635
+ nextIndex = currentIndex === 0 ? tabs.length - 1 : currentIndex - 1;
636
+ } else if (event.key === 'Home') {
637
+ nextIndex = 0;
638
+ } else if (event.key === 'End') {
639
+ nextIndex = tabs.length - 1;
640
+ }
641
+
642
+ if (nextIndex !== undefined) {
643
+ event.preventDefault();
644
+ tabs[nextIndex].focus();
645
+ this.activeTab = tabs[nextIndex].dataset.tab;
646
+ }
647
+ }
648
+
649
+ handleTabClick(event) {
650
+ this.activeTab = event.currentTarget.dataset.tab;
651
+ }
652
+ }
653
+ ```
654
+
655
+ ```html
656
+ <!-- tabsComponent.html -->
657
+ <template>
658
+ <div class="slds-tabs_default">
659
+ <ul role="tablist" class="slds-tabs_default__nav">
660
+ <li class="slds-tabs_default__item" role="presentation">
661
+ <a role="tab"
662
+ tabindex={tab1Tabindex}
663
+ aria-selected={isTab1Active}
664
+ aria-controls="tab1-panel"
665
+ data-tab="tab1"
666
+ onclick={handleTabClick}
667
+ onkeydown={handleTabKeyDown}>
668
+ Tab 1
669
+ </a>
670
+ </li>
671
+ <li class="slds-tabs_default__item" role="presentation">
672
+ <a role="tab"
673
+ tabindex={tab2Tabindex}
674
+ aria-selected={isTab2Active}
675
+ aria-controls="tab2-panel"
676
+ data-tab="tab2"
677
+ onclick={handleTabClick}
678
+ onkeydown={handleTabKeyDown}>
679
+ Tab 2
680
+ </a>
681
+ </li>
682
+ </ul>
683
+
684
+ <div id="tab1-panel"
685
+ role="tabpanel"
686
+ aria-labelledby="tab1"
687
+ class={tab1PanelClass}>
688
+ <!-- Tab 1 content -->
689
+ </div>
690
+
691
+ <div id="tab2-panel"
692
+ role="tabpanel"
693
+ aria-labelledby="tab2"
694
+ class={tab2PanelClass}>
695
+ <!-- Tab 2 content -->
696
+ </div>
697
+ </div>
698
+ </template>
699
+ ```
700
+
701
+ ### Accessible Data Table
702
+
703
+ ```html
704
+ <template>
705
+ <table class="slds-table slds-table_bordered" role="grid">
706
+ <thead>
707
+ <tr>
708
+ <th scope="col" role="columnheader">
709
+ <span class="slds-truncate">Account Name</span>
710
+ </th>
711
+ <th scope="col" role="columnheader">
712
+ <span class="slds-truncate">Industry</span>
713
+ </th>
714
+ <th scope="col" role="columnheader">
715
+ <span class="slds-truncate">Actions</span>
716
+ </th>
717
+ </tr>
718
+ </thead>
719
+ <tbody>
720
+ <template for:each={accounts} for:item="account">
721
+ <tr key={account.Id} role="row">
722
+ <th scope="row" role="gridcell">
723
+ <a href={account.link}>{account.Name}</a>
724
+ </th>
725
+ <td role="gridcell">
726
+ {account.Industry}
727
+ </td>
728
+ <td role="gridcell">
729
+ <button aria-label={account.editLabel}
730
+ data-id={account.Id}
731
+ onclick={handleEdit}>
732
+ <lightning-icon icon-name="utility:edit" size="x-small"></lightning-icon>
733
+ </button>
734
+ </td>
735
+ </tr>
736
+ </template>
737
+ </tbody>
738
+ </table>
739
+ </template>
740
+ ```
741
+
742
+ ---
743
+
744
+ ## Testing
745
+
746
+ ### Automated Testing
747
+
748
+ ```javascript
749
+ // Jest accessibility tests
750
+ it('has proper ARIA labels', () => {
751
+ const element = createElement('c-my-component', {
752
+ is: MyComponent
753
+ });
754
+ document.body.appendChild(element);
755
+
756
+ const button = element.shadowRoot.querySelector('button');
757
+ expect(button.getAttribute('aria-label')).toBeTruthy();
758
+ });
759
+
760
+ it('manages focus when modal opens', async () => {
761
+ const element = createElement('c-modal', { is: Modal });
762
+ document.body.appendChild(element);
763
+
764
+ element.openModal();
765
+ await flushPromises();
766
+
767
+ const firstFocusable = element.shadowRoot.querySelector('.focusable');
768
+ expect(document.activeElement).toBe(firstFocusable);
769
+ });
770
+
771
+ it('announces status changes to screen readers', async () => {
772
+ const element = createElement('c-notification', {
773
+ is: Notification
774
+ });
775
+ document.body.appendChild(element);
776
+
777
+ element.showMessage('Success');
778
+ await flushPromises();
779
+
780
+ const liveRegion = element.shadowRoot.querySelector('[aria-live]');
781
+ expect(liveRegion.textContent).toContain('Success');
782
+ });
783
+ ```
784
+
785
+ ### Manual Testing Checklist
786
+
787
+ - [ ] Navigate entire component using only keyboard (Tab, Shift+Tab, Enter, Space, Arrows)
788
+ - [ ] Test with screen reader (NVDA, JAWS, VoiceOver)
789
+ - [ ] Verify color contrast ratios (4.5:1 minimum for text)
790
+ - [ ] Test at 200% zoom
791
+ - [ ] Verify focus indicators are visible
792
+ - [ ] Test with high contrast mode
793
+ - [ ] Verify all interactive elements have accessible names
794
+ - [ ] Test form validation announcements
795
+
796
+ ---
797
+
798
+ ## Tools and Resources
799
+
800
+ ### Browser Extensions
801
+
802
+ | Tool | Purpose |
803
+ |------|---------|
804
+ | **axe DevTools** | Automated accessibility testing |
805
+ | **Lighthouse** | Built into Chrome DevTools, accessibility audit |
806
+ | **WAVE** | Visual accessibility evaluation |
807
+ | **Color Contrast Analyzer** | Check WCAG contrast compliance |
808
+
809
+ ### Screen Readers
810
+
811
+ | Platform | Screen Reader |
812
+ |----------|---------------|
813
+ | Windows | NVDA (free), JAWS |
814
+ | macOS | VoiceOver (built-in) |
815
+ | iOS | VoiceOver (built-in) |
816
+ | Android | TalkBack (built-in) |
817
+
818
+ ### Testing Commands
819
+
820
+ ```bash
821
+ # Run axe accessibility tests
822
+ npm install --save-dev @axe-core/cli
823
+ axe https://your-app.lightning.force.com
824
+
825
+ # Lighthouse CLI
826
+ npm install -g lighthouse
827
+ lighthouse https://your-app.lightning.force.com --only-categories=accessibility
828
+ ```
829
+
830
+ ### Resources
831
+
832
+ - [WCAG 2.1 Guidelines](https://www.w3.org/WAI/WCAG21/quickref/)
833
+ - [ARIA Authoring Practices Guide](https://www.w3.org/WAI/ARIA/apg/)
834
+ - [Salesforce Lightning Design System Accessibility](https://www.lightningdesignsystem.com/accessibility/overview/)
835
+ - [WebAIM Resources](https://webaim.org/resources/)
836
+
837
+ ---
838
+
839
+ ## Related Resources
840
+
841
+ - [component-patterns.md](component-patterns.md) - Implementation patterns
842
+ - [jest-testing.md](jest-testing.md) - Testing strategies
843
+ - [performance-guide.md](performance-guide.md) - Performance optimization