@namespace SufiChain.SufiBlazor.Components.Overlays
@implements IDisposable
@inject IJSRuntime JSRuntime
@if (_isOpen)
{
}
@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; }
}