@omegagrid/plugin-charts 0.10.2 → 0.10.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/dist/editorPlugin.d.ts +17 -0
  2. package/dist/editorPlugin.d.ts.map +1 -0
  3. package/dist/editorPlugin.js +79 -0
  4. package/dist/editorPlugin.js.map +1 -0
  5. package/dist/gridPlugin.d.ts +21 -0
  6. package/dist/gridPlugin.d.ts.map +1 -0
  7. package/dist/gridPlugin.js +83 -0
  8. package/dist/gridPlugin.js.map +1 -0
  9. package/dist/index.d.ts +10 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +10 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/loader.d.ts +17 -0
  14. package/dist/loader.d.ts.map +1 -0
  15. package/dist/loader.js +59 -0
  16. package/dist/loader.js.map +1 -0
  17. package/dist/model/chartModel.d.ts +46 -0
  18. package/dist/model/chartModel.d.ts.map +1 -0
  19. package/dist/model/chartModel.js +163 -0
  20. package/dist/model/chartModel.js.map +1 -0
  21. package/dist/model/index.d.ts +2 -0
  22. package/dist/model/index.d.ts.map +1 -0
  23. package/dist/model/index.js +2 -0
  24. package/dist/model/index.js.map +1 -0
  25. package/dist/themes/index.d.ts +3 -0
  26. package/dist/themes/index.d.ts.map +1 -0
  27. package/dist/themes/index.js +3 -0
  28. package/dist/themes/index.js.map +1 -0
  29. package/dist/themes/tmDark.d.ts +2 -0
  30. package/dist/themes/tmDark.d.ts.map +1 -0
  31. package/dist/themes/tmDark.js +227 -0
  32. package/dist/themes/tmDark.js.map +1 -0
  33. package/dist/themes/tmLight.d.ts +2 -0
  34. package/dist/themes/tmLight.d.ts.map +1 -0
  35. package/dist/themes/tmLight.js +249 -0
  36. package/dist/themes/tmLight.js.map +1 -0
  37. package/dist/types.d.ts +17 -0
  38. package/dist/types.d.ts.map +1 -0
  39. package/dist/types.js +2 -0
  40. package/dist/types.js.map +1 -0
  41. package/dist/ui/chart.d.ts +14 -0
  42. package/dist/ui/chart.d.ts.map +1 -0
  43. package/dist/ui/chart.js +44 -0
  44. package/dist/ui/chart.js.map +1 -0
  45. package/dist/ui/chart.style.d.ts +2 -0
  46. package/dist/ui/chart.style.d.ts.map +1 -0
  47. package/dist/ui/chart.style.js +1174 -0
  48. package/dist/ui/chart.style.js.map +1 -0
  49. package/dist/ui/chartForm.d.ts +20 -0
  50. package/dist/ui/chartForm.d.ts.map +1 -0
  51. package/dist/ui/chartForm.js +146 -0
  52. package/dist/ui/chartForm.js.map +1 -0
  53. package/dist/ui/chartForm.style.d.ts +2 -0
  54. package/dist/ui/chartForm.style.d.ts.map +1 -0
  55. package/dist/ui/chartForm.style.js +56 -0
  56. package/dist/ui/chartForm.style.js.map +1 -0
  57. package/dist/ui/chartList.d.ts +22 -0
  58. package/dist/ui/chartList.d.ts.map +1 -0
  59. package/dist/ui/chartList.js +108 -0
  60. package/dist/ui/chartList.js.map +1 -0
  61. package/dist/ui/chartList.style.d.ts +2 -0
  62. package/dist/ui/chartList.style.d.ts.map +1 -0
  63. package/dist/ui/chartList.style.js +36 -0
  64. package/dist/ui/chartList.style.js.map +1 -0
  65. package/dist/ui/index.d.ts +4 -0
  66. package/dist/ui/index.d.ts.map +1 -0
  67. package/dist/ui/index.js +4 -0
  68. package/dist/ui/index.js.map +1 -0
  69. package/dist/utils.d.ts +5 -0
  70. package/dist/utils.d.ts.map +1 -0
  71. package/dist/utils.js +39 -0
  72. package/dist/utils.js.map +1 -0
  73. package/package.json +5 -5
