@acorex/charts 20.6.22 → 20.6.24
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/fesm2022/acorex-charts-funnel-chart.mjs +81 -13
- package/fesm2022/acorex-charts-funnel-chart.mjs.map +1 -1
- package/fesm2022/acorex-charts-heatmap-chart.mjs +127 -27
- package/fesm2022/acorex-charts-heatmap-chart.mjs.map +1 -1
- package/funnel-chart/index.d.ts +18 -1
- package/heatmap-chart/index.d.ts +20 -2
- package/package.json +1 -1
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
import { AXChartComponent, getEasingFunction, computeTooltipPosition } from '@acorex/charts';
|
|
2
2
|
import { AXChartTooltipComponent } from '@acorex/charts/chart-tooltip';
|
|
3
|
+
import { AXPlatform } from '@acorex/core/platform';
|
|
3
4
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { InjectionToken, input, viewChild, signal, inject, computed, afterNextRender, effect, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
|
|
5
|
+
import { InjectionToken, input, output, viewChild, signal, inject, computed, afterNextRender, effect, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
|
|
6
|
+
import { map } from 'rxjs';
|
|
5
7
|
|
|
6
8
|
const AXFunnelChartDefaultConfig = {
|
|
7
9
|
margin: { top: 20, right: 160, bottom: 20, left: 160 },
|
|
8
10
|
neckWidth: 0.3,
|
|
9
11
|
showLabels: true,
|
|
12
|
+
labelOffset: 24,
|
|
10
13
|
showTooltip: true,
|
|
11
14
|
animationDuration: 1000,
|
|
12
15
|
animationEasing: 'cubic-out',
|
|
13
|
-
|
|
14
|
-
|
|
16
|
+
startColor: 'rgb(var(--ax-sys-color-primary-50))',
|
|
17
|
+
endColor: 'rgb(var(--ax-sys-color-primary-950))',
|
|
15
18
|
messages: {
|
|
16
19
|
noData: 'No funnel data available',
|
|
17
20
|
noDataIcon: 'fa-light fa-filter-list',
|
|
@@ -26,12 +29,18 @@ class AXFunnelChartComponent extends AXChartComponent {
|
|
|
26
29
|
// Inputs
|
|
27
30
|
data = input([], ...(ngDevMode ? [{ debugName: "data" }] : []));
|
|
28
31
|
options = input({}, ...(ngDevMode ? [{ debugName: "options" }] : []));
|
|
32
|
+
// Outputs
|
|
33
|
+
/** Emitted when a funnel segment is clicked */
|
|
34
|
+
segmentClick = output();
|
|
29
35
|
chartContainerEl = viewChild.required('chartContainer');
|
|
30
36
|
// SVG State
|
|
31
37
|
svgElement = null;
|
|
32
38
|
d3;
|
|
33
39
|
_initialized = signal(false, ...(ngDevMode ? [{ debugName: "_initialized" }] : []));
|
|
34
40
|
_rendered = signal(false, ...(ngDevMode ? [{ debugName: "_rendered" }] : []));
|
|
41
|
+
platformService = inject(AXPlatform);
|
|
42
|
+
isRtl = signal(this.platformService.isRtl(), ...(ngDevMode ? [{ debugName: "isRtl" }] : []));
|
|
43
|
+
directionSub;
|
|
35
44
|
// Tooltip Signals
|
|
36
45
|
_tooltipVisible = signal(false, ...(ngDevMode ? [{ debugName: "_tooltipVisible" }] : []));
|
|
37
46
|
_tooltipPosition = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: "_tooltipPosition" }] : []));
|
|
@@ -50,6 +59,14 @@ class AXFunnelChartComponent extends AXChartComponent {
|
|
|
50
59
|
afterNextRender(() => {
|
|
51
60
|
this._initialized.set(true);
|
|
52
61
|
this.loadD3();
|
|
62
|
+
this.directionSub = this.platformService.directionChange
|
|
63
|
+
.pipe(map((i) => i.data === 'rtl'))
|
|
64
|
+
.subscribe((isRtl) => {
|
|
65
|
+
this.isRtl.set(isRtl);
|
|
66
|
+
if (this._rendered()) {
|
|
67
|
+
this.updateChart();
|
|
68
|
+
}
|
|
69
|
+
});
|
|
53
70
|
});
|
|
54
71
|
effect(() => {
|
|
55
72
|
// Trigger update on data or option change
|
|
@@ -61,6 +78,7 @@ class AXFunnelChartComponent extends AXChartComponent {
|
|
|
61
78
|
});
|
|
62
79
|
}
|
|
63
80
|
ngOnDestroy() {
|
|
81
|
+
this.directionSub?.unsubscribe();
|
|
64
82
|
this.cleanupChart();
|
|
65
83
|
}
|
|
66
84
|
async loadD3() {
|
|
@@ -81,13 +99,17 @@ class AXFunnelChartComponent extends AXChartComponent {
|
|
|
81
99
|
if (this.svgElement)
|
|
82
100
|
this.svgElement.remove();
|
|
83
101
|
const data = [...this.data()].sort((a, b) => b.value - a.value);
|
|
84
|
-
if (!data.length)
|
|
102
|
+
if (!data.length) {
|
|
103
|
+
this.hideTooltip();
|
|
85
104
|
return;
|
|
105
|
+
}
|
|
86
106
|
const container = this.chartContainerEl().nativeElement;
|
|
87
107
|
const width = container.clientWidth;
|
|
88
108
|
const height = container.clientHeight;
|
|
89
109
|
const opt = this.effectiveOptions();
|
|
90
110
|
const margin = opt.margin;
|
|
111
|
+
const isRtl = this.isRtl();
|
|
112
|
+
const labelOffset = opt.labelOffset ?? 24;
|
|
91
113
|
this.svgElement = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
|
|
92
114
|
const svg = this.d3
|
|
93
115
|
.select(this.svgElement)
|
|
@@ -99,9 +121,9 @@ class AXFunnelChartComponent extends AXChartComponent {
|
|
|
99
121
|
const innerWidth = width - margin.left - margin.right;
|
|
100
122
|
const innerHeight = height - margin.top - margin.bottom;
|
|
101
123
|
const g = svg.append('g').attr('transform', `translate(${margin.left},${margin.top})`);
|
|
102
|
-
const colorScale = this.d3.scaleOrdinal().range(opt.colors);
|
|
103
124
|
const sliceHeight = innerHeight / data.length;
|
|
104
125
|
const maxValue = data[0].value;
|
|
126
|
+
const minValue = data[data.length - 1]?.value ?? maxValue;
|
|
105
127
|
const easing = getEasingFunction(this.d3, opt.animationEasing);
|
|
106
128
|
data.forEach((d, i) => {
|
|
107
129
|
const topVal = d.value;
|
|
@@ -114,18 +136,20 @@ class AXFunnelChartComponent extends AXChartComponent {
|
|
|
114
136
|
const yBottom = (i + 1) * sliceHeight;
|
|
115
137
|
const pathData = `M ${xTop},${yTop} L ${xTop + topW},${yTop} L ${xBottom + bottomW},${yBottom} L ${xBottom},${yBottom} Z`;
|
|
116
138
|
const sliceGroup = g.append('g').attr('class', 'funnel-slice-container');
|
|
139
|
+
const computedColor = this.resolveSliceColor(d, i, opt, minValue, maxValue);
|
|
117
140
|
const path = sliceGroup
|
|
118
141
|
.append('path')
|
|
119
142
|
.attr('class', 'funnel-slice')
|
|
120
143
|
.attr('d', pathData)
|
|
121
|
-
.attr('fill',
|
|
144
|
+
.attr('fill', computedColor)
|
|
122
145
|
.style('opacity', 0)
|
|
123
146
|
.on('mouseenter', (event) => {
|
|
124
147
|
svg.classed('is-dimmed', true);
|
|
125
148
|
this.d3.select(event.currentTarget).classed('is-active', true);
|
|
126
|
-
this.showTooltip(event, d);
|
|
149
|
+
this.showTooltip(event, d, computedColor);
|
|
127
150
|
})
|
|
128
151
|
.on('mousemove', (event) => this.updateTooltipPosition(event))
|
|
152
|
+
.on('click', () => this.segmentClick.emit(d))
|
|
129
153
|
.on('mouseleave', (event) => {
|
|
130
154
|
svg.classed('is-dimmed', false);
|
|
131
155
|
this.d3.select(event.currentTarget).classed('is-active', false);
|
|
@@ -139,17 +163,24 @@ class AXFunnelChartComponent extends AXChartComponent {
|
|
|
139
163
|
.style('opacity', 1);
|
|
140
164
|
if (opt.showLabels) {
|
|
141
165
|
const labelGroup = sliceGroup.append('g').attr('class', 'funnel-label-group').style('opacity', 0);
|
|
166
|
+
const labelX = isRtl ? innerWidth / 2 - topW / 2 - labelOffset : innerWidth / 2 + topW / 2 + labelOffset;
|
|
167
|
+
// In RTL documents, SVG `text-anchor: end` can expand *into* the plot area because "end"
|
|
168
|
+
// becomes the logical left edge. Using `start` makes the label expand away from the slice
|
|
169
|
+
// on both LTR (to the right) and RTL (to the left).
|
|
170
|
+
const anchor = 'start';
|
|
142
171
|
labelGroup
|
|
143
172
|
.append('text')
|
|
144
173
|
.attr('class', 'funnel-label-name')
|
|
145
|
-
.attr('x',
|
|
174
|
+
.attr('x', labelX)
|
|
146
175
|
.attr('y', yTop + sliceHeight / 2 - 5)
|
|
176
|
+
.attr('text-anchor', anchor)
|
|
147
177
|
.text(d.name);
|
|
148
178
|
labelGroup
|
|
149
179
|
.append('text')
|
|
150
180
|
.attr('class', 'funnel-label-value')
|
|
151
|
-
.attr('x',
|
|
181
|
+
.attr('x', labelX)
|
|
152
182
|
.attr('y', yTop + sliceHeight / 2 + 15)
|
|
183
|
+
.attr('text-anchor', anchor)
|
|
153
184
|
.text(d.value.toLocaleString());
|
|
154
185
|
labelGroup
|
|
155
186
|
.transition()
|
|
@@ -159,13 +190,50 @@ class AXFunnelChartComponent extends AXChartComponent {
|
|
|
159
190
|
}
|
|
160
191
|
});
|
|
161
192
|
}
|
|
193
|
+
resolveSliceColor(item, index, opt, minValue, maxValue) {
|
|
194
|
+
if (item.color)
|
|
195
|
+
return item.color;
|
|
196
|
+
const palette = opt.colors?.filter(Boolean) ?? [];
|
|
197
|
+
if (palette.length > 0) {
|
|
198
|
+
const key = String(item.id ?? item.name ?? index);
|
|
199
|
+
const idx = this.hashStringToUint32(key) % palette.length;
|
|
200
|
+
return palette[idx] ?? opt.startColor ?? '#1e1b4b';
|
|
201
|
+
}
|
|
202
|
+
const startColor = opt.startColor ?? '#1e1b4b';
|
|
203
|
+
const endColor = opt.endColor ?? '#818cf8';
|
|
204
|
+
const resolvedStartColor = this.resolveCssColor(startColor);
|
|
205
|
+
const resolvedEndColor = this.resolveCssColor(endColor);
|
|
206
|
+
const range = maxValue - minValue;
|
|
207
|
+
const t = range === 0 ? 1 : (item.value - minValue) / range;
|
|
208
|
+
const clamped = Math.max(0, Math.min(1, t));
|
|
209
|
+
return this.d3.interpolateRgb(resolvedStartColor, resolvedEndColor)(clamped);
|
|
210
|
+
}
|
|
211
|
+
hashStringToUint32(input) {
|
|
212
|
+
let hash = 5381;
|
|
213
|
+
for (let i = 0; i < input.length; i++) {
|
|
214
|
+
hash = (hash * 33) ^ input.charCodeAt(i);
|
|
215
|
+
}
|
|
216
|
+
return hash >>> 0;
|
|
217
|
+
}
|
|
218
|
+
resolveCssColor(color) {
|
|
219
|
+
const container = this.chartContainerEl().nativeElement;
|
|
220
|
+
const probe = document.createElement('span');
|
|
221
|
+
probe.style.color = color;
|
|
222
|
+
probe.style.position = 'absolute';
|
|
223
|
+
probe.style.left = '-9999px';
|
|
224
|
+
probe.style.top = '-9999px';
|
|
225
|
+
container.appendChild(probe);
|
|
226
|
+
const computed = getComputedStyle(probe).color;
|
|
227
|
+
probe.remove();
|
|
228
|
+
return computed || color;
|
|
229
|
+
}
|
|
162
230
|
updateChart() {
|
|
163
231
|
this.createChart();
|
|
164
232
|
}
|
|
165
|
-
showTooltip(event, item) {
|
|
233
|
+
showTooltip(event, item, color) {
|
|
166
234
|
if (!this.effectiveOptions().showTooltip)
|
|
167
235
|
return;
|
|
168
|
-
this._tooltipData.set({ title: item.name, value: item.value.toLocaleString(), color
|
|
236
|
+
this._tooltipData.set({ title: item.name, value: item.value.toLocaleString(), color });
|
|
169
237
|
this._tooltipVisible.set(true);
|
|
170
238
|
this.updateTooltipPosition(event);
|
|
171
239
|
}
|
|
@@ -192,11 +260,11 @@ class AXFunnelChartComponent extends AXChartComponent {
|
|
|
192
260
|
}
|
|
193
261
|
}
|
|
194
262
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXFunnelChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
195
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.
|
|
263
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", type: AXFunnelChartComponent, isStandalone: true, selector: "ax-funnel-chart", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { segmentClick: "segmentClick" }, viewQueries: [{ propertyName: "chartContainerEl", first: true, predicate: ["chartContainer"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-funnel-chart-container\" role=\"img\" #chartContainer>\n @if (data()?.length === 0) {\n <div class=\"ax-funnel-no-data\">\n <i [class]=\"effectiveOptions().messages?.noDataIcon\"></i>\n <p class=\"ax-funnel-no-data-text\">{{ effectiveOptions().messages?.noData }}</p>\n </div>\n }\n</div>\n\n<ax-chart-tooltip [data]=\"tooltipData()\" [position]=\"tooltipPosition()\" [visible]=\"tooltipVisible()\">\n</ax-chart-tooltip>\n", styles: ["ax-funnel-chart{display:block;width:100%;height:100%;min-height:350px;--ax-comp-funnel-bg: 0, 0, 0, 0;--ax-comp-funnel-text: var(--ax-sys-color-on-surface);--ax-comp-funnel-label-secondary: var(--ax-sys-color-on-surface-variant);--ax-comp-funnel-slice-opacity: .9;--ax-comp-funnel-dim-opacity: .25}ax-funnel-chart .ax-funnel-chart-container{position:relative;width:100%;height:100%;overflow:hidden;background-color:rgba(var(--ax-comp-funnel-bg));padding:1rem}ax-funnel-chart .ax-funnel-chart-container svg{display:block;width:100%;height:100%;overflow:visible}ax-funnel-chart .ax-funnel-chart-container svg .funnel-slice{cursor:pointer;opacity:var(--ax-comp-funnel-slice-opacity);transition:opacity .3s cubic-bezier(.4,0,.2,1)}ax-funnel-chart .ax-funnel-chart-container svg .funnel-slice.is-active{opacity:1;filter:saturate(1.2)}ax-funnel-chart .ax-funnel-chart-container svg .funnel-label-group{pointer-events:none}ax-funnel-chart .ax-funnel-chart-container svg .funnel-label-group .funnel-label-name{font-size:12px;font-weight:700;fill:rgb(var(--ax-comp-funnel-text));text-transform:uppercase;letter-spacing:.05em}ax-funnel-chart .ax-funnel-chart-container svg .funnel-label-group .funnel-label-value{font-size:13px;fill:rgb(var(--ax-comp-funnel-label-secondary));font-variant-numeric:tabular-nums;font-weight:500}ax-funnel-chart .ax-funnel-chart-container svg.is-dimmed .funnel-slice:not(.is-active){opacity:var(--ax-comp-funnel-dim-opacity)}ax-funnel-chart .ax-funnel-no-data{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;color:rgba(var(--ax-comp-funnel-text),.6)}ax-funnel-chart .ax-funnel-no-data i{font-size:2rem;margin-bottom:.5rem}\n"], dependencies: [{ kind: "component", type: AXChartTooltipComponent, selector: "ax-chart-tooltip", inputs: ["data", "position", "visible", "showPercentage", "style"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
196
264
|
}
|
|
197
265
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXFunnelChartComponent, decorators: [{
|
|
198
266
|
type: Component,
|
|
199
|
-
args: [{ selector: 'ax-funnel-chart', encapsulation: ViewEncapsulation.None, imports: [AXChartTooltipComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ax-funnel-chart\" role=\"img\" #chartContainer></div>\n\n<ax-chart-tooltip [data]=\"tooltipData()\" [position]=\"tooltipPosition()\" [visible]=\"tooltipVisible()\">\n</ax-chart-tooltip>\n", styles: ["ax-funnel-chart{display:block;width:100%;height:100%;min-height:350px;--ax-comp-funnel-bg: 0, 0, 0, 0;--ax-comp-funnel-text: var(--ax-sys-color-on-surface);--ax-comp-funnel-label-secondary: var(--ax-sys-color-on-surface-variant);--ax-comp-funnel-slice-opacity: .9;--ax-comp-funnel-dim-opacity: .25}ax-funnel-chart .ax-funnel-chart{position:relative;width:100%;height:100%;overflow:hidden;background-color:rgba(var(--ax-comp-funnel-bg))}ax-funnel-chart .ax-funnel-chart svg{display:block;width:100%;height:100%;overflow:visible}ax-funnel-chart .ax-funnel-chart svg .funnel-slice{cursor:pointer;opacity:var(--ax-comp-funnel-slice-opacity);transition:opacity .3s cubic-bezier(.4,0,.2,1)}ax-funnel-chart .ax-funnel-chart svg .funnel-slice.is-active{opacity:1;filter:saturate(1.2)}ax-funnel-chart .ax-funnel-chart svg .funnel-label-group{pointer-events:none}ax-funnel-chart .ax-funnel-chart svg .funnel-label-group .funnel-label-name{font-size:12px;font-weight:700;fill:rgb(var(--ax-comp-funnel-text));text-transform:uppercase;letter-spacing:.05em}ax-funnel-chart .ax-funnel-chart svg .funnel-label-group .funnel-label-value{font-size:13px;fill:rgb(var(--ax-comp-funnel-label-secondary));font-variant-numeric:tabular-nums;font-weight:500}ax-funnel-chart .ax-funnel-chart svg.is-dimmed .funnel-slice:not(.is-active){opacity:var(--ax-comp-funnel-dim-opacity)}\n"] }]
|
|
267
|
+
args: [{ selector: 'ax-funnel-chart', encapsulation: ViewEncapsulation.None, imports: [AXChartTooltipComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ax-funnel-chart-container\" role=\"img\" #chartContainer>\n @if (data()?.length === 0) {\n <div class=\"ax-funnel-no-data\">\n <i [class]=\"effectiveOptions().messages?.noDataIcon\"></i>\n <p class=\"ax-funnel-no-data-text\">{{ effectiveOptions().messages?.noData }}</p>\n </div>\n }\n</div>\n\n<ax-chart-tooltip [data]=\"tooltipData()\" [position]=\"tooltipPosition()\" [visible]=\"tooltipVisible()\">\n</ax-chart-tooltip>\n", styles: ["ax-funnel-chart{display:block;width:100%;height:100%;min-height:350px;--ax-comp-funnel-bg: 0, 0, 0, 0;--ax-comp-funnel-text: var(--ax-sys-color-on-surface);--ax-comp-funnel-label-secondary: var(--ax-sys-color-on-surface-variant);--ax-comp-funnel-slice-opacity: .9;--ax-comp-funnel-dim-opacity: .25}ax-funnel-chart .ax-funnel-chart-container{position:relative;width:100%;height:100%;overflow:hidden;background-color:rgba(var(--ax-comp-funnel-bg));padding:1rem}ax-funnel-chart .ax-funnel-chart-container svg{display:block;width:100%;height:100%;overflow:visible}ax-funnel-chart .ax-funnel-chart-container svg .funnel-slice{cursor:pointer;opacity:var(--ax-comp-funnel-slice-opacity);transition:opacity .3s cubic-bezier(.4,0,.2,1)}ax-funnel-chart .ax-funnel-chart-container svg .funnel-slice.is-active{opacity:1;filter:saturate(1.2)}ax-funnel-chart .ax-funnel-chart-container svg .funnel-label-group{pointer-events:none}ax-funnel-chart .ax-funnel-chart-container svg .funnel-label-group .funnel-label-name{font-size:12px;font-weight:700;fill:rgb(var(--ax-comp-funnel-text));text-transform:uppercase;letter-spacing:.05em}ax-funnel-chart .ax-funnel-chart-container svg .funnel-label-group .funnel-label-value{font-size:13px;fill:rgb(var(--ax-comp-funnel-label-secondary));font-variant-numeric:tabular-nums;font-weight:500}ax-funnel-chart .ax-funnel-chart-container svg.is-dimmed .funnel-slice:not(.is-active){opacity:var(--ax-comp-funnel-dim-opacity)}ax-funnel-chart .ax-funnel-no-data{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;color:rgba(var(--ax-comp-funnel-text),.6)}ax-funnel-chart .ax-funnel-no-data i{font-size:2rem;margin-bottom:.5rem}\n"] }]
|
|
200
268
|
}], ctorParameters: () => [] });
|
|
201
269
|
|
|
202
270
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-charts-funnel-chart.mjs","sources":["../tmp-esm2022/funnel-chart/lib/funnel-chart.config.js","../tmp-esm2022/funnel-chart/lib/funnel-chart.component.js","../tmp-esm2022/funnel-chart/acorex-charts-funnel-chart.js"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nexport const AXFunnelChartDefaultConfig = {\n margin: { top: 20, right: 160, bottom: 20, left: 160 },\n neckWidth: 0.3,\n showLabels: true,\n showTooltip: true,\n animationDuration: 1000,\n animationEasing: 'cubic-out',\n // Modern Blue Palette\n colors: ['#1e1b4b', '#312e81', '#3730a3', '#4338ca', '#4f46e5', '#6366f1', '#818cf8'],\n messages: {\n noData: 'No funnel data available',\n noDataIcon: 'fa-light fa-filter-list',\n },\n};\nexport const AX_FUNNEL_CHART_CONFIG = new InjectionToken('AX_FUNNEL_CHART_CONFIG', {\n providedIn: 'root',\n factory: () => AXFunnelChartDefaultConfig,\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVubmVsLWNoYXJ0LmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NoYXJ0cy9mdW5uZWwtY2hhcnQvc3JjL2xpYi9mdW5uZWwtY2hhcnQuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0MsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQXdCO0lBQzdELE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7SUFDdEQsU0FBUyxFQUFFLEdBQUc7SUFDZCxVQUFVLEVBQUUsSUFBSTtJQUNoQixXQUFXLEVBQUUsSUFBSTtJQUNqQixpQkFBaUIsRUFBRSxJQUFJO0lBQ3ZCLGVBQWUsRUFBRSxXQUFXO0lBQzVCLHNCQUFzQjtJQUN0QixNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUM7SUFDckYsUUFBUSxFQUFFO1FBQ1IsTUFBTSxFQUFFLDBCQUEwQjtRQUNsQyxVQUFVLEVBQUUseUJBQXlCO0tBQ3RDO0NBQ0YsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLElBQUksY0FBYyxDQUFzQix3QkFBd0IsRUFBRTtJQUN0RyxVQUFVLEVBQUUsTUFBTTtJQUNsQixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsMEJBQTBCO0NBQzFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWEZ1bm5lbENoYXJ0T3B0aW9uIH0gZnJvbSAnLi9mdW5uZWwtY2hhcnQudHlwZSc7XG5cbmV4cG9ydCBjb25zdCBBWEZ1bm5lbENoYXJ0RGVmYXVsdENvbmZpZzogQVhGdW5uZWxDaGFydE9wdGlvbiA9IHtcbiAgbWFyZ2luOiB7IHRvcDogMjAsIHJpZ2h0OiAxNjAsIGJvdHRvbTogMjAsIGxlZnQ6IDE2MCB9LFxuICBuZWNrV2lkdGg6IDAuMyxcbiAgc2hvd0xhYmVsczogdHJ1ZSxcbiAgc2hvd1Rvb2x0aXA6IHRydWUsXG4gIGFuaW1hdGlvbkR1cmF0aW9uOiAxMDAwLFxuICBhbmltYXRpb25FYXNpbmc6ICdjdWJpYy1vdXQnLFxuICAvLyBNb2Rlcm4gQmx1ZSBQYWxldHRlXG4gIGNvbG9yczogWycjMWUxYjRiJywgJyMzMTJlODEnLCAnIzM3MzBhMycsICcjNDMzOGNhJywgJyM0ZjQ2ZTUnLCAnIzYzNjZmMScsICcjODE4Y2Y4J10sXG4gIG1lc3NhZ2VzOiB7XG4gICAgbm9EYXRhOiAnTm8gZnVubmVsIGRhdGEgYXZhaWxhYmxlJyxcbiAgICBub0RhdGFJY29uOiAnZmEtbGlnaHQgZmEtZmlsdGVyLWxpc3QnLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IEFYX0ZVTk5FTF9DSEFSVF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48QVhGdW5uZWxDaGFydE9wdGlvbj4oJ0FYX0ZVTk5FTF9DSEFSVF9DT05GSUcnLCB7XG4gIHByb3ZpZGVkSW46ICdyb290JyxcbiAgZmFjdG9yeTogKCkgPT4gQVhGdW5uZWxDaGFydERlZmF1bHRDb25maWcsXG59KTtcbiJdfQ==","import { AXChartComponent, computeTooltipPosition, getEasingFunction } from '@acorex/charts';\nimport { AXChartTooltipComponent } from '@acorex/charts/chart-tooltip';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, afterNextRender, computed, effect, inject, input, signal, viewChild, } from '@angular/core';\nimport { AX_FUNNEL_CHART_CONFIG } from './funnel-chart.config';\nimport * as i0 from \"@angular/core\";\nexport class AXFunnelChartComponent extends AXChartComponent {\n // Inputs\n data = input([], ...(ngDevMode ? [{ debugName: \"data\" }] : []));\n options = input({}, ...(ngDevMode ? [{ debugName: \"options\" }] : []));\n chartContainerEl = viewChild.required('chartContainer');\n // SVG State\n svgElement = null;\n d3;\n _initialized = signal(false, ...(ngDevMode ? [{ debugName: \"_initialized\" }] : []));\n _rendered = signal(false, ...(ngDevMode ? [{ debugName: \"_rendered\" }] : []));\n // Tooltip Signals\n _tooltipVisible = signal(false, ...(ngDevMode ? [{ debugName: \"_tooltipVisible\" }] : []));\n _tooltipPosition = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: \"_tooltipPosition\" }] : []));\n _tooltipData = signal({ title: '', value: '' }, ...(ngDevMode ? [{ debugName: \"_tooltipData\" }] : []));\n _tooltipRafId = null;\n tooltipVisible = this._tooltipVisible.asReadonly();\n tooltipPosition = this._tooltipPosition.asReadonly();\n tooltipData = this._tooltipData.asReadonly();\n configToken = inject(AX_FUNNEL_CHART_CONFIG);\n effectiveOptions = computed(() => ({\n ...this.configToken,\n ...this.options(),\n }), ...(ngDevMode ? [{ debugName: \"effectiveOptions\" }] : []));\n constructor() {\n super();\n afterNextRender(() => {\n this._initialized.set(true);\n this.loadD3();\n });\n effect(() => {\n // Trigger update on data or option change\n this.data();\n this.effectiveOptions();\n if (this._rendered()) {\n this.updateChart();\n }\n });\n }\n ngOnDestroy() {\n this.cleanupChart();\n }\n async loadD3() {\n if (this.d3)\n return;\n try {\n this.d3 = await import('d3');\n if (this._initialized() && this.chartContainerEl()) {\n this.createChart();\n this._rendered.set(true);\n }\n }\n catch (error) {\n console.error('AXFunnelChart: Failed to load D3.js', error);\n }\n }\n createChart() {\n if (this.svgElement)\n this.svgElement.remove();\n const data = [...this.data()].sort((a, b) => b.value - a.value);\n if (!data.length)\n return;\n const container = this.chartContainerEl().nativeElement;\n const width = container.clientWidth;\n const height = container.clientHeight;\n const opt = this.effectiveOptions();\n const margin = opt.margin;\n this.svgElement = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n const svg = this.d3\n .select(this.svgElement)\n .attr('width', '100%')\n .attr('height', '100%')\n .attr('viewBox', `0 0 ${width} ${height}`)\n .attr('preserveAspectRatio', 'xMidYMid meet');\n container.appendChild(this.svgElement);\n const innerWidth = width - margin.left - margin.right;\n const innerHeight = height - margin.top - margin.bottom;\n const g = svg.append('g').attr('transform', `translate(${margin.left},${margin.top})`);\n const colorScale = this.d3.scaleOrdinal().range(opt.colors);\n const sliceHeight = innerHeight / data.length;\n const maxValue = data[0].value;\n const easing = getEasingFunction(this.d3, opt.animationEasing);\n data.forEach((d, i) => {\n const topVal = d.value;\n const bottomVal = data[i + 1]?.value ?? d.value * opt.neckWidth;\n const topW = (topVal / maxValue) * innerWidth;\n const bottomW = (bottomVal / maxValue) * innerWidth;\n const xTop = (innerWidth - topW) / 2;\n const xBottom = (innerWidth - bottomW) / 2;\n const yTop = i * sliceHeight;\n const yBottom = (i + 1) * sliceHeight;\n const pathData = `M ${xTop},${yTop} L ${xTop + topW},${yTop} L ${xBottom + bottomW},${yBottom} L ${xBottom},${yBottom} Z`;\n const sliceGroup = g.append('g').attr('class', 'funnel-slice-container');\n const path = sliceGroup\n .append('path')\n .attr('class', 'funnel-slice')\n .attr('d', pathData)\n .attr('fill', d.color ?? colorScale(i.toString()))\n .style('opacity', 0)\n .on('mouseenter', (event) => {\n svg.classed('is-dimmed', true);\n this.d3.select(event.currentTarget).classed('is-active', true);\n this.showTooltip(event, d);\n })\n .on('mousemove', (event) => this.updateTooltipPosition(event))\n .on('mouseleave', (event) => {\n svg.classed('is-dimmed', false);\n this.d3.select(event.currentTarget).classed('is-active', false);\n this.hideTooltip();\n });\n path\n .transition()\n .duration(opt.animationDuration)\n .delay(i * 80)\n .ease(easing)\n .style('opacity', 1);\n if (opt.showLabels) {\n const labelGroup = sliceGroup.append('g').attr('class', 'funnel-label-group').style('opacity', 0);\n labelGroup\n .append('text')\n .attr('class', 'funnel-label-name')\n .attr('x', innerWidth / 2 + topW / 2 + 25)\n .attr('y', yTop + sliceHeight / 2 - 5)\n .text(d.name);\n labelGroup\n .append('text')\n .attr('class', 'funnel-label-value')\n .attr('x', innerWidth / 2 + topW / 2 + 25)\n .attr('y', yTop + sliceHeight / 2 + 15)\n .text(d.value.toLocaleString());\n labelGroup\n .transition()\n .duration(600)\n .delay(400 + i * 80)\n .style('opacity', 1);\n }\n });\n }\n updateChart() {\n this.createChart();\n }\n showTooltip(event, item) {\n if (!this.effectiveOptions().showTooltip)\n return;\n this._tooltipData.set({ title: item.name, value: item.value.toLocaleString(), color: item.color });\n this._tooltipVisible.set(true);\n this.updateTooltipPosition(event);\n }\n updateTooltipPosition(event) {\n if (this._tooltipRafId)\n cancelAnimationFrame(this._tooltipRafId);\n this._tooltipRafId = requestAnimationFrame(() => {\n const containerEl = this.chartContainerEl().nativeElement;\n const rect = containerEl.getBoundingClientRect();\n const tooltipEl = containerEl.querySelector('.chart-tooltip');\n const tooltipRect = tooltipEl?.getBoundingClientRect() ?? null;\n this._tooltipPosition.set(computeTooltipPosition(rect, tooltipRect, event.clientX + 10, event.clientY - 10, 10));\n });\n }\n hideTooltip() {\n this._tooltipVisible.set(false);\n }\n cleanupChart() {\n if (this._tooltipRafId)\n cancelAnimationFrame(this._tooltipRafId);\n if (this.svgElement) {\n this.svgElement.remove();\n this.svgElement = null;\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXFunnelChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.2.0\", version: \"20.3.3\", type: AXFunnelChartComponent, isStandalone: true, selector: \"ax-funnel-chart\", inputs: { data: { classPropertyName: \"data\", publicName: \"data\", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: \"options\", publicName: \"options\", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: \"chartContainerEl\", first: true, predicate: [\"chartContainer\"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-funnel-chart\\\" role=\\\"img\\\" #chartContainer></div>\\n\\n<ax-chart-tooltip [data]=\\\"tooltipData()\\\" [position]=\\\"tooltipPosition()\\\" [visible]=\\\"tooltipVisible()\\\">\\n</ax-chart-tooltip>\\n\", styles: [\"ax-funnel-chart{display:block;width:100%;height:100%;min-height:350px;--ax-comp-funnel-bg: 0, 0, 0, 0;--ax-comp-funnel-text: var(--ax-sys-color-on-surface);--ax-comp-funnel-label-secondary: var(--ax-sys-color-on-surface-variant);--ax-comp-funnel-slice-opacity: .9;--ax-comp-funnel-dim-opacity: .25}ax-funnel-chart .ax-funnel-chart{position:relative;width:100%;height:100%;overflow:hidden;background-color:rgba(var(--ax-comp-funnel-bg))}ax-funnel-chart .ax-funnel-chart svg{display:block;width:100%;height:100%;overflow:visible}ax-funnel-chart .ax-funnel-chart svg .funnel-slice{cursor:pointer;opacity:var(--ax-comp-funnel-slice-opacity);transition:opacity .3s cubic-bezier(.4,0,.2,1)}ax-funnel-chart .ax-funnel-chart svg .funnel-slice.is-active{opacity:1;filter:saturate(1.2)}ax-funnel-chart .ax-funnel-chart svg .funnel-label-group{pointer-events:none}ax-funnel-chart .ax-funnel-chart svg .funnel-label-group .funnel-label-name{font-size:12px;font-weight:700;fill:rgb(var(--ax-comp-funnel-text));text-transform:uppercase;letter-spacing:.05em}ax-funnel-chart .ax-funnel-chart svg .funnel-label-group .funnel-label-value{font-size:13px;fill:rgb(var(--ax-comp-funnel-label-secondary));font-variant-numeric:tabular-nums;font-weight:500}ax-funnel-chart .ax-funnel-chart svg.is-dimmed .funnel-slice:not(.is-active){opacity:var(--ax-comp-funnel-dim-opacity)}\\n\"], dependencies: [{ kind: \"component\", type: AXChartTooltipComponent, selector: \"ax-chart-tooltip\", inputs: [\"data\", \"position\", \"visible\", \"showPercentage\", \"style\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXFunnelChartComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-funnel-chart', encapsulation: ViewEncapsulation.None, imports: [AXChartTooltipComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: \"<div class=\\\"ax-funnel-chart\\\" role=\\\"img\\\" #chartContainer></div>\\n\\n<ax-chart-tooltip [data]=\\\"tooltipData()\\\" [position]=\\\"tooltipPosition()\\\" [visible]=\\\"tooltipVisible()\\\">\\n</ax-chart-tooltip>\\n\", styles: [\"ax-funnel-chart{display:block;width:100%;height:100%;min-height:350px;--ax-comp-funnel-bg: 0, 0, 0, 0;--ax-comp-funnel-text: var(--ax-sys-color-on-surface);--ax-comp-funnel-label-secondary: var(--ax-sys-color-on-surface-variant);--ax-comp-funnel-slice-opacity: .9;--ax-comp-funnel-dim-opacity: .25}ax-funnel-chart .ax-funnel-chart{position:relative;width:100%;height:100%;overflow:hidden;background-color:rgba(var(--ax-comp-funnel-bg))}ax-funnel-chart .ax-funnel-chart svg{display:block;width:100%;height:100%;overflow:visible}ax-funnel-chart .ax-funnel-chart svg .funnel-slice{cursor:pointer;opacity:var(--ax-comp-funnel-slice-opacity);transition:opacity .3s cubic-bezier(.4,0,.2,1)}ax-funnel-chart .ax-funnel-chart svg .funnel-slice.is-active{opacity:1;filter:saturate(1.2)}ax-funnel-chart .ax-funnel-chart svg .funnel-label-group{pointer-events:none}ax-funnel-chart .ax-funnel-chart svg .funnel-label-group .funnel-label-name{font-size:12px;font-weight:700;fill:rgb(var(--ax-comp-funnel-text));text-transform:uppercase;letter-spacing:.05em}ax-funnel-chart .ax-funnel-chart svg .funnel-label-group .funnel-label-value{font-size:13px;fill:rgb(var(--ax-comp-funnel-label-secondary));font-variant-numeric:tabular-nums;font-weight:500}ax-funnel-chart .ax-funnel-chart svg.is-dimmed .funnel-slice:not(.is-active){opacity:var(--ax-comp-funnel-dim-opacity)}\\n\"] }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVubmVsLWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NoYXJ0cy9mdW5uZWwtY2hhcnQvc3JjL2xpYi9mdW5uZWwtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2hhcnRzL2Z1bm5lbC1jaGFydC9zcmMvbGliL2Z1bm5lbC1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQXdCLHNCQUFzQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkgsT0FBTyxFQUFFLHVCQUF1QixFQUFzQixNQUFNLDhCQUE4QixDQUFDO0FBQzNGLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUdULGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBVy9ELE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxnQkFBZ0I7SUFDMUQsU0FBUztJQUNULElBQUksR0FBRyxLQUFLLENBQWlCLEVBQUUsZ0RBQUMsQ0FBQztJQUNqQyxPQUFPLEdBQUcsS0FBSyxDQUFzQixFQUFFLG1EQUFDLENBQUM7SUFFeEIsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBNkIsZ0JBQWdCLENBQUMsQ0FBQztJQUVyRyxZQUFZO0lBQ0osVUFBVSxHQUF5QixJQUFJLENBQUM7SUFDdEMsRUFBRSxDQUF1QjtJQUMzQixZQUFZLEdBQUcsTUFBTSxDQUFDLEtBQUssd0RBQUMsQ0FBQztJQUM3QixTQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUsscURBQUMsQ0FBQztJQUVsQyxrQkFB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LEVBQUUsS0FBSyxDQUFDLE9BQU8sR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLE9BQU8sR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxXQUFXO1FBQ2pCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTSxZQUFZO1FBQ2pCLElBQUksSUFBSSxDQUFDLGFBQWE7WUFBRSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDakUsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQzt1R0FwTVUsc0JBQXNCOzJGQUF0QixzQkFBc0IscWVDM0JuQywwTUFJQSxvNENEb0JZLHVCQUF1Qjs7MkZBR3RCLHNCQUFzQjtrQkFSbEMsU0FBUzsrQkFDRSxpQkFBaUIsaUJBR1osaUJBQWlCLENBQUMsSUFBSSxXQUM1QixDQUFDLHVCQUF1QixDQUFDLG1CQUNqQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhDaGFydENvbXBvbmVudCwgQVhDaGFydENvbXBvbmVudEJhc2UsIGNvbXB1dGVUb29sdGlwUG9zaXRpb24sIGdldEVhc2luZ0Z1bmN0aW9uIH0gZnJvbSAnQGFjb3JleC9jaGFydHMnO1xuaW1wb3J0IHsgQVhDaGFydFRvb2x0aXBDb21wb25lbnQsIEFYQ2hhcnRUb29sdGlwRGF0YSB9IGZyb20gJ0BhY29yZXgvY2hhcnRzL2NoYXJ0LXRvb2x0aXAnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgT25EZXN0cm95LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgYWZ0ZXJOZXh0UmVuZGVyLFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBzaWduYWwsXG4gIHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWF9GVU5ORUxfQ0hBUlRfQ09ORklHIH0gZnJvbSAnLi9mdW5uZWwtY2hhcnQuY29uZmlnJztcbmltcG9ydCB7IEFYRnVubmVsQ2hhcnRPcHRpb24sIEFYRnVubmVsRGF0YSB9IGZyb20gJy4vZnVubmVsLWNoYXJ0LnR5cGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC1mdW5uZWwtY2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZnVubmVsLWNoYXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZnVubmVsLWNoYXJ0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGltcG9ydHM6IFtBWENoYXJ0VG9vbHRpcENvbXBvbmVudF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBWEZ1bm5lbENoYXJ0Q29tcG9uZW50IGV4dGVuZHMgQVhDaGFydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgQVhDaGFydENvbXBvbmVudEJhc2Uge1xuICAvLyBJbnB1dHNcbiAgZGF0YSA9IGlucHV0PEFYRnVubmVsRGF0YVtdPihbXSk7XG4gIG9wdGlvbnMgPSBpbnB1dDxBWEZ1bm5lbENoYXJ0T3B0aW9uPih7fSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjaGFydENvbnRhaW5lckVsID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+PignY2hhcnRDb250YWluZXInKTtcblxuICAvLyBTVkcgU3RhdGVcbiAgcHJpdmF0ZSBzdmdFbGVtZW50OiBTVkdTVkdFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHByb3RlY3RlZCBkMyE6IHR5cGVvZiBpbXBvcnQoJ2QzJyk7XG4gIHByaXZhdGUgX2luaXRpYWxpemVkID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJpdmF0ZSBfcmVuZGVyZWQgPSBzaWduYWwoZmFsc2UpO1xuXG4gIC8vIFRvb2x0aXAgU2lnbmFsc1xuICBwcml2YXRlIF90b29sdGlwVmlzaWJsZSA9IHNpZ25hbChmYWxzZSk7XG4gIHByaXZhdGUgX3Rvb2x0aXBQb3NpdGlvbiA9IHNpZ25hbCh7IHg6IDAsIHk6IDAgfSk7XG4gIHByaXZhdGUgX3Rvb2x0aXBEYXRhID0gc2lnbmFsPEFYQ2hhcnRUb29sdGlwRGF0YT4oeyB0aXRsZTogJycsIHZhbHVlOiAnJyB9KTtcbiAgcHJpdmF0ZSBfdG9vbHRpcFJhZklkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICBwcm90ZWN0ZWQgdG9vbHRpcFZpc2libGUgPSB0aGlzLl90b29sdGlwVmlzaWJsZS5hc1JlYWRvbmx5KCk7XG4gIHByb3RlY3RlZCB0b29sdGlwUG9zaXRpb24gPSB0aGlzLl90b29sdGlwUG9zaXRpb24uYXNSZWFkb25seSgpO1xuICBwcm90ZWN0ZWQgdG9vbHRpcERhdGEgPSB0aGlzLl90b29sdGlwRGF0YS5hc1JlYWRvbmx5KCk7XG5cbiAgcHJpdmF0ZSBjb25maWdUb2tlbiA9IGluamVjdChBWF9GVU5ORUxfQ0hBUlRfQ09ORklHKTtcblxuICBwcm90ZWN0ZWQgZWZmZWN0aXZlT3B0aW9ucyA9IGNvbXB1dGVkKCgpID0+ICh7XG4gICAgLi4udGhpcy5jb25maWdUb2tlbixcbiAgICAuLi50aGlzLm9wdGlvbnMoKSxcbiAgfSkpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuICAgICAgdGhpcy5faW5pdGlhbGl6ZWQuc2V0KHRydWUpO1xuICAgICAgdGhpcy5sb2FkRDMoKTtcbiAgICB9KTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAvLyBUcmlnZ2VyIHVwZGF0ZSBvbiBkYXRhIG9yIG9wdGlvbiBjaGFuZ2VcbiAgICAgIHRoaXMuZGF0YSgpO1xuICAgICAgdGhpcy5lZmZlY3RpdmVPcHRpb25zKCk7XG4gICAgICBpZiAodGhpcy5fcmVuZGVyZWQoKSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUNoYXJ0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFudXBDaGFydCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGxvYWREMygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5kMykgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmQzID0gYXdhaXQgaW1wb3J0KCdkMycpO1xuICAgICAgaWYgKHRoaXMuX2luaXRpYWxpemVkKCkgJiYgdGhpcy5jaGFydENvbnRhaW5lckVsKCkpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVDaGFydCgpO1xuICAgICAgICB0aGlzLl9yZW5kZXJlZC5zZXQodHJ1ZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0FYRnVubmVsQ2hhcnQ6IEZhaWxlZCB0byBsb2FkIEQzLmpzJywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVDaGFydCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdmdFbGVtZW50KSB0aGlzLnN2Z0VsZW1lbnQucmVtb3ZlKCk7XG5cbiAgICBjb25zdCBkYXRhID0gWy4uLnRoaXMuZGF0YSgpXS5zb3J0KChhLCBiKSA9PiBiLnZhbHVlIC0gYS52YWx1ZSk7XG4gICAgaWYgKCFkYXRhLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jaGFydENvbnRhaW5lckVsKCkubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCB3aWR0aCA9IGNvbnRhaW5lci5jbGllbnRXaWR0aDtcbiAgICBjb25zdCBoZWlnaHQgPSBjb250YWluZXIuY2xpZW50SGVpZ2h0O1xuICAgIGNvbnN0IG9wdCA9IHRoaXMuZWZmZWN0aXZlT3B0aW9ucygpO1xuICAgIGNvbnN0IG1hcmdpbiA9IG9wdC5tYXJnaW47XG5cbiAgICB0aGlzLnN2Z0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3N2ZycpO1xuICAgIGNvbnN0IHN2ZyA9IHRoaXMuZDNcbiAgICAgIC5zZWxlY3QodGhpcy5zdmdFbGVtZW50KVxuICAgICAgLmF0dHIoJ3dpZHRoJywgJzEwMCUnKVxuICAgICAgLmF0dHIoJ2hlaWdodCcsICcxMDAlJylcbiAgICAgIC5hdHRyKCd2aWV3Qm94JywgYDAgMCAke3dpZHRofSAke2hlaWdodH1gKVxuICAgICAgLmF0dHIoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAneE1pZFlNaWQgbWVldCcpO1xuXG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuc3ZnRWxlbWVudCk7XG5cbiAgICBjb25zdCBpbm5lcldpZHRoID0gd2lkdGggLSBtYXJnaW4ubGVmdCAtIG1hcmdpbi5yaWdodDtcbiAgICBjb25zdCBpbm5lckhlaWdodCA9IGhlaWdodCAtIG1hcmdpbi50b3AgLSBtYXJnaW4uYm90dG9tO1xuXG4gICAgY29uc3QgZyA9IHN2Zy5hcHBlbmQoJ2cnKS5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKCR7bWFyZ2luLmxlZnR9LCR7bWFyZ2luLnRvcH0pYCk7XG5cbiAgICBjb25zdCBjb2xvclNjYWxlID0gdGhpcy5kMy5zY2FsZU9yZGluYWw8c3RyaW5nPigpLnJhbmdlKG9wdC5jb2xvcnMpO1xuICAgIGNvbnN0IHNsaWNlSGVpZ2h0ID0gaW5uZXJIZWlnaHQgLyBkYXRhLmxlbmd0aDtcbiAgICBjb25zdCBtYXhWYWx1ZSA9IGRhdGFbMF0udmFsdWU7XG4gICAgY29uc3QgZWFzaW5nID0gZ2V0RWFzaW5nRnVuY3Rpb24odGhpcy5kMywgb3B0LmFuaW1hdGlvbkVhc2luZyk7XG5cbiAgICBkYXRhLmZvckVhY2goKGQsIGkpID0+IHtcbiAgICAgIGNvbnN0IHRvcFZhbCA9IGQudmFsdWU7XG4gICAgICBjb25zdCBib3R0b21WYWwgPSBkYXRhW2kgKyAxXT8udmFsdWUgPz8gZC52YWx1ZSAqIG9wdC5uZWNrV2lkdGg7XG5cbiAgICAgIGNvbnN0IHRvcFcgPSAodG9wVmFsIC8gbWF4VmFsdWUpICogaW5uZXJXaWR0aDtcbiAgICAgIGNvbnN0IGJvdHRvbVcgPSAoYm90dG9tVmFsIC8gbWF4VmFsdWUpICogaW5uZXJXaWR0aDtcblxuICAgICAgY29uc3QgeFRvcCA9IChpbm5lcldpZHRoIC0gdG9wVykgLyAyO1xuICAgICAgY29uc3QgeEJvdHRvbSA9IChpbm5lcldpZHRoIC0gYm90dG9tVykgLyAyO1xuICAgICAgY29uc3QgeVRvcCA9IGkgKiBzbGljZUhlaWdodDtcbiAgICAgIGNvbnN0IHlCb3R0b20gPSAoaSArIDEpICogc2xpY2VIZWlnaHQ7XG5cbiAgICAgIGNvbnN0IHBhdGhEYXRhID0gYE0gJHt4VG9wfSwke3lUb3B9IEwgJHt4VG9wICsgdG9wV30sJHt5VG9wfSBMICR7eEJvdHRvbSArIGJvdHRvbVd9LCR7eUJvdHRvbX0gTCAke3hCb3R0b219LCR7eUJvdHRvbX0gWmA7XG5cbiAgICAgIGNvbnN0IHNsaWNlR3JvdXAgPSBnLmFwcGVuZCgnZycpLmF0dHIoJ2NsYXNzJywgJ2Z1bm5lbC1zbGljZS1jb250YWluZXInKTtcblxuICAgICAgY29uc3QgcGF0aCA9IHNsaWNlR3JvdXBcbiAgICAgICAgLmFwcGVuZCgncGF0aCcpXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdmdW5uZWwtc2xpY2UnKVxuICAgICAgICAuYXR0cignZCcsIHBhdGhEYXRhKVxuICAgICAgICAuYXR0cignZmlsbCcsIGQuY29sb3IgPz8gY29sb3JTY2FsZShpLnRvU3RyaW5nKCkpKVxuICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAwKVxuICAgICAgICAub24oJ21vdXNlZW50ZXInLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICBzdmcuY2xhc3NlZCgnaXMtZGltbWVkJywgdHJ1ZSk7XG4gICAgICAgICAgdGhpcy5kMy5zZWxlY3QoZXZlbnQuY3VycmVudFRhcmdldCkuY2xhc3NlZCgnaXMtYWN0aXZlJywgdHJ1ZSk7XG4gICAgICAgICAgdGhpcy5zaG93VG9vbHRpcChldmVudCwgZCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5vbignbW91c2Vtb3ZlJywgKGV2ZW50KSA9PiB0aGlzLnVwZGF0ZVRvb2x0aXBQb3NpdGlvbihldmVudCkpXG4gICAgICAgIC5vbignbW91c2VsZWF2ZScsIChldmVudCkgPT4ge1xuICAgICAgICAgIHN2Zy5jbGFzc2VkKCdpcy1kaW1tZWQnLCBmYWxzZSk7XG4gICAgICAgICAgdGhpcy5kMy5zZWxlY3QoZXZlbnQuY3VycmVudFRhcmdldCkuY2xhc3NlZCgnaXMtYWN0aXZlJywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuaGlkZVRvb2x0aXAoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIHBhdGhcbiAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAuZHVyYXRpb24ob3B0LmFuaW1hdGlvbkR1cmF0aW9uKVxuICAgICAgICAuZGVsYXkoaSAqIDgwKVxuICAgICAgICAuZWFzZShlYXNpbmcpXG4gICAgICAgIC5zdHlsZSgnb3BhY2l0eScsIDEpO1xuXG4gICAgICBpZiAob3B0LnNob3dMYWJlbHMpIHtcbiAgICAgICAgY29uc3QgbGFiZWxHcm91cCA9IHNsaWNlR3JvdXAuYXBwZW5kKCdnJykuYXR0cignY2xhc3MnLCAnZnVubmVsLWxhYmVsLWdyb3VwJykuc3R5bGUoJ29wYWNpdHknLCAwKTtcblxuICAgICAgICBsYWJlbEdyb3VwXG4gICAgICAgICAgLmFwcGVuZCgndGV4dCcpXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2Z1bm5lbC1sYWJlbC1uYW1lJylcbiAgICAgICAgICAuYXR0cigneCcsIGlubmVyV2lkdGggLyAyICsgdG9wVyAvIDIgKyAyNSlcbiAgICAgICAgICAuYXR0cigneScsIHlUb3AgKyBzbGljZUhlaWdodCAvIDIgLSA1KVxuICAgICAgICAgIC50ZXh0KGQubmFtZSk7XG5cbiAgICAgICAgbGFiZWxHcm91cFxuICAgICAgICAgIC5hcHBlbmQoJ3RleHQnKVxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdmdW5uZWwtbGFiZWwtdmFsdWUnKVxuICAgICAgICAgIC5hdHRyKCd4JywgaW5uZXJXaWR0aCAvIDIgKyB0b3BXIC8gMiArIDI1KVxuICAgICAgICAgIC5hdHRyKCd5JywgeVRvcCArIHNsaWNlSGVpZ2h0IC8gMiArIDE1KVxuICAgICAgICAgIC50ZXh0KGQudmFsdWUudG9Mb2NhbGVTdHJpbmcoKSk7XG5cbiAgICAgICAgbGFiZWxHcm91cFxuICAgICAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgICAgICAuZHVyYXRpb24oNjAwKVxuICAgICAgICAgIC5kZWxheSg0MDAgKyBpICogODApXG4gICAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlQ2hhcnQoKTogdm9pZCB7XG4gICAgdGhpcy5jcmVhdGVDaGFydCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93VG9vbHRpcChldmVudDogTW91c2VFdmVudCwgaXRlbTogQVhGdW5uZWxEYXRhKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKS5zaG93VG9vbHRpcCkgcmV0dXJuO1xuICAgIHRoaXMuX3Rvb2x0aXBEYXRhLnNldCh7IHRpdGxlOiBpdGVtLm5hbWUsIHZhbHVlOiBpdGVtLnZhbHVlLnRvTG9jYWxlU3RyaW5nKCksIGNvbG9yOiBpdGVtLmNvbG9yIH0pO1xuICAgIHRoaXMuX3Rvb2x0aXBWaXNpYmxlLnNldCh0cnVlKTtcbiAgICB0aGlzLnVwZGF0ZVRvb2x0aXBQb3NpdGlvbihldmVudCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVRvb2x0aXBQb3NpdGlvbihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl90b29sdGlwUmFmSWQpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3Rvb2x0aXBSYWZJZCk7XG4gICAgdGhpcy5fdG9vbHRpcFJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lckVsID0gdGhpcy5jaGFydENvbnRhaW5lckVsKCkubmF0aXZlRWxlbWVudDtcbiAgICAgIGNvbnN0IHJlY3QgPSBjb250YWluZXJFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IHRvb2x0aXBFbCA9IGNvbnRhaW5lckVsLnF1ZXJ5U2VsZWN0b3IoJy5jaGFydC10b29sdGlwJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBjb25zdCB0b29sdGlwUmVjdCA9IHRvb2x0aXBFbD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgPz8gbnVsbDtcbiAgICAgIHRoaXMuX3Rvb2x0aXBQb3NpdGlvbi5zZXQoY29tcHV0ZVRvb2x0aXBQb3NpdGlvbihyZWN0LCB0b29sdGlwUmVjdCwgZXZlbnQuY2xpZW50WCArIDEwLCBldmVudC5jbGllbnRZIC0gMTAsIDEwKSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhpZGVUb29sdGlwKCk6IHZvaWQge1xuICAgIHRoaXMuX3Rvb2x0aXBWaXNpYmxlLnNldChmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgY2xlYW51cENoYXJ0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl90b29sdGlwUmFmSWQpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3Rvb2x0aXBSYWZJZCk7XG4gICAgaWYgKHRoaXMuc3ZnRWxlbWVudCkge1xuICAgICAgdGhpcy5zdmdFbGVtZW50LnJlbW92ZSgpO1xuICAgICAgdGhpcy5zdmdFbGVtZW50ID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJheC1mdW5uZWwtY2hhcnRcIiByb2xlPVwiaW1nXCIgI2NoYXJ0Q29udGFpbmVyPjwvZGl2PlxuXG48YXgtY2hhcnQtdG9vbHRpcCBbZGF0YV09XCJ0b29sdGlwRGF0YSgpXCIgW3Bvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbigpXCIgW3Zpc2libGVdPVwidG9vbHRpcFZpc2libGUoKVwiPlxuPC9heC1jaGFydC10b29sdGlwPlxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNoYXJ0cy1mdW5uZWwtY2hhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jaGFydHMvZnVubmVsLWNoYXJ0L3NyYy9hY29yZXgtY2hhcnRzLWZ1bm5lbC1jaGFydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-charts-funnel-chart.mjs","sources":["../tmp-esm2022/funnel-chart/lib/funnel-chart.config.js","../tmp-esm2022/funnel-chart/lib/funnel-chart.component.js","../tmp-esm2022/funnel-chart/acorex-charts-funnel-chart.js"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nexport const AXFunnelChartDefaultConfig = {\n margin: { top: 20, right: 160, bottom: 20, left: 160 },\n neckWidth: 0.3,\n showLabels: true,\n labelOffset: 24,\n showTooltip: true,\n animationDuration: 1000,\n animationEasing: 'cubic-out',\n startColor: 'rgb(var(--ax-sys-color-primary-50))',\n endColor: 'rgb(var(--ax-sys-color-primary-950))',\n messages: {\n noData: 'No funnel data available',\n noDataIcon: 'fa-light fa-filter-list',\n },\n};\nexport const AX_FUNNEL_CHART_CONFIG = new InjectionToken('AX_FUNNEL_CHART_CONFIG', {\n providedIn: 'root',\n factory: () => AXFunnelChartDefaultConfig,\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVubmVsLWNoYXJ0LmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NoYXJ0cy9mdW5uZWwtY2hhcnQvc3JjL2xpYi9mdW5uZWwtY2hhcnQuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0MsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQXdCO0lBQzdELE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7SUFDdEQsU0FBUyxFQUFFLEdBQUc7SUFDZCxVQUFVLEVBQUUsSUFBSTtJQUNoQixXQUFXLEVBQUUsRUFBRTtJQUNmLFdBQVcsRUFBRSxJQUFJO0lBQ2pCLGlCQUFpQixFQUFFLElBQUk7SUFDdkIsZUFBZSxFQUFFLFdBQVc7SUFDNUIsVUFBVSxFQUFFLHFDQUFxQztJQUNqRCxRQUFRLEVBQUUsc0NBQXNDO0lBQ2hELFFBQVEsRUFBRTtRQUNSLE1BQU0sRUFBRSwwQkFBMEI7UUFDbEMsVUFBVSxFQUFFLHlCQUF5QjtLQUN0QztDQUNGLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FBc0Isd0JBQXdCLEVBQUU7SUFDdEcsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLDBCQUEwQjtDQUMxQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhGdW5uZWxDaGFydE9wdGlvbiB9IGZyb20gJy4vZnVubmVsLWNoYXJ0LnR5cGUnO1xuXG5leHBvcnQgY29uc3QgQVhGdW5uZWxDaGFydERlZmF1bHRDb25maWc6IEFYRnVubmVsQ2hhcnRPcHRpb24gPSB7XG4gIG1hcmdpbjogeyB0b3A6IDIwLCByaWdodDogMTYwLCBib3R0b206IDIwLCBsZWZ0OiAxNjAgfSxcbiAgbmVja1dpZHRoOiAwLjMsXG4gIHNob3dMYWJlbHM6IHRydWUsXG4gIGxhYmVsT2Zmc2V0OiAyNCxcbiAgc2hvd1Rvb2x0aXA6IHRydWUsXG4gIGFuaW1hdGlvbkR1cmF0aW9uOiAxMDAwLFxuICBhbmltYXRpb25FYXNpbmc6ICdjdWJpYy1vdXQnLFxuICBzdGFydENvbG9yOiAncmdiKHZhcigtLWF4LXN5cy1jb2xvci1wcmltYXJ5LTUwKSknLFxuICBlbmRDb2xvcjogJ3JnYih2YXIoLS1heC1zeXMtY29sb3ItcHJpbWFyeS05NTApKScsXG4gIG1lc3NhZ2VzOiB7XG4gICAgbm9EYXRhOiAnTm8gZnVubmVsIGRhdGEgYXZhaWxhYmxlJyxcbiAgICBub0RhdGFJY29uOiAnZmEtbGlnaHQgZmEtZmlsdGVyLWxpc3QnLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IEFYX0ZVTk5FTF9DSEFSVF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48QVhGdW5uZWxDaGFydE9wdGlvbj4oJ0FYX0ZVTk5FTF9DSEFSVF9DT05GSUcnLCB7XG4gIHByb3ZpZGVkSW46ICdyb290JyxcbiAgZmFjdG9yeTogKCkgPT4gQVhGdW5uZWxDaGFydERlZmF1bHRDb25maWcsXG59KTtcbiJdfQ==","import { AXChartComponent, computeTooltipPosition, getEasingFunction } from '@acorex/charts';\nimport { AXChartTooltipComponent } from '@acorex/charts/chart-tooltip';\nimport { AXPlatform } from '@acorex/core/platform';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, afterNextRender, computed, effect, inject, input, output, signal, viewChild, } from '@angular/core';\nimport { map } from 'rxjs';\nimport { AX_FUNNEL_CHART_CONFIG } from './funnel-chart.config';\nimport * as i0 from \"@angular/core\";\nexport class AXFunnelChartComponent extends AXChartComponent {\n // Inputs\n data = input([], ...(ngDevMode ? [{ debugName: \"data\" }] : []));\n options = input({}, ...(ngDevMode ? [{ debugName: \"options\" }] : []));\n // Outputs\n /** Emitted when a funnel segment is clicked */\n segmentClick = output();\n chartContainerEl = viewChild.required('chartContainer');\n // SVG State\n svgElement = null;\n d3;\n _initialized = signal(false, ...(ngDevMode ? [{ debugName: \"_initialized\" }] : []));\n _rendered = signal(false, ...(ngDevMode ? [{ debugName: \"_rendered\" }] : []));\n platformService = inject(AXPlatform);\n isRtl = signal(this.platformService.isRtl(), ...(ngDevMode ? [{ debugName: \"isRtl\" }] : []));\n directionSub;\n // Tooltip Signals\n _tooltipVisible = signal(false, ...(ngDevMode ? [{ debugName: \"_tooltipVisible\" }] : []));\n _tooltipPosition = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: \"_tooltipPosition\" }] : []));\n _tooltipData = signal({ title: '', value: '' }, ...(ngDevMode ? [{ debugName: \"_tooltipData\" }] : []));\n _tooltipRafId = null;\n tooltipVisible = this._tooltipVisible.asReadonly();\n tooltipPosition = this._tooltipPosition.asReadonly();\n tooltipData = this._tooltipData.asReadonly();\n configToken = inject(AX_FUNNEL_CHART_CONFIG);\n effectiveOptions = computed(() => ({\n ...this.configToken,\n ...this.options(),\n }), ...(ngDevMode ? [{ debugName: \"effectiveOptions\" }] : []));\n constructor() {\n super();\n afterNextRender(() => {\n this._initialized.set(true);\n this.loadD3();\n this.directionSub = this.platformService.directionChange\n .pipe(map((i) => i.data === 'rtl'))\n .subscribe((isRtl) => {\n this.isRtl.set(isRtl);\n if (this._rendered()) {\n this.updateChart();\n }\n });\n });\n effect(() => {\n // Trigger update on data or option change\n this.data();\n this.effectiveOptions();\n if (this._rendered()) {\n this.updateChart();\n }\n });\n }\n ngOnDestroy() {\n this.directionSub?.unsubscribe();\n this.cleanupChart();\n }\n async loadD3() {\n if (this.d3)\n return;\n try {\n this.d3 = await import('d3');\n if (this._initialized() && this.chartContainerEl()) {\n this.createChart();\n this._rendered.set(true);\n }\n }\n catch (error) {\n console.error('AXFunnelChart: Failed to load D3.js', error);\n }\n }\n createChart() {\n if (this.svgElement)\n this.svgElement.remove();\n const data = [...this.data()].sort((a, b) => b.value - a.value);\n if (!data.length) {\n this.hideTooltip();\n return;\n }\n const container = this.chartContainerEl().nativeElement;\n const width = container.clientWidth;\n const height = container.clientHeight;\n const opt = this.effectiveOptions();\n const margin = opt.margin;\n const isRtl = this.isRtl();\n const labelOffset = opt.labelOffset ?? 24;\n this.svgElement = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n const svg = this.d3\n .select(this.svgElement)\n .attr('width', '100%')\n .attr('height', '100%')\n .attr('viewBox', `0 0 ${width} ${height}`)\n .attr('preserveAspectRatio', 'xMidYMid meet');\n container.appendChild(this.svgElement);\n const innerWidth = width - margin.left - margin.right;\n const innerHeight = height - margin.top - margin.bottom;\n const g = svg.append('g').attr('transform', `translate(${margin.left},${margin.top})`);\n const sliceHeight = innerHeight / data.length;\n const maxValue = data[0].value;\n const minValue = data[data.length - 1]?.value ?? maxValue;\n const easing = getEasingFunction(this.d3, opt.animationEasing);\n data.forEach((d, i) => {\n const topVal = d.value;\n const bottomVal = data[i + 1]?.value ?? d.value * opt.neckWidth;\n const topW = (topVal / maxValue) * innerWidth;\n const bottomW = (bottomVal / maxValue) * innerWidth;\n const xTop = (innerWidth - topW) / 2;\n const xBottom = (innerWidth - bottomW) / 2;\n const yTop = i * sliceHeight;\n const yBottom = (i + 1) * sliceHeight;\n const pathData = `M ${xTop},${yTop} L ${xTop + topW},${yTop} L ${xBottom + bottomW},${yBottom} L ${xBottom},${yBottom} Z`;\n const sliceGroup = g.append('g').attr('class', 'funnel-slice-container');\n const computedColor = this.resolveSliceColor(d, i, opt, minValue, maxValue);\n const path = sliceGroup\n .append('path')\n .attr('class', 'funnel-slice')\n .attr('d', pathData)\n .attr('fill', computedColor)\n .style('opacity', 0)\n .on('mouseenter', (event) => {\n svg.classed('is-dimmed', true);\n this.d3.select(event.currentTarget).classed('is-active', true);\n this.showTooltip(event, d, computedColor);\n })\n .on('mousemove', (event) => this.updateTooltipPosition(event))\n .on('click', () => this.segmentClick.emit(d))\n .on('mouseleave', (event) => {\n svg.classed('is-dimmed', false);\n this.d3.select(event.currentTarget).classed('is-active', false);\n this.hideTooltip();\n });\n path\n .transition()\n .duration(opt.animationDuration)\n .delay(i * 80)\n .ease(easing)\n .style('opacity', 1);\n if (opt.showLabels) {\n const labelGroup = sliceGroup.append('g').attr('class', 'funnel-label-group').style('opacity', 0);\n const labelX = isRtl ? innerWidth / 2 - topW / 2 - labelOffset : innerWidth / 2 + topW / 2 + labelOffset;\n // In RTL documents, SVG `text-anchor: end` can expand *into* the plot area because \"end\"\n // becomes the logical left edge. Using `start` makes the label expand away from the slice\n // on both LTR (to the right) and RTL (to the left).\n const anchor = 'start';\n labelGroup\n .append('text')\n .attr('class', 'funnel-label-name')\n .attr('x', labelX)\n .attr('y', yTop + sliceHeight / 2 - 5)\n .attr('text-anchor', anchor)\n .text(d.name);\n labelGroup\n .append('text')\n .attr('class', 'funnel-label-value')\n .attr('x', labelX)\n .attr('y', yTop + sliceHeight / 2 + 15)\n .attr('text-anchor', anchor)\n .text(d.value.toLocaleString());\n labelGroup\n .transition()\n .duration(600)\n .delay(400 + i * 80)\n .style('opacity', 1);\n }\n });\n }\n resolveSliceColor(item, index, opt, minValue, maxValue) {\n if (item.color)\n return item.color;\n const palette = opt.colors?.filter(Boolean) ?? [];\n if (palette.length > 0) {\n const key = String(item.id ?? item.name ?? index);\n const idx = this.hashStringToUint32(key) % palette.length;\n return palette[idx] ?? opt.startColor ?? '#1e1b4b';\n }\n const startColor = opt.startColor ?? '#1e1b4b';\n const endColor = opt.endColor ?? '#818cf8';\n const resolvedStartColor = this.resolveCssColor(startColor);\n const resolvedEndColor = this.resolveCssColor(endColor);\n const range = maxValue - minValue;\n const t = range === 0 ? 1 : (item.value - minValue) / range;\n const clamped = Math.max(0, Math.min(1, t));\n return this.d3.interpolateRgb(resolvedStartColor, resolvedEndColor)(clamped);\n }\n hashStringToUint32(input) {\n let hash = 5381;\n for (let i = 0; i < input.length; i++) {\n hash = (hash * 33) ^ input.charCodeAt(i);\n }\n return hash >>> 0;\n }\n resolveCssColor(color) {\n const container = this.chartContainerEl().nativeElement;\n const probe = document.createElement('span');\n probe.style.color = color;\n probe.style.position = 'absolute';\n probe.style.left = '-9999px';\n probe.style.top = '-9999px';\n container.appendChild(probe);\n const computed = getComputedStyle(probe).color;\n probe.remove();\n return computed || color;\n }\n updateChart() {\n this.createChart();\n }\n showTooltip(event, item, color) {\n if (!this.effectiveOptions().showTooltip)\n return;\n this._tooltipData.set({ title: item.name, value: item.value.toLocaleString(), color });\n this._tooltipVisible.set(true);\n this.updateTooltipPosition(event);\n }\n updateTooltipPosition(event) {\n if (this._tooltipRafId)\n cancelAnimationFrame(this._tooltipRafId);\n this._tooltipRafId = requestAnimationFrame(() => {\n const containerEl = this.chartContainerEl().nativeElement;\n const rect = containerEl.getBoundingClientRect();\n const tooltipEl = containerEl.querySelector('.chart-tooltip');\n const tooltipRect = tooltipEl?.getBoundingClientRect() ?? null;\n this._tooltipPosition.set(computeTooltipPosition(rect, tooltipRect, event.clientX + 10, event.clientY - 10, 10));\n });\n }\n hideTooltip() {\n this._tooltipVisible.set(false);\n }\n cleanupChart() {\n if (this._tooltipRafId)\n cancelAnimationFrame(this._tooltipRafId);\n if (this.svgElement) {\n this.svgElement.remove();\n this.svgElement = null;\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXFunnelChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.3\", type: AXFunnelChartComponent, isStandalone: true, selector: \"ax-funnel-chart\", inputs: { data: { classPropertyName: \"data\", publicName: \"data\", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: \"options\", publicName: \"options\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { segmentClick: \"segmentClick\" }, viewQueries: [{ propertyName: \"chartContainerEl\", first: true, predicate: [\"chartContainer\"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-funnel-chart-container\\\" role=\\\"img\\\" #chartContainer>\\n @if (data()?.length === 0) {\\n <div class=\\\"ax-funnel-no-data\\\">\\n <i [class]=\\\"effectiveOptions().messages?.noDataIcon\\\"></i>\\n <p class=\\\"ax-funnel-no-data-text\\\">{{ effectiveOptions().messages?.noData }}</p>\\n </div>\\n }\\n</div>\\n\\n<ax-chart-tooltip [data]=\\\"tooltipData()\\\" [position]=\\\"tooltipPosition()\\\" [visible]=\\\"tooltipVisible()\\\">\\n</ax-chart-tooltip>\\n\", styles: [\"ax-funnel-chart{display:block;width:100%;height:100%;min-height:350px;--ax-comp-funnel-bg: 0, 0, 0, 0;--ax-comp-funnel-text: var(--ax-sys-color-on-surface);--ax-comp-funnel-label-secondary: var(--ax-sys-color-on-surface-variant);--ax-comp-funnel-slice-opacity: .9;--ax-comp-funnel-dim-opacity: .25}ax-funnel-chart .ax-funnel-chart-container{position:relative;width:100%;height:100%;overflow:hidden;background-color:rgba(var(--ax-comp-funnel-bg));padding:1rem}ax-funnel-chart .ax-funnel-chart-container svg{display:block;width:100%;height:100%;overflow:visible}ax-funnel-chart .ax-funnel-chart-container svg .funnel-slice{cursor:pointer;opacity:var(--ax-comp-funnel-slice-opacity);transition:opacity .3s cubic-bezier(.4,0,.2,1)}ax-funnel-chart .ax-funnel-chart-container svg .funnel-slice.is-active{opacity:1;filter:saturate(1.2)}ax-funnel-chart .ax-funnel-chart-container svg .funnel-label-group{pointer-events:none}ax-funnel-chart .ax-funnel-chart-container svg .funnel-label-group .funnel-label-name{font-size:12px;font-weight:700;fill:rgb(var(--ax-comp-funnel-text));text-transform:uppercase;letter-spacing:.05em}ax-funnel-chart .ax-funnel-chart-container svg .funnel-label-group .funnel-label-value{font-size:13px;fill:rgb(var(--ax-comp-funnel-label-secondary));font-variant-numeric:tabular-nums;font-weight:500}ax-funnel-chart .ax-funnel-chart-container svg.is-dimmed .funnel-slice:not(.is-active){opacity:var(--ax-comp-funnel-dim-opacity)}ax-funnel-chart .ax-funnel-no-data{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;color:rgba(var(--ax-comp-funnel-text),.6)}ax-funnel-chart .ax-funnel-no-data i{font-size:2rem;margin-bottom:.5rem}\\n\"], dependencies: [{ kind: \"component\", type: AXChartTooltipComponent, selector: \"ax-chart-tooltip\", inputs: [\"data\", \"position\", \"visible\", \"showPercentage\", \"style\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXFunnelChartComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-funnel-chart', encapsulation: ViewEncapsulation.None, imports: [AXChartTooltipComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: \"<div class=\\\"ax-funnel-chart-container\\\" role=\\\"img\\\" #chartContainer>\\n @if (data()?.length === 0) {\\n <div class=\\\"ax-funnel-no-data\\\">\\n <i [class]=\\\"effectiveOptions().messages?.noDataIcon\\\"></i>\\n <p class=\\\"ax-funnel-no-data-text\\\">{{ effectiveOptions().messages?.noData }}</p>\\n </div>\\n }\\n</div>\\n\\n<ax-chart-tooltip [data]=\\\"tooltipData()\\\" [position]=\\\"tooltipPosition()\\\" [visible]=\\\"tooltipVisible()\\\">\\n</ax-chart-tooltip>\\n\", styles: [\"ax-funnel-chart{display:block;width:100%;height:100%;min-height:350px;--ax-comp-funnel-bg: 0, 0, 0, 0;--ax-comp-funnel-text: var(--ax-sys-color-on-surface);--ax-comp-funnel-label-secondary: var(--ax-sys-color-on-surface-variant);--ax-comp-funnel-slice-opacity: .9;--ax-comp-funnel-dim-opacity: .25}ax-funnel-chart .ax-funnel-chart-container{position:relative;width:100%;height:100%;overflow:hidden;background-color:rgba(var(--ax-comp-funnel-bg));padding:1rem}ax-funnel-chart .ax-funnel-chart-container svg{display:block;width:100%;height:100%;overflow:visible}ax-funnel-chart .ax-funnel-chart-container svg .funnel-slice{cursor:pointer;opacity:var(--ax-comp-funnel-slice-opacity);transition:opacity .3s cubic-bezier(.4,0,.2,1)}ax-funnel-chart .ax-funnel-chart-container svg .funnel-slice.is-active{opacity:1;filter:saturate(1.2)}ax-funnel-chart .ax-funnel-chart-container svg .funnel-label-group{pointer-events:none}ax-funnel-chart .ax-funnel-chart-container svg .funnel-label-group .funnel-label-name{font-size:12px;font-weight:700;fill:rgb(var(--ax-comp-funnel-text));text-transform:uppercase;letter-spacing:.05em}ax-funnel-chart .ax-funnel-chart-container svg .funnel-label-group .funnel-label-value{font-size:13px;fill:rgb(var(--ax-comp-funnel-label-secondary));font-variant-numeric:tabular-nums;font-weight:500}ax-funnel-chart .ax-funnel-chart-container svg.is-dimmed .funnel-slice:not(.is-active){opacity:var(--ax-comp-funnel-dim-opacity)}ax-funnel-chart .ax-funnel-no-data{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;color:rgba(var(--ax-comp-funnel-text),.6)}ax-funnel-chart .ax-funnel-no-data i{font-size:2rem;margin-bottom:.5rem}\\n\"] }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVubmVsLWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NoYXJ0cy9mdW5uZWwtY2hhcnQvc3JjL2xpYi9mdW5uZWwtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2hhcnRzL2Z1bm5lbC1jaGFydC9zcmMvbGliL2Z1bm5lbC1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQXdCLHNCQUFzQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkgsT0FBTyxFQUFFLHVCQUF1QixFQUFzQixNQUFNLDhCQUE4QixDQUFDO0FBQzNGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFHVCxpQkFBaUIsRUFDakIsZUFBZSxFQUNmLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsR0FBRyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFXL0QsTUFBTSxPQUFPLHNCQUF1QixTQUFRLGdCQUFnQjtJQUMxRCxTQUFTO0lBQ1QsSUFBSSxHQUFHLEtBQUssQ0FBaUIsRUFBRSxnREFBQyxDQUFDO0lBQ2pDLE9BQU8sR0FBRyxLQUFLLENBQXNCLEVBQUUsbURBQUMsQ0FBQztJQUV6QyxVQUFVO0lBQ1YsK0NBQStDO0lBQy9DLFlBQVksR0FBRyxNQUFNLEVBQWdCLENBQUM7SUFFckIsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBNkIsZ0JBQWdCLENBQUMsQ0FB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ZW50QmFzZSwgY29tcHV0ZVRvb2x0aXBQb3NpdGlvbiwgZ2V0RWFzaW5nRnVuY3Rpb24gfSBmcm9tICdAYWNvcmV4L2NoYXJ0cyc7XG5pbXBvcnQgeyBBWENoYXJ0VG9vbHRpcENvbXBvbmVudCwgQVhDaGFydFRvb2x0aXBEYXRhIH0gZnJvbSAnQGFjb3JleC9jaGFydHMvY2hhcnQtdG9vbHRpcCc7XG5pbXBvcnQgeyBBWFBsYXRmb3JtIH0gZnJvbSAnQGFjb3JleC9jb3JlL3BsYXRmb3JtJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIE9uRGVzdHJveSxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGFmdGVyTmV4dFJlbmRlcixcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBtYXAsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQVhfRlVOTkVMX0NIQVJUX0NPTkZJRyB9IGZyb20gJy4vZnVubmVsLWNoYXJ0LmNvbmZpZyc7XG5pbXBvcnQgeyBBWEZ1bm5lbENoYXJ0T3B0aW9uLCBBWEZ1bm5lbERhdGEgfSBmcm9tICcuL2Z1bm5lbC1jaGFydC50eXBlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtZnVubmVsLWNoYXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Z1bm5lbC1jaGFydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Z1bm5lbC1jaGFydC5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBpbXBvcnRzOiBbQVhDaGFydFRvb2x0aXBDb21wb25lbnRdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQVhGdW5uZWxDaGFydENvbXBvbmVudCBleHRlbmRzIEFYQ2hhcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIEFYQ2hhcnRDb21wb25lbnRCYXNlIHtcbiAgLy8gSW5wdXRzXG4gIGRhdGEgPSBpbnB1dDxBWEZ1bm5lbERhdGFbXT4oW10pO1xuICBvcHRpb25zID0gaW5wdXQ8QVhGdW5uZWxDaGFydE9wdGlvbj4oe30pO1xuXG4gIC8vIE91dHB1dHNcbiAgLyoqIEVtaXR0ZWQgd2hlbiBhIGZ1bm5lbCBzZWdtZW50IGlzIGNsaWNrZWQgKi9cbiAgc2VnbWVudENsaWNrID0gb3V0cHV0PEFYRnVubmVsRGF0YT4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNoYXJ0Q29udGFpbmVyRWwgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4+KCdjaGFydENvbnRhaW5lcicpO1xuXG4gIC8vIFNWRyBTdGF0ZVxuICBwcml2YXRlIHN2Z0VsZW1lbnQ6IFNWR1NWR0VsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJvdGVjdGVkIGQzITogdHlwZW9mIGltcG9ydCgnZDMnKTtcbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZWQgPSBzaWduYWwoZmFsc2UpO1xuICBwcml2YXRlIF9yZW5kZXJlZCA9IHNpZ25hbChmYWxzZSk7XG4gIHByaXZhdGUgcGxhdGZvcm1TZXJ2aWNlID0gaW5qZWN0KEFYUGxhdGZvcm0pO1xuICBwcm90ZWN0ZWQgaXNSdGwgPSBzaWduYWwodGhpcy5wbGF0Zm9ybVNlcnZpY2UuaXNSdGwoKSk7XG4gIHByaXZhdGUgZGlyZWN0aW9uU3ViPzogU3Vic2NyaXB0aW9uO1xuXG4gIC8vIFRvb2x0aXAgU2lnbmFsc1xuICBwcml2YXRlIF90b29sdGlwVmlzaWJsZSA9IHNpZ25hbChmYWxzZSk7XG4gIHByaXZhdGUgX3Rvb2x0aXBQb3NpdGlvbiA9IHNpZ25hbCh7IHg6IDAsIHk6IDAgfSk7XG4gIHByaXZhdGUgX3Rvb2x0aXBEYXRhID0gc2lnbmFsPEFYQ2hhcnRUb29sdGlwRGF0YT4oeyB0aXRsZTogJycsIHZhbHVlOiAnJyB9KTtcbiAgcHJpdmF0ZSBfdG9vbHRpcFJhZklkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICBwcm90ZWN0ZWQgdG9vbHRpcFZpc2libGUgPSB0aGlzLl90b29sdGlwVmlzaWJsZS5hc1JlYWRvbmx5KCk7XG4gIHByb3RlY3RlZCB0b29sdGlwUG9zaXRpb24gPSB0aGlzLl90b29sdGlwUG9zaXRpb24uYXNSZWFkb25seSgpO1xuICBwcm90ZWN0ZWQgdG9vbHRpcERhdGEgPSB0aGlzLl90b29sdGlwRGF0YS5hc1JlYWRvbmx5KCk7XG5cbiAgcHJpdmF0ZSBjb25maWdUb2tlbiA9IGluamVjdChBWF9GVU5ORUxfQ0hBUlRfQ09ORklHKTtcblxuICBwcm90ZWN0ZWQgZWZmZWN0aXZlT3B0aW9ucyA9IGNvbXB1dGVkKCgpID0+ICh7XG4gICAgLi4udGhpcy5jb25maWdUb2tlbixcbiAgICAuLi50aGlzLm9wdGlvbnMoKSxcbiAgfSkpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuICAgICAgdGhpcy5faW5pdGlhbGl6ZWQuc2V0KHRydWUpO1xuICAgICAgdGhpcy5sb2FkRDMoKTtcbiAgICAgIHRoaXMuZGlyZWN0aW9uU3ViID0gdGhpcy5wbGF0Zm9ybVNlcnZpY2UuZGlyZWN0aW9uQ2hhbmdlXG4gICAgICAgIC5waXBlKG1hcCgoaSkgPT4gaS5kYXRhID09PSAncnRsJykpXG4gICAgICAgIC5zdWJzY3JpYmUoKGlzUnRsKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1J0bC5zZXQoaXNSdGwpO1xuICAgICAgICAgIGlmICh0aGlzLl9yZW5kZXJlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNoYXJ0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAvLyBUcmlnZ2VyIHVwZGF0ZSBvbiBkYXRhIG9yIG9wdGlvbiBjaGFuZ2VcbiAgICAgIHRoaXMuZGF0YSgpO1xuICAgICAgdGhpcy5lZmZlY3RpdmVPcHRpb25zKCk7XG4gICAgICBpZiAodGhpcy5fcmVuZGVyZWQoKSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUNoYXJ0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRpcmVjdGlvblN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNsZWFudXBDaGFydCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGxvYWREMygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5kMykgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmQzID0gYXdhaXQgaW1wb3J0KCdkMycpO1xuICAgICAgaWYgKHRoaXMuX2luaXRpYWxpemVkKCkgJiYgdGhpcy5jaGFydENvbnRhaW5lckVsKCkpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVDaGFydCgpO1xuICAgICAgICB0aGlzLl9yZW5kZXJlZC5zZXQodHJ1ZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0FYRnVubmVsQ2hhcnQ6IEZhaWxlZCB0byBsb2FkIEQzLmpzJywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVDaGFydCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdmdFbGVtZW50KSB0aGlzLnN2Z0VsZW1lbnQucmVtb3ZlKCk7XG5cbiAgICBjb25zdCBkYXRhID0gWy4uLnRoaXMuZGF0YSgpXS5zb3J0KChhLCBiKSA9PiBiLnZhbHVlIC0gYS52YWx1ZSk7XG4gICAgaWYgKCFkYXRhLmxlbmd0aCkge1xuICAgICAgdGhpcy5oaWRlVG9vbHRpcCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuY2hhcnRDb250YWluZXJFbCgpLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3Qgd2lkdGggPSBjb250YWluZXIuY2xpZW50V2lkdGg7XG4gICAgY29uc3QgaGVpZ2h0ID0gY29udGFpbmVyLmNsaWVudEhlaWdodDtcbiAgICBjb25zdCBvcHQgPSB0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKTtcbiAgICBjb25zdCBtYXJnaW4gPSBvcHQubWFyZ2luO1xuICAgIGNvbnN0IGlzUnRsID0gdGhpcy5pc1J0bCgpO1xuICAgIGNvbnN0IGxhYmVsT2Zmc2V0ID0gb3B0LmxhYmVsT2Zmc2V0ID8/IDI0O1xuXG4gICAgdGhpcy5zdmdFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdzdmcnKTtcbiAgICBjb25zdCBzdmcgPSB0aGlzLmQzXG4gICAgICAuc2VsZWN0KHRoaXMuc3ZnRWxlbWVudClcbiAgICAgIC5hdHRyKCd3aWR0aCcsICcxMDAlJylcbiAgICAgIC5hdHRyKCdoZWlnaHQnLCAnMTAwJScpXG4gICAgICAuYXR0cigndmlld0JveCcsIGAwIDAgJHt3aWR0aH0gJHtoZWlnaHR9YClcbiAgICAgIC5hdHRyKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ3hNaWRZTWlkIG1lZXQnKTtcblxuICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnN2Z0VsZW1lbnQpO1xuXG4gICAgY29uc3QgaW5uZXJXaWR0aCA9IHdpZHRoIC0gbWFyZ2luLmxlZnQgLSBtYXJnaW4ucmlnaHQ7XG4gICAgY29uc3QgaW5uZXJIZWlnaHQgPSBoZWlnaHQgLSBtYXJnaW4udG9wIC0gbWFyZ2luLmJvdHRvbTtcblxuICAgIGNvbnN0IGcgPSBzdmcuYXBwZW5kKCdnJykuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgke21hcmdpbi5sZWZ0fSwke21hcmdpbi50b3B9KWApO1xuXG4gICAgY29uc3Qgc2xpY2VIZWlnaHQgPSBpbm5lckhlaWdodCAvIGRhdGEubGVuZ3RoO1xuICAgIGNvbnN0IG1heFZhbHVlID0gZGF0YVswXS52YWx1ZTtcbiAgICBjb25zdCBtaW5WYWx1ZSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXT8udmFsdWUgPz8gbWF4VmFsdWU7XG4gICAgY29uc3QgZWFzaW5nID0gZ2V0RWFzaW5nRnVuY3Rpb24odGhpcy5kMywgb3B0LmFuaW1hdGlvbkVhc2luZyk7XG5cbiAgICBkYXRhLmZvckVhY2goKGQsIGkpID0+IHtcbiAgICAgIGNvbnN0IHRvcFZhbCA9IGQudmFsdWU7XG4gICAgICBjb25zdCBib3R0b21WYWwgPSBkYXRhW2kgKyAxXT8udmFsdWUgPz8gZC52YWx1ZSAqIG9wdC5uZWNrV2lkdGg7XG5cbiAgICAgIGNvbnN0IHRvcFcgPSAodG9wVmFsIC8gbWF4VmFsdWUpICogaW5uZXJXaWR0aDtcbiAgICAgIGNvbnN0IGJvdHRvbVcgPSAoYm90dG9tVmFsIC8gbWF4VmFsdWUpICogaW5uZXJXaWR0aDtcblxuICAgICAgY29uc3QgeFRvcCA9IChpbm5lcldpZHRoIC0gdG9wVykgLyAyO1xuICAgICAgY29uc3QgeEJvdHRvbSA9IChpbm5lcldpZHRoIC0gYm90dG9tVykgLyAyO1xuICAgICAgY29uc3QgeVRvcCA9IGkgKiBzbGljZUhlaWdodDtcbiAgICAgIGNvbnN0IHlCb3R0b20gPSAoaSArIDEpICogc2xpY2VIZWlnaHQ7XG5cbiAgICAgIGNvbnN0IHBhdGhEYXRhID0gYE0gJHt4VG9wfSwke3lUb3B9IEwgJHt4VG9wICsgdG9wV30sJHt5VG9wfSBMICR7eEJvdHRvbSArIGJvdHRvbVd9LCR7eUJvdHRvbX0gTCAke3hCb3R0b219LCR7eUJvdHRvbX0gWmA7XG5cbiAgICAgIGNvbnN0IHNsaWNlR3JvdXAgPSBnLmFwcGVuZCgnZycpLmF0dHIoJ2NsYXNzJywgJ2Z1bm5lbC1zbGljZS1jb250YWluZXInKTtcblxuICAgICAgY29uc3QgY29tcHV0ZWRDb2xvciA9IHRoaXMucmVzb2x2ZVNsaWNlQ29sb3IoZCwgaSwgb3B0LCBtaW5WYWx1ZSwgbWF4VmFsdWUpO1xuICAgICAgY29uc3QgcGF0aCA9IHNsaWNlR3JvdXBcbiAgICAgICAgLmFwcGVuZCgncGF0aCcpXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdmdW5uZWwtc2xpY2UnKVxuICAgICAgICAuYXR0cignZCcsIHBhdGhEYXRhKVxuICAgICAgICAuYXR0cignZmlsbCcsIGNvbXB1dGVkQ29sb3IpXG4gICAgICAgIC5zdHlsZSgnb3BhY2l0eScsIDApXG4gICAgICAgIC5vbignbW91c2VlbnRlcicsIChldmVudCkgPT4ge1xuICAgICAgICAgIHN2Zy5jbGFzc2VkKCdpcy1kaW1tZWQnLCB0cnVlKTtcbiAgICAgICAgICB0aGlzLmQzLnNlbGVjdChldmVudC5jdXJyZW50VGFyZ2V0KS5jbGFzc2VkKCdpcy1hY3RpdmUnLCB0cnVlKTtcbiAgICAgICAgICB0aGlzLnNob3dUb29sdGlwKGV2ZW50LCBkLCBjb21wdXRlZENvbG9yKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uKCdtb3VzZW1vdmUnLCAoZXZlbnQpID0+IHRoaXMudXBkYXRlVG9vbHRpcFBvc2l0aW9uKGV2ZW50KSlcbiAgICAgICAgLm9uKCdjbGljaycsICgpID0+IHRoaXMuc2VnbWVudENsaWNrLmVtaXQoZCkpXG4gICAgICAgIC5vbignbW91c2VsZWF2ZScsIChldmVudCkgPT4ge1xuICAgICAgICAgIHN2Zy5jbGFzc2VkKCdpcy1kaW1tZWQnLCBmYWxzZSk7XG4gICAgICAgICAgdGhpcy5kMy5zZWxlY3QoZXZlbnQuY3VycmVudFRhcmdldCkuY2xhc3NlZCgnaXMtYWN0aXZlJywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuaGlkZVRvb2x0aXAoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIHBhdGhcbiAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAuZHVyYXRpb24ob3B0LmFuaW1hdGlvbkR1cmF0aW9uKVxuICAgICAgICAuZGVsYXkoaSAqIDgwKVxuICAgICAgICAuZWFzZShlYXNpbmcpXG4gICAgICAgIC5zdHlsZSgnb3BhY2l0eScsIDEpO1xuXG4gICAgICBpZiAob3B0LnNob3dMYWJlbHMpIHtcbiAgICAgICAgY29uc3QgbGFiZWxHcm91cCA9IHNsaWNlR3JvdXAuYXBwZW5kKCdnJykuYXR0cignY2xhc3MnLCAnZnVubmVsLWxhYmVsLWdyb3VwJykuc3R5bGUoJ29wYWNpdHknLCAwKTtcbiAgICAgICAgY29uc3QgbGFiZWxYID0gaXNSdGwgPyBpbm5lcldpZHRoIC8gMiAtIHRvcFcgLyAyIC0gbGFiZWxPZmZzZXQgOiBpbm5lcldpZHRoIC8gMiArIHRvcFcgLyAyICsgbGFiZWxPZmZzZXQ7XG4gICAgICAgIC8vIEluIFJUTCBkb2N1bWVudHMsIFNWRyBgdGV4dC1hbmNob3I6IGVuZGAgY2FuIGV4cGFuZCAqaW50byogdGhlIHBsb3QgYXJlYSBiZWNhdXNlIFwiZW5kXCJcbiAgICAgICAgLy8gYmVjb21lcyB0aGUgbG9naWNhbCBsZWZ0IGVkZ2UuIFVzaW5nIGBzdGFydGAgbWFrZXMgdGhlIGxhYmVsIGV4cGFuZCBhd2F5IGZyb20gdGhlIHNsaWNlXG4gICAgICAgIC8vIG9uIGJvdGggTFRSICh0byB0aGUgcmlnaHQpIGFuZCBSVEwgKHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgY29uc3QgYW5jaG9yID0gJ3N0YXJ0JztcblxuICAgICAgICBsYWJlbEdyb3VwXG4gICAgICAgICAgLmFwcGVuZCgndGV4dCcpXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2Z1bm5lbC1sYWJlbC1uYW1lJylcbiAgICAgICAgICAuYXR0cigneCcsIGxhYmVsWClcbiAgICAgICAgICAuYXR0cigneScsIHlUb3AgKyBzbGljZUhlaWdodCAvIDIgLSA1KVxuICAgICAgICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsIGFuY2hvcilcbiAgICAgICAgICAudGV4dChkLm5hbWUpO1xuXG4gICAgICAgIGxhYmVsR3JvdXBcbiAgICAgICAgICAuYXBwZW5kKCd0ZXh0JylcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCAnZnVubmVsLWxhYmVsLXZhbHVlJylcbiAgICAgICAgICAuYXR0cigneCcsIGxhYmVsWClcbiAgICAgICAgICAuYXR0cigneScsIHlUb3AgKyBzbGljZUhlaWdodCAvIDIgKyAxNSlcbiAgICAgICAgICAuYXR0cigndGV4dC1hbmNob3InLCBhbmNob3IpXG4gICAgICAgICAgLnRleHQoZC52YWx1ZS50b0xvY2FsZVN0cmluZygpKTtcblxuICAgICAgICBsYWJlbEdyb3VwXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgIC5kdXJhdGlvbig2MDApXG4gICAgICAgICAgLmRlbGF5KDQwMCArIGkgKiA4MClcbiAgICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVNsaWNlQ29sb3IoXG4gICAgaXRlbTogQVhGdW5uZWxEYXRhLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgb3B0OiBBWEZ1bm5lbENoYXJ0T3B0aW9uLFxuICAgIG1pblZhbHVlOiBudW1iZXIsXG4gICAgbWF4VmFsdWU6IG51bWJlcixcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAoaXRlbS5jb2xvcikgcmV0dXJuIGl0ZW0uY29sb3I7XG5cbiAgICBjb25zdCBwYWxldHRlID0gb3B0LmNvbG9ycz8uZmlsdGVyKEJvb2xlYW4pID8/IFtdO1xuICAgIGlmIChwYWxldHRlLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGtleSA9IFN0cmluZyhpdGVtLmlkID8/IGl0ZW0ubmFtZSA/PyBpbmRleCk7XG4gICAgICBjb25zdCBpZHggPSB0aGlzLmhhc2hTdHJpbmdUb1VpbnQzMihrZXkpICUgcGFsZXR0ZS5sZW5ndGg7XG4gICAgICByZXR1cm4gcGFsZXR0ZVtpZHhdID8/IG9wdC5zdGFydENvbG9yID8/ICcjMWUxYjRiJztcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydENvbG9yID0gb3B0LnN0YXJ0Q29sb3IgPz8gJyMxZTFiNGInO1xuICAgIGNvbnN0IGVuZENvbG9yID0gb3B0LmVuZENvbG9yID8/ICcjODE4Y2Y4JztcbiAgICBjb25zdCByZXNvbHZlZFN0YXJ0Q29sb3IgPSB0aGlzLnJlc29sdmVDc3NDb2xvcihzdGFydENvbG9yKTtcbiAgICBjb25zdCByZXNvbHZlZEVuZENvbG9yID0gdGhpcy5yZXNvbHZlQ3NzQ29sb3IoZW5kQ29sb3IpO1xuICAgIGNvbnN0IHJhbmdlID0gbWF4VmFsdWUgLSBtaW5WYWx1ZTtcbiAgICBjb25zdCB0ID0gcmFuZ2UgPT09IDAgPyAxIDogKGl0ZW0udmFsdWUgLSBtaW5WYWx1ZSkgLyByYW5nZTtcbiAgICBjb25zdCBjbGFtcGVkID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgdCkpO1xuICAgIHJldHVybiB0aGlzLmQzLmludGVycG9sYXRlUmdiKHJlc29sdmVkU3RhcnRDb2xvciwgcmVzb2x2ZWRFbmRDb2xvcikoY2xhbXBlZCk7XG4gIH1cblxuICBwcml2YXRlIGhhc2hTdHJpbmdUb1VpbnQzMihpbnB1dDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgaGFzaCA9IDUzODE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgICAgaGFzaCA9IChoYXNoICogMzMpIF4gaW5wdXQuY2hhckNvZGVBdChpKTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc2ggPj4+IDA7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVDc3NDb2xvcihjb2xvcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmNoYXJ0Q29udGFpbmVyRWwoKS5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHByb2JlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgIHByb2JlLnN0eWxlLmNvbG9yID0gY29sb3I7XG4gICAgcHJvYmUuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIHByb2JlLnN0eWxlLmxlZnQgPSAnLTk5OTlweCc7XG4gICAgcHJvYmUuc3R5bGUudG9wID0gJy05OTk5cHgnO1xuICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChwcm9iZSk7XG4gICAgY29uc3QgY29tcHV0ZWQgPSBnZXRDb21wdXRlZFN0eWxlKHByb2JlKS5jb2xvcjtcbiAgICBwcm9iZS5yZW1vdmUoKTtcbiAgICByZXR1cm4gY29tcHV0ZWQgfHwgY29sb3I7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlQ2hhcnQoKTogdm9pZCB7XG4gICAgdGhpcy5jcmVhdGVDaGFydCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93VG9vbHRpcChldmVudDogTW91c2VFdmVudCwgaXRlbTogQVhGdW5uZWxEYXRhLCBjb2xvcjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKS5zaG93VG9vbHRpcCkgcmV0dXJuO1xuICAgIHRoaXMuX3Rvb2x0aXBEYXRhLnNldCh7IHRpdGxlOiBpdGVtLm5hbWUsIHZhbHVlOiBpdGVtLnZhbHVlLnRvTG9jYWxlU3RyaW5nKCksIGNvbG9yIH0pO1xuICAgIHRoaXMuX3Rvb2x0aXBWaXNpYmxlLnNldCh0cnVlKTtcbiAgICB0aGlzLnVwZGF0ZVRvb2x0aXBQb3NpdGlvbihldmVudCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVRvb2x0aXBQb3NpdGlvbihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl90b29sdGlwUmFmSWQpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3Rvb2x0aXBSYWZJZCk7XG4gICAgdGhpcy5fdG9vbHRpcFJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lckVsID0gdGhpcy5jaGFydENvbnRhaW5lckVsKCkubmF0aXZlRWxlbWVudDtcbiAgICAgIGNvbnN0IHJlY3QgPSBjb250YWluZXJFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IHRvb2x0aXBFbCA9IGNvbnRhaW5lckVsLnF1ZXJ5U2VsZWN0b3IoJy5jaGFydC10b29sdGlwJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBjb25zdCB0b29sdGlwUmVjdCA9IHRvb2x0aXBFbD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgPz8gbnVsbDtcbiAgICAgIHRoaXMuX3Rvb2x0aXBQb3NpdGlvbi5zZXQoY29tcHV0ZVRvb2x0aXBQb3NpdGlvbihyZWN0LCB0b29sdGlwUmVjdCwgZXZlbnQuY2xpZW50WCArIDEwLCBldmVudC5jbGllbnRZIC0gMTAsIDEwKSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhpZGVUb29sdGlwKCk6IHZvaWQge1xuICAgIHRoaXMuX3Rvb2x0aXBWaXNpYmxlLnNldChmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgY2xlYW51cENoYXJ0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl90b29sdGlwUmFmSWQpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3Rvb2x0aXBSYWZJZCk7XG4gICAgaWYgKHRoaXMuc3ZnRWxlbWVudCkge1xuICAgICAgdGhpcy5zdmdFbGVtZW50LnJlbW92ZSgpO1xuICAgICAgdGhpcy5zdmdFbGVtZW50ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiYXgtZnVubmVsLWNoYXJ0LWNvbnRhaW5lclwiIHJvbGU9XCJpbWdcIiAjY2hhcnRDb250YWluZXI+XG4gIEBpZiAoZGF0YSgpPy5sZW5ndGggPT09IDApIHtcbiAgICA8ZGl2IGNsYXNzPVwiYXgtZnVubmVsLW5vLWRhdGFcIj5cbiAgICAgIDxpIFtjbGFzc109XCJlZmZlY3RpdmVPcHRpb25zKCkubWVzc2FnZXM/Lm5vRGF0YUljb25cIj48L2k+XG4gICAgICA8cCBjbGFzcz1cImF4LWZ1bm5lbC1uby1kYXRhLXRleHRcIj57eyBlZmZlY3RpdmVPcHRpb25zKCkubWVzc2FnZXM/Lm5vRGF0YSB9fTwvcD5cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG5cbjxheC1jaGFydC10b29sdGlwIFtkYXRhXT1cInRvb2x0aXBEYXRhKClcIiBbcG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uKClcIiBbdmlzaWJsZV09XCJ0b29sdGlwVmlzaWJsZSgpXCI+XG48L2F4LWNoYXJ0LXRvb2x0aXA+XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNoYXJ0cy1mdW5uZWwtY2hhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jaGFydHMvZnVubmVsLWNoYXJ0L3NyYy9hY29yZXgtY2hhcnRzLWZ1bm5lbC1jaGFydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { AXChartComponent, getEasingFunction, computeTooltipPosition } from '@acorex/charts';
|
|
2
2
|
import { AXChartTooltipComponent } from '@acorex/charts/chart-tooltip';
|
|
3
|
+
import { AXPlatform } from '@acorex/core/platform';
|
|
3
4
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { InjectionToken, inject, input, viewChild, signal, computed, afterNextRender, effect, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
|
|
5
|
+
import { InjectionToken, inject, input, output, viewChild, signal, computed, afterNextRender, effect, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
|
|
6
|
+
import { map } from 'rxjs';
|
|
5
7
|
|
|
6
8
|
const AXHeatmapChartDefaultConfig = {
|
|
7
9
|
margin: { top: 30, right: 30, bottom: 60, left: 60 },
|
|
8
|
-
|
|
10
|
+
startColor: 'rgb(var(--ax-sys-color-primary-50))',
|
|
11
|
+
endColor: 'rgb(var(--ax-sys-color-primary-950))',
|
|
9
12
|
cellPadding: 0.05,
|
|
10
13
|
borderRadius: 2,
|
|
11
14
|
showXAxis: true,
|
|
@@ -30,17 +33,23 @@ class AXHeatmapChartComponent extends AXChartComponent {
|
|
|
30
33
|
// Inputs
|
|
31
34
|
data = input([], ...(ngDevMode ? [{ debugName: "data" }] : []));
|
|
32
35
|
options = input({}, ...(ngDevMode ? [{ debugName: "options" }] : []));
|
|
36
|
+
// Outputs
|
|
37
|
+
/** Emitted when a heatmap cell is clicked */
|
|
38
|
+
cellClick = output();
|
|
33
39
|
// View Child
|
|
34
40
|
containerRef = viewChild.required('chartContainer');
|
|
35
41
|
// Internal State
|
|
36
42
|
svg;
|
|
37
|
-
resizeObserver = null;
|
|
38
43
|
d3;
|
|
39
44
|
_d3Ready = signal(false, ...(ngDevMode ? [{ debugName: "_d3Ready" }] : []));
|
|
45
|
+
platformService = inject(AXPlatform);
|
|
46
|
+
isRtl = signal(this.platformService.isRtl(), ...(ngDevMode ? [{ debugName: "isRtl" }] : []));
|
|
47
|
+
directionSub;
|
|
40
48
|
// Tooltip State
|
|
41
49
|
tooltipVisible = signal(false, ...(ngDevMode ? [{ debugName: "tooltipVisible" }] : []));
|
|
42
50
|
tooltipPosition = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: "tooltipPosition" }] : []));
|
|
43
51
|
tooltipData = signal({ title: '', value: '' }, ...(ngDevMode ? [{ debugName: "tooltipData" }] : []));
|
|
52
|
+
_tooltipRafId = null;
|
|
44
53
|
// Computed options (referencing the already injected defaultConfig)
|
|
45
54
|
effectiveOptions = computed(() => ({
|
|
46
55
|
...this.defaultConfig,
|
|
@@ -51,6 +60,14 @@ class AXHeatmapChartComponent extends AXChartComponent {
|
|
|
51
60
|
// Initialize D3 and ResizeObserver
|
|
52
61
|
afterNextRender(() => {
|
|
53
62
|
this.init();
|
|
63
|
+
this.directionSub = this.platformService.directionChange
|
|
64
|
+
.pipe(map((i) => i.data === 'rtl'))
|
|
65
|
+
.subscribe((isRtl) => {
|
|
66
|
+
this.isRtl.set(isRtl);
|
|
67
|
+
if (this._d3Ready()) {
|
|
68
|
+
this.renderChart();
|
|
69
|
+
}
|
|
70
|
+
});
|
|
54
71
|
});
|
|
55
72
|
// Reactive Render when data or D3 is ready
|
|
56
73
|
effect(() => {
|
|
@@ -62,11 +79,6 @@ class AXHeatmapChartComponent extends AXChartComponent {
|
|
|
62
79
|
async init() {
|
|
63
80
|
try {
|
|
64
81
|
this.d3 = await import('d3');
|
|
65
|
-
this.resizeObserver = new ResizeObserver(() => {
|
|
66
|
-
if (this._d3Ready())
|
|
67
|
-
this.renderChart();
|
|
68
|
-
});
|
|
69
|
-
this.resizeObserver.observe(this.containerRef().nativeElement);
|
|
70
82
|
this._d3Ready.set(true);
|
|
71
83
|
}
|
|
72
84
|
catch (err) {
|
|
@@ -88,7 +100,13 @@ class AXHeatmapChartComponent extends AXChartComponent {
|
|
|
88
100
|
const options = this.effectiveOptions();
|
|
89
101
|
const width = container.clientWidth;
|
|
90
102
|
const height = container.clientHeight;
|
|
91
|
-
const
|
|
103
|
+
const isRtl = this.isRtl();
|
|
104
|
+
const baseMargin = options.margin || { top: 20, right: 20, bottom: 40, left: 40 };
|
|
105
|
+
// When rendering RTL, the Y axis is on the right; swap side margins so tick labels
|
|
106
|
+
// have the same breathing room they get on the left in LTR.
|
|
107
|
+
const margin = isRtl
|
|
108
|
+
? { top: baseMargin.top, right: baseMargin.left, bottom: baseMargin.bottom, left: baseMargin.right }
|
|
109
|
+
: baseMargin;
|
|
92
110
|
const innerWidth = width - margin.left - margin.right;
|
|
93
111
|
const innerHeight = height - margin.top - margin.bottom;
|
|
94
112
|
// Create/Select SVG root
|
|
@@ -101,23 +119,50 @@ class AXHeatmapChartComponent extends AXChartComponent {
|
|
|
101
119
|
// --- Scales ---
|
|
102
120
|
const xKeys = Array.from(new Set(data.map((d) => d.x.toString())));
|
|
103
121
|
const yKeys = Array.from(new Set(data.map((d) => d.y.toString())));
|
|
104
|
-
const xScale = this.d3
|
|
122
|
+
const xScale = this.d3
|
|
123
|
+
.scaleBand()
|
|
124
|
+
.domain(xKeys)
|
|
125
|
+
.range(isRtl ? [innerWidth, 0] : [0, innerWidth])
|
|
126
|
+
.padding(options.cellPadding);
|
|
105
127
|
const yScale = this.d3.scaleBand().domain(yKeys).range([innerHeight, 0]).padding(options.cellPadding);
|
|
106
128
|
const valueExtent = this.d3.extent(data, (d) => d.value);
|
|
107
|
-
const
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
129
|
+
const minValue = Number.isFinite(valueExtent[0]) ? valueExtent[0] : 0;
|
|
130
|
+
const maxValue = Number.isFinite(valueExtent[1]) ? valueExtent[1] : minValue + 1;
|
|
131
|
+
const palette = options.colors?.filter(Boolean) ?? [];
|
|
132
|
+
const startColor = options.startColor ?? palette[0] ?? '#ebedf0';
|
|
133
|
+
const endColor = options.endColor ?? palette[palette.length - 1] ?? '#216e39';
|
|
134
|
+
const resolvedStartColor = this.resolveCssColor(startColor);
|
|
135
|
+
const resolvedEndColor = this.resolveCssColor(endColor);
|
|
136
|
+
const getCellColor = (d) => {
|
|
137
|
+
// If a palette is provided, choose a stable "random" color per cell.
|
|
138
|
+
if (palette.length > 0) {
|
|
139
|
+
const key = `${d.x}-${d.y}`;
|
|
140
|
+
const idx = this.hashStringToUint32(key) % palette.length;
|
|
141
|
+
return palette[idx] ?? startColor;
|
|
142
|
+
}
|
|
143
|
+
// Otherwise compute a gradient color based on value.
|
|
144
|
+
const range = maxValue - minValue;
|
|
145
|
+
const t = range === 0 ? 1 : (d.value - minValue) / range;
|
|
146
|
+
const clamped = Math.max(0, Math.min(1, t));
|
|
147
|
+
return this.d3.interpolateRgb(resolvedStartColor, resolvedEndColor)(clamped);
|
|
148
|
+
};
|
|
111
149
|
// --- Axes ---
|
|
112
|
-
this.drawAxis(g, 'x-axis', this.d3.axisBottom(xScale).tickSize(0), 0, innerHeight, options.showXAxis);
|
|
113
|
-
|
|
150
|
+
this.drawAxis(g, 'x-axis', this.d3.axisBottom(xScale).tickSize(0), 0, innerHeight, options.showXAxis, isRtl);
|
|
151
|
+
if (isRtl) {
|
|
152
|
+
this.drawAxis(g, 'y-axis', this.d3.axisRight(yScale).tickSize(0), innerWidth, 0, options.showYAxis, isRtl);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
this.drawAxis(g, 'y-axis', this.d3.axisLeft(yScale).tickSize(0), 0, 0, options.showYAxis, isRtl);
|
|
156
|
+
}
|
|
157
|
+
this.drawAxisLabels(g, innerWidth, innerHeight, options, isRtl);
|
|
114
158
|
// --- Cells with Data Join ---
|
|
115
159
|
const easing = getEasingFunction(this.d3, options.animationEasing);
|
|
116
160
|
g.selectAll('.cell')
|
|
117
161
|
.data(data, (d) => `${d.x}-${d.y}`)
|
|
118
|
-
.join((enter) => enter.append('rect').attr('class', 'cell').attr('opacity', 0).attr('fill',
|
|
119
|
-
.on('mouseenter', (event, d) => this.showTooltip(event, d,
|
|
162
|
+
.join((enter) => enter.append('rect').attr('class', 'cell').attr('opacity', 0).attr('fill', startColor), (update) => update, (exit) => exit.transition().duration(200).attr('opacity', 0).remove())
|
|
163
|
+
.on('mouseenter', (event, d) => this.showTooltip(event, d, getCellColor(d)))
|
|
120
164
|
.on('mousemove', (event) => this.updateTooltipPos(event))
|
|
165
|
+
.on('click', (_event, d) => this.cellClick.emit(d))
|
|
121
166
|
.on('mouseleave', () => this.hideTooltip())
|
|
122
167
|
.transition()
|
|
123
168
|
.duration(options.animationDuration)
|
|
@@ -129,9 +174,29 @@ class AXHeatmapChartComponent extends AXChartComponent {
|
|
|
129
174
|
.attr('rx', options.borderRadius)
|
|
130
175
|
.attr('ry', options.borderRadius)
|
|
131
176
|
.attr('opacity', 1)
|
|
132
|
-
.style('fill', (d) =>
|
|
177
|
+
.style('fill', (d) => getCellColor(d));
|
|
133
178
|
}
|
|
134
|
-
|
|
179
|
+
hashStringToUint32(input) {
|
|
180
|
+
// Simple, fast, deterministic hash (djb2 variant)
|
|
181
|
+
let hash = 5381;
|
|
182
|
+
for (let i = 0; i < input.length; i++) {
|
|
183
|
+
hash = (hash * 33) ^ input.charCodeAt(i);
|
|
184
|
+
}
|
|
185
|
+
return hash >>> 0;
|
|
186
|
+
}
|
|
187
|
+
resolveCssColor(color) {
|
|
188
|
+
const container = this.containerRef().nativeElement;
|
|
189
|
+
const probe = document.createElement('span');
|
|
190
|
+
probe.style.color = color;
|
|
191
|
+
probe.style.position = 'absolute';
|
|
192
|
+
probe.style.left = '-9999px';
|
|
193
|
+
probe.style.top = '-9999px';
|
|
194
|
+
container.appendChild(probe);
|
|
195
|
+
const computed = getComputedStyle(probe).color;
|
|
196
|
+
probe.remove();
|
|
197
|
+
return computed || color;
|
|
198
|
+
}
|
|
199
|
+
drawAxis(g, className, axisFn, x, y, visible = true, isRtl = false) {
|
|
135
200
|
let axisG = g.select(`.${className}`);
|
|
136
201
|
if (axisG.empty())
|
|
137
202
|
axisG = g.append('g').attr('class', className);
|
|
@@ -140,6 +205,12 @@ class AXHeatmapChartComponent extends AXChartComponent {
|
|
|
140
205
|
.style('display', visible ? 'block' : 'none')
|
|
141
206
|
.call(axisFn)
|
|
142
207
|
.call((g) => g.select('.domain').remove());
|
|
208
|
+
// Ensure tick labels don't overlap the plot in RTL.
|
|
209
|
+
// `text-anchor` is logical (depends on `direction`), so we set both explicitly.
|
|
210
|
+
axisG.attr('direction', isRtl ? 'rtl' : 'ltr');
|
|
211
|
+
if (className === 'y-axis') {
|
|
212
|
+
axisG.selectAll('.tick text').attr('text-anchor', 'end');
|
|
213
|
+
}
|
|
143
214
|
}
|
|
144
215
|
showTooltip(event, item, color) {
|
|
145
216
|
if (!this.effectiveOptions().showTooltip)
|
|
@@ -153,24 +224,53 @@ class AXHeatmapChartComponent extends AXChartComponent {
|
|
|
153
224
|
this.updateTooltipPos(event);
|
|
154
225
|
}
|
|
155
226
|
updateTooltipPos(event) {
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
227
|
+
if (this._tooltipRafId)
|
|
228
|
+
cancelAnimationFrame(this._tooltipRafId);
|
|
229
|
+
this._tooltipRafId = requestAnimationFrame(() => {
|
|
230
|
+
const containerEl = this.containerRef().nativeElement;
|
|
231
|
+
const rect = containerEl.getBoundingClientRect();
|
|
232
|
+
const tooltipEl = containerEl.querySelector('.chart-tooltip');
|
|
233
|
+
const tooltipRect = tooltipEl?.getBoundingClientRect() ?? null;
|
|
234
|
+
const pos = computeTooltipPosition(rect, tooltipRect, event.clientX + 10, event.clientY - 10, 10);
|
|
235
|
+
this.tooltipPosition.set(pos);
|
|
236
|
+
});
|
|
160
237
|
}
|
|
161
238
|
hideTooltip() {
|
|
162
239
|
this.tooltipVisible.set(false);
|
|
163
240
|
}
|
|
164
241
|
ngOnDestroy() {
|
|
165
|
-
this.
|
|
242
|
+
this.directionSub?.unsubscribe();
|
|
166
243
|
this.svg?.remove();
|
|
244
|
+
if (this._tooltipRafId)
|
|
245
|
+
cancelAnimationFrame(this._tooltipRafId);
|
|
246
|
+
}
|
|
247
|
+
drawAxisLabels(g, innerWidth, innerHeight, options, isRtl) {
|
|
248
|
+
const xText = options.xAxisLabel?.trim();
|
|
249
|
+
const yText = options.yAxisLabel?.trim();
|
|
250
|
+
const labels = g.selectAll('.axis-labels').data([0]).join('g').attr('class', 'axis-labels');
|
|
251
|
+
labels
|
|
252
|
+
.selectAll('.axis-label-x')
|
|
253
|
+
.data(xText ? [xText] : [])
|
|
254
|
+
.join((enter) => enter.append('text').attr('class', 'axis-label axis-label-x'), (update) => update, (exit) => exit.remove())
|
|
255
|
+
.attr('x', innerWidth / 2)
|
|
256
|
+
.attr('y', innerHeight + 44)
|
|
257
|
+
.attr('text-anchor', 'middle')
|
|
258
|
+
.text((d) => d);
|
|
259
|
+
const yX = isRtl ? innerWidth + 46 : -46;
|
|
260
|
+
labels
|
|
261
|
+
.selectAll('.axis-label-y')
|
|
262
|
+
.data(yText ? [yText] : [])
|
|
263
|
+
.join((enter) => enter.append('text').attr('class', 'axis-label axis-label-y'), (update) => update, (exit) => exit.remove())
|
|
264
|
+
.attr('transform', `translate(${yX}, ${innerHeight / 2}) rotate(-90)`)
|
|
265
|
+
.attr('text-anchor', 'middle')
|
|
266
|
+
.text((d) => d);
|
|
167
267
|
}
|
|
168
268
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXHeatmapChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
169
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", type: AXHeatmapChartComponent, isStandalone: true, selector: "ax-heatmap-chart", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["chartContainer"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-heatmap-chart-container\" role=\"img\" #chartContainer>\n @if (data()?.length === 0) {\n <div class=\"ax-heatmap-no-data\">\n <i [class]=\"effectiveOptions().messages?.noDataIcon\"></i>\n <p class=\"ax-heatmap-no-data-text\">{{ effectiveOptions().messages?.noData }}</p>\n </div>\n }\n</div>\n\n<ax-chart-tooltip [data]=\"tooltipData()\" [position]=\"tooltipPosition()\" [visible]=\"tooltipVisible()\">\n</ax-chart-tooltip>\n", styles: ["ax-heatmap-chart{display:block;width:100%;height:100%;min-height:300px;--ax-comp-heatmap-chart-bg-color: transparent;--ax-comp-heatmap-chart-text-color: var(--ax-sys-color-on-surface-variant, 28, 27, 31);--ax-comp-heatmap-chart-axis-color: var(--ax-sys-color-outline-variant, 202, 196, 208)}ax-heatmap-chart .ax-heatmap-chart-container{position:relative;width:100%;height:100%;box-sizing:border-box;padding:1rem;overflow:hidden;background-color:var(--ax-comp-heatmap-chart-bg-color)}ax-heatmap-chart .ax-heatmap-chart-container svg{display:block;width:100%;height:100%;overflow:visible}ax-heatmap-chart .ax-heatmap-chart-container svg .cell{transition:stroke .15s ease}ax-heatmap-chart .ax-heatmap-chart-container svg .cell:hover{stroke:rgba(var(--ax-comp-heatmap-chart-text-color),.6);stroke-width:2px}ax-heatmap-chart .ax-heatmap-chart-container svg .axis-label{font-size:12px;font-weight:600;fill:rgb(var(--ax-comp-heatmap-chart-text-color))}ax-heatmap-chart .ax-heatmap-chart-container svg .tick text{font-size:11px;fill:rgba(var(--ax-comp-heatmap-chart-text-color),.7)}ax-heatmap-chart .ax-heatmap-chart-container svg line,ax-heatmap-chart .ax-heatmap-chart-container svg .domain{stroke:rgba(var(--ax-comp-heatmap-chart-axis-color),.5)}ax-heatmap-chart .ax-heatmap-no-data{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;text-align:center;color:rgba(var(--ax-comp-heatmap-chart-text-color),.6)}ax-heatmap-chart .ax-heatmap-no-data i{font-size:2rem;margin-bottom:.5rem}\n"], dependencies: [{ kind: "component", type: AXChartTooltipComponent, selector: "ax-chart-tooltip", inputs: ["data", "position", "visible", "showPercentage", "style"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
269
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", type: AXHeatmapChartComponent, isStandalone: true, selector: "ax-heatmap-chart", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { cellClick: "cellClick" }, viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["chartContainer"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-heatmap-chart-container\" role=\"img\" #chartContainer>\n @if (data()?.length === 0) {\n <div class=\"ax-heatmap-no-data\">\n <i [class]=\"effectiveOptions().messages?.noDataIcon\"></i>\n <p class=\"ax-heatmap-no-data-text\">{{ effectiveOptions().messages?.noData }}</p>\n </div>\n }\n</div>\n\n<ax-chart-tooltip [data]=\"tooltipData()\" [position]=\"tooltipPosition()\" [visible]=\"tooltipVisible()\">\n</ax-chart-tooltip>\n", styles: ["ax-heatmap-chart{display:block;width:100%;height:100%;min-height:300px;--ax-comp-heatmap-chart-bg-color: transparent;--ax-comp-heatmap-chart-text-color: var(--ax-sys-color-on-surface-variant, 28, 27, 31);--ax-comp-heatmap-chart-axis-color: var(--ax-sys-color-outline-variant, 202, 196, 208)}ax-heatmap-chart .ax-heatmap-chart-container{position:relative;width:100%;height:100%;box-sizing:border-box;padding:1rem;overflow:hidden;background-color:var(--ax-comp-heatmap-chart-bg-color)}ax-heatmap-chart .ax-heatmap-chart-container svg{display:block;width:100%;height:100%;overflow:visible}ax-heatmap-chart .ax-heatmap-chart-container svg .cell{transition:stroke .15s ease}ax-heatmap-chart .ax-heatmap-chart-container svg .cell:hover{stroke:rgba(var(--ax-comp-heatmap-chart-text-color),.6);stroke-width:2px}ax-heatmap-chart .ax-heatmap-chart-container svg .axis-label{font-size:12px;font-weight:600;fill:rgb(var(--ax-comp-heatmap-chart-text-color))}ax-heatmap-chart .ax-heatmap-chart-container svg .tick text{font-size:11px;fill:rgba(var(--ax-comp-heatmap-chart-text-color),.7)}ax-heatmap-chart .ax-heatmap-chart-container svg line,ax-heatmap-chart .ax-heatmap-chart-container svg .domain{stroke:rgba(var(--ax-comp-heatmap-chart-axis-color),.5)}ax-heatmap-chart .ax-heatmap-no-data{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;text-align:center;color:rgba(var(--ax-comp-heatmap-chart-text-color),.6)}ax-heatmap-chart .ax-heatmap-no-data i{font-size:2rem;margin-bottom:.5rem}\n"], dependencies: [{ kind: "component", type: AXChartTooltipComponent, selector: "ax-chart-tooltip", inputs: ["data", "position", "visible", "showPercentage", "style"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
170
270
|
}
|
|
171
271
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXHeatmapChartComponent, decorators: [{
|
|
172
272
|
type: Component,
|
|
173
|
-
args: [{ selector: 'ax-heatmap-chart', encapsulation: ViewEncapsulation.None,
|
|
273
|
+
args: [{ selector: 'ax-heatmap-chart', encapsulation: ViewEncapsulation.None, imports: [AXChartTooltipComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ax-heatmap-chart-container\" role=\"img\" #chartContainer>\n @if (data()?.length === 0) {\n <div class=\"ax-heatmap-no-data\">\n <i [class]=\"effectiveOptions().messages?.noDataIcon\"></i>\n <p class=\"ax-heatmap-no-data-text\">{{ effectiveOptions().messages?.noData }}</p>\n </div>\n }\n</div>\n\n<ax-chart-tooltip [data]=\"tooltipData()\" [position]=\"tooltipPosition()\" [visible]=\"tooltipVisible()\">\n</ax-chart-tooltip>\n", styles: ["ax-heatmap-chart{display:block;width:100%;height:100%;min-height:300px;--ax-comp-heatmap-chart-bg-color: transparent;--ax-comp-heatmap-chart-text-color: var(--ax-sys-color-on-surface-variant, 28, 27, 31);--ax-comp-heatmap-chart-axis-color: var(--ax-sys-color-outline-variant, 202, 196, 208)}ax-heatmap-chart .ax-heatmap-chart-container{position:relative;width:100%;height:100%;box-sizing:border-box;padding:1rem;overflow:hidden;background-color:var(--ax-comp-heatmap-chart-bg-color)}ax-heatmap-chart .ax-heatmap-chart-container svg{display:block;width:100%;height:100%;overflow:visible}ax-heatmap-chart .ax-heatmap-chart-container svg .cell{transition:stroke .15s ease}ax-heatmap-chart .ax-heatmap-chart-container svg .cell:hover{stroke:rgba(var(--ax-comp-heatmap-chart-text-color),.6);stroke-width:2px}ax-heatmap-chart .ax-heatmap-chart-container svg .axis-label{font-size:12px;font-weight:600;fill:rgb(var(--ax-comp-heatmap-chart-text-color))}ax-heatmap-chart .ax-heatmap-chart-container svg .tick text{font-size:11px;fill:rgba(var(--ax-comp-heatmap-chart-text-color),.7)}ax-heatmap-chart .ax-heatmap-chart-container svg line,ax-heatmap-chart .ax-heatmap-chart-container svg .domain{stroke:rgba(var(--ax-comp-heatmap-chart-axis-color),.5)}ax-heatmap-chart .ax-heatmap-no-data{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;text-align:center;color:rgba(var(--ax-comp-heatmap-chart-text-color),.6)}ax-heatmap-chart .ax-heatmap-no-data i{font-size:2rem;margin-bottom:.5rem}\n"] }]
|
|
174
274
|
}], ctorParameters: () => [] });
|
|
175
275
|
|
|
176
276
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-charts-heatmap-chart.mjs","sources":["../tmp-esm2022/heatmap-chart/lib/heatmap-chart.config.js","../tmp-esm2022/heatmap-chart/lib/heatmap-chart.component.js","../tmp-esm2022/heatmap-chart/acorex-charts-heatmap-chart.js"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nexport const AXHeatmapChartDefaultConfig = {\n margin: { top: 30, right: 30, bottom: 60, left: 60 },\n colors: ['#ebedf0', '#9be9a8', '#40c463', '#30a14e', '#216e39'], // GitHub style green scale\n cellPadding: 0.05,\n borderRadius: 2,\n showXAxis: true,\n showYAxis: true,\n showTooltip: true,\n animationDuration: 800,\n animationEasing: 'cubic-out',\n messages: {\n noData: 'No data available',\n noDataHelp: 'Provide X, Y, and Value data to render the heatmap',\n noDataIcon: 'fa-light fa-grid-2',\n },\n};\nexport const AX_HEATMAP_CHART_CONFIG = new InjectionToken('AX_HEATMAP_CHART_CONFIG', {\n providedIn: 'root',\n factory: () => AXHeatmapChartDefaultConfig,\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhdG1hcC1jaGFydC5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jaGFydHMvaGVhdG1hcC1jaGFydC9zcmMvbGliL2hlYXRtYXAtY2hhcnQuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0MsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQXlCO0lBQy9ELE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7SUFDcEQsTUFBTSxFQUFFLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxFQUFFLDJCQUEyQjtJQUM1RixXQUFXLEVBQUUsSUFBSTtJQUNqQixZQUFZLEVBQUUsQ0FBQztJQUNmLFNBQVMsRUFBRSxJQUFJO0lBQ2YsU0FBUyxFQUFFLElBQUk7SUFDZixXQUFXLEVBQUUsSUFBSTtJQUNqQixpQkFBaUIsRUFBRSxHQUFHO0lBQ3RCLGVBQWUsRUFBRSxXQUFXO0lBQzVCLFFBQVEsRUFBRTtRQUNSLE1BQU0sRUFBRSxtQkFBbUI7UUFDM0IsVUFBVSxFQUFFLG9EQUFvRDtRQUNoRSxVQUFVLEVBQUUsb0JBQW9CO0tBQ2pDO0NBQ0YsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLElBQUksY0FBYyxDQUF1Qix5QkFBeUIsRUFBRTtJQUN6RyxVQUFVLEVBQUUsTUFBTTtJQUNsQixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsMkJBQTJCO0NBQzNDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWEhlYXRtYXBDaGFydE9wdGlvbiB9IGZyb20gJy4vaGVhdG1hcC1jaGFydC50eXBlJztcblxuZXhwb3J0IGNvbnN0IEFYSGVhdG1hcENoYXJ0RGVmYXVsdENvbmZpZzogQVhIZWF0bWFwQ2hhcnRPcHRpb24gPSB7XG4gIG1hcmdpbjogeyB0b3A6IDMwLCByaWdodDogMzAsIGJvdHRvbTogNjAsIGxlZnQ6IDYwIH0sXG4gIGNvbG9yczogWycjZWJlZGYwJywgJyM5YmU5YTgnLCAnIzQwYzQ2MycsICcjMzBhMTRlJywgJyMyMTZlMzknXSwgLy8gR2l0SHViIHN0eWxlIGdyZWVuIHNjYWxlXG4gIGNlbGxQYWRkaW5nOiAwLjA1LFxuICBib3JkZXJSYWRpdXM6IDIsXG4gIHNob3dYQXhpczogdHJ1ZSxcbiAgc2hvd1lBeGlzOiB0cnVlLFxuICBzaG93VG9vbHRpcDogdHJ1ZSxcbiAgYW5pbWF0aW9uRHVyYXRpb246IDgwMCxcbiAgYW5pbWF0aW9uRWFzaW5nOiAnY3ViaWMtb3V0JyxcbiAgbWVzc2FnZXM6IHtcbiAgICBub0RhdGE6ICdObyBkYXRhIGF2YWlsYWJsZScsXG4gICAgbm9EYXRhSGVscDogJ1Byb3ZpZGUgWCwgWSwgYW5kIFZhbHVlIGRhdGEgdG8gcmVuZGVyIHRoZSBoZWF0bWFwJyxcbiAgICBub0RhdGFJY29uOiAnZmEtbGlnaHQgZmEtZ3JpZC0yJyxcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBBWF9IRUFUTUFQX0NIQVJUX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBWEhlYXRtYXBDaGFydE9wdGlvbj4oJ0FYX0hFQVRNQVBfQ0hBUlRfQ09ORklHJywge1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGZhY3Rvcnk6ICgpID0+IEFYSGVhdG1hcENoYXJ0RGVmYXVsdENvbmZpZyxcbn0pO1xuIl19","import { AXChartComponent, computeTooltipPosition, getEasingFunction } from '@acorex/charts';\nimport { AXChartTooltipComponent } from '@acorex/charts/chart-tooltip';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, afterNextRender, computed, effect, inject, input, signal, viewChild, } from '@angular/core';\nimport { AX_HEATMAP_CHART_CONFIG } from './heatmap-chart.config';\nimport * as i0 from \"@angular/core\";\nexport class AXHeatmapChartComponent extends AXChartComponent {\n // Inject config at the top level\n defaultConfig = inject(AX_HEATMAP_CHART_CONFIG);\n // Inputs\n data = input([], ...(ngDevMode ? [{ debugName: \"data\" }] : []));\n options = input({}, ...(ngDevMode ? [{ debugName: \"options\" }] : []));\n // View Child\n containerRef = viewChild.required('chartContainer');\n // Internal State\n svg;\n resizeObserver = null;\n d3;\n _d3Ready = signal(false, ...(ngDevMode ? [{ debugName: \"_d3Ready\" }] : []));\n // Tooltip State\n tooltipVisible = signal(false, ...(ngDevMode ? [{ debugName: \"tooltipVisible\" }] : []));\n tooltipPosition = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: \"tooltipPosition\" }] : []));\n tooltipData = signal({ title: '', value: '' }, ...(ngDevMode ? [{ debugName: \"tooltipData\" }] : []));\n // Computed options (referencing the already injected defaultConfig)\n effectiveOptions = computed(() => ({\n ...this.defaultConfig,\n ...this.options(),\n }), ...(ngDevMode ? [{ debugName: \"effectiveOptions\" }] : []));\n constructor() {\n super();\n // Initialize D3 and ResizeObserver\n afterNextRender(() => {\n this.init();\n });\n // Reactive Render when data or D3 is ready\n effect(() => {\n if (this._d3Ready()) {\n this.renderChart();\n }\n });\n }\n async init() {\n try {\n this.d3 = await import('d3');\n this.resizeObserver = new ResizeObserver(() => {\n if (this._d3Ready())\n this.renderChart();\n });\n this.resizeObserver.observe(this.containerRef().nativeElement);\n this._d3Ready.set(true);\n }\n catch (err) {\n console.error('Heatmap: Initialization failed', err);\n }\n }\n renderChart() {\n const container = this.containerRef().nativeElement;\n const data = this.data() || [];\n if (!container || container.clientWidth === 0 || container.clientHeight === 0)\n return;\n // Clear SVG if data is empty\n if (data.length === 0) {\n if (this.svg)\n this.svg.remove();\n this.svg = null;\n return;\n }\n const options = this.effectiveOptions();\n const width = container.clientWidth;\n const height = container.clientHeight;\n const margin = options.margin || { top: 20, right: 20, bottom: 40, left: 40 };\n const innerWidth = width - margin.left - margin.right;\n const innerHeight = height - margin.top - margin.bottom;\n // Create/Select SVG root\n if (!this.svg) {\n this.svg = this.d3.select(container).append('svg').attr('style', 'width: 100%; height: 100%; display: block;');\n this.svg.append('g').attr('class', 'chart-group');\n }\n this.svg.attr('viewBox', `0 0 ${width} ${height}`);\n const g = this.svg.select('.chart-group').attr('transform', `translate(${margin.left},${margin.top})`);\n // --- Scales ---\n const xKeys = Array.from(new Set(data.map((d) => d.x.toString())));\n const yKeys = Array.from(new Set(data.map((d) => d.y.toString())));\n const xScale = this.d3.scaleBand().domain(xKeys).range([0, innerWidth]).padding(options.cellPadding);\n const yScale = this.d3.scaleBand().domain(yKeys).range([innerHeight, 0]).padding(options.cellPadding);\n const valueExtent = this.d3.extent(data, (d) => d.value);\n const colorScale = this.d3\n .scaleSequential()\n .domain([valueExtent[0] || 0, valueExtent[1] || 1])\n .interpolator(this.d3.interpolateRgbBasis(options.colors));\n // --- Axes ---\n this.drawAxis(g, 'x-axis', this.d3.axisBottom(xScale).tickSize(0), 0, innerHeight, options.showXAxis);\n this.drawAxis(g, 'y-axis', this.d3.axisLeft(yScale).tickSize(0), 0, 0, options.showYAxis);\n // --- Cells with Data Join ---\n const easing = getEasingFunction(this.d3, options.animationEasing);\n g.selectAll('.cell')\n .data(data, (d) => `${d.x}-${d.y}`)\n .join((enter) => enter.append('rect').attr('class', 'cell').attr('opacity', 0).attr('fill', options.colors[0]), (update) => update, (exit) => exit.transition().duration(200).attr('opacity', 0).remove())\n .on('mouseenter', (event, d) => this.showTooltip(event, d, colorScale(d.value)))\n .on('mousemove', (event) => this.updateTooltipPos(event))\n .on('mouseleave', () => this.hideTooltip())\n .transition()\n .duration(options.animationDuration)\n .ease(easing)\n .attr('x', (d) => xScale(d.x.toString()))\n .attr('y', (d) => yScale(d.y.toString()))\n .attr('width', xScale.bandwidth())\n .attr('height', yScale.bandwidth())\n .attr('rx', options.borderRadius)\n .attr('ry', options.borderRadius)\n .attr('opacity', 1)\n .style('fill', (d) => colorScale(d.value));\n }\n drawAxis(g, className, axisFn, x, y, visible = true) {\n let axisG = g.select(`.${className}`);\n if (axisG.empty())\n axisG = g.append('g').attr('class', className);\n axisG\n .attr('transform', `translate(${x},${y})`)\n .style('display', visible ? 'block' : 'none')\n .call(axisFn)\n .call((g) => g.select('.domain').remove());\n }\n showTooltip(event, item, color) {\n if (!this.effectiveOptions().showTooltip)\n return;\n this.tooltipData.set({\n title: `${item.x} / ${item.y}`,\n value: item.label || item.value.toLocaleString(),\n color: color,\n });\n this.tooltipVisible.set(true);\n this.updateTooltipPos(event);\n }\n updateTooltipPos(event) {\n const container = this.containerRef().nativeElement;\n const rect = container.getBoundingClientRect();\n const pos = computeTooltipPosition(rect, null, event.clientX, event.clientY, 15);\n this.tooltipPosition.set(pos);\n }\n hideTooltip() {\n this.tooltipVisible.set(false);\n }\n ngOnDestroy() {\n this.resizeObserver?.disconnect();\n this.svg?.remove();\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXHeatmapChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.3\", type: AXHeatmapChartComponent, isStandalone: true, selector: \"ax-heatmap-chart\", inputs: { data: { classPropertyName: \"data\", publicName: \"data\", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: \"options\", publicName: \"options\", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: \"containerRef\", first: true, predicate: [\"chartContainer\"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-heatmap-chart-container\\\" role=\\\"img\\\" #chartContainer>\\n @if (data()?.length === 0) {\\n <div class=\\\"ax-heatmap-no-data\\\">\\n <i [class]=\\\"effectiveOptions().messages?.noDataIcon\\\"></i>\\n <p class=\\\"ax-heatmap-no-data-text\\\">{{ effectiveOptions().messages?.noData }}</p>\\n </div>\\n }\\n</div>\\n\\n<ax-chart-tooltip [data]=\\\"tooltipData()\\\" [position]=\\\"tooltipPosition()\\\" [visible]=\\\"tooltipVisible()\\\">\\n</ax-chart-tooltip>\\n\", styles: [\"ax-heatmap-chart{display:block;width:100%;height:100%;min-height:300px;--ax-comp-heatmap-chart-bg-color: transparent;--ax-comp-heatmap-chart-text-color: var(--ax-sys-color-on-surface-variant, 28, 27, 31);--ax-comp-heatmap-chart-axis-color: var(--ax-sys-color-outline-variant, 202, 196, 208)}ax-heatmap-chart .ax-heatmap-chart-container{position:relative;width:100%;height:100%;box-sizing:border-box;padding:1rem;overflow:hidden;background-color:var(--ax-comp-heatmap-chart-bg-color)}ax-heatmap-chart .ax-heatmap-chart-container svg{display:block;width:100%;height:100%;overflow:visible}ax-heatmap-chart .ax-heatmap-chart-container svg .cell{transition:stroke .15s ease}ax-heatmap-chart .ax-heatmap-chart-container svg .cell:hover{stroke:rgba(var(--ax-comp-heatmap-chart-text-color),.6);stroke-width:2px}ax-heatmap-chart .ax-heatmap-chart-container svg .axis-label{font-size:12px;font-weight:600;fill:rgb(var(--ax-comp-heatmap-chart-text-color))}ax-heatmap-chart .ax-heatmap-chart-container svg .tick text{font-size:11px;fill:rgba(var(--ax-comp-heatmap-chart-text-color),.7)}ax-heatmap-chart .ax-heatmap-chart-container svg line,ax-heatmap-chart .ax-heatmap-chart-container svg .domain{stroke:rgba(var(--ax-comp-heatmap-chart-axis-color),.5)}ax-heatmap-chart .ax-heatmap-no-data{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;text-align:center;color:rgba(var(--ax-comp-heatmap-chart-text-color),.6)}ax-heatmap-chart .ax-heatmap-no-data i{font-size:2rem;margin-bottom:.5rem}\\n\"], dependencies: [{ kind: \"component\", type: AXChartTooltipComponent, selector: \"ax-chart-tooltip\", inputs: [\"data\", \"position\", \"visible\", \"showPercentage\", \"style\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXHeatmapChartComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-heatmap-chart', encapsulation: ViewEncapsulation.None, standalone: true, imports: [AXChartTooltipComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: \"<div class=\\\"ax-heatmap-chart-container\\\" role=\\\"img\\\" #chartContainer>\\n @if (data()?.length === 0) {\\n <div class=\\\"ax-heatmap-no-data\\\">\\n <i [class]=\\\"effectiveOptions().messages?.noDataIcon\\\"></i>\\n <p class=\\\"ax-heatmap-no-data-text\\\">{{ effectiveOptions().messages?.noData }}</p>\\n </div>\\n }\\n</div>\\n\\n<ax-chart-tooltip [data]=\\\"tooltipData()\\\" [position]=\\\"tooltipPosition()\\\" [visible]=\\\"tooltipVisible()\\\">\\n</ax-chart-tooltip>\\n\", styles: [\"ax-heatmap-chart{display:block;width:100%;height:100%;min-height:300px;--ax-comp-heatmap-chart-bg-color: transparent;--ax-comp-heatmap-chart-text-color: var(--ax-sys-color-on-surface-variant, 28, 27, 31);--ax-comp-heatmap-chart-axis-color: var(--ax-sys-color-outline-variant, 202, 196, 208)}ax-heatmap-chart .ax-heatmap-chart-container{position:relative;width:100%;height:100%;box-sizing:border-box;padding:1rem;overflow:hidden;background-color:var(--ax-comp-heatmap-chart-bg-color)}ax-heatmap-chart .ax-heatmap-chart-container svg{display:block;width:100%;height:100%;overflow:visible}ax-heatmap-chart .ax-heatmap-chart-container svg .cell{transition:stroke .15s ease}ax-heatmap-chart .ax-heatmap-chart-container svg .cell:hover{stroke:rgba(var(--ax-comp-heatmap-chart-text-color),.6);stroke-width:2px}ax-heatmap-chart .ax-heatmap-chart-container svg .axis-label{font-size:12px;font-weight:600;fill:rgb(var(--ax-comp-heatmap-chart-text-color))}ax-heatmap-chart .ax-heatmap-chart-container svg .tick text{font-size:11px;fill:rgba(var(--ax-comp-heatmap-chart-text-color),.7)}ax-heatmap-chart .ax-heatmap-chart-container svg line,ax-heatmap-chart .ax-heatmap-chart-container svg .domain{stroke:rgba(var(--ax-comp-heatmap-chart-axis-color),.5)}ax-heatmap-chart .ax-heatmap-no-data{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;text-align:center;color:rgba(var(--ax-comp-heatmap-chart-text-color),.6)}ax-heatmap-chart .ax-heatmap-no-data i{font-size:2rem;margin-bottom:.5rem}\\n\"] }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhdG1hcC1jaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jaGFydHMvaGVhdG1hcC1jaGFydC9zcmMvbGliL2hlYXRtYXAtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2hhcnRzL2hlYXRtYXAtY2hhcnQvc3JjL2xpYi9oZWF0bWFwLWNoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxzQkFBc0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdGLE9BQU8sRUFBRSx1QkFBdUIsRUFBc0IsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFHVCxpQkFBaUIsRUFDakIsZUFBZSxFQUNmLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQVlqRSxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsZ0JBQWdCO0lBQzNELGlDQUFpQztJQUNoQixhQUFhLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFFakUsU0FBUztJQUNULElBQUksR0FBRyxLQUFLLENBQWtCLEVBQUUsZ0RBQUMsQ0FBQztJQUNsQyxPQUFPLEdBQUcsS0FBSyxDQUF1QixFQUFFLG1EQUFDLENBQUM7SUFFMUMsYUFBYTtJQUNJLFlBQVksR0FBRyxTQUFTLENBQUMsUUFBUSxDQUE2QixnQkFBZ0IsQ0FBQyxDQUFDO0lBRWpHLGlCQUFpQjtJQUNULEdBQUcsQ0FBTTtJQUNULGNBQWMsR0FBMEIsSUFBSSxDQUFDO0lBQzNDLEVBQUUsQ0FBTTtJQUNWLFFBQVEs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LE1BQU0sR0FBRyxHQUFHLHNCQUFzQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFTyxXQUFXO1FBQ2pCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGNBQWMsRUFBRSxVQUFVLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQ3JCLENBQUM7dUdBeEtVLHVCQUF1QjsyRkFBdkIsdUJBQXVCLGtlQzVCcEMsNmNBV0Esc2lERGNZLHVCQUF1Qjs7MkZBR3RCLHVCQUF1QjtrQkFUbkMsU0FBUzsrQkFDRSxrQkFBa0IsaUJBR2IsaUJBQWlCLENBQUMsSUFBSSxjQUN6QixJQUFJLFdBQ1AsQ0FBQyx1QkFBdUIsQ0FBQyxtQkFDakIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQ2hhcnRDb21wb25lbnQsIGNvbXB1dGVUb29sdGlwUG9zaXRpb24sIGdldEVhc2luZ0Z1bmN0aW9uIH0gZnJvbSAnQGFjb3JleC9jaGFydHMnO1xuaW1wb3J0IHsgQVhDaGFydFRvb2x0aXBDb21wb25lbnQsIEFYQ2hhcnRUb29sdGlwRGF0YSB9IGZyb20gJ0BhY29yZXgvY2hhcnRzL2NoYXJ0LXRvb2x0aXAnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgT25EZXN0cm95LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgYWZ0ZXJOZXh0UmVuZGVyLFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBzaWduYWwsXG4gIHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWF9IRUFUTUFQX0NIQVJUX0NPTkZJRyB9IGZyb20gJy4vaGVhdG1hcC1jaGFydC5jb25maWcnO1xuaW1wb3J0IHsgQVhIZWF0bWFwQ2hhcnRPcHRpb24sIEFYSGVhdG1hcERhdGEgfSBmcm9tICcuL2hlYXRtYXAtY2hhcnQudHlwZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LWhlYXRtYXAtY2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vaGVhdG1hcC1jaGFydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2hlYXRtYXAtY2hhcnQuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0FYQ2hhcnRUb29sdGlwQ29tcG9uZW50XSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFYSGVhdG1hcENoYXJ0Q29tcG9uZW50IGV4dGVuZHMgQVhDaGFydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8vIEluamVjdCBjb25maWcgYXQgdGhlIHRvcCBsZXZlbFxuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRDb25maWcgPSBpbmplY3QoQVhfSEVBVE1BUF9DSEFSVF9DT05GSUcpO1xuXG4gIC8vIElucHV0c1xuICBkYXRhID0gaW5wdXQ8QVhIZWF0bWFwRGF0YVtdPihbXSk7XG4gIG9wdGlvbnMgPSBpbnB1dDxBWEhlYXRtYXBDaGFydE9wdGlvbj4oe30pO1xuXG4gIC8vIFZpZXcgQ2hpbGRcbiAgcHJpdmF0ZSByZWFkb25seSBjb250YWluZXJSZWYgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4+KCdjaGFydENvbnRhaW5lcicpO1xuXG4gIC8vIEludGVybmFsIFN0YXRlXG4gIHByaXZhdGUgc3ZnOiBhbnk7XG4gIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyIHwgbnVsbCA9IG51bGw7XG4gIHByb3RlY3RlZCBkMzogYW55O1xuICBwcml2YXRlIF9kM1JlYWR5ID0gc2lnbmFsKGZhbHNlKTtcblxuICAvLyBUb29sdGlwIFN0YXRlXG4gIHByb3RlY3RlZCB0b29sdGlwVmlzaWJsZSA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCB0b29sdGlwUG9zaXRpb24gPSBzaWduYWwoeyB4OiAwLCB5OiAwIH0pO1xuICBwcm90ZWN0ZWQgdG9vbHRpcERhdGEgPSBzaWduYWw8QVhDaGFydFRvb2x0aXBEYXRhPih7IHRpdGxlOiAnJywgdmFsdWU6ICcnIH0pO1xuXG4gIC8vIENvbXB1dGVkIG9wdGlvbnMgKHJlZmVyZW5jaW5nIHRoZSBhbHJlYWR5IGluamVjdGVkIGRlZmF1bHRDb25maWcpXG4gIHByb3RlY3RlZCBlZmZlY3RpdmVPcHRpb25zID0gY29tcHV0ZWQoKCkgPT4gKHtcbiAgICAuLi50aGlzLmRlZmF1bHRDb25maWcsXG4gICAgLi4udGhpcy5vcHRpb25zKCksXG4gIH0pKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBEMyBhbmQgUmVzaXplT2JzZXJ2ZXJcbiAgICBhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuICAgICAgdGhpcy5pbml0KCk7XG4gICAgfSk7XG5cbiAgICAvLyBSZWFjdGl2ZSBSZW5kZXIgd2hlbiBkYXRhIG9yIEQzIGlzIHJlYWR5XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9kM1JlYWR5KCkpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJDaGFydCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBpbml0KCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmQzID0gYXdhaXQgaW1wb3J0KCdkMycpO1xuXG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2QzUmVhZHkoKSkgdGhpcy5yZW5kZXJDaGFydCgpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5jb250YWluZXJSZWYoKS5uYXRpdmVFbGVtZW50KTtcblxuICAgICAgdGhpcy5fZDNSZWFkeS5zZXQodHJ1ZSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdIZWF0bWFwOiBJbml0aWFsaXphdGlvbiBmYWlsZWQnLCBlcnIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQ2hhcnQoKSB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb250YWluZXJSZWYoKS5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGEoKSB8fCBbXTtcblxuICAgIGlmICghY29udGFpbmVyIHx8IGNvbnRhaW5lci5jbGllbnRXaWR0aCA9PT0gMCB8fCBjb250YWluZXIuY2xpZW50SGVpZ2h0ID09PSAwKSByZXR1cm47XG5cbiAgICAvLyBDbGVhciBTVkcgaWYgZGF0YSBpcyBlbXB0eVxuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaWYgKHRoaXMuc3ZnKSB0aGlzLnN2Zy5yZW1vdmUoKTtcbiAgICAgIHRoaXMuc3ZnID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5lZmZlY3RpdmVPcHRpb25zKCk7XG4gICAgY29uc3Qgd2lkdGggPSBjb250YWluZXIuY2xpZW50V2lkdGg7XG4gICAgY29uc3QgaGVpZ2h0ID0gY29udGFpbmVyLmNsaWVudEhlaWdodDtcbiAgICBjb25zdCBtYXJnaW4gPSBvcHRpb25zLm1hcmdpbiB8fCB7IHRvcDogMjAsIHJpZ2h0OiAyMCwgYm90dG9tOiA0MCwgbGVmdDogNDAgfTtcblxuICAgIGNvbnN0IGlubmVyV2lkdGggPSB3aWR0aCAtIG1hcmdpbi5sZWZ0IC0gbWFyZ2luLnJpZ2h0O1xuICAgIGNvbnN0IGlubmVySGVpZ2h0ID0gaGVpZ2h0IC0gbWFyZ2luLnRvcCAtIG1hcmdpbi5ib3R0b207XG5cbiAgICAvLyBDcmVhdGUvU2VsZWN0IFNWRyByb290XG4gICAgaWYgKCF0aGlzLnN2Zykge1xuICAgICAgdGhpcy5zdmcgPSB0aGlzLmQzLnNlbGVjdChjb250YWluZXIpLmFwcGVuZCgnc3ZnJykuYXR0cignc3R5bGUnLCAnd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgZGlzcGxheTogYmxvY2s7Jyk7XG4gICAgICB0aGlzLnN2Zy5hcHBlbmQoJ2cnKS5hdHRyKCdjbGFzcycsICdjaGFydC1ncm91cCcpO1xuICAgIH1cblxuICAgIHRoaXMuc3ZnLmF0dHIoJ3ZpZXdCb3gnLCBgMCAwICR7d2lkdGh9ICR7aGVpZ2h0fWApO1xuICAgIGNvbnN0IGcgPSB0aGlzLnN2Zy5zZWxlY3QoJy5jaGFydC1ncm91cCcpLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHttYXJnaW4ubGVmdH0sJHttYXJnaW4udG9wfSlgKTtcblxuICAgIC8vIC0tLSBTY2FsZXMgLS0tXG4gICAgY29uc3QgeEtleXMgPSBBcnJheS5mcm9tKG5ldyBTZXQoZGF0YS5tYXAoKGQpID0+IGQueC50b1N0cmluZygpKSkpO1xuICAgIGNvbnN0IHlLZXlzID0gQXJyYXkuZnJvbShuZXcgU2V0KGRhdGEubWFwKChkKSA9PiBkLnkudG9TdHJpbmcoKSkpKTtcblxuICAgIGNvbnN0IHhTY2FsZSA9IHRoaXMuZDMuc2NhbGVCYW5kKCkuZG9tYWluKHhLZXlzKS5yYW5nZShbMCwgaW5uZXJXaWR0aF0pLnBhZGRpbmcob3B0aW9ucy5jZWxsUGFkZGluZyk7XG4gICAgY29uc3QgeVNjYWxlID0gdGhpcy5kMy5zY2FsZUJhbmQoKS5kb21haW4oeUtleXMpLnJhbmdlKFtpbm5lckhlaWdodCwgMF0pLnBhZGRpbmcob3B0aW9ucy5jZWxsUGFkZGluZyk7XG5cbiAgICBjb25zdCB2YWx1ZUV4dGVudCA9IHRoaXMuZDMuZXh0ZW50KGRhdGEsIChkOiBhbnkpID0+IGQudmFsdWUpIGFzIFtudW1iZXIsIG51bWJlcl07XG4gICAgY29uc3QgY29sb3JTY2FsZSA9IHRoaXMuZDNcbiAgICAgIC5zY2FsZVNlcXVlbnRpYWwoKVxuICAgICAgLmRvbWFpbihbdmFsdWVFeHRlbnRbMF0gfHwgMCwgdmFsdWVFeHRlbnRbMV0gfHwgMV0pXG4gICAgICAuaW50ZXJwb2xhdG9yKHRoaXMuZDMuaW50ZXJwb2xhdGVSZ2JCYXNpcyhvcHRpb25zLmNvbG9ycykpO1xuXG4gICAgLy8gLS0tIEF4ZXMgLS0tXG4gICAgdGhpcy5kcmF3QXhpcyhnLCAneC1heGlzJywgdGhpcy5kMy5heGlzQm90dG9tKHhTY2FsZSkudGlja1NpemUoMCksIDAsIGlubmVySGVpZ2h0LCBvcHRpb25zLnNob3dYQXhpcyk7XG4gICAgdGhpcy5kcmF3QXhpcyhnLCAneS1heGlzJywgdGhpcy5kMy5heGlzTGVmdCh5U2NhbGUpLnRpY2tTaXplKDApLCAwLCAwLCBvcHRpb25zLnNob3dZQXhpcyk7XG5cbiAgICAvLyAtLS0gQ2VsbHMgd2l0aCBEYXRhIEpvaW4gLS0tXG4gICAgY29uc3QgZWFzaW5nID0gZ2V0RWFzaW5nRnVuY3Rpb24odGhpcy5kMywgb3B0aW9ucy5hbmltYXRpb25FYXNpbmcpO1xuXG4gICAgZy5zZWxlY3RBbGwoJy5jZWxsJylcbiAgICAgIC5kYXRhKGRhdGEsIChkOiBhbnkpID0+IGAke2QueH0tJHtkLnl9YClcbiAgICAgIC5qb2luKFxuICAgICAgICAoZW50ZXI6IGFueSkgPT4gZW50ZXIuYXBwZW5kKCdyZWN0JykuYXR0cignY2xhc3MnLCAnY2VsbCcpLmF0dHIoJ29wYWNpdHknLCAwKS5hdHRyKCdmaWxsJywgb3B0aW9ucy5jb2xvcnMhWzBdKSxcbiAgICAgICAgKHVwZGF0ZTogYW55KSA9PiB1cGRhdGUsXG4gICAgICAgIChleGl0OiBhbnkpID0+IGV4aXQudHJhbnNpdGlvbigpLmR1cmF0aW9uKDIwMCkuYXR0cignb3BhY2l0eScsIDApLnJlbW92ZSgpLFxuICAgICAgKVxuICAgICAgLm9uKCdtb3VzZWVudGVyJywgKGV2ZW50OiBhbnksIGQ6IGFueSkgPT4gdGhpcy5zaG93VG9vbHRpcChldmVudCwgZCwgY29sb3JTY2FsZShkLnZhbHVlKSkpXG4gICAgICAub24oJ21vdXNlbW92ZScsIChldmVudDogYW55KSA9PiB0aGlzLnVwZGF0ZVRvb2x0aXBQb3MoZXZlbnQpKVxuICAgICAgLm9uKCdtb3VzZWxlYXZlJywgKCkgPT4gdGhpcy5oaWRlVG9vbHRpcCgpKVxuICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgLmR1cmF0aW9uKG9wdGlvbnMuYW5pbWF0aW9uRHVyYXRpb24pXG4gICAgICAuZWFzZShlYXNpbmcpXG4gICAgICAuYXR0cigneCcsIChkOiBhbnkpID0+IHhTY2FsZShkLngudG9TdHJpbmcoKSkpXG4gICAgICAuYXR0cigneScsIChkOiBhbnkpID0+IHlTY2FsZShkLnkudG9TdHJpbmcoKSkpXG4gICAgICAuYXR0cignd2lkdGgnLCB4U2NhbGUuYmFuZHdpZHRoKCkpXG4gICAgICAuYXR0cignaGVpZ2h0JywgeVNjYWxlLmJhbmR3aWR0aCgpKVxuICAgICAgLmF0dHIoJ3J4Jywgb3B0aW9ucy5ib3JkZXJSYWRpdXMpXG4gICAgICAuYXR0cigncnknLCBvcHRpb25zLmJvcmRlclJhZGl1cylcbiAgICAgIC5hdHRyKCdvcGFjaXR5JywgMSlcbiAgICAgIC5zdHlsZSgnZmlsbCcsIChkOiBhbnkpID0+IGNvbG9yU2NhbGUoZC52YWx1ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBkcmF3QXhpcyhnOiBhbnksIGNsYXNzTmFtZTogc3RyaW5nLCBheGlzRm46IGFueSwgeDogbnVtYmVyLCB5OiBudW1iZXIsIHZpc2libGUgPSB0cnVlKSB7XG4gICAgbGV0IGF4aXNHID0gZy5zZWxlY3QoYC4ke2NsYXNzTmFtZX1gKTtcbiAgICBpZiAoYXhpc0cuZW1wdHkoKSkgYXhpc0cgPSBnLmFwcGVuZCgnZycpLmF0dHIoJ2NsYXNzJywgY2xhc3NOYW1lKTtcblxuICAgIGF4aXNHXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgke3h9LCR7eX0pYClcbiAgICAgIC5zdHlsZSgnZGlzcGxheScsIHZpc2libGUgPyAnYmxvY2snIDogJ25vbmUnKVxuICAgICAgLmNhbGwoYXhpc0ZuKVxuICAgICAgLmNhbGwoKGc6IGFueSkgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5yZW1vdmUoKSk7XG4gIH1cblxuICBwcml2YXRlIHNob3dUb29sdGlwKGV2ZW50OiBNb3VzZUV2ZW50LCBpdGVtOiBBWEhlYXRtYXBEYXRhLCBjb2xvcjogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKS5zaG93VG9vbHRpcCkgcmV0dXJuO1xuICAgIHRoaXMudG9vbHRpcERhdGEuc2V0KHtcbiAgICAgIHRpdGxlOiBgJHtpdGVtLnh9IC8gJHtpdGVtLnl9YCxcbiAgICAgIHZhbHVlOiBpdGVtLmxhYmVsIHx8IGl0ZW0udmFsdWUudG9Mb2NhbGVTdHJpbmcoKSxcbiAgICAgIGNvbG9yOiBjb2xvcixcbiAgICB9KTtcbiAgICB0aGlzLnRvb2x0aXBWaXNpYmxlLnNldCh0cnVlKTtcbiAgICB0aGlzLnVwZGF0ZVRvb2x0aXBQb3MoZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVUb29sdGlwUG9zKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb250YWluZXJSZWYoKS5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgcG9zID0gY29tcHV0ZVRvb2x0aXBQb3NpdGlvbihyZWN0LCBudWxsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZLCAxNSk7XG4gICAgdGhpcy50b29sdGlwUG9zaXRpb24uc2V0KHBvcyk7XG4gIH1cblxuICBwcml2YXRlIGhpZGVUb29sdGlwKCkge1xuICAgIHRoaXMudG9vbHRpcFZpc2libGUuc2V0KGZhbHNlKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLnN2Zz8ucmVtb3ZlKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJheC1oZWF0bWFwLWNoYXJ0LWNvbnRhaW5lclwiIHJvbGU9XCJpbWdcIiAjY2hhcnRDb250YWluZXI+XG4gIEBpZiAoZGF0YSgpPy5sZW5ndGggPT09IDApIHtcbiAgICA8ZGl2IGNsYXNzPVwiYXgtaGVhdG1hcC1uby1kYXRhXCI+XG4gICAgICA8aSBbY2xhc3NdPVwiZWZmZWN0aXZlT3B0aW9ucygpLm1lc3NhZ2VzPy5ub0RhdGFJY29uXCI+PC9pPlxuICAgICAgPHAgY2xhc3M9XCJheC1oZWF0bWFwLW5vLWRhdGEtdGV4dFwiPnt7IGVmZmVjdGl2ZU9wdGlvbnMoKS5tZXNzYWdlcz8ubm9EYXRhIH19PC9wPlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cblxuPGF4LWNoYXJ0LXRvb2x0aXAgW2RhdGFdPVwidG9vbHRpcERhdGEoKVwiIFtwb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb24oKVwiIFt2aXNpYmxlXT1cInRvb2x0aXBWaXNpYmxlKClcIj5cbjwvYXgtY2hhcnQtdG9vbHRpcD5cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNoYXJ0cy1oZWF0bWFwLWNoYXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2hhcnRzL2hlYXRtYXAtY2hhcnQvc3JjL2Fjb3JleC1jaGFydHMtaGVhdG1hcC1jaGFydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-charts-heatmap-chart.mjs","sources":["../tmp-esm2022/heatmap-chart/lib/heatmap-chart.config.js","../tmp-esm2022/heatmap-chart/lib/heatmap-chart.component.js","../tmp-esm2022/heatmap-chart/acorex-charts-heatmap-chart.js"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nexport const AXHeatmapChartDefaultConfig = {\n margin: { top: 30, right: 30, bottom: 60, left: 60 },\n startColor: 'rgb(var(--ax-sys-color-primary-50))',\n endColor: 'rgb(var(--ax-sys-color-primary-950))',\n cellPadding: 0.05,\n borderRadius: 2,\n showXAxis: true,\n showYAxis: true,\n showTooltip: true,\n animationDuration: 800,\n animationEasing: 'cubic-out',\n messages: {\n noData: 'No data available',\n noDataHelp: 'Provide X, Y, and Value data to render the heatmap',\n noDataIcon: 'fa-light fa-grid-2',\n },\n};\nexport const AX_HEATMAP_CHART_CONFIG = new InjectionToken('AX_HEATMAP_CHART_CONFIG', {\n providedIn: 'root',\n factory: () => AXHeatmapChartDefaultConfig,\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhdG1hcC1jaGFydC5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jaGFydHMvaGVhdG1hcC1jaGFydC9zcmMvbGliL2hlYXRtYXAtY2hhcnQuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0MsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQXlCO0lBQy9ELE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7SUFDcEQsVUFBVSxFQUFFLHFDQUFxQztJQUNqRCxRQUFRLEVBQUUsc0NBQXNDO0lBQ2hELFdBQVcsRUFBRSxJQUFJO0lBQ2pCLFlBQVksRUFBRSxDQUFDO0lBQ2YsU0FBUyxFQUFFLElBQUk7SUFDZixTQUFTLEVBQUUsSUFBSTtJQUNmLFdBQVcsRUFBRSxJQUFJO0lBQ2pCLGlCQUFpQixFQUFFLEdBQUc7SUFDdEIsZUFBZSxFQUFFLFdBQVc7SUFDNUIsUUFBUSxFQUFFO1FBQ1IsTUFBTSxFQUFFLG1CQUFtQjtRQUMzQixVQUFVLEVBQUUsb0RBQW9EO1FBQ2hFLFVBQVUsRUFBRSxvQkFBb0I7S0FDakM7Q0FDRixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxjQUFjLENBQXVCLHlCQUF5QixFQUFFO0lBQ3pHLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQywyQkFBMkI7Q0FDM0MsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYSGVhdG1hcENoYXJ0T3B0aW9uIH0gZnJvbSAnLi9oZWF0bWFwLWNoYXJ0LnR5cGUnO1xuXG5leHBvcnQgY29uc3QgQVhIZWF0bWFwQ2hhcnREZWZhdWx0Q29uZmlnOiBBWEhlYXRtYXBDaGFydE9wdGlvbiA9IHtcbiAgbWFyZ2luOiB7IHRvcDogMzAsIHJpZ2h0OiAzMCwgYm90dG9tOiA2MCwgbGVmdDogNjAgfSxcbiAgc3RhcnRDb2xvcjogJ3JnYih2YXIoLS1heC1zeXMtY29sb3ItcHJpbWFyeS01MCkpJyxcbiAgZW5kQ29sb3I6ICdyZ2IodmFyKC0tYXgtc3lzLWNvbG9yLXByaW1hcnktOTUwKSknLFxuICBjZWxsUGFkZGluZzogMC4wNSxcbiAgYm9yZGVyUmFkaXVzOiAyLFxuICBzaG93WEF4aXM6IHRydWUsXG4gIHNob3dZQXhpczogdHJ1ZSxcbiAgc2hvd1Rvb2x0aXA6IHRydWUsXG4gIGFuaW1hdGlvbkR1cmF0aW9uOiA4MDAsXG4gIGFuaW1hdGlvbkVhc2luZzogJ2N1YmljLW91dCcsXG4gIG1lc3NhZ2VzOiB7XG4gICAgbm9EYXRhOiAnTm8gZGF0YSBhdmFpbGFibGUnLFxuICAgIG5vRGF0YUhlbHA6ICdQcm92aWRlIFgsIFksIGFuZCBWYWx1ZSBkYXRhIHRvIHJlbmRlciB0aGUgaGVhdG1hcCcsXG4gICAgbm9EYXRhSWNvbjogJ2ZhLWxpZ2h0IGZhLWdyaWQtMicsXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgQVhfSEVBVE1BUF9DSEFSVF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48QVhIZWF0bWFwQ2hhcnRPcHRpb24+KCdBWF9IRUFUTUFQX0NIQVJUX0NPTkZJRycsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiAoKSA9PiBBWEhlYXRtYXBDaGFydERlZmF1bHRDb25maWcsXG59KTtcbiJdfQ==","import { AXChartComponent, computeTooltipPosition, getEasingFunction } from '@acorex/charts';\nimport { AXChartTooltipComponent } from '@acorex/charts/chart-tooltip';\nimport { AXPlatform } from '@acorex/core/platform';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, afterNextRender, computed, effect, inject, input, output, signal, viewChild, } from '@angular/core';\nimport { map } from 'rxjs';\nimport { AX_HEATMAP_CHART_CONFIG } from './heatmap-chart.config';\nimport * as i0 from \"@angular/core\";\nexport class AXHeatmapChartComponent extends AXChartComponent {\n // Inject config at the top level\n defaultConfig = inject(AX_HEATMAP_CHART_CONFIG);\n // Inputs\n data = input([], ...(ngDevMode ? [{ debugName: \"data\" }] : []));\n options = input({}, ...(ngDevMode ? [{ debugName: \"options\" }] : []));\n // Outputs\n /** Emitted when a heatmap cell is clicked */\n cellClick = output();\n // View Child\n containerRef = viewChild.required('chartContainer');\n // Internal State\n svg;\n d3;\n _d3Ready = signal(false, ...(ngDevMode ? [{ debugName: \"_d3Ready\" }] : []));\n platformService = inject(AXPlatform);\n isRtl = signal(this.platformService.isRtl(), ...(ngDevMode ? [{ debugName: \"isRtl\" }] : []));\n directionSub;\n // Tooltip State\n tooltipVisible = signal(false, ...(ngDevMode ? [{ debugName: \"tooltipVisible\" }] : []));\n tooltipPosition = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: \"tooltipPosition\" }] : []));\n tooltipData = signal({ title: '', value: '' }, ...(ngDevMode ? [{ debugName: \"tooltipData\" }] : []));\n _tooltipRafId = null;\n // Computed options (referencing the already injected defaultConfig)\n effectiveOptions = computed(() => ({\n ...this.defaultConfig,\n ...this.options(),\n }), ...(ngDevMode ? [{ debugName: \"effectiveOptions\" }] : []));\n constructor() {\n super();\n // Initialize D3 and ResizeObserver\n afterNextRender(() => {\n this.init();\n this.directionSub = this.platformService.directionChange\n .pipe(map((i) => i.data === 'rtl'))\n .subscribe((isRtl) => {\n this.isRtl.set(isRtl);\n if (this._d3Ready()) {\n this.renderChart();\n }\n });\n });\n // Reactive Render when data or D3 is ready\n effect(() => {\n if (this._d3Ready()) {\n this.renderChart();\n }\n });\n }\n async init() {\n try {\n this.d3 = await import('d3');\n this._d3Ready.set(true);\n }\n catch (err) {\n console.error('Heatmap: Initialization failed', err);\n }\n }\n renderChart() {\n const container = this.containerRef().nativeElement;\n const data = this.data() || [];\n if (!container || container.clientWidth === 0 || container.clientHeight === 0)\n return;\n // Clear SVG if data is empty\n if (data.length === 0) {\n if (this.svg)\n this.svg.remove();\n this.svg = null;\n return;\n }\n const options = this.effectiveOptions();\n const width = container.clientWidth;\n const height = container.clientHeight;\n const isRtl = this.isRtl();\n const baseMargin = options.margin || { top: 20, right: 20, bottom: 40, left: 40 };\n // When rendering RTL, the Y axis is on the right; swap side margins so tick labels\n // have the same breathing room they get on the left in LTR.\n const margin = isRtl\n ? { top: baseMargin.top, right: baseMargin.left, bottom: baseMargin.bottom, left: baseMargin.right }\n : baseMargin;\n const innerWidth = width - margin.left - margin.right;\n const innerHeight = height - margin.top - margin.bottom;\n // Create/Select SVG root\n if (!this.svg) {\n this.svg = this.d3.select(container).append('svg').attr('style', 'width: 100%; height: 100%; display: block;');\n this.svg.append('g').attr('class', 'chart-group');\n }\n this.svg.attr('viewBox', `0 0 ${width} ${height}`);\n const g = this.svg.select('.chart-group').attr('transform', `translate(${margin.left},${margin.top})`);\n // --- Scales ---\n const xKeys = Array.from(new Set(data.map((d) => d.x.toString())));\n const yKeys = Array.from(new Set(data.map((d) => d.y.toString())));\n const xScale = this.d3\n .scaleBand()\n .domain(xKeys)\n .range(isRtl ? [innerWidth, 0] : [0, innerWidth])\n .padding(options.cellPadding);\n const yScale = this.d3.scaleBand().domain(yKeys).range([innerHeight, 0]).padding(options.cellPadding);\n const valueExtent = this.d3.extent(data, (d) => d.value);\n const minValue = Number.isFinite(valueExtent[0]) ? valueExtent[0] : 0;\n const maxValue = Number.isFinite(valueExtent[1]) ? valueExtent[1] : minValue + 1;\n const palette = options.colors?.filter(Boolean) ?? [];\n const startColor = options.startColor ?? palette[0] ?? '#ebedf0';\n const endColor = options.endColor ?? palette[palette.length - 1] ?? '#216e39';\n const resolvedStartColor = this.resolveCssColor(startColor);\n const resolvedEndColor = this.resolveCssColor(endColor);\n const getCellColor = (d) => {\n // If a palette is provided, choose a stable \"random\" color per cell.\n if (palette.length > 0) {\n const key = `${d.x}-${d.y}`;\n const idx = this.hashStringToUint32(key) % palette.length;\n return palette[idx] ?? startColor;\n }\n // Otherwise compute a gradient color based on value.\n const range = maxValue - minValue;\n const t = range === 0 ? 1 : (d.value - minValue) / range;\n const clamped = Math.max(0, Math.min(1, t));\n return this.d3.interpolateRgb(resolvedStartColor, resolvedEndColor)(clamped);\n };\n // --- Axes ---\n this.drawAxis(g, 'x-axis', this.d3.axisBottom(xScale).tickSize(0), 0, innerHeight, options.showXAxis, isRtl);\n if (isRtl) {\n this.drawAxis(g, 'y-axis', this.d3.axisRight(yScale).tickSize(0), innerWidth, 0, options.showYAxis, isRtl);\n }\n else {\n this.drawAxis(g, 'y-axis', this.d3.axisLeft(yScale).tickSize(0), 0, 0, options.showYAxis, isRtl);\n }\n this.drawAxisLabels(g, innerWidth, innerHeight, options, isRtl);\n // --- Cells with Data Join ---\n const easing = getEasingFunction(this.d3, options.animationEasing);\n g.selectAll('.cell')\n .data(data, (d) => `${d.x}-${d.y}`)\n .join((enter) => enter.append('rect').attr('class', 'cell').attr('opacity', 0).attr('fill', startColor), (update) => update, (exit) => exit.transition().duration(200).attr('opacity', 0).remove())\n .on('mouseenter', (event, d) => this.showTooltip(event, d, getCellColor(d)))\n .on('mousemove', (event) => this.updateTooltipPos(event))\n .on('click', (_event, d) => this.cellClick.emit(d))\n .on('mouseleave', () => this.hideTooltip())\n .transition()\n .duration(options.animationDuration)\n .ease(easing)\n .attr('x', (d) => xScale(d.x.toString()))\n .attr('y', (d) => yScale(d.y.toString()))\n .attr('width', xScale.bandwidth())\n .attr('height', yScale.bandwidth())\n .attr('rx', options.borderRadius)\n .attr('ry', options.borderRadius)\n .attr('opacity', 1)\n .style('fill', (d) => getCellColor(d));\n }\n hashStringToUint32(input) {\n // Simple, fast, deterministic hash (djb2 variant)\n let hash = 5381;\n for (let i = 0; i < input.length; i++) {\n hash = (hash * 33) ^ input.charCodeAt(i);\n }\n return hash >>> 0;\n }\n resolveCssColor(color) {\n const container = this.containerRef().nativeElement;\n const probe = document.createElement('span');\n probe.style.color = color;\n probe.style.position = 'absolute';\n probe.style.left = '-9999px';\n probe.style.top = '-9999px';\n container.appendChild(probe);\n const computed = getComputedStyle(probe).color;\n probe.remove();\n return computed || color;\n }\n drawAxis(g, className, axisFn, x, y, visible = true, isRtl = false) {\n let axisG = g.select(`.${className}`);\n if (axisG.empty())\n axisG = g.append('g').attr('class', className);\n axisG\n .attr('transform', `translate(${x},${y})`)\n .style('display', visible ? 'block' : 'none')\n .call(axisFn)\n .call((g) => g.select('.domain').remove());\n // Ensure tick labels don't overlap the plot in RTL.\n // `text-anchor` is logical (depends on `direction`), so we set both explicitly.\n axisG.attr('direction', isRtl ? 'rtl' : 'ltr');\n if (className === 'y-axis') {\n axisG.selectAll('.tick text').attr('text-anchor', 'end');\n }\n }\n showTooltip(event, item, color) {\n if (!this.effectiveOptions().showTooltip)\n return;\n this.tooltipData.set({\n title: `${item.x} / ${item.y}`,\n value: item.label || item.value.toLocaleString(),\n color: color,\n });\n this.tooltipVisible.set(true);\n this.updateTooltipPos(event);\n }\n updateTooltipPos(event) {\n if (this._tooltipRafId)\n cancelAnimationFrame(this._tooltipRafId);\n this._tooltipRafId = requestAnimationFrame(() => {\n const containerEl = this.containerRef().nativeElement;\n const rect = containerEl.getBoundingClientRect();\n const tooltipEl = containerEl.querySelector('.chart-tooltip');\n const tooltipRect = tooltipEl?.getBoundingClientRect() ?? null;\n const pos = computeTooltipPosition(rect, tooltipRect, event.clientX + 10, event.clientY - 10, 10);\n this.tooltipPosition.set(pos);\n });\n }\n hideTooltip() {\n this.tooltipVisible.set(false);\n }\n ngOnDestroy() {\n this.directionSub?.unsubscribe();\n this.svg?.remove();\n if (this._tooltipRafId)\n cancelAnimationFrame(this._tooltipRafId);\n }\n drawAxisLabels(g, innerWidth, innerHeight, options, isRtl) {\n const xText = options.xAxisLabel?.trim();\n const yText = options.yAxisLabel?.trim();\n const labels = g.selectAll('.axis-labels').data([0]).join('g').attr('class', 'axis-labels');\n labels\n .selectAll('.axis-label-x')\n .data(xText ? [xText] : [])\n .join((enter) => enter.append('text').attr('class', 'axis-label axis-label-x'), (update) => update, (exit) => exit.remove())\n .attr('x', innerWidth / 2)\n .attr('y', innerHeight + 44)\n .attr('text-anchor', 'middle')\n .text((d) => d);\n const yX = isRtl ? innerWidth + 46 : -46;\n labels\n .selectAll('.axis-label-y')\n .data(yText ? [yText] : [])\n .join((enter) => enter.append('text').attr('class', 'axis-label axis-label-y'), (update) => update, (exit) => exit.remove())\n .attr('transform', `translate(${yX}, ${innerHeight / 2}) rotate(-90)`)\n .attr('text-anchor', 'middle')\n .text((d) => d);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXHeatmapChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.3\", type: AXHeatmapChartComponent, isStandalone: true, selector: \"ax-heatmap-chart\", inputs: { data: { classPropertyName: \"data\", publicName: \"data\", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: \"options\", publicName: \"options\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { cellClick: \"cellClick\" }, viewQueries: [{ propertyName: \"containerRef\", first: true, predicate: [\"chartContainer\"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-heatmap-chart-container\\\" role=\\\"img\\\" #chartContainer>\\n @if (data()?.length === 0) {\\n <div class=\\\"ax-heatmap-no-data\\\">\\n <i [class]=\\\"effectiveOptions().messages?.noDataIcon\\\"></i>\\n <p class=\\\"ax-heatmap-no-data-text\\\">{{ effectiveOptions().messages?.noData }}</p>\\n </div>\\n }\\n</div>\\n\\n<ax-chart-tooltip [data]=\\\"tooltipData()\\\" [position]=\\\"tooltipPosition()\\\" [visible]=\\\"tooltipVisible()\\\">\\n</ax-chart-tooltip>\\n\", styles: [\"ax-heatmap-chart{display:block;width:100%;height:100%;min-height:300px;--ax-comp-heatmap-chart-bg-color: transparent;--ax-comp-heatmap-chart-text-color: var(--ax-sys-color-on-surface-variant, 28, 27, 31);--ax-comp-heatmap-chart-axis-color: var(--ax-sys-color-outline-variant, 202, 196, 208)}ax-heatmap-chart .ax-heatmap-chart-container{position:relative;width:100%;height:100%;box-sizing:border-box;padding:1rem;overflow:hidden;background-color:var(--ax-comp-heatmap-chart-bg-color)}ax-heatmap-chart .ax-heatmap-chart-container svg{display:block;width:100%;height:100%;overflow:visible}ax-heatmap-chart .ax-heatmap-chart-container svg .cell{transition:stroke .15s ease}ax-heatmap-chart .ax-heatmap-chart-container svg .cell:hover{stroke:rgba(var(--ax-comp-heatmap-chart-text-color),.6);stroke-width:2px}ax-heatmap-chart .ax-heatmap-chart-container svg .axis-label{font-size:12px;font-weight:600;fill:rgb(var(--ax-comp-heatmap-chart-text-color))}ax-heatmap-chart .ax-heatmap-chart-container svg .tick text{font-size:11px;fill:rgba(var(--ax-comp-heatmap-chart-text-color),.7)}ax-heatmap-chart .ax-heatmap-chart-container svg line,ax-heatmap-chart .ax-heatmap-chart-container svg .domain{stroke:rgba(var(--ax-comp-heatmap-chart-axis-color),.5)}ax-heatmap-chart .ax-heatmap-no-data{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;text-align:center;color:rgba(var(--ax-comp-heatmap-chart-text-color),.6)}ax-heatmap-chart .ax-heatmap-no-data i{font-size:2rem;margin-bottom:.5rem}\\n\"], dependencies: [{ kind: \"component\", type: AXChartTooltipComponent, selector: \"ax-chart-tooltip\", inputs: [\"data\", \"position\", \"visible\", \"showPercentage\", \"style\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXHeatmapChartComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-heatmap-chart', encapsulation: ViewEncapsulation.None, imports: [AXChartTooltipComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: \"<div class=\\\"ax-heatmap-chart-container\\\" role=\\\"img\\\" #chartContainer>\\n @if (data()?.length === 0) {\\n <div class=\\\"ax-heatmap-no-data\\\">\\n <i [class]=\\\"effectiveOptions().messages?.noDataIcon\\\"></i>\\n <p class=\\\"ax-heatmap-no-data-text\\\">{{ effectiveOptions().messages?.noData }}</p>\\n </div>\\n }\\n</div>\\n\\n<ax-chart-tooltip [data]=\\\"tooltipData()\\\" [position]=\\\"tooltipPosition()\\\" [visible]=\\\"tooltipVisible()\\\">\\n</ax-chart-tooltip>\\n\", styles: [\"ax-heatmap-chart{display:block;width:100%;height:100%;min-height:300px;--ax-comp-heatmap-chart-bg-color: transparent;--ax-comp-heatmap-chart-text-color: var(--ax-sys-color-on-surface-variant, 28, 27, 31);--ax-comp-heatmap-chart-axis-color: var(--ax-sys-color-outline-variant, 202, 196, 208)}ax-heatmap-chart .ax-heatmap-chart-container{position:relative;width:100%;height:100%;box-sizing:border-box;padding:1rem;overflow:hidden;background-color:var(--ax-comp-heatmap-chart-bg-color)}ax-heatmap-chart .ax-heatmap-chart-container svg{display:block;width:100%;height:100%;overflow:visible}ax-heatmap-chart .ax-heatmap-chart-container svg .cell{transition:stroke .15s ease}ax-heatmap-chart .ax-heatmap-chart-container svg .cell:hover{stroke:rgba(var(--ax-comp-heatmap-chart-text-color),.6);stroke-width:2px}ax-heatmap-chart .ax-heatmap-chart-container svg .axis-label{font-size:12px;font-weight:600;fill:rgb(var(--ax-comp-heatmap-chart-text-color))}ax-heatmap-chart .ax-heatmap-chart-container svg .tick text{font-size:11px;fill:rgba(var(--ax-comp-heatmap-chart-text-color),.7)}ax-heatmap-chart .ax-heatmap-chart-container svg line,ax-heatmap-chart .ax-heatmap-chart-container svg .domain{stroke:rgba(var(--ax-comp-heatmap-chart-axis-color),.5)}ax-heatmap-chart .ax-heatmap-no-data{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;text-align:center;color:rgba(var(--ax-comp-heatmap-chart-text-color),.6)}ax-heatmap-chart .ax-heatmap-no-data i{font-size:2rem;margin-bottom:.5rem}\\n\"] }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhdG1hcC1jaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jaGFydHMvaGVhdG1hcC1jaGFydC9zcmMvbGliL2hlYXRtYXAtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2hhcnRzL2hlYXRtYXAtY2hhcnQvc3JjL2xpYi9oZWF0bWFwLWNoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxzQkFBc0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdGLE9BQU8sRUFBRSx1QkFBdUIsRUFBc0IsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBR1QsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEdBQUcsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBV2pFLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxnQkFBZ0I7SUFDM0QsaUNBQWlDO0lBQ2hCLGFBQWEsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUVqRSxTQUFTO0lBQ1QsSUFBSSxHQUFHLEtBQUssQ0FBa0IsRUFBRSxnREFBQyxDQUFDO0lBQ2xDLE9BQU8sR0FBRyxLQUFLLENBQXVCLEVBQUUsbURBQUMsQ0FBQztJQUUxQyxVQUFVO0lBQ1YsNkNBQTZDO0lBQzdDLFNBQVMsR0FBRyxNQUFNLEVBQWlC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aUJBR2IsaUJBQWlCLENBQUMsSUFBSSxXQUM1QixDQUFDLHVCQUF1QixDQUFDLG1CQUNqQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhDaGFydENvbXBvbmVudCwgY29tcHV0ZVRvb2x0aXBQb3NpdGlvbiwgZ2V0RWFzaW5nRnVuY3Rpb24gfSBmcm9tICdAYWNvcmV4L2NoYXJ0cyc7XG5pbXBvcnQgeyBBWENoYXJ0VG9vbHRpcENvbXBvbmVudCwgQVhDaGFydFRvb2x0aXBEYXRhIH0gZnJvbSAnQGFjb3JleC9jaGFydHMvY2hhcnQtdG9vbHRpcCc7XG5pbXBvcnQgeyBBWFBsYXRmb3JtIH0gZnJvbSAnQGFjb3JleC9jb3JlL3BsYXRmb3JtJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIE9uRGVzdHJveSxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGFmdGVyTmV4dFJlbmRlcixcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBtYXAsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQVhfSEVBVE1BUF9DSEFSVF9DT05GSUcgfSBmcm9tICcuL2hlYXRtYXAtY2hhcnQuY29uZmlnJztcbmltcG9ydCB7IEFYSGVhdG1hcENoYXJ0T3B0aW9uLCBBWEhlYXRtYXBEYXRhIH0gZnJvbSAnLi9oZWF0bWFwLWNoYXJ0LnR5cGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC1oZWF0bWFwLWNoYXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2hlYXRtYXAtY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9oZWF0bWFwLWNoYXJ0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGltcG9ydHM6IFtBWENoYXJ0VG9vbHRpcENvbXBvbmVudF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBWEhlYXRtYXBDaGFydENvbXBvbmVudCBleHRlbmRzIEFYQ2hhcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAvLyBJbmplY3QgY29uZmlnIGF0IHRoZSB0b3AgbGV2ZWxcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0Q29uZmlnID0gaW5qZWN0KEFYX0hFQVRNQVBfQ0hBUlRfQ09ORklHKTtcblxuICAvLyBJbnB1dHNcbiAgZGF0YSA9IGlucHV0PEFYSGVhdG1hcERhdGFbXT4oW10pO1xuICBvcHRpb25zID0gaW5wdXQ8QVhIZWF0bWFwQ2hhcnRPcHRpb24+KHt9KTtcblxuICAvLyBPdXRwdXRzXG4gIC8qKiBFbWl0dGVkIHdoZW4gYSBoZWF0bWFwIGNlbGwgaXMgY2xpY2tlZCAqL1xuICBjZWxsQ2xpY2sgPSBvdXRwdXQ8QVhIZWF0bWFwRGF0YT4oKTtcblxuICAvLyBWaWV3IENoaWxkXG4gIHByaXZhdGUgcmVhZG9ubHkgY29udGFpbmVyUmVmID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+PignY2hhcnRDb250YWluZXInKTtcblxuICAvLyBJbnRlcm5hbCBTdGF0ZVxuICBwcml2YXRlIHN2ZzogYW55O1xuICBwcm90ZWN0ZWQgZDM6IGFueTtcbiAgcHJpdmF0ZSBfZDNSZWFkeSA9IHNpZ25hbChmYWxzZSk7XG4gIHByaXZhdGUgcGxhdGZvcm1TZXJ2aWNlID0gaW5qZWN0KEFYUGxhdGZvcm0pO1xuICBwcm90ZWN0ZWQgaXNSdGwgPSBzaWduYWwodGhpcy5wbGF0Zm9ybVNlcnZpY2UuaXNSdGwoKSk7XG4gIHByaXZhdGUgZGlyZWN0aW9uU3ViPzogU3Vic2NyaXB0aW9uO1xuXG4gIC8vIFRvb2x0aXAgU3RhdGVcbiAgcHJvdGVjdGVkIHRvb2x0aXBWaXNpYmxlID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIHRvb2x0aXBQb3NpdGlvbiA9IHNpZ25hbCh7IHg6IDAsIHk6IDAgfSk7XG4gIHByb3RlY3RlZCB0b29sdGlwRGF0YSA9IHNpZ25hbDxBWENoYXJ0VG9vbHRpcERhdGE+KHsgdGl0bGU6ICcnLCB2YWx1ZTogJycgfSk7XG4gIHByaXZhdGUgX3Rvb2x0aXBSYWZJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gQ29tcHV0ZWQgb3B0aW9ucyAocmVmZXJlbmNpbmcgdGhlIGFscmVhZHkgaW5qZWN0ZWQgZGVmYXVsdENvbmZpZylcbiAgcHJvdGVjdGVkIGVmZmVjdGl2ZU9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiAoe1xuICAgIC4uLnRoaXMuZGVmYXVsdENvbmZpZyxcbiAgICAuLi50aGlzLm9wdGlvbnMoKSxcbiAgfSkpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICAvLyBJbml0aWFsaXplIEQzIGFuZCBSZXNpemVPYnNlcnZlclxuICAgIGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG4gICAgICB0aGlzLmluaXQoKTtcbiAgICAgIHRoaXMuZGlyZWN0aW9uU3ViID0gdGhpcy5wbGF0Zm9ybVNlcnZpY2UuZGlyZWN0aW9uQ2hhbmdlXG4gICAgICAgIC5waXBlKG1hcCgoaSkgPT4gaS5kYXRhID09PSAncnRsJykpXG4gICAgICAgIC5zdWJzY3JpYmUoKGlzUnRsKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1J0bC5zZXQoaXNSdGwpO1xuICAgICAgICAgIGlmICh0aGlzLl9kM1JlYWR5KCkpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ2hhcnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gUmVhY3RpdmUgUmVuZGVyIHdoZW4gZGF0YSBvciBEMyBpcyByZWFkeVxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fZDNSZWFkeSgpKSB7XG4gICAgICAgIHRoaXMucmVuZGVyQ2hhcnQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW5pdCgpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5kMyA9IGF3YWl0IGltcG9ydCgnZDMnKTtcblxuICAgICAgdGhpcy5fZDNSZWFkeS5zZXQodHJ1ZSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdIZWF0bWFwOiBJbml0aWFsaXphdGlvbiBmYWlsZWQnLCBlcnIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQ2hhcnQoKSB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb250YWluZXJSZWYoKS5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGEoKSB8fCBbXTtcblxuICAgIGlmICghY29udGFpbmVyIHx8IGNvbnRhaW5lci5jbGllbnRXaWR0aCA9PT0gMCB8fCBjb250YWluZXIuY2xpZW50SGVpZ2h0ID09PSAwKSByZXR1cm47XG5cbiAgICAvLyBDbGVhciBTVkcgaWYgZGF0YSBpcyBlbXB0eVxuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaWYgKHRoaXMuc3ZnKSB0aGlzLnN2Zy5yZW1vdmUoKTtcbiAgICAgIHRoaXMuc3ZnID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5lZmZlY3RpdmVPcHRpb25zKCk7XG4gICAgY29uc3Qgd2lkdGggPSBjb250YWluZXIuY2xpZW50V2lkdGg7XG4gICAgY29uc3QgaGVpZ2h0ID0gY29udGFpbmVyLmNsaWVudEhlaWdodDtcbiAgICBjb25zdCBpc1J0bCA9IHRoaXMuaXNSdGwoKTtcbiAgICBjb25zdCBiYXNlTWFyZ2luID0gb3B0aW9ucy5tYXJnaW4gfHwgeyB0b3A6IDIwLCByaWdodDogMjAsIGJvdHRvbTogNDAsIGxlZnQ6IDQwIH07XG4gICAgLy8gV2hlbiByZW5kZXJpbmcgUlRMLCB0aGUgWSBheGlzIGlzIG9uIHRoZSByaWdodDsgc3dhcCBzaWRlIG1hcmdpbnMgc28gdGljayBsYWJlbHNcbiAgICAvLyBoYXZlIHRoZSBzYW1lIGJyZWF0aGluZyByb29tIHRoZXkgZ2V0IG9uIHRoZSBsZWZ0IGluIExUUi5cbiAgICBjb25zdCBtYXJnaW4gPSBpc1J0bFxuICAgICAgPyB7IHRvcDogYmFzZU1hcmdpbi50b3AsIHJpZ2h0OiBiYXNlTWFyZ2luLmxlZnQsIGJvdHRvbTogYmFzZU1hcmdpbi5ib3R0b20sIGxlZnQ6IGJhc2VNYXJnaW4ucmlnaHQgfVxuICAgICAgOiBiYXNlTWFyZ2luO1xuXG4gICAgY29uc3QgaW5uZXJXaWR0aCA9IHdpZHRoIC0gbWFyZ2luLmxlZnQgLSBtYXJnaW4ucmlnaHQ7XG4gICAgY29uc3QgaW5uZXJIZWlnaHQgPSBoZWlnaHQgLSBtYXJnaW4udG9wIC0gbWFyZ2luLmJvdHRvbTtcblxuICAgIC8vIENyZWF0ZS9TZWxlY3QgU1ZHIHJvb3RcbiAgICBpZiAoIXRoaXMuc3ZnKSB7XG4gICAgICB0aGlzLnN2ZyA9IHRoaXMuZDMuc2VsZWN0KGNvbnRhaW5lcikuYXBwZW5kKCdzdmcnKS5hdHRyKCdzdHlsZScsICd3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyBkaXNwbGF5OiBibG9jazsnKTtcbiAgICAgIHRoaXMuc3ZnLmFwcGVuZCgnZycpLmF0dHIoJ2NsYXNzJywgJ2NoYXJ0LWdyb3VwJyk7XG4gICAgfVxuXG4gICAgdGhpcy5zdmcuYXR0cigndmlld0JveCcsIGAwIDAgJHt3aWR0aH0gJHtoZWlnaHR9YCk7XG4gICAgY29uc3QgZyA9IHRoaXMuc3ZnLnNlbGVjdCgnLmNoYXJ0LWdyb3VwJykuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgke21hcmdpbi5sZWZ0fSwke21hcmdpbi50b3B9KWApO1xuXG4gICAgLy8gLS0tIFNjYWxlcyAtLS1cbiAgICBjb25zdCB4S2V5cyA9IEFycmF5LmZyb20obmV3IFNldChkYXRhLm1hcCgoZCkgPT4gZC54LnRvU3RyaW5nKCkpKSk7XG4gICAgY29uc3QgeUtleXMgPSBBcnJheS5mcm9tKG5ldyBTZXQoZGF0YS5tYXAoKGQpID0+IGQueS50b1N0cmluZygpKSkpO1xuXG4gICAgY29uc3QgeFNjYWxlID0gdGhpcy5kM1xuICAgICAgLnNjYWxlQmFuZCgpXG4gICAgICAuZG9tYWluKHhLZXlzKVxuICAgICAgLnJhbmdlKGlzUnRsID8gW2lubmVyV2lkdGgsIDBdIDogWzAsIGlubmVyV2lkdGhdKVxuICAgICAgLnBhZGRpbmcob3B0aW9ucy5jZWxsUGFkZGluZyk7XG4gICAgY29uc3QgeVNjYWxlID0gdGhpcy5kMy5zY2FsZUJhbmQoKS5kb21haW4oeUtleXMpLnJhbmdlKFtpbm5lckhlaWdodCwgMF0pLnBhZGRpbmcob3B0aW9ucy5jZWxsUGFkZGluZyk7XG5cbiAgICBjb25zdCB2YWx1ZUV4dGVudCA9IHRoaXMuZDMuZXh0ZW50KGRhdGEsIChkOiBhbnkpID0+IGQudmFsdWUpIGFzIFtudW1iZXIsIG51bWJlcl07XG4gICAgY29uc3QgbWluVmFsdWUgPSBOdW1iZXIuaXNGaW5pdGUodmFsdWVFeHRlbnRbMF0pID8gdmFsdWVFeHRlbnRbMF0gOiAwO1xuICAgIGNvbnN0IG1heFZhbHVlID0gTnVtYmVyLmlzRmluaXRlKHZhbHVlRXh0ZW50WzFdKSA/IHZhbHVlRXh0ZW50WzFdIDogbWluVmFsdWUgKyAxO1xuICAgIGNvbnN0IHBhbGV0dGUgPSBvcHRpb25zLmNvbG9ycz8uZmlsdGVyKEJvb2xlYW4pID8/IFtdO1xuICAgIGNvbnN0IHN0YXJ0Q29sb3IgPSBvcHRpb25zLnN0YXJ0Q29sb3IgPz8gcGFsZXR0ZVswXSA/PyAnI2ViZWRmMCc7XG4gICAgY29uc3QgZW5kQ29sb3IgPSBvcHRpb25zLmVuZENvbG9yID8/IHBhbGV0dGVbcGFsZXR0ZS5sZW5ndGggLSAxXSA/PyAnIzIxNmUzOSc7XG4gICAgY29uc3QgcmVzb2x2ZWRTdGFydENvbG9yID0gdGhpcy5yZXNvbHZlQ3NzQ29sb3Ioc3RhcnRDb2xvcik7XG4gICAgY29uc3QgcmVzb2x2ZWRFbmRDb2xvciA9IHRoaXMucmVzb2x2ZUNzc0NvbG9yKGVuZENvbG9yKTtcblxuICAgIGNvbnN0IGdldENlbGxDb2xvciA9IChkOiBBWEhlYXRtYXBEYXRhKTogc3RyaW5nID0+IHtcbiAgICAgIC8vIElmIGEgcGFsZXR0ZSBpcyBwcm92aWRlZCwgY2hvb3NlIGEgc3RhYmxlIFwicmFuZG9tXCIgY29sb3IgcGVyIGNlbGwuXG4gICAgICBpZiAocGFsZXR0ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGAke2QueH0tJHtkLnl9YDtcbiAgICAgICAgY29uc3QgaWR4ID0gdGhpcy5oYXNoU3RyaW5nVG9VaW50MzIoa2V5KSAlIHBhbGV0dGUubGVuZ3RoO1xuICAgICAgICByZXR1cm4gcGFsZXR0ZVtpZHhdID8/IHN0YXJ0Q29sb3I7XG4gICAgICB9XG5cbiAgICAgIC8vIE90aGVyd2lzZSBjb21wdXRlIGEgZ3JhZGllbnQgY29sb3IgYmFzZWQgb24gdmFsdWUuXG4gICAgICBjb25zdCByYW5nZSA9IG1heFZhbHVlIC0gbWluVmFsdWU7XG4gICAgICBjb25zdCB0ID0gcmFuZ2UgPT09IDAgPyAxIDogKGQudmFsdWUgLSBtaW5WYWx1ZSkgLyByYW5nZTtcbiAgICAgIGNvbnN0IGNsYW1wZWQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCB0KSk7XG4gICAgICByZXR1cm4gdGhpcy5kMy5pbnRlcnBvbGF0ZVJnYihyZXNvbHZlZFN0YXJ0Q29sb3IsIHJlc29sdmVkRW5kQ29sb3IpKGNsYW1wZWQpO1xuICAgIH07XG5cbiAgICAvLyAtLS0gQXhlcyAtLS1cbiAgICB0aGlzLmRyYXdBeGlzKGcsICd4LWF4aXMnLCB0aGlzLmQzLmF4aXNCb3R0b20oeFNjYWxlKS50aWNrU2l6ZSgwKSwgMCwgaW5uZXJIZWlnaHQsIG9wdGlvbnMuc2hvd1hBeGlzLCBpc1J0bCk7XG4gICAgaWYgKGlzUnRsKSB7XG4gICAgICB0aGlzLmRyYXdBeGlzKGcsICd5LWF4aXMnLCB0aGlzLmQzLmF4aXNSaWdodCh5U2NhbGUpLnRpY2tTaXplKDApLCBpbm5lcldpZHRoLCAwLCBvcHRpb25zLnNob3dZQXhpcywgaXNSdGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRyYXdBeGlzKGcsICd5LWF4aXMnLCB0aGlzLmQzLmF4aXNMZWZ0KHlTY2FsZSkudGlja1NpemUoMCksIDAsIDAsIG9wdGlvbnMuc2hvd1lBeGlzLCBpc1J0bCk7XG4gICAgfVxuICAgIHRoaXMuZHJhd0F4aXNMYWJlbHMoZywgaW5uZXJXaWR0aCwgaW5uZXJIZWlnaHQsIG9wdGlvbnMsIGlzUnRsKTtcblxuICAgIC8vIC0tLSBDZWxscyB3aXRoIERhdGEgSm9pbiAtLS1cbiAgICBjb25zdCBlYXNpbmcgPSBnZXRFYXNpbmdGdW5jdGlvbih0aGlzLmQzLCBvcHRpb25zLmFuaW1hdGlvbkVhc2luZyk7XG5cbiAgICBnLnNlbGVjdEFsbCgnLmNlbGwnKVxuICAgICAgLmRhdGEoZGF0YSwgKGQ6IGFueSkgPT4gYCR7ZC54fS0ke2QueX1gKVxuICAgICAgLmpvaW4oXG4gICAgICAgIChlbnRlcjogYW55KSA9PiBlbnRlci5hcHBlbmQoJ3JlY3QnKS5hdHRyKCdjbGFzcycsICdjZWxsJykuYXR0cignb3BhY2l0eScsIDApLmF0dHIoJ2ZpbGwnLCBzdGFydENvbG9yKSxcbiAgICAgICAgKHVwZGF0ZTogYW55KSA9PiB1cGRhdGUsXG4gICAgICAgIChleGl0OiBhbnkpID0+IGV4aXQudHJhbnNpdGlvbigpLmR1cmF0aW9uKDIwMCkuYXR0cignb3BhY2l0eScsIDApLnJlbW92ZSgpLFxuICAgICAgKVxuICAgICAgLm9uKCdtb3VzZWVudGVyJywgKGV2ZW50OiBhbnksIGQ6IEFYSGVhdG1hcERhdGEpID0+IHRoaXMuc2hvd1Rvb2x0aXAoZXZlbnQsIGQsIGdldENlbGxDb2xvcihkKSkpXG4gICAgICAub24oJ21vdXNlbW92ZScsIChldmVudDogYW55KSA9PiB0aGlzLnVwZGF0ZVRvb2x0aXBQb3MoZXZlbnQpKVxuICAgICAgLm9uKCdjbGljaycsIChfZXZlbnQ6IGFueSwgZDogQVhIZWF0bWFwRGF0YSkgPT4gdGhpcy5jZWxsQ2xpY2suZW1pdChkKSlcbiAgICAgIC5vbignbW91c2VsZWF2ZScsICgpID0+IHRoaXMuaGlkZVRvb2x0aXAoKSlcbiAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgIC5kdXJhdGlvbihvcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uKVxuICAgICAgLmVhc2UoZWFzaW5nKVxuICAgICAgLmF0dHIoJ3gnLCAoZDogYW55KSA9PiB4U2NhbGUoZC54LnRvU3RyaW5nKCkpKVxuICAgICAgLmF0dHIoJ3knLCAoZDogYW55KSA9PiB5U2NhbGUoZC55LnRvU3RyaW5nKCkpKVxuICAgICAgLmF0dHIoJ3dpZHRoJywgeFNjYWxlLmJhbmR3aWR0aCgpKVxuICAgICAgLmF0dHIoJ2hlaWdodCcsIHlTY2FsZS5iYW5kd2lkdGgoKSlcbiAgICAgIC5hdHRyKCdyeCcsIG9wdGlvbnMuYm9yZGVyUmFkaXVzKVxuICAgICAgLmF0dHIoJ3J5Jywgb3B0aW9ucy5ib3JkZXJSYWRpdXMpXG4gICAgICAuYXR0cignb3BhY2l0eScsIDEpXG4gICAgICAuc3R5bGUoJ2ZpbGwnLCAoZDogQVhIZWF0bWFwRGF0YSkgPT4gZ2V0Q2VsbENvbG9yKGQpKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFzaFN0cmluZ1RvVWludDMyKGlucHV0OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIC8vIFNpbXBsZSwgZmFzdCwgZGV0ZXJtaW5pc3RpYyBoYXNoIChkamIyIHZhcmlhbnQpXG4gICAgbGV0IGhhc2ggPSA1MzgxO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGhhc2ggPSAoaGFzaCAqIDMzKSBeIGlucHV0LmNoYXJDb2RlQXQoaSk7XG4gICAgfVxuICAgIHJldHVybiBoYXNoID4+PiAwO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlQ3NzQ29sb3IoY29sb3I6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb250YWluZXJSZWYoKS5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHByb2JlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgIHByb2JlLnN0eWxlLmNvbG9yID0gY29sb3I7XG4gICAgcHJvYmUuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIHByb2JlLnN0eWxlLmxlZnQgPSAnLTk5OTlweCc7XG4gICAgcHJvYmUuc3R5bGUudG9wID0gJy05OTk5cHgnO1xuICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChwcm9iZSk7XG4gICAgY29uc3QgY29tcHV0ZWQgPSBnZXRDb21wdXRlZFN0eWxlKHByb2JlKS5jb2xvcjtcbiAgICBwcm9iZS5yZW1vdmUoKTtcbiAgICByZXR1cm4gY29tcHV0ZWQgfHwgY29sb3I7XG4gIH1cblxuICBwcml2YXRlIGRyYXdBeGlzKGc6IGFueSwgY2xhc3NOYW1lOiBzdHJpbmcsIGF4aXNGbjogYW55LCB4OiBudW1iZXIsIHk6IG51bWJlciwgdmlzaWJsZSA9IHRydWUsIGlzUnRsID0gZmFsc2UpIHtcbiAgICBsZXQgYXhpc0cgPSBnLnNlbGVjdChgLiR7Y2xhc3NOYW1lfWApO1xuICAgIGlmIChheGlzRy5lbXB0eSgpKSBheGlzRyA9IGcuYXBwZW5kKCdnJykuYXR0cignY2xhc3MnLCBjbGFzc05hbWUpO1xuXG4gICAgYXhpc0dcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKCR7eH0sJHt5fSlgKVxuICAgICAgLnN0eWxlKCdkaXNwbGF5JywgdmlzaWJsZSA/ICdibG9jaycgOiAnbm9uZScpXG4gICAgICAuY2FsbChheGlzRm4pXG4gICAgICAuY2FsbCgoZzogYW55KSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpLnJlbW92ZSgpKTtcblxuICAgIC8vIEVuc3VyZSB0aWNrIGxhYmVscyBkb24ndCBvdmVybGFwIHRoZSBwbG90IGluIFJUTC5cbiAgICAvLyBgdGV4dC1hbmNob3JgIGlzIGxvZ2ljYWwgKGRlcGVuZHMgb24gYGRpcmVjdGlvbmApLCBzbyB3ZSBzZXQgYm90aCBleHBsaWNpdGx5LlxuICAgIGF4aXNHLmF0dHIoJ2RpcmVjdGlvbicsIGlzUnRsID8gJ3J0bCcgOiAnbHRyJyk7XG4gICAgaWYgKGNsYXNzTmFtZSA9PT0gJ3ktYXhpcycpIHtcbiAgICAgIGF4aXNHLnNlbGVjdEFsbCgnLnRpY2sgdGV4dCcpLmF0dHIoJ3RleHQtYW5jaG9yJywgJ2VuZCcpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvd1Rvb2x0aXAoZXZlbnQ6IE1vdXNlRXZlbnQsIGl0ZW06IEFYSGVhdG1hcERhdGEsIGNvbG9yOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuZWZmZWN0aXZlT3B0aW9ucygpLnNob3dUb29sdGlwKSByZXR1cm47XG4gICAgdGhpcy50b29sdGlwRGF0YS5zZXQoe1xuICAgICAgdGl0bGU6IGAke2l0ZW0ueH0gLyAke2l0ZW0ueX1gLFxuICAgICAgdmFsdWU6IGl0ZW0ubGFiZWwgfHwgaXRlbS52YWx1ZS50b0xvY2FsZVN0cmluZygpLFxuICAgICAgY29sb3I6IGNvbG9yLFxuICAgIH0pO1xuICAgIHRoaXMudG9vbHRpcFZpc2libGUuc2V0KHRydWUpO1xuICAgIHRoaXMudXBkYXRlVG9vbHRpcFBvcyhldmVudCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVRvb2x0aXBQb3MoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAodGhpcy5fdG9vbHRpcFJhZklkKSBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl90b29sdGlwUmFmSWQpO1xuICAgIHRoaXMuX3Rvb2x0aXBSYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXJFbCA9IHRoaXMuY29udGFpbmVyUmVmKCkubmF0aXZlRWxlbWVudDtcbiAgICAgIGNvbnN0IHJlY3QgPSBjb250YWluZXJFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IHRvb2x0aXBFbCA9IGNvbnRhaW5lckVsLnF1ZXJ5U2VsZWN0b3IoJy5jaGFydC10b29sdGlwJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBjb25zdCB0b29sdGlwUmVjdCA9IHRvb2x0aXBFbD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgPz8gbnVsbDtcbiAgICAgIGNvbnN0IHBvcyA9IGNvbXB1dGVUb29sdGlwUG9zaXRpb24ocmVjdCwgdG9vbHRpcFJlY3QsIGV2ZW50LmNsaWVudFggKyAxMCwgZXZlbnQuY2xpZW50WSAtIDEwLCAxMCk7XG4gICAgICB0aGlzLnRvb2x0aXBQb3NpdGlvbi5zZXQocG9zKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGlkZVRvb2x0aXAoKSB7XG4gICAgdGhpcy50b29sdGlwVmlzaWJsZS5zZXQoZmFsc2UpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kaXJlY3Rpb25TdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zdmc/LnJlbW92ZSgpO1xuICAgIGlmICh0aGlzLl90b29sdGlwUmFmSWQpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3Rvb2x0aXBSYWZJZCk7XG4gIH1cblxuICBwcml2YXRlIGRyYXdBeGlzTGFiZWxzKFxuICAgIGc6IGFueSxcbiAgICBpbm5lcldpZHRoOiBudW1iZXIsXG4gICAgaW5uZXJIZWlnaHQ6IG51bWJlcixcbiAgICBvcHRpb25zOiBBWEhlYXRtYXBDaGFydE9wdGlvbixcbiAgICBpc1J0bDogYm9vbGVhbixcbiAgKSB7XG4gICAgY29uc3QgeFRleHQgPSBvcHRpb25zLnhBeGlzTGFiZWw/LnRyaW0oKTtcbiAgICBjb25zdCB5VGV4dCA9IG9wdGlvbnMueUF4aXNMYWJlbD8udHJpbSgpO1xuXG4gICAgY29uc3QgbGFiZWxzID0gZy5zZWxlY3RBbGwoJy5heGlzLWxhYmVscycpLmRhdGEoWzBdKS5qb2luKCdnJykuYXR0cignY2xhc3MnLCAnYXhpcy1sYWJlbHMnKTtcblxuICAgIGxhYmVsc1xuICAgICAgLnNlbGVjdEFsbCgnLmF4aXMtbGFiZWwteCcpXG4gICAgICAuZGF0YSh4VGV4dCA/IFt4VGV4dF0gOiBbXSlcbiAgICAgIC5qb2luKFxuICAgICAgICAoZW50ZXI6IGFueSkgPT4gZW50ZXIuYXBwZW5kKCd0ZXh0JykuYXR0cignY2xhc3MnLCAnYXhpcy1sYWJlbCBheGlzLWxhYmVsLXgnKSxcbiAgICAgICAgKHVwZGF0ZTogYW55KSA9PiB1cGRhdGUsXG4gICAgICAgIChleGl0OiBhbnkpID0+IGV4aXQucmVtb3ZlKCksXG4gICAgICApXG4gICAgICAuYXR0cigneCcsIGlubmVyV2lkdGggLyAyKVxuICAgICAgLmF0dHIoJ3knLCBpbm5lckhlaWdodCArIDQ0KVxuICAgICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXG4gICAgICAudGV4dCgoZDogc3RyaW5nKSA9PiBkKTtcblxuICAgIGNvbnN0IHlYID0gaXNSdGwgPyBpbm5lcldpZHRoICsgNDYgOiAtNDY7XG4gICAgbGFiZWxzXG4gICAgICAuc2VsZWN0QWxsKCcuYXhpcy1sYWJlbC15JylcbiAgICAgIC5kYXRhKHlUZXh0ID8gW3lUZXh0XSA6IFtdKVxuICAgICAgLmpvaW4oXG4gICAgICAgIChlbnRlcjogYW55KSA9PiBlbnRlci5hcHBlbmQoJ3RleHQnKS5hdHRyKCdjbGFzcycsICdheGlzLWxhYmVsIGF4aXMtbGFiZWwteScpLFxuICAgICAgICAodXBkYXRlOiBhbnkpID0+IHVwZGF0ZSxcbiAgICAgICAgKGV4aXQ6IGFueSkgPT4gZXhpdC5yZW1vdmUoKSxcbiAgICAgIClcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKCR7eVh9LCAke2lubmVySGVpZ2h0IC8gMn0pIHJvdGF0ZSgtOTApYClcbiAgICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxuICAgICAgLnRleHQoKGQ6IHN0cmluZykgPT4gZCk7XG4gIH1cblxuICAvLyBSVEwgaXMgdHJhY2tlZCB2aWEgQVhQbGF0Zm9ybS5kaXJlY3Rpb25DaGFuZ2Vcbn1cbiIsIjxkaXYgY2xhc3M9XCJheC1oZWF0bWFwLWNoYXJ0LWNvbnRhaW5lclwiIHJvbGU9XCJpbWdcIiAjY2hhcnRDb250YWluZXI+XG4gIEBpZiAoZGF0YSgpPy5sZW5ndGggPT09IDApIHtcbiAgICA8ZGl2IGNsYXNzPVwiYXgtaGVhdG1hcC1uby1kYXRhXCI+XG4gICAgICA8aSBbY2xhc3NdPVwiZWZmZWN0aXZlT3B0aW9ucygpLm1lc3NhZ2VzPy5ub0RhdGFJY29uXCI+PC9pPlxuICAgICAgPHAgY2xhc3M9XCJheC1oZWF0bWFwLW5vLWRhdGEtdGV4dFwiPnt7IGVmZmVjdGl2ZU9wdGlvbnMoKS5tZXNzYWdlcz8ubm9EYXRhIH19PC9wPlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cblxuPGF4LWNoYXJ0LXRvb2x0aXAgW2RhdGFdPVwidG9vbHRpcERhdGEoKVwiIFtwb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb24oKVwiIFt2aXNpYmxlXT1cInRvb2x0aXBWaXNpYmxlKClcIj5cbjwvYXgtY2hhcnQtdG9vbHRpcD5cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNoYXJ0cy1oZWF0bWFwLWNoYXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2hhcnRzL2hlYXRtYXAtY2hhcnQvc3JjL2Fjb3JleC1jaGFydHMtaGVhdG1hcC1jaGFydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
|
package/funnel-chart/index.d.ts
CHANGED
|
@@ -27,7 +27,13 @@ interface AXFunnelChartOption {
|
|
|
27
27
|
/** The ratio of the bottom width compared to the top width for the last segment (0 to 1). Default: 0.3 */
|
|
28
28
|
neckWidth?: number;
|
|
29
29
|
colors?: string[];
|
|
30
|
+
/** Color used for the minimum value when `colors` is not provided. */
|
|
31
|
+
startColor?: string;
|
|
32
|
+
/** Color used for the maximum value when `colors` is not provided. */
|
|
33
|
+
endColor?: string;
|
|
30
34
|
showLabels?: boolean;
|
|
35
|
+
/** Label offset from the slice edge (px). */
|
|
36
|
+
labelOffset?: number;
|
|
31
37
|
showTooltip?: boolean;
|
|
32
38
|
animationDuration?: number;
|
|
33
39
|
animationEasing?: AXAnimationEasing;
|
|
@@ -37,11 +43,16 @@ interface AXFunnelChartOption {
|
|
|
37
43
|
declare class AXFunnelChartComponent extends AXChartComponent implements OnDestroy, AXChartComponentBase {
|
|
38
44
|
data: _angular_core.InputSignal<AXFunnelData[]>;
|
|
39
45
|
options: _angular_core.InputSignal<AXFunnelChartOption>;
|
|
46
|
+
/** Emitted when a funnel segment is clicked */
|
|
47
|
+
segmentClick: _angular_core.OutputEmitterRef<AXFunnelData>;
|
|
40
48
|
private readonly chartContainerEl;
|
|
41
49
|
private svgElement;
|
|
42
50
|
protected d3: typeof d3;
|
|
43
51
|
private _initialized;
|
|
44
52
|
private _rendered;
|
|
53
|
+
private platformService;
|
|
54
|
+
protected isRtl: _angular_core.WritableSignal<boolean>;
|
|
55
|
+
private directionSub?;
|
|
45
56
|
private _tooltipVisible;
|
|
46
57
|
private _tooltipPosition;
|
|
47
58
|
private _tooltipData;
|
|
@@ -64,7 +75,10 @@ declare class AXFunnelChartComponent extends AXChartComponent implements OnDestr
|
|
|
64
75
|
height?: number;
|
|
65
76
|
neckWidth?: number;
|
|
66
77
|
colors?: string[];
|
|
78
|
+
startColor?: string;
|
|
79
|
+
endColor?: string;
|
|
67
80
|
showLabels?: boolean;
|
|
81
|
+
labelOffset?: number;
|
|
68
82
|
showTooltip?: boolean;
|
|
69
83
|
animationDuration?: number;
|
|
70
84
|
animationEasing?: _acorex_charts.AXAnimationEasing;
|
|
@@ -74,13 +88,16 @@ declare class AXFunnelChartComponent extends AXChartComponent implements OnDestr
|
|
|
74
88
|
ngOnDestroy(): void;
|
|
75
89
|
protected loadD3(): Promise<void>;
|
|
76
90
|
createChart(): void;
|
|
91
|
+
private resolveSliceColor;
|
|
92
|
+
private hashStringToUint32;
|
|
93
|
+
private resolveCssColor;
|
|
77
94
|
updateChart(): void;
|
|
78
95
|
private showTooltip;
|
|
79
96
|
private updateTooltipPosition;
|
|
80
97
|
private hideTooltip;
|
|
81
98
|
cleanupChart(): void;
|
|
82
99
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFunnelChartComponent, never>;
|
|
83
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFunnelChartComponent, "ax-funnel-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
100
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFunnelChartComponent, "ax-funnel-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; }, { "segmentClick": "segmentClick"; }, never, never, true, never>;
|
|
84
101
|
}
|
|
85
102
|
|
|
86
103
|
declare const AXFunnelChartDefaultConfig: AXFunnelChartOption;
|
package/heatmap-chart/index.d.ts
CHANGED
|
@@ -24,7 +24,15 @@ interface AXHeatmapChartOption {
|
|
|
24
24
|
bottom: number;
|
|
25
25
|
left: number;
|
|
26
26
|
};
|
|
27
|
+
/**
|
|
28
|
+
* Discrete palette. If provided (non-empty), a (stable) random color is chosen per cell.
|
|
29
|
+
* If omitted/empty, colors are computed from `startColor` → `endColor` based on the cell value.
|
|
30
|
+
*/
|
|
27
31
|
colors?: string[];
|
|
32
|
+
/** Color used for the minimum value when `colors` is not provided. */
|
|
33
|
+
startColor?: string;
|
|
34
|
+
/** Color used for the maximum value when `colors` is not provided. */
|
|
35
|
+
endColor?: string;
|
|
28
36
|
cellPadding?: number;
|
|
29
37
|
borderRadius?: number;
|
|
30
38
|
showXAxis?: boolean;
|
|
@@ -41,17 +49,22 @@ declare class AXHeatmapChartComponent extends AXChartComponent implements OnDest
|
|
|
41
49
|
private readonly defaultConfig;
|
|
42
50
|
data: _angular_core.InputSignal<AXHeatmapData[]>;
|
|
43
51
|
options: _angular_core.InputSignal<AXHeatmapChartOption>;
|
|
52
|
+
/** Emitted when a heatmap cell is clicked */
|
|
53
|
+
cellClick: _angular_core.OutputEmitterRef<AXHeatmapData>;
|
|
44
54
|
private readonly containerRef;
|
|
45
55
|
private svg;
|
|
46
|
-
private resizeObserver;
|
|
47
56
|
protected d3: any;
|
|
48
57
|
private _d3Ready;
|
|
58
|
+
private platformService;
|
|
59
|
+
protected isRtl: _angular_core.WritableSignal<boolean>;
|
|
60
|
+
private directionSub?;
|
|
49
61
|
protected tooltipVisible: _angular_core.WritableSignal<boolean>;
|
|
50
62
|
protected tooltipPosition: _angular_core.WritableSignal<{
|
|
51
63
|
x: number;
|
|
52
64
|
y: number;
|
|
53
65
|
}>;
|
|
54
66
|
protected tooltipData: _angular_core.WritableSignal<AXChartTooltipData>;
|
|
67
|
+
private _tooltipRafId;
|
|
55
68
|
protected effectiveOptions: _angular_core.Signal<{
|
|
56
69
|
width?: number;
|
|
57
70
|
height?: number;
|
|
@@ -62,6 +75,8 @@ declare class AXHeatmapChartComponent extends AXChartComponent implements OnDest
|
|
|
62
75
|
left: number;
|
|
63
76
|
};
|
|
64
77
|
colors?: string[];
|
|
78
|
+
startColor?: string;
|
|
79
|
+
endColor?: string;
|
|
65
80
|
cellPadding?: number;
|
|
66
81
|
borderRadius?: number;
|
|
67
82
|
showXAxis?: boolean;
|
|
@@ -76,13 +91,16 @@ declare class AXHeatmapChartComponent extends AXChartComponent implements OnDest
|
|
|
76
91
|
constructor();
|
|
77
92
|
private init;
|
|
78
93
|
private renderChart;
|
|
94
|
+
private hashStringToUint32;
|
|
95
|
+
private resolveCssColor;
|
|
79
96
|
private drawAxis;
|
|
80
97
|
private showTooltip;
|
|
81
98
|
private updateTooltipPos;
|
|
82
99
|
private hideTooltip;
|
|
83
100
|
ngOnDestroy(): void;
|
|
101
|
+
private drawAxisLabels;
|
|
84
102
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXHeatmapChartComponent, never>;
|
|
85
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXHeatmapChartComponent, "ax-heatmap-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
103
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXHeatmapChartComponent, "ax-heatmap-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; }, { "cellClick": "cellClick"; }, never, never, true, never>;
|
|
86
104
|
}
|
|
87
105
|
|
|
88
106
|
declare const AXHeatmapChartDefaultConfig: AXHeatmapChartOption;
|