@rivet-health/design-system 11.3.0 → 11.3.2

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.
@@ -139,10 +139,10 @@ export class ChartComponent {
139
139
  }
140
140
  }
141
141
  ChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
142
- ChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ChartComponent, selector: "riv-chart", inputs: { config: "config", data: "data" }, outputs: { chartClicked: "chartClicked" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "moreTextContainer", first: true, predicate: ["moreTextContainer"], descendants: true }], ngImport: i0, template: "<div\n class=\"container\"\n (rivClientSize)=\"width = $event.width\"\n *ngIf=\"!(empty$ | async); else zeroState\"\n>\n <ng-container *ngIf=\"drawData$ | async; let d\">\n <div\n (mousemove)=\"mousemove($event, d.hover)\"\n (mouseleave)=\"mouseleave($event)\"\n (click)=\"click()\"\n #container\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" [attr.viewBox]=\"d.viewBox\">\n <g *ngFor=\"let tick of d.xTicks\" text-anchor=\"middle\">\n <line\n class=\"tick-line\"\n [attr.x1]=\"tick.x\"\n [attr.x2]=\"tick.x\"\n y1=\"0\"\n [attr.y2]=\"HEIGHT - 16\"\n ></line>\n <text class=\"tick-label\" [attr.x]=\"tick.x\" [attr.y]=\"HEIGHT - 4\">\n {{ tick.label }}\n </text>\n </g>\n <g *ngFor=\"let tick of d.yTicks\">\n <line\n class=\"tick-line\"\n [attr.y1]=\"tick.y\"\n [attr.y2]=\"tick.y\"\n x1=\"0\"\n [attr.x2]=\"width\"\n ></line>\n <text class=\"tick-label\" [attr.y]=\"tick.y - 4\" [attr.x]=\"0\">\n {{ tick.label }}\n </text>\n </g>\n <g *ngIf=\"hover != null\">\n <line\n class=\"tick-line\"\n [attr.x1]=\"hover.x\"\n [attr.x2]=\"hover.x\"\n y1=\"0\"\n [attr.y2]=\"HEIGHT - 16\"\n stroke-width=\"2\"\n stroke-dasharray=\"4\"\n />\n </g>\n <g *ngFor=\"let bar of d.bars; let i = index\">\n <rect\n *ngFor=\"let rect of bar\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n [attr.fill]=\"varColor(d.colors, i)\"\n ></rect>\n </g>\n <g *ngFor=\"let line of d.lines; let i = index\">\n <path\n [attr.d]=\"line\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n fill=\"none\"\n stroke-width=\"2\"\n ></path>\n </g>\n <g *ngFor=\"let line of d.lines; let i = index\">\n <circle\n class=\"marker\"\n *ngIf=\"\n hover != null &&\n (config.groupedTooltip || i == hover.visibleYIndex)\n \"\n [attr.cx]=\"hover.x\"\n [attr.cy]=\"hover.ys[i]\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n <g *ngFor=\"let area of d.areas; let i = index\">\n <path [attr.d]=\"area\" [attr.fill]=\"varColor(d.colors, i)\"></path>\n </g>\n <g *ngFor=\"let area of d.areas; let i = index\">\n <circle\n class=\"marker\"\n *ngIf=\"\n hover != null &&\n (config.groupedTooltip || i == hover.visibleYIndex)\n \"\n [attr.cx]=\"hover.x\"\n [attr.cy]=\"hover.ys[i]\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n </svg>\n <ng-container *ngIf=\"hover != null\">\n <riv-callout\n [anchor]=\"hover.tooltip.anchor\"\n [isModal]=\"false\"\n [preferredPosition]=\"'center-right'\"\n [theme]=\"'light'\"\n >\n <div class=\"callout-content\">\n <div class=\"callout-row\">\n {{ hover.tooltip.date }}\n </div>\n <div\n class=\"callout-row\"\n *ngFor=\"let metric of hover.tooltip.metrics\"\n >\n <span class=\"series-label\">\n <riv-legend-item [colorToken]=\"metric.color\"></riv-legend-item>\n <span>{{ metric.label }}</span>\n </span>\n <span>{{ metric.value }}</span>\n </div>\n </div>\n </riv-callout>\n </ng-container>\n </div>\n <legend>\n <ng-container *ngIf=\"firstHiddenLegendItemIndex$ | async; let fi\">\n <ng-container *ngFor=\"let item of d.data.ys; let i = index\">\n <riv-legend-item\n *ngIf=\"i < fi\"\n [label]=\"item.label\"\n [visibility]=\"item.hidden ? 'hidden' : 'visible'\"\n [clickable]=\"config.allowLegendToggle\"\n [colorToken]=\"config.colors[i % config.colors.length]\"\n (itemClick)=\"toggleLegend(item.label)\"\n ></riv-legend-item>\n </ng-container>\n <div\n #moreTextContainer\n (mouseover)=\"mouseoverLegend()\"\n (mouseleave)=\"mouseleaveLegend()\"\n (click)=\"moreClick()\"\n *ngIf=\"fi < d.data.ys.length\"\n >\n <span rivLink class=\"more-text\">\n +\n {{ d.data.ys.length - fi }} more\n </span>\n </div>\n <ng-container *ngIf=\"showMoreTooltip || lockShowMoreTooltip\">\n <riv-callout\n #legendTooltip\n [anchor]=\"moreTextContainer?.nativeElement\"\n [isModal]=\"lockShowMoreTooltip\"\n (close)=\"lockShowMoreTooltip = false\"\n [preferredPosition]=\"'bottom-right'\"\n [theme]=\"'light'\"\n >\n <div class=\"callout-content\">\n <ng-container *ngFor=\"let item of d.data.ys; let i = index\">\n <riv-legend-item\n *ngIf=\"i >= fi\"\n [label]=\"item.label\"\n [visibility]=\"item.hidden ? 'hidden' : 'visible'\"\n [clickable]=\"config.allowLegendToggle\"\n [colorToken]=\"config.colors[i % config.colors.length]\"\n (itemClick)=\"toggleLegend(item.label)\"\n ></riv-legend-item>\n </ng-container>\n </div>\n </riv-callout>\n </ng-container>\n </ng-container>\n </legend>\n </ng-container>\n</div>\n\n<ng-template #zeroState>\n <riv-zero-state [message]=\"config.zeroStateMessage\"></riv-zero-state>\n</ng-template>\n", styles: [".container{-webkit-user-select:none;user-select:none;position:relative;display:flex;flex-direction:column;gap:var(--size-small)}.tick-line{stroke:var(--gray-20)}.tick-label{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);fill:var(--type-light-low-contrast)}.marker{fill:var(--surface-light-0)}.callout-content{pointer-events:none;padding:var(--size-medium) var(--size-xlarge);display:flex;flex-direction:column}.callout-row{white-space:nowrap;display:flex;padding:var(--size-medium) 0;gap:var(--size-medium);align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);&:not(:last-child){border-bottom:var(--border-width) solid var(--border-light)}}.series-label{flex-grow:1;font-weight:var(--font-weight-heavy);display:flex;align-items:center;gap:var(--size-small)}legend{display:flex;flex-wrap:wrap;gap:var(--size-large);justify-content:flex-start;align-items:baseline}.more-text{font-size:var(--type-1-font-size)}.callout-content>riv-legend-item{white-space:nowrap;display:flex;padding:var(--size-medium) 0;gap:var(--size-medium);align-items:center;line-height:var(--type-1-line-height-0)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "component", type: i3.LegendItemComponent, selector: "riv-legend-item", inputs: ["label", "colorToken", "style", "visibility", "iconTooltip", "clickable", "showCheckWhenClickable"], outputs: ["itemClick"] }, { kind: "component", type: i4.LinkComponent, selector: "[rivLink]", inputs: ["disabled", "locked"] }, { kind: "directive", type: i5.SizeDirective, selector: "[rivClientSize]", outputs: ["rivClientSize"] }, { kind: "component", type: i6.ZeroStateComponent, selector: "riv-zero-state", inputs: ["message"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
142
+ ChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ChartComponent, selector: "riv-chart", inputs: { config: "config", data: "data" }, outputs: { chartClicked: "chartClicked" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "moreTextContainer", first: true, predicate: ["moreTextContainer"], descendants: true }], ngImport: i0, template: "<div\n class=\"container\"\n (rivClientSize)=\"width = $event.width\"\n *ngIf=\"!(empty$ | async); else zeroState\"\n>\n <ng-container *ngIf=\"drawData$ | async; let d\">\n <div\n (mousemove)=\"mousemove($event, d.hover)\"\n (mouseleave)=\"mouseleave($event)\"\n (click)=\"click()\"\n #container\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" [attr.viewBox]=\"d.viewBox\">\n <g *ngFor=\"let tick of d.xTicks\" text-anchor=\"middle\">\n <line\n class=\"tick-line\"\n [attr.x1]=\"tick.x\"\n [attr.x2]=\"tick.x\"\n y1=\"0\"\n [attr.y2]=\"HEIGHT - 16\"\n ></line>\n <text class=\"tick-label\" [attr.x]=\"tick.x\" [attr.y]=\"HEIGHT - 4\">\n {{ tick.label }}\n </text>\n </g>\n <g *ngFor=\"let tick of d.yTicks\">\n <line\n class=\"tick-line\"\n [attr.y1]=\"tick.y\"\n [attr.y2]=\"tick.y\"\n x1=\"0\"\n [attr.x2]=\"width\"\n ></line>\n <text class=\"tick-label\" [attr.y]=\"tick.y - 4\" [attr.x]=\"0\">\n {{ tick.label }}\n </text>\n </g>\n <g *ngIf=\"hover != null\">\n <line\n class=\"tick-line\"\n [attr.x1]=\"hover.x\"\n [attr.x2]=\"hover.x\"\n y1=\"0\"\n [attr.y2]=\"HEIGHT - 16\"\n stroke-width=\"2\"\n stroke-dasharray=\"4\"\n />\n </g>\n <g *ngFor=\"let bar of d.bars; let i = index\">\n <rect\n *ngFor=\"let rect of bar\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n [attr.fill]=\"varColor(d.colors, i)\"\n ></rect>\n </g>\n <g *ngFor=\"let line of d.lines; let i = index\">\n <path\n [attr.d]=\"line\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n fill=\"none\"\n stroke-width=\"2\"\n ></path>\n </g>\n <g *ngFor=\"let line of d.lines; let i = index\">\n <circle\n class=\"marker\"\n *ngIf=\"\n hover != null &&\n (config.groupedTooltip || i == hover.visibleYIndex)\n \"\n [attr.cx]=\"hover.x\"\n [attr.cy]=\"hover.ys[i]\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n <g *ngFor=\"let area of d.areas; let i = index\">\n <path [attr.d]=\"area\" [attr.fill]=\"varColor(d.colors, i)\"></path>\n </g>\n <g *ngFor=\"let area of d.areas; let i = index\">\n <circle\n class=\"marker\"\n *ngIf=\"\n hover != null &&\n (config.groupedTooltip || i == hover.visibleYIndex)\n \"\n [attr.cx]=\"hover.x\"\n [attr.cy]=\"hover.ys[i]\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n </svg>\n <ng-container *ngIf=\"hover != null\">\n <riv-callout\n [anchor]=\"hover.tooltip.anchor\"\n [isModal]=\"false\"\n [preferredPosition]=\"'center-right'\"\n [theme]=\"'light'\"\n >\n <div class=\"callout-content\">\n <div class=\"callout-row\">\n {{ hover.tooltip.date }}\n </div>\n <div\n class=\"callout-row\"\n *ngFor=\"let metric of hover.tooltip.metrics\"\n >\n <span class=\"series-label\">\n <riv-legend-item [colorToken]=\"metric.color\"></riv-legend-item>\n <span>{{ metric.label }}</span>\n </span>\n <span>{{ metric.value }}</span>\n </div>\n </div>\n </riv-callout>\n </ng-container>\n </div>\n <legend>\n <ng-container *ngIf=\"firstHiddenLegendItemIndex$ | async; let fi\">\n <ng-container *ngFor=\"let item of d.data.ys; let i = index\">\n <riv-legend-item\n *ngIf=\"i < fi\"\n [label]=\"item.label\"\n [visibility]=\"item.hidden ? 'hidden' : 'visible'\"\n [clickable]=\"config.allowLegendToggle\"\n [colorToken]=\"config.colors[i % config.colors.length]\"\n (itemClick)=\"toggleLegend(item.label)\"\n ></riv-legend-item>\n </ng-container>\n <div\n #moreTextContainer\n class=\"more-text-container\"\n (mouseover)=\"mouseoverLegend()\"\n (mouseleave)=\"mouseleaveLegend()\"\n (click)=\"moreClick()\"\n *ngIf=\"fi < d.data.ys.length\"\n >\n <span rivLink class=\"more-text\">\n +\n {{ d.data.ys.length - fi }} more\n </span>\n </div>\n <ng-container *ngIf=\"showMoreTooltip || lockShowMoreTooltip\">\n <riv-callout\n #legendTooltip\n [anchor]=\"moreTextContainer?.nativeElement\"\n [isModal]=\"lockShowMoreTooltip\"\n (close)=\"lockShowMoreTooltip = false\"\n [preferredPosition]=\"'bottom-right'\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n >\n <div class=\"legend-tooltip\">\n <ng-container *ngFor=\"let item of d.data.ys; let i = index\">\n <riv-legend-item\n *ngIf=\"i >= fi\"\n [label]=\"item.label\"\n [visibility]=\"item.hidden ? 'hidden' : 'visible'\"\n [clickable]=\"config.allowLegendToggle\"\n [colorToken]=\"config.colors[i % config.colors.length]\"\n (itemClick)=\"toggleLegend(item.label)\"\n ></riv-legend-item>\n </ng-container>\n </div>\n </riv-callout>\n </ng-container>\n </ng-container>\n </legend>\n </ng-container>\n</div>\n\n<ng-template #zeroState>\n <riv-zero-state [message]=\"config.zeroStateMessage\"></riv-zero-state>\n</ng-template>\n", styles: [".container{-webkit-user-select:none;user-select:none;position:relative;display:flex;flex-direction:column;gap:var(--size-small)}.tick-line{stroke:var(--gray-20)}.tick-label{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);fill:var(--type-light-low-contrast)}.marker{fill:var(--surface-light-0)}.callout-content{pointer-events:none;padding:var(--size-medium) var(--size-xlarge);display:flex;flex-direction:column}.callout-row{white-space:nowrap;display:flex;padding:var(--size-medium) 0;gap:var(--size-medium);align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);&:not(:last-child){border-bottom:var(--border-width) solid var(--border-light)}}.series-label{flex-grow:1;font-weight:var(--font-weight-heavy);display:flex;align-items:center;gap:var(--size-small)}legend{display:flex;flex-wrap:wrap;gap:var(--size-large);justify-content:flex-start;align-items:baseline}.more-text-container{width:calc(var(--base-grid-size) * 15);height:var(--size-large)}.more-text{font-size:var(--type-1-font-size);top:calc(var(--base-grid-size) * -1);position:relative}.legend-tooltip{padding:var(--size-medium) var(--size-xlarge);display:flex;flex-direction:column;overflow-y:scroll;max-height:clamp(0px,60vh,600px)}.legend-tooltip>riv-legend-item{white-space:nowrap;display:flex;padding:var(--size-medium) 0;gap:var(--size-medium);align-items:center;line-height:var(--type-1-line-height-0)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "component", type: i3.LegendItemComponent, selector: "riv-legend-item", inputs: ["label", "colorToken", "style", "visibility", "iconTooltip", "clickable", "showCheckWhenClickable"], outputs: ["itemClick"] }, { kind: "component", type: i4.LinkComponent, selector: "[rivLink]", inputs: ["disabled", "locked"] }, { kind: "directive", type: i5.SizeDirective, selector: "[rivClientSize]", outputs: ["rivClientSize"] }, { kind: "component", type: i6.ZeroStateComponent, selector: "riv-zero-state", inputs: ["message"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
143
143
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ChartComponent, decorators: [{
144
144
  type: Component,
145
- args: [{ selector: 'riv-chart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"container\"\n (rivClientSize)=\"width = $event.width\"\n *ngIf=\"!(empty$ | async); else zeroState\"\n>\n <ng-container *ngIf=\"drawData$ | async; let d\">\n <div\n (mousemove)=\"mousemove($event, d.hover)\"\n (mouseleave)=\"mouseleave($event)\"\n (click)=\"click()\"\n #container\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" [attr.viewBox]=\"d.viewBox\">\n <g *ngFor=\"let tick of d.xTicks\" text-anchor=\"middle\">\n <line\n class=\"tick-line\"\n [attr.x1]=\"tick.x\"\n [attr.x2]=\"tick.x\"\n y1=\"0\"\n [attr.y2]=\"HEIGHT - 16\"\n ></line>\n <text class=\"tick-label\" [attr.x]=\"tick.x\" [attr.y]=\"HEIGHT - 4\">\n {{ tick.label }}\n </text>\n </g>\n <g *ngFor=\"let tick of d.yTicks\">\n <line\n class=\"tick-line\"\n [attr.y1]=\"tick.y\"\n [attr.y2]=\"tick.y\"\n x1=\"0\"\n [attr.x2]=\"width\"\n ></line>\n <text class=\"tick-label\" [attr.y]=\"tick.y - 4\" [attr.x]=\"0\">\n {{ tick.label }}\n </text>\n </g>\n <g *ngIf=\"hover != null\">\n <line\n class=\"tick-line\"\n [attr.x1]=\"hover.x\"\n [attr.x2]=\"hover.x\"\n y1=\"0\"\n [attr.y2]=\"HEIGHT - 16\"\n stroke-width=\"2\"\n stroke-dasharray=\"4\"\n />\n </g>\n <g *ngFor=\"let bar of d.bars; let i = index\">\n <rect\n *ngFor=\"let rect of bar\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n [attr.fill]=\"varColor(d.colors, i)\"\n ></rect>\n </g>\n <g *ngFor=\"let line of d.lines; let i = index\">\n <path\n [attr.d]=\"line\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n fill=\"none\"\n stroke-width=\"2\"\n ></path>\n </g>\n <g *ngFor=\"let line of d.lines; let i = index\">\n <circle\n class=\"marker\"\n *ngIf=\"\n hover != null &&\n (config.groupedTooltip || i == hover.visibleYIndex)\n \"\n [attr.cx]=\"hover.x\"\n [attr.cy]=\"hover.ys[i]\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n <g *ngFor=\"let area of d.areas; let i = index\">\n <path [attr.d]=\"area\" [attr.fill]=\"varColor(d.colors, i)\"></path>\n </g>\n <g *ngFor=\"let area of d.areas; let i = index\">\n <circle\n class=\"marker\"\n *ngIf=\"\n hover != null &&\n (config.groupedTooltip || i == hover.visibleYIndex)\n \"\n [attr.cx]=\"hover.x\"\n [attr.cy]=\"hover.ys[i]\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n </svg>\n <ng-container *ngIf=\"hover != null\">\n <riv-callout\n [anchor]=\"hover.tooltip.anchor\"\n [isModal]=\"false\"\n [preferredPosition]=\"'center-right'\"\n [theme]=\"'light'\"\n >\n <div class=\"callout-content\">\n <div class=\"callout-row\">\n {{ hover.tooltip.date }}\n </div>\n <div\n class=\"callout-row\"\n *ngFor=\"let metric of hover.tooltip.metrics\"\n >\n <span class=\"series-label\">\n <riv-legend-item [colorToken]=\"metric.color\"></riv-legend-item>\n <span>{{ metric.label }}</span>\n </span>\n <span>{{ metric.value }}</span>\n </div>\n </div>\n </riv-callout>\n </ng-container>\n </div>\n <legend>\n <ng-container *ngIf=\"firstHiddenLegendItemIndex$ | async; let fi\">\n <ng-container *ngFor=\"let item of d.data.ys; let i = index\">\n <riv-legend-item\n *ngIf=\"i < fi\"\n [label]=\"item.label\"\n [visibility]=\"item.hidden ? 'hidden' : 'visible'\"\n [clickable]=\"config.allowLegendToggle\"\n [colorToken]=\"config.colors[i % config.colors.length]\"\n (itemClick)=\"toggleLegend(item.label)\"\n ></riv-legend-item>\n </ng-container>\n <div\n #moreTextContainer\n (mouseover)=\"mouseoverLegend()\"\n (mouseleave)=\"mouseleaveLegend()\"\n (click)=\"moreClick()\"\n *ngIf=\"fi < d.data.ys.length\"\n >\n <span rivLink class=\"more-text\">\n +\n {{ d.data.ys.length - fi }} more\n </span>\n </div>\n <ng-container *ngIf=\"showMoreTooltip || lockShowMoreTooltip\">\n <riv-callout\n #legendTooltip\n [anchor]=\"moreTextContainer?.nativeElement\"\n [isModal]=\"lockShowMoreTooltip\"\n (close)=\"lockShowMoreTooltip = false\"\n [preferredPosition]=\"'bottom-right'\"\n [theme]=\"'light'\"\n >\n <div class=\"callout-content\">\n <ng-container *ngFor=\"let item of d.data.ys; let i = index\">\n <riv-legend-item\n *ngIf=\"i >= fi\"\n [label]=\"item.label\"\n [visibility]=\"item.hidden ? 'hidden' : 'visible'\"\n [clickable]=\"config.allowLegendToggle\"\n [colorToken]=\"config.colors[i % config.colors.length]\"\n (itemClick)=\"toggleLegend(item.label)\"\n ></riv-legend-item>\n </ng-container>\n </div>\n </riv-callout>\n </ng-container>\n </ng-container>\n </legend>\n </ng-container>\n</div>\n\n<ng-template #zeroState>\n <riv-zero-state [message]=\"config.zeroStateMessage\"></riv-zero-state>\n</ng-template>\n", styles: [".container{-webkit-user-select:none;user-select:none;position:relative;display:flex;flex-direction:column;gap:var(--size-small)}.tick-line{stroke:var(--gray-20)}.tick-label{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);fill:var(--type-light-low-contrast)}.marker{fill:var(--surface-light-0)}.callout-content{pointer-events:none;padding:var(--size-medium) var(--size-xlarge);display:flex;flex-direction:column}.callout-row{white-space:nowrap;display:flex;padding:var(--size-medium) 0;gap:var(--size-medium);align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);&:not(:last-child){border-bottom:var(--border-width) solid var(--border-light)}}.series-label{flex-grow:1;font-weight:var(--font-weight-heavy);display:flex;align-items:center;gap:var(--size-small)}legend{display:flex;flex-wrap:wrap;gap:var(--size-large);justify-content:flex-start;align-items:baseline}.more-text{font-size:var(--type-1-font-size)}.callout-content>riv-legend-item{white-space:nowrap;display:flex;padding:var(--size-medium) 0;gap:var(--size-medium);align-items:center;line-height:var(--type-1-line-height-0)}\n"] }]
145
+ args: [{ selector: 'riv-chart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"container\"\n (rivClientSize)=\"width = $event.width\"\n *ngIf=\"!(empty$ | async); else zeroState\"\n>\n <ng-container *ngIf=\"drawData$ | async; let d\">\n <div\n (mousemove)=\"mousemove($event, d.hover)\"\n (mouseleave)=\"mouseleave($event)\"\n (click)=\"click()\"\n #container\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" [attr.viewBox]=\"d.viewBox\">\n <g *ngFor=\"let tick of d.xTicks\" text-anchor=\"middle\">\n <line\n class=\"tick-line\"\n [attr.x1]=\"tick.x\"\n [attr.x2]=\"tick.x\"\n y1=\"0\"\n [attr.y2]=\"HEIGHT - 16\"\n ></line>\n <text class=\"tick-label\" [attr.x]=\"tick.x\" [attr.y]=\"HEIGHT - 4\">\n {{ tick.label }}\n </text>\n </g>\n <g *ngFor=\"let tick of d.yTicks\">\n <line\n class=\"tick-line\"\n [attr.y1]=\"tick.y\"\n [attr.y2]=\"tick.y\"\n x1=\"0\"\n [attr.x2]=\"width\"\n ></line>\n <text class=\"tick-label\" [attr.y]=\"tick.y - 4\" [attr.x]=\"0\">\n {{ tick.label }}\n </text>\n </g>\n <g *ngIf=\"hover != null\">\n <line\n class=\"tick-line\"\n [attr.x1]=\"hover.x\"\n [attr.x2]=\"hover.x\"\n y1=\"0\"\n [attr.y2]=\"HEIGHT - 16\"\n stroke-width=\"2\"\n stroke-dasharray=\"4\"\n />\n </g>\n <g *ngFor=\"let bar of d.bars; let i = index\">\n <rect\n *ngFor=\"let rect of bar\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n [attr.fill]=\"varColor(d.colors, i)\"\n ></rect>\n </g>\n <g *ngFor=\"let line of d.lines; let i = index\">\n <path\n [attr.d]=\"line\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n fill=\"none\"\n stroke-width=\"2\"\n ></path>\n </g>\n <g *ngFor=\"let line of d.lines; let i = index\">\n <circle\n class=\"marker\"\n *ngIf=\"\n hover != null &&\n (config.groupedTooltip || i == hover.visibleYIndex)\n \"\n [attr.cx]=\"hover.x\"\n [attr.cy]=\"hover.ys[i]\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n <g *ngFor=\"let area of d.areas; let i = index\">\n <path [attr.d]=\"area\" [attr.fill]=\"varColor(d.colors, i)\"></path>\n </g>\n <g *ngFor=\"let area of d.areas; let i = index\">\n <circle\n class=\"marker\"\n *ngIf=\"\n hover != null &&\n (config.groupedTooltip || i == hover.visibleYIndex)\n \"\n [attr.cx]=\"hover.x\"\n [attr.cy]=\"hover.ys[i]\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n </svg>\n <ng-container *ngIf=\"hover != null\">\n <riv-callout\n [anchor]=\"hover.tooltip.anchor\"\n [isModal]=\"false\"\n [preferredPosition]=\"'center-right'\"\n [theme]=\"'light'\"\n >\n <div class=\"callout-content\">\n <div class=\"callout-row\">\n {{ hover.tooltip.date }}\n </div>\n <div\n class=\"callout-row\"\n *ngFor=\"let metric of hover.tooltip.metrics\"\n >\n <span class=\"series-label\">\n <riv-legend-item [colorToken]=\"metric.color\"></riv-legend-item>\n <span>{{ metric.label }}</span>\n </span>\n <span>{{ metric.value }}</span>\n </div>\n </div>\n </riv-callout>\n </ng-container>\n </div>\n <legend>\n <ng-container *ngIf=\"firstHiddenLegendItemIndex$ | async; let fi\">\n <ng-container *ngFor=\"let item of d.data.ys; let i = index\">\n <riv-legend-item\n *ngIf=\"i < fi\"\n [label]=\"item.label\"\n [visibility]=\"item.hidden ? 'hidden' : 'visible'\"\n [clickable]=\"config.allowLegendToggle\"\n [colorToken]=\"config.colors[i % config.colors.length]\"\n (itemClick)=\"toggleLegend(item.label)\"\n ></riv-legend-item>\n </ng-container>\n <div\n #moreTextContainer\n class=\"more-text-container\"\n (mouseover)=\"mouseoverLegend()\"\n (mouseleave)=\"mouseleaveLegend()\"\n (click)=\"moreClick()\"\n *ngIf=\"fi < d.data.ys.length\"\n >\n <span rivLink class=\"more-text\">\n +\n {{ d.data.ys.length - fi }} more\n </span>\n </div>\n <ng-container *ngIf=\"showMoreTooltip || lockShowMoreTooltip\">\n <riv-callout\n #legendTooltip\n [anchor]=\"moreTextContainer?.nativeElement\"\n [isModal]=\"lockShowMoreTooltip\"\n (close)=\"lockShowMoreTooltip = false\"\n [preferredPosition]=\"'bottom-right'\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n >\n <div class=\"legend-tooltip\">\n <ng-container *ngFor=\"let item of d.data.ys; let i = index\">\n <riv-legend-item\n *ngIf=\"i >= fi\"\n [label]=\"item.label\"\n [visibility]=\"item.hidden ? 'hidden' : 'visible'\"\n [clickable]=\"config.allowLegendToggle\"\n [colorToken]=\"config.colors[i % config.colors.length]\"\n (itemClick)=\"toggleLegend(item.label)\"\n ></riv-legend-item>\n </ng-container>\n </div>\n </riv-callout>\n </ng-container>\n </ng-container>\n </legend>\n </ng-container>\n</div>\n\n<ng-template #zeroState>\n <riv-zero-state [message]=\"config.zeroStateMessage\"></riv-zero-state>\n</ng-template>\n", styles: [".container{-webkit-user-select:none;user-select:none;position:relative;display:flex;flex-direction:column;gap:var(--size-small)}.tick-line{stroke:var(--gray-20)}.tick-label{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);fill:var(--type-light-low-contrast)}.marker{fill:var(--surface-light-0)}.callout-content{pointer-events:none;padding:var(--size-medium) var(--size-xlarge);display:flex;flex-direction:column}.callout-row{white-space:nowrap;display:flex;padding:var(--size-medium) 0;gap:var(--size-medium);align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);&:not(:last-child){border-bottom:var(--border-width) solid var(--border-light)}}.series-label{flex-grow:1;font-weight:var(--font-weight-heavy);display:flex;align-items:center;gap:var(--size-small)}legend{display:flex;flex-wrap:wrap;gap:var(--size-large);justify-content:flex-start;align-items:baseline}.more-text-container{width:calc(var(--base-grid-size) * 15);height:var(--size-large)}.more-text{font-size:var(--type-1-font-size);top:calc(var(--base-grid-size) * -1);position:relative}.legend-tooltip{padding:var(--size-medium) var(--size-xlarge);display:flex;flex-direction:column;overflow-y:scroll;max-height:clamp(0px,60vh,600px)}.legend-tooltip>riv-legend-item{white-space:nowrap;display:flex;padding:var(--size-medium) 0;gap:var(--size-medium);align-items:center;line-height:var(--type-1-line-height-0)}\n"] }]
146
146
  }], propDecorators: { container: [{
147
147
  type: ViewChild,
148
148
  args: ['container']
@@ -156,4 +156,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
156
156
  }], chartClicked: [{
157
157
  type: Output
158
158
  }] } });
159
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdmlzdWFsaXphdGlvbi9jaGFydC9jaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi92aXN1YWxpemF0aW9uL2NoYXJ0L2NoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLG9CQUFvQixFQUNwQixHQUFHLEVBQ0gsSUFBSSxFQUNKLFNBQVMsRUFDVCxPQUFPLEdBQ1IsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDOzs7Ozs7OztBQVFoQyxNQUFNLE9BQU8sY0FBYztJQU4zQjtRQVVFLFdBQU0sR0FBRyxHQUFHLENBQUM7UUFFYixXQUFNLEdBQUcsSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFRaEMsWUFBTyxHQUFHLElBQUksZUFBZSxDQUFlLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztRQVNqRSxVQUFLLEdBQUcsSUFBSSxlQUFlLENBQWE7WUFDdEMsQ0FBQyxFQUFFLEVBQUU7WUFDTCxFQUFFLEVBQUUsRUFBRTtTQUNQLENBQUMsQ0FBQztRQWFILGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUV0QywwQ0FBMEM7UUFDMUMsOENBQThDO1FBQzlDLCtDQUErQztRQUMvQyxnREFBZ0Q7UUFDaEQsZ0JBQWdCO1FBQ2hCLG9CQUFlLEdBQUcsSUFB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QUM7SUFDdkQsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztJQUM5QixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQzs7MkdBdktVLGNBQWM7K0ZBQWQsY0FBYyx5VkMzQjNCLHdqTUFrTEE7MkZEdkphLGNBQWM7a0JBTjFCLFNBQVM7K0JBQ0UsV0FBVyxtQkFHSix1QkFBdUIsQ0FBQyxNQUFNOzhCQUd2QixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBQ1UsaUJBQWlCO3NCQUFoRCxTQUFTO3VCQUFDLG1CQUFtQjtnQkFjMUIsTUFBTTtzQkFEVCxLQUFLO2dCQWFGLElBQUk7c0JBRFAsS0FBSztnQkFnRk4sWUFBWTtzQkFEWCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBtYXAsXG4gIHNjYW4sXG4gIHN0YXJ0V2l0aCxcbiAgU3ViamVjdCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDaGFydCB9IGZyb20gJy4vY2hhcnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtY2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jaGFydC5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDaGFydENvbXBvbmVudCB7XG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIGNvbnRhaW5lcj86IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ21vcmVUZXh0Q29udGFpbmVyJykgbW9yZVRleHRDb250YWluZXI/OiBFbGVtZW50UmVmO1xuXG4gIEhFSUdIVCA9IDMwMDtcblxuICB3aWR0aCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KDApO1xuICBzZXQgd2lkdGgodzogbnVtYmVyKSB7XG4gICAgdGhpcy53aWR0aCQubmV4dCh3KTtcbiAgfVxuICBnZXQgd2lkdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMud2lkdGgkLnZhbHVlO1xuICB9XG5cbiAgY29uZmlnJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2hhcnQuQ29uZmlnPihDaGFydC5kZWZhdWx0Q29uZmlnKTtcbiAgQElucHV0KClcbiAgc2V0IGNvbmZpZyhjOiBDaGFydC5Db25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyQubmV4dChjKTtcbiAgfVxuICBnZXQgY29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZyQudmFsdWU7XG4gIH1cblxuICBkYXRhJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2hhcnQuRGF0YT4oe1xuICAgIHg6IFtdLFxuICAgIHlzOiBbXSxcbiAgfSk7XG4gIEBJbnB1dCgpXG4gIHNldCBkYXRhKGQ6IENoYXJ0LkRhdGEpIHtcbiAgICB0aGlzLmRhdGEkLm5leHQoZCk7XG4gIH1cbiAgZ2V0IGRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YSQudmFsdWU7XG4gIH1cblxuICB0b2dnbGVMZWdlbmQobGFiZWw6IHN0cmluZykge1xuICAgIHRoaXMudG9nZ2xlTGVnZW5kJC5uZXh0KGxhYmVsKTtcbiAgfVxuXG4gIHRvZ2dsZUxlZ2VuZCQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG5cbiAgLy8gdG9nZ2xlZExlZ2VuZCQgaXMganVzdCBhIHNldCBvZiBib29sZWFuXG4gIC8vIHZhbHVlcyBmb3Igd2hpY2ggbGVnZW5kcyBoYXZlIGJlZW4gdG9nZ2xlZC5cbiAgLy8gV2UgZG9uJ3Qga25vdyBpZiB0aG9zZSBsZWdlbmRzIHdoZXJlIGFscmVhZHlcbiAgLy8gaGlkZGVuIG9yIG5vdCwgd2UganVzdCBrbm93IHdoZXRoZXIgdGhleSBoYXZlXG4gIC8vIGJlZW4gdG9nZ2xlZC5cbiAgdG9nZ2xlZExlZ2VuZHMkID0gdGhpcy50b2dnbGVMZWdlbmQkLnBpcGUoXG4gICAgc2NhbjxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+PihcbiAgICAgIChhY2MsIHZhbHVlKSA9PiAoeyAuLi5hY2MsIFt2YWx1ZV06ICFhY2NbdmFsdWVdIH0pLFxuICAgICAge30sXG4gICAgKSxcbiAgICBzdGFydFdpdGg8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KHt9KSxcbiAgKTtcblxuICBkcmF3RGF0YSQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLndpZHRoJCxcbiAgICB0aGlzLmNvbmZpZyQsXG4gICAgdGhpcy5kYXRhJCxcbiAgICB0aGlzLnRvZ2dsZWRMZWdlbmRzJCxcbiAgXSkucGlwZShcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldiwgY3VycmVudCkgPT4gaXNFcXVhbChwcmV2LCBjdXJyZW50KSksXG4gICAgbWFwKChbd2lkdGgsIGNvbmZpZywgZGF0YSwgdG9nZ2xlZExlZ2VuZHNdKSA9PiB7XG4gICAgICBpZiAod2lkdGggPT0gMCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhpZGRlbkRhdGEgPSB7XG4gICAgICAgIC4uLmRhdGEsXG4gICAgICAgIHlzOiBkYXRhLnlzLm1hcCh5ID0+ICh7XG4gICAgICAgICAgLi4ueSxcbiAgICAgICAgICAvLyBpZiB0b2dnbGVkLCBmbGlwIHRoZSBoaWRkZW4gYm9vbGVhblxuICAgICAgICAgIGhpZGRlbjogdG9nZ2xlZExlZ2VuZHNbeS5sYWJlbF0gPyAheS5oaWRkZW4gOiB5LmhpZGRlbixcbiAgICAgICAgfSkpLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHZpZXdCb3ggPSBgMCAwICR7d2lkdGh9ICR7dGhpcy5IRUlHSFR9YDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZpZXdCb3gsXG4gICAgICAgIGRhdGE6IGhpZGRlbkRhdGEsXG4gICAgICAgIC4uLkNoYXJ0LmNoYXJ0KGNvbmZpZywgaGlkZGVuRGF0YSwge1xuICAgICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgICBoZWlnaHQ6IHRoaXMuSEVJR0hULFxuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfSksXG4gICk7XG5cbiAgZW1wdHkkID0gdGhpcy5kYXRhJC5waXBlKG1hcChkID0+IGQueC5sZW5ndGggPT0gMCB8fCBkLnlzLmxlbmd0aCA9PSAwKSk7XG5cbiAgaG92ZXI6IFJldHVyblR5cGU8Q2hhcnQuSG92ZXI+IHwgbnVsbCA9IG51bGw7XG5cbiAgbW91c2Vtb3ZlKCRldmVudDogTW91c2VFdmVudCwgaG92ZXI6IENoYXJ0LkhvdmVyKSB7XG4gICAgY29uc3QgY29udGFpbmVyRWwgPSB0aGlzLmNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAoY29udGFpbmVyRWwgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZWN0ID0gY29udGFpbmVyRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgdGhpcy5ob3ZlciA9IGhvdmVyKHtcbiAgICAgIHJlY3QsXG4gICAgICB4OiAkZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdCxcbiAgICAgIHk6ICRldmVudC5jbGllbnRZIC0gcmVjdC50b3AsXG4gICAgfSk7XG4gIH1cblxuICBtb3VzZWxlYXZlKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuaG92ZXIgPSBudWxsO1xuICB9XG5cbiAgQE91dHB1dCgpXG4gIGNoYXJ0Q2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIHhJbmRleDogbnVtYmVyO1xuICAgIHlJbmRleDogbnVtYmVyO1xuICB9PigpO1xuXG4gIGNsaWNrKCkge1xuICAgIGlmICh0aGlzLmhvdmVyKSB7XG4gICAgICB0aGlzLmNoYXJ0Q2xpY2tlZC5lbWl0KHtcbiAgICAgICAgeEluZGV4OiB0aGlzLmhvdmVyLnhJbmRleCxcbiAgICAgICAgeUluZGV4OiB0aGlzLmhvdmVyLnlJbmRleCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5ob3ZlciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgdmFyQ29sb3IoY29sb3JzOiBzdHJpbmdbXSwgaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiBgdmFyKCR7Y29sb3JzW2luZGV4ICUgY29sb3JzLmxlbmd0aF19KWA7XG4gIH1cblxuICBzaG93TW9yZVRvb2x0aXAgPSBmYWxzZTtcbiAgbG9ja1Nob3dNb3JlVG9vbHRpcCA9IGZhbHNlO1xuXG4gIG1vcmVUZXh0V2lkdGggPSA1MDtcbiAgYmFzZUxlZ2VuZEl0ZW1XaWR0aCA9IDQwO1xuICB3aWR0aFBlckxldHRlciA9IDYuNTtcblxuICBmaXJzdEhpZGRlbkxlZ2VuZEl0ZW1JbmRleCQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLndpZHRoJCxcbiAgICB0aGlzLmNvbmZpZyQsXG4gICAgdGhpcy5kYXRhJCxcbiAgXSkucGlwZShcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldiwgY3VycmVudCkgPT4gaXNFcXVhbChwcmV2LCBjdXJyZW50KSksXG4gICAgbWFwKChbd2lkdGgsIGNvbmZpZywgZGF0YV0pID0+IHtcbiAgICAgIGlmICghY29uZmlnLnRydW5jYXRlTGVnZW5kKSB7XG4gICAgICAgIHJldHVybiBkYXRhLnlzLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGxldCB3aWR0aFJ1bm5pbmdUb3RhbCA9IDA7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEueXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgaW5kSXRlbVdpZHRoID1cbiAgICAgICAgICB0aGlzLmJhc2VMZWdlbmRJdGVtV2lkdGggK1xuICAgICAgICAgIGRhdGEueXNbaV0ubGFiZWwubGVuZ3RoICogdGhpcy53aWR0aFBlckxldHRlcjtcbiAgICAgICAgaWYgKHdpZHRoUnVubmluZ1RvdGFsICsgaW5kSXRlbVdpZHRoID49IHdpZHRoIC0gdGhpcy5tb3JlVGV4dFdpZHRoKSB7XG4gICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgd2lkdGhSdW5uaW5nVG90YWwgKz0gaW5kSXRlbVdpZHRoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGEueXMubGVuZ3RoO1xuICAgIH0pLFxuICApO1xuXG4gIG1vcmVDbGljaygpIHtcbiAgICB0aGlzLmxvY2tTaG93TW9yZVRvb2x0aXAgPSAhdGhpcy5sb2NrU2hvd01vcmVUb29sdGlwO1xuICB9XG5cbiAgbW91c2VvdmVyTGVnZW5kKCkge1xuICAgIHRoaXMuc2hvd01vcmVUb29sdGlwID0gdHJ1ZTtcbiAgfVxuXG4gIG1vdXNlbGVhdmVMZWdlbmQoKSB7XG4gICAgdGhpcy5zaG93TW9yZVRvb2x0aXAgPSBmYWxzZTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImNvbnRhaW5lclwiXG4gIChyaXZDbGllbnRTaXplKT1cIndpZHRoID0gJGV2ZW50LndpZHRoXCJcbiAgKm5nSWY9XCIhKGVtcHR5JCB8IGFzeW5jKTsgZWxzZSB6ZXJvU3RhdGVcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiZHJhd0RhdGEkIHwgYXN5bmM7IGxldCBkXCI+XG4gICAgPGRpdlxuICAgICAgKG1vdXNlbW92ZSk9XCJtb3VzZW1vdmUoJGV2ZW50LCBkLmhvdmVyKVwiXG4gICAgICAobW91c2VsZWF2ZSk9XCJtb3VzZWxlYXZlKCRldmVudClcIlxuICAgICAgKGNsaWNrKT1cImNsaWNrKClcIlxuICAgICAgI2NvbnRhaW5lclxuICAgID5cbiAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIFthdHRyLnZpZXdCb3hdPVwiZC52aWV3Qm94XCI+XG4gICAgICAgIDxnICpuZ0Zvcj1cImxldCB0aWNrIG9mIGQueFRpY2tzXCIgdGV4dC1hbmNob3I9XCJtaWRkbGVcIj5cbiAgICAgICAgICA8bGluZVxuICAgICAgICAgICAgY2xhc3M9XCJ0aWNrLWxpbmVcIlxuICAgICAgICAgICAgW2F0dHIueDFdPVwidGljay54XCJcbiAgICAgICAgICAgIFthdHRyLngyXT1cInRpY2sueFwiXG4gICAgICAgICAgICB5MT1cIjBcIlxuICAgICAgICAgICAgW2F0dHIueTJdPVwiSEVJR0hUIC0gMTZcIlxuICAgICAgICAgID48L2xpbmU+XG4gICAgICAgICAgPHRleHQgY2xhc3M9XCJ0aWNrLWxhYmVsXCIgW2F0dHIueF09XCJ0aWNrLnhcIiBbYXR0ci55XT1cIkhFSUdIVCAtIDRcIj5cbiAgICAgICAgICAgIHt7IHRpY2subGFiZWwgfX1cbiAgICAgICAgICA8L3RleHQ+XG4gICAgICAgIDwvZz5cbiAgICAgICAgPGcgKm5nRm9yPVwibGV0IHRpY2sgb2YgZC55VGlja3NcIj5cbiAgICAgICAgICA8bGluZVxuICAgICAgICAgICAgY2xhc3M9XCJ0aWNrLWxpbmVcIlxuICAgICAgICAgICAgW2F0dHIueTFdPVwidGljay55XCJcbiAgICAgICAgICAgIFthdHRyLnkyXT1cInRpY2sueVwiXG4gICAgICAgICAgICB4MT1cIjBcIlxuICAgICAgICAgICAgW2F0dHIueDJdPVwid2lkdGhcIlxuICAgICAgICAgID48L2xpbmU+XG4gICAgICAgICAgPHRleHQgY2xhc3M9XCJ0aWNrLWxhYmVsXCIgW2F0dHIueV09XCJ0aWNrLnkgLSA0XCIgW2F0dHIueF09XCIwXCI+XG4gICAgICAgICAgICB7eyB0aWNrLmxhYmVsIH19XG4gICAgICAgICAgPC90ZXh0PlxuICAgICAgICA8L2c+XG4gICAgICAgIDxnICpuZ0lmPVwiaG92ZXIgIT0gbnVsbFwiPlxuICAgICAgICAgIDxsaW5lXG4gICAgICAgICAgICBjbGFzcz1cInRpY2stbGluZVwiXG4gICAgICAgICAgICBbYXR0ci54MV09XCJob3Zlci54XCJcbiAgICAgICAgICAgIFthdHRyLngyXT1cImhvdmVyLnhcIlxuICAgICAgICAgICAgeTE9XCIwXCJcbiAgICAgICAgICAgIFthdHRyLnkyXT1cIkhFSUdIVCAtIDE2XCJcbiAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgICAgc3Ryb2tlLWRhc2hhcnJheT1cIjRcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZz5cbiAgICAgICAgPGcgKm5nRm9yPVwibGV0IGJhciBvZiBkLmJhcnM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICA8cmVjdFxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHJlY3Qgb2YgYmFyXCJcbiAgICAgICAgICAgIFthdHRyLnhdPVwicmVjdC54XCJcbiAgICAgICAgICAgIFthdHRyLnldPVwicmVjdC55XCJcbiAgICAgICAgICAgIFthdHRyLndpZHRoXT1cInJlY3Qud2lkdGhcIlxuICAgICAgICAgICAgW2F0dHIuaGVpZ2h0XT1cInJlY3QuaGVpZ2h0XCJcbiAgICAgICAgICAgIFthdHRyLmZpbGxdPVwidmFyQ29sb3IoZC5jb2xvcnMsIGkpXCJcbiAgICAgICAgICA+PC9yZWN0PlxuICAgICAgICA8L2c+XG4gICAgICAgIDxnICpuZ0Zvcj1cImxldCBsaW5lIG9mIGQubGluZXM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgW2F0dHIuZF09XCJsaW5lXCJcbiAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJ2YXJDb2xvcihkLmNvbG9ycywgaSlcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgPC9nPlxuICAgICAgICA8ZyAqbmdGb3I9XCJsZXQgbGluZSBvZiBkLmxpbmVzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgY2xhc3M9XCJtYXJrZXJcIlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgaG92ZXIgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAoY29uZmlnLmdyb3VwZWRUb29sdGlwIHx8IGkgPT0gaG92ZXIudmlzaWJsZVlJbmRleClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbYXR0ci5jeF09XCJob3Zlci54XCJcbiAgICAgICAgICAgIFthdHRyLmN5XT1cImhvdmVyLnlzW2ldXCJcbiAgICAgICAgICAgIHI9XCIzLjVcIlxuICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwidmFyQ29sb3IoZC5jb2xvcnMsIGkpXCJcbiAgICAgICAgICA+PC9jaXJjbGU+XG4gICAgICAgIDwvZz5cbiAgICAgICAgPGcgKm5nRm9yPVwibGV0IGFyZWEgb2YgZC5hcmVhczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgIDxwYXRoIFthdHRyLmRdPVwiYXJlYVwiIFthdHRyLmZpbGxdPVwidmFyQ29sb3IoZC5jb2xvcnMsIGkpXCI+PC9wYXRoPlxuICAgICAgICA8L2c+XG4gICAgICAgIDxnICpuZ0Zvcj1cImxldCBhcmVhIG9mIGQuYXJlYXM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cIm1hcmtlclwiXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBob3ZlciAhPSBudWxsICYmXG4gICAgICAgICAgICAgIChjb25maWcuZ3JvdXBlZFRvb2x0aXAgfHwgaSA9PSBob3Zlci52aXNpYmxlWUluZGV4KVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFthdHRyLmN4XT1cImhvdmVyLnhcIlxuICAgICAgICAgICAgW2F0dHIuY3ldPVwiaG92ZXIueXNbaV1cIlxuICAgICAgICAgICAgcj1cIjMuNVwiXG4gICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJ2YXJDb2xvcihkLmNvbG9ycywgaSlcIlxuICAgICAgICAgID48L2NpcmNsZT5cbiAgICAgICAgPC9nPlxuICAgICAgPC9zdmc+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaG92ZXIgIT0gbnVsbFwiPlxuICAgICAgICA8cml2LWNhbGxvdXRcbiAgICAgICAgICBbYW5jaG9yXT1cImhvdmVyLnRvb2x0aXAuYW5jaG9yXCJcbiAgICAgICAgICBbaXNNb2RhbF09XCJmYWxzZVwiXG4gICAgICAgICAgW3ByZWZlcnJlZFBvc2l0aW9uXT1cIidjZW50ZXItcmlnaHQnXCJcbiAgICAgICAgICBbdGhlbWVdPVwiJ2xpZ2h0J1wiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbG91dC1jb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbG91dC1yb3dcIj5cbiAgICAgICAgICAgICAge3sgaG92ZXIudG9vbHRpcC5kYXRlIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJjYWxsb3V0LXJvd1wiXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBtZXRyaWMgb2YgaG92ZXIudG9vbHRpcC5tZXRyaWNzXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZXJpZXMtbGFiZWxcIj5cbiAgICAgICAgICAgICAgICA8cml2LWxlZ2VuZC1pdGVtIFtjb2xvclRva2VuXT1cIm1ldHJpYy5jb2xvclwiPjwvcml2LWxlZ2VuZC1pdGVtPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IG1ldHJpYy5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3Bhbj57eyBtZXRyaWMudmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9yaXYtY2FsbG91dD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxsZWdlbmQ+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlyc3RIaWRkZW5MZWdlbmRJdGVtSW5kZXgkIHwgYXN5bmM7IGxldCBmaVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGQuZGF0YS55czsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgIDxyaXYtbGVnZW5kLWl0ZW1cbiAgICAgICAgICAgICpuZ0lmPVwiaSA8IGZpXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCJpdGVtLmxhYmVsXCJcbiAgICAgICAgICAgIFt2aXNpYmlsaXR5XT1cIml0ZW0uaGlkZGVuID8gJ2hpZGRlbicgOiAndmlzaWJsZSdcIlxuICAgICAgICAgICAgW2NsaWNrYWJsZV09XCJjb25maWcuYWxsb3dMZWdlbmRUb2dnbGVcIlxuICAgICAgICAgICAgW2NvbG9yVG9rZW5dPVwiY29uZmlnLmNvbG9yc1tpICUgY29uZmlnLmNvbG9ycy5sZW5ndGhdXCJcbiAgICAgICAgICAgIChpdGVtQ2xpY2spPVwidG9nZ2xlTGVnZW5kKGl0ZW0ubGFiZWwpXCJcbiAgICAgICAgICA+PC9yaXYtbGVnZW5kLWl0ZW0+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgI21vcmVUZXh0Q29udGFpbmVyXG4gICAgICAgICAgKG1vdXNlb3Zlcik9XCJtb3VzZW92ZXJMZWdlbmQoKVwiXG4gICAgICAgICAgKG1vdXNlbGVhdmUpPVwibW91c2VsZWF2ZUxlZ2VuZCgpXCJcbiAgICAgICAgICAoY2xpY2spPVwibW9yZUNsaWNrKClcIlxuICAgICAgICAgICpuZ0lmPVwiZmkgPCBkLmRhdGEueXMubGVuZ3RoXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIHJpdkxpbmsgY2xhc3M9XCJtb3JlLXRleHRcIj5cbiAgICAgICAgICAgICtcbiAgICAgICAgICAgIHt7IGQuZGF0YS55cy5sZW5ndGggLSBmaSB9fSBtb3JlXG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dNb3JlVG9vbHRpcCB8fCBsb2NrU2hvd01vcmVUb29sdGlwXCI+XG4gICAgICAgICAgPHJpdi1jYWxsb3V0XG4gICAgICAgICAgICAjbGVnZW5kVG9vbHRpcFxuICAgICAgICAgICAgW2FuY2hvcl09XCJtb3JlVGV4dENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudFwiXG4gICAgICAgICAgICBbaXNNb2RhbF09XCJsb2NrU2hvd01vcmVUb29sdGlwXCJcbiAgICAgICAgICAgIChjbG9zZSk9XCJsb2NrU2hvd01vcmVUb29sdGlwID0gZmFsc2VcIlxuICAgICAgICAgICAgW3ByZWZlcnJlZFBvc2l0aW9uXT1cIidib3R0b20tcmlnaHQnXCJcbiAgICAgICAgICAgIFt0aGVtZV09XCInbGlnaHQnXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbG91dC1jb250ZW50XCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZC5kYXRhLnlzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgPHJpdi1sZWdlbmQtaXRlbVxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpID49IGZpXCJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJpdGVtLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgIFt2aXNpYmlsaXR5XT1cIml0ZW0uaGlkZGVuID8gJ2hpZGRlbicgOiAndmlzaWJsZSdcIlxuICAgICAgICAgICAgICAgICAgW2NsaWNrYWJsZV09XCJjb25maWcuYWxsb3dMZWdlbmRUb2dnbGVcIlxuICAgICAgICAgICAgICAgICAgW2NvbG9yVG9rZW5dPVwiY29uZmlnLmNvbG9yc1tpICUgY29uZmlnLmNvbG9ycy5sZW5ndGhdXCJcbiAgICAgICAgICAgICAgICAgIChpdGVtQ2xpY2spPVwidG9nZ2xlTGVnZW5kKGl0ZW0ubGFiZWwpXCJcbiAgICAgICAgICAgICAgICA+PC9yaXYtbGVnZW5kLWl0ZW0+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9yaXYtY2FsbG91dD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2xlZ2VuZD5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN6ZXJvU3RhdGU+XG4gIDxyaXYtemVyby1zdGF0ZSBbbWVzc2FnZV09XCJjb25maWcuemVyb1N0YXRlTWVzc2FnZVwiPjwvcml2LXplcm8tc3RhdGU+XG48L25nLXRlbXBsYXRlPlxuIl19
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdmlzdWFsaXphdGlvbi9jaGFydC9jaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi92aXN1YWxpemF0aW9uL2NoYXJ0L2NoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLG9CQUFvQixFQUNwQixHQUFHLEVBQ0gsSUFBSSxFQUNKLFNBQVMsRUFDVCxPQUFPLEdBQ1IsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDOzs7Ozs7OztBQVFoQyxNQUFNLE9BQU8sY0FBYztJQU4zQjtRQVVFLFdBQU0sR0FBRyxHQUFHLENBQUM7UUFFYixXQUFNLEdBQUcsSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFRaEMsWUFBTyxHQUFHLElBQUksZUFBZSxDQUFlLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztRQVNqRSxVQUFLLEdBQUcsSUFBSSxlQUFlLENBQWE7WUFDdEMsQ0FBQyxFQUFFLEVBQUU7WUFDTCxFQUFFLEVBQUUsRUFBRTtTQUNQLENBQUMsQ0FBQztRQWFILGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUV0QywwQ0FBMEM7UUFDMUMsOENBQThDO1FBQzlDLCtDQUErQztRQUMvQyxnREFBZ0Q7UUFDaEQsZ0JBQWdCO1FBQ2hCLG9CQUFlLEdBQUcsSUFB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QUM7SUFDdkQsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztJQUM5QixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQzs7MkdBdktVLGNBQWM7K0ZBQWQsY0FBYyx5VkMzQjNCLG1vTUFvTEE7MkZEekphLGNBQWM7a0JBTjFCLFNBQVM7K0JBQ0UsV0FBVyxtQkFHSix1QkFBdUIsQ0FBQyxNQUFNOzhCQUd2QixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBQ1UsaUJBQWlCO3NCQUFoRCxTQUFTO3VCQUFDLG1CQUFtQjtnQkFjMUIsTUFBTTtzQkFEVCxLQUFLO2dCQWFGLElBQUk7c0JBRFAsS0FBSztnQkFnRk4sWUFBWTtzQkFEWCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBtYXAsXG4gIHNjYW4sXG4gIHN0YXJ0V2l0aCxcbiAgU3ViamVjdCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDaGFydCB9IGZyb20gJy4vY2hhcnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtY2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jaGFydC5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDaGFydENvbXBvbmVudCB7XG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIGNvbnRhaW5lcj86IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ21vcmVUZXh0Q29udGFpbmVyJykgbW9yZVRleHRDb250YWluZXI/OiBFbGVtZW50UmVmO1xuXG4gIEhFSUdIVCA9IDMwMDtcblxuICB3aWR0aCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KDApO1xuICBzZXQgd2lkdGgodzogbnVtYmVyKSB7XG4gICAgdGhpcy53aWR0aCQubmV4dCh3KTtcbiAgfVxuICBnZXQgd2lkdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMud2lkdGgkLnZhbHVlO1xuICB9XG5cbiAgY29uZmlnJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2hhcnQuQ29uZmlnPihDaGFydC5kZWZhdWx0Q29uZmlnKTtcbiAgQElucHV0KClcbiAgc2V0IGNvbmZpZyhjOiBDaGFydC5Db25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyQubmV4dChjKTtcbiAgfVxuICBnZXQgY29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZyQudmFsdWU7XG4gIH1cblxuICBkYXRhJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2hhcnQuRGF0YT4oe1xuICAgIHg6IFtdLFxuICAgIHlzOiBbXSxcbiAgfSk7XG4gIEBJbnB1dCgpXG4gIHNldCBkYXRhKGQ6IENoYXJ0LkRhdGEpIHtcbiAgICB0aGlzLmRhdGEkLm5leHQoZCk7XG4gIH1cbiAgZ2V0IGRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YSQudmFsdWU7XG4gIH1cblxuICB0b2dnbGVMZWdlbmQobGFiZWw6IHN0cmluZykge1xuICAgIHRoaXMudG9nZ2xlTGVnZW5kJC5uZXh0KGxhYmVsKTtcbiAgfVxuXG4gIHRvZ2dsZUxlZ2VuZCQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG5cbiAgLy8gdG9nZ2xlZExlZ2VuZCQgaXMganVzdCBhIHNldCBvZiBib29sZWFuXG4gIC8vIHZhbHVlcyBmb3Igd2hpY2ggbGVnZW5kcyBoYXZlIGJlZW4gdG9nZ2xlZC5cbiAgLy8gV2UgZG9uJ3Qga25vdyBpZiB0aG9zZSBsZWdlbmRzIHdoZXJlIGFscmVhZHlcbiAgLy8gaGlkZGVuIG9yIG5vdCwgd2UganVzdCBrbm93IHdoZXRoZXIgdGhleSBoYXZlXG4gIC8vIGJlZW4gdG9nZ2xlZC5cbiAgdG9nZ2xlZExlZ2VuZHMkID0gdGhpcy50b2dnbGVMZWdlbmQkLnBpcGUoXG4gICAgc2NhbjxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+PihcbiAgICAgIChhY2MsIHZhbHVlKSA9PiAoeyAuLi5hY2MsIFt2YWx1ZV06ICFhY2NbdmFsdWVdIH0pLFxuICAgICAge30sXG4gICAgKSxcbiAgICBzdGFydFdpdGg8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KHt9KSxcbiAgKTtcblxuICBkcmF3RGF0YSQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLndpZHRoJCxcbiAgICB0aGlzLmNvbmZpZyQsXG4gICAgdGhpcy5kYXRhJCxcbiAgICB0aGlzLnRvZ2dsZWRMZWdlbmRzJCxcbiAgXSkucGlwZShcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldiwgY3VycmVudCkgPT4gaXNFcXVhbChwcmV2LCBjdXJyZW50KSksXG4gICAgbWFwKChbd2lkdGgsIGNvbmZpZywgZGF0YSwgdG9nZ2xlZExlZ2VuZHNdKSA9PiB7XG4gICAgICBpZiAod2lkdGggPT0gMCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhpZGRlbkRhdGEgPSB7XG4gICAgICAgIC4uLmRhdGEsXG4gICAgICAgIHlzOiBkYXRhLnlzLm1hcCh5ID0+ICh7XG4gICAgICAgICAgLi4ueSxcbiAgICAgICAgICAvLyBpZiB0b2dnbGVkLCBmbGlwIHRoZSBoaWRkZW4gYm9vbGVhblxuICAgICAgICAgIGhpZGRlbjogdG9nZ2xlZExlZ2VuZHNbeS5sYWJlbF0gPyAheS5oaWRkZW4gOiB5LmhpZGRlbixcbiAgICAgICAgfSkpLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHZpZXdCb3ggPSBgMCAwICR7d2lkdGh9ICR7dGhpcy5IRUlHSFR9YDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZpZXdCb3gsXG4gICAgICAgIGRhdGE6IGhpZGRlbkRhdGEsXG4gICAgICAgIC4uLkNoYXJ0LmNoYXJ0KGNvbmZpZywgaGlkZGVuRGF0YSwge1xuICAgICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgICBoZWlnaHQ6IHRoaXMuSEVJR0hULFxuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfSksXG4gICk7XG5cbiAgZW1wdHkkID0gdGhpcy5kYXRhJC5waXBlKG1hcChkID0+IGQueC5sZW5ndGggPT0gMCB8fCBkLnlzLmxlbmd0aCA9PSAwKSk7XG5cbiAgaG92ZXI6IFJldHVyblR5cGU8Q2hhcnQuSG92ZXI+IHwgbnVsbCA9IG51bGw7XG5cbiAgbW91c2Vtb3ZlKCRldmVudDogTW91c2VFdmVudCwgaG92ZXI6IENoYXJ0LkhvdmVyKSB7XG4gICAgY29uc3QgY29udGFpbmVyRWwgPSB0aGlzLmNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAoY29udGFpbmVyRWwgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZWN0ID0gY29udGFpbmVyRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgdGhpcy5ob3ZlciA9IGhvdmVyKHtcbiAgICAgIHJlY3QsXG4gICAgICB4OiAkZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdCxcbiAgICAgIHk6ICRldmVudC5jbGllbnRZIC0gcmVjdC50b3AsXG4gICAgfSk7XG4gIH1cblxuICBtb3VzZWxlYXZlKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuaG92ZXIgPSBudWxsO1xuICB9XG5cbiAgQE91dHB1dCgpXG4gIGNoYXJ0Q2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIHhJbmRleDogbnVtYmVyO1xuICAgIHlJbmRleDogbnVtYmVyO1xuICB9PigpO1xuXG4gIGNsaWNrKCkge1xuICAgIGlmICh0aGlzLmhvdmVyKSB7XG4gICAgICB0aGlzLmNoYXJ0Q2xpY2tlZC5lbWl0KHtcbiAgICAgICAgeEluZGV4OiB0aGlzLmhvdmVyLnhJbmRleCxcbiAgICAgICAgeUluZGV4OiB0aGlzLmhvdmVyLnlJbmRleCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5ob3ZlciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgdmFyQ29sb3IoY29sb3JzOiBzdHJpbmdbXSwgaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiBgdmFyKCR7Y29sb3JzW2luZGV4ICUgY29sb3JzLmxlbmd0aF19KWA7XG4gIH1cblxuICBzaG93TW9yZVRvb2x0aXAgPSBmYWxzZTtcbiAgbG9ja1Nob3dNb3JlVG9vbHRpcCA9IGZhbHNlO1xuXG4gIG1vcmVUZXh0V2lkdGggPSA1MDtcbiAgYmFzZUxlZ2VuZEl0ZW1XaWR0aCA9IDQwO1xuICB3aWR0aFBlckxldHRlciA9IDYuNTtcblxuICBmaXJzdEhpZGRlbkxlZ2VuZEl0ZW1JbmRleCQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLndpZHRoJCxcbiAgICB0aGlzLmNvbmZpZyQsXG4gICAgdGhpcy5kYXRhJCxcbiAgXSkucGlwZShcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldiwgY3VycmVudCkgPT4gaXNFcXVhbChwcmV2LCBjdXJyZW50KSksXG4gICAgbWFwKChbd2lkdGgsIGNvbmZpZywgZGF0YV0pID0+IHtcbiAgICAgIGlmICghY29uZmlnLnRydW5jYXRlTGVnZW5kKSB7XG4gICAgICAgIHJldHVybiBkYXRhLnlzLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGxldCB3aWR0aFJ1bm5pbmdUb3RhbCA9IDA7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEueXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgaW5kSXRlbVdpZHRoID1cbiAgICAgICAgICB0aGlzLmJhc2VMZWdlbmRJdGVtV2lkdGggK1xuICAgICAgICAgIGRhdGEueXNbaV0ubGFiZWwubGVuZ3RoICogdGhpcy53aWR0aFBlckxldHRlcjtcbiAgICAgICAgaWYgKHdpZHRoUnVubmluZ1RvdGFsICsgaW5kSXRlbVdpZHRoID49IHdpZHRoIC0gdGhpcy5tb3JlVGV4dFdpZHRoKSB7XG4gICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgd2lkdGhSdW5uaW5nVG90YWwgKz0gaW5kSXRlbVdpZHRoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGEueXMubGVuZ3RoO1xuICAgIH0pLFxuICApO1xuXG4gIG1vcmVDbGljaygpIHtcbiAgICB0aGlzLmxvY2tTaG93TW9yZVRvb2x0aXAgPSAhdGhpcy5sb2NrU2hvd01vcmVUb29sdGlwO1xuICB9XG5cbiAgbW91c2VvdmVyTGVnZW5kKCkge1xuICAgIHRoaXMuc2hvd01vcmVUb29sdGlwID0gdHJ1ZTtcbiAgfVxuXG4gIG1vdXNlbGVhdmVMZWdlbmQoKSB7XG4gICAgdGhpcy5zaG93TW9yZVRvb2x0aXAgPSBmYWxzZTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImNvbnRhaW5lclwiXG4gIChyaXZDbGllbnRTaXplKT1cIndpZHRoID0gJGV2ZW50LndpZHRoXCJcbiAgKm5nSWY9XCIhKGVtcHR5JCB8IGFzeW5jKTsgZWxzZSB6ZXJvU3RhdGVcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiZHJhd0RhdGEkIHwgYXN5bmM7IGxldCBkXCI+XG4gICAgPGRpdlxuICAgICAgKG1vdXNlbW92ZSk9XCJtb3VzZW1vdmUoJGV2ZW50LCBkLmhvdmVyKVwiXG4gICAgICAobW91c2VsZWF2ZSk9XCJtb3VzZWxlYXZlKCRldmVudClcIlxuICAgICAgKGNsaWNrKT1cImNsaWNrKClcIlxuICAgICAgI2NvbnRhaW5lclxuICAgID5cbiAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIFthdHRyLnZpZXdCb3hdPVwiZC52aWV3Qm94XCI+XG4gICAgICAgIDxnICpuZ0Zvcj1cImxldCB0aWNrIG9mIGQueFRpY2tzXCIgdGV4dC1hbmNob3I9XCJtaWRkbGVcIj5cbiAgICAgICAgICA8bGluZVxuICAgICAgICAgICAgY2xhc3M9XCJ0aWNrLWxpbmVcIlxuICAgICAgICAgICAgW2F0dHIueDFdPVwidGljay54XCJcbiAgICAgICAgICAgIFthdHRyLngyXT1cInRpY2sueFwiXG4gICAgICAgICAgICB5MT1cIjBcIlxuICAgICAgICAgICAgW2F0dHIueTJdPVwiSEVJR0hUIC0gMTZcIlxuICAgICAgICAgID48L2xpbmU+XG4gICAgICAgICAgPHRleHQgY2xhc3M9XCJ0aWNrLWxhYmVsXCIgW2F0dHIueF09XCJ0aWNrLnhcIiBbYXR0ci55XT1cIkhFSUdIVCAtIDRcIj5cbiAgICAgICAgICAgIHt7IHRpY2subGFiZWwgfX1cbiAgICAgICAgICA8L3RleHQ+XG4gICAgICAgIDwvZz5cbiAgICAgICAgPGcgKm5nRm9yPVwibGV0IHRpY2sgb2YgZC55VGlja3NcIj5cbiAgICAgICAgICA8bGluZVxuICAgICAgICAgICAgY2xhc3M9XCJ0aWNrLWxpbmVcIlxuICAgICAgICAgICAgW2F0dHIueTFdPVwidGljay55XCJcbiAgICAgICAgICAgIFthdHRyLnkyXT1cInRpY2sueVwiXG4gICAgICAgICAgICB4MT1cIjBcIlxuICAgICAgICAgICAgW2F0dHIueDJdPVwid2lkdGhcIlxuICAgICAgICAgID48L2xpbmU+XG4gICAgICAgICAgPHRleHQgY2xhc3M9XCJ0aWNrLWxhYmVsXCIgW2F0dHIueV09XCJ0aWNrLnkgLSA0XCIgW2F0dHIueF09XCIwXCI+XG4gICAgICAgICAgICB7eyB0aWNrLmxhYmVsIH19XG4gICAgICAgICAgPC90ZXh0PlxuICAgICAgICA8L2c+XG4gICAgICAgIDxnICpuZ0lmPVwiaG92ZXIgIT0gbnVsbFwiPlxuICAgICAgICAgIDxsaW5lXG4gICAgICAgICAgICBjbGFzcz1cInRpY2stbGluZVwiXG4gICAgICAgICAgICBbYXR0ci54MV09XCJob3Zlci54XCJcbiAgICAgICAgICAgIFthdHRyLngyXT1cImhvdmVyLnhcIlxuICAgICAgICAgICAgeTE9XCIwXCJcbiAgICAgICAgICAgIFthdHRyLnkyXT1cIkhFSUdIVCAtIDE2XCJcbiAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgICAgc3Ryb2tlLWRhc2hhcnJheT1cIjRcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZz5cbiAgICAgICAgPGcgKm5nRm9yPVwibGV0IGJhciBvZiBkLmJhcnM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICA8cmVjdFxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHJlY3Qgb2YgYmFyXCJcbiAgICAgICAgICAgIFthdHRyLnhdPVwicmVjdC54XCJcbiAgICAgICAgICAgIFthdHRyLnldPVwicmVjdC55XCJcbiAgICAgICAgICAgIFthdHRyLndpZHRoXT1cInJlY3Qud2lkdGhcIlxuICAgICAgICAgICAgW2F0dHIuaGVpZ2h0XT1cInJlY3QuaGVpZ2h0XCJcbiAgICAgICAgICAgIFthdHRyLmZpbGxdPVwidmFyQ29sb3IoZC5jb2xvcnMsIGkpXCJcbiAgICAgICAgICA+PC9yZWN0PlxuICAgICAgICA8L2c+XG4gICAgICAgIDxnICpuZ0Zvcj1cImxldCBsaW5lIG9mIGQubGluZXM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgW2F0dHIuZF09XCJsaW5lXCJcbiAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJ2YXJDb2xvcihkLmNvbG9ycywgaSlcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgPC9nPlxuICAgICAgICA8ZyAqbmdGb3I9XCJsZXQgbGluZSBvZiBkLmxpbmVzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgY2xhc3M9XCJtYXJrZXJcIlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgaG92ZXIgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAoY29uZmlnLmdyb3VwZWRUb29sdGlwIHx8IGkgPT0gaG92ZXIudmlzaWJsZVlJbmRleClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbYXR0ci5jeF09XCJob3Zlci54XCJcbiAgICAgICAgICAgIFthdHRyLmN5XT1cImhvdmVyLnlzW2ldXCJcbiAgICAgICAgICAgIHI9XCIzLjVcIlxuICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwidmFyQ29sb3IoZC5jb2xvcnMsIGkpXCJcbiAgICAgICAgICA+PC9jaXJjbGU+XG4gICAgICAgIDwvZz5cbiAgICAgICAgPGcgKm5nRm9yPVwibGV0IGFyZWEgb2YgZC5hcmVhczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgIDxwYXRoIFthdHRyLmRdPVwiYXJlYVwiIFthdHRyLmZpbGxdPVwidmFyQ29sb3IoZC5jb2xvcnMsIGkpXCI+PC9wYXRoPlxuICAgICAgICA8L2c+XG4gICAgICAgIDxnICpuZ0Zvcj1cImxldCBhcmVhIG9mIGQuYXJlYXM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cIm1hcmtlclwiXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBob3ZlciAhPSBudWxsICYmXG4gICAgICAgICAgICAgIChjb25maWcuZ3JvdXBlZFRvb2x0aXAgfHwgaSA9PSBob3Zlci52aXNpYmxlWUluZGV4KVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFthdHRyLmN4XT1cImhvdmVyLnhcIlxuICAgICAgICAgICAgW2F0dHIuY3ldPVwiaG92ZXIueXNbaV1cIlxuICAgICAgICAgICAgcj1cIjMuNVwiXG4gICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJ2YXJDb2xvcihkLmNvbG9ycywgaSlcIlxuICAgICAgICAgID48L2NpcmNsZT5cbiAgICAgICAgPC9nPlxuICAgICAgPC9zdmc+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaG92ZXIgIT0gbnVsbFwiPlxuICAgICAgICA8cml2LWNhbGxvdXRcbiAgICAgICAgICBbYW5jaG9yXT1cImhvdmVyLnRvb2x0aXAuYW5jaG9yXCJcbiAgICAgICAgICBbaXNNb2RhbF09XCJmYWxzZVwiXG4gICAgICAgICAgW3ByZWZlcnJlZFBvc2l0aW9uXT1cIidjZW50ZXItcmlnaHQnXCJcbiAgICAgICAgICBbdGhlbWVdPVwiJ2xpZ2h0J1wiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbG91dC1jb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbG91dC1yb3dcIj5cbiAgICAgICAgICAgICAge3sgaG92ZXIudG9vbHRpcC5kYXRlIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJjYWxsb3V0LXJvd1wiXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBtZXRyaWMgb2YgaG92ZXIudG9vbHRpcC5tZXRyaWNzXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZXJpZXMtbGFiZWxcIj5cbiAgICAgICAgICAgICAgICA8cml2LWxlZ2VuZC1pdGVtIFtjb2xvclRva2VuXT1cIm1ldHJpYy5jb2xvclwiPjwvcml2LWxlZ2VuZC1pdGVtPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IG1ldHJpYy5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3Bhbj57eyBtZXRyaWMudmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9yaXYtY2FsbG91dD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxsZWdlbmQ+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlyc3RIaWRkZW5MZWdlbmRJdGVtSW5kZXgkIHwgYXN5bmM7IGxldCBmaVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGQuZGF0YS55czsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgIDxyaXYtbGVnZW5kLWl0ZW1cbiAgICAgICAgICAgICpuZ0lmPVwiaSA8IGZpXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCJpdGVtLmxhYmVsXCJcbiAgICAgICAgICAgIFt2aXNpYmlsaXR5XT1cIml0ZW0uaGlkZGVuID8gJ2hpZGRlbicgOiAndmlzaWJsZSdcIlxuICAgICAgICAgICAgW2NsaWNrYWJsZV09XCJjb25maWcuYWxsb3dMZWdlbmRUb2dnbGVcIlxuICAgICAgICAgICAgW2NvbG9yVG9rZW5dPVwiY29uZmlnLmNvbG9yc1tpICUgY29uZmlnLmNvbG9ycy5sZW5ndGhdXCJcbiAgICAgICAgICAgIChpdGVtQ2xpY2spPVwidG9nZ2xlTGVnZW5kKGl0ZW0ubGFiZWwpXCJcbiAgICAgICAgICA+PC9yaXYtbGVnZW5kLWl0ZW0+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgI21vcmVUZXh0Q29udGFpbmVyXG4gICAgICAgICAgY2xhc3M9XCJtb3JlLXRleHQtY29udGFpbmVyXCJcbiAgICAgICAgICAobW91c2VvdmVyKT1cIm1vdXNlb3ZlckxlZ2VuZCgpXCJcbiAgICAgICAgICAobW91c2VsZWF2ZSk9XCJtb3VzZWxlYXZlTGVnZW5kKClcIlxuICAgICAgICAgIChjbGljayk9XCJtb3JlQ2xpY2soKVwiXG4gICAgICAgICAgKm5nSWY9XCJmaSA8IGQuZGF0YS55cy5sZW5ndGhcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gcml2TGluayBjbGFzcz1cIm1vcmUtdGV4dFwiPlxuICAgICAgICAgICAgK1xuICAgICAgICAgICAge3sgZC5kYXRhLnlzLmxlbmd0aCAtIGZpIH19IG1vcmVcbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd01vcmVUb29sdGlwIHx8IGxvY2tTaG93TW9yZVRvb2x0aXBcIj5cbiAgICAgICAgICA8cml2LWNhbGxvdXRcbiAgICAgICAgICAgICNsZWdlbmRUb29sdGlwXG4gICAgICAgICAgICBbYW5jaG9yXT1cIm1vcmVUZXh0Q29udGFpbmVyPy5uYXRpdmVFbGVtZW50XCJcbiAgICAgICAgICAgIFtpc01vZGFsXT1cImxvY2tTaG93TW9yZVRvb2x0aXBcIlxuICAgICAgICAgICAgKGNsb3NlKT1cImxvY2tTaG93TW9yZVRvb2x0aXAgPSBmYWxzZVwiXG4gICAgICAgICAgICBbcHJlZmVycmVkUG9zaXRpb25dPVwiJ2JvdHRvbS1yaWdodCdcIlxuICAgICAgICAgICAgW3RoZW1lXT1cIidsaWdodCdcIlxuICAgICAgICAgICAgW3Nob3dDYXJldF09XCJmYWxzZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC10b29sdGlwXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZC5kYXRhLnlzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgPHJpdi1sZWdlbmQtaXRlbVxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpID49IGZpXCJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJpdGVtLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgIFt2aXNpYmlsaXR5XT1cIml0ZW0uaGlkZGVuID8gJ2hpZGRlbicgOiAndmlzaWJsZSdcIlxuICAgICAgICAgICAgICAgICAgW2NsaWNrYWJsZV09XCJjb25maWcuYWxsb3dMZWdlbmRUb2dnbGVcIlxuICAgICAgICAgICAgICAgICAgW2NvbG9yVG9rZW5dPVwiY29uZmlnLmNvbG9yc1tpICUgY29uZmlnLmNvbG9ycy5sZW5ndGhdXCJcbiAgICAgICAgICAgICAgICAgIChpdGVtQ2xpY2spPVwidG9nZ2xlTGVnZW5kKGl0ZW0ubGFiZWwpXCJcbiAgICAgICAgICAgICAgICA+PC9yaXYtbGVnZW5kLWl0ZW0+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9yaXYtY2FsbG91dD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2xlZ2VuZD5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN6ZXJvU3RhdGU+XG4gIDxyaXYtemVyby1zdGF0ZSBbbWVzc2FnZV09XCJjb25maWcuemVyb1N0YXRlTWVzc2FnZVwiPjwvcml2LXplcm8tc3RhdGU+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -4111,10 +4111,10 @@ class ChartComponent {
4111
4111
  }
4112
4112
  }
4113
4113
  ChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4114
- ChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ChartComponent, selector: "riv-chart", inputs: { config: "config", data: "data" }, outputs: { chartClicked: "chartClicked" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "moreTextContainer", first: true, predicate: ["moreTextContainer"], descendants: true }], ngImport: i0, template: "<div\n class=\"container\"\n (rivClientSize)=\"width = $event.width\"\n *ngIf=\"!(empty$ | async); else zeroState\"\n>\n <ng-container *ngIf=\"drawData$ | async; let d\">\n <div\n (mousemove)=\"mousemove($event, d.hover)\"\n (mouseleave)=\"mouseleave($event)\"\n (click)=\"click()\"\n #container\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" [attr.viewBox]=\"d.viewBox\">\n <g *ngFor=\"let tick of d.xTicks\" text-anchor=\"middle\">\n <line\n class=\"tick-line\"\n [attr.x1]=\"tick.x\"\n [attr.x2]=\"tick.x\"\n y1=\"0\"\n [attr.y2]=\"HEIGHT - 16\"\n ></line>\n <text class=\"tick-label\" [attr.x]=\"tick.x\" [attr.y]=\"HEIGHT - 4\">\n {{ tick.label }}\n </text>\n </g>\n <g *ngFor=\"let tick of d.yTicks\">\n <line\n class=\"tick-line\"\n [attr.y1]=\"tick.y\"\n [attr.y2]=\"tick.y\"\n x1=\"0\"\n [attr.x2]=\"width\"\n ></line>\n <text class=\"tick-label\" [attr.y]=\"tick.y - 4\" [attr.x]=\"0\">\n {{ tick.label }}\n </text>\n </g>\n <g *ngIf=\"hover != null\">\n <line\n class=\"tick-line\"\n [attr.x1]=\"hover.x\"\n [attr.x2]=\"hover.x\"\n y1=\"0\"\n [attr.y2]=\"HEIGHT - 16\"\n stroke-width=\"2\"\n stroke-dasharray=\"4\"\n />\n </g>\n <g *ngFor=\"let bar of d.bars; let i = index\">\n <rect\n *ngFor=\"let rect of bar\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n [attr.fill]=\"varColor(d.colors, i)\"\n ></rect>\n </g>\n <g *ngFor=\"let line of d.lines; let i = index\">\n <path\n [attr.d]=\"line\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n fill=\"none\"\n stroke-width=\"2\"\n ></path>\n </g>\n <g *ngFor=\"let line of d.lines; let i = index\">\n <circle\n class=\"marker\"\n *ngIf=\"\n hover != null &&\n (config.groupedTooltip || i == hover.visibleYIndex)\n \"\n [attr.cx]=\"hover.x\"\n [attr.cy]=\"hover.ys[i]\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n <g *ngFor=\"let area of d.areas; let i = index\">\n <path [attr.d]=\"area\" [attr.fill]=\"varColor(d.colors, i)\"></path>\n </g>\n <g *ngFor=\"let area of d.areas; let i = index\">\n <circle\n class=\"marker\"\n *ngIf=\"\n hover != null &&\n (config.groupedTooltip || i == hover.visibleYIndex)\n \"\n [attr.cx]=\"hover.x\"\n [attr.cy]=\"hover.ys[i]\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n </svg>\n <ng-container *ngIf=\"hover != null\">\n <riv-callout\n [anchor]=\"hover.tooltip.anchor\"\n [isModal]=\"false\"\n [preferredPosition]=\"'center-right'\"\n [theme]=\"'light'\"\n >\n <div class=\"callout-content\">\n <div class=\"callout-row\">\n {{ hover.tooltip.date }}\n </div>\n <div\n class=\"callout-row\"\n *ngFor=\"let metric of hover.tooltip.metrics\"\n >\n <span class=\"series-label\">\n <riv-legend-item [colorToken]=\"metric.color\"></riv-legend-item>\n <span>{{ metric.label }}</span>\n </span>\n <span>{{ metric.value }}</span>\n </div>\n </div>\n </riv-callout>\n </ng-container>\n </div>\n <legend>\n <ng-container *ngIf=\"firstHiddenLegendItemIndex$ | async; let fi\">\n <ng-container *ngFor=\"let item of d.data.ys; let i = index\">\n <riv-legend-item\n *ngIf=\"i < fi\"\n [label]=\"item.label\"\n [visibility]=\"item.hidden ? 'hidden' : 'visible'\"\n [clickable]=\"config.allowLegendToggle\"\n [colorToken]=\"config.colors[i % config.colors.length]\"\n (itemClick)=\"toggleLegend(item.label)\"\n ></riv-legend-item>\n </ng-container>\n <div\n #moreTextContainer\n (mouseover)=\"mouseoverLegend()\"\n (mouseleave)=\"mouseleaveLegend()\"\n (click)=\"moreClick()\"\n *ngIf=\"fi < d.data.ys.length\"\n >\n <span rivLink class=\"more-text\">\n +\n {{ d.data.ys.length - fi }} more\n </span>\n </div>\n <ng-container *ngIf=\"showMoreTooltip || lockShowMoreTooltip\">\n <riv-callout\n #legendTooltip\n [anchor]=\"moreTextContainer?.nativeElement\"\n [isModal]=\"lockShowMoreTooltip\"\n (close)=\"lockShowMoreTooltip = false\"\n [preferredPosition]=\"'bottom-right'\"\n [theme]=\"'light'\"\n >\n <div class=\"callout-content\">\n <ng-container *ngFor=\"let item of d.data.ys; let i = index\">\n <riv-legend-item\n *ngIf=\"i >= fi\"\n [label]=\"item.label\"\n [visibility]=\"item.hidden ? 'hidden' : 'visible'\"\n [clickable]=\"config.allowLegendToggle\"\n [colorToken]=\"config.colors[i % config.colors.length]\"\n (itemClick)=\"toggleLegend(item.label)\"\n ></riv-legend-item>\n </ng-container>\n </div>\n </riv-callout>\n </ng-container>\n </ng-container>\n </legend>\n </ng-container>\n</div>\n\n<ng-template #zeroState>\n <riv-zero-state [message]=\"config.zeroStateMessage\"></riv-zero-state>\n</ng-template>\n", styles: [".container{-webkit-user-select:none;user-select:none;position:relative;display:flex;flex-direction:column;gap:var(--size-small)}.tick-line{stroke:var(--gray-20)}.tick-label{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);fill:var(--type-light-low-contrast)}.marker{fill:var(--surface-light-0)}.callout-content{pointer-events:none;padding:var(--size-medium) var(--size-xlarge);display:flex;flex-direction:column}.callout-row{white-space:nowrap;display:flex;padding:var(--size-medium) 0;gap:var(--size-medium);align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);&:not(:last-child){border-bottom:var(--border-width) solid var(--border-light)}}.series-label{flex-grow:1;font-weight:var(--font-weight-heavy);display:flex;align-items:center;gap:var(--size-small)}legend{display:flex;flex-wrap:wrap;gap:var(--size-large);justify-content:flex-start;align-items:baseline}.more-text{font-size:var(--type-1-font-size)}.callout-content>riv-legend-item{white-space:nowrap;display:flex;padding:var(--size-medium) 0;gap:var(--size-medium);align-items:center;line-height:var(--type-1-line-height-0)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "component", type: LegendItemComponent, selector: "riv-legend-item", inputs: ["label", "colorToken", "style", "visibility", "iconTooltip", "clickable", "showCheckWhenClickable"], outputs: ["itemClick"] }, { kind: "component", type: LinkComponent, selector: "[rivLink]", inputs: ["disabled", "locked"] }, { kind: "directive", type: SizeDirective, selector: "[rivClientSize]", outputs: ["rivClientSize"] }, { kind: "component", type: ZeroStateComponent, selector: "riv-zero-state", inputs: ["message"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4114
+ ChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ChartComponent, selector: "riv-chart", inputs: { config: "config", data: "data" }, outputs: { chartClicked: "chartClicked" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "moreTextContainer", first: true, predicate: ["moreTextContainer"], descendants: true }], ngImport: i0, template: "<div\n class=\"container\"\n (rivClientSize)=\"width = $event.width\"\n *ngIf=\"!(empty$ | async); else zeroState\"\n>\n <ng-container *ngIf=\"drawData$ | async; let d\">\n <div\n (mousemove)=\"mousemove($event, d.hover)\"\n (mouseleave)=\"mouseleave($event)\"\n (click)=\"click()\"\n #container\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" [attr.viewBox]=\"d.viewBox\">\n <g *ngFor=\"let tick of d.xTicks\" text-anchor=\"middle\">\n <line\n class=\"tick-line\"\n [attr.x1]=\"tick.x\"\n [attr.x2]=\"tick.x\"\n y1=\"0\"\n [attr.y2]=\"HEIGHT - 16\"\n ></line>\n <text class=\"tick-label\" [attr.x]=\"tick.x\" [attr.y]=\"HEIGHT - 4\">\n {{ tick.label }}\n </text>\n </g>\n <g *ngFor=\"let tick of d.yTicks\">\n <line\n class=\"tick-line\"\n [attr.y1]=\"tick.y\"\n [attr.y2]=\"tick.y\"\n x1=\"0\"\n [attr.x2]=\"width\"\n ></line>\n <text class=\"tick-label\" [attr.y]=\"tick.y - 4\" [attr.x]=\"0\">\n {{ tick.label }}\n </text>\n </g>\n <g *ngIf=\"hover != null\">\n <line\n class=\"tick-line\"\n [attr.x1]=\"hover.x\"\n [attr.x2]=\"hover.x\"\n y1=\"0\"\n [attr.y2]=\"HEIGHT - 16\"\n stroke-width=\"2\"\n stroke-dasharray=\"4\"\n />\n </g>\n <g *ngFor=\"let bar of d.bars; let i = index\">\n <rect\n *ngFor=\"let rect of bar\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n [attr.fill]=\"varColor(d.colors, i)\"\n ></rect>\n </g>\n <g *ngFor=\"let line of d.lines; let i = index\">\n <path\n [attr.d]=\"line\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n fill=\"none\"\n stroke-width=\"2\"\n ></path>\n </g>\n <g *ngFor=\"let line of d.lines; let i = index\">\n <circle\n class=\"marker\"\n *ngIf=\"\n hover != null &&\n (config.groupedTooltip || i == hover.visibleYIndex)\n \"\n [attr.cx]=\"hover.x\"\n [attr.cy]=\"hover.ys[i]\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n <g *ngFor=\"let area of d.areas; let i = index\">\n <path [attr.d]=\"area\" [attr.fill]=\"varColor(d.colors, i)\"></path>\n </g>\n <g *ngFor=\"let area of d.areas; let i = index\">\n <circle\n class=\"marker\"\n *ngIf=\"\n hover != null &&\n (config.groupedTooltip || i == hover.visibleYIndex)\n \"\n [attr.cx]=\"hover.x\"\n [attr.cy]=\"hover.ys[i]\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n </svg>\n <ng-container *ngIf=\"hover != null\">\n <riv-callout\n [anchor]=\"hover.tooltip.anchor\"\n [isModal]=\"false\"\n [preferredPosition]=\"'center-right'\"\n [theme]=\"'light'\"\n >\n <div class=\"callout-content\">\n <div class=\"callout-row\">\n {{ hover.tooltip.date }}\n </div>\n <div\n class=\"callout-row\"\n *ngFor=\"let metric of hover.tooltip.metrics\"\n >\n <span class=\"series-label\">\n <riv-legend-item [colorToken]=\"metric.color\"></riv-legend-item>\n <span>{{ metric.label }}</span>\n </span>\n <span>{{ metric.value }}</span>\n </div>\n </div>\n </riv-callout>\n </ng-container>\n </div>\n <legend>\n <ng-container *ngIf=\"firstHiddenLegendItemIndex$ | async; let fi\">\n <ng-container *ngFor=\"let item of d.data.ys; let i = index\">\n <riv-legend-item\n *ngIf=\"i < fi\"\n [label]=\"item.label\"\n [visibility]=\"item.hidden ? 'hidden' : 'visible'\"\n [clickable]=\"config.allowLegendToggle\"\n [colorToken]=\"config.colors[i % config.colors.length]\"\n (itemClick)=\"toggleLegend(item.label)\"\n ></riv-legend-item>\n </ng-container>\n <div\n #moreTextContainer\n class=\"more-text-container\"\n (mouseover)=\"mouseoverLegend()\"\n (mouseleave)=\"mouseleaveLegend()\"\n (click)=\"moreClick()\"\n *ngIf=\"fi < d.data.ys.length\"\n >\n <span rivLink class=\"more-text\">\n +\n {{ d.data.ys.length - fi }} more\n </span>\n </div>\n <ng-container *ngIf=\"showMoreTooltip || lockShowMoreTooltip\">\n <riv-callout\n #legendTooltip\n [anchor]=\"moreTextContainer?.nativeElement\"\n [isModal]=\"lockShowMoreTooltip\"\n (close)=\"lockShowMoreTooltip = false\"\n [preferredPosition]=\"'bottom-right'\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n >\n <div class=\"legend-tooltip\">\n <ng-container *ngFor=\"let item of d.data.ys; let i = index\">\n <riv-legend-item\n *ngIf=\"i >= fi\"\n [label]=\"item.label\"\n [visibility]=\"item.hidden ? 'hidden' : 'visible'\"\n [clickable]=\"config.allowLegendToggle\"\n [colorToken]=\"config.colors[i % config.colors.length]\"\n (itemClick)=\"toggleLegend(item.label)\"\n ></riv-legend-item>\n </ng-container>\n </div>\n </riv-callout>\n </ng-container>\n </ng-container>\n </legend>\n </ng-container>\n</div>\n\n<ng-template #zeroState>\n <riv-zero-state [message]=\"config.zeroStateMessage\"></riv-zero-state>\n</ng-template>\n", styles: [".container{-webkit-user-select:none;user-select:none;position:relative;display:flex;flex-direction:column;gap:var(--size-small)}.tick-line{stroke:var(--gray-20)}.tick-label{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);fill:var(--type-light-low-contrast)}.marker{fill:var(--surface-light-0)}.callout-content{pointer-events:none;padding:var(--size-medium) var(--size-xlarge);display:flex;flex-direction:column}.callout-row{white-space:nowrap;display:flex;padding:var(--size-medium) 0;gap:var(--size-medium);align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);&:not(:last-child){border-bottom:var(--border-width) solid var(--border-light)}}.series-label{flex-grow:1;font-weight:var(--font-weight-heavy);display:flex;align-items:center;gap:var(--size-small)}legend{display:flex;flex-wrap:wrap;gap:var(--size-large);justify-content:flex-start;align-items:baseline}.more-text-container{width:calc(var(--base-grid-size) * 15);height:var(--size-large)}.more-text{font-size:var(--type-1-font-size);top:calc(var(--base-grid-size) * -1);position:relative}.legend-tooltip{padding:var(--size-medium) var(--size-xlarge);display:flex;flex-direction:column;overflow-y:scroll;max-height:clamp(0px,60vh,600px)}.legend-tooltip>riv-legend-item{white-space:nowrap;display:flex;padding:var(--size-medium) 0;gap:var(--size-medium);align-items:center;line-height:var(--type-1-line-height-0)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "component", type: LegendItemComponent, selector: "riv-legend-item", inputs: ["label", "colorToken", "style", "visibility", "iconTooltip", "clickable", "showCheckWhenClickable"], outputs: ["itemClick"] }, { kind: "component", type: LinkComponent, selector: "[rivLink]", inputs: ["disabled", "locked"] }, { kind: "directive", type: SizeDirective, selector: "[rivClientSize]", outputs: ["rivClientSize"] }, { kind: "component", type: ZeroStateComponent, selector: "riv-zero-state", inputs: ["message"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4115
4115
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ChartComponent, decorators: [{
4116
4116
  type: Component,
4117
- args: [{ selector: 'riv-chart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"container\"\n (rivClientSize)=\"width = $event.width\"\n *ngIf=\"!(empty$ | async); else zeroState\"\n>\n <ng-container *ngIf=\"drawData$ | async; let d\">\n <div\n (mousemove)=\"mousemove($event, d.hover)\"\n (mouseleave)=\"mouseleave($event)\"\n (click)=\"click()\"\n #container\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" [attr.viewBox]=\"d.viewBox\">\n <g *ngFor=\"let tick of d.xTicks\" text-anchor=\"middle\">\n <line\n class=\"tick-line\"\n [attr.x1]=\"tick.x\"\n [attr.x2]=\"tick.x\"\n y1=\"0\"\n [attr.y2]=\"HEIGHT - 16\"\n ></line>\n <text class=\"tick-label\" [attr.x]=\"tick.x\" [attr.y]=\"HEIGHT - 4\">\n {{ tick.label }}\n </text>\n </g>\n <g *ngFor=\"let tick of d.yTicks\">\n <line\n class=\"tick-line\"\n [attr.y1]=\"tick.y\"\n [attr.y2]=\"tick.y\"\n x1=\"0\"\n [attr.x2]=\"width\"\n ></line>\n <text class=\"tick-label\" [attr.y]=\"tick.y - 4\" [attr.x]=\"0\">\n {{ tick.label }}\n </text>\n </g>\n <g *ngIf=\"hover != null\">\n <line\n class=\"tick-line\"\n [attr.x1]=\"hover.x\"\n [attr.x2]=\"hover.x\"\n y1=\"0\"\n [attr.y2]=\"HEIGHT - 16\"\n stroke-width=\"2\"\n stroke-dasharray=\"4\"\n />\n </g>\n <g *ngFor=\"let bar of d.bars; let i = index\">\n <rect\n *ngFor=\"let rect of bar\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n [attr.fill]=\"varColor(d.colors, i)\"\n ></rect>\n </g>\n <g *ngFor=\"let line of d.lines; let i = index\">\n <path\n [attr.d]=\"line\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n fill=\"none\"\n stroke-width=\"2\"\n ></path>\n </g>\n <g *ngFor=\"let line of d.lines; let i = index\">\n <circle\n class=\"marker\"\n *ngIf=\"\n hover != null &&\n (config.groupedTooltip || i == hover.visibleYIndex)\n \"\n [attr.cx]=\"hover.x\"\n [attr.cy]=\"hover.ys[i]\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n <g *ngFor=\"let area of d.areas; let i = index\">\n <path [attr.d]=\"area\" [attr.fill]=\"varColor(d.colors, i)\"></path>\n </g>\n <g *ngFor=\"let area of d.areas; let i = index\">\n <circle\n class=\"marker\"\n *ngIf=\"\n hover != null &&\n (config.groupedTooltip || i == hover.visibleYIndex)\n \"\n [attr.cx]=\"hover.x\"\n [attr.cy]=\"hover.ys[i]\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n </svg>\n <ng-container *ngIf=\"hover != null\">\n <riv-callout\n [anchor]=\"hover.tooltip.anchor\"\n [isModal]=\"false\"\n [preferredPosition]=\"'center-right'\"\n [theme]=\"'light'\"\n >\n <div class=\"callout-content\">\n <div class=\"callout-row\">\n {{ hover.tooltip.date }}\n </div>\n <div\n class=\"callout-row\"\n *ngFor=\"let metric of hover.tooltip.metrics\"\n >\n <span class=\"series-label\">\n <riv-legend-item [colorToken]=\"metric.color\"></riv-legend-item>\n <span>{{ metric.label }}</span>\n </span>\n <span>{{ metric.value }}</span>\n </div>\n </div>\n </riv-callout>\n </ng-container>\n </div>\n <legend>\n <ng-container *ngIf=\"firstHiddenLegendItemIndex$ | async; let fi\">\n <ng-container *ngFor=\"let item of d.data.ys; let i = index\">\n <riv-legend-item\n *ngIf=\"i < fi\"\n [label]=\"item.label\"\n [visibility]=\"item.hidden ? 'hidden' : 'visible'\"\n [clickable]=\"config.allowLegendToggle\"\n [colorToken]=\"config.colors[i % config.colors.length]\"\n (itemClick)=\"toggleLegend(item.label)\"\n ></riv-legend-item>\n </ng-container>\n <div\n #moreTextContainer\n (mouseover)=\"mouseoverLegend()\"\n (mouseleave)=\"mouseleaveLegend()\"\n (click)=\"moreClick()\"\n *ngIf=\"fi < d.data.ys.length\"\n >\n <span rivLink class=\"more-text\">\n +\n {{ d.data.ys.length - fi }} more\n </span>\n </div>\n <ng-container *ngIf=\"showMoreTooltip || lockShowMoreTooltip\">\n <riv-callout\n #legendTooltip\n [anchor]=\"moreTextContainer?.nativeElement\"\n [isModal]=\"lockShowMoreTooltip\"\n (close)=\"lockShowMoreTooltip = false\"\n [preferredPosition]=\"'bottom-right'\"\n [theme]=\"'light'\"\n >\n <div class=\"callout-content\">\n <ng-container *ngFor=\"let item of d.data.ys; let i = index\">\n <riv-legend-item\n *ngIf=\"i >= fi\"\n [label]=\"item.label\"\n [visibility]=\"item.hidden ? 'hidden' : 'visible'\"\n [clickable]=\"config.allowLegendToggle\"\n [colorToken]=\"config.colors[i % config.colors.length]\"\n (itemClick)=\"toggleLegend(item.label)\"\n ></riv-legend-item>\n </ng-container>\n </div>\n </riv-callout>\n </ng-container>\n </ng-container>\n </legend>\n </ng-container>\n</div>\n\n<ng-template #zeroState>\n <riv-zero-state [message]=\"config.zeroStateMessage\"></riv-zero-state>\n</ng-template>\n", styles: [".container{-webkit-user-select:none;user-select:none;position:relative;display:flex;flex-direction:column;gap:var(--size-small)}.tick-line{stroke:var(--gray-20)}.tick-label{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);fill:var(--type-light-low-contrast)}.marker{fill:var(--surface-light-0)}.callout-content{pointer-events:none;padding:var(--size-medium) var(--size-xlarge);display:flex;flex-direction:column}.callout-row{white-space:nowrap;display:flex;padding:var(--size-medium) 0;gap:var(--size-medium);align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);&:not(:last-child){border-bottom:var(--border-width) solid var(--border-light)}}.series-label{flex-grow:1;font-weight:var(--font-weight-heavy);display:flex;align-items:center;gap:var(--size-small)}legend{display:flex;flex-wrap:wrap;gap:var(--size-large);justify-content:flex-start;align-items:baseline}.more-text{font-size:var(--type-1-font-size)}.callout-content>riv-legend-item{white-space:nowrap;display:flex;padding:var(--size-medium) 0;gap:var(--size-medium);align-items:center;line-height:var(--type-1-line-height-0)}\n"] }]
4117
+ args: [{ selector: 'riv-chart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"container\"\n (rivClientSize)=\"width = $event.width\"\n *ngIf=\"!(empty$ | async); else zeroState\"\n>\n <ng-container *ngIf=\"drawData$ | async; let d\">\n <div\n (mousemove)=\"mousemove($event, d.hover)\"\n (mouseleave)=\"mouseleave($event)\"\n (click)=\"click()\"\n #container\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" [attr.viewBox]=\"d.viewBox\">\n <g *ngFor=\"let tick of d.xTicks\" text-anchor=\"middle\">\n <line\n class=\"tick-line\"\n [attr.x1]=\"tick.x\"\n [attr.x2]=\"tick.x\"\n y1=\"0\"\n [attr.y2]=\"HEIGHT - 16\"\n ></line>\n <text class=\"tick-label\" [attr.x]=\"tick.x\" [attr.y]=\"HEIGHT - 4\">\n {{ tick.label }}\n </text>\n </g>\n <g *ngFor=\"let tick of d.yTicks\">\n <line\n class=\"tick-line\"\n [attr.y1]=\"tick.y\"\n [attr.y2]=\"tick.y\"\n x1=\"0\"\n [attr.x2]=\"width\"\n ></line>\n <text class=\"tick-label\" [attr.y]=\"tick.y - 4\" [attr.x]=\"0\">\n {{ tick.label }}\n </text>\n </g>\n <g *ngIf=\"hover != null\">\n <line\n class=\"tick-line\"\n [attr.x1]=\"hover.x\"\n [attr.x2]=\"hover.x\"\n y1=\"0\"\n [attr.y2]=\"HEIGHT - 16\"\n stroke-width=\"2\"\n stroke-dasharray=\"4\"\n />\n </g>\n <g *ngFor=\"let bar of d.bars; let i = index\">\n <rect\n *ngFor=\"let rect of bar\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n [attr.fill]=\"varColor(d.colors, i)\"\n ></rect>\n </g>\n <g *ngFor=\"let line of d.lines; let i = index\">\n <path\n [attr.d]=\"line\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n fill=\"none\"\n stroke-width=\"2\"\n ></path>\n </g>\n <g *ngFor=\"let line of d.lines; let i = index\">\n <circle\n class=\"marker\"\n *ngIf=\"\n hover != null &&\n (config.groupedTooltip || i == hover.visibleYIndex)\n \"\n [attr.cx]=\"hover.x\"\n [attr.cy]=\"hover.ys[i]\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n <g *ngFor=\"let area of d.areas; let i = index\">\n <path [attr.d]=\"area\" [attr.fill]=\"varColor(d.colors, i)\"></path>\n </g>\n <g *ngFor=\"let area of d.areas; let i = index\">\n <circle\n class=\"marker\"\n *ngIf=\"\n hover != null &&\n (config.groupedTooltip || i == hover.visibleYIndex)\n \"\n [attr.cx]=\"hover.x\"\n [attr.cy]=\"hover.ys[i]\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n </svg>\n <ng-container *ngIf=\"hover != null\">\n <riv-callout\n [anchor]=\"hover.tooltip.anchor\"\n [isModal]=\"false\"\n [preferredPosition]=\"'center-right'\"\n [theme]=\"'light'\"\n >\n <div class=\"callout-content\">\n <div class=\"callout-row\">\n {{ hover.tooltip.date }}\n </div>\n <div\n class=\"callout-row\"\n *ngFor=\"let metric of hover.tooltip.metrics\"\n >\n <span class=\"series-label\">\n <riv-legend-item [colorToken]=\"metric.color\"></riv-legend-item>\n <span>{{ metric.label }}</span>\n </span>\n <span>{{ metric.value }}</span>\n </div>\n </div>\n </riv-callout>\n </ng-container>\n </div>\n <legend>\n <ng-container *ngIf=\"firstHiddenLegendItemIndex$ | async; let fi\">\n <ng-container *ngFor=\"let item of d.data.ys; let i = index\">\n <riv-legend-item\n *ngIf=\"i < fi\"\n [label]=\"item.label\"\n [visibility]=\"item.hidden ? 'hidden' : 'visible'\"\n [clickable]=\"config.allowLegendToggle\"\n [colorToken]=\"config.colors[i % config.colors.length]\"\n (itemClick)=\"toggleLegend(item.label)\"\n ></riv-legend-item>\n </ng-container>\n <div\n #moreTextContainer\n class=\"more-text-container\"\n (mouseover)=\"mouseoverLegend()\"\n (mouseleave)=\"mouseleaveLegend()\"\n (click)=\"moreClick()\"\n *ngIf=\"fi < d.data.ys.length\"\n >\n <span rivLink class=\"more-text\">\n +\n {{ d.data.ys.length - fi }} more\n </span>\n </div>\n <ng-container *ngIf=\"showMoreTooltip || lockShowMoreTooltip\">\n <riv-callout\n #legendTooltip\n [anchor]=\"moreTextContainer?.nativeElement\"\n [isModal]=\"lockShowMoreTooltip\"\n (close)=\"lockShowMoreTooltip = false\"\n [preferredPosition]=\"'bottom-right'\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n >\n <div class=\"legend-tooltip\">\n <ng-container *ngFor=\"let item of d.data.ys; let i = index\">\n <riv-legend-item\n *ngIf=\"i >= fi\"\n [label]=\"item.label\"\n [visibility]=\"item.hidden ? 'hidden' : 'visible'\"\n [clickable]=\"config.allowLegendToggle\"\n [colorToken]=\"config.colors[i % config.colors.length]\"\n (itemClick)=\"toggleLegend(item.label)\"\n ></riv-legend-item>\n </ng-container>\n </div>\n </riv-callout>\n </ng-container>\n </ng-container>\n </legend>\n </ng-container>\n</div>\n\n<ng-template #zeroState>\n <riv-zero-state [message]=\"config.zeroStateMessage\"></riv-zero-state>\n</ng-template>\n", styles: [".container{-webkit-user-select:none;user-select:none;position:relative;display:flex;flex-direction:column;gap:var(--size-small)}.tick-line{stroke:var(--gray-20)}.tick-label{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);fill:var(--type-light-low-contrast)}.marker{fill:var(--surface-light-0)}.callout-content{pointer-events:none;padding:var(--size-medium) var(--size-xlarge);display:flex;flex-direction:column}.callout-row{white-space:nowrap;display:flex;padding:var(--size-medium) 0;gap:var(--size-medium);align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);&:not(:last-child){border-bottom:var(--border-width) solid var(--border-light)}}.series-label{flex-grow:1;font-weight:var(--font-weight-heavy);display:flex;align-items:center;gap:var(--size-small)}legend{display:flex;flex-wrap:wrap;gap:var(--size-large);justify-content:flex-start;align-items:baseline}.more-text-container{width:calc(var(--base-grid-size) * 15);height:var(--size-large)}.more-text{font-size:var(--type-1-font-size);top:calc(var(--base-grid-size) * -1);position:relative}.legend-tooltip{padding:var(--size-medium) var(--size-xlarge);display:flex;flex-direction:column;overflow-y:scroll;max-height:clamp(0px,60vh,600px)}.legend-tooltip>riv-legend-item{white-space:nowrap;display:flex;padding:var(--size-medium) 0;gap:var(--size-medium);align-items:center;line-height:var(--type-1-line-height-0)}\n"] }]
4118
4118
  }], propDecorators: { container: [{
4119
4119
  type: ViewChild,
4120
4120
  args: ['container']