All Projects → stavroskasidis → Blazorcontextmenu

stavroskasidis / Blazorcontextmenu

Licence: mit
A context menu component for Blazor !

Projects that are alternatives of or similar to Blazorcontextmenu

Modal
A powerful and customizable modal implementation for Blazor applications.
Stars: ✭ 406 (+57.98%)
Mutual labels:  nuget, razor
Toast
A JavaScript free toast library for Blazor and Razor Component applications
Stars: ✭ 296 (+15.18%)
Mutual labels:  nuget, razor
Menu
A JavaScript free menu library for Blazor and Razor Components applications.
Stars: ✭ 118 (-54.09%)
Mutual labels:  nuget, razor
Chartjs.blazor
Brings Chart.js charts to Blazor
Stars: ✭ 402 (+56.42%)
Mutual labels:  nuget, razor
Blazor.PersianDatePicker
A free JavaScript Jalali (Persian) and Gregorian (Miladi) dual datepicker library for Blazor applications
Stars: ✭ 40 (-84.44%)
Mutual labels:  nuget, razor
OpenSleigh
OpenSleigh is a Saga management library for .NET Core.
Stars: ✭ 198 (-22.96%)
Mutual labels:  nuget
PackageReferenceUpgrader
A VS2017 Extension that helps legacy apps migrate off of packages.config.
Stars: ✭ 27 (-89.49%)
Mutual labels:  nuget
cv4pve-api-dotnet
Proxmox VE Client API .Net C#
Stars: ✭ 25 (-90.27%)
Mutual labels:  nuget
Setup-Nuget
Set up your GitHub Actions workflow with the latest version of Nuget.exe CLI tool
Stars: ✭ 27 (-89.49%)
Mutual labels:  nuget
jsPanel3
A jQuery Plugin to create highly configurable floating panels, modals, tooltips, hints/notifiers or contextmenus for use in a backend solution and other web applications.
Stars: ✭ 89 (-65.37%)
Mutual labels:  contextmenu
Pushover.NET
📣 .NET Wrapper for the Pushover API
Stars: ✭ 27 (-89.49%)
Mutual labels:  nuget
AspNetCore.Identity.RavenDb
RavenDB user/role persistent store for ASP.NET Core identity provider
Stars: ✭ 17 (-93.39%)
Mutual labels:  nuget
King.Azure.Imaging
Image API & processing for Azure Web Apps
Stars: ✭ 20 (-92.22%)
Mutual labels:  nuget
Razor.SweetAlert2
A Razor class library for interacting with SweetAlert2
Stars: ✭ 98 (-61.87%)
Mutual labels:  razor
LeagueReplayParser
C# library which can read some data from a .rofl file, and start a replay in the client. (no longer actively maintained)
Stars: ✭ 20 (-92.22%)
Mutual labels:  nuget
MojangSharp
A C# wrapper library for Mojang API (no longer actively maintained)
Stars: ✭ 38 (-85.21%)
Mutual labels:  nuget
NZXTSharp
The one-stop C# SDK for NZXT devices.
Stars: ✭ 48 (-81.32%)
Mutual labels:  nuget
McSherry.SemanticVersioning
A semantic versioning library for .NET 5, Core, FX, and Standard with version range support.
Stars: ✭ 16 (-93.77%)
Mutual labels:  nuget
tanka-graphql
GraphQL server and execution libraries
Stars: ✭ 57 (-77.82%)
Mutual labels:  nuget
NupkgWrench
Command line tool for reading and modifying nupkgs
Stars: ✭ 23 (-91.05%)
Mutual labels:  nuget

Blazor Context Menu

Build status Nuget (with prereleases) Nuget Donate

A context menu component for Blazor!

demo-img

Samples / Demo

You can find a live demo here.

Installation

1. Add the nuget package in your Blazor project

> dotnet add package Blazor.ContextMenu

OR

PM> Install-Package Blazor.ContextMenu

Nuget package page can be found here.

2. Add the following line in your Blazor project's startup class

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddBlazorContextMenu();
    }
}

3. Add the following line in your _Imports.razor

@using BlazorContextMenu

4. Reference the static files

Add the following static file references in your _Host.cshtml (server-side blazor) or in your index.html (client-side blazor). Make sure that there is a call to app.UseStaticFiles(); in your server project's Startup.cs.

<link href="_content/Blazor.ContextMenu/blazorContextMenu.min.css" rel="stylesheet" />
<script src="_content/Blazor.ContextMenu/blazorContextMenu.min.js"></script>

Basic usage

