Conversation
🦋 Changeset detectedLatest commit: 589c434 The changes in this PR will be included in the next version bump. This PR includes changesets to release 3 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
There was a problem hiding this comment.
Pull request overview
Upgrades the ebay-video Shaka Player integration to Shaka v5 and updates Skin/React/Marko implementations to match the new UI/config behavior (including compact layout + navigation use cases from #507 and iOS bug fixes from #502).
Changes:
- Bump
shaka-playerto5.0.2across Marko/React packages and update the lockfile accordingly. - Update video UI configuration (e.g.,
showUIAlways, context menu options, compact control panel elements) and simplify/adjust Skin overrides. - Refactor React/Marko video controls + snapshots to align with the updated player UI and markup.
Reviewed changes
Copilot reviewed 15 out of 17 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| packages/skin/src/sass/video/video.scss | Simplifies Shaka UI overrides and adds slider/button-panel positioning rules. |
| packages/skin/dist/video/video.css | Regenerated compiled CSS reflecting the SCSS changes. |
| packages/skin/package.json | Adjusts build script ordering (moves sass linting to build). |
| packages/evo-marko/package.json | Updates Shaka dependency to v5.0.2. |
| packages/ebayui-core/package.json | Updates Shaka dependency to v5.0.2. |
| packages/ebayui-core/src/components/ebay-video/index.marko | Removes the loading overlay/spinner markup from server-rendered template. |
| packages/ebayui-core/src/components/ebay-video/component.ts | Updates Shaka UI config for v5 and changes load/error handling + compact behavior. |
| packages/ebayui-core/src/components/ebay-video/elements.ts | Adjusts report-button gating logic for report/a11y text inputs. |
| packages/ebayui-core/src/components/ebay-video/test/snapshots/test.server.js.snap | Updates snapshots to match Marko markup changes. |
| packages/ebayui-core-react/package.json | Updates optional Shaka dependency to v5.0.2. |
| packages/ebayui-core-react/test.setup.ts | Adds a test-only SVGPathElement polyfill for jsdom. |
| packages/ebayui-core-react/src/ebay-video/const.ts | Updates default control panel elements to use custom current/total time elements. |
| packages/ebayui-core-react/src/ebay-video/controls.tsx | Adds custom Shaka UI elements for current/total time display. |
| packages/ebayui-core-react/src/ebay-video/video.tsx | Registers new UI elements and adds JS-driven seekbar alignment for React player. |
| packages/ebayui-core-react/src/ebay-video/tests/render.spec.tsx | Updates assertions to match Shaka v5 DOM/attributes. |
| package-lock.json | Lockfile update reflecting new Shaka versions + workspace installs. |
| .changeset/sweet-beers-kiss.md | Publishes minor bumps for Skin/Core/Core-React due to Shaka v5 upgrade. |
Comments suppressed due to low confidence (2)
packages/ebayui-core/src/components/ebay-video/component.ts:348
_loadSrcno longer handles Shaka error codes for “another load in progress” / “player not ready” (previously ignored/retried). Without this, a transient load interruption can now fall through tohandleError, removing the play button and emittingload-error. Reintroduce special handling for these known error codes (matching the React implementation) before attemptingnextIndex/ failing.
this.player
.load(src.src)
.then(() => {
// this._addTextTracks();
this.state.failed = false;
})
.catch((err: Error & { code: number }) => {
if (nextIndex) {
setTimeout(() => this._loadSrc(nextIndex), 0);
} else {
this.handleError(err);
}
});
packages/ebayui-core/src/components/ebay-video/elements.ts:56
- The report button is created when either
reportTextora11yReportTextis present, but the button itself is missing an accessible label (neither value is applied toaria-label). Setbutton_.ariaLabel(prefera11yReportText, fall back toreportText) so the icon-only button is announced correctly by screen readers.
if (!self.input.reportText && !self.input.a11yReportText) {
return;
}
// The actual button that will be displayed
this.button_ = document.createElement("button");
this.button_.classList.add("video-player__report-button");
const flagIcon = self
.getComponent("flag-icon")!
.el!.cloneNode(true);
this.button_.prepend(flagIcon);
this.parent.appendChild(this.button_);
| shaka.ui.Controls.registerElement("current_time", new CurrentTime.Factory()); | ||
| shaka.ui.Controls.registerElement("total_time", new TotalTime.Factory()); |
There was a problem hiding this comment.
shaka.ui.Controls.registerElement(...) is executed on every render of the React component (it’s in the function body, not an effect). Since Shaka’s element registry is global, this can lead to duplicate registrations across re-renders/multiple instances and may throw or leak. Move these registrations into a one-time initialization (module scope or a useEffect(..., [])) and guard against re-registering keys that already exist.
|
@agliga I don't think the a11y text props are working as expected. Ex: Also, there is a |

showUIAlways#507 and ebay-video: various iOS bugs #502Description
Checklist
I verify all changes are within scope of the linked issue
I added/updated/removed testing (Storybook in Skin) coverage as appropriate
I tested the UI in all supported browsers
I tested the UI in dark mode and RTL mode