diff --git a/Plugins/UI/default-scriptbee-charts/federation.config.mjs b/Plugins/UI/default-scriptbee-charts/federation.config.mjs
index df8e503f..2b20e1e6 100644
--- a/Plugins/UI/default-scriptbee-charts/federation.config.mjs
+++ b/Plugins/UI/default-scriptbee-charts/federation.config.mjs
@@ -7,6 +7,7 @@ export default withNativeFederation({
'./BarChart': './src/app/components/bar-chart/bar-chart.ts',
'./TreeMap': './src/app/components/tree-map/tree-map.ts',
'./ScatterPlot': './src/app/components/scatter-plot/scatter-plot.ts',
+ './HeatmapChart': './src/app/components/heatmap-chart/heatmap-chart.ts',
},
shared: {
...shareAll({ singleton: true, strictVersion: false, requiredVersion: 'auto' }),
diff --git a/Plugins/UI/default-scriptbee-charts/src/app/app.html b/Plugins/UI/default-scriptbee-charts/src/app/app.html
index f96b1a37..4333c6fe 100644
--- a/Plugins/UI/default-scriptbee-charts/src/app/app.html
+++ b/Plugins/UI/default-scriptbee-charts/src/app/app.html
@@ -9,6 +9,7 @@
+
@@ -22,6 +23,9 @@
@case ('scatter-plot') {
}
+ @case ('heatmap-chart') {
+
+ }
@case ('generic-echarts') {
}
diff --git a/Plugins/UI/default-scriptbee-charts/src/app/app.ts b/Plugins/UI/default-scriptbee-charts/src/app/app.ts
index 72339f53..21ca8078 100644
--- a/Plugins/UI/default-scriptbee-charts/src/app/app.ts
+++ b/Plugins/UI/default-scriptbee-charts/src/app/app.ts
@@ -1,15 +1,16 @@
import { Component, computed, inject, model } from '@angular/core';
import { BarChart } from './components/bar-chart/bar-chart';
import { ThemeService } from './services/theme.service';
-import { BarChartInput, ChartParameters, EChartsChartInput, ScatterPlotInput, TreeMapInput } from './types/ChartInput';
+import { BarChartInput, ChartParameters, EChartsChartInput, HeatmapChartInput, ScatterPlotInput, TreeMapInput } from './types/ChartInput';
import { FormsModule } from '@angular/forms';
import { TreeMap } from './components/tree-map/tree-map';
import { ScatterPlot } from './components/scatter-plot/scatter-plot';
import { EchartsChart } from './components/echarts-chart/echarts-chart';
+import { HeatmapChart } from './components/heatmap-chart/heatmap-chart';
@Component({
selector: 'app-root',
- imports: [BarChart, FormsModule, TreeMap, ScatterPlot, EchartsChart],
+ imports: [BarChart, FormsModule, TreeMap, ScatterPlot, EchartsChart, HeatmapChart],
templateUrl: './app.html',
styleUrl: './app.scss',
})
@@ -159,6 +160,262 @@ export class App {
};
});
+ heatmapChartParameters = computed>(() => {
+ const hours = [
+ '12a',
+ '1a',
+ '2a',
+ '3a',
+ '4a',
+ '5a',
+ '6a',
+ '7a',
+ '8a',
+ '9a',
+ '10a',
+ '11a',
+ '12p',
+ '1p',
+ '2p',
+ '3p',
+ '4p',
+ '5p',
+ '6p',
+ '7p',
+ '8p',
+ '9p',
+ '10p',
+ '11p',
+ ];
+
+ const days = ['Saturday', 'Friday', 'Thursday', 'Wednesday', 'Tuesday', 'Monday', 'Sunday'];
+
+ const data = [
+ [0, 0, 5],
+ [0, 1, 1],
+ [0, 2, 0],
+ [0, 3, 0],
+ [0, 4, 0],
+ [0, 5, 0],
+ [0, 6, 0],
+ [0, 7, 0],
+ [0, 8, 0],
+ [0, 9, 0],
+ [0, 10, 0],
+ [0, 11, 2],
+ [0, 12, 4],
+ [0, 13, 1],
+ [0, 14, 1],
+ [0, 15, 3],
+ [0, 16, 4],
+ [0, 17, 6],
+ [0, 18, 4],
+ [0, 19, 4],
+ [0, 20, 3],
+ [0, 21, 3],
+ [0, 22, 2],
+ [0, 23, 5],
+ [1, 0, 7],
+ [1, 1, 0],
+ [1, 2, 0],
+ [1, 3, 0],
+ [1, 4, 0],
+ [1, 5, 0],
+ [1, 6, 0],
+ [1, 7, 0],
+ [1, 8, 0],
+ [1, 9, 0],
+ [1, 10, 5],
+ [1, 11, 2],
+ [1, 12, 2],
+ [1, 13, 6],
+ [1, 14, 9],
+ [1, 15, 11],
+ [1, 16, 6],
+ [1, 17, 7],
+ [1, 18, 8],
+ [1, 19, 12],
+ [1, 20, 5],
+ [1, 21, 5],
+ [1, 22, 7],
+ [1, 23, 2],
+ [2, 0, 1],
+ [2, 1, 1],
+ [2, 2, 0],
+ [2, 3, 0],
+ [2, 4, 0],
+ [2, 5, 0],
+ [2, 6, 0],
+ [2, 7, 0],
+ [2, 8, 0],
+ [2, 9, 0],
+ [2, 10, 3],
+ [2, 11, 2],
+ [2, 12, 1],
+ [2, 13, 9],
+ [2, 14, 8],
+ [2, 15, 10],
+ [2, 16, 6],
+ [2, 17, 5],
+ [2, 18, 5],
+ [2, 19, 5],
+ [2, 20, 7],
+ [2, 21, 4],
+ [2, 22, 2],
+ [2, 23, 4],
+ [3, 0, 7],
+ [3, 1, 3],
+ [3, 2, 0],
+ [3, 3, 0],
+ [3, 4, 0],
+ [3, 5, 0],
+ [3, 6, 0],
+ [3, 7, 0],
+ [3, 8, 1],
+ [3, 9, 0],
+ [3, 10, 5],
+ [3, 11, 4],
+ [3, 12, 7],
+ [3, 13, 14],
+ [3, 14, 13],
+ [3, 15, 12],
+ [3, 16, 9],
+ [3, 17, 5],
+ [3, 18, 5],
+ [3, 19, 10],
+ [3, 20, 6],
+ [3, 21, 4],
+ [3, 22, 4],
+ [3, 23, 1],
+ [4, 0, 1],
+ [4, 1, 3],
+ [4, 2, 0],
+ [4, 3, 0],
+ [4, 4, 0],
+ [4, 5, 1],
+ [4, 6, 0],
+ [4, 7, 0],
+ [4, 8, 0],
+ [4, 9, 2],
+ [4, 10, 4],
+ [4, 11, 4],
+ [4, 12, 2],
+ [4, 13, 4],
+ [4, 14, 4],
+ [4, 15, 14],
+ [4, 16, 12],
+ [4, 17, 1],
+ [4, 18, 8],
+ [4, 19, 5],
+ [4, 20, 3],
+ [4, 21, 7],
+ [4, 22, 3],
+ [4, 23, 0],
+ [5, 0, 2],
+ [5, 1, 1],
+ [5, 2, 0],
+ [5, 3, 3],
+ [5, 4, 0],
+ [5, 5, 0],
+ [5, 6, 0],
+ [5, 7, 0],
+ [5, 8, 2],
+ [5, 9, 0],
+ [5, 10, 4],
+ [5, 11, 1],
+ [5, 12, 5],
+ [5, 13, 10],
+ [5, 14, 5],
+ [5, 15, 7],
+ [5, 16, 11],
+ [5, 17, 6],
+ [5, 18, 0],
+ [5, 19, 5],
+ [5, 20, 3],
+ [5, 21, 4],
+ [5, 22, 2],
+ [5, 23, 0],
+ [6, 0, 1],
+ [6, 1, 0],
+ [6, 2, 0],
+ [6, 3, 0],
+ [6, 4, 0],
+ [6, 5, 0],
+ [6, 6, 0],
+ [6, 7, 0],
+ [6, 8, 0],
+ [6, 9, 0],
+ [6, 10, 1],
+ [6, 11, 0],
+ [6, 12, 2],
+ [6, 13, 1],
+ [6, 14, 3],
+ [6, 15, 4],
+ [6, 16, 0],
+ [6, 17, 0],
+ [6, 18, 0],
+ [6, 19, 0],
+ [6, 20, 1],
+ [6, 21, 2],
+ [6, 22, 2],
+ [6, 23, 6],
+ ].map(function (item) {
+ return [item[1], item[0], item[2] || '-'];
+ });
+
+ return {
+ theme: this.themeService.echartsTheme(),
+ input: {
+ options: {
+ tooltip: {
+ position: 'top',
+ },
+ grid: {
+ height: '50%',
+ top: '10%',
+ },
+ xAxis: {
+ type: 'category',
+ data: hours,
+ splitArea: {
+ show: true,
+ },
+ },
+ yAxis: {
+ type: 'category',
+ data: days,
+ splitArea: {
+ show: true,
+ },
+ },
+ visualMap: {
+ min: 0,
+ max: 10,
+ calculable: true,
+ orient: 'horizontal',
+ left: 'center',
+ bottom: '15%',
+ },
+ },
+ series: [
+ {
+ name: 'Punch Card',
+ data: data,
+ label: {
+ show: true,
+ },
+ emphasis: {
+ itemStyle: {
+ shadowBlur: 10,
+ shadowColor: 'rgba(0, 0, 0, 0.5)',
+ },
+ },
+ },
+ ],
+ },
+ };
+ });
+
genericEChartsParameters = computed>(() => {
return {
theme: this.themeService.echartsTheme(),
diff --git a/Plugins/UI/default-scriptbee-charts/src/app/components/echarts-chart/echarts-chart.ts b/Plugins/UI/default-scriptbee-charts/src/app/components/echarts-chart/echarts-chart.ts
index a68cb7f9..e0568419 100644
--- a/Plugins/UI/default-scriptbee-charts/src/app/components/echarts-chart/echarts-chart.ts
+++ b/Plugins/UI/default-scriptbee-charts/src/app/components/echarts-chart/echarts-chart.ts
@@ -3,9 +3,19 @@ import { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';
import * as echarts from 'echarts';
import { EChartsCoreOption } from 'echarts';
import { ChartParameters, EChartsChartInput } from '../../types/ChartInput';
-import * as ecStat from 'echarts-stat';
+import * as ecStatImport from 'echarts-stat';
+
+type TransformParam = Parameters[0];
+interface EcStatModule {
+ transform: {
+ histogram: TransformParam;
+ regression: TransformParam;
+ clustering: TransformParam;
+ };
+}
+
+const ecStat = (ecStatImport as unknown as { default?: EcStatModule } & EcStatModule).default || (ecStatImport as unknown as EcStatModule);
-// @ts-expect-error update when types ever available
echarts.registerTransform(ecStat.transform.histogram);
@Component({
diff --git a/Plugins/UI/default-scriptbee-charts/src/app/components/heatmap-chart/heatmap-chart.html b/Plugins/UI/default-scriptbee-charts/src/app/components/heatmap-chart/heatmap-chart.html
new file mode 100644
index 00000000..bf3048e2
--- /dev/null
+++ b/Plugins/UI/default-scriptbee-charts/src/app/components/heatmap-chart/heatmap-chart.html
@@ -0,0 +1 @@
+
diff --git a/Plugins/UI/default-scriptbee-charts/src/app/components/heatmap-chart/heatmap-chart.scss b/Plugins/UI/default-scriptbee-charts/src/app/components/heatmap-chart/heatmap-chart.scss
new file mode 100644
index 00000000..e69de29b
diff --git a/Plugins/UI/default-scriptbee-charts/src/app/components/heatmap-chart/heatmap-chart.ts b/Plugins/UI/default-scriptbee-charts/src/app/components/heatmap-chart/heatmap-chart.ts
new file mode 100644
index 00000000..880707bf
--- /dev/null
+++ b/Plugins/UI/default-scriptbee-charts/src/app/components/heatmap-chart/heatmap-chart.ts
@@ -0,0 +1,30 @@
+import { Component, computed, input } from '@angular/core';
+import * as echarts from 'echarts/core';
+import { HeatmapChart as HeatMapComponent } from 'echarts/charts';
+import { GridComponent, LegendComponent, TooltipComponent } from 'echarts/components';
+import { CanvasRenderer } from 'echarts/renderers';
+import { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';
+import { ChartParameters, HeatmapChartInput } from '../../types/ChartInput';
+import { EChartsCoreOption } from 'echarts';
+
+echarts.use([HeatMapComponent, GridComponent, CanvasRenderer, LegendComponent, TooltipComponent]);
+
+@Component({
+ selector: 'app-heatmap-chart',
+ imports: [NgxEchartsDirective],
+ templateUrl: './heatmap-chart.html',
+ styleUrl: './heatmap-chart.scss',
+ providers: [provideEchartsCore({ echarts })],
+})
+export class HeatmapChart {
+ parameters = input.required>();
+
+ options = computed(() => {
+ const input = this.parameters().input;
+
+ return {
+ ...(input.options ?? {}),
+ series: (input.series ?? []).map((s) => ({ ...s, type: 'heatmap' })),
+ };
+ });
+}
diff --git a/Plugins/UI/default-scriptbee-charts/src/app/components/scatter-plot/scatter-plot.ts b/Plugins/UI/default-scriptbee-charts/src/app/components/scatter-plot/scatter-plot.ts
index 4e03413f..62441b48 100644
--- a/Plugins/UI/default-scriptbee-charts/src/app/components/scatter-plot/scatter-plot.ts
+++ b/Plugins/UI/default-scriptbee-charts/src/app/components/scatter-plot/scatter-plot.ts
@@ -4,8 +4,8 @@ import { ScatterChart } from 'echarts/charts';
import { GridComponent, LegendComponent, TooltipComponent } from 'echarts/components';
import { CanvasRenderer } from 'echarts/renderers';
import { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';
-import { EChartsCoreOption } from 'echarts/types/dist/echarts';
import { ChartParameters, ScatterPlotInput } from '../../types/ChartInput';
+import { EChartsCoreOption } from 'echarts';
echarts.use([ScatterChart, GridComponent, CanvasRenderer, LegendComponent, TooltipComponent]);
diff --git a/Plugins/UI/default-scriptbee-charts/src/app/components/tree-map/tree-map.ts b/Plugins/UI/default-scriptbee-charts/src/app/components/tree-map/tree-map.ts
index fe576b72..f171b2cc 100644
--- a/Plugins/UI/default-scriptbee-charts/src/app/components/tree-map/tree-map.ts
+++ b/Plugins/UI/default-scriptbee-charts/src/app/components/tree-map/tree-map.ts
@@ -5,7 +5,7 @@ import { TreemapChart } from 'echarts/charts';
import { GridComponent, LegendComponent, TooltipComponent } from 'echarts/components';
import { CanvasRenderer } from 'echarts/renderers';
import { ChartParameters, TreeMapInput } from '../../types/ChartInput';
-import { EChartsCoreOption } from 'echarts/types/dist/echarts';
+import { EChartsCoreOption } from 'echarts';
echarts.use([TreemapChart, GridComponent, CanvasRenderer, LegendComponent, TooltipComponent]);
diff --git a/Plugins/UI/default-scriptbee-charts/src/app/types/ChartInput.ts b/Plugins/UI/default-scriptbee-charts/src/app/types/ChartInput.ts
index 4c1a962b..e6639210 100644
--- a/Plugins/UI/default-scriptbee-charts/src/app/types/ChartInput.ts
+++ b/Plugins/UI/default-scriptbee-charts/src/app/types/ChartInput.ts
@@ -1,5 +1,5 @@
import { EChartsCoreOption, RegisteredSeriesOption } from 'echarts/types/dist/echarts';
-import { BarSeriesOption, ScatterSeriesOption, TreemapSeriesOption } from 'echarts';
+import { BarSeriesOption, HeatmapSeriesOption, ScatterSeriesOption, TreemapSeriesOption } from 'echarts';
export type Theme = 'light' | 'dark';
@@ -29,3 +29,8 @@ export interface ScatterPlotInput {
series: Omit[];
options?: EChartsCoreOption;
}
+
+export interface HeatmapChartInput {
+ series: Omit[];
+ options?: EChartsCoreOption;
+}