ngx-apexsankey 1.0.0
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.
- package/LICENSE +80 -0
- package/README.md +230 -0
- package/dist/LICENSE +80 -0
- package/dist/README.md +230 -0
- package/dist/esm2022/lib/ngx-apexsankey.component.mjs +182 -0
- package/dist/esm2022/lib/types.mjs +2 -0
- package/dist/esm2022/lib/utils.mjs +50 -0
- package/dist/esm2022/ngx-apexsankey.mjs +5 -0
- package/dist/esm2022/public-api.mjs +5 -0
- package/dist/fesm2022/ngx-apexsankey.mjs +240 -0
- package/dist/fesm2022/ngx-apexsankey.mjs.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/lib/ngx-apexsankey.component.d.ts +70 -0
- package/dist/lib/types.d.ts +173 -0
- package/dist/lib/utils.d.ts +24 -0
- package/dist/public-api.d.ts +3 -0
- package/package.json +43 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter, ViewChild, ChangeDetectionStrategy, PLATFORM_ID, Inject, } from '@angular/core';
|
|
2
|
+
import { isPlatformBrowser } from '@angular/common';
|
|
3
|
+
import { getApexSankeyClass, applyStoredLicense } from './utils';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
/**
|
|
6
|
+
* angular wrapper component for ApexSankey
|
|
7
|
+
* renders a sankey diagram using the ApexSankey library
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```html
|
|
11
|
+
* <ngx-apexsankey
|
|
12
|
+
* [data]="sankeyData"
|
|
13
|
+
* [options]="sankeyOptions"
|
|
14
|
+
* (nodeClick)="onNodeClick($event)">
|
|
15
|
+
* </ngx-apexsankey>
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export class NgxApexsankeyComponent {
|
|
19
|
+
/**
|
|
20
|
+
* sankey diagram data containing nodes and edges
|
|
21
|
+
*/
|
|
22
|
+
data;
|
|
23
|
+
/**
|
|
24
|
+
* configuration options for the sankey diagram
|
|
25
|
+
*/
|
|
26
|
+
options = {};
|
|
27
|
+
/**
|
|
28
|
+
* emits when a node is clicked
|
|
29
|
+
*/
|
|
30
|
+
nodeClick = new EventEmitter();
|
|
31
|
+
/**
|
|
32
|
+
* reference to the container element
|
|
33
|
+
*/
|
|
34
|
+
containerRef;
|
|
35
|
+
/**
|
|
36
|
+
* the rendered sankey graph instance
|
|
37
|
+
*/
|
|
38
|
+
graph = null;
|
|
39
|
+
instance = null;
|
|
40
|
+
isBrowser;
|
|
41
|
+
constructor(platformId) {
|
|
42
|
+
this.isBrowser = isPlatformBrowser(platformId);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* computed container styles from options
|
|
46
|
+
*/
|
|
47
|
+
get containerStyle() {
|
|
48
|
+
const style = {};
|
|
49
|
+
if (this.options?.width) {
|
|
50
|
+
style['width'] =
|
|
51
|
+
typeof this.options.width === 'number'
|
|
52
|
+
? `${this.options.width}px`
|
|
53
|
+
: this.options.width;
|
|
54
|
+
}
|
|
55
|
+
if (this.options?.height) {
|
|
56
|
+
style['height'] =
|
|
57
|
+
typeof this.options.height === 'number'
|
|
58
|
+
? `${this.options.height}px`
|
|
59
|
+
: this.options.height;
|
|
60
|
+
}
|
|
61
|
+
return style;
|
|
62
|
+
}
|
|
63
|
+
ngOnInit() {
|
|
64
|
+
if (this.isBrowser) {
|
|
65
|
+
this.initChart();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
ngOnChanges(changes) {
|
|
69
|
+
if (!this.isBrowser) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
// if options changed, recreate the chart
|
|
73
|
+
if (changes['options'] && !changes['options'].firstChange) {
|
|
74
|
+
this.recreateChart();
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
// if data changed, re-render
|
|
78
|
+
if (changes['data'] && !changes['data'].firstChange) {
|
|
79
|
+
this.renderChart();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
ngOnDestroy() {
|
|
83
|
+
this.destroyChart();
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* initializes the sankey chart
|
|
87
|
+
*/
|
|
88
|
+
initChart() {
|
|
89
|
+
const container = this.containerRef?.nativeElement;
|
|
90
|
+
if (!container) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
const ApexSankey = getApexSankeyClass();
|
|
94
|
+
if (!ApexSankey) {
|
|
95
|
+
throw new Error('[ngx-apexsankey] ApexSankey not found. ' +
|
|
96
|
+
'Make sure to import apexsankey and @svgdotjs/svg.js before using this component. ' +
|
|
97
|
+
'See README for installation instructions.');
|
|
98
|
+
}
|
|
99
|
+
// apply stored license if set before ApexSankey loaded
|
|
100
|
+
applyStoredLicense(ApexSankey);
|
|
101
|
+
// merge options with node click handler
|
|
102
|
+
const mergedOptions = this.getMergedOptions();
|
|
103
|
+
// create instance and render
|
|
104
|
+
this.instance = new ApexSankey(container, mergedOptions);
|
|
105
|
+
this.graph = this.instance.render(this.data);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* re-renders the chart with current data
|
|
109
|
+
*/
|
|
110
|
+
renderChart() {
|
|
111
|
+
if (!this.instance || !this.containerRef?.nativeElement) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
// clear existing content
|
|
115
|
+
if (this.graph?.clear) {
|
|
116
|
+
this.graph.clear();
|
|
117
|
+
}
|
|
118
|
+
// re-render with new data
|
|
119
|
+
this.graph = this.instance.render(this.data);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* destroys and recreates the chart with new options
|
|
123
|
+
*/
|
|
124
|
+
recreateChart() {
|
|
125
|
+
this.destroyChart();
|
|
126
|
+
this.initChart();
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* destroys the chart instance
|
|
130
|
+
*/
|
|
131
|
+
destroyChart() {
|
|
132
|
+
if (this.graph?.clear) {
|
|
133
|
+
this.graph.clear();
|
|
134
|
+
}
|
|
135
|
+
const container = this.containerRef?.nativeElement;
|
|
136
|
+
if (container) {
|
|
137
|
+
container.innerHTML = '';
|
|
138
|
+
}
|
|
139
|
+
this.graph = null;
|
|
140
|
+
this.instance = null;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* merges user options with the node click event emitter
|
|
144
|
+
*/
|
|
145
|
+
getMergedOptions() {
|
|
146
|
+
const options = { ...this.options };
|
|
147
|
+
// wrap onNodeClick to also emit the event
|
|
148
|
+
const userCallback = options.onNodeClick;
|
|
149
|
+
options.onNodeClick = (node) => {
|
|
150
|
+
this.nodeClick.emit(node);
|
|
151
|
+
if (userCallback) {
|
|
152
|
+
userCallback(node);
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
return options;
|
|
156
|
+
}
|
|
157
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NgxApexsankeyComponent, deps: [{ token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component });
|
|
158
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: NgxApexsankeyComponent, isStandalone: true, selector: "ngx-apexsankey", inputs: { data: "data", options: "options" }, outputs: { nodeClick: "nodeClick" }, viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["container"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: `<div #container [style]="containerStyle"></div>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
159
|
+
}
|
|
160
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NgxApexsankeyComponent, decorators: [{
|
|
161
|
+
type: Component,
|
|
162
|
+
args: [{
|
|
163
|
+
selector: 'ngx-apexsankey',
|
|
164
|
+
standalone: true,
|
|
165
|
+
template: `<div #container [style]="containerStyle"></div>`,
|
|
166
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
167
|
+
}]
|
|
168
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
169
|
+
type: Inject,
|
|
170
|
+
args: [PLATFORM_ID]
|
|
171
|
+
}] }], propDecorators: { data: [{
|
|
172
|
+
type: Input,
|
|
173
|
+
args: [{ required: true }]
|
|
174
|
+
}], options: [{
|
|
175
|
+
type: Input
|
|
176
|
+
}], nodeClick: [{
|
|
177
|
+
type: Output
|
|
178
|
+
}], containerRef: [{
|
|
179
|
+
type: ViewChild,
|
|
180
|
+
args: ['container', { static: true }]
|
|
181
|
+
}] } });
|
|
182
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWFwZXhzYW5rZXkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9uZ3gtYXBleHNhbmtleS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFLWixTQUFTLEVBQ1QsdUJBQXVCLEVBQ3ZCLFdBQVcsRUFDWCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFRcEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sU0FBUyxDQUFDOztBQUVqRTs7Ozs7Ozs7Ozs7O0dBWUc7QUFPSCxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDOztPQUVHO0lBQ3dCLElBQUksQ0FBYTtJQUU1Qzs7T0FFRztJQUNNLE9BQU8sR0FBMkIsRUFBRSxDQUFDO0lBRTlDOztPQUVHO0lBQ08sU0FBUyxHQUFHLElBQUksWUFBWSxFQUFjLENBQUM7SUFFckQ7O09BRUc7SUFDdUMsWUFBWSxDQUEyQjtJQUVqRjs7T0FFRztJQUNILEtBQUssR0FBdUIsSUFBSSxDQUFDO0lBRXpCLFFBQVEsR0FBOEIsSUFBSSxDQUFDO0lBQzNDLFNBQVMsQ0FBVTtJQUUzQixZQUFpQyxVQUFrQjtRQUNqRCxJQUFJLENBQUMsU0FBUyxHQUFHLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksY0FBYztRQUNoQixNQUFNLEtBQUssR0FBMkIsRUFBRSxDQUFDO1FBRXpDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7WUFDdkIsS0FBSyxDQUFDLE9BQU8sQ0FBQztnQkFDWixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxLQUFLLFFBQVE7b0JBQ3BDLENBQUMsQ0FBQyxH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QkFBbEIsTUFBTTtnQkFLbUMsWUFBWTtzQkFBckQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uSW5pdCxcbiAgT25EZXN0cm95LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIFBMQVRGT1JNX0lELFxuICBJbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgR3JhcGhEYXRhLFxuICBTYW5rZXlPcHRpb25zLFxuICBTYW5rZXlHcmFwaCxcbiAgU2Fua2V5Tm9kZSxcbiAgQXBleFNhbmtleUluc3RhbmNlLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGdldEFwZXhTYW5rZXlDbGFzcywgYXBwbHlTdG9yZWRMaWNlbnNlIH0gZnJvbSAnLi91dGlscyc7XG5cbi8qKlxuICogYW5ndWxhciB3cmFwcGVyIGNvbXBvbmVudCBmb3IgQXBleFNhbmtleVxuICogcmVuZGVycyBhIHNhbmtleSBkaWFncmFtIHVzaW5nIHRoZSBBcGV4U2Fua2V5IGxpYnJhcnlcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPG5neC1hcGV4c2Fua2V5XG4gKiAgIFtkYXRhXT1cInNhbmtleURhdGFcIlxuICogICBbb3B0aW9uc109XCJzYW5rZXlPcHRpb25zXCJcbiAqICAgKG5vZGVDbGljayk9XCJvbk5vZGVDbGljaygkZXZlbnQpXCI+XG4gKiA8L25neC1hcGV4c2Fua2V5PlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1hcGV4c2Fua2V5JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGU6IGA8ZGl2ICNjb250YWluZXIgW3N0eWxlXT1cImNvbnRhaW5lclN0eWxlXCI+PC9kaXY+YCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5neEFwZXhzYW5rZXlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgLyoqXG4gICAqIHNhbmtleSBkaWFncmFtIGRhdGEgY29udGFpbmluZyBub2RlcyBhbmQgZWRnZXNcbiAgICovXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGRhdGEhOiBHcmFwaERhdGE7XG5cbiAgLyoqXG4gICAqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHNhbmtleSBkaWFncmFtXG4gICAqL1xuICBASW5wdXQoKSBvcHRpb25zOiBQYXJ0aWFsPFNhbmtleU9wdGlvbnM+ID0ge307XG5cbiAgLyoqXG4gICAqIGVtaXRzIHdoZW4gYSBub2RlIGlzIGNsaWNrZWRcbiAgICovXG4gIEBPdXRwdXQoKSBub2RlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFNhbmtleU5vZGU+KCk7XG5cbiAgLyoqXG4gICAqIHJlZmVyZW5jZSB0byB0aGUgY29udGFpbmVyIGVsZW1lbnRcbiAgICovXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pIGNvbnRhaW5lclJlZiE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gIC8qKlxuICAgKiB0aGUgcmVuZGVyZWQgc2Fua2V5IGdyYXBoIGluc3RhbmNlXG4gICAqL1xuICBncmFwaDogU2Fua2V5R3JhcGggfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIGluc3RhbmNlOiBBcGV4U2Fua2V5SW5zdGFuY2UgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBpc0Jyb3dzZXI6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChQTEFURk9STV9JRCkgcGxhdGZvcm1JZDogb2JqZWN0KSB7XG4gICAgdGhpcy5pc0Jyb3dzZXIgPSBpc1BsYXRmb3JtQnJvd3NlcihwbGF0Zm9ybUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjb21wdXRlZCBjb250YWluZXIgc3R5bGVzIGZyb20gb3B0aW9uc1xuICAgKi9cbiAgZ2V0IGNvbnRhaW5lclN0eWxlKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IHN0eWxlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgICBpZiAodGhpcy5vcHRpb25zPy53aWR0aCkge1xuICAgICAgc3R5bGVbJ3dpZHRoJ10gPVxuICAgICAgICB0eXBlb2YgdGhpcy5vcHRpb25zLndpZHRoID09PSAnbnVtYmVyJ1xuICAgICAgICAgID8gYCR7dGhpcy5vcHRpb25zLndpZHRofXB4YFxuICAgICAgICAgIDogdGhpcy5vcHRpb25zLndpZHRoO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmhlaWdodCkge1xuICAgICAgc3R5bGVbJ2hlaWdodCddID1cbiAgICAgICAgdHlwZW9mIHRoaXMub3B0aW9ucy5oZWlnaHQgPT09ICdudW1iZXInXG4gICAgICAgICAgPyBgJHt0aGlzLm9wdGlvbnMuaGVpZ2h0fXB4YFxuICAgICAgICAgIDogdGhpcy5vcHRpb25zLmhlaWdodDtcbiAgICB9XG5cbiAgICByZXR1cm4gc3R5bGU7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Jyb3dzZXIpIHtcbiAgICAgIHRoaXMuaW5pdENoYXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0Jyb3dzZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiBvcHRpb25zIGNoYW5nZWQsIHJlY3JlYXRlIHRoZSBjaGFydFxuICAgIGlmIChjaGFuZ2VzWydvcHRpb25zJ10gJiYgIWNoYW5nZXNbJ29wdGlvbnMnXS5maXJzdENoYW5nZSkge1xuICAgICAgdGhpcy5yZWNyZWF0ZUNoYXJ0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgZGF0YSBjaGFuZ2VkLCByZS1yZW5kZXJcbiAgICBpZiAoY2hhbmdlc1snZGF0YSddICYmICFjaGFuZ2VzWydkYXRhJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMucmVuZGVyQ2hhcnQoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3lDaGFydCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIGluaXRpYWxpemVzIHRoZSBzYW5rZXkgY2hhcnRcbiAgICovXG4gIHByaXZhdGUgaW5pdENoYXJ0KCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyUmVmPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgQXBleFNhbmtleSA9IGdldEFwZXhTYW5rZXlDbGFzcygpO1xuXG4gICAgaWYgKCFBcGV4U2Fua2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdbbmd4LWFwZXhzYW5rZXldIEFwZXhTYW5rZXkgbm90IGZvdW5kLiAnICtcbiAgICAgICAgICAnTWFrZSBzdXJlIHRvIGltcG9ydCBhcGV4c2Fua2V5IGFuZCBAc3ZnZG90anMvc3ZnLmpzIGJlZm9yZSB1c2luZyB0aGlzIGNvbXBvbmVudC4gJyArXG4gICAgICAgICAgJ1NlZSBSRUFETUUgZm9yIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBhcHBseSBzdG9yZWQgbGljZW5zZSBpZiBzZXQgYmVmb3JlIEFwZXhTYW5rZXkgbG9hZGVkXG4gICAgYXBwbHlTdG9yZWRMaWNlbnNlKEFwZXhTYW5rZXkpO1xuXG4gICAgLy8gbWVyZ2Ugb3B0aW9ucyB3aXRoIG5vZGUgY2xpY2sgaGFuZGxlclxuICAgIGNvbnN0IG1lcmdlZE9wdGlvbnMgPSB0aGlzLmdldE1lcmdlZE9wdGlvbnMoKTtcblxuICAgIC8vIGNyZWF0ZSBpbnN0YW5jZSBhbmQgcmVuZGVyXG4gICAgdGhpcy5pbnN0YW5jZSA9IG5ldyBBcGV4U2Fua2V5KGNvbnRhaW5lciwgbWVyZ2VkT3B0aW9ucyk7XG4gICAgdGhpcy5ncmFwaCA9IHRoaXMuaW5zdGFuY2UucmVuZGVyKHRoaXMuZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogcmUtcmVuZGVycyB0aGUgY2hhcnQgd2l0aCBjdXJyZW50IGRhdGFcbiAgICovXG4gIHByaXZhdGUgcmVuZGVyQ2hhcnQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmluc3RhbmNlIHx8ICF0aGlzLmNvbnRhaW5lclJlZj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNsZWFyIGV4aXN0aW5nIGNvbnRlbnRcbiAgICBpZiAodGhpcy5ncmFwaD8uY2xlYXIpIHtcbiAgICAgIHRoaXMuZ3JhcGguY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvLyByZS1yZW5kZXIgd2l0aCBuZXcgZGF0YVxuICAgIHRoaXMuZ3JhcGggPSB0aGlzLmluc3RhbmNlLnJlbmRlcih0aGlzLmRhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIGRlc3Ryb3lzIGFuZCByZWNyZWF0ZXMgdGhlIGNoYXJ0IHdpdGggbmV3IG9wdGlvbnNcbiAgICovXG4gIHByaXZhdGUgcmVjcmVhdGVDaGFydCgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3lDaGFydCgpO1xuICAgIHRoaXMuaW5pdENoYXJ0KCk7XG4gIH1cblxuICAvKipcbiAgICogZGVzdHJveXMgdGhlIGNoYXJ0IGluc3RhbmNlXG4gICAqL1xuICBwcml2YXRlIGRlc3Ryb3lDaGFydCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ncmFwaD8uY2xlYXIpIHtcbiAgICAgIHRoaXMuZ3JhcGguY2xlYXIoKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmNvbnRhaW5lclJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gJyc7XG4gICAgfVxuXG4gICAgdGhpcy5ncmFwaCA9IG51bGw7XG4gICAgdGhpcy5pbnN0YW5jZSA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogbWVyZ2VzIHVzZXIgb3B0aW9ucyB3aXRoIHRoZSBub2RlIGNsaWNrIGV2ZW50IGVtaXR0ZXJcbiAgICovXG4gIHByaXZhdGUgZ2V0TWVyZ2VkT3B0aW9ucygpOiBQYXJ0aWFsPFNhbmtleU9wdGlvbnM+IHtcbiAgICBjb25zdCBvcHRpb25zID0geyAuLi50aGlzLm9wdGlvbnMgfTtcblxuICAgIC8vIHdyYXAgb25Ob2RlQ2xpY2sgdG8gYWxzbyBlbWl0IHRoZSBldmVudFxuICAgIGNvbnN0IHVzZXJDYWxsYmFjayA9IG9wdGlvbnMub25Ob2RlQ2xpY2s7XG4gICAgb3B0aW9ucy5vbk5vZGVDbGljayA9IChub2RlOiBTYW5rZXlOb2RlKSA9PiB7XG4gICAgICB0aGlzLm5vZGVDbGljay5lbWl0KG5vZGUpO1xuICAgICAgaWYgKHVzZXJDYWxsYmFjaykge1xuICAgICAgICB1c2VyQ2FsbGJhY2sobm9kZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIG5vZGUgZGVmaW5pdGlvbiBmb3Igc2Fua2V5IGRpYWdyYW1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTYW5rZXlOb2RlIHtcbiAgLyoqIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgbm9kZSAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICAvKiogZGlzcGxheSBsYWJlbCBmb3IgdGhlIG5vZGUgKi9cbiAgcmVhZG9ubHkgdGl0bGU6IHN0cmluZztcbiAgLyoqIG9wdGlvbmFsIGN1c3RvbSBjb2xvciBmb3IgdGhlIG5vZGUgKi9cbiAgcmVhZG9ubHkgY29sb3I/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogZWRnZSBkZWZpbml0aW9uIGNvbm5lY3RpbmcgdHdvIG5vZGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2Fua2V5RWRnZSB7XG4gIC8qKiBzb3VyY2Ugbm9kZSBpZCAqL1xuICByZWFkb25seSBzb3VyY2U6IHN0cmluZztcbiAgLyoqIHRhcmdldCBub2RlIGlkICovXG4gIHJlYWRvbmx5IHRhcmdldDogc3RyaW5nO1xuICAvKiogZWRnZSB3ZWlnaHQvc2l6ZSAqL1xuICByZWFkb25seSB2YWx1ZTogbnVtYmVyO1xuICAvKiogb3B0aW9uYWwgZ3JvdXBpbmcgdHlwZSAqL1xuICByZWFkb25seSB0eXBlPzogc3RyaW5nO1xuICAvKiogb3B0aW9uYWwgY3VzdG9tIGNvbG9yIGZvciB0aGUgZWRnZSAqL1xuICByZWFkb25seSBjb2xvcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBjb21tb24gb3B0aW9ucyBmb3IgdGhlIHNhbmtleSBkaWFncmFtXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbW9uT3B0aW9ucyB7XG4gIC8qKiBjc3Mgc3R5bGVzIGZvciBjYW52YXMgcm9vdCBjb250YWluZXIgKi9cbiAgcmVhZG9ubHkgY2FudmFzU3R5bGU/OiBzdHJpbmc7XG4gIC8qKiBlbmFibGUvZGlzYWJsZSBncmFwaCB0b29sYmFyICovXG4gIHJlYWRvbmx5IGVuYWJsZVRvb2xiYXI/OiBib29sZWFuO1xuICAvKiogaGVpZ2h0IG9mIGdyYXBoIGNvbnRhaW5lciAqL1xuICByZWFkb25seSBoZWlnaHQ/OiBudW1iZXIgfCBzdHJpbmc7XG4gIC8qKiBzcGFjaW5nIGZyb20gdG9wIGFuZCBsZWZ0IG9mIGdyYXBoIGNvbnRhaW5lciAqL1xuICByZWFkb25seSBzcGFjaW5nPzogbnVtYmVyO1xuICAvKiogdmlld3BvcnQgaGVpZ2h0ICovXG4gIHJlYWRvbmx5IHZpZXdQb3J0SGVpZ2h0PzogbnVtYmVyO1xuICAvKiogdmlld3BvcnQgd2lkdGggKi9cbiAgcmVhZG9ubHkgdmlld1BvcnRXaWR0aD86IG51bWJlcjtcbiAgLyoqIHdpZHRoIG9mIGdyYXBoIGNvbnRhaW5lciAqL1xuICByZWFkb25seSB3aWR0aD86IG51bWJlciB8IHN0cmluZztcbn1cblxuLyoqXG4gKiBub2RlIHN0eWxpbmcgb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVPcHRpb25zIHtcbiAgLyoqIGJvcmRlciBjb2xvciBvZiBub2RlcyAqL1xuICByZWFkb25seSBub2RlQm9yZGVyQ29sb3I/OiBzdHJpbmc7XG4gIC8qKiBib3JkZXIgd2lkdGggb2Ygbm9kZXMgaW4gcGl4ZWxzICovXG4gIHJlYWRvbmx5IG5vZGVCb3JkZXJXaWR0aD86IG51bWJlcjtcbiAgLyoqIHdpZHRoIG9mIGdyYXBoIG5vZGVzICovXG4gIHJlYWRvbmx5IG5vZGVXaWR0aD86IG51bWJlcjtcbiAgLyoqIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBub2RlIGNsaWNrICovXG4gIHJlYWRvbmx5IG9uTm9kZUNsaWNrPzogKG5vZGU6IFNhbmtleU5vZGUpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogZWRnZSBzdHlsaW5nIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFZGdlT3B0aW9ucyB7XG4gIC8qKiBlbmFibGUgZ3JhZGllbnQgZmlsbCBiYXNlZCBvbiBzb3VyY2UgYW5kIHRhcmdldCBub2RlIGNvbG9ycyAqL1xuICByZWFkb25seSBlZGdlR3JhZGllbnRGaWxsPzogYm9vbGVhbjtcbiAgLyoqIG9wYWNpdHkgdmFsdWUgZm9yIGVkZ2VzICgwIHRvIDEpICovXG4gIHJlYWRvbmx5IGVkZ2VPcGFjaXR5PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIGZvbnQgc3R5bGluZyBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9udE9wdGlvbnMge1xuICAvKiogZm9udCBjb2xvciBvZiBub2RlIGxhYmVscyAqL1xuICByZWFkb25seSBmb250Q29sb3I/OiBzdHJpbmc7XG4gIC8qKiBmb250IGZhbWlseSBvZiBub2RlIGxhYmVscyAqL1xuICByZWFkb25seSBmb250RmFtaWx5Pzogc3RyaW5nO1xuICAvKiogZm9udCBzaXplIG9mIG5vZGUgbGFiZWxzICovXG4gIHJlYWRvbmx5IGZvbnRTaXplPzogc3RyaW5nO1xuICAvKiogZm9udCB3ZWlnaHQgb2Ygbm9kZSBsYWJlbHMgKi9cbiAgcmVhZG9ubHkgZm9udFdlaWdodD86IHN0cmluZztcbn1cblxuLyoqXG4gKiB0b29sdGlwIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRvb2x0aXBPcHRpb25zIHtcbiAgLyoqIGVuYWJsZSB0b29sdGlwIG9uIGhvdmVyICovXG4gIHJlYWRvbmx5IGVuYWJsZVRvb2x0aXA/OiBib29sZWFuO1xuICAvKiogYmFja2dyb3VuZCBjb2xvciBvZiB0b29sdGlwICovXG4gIHJlYWRvbmx5IHRvb2x0aXBCR0NvbG9yPzogc3RyaW5nO1xuICAvKiogYm9yZGVyIGNvbG9yIG9mIHRvb2x0aXAgKi9cbiAgcmVhZG9ubHkgdG9vbHRpcEJvcmRlckNvbG9yPzogc3RyaW5nO1xuICAvKiogdG9vbHRpcCBodG1sIGVsZW1lbnQgaWQgKi9cbiAgcmVhZG9ubHkgdG9vbHRpcElkPzogc3RyaW5nO1xuICAvKiogaHRtbCB0ZW1wbGF0ZSBmdW5jdGlvbiBmb3IgdG9vbHRpcCAqL1xuICByZWFkb25seSB0b29sdGlwVGVtcGxhdGU/OiAoY29udGVudDogVG9vbHRpcENvbnRlbnQpID0+IHN0cmluZztcbn1cblxuLyoqXG4gKiBjb250ZW50IHBhc3NlZCB0byB0b29sdGlwIHRlbXBsYXRlIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG9vbHRpcENvbnRlbnQge1xuICBzb3VyY2U6IFNhbmtleU5vZGU7XG4gIHRhcmdldDogU2Fua2V5Tm9kZTtcbiAgdmFsdWU6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBkYXRhIG9wdGlvbnMgZm9yIGN1c3RvbSBvcmRlcmluZyBhbmQgbGluayBhbGlnbm1lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhT3B0aW9ucyB7XG4gIC8qKiBjdXN0b20gbm9kZSBvcmRlcmluZyAtIGxpc3Qgb2YgbGF5ZXJzLCBlYWNoIGNvbnRhaW5pbmcgYmFuZHMgb2Ygbm9kZSBpZHMgKi9cbiAgcmVhZG9ubHkgb3JkZXI/OiBzdHJpbmdbXVtdW107XG4gIC8qKiB3aGV0aGVyIHRvIGFsaWduIGxpbmsgdHlwZXMgYWNyb3NzIG5vZGVzICovXG4gIHJlYWRvbmx5IGFsaWduTGlua1R5cGVzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBjb21wbGV0ZSBzYW5rZXkgb3B0aW9ucyBjb21iaW5pbmcgYWxsIG9wdGlvbiBpbnRlcmZhY2VzXG4gKi9cbmV4cG9ydCB0eXBlIFNhbmtleU9wdGlvbnMgPSBDb21tb25PcHRpb25zICZcbiAgTm9kZU9wdGlvbnMgJlxuICBFZGdlT3B0aW9ucyAmXG4gIEZvbnRPcHRpb25zICZcbiAgVG9vbHRpcE9wdGlvbnM7XG5cbi8qKlxuICogZ3JhcGggZGF0YSBzdHJ1Y3R1cmUgY29udGFpbmluZyBub2RlcywgZWRnZXMsIGFuZCBvcHRpb25hbCBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JhcGhEYXRhIHtcbiAgLyoqIGFycmF5IG9mIG5vZGVzICovXG4gIHJlYWRvbmx5IG5vZGVzOiBTYW5rZXlOb2RlW107XG4gIC8qKiBhcnJheSBvZiBlZGdlcyBjb25uZWN0aW5nIG5vZGVzICovXG4gIHJlYWRvbmx5IGVkZ2VzOiBTYW5rZXlFZGdlW107XG4gIC8qKiBvcHRpb25hbCBkYXRhLWxldmVsIG9wdGlvbnMgKi9cbiAgcmVhZG9ubHkgb3B0aW9ucz86IERhdGFPcHRpb25zO1xufVxuXG4vKipcbiAqIHNhbmtleSBncmFwaCBpbnN0YW5jZSByZXR1cm5lZCBieSBBcGV4U2Fua2V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2Fua2V5R3JhcGgge1xuICAvKiogdGhlIGdyYXBobGliIGdyYXBoIGluc3RhbmNlICovXG4gIGdyYXBoOiB1bmtub3duO1xuICAvKiogbWF4aW11bSByYW5rIGluIHRoZSBncmFwaCAqL1xuICBtYXhSYW5rOiBudW1iZXI7XG4gIC8qKiByZS1yZW5kZXIgdGhlIGdyYXBoICovXG4gIHJlbmRlcjogKG9wdGlvbnM/OiB7IGtlZXBPbGRQb3NpdGlvbj86IGJvb2xlYW4gfSkgPT4gdm9pZDtcbiAgLyoqIGNsZWFyIHRoZSBjYW52YXMgKi9cbiAgY2xlYXI/OiAoKSA9PiB2b2lkO1xuICAvKiogZXhwb3J0IHRvIHN2ZyAqL1xuICBleHBvcnRUb1N2Zz86ICgpID0+IHZvaWQ7XG4gIC8qKiBjYW52YXMgaGVpZ2h0ICovXG4gIGhlaWdodDogbnVtYmVyO1xuICAvKiogY2FudmFzIHdpZHRoICovXG4gIHdpZHRoOiBudW1iZXI7XG4gIC8qKiBjYW52YXMgc3BhY2luZyAqL1xuICBzcGFjaW5nOiBudW1iZXI7XG59XG5cbi8qKlxuICogYXBleHNhbmtleSBjb25zdHJ1Y3RvciB0eXBlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBleFNhbmtleUNvbnN0cnVjdG9yIHtcbiAgbmV3IChlbGVtZW50OiBIVE1MRWxlbWVudCwgb3B0aW9ucz86IFBhcnRpYWw8U2Fua2V5T3B0aW9ucz4pOiBBcGV4U2Fua2V5SW5zdGFuY2U7XG4gIHNldExpY2Vuc2U6IChrZXk6IHN0cmluZykgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBhcGV4c2Fua2V5IGluc3RhbmNlIHR5cGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcGV4U2Fua2V5SW5zdGFuY2Uge1xuICBlbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgb3B0aW9uczogU2Fua2V5T3B0aW9ucztcbiAgZ3JhcGg6IFNhbmtleUdyYXBoO1xuICByZW5kZXI6IChkYXRhOiBHcmFwaERhdGEpID0+IFNhbmtleUdyYXBoO1xufVxuXG4vKipcbiAqIGV4dGVuZGVkIHdpbmRvdyBpbnRlcmZhY2UgZm9yIGFjY2Vzc2luZyBBcGV4U2Fua2V5IGdsb2JhbGx5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBleFNhbmtleVdpbmRvdyBleHRlbmRzIFdpbmRvdyB7XG4gIEFwZXhTYW5rZXk/OiBBcGV4U2Fua2V5Q29uc3RydWN0b3I7XG4gIF9fQVBFWF9TQU5LRVlfTElDRU5TRV9LRVlfXz86IHN0cmluZztcbn1cbiJdfQ==
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* gets the ApexSankey constructor from window
|
|
3
|
+
*/
|
|
4
|
+
export function getApexSankeyClass() {
|
|
5
|
+
if (typeof window === 'undefined') {
|
|
6
|
+
return null;
|
|
7
|
+
}
|
|
8
|
+
const win = window;
|
|
9
|
+
return win.ApexSankey || null;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* sets the ApexSankey license key globally
|
|
13
|
+
* should be called once at app initialization, before rendering any charts
|
|
14
|
+
*
|
|
15
|
+
* @param licenseKey - the license key string provided by ApexSankey
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* import { setApexSankeyLicense } from 'ngx-apexsankey';
|
|
20
|
+
*
|
|
21
|
+
* // call this in your app.config.ts or main.ts
|
|
22
|
+
* setApexSankeyLicense('your-license-key-here');
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export function setApexSankeyLicense(licenseKey) {
|
|
26
|
+
if (typeof window === 'undefined') {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const win = window;
|
|
30
|
+
if (win.ApexSankey) {
|
|
31
|
+
win.ApexSankey.setLicense(licenseKey);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
// store license key to be applied when ApexSankey loads
|
|
35
|
+
win.__APEX_SANKEY_LICENSE_KEY__ = licenseKey;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* applies stored license key if it was set before ApexSankey loaded
|
|
40
|
+
*/
|
|
41
|
+
export function applyStoredLicense(ApexSankey) {
|
|
42
|
+
if (typeof window === 'undefined') {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const win = window;
|
|
46
|
+
if (win.__APEX_SANKEY_LICENSE_KEY__) {
|
|
47
|
+
ApexSankey.setLicense(win.__APEX_SANKEY_LICENSE_KEY__);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQjtJQUNoQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsRUFBRTtRQUNqQyxPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsTUFBTSxHQUFHLEdBQUcsTUFBMEIsQ0FBQztJQUN2QyxPQUFPLEdBQUcsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDO0FBQ2hDLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFVBQWtCO0lBQ3JELElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxFQUFFO1FBQ2pDLE9BQU87S0FDUjtJQUVELE1BQU0sR0FBRyxHQUFHLE1BQTBCLENBQUM7SUFFdkMsSUFBSSxHQUFHLENBQUMsVUFBVSxFQUFFO1FBQ2xCLEdBQUcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ3ZDO1NBQU07UUFDTCx3REFBd0Q7UUFDeEQsR0FBRyxDQUFDLDJCQUEyQixHQUFHLFVBQVUsQ0FBQztLQUM5QztBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxVQUFpQztJQUNsRSxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsRUFBRTtRQUNqQyxPQUFPO0tBQ1I7SUFFRCxNQUFNLEdBQUcsR0FBRyxNQUEwQixDQUFDO0lBRXZDLElBQUksR0FBRyxDQUFDLDJCQUEyQixFQUFFO1FBQ25DLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDLENBQUM7S0FDeEQ7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBleFNhbmtleUNvbnN0cnVjdG9yLCBBcGV4U2Fua2V5V2luZG93IH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogZ2V0cyB0aGUgQXBleFNhbmtleSBjb25zdHJ1Y3RvciBmcm9tIHdpbmRvd1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXBleFNhbmtleUNsYXNzKCk6IEFwZXhTYW5rZXlDb25zdHJ1Y3RvciB8IG51bGwge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHdpbiA9IHdpbmRvdyBhcyBBcGV4U2Fua2V5V2luZG93O1xuICByZXR1cm4gd2luLkFwZXhTYW5rZXkgfHwgbnVsbDtcbn1cblxuLyoqXG4gKiBzZXRzIHRoZSBBcGV4U2Fua2V5IGxpY2Vuc2Uga2V5IGdsb2JhbGx5XG4gKiBzaG91bGQgYmUgY2FsbGVkIG9uY2UgYXQgYXBwIGluaXRpYWxpemF0aW9uLCBiZWZvcmUgcmVuZGVyaW5nIGFueSBjaGFydHNcbiAqXG4gKiBAcGFyYW0gbGljZW5zZUtleSAtIHRoZSBsaWNlbnNlIGtleSBzdHJpbmcgcHJvdmlkZWQgYnkgQXBleFNhbmtleVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgc2V0QXBleFNhbmtleUxpY2Vuc2UgfSBmcm9tICduZ3gtYXBleHNhbmtleSc7XG4gKlxuICogLy8gY2FsbCB0aGlzIGluIHlvdXIgYXBwLmNvbmZpZy50cyBvciBtYWluLnRzXG4gKiBzZXRBcGV4U2Fua2V5TGljZW5zZSgneW91ci1saWNlbnNlLWtleS1oZXJlJyk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEFwZXhTYW5rZXlMaWNlbnNlKGxpY2Vuc2VLZXk6IHN0cmluZyk6IHZvaWQge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB3aW4gPSB3aW5kb3cgYXMgQXBleFNhbmtleVdpbmRvdztcblxuICBpZiAod2luLkFwZXhTYW5rZXkpIHtcbiAgICB3aW4uQXBleFNhbmtleS5zZXRMaWNlbnNlKGxpY2Vuc2VLZXkpO1xuICB9IGVsc2Uge1xuICAgIC8vIHN0b3JlIGxpY2Vuc2Uga2V5IHRvIGJlIGFwcGxpZWQgd2hlbiBBcGV4U2Fua2V5IGxvYWRzXG4gICAgd2luLl9fQVBFWF9TQU5LRVlfTElDRU5TRV9LRVlfXyA9IGxpY2Vuc2VLZXk7XG4gIH1cbn1cblxuLyoqXG4gKiBhcHBsaWVzIHN0b3JlZCBsaWNlbnNlIGtleSBpZiBpdCB3YXMgc2V0IGJlZm9yZSBBcGV4U2Fua2V5IGxvYWRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlTdG9yZWRMaWNlbnNlKEFwZXhTYW5rZXk6IEFwZXhTYW5rZXlDb25zdHJ1Y3Rvcik6IHZvaWQge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB3aW4gPSB3aW5kb3cgYXMgQXBleFNhbmtleVdpbmRvdztcblxuICBpZiAod2luLl9fQVBFWF9TQU5LRVlfTElDRU5TRV9LRVlfXykge1xuICAgIEFwZXhTYW5rZXkuc2V0TGljZW5zZSh3aW4uX19BUEVYX1NBTktFWV9MSUNFTlNFX0tFWV9fKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWFwZXhzYW5rZXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbmd4LWFwZXhzYW5rZXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// main component
|
|
2
|
+
export { NgxApexsankeyComponent } from './lib/ngx-apexsankey.component';
|
|
3
|
+
// utility functions
|
|
4
|
+
export { setApexSankeyLicense } from './lib/utils';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlCQUFpQjtBQUNqQixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV4RSxvQkFBb0I7QUFDcEIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gbWFpbiBjb21wb25lbnRcbmV4cG9ydCB7IE5neEFwZXhzYW5rZXlDb21wb25lbnQgfSBmcm9tICcuL2xpYi9uZ3gtYXBleHNhbmtleS5jb21wb25lbnQnO1xuXG4vLyB1dGlsaXR5IGZ1bmN0aW9uc1xuZXhwb3J0IHsgc2V0QXBleFNhbmtleUxpY2Vuc2UgfSBmcm9tICcuL2xpYi91dGlscyc7XG5cbi8vIHR5cGVzXG5leHBvcnQgdHlwZSB7XG4gIC8vIGRhdGEgdHlwZXNcbiAgU2Fua2V5Tm9kZSxcbiAgU2Fua2V5RWRnZSxcbiAgR3JhcGhEYXRhLFxuICBEYXRhT3B0aW9ucyxcblxuICAvLyBvcHRpb25zIHR5cGVzXG4gIFNhbmtleU9wdGlvbnMsXG4gIENvbW1vbk9wdGlvbnMsXG4gIE5vZGVPcHRpb25zLFxuICBFZGdlT3B0aW9ucyxcbiAgRm9udE9wdGlvbnMsXG4gIFRvb2x0aXBPcHRpb25zLFxuICBUb29sdGlwQ29udGVudCxcblxuICAvLyBpbnN0YW5jZSB0eXBlc1xuICBTYW5rZXlHcmFwaCxcbiAgQXBleFNhbmtleUluc3RhbmNlLFxuICBBcGV4U2Fua2V5Q29uc3RydWN0b3IsXG59IGZyb20gJy4vbGliL3R5cGVzJztcbiJdfQ==
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { EventEmitter, PLATFORM_ID, ViewChild, Output, Input, Inject, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import { isPlatformBrowser } from '@angular/common';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* gets the ApexSankey constructor from window
|
|
7
|
+
*/
|
|
8
|
+
function getApexSankeyClass() {
|
|
9
|
+
if (typeof window === 'undefined') {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
const win = window;
|
|
13
|
+
return win.ApexSankey || null;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* sets the ApexSankey license key globally
|
|
17
|
+
* should be called once at app initialization, before rendering any charts
|
|
18
|
+
*
|
|
19
|
+
* @param licenseKey - the license key string provided by ApexSankey
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* import { setApexSankeyLicense } from 'ngx-apexsankey';
|
|
24
|
+
*
|
|
25
|
+
* // call this in your app.config.ts or main.ts
|
|
26
|
+
* setApexSankeyLicense('your-license-key-here');
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
function setApexSankeyLicense(licenseKey) {
|
|
30
|
+
if (typeof window === 'undefined') {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const win = window;
|
|
34
|
+
if (win.ApexSankey) {
|
|
35
|
+
win.ApexSankey.setLicense(licenseKey);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
// store license key to be applied when ApexSankey loads
|
|
39
|
+
win.__APEX_SANKEY_LICENSE_KEY__ = licenseKey;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* applies stored license key if it was set before ApexSankey loaded
|
|
44
|
+
*/
|
|
45
|
+
function applyStoredLicense(ApexSankey) {
|
|
46
|
+
if (typeof window === 'undefined') {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const win = window;
|
|
50
|
+
if (win.__APEX_SANKEY_LICENSE_KEY__) {
|
|
51
|
+
ApexSankey.setLicense(win.__APEX_SANKEY_LICENSE_KEY__);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* angular wrapper component for ApexSankey
|
|
57
|
+
* renders a sankey diagram using the ApexSankey library
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```html
|
|
61
|
+
* <ngx-apexsankey
|
|
62
|
+
* [data]="sankeyData"
|
|
63
|
+
* [options]="sankeyOptions"
|
|
64
|
+
* (nodeClick)="onNodeClick($event)">
|
|
65
|
+
* </ngx-apexsankey>
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
class NgxApexsankeyComponent {
|
|
69
|
+
/**
|
|
70
|
+
* sankey diagram data containing nodes and edges
|
|
71
|
+
*/
|
|
72
|
+
data;
|
|
73
|
+
/**
|
|
74
|
+
* configuration options for the sankey diagram
|
|
75
|
+
*/
|
|
76
|
+
options = {};
|
|
77
|
+
/**
|
|
78
|
+
* emits when a node is clicked
|
|
79
|
+
*/
|
|
80
|
+
nodeClick = new EventEmitter();
|
|
81
|
+
/**
|
|
82
|
+
* reference to the container element
|
|
83
|
+
*/
|
|
84
|
+
containerRef;
|
|
85
|
+
/**
|
|
86
|
+
* the rendered sankey graph instance
|
|
87
|
+
*/
|
|
88
|
+
graph = null;
|
|
89
|
+
instance = null;
|
|
90
|
+
isBrowser;
|
|
91
|
+
constructor(platformId) {
|
|
92
|
+
this.isBrowser = isPlatformBrowser(platformId);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* computed container styles from options
|
|
96
|
+
*/
|
|
97
|
+
get containerStyle() {
|
|
98
|
+
const style = {};
|
|
99
|
+
if (this.options?.width) {
|
|
100
|
+
style['width'] =
|
|
101
|
+
typeof this.options.width === 'number'
|
|
102
|
+
? `${this.options.width}px`
|
|
103
|
+
: this.options.width;
|
|
104
|
+
}
|
|
105
|
+
if (this.options?.height) {
|
|
106
|
+
style['height'] =
|
|
107
|
+
typeof this.options.height === 'number'
|
|
108
|
+
? `${this.options.height}px`
|
|
109
|
+
: this.options.height;
|
|
110
|
+
}
|
|
111
|
+
return style;
|
|
112
|
+
}
|
|
113
|
+
ngOnInit() {
|
|
114
|
+
if (this.isBrowser) {
|
|
115
|
+
this.initChart();
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
ngOnChanges(changes) {
|
|
119
|
+
if (!this.isBrowser) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
// if options changed, recreate the chart
|
|
123
|
+
if (changes['options'] && !changes['options'].firstChange) {
|
|
124
|
+
this.recreateChart();
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
// if data changed, re-render
|
|
128
|
+
if (changes['data'] && !changes['data'].firstChange) {
|
|
129
|
+
this.renderChart();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
ngOnDestroy() {
|
|
133
|
+
this.destroyChart();
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* initializes the sankey chart
|
|
137
|
+
*/
|
|
138
|
+
initChart() {
|
|
139
|
+
const container = this.containerRef?.nativeElement;
|
|
140
|
+
if (!container) {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
const ApexSankey = getApexSankeyClass();
|
|
144
|
+
if (!ApexSankey) {
|
|
145
|
+
throw new Error('[ngx-apexsankey] ApexSankey not found. ' +
|
|
146
|
+
'Make sure to import apexsankey and @svgdotjs/svg.js before using this component. ' +
|
|
147
|
+
'See README for installation instructions.');
|
|
148
|
+
}
|
|
149
|
+
// apply stored license if set before ApexSankey loaded
|
|
150
|
+
applyStoredLicense(ApexSankey);
|
|
151
|
+
// merge options with node click handler
|
|
152
|
+
const mergedOptions = this.getMergedOptions();
|
|
153
|
+
// create instance and render
|
|
154
|
+
this.instance = new ApexSankey(container, mergedOptions);
|
|
155
|
+
this.graph = this.instance.render(this.data);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* re-renders the chart with current data
|
|
159
|
+
*/
|
|
160
|
+
renderChart() {
|
|
161
|
+
if (!this.instance || !this.containerRef?.nativeElement) {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
// clear existing content
|
|
165
|
+
if (this.graph?.clear) {
|
|
166
|
+
this.graph.clear();
|
|
167
|
+
}
|
|
168
|
+
// re-render with new data
|
|
169
|
+
this.graph = this.instance.render(this.data);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* destroys and recreates the chart with new options
|
|
173
|
+
*/
|
|
174
|
+
recreateChart() {
|
|
175
|
+
this.destroyChart();
|
|
176
|
+
this.initChart();
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* destroys the chart instance
|
|
180
|
+
*/
|
|
181
|
+
destroyChart() {
|
|
182
|
+
if (this.graph?.clear) {
|
|
183
|
+
this.graph.clear();
|
|
184
|
+
}
|
|
185
|
+
const container = this.containerRef?.nativeElement;
|
|
186
|
+
if (container) {
|
|
187
|
+
container.innerHTML = '';
|
|
188
|
+
}
|
|
189
|
+
this.graph = null;
|
|
190
|
+
this.instance = null;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* merges user options with the node click event emitter
|
|
194
|
+
*/
|
|
195
|
+
getMergedOptions() {
|
|
196
|
+
const options = { ...this.options };
|
|
197
|
+
// wrap onNodeClick to also emit the event
|
|
198
|
+
const userCallback = options.onNodeClick;
|
|
199
|
+
options.onNodeClick = (node) => {
|
|
200
|
+
this.nodeClick.emit(node);
|
|
201
|
+
if (userCallback) {
|
|
202
|
+
userCallback(node);
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
return options;
|
|
206
|
+
}
|
|
207
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NgxApexsankeyComponent, deps: [{ token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component });
|
|
208
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: NgxApexsankeyComponent, isStandalone: true, selector: "ngx-apexsankey", inputs: { data: "data", options: "options" }, outputs: { nodeClick: "nodeClick" }, viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["container"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: `<div #container [style]="containerStyle"></div>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
209
|
+
}
|
|
210
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NgxApexsankeyComponent, decorators: [{
|
|
211
|
+
type: Component,
|
|
212
|
+
args: [{
|
|
213
|
+
selector: 'ngx-apexsankey',
|
|
214
|
+
standalone: true,
|
|
215
|
+
template: `<div #container [style]="containerStyle"></div>`,
|
|
216
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
217
|
+
}]
|
|
218
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
219
|
+
type: Inject,
|
|
220
|
+
args: [PLATFORM_ID]
|
|
221
|
+
}] }], propDecorators: { data: [{
|
|
222
|
+
type: Input,
|
|
223
|
+
args: [{ required: true }]
|
|
224
|
+
}], options: [{
|
|
225
|
+
type: Input
|
|
226
|
+
}], nodeClick: [{
|
|
227
|
+
type: Output
|
|
228
|
+
}], containerRef: [{
|
|
229
|
+
type: ViewChild,
|
|
230
|
+
args: ['container', { static: true }]
|
|
231
|
+
}] } });
|
|
232
|
+
|
|
233
|
+
// main component
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Generated bundle index. Do not edit.
|
|
237
|
+
*/
|
|
238
|
+
|
|
239
|
+
export { NgxApexsankeyComponent, setApexSankeyLicense };
|
|
240
|
+
//# sourceMappingURL=ngx-apexsankey.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngx-apexsankey.mjs","sources":["../../src/lib/utils.ts","../../src/lib/ngx-apexsankey.component.ts","../../src/public-api.ts","../../src/ngx-apexsankey.ts"],"sourcesContent":["import { ApexSankeyConstructor, ApexSankeyWindow } from './types';\n\n/**\n * gets the ApexSankey constructor from window\n */\nexport function getApexSankeyClass(): ApexSankeyConstructor | null {\n if (typeof window === 'undefined') {\n return null;\n }\n\n const win = window as ApexSankeyWindow;\n return win.ApexSankey || null;\n}\n\n/**\n * sets the ApexSankey license key globally\n * should be called once at app initialization, before rendering any charts\n *\n * @param licenseKey - the license key string provided by ApexSankey\n *\n * @example\n * ```ts\n * import { setApexSankeyLicense } from 'ngx-apexsankey';\n *\n * // call this in your app.config.ts or main.ts\n * setApexSankeyLicense('your-license-key-here');\n * ```\n */\nexport function setApexSankeyLicense(licenseKey: string): void {\n if (typeof window === 'undefined') {\n return;\n }\n\n const win = window as ApexSankeyWindow;\n\n if (win.ApexSankey) {\n win.ApexSankey.setLicense(licenseKey);\n } else {\n // store license key to be applied when ApexSankey loads\n win.__APEX_SANKEY_LICENSE_KEY__ = licenseKey;\n }\n}\n\n/**\n * applies stored license key if it was set before ApexSankey loaded\n */\nexport function applyStoredLicense(ApexSankey: ApexSankeyConstructor): void {\n if (typeof window === 'undefined') {\n return;\n }\n\n const win = window as ApexSankeyWindow;\n\n if (win.__APEX_SANKEY_LICENSE_KEY__) {\n ApexSankey.setLicense(win.__APEX_SANKEY_LICENSE_KEY__);\n }\n}\n","import {\n Component,\n ElementRef,\n Input,\n Output,\n EventEmitter,\n OnInit,\n OnDestroy,\n OnChanges,\n SimpleChanges,\n ViewChild,\n ChangeDetectionStrategy,\n PLATFORM_ID,\n Inject,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n GraphData,\n SankeyOptions,\n SankeyGraph,\n SankeyNode,\n ApexSankeyInstance,\n} from './types';\nimport { getApexSankeyClass, applyStoredLicense } from './utils';\n\n/**\n * angular wrapper component for ApexSankey\n * renders a sankey diagram using the ApexSankey library\n *\n * @example\n * ```html\n * <ngx-apexsankey\n * [data]=\"sankeyData\"\n * [options]=\"sankeyOptions\"\n * (nodeClick)=\"onNodeClick($event)\">\n * </ngx-apexsankey>\n * ```\n */\n@Component({\n selector: 'ngx-apexsankey',\n standalone: true,\n template: `<div #container [style]=\"containerStyle\"></div>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgxApexsankeyComponent implements OnInit, OnDestroy, OnChanges {\n /**\n * sankey diagram data containing nodes and edges\n */\n @Input({ required: true }) data!: GraphData;\n\n /**\n * configuration options for the sankey diagram\n */\n @Input() options: Partial<SankeyOptions> = {};\n\n /**\n * emits when a node is clicked\n */\n @Output() nodeClick = new EventEmitter<SankeyNode>();\n\n /**\n * reference to the container element\n */\n @ViewChild('container', { static: true }) containerRef!: ElementRef<HTMLElement>;\n\n /**\n * the rendered sankey graph instance\n */\n graph: SankeyGraph | null = null;\n\n private instance: ApexSankeyInstance | null = null;\n private isBrowser: boolean;\n\n constructor(@Inject(PLATFORM_ID) platformId: object) {\n this.isBrowser = isPlatformBrowser(platformId);\n }\n\n /**\n * computed container styles from options\n */\n get containerStyle(): Record<string, string> {\n const style: Record<string, string> = {};\n\n if (this.options?.width) {\n style['width'] =\n typeof this.options.width === 'number'\n ? `${this.options.width}px`\n : this.options.width;\n }\n\n if (this.options?.height) {\n style['height'] =\n typeof this.options.height === 'number'\n ? `${this.options.height}px`\n : this.options.height;\n }\n\n return style;\n }\n\n ngOnInit(): void {\n if (this.isBrowser) {\n this.initChart();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.isBrowser) {\n return;\n }\n\n // if options changed, recreate the chart\n if (changes['options'] && !changes['options'].firstChange) {\n this.recreateChart();\n return;\n }\n\n // if data changed, re-render\n if (changes['data'] && !changes['data'].firstChange) {\n this.renderChart();\n }\n }\n\n ngOnDestroy(): void {\n this.destroyChart();\n }\n\n /**\n * initializes the sankey chart\n */\n private initChart(): void {\n const container = this.containerRef?.nativeElement;\n if (!container) {\n return;\n }\n\n const ApexSankey = getApexSankeyClass();\n\n if (!ApexSankey) {\n throw new Error(\n '[ngx-apexsankey] ApexSankey not found. ' +\n 'Make sure to import apexsankey and @svgdotjs/svg.js before using this component. ' +\n 'See README for installation instructions.'\n );\n }\n\n // apply stored license if set before ApexSankey loaded\n applyStoredLicense(ApexSankey);\n\n // merge options with node click handler\n const mergedOptions = this.getMergedOptions();\n\n // create instance and render\n this.instance = new ApexSankey(container, mergedOptions);\n this.graph = this.instance.render(this.data);\n }\n\n /**\n * re-renders the chart with current data\n */\n private renderChart(): void {\n if (!this.instance || !this.containerRef?.nativeElement) {\n return;\n }\n\n // clear existing content\n if (this.graph?.clear) {\n this.graph.clear();\n }\n\n // re-render with new data\n this.graph = this.instance.render(this.data);\n }\n\n /**\n * destroys and recreates the chart with new options\n */\n private recreateChart(): void {\n this.destroyChart();\n this.initChart();\n }\n\n /**\n * destroys the chart instance\n */\n private destroyChart(): void {\n if (this.graph?.clear) {\n this.graph.clear();\n }\n\n const container = this.containerRef?.nativeElement;\n if (container) {\n container.innerHTML = '';\n }\n\n this.graph = null;\n this.instance = null;\n }\n\n /**\n * merges user options with the node click event emitter\n */\n private getMergedOptions(): Partial<SankeyOptions> {\n const options = { ...this.options };\n\n // wrap onNodeClick to also emit the event\n const userCallback = options.onNodeClick;\n options.onNodeClick = (node: SankeyNode) => {\n this.nodeClick.emit(node);\n if (userCallback) {\n userCallback(node);\n }\n };\n\n return options;\n }\n}\n","// main component\nexport { NgxApexsankeyComponent } from './lib/ngx-apexsankey.component';\n\n// utility functions\nexport { setApexSankeyLicense } from './lib/utils';\n\n// types\nexport type {\n // data types\n SankeyNode,\n SankeyEdge,\n GraphData,\n DataOptions,\n\n // options types\n SankeyOptions,\n CommonOptions,\n NodeOptions,\n EdgeOptions,\n FontOptions,\n TooltipOptions,\n TooltipContent,\n\n // instance types\n SankeyGraph,\n ApexSankeyInstance,\n ApexSankeyConstructor,\n} from './lib/types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { ElementRef, EventEmitter, OnInit, OnDestroy, OnChanges, SimpleChanges } from '@angular/core';
|
|
2
|
+
import { GraphData, SankeyOptions, SankeyGraph, SankeyNode } from './types';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* angular wrapper component for ApexSankey
|
|
6
|
+
* renders a sankey diagram using the ApexSankey library
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```html
|
|
10
|
+
* <ngx-apexsankey
|
|
11
|
+
* [data]="sankeyData"
|
|
12
|
+
* [options]="sankeyOptions"
|
|
13
|
+
* (nodeClick)="onNodeClick($event)">
|
|
14
|
+
* </ngx-apexsankey>
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export declare class NgxApexsankeyComponent implements OnInit, OnDestroy, OnChanges {
|
|
18
|
+
/**
|
|
19
|
+
* sankey diagram data containing nodes and edges
|
|
20
|
+
*/
|
|
21
|
+
data: GraphData;
|
|
22
|
+
/**
|
|
23
|
+
* configuration options for the sankey diagram
|
|
24
|
+
*/
|
|
25
|
+
options: Partial<SankeyOptions>;
|
|
26
|
+
/**
|
|
27
|
+
* emits when a node is clicked
|
|
28
|
+
*/
|
|
29
|
+
nodeClick: EventEmitter<SankeyNode>;
|
|
30
|
+
/**
|
|
31
|
+
* reference to the container element
|
|
32
|
+
*/
|
|
33
|
+
containerRef: ElementRef<HTMLElement>;
|
|
34
|
+
/**
|
|
35
|
+
* the rendered sankey graph instance
|
|
36
|
+
*/
|
|
37
|
+
graph: SankeyGraph | null;
|
|
38
|
+
private instance;
|
|
39
|
+
private isBrowser;
|
|
40
|
+
constructor(platformId: object);
|
|
41
|
+
/**
|
|
42
|
+
* computed container styles from options
|
|
43
|
+
*/
|
|
44
|
+
get containerStyle(): Record<string, string>;
|
|
45
|
+
ngOnInit(): void;
|
|
46
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
47
|
+
ngOnDestroy(): void;
|
|
48
|
+
/**
|
|
49
|
+
* initializes the sankey chart
|
|
50
|
+
*/
|
|
51
|
+
private initChart;
|
|
52
|
+
/**
|
|
53
|
+
* re-renders the chart with current data
|
|
54
|
+
*/
|
|
55
|
+
private renderChart;
|
|
56
|
+
/**
|
|
57
|
+
* destroys and recreates the chart with new options
|
|
58
|
+
*/
|
|
59
|
+
private recreateChart;
|
|
60
|
+
/**
|
|
61
|
+
* destroys the chart instance
|
|
62
|
+
*/
|
|
63
|
+
private destroyChart;
|
|
64
|
+
/**
|
|
65
|
+
* merges user options with the node click event emitter
|
|
66
|
+
*/
|
|
67
|
+
private getMergedOptions;
|
|
68
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgxApexsankeyComponent, never>;
|
|
69
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgxApexsankeyComponent, "ngx-apexsankey", never, { "data": { "alias": "data"; "required": true; }; "options": { "alias": "options"; "required": false; }; }, { "nodeClick": "nodeClick"; }, never, never, true, never>;
|
|
70
|
+
}
|