You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
PR #538 (#535) added duplicate, widen and expand to a Dashboard panel tile's
head. Together with the drag grip and the delete button that were already there,
the head now carries five controls sharing one flex row with the tile title —
and every action is flex-shrink: 0, so the title ellipsizes away first. On a
tile a single grid column wide (≈93px at twelve columns) there is no row left to
compete for.
A second, independent problem: the action set is not consistent between
Dashboard styles. Delete is gated twice to the grafana-grid engine — a CSS
ancestor scope (.dash-gg-grid .dash-gg-tile:hover .dash-gg-del) and an activeEngine === 'grafana-grid' check inside its own click handler — so Report, 2 columns and 3 columns have no delete at all, and a flow KPI band
member has neither delete nor widen under any style.
Behaviour
Mode
Head
Edit
grip · title · widen · ⋯
View
unchanged — the single direct expand icon, no menu
The ⋯ menu always lists all four actions, in the design's order, with remove
last behind a separator: Duplicate panel, Widen (carrying widenLabel's
dynamic destination text), Open in Workbench and run, Remove tile. A row
that cannot run is listed and disabled with a sentence saying why — a menu whose
vocabulary changed with the layout style would teach the user nothing, and the row
is itself the place to explain. This reverses #535's "nothing to open means no
control, not a disabled one" for the menu only; the inline widen keeps that rule,
because a bare icon has only a tooltip.
Widen keeps an inline button as well: it is the one size adjustment users make
constantly (#535), and it is the one a narrow tile can withdraw. A CSS container
query on the tile head hides it below ~236px of head content box (≈260px of tile),
where the ellipsized title has nothing left to give. Its menu row stays, so widen
is never unreachable.
Remove becomes engine-independent by construction. It also absorbs #537 — see
below — because shipping delete into three more styles while it orphaned a query
would multiply that bug's blast radius.
Scope notes
Closes Tile-header delete should remove the panel’s owned query atomically #537. The tile-header trash dispatched the document-only remove-tile command, which leaves workspace.queries untouched. Since Separate Library queries from dashboard-owned query copies #427
makes every panel tile the sole owner of a saved-query copy, that left the copy
with zero owners — which is exactly what makes a query a Library query — so a
deleted panel reappeared as an apparently standalone Library entry. It now uses
the same confirmed, ownership-proven, two-resource path the Dashboards tree
does, and fails closed for a missing, shared, ambiguous, retargeted or non-panel
query.
Problem
PR #538 (#535) added duplicate, widen and expand to a Dashboard panel tile's
head. Together with the drag grip and the delete button that were already there,
the head now carries five controls sharing one flex row with the tile title —
and every action is
flex-shrink: 0, so the title ellipsizes away first. On atile a single grid column wide (≈93px at twelve columns) there is no row left to
compete for.
A second, independent problem: the action set is not consistent between
Dashboard styles. Delete is gated twice to the grafana-grid engine — a CSS
ancestor scope (
.dash-gg-grid .dash-gg-tile:hover .dash-gg-del) and anactiveEngine === 'grafana-grid'check inside its own click handler — soReport, 2 columns and 3 columns have no delete at all, and a flow KPI band
member has neither delete nor widen under any style.
Behaviour
grip · title · widen · ⋯The
⋯menu always lists all four actions, in the design's order, with removelast behind a separator: Duplicate panel, Widen (carrying
widenLabel'sdynamic destination text), Open in Workbench and run, Remove tile. A row
that cannot run is listed and disabled with a sentence saying why — a menu whose
vocabulary changed with the layout style would teach the user nothing, and the row
is itself the place to explain. This reverses #535's "nothing to open means no
control, not a disabled one" for the menu only; the inline widen keeps that rule,
because a bare icon has only a tooltip.
Widen keeps an inline button as well: it is the one size adjustment users make
constantly (#535), and it is the one a narrow tile can withdraw. A CSS container
query on the tile head hides it below ~236px of head content box (≈260px of tile),
where the ellipsized title has nothing left to give. Its menu row stays, so widen
is never unreachable.
Remove becomes engine-independent by construction. It also absorbs #537 — see
below — because shipping delete into three more styles while it orphaned a query
would multiply that bug's blast radius.
Scope notes
remove-tilecommand, which leavesworkspace.queriesuntouched. Since Separate Library queries from dashboard-owned query copies #427makes every panel tile the sole owner of a saved-query copy, that left the copy
with zero owners — which is exactly what makes a query a Library query — so a
deleted panel reappeared as an apparently standalone Library entry. It now uses
the same confirmed, ownership-proven, two-resource path the Dashboards tree
does, and fails closed for a missing, shared, ambiguous, retargeted or non-panel
query.
⋯from everyDashboards-tree row on the grounds that nothing a row can do should hide behind
a second press. That holds for rows — two controls in a fixed-width side pane —
and is not reopened; a tile head is a different surface. Recorded in the ADR-0003
addendum,
CHANGELOG.md, and roadmap Roadmap to 1.0.0 #68.membership normalisation and
spec.favoritemirroring it defined are unchanged;they run inside the atomic transform).
shared is now unremovable from any surface — Tile-header delete should remove the panel’s owned query atomically #537 requires fail-closed) and
A two-resource write (duplicate / remove panel) silently drops Full view #543 (a two-resource write drops the transient Full view, pre-existing since
feat(#535): duplicate, widen and expand actions on a panel tile head #538's duplicate).
Acceptance
⋯; View head unchanged.and remove separated and last.
with the panel's owned query, behind a confirmation, failing closed.
menu row remaining; proven in a real browser.
⋯stays visible for its own menu's lifetime (aria-expanded), and themenu does not overflow the viewport's right edge.
npm testgreen with the per-file coverage floors; e2e on all three engines.