diff --git a/packages/plugins-ui/src/plugin-card.tsx b/packages/plugins-ui/src/plugin-card.tsx index 111e297bc..8fcfaffbf 100644 --- a/packages/plugins-ui/src/plugin-card.tsx +++ b/packages/plugins-ui/src/plugin-card.tsx @@ -52,9 +52,9 @@ export function PluginCard({ {pluginOutcome(plugin.descriptor.id, plugin.descriptor.displayName)} - - {caption} - + {/* A dense directory row's status column is core information, not + * an overflow item to drop on narrow viewports (CL-6467). */} + {caption} {plugin.status === "not_connected" ? ( // The same single Connect verb the MCP preset rows use — one // idiom for "not connected yet" across the whole gallery, never diff --git a/packages/plugins-ui/src/plugins-gallery.tsx b/packages/plugins-ui/src/plugins-gallery.tsx index 6d4fa9ee0..cc20a439a 100644 --- a/packages/plugins-ui/src/plugins-gallery.tsx +++ b/packages/plugins-ui/src/plugins-gallery.tsx @@ -236,6 +236,14 @@ export function PluginsGallery({
{active === "plugins" ? ( <> +
+

Plugins

+

+ A directory to scan, not tiles to admire — one dense row + per connector, grouped by what it does. Click a row's + name for the full page. +

+
{ expect(container.textContent).toContain("Inherited"); }); + test("the plugins tab renders the list heading and directory sub copy (CL-6467)", () => { + const { container } = renderGallery(); + + const heading = container.querySelector("h1"); + expect(heading?.textContent).toBe("Plugins"); + expect(container.textContent).toContain( + "A directory to scan, not tiles to admire — one dense row per connector, grouped by what it does. Click a row's name for the full page.", + ); + }); + + test("a plugin row's status caption is never hidden — it is a core column, not overflow (CL-6467)", () => { + const { container } = renderGallery(); + + expect(container.textContent).toContain("Connected here"); + const captions = [...container.querySelectorAll("span")].filter( + (span) => span.textContent === "Connected · Connected here", + ); + expect(captions.length).toBeGreaterThan(0); + for (const caption of captions) { + expect(caption.className).not.toContain("hidden"); + } + }); + + test("an empty plugin directory renders no group rows", () => { + const { container } = renderGallery([]); + + expect(container.querySelector(".border.border-border")).toBeNull(); + }); + test("search narrows the plugin grid to matches only", () => { const { container } = renderGallery(PLUGINS, "git");