<ContextMenu Id="myMenu">
    <Item OnClick="@OnClick">Item 1</Item>
    <Item OnClick="@OnClick">Item 2</Item>
    <Item OnClick="@OnClick" Enabled="false">Item 3 (disabled)</Item>
    <Seperator />
    <Item>Submenu
        <SubMenu>
            <Item OnClick="@OnClick">Submenu Item 1</Item>
            <Item OnClick="@OnClick">Submenu Item 2</Item>
        </SubMenu>
    </Item>
</ContextMenu>

<ContextMenuTrigger MenuId="myMenu">
    <p>Right-click on me to show the context menu !!</p>
</ContextMenuTrigger>

@code{
    void OnClick(ItemClickEventArgs e)
    {
        Console.WriteLine($"Item Clicked => Menu: {e.ContextMenuId}, MenuTarget: {e.ContextMenuTargetId}, IsCanceled: {e.IsCanceled}, MenuItem: {e.MenuItemElement}, MouseEvent: {e.MouseEvent}");
    }
}

Customization

Templates

You can create templates in the configuration that you can then apply to context menus.

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddBlazorContextMenu(options =>
        {
            options.ConfigureTemplate("myTemplate", template =>
            {
                template.MenuCssClass = "my-menu";
                template.MenuItemCssClass = "my-menu-item";
                //...
            });
        });
    }
}
<style>
    .my-menu { color: darkblue; }
    
    /* using css specificity to override default background-color */
    .my-menu .my-menu-item { background-color: #ffb3b3;}
    .my-menu .my-menu-item:hover { background-color: #c11515;} 
</style>

<ContextMenu Id="myMenu" Template="myTemplate">
    <Item>Item 1</Item>
    <Item>Item 2</Item>
</ContextMenu>

You can also change the default template that will apply to all context menus (unless specified otherwise).

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddBlazorContextMenu(options =>
        {
            //Configures the default template
            options.ConfigureTemplate(defaultTemplate =>
            {
                defaultTemplate.MenuCssClass = "my-default-menu";
                defaultTemplate.MenuItemCssClass = "my-default-menu-item";
                //...
            });

            options.ConfigureTemplate("myTemplate", template =>
            {
                template.MenuCssClass = "my-menu";
                template.MenuItemCssClass = "my-menu-item";
                //...
            });
        });
    }
}

Explicit customization

All components expose CssClass parameters that you can use to add css classes. These take precedence over any template configuration.

<ContextMenu Id="myMenu" CssClass="my-menu">
    <Item CssClass="red-menuitem">Red looking Item</Item>
    <Item>Default looking item</Item>
</ContextMenu>

Overriding default css

You can override the default css classes completely in the following ways (not recommended unless you want to achieve advanced customization).

Override default css using templates

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddBlazorContextMenu(options =>
        {
            //This will override the default css classes for the default template
            options.ConfigureTemplate(defaultTemplate =>
            {
                defaultTemplate.DefaultCssOverrides.MenuCssClass  = "custom-menu";
                defaultTemplate.DefaultCssOverrides.MenuItemCssClass= "custom-menu-item";
                defaultTemplate.DefaultCssOverrides.MenuItemDisabledCssClass = "custom-menu-item--disabled";
                //...
            });
        });
    }
}

Using the OverrideDefaultXXX parameters on components. These take precedence over the template overrides.

<ContextMenu Id="myMenu" OverrideDefaultCssClass="custom-menu">
    <Item OverrideDefaultCssClass="custom-menu-item" OverrideDefaultDisabledCssClass="custom-menu-item--disabled">Item 1</Item>
    <Item OverrideDefaultCssClass="custom-menu-item" OverrideDefaultDisabledCssClass="custom-menu-item--disabled">Item 2</Item>
</ContextMenu>

⚠️ Breaking changes ⚠️

Upgrading from 0.19 to 0.20
  • Replaced the ContextMenuTriggerId in events with the reference to the actual ContextMenuTrigger
Upgrading from 0.16 to 0.17
  • Removed the deprecated automatic embed of resources in blazor client-side. You must reference the static files as described in the "Installation" section.
  • The static resources path has changed in preview 7 from _content/blazorcontextmenu/ to _content/Blazor.ContextMenu/
Upgrading from 0.15 to 0.16
  • Only for Blazor Server-Side projects: You must reference the static files as described in the "Installation" section.
Upgrading from 0.12 to 0.13
  • Remove the @addTagHelper *, BlazorContextMenu as it is no longer needed.
Upgrading from 0.11 to 0.12
  • The following handlers are removed as they are no longer needed: ClickAsync, EnabledHandlerAsync, VisibleHandlerAsync.
  • The Click handler has been renamed to OnClick to keep consistency with the framework/suggested event names.
  • The MenuItemClickEventArgs class has been renamed to the more appropriate ItemClickEventArgs.
  • The EnabledHandler and VisibleHandler parameters have been removed and replaced with the new OnAppearing event handler.
  • The MenuItemEnabledHandlerArgs and MenuItemVisibleHandlerArgs classes have been removed and replaced with the new ItemAppearingEventArgs.
