@rivet-health/design-system 10.3.1 → 10.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.
@@ -105,10 +105,10 @@ export class ChartComponent {
105
105
  }
106
106
  }
107
107
  ChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
108
- 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 }], 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 <riv-legend-item\n *ngFor=\"let item of d.data.ys; let i = index\"\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 </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{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}\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: "directive", type: i4.SizeDirective, selector: "[rivClientSize]", outputs: ["rivClientSize"] }, { kind: "component", type: i5.ZeroStateComponent, selector: "riv-zero-state", inputs: ["message"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
108
+ 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 }], 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 <riv-legend-item\n *ngFor=\"let item of d.data.ys; let i = index\"\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 </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}\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: "directive", type: i4.SizeDirective, selector: "[rivClientSize]", outputs: ["rivClientSize"] }, { kind: "component", type: i5.ZeroStateComponent, selector: "riv-zero-state", inputs: ["message"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
109
109
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ChartComponent, decorators: [{
110
110
  type: Component,
111
- 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 <riv-legend-item\n *ngFor=\"let item of d.data.ys; let i = index\"\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 </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{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}\n"] }]
111
+ 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 <riv-legend-item\n *ngFor=\"let item of d.data.ys; let i = index\"\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 </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}\n"] }]
112
112
  }], propDecorators: { container: [{
113
113
  type: ViewChild,
114
114
  args: ['container']
@@ -4,6 +4,7 @@ import { SmallCurrencyPipe } from '../../format/pipes/small-currency.pipe';
4
4
  import { CurrencyPipe } from '@angular/common';
5
5
  import { scaleLinear, scaleUtc } from 'd3-scale';
6
6
  import { area, line } from 'd3-shape';
7
+ import { utcFormat } from 'd3-time-format';
7
8
  export var Chart;
8
9
  (function (Chart) {
9
10
  Chart.defaultColorPalette = [
@@ -69,7 +70,7 @@ export var Chart;
69
70
  visibleYIndex,
70
71
  tooltip: {
71
72
  anchor,
72
- date: format(new Date(data.x[xIndex])),
73
+ date: utcFormat('%B %d, %Y')(new Date(data.x[xIndex])),
73
74
  metrics: data.ys
74
75
  .map((y, index) => ({
75
76
  color: colors[index % colors.length],
@@ -123,7 +124,7 @@ export var Chart;
123
124
  visibleYIndex,
124
125
  tooltip: {
125
126
  anchor,
126
- date: format(new Date(unstackedData.x[xIndex])),
127
+ date: utcFormat('%B %d, %Y')(new Date(unstackedData.x[xIndex])),
127
128
  metrics: unstackedData.ys
128
129
  .map((y, index) => ({
129
130
  color: colors[index % colors.length],
@@ -189,7 +190,7 @@ export var Chart;
189
190
  visibleYIndex,
190
191
  tooltip: {
191
192
  anchor,
192
- date: format(new Date(unstackedData.x[xIndex])),
193
+ date: utcFormat('%B %d, %Y')(new Date(unstackedData.x[xIndex])),
193
194
  metrics: unstackedData.ys
194
195
  .map((y, index) => ({
195
196
  color: colors[index % colors.length],
@@ -292,4 +293,4 @@ export var Chart;
292
293
  }
293
294
  Chart.getPipes = getPipes;
294
295
  })(Chart || (Chart = {}));
295
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi92aXN1YWxpemF0aW9uL2NoYXJ0L2NoYXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBR3RDLE1BQU0sS0FBVyxLQUFLLENBaWNyQjtBQWpjRCxXQUFpQixLQUFLO0lBQ1AseUJBQW1CLEdBQUc7UUFDakMsYUFBYTtRQUNiLGlCQUFpQjtRQUNqQixtQkFBbUI7UUFDbkIsV0FBVztRQUNYLFdBQVc7UUFDWCxXQUFXO1FBQ1gsV0FBVztRQUNYLGdDQUFnQztRQUNoQyxpQkFBaUI7UUFDakIsbUJBQW1CO1FBQ25CLFdBQVc7UUFDWCxXQUFXO1FBQ1gsV0FBVztRQUNYLFdBQVc7UUFDWCwrQkFBK0I7UUFDL0IsaUJBQWlCO1FBQ2pCLG1CQUFtQjtRQUNuQixXQUFXO1FBQ1gsV0FBVztRQUNYLFdBQVc7UUFDWCxXQUFXO0tBQ1osQ0FBQztJQUVGLFNBQWdCLEtBQUssQ0FBQyxNQUFjLEVBQUUsSUFBVSxFQUFFLFVBQXNCO1FBQ3RFLE9BQU8sTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNO1lBQzFCLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUM7WUFDakMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJ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QztnQkFDOUIsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7YUFDakM7WUFDRCxLQUFLLFVBQVU7Z0JBQ2IsT0FBTztvQkFDTCxJQUFJLEVBQUUsSUFBSSxpQkFBaUIsRUFBRTtvQkFDN0IsUUFBUSxFQUFFLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQztpQkFDcEMsQ0FBQztZQUNKLEtBQUssWUFBWSxDQUFDLENBQUM7Z0JBQ2pCLE1BQU0sSUFBSSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ2xDLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO2FBQ2pDO1NBQ0Y7SUFDSCxDQUFDO0lBaEJlLGNBQVEsV0FnQnZCLENBQUE7QUFDSCxDQUFDLEVBamNnQixLQUFLLEtBQUwsS0FBSyxRQWljckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOdW1iZXJQaXBlIH0gZnJvbSAnLi4vLi4vZm9ybWF0L3BpcGVzL251bWJlci5waXBlJztcbmltcG9ydCB7IFBlcmNlbnRhZ2VQaXBlIH0gZnJvbSAnLi4vLi4vZm9ybWF0L3BpcGVzL3BlcmNlbnRhZ2UucGlwZSc7XG5pbXBvcnQgeyBTbWFsbEN1cnJlbmN5UGlwZSB9IGZyb20gJy4uLy4uL2Zvcm1hdC9waXBlcy9zbWFsbC1jdXJyZW5jeS5waXBlJztcbmltcG9ydCB7IEN1cnJlbmN5UGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBzY2FsZUxpbmVhciwgc2NhbGVVdGMgfSBmcm9tICdkMy1zY2FsZSc7XG5pbXBvcnQgeyBhcmVhLCBsaW5lIH0gZnJvbSAnZDMtc2hhcGUnO1xuaW1wb3J0IHsgZ2V0VGltZUludGVydmFsLCBJbnRlcnZhbCB9IGZyb20gJy4uL2ludGVydmFscyc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ2hhcnQge1xuICBleHBvcnQgY29uc3QgZGVmYXVsdENvbG9yUGFsZXR0ZSA9IFtcbiAgICAvL0Jhc2UgY29sb3JzXG4gICAgJy0tYmFqYS1ibGFzdC01MCcsXG4gICAgJy0tdGVhbC1kaWFtb25kLTUwJyxcbiAgICAnLS1meXJlLTUwJyxcbiAgICAnLS10YW5nLTUwJyxcbiAgICAnLS1wdXJwLTYwJyxcbiAgICAnLS1yb3NpLTcwJyxcbiAgICAvL1NoaWZ0IGxpZ2h0ZXIgZnJvbSBiYXNlIGJ5IC0yMFxuICAgICctLWJhamEtYmxhc3QtMzAnLFxuICAgICctLXRlYWwtZGlhbW9uZC0zMCcsXG4gICAgJy0tZnlyZS0zMCcsXG4gICAgJy0tdGFuZy0zMCcsXG4gICAgJy0tcHVycC00MCcsXG4gICAgJy0tcm9zaS01MCcsXG4gICAgLy9TaGlmdCBkYXJrZXIgZnJvbSBiYXNlIGJ5ICsyMFxuICAgICctLWJhamEtYmxhc3QtNzAnLFxuICAgICctLXRlYWwtZGlhbW9uZC03MCcsXG4gICAgJy0tZnlyZS03MCcsXG4gICAgJy0tdGFuZy03MCcsXG4gICAgJy0tcHVycC04MCcsXG4gICAgJy0tcm9zaS05MCcsXG4gIF07XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNoYXJ0KGNvbmZpZzogQ29uZmlnLCBkYXRhOiBEYXRhLCBkaW1lbnNpb25zOiBEaW1lbnNpb25zKSB7XG4gICAgcmV0dXJuIGNvbmZpZy50eXBlID09ICdsaW5lJ1xuICAgICAgPyBsaW5lcyhjb25maWcsIGRhdGEsIGRpbWVuc2lvbnMpXG4gICAgICA6IGNvbmZpZy50eXBlID09ICdhcmVhJ1xuICAgICAgPyBhcmVhcyhjb25maWcsIGRhdGEsIGRpbWVuc2lvbnMpXG4gICAgICA6IGJhcnMoY29uZmlnLCBkYXRhLCBkaW1lbnNpb25zKTtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gbGluZXMoXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgYWxsRGF0YTogRGF0YSxcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zLFxuICApOiBSZW5kZXJlZENoYXJ0IHtcbiAgICBjb25zdCB7IGRhdGEsIHZpc2libGVJbmRpY2VzIH0gPSBoaWRlKGFsbERhdGEpO1xuICAgIGNvbnN0IHhTY2FsZSA9IHNjYWxlVXRjKHRpbWVzZXJpZXNEb21haW4oZGF0YSksIHhSYW5nZShkaW1lbnNpb25zKSk7XG4gICAgY29uc3QgZm9ybWF0ID0geFNjYWxlLnRpY2tGb3JtYXQoKTtcbiAgICBjb25zdCB4VGlja3MgPSB4U2NhbGUudGlja3MoTWF0aC5taW4oNSwgZGF0YS54Lmxlbmd0aCkpLm1hcCh0aWNrID0+ICh7XG4gICAgICB4OiB4U2NhbGUodGljayksXG4gICAgICBsYWJlbDogZm9ybWF0KHRpY2spLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IHsgcGlwZSwgZnVsbFBpcGUgfSA9IGdldFBpcGVzKGNvbmZpZy52YWx1ZVR5cGUpO1xuICAgIGNvbnN0IHlTY2FsZSA9IHNjYWxlTGluZWFyKHlEb21haW4oZGF0YSksIHlSYW5nZShkaW1lbnNpb25zKSk7XG4gICAgY29uc3QgeVRpY2tzID0geVNjYWxlLnRpY2tzKDUpLm1hcCh0aWNrID0+ICh7XG4gICAgICB5OiB5U2NhbGUodGljayksXG4gICAgICBsYWJlbDogcGlwZS50cmFuc2Zvcm0odGljayksXG4gICAgfSkpO1xuXG4gICAgY29uc3QgY29sb3JzID0gdmlzaWJsZUluZGljZXMubWFwKFxuICAgICAgaSA9PiBjb25maWcuY29sb3JzW2kgJSBjb25maWcuY29sb3JzLmxlbmd0aF0sXG4gICAgKTtcbiAgICBjb25zdCBpbmRpY2VzID0gZGF0YS54Lm1hcCgoXywgaSkgPT4gaSk7XG4gICAgY29uc3QgbGluZXMgPSBkYXRhLnlzLm1hcCh5ID0+XG4gICAgICBsaW5lPG51bWJlcj4oXG4gICAgICAgIGkgPT4geFNjYWxlKGRhdGEueFtpXSksXG4gICAgICAgIGkgPT4geVNjYWxlKHkudmFsdWVzW2ldKSxcbiAgICAgICkoaW5kaWNlcyksXG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGhvdmVyKHBvczogeyByZWN0OiBET01SZWN0OyB4OiBudW1iZXI7IHk6IG51bWJlciB9KSB7XG4gICAgICBjb25zdCB4SW5kZXggPSBmaW5kTmVhcmVzdEluZGV4KGRhdGEueCwgeFNjYWxlLmludmVydChwb3MueCkuZ2V0VGltZSgpKTtcbiAgICAgIGNvbnN0IHggPSB4U2NhbGUoZGF0YS54W3hJbmRleF0pO1xuICAgICAgY29uc3QgdmlzaWJsZVlJbmRleCA9IGZpbmROZWFyZXN0SW5kZXgoXG4gICAgICAgIGRhdGEueXMubWFwKHkgPT4geS52YWx1ZXNbeEluZGV4XSksXG4gICAgICAgIHlTY2FsZS5pbnZlcnQocG9zLnkpLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHlJbmRleCA9IHZpc2libGVJbmRpY2VzW3Zpc2libGVZSW5kZXhdO1xuICAgICAgY29uc3QgeXMgPSBkYXRhLnlzLm1hcCh5ID0+IHlTY2FsZSh5LnZhbHVlc1t4SW5kZXhdKSk7XG5cbiAgICAgIGNvbnN0IGFuY2hvciA9IG5ldyBET01SZWN0KFxuICAgICAgICBwb3MucmVjdC54ICsgeCxcbiAgICAgICAgcG9zLnJlY3QueSArIHlzW3Zpc2libGVZSW5kZXhdLFxuICAgICAgICA4LFxuICAgICAgICAwLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHgsXG4gICAgICAgIHhJbmRleCxcbiAgICAgICAgeXMsXG4gICAgICAgIHlJbmRleCxcbiAgICAgICAgdmlzaWJsZVlJbmRleCxcbiAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICBkYXRlOiBmb3JtYXQobmV3IERhdGUoZGF0YS54W3hJbmRleF0pKSxcbiAgICAgICAgICBtZXRyaWNzOiBkYXRhLnlzXG4gICAgICAgICAgICAubWFwKCh5LCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAgICAgY29sb3I6IGNvbG9yc1tpbmRleCAlIGNvbG9ycy5sZW5ndGhdLFxuICAgICAgICAgICAgICBsYWJlbDogeS5sYWJlbCxcbiAgICAgICAgICAgICAgdmFsdWU6IGZ1bGxQaXBlLnRyYW5zZm9ybSh5LnZhbHVlc1t4SW5kZXhdKSA/PyAnLScsXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIC5maWx0ZXIoKF8sIGkpID0+IGNvbmZpZy5ncm91cGVkVG9vbHRpcCB8fCBpID09IHZpc2libGVZSW5kZXgpLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB4VGlja3MsIHlUaWNrcywgY29sb3JzLCBsaW5lcywgaG92ZXIsIGJhcnM6IFtdLCBhcmVhczogW10gfTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBhcmVhcyhcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICBhbGxEYXRhOiBEYXRhLFxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXG4gICk6IFJlbmRlcmVkQ2hhcnQge1xuICAgIGNvbnN0IHsgZGF0YTogdW5zdGFja2VkRGF0YSwgdmlzaWJsZUluZGljZXMgfSA9IGhpZGUoYWxsRGF0YSk7XG4gICAgY29uc3QgZGF0YSA9IHN0YWNrKHVuc3RhY2tlZERhdGEpO1xuICAgIGNvbnN0IHhTY2FsZSA9IHNjYWxlVXRjKHRpbWVzZXJpZXNEb21haW4oZGF0YSksIHhSYW5nZShkaW1lbnNpb25zKSk7XG4gICAgY29uc3QgZm9ybWF0ID0geFNjYWxlLnRpY2tGb3JtYXQoKTtcbiAgICBjb25zdCB4VGlja3MgPSB4U2NhbGUudGlja3MoTWF0aC5taW4oNSwgZGF0YS54Lmxlbmd0aCkpLm1hcCh0aWNrID0+ICh7XG4gICAgICB4OiB4U2NhbGUodGljayksXG4gICAgICBsYWJlbDogZm9ybWF0KHRpY2spLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IHsgcGlwZSwgZnVsbFBpcGUgfSA9IGdldFBpcGVzKGNvbmZpZy52YWx1ZVR5cGUpO1xuICAgIGNvbnN0IHlTY2FsZSA9IHNjYWxlTGluZWFyKHlEb21haW4oZGF0YSksIHlSYW5nZShkaW1lbnNpb25zKSk7XG4gICAgY29uc3QgeVRpY2tzID0geVNjYWxlLnRpY2tzKDUpLm1hcCh0aWNrID0+ICh7XG4gICAgICB5OiB5U2NhbGUodGljayksXG4gICAgICBsYWJlbDogcGlwZS50cmFuc2Zvcm0odGljayksXG4gICAgfSkpO1xuXG4gICAgY29uc3QgaW5kaWNlcyA9IGRhdGEueC5tYXAoKF8sIGkpID0+IGkpO1xuICAgIGNvbnN0IGNvbG9ycyA9IHZpc2libGVJbmRpY2VzLm1hcChcbiAgICAgIGkgPT4gY29uZmlnLmNvbG9yc1tpICUgY29uZmlnLmNvbG9ycy5sZW5ndGhdLFxuICAgICk7XG4gICAgY29uc3QgYXJlYXMgPSBkYXRhLnlzLm1hcCgoeSwgeUluZGV4KSA9PlxuICAgICAgYXJlYTxudW1iZXI+KFxuICAgICAgICBpID0+IHhTY2FsZShkYXRhLnhbaV0pLFxuICAgICAgICBpID0+IHlTY2FsZSh5SW5kZXggPT0gMCA/IDAgOiBkYXRhLnlzW3lJbmRleCAtIDFdLnZhbHVlc1tpXSksXG4gICAgICAgIGkgPT4geVNjYWxlKHkudmFsdWVzW2ldKSxcbiAgICAgICkoaW5kaWNlcyksXG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGhvdmVyKHBvczogeyByZWN0OiBET01SZWN0OyB4OiBudW1iZXI7IHk6IG51bWJlciB9KSB7XG4gICAgICBjb25zdCB4SW5kZXggPSBmaW5kTmVhcmVzdEluZGV4KGRhdGEueCwgeFNjYWxlLmludmVydChwb3MueCkuZ2V0VGltZSgpKTtcbiAgICAgIGNvbnN0IHggPSB4U2NhbGUoZGF0YS54W3hJbmRleF0pO1xuICAgICAgY29uc3QgeVZhbHVlID0geVNjYWxlLmludmVydChwb3MueSk7XG4gICAgICBsZXQgdmlzaWJsZVlJbmRleCA9IGRhdGEueXNcbiAgICAgICAgLm1hcCh5ID0+IHkudmFsdWVzW3hJbmRleF0pXG4gICAgICAgIC5maW5kSW5kZXgoeSA9PiB5ID4geVZhbHVlKTtcbiAgICAgIGlmICh2aXNpYmxlWUluZGV4ID09IC0xKSB7XG4gICAgICAgIHZpc2libGVZSW5kZXggPSBkYXRhLnlzLmxlbmd0aCAtIDE7XG4gICAgICB9XG4gICAgICBjb25zdCB5SW5kZXggPSB2aXNpYmxlSW5kaWNlc1t2aXNpYmxlWUluZGV4XTtcbiAgICAgIGNvbnN0IHlzID0gZGF0YS55cy5tYXAoeSA9PiB5U2NhbGUoeS52YWx1ZXNbeEluZGV4XSkpO1xuICAgICAgY29uc3QgcGFkZGluZyA9IDg7XG4gICAgICBjb25zdCBhbmNob3IgPSBuZXcgRE9NUmVjdChcbiAgICAgICAgcG9zLnJlY3QueCArIHgsXG4gICAgICAgIHBvcy5yZWN0LnkgKyB5c1t2aXNpYmxlWUluZGV4XSxcbiAgICAgICAgcGFkZGluZyxcbiAgICAgICAgMCxcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4LFxuICAgICAgICB4SW5kZXgsXG4gICAgICAgIHlzLFxuICAgICAgICB5SW5kZXgsXG4gICAgICAgIHZpc2libGVZSW5kZXgsXG4gICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgZGF0ZTogZm9ybWF0KG5ldyBEYXRlKHVuc3RhY2tlZERhdGEueFt4SW5kZXhdKSksXG4gICAgICAgICAgbWV0cmljczogdW5zdGFja2VkRGF0YS55c1xuICAgICAgICAgICAgLm1hcCgoeSwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICAgIGNvbG9yOiBjb2xvcnNbaW5kZXggJSBjb2xvcnMubGVuZ3RoXSxcbiAgICAgICAgICAgICAgbGFiZWw6IHkubGFiZWwsXG4gICAgICAgICAgICAgIHZhbHVlOiBmdWxsUGlwZS50cmFuc2Zvcm0oeS52YWx1ZXNbeEluZGV4XSkgPz8gJy0nLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAuZmlsdGVyKChfLCBpKSA9PiBjb25maWcuZ3JvdXBlZFRvb2x0aXAgfHwgaSA9PSB2aXNpYmxlWUluZGV4KSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgeFRpY2tzLCB5VGlja3MsIGNvbG9ycywgYXJlYXMsIGxpbmVzOiBbXSwgaG92ZXIsIGJhcnM6IFtdIH07XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gYmFycyhcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICBhbGxEYXRhOiBEYXRhLFxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXG4gICk6IFJlbmRlcmVkQ2hhcnQge1xuICAgIGNvbnN0IHsgZGF0YTogdW5zdGFja2VkRGF0YSwgdmlzaWJsZUluZGljZXMgfSA9IGhpZGUoYWxsRGF0YSk7XG4gICAgY29uc3QgZGF0YSA9IHN0YWNrKHVuc3RhY2tlZERhdGEpO1xuICAgIGNvbnN0IHsgcmFuZ2U6IHhSYW5nZSwgYmluU2l6ZSB9ID0gYmFyWFJhbmdlKGRpbWVuc2lvbnMsIGRhdGEpO1xuICAgIGNvbnN0IGhhbGZCaW5TaXplID0gYmluU2l6ZSAvIDI7XG4gICAgY29uc3QgeFNjYWxlID0gc2NhbGVVdGModGltZXNlcmllc0RvbWFpbihkYXRhKSwgeFJhbmdlKTtcbiAgICBjb25zdCBmb3JtYXQgPSB4U2NhbGUudGlja0Zvcm1hdCgpO1xuICAgIGNvbnN0IHhUaWNrcyA9IHhTY2FsZS50aWNrcyhNYXRoLm1pbig1LCBkYXRhLngubGVuZ3RoKSkubWFwKHRpY2sgPT4gKHtcbiAgICAgIHg6IHhTY2FsZSh0aWNrKSxcbiAgICAgIGxhYmVsOiBmb3JtYXQodGljayksXG4gICAgfSkpO1xuXG4gICAgY29uc3QgeyBwaXBlLCBmdWxsUGlwZSB9ID0gZ2V0UGlwZXMoY29uZmlnLnZhbHVlVHlwZSk7XG4gICAgY29uc3QgeVNjYWxlID0gc2NhbGVMaW5lYXIoeURvbWFpbihkYXRhKSwgeVJhbmdlKGRpbWVuc2lvbnMpKTtcbiAgICBjb25zdCB5VGlja3MgPSB5U2NhbGUudGlja3MoNSkubWFwKHRpY2sgPT4gKHtcbiAgICAgIHk6IHlTY2FsZSh0aWNrKSxcbiAgICAgIGxhYmVsOiBwaXBlLnRyYW5zZm9ybSh0aWNrKSxcbiAgICB9KSk7XG4gICAgY29uc3QgY29sb3JzID0gdmlzaWJsZUluZGljZXMubWFwKFxuICAgICAgaSA9PiBjb25maWcuY29sb3JzW2kgJSBjb25maWcuY29sb3JzLmxlbmd0aF0sXG4gICAgKTtcbiAgICBjb25zdCBiYXJzID0gZGF0YS55cy5tYXAoKHksIHlJbmRleCkgPT5cbiAgICAgIHkudmFsdWVzLm1hcCgodmFsdWUsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHlWYWx1ZSA9IHlTY2FsZSh2YWx1ZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgeDogeFNjYWxlKGRhdGEueFtpbmRleF0pIC0gaGFsZkJpblNpemUsXG4gICAgICAgICAgeTogeVZhbHVlLFxuICAgICAgICAgIHdpZHRoOiBiaW5TaXplLFxuICAgICAgICAgIGhlaWdodDpcbiAgICAgICAgICAgICh5SW5kZXggPT0gMFxuICAgICAgICAgICAgICA/IHlTY2FsZSgwKVxuICAgICAgICAgICAgICA6IHlTY2FsZShkYXRhLnlzW3lJbmRleCAtIDFdLnZhbHVlc1tpbmRleF0pKSAtIHlWYWx1ZSxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBob3Zlcihwb3M6IHsgcmVjdDogRE9NUmVjdDsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSkge1xuICAgICAgY29uc3QgeEluZGV4ID0gZmluZE5lYXJlc3RJbmRleChkYXRhLngsIHhTY2FsZS5pbnZlcnQocG9zLngpLmdldFRpbWUoKSk7XG4gICAgICBjb25zdCB4ID0geFNjYWxlKGRhdGEueFt4SW5kZXhdKTtcbiAgICAgIGNvbnN0IHlWYWx1ZSA9IHlTY2FsZS5pbnZlcnQocG9zLnkpO1xuICAgICAgbGV0IHZpc2libGVZSW5kZXggPSBkYXRhLnlzXG4gICAgICAgIC5tYXAoeSA9PiB5LnZhbHVlc1t4SW5kZXhdKVxuICAgICAgICAuZmluZEluZGV4KHkgPT4geSA+IHlWYWx1ZSk7XG4gICAgICBpZiAodmlzaWJsZVlJbmRleCA9PSAtMSkge1xuICAgICAgICB2aXNpYmxlWUluZGV4ID0gZGF0YS55cy5sZW5ndGggLSAxO1xuICAgICAgfVxuICAgICAgY29uc3QgeUluZGV4ID0gdmlzaWJsZUluZGljZXNbdmlzaWJsZVlJbmRleF07XG4gICAgICBjb25zdCB5cyA9IGRhdGEueXMubWFwKHkgPT4geVNjYWxlKHkudmFsdWVzW3hJbmRleF0pKTtcbiAgICAgIGNvbnN0IHBhZGRpbmcgPSA4O1xuICAgICAgY29uc3QgYW5jaG9yID0gbmV3IERPTVJlY3QoXG4gICAgICAgIHBvcy5yZWN0LnggKyBiYXJzW3Zpc2libGVZSW5kZXhdW3hJbmRleF0ueCAtIHBhZGRpbmcsXG4gICAgICAgIHBvcy5yZWN0LnkgKyB5c1t2aXNpYmxlWUluZGV4XSxcbiAgICAgICAgYmFyc1t2aXNpYmxlWUluZGV4XVt4SW5kZXhdLndpZHRoICsgcGFkZGluZyAqIDIsXG4gICAgICAgICh2aXNpYmxlWUluZGV4ID09IDAgPyB5U2NhbGUoMCkgOiB5c1t2aXNpYmxlWUluZGV4IC0gMV0pIC1cbiAgICAgICAgICB5c1t2aXNpYmxlWUluZGV4XSxcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4LFxuICAgICAgICB4SW5kZXgsXG4gICAgICAgIHlzLFxuICAgICAgICB5SW5kZXgsXG4gICAgICAgIHZpc2libGVZSW5kZXgsXG4gICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgZGF0ZTogZm9ybWF0KG5ldyBEYXRlKHVuc3RhY2tlZERhdGEueFt4SW5kZXhdKSksXG4gICAgICAgICAgbWV0cmljczogdW5zdGFja2VkRGF0YS55c1xuICAgICAgICAgICAgLm1hcCgoeSwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICAgIGNvbG9yOiBjb2xvcnNbaW5kZXggJSBjb2xvcnMubGVuZ3RoXSxcbiAgICAgICAgICAgICAgbGFiZWw6IHkubGFiZWwsXG4gICAgICAgICAgICAgIHZhbHVlOiBmdWxsUGlwZS50cmFuc2Zvcm0oeS52YWx1ZXNbeEluZGV4XSkgPz8gJy0nLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAuZmlsdGVyKChfLCBpKSA9PiBjb25maWcuZ3JvdXBlZFRvb2x0aXAgfHwgaSA9PSB2aXNpYmxlWUluZGV4KSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgeFRpY2tzLCB5VGlja3MsIGNvbG9ycywgYmFycywgbGluZXM6IFtdLCBhcmVhczogW10sIGhvdmVyIH07XG4gIH1cblxuICBjb25zdCBMRUZUX1BBRERJTkcgPSA0ODtcbiAgY29uc3QgUklHSFRfUEFERElORyA9IDI0O1xuICBjb25zdCBUT1BfUEFERElORyA9IDE2O1xuICBjb25zdCBCT1RUT01fUEFERElORyA9IDI0O1xuXG4gIGV4cG9ydCB0eXBlIERhdGEgPSB7XG4gICAgeXM6IHtcbiAgICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgICBoaWRkZW4/OiBib29sZWFuO1xuICAgICAgdmFsdWVzOiBudW1iZXJbXTtcbiAgICB9W107XG4gICAgeDogbnVtYmVyW107XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgRGltZW5zaW9ucyA9IHtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIENvbmZpZyA9IHtcbiAgICB0eXBlOiAnbGluZScgfCAnYXJlYScgfCAnYmFyJztcbiAgICBncm91cGVkVG9vbHRpcDogYm9vbGVhbjtcbiAgICBjb2xvcnM6IHN0cmluZ1tdO1xuICAgIGFsbG93TGVnZW5kVG9nZ2xlOiBib29sZWFuO1xuICAgIHplcm9TdGF0ZU1lc3NhZ2U6IHN0cmluZztcbiAgICB2YWx1ZVR5cGU6IFZhbHVlVHlwZTtcbiAgfTtcblxuICBleHBvcnQgY29uc3QgZGVmYXVsdENvbmZpZzogQ29uZmlnID0ge1xuICAgIHR5cGU6ICdsaW5lJyxcbiAgICBncm91cGVkVG9vbHRpcDogdHJ1ZSxcbiAgICBjb2xvcnM6IGRlZmF1bHRDb2xvclBhbGV0dGUsXG4gICAgYWxsb3dMZWdlbmRUb2dnbGU6IGZhbHNlLFxuICAgIHplcm9TdGF0ZU1lc3NhZ2U6ICdObyBkYXRhIHRvIGRpc3BsYXkuJyxcbiAgICB2YWx1ZVR5cGU6ICdjdXJyZW5jeScsXG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgQXJlYSA9IHtcbiAgICBwYXRoOiBzdHJpbmcgfCBudWxsO1xuICAgIGZpbGw6IHN0cmluZztcbiAgfTtcblxuICBleHBvcnQgdHlwZSBYVGljayA9IHtcbiAgICB4OiBudW1iZXI7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgfTtcblxuICBleHBvcnQgdHlwZSBZVGljayA9IHtcbiAgICB5OiBudW1iZXI7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgfTtcblxuICB0eXBlIFJlY3QgPSB7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIEJhclNlcmllcyA9IHtcbiAgICBmaWxsOiBzdHJpbmc7XG4gICAgcmVjdHM6IFJlY3RbXTtcbiAgfTtcblxuICAvLyBIb3ZlciBpcyBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSB2aWV3cG9ydCB4IGFuZCB5IGFuZCByZXR1cm5zIGEgcmljaFxuICAvLyBzZXQgb2YgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCB2YWx1ZXMgYXJlIGJlaW5nIGhvdmVyZWQgYW5kIHdoYXQgdGhlIHRvb2x0aXBcbiAgLy8gc2hvdWxkIGxvb2sgbGlrZVxuICBleHBvcnQgdHlwZSBIb3ZlciA9IChwb3M6IHsgcmVjdDogRE9NUmVjdDsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSkgPT4ge1xuICAgIC8vIHRoZSBpbmRpY2VzIGludG8gdGhlIGRhdGEgb2YgdGhlIGNsb3Nlc3QgcG9pbnRcbiAgICB4SW5kZXg6IG51bWJlcjtcbiAgICAvLyB3ZSB3YW50IHRvIGtub3cgd2hpY2ggdmlzaWJsZSB5IGluZGV4IGlzIGhvdmVyZWRcbiAgICAvLyBhbmQgd2hpY2ggYWN0dWFsIHkgaW5kZXggaXMgaG92ZXJlZFxuICAgIHlJbmRleDogbnVtYmVyO1xuICAgIHZpc2libGVZSW5kZXg6IG51bWJlcjtcblxuICAgIC8vIHRoZSB2aWV3cG9ydCB4IGFuZCB5cyBvZiB0aGUgaG92ZXJlZCBpdGVtc1xuICAgIHg6IG51bWJlcjtcbiAgICB5czogbnVtYmVyW107XG5cbiAgICB0b29sdGlwOiB7XG4gICAgICBhbmNob3I6IERPTVJlY3Q7XG4gICAgICBkYXRlOiBzdHJpbmc7XG4gICAgICBtZXRyaWNzOiB7XG4gICAgICAgIGNvbG9yOiBzdHJpbmc7XG4gICAgICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgICB9W107XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZW5kZXJlZENoYXJ0IHJlcHJlc2VudHMgYWxsIG9mIHRoZSBwYXJ0cyBvZiBhIGNoYXJ0XG4gIC8vIHRoYXQgZW5kIHVwIG9uIHNjcmVlbi4gRXZlcnkgY2hhcnQgaGFzIHggYW5kIHkgdGlja3NcbiAgLy8gYW5kIGhvdmVyIGZ1bmN0aW9uYWxpdHksIGV2ZW4gdGhvdWdoIHRoZXkgbWlnaHQgYmVcbiAgLy8gZGlmZmVyZW50IGZyb20gY2hhcnQgdG8gY2hhcnQuXG4gIHR5cGUgUmVuZGVyZWRDaGFydCA9IHtcbiAgICB4VGlja3M6IFhUaWNrW107XG4gICAgeVRpY2tzOiBZVGlja1tdO1xuICAgIGhvdmVyOiBIb3ZlcjtcbiAgICBjb2xvcnM6IHN0cmluZ1tdO1xuICAgIGxpbmVzOiAoc3RyaW5nIHwgbnVsbClbXTtcbiAgICBhcmVhczogKHN0cmluZyB8IG51bGwpW107XG4gICAgYmFyczogUmVjdFtdW107XG4gIH07XG5cbiAgZnVuY3Rpb24gdGltZXNlcmllc0RvbWFpbihkYXRhOiBEYXRhKSB7XG4gICAgcmV0dXJuIFtNYXRoLm1pbiguLi5kYXRhLngpLCBNYXRoLm1heCguLi5kYXRhLngpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHlEb21haW4oZGF0YTogRGF0YSkge1xuICAgIGNvbnN0IG1heCA9IE1hdGgubWF4KC4uLmRhdGEueXMubWFwKHkgPT4gTWF0aC5tYXgoLi4ueS52YWx1ZXMpKSk7XG4gICAgcmV0dXJuIFswLCBtYXggPT0gMCA/IDEgOiBtYXhdO1xuICB9XG5cbiAgZnVuY3Rpb24geFJhbmdlKGRpbWVuc2lvbnM6IERpbWVuc2lvbnMpIHtcbiAgICByZXR1cm4gW0xFRlRfUEFERElORywgZGltZW5zaW9ucy53aWR0aCAtIFJJR0hUX1BBRERJTkddO1xuICB9XG5cbiAgZnVuY3Rpb24gYmFyWFJhbmdlKGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsIGRhdGE6IERhdGEpIHtcbiAgICBjb25zdCBsZWZ0ID0gTEVGVF9QQURESU5HO1xuICAgIGNvbnN0IHJpZ2h0ID0gZGltZW5zaW9ucy53aWR0aCAtIFJJR0hUX1BBRERJTkc7XG4gICAgY29uc3Qgd2lkdGggPSByaWdodCAtIGxlZnQ7XG4gICAgY29uc3QgYmluU2l6ZSA9IHdpZHRoIC8gKGRhdGEueC5sZW5ndGggfHwgMSk7XG4gICAgY29uc3QgaGFsZkJpblNpemUgPSBiaW5TaXplIC8gMjtcbiAgICBjb25zdCByYW5nZSA9IFtsZWZ0ICsgaGFsZkJpblNpemUsIHJpZ2h0IC0gaGFsZkJpblNpemVdO1xuICAgIHJldHVybiB7IGJpblNpemU6IE1hdGgubWluKGJpblNpemUgKiAwLjcsIDgwKSwgcmFuZ2UgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHlSYW5nZShkaW1lbnNpb25zOiBEaW1lbnNpb25zKSB7XG4gICAgcmV0dXJuIFtkaW1lbnNpb25zLmhlaWdodCAtIEJPVFRPTV9QQURESU5HLCBUT1BfUEFERElOR107XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kTmVhcmVzdEluZGV4KHZhbHVlczogbnVtYmVyW10sIGlucHV0OiBudW1iZXIpIHtcbiAgICByZXR1cm4gdmFsdWVzLnJlZHVjZSgobmVhcmVzdEluZGV4LCB2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBNYXRoLmFicyh2YWx1ZSAtIGlucHV0KSA8IE1hdGguYWJzKHZhbHVlc1tuZWFyZXN0SW5kZXhdIC0gaW5wdXQpXG4gICAgICAgID8gaW5kZXhcbiAgICAgICAgOiBuZWFyZXN0SW5kZXg7XG4gICAgfSwgMCk7XG4gIH1cblxuICAvLyBzdGFjayByZXR1cm5zIGEgbmV3IGRhdGEgd2hlcmUgZWFjaCBzZXQgb2YgeVZhbHVlcyBpcyBzdGFja2VkXG4gIC8vIG9uIHRvcCBvZiB0aGUgcHJldmlvdXMuXG4gIGZ1bmN0aW9uIHN0YWNrKGRhdGE6IERhdGEpOiBEYXRhIHtcbiAgICBjb25zdCBzdGFja2VkOiBEYXRhID0ge1xuICAgICAgLi4uZGF0YSxcbiAgICAgIHlzOiBkYXRhLnlzLm1hcCh5ID0+ICh7IGxhYmVsOiB5LmxhYmVsLCB2YWx1ZXM6IFtdIH0pKSxcbiAgICB9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS54Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgZnJvbSA9IDA7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGRhdGEueXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY29uc3QgdG8gPSBmcm9tICsgZGF0YS55c1tqXS52YWx1ZXNbaV07XG4gICAgICAgIHN0YWNrZWQueXNbal0udmFsdWVzLnB1c2godG8pO1xuICAgICAgICBmcm9tID0gdG87XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdGFja2VkO1xuICB9XG5cbiAgLy8gaGlkZSBzdHJpcHMgb3V0IGhpZGRlbiB5IHZhbHVlcyB3aGlsZSByZXRhaW5pbmcgdGhlIG9yaWdpbmFsIGluZGljZXNcbiAgLy8gZm9yIHRoZSByZW1haW5pbmcgdmlzaWJsZSB2YWx1ZXNcbiAgZnVuY3Rpb24gaGlkZShkYXRhOiBEYXRhKTogeyBkYXRhOiBEYXRhOyB2aXNpYmxlSW5kaWNlczogbnVtYmVyW10gfSB7XG4gICAgY29uc3QgdmlzaWJsZUluZGljZXMgPSBkYXRhLnlzXG4gICAgICAubWFwKCh5LCBpKSA9PiAoeyB5LCBpIH0pKVxuICAgICAgLmZpbHRlcigoeyB5IH0pID0+ICF5LmhpZGRlbilcbiAgICAgIC5tYXAoKHsgaSB9KSA9PiBpKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogeyAuLi5kYXRhLCB5czogdmlzaWJsZUluZGljZXMubWFwKGkgPT4gZGF0YS55c1tpXSkgfSxcbiAgICAgIHZpc2libGVJbmRpY2VzLFxuICAgIH07XG4gIH1cblxuICB0eXBlIFZhbHVlVHlwZSA9ICdjb3VudCcgfCAnY3VycmVuY3knIHwgJ3BlcmNlbnRhZ2UnO1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRQaXBlcyh2YWx1ZVR5cGU6IFZhbHVlVHlwZSkge1xuICAgIHN3aXRjaCAodmFsdWVUeXBlKSB7XG4gICAgICBjYXNlICdjb3VudCc6IHtcbiAgICAgICAgY29uc3QgcGlwZSA9IG5ldyBOdW1iZXJQaXBlKCk7XG4gICAgICAgIHJldHVybiB7IHBpcGUsIGZ1bGxQaXBlOiBwaXBlIH07XG4gICAgICB9XG4gICAgICBjYXNlICdjdXJyZW5jeSc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGlwZTogbmV3IFNtYWxsQ3VycmVuY3lQaXBlKCksXG4gICAgICAgICAgZnVsbFBpcGU6IG5ldyBDdXJyZW5jeVBpcGUoJ2VuLXVzJyksXG4gICAgICAgIH07XG4gICAgICBjYXNlICdwZXJjZW50YWdlJzoge1xuICAgICAgICBjb25zdCBwaXBlID0gbmV3IFBlcmNlbnRhZ2VQaXBlKCk7XG4gICAgICAgIHJldHVybiB7IHBpcGUsIGZ1bGxQaXBlOiBwaXBlIH07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
296
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi92aXN1YWxpemF0aW9uL2NoYXJ0L2NoYXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXRDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxNQUFNLEtBQVcsS0FBSyxDQWljckI7QUFqY0QsV0FBaUIsS0FBSztJQUNQLHlCQUFtQixHQUFHO1FBQ2pDLGFBQWE7UUFDYixpQkFBaUI7UUFDakIsbUJBQW1CO1FBQ25CLFdBQVc7UUFDWCxXQUFXO1FBQ1gsV0FBVztRQUNYLFdBQVc7UUFDWCxnQ0FBZ0M7UUFDaEMsaUJBQWlCO1FBQ2pCLG1CQUFtQjtRQUNuQixXQUFXO1FBQ1gsV0FBVztRQUNYLFdBQVc7UUFDWCxXQUFXO1FBQ1gsK0JBQStCO1FBQy9CLGlCQUFpQjtRQUNqQixtQkFBbUI7UUFDbkIsV0FBVztRQUNYLFdBQVc7UUFDWCxXQUFXO1FBQ1gsV0FBVztLQUNaLENBQUM7SUFFRixTQUFnQixLQUFLLENBQUMsTUFBYyxFQUFFLElBQVUsRUFBRSxVQUFzQjtRQUN0RSxPQUFPLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTTtZQUMxQixDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJ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QjtRQUMzQyxRQUFRLFNBQVMsRUFBRTtZQUNqQixLQUFLLE9BQU8sQ0FBQyxDQUFDO2dCQUNaLE1BQU0sSUFBSSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQzlCLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO2FBQ2pDO1lBQ0QsS0FBSyxVQUFVO2dCQUNiLE9BQU87b0JBQ0wsSUFBSSxFQUFFLElBQUksaUJBQWlCLEVBQUU7b0JBQzdCLFFBQVEsRUFBRSxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUM7aUJBQ3BDLENBQUM7WUFDSixLQUFLLFlBQVksQ0FBQyxDQUFDO2dCQUNqQixNQUFNLElBQUksR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNsQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUNqQztTQUNGO0lBQ0gsQ0FBQztJQWhCZSxjQUFRLFdBZ0J2QixDQUFBO0FBQ0gsQ0FBQyxFQWpjZ0IsS0FBSyxLQUFMLEtBQUssUUFpY3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTnVtYmVyUGlwZSB9IGZyb20gJy4uLy4uL2Zvcm1hdC9waXBlcy9udW1iZXIucGlwZSc7XG5pbXBvcnQgeyBQZXJjZW50YWdlUGlwZSB9IGZyb20gJy4uLy4uL2Zvcm1hdC9waXBlcy9wZXJjZW50YWdlLnBpcGUnO1xuaW1wb3J0IHsgU21hbGxDdXJyZW5jeVBpcGUgfSBmcm9tICcuLi8uLi9mb3JtYXQvcGlwZXMvc21hbGwtY3VycmVuY3kucGlwZSc7XG5pbXBvcnQgeyBDdXJyZW5jeVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgc2NhbGVMaW5lYXIsIHNjYWxlVXRjIH0gZnJvbSAnZDMtc2NhbGUnO1xuaW1wb3J0IHsgYXJlYSwgbGluZSB9IGZyb20gJ2QzLXNoYXBlJztcbmltcG9ydCB7IGdldFRpbWVJbnRlcnZhbCwgSW50ZXJ2YWwgfSBmcm9tICcuLi9pbnRlcnZhbHMnO1xuaW1wb3J0IHsgdXRjRm9ybWF0IH0gZnJvbSAnZDMtdGltZS1mb3JtYXQnO1xuXG5leHBvcnQgbmFtZXNwYWNlIENoYXJ0IHtcbiAgZXhwb3J0IGNvbnN0IGRlZmF1bHRDb2xvclBhbGV0dGUgPSBbXG4gICAgLy9CYXNlIGNvbG9yc1xuICAgICctLWJhamEtYmxhc3QtNTAnLFxuICAgICctLXRlYWwtZGlhbW9uZC01MCcsXG4gICAgJy0tZnlyZS01MCcsXG4gICAgJy0tdGFuZy01MCcsXG4gICAgJy0tcHVycC02MCcsXG4gICAgJy0tcm9zaS03MCcsXG4gICAgLy9TaGlmdCBsaWdodGVyIGZyb20gYmFzZSBieSAtMjBcbiAgICAnLS1iYWphLWJsYXN0LTMwJyxcbiAgICAnLS10ZWFsLWRpYW1vbmQtMzAnLFxuICAgICctLWZ5cmUtMzAnLFxuICAgICctLXRhbmctMzAnLFxuICAgICctLXB1cnAtNDAnLFxuICAgICctLXJvc2ktNTAnLFxuICAgIC8vU2hpZnQgZGFya2VyIGZyb20gYmFzZSBieSArMjBcbiAgICAnLS1iYWphLWJsYXN0LTcwJyxcbiAgICAnLS10ZWFsLWRpYW1vbmQtNzAnLFxuICAgICctLWZ5cmUtNzAnLFxuICAgICctLXRhbmctNzAnLFxuICAgICctLXB1cnAtODAnLFxuICAgICctLXJvc2ktOTAnLFxuICBdO1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBjaGFydChjb25maWc6IENvbmZpZywgZGF0YTogRGF0YSwgZGltZW5zaW9uczogRGltZW5zaW9ucykge1xuICAgIHJldHVybiBjb25maWcudHlwZSA9PSAnbGluZSdcbiAgICAgID8gbGluZXMoY29uZmlnLCBkYXRhLCBkaW1lbnNpb25zKVxuICAgICAgOiBjb25maWcudHlwZSA9PSAnYXJlYSdcbiAgICAgID8gYXJlYXMoY29uZmlnLCBkYXRhLCBkaW1lbnNpb25zKVxuICAgICAgOiBiYXJzKGNvbmZpZywgZGF0YSwgZGltZW5zaW9ucyk7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGxpbmVzKFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIGFsbERhdGE6IERhdGEsXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcbiAgKTogUmVuZGVyZWRDaGFydCB7XG4gICAgY29uc3QgeyBkYXRhLCB2aXNpYmxlSW5kaWNlcyB9ID0gaGlkZShhbGxEYXRhKTtcbiAgICBjb25zdCB4U2NhbGUgPSBzY2FsZVV0Yyh0aW1lc2VyaWVzRG9tYWluKGRhdGEpLCB4UmFuZ2UoZGltZW5zaW9ucykpO1xuICAgIGNvbnN0IGZvcm1hdCA9IHhTY2FsZS50aWNrRm9ybWF0KCk7XG4gICAgY29uc3QgeFRpY2tzID0geFNjYWxlLnRpY2tzKE1hdGgubWluKDUsIGRhdGEueC5sZW5ndGgpKS5tYXAodGljayA9PiAoe1xuICAgICAgeDogeFNjYWxlKHRpY2spLFxuICAgICAgbGFiZWw6IGZvcm1hdCh0aWNrKSxcbiAgICB9KSk7XG5cbiAgICBjb25zdCB7IHBpcGUsIGZ1bGxQaXBlIH0gPSBnZXRQaXBlcyhjb25maWcudmFsdWVUeXBlKTtcbiAgICBjb25zdCB5U2NhbGUgPSBzY2FsZUxpbmVhcih5RG9tYWluKGRhdGEpLCB5UmFuZ2UoZGltZW5zaW9ucykpO1xuICAgIGNvbnN0IHlUaWNrcyA9IHlTY2FsZS50aWNrcyg1KS5tYXAodGljayA9PiAoe1xuICAgICAgeTogeVNjYWxlKHRpY2spLFxuICAgICAgbGFiZWw6IHBpcGUudHJhbnNmb3JtKHRpY2spLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IGNvbG9ycyA9IHZpc2libGVJbmRpY2VzLm1hcChcbiAgICAgIGkgPT4gY29uZmlnLmNvbG9yc1tpICUgY29uZmlnLmNvbG9ycy5sZW5ndGhdLFxuICAgICk7XG4gICAgY29uc3QgaW5kaWNlcyA9IGRhdGEueC5tYXAoKF8sIGkpID0+IGkpO1xuICAgIGNvbnN0IGxpbmVzID0gZGF0YS55cy5tYXAoeSA9PlxuICAgICAgbGluZTxudW1iZXI+KFxuICAgICAgICBpID0+IHhTY2FsZShkYXRhLnhbaV0pLFxuICAgICAgICBpID0+IHlTY2FsZSh5LnZhbHVlc1tpXSksXG4gICAgICApKGluZGljZXMpLFxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBob3Zlcihwb3M6IHsgcmVjdDogRE9NUmVjdDsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSkge1xuICAgICAgY29uc3QgeEluZGV4ID0gZmluZE5lYXJlc3RJbmRleChkYXRhLngsIHhTY2FsZS5pbnZlcnQocG9zLngpLmdldFRpbWUoKSk7XG4gICAgICBjb25zdCB4ID0geFNjYWxlKGRhdGEueFt4SW5kZXhdKTtcbiAgICAgIGNvbnN0IHZpc2libGVZSW5kZXggPSBmaW5kTmVhcmVzdEluZGV4KFxuICAgICAgICBkYXRhLnlzLm1hcCh5ID0+IHkudmFsdWVzW3hJbmRleF0pLFxuICAgICAgICB5U2NhbGUuaW52ZXJ0KHBvcy55KSxcbiAgICAgICk7XG4gICAgICBjb25zdCB5SW5kZXggPSB2aXNpYmxlSW5kaWNlc1t2aXNpYmxlWUluZGV4XTtcbiAgICAgIGNvbnN0IHlzID0gZGF0YS55cy5tYXAoeSA9PiB5U2NhbGUoeS52YWx1ZXNbeEluZGV4XSkpO1xuXG4gICAgICBjb25zdCBhbmNob3IgPSBuZXcgRE9NUmVjdChcbiAgICAgICAgcG9zLnJlY3QueCArIHgsXG4gICAgICAgIHBvcy5yZWN0LnkgKyB5c1t2aXNpYmxlWUluZGV4XSxcbiAgICAgICAgOCxcbiAgICAgICAgMCxcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4LFxuICAgICAgICB4SW5kZXgsXG4gICAgICAgIHlzLFxuICAgICAgICB5SW5kZXgsXG4gICAgICAgIHZpc2libGVZSW5kZXgsXG4gICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgZGF0ZTogdXRjRm9ybWF0KCclQiAlZCwgJVknKShuZXcgRGF0ZShkYXRhLnhbeEluZGV4XSkpLFxuICAgICAgICAgIG1ldHJpY3M6IGRhdGEueXNcbiAgICAgICAgICAgIC5tYXAoKHksIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgICBjb2xvcjogY29sb3JzW2luZGV4ICUgY29sb3JzLmxlbmd0aF0sXG4gICAgICAgICAgICAgIGxhYmVsOiB5LmxhYmVsLFxuICAgICAgICAgICAgICB2YWx1ZTogZnVsbFBpcGUudHJhbnNmb3JtKHkudmFsdWVzW3hJbmRleF0pID8/ICctJyxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgLmZpbHRlcigoXywgaSkgPT4gY29uZmlnLmdyb3VwZWRUb29sdGlwIHx8IGkgPT0gdmlzaWJsZVlJbmRleCksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHhUaWNrcywgeVRpY2tzLCBjb2xvcnMsIGxpbmVzLCBob3ZlciwgYmFyczogW10sIGFyZWFzOiBbXSB9O1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGFyZWFzKFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIGFsbERhdGE6IERhdGEsXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcbiAgKTogUmVuZGVyZWRDaGFydCB7XG4gICAgY29uc3QgeyBkYXRhOiB1bnN0YWNrZWREYXRhLCB2aXNpYmxlSW5kaWNlcyB9ID0gaGlkZShhbGxEYXRhKTtcbiAgICBjb25zdCBkYXRhID0gc3RhY2sodW5zdGFja2VkRGF0YSk7XG4gICAgY29uc3QgeFNjYWxlID0gc2NhbGVVdGModGltZXNlcmllc0RvbWFpbihkYXRhKSwgeFJhbmdlKGRpbWVuc2lvbnMpKTtcbiAgICBjb25zdCBmb3JtYXQgPSB4U2NhbGUudGlja0Zvcm1hdCgpO1xuICAgIGNvbnN0IHhUaWNrcyA9IHhTY2FsZS50aWNrcyhNYXRoLm1pbig1LCBkYXRhLngubGVuZ3RoKSkubWFwKHRpY2sgPT4gKHtcbiAgICAgIHg6IHhTY2FsZSh0aWNrKSxcbiAgICAgIGxhYmVsOiBmb3JtYXQodGljayksXG4gICAgfSkpO1xuXG4gICAgY29uc3QgeyBwaXBlLCBmdWxsUGlwZSB9ID0gZ2V0UGlwZXMoY29uZmlnLnZhbHVlVHlwZSk7XG4gICAgY29uc3QgeVNjYWxlID0gc2NhbGVMaW5lYXIoeURvbWFpbihkYXRhKSwgeVJhbmdlKGRpbWVuc2lvbnMpKTtcbiAgICBjb25zdCB5VGlja3MgPSB5U2NhbGUudGlja3MoNSkubWFwKHRpY2sgPT4gKHtcbiAgICAgIHk6IHlTY2FsZSh0aWNrKSxcbiAgICAgIGxhYmVsOiBwaXBlLnRyYW5zZm9ybSh0aWNrKSxcbiAgICB9KSk7XG5cbiAgICBjb25zdCBpbmRpY2VzID0gZGF0YS54Lm1hcCgoXywgaSkgPT4gaSk7XG4gICAgY29uc3QgY29sb3JzID0gdmlzaWJsZUluZGljZXMubWFwKFxuICAgICAgaSA9PiBjb25maWcuY29sb3JzW2kgJSBjb25maWcuY29sb3JzLmxlbmd0aF0sXG4gICAgKTtcbiAgICBjb25zdCBhcmVhcyA9IGRhdGEueXMubWFwKCh5LCB5SW5kZXgpID0+XG4gICAgICBhcmVhPG51bWJlcj4oXG4gICAgICAgIGkgPT4geFNjYWxlKGRhdGEueFtpXSksXG4gICAgICAgIGkgPT4geVNjYWxlKHlJbmRleCA9PSAwID8gMCA6IGRhdGEueXNbeUluZGV4IC0gMV0udmFsdWVzW2ldKSxcbiAgICAgICAgaSA9PiB5U2NhbGUoeS52YWx1ZXNbaV0pLFxuICAgICAgKShpbmRpY2VzKSxcbiAgICApO1xuXG4gICAgZnVuY3Rpb24gaG92ZXIocG9zOiB7IHJlY3Q6IERPTVJlY3Q7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0pIHtcbiAgICAgIGNvbnN0IHhJbmRleCA9IGZpbmROZWFyZXN0SW5kZXgoZGF0YS54LCB4U2NhbGUuaW52ZXJ0KHBvcy54KS5nZXRUaW1lKCkpO1xuICAgICAgY29uc3QgeCA9IHhTY2FsZShkYXRhLnhbeEluZGV4XSk7XG4gICAgICBjb25zdCB5VmFsdWUgPSB5U2NhbGUuaW52ZXJ0KHBvcy55KTtcbiAgICAgIGxldCB2aXNpYmxlWUluZGV4ID0gZGF0YS55c1xuICAgICAgICAubWFwKHkgPT4geS52YWx1ZXNbeEluZGV4XSlcbiAgICAgICAgLmZpbmRJbmRleCh5ID0+IHkgPiB5VmFsdWUpO1xuICAgICAgaWYgKHZpc2libGVZSW5kZXggPT0gLTEpIHtcbiAgICAgICAgdmlzaWJsZVlJbmRleCA9IGRhdGEueXMubGVuZ3RoIC0gMTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHlJbmRleCA9IHZpc2libGVJbmRpY2VzW3Zpc2libGVZSW5kZXhdO1xuICAgICAgY29uc3QgeXMgPSBkYXRhLnlzLm1hcCh5ID0+IHlTY2FsZSh5LnZhbHVlc1t4SW5kZXhdKSk7XG4gICAgICBjb25zdCBwYWRkaW5nID0gODtcbiAgICAgIGNvbnN0IGFuY2hvciA9IG5ldyBET01SZWN0KFxuICAgICAgICBwb3MucmVjdC54ICsgeCxcbiAgICAgICAgcG9zLnJlY3QueSArIHlzW3Zpc2libGVZSW5kZXhdLFxuICAgICAgICBwYWRkaW5nLFxuICAgICAgICAwLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHgsXG4gICAgICAgIHhJbmRleCxcbiAgICAgICAgeXMsXG4gICAgICAgIHlJbmRleCxcbiAgICAgICAgdmlzaWJsZVlJbmRleCxcbiAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICBkYXRlOiB1dGNGb3JtYXQoJyVCICVkLCAlWScpKG5ldyBEYXRlKHVuc3RhY2tlZERhdGEueFt4SW5kZXhdKSksXG4gICAgICAgICAgbWV0cmljczogdW5zdGFja2VkRGF0YS55c1xuICAgICAgICAgICAgLm1hcCgoeSwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICAgIGNvbG9yOiBjb2xvcnNbaW5kZXggJSBjb2xvcnMubGVuZ3RoXSxcbiAgICAgICAgICAgICAgbGFiZWw6IHkubGFiZWwsXG4gICAgICAgICAgICAgIHZhbHVlOiBmdWxsUGlwZS50cmFuc2Zvcm0oeS52YWx1ZXNbeEluZGV4XSkgPz8gJy0nLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAuZmlsdGVyKChfLCBpKSA9PiBjb25maWcuZ3JvdXBlZFRvb2x0aXAgfHwgaSA9PSB2aXNpYmxlWUluZGV4KSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgeFRpY2tzLCB5VGlja3MsIGNvbG9ycywgYXJlYXMsIGxpbmVzOiBbXSwgaG92ZXIsIGJhcnM6IFtdIH07XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gYmFycyhcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICBhbGxEYXRhOiBEYXRhLFxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXG4gICk6IFJlbmRlcmVkQ2hhcnQge1xuICAgIGNvbnN0IHsgZGF0YTogdW5zdGFja2VkRGF0YSwgdmlzaWJsZUluZGljZXMgfSA9IGhpZGUoYWxsRGF0YSk7XG4gICAgY29uc3QgZGF0YSA9IHN0YWNrKHVuc3RhY2tlZERhdGEpO1xuICAgIGNvbnN0IHsgcmFuZ2U6IHhSYW5nZSwgYmluU2l6ZSB9ID0gYmFyWFJhbmdlKGRpbWVuc2lvbnMsIGRhdGEpO1xuICAgIGNvbnN0IGhhbGZCaW5TaXplID0gYmluU2l6ZSAvIDI7XG4gICAgY29uc3QgeFNjYWxlID0gc2NhbGVVdGModGltZXNlcmllc0RvbWFpbihkYXRhKSwgeFJhbmdlKTtcbiAgICBjb25zdCBmb3JtYXQgPSB4U2NhbGUudGlja0Zvcm1hdCgpO1xuICAgIGNvbnN0IHhUaWNrcyA9IHhTY2FsZS50aWNrcyhNYXRoLm1pbig1LCBkYXRhLngubGVuZ3RoKSkubWFwKHRpY2sgPT4gKHtcbiAgICAgIHg6IHhTY2FsZSh0aWNrKSxcbiAgICAgIGxhYmVsOiBmb3JtYXQodGljayksXG4gICAgfSkpO1xuXG4gICAgY29uc3QgeyBwaXBlLCBmdWxsUGlwZSB9ID0gZ2V0UGlwZXMoY29uZmlnLnZhbHVlVHlwZSk7XG4gICAgY29uc3QgeVNjYWxlID0gc2NhbGVMaW5lYXIoeURvbWFpbihkYXRhKSwgeVJhbmdlKGRpbWVuc2lvbnMpKTtcbiAgICBjb25zdCB5VGlja3MgPSB5U2NhbGUudGlja3MoNSkubWFwKHRpY2sgPT4gKHtcbiAgICAgIHk6IHlTY2FsZSh0aWNrKSxcbiAgICAgIGxhYmVsOiBwaXBlLnRyYW5zZm9ybSh0aWNrKSxcbiAgICB9KSk7XG4gICAgY29uc3QgY29sb3JzID0gdmlzaWJsZUluZGljZXMubWFwKFxuICAgICAgaSA9PiBjb25maWcuY29sb3JzW2kgJSBjb25maWcuY29sb3JzLmxlbmd0aF0sXG4gICAgKTtcbiAgICBjb25zdCBiYXJzID0gZGF0YS55cy5tYXAoKHksIHlJbmRleCkgPT5cbiAgICAgIHkudmFsdWVzLm1hcCgodmFsdWUsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHlWYWx1ZSA9IHlTY2FsZSh2YWx1ZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgeDogeFNjYWxlKGRhdGEueFtpbmRleF0pIC0gaGFsZkJpblNpemUsXG4gICAgICAgICAgeTogeVZhbHVlLFxuICAgICAgICAgIHdpZHRoOiBiaW5TaXplLFxuICAgICAgICAgIGhlaWdodDpcbiAgICAgICAgICAgICh5SW5kZXggPT0gMFxuICAgICAgICAgICAgICA/IHlTY2FsZSgwKVxuICAgICAgICAgICAgICA6IHlTY2FsZShkYXRhLnlzW3lJbmRleCAtIDFdLnZhbHVlc1tpbmRleF0pKSAtIHlWYWx1ZSxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBob3Zlcihwb3M6IHsgcmVjdDogRE9NUmVjdDsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSkge1xuICAgICAgY29uc3QgeEluZGV4ID0gZmluZE5lYXJlc3RJbmRleChkYXRhLngsIHhTY2FsZS5pbnZlcnQocG9zLngpLmdldFRpbWUoKSk7XG4gICAgICBjb25zdCB4ID0geFNjYWxlKGRhdGEueFt4SW5kZXhdKTtcbiAgICAgIGNvbnN0IHlWYWx1ZSA9IHlTY2FsZS5pbnZlcnQocG9zLnkpO1xuICAgICAgbGV0IHZpc2libGVZSW5kZXggPSBkYXRhLnlzXG4gICAgICAgIC5tYXAoeSA9PiB5LnZhbHVlc1t4SW5kZXhdKVxuICAgICAgICAuZmluZEluZGV4KHkgPT4geSA+IHlWYWx1ZSk7XG4gICAgICBpZiAodmlzaWJsZVlJbmRleCA9PSAtMSkge1xuICAgICAgICB2aXNpYmxlWUluZGV4ID0gZGF0YS55cy5sZW5ndGggLSAxO1xuICAgICAgfVxuICAgICAgY29uc3QgeUluZGV4ID0gdmlzaWJsZUluZGljZXNbdmlzaWJsZVlJbmRleF07XG4gICAgICBjb25zdCB5cyA9IGRhdGEueXMubWFwKHkgPT4geVNjYWxlKHkudmFsdWVzW3hJbmRleF0pKTtcbiAgICAgIGNvbnN0IHBhZGRpbmcgPSA4O1xuICAgICAgY29uc3QgYW5jaG9yID0gbmV3IERPTVJlY3QoXG4gICAgICAgIHBvcy5yZWN0LnggKyBiYXJzW3Zpc2libGVZSW5kZXhdW3hJbmRleF0ueCAtIHBhZGRpbmcsXG4gICAgICAgIHBvcy5yZWN0LnkgKyB5c1t2aXNpYmxlWUluZGV4XSxcbiAgICAgICAgYmFyc1t2aXNpYmxlWUluZGV4XVt4SW5kZXhdLndpZHRoICsgcGFkZGluZyAqIDIsXG4gICAgICAgICh2aXNpYmxlWUluZGV4ID09IDAgPyB5U2NhbGUoMCkgOiB5c1t2aXNpYmxlWUluZGV4IC0gMV0pIC1cbiAgICAgICAgICB5c1t2aXNpYmxlWUluZGV4XSxcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4LFxuICAgICAgICB4SW5kZXgsXG4gICAgICAgIHlzLFxuICAgICAgICB5SW5kZXgsXG4gICAgICAgIHZpc2libGVZSW5kZXgsXG4gICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgZGF0ZTogdXRjRm9ybWF0KCclQiAlZCwgJVknKShuZXcgRGF0ZSh1bnN0YWNrZWREYXRhLnhbeEluZGV4XSkpLFxuICAgICAgICAgIG1ldHJpY3M6IHVuc3RhY2tlZERhdGEueXNcbiAgICAgICAgICAgIC5tYXAoKHksIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgICBjb2xvcjogY29sb3JzW2luZGV4ICUgY29sb3JzLmxlbmd0aF0sXG4gICAgICAgICAgICAgIGxhYmVsOiB5LmxhYmVsLFxuICAgICAgICAgICAgICB2YWx1ZTogZnVsbFBpcGUudHJhbnNmb3JtKHkudmFsdWVzW3hJbmRleF0pID8/ICctJyxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgLmZpbHRlcigoXywgaSkgPT4gY29uZmlnLmdyb3VwZWRUb29sdGlwIHx8IGkgPT0gdmlzaWJsZVlJbmRleCksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHhUaWNrcywgeVRpY2tzLCBjb2xvcnMsIGJhcnMsIGxpbmVzOiBbXSwgYXJlYXM6IFtdLCBob3ZlciB9O1xuICB9XG5cbiAgY29uc3QgTEVGVF9QQURESU5HID0gNDg7XG4gIGNvbnN0IFJJR0hUX1BBRERJTkcgPSAyNDtcbiAgY29uc3QgVE9QX1BBRERJTkcgPSAxNjtcbiAgY29uc3QgQk9UVE9NX1BBRERJTkcgPSAyNDtcblxuICBleHBvcnQgdHlwZSBEYXRhID0ge1xuICAgIHlzOiB7XG4gICAgICBsYWJlbDogc3RyaW5nO1xuICAgICAgaGlkZGVuPzogYm9vbGVhbjtcbiAgICAgIHZhbHVlczogbnVtYmVyW107XG4gICAgfVtdO1xuICAgIHg6IG51bWJlcltdO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIERpbWVuc2lvbnMgPSB7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBDb25maWcgPSB7XG4gICAgdHlwZTogJ2xpbmUnIHwgJ2FyZWEnIHwgJ2Jhcic7XG4gICAgZ3JvdXBlZFRvb2x0aXA6IGJvb2xlYW47XG4gICAgY29sb3JzOiBzdHJpbmdbXTtcbiAgICBhbGxvd0xlZ2VuZFRvZ2dsZTogYm9vbGVhbjtcbiAgICB6ZXJvU3RhdGVNZXNzYWdlOiBzdHJpbmc7XG4gICAgdmFsdWVUeXBlOiBWYWx1ZVR5cGU7XG4gIH07XG5cbiAgZXhwb3J0IGNvbnN0IGRlZmF1bHRDb25maWc6IENvbmZpZyA9IHtcbiAgICB0eXBlOiAnbGluZScsXG4gICAgZ3JvdXBlZFRvb2x0aXA6IHRydWUsXG4gICAgY29sb3JzOiBkZWZhdWx0Q29sb3JQYWxldHRlLFxuICAgIGFsbG93TGVnZW5kVG9nZ2xlOiBmYWxzZSxcbiAgICB6ZXJvU3RhdGVNZXNzYWdlOiAnTm8gZGF0YSB0byBkaXNwbGF5LicsXG4gICAgdmFsdWVUeXBlOiAnY3VycmVuY3knLFxuICB9O1xuXG4gIGV4cG9ydCB0eXBlIEFyZWEgPSB7XG4gICAgcGF0aDogc3RyaW5nIHwgbnVsbDtcbiAgICBmaWxsOiBzdHJpbmc7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgWFRpY2sgPSB7XG4gICAgeDogbnVtYmVyO1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgWVRpY2sgPSB7XG4gICAgeTogbnVtYmVyO1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gIH07XG5cbiAgdHlwZSBSZWN0ID0ge1xuICAgIHg6IG51bWJlcjtcbiAgICB5OiBudW1iZXI7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBCYXJTZXJpZXMgPSB7XG4gICAgZmlsbDogc3RyaW5nO1xuICAgIHJlY3RzOiBSZWN0W107XG4gIH07XG5cbiAgLy8gSG92ZXIgaXMgYSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgdmlld3BvcnQgeCBhbmQgeSBhbmQgcmV0dXJucyBhIHJpY2hcbiAgLy8gc2V0IG9mIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgdmFsdWVzIGFyZSBiZWluZyBob3ZlcmVkIGFuZCB3aGF0IHRoZSB0b29sdGlwXG4gIC8vIHNob3VsZCBsb29rIGxpa2VcbiAgZXhwb3J0IHR5cGUgSG92ZXIgPSAocG9zOiB7IHJlY3Q6IERPTVJlY3Q7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0pID0+IHtcbiAgICAvLyB0aGUgaW5kaWNlcyBpbnRvIHRoZSBkYXRhIG9mIHRoZSBjbG9zZXN0IHBvaW50XG4gICAgeEluZGV4OiBudW1iZXI7XG4gICAgLy8gd2Ugd2FudCB0byBrbm93IHdoaWNoIHZpc2libGUgeSBpbmRleCBpcyBob3ZlcmVkXG4gICAgLy8gYW5kIHdoaWNoIGFjdHVhbCB5IGluZGV4IGlzIGhvdmVyZWRcbiAgICB5SW5kZXg6IG51bWJlcjtcbiAgICB2aXNpYmxlWUluZGV4OiBudW1iZXI7XG5cbiAgICAvLyB0aGUgdmlld3BvcnQgeCBhbmQgeXMgb2YgdGhlIGhvdmVyZWQgaXRlbXNcbiAgICB4OiBudW1iZXI7XG4gICAgeXM6IG51bWJlcltdO1xuXG4gICAgdG9vbHRpcDoge1xuICAgICAgYW5jaG9yOiBET01SZWN0O1xuICAgICAgZGF0ZTogc3RyaW5nO1xuICAgICAgbWV0cmljczoge1xuICAgICAgICBjb2xvcjogc3RyaW5nO1xuICAgICAgICBsYWJlbDogc3RyaW5nO1xuICAgICAgICB2YWx1ZTogc3RyaW5nO1xuICAgICAgfVtdO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmVuZGVyZWRDaGFydCByZXByZXNlbnRzIGFsbCBvZiB0aGUgcGFydHMgb2YgYSBjaGFydFxuICAvLyB0aGF0IGVuZCB1cCBvbiBzY3JlZW4uIEV2ZXJ5IGNoYXJ0IGhhcyB4IGFuZCB5IHRpY2tzXG4gIC8vIGFuZCBob3ZlciBmdW5jdGlvbmFsaXR5LCBldmVuIHRob3VnaCB0aGV5IG1pZ2h0IGJlXG4gIC8vIGRpZmZlcmVudCBmcm9tIGNoYXJ0IHRvIGNoYXJ0LlxuICB0eXBlIFJlbmRlcmVkQ2hhcnQgPSB7XG4gICAgeFRpY2tzOiBYVGlja1tdO1xuICAgIHlUaWNrczogWVRpY2tbXTtcbiAgICBob3ZlcjogSG92ZXI7XG4gICAgY29sb3JzOiBzdHJpbmdbXTtcbiAgICBsaW5lczogKHN0cmluZyB8IG51bGwpW107XG4gICAgYXJlYXM6IChzdHJpbmcgfCBudWxsKVtdO1xuICAgIGJhcnM6IFJlY3RbXVtdO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHRpbWVzZXJpZXNEb21haW4oZGF0YTogRGF0YSkge1xuICAgIHJldHVybiBbTWF0aC5taW4oLi4uZGF0YS54KSwgTWF0aC5tYXgoLi4uZGF0YS54KV07XG4gIH1cblxuICBmdW5jdGlvbiB5RG9tYWluKGRhdGE6IERhdGEpIHtcbiAgICBjb25zdCBtYXggPSBNYXRoLm1heCguLi5kYXRhLnlzLm1hcCh5ID0+IE1hdGgubWF4KC4uLnkudmFsdWVzKSkpO1xuICAgIHJldHVybiBbMCwgbWF4ID09IDAgPyAxIDogbWF4XTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHhSYW5nZShkaW1lbnNpb25zOiBEaW1lbnNpb25zKSB7XG4gICAgcmV0dXJuIFtMRUZUX1BBRERJTkcsIGRpbWVuc2lvbnMud2lkdGggLSBSSUdIVF9QQURESU5HXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJhclhSYW5nZShkaW1lbnNpb25zOiBEaW1lbnNpb25zLCBkYXRhOiBEYXRhKSB7XG4gICAgY29uc3QgbGVmdCA9IExFRlRfUEFERElORztcbiAgICBjb25zdCByaWdodCA9IGRpbWVuc2lvbnMud2lkdGggLSBSSUdIVF9QQURESU5HO1xuICAgIGNvbnN0IHdpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICAgIGNvbnN0IGJpblNpemUgPSB3aWR0aCAvIChkYXRhLngubGVuZ3RoIHx8IDEpO1xuICAgIGNvbnN0IGhhbGZCaW5TaXplID0gYmluU2l6ZSAvIDI7XG4gICAgY29uc3QgcmFuZ2UgPSBbbGVmdCArIGhhbGZCaW5TaXplLCByaWdodCAtIGhhbGZCaW5TaXplXTtcbiAgICByZXR1cm4geyBiaW5TaXplOiBNYXRoLm1pbihiaW5TaXplICogMC43LCA4MCksIHJhbmdlIH07XG4gIH1cblxuICBmdW5jdGlvbiB5UmFuZ2UoZGltZW5zaW9uczogRGltZW5zaW9ucykge1xuICAgIHJldHVybiBbZGltZW5zaW9ucy5oZWlnaHQgLSBCT1RUT01fUEFERElORywgVE9QX1BBRERJTkddO1xuICB9XG5cbiAgZnVuY3Rpb24gZmluZE5lYXJlc3RJbmRleCh2YWx1ZXM6IG51bWJlcltdLCBpbnB1dDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHZhbHVlcy5yZWR1Y2UoKG5lYXJlc3RJbmRleCwgdmFsdWUsIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5hYnModmFsdWUgLSBpbnB1dCkgPCBNYXRoLmFicyh2YWx1ZXNbbmVhcmVzdEluZGV4XSAtIGlucHV0KVxuICAgICAgICA/IGluZGV4XG4gICAgICAgIDogbmVhcmVzdEluZGV4O1xuICAgIH0sIDApO1xuICB9XG5cbiAgLy8gc3RhY2sgcmV0dXJucyBhIG5ldyBkYXRhIHdoZXJlIGVhY2ggc2V0IG9mIHlWYWx1ZXMgaXMgc3RhY2tlZFxuICAvLyBvbiB0b3Agb2YgdGhlIHByZXZpb3VzLlxuICBmdW5jdGlvbiBzdGFjayhkYXRhOiBEYXRhKTogRGF0YSB7XG4gICAgY29uc3Qgc3RhY2tlZDogRGF0YSA9IHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICB5czogZGF0YS55cy5tYXAoeSA9PiAoeyBsYWJlbDogeS5sYWJlbCwgdmFsdWVzOiBbXSB9KSksXG4gICAgfTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEueC5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGZyb20gPSAwO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBkYXRhLnlzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNvbnN0IHRvID0gZnJvbSArIGRhdGEueXNbal0udmFsdWVzW2ldO1xuICAgICAgICBzdGFja2VkLnlzW2pdLnZhbHVlcy5wdXNoKHRvKTtcbiAgICAgICAgZnJvbSA9IHRvO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RhY2tlZDtcbiAgfVxuXG4gIC8vIGhpZGUgc3RyaXBzIG91dCBoaWRkZW4geSB2YWx1ZXMgd2hpbGUgcmV0YWluaW5nIHRoZSBvcmlnaW5hbCBpbmRpY2VzXG4gIC8vIGZvciB0aGUgcmVtYWluaW5nIHZpc2libGUgdmFsdWVzXG4gIGZ1bmN0aW9uIGhpZGUoZGF0YTogRGF0YSk6IHsgZGF0YTogRGF0YTsgdmlzaWJsZUluZGljZXM6IG51bWJlcltdIH0ge1xuICAgIGNvbnN0IHZpc2libGVJbmRpY2VzID0gZGF0YS55c1xuICAgICAgLm1hcCgoeSwgaSkgPT4gKHsgeSwgaSB9KSlcbiAgICAgIC5maWx0ZXIoKHsgeSB9KSA9PiAheS5oaWRkZW4pXG4gICAgICAubWFwKCh7IGkgfSkgPT4gaSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IHsgLi4uZGF0YSwgeXM6IHZpc2libGVJbmRpY2VzLm1hcChpID0+IGRhdGEueXNbaV0pIH0sXG4gICAgICB2aXNpYmxlSW5kaWNlcyxcbiAgICB9O1xuICB9XG5cbiAgdHlwZSBWYWx1ZVR5cGUgPSAnY291bnQnIHwgJ2N1cnJlbmN5JyB8ICdwZXJjZW50YWdlJztcblxuICBleHBvcnQgZnVuY3Rpb24gZ2V0UGlwZXModmFsdWVUeXBlOiBWYWx1ZVR5cGUpIHtcbiAgICBzd2l0Y2ggKHZhbHVlVHlwZSkge1xuICAgICAgY2FzZSAnY291bnQnOiB7XG4gICAgICAgIGNvbnN0IHBpcGUgPSBuZXcgTnVtYmVyUGlwZSgpO1xuICAgICAgICByZXR1cm4geyBwaXBlLCBmdWxsUGlwZTogcGlwZSB9O1xuICAgICAgfVxuICAgICAgY2FzZSAnY3VycmVuY3knOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBpcGU6IG5ldyBTbWFsbEN1cnJlbmN5UGlwZSgpLFxuICAgICAgICAgIGZ1bGxQaXBlOiBuZXcgQ3VycmVuY3lQaXBlKCdlbi11cycpLFxuICAgICAgICB9O1xuICAgICAgY2FzZSAncGVyY2VudGFnZSc6IHtcbiAgICAgICAgY29uc3QgcGlwZSA9IG5ldyBQZXJjZW50YWdlUGlwZSgpO1xuICAgICAgICByZXR1cm4geyBwaXBlLCBmdWxsUGlwZTogcGlwZSB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
@@ -4859,7 +4859,7 @@ var Chart;
4859
4859
  visibleYIndex,
4860
4860
  tooltip: {
4861
4861
  anchor,
4862
- date: format(new Date(data.x[xIndex])),
4862
+ date: utcFormat('%B %d, %Y')(new Date(data.x[xIndex])),
4863
4863
  metrics: data.ys
4864
4864
  .map((y, index) => {
4865
4865
  var _a;
@@ -4916,7 +4916,7 @@ var Chart;
4916
4916
  visibleYIndex,
4917
4917
  tooltip: {
4918
4918
  anchor,
4919
- date: format(new Date(unstackedData.x[xIndex])),
4919
+ date: utcFormat('%B %d, %Y')(new Date(unstackedData.x[xIndex])),
4920
4920
  metrics: unstackedData.ys
4921
4921
  .map((y, index) => {
4922
4922
  var _a;
@@ -4985,7 +4985,7 @@ var Chart;
4985
4985
  visibleYIndex,
4986
4986
  tooltip: {
4987
4987
  anchor,
4988
- date: format(new Date(unstackedData.x[xIndex])),
4988
+ date: utcFormat('%B %d, %Y')(new Date(unstackedData.x[xIndex])),
4989
4989
  metrics: unstackedData.ys
4990
4990
  .map((y, index) => {
4991
4991
  var _a;
@@ -5178,10 +5178,10 @@ class ChartComponent {
5178
5178
  }
5179
5179
  }
5180
5180
  ChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5181
- 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 }], 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 <riv-legend-item\n *ngFor=\"let item of d.data.ys; let i = index\"\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 </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{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}\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: "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 });
5181
+ 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 }], 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 <riv-legend-item\n *ngFor=\"let item of d.data.ys; let i = index\"\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 </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}\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: "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 });
5182
5182
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ChartComponent, decorators: [{
5183
5183
  type: Component,
5184
- 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 <riv-legend-item\n *ngFor=\"let item of d.data.ys; let i = index\"\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 </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{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}\n"] }]
5184
+ 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 <riv-legend-item\n *ngFor=\"let item of d.data.ys; let i = index\"\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 </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}\n"] }]
5185
5185
  }], propDecorators: { container: [{
5186
5186
  type: ViewChild,
5187
5187
  args: ['container']