pax.BlazorChartJs 0.3.4

There is a newer version of this package available.
See the version list below for details.
dotnet add package pax.BlazorChartJs --version 0.3.4
                    
NuGet\Install-Package pax.BlazorChartJs -Version 0.3.4
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="pax.BlazorChartJs" Version="0.3.4" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="pax.BlazorChartJs" Version="0.3.4" />
                    
Directory.Packages.props
<PackageReference Include="pax.BlazorChartJs" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add pax.BlazorChartJs --version 0.3.4
                    
#r "nuget: pax.BlazorChartJs, 0.3.4"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package pax.BlazorChartJs@0.3.4
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=pax.BlazorChartJs&version=0.3.4
                    
Install as a Cake Addin
#tool nuget:?package=pax.BlazorChartJs&version=0.3.4
                    
Install as a Cake Tool

Blazor dotnet wrapper library for ChartJs (v3.9.1)

Getting started

Prerequisites

dotnet 6

Installation

dotnet add package pax.BlazorChartJs

Program.cs: (You can set optional javascript locations here)

    builder.Services.AddChartJs();

Usage

Sample Project pax.BlazorChartJs.sample

<div class="btn-group">
    <button type="button" class="btn btn-primary" @onclick="Randomize">Randomize</button>
    <button type="button" class="btn btn-primary" @onclick="AddDataset">Add Dataset</button>
    <button type="button" class="btn btn-primary" @onclick="AddData">Add Data</button>
    <button type="button" class="btn btn-primary" @onclick="RemoveLastDataset">Remove Dataset</button>
    <button type="button" class="btn btn-primary" @onclick="RemoveLastDataFromDatasets">Remove Data</button>
</div>

<div class="w-75">
    <ChartComponent @ref="chartComponent" OnEventTriggered="LabelClicked" ChartJsConfig="chartJsConfig"></ChartComponent>
</div>

<div>
    @if (!String.IsNullOrEmpty(labelClicked))
    {
        <p>
            Label clicked: @labelClicked
        </p>
    }
</div>