@@ -0,0 +1,17 @@
1
+ import { Plugin, events } from '@omegagrid/core';
2
+ import { Editor } from '@omegagrid/editor';
3
+ import { ChartModel } from './model';
4
+ export declare class ChartEditorPlugin extends Plugin<Editor> {
5
+ static pluginName: string;
6
+ private _filter;
7
+ private _editor;
8
+ get editor(): Editor;
9
+ private chartList;
10
+ getGridByModel(model: ChartModel): import("@omegagrid/grid").Grid;
11
+ _onModelChange: (e: events.ChangeEvent<ChartModel>) => void;
12
+ openSidebar: () => string;
13
+ closeSidebar: () => void;
14
+ toggleSidebar: (open?: boolean) => string | void;
15
+ init(editor: Editor): void;
16
+ }
17
+ //# sourceMappingURL=editorPlugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editorPlugin.d.ts","sourceRoot":"","sources":["../src/editorPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,MAAM,EAAgB,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAI3C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,qBAAa,iBAAkB,SAAQ,MAAM,CAAC,MAAM,CAAC;IAEpD,MAAM,CAAC,UAAU,SAAiB;IAElC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,IAAI,MAAM,WAA0B;IAEpC,OAAO,CAAC,SAAS,CAAY;IAG7B,cAAc,CAAC,KAAK,EAAE,UAAU;IAIhC,cAAc,GAAI,GAAG,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,UAKlD;IAED,WAAW,eAAsD;IACjE,YAAY,QAAO,IAAI,CAA6C;IACpE,aAAa,GAAI,OAAM,OAAc,mBACO;IAE5C,IAAI,CAAC,MAAM,EAAE,MAAM;CAyDnB"}
@@ -0,0 +1,79 @@
1
+ import { Plugin, dom } from '@omegagrid/core';
2
+ import { ChartGridPlugin } from './gridPlugin';
3
+ import { ChartModel } from './model';
4
+ export class ChartEditorPlugin extends Plugin {
5
+ constructor() {
6
+ super(...arguments);
7
+ this._onModelChange = (e) => {
8
+ const grid = this.getGridByModel(e.value);
9
+ const gridPlugin = grid.plugins.get('charts');
10
+ const chartComponent = gridPlugin.getChartByModel(e.value);
11
+ chartComponent.refresh();
12
+ };
13
+ this.openSidebar = () => this.editor.rightSidebarComponent = 'charts';
14
+ this.closeSidebar = () => this.editor.rightSidebarComponent = null;
15
+ this.toggleSidebar = (open = null) => (open ?? false) === false || this.editor.rightSidebarComponent == 'charts'
16
+ ? this.closeSidebar() : this.openSidebar();
17
+ }
18
+ get editor() { return this._editor; }
19
+ getGridByModel(model) {
20
+ return this.editor.group.getGridByModel(model.model);
21
+ }
22
+ init(editor) {
23
+ this._editor = editor;
24
+ const origCreateComponent = editor.createComponent;
25
+ editor.createComponent = (id) => {
26
+ if (id === 'charts') {
27
+ if (!this.chartList) {
28
+ this.chartList = dom.createElement('og-plugin-chart-list');
29
+ this.chartList.addEventListener('change', this._onModelChange);
30
+ }
31
+ this.chartList.filter = this._filter;
32
+ this._filter = null;
33
+ return this.chartList;
34
+ }
35
+ if (origCreateComponent)
36
+ return origCreateComponent(id);
37
+ return null;
38
+ };
39
+ editor.addEventListener('editor.toolbar.init', () => {
40
+ const config = editor.toolbar.toolbar3Config.slice();
41
+ const index = config.findIndex(item => item.id === 'sparklines') || 0;
42
+ // put chart button before sparklines button
43
+ config.splice(index, 0, {
44
+ type: 'togglebutton',
45
+ id: 'charts',
46
+ icon: { icon: 'chart-column' },
47
+ title: 'Charts',
48
+ });
49
+ editor.toolbar.toolbar3Config = config;
50
+ });
51
+ editor.addEventListener('editor.toolbar.action', (e) => {
52
+ if (e.action.key === 'charts')
53
+ this.toggleSidebar();
54
+ });
55
+ editor.addEventListener('grid.init', (e) => {
56
+ e.grid.plugins.register(new ChartGridPlugin());
57
+ });
58
+ // editor.addEventListener('grid.activate', (e: GridEvent) => {
59
+ // console.log(e.grid);
60
+ // });
61
+ editor.addEventListener('grid.object.activate', (e) => {
62
+ if (!(e.object instanceof ChartModel))
63
+ return;
64
+ this.openSidebar();
65
+ if (this.chartList) {
66
+ this.chartList.filter = e.object.title;
67
+ }
68
+ else {
69
+ this._filter = e.object.title;
70
+ }
71
+ });
72
+ editor.addEventListener('grid.object.deactivate', () => {
73
+ if (this.chartList)
74
+ this.chartList.filter = null;
75
+ });
76
+ }
77
+ }
78
+ ChartEditorPlugin.pluginName = 'chartEditor';
79
+ //# sourceMappingURL=editorPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editorPlugin.js","sourceRoot":"","sources":["../src/editorPlugin.ts"],"names":[],"mappings":"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","sourcesContent":["import { ComponentId, Plugin, actions, dom, events } from '@omegagrid/core';\nimport { Editor } from '@omegagrid/editor';\nimport { GridEvent, ObjectEvent } from '@omegagrid/grid';\nimport { ChartGridPlugin } from './gridPlugin';\nimport { ChartList } from './ui';\nimport { ChartModel } from './model';\n\nexport class ChartEditorPlugin extends Plugin<Editor> {\n\n\tstatic pluginName = 'chartEditor';\n\t\n\tprivate _filter: string;\n\tprivate _editor: Editor;\n\tget editor() { return this._editor }\n\n\tprivate chartList: ChartList;\n\n\n\tgetGridByModel(model: ChartModel) {\n\t\treturn this.editor.group.getGridByModel(model.model);\n\t}\n\n\t_onModelChange = (e: events.ChangeEvent<ChartModel>) => {\n\t\tconst grid = this.getGridByModel(e.value);\n\t\tconst gridPlugin = grid.plugins.get('charts') as ChartGridPlugin;\n\t\tconst chartComponent = gridPlugin.getChartByModel(e.value);\n\t\tchartComponent.refresh();\t\t\n\t}\n\n\topenSidebar = () => this.editor.rightSidebarComponent = 'charts';\n\tcloseSidebar = (): void => this.editor.rightSidebarComponent = null;\n\ttoggleSidebar = (open: boolean = null) => (open ?? false) === false || this.editor.rightSidebarComponent == 'charts' \n\t\t? this.closeSidebar() : this.openSidebar();\n\n\tinit(editor: Editor) {\n\t\tthis._editor = editor;\n\t\tconst origCreateComponent = editor.createComponent;\n\t\teditor.createComponent = (id: ComponentId) => {\n\t\t\tif (id === 'charts') {\n\t\t\t\tif (!this.chartList) {\n\t\t\t\t\tthis.chartList = dom.createElement<ChartList>('og-plugin-chart-list');\n\t\t\t\t\tthis.chartList.addEventListener('change', this._onModelChange);\n\t\t\t\t}\n\t\t\t\tthis.chartList.filter = this._filter;\n\t\t\t\tthis._filter = null;\n\t\t\t\treturn this.chartList;\n\t\t\t}\n\t\t\tif (origCreateComponent) return origCreateComponent(id);\n\t\t\treturn null;\n\t\t};\n\n\t\teditor.addEventListener('editor.toolbar.init', () => {\n\t\t\tconst config = editor.toolbar.toolbar3Config.slice();\n\t\t\tconst index = config.findIndex(item => item.id === 'sparklines') || 0;\n\t\t\t// put chart button before sparklines button\n\t\t\tconfig.splice(index, 0, {\n\t\t\t\ttype: 'togglebutton', \n\t\t\t\tid: 'charts', \n\t\t\t\ticon: {icon: 'chart-column'}, \n\t\t\t\ttitle: 'Charts',\n\t\t\t})\n\t\t\teditor.toolbar.toolbar3Config = config;\n\t\t});\n\n\t\teditor.addEventListener('editor.toolbar.action', (e: actions.ActionEvent) => {\n\t\t\tif (e.action.key === 'charts') this.toggleSidebar();\n\t\t});\n\t\t\n\t\teditor.addEventListener('grid.init', (e: GridEvent) => {\n\t\t\te.grid.plugins.register(new ChartGridPlugin());\n\t\t});\n\n\t\t// editor.addEventListener('grid.activate', (e: GridEvent) => {\n\t\t\t// console.log(e.grid);\n\t\t// });\n\n\t\teditor.addEventListener('grid.object.activate', (e: ObjectEvent) => {\n\t\t\tif (!(e.object instanceof ChartModel)) return;\n\t\t\tthis.openSidebar();\n\t\t\tif (this.chartList) {\n\t\t\t\tthis.chartList.filter = e.object.title;\n\t\t\t} else {\n\t\t\t\tthis._filter = e.object.title;\n\t\t\t}\n\t\t});\n\n\t\teditor.addEventListener('grid.object.deactivate', () => {\n\t\t\tif (this.chartList) this.chartList.filter = null;\n\t\t});\n\t}\n\n}\n"]}
@@ -0,0 +1,21 @@
1
+ import { ComponentFactory, Plugin } from '@omegagrid/core';
2
+ import { CellAddress, Grid, GridEditEvent } from '@omegagrid/grid';
3
+ import { ChartModel } from './model';
4
+ import { ChartSource } from './types';
5
+ import { Chart } from './ui';
6
+ export declare class ChartGridPlugin extends Plugin<Grid> {
7
+ static pluginName: string;
8
+ get models(): Set<ChartModel>;
9
+ private grid;
10
+ private charts;
11
+ private dependencies;
12
+ private grids;
13
+ getChartFactory: (model: ChartModel) => ComponentFactory;
14
+ getChartByModel(model: ChartModel): Chart;
15
+ getAffectedModels(sheet: string, cells: CellAddress[]): number[];
16
+ addModel(source: ChartSource): ChartModel;
17
+ clear(): void;
18
+ _onEdit: (e: GridEditEvent) => void;
19
+ init(grid: Grid): void;
20
+ }
21
+ //# sourceMappingURL=gridPlugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gridPlugin.d.ts","sourceRoot":"","sources":["../src/gridPlugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAO,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAa,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAE7B,qBAAa,eAAgB,SAAQ,MAAM,CAAC,IAAI,CAAC;IAEhD,MAAM,CAAC,UAAU,SAAY;IAE7B,IAAI,MAAM,IAAuE,GAAG,CAAC,UAAU,CAAC,CAAG;IAEnG,OAAO,CAAC,IAAI,CAAO;IACnB,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,YAAY,CAAiD;IACrE,OAAO,CAAC,KAAK,CAAmB;IAEhC,eAAe,GAAI,OAAO,UAAU,KAAG,gBAAgB,CAKrD;IAEF,eAAe,CAAC,KAAK,EAAE,UAAU;IAIjC,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE;IASrD,QAAQ,CAAC,MAAM,EAAE,WAAW;IAiC5B,KAAK;IAML,OAAO,GAAI,GAAG,aAAa,UAIzB;IAEF,IAAI,CAAC,IAAI,EAAE,IAAI;CAkBf"}
@@ -0,0 +1,83 @@
1
+ import { Plugin, dom } from '@omegagrid/core';
2
+ import { ChartModel } from './model';
3
+ export class ChartGridPlugin extends Plugin {
4
+ constructor() {
5
+ super(...arguments);
6
+ this.charts = new Map();
7
+ this.dependencies = new Map();
8
+ this.grids = new Set();
9
+ this.getChartFactory = (model) => () => {
10
+ const chart = dom.createElement('og-plugin-chart');
11
+ chart.model = model;
12
+ this.charts.set(model.index, chart);
13
+ return chart;
14
+ };
15
+ this._onEdit = (e) => {
16
+ if (!e.cells)
17
+ return;
18
+ const models = this.getAffectedModels(e.grid.model.name, e.cells.map(c => c.address));
19
+ models.forEach(i => this.charts.get(i)?.refresh());
20
+ };
21
+ }
22
+ get models() { return this.grid.model.otherModels[ChartGridPlugin.pluginName]; }
23
+ getChartByModel(model) {
24
+ return this.charts.get(model.index);
25
+ }
26
+ getAffectedModels(sheet, cells) {
27
+ const models = new Set();
28
+ cells.forEach(cell => {
29
+ const deps = this.dependencies.get(sheet)?.get(cell);
30
+ if (deps)
31
+ deps.forEach(i => models.add(i));
32
+ });
33
+ return Array.from(models);
34
+ }
35
+ addModel(source) {
36
+ const model = new ChartModel(this.grid.model, source);
37
+ model.index = this.models.size;
38
+ const sheet = model.datasheetName || this.grid.model.name;
39
+ const sheetDeps = this.dependencies.get(sheet) ?? new Map();
40
+ this.dependencies.set(sheet, sheetDeps);
41
+ if (model.title == null) {
42
+ model.title = `Chart #${this.models.size + 1}`;
43
+ }
44
+ model.dependencies.forEach(a1 => {
45
+ const deps = sheetDeps.get(a1) || [];
46
+ deps.push(model.index);
47
+ sheetDeps.set(a1, deps);
48
+ });
49
+ this.models.add(model);
50
+ this.grid.objects.add({ model: model, createComponent: this.getChartFactory(model) });
51
+ if (sheet) {
52
+ const connectedGrid = this.grid.getConnectedGrid(sheet);
53
+ if (!this.grids.has(connectedGrid)) {
54
+ connectedGrid.addEventListener('grid.edit', this._onEdit);
55
+ this.grids.add(connectedGrid);
56
+ }
57
+ }
58
+ return model;
59
+ }
60
+ clear() {
61
+ this.models.clear();
62
+ this.charts = new Map();
63
+ this.dependencies = new Map();
64
+ }
65
+ init(grid) {
66
+ this.grid = grid;
67
+ grid.model.otherModels[ChartGridPlugin.pluginName] = new Set();
68
+ grid.addEventListener('grid.loadmodel', (e) => {
69
+ this.clear();
70
+ if (!e.grid.model.otherSourceData.charts)
71
+ return;
72
+ const sourceData = e.grid.model.otherSourceData.charts;
73
+ sourceData.forEach((source) => this.addModel(source));
74
+ });
75
+ grid.addEventListener('grid.edit', this._onEdit);
76
+ this.grids.add(grid);
77
+ // grid.addEventListener('grid.calculate', (e: GridEvent) => {
78
+ // console.log('calculate', e.cells);
79
+ // });
80
+ }
81
+ }
82
+ ChartGridPlugin.pluginName = 'charts';
83
+ //# sourceMappingURL=gridPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gridPlugin.js","sourceRoot":"","sources":["../src/gridPlugin.ts"],"names":[],"mappings":"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","sourcesContent":["\nimport { ComponentFactory, Plugin, dom } from '@omegagrid/core';\nimport { CellAddress, Grid, GridEditEvent, GridEvent } from '@omegagrid/grid';\nimport { ChartModel } from './model';\nimport { ChartSource } from './types';\nimport { Chart } from './ui';\n\nexport class ChartGridPlugin extends Plugin<Grid> {\n\n\tstatic pluginName = 'charts';\n\n\tget models() { return this.grid.model.otherModels[ChartGridPlugin.pluginName] as Set<ChartModel>; }\n\n\tprivate grid: Grid;\n\tprivate charts = new Map<number, Chart>();\n\tprivate dependencies = new Map<string, Map<CellAddress, number[]>>();\n\tprivate grids = new Set<Grid>();\n\n\tgetChartFactory = (model: ChartModel): ComponentFactory => () => {\t\n\t\tconst chart = dom.createElement<Chart>('og-plugin-chart');\n\t\tchart.model = model;\n\t\tthis.charts.set(model.index, chart);\n\t\treturn chart;\n\t};\n\n\tgetChartByModel(model: ChartModel) {\n\t\treturn this.charts.get(model.index);\n\t}\n\n\tgetAffectedModels(sheet: string, cells: CellAddress[]) {\n\t\tconst models = new Set<number>();\n\t\tcells.forEach(cell => {\n\t\t\tconst deps = this.dependencies.get(sheet)?.get(cell);\n\t\t\tif (deps) deps.forEach(i => models.add(i));\n\t\t});\n\t\treturn Array.from(models);\n\t}\n\n\taddModel(source: ChartSource) {\n\t\tconst model = new ChartModel(this.grid.model, source);\n\t\tmodel.index = this.models.size;\n\n\t\tconst sheet = model.datasheetName || this.grid.model.name;\n\t\tconst sheetDeps = this.dependencies.get(sheet) ?? new Map<CellAddress, number[]>();\n\t\tthis.dependencies.set(sheet, sheetDeps);\n\n\t\tif (model.title == null) {\n\t\t\tmodel.title = `Chart #${this.models.size + 1}`;\t\n\t\t}\n\n\t\tmodel.dependencies.forEach(a1 => {\n\t\t\tconst deps = sheetDeps.get(a1) || [];\n\t\t\tdeps.push(model.index);\n\t\t\tsheetDeps.set(a1, deps);\n\t\t});\n\n\t\tthis.models.add(model);\n\n\t\tthis.grid.objects.add({model: model, createComponent: this.getChartFactory(model)});\n\n\t\tif (sheet) {\n\t\t\tconst connectedGrid = this.grid.getConnectedGrid(sheet);\n\t\t\tif (!this.grids.has(connectedGrid)) {\n\t\t\t\tconnectedGrid.addEventListener('grid.edit', this._onEdit);\n\t\t\t\tthis.grids.add(connectedGrid);\n\t\t\t}\n\t\t}\n\n\t\treturn model;\n\t}\n\n\tclear() {\n\t\tthis.models.clear();\n\t\tthis.charts = new Map();\n\t\tthis.dependencies = new Map();\n\t}\n\n\t_onEdit = (e: GridEditEvent) => {\n\t\tif (!e.cells) return;\n\t\tconst models = this.getAffectedModels(e.grid.model.name, e.cells.map(c => c.address));\n\t\tmodels.forEach(i => this.charts.get(i)?.refresh());\n\t};\n\n\tinit(grid: Grid) {\n\t\tthis.grid = grid;\n\t\tgrid.model.otherModels[ChartGridPlugin.pluginName] = new Set<ChartModel>();\n\t\tgrid.addEventListener('grid.loadmodel', (e: GridEvent) => {\n\t\t\tthis.clear();\n\t\t\tif (!e.grid.model.otherSourceData.charts) return;\n\t\t\tconst sourceData = e.grid.model.otherSourceData.charts as ChartSource[];\n\t\t\tsourceData.forEach((source) => this.addModel(source));\n\t\t});\n\n\t\tgrid.addEventListener('grid.edit', this._onEdit);\n\t\tthis.grids.add(grid);\n\n\t\t// grid.addEventListener('grid.calculate', (e: GridEvent) => {\n\t\t// \tconsole.log('calculate', e.cells);\n\t\t// });\n\t}\n\n}\n"]}
@@ -0,0 +1,10 @@
1
+ export * from './types';
2
+ export * from './editorPlugin';
3
+ export * from './gridPlugin';
4
+ export * from './model';
5
+ export * from './ui';
6
+ export * from './utils';
7
+ export * from './themes';
8
+ import { HighchartsLoader } from './loader';
9
+ export { HighchartsLoader, HighchartsLoader as loader };
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,MAAM,CAAC;AACrB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AAEzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,IAAI,MAAM,EAAE,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,10 @@
1
+ export * from './types';
2
+ export * from './editorPlugin';
3
+ export * from './gridPlugin';
4
+ export * from './model';
5
+ export * from './ui';
6
+ export * from './utils';
7
+ export * from './themes';
8
+ import { HighchartsLoader } from './loader';
9
+ export { HighchartsLoader, HighchartsLoader as loader };
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,MAAM,CAAC;AACrB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AAEzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,IAAI,MAAM,EAAE,CAAC","sourcesContent":["export * from './types';\nexport * from './editorPlugin';\nexport * from './gridPlugin';\nexport * from './model';\nexport * from './ui';\nexport * from './utils';\nexport * from './themes';\n\nimport { HighchartsLoader } from './loader';\nexport { HighchartsLoader, HighchartsLoader as loader };\n"]}
@@ -0,0 +1,17 @@
1
+ import type Highcharts from 'highcharts/highcharts';
2
+ declare global {
3
+ interface Window {
4
+ Highcharts: typeof Highcharts;
5
+ define: unknown;
6
+ }
7
+ }
8
+ export declare class HighchartsLoader {
9
+ static path: string;
10
+ static highcharts: typeof Highcharts;
11
+ static init(path: string | typeof Highcharts): void;
12
+ static get(): Promise<typeof Highcharts>;
13
+ static getSync(): typeof Highcharts;
14
+ static load(): Promise<typeof Highcharts>;
15
+ private static loadViaScript;
16
+ }
17
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC;AAGpD,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QAClB,UAAU,EAAE,OAAO,UAAU,CAAC;QAC9B,MAAM,EAAE,OAAO,CAAA;KACZ;CACJ;AAED,qBAAa,gBAAgB;IAE5B,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,UAAU,EAAE,OAAO,UAAU,CAAC;IAErC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAC,OAAO,UAAU;WAK7B,GAAG;IAKhB,MAAM,CAAC,OAAO;WAID,IAAI,IAAI,OAAO,CAAC,OAAO,UAAU,CAAC;mBAS1B,aAAa;CAgClC"}
package/dist/loader.js ADDED
@@ -0,0 +1,59 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { ScriptLoader } from "@omegagrid/core";
3
+ export class HighchartsLoader {
4
+ static init(path) {
5
+ if (typeof path === 'string')
6
+ HighchartsLoader.path = path;
7
+ else
8
+ HighchartsLoader.highcharts = path;
9
+ }
10
+ static async get() {
11
+ if (!this.highcharts)
12
+ this.highcharts = await this.load();
13
+ return this.highcharts;
14
+ }
15
+ static getSync() {
16
+ return this.highcharts;
17
+ }
18
+ static async load() {
19
+ if (window.Highcharts)
20
+ HighchartsLoader.highcharts = window.Highcharts;
21
+ if (HighchartsLoader.highcharts)
22
+ return HighchartsLoader.highcharts;
23
+ // Highcharts doesn't work well with standard AMD loaders,
24
+ // so we load it as a script with careful AMD handling
25
+ return this.loadViaScript();
26
+ }
27
+ static async loadViaScript() {
28
+ // Temporarily store the current define to avoid conflicts
29
+ const originalDefine = window.define;
30
+ const originalAmd = originalDefine && originalDefine.amd;
31
+ // Temporarily disable AMD detection for Highcharts
32
+ if (originalDefine) {
33
+ originalDefine.amd = undefined;
34
+ }
35
+ try {
36
+ const path = this.path.endsWith('.js') ? this.path : `${this.path}/highcharts.js`;
37
+ await ScriptLoader.load(path);
38
+ if (window.Highcharts) {
39
+ HighchartsLoader.highcharts = window.Highcharts;
40
+ return window.Highcharts;
41
+ }
42
+ else {
43
+ throw new Error('Failed to load Highcharts');
44
+ }
45
+ }
46
+ catch (error) {
47
+ console.log(error);
48
+ // console.error('Failed to load Highcharts', error);
49
+ throw error;
50
+ }
51
+ finally {
52
+ // Restore AMD detection
53
+ if (originalDefine && originalAmd !== undefined) {
54
+ originalDefine.amd = originalAmd;
55
+ }
56
+ }
57
+ }
58
+ }
59
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAS/C,MAAM,OAAO,gBAAgB;IAK5B,MAAM,CAAC,IAAI,CAAC,IAA8B;QACzC,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,gBAAgB,CAAC,IAAI,GAAG,IAAI,CAAC;;YACtD,gBAAgB,CAAC,UAAU,GAAG,IAAI,CAAC;IACzC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,GAAG;QACf,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1D,OAAO,IAAI,CAAC,UAAU,CAAC;IACxB,CAAC;IAED,MAAM,CAAC,OAAO;QACb,OAAO,IAAI,CAAC,UAAU,CAAC;IACxB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAI;QAChB,IAAI,MAAM,CAAC,UAAU;YAAE,gBAAgB,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACvE,IAAI,gBAAgB,CAAC,UAAU;YAAE,OAAO,gBAAgB,CAAC,UAAU,CAAC;QAEpE,0DAA0D;QAC1D,sDAAsD;QACtD,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,aAAa;QACjC,0DAA0D;QAC1D,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;QACrC,MAAM,WAAW,GAAG,cAAc,IAAK,cAAsB,CAAC,GAAG,CAAC;QAElE,mDAAmD;QACnD,IAAI,cAAc,EAAE,CAAC;YACnB,cAAsB,CAAC,GAAG,GAAG,SAAS,CAAC;QACzC,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,gBAAgB,CAAC;YAClF,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE9B,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACvB,gBAAgB,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;gBAChD,OAAO,MAAM,CAAC,UAAU,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACP,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC9C,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACnB,qDAAqD;YACrD,MAAM,KAAK,CAAC;QACb,CAAC;gBAAS,CAAC;YACV,wBAAwB;YACxB,IAAI,cAAc,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBAChD,cAAsB,CAAC,GAAG,GAAG,WAAW,CAAC;YAC3C,CAAC;QACF,CAAC;IACF,CAAC;CAED","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type Highcharts from 'highcharts/highcharts';\nimport { ScriptLoader } from \"@omegagrid/core\";\n\ndeclare global {\n interface Window { \n\t\tHighcharts: typeof Highcharts,\n\t\tdefine: unknown\n }\n}\n\nexport class HighchartsLoader {\n\n\tstatic path: string;\n\tstatic highcharts: typeof Highcharts;\n\t\n\tstatic init(path: string|typeof Highcharts) {\n\t\tif (typeof path === 'string') HighchartsLoader.path = path;\n\t\telse HighchartsLoader.highcharts = path;\n\t}\n\n\tstatic async get() {\n\t\tif (!this.highcharts) this.highcharts = await this.load();\n\t\treturn this.highcharts;\n\t}\n\n\tstatic getSync() {\n\t\treturn this.highcharts;\n\t}\n\n\tstatic async load(): Promise<typeof Highcharts> {\n\t\tif (window.Highcharts) HighchartsLoader.highcharts = window.Highcharts;\n\t\tif (HighchartsLoader.highcharts) return HighchartsLoader.highcharts;\n\n\t\t// Highcharts doesn't work well with standard AMD loaders,\n\t\t// so we load it as a script with careful AMD handling\n\t\treturn this.loadViaScript();\n\t}\n\n\tprivate static async loadViaScript(): Promise<typeof Highcharts> {\n\t\t// Temporarily store the current define to avoid conflicts\n\t\tconst originalDefine = window.define;\n\t\tconst originalAmd = originalDefine && (originalDefine as any).amd;\n\t\t\n\t\t// Temporarily disable AMD detection for Highcharts\n\t\tif (originalDefine) {\n\t\t\t(originalDefine as any).amd = undefined;\n\t\t}\n\n\t\ttry {\n\t\t\tconst path = this.path.endsWith('.js') ? this.path : `${this.path}/highcharts.js`;\n\t\t\tawait ScriptLoader.load(path);\n\t\t\t\n\t\t\tif (window.Highcharts) {\n\t\t\t\tHighchartsLoader.highcharts = window.Highcharts;\n\t\t\t\treturn window.Highcharts;\n\t\t\t} else {\n\t\t\t\tthrow new Error('Failed to load Highcharts');\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.log(error);\n\t\t\t// console.error('Failed to load Highcharts', error);\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\t// Restore AMD detection\n\t\t\tif (originalDefine && originalAmd !== undefined) {\n\t\t\t\t(originalDefine as any).amd = originalAmd;\n\t\t\t}\n\t\t}\n\t}\n\t\n}\n"]}
@@ -0,0 +1,46 @@
1
+ import { CellRange, GridModel } from "@omegagrid/grid";
2
+ import { Size, Location, DeepPartial, Matrix, Model } from "@omegagrid/core";
3
+ import { ChartSource, ChartType, ChartGrouping } from "../types";
4
+ import type { Options, SeriesOptionsType } from 'highcharts/highcharts';
5
+ export declare class ChartModel implements Model {
6
+ readonly model: GridModel;
7
+ index: number;
8
+ zIndex: number;
9
+ private _dataRange;
10
+ get dataRange(): CellRange;
11
+ set dataRange(value: CellRange);
12
+ private _seriesRange;
13
+ get seriesRange(): CellRange;
14
+ set seriesRange(value: CellRange);
15
+ private _categoriesRange;
16
+ get categoriesRange(): CellRange;
17
+ set categoriesRange(value: CellRange);
18
+ private _title;
19
+ get title(): string;
20
+ set title(value: string);
21
+ private _size;
22
+ get size(): Size;
23
+ set size(value: Size);
24
+ private _location;
25
+ get location(): Location;
26
+ set location(value: Location);
27
+ private _type;
28
+ get type(): ChartType;
29
+ set type(value: ChartType);
30
+ private _grouping;
31
+ get grouping(): ChartGrouping;
32
+ set grouping(value: ChartGrouping);
33
+ get datasheetName(): string;
34
+ private _options;
35
+ private _inverted;
36
+ private _dependencies;
37
+ get dependencies(): Set<string>;
38
+ invalidateData(): void;
39
+ constructor(model: GridModel, source: ChartSource);
40
+ populate(source: ChartSource): void;
41
+ getSourceData(): ChartSource;
42
+ getSeriesData(data: Matrix<unknown>, seriesNames: string[]): SeriesOptionsType[];
43
+ init(): DeepPartial<Options>;
44
+ getOptions(): DeepPartial<Options>;
45
+ }
46
+ //# sourceMappingURL=chartModel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chartModel.d.ts","sourceRoot":"","sources":["../../src/model/chartModel.ts"],"names":[],"mappings":"AAEA,OAAO,EAAe,SAAS,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAU,MAAM,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACjE,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAOxE,qBAAa,UAAW,YAAW,KAAK;aA8FX,KAAK,EAAE,SAAS;IA5F5C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IAEf,OAAO,CAAC,UAAU,CAAY;IAC9B,IAAI,SAAS,cAA6B;IAC1C,IAAI,SAAS,CAAC,KAAK,WAAA,EAGlB;IAED,OAAO,CAAC,YAAY,CAAY;IAChC,IAAI,WAAW,cAA+B;IAC9C,IAAI,WAAW,CAAC,KAAK,WAAA,EAGpB;IAED,OAAO,CAAC,gBAAgB,CAAY;IACpC,IAAI,eAAe,cAAmC;IACtD,IAAI,eAAe,CAAC,KAAK,WAAA,EAGxB;IAED,OAAO,CAAC,MAAM,CAAS;IACvB,IAAI,KAAK,WAAyB;IAClC,IAAI,KAAK,CAAC,KAAK,QAAA,EAGd;IAED,OAAO,CAAC,KAAK,CAAO;IACpB,IAAI,IAAI,SAAwB;IAChC,IAAI,IAAI,CAAC,KAAK,MAAA,EAAwB;IAEtC,OAAO,CAAC,SAAS,CAAW;IAC5B,IAAI,QAAQ,aAA4B;IACxC,IAAI,QAAQ,CAAC,KAAK,UAAA,EAGjB;IAED,OAAO,CAAC,KAAK,CAAY;IACzB,IAAI,IAAI,cAAwB;IAChC,IAAI,IAAI,CAAC,KAAK,WAAA,EAGb;IAED,OAAO,CAAC,SAAS,CAAgB;IACjC,IAAI,QAAQ,kBAA4B;IACxC,IAAI,QAAQ,CAAC,KAAK,eAAA,EAGjB;IAED,IAAI,aAAa,WAAmC;IAEpD,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAmB;IAExC,IAAI,YAAY,gBAuBf;IAED,cAAc;gBAKc,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW;IAKjE,QAAQ,CAAC,MAAM,EAAE,WAAW;IAY5B,aAAa,IAWP,WAAW;IAGjB,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,iBAAiB,EAAE;IAWhF,IAAI;IAwDJ,UAAU;CAKV"}
@@ -0,0 +1,163 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { CellRange } from "@omegagrid/grid";
3
+ import { matrix } from "@omegagrid/core";
4
+ function translateStacking(grouping) {
5
+ return grouping === 'stacked' ? 'normal' : grouping === 'percentStacked' ? 'percent' : undefined;
6
+ }
7
+ export class ChartModel {
8
+ get dataRange() { return this._dataRange; }
9
+ set dataRange(value) {
10
+ this._dataRange = value;
11
+ this.invalidateData();
12
+ }
13
+ get seriesRange() { return this._seriesRange; }
14
+ set seriesRange(value) {
15
+ this._seriesRange = value;
16
+ this.invalidateData();
17
+ }
18
+ get categoriesRange() { return this._categoriesRange; }
19
+ set categoriesRange(value) {
20
+ this._categoriesRange = value;
21
+ this.invalidateData();
22
+ }
23
+ get title() { return this._title; }
24
+ set title(value) {
25
+ this._title = value;
26
+ this.invalidateData();
27
+ }
28
+ get size() { return this._size; }
29
+ set size(value) { this._size = value; }
30
+ get location() { return this._location; }
31
+ set location(value) {
32
+ this._location = value;
33
+ this.invalidateData();
34
+ }
35
+ get type() { return this._type; }
36
+ set type(value) {
37
+ this._type = value;
38
+ this.invalidateData();
39
+ }
40
+ get grouping() { return this._grouping; }
41
+ set grouping(value) {
42
+ this._grouping = value;
43
+ this.invalidateData();
44
+ }
45
+ get datasheetName() { return this.dataRange?.sheet; }
46
+ get dependencies() {
47
+ if (this._dependencies)
48
+ return this._dependencies;
49
+ this._dependencies = new Set();
50
+ if (this.seriesRange) {
51
+ for (const cell of this.seriesRange.cells()) {
52
+ this._dependencies.add(cell.A1);
53
+ }
54
+ }
55
+ if (this.categoriesRange) {
56
+ for (const cell of this.categoriesRange.cells()) {
57
+ this._dependencies.add(cell.A1);
58
+ }
59
+ }
60
+ if (this.dataRange) {
61
+ for (const cell of this.dataRange.cells()) {
62
+ this._dependencies.add(cell.A1);
63
+ }
64
+ }
65
+ return this._dependencies;
66
+ }
67
+ invalidateData() {
68
+ this._options = undefined;
69
+ this._dependencies = undefined;
70
+ }
71
+ constructor(model, source) {
72
+ this.model = model;
73
+ this._inverted = false;
74
+ this.populate(source);
75
+ this.init();
76
+ }
77
+ populate(source) {
78
+ this._dataRange = CellRange.fromA1(source.dataRange);
79
+ this._title = source.title;
80
+ this._size = source.size;
81
+ this._location = source.location;
82
+ this._type = source.type;
83
+ this._grouping = source.grouping;
84
+ this.zIndex = source.zIndex;
85
+ if (source.seriesRange)
86
+ this._seriesRange = CellRange.fromA1(source.seriesRange);
87
+ if (source.categoriesRange)
88
+ this._categoriesRange = CellRange.fromA1(source.categoriesRange);
89
+ }
90
+ getSourceData() {
91
+ return {
92
+ dataRange: this.dataRange.A1,
93
+ seriesRange: this.seriesRange?.A1,
94
+ categoriesRange: this.categoriesRange?.A1,
95
+ title: this.title,
96
+ size: this.size,
97
+ location: this.location,
98
+ type: this.type,
99
+ grouping: this.grouping,
100
+ zIndex: this.zIndex,
101
+ };
102
+ }
103
+ getSeriesData(data, seriesNames) {
104
+ return data.map((row, index) => ({
105
+ type: this.type,
106
+ name: seriesNames[index],
107
+ stacking: translateStacking(this.grouping),
108
+ data: row.map(value => ({
109
+ y: value
110
+ }))
111
+ }));
112
+ }
113
+ init() {
114
+ if (this._options)
115
+ return this._options;
116
+ let data = this.model.getValueMatrix(this.dataRange);
117
+ let seriesNames;
118
+ let categoryNames;
119
+ if (this.seriesRange) {
120
+ this._inverted = this.seriesRange.isColumn;
121
+ seriesNames = this.model.getValueMatrix(this.seriesRange).flat();
122
+ }
123
+ if (this.categoriesRange) {
124
+ this._inverted = this.seriesRange.isRow;
125
+ categoryNames = this.model.getValueMatrix(this.categoriesRange).flat();
126
+ }
127
+ if (!this._inverted) {
128
+ data = matrix.transpose(data);
129
+ }
130
+ const seriesCount = data.length;
131
+ const categoryCount = data[0].length;
132
+ if (!seriesNames) {
133
+ seriesNames = Array.from({ length: seriesCount }, (_, i) => `Series ${i + 1}`);
134
+ }
135
+ if (!categoryNames) {
136
+ categoryNames = Array.from({ length: categoryCount }, (_, i) => (i + 1).toString());
137
+ }
138
+ this._options = {
139
+ plotOptions: {},
140
+ series: this.getSeriesData(data, seriesNames),
141
+ xAxis: {
142
+ categories: categoryNames
143
+ },
144
+ };
145
+ if (this.type == 'pie') {
146
+ this._options.plotOptions.pie = {
147
+ dataLabels: { enabled: false },
148
+ showInLegend: true
149
+ };
150
+ this._options.series[0].data.forEach((item, i) => {
151
+ item.name = categoryNames[i];
152
+ });
153
+ this._options.series = [this._options.series[0]];
154
+ }
155
+ return this._options;
156
+ }
157
+ getOptions() {
158
+ if (!this._options)
159
+ this.init();
160
+ return this._options;
161
+ }
162
+ }
163
+ //# sourceMappingURL=chartModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chartModel.js","sourceRoot":"","sources":["../../src/model/chartModel.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { CellAddress, CellRange, GridModel } from \"@omegagrid/grid\";\nimport { Size, Location, DeepPartial, matrix, Matrix, Model } from \"@omegagrid/core\";\nimport { ChartSource, ChartType, ChartGrouping } from \"../types\";\nimport type { Options, SeriesOptionsType } from 'highcharts/highcharts';\n\nfunction translateStacking(grouping: ChartGrouping) {\n\treturn grouping === 'stacked' ? 'normal' : grouping === 'percentStacked' ? 'percent' : undefined;\n}\n\n\nexport class ChartModel implements Model {\n\n\tindex: number;\n\tzIndex: number;\n\n\tprivate _dataRange: CellRange;\n\tget dataRange() { return this._dataRange }\n\tset dataRange(value) {\n\t\tthis._dataRange = value;\n\t\tthis.invalidateData();\n\t}\n\n\tprivate _seriesRange: CellRange;\n\tget seriesRange() { return this._seriesRange }\n\tset seriesRange(value) {\n\t\tthis._seriesRange = value;\n\t\tthis.invalidateData();\n\t}\n\n\tprivate _categoriesRange: CellRange;\n\tget categoriesRange() { return this._categoriesRange }\n\tset categoriesRange(value) {\n\t\tthis._categoriesRange = value;\n\t\tthis.invalidateData();\n\t}\n\n\tprivate _title: string;\n\tget title() { return this._title }\n\tset title(value) {\n\t\tthis._title = value;\n\t\tthis.invalidateData();\n\t}\n\n\tprivate _size: Size;\n\tget size() { return this._size }\n\tset size(value) { this._size = value }\n\n\tprivate _location: Location;\n\tget location() { return this._location }\n\tset location(value) { \n\t\tthis._location = value;\n\t\tthis.invalidateData();\n\t}\n\n\tprivate _type: ChartType;\n\tget type() { return this._type }\n\tset type(value) { \n\t\tthis._type = value;\n\t\tthis.invalidateData();\n\t}\n\n\tprivate _grouping: ChartGrouping;\n\tget grouping() { return this._grouping }\n\tset grouping(value) {\n\t\tthis._grouping = value;\n\t\tthis.invalidateData();\n\t}\n\n\tget datasheetName() { return this.dataRange?.sheet }\n\n\tprivate _options: DeepPartial<Options>;\n\tprivate _inverted = false;\n\tprivate _dependencies: Set<CellAddress>;\n\n\tget dependencies() {\n\t\tif (this._dependencies) return this._dependencies;\n\t\tthis._dependencies = new Set();\n\n\t\tif (this.seriesRange) {\n\t\t\tfor (const cell of this.seriesRange.cells()) {\n\t\t\t\tthis._dependencies.add(cell.A1);\n\t\t\t}\n\t\t}\n\n\t\tif (this.categoriesRange) {\n\t\t\tfor (const cell of this.categoriesRange.cells()) {\n\t\t\t\tthis._dependencies.add(cell.A1);\n\t\t\t}\n\t\t}\n\n\t\tif (this.dataRange) {\n\t\t\tfor (const cell of this.dataRange.cells()) {\n\t\t\t\tthis._dependencies.add(cell.A1);\n\t\t\t}\n\t\t}\n\n\t\treturn this._dependencies;\n\t}\n\n\tinvalidateData() {\n\t\tthis._options = undefined;\n\t\tthis._dependencies = undefined;\n\t}\n\t\n\tconstructor(public readonly model: GridModel, source: ChartSource) {\n\t\tthis.populate(source);\n\t\tthis.init();\n\t}\n\n\tpopulate(source: ChartSource) {\n\t\tthis._dataRange = CellRange.fromA1(source.dataRange);\n\t\tthis._title = source.title;\n\t\tthis._size = source.size;\n\t\tthis._location = source.location;\n\t\tthis._type = source.type;\n\t\tthis._grouping = source.grouping;\n\t\tthis.zIndex = source.zIndex;\n\t\tif (source.seriesRange)\tthis._seriesRange = CellRange.fromA1(source.seriesRange);\n\t\tif (source.categoriesRange)\tthis._categoriesRange = CellRange.fromA1(source.categoriesRange);\n\t}\n\n\tgetSourceData() {\n\t\treturn {\n\t\t\tdataRange: this.dataRange.A1,\n\t\t\tseriesRange: this.seriesRange?.A1,\n\t\t\tcategoriesRange: this.categoriesRange?.A1,\n\t\t\ttitle: this.title,\n\t\t\tsize: this.size,\n\t\t\tlocation: this.location,\n\t\t\ttype: this.type,\n\t\t\tgrouping: this.grouping,\n\t\t\tzIndex: this.zIndex,\n\t\t} as ChartSource;\n\t}\n\n\tgetSeriesData(data: Matrix<unknown>, seriesNames: string[]): SeriesOptionsType[] {\n\t\treturn data.map((row, index) => ({\n\t\t\ttype: this.type,\n\t\t\tname: seriesNames[index],\n\t\t\tstacking: translateStacking(this.grouping),\n\t\t\tdata: row.map(value => ({\n\t\t\t\ty: value\n\t\t\t}))\n\t\t} as SeriesOptionsType));\n\t}\n\t\n\tinit() {\n\t\tif (this._options) return this._options;\n\t\t\n\t\tlet data = this.model.getValueMatrix(this.dataRange);\n\t\tlet seriesNames: string[];\n\t\tlet categoryNames: string[];\n\n\t\tif (this.seriesRange) {\n\t\t\tthis._inverted = this.seriesRange.isColumn;\n\t\t\tseriesNames = this.model.getValueMatrix(this.seriesRange).flat() as string[];\n\t\t}\n\n\t\tif (this.categoriesRange) {\n\t\t\tthis._inverted = this.seriesRange.isRow;\n\t\t\tcategoryNames = this.model.getValueMatrix(this.categoriesRange).flat() as string[];\n\t\t}\n\n\t\tif (!this._inverted) {\n\t\t\tdata = matrix.transpose(data);\n\t\t}\n\n\t\tconst seriesCount = data.length;\n\t\tconst categoryCount = data[0].length;\n\n\t\tif (!seriesNames) {\n\t\t\tseriesNames = Array.from({length: seriesCount}, (_, i) => `Series ${i + 1}`);\n\t\t}\n\n\t\tif (!categoryNames) {\n\t\t\tcategoryNames = Array.from({length: categoryCount}, (_, i) => (i + 1).toString());\n\t\t}\n\n\t\tthis._options = {\n\t\t\tplotOptions: {},\n\t\t\tseries: this.getSeriesData(data, seriesNames),\n\t\t\txAxis: {\n\t\t\t\tcategories: categoryNames\n\t\t\t},\n\t\t}\n\n\t\tif (this.type == 'pie') {\n\t\t\tthis._options.plotOptions.pie = {\n\t\t\t\tdataLabels: {enabled: false},\n\t\t\t\tshowInLegend: true\n\t\t\t};\n\n\t\t\t(this._options.series[0] as any).data.forEach((item: any, i: number) => {\n\t\t\t\titem.name = categoryNames[i];\n\t\t\t});\n\n\t\t\tthis._options.series = [this._options.series[0]];\n\t\t}\n\t\t\n\t\treturn this._options;\n\t}\n\n\tgetOptions() {\n\t\tif (!this._options) this.init();\n\t\treturn this._options;\n\t}\n\n}"]}
@@ -0,0 +1,2 @@
1
+ export * from './chartModel';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/model/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './chartModel';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/model/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC","sourcesContent":["export * from './chartModel';\n"]}
@@ -0,0 +1,3 @@
1
+ export * from './tmDark';
2
+ export * from './tmLight';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/themes/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './tmDark';
2
+ export * from './tmLight';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/themes/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC","sourcesContent":["export * from './tmDark';\nexport * from './tmLight';\n"]}