Upgrading from 0.10 to 0.11
  • The CssOverrides API is removed and override configuration is moved into templates. The DefaultCssOverrides of the ConfigureTemplate API must be used.
Upgrading from 0.5 to 0.6
  • You must add in Startup.ConfigureServices of your Blazor client side project the following line services.AddBlazorContextMenu();
  • The BlazorContextMenu.BlazorContextMenuDefaults API is removed. Use the API provided in the service configuration.
Upgrading from 0.1 to 0.2
  • Rename "MenuItem" to "Item".
  • Rename "MenuSeperator" to "Seperator".
  • Replace "MenuItemWithSubmenu" with a regular "Item" component.

Release Notes

1.9
  • Added ZIndex support in ContextMenu component (default 1000). Contributed by grishat.
  • Added autohide support in ContextMenu when window is resizing. Contributed by grishat.
1.8
  • Added StopPropagation parameter on ContextMenuTrigger (default true).
1.7
1.6
  • Added contextual render fragment for ContextMenu, exposing a @context variable that simplifies advanced scenarios.
1.5
  • Fixed a bug when opening multiple menus with different ids.
1.4
  • Updated to 3.1 release.
  • Fix for #72.
1.3
  • Added menu OnHiding event #68.
1.2
1.1
  • Added the ability to show/hide a menu from code. (#63)
1.0
  • Updated to 3.0 release.
0.21
  • Updated to 3.0 preview 9.
0.20
  • Added ContextMenuTrigger data, that can be accessed from event args.
  • Replaced the ContextMenuTriggerId in event args with the reference to the actual ContextMenuTrigger
0.19
  • Fix for Blazor server-side prerendering: #53.
0.18
  • Updated to 3.0 preview 8.
  • Added attribute splatting to components.
0.17
  • Updated to 3.0 preview 7.
  • Added double click mouse trigger.
  • Removed the deprecated automatic embed of resources in blazor client-side. You now have to reference the static files just like the server-side blazor projects.
0.16
  • Updated to 3.0 preview 6.
0.15
  • Added new OnAppearing event to ContextMenu conponent, that can be used to prevent the menu from showing.
  • Added the WrapperTag parameter to the ContextMenuTrigger component, that can be used to change the ContextMenuTrigger component's element tag (default: div).
  • Added the Id parameter to the ContextMenuTrigger component.
0.14
  • Updated to 3.0 preview 5.
0.13
  • Updated to 3.0 preview 4.
0.12
  • Updated to Blazor 0.9.0.
  • Changed event handlers to the new EventCallback<>. As a consequence the following handlers are no longer needed and they are removed: ClickAsync, EnabledHandlerAsync, VisibleHandlerAsync.
  • Fixed menu display position when it doesn't fit on screen.
  • The Click handler has been renamed to OnClick to keep consistency with the framework/suggested event names.
  • The MenuItemClickEventArgs class has been renamed to the more appropriate ItemClickEventArgs.
  • The EnabledHandler and VisibleHandler parameters have been removed and replaced with the new OnAppearing event handler.
  • The MenuItemEnabledHandlerArgs and MenuItemVisibleHandlerArgs classes have been removed and replaced with the new ItemAppearingEventArgs.
0.11
  • Updated to Blazor 0.8.0.
  • Added animations.
  • Default css overrides are now part of the Templates API so that you can easily have multiple custom overriden menus.
  • Razor Components are not loading the static files included in the library => #6349. As a workaround you can download and reference directly the .css and .js from the /BlazorContextMenu/content folder until the issue is resolved.
0.10
  • Added proper support for Razor Components (aka server-side Blazor).
0.9
  • Updated to Blazor 0.7.0.
  • Removed some js interop in favor of the new Cascading Values feature.
0.8
  • Updated to Blazor 0.6.0.
0.7
  • Added left-click trigger support.
0.6
  • Updated to Blazor 0.5.1.
  • Changed configuration setup.
  • Added templates.
0.5
  • Updated to Blazor 0.5.0.
0.4
  • Added minification for included css/js.
  • Updated to Blazor 0.4.0.
0.3
  • Added dynamic EnabledHandlers for menu items.
  • Added Active and dynamic ActiveHandlers for menu items.
0.2
  • Updated to Blazor 0.3.0.
  • Renamed "MenuItem" to "Item" to avoid conflicts with the html element "menuitem".
  • Renamed "MenuSeperator" to "Seperator" for consistency.
  • Removed "MenuItemWithSubmenu" (just use a regular "Item").
0.1
  • Initial release.

Special Thanks

This project was inspired by https://github.com/fkhadra/react-contexify and https://github.com/vkbansal/react-contextmenu

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].