2.0 KiB
2.0 KiB
engineer — PM Insights: Alert categories + Watch list as accordions
Date: 2026-08-29 · v2.3.1 · branch feature/insights-accordions
Built
- Client (
pages/Insights/index.tsx): newSection({title, count, open, onToggle, children})accordion — a<button className={sectionHead} aria-expanded aria-controls>(chevron + title + a category-count badge) over a<div id={bodyId} className={grid} hidden={!open}>. The two sections Alert categories and Watch list are wrapped in it. Addedsectionsstate ({alerts, watch}, both default open) +toggleSection. The per-cardopenstate (which ticket group is expanded) and the Per-PM roll-up table are untouched — Per-PM stays a plain<h2>(not requested). - Icons (
components/icons/index.tsx): addedChevronIcon(right caret, sharedbase()pattern), rotated 90° via CSS when its section is open. - Styles (
Insights.module.scss):.section/.sectionHead/.chev/.sectionTitle/.sectionCountreusing the old.h2typographic treatment;.sectionHead[aria-expanded='true'] .chev { transform: rotate(90deg) }; and.grid[hidden] { display: none }— required, since.grid { display: grid }would otherwise beat the nativehiddenattribute (specificity 0,2,0 vs 0,1,0). - Version/docs: root + client
package.json2.3.0 → 2.3.1; CHANGELOG[2.3.1].
Verified
- client
tsc --noEmitclean (no errors outside node_modules);vite buildOK (139 modules). - verifier PASS (see
verifier-log.md2026-08-29 12:07): independently reproduced tsc + build; grepped the compiled bundle to confirm._grid…[hidden]{display:none}co-exists with._grid…{display:grid}and wins on specificity and source order;aria-controlsalways resolves (body ishidden, not unmounted); slugsinsights-alert-categories/insights-watch-listare distinct; per-card expand byte-for-byte unchanged → no regression; nopackage.jsondep change.