From de92a26face2d866c5e80671e7af42ac49157860 Mon Sep 17 00:00:00 2001 From: jeff-matthews Date: Thu, 21 Nov 2024 18:45:30 +0000 Subject: [PATCH] deploy: 9b9d81c838b30a8e54491952b1dd414598437b19 --- activate/index.html | 2 +- analytics/instrumentation/index.html | 2 +- blocks/blocks-overview/index.html | 2 +- discovery/architecture/index.html | 2 +- discovery/data-export-validation/index.html | 2 +- discovery/index.html | 2 +- discovery/luma-bridge/index.html | 2 +- dropins/all/anatomy/index.html | 2 +- dropins/all/branding/index.html | 2 +- dropins/all/enriching/index.html | 2 +- dropins/all/eventbus/index.html | 2 +- dropins/all/extending/index.html | 2 +- dropins/all/installing/index.html | 2 +- dropins/all/introduction/index.html | 2 +- dropins/all/localizing/index.html | 2 +- dropins/all/styling/index.html | 2 +- dropins/cart/cart-containers/index.html | 2 +- dropins/cart/cart-functions/index.html | 2 +- dropins/cart/cart-installation/index.html | 2 +- dropins/cart/cart-slots/index.html | 2 +- dropins/cart/cart-styles/index.html | 2 +- dropins/cart/index.html | 2 +- dropins/cart/initialization/index.html | 2 +- .../bill-to-shipping-address/index.html | 2 +- .../containers/estimate-shipping/index.html | 2 +- .../checkout/containers/login-form/index.html | 2 +- .../containers/merged-cart-banner/index.html | 2 +- .../order-confirmation-header/index.html | 2 +- .../containers/out-of-stock/index.html | 2 +- .../containers/payment-methods/index.html | 2 +- .../containers/place-order/index.html | 2 +- .../containers/server-error/index.html | 2 +- .../containers/shipping-methods/index.html | 2 +- dropins/checkout/functions/index.html | 2 +- dropins/checkout/index.html | 2 +- dropins/checkout/initialization/index.html | 2 +- dropins/checkout/installation/index.html | 2 +- dropins/checkout/slots/index.html | 4 ++-- dropins/checkout/styles/index.html | 2 +- .../tutorials/add-payment-method/index.html | 9 ++++++++- dropins/order/functions/index.html | 2 +- dropins/order/initialization/index.html | 2 +- dropins/order/slots/index.html | 2 +- dropins/order/styles/index.html | 2 +- dropins/product-details/index.html | 2 +- .../product-details/pdp-containers/index.html | 2 +- .../product-details/pdp-functions/index.html | 2 +- .../pdp-initialization/index.html | 2 +- .../pdp-installation/index.html | 2 +- dropins/product-details/pdp-slots/index.html | 2 +- dropins/product-details/pdp-styles/index.html | 2 +- .../containers/address-form/index.html | 2 +- .../containers/addresses/index.html | 2 +- .../customer-information/index.html | 2 +- .../containers/orders-list/index.html | 2 +- dropins/user-account/functions/index.html | 2 +- dropins/user-account/index.html | 2 +- .../user-account/initialization/index.html | 2 +- dropins/user-account/sidebar/index.html | 2 +- dropins/user-account/slots/index.html | 2 +- dropins/user-account/styles/index.html | 2 +- dropins/user-account/tutorials/index.html | 2 +- dropins/user-auth/auth-functions/index.html | 2 +- .../containers/auth-combine/index.html | 2 +- .../containers/reset-password/index.html | 2 +- .../user-auth/containers/sign-in/index.html | 2 +- .../user-auth/containers/sign-up/index.html | 2 +- .../success-notification/index.html | 2 +- .../containers/update-password/index.html | 2 +- dropins/user-auth/index.html | 2 +- dropins/user-auth/recaptcha/index.html | 2 +- get-started/index.html | 2 +- get-started/run-lighthouse/index.html | 2 +- get-started/storefront-structure/index.html | 2 +- index.html | 2 +- launch/index.html | 2 +- pagefind/fragment/en_24103bf.pf_fragment | Bin 1039 -> 0 bytes pagefind/fragment/en_25acac8.pf_fragment | Bin 3603 -> 0 bytes pagefind/fragment/en_30af603.pf_fragment | Bin 0 -> 1255 bytes pagefind/fragment/en_340fd37.pf_fragment | Bin 0 -> 1344 bytes pagefind/fragment/en_34ff67e.pf_fragment | Bin 0 -> 3556 bytes ...5c7.pf_fragment => en_352392f.pf_fragment} | Bin 8519 -> 8518 bytes pagefind/fragment/en_35661e9.pf_fragment | Bin 0 -> 1334 bytes ...c48.pf_fragment => en_395a898.pf_fragment} | Bin 1227 -> 1226 bytes pagefind/fragment/en_4434e39.pf_fragment | Bin 0 -> 2358 bytes pagefind/fragment/en_4859f76.pf_fragment | Bin 0 -> 1306 bytes pagefind/fragment/en_4aea854.pf_fragment | Bin 0 -> 844 bytes ...f5c.pf_fragment => en_4db9a52.pf_fragment} | Bin 2207 -> 2206 bytes pagefind/fragment/en_5288482.pf_fragment | Bin 0 -> 1542 bytes pagefind/fragment/en_54bb312.pf_fragment | Bin 1344 -> 0 bytes pagefind/fragment/en_5592407.pf_fragment | Bin 1478 -> 0 bytes pagefind/fragment/en_5613c7e.pf_fragment | Bin 0 -> 5626 bytes pagefind/fragment/en_5dc13d5.pf_fragment | Bin 0 -> 804 bytes pagefind/fragment/en_5ef2dc4.pf_fragment | Bin 0 -> 792 bytes pagefind/fragment/en_63967ea.pf_fragment | Bin 3558 -> 0 bytes pagefind/fragment/en_6575a28.pf_fragment | Bin 1543 -> 0 bytes pagefind/fragment/en_6b1e1fa.pf_fragment | Bin 1226 -> 0 bytes pagefind/fragment/en_6bf92c5.pf_fragment | Bin 0 -> 892 bytes pagefind/fragment/en_6cf5a81.pf_fragment | Bin 0 -> 2702 bytes pagefind/fragment/en_7271802.pf_fragment | Bin 805 -> 0 bytes pagefind/fragment/en_7528af7.pf_fragment | Bin 2080 -> 0 bytes pagefind/fragment/en_7637b17.pf_fragment | Bin 5629 -> 0 bytes pagefind/fragment/en_7c8e50f.pf_fragment | Bin 846 -> 0 bytes pagefind/fragment/en_8194e8a.pf_fragment | Bin 1307 -> 0 bytes pagefind/fragment/en_8ae90ca.pf_fragment | Bin 2362 -> 0 bytes pagefind/fragment/en_9a9f929.pf_fragment | Bin 0 -> 3633 bytes pagefind/fragment/en_a34ea13.pf_fragment | Bin 0 -> 659 bytes pagefind/fragment/en_a53befd.pf_fragment | Bin 0 -> 3598 bytes pagefind/fragment/en_a56e28c.pf_fragment | Bin 894 -> 0 bytes pagefind/fragment/en_ab6f333.pf_fragment | Bin 0 -> 1491 bytes pagefind/fragment/en_abd8506.pf_fragment | Bin 797 -> 0 bytes ...5a2.pf_fragment => en_b12f6cc.pf_fragment} | Bin 3891 -> 3888 bytes pagefind/fragment/en_b3c3c3e.pf_fragment | Bin 572 -> 0 bytes ...b14.pf_fragment => en_b6f1be6.pf_fragment} | Bin 5034 -> 5031 bytes pagefind/fragment/en_c6b0b7b.pf_fragment | Bin 659 -> 0 bytes pagefind/fragment/en_c8d5565.pf_fragment | Bin 0 -> 2727 bytes pagefind/fragment/en_d52ddfa.pf_fragment | Bin 0 -> 1038 bytes pagefind/fragment/en_d91b8b1.pf_fragment | Bin 0 -> 2419 bytes ...56e.pf_fragment => en_dfe8612.pf_fragment} | Bin 2366 -> 2363 bytes pagefind/fragment/en_e10443c.pf_fragment | Bin 0 -> 2078 bytes pagefind/fragment/en_e2a3c19.pf_fragment | Bin 2419 -> 0 bytes pagefind/fragment/en_e6718de.pf_fragment | Bin 0 -> 999 bytes pagefind/fragment/en_e7528a6.pf_fragment | Bin 2706 -> 0 bytes pagefind/fragment/en_ee9b189.pf_fragment | Bin 3635 -> 0 bytes pagefind/fragment/en_eedc9d7.pf_fragment | Bin 1495 -> 0 bytes pagefind/fragment/en_f03e848.pf_fragment | Bin 1000 -> 0 bytes pagefind/fragment/en_f3ae842.pf_fragment | Bin 0 -> 4363 bytes pagefind/fragment/en_fa1f5f5.pf_fragment | Bin 0 -> 572 bytes pagefind/fragment/en_fd44841.pf_fragment | Bin 2729 -> 0 bytes pagefind/fragment/en_ff28aa7.pf_fragment | Bin 4365 -> 0 bytes pagefind/index/en_1519ec9.pf_index | Bin 0 -> 37482 bytes pagefind/index/en_44127cd.pf_index | Bin 1868 -> 0 bytes pagefind/index/en_512d780.pf_index | Bin 0 -> 36615 bytes pagefind/index/en_62bdfb5.pf_index | Bin 36607 -> 0 bytes pagefind/index/en_8eb3305.pf_index | Bin 37494 -> 0 bytes pagefind/index/en_98f2cba.pf_index | Bin 0 -> 38312 bytes pagefind/index/en_a279613.pf_index | Bin 38428 -> 0 bytes pagefind/index/en_b2c328a.pf_index | Bin 0 -> 1786 bytes pagefind/index/en_b8c6aac.pf_index | Bin 37779 -> 0 bytes pagefind/index/en_c6dc2e8.pf_index | Bin 0 -> 37786 bytes pagefind/index/en_cda95de.pf_index | Bin 38771 -> 0 bytes pagefind/index/en_e229cca.pf_index | Bin 0 -> 38771 bytes pagefind/pagefind-entry.json | 2 +- pagefind/pagefind.en_7e489991fc.pf_meta | Bin 867 -> 0 bytes pagefind/pagefind.en_f135e52aed.pf_meta | Bin 0 -> 866 bytes seo/indexing/index.html | 2 +- seo/metadata/index.html | 2 +- setup/commerce-configuration/index.html | 2 +- setup/content-delivery-network/index.html | 2 +- setup/index.html | 2 +- setup/storefront-compatibility/index.html | 2 +- superstar/index.html | 2 +- troubleshooting/faq/index.html | 2 +- troubleshooting/pagespeed-issues/index.html | 2 +- 154 files changed, 94 insertions(+), 87 deletions(-) delete mode 100644 pagefind/fragment/en_24103bf.pf_fragment delete mode 100644 pagefind/fragment/en_25acac8.pf_fragment create mode 100644 pagefind/fragment/en_30af603.pf_fragment create mode 100644 pagefind/fragment/en_340fd37.pf_fragment create mode 100644 pagefind/fragment/en_34ff67e.pf_fragment rename pagefind/fragment/{en_945e5c7.pf_fragment => en_352392f.pf_fragment} (94%) create mode 100644 pagefind/fragment/en_35661e9.pf_fragment rename pagefind/fragment/{en_42e8c48.pf_fragment => en_395a898.pf_fragment} (87%) create mode 100644 pagefind/fragment/en_4434e39.pf_fragment create mode 100644 pagefind/fragment/en_4859f76.pf_fragment create mode 100644 pagefind/fragment/en_4aea854.pf_fragment rename pagefind/fragment/{en_7f25f5c.pf_fragment => en_4db9a52.pf_fragment} (92%) create mode 100644 pagefind/fragment/en_5288482.pf_fragment delete mode 100644 pagefind/fragment/en_54bb312.pf_fragment delete mode 100644 pagefind/fragment/en_5592407.pf_fragment create mode 100644 pagefind/fragment/en_5613c7e.pf_fragment create mode 100644 pagefind/fragment/en_5dc13d5.pf_fragment create mode 100644 pagefind/fragment/en_5ef2dc4.pf_fragment delete mode 100644 pagefind/fragment/en_63967ea.pf_fragment delete mode 100644 pagefind/fragment/en_6575a28.pf_fragment delete mode 100644 pagefind/fragment/en_6b1e1fa.pf_fragment create mode 100644 pagefind/fragment/en_6bf92c5.pf_fragment create mode 100644 pagefind/fragment/en_6cf5a81.pf_fragment delete mode 100644 pagefind/fragment/en_7271802.pf_fragment delete mode 100644 pagefind/fragment/en_7528af7.pf_fragment delete mode 100644 pagefind/fragment/en_7637b17.pf_fragment delete mode 100644 pagefind/fragment/en_7c8e50f.pf_fragment delete mode 100644 pagefind/fragment/en_8194e8a.pf_fragment delete mode 100644 pagefind/fragment/en_8ae90ca.pf_fragment create mode 100644 pagefind/fragment/en_9a9f929.pf_fragment create mode 100644 pagefind/fragment/en_a34ea13.pf_fragment create mode 100644 pagefind/fragment/en_a53befd.pf_fragment delete mode 100644 pagefind/fragment/en_a56e28c.pf_fragment create mode 100644 pagefind/fragment/en_ab6f333.pf_fragment delete mode 100644 pagefind/fragment/en_abd8506.pf_fragment rename pagefind/fragment/{en_61b05a2.pf_fragment => en_b12f6cc.pf_fragment} (89%) delete mode 100644 pagefind/fragment/en_b3c3c3e.pf_fragment rename pagefind/fragment/{en_e2f2b14.pf_fragment => en_b6f1be6.pf_fragment} (94%) delete mode 100644 pagefind/fragment/en_c6b0b7b.pf_fragment create mode 100644 pagefind/fragment/en_c8d5565.pf_fragment create mode 100644 pagefind/fragment/en_d52ddfa.pf_fragment create mode 100644 pagefind/fragment/en_d91b8b1.pf_fragment rename pagefind/fragment/{en_94c156e.pf_fragment => en_dfe8612.pf_fragment} (88%) create mode 100644 pagefind/fragment/en_e10443c.pf_fragment delete mode 100644 pagefind/fragment/en_e2a3c19.pf_fragment create mode 100644 pagefind/fragment/en_e6718de.pf_fragment delete mode 100644 pagefind/fragment/en_e7528a6.pf_fragment delete mode 100644 pagefind/fragment/en_ee9b189.pf_fragment delete mode 100644 pagefind/fragment/en_eedc9d7.pf_fragment delete mode 100644 pagefind/fragment/en_f03e848.pf_fragment create mode 100644 pagefind/fragment/en_f3ae842.pf_fragment create mode 100644 pagefind/fragment/en_fa1f5f5.pf_fragment delete mode 100644 pagefind/fragment/en_fd44841.pf_fragment delete mode 100644 pagefind/fragment/en_ff28aa7.pf_fragment create mode 100644 pagefind/index/en_1519ec9.pf_index delete mode 100644 pagefind/index/en_44127cd.pf_index create mode 100644 pagefind/index/en_512d780.pf_index delete mode 100644 pagefind/index/en_62bdfb5.pf_index delete mode 100644 pagefind/index/en_8eb3305.pf_index create mode 100644 pagefind/index/en_98f2cba.pf_index delete mode 100644 pagefind/index/en_a279613.pf_index create mode 100644 pagefind/index/en_b2c328a.pf_index delete mode 100644 pagefind/index/en_b8c6aac.pf_index create mode 100644 pagefind/index/en_c6dc2e8.pf_index delete mode 100644 pagefind/index/en_cda95de.pf_index create mode 100644 pagefind/index/en_e229cca.pf_index delete mode 100644 pagefind/pagefind.en_7e489991fc.pf_meta create mode 100644 pagefind/pagefind.en_f135e52aed.pf_meta diff --git a/activate/index.html b/activate/index.html index 73ab4f022..908b7f226 100644 --- a/activate/index.html +++ b/activate/index.html @@ -1 +1 @@ -Activate the docs | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Activate the docs

Activating the docs has begun in version 1 but will be expanded in version 2+.

\ No newline at end of file +Activate the docs | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Activate the docs

Activating the docs has begun in version 1 but will be expanded in version 2+.

\ No newline at end of file diff --git a/analytics/instrumentation/index.html b/analytics/instrumentation/index.html index d012b1860..b4128881f 100644 --- a/analytics/instrumentation/index.html +++ b/analytics/instrumentation/index.html @@ -1 +1 @@ -Instrumentation | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Analytics

Instrumentation

For Live Search and Product Recommendation APIs to work correctly, you must collect and send user interaction events to Commerce.

User interaction events power Adobe Sensei features, like intelligent merchandising for Live Search and to personalize product recommendations units. These events also populate performance dashboards for Live Search and Product Recommendations.

Adobe Client Data Layer (ACDL)

The Adobe Client Data Layer (ACDL) reduces the effort to instrument websites by providing a standardized method to expose and access any kind of data for any script. It consists of a JavaScript client-side event-driven data store that can be used on web pages to:

  • Collect data about what visitors experience on the web page
  • Communicate this data to digital analytics and reporting servers

The ACDL provides an API to:

  • Register data that is to be merged into the data layer state.
  • Trigger events that relate to the data stored in the data layer.
  • Get the current data layer state of all merged data.
  • Register listeners that are called for specific events or data changes.
  • List the history of registered data and triggered events.

Validate storefront events

To validate events, you can use this draft validator. Events written to ACDL must comply to a specific schema as defined by the Storefront Event SDK.

The boilerplate loads the Storefront Events Collector in the delayed phase to automatically send those events. For the collector to work, you must ensure that the configuration file is properly populated with all configuration parameters. The configuration parameters are a mix between those that are required for Catalog Service access and some specific to data services. The easiest way to retrieve them is using the magento/module-data-services-graphql module, which exposes additional GraphQL functionality.

\ No newline at end of file +Instrumentation | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Analytics

Instrumentation

For Live Search and Product Recommendation APIs to work correctly, you must collect and send user interaction events to Commerce.

User interaction events power Adobe Sensei features, like intelligent merchandising for Live Search and to personalize product recommendations units. These events also populate performance dashboards for Live Search and Product Recommendations.

Adobe Client Data Layer (ACDL)

The Adobe Client Data Layer (ACDL) reduces the effort to instrument websites by providing a standardized method to expose and access any kind of data for any script. It consists of a JavaScript client-side event-driven data store that can be used on web pages to:

  • Collect data about what visitors experience on the web page
  • Communicate this data to digital analytics and reporting servers

The ACDL provides an API to:

  • Register data that is to be merged into the data layer state.
  • Trigger events that relate to the data stored in the data layer.
  • Get the current data layer state of all merged data.
  • Register listeners that are called for specific events or data changes.
  • List the history of registered data and triggered events.

Validate storefront events

To validate events, you can use this draft validator. Events written to ACDL must comply to a specific schema as defined by the Storefront Event SDK.

The boilerplate loads the Storefront Events Collector in the delayed phase to automatically send those events. For the collector to work, you must ensure that the configuration file is properly populated with all configuration parameters. The configuration parameters are a mix between those that are required for Catalog Service access and some specific to data services. The easiest way to retrieve them is using the magento/module-data-services-graphql module, which exposes additional GraphQL functionality.

\ No newline at end of file diff --git a/blocks/blocks-overview/index.html b/blocks/blocks-overview/index.html index f76fb2a9f..b67fe7d0c 100644 --- a/blocks/blocks-overview/index.html +++ b/blocks/blocks-overview/index.html @@ -1 +1 @@ -Blocks overview | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Blocks overview

Learn more about the non-Commerce content blocks available for your storefronts.

\ No newline at end of file +Blocks overview | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Blocks overview

Learn more about the non-Commerce content blocks available for your storefronts.

\ No newline at end of file diff --git a/discovery/architecture/index.html b/discovery/architecture/index.html index a98c3c12e..422358698 100644 --- a/discovery/architecture/index.html +++ b/discovery/architecture/index.html @@ -1,3 +1,3 @@ Storefront architecture | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Discovery

Storefront architecture

If you’re looking for guidance about launching a production-ready, headless Adobe Commerce storefront with Edge Delivery Services, you’re in the right place!

Big picture

Headless Adobe Commerce storefronts on Edge Delivery Services are built using a composable architecture with domain-driven commerce components called drop-in components. This architecture allows you to build and deploy a storefront that is composed of multiple Adobe services, each with its own responsibility. Drop-in components are connected through APIs and can be developed, tested, and deployed independently for faster development cycles.

Drop-in components rely on Adobe Commerce and Catalog Service APIs to provide data and functionality. These components are designed to be reusable and can be shared across multiple projects. They are integrated out-of-the-box with Edge Delivery Services through the Commerce boilerplate. Adobe Commerce storefronts on Edge Delivery Services are compatible with doc-based authoring, which allows business users to create and manage content without developer intervention.

The following diagram illustrates the composable architecture of a headless Adobe Commerce storefront on Edge Delivery Services:

Composable architecture of a headless Adobe Commerce storefront on Edge Delivery
 Services.

Composable architecture of a headless Adobe Commerce storefront on Edge Delivery Services.

Storefront

The storefront is the front-end layer of your Adobe Commerce site. It is responsible for rendering the user interface and providing a seamless shopping experience for customers. The storefront is built using a combination of drop-in components, widgets, and front-end blocks that are connected to Adobe Commerce and other services through APIs and hosted on Edge Delivery Services.

The Commerce boilerplate provides an integrated set of drop-in components and widgets that you can use to build a headless Adobe Commerce storefront on Edge Delivery Services. See Create your storefront for more information.

Drop-in components and widgets

Drop-in components are domain-driven commerce components that provide specific functionality for your storefront. They are designed to be reusable and can be shared across multiple projects. Drop-in components are connected to Adobe Commerce and other services through APIs and can be developed, tested, and deployed independently for faster development cycles.

You can find the integration patterns for drop-in components and widgets as pull requests in the Commerce boilerplate repository.

The PLP/Search and autocomplete widgets can be fully customized. You can create project-specific forks of the source code repository. The boilerplate uses a fork with more optimizations. Review open pull requests, which might contain unmerged improvements for Edge Delivery Services.

The source code of drop-in components is private. You can add them to your project as NPM packages:

  • @dropins/storefront-cart
  • @dropins/storefront-checkout
  • @dropins/storefront-auth
  • @dropins/storefront-account
  • @dropins/storefront-order
  • @dropins/storefront-order-confirmation
  • @dropins/storefront-pdp
  • @dropins/tools

If you cannot use drop-in components and widgets, use the custom PDP and PLP/Search blocks that come with the Commerce boilerplate.

Front-end blocks

Blocks are the fundamental parts of a page delivered by Edge Delivery Services. A block encapsulates styling and code that drives the logical components of pages.

Edge Delivery Services comes with a comprehensive library of predefined “content” and “commerce” blocks, which can be customized to meet your project needs. Code for Edge Delivery Services projects is managed in GitHub. The code is then deployed to the Edge Delivery Services platform, where it is hosted and served to end users.

Content blocks

The Edge Delivery Services components that provide the content and layout for non-commerce pages on the storefront. These include Cards, Columns, Headers, Footers, and many more. See block collection for more information.

Commerce blocks

Compared to content blocks, commerce blocks enable Adobe Commerce functionality (such as cart, checkout, and account) and can become quite complex. They are built using the same principles as content blocks but are more tightly integrated with Adobe Commerce APIs.

Using a frontend framework can help manage the complexity. In the Commerce boilerplate, you can find examples of blocks that use a buildless version of Preact and HTM. You should only use it for blocks that require complex state management with different render states. Otherwise, stick with plain JavaScript.

Use the existing blocks in the Commerce boilerplate as a reference (for example, teaser and product recommendations). If you want to use React, it’s possible, but not recommended. React is usually too heavy (size + execution) to achieve perfect Lighthouse scores.

Adobe Commerce

Adobe Commerce is the backend system that powers your Commerce storefront. You must use version 2.4.7 or later with the storefront compatibility package installed.

Before starting the project, ensure that your Adobe Commerce backend meets the following requirements:

  • Product license: Cloud or on-premises (Magento Open Source is not supported)
  • Version: v2.4.7
  • PHP: 8.3/8.2 for Adobe Commerce 2.4.7
  • Storefront services: Ensure that the latest version of following services are installed and configured:
    • Data Connection service
    • Services Connector
    • Catalog Service
    • Live Search
    • Product Recommendations

Storefront Compatibility package

The Storefront Compatibility package extends the GraphQL schema provided with Adobe Commerce. It provides new mutations and adds missing fields that are needed to implement low-funnel drop-in components, such as the cart, checkout, user account, and order drop-in components.

Storefront services

When connecting your storefront drop-in components to your own instance of Adobe Commerce, you must ensure that your Commmerce backend is configured with the services described here. These services are required for Commerce drop-in components to function properly.

Storefront services are a set of multi-tenant services (shared app, many users, separate data) that provide access to storefront data via GraphQL APIs. These services are very fast and are not tied to scaling constraints of a Commerce environment. They provide read-only access to catalog data, which can drive product detail and list pages, search, navigation, and product recommendations. Synchronized data is stored in a “SaaS data space” available through Adobe IMS.

Availability and setup of these services are a hard requirement for building a storefront on Edge Delivery Services because only these APIs provide the performance to build sites with a 100 Lighthouse score. The storefront services APIs are available in addition to the core Adobe Commerce GraphQL APIs.

This page provides an overview of the services required for your Adobe Commerce storefront.

Data Connection service

The Data Connection extension connects your Adobe Commerce storefront to the Adobe Experience Platform and the Edge Network so that you can enrich and personalize the shopping experience for your customers. Refer to the Data Connection Guide for details and installation instructions.

Services Connector

The Services Connector connects your Commerce storefront to the Commerce backend services listed below. Refer to the Commerce Services Connector Guide for details and installation instructions.

Catalog Service

The Catalog Service module provides fast read-only access to Commerce catalog data. The product details drop-in component requires this service to render product data in the storefront. Refer to the Catalog Service Guide for details and installation instructions.

The Live Search service replaces the default Commerce catalog search and installs the Product Listing Page (PLP) widget in your storefront. Refer to the Live Search Guide for details and installation instructions.

Product Recommendations

Product Recommendations uses artificial intelligence and machine-learning algorithms (Adobe Sensei) to create personalized storefront experiences. While not a strict requirement, we recommended it for Commerce storefronts. Refer to the Product Recommendations Guide for details and installation instructions.

It provides data for product recommendations for the current shopper context and surfaces “units” such as “Customers who viewed this product also viewed” and can be placed in several areas of the site. You can configure the behavior of the service in Adobe Commerce Admin.

Edge Delivery Services

Edge Delivery Services is a cloud-based content delivery network (CDN) that provides a scalable, secure, and high-performance platform for delivering your Adobe Commerce storefront to customers around the world. It is designed to deliver dynamic content at the edge, close to the end user, to reduce latency and improve performance.

\ No newline at end of file +Services.">

Composable architecture of a headless Adobe Commerce storefront on Edge Delivery Services.

Storefront

The storefront is the front-end layer of your Adobe Commerce site. It is responsible for rendering the user interface and providing a seamless shopping experience for customers. The storefront is built using a combination of drop-in components, widgets, and front-end blocks that are connected to Adobe Commerce and other services through APIs and hosted on Edge Delivery Services.

The Commerce boilerplate provides an integrated set of drop-in components and widgets that you can use to build a headless Adobe Commerce storefront on Edge Delivery Services. See Create your storefront for more information.

Drop-in components and widgets

Drop-in components are domain-driven commerce components that provide specific functionality for your storefront. They are designed to be reusable and can be shared across multiple projects. Drop-in components are connected to Adobe Commerce and other services through APIs and can be developed, tested, and deployed independently for faster development cycles.

You can find the integration patterns for drop-in components and widgets as pull requests in the Commerce boilerplate repository.

The PLP/Search and autocomplete widgets can be fully customized. You can create project-specific forks of the source code repository. The boilerplate uses a fork with more optimizations. Review open pull requests, which might contain unmerged improvements for Edge Delivery Services.

The source code of drop-in components is private. You can add them to your project as NPM packages:

If you cannot use drop-in components and widgets, use the custom PDP and PLP/Search blocks that come with the Commerce boilerplate.

Front-end blocks

Blocks are the fundamental parts of a page delivered by Edge Delivery Services. A block encapsulates styling and code that drives the logical components of pages.

Edge Delivery Services comes with a comprehensive library of predefined “content” and “commerce” blocks, which can be customized to meet your project needs. Code for Edge Delivery Services projects is managed in GitHub. The code is then deployed to the Edge Delivery Services platform, where it is hosted and served to end users.

Content blocks

The Edge Delivery Services components that provide the content and layout for non-commerce pages on the storefront. These include Cards, Columns, Headers, Footers, and many more. See block collection for more information.

Commerce blocks

Compared to content blocks, commerce blocks enable Adobe Commerce functionality (such as cart, checkout, and account) and can become quite complex. They are built using the same principles as content blocks but are more tightly integrated with Adobe Commerce APIs.

Using a frontend framework can help manage the complexity. In the Commerce boilerplate, you can find examples of blocks that use a buildless version of Preact and HTM. You should only use it for blocks that require complex state management with different render states. Otherwise, stick with plain JavaScript.

Use the existing blocks in the Commerce boilerplate as a reference (for example, teaser and product recommendations). If you want to use React, it’s possible, but not recommended. React is usually too heavy (size + execution) to achieve perfect Lighthouse scores.

Adobe Commerce

Adobe Commerce is the backend system that powers your Commerce storefront. You must use version 2.4.7 or later with the storefront compatibility package installed.

Before starting the project, ensure that your Adobe Commerce backend meets the following requirements:

Storefront Compatibility package

The Storefront Compatibility package extends the GraphQL schema provided with Adobe Commerce. It provides new mutations and adds missing fields that are needed to implement low-funnel drop-in components, such as the cart, checkout, user account, and order drop-in components.

Storefront services

When connecting your storefront drop-in components to your own instance of Adobe Commerce, you must ensure that your Commmerce backend is configured with the services described here. These services are required for Commerce drop-in components to function properly.

Storefront services are a set of multi-tenant services (shared app, many users, separate data) that provide access to storefront data via GraphQL APIs. These services are very fast and are not tied to scaling constraints of a Commerce environment. They provide read-only access to catalog data, which can drive product detail and list pages, search, navigation, and product recommendations. Synchronized data is stored in a “SaaS data space” available through Adobe IMS.

Availability and setup of these services are a hard requirement for building a storefront on Edge Delivery Services because only these APIs provide the performance to build sites with a 100 Lighthouse score. The storefront services APIs are available in addition to the core Adobe Commerce GraphQL APIs.

This page provides an overview of the services required for your Adobe Commerce storefront.

Data Connection service

The Data Connection extension connects your Adobe Commerce storefront to the Adobe Experience Platform and the Edge Network so that you can enrich and personalize the shopping experience for your customers. Refer to the Data Connection Guide for details and installation instructions.

Services Connector

The Services Connector connects your Commerce storefront to the Commerce backend services listed below. Refer to the Commerce Services Connector Guide for details and installation instructions.

Catalog Service

The Catalog Service module provides fast read-only access to Commerce catalog data. The product details drop-in component requires this service to render product data in the storefront. Refer to the Catalog Service Guide for details and installation instructions.

The Live Search service replaces the default Commerce catalog search and installs the Product Listing Page (PLP) widget in your storefront. Refer to the Live Search Guide for details and installation instructions.

Product Recommendations

Product Recommendations uses artificial intelligence and machine-learning algorithms (Adobe Sensei) to create personalized storefront experiences. While not a strict requirement, we recommended it for Commerce storefronts. Refer to the Product Recommendations Guide for details and installation instructions.

It provides data for product recommendations for the current shopper context and surfaces “units” such as “Customers who viewed this product also viewed” and can be placed in several areas of the site. You can configure the behavior of the service in Adobe Commerce Admin.

Edge Delivery Services

Edge Delivery Services is a cloud-based content delivery network (CDN) that provides a scalable, secure, and high-performance platform for delivering your Adobe Commerce storefront to customers around the world. It is designed to deliver dynamic content at the edge, close to the end user, to reduce latency and improve performance.

\ No newline at end of file diff --git a/discovery/data-export-validation/index.html b/discovery/data-export-validation/index.html index 60f8150e2..72d05b920 100644 --- a/discovery/data-export-validation/index.html +++ b/discovery/data-export-validation/index.html @@ -1 +1 @@ -Data export validation | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Discovery

Data export validation

Data export synchronizes data between an Adobe Commerce instance and connected storefront services. Storefront services are required for dropin-in components to work correctly.

Validating the data export is crucial to ensure that the data is correctly synchronized and available for the storefront. You can use the Data Management Dashboard to monitor the data sync progress for each service.

Use GraphQL to validate that all products were synchronized and product lookup and search are working. See GraphQL queries and Postman sample collection for queries.

For more complex catalogs, reach out to the Adobe team on Discord to validate that the exported data is correct. This might require you to provide a database dump or direct access. Please also reach out to the Adobe team if you encounter any currently un-supported use cases, so that they can be enabled in the future.

\ No newline at end of file +Data export validation | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Discovery

Data export validation

Data export synchronizes data between an Adobe Commerce instance and connected storefront services. Storefront services are required for dropin-in components to work correctly.

Validating the data export is crucial to ensure that the data is correctly synchronized and available for the storefront. You can use the Data Management Dashboard to monitor the data sync progress for each service.

Use GraphQL to validate that all products were synchronized and product lookup and search are working. See GraphQL queries and Postman sample collection for queries.

For more complex catalogs, reach out to the Adobe team on Discord to validate that the exported data is correct. This might require you to provide a database dump or direct access. Please also reach out to the Adobe team if you encounter any currently un-supported use cases, so that they can be enabled in the future.

\ No newline at end of file diff --git a/discovery/index.html b/discovery/index.html index 92c8dca4e..d2ef1f235 100644 --- a/discovery/index.html +++ b/discovery/index.html @@ -1,3 +1,3 @@ Overview | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Discovery

Overview

Before starting any Adobe Commerce on Edge Delivery Services project, you must conduct a discovery phase to scope the project and ensure that there are no major roadblocks or risks.

Big picture

In the create your storefront tutorial, you learned how to quickly create a new project based on the Commerce boilerplate template. The boilerplate provides a starter storefront that uses a pre-configured Adobe Commerce environment.

The next step is to plan, build, optimize, and launch a production-ready storefront connected to your own Adobe Commerce instance and storefront services. Here’s an overview of the process:

Storefront project planning and delivery
 process.

Storefront project planning and delivery process.
  1. Discovery: Understand the requirements and goals of the project.
  2. Setup: Configure the project environment and tools.
  3. Analytics: Instrument the storefront to collect user interaction events.
  4. SEO: Optimize the storefront for search engines and marketing campaigns.
  5. Drop-in components: Develop and integrate drop-in components to enhance the storefront experience.
  6. Launch: Deploy the storefront to a production environment.

Project scope

The discovery phase is important because Adobe Commerce is a highly customizable platform with a large thid-party extension ecosystem. Migrating an Adobe Commerce storefront to Edge Delivery Services is similar to migrating to a headless storefront (like PWA Studio).

Successfully building a storefront requires a well-defined plan and a phased approach. Here are some key steps to consider:

Phased launch

Fast return on investment (ROI) and learnings:

  • Break down project scope into small milestones
  • Small milestones result in faster time-to-value (TTV), learnings, and higher quality
  • Define a rollout and rollback strategy for each milestone (for example, split traffic)

Adobe recommends the following launch phases:

  • Homepage and content pages with high-acquisition traffic that benefit from SEO improvement
  • Catalog pages (PDP and PLP) with high-conversion traffic that benefit from performance improvements
  • Checkout and account pages with high-retention traffic that benefit from personalization

Metrics

Define what success should look like in each phase:

  • Define measureable business and technical metrics that are impacted by launch
  • Establish a baseline for each metric before launch
  • Create a realistic forecast of what to expect over time

Validation

Validate the impact of changes:

  • Validate launch impact using your baseline and forecast
  • Prioritize fixing issues you and your team can be resolve quickly
  • Rollback if issues are unclear or if a fix will take too long
  • Improve and test code before the next launch

An iterative approach to launching your storefront will help you quickly identify and resolve issues, and improve the overall quality of your project. The following diagram illustrates the iterative approach:

Iterative rollout process.

Iterative rollout process.

Use cases and requirements

Document your use cases and requirements and create a plan for how you will implement them. Adobe offers pre-built components that accelerates development (drop-in components and widgets).

Drop-in components are re-useable components that define the storefront shopping experience. They are framework agnostic and can be used in any context (Edge Delivery Services, AEM, Luma). However, this documentation focuses on the use of drop-in components in Edge Delivery Services projects using the boilerplate template. The drop-in component development roadmap is synchronised with Adobe Commerce APIs, so new API features are automatically available in drop-in components and widgets.

Storefront widgets in Adobe Commerce Live Search are tools that enhance the search functionality on your site. Widgets are designed to improve the user experience by making search results more accessible and relevant. There are two main types of widgets:

  • Live Search Popover: This widget appears as a box under the search field, displaying search results dynamically as users type their queries.
  • Product Listing Page (PLP): This widget provides a searchable product listing page with facets and synonym support, making it easier for users to find products.

If you see gaps in what the drop-in components support, Adobe can help with a plan to achieve your scenarios. For example:

  • Identify if drop-in components can solve your use cases and requirements
  • Identify what use cases are already supported, what is a gap, and what needs to be implemented differently from what is available out-of-the-box
  • Reach out to the Adobe team early to share your use cases and get the recommendations about how to fulfill them: commerce-storefront-compatibility@adobe.com

The Live Search Popover and PLP has two integration paths:

  • Using the out-of-the-box hosted option where Adobe hosts the JavaScript file

    • Automatic updates for fixes and small features
    • Small upgrades available for major or breaking features
    • Can change some styling
  • Using the customized option where Adobe provides a reference implementation for the components

    • Full control of customization and look and feel
    • You host the library and own the total cost of ownership

Extensions

Before starting the project, use the following list to create an inventory of the Adobe Commerce extensions that are actively being used. This will help you understand which extensions can be replaced by out-of-the-box Adobe Commerce functionality.

  • What extensions are currently in use?

  • What type of data do the extensions provide (for example, reviews)?

  • Is the data required on the frontend?

  • How do the extensions expose the data (for example, GraphQL, REST API)?

  • Do the extensions expose an API to access data (for example, Amasty Labels)? If not, create an action item to expose the required data through an API. Options include:

  • Are any of the extensions for delivery options (for example, shipping/BOPIS), payments, or tax providers? If you use third-party solutions, clarify if they expose APIs on the frontend and if they provide their own set of drop-in components for the frontend integration.

Existing storefronts

There are a couple of options for modernizing your existing storefront with Edge Delivery Services:

  • Progressive implementation: Rebuild selected parts of the commerce funnel on Edge Delivery Services and the reuse the rest from your existing storefront.
  • Full implementation: Rebuild your entire storefront on Edge Delivery Services retire your existing storefront.

A progressive implementation enables you to unlock business value with Edge Delivery Services sooner, minimizing the risks associated with migration. You can start by implementing the home page only and reusing the rest of your existing storefront. The next step could be implementing catalog with product listing, search, and product details and reusing cart, checkout, and account from your existing storefront.

This approach comes with the cost of maintaining two storefronts in parallel, so before you choose, assess which approach is right for you. These are the key factors to consider:

  • Business metrics to improve:

    • What areas of your existing storefront drive business performance?
    • What are the challenges based on the site analytics that you see?
  • Level of storefront customization:

    • How many experiences are built with custom code on your storefront?
    • Do these eexperiences rely on custom business logic?
  • Third-party extensions:

    • How many third-party extensions are you using on your existing storefront?
    • Do you need to connect to third-party services?
  • B2B:

    • Are there any Adobe Commerce B2B modules enabled on your existing storefront?

Adobe recommends the progressive implementation if any of the following are true:

  • The main business metrics are brand visibility in search engines, customer acquisition cost, and customer engagement.
  • The existing storefront is heavily customized in the areas of checkout and user account.
  • There are many third-party integrations in the existing storefront that affect transactional flow.
  • The existing storefront supports B2B use cases with Adobe Commerce modules.

The full implementation is a better option if any of the following are true:

  • Your business objectives include improving customer conversion and re-engagement.
  • The current checkout flow only relies on a few thid-party integrations (for example, payments, shipping, taxes).
  • No Adobe Commerce B2B modules are enabled on the existing storefront.
CriteriaProgressive ImplementationFull Implementation
DescriptionRebuild selected parts of the commerce funnel on Edge Delivery Services and reuse the rest from your existing storefront.Rebuild your entire storefront on Edge Delivery Services and retire your existing storefront.
Business Metrics to ImproveBrand visibility in search engines, customer acquisition cost, customer engagement.Customer conversion, customer re-engagement.
Level of CustomizationHeavily customized in areas like checkout and user account.Minimal customization, relies on a few third-party integrations (e.g., payments, shipping, taxes).
Third-Party IntegrationsMany third-party integrations affecting transactional flow.Few third-party integrations.
B2B ModulesSupports B2B use cases with Adobe Commerce modules.No Adobe Commerce B2B modules enabled.
Project ScopeIdentify use cases for new and existing storefronts (e.g., catalog, product detail, cart, checkout, customer account).Verify use cases are available through Adobe Commerce GraphQL APIs.
Third-Party ExtensionsIdentify necessary extensions and their reliance on third-party services.Identify necessary extensions and their reliance on third-party services.
Storefront Bridge OptionsPlan to connect existing storefront with the new one (e.g., using Luma Bridge).Not applicable.

Progressive implementation

For the progressive implementation, you’ll need to look into the following:

  • Project scope: Identify which use cases the new storefront will handle and which ones the existing storefront will continue to manage, such as catalog, product detail, cart, checkout, and customer account.
  • Third-party extensions: Identify the list of extensions you will need on your new storefront and determine if they rely on integrating third-party services.
  • Storefront bridge options: Plan to connect the existing storefront with the new one. If you are using Adobe Commerce native storefront with Luma, you can use the Luma Bridge.

Full implementation

For the full implementation, the list of considerations is similar to the progressive implementation:

  • Project scope: Identify which use cases the new storefront will handle and verify that they are available through Adobe Commerce GraphQL APIs.
  • Third-party extensions: Identify the list of extensions you will need on your new storefront and determine if they rely on integrating third-party services.
\ No newline at end of file +process.">

Storefront project planning and delivery process.
  1. Discovery: Understand the requirements and goals of the project.
  2. Setup: Configure the project environment and tools.
  3. Analytics: Instrument the storefront to collect user interaction events.
  4. SEO: Optimize the storefront for search engines and marketing campaigns.
  5. Drop-in components: Develop and integrate drop-in components to enhance the storefront experience.
  6. Launch: Deploy the storefront to a production environment.

Project scope

The discovery phase is important because Adobe Commerce is a highly customizable platform with a large thid-party extension ecosystem. Migrating an Adobe Commerce storefront to Edge Delivery Services is similar to migrating to a headless storefront (like PWA Studio).

Successfully building a storefront requires a well-defined plan and a phased approach. Here are some key steps to consider:

Phased launch

Fast return on investment (ROI) and learnings:

  • Break down project scope into small milestones
  • Small milestones result in faster time-to-value (TTV), learnings, and higher quality
  • Define a rollout and rollback strategy for each milestone (for example, split traffic)

Adobe recommends the following launch phases:

  • Homepage and content pages with high-acquisition traffic that benefit from SEO improvement
  • Catalog pages (PDP and PLP) with high-conversion traffic that benefit from performance improvements
  • Checkout and account pages with high-retention traffic that benefit from personalization

Metrics

Define what success should look like in each phase:

  • Define measureable business and technical metrics that are impacted by launch
  • Establish a baseline for each metric before launch
  • Create a realistic forecast of what to expect over time

Validation

Validate the impact of changes:

  • Validate launch impact using your baseline and forecast
  • Prioritize fixing issues you and your team can be resolve quickly
  • Rollback if issues are unclear or if a fix will take too long
  • Improve and test code before the next launch

An iterative approach to launching your storefront will help you quickly identify and resolve issues, and improve the overall quality of your project. The following diagram illustrates the iterative approach:

Iterative rollout process.

Iterative rollout process.

Use cases and requirements

Document your use cases and requirements and create a plan for how you will implement them. Adobe offers pre-built components that accelerates development (drop-in components and widgets).

Drop-in components are re-useable components that define the storefront shopping experience. They are framework agnostic and can be used in any context (Edge Delivery Services, AEM, Luma). However, this documentation focuses on the use of drop-in components in Edge Delivery Services projects using the boilerplate template. The drop-in component development roadmap is synchronised with Adobe Commerce APIs, so new API features are automatically available in drop-in components and widgets.

Storefront widgets in Adobe Commerce Live Search are tools that enhance the search functionality on your site. Widgets are designed to improve the user experience by making search results more accessible and relevant. There are two main types of widgets:

If you see gaps in what the drop-in components support, Adobe can help with a plan to achieve your scenarios. For example:

The Live Search Popover and PLP has two integration paths:

Extensions

Before starting the project, use the following list to create an inventory of the Adobe Commerce extensions that are actively being used. This will help you understand which extensions can be replaced by out-of-the-box Adobe Commerce functionality.

Existing storefronts

There are a couple of options for modernizing your existing storefront with Edge Delivery Services:

A progressive implementation enables you to unlock business value with Edge Delivery Services sooner, minimizing the risks associated with migration. You can start by implementing the home page only and reusing the rest of your existing storefront. The next step could be implementing catalog with product listing, search, and product details and reusing cart, checkout, and account from your existing storefront.

This approach comes with the cost of maintaining two storefronts in parallel, so before you choose, assess which approach is right for you. These are the key factors to consider:

Adobe recommends the progressive implementation if any of the following are true:

The full implementation is a better option if any of the following are true:

CriteriaProgressive ImplementationFull Implementation
DescriptionRebuild selected parts of the commerce funnel on Edge Delivery Services and reuse the rest from your existing storefront.Rebuild your entire storefront on Edge Delivery Services and retire your existing storefront.
Business Metrics to ImproveBrand visibility in search engines, customer acquisition cost, customer engagement.Customer conversion, customer re-engagement.
Level of CustomizationHeavily customized in areas like checkout and user account.Minimal customization, relies on a few third-party integrations (e.g., payments, shipping, taxes).
Third-Party IntegrationsMany third-party integrations affecting transactional flow.Few third-party integrations.
B2B ModulesSupports B2B use cases with Adobe Commerce modules.No Adobe Commerce B2B modules enabled.
Project ScopeIdentify use cases for new and existing storefronts (e.g., catalog, product detail, cart, checkout, customer account).Verify use cases are available through Adobe Commerce GraphQL APIs.
Third-Party ExtensionsIdentify necessary extensions and their reliance on third-party services.Identify necessary extensions and their reliance on third-party services.
Storefront Bridge OptionsPlan to connect existing storefront with the new one (e.g., using Luma Bridge).Not applicable.

Progressive implementation

For the progressive implementation, you’ll need to look into the following:

Full implementation

For the full implementation, the list of considerations is similar to the progressive implementation:

\ No newline at end of file diff --git a/discovery/luma-bridge/index.html b/discovery/luma-bridge/index.html index 8071d3473..9acdeb85a 100644 --- a/discovery/luma-bridge/index.html +++ b/discovery/luma-bridge/index.html @@ -1 +1 @@ -Luma Bridge | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Discovery

Luma Bridge

This section provides guidance on how to implement the Luma Bridge for your Adobe Commerce on Edge Delivery Services project.

Before starting an implementation, clarify the following:

  • Architecture of the cart, checkout, and account pages
  • Complexity of the cart, checkout, and account pages
  • Requirements for customization of the cart, checkout, and account pages

This information will help you decide whether to use Luma Bridge or a headless implementation for the cart, checkout, and account pages.

What is Luma Bridge?

Luma Bridge is a session management mechanism between two storefronts:

  • The main storefront (headless storefront) that is built using Adobe Commerce on Edge Delivery Services
  • The Luma PHP storefront that is built using Adobe Commerce

It allows you to reuse complex transactional parts of your storefront (such as, cart, checkout, and account) instead of rebuilding them. This approach provides a path for Adobe customers currently using Luma to migrate to a highly performant shopping experience. It focuses on converting the top of the funnel while keeping the last mile of the funnel in Luma. This allows you to benefit from Adobe innovations while preserving your investments in the existing storefront.

If the previous discovery steps led to the conclusion that dropin-in components can be used for cart, checkout, and account experiences, Luma Bridge is not necessary or can be reduced to parts that are not covered by dropin-in components (for example, complex customizations). If existing headless implementations for cart, checkout, and account (PWA Studio, Vue Storefront) are available, Luma Bridge is not necessary.

Where can I get it?

Luma Bridge is available from the following providers:

How do I imeplement it?

There are three options for integrating features from both Luma and Edge Delivery Services:

  • Session cookie only (recommended)—Edge Delivery Services falls back to Luma for authentication and customer session handling.
  • Session cookie + web API token—When a customer authenticates through Luma, the web API token must be generated as well. When a customer authenticates through Edge Delivery Services, the customer session cookie must also be generated. It is then the responsibility of Luma and Edge Delivery Services to manage both keys. This approach increases the complexity of authentication handling logic.
  • Web API token only—Although the most straightforward option, it isn’t supported in Luma scenarios and requires modifications in the Luma authentication layer.
Session Cookie OnlySession Cookie + Web API TokenWeb API Token Only
Works out-of-the-box for Luma scenarios
Works out-of-the-box for Edge Delivery Services scenarios
Does not require modifications to Luma authentication mechanisms and minimizes security risks
Supports seamless, custom user experience
Minimizes complexity of the authentication handling logic for the client application

Details

  • Edge Delivery Services relies on iFrames to render the Luma login form; avoiding potential issues with cross-site request forgery (CSRF) tokens that can only be generated by the Luma backend.
  • After a successful login, Luma scripts in the iFrame communicate back to the Edge Delivery Services parent window to perform necessary user interface updates without reloading the entire page.
  • When the customer session cookie is set, all GraphQL queries from the Edge Delivery Services storefront are automatically authenticated.
  • Edge Delivery Services uses invisible iFrames to invoke Luma logout.
  • Luma’s authentication behavior remains unchanged.
  • Luma and Edge Delivery Services must be on the same domain and must use the same protocol.
\ No newline at end of file +Luma Bridge | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Discovery

Luma Bridge

This section provides guidance on how to implement the Luma Bridge for your Adobe Commerce on Edge Delivery Services project.

Before starting an implementation, clarify the following:

  • Architecture of the cart, checkout, and account pages
  • Complexity of the cart, checkout, and account pages
  • Requirements for customization of the cart, checkout, and account pages

This information will help you decide whether to use Luma Bridge or a headless implementation for the cart, checkout, and account pages.

What is Luma Bridge?

Luma Bridge is a session management mechanism between two storefronts:

  • The main storefront (headless storefront) that is built using Adobe Commerce on Edge Delivery Services
  • The Luma PHP storefront that is built using Adobe Commerce

It allows you to reuse complex transactional parts of your storefront (such as, cart, checkout, and account) instead of rebuilding them. This approach provides a path for Adobe customers currently using Luma to migrate to a highly performant shopping experience. It focuses on converting the top of the funnel while keeping the last mile of the funnel in Luma. This allows you to benefit from Adobe innovations while preserving your investments in the existing storefront.

If the previous discovery steps led to the conclusion that dropin-in components can be used for cart, checkout, and account experiences, Luma Bridge is not necessary or can be reduced to parts that are not covered by dropin-in components (for example, complex customizations). If existing headless implementations for cart, checkout, and account (PWA Studio, Vue Storefront) are available, Luma Bridge is not necessary.

Where can I get it?

Luma Bridge is available from the following providers:

How do I imeplement it?

There are three options for integrating features from both Luma and Edge Delivery Services:

  • Session cookie only (recommended)—Edge Delivery Services falls back to Luma for authentication and customer session handling.
  • Session cookie + web API token—When a customer authenticates through Luma, the web API token must be generated as well. When a customer authenticates through Edge Delivery Services, the customer session cookie must also be generated. It is then the responsibility of Luma and Edge Delivery Services to manage both keys. This approach increases the complexity of authentication handling logic.
  • Web API token only—Although the most straightforward option, it isn’t supported in Luma scenarios and requires modifications in the Luma authentication layer.
Session Cookie OnlySession Cookie + Web API TokenWeb API Token Only
Works out-of-the-box for Luma scenarios
Works out-of-the-box for Edge Delivery Services scenarios
Does not require modifications to Luma authentication mechanisms and minimizes security risks
Supports seamless, custom user experience
Minimizes complexity of the authentication handling logic for the client application

Details

  • Edge Delivery Services relies on iFrames to render the Luma login form; avoiding potential issues with cross-site request forgery (CSRF) tokens that can only be generated by the Luma backend.
  • After a successful login, Luma scripts in the iFrame communicate back to the Edge Delivery Services parent window to perform necessary user interface updates without reloading the entire page.
  • When the customer session cookie is set, all GraphQL queries from the Edge Delivery Services storefront are automatically authenticated.
  • Edge Delivery Services uses invisible iFrames to invoke Luma logout.
  • Luma’s authentication behavior remains unchanged.
  • Luma and Edge Delivery Services must be on the same domain and must use the same protocol.
\ No newline at end of file diff --git a/dropins/all/anatomy/index.html b/dropins/all/anatomy/index.html index 6207a1027..bca5f889a 100644 --- a/dropins/all/anatomy/index.html +++ b/dropins/all/anatomy/index.html @@ -1 +1 @@ -Anatomy of a drop-in | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Anatomy of a drop-in

\ No newline at end of file +Anatomy of a drop-in | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Anatomy of a drop-in

\ No newline at end of file diff --git a/dropins/all/branding/index.html b/dropins/all/branding/index.html index 91da28690..311689435 100644 --- a/dropins/all/branding/index.html +++ b/dropins/all/branding/index.html @@ -3,4 +3,4 @@
--type-headline-1-font: normal normal 400 24px/32px var(--type-display-font-family); /* Desktop & tablet page title */
--type-headline-1-letter-spacing: 0.04em;
--type-headline-2-default-font: normal normal 300 20px/24px var(--type-display-font-family); /* Rail title */
--type-headline-2-default-letter-spacing: 0.04em;
--type-headline-2-strong-font: normal normal 400 20px/24px var(--type-display-font-family); /* Mobile page and section title */
--type-headline-2-strong-letter-spacing: 0.04em;
--type-body-1-default-font: normal normal 300 16px/24px var(--type-body-font-family); /* Normal text paragraph */
--type-body-1-default-letter-spacing: 0.04em;
--type-body-1-strong-font: normal normal 400 16px/24px var(--type-body-font-family);
--type-body-1-strong-letter-spacing: 0.04em;
--type-body-1-emphasized-font: normal normal 700 16px/24px var(--type-body-font-family);
--type-body-1-emphasized-letter-spacing: 0.04em;
--type-body-2-default-font: normal normal 300 14px/20px var(--type-body-font-family);
--type-body-2-default-letter-spacing: 0.04em;
--type-body-2-strong-font: normal normal 400 14px/20px var(--type-body-font-family);
--type-body-2-strong-letter-spacing: 0.04em;
--type-body-2-emphasized-font: normal normal 700 14px/20px var(--type-body-font-family);
--type-body-2-emphasized-letter-spacing: 0.04em;
--type-button-1-font: normal normal 400 20px/26px var(--type-body-font-family); /* Primary button text */
--type-button-1-letter-spacing: 0.08em;
--type-button-2-font: normal normal 400 16px/24px var(--type-body-font-family); /* Small buttons */
--type-button-2-letter-spacing: 0.08em;
-
--type-details-caption-1-font: normal normal 400 12px/16px var(--type-details-font-family);
--type-details-caption-1-letter-spacing: 0.08em;
--type-details-caption-2-font: normal normal 300 12px/16px var(--type-details-font-family);
--type-details-caption-2-letter-spacing: 0.08em;
--type-details-overline-font: normal normal 700 12px/20px var(--type-details-font-family);
--type-details-overline-letter-spacing: 0.16em;
}

Continue with spacing, shapes, layouts, and colors.

Use the same process for overriding the spacing, shapes, grids, and color token values. With a company’s brand guidelines, you can start discovering how to map brand categories to the design-token values you need to override. But it’s not always straightforward. Mapping brand colors to the color token options can be challenging. This is when you will need to work closely with the design team to make decisions about which design tokens to override and how to map your brand colors to the available options.

Summary

The process of branding dropin-in components is typically fast and easy. Focus on one brand category at a time and work with your designers to solve the less obvious brand-to-token overrides.

\ No newline at end of file +
--type-details-caption-1-font: normal normal 400 12px/16px var(--type-details-font-family);
--type-details-caption-1-letter-spacing: 0.08em;
--type-details-caption-2-font: normal normal 300 12px/16px var(--type-details-font-family);
--type-details-caption-2-letter-spacing: 0.08em;
--type-details-overline-font: normal normal 700 12px/20px var(--type-details-font-family);
--type-details-overline-letter-spacing: 0.16em;
}

Continue with spacing, shapes, layouts, and colors.

Use the same process for overriding the spacing, shapes, grids, and color token values. With a company’s brand guidelines, you can start discovering how to map brand categories to the design-token values you need to override. But it’s not always straightforward. Mapping brand colors to the color token options can be challenging. This is when you will need to work closely with the design team to make decisions about which design tokens to override and how to map your brand colors to the available options.

Summary

The process of branding dropin-in components is typically fast and easy. Focus on one brand category at a time and work with your designers to solve the less obvious brand-to-token overrides.

\ No newline at end of file diff --git a/dropins/all/enriching/index.html b/dropins/all/enriching/index.html index 749db3edc..3c92e784a 100644 --- a/dropins/all/enriching/index.html +++ b/dropins/all/enriching/index.html @@ -1 +1 @@ -Enriching dropin-in components | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Enriching dropin-in components

Enriching dropin-in components is similar to adding content with slots. The difference is in scale. Enrichment is an Edge Delivery feature that provides a way to add content to entire product categories. Let’s try it out.

\ No newline at end of file +Enriching dropin-in components | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Enriching dropin-in components

Enriching dropin-in components is similar to adding content with slots. The difference is in scale. Enrichment is an Edge Delivery feature that provides a way to add content to entire product categories. Let’s try it out.

\ No newline at end of file diff --git a/dropins/all/eventbus/index.html b/dropins/all/eventbus/index.html index 6ed1af8e9..7629aa864 100644 --- a/dropins/all/eventbus/index.html +++ b/dropins/all/eventbus/index.html @@ -1 +1 @@ -Introduction to dropin-in components | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Introduction to dropin-in components

\ No newline at end of file +Introduction to dropin-in components | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Introduction to dropin-in components

\ No newline at end of file diff --git a/dropins/all/extending/index.html b/dropins/all/extending/index.html index 16ed20fe5..c5042f02f 100644 --- a/dropins/all/extending/index.html +++ b/dropins/all/extending/index.html @@ -1 +1 @@ -Extending dropin-in components | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Drop-in components

Extending dropin-in components

Using slots provides the deepest level of customization. Slots are built-in extension points in the drop-in. A slot provides a place in the drop-in component to add your own UI components and functions. This architecture makes it easy to change the default look, layout, and behavior. Let’s learn how it works.

Big Picture

What is a slot?
What is a slot?
  1. prependSibling: A function to prepend a new HTML element before the slot’s content.
  2. prependChild: A function to prepend a new HTML element to the slot’s content.
  3. replaceWith: A function to replace the slot’s content with a new HTML element.
  4. appendChild: A function to append a new HTML element to the slot’s content.
  5. appendSibling: A function to append a new HTML element after the slot’s content.
  6. getSlotElement: A function to get a slot element.
  7. onChange: A function to listen to changes in the slot’s context.
  8. dictionary: JSON Object for the current locale. If the locale changes, the dictionary values change to reflect the values for the selected language.

Vocabulary

Container

Component that manages or encapsulates other components. Containers handle logic, fetch data, manage state, and pass data to the UI components that are rendered on the screen.

Slot

Component that provides placeholders to add other components. You can use a drop-in component’s built-in slots to add or remove UI components and functions. Or you can add your own additional Slots.

Component

Overloaded term in web development. Everything is a component. It’s components all the way down. This is why we need to be specific about what kind of component we are talking about. For example, from top-to-bottom, big-to-small, a drop-in component can contain multiple container components that can contain multiple slot components that can contain multiple UI components.

\ No newline at end of file +Extending dropin-in components | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Drop-in components

Extending dropin-in components

Using slots provides the deepest level of customization. Slots are built-in extension points in the drop-in. A slot provides a place in the drop-in component to add your own UI components and functions. This architecture makes it easy to change the default look, layout, and behavior. Let’s learn how it works.

Big Picture

What is a slot?
What is a slot?
  1. prependSibling: A function to prepend a new HTML element before the slot’s content.
  2. prependChild: A function to prepend a new HTML element to the slot’s content.
  3. replaceWith: A function to replace the slot’s content with a new HTML element.
  4. appendChild: A function to append a new HTML element to the slot’s content.
  5. appendSibling: A function to append a new HTML element after the slot’s content.
  6. getSlotElement: A function to get a slot element.
  7. onChange: A function to listen to changes in the slot’s context.
  8. dictionary: JSON Object for the current locale. If the locale changes, the dictionary values change to reflect the values for the selected language.

Vocabulary

Container

Component that manages or encapsulates other components. Containers handle logic, fetch data, manage state, and pass data to the UI components that are rendered on the screen.

Slot

Component that provides placeholders to add other components. You can use a drop-in component’s built-in slots to add or remove UI components and functions. Or you can add your own additional Slots.

Component

Overloaded term in web development. Everything is a component. It’s components all the way down. This is why we need to be specific about what kind of component we are talking about. For example, from top-to-bottom, big-to-small, a drop-in component can contain multiple container components that can contain multiple slot components that can contain multiple UI components.

\ No newline at end of file diff --git a/dropins/all/installing/index.html b/dropins/all/installing/index.html index 88bc60f9c..7eece2ad5 100644 --- a/dropins/all/installing/index.html +++ b/dropins/all/installing/index.html @@ -1 +1 @@ -Installing dropin-in components | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Drop-in components

Installing dropin-in components

Drop-in components are designed for the browser’s JavaScript run-time without the need for a bundler. But they can also be installed and executed in a build-time environment with bundlers like Webpack and Vite. The installation steps for both run-time and build-time environments are the same after the initial drop-in component package imports.

Why install dropin-in components?

Installing dropin-in components is essential for customizing and enhancing your Adobe Commerce storefront, especially if you choose not to start with the boilerplate template. It is a strategic choice for businesses looking to customize, optimize, and scale their Adobe Commerce storefronts effectively. This approach provides the flexibility and modularity needed to create a unique and high-performing online shopping experience.

If you have an existing storefront project and are not starting with the boilerplate template, you can install dropin-in components individually to add the specific features that you need.

Workflow

The following diagram provides an overview of the steps necessary for installing a drop-in:

PDP Installation

The installation of all dropin-in components follows the same pattern described in the workflow diagram above. Refer to the following resources for step-by-step instructions to install specific dropin-in components:

\ No newline at end of file +Installing dropin-in components | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Drop-in components

Installing dropin-in components

Drop-in components are designed for the browser’s JavaScript run-time without the need for a bundler. But they can also be installed and executed in a build-time environment with bundlers like Webpack and Vite. The installation steps for both run-time and build-time environments are the same after the initial drop-in component package imports.

Why install dropin-in components?

Installing dropin-in components is essential for customizing and enhancing your Adobe Commerce storefront, especially if you choose not to start with the boilerplate template. It is a strategic choice for businesses looking to customize, optimize, and scale their Adobe Commerce storefronts effectively. This approach provides the flexibility and modularity needed to create a unique and high-performing online shopping experience.

If you have an existing storefront project and are not starting with the boilerplate template, you can install dropin-in components individually to add the specific features that you need.

Workflow

The following diagram provides an overview of the steps necessary for installing a drop-in:

PDP Installation

The installation of all dropin-in components follows the same pattern described in the workflow diagram above. Refer to the following resources for step-by-step instructions to install specific dropin-in components:

\ No newline at end of file diff --git a/dropins/all/introduction/index.html b/dropins/all/introduction/index.html index 95e2d441d..7200545c0 100644 --- a/dropins/all/introduction/index.html +++ b/dropins/all/introduction/index.html @@ -1 +1 @@ -Drop-in components overview | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Drop-in components

Drop-in components overview

Drop-in components (with Commerce services) make up the entire storefront experience. They are equivalent to small apps that you can mix and match to create a storefront that fits your needs.

What are dropin-in components?

Drop-in components are full-featured shopping components. They are not primitive components like Carousels and Galleries. dropin-in components define the storefront shopping experience. Our dropin-in components include product details, carts, checkout, user authentication, user accounts, with more on the way. This section introduces these dropin-in components and provides links to their details.

Product details

The product details drop-in component renders detailed information about products and services, including SKUs, pricing, descriptions, and customizable options, with built-in support for internationalization and accessibility. This drop-in component is a key component of the e-commerce experience, providing users with essential product information to enable informed purchasing decisions.

Cart

Ready to Implement The cart drop-in provides a summary of the items that the user has added to their cart. It allows users to view and manage their cart contents, update quantities, and proceed to checkout. The cart is a critical component of the e-commerce experience, providing users with a convenient way to review and adjust their selections before completing their purchase.

Checkout

Ready to Implement The checkout drop-in component is a key component of the e-commerce experience, providing users with a streamlined process for completing their purchase. It allows users to enter shipping and payment information, review their order details, and confirm their purchase.

User authentication

Ready to Implement The user authentication drop-in component provides users with a secure and seamless way to log in or create an account on your e-commerce platform. It supports various authentication methods, including email, social media, and single sign-on (SSO), ensuring a smooth user experience across devices and platforms.

User account

In Development The user account drop-in component provides users with a personalized experience, allowing them to view their order history, manage their account settings, and access other account-related features.

How can I customize dropin-in components?

All dropin-in components can be customized in five ways: design tokens, CSS classes, slots, content enrichment, and localization. In this section, you’ll learn how to use each approach.

Design tokens

Design tokens are the quickest way to customize your storefront. By changing the default token values with your own brand colors, typography, spacing, and shapes, you can make quick, global brand changes to your entire storefront.

CSS classes

CSS classes provide deeper style changes for dropin-in components than design tokens. Overriding or adding new CSS classes allows you to restyle specific areas of the drop-in component. You’ll find best practices for styling here.

Slots

Slots provide the deepest level of customization. Slots are built-in extension points in the drop-in component to add your own UI components and functions. You’ll learn how powerful slots can be.

Content enrichment

Content enrichment is similar to adding content with slots. The difference is in scale. Enrichment is an Edge Delivery feature that allows you to add content to entire product categories.

Localization

Localization is one of the easiest ways to customize dropin-in components for a region. This topic shows you how to add and use a second language file in your dropin-in components.

\ No newline at end of file +Drop-in components overview | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Drop-in components

Drop-in components overview

Drop-in components (with Commerce services) make up the entire storefront experience. They are equivalent to small apps that you can mix and match to create a storefront that fits your needs.

What are dropin-in components?

Drop-in components are full-featured shopping components. They are not primitive components like Carousels and Galleries. dropin-in components define the storefront shopping experience. Our dropin-in components include product details, carts, checkout, user authentication, user accounts, with more on the way. This section introduces these dropin-in components and provides links to their details.

Product details

The product details drop-in component renders detailed information about products and services, including SKUs, pricing, descriptions, and customizable options, with built-in support for internationalization and accessibility. This drop-in component is a key component of the e-commerce experience, providing users with essential product information to enable informed purchasing decisions.

Cart

Ready to Implement The cart drop-in provides a summary of the items that the user has added to their cart. It allows users to view and manage their cart contents, update quantities, and proceed to checkout. The cart is a critical component of the e-commerce experience, providing users with a convenient way to review and adjust their selections before completing their purchase.

Checkout

Ready to Implement The checkout drop-in component is a key component of the e-commerce experience, providing users with a streamlined process for completing their purchase. It allows users to enter shipping and payment information, review their order details, and confirm their purchase.

User authentication

Ready to Implement The user authentication drop-in component provides users with a secure and seamless way to log in or create an account on your e-commerce platform. It supports various authentication methods, including email, social media, and single sign-on (SSO), ensuring a smooth user experience across devices and platforms.

User account

In Development The user account drop-in component provides users with a personalized experience, allowing them to view their order history, manage their account settings, and access other account-related features.

How can I customize dropin-in components?

All dropin-in components can be customized in five ways: design tokens, CSS classes, slots, content enrichment, and localization. In this section, you’ll learn how to use each approach.

Design tokens

Design tokens are the quickest way to customize your storefront. By changing the default token values with your own brand colors, typography, spacing, and shapes, you can make quick, global brand changes to your entire storefront.

CSS classes

CSS classes provide deeper style changes for dropin-in components than design tokens. Overriding or adding new CSS classes allows you to restyle specific areas of the drop-in component. You’ll find best practices for styling here.

Slots

Slots provide the deepest level of customization. Slots are built-in extension points in the drop-in component to add your own UI components and functions. You’ll learn how powerful slots can be.

Content enrichment

Content enrichment is similar to adding content with slots. The difference is in scale. Enrichment is an Edge Delivery feature that allows you to add content to entire product categories.

Localization

Localization is one of the easiest ways to customize dropin-in components for a region. This topic shows you how to add and use a second language file in your dropin-in components.

\ No newline at end of file diff --git a/dropins/all/localizing/index.html b/dropins/all/localizing/index.html index 4273b5686..5b179160e 100644 --- a/dropins/all/localizing/index.html +++ b/dropins/all/localizing/index.html @@ -1 +1 @@ -Localizing drop-in components | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Localizing drop-in components

In our global economy, localization is crucial. And it’s one of the easiest changes to make. This page shows how to add a second language file and use it in your storefront.

\ No newline at end of file +Localizing drop-in components | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Localizing drop-in components

In our global economy, localization is crucial. And it’s one of the easiest changes to make. This page shows how to add a second language file and use it in your storefront.

\ No newline at end of file diff --git a/dropins/all/styling/index.html b/dropins/all/styling/index.html index 7b7d68390..1f4f09e4c 100644 --- a/dropins/all/styling/index.html +++ b/dropins/all/styling/index.html @@ -1,3 +1,3 @@ Styling dropin-in components | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Drop-in components

Styling dropin-in components

Overriding and adding CSS classes for drop-in components provides the next level of customizing your storefront dropin-in components. By modifying a drop-in component’s built-in CSS classes and adding additional classes, you can quickly change the built-in classes to meet your specifications. You’ll find best-practices for styling here.

The CSS classes for each UI component that provides the product details drop-in component with its UI are provided here. Override these classes and add new classes to customize the look and feel of your PDP drop-in component to match your specific style requirements.

Step-by-step

The quickest way to override the CSS classes used in the drop-in component is to inspect the drop-in component’s UI from your browser’s developer tools. The following example shows a product details component with the classes applied to the UI components that compose the drop-in:

Find CSS classes to override

Find CSS classes to override.
  1. Inspect the element in the UI that you want to customize (right-click on the element and select “Inspect” from the menu).
  2. Identify the CSS class(es) for the element. We use BEM naming, which makes it easy to know which component you’re changing (and which CSS file to use). This class styles the Product component, so use your product.css file.
  3. Copy the CSS class to your product.css file to override the existing rules or add new rules to the class. But wait! Look closely 🧐 at the .pdp-product__title class. It’s using two design tokens. And when you see a design token within a CSS rule, don’t remove the token. Instead, change the token’s value (where it’s defined) OR create a new token along-side this existing one to ensure maintenance and updates continue to benefit from global design token usage.

Example overrides

Here’s an example of adding CSS class overrides to your product.css file:

product.css
.pdp-product__options {
grid-column: 1 / span 3;
}
.pdp-product__quantity {
grid-column: 1 / span 3;
}
-
.pdp-product__buttons {
grid-gap: 0.5rem;
}
\ No newline at end of file +
.pdp-product__buttons {
grid-gap: 0.5rem;
}
\ No newline at end of file diff --git a/dropins/cart/cart-containers/index.html b/dropins/cart/cart-containers/index.html index 69d76f64e..4db3ec714 100644 --- a/dropins/cart/cart-containers/index.html +++ b/dropins/cart/cart-containers/index.html @@ -1,2 +1,2 @@ Cart containers | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Cart containers

The cart drop-in component consists of two containers: Cart and MiniCart. Configuration options for both containers are provided below.

Configurations

The following configuration options are available for the Cart and MiniCart containers:

Cart

OptionTypeReq?Description
childrenCartModelYesChild components of the cart.
initialDatastringYesInitial cart data to preload the component.
routeProductfunctionYesCallback function that returns a product.
routeEmptyCartCTAfunctionYesCallback function that returns an empty cart.
routeCheckoutfunctionYesCallback function that navigates cart to checkout.

MiniCart

OptionTypeReq?Description
routeProductfunctionYesCallback function that returns a product.
routeEmptyCartCTAfunctionYesCallback function that returns an empty cart.
routecartfunctionYesCallback function that navigates to cart.
routeCheckoutfunctionYesCallback function that navigates cart to checkout.

InitialData

The initialData property is an object that contains the initial cart data to preload the component. This property is initially set to null. When the cart recieves a cart data event, initalData is set and follows the CartModel interface:

interface CartModel {
id: string;
totalQuantity: number;
errors?: ItemError[];
items: Item[];
miniCartMaxItems: Item[];
total: {
includingTax: Price;
excludingTax: Price;
};
discount?: Price;
subtotal: {
excludingTax: Price;
includingTax: Price;
includingDiscountOnly: Price;
};
appliedTaxes: TotalPriceModifier[];
totalTax?: Price;
appliedDiscounts: TotalPriceModifier[];
shipping?: Price;
isVirtual?: boolean;
addresses: {
shipping?: {
countryCode: string;
zipCode?: string;
regionCode?: string;
}[];
};
isGuestCart?: boolean;
}

View the Example configuration: Cart section for an example of how to use this property for the Cart container.

View the Example configuration: MiniCart section for an example of how to use this property for the MiniCart container.

Example configuration: Cart

The following example data demonstrates how the Cart container is configured:

const mockData: CartModel = {
id: '123',
totalQuantity: 2,
items: [
{
itemType: 'SimpleCartItem',
uid: '1',
name: 'Product 1',
url: {
urlKey: 'product-1',
categories: ['category-1'],
},
sku: '123',
quantity: 1,
price: {
value: 100,
currency: 'USD',
},
image: {
src: 'https://via.placeholder.com/300',
alt: 'Product 1',
},
total: {
value: 100,
currency: 'USD',
},
regularPrice: {
value: 200,
currency: 'USD',
},
discounted: true,
taxedPrice: {
value: 210,
currency: 'USD',
},
rowTotal: {
value: 250,
currency: 'USD',
},
rowTotalIncludingTax: {
value: 260,
currency: 'USD',
},
},
{
itemType: 'SimpleCartItem',
uid: '2',
name: 'Product 2',
url: {
urlKey: 'product-2',
categories: ['category-1'],
},
sku: '456',
quantity: 1,
price: {
value: 200,
currency: 'USD',
},
image: {
src: 'https://via.placeholder.com/300',
alt: 'Product 2',
},
total: {
value: 200,
currency: 'USD',
},
discount: {
value: 0,
currency: 'USD',
},
regularPrice: {
value: 200,
currency: 'USD',
},
discounted: false,
taxedPrice: {
value: 210,
currency: 'USD',
},
rowTotal: {
value: 250,
currency: 'USD',
},
rowTotalIncludingTax: {
value: 260,
currency: 'USD',
},
},
],
total: {
includingTax: {
value: 300,
currency: 'USD',
},
excludingTax: {
value: 300,
currency: 'USD',
},
},
totalExcludingTax: {
value: 290,
currency: 'USD',
},
-
subtotal: {
excludingTax: {
value: 300,
currency: 'USD',
},
includingTax: {
value: 300,
currency: 'USD',
},
includingDiscountOnly: {
value: 300,
currency: 'USD',
},
},
appliedTaxes: [
{
amount: {
value: 10,
currency: 'USD',
},
label: 'Tax',
},
],
totalTax: undefined,
appliedDiscounts: [
{
amount: {
value: 20,
currency: 'USD',
},
label: 'Cart Discount',
},
],
addresses: {},
miniCartMaxItems: [],
isVirtual: false,
};

Example configuration: MiniCart

The following example data demonstrates how the MiniCart container is configured:

const mockPayload: CartModel = {
id: '123',
totalQuantity: 2,
miniCartMaxItems: [
{
itemType: 'SimpleCartItem',
uid: '1',
name: 'Product 1',
url: {
urlKey: 'product-1',
categories: ['category-1'],
},
sku: '123',
quantity: 1,
price: {
value: 100,
currency: 'USD',
},
image: {
src: 'https://via.placeholder.com/300',
alt: 'Product 1',
},
total: {
value: 100,
currency: 'USD',
},
regularPrice: {
value: 100,
currency: 'USD',
},
discounted: true,
taxedPrice: {
value: 110,
currency: 'USD',
},
rowTotal: {
value: 100,
currency: 'USD',
},
rowTotalIncludingTax: {
value: 110,
currency: 'USD',
},
},
{
itemType: 'SimpleCartItem',
uid: '2',
name: 'Product 2',
url: {
urlKey: 'product-2',
categories: ['category-1'],
},
sku: '456',
quantity: 1,
price: {
value: 200,
currency: 'USD',
},
image: {
src: 'https://via.placeholder.com/300',
alt: 'Product 2',
},
total: {
value: 200,
currency: 'USD',
},
discount: {
value: 0,
currency: 'USD',
},
regularPrice: {
value: 200,
currency: 'USD',
},
discounted: false,
taxedPrice: {
value: 210,
currency: 'USD',
},
rowTotal: {
value: 200,
currency: 'USD',
},
rowTotalIncludingTax: {
value: 210,
currency: 'USD',
},
},
],
total: {
includingTax: {
value: 320,
currency: 'USD',
},
excludingTax: {
value: 300,
currency: 'USD',
},
},
subtotal: {
excludingTax: {
value: 300,
currency: 'USD',
},
includingTax: {
value: 320,
currency: 'USD',
},
includingDiscountOnly: {
value: 300,
currency: 'USD',
},
},
appliedTaxes: [],
totalTax: undefined,
appliedDiscounts: [
{
amount: {
value: 20,
currency: 'USD',
},
label: 'Cart Discount',
},
],
addresses: {},
items: [],
};
\ No newline at end of file +
subtotal: {
excludingTax: {
value: 300,
currency: 'USD',
},
includingTax: {
value: 300,
currency: 'USD',
},
includingDiscountOnly: {
value: 300,
currency: 'USD',
},
},
appliedTaxes: [
{
amount: {
value: 10,
currency: 'USD',
},
label: 'Tax',
},
],
totalTax: undefined,
appliedDiscounts: [
{
amount: {
value: 20,
currency: 'USD',
},
label: 'Cart Discount',
},
],
addresses: {},
miniCartMaxItems: [],
isVirtual: false,
};

Example configuration: MiniCart

The following example data demonstrates how the MiniCart container is configured:

const mockPayload: CartModel = {
id: '123',
totalQuantity: 2,
miniCartMaxItems: [
{
itemType: 'SimpleCartItem',
uid: '1',
name: 'Product 1',
url: {
urlKey: 'product-1',
categories: ['category-1'],
},
sku: '123',
quantity: 1,
price: {
value: 100,
currency: 'USD',
},
image: {
src: 'https://via.placeholder.com/300',
alt: 'Product 1',
},
total: {
value: 100,
currency: 'USD',
},
regularPrice: {
value: 100,
currency: 'USD',
},
discounted: true,
taxedPrice: {
value: 110,
currency: 'USD',
},
rowTotal: {
value: 100,
currency: 'USD',
},
rowTotalIncludingTax: {
value: 110,
currency: 'USD',
},
},
{
itemType: 'SimpleCartItem',
uid: '2',
name: 'Product 2',
url: {
urlKey: 'product-2',
categories: ['category-1'],
},
sku: '456',
quantity: 1,
price: {
value: 200,
currency: 'USD',
},
image: {
src: 'https://via.placeholder.com/300',
alt: 'Product 2',
},
total: {
value: 200,
currency: 'USD',
},
discount: {
value: 0,
currency: 'USD',
},
regularPrice: {
value: 200,
currency: 'USD',
},
discounted: false,
taxedPrice: {
value: 210,
currency: 'USD',
},
rowTotal: {
value: 200,
currency: 'USD',
},
rowTotalIncludingTax: {
value: 210,
currency: 'USD',
},
},
],
total: {
includingTax: {
value: 320,
currency: 'USD',
},
excludingTax: {
value: 300,
currency: 'USD',
},
},
subtotal: {
excludingTax: {
value: 300,
currency: 'USD',
},
includingTax: {
value: 320,
currency: 'USD',
},
includingDiscountOnly: {
value: 300,
currency: 'USD',
},
},
appliedTaxes: [],
totalTax: undefined,
appliedDiscounts: [
{
amount: {
value: 20,
currency: 'USD',
},
label: 'Cart Discount',
},
],
addresses: {},
items: [],
};
\ No newline at end of file diff --git a/dropins/cart/cart-functions/index.html b/dropins/cart/cart-functions/index.html index 886f46e48..4749aeb7b 100644 --- a/dropins/cart/cart-functions/index.html +++ b/dropins/cart/cart-functions/index.html @@ -99,4 +99,4 @@
interface Attribute {
code: string;
value?: string;
selected_options?: AttributeOption[];
}
interface Coupon {
code: string;
}

Events

This function emits the cart/updated and cart/data events. It also publishes add-to-cart or remove-from-cart events to the Adobe Client Data Layer (ACDL).

Usage

To set the quantity of an item in the cart to 3.

import { updateProductsFromCart } from '@/cart/api/updateProductsFromCart';
updateProductsFromCart([
{
uid: ''VA19-GO-NA,
quantity: 3,
},
]);

To remove the item from the cart.

import { updateProductsFromCart } from '@/cart/api/updateProductsFromCart';
-
updateProductsFromCart([
{
uid: 'VA19-GO-NA',
quantity: 0,
},
]);
\ No newline at end of file +
updateProductsFromCart([
{
uid: 'VA19-GO-NA',
quantity: 0,
},
]);
\ No newline at end of file diff --git a/dropins/cart/cart-installation/index.html b/dropins/cart/cart-installation/index.html index fd7a74356..f4856e16e 100644 --- a/dropins/cart/cart-installation/index.html +++ b/dropins/cart/cart-installation/index.html @@ -8,4 +8,4 @@
// Set store code header. This method is specific to the @dropins/tools package.
mesh.setFetchGraphQlHeader('store', '<default>');

Register and load the drop-in

The code below shows how to register the cart, load it (mount), and enable the logger for debugging purposes. You can add these functions within a <script> tag in your Cart HTML page as shown here:

index.html
<script type="module">
// more code above...
// Register and load the Cart drop-in
initializers.register(pkg.initialize);
// Mount Initializers (must be called after all initializers are registered)
window.addEventListener('load', initializers.mount);
</script>
  1. This function registers the cart to be loaded on the page by the initializers.mount function.
  2. This event handler triggers the initializers.mount function to load the cart after the page has loaded.

Render the drop-in

Render the cart on the page. The example below provides the minimal configuration options required to render the default Cart dropin-in component, along with an example to render Mini-Cart.

cart.js
// Render Cart
provider.render(Cart, {
routeProduct: (item) => {
return `${item.url.categories.join('/')}/${item.url.urlKey}`;
},
routeEmptyCartCTA: () => 'your-empty-cart-element',
routeCheckout: () => 'your-checkout-element',
})(document.getElementById('your-cart-element'));
-
// Render MiniCart
provider.render(MiniCart, {
routeProduct: (item) => {
return `${item.url.categories.join('/')}/${item.url.urlKey}`;
},
routeEmptyCartCTA: () => 'your-empty-cart-element',
routeCart: () => 'your-cart-element',
routeCheckout: () => 'your-checkout-element',
})(document.getElementById('your-mini-cart-element'));

Test the cart by viewing your cart page in a browser, or running your local dev or build server. If you see the cart rendered in the browser, congrats!, you have a successful installation. If not, check the console for any errors and verify that you have followed all the steps correctly.

Summary

The installation of all dropin-in components follow the same pattern demonstrated by installing the cart: Install, Map, Import, Connect, Register, and Render.

\ No newline at end of file +
// Render MiniCart
provider.render(MiniCart, {
routeProduct: (item) => {
return `${item.url.categories.join('/')}/${item.url.urlKey}`;
},
routeEmptyCartCTA: () => 'your-empty-cart-element',
routeCart: () => 'your-cart-element',
routeCheckout: () => 'your-checkout-element',
})(document.getElementById('your-mini-cart-element'));

Test the cart by viewing your cart page in a browser, or running your local dev or build server. If you see the cart rendered in the browser, congrats!, you have a successful installation. If not, check the console for any errors and verify that you have followed all the steps correctly.

Summary

The installation of all dropin-in components follow the same pattern demonstrated by installing the cart: Install, Map, Import, Connect, Register, and Render.

\ No newline at end of file diff --git a/dropins/cart/cart-slots/index.html b/dropins/cart/cart-slots/index.html index 0b1c17827..3befc3e4a 100644 --- a/dropins/cart/cart-slots/index.html +++ b/dropins/cart/cart-slots/index.html @@ -21,4 +21,4 @@
errors: ctx.hasErrors,
slots: {
Coupons: (ctx) => {
const coupons = document.createElement('div');
provider.render(Coupons)(coupons);
-
ctx.appendChild(coupons);
},
},
})(orderSummary);
\ No newline at end of file +
ctx.appendChild(coupons);
},
},
})(orderSummary);
\ No newline at end of file diff --git a/dropins/cart/cart-styles/index.html b/dropins/cart/cart-styles/index.html index 9e5db73ca..5e400e3e2 100644 --- a/dropins/cart/cart-styles/index.html +++ b/dropins/cart/cart-styles/index.html @@ -39,4 +39,4 @@
/* Medium (portrait tablets and large phones, 768px and up) */
/* @media only screen and (min-width: 768px) { } */
/* Large (landscape tablets, 1024px and up) */
/* @media only screen and (min-width: 1024px) { } */
/* XLarge (laptops/desktops, 1366px and up) */
/* @media only screen and (min-width: 1366px) { } */
-
/* XXlarge (large laptops and desktops, 1920px and up) */
/* @media only screen and (min-width: 1920px) { } */

Summary

You can customize the cart by overriding the CSS classes provided for each component. Create a CSS file for each component to make it easier to maintain and update your cart CSS. Use the BEM naming convention and your browser’s dev tools to identify and copy the class to your corresponding component CSS file and override it as needed. Happy styling! 🎨

\ No newline at end of file +
/* XXlarge (large laptops and desktops, 1920px and up) */
/* @media only screen and (min-width: 1920px) { } */

Summary

You can customize the cart by overriding the CSS classes provided for each component. Create a CSS file for each component to make it easier to maintain and update your cart CSS. Use the BEM naming convention and your browser’s dev tools to identify and copy the class to your corresponding component CSS file and override it as needed. Happy styling! 🎨

\ No newline at end of file diff --git a/dropins/cart/index.html b/dropins/cart/index.html index f687da99b..293a9196b 100644 --- a/dropins/cart/index.html +++ b/dropins/cart/index.html @@ -1 +1 @@ -Cart overview | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Cart overview

The cart drop-in component provides a variety of fully-editabled controls to help you view, update, and merge the products in your cart and mini-cart, including image thumbnails, pricing, descriptions, quantities, estimated shipping and taxes, order summary, merging guest and authenticated cart, and more.

Supported Commerce features

The following table provides an overview of the Adobe Commerce features that the cart supports:

FeatureStatus
All product typesSupported
Apply couponsRoadmap
Apply gift cardAPI only
Apply reward pointsAPI only
Cart rulesSupported
Cart slots for extensibilityRoadmap
Cart with 100+ productsRoadmap
Customer cartSupported
Customer groupsSupported
Customer segmentsSupported
Edit selected product configuration in cartSupported
Estimate tax/shippingSupported
Guest cartSupported
Low product stock alertSupported
Mini-cartSupported
Out of stock/insufficient quantity productsSupported
Product line discounts (catalog rule, special price, tier price)API only
Taxes: FixedAPI only
Taxes: Sales, VATSupported
WishlistRoadmap

Section topics

The topics in this section will help you understand how to customize and use the cart effectively within your storefront.

Installation

Provides the step-by-step process for embedding the cart into your site. This topic covers everything from basic setup requirements to more advanced configurations, ensuring that the drop-in component integrates seamlessly with your existing website architecture. It is designed for compatibility with modern web technologies, focusing on ease of use and flexibility for developers. Visit the cart installation page to get started.

Styles

Describes how to customize the appearance of the cart using CSS. We provide guidelines and examples for applying styles to various components within the drop-in. This customization allows brands to align the drop-in component’s look and feel with their overall design aesthetic, enhancing brand consistency across the platform. Visit the cart styles page to learn more.

Containers

Describes the structural elements of the cart, specifically focusing on how the container manages and displays content. It includes information on configuration options and how to leverage these settings to customize the user experience. Understanding the container is essential for developers looking to optimize the layout and styling of the cart. Visit the cart containers page to learn more.

Slots

The cart does not provide any slots.

Functions

Describes the API functions available in the Cart dropin. These functions allow developers to retrieve and display detailed cart information dynamically. Visit the Cart Functions page to learn more.

\ No newline at end of file +Cart overview | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Cart overview

The cart drop-in component provides a variety of fully-editabled controls to help you view, update, and merge the products in your cart and mini-cart, including image thumbnails, pricing, descriptions, quantities, estimated shipping and taxes, order summary, merging guest and authenticated cart, and more.

Supported Commerce features

The following table provides an overview of the Adobe Commerce features that the cart supports:

FeatureStatus
All product typesSupported
Apply couponsRoadmap
Apply gift cardAPI only
Apply reward pointsAPI only
Cart rulesSupported
Cart slots for extensibilityRoadmap
Cart with 100+ productsRoadmap
Customer cartSupported
Customer groupsSupported
Customer segmentsSupported
Edit selected product configuration in cartSupported
Estimate tax/shippingSupported
Guest cartSupported
Low product stock alertSupported
Mini-cartSupported
Out of stock/insufficient quantity productsSupported
Product line discounts (catalog rule, special price, tier price)API only
Taxes: FixedAPI only
Taxes: Sales, VATSupported
WishlistRoadmap

Section topics

The topics in this section will help you understand how to customize and use the cart effectively within your storefront.

Installation

Provides the step-by-step process for embedding the cart into your site. This topic covers everything from basic setup requirements to more advanced configurations, ensuring that the drop-in component integrates seamlessly with your existing website architecture. It is designed for compatibility with modern web technologies, focusing on ease of use and flexibility for developers. Visit the cart installation page to get started.

Styles

Describes how to customize the appearance of the cart using CSS. We provide guidelines and examples for applying styles to various components within the drop-in. This customization allows brands to align the drop-in component’s look and feel with their overall design aesthetic, enhancing brand consistency across the platform. Visit the cart styles page to learn more.

Containers

Describes the structural elements of the cart, specifically focusing on how the container manages and displays content. It includes information on configuration options and how to leverage these settings to customize the user experience. Understanding the container is essential for developers looking to optimize the layout and styling of the cart. Visit the cart containers page to learn more.

Slots

The cart does not provide any slots.

Functions

Describes the API functions available in the Cart dropin. These functions allow developers to retrieve and display detailed cart information dynamically. Visit the Cart Functions page to learn more.

\ No newline at end of file diff --git a/dropins/cart/initialization/index.html b/dropins/cart/initialization/index.html index d1d0f4852..075d929aa 100644 --- a/dropins/cart/initialization/index.html +++ b/dropins/cart/initialization/index.html @@ -1,3 +1,3 @@ Cart initialization | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Cart initialization

The cart drop-in component initializer provides options for configuring language definitions and extending the default models with new fields and transformers.

Configuration options

The cart component initializer accepts the following configuration options:

OptionTypeReq?Description
disableGuestCartbooleanNoWhether guest carts have been disabled.
langDefinitionsobjectNoProvides language definitions for internationalization (i18n).
modelsobjectNoExtend the default model (CartModel) with new fields and transform them as needed.

Example

The following code shows an example implementation of the cart initializer configuration:

// Initialize cart
initializeDropin(async () => {
await initializers.mountImmediately(initialize, {
langDefinitions,
models,
});
})();

Set language definitions

The langDefinitions property registers the cart component dictionary files, which are used for internationalization purposes. These files allow you to provide localized text for different languages in your application.

// Fetch the dictionary files for your application
const en_US = await fetch('/i18n/en_US.json').then((res) => res.json());
const fr_FR = await fetch('/i18n/fr_FR.json').then((res) => res.json());
// Register the component with language definitions
const langDefinitions = {
default: en_US,
en_US,
fr_FR,
};
-
// Register initializers
initializers.register(api.initialize, {
langDefinitions,
});

Set models

You can extend the default models in the cart component and provide transformers to process new fields.

The models property is an object that contains the default models that you might want to extend and the transformers to use to transform the data. By default, the cart component initializer only accepts the CartModel.

The following example shows how to extend the default models with new fields and transformers:

// Initialize cart
initializeDropin(async () => {
await initializers.mountImmediately(initialize, {
langDefinitions,
models: {
CartModel: {
transformer: (data) => ({
printedCardIncluded: data?.printed_card_included,
giftReceiptIncluded: data?.gift_receipt_included,
}),
},
},
});
})();
\ No newline at end of file +
// Register initializers
initializers.register(api.initialize, {
langDefinitions,
});

Set models

You can extend the default models in the cart component and provide transformers to process new fields.

The models property is an object that contains the default models that you might want to extend and the transformers to use to transform the data. By default, the cart component initializer only accepts the CartModel.

The following example shows how to extend the default models with new fields and transformers:

// Initialize cart
initializeDropin(async () => {
await initializers.mountImmediately(initialize, {
langDefinitions,
models: {
CartModel: {
transformer: (data) => ({
printedCardIncluded: data?.printed_card_included,
giftReceiptIncluded: data?.gift_receipt_included,
}),
},
},
});
})();
\ No newline at end of file diff --git a/dropins/checkout/containers/bill-to-shipping-address/index.html b/dropins/checkout/containers/bill-to-shipping-address/index.html index b4543caf2..f36f09936 100644 --- a/dropins/checkout/containers/bill-to-shipping-address/index.html +++ b/dropins/checkout/containers/bill-to-shipping-address/index.html @@ -2,4 +2,4 @@
const $billToShipping = checkoutFragment.querySelector(
'.checkout__bill-to-shipping'
);
CheckoutProvider.render(BillToShippingAddress, {
hideOnVirtualCart: true,
onChange: (checked) => {
$billingForm.style.display = checked ? 'none' : 'block';
if (!checked && billingFormRef.current) {
const isDataValid = billingFormRef.current.handleValidationSubmit();
-
setAddressOnCart(
{ data: billingFormRef.current.formData, isDataValid },
checkoutApi.setBillingAddress
);
}
},
})($billToShipping),
\ No newline at end of file +
setAddressOnCart(
{ data: billingFormRef.current.formData, isDataValid },
checkoutApi.setBillingAddress
);
}
},
})($billToShipping),
\ No newline at end of file diff --git a/dropins/checkout/containers/estimate-shipping/index.html b/dropins/checkout/containers/estimate-shipping/index.html index 537c1aed8..5b922c5a5 100644 --- a/dropins/checkout/containers/estimate-shipping/index.html +++ b/dropins/checkout/containers/estimate-shipping/index.html @@ -1,3 +1,3 @@ EstimateShipping container | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

EstimateShipping container

The EstimateShipping container is designed to estimate and display shipping costs during the checkout process.

EstimateShipping configurations

The EstimateShipping container is read-only, unlike the editable EstimateShipping container in the cart drop-in component. Initially, it displays estimated shipping costs. After a customer provides a shipping address and selects a shipping method, it shows the actual shipping cost. This container is designed to be used as a slot within the OrderSummary container from the cart, where the estimated shipping information is displayed.

Example

The following example renders an OrderSummary container within a checkout page and includes a slot for estimating shipping:

import { OrderSummary } from '@dropins/storefront-cart/containers/OrderSummary.js';
import { render as CartProvider } from '@dropins/storefront-cart/render.js';
import EstimateShipping from '@dropins/storefront-checkout/containers/EstimateShipping.js';
const $orderSummary = checkoutFragment.querySelector(
'.checkout__order-summary'
);
-
CartProvider.render(OrderSummary, {
slots: {
EstimateShipping: (esCtx) => {
const estimateShippingForm = document.createElement('div');
CheckoutProvider.render(EstimateShipping)(estimateShippingForm);
esCtx.appendChild(estimateShippingForm);
},
},
})($orderSummary),
\ No newline at end of file +
CartProvider.render(OrderSummary, {
slots: {
EstimateShipping: (esCtx) => {
const estimateShippingForm = document.createElement('div');
CheckoutProvider.render(EstimateShipping)(estimateShippingForm);
esCtx.appendChild(estimateShippingForm);
},
},
})($orderSummary),
\ No newline at end of file diff --git a/dropins/checkout/containers/login-form/index.html b/dropins/checkout/containers/login-form/index.html index cbdb37d27..eb2516f3a 100644 --- a/dropins/checkout/containers/login-form/index.html +++ b/dropins/checkout/containers/login-form/index.html @@ -3,4 +3,4 @@
const $login = checkoutFragment.querySelector('.checkout__login');
CheckoutProvider.render(LoginForm, {
name: LOGIN_FORM_NAME,
onSignInClick: async (initialEmailValue) => {
const signInForm = document.createElement('div');
AuthProvider.render(AuthCombine, {
signInFormConfig: {
renderSignUpLink: true,
initialEmailValue,
onSuccessCallback: () => {
displayOverlaySpinner();
},
},
signUpFormConfig: {},
resetPasswordFormConfig: {},
})(signInForm);
-
showModal(signInForm);
},
onSignOutClick: () => {
authApi.revokeCustomerToken();
},
})($login),
\ No newline at end of file +
showModal(signInForm);
},
onSignOutClick: () => {
authApi.revokeCustomerToken();
},
})($login),
\ No newline at end of file diff --git a/dropins/checkout/containers/merged-cart-banner/index.html b/dropins/checkout/containers/merged-cart-banner/index.html index 780945632..436f67e3e 100644 --- a/dropins/checkout/containers/merged-cart-banner/index.html +++ b/dropins/checkout/containers/merged-cart-banner/index.html @@ -1,3 +1,3 @@ MergedCartBanner container | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

MergedCartBanner container

The MergedCartBanner container is designed to display a notification banner when items from an old cart are merged into the current cart.

When a customer signs in, if they had items in a previous cart, a banner will notify them that the items from their previous cart have been merged with the current cart. You can apply styles to the banner by passing a className prop to the container.

MergedCartBanner configurations

The MergedCartBanner container provides the following configuration options:

OptionTypeReq?Description
classNamestringNoThe CSS class name(s) to apply to the component.

Example

The following example renders the MergedCartBanner container with a custom class name:

import MergedCartBanner from '@dropins/storefront-checkout/containers/MergedCartBanner.js';
import { render as CheckoutProvider } from '@dropins/storefront-checkout/render.js';
const $mergedCartBanner = checkoutFragment.querySelector(
'.checkout__merged-cart-banner'
);
-
CheckoutProvider.render(MergedCartBanner, {
className: 'checkout__merged-cart-banner--custom',
})($mergedCartBanner);

`;

\ No newline at end of file +
CheckoutProvider.render(MergedCartBanner, {
className: 'checkout__merged-cart-banner--custom',
})($mergedCartBanner);

`;

\ No newline at end of file diff --git a/dropins/checkout/containers/order-confirmation-header/index.html b/dropins/checkout/containers/order-confirmation-header/index.html index dbdedcd74..7ee36f4a5 100644 --- a/dropins/checkout/containers/order-confirmation-header/index.html +++ b/dropins/checkout/containers/order-confirmation-header/index.html @@ -1,3 +1,3 @@ OrderConfirmationHeader container | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

OrderConfirmationHeader container

The OrderConfirmationHeader container displays the order confirmation page with order details after a customer places an order. It also includes a “Create an account” button for guest users.

OrderConfirmationHeader configurations

The OrderConfirmationHeader container provides the following configuration options:

OptionTypeReq?Description
onSignUpClickFunctionNoThe function to call when a customer clicks "Create an account".
orderDataObjectYesAn object containing the order data, including details such as the email, shipping address, billing address, and order number.

Example

The following example renders the OrderConfirmationHeader container within an order confirmation page. It provides the necessary order data and a handler for the sign-up click event.

import OrderConfirmationHeader from '@dropins/storefront-checkout/containers/OrderConfirmationHeader.js';
import { render as CheckoutProvider } from '@dropins/storefront-checkout/render.js';
const $orderConfirmationHeader = orderConfirmationFragment.querySelector(
'.order-confirmation__header'
);
-
CheckoutProvider.render(OrderConfirmationHeader, {
orderData,
onSignUpClick,
})($orderConfirmationHeader);
\ No newline at end of file +
CheckoutProvider.render(OrderConfirmationHeader, {
orderData,
onSignUpClick,
})($orderConfirmationHeader);
\ No newline at end of file diff --git a/dropins/checkout/containers/out-of-stock/index.html b/dropins/checkout/containers/out-of-stock/index.html index 07f5062e2..8fa0412ee 100644 --- a/dropins/checkout/containers/out-of-stock/index.html +++ b/dropins/checkout/containers/out-of-stock/index.html @@ -1,3 +1,3 @@ OutOfStock container | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

OutOfStock container

The OutOfStock container is designed to handle and display items in the shopping cart that are out of stock or have insufficient quantity. You can configure it to handle the removal of out-of-stock items and provide a route to the cart page.

OutOfStock configurations

The OutOfStock container provides the following configuration options:

OptionTypeReq?Description
itemsCartItem[]YesThe list of items that are out of stock.
onRemoveOutOfStockfunctionNoHandles the removal of out-of-stock items. It takes an event as an argument.
routeCartstringNoThe route to the cart page.

Example

The following example renders the OutOfStock container to handle and display out-of-stock items in the cart:

import * as cartApi from '@dropins/storefront-cart/api.js';
import OutOfStock from '@dropins/storefront-checkout/containers/OutOfStock.js';
import { render as CheckoutProvider } from '@dropins/storefront-checkout/render.js';
const $outOfStock = checkoutFragment.querySelector('.checkout__out-of-stock');
-
CheckoutProvider.render(OutOfStock, {
routeCart: () => '/cart',
onCartProductsUpdate: (items) => {
cartApi.updateProductsFromCart(items).catch(console.error);
},
})($outOfStock),
\ No newline at end of file +
CheckoutProvider.render(OutOfStock, {
routeCart: () => '/cart',
onCartProductsUpdate: (items) => {
cartApi.updateProductsFromCart(items).catch(console.error);
},
})($outOfStock),
\ No newline at end of file diff --git a/dropins/checkout/containers/payment-methods/index.html b/dropins/checkout/containers/payment-methods/index.html index 55c1f3a5f..519ebd512 100644 --- a/dropins/checkout/containers/payment-methods/index.html +++ b/dropins/checkout/containers/payment-methods/index.html @@ -1,3 +1,3 @@ PaymentMethods container | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

PaymentMethods container

The PaymentMethods container is designed to manage and display the available payment methods during the checkout process. You can configure it to handle the selection of payment methods, display the payment method handlers, and manage the main slot for the payment methods.

PaymentMethods configurations

The PaymentMethods container provides the following configuration options:

OptionTypeReq?Description
slots.MainSlotProps<PaymentMethodsMainSlotContext>NoThe main slot for the payment methods.
slots.HandlersPaymentMethodHandlerSlotsNoThe handlers for different payment methods.

Example

The following example renders the PaymentMethods container on a checkout page, displaying the available payment methods in the element with the class checkout__payment-methods:

import PaymentMethods from '@dropins/storefront-checkout/containers/PaymentMethods.js';
import { render as CheckoutProvider } from '@dropins/storefront-checkout/render.js';
const $paymentMethods = checkoutFragment.querySelector(
'.checkout__payment-methods'
);
-
CheckoutProvider.render(PaymentMethods)($paymentMethods),
\ No newline at end of file +
CheckoutProvider.render(PaymentMethods)($paymentMethods),
\ No newline at end of file diff --git a/dropins/checkout/containers/place-order/index.html b/dropins/checkout/containers/place-order/index.html index 7c2f898a7..77e54a99b 100644 --- a/dropins/checkout/containers/place-order/index.html +++ b/dropins/checkout/containers/place-order/index.html @@ -8,4 +8,4 @@
const billingForm = forms[BILLING_FORM_NAME];
if (
success &&
billingFormRef.current &&
billingForm &&
billingForm.checkVisibility()
) {
success = billingFormRef.current.handleValidationSubmit(false);
}
return success;
},
onPlaceOrder: async () => {
displayOverlaySpinner();
-
try {
await checkoutApi.placeOrder();
} catch (error) {
console.error(error);
throw error;
} finally {
removeOverlaySpinner();
}
},
})($placeOrder),
]);
\ No newline at end of file +
try {
await checkoutApi.placeOrder();
} catch (error) {
console.error(error);
throw error;
} finally {
removeOverlaySpinner();
}
},
})($placeOrder),
]);
\ No newline at end of file diff --git a/dropins/checkout/containers/server-error/index.html b/dropins/checkout/containers/server-error/index.html index ded54c684..14e92cc94 100644 --- a/dropins/checkout/containers/server-error/index.html +++ b/dropins/checkout/containers/server-error/index.html @@ -1,3 +1,3 @@ ServerError container | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

ServerError container

The ServerError container is designed to handle and display server error messages during the checkout process. You can configure it to display an error message and handle click events.

ServerError configurations

The ServerError container provides the following configuration options:

OptionTypeReq?Description
onRetryFunctionNoA function to handle retry actions.
onServerErrorFunctionNoA function to handle server errors.

Example

The following example renders the ServerError container on a checkout page. It provides functionality to handle retry actions by removing an error class from the content element and to handle server errors by adding an error class to the content element.

import ServerError from '@dropins/storefront-checkout/containers/ServerError.js';
import { render as CheckoutProvider } from '@dropins/storefront-checkout/render.js';
const $serverError = checkoutFragment.querySelector(
'.checkout__server-error'
);
-
CheckoutProvider.render(ServerError, {
onRetry: () => {
$content.classList.remove('checkout__content--error');
},
onServerError: () => {
$content.classList.add('checkout__content--error');
},
})($serverError),
\ No newline at end of file +
CheckoutProvider.render(ServerError, {
onRetry: () => {
$content.classList.remove('checkout__content--error');
},
onServerError: () => {
$content.classList.add('checkout__content--error');
},
})($serverError),
\ No newline at end of file diff --git a/dropins/checkout/containers/shipping-methods/index.html b/dropins/checkout/containers/shipping-methods/index.html index a30dd04b3..37ef46acf 100644 --- a/dropins/checkout/containers/shipping-methods/index.html +++ b/dropins/checkout/containers/shipping-methods/index.html @@ -1,3 +1,3 @@ ShippingMethods container | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

ShippingMethods container

The ShippingMethods container is designed to manage and display the selection of available shipping methods during the checkout process. You can configure it to handle the selection of shipping methods, display the available shipping methods, and manage the main slot for the shipping methods.

ShippingMethods configurations

The ShippingMethods container provides the following configuration options:

OptionTypeReq?Description
hideOnVirtualCartbooleanNoHides the component if the cart is virtual.
onCheckoutDataUpdatefunctionNoA function that returns a promise. It is called to update the checkout data.
onShippingMethodSelectfunctionNoA function that takes a ShippingMethod object as an argument. It is called when a shipping method is selected.
preSelectedMethodobjectNoObject containing carrierCode and methodCode strings. It represents the pre-selected shipping method.
shippingMethodsSlotobjectNoSlot used to provide additional shipping methods.

Example

The following example renders the ShippingMethods container on a checkout page. It includes configurations to hide the component for virtual carts and to refresh the cart data when checkout data is updated.

import * as cartApi from '@dropins/storefront-cart/api.js';
import ShippingMethods from '@dropins/storefront-checkout/containers/ShippingMethods.js';
import { render as CheckoutProvider } from '@dropins/storefront-checkout/render.js';
const $delivery = checkoutFragment.querySelector('.checkout__delivery');
-
CheckoutProvider.render(ShippingMethods, {
hideOnVirtualCart: true,
onCheckoutDataUpdate: () => {
cartApi.refreshCart().catch(console.error);
},
})($delivery),
\ No newline at end of file +
CheckoutProvider.render(ShippingMethods, {
hideOnVirtualCart: true,
onCheckoutDataUpdate: () => {
cartApi.refreshCart().catch(console.error);
},
})($delivery),
\ No newline at end of file diff --git a/dropins/checkout/functions/index.html b/dropins/checkout/functions/index.html index 6c224ac22..fb3a6734a 100644 --- a/dropins/checkout/functions/index.html +++ b/dropins/checkout/functions/index.html @@ -26,4 +26,4 @@
setPaymentMethod('payment-method-code');

setShippingAddress

The setShippingAddress function sets the shipping address for a specific cart using the setShippingAddressesOnCart mutation.

setShippingAddress({ input: SetShippingAddressesOnCartInput });
ParameterTypeReq?Description
addressAddressInputYesAn object containing the shipping address details.

Returns

The function returns a promise that resolves to the transformed cart data fetched from the API.

transformCart

Usage

See the following example for usage details:

import { setShippingAddress } from '@/checkout/api/setShippingAddress';
setShippingAddress({
address: {
city: 'San Francisco',
country_code: 'US',
firstname: 'John',
lastname: 'Doe',
postcode: '94103',
region: {
region_code: 'CA',
region: 'California',
},
street: ['1234 Main Street'],
telephone: '555-555-5555',
},
});

setShippingMethodsOnCart

The setShippingMethodsOnCart function sets the shipping methods for a specific cart using the setShippingMethodsOnCart mutation.

setShippingMethodsOnCart({ input: setShippingMethodsOnCartInput });
ParameterTypeReq?Description
shippingMethodsShippingMethodsOnCartYesAn array of shipping methods of type ShippingMethodsOnCart.

Returns

The function returns a promise that resolves to the transformed cart data fetched from the API.

transformCart

Usage

See the following example for usage details:

import { setShippingMethodsOnCart } from '@/checkout/api/setShippingMethods';
setShippingMethodsOnCart([
{
carrier_code: 'flatrate',
method_code: 'flatrate',
},
]);

synchronizeCheckout

The synchronizeCheckout function synchronizes the checkout state with the current cart information. It ensures that the checkout process is properly initialized, reset, or updated based on the cart data. It uses the getCart function to fetch the necessary cart details.

export const synchronizeCheckout: () => void

Returns

The function does not return any value explicitly; it performs side effects by fetching data and logging errors.

Usage

See the following example for usage details:

import { synchronizeCheckout } from '@/checkout/api/synchronizeCheckout';
-
synchronizeCheckout('IeTUiU0oCXjm0uRqGCOuhQ2AuQatogjG');
\ No newline at end of file +
synchronizeCheckout('IeTUiU0oCXjm0uRqGCOuhQ2AuQatogjG');
\ No newline at end of file diff --git a/dropins/checkout/index.html b/dropins/checkout/index.html index c8fa26fd2..d4cde8d68 100644 --- a/dropins/checkout/index.html +++ b/dropins/checkout/index.html @@ -1 +1 @@ -Checkout overview | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Checkout overview

The checkout drop-in component provides a variety of fully-customizable controls to help complete a purchase.

These controls include forms to introduce required information for contact details like email address, delivery and billing addresses, shipping options, and payment methods. Established customers who added items to the cart as a guest have the ability to sign in, automatically loading default addresses and contact details.

Supported Commerce features

The following table provides an overview of the Adobe Commerce features that the checkout component supports:

FeatureStatus
AEP customer segmentsRoadmap
Apply couponsRoadmap
Cart rulesSupported
Checkout extensibility for different workflows (BOPIS, 2-step checkout)Roadmap
Checkout with digital productsSupported
Checkout with physical productsSupported
Commerce customer segmentsSupported
Create account after checkoutSupported
Customer groupSupported
Custom customer address attributesSupported
Default customer shipping and billing applied at checkoutSupported
Delivery methods extensibilityRoadmap
Extensibility for payment providersSupported
Guest checkoutSupported
Low product stock alertSupported
Not possible to place an order with Out of stock or insufficient quantity productsSupported
Pay with a gift cardAPI only
Pay with rewards pointsAPI only
Pay with store creditAPI only
Registered user checkoutSupported
Save address provided at checkout to address bookRoadmap
Select address from the Address Book to apply at checkoutRoadmap
Shipping address extensibilityRoadmap
Sign in during checkoutSupported
Taxes: FixedAPI only
Taxes: Sales, VATSupported
Zero subtotal checkoutRoadmap
\ No newline at end of file +Checkout overview | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Checkout overview

The checkout drop-in component provides a variety of fully-customizable controls to help complete a purchase.

These controls include forms to introduce required information for contact details like email address, delivery and billing addresses, shipping options, and payment methods. Established customers who added items to the cart as a guest have the ability to sign in, automatically loading default addresses and contact details.

Supported Commerce features

The following table provides an overview of the Adobe Commerce features that the checkout component supports:

FeatureStatus
AEP customer segmentsRoadmap
Apply couponsRoadmap
Cart rulesSupported
Checkout extensibility for different workflows (BOPIS, 2-step checkout)Roadmap
Checkout with digital productsSupported
Checkout with physical productsSupported
Commerce customer segmentsSupported
Create account after checkoutSupported
Customer groupSupported
Custom customer address attributesSupported
Default customer shipping and billing applied at checkoutSupported
Delivery methods extensibilityRoadmap
Extensibility for payment providersSupported
Guest checkoutSupported
Low product stock alertSupported
Not possible to place an order with Out of stock or insufficient quantity productsSupported
Pay with a gift cardAPI only
Pay with rewards pointsAPI only
Pay with store creditAPI only
Registered user checkoutSupported
Save address provided at checkout to address bookRoadmap
Select address from the Address Book to apply at checkoutRoadmap
Shipping address extensibilityRoadmap
Sign in during checkoutSupported
Taxes: FixedAPI only
Taxes: Sales, VATSupported
Zero subtotal checkoutRoadmap
\ No newline at end of file diff --git a/dropins/checkout/initialization/index.html b/dropins/checkout/initialization/index.html index 3f6e23de1..a755edc94 100644 --- a/dropins/checkout/initialization/index.html +++ b/dropins/checkout/initialization/index.html @@ -1,3 +1,3 @@ Checkout initialization | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Checkout initialization

The checkout drop-in component initializer provides options for configuring language definitions and extending the default models with new fields and transformers.

Configuration options

The checkout component initializer accepts the following configuration options:

OptionTypeReq?Description
langDefinitionsobjectNoProvides language definitions for internationalization (i18n).
modelsobjectNoExtend the default models (CartModel, CustomerModel, and OrderModel) with new fields and transform them as needed.

Example

The following code shows an example implementation of the checkout initializer configuration:

// Initialize checkout
initializeDropin(async () => {
await initializers.mountImmediately(initialize, {
langDefinitions,
models,
});
})();

Set language definitions

The langDefinitions property is used to fetch and register dictionary files for the checkout component. This allows you to provide localized text for different languages in your application.

// Fetch the dictionary files for your application
const en_US = await fetch('/i18n/en_US.json').then((res) => res.json());
const fr_FR = await fetch('/i18n/fr_FR.json').then((res) => res.json());
// Register the checkout component with language definitions
const langDefinitions = {
default: en_US,
en_US,
fr_FR,
};
-
// Register initializers
initializers.register(api.initialize, {
langDefinitions,
});

Set models

You can extend the default models in the checkout component and provide transformers to process new fields.

The models property is an object that contains the default models that you might want to extend and the transformers to use to transform the data. By default, the checkout componen initializer accepts the following models only:

  • CartModel
  • CustomerModel
  • OrderModel

The following example shows how to extend the default models with new fields and transformers:

// Initialize checkout
initializeDropin(async () => {
await initializers.mountImmediately(initialize, {
langDefinitions,
models: {
OrderModel: {
transformer: (data) => ({
grandTotal: data?.grand_total,
customerInfo: data?.customer_info,
shipments: data?.shipments,
invoices: data?.invoices,
items: data?.items.map((item) => ({
eligibleForReturn: item.eligible_for_return,
productSku: item.product_sku,
productName: item.product_name,
productType: item.product_type,
product: {
categories: item.product.categories,
description: item.product.description,
isReturnable: item.product.is_returnable,
quantity: item.product.quantity,
reviewCount: item.product.review_count,
stockStatus: item.product.stock_status,
onlyXLeftInStock: item.product.only_x_left_in_stock,
},
})),
}),
},
CustomerModel: {
transformer: (data) => ({
gender: ((gender) => {
switch (gender) {
case 1:
return "Male";
case 2:
return "Female";
case 3:
return "Not Specified";
default:
return "";
}
})(data?.gender),
dateOfBirth: data?.date_of_birth,
}),
},
CartModel: {
transformer: (data) => ({
printedCardIncluded: data?.printed_card_included,
giftReceiptIncluded: data?.gift_receipt_included,
}),
},
},
});
})();
\ No newline at end of file +
// Register initializers
initializers.register(api.initialize, {
langDefinitions,
});

Set models

You can extend the default models in the checkout component and provide transformers to process new fields.

The models property is an object that contains the default models that you might want to extend and the transformers to use to transform the data. By default, the checkout componen initializer accepts the following models only:

The following example shows how to extend the default models with new fields and transformers:

// Initialize checkout
initializeDropin(async () => {
await initializers.mountImmediately(initialize, {
langDefinitions,
models: {
OrderModel: {
transformer: (data) => ({
grandTotal: data?.grand_total,
customerInfo: data?.customer_info,
shipments: data?.shipments,
invoices: data?.invoices,
items: data?.items.map((item) => ({
eligibleForReturn: item.eligible_for_return,
productSku: item.product_sku,
productName: item.product_name,
productType: item.product_type,
product: {
categories: item.product.categories,
description: item.product.description,
isReturnable: item.product.is_returnable,
quantity: item.product.quantity,
reviewCount: item.product.review_count,
stockStatus: item.product.stock_status,
onlyXLeftInStock: item.product.only_x_left_in_stock,
},
})),
}),
},
CustomerModel: {
transformer: (data) => ({
gender: ((gender) => {
switch (gender) {
case 1:
return "Male";
case 2:
return "Female";
case 3:
return "Not Specified";
default:
return "";
}
})(data?.gender),
dateOfBirth: data?.date_of_birth,
}),
},
CartModel: {
transformer: (data) => ({
printedCardIncluded: data?.printed_card_included,
giftReceiptIncluded: data?.gift_receipt_included,
}),
},
},
});
})();
\ No newline at end of file diff --git a/dropins/checkout/installation/index.html b/dropins/checkout/installation/index.html index 925b70d4b..876660958 100644 --- a/dropins/checkout/installation/index.html +++ b/dropins/checkout/installation/index.html @@ -1 +1 @@ -Checkout installation | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Checkout installation

The checkout drop-in component provides a customizable UI for the checkout process. The checkout compoennt is designed to be integrated into a your storefront and provides a seamless checkout experience for customers.

Installation

Since the checkout component relies on containers from several other drop-in components, you must install and configure those components before you can use the checkout component.

The Commerce boilerplate template includes all of the necessary drop-in components and configurations to help you get started quickly, so Adobe recommends relying on the boilerplate instead of installing, configuring, and integrating the drop-in components individually.

Admin configuration

Before you can use the checkout component on your storefront, you must enable and configure payment providers and checkout options in the Adobe Commerce Admin.

\ No newline at end of file +Checkout installation | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Checkout installation

The checkout drop-in component provides a customizable UI for the checkout process. The checkout compoennt is designed to be integrated into a your storefront and provides a seamless checkout experience for customers.

Installation

Since the checkout component relies on containers from several other drop-in components, you must install and configure those components before you can use the checkout component.

The Commerce boilerplate template includes all of the necessary drop-in components and configurations to help you get started quickly, so Adobe recommends relying on the boilerplate instead of installing, configuring, and integrating the drop-in components individually.

Admin configuration

Before you can use the checkout component on your storefront, you must enable and configure payment providers and checkout options in the Adobe Commerce Admin.

\ No newline at end of file diff --git a/dropins/checkout/slots/index.html b/dropins/checkout/slots/index.html index a1ff7aaac..02bffb375 100644 --- a/dropins/checkout/slots/index.html +++ b/dropins/checkout/slots/index.html @@ -4,5 +4,5 @@
$content.innerHTML = '<div id="dropin-container"></div>';
if (element) {
element.innerHTML = $content.innerHTML;
braintree.dropin.create({
authorization: 'sandbox_g42y39zw_348pk9cgf3bgyw2b',
container: '#dropin-container',
});
}
};
. . .
-
// Set the function on the slot
CheckoutProvider.render(PaymentMethods, {
slots: {
Main: renderBraintreePayments,
},
})(document.getElementById('payment-methods'));

Handlers

Defines an array of payment method codes and their callback functions in the Handlers slot of the PaymentMethods container to provide handlers to be executed in case of being selected.

The Handlers slot implements the following interface:

export interface PaymentMethodHandlerSlots {
[code: string]: SlotProps<PaymentMethodHandlerSlotContext>;
}
-
export interface PaymentMethodHandlerSlotContext {
cartId: string;
replaceHTML: (domElement: HTMLElement) => void;
}

The context object passed to the Handlers slot includes a replaceHTML property that is a callback function and the cartId got from the internal state.

How to override it

The following example shows how to assign handlers for the check/money Order and bank transfer payment methods:

CheckoutProvider.render(PaymentMethods, {
slots: {
Handlers: {
checkmo: (ctx, element) => {
element.textContent = 'Selected checkmo as payment method!';
},
banktransfer: (ctx, element) => {
element.textContent = 'Selected banktransfer as payment method!';
},
},
},
})(document.getElementById('payment-methods'));
\ No newline at end of file +
// Set the function on the slot
CheckoutProvider.render(PaymentMethods, {
slots: {
Main: renderBraintreePayments,
},
})(document.getElementById('payment-methods'));

Handlers

Defines an array of payment method codes and their callback functions in the Handlers slot of the PaymentMethods container to provide handlers to be executed in case of being selected.

The Handlers slot implements the following interface:

export interface PaymentMethodHandlerSlots {
[code: string]: SlotProps<PaymentMethodHandlerSlotContext>;
}
+
export interface PaymentMethodHandlerSlotContext {
cartId: string;
replaceHTML: (domElement: HTMLElement) => void;
}

The context object passed to the Handlers slot includes a replaceHTML property that is a callback function and the cartId got from the internal state.

How to override it

The following example shows how to assign handlers for the check/money Order and bank transfer payment methods:

CheckoutProvider.render(PaymentMethods, {
slots: {
Handlers: {
checkmo: (ctx, element) => {
element.textContent = 'Selected checkmo as payment method!';
},
banktransfer: (ctx, element) => {
element.textContent = 'Selected banktransfer as payment method!';
},
},
},
})(document.getElementById('payment-methods'));
\ No newline at end of file diff --git a/dropins/checkout/styles/index.html b/dropins/checkout/styles/index.html index f1084546c..b8a9e010c 100644 --- a/dropins/checkout/styles/index.html +++ b/dropins/checkout/styles/index.html @@ -109,4 +109,4 @@
/* Small devices (portrait tablets and large phones, 600px and up) */
/* @media only screen and (min-width: 600px) { } */
/* Medium devices (landscape tablets, 768px and up) */
/* @media only screen and (min-width: 768px) { } */
/* Large devices (laptops/desktops, 992px and up) */
/* @media only screen and (min-width: 992px) { } */
-
/* Extra large devices (large laptops and desktops, 1200px and up) */
/* @media only screen and (min-width: 1200px) { } */
\ No newline at end of file +
/* Extra large devices (large laptops and desktops, 1200px and up) */
/* @media only screen and (min-width: 1200px) { } */
\ No newline at end of file diff --git a/dropins/checkout/tutorials/add-payment-method/index.html b/dropins/checkout/tutorials/add-payment-method/index.html index 823fc0a5a..4f2fb5e06 100644 --- a/dropins/checkout/tutorials/add-payment-method/index.html +++ b/dropins/checkout/tutorials/add-payment-method/index.html @@ -1 +1,8 @@ -Add a payment method | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Add a payment method

The Commerce boilerplate template supports a variety of third-party payment providers, enabling you to integrate the payment gateway of your choice.

Steps-by-step

This tutorial provides a step-by-step guide for integrating the Adyen payment provider with the Commerce boilerplate template using a custom NPM package developed by Adobe. You can use these steps as a reference to integrate other payment providers as well.

Prerequisites

You must install and configure the Adyen Payment Plugin on your Adobe Commerce backend before integrating it with the Commerce boilerplate template.

Add your client key

After you install and configure the Adyen Payment Plugin on your Adobe Commerce backend, you need to add your Adyen client key to the Commerce boilerplate configuration.

  1. Open your project’s configs-stage or configs-dev Google Sheet or Microsoft Excel file.

  2. Add a new key-value pair for your Adyen API key.

    keyvalue
    adyen-client-keyYOUR_CLIENT_KEY
  3. Save the file.

  4. Publish file changes with the Sidekick extension.

Install the package

  1. Open a terminal and navigate to your boilerplate-based project.

  2. Install the Adyen NPM package and add it to the list of project dependencies in your package.json file with the --save flag.

    Terminal window
    npm install @dropins/adyen-checkout-extension --save

Integrate with the boilerplate

To integrate third-party payment providers, like Adyen, with Adobe Commerce, you can use the extensibility features provided by the checkout drop-in component. The checkout component allows you to customize the list of payment methods shown during the checkout process using slots.

  1. Open the blocks/commerce-checkout/commerce-checkout.js file.

  2. Import the required files.

    ...
    // Adyen drop-in modules
    import * as adyenApi from '@dropins/adyen-checkout-extension/api.js';
    import { render as AdyenProvider } from '@dropins/adyen-checkout-extension/render.js';
    import AdyenPaymentMethod from '@dropins/adyen-checkout-extension/containers/AdyenPaymentMethod.js';
    ...
  3. Register the Adyen API.

    ...
    initializers.register(adyenApi.initialize, {});
    ...
  4. Use the PaymentMethod handlers slot to add a payment method handler for Adyen. This handler will render the Adyen payment method UI when the backend indicates that Adyen credit card is an allowed payment method.

    ...
    context.addPaymentMethodHandler('adyen_cc', {
    render: (ctx, element) => {
    AdyenProvider(AdyenPaymentMethod, ctx, element);
    if (element) {
    // Clear the lement first
    element.innerHTML = '';
    // Render the Adyen component
    adyenProvider.render(AdyenPaymentMethod, ctx)(element);
    }
    },
    })
    ...

Verify the integration

  1. Start the development server to view the boilerplate storefront.

    Terminal window
    npm start
  2. Navigate to a checkout page and verify that the Adyen payment method is displayed as an option.

    [screenshot]

\ No newline at end of file +Add a payment method | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Add a payment method

To integrate third-party payment providers, you can use the extensibility features provided by the checkout drop-in component. This component allows you to customize the list of payment methods shown during the checkout process using slots.

Steps-by-step

This tutorial provides a step-by-step guide for integrating the Braintree payment provider with the Commerce boilerplate template. You can use these steps as a reference to integrate other payment providers as well.

Prerequisites

You must configure the Braintree extension on your Adobe Commerce backend before integrating it with the Commerce boilerplate template.

Add the Braintree client SDK

To integrate the Braintree payment provider with the Commerce boilerplate template, you must add the Braintree client SDK to the commerce-checkout.js file.

  1. Open the blocks/commerce-checkout/commerce-checkout.js file.

  2. Import the Braintree client SDK.

    ...
    import 'https://js.braintreegateway.com/web/dropin/1.43.0/js/dropin.js';
    ...

Define a payment method modifier

To render the Braintree payment method UI in the PaymentMethods container, you must define a modifier that you can use in the container’s main slot.

const renderBraintreePayments = (element, context) => {
const { onPlaceOrder } = context;
const $content = document.createElement('div');
+
$content.innerHTML = '<div id="dropin-container"></div>';

Create and insert the Braintree drop-in UI

Inside the function, a new div element is created and assigned to $content. This div contains another div with the ID dropin-container. If the element parameter is provided, its inner HTML is set to the content of $content. Then, the Braintree drop-in UI is created and attached to the #dropin-container using the provided authorization token.

if (element) {
element.innerHTML = $content.innerHTML;
braintree.dropin.create({
authorization: 'sandbox_g42y39zw_348pk9cgf3bgyw2b',
container: '#dropin-container',
});
}
};

Set the function on the slot

Finally, you must set the renderBraintreePayments function on the main slot.

CheckoutProvider.render(PaymentMethods, {
slots: {
Main: renderBraintreePayments,
},
})(document.getElementById('payment-methods'));

Example

The following files show the complete JS and CSS code for the Braintree payment provider integration:

commerce-checkout.js
import 'https://js.braintreegateway.com/web/dropin/1.43.0/js/dropin.js';
+
. . .
+
// Define the modifier for the Payment Methods section
const renderBraintreePayments = (element, context) => {
const { onPlaceOrder } = context;
const $content = document.createElement('div');
+
$content.innerHTML = '<div id="dropin-container"></div>';
+
if (element) {
element.innerHTML = $content.innerHTML;
braintree.dropin.create({
authorization: 'sandbox_g42y39zw_348pk9cgf3bgyw2b',
container: '#dropin-container',
});
}
};
+
. . .
+
// Set the function on the slot
CheckoutProvider.render(PaymentMethods, {
slots: {
Main: renderBraintreePayments,
},
})(document.getElementById('payment-methods'));
\ No newline at end of file diff --git a/dropins/order/functions/index.html b/dropins/order/functions/index.html index 7dfeb88be..710c5cd13 100644 --- a/dropins/order/functions/index.html +++ b/dropins/order/functions/index.html @@ -1 +1 @@ -Order functions | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Order functions

\ No newline at end of file +Order functions | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Order functions

\ No newline at end of file diff --git a/dropins/order/initialization/index.html b/dropins/order/initialization/index.html index 7e102fd2d..721278e3d 100644 --- a/dropins/order/initialization/index.html +++ b/dropins/order/initialization/index.html @@ -1 +1 @@ -Order initialization | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Order initialization

The order drop-in component initializer provides options for configuring language definitions and extending the default models with new fields and transformers.

\ No newline at end of file +Order initialization | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Order initialization

The order drop-in component initializer provides options for configuring language definitions and extending the default models with new fields and transformers.

\ No newline at end of file diff --git a/dropins/order/slots/index.html b/dropins/order/slots/index.html index de373872d..f8e03eeaf 100644 --- a/dropins/order/slots/index.html +++ b/dropins/order/slots/index.html @@ -1 +1 @@ -Order slots | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Order slots

Learn about the slots provided in the order drop-in component.

Extending drop-in components describes the default properties available to all slots.

\ No newline at end of file +Order slots | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Order slots

Learn about the slots provided in the order drop-in component.

Extending drop-in components describes the default properties available to all slots.

\ No newline at end of file diff --git a/dropins/order/styles/index.html b/dropins/order/styles/index.html index 41a4c5af9..486bb3cde 100644 --- a/dropins/order/styles/index.html +++ b/dropins/order/styles/index.html @@ -1 +1 @@ -Order styles | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Order styles

\ No newline at end of file +Order styles | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Order styles

\ No newline at end of file diff --git a/dropins/product-details/index.html b/dropins/product-details/index.html index e14c99c44..369da23a0 100644 --- a/dropins/product-details/index.html +++ b/dropins/product-details/index.html @@ -1 +1 @@ -Product details page overview | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Product details page overview

The product details page (PDP) drop-in component renders detailed information about your products, including descriptions, specifications, options, pricing, and images.

The practical application of rendering different product types is to provide a consistent user experience across different products. For example, a simple product can be rendered with a single price and quantity, while a complex product can be rendered with multiple options; their combination resulting in product variants. This flexibility allows you to showcase a wide range of products in a consistent and user-friendly manner. These product types allow you to cater to diverse customer needs, streamline operations, and enhance the shopping experience.

Use cases

The PDP component provides a variety of fully-customizable controls to showcase your products according to your brand’s aesthetics and build interactive experiences that engage customers. Use cases include:

  • Image Carousel: Display multiple product images in a carousel format, allowing users to view different angles and details of the product.
  • Product Information: Showcase detailed product information, including pricing, descriptions, and specifications.
  • Product Variants: Display different product variants, such as colors, sizes, and styles, allowing users to select the option that best fits their needs.
  • Product Reviews: Include user reviews and ratings to provide social proof and help users make informed purchasing decisions.
  • Customization Options: Customize the appearance and behavior of the drop-in component to align with your brand’s design aesthetic and user experience goals.

Render product types

The PDP component supports rendering different product types configured in your Adobe Commerce instance by default using data provided by the Catalog Service GraphQL API. Adobe Commerce supports seven product types, but the Catalog Service GraphQL API schema maps these to two types:

  • Simple products are products that are defined with a single price and quantity. Catalog Service maps the simple, virtual, downloadable, and gift card product types to simpleProductViews.

  • Complex products are comprised of multiple simple products. The component simple products can have different prices. A complex product can also be defined so that the shopper can specify the quantity of component simple products. Catalog Service maps the configurable, bundle, and grouped product types to complexProductViews.

Product metadata and SEO

Generating product metadata is crucial for optimizing search engine visibility, enhancing user experience, integrating with social media, supporting ecommerce functionality, ensuring compliance, and enabling data-driven decision-making.

The Commerce boilerplate provides a metadata generation script that fetches product data from the Catalog Service GraphQL API and generates meta tags and structured data in JSON-LD format. The script writes the metadata to an Excel file, which you can upload to Edge Delivery Services.

\ No newline at end of file +Product details page overview | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Product details page overview

The product details page (PDP) drop-in component renders detailed information about your products, including descriptions, specifications, options, pricing, and images.

The practical application of rendering different product types is to provide a consistent user experience across different products. For example, a simple product can be rendered with a single price and quantity, while a complex product can be rendered with multiple options; their combination resulting in product variants. This flexibility allows you to showcase a wide range of products in a consistent and user-friendly manner. These product types allow you to cater to diverse customer needs, streamline operations, and enhance the shopping experience.

Use cases

The PDP component provides a variety of fully-customizable controls to showcase your products according to your brand’s aesthetics and build interactive experiences that engage customers. Use cases include:

  • Image Carousel: Display multiple product images in a carousel format, allowing users to view different angles and details of the product.
  • Product Information: Showcase detailed product information, including pricing, descriptions, and specifications.
  • Product Variants: Display different product variants, such as colors, sizes, and styles, allowing users to select the option that best fits their needs.
  • Product Reviews: Include user reviews and ratings to provide social proof and help users make informed purchasing decisions.
  • Customization Options: Customize the appearance and behavior of the drop-in component to align with your brand’s design aesthetic and user experience goals.

Render product types

The PDP component supports rendering different product types configured in your Adobe Commerce instance by default using data provided by the Catalog Service GraphQL API. Adobe Commerce supports seven product types, but the Catalog Service GraphQL API schema maps these to two types:

  • Simple products are products that are defined with a single price and quantity. Catalog Service maps the simple, virtual, downloadable, and gift card product types to simpleProductViews.

  • Complex products are comprised of multiple simple products. The component simple products can have different prices. A complex product can also be defined so that the shopper can specify the quantity of component simple products. Catalog Service maps the configurable, bundle, and grouped product types to complexProductViews.

Product metadata and SEO

Generating product metadata is crucial for optimizing search engine visibility, enhancing user experience, integrating with social media, supporting ecommerce functionality, ensuring compliance, and enabling data-driven decision-making.

The Commerce boilerplate provides a metadata generation script that fetches product data from the Catalog Service GraphQL API and generates meta tags and structured data in JSON-LD format. The script writes the metadata to an Excel file, which you can upload to Edge Delivery Services.

\ No newline at end of file diff --git a/dropins/product-details/pdp-containers/index.html b/dropins/product-details/pdp-containers/index.html index 3bbf75164..7d74c35c3 100644 --- a/dropins/product-details/pdp-containers/index.html +++ b/dropins/product-details/pdp-containers/index.html @@ -1 +1 @@ -PDP containers | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

PDP containers

The product details page (PDP) drop-in component has a single container called ProductDetails. The container’s configuration options are provided below.

Configuration options

The product details page provides the following configuration options:

OptionTypeReq?Description
skustringYesThe unique identifier for the product.
hideSkubooleanNoOptional boolean to hide the SKU display.
hideQuantitybooleanNoHides the quantity selector if set to true.
hideSelectedOptionValuebooleanNoHides the selected values of the option.
hideShortDescriptionbooleanNoHides the short description if set to true.
hideDescriptionbooleanNoHides the description if set to true.
hideAttributesbooleanNoHides the attributes if set to true.
hideURLParamsbooleanNoDisables synchronization of options with URL parameters if true.
productDataProductModelNoOptional initial product data to preload the component.
slotsobjectNoAn object containing slot overrides for customizing various parts of the component display.
carouselCarouselConfigNoConfiguration for the product image carousel display.
onAddToCartfunctionNoCallback function triggered upon adding the product to the cart.
zoomTypestringNoSpecifies the type of zoom functionality for a product image. Options: "zoom" or "overlay".
closeButtonbooleanNoIndicates whether a close button should be displayed.

SKU

The sku property is the only required configuration. It’s a string that uniquely identifies the product. This value is used to fetch ProductModel data from the backend.

Hide options

The hide options (hideSku, hideQuantity, and the others) let you hide the parts of the product details UI that are not relevant for your storefront. These properties are optional and default to false.

Product Data

The productData property is an optional object that contains the initial product data to preload the component. The object should follow the ProductModel interface:

interface ProductModel {
name: string;
sku: string;
addToCartAllowed: boolean;
inStock: boolean | null;
shortDescription?: string;
metaDescription?: string;
metaKeyword?: string;
metaTitle?: string;
description?: string;
images?: Image[];
prices: Prices;
attributes?: Attribute[];
options?: Option[];
optionUIDs?: string[];
url?: string;
urlKey?: string;
externalId?: string;
externalParentId?: string;
variantSku?: string;
}

View the Example configuration section for an example of how to use this property.

Slots

Slots allow for the customization of component parts. Each slot accepts a SlotProps object with a context containing data, values, and a valid state. Custom actions and content can be added through these slots. Visit the Slots page for slot details and usage information.

The Carousel settings available for configuration are defined in the CarouselConfig interface:

interface CarouselConfig {
controls?: {
desktop?: 'thumbnailsRow' | 'thumbnailsColumn' | 'dots' | null;
mobile?: 'dots' | 'thumbnailsRow' | null;
};
arrowsOnMainImage?: boolean;
loopable?: boolean;
peak?: {
desktop?: boolean;
mobile?: boolean;
};
gap?: 'small' | 'medium' | 'large' | null;
thumbnailsLoadingMode?: 'lazy' | 'eager';
imageParams?: ResolveImageUrlOptions;
thumbnailParams?: ResolveImageUrlOptions;
}
OptionTypeReq?Description
controlsstringNoLayout options: thumbnailsRow, thumbnailsColumn, or dots.
arrowOnMainImagebooleanNoWhether to display the carousel arrows on the main image.
loopablebooleanNoWhether the carousel should loop continously or stop at the end.
peakobjectNoWhether to show part of the next image on mobile and desktop.
gapstringNoThe space between the image and the next one.
thumbnailsLoadingModestringNoThe loading mode for the thumbnails: lazy or eager.
imageParamsobjectNoCan be used to set the width, height, auto, quality, crop, and fit properties of carousel images.
thumbnailParamsobjectNoCan be used to the set width, height, auto, quality, crop, and fit properties of the carousel thumbnails.

The Example configuration section shows a usage example for carousel.

onAddToCart

Triggered when the Add to Cart button is clicked. Receives an object with sku, quantity, and optionally optionsUIDs reflecting the user’s selection.

// values: Values { sku: string, quantity: number, optionsUIDs: string[] }
onAddToCart: (values) => void;

zoomType

This property can take one of two string values: zoom or overlay. It is used to enhance product image viewing by providing zoom or overlay functionality:

  • overlay (default): Provides a larger, distraction-free view of a product image. The clicked image is opened in full screen.
  • zoom: Provides a close-up view of the product’s image in the gallery. The clicked image is not opened in full screen.

closeButton

This property is a boolean that can only be used in combination with the zoomType property. The default value is false. If true, the close button is shown; if false or not provided, the close button is not shown.

Example configuration

The following example demonstrates how to configure the product details container:

return productRenderer.render(ProductDetails, {
sku: yourGetSkuFetchFunction(),
hideSku: false,
initialData: {
name: 'Product Name',
sku: '12345',
addToCartAllowed: false;
inStock: true,
shortDescription: 'Short description of the product.',
description: 'Long description of the product.',
images: [
{ url: 'https://via.placeholder.com/150', label: 'Product image', width: 150, height: 150},
{ url: 'https://via.placeholder.com/150', label: 'Product image', width: 150, height: 150},
],
},
hideQuantity: false,
hideShortDescription: false,
hideDescription: false,
hideAttributes: false,
hideURLParams: false,
carousel: {
controls: {
desktop: 'thumbnailsRow', // | 'thumbnailsColumn' | 'dots' | null,
mobile: 'dots', // | 'thumbnailsRow' | null,
}
arrowsOnMainImage: true,
loopable: true,
peak: {
mobile: true,
desktop: true,
}
thumbnailsLoadingMode: 'lazy', // 'lazy' | 'eager';
imageParams: ResolveImageUrlOptions,
thumbnailParams: ResolveImageUrlOptions,
},
zoomType: 'zoom',
closeButton: true,
slots: {
// See all PDP slots in the next section
Title: { },
SKU: { },
},
onAddToCart: (values) => console.log('Added to cart', values),
});
\ No newline at end of file +PDP containers | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

PDP containers

The product details page (PDP) drop-in component has a single container called ProductDetails. The container’s configuration options are provided below.

Configuration options

The product details page provides the following configuration options:

OptionTypeReq?Description
skustringYesThe unique identifier for the product.
hideSkubooleanNoOptional boolean to hide the SKU display.
hideQuantitybooleanNoHides the quantity selector if set to true.
hideSelectedOptionValuebooleanNoHides the selected values of the option.
hideShortDescriptionbooleanNoHides the short description if set to true.
hideDescriptionbooleanNoHides the description if set to true.
hideAttributesbooleanNoHides the attributes if set to true.
hideURLParamsbooleanNoDisables synchronization of options with URL parameters if true.
productDataProductModelNoOptional initial product data to preload the component.
slotsobjectNoAn object containing slot overrides for customizing various parts of the component display.
carouselCarouselConfigNoConfiguration for the product image carousel display.
onAddToCartfunctionNoCallback function triggered upon adding the product to the cart.
zoomTypestringNoSpecifies the type of zoom functionality for a product image. Options: "zoom" or "overlay".
closeButtonbooleanNoIndicates whether a close button should be displayed.

SKU

The sku property is the only required configuration. It’s a string that uniquely identifies the product. This value is used to fetch ProductModel data from the backend.

Hide options

The hide options (hideSku, hideQuantity, and the others) let you hide the parts of the product details UI that are not relevant for your storefront. These properties are optional and default to false.

Product Data

The productData property is an optional object that contains the initial product data to preload the component. The object should follow the ProductModel interface:

interface ProductModel {
name: string;
sku: string;
addToCartAllowed: boolean;
inStock: boolean | null;
shortDescription?: string;
metaDescription?: string;
metaKeyword?: string;
metaTitle?: string;
description?: string;
images?: Image[];
prices: Prices;
attributes?: Attribute[];
options?: Option[];
optionUIDs?: string[];
url?: string;
urlKey?: string;
externalId?: string;
externalParentId?: string;
variantSku?: string;
}

View the Example configuration section for an example of how to use this property.

Slots

Slots allow for the customization of component parts. Each slot accepts a SlotProps object with a context containing data, values, and a valid state. Custom actions and content can be added through these slots. Visit the Slots page for slot details and usage information.

The Carousel settings available for configuration are defined in the CarouselConfig interface:

interface CarouselConfig {
controls?: {
desktop?: 'thumbnailsRow' | 'thumbnailsColumn' | 'dots' | null;
mobile?: 'dots' | 'thumbnailsRow' | null;
};
arrowsOnMainImage?: boolean;
loopable?: boolean;
peak?: {
desktop?: boolean;
mobile?: boolean;
};
gap?: 'small' | 'medium' | 'large' | null;
thumbnailsLoadingMode?: 'lazy' | 'eager';
imageParams?: ResolveImageUrlOptions;
thumbnailParams?: ResolveImageUrlOptions;
}
OptionTypeReq?Description
controlsstringNoLayout options: thumbnailsRow, thumbnailsColumn, or dots.
arrowOnMainImagebooleanNoWhether to display the carousel arrows on the main image.
loopablebooleanNoWhether the carousel should loop continously or stop at the end.
peakobjectNoWhether to show part of the next image on mobile and desktop.
gapstringNoThe space between the image and the next one.
thumbnailsLoadingModestringNoThe loading mode for the thumbnails: lazy or eager.
imageParamsobjectNoCan be used to set the width, height, auto, quality, crop, and fit properties of carousel images.
thumbnailParamsobjectNoCan be used to the set width, height, auto, quality, crop, and fit properties of the carousel thumbnails.

The Example configuration section shows a usage example for carousel.

onAddToCart

Triggered when the Add to Cart button is clicked. Receives an object with sku, quantity, and optionally optionsUIDs reflecting the user’s selection.

// values: Values { sku: string, quantity: number, optionsUIDs: string[] }
onAddToCart: (values) => void;

zoomType

This property can take one of two string values: zoom or overlay. It is used to enhance product image viewing by providing zoom or overlay functionality:

  • overlay (default): Provides a larger, distraction-free view of a product image. The clicked image is opened in full screen.
  • zoom: Provides a close-up view of the product’s image in the gallery. The clicked image is not opened in full screen.

closeButton

This property is a boolean that can only be used in combination with the zoomType property. The default value is false. If true, the close button is shown; if false or not provided, the close button is not shown.

Example configuration

The following example demonstrates how to configure the product details container:

return productRenderer.render(ProductDetails, {
sku: yourGetSkuFetchFunction(),
hideSku: false,
initialData: {
name: 'Product Name',
sku: '12345',
addToCartAllowed: false;
inStock: true,
shortDescription: 'Short description of the product.',
description: 'Long description of the product.',
images: [
{ url: 'https://via.placeholder.com/150', label: 'Product image', width: 150, height: 150},
{ url: 'https://via.placeholder.com/150', label: 'Product image', width: 150, height: 150},
],
},
hideQuantity: false,
hideShortDescription: false,
hideDescription: false,
hideAttributes: false,
hideURLParams: false,
carousel: {
controls: {
desktop: 'thumbnailsRow', // | 'thumbnailsColumn' | 'dots' | null,
mobile: 'dots', // | 'thumbnailsRow' | null,
}
arrowsOnMainImage: true,
loopable: true,
peak: {
mobile: true,
desktop: true,
}
thumbnailsLoadingMode: 'lazy', // 'lazy' | 'eager';
imageParams: ResolveImageUrlOptions,
thumbnailParams: ResolveImageUrlOptions,
},
zoomType: 'zoom',
closeButton: true,
slots: {
// See all PDP slots in the next section
Title: { },
SKU: { },
},
onAddToCart: (values) => console.log('Added to cart', values),
});
\ No newline at end of file diff --git a/dropins/product-details/pdp-functions/index.html b/dropins/product-details/pdp-functions/index.html index caca5b64a..884bf3c0b 100644 --- a/dropins/product-details/pdp-functions/index.html +++ b/dropins/product-details/pdp-functions/index.html @@ -1,3 +1,3 @@ PDP functions | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

PDP functions

The product details page (PDP) drop-in component provides two functions for retrieving the product details data to display: getProductData and getRefinedProduct.

getProductData

This function returns the product data for a given product sku. It takes sku as a parameter.

import { getProductData } from '@/pdp/api/getProductData';
getProductData(sku: string);

getRefinedProduct

A function that returns refined product’s data. It takes sku, optionUIDs, and isBundle? as parameters.

import { getRefinedProduct } from '@/pdp/api/getRefinedProduct';
-
getRefinedProduct(sku: string, optionUIDs: string, isBundle?: boolean[]);

Example usage

\ No newline at end of file +
getRefinedProduct(sku: string, optionUIDs: string, isBundle?: boolean[]);

Example usage

\ No newline at end of file diff --git a/dropins/product-details/pdp-initialization/index.html b/dropins/product-details/pdp-initialization/index.html index add865e78..de8456822 100644 --- a/dropins/product-details/pdp-initialization/index.html +++ b/dropins/product-details/pdp-initialization/index.html @@ -1,3 +1,3 @@ PDP initialization | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

PDP initialization

Customizing the product details page (PDP) drop-in component initializers can help you meet your project requirements and use cases.

Configuration options

The PDP drop-in component initializers allow you to define the language definitions, default locale, and models that your project will use.

OptionTypeReq?Description
langDefinitionsobjectNoProvides language definitions for internationalization (i18n).
defaultLocalestringNoSpecifies the default locale. If not provided, defaults to en-US.
modelsobjectNoDefines the data structure and initial data. Options include initialData, transform, and fallBackData.

Example

The following code shows the default implementation of the PDP drop-in component initializer in the Commerce boilerplate:

// Define the models object with a ProductDetails property
const models = {
ProductDetails: {
initialData: { ...product },
},
};
// Initialize drop-in components
initializers.register(productApi.initialize, {
langDefinitions,
models,
});

Set default product options

When a user navigates to the product detail page (PDP) on your site, you can set certain options as preselected defaults for complex products. This use case allows merchandisers to set default options through the Adobe Commerce Admin, which provides a more customized and streamlined shopping experience.

Default option selection is not supported out-of-the-box for complex products. Instead, you must use product attributes and customize the PDP drop-in component initializers to define which attribute and value is used by default.

  1. Log in to the Adobe Commerce Admin.

  2. Create a custom attribute (default_options) to define default options for each product.

  3. Ensure that the default_options attribute has been exported to the Catalog Service and that the attribute’s roles field includes visible_in_pdp. See the ProductViewAttribute type documentation for details.

  4. Use the products query to find the id of the default_options attribute for each product.

  5. Add the id of the default_options attribute to the initialData object for each complex product.

  6. Use the id to set the optionsUIDs in the initialData object.

    // Define the models object with a ProductDetails property
    const models = {
    ProductDetails: {
    initialData: {
    ...initialData,
    // Set the optionsUIDs for each product
    optionsUIDs: [
    '<id>', // Use the id of the default_options attribute for product 1
    '<id>', // Use the id of the default_options attribute for product 2
    ],
    },
    },
    };
    -
    // Register Initializers
    initializers.register(api.initialize, {
    langDefinitions,
    models,
    });
\ No newline at end of file +
// Register Initializers
initializers.register(api.initialize, {
langDefinitions,
models,
});
\ No newline at end of file diff --git a/dropins/product-details/pdp-installation/index.html b/dropins/product-details/pdp-installation/index.html index bb475cac5..e3a2edd3f 100644 --- a/dropins/product-details/pdp-installation/index.html +++ b/dropins/product-details/pdp-installation/index.html @@ -6,4 +6,4 @@
// Drop-in component container
import ProductDetails from '@dropins/storefront-pdp/containers/ProductDetails.js';

Connect to the endpoint

Connect your product details component to the Catalog Service GraphQL endpoint and set the required headers as shown in the example below. Replace the endpoint URL and header placeholder values with the actual values from your Commerce backend services:

product-details.js
// Set endpoint configuration
product.setEndpoint('https://<catalog-service-endpoint>/graphql');
product.setFetchGraphQlHeaders({
// Environment required headers
'Magento-Environment-Id': 'your-environment-id',
'Magento-Store-View-Code': 'your-store-view-code',
'Magento-Website-Code': 'your-website-code',
'x-api-key': 'your-api-key',
'Magento-Store-Code': 'main_website_store',
'Magento-Customer-Group': 'your-customer-group',
'Content-Type': 'application/json',
});

Register and load the drop-in

The code below shows how to register the product details component, load it (mount), and enable the logger for debugging purposes. You can add these functions within a <script> tag in your product details HTML page as shown here:

index.html
<script type="module">
// more code above...
// Register and load the product details component
initializers.register(pdp.initialize);
-
// Mount Initializers (must be called after all initializers are registered)
window.addEventListener('load', initializers.mount);
</script>
  1. This function registers the product details component to be loaded on the page by the initializers.mount function.
  2. This event handler triggers the initializers.mount function to load the product details component after the page has loaded.

Render the drop-in

Render the product details component on the page. The example below provides the minimal configuration options required to render the default product details component:

product-details.js
// Render product details
productRenderer(ProductDetails, {
sku: 'SKU-001',
// other configuration options
// slots for adding custom elements, components, and functions
})(document.getElementById('your-pdp-element'));

Test the product details component by viewing your PDP page in a browser, or running your local dev or build server. If you see the product details component rendered in the browser, congrats!, you have a successful installation. If not, check the console for any errors and verify that you have followed all the steps correctly.

Summary

The installation of all dropin-in components follows the same pattern demonstrated by installing the PDP drop-in: Install, Map, Import, Connect, Register, and Render. We like to call the process iMICRR for short, pronounced eye-mike-er. Actually, we don’t call it that, but if it helps…Enjoy!

\ No newline at end of file +
// Mount Initializers (must be called after all initializers are registered)
window.addEventListener('load', initializers.mount);
</script>
  1. This function registers the product details component to be loaded on the page by the initializers.mount function.
  2. This event handler triggers the initializers.mount function to load the product details component after the page has loaded.

Render the drop-in

Render the product details component on the page. The example below provides the minimal configuration options required to render the default product details component:

product-details.js
// Render product details
productRenderer(ProductDetails, {
sku: 'SKU-001',
// other configuration options
// slots for adding custom elements, components, and functions
})(document.getElementById('your-pdp-element'));

Test the product details component by viewing your PDP page in a browser, or running your local dev or build server. If you see the product details component rendered in the browser, congrats!, you have a successful installation. If not, check the console for any errors and verify that you have followed all the steps correctly.

Summary

The installation of all dropin-in components follows the same pattern demonstrated by installing the PDP drop-in: Install, Map, Import, Connect, Register, and Render. We like to call the process iMICRR for short, pronounced eye-mike-er. Actually, we don’t call it that, but if it helps…Enjoy!

\ No newline at end of file diff --git a/dropins/product-details/pdp-slots/index.html b/dropins/product-details/pdp-slots/index.html index 08a75d4a8..16ac62cc3 100644 --- a/dropins/product-details/pdp-slots/index.html +++ b/dropins/product-details/pdp-slots/index.html @@ -6,4 +6,4 @@
ctx.onChange((next) => {
quantity.innerText = `${next.dictionary.Custom.quantityLabel}`;
promo.innerText = `${next.dictionary.Custom.promoLabel}:`;
});
},
},
});

Actions

return productRenderer.render(ProductDetails, {
sku: getSkuFromUrl(),
slots: {
Actions: (ctx) => {
// actions decoration
const actions = document.createElement('div');
actions.classList.add('actions-decoration');
actions.innerHTML = 'Actions';
ctx.prependChild(actions);
const addToCart = ctx.appendButton({
text: 'Add to Cart',
icon: 'cart',
onClick: () => {
console.log('Add to Cart clicked');
},
});
const addToWishlist = ctx.appendButton({
text: 'Add to Wishlist',
icon: 'heart',
onClick: () => {
console.log('Add to Wishlist clicked');
},
});
-
const share = ctx.appendButton({
text: 'Share',
icon: 'share',
onClick: () => {
console.log('Share clicked');
},
});
},
},
});

Short Description

return productRenderer.render(ProductDetails, {
sku: getSkuFromUrl(),
slots: {
ShortDescription: (ctx) => {
const shortDescription = document.createElement('div');
// add good example
},
},
});

Description

return productRenderer.render(ProductDetails, {
sku: getSkuFromUrl(),
slots: {
Description: (ctx) => {
const description = document.createElement('div');
// add good example
},
},
});

Attributes

return productRenderer.render(ProductDetails, {
sku: getSkuFromUrl(),
slots: {
Attributes: (ctx) => {
const attributes = document.createElement('div');
// add good example
},
},
});

GalleryContent

return productRenderer.render(ProductDetails, {
sku: getSkuFromUrl(),
slots: {
GalleryContent: (ctx) => {
const galleryContent = document.createElement('div');
// add good example
},
},
});

InfoContent

return productRenderer.render(ProductDetails, {
sku: getSkuFromUrl(),
slots: {
InfoContent: (ctx) => {
const infoContent = document.createElement('div');
// add good example
},
},
});

Content

return productRenderer.render(ProductDetails, {
sku: getSkuFromUrl(),
slots: {
Content: (ctx) => {
const productContent = document.createElement('div');
// add good example
},
},
});

Summary

The product details component provides slots for nearly every part of its UI, allowing you to customize every detail to create a unique and branded experience for your customers.

\ No newline at end of file +
const share = ctx.appendButton({
text: 'Share',
icon: 'share',
onClick: () => {
console.log('Share clicked');
},
});
},
},
});

Short Description

return productRenderer.render(ProductDetails, {
sku: getSkuFromUrl(),
slots: {
ShortDescription: (ctx) => {
const shortDescription = document.createElement('div');
// add good example
},
},
});

Description

return productRenderer.render(ProductDetails, {
sku: getSkuFromUrl(),
slots: {
Description: (ctx) => {
const description = document.createElement('div');
// add good example
},
},
});

Attributes

return productRenderer.render(ProductDetails, {
sku: getSkuFromUrl(),
slots: {
Attributes: (ctx) => {
const attributes = document.createElement('div');
// add good example
},
},
});

GalleryContent

return productRenderer.render(ProductDetails, {
sku: getSkuFromUrl(),
slots: {
GalleryContent: (ctx) => {
const galleryContent = document.createElement('div');
// add good example
},
},
});

InfoContent

return productRenderer.render(ProductDetails, {
sku: getSkuFromUrl(),
slots: {
InfoContent: (ctx) => {
const infoContent = document.createElement('div');
// add good example
},
},
});

Content

return productRenderer.render(ProductDetails, {
sku: getSkuFromUrl(),
slots: {
Content: (ctx) => {
const productContent = document.createElement('div');
// add good example
},
},
});

Summary

The product details component provides slots for nearly every part of its UI, allowing you to customize every detail to create a unique and branded experience for your customers.

\ No newline at end of file diff --git a/dropins/product-details/pdp-styles/index.html b/dropins/product-details/pdp-styles/index.html index c4bae4e33..c56dd80c8 100644 --- a/dropins/product-details/pdp-styles/index.html +++ b/dropins/product-details/pdp-styles/index.html @@ -108,4 +108,4 @@
/* Medium (portrait tablets and large phones, 768px and up) */
/* @media only screen and (min-width: 768px) { } */
/* Large (landscape tablets, 1024px and up) */
/* @media only screen and (min-width: 1024px) { } */
/* XLarge (laptops/desktops, 1366px and up) */
/* @media only screen and (min-width: 1366px) { } */
-
/* XXlarge (large laptops and desktops, 1920px and up) */
/* @media only screen and (min-width: 1920px) { } */

Summary

You can customize the product details component by overriding the CSS classes provided for each component. Create a CSS file for each component to make it easier to maintain and update your PDP CSS. Use the BEM naming convention and your browser’s dev tools to identify and copy the class to your corresponding component CSS file and override it as needed. Happy styling! 🎨

\ No newline at end of file +
/* XXlarge (large laptops and desktops, 1920px and up) */
/* @media only screen and (min-width: 1920px) { } */

Summary

You can customize the product details component by overriding the CSS classes provided for each component. Create a CSS file for each component to make it easier to maintain and update your PDP CSS. Use the BEM naming convention and your browser’s dev tools to identify and copy the class to your corresponding component CSS file and override it as needed. Happy styling! 🎨

\ No newline at end of file diff --git a/dropins/user-account/containers/address-form/index.html b/dropins/user-account/containers/address-form/index.html index bddb84f09..bff20c511 100644 --- a/dropins/user-account/containers/address-form/index.html +++ b/dropins/user-account/containers/address-form/index.html @@ -1,4 +1,4 @@ AddressForm container | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

AddressForm container

The AddressForm container is a standalone component designed for creating and editing customer addresses. This container enables merchants to build a custom user experience around address management while leveraging a pre-built form that minimizes development effort. The form integrates seamlessly with the Adobe Commerce backend environment, providing flexible configuration of address attributes, validation, labels, attribute sorting, and more.

The Addresses container also uses this container.

The following image illustrates a sample AddressForm container:

AddressForm container

AddressForm container

Configurations

The AddressForm container provides the following configuration options:

OptionsTypeReq?Description
hideActionFormButtonsbooleanNoControls the visibility of action buttons at the form's bottom. Useful for custom integrations where form submission is managed externally.
formNamestringNoSets the "name" attribute for the form. Defaults to "addressesForm" if not provided. Useful for custom integrations.
showFormLoaderbooleanNoDetermines if a shimmer loader displays instead of the form. Can be used to manage the form’s loading state externally.
showSaveCheckBoxbooleanNoControls visibility of the "Save in address book" checkbox. Useful for implementations where customers can choose to save the address, with form submission managed externally. Enabling this checkbox hides the action buttons automatically (equivalent to setting "hideActionFormButtons" to "true".)
saveCheckBoxValuebooleanNoSets the initial value of the "Save in address book" checkbox.
forwardFormRefHTMLInputElementNoProvides a reference to the form’s DOM element. Useful for custom integrations. This ref also grants access to the "handleValidationSubmit" method to validate form data.
addressFormIdstringNoPasses an address ID when editing an existing address. Used to identify the address to update in Adobe Commerce.
classNamestringNoAllows custom CSS classes to be applied to the form.
addressesFormTitlestringNoControls visibility of the address form title.
inputsDefaultValueSetCustomerAddressesModelNoAllows a set of default values for form inputs.
shippingCheckBoxValuebooleanNoSets the initial value of the "Set as default shipping address" checkbox.
billingCheckBoxValuebooleanNoSets the initial value of the "Set as default billing address" checkbox.
showShippingCheckBoxbooleanNoControls visibility of the "Set as default shipping address" checkbox. The checkbox remains in the form even if hidden, allowing shippingCheckBoxValue to set its value.
showBillingCheckBoxbooleanNoControls visibility of the "Set as default billing address" checkbox. As with the shipping checkbox, it remains present even if hidden.
isOpenbooleanNoControls the form's visibility.
onSubmitfunctionNoAllows a custom submit handler to override the default form submission behavior.
slots.AddressFormActionsAddressFormActionsContextNoProvides an option to override the call-to-action buttons for the address form.
slots.AddressFormInputsAddressFormInputsContextNoAllows additional custom inputs or HTML elements at the form’s bottom.
slots[`AddressFormInput_${attribute.code}`]slotNoAllows overriding input used for a particular form field. Example slot names: “AddressFormInput_firstname”, “AddressFormInput_street”.
onCloseBtnClickfunctionNoProvides an option to pass a callback to close the form, useful for custom implementations where the form appears in a modal and should close upon successful submission.
onSuccessfunctionNoCallback executed upon successful form submission.
onErrorfunctionNoCallback executed if an error occurs during submission. Receives the error as a parameter.
onChangefunctionNoCallback executed on each form change, receiving form data as a parameter. Useful for custom integrations.

Examples

HTMLInputElement usage sample:

const formRef = { current: null };
provider.render(AddressForm, {
forwardFormRef: formRef,
})(containerWrapper);
const isFormValid = formRef.current.handleValidationSubmit();
const formData = inputRef.current.formData;
-
return {
handleValidationSubmit,
formData: normalizeGetAddressData(modifyFormRef, true),
isDataValid,
};

isDataValid is a boolean value that indicates whether the form has been validated without an explicit submit action.

inputsDefaultValueSet sample payload:

inputsDefaultValueSet: {
city: 'City',
company: '',
countryCode: 'AR',
region: {
regionCode: 'AR-H',
regionId: 1579,
},
telephone: '123456789',
vatId: '999',
postcode: '12345',
street: 'Street One',
streetMultiline_2: 'Street Two',
}

Example

The following example renders the AddressForm container with custom configurations:

provider.render(AddressForm, {
addressesFormTitle: 'Address form title',
addressId: '',
isOpen: true,
shippingCheckBoxValue: true,
billingCheckBoxValue: true,
showShippingCheckBox: true,
showBillingCheckBox: true,
onChange: (values, inputValue) => {
console.log('allValues', values);
console.log('inputValue', inputValue);
},
onSuccess: () => {
console.log('onSuccess');
},
onError: () => {
console.log('onError');
},
})(containerWrapper);
\ No newline at end of file +
return {
handleValidationSubmit,
formData: normalizeGetAddressData(modifyFormRef, true),
isDataValid,
};

isDataValid is a boolean value that indicates whether the form has been validated without an explicit submit action.

inputsDefaultValueSet sample payload:

inputsDefaultValueSet: {
city: 'City',
company: '',
countryCode: 'AR',
region: {
regionCode: 'AR-H',
regionId: 1579,
},
telephone: '123456789',
vatId: '999',
postcode: '12345',
street: 'Street One',
streetMultiline_2: 'Street Two',
}

Example

The following example renders the AddressForm container with custom configurations:

provider.render(AddressForm, {
addressesFormTitle: 'Address form title',
addressId: '',
isOpen: true,
shippingCheckBoxValue: true,
billingCheckBoxValue: true,
showShippingCheckBox: true,
showBillingCheckBox: true,
onChange: (values, inputValue) => {
console.log('allValues', values);
console.log('inputValue', inputValue);
},
onSuccess: () => {
console.log('onSuccess');
},
onError: () => {
console.log('onError');
},
})(containerWrapper);
\ No newline at end of file diff --git a/dropins/user-account/containers/addresses/index.html b/dropins/user-account/containers/addresses/index.html index 436e9081c..88a1ef085 100644 --- a/dropins/user-account/containers/addresses/index.html +++ b/dropins/user-account/containers/addresses/index.html @@ -1,2 +1,2 @@ Addresses container | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Addresses container

The Addresses container is a standalone component that creates, edits, and deletes customer addresses. It supports custom address attributes and configurable validation through the Adobe Commerce Admin.

The Addresses container relies on the AddressForm container for address creation and editing. It inherits all behaviors from the AddressForm container.

Container views

The Addresses container can be implemented in several views.

Full-size view

The full-size view is used when the Addresses component functions as a standalone page. This view displays all addresses, enables pagination (based on backend configurations), and provides full functionality for creating, editing, and deleting addresses. A Create Address button can be displayed below the list. Clicking the button opens the address creation form, which is configurable from the Commerce Admin.

The following images illustrate the full-size view of the Addresses container with no addresses, all addresses, and an address being edited.

Full size implementation of the Addresses container with no addresses

Full size implementation of the Addresses container with no addresses

Full size implementation of the Addresses container with multiple addresses

Full size implementation of the Addresses container with multiple addresses

Full size implementation of the Addresses container being edited

Full size implementation of the Addresses container being edited

Minified view

Use the minified view when the container is part of a page with other components, such as a user account dashboard. In this view, editing and deletion functionality is disabled, and the Create New Address button is replaced with a View All Addresses button. Only the default shipping and billing addresses are visible.

The following images illustrate the minified view of the Addresses container with no addresses, and with multiple addresses (but only one is displayed).

Empty minified Addresses container

Empty minified Addresses container

Minified Addresses container with multiple addresses

Minified Addresses container with multiple addresses

Selectable view

The selectable view is intended for scenarios that require address selection, such as during checkout. This view includes styling adjustments and represents each address card as a selectable radio button, facilitating address selection.

The following images illustrate the selectable view of the Addresses container. In the first image an address has been selected. In the second, an address can be created.

Selectable Addresses container with selection

Selectable Addresses container with selection

Create an address in a selectable Addresses container

Create an address in a selectable Addresses container

Configurations

The Addresses container provides the following configuration options:

OptionsTypeReq?Description
hideActionFormButtonsbooleanNoControls the visibility of action buttons at the form's bottom. Useful for custom integrations where form submission is managed externally.
formNamestringNoSets the "name" attribute for the form. Defaults to "addressesForm" if not provided. Useful for custom integrations.
slots.AddressCardslotNoAllows overriding address card content, such as rendering additional data or changing layout.
slots.AddressFormActionsAddressFormActionsContextNoProvides an option to override the call-to-action buttons for the address form.
slots.AddressFormInputsAddressFormInputsContextNoAllows additional custom inputs or HTML elements at the form’s bottom.
slots[`AddressFormInput_${attribute.code}`]slotNoAllows overriding input used for a particular form field. Example slot names: “AddressFormInput_firstname”, “AddressFormInput_street”.
titlestringNoCustom container header text overriding translations.
addressFormTitlestringNoCustom address form header text overriding translations (optional).
defaultSelectAddressIdstringNoUsed only in selectable view. Determines which address is selected by default.
showFormLoaderbooleanNoDetermines if a shimmer loader displays instead of the form. Can be used to manage the form’s loading state externally.
onAddressDatafunctionNoCallback executed on each form change, receiving form data as a parameter. Useful for custom integrations. This is the same as the onChange AddressForm callback.
forwardFormRefHTMLInputElementNoProvides a reference to the form’s DOM element. Useful for custom integrations. This ref also grants access to the "handleValidationSubmit" method to validate form data.
selectShippingbooleanNoApplicable only in the selectable view. When set to true, this configuration enables the container to handle the selection of an address as a shipping address (for example, selecting a shipping address during checkout).
selectBillingbooleanNoApplicable only in the selectable view. When set to true, this configuration enables the container to handle the selection of an address as a billing address (for example, selecting a billing address during checkout). If both "selectShipping" and "selectBilling" are set to true, the container manages the address selection for both purposes, allowing one address to be used during checkout.
showSaveCheckBoxbooleanNoControls visibility of the "Save in address book" checkbox. Useful for implementations where customers can choose to save the address, with form submission managed externally. Enabling this checkbox hides the action buttons automatically (equivalent to setting "hideActionFormButtons" to "true".)
saveCheckBoxValuebooleanNoSets the initial value of the "Save in address book" checkbox.
selectablebooleanNoWhether to enable/disable the selectable view.
classNamestringNoAllows custom CSS classes to be applied to the address container.
withHeaderbooleanNoWhether to show/hide the container header.
minifiedViewbooleanNoWhether to enable/disable the minified view.
withActionsInMinifiedViewbooleanNoWhether to show/hide address card actions in the minified view.
withActionsInFullSizeViewbooleanNoWhether to show/hide address card actions in the full-size view.
inputsDefaultValueSetCustomerAddressesModelNoAllows a set of default values for form inputs.
shippingCheckBoxValuebooleanNoSets the initial value of the "Set as default shipping address" checkbox.
billingCheckBoxValuebooleanNoSets the initial value of the "Set as default billing address" checkbox.
showShippingCheckBoxbooleanNoControls visibility of the "Set as default shipping address" checkbox. The checkbox remains in the form even if hidden, allowing shippingCheckBoxValue to set its value.
showBillingCheckBoxbooleanNoControls visibility of the "Set as default billing address" checkbox. As with the shipping checkbox, it remains present even if hidden.
routeAddressesPagefunctionNoApplicable only in the minified view. Determines where the “View all addresses” button redirects the customer.
onSuccessfunctionNoCallback executed upon successful form submission.
onErrorfunctionNoCallback executed if an error occurs during submission. Receives the error as a parameter.

Example

The following example demonstrates how to use the Addresses container:

export default async function decorate(block) {
const {
'minified-view': minifiedViewConfig = 'false',
} = readBlockConfig(block);
-
if (!checkIsAuthenticated()) {
window.location.href = CUSTOMER_LOGIN_PATH;
} else {
await accountRenderer.render(Addresses, {
minifiedView: minifiedViewConfig === 'true',
withActionsInMinifiedView: false,
withActionsInFullSizeView: true,
routeAddressesPage: () => CUSTOMER_ADDRESS_PATH,
})(block);
}
}
\ No newline at end of file +
if (!checkIsAuthenticated()) {
window.location.href = CUSTOMER_LOGIN_PATH;
} else {
await accountRenderer.render(Addresses, {
minifiedView: minifiedViewConfig === 'true',
withActionsInMinifiedView: false,
withActionsInFullSizeView: true,
routeAddressesPage: () => CUSTOMER_ADDRESS_PATH,
})(block);
}
}
\ No newline at end of file diff --git a/dropins/user-account/containers/customer-information/index.html b/dropins/user-account/containers/customer-information/index.html index d26f8c7e4..7a2316e3d 100644 --- a/dropins/user-account/containers/customer-information/index.html +++ b/dropins/user-account/containers/customer-information/index.html @@ -1 +1 @@ -CustomerInformation container | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

CustomerInformation container

The CustomerInformation container is a standalone component that provides customers with access to their personal information. It allows users to view and edit their profile details, including their name, contact information, password, and email address.

The following images show the default view, edit view, edit view with password input, and change password view of the CustomerInformation container:

Default view

Default view

Edit view

Edit view

Edit view with password input

Edit view with password input

Change password view

Change password view

Configurations

The CustomerInformation container provides the following configuration options:

OptionsTypeReq?Description
classNamestringNoA custom CSS class to be applied to the address container.
withHeaderbooleanNoWhether to show/hide container header.
slots.CustomerDataslotNoOverrides or extends information provided on the customer details card.

Example

The following example demonstrates how to use the CustomerInformation container:

export default async function decorate(block) {
if (!checkIsAuthenticated()) {
window.location.href = CUSTOMER_LOGIN_PATH;
} else {
await accountRenderer.render(CustomerInformation, {})(block);
}
}
\ No newline at end of file +CustomerInformation container | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

CustomerInformation container

The CustomerInformation container is a standalone component that provides customers with access to their personal information. It allows users to view and edit their profile details, including their name, contact information, password, and email address.

The following images show the default view, edit view, edit view with password input, and change password view of the CustomerInformation container:

Default view

Default view

Edit view

Edit view

Edit view with password input

Edit view with password input

Change password view

Change password view

Configurations

The CustomerInformation container provides the following configuration options:

OptionsTypeReq?Description
classNamestringNoA custom CSS class to be applied to the address container.
withHeaderbooleanNoWhether to show/hide container header.
slots.CustomerDataslotNoOverrides or extends information provided on the customer details card.

Example

The following example demonstrates how to use the CustomerInformation container:

export default async function decorate(block) {
if (!checkIsAuthenticated()) {
window.location.href = CUSTOMER_LOGIN_PATH;
} else {
await accountRenderer.render(CustomerInformation, {})(block);
}
}
\ No newline at end of file diff --git a/dropins/user-account/containers/orders-list/index.html b/dropins/user-account/containers/orders-list/index.html index b963ff520..8b827ab36 100644 --- a/dropins/user-account/containers/orders-list/index.html +++ b/dropins/user-account/containers/orders-list/index.html @@ -1,2 +1,2 @@ OrdersList container | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

OrdersList container

The OrdersList container is a standalone component designed to provide access to a customer’s order history and detailed order information. It can be rendered in a full-size or minified view.

Use the full-size view when the OrdersList component functions as a standalone page. This view displays the complete list of orders, includes a filter for filtering by the date placed. It also features pagination, which is visible if the number of orders exceeds one page.

Full-size view with no order list items

Full-size view with no order list items

Full-size view with multiple items

Full-size view with multiple items

The minified view can be usef when the container is part of a page alongside other components, such as a user account dashboard. In this view, only a few of the most recent orders are displayed (the number is configurable). A View all orders button is rendered at the bottom, which navigates the customer to the full order history page.

Minified view with no items

Minified view with no items

Minified view with multiple items

Minified view with multiple items

OrdersList configurations

The OrdersList container provides the following configuration options:

OptionsTypeReq?Description
classNamestringNoAllows custom CSS classes to be applied to the address container.
withHeaderbooleanNoWhether to show/hide container header.
minifiedViewbooleanNoWhether to enable/disable minified view.
withThumbnailsbooleanNoWhether to enable/disable product thumbnails on order cards.
withFilterbooleanNoWhether to enable/disable filter dropdown.
ordersInMinifiedViewnumberNoUsed only in minified view. Defines how many orders are visible in a minified view (default: 1).
pageSizenumberNoSets the pagination size (default: 10).
routeOrdersListfunctionNoUsed only in minified view. Determines where the “View all orders” button redirects the customer.
routeOrderDetailsfunctionNoDetermines where a click on the order card button (a chevron icon to the right of the order card) redirects the customer.
routeReturnDetailsfunctionNoDetermines where the return number link redirects the customer.
routeTrackingfunctionNoDetermines where the tracking number link redirects the customer.
routeOrderProductfunctionNoDetermines where the product thumbnail link redirects the customer.
slots.OrdersListActionslotNoOverrides or extends order actions (right side of the order card).
slots.OrdersListCardslotNoOverrides or extends order card details.

Example

The following example demonstrates how to use the OrdersList container:

export default async function decorate(block) {
const { 'minified-view': minifiedViewConfig = 'false' } = readBlockConfig(block);
-
if (!checkIsAuthenticated()) {
window.location.href = CUSTOMER_LOGIN_PATH;
} else {
await accountRenderer.render(OrdersList, {
minifiedView: minifiedViewConfig === 'true',
routeOrdersList: () => CUSTOMER_ORDERS_PATH,
routeOrderDetails: (orderNumber) => `${CUSTOMER_ORDER_DETAILS_PATH}?orderRef=${orderNumber}`,
routeReturnDetails: ({ orderNumber, returnNumber }) => `${CUSTOMER_RETURN_DETAILS_PATH}?orderRef=${orderNumber}&returnRef=${returnNumber}`,
routeOrderProduct: (productData) => (productData ? `/products/${productData.product.urlKey}/${productData.product.sku}` : '#'),
})(block);
}
}
\ No newline at end of file +
if (!checkIsAuthenticated()) {
window.location.href = CUSTOMER_LOGIN_PATH;
} else {
await accountRenderer.render(OrdersList, {
minifiedView: minifiedViewConfig === 'true',
routeOrdersList: () => CUSTOMER_ORDERS_PATH,
routeOrderDetails: (orderNumber) => `${CUSTOMER_ORDER_DETAILS_PATH}?orderRef=${orderNumber}`,
routeReturnDetails: ({ orderNumber, returnNumber }) => `${CUSTOMER_RETURN_DETAILS_PATH}?orderRef=${orderNumber}&returnRef=${returnNumber}`,
routeOrderProduct: (productData) => (productData ? `/products/${productData.product.urlKey}/${productData.product.sku}` : '#'),
})(block);
}
}
\ No newline at end of file diff --git a/dropins/user-account/functions/index.html b/dropins/user-account/functions/index.html index fd53ad8f6..d87e6c025 100644 --- a/dropins/user-account/functions/index.html +++ b/dropins/user-account/functions/index.html @@ -10,4 +10,4 @@
removeCustomerAddress(id: "1");

updateCustomer

The updateCustomer function updates the logged-in customer. The function uses the updateCustomerV2 mutation.

The form object keys are converted to snake_case using the convertKeysCase utility with specific mappings for firstName, lastName, middleName, and custom_attributesV2.

export const updateCustomer = async (
form: Record<string, string>
): Promise<string>
ParameterTypeReq?Description
formobjectYesContains the attributes to update.

Returns

Returns a promise that resolves to a string, which could be a success message or an error message.

Usage

To update the customer:

import { updateCustomer } from '@/account/api/updateCustomer';
updateCustomer(form: CustomerUpdateInput);

updateCustomerAddress

The updateCustomerAddress function updates an address associated with the current customer. The function uses the updateCustomerAddress mutation.

The forms object includes an addressId, which is a number representing the ID of the address to be updated and other address details as defined in CustomerAddressesModel.

export const updateCustomerAddress = async (
forms: ExtendedAddressFormProps
): Promise<string>
ParameterTypeReq?Description
formsobjectYesContains the attributes to update.

The CustomerAddressesModel object has the following shape:

ParameterTypeReq?Description
firstNamestringNoThe first name of the customer.
lastNamestringNoThe family name of the customer.
citystringNoThe city of the address.
companystringNoA company .
countryCodestringNoThe two-letter code representing the customer's country.
regionobjectNoThis object has the shape "{ region: string; regionCode: string; regionId: string | number }".
telephonestringNoThe telephone number.
idstringNoThe address ID.
vatIdstringNoThe VAT ID.
postcodestringNoThe postcode.
streetstringNoThe street address.
streetMultiline_2stringNoThe second line of the street address.
defaultShippingbooleanNoWhether the address is the default shipping address.
defaultBillingbooleanNoWhether the address is the default billing address.

Returns

Returns a promise that resolves to a string, which could be a success message or an error message.

Usage

To update the customer address:

updateCustomerAddress(forms: {
"addressId": 1,
"city": "Austin",
"countryCode": "US",
"countryId": "US",
"defaultBilling": true,
"defaultShipping": true,
"firstname": "John",
"lastname": "Doe",
"postcode": "78759",
"region": {
"regionId": 57,
"regionCode": "TX"
},
"street": ["123 Main St"],
});

updateCustomerEmail

The updateCustomerEmail function updates the email address of the logged-in customer. The function calls the updateCustomerEmail mutation.

export const updateCustomerEmail = async (
email: string,
password: string
): Promise<string>
ParameterTypeReq?Description
emailstringYesThe new email address of the customer.
passwordstringYesThe current password of the customer.

Returns

Returns a promise that resolves to a string, which could be a success message or an error message.

Usage

To update the customer’s email address:

import { updateCustomerEmail } from '@/account/api/updateCustomerEmail';
updateCustomerEmail(forms: {
"email": "test@email.com",
"password": "xyz789abc123",
});

updateCustomerPassword

The updateCustomerPassword function updates the password of the logged-in customer. The function calls the changeCustomerPassword mutation.

export const updateCustomerPassword = async ({
currentPassword,
newPassword,
}: ChangeCustomerPasswordProps): Promise<string>
ParameterTypeReq?Description
currentPasswordstringYesThe password before it is changed.
newPasswordstringYesThe new password.

Returns

Returns a promise that resolves to a string, which could be the customer’s email if the password change is successful, or an error message if there are errors.

Usage

To update the customer’s password:

import { updateCustomerPassword } from '@/account/api/updateCustomerPassword';
-
updateCustomerPassword({ "currentPassword": "xyz789abc123", "newPassword": "123xyz789abc" });
\ No newline at end of file +
updateCustomerPassword({ "currentPassword": "xyz789abc123", "newPassword": "123xyz789abc" });
\ No newline at end of file diff --git a/dropins/user-account/index.html b/dropins/user-account/index.html index 504889b87..4f87ddd30 100644 --- a/dropins/user-account/index.html +++ b/dropins/user-account/index.html @@ -1 +1 @@ -User account overview | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

User account overview

The user account drop-in component provides account management features in your storefront.

Supported Commerce features

The following tables provide an overview of the Adobe Commerce features that the user account drop-in component supports:

FeatureStatus

Address book

Add new addressRoadmap
Remove addressRoadmap
Update addressRoadmap
View addresses saved during checkoutSupported

Orders

Cancel order (before it is processed)Roadmap
Create a returnRoadmap
Filter orders by time of purchaseRoadmap
View current order statusRoadmap
View list of orders on the accountRoadmap
View return statusRoadmap
View shipping status (if applicable)Roadmap

Personal information

Change emailRoadmap
Change passwordRoadmap

Saved payment methods

Default credit card is automatically applied at the checkout as a payment methodRoadmap
Delete stored credit cardsRoadmap
Save credit card(s) information for future use during checkoutRoadmap
Set a default credit card to use at the checkoutRoadmap
View saved credit cards and their statuses in the user accountRoadmap

Wishlist

Add product to the wishlist from PDP, PLP, SRP, P-RexRoadmap
Delete product from the wishlistRoadmap
Move product to the cartRoadmap
\ No newline at end of file +User account overview | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

User account overview

The user account drop-in component provides account management features in your storefront.

Supported Commerce features

The following tables provide an overview of the Adobe Commerce features that the user account drop-in component supports:

FeatureStatus

Address book

Add new addressRoadmap
Remove addressRoadmap
Update addressRoadmap
View addresses saved during checkoutSupported

Orders

Cancel order (before it is processed)Roadmap
Create a returnRoadmap
Filter orders by time of purchaseRoadmap
View current order statusRoadmap
View list of orders on the accountRoadmap
View return statusRoadmap
View shipping status (if applicable)Roadmap

Personal information

Change emailRoadmap
Change passwordRoadmap

Saved payment methods

Default credit card is automatically applied at the checkout as a payment methodRoadmap
Delete stored credit cardsRoadmap
Save credit card(s) information for future use during checkoutRoadmap
Set a default credit card to use at the checkoutRoadmap
View saved credit cards and their statuses in the user accountRoadmap

Wishlist

Add product to the wishlist from PDP, PLP, SRP, P-RexRoadmap
Delete product from the wishlistRoadmap
Move product to the cartRoadmap
\ No newline at end of file diff --git a/dropins/user-account/initialization/index.html b/dropins/user-account/initialization/index.html index 67938fc06..1fa9353d0 100644 --- a/dropins/user-account/initialization/index.html +++ b/dropins/user-account/initialization/index.html @@ -3,4 +3,4 @@
const langDefinitions = {
default: {
...labels,
},
};
return initializers.mountImmediately(initialize, { langDefinitions });
})();

The langDefinitions property defines and registers language packs for the user account component. This allows you to provide localized text for different languages in your application.

Configuration options

The user account component initializer accepts the following property:

ParameterTypeReq?Description
langDefinitionsobjectNoProvides language definitions for internationalization (i18n).

Example

The following example initializes the commerce-addresses block:

import '../../scripts/initializers/account.js';
export default async function decorate(block) {
const {
'minified-view': minifiedViewConfig = 'false',
} = readBlockConfig(block);
-
if (!checkIsAuthenticated()) {
window.location.href = CUSTOMER_LOGIN_PATH;
} else {
await accountRenderer.render(Addresses, {
minifiedView: minifiedViewConfig === 'true',
withActionsInMinifiedView: false,
withActionsInFullSizeView: true,
routeAddressesPage: () => CUSTOMER_ADDRESS_PATH,
})(block);
}
}
\ No newline at end of file +
if (!checkIsAuthenticated()) {
window.location.href = CUSTOMER_LOGIN_PATH;
} else {
await accountRenderer.render(Addresses, {
minifiedView: minifiedViewConfig === 'true',
withActionsInMinifiedView: false,
withActionsInFullSizeView: true,
routeAddressesPage: () => CUSTOMER_ADDRESS_PATH,
})(block);
}
}
\ No newline at end of file diff --git a/dropins/user-account/sidebar/index.html b/dropins/user-account/sidebar/index.html index 254516454..59d977b14 100644 --- a/dropins/user-account/sidebar/index.html +++ b/dropins/user-account/sidebar/index.html @@ -1 +1 @@ -User account sidebar | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

User account sidebar

The user account sidebar is not part of the account component, but it is implemented as a block within the boilerplate (commerce-account-sidebar). Its primary function is to render a configurable sidebar menu for the user account, managed through SharePoint.

User account sidebar

User account sidebar

Configurations

The commerce-account-sidebar block can be integrated into various pages via SharePoint, as demonstrated in the screenshot below.

Configuration parameters

Configuration parameters

The content of the commerce-account-sidebar block is fully manageable through SharePoint, specifically within the /customer/sidebar-fragment.docx document. This structure allows for easy customization and updates, as shown in the following example:

Configuration structure

Configuration structure

The configuration structure includes:

  • Menu item name
    • Second line (optional descriptive text)
    • Link (URL for navigation)
    • SDK icon name (icon representation for each menu item)
\ No newline at end of file +User account sidebar | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

User account sidebar

The user account sidebar is not part of the account component, but it is implemented as a block within the boilerplate (commerce-account-sidebar). Its primary function is to render a configurable sidebar menu for the user account, managed through SharePoint.

User account sidebar

User account sidebar

Configurations

The commerce-account-sidebar block can be integrated into various pages via SharePoint, as demonstrated in the screenshot below.

Configuration parameters

Configuration parameters

The content of the commerce-account-sidebar block is fully manageable through SharePoint, specifically within the /customer/sidebar-fragment.docx document. This structure allows for easy customization and updates, as shown in the following example:

Configuration structure

Configuration structure

The configuration structure includes:

  • Menu item name
    • Second line (optional descriptive text)
    • Link (URL for navigation)
    • SDK icon name (icon representation for each menu item)
\ No newline at end of file diff --git a/dropins/user-account/slots/index.html b/dropins/user-account/slots/index.html index 377f57825..6565c4040 100644 --- a/dropins/user-account/slots/index.html +++ b/dropins/user-account/slots/index.html @@ -1 +1 @@ -User account slots | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

User account slots

Learn about the slots provided in the user account drop-in component.

Extending drop-in components describes default properties available to all slots.

AddressFormActions

AddressFormInputs

AddressFormInput_(attribute.code)

AddressCard

CustomerData

OrdersListAction

OrdersListCard

\ No newline at end of file +User account slots | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

User account slots

Learn about the slots provided in the user account drop-in component.

Extending drop-in components describes default properties available to all slots.

AddressFormActions

AddressFormInputs

AddressFormInput_(attribute.code)

AddressCard

CustomerData

OrdersListAction

OrdersListCard

\ No newline at end of file diff --git a/dropins/user-account/styles/index.html b/dropins/user-account/styles/index.html index 8e93b4809..ddc0df3c0 100644 --- a/dropins/user-account/styles/index.html +++ b/dropins/user-account/styles/index.html @@ -95,4 +95,4 @@
.account-orders-list ul {
list-style: none;
margin: 0;
padding: 0;
}
.account-orders-list__date-select {
margin-bottom: var(--spacing-xbig);
}
.account-orders-list__date-select span {
display: inline-block;
font: var(--type-details-caption-1-font);
letter-spacing: var(--type-details-caption-1-letter-spacing);
margin-bottom: var(--spacing-xsmall);
}
-
.account-orders-list__date-select .dropin-picker {
max-width: 224px;
}
\ No newline at end of file +
.account-orders-list__date-select .dropin-picker {
max-width: 224px;
}
\ No newline at end of file diff --git a/dropins/user-account/tutorials/index.html b/dropins/user-account/tutorials/index.html index 2144704dc..ad995b709 100644 --- a/dropins/user-account/tutorials/index.html +++ b/dropins/user-account/tutorials/index.html @@ -1,3 +1,3 @@ User account tutorials | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

User account tutorials

Customize the layout of the AddressForm

The AddressForm container provides a highly configurable and customizable layout for seamless integration. The sorting of address attributes is managed through the Adobe Commerce Admin settings, giving flexibility in how data fields are displayed.

The visual layout of the form, including input widths (such as 50% or 100% to position multiple inputs on the same line), is controlled by CSS. This enables integrators to tailor the form’s appearance by applying custom CSS rules.

By default, the first name and last name fields in the address form are set to 50% width. The display is controlled through CSS, as the form is implemented using a grid layout:

Default AddressForm container

Default AddressForm container

To modify the layout and render these fields as full-width, create custom CSS rules at the boilerplate level and use them to override default container CSS:

One column AddressForm container

One column AddressForm container

Using this approach, you can easily customize the address form layout during the integration process, such as implementing a three-column layout to display three fields in a row. These adjustments require only basic CSS knowledge for effective customization.

This approach is fully applicable to address forms in all views of the Addresses container, as it utilizes the AddressForm container internally.

Layout Customisation Example

The folllwing examples show how to adjust the storefront-addresses block CSS in a boilerplate environment to customize the address form layout.

In the default layout, some fields are half width, while others take up the whole width.

Default layout of the AddressForm container

Default layout of the AddressForm container

To set all fields to half width, add the following CSS rule to the storefront-addresses block:

.commerce-addresses .account-address-form {
grid-template-columns: repeat(2,1fr);
}

Two column layout of the AddressForm container

Two column layout of the AddressForm container

To set the text area and buttons group set to 100% width while the other fields are half width:

.commerce-addresses .account-address-form div.account-address-form__field--test_text_area,
.commerce-addresses .account-address-form div.account-address-form-wrapper__buttons {
grid-column: span 2;
}

Notice that CSS selector includes the modifier --test_text_area, allowing you to target a specific field by attribute code.

Two column layout with full width text box

Two column layout with full width text area

To create a three-column layout with a full size text and button area, set the grid template columns to repeat(2,1fr):

.commerce-addresses .account-address-form {
grid-template-columns: repeat(2,1fr);
}
.commerce-addresses .account-address-form div.dropin-field {
grid-column: span 1;
}
-
.commerce-addresses .account-address-form div.account-address-form__field--test_text_area,
.commerce-addresses .account-address-form div.account-address-form-wrapper__buttons {
grid-column: span 3;
}

Three column layout with full width text area

Three column layout with full width text area
\ No newline at end of file +
.commerce-addresses .account-address-form div.account-address-form__field--test_text_area,
.commerce-addresses .account-address-form div.account-address-form-wrapper__buttons {
grid-column: span 3;
}

Three column layout with full width text area

Three column layout with full width text area
\ No newline at end of file diff --git a/dropins/user-auth/auth-functions/index.html b/dropins/user-auth/auth-functions/index.html index 98406a158..1fa4d230a 100644 --- a/dropins/user-auth/auth-functions/index.html +++ b/dropins/user-auth/auth-functions/index.html @@ -10,4 +10,4 @@
requestPasswordResetEmail(email: "abc@example.com");

resendConfirmationEmail

The resendConfirmationEmail function resends the email confirmation to the customer using the supplied customerEmail parameter. The function calls the resendConfirmationEmail mutation, which is included in the Storefront Compatability Package.

resendConfirmationEmail(customerEmail:string);
ParameterTypeReq?Description
customerEmailstringYesThe email address of the customer requesting

Returns

Returns a promise that resolves to a resendConfirmationEmailResponse object.

Usage

import { resendConfirmationEmail } from '@/auth/api/resendConfirmationEmail';
resendConfirmationEmail(customerEmail:"abc@example.com");

resetPassword

The resetPassword function resets a customer’s password using the supplied email, resetPasswordToken, and newPassword parameters. The function calls the resetPassword mutation.

resetPassword (email: string, resetPasswordToken: string, newPassword: string);
ParameterTypeReq?Description
emailstringYesThe email address of the customer requesting the password reset.
resetPasswordTokenstringYesThe token sent to the customer to confirm the request is legitimate.
newPasswordstringYesThe new password for the customer account.

Returns

Returns a promise that resolves to a ResetPasswordModel object.

Usage

import { resetPassword } from '@/auth/api/resetPassword';
resetPassword(
email: "abc@example.com",
resetPasswordToken: "gh80pkjGdsPyiXc0sUUXswX1uGN7crUr",
newPassword: "ThisNewPasswordIsSomewhatBetter");

revokeCustomerToken

The revokeCustomerToken function revokes the customer’s token and clears cookie. It then publishes an ACDL event and emits an “authenticated” event.

This API can also be used to build a custom sign-out flow that stays fully integrated with other dropin-in components.

The function calls the revokeCustomerToken mutation.

revokeCustomerToken();

Returns

Returns a promise that resolves to a RevokeCustomerTokenModel object.

Usage

import { revokeCustomerToken } from '@/auth/api/revokeCustomerToken';
-
revokeCustomerToken();
\ No newline at end of file +
revokeCustomerToken();
\ No newline at end of file diff --git a/dropins/user-auth/containers/auth-combine/index.html b/dropins/user-auth/containers/auth-combine/index.html index 724adf9c8..e3f6d05b1 100644 --- a/dropins/user-auth/containers/auth-combine/index.html +++ b/dropins/user-auth/containers/auth-combine/index.html @@ -1 +1 @@ -AuthCombine container | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

AuthCombine container

The AuthCombine container renders a dialog that combines the sign-in, sign-up, and reset password forms. The user can switch between the forms using the provided links.

AuthCombine container

AuthCombine container

AuthCombine configurations

The AuthCombine container provides the following configuration options:

OptionsTypeReq?Description
defaultViewactiveComponentTypeNoSpecifies which form is the default.
signInFormConfigSignInFormPropsNoRenders the SignIn container.
signUpFormConfigSignUpFormPropsNoRenders the SignUp container.
resetPasswordFormConfigSignUpFormPropsNoRenders the ResetPassword container.

Example

The following example renders the AuthCombine container with the provided form configurations.

{
authRenderer.render(AuthCombine, {
signInFormConfig,
signUpFormConfig,
resetPasswordFormConfig,
})(signInForm);
};
\ No newline at end of file +AuthCombine container | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

AuthCombine container

The AuthCombine container renders a dialog that combines the sign-in, sign-up, and reset password forms. The user can switch between the forms using the provided links.

AuthCombine container

AuthCombine container

AuthCombine configurations

The AuthCombine container provides the following configuration options:

OptionsTypeReq?Description
defaultViewactiveComponentTypeNoSpecifies which form is the default.
signInFormConfigSignInFormPropsNoRenders the SignIn container.
signUpFormConfigSignUpFormPropsNoRenders the SignUp container.
resetPasswordFormConfigSignUpFormPropsNoRenders the ResetPassword container.

Example

The following example renders the AuthCombine container with the provided form configurations.

{
authRenderer.render(AuthCombine, {
signInFormConfig,
signUpFormConfig,
resetPasswordFormConfig,
})(signInForm);
};
\ No newline at end of file diff --git a/dropins/user-auth/containers/reset-password/index.html b/dropins/user-auth/containers/reset-password/index.html index e9c013ae6..7d0472f82 100644 --- a/dropins/user-auth/containers/reset-password/index.html +++ b/dropins/user-auth/containers/reset-password/index.html @@ -1,2 +1,2 @@ ResetPassword container | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

ResetPassword container

The ResetPassword container renders a dialog that initiates the process of resetting the user’s password. The user must provide their email address to receive a password reset link.

ResetPassword container

ResetPassword container

Upon success, Commerce sends the user an email with a link in the following format:

https://www.example.com/customer/account/createPassword/?email=<user_email>&id=<user_id>&token=<token>

The user will also see an appropriate notification on the storefront. Clicking the link leads the user to the UpdatePassword container.

ResetPassword response

ResetPassword response

ResetPassword configurations

The ResetPassword container provides the following configuration options:

OptionsTypeReq?Description
formSizedefault | smallNoControls form paddings and spacing. Use "small" to embed the form in small layout containers like a dropdown in the header.
routeSignInfunctionNoDetermines where the “Back to sign in” link redirects the customer.
onErrorCallbackfunctionNoCallback executed when an error occurs, receiving the error object as a parameter.

Example

The following example checks whether the user is authenticated. If the user is authenticated, the user is redirected to the customer account page. If the user is not authenticated, the user is redirected to the ResetPassword container.

export default async function decorate(block) {
if (checkIsAuthenticated()) {
window.location.href = CUSTOMER_ACCOUNT_PATH;
} else {
await authRenderer.render(ResetPassword, {
routeSignIn: () => CUSTOMER_LOGIN_PATH,
})(block);
}
-
events.on('authenticated', (authenticated) => {
if (authenticated) window.location.href = CUSTOMER_ACCOUNT_PATH;
});
}
\ No newline at end of file +
events.on('authenticated', (authenticated) => {
if (authenticated) window.location.href = CUSTOMER_ACCOUNT_PATH;
});
}
\ No newline at end of file diff --git a/dropins/user-auth/containers/sign-in/index.html b/dropins/user-auth/containers/sign-in/index.html index ca5bf7ea3..02b3d5be1 100644 --- a/dropins/user-auth/containers/sign-in/index.html +++ b/dropins/user-auth/containers/sign-in/index.html @@ -7,4 +7,4 @@
const secondaryButton = document.createElement('div');
secondaryButton.style.display = 'flex';
secondaryButton.style.justifyContent = 'center';
secondaryButton.style.marginTop = 'var(--spacing-xsmall)';
authRenderer.render(Button, {
children: 'Logout',
variant: 'tertiary',
onClick: async () => {
await authApi.revokeCustomerToken();
window.location.href = '/';
},
})(secondaryButton);
innerCtx.appendChild(secondaryButton);
},
},
})(elem);
-
ctx.appendChild(elem);
},
},
})(block);
}
}
\ No newline at end of file +
ctx.appendChild(elem);
},
},
})(block);
}
}
\ No newline at end of file diff --git a/dropins/user-auth/containers/sign-up/index.html b/dropins/user-auth/containers/sign-up/index.html index aa0f77f5b..a52ef791d 100644 --- a/dropins/user-auth/containers/sign-up/index.html +++ b/dropins/user-auth/containers/sign-up/index.html @@ -1,2 +1,2 @@ SignUp container | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

SignUp container

The SignUp container provides a form where the user enters the details required to create a new account. The execution of this form can vary, depending on how Commerce is configured:

  • If email confirmations have been enabled, the user account is not activated until the user clicks on the confirmation link that Commerce sends to the user’s email address.

  • If the customer account contains custom attributes, these must be configured to be available to the form. See Customer attribute properties for more information.

Simple container

A SignUp container can collect minimal information, such as name, email, and password, to create a new account. Alternatively, it can collect additional information, such as addresses, if the addressesData property is passed.

By default, upon a successful registration, the SignUp container renders the SuccessNotification container.

The user is logged on when the isAutoSignInEnabled property is passed.

If the routeRedirectOnSignIn property is passed, the user is redirected to the specified URL after a successful login. Neither the SuccessNotification container nor slots willv be rendered.

In this scenario, email confirmation must be disabled.

SignUp container

SignIn standard login container

Registration with email confirmation enabled

If a user creates an account when email confirmation is enabled, a different form is rendered in place of the sign-up form to inform the user about the next steps. Automatic sign-in is not possible if email confirmation is enabled.

SignUp container

SignIn standard login container

SignUp configurations

The SignUp container provides the following configuration options:

OptionsTypeReq?Description
requireRetypePasswordbooleanNoDetermines whether a Confirm Password text box is displayed.
addressesDataAddressFormProps[]NoAllows passing address data into the SignUp drop-in. On successful sign-up, corresponding addresses will be automatically created in the newly created account.
inputsDefaultValueSetinputsDefaultValueSetProps[]NoAllows passing default values for inputs (prefilled sign-up form).
fieldsConfigForApiVersion1anyNoAllows passing a set of field configurations for environments that do not support the createCustomerV2 mutation (fallback, should not be used in environments with the latest Adobe Commerce version).
apiVersion2booleanNoDefaults to true. Allows switching to the createCustomer mutation if createCustomerV2 is not supported in the current version of Commerce (This option should not be used in environments with the latest Commerce version).
displayTermsOfUseCheckboxbooleanNoControls the display of the Terms of Use checkbox in the sign-up form. Rendered checkboxes are not functional and should not be used yet. They will be used in the future.
displayNewsletterCheckboxbooleanNoControls the display of the Subscribe to Newsletter checkbox in the sign-up form. Rendered checkboxes are not functional and should not be used yet. They will be used in the future.
isAutoSignInEnabledbooleanNoDetermines if the user should be automatically signed in after registration. This has no effect if email confirmation is enabled (automatic sign-in is not possible in this case).
formSizedefault | smallNoControls form paddings and spacing. Use "small" to embed the form in small layout containers like a dropdown in the header.
hideCloseBtnOnEmailConfirmationbooleanNoControls the visibility of the “Close” button on the email confirmation view.
routeRedirectOnEmailConfirmationClosefunctionNoDetermines where the user is redirected when the “Close” button on the email confirmation view is clicked.
slotsfunctionNoAllows passing the SuccessNotification container or custom component rendered on successful sign-up if routeRedirectOnSignIn is not provided.
routeSignInfunctionNoDetermines where the “Already a member? Sign in” link redirects the customer.
routeRedirectOnSignInfunctionNoDetermines the page to which the user should be redirected after sign-in (if isAutoSignInEnabled is true). If provided, the user will not see SuccessNotification or any override provided using a slot.
onErrorCallbackfunctionNoCallback executed when an error occurs, receiving the error object as a parameter.
onSuccessCallbackfunctionNoCallback executed when the user successfully signs up, receiving userName and status as parameters.

Example

The following example redirects the user to the account page if they are already authenticated. If not, the user is redirected first to the login page, then to the account page.

export default async function decorate(block) {
const isAuthenticated = !!getCookie('auth_dropin_user_token');
-
if (isAuthenticated) {
window.location.href = '/customer/account';
} else {
await authRenderer.render(SignUp, {
hideCloseBtnOnEmailConfirmation: true,
routeSignIn: () => '/customer/login',
routeRedirectOnSignIn: () => '/customer/account',
})(block);
}
}
\ No newline at end of file +
if (isAuthenticated) {
window.location.href = '/customer/account';
} else {
await authRenderer.render(SignUp, {
hideCloseBtnOnEmailConfirmation: true,
routeSignIn: () => '/customer/login',
routeRedirectOnSignIn: () => '/customer/account',
})(block);
}
}
\ No newline at end of file diff --git a/dropins/user-auth/containers/success-notification/index.html b/dropins/user-auth/containers/success-notification/index.html index 90ca98725..d17cbfd5c 100644 --- a/dropins/user-auth/containers/success-notification/index.html +++ b/dropins/user-auth/containers/success-notification/index.html @@ -7,4 +7,4 @@
const secondaryButton = document.createElement('div');
secondaryButton.style.display = 'flex';
secondaryButton.style.justifyContent = 'center';
secondaryButton.style.marginTop = 'var(--spacing-xsmall)';
authRenderer.render(Button, {
children: 'Logout',
variant: 'tertiary',
onClick: async () => {
await authApi.revokeCustomerToken();
window.location.href = '/';
},
})(secondaryButton);
innerCtx.appendChild(secondaryButton);
},
},
})(elem);
-
ctx.appendChild(elem);
},
},
})(block);
}
}
\ No newline at end of file +
ctx.appendChild(elem);
},
},
})(block);
}
}
\ No newline at end of file diff --git a/dropins/user-auth/containers/update-password/index.html b/dropins/user-auth/containers/update-password/index.html index 9223a9bbe..13bc1344b 100644 --- a/dropins/user-auth/containers/update-password/index.html +++ b/dropins/user-auth/containers/update-password/index.html @@ -7,4 +7,4 @@
const secondaryButton = document.createElement('div');
secondaryButton.style.display = 'flex';
secondaryButton.style.justifyContent = 'center';
secondaryButton.style.marginTop = 'var(--spacing-xsmall)';
authRenderer.render(Button, {
children: 'Logout',
variant: 'tertiary',
onClick: async () => {
await authApi.revokeCustomerToken();
window.location.href = '/';
},
})(secondaryButton);
innerCtx.appendChild(secondaryButton);
},
},
})(elem);
-
ctx.appendChild(elem);
},
},
})(block);
}
}
\ No newline at end of file +
ctx.appendChild(elem);
},
},
})(block);
}
}
\ No newline at end of file diff --git a/dropins/user-auth/index.html b/dropins/user-auth/index.html index 33fd19177..055f807f2 100644 --- a/dropins/user-auth/index.html +++ b/dropins/user-auth/index.html @@ -1 +1 @@ -User auth overview | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

User auth overview

The user auth drop-in component will provide user authentication to allow customers to sign up, log in, and log out of your storefront.

Supported Commerce features

The following table provides an overview of the Adobe Commerce features that the user auth drop-in component supports:

FeatureStatus
Account confirmation emailSupported
Custom customer attributes for sign upSupported
ReCAPTCHA protection for web formsSupported
Retrieve passwordSupported
Sign inSupported
Sign upSupported
\ No newline at end of file +User auth overview | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

User auth overview

The user auth drop-in component will provide user authentication to allow customers to sign up, log in, and log out of your storefront.

Supported Commerce features

The following table provides an overview of the Adobe Commerce features that the user auth drop-in component supports:

FeatureStatus
Account confirmation emailSupported
Custom customer attributes for sign upSupported
ReCAPTCHA protection for web formsSupported
Retrieve passwordSupported
Sign inSupported
Sign upSupported
\ No newline at end of file diff --git a/dropins/user-auth/recaptcha/index.html b/dropins/user-auth/recaptcha/index.html index d9e7a3922..f0f293e42 100644 --- a/dropins/user-auth/recaptcha/index.html +++ b/dropins/user-auth/recaptcha/index.html @@ -5,4 +5,4 @@
reCAPTCHA.initreCAPTCHA();

verifyreCAPTCHA

The verifyreCAPTCHA method retrieves the reCAPTCHA token via the Google API. It should be called after setConfig and initreCAPTCHA, and before submitting a protected form to retrieve the reCAPTCHA token.

When the reCAPTCHA token is retrieved, for forms covered by native Adobe Commerce functionality, it is required to pass this token as an X-reCAPTCHA header.

For custom implementations, token validation should be implemented on either the server side or client side, and the token should be used according to the custom implementation.

Usage

The following example retrieves the reCAPTCHA token:

import { verifyreCAPTCHA } from '@adobe/reCAPTCHA';
import { setFetchGraphQlHeader } from '../api';
export const setreCAPTCHAToken = async () => {
const token = await verifyreCAPTCHA();
if (token) {
setFetchGraphQlHeader('X-reCAPTCHA', token);
}
};

enableLogger

The enableLogger method enables extensive logging to the console for each step and error during reCAPTCHA operations. It is intended for development and debugging purposes.

Usage

The following example enables the logger:

import * as reCAPTCHA from '@dropins/tools/reCAPTCHA.js';
-
reCAPTCHA.enableLogger(true);
\ No newline at end of file +
reCAPTCHA.enableLogger(true);
\ No newline at end of file diff --git a/get-started/index.html b/get-started/index.html index 5a3849ce0..40ab4a59a 100644 --- a/get-started/index.html +++ b/get-started/index.html @@ -1,3 +1,3 @@ Create your storefront | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Get Started

Create your storefront

time to complete
~20 minutes

Welcome to your Commerce Storefront journey. Our goal is to make the journey fun and informative. We start every topic with big-picture overviews and relevant vocabulary. We then walk you through the details step-by-step. And finally, we provide a sandbox for practice when possible. Let’s get started.

Big picture

The tutorial helps you quickly create a new Edge Delivery Services storefront using the Commerce boilerplate template. The boilerplate provides a starter storefront that uses a pre-configured Adobe Commerce environment.

After completing this tutorial, you will have a new GitHub repository with a storefront that is pre-configured with all the necessary components and services to get you started. You will also have a local development environment where you can explore the boilerplate and start customizing it to develop your own production storefront.

The following diagram shows the steps you’ll take to create and configure your starter storefront:

Steps to create and configure your starter storefront.

Steps to create and configure your starter storefront.

The full details are slightly more involved. Let’s break it down.

Details to create and configure your Commerce storefront.

Details to create and configure your Commerce storefront.
  1. Use the boilerplate template to create a storefront repository.
  2. Add the Code Sync app to your newly created repo. This app automatically redeploys your storefront when you push changes to the main branch. It also provides the Edge Delivery system (Helix Admin) with access to your repo so it can coordinate code changes with content changes.
  3. Create a folder on Google Drive or SharePoint for your content and Share it with the helix@adobe.com user. This gives the Edge Delivery system (Helix Admin) with read/write access to your folder’s content.
  4. Add sample content from the boilerplate to your new folder on Google Drive or SharePoint.
  5. Connect your repo to your content using the mountpoint in your fstab.yaml URL in your GitHub repo.
  6. Install and configure Sidekick so it can preview, publish, and edit content on your storefront.
  7. Set up your local development environment and install the dependencies. Start the development server and explore your new storefront.

Vocabulary

Before we dive into the step-by-step guide, let’s review some key Vocabulary that will help you understand the process of creating and configuring your storefront.

Boilerplate template

The boilerplate template is a pre-configured storefront that includes all the necessary components and services to get you started. It’s a great way to quickly create a new storefront with all the necessary components and services already in place.

Code Sync app

The Code Sync app listens to changes in your code repositories (commits and merges to the main branch) and publishes code to the Edge Delivery code bus. It also intelligently purges CDN caches when changes have been made. This app is essential for keeping your storefront up-to-date with the latest changes.

Content folder

The content folder is where you store all the content for your storefront. This includes images, text, and other assets that make up your site. By sharing read/write access to your content folder with Edge Delivery Services, you enable it to provide all the features of document-based authoring, such as editing, previewing, and publishing.

Sidekick

Sidekick is an extension that makes it easy for creators to connect, edit, preview, and publish content directly from documents and spreadsheets in Google Drive and SharePoint. It’s also responsible for pushing content to the Edge Delivery content bus so it can be previewed and published.

mountpoint

The mountpoint is the URL that points to your content folder on Google Drive or SharePoint. By specifying the mountpoint in the fstab.yaml file on the main branch of your remote GitHub repo, Edge Delivery Services can link your code to the content for your storefront.

Example

Our CitiSignal demo site was built from the same boilerplate you will set up to develop your own storefront. You can access the full demo site here: https://main—citisignal—adobedevxsc.aem.live/.

Step-by-step

The centerpiece of this 20-minute storefront is our Commerce boilerplate template. It provides a starter storefront that is pre-configured with our Commerce components and services and pre-connected to our Commerce boilerplate backend.

Prerequisites

Before you begin, take a moment to set up these required tools and accounts as needed.

Create code repository

This task requires you to have a GitHub account with access to the organization or owner where you want to create your new repo.

Create your storefront repo

Create your storefront repo.
  1. Navigate to aem-boilerplate-commerce , select the Use this template button, then select the Create a new repository option to open the form.

  2. Complete the form with the following details:

    • Repository template: hlxsites/aem-boilerplate-commerce (default).
    • Include all branches: Do not include all branches (default).
    • Owner: Your organization or account (required).
    • Repository name: A unique name for your new repo (required).
    • Description: A brief description of your repo (optional).
    • Public or Private: We recommend public (default).
  3. Select the Create repository button and watch GitHub create your new storefront repo.

  4. After a few seconds, you should be redirected to the home page of your new repo.

Add Code Sync GitHub app

The Code Sync app redeploys your storefront site whenever you push or merge changes to the main branch of your repo.

Add AEM Code Sync to your repository.

Add AEM Code Sync to your repository.
  1. Navigate to the AEM Code Sync app and select the Configure button (top right) to open the repo selection page.

  2. Select the organization or account for the repo you just created.

  3. From the form, choose Only select repositories, open the Select repositories selector, and choose your repo from the list.

  4. Select Install (or Save, see note above) to complete the Code Sync installation.

  5. You should see a success screen if the installation completed without errors. Your repo is now connected to the Edge Delivery Services code bus.

  6. (Optional) If you return to the account selection page , your repo’s organization or account will now be gray with “Configure” added. Select your org or account again to access the Code Sync configuration page. This page shows when the app was added to your organization (highlighted) and allows you to connect the Code Sync app to additional repositories.

Create and share folder

Now let’s create and set up the content side of your storefront. We’ll create a new folder and share it with Edge Delivery Services. Choose the tab below that matches your chosen storage service, Google Drive or SharePoint.

Follow these steps to create and share your Google Drive folder.

Create and Share your Google Drive content folder.

Create and Share your Google Drive folder.
  1. Open your Google Drive My Drive page, select the ✚ New button (top-left), create a new folder, and give it a name that identifies your storefront.
  2. Open your new folder (double-click).
  3. Open your folder’s menu, and select the Share > Share menu item.
  4. Type helix and select helix@adobe.com as the recipient.
  5. Ensure the Editor option (default) is selected to give read/write access, then select the Send button.
  6. You can verify your folder is now shared if you see a new Shared icon (👥) to the right of your folder.
  7. Additionally, you can select the icon and verify that helix@adobe.com is listed as an Editor. If it is, your content folder is now connected to the Edge Delivery Services content bus.

Add sample content

Now let’s add the boilerplate sample files to your content folder. Choose the tab below that matches your chosen storage service, Google Drive or SharePoint.

Add sample Google Drive content.

Add sample Google Drive content.
  1. Open your Google Drive folder.
  2. Select the ⚙️ Settings icon (top-right of the page) and choose Settings from the menu.
  3. Enable the Uploads checkbox to convert uploads to Google Docs editor format. Return to your storefront folder.
  4. Download the boilerplate’s starter-content-commerce.zip file.
  5. Unzip the file and drag the contents into your folder. This will convert the Word and Excel files to Google Docs and Sheets.

Connect repo to folder content

Now we need to link your GitHub storefront repo (the code) to your storefront folder (the content). Linking your code to your content enables Edge Delivery to coordinate code changes in the repo with content changes in your Google Drive or SharePoint folder. After step 1 below, all steps are the same for Google Drive and SharePoint.

Replace the default boilerplate's folder URL with your content folder
 URL.

Replace the default boilerplate's folder URL with your content folder URL.
  1. Copy the URL to your content folder:

    • For Google Drive: Open your folder and copy the URL from the browser’s address bar.
    • For SharePoint: Open your folder and select the Copy link button.
  2. Go to your GitHub repo and open the fstab.yaml file from the project root.

  3. Edit the fstab.yaml file in place.

  4. Replace the default mountpoints URL (which points to the boilerplate’s SharePoint folder) with your Google Drive or SharePoint folder URL.

  5. Select the Commit changes… button.

  6. Commit the changes directly to main. Now the Edge Delivery system knows where to find the content for this repository.

Set up Sidekick for content

For this task, we’ll use the Sidekick Configurator to install Sidekick and configure it for our storefront.

Set up Sidekick.
Set up Sidekick.
  1. Open your GitHub repo and copy it’s URL from the browser’s address bar.

  2. Open the Sidekick Configurator tool and complete the fields as follows:

    • Repository URL: Paste the URL to your repo (required).
    • Project Name: Add name that identifies your storefront (optional).
  3. Select the Go button. If you don’t already have Sidekick installed, you should see links to install Sidekick or add the bookmarklet.

  4. Install Sidekick from the Chrome Web Store or use the bookmarklet. If you’re using the bookmarklet, drag it to your browser’s bookmarks bar. If installing the extension, Pin the Sidekick extension to your browser’s toolbar.

  5. Select the browser’s back button to return to the Sidekick Configurator page. You should now see a message stating “Your Sidekick is not configured for this project yet” and an Add project button.

  6. Select the Add project button to complete your Sidekick setup. You should see a message stating: “Your Sidekick is configured for this project.”

  7. Return to your folder, select ALL files (including .json config files), select the Sidekick extension, and click the Preview button. Repeat this for all files in each folder. Select all the files again, but select the Publish button to publish these files to the CDN. These actions add your content to the internal (preview) and production (publish) Edge Delivery CDNs, where they can be downloaded and displayed in your browser for local development.

You can now use Sidekick to Preview, Publish, and Edit all your files directly from your Google Drive or SharePoint folder. Take a moment to select any file in your folder, select the Sidekick extension, and choose the Sidekick options to get familiar with how Sidekick works. Visit the Sidekick documentation for more information on how to use Sidekick to manage your storefront content.

Set up local dev environment

  1. Go to your GitHub repo and select the Code button to copy the repo’s git URL for cloning (HTTPS or SSH).

  2. Open a terminal on your local machine and clone your storefront repo:

    git clone [HTTPS or SSH URL]
  3. Navigate to the root of your local repo and install the dependencies.

    npm install
  4. Start the development server to view the boilerplate storefront.

    npm start

    The first page of your boilerplate storefront should be visible in your browser at http://localhost:3000.

    Boilerplate Home Page
  5. Open the project in your favorite code editor. You’re now ready to explore the boilerplate and start customizing your storefront!

Access in-development dropin-in components

If you want to test dropin-in components that are still in development, you can access the develop branch of the boilerplate repo.

To access the develop branch of the boilerplate repo, follow these steps:

  1. Open a terminal on your local machine and navigate to the root of your local repo.

  2. Add the upstream boilerplate repo as a new remote:

    git remote add upstream https://github.com/hlxsites/aem-boilerplate-commerce.git
  3. Fetch the upstream boilerplate repo:

    git fetch upstream
  4. Checkout the develop branch of the upstream boilerplate repo:

    git checkout develop
\ No newline at end of file +URL.">

Replace the default boilerplate's folder URL with your content folder URL.
  1. Copy the URL to your content folder:

    • For Google Drive: Open your folder and copy the URL from the browser’s address bar.
    • For SharePoint: Open your folder and select the Copy link button.
  2. Go to your GitHub repo and open the fstab.yaml file from the project root.

  3. Edit the fstab.yaml file in place.

  4. Replace the default mountpoints URL (which points to the boilerplate’s SharePoint folder) with your Google Drive or SharePoint folder URL.

  5. Select the Commit changes… button.

  6. Commit the changes directly to main. Now the Edge Delivery system knows where to find the content for this repository.

Set up Sidekick for content

For this task, we’ll use the Sidekick Configurator to install Sidekick and configure it for our storefront.

Set up Sidekick.
Set up Sidekick.
  1. Open your GitHub repo and copy it’s URL from the browser’s address bar.

  2. Open the Sidekick Configurator tool and complete the fields as follows:

    • Repository URL: Paste the URL to your repo (required).
    • Project Name: Add name that identifies your storefront (optional).
  3. Select the Go button. If you don’t already have Sidekick installed, you should see links to install Sidekick or add the bookmarklet.

  4. Install Sidekick from the Chrome Web Store or use the bookmarklet. If you’re using the bookmarklet, drag it to your browser’s bookmarks bar. If installing the extension, Pin the Sidekick extension to your browser’s toolbar.

  5. Select the browser’s back button to return to the Sidekick Configurator page. You should now see a message stating “Your Sidekick is not configured for this project yet” and an Add project button.

  6. Select the Add project button to complete your Sidekick setup. You should see a message stating: “Your Sidekick is configured for this project.”

  7. Return to your folder, select ALL files (including .json config files), select the Sidekick extension, and click the Preview button. Repeat this for all files in each folder. Select all the files again, but select the Publish button to publish these files to the CDN. These actions add your content to the internal (preview) and production (publish) Edge Delivery CDNs, where they can be downloaded and displayed in your browser for local development.

You can now use Sidekick to Preview, Publish, and Edit all your files directly from your Google Drive or SharePoint folder. Take a moment to select any file in your folder, select the Sidekick extension, and choose the Sidekick options to get familiar with how Sidekick works. Visit the Sidekick documentation for more information on how to use Sidekick to manage your storefront content.

Set up local dev environment

  1. Go to your GitHub repo and select the Code button to copy the repo’s git URL for cloning (HTTPS or SSH).

  2. Open a terminal on your local machine and clone your storefront repo:

    git clone [HTTPS or SSH URL]
  3. Navigate to the root of your local repo and install the dependencies.

    npm install
  4. Start the development server to view the boilerplate storefront.

    npm start

    The first page of your boilerplate storefront should be visible in your browser at http://localhost:3000.

    Boilerplate Home Page
  5. Open the project in your favorite code editor. You’re now ready to explore the boilerplate and start customizing your storefront!

Access in-development dropin-in components

If you want to test dropin-in components that are still in development, you can access the develop branch of the boilerplate repo.

To access the develop branch of the boilerplate repo, follow these steps:

  1. Open a terminal on your local machine and navigate to the root of your local repo.

  2. Add the upstream boilerplate repo as a new remote:

    git remote add upstream https://github.com/hlxsites/aem-boilerplate-commerce.git
  3. Fetch the upstream boilerplate repo:

    git fetch upstream
  4. Checkout the develop branch of the upstream boilerplate repo:

    git checkout develop
\ No newline at end of file diff --git a/get-started/run-lighthouse/index.html b/get-started/run-lighthouse/index.html index de62f3b23..791221d9c 100644 --- a/get-started/run-lighthouse/index.html +++ b/get-started/run-lighthouse/index.html @@ -1 +1 @@ -Run Lighthouse audits | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Get Started

Run Lighthouse audits

PageSpeed Insights is the most accurate way to audit your storefront’s Web Vitals. It uses the same Lighthouse engine as the Chrome DevTools, but it runs the audit on a real device in a controlled environment.

Visit the Adobe Experience Manager docs topic, Keeping it 100 💯, to learn more about what PageSpeed Insights measure and how to keep your storefront at 100.

Step-by-step

  1. Navigate to the PageSpeed Insights page: https://pagespeed.web.dev/.

  2. Enter your .live storefront URL. The URLs for your preview and live sites take the following forms:

    • Preview: https://main--{repo}--{owner}.hlx.page/
    • Live: https://main--{repo}--{owner}.hlx.live/
  3. Click the Analyze button to run the audit.

  4. You should see full Web Vital reports for both mobile and desktop, with lighthouse scores at or very near 100 across Performance, Accessibility, Best Practices, and SEO. 🚀

\ No newline at end of file +Run Lighthouse audits | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Get Started

Run Lighthouse audits

PageSpeed Insights is the most accurate way to audit your storefront’s Web Vitals. It uses the same Lighthouse engine as the Chrome DevTools, but it runs the audit on a real device in a controlled environment.

Visit the Adobe Experience Manager docs topic, Keeping it 100 💯, to learn more about what PageSpeed Insights measure and how to keep your storefront at 100.

Step-by-step

  1. Navigate to the PageSpeed Insights page: https://pagespeed.web.dev/.

  2. Enter your .live storefront URL. The URLs for your preview and live sites take the following forms:

    • Preview: https://main--{repo}--{owner}.hlx.page/
    • Live: https://main--{repo}--{owner}.hlx.live/
  3. Click the Analyze button to run the audit.

  4. You should see full Web Vital reports for both mobile and desktop, with lighthouse scores at or very near 100 across Performance, Accessibility, Best Practices, and SEO. 🚀

\ No newline at end of file diff --git a/get-started/storefront-structure/index.html b/get-started/storefront-structure/index.html index d9e68aebf..3f338553a 100644 --- a/get-started/storefront-structure/index.html +++ b/get-started/storefront-structure/index.html @@ -1 +1 @@ -Explore the Structure | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Get Started

Explore the Structure

The storefront project is a collection of blocks (Content components, widgets, and dropin-in components), scripts, and styles designed for amazing performance, easy customizations, and rapid content development.

Big picture

The file structure of the storefront boilerplate is shown here. Detailed descriptions are scheduled to be added before our April release.

  • Directoryblocks/ — Content and Commerce blocks
    • Directorycards/ — Content block
      • cards.css — CSS classes
      • cards.js — JavaScript decorator
    • Directorycolumns/ — Content block
      • columns.css — CSS classes
      • columns.js — JavaScript decorator
    • Directorycommerce-account/ — Commerce block
      • commerce-account.css — CSS classes
      • commerce-account.js — JavaScript decorator
    • Directorycommerce-cart/ — Commerce block
      • commerce-cart.css — CSS classes
      • commerce-cart.js — JavaScript decorator
    • Directorycommerce-checkout/ — Commerce block
      • commerce-checkout.css — CSS classes
      • commerce-checkout.js — JavaScript decorator
    • Directorycommerce-login/ — Commerce block
      • commerce-login.css — CSS classes
      • commerce-login.js — JavaScript decorator
    • Directorycommerce-order-confirmation/ — Commerce block
      • commerce-order-confirmation.css — CSS classes
      • commerce-order-confirmation.js — JavaScript decorator
    • Directoryfooter/ — Content block
      • footer.css — CSS classes
      • footer.js — JavaScript decorator
    • Directoryfragment/ — Content block
      • fragment.css — CSS classes
      • fragment.js — JavaScript decorator
    • Directoryheader/ — Content block
      • header.css — CSS classes
      • header.js — JavaScript decorator
    • Directoryhero/ — Content block
      • hero.css — CSS classes
      • hero.js — JavaScript decorator
    • Directoryproduct-details/ — Commerce block
      • product-details.css — CSS classes
      • product-details.js — JavaScript decorator
    • Directoryproduct-list-page/ — Commerce block
      • product-list-page.css — CSS classes
      • product-list-page.js — JavaScript decorator
    • Directoryproduct-teaser/ — Commerce block
      • product-teaser.css — CSS classes
      • product-teaser.js — JavaScript decorator
  • Directoryfonts/ — Default fonts
    • roboto-bold.woff2
    • roboto-regular.woff2
  • Directoryicons/ — SVG icons
    • caret-down-fill.svg
    • more…
  • Directoryscripts/ — JavaScript files that provide core site functions and connections to Commerce backend services
    • Directory__dropins__ — Imported dropin-in components
      • Directorystorefront-cart/ — minified/optimized drop-in code
      • Directorystorefront-checkout/ — minified/optimized drop-in code
      • Directorystorefront-order-confirmation/ — minified/optimized drop-in code
      • Directorystorefront-pdp/ — minified/optimized drop-in code
    • Directorywidgets/ — Imported widgets
      • LiveSearchAutocomplete.js — For site search field in nav bar
      • search.js — For Product List Page
    • aem.js — AEM site functions
    • commerce.js — Commerce backend GraphQL queries
    • dropins.js — Drop-in endpoints and initializers/loaders
    • scripts.js — Loads blocks, fonts, and lazy-styles
    • others…
  • Directorystyles/ — CSS files for drop-in design tokens, fonts, deferred styles
    • fonts.css — Default font styles
    • lazy-styles.css — Global styles loaded post LCP
    • styles.css — Global site design tokens and styles
  • Directorytools/ — Commerce Picker code and Sidekick configuration file
    • Directorypicker/ — Picker project code
      • project-files… — Contains Catalog Services GraphQL queries for categories and products
    • Directorysidekick/ — Sidekick configuration
      • config.json — Configuration settings for Commerce Picker, including Picker button title
  • fstab.yaml — Connects the code to the content using the URL and ID to your Google Drive or SharePoint folder
  • head.html — Includes @dropin importmap, aem.js, scripts.js, and styles.css
  • helix-query.yaml — Defines the path and properties for your enrichment blocks
  • package.json — Includes aem-cli, @dropins/tools, and the currently integrated dropin-in components

Vocabulary

Commerce dropin-in components

Full-featured shopping components that turn websites into storefronts. [Drop-in components](/discovery/architecture/#dropin-in components-and-widgets) are not primitive components, like Carousels and Galleries. They provide the entire storefront shopping experience for a website using pages and other commerce features.

Commerce blocks

The integration of Commerce dropin-in components into the Edge Delivery Services architecture of JavaScript blocks and document-based authoring. Commerce blocks are the components that provide the content and layout for commerce pages in the storefront.

Content blocks

The Edge Delivery components that provide the content and layout for non-commerce pages in the storefront. These include Cards, Columns, Headers, Footers, and many more. Visit the Adobe Experience Manager Block Collection section for the details.

Start exploring

Run your storefront locally using the npm start command and use the table below see how each boilerplate page has a corresponding Commerce block which wraps the drop-in (or widget) that provides the block with its features and functions.

Relationship between the Commerce blocks and dropin-in components

In the following table, the first column of links won’t resolve unless you have your storefront running locally on port 3000. The second column links to the Commerce block code in the boilerplate repository, and the third column links to the drop-in/widget code that powers the block.

*Drop-in components marked as In Development have placeholders in the current Commerce boilerplate.

\ No newline at end of file +Explore the Structure | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Get Started

Explore the Structure

The storefront project is a collection of blocks (Content components, widgets, and dropin-in components), scripts, and styles designed for amazing performance, easy customizations, and rapid content development.

Big picture

The file structure of the storefront boilerplate is shown here. Detailed descriptions are scheduled to be added before our April release.

  • Directoryblocks/ — Content and Commerce blocks
    • Directorycards/ — Content block
      • cards.css — CSS classes
      • cards.js — JavaScript decorator
    • Directorycolumns/ — Content block
      • columns.css — CSS classes
      • columns.js — JavaScript decorator
    • Directorycommerce-account/ — Commerce block
      • commerce-account.css — CSS classes
      • commerce-account.js — JavaScript decorator
    • Directorycommerce-cart/ — Commerce block
      • commerce-cart.css — CSS classes
      • commerce-cart.js — JavaScript decorator
    • Directorycommerce-checkout/ — Commerce block
      • commerce-checkout.css — CSS classes
      • commerce-checkout.js — JavaScript decorator
    • Directorycommerce-login/ — Commerce block
      • commerce-login.css — CSS classes
      • commerce-login.js — JavaScript decorator
    • Directorycommerce-order-confirmation/ — Commerce block
      • commerce-order-confirmation.css — CSS classes
      • commerce-order-confirmation.js — JavaScript decorator
    • Directoryfooter/ — Content block
      • footer.css — CSS classes
      • footer.js — JavaScript decorator
    • Directoryfragment/ — Content block
      • fragment.css — CSS classes
      • fragment.js — JavaScript decorator
    • Directoryheader/ — Content block
      • header.css — CSS classes
      • header.js — JavaScript decorator
    • Directoryhero/ — Content block
      • hero.css — CSS classes
      • hero.js — JavaScript decorator
    • Directoryproduct-details/ — Commerce block
      • product-details.css — CSS classes
      • product-details.js — JavaScript decorator
    • Directoryproduct-list-page/ — Commerce block
      • product-list-page.css — CSS classes
      • product-list-page.js — JavaScript decorator
    • Directoryproduct-teaser/ — Commerce block
      • product-teaser.css — CSS classes
      • product-teaser.js — JavaScript decorator
  • Directoryfonts/ — Default fonts
    • roboto-bold.woff2
    • roboto-regular.woff2
  • Directoryicons/ — SVG icons
    • caret-down-fill.svg
    • more…
  • Directoryscripts/ — JavaScript files that provide core site functions and connections to Commerce backend services
    • Directory__dropins__ — Imported dropin-in components
      • Directorystorefront-cart/ — minified/optimized drop-in code
      • Directorystorefront-checkout/ — minified/optimized drop-in code
      • Directorystorefront-order-confirmation/ — minified/optimized drop-in code
      • Directorystorefront-pdp/ — minified/optimized drop-in code
    • Directorywidgets/ — Imported widgets
      • LiveSearchAutocomplete.js — For site search field in nav bar
      • search.js — For Product List Page
    • aem.js — AEM site functions
    • commerce.js — Commerce backend GraphQL queries
    • dropins.js — Drop-in endpoints and initializers/loaders
    • scripts.js — Loads blocks, fonts, and lazy-styles
    • others…
  • Directorystyles/ — CSS files for drop-in design tokens, fonts, deferred styles
    • fonts.css — Default font styles
    • lazy-styles.css — Global styles loaded post LCP
    • styles.css — Global site design tokens and styles
  • Directorytools/ — Commerce Picker code and Sidekick configuration file
    • Directorypicker/ — Picker project code
      • project-files… — Contains Catalog Services GraphQL queries for categories and products
    • Directorysidekick/ — Sidekick configuration
      • config.json — Configuration settings for Commerce Picker, including Picker button title
  • fstab.yaml — Connects the code to the content using the URL and ID to your Google Drive or SharePoint folder
  • head.html — Includes @dropin importmap, aem.js, scripts.js, and styles.css
  • helix-query.yaml — Defines the path and properties for your enrichment blocks
  • package.json — Includes aem-cli, @dropins/tools, and the currently integrated dropin-in components

Vocabulary

Commerce dropin-in components

Full-featured shopping components that turn websites into storefronts. [Drop-in components](/discovery/architecture/#dropin-in components-and-widgets) are not primitive components, like Carousels and Galleries. They provide the entire storefront shopping experience for a website using pages and other commerce features.

Commerce blocks

The integration of Commerce dropin-in components into the Edge Delivery Services architecture of JavaScript blocks and document-based authoring. Commerce blocks are the components that provide the content and layout for commerce pages in the storefront.

Content blocks

The Edge Delivery components that provide the content and layout for non-commerce pages in the storefront. These include Cards, Columns, Headers, Footers, and many more. Visit the Adobe Experience Manager Block Collection section for the details.

Start exploring

Run your storefront locally using the npm start command and use the table below see how each boilerplate page has a corresponding Commerce block which wraps the drop-in (or widget) that provides the block with its features and functions.

Relationship between the Commerce blocks and dropin-in components

In the following table, the first column of links won’t resolve unless you have your storefront running locally on port 3000. The second column links to the Commerce block code in the boilerplate repository, and the third column links to the drop-in/widget code that powers the block.

*Drop-in components marked as In Development have placeholders in the current Commerce boilerplate.

\ No newline at end of file diff --git a/index.html b/index.html index ffb4c37a6..5f716d88d 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -Adobe Commerce Storefront | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Adobe Commerce Storefront Adobe Commerce Storefront

Create the fastest
storefronts on the web.

Our new Edge Delivery Services, Commerce drop-in components, and Content blocks are now combined to create the fastest shops on the web. Find out how they can work for you.
\ No newline at end of file +Adobe Commerce Storefront | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Adobe Commerce Storefront Adobe Commerce Storefront

Create the fastest
storefronts on the web.

Our new Edge Delivery Services, Commerce drop-in components, and Content blocks are now combined to create the fastest shops on the web. Find out how they can work for you.
\ No newline at end of file diff --git a/launch/index.html b/launch/index.html index 8a1b58a6c..10c9ac8fc 100644 --- a/launch/index.html +++ b/launch/index.html @@ -1 +1 @@ -Checklist | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Launch

Checklist

Adobe’s launch resources are designed specifically to help ensure a smooth and successful lauch of your Adobe Commerce on Edge Delivery Services storefront project.

Adobe Commerce projects usually require much more than a simple content delivery network (CDN) switch to launch. You must ensure that the launch activities are well defined and planned. You should also prepare a rollback plan in case you encounter any issues during the launch.

Documentation

For complete documentation on launching your storefront, visit the Launch section on the Adobe Experience Manager site or select the direct links below. You should also review the Commerce-specific launch checklist.

  1. Go-Live Checklist: The go-live checklist is a summary of best practices to consider when launching a website.
  2. Push Invalidation: Automatically purge content on your production CDN, whenever an author publishes content changes.
  3. Cloudflare Worker Setup: Learn how to configure Cloudflare to deliver content.
  4. Akamai Setup: Discover how to use the Akamai Property Manager to configure a property to deliver content.
  5. Fastly Setup: This guide illustrates how to configure Fastly to deliver content.
  6. CloudFront Setup: Set up Amazon Web Services Cloudfront to deliver your AEM site with push invalidation.
  7. Bring your own DNS: A custom domain without having to set up a content delivery network.
  8. Redirects: You can intuitively manage redirects as a spreadsheet called redirects (or redirects.xlsx) in the root of your project folder.

Launch checklist

The launch of a new storefront can be an overwhelming and stressful process. If you don’t have a checklist, you’re likely to forget something. Tracking all tasks that need to be completed before the launch of your Adobe Commerce on Edge Delivery Services storefront project is a best practice. This checklist will help you ensure that you have everything in place before you launch.

During the development phase of your project, you’ll encounter tasks around migrating implementations that were done on a development or staging environment to production. It is essential to keep track of these changes and make them reproducible on the production environment as part of the launch activities.

Catalog service

  • Switch to the Catalog Service production endpoint (https://catalog-service.adobe.io/graphql).
  • Ensure a production environment is configured in the Service Connector (will result in a new environmentId).
  • Sync the production catalog to the new production environment.
  • Create a new Commerce production API key-pair and use the public key as the x-api-key value.
  • Double check category IDs and make sure all category pages have a reference to the correct category.
  • Update environmentId and x-api-key values in the .helix/config.xlsx file.
  • Let the Catalog Service team know about the new production environment and launch date.

CDN and caching

  • Update your CDN configuration with your production GraphQL endpoint yourproject.com/graphql. Make sure to also use this for all the Sidekick extensions and scripts (for example, sitemap generation, image importer).
  • When using Adobe Commerce Fastly, request a new CDN purge token for Commerce production environment. Update in Sharepoint in the .helix/config.xlsx file (authToken and serviceId).
  • Validate your CDN configuration and ensure that caching and cache invalidation work as expected.
  • For multi-store setups, add a store-specific cache buster (for example, a query parameter or proxy through CDN configuration) to Catalog Service and LiveSearch requests.

Security and access

  • Verify/update password reset links. Match the Edge Delivery Services implementation in the Adobe Commerce Admin.
  • Provide and configure production keys for integrations and payment providers.
  • Verify that the new domains/subdomains are allowlisted and potential backend webhooks are working.

SEO and indexing

  • Add a robots.txt file to your project, which allows your site to be indexed by search engines. Ensure that your sitemaps are referenced and that you add rules to block indexing of any content that you do not want to be indexed (for example, the /drafts folder).
  • Add one or multiple redirect files to ensure that URLs that were changed as part of the migration still work (for example, when you remove the .html file extension).
  • Generate a sitemap for your site and catalog. To speed up the indexing process, Adobe recommends adding the sitemap to Google Search Console.
  • Ensure that your product detail pages have metadata and structured data (for example, LD-JSON data is configured).

Performance and monitoring

  • Validate your storefront events implementation and ensure that data is displayed in your Live Search and Product Recommendation dashboards in the Adobe Commerce Admin.
  • Ensure that the site’s Lighthouse score is green; targeting 100 on every page (taking into account previous considerations mentioned on this document).

Project management and updates

  • Notify Adobe early about your planned launch date to ensure that the Adobe Commerce team is available to support you during the launch.
  • Check for the latest boilerplate changes and update your project accordingly.
\ No newline at end of file +Checklist | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Launch

Checklist

Adobe’s launch resources are designed specifically to help ensure a smooth and successful lauch of your Adobe Commerce on Edge Delivery Services storefront project.

Adobe Commerce projects usually require much more than a simple content delivery network (CDN) switch to launch. You must ensure that the launch activities are well defined and planned. You should also prepare a rollback plan in case you encounter any issues during the launch.

Documentation

For complete documentation on launching your storefront, visit the Launch section on the Adobe Experience Manager site or select the direct links below. You should also review the Commerce-specific launch checklist.

  1. Go-Live Checklist: The go-live checklist is a summary of best practices to consider when launching a website.
  2. Push Invalidation: Automatically purge content on your production CDN, whenever an author publishes content changes.
  3. Cloudflare Worker Setup: Learn how to configure Cloudflare to deliver content.
  4. Akamai Setup: Discover how to use the Akamai Property Manager to configure a property to deliver content.
  5. Fastly Setup: This guide illustrates how to configure Fastly to deliver content.
  6. CloudFront Setup: Set up Amazon Web Services Cloudfront to deliver your AEM site with push invalidation.
  7. Bring your own DNS: A custom domain without having to set up a content delivery network.
  8. Redirects: You can intuitively manage redirects as a spreadsheet called redirects (or redirects.xlsx) in the root of your project folder.

Launch checklist

The launch of a new storefront can be an overwhelming and stressful process. If you don’t have a checklist, you’re likely to forget something. Tracking all tasks that need to be completed before the launch of your Adobe Commerce on Edge Delivery Services storefront project is a best practice. This checklist will help you ensure that you have everything in place before you launch.

During the development phase of your project, you’ll encounter tasks around migrating implementations that were done on a development or staging environment to production. It is essential to keep track of these changes and make them reproducible on the production environment as part of the launch activities.

Catalog service

  • Switch to the Catalog Service production endpoint (https://catalog-service.adobe.io/graphql).
  • Ensure a production environment is configured in the Service Connector (will result in a new environmentId).
  • Sync the production catalog to the new production environment.
  • Create a new Commerce production API key-pair and use the public key as the x-api-key value.
  • Double check category IDs and make sure all category pages have a reference to the correct category.
  • Update environmentId and x-api-key values in the .helix/config.xlsx file.
  • Let the Catalog Service team know about the new production environment and launch date.

CDN and caching

  • Update your CDN configuration with your production GraphQL endpoint yourproject.com/graphql. Make sure to also use this for all the Sidekick extensions and scripts (for example, sitemap generation, image importer).
  • When using Adobe Commerce Fastly, request a new CDN purge token for Commerce production environment. Update in Sharepoint in the .helix/config.xlsx file (authToken and serviceId).
  • Validate your CDN configuration and ensure that caching and cache invalidation work as expected.
  • For multi-store setups, add a store-specific cache buster (for example, a query parameter or proxy through CDN configuration) to Catalog Service and LiveSearch requests.

Security and access

  • Verify/update password reset links. Match the Edge Delivery Services implementation in the Adobe Commerce Admin.
  • Provide and configure production keys for integrations and payment providers.
  • Verify that the new domains/subdomains are allowlisted and potential backend webhooks are working.

SEO and indexing

  • Add a robots.txt file to your project, which allows your site to be indexed by search engines. Ensure that your sitemaps are referenced and that you add rules to block indexing of any content that you do not want to be indexed (for example, the /drafts folder).
  • Add one or multiple redirect files to ensure that URLs that were changed as part of the migration still work (for example, when you remove the .html file extension).
  • Generate a sitemap for your site and catalog. To speed up the indexing process, Adobe recommends adding the sitemap to Google Search Console.
  • Ensure that your product detail pages have metadata and structured data (for example, LD-JSON data is configured).

Performance and monitoring

  • Validate your storefront events implementation and ensure that data is displayed in your Live Search and Product Recommendation dashboards in the Adobe Commerce Admin.
  • Ensure that the site’s Lighthouse score is green; targeting 100 on every page (taking into account previous considerations mentioned on this document).

Project management and updates

  • Notify Adobe early about your planned launch date to ensure that the Adobe Commerce team is available to support you during the launch.
  • Check for the latest boilerplate changes and update your project accordingly.
\ No newline at end of file diff --git a/pagefind/fragment/en_24103bf.pf_fragment b/pagefind/fragment/en_24103bf.pf_fragment deleted file mode 100644 index 8993f68cf70904f234deb3c2afd3be47c82bbabc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1039 zcmV+q1n~PGiwFP!00002|CLqSZsRr({gr{9Wx3g)+axc=ZknQL)22Z7g0?6OnxZT= zl&F%F9d8hzztP|8m-GxJS+-;E1@MDK&YU@O;h9D(RH5s9mdpGxX`M+fl4QqTXA!F7mC>shXpAGM zF+!?6yOAFSOCrx{ZCginRnyz+E%GGloQk%VObDsGDK!(4r4CAl7R)Mfk0?5j5`N8K zvJ~|~_4yT|HOSA}`;?48jF3jixhlm{TbI#|3jh7{uSX4ptEsdr##&i-k7%#;f_~L8 zPDbxb5s0J51iwXwC|;f4>A699FOc}alUek)u&&jLet7fq4Jo54PI#^g>pFsr6r=YI z&IZ5BQk(n>FmZbr4=!B(_d1mOaQ)RmM_R$*K%k67bCh3q^+ohLmm@Vijwgzs+!4ry z3Ou)0o#{R%Zu<_7DcSlm&dk28(H@ZFOl^jJH|PT(avi;dTVK$RcelUL?ffqcD52BQ zL$=N_abu-07^dqY9(SJueA*4|28x!#w1_%PG`FlU49j-?WS6MoxdKG%cdZRCKhD&R5rqyf7bLzj@ zmZYeu^$P8OCPJ~98;$Ffa=>yRR@tTcxG>#1R?Z!rdx@?X{nsCB1g`c z=ZeQ`rRI<=$gyp@;k<&)I+U#7QGDd+emxA~NXnR4x|LW{j_|!;;QeOJ_Zn&IB-(a#BsODe)W~B28z)2WO{T!in}1F=1la z*-xjh!iU#k_WQ}-=k{im`Q-wUBj!vP-sXEd1-C&5!x2Be(-UwMwJa?Y{^K#}r3`-M z35Uq>Z-$mIAoS_ecxl2?#Dj`*Jf%B`F9t+zYSXR55qN7y?x1}A@)*o=BTFO7yX~_P zTe?0EFPblcI#qpf0|o;>~e^gpH; JBJ%DD002;P2T=e3 diff --git a/pagefind/fragment/en_25acac8.pf_fragment b/pagefind/fragment/en_25acac8.pf_fragment deleted file mode 100644 index d11341f06ea578b3195756706c50c17c4a863a93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3603 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 Re82v_{ujo>+i#Z*006`~Z3qAW literal 0 HcmV?d00001 diff --git a/pagefind/fragment/en_340fd37.pf_fragment b/pagefind/fragment/en_340fd37.pf_fragment new file mode 100644 index 0000000000000000000000000000000000000000..935127d8e69b3523a96121d64d6fb2dc441f3166 GIT binary patch literal 1344 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 literal 0 HcmV?d00001 diff --git a/pagefind/fragment/en_945e5c7.pf_fragment b/pagefind/fragment/en_352392f.pf_fragment similarity index 94% rename from pagefind/fragment/en_945e5c7.pf_fragment rename to pagefind/fragment/en_352392f.pf_fragment index 766b8ff21b682897519257b53c387442b1168234..d8c9643d14440a2128162ea4c308b3f1b04f6377 100644 GIT binary patch delta 190 zcmV;v073u9LdHU{)*gSYGA%Q;wZC=!&DVg(G#Nx0-Il%a5-+(w)ZobupnJHdDU<|7 ziB;TK-SpQVz_=E9-{dhv0U6o^@RM+G`Q7Qg)4|{N7RTe`tVfDt3+tyMW=@-V{qvTR zK3~i=*`WMb9G@vV`6kZJPE;IJo@o z^xo;Ni%$zp!`sXbr zeZCks*`-+%d>WKFt$?Dl55wzjS;u8-fA@X2264|qG#TXz=qnHRpc;MWUSs%eJDjNG uVYHKDA2A5_Ff^`UZe)S8oF5qh0(`fVw;)CWc8rt%AU_D0l`YiUWdHyS23%wS diff --git a/pagefind/fragment/en_35661e9.pf_fragment b/pagefind/fragment/en_35661e9.pf_fragment new file mode 100644 index 0000000000000000000000000000000000000000..d2c88319f8c6975205a595a14baf3cda4d87423c GIT binary patch literal 1334 zcmV-61!cUG*oFoLO`h|e-|vu`(+Mv{&2Cu1?vh4T$uP;8 zl5vX(KH5S2vn8fJ1MxyL-6eE)cyQGw=O;$AaTv2Q(&UX?< z7Q#%O%!QoIxGFdqOHpw(uUxMA%q=qVYd5X<-`a!^)(yo=u6PY)vsoz#LA6^WtFz!$ zm62a0q^{^Kz)%$6QsaEt@zND_DkaRyvUC_V8NK+4AlPTumtM0|`At9C7+rREN`LLG zU4>HFW<Dajg*eAC1t$aP6}+Lqk}QQcQeMoB0pjC~Ja0I1Klh9B*cy7Pq{H zZybf>ok|Mx+10W%>KZO8VKa)H?a=89^oOUNi=5tL+Lpy-G+?DMwb?sOO2B61)tvjR zk1JW+Vuoys=JzOHqAtqZ6M2?pM0laz)R?&*=J`9Fjic}cu`K8^gN=N_$6=D?$Jyyg zb_B_=0gJtJ2lm2FKfW`v$V@U(3a(tTK@FSAPiHzPyt$0+wyzyGa?GODXl9oHv3H~P z-+%t4$qY+Jg3KNO$a~g06-;aLgdFgS+jZYTpluJylc(e^=-r`xuPa*cSIS1Vf$aZyfo!#cS9TuxX=gWE&Ro7A+up;E(%(zL9xgJ99=V@Qh`rp+boA@ zjIiufbGO9jq~%-|IOV-Nxa(ROlAeaYWBK7`aynR^oPAu}oSc3)zdb7^<;i%mTnxs& z{<_a0zY_}1S7@{qS)G#+H=P!+b2wfN8Tnq+xZRfgutX9N3J_AMkDNn*Te%iM0-WqVtsNrf4Pb4{^fZbyDs5z1V&dwx=0+L zn!5u1Uq;@4i*9Yj?&saVfhzb8SxCih3fb6Ck<+6=KLJfJnRPO}TlEvjQmhgqOvU$n zt0a)4HJ++g>9@Niln2t&V;B$&s~aQdSliawhtf~*`f&wGhDWP@2WJp*^yWvx8gR6= zy+%4Y+k!fYQ1i`a>>BENYkLiKeDuveEc=Ov%BF3{rTzt$YIfTVd*3^)YiY38l79xJ zbnA;UjU!=g?V)E{*W#nS7CmWFFeLTwjjc$-eVaC7ZTs`zC><{b$B*`Tfji0Bja*9c sXMbC6Z1llBjO$uD8|-T_?r)DZ=*xCvqpgm=UH!iL2V{8}6ABOj00%yu&Hw-a literal 0 HcmV?d00001 diff --git a/pagefind/fragment/en_42e8c48.pf_fragment b/pagefind/fragment/en_395a898.pf_fragment similarity index 87% rename from pagefind/fragment/en_42e8c48.pf_fragment rename to pagefind/fragment/en_395a898.pf_fragment index 747449a964537894ed240e92b43ddc43abcc97ef..3492f39a15c1783eef8d3e8f25ab96957f04869f 100644 GIT binary patch delta 160 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 literal 0 HcmV?d00001 diff --git a/pagefind/fragment/en_4859f76.pf_fragment b/pagefind/fragment/en_4859f76.pf_fragment new file mode 100644 index 0000000000000000000000000000000000000000..ead495506fbe1454c74c624d88b4a63a86c3fb1e GIT binary patch literal 1306 zcmV+#1?Bo5iwFP!00002|IJt1irhvJ{gpxxutA#HOH7ieAbZrL0w3&8xDy%X+J`SvIY# z=~U~cy_2>OWoi1>Pkrx=RYJRImS?4Dy=*-Wf4~_^XJ~t7LRY=>rcoay`IRIsHm3Jv z>hSelRaxoW_r^98dVjb;Y+9%mRy%9fs*;Wbt<-X*H@sJ?WpBkoOA>8GW%3dhl9Sq4 za#A!J7D)l;(h9Fk8(leLy=s>XMMSS8ytiu6dw5cg8qtE23P7#tm#YNWEF@i-rjfSf z&qlTI;n|YQX{pw1vexoeEtFP%1HZH~169Hcs+H6g+*nDKavfmGDuP)n*9(2b4)8ZQ z43xUB*sN+hY!0gOD@QL}U#>_vdUf^%A<*+P{O=8Q#wiYxnqGU=fsJs@5ti7f6AcIg ztuJ#9l1a8kYs9(O(AB$lj0fwoWhQsD8SB_O1krFdqWk;LzYtE>Nnu3`K41c0dc$a= zB5aau4^tC*y`f6h0=V*ML0RXiWk4*U7UNgqNkzn?I_xlT2fi5#2Oh|X6edQGf*QpG zjGWmTk@GRtfSv}~i*vnW%z~CyRY`^!T}QO1vl3nnHKtPaW9jDBii-RQn) zKL!6o2-&mR5X~A<0vBSSQnVz6Q(R{U#e1Mcinr=*G$Z#*j7zq}(VWIK-I5)7hAvVT z31BjXs74XP_Ff(cvStW6JBIN)V6iO+s{iN}a>BGgy8!4ika^RZ0rD?{*d*&(mR_yp zu1$=6U@v%136?14uqs0<0jB+^BN(kwuySxmZA`iyy&>6@r{1Fte3b6E-R;T6wAmI$ zHxv3HGLd?wi(J0B6--`C^BQ@r2PRR*Wk-%14F3yYnVVSYC|X%t_$kB|;6j`7CQuYu z-On@Gt`$x*uWadGrJvB-SfFDD#$`xub~ViPx)Qpkl=s654$0seHxzLrsqcc3VP&w9 z>iPP>;)!W-REFFUSe4`y==XgBd#Zb_O`vY9x6slarD{f#GIjgCtx1}5<5Cf5xeMK+ z@UjVnrtEezBq=(ie{qqY*Y@SNbWiUGLx;Klq!9Upm$#l-6`>P&cqNxl+(^g>PAzCqJ2=~D-@9dIu3qE9tOJ!s*47%~L0HG=_ z&Ig(f3JP#XNn&iJ3xcKzaJm(St0G=@p$5aP5nj!6-w)|ht*MJR)V%=>?G`FR4z z7iAGyJf-9L^KE{X`FI)XJdClYW(A(pgR#{-xXfmk-(2Kbtu&^C%Vu}?dDciT@GJAm zYx&71H_WI8FW0%y{4Rg=5i_3U$9|(q%a2DEJ5jXji_cf_Uw9S)gaXC9XJG)M-u+&y9lvJCn@g|#P6XnTi8zxOaeR;x8-=#$!$dYAQq6bTmgH*@HQ7m)XDI}2WQchmaj_489Y6th6~b>rKnD;IqOeLB zvdA~J<6j#gRw9D)bgvZ#7^nnT>sSGk#SkD8hoSc1_=c=7Fk)K3MFe3CtplVA+wgmh zYv62vO2^@`r&1dPg-ptXoI#{%l(wrrz=|64ja1@wv1G%%4fgC2H3v+_eZqj9xFB$i*hEyT5QRj8+{X;SoaP9QlZGUbDVIdhI$?!)jfzdkXfrXP5%6sDQIxE12Kjb}`ACO9bJZ(WrV~4@MeK zRBFw86e^vULp-sW(fhV|784(M z$W<8YIf$cxx_0b(-p>w5;kljX52AJkpH2XFpE}E%V zM=POhtZV}nN=m3lOGEPeF>FAWaP*g~P=3D%XALK?QA>_cN5|=!X(?J49Nqb)@>s(E zF#mjecYS$&v-oiR?&50k@$ByXf3O8KOmYKaEqGG;eR;zgp=W7*dpLTAe-4}NaZf41 zY}xGO z1s(B(cPwK`JYi6-*E7&$A-ErOxbaVVm5cdlqgOvZe_Bl6UOryEE!Mbn8PgP2R+Kn@ z-DGImVdPBJG^JI1T10Yuj_jlt6fra*o4wlR2Y{yo;K2}v5%kmVd#ry?e+AaNagTDo W`>=mL{rlDS+x90qeV3>{2LJ$(wU!0| literal 0 HcmV?d00001 diff --git a/pagefind/fragment/en_7f25f5c.pf_fragment b/pagefind/fragment/en_4db9a52.pf_fragment similarity index 92% rename from pagefind/fragment/en_7f25f5c.pf_fragment rename to pagefind/fragment/en_4db9a52.pf_fragment index 32977a33594479d5796a282f8eee00a7c8ca077d..17496b661607f67e8f54f19fce33703702fba441 100644 GIT binary patch delta 116 zcmV-)0E_>h5uOpS0SI5i^VsVuxcJw#E2-U6H2k<*s=P5)IoiwP-D(e@!UYnqif;c( z0?elO!n?P8emgdoA4_zatAl?{zqz;_-O#iiKv7xYfq=FC^?nd%8HiduW4Q&suAHgy W&4bYwRMeAU2sQ|S+D!y$7XSeKRyq;@ delta 117 zcmV-*0E+*f5uXvT0SI7U&-h`sRC!~paMfy*CW1l|6X1Q1Q{b#`z0barem zKbGhcR|o%^esggKce diff --git a/pagefind/fragment/en_5288482.pf_fragment b/pagefind/fragment/en_5288482.pf_fragment new file mode 100644 index 0000000000000000000000000000000000000000..39ded92a8f61d60162698492571604bca2ca8066 GIT binary patch literal 1542 zcmV+h2Ko6PiwFP!00002|E*WyZre5xeihCbU)_H9 zWwW74jil^&se!%5UT;sb?9ClmJjmUgdq1@<-D|WPv@1=((aX4bR_(Fnv4r(Tl5N_J zPs$Y1vjDT)Ss}e=He*hD8L%~s8-(ZIzyI-U5ge;Luz?(M!<30O=X7Ed0CK>DR^rMt z&a^UDbPR{(m@CbKWrk1G5FqI}Y=PWn(~)$NY-UW52TV>w!v(DLZ!j7}J z;?>X`n^RLoq=Mwqg&9*N^)hWQ>%pcZiWH&_`sd7>TtW>;C zxGoSVmjcO@hRzm2o>!I#9zjrE>K1}311M!39Tu4u9ypjsQmoSDGOv{g3!X~W9+&0) zOzIpi&)+hhl`_~|@y!`MSmcfQZN7H*cQQ3BTy*Ro5Dg$smcTNrwVje??)YFfkFNIF zY5BlpD)>=^unpQyeg@L4Xo9YqrN9LfhAZQBdBL8t4a4GTj=z@xX4*0uE)|n z;+`4HWR{_L6r{ZIF&8&3Qz4sylysN*KucWT%)0S~`U_4{nejpg_L=!HFqE*npvqb8 zqa6aLDfsbG@jmAQFDQVQ>_a0S`p_WF$nk*06Dh?hBoQ~6<}=8%rr)DKT_JNu-8i+= zWrrI{o>FPIsu|b|BPgwV496CWwohQDBPB-b2*0KC$8fyi?tWzqRCiLKGF8Mf&KVqi z#aL+UrZ!Qen{ZolsBUnI99zcA2FdBJgz|VE(L{Lfoi)Qtrx(P0ZIESjVuZ6P#iACJ zFl&ySv#twO4Y;_fqqcS`-BvqHUQ1Eb?x1`+$gB{B^KHZvQcV_fqS_mLq8r3x(%kVe zR)m+hJj;{GQ*RpKJb(@vtGHJkX|44vj#E6@rT>p_2$KP!_A7%g; z7YQc-l3N#+9gzE(5lf1(EG$NWYz?#(S3B&67-)%+6j#T-gKtN$M*(Eo+M!+KhGv$) zI0j8dPG;-{>t0^;PTw7!_dDJ0>E%hUf7a>!a=_+HYBbOr#;05b8Uv&A5|~R$gsr=@ zv|+pU?(MVI4tw!)9q8@po8yxhroGxsw%SIG?IX+@3UN?`>v;Bt==33$;{^Idj@Wvc zD1Wgm#mi*5`}s3#HV>*ZQp+*yQ!9!w&3EA>Qar*c-dfF6O`1CgYspxHi5Ss*03Hc6 z4G*ZRC$GWC$M;f0;*x!Pvj8&x=3|?U;Q}<2M$KPs;cA&Lhh(iNOypAhY0_-7`F4sr zqWWHFDFdl>SLn)}8gn;$70mx5;8hVqnX?!vonjRkyqmF(5VkM@_^j#D55S_vU#v)E zxYMd(0>>hegy%U>bSdy%i!wKlt71}Gj36IQaOFVa!wh{QRX)eZ0**H`Ew7uK>^`A~ zschCQKN87Y#GjOn2Y`2|OwZ|V!jl%3`mkp9*VajQT$JSlESNeCVk zqTa4T*-jRv2;B=W0)LlDp+%`xhT&{ew%7^-)!ElJkS-S!mXUB zmX~H_)1y8$$A2(gkbcxzWB>aferh)|rIE95?BC4W4a_Kxr$$gg%Ps%Pa0KZLWuNQt z2s8R&A1mRkSNJW*bp};J?t(MWf+iUD`W!>k?!|xU<$rr}_~vyu{87E`|8{(sKL0M6 z%0b=$Om4);66W7;8nP55LX4hJycAFUU~@bNG>7fz7WHZDe>ZR6@%41!t85z!NV|9c sPPPTPYgR{k^7PqCtY?c@)jX}e9xWH@^Ut0>pZ_uc53**&DHRa_04e_fy#N3J literal 0 HcmV?d00001 diff --git a/pagefind/fragment/en_54bb312.pf_fragment b/pagefind/fragment/en_54bb312.pf_fragment deleted file mode 100644 index beb81b8345e13c2a065a205cafeb2adf065f71f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1344 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 diff --git a/pagefind/fragment/en_5613c7e.pf_fragment b/pagefind/fragment/en_5613c7e.pf_fragment new file mode 100644 index 0000000000000000000000000000000000000000..1d52be17119339bc3d4576b09e58b0634845b700 GIT binary patch literal 5626 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 literal 0 HcmV?d00001 diff --git a/pagefind/fragment/en_5ef2dc4.pf_fragment b/pagefind/fragment/en_5ef2dc4.pf_fragment new file mode 100644 index 0000000000000000000000000000000000000000..8f6f1651286085c934484df87f3f6e39838e97bd GIT binary patch literal 792 zcmV+z1Lyo7iwFP!00002|CLnRZWA#O{gu%^fs||oeL&=`vOXBSSON5Q5vx-Q1awc z&4HeqHPZ!K0qPcrfYuzRkXX|DnyFFZ$VgRjUm4$#CH5auVEy{p5J+ zul}I7Qu>;mDe0N4sTG~Nz$Lv_ozr!$Nm0$pSdQ@@g?V?3f8ej31RSDoanA6ugO!Q1=NKFygRDO zSbgAJ?_d7ta29ZdR2%8}gG7cB2eQqO<}bUUz4{vUpsBt8hX%pWliB+S6qwa)1JB{l zO4e|hp{R0+M;&=qWt^N0-N(n=R?wM<&W0yU+=1o&jXQ#v>5g8=%u0HRG5Y!aN6b^} z$7!CLJsM^~@5VX?*Z%g=X)G{LuX zaXqScnOcQaGK>KtN^DZ_GfVBeyi6ZGJ)ISmSadoTi`%KIP5bhz=gJoGmwqI^W5DvQ#kzKdkrp)cpD8ad{E1KBgyEVR?1>;eGwA zjGJ`g1^@to!jEPE literal 0 HcmV?d00001 diff --git a/pagefind/fragment/en_63967ea.pf_fragment b/pagefind/fragment/en_63967ea.pf_fragment deleted file mode 100644 index 6d0bb8b611bd2d0897e70034aa72c3c4a98fab56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3558 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 diff --git a/pagefind/fragment/en_6b1e1fa.pf_fragment b/pagefind/fragment/en_6b1e1fa.pf_fragment deleted file mode 100644 index 3af43ee0862887b68bd5f9cd6820871df01de202..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1226 zcmV;*1U35~iwFP!00002|Fu?aZ`(Ey{wp_afE~b=8arE8Imxgl1rnga0;K!Y76C<3 zHWOJCNXjoU{NHz^NXfF3F32z>A87LU+;h*pP$ikNj2G#BO4ChH$vlXID3zk*g^K8m z(MM6~NaaGSC>R7(6q*$pjV|07*s~BmGa?HhiP_RKR&PTo#e%0S1zy-)j|j%a5I3oq zm!d$(5I(ICI_1Um@K8a@6qP(-%EF{9BUP>qe95HdxJ?#>=OoD)XaOY8J+E7`o+H8y z(=(AOzx$syCuZ?-t~7`Y${H8ujszMSFi0zDWa$Wqp;M+X6t*gb)I0v4W5=wv3a-A~ zeEw5wRI<`cotmGQeDNt~=EgZ}YOa68xVpjcadC$m7UQ&wYmUv?g{g>@KA*r9Dbk!t zbGu{e_KmTcz!v{4b_kbNRa6Ejijxrf2w7E7%|+prHinjyk>`hLLapi`0TU`&nHwp7 zAa0$S7N5_{T7|m8GGWqXRBwch|4r&WNl-(_!^j*%KNWMQbZishejLHsIV=QEjWUK5 zb@xT`z$j*#D226$0d^JP1bK*^_rw~l2^u{sZwOadR){DTOiFA};JOy1jhn5A zk;GP@f>~`}san*J5@~437+ktu{rlRSOH2T(8*0Cp6|=5mqqI@6H`BUQaTGnMF!69x zqS=zHL+t!$$r3k-qT}#n9KJ(Kw-G+5-ULGX7e%g+tk=0ndB%~#USGpamqut*#=@ux zH{m#I1!vG_b$SLqA2v@LcW(otxHX#pB~8Fvyx`0x&f*t0EAb>1v@%d3l?(%PdGGg9 zzUUoI8q1IuSjjetXV5#vQ{d^@x1f%B*wp&B;QTbg({t2-XARLKB;}SJq(k@#G=hgt z(3)9)1EfNoB!41xvU&=;HxaA*>B(q4{_wQCAD{eQK7OFnY@AHj%TdxBv|WhyKku`} z^X-u-?d?v+?pXawH2p4$=G6$nzb&`*>mkEBOZ{%U4g9$B(<*)`o5;YB=r?(oGVPM^ zaebZkd#+Z8u2y?TN9{P+Tu z*(Zws{PlM--`mmt>>~Hs#39TxcVzaQTN!e(4Rm~H&1ML-r?@cROm_$4Y%ta*F&i?+ zNMLP4ZRnodkZ}MVeaXI_uqlijC3Ij{{G3pe@w_ARjyAn@yMpm6XIhwF+B3GzEWxBq zeJYeTg7;_E`s8^>lMEV7vTE35nuOrMnXNB!J`v6+3FOW&K19{_U3)mucvk(dUQ3VR zWGE$U)uYmPL(0k(z8WFl!m)(nCF7^eKUylv+_MTF2PX9>s$IJDCDdZv3^G6kpcPs+7+)VH|el-1@! zSV`T1aDmnmQhAHEYWJeNvneaUeW_@0Su?^ON-7bPt?Q{yHNOo~(jdkm7FldAm?{9u zQR1%gvY+~+5s!VTJht0tyNjG)AS1<*X>X*Nz)J%Ka>%cZhm!Bh9D<<7c38dNdqDVL zEE9=z>9gKuG+NO4g8{RdhJoJhkL1s6?FJkd<|k^jF=eWOb4&;y{Q$Owsj{DM4s%@# zxi~oGmh|CC?6ZE)Fq<4W?43hQQ$)Mx->dlw4 zs$q|CQnh+`oK+oOVpnC(o-nUpX@1~w2PbRmb-KgTX^KTCodFrO0OM9gbYwXrp zdh9dZ=Z^})i<=0qt{-PlAg@o5`}T06Hb0}xpP(Gwy*g5#IQ;yJ4|+V7(|?dJUoHSw SpS^kf{qbL^2b&R+2LJ#%t;e_k literal 0 HcmV?d00001 diff --git a/pagefind/fragment/en_6cf5a81.pf_fragment b/pagefind/fragment/en_6cf5a81.pf_fragment new file mode 100644 index 0000000000000000000000000000000000000000..b69cd78277bbdd0e0d0d8afab79b45e5732ce9b6 GIT binary patch literal 2702 zcmV;93UT!xiwFP!00002|HWDTa@)ocf0YaWA=M#3N&b+`$ezTqlc=>^SF+>D)E&+d zIFhgc9D+NLW;L40YxD*BV0n`M_U`aS5|k6S>3D1t2kdY6_Um@{GCmixC=DlJ5Z?BR zJnoHqqcE3Ql&Vpd%diNv7Yfaz7|&tmVO{e$<~ow;s5k5dGSwp0Aba!T4Qsyj*k>=v*-5Rngu*%JXVrTMJW)z=4r^pClM4H4-khaqd2tKB3(wg zOcO|F_>`!M#nFvm@5MCZ!HvQAG19_kZx^DqS*Enelo4qvL0?HtB)b_|HPCJprw?aZ zSVcr>q$3_1)wLAINC+5=MOetS^4XhQE%)xQ<`Jd%6nn{;GKRZoQdxCEaqko)VdpPiGsyn>%_SS; z0vIq;=o~E*IsQv{8i<2U?%O-lQbLNsH)SN5=L6#mo1)eqDGlSz;2qjSq#ZQGBZ)}3 zG)pSRZEV(o;^X^JeDW7MiP_mg@bDQsOTd~13!W>XpML1Qd;6Vt`k`08Na2lGT}EO> zUiP8KT#RFJ6@_~7G!)Ay5T1D$mhS4QfXCwLk$-5QbfjbP>?czEbtTc+$S$)pWrJJg z0Zj|4q&y_hgYYG{aRjGPrZit$7qcgeGj5V=Urg7YEG=SIVj{+#LntnQY1R;q1qG~>uvi9^ z4C^;wLcuVgu&nZIGqE1{ZBz$DL`L!A6Hl^Om~5ij!tpS)qVdK?OtNpwuWXtx)l+W9 z%DQ_?)}WQKo$AWtX*-9I`j8xRNdB9XOn1)hOgH1khRcZ3>x@!CwRei_TUIWp552K@ zY)der`XDS!ZBt@EL@z`W>n3LyU~zBRD*3`R84`5s!(X6(=$MnMw23` zUXyvt5-P|A+zQaMB97PiHw~zrvz<=Y-m9%pOEKOh)o8?C?2dZB^r+ir>80S&#%}$M zC~SNK-2T^uyrWcbV%O+@BG)Q+uz|c0l01tl=xw2av5Z3MuPeE8>WcCPgDbOurMr7r zS;{@!+*#OQ_r|h#;f$~!zam$oHl1a8F4GieZ&|EC7?Z;N>V+|Cx7{7xIY-SV=j>YK z)CaNeskHvvs|wFV4_d2sa8i;YLv!23re(O7-ai$ljlL3D%mdL9kiENlWk4+kGhZxZ zOuv^rE)evqGWqd97pOAavQd}W)j4&uIe@3gRl*2pq*q=3dyNfL0zk2|XkO%Qu;VCv zZ1Sc1WY8~@`dMK0<2epqiSlgZnvnj%*G-7;s6nwxjDN6N8r+fyFB?;tO+EUoe~FZf zT;nx9^De^vnDuGLUL&V_QP>~W1g0VNenf-ooukIAD2z9G)cASZ+?4j8W)j!-{-Q(D%7A{o||P5oZAlFdyAu< zKI2&yQzJ-2x{pex_~s5uzY_CE(U^&xDV98J)+aU@(_XAEx>W3@EqO`0_gENO)ClK8 zB8yZX*d|k?d>RYaAeRsB2xy|^v8Qh(fM?ZC; zSlJo2KfJwsWhY%##L)rME|l68QdI+z^CdJ%Guq%&xfH(d)9P*wcIv}#C3(M8;(#VI z^_v5e4KGPyXtNuK!XSaAX^a`T8K#*LQlrp1J7|tpLW>aHFD7Ook_nXflDhp@^afdR z&?kxe!?sY?P+zl+!nf3Wg{ONxITHR-f#(dQXwSZSxSt;k51FaPcjkRvf#xC2Xj13@ncB;AxL1u2HQq$~_ zZ&&Hfgjy|*nDHXk-6C{lZzui+oxgcv58B7%5U0DkDUd*}|MJc|JUoK001TBguyzV= zf}C&s>8pmh{GS2j-NdYUIMqy6`COVQr09 zSMwD!s1L`VR$mS4(K=_U2yg}~RG%AnCt#RL5K%Eqm32IV#PB9r$#t*&7|5qP7k|y1UCPBXnlxJ**G>dy}N^N;Xgd-+(TK)dN@@) zs{RZccPQ0d_O?mw6!!46n-?8gT?{r0&KBz9M<<<$%^ul}oK`I~^5WwMcmKHi4-f;9 IVA~-80JV@Yz5oCK literal 0 HcmV?d00001 diff --git a/pagefind/fragment/en_7271802.pf_fragment b/pagefind/fragment/en_7271802.pf_fragment deleted file mode 100644 index dc76b7e5cb4b8e6f06cad8b9b776fd4b4df76187..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 805 zcmV+=1KRu_iwFP!00002|9w>3ZqzUk{gqLkcBS2vmU4ZBa+46MXb}R0R$hCuvFdmt z+v)DAs>C1ghHSrc6LG&@LvnyJHB z5+&N{uIKQkfb-IF&rj6ArNuco zVsI*Me*O6K`+MMOTxh2%l`K=L$@s2P|>0a*CjOp>VPfUAQxMPKypN;(Jjm% zclMG`W1@gXV3Xj(`?sRJM19dSde6O$kYVGkR!M}ZBIF*eu6lCRLZ zIsZiKHG)$y0UDdo|6W zrzLp=bWD>k37i#49@CH)jV`+Fwy7HnFL2`$?>#Tq){dS~zY(XMKB02jvs$z5bjt5a zD@>b|$jeqaRK1PUK=a5}X{Afd;iIyw8!GD?-Y>>Yb80DVyD-I-HM@?m2QXL>>6#7y zwTVl5+I>mRxiF_-CYld+@JZ^i^nhBV)FU$)swS__wqSTYwp})PLz{OIiG+u|iT^^4 zGDo^i9k%Ftv;%gu0_!4ZEDP!zh3_Z6UNr0mj(a;JY$vH diff --git a/pagefind/fragment/en_7528af7.pf_fragment b/pagefind/fragment/en_7528af7.pf_fragment deleted file mode 100644 index 7a0d7282efadd15305d862a8927f470599e2a65e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2080 zcmV+*2;cV~iwFP!00002|IJw4ZX3rHew7JtOaUZS%SezaNCR0`fdH*#Shi6#354P9 zAvw|P%z9>)G^+~mYZPc-&QH?s%*-yA)XIu;l{<2G&i{A5b7pI~q=ho&by<|RqsHmc z>FBt0wpPX;H=f*7Heq#KSQDf&}yt-$E@LSUD9xE(BGuoF2ML zvQ{rva!q1RWZ6 zJpA<>bu0hr<9~eiO_rr2?`Q07)YbT4tDY-4<37I;G6bjQO&}lr_9QC2KtR3N*%lti zH7sz5t!>WaOk5F(^Uh4Gjtg3o3yNaKMP*S=WmqHz202yLn)<*vyAKPlQ(?8HB8W;E zRY~2~G7-KhRzf1bvZ6^!!bC_@iduTVv5w2}5I)W{KxLq4O&Um0Vb2^=so2It7IUgO zaVjOdd-6gC*(PAi)n{j@oQdaK;B6rr9VViwQC`XF3J5J44MZ=M4=&pYLv7+v`?e9T zlH^Mp)It>rE(dKE(FOb3E|;hy4xq0R%9KBAf@K3gnu~B>op@a zWhr`ZQq%ha-RYE_4D@h^_)__phndLX`2ZwIS0<QOo$((1(B^ zsRm&%8rX7?=62T`yx-nGI%80-z zo7)c@H}HbQZ#nY4)<-ha-@hX7uh1g?r(dFpGY%qk3Wt(~M9FlaOzx1J2%fZ4?u1Lz zZ;xEu3G(0|3=S!Kswg!7(>$CO`?g^fBE_r0uL$@4$1Y-BTpjY-fY{!zc`l`Y3#W zs%VzXS~+Vf^o>tbw6qb_zNu^LQWvB&v?J`@3HTr+bd48C-dq+pVEvVCV1s4nv5#Ud z_w+{^V1=4nJOBh1N4v4TPVpdC*#&oU4}&ptX}Y_Hx{y7T7b^}rqh#Odoy%y_d-3E( z&N1&$P&6(wO7@I1*?BvD!?c;&>-Pjd5O!{tH|R2dxp?d8d_~0#dg&ku06}n8=WQ%TX`jBFZ&ivROW7@?M!ci<5Q{>ssyTU+xTS^P$wri+1>_|sVz+%*e z^pZASQviSbj*zaJITO`9u2nlte}L!)R)mK+Gw(og!eop0ScpSNX42sAFFfpz;&qzA zDhSgKJJ@3*M~vm;V=J!!h4jQkgY;dge{u0LP5oPVtd;tpQgLS1yabx1PkF3mfj_f| zy`M)>=;skvjjB0sIC&*zi}59TVaua-cSXWFf5U4ilY415rp@?@WXbb!g@Jdjt*7U~ zT$&3G{k#|X=TNm)2v=zpI$(YJ_}{4O)5re_tmJ_^JeeEF=~~fdcDUu;b0F%QbpRV0 zoc&wd{s!2so?q-(yo&K1i2)dQy+a=kCd1=fBZfo10Ts5w6lEUlHYz(bav6-nTX2iG zw6K&pjp^lYN){4wror0f7TBm5P40)d2LKe23pjkl0rlUt+jt-D$mN&GEb$vN?l~anowqR{E_ex(wnm z7Fn1c&$TUXj>IkZs1FHaJIBQL;;XNg6wa-^Q8a$SUSFq=QP=F|b+9*No*aG0F^&&} zSu4^7!kxiLV$u~BQ7Cs6p>kvFy}Y#=$wQaFI1Q< z@cnC8d0X1i>7VWf8SqwWsgfuOCv_Utp%Z0#D-voAxKzH18@q zV_)*|V9$}K-#&Xdw53TE>fM2c^0ohZr~BmD$${=?t?tY+J8c);gPr_0Ctu(Fa`%4& Kd@Kqz761V2DHFl~ diff --git a/pagefind/fragment/en_7637b17.pf_fragment b/pagefind/fragment/en_7637b17.pf_fragment deleted file mode 100644 index 9bfb1790e11a54f28ce448e8e988ab183abccd63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5629 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 diff --git a/pagefind/fragment/en_9a9f929.pf_fragment b/pagefind/fragment/en_9a9f929.pf_fragment new file mode 100644 index 0000000000000000000000000000000000000000..6eabdb7b722db2d9d396d8557ce188d4b46052bc GIT binary patch literal 3633 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 D@wgyJ literal 0 HcmV?d00001 diff --git a/pagefind/fragment/en_a34ea13.pf_fragment b/pagefind/fragment/en_a34ea13.pf_fragment new file mode 100644 index 0000000000000000000000000000000000000000..d40ebafa6cbadd9aad37aadbfac62673804aa845 GIT binary patch literal 659 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 UfUD2mJpTUpFa7oqz>)_50KEpr(*OVf diff --git a/pagefind/fragment/en_ab6f333.pf_fragment b/pagefind/fragment/en_ab6f333.pf_fragment new file mode 100644 index 0000000000000000000000000000000000000000..064824c8f30d01d9fe0267f560bb55a40f19e85a GIT binary patch literal 1491 zcmV;^1uXg>iwFP!00002|BYAcZre5#ew8z?SRBBYURGdpkri2zu0h+RaGY+#FgUbC zMMNZ0BdNHaVW6)uV0*bf$v%>jWjPo4mu2$Y&v!nO1-s^nknuE*;$^4QS!dK4##$9Z znqg_U?z1RTrL@CHNy~)f+6sIjjfG!Oui!2%$ zw@&kvOTXUAuFfGTW#n8U$*nvK6y22t`FlIDFh#}|#@liRGHyA!@{&qI4yK1FqpU<> zT&yCq$O~CjpF&>KY~l4|23?qoc)79H6++mQq^ip80~eO(=6=Dv%&aJ!zaZoA(JFY|AmA@)irm6Y z!L%<9^8t~o>$PzxQ4rNl7f?4-B1_)_hi9trj5?WgrkHkBat^9y^pIt?a5Y98DikDF zNJ#U@b+sx9)4XmQg6?jV4R#P|BCbo#P}Kba9nvS46w9(&dsbSjq!V3ZkXi3)rm&OO zy^-uzT%(^AGAhu!5vb9)1^&>T53OR>&8ez=&*pYR+QS-B@koATma8cZktQn3)ZBrx zrBABxW=3=#K4`KiIF0#Vuj!bZNDIGAQO1lpV>wbW)?s@DQ9xAIW23Fab(*b_ioG+1`Lkq8OFt7 z_yUa4c6-5Xz*fUx2F43bFxlaJ3qXXrC{qpbD^nU&FUp>GW zTmfFN?fKjc;@F==W;={Ku5hGfBD!%sb*7rW)~>pcNcpXHv=KR}0CFv^Q(N;?qqYBd zXk(7kK<*lw_v1Bcj?09+dECQ9v*^Z8?heLnCA_*UBEMmxFi$cXFyoqT5Q&JftS z;a(n=A(tZ@6xmjz3G9^BjpjZsA3?KF+TFtZWa02!$Y@<&`M2-R#rSslvdL z_Uei1yNTKxwFvXb9|d$kdkO9&e2-T6)?n73otdy(nSAB0BHeEQ_~_=;9F~YwS`oo# z+}(E$kstVK0O4?}OEqo^2Xu6KF**NmGM>Ia|K;>-`tfk`_7&W4xPua#GhyrVe;f{8 zJqRaow<$yqqMLEwpTz<4u)5@Xy=}@FQFosXerkd_A0MBLFMKq;yVL-2-_tXXeXn`- zWZ71p9-mAOPu~X{tJhwB%#(vB%MI1lRqvkZhWRCJNcE~w4*zI%$Km*7aydTR&Et2$ zR@m6IyN+dZP!UQshR4h@?|5^8UendE`fr9$mK$4x>U)3($~(STJ+NzT%GDK(Xz$y- z{T@IIDV)I-{qnUdzt&+D?eV tWz}zA3Li4w7HK>@d->x-J}Sm)ES{_v8vPe9U#$LI{SS2S)vmb?006-y>Hq)$ literal 0 HcmV?d00001 diff --git a/pagefind/fragment/en_abd8506.pf_fragment b/pagefind/fragment/en_abd8506.pf_fragment deleted file mode 100644 index b09de43a13f95efbe32cc84cb3012930b55737dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 797 zcmV+&1LFK2iwFP!00002|CLn1ZW}ic{guI^VnHEVFdDJBhKKSX*0GgFtnq%Qzy}_EX0j$T_`Qw_bLBlLeO48Wg3!7bXNIN+umL$2ZGU*i1=NKF zVmPbHRDEKt_bY$&I19K!s;vzCK|-Mt&DtRt@)#nEKwK0az&L1#~NHa=nEPAnfE!Wl%RJ9$Bw)$|f$^zr?N ztWz7OY2G(`GR%VBOm&Q|{p_RLgL3T#)iZegRcd<0Nq&TkW`M!zs?eqF3-~C;Fxl7Bt%fH@kUetNJM(zQ1X}s?7Z+8}- ziWIM@_Zz+fEsWkKD#w2wD<0<(KQ_-4)8Vu%vC~j~SB@iRm5+948)|);oy0!h$F5{O bpH}Yy;%FbApj=)){rmI@2&|H|s|El7=}3S| diff --git a/pagefind/fragment/en_61b05a2.pf_fragment b/pagefind/fragment/en_b12f6cc.pf_fragment similarity index 89% rename from pagefind/fragment/en_61b05a2.pf_fragment rename to pagefind/fragment/en_b12f6cc.pf_fragment index 46c8aa3c5bc7cdea4f4f21ead093b3090662d4b6..51023f8b91e92ce8a37fbae631d005d3bc7a81f9 100644 GIT binary patch delta 395 zcmV;60d)Se9$3@#AS}A)pS$4ennC@*bR?PT4Cd*1It6#SL>{AnoCU&p7eT3rjfOP|&^8NkO5C&-b`PFLZ*s p3^zDE{c0){sP@cbRUL_j@d7;*fB)qEr+ALjV`=+FZ$003~;)1UwV delta 398 zcmV;90dfAY9unm8@1iI7bhET@R^`h!V==0vr+kZ(5#njK;0%2^AyewqzL-HW1@dOd#+A2jw7ldl{HQto{{ zC8oE2Os}Dkdyl511V%IOJNY@nW*#p4ddW9`-!I;4La?D**6=j<3s{^%yj!(Q&=lZR7&rjj?$y1pg~Pr_}y+Z!g>$-Vni z8$^ZTCdMXuA9NslVjoP$hbPB}`tC9JJ%NuW9YJU{_q3}QmTlAM|NQhniKzwxCeSVb0Aae*^Z)<= diff --git a/pagefind/fragment/en_b3c3c3e.pf_fragment b/pagefind/fragment/en_b3c3c3e.pf_fragment deleted file mode 100644 index bb41a31b667e70bde23005d3060518cbea00fe01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 572 zcmV-C0>k|uiwFP!00002|CN+mYuhjsfd9(DPc1mkx+_f|#>hI@%UZIwFvbXqd>kKU zOPVCd86p3DN0yh{=0M-1bNS9qM@B5MAeGN^nQxNDR>>q8=T;k1ZrnJuBhmPBEVc52 z6k0b9_mR}~g0JHwO@a!QXTJ}unMMWd95Q$)5&o+Jiz;U%2*^oPdI`Q19(uOp8-k;y z8j(ulp)n~4m9wKm4@NlGYMVo$ZS7*9kTOW2z_sLM2@CWsqUu<#NY!;k?yH%bZQ= zTCG;@?fmNL+ueGRwYV@Gwj<6(HMrtzC#NT{rxJgyjFrpEF;^buy0Lw_#k}jD;%q40j=u7oh+H4-P^?xwq8s}X z5pl$zAUV0QDWgB3JJt1#%U_LWr{6zMuWx>T`%P-!4cB}Y9)K`AaF&9o{KLb6zGN8S zmt(@^;;$R%D*mQxD(Ymz|HuG)FdaP}S7uML*-mi>v_*`!ipzi73!ohrMOUzlC(qjO z=u2iT6rt971j1jIrq*y?! zPCmQXfAZz{37E&{&&E%feK~mo?#XEUizmz;kDtJ_$!VQyg$~5Z#}+f+<_}5$&d)C& Q|M>Vfv)G)^&0qom0ONCu)Bpeg delta 269 zcmV+o0rLK*C#ol~rxJg;ExO%&l>55 z8qZF@f1Y07{QmZv)V>?8`78ul3Gc@C=>qhwD~>T#UIbW(-sdUrWvgsTrJ z7SO7b&o1_#d^vss=JENn@e^iWPM&~!G8+Hl3A4xJCopYtTIX7!1F`b4#mu+)gA#!A T^UKFSKK>0$gI@*v&0qik@brd? diff --git a/pagefind/fragment/en_c6b0b7b.pf_fragment b/pagefind/fragment/en_c6b0b7b.pf_fragment deleted file mode 100644 index 64bb1d3c0b6e7b8882e78d78233d1f1b254ed4c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 659 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 literal 0 HcmV?d00001 diff --git a/pagefind/fragment/en_d52ddfa.pf_fragment b/pagefind/fragment/en_d52ddfa.pf_fragment new file mode 100644 index 0000000000000000000000000000000000000000..c6f4a756c00fff9964d1f7448ad249671ba10318 GIT binary patch literal 1038 zcmV+p1o8VHiwFP!00002|CLqSZsRr({gr{AWx3f!w@F@#-84nhrcHtD1#M9nG(}l# zC{iUUJKi8bf1|(GFX;itU$eA-|E8=7lUCCapJ<^U196uF*Ek zgfTO9AC)b%UCt)iL^_MF2%GO_&bR9f_i#jcYx*wWW7gJLE~&g38uPCWKVpR+~ESB60MT;J3&S#k0k&UKo`39ElG+nMHpKYpd4u!`q*)Nf}jh!V6V8-w|Y_6uob7 zKKNZ!+7w@aiQDJ#;KJqqpks9i*IzyBNNYGe6DTLq9Oc(teG$FR$vx+hq%N$>}}N z7p(zOP8VP*v{jz}Zl4~HbSF36it9fx^iV6`$ z*27VV0O{UZBSJ`*!x-$p@I-<&1_dgVM+UC1vh+&zD)fZ)R$tN#SI!hntJjjJ)PHj= zNnxoC3hjR)LaCWsjq8+h!15qgyOsL1Fx_}ouoPoY&G4a9J58siJBh$)rMz*XK+c%w zn#XIc7LYB-v1_{FyoAjrR;=JjeB|hUH4NcM%9vETwb)RB@V#K-x2`t8#!KQ@4jM$E zQBs#$l2||%VSuXMVI!qIuq`%xxHnOlJEo9qbNZf#hdd{9=$K!ZuIeJrrk{FF<`UdUaK1BcbdGZ2%g?wi(z=9W1j_8@hCa~vxd+ulVzy%+RQJN=b zNu1ntDwTDHo$W-)BF*)7p=46Uw##C5%3_*SuCf8%)w2>muVuj1z;noST4BAW=vcPH3PFMnH;eci>HTn zgG7vYm6dpAB!rTgWh^H`3sy_RxFT8|tMptX>|A8>Dq^9qX_<*3JJs0!o0D%pGLeZX zgwm{(EJ<~d@fm@7jehy(f3QSM5j*~H`njB7VZGy0#uw~^5HRqVo#tt|6|wKdxXQRX zQfchvk(FZR*{e8@tSk?9AR<^O*bd?qB2Ia>7IBh}CmH@P8E4w^Fjx{B#j=8b6N?|Q zPeqx^TnAVu;<`M(;$=MPv$ryn%0Gbra0;K>=TL4R8PbBWEWHp+r#}nbhfsjfhC3y0 z_~*Nd=P>sy*z_=um9ex?s|@p#|CW{jpttLL&R+Z(@E~y6V@}Coy!tpk&|pi7|9ID zP5x~%pJ?JrDM$f-T57nVoZx2}R1qo&t}YGP8)%=zs+yjMp&q;qqfSrc)k2mRQX3_i z+s11e^O9$B93fXs-CSoZWS8R16SN??EcK zh4(5=mL-mt(xx75H#Q6@<>4U$;GR+kE?yHhWOj1q5lrtIN7Dl4TZpaX=u;*f4bYJ# zIj|H41xpB%5vO|fj-&JtAoUtZOpd1-Crmd%QJX@}OGHkU+vGQiJ%tMAf^0AH1bZ2- zxYDJZHk5tj9>6(RiUM@DLPS>lKMvWAZ7ldz>-XZo1{=LFmb@-s?NdWoPZaisdq4(t ze?7G;>gx%8C09c(c821qlR=sA*^j$j2F~ zFnh@o8COOg9LUg}oyU9KB)#lz?R&x~&bZbe>EMIb(CZr9L4zBTrg<)u=`1f<_lFOE zK49;(1}5s6?(Q?l7ZplS=pCo$;28HDCorsZ)>P|-vvl*aIYS2oEs1{l@4x^5zkjXz z(+Ox(!^>x3fOp$B|81F?k4P|7HrirY%xs^b6uUqUDOrstJ~HUia5WJ)@>QmDX}Ujb zJO<2dCWruQPP5l>iDQReZ&T79XJQ+MKU$;kuGOQ z5z5qqCOKgA94Q6UhNQ+Rborq5!<-qsE|qZTTnd|kGxc5gpRCoJJ#M#_IXd8P zdD}H_d+*w~*N~?R$%~Egdd{DC*}h^fxLO6v>wS$K=&m!CGV#?i3S-<|B)^Q-?W^r# z&<4v7*2Eo*YbN3z$ zh?MlCB&6S4jh*P)O^1RzjKqnxCY-OAW?_K%zi5-Ss^&4timIT>Zb*Z3OMUd{btg)U zplbJbhQOn_9D6%Sv!qwEZka5sJ>*ZOb$c~M6<4QRXPo92roOsj>WSGX6W7zKMDogeI@%J~j)1>AWg7HZ7)*RX*PyUf(40!wFGPzbW z8(Pab1nX_9#Jda6#)GMzNws5%yW8qwDEXDO4s(R_E_1Kv;>Z)XlG@3(EQ%a`9YlaW zk#A`T_A+p?z1#Kd?P3T()L`T&(V-5|jSeqk`{V{~FvPM#8E~?g=tR_S!w(y}e;tvT4wn=|&vhayQ?d7p9ww9eR%B z!Cm@G>T|a$$p*D(uHu`oCBcYxL5E-j`%o3y7yXT^F+bc~P-WaAc(6Lb9Ae|Tv}URc ziloizgSGfl8myMy?XW2Yj_sF@z70fS^Oshn(v@$H{%^kZ+9>&Mrw>=syzLv z5@u3-juR$Lh{bh5Q}R3(X2%)L+AWe$I>KktE2)w*^D(V6{AzEn-x;MDrqsGK#I>w5 z#U}XGF>{gdQz|&kEdGpV<+AtmnRc4SioQ080jz-iVllwRI7=&7e*27Lpdg!Xw$a{h z{-=Lj>>Zr__3_1DK0SLHU5WFe10lGX`az<<-E`cP3GkC0+AG1Yvr-oLO|5B8luX9v zq|g~Yy6v}^AA4rMe?gPEHcCCPYau<}eZC6I1;?O0ziU93&-YsBySq>4(04t$^+64G z;vNIur@O0okt+=+Zr?4wCy!S0xqJ7(d}VDAT62Ro*51xa8SKq>9;LU0Gk2HQ^p`@(1AtfPeE zr+A6LrGCaSJgf5UdQ{{0tDnzpJbJBWKX1;|*|*VF%<~=;Kti_}Wn_AjzuXU7JRX-kjC(R2Iis4q>W9=8pKo6eGQwH1%Bm61MvdpF zQFslgnSbg@t|jo%lP8BHHYeB-J@$;;WLpb5@EX+O|M=@Chh4MGe4HA$?=FA0w`<;C hKmO(r@6gw4ZfDg(P56T@@wD+IedvaV(^lG4bUa@7peWDcl_IVGan}<*C2?}~ zh=e5gnps5xEg+$b!?0IIrZ@S^{jkO3ammBDC)1HrtjVi>NNr;A`Su_qoF(^IHR9Q* z@fTiY6U+_frn7ko-4E}u01=zkGlGWR^}Q{W!U=V z;jibY8~KkPe)HKkS(c8xpRl)4SM7scc3jCB_xX*GAviUy1NrE;C$Yo}1k{P0ZQ+4j z!2*Za*yc=5#3hk9Yt1z3xS$oepeSZsEG^2Z42#6TAg7j zT1ws3G7`Qn7D6Jwa!I3NfXYD8iZqa*!j3tlQn8KuEap^m z;#5j@`{cO{vPr;(tIy6*IT6n`z}rmLI*deJp}dmS6%d-$8i<}NA6&K*`r5>y_Dv&P zCdn5zsF^AfT=v>5q6_x5ozGE696(+q^9=;y3;8;>gnMY@ul)H4-=8Y^8rYbu1rpKll!VuD%cH+KE0U`Vh&~Q^aw=62T`yx-nGI$cVrx zo7(prH}HbQZ#eRu)<-ha-~S@-FVQ0Yho7Q}Qw}0^3Wt(~M9FlaOzx1J2%fZK?t}}| zZI4{s5%S<53=Szfswg!_q25Ye(Hk01`VH5^NeH7k9 zRWwUxrJOZO^o>tbw6qb_zOE|kQWvB&G$ZWoG58=PbPZ=n-c%OXVEu)yVS{C-v5#Ud zcl1XZV1=4nJOBh1N87QzO7S38*#>uf2ZJ$lX}Y_b+K@ez7YhzLqh#0Vt;=ZAJMrX3 z&M|LMP}D9mO7@I1*?K#C&9s@?>+b~L6LxNw*XS~TF?-|bY(d2}dTB2S06}n8=WQ#6sx{zXu&ivRMW7@?M!coj>Q{>ssyFyQV8%hi0rfsMu>_|s-z+%*f z^n%u2QviSbjgT(uDHGK+u2ox2|A6RvR)qUGGw(og!eongScpSNX42sAE;Ljvt z@5ezD`fvgG-=z`#4x*3+|K zF3dTHe%6WnAylmt!c|&@7FZuY{2q0E{P2gsN*=hwlewOpt`w~&`&-@}2co`73$VVy z*}b*xZh-CT`N@vOs~F#r7=Urt+xKB_GCaODVmRa*P+^ytqRfNsMrHd(E`zau3vLjX z7M3!nF}?gt$wER-HCVgc02@n2llvy_0l)_*DP97bO!}RR-K5{A2h6f`g}XficfC-> zqOWf|WlOEvbk`7B=({=~2RyJ2rwX! zN^|aJ-ykaKaG?yGUu&|v zpJ;QN)fP&b0=?h`ZtDV{dI58ZWiZHV&t9}X0PW}RCEu3Qs=Qr>DLvl9MzosugyxnJ zE1o!d69QskX)Sp}655^&w$w>zMdjeD>L#!kM+#iiQX5^;P;9b;WL81$#~A;P5MsakwYU zT9Gag?gT~>lP<7`Lg~R#(@00z>w~Yvtso7GzY%gR@lk+n<#FpKi6e$-Ngv_NBb0p- z+hWwEgcC756kq?RYddE0VAS8sJ?9%=N8&G*C42%spsn)6yO`noUWt}54`42flF05>s6p}k$1f@yhB>C6NaNJiNS80 zPlDs^9q{?f>gVv?|EsI-%XiOKcCw~vHGpT*6bs94{%|uOP0RH4aPfpqmiUDVSNP5M zuYSjx(hg4kbvxS8aop(e@srcIE7j`T{TQ{Q@5|5cQ`lW##=HWL;{+RbC)haeDqCZp z^6_BDktbh1y+5?MNqO$vf%@{b`+BSU`04SU?x&6J%raYT=k0^7{1?Zc-~M#_CqA!3 IEj1PZ0Gx>tP5=M^ literal 0 HcmV?d00001 diff --git a/pagefind/fragment/en_e2a3c19.pf_fragment b/pagefind/fragment/en_e2a3c19.pf_fragment deleted file mode 100644 index 7f09febc6e4d4512e4ccbc8ec1cb1121ba192406..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2419 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 diff --git a/pagefind/fragment/en_e6718de.pf_fragment b/pagefind/fragment/en_e6718de.pf_fragment new file mode 100644 index 0000000000000000000000000000000000000000..21f0d399babb23d6a8908a62b900795eb4933f9e GIT binary patch literal 999 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 M0A>w*{IeXwnqeq6jF7 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 diff --git a/pagefind/fragment/en_f03e848.pf_fragment b/pagefind/fragment/en_f03e848.pf_fragment deleted file mode 100644 index cb33fe617ffdda2516afee6804094beb9df5353d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1000 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 F002r#W6b~n literal 0 HcmV?d00001 diff --git a/pagefind/fragment/en_fa1f5f5.pf_fragment b/pagefind/fragment/en_fa1f5f5.pf_fragment new file mode 100644 index 0000000000000000000000000000000000000000..4a47d7f1f40314d788bc960d0e7d96157cc213b0 GIT binary patch literal 572 zcmV-C0>k|uiwFP!00002|CN+WZ`&{ofd2~NQwuoGx+j_*h9T>KUDhIN3k<^$C^8)r zvn5TE;|xLm`zXuHYjcL(C_X+?q$nenSdhx+xy(07W23J*Qo@d?4v zQjJKZQD{sGLggIj(1Q`qwc6%TXj{9OD3lCRC~z%#S;7K+i>NwQ=f)nSmfhJ{y`mg* zs7QV1_<{OQ)CDaYD?DlC&fTqtyFPPO={Dp&0)RFhX99OofQO$3VTM26!h3YmQm2L- z3(-{miLlK;NKY%|ghngwdx*&3lg{9?K}iL1%C;oFdblo7ETAW3T^m2D4{Vxtm2lWj zbI)UUku~cl6Jn#oVMhYw(VRk}<_zS~974Jo-uEN?FV^fZ@(_8u7PYA`j%D9-jOyKU z^Mga;vgjoga^WXdk5olgH~TRPN(6tu7lW=)L$x??}zitw&u#P`Qc@?tdEX}<( zEPGs^E3DG8n?W*pwoQ*f&wqnLHGMIoyHo7L-@M#@+x`NH K!EI<@1pokNN)T%R literal 0 HcmV?d00001 diff --git a/pagefind/fragment/en_fd44841.pf_fragment b/pagefind/fragment/en_fd44841.pf_fragment deleted file mode 100644 index e510e528a32aa66926fe8a1044ac9590d6a07124..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2729 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 H6EXk*^4FpX diff --git a/pagefind/index/en_1519ec9.pf_index b/pagefind/index/en_1519ec9.pf_index new file mode 100644 index 0000000000000000000000000000000000000000..737c3b8bd74daf4aad06377233543faf1f3dd1ae GIT binary patch literal 37482 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 Kzmt8P{Qv;OhwmBy literal 0 HcmV?d00001 diff --git a/pagefind/index/en_44127cd.pf_index b/pagefind/index/en_44127cd.pf_index deleted file mode 100644 index 40cd0b799cb42af26241d8dc46db44bc128a3cf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1868 zcmV-S2ebGeiwFP!00002|8-Vta8=b6cJK4Jj|6!H!}?+<35g-aAhn%#Zd4)-NbLg| zht^7i#c=P*JGnPE_d*gF&0PsmDTJU&h|ws;5i`mZrLVNpminAR8R_8AqE4}fj?~tv zbf&aU>x`~_Zi4v3nKN_FT5IobugAC6K8f0TudcBzwkZ~kWkxI5>x!paTJB?qBLr2! zVe@w9@$B9RQ73Yj@tnR0xlnn~A2L;onXY5Hwa+Y%K^=xV$@D#=9^{ySB}bR>6+1;N zp$Lu9Gf;OzwL;ws^%JPqSlwq3=vAmns28CA0rg+DWq%$!BN3WQYv~^P1^t%(LLWed zpq4`YUJij)(BFlwf%c#eK>r;2IP_`gk6;zBD+oCp9xW8~YiK>xB-HazZ$teHT0VQqxA@FYmuSakS;jbgS4dDTV zk0X2$xzF&NeG$r~LP_~*`VMu|9szucj?r1DE1+zsIZ(Git%I6?dKS7Fx*hsn=nr_V zDMuMCqe@ywHPpoOc8H>szAeH-oM%|DhU$2}DR2`nkk>4xg{Hpc^nDtnKhit&AOC>) zP+wwNWOiie0j9+Qluu97&*%hG$>`OKVGWnS+Fk~0E394Ru(rV(gf&z_=E!G_xAjo> zLp=$-T#^Lc0Nn=tI4m31Be0%eDjo2dwS=O?^kaIFgc`+yCfKm{M+PauwA8rJP0V!d zKsg$6RgkG}EzEbG(vj6`~H~TCrrynt`9Pn#WL9H}IFVkuIv!oW`&mp`7;V(*%5?b|c=@?mZ zhd7&|QF??<`Xwk8XQ47ot4zg~GOaej6;m10E#|9;&M~doC1s>VBsmjDDq;N;wub#R z*o|-w!g)y=+=R6lYA#e7>K>>8sAJH1Oy4lTYnZ-i-cp6z{mJnIrVT=+D``1Z3o)80 zDN|vzD?%aarxALLo-@Uwx9K8O*!OfHR1s8}-{3buRY85rC&0MhxTpQz{Tp-ydM)%F z&>NxSe%JpBmgRR{9<1A7ZGg2IRvK16tcPIzaHazn`Tf1#Z^bn12VozCJqi0L?3ZA_ z3HvPUb8td%3gBD^ry9;}aJIwAz}W$363(CCoQ3lq+#uWqZ~^xVa4X?@aQoqoz&!%@ zDBM@zo`8E2?ptvGhk!;Pguns>iV;|eKsN&W5ZI5v%Ltr6;B^GvN6P9XR@1WzIOE`t9=@I!>=BXl)FB?v7+=z4^~#qPt~CWZ#7)Lhn`q1`Z#31?g;{O1HktBTL|fuBa**46ZG#tW zj;E(By~ZM)I>hb1G2M}hw|dF?WIUa?gjbZ^>BTzI$(CBLRd&uchER+XpE4wB>t{@N zWqlT1s_PR+{Nv1g$R6jlZD~x#+gc^6#@MCf@;POU^!j) z-sP48|I*u%;dv(8t2ox}CF9bcMO-0uWm;y`=egdfQ?;ELW08Ggs_T|(*z4?-aq1(< zoTxN+g!={pDQR_?111@PGy;1$+TEDw=ltGsf4saZD7!02rc4snG1&XzRwH;3;cJjn zgWOkSn{xz#F{Wa!pffTyS?0okj65@Gk3fAMY86zUv}kV`++A=dj5`Sl%(!lb;AdhR zOtGI~ue-IS%_O3zw-`!>_gfNtJl-k@RpQ*!(7%@cl%>znBy<{@q2-2L7m=|jqju#U zx$gGPJR|ayA=FzzJqQI5iXv2p&=5igBy|EB?dZs46XGurZ$;VIW^_K8>axp(wU<;w zSyigb(6mY>@FkZ9jRUdnj+A(B{&SFX7&%9IbN5zRc>@>IZ@6x%XUK~QS97F}s+yao zdLFHf#gbk}hs0MPSyOL7y~$K)K2I6;$d*StYHKr`D_iVE9G&VJm$hpRz&Z1aB!tM5 zRbvmoKe;E9{bz#P%+XJaaS<%E%8M z7I}lI)a^zb+AU&@5#RB}foT!yt41E{nOS|nh))gnW>2BB*+b|;_SX;U=8pkm=^g7q G3IG7qbd%`- diff --git a/pagefind/index/en_512d780.pf_index b/pagefind/index/en_512d780.pf_index new file mode 100644 index 0000000000000000000000000000000000000000..ba60a6920b64a21d69b1342656542df95b957bd8 GIT binary patch literal 36615 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 z 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 WK8C_3&J6(cQU4#dUafx){r~`wqhlEW diff --git a/pagefind/index/en_98f2cba.pf_index b/pagefind/index/en_98f2cba.pf_index new file mode 100644 index 0000000000000000000000000000000000000000..6faf71e784eb30d5b9261d5f412ec56734694ca6 GIT binary patch literal 38312 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 *I#Q>272Ojf9|zN^1HFM*LDuH8=7e+5?-w@%gUg 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 Id87yd04X@lBLDyZ literal 0 HcmV?d00001 diff --git a/pagefind/index/en_a279613.pf_index b/pagefind/index/en_a279613.pf_index deleted file mode 100644 index f4c1521c3616e166078cae10d949726f4cda0ad9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38428 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 literal 0 HcmV?d00001 diff --git a/pagefind/index/en_b8c6aac.pf_index b/pagefind/index/en_b8c6aac.pf_index deleted file mode 100644 index c8932aa120c939f7b971536f5e77eb41d285cf1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37779 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 diff --git a/pagefind/index/en_c6dc2e8.pf_index b/pagefind/index/en_c6dc2e8.pf_index new file mode 100644 index 0000000000000000000000000000000000000000..e173bcce59059430d9adab7520b508facf9cff9e GIT binary patch literal 37786 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π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 literal 0 HcmV?d00001 diff --git a/seo/indexing/index.html b/seo/indexing/index.html index f2102d0d1..1d438265b 100644 --- a/seo/indexing/index.html +++ b/seo/indexing/index.html @@ -1 +1 @@ -Indexing | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

SEO

Indexing

Optimizing Adobe Commerce storefronts on Edge Delivery Services for search engines requires guidance. The general recommendations provided here are inspired by customers and partners who have built storefront projects on Edge Delivery Services.

The following best practices are designed to help you ensure that your site is indexed correctly by search engines.

Canonical URLs

  • When product detail pages (PDPs) have multiple URLs, set a consistent canonical URL for each product.
  • Make sure that canonical URLs do not point to redirects (301).

Configurable products

For configurable products, ensure that the canonical URL is set to the parent product URL. This is important because Google might index the child product URLs, which can lead to duplicate content issues.

Folder mapping

When using folder mapping for Commerce pages (PDP, PLP) ensure that the server-side rendered response contains metadata that allows Google to differentiate pages.

Folder-mapped pages (without using bulk metadata) all look the same and Google might classify them as duplicate and not index them, despite different canonical URLs as Google considers canonical URLs a hint and not an absolute value.

URL format of catalog pages

By default, the boilerplate uses folder mapping for product detail pages (PDP) and dedicated pages for product list pages (PLP). If your catalog has a large amount of PLPs, it might make sense to also use folder mapping for PLPs. A low number of PDPs or PLPs could justify creating dedicated pages for each.

The URL format for folder mapped PDPs looks like this:

/products/{urlKey}/{sku}

This is to include the SEO relevant urlKey parameter and the SKU which is needed to perform Catalog Service queries. Feel free to customize the format as needed. You might need to do advanced customization on the CDN.

Multi-store setups

For multi-store setups or stores supporting multiple locales:

  • Verify a correct hreflang setup. You can validate using the hreflang Tags Testing Tool

  • Verify that the store code is part of the URL for every Catalog Service or Live Search request. This is required because Google caches Catalog Service responses without considering headers. Not adding the store code to the URL might lead to Google indexing the wrong data.

Redirects

Ensure proper redirects are set up using the redirects sheet or through your CDN.

  • Fallbacks for any potential URL changes (for example, product URLs or missing .html suffixes)
  • Redirects that are set up in Adobe Commerce

Sitemaps

  • Submit new sitemaps through Google Search Console (Google takes a while to detect new sitemaps).
  • If your site is using more than one sitemap, reference all sitemaps in your site’s robots.txt file.
  • Ensure that all sitemaps are valid using the hreflang Tags Testing Tool.

Other

  • You can validate indexing using Google Search Console by inspecting the markup of the crawl to see if all important information were tracked.
  • Transactional pages (for example, cart, checkout, and account) should not be indexed.
  • Staging or any non-production environments must not be indexed. Once indexed, URLs from a staging environment can reduce traffic to the production environment. It might take a significant amount of time to remove staging URLs from the Google index.
\ No newline at end of file +Indexing | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

SEO

Indexing

Optimizing Adobe Commerce storefronts on Edge Delivery Services for search engines requires guidance. The general recommendations provided here are inspired by customers and partners who have built storefront projects on Edge Delivery Services.

The following best practices are designed to help you ensure that your site is indexed correctly by search engines.

Canonical URLs

  • When product detail pages (PDPs) have multiple URLs, set a consistent canonical URL for each product.
  • Make sure that canonical URLs do not point to redirects (301).

Configurable products

For configurable products, ensure that the canonical URL is set to the parent product URL. This is important because Google might index the child product URLs, which can lead to duplicate content issues.

Folder mapping

When using folder mapping for Commerce pages (PDP, PLP) ensure that the server-side rendered response contains metadata that allows Google to differentiate pages.

Folder-mapped pages (without using bulk metadata) all look the same and Google might classify them as duplicate and not index them, despite different canonical URLs as Google considers canonical URLs a hint and not an absolute value.

URL format of catalog pages

By default, the boilerplate uses folder mapping for product detail pages (PDP) and dedicated pages for product list pages (PLP). If your catalog has a large amount of PLPs, it might make sense to also use folder mapping for PLPs. A low number of PDPs or PLPs could justify creating dedicated pages for each.

The URL format for folder mapped PDPs looks like this:

/products/{urlKey}/{sku}

This is to include the SEO relevant urlKey parameter and the SKU which is needed to perform Catalog Service queries. Feel free to customize the format as needed. You might need to do advanced customization on the CDN.

Multi-store setups

For multi-store setups or stores supporting multiple locales:

  • Verify a correct hreflang setup. You can validate using the hreflang Tags Testing Tool

  • Verify that the store code is part of the URL for every Catalog Service or Live Search request. This is required because Google caches Catalog Service responses without considering headers. Not adding the store code to the URL might lead to Google indexing the wrong data.

Redirects

Ensure proper redirects are set up using the redirects sheet or through your CDN.

  • Fallbacks for any potential URL changes (for example, product URLs or missing .html suffixes)
  • Redirects that are set up in Adobe Commerce

Sitemaps

  • Submit new sitemaps through Google Search Console (Google takes a while to detect new sitemaps).
  • If your site is using more than one sitemap, reference all sitemaps in your site’s robots.txt file.
  • Ensure that all sitemaps are valid using the hreflang Tags Testing Tool.

Other

  • You can validate indexing using Google Search Console by inspecting the markup of the crawl to see if all important information were tracked.
  • Transactional pages (for example, cart, checkout, and account) should not be indexed.
  • Staging or any non-production environments must not be indexed. Once indexed, URLs from a staging environment can reduce traffic to the production environment. It might take a significant amount of time to remove staging URLs from the Google index.
\ No newline at end of file diff --git a/seo/metadata/index.html b/seo/metadata/index.html index 0f8d64550..89f56e9d6 100644 --- a/seo/metadata/index.html +++ b/seo/metadata/index.html @@ -1 +1 @@ -Metadata | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

SEO

Metadata

Adobe recommends uploading product metadata into Edge Delivery Services so that it can be rendered server-side on product detail pages. This is important so that Google Merchant Center can reliably verify entries from your product sheet. Also, social media sites, which don’t usually parse JavaScript, can leverage this metadata to display rich previews of your product page links.

Verify that all pages, especially catalog pages (PDP and PLP), contain the following metadata:

TypeProperties
Document titletitle
Meta tagsdescription, keywords, og:type, og:title, og:description, og:url, og:image, og:image:secure_url, og:product:price:amount, og:product:price:currency
Schema.org data (JSON-LD)WebSite, Product, AggregateRating, Rating, BreadcrumbList

Schema.org data (JSON-LD)

JavaScript Object Notation for Linked Data (JSON-LD) is a structured data format that helps search engines understand the content of your web pages more explicitly. It is typically added as a script tag in the <head> of your HTML document.

Adobe Commerce storefronts on Edge Delivery Services should include schema.org annotations to expose product data to search engines. This data should be included on all Commerce pages, especially PDPs and PLPs.

You should compare the data available on the site before migrating to Edge Delivery Services to ensure that SKUs for all product variants are included. Use the Rich Results Test to validate the schema.org annotations. The PDP drop-in component in the boilerplate contains an example for JSON-LD data.

Generate metadata

You can use the PDP Metadata Generator tool to automate the process of generating all recommended metadata. The tool fetches product data from the Catalog Service, processes it, and generates a metadata spreadsheet in .xslx format. The spreadsheet can be used for the bulk metadata feature in Edge Delivery Services.

To generate metadata using the PDP Metadata Generator tool:

  1. Navigate to the tools/pdp-metadata/ directory in your local project.

  2. Install dependencies.

    Terminal window
    npm install
  3. Run the tool and generate a file named metadata.xlsx in the project directory.

    Terminal window
    npm start

The resulting metadata.xlsx file contains all recommended metadata for all of your products. See the bulk metadata documentation for instructions on how to upload the generated metadata file to Edge Delivery Services.

\ No newline at end of file +Metadata | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

SEO

Metadata

Adobe recommends uploading product metadata into Edge Delivery Services so that it can be rendered server-side on product detail pages. This is important so that Google Merchant Center can reliably verify entries from your product sheet. Also, social media sites, which don’t usually parse JavaScript, can leverage this metadata to display rich previews of your product page links.

Verify that all pages, especially catalog pages (PDP and PLP), contain the following metadata:

TypeProperties
Document titletitle
Meta tagsdescription, keywords, og:type, og:title, og:description, og:url, og:image, og:image:secure_url, og:product:price:amount, og:product:price:currency
Schema.org data (JSON-LD)WebSite, Product, AggregateRating, Rating, BreadcrumbList

Schema.org data (JSON-LD)

JavaScript Object Notation for Linked Data (JSON-LD) is a structured data format that helps search engines understand the content of your web pages more explicitly. It is typically added as a script tag in the <head> of your HTML document.

Adobe Commerce storefronts on Edge Delivery Services should include schema.org annotations to expose product data to search engines. This data should be included on all Commerce pages, especially PDPs and PLPs.

You should compare the data available on the site before migrating to Edge Delivery Services to ensure that SKUs for all product variants are included. Use the Rich Results Test to validate the schema.org annotations. The PDP drop-in component in the boilerplate contains an example for JSON-LD data.

Generate metadata

You can use the PDP Metadata Generator tool to automate the process of generating all recommended metadata. The tool fetches product data from the Catalog Service, processes it, and generates a metadata spreadsheet in .xslx format. The spreadsheet can be used for the bulk metadata feature in Edge Delivery Services.

To generate metadata using the PDP Metadata Generator tool:

  1. Navigate to the tools/pdp-metadata/ directory in your local project.

  2. Install dependencies.

    Terminal window
    npm install
  3. Run the tool and generate a file named metadata.xlsx in the project directory.

    Terminal window
    npm start

The resulting metadata.xlsx file contains all recommended metadata for all of your products. See the bulk metadata documentation for instructions on how to upload the generated metadata file to Edge Delivery Services.

\ No newline at end of file diff --git a/setup/commerce-configuration/index.html b/setup/commerce-configuration/index.html index 662932193..26585010f 100644 --- a/setup/commerce-configuration/index.html +++ b/setup/commerce-configuration/index.html @@ -1,4 +1,4 @@ Storefront configuration | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Setup

Storefront configuration

In this section, you’ll learn how Commerce blocks in your storefront connect to a Commerce backend using values from the configs.xlsx in the root of your SharePoint content directory.

In the Create your storefront tutorial, the sample content archive provided you with a configs.xlsx file in the root folder. This file is used to expose Adobe Commerce configuration parameters to the frontend blocks.

When implementing your own project, you must update the configuration values with:

  • The Catalog Service header values specific to your Adobe Commerce backend.

  • The configuration values with the core Adobe Commerce GraphQL endpoint that you configured as part of the content delivery network (CDN) setup.

Vocabulary

Storefront configuration

The configs.xlsx file contains the connection settings for your Commerce blocks. Each row in the file contains a key and a value that corresponds to a specific setting in your Commerce backend. The key is used to retrieve the value from the configs.xlsx file and is used to connect your Commerce blocks to your Commerce backend.

default values

By default, the values in the configs.xlsx file are from the boilerplate’s sample backend to ensure everything works out of the box. But when it comes time to connect your own backend, you need to know what each key means so you can update it with the correct value from your own Commerce instance.

getConfigValue function

The getConfigValue function is a helper function that retrieves the value from the configs.xlsx file using the key as an argument. The getConfigValue function is used to connect your Commerce blocks to your Commerce backend.

Commerce block connection

To connect a Commerce block to your Commerce backend, you’ll use the getConfigValue function to set the Services endpoint and GraphQL headers for the block. The Services endpoint is the URL for the block’s GraphQL endpoint, and the GraphQL headers are the headers required to make a request to the endpoint.

Examples

You can find the configs.xlsx file in your content drive by clicking on the mountpoint link in your project’s fstab.yaml file. You should see the configs.xlsx file at the root of the SharePoint directory. Open the file to view the connection keys and values of the sample backend. They should look similar (but not exact) to the following:

#KeyValue
1commerce-endpointhttps://catalog-service-sandbox.adobe.io/graphql
2commerce-core-endpointhttps://mystorefront.com/graphql
3commerce-environment-id7cb935fd-d3bc-487b-9a2f-e5965c30f2a1
4commerce-root-category-id2
5commerce-website-codebase
6commerce-store-codemain_website_store
7commerce-store-view-codedefault
8commerce-customer-groupd0b8ea36fca097dc92c02b1d104e6f41099184cb
9commerce-x-api-keya6b4e2f69a4a4267a8f423c8caaf6a47

Each key is described below with links to more details. The value for each key is specific to your Commerce instance and can be provided by your Commerce administrator.

  1. commerce-endpoint: (read-only) Services GraphQL endpoint optimized for Catalog Service, Live Search, and Product Recommendations. See Catalog Service for details.

  2. commerce-core-endpoint: (read/write) Core GraphQL endpoint for a variety of queries and mutations. See Adobe Commerce GraphQL API for details.

  3. commerce-environment-id: Connects the storefront to the cloud instance that serves it. See Cloud Environment overview for details.

  4. commerce-root-category-id: Determines the products in the storefront’s main menu. See Step 1: Create root categories, Catagories overview, and Root category and hierarchy for details.

  5. commerce-website-code: Determines the website to connect to. See Step 2: Create websites for details.

  6. commerce-store-code: Determines the store to connect to. See Step 3: Create stores for details.

  7. commerce-store-view-code: Determines the store view to connect to. See Step 4: Create store views and Store views for details.

  8. commerce-customer-group: Determines product discounts and tax classes. See Customer groups and the Create Customer Groups video for details.

  9. commerce-x-api-key: Provides access to SaaS storefront services (Catalog Service, Live Search, and Product Recommendations). See Commerce Services Connector for details.

Step-by-step

We’ll use the product-details Commerce block as an example of where and how to updated the connection settings for your Commerce blocks when switching to your own Commerce backend.

Import the getConfigValue function.

First, import the getConfigValue function from your boilerplate’s scripts/configs.js file. The getConfigValue function takes a string that matches one of the keys from the configs.xlsx file and returns the corresponding value.

import { getConfigValue } from '../../scripts/configs.js';

Set the endpoint and fetch headers.

Within the Commerce block’s decorate function, use the getConfigValue function to set the Services endpoint and GraphQL headers for the drop-in component block.

export default async function decorate(block) {
// Initialize Drop-in components
initializers.register(product.initialize, {});
// Set Fetch Endpoint (Service)
product.setEndpoint(await getConfigValue('commerce-endpoint'));
// Set Fetch Headers (Service)
product.setFetchGraphQlHeaders({
'Content-Type': 'application/json',
'Magento-Environment-Id': await getConfigValue('commerce-environment-id'),
'Magento-Website-Code': await getConfigValue('commerce-website-code'),
'Magento-Store-View-Code': await getConfigValue('commerce-store-view-code'),
'Magento-Store-Code': await getConfigValue('commerce-store-code'),
'Magento-Customer-Group': await getConfigValue('commerce-customer-group'),
'x-api-key': await getConfigValue('commerce-x-api-key'),
});
-
//more...
}

Summary

That’s all it takes to connect a drop-in component Commerce block to your Commerce backend settings. You’ll use the same configuration keys to connect any custom Commerce blocks or new Commerce blocks provided in later releases.

\ No newline at end of file +
//more...
}

Summary

That’s all it takes to connect a drop-in component Commerce block to your Commerce backend settings. You’ll use the same configuration keys to connect any custom Commerce blocks or new Commerce blocks provided in later releases.

\ No newline at end of file diff --git a/setup/content-delivery-network/index.html b/setup/content-delivery-network/index.html index 293d5af6e..01a90e9e2 100644 --- a/setup/content-delivery-network/index.html +++ b/setup/content-delivery-network/index.html @@ -6,4 +6,4 @@
}
}

pass

In the pass snippet, we set the correct host URL to fetch from depending on the backend that was selected in the recv snippet.

If it’s not a request to Adobe Commerce, we skip (return pass will invoke fetch) the rest of the default pass VCL.

Type: pass

Priority: 30

if (req.backend == F_edge_delivery) {
set bereq.http.Host = "main--aem-boilerplate-commerce--hlxsites.hlx.live";
set bereq.http.X-BYO-CDN-Type = "fastly";
set bereq.http.X-Push-Invalidation = "enabled";
}
if (!req.http.x-commerce) {
return(pass);
}

miss

Same as pass.

Type: miss

Priority: 30

if (req.backend == F_edge_delivery) {
set bereq.http.Host = "main--aem-boilerplate-commerce--hlxsites.hlx.live";
set bereq.http.X-BYO-CDN-Type = "fastly";
set bereq.http.X-Push-Invalidation = "enabled";
}
if (!req.http.x-commerce) {
return(fetch);
}

fetch

If fetching from a backend other than Adobe Commerce, skip the rest of the default deliver VCL because this is only relevant to Adobe Commerce backends.

Type: fetch

Priority: 30

if (!req.http.x-commerce) {
unset beresp.http.Set-Cookie;
return(deliver);
}

deliver

This comes from the Edge Delivery Services Fastly setup.

Type: deliver

Priority: 30

if (req.backend == F_edge_delivery) {
unset resp.http.Age;
-
if (req.url.path !~ "\.plain\.html$") {
unset resp.http.X-Robots-Tag;
}
}

Optional configuration

The following are optional configurations that can be added to the VCL snippets to handle specific use cases.

URL rewrites

Be aware that URLs in Edge Delivery Services may only contain a-z, 0-9, and the dash (-) character (see Document naming). You may need to create a CDN rule to rewrite/remove these characters.

As an example, consider one possible case where this applies with login referrer links. Luma may redirect to a page like /login/referrer/<base64string>. If the login page is implemented in Edge Delivery Services (with a Luma Bridge) and the base 64 string contains unsupported characters, this page will 404. Since the base64 part is only needed on the Edge Delivery Services client side to handle redirecting after a successful sign-in, this could be stripped for the request to the Edge Delivery Services backend.

Proxy RUM through the origin to avoid a TLS handshake

Add a new backend called hlx_rum that points to rum.hlx.page. Also, change the Real Use Monitoring (RUM) implementation in aem.js to use a relative path to the origin instead of rum.hlx.page.

Add the following to the recv snippet:

if (req.url.path ~ "^/\.rum/") {
# AEM Real User Monitoring
set req.backend = F_hlx_rum;
unset req.http.Cookie;
}

Shielding

If you enable shielding in a backend, then conditions like req.backend == F_commerce may not work. For this reason, the snippets above use a header like http.x-commerce that is set/unset, which is then used instead of the direct backend variable.

Compression

In fetch, you can add compression for non-Adobe Commerce resources by adding this snippet to the fetch VCL:

if (!req.http.x-commerce) {
unset beresp.http.Set-Cookie;
if (beresp.http.content-type ~ "(text/|/json|/javascript)") {
if (!beresp.http.Vary ~ "Accept-Encoding") {
set beresp.http.Vary:Accept-Encoding = "";
}
if (req.http.Accept-Encoding == "br") {
set beresp.brotli = true;
} else if (req.http.Accept-Encoding == "gzip") {
set beresp.gzip = true;
}
}
return(deliver);
}

Since the deliver VCL skips all the subsequent steps, the default compression settings are skipped. The snippet above is the same as in the default VCL, but copied again to be applied to responses that are not going to the Adobe Commerce backend.

Failover

We can support automatic failover from Edge Delivery Services to Adobe Commerce Luma pages on a 404 in Edge Delivery Services. To do this, add the following in your custom fetch snippet:

if (req.backend == F_edge && http_status_matches(beresp.status, "404")) {
# See <https://www.fastly.com/documentation/solutions/examples/failover-to-a-secondary-backend/>
set beresp.http.Vary:restarts = ""; # Add restart to vary key
set beresp.cacheable = true; # Errors are not cacheable by default, so enable them
set beresp.ttl = 5s; # Set a short ttl so the unfindable object expires quickly
set beresp.http.do_failover = "yes";
}

Then, in your custom recv snippet:

if (req.http.try-alt-origin) {
set req.backend = F_commerce;
set req.http.x-commerce = "true";
set req.http.restarts = req.restarts; # Use restart value for vary key
set req.http.Fastly-Force-Shield = "1";
}

Factly-Force-Shield may be required to turn on clustering (not related to shielding despite the name).

Flow of EDS request: In recv, hits Edge Delivery Services case, then goes to miss, then goes to fetch, fetch returns 404 and sets retry (as snippet above), and deliver calls restart.

If we are using Fastly shielding, we need to have fastly.ff.visits_this_service == 0 in the deliver snippet, before restart, otherwise it can be that ESI doesn’t work.

if (fastly.ff.visits_this_service == 0 && !req.http.try-alt-origin && resp.http.do_failover == "yes") {
set req.http.try-alt-origin = "1";
set req.url = req.http.Magento-Original-URL;
return (restart);
}

It is not recommended to handle all paths that need to be routed to Luma like this, but still hardcode those that are known, in order to reduce load of 404s on Edge Delivery Services.

API Mesh

API Mesh has a header size limit. You must remove third-party cookies if you’re using API mesh. Add this in the graphql section of recv snippet:

if (req.http.Cookie) {
# Remove all 3rd-party cookies
# API Mesh has a header size limit
set req.http.Cookie = ";" + req.http.Cookie;
set req.http.Cookie = regsuball(req.http.Cookie, "; +", ";");
set req.http.Cookie = regsuball(req.http.Cookie, ";(PHPSESSID|X-Magento-Vary|form_key|private_content_version|mage-messages|persistent_shopping_cart|fastly_geo_store)=", "; \\1=");
set req.http.Cookie = regsuball(req.http.Cookie, ";[^ ][^;]*", "");
set req.http.Cookie = regsuball(req.http.Cookie, "^[; ]+|[; ]+$", "");
if (req.http.cookie ~ "^\\s*$") {
unset req.http.cookie;
}
}

Branch names on staging

You can enable the use of Edge Delivery Services branches on a staging URL (for example, branch1.my-staging.com). Use regex to get the domain name with this addition to the miss snippet:

if (req.backend == F_edge) {
if (req.http.Host ~ "^([^.]+)\\.([^.]+)\\.lovesac\\.com$") {
set bereq.http.Host = re.group.1 + "--your-eds-url.aem.page";
} else {
set bereq.http.Host = "your-eds-url.aem.live";
}
set bereq.http.X-BYO-CDN-Type = "fastly";
set bereq.http.X-Push-Invalidation = "enabled";
}

In the domains configuration, you must use a wildcard. Since the Commerce Admin doesn’t let you do this, you must do it using the Fastly CLI (which also shows the wildcard URL in the Admin).

Maintainance page workaround

The maintainance page can block requests to API Mesh/GraphQL. The solution is to create a VCL snippet with low priority that comes before the maintainance check in VCL and allows GraphQL requests through.

There’s a known issue with mutliple set-cookie headers in API Mesh. See the following snippet for a workaround

if (req.http.x-mesh == "true") {
# There's a bug in API MESH that combines multiple set-cookie headers
# Let's remove these cookies from the response
declare local var.ignored BOOL;
set var.ignored = setcookie.delete_by_name(beresp, "private_content_version");
set var.ignored = setcookie.delete_by_name(beresp, "form_key");
set var.ignored = setcookie.delete_by_name(beresp, "authentication_flag");
set var.ignored = setcookie.delete_by_name(beresp, "dataservices_customer_id");
set var.ignored = setcookie.delete_by_name(beresp, "dataservices_customer_group");
set var.ignored = setcookie.delete_by_name(beresp, "dataservices_cart_id");
return (pass);
}

Commerce configuration

If you are using the VCL to do the APEX redirect (aemshop.netwww.aemshop.net with 801 error), you should do two things in the Adobe Commerce backend:

  1. Disable auto-redirect.
  2. Set the base_url and secure_base_url settings to your domain, including www.

Follow these steps:

  1. Log in to the Adobe Commerce Admin.

  2. Click Stores > Settings > Configuration > General > Web.

  3. Expand the URL options section.

  4. Set Auto-redirect to Base URL to No.

  5. Expand the Base URLs section.

  6. Set the Base URL and Secure Base URL to your domain, including www.

    For example: https://www.aemshop.net/

  7. Expand the Base URLs (Secure) section.

  8. Set the Secure Base URL to your domain, including www.

    For example: https://www.aemshop.net/

  9. Click Save Config.

Edge Delivery Service configuration

To obtain a purge API token for Fastly, you must contact Adobe Commerce Customer Support.

Then, follow the instructions in Setup push invalidation for Fastly. The remaining configuration described on this page is already taken care of by applying the VCL snippets above.

Validation

To validate your CDN setup, use curl requests to check expected responses from the paths you have configured.

Content encoding, surrogate key, and cache

Validate that surrogate key, cache hits, and content encoding are working as expected by requesting an Edge Delivery Services-served asset from your Commerce domain. Ensure you are checking a warm cache by making the request at least twice. The following examples are to a warmed cache.

Here is an example of validation against an Adobe staging environment:

Terminal window
curl -sI -H 'Fastly-Debug: 1' https://www.aemshop.net/scripts/aem.js | grep 'x-cache\|surrogate-key\|cache-control'
content-encoding: gzip
surrogate-key: develop--aem-boilerplate-commerce--hlxsites develop--aem-boilerplate-commerce--hlxsites_code E3hjdgev7F5OyPUD
x-cache: MISS, HIT, HIT, HIT
x-cache-hits: 0, 37, 1, 0
  • content-encoding: Should be gzip or br for things like JS assets and HTML files, which should be encoded from origin.

  • surrogate-key: Should not be text. If the value is text, make sure you have correctly configured the fetch VCL snippet to return deliver for Edge Delivery Servicespaths.

    The reason for this validation step is that the default Commerce Fastly VCL sets this. This overwrites the Edge Delivery Services surrogate key, which is required for cache invalidation to work correctly when a page is re-published.

  • x-cache: Should contain HIT entries. The last entry should be HIT (MISS, HIT, MISS, HIT) is ok.

Also, make sure that you validate gzip encoding is applied to HTML pages:

Terminal window
curl -sI -H 'accept-encoding: gzip, deflate, br, zstd' https://www.aemshop.net | grep content-encoding
content-encoding: gzip
Terminal window
curl -sI -H 'accept-encoding: gzip, deflate, br, zstd' https://www.aemshop.net/index.plain.html | grep content-encoding
content-encoding: gzip

Validate the CDN configuration with the BYOCDN push invalidator tool. Additionally, preview and publish a document and validate that the changes are correctly reflected.

Terminal window
curl -Is --http2 https://www.aemshop.net | grep 'HTTP/2'
HTTP/2 200

Validate that all requests are using HTTP/2 or HTTP/3 connections.

Terminal window
curl -Is -L https://aemshop.net | grep location
location: https://www.aemshop.net/

To validate the APEX redirect, observe the location header returned by a request to the domain without www.

Image optimization

Validate that images are encoded with the expected format. If you get back image/jpeg this indicates an issue, probably Commerce Fastly is rewriting the content type header. You’ll need to validate the VCL snippets.

To validate Edge Delivery Services, ensure you check some content expected to be served from the Edge Delivery Services origin (such as the hero banner).

Terminal window
curl -sI -H "Accept: image/webp" 'https://www.aemshop.net/media_12ddec51160a77274a1111c5c7ec6a80ea5c5c2ef.jpeg?width=2000&format=webply&optimize=medium' | grep 'content-type'
content-type: image/webp

To validate Commerce, ensure you check some content expected to be served from the Edge Delivery Services origin (such as a product image).

Terminal window
curl -sI -H "Accept: image/webp" 'https://www.aemshop.net/media/catalog/product/m/b/mb03-black-0.jpg?quality=80&bg-color=255%2C255%2C255&fit=cover&height=&width=300&auto=webp&crop=false' | grep 'content-type'
content-type: image/webp

Commerce cache

Ensure that GraphQL GET requests result in cache HITs.

Terminal window
curl -sI 'https://www.aemshop.net/graphql?query=query+STORE_CONFIG_QUERY+%7B+storeConfig+%7B+minicart_display%7D+%7D' | grep x-cache
x-cache: HIT
x-cache-hits: 1

Commerce base URL

Ensure that the base URL change is propagated to Catalog Service. You can do this with a query against your Catalog Service API to verify that the URLs for product images contain the APEX domain, including www. This is to prevent a redirect and subsequent load for images not including the APEX domain.

Commerce base URL

Debugging

The full VCL script can be viewed to see which VCL snippet is applied and in which order. In the Commerce Admin, go to Tools (sibling of the VCL Snippets dropdown), select “List all Versions” and click the eye icon of the latest version to view the full generated VCL.

\ No newline at end of file +
if (req.url.path !~ "\.plain\.html$") {
unset resp.http.X-Robots-Tag;
}
}

Optional configuration

The following are optional configurations that can be added to the VCL snippets to handle specific use cases.

URL rewrites

Be aware that URLs in Edge Delivery Services may only contain a-z, 0-9, and the dash (-) character (see Document naming). You may need to create a CDN rule to rewrite/remove these characters.

As an example, consider one possible case where this applies with login referrer links. Luma may redirect to a page like /login/referrer/<base64string>. If the login page is implemented in Edge Delivery Services (with a Luma Bridge) and the base 64 string contains unsupported characters, this page will 404. Since the base64 part is only needed on the Edge Delivery Services client side to handle redirecting after a successful sign-in, this could be stripped for the request to the Edge Delivery Services backend.

Proxy RUM through the origin to avoid a TLS handshake

Add a new backend called hlx_rum that points to rum.hlx.page. Also, change the Real Use Monitoring (RUM) implementation in aem.js to use a relative path to the origin instead of rum.hlx.page.

Add the following to the recv snippet:

if (req.url.path ~ "^/\.rum/") {
# AEM Real User Monitoring
set req.backend = F_hlx_rum;
unset req.http.Cookie;
}

Shielding

If you enable shielding in a backend, then conditions like req.backend == F_commerce may not work. For this reason, the snippets above use a header like http.x-commerce that is set/unset, which is then used instead of the direct backend variable.

Compression

In fetch, you can add compression for non-Adobe Commerce resources by adding this snippet to the fetch VCL:

if (!req.http.x-commerce) {
unset beresp.http.Set-Cookie;
if (beresp.http.content-type ~ "(text/|/json|/javascript)") {
if (!beresp.http.Vary ~ "Accept-Encoding") {
set beresp.http.Vary:Accept-Encoding = "";
}
if (req.http.Accept-Encoding == "br") {
set beresp.brotli = true;
} else if (req.http.Accept-Encoding == "gzip") {
set beresp.gzip = true;
}
}
return(deliver);
}

Since the deliver VCL skips all the subsequent steps, the default compression settings are skipped. The snippet above is the same as in the default VCL, but copied again to be applied to responses that are not going to the Adobe Commerce backend.

Failover

We can support automatic failover from Edge Delivery Services to Adobe Commerce Luma pages on a 404 in Edge Delivery Services. To do this, add the following in your custom fetch snippet:

if (req.backend == F_edge && http_status_matches(beresp.status, "404")) {
# See <https://www.fastly.com/documentation/solutions/examples/failover-to-a-secondary-backend/>
set beresp.http.Vary:restarts = ""; # Add restart to vary key
set beresp.cacheable = true; # Errors are not cacheable by default, so enable them
set beresp.ttl = 5s; # Set a short ttl so the unfindable object expires quickly
set beresp.http.do_failover = "yes";
}

Then, in your custom recv snippet:

if (req.http.try-alt-origin) {
set req.backend = F_commerce;
set req.http.x-commerce = "true";
set req.http.restarts = req.restarts; # Use restart value for vary key
set req.http.Fastly-Force-Shield = "1";
}

Factly-Force-Shield may be required to turn on clustering (not related to shielding despite the name).

Flow of EDS request: In recv, hits Edge Delivery Services case, then goes to miss, then goes to fetch, fetch returns 404 and sets retry (as snippet above), and deliver calls restart.

If we are using Fastly shielding, we need to have fastly.ff.visits_this_service == 0 in the deliver snippet, before restart, otherwise it can be that ESI doesn’t work.

if (fastly.ff.visits_this_service == 0 && !req.http.try-alt-origin && resp.http.do_failover == "yes") {
set req.http.try-alt-origin = "1";
set req.url = req.http.Magento-Original-URL;
return (restart);
}

It is not recommended to handle all paths that need to be routed to Luma like this, but still hardcode those that are known, in order to reduce load of 404s on Edge Delivery Services.

API Mesh

API Mesh has a header size limit. You must remove third-party cookies if you’re using API mesh. Add this in the graphql section of recv snippet:

if (req.http.Cookie) {
# Remove all 3rd-party cookies
# API Mesh has a header size limit
set req.http.Cookie = ";" + req.http.Cookie;
set req.http.Cookie = regsuball(req.http.Cookie, "; +", ";");
set req.http.Cookie = regsuball(req.http.Cookie, ";(PHPSESSID|X-Magento-Vary|form_key|private_content_version|mage-messages|persistent_shopping_cart|fastly_geo_store)=", "; \\1=");
set req.http.Cookie = regsuball(req.http.Cookie, ";[^ ][^;]*", "");
set req.http.Cookie = regsuball(req.http.Cookie, "^[; ]+|[; ]+$", "");
if (req.http.cookie ~ "^\\s*$") {
unset req.http.cookie;
}
}

Branch names on staging

You can enable the use of Edge Delivery Services branches on a staging URL (for example, branch1.my-staging.com). Use regex to get the domain name with this addition to the miss snippet:

if (req.backend == F_edge) {
if (req.http.Host ~ "^([^.]+)\\.([^.]+)\\.lovesac\\.com$") {
set bereq.http.Host = re.group.1 + "--your-eds-url.aem.page";
} else {
set bereq.http.Host = "your-eds-url.aem.live";
}
set bereq.http.X-BYO-CDN-Type = "fastly";
set bereq.http.X-Push-Invalidation = "enabled";
}

In the domains configuration, you must use a wildcard. Since the Commerce Admin doesn’t let you do this, you must do it using the Fastly CLI (which also shows the wildcard URL in the Admin).

Maintainance page workaround

The maintainance page can block requests to API Mesh/GraphQL. The solution is to create a VCL snippet with low priority that comes before the maintainance check in VCL and allows GraphQL requests through.

There’s a known issue with mutliple set-cookie headers in API Mesh. See the following snippet for a workaround

if (req.http.x-mesh == "true") {
# There's a bug in API MESH that combines multiple set-cookie headers
# Let's remove these cookies from the response
declare local var.ignored BOOL;
set var.ignored = setcookie.delete_by_name(beresp, "private_content_version");
set var.ignored = setcookie.delete_by_name(beresp, "form_key");
set var.ignored = setcookie.delete_by_name(beresp, "authentication_flag");
set var.ignored = setcookie.delete_by_name(beresp, "dataservices_customer_id");
set var.ignored = setcookie.delete_by_name(beresp, "dataservices_customer_group");
set var.ignored = setcookie.delete_by_name(beresp, "dataservices_cart_id");
return (pass);
}

Commerce configuration

If you are using the VCL to do the APEX redirect (aemshop.netwww.aemshop.net with 801 error), you should do two things in the Adobe Commerce backend:

  1. Disable auto-redirect.
  2. Set the base_url and secure_base_url settings to your domain, including www.

Follow these steps:

  1. Log in to the Adobe Commerce Admin.

  2. Click Stores > Settings > Configuration > General > Web.

  3. Expand the URL options section.

  4. Set Auto-redirect to Base URL to No.

  5. Expand the Base URLs section.

  6. Set the Base URL and Secure Base URL to your domain, including www.

    For example: https://www.aemshop.net/

  7. Expand the Base URLs (Secure) section.

  8. Set the Secure Base URL to your domain, including www.

    For example: https://www.aemshop.net/

  9. Click Save Config.

Edge Delivery Service configuration

To obtain a purge API token for Fastly, you must contact Adobe Commerce Customer Support.

Then, follow the instructions in Setup push invalidation for Fastly. The remaining configuration described on this page is already taken care of by applying the VCL snippets above.

Validation

To validate your CDN setup, use curl requests to check expected responses from the paths you have configured.

Content encoding, surrogate key, and cache

Validate that surrogate key, cache hits, and content encoding are working as expected by requesting an Edge Delivery Services-served asset from your Commerce domain. Ensure you are checking a warm cache by making the request at least twice. The following examples are to a warmed cache.

Here is an example of validation against an Adobe staging environment:

Terminal window
curl -sI -H 'Fastly-Debug: 1' https://www.aemshop.net/scripts/aem.js | grep 'x-cache\|surrogate-key\|cache-control'
content-encoding: gzip
surrogate-key: develop--aem-boilerplate-commerce--hlxsites develop--aem-boilerplate-commerce--hlxsites_code E3hjdgev7F5OyPUD
x-cache: MISS, HIT, HIT, HIT
x-cache-hits: 0, 37, 1, 0
  • content-encoding: Should be gzip or br for things like JS assets and HTML files, which should be encoded from origin.

  • surrogate-key: Should not be text. If the value is text, make sure you have correctly configured the fetch VCL snippet to return deliver for Edge Delivery Servicespaths.

    The reason for this validation step is that the default Commerce Fastly VCL sets this. This overwrites the Edge Delivery Services surrogate key, which is required for cache invalidation to work correctly when a page is re-published.

  • x-cache: Should contain HIT entries. The last entry should be HIT (MISS, HIT, MISS, HIT) is ok.

Also, make sure that you validate gzip encoding is applied to HTML pages:

Terminal window
curl -sI -H 'accept-encoding: gzip, deflate, br, zstd' https://www.aemshop.net | grep content-encoding
content-encoding: gzip
Terminal window
curl -sI -H 'accept-encoding: gzip, deflate, br, zstd' https://www.aemshop.net/index.plain.html | grep content-encoding
content-encoding: gzip

Validate the CDN configuration with the BYOCDN push invalidator tool. Additionally, preview and publish a document and validate that the changes are correctly reflected.

Terminal window
curl -Is --http2 https://www.aemshop.net | grep 'HTTP/2'
HTTP/2 200

Validate that all requests are using HTTP/2 or HTTP/3 connections.

Terminal window
curl -Is -L https://aemshop.net | grep location
location: https://www.aemshop.net/

To validate the APEX redirect, observe the location header returned by a request to the domain without www.

Image optimization

Validate that images are encoded with the expected format. If you get back image/jpeg this indicates an issue, probably Commerce Fastly is rewriting the content type header. You’ll need to validate the VCL snippets.

To validate Edge Delivery Services, ensure you check some content expected to be served from the Edge Delivery Services origin (such as the hero banner).

Terminal window
curl -sI -H "Accept: image/webp" 'https://www.aemshop.net/media_12ddec51160a77274a1111c5c7ec6a80ea5c5c2ef.jpeg?width=2000&format=webply&optimize=medium' | grep 'content-type'
content-type: image/webp

To validate Commerce, ensure you check some content expected to be served from the Edge Delivery Services origin (such as a product image).

Terminal window
curl -sI -H "Accept: image/webp" 'https://www.aemshop.net/media/catalog/product/m/b/mb03-black-0.jpg?quality=80&bg-color=255%2C255%2C255&fit=cover&height=&width=300&auto=webp&crop=false' | grep 'content-type'
content-type: image/webp

Commerce cache

Ensure that GraphQL GET requests result in cache HITs.

Terminal window
curl -sI 'https://www.aemshop.net/graphql?query=query+STORE_CONFIG_QUERY+%7B+storeConfig+%7B+minicart_display%7D+%7D' | grep x-cache
x-cache: HIT
x-cache-hits: 1

Commerce base URL

Ensure that the base URL change is propagated to Catalog Service. You can do this with a query against your Catalog Service API to verify that the URLs for product images contain the APEX domain, including www. This is to prevent a redirect and subsequent load for images not including the APEX domain.

Commerce base URL

Debugging

The full VCL script can be viewed to see which VCL snippet is applied and in which order. In the Commerce Admin, go to Tools (sibling of the VCL Snippets dropdown), select “List all Versions” and click the eye icon of the latest version to view the full generated VCL.

\ No newline at end of file diff --git a/setup/index.html b/setup/index.html index 032d80c24..7565cefe9 100644 --- a/setup/index.html +++ b/setup/index.html @@ -1 +1 @@ -Overview | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Setup

Overview

Setting up an Adobe Commerce storefront project is similar to other Edge Delivery Services projects. The main difference is that you need to connect your storefront to your Adobe Commerce backend.

Big picture

Launching a headless Adobe Commerce storefront on Edge Delivery Services requires some basic setup before you do any custom development. Adobe recommends starting with the Commerce boilerplate to simplify the process. The Commerce boilerplate GitHub repsitory is a fork of the Edge Delivery Services boilerplate. It includes additional code specifically for Commerce use cases.

The Create your storefront tutorial provides all the information that you need to quickly set up a starter project that uses a pre-configured sample Adobe Commerce backend. After you complete the tutorial, you can connect your own Adobe Commerce backend to the project.

Here’s an overview of the process:

Project setup process.

Project setup process.
  1. Storefront configuration: Connect your Edge Delivery Services storefront to your Adobe Commerce backend.
  2. CDN configuration: Set up the content delivery network (CDN) to deliver your project.
  3. Storefront compatibility package: Install the Storefront Compatibility Package to enable drop-in component functionality.
\ No newline at end of file +Overview | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Setup

Overview

Setting up an Adobe Commerce storefront project is similar to other Edge Delivery Services projects. The main difference is that you need to connect your storefront to your Adobe Commerce backend.

Big picture

Launching a headless Adobe Commerce storefront on Edge Delivery Services requires some basic setup before you do any custom development. Adobe recommends starting with the Commerce boilerplate to simplify the process. The Commerce boilerplate GitHub repsitory is a fork of the Edge Delivery Services boilerplate. It includes additional code specifically for Commerce use cases.

The Create your storefront tutorial provides all the information that you need to quickly set up a starter project that uses a pre-configured sample Adobe Commerce backend. After you complete the tutorial, you can connect your own Adobe Commerce backend to the project.

Here’s an overview of the process:

Project setup process.

Project setup process.
  1. Storefront configuration: Connect your Edge Delivery Services storefront to your Adobe Commerce backend.
  2. CDN configuration: Set up the content delivery network (CDN) to deliver your project.
  3. Storefront compatibility package: Install the Storefront Compatibility Package to enable drop-in component functionality.
\ No newline at end of file diff --git a/setup/storefront-compatibility/index.html b/setup/storefront-compatibility/index.html index 2f6a6aedc..f3a86b36f 100644 --- a/setup/storefront-compatibility/index.html +++ b/setup/storefront-compatibility/index.html @@ -1 +1 @@ -Storefront Compatibility Package | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Setup

Storefront Compatibility Package

The Storefront Compatibility Package contains changes to the Adobe Commerce 2.4.7 codebase that enable drop-in component functionality.

Most of these changes enhance the Adobe Commerce GraphQL schema. However, miscellaneous bugfixes are also included. Cart, checkout, user account, and user authentication dropin-in components require the package. Partners can request access to the Storefront Compatibility Package by sending an email to commerce-storefront-compatibility@adobe.com.

Major features

This package defines the following queries and mutations:

  • confirmCancelOrder mutation - Cancels the specified order for a guest.

  • confirmReturn mutation - Confirms a guest or customer return request.

  • estimateTotals mutation - Estimates totals for cart based on the address.

  • generateCustomerToken mutation - Creates a new customer token.

  • recaptchaFormConfig query - Returns information about the reCaptcha configuration for the specified form type.

  • requestGuestOrderCancel mutation - Cancels the specified guest order.

  • requestGuestReturn mutation - Requests a return for a specified order on behalf of a guest.

  • resendConfirmationEmail mutation - Resends a confirmation email to the specified customer upon request.

Release information

Latest version: 4.7.0-beta24

Release date: November 11, 2024

4.7.0-beta24

  • The setShippingAddressesOnCart mutation no longer throws an error when specifying the pickup_location_code field.

  • customer queries using the items_eligible_for_return field do not return both parent and child products for configurable products.

  • Added the quantity_return_requested and eligible_for_return fields to OrderItemInterface.

  • Added the items_eligible_for_return field to the CustomerOrder type.

  • The eligible_for_return field no longer returns true on items that have been returned.

  • Updated WebAPI tests on shared catalogs.

4.7.0-beta23

  • Increased the default value for maximum query complexity to 1000.

  • Corrected an error that occurred when using the customer query to retrieve returns with the “Processed and Closed” status.

4.7.0-beta22

  • Added the confirmReturn and requestGuestReturn mutations.

  • Added multiple fields to the StoreConfig object that return configuration values related to taxes.

  • Commerce correctly returns a 401 or 403 error when an expired token is used.

4.7.0-beta21

  • Added the requestGuestOrderCancel mutation.

  • Added the id field to CartAddressInterface so that the value is available to the customerCart query.

  • Added GraphQL error handling capabilites to Cart.

  • The trademark symbol is now displayed correctly.

4.7.0-beta20

  • The updateCartItems and addProductsToCart mutations now return low quantity totals correctly.

  • Added the Customer.addressesV2 and Customer.CustomerAddresses objects, which allow you to specify pagination options.

  • Prices for downloadable products that have additional file options are now displayed correctly.

  • The updateCustomerEmail mutation allows the email to be changed when a custom attribute is not defined for the customer.

  • Added the ShippingCartAddress.same_as_billing field so that the cart and customerCart queries can determine whether the shipping addresses and billing address are the same.

Installation

You must have Adobe Commerce 2.4.7 installed. Magento Open Source is not supported.

Use this method to install the Storefront Compatibility Package using the Cloud infrastructure.

  1. On your local workstation, change to the project directory for your Adobe Commerce on cloud infrastructure project.

  2. Check out the environment branch to update using the Adobe Commerce Cloud CLI.

    Terminal window
    magento-cloud environment:checkout <environment-id>
  3. Add the Storefront Compatibility module.

    Terminal window
    composer require adobe-commerce/storefront-compatibility
  4. Update package dependencies.

    Terminal window
    composer update "adobe-commerce/storefront-compatibility"
  5. Commit and push code changes for the composer.json and composer.lock files.

  6. Add, commit, and push the code changes for the composer.json and composer.lock files to the cloud environment

    Terminal window
    git add -A
    git commit -m "Add module"
    git push origin <branch-name>

    Pushing the updates to the cloud environment initiates the Commerce cloud deployment process to apply the changes. Check the deployment status from the deploy log.

Update the package

Use the following procedure to update patch versions of the Storefront Compatibility Package.

  1. Run the following command to update the package:

    Terminal window
    composer update adobe-commerce/storefront-compatibility
  2. Run the following commands to upgrade Adobe Commerce and clear the cache.

    Terminal window
    bin/magento setup:upgrade && bin/magento cache:clean
\ No newline at end of file +Storefront Compatibility Package | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Setup

Storefront Compatibility Package

The Storefront Compatibility Package contains changes to the Adobe Commerce 2.4.7 codebase that enable drop-in component functionality.

Most of these changes enhance the Adobe Commerce GraphQL schema. However, miscellaneous bugfixes are also included. Cart, checkout, user account, and user authentication dropin-in components require the package. Partners can request access to the Storefront Compatibility Package by sending an email to commerce-storefront-compatibility@adobe.com.

Major features

This package defines the following queries and mutations:

  • confirmCancelOrder mutation - Cancels the specified order for a guest.

  • confirmReturn mutation - Confirms a guest or customer return request.

  • estimateTotals mutation - Estimates totals for cart based on the address.

  • generateCustomerToken mutation - Creates a new customer token.

  • recaptchaFormConfig query - Returns information about the reCaptcha configuration for the specified form type.

  • requestGuestOrderCancel mutation - Cancels the specified guest order.

  • requestGuestReturn mutation - Requests a return for a specified order on behalf of a guest.

  • resendConfirmationEmail mutation - Resends a confirmation email to the specified customer upon request.

Release information

Latest version: 4.7.0-beta24

Release date: November 11, 2024

4.7.0-beta24

  • The setShippingAddressesOnCart mutation no longer throws an error when specifying the pickup_location_code field.

  • customer queries using the items_eligible_for_return field do not return both parent and child products for configurable products.

  • Added the quantity_return_requested and eligible_for_return fields to OrderItemInterface.

  • Added the items_eligible_for_return field to the CustomerOrder type.

  • The eligible_for_return field no longer returns true on items that have been returned.

  • Updated WebAPI tests on shared catalogs.

4.7.0-beta23

  • Increased the default value for maximum query complexity to 1000.

  • Corrected an error that occurred when using the customer query to retrieve returns with the “Processed and Closed” status.

4.7.0-beta22

  • Added the confirmReturn and requestGuestReturn mutations.

  • Added multiple fields to the StoreConfig object that return configuration values related to taxes.

  • Commerce correctly returns a 401 or 403 error when an expired token is used.

4.7.0-beta21

  • Added the requestGuestOrderCancel mutation.

  • Added the id field to CartAddressInterface so that the value is available to the customerCart query.

  • Added GraphQL error handling capabilites to Cart.

  • The trademark symbol is now displayed correctly.

4.7.0-beta20

  • The updateCartItems and addProductsToCart mutations now return low quantity totals correctly.

  • Added the Customer.addressesV2 and Customer.CustomerAddresses objects, which allow you to specify pagination options.

  • Prices for downloadable products that have additional file options are now displayed correctly.

  • The updateCustomerEmail mutation allows the email to be changed when a custom attribute is not defined for the customer.

  • Added the ShippingCartAddress.same_as_billing field so that the cart and customerCart queries can determine whether the shipping addresses and billing address are the same.

Installation

You must have Adobe Commerce 2.4.7 installed. Magento Open Source is not supported.

Use this method to install the Storefront Compatibility Package using the Cloud infrastructure.

  1. On your local workstation, change to the project directory for your Adobe Commerce on cloud infrastructure project.

  2. Check out the environment branch to update using the Adobe Commerce Cloud CLI.

    Terminal window
    magento-cloud environment:checkout <environment-id>
  3. Add the Storefront Compatibility module.

    Terminal window
    composer require adobe-commerce/storefront-compatibility
  4. Update package dependencies.

    Terminal window
    composer update "adobe-commerce/storefront-compatibility"
  5. Commit and push code changes for the composer.json and composer.lock files.

  6. Add, commit, and push the code changes for the composer.json and composer.lock files to the cloud environment

    Terminal window
    git add -A
    git commit -m "Add module"
    git push origin <branch-name>

    Pushing the updates to the cloud environment initiates the Commerce cloud deployment process to apply the changes. Check the deployment status from the deploy log.

Update the package

Use the following procedure to update patch versions of the Storefront Compatibility Package.

  1. Run the following command to update the package:

    Terminal window
    composer update adobe-commerce/storefront-compatibility
  2. Run the following commands to upgrade Adobe Commerce and clear the cache.

    Terminal window
    bin/magento setup:upgrade && bin/magento cache:clean
\ No newline at end of file diff --git a/superstar/index.html b/superstar/index.html index c8588cad4..b323afcdf 100644 --- a/superstar/index.html +++ b/superstar/index.html @@ -1 +1 @@ -Storefront Stars | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Storefront Stars

\ No newline at end of file +Storefront Stars | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Storefront Stars

\ No newline at end of file diff --git a/troubleshooting/faq/index.html b/troubleshooting/faq/index.html index 81bfa8e85..b50bba53a 100644 --- a/troubleshooting/faq/index.html +++ b/troubleshooting/faq/index.html @@ -1 +1 @@ -Frequently Asked Questions (FAQ) | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Troubleshooting

Frequently Asked Questions (FAQ)

Where can I find technical documentation?

What should I do if my Catalog Service/Live Search data is missing or corrupted?

Submit a request to Adobe Commerce Support to clear your data space. This deletes all data within Catalog Service/Live Search for a specific environment ID. Be careful not to clear any data space required for production.

After Adobe Commerce Support clears your data space, you can re-synchronize it using the following commands:

Terminal window
bin/magento saas:resync --feed scopesCustomerGroup --cleanup-feed
bin/magento saas:resync --feed scopesWebsite --cleanup-feed
bin/magento saas:resync --feed productattributes --cleanup-feed
bin/magento saas:resync --feed variants --cleanup-feed
bin/magento saas:resync --feed products --cleanup-feed
bin/magento saas:resync --feed productoverrides --cleanup-feed
bin/magento saas:resync --feed prices --cleanup-feed
bin/magento saas:resync --feed categories --cleanup-feed
bin/magento saas:resync --feed categoryPermissions --cleanup-feed

See the SaaS Data Export Guide for more information.

How can I improve the performance of my catalog pages?

Images

  • Product images should be delivered in the appropriate size and should not be delivered larger than their rendered size. Use Fastly Image Optimizer where possible to deliver images in modern .webp format.
  • Use loading="eager" on largest contentful paint (LCP) relevant images and loading="lazy" on images with lower priority. Be aware that these attributes are a hint only for the browser.

API

  • Blocks that load data from APIs must have proper sizing in their loading state to prevent layout shift when they start to render content.
  • API endpoints should be proxied through a content delivery network (CDN) to prevent overhead of cross-origin resource sharing (CORS) (OPTIONS calls) and TLS handshakes.
  • Start GraphQL queries early (for example, in eager phase)

Preloading

  • Frequently used commerce.js and configs.js files can be loaded early by adding them to the head.html file.
  • Remove waterfall loading of files. If you know in advance which files are required, load them early or combine them to load fewer files.
  • You can preload resources/queries in the eager phase of the scripts.js file if they are very heavy. You can use global promises or a link tag with preload attribute in the head to prevent downloading the same resource multiple times.

Loading order

  • Everything that is not relevant for LCP can be loaded progressively (dynamic imports) or delayed (delayed.js).
  • LCP relevant blocks (for example, product details, product list page) must be loaded in the eager phase. This means that they need to be the first block on the page and added to the LCP_BLOCKS array.
  • Only load elements that are required. Elements that are not immediately required should be separated and loaded when needed.
    • Example 1: Logic for newsletter sign-up can be loaded when the user clicks on the subscribe button.
    • Example 2: Minicart block is loaded on every page but only loads lightweight code to display button and a number. The full minicart block is loaded only upon a click of the button.

Libraries

Use Preact/HTM or other libraries only when necessary.

Thid-party integrations

  • Prefer APIs over embedding third-party scripts.
  • If you must embed third-party scripts, try using placeholders to prevent cumulative layout shift (CLS). Load them delayed or when they appear in the viewport (IntersectionObserver).
  • Be careful with how you add fonts to the project. Ideally, you should avoid using fonts hosted by third parties.

How do I deploy custom VCLs to Fastly?

See Getting started with custom VCL in the Commerce on Cloud Infrastucture Guide.

\ No newline at end of file +Frequently Asked Questions (FAQ) | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Troubleshooting

Frequently Asked Questions (FAQ)

Where can I find technical documentation?

What should I do if my Catalog Service/Live Search data is missing or corrupted?

Submit a request to Adobe Commerce Support to clear your data space. This deletes all data within Catalog Service/Live Search for a specific environment ID. Be careful not to clear any data space required for production.

After Adobe Commerce Support clears your data space, you can re-synchronize it using the following commands:

Terminal window
bin/magento saas:resync --feed scopesCustomerGroup --cleanup-feed
bin/magento saas:resync --feed scopesWebsite --cleanup-feed
bin/magento saas:resync --feed productattributes --cleanup-feed
bin/magento saas:resync --feed variants --cleanup-feed
bin/magento saas:resync --feed products --cleanup-feed
bin/magento saas:resync --feed productoverrides --cleanup-feed
bin/magento saas:resync --feed prices --cleanup-feed
bin/magento saas:resync --feed categories --cleanup-feed
bin/magento saas:resync --feed categoryPermissions --cleanup-feed

See the SaaS Data Export Guide for more information.

How can I improve the performance of my catalog pages?

Images

  • Product images should be delivered in the appropriate size and should not be delivered larger than their rendered size. Use Fastly Image Optimizer where possible to deliver images in modern .webp format.
  • Use loading="eager" on largest contentful paint (LCP) relevant images and loading="lazy" on images with lower priority. Be aware that these attributes are a hint only for the browser.

API

  • Blocks that load data from APIs must have proper sizing in their loading state to prevent layout shift when they start to render content.
  • API endpoints should be proxied through a content delivery network (CDN) to prevent overhead of cross-origin resource sharing (CORS) (OPTIONS calls) and TLS handshakes.
  • Start GraphQL queries early (for example, in eager phase)

Preloading

  • Frequently used commerce.js and configs.js files can be loaded early by adding them to the head.html file.
  • Remove waterfall loading of files. If you know in advance which files are required, load them early or combine them to load fewer files.
  • You can preload resources/queries in the eager phase of the scripts.js file if they are very heavy. You can use global promises or a link tag with preload attribute in the head to prevent downloading the same resource multiple times.

Loading order

  • Everything that is not relevant for LCP can be loaded progressively (dynamic imports) or delayed (delayed.js).
  • LCP relevant blocks (for example, product details, product list page) must be loaded in the eager phase. This means that they need to be the first block on the page and added to the LCP_BLOCKS array.
  • Only load elements that are required. Elements that are not immediately required should be separated and loaded when needed.
    • Example 1: Logic for newsletter sign-up can be loaded when the user clicks on the subscribe button.
    • Example 2: Minicart block is loaded on every page but only loads lightweight code to display button and a number. The full minicart block is loaded only upon a click of the button.

Libraries

Use Preact/HTM or other libraries only when necessary.

Thid-party integrations

  • Prefer APIs over embedding third-party scripts.
  • If you must embed third-party scripts, try using placeholders to prevent cumulative layout shift (CLS). Load them delayed or when they appear in the viewport (IntersectionObserver).
  • Be careful with how you add fonts to the project. Ideally, you should avoid using fonts hosted by third parties.

How do I deploy custom VCLs to Fastly?

See Getting started with custom VCL in the Commerce on Cloud Infrastucture Guide.

\ No newline at end of file diff --git a/troubleshooting/pagespeed-issues/index.html b/troubleshooting/pagespeed-issues/index.html index db43075c2..00d65cf24 100644 --- a/troubleshooting/pagespeed-issues/index.html +++ b/troubleshooting/pagespeed-issues/index.html @@ -1 +1 @@ -PageSpeed Insights issues | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Troubleshooting

PageSpeed Insights issues

Common issues for PageSpeed Insights errors and how to resolve them.

Status code 404

Diagram for how to brand dropin-in components

PageSpeed 404 error

If This

You view lots of❗️red exclamation points and a status code of 404 for your preview (.page) or production (.live) storefront URLs.

Check This

Red dots indicate that the page has not been published or previewed since last edited. The 404 error only happens if you’ve never published or previewed the page you enter into the PageSpeed Insights text field (which includes your index page when you only enter your site’s URL). So because you never published the page (using Sidekick), Edge Delivery has not yet added the page to the preview or production CDNs, where PageSpeed Insights (and everyone else on the internet) looks for it. The result is a 404 error.

Do This

  1. Publish or Preview the page using the Sidekick buttons.
  2. Clear your browser cache.
  3. Wait a minute or two for the page to be added to the preview CDN (Preview button) or production CDN (Publish button).
\ No newline at end of file +PageSpeed Insights issues | Adobe Commerce StorefrontSkip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Troubleshooting

PageSpeed Insights issues

Common issues for PageSpeed Insights errors and how to resolve them.

Status code 404

Diagram for how to brand dropin-in components

PageSpeed 404 error

If This

You view lots of❗️red exclamation points and a status code of 404 for your preview (.page) or production (.live) storefront URLs.

Check This

Red dots indicate that the page has not been published or previewed since last edited. The 404 error only happens if you’ve never published or previewed the page you enter into the PageSpeed Insights text field (which includes your index page when you only enter your site’s URL). So because you never published the page (using Sidekick), Edge Delivery has not yet added the page to the preview or production CDNs, where PageSpeed Insights (and everyone else on the internet) looks for it. The result is a 404 error.

Do This

  1. Publish or Preview the page using the Sidekick buttons.
  2. Clear your browser cache.
  3. Wait a minute or two for the page to be added to the preview CDN (Preview button) or production CDN (Publish button).
\ No newline at end of file