@aquera/nile-visualization 0.3.0 → 0.5.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/dist/src/index.d.ts +8 -2
- package/dist/src/index.js +3 -0
- package/dist/src/internal/chart-adapters.js +86 -0
- package/dist/src/internal/highcharts-provider.js +27 -0
- package/dist/src/internal/types/all-chart-config.type.d.ts +2 -4
- package/dist/src/internal/types/chart-config.type.d.ts +3 -2
- package/dist/src/internal/types/chart-donut-config.type.d.ts +2 -0
- package/dist/src/internal/types/chart-heatmap-config.type.d.ts +19 -0
- package/dist/src/internal/types/chart-heatmap-config.type.js +2 -0
- package/dist/src/internal/types/chart-kpi-config.type.d.ts +5 -21
- package/dist/src/internal/types/chart-line-column-config.type.d.ts +14 -0
- package/dist/src/internal/types/chart-line-column-config.type.js +2 -0
- package/dist/src/internal/types/chart-organization-config.type.d.ts +13 -0
- package/dist/src/internal/types/chart-organization-config.type.js +2 -0
- package/dist/src/internal/types/index.d.ts +4 -1
- package/dist/src/internal/types/primitive-chart-config.type.d.ts +5 -1
- package/dist/src/nile-ai-panel/nile-ai-panel.css.js +8 -0
- package/dist/src/nile-ai-panel/nile-ai-panel.d.ts +2 -0
- package/dist/src/nile-ai-panel/nile-ai-panel.js +8 -0
- package/dist/src/nile-bellcurve-chart/nile-bellcurve-chart.js +3 -1
- package/dist/src/nile-chart/index.d.ts +2 -2
- package/dist/src/nile-chart/nile-chart-config.d.ts +39 -96
- package/dist/src/nile-chart/nile-chart.css.js +31 -6
- package/dist/src/nile-chart/nile-chart.d.ts +48 -7
- package/dist/src/nile-chart/nile-chart.js +527 -54
- package/dist/src/nile-donut-chart/nile-donut-chart.d.ts +2 -0
- package/dist/src/nile-donut-chart/nile-donut-chart.js +16 -1
- package/dist/src/nile-heatmap-chart/index.d.ts +2 -0
- package/dist/src/nile-heatmap-chart/index.js +2 -0
- package/dist/src/nile-heatmap-chart/nile-heatmap-chart.css.d.ts +1 -0
- package/dist/src/nile-heatmap-chart/nile-heatmap-chart.css.js +28 -0
- package/dist/src/nile-heatmap-chart/nile-heatmap-chart.d.ts +49 -0
- package/dist/src/nile-heatmap-chart/nile-heatmap-chart.js +259 -0
- package/dist/src/nile-histogram-chart/nile-histogram-chart.js +3 -1
- package/dist/src/nile-kpi-chart/nile-kpi-chart.css.js +4 -4
- package/dist/src/nile-kpi-chart/nile-kpi-chart.d.ts +2 -0
- package/dist/src/nile-kpi-chart/nile-kpi-chart.js +6 -0
- package/dist/src/nile-line-column-chart/index.d.ts +2 -0
- package/dist/src/nile-line-column-chart/index.js +2 -0
- package/dist/src/nile-line-column-chart/nile-line-column-chart.css.d.ts +1 -0
- package/dist/src/nile-line-column-chart/nile-line-column-chart.css.js +28 -0
- package/dist/src/nile-line-column-chart/nile-line-column-chart.d.ts +42 -0
- package/dist/src/nile-line-column-chart/nile-line-column-chart.js +205 -0
- package/dist/src/nile-organization-chart/index.d.ts +2 -0
- package/dist/src/nile-organization-chart/index.js +2 -0
- package/dist/src/nile-organization-chart/nile-organization-chart.css.d.ts +1 -0
- package/dist/src/nile-organization-chart/nile-organization-chart.css.js +28 -0
- package/dist/src/nile-organization-chart/nile-organization-chart.d.ts +57 -0
- package/dist/src/nile-organization-chart/nile-organization-chart.js +206 -0
- package/package.json +4 -1
|
@@ -22,6 +22,8 @@ export declare class NileDonutChart extends NileElement {
|
|
|
22
22
|
data: DonutChartSeriesData[];
|
|
23
23
|
seriesName: string;
|
|
24
24
|
innerSize: string;
|
|
25
|
+
/** Renders a 180° arc (semi-circle) suitable for KPI-style gauges. */
|
|
26
|
+
semiCircle: boolean;
|
|
25
27
|
options: Highcharts.Options;
|
|
26
28
|
loading: boolean;
|
|
27
29
|
height: string;
|
|
@@ -18,6 +18,8 @@ let NileDonutChart = class NileDonutChart extends NileElement {
|
|
|
18
18
|
this.data = [];
|
|
19
19
|
this.seriesName = '';
|
|
20
20
|
this.innerSize = '50%';
|
|
21
|
+
/** Renders a 180° arc (semi-circle) suitable for KPI-style gauges. */
|
|
22
|
+
this.semiCircle = false;
|
|
21
23
|
this.options = {};
|
|
22
24
|
this.loading = false;
|
|
23
25
|
this.height = '400px';
|
|
@@ -35,6 +37,8 @@ let NileDonutChart = class NileDonutChart extends NileElement {
|
|
|
35
37
|
this.seriesName = donut.seriesName;
|
|
36
38
|
if (donut.innerSize)
|
|
37
39
|
this.innerSize = donut.innerSize;
|
|
40
|
+
if (donut.semiCircle !== undefined)
|
|
41
|
+
this.semiCircle = donut.semiCircle;
|
|
38
42
|
if (donut.height)
|
|
39
43
|
this.height = donut.height;
|
|
40
44
|
if (donut.loading !== undefined)
|
|
@@ -70,7 +74,7 @@ let NileDonutChart = class NileDonutChart extends NileElement {
|
|
|
70
74
|
this.applyConfig(this.config);
|
|
71
75
|
return;
|
|
72
76
|
}
|
|
73
|
-
const props = ['data', 'chartTitle', 'chartSubtitle', 'options', 'height', 'seriesName', 'innerSize', 'loading', 'showDataLabels', 'showLegend'];
|
|
77
|
+
const props = ['data', 'chartTitle', 'chartSubtitle', 'options', 'height', 'seriesName', 'innerSize', 'semiCircle', 'loading', 'showDataLabels', 'showLegend'];
|
|
74
78
|
if (!props.some(p => changedProperties.has(p)))
|
|
75
79
|
return;
|
|
76
80
|
if (this.loading) {
|
|
@@ -101,6 +105,14 @@ let NileDonutChart = class NileDonutChart extends NileElement {
|
|
|
101
105
|
plotOptions: {
|
|
102
106
|
pie: {
|
|
103
107
|
innerSize: this.innerSize,
|
|
108
|
+
...(this.semiCircle
|
|
109
|
+
? {
|
|
110
|
+
startAngle: -90,
|
|
111
|
+
endAngle: 90,
|
|
112
|
+
center: ['50%', '80%'],
|
|
113
|
+
size: '120%',
|
|
114
|
+
}
|
|
115
|
+
: {}),
|
|
104
116
|
allowPointSelect: true,
|
|
105
117
|
cursor: 'pointer',
|
|
106
118
|
dataLabels: { enabled: this.showDataLabels, format: '<b>{point.name}</b>: {point.percentage:.1f} %' },
|
|
@@ -152,6 +164,9 @@ __decorate([
|
|
|
152
164
|
__decorate([
|
|
153
165
|
property({ type: String, attribute: 'inner-size' })
|
|
154
166
|
], NileDonutChart.prototype, "innerSize", void 0);
|
|
167
|
+
__decorate([
|
|
168
|
+
property({ type: Boolean, attribute: 'semi-circle' })
|
|
169
|
+
], NileDonutChart.prototype, "semiCircle", void 0);
|
|
155
170
|
__decorate([
|
|
156
171
|
property({ type: Object })
|
|
157
172
|
], NileDonutChart.prototype, "options", void 0);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const styles: import("lit").CSSResult;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { css } from 'lit';
|
|
2
|
+
export const styles = css `
|
|
3
|
+
:host {
|
|
4
|
+
display: block;
|
|
5
|
+
width: 100%;
|
|
6
|
+
position: relative;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
:host([hidden]) {
|
|
10
|
+
display: none;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.chart-container {
|
|
14
|
+
width: 100%;
|
|
15
|
+
min-height: var(--nile-height-200px, var(--ng-height-200px));
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.chart-loading {
|
|
19
|
+
display: flex;
|
|
20
|
+
align-items: center;
|
|
21
|
+
justify-content: center;
|
|
22
|
+
min-height: inherit;
|
|
23
|
+
color: var(--nile-colors-neutral-700, var(--ng-colors-text-secondary-700));
|
|
24
|
+
font-family: var(--nile-font-family-serif, var(--ng-font-family-body));
|
|
25
|
+
font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));
|
|
26
|
+
}
|
|
27
|
+
`;
|
|
28
|
+
//# sourceMappingURL=nile-heatmap-chart.css.js.map
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { CSSResultGroup, PropertyValues, TemplateResult } from 'lit';
|
|
2
|
+
import type Highcharts from 'highcharts';
|
|
3
|
+
import NileElement from '../internal/nile-element.js';
|
|
4
|
+
import type { SeparatedChartConfigInputType } from '../internal/types/separated-chart-config-input.type.js';
|
|
5
|
+
/** One cell: x/y are 0-based indices into `xCategories` / `yCategories`. */
|
|
6
|
+
export interface HeatmapCell {
|
|
7
|
+
x: number;
|
|
8
|
+
y: number;
|
|
9
|
+
value: number;
|
|
10
|
+
}
|
|
11
|
+
export declare class NileHeatmapChart extends NileElement {
|
|
12
|
+
static styles: CSSResultGroup;
|
|
13
|
+
private _hc;
|
|
14
|
+
private chart;
|
|
15
|
+
private resizeObserver;
|
|
16
|
+
private chartContainer;
|
|
17
|
+
config: SeparatedChartConfigInputType | null;
|
|
18
|
+
chartTitle: string;
|
|
19
|
+
chartSubtitle: string;
|
|
20
|
+
xCategories: string[];
|
|
21
|
+
yCategories: string[];
|
|
22
|
+
data: HeatmapCell[];
|
|
23
|
+
seriesName: string;
|
|
24
|
+
colorMin: number | null;
|
|
25
|
+
colorMax: number | null;
|
|
26
|
+
minColor: string;
|
|
27
|
+
maxColor: string;
|
|
28
|
+
colorAxisTitle: string;
|
|
29
|
+
options: Highcharts.Options;
|
|
30
|
+
loading: boolean;
|
|
31
|
+
height: string;
|
|
32
|
+
showDataLabels: boolean;
|
|
33
|
+
private applyConfig;
|
|
34
|
+
connectedCallback(): void;
|
|
35
|
+
disconnectedCallback(): void;
|
|
36
|
+
protected firstUpdated(): void;
|
|
37
|
+
protected updated(changedProperties: PropertyValues): void;
|
|
38
|
+
private setupResizeObserver;
|
|
39
|
+
private valueExtent;
|
|
40
|
+
private buildOptions;
|
|
41
|
+
private initChart;
|
|
42
|
+
private destroyChart;
|
|
43
|
+
render(): TemplateResult;
|
|
44
|
+
}
|
|
45
|
+
declare global {
|
|
46
|
+
interface HTMLElementTagNameMap {
|
|
47
|
+
'nile-heatmap-chart': NileHeatmapChart;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { customElement, property, query } from 'lit/decorators.js';
|
|
3
|
+
import { html } from 'lit';
|
|
4
|
+
import { getHighcharts } from '../internal/highcharts-provider.js';
|
|
5
|
+
import NileElement from '../internal/nile-element.js';
|
|
6
|
+
import { applySeparatedChartConfig } from '../internal/separated-chart-config.js';
|
|
7
|
+
import { deepMerge } from '../internal/utils.js';
|
|
8
|
+
import { styles } from './nile-heatmap-chart.css.js';
|
|
9
|
+
let NileHeatmapChart = class NileHeatmapChart extends NileElement {
|
|
10
|
+
constructor() {
|
|
11
|
+
super(...arguments);
|
|
12
|
+
this._hc = null;
|
|
13
|
+
this.chart = null;
|
|
14
|
+
this.resizeObserver = null;
|
|
15
|
+
this.config = null;
|
|
16
|
+
this.chartTitle = '';
|
|
17
|
+
this.chartSubtitle = '';
|
|
18
|
+
this.xCategories = [];
|
|
19
|
+
this.yCategories = [];
|
|
20
|
+
this.data = [];
|
|
21
|
+
this.seriesName = '';
|
|
22
|
+
this.colorMin = null;
|
|
23
|
+
this.colorMax = null;
|
|
24
|
+
this.minColor = '#ffffff';
|
|
25
|
+
this.maxColor = '#1e40af';
|
|
26
|
+
this.colorAxisTitle = '';
|
|
27
|
+
this.options = {};
|
|
28
|
+
this.loading = false;
|
|
29
|
+
this.height = '400px';
|
|
30
|
+
this.showDataLabels = true;
|
|
31
|
+
}
|
|
32
|
+
applyConfig(cfg) {
|
|
33
|
+
applySeparatedChartConfig(this, cfg);
|
|
34
|
+
}
|
|
35
|
+
connectedCallback() {
|
|
36
|
+
super.connectedCallback();
|
|
37
|
+
if (this.config)
|
|
38
|
+
this.applyConfig(this.config);
|
|
39
|
+
}
|
|
40
|
+
disconnectedCallback() {
|
|
41
|
+
super.disconnectedCallback();
|
|
42
|
+
this.destroyChart();
|
|
43
|
+
this.resizeObserver?.disconnect();
|
|
44
|
+
this.resizeObserver = null;
|
|
45
|
+
}
|
|
46
|
+
firstUpdated() {
|
|
47
|
+
this.initChart();
|
|
48
|
+
this.setupResizeObserver();
|
|
49
|
+
}
|
|
50
|
+
updated(changedProperties) {
|
|
51
|
+
if (changedProperties.has('config') && this.config) {
|
|
52
|
+
this.applyConfig(this.config);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const props = [
|
|
56
|
+
'xCategories',
|
|
57
|
+
'yCategories',
|
|
58
|
+
'data',
|
|
59
|
+
'chartTitle',
|
|
60
|
+
'chartSubtitle',
|
|
61
|
+
'seriesName',
|
|
62
|
+
'colorMin',
|
|
63
|
+
'colorMax',
|
|
64
|
+
'minColor',
|
|
65
|
+
'maxColor',
|
|
66
|
+
'colorAxisTitle',
|
|
67
|
+
'options',
|
|
68
|
+
'height',
|
|
69
|
+
'loading',
|
|
70
|
+
'showDataLabels',
|
|
71
|
+
];
|
|
72
|
+
if (!props.some(p => changedProperties.has(p)))
|
|
73
|
+
return;
|
|
74
|
+
if (this.loading) {
|
|
75
|
+
this.destroyChart();
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (this.chart) {
|
|
79
|
+
this.chart.update(this.buildOptions(), true, true);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
this.initChart();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
setupResizeObserver() {
|
|
86
|
+
if (!this.chartContainer)
|
|
87
|
+
return;
|
|
88
|
+
this.resizeObserver = new ResizeObserver(() => {
|
|
89
|
+
this.chart?.reflow();
|
|
90
|
+
});
|
|
91
|
+
this.resizeObserver.observe(this.chartContainer);
|
|
92
|
+
}
|
|
93
|
+
valueExtent() {
|
|
94
|
+
if (this.data.length === 0)
|
|
95
|
+
return { min: 0, max: 1 };
|
|
96
|
+
let min = this.data[0].value;
|
|
97
|
+
let max = min;
|
|
98
|
+
for (const c of this.data) {
|
|
99
|
+
if (c.value < min)
|
|
100
|
+
min = c.value;
|
|
101
|
+
if (c.value > max)
|
|
102
|
+
max = c.value;
|
|
103
|
+
}
|
|
104
|
+
if (min === max)
|
|
105
|
+
max = min + 1;
|
|
106
|
+
return { min, max };
|
|
107
|
+
}
|
|
108
|
+
buildOptions() {
|
|
109
|
+
const self = this;
|
|
110
|
+
const ext = this.valueExtent();
|
|
111
|
+
const cMin = this.colorMin ?? ext.min;
|
|
112
|
+
const cMax = this.colorMax ?? ext.max;
|
|
113
|
+
const seriesData = this.data.map(c => [c.x, c.y, c.value]);
|
|
114
|
+
return deepMerge({
|
|
115
|
+
chart: { type: 'heatmap', height: this.height },
|
|
116
|
+
title: { text: this.chartTitle || undefined },
|
|
117
|
+
subtitle: { text: this.chartSubtitle || undefined },
|
|
118
|
+
xAxis: { categories: this.xCategories, title: { text: undefined } },
|
|
119
|
+
yAxis: {
|
|
120
|
+
categories: this.yCategories,
|
|
121
|
+
title: { text: undefined },
|
|
122
|
+
reversed: true,
|
|
123
|
+
},
|
|
124
|
+
colorAxis: {
|
|
125
|
+
min: cMin,
|
|
126
|
+
max: cMax,
|
|
127
|
+
minColor: this.minColor,
|
|
128
|
+
maxColor: this.maxColor,
|
|
129
|
+
title: { text: this.colorAxisTitle || undefined },
|
|
130
|
+
},
|
|
131
|
+
legend: { align: 'right', layout: 'vertical', verticalAlign: 'top' },
|
|
132
|
+
tooltip: {
|
|
133
|
+
formatter() {
|
|
134
|
+
const p = this.point;
|
|
135
|
+
if (!p)
|
|
136
|
+
return false;
|
|
137
|
+
const x = p.x;
|
|
138
|
+
const y = p.y;
|
|
139
|
+
const xCat = self.xCategories[x] ?? String(x);
|
|
140
|
+
const yCat = self.yCategories[y] ?? String(y);
|
|
141
|
+
const val = p.value;
|
|
142
|
+
return `<b>${yCat}</b> · ${xCat}<br/>Value: <b>${val ?? ''}</b>`;
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
plotOptions: {
|
|
146
|
+
heatmap: {
|
|
147
|
+
dataLabels: { enabled: this.showDataLabels },
|
|
148
|
+
borderWidth: 1,
|
|
149
|
+
borderColor: '#e2e8f0',
|
|
150
|
+
},
|
|
151
|
+
series: {
|
|
152
|
+
cursor: 'pointer',
|
|
153
|
+
point: {
|
|
154
|
+
events: {
|
|
155
|
+
click() {
|
|
156
|
+
const x = this.x;
|
|
157
|
+
const y = this.y;
|
|
158
|
+
self.emit('nile-chart-click', {
|
|
159
|
+
point: this,
|
|
160
|
+
xCategory: self.xCategories[x],
|
|
161
|
+
yCategory: self.yCategories[y],
|
|
162
|
+
xIndex: x,
|
|
163
|
+
yIndex: y,
|
|
164
|
+
value: this.value,
|
|
165
|
+
seriesName: this.series.name,
|
|
166
|
+
});
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
},
|
|
172
|
+
series: [
|
|
173
|
+
{
|
|
174
|
+
type: 'heatmap',
|
|
175
|
+
name: this.seriesName || 'Intensity',
|
|
176
|
+
data: seriesData,
|
|
177
|
+
},
|
|
178
|
+
],
|
|
179
|
+
credits: { enabled: false },
|
|
180
|
+
}, this.options);
|
|
181
|
+
}
|
|
182
|
+
async initChart() {
|
|
183
|
+
if (this.loading || !this.chartContainer)
|
|
184
|
+
return;
|
|
185
|
+
if (!this._hc)
|
|
186
|
+
this._hc = await getHighcharts();
|
|
187
|
+
this.chart = this._hc.chart(this.chartContainer, this.buildOptions());
|
|
188
|
+
this.emit('nile-chart-ready', { chart: this.chart });
|
|
189
|
+
}
|
|
190
|
+
destroyChart() {
|
|
191
|
+
if (this.chart) {
|
|
192
|
+
this.chart.destroy();
|
|
193
|
+
this.chart = null;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
render() {
|
|
197
|
+
if (this.loading) {
|
|
198
|
+
return html `<div class="chart-loading" style="height:${this.height}">Loading...</div>`;
|
|
199
|
+
}
|
|
200
|
+
return html `<div class="chart-container"></div>`;
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
NileHeatmapChart.styles = styles;
|
|
204
|
+
__decorate([
|
|
205
|
+
query('.chart-container')
|
|
206
|
+
], NileHeatmapChart.prototype, "chartContainer", void 0);
|
|
207
|
+
__decorate([
|
|
208
|
+
property({ type: Object })
|
|
209
|
+
], NileHeatmapChart.prototype, "config", void 0);
|
|
210
|
+
__decorate([
|
|
211
|
+
property({ type: String, attribute: 'chart-title' })
|
|
212
|
+
], NileHeatmapChart.prototype, "chartTitle", void 0);
|
|
213
|
+
__decorate([
|
|
214
|
+
property({ type: String, attribute: 'chart-subtitle' })
|
|
215
|
+
], NileHeatmapChart.prototype, "chartSubtitle", void 0);
|
|
216
|
+
__decorate([
|
|
217
|
+
property({ type: Array })
|
|
218
|
+
], NileHeatmapChart.prototype, "xCategories", void 0);
|
|
219
|
+
__decorate([
|
|
220
|
+
property({ type: Array })
|
|
221
|
+
], NileHeatmapChart.prototype, "yCategories", void 0);
|
|
222
|
+
__decorate([
|
|
223
|
+
property({ type: Array })
|
|
224
|
+
], NileHeatmapChart.prototype, "data", void 0);
|
|
225
|
+
__decorate([
|
|
226
|
+
property({ type: String, attribute: 'series-name' })
|
|
227
|
+
], NileHeatmapChart.prototype, "seriesName", void 0);
|
|
228
|
+
__decorate([
|
|
229
|
+
property({ type: Number, attribute: 'color-min' })
|
|
230
|
+
], NileHeatmapChart.prototype, "colorMin", void 0);
|
|
231
|
+
__decorate([
|
|
232
|
+
property({ type: Number, attribute: 'color-max' })
|
|
233
|
+
], NileHeatmapChart.prototype, "colorMax", void 0);
|
|
234
|
+
__decorate([
|
|
235
|
+
property({ type: String, attribute: 'min-color' })
|
|
236
|
+
], NileHeatmapChart.prototype, "minColor", void 0);
|
|
237
|
+
__decorate([
|
|
238
|
+
property({ type: String, attribute: 'max-color' })
|
|
239
|
+
], NileHeatmapChart.prototype, "maxColor", void 0);
|
|
240
|
+
__decorate([
|
|
241
|
+
property({ type: String, attribute: 'color-axis-title' })
|
|
242
|
+
], NileHeatmapChart.prototype, "colorAxisTitle", void 0);
|
|
243
|
+
__decorate([
|
|
244
|
+
property({ type: Object })
|
|
245
|
+
], NileHeatmapChart.prototype, "options", void 0);
|
|
246
|
+
__decorate([
|
|
247
|
+
property({ type: Boolean, reflect: true })
|
|
248
|
+
], NileHeatmapChart.prototype, "loading", void 0);
|
|
249
|
+
__decorate([
|
|
250
|
+
property({ type: String })
|
|
251
|
+
], NileHeatmapChart.prototype, "height", void 0);
|
|
252
|
+
__decorate([
|
|
253
|
+
property({ type: Boolean, attribute: 'show-data-labels' })
|
|
254
|
+
], NileHeatmapChart.prototype, "showDataLabels", void 0);
|
|
255
|
+
NileHeatmapChart = __decorate([
|
|
256
|
+
customElement('nile-heatmap-chart')
|
|
257
|
+
], NileHeatmapChart);
|
|
258
|
+
export { NileHeatmapChart };
|
|
259
|
+
//# sourceMappingURL=nile-heatmap-chart.js.map
|
|
@@ -112,7 +112,9 @@ let NileHistogramChart = class NileHistogramChart extends NileElement {
|
|
|
112
112
|
buildOptions() {
|
|
113
113
|
const self = this;
|
|
114
114
|
const bw = this.binWidth > 0 ? this.binWidth : undefined;
|
|
115
|
-
|
|
115
|
+
// Highcharts #15: line/scatter x values must be ascending; raw samples are often unsorted.
|
|
116
|
+
const sorted = [...this.data].sort((a, b) => a - b);
|
|
117
|
+
const scatterData = sorted.map(x => [x, 0]);
|
|
116
118
|
return deepMerge({
|
|
117
119
|
chart: { height: this.height },
|
|
118
120
|
title: { text: this.chartTitle || undefined },
|
|
@@ -13,7 +13,7 @@ export const styles = css `
|
|
|
13
13
|
/* ── Card variant ── */
|
|
14
14
|
|
|
15
15
|
.kpi-card {
|
|
16
|
-
background:
|
|
16
|
+
background: transparent;
|
|
17
17
|
border: var(--nile-border-width-1, var(--ng-stroke-width-1)) solid var(--nile-colors-neutral-400, var(--ng-colors-border-secondary));
|
|
18
18
|
border-radius: var(--nile-radius-radius-3xl, var(--ng-radius-xl));
|
|
19
19
|
box-shadow: var(--nile-box-shadow-3, var(--ng-shadow-sm));
|
|
@@ -79,17 +79,17 @@ export const styles = css `
|
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
.kpi-trend--up {
|
|
82
|
-
background:
|
|
82
|
+
background: none;
|
|
83
83
|
color: var(--nile-colors-success-700, #067647);
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
.kpi-trend--down {
|
|
87
|
-
background:
|
|
87
|
+
background: none;
|
|
88
88
|
color: var(--nile-colors-error-700, #B42318);
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
.kpi-trend--neutral {
|
|
92
|
-
background:
|
|
92
|
+
background: none;
|
|
93
93
|
color: var(--nile-colors-neutral-700, var(--ng-colors-text-secondary-700));
|
|
94
94
|
}
|
|
95
95
|
|
|
@@ -24,6 +24,8 @@ export interface ChartKpiSeparatedPayload {
|
|
|
24
24
|
gaugeColor?: string;
|
|
25
25
|
loading?: boolean;
|
|
26
26
|
options?: Highcharts.Options;
|
|
27
|
+
/** Optional min height when embedded in `<nile-chart>` (maps to host `min-height`). */
|
|
28
|
+
height?: string;
|
|
27
29
|
}
|
|
28
30
|
/** Separated `{ chart, aq }` input for `<nile-kpi-chart>`. */
|
|
29
31
|
export interface NileKpiConfigInputType {
|
|
@@ -86,6 +86,12 @@ let NileKpiChart = class NileKpiChart extends NileElement {
|
|
|
86
86
|
this.loading = c.loading;
|
|
87
87
|
if (c.options !== undefined)
|
|
88
88
|
this.options = c.options;
|
|
89
|
+
if (c.height !== undefined) {
|
|
90
|
+
if (c.height)
|
|
91
|
+
this.style.minHeight = c.height;
|
|
92
|
+
else
|
|
93
|
+
this.style.removeProperty('min-height');
|
|
94
|
+
}
|
|
89
95
|
}
|
|
90
96
|
if (aq) {
|
|
91
97
|
if (aq.chartTitle != null)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const styles: import("lit").CSSResult;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { css } from 'lit';
|
|
2
|
+
export const styles = css `
|
|
3
|
+
:host {
|
|
4
|
+
display: block;
|
|
5
|
+
width: 100%;
|
|
6
|
+
position: relative;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
:host([hidden]) {
|
|
10
|
+
display: none;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.chart-container {
|
|
14
|
+
width: 100%;
|
|
15
|
+
min-height: var(--nile-height-200px, var(--ng-height-200px));
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.chart-loading {
|
|
19
|
+
display: flex;
|
|
20
|
+
align-items: center;
|
|
21
|
+
justify-content: center;
|
|
22
|
+
min-height: inherit;
|
|
23
|
+
color: var(--nile-colors-neutral-700, var(--ng-colors-text-secondary-700));
|
|
24
|
+
font-family: var(--nile-font-family-serif, var(--ng-font-family-body));
|
|
25
|
+
font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));
|
|
26
|
+
}
|
|
27
|
+
`;
|
|
28
|
+
//# sourceMappingURL=nile-line-column-chart.css.js.map
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { CSSResultGroup, PropertyValues, TemplateResult } from 'lit';
|
|
2
|
+
import type Highcharts from 'highcharts';
|
|
3
|
+
import NileElement from '../internal/nile-element.js';
|
|
4
|
+
import type { SeparatedChartConfigInputType } from '../internal/types/separated-chart-config-input.type.js';
|
|
5
|
+
export interface LineColumnSeriesPart {
|
|
6
|
+
name: string;
|
|
7
|
+
data: number[];
|
|
8
|
+
color?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class NileLineColumnChart extends NileElement {
|
|
11
|
+
static styles: CSSResultGroup;
|
|
12
|
+
private _hc;
|
|
13
|
+
private chart;
|
|
14
|
+
private resizeObserver;
|
|
15
|
+
private chartContainer;
|
|
16
|
+
config: SeparatedChartConfigInputType | null;
|
|
17
|
+
chartTitle: string;
|
|
18
|
+
chartSubtitle: string;
|
|
19
|
+
categories: string[];
|
|
20
|
+
columnSeries: LineColumnSeriesPart;
|
|
21
|
+
lineSeries: LineColumnSeriesPart;
|
|
22
|
+
columnAxisTitle: string;
|
|
23
|
+
lineAxisTitle: string;
|
|
24
|
+
options: Highcharts.Options;
|
|
25
|
+
loading: boolean;
|
|
26
|
+
height: string;
|
|
27
|
+
private applyConfig;
|
|
28
|
+
connectedCallback(): void;
|
|
29
|
+
disconnectedCallback(): void;
|
|
30
|
+
protected firstUpdated(): void;
|
|
31
|
+
protected updated(changedProperties: PropertyValues): void;
|
|
32
|
+
private setupResizeObserver;
|
|
33
|
+
private buildOptions;
|
|
34
|
+
private initChart;
|
|
35
|
+
private destroyChart;
|
|
36
|
+
render(): TemplateResult;
|
|
37
|
+
}
|
|
38
|
+
declare global {
|
|
39
|
+
interface HTMLElementTagNameMap {
|
|
40
|
+
'nile-line-column-chart': NileLineColumnChart;
|
|
41
|
+
}
|
|
42
|
+
}
|