From af4985f8af7307feafe3fedec150bc30bdc1eb74 Mon Sep 17 00:00:00 2001 From: John Haugabook Date: Tue, 27 Oct 2026 20:04:09 -0400 Subject: [PATCH 1/6] website-feature: widen catalog grids below the filter sidebar Rows that start beside the filter sidebar keep their two columns. Once a row would start below the end of the filter list, the remaining cards continue in a grid across the whole catalog frame (three columns in the 1280px frame). Applies to the five resource catalogs and the Learning Hub. - useCatalogSplit measures where the filter list ends and splits the cards - each page's card markup moves into a render function both grids share - wide grid CSS in the six modules - page-width-regression.mjs includes the new frame in its frame rule Co-Authored-By: Claude Opus 5.5 --- website/scripts/page-width-regression.mjs | 1 + .../src/components/brand/AgentsCatalog.tsx | 151 ++++++----- .../components/brand/ExtensionsCatalog.tsx | 235 ++++++++++-------- .../components/brand/InstructionsCatalog.tsx | 163 +++++++----- .../src/components/brand/LearningHubIndex.tsx | 105 +++++--- .../src/components/brand/PluginsCatalog.tsx | 135 ++++++---- .../src/components/brand/SkillsCatalog.tsx | 129 ++++++---- .../components/brand/styles/agents.module.css | 40 +++ .../brand/styles/extensions.module.css | 40 +++ .../brand/styles/instructions.module.css | 40 +++ .../learning-hub-copilot-app.module.css | 40 +++ .../brand/styles/plugins.module.css | 40 +++ .../components/brand/styles/skills.module.css | 40 +++ .../src/components/brand/useCatalogSplit.ts | 75 ++++++ 14 files changed, 868 insertions(+), 366 deletions(-) create mode 100644 website/src/components/brand/useCatalogSplit.ts diff --git a/website/scripts/page-width-regression.mjs b/website/scripts/page-width-regression.mjs index 861ba58a6e..120cb20fba 100644 --- a/website/scripts/page-width-regression.mjs +++ b/website/scripts/page-width-regression.mjs @@ -15,6 +15,7 @@ const frameSelector = [ '[class*="sectionInner"]', '[class*="_catalog_"]', '[class*="catalogHeader"]', '[class*="recommendedInner"]', '[class*="ctaFrameInner"]', '#resources [class*="Grid-module__Grid___"]', + '[class*="_wideFrame_"]', ].join(", "); const browser = await chromium.launch(); diff --git a/website/src/components/brand/AgentsCatalog.tsx b/website/src/components/brand/AgentsCatalog.tsx index 04c1871305..88ea916474 100644 --- a/website/src/components/brand/AgentsCatalog.tsx +++ b/website/src/components/brand/AgentsCatalog.tsx @@ -31,6 +31,7 @@ import { daysSince, toggleValue, updatedBuckets, updatedBucketOf } from "./catal import { pageHref } from "./pageHref"; import { downloadFile } from "./resourceActions"; import { useCatalogPageFocus } from "./useCatalogPageFocus"; +import { useCatalogSplit } from "./useCatalogSplit"; import type { SearchItem } from "./searchIndex"; import styles from "./styles/agents.module.css"; @@ -201,6 +202,69 @@ export function AgentsCatalog({ const page = Math.min(currentPage, pageCount); const visibleAgents = sortedAgents.slice((page - 1) * pageSize, page * pageSize); + const { filterNavRef, sideGridRef, beside, below } = + useCatalogSplit(visibleAgents); + + const renderAgentCard = (agent: AgentItem) => ( + + + {agent.title} + + + {agent.description} + + + +
+ + + Install + + + + VS Code + + + VS Code Insiders + + + + + +
+
+ ); + return ( -