@namespace SufiChain.SufiBlazor.Components.Overlays @implements IDisposable @inject IJSRuntime JSRuntime
@ChildContent
@if (_isOpen) {
@MenuContent
} @code { private ElementReference _triggerRef; private bool _isOpen; private double _x; private double _y; /// /// Trigger content. /// [Parameter] public RenderFragment? ChildContent { get; set; } /// /// Menu content. /// [Parameter] public RenderFragment? MenuContent { get; set; } /// /// Whether the context menu is disabled. /// [Parameter] public bool Disabled { get; set; } /// /// Callback before menu opens. /// [Parameter] public EventCallback OnOpen { get; set; } /// /// Callback when menu closes. /// [Parameter] public EventCallback OnClose { get; set; } /// /// Additional CSS classes. /// [Parameter] public string? Class { get; set; } private async Task OnContextMenu(MouseEventArgs e) { if (Disabled) return; var args = new SbContextMenuEventArgs { X = e.ClientX, Y = e.ClientY }; await OnOpen.InvokeAsync(args); if (!args.Cancel) { _x = e.ClientX; _y = e.ClientY; _isOpen = true; } } /// /// Close the context menu. /// public async Task Close() { _isOpen = false; await OnClose.InvokeAsync(); } public void Dispose() { // Cleanup if needed } } /// /// Context menu event arguments. /// public class SbContextMenuEventArgs { /// /// X coordinate. /// public double X { get; set; } /// /// Y coordinate. /// public double Y { get; set; } /// /// Whether to cancel opening the menu. /// public bool Cancel { get; set; } }