From 938220802e952f706cd9b60cfffdcbb390925529 Mon Sep 17 00:00:00 2001 From: Aymeric Rabot Date: Tue, 4 Aug 2026 19:38:17 -0400 Subject: [PATCH] fix(editor): cap the function-tree category grid so the item list stays reachable The root-category grid is `grid shrink-0` with `aspect-square` tiles over `functionTree`, which is embedder-supplied and unbounded. Row count grows with the taxonomy while the item list below is the only scroller, so past about 20 categories at 5 columns the list is pushed out of the panel and nothing can scroll it back. Same shape as the hosted "By room" panel bug in #562. `furnishTools` (the other header in this panel family) is a static 6-item array, so it cannot reach this state; this one can, because the array crosses the embedding boundary. Cap the grid at 40% of panel height and let it scroll independently. No visual change at today's category counts. Co-Authored-By: Claude Opus 5 --- .../sidebar/panels/items-panel/function-tree-panel.tsx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/editor/src/components/ui/sidebar/panels/items-panel/function-tree-panel.tsx b/packages/editor/src/components/ui/sidebar/panels/items-panel/function-tree-panel.tsx index 54b0002ea..f11028a21 100644 --- a/packages/editor/src/components/ui/sidebar/panels/items-panel/function-tree-panel.tsx +++ b/packages/editor/src/components/ui/sidebar/panels/items-panel/function-tree-panel.tsx @@ -118,9 +118,14 @@ export function FunctionTreePanel({
{/* Root nodes as a category grid — icon when available, otherwise a two-letter abbreviation, with the full name in a hover tooltip. - Mirrors the Build tab's tile grid so the two panels read the same. */} + Mirrors the Build tab's tile grid so the two panels read the same. + + `functionTree` is embedder-supplied and unbounded, and these tiles are + `aspect-square`, so row count grows with it while the item list below is + the only scroller. Without the cap a large taxonomy pushes the list out + of the panel entirely and nothing can scroll it back. */} -
+
{functionTree.map((root) => { const isActive = activeRoot?.slug === root.slug return (