Per-widget action menu (refresh, maximize, duplicate, remove) #27
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
A
GridStackItemcurrently offers exactly two affordances: the drag grip and the close button (added in #14). Everything else a dashboard widget normally does — refresh, expand to fullscreen, export, duplicate — has nowhere to live.Proposal
Add a kebab/overflow menu next to the grip:
Implementation note: the drag handle and close button are already siblings of
.grid-stack-item-content, deliberately outside it because the content wrapper isoverflow: autoand anything inside it would scroll out of view. A third sibling follows the same pattern. The menu must sit outside theDRAG_HANDLE_CLASSselector so opening it never starts a drag — same reasoning as the close button.Menu items should be individually enableable, since not every widget type supports every action.
Acceptance criteria
role="button"/tabindex="0"; match that standard).Depends on
#23 for refresh to be non-janky.
Scope
Medium.
PR offen: #37
Umgesetzt: Overflow-Menü als drittes Geschwister-Element neben Griff und Close-Button, mit Refresh / Maximize / Duplicate / Remove — pro Widget einzeln freischaltbar (
setActions/setActionEnabled). Maximieren setzt nur eine CSS-Klasse, diegs-*-Attribute bleiben unangetastet, damit ist das Wiederherstellen exakt die alte Position. Copy in allen drei Bundles../mvnw testgrün (55 Tests), inkl. neuem Playwright-Test, der am Menü-Button zieht und prüft, dass das Widget stehen bleibt.Export ist nicht Teil des PRs — bleibt beim eigenen Export-Issue.