@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,948 @@
1
+ <!-- Parent: generating-lwc-components/SKILL.md -->
2
+ # LWC Template Anti-Patterns
3
+
4
+ This guide documents systematic errors in Lightning Web Component templates, with special focus on patterns that LLMs commonly generate incorrectly. LWC templates have strict limitations compared to frameworks like React or Vue.
5
+
6
+ > **Source**: [LLM Mistakes in Apex & LWC - Salesforce Diaries](https://salesforcediaries.com/2026/01/16/llm-mistakes-in-apex-lwc-salesforce-code-generation-rules/)
7
+
8
+ ---
9
+
10
+ ## Table of Contents
11
+
12
+ 1. [Inline JavaScript Expressions](#1-inline-javascript-expressions)
13
+ 2. [Ternary Operators in Templates](#2-ternary-operators-in-templates)
14
+ 3. [Object Literals in Attributes](#3-object-literals-in-attributes)
15
+ 4. [Complex Expressions](#4-complex-expressions)
16
+ 5. [Event Handler Mistakes](#5-event-handler-mistakes)
17
+ 6. [Iteration Anti-Patterns](#6-iteration-anti-patterns)
18
+ 7. [Conditional Rendering Issues](#7-conditional-rendering-issues)
19
+ 8. [Slot and Composition Errors](#8-slot-and-composition-errors)
20
+ 9. [Data Binding Mistakes](#9-data-binding-mistakes)
21
+ 10. [Style and Class Binding](#10-style-and-class-binding)
22
+
23
+ ---
24
+
25
+ ## 1. Inline JavaScript Expressions
26
+
27
+ **Critical Rule**: LWC templates do NOT support JavaScript expressions. Only property references are allowed.
28
+
29
+ ### ❌ BAD: Arithmetic in Template
30
+
31
+ ```html
32
+ <!-- LLM generates this - DOES NOT WORK -->
33
+ <template>
34
+ <p>Total: {price * quantity}</p>
35
+ <p>Tax: {price * 0.1}</p>
36
+ <p>Discount: {price - discount}</p>
37
+ </template>
38
+ ```
39
+
40
+ ### ✅ GOOD: Use Getters
41
+
42
+ ```javascript
43
+ // component.js
44
+ export default class PriceCalculator extends LightningElement {
45
+ price = 100;
46
+ quantity = 2;
47
+ discount = 10;
48
+
49
+ get total() {
50
+ return this.price * this.quantity;
51
+ }
52
+
53
+ get tax() {
54
+ return this.price * 0.1;
55
+ }
56
+
57
+ get discountedPrice() {
58
+ return this.price - this.discount;
59
+ }
60
+ }
61
+ ```
62
+
63
+ ```html
64
+ <!-- component.html -->
65
+ <template>
66
+ <p>Total: {total}</p>
67
+ <p>Tax: {tax}</p>
68
+ <p>Discount: {discountedPrice}</p>
69
+ </template>
70
+ ```
71
+
72
+ ### ❌ BAD: String Concatenation in Template
73
+
74
+ ```html
75
+ <!-- DOES NOT WORK -->
76
+ <template>
77
+ <p>Hello, {firstName + ' ' + lastName}!</p>
78
+ <a href={'/account/' + accountId}>View Account</a>
79
+ </template>
80
+ ```
81
+
82
+ ### ✅ GOOD: Computed Properties
83
+
84
+ ```javascript
85
+ // component.js
86
+ export default class Greeting extends LightningElement {
87
+ firstName = 'John';
88
+ lastName = 'Doe';
89
+ accountId = '001xx000003DGbY';
90
+
91
+ get fullName() {
92
+ return `${this.firstName} ${this.lastName}`;
93
+ }
94
+
95
+ get accountUrl() {
96
+ return `/account/${this.accountId}`;
97
+ }
98
+ }
99
+ ```
100
+
101
+ ```html
102
+ <!-- component.html -->
103
+ <template>
104
+ <p>Hello, {fullName}!</p>
105
+ <a href={accountUrl}>View Account</a>
106
+ </template>
107
+ ```
108
+
109
+ ---
110
+
111
+ ## 2. Ternary Operators in Templates
112
+
113
+ **Critical Rule**: Ternary operators (`condition ? a : b`) are NOT allowed in LWC templates.
114
+
115
+ ### ❌ BAD: Ternary in Template
116
+
117
+ ```html
118
+ <!-- LLM generates this - DOES NOT WORK -->
119
+ <template>
120
+ <p class={isActive ? 'active' : 'inactive'}>Status</p>
121
+ <span>{count > 0 ? count : 'None'}</span>
122
+ <button disabled={isLoading ? true : false}>Submit</button>
123
+ </template>
124
+ ```
125
+
126
+ ### ✅ GOOD: Use Getters for Conditional Values
127
+
128
+ ```javascript
129
+ // component.js
130
+ export default class StatusDisplay extends LightningElement {
131
+ isActive = true;
132
+ count = 0;
133
+ isLoading = false;
134
+
135
+ get statusClass() {
136
+ return this.isActive ? 'active' : 'inactive';
137
+ }
138
+
139
+ get displayCount() {
140
+ return this.count > 0 ? this.count : 'None';
141
+ }
142
+
143
+ get isButtonDisabled() {
144
+ return this.isLoading;
145
+ }
146
+ }
147
+ ```
148
+
149
+ ```html
150
+ <!-- component.html -->
151
+ <template>
152
+ <p class={statusClass}>Status</p>
153
+ <span>{displayCount}</span>
154
+ <button disabled={isButtonDisabled}>Submit</button>
155
+ </template>
156
+ ```
157
+
158
+ ### ✅ GOOD: Use if:true/if:false for Conditional Rendering
159
+
160
+ ```html
161
+ <!-- component.html -->
162
+ <template>
163
+ <template if:true={isActive}>
164
+ <p class="active">Active</p>
165
+ </template>
166
+ <template if:false={isActive}>
167
+ <p class="inactive">Inactive</p>
168
+ </template>
169
+
170
+ <template if:true={hasCount}>
171
+ <span>{count}</span>
172
+ </template>
173
+ <template if:false={hasCount}>
174
+ <span>None</span>
175
+ </template>
176
+ </template>
177
+ ```
178
+
179
+ ```javascript
180
+ // component.js
181
+ get hasCount() {
182
+ return this.count > 0;
183
+ }
184
+ ```
185
+
186
+ ---
187
+
188
+ ## 3. Object Literals in Attributes
189
+
190
+ **Critical Rule**: Object literals (`{}`) cannot be passed directly as attribute values.
191
+
192
+ ### ❌ BAD: Inline Object Literals
193
+
194
+ ```html
195
+ <!-- LLM generates this - DOES NOT WORK -->
196
+ <template>
197
+ <c-child-component
198
+ config={{ showHeader: true, theme: 'dark' }}
199
+ style={{ color: 'red', fontSize: '14px' }}>
200
+ </c-child-component>
201
+
202
+ <lightning-datatable
203
+ columns={[{ label: 'Name', fieldName: 'name' }]}
204
+ data={records}>
205
+ </lightning-datatable>
206
+ </template>
207
+ ```
208
+
209
+ ### ✅ GOOD: Define Objects in JavaScript
210
+
211
+ ```javascript
212
+ // component.js
213
+ export default class ParentComponent extends LightningElement {
214
+ config = {
215
+ showHeader: true,
216
+ theme: 'dark'
217
+ };
218
+
219
+ columns = [
220
+ { label: 'Name', fieldName: 'name' },
221
+ { label: 'Email', fieldName: 'email' }
222
+ ];
223
+
224
+ records = [];
225
+ }
226
+ ```
227
+
228
+ ```html
229
+ <!-- component.html -->
230
+ <template>
231
+ <c-child-component config={config}></c-child-component>
232
+
233
+ <lightning-datatable
234
+ columns={columns}
235
+ data={records}>
236
+ </lightning-datatable>
237
+ </template>
238
+ ```
239
+
240
+ ### ❌ BAD: Inline Array Literals
241
+
242
+ ```html
243
+ <!-- DOES NOT WORK -->
244
+ <template>
245
+ <c-multi-select options={['Red', 'Green', 'Blue']}></c-multi-select>
246
+ </template>
247
+ ```
248
+
249
+ ### ✅ GOOD: Define Arrays in JavaScript
250
+
251
+ ```javascript
252
+ // component.js
253
+ export default class ColorPicker extends LightningElement {
254
+ colorOptions = [
255
+ { label: 'Red', value: 'red' },
256
+ { label: 'Green', value: 'green' },
257
+ { label: 'Blue', value: 'blue' }
258
+ ];
259
+ }
260
+ ```
261
+
262
+ ```html
263
+ <!-- component.html -->
264
+ <template>
265
+ <c-multi-select options={colorOptions}></c-multi-select>
266
+ </template>
267
+ ```
268
+
269
+ ---
270
+
271
+ ## 4. Complex Expressions
272
+
273
+ **Critical Rule**: No method calls, comparisons, or logical operators in templates.
274
+
275
+ ### ❌ BAD: Method Calls in Template
276
+
277
+ ```html
278
+ <!-- LLM generates this - DOES NOT WORK -->
279
+ <template>
280
+ <p>{name.toUpperCase()}</p>
281
+ <p>{items.length}</p>
282
+ <p>{formatDate(createdDate)}</p>
283
+ <p>{JSON.stringify(data)}</p>
284
+ </template>
285
+ ```
286
+
287
+ ### ✅ GOOD: Use Getters for Transformations
288
+
289
+ ```javascript
290
+ // component.js
291
+ export default class DataDisplay extends LightningElement {
292
+ name = 'john doe';
293
+ items = ['a', 'b', 'c'];
294
+ createdDate = new Date();
295
+ data = { key: 'value' };
296
+
297
+ get upperName() {
298
+ return this.name.toUpperCase();
299
+ }
300
+
301
+ get itemCount() {
302
+ return this.items.length;
303
+ }
304
+
305
+ get formattedDate() {
306
+ return new Intl.DateTimeFormat('en-US').format(this.createdDate);
307
+ }
308
+
309
+ get dataJson() {
310
+ return JSON.stringify(this.data);
311
+ }
312
+ }
313
+ ```
314
+
315
+ ```html
316
+ <!-- component.html -->
317
+ <template>
318
+ <p>{upperName}</p>
319
+ <p>{itemCount}</p>
320
+ <p>{formattedDate}</p>
321
+ <p>{dataJson}</p>
322
+ </template>
323
+ ```
324
+
325
+ ### ❌ BAD: Comparisons in Template
326
+
327
+ ```html
328
+ <!-- DOES NOT WORK -->
329
+ <template>
330
+ <template if:true={count > 5}>
331
+ <p>Many items</p>
332
+ </template>
333
+
334
+ <template if:true={status === 'active'}>
335
+ <p>Active</p>
336
+ </template>
337
+ </template>
338
+ ```
339
+
340
+ ### ✅ GOOD: Getter-Based Comparisons
341
+
342
+ ```javascript
343
+ // component.js
344
+ get hasManyItems() {
345
+ return this.count > 5;
346
+ }
347
+
348
+ get isActive() {
349
+ return this.status === 'active';
350
+ }
351
+ ```
352
+
353
+ ```html
354
+ <!-- component.html -->
355
+ <template>
356
+ <template if:true={hasManyItems}>
357
+ <p>Many items</p>
358
+ </template>
359
+
360
+ <template if:true={isActive}>
361
+ <p>Active</p>
362
+ </template>
363
+ </template>
364
+ ```
365
+
366
+ ### ❌ BAD: Logical Operators in Template
367
+
368
+ ```html
369
+ <!-- DOES NOT WORK -->
370
+ <template>
371
+ <template if:true={isAdmin && hasPermission}>
372
+ <button>Delete</button>
373
+ </template>
374
+
375
+ <template if:true={!isLoading}>
376
+ <p>Content</p>
377
+ </template>
378
+ </template>
379
+ ```
380
+
381
+ ### ✅ GOOD: Computed Boolean Properties
382
+
383
+ ```javascript
384
+ // component.js
385
+ get canDelete() {
386
+ return this.isAdmin && this.hasPermission;
387
+ }
388
+
389
+ get isNotLoading() {
390
+ return !this.isLoading;
391
+ }
392
+ ```
393
+
394
+ ```html
395
+ <!-- component.html -->
396
+ <template>
397
+ <template if:true={canDelete}>
398
+ <button>Delete</button>
399
+ </template>
400
+
401
+ <template if:true={isNotLoading}>
402
+ <p>Content</p>
403
+ </template>
404
+ </template>
405
+ ```
406
+
407
+ ---
408
+
409
+ ## 5. Event Handler Mistakes
410
+
411
+ ### ❌ BAD: Inline Event Handlers with Arguments
412
+
413
+ ```html
414
+ <!-- LLM generates this - DOES NOT WORK -->
415
+ <template>
416
+ <button onclick={handleClick(item.id)}>Click</button>
417
+ <button onclick={() => this.handleDelete(record)}>Delete</button>
418
+ <input onchange={e => this.handleChange(e.target.value)}>
419
+ </template>
420
+ ```
421
+
422
+ ### ✅ GOOD: Handler Functions with Data Attributes
423
+
424
+ ```html
425
+ <!-- component.html -->
426
+ <template>
427
+ <template for:each={items} for:item="item">
428
+ <button
429
+ key={item.id}
430
+ data-id={item.id}
431
+ onclick={handleClick}>
432
+ Click {item.name}
433
+ </button>
434
+ </template>
435
+ </template>
436
+ ```
437
+
438
+ ```javascript
439
+ // component.js
440
+ handleClick(event) {
441
+ const itemId = event.target.dataset.id;
442
+ // or use event.currentTarget.dataset.id for delegated events
443
+ console.log('Clicked item:', itemId);
444
+ }
445
+
446
+ handleChange(event) {
447
+ const value = event.target.value;
448
+ this.inputValue = value;
449
+ }
450
+ ```
451
+
452
+ ### ❌ BAD: Event Binding with bind()
453
+
454
+ ```html
455
+ <!-- DOES NOT WORK -->
456
+ <template>
457
+ <button onclick={handleClick.bind(this, item)}>Click</button>
458
+ </template>
459
+ ```
460
+
461
+ ### ✅ GOOD: Use Data Attributes for Context
462
+
463
+ ```html
464
+ <!-- component.html -->
465
+ <template>
466
+ <template for:each={items} for:item="item">
467
+ <button
468
+ key={item.id}
469
+ data-id={item.id}
470
+ data-name={item.name}
471
+ data-index={item.index}
472
+ onclick={handleItemClick}>
473
+ {item.name}
474
+ </button>
475
+ </template>
476
+ </template>
477
+ ```
478
+
479
+ ```javascript
480
+ // component.js
481
+ handleItemClick(event) {
482
+ const { id, name, index } = event.currentTarget.dataset;
483
+ // dataset values are always strings
484
+ const indexNum = parseInt(index, 10);
485
+ }
486
+ ```
487
+
488
+ ---
489
+
490
+ <a id="6-iteration-anti-patterns"></a>
491
+
492
+ ## 6. Iteration Anti-Patterns
493
+
494
+ ### ❌ BAD: Missing Key in Iteration
495
+
496
+ ```html
497
+ <!-- LLM forgets key - causes rendering issues -->
498
+ <template>
499
+ <template for:each={items} for:item="item">
500
+ <div>{item.name}</div> <!-- Missing key! -->
501
+ </template>
502
+ </template>
503
+ ```
504
+
505
+ ### ✅ GOOD: Always Include Key
506
+
507
+ ```html
508
+ <!-- component.html -->
509
+ <template>
510
+ <template for:each={items} for:item="item">
511
+ <div key={item.id}>{item.name}</div>
512
+ </template>
513
+ </template>
514
+ ```
515
+
516
+ ### ❌ BAD: Using Index as Key
517
+
518
+ ```html
519
+ <!-- Anti-pattern: index can cause issues with reordering -->
520
+ <template>
521
+ <template for:each={items} for:item="item" for:index="index">
522
+ <div key={index}>{item.name}</div>
523
+ </template>
524
+ </template>
525
+ ```
526
+
527
+ ### ✅ GOOD: Use Unique Identifier as Key
528
+
529
+ ```javascript
530
+ // If items don't have unique IDs, generate them
531
+ connectedCallback() {
532
+ this.items = this.rawItems.map((item, index) => ({
533
+ ...item,
534
+ uniqueKey: `item-${item.name}-${index}`
535
+ }));
536
+ }
537
+ ```
538
+
539
+ ```html
540
+ <!-- component.html -->
541
+ <template>
542
+ <template for:each={items} for:item="item">
543
+ <div key={item.uniqueKey}>{item.name}</div>
544
+ </template>
545
+ </template>
546
+ ```
547
+
548
+ ### ❌ BAD: Nested Iteration Without Proper Keys
549
+
550
+ ```html
551
+ <!-- PROBLEMATIC -->
552
+ <template>
553
+ <template for:each={categories} for:item="category">
554
+ <div key={category.id}>
555
+ <h3>{category.name}</h3>
556
+ <template for:each={category.items} for:item="item">
557
+ <!-- Key might conflict with other categories -->
558
+ <p key={item.id}>{item.name}</p>
559
+ </template>
560
+ </div>
561
+ </template>
562
+ </template>
563
+ ```
564
+
565
+ ### ✅ GOOD: Compound Keys for Nested Iteration
566
+
567
+ ```javascript
568
+ // component.js
569
+ get processedCategories() {
570
+ return this.categories.map(category => ({
571
+ ...category,
572
+ items: category.items.map(item => ({
573
+ ...item,
574
+ compositeKey: `${category.id}-${item.id}`
575
+ }))
576
+ }));
577
+ }
578
+ ```
579
+
580
+ ```html
581
+ <!-- component.html -->
582
+ <template>
583
+ <template for:each={processedCategories} for:item="category">
584
+ <div key={category.id}>
585
+ <h3>{category.name}</h3>
586
+ <template for:each={category.items} for:item="item">
587
+ <p key={item.compositeKey}>{item.name}</p>
588
+ </template>
589
+ </div>
590
+ </template>
591
+ </template>
592
+ ```
593
+
594
+ ---
595
+
596
+ ## 7. Conditional Rendering Issues
597
+
598
+ ### ❌ BAD: if:true on Non-Boolean Values
599
+
600
+ ```html
601
+ <!-- LLM assumes truthy/falsy works like JS - it doesn't always -->
602
+ <template>
603
+ <!-- String 'false' is truthy! -->
604
+ <template if:true={stringValue}>
605
+ <p>Shown even for 'false' string!</p>
606
+ </template>
607
+
608
+ <!-- 0 might not behave as expected -->
609
+ <template if:true={count}>
610
+ <p>Count: {count}</p>
611
+ </template>
612
+ </template>
613
+ ```
614
+
615
+ ### ✅ GOOD: Explicit Boolean Conversion
616
+
617
+ ```javascript
618
+ // component.js
619
+ get hasStringValue() {
620
+ return Boolean(this.stringValue) && this.stringValue !== 'false';
621
+ }
622
+
623
+ get hasCount() {
624
+ return this.count !== null && this.count !== undefined && this.count !== 0;
625
+ }
626
+ ```
627
+
628
+ ```html
629
+ <!-- component.html -->
630
+ <template>
631
+ <template if:true={hasStringValue}>
632
+ <p>Has value</p>
633
+ </template>
634
+
635
+ <template if:true={hasCount}>
636
+ <p>Count: {count}</p>
637
+ </template>
638
+ </template>
639
+ ```
640
+
641
+ ### ❌ BAD: Multiple Conditions Without Else
642
+
643
+ ```html
644
+ <!-- Verbose and error-prone -->
645
+ <template>
646
+ <template if:true={isLoading}>
647
+ <lightning-spinner></lightning-spinner>
648
+ </template>
649
+ <template if:true={hasError}>
650
+ <p>Error occurred</p>
651
+ </template>
652
+ <template if:true={hasData}>
653
+ <p>Data loaded</p>
654
+ </template>
655
+ </template>
656
+ ```
657
+
658
+ ### ✅ GOOD: Use a State Getter
659
+
660
+ ```javascript
661
+ // component.js
662
+ get viewState() {
663
+ if (this.isLoading) return 'loading';
664
+ if (this.error) return 'error';
665
+ if (this.data) return 'success';
666
+ return 'empty';
667
+ }
668
+
669
+ get isLoadingState() { return this.viewState === 'loading'; }
670
+ get isErrorState() { return this.viewState === 'error'; }
671
+ get isSuccessState() { return this.viewState === 'success'; }
672
+ get isEmptyState() { return this.viewState === 'empty'; }
673
+ ```
674
+
675
+ ```html
676
+ <!-- component.html -->
677
+ <template>
678
+ <template if:true={isLoadingState}>
679
+ <lightning-spinner></lightning-spinner>
680
+ </template>
681
+ <template if:true={isErrorState}>
682
+ <c-error-display error={error}></c-error-display>
683
+ </template>
684
+ <template if:true={isSuccessState}>
685
+ <c-data-display data={data}></c-data-display>
686
+ </template>
687
+ <template if:true={isEmptyState}>
688
+ <c-empty-state></c-empty-state>
689
+ </template>
690
+ </template>
691
+ ```
692
+
693
+ ---
694
+
695
+ ## 8. Slot and Composition Errors
696
+
697
+ ### ❌ BAD: Named Slot with Wrong Syntax
698
+
699
+ ```html
700
+ <!-- LLM uses Vue/React slot syntax -->
701
+ <template>
702
+ <!-- Wrong: Vue syntax -->
703
+ <c-card>
704
+ <template v-slot:header>Header</template>
705
+ </c-card>
706
+
707
+ <!-- Wrong: React children syntax -->
708
+ <c-card header="Header Content">
709
+ Body Content
710
+ </c-card>
711
+ </template>
712
+ ```
713
+
714
+ ### ✅ GOOD: LWC Slot Syntax
715
+
716
+ ```html
717
+ <!-- Parent component using slots -->
718
+ <template>
719
+ <c-card>
720
+ <span slot="header">Card Header</span>
721
+ <p slot="body">Card body content</p>
722
+ <button slot="footer">Action</button>
723
+ </c-card>
724
+ </template>
725
+ ```
726
+
727
+ ```html
728
+ <!-- c-card component template -->
729
+ <template>
730
+ <article class="slds-card">
731
+ <header class="slds-card__header">
732
+ <slot name="header"></slot>
733
+ </header>
734
+ <div class="slds-card__body">
735
+ <slot name="body"></slot>
736
+ <slot></slot> <!-- Default slot -->
737
+ </div>
738
+ <footer class="slds-card__footer">
739
+ <slot name="footer"></slot>
740
+ </footer>
741
+ </article>
742
+ </template>
743
+ ```
744
+
745
+ ---
746
+
747
+ ## 9. Data Binding Mistakes
748
+
749
+ ### ❌ BAD: Two-Way Binding Syntax
750
+
751
+ ```html
752
+ <!-- LLM uses Angular/Vue two-way binding - doesn't exist in LWC -->
753
+ <template>
754
+ <input [(ngModel)]="name"> <!-- Angular -->
755
+ <input v-model="name"> <!-- Vue -->
756
+ <input bind:value={name}> <!-- Svelte-ish -->
757
+ </template>
758
+ ```
759
+
760
+ ### ✅ GOOD: One-Way Binding with Event Handler
761
+
762
+ ```html
763
+ <!-- component.html -->
764
+ <template>
765
+ <lightning-input
766
+ label="Name"
767
+ value={name}
768
+ onchange={handleNameChange}>
769
+ </lightning-input>
770
+
771
+ <!-- Or standard HTML input -->
772
+ <input
773
+ type="text"
774
+ value={name}
775
+ onchange={handleInputChange}
776
+ oninput={handleInputChange}>
777
+ </template>
778
+ ```
779
+
780
+ ```javascript
781
+ // component.js
782
+ name = '';
783
+
784
+ handleNameChange(event) {
785
+ this.name = event.detail.value; // lightning-input uses detail.value
786
+ }
787
+
788
+ handleInputChange(event) {
789
+ this.name = event.target.value; // standard input uses target.value
790
+ }
791
+ ```
792
+
793
+ ### ❌ BAD: Direct Property Mutation in Template
794
+
795
+ ```html
796
+ <!-- Cannot mutate in template -->
797
+ <template>
798
+ <button onclick={count++}>Increment</button>
799
+ </template>
800
+ ```
801
+
802
+ ### ✅ GOOD: Mutate in Handler
803
+
804
+ ```javascript
805
+ // component.js
806
+ count = 0;
807
+
808
+ handleIncrement() {
809
+ this.count++;
810
+ }
811
+ ```
812
+
813
+ ```html
814
+ <!-- component.html -->
815
+ <template>
816
+ <button onclick={handleIncrement}>Increment ({count})</button>
817
+ </template>
818
+ ```
819
+
820
+ ---
821
+
822
+ ## 10. Style and Class Binding
823
+
824
+ ### ❌ BAD: Dynamic Styles in Template
825
+
826
+ ```html
827
+ <!-- LLM uses React/Vue style binding - doesn't work in LWC -->
828
+ <template>
829
+ <div style="color: {textColor}; font-size: {fontSize}px">
830
+ Content
831
+ </div>
832
+
833
+ <div style={{ color: textColor, fontSize: fontSize + 'px' }}>
834
+ Content
835
+ </div>
836
+ </template>
837
+ ```
838
+
839
+ ### ✅ GOOD: CSS Custom Properties (Recommended)
840
+
841
+ ```javascript
842
+ // component.js
843
+ @api textColor = 'blue';
844
+ @api fontSize = 14;
845
+
846
+ renderedCallback() {
847
+ this.template.host.style.setProperty('--text-color', this.textColor);
848
+ this.template.host.style.setProperty('--font-size', `${this.fontSize}px`);
849
+ }
850
+ ```
851
+
852
+ ```css
853
+ /* component.css */
854
+ .dynamic-text {
855
+ color: var(--text-color, black);
856
+ font-size: var(--font-size, 14px);
857
+ }
858
+ ```
859
+
860
+ ```html
861
+ <!-- component.html -->
862
+ <template>
863
+ <div class="dynamic-text">Content</div>
864
+ </template>
865
+ ```
866
+
867
+ ### ✅ GOOD: Computed Style String (When Necessary)
868
+
869
+ ```javascript
870
+ // component.js
871
+ get dynamicStyle() {
872
+ return `color: ${this.textColor}; font-size: ${this.fontSize}px;`;
873
+ }
874
+ ```
875
+
876
+ ```html
877
+ <!-- component.html -->
878
+ <template>
879
+ <div style={dynamicStyle}>Content</div>
880
+ </template>
881
+ ```
882
+
883
+ ### ❌ BAD: Dynamic Class with Expression
884
+
885
+ ```html
886
+ <!-- DOES NOT WORK -->
887
+ <template>
888
+ <div class="base {isActive ? 'active' : ''}">Content</div>
889
+ <div class={`base ${isActive ? 'active' : ''}`}>Content</div>
890
+ </template>
891
+ ```
892
+
893
+ ### ✅ GOOD: Computed Class String
894
+
895
+ ```javascript
896
+ // component.js
897
+ get containerClass() {
898
+ return `base ${this.isActive ? 'active' : ''} ${this.isHighlighted ? 'highlighted' : ''}`.trim();
899
+ }
900
+ ```
901
+
902
+ ```html
903
+ <!-- component.html -->
904
+ <template>
905
+ <div class={containerClass}>Content</div>
906
+ </template>
907
+ ```
908
+
909
+ ---
910
+
911
+ ## Quick Reference: Template Rules
912
+
913
+ | What You Want | Wrong (Other Frameworks) | Right (LWC) |
914
+ |---------------|-------------------------|-------------|
915
+ | Arithmetic | `{a + b}` | Getter: `get sum() { return a + b; }` |
916
+ | String concat | `{a + ' ' + b}` | Getter with template literal |
917
+ | Ternary | `{x ? a : b}` | Getter or if:true/if:false |
918
+ | Method call | `{items.length}` | Getter: `get count() { return items.length; }` |
919
+ | Comparison | `if:true={x > 5}` | Getter: `get isBig() { return x > 5; }` |
920
+ | Logical AND | `if:true={a && b}` | Getter: `get both() { return a && b; }` |
921
+ | Negation | `if:true={!x}` | `if:false={x}` or getter |
922
+ | Object literal | `config={{ key: val }}` | Class property |
923
+ | Event args | `onclick={fn(x)}` | Use data attributes |
924
+ | Two-way bind | `value={name}` auto-update | `value={name}` + `onchange` |
925
+
926
+ ---
927
+
928
+ ## Validation Checklist
929
+
930
+ Before deploying LWC templates, verify:
931
+
932
+ - [ ] No arithmetic operations (`+`, `-`, `*`, `/`)
933
+ - [ ] No ternary operators (`? :`)
934
+ - [ ] No object/array literals (`{}`, `[]`)
935
+ - [ ] No method calls (`.length`, `.toUpperCase()`)
936
+ - [ ] No comparisons (`>`, `<`, `===`, `!==`)
937
+ - [ ] No logical operators (`&&`, `||`, `!`)
938
+ - [ ] All iterations have unique `key` attributes
939
+ - [ ] Event handlers don't have inline arguments
940
+ - [ ] Dynamic styles use CSS custom properties or computed strings
941
+
942
+ ---
943
+
944
+ ## Reference
945
+
946
+ - **LWC Best Practices**: See `references/lwc-best-practices.md`
947
+ - **Component Patterns**: See `references/component-patterns.md`
948
+ - **Source**: [Salesforce Diaries - LLM Mistakes](https://salesforcediaries.com/2026/01/16/llm-mistakes-in-apex-lwc-salesforce-code-generation-rules/)