diff --git a/osu.Game/Screens/Edit/Compose/Components/BlueprintContainer.cs b/osu.Game/Screens/Edit/Compose/Components/BlueprintContainer.cs
index d56dc176f6..5fdd7c0e81 100644
--- a/osu.Game/Screens/Edit/Compose/Components/BlueprintContainer.cs
+++ b/osu.Game/Screens/Edit/Compose/Components/BlueprintContainer.cs
@@ -11,11 +11,14 @@ using osu.Framework.Allocation;
using osu.Framework.Bindables;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
+using osu.Framework.Graphics.Cursor;
using osu.Framework.Graphics.Primitives;
+using osu.Framework.Graphics.UserInterface;
using osu.Framework.Input;
using osu.Framework.Input.Bindings;
using osu.Framework.Input.Events;
using osu.Game.Graphics.UserInterface;
+using osu.Game.Resources.Localisation.Web;
using osu.Game.Rulesets.Edit;
using osuTK;
using osuTK.Input;
@@ -26,7 +29,7 @@ namespace osu.Game.Screens.Edit.Compose.Components
/// A container which provides a "blueprint" display of items.
/// Includes selection and manipulation support via a .
///
- public abstract class BlueprintContainer : CompositeDrawable, IKeyBindingHandler
+ public abstract class BlueprintContainer : CompositeDrawable, IKeyBindingHandler, IHasContextMenu
where T : class
{
protected DragBox DragBox { get; private set; }
@@ -534,5 +537,30 @@ namespace osu.Game.Screens.Edit.Compose.Components
}
#endregion
+
+ #region Context Menu
+
+ public MenuItem[] ContextMenuItems
+ {
+ get
+ {
+ var selectedBlueprints = SelectionHandler.SelectedBlueprints;
+ if (!selectedBlueprints.Any(b => b.IsHovered))
+ return Array.Empty