@code {
    ChartComponent? chartComponent;
    ChartJsConfig chartJsConfig = null!;
    private string? labelClicked;

    protected override void OnInitialized()
    {
        chartJsConfig = new()
            {
                Type = ChartType.bar,
                Data = new ChartJsData()
                {
                    Labels = new List<string>()
                    {
                        "Red", "Blue", "Yellow", "Green", "Purple", "Orange"
                    },
                    Datasets = new List<ChartJsDataset>()
                    {
                        new BarDataset()
                        {
                            Label = "# of Votes",
                            Data = new List<object>() { 12, 19, 3, 5, 2, 3 },
                            BackgroundColor = new IndexableOption<string>(new List<string>()
                            {
                                "rgba(255, 99, 132, 0.2)",
                                "rgba(54, 162, 235, 0.2)",
                                "rgba(255, 206, 86, 0.2)",
                                "rgba(75, 192, 192, 0.2)",
                                "rgba(153, 102, 255, 0.2)",
                                "rgba(255, 159, 64, 0.2)",
                            }),
                            BorderColor = new IndexableOption<string>(new List<string>()
                            {
                                "rgba(255, 99, 132, 1)",
                                "rgba(54, 162, 235, 1)",
                                "rgba(255, 206, 86, 1)",
                                "rgba(75, 192, 192, 1)",
                                "rgba(153, 102, 255, 1)",
                                "rgba(255, 159, 64, 1)",
                            }),
                            BorderWidth = new IndexableOption<double>(1)
                        }
                    }
                },
                Options = new ChartJsOptions()
                {
                    Responsive = true,
                    MaintainAspectRatio = true,
                    OnClickEvent = true,
                    Scales = new ChartJsOptionsScales()
                    {
                        Y = new LinearAxis()
                        {
                            SuggestedMax = 25
                        }
                    }
                }
            };
        base.OnInitialized();
    }


    private void ShowChart()
    {
        chartComponent?.DrawChart();
    }

    private void LabelClicked(ChartJsEvent chartJsEvent)
    {
        if (chartJsEvent is ChartJsLabelClickEvent labelClickEvent)
        {
            labelClicked = labelClickEvent.Label;
        }
    }

    private void AddData()
    {
        var dataAddEventArgs = ChartUtils.GetRandomData(chartJsConfig.Data.Datasets.Count);

        Dictionary<ChartJsDataset, AddDataObject> datas = new();
        for (int i = 0; i < chartJsConfig.Data.Datasets.Count; i++)
        {
            ChartJsDataset dataset = chartJsConfig.Data.Datasets[i];
            datas.Add(dataset,
                new AddDataObject(dataAddEventArgs.Data[i],
                                  null,
                                  dataAddEventArgs.BackgroundColors?[i],
                                  dataAddEventArgs.BorderColors?[i]));
        }
        chartJsConfig.AddData(dataAddEventArgs.Label, null, datas);
    }

    private void Randomize()
    {
        var data = ChartUtils.GetRandomData(chartJsConfig.Data.Datasets.Count,
         chartJsConfig.Data.Labels.Count, -100, 100);

        Dictionary<ChartJsDataset, SetDataObject> chartData = new();

        for (int i = 0; i < chartJsConfig.Data.Datasets.Count; i++)
        {
            var dataset = chartJsConfig.Data.Datasets.ElementAt(i);
            var dataList = data.ElementAt(i);
            chartData.Add(dataset, new SetDataObject(dataList));
        }
        chartJsConfig.SetData(chartData);
    }

    private void AddDataset()
    {
        var dataset = ChartUtils
         .GetRandomDataset(chartJsConfig.Type == null ? ChartType.bar : chartJsConfig.Type.Value,
                           chartJsConfig.Data.Datasets.Count + 1,
                           chartJsConfig.Data.Labels.Count);
        chartJsConfig.AddDataset(dataset);
    }

    private void RemoveLastDataset()
    {
        if (chartJsConfig.Data.Datasets.Any())
        {
            chartJsConfig.RemoveDataset(chartJsConfig.Data.Datasets.Last());
        }
    }

    private void RemoveLastDataFromDatasets()
    {
        chartJsConfig.RemoveData();
    }

Supported Plugins

Known Limitations / ToDo

  • Callbacks
  • InteractionModes
  • DataDecimation

ChangeLog

<details open="open"><summary>v0.3.4</summary>

  • Fix #7 - Axis Ticks JsonConverter
  • Added ChartJsInitEvent which is triggered when the chart finished initializing the first time
  • ScatterChart Sample

</details>

<details><summary>v0.3.3</summary>

  • Fix #6
  • chartComponent.UpdateChartDatasets removed - use chartConfig.SetDatasets() instead
  • Added Hidden option for Datasets

</details>

<details><summary>v0.3.2</summary>

  • Chart update refactoring - Breaking Changes!
  • Chart events refactoring - Breaking Changes!
  • Typescript
  • NuGet udpates

</details>

<details><summary>v0.3.1</summary>

  • Time Scale Chart
  • Optional javascript location options
  • ChartJs API calls
  • bugfixes
  • refactoring

</details>

<details><summary>v0.3.0</summary>

  • IndexableOption - Breaking Change!

</details>

<details><summary>v0.2.0</summary>

  • Events
  • Custom Plugin Sample
  • ChartJs API calls

</details>

<details><summary>v0.1.3</summary>

  • Nuget Package

</details>

<details><summary>v0.1.2</summary>

  • RadarChart

</details>

<details><summary>v0.1.1</summary>

  • Readme

</details>

<details><summary>v0.1.0</summary>

  • Init

</details>

Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on pax.BlazorChartJs:

Package Downloads
NarcRazor

Generic, accessible and themeable Razor components for Blazor applications.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.9.1 391 6/13/2026
0.9.0 313 5/27/2026
0.9.0-preview2 113 5/22/2026
0.9.0-preview 104 5/21/2026
0.8.8 212 5/18/2026
0.8.7 450 5/3/2026
0.8.6 697 3/21/2026
0.8.6-rc2 351 10/23/2025
0.8.6-rc1 272 9/23/2025
0.8.5 19,785 10/19/2024
0.8.4 1,618 8/24/2024
0.8.3 2,215 3/4/2024
0.8.3-rc1 175 2/29/2024
0.8.2 1,322 12/6/2023
0.8.1 312 11/28/2023
0.8.0 258 11/28/2023 0.8.0 is deprecated because it has critical bugs.
0.8.0-rc2.0 171 11/15/2023
0.6.3 450 11/28/2023
0.6.2 254 11/28/2023 0.6.2 is deprecated because it has critical bugs.
0.3.4 1,729 9/30/2022
Loading failed