@salesforce/afv-skills 1.14.0 → 1.16.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 +1 -1
- package/skills/activating-datacloud/SKILL.md +0 -1
- package/skills/analyzing-omnistudio-dependencies/SKILL.md +0 -1
- package/skills/applying-slds/SKILL.md +322 -0
- package/skills/applying-slds/checklists.md +83 -0
- package/skills/applying-slds/examples.md +283 -0
- package/skills/applying-slds/guidance/README.md +83 -0
- package/skills/applying-slds/guidance/blueprints-index.md +213 -0
- package/skills/applying-slds/guidance/icons-guidance.md +186 -0
- package/skills/applying-slds/guidance/overviews/borders.md +236 -0
- package/skills/applying-slds/guidance/overviews/color.md +266 -0
- package/skills/applying-slds/guidance/overviews/display-density.md +366 -0
- package/skills/applying-slds/guidance/overviews/icons.md +240 -0
- package/skills/applying-slds/guidance/overviews/illustrations.md +235 -0
- package/skills/applying-slds/guidance/overviews/shadows.md +176 -0
- package/skills/applying-slds/guidance/overviews/spacing.md +216 -0
- package/skills/applying-slds/guidance/overviews/typography.md +323 -0
- package/skills/applying-slds/guidance/overviews/utilities.md +542 -0
- package/skills/applying-slds/guidance/slds-development-guide.md +288 -0
- package/skills/applying-slds/guidance/styling-hooks/borders.md +202 -0
- package/skills/applying-slds/guidance/styling-hooks/color/expressive-palette-hooks.md +153 -0
- package/skills/applying-slds/guidance/styling-hooks/color/index.md +171 -0
- package/skills/applying-slds/guidance/styling-hooks/color/semantic/accent-hooks.md +204 -0
- package/skills/applying-slds/guidance/styling-hooks/color/semantic/feedback-hooks.md +768 -0
- package/skills/applying-slds/guidance/styling-hooks/color/semantic/surface-hooks.md +337 -0
- package/skills/applying-slds/guidance/styling-hooks/color/system-hooks.md +132 -0
- package/skills/applying-slds/guidance/styling-hooks/index.md +327 -0
- package/skills/applying-slds/guidance/styling-hooks/shadows.md +238 -0
- package/skills/applying-slds/guidance/styling-hooks/spacing.md +254 -0
- package/skills/applying-slds/guidance/styling-hooks/typography.md +448 -0
- package/skills/applying-slds/guidance/utilities/alignment.md +119 -0
- package/skills/applying-slds/guidance/utilities/borders.md +131 -0
- package/skills/applying-slds/guidance/utilities/box.md +125 -0
- package/skills/applying-slds/guidance/utilities/color.md +165 -0
- package/skills/applying-slds/guidance/utilities/dark-mode.md +111 -0
- package/skills/applying-slds/guidance/utilities/description-list.md +168 -0
- package/skills/applying-slds/guidance/utilities/floats.md +117 -0
- package/skills/applying-slds/guidance/utilities/grid.md +264 -0
- package/skills/applying-slds/guidance/utilities/horizontal-list.md +110 -0
- package/skills/applying-slds/guidance/utilities/hyphenation.md +84 -0
- package/skills/applying-slds/guidance/utilities/index.md +205 -0
- package/skills/applying-slds/guidance/utilities/interactions.md +89 -0
- package/skills/applying-slds/guidance/utilities/layout.md +109 -0
- package/skills/applying-slds/guidance/utilities/line-clamp.md +131 -0
- package/skills/applying-slds/guidance/utilities/margin.md +155 -0
- package/skills/applying-slds/guidance/utilities/media-object.md +161 -0
- package/skills/applying-slds/guidance/utilities/name-value-list.md +152 -0
- package/skills/applying-slds/guidance/utilities/padding.md +155 -0
- package/skills/applying-slds/guidance/utilities/position.md +177 -0
- package/skills/applying-slds/guidance/utilities/print.md +114 -0
- package/skills/applying-slds/guidance/utilities/scrollable.md +126 -0
- package/skills/applying-slds/guidance/utilities/sizing.md +190 -0
- package/skills/applying-slds/guidance/utilities/themes.md +121 -0
- package/skills/applying-slds/guidance/utilities/truncate.md +127 -0
- package/skills/applying-slds/guidance/utilities/typography.md +166 -0
- package/skills/applying-slds/guidance/utilities/vertical-list.md +166 -0
- package/skills/applying-slds/guidance/utilities/visibility.md +228 -0
- package/skills/applying-slds/metadata/README.md +84 -0
- package/skills/applying-slds/metadata/blueprints/components/accordion.yaml +304 -0
- package/skills/applying-slds/metadata/blueprints/components/activity-timeline.yaml +92 -0
- package/skills/applying-slds/metadata/blueprints/components/alert.yaml +103 -0
- package/skills/applying-slds/metadata/blueprints/components/app-launcher.yaml +94 -0
- package/skills/applying-slds/metadata/blueprints/components/avatar-group.yaml +81 -0
- package/skills/applying-slds/metadata/blueprints/components/avatar.yaml +97 -0
- package/skills/applying-slds/metadata/blueprints/components/badges.yaml +102 -0
- package/skills/applying-slds/metadata/blueprints/components/brand-band.yaml +198 -0
- package/skills/applying-slds/metadata/blueprints/components/breadcrumbs.yaml +95 -0
- package/skills/applying-slds/metadata/blueprints/components/builder-header.yaml +192 -0
- package/skills/applying-slds/metadata/blueprints/components/button-groups.yaml +82 -0
- package/skills/applying-slds/metadata/blueprints/components/button-icons.yaml +295 -0
- package/skills/applying-slds/metadata/blueprints/components/buttons.yaml +230 -0
- package/skills/applying-slds/metadata/blueprints/components/cards.yaml +124 -0
- package/skills/applying-slds/metadata/blueprints/components/carousel.yaml +140 -0
- package/skills/applying-slds/metadata/blueprints/components/chat.yaml +179 -0
- package/skills/applying-slds/metadata/blueprints/components/checkbox-button-group.yaml +192 -0
- package/skills/applying-slds/metadata/blueprints/components/checkbox-button.yaml +204 -0
- package/skills/applying-slds/metadata/blueprints/components/checkbox-toggle.yaml +177 -0
- package/skills/applying-slds/metadata/blueprints/components/checkbox.yaml +108 -0
- package/skills/applying-slds/metadata/blueprints/components/color-picker.yaml +172 -0
- package/skills/applying-slds/metadata/blueprints/components/combobox.yaml +136 -0
- package/skills/applying-slds/metadata/blueprints/components/counter.yaml +147 -0
- package/skills/applying-slds/metadata/blueprints/components/data-tables.yaml +157 -0
- package/skills/applying-slds/metadata/blueprints/components/datepickers.yaml +130 -0
- package/skills/applying-slds/metadata/blueprints/components/datetime-picker.yaml +155 -0
- package/skills/applying-slds/metadata/blueprints/components/docked-composer.yaml +201 -0
- package/skills/applying-slds/metadata/blueprints/components/docked-form-footer.yaml +161 -0
- package/skills/applying-slds/metadata/blueprints/components/docked-utility-bar.yaml +175 -0
- package/skills/applying-slds/metadata/blueprints/components/drop-zone.yaml +115 -0
- package/skills/applying-slds/metadata/blueprints/components/dueling-picklist.yaml +196 -0
- package/skills/applying-slds/metadata/blueprints/components/dynamic-icons.yaml +128 -0
- package/skills/applying-slds/metadata/blueprints/components/dynamic-menu.yaml +141 -0
- package/skills/applying-slds/metadata/blueprints/components/expandable-section.yaml +115 -0
- package/skills/applying-slds/metadata/blueprints/components/expression.yaml +143 -0
- package/skills/applying-slds/metadata/blueprints/components/feeds.yaml +125 -0
- package/skills/applying-slds/metadata/blueprints/components/file-selector.yaml +154 -0
- package/skills/applying-slds/metadata/blueprints/components/files.yaml +119 -0
- package/skills/applying-slds/metadata/blueprints/components/form-element.yaml +145 -0
- package/skills/applying-slds/metadata/blueprints/components/global-header.yaml +120 -0
- package/skills/applying-slds/metadata/blueprints/components/global-navigation.yaml +100 -0
- package/skills/applying-slds/metadata/blueprints/components/icons.yaml +138 -0
- package/skills/applying-slds/metadata/blueprints/components/illustration.yaml +205 -0
- package/skills/applying-slds/metadata/blueprints/components/input.yaml +151 -0
- package/skills/applying-slds/metadata/blueprints/components/list-builder.yaml +127 -0
- package/skills/applying-slds/metadata/blueprints/components/lookups.yaml +132 -0
- package/skills/applying-slds/metadata/blueprints/components/map.yaml +118 -0
- package/skills/applying-slds/metadata/blueprints/components/menus.yaml +134 -0
- package/skills/applying-slds/metadata/blueprints/components/modals.yaml +152 -0
- package/skills/applying-slds/metadata/blueprints/components/notifications.yaml +88 -0
- package/skills/applying-slds/metadata/blueprints/components/page-headers.yaml +135 -0
- package/skills/applying-slds/metadata/blueprints/components/panels.yaml +149 -0
- package/skills/applying-slds/metadata/blueprints/components/path.yaml +154 -0
- package/skills/applying-slds/metadata/blueprints/components/picklist.yaml +125 -0
- package/skills/applying-slds/metadata/blueprints/components/pills.yaml +154 -0
- package/skills/applying-slds/metadata/blueprints/components/popovers.yaml +120 -0
- package/skills/applying-slds/metadata/blueprints/components/progress-bar.yaml +110 -0
- package/skills/applying-slds/metadata/blueprints/components/progress-indicator.yaml +133 -0
- package/skills/applying-slds/metadata/blueprints/components/progress-ring.yaml +102 -0
- package/skills/applying-slds/metadata/blueprints/components/prompt.yaml +126 -0
- package/skills/applying-slds/metadata/blueprints/components/publishers.yaml +178 -0
- package/skills/applying-slds/metadata/blueprints/components/radio-button-group.yaml +172 -0
- package/skills/applying-slds/metadata/blueprints/components/radio-group.yaml +112 -0
- package/skills/applying-slds/metadata/blueprints/components/rich-text-editor.yaml +135 -0
- package/skills/applying-slds/metadata/blueprints/components/scoped-notifications.yaml +188 -0
- package/skills/applying-slds/metadata/blueprints/components/scoped-tabs.yaml +97 -0
- package/skills/applying-slds/metadata/blueprints/components/select.yaml +127 -0
- package/skills/applying-slds/metadata/blueprints/components/setup-assistant.yaml +152 -0
- package/skills/applying-slds/metadata/blueprints/components/slider.yaml +111 -0
- package/skills/applying-slds/metadata/blueprints/components/spinners.yaml +135 -0
- package/skills/applying-slds/metadata/blueprints/components/split-view.yaml +112 -0
- package/skills/applying-slds/metadata/blueprints/components/summary-detail.yaml +103 -0
- package/skills/applying-slds/metadata/blueprints/components/tabs.yaml +138 -0
- package/skills/applying-slds/metadata/blueprints/components/textarea.yaml +116 -0
- package/skills/applying-slds/metadata/blueprints/components/tiles.yaml +108 -0
- package/skills/applying-slds/metadata/blueprints/components/timepicker.yaml +111 -0
- package/skills/applying-slds/metadata/blueprints/components/toast.yaml +154 -0
- package/skills/applying-slds/metadata/blueprints/components/tooltips.yaml +107 -0
- package/skills/applying-slds/metadata/blueprints/components/tree-grid.yaml +116 -0
- package/skills/applying-slds/metadata/blueprints/components/trees.yaml +116 -0
- package/skills/applying-slds/metadata/blueprints/components/trial-bar.yaml +112 -0
- package/skills/applying-slds/metadata/blueprints/components/vertical-navigation.yaml +130 -0
- package/skills/applying-slds/metadata/blueprints/components/vertical-tabs.yaml +140 -0
- package/skills/applying-slds/metadata/blueprints/components/visual-picker.yaml +150 -0
- package/skills/applying-slds/metadata/blueprints/components/welcome-mat.yaml +136 -0
- package/skills/applying-slds/metadata/hooks-index.json +6272 -0
- package/skills/applying-slds/metadata/icon-metadata.json +38466 -0
- package/skills/applying-slds/metadata/utilities-index.json +21912 -0
- package/skills/applying-slds/references/component-selection.md +112 -0
- package/skills/applying-slds/references/icons-decision-guide.md +124 -0
- package/skills/applying-slds/references/styling-decision-guide.md +228 -0
- package/skills/applying-slds/references/utilities-quick-ref.md +125 -0
- package/skills/applying-slds/scripts/search-blueprints.cjs +117 -0
- package/skills/applying-slds/scripts/search-hooks.cjs +139 -0
- package/skills/applying-slds/scripts/search-icons.cjs +174 -0
- package/skills/applying-slds/scripts/search-utilities.cjs +161 -0
- package/skills/building-mobile-apps/SKILL.md +0 -1
- package/skills/building-omnistudio-callable-apex/SKILL.md +0 -1
- package/skills/building-omnistudio-datamapper/SKILL.md +0 -1
- package/skills/building-omnistudio-flexcard/SKILL.md +0 -1
- package/skills/building-omnistudio-integration-procedure/SKILL.md +0 -1
- package/skills/building-omnistudio-omniscript/SKILL.md +0 -1
- package/skills/building-sf-integrations/SKILL.md +0 -1
- package/skills/configuring-connected-apps/SKILL.md +0 -1
- package/skills/connecting-datacloud/SKILL.md +0 -1
- package/skills/creating-b2b-commerce-store/SKILL.md +0 -1
- package/skills/debugging-apex-logs/SKILL.md +0 -1
- package/skills/deploying-metadata/SKILL.md +0 -1
- package/skills/deploying-omnistudio-datapacks/SKILL.md +0 -1
- package/skills/developing-agentforce/SKILL.md +0 -1
- package/skills/fetching-salesforce-docs/SKILL.md +0 -1
- package/skills/generating-custom-lightning-type/SKILL.md +17 -39
- package/skills/generating-custom-lightning-type/assets/primitive-types-and-constraints.md +41 -0
- package/skills/generating-custom-lightning-type/references/widget-rendition.md +124 -0
- package/skills/generating-lwc-components/SKILL.md +0 -1
- package/skills/generating-mermaid-diagrams/SKILL.md +0 -1
- package/skills/generating-visual-diagrams/SKILL.md +0 -1
- package/skills/handling-sf-data/SKILL.md +0 -1
- package/skills/harmonizing-datacloud/SKILL.md +0 -1
- package/skills/integrating-b2b-commerce-open-code-components/SKILL.md +0 -1
- package/skills/investigating-agentforce-architecture/README.md +156 -0
- package/skills/investigating-agentforce-architecture/SKILL.md +230 -0
- package/skills/investigating-agentforce-architecture/assets/cli/describe_sobject.yaml +16 -0
- package/skills/investigating-agentforce-architecture/assets/cli/describe_tooling_sobject.yaml +17 -0
- package/skills/investigating-agentforce-architecture/assets/cli/list_metadata_genaiprompttemplate.yaml +17 -0
- package/skills/investigating-agentforce-architecture/assets/cli/org_display.yaml +15 -0
- package/skills/investigating-agentforce-architecture/assets/cli/retrieve_genai_plugin.yaml +18 -0
- package/skills/investigating-agentforce-architecture/assets/cli/show_access_token.yaml +27 -0
- package/skills/investigating-agentforce-architecture/assets/mermaid/action_tree.mmd +20 -0
- package/skills/investigating-agentforce-architecture/assets/mermaid/data_flow.mmd +19 -0
- package/skills/investigating-agentforce-architecture/assets/mermaid/dependency_graph.mmd +19 -0
- package/skills/investigating-agentforce-architecture/assets/mermaid/invocation_sequence.mmd +20 -0
- package/skills/investigating-agentforce-architecture/assets/mermaid/planner_state.mmd +18 -0
- package/skills/investigating-agentforce-architecture/assets/soql/apex_class_bodies_by_ids.soql +3 -0
- package/skills/investigating-agentforce-architecture/assets/soql/apex_class_bodies_by_names.soql +3 -0
- package/skills/investigating-agentforce-architecture/assets/soql/bot_definition_details.soql +3 -0
- package/skills/investigating-agentforce-architecture/assets/soql/bot_version_lookup.soql +4 -0
- package/skills/investigating-agentforce-architecture/assets/soql/flow_definition_by_ids.soql +3 -0
- package/skills/investigating-agentforce-architecture/assets/soql/flow_definition_ids_by_names.soql +3 -0
- package/skills/investigating-agentforce-architecture/assets/soql/flow_definition_view_by_durable_ids.soql +4 -0
- package/skills/investigating-agentforce-architecture/assets/soql/flow_metadata_by_id.soql +3 -0
- package/skills/investigating-agentforce-architecture/assets/soql/functions_by_plugins.soql +5 -0
- package/skills/investigating-agentforce-architecture/assets/soql/planner_attrs_by_parent_ids.soql +3 -0
- package/skills/investigating-agentforce-architecture/assets/soql/planner_bundle_functions.soql +3 -0
- package/skills/investigating-agentforce-architecture/assets/soql/planner_definition_by_agent_chain.soql +3 -0
- package/skills/investigating-agentforce-architecture/assets/soql/plugin_functions_by_plugin_ids.soql +3 -0
- package/skills/investigating-agentforce-architecture/assets/soql/plugin_instructions_by_plugin_ids.soql +3 -0
- package/skills/investigating-agentforce-architecture/assets/soql/plugins_by_planner.soql +4 -0
- package/skills/investigating-agentforce-architecture/references/architecture_sections.md +243 -0
- package/skills/investigating-agentforce-architecture/references/contract.json +244 -0
- package/skills/investigating-agentforce-architecture/references/soql_fields.md +512 -0
- package/skills/investigating-agentforce-architecture/scripts/_shared/__init__.py +1 -0
- package/skills/investigating-agentforce-architecture/scripts/_shared/fs_guard.py +329 -0
- package/skills/investigating-agentforce-architecture/scripts/_shared/paths.py +110 -0
- package/skills/investigating-agentforce-architecture/scripts/_shared/runtime.py +59 -0
- package/skills/investigating-agentforce-architecture/scripts/_shared/sql.py +10 -0
- package/skills/investigating-agentforce-architecture/scripts/cache_check.py +234 -0
- package/skills/investigating-agentforce-architecture/scripts/config.py +131 -0
- package/skills/investigating-agentforce-architecture/scripts/fetch_soql.py +689 -0
- package/skills/investigating-agentforce-architecture/scripts/finalize.py +295 -0
- package/skills/investigating-agentforce-architecture/scripts/main.py +2835 -0
- package/skills/investigating-agentforce-architecture/scripts/metadata_listing.py +265 -0
- package/skills/investigating-agentforce-architecture/scripts/parallel_retrieve.py +69 -0
- package/skills/investigating-agentforce-architecture/scripts/parse_bundle.py +215 -0
- package/skills/investigating-agentforce-architecture/scripts/parse_wave.py +845 -0
- package/skills/investigating-agentforce-architecture/scripts/probe_channels.py +302 -0
- package/skills/investigating-agentforce-architecture/scripts/render_architecture.py +1043 -0
- package/skills/investigating-agentforce-architecture/scripts/resolve_bot.py +255 -0
- package/skills/investigating-agentforce-architecture/scripts/resolve_invocation_target.py +130 -0
- package/skills/investigating-agentforce-architecture/scripts/rest_client.py +763 -0
- package/skills/investigating-agentforce-architecture/scripts/retrieve_planner.py +13 -0
- package/skills/investigating-agentforce-architecture/scripts/sf_cli.py +242 -0
- package/skills/investigating-agentforce-architecture/scripts/soql_loader.py +253 -0
- package/skills/investigating-agentforce-architecture/scripts/summarize_tree.py +143 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/__init__.py +0 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/_bootstrap.py +23 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/fixtures/__init__.py +0 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/fixtures/genai_payloads.py +400 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_cache_check.py +307 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_cache_check_main.py +283 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_config.py +115 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_end_to_end_fixture.py +651 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_finalize.py +278 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_flow_children_inflation.py +582 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_fs_guard.py +113 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_iterative_wave_b.py +478 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_main_pipeline.py +3359 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_parallel_retrieve.py +131 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_parse_bundle.py +400 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_parse_wave.py +644 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_parse_wave_classifiers.py +224 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_parse_wave_helpers.py +380 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_parse_wave_main.py +397 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_per_branch_visited.py +244 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_probe_channels.py +359 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_probe_cli_recipes.py +185 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_render_architecture.py +810 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_resolve_bot.py +203 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_resolve_creds.py +157 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_resolve_invocation_target.py +145 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_rest_client.py +1253 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_runtime_override.py +100 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_sf_cli.py +261 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_signature_stamping.py +466 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_soql_loader.py +501 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_summarize_tree.py +241 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_write_emit_ctx.py +480 -0
- package/skills/investigating-agentforce-architecture/tools/emit_env.py +157 -0
- package/skills/investigating-agentforce-architecture/tools/emit_result.py +262 -0
- package/skills/investigating-agentforce-architecture/tools/sanitize.py +33 -0
- package/skills/investigating-agentforce-architecture/tools/write_emit_ctx.py +332 -0
- package/skills/investigating-agentforce-d360/README.md +123 -0
- package/skills/investigating-agentforce-d360/SKILL.md +163 -0
- package/skills/investigating-agentforce-d360/assets/dc/app_generation.sql +51 -0
- package/skills/investigating-agentforce-d360/assets/dc/content_category.sql +44 -0
- package/skills/investigating-agentforce-d360/assets/dc/content_quality.sql +41 -0
- package/skills/investigating-agentforce-d360/assets/dc/discover_sessions.sql +36 -0
- package/skills/investigating-agentforce-d360/assets/dc/feedback.sql +47 -0
- package/skills/investigating-agentforce-d360/assets/dc/feedback_details.sql +38 -0
- package/skills/investigating-agentforce-d360/assets/dc/gateway_records.sql +45 -0
- package/skills/investigating-agentforce-d360/assets/dc/gateway_request_llm.sql +50 -0
- package/skills/investigating-agentforce-d360/assets/dc/gateway_request_metadata.sql +44 -0
- package/skills/investigating-agentforce-d360/assets/dc/gateway_request_tags.sql +42 -0
- package/skills/investigating-agentforce-d360/assets/dc/gateway_requests.sql +89 -0
- package/skills/investigating-agentforce-d360/assets/dc/gateway_responses.sql +43 -0
- package/skills/investigating-agentforce-d360/assets/dc/generations.sql +52 -0
- package/skills/investigating-agentforce-d360/assets/dc/interactions.sql +53 -0
- package/skills/investigating-agentforce-d360/assets/dc/messages.sql +53 -0
- package/skills/investigating-agentforce-d360/assets/dc/messaging_session.sql +37 -0
- package/skills/investigating-agentforce-d360/assets/dc/moment_interactions.sql +34 -0
- package/skills/investigating-agentforce-d360/assets/dc/moments.sql +39 -0
- package/skills/investigating-agentforce-d360/assets/dc/participants.sql +48 -0
- package/skills/investigating-agentforce-d360/assets/dc/sessions.sql +78 -0
- package/skills/investigating-agentforce-d360/assets/dc/steps.sql +64 -0
- package/skills/investigating-agentforce-d360/assets/dc/tag_associations.sql +46 -0
- package/skills/investigating-agentforce-d360/assets/dc/tag_definition_associations.sql +37 -0
- package/skills/investigating-agentforce-d360/assets/dc/tag_definitions.sql +50 -0
- package/skills/investigating-agentforce-d360/assets/dc/tags.sql +37 -0
- package/skills/investigating-agentforce-d360/assets/dc/telemetry_spans.sql +55 -0
- package/skills/investigating-agentforce-d360/references/artifacts.md +50 -0
- package/skills/investigating-agentforce-d360/references/dc_dmo_fields.md +823 -0
- package/skills/investigating-agentforce-d360/references/dc_pipeline_contract.md +608 -0
- package/skills/investigating-agentforce-d360/scripts/_shared/__init__.py +2 -0
- package/skills/investigating-agentforce-d360/scripts/_shared/cli_override.py +98 -0
- package/skills/investigating-agentforce-d360/scripts/_shared/fs_guard.py +334 -0
- package/skills/investigating-agentforce-d360/scripts/_shared/paths.py +155 -0
- package/skills/investigating-agentforce-d360/scripts/_shared/runtime.py +59 -0
- package/skills/investigating-agentforce-d360/scripts/_shared/sql.py +14 -0
- package/skills/investigating-agentforce-d360/scripts/assemble_dc.py +1624 -0
- package/skills/investigating-agentforce-d360/scripts/config.py +45 -0
- package/skills/investigating-agentforce-d360/scripts/dc.py +188 -0
- package/skills/investigating-agentforce-d360/scripts/discover_sessions.py +556 -0
- package/skills/investigating-agentforce-d360/scripts/fetch_dc.py +1045 -0
- package/skills/investigating-agentforce-d360/scripts/render_dc.py +1750 -0
- package/skills/investigating-agentforce-d360/scripts/resolve_session.py +264 -0
- package/skills/investigating-agentforce-d360/scripts/storage.py +92 -0
- package/skills/investigating-agentforce-d360/scripts/tests/__init__.py +0 -0
- package/skills/investigating-agentforce-d360/scripts/tests/_bootstrap.py +15 -0
- package/skills/investigating-agentforce-d360/scripts/tests/fixtures/__init__.py +0 -0
- package/skills/investigating-agentforce-d360/scripts/tests/fixtures/synthetic_session.py +424 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_assemble_dc_bootstrap_and_mode.py +115 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_assemble_dc_gateway_direct.py +220 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_assemble_dc_gateway_direct_integration.py +158 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_assemble_dc_helpers.py +287 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_assemble_dc_integration.py +247 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_dc_and_resolve_session.py +433 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_discover_sessions.py +458 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_discover_sessions_grep_ci.py +193 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_fetch_dc_helpers.py +266 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_fetch_dc_identity.py +528 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_fetch_dc_main.py +251 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_fetch_dc_waterfall.py +229 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_fetch_dc_waterfall_full.py +283 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_identity_coherence.py +327 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_branches.py +256 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_gateway_direct.py +130 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_helpers.py +291 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_integration.py +220 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_planner_llm_calls.py +284 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_show_prompts_gating.py +215 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_resolve_from_disk.py +100 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_resolve_session_main.py +149 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_runtime_override.py +104 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_session_shape.py +95 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_session_shape_dropped_by_stdm.py +85 -0
- package/skills/managing-managed-event-subscription/SKILL.md +152 -0
- package/skills/managing-managed-event-subscription/assets/managed-event-subscription-template.xml +20 -0
- package/skills/managing-managed-event-subscription/references/delete-guide.md +57 -0
- package/skills/managing-managed-event-subscription/references/topic-name-formats.md +26 -0
- package/skills/managing-managed-event-subscription/references/update-constraints.md +30 -0
- package/skills/modeling-omnistudio-epc-catalog/SKILL.md +0 -1
- package/skills/observing-agentforce/SKILL.md +0 -1
- package/skills/orchestrating-datacloud/SKILL.md +0 -1
- package/skills/preparing-datacloud/SKILL.md +0 -1
- package/skills/querying-soql/SKILL.md +0 -1
- package/skills/retrieving-datacloud/SKILL.md +0 -1
- package/skills/running-apex-tests/SKILL.md +0 -1
- package/skills/running-code-analyzer/SKILL.md +0 -1
- package/skills/segmenting-datacloud/SKILL.md +0 -1
- package/skills/testing-agentforce/SKILL.md +0 -1
- package/skills/uplifting-components-to-slds2/SKILL.md +3 -2
- package/skills/uplifting-components-to-slds2/references/color-hooks-decision-guide.md +30 -9
- package/skills/uplifting-components-to-slds2/references/examples.md +24 -6
- package/skills/validating-slds/SKILL.md +262 -0
- package/skills/validating-slds/references/quality-checks.md +308 -0
- package/skills/validating-slds/references/report-format.md +302 -0
- package/skills/validating-slds/scripts/analyze-quality.cjs +521 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
name: "Docked Form Footer"
|
|
2
|
+
|
|
3
|
+
description: "A fixed footer component that docks to the bottom of the viewport, typically containing form action buttons like Save and Cancel. It remains visible as the user scrolls through long forms."
|
|
4
|
+
|
|
5
|
+
category: "Layout"
|
|
6
|
+
|
|
7
|
+
slds_classes:
|
|
8
|
+
root: "slds-docked-form-footer"
|
|
9
|
+
elements: []
|
|
10
|
+
modifiers: []
|
|
11
|
+
states: []
|
|
12
|
+
|
|
13
|
+
variants:
|
|
14
|
+
- name: "Base"
|
|
15
|
+
description: "Standard docked footer with centered content"
|
|
16
|
+
classes: ["slds-docked-form-footer"]
|
|
17
|
+
usage_context: "Default footer for long forms that need persistent action buttons"
|
|
18
|
+
differences: "Fixed to bottom of viewport with shadow elevation"
|
|
19
|
+
|
|
20
|
+
lightning_component:
|
|
21
|
+
name: ""
|
|
22
|
+
url: "https://developer.salesforce.com/docs/component-library/overview/components"
|
|
23
|
+
mapping_notes: "No direct Lightning Base Component - implement with custom footer and CSS positioning"
|
|
24
|
+
|
|
25
|
+
accessibility:
|
|
26
|
+
keyboard_support:
|
|
27
|
+
- "Tab to navigate to footer buttons"
|
|
28
|
+
- "Enter or Space to activate buttons"
|
|
29
|
+
screen_reader:
|
|
30
|
+
- "Footer landmark announced if using footer element"
|
|
31
|
+
- "Button labels announced clearly"
|
|
32
|
+
- "Action sequence communicated"
|
|
33
|
+
aria_attributes:
|
|
34
|
+
- "role='contentinfo' if using div instead of footer"
|
|
35
|
+
- "Buttons should have clear aria-label if needed"
|
|
36
|
+
|
|
37
|
+
usage_guidelines:
|
|
38
|
+
when_to_use:
|
|
39
|
+
- "For long forms that extend beyond viewport height"
|
|
40
|
+
- "When form actions need to remain always visible"
|
|
41
|
+
- "For edit or create flows with Save/Cancel actions"
|
|
42
|
+
- "In modal or page contexts with critical actions"
|
|
43
|
+
when_not_to_use:
|
|
44
|
+
- "For short forms that fit in viewport"
|
|
45
|
+
- "When inline form actions are sufficient"
|
|
46
|
+
- "In contexts where fixed positioning causes issues"
|
|
47
|
+
- "On small screens where footer takes too much space"
|
|
48
|
+
best_practices:
|
|
49
|
+
- "Keep action buttons clearly labeled and visible"
|
|
50
|
+
- "Place primary action on the right (e.g., Save)"
|
|
51
|
+
- "Include Cancel or secondary action on the left"
|
|
52
|
+
- "Ensure footer doesn't obscure important content"
|
|
53
|
+
- "Consider mobile viewport height limitations"
|
|
54
|
+
- "Provide adequate padding around buttons"
|
|
55
|
+
common_mistakes:
|
|
56
|
+
- "Overcrowding footer with too many actions"
|
|
57
|
+
- "Poor color contrast on footer background"
|
|
58
|
+
- "Forgetting to account for footer height in page layout"
|
|
59
|
+
- "Not handling mobile viewport properly"
|
|
60
|
+
- "Missing keyboard navigation support"
|
|
61
|
+
|
|
62
|
+
code_examples:
|
|
63
|
+
- title: "Basic Docked Form Footer"
|
|
64
|
+
code: |
|
|
65
|
+
<div class="slds-docked-form-footer">
|
|
66
|
+
<button class="slds-button slds-button_neutral">Cancel</button>
|
|
67
|
+
<button class="slds-button slds-button_brand">Save</button>
|
|
68
|
+
</div>
|
|
69
|
+
description: "Simple docked footer with Save and Cancel buttons"
|
|
70
|
+
- title: "Docked Footer with Multiple Actions"
|
|
71
|
+
code: |
|
|
72
|
+
<div class="slds-docked-form-footer">
|
|
73
|
+
<div class="slds-grid slds-grid_align-spread slds-wrap">
|
|
74
|
+
<div class="slds-col slds-no-flex">
|
|
75
|
+
<button class="slds-button slds-button_neutral">Cancel</button>
|
|
76
|
+
</div>
|
|
77
|
+
<div class="slds-col slds-no-flex">
|
|
78
|
+
<div class="slds-button-group" role="group">
|
|
79
|
+
<button class="slds-button slds-button_neutral">Save Draft</button>
|
|
80
|
+
<button class="slds-button slds-button_brand">Save & Submit</button>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
</div>
|
|
85
|
+
description: "Docked footer with multiple action options"
|
|
86
|
+
- title: "Docked Footer in Form Context"
|
|
87
|
+
code: |
|
|
88
|
+
<div class="slds-card">
|
|
89
|
+
<div class="slds-card__header slds-grid">
|
|
90
|
+
<header class="slds-media slds-media_center slds-has-flexi-truncate">
|
|
91
|
+
<div class="slds-media__body">
|
|
92
|
+
<h2 class="slds-card__header-title">
|
|
93
|
+
<span>Edit Contact</span>
|
|
94
|
+
</h2>
|
|
95
|
+
</div>
|
|
96
|
+
</header>
|
|
97
|
+
</div>
|
|
98
|
+
<div class="slds-card__body slds-card__body_inner" style="padding-bottom: 5rem;">
|
|
99
|
+
<form>
|
|
100
|
+
<div class="slds-form-element">
|
|
101
|
+
<label class="slds-form-element__label" for="input-01">
|
|
102
|
+
<abbr class="slds-required" title="required">* </abbr>First Name
|
|
103
|
+
</label>
|
|
104
|
+
<div class="slds-form-element__control">
|
|
105
|
+
<input type="text" id="input-01" class="slds-input" required />
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
108
|
+
<div class="slds-form-element">
|
|
109
|
+
<label class="slds-form-element__label" for="input-02">
|
|
110
|
+
<abbr class="slds-required" title="required">* </abbr>Last Name
|
|
111
|
+
</label>
|
|
112
|
+
<div class="slds-form-element__control">
|
|
113
|
+
<input type="text" id="input-02" class="slds-input" required />
|
|
114
|
+
</div>
|
|
115
|
+
</div>
|
|
116
|
+
<!-- More form fields... -->
|
|
117
|
+
</form>
|
|
118
|
+
</div>
|
|
119
|
+
</div>
|
|
120
|
+
<div class="slds-docked-form-footer">
|
|
121
|
+
<button class="slds-button slds-button_neutral" type="button">Cancel</button>
|
|
122
|
+
<button class="slds-button slds-button_brand" type="submit">Save</button>
|
|
123
|
+
</div>
|
|
124
|
+
description: "Docked footer used with a form in a card, note padding-bottom on card body to prevent content overlap"
|
|
125
|
+
|
|
126
|
+
styling_hooks:
|
|
127
|
+
- name: "--slds-g-color-neutral-base-95"
|
|
128
|
+
description: "Background color of the docked footer"
|
|
129
|
+
css_property: "background"
|
|
130
|
+
|
|
131
|
+
dependencies:
|
|
132
|
+
css_files: ["docked-form-footer.css", "button.css"]
|
|
133
|
+
javascript:
|
|
134
|
+
- "Form submission handling"
|
|
135
|
+
- "Scroll position management"
|
|
136
|
+
icons: []
|
|
137
|
+
other_components: ["button", "button-group"]
|
|
138
|
+
|
|
139
|
+
related_components:
|
|
140
|
+
- name: "Modal"
|
|
141
|
+
relationship: "alternative"
|
|
142
|
+
description: "Alternative pattern for forms in overlay context"
|
|
143
|
+
- name: "Page Header"
|
|
144
|
+
relationship: "complementary"
|
|
145
|
+
description: "Header component that pairs with form content"
|
|
146
|
+
- name: "Button"
|
|
147
|
+
relationship: "contains"
|
|
148
|
+
description: "Action buttons within the footer"
|
|
149
|
+
|
|
150
|
+
references:
|
|
151
|
+
official_docs: "https://v1.lightningdesignsystem.com/components/docked-form-footer/"
|
|
152
|
+
|
|
153
|
+
metadata:
|
|
154
|
+
version: "1.0.0"
|
|
155
|
+
last_updated: "2025-11-11"
|
|
156
|
+
author: "SLDS Documentation Team"
|
|
157
|
+
slds_version: "2.27.2"
|
|
158
|
+
review_status: "complete"
|
|
159
|
+
source: "official-slds"
|
|
160
|
+
notes: "Created from official SLDS documentation and design-system-internal source code"
|
|
161
|
+
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
name: Docked Utility Bar
|
|
2
|
+
description: A persistent utility panel that remains docked at the bottom or side of the screen, providing quick access to
|
|
3
|
+
frequently used tools, actions, and information without interrupting the primary workflow.
|
|
4
|
+
category: Actions
|
|
5
|
+
slds_classes:
|
|
6
|
+
root: slds-utility-bar_container
|
|
7
|
+
elements:
|
|
8
|
+
- class: slds-utility-bar
|
|
9
|
+
description: Fixed bar at the bottom of viewport that contains items
|
|
10
|
+
purpose: Main utility bar element with fixed positioning and background
|
|
11
|
+
- class: slds-utility-bar__item
|
|
12
|
+
description: Individual utility item that invokes specific utility bar panel
|
|
13
|
+
purpose: Represents a single utility tool or action
|
|
14
|
+
- class: slds-utility-bar__action
|
|
15
|
+
description: Action button within utility bar
|
|
16
|
+
purpose: Interactive element for utility functions
|
|
17
|
+
- class: slds-utility-bar__text
|
|
18
|
+
description: Text content within utility bar actions
|
|
19
|
+
purpose: Contains label text for utility actions
|
|
20
|
+
modifiers:
|
|
21
|
+
- class: slds-utility-bar__item_pop-out
|
|
22
|
+
description: Modifier for utility item with panel popped out in new window
|
|
23
|
+
usage: When utility panel is opened in a separate window
|
|
24
|
+
states:
|
|
25
|
+
- class: slds-is-active
|
|
26
|
+
description: Active utility action state
|
|
27
|
+
trigger: Applied to currently active utility action
|
|
28
|
+
- class: slds-indicator_unread
|
|
29
|
+
description: Unread notification indicator
|
|
30
|
+
trigger: Applied when utility has unread notifications
|
|
31
|
+
variants:
|
|
32
|
+
- name: Base
|
|
33
|
+
description: Standard docked utility bar fixed at bottom of viewport
|
|
34
|
+
classes:
|
|
35
|
+
- slds-utility-bar_container
|
|
36
|
+
- slds-utility-bar
|
|
37
|
+
usage_context: Default implementation for utility access
|
|
38
|
+
differences: Fixed horizontal utility bar at bottom of screen
|
|
39
|
+
- name: With Pop-out
|
|
40
|
+
description: Utility bar item with panel popped out in new window
|
|
41
|
+
classes:
|
|
42
|
+
- slds-utility-bar__item
|
|
43
|
+
- slds-utility-bar__item_pop-out
|
|
44
|
+
usage_context: When utility panel is opened in a separate window
|
|
45
|
+
differences: Visual indicator showing panel is popped out
|
|
46
|
+
lightning_component:
|
|
47
|
+
name: No direct component
|
|
48
|
+
url: https://developer.salesforce.com/docs/component-library/overview/components
|
|
49
|
+
mapping_notes: No direct Lightning Base Component equivalent - typically implemented using custom components with lightning-button-group
|
|
50
|
+
patterns
|
|
51
|
+
accessibility:
|
|
52
|
+
keyboard_support:
|
|
53
|
+
- Tab navigation through utility items
|
|
54
|
+
- Enter/Space to activate utility actions
|
|
55
|
+
- Arrow keys for utility bar navigation
|
|
56
|
+
- Escape to close expanded panels
|
|
57
|
+
screen_reader:
|
|
58
|
+
- Utility bar purpose and items announced
|
|
59
|
+
- Panel expansion state communicated
|
|
60
|
+
- Utility actions clearly described
|
|
61
|
+
aria_attributes:
|
|
62
|
+
- role='toolbar' for utility bar container
|
|
63
|
+
- role='button' for utility actions
|
|
64
|
+
- aria-expanded for expandable utilities
|
|
65
|
+
- aria-label for utility descriptions
|
|
66
|
+
- aria-controls for panel relationships
|
|
67
|
+
usage_guidelines:
|
|
68
|
+
when_to_use:
|
|
69
|
+
- For frequently accessed tools and utilities
|
|
70
|
+
- When users need persistent access to functions
|
|
71
|
+
- For secondary tools that support primary workflows
|
|
72
|
+
- To provide quick actions without navigation
|
|
73
|
+
when_not_to_use:
|
|
74
|
+
- For primary navigation (use main navigation)
|
|
75
|
+
- For infrequently used features
|
|
76
|
+
- When screen space is severely limited
|
|
77
|
+
best_practices:
|
|
78
|
+
- Include only essential utilities
|
|
79
|
+
- Provide clear icons and labels
|
|
80
|
+
- Allow customization of utility order
|
|
81
|
+
- Handle responsive behavior gracefully
|
|
82
|
+
- Maintain consistent interaction patterns
|
|
83
|
+
common_mistakes:
|
|
84
|
+
- Overcrowding with too many utilities
|
|
85
|
+
- Unclear or ambiguous utility icons
|
|
86
|
+
- Poor responsive behavior on small screens
|
|
87
|
+
- Inconsistent interaction patterns
|
|
88
|
+
code_examples:
|
|
89
|
+
- title: Basic Docked Utility Bar
|
|
90
|
+
description: Standard utility bar with common tools and actions
|
|
91
|
+
code: "<div class=\"\" role=\"toolbar\" aria-label=\"Utility tools\">\n <div class=\"\">\n <div class=\"\">\n\
|
|
92
|
+
\ <button class=\"slds-button slds-button_icon\" aria-expanded=\"false\" aria-controls=\"utility-panel-1\" title=\"\
|
|
93
|
+
Notes\">\n <svg class=\"slds-button__icon\" aria-hidden=\"true\">\n <use xlink:href=\"/assets/icons/utility-sprite/svg/symbols.svg#note\"\
|
|
94
|
+
></use>\n </svg>\n <span class=\"slds-assistive-text\">Open notes utility</span>\n </button>\n\
|
|
95
|
+
\ </div>\n <div class=\"\">\n <button class=\"slds-button slds-button_icon slds-is-active\" aria-expanded=\"\
|
|
96
|
+
true\" aria-controls=\"utility-panel-2\" title=\"Calculator\">\n <svg class=\"slds-button__icon\" aria-hidden=\"\
|
|
97
|
+
true\">\n <use xlink:href=\"/assets/icons/utility-sprite/svg/symbols.svg#calculator\"></use>\n \
|
|
98
|
+
\ </svg>\n <span class=\"slds-assistive-text\">Open calculator utility</span>\n </button>\n \
|
|
99
|
+
\ </div>\n <div class=\"\">\n <button class=\"slds-button slds-button_icon\" aria-expanded=\"false\"\
|
|
100
|
+
\ aria-controls=\"utility-panel-3\" title=\"Timer\">\n <svg class=\"slds-button__icon\" aria-hidden=\"true\"\
|
|
101
|
+
>\n <use xlink:href=\"/assets/icons/utility-sprite/svg/symbols.svg#clock\"></use>\n </svg>\n \
|
|
102
|
+
\ <span class=\"slds-assistive-text\">Open timer utility</span>\n </button>\n </div>\n \
|
|
103
|
+
\ <div class=\"\">\n <button class=\"slds-button slds-button_icon\" title=\"Help\">\n <svg class=\"\
|
|
104
|
+
slds-button__icon\" aria-hidden=\"true\">\n <use xlink:href=\"/assets/icons/utility-sprite/svg/symbols.svg#help\"\
|
|
105
|
+
></use>\n </svg>\n <span class=\"slds-assistive-text\">Open help</span>\n </button>\n \
|
|
106
|
+
\ </div>\n </div>\n </div>\n"
|
|
107
|
+
- title: Utility Bar with Expanded Panel
|
|
108
|
+
description: Utility bar with an expanded utility panel showing detailed content
|
|
109
|
+
code: "<div class=\"slds-is-open\" role=\"toolbar\" aria-label=\"Utility tools\">\n <div class=\"\" id=\"utility-panel-calculator\"\
|
|
110
|
+
\ role=\"dialog\" aria-labelledby=\"panel-title\">\n <header class=\"\">\n <h2 id=\"panel-title\" class=\"\
|
|
111
|
+
slds-text-heading_small\">Calculator</h2>\n <button class=\"slds-button slds-button_icon slds-button_icon-border\"\
|
|
112
|
+
\ title=\"Close\">\n <svg class=\"slds-button__icon\" aria-hidden=\"true\">\n <use xlink:href=\"\
|
|
113
|
+
/assets/icons/utility-sprite/svg/symbols.svg#close\"></use>\n </svg>\n <span class=\"slds-assistive-text\"\
|
|
114
|
+
>Close calculator</span>\n </button>\n </header>\n <div class=\"\">\n <div class=\"slds-grid\
|
|
115
|
+
\ slds-grid_vertical\">\n <div class=\"slds-col\">\n <input type=\"text\" class=\"slds-input slds-text-align_right\"\
|
|
116
|
+
\ value=\"0\" readonly aria-label=\"Calculator display\">\n </div>\n <div class=\"slds-col slds-m-top_small\"\
|
|
117
|
+
>\n <div class=\"slds-grid slds-wrap\">\n <div class=\"slds-col slds-size_1-of-4 slds-p-around_xx-small\"\
|
|
118
|
+
>\n <button class=\"slds-button slds-button_neutral slds-size_1-of-1\">7</button>\n </div>\n\
|
|
119
|
+
\ <div class=\"slds-col slds-size_1-of-4 slds-p-around_xx-small\">\n <button class=\"\
|
|
120
|
+
slds-button slds-button_neutral slds-size_1-of-1\">8</button>\n </div>\n <div class=\"slds-col\
|
|
121
|
+
\ slds-size_1-of-4 slds-p-around_xx-small\">\n <button class=\"slds-button slds-button_neutral slds-size_1-of-1\"\
|
|
122
|
+
>9</button>\n </div>\n <div class=\"slds-col slds-size_1-of-4 slds-p-around_xx-small\">\n\
|
|
123
|
+
\ <button class=\"slds-button slds-button_brand slds-size_1-of-1\">÷</button>\n </div>\n\
|
|
124
|
+
\ </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"\">\n \
|
|
125
|
+
\ <div class=\"\">\n <button class=\"slds-button slds-button_icon\" title=\"Notes\">\n <svg class=\"\
|
|
126
|
+
slds-button__icon\" aria-hidden=\"true\">\n <use xlink:href=\"/assets/icons/utility-sprite/svg/symbols.svg#note\"\
|
|
127
|
+
></use>\n </svg>\n <span class=\"slds-assistive-text\">Notes</span>\n </button>\n \
|
|
128
|
+
\ </div>\n <div class=\"\">\n <button class=\"slds-button slds-button_icon slds-is-active\" aria-expanded=\"\
|
|
129
|
+
true\" title=\"Calculator\">\n <svg class=\"slds-button__icon\" aria-hidden=\"true\">\n <use xlink:href=\"\
|
|
130
|
+
/assets/icons/utility-sprite/svg/symbols.svg#calculator\"></use>\n </svg>\n <span class=\"slds-assistive-text\"\
|
|
131
|
+
>Calculator (Active)</span>\n </button>\n </div>\n </div>\n </div>\n"
|
|
132
|
+
- title: Vertical Utility Bar
|
|
133
|
+
description: Vertically oriented utility bar for side placement
|
|
134
|
+
code: "<div class=\"\" role=\"toolbar\" aria-label=\"Utility tools\">\n <div class=\"\">\n <div class=\"\">\n\
|
|
135
|
+
\ <button class=\"slds-button slds-button_icon\" title=\"Bookmarks\">\n <svg class=\"slds-button__icon\"\
|
|
136
|
+
\ aria-hidden=\"true\">\n <use xlink:href=\"/assets/icons/utility-sprite/svg/symbols.svg#bookmark\"></use>\n\
|
|
137
|
+
\ </svg>\n <span class=\"slds-assistive-text\">Bookmarks</span>\n </button>\n </div>\n\
|
|
138
|
+
\ <div class=\"\">\n <button class=\"slds-button slds-button_icon\" title=\"Recent Items\">\n \
|
|
139
|
+
\ <svg class=\"slds-button__icon\" aria-hidden=\"true\">\n <use xlink:href=\"/assets/icons/utility-sprite/svg/symbols.svg#recent\"\
|
|
140
|
+
></use>\n </svg>\n <span class=\"slds-assistive-text\">Recent Items</span>\n </button>\n\
|
|
141
|
+
\ </div>\n <div class=\"\">\n <button class=\"slds-button slds-button_icon\" title=\"Search\">\n\
|
|
142
|
+
\ <svg class=\"slds-button__icon\" aria-hidden=\"true\">\n <use xlink:href=\"/assets/icons/utility-sprite/svg/symbols.svg#search\"\
|
|
143
|
+
></use>\n </svg>\n <span class=\"slds-assistive-text\">Search</span>\n </button>\n \
|
|
144
|
+
\ </div>\n </div>\n </div>\n"
|
|
145
|
+
dependencies:
|
|
146
|
+
css_files:
|
|
147
|
+
- docked-utility-bar.css
|
|
148
|
+
- button.css
|
|
149
|
+
- grid.css
|
|
150
|
+
- panel.css
|
|
151
|
+
javascript:
|
|
152
|
+
- docked-utility-bar.js
|
|
153
|
+
icons:
|
|
154
|
+
- utility-sprite.svg
|
|
155
|
+
other_components:
|
|
156
|
+
- button
|
|
157
|
+
- grid
|
|
158
|
+
- panel
|
|
159
|
+
related_components:
|
|
160
|
+
- name: Docked Composer
|
|
161
|
+
relationship: similar
|
|
162
|
+
description: Similar docked interface concept
|
|
163
|
+
- name: Global Header
|
|
164
|
+
relationship: alternative
|
|
165
|
+
description: Alternative location for utility access
|
|
166
|
+
- name: Button Group
|
|
167
|
+
relationship: depends-on
|
|
168
|
+
description: Uses button group patterns for utility items
|
|
169
|
+
references:
|
|
170
|
+
official_docs: https://v1.lightningdesignsystem.com/components/docked-utility-bar/
|
|
171
|
+
metadata:
|
|
172
|
+
version: 1.0.0
|
|
173
|
+
last_updated: '2025-11-12'
|
|
174
|
+
review_status: complete
|
|
175
|
+
notes: ' Cleaned invalid classes and CSS variables on 2025-11-12 using slds-plus.css as source of truth.'
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
name: Drop Zone
|
|
2
|
+
description: A component for screen building that provides a draggable drop target area where users can drop components or
|
|
3
|
+
elements. Indicates drop availability and provides visual feedback during drag operations.
|
|
4
|
+
category: Complex Components
|
|
5
|
+
slds_classes:
|
|
6
|
+
root: slds-drop-zone
|
|
7
|
+
elements:
|
|
8
|
+
- class: slds-drop-zone__label
|
|
9
|
+
description: Top label of the drop zone
|
|
10
|
+
purpose: Displays instructional text or title
|
|
11
|
+
- class: slds-drop-zone__label_container
|
|
12
|
+
description: Container for populated drop zone label
|
|
13
|
+
purpose: Wraps label content when zone contains items
|
|
14
|
+
- class: slds-drop-zone__label_button
|
|
15
|
+
description: Button within drop zone label
|
|
16
|
+
purpose: Interactive element in label area
|
|
17
|
+
- class: slds-drop-zone_drag__slot
|
|
18
|
+
description: Insertion point of drop zone
|
|
19
|
+
purpose: Target area where items are dropped
|
|
20
|
+
modifiers:
|
|
21
|
+
- class: slds-drop-zone_drag
|
|
22
|
+
description: Modifier indicating drop availability
|
|
23
|
+
purpose: Applied when component may be dropped in container
|
|
24
|
+
states: []
|
|
25
|
+
variants:
|
|
26
|
+
- name: Base
|
|
27
|
+
description: Standard drop zone for component placement
|
|
28
|
+
classes:
|
|
29
|
+
- slds-drop-zone
|
|
30
|
+
usage_context: Default drop zone for drag-and-drop interfaces
|
|
31
|
+
differences: Empty drop target ready to receive dragged items
|
|
32
|
+
lightning_component:
|
|
33
|
+
name: ''
|
|
34
|
+
url: https://developer.salesforce.com/docs/component-library/overview/components
|
|
35
|
+
mapping_notes: No direct Lightning Base Component - implement with custom drag-and-drop JavaScript
|
|
36
|
+
accessibility:
|
|
37
|
+
keyboard_support:
|
|
38
|
+
- Tab to focus on drop zone
|
|
39
|
+
- Enter or Space to activate alternative placement
|
|
40
|
+
- Arrow keys for keyboard-based positioning
|
|
41
|
+
screen_reader:
|
|
42
|
+
- Drop zone role and purpose announced
|
|
43
|
+
- Drag state changes announced
|
|
44
|
+
- Successful drop confirmed
|
|
45
|
+
aria_attributes:
|
|
46
|
+
- aria-label describing drop zone purpose
|
|
47
|
+
- aria-dropeffect indicating allowed operations
|
|
48
|
+
- aria-grabbed on draggable items
|
|
49
|
+
- role='region' or custom role for drop area
|
|
50
|
+
usage_guidelines:
|
|
51
|
+
when_to_use:
|
|
52
|
+
- For screen or page builders
|
|
53
|
+
- When users need to arrange components visually
|
|
54
|
+
- For customizable dashboards or layouts
|
|
55
|
+
- In drag-and-drop interfaces
|
|
56
|
+
when_not_to_use:
|
|
57
|
+
- For simple file uploads (use file selector)
|
|
58
|
+
- When drag-and-drop adds unnecessary complexity
|
|
59
|
+
- For mobile-only experiences (touch drag can be difficult)
|
|
60
|
+
- When list reordering is sufficient
|
|
61
|
+
best_practices:
|
|
62
|
+
- Provide clear visual feedback during drag
|
|
63
|
+
- Show valid drop targets clearly
|
|
64
|
+
- Indicate when zone is ready to receive drops
|
|
65
|
+
- Provide alternative non-drag methods
|
|
66
|
+
- Handle touch interactions for mobile
|
|
67
|
+
- Show drop zone boundaries clearly
|
|
68
|
+
common_mistakes:
|
|
69
|
+
- Unclear drop target boundaries
|
|
70
|
+
- No visual feedback during drag
|
|
71
|
+
- Missing keyboard alternatives
|
|
72
|
+
- Poor mobile/touch support
|
|
73
|
+
- Not indicating valid vs invalid drops
|
|
74
|
+
code_examples:
|
|
75
|
+
- title: Basic Drop Zone
|
|
76
|
+
code: "<div class=\"slds-drop-zone\">\n <span class=\"slds-drop-zone__label\">\n Drop components here\n </span>\n</div>\n"
|
|
77
|
+
description: Empty drop zone ready to receive components
|
|
78
|
+
- title: Drop Zone in Drag State
|
|
79
|
+
code: "<div class=\"slds-drop-zone slds-drop-zone_drag\">\n <span class=\"slds-drop-zone__label\">\n Release to place\
|
|
80
|
+
\ component\n </span>\n <div class=\"slds-drop-zone_drag__slot\"></div>\n</div>\n"
|
|
81
|
+
description: Drop zone during active drag operation
|
|
82
|
+
- title: Drop Zone with Content
|
|
83
|
+
code: "<div class=\"slds-drop-zone\">\n <div class=\"slds-drop-zone__label_container\">\n <button class=\"slds-button\
|
|
84
|
+
\ slds-drop-zone__label_button\">\n Add Component\n </button>\n </div>\n <div class=\"\">\n <!-- Placed components\
|
|
85
|
+
\ appear here -->\n </div>\n</div>\n"
|
|
86
|
+
description: Drop zone with placed content and add button
|
|
87
|
+
styling_hooks: []
|
|
88
|
+
dependencies:
|
|
89
|
+
css_files:
|
|
90
|
+
- drop-zone.css
|
|
91
|
+
javascript:
|
|
92
|
+
- Drag and drop event handlers
|
|
93
|
+
- Drop validation logic
|
|
94
|
+
- Visual feedback during drag
|
|
95
|
+
- Component placement logic
|
|
96
|
+
icons: []
|
|
97
|
+
other_components:
|
|
98
|
+
- button
|
|
99
|
+
related_components:
|
|
100
|
+
- name: File Selector
|
|
101
|
+
relationship: alternative
|
|
102
|
+
description: Alternative for file uploads
|
|
103
|
+
- name: Builder Header
|
|
104
|
+
relationship: complementary
|
|
105
|
+
description: Often used together in builder interfaces
|
|
106
|
+
references:
|
|
107
|
+
official_docs: https://v1.lightningdesignsystem.com/components/drop-zone/
|
|
108
|
+
metadata:
|
|
109
|
+
version: 1.0.0
|
|
110
|
+
last_updated: '2025-11-11'
|
|
111
|
+
author: SLDS Documentation Team
|
|
112
|
+
slds_version: 2.27.2
|
|
113
|
+
review_status: complete
|
|
114
|
+
source: official-slds
|
|
115
|
+
notes: Created from official SLDS documentation and design-system-internal source code
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
name: "Dueling Picklist"
|
|
2
|
+
|
|
3
|
+
description: "A dueling-picklist is used to move options between two lists and is often referred to as a multi-select. Sometimes, the list options can then be re-ordered, depending on the use case."
|
|
4
|
+
|
|
5
|
+
category: "Input"
|
|
6
|
+
|
|
7
|
+
slds_classes:
|
|
8
|
+
root: "slds-dueling-list"
|
|
9
|
+
elements:
|
|
10
|
+
- class: "slds-dueling-list__column"
|
|
11
|
+
description: "Column container for each list and button group"
|
|
12
|
+
purpose: "Organizes the two lists and control buttons in a flex layout"
|
|
13
|
+
- class: "slds-dueling-list__options"
|
|
14
|
+
description: "Bounding visual container for listbox of options"
|
|
15
|
+
purpose: "Contains the selectable options list with border and scrollable area"
|
|
16
|
+
modifiers:
|
|
17
|
+
- class: "slds-dueling-list__column_responsive"
|
|
18
|
+
description: "Responsive layout modifier for dueling picklist columns"
|
|
19
|
+
usage: "Applied to columns containing options to make them responsive and flexible"
|
|
20
|
+
states:
|
|
21
|
+
- class: "slds-is-selected"
|
|
22
|
+
description: "Selected state of a listbox option"
|
|
23
|
+
trigger: "When an option is selected (aria-selected='true')"
|
|
24
|
+
- class: "slds-is-grabbed"
|
|
25
|
+
description: "Grabbed state of a listbox option during drag"
|
|
26
|
+
trigger: "When an option is being dragged"
|
|
27
|
+
- class: "slds-is-disabled"
|
|
28
|
+
description: "Disabled state for the entire dueling picklist"
|
|
29
|
+
trigger: "When the component is not interactive"
|
|
30
|
+
|
|
31
|
+
variants:
|
|
32
|
+
- name: "Base"
|
|
33
|
+
description: "Standard dueling picklist with two lists and move buttons"
|
|
34
|
+
classes: ["slds-dueling-list"]
|
|
35
|
+
usage_context: "Default dueling picklist implementation"
|
|
36
|
+
differences: "Two side-by-side lists with buttons to move items between them"
|
|
37
|
+
- name: "Responsive"
|
|
38
|
+
description: "Responsive dueling picklist that adapts to available space"
|
|
39
|
+
classes: ["slds-dueling-list", "slds-dueling-list__column_responsive"]
|
|
40
|
+
usage_context: "Use in narrow regions or responsive layouts"
|
|
41
|
+
differences: "Columns flex to available space, items truncate with ellipsis"
|
|
42
|
+
|
|
43
|
+
lightning_component:
|
|
44
|
+
name: ""
|
|
45
|
+
url: "https://developer.salesforce.com/docs/component-library/overview/components"
|
|
46
|
+
mapping_notes: "No direct Lightning Base Component - use custom implementation with SLDS classes"
|
|
47
|
+
|
|
48
|
+
accessibility:
|
|
49
|
+
keyboard_support:
|
|
50
|
+
- "Tab to navigate between lists and buttons"
|
|
51
|
+
- "Up/Down arrows to move focus and selection within a list"
|
|
52
|
+
- "Shift + Up/Down to extend selection"
|
|
53
|
+
- "Ctrl + Up/Down to move focus without changing selection"
|
|
54
|
+
- "Ctrl + Space to toggle selection on focused option"
|
|
55
|
+
- "Ctrl + A to select all options in a list"
|
|
56
|
+
- "Cmd/Ctrl + Left/Right to move selected items between lists"
|
|
57
|
+
- "Space to toggle Drag and Drop mode"
|
|
58
|
+
- "In Drag mode: Up/Down arrows move selected items within current list"
|
|
59
|
+
screen_reader:
|
|
60
|
+
- "List labels announced via aria-labelledby"
|
|
61
|
+
- "Operation instructions announced via aria-describedby"
|
|
62
|
+
- "Selected state announced for each option"
|
|
63
|
+
- "Drag and drop mode announced"
|
|
64
|
+
aria_attributes:
|
|
65
|
+
- "role='listbox' on each options container"
|
|
66
|
+
- "aria-multiselectable='true' on each listbox"
|
|
67
|
+
- "aria-selected on each option (true/false)"
|
|
68
|
+
- "aria-labelledby pointing to list label"
|
|
69
|
+
- "aria-describedby for operation instructions"
|
|
70
|
+
- "tabindex='0' on selected items, '-1' on others"
|
|
71
|
+
- "role='group' on form-element wrapper"
|
|
72
|
+
- "aria-labelledby on group pointing to group label ID"
|
|
73
|
+
|
|
74
|
+
usage_guidelines:
|
|
75
|
+
when_to_use:
|
|
76
|
+
- "When users need to select multiple options from a large set"
|
|
77
|
+
- "For moving items between available and selected lists"
|
|
78
|
+
- "When reordering selected items is needed"
|
|
79
|
+
- "For complex multi-select scenarios"
|
|
80
|
+
when_not_to_use:
|
|
81
|
+
- "For single selection (use select or combobox)"
|
|
82
|
+
- "When only a few options exist (use checkboxes)"
|
|
83
|
+
- "In very constrained spaces"
|
|
84
|
+
- "When drag and drop is not supported"
|
|
85
|
+
best_practices:
|
|
86
|
+
- "Use group labels (fieldset/legend pattern) for accessibility"
|
|
87
|
+
- "Provide clear operation instructions"
|
|
88
|
+
- "Support both button and keyboard interactions"
|
|
89
|
+
- "Implement proper focus management"
|
|
90
|
+
- "Handle drag and drop gracefully with fallbacks"
|
|
91
|
+
- "Use responsive variant for narrow layouts"
|
|
92
|
+
- "Provide visual feedback for all interactions"
|
|
93
|
+
common_mistakes:
|
|
94
|
+
- "Not implementing proper ARIA listbox patterns"
|
|
95
|
+
- "Missing keyboard navigation support"
|
|
96
|
+
- "Inadequate focus management"
|
|
97
|
+
- "Not providing operation instructions"
|
|
98
|
+
- "Missing group labels for accessibility"
|
|
99
|
+
|
|
100
|
+
code_examples:
|
|
101
|
+
- title: "Basic Dueling Picklist"
|
|
102
|
+
code: |
|
|
103
|
+
<div class="slds-form-element" role="group" aria-labelledby="dueling-picklist-label">
|
|
104
|
+
<div class="slds-form-element__label slds-form-element__legend" id="dueling-picklist-label">
|
|
105
|
+
Select Options
|
|
106
|
+
</div>
|
|
107
|
+
<div class="slds-form-element__control">
|
|
108
|
+
<div class="slds-dueling-list">
|
|
109
|
+
<div class="slds-dueling-list__column">
|
|
110
|
+
<span class="slds-form-element__label">Available</span>
|
|
111
|
+
<div class="slds-dueling-list__options" role="listbox" aria-multiselectable="true" aria-labelledby="available-label">
|
|
112
|
+
<div role="option" aria-selected="false" tabindex="0">Option 1</div>
|
|
113
|
+
<div role="option" aria-selected="false" tabindex="-1">Option 2</div>
|
|
114
|
+
<div role="option" aria-selected="false" tabindex="-1">Option 3</div>
|
|
115
|
+
</div>
|
|
116
|
+
</div>
|
|
117
|
+
<div class="slds-dueling-list__column">
|
|
118
|
+
<button class="slds-button slds-button_neutral">Move Right</button>
|
|
119
|
+
<button class="slds-button slds-button_neutral">Move Left</button>
|
|
120
|
+
</div>
|
|
121
|
+
<div class="slds-dueling-list__column">
|
|
122
|
+
<span class="slds-form-element__label">Selected</span>
|
|
123
|
+
<div class="slds-dueling-list__options" role="listbox" aria-multiselectable="true" aria-labelledby="selected-label">
|
|
124
|
+
<div role="option" aria-selected="false" tabindex="0">Option 4</div>
|
|
125
|
+
</div>
|
|
126
|
+
</div>
|
|
127
|
+
</div>
|
|
128
|
+
</div>
|
|
129
|
+
</div>
|
|
130
|
+
description: "Basic dueling picklist with two lists and move buttons"
|
|
131
|
+
- title: "Responsive Dueling Picklist"
|
|
132
|
+
code: |
|
|
133
|
+
<div class="slds-form-element" role="group" aria-labelledby="responsive-picklist-label">
|
|
134
|
+
<div class="slds-form-element__label slds-form-element__legend" id="responsive-picklist-label">
|
|
135
|
+
Select Options
|
|
136
|
+
</div>
|
|
137
|
+
<div class="slds-form-element__control">
|
|
138
|
+
<div class="slds-dueling-list">
|
|
139
|
+
<div class="slds-dueling-list__column slds-dueling-list__column_responsive">
|
|
140
|
+
<span class="slds-form-element__label">Available</span>
|
|
141
|
+
<div class="slds-dueling-list__options" role="listbox" aria-multiselectable="true">
|
|
142
|
+
<div role="option" aria-selected="false" tabindex="0">Option 1</div>
|
|
143
|
+
<div role="option" aria-selected="false" tabindex="-1">Option 2</div>
|
|
144
|
+
</div>
|
|
145
|
+
</div>
|
|
146
|
+
<div class="slds-dueling-list__column">
|
|
147
|
+
<button class="slds-button slds-button_neutral">Move Right</button>
|
|
148
|
+
<button class="slds-button slds-button_neutral">Move Left</button>
|
|
149
|
+
</div>
|
|
150
|
+
<div class="slds-dueling-list__column slds-dueling-list__column_responsive">
|
|
151
|
+
<span class="slds-form-element__label">Selected</span>
|
|
152
|
+
<div class="slds-dueling-list__options" role="listbox" aria-multiselectable="true">
|
|
153
|
+
<div role="option" aria-selected="false" tabindex="0">Option 3</div>
|
|
154
|
+
</div>
|
|
155
|
+
</div>
|
|
156
|
+
</div>
|
|
157
|
+
</div>
|
|
158
|
+
</div>
|
|
159
|
+
description: "Responsive dueling picklist that adapts to available space"
|
|
160
|
+
|
|
161
|
+
styling_hooks: []
|
|
162
|
+
|
|
163
|
+
dependencies:
|
|
164
|
+
css_files: ["dueling-picklist.css", "form-element.css", "listbox.css", "button.css"]
|
|
165
|
+
javascript:
|
|
166
|
+
- "Listbox selection management"
|
|
167
|
+
- "Item movement between lists"
|
|
168
|
+
- "Drag and drop functionality (optional)"
|
|
169
|
+
- "Keyboard navigation"
|
|
170
|
+
- "Focus management"
|
|
171
|
+
icons: []
|
|
172
|
+
other_components: ["form-element", "listbox", "button"]
|
|
173
|
+
|
|
174
|
+
related_components:
|
|
175
|
+
- name: "Listbox"
|
|
176
|
+
relationship: "depends-on"
|
|
177
|
+
description: "ARIA listbox component used for each list"
|
|
178
|
+
- name: "Select"
|
|
179
|
+
relationship: "alternative"
|
|
180
|
+
description: "For single selection scenarios"
|
|
181
|
+
- name: "Multi-Select"
|
|
182
|
+
relationship: "similar"
|
|
183
|
+
description: "Alternative multi-select component"
|
|
184
|
+
|
|
185
|
+
references:
|
|
186
|
+
official_docs: "https://v1.lightningdesignsystem.com/components/dueling-picklist/"
|
|
187
|
+
design_guidelines: "https://v1.lightningdesignsystem.com/components/dueling-picklist/"
|
|
188
|
+
metadata:
|
|
189
|
+
version: "1.0.0"
|
|
190
|
+
last_updated: "2025-01-15"
|
|
191
|
+
author: "SLDS Documentation Team"
|
|
192
|
+
slds_version: "2.27.2"
|
|
193
|
+
review_status: "complete"
|
|
194
|
+
source: "official-slds"
|
|
195
|
+
notes: "Created from official SLDS documentation and design-system-internal source code with CSS selector annotations. Follows ARIA listbox practices for accessibility."
|
|
196
|
+
|