# 111 — Legend must scroll instead of overflowing the panel ## Summary `PanelChart`'s recharts `` (`webapp/src/components/ PanelChart.tsx:134`, `:190`) has no height constraint or scroll container. A panel with many series (e.g. a high-cardinality PromQL query, or the post-`squashRows` `MAX_KEPT_SERIES` = 7 kept rows plus "Other") wraps the legend across as many lines as it needs, growing the panel's rendered height and pushing surrounding dashboard layout around rather than staying within the chart's fixed footprint. ## Where - `webapp/src/components/PanelChart.tsx:117`, `:154`, `:176` — each chart type wraps its `` at a fixed `height={220}`, but the `` inside it (`:134`, `:190`) isn't given its own bounded, scrollable region — recharts lays it out in the space left after the plot area, which can push the container's effective rendered height past 220 when the legend wraps to multiple rows. - `webapp/src/components/Dashboards.tsx:46-92` (`PanelPreview`) is the only caller of `PanelChart` today — worth checking that whatever fixed-height/scroll wrapper gets added here doesn't fight with `PanelPreview`'s own loading/error states (`:85-90`), which render outside `PanelChart` at a different fixed height (`h-48`). ## Direction - recharts' `` supports a `wrapperStyle` prop (already used for `fontSize`, `:134`/`:190`) — extending it with a fixed `maxHeight` and `overflowY: 'auto'` is the natural fix and avoids building a custom legend renderer just for this. - Verify this doesn't conflict with the click-to-focus work in [[110-legend-click-to-focus-series]] — that ticket also touches the `` props (`onClick`, `formatter`) on these same two call sites, so land whichever lands second by rebasing onto the other's `` props rather than both independently restructuring it. - Decide a concrete max height (e.g. two or three legend rows' worth) that keeps the panel's total footprint predictable in a dashboard grid; check `Dashboards.tsx`'s panel grid/card layout for whatever existing panel height convention should inform the number. ## Scope - Line and pie charts only, matching where `` already renders — same boundary as [[110-legend-click-to-focus-series]]. - Out of scope: virtualizing the legend list for very large series counts — `squashRows` (`PanelChart.tsx:50-57`) already caps bar/pie series at `MAX_KEPT_SERIES` (7) + "Other", and line charts have no equivalent cap today, but adding one is a separate concern from making the legend scrollable.