Releases: graphcommerce-org/graphcommerce
Release 10.1.0-canary.22
@graphcommerce/magento-product@10.1.0-canary.22
Minor Changes
-
#2627
95c188f- AddYoutubeEmbedcomponent — a lightweight lazy-loading YouTube player that defers iframe creation until the user clicks the poster. Uses preconnect on hover for fast playback start and is styled with MUI sx, so no external CSS is required. Supports playlists, no-cookie mode, custom aspect ratios and ad-network preconnect hints.ProductVideo(used byProductPageGallery) now delegates YouTube playback toYoutubeEmbed, so any product whose Magentomedia_gallerycontains a YouTube video entry gets the new lazy-loading player on its product page. Vimeo and self-hosted video paths are unchanged. The Magento preview image is passed as the YoutubeEmbedthumbnailso the visible poster stays consistent with the rest of the gallery.Fix
SidebarGalleryso it forwards theAdditionalandslotPropsfrom each image toMotionImageAspect. Before this fix the gallery silently dropped both props, which meant anyAdditionaloverlay configured byProductPageGallery(the<ProductVideo>overlay with itsPlayCircleand the newYoutubeEmbed) never reached the DOM. That was a latent regression that made all video-gallery entries render as static images, with or without this PR's YouTube changes.Fix
playwright.config.tssonpx playwright testactually loads. The config previously importedexamples/magento-graphcms/next.config.ts, which transitively pulled@graphcommerce/next-config's ESM build into a CJS context and crashed withReferenceError: exports is not defined. Replaced with an opt-inPLAYWRIGHT_LOCALESenv var for the multi-locale projects that the next.config import was meant to drive. (@paales)
@graphcommerce/next-ui@10.1.0-canary.22
Minor Changes
-
#2627
95c188f- AddYoutubeEmbedcomponent — a lightweight lazy-loading YouTube player that defers iframe creation until the user clicks the poster. Uses preconnect on hover for fast playback start and is styled with MUI sx, so no external CSS is required. Supports playlists, no-cookie mode, custom aspect ratios and ad-network preconnect hints.ProductVideo(used byProductPageGallery) now delegates YouTube playback toYoutubeEmbed, so any product whose Magentomedia_gallerycontains a YouTube video entry gets the new lazy-loading player on its product page. Vimeo and self-hosted video paths are unchanged. The Magento preview image is passed as the YoutubeEmbedthumbnailso the visible poster stays consistent with the rest of the gallery.Fix
SidebarGalleryso it forwards theAdditionalandslotPropsfrom each image toMotionImageAspect. Before this fix the gallery silently dropped both props, which meant anyAdditionaloverlay configured byProductPageGallery(the<ProductVideo>overlay with itsPlayCircleand the newYoutubeEmbed) never reached the DOM. That was a latent regression that made all video-gallery entries render as static images, with or without this PR's YouTube changes.Fix
playwright.config.tssonpx playwright testactually loads. The config previously importedexamples/magento-graphcms/next.config.ts, which transitively pulled@graphcommerce/next-config's ESM build into a CJS context and crashed withReferenceError: exports is not defined. Replaced with an opt-inPLAYWRIGHT_LOCALESenv var for the multi-locale projects that the next.config import was meant to drive. (@paales)
@graphcommerce/misc@10.1.0-canary.22
Patch Changes
-
#2627
95c188f- AddYoutubeEmbedcomponent — a lightweight lazy-loading YouTube player that defers iframe creation until the user clicks the poster. Uses preconnect on hover for fast playback start and is styled with MUI sx, so no external CSS is required. Supports playlists, no-cookie mode, custom aspect ratios and ad-network preconnect hints.ProductVideo(used byProductPageGallery) now delegates YouTube playback toYoutubeEmbed, so any product whose Magentomedia_gallerycontains a YouTube video entry gets the new lazy-loading player on its product page. Vimeo and self-hosted video paths are unchanged. The Magento preview image is passed as the YoutubeEmbedthumbnailso the visible poster stays consistent with the rest of the gallery.Fix
SidebarGalleryso it forwards theAdditionalandslotPropsfrom each image toMotionImageAspect. Before this fix the gallery silently dropped both props, which meant anyAdditionaloverlay configured byProductPageGallery(the<ProductVideo>overlay with itsPlayCircleand the newYoutubeEmbed) never reached the DOM. That was a latent regression that made all video-gallery entries render as static images, with or without this PR's YouTube changes.Fix
playwright.config.tssonpx playwright testactually loads. The config previously importedexamples/magento-graphcms/next.config.ts, which transitively pulled@graphcommerce/next-config's ESM build into a CJS context and crashed withReferenceError: exports is not defined. Replaced with an opt-inPLAYWRIGHT_LOCALESenv var for the multi-locale projects that the next.config import was meant to drive. (@paales)
Release 10.1.0-canary.21
@graphcommerce/next-ui@10.1.0-canary.21
Patch Changes
- #2633
7554ad4- Fix:<Fab variant="extended">no longer gets a fixedwidthfromMuiFabSizes. The size-based width/height variants are now scoped tovariant: 'circular'only, so extended Fabs can grow with their label (controlled viamin-widthinstead) as MUI intends. Previously every extended Fab without an explicitsizematched the defaultlargerule and was forced to 54px wide. (@paales)
Release 10.1.0-canary.20
@graphcommerce/next-config@10.1.0-canary.20
Patch Changes
- #2632
c25106b- Regenerate themergeEnvIntoConfigsnapshot soyarn testpasses on canary. The test input already feedsGC_DEMO_MODEandGC_STOREFRONT_<i>_HYGRAPH_LOCALES_0into the env-schema parser, but the snapshot it was compared against still reflected the pre-demoMode/ pre-flattened-hygraphLocalesschema, so every CI run since those config fields were added has been failing thetestjob on every PR with a snapshot mismatch unrelated to the PR's own changes. (@paales)
Release 10.1.0-canary.18
@graphcommerce/misc@10.1.0-canary.18
Patch Changes
Release 10.1.0-canary.17
@graphcommerce/hygraph-dynamic-rows-ui@10.1.0-canary.17
Patch Changes
- #2623
241576a- Bump Next.js from 16.1.1 to 16.2.6 across the framework and example storefronts. Also bumps the matching@next/envand@next/eslint-plugin-nextpins. (@paales)
@graphcommerce/magento-customer@10.1.0-canary.17
Minor Changes
-
#2624
cbad1fd-CustomerUpdateFormnow acceptsuseFormGqlOptionsandmutationOptionsprops that get forwarded to its underlyinguseCustomerUpdateFormhook. Lets consumers attach anonComplete(e.g. to close an overlay and navigate back on a successful save), anonBeforeSubmit(to amend or veto the variables), or any other option already supported byuseFormGqlMutation/useMutation— without having to drop down and rebuild the form from scratch.Defaults preserve existing behaviour, so the change is backwards compatible. (@paales)
@graphcommerce/eslint-config-pwa@10.1.0-canary.17
Patch Changes
- #2623
241576a- Bump Next.js from 16.1.1 to 16.2.6 across the framework and example storefronts. Also bumps the matching@next/envand@next/eslint-plugin-nextpins. (@paales)
@graphcommerce/misc@10.1.0-canary.17
Patch Changes
Release 10.1.0-canary.13
@graphcommerce/magento-customer@10.1.0-canary.13
Minor Changes
-
#2620
43a0ed2-SignUpFormnow acceptsfieldsetsandrenderprops (mirroringCustomerUpdateForm), so consumers can group dynamic customer attributes into custom labelled sections viaAttributesFormAutoLayout. Defaults to the existing[nameFieldset(attributes)]/CustomerAttributeFieldbehaviour, so unchanged for projects that don't supply the props.This avoids the unstyled, untranslated
Otherfallback header thatAttributesFormAutoLayoutadds whenever attributes don't fit any registered fieldset — projects that extend the customer schema (e.g. with aclubattribute) can now declare their own fieldset alongsidenameFieldset.The fallback header itself in
AttributesFormAutoLayoutis now wrapped in<Trans>Other</Trans>so it picks up project translations instead of rendering as a hardcoded English string.Bug fix in
nameFieldset: when a store doesn't registerdob/genderon the registration form, theadditionalrow was empty and the helper producedgrid-template-areas: "firstname lastname" "", which is invalid CSS and made the whole declaration fall back to the default single-column layout — firstname/lastname stacked on separate rows even at md+. Empty rows are now filtered out, so the side-by-side md layout works as intended. (@paales)
@graphcommerce/magento-store@10.1.0-canary.13
Patch Changes
-
#2625
539b353-CustomAttributesField_to_AttributeValueInputswas filtering out any falsy form value (if (!value) return), so empty strings andfalsebooleans never made it into the resultingAttributeValueInput[]. That meant a consumer who picked the empty-string option of a SELECT attribute (e.g. a "-- None --" option used to undo a previous choice) couldn't actually clear the attribute — the mutation simply omitted it and Magento kept the old value.Skip only when the value is
undefined(the attribute was never touched). Pass empty strings andfalsebooleans through to the mutation so the backend can interpret them as "clear this attribute". (@paales) -
#2620
43a0ed2-SignUpFormnow acceptsfieldsetsandrenderprops (mirroringCustomerUpdateForm), so consumers can group dynamic customer attributes into custom labelled sections viaAttributesFormAutoLayout. Defaults to the existing[nameFieldset(attributes)]/CustomerAttributeFieldbehaviour, so unchanged for projects that don't supply the props.This avoids the unstyled, untranslated
Otherfallback header thatAttributesFormAutoLayoutadds whenever attributes don't fit any registered fieldset — projects that extend the customer schema (e.g. with aclubattribute) can now declare their own fieldset alongsidenameFieldset.The fallback header itself in
AttributesFormAutoLayoutis now wrapped in<Trans>Other</Trans>so it picks up project translations instead of rendering as a hardcoded English string.Bug fix in
nameFieldset: when a store doesn't registerdob/genderon the registration form, theadditionalrow was empty and the helper producedgrid-template-areas: "firstname lastname" "", which is invalid CSS and made the whole declaration fall back to the default single-column layout — firstname/lastname stacked on separate rows even at md+. Empty rows are now filtered out, so the side-by-side md layout works as intended. (@paales)
@graphcommerce/next-config@10.1.0-canary.13
Patch Changes
-
#2621
4eccccd-graphcommerce cleanup-interceptorsnow actually finds and restores.original.tsx/.original.tsfiles when run from a consumer project. PreviouslyfindDotOriginalFileswalked up looking for a@graphcommerce/*parent package; from a consumer project (where there is no such parent)parentPathended upnulland the glob expanded to literallynull/**/*.original.tsx, so the command silently restored nothing. Now it falls back tocwdandcwd/node_modules/@graphcommercewhere interceptors actually live for consumers.Also fixes a display bug — the final
X files restored from .originalline printed an always-0counter (restoredCountwas declared but never incremented; the now-removedremovedCountwas the one being incremented). Counter and message are now consistent. (@paales)
Release 10.1.0-canary.9
@graphcommerce/magento-payment-multisafepay@10.1.0-canary.9
Patch Changes
- #2583
01bb1df- Fixed a bug in MSPPaymentHandler where successful MultiSafepay payments were prevented from redirecting to the success page due to an incorrect condition in the payment handler. (@Giovanni-Schroevers)
Release 10.1.0-canary.7
@graphcommerce/next-ui@10.1.0-canary.7
Patch Changes
- #2610
7b6ba3f- Fix duplicate React key warning in<NumberFormat>/<CurrencyFormat>/<Money>for numbers with a thousands group separator.Intl.NumberFormat.formatToParts()emits multiple parts withtype: "integer"(one per group, e.g.1.234,56produces twointegerparts). Usingkey={part.type}therefore collided. Switched to an index key — parts are already wrapped insuppressHydrationWarning, so SSR/client divergence isn't an issue. (@paales)
Release 10.1.0-canary.6
@graphcommerce/storyblok-ui@10.1.0-canary.6
Patch Changes
-
#2609
fe29527- Drop@graphcommerce/magento-cmsfrom the Storyblok example, ship locale-redirect proxy withstoryblok-uiThe Storyblok example had several leftovers from a half-completed migration off Magento CMS, all conceptually out of place in an example whose purpose is "all content lives in Storyblok":
pages/page/[...url].tsx— a CMS page handler whosegetStaticPathscalledgetCategoryStaticPaths(returns Magento category URLs). Feeding category URLs into thecmsPagequery causedgetStaticPropsto return aredirect, which Next.js rejects during prerender — crashingnext build.Layout.graphqlqueriedcmsBlocks(["footer_links_block"])but the resulting prop was destructured-and-discarded in both layout components — the Footer is fully driven by Storyblok'sglobalConfig. The dead query also produced noisy GraphQL errors at build time on backends without the block.pages/404.tsxrendered a Magentocms_no_routeCMS page (with a hardcoded fallback if absent).proxy.tswas a hand-written file with hardcodedLOCALES = ['en', 'nl']— broken for any other storefront combination, and not using the plugin system.
This PR:
- Removes
pages/page/[...url].tsx, the deadcmsBlocksquery and unused destructures, the Magento CMS fallback inpages/404.tsx, and the@graphcommerce/magento-cmsdependency - Migrates
proxy.ts→ standard managed re-export - Adds
@graphcommerce/storyblok-ui/plugins/LocaleRedirectProxy.tswithifConfig: 'storyblok'— every project depending on@graphcommerce/storyblok-uinow gets locale-redirect (Visual Editor_storyblok_lang+ Accept-Language root) automatically, with locales read fromstorefrontconfig
If a project needs Magento CMS pages alongside Storyblok, it can re-add the dependency and a route — but the example should default to pure Storyblok. (@paales)
Release 10.1.0-canary.5
chore(release): update prerelease versions