@acorex/charts 20.6.31 → 20.6.32
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.
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
import { AXChartComponent, getEasingFunction, resolveCssColorInContext, computeTooltipPosition } from '@acorex/charts';
|
|
2
2
|
import { AXChartTooltipComponent } from '@acorex/charts/chart-tooltip';
|
|
3
|
-
import { AXPlatform } from '@acorex/core/platform';
|
|
4
3
|
import * as i0 from '@angular/core';
|
|
5
4
|
import { InjectionToken, input, output, viewChild, signal, inject, computed, afterNextRender, effect, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
|
|
6
|
-
import { map } from 'rxjs';
|
|
7
5
|
|
|
8
6
|
const AXFunnelChartDefaultConfig = {
|
|
9
|
-
margin: { top:
|
|
7
|
+
margin: { top: 16, right: 16, bottom: 16, left: 16 },
|
|
10
8
|
neckWidth: 0.3,
|
|
11
9
|
showLabels: true,
|
|
10
|
+
showSegmentValues: true,
|
|
12
11
|
labelOffset: 24,
|
|
13
12
|
showTooltip: true,
|
|
14
13
|
animationDuration: 1000,
|
|
15
14
|
animationEasing: 'cubic-out',
|
|
16
|
-
color: 'rgb(
|
|
15
|
+
color: 'rgb(var(--ax-sys-color-primary-500))',
|
|
17
16
|
messages: {
|
|
18
17
|
noData: 'No funnel data available',
|
|
19
18
|
noDataIcon: 'fa-light fa-filter-list',
|
|
@@ -37,9 +36,8 @@ class AXFunnelChartComponent extends AXChartComponent {
|
|
|
37
36
|
d3;
|
|
38
37
|
_initialized = signal(false, ...(ngDevMode ? [{ debugName: "_initialized" }] : []));
|
|
39
38
|
_rendered = signal(false, ...(ngDevMode ? [{ debugName: "_rendered" }] : []));
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
directionSub;
|
|
39
|
+
resizeObserver = null;
|
|
40
|
+
resizeDebounceId = null;
|
|
43
41
|
// Tooltip Signals
|
|
44
42
|
_tooltipVisible = signal(false, ...(ngDevMode ? [{ debugName: "_tooltipVisible" }] : []));
|
|
45
43
|
_tooltipPosition = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: "_tooltipPosition" }] : []));
|
|
@@ -58,14 +56,7 @@ class AXFunnelChartComponent extends AXChartComponent {
|
|
|
58
56
|
afterNextRender(() => {
|
|
59
57
|
this._initialized.set(true);
|
|
60
58
|
this.loadD3();
|
|
61
|
-
this.
|
|
62
|
-
.pipe(map((i) => i.data === 'rtl'))
|
|
63
|
-
.subscribe((isRtl) => {
|
|
64
|
-
this.isRtl.set(isRtl);
|
|
65
|
-
if (this._rendered()) {
|
|
66
|
-
this.updateChart();
|
|
67
|
-
}
|
|
68
|
-
});
|
|
59
|
+
this.attachResizeObserver();
|
|
69
60
|
});
|
|
70
61
|
effect(() => {
|
|
71
62
|
// Trigger update on data or option change
|
|
@@ -77,9 +68,34 @@ class AXFunnelChartComponent extends AXChartComponent {
|
|
|
77
68
|
});
|
|
78
69
|
}
|
|
79
70
|
ngOnDestroy() {
|
|
80
|
-
this.
|
|
71
|
+
this.detachResizeObserver();
|
|
81
72
|
this.cleanupChart();
|
|
82
73
|
}
|
|
74
|
+
attachResizeObserver() {
|
|
75
|
+
if (typeof ResizeObserver === 'undefined')
|
|
76
|
+
return;
|
|
77
|
+
const el = this.chartContainerEl().nativeElement;
|
|
78
|
+
this.resizeObserver = new ResizeObserver(() => {
|
|
79
|
+
if (this.resizeDebounceId !== null) {
|
|
80
|
+
clearTimeout(this.resizeDebounceId);
|
|
81
|
+
}
|
|
82
|
+
this.resizeDebounceId = window.setTimeout(() => {
|
|
83
|
+
this.resizeDebounceId = null;
|
|
84
|
+
if (this._rendered() && this.d3) {
|
|
85
|
+
this.updateChart();
|
|
86
|
+
}
|
|
87
|
+
}, 80);
|
|
88
|
+
});
|
|
89
|
+
this.resizeObserver.observe(el);
|
|
90
|
+
}
|
|
91
|
+
detachResizeObserver() {
|
|
92
|
+
this.resizeObserver?.disconnect();
|
|
93
|
+
this.resizeObserver = null;
|
|
94
|
+
if (this.resizeDebounceId !== null) {
|
|
95
|
+
clearTimeout(this.resizeDebounceId);
|
|
96
|
+
this.resizeDebounceId = null;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
83
99
|
async loadD3() {
|
|
84
100
|
if (this.d3)
|
|
85
101
|
return;
|
|
@@ -103,28 +119,34 @@ class AXFunnelChartComponent extends AXChartComponent {
|
|
|
103
119
|
return;
|
|
104
120
|
}
|
|
105
121
|
const container = this.chartContainerEl().nativeElement;
|
|
106
|
-
const width = container.clientWidth;
|
|
107
|
-
const height = container.clientHeight;
|
|
122
|
+
const width = Math.max(0, container.clientWidth);
|
|
123
|
+
const height = Math.max(0, container.clientHeight);
|
|
124
|
+
if (width < 2 || height < 2) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
108
127
|
const opt = this.effectiveOptions();
|
|
109
128
|
const margin = opt.margin;
|
|
110
|
-
const
|
|
111
|
-
const
|
|
129
|
+
const easing = getEasingFunction(this.d3, opt.animationEasing);
|
|
130
|
+
const resolvedBaseForIntensity = this.resolveCssColor(opt.color ?? 'rgb(99, 102, 241)');
|
|
112
131
|
this.svgElement = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
|
|
113
132
|
const svg = this.d3
|
|
114
133
|
.select(this.svgElement)
|
|
115
134
|
.attr('width', '100%')
|
|
116
135
|
.attr('height', '100%')
|
|
117
136
|
.attr('viewBox', `0 0 ${width} ${height}`)
|
|
118
|
-
.attr('preserveAspectRatio', 'xMidYMid meet')
|
|
137
|
+
.attr('preserveAspectRatio', 'xMidYMid meet')
|
|
138
|
+
.attr('class', 'ax-funnel-svg');
|
|
119
139
|
container.appendChild(this.svgElement);
|
|
120
140
|
const innerWidth = width - margin.left - margin.right;
|
|
121
141
|
const innerHeight = height - margin.top - margin.bottom;
|
|
142
|
+
if (innerWidth < 2 || innerHeight < 2) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
122
145
|
const g = svg.append('g').attr('transform', `translate(${margin.left},${margin.top})`);
|
|
123
146
|
const sliceHeight = innerHeight / data.length;
|
|
124
147
|
const maxValue = data[0].value;
|
|
125
148
|
const minValue = data[data.length - 1]?.value ?? maxValue;
|
|
126
|
-
const
|
|
127
|
-
const resolvedBaseForIntensity = this.resolveCssColor(opt.color ?? 'rgb(99, 102, 241)');
|
|
149
|
+
const showSegmentValues = opt.showSegmentValues !== false;
|
|
128
150
|
data.forEach((d, i) => {
|
|
129
151
|
const topVal = d.value;
|
|
130
152
|
const bottomVal = data[i + 1]?.value ?? d.value * opt.neckWidth;
|
|
@@ -161,27 +183,49 @@ class AXFunnelChartComponent extends AXChartComponent {
|
|
|
161
183
|
.delay(i * 80)
|
|
162
184
|
.ease(easing)
|
|
163
185
|
.style('opacity', 1);
|
|
186
|
+
sliceGroup
|
|
187
|
+
.append('title')
|
|
188
|
+
.text(`${d.name}: ${d.value.toLocaleString()}`);
|
|
164
189
|
if (opt.showLabels) {
|
|
190
|
+
const { cx, cy, width: midW } = this.trapezoidInteriorMetrics(xTop, topW, xBottom, bottomW, yTop, yBottom);
|
|
191
|
+
const { nameSize, valueSize, showValueLine, displayName } = this.computeSegmentLabelTypography(sliceHeight, midW, d.name, showSegmentValues);
|
|
192
|
+
const { primary, secondary } = this.pickOnSliceTextColors(computedColor);
|
|
165
193
|
const labelGroup = sliceGroup.append('g').attr('class', 'funnel-label-group').style('opacity', 0);
|
|
166
|
-
const
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
194
|
+
const lineGap = Math.max(2, sliceHeight * 0.06);
|
|
195
|
+
if (showValueLine && valueSize > 0) {
|
|
196
|
+
labelGroup
|
|
197
|
+
.append('text')
|
|
198
|
+
.attr('class', 'funnel-label-name')
|
|
199
|
+
.attr('x', cx)
|
|
200
|
+
.attr('y', cy - (valueSize * 0.55 + lineGap * 0.5))
|
|
201
|
+
.attr('text-anchor', 'middle')
|
|
202
|
+
.attr('dominant-baseline', 'middle')
|
|
203
|
+
.style('font-size', `${nameSize}px`)
|
|
204
|
+
.style('fill', primary)
|
|
205
|
+
.text(displayName);
|
|
206
|
+
labelGroup
|
|
207
|
+
.append('text')
|
|
208
|
+
.attr('class', 'funnel-label-value')
|
|
209
|
+
.attr('x', cx)
|
|
210
|
+
.attr('y', cy + (nameSize * 0.55 + lineGap * 0.5))
|
|
211
|
+
.attr('text-anchor', 'middle')
|
|
212
|
+
.attr('dominant-baseline', 'middle')
|
|
213
|
+
.style('font-size', `${valueSize}px`)
|
|
214
|
+
.style('fill', secondary)
|
|
215
|
+
.text(d.value.toLocaleString());
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
labelGroup
|
|
219
|
+
.append('text')
|
|
220
|
+
.attr('class', 'funnel-label-name funnel-label-name--single')
|
|
221
|
+
.attr('x', cx)
|
|
222
|
+
.attr('y', cy)
|
|
223
|
+
.attr('text-anchor', 'middle')
|
|
224
|
+
.attr('dominant-baseline', 'middle')
|
|
225
|
+
.style('font-size', `${nameSize}px`)
|
|
226
|
+
.style('fill', primary)
|
|
227
|
+
.text(displayName);
|
|
228
|
+
}
|
|
185
229
|
labelGroup
|
|
186
230
|
.transition()
|
|
187
231
|
.duration(600)
|
|
@@ -190,6 +234,79 @@ class AXFunnelChartComponent extends AXChartComponent {
|
|
|
190
234
|
}
|
|
191
235
|
});
|
|
192
236
|
}
|
|
237
|
+
trapezoidInteriorMetrics(xTop, topW, xBottom, bottomW, yTop, yBottom) {
|
|
238
|
+
const cy = (yTop + yBottom) / 2;
|
|
239
|
+
const denom = yBottom - yTop || 1;
|
|
240
|
+
const t = (cy - yTop) / denom;
|
|
241
|
+
const xL = xTop + t * (xBottom - xTop);
|
|
242
|
+
const xR = xTop + topW + t * (xBottom + bottomW - (xTop + topW));
|
|
243
|
+
return { cx: (xL + xR) / 2, cy, width: Math.max(0, xR - xL) };
|
|
244
|
+
}
|
|
245
|
+
computeSegmentLabelTypography(sliceHeight, segmentInnerWidth, name, wantValue) {
|
|
246
|
+
const charFactor = 0.52;
|
|
247
|
+
const minFont = 6.5;
|
|
248
|
+
const maxName = 15;
|
|
249
|
+
const innerW = Math.max(segmentInnerWidth, 8);
|
|
250
|
+
let showValueLine = wantValue && sliceHeight >= 17 && innerW >= 38;
|
|
251
|
+
const fitNameOnly = () => {
|
|
252
|
+
const raw = Math.min(maxName + 2, sliceHeight * 0.42, innerW / Math.max(name.length * charFactor, 2.5));
|
|
253
|
+
return Math.max(minFont, raw);
|
|
254
|
+
};
|
|
255
|
+
const fitBoth = () => {
|
|
256
|
+
const vBudget = sliceHeight * 0.76;
|
|
257
|
+
let nameSize = Math.min(maxName, vBudget / 2.45, innerW / Math.max(name.length * charFactor, 2.5));
|
|
258
|
+
nameSize = Math.max(minFont, nameSize);
|
|
259
|
+
let valueSize = Math.max(minFont, Math.min(nameSize * 0.88, vBudget / 2.45));
|
|
260
|
+
const stackH = nameSize * 1.18 + valueSize * 1.08 + sliceHeight * 0.05;
|
|
261
|
+
if (stackH > sliceHeight * 0.88) {
|
|
262
|
+
const scale = (sliceHeight * 0.88) / stackH;
|
|
263
|
+
nameSize = Math.max(minFont, nameSize * scale);
|
|
264
|
+
valueSize = Math.max(minFont, valueSize * scale);
|
|
265
|
+
}
|
|
266
|
+
return { nameSize, valueSize };
|
|
267
|
+
};
|
|
268
|
+
let nameSize;
|
|
269
|
+
let valueSize = 0;
|
|
270
|
+
if (showValueLine) {
|
|
271
|
+
const both = fitBoth();
|
|
272
|
+
nameSize = both.nameSize;
|
|
273
|
+
valueSize = both.valueSize;
|
|
274
|
+
if (nameSize * 1.2 + valueSize * 1.05 > sliceHeight * 0.9) {
|
|
275
|
+
showValueLine = false;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
if (!showValueLine) {
|
|
279
|
+
nameSize = fitNameOnly();
|
|
280
|
+
}
|
|
281
|
+
const maxChars = Math.max(2, Math.floor(innerW / (nameSize * charFactor)));
|
|
282
|
+
const displayName = this.truncateLabel(name, maxChars);
|
|
283
|
+
return { nameSize, valueSize, showValueLine, displayName };
|
|
284
|
+
}
|
|
285
|
+
truncateLabel(name, maxChars) {
|
|
286
|
+
if (name.length <= maxChars)
|
|
287
|
+
return name;
|
|
288
|
+
if (maxChars <= 1)
|
|
289
|
+
return '…';
|
|
290
|
+
return `${name.slice(0, maxChars - 1)}…`;
|
|
291
|
+
}
|
|
292
|
+
pickOnSliceTextColors(sliceColorCss) {
|
|
293
|
+
const resolved = this.resolveCssColor(sliceColorCss);
|
|
294
|
+
const c = this.d3.color(resolved);
|
|
295
|
+
if (!c) {
|
|
296
|
+
return { primary: 'rgba(255,255,255,0.95)', secondary: 'rgba(255,255,255,0.78)' };
|
|
297
|
+
}
|
|
298
|
+
const rgb = this.d3.rgb(c);
|
|
299
|
+
const a = Math.max(0, Math.min(1, rgb.opacity));
|
|
300
|
+
// Blend slice color over white (typical card/surface) so low-alpha intensity ramps read correctly.
|
|
301
|
+
const br = (rgb.r / 255) * a + (1 - a);
|
|
302
|
+
const bg = (rgb.g / 255) * a + (1 - a);
|
|
303
|
+
const bb = (rgb.b / 255) * a + (1 - a);
|
|
304
|
+
const lum = 0.2126 * br + 0.7152 * bg + 0.0722 * bb;
|
|
305
|
+
if (lum > 0.62) {
|
|
306
|
+
return { primary: 'rgba(15,23,42,0.92)', secondary: 'rgba(15,23,42,0.72)' };
|
|
307
|
+
}
|
|
308
|
+
return { primary: 'rgba(255,255,255,0.96)', secondary: 'rgba(255,255,255,0.78)' };
|
|
309
|
+
}
|
|
193
310
|
resolveSliceColor(item, index, opt, minValue, maxValue, resolvedBaseRgb) {
|
|
194
311
|
if (item.color)
|
|
195
312
|
return this.resolveCssColor(item.color);
|
|
@@ -261,11 +378,11 @@ class AXFunnelChartComponent extends AXChartComponent {
|
|
|
261
378
|
}
|
|
262
379
|
}
|
|
263
380
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXFunnelChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
264
|
-
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:
|
|
381
|
+
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:clamp(220px,42vmin,520px);container-type:size;--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: 1;--ax-comp-funnel-dim-opacity: .22;--ax-comp-funnel-slice-stroke: rgba(255, 255, 255, .14);--ax-comp-funnel-slice-shadow: 0 10px 28px rgba(15, 23, 42, .12)}ax-funnel-chart .ax-funnel-chart-container{position:relative;width:100%;height:100%;min-height:inherit;overflow:hidden;border-radius:clamp(10px,2cqw,20px);background-color:rgba(var(--ax-comp-funnel-bg));padding:clamp(.5rem,2cqw,1.25rem);box-sizing:border-box}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);stroke:var(--ax-comp-funnel-slice-stroke);stroke-width:1;vector-effect:non-scaling-stroke;filter:drop-shadow(var(--ax-comp-funnel-slice-shadow));transition:filter .28s cubic-bezier(.4,0,.2,1),opacity .28s cubic-bezier(.4,0,.2,1)}ax-funnel-chart .ax-funnel-chart-container svg .funnel-slice.is-active{opacity:1;filter:drop-shadow(var(--ax-comp-funnel-slice-shadow)) saturate(1.08) brightness(1.03)}ax-funnel-chart .ax-funnel-chart-container svg .funnel-label-group{pointer-events:none;font-family:inherit;font-synthesis:none;text-rendering:geometricPrecision}ax-funnel-chart .ax-funnel-chart-container svg .funnel-label-group .funnel-label-name{font-weight:650;letter-spacing:.02em}ax-funnel-chart .ax-funnel-chart-container svg .funnel-label-group .funnel-label-name--single{font-weight:680;letter-spacing:.015em}ax-funnel-chart .ax-funnel-chart-container svg .funnel-label-group .funnel-label-value{font-weight:560;font-variant-numeric:tabular-nums;letter-spacing:.01em}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:clamp(1.5rem,4cqw,2rem);margin-bottom:.5rem}ax-funnel-chart .ax-funnel-no-data .ax-funnel-no-data-text{font-size:clamp(.875rem,2.5cqw,1rem)}\n"], dependencies: [{ kind: "component", type: AXChartTooltipComponent, selector: "ax-chart-tooltip", inputs: ["data", "position", "visible", "showPercentage", "style"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
265
382
|
}
|
|
266
383
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXFunnelChartComponent, decorators: [{
|
|
267
384
|
type: Component,
|
|
268
|
-
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:
|
|
385
|
+
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:clamp(220px,42vmin,520px);container-type:size;--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: 1;--ax-comp-funnel-dim-opacity: .22;--ax-comp-funnel-slice-stroke: rgba(255, 255, 255, .14);--ax-comp-funnel-slice-shadow: 0 10px 28px rgba(15, 23, 42, .12)}ax-funnel-chart .ax-funnel-chart-container{position:relative;width:100%;height:100%;min-height:inherit;overflow:hidden;border-radius:clamp(10px,2cqw,20px);background-color:rgba(var(--ax-comp-funnel-bg));padding:clamp(.5rem,2cqw,1.25rem);box-sizing:border-box}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);stroke:var(--ax-comp-funnel-slice-stroke);stroke-width:1;vector-effect:non-scaling-stroke;filter:drop-shadow(var(--ax-comp-funnel-slice-shadow));transition:filter .28s cubic-bezier(.4,0,.2,1),opacity .28s cubic-bezier(.4,0,.2,1)}ax-funnel-chart .ax-funnel-chart-container svg .funnel-slice.is-active{opacity:1;filter:drop-shadow(var(--ax-comp-funnel-slice-shadow)) saturate(1.08) brightness(1.03)}ax-funnel-chart .ax-funnel-chart-container svg .funnel-label-group{pointer-events:none;font-family:inherit;font-synthesis:none;text-rendering:geometricPrecision}ax-funnel-chart .ax-funnel-chart-container svg .funnel-label-group .funnel-label-name{font-weight:650;letter-spacing:.02em}ax-funnel-chart .ax-funnel-chart-container svg .funnel-label-group .funnel-label-name--single{font-weight:680;letter-spacing:.015em}ax-funnel-chart .ax-funnel-chart-container svg .funnel-label-group .funnel-label-value{font-weight:560;font-variant-numeric:tabular-nums;letter-spacing:.01em}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:clamp(1.5rem,4cqw,2rem);margin-bottom:.5rem}ax-funnel-chart .ax-funnel-no-data .ax-funnel-no-data-text{font-size:clamp(.875rem,2.5cqw,1rem)}\n"] }]
|
|
269
386
|
}], ctorParameters: () => [] });
|
|
270
387
|
|
|
271
388
|
/**
|
|
@@ -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 labelOffset: 24,\n showTooltip: true,\n animationDuration: 1000,\n animationEasing: 'cubic-out',\n color: 'rgb(99, 102, 241)',\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVubmVsLWNoYXJ0LmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NoYXJ0cy9mdW5uZWwtY2hhcnQvc3JjL2xpYi9mdW5uZWwtY2hhcnQuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0MsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQXdCO0lBQzdELE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7SUFDdEQsU0FBUyxFQUFFLEdBQUc7SUFDZCxVQUFVLEVBQUUsSUFBSTtJQUNoQixXQUFXLEVBQUUsRUFBRTtJQUNmLFdBQVcsRUFBRSxJQUFJO0lBQ2pCLGlCQUFpQixFQUFFLElBQUk7SUFDdkIsZUFBZSxFQUFFLFdBQVc7SUFDNUIsS0FBSyxFQUFFLG1CQUFtQjtJQUMxQixRQUFRLEVBQUU7UUFDUixNQUFNLEVBQUUsMEJBQTBCO1FBQ2xDLFVBQVUsRUFBRSx5QkFBeUI7S0FDdEM7Q0FDRixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxjQUFjLENBQXNCLHdCQUF3QixFQUFFO0lBQ3RHLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQywwQkFBMEI7Q0FDMUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYRnVubmVsQ2hhcnRPcHRpb24gfSBmcm9tICcuL2Z1bm5lbC1jaGFydC50eXBlJztcblxuZXhwb3J0IGNvbnN0IEFYRnVubmVsQ2hhcnREZWZhdWx0Q29uZmlnOiBBWEZ1bm5lbENoYXJ0T3B0aW9uID0ge1xuICBtYXJnaW46IHsgdG9wOiAyMCwgcmlnaHQ6IDE2MCwgYm90dG9tOiAyMCwgbGVmdDogMTYwIH0sXG4gIG5lY2tXaWR0aDogMC4zLFxuICBzaG93TGFiZWxzOiB0cnVlLFxuICBsYWJlbE9mZnNldDogMjQsXG4gIHNob3dUb29sdGlwOiB0cnVlLFxuICBhbmltYXRpb25EdXJhdGlvbjogMTAwMCxcbiAgYW5pbWF0aW9uRWFzaW5nOiAnY3ViaWMtb3V0JyxcbiAgY29sb3I6ICdyZ2IoOTksIDEwMiwgMjQxKScsXG4gIG1lc3NhZ2VzOiB7XG4gICAgbm9EYXRhOiAnTm8gZnVubmVsIGRhdGEgYXZhaWxhYmxlJyxcbiAgICBub0RhdGFJY29uOiAnZmEtbGlnaHQgZmEtZmlsdGVyLWxpc3QnLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IEFYX0ZVTk5FTF9DSEFSVF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48QVhGdW5uZWxDaGFydE9wdGlvbj4oJ0FYX0ZVTk5FTF9DSEFSVF9DT05GSUcnLCB7XG4gIHByb3ZpZGVkSW46ICdyb290JyxcbiAgZmFjdG9yeTogKCkgPT4gQVhGdW5uZWxDaGFydERlZmF1bHRDb25maWcsXG59KTtcbiJdfQ==","import { AXChartComponent, computeTooltipPosition, getEasingFunction, resolveCssColorInContext, } 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 const resolvedBaseForIntensity = this.resolveCssColor(opt.color ?? 'rgb(99, 102, 241)');\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, resolvedBaseForIntensity);\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, resolvedBaseRgb) {\n if (item.color)\n return this.resolveCssColor(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 const raw = palette[idx] ?? opt.color ?? 'rgb(99, 102, 241)';\n return this.resolveCssColor(raw);\n }\n const rangeMin = opt.valueRange?.min ?? minValue;\n const rangeMax = opt.valueRange?.max ?? maxValue;\n const span = rangeMax - rangeMin;\n const t = span === 0 ? 1 : (item.value - rangeMin) / span;\n const clamped = Math.max(0, Math.min(1, t));\n return this.applyIntensityToResolvedRgb(resolvedBaseRgb, clamped);\n }\n /** `resolvedRgb` must be a computed `rgb()` / `rgba()` string (e.g. from {@link resolveCssColor}). */\n applyIntensityToResolvedRgb(resolvedRgb, t) {\n const clamped = Math.max(0, Math.min(1, t));\n const parsed = this.d3.color(resolvedRgb);\n if (!parsed)\n return resolvedRgb;\n const rgb = this.d3.rgb(parsed);\n const minOpacity = 0.12;\n const opacity = minOpacity + clamped * (1 - minOpacity);\n return `rgba(${Math.round(rgb.r)},${Math.round(rgb.g)},${Math.round(rgb.b)},${opacity})`;\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 return resolveCssColorInContext(this.chartContainerEl().nativeElement, 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVubmVsLWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NoYXJ0cy9mdW5uZWwtY2hhcnQvc3JjL2xpYi9mdW5uZWwtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2hhcnRzL2Z1bm5lbC1jaGFydC9zcmMvbGliL2Z1bm5lbC1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZ0JBQWdCLEVBRWhCLHNCQUFzQixFQUN0QixpQkFBaUIsRUFDakIsd0JBQXdCLEdBQ3pCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLHVCQUF1QixFQUFzQixNQUFNLDhCQUE4QixDQUFDO0FBQzNGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFHVCxpQkFBaUIsRUFDakIsZUFBZSxFQUNmLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsR0FBRyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFXL0QsTUFBTSxPQUFPLHNCQUF1QixTQUFRLGdCQUFnQjtJQUMxRCxTQUFTO0lBQ1QsSUFBSSxHQUFHLEtBQUssQ0FBaUIsRUFBRSxnREFBQyxDQUFDO0lBQ2pDLE9BQU8sR0FBRyxLQUFLLENBQXNCLEVBQUUsbURBQUMsQ0FBQztJQUV6QyxVQUFVO0lBQ1YsK0NBQStDO0lBQy9DLFlBQVksR0FBRyxNQUFNLEVBQWdCLENBQUM7SUFFckIsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBNkIs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RUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO3VHQXBSVSxzQkFBc0I7MkZBQXRCLHNCQUFzQixnaEJDcENuQywwY0FXQSxxd0REc0JZLHVCQUF1Qjs7MkZBR3RCLHNCQUFzQjtrQkFSbEMsU0FBUzsrQkFDRSxpQkFBaUIsaUJBR1osaUJBQWlCLENBQUMsSUFBSSxXQUM1QixDQUFDLHVCQUF1QixDQUFDLG1CQUNqQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQVhDaGFydENvbXBvbmVudCxcbiAgQVhDaGFydENvbXBvbmVudEJhc2UsXG4gIGNvbXB1dGVUb29sdGlwUG9zaXRpb24sXG4gIGdldEVhc2luZ0Z1bmN0aW9uLFxuICByZXNvbHZlQ3NzQ29sb3JJbkNvbnRleHQsXG59IGZyb20gJ0BhY29yZXgvY2hhcnRzJztcbmltcG9ydCB7IEFYQ2hhcnRUb29sdGlwQ29tcG9uZW50LCBBWENoYXJ0VG9vbHRpcERhdGEgfSBmcm9tICdAYWNvcmV4L2NoYXJ0cy9jaGFydC10b29sdGlwJztcbmltcG9ydCB7IEFYUGxhdGZvcm0gfSBmcm9tICdAYWNvcmV4L2NvcmUvcGxhdGZvcm0nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgT25EZXN0cm95LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgYWZ0ZXJOZXh0UmVuZGVyLFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbiAgdmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1hcCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBWF9GVU5ORUxfQ0hBUlRfQ09ORklHIH0gZnJvbSAnLi9mdW5uZWwtY2hhcnQuY29uZmlnJztcbmltcG9ydCB7IEFYRnVubmVsQ2hhcnRPcHRpb24sIEFYRnVubmVsRGF0YSB9IGZyb20gJy4vZnVubmVsLWNoYXJ0LnR5cGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC1mdW5uZWwtY2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZnVubmVsLWNoYXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZnVubmVsLWNoYXJ0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGltcG9ydHM6IFtBWENoYXJ0VG9vbHRpcENvbXBvbmVudF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBWEZ1bm5lbENoYXJ0Q29tcG9uZW50IGV4dGVuZHMgQVhDaGFydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgQVhDaGFydENvbXBvbmVudEJhc2Uge1xuICAvLyBJbnB1dHNcbiAgZGF0YSA9IGlucHV0PEFYRnVubmVsRGF0YVtdPihbXSk7XG4gIG9wdGlvbnMgPSBpbnB1dDxBWEZ1bm5lbENoYXJ0T3B0aW9uPih7fSk7XG5cbiAgLy8gT3V0cHV0c1xuICAvKiogRW1pdHRlZCB3aGVuIGEgZnVubmVsIHNlZ21lbnQgaXMgY2xpY2tlZCAqL1xuICBzZWdtZW50Q2xpY2sgPSBvdXRwdXQ8QVhGdW5uZWxEYXRhPigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2hhcnRDb250YWluZXJFbCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4oJ2NoYXJ0Q29udGFpbmVyJyk7XG5cbiAgLy8gU1ZHIFN0YXRlXG4gIHByaXZhdGUgc3ZnRWxlbWVudDogU1ZHU1ZHRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwcm90ZWN0ZWQgZDMhOiB0eXBlb2YgaW1wb3J0KCdkMycpO1xuICBwcml2YXRlIF9pbml0aWFsaXplZCA9IHNpZ25hbChmYWxzZSk7XG4gIHByaXZhdGUgX3JlbmRlcmVkID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJpdmF0ZSBwbGF0Zm9ybVNlcnZpY2UgPSBpbmplY3QoQVhQbGF0Zm9ybSk7XG4gIHByb3RlY3RlZCBpc1J0bCA9IHNpZ25hbCh0aGlzLnBsYXRmb3JtU2VydmljZS5pc1J0bCgpKTtcbiAgcHJpdmF0ZSBkaXJlY3Rpb25TdWI/OiBTdWJzY3JpcHRpb247XG5cbiAgLy8gVG9vbHRpcCBTaWduYWxzXG4gIHByaXZhdGUgX3Rvb2x0aXBWaXNpYmxlID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJpdmF0ZSBfdG9vbHRpcFBvc2l0aW9uID0gc2lnbmFsKHsgeDogMCwgeTogMCB9KTtcbiAgcHJpdmF0ZSBfdG9vbHRpcERhdGEgPSBzaWduYWw8QVhDaGFydFRvb2x0aXBEYXRhPih7IHRpdGxlOiAnJywgdmFsdWU6ICcnIH0pO1xuICBwcml2YXRlIF90b29sdGlwUmFmSWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIHByb3RlY3RlZCB0b29sdGlwVmlzaWJsZSA9IHRoaXMuX3Rvb2x0aXBWaXNpYmxlLmFzUmVhZG9ubHkoKTtcbiAgcHJvdGVjdGVkIHRvb2x0aXBQb3NpdGlvbiA9IHRoaXMuX3Rvb2x0aXBQb3NpdGlvbi5hc1JlYWRvbmx5KCk7XG4gIHByb3RlY3RlZCB0b29sdGlwRGF0YSA9IHRoaXMuX3Rvb2x0aXBEYXRhLmFzUmVhZG9ubHkoKTtcblxuICBwcml2YXRlIGNvbmZpZ1Rva2VuID0gaW5qZWN0KEFYX0ZVTk5FTF9DSEFSVF9DT05GSUcpO1xuXG4gIHByb3RlY3RlZCBlZmZlY3RpdmVPcHRpb25zID0gY29tcHV0ZWQoKCkgPT4gKHtcbiAgICAuLi50aGlzLmNvbmZpZ1Rva2VuLFxuICAgIC4uLnRoaXMub3B0aW9ucygpLFxuICB9KSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG4gICAgICB0aGlzLl9pbml0aWFsaXplZC5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLmxvYWREMygpO1xuICAgICAgdGhpcy5kaXJlY3Rpb25TdWIgPSB0aGlzLnBsYXRmb3JtU2VydmljZS5kaXJlY3Rpb25DaGFuZ2VcbiAgICAgICAgLnBpcGUobWFwKChpKSA9PiBpLmRhdGEgPT09ICdydGwnKSlcbiAgICAgICAgLnN1YnNjcmliZSgoaXNSdGwpID0+IHtcbiAgICAgICAgICB0aGlzLmlzUnRsLnNldChpc1J0bCk7XG4gICAgICAgICAgaWYgKHRoaXMuX3JlbmRlcmVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2hhcnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIC8vIFRyaWdnZXIgdXBkYXRlIG9uIGRhdGEgb3Igb3B0aW9uIGNoYW5nZVxuICAgICAgdGhpcy5kYXRhKCk7XG4gICAgICB0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKTtcbiAgICAgIGlmICh0aGlzLl9yZW5kZXJlZCgpKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ2hhcnQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGlyZWN0aW9uU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2xlYW51cENoYXJ0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbG9hZEQzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmQzKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZDMgPSBhd2FpdCBpbXBvcnQoJ2QzJyk7XG4gICAgICBpZiAodGhpcy5faW5pdGlhbGl6ZWQoKSAmJiB0aGlzLmNoYXJ0Q29udGFpbmVyRWwoKSkge1xuICAgICAgICB0aGlzLmNyZWF0ZUNoYXJ0KCk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVkLnNldCh0cnVlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignQVhGdW5uZWxDaGFydDogRmFpbGVkIHRvIGxvYWQgRDMuanMnLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNyZWF0ZUNoYXJ0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN2Z0VsZW1lbnQpIHRoaXMuc3ZnRWxlbWVudC5yZW1vdmUoKTtcblxuICAgIGNvbnN0IGRhdGEgPSBbLi4udGhpcy5kYXRhKCldLnNvcnQoKGEsIGIpID0+IGIudmFsdWUgLSBhLnZhbHVlKTtcbiAgICBpZiAoIWRhdGEubGVuZ3RoKSB7XG4gICAgICB0aGlzLmhpZGVUb29sdGlwKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jaGFydENvbnRhaW5lckVsKCkubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCB3aWR0aCA9IGNvbnRhaW5lci5jbGllbnRXaWR0aDtcbiAgICBjb25zdCBoZWlnaHQgPSBjb250YWluZXIuY2xpZW50SGVpZ2h0O1xuICAgIGNvbnN0IG9wdCA9IHRoaXMuZWZmZWN0aXZlT3B0aW9ucygpO1xuICAgIGNvbnN0IG1hcmdpbiA9IG9wdC5tYXJnaW47XG4gICAgY29uc3QgaXNSdGwgPSB0aGlzLmlzUnRsKCk7XG4gICAgY29uc3QgbGFiZWxPZmZzZXQgPSBvcHQubGFiZWxPZmZzZXQgPz8gMjQ7XG5cbiAgICB0aGlzLnN2Z0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3N2ZycpO1xuICAgIGNvbnN0IHN2ZyA9IHRoaXMuZDNcbiAgICAgIC5zZWxlY3QodGhpcy5zdmdFbGVtZW50KVxuICAgICAgLmF0dHIoJ3dpZHRoJywgJzEwMCUnKVxuICAgICAgLmF0dHIoJ2hlaWdodCcsICcxMDAlJylcbiAgICAgIC5hdHRyKCd2aWV3Qm94JywgYDAgMCAke3dpZHRofSAke2hlaWdodH1gKVxuICAgICAgLmF0dHIoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAneE1pZFlNaWQgbWVldCcpO1xuXG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuc3ZnRWxlbWVudCk7XG5cbiAgICBjb25zdCBpbm5lcldpZHRoID0gd2lkdGggLSBtYXJnaW4ubGVmdCAtIG1hcmdpbi5yaWdodDtcbiAgICBjb25zdCBpbm5lckhlaWdodCA9IGhlaWdodCAtIG1hcmdpbi50b3AgLSBtYXJnaW4uYm90dG9tO1xuXG4gICAgY29uc3QgZyA9IHN2Zy5hcHBlbmQoJ2cnKS5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKCR7bWFyZ2luLmxlZnR9LCR7bWFyZ2luLnRvcH0pYCk7XG5cbiAgICBjb25zdCBzbGljZUhlaWdodCA9IGlubmVySGVpZ2h0IC8gZGF0YS5sZW5ndGg7XG4gICAgY29uc3QgbWF4VmFsdWUgPSBkYXRhWzBdLnZhbHVlO1xuICAgIGNvbnN0IG1pblZhbHVlID0gZGF0YVtkYXRhLmxlbmd0aCAtIDFdPy52YWx1ZSA/PyBtYXhWYWx1ZTtcbiAgICBjb25zdCBlYXNpbmcgPSBnZXRFYXNpbmdGdW5jdGlvbih0aGlzLmQzLCBvcHQuYW5pbWF0aW9uRWFzaW5nKTtcbiAgICBjb25zdCByZXNvbHZlZEJhc2VGb3JJbnRlbnNpdHkgPSB0aGlzLnJlc29sdmVDc3NDb2xvcihvcHQuY29sb3IgPz8gJ3JnYig5OSwgMTAyLCAyNDEpJyk7XG5cbiAgICBkYXRhLmZvckVhY2goKGQsIGkpID0+IHtcbiAgICAgIGNvbnN0IHRvcFZhbCA9IGQudmFsdWU7XG4gICAgICBjb25zdCBib3R0b21WYWwgPSBkYXRhW2kgKyAxXT8udmFsdWUgPz8gZC52YWx1ZSAqIG9wdC5uZWNrV2lkdGg7XG5cbiAgICAgIGNvbnN0IHRvcFcgPSAodG9wVmFsIC8gbWF4VmFsdWUpICogaW5uZXJXaWR0aDtcbiAgICAgIGNvbnN0IGJvdHRvbVcgPSAoYm90dG9tVmFsIC8gbWF4VmFsdWUpICogaW5uZXJXaWR0aDtcblxuICAgICAgY29uc3QgeFRvcCA9IChpbm5lcldpZHRoIC0gdG9wVykgLyAyO1xuICAgICAgY29uc3QgeEJvdHRvbSA9IChpbm5lcldpZHRoIC0gYm90dG9tVykgLyAyO1xuICAgICAgY29uc3QgeVRvcCA9IGkgKiBzbGljZUhlaWdodDtcbiAgICAgIGNvbnN0IHlCb3R0b20gPSAoaSArIDEpICogc2xpY2VIZWlnaHQ7XG5cbiAgICAgIGNvbnN0IHBhdGhEYXRhID0gYE0gJHt4VG9wfSwke3lUb3B9IEwgJHt4VG9wICsgdG9wV30sJHt5VG9wfSBMICR7eEJvdHRvbSArIGJvdHRvbVd9LCR7eUJvdHRvbX0gTCAke3hCb3R0b219LCR7eUJvdHRvbX0gWmA7XG5cbiAgICAgIGNvbnN0IHNsaWNlR3JvdXAgPSBnLmFwcGVuZCgnZycpLmF0dHIoJ2NsYXNzJywgJ2Z1bm5lbC1zbGljZS1jb250YWluZXInKTtcblxuICAgICAgY29uc3QgY29tcHV0ZWRDb2xvciA9IHRoaXMucmVzb2x2ZVNsaWNlQ29sb3IoZCwgaSwgb3B0LCBtaW5WYWx1ZSwgbWF4VmFsdWUsIHJlc29sdmVkQmFzZUZvckludGVuc2l0eSk7XG4gICAgICBjb25zdCBwYXRoID0gc2xpY2VHcm91cFxuICAgICAgICAuYXBwZW5kKCdwYXRoJylcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2Z1bm5lbC1zbGljZScpXG4gICAgICAgIC5hdHRyKCdkJywgcGF0aERhdGEpXG4gICAgICAgIC5hdHRyKCdmaWxsJywgY29tcHV0ZWRDb2xvcilcbiAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgMClcbiAgICAgICAgLm9uKCdtb3VzZWVudGVyJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgc3ZnLmNsYXNzZWQoJ2lzLWRpbW1lZCcsIHRydWUpO1xuICAgICAgICAgIHRoaXMuZDMuc2VsZWN0KGV2ZW50LmN1cnJlbnRUYXJnZXQpLmNsYXNzZWQoJ2lzLWFjdGl2ZScsIHRydWUpO1xuICAgICAgICAgIHRoaXMuc2hvd1Rvb2x0aXAoZXZlbnQsIGQsIGNvbXB1dGVkQ29sb3IpO1xuICAgICAgICB9KVxuICAgICAgICAub24oJ21vdXNlbW92ZScsIChldmVudCkgPT4gdGhpcy51cGRhdGVUb29sdGlwUG9zaXRpb24oZXZlbnQpKVxuICAgICAgICAub24oJ2NsaWNrJywgKCkgPT4gdGhpcy5zZWdtZW50Q2xpY2suZW1pdChkKSlcbiAgICAgICAgLm9uKCdtb3VzZWxlYXZlJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgc3ZnLmNsYXNzZWQoJ2lzLWRpbW1lZCcsIGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmQzLnNlbGVjdChldmVudC5jdXJyZW50VGFyZ2V0KS5jbGFzc2VkKCdpcy1hY3RpdmUnLCBmYWxzZSk7XG4gICAgICAgICAgdGhpcy5oaWRlVG9vbHRpcCgpO1xuICAgICAgICB9KTtcblxuICAgICAgcGF0aFxuICAgICAgICAudHJhbnNpdGlvbigpXG4gICAgICAgIC5kdXJhdGlvbihvcHQuYW5pbWF0aW9uRHVyYXRpb24pXG4gICAgICAgIC5kZWxheShpICogODApXG4gICAgICAgIC5lYXNlKGVhc2luZylcbiAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgMSk7XG5cbiAgICAgIGlmIChvcHQuc2hvd0xhYmVscykge1xuICAgICAgICBjb25zdCBsYWJlbEdyb3VwID0gc2xpY2VHcm91cC5hcHBlbmQoJ2cnKS5hdHRyKCdjbGFzcycsICdmdW5uZWwtbGFiZWwtZ3JvdXAnKS5zdHlsZSgnb3BhY2l0eScsIDApO1xuICAgICAgICBjb25zdCBsYWJlbFggPSBpc1J0bCA/IGlubmVyV2lkdGggLyAyIC0gdG9wVyAvIDIgLSBsYWJlbE9mZnNldCA6IGlubmVyV2lkdGggLyAyICsgdG9wVyAvIDIgKyBsYWJlbE9mZnNldDtcbiAgICAgICAgLy8gSW4gUlRMIGRvY3VtZW50cywgU1ZHIGB0ZXh0LWFuY2hvcjogZW5kYCBjYW4gZXhwYW5kICppbnRvKiB0aGUgcGxvdCBhcmVhIGJlY2F1c2UgXCJlbmRcIlxuICAgICAgICAvLyBiZWNvbWVzIHRoZSBsb2dpY2FsIGxlZnQgZWRnZS4gVXNpbmcgYHN0YXJ0YCBtYWtlcyB0aGUgbGFiZWwgZXhwYW5kIGF3YXkgZnJvbSB0aGUgc2xpY2VcbiAgICAgICAgLy8gb24gYm90aCBMVFIgKHRvIHRoZSByaWdodCkgYW5kIFJUTCAodG8gdGhlIGxlZnQpLlxuICAgICAgICBjb25zdCBhbmNob3IgPSAnc3RhcnQnO1xuXG4gICAgICAgIGxhYmVsR3JvdXBcbiAgICAgICAgICAuYXBwZW5kKCd0ZXh0JylcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCAnZnVubmVsLWxhYmVsLW5hbWUnKVxuICAgICAgICAgIC5hdHRyKCd4JywgbGFiZWxYKVxuICAgICAgICAgIC5hdHRyKCd5JywgeVRvcCArIHNsaWNlSGVpZ2h0IC8gMiAtIDUpXG4gICAgICAgICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgYW5jaG9yKVxuICAgICAgICAgIC50ZXh0KGQubmFtZSk7XG5cbiAgICAgICAgbGFiZWxHcm91cFxuICAgICAgICAgIC5hcHBlbmQoJ3RleHQnKVxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdmdW5uZWwtbGFiZWwtdmFsdWUnKVxuICAgICAgICAgIC5hdHRyKCd4JywgbGFiZWxYKVxuICAgICAgICAgIC5hdHRyKCd5JywgeVRvcCArIHNsaWNlSGVpZ2h0IC8gMiArIDE1KVxuICAgICAgICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsIGFuY2hvcilcbiAgICAgICAgICAudGV4dChkLnZhbHVlLnRvTG9jYWxlU3RyaW5nKCkpO1xuXG4gICAgICAgIGxhYmVsR3JvdXBcbiAgICAgICAgICAudHJhbnNpdGlvbigpXG4gICAgICAgICAgLmR1cmF0aW9uKDYwMClcbiAgICAgICAgICAuZGVsYXkoNDAwICsgaSAqIDgwKVxuICAgICAgICAgIC5zdHlsZSgnb3BhY2l0eScsIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlU2xpY2VDb2xvcihcbiAgICBpdGVtOiBBWEZ1bm5lbERhdGEsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBvcHQ6IEFYRnVubmVsQ2hhcnRPcHRpb24sXG4gICAgbWluVmFsdWU6IG51bWJlcixcbiAgICBtYXhWYWx1ZTogbnVtYmVyLFxuICAgIHJlc29sdmVkQmFzZVJnYjogc3RyaW5nLFxuICApOiBzdHJpbmcge1xuICAgIGlmIChpdGVtLmNvbG9yKSByZXR1cm4gdGhpcy5yZXNvbHZlQ3NzQ29sb3IoaXRlbS5jb2xvcik7XG5cbiAgICBjb25zdCBwYWxldHRlID0gb3B0LmNvbG9ycz8uZmlsdGVyKEJvb2xlYW4pID8/IFtdO1xuICAgIGlmIChwYWxldHRlLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGtleSA9IFN0cmluZyhpdGVtLmlkID8/IGl0ZW0ubmFtZSA/PyBpbmRleCk7XG4gICAgICBjb25zdCBpZHggPSB0aGlzLmhhc2hTdHJpbmdUb1VpbnQzMihrZXkpICUgcGFsZXR0ZS5sZW5ndGg7XG4gICAgICBjb25zdCByYXcgPSBwYWxldHRlW2lkeF0gPz8gb3B0LmNvbG9yID8/ICdyZ2IoOTksIDEwMiwgMjQxKSc7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZlQ3NzQ29sb3IocmF3KTtcbiAgICB9XG5cbiAgICBjb25zdCByYW5nZU1pbiA9IG9wdC52YWx1ZVJhbmdlPy5taW4gPz8gbWluVmFsdWU7XG4gICAgY29uc3QgcmFuZ2VNYXggPSBvcHQudmFsdWVSYW5nZT8ubWF4ID8/IG1heFZhbHVlO1xuICAgIGNvbnN0IHNwYW4gPSByYW5nZU1heCAtIHJhbmdlTWluO1xuICAgIGNvbnN0IHQgPSBzcGFuID09PSAwID8gMSA6IChpdGVtLnZhbHVlIC0gcmFuZ2VNaW4pIC8gc3BhbjtcbiAgICBjb25zdCBjbGFtcGVkID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgdCkpO1xuICAgIHJldHVybiB0aGlzLmFwcGx5SW50ZW5zaXR5VG9SZXNvbHZlZFJnYihyZXNvbHZlZEJhc2VSZ2IsIGNsYW1wZWQpO1xuICB9XG5cbiAgLyoqIGByZXNvbHZlZFJnYmAgbXVzdCBiZSBhIGNvbXB1dGVkIGByZ2IoKWAgLyBgcmdiYSgpYCBzdHJpbmcgKGUuZy4gZnJvbSB7QGxpbmsgcmVzb2x2ZUNzc0NvbG9yfSkuICovXG4gIHByaXZhdGUgYXBwbHlJbnRlbnNpdHlUb1Jlc29sdmVkUmdiKHJlc29sdmVkUmdiOiBzdHJpbmcsIHQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgY2xhbXBlZCA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHQpKTtcbiAgICBjb25zdCBwYXJzZWQgPSB0aGlzLmQzLmNvbG9yKHJlc29sdmVkUmdiKTtcbiAgICBpZiAoIXBhcnNlZCkgcmV0dXJuIHJlc29sdmVkUmdiO1xuICAgIGNvbnN0IHJnYiA9IHRoaXMuZDMucmdiKHBhcnNlZCk7XG4gICAgY29uc3QgbWluT3BhY2l0eSA9IDAuMTI7XG4gICAgY29uc3Qgb3BhY2l0eSA9IG1pbk9wYWNpdHkgKyBjbGFtcGVkICogKDEgLSBtaW5PcGFjaXR5KTtcbiAgICByZXR1cm4gYHJnYmEoJHtNYXRoLnJvdW5kKHJnYi5yKX0sJHtNYXRoLnJvdW5kKHJnYi5nKX0sJHtNYXRoLnJvdW5kKHJnYi5iKX0sJHtvcGFjaXR5fSlgO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNoU3RyaW5nVG9VaW50MzIoaW5wdXQ6IHN0cmluZyk6IG51bWJlciB7XG4gICAgbGV0IGhhc2ggPSA1MzgxO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGhhc2ggPSAoaGFzaCAqIDMzKSBeIGlucHV0LmNoYXJDb2RlQXQoaSk7XG4gICAgfVxuICAgIHJldHVybiBoYXNoID4+PiAwO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlQ3NzQ29sb3IoY29sb3I6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlc29sdmVDc3NDb2xvckluQ29udGV4dCh0aGlzLmNoYXJ0Q29udGFpbmVyRWwoKS5uYXRpdmVFbGVtZW50LCBjb2xvcik7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlQ2hhcnQoKTogdm9pZCB7XG4gICAgdGhpcy5jcmVhdGVDaGFydCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93VG9vbHRpcChldmVudDogTW91c2VFdmVudCwgaXRlbTogQVhGdW5uZWxEYXRhLCBjb2xvcjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKS5zaG93VG9vbHRpcCkgcmV0dXJuO1xuICAgIHRoaXMuX3Rvb2x0aXBEYXRhLnNldCh7IHRpdGxlOiBpdGVtLm5hbWUsIHZhbHVlOiBpdGVtLnZhbHVlLnRvTG9jYWxlU3RyaW5nKCksIGNvbG9yIH0pO1xuICAgIHRoaXMuX3Rvb2x0aXBWaXNpYmxlLnNldCh0cnVlKTtcbiAgICB0aGlzLnVwZGF0ZVRvb2x0aXBQb3NpdGlvbihldmVudCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVRvb2x0aXBQb3NpdGlvbihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl90b29sdGlwUmFmSWQpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3Rvb2x0aXBSYWZJZCk7XG4gICAgdGhpcy5fdG9vbHRpcFJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+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
|
+
{"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: 16, right: 16, bottom: 16, left: 16 },\n neckWidth: 0.3,\n showLabels: true,\n showSegmentValues: true,\n labelOffset: 24,\n showTooltip: true,\n animationDuration: 1000,\n animationEasing: 'cubic-out',\n color: 'rgb(var(--ax-sys-color-primary-500))',\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVubmVsLWNoYXJ0LmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NoYXJ0cy9mdW5uZWwtY2hhcnQvc3JjL2xpYi9mdW5uZWwtY2hhcnQuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0MsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQXdCO0lBQzdELE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7SUFDcEQsU0FBUyxFQUFFLEdBQUc7SUFDZCxVQUFVLEVBQUUsSUFBSTtJQUNoQixpQkFBaUIsRUFBRSxJQUFJO0lBQ3ZCLFdBQVcsRUFBRSxFQUFFO0lBQ2YsV0FBVyxFQUFFLElBQUk7SUFDakIsaUJBQWlCLEVBQUUsSUFBSTtJQUN2QixlQUFlLEVBQUUsV0FBVztJQUM1QixLQUFLLEVBQUUsc0NBQXNDO0lBQzdDLFFBQVEsRUFBRTtRQUNSLE1BQU0sRUFBRSwwQkFBMEI7UUFDbEMsVUFBVSxFQUFFLHlCQUF5QjtLQUN0QztDQUNGLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FBc0Isd0JBQXdCLEVBQUU7SUFDdEcsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLDBCQUEwQjtDQUMxQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhGdW5uZWxDaGFydE9wdGlvbiB9IGZyb20gJy4vZnVubmVsLWNoYXJ0LnR5cGUnO1xuXG5leHBvcnQgY29uc3QgQVhGdW5uZWxDaGFydERlZmF1bHRDb25maWc6IEFYRnVubmVsQ2hhcnRPcHRpb24gPSB7XG4gIG1hcmdpbjogeyB0b3A6IDE2LCByaWdodDogMTYsIGJvdHRvbTogMTYsIGxlZnQ6IDE2IH0sXG4gIG5lY2tXaWR0aDogMC4zLFxuICBzaG93TGFiZWxzOiB0cnVlLFxuICBzaG93U2VnbWVudFZhbHVlczogdHJ1ZSxcbiAgbGFiZWxPZmZzZXQ6IDI0LFxuICBzaG93VG9vbHRpcDogdHJ1ZSxcbiAgYW5pbWF0aW9uRHVyYXRpb246IDEwMDAsXG4gIGFuaW1hdGlvbkVhc2luZzogJ2N1YmljLW91dCcsXG4gIGNvbG9yOiAncmdiKHZhcigtLWF4LXN5cy1jb2xvci1wcmltYXJ5LTUwMCkpJyxcbiAgbWVzc2FnZXM6IHtcbiAgICBub0RhdGE6ICdObyBmdW5uZWwgZGF0YSBhdmFpbGFibGUnLFxuICAgIG5vRGF0YUljb246ICdmYS1saWdodCBmYS1maWx0ZXItbGlzdCcsXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgQVhfRlVOTkVMX0NIQVJUX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBWEZ1bm5lbENoYXJ0T3B0aW9uPignQVhfRlVOTkVMX0NIQVJUX0NPTkZJRycsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiAoKSA9PiBBWEZ1bm5lbENoYXJ0RGVmYXVsdENvbmZpZyxcbn0pO1xuIl19","import { AXChartComponent, computeTooltipPosition, getEasingFunction, resolveCssColorInContext, } from '@acorex/charts';\nimport { AXChartTooltipComponent } from '@acorex/charts/chart-tooltip';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, afterNextRender, computed, effect, inject, input, output, 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 // 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 resizeObserver = null;\n resizeDebounceId = null;\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.attachResizeObserver();\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.detachResizeObserver();\n this.cleanupChart();\n }\n attachResizeObserver() {\n if (typeof ResizeObserver === 'undefined')\n return;\n const el = this.chartContainerEl().nativeElement;\n this.resizeObserver = new ResizeObserver(() => {\n if (this.resizeDebounceId !== null) {\n clearTimeout(this.resizeDebounceId);\n }\n this.resizeDebounceId = window.setTimeout(() => {\n this.resizeDebounceId = null;\n if (this._rendered() && this.d3) {\n this.updateChart();\n }\n }, 80);\n });\n this.resizeObserver.observe(el);\n }\n detachResizeObserver() {\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n if (this.resizeDebounceId !== null) {\n clearTimeout(this.resizeDebounceId);\n this.resizeDebounceId = null;\n }\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 = Math.max(0, container.clientWidth);\n const height = Math.max(0, container.clientHeight);\n if (width < 2 || height < 2) {\n return;\n }\n const opt = this.effectiveOptions();\n const margin = opt.margin;\n const easing = getEasingFunction(this.d3, opt.animationEasing);\n const resolvedBaseForIntensity = this.resolveCssColor(opt.color ?? 'rgb(99, 102, 241)');\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 .attr('class', 'ax-funnel-svg');\n container.appendChild(this.svgElement);\n const innerWidth = width - margin.left - margin.right;\n const innerHeight = height - margin.top - margin.bottom;\n if (innerWidth < 2 || innerHeight < 2) {\n return;\n }\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 showSegmentValues = opt.showSegmentValues !== false;\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, resolvedBaseForIntensity);\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 sliceGroup\n .append('title')\n .text(`${d.name}: ${d.value.toLocaleString()}`);\n if (opt.showLabels) {\n const { cx, cy, width: midW } = this.trapezoidInteriorMetrics(xTop, topW, xBottom, bottomW, yTop, yBottom);\n const { nameSize, valueSize, showValueLine, displayName } = this.computeSegmentLabelTypography(sliceHeight, midW, d.name, showSegmentValues);\n const { primary, secondary } = this.pickOnSliceTextColors(computedColor);\n const labelGroup = sliceGroup.append('g').attr('class', 'funnel-label-group').style('opacity', 0);\n const lineGap = Math.max(2, sliceHeight * 0.06);\n if (showValueLine && valueSize > 0) {\n labelGroup\n .append('text')\n .attr('class', 'funnel-label-name')\n .attr('x', cx)\n .attr('y', cy - (valueSize * 0.55 + lineGap * 0.5))\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .style('font-size', `${nameSize}px`)\n .style('fill', primary)\n .text(displayName);\n labelGroup\n .append('text')\n .attr('class', 'funnel-label-value')\n .attr('x', cx)\n .attr('y', cy + (nameSize * 0.55 + lineGap * 0.5))\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .style('font-size', `${valueSize}px`)\n .style('fill', secondary)\n .text(d.value.toLocaleString());\n }\n else {\n labelGroup\n .append('text')\n .attr('class', 'funnel-label-name funnel-label-name--single')\n .attr('x', cx)\n .attr('y', cy)\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .style('font-size', `${nameSize}px`)\n .style('fill', primary)\n .text(displayName);\n }\n labelGroup\n .transition()\n .duration(600)\n .delay(400 + i * 80)\n .style('opacity', 1);\n }\n });\n }\n trapezoidInteriorMetrics(xTop, topW, xBottom, bottomW, yTop, yBottom) {\n const cy = (yTop + yBottom) / 2;\n const denom = yBottom - yTop || 1;\n const t = (cy - yTop) / denom;\n const xL = xTop + t * (xBottom - xTop);\n const xR = xTop + topW + t * (xBottom + bottomW - (xTop + topW));\n return { cx: (xL + xR) / 2, cy, width: Math.max(0, xR - xL) };\n }\n computeSegmentLabelTypography(sliceHeight, segmentInnerWidth, name, wantValue) {\n const charFactor = 0.52;\n const minFont = 6.5;\n const maxName = 15;\n const innerW = Math.max(segmentInnerWidth, 8);\n let showValueLine = wantValue && sliceHeight >= 17 && innerW >= 38;\n const fitNameOnly = () => {\n const raw = Math.min(maxName + 2, sliceHeight * 0.42, innerW / Math.max(name.length * charFactor, 2.5));\n return Math.max(minFont, raw);\n };\n const fitBoth = () => {\n const vBudget = sliceHeight * 0.76;\n let nameSize = Math.min(maxName, vBudget / 2.45, innerW / Math.max(name.length * charFactor, 2.5));\n nameSize = Math.max(minFont, nameSize);\n let valueSize = Math.max(minFont, Math.min(nameSize * 0.88, vBudget / 2.45));\n const stackH = nameSize * 1.18 + valueSize * 1.08 + sliceHeight * 0.05;\n if (stackH > sliceHeight * 0.88) {\n const scale = (sliceHeight * 0.88) / stackH;\n nameSize = Math.max(minFont, nameSize * scale);\n valueSize = Math.max(minFont, valueSize * scale);\n }\n return { nameSize, valueSize };\n };\n let nameSize;\n let valueSize = 0;\n if (showValueLine) {\n const both = fitBoth();\n nameSize = both.nameSize;\n valueSize = both.valueSize;\n if (nameSize * 1.2 + valueSize * 1.05 > sliceHeight * 0.9) {\n showValueLine = false;\n }\n }\n if (!showValueLine) {\n nameSize = fitNameOnly();\n }\n const maxChars = Math.max(2, Math.floor(innerW / (nameSize * charFactor)));\n const displayName = this.truncateLabel(name, maxChars);\n return { nameSize, valueSize, showValueLine, displayName };\n }\n truncateLabel(name, maxChars) {\n if (name.length <= maxChars)\n return name;\n if (maxChars <= 1)\n return '…';\n return `${name.slice(0, maxChars - 1)}…`;\n }\n pickOnSliceTextColors(sliceColorCss) {\n const resolved = this.resolveCssColor(sliceColorCss);\n const c = this.d3.color(resolved);\n if (!c) {\n return { primary: 'rgba(255,255,255,0.95)', secondary: 'rgba(255,255,255,0.78)' };\n }\n const rgb = this.d3.rgb(c);\n const a = Math.max(0, Math.min(1, rgb.opacity));\n // Blend slice color over white (typical card/surface) so low-alpha intensity ramps read correctly.\n const br = (rgb.r / 255) * a + (1 - a);\n const bg = (rgb.g / 255) * a + (1 - a);\n const bb = (rgb.b / 255) * a + (1 - a);\n const lum = 0.2126 * br + 0.7152 * bg + 0.0722 * bb;\n if (lum > 0.62) {\n return { primary: 'rgba(15,23,42,0.92)', secondary: 'rgba(15,23,42,0.72)' };\n }\n return { primary: 'rgba(255,255,255,0.96)', secondary: 'rgba(255,255,255,0.78)' };\n }\n resolveSliceColor(item, index, opt, minValue, maxValue, resolvedBaseRgb) {\n if (item.color)\n return this.resolveCssColor(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 const raw = palette[idx] ?? opt.color ?? 'rgb(99, 102, 241)';\n return this.resolveCssColor(raw);\n }\n const rangeMin = opt.valueRange?.min ?? minValue;\n const rangeMax = opt.valueRange?.max ?? maxValue;\n const span = rangeMax - rangeMin;\n const t = span === 0 ? 1 : (item.value - rangeMin) / span;\n const clamped = Math.max(0, Math.min(1, t));\n return this.applyIntensityToResolvedRgb(resolvedBaseRgb, clamped);\n }\n /** `resolvedRgb` must be a computed `rgb()` / `rgba()` string (e.g. from {@link resolveCssColor}). */\n applyIntensityToResolvedRgb(resolvedRgb, t) {\n const clamped = Math.max(0, Math.min(1, t));\n const parsed = this.d3.color(resolvedRgb);\n if (!parsed)\n return resolvedRgb;\n const rgb = this.d3.rgb(parsed);\n const minOpacity = 0.12;\n const opacity = minOpacity + clamped * (1 - minOpacity);\n return `rgba(${Math.round(rgb.r)},${Math.round(rgb.g)},${Math.round(rgb.b)},${opacity})`;\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 return resolveCssColorInContext(this.chartContainerEl().nativeElement, 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:clamp(220px,42vmin,520px);container-type:size;--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: 1;--ax-comp-funnel-dim-opacity: .22;--ax-comp-funnel-slice-stroke: rgba(255, 255, 255, .14);--ax-comp-funnel-slice-shadow: 0 10px 28px rgba(15, 23, 42, .12)}ax-funnel-chart .ax-funnel-chart-container{position:relative;width:100%;height:100%;min-height:inherit;overflow:hidden;border-radius:clamp(10px,2cqw,20px);background-color:rgba(var(--ax-comp-funnel-bg));padding:clamp(.5rem,2cqw,1.25rem);box-sizing:border-box}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);stroke:var(--ax-comp-funnel-slice-stroke);stroke-width:1;vector-effect:non-scaling-stroke;filter:drop-shadow(var(--ax-comp-funnel-slice-shadow));transition:filter .28s cubic-bezier(.4,0,.2,1),opacity .28s cubic-bezier(.4,0,.2,1)}ax-funnel-chart .ax-funnel-chart-container svg .funnel-slice.is-active{opacity:1;filter:drop-shadow(var(--ax-comp-funnel-slice-shadow)) saturate(1.08) brightness(1.03)}ax-funnel-chart .ax-funnel-chart-container svg .funnel-label-group{pointer-events:none;font-family:inherit;font-synthesis:none;text-rendering:geometricPrecision}ax-funnel-chart .ax-funnel-chart-container svg .funnel-label-group .funnel-label-name{font-weight:650;letter-spacing:.02em}ax-funnel-chart .ax-funnel-chart-container svg .funnel-label-group .funnel-label-name--single{font-weight:680;letter-spacing:.015em}ax-funnel-chart .ax-funnel-chart-container svg .funnel-label-group .funnel-label-value{font-weight:560;font-variant-numeric:tabular-nums;letter-spacing:.01em}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:clamp(1.5rem,4cqw,2rem);margin-bottom:.5rem}ax-funnel-chart .ax-funnel-no-data .ax-funnel-no-data-text{font-size:clamp(.875rem,2.5cqw,1rem)}\\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:clamp(220px,42vmin,520px);container-type:size;--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: 1;--ax-comp-funnel-dim-opacity: .22;--ax-comp-funnel-slice-stroke: rgba(255, 255, 255, .14);--ax-comp-funnel-slice-shadow: 0 10px 28px rgba(15, 23, 42, .12)}ax-funnel-chart .ax-funnel-chart-container{position:relative;width:100%;height:100%;min-height:inherit;overflow:hidden;border-radius:clamp(10px,2cqw,20px);background-color:rgba(var(--ax-comp-funnel-bg));padding:clamp(.5rem,2cqw,1.25rem);box-sizing:border-box}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);stroke:var(--ax-comp-funnel-slice-stroke);stroke-width:1;vector-effect:non-scaling-stroke;filter:drop-shadow(var(--ax-comp-funnel-slice-shadow));transition:filter .28s cubic-bezier(.4,0,.2,1),opacity .28s cubic-bezier(.4,0,.2,1)}ax-funnel-chart .ax-funnel-chart-container svg .funnel-slice.is-active{opacity:1;filter:drop-shadow(var(--ax-comp-funnel-slice-shadow)) saturate(1.08) brightness(1.03)}ax-funnel-chart .ax-funnel-chart-container svg .funnel-label-group{pointer-events:none;font-family:inherit;font-synthesis:none;text-rendering:geometricPrecision}ax-funnel-chart .ax-funnel-chart-container svg .funnel-label-group .funnel-label-name{font-weight:650;letter-spacing:.02em}ax-funnel-chart .ax-funnel-chart-container svg .funnel-label-group .funnel-label-name--single{font-weight:680;letter-spacing:.015em}ax-funnel-chart .ax-funnel-chart-container svg .funnel-label-group .funnel-label-value{font-weight:560;font-variant-numeric:tabular-nums;letter-spacing:.01em}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:clamp(1.5rem,4cqw,2rem);margin-bottom:.5rem}ax-funnel-chart .ax-funnel-no-data .ax-funnel-no-data-text{font-size:clamp(.875rem,2.5cqw,1rem)}\\n\"] }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVubmVsLWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NoYXJ0cy9mdW5uZWwtY2hhcnQvc3JjL2xpYi9mdW5uZWwtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2hhcnRzL2Z1bm5lbC1jaGFydC9zcmMvbGliL2Z1bm5lbC1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZ0JBQWdCLEVBRWhCLHNCQUFzQixFQUN0QixpQkFBaUIsRUFDakIsd0JBQXdCLEdBQ3pCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLHVCQUF1QixFQUFzQixNQUFNLDhCQUE4QixDQUFDO0FBQzNGLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUdULGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQVcvRCxNQUFNLE9BQU8sc0JBQXVCLFNBQVEsZ0JBQWdCO0lBQzFELFNBQVM7SUFDVCxJQUFJLEdBQUcsS0FBSyxDQUFpQixFQUFFLGdEQUFDLENBQUM7SUFDakMsT0FBTyxHQUFHLEtBQUssQ0FBc0IsRUFBRSxtREFBQyxDQUFDO0lBRXpDLFVBQVU7SUFDViwrQ0FBK0M7SUFDL0MsWUFBWSxHQUFHLE1BQU0sRUFBZ0IsQ0FBQztJQUVyQixnQkFBZ0IsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUE2QixnQkFBZ0IsQ0FBQyxDQUFDO0lBRXJHLFlBQVk7SUFDSixVQUFVLEdBQXlCLElBQUksQ0FBQztJQUN0QyxFQUFFLENBQXVCO0lBQzNCLFlBQVksR0FB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QUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO3VHQS9hVSxzQkFBc0I7MkZBQXRCLHNCQUFzQixnaEJDbENuQywwY0FXQSx5OEVEb0JZLHVCQUF1Qjs7MkZBR3RCLHNCQUFzQjtrQkFSbEMsU0FBUzsrQkFDRSxpQkFBaUIsaUJBR1osaUJBQWlCLENBQUMsSUFBSSxXQUM1QixDQUFDLHVCQUF1QixDQUFDLG1CQUNqQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQVhDaGFydENvbXBvbmVudCxcbiAgQVhDaGFydENvbXBvbmVudEJhc2UsXG4gIGNvbXB1dGVUb29sdGlwUG9zaXRpb24sXG4gIGdldEVhc2luZ0Z1bmN0aW9uLFxuICByZXNvbHZlQ3NzQ29sb3JJbkNvbnRleHQsXG59IGZyb20gJ0BhY29yZXgvY2hhcnRzJztcbmltcG9ydCB7IEFYQ2hhcnRUb29sdGlwQ29tcG9uZW50LCBBWENoYXJ0VG9vbHRpcERhdGEgfSBmcm9tICdAYWNvcmV4L2NoYXJ0cy9jaGFydC10b29sdGlwJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIE9uRGVzdHJveSxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGFmdGVyTmV4dFJlbmRlcixcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWF9GVU5ORUxfQ0hBUlRfQ09ORklHIH0gZnJvbSAnLi9mdW5uZWwtY2hhcnQuY29uZmlnJztcbmltcG9ydCB7IEFYRnVubmVsQ2hhcnRPcHRpb24sIEFYRnVubmVsRGF0YSB9IGZyb20gJy4vZnVubmVsLWNoYXJ0LnR5cGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC1mdW5uZWwtY2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZnVubmVsLWNoYXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZnVubmVsLWNoYXJ0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGltcG9ydHM6IFtBWENoYXJ0VG9vbHRpcENvbXBvbmVudF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBWEZ1bm5lbENoYXJ0Q29tcG9uZW50IGV4dGVuZHMgQVhDaGFydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgQVhDaGFydENvbXBvbmVudEJhc2Uge1xuICAvLyBJbnB1dHNcbiAgZGF0YSA9IGlucHV0PEFYRnVubmVsRGF0YVtdPihbXSk7XG4gIG9wdGlvbnMgPSBpbnB1dDxBWEZ1bm5lbENoYXJ0T3B0aW9uPih7fSk7XG5cbiAgLy8gT3V0cHV0c1xuICAvKiogRW1pdHRlZCB3aGVuIGEgZnVubmVsIHNlZ21lbnQgaXMgY2xpY2tlZCAqL1xuICBzZWdtZW50Q2xpY2sgPSBvdXRwdXQ8QVhGdW5uZWxEYXRhPigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2hhcnRDb250YWluZXJFbCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4oJ2NoYXJ0Q29udGFpbmVyJyk7XG5cbiAgLy8gU1ZHIFN0YXRlXG4gIHByaXZhdGUgc3ZnRWxlbWVudDogU1ZHU1ZHRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwcm90ZWN0ZWQgZDMhOiB0eXBlb2YgaW1wb3J0KCdkMycpO1xuICBwcml2YXRlIF9pbml0aWFsaXplZCA9IHNpZ25hbChmYWxzZSk7XG4gIHByaXZhdGUgX3JlbmRlcmVkID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJpdmF0ZSByZXNpemVPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZXNpemVEZWJvdW5jZUlkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAvLyBUb29sdGlwIFNpZ25hbHNcbiAgcHJpdmF0ZSBfdG9vbHRpcFZpc2libGUgPSBzaWduYWwoZmFsc2UpO1xuICBwcml2YXRlIF90b29sdGlwUG9zaXRpb24gPSBzaWduYWwoeyB4OiAwLCB5OiAwIH0pO1xuICBwcml2YXRlIF90b29sdGlwRGF0YSA9IHNpZ25hbDxBWENoYXJ0VG9vbHRpcERhdGE+KHsgdGl0bGU6ICcnLCB2YWx1ZTogJycgfSk7XG4gIHByaXZhdGUgX3Rvb2x0aXBSYWZJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJvdGVjdGVkIHRvb2x0aXBWaXNpYmxlID0gdGhpcy5fdG9vbHRpcFZpc2libGUuYXNSZWFkb25seSgpO1xuICBwcm90ZWN0ZWQgdG9vbHRpcFBvc2l0aW9uID0gdGhpcy5fdG9vbHRpcFBvc2l0aW9uLmFzUmVhZG9ubHkoKTtcbiAgcHJvdGVjdGVkIHRvb2x0aXBEYXRhID0gdGhpcy5fdG9vbHRpcERhdGEuYXNSZWFkb25seSgpO1xuXG4gIHByaXZhdGUgY29uZmlnVG9rZW4gPSBpbmplY3QoQVhfRlVOTkVMX0NIQVJUX0NPTkZJRyk7XG5cbiAgcHJvdGVjdGVkIGVmZmVjdGl2ZU9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiAoe1xuICAgIC4uLnRoaXMuY29uZmlnVG9rZW4sXG4gICAgLi4udGhpcy5vcHRpb25zKCksXG4gIH0pKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgYWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcbiAgICAgIHRoaXMuX2luaXRpYWxpemVkLnNldCh0cnVlKTtcbiAgICAgIHRoaXMubG9hZEQzKCk7XG4gICAgICB0aGlzLmF0dGFjaFJlc2l6ZU9ic2VydmVyKCk7XG4gICAgfSk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgLy8gVHJpZ2dlciB1cGRhdGUgb24gZGF0YSBvciBvcHRpb24gY2hhbmdlXG4gICAgICB0aGlzLmRhdGEoKTtcbiAgICAgIHRoaXMuZWZmZWN0aXZlT3B0aW9ucygpO1xuICAgICAgaWYgKHRoaXMuX3JlbmRlcmVkKCkpIHtcbiAgICAgICAgdGhpcy51cGRhdGVDaGFydCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXRhY2hSZXNpemVPYnNlcnZlcigpO1xuICAgIHRoaXMuY2xlYW51cENoYXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIGF0dGFjaFJlc2l6ZU9ic2VydmVyKCk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gICAgY29uc3QgZWwgPSB0aGlzLmNoYXJ0Q29udGFpbmVyRWwoKS5uYXRpdmVFbGVtZW50O1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMucmVzaXplRGVib3VuY2VJZCAhPT0gbnVsbCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5yZXNpemVEZWJvdW5jZUlkKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVzaXplRGVib3VuY2VJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yZXNpemVEZWJvdW5jZUlkID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMuX3JlbmRlcmVkKCkgJiYgdGhpcy5kMykge1xuICAgICAgICAgIHRoaXMudXBkYXRlQ2hhcnQoKTtcbiAgICAgICAgfVxuICAgICAgfSwgODApO1xuICAgIH0pO1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShlbCk7XG4gIH1cblxuICBwcml2YXRlIGRldGFjaFJlc2l6ZU9ic2VydmVyKCk6IHZvaWQge1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbnVsbDtcbiAgICBpZiAodGhpcy5yZXNpemVEZWJvdW5jZUlkICE9PSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5yZXNpemVEZWJvdW5jZUlkKTtcbiAgICAgIHRoaXMucmVzaXplRGVib3VuY2VJZCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGxvYWREMygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5kMykgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmQzID0gYXdhaXQgaW1wb3J0KCdkMycpO1xuICAgICAgaWYgKHRoaXMuX2luaXRpYWxpemVkKCkgJiYgdGhpcy5jaGFydENvbnRhaW5lckVsKCkpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVDaGFydCgpO1xuICAgICAgICB0aGlzLl9yZW5kZXJlZC5zZXQodHJ1ZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0FYRnVubmVsQ2hhcnQ6IEZhaWxlZCB0byBsb2FkIEQzLmpzJywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVDaGFydCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdmdFbGVtZW50KSB0aGlzLnN2Z0VsZW1lbnQucmVtb3ZlKCk7XG5cbiAgICBjb25zdCBkYXRhID0gWy4uLnRoaXMuZGF0YSgpXS5zb3J0KChhLCBiKSA9PiBiLnZhbHVlIC0gYS52YWx1ZSk7XG4gICAgaWYgKCFkYXRhLmxlbmd0aCkge1xuICAgICAgdGhpcy5oaWRlVG9vbHRpcCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuY2hhcnRDb250YWluZXJFbCgpLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3Qgd2lkdGggPSBNYXRoLm1heCgwLCBjb250YWluZXIuY2xpZW50V2lkdGgpO1xuICAgIGNvbnN0IGhlaWdodCA9IE1hdGgubWF4KDAsIGNvbnRhaW5lci5jbGllbnRIZWlnaHQpO1xuICAgIGlmICh3aWR0aCA8IDIgfHwgaGVpZ2h0IDwgMikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdCA9IHRoaXMuZWZmZWN0aXZlT3B0aW9ucygpO1xuICAgIGNvbnN0IG1hcmdpbiA9IG9wdC5tYXJnaW47XG4gICAgY29uc3QgZWFzaW5nID0gZ2V0RWFzaW5nRnVuY3Rpb24odGhpcy5kMywgb3B0LmFuaW1hdGlvbkVhc2luZyk7XG4gICAgY29uc3QgcmVzb2x2ZWRCYXNlRm9ySW50ZW5zaXR5ID0gdGhpcy5yZXNvbHZlQ3NzQ29sb3Iob3B0LmNvbG9yID8/ICdyZ2IoOTksIDEwMiwgMjQxKScpO1xuXG4gICAgdGhpcy5zdmdFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdzdmcnKTtcbiAgICBjb25zdCBzdmcgPSB0aGlzLmQzXG4gICAgICAuc2VsZWN0KHRoaXMuc3ZnRWxlbWVudClcbiAgICAgIC5hdHRyKCd3aWR0aCcsICcxMDAlJylcbiAgICAgIC5hdHRyKCdoZWlnaHQnLCAnMTAwJScpXG4gICAgICAuYXR0cigndmlld0JveCcsIGAwIDAgJHt3aWR0aH0gJHtoZWlnaHR9YClcbiAgICAgIC5hdHRyKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ3hNaWRZTWlkIG1lZXQnKVxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2F4LWZ1bm5lbC1zdmcnKTtcblxuICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnN2Z0VsZW1lbnQpO1xuXG4gICAgY29uc3QgaW5uZXJXaWR0aCA9IHdpZHRoIC0gbWFyZ2luLmxlZnQgLSBtYXJnaW4ucmlnaHQ7XG4gICAgY29uc3QgaW5uZXJIZWlnaHQgPSBoZWlnaHQgLSBtYXJnaW4udG9wIC0gbWFyZ2luLmJvdHRvbTtcbiAgICBpZiAoaW5uZXJXaWR0aCA8IDIgfHwgaW5uZXJIZWlnaHQgPCAyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZyA9IHN2Zy5hcHBlbmQoJ2cnKS5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKCR7bWFyZ2luLmxlZnR9LCR7bWFyZ2luLnRvcH0pYCk7XG5cbiAgICBjb25zdCBzbGljZUhlaWdodCA9IGlubmVySGVpZ2h0IC8gZGF0YS5sZW5ndGg7XG4gICAgY29uc3QgbWF4VmFsdWUgPSBkYXRhWzBdLnZhbHVlO1xuICAgIGNvbnN0IG1pblZhbHVlID0gZGF0YVtkYXRhLmxlbmd0aCAtIDFdPy52YWx1ZSA/PyBtYXhWYWx1ZTtcbiAgICBjb25zdCBzaG93U2VnbWVudFZhbHVlcyA9IG9wdC5zaG93U2VnbWVudFZhbHVlcyAhPT0gZmFsc2U7XG5cbiAgICBkYXRhLmZvckVhY2goKGQsIGkpID0+IHtcbiAgICAgIGNvbnN0IHRvcFZhbCA9IGQudmFsdWU7XG4gICAgICBjb25zdCBib3R0b21WYWwgPSBkYXRhW2kgKyAxXT8udmFsdWUgPz8gZC52YWx1ZSAqIG9wdC5uZWNrV2lkdGg7XG5cbiAgICAgIGNvbnN0IHRvcFcgPSAodG9wVmFsIC8gbWF4VmFsdWUpICogaW5uZXJXaWR0aDtcbiAgICAgIGNvbnN0IGJvdHRvbVcgPSAoYm90dG9tVmFsIC8gbWF4VmFsdWUpICogaW5uZXJXaWR0aDtcblxuICAgICAgY29uc3QgeFRvcCA9IChpbm5lcldpZHRoIC0gdG9wVykgLyAyO1xuICAgICAgY29uc3QgeEJvdHRvbSA9IChpbm5lcldpZHRoIC0gYm90dG9tVykgLyAyO1xuICAgICAgY29uc3QgeVRvcCA9IGkgKiBzbGljZUhlaWdodDtcbiAgICAgIGNvbnN0IHlCb3R0b20gPSAoaSArIDEpICogc2xpY2VIZWlnaHQ7XG5cbiAgICAgIGNvbnN0IHBhdGhEYXRhID0gYE0gJHt4VG9wfSwke3lUb3B9IEwgJHt4VG9wICsgdG9wV30sJHt5VG9wfSBMICR7eEJvdHRvbSArIGJvdHRvbVd9LCR7eUJvdHRvbX0gTCAke3hCb3R0b219LCR7eUJvdHRvbX0gWmA7XG5cbiAgICAgIGNvbnN0IHNsaWNlR3JvdXAgPSBnLmFwcGVuZCgnZycpLmF0dHIoJ2NsYXNzJywgJ2Z1bm5lbC1zbGljZS1jb250YWluZXInKTtcblxuICAgICAgY29uc3QgY29tcHV0ZWRDb2xvciA9IHRoaXMucmVzb2x2ZVNsaWNlQ29sb3IoZCwgaSwgb3B0LCBtaW5WYWx1ZSwgbWF4VmFsdWUsIHJlc29sdmVkQmFzZUZvckludGVuc2l0eSk7XG5cbiAgICAgIGNvbnN0IHBhdGggPSBzbGljZUdyb3VwXG4gICAgICAgIC5hcHBlbmQoJ3BhdGgnKVxuICAgICAgICAuYXR0cignY2xhc3MnLCAnZnVubmVsLXNsaWNlJylcbiAgICAgICAgLmF0dHIoJ2QnLCBwYXRoRGF0YSlcbiAgICAgICAgLmF0dHIoJ2ZpbGwnLCBjb21wdXRlZENvbG9yKVxuICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAwKVxuICAgICAgICAub24oJ21vdXNlZW50ZXInLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICBzdmcuY2xhc3NlZCgnaXMtZGltbWVkJywgdHJ1ZSk7XG4gICAgICAgICAgdGhpcy5kMy5zZWxlY3QoZXZlbnQuY3VycmVudFRhcmdldCkuY2xhc3NlZCgnaXMtYWN0aXZlJywgdHJ1ZSk7XG4gICAgICAgICAgdGhpcy5zaG93VG9vbHRpcChldmVudCwgZCwgY29tcHV0ZWRDb2xvcik7XG4gICAgICAgIH0pXG4gICAgICAgIC5vbignbW91c2Vtb3ZlJywgKGV2ZW50KSA9PiB0aGlzLnVwZGF0ZVRvb2x0aXBQb3NpdGlvbihldmVudCkpXG4gICAgICAgIC5vbignY2xpY2snLCAoKSA9PiB0aGlzLnNlZ21lbnRDbGljay5lbWl0KGQpKVxuICAgICAgICAub24oJ21vdXNlbGVhdmUnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICBzdmcuY2xhc3NlZCgnaXMtZGltbWVkJywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuZDMuc2VsZWN0KGV2ZW50LmN1cnJlbnRUYXJnZXQpLmNsYXNzZWQoJ2lzLWFjdGl2ZScsIGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmhpZGVUb29sdGlwKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICBwYXRoXG4gICAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgICAgLmR1cmF0aW9uKG9wdC5hbmltYXRpb25EdXJhdGlvbilcbiAgICAgICAgLmRlbGF5KGkgKiA4MClcbiAgICAgICAgLmVhc2UoZWFzaW5nKVxuICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAxKTtcblxuICAgICAgc2xpY2VHcm91cFxuICAgICAgICAuYXBwZW5kKCd0aXRsZScpXG4gICAgICAgIC50ZXh0KGAke2QubmFtZX06ICR7ZC52YWx1ZS50b0xvY2FsZVN0cmluZygpfWApO1xuXG4gICAgICBpZiAob3B0LnNob3dMYWJlbHMpIHtcbiAgICAgICAgY29uc3QgeyBjeCwgY3ksIHdpZHRoOiBtaWRXIH0gPSB0aGlzLnRyYXBlem9pZEludGVyaW9yTWV0cmljcyh4VG9wLCB0b3BXLCB4Qm90dG9tLCBib3R0b21XLCB5VG9wLCB5Qm90dG9tKTtcbiAgICAgICAgY29uc3QgeyBuYW1lU2l6ZSwgdmFsdWVTaXplLCBzaG93VmFsdWVMaW5lLCBkaXNwbGF5TmFtZSB9ID0gdGhpcy5jb21wdXRlU2VnbWVudExhYmVsVHlwb2dyYXBoeShcbiAgICAgICAgICBzbGljZUhlaWdodCxcbiAgICAgICAgICBtaWRXLFxuICAgICAgICAgIGQubmFtZSxcbiAgICAgICAgICBzaG93U2VnbWVudFZhbHVlcyxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgeyBwcmltYXJ5LCBzZWNvbmRhcnkgfSA9IHRoaXMucGlja09uU2xpY2VUZXh0Q29sb3JzKGNvbXB1dGVkQ29sb3IpO1xuXG4gICAgICAgIGNvbnN0IGxhYmVsR3JvdXAgPSBzbGljZUdyb3VwLmFwcGVuZCgnZycpLmF0dHIoJ2NsYXNzJywgJ2Z1bm5lbC1sYWJlbC1ncm91cCcpLnN0eWxlKCdvcGFjaXR5JywgMCk7XG5cbiAgICAgICAgY29uc3QgbGluZUdhcCA9IE1hdGgubWF4KDIsIHNsaWNlSGVpZ2h0ICogMC4wNik7XG4gICAgICAgIGlmIChzaG93VmFsdWVMaW5lICYmIHZhbHVlU2l6ZSA+IDApIHtcbiAgICAgICAgICBsYWJlbEdyb3VwXG4gICAgICAgICAgICAuYXBwZW5kKCd0ZXh0JylcbiAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdmdW5uZWwtbGFiZWwtbmFtZScpXG4gICAgICAgICAgICAuYXR0cigneCcsIGN4KVxuICAgICAgICAgICAgLmF0dHIoJ3knLCBjeSAtICh2YWx1ZVNpemUgKiAwLjU1ICsgbGluZUdhcCAqIDAuNSkpXG4gICAgICAgICAgICAuYXR0cigndGV4dC1hbmNob3InLCAnbWlkZGxlJylcbiAgICAgICAgICAgIC5hdHRyKCdkb21pbmFudC1iYXNlbGluZScsICdtaWRkbGUnKVxuICAgICAgICAgICAgLnN0eWxlKCdmb250LXNpemUnLCBgJHtuYW1lU2l6ZX1weGApXG4gICAgICAgICAgICAuc3R5bGUoJ2ZpbGwnLCBwcmltYXJ5KVxuICAgICAgICAgICAgLnRleHQoZGlzcGxheU5hbWUpO1xuXG4gICAgICAgICAgbGFiZWxHcm91cFxuICAgICAgICAgICAgLmFwcGVuZCgndGV4dCcpXG4gICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnZnVubmVsLWxhYmVsLXZhbHVlJylcbiAgICAgICAgICAgIC5hdHRyKCd4JywgY3gpXG4gICAgICAgICAgICAuYXR0cigneScsIGN5ICsgKG5hbWVTaXplICogMC41NSArIGxpbmVHYXAgKiAwLjUpKVxuICAgICAgICAgICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXG4gICAgICAgICAgICAuYXR0cignZG9taW5hbnQtYmFzZWxpbmUnLCAnbWlkZGxlJylcbiAgICAgICAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgYCR7dmFsdWVTaXplfXB4YClcbiAgICAgICAgICAgIC5zdHlsZSgnZmlsbCcsIHNlY29uZGFyeSlcbiAgICAgICAgICAgIC50ZXh0KGQudmFsdWUudG9Mb2NhbGVTdHJpbmcoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGFiZWxHcm91cFxuICAgICAgICAgICAgLmFwcGVuZCgndGV4dCcpXG4gICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnZnVubmVsLWxhYmVsLW5hbWUgZnVubmVsLWxhYmVsLW5hbWUtLXNpbmdsZScpXG4gICAgICAgICAgICAuYXR0cigneCcsIGN4KVxuICAgICAgICAgICAgLmF0dHIoJ3knLCBjeSlcbiAgICAgICAgICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxuICAgICAgICAgICAgLmF0dHIoJ2RvbWluYW50LWJhc2VsaW5lJywgJ21pZGRsZScpXG4gICAgICAgICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsIGAke25hbWVTaXplfXB4YClcbiAgICAgICAgICAgIC5zdHlsZSgnZmlsbCcsIHByaW1hcnkpXG4gICAgICAgICAgICAudGV4dChkaXNwbGF5TmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBsYWJlbEdyb3VwXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgIC5kdXJhdGlvbig2MDApXG4gICAgICAgICAgLmRlbGF5KDQwMCArIGkgKiA4MClcbiAgICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhcGV6b2lkSW50ZXJpb3JNZXRyaWNzKFxuICAgIHhUb3A6IG51bWJlcixcbiAgICB0b3BXOiBudW1iZXIsXG4gICAgeEJvdHRvbTogbnVtYmVyLFxuICAgIGJvdHRvbVc6IG51bWJlcixcbiAgICB5VG9wOiBudW1iZXIsXG4gICAgeUJvdHRvbTogbnVtYmVyLFxuICApOiB7IGN4OiBudW1iZXI7IGN5OiBudW1iZXI7IHdpZHRoOiBudW1iZXIgfSB7XG4gICAgY29uc3QgY3kgPSAoeVRvcCArIHlCb3R0b20pIC8gMjtcbiAgICBjb25zdCBkZW5vbSA9IHlCb3R0b20gLSB5VG9wIHx8IDE7XG4gICAgY29uc3QgdCA9IChjeSAtIHlUb3ApIC8gZGVub207XG4gICAgY29uc3QgeEwgPSB4VG9wICsgdCAqICh4Qm90dG9tIC0geFRvcCk7XG4gICAgY29uc3QgeFIgPSB4VG9wICsgdG9wVyArIHQgKiAoeEJvdHRvbSArIGJvdHRvbVcgLSAoeFRvcCArIHRvcFcpKTtcbiAgICByZXR1cm4geyBjeDogKHhMICsgeFIpIC8gMiwgY3ksIHdpZHRoOiBNYXRoLm1heCgwLCB4UiAtIHhMKSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlU2VnbWVudExhYmVsVHlwb2dyYXBoeShcbiAgICBzbGljZUhlaWdodDogbnVtYmVyLFxuICAgIHNlZ21lbnRJbm5lcldpZHRoOiBudW1iZXIsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHdhbnRWYWx1ZTogYm9vbGVhbixcbiAgKToge1xuICAgIG5hbWVTaXplOiBudW1iZXI7XG4gICAgdmFsdWVTaXplOiBudW1iZXI7XG4gICAgc2hvd1ZhbHVlTGluZTogYm9vbGVhbjtcbiAgICBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICB9IHtcbiAgICBjb25zdCBjaGFyRmFjdG9yID0gMC41MjtcbiAgICBjb25zdCBtaW5Gb250ID0gNi41O1xuICAgIGNvbnN0IG1heE5hbWUgPSAxNTtcblxuICAgIGNvbnN0IGlubmVyVyA9IE1hdGgubWF4KHNlZ21lbnRJbm5lcldpZHRoLCA4KTtcblxuICAgIGxldCBzaG93VmFsdWVMaW5lID0gd2FudFZhbHVlICYmIHNsaWNlSGVpZ2h0ID49IDE3ICYmIGlubmVyVyA+PSAzODtcblxuICAgIGNvbnN0IGZpdE5hbWVPbmx5ID0gKCk6IG51bWJlciA9PiB7XG4gICAgICBjb25zdCByYXcgPSBNYXRoLm1pbihtYXhOYW1lICsgMiwgc2xpY2VIZWlnaHQgKiAwLjQyLCBpbm5lclcgLyBNYXRoLm1heChuYW1lLmxlbmd0aCAqIGNoYXJGYWN0b3IsIDIuNSkpO1xuICAgICAgcmV0dXJuIE1hdGgubWF4KG1pbkZvbnQsIHJhdyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGZpdEJvdGggPSAoKTogeyBuYW1lU2l6ZTogbnVtYmVyOyB2YWx1ZVNpemU6IG51bWJlciB9ID0+IHtcbiAgICAgIGNvbnN0IHZCdWRnZXQgPSBzbGljZUhlaWdodCAqIDAuNzY7XG4gICAgICBsZXQgbmFtZVNpemUgPSBNYXRoLm1pbihtYXhOYW1lLCB2QnVkZ2V0IC8gMi40NSwgaW5uZXJXIC8gTWF0aC5tYXgobmFtZS5sZW5ndGggKiBjaGFyRmFjdG9yLCAyLjUpKTtcbiAgICAgIG5hbWVTaXplID0gTWF0aC5tYXgobWluRm9udCwgbmFtZVNpemUpO1xuICAgICAgbGV0IHZhbHVlU2l6ZSA9IE1hdGgubWF4KG1pbkZvbnQsIE1hdGgubWluKG5hbWVTaXplICogMC44OCwgdkJ1ZGdldCAvIDIuNDUpKTtcbiAgICAgIGNvbnN0IHN0YWNrSCA9IG5hbWVTaXplICogMS4xOCArIHZhbHVlU2l6ZSAqIDEuMDggKyBzbGljZUhlaWdodCAqIDAuMDU7XG4gICAgICBpZiAoc3RhY2tIID4gc2xpY2VIZWlnaHQgKiAwLjg4KSB7XG4gICAgICAgIGNvbnN0IHNjYWxlID0gKHNsaWNlSGVpZ2h0ICogMC44OCkgLyBzdGFja0g7XG4gICAgICAgIG5hbWVTaXplID0gTWF0aC5tYXgobWluRm9udCwgbmFtZVNpemUgKiBzY2FsZSk7XG4gICAgICAgIHZhbHVlU2l6ZSA9IE1hdGgubWF4KG1pbkZvbnQsIHZhbHVlU2l6ZSAqIHNjYWxlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IG5hbWVTaXplLCB2YWx1ZVNpemUgfTtcbiAgICB9O1xuXG4gICAgbGV0IG5hbWVTaXplOiBudW1iZXI7XG4gICAgbGV0IHZhbHVlU2l6ZSA9IDA7XG5cbiAgICBpZiAoc2hvd1ZhbHVlTGluZSkge1xuICAgICAgY29uc3QgYm90aCA9IGZpdEJvdGgoKTtcbiAgICAgIG5hbWVTaXplID0gYm90aC5uYW1lU2l6ZTtcbiAgICAgIHZhbHVlU2l6ZSA9IGJvdGgudmFsdWVTaXplO1xuICAgICAgaWYgKG5hbWVTaXplICogMS4yICsgdmFsdWVTaXplICogMS4wNSA+IHNsaWNlSGVpZ2h0ICogMC45KSB7XG4gICAgICAgIHNob3dWYWx1ZUxpbmUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXNob3dWYWx1ZUxpbmUpIHtcbiAgICAgIG5hbWVTaXplID0gZml0TmFtZU9ubHkoKTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXhDaGFycyA9IE1hdGgubWF4KDIsIE1hdGguZmxvb3IoaW5uZXJXIC8gKG5hbWVTaXplICogY2hhckZhY3RvcikpKTtcbiAgICBjb25zdCBkaXNwbGF5TmFtZSA9IHRoaXMudHJ1bmNhdGVMYWJlbChuYW1lLCBtYXhDaGFycyk7XG5cbiAgICByZXR1cm4geyBuYW1lU2l6ZSwgdmFsdWVTaXplLCBzaG93VmFsdWVMaW5lLCBkaXNwbGF5TmFtZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSB0cnVuY2F0ZUxhYmVsKG5hbWU6IHN0cmluZywgbWF4Q2hhcnM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKG5hbWUubGVuZ3RoIDw9IG1heENoYXJzKSByZXR1cm4gbmFtZTtcbiAgICBpZiAobWF4Q2hhcnMgPD0gMSkgcmV0dXJuICfigKYnO1xuICAgIHJldHVybiBgJHtuYW1lLnNsaWNlKDAsIG1heENoYXJzIC0gMSl94oCmYDtcbiAgfVxuXG4gIHByaXZhdGUgcGlja09uU2xpY2VUZXh0Q29sb3JzKHNsaWNlQ29sb3JDc3M6IHN0cmluZyk6IHsgcHJpbWFyeTogc3RyaW5nOyBzZWNvbmRhcnk6IHN0cmluZyB9IHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHRoaXMucmVzb2x2ZUNzc0NvbG9yKHNsaWNlQ29sb3JDc3MpO1xuICAgIGNvbnN0IGMgPSB0aGlzLmQzLmNvbG9yKHJlc29sdmVkKTtcbiAgICBpZiAoIWMpIHtcbiAgICAgIHJldHVybiB7IHByaW1hcnk6ICdyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpJywgc2Vjb25kYXJ5OiAncmdiYSgyNTUsMjU1LDI1NSwwLjc4KScgfTtcbiAgICB9XG4gICAgY29uc3QgcmdiID0gdGhpcy5kMy5yZ2IoYyk7XG4gICAgY29uc3QgYSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHJnYi5vcGFjaXR5KSk7XG4gICAgLy8gQmxlbmQgc2xpY2UgY29sb3Igb3ZlciB3aGl0ZSAodHlwaWNhbCBjYXJkL3N1cmZhY2UpIHNvIGxvdy1hbHBoYSBpbnRlbnNpdHkgcmFtcHMgcmVhZCBjb3JyZWN0bHkuXG4gICAgY29uc3QgYnIgPSAocmdiLnIgLyAyNTUpICogYSArICgxIC0gYSk7XG4gICAgY29uc3QgYmcgPSAocmdiLmcgLyAyNTUpICogYSArICgxIC0gYSk7XG4gICAgY29uc3QgYmIgPSAocmdiLmIgLyAyNTUpICogYSArICgxIC0gYSk7XG4gICAgY29uc3QgbHVtID0gMC4yMTI2ICogYnIgKyAwLjcxNTIgKiBiZyArIDAuMDcyMiAqIGJiO1xuICAgIGlmIChsdW0gPiAwLjYyKSB7XG4gICAgICByZXR1cm4geyBwcmltYXJ5OiAncmdiYSgxNSwyMyw0MiwwLjkyKScsIHNlY29uZGFyeTogJ3JnYmEoMTUsMjMsNDIsMC43MiknIH07XG4gICAgfVxuICAgIHJldHVybiB7IHByaW1hcnk6ICdyZ2JhKDI1NSwyNTUsMjU1LDAuOTYpJywgc2Vjb25kYXJ5OiAncmdiYSgyNTUsMjU1LDI1NSwwLjc4KScgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVNsaWNlQ29sb3IoXG4gICAgaXRlbTogQVhGdW5uZWxEYXRhLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgb3B0OiBBWEZ1bm5lbENoYXJ0T3B0aW9uLFxuICAgIG1pblZhbHVlOiBudW1iZXIsXG4gICAgbWF4VmFsdWU6IG51bWJlcixcbiAgICByZXNvbHZlZEJhc2VSZ2I6IHN0cmluZyxcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAoaXRlbS5jb2xvcikgcmV0dXJuIHRoaXMucmVzb2x2ZUNzc0NvbG9yKGl0ZW0uY29sb3IpO1xuXG4gICAgY29uc3QgcGFsZXR0ZSA9IG9wdC5jb2xvcnM/LmZpbHRlcihCb29sZWFuKSA/PyBbXTtcbiAgICBpZiAocGFsZXR0ZS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBrZXkgPSBTdHJpbmcoaXRlbS5pZCA/PyBpdGVtLm5hbWUgPz8gaW5kZXgpO1xuICAgICAgY29uc3QgaWR4ID0gdGhpcy5oYXNoU3RyaW5nVG9VaW50MzIoa2V5KSAlIHBhbGV0dGUubGVuZ3RoO1xuICAgICAgY29uc3QgcmF3ID0gcGFsZXR0ZVtpZHhdID8/IG9wdC5jb2xvciA/PyAncmdiKDk5LCAxMDIsIDI0MSknO1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZUNzc0NvbG9yKHJhdyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmFuZ2VNaW4gPSBvcHQudmFsdWVSYW5nZT8ubWluID8/IG1pblZhbHVlO1xuICAgIGNvbnN0IHJhbmdlTWF4ID0gb3B0LnZhbHVlUmFuZ2U/Lm1heCA/PyBtYXhWYWx1ZTtcbiAgICBjb25zdCBzcGFuID0gcmFuZ2VNYXggLSByYW5nZU1pbjtcbiAgICBjb25zdCB0ID0gc3BhbiA9PT0gMCA/IDEgOiAoaXRlbS52YWx1ZSAtIHJhbmdlTWluKSAvIHNwYW47XG4gICAgY29uc3QgY2xhbXBlZCA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHQpKTtcbiAgICByZXR1cm4gdGhpcy5hcHBseUludGVuc2l0eVRvUmVzb2x2ZWRSZ2IocmVzb2x2ZWRCYXNlUmdiLCBjbGFtcGVkKTtcbiAgfVxuXG4gIC8qKiBgcmVzb2x2ZWRSZ2JgIG11c3QgYmUgYSBjb21wdXRlZCBgcmdiKClgIC8gYHJnYmEoKWAgc3RyaW5nIChlLmcuIGZyb20ge0BsaW5rIHJlc29sdmVDc3NDb2xvcn0pLiAqL1xuICBwcml2YXRlIGFwcGx5SW50ZW5zaXR5VG9SZXNvbHZlZFJnYihyZXNvbHZlZFJnYjogc3RyaW5nLCB0OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNsYW1wZWQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCB0KSk7XG4gICAgY29uc3QgcGFyc2VkID0gdGhpcy5kMy5jb2xvcihyZXNvbHZlZFJnYik7XG4gICAgaWYgKCFwYXJzZWQpIHJldHVybiByZXNvbHZlZFJnYjtcbiAgICBjb25zdCByZ2IgPSB0aGlzLmQzLnJnYihwYXJzZWQpO1xuICAgIGNvbnN0IG1pbk9wYWNpdHkgPSAwLjEyO1xuICAgIGNvbnN0IG9wYWNpdHkgPSBtaW5PcGFjaXR5ICsgY2xhbXBlZCAqICgxIC0gbWluT3BhY2l0eSk7XG4gICAgcmV0dXJuIGByZ2JhKCR7TWF0aC5yb3VuZChyZ2Iucil9LCR7TWF0aC5yb3VuZChyZ2IuZyl9LCR7TWF0aC5yb3VuZChyZ2IuYil9LCR7b3BhY2l0eX0pYDtcbiAgfVxuXG4gIHByaXZhdGUgaGFzaFN0cmluZ1RvVWludDMyKGlucHV0OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGxldCBoYXNoID0gNTM4MTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBoYXNoID0gKGhhc2ggKiAzMykgXiBpbnB1dC5jaGFyQ29kZUF0KGkpO1xuICAgIH1cbiAgICByZXR1cm4gaGFzaCA+Pj4gMDtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUNzc0NvbG9yKGNvbG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXNvbHZlQ3NzQ29sb3JJbkNvbnRleHQodGhpcy5jaGFydENvbnRhaW5lckVsKCkubmF0aXZlRWxlbWVudCwgY29sb3IpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUNoYXJ0KCk6IHZvaWQge1xuICAgIHRoaXMuY3JlYXRlQ2hhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd1Rvb2x0aXAoZXZlbnQ6IE1vdXNlRXZlbnQsIGl0ZW06IEFYRnVubmVsRGF0YSwgY29sb3I6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lZmZlY3RpdmVPcHRpb25zKCkuc2hvd1Rvb2x0aXApIHJldHVybjtcbiAgICB0aGlzLl90b29sdGlwRGF0YS5zZXQoeyB0aXRsZTogaXRlbS5uYW1lLCB2YWx1ZTogaXRlbS52YWx1ZS50b0xvY2FsZVN0cmluZygpLCBjb2xvciB9KTtcbiAgICB0aGlzLl90b29sdGlwVmlzaWJsZS5zZXQodHJ1ZSk7XG4gICAgdGhpcy51cGRhdGVUb29sdGlwUG9zaXRpb24oZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVUb29sdGlwUG9zaXRpb24oZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdG9vbHRpcFJhZklkKSBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl90b29sdGlwUmFmSWQpO1xuICAgIHRoaXMuX3Rvb2x0aXBSYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXJFbCA9IHRoaXMuY2hhcnRDb250YWluZXJFbCgpLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBjb25zdCByZWN0ID0gY29udGFpbmVyRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCB0b29sdGlwRWwgPSBjb250YWluZXJFbC5xdWVyeVNlbGVjdG9yKCcuY2hhcnQtdG9vbHRpcCcpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgY29uc3QgdG9vbHRpcFJlY3QgPSB0b29sdGlwRWw/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpID8/IG51bGw7XG4gICAgICB0aGlzLl90b29sdGlwUG9zaXRpb24uc2V0KGNvbXB1dGVUb29sdGlwUG9zaXRpb24ocmVjdCwgdG9vbHRpcFJlY3QsIGV2ZW50LmNsaWVudFggKyAxMCwgZXZlbnQuY2xpZW50WSAtIDEwLCAxMCkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoaWRlVG9vbHRpcCgpOiB2b2lkIHtcbiAgICB0aGlzLl90b29sdGlwVmlzaWJsZS5zZXQoZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIGNsZWFudXBDaGFydCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdG9vbHRpcFJhZklkKSBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl90b29sdGlwUmFmSWQpO1xuICAgIGlmICh0aGlzLnN2Z0VsZW1lbnQpIHtcbiAgICAgIHRoaXMuc3ZnRWxlbWVudC5yZW1vdmUoKTtcbiAgICAgIHRoaXMuc3ZnRWxlbWVudCA9IG51bGw7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXgtZnVubmVsLWNoYXJ0LWNvbnRhaW5lclwiIHJvbGU9XCJpbWdcIiAjY2hhcnRDb250YWluZXI+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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"}
|
|
@@ -7,7 +7,7 @@ import { map } from 'rxjs';
|
|
|
7
7
|
|
|
8
8
|
const AXHeatmapChartDefaultConfig = {
|
|
9
9
|
margin: { top: 30, right: 30, bottom: 60, left: 60 },
|
|
10
|
-
color: 'rgb(
|
|
10
|
+
color: 'rgb(var(--ax-sys-color-primary-500))',
|
|
11
11
|
cellPadding: 0.05,
|
|
12
12
|
borderRadius: 2,
|
|
13
13
|
showXAxis: true,
|
|
@@ -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 color: 'rgb(99, 102, 241)',\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhdG1hcC1jaGFydC5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jaGFydHMvaGVhdG1hcC1jaGFydC9zcmMvbGliL2hlYXRtYXAtY2hhcnQuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0MsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQXlCO0lBQy9ELE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7SUFDcEQsS0FBSyxFQUFFLG1CQUFtQjtJQUMxQixXQUFXLEVBQUUsSUFBSTtJQUNqQixZQUFZLEVBQUUsQ0FBQztJQUNmLFNBQVMsRUFBRSxJQUFJO0lBQ2YsU0FBUyxFQUFFLElBQUk7SUFDZixXQUFXLEVBQUUsSUFBSTtJQUNqQixpQkFBaUIsRUFBRSxHQUFHO0lBQ3RCLGVBQWUsRUFBRSxXQUFXO0lBQzVCLFFBQVEsRUFBRTtRQUNSLE1BQU0sRUFBRSxtQkFBbUI7UUFDM0IsVUFBVSxFQUFFLG9EQUFvRDtRQUNoRSxVQUFVLEVBQUUsb0JBQW9CO0tBQ2pDO0NBQ0YsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLElBQUksY0FBYyxDQUF1Qix5QkFBeUIsRUFBRTtJQUN6RyxVQUFVLEVBQUUsTUFBTTtJQUNsQixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsMkJBQTJCO0NBQzNDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWEhlYXRtYXBDaGFydE9wdGlvbiB9IGZyb20gJy4vaGVhdG1hcC1jaGFydC50eXBlJztcblxuZXhwb3J0IGNvbnN0IEFYSGVhdG1hcENoYXJ0RGVmYXVsdENvbmZpZzogQVhIZWF0bWFwQ2hhcnRPcHRpb24gPSB7XG4gIG1hcmdpbjogeyB0b3A6IDMwLCByaWdodDogMzAsIGJvdHRvbTogNjAsIGxlZnQ6IDYwIH0sXG4gIGNvbG9yOiAncmdiKDk5LCAxMDIsIDI0MSknLFxuICBjZWxsUGFkZGluZzogMC4wNSxcbiAgYm9yZGVyUmFkaXVzOiAyLFxuICBzaG93WEF4aXM6IHRydWUsXG4gIHNob3dZQXhpczogdHJ1ZSxcbiAgc2hvd1Rvb2x0aXA6IHRydWUsXG4gIGFuaW1hdGlvbkR1cmF0aW9uOiA4MDAsXG4gIGFuaW1hdGlvbkVhc2luZzogJ2N1YmljLW91dCcsXG4gIG1lc3NhZ2VzOiB7XG4gICAgbm9EYXRhOiAnTm8gZGF0YSBhdmFpbGFibGUnLFxuICAgIG5vRGF0YUhlbHA6ICdQcm92aWRlIFgsIFksIGFuZCBWYWx1ZSBkYXRhIHRvIHJlbmRlciB0aGUgaGVhdG1hcCcsXG4gICAgbm9EYXRhSWNvbjogJ2ZhLWxpZ2h0IGZhLWdyaWQtMicsXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgQVhfSEVBVE1BUF9DSEFSVF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48QVhIZWF0bWFwQ2hhcnRPcHRpb24+KCdBWF9IRUFUTUFQX0NIQVJUX0NPTkZJRycsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiAoKSA9PiBBWEhlYXRtYXBDaGFydERlZmF1bHRDb25maWcsXG59KTtcbiJdfQ==","import { AXChartComponent, computeTooltipPosition, getEasingFunction, resolveCssColorInContext } 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 baseColor = options.color ?? 'rgb(99, 102, 241)';\n const rangeMin = options.valueRange?.min ?? minValue;\n const rangeMax = options.valueRange?.max ?? maxValue;\n const resolvedColorCache = new Map();\n const resolvePaletteColor = (c) => {\n const hit = resolvedColorCache.get(c);\n if (hit !== undefined)\n return hit;\n const out = resolveCssColorInContext(container, c);\n resolvedColorCache.set(c, out);\n return out;\n };\n const resolvedBase = resolvePaletteColor(baseColor);\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 resolvePaletteColor(palette[idx] ?? baseColor);\n }\n const span = rangeMax - rangeMin;\n const t = span === 0 ? 1 : (d.value - rangeMin) / span;\n const clamped = Math.max(0, Math.min(1, t));\n return this.applyIntensityToResolvedRgb(resolvedBase, 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', resolvedBase), (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 /** `resolvedRgb` must be a computed `rgb()` / `rgba()` string (e.g. from {@link resolveCssColorInContext}). */\n applyIntensityToResolvedRgb(resolvedRgb, t) {\n const clamped = Math.max(0, Math.min(1, t));\n const parsed = this.d3.color(resolvedRgb);\n if (!parsed)\n return resolvedRgb;\n const rgb = this.d3.rgb(parsed);\n const minOpacity = 0.12;\n const opacity = minOpacity + clamped * (1 - minOpacity);\n return `rgba(${Math.round(rgb.r)},${Math.round(rgb.g)},${Math.round(rgb.b)},${opacity})`;\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhdG1hcC1jaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jaGFydHMvaGVhdG1hcC1jaGFydC9zcmMvbGliL2hlYXRtYXAtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2hhcnRzL2hlYXRtYXAtY2hhcnQvc3JjL2xpYi9oZWF0bWFwLWNoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxzQkFBc0IsRUFBRSxpQkFBaUIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZILE9BQU8sRUFBRSx1QkFBdUIsRUFBc0IsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBR1QsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEdBQUcsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBV2pFLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxnQkFBZ0I7SUFDM0QsaUNBQWlDO0lBQ2hCLGFBQWEsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUVqRSxTQUFTO0lBQ1QsSUFBSSxHQUFHLEtBQUssQ0FBa0IsRUFBRSxnREFBQyxDQUFDO0lBQ2xDLE9BQU8sR0FBRyxLQUFLLENBQXVCLEVBQUUsbURBQUMsQ0FBQztJQUUxQyxVQUFVO0lBQ1YsNkNBQTZDO0lBQzdDLFNBQVMsR0FB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QUUseUJBQXlCLENBQUMsRUFDN0UsQ0FBQyxNQUFXLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFDdkIsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FDN0I7YUFDQSxJQUFJLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxLQUFLLFdBQVcsR0FBRyxDQUFDLGVBQWUsQ0FBQzthQUNyRSxJQUFJLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQzthQUM3QixJQUFJLENBQUMsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVCLENBQUM7dUdBclNVLHVCQUF1QjsyRkFBdkIsdUJBQXVCLHVnQkM5QnBDLDZjQVdBLHNpRERnQlksdUJBQXVCOzsyRkFHdEIsdUJBQXVCO2tCQVJuQyxTQUFTOytCQUNFLGtCQUFrQixpQkFHYixpQkFBaUIsQ0FBQyxJQUFJLFdBQzVCLENBQUMsdUJBQXVCLENBQUMsbUJBQ2pCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWENoYXJ0Q29tcG9uZW50LCBjb21wdXRlVG9vbHRpcFBvc2l0aW9uLCBnZXRFYXNpbmdGdW5jdGlvbiwgcmVzb2x2ZUNzc0NvbG9ySW5Db250ZXh0IH0gZnJvbSAnQGFjb3JleC9jaGFydHMnO1xuaW1wb3J0IHsgQVhDaGFydFRvb2x0aXBDb21wb25lbnQsIEFYQ2hhcnRUb29sdGlwRGF0YSB9IGZyb20gJ0BhY29yZXgvY2hhcnRzL2NoYXJ0LXRvb2x0aXAnO1xuaW1wb3J0IHsgQVhQbGF0Zm9ybSB9IGZyb20gJ0BhY29yZXgvY29yZS9wbGF0Zm9ybSc7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBPbkRlc3Ryb3ksXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBhZnRlck5leHRSZW5kZXIsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxuICB2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWFwLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFYX0hFQVRNQVBfQ0hBUlRfQ09ORklHIH0gZnJvbSAnLi9oZWF0bWFwLWNoYXJ0LmNvbmZpZyc7XG5pbXBvcnQgeyBBWEhlYXRtYXBDaGFydE9wdGlvbiwgQVhIZWF0bWFwRGF0YSB9IGZyb20gJy4vaGVhdG1hcC1jaGFydC50eXBlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtaGVhdG1hcC1jaGFydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9oZWF0bWFwLWNoYXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaGVhdG1hcC1jaGFydC5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBpbXBvcnRzOiBbQVhDaGFydFRvb2x0aXBDb21wb25lbnRdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQVhIZWF0bWFwQ2hhcnRDb21wb25lbnQgZXh0ZW5kcyBBWENoYXJ0Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgLy8gSW5qZWN0IGNvbmZpZyBhdCB0aGUgdG9wIGxldmVsXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdENvbmZpZyA9IGluamVjdChBWF9IRUFUTUFQX0NIQVJUX0NPTkZJRyk7XG5cbiAgLy8gSW5wdXRzXG4gIGRhdGEgPSBpbnB1dDxBWEhlYXRtYXBEYXRhW10+KFtdKTtcbiAgb3B0aW9ucyA9IGlucHV0PEFYSGVhdG1hcENoYXJ0T3B0aW9uPih7fSk7XG5cbiAgLy8gT3V0cHV0c1xuICAvKiogRW1pdHRlZCB3aGVuIGEgaGVhdG1hcCBjZWxsIGlzIGNsaWNrZWQgKi9cbiAgY2VsbENsaWNrID0gb3V0cHV0PEFYSGVhdG1hcERhdGE+KCk7XG5cbiAgLy8gVmlldyBDaGlsZFxuICBwcml2YXRlIHJlYWRvbmx5IGNvbnRhaW5lclJlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4oJ2NoYXJ0Q29udGFpbmVyJyk7XG5cbiAgLy8gSW50ZXJuYWwgU3RhdGVcbiAgcHJpdmF0ZSBzdmc6IGFueTtcbiAgcHJvdGVjdGVkIGQzOiBhbnk7XG4gIHByaXZhdGUgX2QzUmVhZHkgPSBzaWduYWwoZmFsc2UpO1xuICBwcml2YXRlIHBsYXRmb3JtU2VydmljZSA9IGluamVjdChBWFBsYXRmb3JtKTtcbiAgcHJvdGVjdGVkIGlzUnRsID0gc2lnbmFsKHRoaXMucGxhdGZvcm1TZXJ2aWNlLmlzUnRsKCkpO1xuICBwcml2YXRlIGRpcmVjdGlvblN1Yj86IFN1YnNjcmlwdGlvbjtcblxuICAvLyBUb29sdGlwIFN0YXRlXG4gIHByb3RlY3RlZCB0b29sdGlwVmlzaWJsZSA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCB0b29sdGlwUG9zaXRpb24gPSBzaWduYWwoeyB4OiAwLCB5OiAwIH0pO1xuICBwcm90ZWN0ZWQgdG9vbHRpcERhdGEgPSBzaWduYWw8QVhDaGFydFRvb2x0aXBEYXRhPih7IHRpdGxlOiAnJywgdmFsdWU6ICcnIH0pO1xuICBwcml2YXRlIF90b29sdGlwUmFmSWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIC8vIENvbXB1dGVkIG9wdGlvbnMgKHJlZmVyZW5jaW5nIHRoZSBhbHJlYWR5IGluamVjdGVkIGRlZmF1bHRDb25maWcpXG4gIHByb3RlY3RlZCBlZmZlY3RpdmVPcHRpb25zID0gY29tcHV0ZWQoKCkgPT4gKHtcbiAgICAuLi50aGlzLmRlZmF1bHRDb25maWcsXG4gICAgLi4udGhpcy5vcHRpb25zKCksXG4gIH0pKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBEMyBhbmQgUmVzaXplT2JzZXJ2ZXJcbiAgICBhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuICAgICAgdGhpcy5pbml0KCk7XG4gICAgICB0aGlzLmRpcmVjdGlvblN1YiA9IHRoaXMucGxhdGZvcm1TZXJ2aWNlLmRpcmVjdGlvbkNoYW5nZVxuICAgICAgICAucGlwZShtYXAoKGkpID0+IGkuZGF0YSA9PT0gJ3J0bCcpKVxuICAgICAgICAuc3Vic2NyaWJlKChpc1J0bCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNSdGwuc2V0KGlzUnRsKTtcbiAgICAgICAgICBpZiAodGhpcy5fZDNSZWFkeSgpKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckNoYXJ0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIFJlYWN0aXZlIFJlbmRlciB3aGVuIGRhdGEgb3IgRDMgaXMgcmVhZHlcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2QzUmVhZHkoKSkge1xuICAgICAgICB0aGlzLnJlbmRlckNoYXJ0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGluaXQoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZDMgPSBhd2FpdCBpbXBvcnQoJ2QzJyk7XG5cbiAgICAgIHRoaXMuX2QzUmVhZHkuc2V0KHRydWUpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignSGVhdG1hcDogSW5pdGlhbGl6YXRpb24gZmFpbGVkJywgZXJyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckNoYXJ0KCkge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyUmVmKCkubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhKCkgfHwgW107XG5cbiAgICBpZiAoIWNvbnRhaW5lciB8fCBjb250YWluZXIuY2xpZW50V2lkdGggPT09IDAgfHwgY29udGFpbmVyLmNsaWVudEhlaWdodCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgLy8gQ2xlYXIgU1ZHIGlmIGRhdGEgaXMgZW1wdHlcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIGlmICh0aGlzLnN2ZykgdGhpcy5zdmcucmVtb3ZlKCk7XG4gICAgICB0aGlzLnN2ZyA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZWZmZWN0aXZlT3B0aW9ucygpO1xuICAgIGNvbnN0IHdpZHRoID0gY29udGFpbmVyLmNsaWVudFdpZHRoO1xuICAgIGNvbnN0IGhlaWdodCA9IGNvbnRhaW5lci5jbGllbnRIZWlnaHQ7XG4gICAgY29uc3QgaXNSdGwgPSB0aGlzLmlzUnRsKCk7XG4gICAgY29uc3QgYmFzZU1hcmdpbiA9IG9wdGlvbnMubWFyZ2luIHx8IHsgdG9wOiAyMCwgcmlnaHQ6IDIwLCBib3R0b206IDQwLCBsZWZ0OiA0MCB9O1xuICAgIC8vIFdoZW4gcmVuZGVyaW5nIFJUTCwgdGhlIFkgYXhpcyBpcyBvbiB0aGUgcmlnaHQ7IHN3YXAgc2lkZSBtYXJnaW5zIHNvIHRpY2sgbGFiZWxzXG4gICAgLy8gaGF2ZSB0aGUgc2FtZSBicmVhdGhpbmcgcm9vbSB0aGV5IGdldCBvbiB0aGUgbGVmdCBpbiBMVFIuXG4gICAgY29uc3QgbWFyZ2luID0gaXNSdGxcbiAgICAgID8geyB0b3A6IGJhc2VNYXJnaW4udG9wLCByaWdodDogYmFzZU1hcmdpbi5sZWZ0LCBib3R0b206IGJhc2VNYXJnaW4uYm90dG9tLCBsZWZ0OiBiYXNlTWFyZ2luLnJpZ2h0IH1cbiAgICAgIDogYmFzZU1hcmdpbjtcblxuICAgIGNvbnN0IGlubmVyV2lkdGggPSB3aWR0aCAtIG1hcmdpbi5sZWZ0IC0gbWFyZ2luLnJpZ2h0O1xuICAgIGNvbnN0IGlubmVySGVpZ2h0ID0gaGVpZ2h0IC0gbWFyZ2luLnRvcCAtIG1hcmdpbi5ib3R0b207XG5cbiAgICAvLyBDcmVhdGUvU2VsZWN0IFNWRyByb290XG4gICAgaWYgKCF0aGlzLnN2Zykge1xuICAgICAgdGhpcy5zdmcgPSB0aGlzLmQzLnNlbGVjdChjb250YWluZXIpLmFwcGVuZCgnc3ZnJykuYXR0cignc3R5bGUnLCAnd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgZGlzcGxheTogYmxvY2s7Jyk7XG4gICAgICB0aGlzLnN2Zy5hcHBlbmQoJ2cnKS5hdHRyKCdjbGFzcycsICdjaGFydC1ncm91cCcpO1xuICAgIH1cblxuICAgIHRoaXMuc3ZnLmF0dHIoJ3ZpZXdCb3gnLCBgMCAwICR7d2lkdGh9ICR7aGVpZ2h0fWApO1xuICAgIGNvbnN0IGcgPSB0aGlzLnN2Zy5zZWxlY3QoJy5jaGFydC1ncm91cCcpLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHttYXJnaW4ubGVmdH0sJHttYXJnaW4udG9wfSlgKTtcblxuICAgIC8vIC0tLSBTY2FsZXMgLS0tXG4gICAgY29uc3QgeEtleXMgPSBBcnJheS5mcm9tKG5ldyBTZXQoZGF0YS5tYXAoKGQpID0+IGQueC50b1N0cmluZygpKSkpO1xuICAgIGNvbnN0IHlLZXlzID0gQXJyYXkuZnJvbShuZXcgU2V0KGRhdGEubWFwKChkKSA9PiBkLnkudG9TdHJpbmcoKSkpKTtcblxuICAgIGNvbnN0IHhTY2FsZSA9IHRoaXMuZDNcbiAgICAgIC5zY2FsZUJhbmQoKVxuICAgICAgLmRvbWFpbih4S2V5cylcbiAgICAgIC5yYW5nZShpc1J0bCA/IFtpbm5lcldpZHRoLCAwXSA6IFswLCBpbm5lcldpZHRoXSlcbiAgICAgIC5wYWRkaW5nKG9wdGlvbnMuY2VsbFBhZGRpbmcpO1xuICAgIGNvbnN0IHlTY2FsZSA9IHRoaXMuZDMuc2NhbGVCYW5kKCkuZG9tYWluKHlLZXlzKS5yYW5nZShbaW5uZXJIZWlnaHQsIDBdKS5wYWRkaW5nKG9wdGlvbnMuY2VsbFBhZGRpbmcpO1xuXG4gICAgY29uc3QgdmFsdWVFeHRlbnQgPSB0aGlzLmQzLmV4dGVudChkYXRhLCAoZDogYW55KSA9PiBkLnZhbHVlKSBhcyBbbnVtYmVyLCBudW1iZXJdO1xuICAgIGNvbnN0IG1pblZhbHVlID0gTnVtYmVyLmlzRmluaXRlKHZhbHVlRXh0ZW50WzBdKSA/IHZhbHVlRXh0ZW50WzBdIDogMDtcbiAgICBjb25zdCBtYXhWYWx1ZSA9IE51bWJlci5pc0Zpbml0ZSh2YWx1ZUV4dGVudFsxXSkgPyB2YWx1ZUV4dGVudFsxXSA6IG1pblZhbHVlICsgMTtcbiAgICBjb25zdCBwYWxldHRlID0gb3B0aW9ucy5jb2xvcnM/LmZpbHRlcihCb29sZWFuKSA/PyBbXTtcbiAgICBjb25zdCBiYXNlQ29sb3IgPSBvcHRpb25zLmNvbG9yID8/ICdyZ2IoOTksIDEwMiwgMjQxKSc7XG4gICAgY29uc3QgcmFuZ2VNaW4gPSBvcHRpb25zLnZhbHVlUmFuZ2U/Lm1pbiA/PyBtaW5WYWx1ZTtcbiAgICBjb25zdCByYW5nZU1heCA9IG9wdGlvbnMudmFsdWVSYW5nZT8ubWF4ID8/IG1heFZhbHVlO1xuXG4gICAgY29uc3QgcmVzb2x2ZWRDb2xvckNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICBjb25zdCByZXNvbHZlUGFsZXR0ZUNvbG9yID0gKGM6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgICBjb25zdCBoaXQgPSByZXNvbHZlZENvbG9yQ2FjaGUuZ2V0KGMpO1xuICAgICAgaWYgKGhpdCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gaGl0O1xuICAgICAgY29uc3Qgb3V0ID0gcmVzb2x2ZUNzc0NvbG9ySW5Db250ZXh0KGNvbnRhaW5lciwgYyk7XG4gICAgICByZXNvbHZlZENvbG9yQ2FjaGUuc2V0KGMsIG91dCk7XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH07XG4gICAgY29uc3QgcmVzb2x2ZWRCYXNlID0gcmVzb2x2ZVBhbGV0dGVDb2xvcihiYXNlQ29sb3IpO1xuXG4gICAgY29uc3QgZ2V0Q2VsbENvbG9yID0gKGQ6IEFYSGVhdG1hcERhdGEpOiBzdHJpbmcgPT4ge1xuICAgICAgLy8gSWYgYSBwYWxldHRlIGlzIHByb3ZpZGVkLCBjaG9vc2UgYSBzdGFibGUgXCJyYW5kb21cIiBjb2xvciBwZXIgY2VsbC5cbiAgICAgIGlmIChwYWxldHRlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYCR7ZC54fS0ke2QueX1gO1xuICAgICAgICBjb25zdCBpZHggPSB0aGlzLmhhc2hTdHJpbmdUb1VpbnQzMihrZXkpICUgcGFsZXR0ZS5sZW5ndGg7XG4gICAgICAgIHJldHVybiByZXNvbHZlUGFsZXR0ZUNvbG9yKHBhbGV0dGVbaWR4XSA/PyBiYXNlQ29sb3IpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzcGFuID0gcmFuZ2VNYXggLSByYW5nZU1pbjtcbiAgICAgIGNvbnN0IHQgPSBzcGFuID09PSAwID8gMSA6IChkLnZhbHVlIC0gcmFuZ2VNaW4pIC8gc3BhbjtcbiAgICAgIGNvbnN0IGNsYW1wZWQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCB0KSk7XG4gICAgICByZXR1cm4gdGhpcy5hcHBseUludGVuc2l0eVRvUmVzb2x2ZWRSZ2IocmVzb2x2ZWRCYXNlLCBjbGFtcGVkKTtcbiAgICB9O1xuXG4gICAgLy8gLS0tIEF4ZXMgLS0tXG4gICAgdGhpcy5kcmF3QXhpcyhnLCAneC1heGlzJywgdGhpcy5kMy5heGlzQm90dG9tKHhTY2FsZSkudGlja1NpemUoMCksIDAsIGlubmVySGVpZ2h0LCBvcHRpb25zLnNob3dYQXhpcywgaXNSdGwpO1xuICAgIGlmIChpc1J0bCkge1xuICAgICAgdGhpcy5kcmF3QXhpcyhnLCAneS1heGlzJywgdGhpcy5kMy5heGlzUmlnaHQoeVNjYWxlKS50aWNrU2l6ZSgwKSwgaW5uZXJXaWR0aCwgMCwgb3B0aW9ucy5zaG93WUF4aXMsIGlzUnRsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kcmF3QXhpcyhnLCAneS1heGlzJywgdGhpcy5kMy5heGlzTGVmdCh5U2NhbGUpLnRpY2tTaXplKDApLCAwLCAwLCBvcHRpb25zLnNob3dZQXhpcywgaXNSdGwpO1xuICAgIH1cbiAgICB0aGlzLmRyYXdBeGlzTGFiZWxzKGcsIGlubmVyV2lkdGgsIGlubmVySGVpZ2h0LCBvcHRpb25zLCBpc1J0bCk7XG5cbiAgICAvLyAtLS0gQ2VsbHMgd2l0aCBEYXRhIEpvaW4gLS0tXG4gICAgY29uc3QgZWFzaW5nID0gZ2V0RWFzaW5nRnVuY3Rpb24odGhpcy5kMywgb3B0aW9ucy5hbmltYXRpb25FYXNpbmcpO1xuXG4gICAgZy5zZWxlY3RBbGwoJy5jZWxsJylcbiAgICAgIC5kYXRhKGRhdGEsIChkOiBhbnkpID0+IGAke2QueH0tJHtkLnl9YClcbiAgICAgIC5qb2luKFxuICAgICAgICAoZW50ZXI6IGFueSkgPT5cbiAgICAgICAgICBlbnRlci5hcHBlbmQoJ3JlY3QnKS5hdHRyKCdjbGFzcycsICdjZWxsJykuYXR0cignb3BhY2l0eScsIDApLmF0dHIoJ2ZpbGwnLCByZXNvbHZlZEJhc2UpLFxuICAgICAgICAodXBkYXRlOiBhbnkpID0+IHVwZGF0ZSxcbiAgICAgICAgKGV4aXQ6IGFueSkgPT4gZXhpdC50cmFuc2l0aW9uKCkuZHVyYXRpb24oMjAwKS5hdHRyKCdvcGFjaXR5JywgMCkucmVtb3ZlKCksXG4gICAgICApXG4gICAgICAub24oJ21vdXNlZW50ZXInLCAoZXZlbnQ6IGFueSwgZDogQVhIZWF0bWFwRGF0YSkgPT4gdGhpcy5zaG93VG9vbHRpcChldmVudCwgZCwgZ2V0Q2VsbENvbG9yKGQpKSlcbiAgICAgIC5vbignbW91c2Vtb3ZlJywgKGV2ZW50OiBhbnkpID0+IHRoaXMudXBkYXRlVG9vbHRpcFBvcyhldmVudCkpXG4gICAgICAub24oJ2NsaWNrJywgKF9ldmVudDogYW55LCBkOiBBWEhlYXRtYXBEYXRhKSA9PiB0aGlzLmNlbGxDbGljay5lbWl0KGQpKVxuICAgICAgLm9uKCdtb3VzZWxlYXZlJywgKCkgPT4gdGhpcy5oaWRlVG9vbHRpcCgpKVxuICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgLmR1cmF0aW9uKG9wdGlvbnMuYW5pbWF0aW9uRHVyYXRpb24pXG4gICAgICAuZWFzZShlYXNpbmcpXG4gICAgICAuYXR0cigneCcsIChkOiBhbnkpID0+IHhTY2FsZShkLngudG9TdHJpbmcoKSkpXG4gICAgICAuYXR0cigneScsIChkOiBhbnkpID0+IHlTY2FsZShkLnkudG9TdHJpbmcoKSkpXG4gICAgICAuYXR0cignd2lkdGgnLCB4U2NhbGUuYmFuZHdpZHRoKCkpXG4gICAgICAuYXR0cignaGVpZ2h0JywgeVNjYWxlLmJhbmR3aWR0aCgpKVxuICAgICAgLmF0dHIoJ3J4Jywgb3B0aW9ucy5ib3JkZXJSYWRpdXMpXG4gICAgICAuYXR0cigncnknLCBvcHRpb25zLmJvcmRlclJhZGl1cylcbiAgICAgIC5hdHRyKCdvcGFjaXR5JywgMSlcbiAgICAgIC5zdHlsZSgnZmlsbCcsIChkOiBBWEhlYXRtYXBEYXRhKSA9PiBnZXRDZWxsQ29sb3IoZCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNoU3RyaW5nVG9VaW50MzIoaW5wdXQ6IHN0cmluZyk6IG51bWJlciB7XG4gICAgLy8gU2ltcGxlLCBmYXN0LCBkZXRlcm1pbmlzdGljIGhhc2ggKGRqYjIgdmFyaWFudClcbiAgICBsZXQgaGFzaCA9IDUzODE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgICAgaGFzaCA9IChoYXNoICogMzMpIF4gaW5wdXQuY2hhckNvZGVBdChpKTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc2ggPj4+IDA7XG4gIH1cblxuICAvKiogYHJlc29sdmVkUmdiYCBtdXN0IGJlIGEgY29tcHV0ZWQgYHJnYigpYCAvIGByZ2JhKClgIHN0cmluZyAoZS5nLiBmcm9tIHtAbGluayByZXNvbHZlQ3NzQ29sb3JJbkNvbnRleHR9KS4gKi9cbiAgcHJpdmF0ZSBhcHBseUludGVuc2l0eVRvUmVzb2x2ZWRSZ2IocmVzb2x2ZWRSZ2I6IHN0cmluZywgdDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBjbGFtcGVkID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgdCkpO1xuICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMuZDMuY29sb3IocmVzb2x2ZWRSZ2IpO1xuICAgIGlmICghcGFyc2VkKSByZXR1cm4gcmVzb2x2ZWRSZ2I7XG4gICAgY29uc3QgcmdiID0gdGhpcy5kMy5yZ2IocGFyc2VkKTtcbiAgICBjb25zdCBtaW5PcGFjaXR5ID0gMC4xMjtcbiAgICBjb25zdCBvcGFjaXR5ID0gbWluT3BhY2l0eSArIGNsYW1wZWQgKiAoMSAtIG1pbk9wYWNpdHkpO1xuICAgIHJldHVybiBgcmdiYSgke01hdGgucm91bmQocmdiLnIpfSwke01hdGgucm91bmQocmdiLmcpfSwke01hdGgucm91bmQocmdiLmIpfSwke29wYWNpdHl9KWA7XG4gIH1cblxuICBwcml2YXRlIGRyYXdBeGlzKGc6IGFueSwgY2xhc3NOYW1lOiBzdHJpbmcsIGF4aXNGbjogYW55LCB4OiBudW1iZXIsIHk6IG51bWJlciwgdmlzaWJsZSA9IHRydWUsIGlzUnRsID0gZmFsc2UpIHtcbiAgICBsZXQgYXhpc0cgPSBnLnNlbGVjdChgLiR7Y2xhc3NOYW1lfWApO1xuICAgIGlmIChheGlzRy5lbXB0eSgpKSBheGlzRyA9IGcuYXBwZW5kKCdnJykuYXR0cignY2xhc3MnLCBjbGFzc05hbWUpO1xuXG4gICAgYXhpc0dcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKCR7eH0sJHt5fSlgKVxuICAgICAgLnN0eWxlKCdkaXNwbGF5JywgdmlzaWJsZSA/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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"}
|
|
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 color: 'rgb(var(--ax-sys-color-primary-500))',\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhdG1hcC1jaGFydC5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jaGFydHMvaGVhdG1hcC1jaGFydC9zcmMvbGliL2hlYXRtYXAtY2hhcnQuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0MsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQXlCO0lBQy9ELE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7SUFDcEQsS0FBSyxFQUFFLHNDQUFzQztJQUM3QyxXQUFXLEVBQUUsSUFBSTtJQUNqQixZQUFZLEVBQUUsQ0FBQztJQUNmLFNBQVMsRUFBRSxJQUFJO0lBQ2YsU0FBUyxFQUFFLElBQUk7SUFDZixXQUFXLEVBQUUsSUFBSTtJQUNqQixpQkFBaUIsRUFBRSxHQUFHO0lBQ3RCLGVBQWUsRUFBRSxXQUFXO0lBQzVCLFFBQVEsRUFBRTtRQUNSLE1BQU0sRUFBRSxtQkFBbUI7UUFDM0IsVUFBVSxFQUFFLG9EQUFvRDtRQUNoRSxVQUFVLEVBQUUsb0JBQW9CO0tBQ2pDO0NBQ0YsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLElBQUksY0FBYyxDQUF1Qix5QkFBeUIsRUFBRTtJQUN6RyxVQUFVLEVBQUUsTUFBTTtJQUNsQixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsMkJBQTJCO0NBQzNDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWEhlYXRtYXBDaGFydE9wdGlvbiB9IGZyb20gJy4vaGVhdG1hcC1jaGFydC50eXBlJztcblxuZXhwb3J0IGNvbnN0IEFYSGVhdG1hcENoYXJ0RGVmYXVsdENvbmZpZzogQVhIZWF0bWFwQ2hhcnRPcHRpb24gPSB7XG4gIG1hcmdpbjogeyB0b3A6IDMwLCByaWdodDogMzAsIGJvdHRvbTogNjAsIGxlZnQ6IDYwIH0sXG4gIGNvbG9yOiAncmdiKHZhcigtLWF4LXN5cy1jb2xvci1wcmltYXJ5LTUwMCkpJyxcbiAgY2VsbFBhZGRpbmc6IDAuMDUsXG4gIGJvcmRlclJhZGl1czogMixcbiAgc2hvd1hBeGlzOiB0cnVlLFxuICBzaG93WUF4aXM6IHRydWUsXG4gIHNob3dUb29sdGlwOiB0cnVlLFxuICBhbmltYXRpb25EdXJhdGlvbjogODAwLFxuICBhbmltYXRpb25FYXNpbmc6ICdjdWJpYy1vdXQnLFxuICBtZXNzYWdlczoge1xuICAgIG5vRGF0YTogJ05vIGRhdGEgYXZhaWxhYmxlJyxcbiAgICBub0RhdGFIZWxwOiAnUHJvdmlkZSBYLCBZLCBhbmQgVmFsdWUgZGF0YSB0byByZW5kZXIgdGhlIGhlYXRtYXAnLFxuICAgIG5vRGF0YUljb246ICdmYS1saWdodCBmYS1ncmlkLTInLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IEFYX0hFQVRNQVBfQ0hBUlRfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPEFYSGVhdG1hcENoYXJ0T3B0aW9uPignQVhfSEVBVE1BUF9DSEFSVF9DT05GSUcnLCB7XG4gIHByb3ZpZGVkSW46ICdyb290JyxcbiAgZmFjdG9yeTogKCkgPT4gQVhIZWF0bWFwQ2hhcnREZWZhdWx0Q29uZmlnLFxufSk7XG4iXX0=","import { AXChartComponent, computeTooltipPosition, getEasingFunction, resolveCssColorInContext } 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 baseColor = options.color ?? 'rgb(99, 102, 241)';\n const rangeMin = options.valueRange?.min ?? minValue;\n const rangeMax = options.valueRange?.max ?? maxValue;\n const resolvedColorCache = new Map();\n const resolvePaletteColor = (c) => {\n const hit = resolvedColorCache.get(c);\n if (hit !== undefined)\n return hit;\n const out = resolveCssColorInContext(container, c);\n resolvedColorCache.set(c, out);\n return out;\n };\n const resolvedBase = resolvePaletteColor(baseColor);\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 resolvePaletteColor(palette[idx] ?? baseColor);\n }\n const span = rangeMax - rangeMin;\n const t = span === 0 ? 1 : (d.value - rangeMin) / span;\n const clamped = Math.max(0, Math.min(1, t));\n return this.applyIntensityToResolvedRgb(resolvedBase, 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', resolvedBase), (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 /** `resolvedRgb` must be a computed `rgb()` / `rgba()` string (e.g. from {@link resolveCssColorInContext}). */\n applyIntensityToResolvedRgb(resolvedRgb, t) {\n const clamped = Math.max(0, Math.min(1, t));\n const parsed = this.d3.color(resolvedRgb);\n if (!parsed)\n return resolvedRgb;\n const rgb = this.d3.rgb(parsed);\n const minOpacity = 0.12;\n const opacity = minOpacity + clamped * (1 - minOpacity);\n return `rgba(${Math.round(rgb.r)},${Math.round(rgb.g)},${Math.round(rgb.b)},${opacity})`;\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhdG1hcC1jaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jaGFydHMvaGVhdG1hcC1jaGFydC9zcmMvbGliL2hlYXRtYXAtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2hhcnRzL2hlYXRtYXAtY2hhcnQvc3JjL2xpYi9oZWF0bWFwLWNoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxzQkFBc0IsRUFBRSxpQkFBaUIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZILE9BQU8sRUFBRSx1QkFBdUIsRUFBc0IsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBR1QsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEdBQUcsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBV2pFLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxnQkFBZ0I7SUFDM0QsaUNBQWlDO0lBQ2hCLGFBQWEsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUVqRSxTQUFTO0lBQ1QsSUFBSSxHQUFHLEtBQUssQ0FBa0IsRUFBRSxnREFBQyxDQUFDO0lBQ2xDLE9BQU8sR0FBRyxLQUFLLENBQXVCLEVBQUUsbURBQUMsQ0FBQztJQUUxQyxVQUFVO0lBQ1YsNkNBQTZDO0lBQzdDLFNBQVMsR0FB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QUUseUJBQXlCLENBQUMsRUFDN0UsQ0FBQyxNQUFXLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFDdkIsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FDN0I7YUFDQSxJQUFJLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxLQUFLLFdBQVcsR0FBRyxDQUFDLGVBQWUsQ0FBQzthQUNyRSxJQUFJLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQzthQUM3QixJQUFJLENBQUMsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVCLENBQUM7dUdBclNVLHVCQUF1QjsyRkFBdkIsdUJBQXVCLHVnQkM5QnBDLDZjQVdBLHNpRERnQlksdUJBQXVCOzsyRkFHdEIsdUJBQXVCO2tCQVJuQyxTQUFTOytCQUNFLGtCQUFrQixpQkFHYixpQkFBaUIsQ0FBQyxJQUFJLFdBQzVCLENBQUMsdUJBQXVCLENBQUMsbUJBQ2pCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWENoYXJ0Q29tcG9uZW50LCBjb21wdXRlVG9vbHRpcFBvc2l0aW9uLCBnZXRFYXNpbmdGdW5jdGlvbiwgcmVzb2x2ZUNzc0NvbG9ySW5Db250ZXh0IH0gZnJvbSAnQGFjb3JleC9jaGFydHMnO1xuaW1wb3J0IHsgQVhDaGFydFRvb2x0aXBDb21wb25lbnQsIEFYQ2hhcnRUb29sdGlwRGF0YSB9IGZyb20gJ0BhY29yZXgvY2hhcnRzL2NoYXJ0LXRvb2x0aXAnO1xuaW1wb3J0IHsgQVhQbGF0Zm9ybSB9IGZyb20gJ0BhY29yZXgvY29yZS9wbGF0Zm9ybSc7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBPbkRlc3Ryb3ksXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBhZnRlck5leHRSZW5kZXIsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxuICB2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWFwLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFYX0hFQVRNQVBfQ0hBUlRfQ09ORklHIH0gZnJvbSAnLi9oZWF0bWFwLWNoYXJ0LmNvbmZpZyc7XG5pbXBvcnQgeyBBWEhlYXRtYXBDaGFydE9wdGlvbiwgQVhIZWF0bWFwRGF0YSB9IGZyb20gJy4vaGVhdG1hcC1jaGFydC50eXBlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtaGVhdG1hcC1jaGFydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9oZWF0bWFwLWNoYXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaGVhdG1hcC1jaGFydC5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBpbXBvcnRzOiBbQVhDaGFydFRvb2x0aXBDb21wb25lbnRdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQVhIZWF0bWFwQ2hhcnRDb21wb25lbnQgZXh0ZW5kcyBBWENoYXJ0Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgLy8gSW5qZWN0IGNvbmZpZyBhdCB0aGUgdG9wIGxldmVsXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdENvbmZpZyA9IGluamVjdChBWF9IRUFUTUFQX0NIQVJUX0NPTkZJRyk7XG5cbiAgLy8gSW5wdXRzXG4gIGRhdGEgPSBpbnB1dDxBWEhlYXRtYXBEYXRhW10+KFtdKTtcbiAgb3B0aW9ucyA9IGlucHV0PEFYSGVhdG1hcENoYXJ0T3B0aW9uPih7fSk7XG5cbiAgLy8gT3V0cHV0c1xuICAvKiogRW1pdHRlZCB3aGVuIGEgaGVhdG1hcCBjZWxsIGlzIGNsaWNrZWQgKi9cbiAgY2VsbENsaWNrID0gb3V0cHV0PEFYSGVhdG1hcERhdGE+KCk7XG5cbiAgLy8gVmlldyBDaGlsZFxuICBwcml2YXRlIHJlYWRvbmx5IGNvbnRhaW5lclJlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4oJ2NoYXJ0Q29udGFpbmVyJyk7XG5cbiAgLy8gSW50ZXJuYWwgU3RhdGVcbiAgcHJpdmF0ZSBzdmc6IGFueTtcbiAgcHJvdGVjdGVkIGQzOiBhbnk7XG4gIHByaXZhdGUgX2QzUmVhZHkgPSBzaWduYWwoZmFsc2UpO1xuICBwcml2YXRlIHBsYXRmb3JtU2VydmljZSA9IGluamVjdChBWFBsYXRmb3JtKTtcbiAgcHJvdGVjdGVkIGlzUnRsID0gc2lnbmFsKHRoaXMucGxhdGZvcm1TZXJ2aWNlLmlzUnRsKCkpO1xuICBwcml2YXRlIGRpcmVjdGlvblN1Yj86IFN1YnNjcmlwdGlvbjtcblxuICAvLyBUb29sdGlwIFN0YXRlXG4gIHByb3RlY3RlZCB0b29sdGlwVmlzaWJsZSA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCB0b29sdGlwUG9zaXRpb24gPSBzaWduYWwoeyB4OiAwLCB5OiAwIH0pO1xuICBwcm90ZWN0ZWQgdG9vbHRpcERhdGEgPSBzaWduYWw8QVhDaGFydFRvb2x0aXBEYXRhPih7IHRpdGxlOiAnJywgdmFsdWU6ICcnIH0pO1xuICBwcml2YXRlIF90b29sdGlwUmFmSWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIC8vIENvbXB1dGVkIG9wdGlvbnMgKHJlZmVyZW5jaW5nIHRoZSBhbHJlYWR5IGluamVjdGVkIGRlZmF1bHRDb25maWcpXG4gIHByb3RlY3RlZCBlZmZlY3RpdmVPcHRpb25zID0gY29tcHV0ZWQoKCkgPT4gKHtcbiAgICAuLi50aGlzLmRlZmF1bHRDb25maWcsXG4gICAgLi4udGhpcy5vcHRpb25zKCksXG4gIH0pKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBEMyBhbmQgUmVzaXplT2JzZXJ2ZXJcbiAgICBhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuICAgICAgdGhpcy5pbml0KCk7XG4gICAgICB0aGlzLmRpcmVjdGlvblN1YiA9IHRoaXMucGxhdGZvcm1TZXJ2aWNlLmRpcmVjdGlvbkNoYW5nZVxuICAgICAgICAucGlwZShtYXAoKGkpID0+IGkuZGF0YSA9PT0gJ3J0bCcpKVxuICAgICAgICAuc3Vic2NyaWJlKChpc1J0bCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNSdGwuc2V0KGlzUnRsKTtcbiAgICAgICAgICBpZiAodGhpcy5fZDNSZWFkeSgpKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckNoYXJ0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIFJlYWN0aXZlIFJlbmRlciB3aGVuIGRhdGEgb3IgRDMgaXMgcmVhZHlcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2QzUmVhZHkoKSkge1xuICAgICAgICB0aGlzLnJlbmRlckNoYXJ0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGluaXQoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZDMgPSBhd2FpdCBpbXBvcnQoJ2QzJyk7XG5cbiAgICAgIHRoaXMuX2QzUmVhZHkuc2V0KHRydWUpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignSGVhdG1hcDogSW5pdGlhbGl6YXRpb24gZmFpbGVkJywgZXJyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckNoYXJ0KCkge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyUmVmKCkubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhKCkgfHwgW107XG5cbiAgICBpZiAoIWNvbnRhaW5lciB8fCBjb250YWluZXIuY2xpZW50V2lkdGggPT09IDAgfHwgY29udGFpbmVyLmNsaWVudEhlaWdodCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgLy8gQ2xlYXIgU1ZHIGlmIGRhdGEgaXMgZW1wdHlcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIGlmICh0aGlzLnN2ZykgdGhpcy5zdmcucmVtb3ZlKCk7XG4gICAgICB0aGlzLnN2ZyA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZWZmZWN0aXZlT3B0aW9ucygpO1xuICAgIGNvbnN0IHdpZHRoID0gY29udGFpbmVyLmNsaWVudFdpZHRoO1xuICAgIGNvbnN0IGhlaWdodCA9IGNvbnRhaW5lci5jbGllbnRIZWlnaHQ7XG4gICAgY29uc3QgaXNSdGwgPSB0aGlzLmlzUnRsKCk7XG4gICAgY29uc3QgYmFzZU1hcmdpbiA9IG9wdGlvbnMubWFyZ2luIHx8IHsgdG9wOiAyMCwgcmlnaHQ6IDIwLCBib3R0b206IDQwLCBsZWZ0OiA0MCB9O1xuICAgIC8vIFdoZW4gcmVuZGVyaW5nIFJUTCwgdGhlIFkgYXhpcyBpcyBvbiB0aGUgcmlnaHQ7IHN3YXAgc2lkZSBtYXJnaW5zIHNvIHRpY2sgbGFiZWxzXG4gICAgLy8gaGF2ZSB0aGUgc2FtZSBicmVhdGhpbmcgcm9vbSB0aGV5IGdldCBvbiB0aGUgbGVmdCBpbiBMVFIuXG4gICAgY29uc3QgbWFyZ2luID0gaXNSdGxcbiAgICAgID8geyB0b3A6IGJhc2VNYXJnaW4udG9wLCByaWdodDogYmFzZU1hcmdpbi5sZWZ0LCBib3R0b206IGJhc2VNYXJnaW4uYm90dG9tLCBsZWZ0OiBiYXNlTWFyZ2luLnJpZ2h0IH1cbiAgICAgIDogYmFzZU1hcmdpbjtcblxuICAgIGNvbnN0IGlubmVyV2lkdGggPSB3aWR0aCAtIG1hcmdpbi5sZWZ0IC0gbWFyZ2luLnJpZ2h0O1xuICAgIGNvbnN0IGlubmVySGVpZ2h0ID0gaGVpZ2h0IC0gbWFyZ2luLnRvcCAtIG1hcmdpbi5ib3R0b207XG5cbiAgICAvLyBDcmVhdGUvU2VsZWN0IFNWRyByb290XG4gICAgaWYgKCF0aGlzLnN2Zykge1xuICAgICAgdGhpcy5zdmcgPSB0aGlzLmQzLnNlbGVjdChjb250YWluZXIpLmFwcGVuZCgnc3ZnJykuYXR0cignc3R5bGUnLCAnd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgZGlzcGxheTogYmxvY2s7Jyk7XG4gICAgICB0aGlzLnN2Zy5hcHBlbmQoJ2cnKS5hdHRyKCdjbGFzcycsICdjaGFydC1ncm91cCcpO1xuICAgIH1cblxuICAgIHRoaXMuc3ZnLmF0dHIoJ3ZpZXdCb3gnLCBgMCAwICR7d2lkdGh9ICR7aGVpZ2h0fWApO1xuICAgIGNvbnN0IGcgPSB0aGlzLnN2Zy5zZWxlY3QoJy5jaGFydC1ncm91cCcpLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHttYXJnaW4ubGVmdH0sJHttYXJnaW4udG9wfSlgKTtcblxuICAgIC8vIC0tLSBTY2FsZXMgLS0tXG4gICAgY29uc3QgeEtleXMgPSBBcnJheS5mcm9tKG5ldyBTZXQoZGF0YS5tYXAoKGQpID0+IGQueC50b1N0cmluZygpKSkpO1xuICAgIGNvbnN0IHlLZXlzID0gQXJyYXkuZnJvbShuZXcgU2V0KGRhdGEubWFwKChkKSA9PiBkLnkudG9TdHJpbmcoKSkpKTtcblxuICAgIGNvbnN0IHhTY2FsZSA9IHRoaXMuZDNcbiAgICAgIC5zY2FsZUJhbmQoKVxuICAgICAgLmRvbWFpbih4S2V5cylcbiAgICAgIC5yYW5nZShpc1J0bCA/IFtpbm5lcldpZHRoLCAwXSA6IFswLCBpbm5lcldpZHRoXSlcbiAgICAgIC5wYWRkaW5nKG9wdGlvbnMuY2VsbFBhZGRpbmcpO1xuICAgIGNvbnN0IHlTY2FsZSA9IHRoaXMuZDMuc2NhbGVCYW5kKCkuZG9tYWluKHlLZXlzKS5yYW5nZShbaW5uZXJIZWlnaHQsIDBdKS5wYWRkaW5nKG9wdGlvbnMuY2VsbFBhZGRpbmcpO1xuXG4gICAgY29uc3QgdmFsdWVFeHRlbnQgPSB0aGlzLmQzLmV4dGVudChkYXRhLCAoZDogYW55KSA9PiBkLnZhbHVlKSBhcyBbbnVtYmVyLCBudW1iZXJdO1xuICAgIGNvbnN0IG1pblZhbHVlID0gTnVtYmVyLmlzRmluaXRlKHZhbHVlRXh0ZW50WzBdKSA/IHZhbHVlRXh0ZW50WzBdIDogMDtcbiAgICBjb25zdCBtYXhWYWx1ZSA9IE51bWJlci5pc0Zpbml0ZSh2YWx1ZUV4dGVudFsxXSkgPyB2YWx1ZUV4dGVudFsxXSA6IG1pblZhbHVlICsgMTtcbiAgICBjb25zdCBwYWxldHRlID0gb3B0aW9ucy5jb2xvcnM/LmZpbHRlcihCb29sZWFuKSA/PyBbXTtcbiAgICBjb25zdCBiYXNlQ29sb3IgPSBvcHRpb25zLmNvbG9yID8/ICdyZ2IoOTksIDEwMiwgMjQxKSc7XG4gICAgY29uc3QgcmFuZ2VNaW4gPSBvcHRpb25zLnZhbHVlUmFuZ2U/Lm1pbiA/PyBtaW5WYWx1ZTtcbiAgICBjb25zdCByYW5nZU1heCA9IG9wdGlvbnMudmFsdWVSYW5nZT8ubWF4ID8/IG1heFZhbHVlO1xuXG4gICAgY29uc3QgcmVzb2x2ZWRDb2xvckNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICBjb25zdCByZXNvbHZlUGFsZXR0ZUNvbG9yID0gKGM6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgICBjb25zdCBoaXQgPSByZXNvbHZlZENvbG9yQ2FjaGUuZ2V0KGMpO1xuICAgICAgaWYgKGhpdCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gaGl0O1xuICAgICAgY29uc3Qgb3V0ID0gcmVzb2x2ZUNzc0NvbG9ySW5Db250ZXh0KGNvbnRhaW5lciwgYyk7XG4gICAgICByZXNvbHZlZENvbG9yQ2FjaGUuc2V0KGMsIG91dCk7XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH07XG4gICAgY29uc3QgcmVzb2x2ZWRCYXNlID0gcmVzb2x2ZVBhbGV0dGVDb2xvcihiYXNlQ29sb3IpO1xuXG4gICAgY29uc3QgZ2V0Q2VsbENvbG9yID0gKGQ6IEFYSGVhdG1hcERhdGEpOiBzdHJpbmcgPT4ge1xuICAgICAgLy8gSWYgYSBwYWxldHRlIGlzIHByb3ZpZGVkLCBjaG9vc2UgYSBzdGFibGUgXCJyYW5kb21cIiBjb2xvciBwZXIgY2VsbC5cbiAgICAgIGlmIChwYWxldHRlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYCR7ZC54fS0ke2QueX1gO1xuICAgICAgICBjb25zdCBpZHggPSB0aGlzLmhhc2hTdHJpbmdUb1VpbnQzMihrZXkpICUgcGFsZXR0ZS5sZW5ndGg7XG4gICAgICAgIHJldHVybiByZXNvbHZlUGFsZXR0ZUNvbG9yKHBhbGV0dGVbaWR4XSA/PyBiYXNlQ29sb3IpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzcGFuID0gcmFuZ2VNYXggLSByYW5nZU1pbjtcbiAgICAgIGNvbnN0IHQgPSBzcGFuID09PSAwID8gMSA6IChkLnZhbHVlIC0gcmFuZ2VNaW4pIC8gc3BhbjtcbiAgICAgIGNvbnN0IGNsYW1wZWQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCB0KSk7XG4gICAgICByZXR1cm4gdGhpcy5hcHBseUludGVuc2l0eVRvUmVzb2x2ZWRSZ2IocmVzb2x2ZWRCYXNlLCBjbGFtcGVkKTtcbiAgICB9O1xuXG4gICAgLy8gLS0tIEF4ZXMgLS0tXG4gICAgdGhpcy5kcmF3QXhpcyhnLCAneC1heGlzJywgdGhpcy5kMy5heGlzQm90dG9tKHhTY2FsZSkudGlja1NpemUoMCksIDAsIGlubmVySGVpZ2h0LCBvcHRpb25zLnNob3dYQXhpcywgaXNSdGwpO1xuICAgIGlmIChpc1J0bCkge1xuICAgICAgdGhpcy5kcmF3QXhpcyhnLCAneS1heGlzJywgdGhpcy5kMy5heGlzUmlnaHQoeVNjYWxlKS50aWNrU2l6ZSgwKSwgaW5uZXJXaWR0aCwgMCwgb3B0aW9ucy5zaG93WUF4aXMsIGlzUnRsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kcmF3QXhpcyhnLCAneS1heGlzJywgdGhpcy5kMy5heGlzTGVmdCh5U2NhbGUpLnRpY2tTaXplKDApLCAwLCAwLCBvcHRpb25zLnNob3dZQXhpcywgaXNSdGwpO1xuICAgIH1cbiAgICB0aGlzLmRyYXdBeGlzTGFiZWxzKGcsIGlubmVyV2lkdGgsIGlubmVySGVpZ2h0LCBvcHRpb25zLCBpc1J0bCk7XG5cbiAgICAvLyAtLS0gQ2VsbHMgd2l0aCBEYXRhIEpvaW4gLS0tXG4gICAgY29uc3QgZWFzaW5nID0gZ2V0RWFzaW5nRnVuY3Rpb24odGhpcy5kMywgb3B0aW9ucy5hbmltYXRpb25FYXNpbmcpO1xuXG4gICAgZy5zZWxlY3RBbGwoJy5jZWxsJylcbiAgICAgIC5kYXRhKGRhdGEsIChkOiBhbnkpID0+IGAke2QueH0tJHtkLnl9YClcbiAgICAgIC5qb2luKFxuICAgICAgICAoZW50ZXI6IGFueSkgPT5cbiAgICAgICAgICBlbnRlci5hcHBlbmQoJ3JlY3QnKS5hdHRyKCdjbGFzcycsICdjZWxsJykuYXR0cignb3BhY2l0eScsIDApLmF0dHIoJ2ZpbGwnLCByZXNvbHZlZEJhc2UpLFxuICAgICAgICAodXBkYXRlOiBhbnkpID0+IHVwZGF0ZSxcbiAgICAgICAgKGV4aXQ6IGFueSkgPT4gZXhpdC50cmFuc2l0aW9uKCkuZHVyYXRpb24oMjAwKS5hdHRyKCdvcGFjaXR5JywgMCkucmVtb3ZlKCksXG4gICAgICApXG4gICAgICAub24oJ21vdXNlZW50ZXInLCAoZXZlbnQ6IGFueSwgZDogQVhIZWF0bWFwRGF0YSkgPT4gdGhpcy5zaG93VG9vbHRpcChldmVudCwgZCwgZ2V0Q2VsbENvbG9yKGQpKSlcbiAgICAgIC5vbignbW91c2Vtb3ZlJywgKGV2ZW50OiBhbnkpID0+IHRoaXMudXBkYXRlVG9vbHRpcFBvcyhldmVudCkpXG4gICAgICAub24oJ2NsaWNrJywgKF9ldmVudDogYW55LCBkOiBBWEhlYXRtYXBEYXRhKSA9PiB0aGlzLmNlbGxDbGljay5lbWl0KGQpKVxuICAgICAgLm9uKCdtb3VzZWxlYXZlJywgKCkgPT4gdGhpcy5oaWRlVG9vbHRpcCgpKVxuICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgLmR1cmF0aW9uKG9wdGlvbnMuYW5pbWF0aW9uRHVyYXRpb24pXG4gICAgICAuZWFzZShlYXNpbmcpXG4gICAgICAuYXR0cigneCcsIChkOiBhbnkpID0+IHhTY2FsZShkLngudG9TdHJpbmcoKSkpXG4gICAgICAuYXR0cigneScsIChkOiBhbnkpID0+IHlTY2FsZShkLnkudG9TdHJpbmcoKSkpXG4gICAgICAuYXR0cignd2lkdGgnLCB4U2NhbGUuYmFuZHdpZHRoKCkpXG4gICAgICAuYXR0cignaGVpZ2h0JywgeVNjYWxlLmJhbmR3aWR0aCgpKVxuICAgICAgLmF0dHIoJ3J4Jywgb3B0aW9ucy5ib3JkZXJSYWRpdXMpXG4gICAgICAuYXR0cigncnknLCBvcHRpb25zLmJvcmRlclJhZGl1cylcbiAgICAgIC5hdHRyKCdvcGFjaXR5JywgMSlcbiAgICAgIC5zdHlsZSgnZmlsbCcsIChkOiBBWEhlYXRtYXBEYXRhKSA9PiBnZXRDZWxsQ29sb3IoZCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNoU3RyaW5nVG9VaW50MzIoaW5wdXQ6IHN0cmluZyk6IG51bWJlciB7XG4gICAgLy8gU2ltcGxlLCBmYXN0LCBkZXRlcm1pbmlzdGljIGhhc2ggKGRqYjIgdmFyaWFudClcbiAgICBsZXQgaGFzaCA9IDUzODE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgICAgaGFzaCA9IChoYXNoICogMzMpIF4gaW5wdXQuY2hhckNvZGVBdChpKTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc2ggPj4+IDA7XG4gIH1cblxuICAvKiogYHJlc29sdmVkUmdiYCBtdXN0IGJlIGEgY29tcHV0ZWQgYHJnYigpYCAvIGByZ2JhKClgIHN0cmluZyAoZS5nLiBmcm9tIHtAbGluayByZXNvbHZlQ3NzQ29sb3JJbkNvbnRleHR9KS4gKi9cbiAgcHJpdmF0ZSBhcHBseUludGVuc2l0eVRvUmVzb2x2ZWRSZ2IocmVzb2x2ZWRSZ2I6IHN0cmluZywgdDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBjbGFtcGVkID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgdCkpO1xuICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMuZDMuY29sb3IocmVzb2x2ZWRSZ2IpO1xuICAgIGlmICghcGFyc2VkKSByZXR1cm4gcmVzb2x2ZWRSZ2I7XG4gICAgY29uc3QgcmdiID0gdGhpcy5kMy5yZ2IocGFyc2VkKTtcbiAgICBjb25zdCBtaW5PcGFjaXR5ID0gMC4xMjtcbiAgICBjb25zdCBvcGFjaXR5ID0gbWluT3BhY2l0eSArIGNsYW1wZWQgKiAoMSAtIG1pbk9wYWNpdHkpO1xuICAgIHJldHVybiBgcmdiYSgke01hdGgucm91bmQocmdiLnIpfSwke01hdGgucm91bmQocmdiLmcpfSwke01hdGgucm91bmQocmdiLmIpfSwke29wYWNpdHl9KWA7XG4gIH1cblxuICBwcml2YXRlIGRyYXdBeGlzKGc6IGFueSwgY2xhc3NOYW1lOiBzdHJpbmcsIGF4aXNGbjogYW55LCB4OiBudW1iZXIsIHk6IG51bWJlciwgdmlzaWJsZSA9IHRydWUsIGlzUnRsID0gZmFsc2UpIHtcbiAgICBsZXQgYXhpc0cgPSBnLnNlbGVjdChgLiR7Y2xhc3NOYW1lfWApO1xuICAgIGlmIChheGlzRy5lbXB0eSgpKSBheGlzRyA9IGcuYXBwZW5kKCdnJykuYXR0cignY2xhc3MnLCBjbGFzc05hbWUpO1xuXG4gICAgYXhpc0dcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKCR7eH0sJHt5fSlgKVxuICAgICAgLnN0eWxlKCdkaXNwbGF5JywgdmlzaWJsZSA/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
|
@@ -44,7 +44,13 @@ interface AXFunnelChartOption {
|
|
|
44
44
|
max: number;
|
|
45
45
|
};
|
|
46
46
|
showLabels?: boolean;
|
|
47
|
-
/**
|
|
47
|
+
/**
|
|
48
|
+
* When `showLabels` is true, also render the numeric value on each segment.
|
|
49
|
+
* Values still appear in the tooltip when `showTooltip` is enabled.
|
|
50
|
+
* @default true
|
|
51
|
+
*/
|
|
52
|
+
showSegmentValues?: boolean;
|
|
53
|
+
/** @deprecated Labels render inside segments; offset is unused. */
|
|
48
54
|
labelOffset?: number;
|
|
49
55
|
showTooltip?: boolean;
|
|
50
56
|
animationDuration?: number;
|
|
@@ -62,9 +68,8 @@ declare class AXFunnelChartComponent extends AXChartComponent implements OnDestr
|
|
|
62
68
|
protected d3: typeof d3;
|
|
63
69
|
private _initialized;
|
|
64
70
|
private _rendered;
|
|
65
|
-
private
|
|
66
|
-
|
|
67
|
-
private directionSub?;
|
|
71
|
+
private resizeObserver;
|
|
72
|
+
private resizeDebounceId;
|
|
68
73
|
private _tooltipVisible;
|
|
69
74
|
private _tooltipPosition;
|
|
70
75
|
private _tooltipData;
|
|
@@ -93,6 +98,7 @@ declare class AXFunnelChartComponent extends AXChartComponent implements OnDestr
|
|
|
93
98
|
max: number;
|
|
94
99
|
};
|
|
95
100
|
showLabels?: boolean;
|
|
101
|
+
showSegmentValues?: boolean;
|
|
96
102
|
labelOffset?: number;
|
|
97
103
|
showTooltip?: boolean;
|
|
98
104
|
animationDuration?: number;
|
|
@@ -101,8 +107,14 @@ declare class AXFunnelChartComponent extends AXChartComponent implements OnDestr
|
|
|
101
107
|
}>;
|
|
102
108
|
constructor();
|
|
103
109
|
ngOnDestroy(): void;
|
|
110
|
+
private attachResizeObserver;
|
|
111
|
+
private detachResizeObserver;
|
|
104
112
|
protected loadD3(): Promise<void>;
|
|
105
113
|
createChart(): void;
|
|
114
|
+
private trapezoidInteriorMetrics;
|
|
115
|
+
private computeSegmentLabelTypography;
|
|
116
|
+
private truncateLabel;
|
|
117
|
+
private pickOnSliceTextColors;
|
|
106
118
|
private resolveSliceColor;
|
|
107
119
|
/** `resolvedRgb` must be a computed `rgb()` / `rgba()` string (e.g. from {@link resolveCssColor}). */
|
|
108
120
|
private applyIntensityToResolvedRgb;
|