diff --git a/apps/desktop/src/components/plugins/PluginContributionsPanel.vue b/apps/desktop/src/components/plugins/PluginContributionsPanel.vue index e61bfdee1f..521a2a08fe 100644 --- a/apps/desktop/src/components/plugins/PluginContributionsPanel.vue +++ b/apps/desktop/src/components/plugins/PluginContributionsPanel.vue @@ -1022,7 +1022,7 @@ onBeforeUnmount(() => {
-
+
{{ 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();