@salesforce/afv-skills 1.41.0 → 1.43.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.
- package/package.json +2 -6
- package/skills/automation-sandbox-post-copy-config-generate/SKILL.md +3 -0
- package/skills/automation-sandbox-post-copy-configure/SKILL.md +4 -0
- package/skills/design-systems-slds-validate/SKILL.md +2 -2
- package/skills/dx-app-analytics-query/SKILL.md +1 -3
- package/skills/dx-devops-conflict-resolve/SKILL.md +205 -0
- package/skills/dx-devops-conflict-resolve/examples/conflict-workflows.md +165 -0
- package/skills/dx-devops-conflict-resolve/references/deploy-failure-resolution.md +75 -0
- package/skills/dx-devops-conflict-resolve/references/git-conflict-resolution.md +124 -0
- package/skills/dx-devops-conflict-resolve/scripts/detect-conflicts.sh +91 -0
- package/skills/dx-devops-conflict-resolve/scripts/diagnose-deploy-failure.sh +156 -0
- package/skills/dx-devops-request-status/SKILL.md +160 -0
- package/skills/dx-devops-request-status/examples/polling-workflows.md +101 -0
- package/skills/dx-devops-request-status/references/cli-commands.md +176 -0
- package/skills/dx-devops-request-status/scripts/poll-status.sh +134 -0
- package/skills/dx-devops-test-failures-analyze/SKILL.md +6 -6
- package/skills/dx-devops-test-pipeline-configure/SKILL.md +7 -7
- package/skills/dx-devops-test-suite-assignments-configure/SKILL.md +6 -6
- package/skills/dx-devops-test-suite-run/SKILL.md +6 -6
- package/skills/dx-devops-work-item-manage/SKILL.md +2 -0
- package/skills/dx-org-manage/references/creating-scratch-org.md +5 -2
- package/skills/dx-org-manage/references/creating-snapshot.md +1 -0
- package/skills/dx-org-shape-manage/SKILL.md +152 -0
- package/skills/dx-org-shape-manage/examples/create_error_output.json +9 -0
- package/skills/dx-org-shape-manage/examples/create_success_output.json +9 -0
- package/skills/dx-org-shape-manage/examples/delete_output.json +11 -0
- package/skills/dx-org-shape-manage/examples/list_inactive_output.json +32 -0
- package/skills/dx-org-shape-manage/examples/list_output.json +24 -0
- package/skills/dx-org-shape-manage/references/cli_flags.md +135 -0
- package/skills/dx-org-switch/SKILL.md +2 -2
- package/skills/dx-org-trial-expiration-check/SKILL.md +2 -0
- package/skills/dx-pkg-post-install-configure/SKILL.md +3 -0
- package/skills/education-cloud-multi-campus-configure/SKILL.md +211 -0
- package/skills/education-cloud-multi-campus-configure/examples/hierarchy_visualization.md +174 -0
- package/skills/education-cloud-multi-campus-configure/examples/output_examples.md +54 -0
- package/skills/education-cloud-multi-campus-configure/examples/sample_hierarchy_input.csv +29 -0
- package/skills/education-cloud-multi-campus-configure/examples/sample_hierarchy_input_edgecases.csv +16 -0
- package/skills/education-cloud-multi-campus-configure/references/account_recordtype_prerequisite.md +44 -0
- package/skills/education-cloud-multi-campus-configure/references/delta_computation.md +33 -0
- package/skills/education-cloud-multi-campus-configure/references/error_handling.md +198 -0
- package/skills/education-cloud-multi-campus-configure/references/foundation_prerequisites.md +54 -0
- package/skills/education-cloud-multi-campus-configure/references/gotchas.md +16 -0
- package/skills/education-cloud-multi-campus-configure/references/hierarchy_parsing_rules.md +133 -0
- package/skills/education-cloud-multi-campus-configure/references/mcp-invocation.md +75 -0
- package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/SKILL.md +1 -1
- package/skills/experience-cms-brand-apply/SKILL.md +4 -1
- package/skills/experience-cms-brand-create/SKILL.md +197 -0
- package/skills/experience-cms-brand-create/assets/brand-template.json +329 -0
- package/skills/experience-cms-brand-create/references/brand-anatomy.md +120 -0
- package/skills/experience-cms-brand-create/references/disk-contract.md +84 -0
- package/skills/experience-cms-content-generate/SKILL.md +190 -0
- package/skills/experience-cms-content-generate/assets/display-formats.md +84 -0
- package/skills/experience-cms-content-generate/assets/payloads/create-content-bulk.json +11 -0
- package/skills/experience-cms-content-generate/assets/payloads/create-content-single.json +11 -0
- package/skills/experience-cms-content-generate/assets/payloads/publish-content.json +4 -0
- package/skills/experience-cms-content-generate/assets/payloads/update-content.json +9 -0
- package/skills/experience-cms-content-generate/assets/questions.md +241 -0
- package/skills/experience-cms-content-generate/examples/create-content-call.md +81 -0
- package/skills/experience-cms-content-generate/references/bulk-batching.md +56 -0
- package/skills/experience-cms-content-generate/references/content-type-classification.md +88 -0
- package/skills/experience-cms-content-generate/references/content-write-tool.md +95 -0
- package/skills/experience-cms-content-generate/references/delegation-protocol.md +37 -0
- package/skills/experience-cms-content-generate/references/edit-publish-workflow.md +63 -0
- package/skills/experience-cms-content-generate/references/error-recovery.md +72 -0
- package/skills/experience-cms-content-generate/references/identifier-resolution.md +26 -0
- package/skills/experience-cms-content-generate/references/intent-routing.md +45 -0
- package/skills/experience-cms-content-generate/references/principles.md +19 -0
- package/skills/experience-cms-content-generate/references/ux-rules.md +68 -0
- package/skills/experience-cms-content-generate/references/workspace-resolution.md +33 -0
- package/skills/experience-cms-content-type-generate/SKILL.md +449 -0
- package/skills/experience-cms-content-type-generate/assets/discovery-prompts.md +79 -0
- package/skills/experience-cms-content-type-generate/assets/schema-example.json +70 -0
- package/skills/experience-cms-content-type-generate/references/agent-checklist.md +50 -0
- package/skills/experience-cms-content-type-generate/references/anti-patterns.md +39 -0
- package/skills/experience-cms-content-type-generate/references/deployment-errors.md +27 -0
- package/skills/experience-cms-content-type-generate/references/discovery-details.md +106 -0
- package/skills/experience-cms-content-type-generate/references/discovery-query-rules.md +85 -0
- package/skills/experience-cms-content-type-generate/references/edit-fields-loop.md +48 -0
- package/skills/experience-cms-content-type-generate/references/pre-deploy-checklist.md +21 -0
- package/skills/experience-cms-content-type-generate/references/retrieve-and-reconcile.md +105 -0
- package/skills/experience-cms-content-type-generate/references/schema-rules.md +51 -0
- package/skills/experience-cms-content-type-generate/references/schema-summary-format.md +60 -0
- package/skills/experience-lds-graphql-generate/SKILL.md +4 -0
- package/skills/experience-lwc-accessibility-jest-run/SKILL.md +79 -0
- package/skills/experience-lwc-accessibility-jest-run/references/running-sa11y-jest-tests.md +205 -0
- package/skills/experience-lwc-design-generate/SKILL.md +5 -4
- package/skills/experience-lwc-generate/SKILL.md +10 -9
- package/skills/experience-ui-bundle-deploy/references/dev-preview.md +21 -0
- package/skills/experience-ui-bundle-deploy/references/social-login.md +1 -0
- package/skills/experience-ui-bundle-file-upload-generate/SKILL.md +6 -6
- package/skills/experience-ui-bundle-localize/SKILL.md +30 -37
- package/skills/experience-ui-bundle-localize/references/gotchas.md +23 -7
- package/skills/experience-ui-bundle-localize/references/i18n-setup.md +48 -4
- package/skills/experience-ui-bundle-localize/references/label-xml.md +22 -8
- package/skills/experience-ui-bundle-localize/references/verifying.md +39 -11
- package/skills/experience-ui-bundle-localize/scripts/detect-bundle-type.sh +118 -15
- package/skills/experience-ui-bundle-localize/scripts/tests/test-detect-bundle-type.sh +187 -0
- package/skills/experience-ui-bundle-mfa-configure/SKILL.md +13 -2
- package/skills/experience-ui-bundle-mfa-configure/references/social-login.md +1 -0
- package/skills/experience-ui-bundle-project-generate/SKILL.md +2 -2
- package/skills/integration-connectivity-generate/SKILL.md +11 -10
- package/skills/integration-eventing-cdc-configure/SKILL.md +6 -6
- package/skills/integration-eventing-subscription-configure/SKILL.md +6 -5
- package/skills/mobile-platform-native-capabilities-integrate/SKILL.md +2 -2
- package/skills/mobile-platform-offline-validate/scripts/package.json +1 -1
- package/skills/platform-agentexchange-partner-offers-configure/SKILL.md +8 -8
- package/skills/platform-custom-application-generate/SKILL.md +2 -0
- package/skills/platform-custom-field-generate/SKILL.md +8 -6
- package/skills/platform-custom-metadata-type-generate/SKILL.md +460 -0
- package/skills/platform-custom-metadata-type-generate/references/cmdt-records.md +251 -0
- package/skills/platform-custom-metadata-type-generate/scripts/sanitize-developer-name.sh +46 -0
- package/skills/platform-custom-setting-generate/SKILL.md +419 -0
- package/skills/platform-dataspace-access-configure/SKILL.md +3 -3
- package/skills/platform-sharing-owd-configure/SKILL.md +3 -0
- package/skills/platform-value-set-generate/SKILL.md +2 -0
- package/skills/service-agentforce-channel-configure/SKILL.md +29 -20
- package/skills/service-agentforce-channel-configure/assets/BotEmailDefinition.botEmailDefinition-meta.xml +36 -0
- package/skills/service-agentforce-channel-configure/assets/email/unfiled$public/AgentforceForServiceEmailTemplate.email +17 -0
- package/skills/service-agentforce-channel-configure/assets/email/unfiled$public/AgentforceForServiceEmailTemplate.email-meta.xml +29 -0
- package/skills/service-agentforce-channel-configure/assets/mdapi-package.xml +25 -0
- package/skills/service-agentforce-channel-configure/assets/settings-mdapi-package.xml +30 -0
- package/skills/service-agentforce-channel-configure/references/agent-wiring.md +20 -0
- package/skills/service-agentforce-channel-configure/references/botemaildefinition.md +107 -0
- package/skills/service-agentforce-channel-configure/references/channel-branch-email.md +203 -50
- package/skills/service-agentforce-channel-configure/references/channel-types.md +30 -3
- package/skills/service-agentforce-channel-configure/references/queue-resolution.md +17 -8
- package/skills/service-agentforce-channel-configure/references/routing-flow.md +14 -3
- package/skills/service-agentforce-channel-configure/scripts/validate-botemaildefinition.py +126 -0
- package/skills/service-agentforce-channel-configure/scripts/validate-emailtemplate.py +133 -0
- package/skills/service-de-channel-activate/SKILL.md +271 -0
- package/skills/service-de-channel-activate/references/gotchas.md +31 -0
- package/skills/service-de-channel-activate/references/phone-verification.md +96 -0
- package/skills/service-de-channel-activate/references/worked-examples.md +14 -0
- package/skills/service-de-channel-consent-configure/SKILL.md +230 -0
- package/skills/service-de-channel-consent-configure/references/gotchas.md +41 -0
- package/skills/service-de-channel-consent-configure/references/language-keywords.md +84 -0
- package/skills/service-de-channel-consent-configure/references/worked-examples.md +134 -0
- package/skills/service-de-channel-create/SKILL.md +369 -0
- package/skills/service-de-channel-create/references/apple.md +59 -0
- package/skills/service-de-channel-create/references/connect-insert.md +84 -0
- package/skills/service-de-channel-create/references/facebook.md +154 -0
- package/skills/service-de-channel-create/references/line.md +66 -0
- package/skills/service-de-channel-create/references/sms.md +98 -0
- package/skills/service-de-channel-create/references/whatsapp.md +98 -0
- package/skills/service-de-channel-create/references/worked-examples.md +70 -0
- package/skills/service-de-channel-routing-configure/SKILL.md +345 -0
- package/skills/service-de-channel-routing-configure/references/asa-routing.md +90 -0
- package/skills/service-de-channel-routing-configure/references/gotchas.md +27 -0
- package/skills/service-de-channel-routing-configure/references/queue-creation.md +123 -0
- package/skills/service-de-channel-routing-configure/references/target-locate.md +98 -0
- package/skills/service-de-channel-routing-configure/references/worked-examples.md +174 -0
- package/skills/service-de-headless-channel-configure/SKILL.md +305 -0
- package/skills/service-de-headless-channel-configure/references/gotchas.md +27 -0
- package/skills/service-de-headless-channel-configure/references/inputs.md +49 -0
- package/skills/service-de-headless-channel-configure/references/output-envelopes.md +53 -0
- package/skills/service-de-headless-channel-configure/references/partial-success.md +24 -0
- package/skills/service-de-headless-channel-configure/references/terms-and-conditions.md +54 -0
- package/skills/service-de-headless-channel-configure/references/worked-examples.md +108 -0
- package/skills/service-de-waba-integrate/SKILL.md +227 -0
- package/skills/service-digital-engagement-channel-configure/scripts/check-api-version.sh +29 -0
- package/skills/service-digital-engagement-messaging-site-integrate/SKILL.md +10 -9
- package/skills/service-digital-engagement-messaging-site-integrate/references/lwr_patch.md +39 -21
- package/skills/service-digital-engagement-messaging-site-integrate/scripts/patch_lwr_bundle.sh +157 -96
- package/skills/service-email-to-case-configure/SKILL.md +190 -0
- package/skills/service-email-to-case-configure/assets/CaseSettings.settings-meta.xml +45 -0
- package/skills/service-email-to-case-configure/examples/CaseSettings-two-addresses.settings-meta.xml +36 -0
- package/skills/service-email-to-case-configure/references/apply-mechanics.md +73 -0
- package/skills/service-email-to-case-configure/references/routing_address_reference.md +73 -0
- package/skills/service-email-to-case-configure/references/troubleshooting.md +25 -0
- package/skills/service-email-to-case-configure/scripts/apply-casesettings.py +1315 -0
- package/skills/service-email-to-case-configure/scripts/check-agent-email-capability.sh +26 -0
- package/skills/service-email-to-case-configure/scripts/tests/__init__.py +0 -0
- package/skills/service-email-to-case-configure/scripts/tests/_bootstrap.py +45 -0
- package/skills/service-email-to-case-configure/scripts/tests/_fakeorg.py +366 -0
- package/skills/service-email-to-case-configure/scripts/tests/_run.py +84 -0
- package/skills/service-email-to-case-configure/scripts/tests/test_apply_org_scenarios.py +655 -0
- package/skills/service-email-to-case-configure/scripts/tests/test_get_session.py +134 -0
- package/skills/service-email-to-case-configure/scripts/tests/test_new_capabilities.py +193 -0
- package/skills/service-email-to-case-configure/scripts/tests/test_validate_casesettings.py +170 -0
- package/skills/service-email-to-case-configure/scripts/validate-casesettings.py +229 -0
- package/skills/service-itsm-agentic-setup-agentforce-coordinate/SKILL.md +33 -15
- package/skills/service-itsm-agentic-setup-agentforce-coordinate/examples/output-templates.md +63 -47
- package/skills/service-itsm-agentic-setup-agentforce-studio-configure/SKILL.md +17 -12
- package/skills/service-itsm-agentic-setup-agentforce-studio-configure/references/cli-invocation.md +5 -3
- package/skills/service-itsm-agentic-setup-agentforce-studio-configure/scripts/classify-enable-plan.mjs +11 -3
- package/skills/service-itsm-agentic-setup-agentforce-studio-validate/SKILL.md +8 -6
- package/skills/service-itsm-agentic-setup-agentforce-studio-validate/references/cli-invocation.md +3 -3
- package/skills/service-itsm-agentic-setup-agentforce-studio-validate/scripts/classify-readiness.mjs +11 -3
- package/skills/service-itsm-agentic-setup-configure/SKILL.md +5 -5
- package/skills/service-itsm-agentic-setup-configure/examples/output-templates.md +5 -5
- package/skills/service-itsm-agentic-setup-employee-agent-configure/SKILL.md +2 -2
- package/skills/service-itsm-agentic-setup-employee-agent-configure/references/report-format.md +11 -7
- package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/render-report.mjs +20 -7
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/SKILL.md +10 -6
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/action-availability.md +7 -7
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/report-format.md +11 -7
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/build-create-body.mjs +24 -17
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/classify-action-availability.mjs +98 -58
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/render-report.mjs +20 -7
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/strip-release-management.mjs +176 -0
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/SKILL.md +19 -19
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/cli-invocation.md +3 -4
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/helper-contracts.md +6 -6
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/permset-topology.md +3 -10
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/scripts/classify-permset-availability.mjs +7 -9
- package/skills/service-itsm-incident-mgmt-configure/SKILL.md +2 -0
- package/skills/service-itsm-incident-priority-configure/SKILL.md +15 -12
- package/skills/service-itsm-incident-priority-configure/examples/matrix-operations.md +27 -1
- package/skills/service-itsm-incident-priority-configure/references/sf-cli-invocation.md +37 -6
- package/skills/service-native-voice-recording-transcription-configure/SKILL.md +146 -0
- package/skills/service-native-voice-recording-transcription-configure/assets/confirmation-output.json +16 -0
- package/skills/service-native-voice-recording-transcription-configure/assets/package.xml +22 -0
- package/skills/service-native-voice-recording-transcription-configure/references/thunderbird-voice-settings.md +101 -0
- package/skills/service-native-voice-recording-transcription-configure/scripts/enable-recording-transcription.sh +181 -0
- package/skills/data360-activate/README.md +0 -38
- package/skills/data360-activate/SKILL.md +0 -127
- package/skills/data360-connect/README.md +0 -57
- package/skills/data360-connect/SKILL.md +0 -163
- package/skills/data360-connect/examples/connections/heroku-postgres.json +0 -15
- package/skills/data360-connect/examples/connections/ingest-api-connection.json +0 -5
- package/skills/data360-connect/examples/connections/ingest-api-schema.json +0 -31
- package/skills/data360-connect/examples/connections/redshift.json +0 -16
- package/skills/data360-connect/examples/connections/sharepoint-unstructured.json +0 -20
- package/skills/data360-connect/examples/connections/snowflake-connection.json +0 -42
- package/skills/data360-harmonize/README.md +0 -31
- package/skills/data360-harmonize/SKILL.md +0 -126
- package/skills/data360-orchestrate/README.md +0 -120
- package/skills/data360-orchestrate/SKILL.md +0 -263
- package/skills/data360-orchestrate/assets/definitions/activation-target.template.json +0 -5
- package/skills/data360-orchestrate/assets/definitions/activation.template.json +0 -7
- package/skills/data360-orchestrate/assets/definitions/calculated-insight.template.json +0 -7
- package/skills/data360-orchestrate/assets/definitions/data-action-target.template.json +0 -5
- package/skills/data360-orchestrate/assets/definitions/data-action.template.json +0 -5
- package/skills/data360-orchestrate/assets/definitions/data-graph.template.json +0 -21
- package/skills/data360-orchestrate/assets/definitions/data-stream.template.json +0 -55
- package/skills/data360-orchestrate/assets/definitions/dmo.template.json +0 -17
- package/skills/data360-orchestrate/assets/definitions/identity-resolution.template.json +0 -30
- package/skills/data360-orchestrate/assets/definitions/mapping.template.json +0 -14
- package/skills/data360-orchestrate/assets/definitions/relationship.template.json +0 -12
- package/skills/data360-orchestrate/assets/definitions/search-index.template.json +0 -9
- package/skills/data360-orchestrate/assets/definitions/segment.template.json +0 -16
- package/skills/data360-orchestrate/references/feature-readiness.md +0 -157
- package/skills/data360-orchestrate/references/plugin-setup.md +0 -138
- package/skills/data360-orchestrate/scripts/bootstrap-plugin.sh +0 -53
- package/skills/data360-orchestrate/scripts/diagnose-org.mjs +0 -511
- package/skills/data360-orchestrate/scripts/generate-manifest.mjs +0 -68
- package/skills/data360-orchestrate/scripts/verify-plugin.sh +0 -58
- package/skills/data360-prepare/README.md +0 -50
- package/skills/data360-prepare/SKILL.md +0 -203
- package/skills/data360-prepare/examples/ingestion-api/.env.example +0 -8
- package/skills/data360-prepare/examples/ingestion-api/README.md +0 -48
- package/skills/data360-prepare/examples/ingestion-api/send-data.py +0 -144
- package/skills/data360-query/README.md +0 -43
- package/skills/data360-query/SKILL.md +0 -128
- package/skills/data360-query/examples/search-indexes/hybrid-structured.json +0 -44
- package/skills/data360-query/examples/search-indexes/vector-knowledge.json +0 -43
- package/skills/data360-segment/README.md +0 -35
- package/skills/data360-segment/SKILL.md +0 -123
- package/skills/service-helpagent-coordinate/references/channel-help-portal.md +0 -22
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-1-1-non-text-content.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-i-lists.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-ii-tables.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-iii-form-labels.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-iv-regions.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-v-groups.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-5-identify-input.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-4-3-contrast.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-1-1-keyboard.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-4-4-link-purpose.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-4-6-headings-labels.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-1-pointer-gestures.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-2-pointer-cancellation.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-3-label-in-name.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-7-dragging-movement.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-2-1-on-focus.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-2-2-on-input.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-3-1-error-identification.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-3-2-labels-instructions.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-3-3-error-suggestion.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-4-1-2-i-name.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-4-1-2-ii-role.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-4-1-2-iii-value.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-1-1-non-text-content.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-1-use-of-color.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-10-resize-reflow.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-11-non-text-contrast.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-3-contrast.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/scripts/contrast-ratio.py +0 -0
package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/SKILL.md
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: experience-
|
|
2
|
+
name: experience-accessibility-validate
|
|
3
3
|
description: "Use this skill to determine whether a Lightning Web Component (LWC) is accessible and meets WCAG accessibility guidelines. TRIGGER when the user asks \"is my component accessible?\", \"does my LWC meet accessibility guidelines?\", \"is this component WCAG compliant?\", \"find accessibility problems in this LWC\", \"is this LWC keyboard accessible?\", \"does this component work with a screen reader?\", \"does this component have sufficient color contrast?\", \"check ARIA usage in this LWC\", or \"WCAG 2.2 accessibility check\". Also TRIGGER when the user wants to fix or improve accessibility (a11y, WCAG, ARIA) in an LWC's HTML, JS, or CSS — semantic markup, focus, keyboard nav, contrast, screen-reader labels, WCAG 2.2 SC. Produces `a11y-review.md` with WCAG-cited findings. DO NOT TRIGGER for general LWC generation (use `experience-lwc-generate`) or SLDS visual/design review not focused on accessibility (use `design-systems-slds-validate`)."
|
|
4
4
|
metadata:
|
|
5
5
|
version: "1.1"
|
|
@@ -4,6 +4,9 @@ description: "Extracts, retrieves, and applies CMS brand guidelines (voice, tone
|
|
|
4
4
|
metadata:
|
|
5
5
|
version: "1.0"
|
|
6
6
|
domains: ["Experience"]
|
|
7
|
+
relatedSkills:
|
|
8
|
+
- "experience-cms-brand-create"
|
|
9
|
+
- "experience-content-media-search"
|
|
7
10
|
---
|
|
8
11
|
|
|
9
12
|
# Applying CMS Brand
|
|
@@ -24,7 +27,7 @@ Universal skill for searching, extracting, and applying CMS brand guidelines to
|
|
|
24
27
|
|
|
25
28
|
**DO NOT use this skill when the user wants to:**
|
|
26
29
|
- Search for images or media (use experience-content-media-search skill)
|
|
27
|
-
- Create a new brand from scratch
|
|
30
|
+
- Create a new brand from scratch (use experience-cms-brand-create skill)
|
|
28
31
|
- Edit brand definitions in CMS
|
|
29
32
|
- Generate logos or visual brand assets
|
|
30
33
|
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: experience-cms-brand-create
|
|
3
|
+
description: "Author a Salesforce Digital Experience brand (a \"brand.json\") so the VS Code Brand Toolkit can load, edit, and preview it. Use this skill whenever someone wants to: create a brand, make a new brand, generate a brand from a description or a color/logo/mood, add a brand to a project so the Brand Toolkit picks it up, scaffold a brand.json, theme a Digital Experience site, or turn a brand idea (\"a dark luxury brand\", \"match our logo\", \"coral + rounded + friendly\") into a loadable brand. Also use it when the user mentions \"Brand Toolkit\", \"theme manager brand\", \"brand token\", \"colorScheme\", \"primaryAccent\", \".digitalExperience/brands\", \"sfdc_cms:title\", or a \"brand.json\" that should show up in the Brand Toolkit. Do NOT use this skill to apply an existing brand's voice, tone, or guidelines to generated content (use experience-cms-brand-apply), to search Salesforce CMS for existing brands, or to search for images, media, or logos (use experience-content-media-search)."
|
|
4
|
+
metadata:
|
|
5
|
+
version: "1.0"
|
|
6
|
+
domains: ["Experience"]
|
|
7
|
+
relatedSkills:
|
|
8
|
+
- "experience-cms-brand-apply"
|
|
9
|
+
- "experience-content-media-search"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Create a Brand for the Brand Toolkit
|
|
13
|
+
|
|
14
|
+
Generates a Digital Experience **brand** — one `brand.json` file — from a user's
|
|
15
|
+
description, and writes it where the VS Code **Brand Toolkit** will discover it,
|
|
16
|
+
so the user can immediately load, edit, and preview the brand.
|
|
17
|
+
|
|
18
|
+
A brand is a single JSON object of design tokens: colors (`colorScheme`), a font
|
|
19
|
+
catalog and base font (`fontFamily` / `baseFontFamily`), size/spacing/border
|
|
20
|
+
scales, per-role `typography`, and `buttonStyleGroup` definitions. Most of it is
|
|
21
|
+
fixed structure with internal references; **you create a brand by starting from a
|
|
22
|
+
known-good template and changing only the leaf values** (colors, font choice,
|
|
23
|
+
border radius, base size) plus a unique name.
|
|
24
|
+
|
|
25
|
+
The Brand Toolkit owns everything downstream: it computes derived hover colors,
|
|
26
|
+
compiles the `--tm-*` CSS, and manages the active-brand config on Save. Your job
|
|
27
|
+
is just the `brand.json`.
|
|
28
|
+
|
|
29
|
+
> **Related:** This skill *creates* a new brand definition. To *apply* an existing
|
|
30
|
+
> brand's voice, tone, and guidelines to generated content, use the
|
|
31
|
+
> `experience-cms-brand-apply` skill instead.
|
|
32
|
+
|
|
33
|
+
## Reference material
|
|
34
|
+
|
|
35
|
+
Read each reference when its step arrives — don't inline everything up front:
|
|
36
|
+
|
|
37
|
+
- **`assets/brand-template.json`** — the known-good full brand to clone. This
|
|
38
|
+
is your starting point for EVERY brand. Copy it, then change leaves.
|
|
39
|
+
- **`references/brand-anatomy.md`** — which fields are literals you should edit vs
|
|
40
|
+
references you must leave intact; the `colorScheme` guide; the font catalog and
|
|
41
|
+
which fonts actually render in the preview; the derived-colors rule. Read before
|
|
42
|
+
editing values.
|
|
43
|
+
- **`references/disk-contract.md`** — exactly where the file goes
|
|
44
|
+
(`.digitalExperience/brands/<slug>.brand.json`), the title→slug rule, and what
|
|
45
|
+
the toolkit generates so you don't. Read before writing the file.
|
|
46
|
+
|
|
47
|
+
## Interactive flow
|
|
48
|
+
|
|
49
|
+
Walk these steps in order. When you have an interactive user, ask before assuming
|
|
50
|
+
and confirm the design back before writing; in a single-turn, headless, or CLI run
|
|
51
|
+
with no user to answer, state the choices you inferred and write in the same run
|
|
52
|
+
rather than waiting for a confirmation that cannot arrive (see Step 3). Steps 1–5
|
|
53
|
+
create the brand file and complete the task. After they finish, an optional
|
|
54
|
+
post-completion action — opening the Brand Toolkit to preview/edit — is described
|
|
55
|
+
in **"After completion"** below; it is not part of the required workflow.
|
|
56
|
+
|
|
57
|
+
### Step 1: Gather the brand intent
|
|
58
|
+
|
|
59
|
+
Find out what the brand should feel like. If the user already gave a description
|
|
60
|
+
("a dark, premium fintech brand in deep purple"), extract from it; otherwise ask
|
|
61
|
+
briefly for:
|
|
62
|
+
|
|
63
|
+
- **Name** — a short, human-readable brand name (becomes `sfdc_cms:title`, must be
|
|
64
|
+
unique in the project). If they don't offer one, propose one from the vibe.
|
|
65
|
+
- **Primary/brand color** — the signature accent. Accept a hex, a named color, or
|
|
66
|
+
a description ("Salesforce blue", "warm coral"). Convert to a `#rrggbb` hex.
|
|
67
|
+
- **Light or dark** — does the page background read light or dark? This sets
|
|
68
|
+
`root` and `contrast`.
|
|
69
|
+
- **Personality** (optional) — corners (sharp vs rounded), font feel (clean sans,
|
|
70
|
+
classic serif, techy mono), density. Map these to `borderRadius`, `fontFamily`
|
|
71
|
+
choice, and `baseFontSize`.
|
|
72
|
+
|
|
73
|
+
If a logo or image is provided, sample its dominant color for `primaryAccent` and
|
|
74
|
+
judge light/dark from its background. Keep it to a couple of questions — infer the
|
|
75
|
+
rest from the vibe and confirm in Step 3.
|
|
76
|
+
|
|
77
|
+
### Step 2: Build the brand from the template
|
|
78
|
+
|
|
79
|
+
1. Read `assets/brand-template.json` — this is your base. Read
|
|
80
|
+
`references/brand-anatomy.md` so you know which leaves are safe to change.
|
|
81
|
+
2. Copy the template and override ONLY leaf values:
|
|
82
|
+
- `sfdc_cms:title` → the unique brand name.
|
|
83
|
+
- `colorScheme.root` / `contrast` → per light or dark (e.g. light: `#ffffff` /
|
|
84
|
+
`#000000`; dark: a dark bg / `#ffffff`).
|
|
85
|
+
- `colorScheme.primaryAccent` → the brand color.
|
|
86
|
+
- `colorScheme.primaryAccentContrast` → black or white, whichever is legible on
|
|
87
|
+
the accent.
|
|
88
|
+
- `colorScheme.neutral` → a mid gray that reads on `root`.
|
|
89
|
+
- `baseFontFamily` (and, to match, the `typography.heading.*.fontFamily`
|
|
90
|
+
entries) → a reference to a catalog key whose font actually renders in the
|
|
91
|
+
preview (see the anatomy doc's font list).
|
|
92
|
+
- Optional personality: `borderRadius.round.value`, `borderWeight.thin.value`,
|
|
93
|
+
`baseFontSize.value`, `fontWeight.normal`.
|
|
94
|
+
3. Do NOT: add `*Derived` color keys, drop or rename any section/key, replace a
|
|
95
|
+
`{!$brand....}` reference with a literal, or use a font name outside the
|
|
96
|
+
renderable catalog. The structure must stay identical to the template.
|
|
97
|
+
4. Sanity-check contrast: `contrast` on `root`, and `primaryAccentContrast` on
|
|
98
|
+
`primaryAccent`, must be legible. Prefer black/white for the contrast colors.
|
|
99
|
+
|
|
100
|
+
### Step 3: Confirm the design (or, if headless, state it and proceed)
|
|
101
|
+
|
|
102
|
+
Assemble a compact summary of the concrete choices — name, the four or five hex
|
|
103
|
+
colors (with a note on light/dark), the font, and any corner/size/weight tweaks.
|
|
104
|
+
Then branch on whether a user can actually answer:
|
|
105
|
+
|
|
106
|
+
- **Interactive run (a user can reply):** show the summary and ask the user to
|
|
107
|
+
confirm or adjust. Iterate here rather than after the file is on disk.
|
|
108
|
+
- **Single-turn / headless / CLI / CI run (no user to confirm):** do **not** pause
|
|
109
|
+
for a confirmation that cannot arrive. State the choices you inferred and proceed
|
|
110
|
+
straight to Step 4, writing the file in the same run.
|
|
111
|
+
|
|
112
|
+
When you can't tell which mode you're in, prefer stating your choices and
|
|
113
|
+
proceeding over stalling — a written brand the user can adjust beats a hang.
|
|
114
|
+
|
|
115
|
+
### Step 4: Write the brand file
|
|
116
|
+
|
|
117
|
+
Follow `references/disk-contract.md`:
|
|
118
|
+
|
|
119
|
+
1. Derive `<slug>` from the confirmed title using the exact slug rule in that doc.
|
|
120
|
+
2. Ensure `<workspaceRoot>/.digitalExperience/brands/` exists.
|
|
121
|
+
3. If `<slug>.brand.json` already exists and this is a NEW brand, append the
|
|
122
|
+
lowest free numeric suffix (`_2`, `_3`, …).
|
|
123
|
+
4. Write the brand object (unwrapped body, 2-space pretty-printed) to
|
|
124
|
+
`<workspaceRoot>/.digitalExperience/brands/<slug>.brand.json`.
|
|
125
|
+
5. Do NOT write the `.css` or `activeBrand.json` — the toolkit generates those on
|
|
126
|
+
Save.
|
|
127
|
+
|
|
128
|
+
### Step 5: Validate the file
|
|
129
|
+
|
|
130
|
+
Run the verification checklist in `references/disk-contract.md` (valid JSON;
|
|
131
|
+
unwrapped body; present + unique `sfdc_cms:title`; slug matches title; no
|
|
132
|
+
hand-authored `*Derived` keys; fonts renderable).
|
|
133
|
+
|
|
134
|
+
## After completion (optional): Open the Brand Toolkit to preview and edit
|
|
135
|
+
|
|
136
|
+
The numbered workflow above is complete once Step 5 passes — the brand file is the
|
|
137
|
+
deliverable and stands on its own. This section is a **separate, optional action,
|
|
138
|
+
not a workflow step**, and only applies inside VS Code. Opening the Brand Toolkit
|
|
139
|
+
is just a convenience for previewing/editing. **Skip it entirely** (the brand is
|
|
140
|
+
already done — just tell the user where the file was written) when any of these
|
|
141
|
+
hold:
|
|
142
|
+
|
|
143
|
+
- The user isn't working in VS Code, or asked for the brand file only / "just
|
|
144
|
+
create it" / "don't open anything" / a headless, scripted, or CI context.
|
|
145
|
+
- There's no `.digitalExperience` project / VS Code workspace around the file
|
|
146
|
+
(e.g. you wrote to a standalone folder outside a Salesforce DX project).
|
|
147
|
+
- You can't tell you're in an interactive VS Code session (e.g. a plain CLI or
|
|
148
|
+
agent run with no desktop) — **don't** fire the launcher speculatively; a
|
|
149
|
+
`vscode://` deep link can otherwise cold-start or error out. When unsure, ask
|
|
150
|
+
the user whether to open the Brand Toolkit rather than assuming.
|
|
151
|
+
|
|
152
|
+
Only when the user is in VS Code and wants to preview/edit, open the **Brand
|
|
153
|
+
Toolkit** (Theme Preview) panel by running the terminal command that matches the
|
|
154
|
+
user's operating system. All three open the SAME deep link — only the OS launcher
|
|
155
|
+
differs; run exactly one (the one for the current OS):
|
|
156
|
+
|
|
157
|
+
- macOS:
|
|
158
|
+
`open "vscode://salesforce.salesforcedx-vscode-ui-preview/open-brand-manager"`
|
|
159
|
+
- Linux:
|
|
160
|
+
`xdg-open "vscode://salesforce.salesforcedx-vscode-ui-preview/open-brand-manager"`
|
|
161
|
+
- Windows (PowerShell):
|
|
162
|
+
`Start-Process "vscode://salesforce.salesforcedx-vscode-ui-preview/open-brand-manager"`
|
|
163
|
+
|
|
164
|
+
VS Code routes the link to the Live Preview (ui-preview) extension, which opens
|
|
165
|
+
the Brand Toolkit panel. Then tell the user:
|
|
166
|
+
|
|
167
|
+
> The Brand Toolkit is open in VS Code. Your new brand "<title>" is in the
|
|
168
|
+
> **Local** tab — select it to preview and fine-tune it; the toolkit computes the
|
|
169
|
+
> hover colors and compiles the CSS, and **Save** persists your tweaks.
|
|
170
|
+
|
|
171
|
+
If the panel was already open, the new brand may need a refresh in the Local tab
|
|
172
|
+
to appear. If nothing opens, the deep link requires the Live Preview extension
|
|
173
|
+
(`salesforce.salesforcedx-vscode-ui-preview`) to be installed and active — fall
|
|
174
|
+
back to telling the user to run **SFDX: Open Theme Preview** from the Command
|
|
175
|
+
Palette.
|
|
176
|
+
|
|
177
|
+
## Guardrails
|
|
178
|
+
|
|
179
|
+
- **Clone the template; don't write a brand from scratch.** A hand-built brand
|
|
180
|
+
almost always drops a key the editors/compiler/preview expect, and the failure
|
|
181
|
+
is silent (wrong-looking preview, no error).
|
|
182
|
+
- **Edit literals, keep references.** Changing a `colorScheme` color re-themes
|
|
183
|
+
every button/accent that references it — that's the point. Replacing a reference
|
|
184
|
+
with a literal breaks that link.
|
|
185
|
+
- **Never author derived colors.** `primaryAccentDerived` /
|
|
186
|
+
`primaryAccentContrastDerived` are computed by the toolkit on load. Omit them.
|
|
187
|
+
- **Only use fonts that render in the preview** (system fonts + "Salesforce
|
|
188
|
+
Sans"). Any other name silently falls back, so the preview misleads.
|
|
189
|
+
- **`sfdc_cms:title` must be unique.** Duplicate titles collapse into one entry in
|
|
190
|
+
the toolkit's local list.
|
|
191
|
+
- **One file only.** Write `<slug>.brand.json`; let the toolkit produce the `.css`
|
|
192
|
+
and `activeBrand.json`.
|
|
193
|
+
- **The brand file is the deliverable; opening the toolkit is optional.** Steps
|
|
194
|
+
1–5 fully complete the task. Only run the Brand Toolkit launcher (see "After
|
|
195
|
+
completion" above) inside VS Code when the user wants to preview/edit — never
|
|
196
|
+
fire a `vscode://` deep link in a headless, CLI, CI, or non-project context. When
|
|
197
|
+
in doubt, skip it and tell the user where the file is.
|
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
{
|
|
2
|
+
"sfdc_cms:title": "REPLACE_WITH_UNIQUE_BRAND_NAME",
|
|
3
|
+
"baseFontSize": {
|
|
4
|
+
"value": 16,
|
|
5
|
+
"unit": "px"
|
|
6
|
+
},
|
|
7
|
+
"baseFontFamily": "{!$brand.fontFamily.arial}",
|
|
8
|
+
"fontSize": {
|
|
9
|
+
"xSmall": {
|
|
10
|
+
"value": 0.625,
|
|
11
|
+
"unit": "rem"
|
|
12
|
+
},
|
|
13
|
+
"small": {
|
|
14
|
+
"value": 0.8125,
|
|
15
|
+
"unit": "rem"
|
|
16
|
+
},
|
|
17
|
+
"medium": {
|
|
18
|
+
"value": 1,
|
|
19
|
+
"unit": "rem"
|
|
20
|
+
},
|
|
21
|
+
"large": {
|
|
22
|
+
"value": 1.125,
|
|
23
|
+
"unit": "rem"
|
|
24
|
+
},
|
|
25
|
+
"xLarge": {
|
|
26
|
+
"value": 1.5,
|
|
27
|
+
"unit": "rem"
|
|
28
|
+
},
|
|
29
|
+
"xxLarge": {
|
|
30
|
+
"value": 2,
|
|
31
|
+
"unit": "rem"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"fontFamily": {
|
|
35
|
+
"arial": {
|
|
36
|
+
"name": "Arial",
|
|
37
|
+
"category": "sans-serif",
|
|
38
|
+
"fallbacks": ["Helvetica"]
|
|
39
|
+
},
|
|
40
|
+
"arialBlack": {
|
|
41
|
+
"name": "Arial Black",
|
|
42
|
+
"category": "sans-serif",
|
|
43
|
+
"fallbacks": ["Gadget"]
|
|
44
|
+
},
|
|
45
|
+
"comicSansMs": {
|
|
46
|
+
"name": "Comic Sans MS",
|
|
47
|
+
"category": "sans-serif",
|
|
48
|
+
"fallbacks": ["cursive"]
|
|
49
|
+
},
|
|
50
|
+
"calibri": {
|
|
51
|
+
"name": "Calibri",
|
|
52
|
+
"category": "sans-serif",
|
|
53
|
+
"fallbacks": ["Candara", "Segoe", "Segoe UI", "Optima", "Arial"]
|
|
54
|
+
},
|
|
55
|
+
"courierNew": {
|
|
56
|
+
"name": "Courier New",
|
|
57
|
+
"category": "monospace"
|
|
58
|
+
},
|
|
59
|
+
"georgia": {
|
|
60
|
+
"name": "Georgia",
|
|
61
|
+
"category": "serif"
|
|
62
|
+
},
|
|
63
|
+
"impact": {
|
|
64
|
+
"name": "Impact",
|
|
65
|
+
"category": "sans-serif",
|
|
66
|
+
"fallbacks": ["Charcoal"]
|
|
67
|
+
},
|
|
68
|
+
"lucidaConsole": {
|
|
69
|
+
"name": "Lucida Console",
|
|
70
|
+
"category": "monospace",
|
|
71
|
+
"fallbacks": ["Monaco"]
|
|
72
|
+
},
|
|
73
|
+
"lucidaSansUnicode": {
|
|
74
|
+
"name": "Lucida Sans Unicode",
|
|
75
|
+
"category": "sans-serif",
|
|
76
|
+
"fallbacks": ["Lucida Grande"]
|
|
77
|
+
},
|
|
78
|
+
"palatinoLinotype": {
|
|
79
|
+
"name": "Palatino Linotype",
|
|
80
|
+
"category": "serif",
|
|
81
|
+
"fallbacks": ["Book Antiqua", "Palatino"]
|
|
82
|
+
},
|
|
83
|
+
"tahoma": {
|
|
84
|
+
"name": "Tahoma",
|
|
85
|
+
"category": "sans-serif",
|
|
86
|
+
"fallbacks": ["Geneva"]
|
|
87
|
+
},
|
|
88
|
+
"timesNewRoman": {
|
|
89
|
+
"name": "Times New Roman",
|
|
90
|
+
"category": "serif",
|
|
91
|
+
"fallbacks": ["Times"]
|
|
92
|
+
},
|
|
93
|
+
"trebuchetMs": {
|
|
94
|
+
"name": "Trebuchet MS",
|
|
95
|
+
"category": "sans-serif"
|
|
96
|
+
},
|
|
97
|
+
"verdana": {
|
|
98
|
+
"name": "Verdana",
|
|
99
|
+
"category": "sans-serif",
|
|
100
|
+
"fallbacks": ["Geneva"]
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
"letterSpacing": {
|
|
104
|
+
"normal": "normal",
|
|
105
|
+
"wide": {
|
|
106
|
+
"value": 6,
|
|
107
|
+
"unit": "px"
|
|
108
|
+
},
|
|
109
|
+
"compact": {
|
|
110
|
+
"value": -1,
|
|
111
|
+
"unit": "px"
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
"fontWeight": {
|
|
115
|
+
"light": 300,
|
|
116
|
+
"normal": 400,
|
|
117
|
+
"bold": 700
|
|
118
|
+
},
|
|
119
|
+
"spacing": {
|
|
120
|
+
"none": {
|
|
121
|
+
"top": { "value": 0, "unit": "rem" },
|
|
122
|
+
"bottom": { "value": 0, "unit": "rem" },
|
|
123
|
+
"left": { "value": 0, "unit": "rem" },
|
|
124
|
+
"right": { "value": 0, "unit": "rem" }
|
|
125
|
+
},
|
|
126
|
+
"xSmall": {
|
|
127
|
+
"top": { "value": 0.5, "unit": "rem" },
|
|
128
|
+
"bottom": { "value": 0.5, "unit": "rem" },
|
|
129
|
+
"left": { "value": 0.5, "unit": "rem" },
|
|
130
|
+
"right": { "value": 0.5, "unit": "rem" }
|
|
131
|
+
},
|
|
132
|
+
"small": {
|
|
133
|
+
"top": { "value": 0.75, "unit": "rem" },
|
|
134
|
+
"bottom": { "value": 0.75, "unit": "rem" },
|
|
135
|
+
"left": { "value": 0.75, "unit": "rem" },
|
|
136
|
+
"right": { "value": 0.75, "unit": "rem" }
|
|
137
|
+
},
|
|
138
|
+
"medium": {
|
|
139
|
+
"top": { "value": 1, "unit": "rem" },
|
|
140
|
+
"bottom": { "value": 1, "unit": "rem" },
|
|
141
|
+
"left": { "value": 1, "unit": "rem" },
|
|
142
|
+
"right": { "value": 1, "unit": "rem" }
|
|
143
|
+
},
|
|
144
|
+
"large": {
|
|
145
|
+
"top": { "value": 1.5, "unit": "rem" },
|
|
146
|
+
"bottom": { "value": 1.5, "unit": "rem" },
|
|
147
|
+
"left": { "value": 1.5, "unit": "rem" },
|
|
148
|
+
"right": { "value": 1.5, "unit": "rem" }
|
|
149
|
+
},
|
|
150
|
+
"xLarge": {
|
|
151
|
+
"top": { "value": 2, "unit": "rem" },
|
|
152
|
+
"bottom": { "value": 2, "unit": "rem" },
|
|
153
|
+
"left": { "value": 2, "unit": "rem" },
|
|
154
|
+
"right": { "value": 2, "unit": "rem" }
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
"colorScheme": {
|
|
158
|
+
"root": "#ffffff",
|
|
159
|
+
"contrast": "#000000",
|
|
160
|
+
"primaryAccent": "#0176d3",
|
|
161
|
+
"primaryAccentContrast": "#ffffff",
|
|
162
|
+
"neutral": "#747474"
|
|
163
|
+
},
|
|
164
|
+
"borderWeight": {
|
|
165
|
+
"none": { "value": 0, "unit": "rem" },
|
|
166
|
+
"thin": { "value": 0.0625, "unit": "rem" },
|
|
167
|
+
"medium": { "value": 0.125, "unit": "rem" },
|
|
168
|
+
"thick": { "value": 0.1875, "unit": "rem" }
|
|
169
|
+
},
|
|
170
|
+
"borderRadius": {
|
|
171
|
+
"square": { "value": 0, "unit": "rem" },
|
|
172
|
+
"round": { "value": 0.25, "unit": "rem" }
|
|
173
|
+
},
|
|
174
|
+
"typography": {
|
|
175
|
+
"heading": {
|
|
176
|
+
"heading1": {
|
|
177
|
+
"fontFamily": "{!$brand.fontFamily.arial}",
|
|
178
|
+
"fontSize": "{!$brand.fontSize.xxLarge}",
|
|
179
|
+
"lineHeight": 1.5,
|
|
180
|
+
"fontWeight": "{!$brand.fontWeight.normal}",
|
|
181
|
+
"letterSpacing": "normal",
|
|
182
|
+
"textTransform": "none"
|
|
183
|
+
},
|
|
184
|
+
"heading2": {
|
|
185
|
+
"fontFamily": "{!$brand.fontFamily.arial}",
|
|
186
|
+
"fontSize": "{!$brand.fontSize.xLarge}",
|
|
187
|
+
"lineHeight": 1.5,
|
|
188
|
+
"fontWeight": "{!$brand.fontWeight.normal}",
|
|
189
|
+
"letterSpacing": "normal",
|
|
190
|
+
"textTransform": "none"
|
|
191
|
+
},
|
|
192
|
+
"heading3": {
|
|
193
|
+
"fontFamily": "{!$brand.fontFamily.arial}",
|
|
194
|
+
"fontSize": "{!$brand.fontSize.large}",
|
|
195
|
+
"lineHeight": 1.5,
|
|
196
|
+
"fontWeight": "{!$brand.fontWeight.normal}",
|
|
197
|
+
"letterSpacing": "normal",
|
|
198
|
+
"textTransform": "none"
|
|
199
|
+
},
|
|
200
|
+
"heading4": {
|
|
201
|
+
"fontFamily": "{!$brand.fontFamily.arial}",
|
|
202
|
+
"fontSize": "{!$brand.fontSize.medium}",
|
|
203
|
+
"lineHeight": 1.5,
|
|
204
|
+
"fontWeight": "{!$brand.fontWeight.normal}",
|
|
205
|
+
"letterSpacing": "normal",
|
|
206
|
+
"textTransform": "none"
|
|
207
|
+
},
|
|
208
|
+
"heading5": {
|
|
209
|
+
"fontFamily": "{!$brand.fontFamily.arial}",
|
|
210
|
+
"fontSize": "{!$brand.fontSize.small}",
|
|
211
|
+
"lineHeight": 1.5,
|
|
212
|
+
"fontWeight": "{!$brand.fontWeight.normal}",
|
|
213
|
+
"letterSpacing": "normal",
|
|
214
|
+
"textTransform": "none"
|
|
215
|
+
},
|
|
216
|
+
"heading6": {
|
|
217
|
+
"fontFamily": "{!$brand.fontFamily.arial}",
|
|
218
|
+
"fontSize": "{!$brand.fontSize.xSmall}",
|
|
219
|
+
"lineHeight": 1.5,
|
|
220
|
+
"fontWeight": "{!$brand.fontWeight.normal}",
|
|
221
|
+
"letterSpacing": "normal",
|
|
222
|
+
"textTransform": "none"
|
|
223
|
+
}
|
|
224
|
+
},
|
|
225
|
+
"paragraph": {
|
|
226
|
+
"paragraph1": {
|
|
227
|
+
"fontFamily": "{!$brand.fontFamily.arial}",
|
|
228
|
+
"fontSize": "{!$brand.fontSize.medium}",
|
|
229
|
+
"lineHeight": 1.5,
|
|
230
|
+
"fontWeight": "{!$brand.fontWeight.normal}",
|
|
231
|
+
"letterSpacing": "normal",
|
|
232
|
+
"textTransform": "none"
|
|
233
|
+
},
|
|
234
|
+
"paragraph2": {
|
|
235
|
+
"fontFamily": "{!$brand.fontFamily.arial}",
|
|
236
|
+
"fontSize": "{!$brand.fontSize.small}",
|
|
237
|
+
"lineHeight": 1.5,
|
|
238
|
+
"fontWeight": "{!$brand.fontWeight.normal}",
|
|
239
|
+
"letterSpacing": "normal",
|
|
240
|
+
"textTransform": "none"
|
|
241
|
+
}
|
|
242
|
+
},
|
|
243
|
+
"button": {
|
|
244
|
+
"button1": {
|
|
245
|
+
"fontFamily": "{!$brand.fontFamily.arial}",
|
|
246
|
+
"fontSize": "{!$brand.fontSize.medium}",
|
|
247
|
+
"lineHeight": 1.5,
|
|
248
|
+
"fontWeight": "{!$brand.fontWeight.normal}",
|
|
249
|
+
"letterSpacing": "normal",
|
|
250
|
+
"textTransform": "none"
|
|
251
|
+
}
|
|
252
|
+
},
|
|
253
|
+
"input": {
|
|
254
|
+
"input1": {
|
|
255
|
+
"fontFamily": "{!$brand.fontFamily.arial}",
|
|
256
|
+
"fontSize": "{!$brand.fontSize.medium}",
|
|
257
|
+
"lineHeight": 1.5,
|
|
258
|
+
"fontWeight": "{!$brand.fontWeight.normal}",
|
|
259
|
+
"letterSpacing": "normal",
|
|
260
|
+
"textTransform": "none"
|
|
261
|
+
}
|
|
262
|
+
},
|
|
263
|
+
"label": {
|
|
264
|
+
"label1": {
|
|
265
|
+
"fontFamily": "{!$brand.fontFamily.arial}",
|
|
266
|
+
"fontSize": "{!$brand.fontSize.small}",
|
|
267
|
+
"lineHeight": 1.5,
|
|
268
|
+
"fontWeight": "{!$brand.fontWeight.normal}",
|
|
269
|
+
"letterSpacing": "normal",
|
|
270
|
+
"textTransform": "none"
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
},
|
|
274
|
+
"buttonStyleGroup": {
|
|
275
|
+
"primary": {
|
|
276
|
+
"lightning:buttonColorGroup": {
|
|
277
|
+
"backgroundColor": "{!$brand.colorScheme.primaryAccent}",
|
|
278
|
+
"textColor": "{!$brand.colorScheme.primaryAccentContrast}",
|
|
279
|
+
"borderColor": "{!$brand.colorScheme.primaryAccent}",
|
|
280
|
+
"backgroundHoverColor": "{!$brand.colorScheme.primaryAccentDerived}",
|
|
281
|
+
"textHoverColor": "{!$brand.colorScheme.primaryAccentContrastDerived}",
|
|
282
|
+
"borderHoverColor": "{!$brand.colorScheme.primaryAccentDerived}"
|
|
283
|
+
},
|
|
284
|
+
"lightning:borderRadius": "{!$brand.borderRadius.round}",
|
|
285
|
+
"lightning:borderWidth": "{!$brand.borderWeight.thin}",
|
|
286
|
+
"lightning:typography": "{!$brand.typography.button.button1}",
|
|
287
|
+
"lightning:padding": {
|
|
288
|
+
"top": { "value": 0.5, "unit": "rem" },
|
|
289
|
+
"bottom": { "value": 0.5, "unit": "rem" },
|
|
290
|
+
"left": { "value": 1, "unit": "rem" },
|
|
291
|
+
"right": { "value": 1, "unit": "rem" }
|
|
292
|
+
}
|
|
293
|
+
},
|
|
294
|
+
"secondary": {
|
|
295
|
+
"lightning:buttonColorGroup": {
|
|
296
|
+
"backgroundColor": "{!$brand.colorScheme.primaryAccentContrast}",
|
|
297
|
+
"textColor": "{!$brand.colorScheme.primaryAccent}",
|
|
298
|
+
"borderColor": "{!$brand.colorScheme.primaryAccent}",
|
|
299
|
+
"backgroundHoverColor": "{!$brand.colorScheme.primaryAccentContrastDerived}",
|
|
300
|
+
"textHoverColor": "{!$brand.colorScheme.primaryAccentDerived}",
|
|
301
|
+
"borderHoverColor": "{!$brand.colorScheme.primaryAccentDerived}"
|
|
302
|
+
},
|
|
303
|
+
"lightning:borderRadius": "{!$brand.borderRadius.round}",
|
|
304
|
+
"lightning:borderWidth": "{!$brand.borderWeight.thin}",
|
|
305
|
+
"lightning:typography": "{!$brand.typography.button.button1}",
|
|
306
|
+
"lightning:padding": {
|
|
307
|
+
"top": { "value": 0.5, "unit": "rem" },
|
|
308
|
+
"bottom": { "value": 0.5, "unit": "rem" },
|
|
309
|
+
"left": { "value": 1, "unit": "rem" },
|
|
310
|
+
"right": { "value": 1, "unit": "rem" }
|
|
311
|
+
}
|
|
312
|
+
},
|
|
313
|
+
"tertiary": {
|
|
314
|
+
"lightning:buttonColorGroup": {
|
|
315
|
+
"textColor": "{!$brand.colorScheme.primaryAccent}",
|
|
316
|
+
"textHoverColor": "{!$brand.colorScheme.primaryAccentDerived}"
|
|
317
|
+
},
|
|
318
|
+
"lightning:borderRadius": "{!$brand.borderRadius.round}",
|
|
319
|
+
"lightning:borderWidth": "{!$brand.borderWeight.none}",
|
|
320
|
+
"lightning:typography": "{!$brand.typography.button.button1}",
|
|
321
|
+
"lightning:padding": {
|
|
322
|
+
"top": { "value": 0.5, "unit": "rem" },
|
|
323
|
+
"bottom": { "value": 0.5, "unit": "rem" },
|
|
324
|
+
"left": { "value": 1, "unit": "rem" },
|
|
325
|
+
"right": { "value": 1, "unit": "rem" }
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Brand anatomy — what to edit and what to leave alone
|
|
2
|
+
|
|
3
|
+
A brand is one JSON object (the `contentBody` of a CMS brand, saved **unwrapped**
|
|
4
|
+
— no envelope). Its shape is fixed: the Brand Toolkit's editors, the CSS
|
|
5
|
+
compiler, and the preview all expect every top-level section (`colorScheme`,
|
|
6
|
+
`fontFamily`, `fontSize`, `typography`, `buttonStyleGroup`, …) to be present with
|
|
7
|
+
the same keys as the template. **Start from `assets/brand-template.json` and
|
|
8
|
+
change only leaf values** — never drop a section, rename a key, or invent a new
|
|
9
|
+
one. A missing or misspelled key doesn't error; it silently falls back, so the
|
|
10
|
+
preview looks wrong with no explanation.
|
|
11
|
+
|
|
12
|
+
## The two kinds of values
|
|
13
|
+
|
|
14
|
+
1. **Literals** — the actual design values. These are the ONLY things you should
|
|
15
|
+
change to create a new brand:
|
|
16
|
+
- Colors: `colorScheme.*` (hex strings)
|
|
17
|
+
- Base font: `baseFontFamily` (a reference — see below), `baseFontSize.value`
|
|
18
|
+
- Corner rounding: `borderRadius.round.value`
|
|
19
|
+
- Border thickness: `borderWeight.thin.value`, etc.
|
|
20
|
+
- Per-role font sizes, weights, transforms inside `typography.*` if you want
|
|
21
|
+
finer control (usually leave these as references to the shared scale).
|
|
22
|
+
|
|
23
|
+
2. **References** — strings like `"{!$brand.fontFamily.arial}"` or
|
|
24
|
+
`"{!$brand.colorScheme.primaryAccent}"`. These are POINTERS into other parts
|
|
25
|
+
of the same brand. The toolkit resolves them at load time. This is why editing
|
|
26
|
+
one color (e.g. `colorScheme.primaryAccent`) automatically re-themes every
|
|
27
|
+
button and accent that points at it. **Keep the references intact** — don't
|
|
28
|
+
replace a reference with a hard-coded literal, or you break the live-edit link
|
|
29
|
+
that makes the brand cohesive. To change what a button looks like, change the
|
|
30
|
+
`colorScheme` color it points to, not the button.
|
|
31
|
+
|
|
32
|
+
## Colors — `colorScheme` (edit these)
|
|
33
|
+
|
|
34
|
+
| Key | Meaning | Typical |
|
|
35
|
+
| ---------------------- | --------------------------------------------------- | ------- |
|
|
36
|
+
| `root` | Page/background color | `#ffffff` (light) / a dark color (dark) |
|
|
37
|
+
| `contrast` | Main text color on `root` | `#000000` (light) / `#ffffff` (dark) |
|
|
38
|
+
| `primaryAccent` | Brand color — primary buttons, links, emphasis | the brand's signature color |
|
|
39
|
+
| `primaryAccentContrast`| Text/icon color that sits ON `primaryAccent` | usually `#ffffff` or `#000000`, whichever reads on the accent |
|
|
40
|
+
| `neutral` | Muted borders, secondary text, dividers | a mid gray |
|
|
41
|
+
|
|
42
|
+
**Do NOT hand-author `primaryAccentDerived` or `primaryAccentContrastDerived`.**
|
|
43
|
+
The toolkit computes them from `primaryAccent`/`primaryAccentContrast` on load (a
|
|
44
|
+
darker hover shade + a WCAG-contrast-checked hover text color) and rewrites them.
|
|
45
|
+
The template intentionally OMITS them; leave them out. The `{!...Derived}`
|
|
46
|
+
references inside `buttonStyleGroup` still resolve correctly because the toolkit
|
|
47
|
+
fills the derived values in before resolving.
|
|
48
|
+
|
|
49
|
+
Contrast matters: `contrast` must be legible on `root`, and `primaryAccentContrast`
|
|
50
|
+
must be legible on `primaryAccent`. When in doubt, pick black or white for the
|
|
51
|
+
contrast colors — whichever has the higher contrast ratio against its background.
|
|
52
|
+
|
|
53
|
+
Use 6-digit `#rrggbb` hex. (The toolkit normalizes to 8-digit `#rrggbbaa`
|
|
54
|
+
internally; 6-digit in and out is fine.)
|
|
55
|
+
|
|
56
|
+
## Fonts — `fontFamily` + `baseFontFamily` (choose from the catalog)
|
|
57
|
+
|
|
58
|
+
`fontFamily` is a **catalog** of available fonts; `baseFontFamily` and every
|
|
59
|
+
`typography.*.fontFamily` is a **reference** into that catalog
|
|
60
|
+
(`"{!$brand.fontFamily.<key>}"`).
|
|
61
|
+
|
|
62
|
+
To change the brand's font, point `baseFontFamily` (and, if you want headings to
|
|
63
|
+
match, the `typography.heading.*.fontFamily` entries) at a different catalog key.
|
|
64
|
+
Prefer changing `baseFontFamily` and leaving the rest referencing it through the
|
|
65
|
+
scale.
|
|
66
|
+
|
|
67
|
+
**Preview fidelity — important.** The preview only renders web-safe system fonts
|
|
68
|
+
plus "Salesforce Sans". Any other font name falls back to its generic category
|
|
69
|
+
(sans-serif/serif/monospace), so the preview won't show it. Stick to these
|
|
70
|
+
catalog keys, which all render:
|
|
71
|
+
|
|
72
|
+
- Sans-serif: `arial`, `verdana`, `tahoma`, `trebuchetMs`, `calibri`,
|
|
73
|
+
`lucidaSansUnicode`, `arialBlack`, `impact`
|
|
74
|
+
- Serif: `georgia`, `timesNewRoman`, `palatinoLinotype`
|
|
75
|
+
- Monospace: `courierNew`, `lucidaConsole`
|
|
76
|
+
|
|
77
|
+
If a brand truly needs a custom/brand font, keep it as an aspiration in the brand
|
|
78
|
+
name/description, but pick the closest system font from the list above for the
|
|
79
|
+
`fontFamily` value so the preview is honest. Don't add a new `fontFamily` entry
|
|
80
|
+
with a name that has no web source — it will silently fall back.
|
|
81
|
+
|
|
82
|
+
## Sizes, weights, spacing, borders
|
|
83
|
+
|
|
84
|
+
These are shared scales referenced by name throughout `typography` and
|
|
85
|
+
`buttonStyleGroup`. Sensible edits:
|
|
86
|
+
|
|
87
|
+
- `baseFontSize.value` — the root font size in px (default 16). Bump to 17–18 for
|
|
88
|
+
a more spacious feel.
|
|
89
|
+
- `borderRadius.round.value` — corner rounding in rem. `0` = sharp/square,
|
|
90
|
+
`0.25` = default, `0.5`+ = pill-ish.
|
|
91
|
+
- `borderWeight.thin.value` — default border thickness in rem.
|
|
92
|
+
- `fontWeight.normal` — 400 by default; some brands prefer 300 (lighter) or a
|
|
93
|
+
heavier body.
|
|
94
|
+
|
|
95
|
+
Leave the `spacing`, `letterSpacing`, and `fontSize` scale keys in place — the
|
|
96
|
+
editors and preview reference them by name. Change the `.value` inside a scale
|
|
97
|
+
entry if you must, but don't remove or rename the entries.
|
|
98
|
+
|
|
99
|
+
## `typography` and `buttonStyleGroup` — mostly references, edit sparingly
|
|
100
|
+
|
|
101
|
+
`typography` maps each text role (heading1–6, paragraph1–2, button, input, label)
|
|
102
|
+
to a font family, size, weight, line-height, letter-spacing, and transform — all
|
|
103
|
+
as references into the scales above. `buttonStyleGroup` (primary/secondary/
|
|
104
|
+
tertiary) maps button colors to `colorScheme` references and picks border radius/
|
|
105
|
+
width/typography.
|
|
106
|
+
|
|
107
|
+
For most brands you should NOT touch these — they inherit correctly from the
|
|
108
|
+
colors and fonts you set above. Edit them only for a deliberate deviation (e.g.
|
|
109
|
+
uppercase buttons via `textTransform: "uppercase"` on `typography.button.button1`,
|
|
110
|
+
or a square primary button via a different `lightning:borderRadius` reference).
|
|
111
|
+
When you do, change the reference target or the literal in place — keep the key
|
|
112
|
+
structure identical to the template.
|
|
113
|
+
|
|
114
|
+
## The one field that defines identity: `sfdc_cms:title`
|
|
115
|
+
|
|
116
|
+
`sfdc_cms:title` is the brand's display name AND its identity in the toolkit's
|
|
117
|
+
local list. It **must be unique** among the project's local brands — two brands
|
|
118
|
+
with the same title collapse into one entry in the gallery. Give every generated
|
|
119
|
+
brand a distinct, human-readable title (e.g. `"Sunset Coral"`, `"Acme Dark"`).
|
|
120
|
+
See `references/disk-contract.md` for how the title maps to the on-disk filename.
|