+
{{ formatMarketplaceReleasedDate(listing.latestVersionReleasedAt, appLocale) }}
- v{{ listing.plugin.latestVersion }}
+ v{{ listing.plugin.latestVersion }}
diff --git a/apps/desktop/src/components/plugins/__tests__/PluginContributionsPanelBatch.spec.ts b/apps/desktop/src/components/plugins/__tests__/PluginContributionsPanelBatch.spec.ts
index 61994220b9..cd77abf7d1 100644
--- a/apps/desktop/src/components/plugins/__tests__/PluginContributionsPanelBatch.spec.ts
+++ b/apps/desktop/src/components/plugins/__tests__/PluginContributionsPanelBatch.spec.ts
@@ -855,6 +855,28 @@ describe("PluginContributionsPanel marketplace sort", () => {
});
});
+describe("PluginContributionsPanel marketplace card layout", () => {
+ it("wraps the grid card header and pins the version badge so it never clips in a narrow panel", async () => {
+ state.batchMode = false;
+ state.marketplaceViewMode = "grid";
+ await nextTick();
+
+ const card = host.querySelector("article");
+ expect(card, "a marketplace grid card should render").not.toBeNull();
+
+ // The header row (icon + name + github/globe/date/version cluster) must be allowed to wrap,
+ // otherwise the non-shrinkable right cluster overflows the narrow column and the version
+ // badge is clipped (e.g. "v0.1.C") when the plugin center shares width with the AI panel.
+ const header = card!.querySelector(":scope > div");
+ expect(header?.classList.contains("flex-wrap"), "grid card header row should wrap").toBe(true);
+
+ // The version badge must not shrink, so it is never squished even when it stays on one line.
+ const versionBadge = [...host.querySelectorAll("[data-stub='Badge']")].find((element) => element.textContent?.trim() === "v3.0.0");
+ expect(versionBadge, "version badge should render").toBeDefined();
+ expect(versionBadge!.classList.contains("shrink-0"), "version badge should be shrink-0").toBe(true);
+ });
+});
+
describe("PluginContributionsPanel single uninstall outcomes", () => {
it("re-reads the installed list and notifies listeners when a single uninstall fails", async () => {
const changed = vi.fn();