Skip to content

Release January 20, 2026#2582

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

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

Conversation

@github-actions
Copy link
Copy Markdown
Contributor

Automated release PR from canary branch

@vercel
Copy link
Copy Markdown

vercel Bot commented Jan 20, 2026

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

Project Deployment Actions Updated (UTC)
graphcommerce-246 Ready Ready Preview May 20, 2026 3:18pm
graphcommerce-247 Ready Ready Preview May 20, 2026 3:18pm
graphcommerce-hygraph-dynamic-rows-ui Ready Ready Preview May 20, 2026 3:18pm
graphcommerce-open-source Ready Ready Preview May 20, 2026 3:18pm
graphcommerce-storyblok Ready Ready Preview May 20, 2026 3:18pm

Request Review

paales added 3 commits May 20, 2026 14:20
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".
@github-actions github-actions Bot force-pushed the changeset-release/from-canary branch from a1a785b to c4309f6 Compare May 20, 2026 12:28
paales and others added 24 commits May 20, 2026 14:32
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.
…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
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.

3 participants