Release January 20, 2026#2582
Open
github-actions[bot] wants to merge 182 commits into
Open
Conversation
fix: use immediate input value for Enter navigation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
fix: get redirectTo from the url params instead of the headers
0fc4cb5 to
6629180
Compare
…ieve the flags in the middleware as well.
… for plugins. Disabledby default.
Feature/private catalog
Lightweight lazy-loaded YouTube player that defers iframe creation until the user clicks the poster. Uses preconnect on hover for fast playback start and is styled entirely with MUI sx, so no external CSS is required. Ported from the unfinished `feature/todo-list-paul` branch and modernised: - styling moved from external `react-lite-youtube-embed` CSS classes to MUI `Box` + `sx`, so the component works out of the box - React 19 ref-as-prop pattern (no `forwardRef`) - supports playlists, no-cookie mode, custom aspect ratios, and ad-network preconnect hints
Spell out that type checking only works per-example, and that any optional/private package must be activated via PRIVATE_ADDITIONAL_DEPENDENCIES (with `yarn install` to link the workspace) and codegen must be re-run before tsgo sees its injected fragments. Documents the three-step workflow that currently fails silently with confusing "field does not exist" errors when skipped.
- Add "verify npm auth" step that runs npm whoami early in the job so an expired/invalid NPM_TOKEN fails fast with a clear error instead of blowing up halfway through publish (and leaving pre.json + package.json versions out of sync with what is on npm, as happened today). - Make "run changeset version and commit" idempotent: skip git commit and push when nothing is staged. This way a rerun after a publish failure no longer dies on "nothing to commit".
a1a785b to
c4309f6
Compare
Add `copy/pages/test/youtube-embed.tsx` that demonstrates the new `YoutubeEmbed` component in four configurations: - default 16:9 - custom 1:1 aspect - playlist with `cookie` (youtube.com instead of youtube-nocookie.com) - muted with `maxresdefault` poster Link from the `/test` overview page so the demo is discoverable.
Two doc additions: - `graphcommerce cleanup-interceptors` restores `.original.*` files over the codegen-wrapped originals. Always run before committing so dozens of unrelated `next-ui`/`magento-*` wrappers don't pollute the diff. - Every feature PR must include a usage example. For UI components, add a demo route under `packages/demo-magento-graphcommerce/copy/pages/test/` and link it from the test overview; for plugins, wire them into one of the example storefronts so the diff shows the integration point.
`ProductVideo` (rendered by `ProductPageGallery`) previously embedded YouTube videos with a plain `<iframe>` that loaded only after the user clicked the play overlay. Switch the YouTube path to the new `YoutubeEmbed` component from next-ui, which preconnects to YouTube on hover and lazy-loads the iframe on click. Vimeo and self-hosted video paths are unchanged. The Magento media-gallery preview image is forwarded as the `thumbnail` prop, so the poster the user sees before playback stays consistent with the rest of the product gallery (no jump to a YouTube-generated thumbnail). Replaces the throwaway `demo-magento-graphcommerce/copy/pages/test/youtube-embed.tsx` demo route — a feature lands in the example storefronts by wiring it into an existing flow (here: product page → media gallery → YouTube entry), not by adding a separate test route.
…t route Earlier wording suggested adding a `pages/test/<feature>.tsx` demo route counted as a showcase. It does not — that route lives outside the real flow, reviewers don't walk through it, and the integration with the storefront stays unproven. Replace the section with a stricter rule: every feature PR must wire the feature into one of the existing example storefronts so it is visible on a real page (product page, account flow, cart page, etc.). The PR's "Test plan" must name the URL the reviewer opens to see it working, and any backend prerequisites (Magento product config, Hygraph content) must be called out.
…k-with-private-packages docs: clarify type-check workflow with private packages
`SidebarGallery` was spreading only `src`, `width`, `height`, `loading`,
`sx`, `sizes`, and `alt` onto each `MotionImageAspect`. The `Additional`
component and `slotProps` set by `ProductPageGallery` for video entries
were silently dropped, so `<ProductVideo>` (and now `<YoutubeEmbed>`)
never reached the DOM — every gallery video slide rendered as a static
image with no play button at all.
Spread the full `image` props onto `MotionImageAspect` instead, and
merge `image.sx` into the gallery's default `{ display: 'block',
objectFit: 'contain' }` via `sxx` so the per-image `objectFit: 'cover'`
that ProductPageGallery sets for non-image slides also takes effect.
Also: fix playwright.config.ts so `npx playwright test` actually loads.
The previous config imported `examples/magento-graphcms/next.config.ts`,
which transitively pulls `@graphcommerce/next-config`'s ESM build into
a CJS context and crashes Playwright's TS loader with
`ReferenceError: exports is not defined in ES module scope`. The
import was only used to read i18n locales for multi-locale project
generation; replace it with an opt-in `PLAYWRIGHT_LOCALES=nl,de` env
var so the default config no longer touches Next.js internals.
Add the first playwright test for this PR's showcase:
`packages/magento-product/test/youtubeEmbedInGallery.playwright.ts`
navigates to a product with a YouTube video in its media gallery,
asserts that `YoutubeEmbed-root` is present, that the poster comes
from the Magento preview image (not `i.ytimg.com`), that hovering
adds the `<link rel="preconnect">` to YouTube, and that clicking
swaps in the iframe with the expected video id and `autoplay=1`.
`PRODUCT_URL` and `EXPECTED_YOUTUBE_ID` env vars override the
backend-specific defaults.
`npx playwright test` writes `test-results/.last-run.json` (and a full `playwright-report/` on failures) next to the runner. These are local artifacts, not source — exclude them from git.
The existing single-line mention ("E2E tests use Playwright: yarn
playwright") doesn't say where the tests live, how to install the
browsers, how to point them at a non-default port/backend, or that
they require a running storefront. Expand it so new contributors can
actually run the suite (and so it's clear that adding new tests means
dropping a `<feature>.playwright.ts` next to the package).
Also documents the `URL` and `PLAYWRIGHT_LOCALES` env vars used by
`playwright.config.ts` after the ESM-loader fix in PR #2627.
The existing single-line mention ("E2E tests use Playwright: yarn
playwright") doesn't say where the tests live, how to install the
browsers, how to point them at a non-default port/backend, or that
they require a running storefront. Expand it so new contributors can
actually run the suite (and so it's clear that adding new tests means
dropping a `<feature>.playwright.ts` next to the package).
Also documents the `URL` and `PLAYWRIGHT_LOCALES` env vars used by
`playwright.config.ts` after the ESM-loader fix in #2627.
docs: document the playwright e2e workflow
…k-with-private-packages docs: document the playwright e2e workflow
The `parses an env config object` test feeds the env-schema parser `GC_DEMO_MODE='1'`, `GC_STOREFRONT_0_HYGRAPH_LOCALES_0='en'`, and `GC_STOREFRONT_1_HYGRAPH_LOCALES_0='de'`, but the committed snapshot still reflects the pre-`demoMode` / pre-flattened-`hygraphLocales` schema. Every CI run since those config fields were added (and the test input updated) has failed the `test` job on every PR with a snapshot mismatch unrelated to the PR's own changes: Snapshot \`parses an env config object 1\` mismatched + "GC_DEMO_MODE": true, + "GC_STOREFRONT_0_HYGRAPH_LOCALES_0": "en", + "GC_STOREFRONT_1_HYGRAPH_LOCALES_0": "de", Update the snapshot to match the schema. No code change.
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Automated release PR from canary branch