Skip to content

Release January 20, 2026#2582

Open
github-actions[bot] wants to merge 204 commits into
mainfrom
changeset-release/from-canary
Open

Release January 20, 2026#2582
github-actions[bot] wants to merge 204 commits into
mainfrom
changeset-release/from-canary

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

Automated release PR from canary branch

@vercel

vercel Bot commented Jan 20, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
graphcommerce-246 Ready Ready Preview Jun 12, 2026 2:25pm
graphcommerce-247 Ready Ready Preview Jun 12, 2026 2:25pm
graphcommerce-hygraph-dynamic-rows-ui Ready Ready Preview Jun 12, 2026 2:25pm
graphcommerce-open-source Ready Ready Preview Jun 12, 2026 2:25pm
graphcommerce-storyblok Ready Ready Preview Jun 12, 2026 2:25pm

Request Review

paales and others added 30 commits May 20, 2026 16:25
test(next-config): regenerate mergeEnvIntoConfig snapshot to unblock CI
Default Fab size is `large` (54px). Without filtering on variant, every
`<Fab variant="extended">` without an explicit size matched the
`large` rule and got `width: 54px, height: 54px` applied, collapsing
extended Fabs to a fixed square regardless of their label. Scope the
size variants to `variant: 'circular'` so extended Fabs grow with
their label (consumers control the floor via `min-width`).
fix(next-ui): scope MuiFabSizes width/height to circular Fabs
feat(next-ui): add YoutubeEmbed component
Adds a per-storefront storyblokLocale config to map GraphCommerce locales to
Storyblok language codes, and refetches stories + global config client-side
in the editor's selected language so previews match the editor sidebar
regardless of which storefront the page renders in.
cosmiconfig's built-in synchronous TypeScript loader transpiles
`graphcommerce.config.ts` to a fixed `.cjs` path on disk and removes it
again in the finally block. When Next.js (especially Turbopack) spawns
worker processes that load the config concurrently, one process can
delete the file while another is still trying to require it — producing
panics like "Cannot find module …graphcommerce.config.cjs".

Replace the `.ts` loader with one that uses `@swc/core`'s
`transformFileSync` and writes to a per-process unique filename:

  .graphcommerce.tmp.<pid>-<counter>.cjs

next to the source. Unique filenames mean concurrent workers can't
collide on the temp path; placing it next to the source keeps any
relative `require()` in the config resolvable. The file is removed in
the finally block as before.

No new dependencies and no API change — `loadConfig` stays sync, so all
existing callsites (`withGraphCommerce`, the CLI commands, mesh, etc.)
keep working unchanged.
…y through

Cursor: The issue was a TTY handling bug in graphql-codegen's CLI. When running in Cursor's terminal without a proper TTY:
The spinner/progress output was suppressed
The exit code was incorrectly set to 1

The fix was to pipe gc-gql-codegen through cat, which forces proper output handling
Sync Storyblok content with the Visual Editor's selected language
…w local LayoutDefault in new LayoutNavigation

Unchaged for now (except import paths). Changes coming in next commits.
… components

LayoutNavigation was a big file that mixed the navigation overlay,
the header content, and the layout shell.
Customizing the header — sticky behavior, owning the container styling,
or adding a beforeHeader slot — required forking the whole file or
copying chunks of @graphcommerce/next-ui's LayoutDefault.

The header is now four reusable pieces:

  - HeaderContainer  the <Container component='header'> wrapper, lifted
                     out of LayoutDefault so each project owns its
                     header container.
  - Header           the header content (Logo, DesktopNavBar,
                     DesktopNavActions, MobileTopRight).
  - MenuOverlay      the NavigationProvider + NavigationOverlay.
  - LayoutDefault    a local copy that renders the `header` slot raw,
                     since the wrapping now lives in HeaderContainer.

Keeping LayoutDefault as a project-local copy makes the layout shell
itself customizable: tweaking the grid, the fab container, the
beforeHeader slot or the sticky behavior no longer requires patching
@graphcommerce/next-ui or copying the file — the example owns it.
Combined with the extracted Header / MenuOverlay / HeaderContainer,
projects can override any single piece without forking the rest.

LayoutNavigation becomes a slim orchestrator that composes them.
LayoutMinimal is updated to use the same local LayoutDefault +
HeaderContainer so both layouts share the canonical header pattern.

There is no visual change:
HeaderContainer carries the same styling that the
header slot of next-ui's LayoutDefault used to apply.
Blog pages never fetched the global config in getStaticProps, so
GlobalConfigProvider received undefined and the footer
rendered empty. Add fetchGlobalConfig + globalConfig prop to the blog
index/post/tagged pages, matching the pattern in pages/[...url].tsx.
…content

fix: fetch globalConfig on blog pages so global content renders
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants