0.4.0
template-retail-rsc-app
- Design layer: Wire
contentLinkUuidthrough regions and story fixtures to support content blocks - Cart line item: Restore the edit button for non-standard, non-bonus products alongside the newly added wishlist toggle and remove action.
- Broke down app.css into a more organized system for readability and discoverability
- Cart line item: Removed the edit action from the line card, added an inline wishlist add/remove toggle, removed the product description block, and removed the delivery pill so the row focuses on image, title, attributes, price, and quantity.
- Fix promotions always showing as 0 in order summary and order confirmation when only item-level discounts are applied — now includes
productItems[].priceAdjustmentsalongsideorderPriceAdjustments - Remove dead
ssr.noExternal/ssr.targetblock fromvite.config.ts— production SSR inlining is handled by the SDK'smanagedRuntimeBundlePlugin, and dev works with Vite's default ESM externalization - Standardize SCAPI requests error handling - Homepage
- Add
LoginModalcomponent with support for password, passwordless, and social login modes - Move locale chunking from
vite.config.tsinto SDKi18nPlugin; remove TODO comment - Add login preferences middleware and context for managing email verification preferences
- Remove manual
contentLinkUuidtype extensions in favor of SCAPI typesComponentTypenow usescontentLinkUuid,fragment,localized,visiblefrom Shopper Experience API v1.3.0
- Document the use of dynamic images
- Update Page Designer middleware and
vite.config.tsto align with upstream@salesforce/mrt-utilitiesconditional export flow (no local Vite alias requirement) - Standardize behaviors of API errors in Checkout
- Migrate i18n infrastructure to SDK: replace
src/lib/i18next.ts,src/lib/i18next.client.ts, andscripts/aggregate-extension-locales.jswith imports from@salesforce/storefront-next-runtime/i18nandsfnext locales aggregate-extensions - Fix locale bundle bloat, SSR 404 plain-text response, and homepage links ignoring active locale on error pages
- [UX Fix] Promo code component to match design
- Mini cart item UX refresh: update product/price hierarchy, stack quantity controls, and improve long promotion wrapping behavior
- Standardize action error handling with semantic error codes: actions return structured
{ code, message }errors instead of plain strings - Extract Vitest config into dedicated
vitest.config.ts, inline coverage thresholds - Add support for optional
shparameter to dynamic images - [UX Fix] Fix broken radius overriding system, and minor UX changes according to design
- Prefix all checkout UITarget targetIds with
sfcc. - Analytics: emit
commerce_agent_engagementwhen shoppers open agentic commerce from the header or search assistant; adduseAnalytics().trackCommerceAgentEngagement, Einstein (viewPage+ syntheticcurrentLocation) and Active Data (sfn-cagent-surface) adapter handling, defaulteventToggleskeys, and config docs - Flatten default
Cardstyling (drop default radius/shadow) - Multiship Guest Add Address now supports different addresses with same name
- Standardize layout with
section-containerutility: consolidate responsive padding, max-width, and centering into a single reusable class - Update checkout CTA text
- Update performance-related documentation
- Ensure
<Link/>,<NavLink/>, and<useNavigate/>also rewrite index routes - Prevent unnecessary navigation menu re-renders
- My Account: overview "rate recent purchases" card (below recent orders) linking to order details; order details per-line Rate & Review using the PDP write-review modal, with "Review submitted" state after submit
- Update style for Deliver to Multiple Addresses button
- Fix re-render cycles on PDP due to shared Suspense boundary
- User registration verified badge and spinner
- Update order summary UX
- UX changes on checkout page
- Bug fix to allow Canadian saved shipping address
- My Account: Hide auto-generated address IDs and remove Address Title field; show customer name with Default badge instead
- Add
config:inspect,config:push-env, andb2cnpm scripts; add@salesforce/b2c-clidev dependency for MRT environment variable management - Add support for OOTB API Key for Google Address Autocomplete feature in production instances
- Remove unused /callback route
- Remove unused Page Designer dev proxy from vite.config.ts
- Rename server-only source files to
.server.tsso the React Router build plugin enforces the server/client boundary at compile time - Checkout: Shipping method styling as per UX
- Added SDD (Spec-Driven Development) support with multi-agent code generation
- ProductCarousel: fix category-driven product fetching in Page Designer — loader now correctly invoked when
categoryIdattribute is set - ProductCarousel: hide empty-state placeholder on live storefront; "Select a product" now only shown in Page Designer design mode
- ProductCarousel: add
categoryIdandlimitPage Designer attribute definitions; update cartridge metadata - Fix social login redirect flow and callback handler
- Extend
useSite()to return{ site, language, locale, currency }and removeCurrencyProvider/useCurrency() - Add Cloudflare Turnstile bot protection integration for passwordless login with graceful degradation
- Remove
'use client'directives from template app source files - Save checkout user info for new user consistently
- Save phone number to
phoneMobilein addition tophoneHomeon customer profile update - Calculate basket after OTP verification
- Update accessibility baseline and fix accessibility violations on order list page
- Consolidate
action.set-site,action.set-locale, andaction.set-currencyinto a singleaction.set-site-contextroute - Clean up RSC/React Server Components references from documentation, comments, and config
- Remove internal "odyssey" codename references from codebase
- Add template support for registering and calling custom APIs through generated SCAPI clients
- Add configurable navigation menu options
rootCategoryId,maxDepth - Fix Vite dev server warnings for font loading from public directory
- Restored Page Designer aspect definitions for PDP and PLP
- Added fallback functionality for Core Region component and added two regions on AboutUs page region (
headlineandadditionalinformation) - Handle all Page Designer API errors gracefully in
pageLoader.tsto prevent dev server crashes - Add comprehensive checkout E2E tests for registered shopper flows: saved/new payment methods, View All/View Less pagination, save card to profile, shipping address modal (add/edit), non-default address selection, shipping method change, billing address selection, basket persistence across sessions, and Place Order button visibility
- Add SCAPI helper utilities for API-based registered shopper setup (register, login via PKCE, create address, update profile, add payment instrument) to speed up E2E test setup
- Page Designer:
storefrontnext_basedefault@Componentgroup, Layout/Content groups, resolved region type refs for inclusions/exclusions; updated cartridge metadata and static registry - Hero Banner: Page Designer Overlay Position (nine placements: top/middle/bottom × left/center/right) and Overlay Alignment (text/CTA left, center, right); updated cartridge metadata
- Hero Banner: Page Designer Title Typography, Subtitle Typography, optional Title/Subtitle Color (hex), and Button Style (Primary/Secondary/Tertiary) for the CTA; hide CTA when link is empty; derive default CTA label from URL; legacy horizontal overlay values map to the nine-position grid; updated cartridge metadata
Full Changelog: v0.3.1...v0.4.0
storefront-next-dev
- Move
pnpm-workspace.yaml.hbs → .yamlconversion fromcreate-storefrontCLI into mirror sync scripts;prepare-standalone-template.jsnow pins exact versions inminimumReleaseAgeExcludefor all exempted packages - Extract i18n locale chunking into SDK Vite plugin (
i18nPlugin): splits translation files into per-language chunks automatically - Add
sfnext locales aggregate-extensionsCLI command: generates per-locale barrel files aggregating extension translations underextPascalCasenamespaces - Remove local data-store provider export/build artifacts and rely on
@salesforce/mrt-utilitiesdata-store behavior - Update
sfnext devto forward Node--conditions(fromprocess.execArgvandNODE_OPTIONS) into Vite client + SSR resolution for conditional exports - Fix HMR cascade in static registry plugin: skip unnecessary file writes and module reloads when registry content is unchanged
- Add
dw.jsonto.gitignoreto prevent credentials from being accidentally committed - Replace
dotenvdependency with Node built-inutil.parseEnvandprocess.loadEnvFile; consolidate.envloading into the oclifinithook - Add
sfnext config inspectcommand: shows aconfig.server.tsoverride summary — which values are overridden by.envand MRTPUBLIC__vars - Remove unused /callback route
- Enable
future.unstable_optimizeDepsin React Router preset to fix duplicate React module crash on dev server startup - Add local dev support to MRT Data Layer
- Clean up RSC/React Server Components references from documentation and comments
- Fix incorrect SSR sourcemaps for files sharing a basename in local dev debugger
- Remove internal "odyssey" codename references from codebase
- Add
sfnext scapiCLI used to support generating and managing custom API clients in template projects - Fix
generate-cartridgeto scanconfig-metadata/for aspect type definitions (pdp.json, plp.json) after recent move fromsrc/ - Align
generate-cartridgeand static registry with template Page Designer defaults:storefrontnext_basedefault group, Layout/Content component folders and type ids
storefront-next-runtime
- Design layer: Add
contentLinkUuidsupport for duplicate component handling- Make
contentLinkUuidrequired on component interaction events (select, delete, move, hover, focus) - Add
fragmentIdsupport to drag-and-drop events for content block instances - Design state fields (
selected,hovered,focused) now exposecontentLinkUuidas the primary identifier instead ofcomponentId - Regions track
contentLinkUuidsinstead ofcomponentIds, enabling correct self-drop detection and drag validation for duplicate components
- Make
- Bump
@salesforce/mrt-utilitiesto 0.1.6 to fix strictexpress@5.1.0peer dependency (now accepts^4.0.0 || ^5.0.0) - Update Shopper Experience API spec to v1.3.0 with
contentLinkUuidfield support- Add
contentLinkUuidto Component schema for content link UUID tracking - Add
name,fragment,localized,visiblefields to Component schema - Regenerate TypeScript types for all SCAPI clients
- Remove unused
@ts-expect-errordirectives from page processor now that schema includes the missing fields
- Add
- Add
/i18nand/i18n/clientsubpath exports:createI18nMiddleware,getTranslation,getLocale,mockI18nContext,initI18next, and shareddefaultInterpolation - Unify data-store access on
DataStore.getDataStore().getEntry()from@salesforce/mrt-utilities/data-store; remove legacy provider abstraction/local fallback paths and related tests - Re-export
DataStoreand data-store error types from@salesforce/mrt-utilities/data-storeto align runtime APIs with upstream package structure - Add
CommerceAgentEngagementEvent(commerce_agent_engagement) to theAnalyticsEventunion for agentic commerce usage tracking (surface:header|search) - Add login preferences middleware and context to data store
- Extend
SiteProviderto acceptsite,language,locale,currencyprops anduseSite()to returnSiteContextValue - Add support to MRT Data Layer access
- Add currency detection to site-context middleware
- Add runtime support for custom API client typing and proxy client composition
- Add support for OOTB API Key for Google Address Autocomplete feature from MRT Data Layer