@taiga-ui/addon-charts 2.18.0 → 2.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"__symbolic":"module","version":4,"metadata":{"smoothingAssertion":{"__symbolic":"function","parameters":["smoothingFactor"],"value":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"inRange","line":27,"character":11},"arguments":[{"__symbolic":"reference","name":"smoothingFactor"},0,100]}},"TuiLineChartComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":32,"character":1},"arguments":[{"selector":"tui-line-chart","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":36,"character":21},"member":"OnPush"},"template":"<ng-container *tuiLet=\"hovered$ | async as hovered\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"t-svg\"\n focusable=\"false\"\n preserveAspectRatio=\"none\"\n width=\"100%\"\n height=\"100%\"\n [attr.viewBox]=\"viewBox\"\n >\n <defs>\n <linearGradient x1=\"0\" x2=\"0\" y1=\"1\" y2=\"0\" [attr.id]=\"fillId\">\n <stop\n stop-color=\"currentColor\"\n offset=\"0%\"\n stop-opacity=\"0.5\"\n />\n <stop\n stop-color=\"currentColor\"\n offset=\"100%\"\n stop-opacity=\"0\"\n />\n </linearGradient>\n </defs>\n <path stroke=\"none\" [attr.fill]=\"fill\" [attr.d]=\"fillD\" />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n vector-effect=\"non-scaling-stroke\"\n stroke-width=\"2\"\n [attr.d]=\"d\"\n />\n </svg>\n <ng-container *ngIf=\"dots\">\n <div\n *ngFor=\"let point of value\"\n class=\"t-dot\"\n [style.left.%]=\"getLeft(point[0])\"\n [style.bottom.%]=\"getBottom(point[1])\"\n ></div>\n </ng-container>\n <ng-container *ngIf=\"hasHints\">\n <ng-container *ngFor=\"let point of value; let index = index\">\n <div\n *ngIf=\"value.length > 1\"\n class=\"t-column\"\n tuiHintDirection=\"top-left\"\n [class.t-column_hovered]=\"hovered === index\"\n [tuiHintHost]=\"hintHost\"\n [tuiHint]=\"computedHint && hint\"\n [tuiHintId]=\"getHintId(index)\"\n [style.left.%]=\"getLeft(getX(index))\"\n [style.width.%]=\"getWidth(index)\"\n (mouseenter)=\"onMouseEnter(index)\"\n >\n <div\n class=\"t-line t-line_vertical\"\n [style.left.%]=\"getOffset(index)\"\n ></div>\n <div\n #hintHost\n class=\"t-host\"\n [style.left.%]=\"getOffset(index)\"\n [style.bottom.%]=\"getBottom(point[1])\"\n [tuiFocusable]=\"isFocusable\"\n [tuiDescribedBy]=\"getHintId(index)\"\n ></div>\n </div>\n <div\n *ngIf=\"isFocusable\"\n class=\"t-line t-line_horizontal\"\n [style.bottom.%]=\"getBottom(point[1])\"\n ></div>\n <ng-template #hint>\n <div\n polymorpheus-outlet\n class=\"t-text\"\n [content]=\"computedHint\"\n [context]=\"getContentContext(point)\"\n ></div>\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"getHovered(hovered) as point\">\n <div\n *ngIf=\"xStringify\"\n class=\"t-hint t-hint_x\"\n [style.left.%]=\"getLeft(point[0])\"\n >\n {{xStringify(point[0])}}\n </div>\n <div\n *ngIf=\"yStringify\"\n class=\"t-hint t-hint_y\"\n [style.bottom.%]=\"getBottom(point[1])\"\n >\n {{yStringify(point[1])}}\n </div>\n </ng-container>\n</ng-container>\n","styles":[":host{display:flex;width:100%;height:100%;pointer-events:none}.t-svg{transform:scale(1,-1)}.t-column{position:absolute;top:0;height:100%;pointer-events:auto}.t-dot{position:absolute;width:.375rem;height:.375rem;border-radius:100%;background:currentColor;margin:-.1875rem;box-shadow:0 0 0 2px #fff}.t-host{position:absolute;left:50%;width:.5rem;height:.5rem;border-radius:100%;opacity:0;background:#fff;margin:-.25rem;box-shadow:0 0 0 2px currentColor,0 .0625rem .1875rem .125rem rgba(0,0,0,.1);outline:0;pointer-events:none}.column._hint_hovered .t-host,.column:hover .t-host,.column_hovered .t-host,.t-host:focus{opacity:1}.t-line{position:absolute;opacity:0;background:var(--tui-base-03)}.t-line_vertical{top:0;bottom:0;left:50%;width:.0625rem}.t-line_horizontal{z-index:-1;width:100%;height:.0625rem}:host:not([style]) .column._hint_hovered .t-line,:host:not([style]) .column._hint_hovered+.t-line,:host:not([style]) .column:hover .t-line,:host:not([style]) .column:hover+.t-line,:host[style^='z-index: 0'] .column_hovered .t-line,:host[style^='z-index: 0'] .column_hovered+.t-line{opacity:1}.t-text{white-space:pre-wrap}.t-hint{box-shadow:0 .25rem 1.5rem rgba(0,0,0,.12);font:var(--tui-font-text-xs);position:absolute;height:1.25rem;line-height:1.25rem;margin-bottom:-.625rem;padding:0 .375rem;white-space:nowrap;color:var(--tui-base-09);background:var(--tui-base-01);transform:translate3d(-50%,0,0)}.t-hint_x{bottom:0}.t-hint_y{left:0}"]}]}],"members":{"valueSetter":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":39,"character":5},"arguments":["value"]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"tuiDefaultProp","line":40,"character":5}}]}],"x":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":45,"character":5}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"tuiDefaultProp","line":46,"character":5}}]}],"y":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":49,"character":5}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"tuiDefaultProp","line":50,"character":5}}]}],"width":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":53,"character":5}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"tuiDefaultProp","line":54,"character":5}}]}],"height":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":57,"character":5}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"tuiDefaultProp","line":58,"character":5}}]}],"smoothingFactor":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":61,"character":5}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"tuiDefaultProp","line":62,"character":5},"arguments":[{"__symbolic":"reference","name":"smoothingAssertion"},"smoothingFactor must be between 0 and 100"]}]}],"hintContent":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":65,"character":5}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"tuiDefaultProp","line":66,"character":5}}]}],"xStringify":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":69,"character":5}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"tuiDefaultProp","line":70,"character":5}}]}],"yStringify":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":73,"character":5}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"tuiDefaultProp","line":74,"character":5}}]}],"filled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":77,"character":5}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"tuiDefaultProp","line":78,"character":5}}]}],"dots":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":81,"character":5}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"tuiDefaultProp","line":82,"character":5}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":92,"character":9},"arguments":[{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"TuiIdService","line":92,"character":16}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":93,"character":9},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":93,"character":16}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":94,"character":9},"arguments":[{"__symbolic":"reference","module":"@angular/common","name":"Location","line":94,"character":16}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":95,"character":9}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":96,"character":9},"arguments":[{"__symbolic":"reference","name":"TuiLineChartHintDirective"}]}]],"parameters":[{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"TuiIdService","line":92,"character":41},{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":93,"character":49},{"__symbolic":"reference","module":"@angular/common","name":"Location","line":94,"character":56},{"__symbolic":"reference","name":"TuiLineChartHintDirective"}]}],"hovered$":[{"__symbolic":"property","decorators":[{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"tuiPure","line":102,"character":5}]}],"getX":[{"__symbolic":"method"}],"getWidth":[{"__symbolic":"method"}],"getHintId":[{"__symbolic":"method"}],"getContentContext":[{"__symbolic":"method"}],"getHovered":[{"__symbolic":"method"}],"getBottom":[{"__symbolic":"method"}],"getLeft":[{"__symbolic":"method"}],"getOffset":[{"__symbolic":"method"}],"onMouseEnter":[{"__symbolic":"method"}],"onHovered":[{"__symbolic":"method"}],"onMouseLeave":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":200,"character":5},"arguments":["mouseleave"]}]}],"getD":[{"__symbolic":"method","decorators":[{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"tuiPure","line":207,"character":5}]}],"computeWidth":[{"__symbolic":"method"}]}},"TuiLineChartModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":8,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":10,"character":8},{"__symbolic":"reference","module":"@tinkoff/ng-polymorpheus","name":"PolymorpheusModule","line":11,"character":8},{"__symbolic":"reference","module":"@taiga-ui/core","name":"TuiHintModule","line":12,"character":8},{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"TuiFocusableModule","line":13,"character":8},{"__symbolic":"reference","module":"@taiga-ui/core","name":"TuiDescribedByModule","line":14,"character":8},{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"TuiLetModule","line":15,"character":8}],"declarations":[{"__symbolic":"reference","name":"TuiLineChartComponent"},{"__symbolic":"reference","name":"TuiLineChartHintDirective"}],"exports":[{"__symbolic":"reference","name":"TuiLineChartComponent"},{"__symbolic":"reference","name":"TuiLineChartHintDirective"}]}]}],"members":{}},"TuiLineChartHintDirective":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":33,"character":1},"arguments":[{"selector":"[tuiLineChartHint]","providers":[{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"TuiDestroyService","line":35,"character":16}]}]}],"members":{"hint":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":38,"character":5},"arguments":["tuiLineChartHint"]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"tuiDefaultProp","line":39,"character":5}}]}],"charts":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ContentChildren","line":42,"character":5},"arguments":[{"__symbolic":"reference","name":"TuiLineChartComponent"}]}]}],"chartsRef":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ContentChildren","line":45,"character":5},"arguments":[{"__symbolic":"reference","name":"TuiLineChartComponent"},{"read":{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":45,"character":69}}]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":49,"character":9},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":49,"character":16}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":50,"character":9},"arguments":[{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"TuiDestroyService","line":50,"character":16}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":51,"character":9},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":51,"character":16}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":52,"character":9},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":52,"character":16}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":53,"character":9},"arguments":[{"__symbolic":"reference","module":"@ng-web-apis/common","name":"ANIMATION_FRAME","line":53,"character":16}]}]],"parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":49,"character":54},{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"TuiDestroyService","line":50,"character":45},{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":51,"character":56,"context":{"typeName":"HTMLElement"},"module":"./line-chart-hint.directive"}]},{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":52,"character":32},{"__symbolic":"reference","name":"Observable","module":"rxjs","arguments":[{"__symbolic":"reference","name":"number"}]}]}],"getContext":[{"__symbolic":"method"}],"raise":[{"__symbolic":"method"}],"computeContext":[{"__symbolic":"method","decorators":[{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"tuiPure","line":93,"character":5}]}]}}},"origins":{"smoothingAssertion":"./line-chart.component","TuiLineChartComponent":"./line-chart.component","TuiLineChartModule":"./line-chart.module","TuiLineChartHintDirective":"./line-chart-hint.directive"},"importAs":"@taiga-ui/addon-charts/components/line-chart"}
1
+ {"__symbolic":"module","version":4,"metadata":{"smoothingAssertion":{"__symbolic":"function","parameters":["smoothingFactor"],"value":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"inRange","line":27,"character":11},"arguments":[{"__symbolic":"reference","name":"smoothingFactor"},0,100]}},"TuiLineChartComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":32,"character":1},"arguments":[{"selector":"tui-line-chart","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":36,"character":21},"member":"OnPush"},"template":"<ng-container *tuiLet=\"hovered$ | async as hovered\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"t-svg\"\n focusable=\"false\"\n preserveAspectRatio=\"none\"\n width=\"100%\"\n height=\"100%\"\n [attr.viewBox]=\"viewBox\"\n >\n <defs>\n <linearGradient x1=\"0\" x2=\"0\" y1=\"1\" y2=\"0\" [attr.id]=\"fillId\">\n <stop\n stop-color=\"currentColor\"\n offset=\"0%\"\n stop-opacity=\"0.5\"\n />\n <stop\n stop-color=\"currentColor\"\n offset=\"100%\"\n stop-opacity=\"0\"\n />\n </linearGradient>\n </defs>\n <path stroke=\"none\" [attr.fill]=\"fill\" [attr.d]=\"fillD\" />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n vector-effect=\"non-scaling-stroke\"\n stroke-width=\"2\"\n [attr.d]=\"d\"\n />\n </svg>\n <ng-container *ngIf=\"dots\">\n <div\n *ngFor=\"let point of value\"\n class=\"t-dot\"\n [style.left.%]=\"getLeft(point[0])\"\n [style.bottom.%]=\"getBottom(point[1])\"\n ></div>\n </ng-container>\n <ng-container *ngIf=\"hasHints\">\n <ng-container *ngFor=\"let point of value; let index = index\">\n <div\n *ngIf=\"value.length > 1 || dots\"\n class=\"t-column\"\n tuiHintDirection=\"top-left\"\n [class.t-column_hovered]=\"hovered === index\"\n [tuiHintHost]=\"hintHost\"\n [tuiHint]=\"computedHint && hint\"\n [tuiHintId]=\"getHintId(index)\"\n [style.left.%]=\"getLeft(getX(index))\"\n [style.width.%]=\"getWidth(index)\"\n (mouseenter)=\"onMouseEnter(index)\"\n >\n <div\n class=\"t-line t-line_vertical\"\n [style.left.%]=\"getOffset(index)\"\n ></div>\n <div\n #hintHost\n class=\"t-host\"\n [style.left.%]=\"getOffset(index)\"\n [style.bottom.%]=\"getBottom(point[1])\"\n [tuiFocusable]=\"isFocusable\"\n [tuiDescribedBy]=\"getHintId(index)\"\n ></div>\n </div>\n <div\n *ngIf=\"isFocusable\"\n class=\"t-line t-line_horizontal\"\n [style.bottom.%]=\"getBottom(point[1])\"\n ></div>\n <ng-template #hint>\n <div\n polymorpheus-outlet\n class=\"t-text\"\n [content]=\"computedHint\"\n [context]=\"getContentContext(point)\"\n ></div>\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"getHovered(hovered) as point\">\n <div\n *ngIf=\"xStringify\"\n class=\"t-hint t-hint_x\"\n [style.left.%]=\"getLeft(point[0])\"\n >\n {{xStringify(point[0])}}\n </div>\n <div\n *ngIf=\"yStringify\"\n class=\"t-hint t-hint_y\"\n [style.bottom.%]=\"getBottom(point[1])\"\n >\n {{yStringify(point[1])}}\n </div>\n </ng-container>\n</ng-container>\n","styles":[":host{display:flex;width:100%;height:100%;pointer-events:none}.t-svg{transform:scale(1,-1)}.t-column{position:absolute;top:0;height:100%;pointer-events:auto}.t-dot{position:absolute;width:.375rem;height:.375rem;border-radius:100%;background:currentColor;margin:-.1875rem;box-shadow:0 0 0 2px #fff}.t-host{position:absolute;left:50%;width:.5rem;height:.5rem;border-radius:100%;opacity:0;background:#fff;margin:-.25rem;box-shadow:0 0 0 2px currentColor,0 .0625rem .1875rem .125rem rgba(0,0,0,.1);outline:0;pointer-events:none}.column._hint_hovered .t-host,.column:hover .t-host,.column_hovered .t-host,.t-host:focus{opacity:1}.t-line{position:absolute;opacity:0;background:var(--tui-base-03)}.t-line_vertical{top:0;bottom:0;left:50%;width:.0625rem}.t-line_horizontal{z-index:-1;width:100%;height:.0625rem}:host:not([style]) .column._hint_hovered .t-line,:host:not([style]) .column._hint_hovered+.t-line,:host:not([style]) .column:hover .t-line,:host:not([style]) .column:hover+.t-line,:host[style^='z-index: 0'] .column_hovered .t-line,:host[style^='z-index: 0'] .column_hovered+.t-line{opacity:1}.t-text{white-space:pre-wrap}.t-hint{box-shadow:0 .25rem 1.5rem rgba(0,0,0,.12);font:var(--tui-font-text-xs);position:absolute;height:1.25rem;line-height:1.25rem;margin-bottom:-.625rem;padding:0 .375rem;white-space:nowrap;color:var(--tui-base-09);background:var(--tui-base-01);transform:translate3d(-50%,0,0)}.t-hint_x{bottom:0}.t-hint_y{left:0}"]}]}],"members":{"valueSetter":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":39,"character":5},"arguments":["value"]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"tuiDefaultProp","line":40,"character":5}}]}],"x":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":45,"character":5}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"tuiDefaultProp","line":46,"character":5}}]}],"y":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":49,"character":5}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"tuiDefaultProp","line":50,"character":5}}]}],"width":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":53,"character":5}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"tuiDefaultProp","line":54,"character":5}}]}],"height":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":57,"character":5}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"tuiDefaultProp","line":58,"character":5}}]}],"smoothingFactor":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":61,"character":5}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"tuiDefaultProp","line":62,"character":5},"arguments":[{"__symbolic":"reference","name":"smoothingAssertion"},"smoothingFactor must be between 0 and 100"]}]}],"hintContent":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":65,"character":5}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"tuiDefaultProp","line":66,"character":5}}]}],"xStringify":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":69,"character":5}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"tuiDefaultProp","line":70,"character":5}}]}],"yStringify":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":73,"character":5}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"tuiDefaultProp","line":74,"character":5}}]}],"filled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":77,"character":5}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"tuiDefaultProp","line":78,"character":5}}]}],"dots":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":81,"character":5}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"tuiDefaultProp","line":82,"character":5}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":92,"character":9},"arguments":[{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"TuiIdService","line":92,"character":16}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":93,"character":9},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":93,"character":16}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":94,"character":9},"arguments":[{"__symbolic":"reference","module":"@angular/common","name":"Location","line":94,"character":16}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":95,"character":9}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":96,"character":9},"arguments":[{"__symbolic":"reference","name":"TuiLineChartHintDirective"}]}]],"parameters":[{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"TuiIdService","line":92,"character":41},{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":93,"character":49},{"__symbolic":"reference","module":"@angular/common","name":"Location","line":94,"character":56},{"__symbolic":"reference","name":"TuiLineChartHintDirective"}]}],"hovered$":[{"__symbolic":"property","decorators":[{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"tuiPure","line":102,"character":5}]}],"getX":[{"__symbolic":"method"}],"getWidth":[{"__symbolic":"method"}],"getHintId":[{"__symbolic":"method"}],"getContentContext":[{"__symbolic":"method"}],"getHovered":[{"__symbolic":"method"}],"getBottom":[{"__symbolic":"method"}],"getLeft":[{"__symbolic":"method"}],"getOffset":[{"__symbolic":"method"}],"onMouseEnter":[{"__symbolic":"method"}],"onHovered":[{"__symbolic":"method"}],"onMouseLeave":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":204,"character":5},"arguments":["mouseleave"]}]}],"getD":[{"__symbolic":"method","decorators":[{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"tuiPure","line":215,"character":5}]}],"computeWidth":[{"__symbolic":"method"}]}},"TuiLineChartModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":8,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":10,"character":8},{"__symbolic":"reference","module":"@tinkoff/ng-polymorpheus","name":"PolymorpheusModule","line":11,"character":8},{"__symbolic":"reference","module":"@taiga-ui/core","name":"TuiHintModule","line":12,"character":8},{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"TuiFocusableModule","line":13,"character":8},{"__symbolic":"reference","module":"@taiga-ui/core","name":"TuiDescribedByModule","line":14,"character":8},{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"TuiLetModule","line":15,"character":8}],"declarations":[{"__symbolic":"reference","name":"TuiLineChartComponent"},{"__symbolic":"reference","name":"TuiLineChartHintDirective"}],"exports":[{"__symbolic":"reference","name":"TuiLineChartComponent"},{"__symbolic":"reference","name":"TuiLineChartHintDirective"}]}]}],"members":{}},"TuiLineChartHintDirective":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":33,"character":1},"arguments":[{"selector":"[tuiLineChartHint]","providers":[{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"TuiDestroyService","line":35,"character":16}]}]}],"members":{"hint":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":38,"character":5},"arguments":["tuiLineChartHint"]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"tuiDefaultProp","line":39,"character":5}}]}],"charts":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ContentChildren","line":42,"character":5},"arguments":[{"__symbolic":"reference","name":"TuiLineChartComponent"}]}]}],"chartsRef":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ContentChildren","line":45,"character":5},"arguments":[{"__symbolic":"reference","name":"TuiLineChartComponent"},{"read":{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":45,"character":69}}]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":49,"character":9},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":49,"character":16}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":50,"character":9},"arguments":[{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"TuiDestroyService","line":50,"character":16}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":51,"character":9},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":51,"character":16}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":52,"character":9},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":52,"character":16}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":53,"character":9},"arguments":[{"__symbolic":"reference","module":"@ng-web-apis/common","name":"ANIMATION_FRAME","line":53,"character":16}]}]],"parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":49,"character":54},{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"TuiDestroyService","line":50,"character":45},{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":51,"character":56,"context":{"typeName":"HTMLElement"},"module":"./line-chart-hint.directive"}]},{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":52,"character":32},{"__symbolic":"reference","name":"Observable","module":"rxjs","arguments":[{"__symbolic":"reference","name":"number"}]}]}],"getContext":[{"__symbolic":"method"}],"raise":[{"__symbolic":"method"}],"computeContext":[{"__symbolic":"method","decorators":[{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"tuiPure","line":93,"character":5}]}]}}},"origins":{"smoothingAssertion":"./line-chart.component","TuiLineChartComponent":"./line-chart.component","TuiLineChartModule":"./line-chart.module","TuiLineChartHintDirective":"./line-chart-hint.directive"},"importAs":"@taiga-ui/addon-charts/components/line-chart"}
@@ -64,6 +64,9 @@ let TuiLineChartComponent = class TuiLineChartComponent {
64
64
  return !!this.xStringify || !!this.yStringify || !!this.computedHint;
65
65
  }
66
66
  getX(index) {
67
+ if (this.isSinglePoint) {
68
+ return this.value[0][0] / 2;
69
+ }
67
70
  return index
68
71
  ? (this.value[index - 1][0] + this.value[index][0]) / 2
69
72
  : 2 * this.value[0][0] - this.getX(1);
@@ -108,6 +111,9 @@ let TuiLineChartComponent = class TuiLineChartComponent {
108
111
  this.onHovered(NaN);
109
112
  }
110
113
  }
114
+ get isSinglePoint() {
115
+ return this.value.length === 1;
116
+ }
111
117
  getD(value, smoothingFactor) {
112
118
  return value.reduce((d, point, index) => index ? `${d} ${draw(value, index, smoothingFactor)}` : `M ${point}`, '');
113
119
  }
@@ -179,7 +185,7 @@ __decorate([
179
185
  TuiLineChartComponent = __decorate([
180
186
  Component({
181
187
  selector: 'tui-line-chart',
182
- template: "<ng-container *tuiLet=\"hovered$ | async as hovered\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"t-svg\"\n focusable=\"false\"\n preserveAspectRatio=\"none\"\n width=\"100%\"\n height=\"100%\"\n [attr.viewBox]=\"viewBox\"\n >\n <defs>\n <linearGradient x1=\"0\" x2=\"0\" y1=\"1\" y2=\"0\" [attr.id]=\"fillId\">\n <stop\n stop-color=\"currentColor\"\n offset=\"0%\"\n stop-opacity=\"0.5\"\n />\n <stop\n stop-color=\"currentColor\"\n offset=\"100%\"\n stop-opacity=\"0\"\n />\n </linearGradient>\n </defs>\n <path stroke=\"none\" [attr.fill]=\"fill\" [attr.d]=\"fillD\" />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n vector-effect=\"non-scaling-stroke\"\n stroke-width=\"2\"\n [attr.d]=\"d\"\n />\n </svg>\n <ng-container *ngIf=\"dots\">\n <div\n *ngFor=\"let point of value\"\n class=\"t-dot\"\n [style.left.%]=\"getLeft(point[0])\"\n [style.bottom.%]=\"getBottom(point[1])\"\n ></div>\n </ng-container>\n <ng-container *ngIf=\"hasHints\">\n <ng-container *ngFor=\"let point of value; let index = index\">\n <div\n *ngIf=\"value.length > 1\"\n class=\"t-column\"\n tuiHintDirection=\"top-left\"\n [class.t-column_hovered]=\"hovered === index\"\n [tuiHintHost]=\"hintHost\"\n [tuiHint]=\"computedHint && hint\"\n [tuiHintId]=\"getHintId(index)\"\n [style.left.%]=\"getLeft(getX(index))\"\n [style.width.%]=\"getWidth(index)\"\n (mouseenter)=\"onMouseEnter(index)\"\n >\n <div\n class=\"t-line t-line_vertical\"\n [style.left.%]=\"getOffset(index)\"\n ></div>\n <div\n #hintHost\n class=\"t-host\"\n [style.left.%]=\"getOffset(index)\"\n [style.bottom.%]=\"getBottom(point[1])\"\n [tuiFocusable]=\"isFocusable\"\n [tuiDescribedBy]=\"getHintId(index)\"\n ></div>\n </div>\n <div\n *ngIf=\"isFocusable\"\n class=\"t-line t-line_horizontal\"\n [style.bottom.%]=\"getBottom(point[1])\"\n ></div>\n <ng-template #hint>\n <div\n polymorpheus-outlet\n class=\"t-text\"\n [content]=\"computedHint\"\n [context]=\"getContentContext(point)\"\n ></div>\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"getHovered(hovered) as point\">\n <div\n *ngIf=\"xStringify\"\n class=\"t-hint t-hint_x\"\n [style.left.%]=\"getLeft(point[0])\"\n >\n {{xStringify(point[0])}}\n </div>\n <div\n *ngIf=\"yStringify\"\n class=\"t-hint t-hint_y\"\n [style.bottom.%]=\"getBottom(point[1])\"\n >\n {{yStringify(point[1])}}\n </div>\n </ng-container>\n</ng-container>\n",
188
+ template: "<ng-container *tuiLet=\"hovered$ | async as hovered\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"t-svg\"\n focusable=\"false\"\n preserveAspectRatio=\"none\"\n width=\"100%\"\n height=\"100%\"\n [attr.viewBox]=\"viewBox\"\n >\n <defs>\n <linearGradient x1=\"0\" x2=\"0\" y1=\"1\" y2=\"0\" [attr.id]=\"fillId\">\n <stop\n stop-color=\"currentColor\"\n offset=\"0%\"\n stop-opacity=\"0.5\"\n />\n <stop\n stop-color=\"currentColor\"\n offset=\"100%\"\n stop-opacity=\"0\"\n />\n </linearGradient>\n </defs>\n <path stroke=\"none\" [attr.fill]=\"fill\" [attr.d]=\"fillD\" />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n vector-effect=\"non-scaling-stroke\"\n stroke-width=\"2\"\n [attr.d]=\"d\"\n />\n </svg>\n <ng-container *ngIf=\"dots\">\n <div\n *ngFor=\"let point of value\"\n class=\"t-dot\"\n [style.left.%]=\"getLeft(point[0])\"\n [style.bottom.%]=\"getBottom(point[1])\"\n ></div>\n </ng-container>\n <ng-container *ngIf=\"hasHints\">\n <ng-container *ngFor=\"let point of value; let index = index\">\n <div\n *ngIf=\"value.length > 1 || dots\"\n class=\"t-column\"\n tuiHintDirection=\"top-left\"\n [class.t-column_hovered]=\"hovered === index\"\n [tuiHintHost]=\"hintHost\"\n [tuiHint]=\"computedHint && hint\"\n [tuiHintId]=\"getHintId(index)\"\n [style.left.%]=\"getLeft(getX(index))\"\n [style.width.%]=\"getWidth(index)\"\n (mouseenter)=\"onMouseEnter(index)\"\n >\n <div\n class=\"t-line t-line_vertical\"\n [style.left.%]=\"getOffset(index)\"\n ></div>\n <div\n #hintHost\n class=\"t-host\"\n [style.left.%]=\"getOffset(index)\"\n [style.bottom.%]=\"getBottom(point[1])\"\n [tuiFocusable]=\"isFocusable\"\n [tuiDescribedBy]=\"getHintId(index)\"\n ></div>\n </div>\n <div\n *ngIf=\"isFocusable\"\n class=\"t-line t-line_horizontal\"\n [style.bottom.%]=\"getBottom(point[1])\"\n ></div>\n <ng-template #hint>\n <div\n polymorpheus-outlet\n class=\"t-text\"\n [content]=\"computedHint\"\n [context]=\"getContentContext(point)\"\n ></div>\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"getHovered(hovered) as point\">\n <div\n *ngIf=\"xStringify\"\n class=\"t-hint t-hint_x\"\n [style.left.%]=\"getLeft(point[0])\"\n >\n {{xStringify(point[0])}}\n </div>\n <div\n *ngIf=\"yStringify\"\n class=\"t-hint t-hint_y\"\n [style.bottom.%]=\"getBottom(point[1])\"\n >\n {{yStringify(point[1])}}\n </div>\n </ng-container>\n</ng-container>\n",
183
189
  changeDetection: ChangeDetectionStrategy.OnPush,
184
190
  styles: [":host{display:flex;width:100%;height:100%;pointer-events:none}.t-svg{transform:scale(1,-1)}.t-column{position:absolute;top:0;height:100%;pointer-events:auto}.t-dot{position:absolute;width:.375rem;height:.375rem;border-radius:100%;background:currentColor;margin:-.1875rem;box-shadow:0 0 0 2px #fff}.t-host{position:absolute;left:50%;width:.5rem;height:.5rem;border-radius:100%;opacity:0;background:#fff;margin:-.25rem;box-shadow:0 0 0 2px currentColor,0 .0625rem .1875rem .125rem rgba(0,0,0,.1);outline:0;pointer-events:none}.column._hint_hovered .t-host,.column:hover .t-host,.column_hovered .t-host,.t-host:focus{opacity:1}.t-line{position:absolute;opacity:0;background:var(--tui-base-03)}.t-line_vertical{top:0;bottom:0;left:50%;width:.0625rem}.t-line_horizontal{z-index:-1;width:100%;height:.0625rem}:host:not([style]) .column._hint_hovered .t-line,:host:not([style]) .column._hint_hovered+.t-line,:host:not([style]) .column:hover .t-line,:host:not([style]) .column:hover+.t-line,:host[style^='z-index: 0'] .column_hovered .t-line,:host[style^='z-index: 0'] .column_hovered+.t-line{opacity:1}.t-text{white-space:pre-wrap}.t-hint{box-shadow:0 .25rem 1.5rem rgba(0,0,0,.12);font:var(--tui-font-text-xs);position:absolute;height:1.25rem;line-height:1.25rem;margin-bottom:-.625rem;padding:0 .375rem;white-space:nowrap;color:var(--tui-base-09);background:var(--tui-base-01);transform:translate3d(-50%,0,0)}.t-hint_x{bottom:0}.t-hint_y{left:0}"]
185
191
  }),
@@ -190,4 +196,4 @@ TuiLineChartComponent = __decorate([
190
196
  __param(3, Inject(TuiLineChartHintDirective))
191
197
  ], TuiLineChartComponent);
192
198
  export { TuiLineChartComponent };
193
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1jaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdGFpZ2EtdWkvYWRkb24tY2hhcnRzL2NvbXBvbmVudHMvbGluZS1jaGFydC8iLCJzb3VyY2VzIjpbImxpbmUtY2hhcnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFFBQVEsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDbEQsT0FBTyxFQUNILE9BQU8sRUFDUCxzQkFBc0IsRUFDdEIsY0FBYyxFQUNkLFlBQVksRUFDWixPQUFPLEVBQ1AsZ0JBQWdCLEVBQ2hCLGdCQUFnQixHQUNuQixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQWEsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBRXRFLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxlQUF1QjtJQUN0RCxPQUFPLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzVDLENBQUM7QUFFRCxNQUFNLGlCQUFpQixHQUFHLDJDQUEyQyxDQUFDO0FBUXRFLElBQWEscUJBQXFCLEdBQWxDLE1BQWEscUJBQXFCO0lBcUQ5QixZQUMwQixTQUF1QixFQUNaLE1BQWMsRUFDWixXQUFxQixFQUd2QyxhQUErQztRQUovQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ1osZ0JBQVcsR0FBWCxXQUFXLENBQVU7UUFHdkMsa0JBQWEsR0FBYixhQUFhLENBQWtDO1FBbERwRSxNQUFDLEdBQUcsQ0FBQyxDQUFDO1FBSU4sTUFBQyxHQUFHLENBQUMsQ0FBQztRQUlOLFVBQUssR0FBRyxDQUFDLENBQUM7UUFJVixXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBSVgsb0JBQWUsR0FBRyxDQUFDLENBQUM7UUFJcEIsZ0JBQVcsR0FBMEQsRUFBRSxDQUFDO1FBSXhFLGVBQVUsR0FBb0MsSUFBSSxDQUFDO1FBSW5ELGVBQVUsR0FBb0MsSUFBSSxDQUFDO1FBSW5ELFdBQU0sR0FBRyxLQUFLLENBQUM7UUFJZixTQUFJLEdBQUcsS0FBSyxDQUFDO1FBRWIsVUFBSyxHQUE0QixFQUFFLENBQUM7UUFFbkIsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7UUFZL0MsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQTNERCxJQUFJLFdBQVcsQ0FBQyxLQUE4QjtRQUMxQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBNERELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ04sT0FBTyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQ2pELENBQUM7SUFFRCxJQUFJLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQyxNQUFNO1lBQ2QsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLElBQy9ELElBQUksQ0FBQyxNQUNULEdBQUc7WUFDTCxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDUCxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzlELENBQUM7SUFFRCxJQUFJLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELElBQUksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQ3BCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDcEUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVELElBQUksWUFBWTtRQUdaLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDM0UsQ0FBQztJQUVELElBQUksV0FBVztRQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDaEQsQ0FBQztJQUVELElBQUksUUFBUTtRQUNSLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDekUsQ0FBQztJQUVELElBQUksQ0FBQyxLQUFhO1FBQ2QsT0FBTyxLQUFLO1lBQ1IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDdkQsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFhO1FBQ2xCLE9BQU8sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDekQsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFhO1FBQ25CLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRCxpQkFBaUIsQ0FDYixTQUFtQjtRQUluQixPQUFPLElBQUksQ0FBQyxhQUFhO1lBQ3JCLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLENBQUM7WUFDcEUsQ0FBQyxDQUFDLEVBQUMsU0FBUyxFQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVELFVBQVUsQ0FBQyxPQUFlO1FBQ3RCLG1GQUFtRjtRQUNuRixPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNsRSxDQUFDO0lBRUQsU0FBUyxDQUFDLENBQVM7UUFDZixPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDOUMsQ0FBQztJQUVELE9BQU8sQ0FBQyxDQUFTO1FBQ2IsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQzdDLENBQUM7SUFFRCxTQUFTLENBQUMsQ0FBUztRQUNmLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFhO1FBQ3RCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNwQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDekM7YUFBTTtZQUNILElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDekI7SUFDTCxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQWE7UUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUdELFlBQVk7UUFDUixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZCO0lBQ0wsQ0FBQztJQUdPLElBQUksQ0FBQyxLQUE4QixFQUFFLGVBQXVCO1FBQ2hFLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FDZixDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDaEIsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRSxFQUN4RSxFQUFFLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFTyxZQUFZLENBQUMsS0FBYTtRQUM5QixPQUFPLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEQsQ0FBQztDQUNKLENBQUE7O1lBakl3QyxZQUFZLHVCQUE1QyxNQUFNLFNBQUMsWUFBWTtZQUNxQixNQUFNLHVCQUE5QyxNQUFNLFNBQUMsTUFBTTtZQUNrQyxRQUFRLHVCQUF2RCxNQUFNLFNBQUMsUUFBUTtZQUdnQix5QkFBeUIsdUJBRnhELFFBQVEsWUFDUixNQUFNLFNBQUMseUJBQXlCOztBQXZEckM7SUFGQyxLQUFLLENBQUMsT0FBTyxDQUFDO0lBQ2QsY0FBYyxFQUFFO3dEQUdoQjtBQUlEO0lBRkMsS0FBSyxFQUFFO0lBQ1AsY0FBYyxFQUFFO2dEQUNYO0FBSU47SUFGQyxLQUFLLEVBQUU7SUFDUCxjQUFjLEVBQUU7Z0RBQ1g7QUFJTjtJQUZDLEtBQUssRUFBRTtJQUNQLGNBQWMsRUFBRTtvREFDUDtBQUlWO0lBRkMsS0FBSyxFQUFFO0lBQ1AsY0FBYyxFQUFFO3FEQUNOO0FBSVg7SUFGQyxLQUFLLEVBQUU7SUFDUCxjQUFjLENBQUMsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUM7OERBQ2xDO0FBSXBCO0lBRkMsS0FBSyxFQUFFO0lBQ1AsY0FBYyxFQUFFOzBEQUN1RDtBQUl4RTtJQUZDLEtBQUssRUFBRTtJQUNQLGNBQWMsRUFBRTt5REFDa0M7QUFJbkQ7SUFGQyxLQUFLLEVBQUU7SUFDUCxjQUFjLEVBQUU7eURBQ2tDO0FBSW5EO0lBRkMsS0FBSyxFQUFFO0lBQ1AsY0FBYyxFQUFFO3FEQUNGO0FBSWY7SUFGQyxLQUFLLEVBQUU7SUFDUCxjQUFjLEVBQUU7bURBQ0o7QUFvQmI7SUFEQyxPQUFPO3FEQUdQO0FBZ0dEO0lBREMsWUFBWSxDQUFDLFlBQVksQ0FBQzt5REFLMUI7QUFHRDtJQURDLE9BQU87aURBT1A7QUFoTFEscUJBQXFCO0lBTmpDLFNBQVMsQ0FBQztRQUNQLFFBQVEsRUFBRSxnQkFBZ0I7UUFDMUIsKzlHQUF5QztRQUV6QyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7S0FDbEQsQ0FBQztJQXVETyxXQUFBLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUNwQixXQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNkLFdBQUEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ2hCLFdBQUEsUUFBUSxFQUFFLENBQUE7SUFDVixXQUFBLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFBO0dBMUQ3QixxQkFBcUIsQ0F1TGpDO1NBdkxZLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TG9jYXRpb259IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBPcHRpb25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2RyYXd9IGZyb20gJ0B0YWlnYS11aS9hZGRvbi1jaGFydHMvdXRpbHMnO1xuaW1wb3J0IHtcbiAgICBpblJhbmdlLFxuICAgIFR1aUNvbnRleHRXaXRoSW1wbGljaXQsXG4gICAgdHVpRGVmYXVsdFByb3AsXG4gICAgVHVpSWRTZXJ2aWNlLFxuICAgIHR1aVB1cmUsXG4gICAgVHVpU3RyaW5nSGFuZGxlcixcbiAgICB0dWlab25lT3B0aW1pemVkLFxufSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7VHVpUG9pbnR9IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7UG9seW1vcnBoZXVzQ29udGVudH0gZnJvbSAnQHRpbmtvZmYvbmctcG9seW1vcnBoZXVzJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2Rpc3RpbmN0VW50aWxDaGFuZ2VkfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1R1aUxpbmVDaGFydEhpbnREaXJlY3RpdmV9IGZyb20gJy4vbGluZS1jaGFydC1oaW50LmRpcmVjdGl2ZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzbW9vdGhpbmdBc3NlcnRpb24oc21vb3RoaW5nRmFjdG9yOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaW5SYW5nZShzbW9vdGhpbmdGYWN0b3IsIDAsIDEwMCk7XG59XG5cbmNvbnN0IFNNT09USElOR19NRVNTQUdFID0gJ3Ntb290aGluZ0ZhY3RvciBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMTAwJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0dWktbGluZS1jaGFydCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xpbmUtY2hhcnQudGVtcGxhdGUuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vbGluZS1jaGFydC5zdHlsZS5sZXNzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFR1aUxpbmVDaGFydENvbXBvbmVudCB7XG4gICAgQElucHV0KCd2YWx1ZScpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICBzZXQgdmFsdWVTZXR0ZXIodmFsdWU6IFJlYWRvbmx5QXJyYXk8VHVpUG9pbnQ+KSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZS5maWx0ZXIoaXRlbSA9PiAhaXRlbS5zb21lKGlzTmFOKSk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIHggPSAwO1xuXG4gICAgQElucHV0KClcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIHkgPSAwO1xuXG4gICAgQElucHV0KClcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIHdpZHRoID0gMDtcblxuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICBoZWlnaHQgPSAwO1xuXG4gICAgQElucHV0KClcbiAgICBAdHVpRGVmYXVsdFByb3Aoc21vb3RoaW5nQXNzZXJ0aW9uLCBTTU9PVEhJTkdfTUVTU0FHRSlcbiAgICBzbW9vdGhpbmdGYWN0b3IgPSAwO1xuXG4gICAgQElucHV0KClcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIGhpbnRDb250ZW50OiBQb2x5bW9ycGhldXNDb250ZW50PFR1aUNvbnRleHRXaXRoSW1wbGljaXQ8VHVpUG9pbnQ+PiA9ICcnO1xuXG4gICAgQElucHV0KClcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIHhTdHJpbmdpZnk6IFR1aVN0cmluZ0hhbmRsZXI8bnVtYmVyPiB8IG51bGwgPSBudWxsO1xuXG4gICAgQElucHV0KClcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIHlTdHJpbmdpZnk6IFR1aVN0cmluZ0hhbmRsZXI8bnVtYmVyPiB8IG51bGwgPSBudWxsO1xuXG4gICAgQElucHV0KClcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIGZpbGxlZCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIGRvdHMgPSBmYWxzZTtcblxuICAgIHZhbHVlOiBSZWFkb25seUFycmF5PFR1aVBvaW50PiA9IFtdO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaG92ZXJlZCQgPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGF1dG9JZFN0cmluZzogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoVHVpSWRTZXJ2aWNlKSBpZFNlcnZpY2U6IFR1aUlkU2VydmljZSxcbiAgICAgICAgQEluamVjdChOZ1pvbmUpIHByaXZhdGUgcmVhZG9ubHkgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIEBJbmplY3QoTG9jYXRpb24pIHByaXZhdGUgcmVhZG9ubHkgbG9jYXRpb25SZWY6IExvY2F0aW9uLFxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBASW5qZWN0KFR1aUxpbmVDaGFydEhpbnREaXJlY3RpdmUpXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaGludERpcmVjdGl2ZTogVHVpTGluZUNoYXJ0SGludERpcmVjdGl2ZSB8IG51bGwsXG4gICAgKSB7XG4gICAgICAgIHRoaXMuYXV0b0lkU3RyaW5nID0gaWRTZXJ2aWNlLmdlbmVyYXRlKCk7XG4gICAgfVxuXG4gICAgQHR1aVB1cmVcbiAgICBnZXQgaG92ZXJlZCQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hvdmVyZWQkLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdHVpWm9uZU9wdGltaXplZCh0aGlzLm5nWm9uZSkpO1xuICAgIH1cblxuICAgIGdldCBmaWxsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICd0dWktbGluZS1jaGFydC0nICsgdGhpcy5hdXRvSWRTdHJpbmc7XG4gICAgfVxuXG4gICAgZ2V0IGZpbGwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsbGVkXG4gICAgICAgICAgICA/IGB1cmwoJHt0aGlzLmxvY2F0aW9uUmVmLnByZXBhcmVFeHRlcm5hbFVybCh0aGlzLmxvY2F0aW9uUmVmLnBhdGgoKSl9IyR7XG4gICAgICAgICAgICAgICAgICB0aGlzLmZpbGxJZFxuICAgICAgICAgICAgICB9KWBcbiAgICAgICAgICAgIDogJ25vbmUnO1xuICAgIH1cblxuICAgIGdldCB2aWV3Qm94KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLnh9ICR7dGhpcy55fSAke3RoaXMud2lkdGh9ICR7dGhpcy5oZWlnaHR9YDtcbiAgICB9XG5cbiAgICBnZXQgZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREKHRoaXMudmFsdWUsIHRoaXMuc21vb3RoaW5nRmFjdG9yKTtcbiAgICB9XG5cbiAgICBnZXQgZmlsbEQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUubGVuZ3RoXG4gICAgICAgICAgICA/IHRoaXMuZCArIGBWICR7dGhpcy55fSBIICR7dGhpcy52YWx1ZVswXVswXX0gViAke3RoaXMudmFsdWVbMF1bMV19YFxuICAgICAgICAgICAgOiB0aGlzLmQ7XG4gICAgfVxuXG4gICAgZ2V0IGNvbXB1dGVkSGludCgpOlxuICAgICAgICB8IFBvbHltb3JwaGV1c0NvbnRlbnQ8VHVpQ29udGV4dFdpdGhJbXBsaWNpdDxUdWlQb2ludD4+XG4gICAgICAgIHwgUG9seW1vcnBoZXVzQ29udGVudDxUdWlDb250ZXh0V2l0aEltcGxpY2l0PFJlYWRvbmx5QXJyYXk8VHVpUG9pbnQ+Pj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5oaW50RGlyZWN0aXZlID8gdGhpcy5oaW50RGlyZWN0aXZlLmhpbnQgOiB0aGlzLmhpbnRDb250ZW50O1xuICAgIH1cblxuICAgIGdldCBpc0ZvY3VzYWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmhpbnREaXJlY3RpdmUgJiYgdGhpcy5oYXNIaW50cztcbiAgICB9XG5cbiAgICBnZXQgaGFzSGludHMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMueFN0cmluZ2lmeSB8fCAhIXRoaXMueVN0cmluZ2lmeSB8fCAhIXRoaXMuY29tcHV0ZWRIaW50O1xuICAgIH1cblxuICAgIGdldFgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBpbmRleFxuICAgICAgICAgICAgPyAodGhpcy52YWx1ZVtpbmRleCAtIDFdWzBdICsgdGhpcy52YWx1ZVtpbmRleF1bMF0pIC8gMlxuICAgICAgICAgICAgOiAyICogdGhpcy52YWx1ZVswXVswXSAtIHRoaXMuZ2V0WCgxKTtcbiAgICB9XG5cbiAgICBnZXRXaWR0aChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuICgxMDAgKiB0aGlzLmNvbXB1dGVXaWR0aChpbmRleCkpIC8gdGhpcy53aWR0aDtcbiAgICB9XG5cbiAgICBnZXRIaW50SWQoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmF1dG9JZFN0cmluZ31fJHtpbmRleH1gO1xuICAgIH1cblxuICAgIGdldENvbnRlbnRDb250ZXh0KFxuICAgICAgICAkaW1wbGljaXQ6IFR1aVBvaW50LFxuICAgICk6XG4gICAgICAgIHwgVHVpQ29udGV4dFdpdGhJbXBsaWNpdDxUdWlQb2ludD5cbiAgICAgICAgfCBUdWlDb250ZXh0V2l0aEltcGxpY2l0PFJlYWRvbmx5QXJyYXk8VHVpUG9pbnQ+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmhpbnREaXJlY3RpdmVcbiAgICAgICAgICAgID8gdGhpcy5oaW50RGlyZWN0aXZlLmdldENvbnRleHQodGhpcy52YWx1ZS5pbmRleE9mKCRpbXBsaWNpdCksIHRoaXMpXG4gICAgICAgICAgICA6IHskaW1wbGljaXR9O1xuICAgIH1cblxuICAgIGdldEhvdmVyZWQoaG92ZXJlZDogbnVtYmVyKTogVHVpUG9pbnQgfCBudWxsIHtcbiAgICAgICAgLy8gVGhpcyBjaGVja3MgZm9yIE5hTiBhbmQgbnVsbCB0b28gc2luY2UgYXN5bmMgcGlwZSByZXR1cm5zIG51bGwgYmVmb3JlIGZpcnN0IGl0ZW1cbiAgICAgICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIoaG92ZXJlZCkgPyB0aGlzLnZhbHVlW2hvdmVyZWRdIDogbnVsbDtcbiAgICB9XG5cbiAgICBnZXRCb3R0b20oeTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuICgxMDAgKiAoeSAtIHRoaXMueSkpIC8gdGhpcy5oZWlnaHQ7XG4gICAgfVxuXG4gICAgZ2V0TGVmdCh4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gKDEwMCAqICh4IC0gdGhpcy54KSkgLyB0aGlzLndpZHRoO1xuICAgIH1cblxuICAgIGdldE9mZnNldCh4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gKDEwMCAqICh0aGlzLnZhbHVlW3hdWzBdIC0gdGhpcy5nZXRYKHgpKSkgLyB0aGlzLmNvbXB1dGVXaWR0aCh4KTtcbiAgICB9XG5cbiAgICBvbk1vdXNlRW50ZXIoaW5kZXg6IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5oaW50RGlyZWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLmhpbnREaXJlY3RpdmUucmFpc2UoaW5kZXgsIHRoaXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vbkhvdmVyZWQoaW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Ib3ZlcmVkKGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5faG92ZXJlZCQubmV4dChpbmRleCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScpXG4gICAgb25Nb3VzZUxlYXZlKCkge1xuICAgICAgICBpZiAoIXRoaXMuaGludERpcmVjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5vbkhvdmVyZWQoTmFOKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEB0dWlQdXJlXG4gICAgcHJpdmF0ZSBnZXREKHZhbHVlOiBSZWFkb25seUFycmF5PFR1aVBvaW50Piwgc21vb3RoaW5nRmFjdG9yOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdmFsdWUucmVkdWNlKFxuICAgICAgICAgICAgKGQsIHBvaW50LCBpbmRleCkgPT5cbiAgICAgICAgICAgICAgICBpbmRleCA/IGAke2R9ICR7ZHJhdyh2YWx1ZSwgaW5kZXgsIHNtb290aGluZ0ZhY3Rvcil9YCA6IGBNICR7cG9pbnR9YCxcbiAgICAgICAgICAgICcnLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29tcHV0ZVdpZHRoKGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gaW5kZXggPT09IHRoaXMudmFsdWUubGVuZ3RoIC0gMVxuICAgICAgICAgICAgPyAyICogKHRoaXMudmFsdWVbaW5kZXhdWzBdIC0gdGhpcy5nZXRYKGluZGV4KSlcbiAgICAgICAgICAgIDogdGhpcy5nZXRYKGluZGV4ICsgMSkgLSB0aGlzLmdldFgoaW5kZXgpO1xuICAgIH1cbn1cbiJdfQ==
199
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1jaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdGFpZ2EtdWkvYWRkb24tY2hhcnRzL2NvbXBvbmVudHMvbGluZS1jaGFydC8iLCJzb3VyY2VzIjpbImxpbmUtY2hhcnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFFBQVEsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDbEQsT0FBTyxFQUNILE9BQU8sRUFDUCxzQkFBc0IsRUFDdEIsY0FBYyxFQUNkLFlBQVksRUFDWixPQUFPLEVBQ1AsZ0JBQWdCLEVBQ2hCLGdCQUFnQixHQUNuQixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQWEsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBRXRFLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxlQUF1QjtJQUN0RCxPQUFPLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzVDLENBQUM7QUFFRCxNQUFNLGlCQUFpQixHQUFHLDJDQUEyQyxDQUFDO0FBUXRFLElBQWEscUJBQXFCLEdBQWxDLE1BQWEscUJBQXFCO0lBcUQ5QixZQUMwQixTQUF1QixFQUNaLE1BQWMsRUFDWixXQUFxQixFQUd2QyxhQUErQztRQUovQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ1osZ0JBQVcsR0FBWCxXQUFXLENBQVU7UUFHdkMsa0JBQWEsR0FBYixhQUFh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O0lBRkMsS0FBSyxFQUFFO0lBQ1AsY0FBYyxDQUFDLGtCQUFrQixFQUFFLGlCQUFpQixDQUFDOzhEQUNsQztBQUlwQjtJQUZDLEtBQUssRUFBRTtJQUNQLGNBQWMsRUFBRTswREFDdUQ7QUFJeEU7SUFGQyxLQUFLLEVBQUU7SUFDUCxjQUFjLEVBQUU7eURBQ2tDO0FBSW5EO0lBRkMsS0FBSyxFQUFFO0lBQ1AsY0FBYyxFQUFFO3lEQUNrQztBQUluRDtJQUZDLEtBQUssRUFBRTtJQUNQLGNBQWMsRUFBRTtxREFDRjtBQUlmO0lBRkMsS0FBSyxFQUFFO0lBQ1AsY0FBYyxFQUFFO21EQUNKO0FBb0JiO0lBREMsT0FBTztxREFHUDtBQW9HRDtJQURDLFlBQVksQ0FBQyxZQUFZLENBQUM7eURBSzFCO0FBT0Q7SUFEQyxPQUFPO2lEQU9QO0FBeExRLHFCQUFxQjtJQU5qQyxTQUFTLENBQUM7UUFDUCxRQUFRLEVBQUUsZ0JBQWdCO1FBQzFCLHUrR0FBeUM7UUFFekMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O0tBQ2xELENBQUM7SUF1RE8sV0FBQSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUE7SUFDcEIsV0FBQSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDZCxXQUFBLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNoQixXQUFBLFFBQVEsRUFBRSxDQUFBO0lBQ1YsV0FBQSxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQTtHQTFEN0IscUJBQXFCLENBK0xqQztTQS9MWSxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0xvY2F0aW9ufSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT3B0aW9uYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtkcmF3fSBmcm9tICdAdGFpZ2EtdWkvYWRkb24tY2hhcnRzL3V0aWxzJztcbmltcG9ydCB7XG4gICAgaW5SYW5nZSxcbiAgICBUdWlDb250ZXh0V2l0aEltcGxpY2l0LFxuICAgIHR1aURlZmF1bHRQcm9wLFxuICAgIFR1aUlkU2VydmljZSxcbiAgICB0dWlQdXJlLFxuICAgIFR1aVN0cmluZ0hhbmRsZXIsXG4gICAgdHVpWm9uZU9wdGltaXplZCxcbn0gZnJvbSAnQHRhaWdhLXVpL2Nkayc7XG5pbXBvcnQge1R1aVBvaW50fSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQge1BvbHltb3JwaGV1c0NvbnRlbnR9IGZyb20gJ0B0aW5rb2ZmL25nLXBvbHltb3JwaGV1cyc7XG5pbXBvcnQge09ic2VydmFibGUsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtkaXN0aW5jdFVudGlsQ2hhbmdlZH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtUdWlMaW5lQ2hhcnRIaW50RGlyZWN0aXZlfSBmcm9tICcuL2xpbmUtY2hhcnQtaGludC5kaXJlY3RpdmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gc21vb3RoaW5nQXNzZXJ0aW9uKHNtb290aGluZ0ZhY3RvcjogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGluUmFuZ2Uoc21vb3RoaW5nRmFjdG9yLCAwLCAxMDApO1xufVxuXG5jb25zdCBTTU9PVEhJTkdfTUVTU0FHRSA9ICdzbW9vdGhpbmdGYWN0b3IgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEwMCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndHVpLWxpbmUtY2hhcnQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9saW5lLWNoYXJ0LnRlbXBsYXRlLmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2xpbmUtY2hhcnQuc3R5bGUubGVzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUdWlMaW5lQ2hhcnRDb21wb25lbnQge1xuICAgIEBJbnB1dCgndmFsdWUnKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgc2V0IHZhbHVlU2V0dGVyKHZhbHVlOiBSZWFkb25seUFycmF5PFR1aVBvaW50Pikge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWUuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uc29tZShpc05hTikpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICB4ID0gMDtcblxuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICB5ID0gMDtcblxuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICB3aWR0aCA9IDA7XG5cbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgaGVpZ2h0ID0gMDtcblxuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKHNtb290aGluZ0Fzc2VydGlvbiwgU01PT1RISU5HX01FU1NBR0UpXG4gICAgc21vb3RoaW5nRmFjdG9yID0gMDtcblxuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICBoaW50Q29udGVudDogUG9seW1vcnBoZXVzQ29udGVudDxUdWlDb250ZXh0V2l0aEltcGxpY2l0PFR1aVBvaW50Pj4gPSAnJztcblxuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICB4U3RyaW5naWZ5OiBUdWlTdHJpbmdIYW5kbGVyPG51bWJlcj4gfCBudWxsID0gbnVsbDtcblxuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICB5U3RyaW5naWZ5OiBUdWlTdHJpbmdIYW5kbGVyPG51bWJlcj4gfCBudWxsID0gbnVsbDtcblxuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICBmaWxsZWQgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICBkb3RzID0gZmFsc2U7XG5cbiAgICB2YWx1ZTogUmVhZG9ubHlBcnJheTxUdWlQb2ludD4gPSBbXTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2hvdmVyZWQkID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBhdXRvSWRTdHJpbmc6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KFR1aUlkU2VydmljZSkgaWRTZXJ2aWNlOiBUdWlJZFNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoTmdab25lKSBwcml2YXRlIHJlYWRvbmx5IG5nWm9uZTogTmdab25lLFxuICAgICAgICBASW5qZWN0KExvY2F0aW9uKSBwcml2YXRlIHJlYWRvbmx5IGxvY2F0aW9uUmVmOiBMb2NhdGlvbixcbiAgICAgICAgQE9wdGlvbmFsKClcbiAgICAgICAgQEluamVjdChUdWlMaW5lQ2hhcnRIaW50RGlyZWN0aXZlKVxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGhpbnREaXJlY3RpdmU6IFR1aUxpbmVDaGFydEhpbnREaXJlY3RpdmUgfCBudWxsLFxuICAgICkge1xuICAgICAgICB0aGlzLmF1dG9JZFN0cmluZyA9IGlkU2VydmljZS5nZW5lcmF0ZSgpO1xuICAgIH1cblxuICAgIEB0dWlQdXJlXG4gICAgZ2V0IGhvdmVyZWQkKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ob3ZlcmVkJC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHR1aVpvbmVPcHRpbWl6ZWQodGhpcy5uZ1pvbmUpKTtcbiAgICB9XG5cbiAgICBnZXQgZmlsbElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAndHVpLWxpbmUtY2hhcnQtJyArIHRoaXMuYXV0b0lkU3RyaW5nO1xuICAgIH1cblxuICAgIGdldCBmaWxsKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbGxlZFxuICAgICAgICAgICAgPyBgdXJsKCR7dGhpcy5sb2NhdGlvblJlZi5wcmVwYXJlRXh0ZXJuYWxVcmwodGhpcy5sb2NhdGlvblJlZi5wYXRoKCkpfSMke1xuICAgICAgICAgICAgICAgICAgdGhpcy5maWxsSWRcbiAgICAgICAgICAgICAgfSlgXG4gICAgICAgICAgICA6ICdub25lJztcbiAgICB9XG5cbiAgICBnZXQgdmlld0JveCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy54fSAke3RoaXMueX0gJHt0aGlzLndpZHRofSAke3RoaXMuaGVpZ2h0fWA7XG4gICAgfVxuXG4gICAgZ2V0IGQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RCh0aGlzLnZhbHVlLCB0aGlzLnNtb290aGluZ0ZhY3Rvcik7XG4gICAgfVxuXG4gICAgZ2V0IGZpbGxEKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlLmxlbmd0aFxuICAgICAgICAgICAgPyB0aGlzLmQgKyBgViAke3RoaXMueX0gSCAke3RoaXMudmFsdWVbMF1bMF19IFYgJHt0aGlzLnZhbHVlWzBdWzFdfWBcbiAgICAgICAgICAgIDogdGhpcy5kO1xuICAgIH1cblxuICAgIGdldCBjb21wdXRlZEhpbnQoKTpcbiAgICAgICAgfCBQb2x5bW9ycGhldXNDb250ZW50PFR1aUNvbnRleHRXaXRoSW1wbGljaXQ8VHVpUG9pbnQ+PlxuICAgICAgICB8IFBvbHltb3JwaGV1c0NvbnRlbnQ8VHVpQ29udGV4dFdpdGhJbXBsaWNpdDxSZWFkb25seUFycmF5PFR1aVBvaW50Pj4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGludERpcmVjdGl2ZSA/IHRoaXMuaGludERpcmVjdGl2ZS5oaW50IDogdGhpcy5oaW50Q29udGVudDtcbiAgICB9XG5cbiAgICBnZXQgaXNGb2N1c2FibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5oaW50RGlyZWN0aXZlICYmIHRoaXMuaGFzSGludHM7XG4gICAgfVxuXG4gICAgZ2V0IGhhc0hpbnRzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLnhTdHJpbmdpZnkgfHwgISF0aGlzLnlTdHJpbmdpZnkgfHwgISF0aGlzLmNvbXB1dGVkSGludDtcbiAgICB9XG5cbiAgICBnZXRYKGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5pc1NpbmdsZVBvaW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZVswXVswXSAvIDI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW5kZXhcbiAgICAgICAgICAgID8gKHRoaXMudmFsdWVbaW5kZXggLSAxXVswXSArIHRoaXMudmFsdWVbaW5kZXhdWzBdKSAvIDJcbiAgICAgICAgICAgIDogMiAqIHRoaXMudmFsdWVbMF1bMF0gLSB0aGlzLmdldFgoMSk7XG4gICAgfVxuXG4gICAgZ2V0V2lkdGgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAoMTAwICogdGhpcy5jb21wdXRlV2lkdGgoaW5kZXgpKSAvIHRoaXMud2lkdGg7XG4gICAgfVxuXG4gICAgZ2V0SGludElkKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5hdXRvSWRTdHJpbmd9XyR7aW5kZXh9YDtcbiAgICB9XG5cbiAgICBnZXRDb250ZW50Q29udGV4dChcbiAgICAgICAgJGltcGxpY2l0OiBUdWlQb2ludCxcbiAgICApOlxuICAgICAgICB8IFR1aUNvbnRleHRXaXRoSW1wbGljaXQ8VHVpUG9pbnQ+XG4gICAgICAgIHwgVHVpQ29udGV4dFdpdGhJbXBsaWNpdDxSZWFkb25seUFycmF5PFR1aVBvaW50Pj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5oaW50RGlyZWN0aXZlXG4gICAgICAgICAgICA/IHRoaXMuaGludERpcmVjdGl2ZS5nZXRDb250ZXh0KHRoaXMudmFsdWUuaW5kZXhPZigkaW1wbGljaXQpLCB0aGlzKVxuICAgICAgICAgICAgOiB7JGltcGxpY2l0fTtcbiAgICB9XG5cbiAgICBnZXRIb3ZlcmVkKGhvdmVyZWQ6IG51bWJlcik6IFR1aVBvaW50IHwgbnVsbCB7XG4gICAgICAgIC8vIFRoaXMgY2hlY2tzIGZvciBOYU4gYW5kIG51bGwgdG9vIHNpbmNlIGFzeW5jIHBpcGUgcmV0dXJucyBudWxsIGJlZm9yZSBmaXJzdCBpdGVtXG4gICAgICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGhvdmVyZWQpID8gdGhpcy52YWx1ZVtob3ZlcmVkXSA6IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0Qm90dG9tKHk6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAoMTAwICogKHkgLSB0aGlzLnkpKSAvIHRoaXMuaGVpZ2h0O1xuICAgIH1cblxuICAgIGdldExlZnQoeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuICgxMDAgKiAoeCAtIHRoaXMueCkpIC8gdGhpcy53aWR0aDtcbiAgICB9XG5cbiAgICBnZXRPZmZzZXQoeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuICgxMDAgKiAodGhpcy52YWx1ZVt4XVswXSAtIHRoaXMuZ2V0WCh4KSkpIC8gdGhpcy5jb21wdXRlV2lkdGgoeCk7XG4gICAgfVxuXG4gICAgb25Nb3VzZUVudGVyKGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuaGludERpcmVjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5oaW50RGlyZWN0aXZlLnJhaXNlKGluZGV4LCB0aGlzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25Ib3ZlcmVkKGluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uSG92ZXJlZChpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2hvdmVyZWQkLm5leHQoaW5kZXgpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlbGVhdmUnKVxuICAgIG9uTW91c2VMZWF2ZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmhpbnREaXJlY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMub25Ib3ZlcmVkKE5hTik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBpc1NpbmdsZVBvaW50KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS5sZW5ndGggPT09IDE7XG4gICAgfVxuXG4gICAgQHR1aVB1cmVcbiAgICBwcml2YXRlIGdldEQodmFsdWU6IFJlYWRvbmx5QXJyYXk8VHVpUG9pbnQ+LCBzbW9vdGhpbmdGYWN0b3I6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5yZWR1Y2UoXG4gICAgICAgICAgICAoZCwgcG9pbnQsIGluZGV4KSA9PlxuICAgICAgICAgICAgICAgIGluZGV4ID8gYCR7ZH0gJHtkcmF3KHZhbHVlLCBpbmRleCwgc21vb3RoaW5nRmFjdG9yKX1gIDogYE0gJHtwb2ludH1gLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb21wdXRlV2lkdGgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBpbmRleCA9PT0gdGhpcy52YWx1ZS5sZW5ndGggLSAxXG4gICAgICAgICAgICA/IDIgKiAodGhpcy52YWx1ZVtpbmRleF1bMF0gLSB0aGlzLmdldFgoaW5kZXgpKVxuICAgICAgICAgICAgOiB0aGlzLmdldFgoaW5kZXggKyAxKSAtIHRoaXMuZ2V0WChpbmRleCk7XG4gICAgfVxufVxuIl19
@@ -104,6 +104,9 @@ var TuiLineChartComponent = /** @class */ (function () {
104
104
  configurable: true
105
105
  });
106
106
  TuiLineChartComponent.prototype.getX = function (index) {
107
+ if (this.isSinglePoint) {
108
+ return this.value[0][0] / 2;
109
+ }
107
110
  return index
108
111
  ? (this.value[index - 1][0] + this.value[index][0]) / 2
109
112
  : 2 * this.value[0][0] - this.getX(1);
@@ -148,6 +151,13 @@ var TuiLineChartComponent = /** @class */ (function () {
148
151
  this.onHovered(NaN);
149
152
  }
150
153
  };
154
+ Object.defineProperty(TuiLineChartComponent.prototype, "isSinglePoint", {
155
+ get: function () {
156
+ return this.value.length === 1;
157
+ },
158
+ enumerable: true,
159
+ configurable: true
160
+ });
151
161
  TuiLineChartComponent.prototype.getD = function (value, smoothingFactor) {
152
162
  return value.reduce(function (d, point, index) {
153
163
  return index ? d + " " + draw(value, index, smoothingFactor) : "M " + point;
@@ -220,7 +230,7 @@ var TuiLineChartComponent = /** @class */ (function () {
220
230
  TuiLineChartComponent = __decorate([
221
231
  Component({
222
232
  selector: 'tui-line-chart',
223
- template: "<ng-container *tuiLet=\"hovered$ | async as hovered\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"t-svg\"\n focusable=\"false\"\n preserveAspectRatio=\"none\"\n width=\"100%\"\n height=\"100%\"\n [attr.viewBox]=\"viewBox\"\n >\n <defs>\n <linearGradient x1=\"0\" x2=\"0\" y1=\"1\" y2=\"0\" [attr.id]=\"fillId\">\n <stop\n stop-color=\"currentColor\"\n offset=\"0%\"\n stop-opacity=\"0.5\"\n />\n <stop\n stop-color=\"currentColor\"\n offset=\"100%\"\n stop-opacity=\"0\"\n />\n </linearGradient>\n </defs>\n <path stroke=\"none\" [attr.fill]=\"fill\" [attr.d]=\"fillD\" />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n vector-effect=\"non-scaling-stroke\"\n stroke-width=\"2\"\n [attr.d]=\"d\"\n />\n </svg>\n <ng-container *ngIf=\"dots\">\n <div\n *ngFor=\"let point of value\"\n class=\"t-dot\"\n [style.left.%]=\"getLeft(point[0])\"\n [style.bottom.%]=\"getBottom(point[1])\"\n ></div>\n </ng-container>\n <ng-container *ngIf=\"hasHints\">\n <ng-container *ngFor=\"let point of value; let index = index\">\n <div\n *ngIf=\"value.length > 1\"\n class=\"t-column\"\n tuiHintDirection=\"top-left\"\n [class.t-column_hovered]=\"hovered === index\"\n [tuiHintHost]=\"hintHost\"\n [tuiHint]=\"computedHint && hint\"\n [tuiHintId]=\"getHintId(index)\"\n [style.left.%]=\"getLeft(getX(index))\"\n [style.width.%]=\"getWidth(index)\"\n (mouseenter)=\"onMouseEnter(index)\"\n >\n <div\n class=\"t-line t-line_vertical\"\n [style.left.%]=\"getOffset(index)\"\n ></div>\n <div\n #hintHost\n class=\"t-host\"\n [style.left.%]=\"getOffset(index)\"\n [style.bottom.%]=\"getBottom(point[1])\"\n [tuiFocusable]=\"isFocusable\"\n [tuiDescribedBy]=\"getHintId(index)\"\n ></div>\n </div>\n <div\n *ngIf=\"isFocusable\"\n class=\"t-line t-line_horizontal\"\n [style.bottom.%]=\"getBottom(point[1])\"\n ></div>\n <ng-template #hint>\n <div\n polymorpheus-outlet\n class=\"t-text\"\n [content]=\"computedHint\"\n [context]=\"getContentContext(point)\"\n ></div>\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"getHovered(hovered) as point\">\n <div\n *ngIf=\"xStringify\"\n class=\"t-hint t-hint_x\"\n [style.left.%]=\"getLeft(point[0])\"\n >\n {{xStringify(point[0])}}\n </div>\n <div\n *ngIf=\"yStringify\"\n class=\"t-hint t-hint_y\"\n [style.bottom.%]=\"getBottom(point[1])\"\n >\n {{yStringify(point[1])}}\n </div>\n </ng-container>\n</ng-container>\n",
233
+ template: "<ng-container *tuiLet=\"hovered$ | async as hovered\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"t-svg\"\n focusable=\"false\"\n preserveAspectRatio=\"none\"\n width=\"100%\"\n height=\"100%\"\n [attr.viewBox]=\"viewBox\"\n >\n <defs>\n <linearGradient x1=\"0\" x2=\"0\" y1=\"1\" y2=\"0\" [attr.id]=\"fillId\">\n <stop\n stop-color=\"currentColor\"\n offset=\"0%\"\n stop-opacity=\"0.5\"\n />\n <stop\n stop-color=\"currentColor\"\n offset=\"100%\"\n stop-opacity=\"0\"\n />\n </linearGradient>\n </defs>\n <path stroke=\"none\" [attr.fill]=\"fill\" [attr.d]=\"fillD\" />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n vector-effect=\"non-scaling-stroke\"\n stroke-width=\"2\"\n [attr.d]=\"d\"\n />\n </svg>\n <ng-container *ngIf=\"dots\">\n <div\n *ngFor=\"let point of value\"\n class=\"t-dot\"\n [style.left.%]=\"getLeft(point[0])\"\n [style.bottom.%]=\"getBottom(point[1])\"\n ></div>\n </ng-container>\n <ng-container *ngIf=\"hasHints\">\n <ng-container *ngFor=\"let point of value; let index = index\">\n <div\n *ngIf=\"value.length > 1 || dots\"\n class=\"t-column\"\n tuiHintDirection=\"top-left\"\n [class.t-column_hovered]=\"hovered === index\"\n [tuiHintHost]=\"hintHost\"\n [tuiHint]=\"computedHint && hint\"\n [tuiHintId]=\"getHintId(index)\"\n [style.left.%]=\"getLeft(getX(index))\"\n [style.width.%]=\"getWidth(index)\"\n (mouseenter)=\"onMouseEnter(index)\"\n >\n <div\n class=\"t-line t-line_vertical\"\n [style.left.%]=\"getOffset(index)\"\n ></div>\n <div\n #hintHost\n class=\"t-host\"\n [style.left.%]=\"getOffset(index)\"\n [style.bottom.%]=\"getBottom(point[1])\"\n [tuiFocusable]=\"isFocusable\"\n [tuiDescribedBy]=\"getHintId(index)\"\n ></div>\n </div>\n <div\n *ngIf=\"isFocusable\"\n class=\"t-line t-line_horizontal\"\n [style.bottom.%]=\"getBottom(point[1])\"\n ></div>\n <ng-template #hint>\n <div\n polymorpheus-outlet\n class=\"t-text\"\n [content]=\"computedHint\"\n [context]=\"getContentContext(point)\"\n ></div>\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"getHovered(hovered) as point\">\n <div\n *ngIf=\"xStringify\"\n class=\"t-hint t-hint_x\"\n [style.left.%]=\"getLeft(point[0])\"\n >\n {{xStringify(point[0])}}\n </div>\n <div\n *ngIf=\"yStringify\"\n class=\"t-hint t-hint_y\"\n [style.bottom.%]=\"getBottom(point[1])\"\n >\n {{yStringify(point[1])}}\n </div>\n </ng-container>\n</ng-container>\n",
224
234
  changeDetection: ChangeDetectionStrategy.OnPush,
225
235
  styles: [":host{display:flex;width:100%;height:100%;pointer-events:none}.t-svg{transform:scale(1,-1)}.t-column{position:absolute;top:0;height:100%;pointer-events:auto}.t-dot{position:absolute;width:.375rem;height:.375rem;border-radius:100%;background:currentColor;margin:-.1875rem;box-shadow:0 0 0 2px #fff}.t-host{position:absolute;left:50%;width:.5rem;height:.5rem;border-radius:100%;opacity:0;background:#fff;margin:-.25rem;box-shadow:0 0 0 2px currentColor,0 .0625rem .1875rem .125rem rgba(0,0,0,.1);outline:0;pointer-events:none}.column._hint_hovered .t-host,.column:hover .t-host,.column_hovered .t-host,.t-host:focus{opacity:1}.t-line{position:absolute;opacity:0;background:var(--tui-base-03)}.t-line_vertical{top:0;bottom:0;left:50%;width:.0625rem}.t-line_horizontal{z-index:-1;width:100%;height:.0625rem}:host:not([style]) .column._hint_hovered .t-line,:host:not([style]) .column._hint_hovered+.t-line,:host:not([style]) .column:hover .t-line,:host:not([style]) .column:hover+.t-line,:host[style^='z-index: 0'] .column_hovered .t-line,:host[style^='z-index: 0'] .column_hovered+.t-line{opacity:1}.t-text{white-space:pre-wrap}.t-hint{box-shadow:0 .25rem 1.5rem rgba(0,0,0,.12);font:var(--tui-font-text-xs);position:absolute;height:1.25rem;line-height:1.25rem;margin-bottom:-.625rem;padding:0 .375rem;white-space:nowrap;color:var(--tui-base-09);background:var(--tui-base-01);transform:translate3d(-50%,0,0)}.t-hint_x{bottom:0}.t-hint_y{left:0}"]
226
236
  }),
@@ -233,4 +243,4 @@ var TuiLineChartComponent = /** @class */ (function () {
233
243
  return TuiLineChartComponent;
234
244
  }());
235
245
  export { TuiLineChartComponent };
236
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1jaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdGFpZ2EtdWkvYWRkb24tY2hhcnRzL2NvbXBvbmVudHMvbGluZS1jaGFydC8iLCJzb3VyY2VzIjpbImxpbmUtY2hhcnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFFBQVEsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDbEQsT0FBTyxFQUNILE9BQU8sRUFDUCxzQkFBc0IsRUFDdEIsY0FBYyxFQUNkLFlBQVksRUFDWixPQUFPLEVBQ1AsZ0JBQWdCLEVBQ2hCLGdCQUFnQixHQUNuQixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQWEsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBRXRFLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxlQUF1QjtJQUN0RCxPQUFPLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzVDLENBQUM7QUFFRCxJQUFNLGlCQUFpQixHQUFHLDJDQUEyQyxDQUFDO0FBUXRFO0lBcURJLCtCQUMwQixTQUF1QixFQUNaLE1BQWMsRUFDWixXQUFxQixFQUd2QyxhQUErQztRQUovQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ1osZ0JBQVcsR0FBWCxXQUFXLENBQVU7UUFHdkMsa0JBQWEsR0FBYixhQUFhLENBQWtDO1FBbERwRSxNQUFDLEdBQUcsQ0FBQyxD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S0FBSyxFQUFFO1FBQ1AsY0FBYyxDQUFDLGtCQUFrQixFQUFFLGlCQUFpQixDQUFDO2tFQUNsQztJQUlwQjtRQUZDLEtBQUssRUFBRTtRQUNQLGNBQWMsRUFBRTs4REFDdUQ7SUFJeEU7UUFGQyxLQUFLLEVBQUU7UUFDUCxjQUFjLEVBQUU7NkRBQ2tDO0lBSW5EO1FBRkMsS0FBSyxFQUFFO1FBQ1AsY0FBYyxFQUFFOzZEQUNrQztJQUluRDtRQUZDLEtBQUssRUFBRTtRQUNQLGNBQWMsRUFBRTt5REFDRjtJQUlmO1FBRkMsS0FBSyxFQUFFO1FBQ1AsY0FBYyxFQUFFO3VEQUNKO0lBb0JiO1FBREMsT0FBTzt5REFHUDtJQWdHRDtRQURDLFlBQVksQ0FBQyxZQUFZLENBQUM7NkRBSzFCO0lBR0Q7UUFEQyxPQUFPO3FEQU9QO0lBaExRLHFCQUFxQjtRQU5qQyxTQUFTLENBQUM7WUFDUCxRQUFRLEVBQUUsZ0JBQWdCO1lBQzFCLCs5R0FBeUM7WUFFekMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O1NBQ2xELENBQUM7UUF1RE8sV0FBQSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDcEIsV0FBQSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDZCxXQUFBLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNoQixXQUFBLFFBQVEsRUFBRSxDQUFBO1FBQ1YsV0FBQSxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQTtPQTFEN0IscUJBQXFCLENBdUxqQztJQUFELDRCQUFDO0NBQUEsQUF2TEQsSUF1TEM7U0F2TFkscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMb2NhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9wdGlvbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7ZHJhd30gZnJvbSAnQHRhaWdhLXVpL2FkZG9uLWNoYXJ0cy91dGlscyc7XG5pbXBvcnQge1xuICAgIGluUmFuZ2UsXG4gICAgVHVpQ29udGV4dFdpdGhJbXBsaWNpdCxcbiAgICB0dWlEZWZhdWx0UHJvcCxcbiAgICBUdWlJZFNlcnZpY2UsXG4gICAgdHVpUHVyZSxcbiAgICBUdWlTdHJpbmdIYW5kbGVyLFxuICAgIHR1aVpvbmVPcHRpbWl6ZWQsXG59IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHtUdWlQb2ludH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuaW1wb3J0IHtQb2x5bW9ycGhldXNDb250ZW50fSBmcm9tICdAdGlua29mZi9uZy1wb2x5bW9ycGhldXMnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGlzdGluY3RVbnRpbENoYW5nZWR9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7VHVpTGluZUNoYXJ0SGludERpcmVjdGl2ZX0gZnJvbSAnLi9saW5lLWNoYXJ0LWhpbnQuZGlyZWN0aXZlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNtb290aGluZ0Fzc2VydGlvbihzbW9vdGhpbmdGYWN0b3I6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpblJhbmdlKHNtb290aGluZ0ZhY3RvciwgMCwgMTAwKTtcbn1cblxuY29uc3QgU01PT1RISU5HX01FU1NBR0UgPSAnc21vb3RoaW5nRmFjdG9yIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxMDAnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3R1aS1saW5lLWNoYXJ0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbGluZS1jaGFydC50ZW1wbGF0ZS5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9saW5lLWNoYXJ0LnN0eWxlLmxlc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVHVpTGluZUNoYXJ0Q29tcG9uZW50IHtcbiAgICBASW5wdXQoJ3ZhbHVlJylcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIHNldCB2YWx1ZVNldHRlcih2YWx1ZTogUmVhZG9ubHlBcnJheTxUdWlQb2ludD4pIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlLmZpbHRlcihpdGVtID0+ICFpdGVtLnNvbWUoaXNOYU4pKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgeCA9IDA7XG5cbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgeSA9IDA7XG5cbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgd2lkdGggPSAwO1xuXG4gICAgQElucHV0KClcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIGhlaWdodCA9IDA7XG5cbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcChzbW9vdGhpbmdBc3NlcnRpb24sIFNNT09USElOR19NRVNTQUdFKVxuICAgIHNtb290aGluZ0ZhY3RvciA9IDA7XG5cbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgaGludENvbnRlbnQ6IFBvbHltb3JwaGV1c0NvbnRlbnQ8VHVpQ29udGV4dFdpdGhJbXBsaWNpdDxUdWlQb2ludD4+ID0gJyc7XG5cbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgeFN0cmluZ2lmeTogVHVpU3RyaW5nSGFuZGxlcjxudW1iZXI+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgeVN0cmluZ2lmeTogVHVpU3RyaW5nSGFuZGxlcjxudW1iZXI+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgZmlsbGVkID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgZG90cyA9IGZhbHNlO1xuXG4gICAgdmFsdWU6IFJlYWRvbmx5QXJyYXk8VHVpUG9pbnQ+ID0gW107XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9ob3ZlcmVkJCA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXV0b0lkU3RyaW5nOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChUdWlJZFNlcnZpY2UpIGlkU2VydmljZTogVHVpSWRTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KE5nWm9uZSkgcHJpdmF0ZSByZWFkb25seSBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgQEluamVjdChMb2NhdGlvbikgcHJpdmF0ZSByZWFkb25seSBsb2NhdGlvblJlZjogTG9jYXRpb24sXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIEBJbmplY3QoVHVpTGluZUNoYXJ0SGludERpcmVjdGl2ZSlcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBoaW50RGlyZWN0aXZlOiBUdWlMaW5lQ2hhcnRIaW50RGlyZWN0aXZlIHwgbnVsbCxcbiAgICApIHtcbiAgICAgICAgdGhpcy5hdXRvSWRTdHJpbmcgPSBpZFNlcnZpY2UuZ2VuZXJhdGUoKTtcbiAgICB9XG5cbiAgICBAdHVpUHVyZVxuICAgIGdldCBob3ZlcmVkJCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faG92ZXJlZCQucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCB0dWlab25lT3B0aW1pemVkKHRoaXMubmdab25lKSk7XG4gICAgfVxuXG4gICAgZ2V0IGZpbGxJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gJ3R1aS1saW5lLWNoYXJ0LScgKyB0aGlzLmF1dG9JZFN0cmluZztcbiAgICB9XG5cbiAgICBnZXQgZmlsbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5maWxsZWRcbiAgICAgICAgICAgID8gYHVybCgke3RoaXMubG9jYXRpb25SZWYucHJlcGFyZUV4dGVybmFsVXJsKHRoaXMubG9jYXRpb25SZWYucGF0aCgpKX0jJHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZmlsbElkXG4gICAgICAgICAgICAgIH0pYFxuICAgICAgICAgICAgOiAnbm9uZSc7XG4gICAgfVxuXG4gICAgZ2V0IHZpZXdCb3goKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMueH0gJHt0aGlzLnl9ICR7dGhpcy53aWR0aH0gJHt0aGlzLmhlaWdodH1gO1xuICAgIH1cblxuICAgIGdldCBkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEQodGhpcy52YWx1ZSwgdGhpcy5zbW9vdGhpbmdGYWN0b3IpO1xuICAgIH1cblxuICAgIGdldCBmaWxsRCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS5sZW5ndGhcbiAgICAgICAgICAgID8gdGhpcy5kICsgYFYgJHt0aGlzLnl9IEggJHt0aGlzLnZhbHVlWzBdWzBdfSBWICR7dGhpcy52YWx1ZVswXVsxXX1gXG4gICAgICAgICAgICA6IHRoaXMuZDtcbiAgICB9XG5cbiAgICBnZXQgY29tcHV0ZWRIaW50KCk6XG4gICAgICAgIHwgUG9seW1vcnBoZXVzQ29udGVudDxUdWlDb250ZXh0V2l0aEltcGxpY2l0PFR1aVBvaW50Pj5cbiAgICAgICAgfCBQb2x5bW9ycGhldXNDb250ZW50PFR1aUNvbnRleHRXaXRoSW1wbGljaXQ8UmVhZG9ubHlBcnJheTxUdWlQb2ludD4+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmhpbnREaXJlY3RpdmUgPyB0aGlzLmhpbnREaXJlY3RpdmUuaGludCA6IHRoaXMuaGludENvbnRlbnQ7XG4gICAgfVxuXG4gICAgZ2V0IGlzRm9jdXNhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuaGludERpcmVjdGl2ZSAmJiB0aGlzLmhhc0hpbnRzO1xuICAgIH1cblxuICAgIGdldCBoYXNIaW50cygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy54U3RyaW5naWZ5IHx8ICEhdGhpcy55U3RyaW5naWZ5IHx8ICEhdGhpcy5jb21wdXRlZEhpbnQ7XG4gICAgfVxuXG4gICAgZ2V0WChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIGluZGV4XG4gICAgICAgICAgICA/ICh0aGlzLnZhbHVlW2luZGV4IC0gMV1bMF0gKyB0aGlzLnZhbHVlW2luZGV4XVswXSkgLyAyXG4gICAgICAgICAgICA6IDIgKiB0aGlzLnZhbHVlWzBdWzBdIC0gdGhpcy5nZXRYKDEpO1xuICAgIH1cblxuICAgIGdldFdpZHRoKGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gKDEwMCAqIHRoaXMuY29tcHV0ZVdpZHRoKGluZGV4KSkgLyB0aGlzLndpZHRoO1xuICAgIH1cblxuICAgIGdldEhpbnRJZChpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuYXV0b0lkU3RyaW5nfV8ke2luZGV4fWA7XG4gICAgfVxuXG4gICAgZ2V0Q29udGVudENvbnRleHQoXG4gICAgICAgICRpbXBsaWNpdDogVHVpUG9pbnQsXG4gICAgKTpcbiAgICAgICAgfCBUdWlDb250ZXh0V2l0aEltcGxpY2l0PFR1aVBvaW50PlxuICAgICAgICB8IFR1aUNvbnRleHRXaXRoSW1wbGljaXQ8UmVhZG9ubHlBcnJheTxUdWlQb2ludD4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGludERpcmVjdGl2ZVxuICAgICAgICAgICAgPyB0aGlzLmhpbnREaXJlY3RpdmUuZ2V0Q29udGV4dCh0aGlzLnZhbHVlLmluZGV4T2YoJGltcGxpY2l0KSwgdGhpcylcbiAgICAgICAgICAgIDogeyRpbXBsaWNpdH07XG4gICAgfVxuXG4gICAgZ2V0SG92ZXJlZChob3ZlcmVkOiBudW1iZXIpOiBUdWlQb2ludCB8IG51bGwge1xuICAgICAgICAvLyBUaGlzIGNoZWNrcyBmb3IgTmFOIGFuZCBudWxsIHRvbyBzaW5jZSBhc3luYyBwaXBlIHJldHVybnMgbnVsbCBiZWZvcmUgZmlyc3QgaXRlbVxuICAgICAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihob3ZlcmVkKSA/IHRoaXMudmFsdWVbaG92ZXJlZF0gOiBudWxsO1xuICAgIH1cblxuICAgIGdldEJvdHRvbSh5OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gKDEwMCAqICh5IC0gdGhpcy55KSkgLyB0aGlzLmhlaWdodDtcbiAgICB9XG5cbiAgICBnZXRMZWZ0KHg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAoMTAwICogKHggLSB0aGlzLngpKSAvIHRoaXMud2lkdGg7XG4gICAgfVxuXG4gICAgZ2V0T2Zmc2V0KHg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAoMTAwICogKHRoaXMudmFsdWVbeF1bMF0gLSB0aGlzLmdldFgoeCkpKSAvIHRoaXMuY29tcHV0ZVdpZHRoKHgpO1xuICAgIH1cblxuICAgIG9uTW91c2VFbnRlcihpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLmhpbnREaXJlY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuaGludERpcmVjdGl2ZS5yYWlzZShpbmRleCwgdGhpcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uSG92ZXJlZChpbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkhvdmVyZWQoaW5kZXg6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9ob3ZlcmVkJC5uZXh0KGluZGV4KTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWxlYXZlJylcbiAgICBvbk1vdXNlTGVhdmUoKSB7XG4gICAgICAgIGlmICghdGhpcy5oaW50RGlyZWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLm9uSG92ZXJlZChOYU4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQHR1aVB1cmVcbiAgICBwcml2YXRlIGdldEQodmFsdWU6IFJlYWRvbmx5QXJyYXk8VHVpUG9pbnQ+LCBzbW9vdGhpbmdGYWN0b3I6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5yZWR1Y2UoXG4gICAgICAgICAgICAoZCwgcG9pbnQsIGluZGV4KSA9PlxuICAgICAgICAgICAgICAgIGluZGV4ID8gYCR7ZH0gJHtkcmF3KHZhbHVlLCBpbmRleCwgc21vb3RoaW5nRmFjdG9yKX1gIDogYE0gJHtwb2ludH1gLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb21wdXRlV2lkdGgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBpbmRleCA9PT0gdGhpcy52YWx1ZS5sZW5ndGggLSAxXG4gICAgICAgICAgICA/IDIgKiAodGhpcy52YWx1ZVtpbmRleF1bMF0gLSB0aGlzLmdldFgoaW5kZXgpKVxuICAgICAgICAgICAgOiB0aGlzLmdldFgoaW5kZXggKyAxKSAtIHRoaXMuZ2V0WChpbmRleCk7XG4gICAgfVxufVxuIl19
246
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1jaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdGFpZ2EtdWkvYWRkb24tY2hhcnRzL2NvbXBvbmVudHMvbGluZS1jaGFydC8iLCJzb3VyY2VzIjpbImxpbmUtY2hhcnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFFBQVEsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDbEQsT0FBTyxFQUNILE9BQU8sRUFDUCxzQkFBc0IsRUFDdEIsY0FBYyxFQUNkLFlBQVksRUFDWixPQUFPLEVBQ1AsZ0JBQWdCLEVBQ2hCLGdCQUFnQixHQUNuQixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQWEsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBRXRFLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxlQUF1QjtJQUN0RCxPQUFPLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzVDLENBQUM7QUFFRCxJQUFNLGlCQUFpQixHQUFHLDJDQUEyQyxDQUFDO0FBUXRFO0lBcURJLCtCQUMwQixTQUF1QixFQUNaLE1BQWMsRUFDWixXQUFxQixFQUd2QyxhQUErQztRQUovQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ1osZ0JBQVcsR0FBWCxXQUFXLENBQVU7UUFHdkMsa0JBQWEsR0FBYixhQUFhLENBQWtDO1FBbERwRSxNQUFDLEdBQUcsQ0FBQyxD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bnRlbnQiOlsiaW1wb3J0IHtMb2NhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9wdGlvbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7ZHJhd30gZnJvbSAnQHRhaWdhLXVpL2FkZG9uLWNoYXJ0cy91dGlscyc7XG5pbXBvcnQge1xuICAgIGluUmFuZ2UsXG4gICAgVHVpQ29udGV4dFdpdGhJbXBsaWNpdCxcbiAgICB0dWlEZWZhdWx0UHJvcCxcbiAgICBUdWlJZFNlcnZpY2UsXG4gICAgdHVpUHVyZSxcbiAgICBUdWlTdHJpbmdIYW5kbGVyLFxuICAgIHR1aVpvbmVPcHRpbWl6ZWQsXG59IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHtUdWlQb2ludH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuaW1wb3J0IHtQb2x5bW9ycGhldXNDb250ZW50fSBmcm9tICdAdGlua29mZi9uZy1wb2x5bW9ycGhldXMnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGlzdGluY3RVbnRpbENoYW5nZWR9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7VHVpTGluZUNoYXJ0SGludERpcmVjdGl2ZX0gZnJvbSAnLi9saW5lLWNoYXJ0LWhpbnQuZGlyZWN0aXZlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNtb290aGluZ0Fzc2VydGlvbihzbW9vdGhpbmdGYWN0b3I6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpblJhbmdlKHNtb290aGluZ0ZhY3RvciwgMCwgMTAwKTtcbn1cblxuY29uc3QgU01PT1RISU5HX01FU1NBR0UgPSAnc21vb3RoaW5nRmFjdG9yIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxMDAnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3R1aS1saW5lLWNoYXJ0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbGluZS1jaGFydC50ZW1wbGF0ZS5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9saW5lLWNoYXJ0LnN0eWxlLmxlc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVHVpTGluZUNoYXJ0Q29tcG9uZW50IHtcbiAgICBASW5wdXQoJ3ZhbHVlJylcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIHNldCB2YWx1ZVNldHRlcih2YWx1ZTogUmVhZG9ubHlBcnJheTxUdWlQb2ludD4pIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlLmZpbHRlcihpdGVtID0+ICFpdGVtLnNvbWUoaXNOYU4pKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgeCA9IDA7XG5cbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgeSA9IDA7XG5cbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgd2lkdGggPSAwO1xuXG4gICAgQElucHV0KClcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIGhlaWdodCA9IDA7XG5cbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcChzbW9vdGhpbmdBc3NlcnRpb24sIFNNT09USElOR19NRVNTQUdFKVxuICAgIHNtb290aGluZ0ZhY3RvciA9IDA7XG5cbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgaGludENvbnRlbnQ6IFBvbHltb3JwaGV1c0NvbnRlbnQ8VHVpQ29udGV4dFdpdGhJbXBsaWNpdDxUdWlQb2ludD4+ID0gJyc7XG5cbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgeFN0cmluZ2lmeTogVHVpU3RyaW5nSGFuZGxlcjxudW1iZXI+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgeVN0cmluZ2lmeTogVHVpU3RyaW5nSGFuZGxlcjxudW1iZXI+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgZmlsbGVkID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgZG90cyA9IGZhbHNlO1xuXG4gICAgdmFsdWU6IFJlYWRvbmx5QXJyYXk8VHVpUG9pbnQ+ID0gW107XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9ob3ZlcmVkJCA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXV0b0lkU3RyaW5nOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChUdWlJZFNlcnZpY2UpIGlkU2VydmljZTogVHVpSWRTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KE5nWm9uZSkgcHJpdmF0ZSByZWFkb25seSBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgQEluamVjdChMb2NhdGlvbikgcHJpdmF0ZSByZWFkb25seSBsb2NhdGlvblJlZjogTG9jYXRpb24sXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIEBJbmplY3QoVHVpTGluZUNoYXJ0SGludERpcmVjdGl2ZSlcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBoaW50RGlyZWN0aXZlOiBUdWlMaW5lQ2hhcnRIaW50RGlyZWN0aXZlIHwgbnVsbCxcbiAgICApIHtcbiAgICAgICAgdGhpcy5hdXRvSWRTdHJpbmcgPSBpZFNlcnZpY2UuZ2VuZXJhdGUoKTtcbiAgICB9XG5cbiAgICBAdHVpUHVyZVxuICAgIGdldCBob3ZlcmVkJCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faG92ZXJlZCQucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCB0dWlab25lT3B0aW1pemVkKHRoaXMubmdab25lKSk7XG4gICAgfVxuXG4gICAgZ2V0IGZpbGxJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gJ3R1aS1saW5lLWNoYXJ0LScgKyB0aGlzLmF1dG9JZFN0cmluZztcbiAgICB9XG5cbiAgICBnZXQgZmlsbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5maWxsZWRcbiAgICAgICAgICAgID8gYHVybCgke3RoaXMubG9jYXRpb25SZWYucHJlcGFyZUV4dGVybmFsVXJsKHRoaXMubG9jYXRpb25SZWYucGF0aCgpKX0jJHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZmlsbElkXG4gICAgICAgICAgICAgIH0pYFxuICAgICAgICAgICAgOiAnbm9uZSc7XG4gICAgfVxuXG4gICAgZ2V0IHZpZXdCb3goKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMueH0gJHt0aGlzLnl9ICR7dGhpcy53aWR0aH0gJHt0aGlzLmhlaWdodH1gO1xuICAgIH1cblxuICAgIGdldCBkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEQodGhpcy52YWx1ZSwgdGhpcy5zbW9vdGhpbmdGYWN0b3IpO1xuICAgIH1cblxuICAgIGdldCBmaWxsRCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS5sZW5ndGhcbiAgICAgICAgICAgID8gdGhpcy5kICsgYFYgJHt0aGlzLnl9IEggJHt0aGlzLnZhbHVlWzBdWzBdfSBWICR7dGhpcy52YWx1ZVswXVsxXX1gXG4gICAgICAgICAgICA6IHRoaXMuZDtcbiAgICB9XG5cbiAgICBnZXQgY29tcHV0ZWRIaW50KCk6XG4gICAgICAgIHwgUG9seW1vcnBoZXVzQ29udGVudDxUdWlDb250ZXh0V2l0aEltcGxpY2l0PFR1aVBvaW50Pj5cbiAgICAgICAgfCBQb2x5bW9ycGhldXNDb250ZW50PFR1aUNvbnRleHRXaXRoSW1wbGljaXQ8UmVhZG9ubHlBcnJheTxUdWlQb2ludD4+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmhpbnREaXJlY3RpdmUgPyB0aGlzLmhpbnREaXJlY3RpdmUuaGludCA6IHRoaXMuaGludENvbnRlbnQ7XG4gICAgfVxuXG4gICAgZ2V0IGlzRm9jdXNhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuaGludERpcmVjdGl2ZSAmJiB0aGlzLmhhc0hpbnRzO1xuICAgIH1cblxuICAgIGdldCBoYXNIaW50cygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy54U3RyaW5naWZ5IHx8ICEhdGhpcy55U3RyaW5naWZ5IHx8ICEhdGhpcy5jb21wdXRlZEhpbnQ7XG4gICAgfVxuXG4gICAgZ2V0WChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTaW5nbGVQb2ludCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVbMF1bMF0gLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluZGV4XG4gICAgICAgICAgICA/ICh0aGlzLnZhbHVlW2luZGV4IC0gMV1bMF0gKyB0aGlzLnZhbHVlW2luZGV4XVswXSkgLyAyXG4gICAgICAgICAgICA6IDIgKiB0aGlzLnZhbHVlWzBdWzBdIC0gdGhpcy5nZXRYKDEpO1xuICAgIH1cblxuICAgIGdldFdpZHRoKGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gKDEwMCAqIHRoaXMuY29tcHV0ZVdpZHRoKGluZGV4KSkgLyB0aGlzLndpZHRoO1xuICAgIH1cblxuICAgIGdldEhpbnRJZChpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuYXV0b0lkU3RyaW5nfV8ke2luZGV4fWA7XG4gICAgfVxuXG4gICAgZ2V0Q29udGVudENvbnRleHQoXG4gICAgICAgICRpbXBsaWNpdDogVHVpUG9pbnQsXG4gICAgKTpcbiAgICAgICAgfCBUdWlDb250ZXh0V2l0aEltcGxpY2l0PFR1aVBvaW50PlxuICAgICAgICB8IFR1aUNvbnRleHRXaXRoSW1wbGljaXQ8UmVhZG9ubHlBcnJheTxUdWlQb2ludD4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGludERpcmVjdGl2ZVxuICAgICAgICAgICAgPyB0aGlzLmhpbnREaXJlY3RpdmUuZ2V0Q29udGV4dCh0aGlzLnZhbHVlLmluZGV4T2YoJGltcGxpY2l0KSwgdGhpcylcbiAgICAgICAgICAgIDogeyRpbXBsaWNpdH07XG4gICAgfVxuXG4gICAgZ2V0SG92ZXJlZChob3ZlcmVkOiBudW1iZXIpOiBUdWlQb2ludCB8IG51bGwge1xuICAgICAgICAvLyBUaGlzIGNoZWNrcyBmb3IgTmFOIGFuZCBudWxsIHRvbyBzaW5jZSBhc3luYyBwaXBlIHJldHVybnMgbnVsbCBiZWZvcmUgZmlyc3QgaXRlbVxuICAgICAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihob3ZlcmVkKSA/IHRoaXMudmFsdWVbaG92ZXJlZF0gOiBudWxsO1xuICAgIH1cblxuICAgIGdldEJvdHRvbSh5OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gKDEwMCAqICh5IC0gdGhpcy55KSkgLyB0aGlzLmhlaWdodDtcbiAgICB9XG5cbiAgICBnZXRMZWZ0KHg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAoMTAwICogKHggLSB0aGlzLngpKSAvIHRoaXMud2lkdGg7XG4gICAgfVxuXG4gICAgZ2V0T2Zmc2V0KHg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAoMTAwICogKHRoaXMudmFsdWVbeF1bMF0gLSB0aGlzLmdldFgoeCkpKSAvIHRoaXMuY29tcHV0ZVdpZHRoKHgpO1xuICAgIH1cblxuICAgIG9uTW91c2VFbnRlcihpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLmhpbnREaXJlY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuaGludERpcmVjdGl2ZS5yYWlzZShpbmRleCwgdGhpcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uSG92ZXJlZChpbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkhvdmVyZWQoaW5kZXg6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9ob3ZlcmVkJC5uZXh0KGluZGV4KTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWxlYXZlJylcbiAgICBvbk1vdXNlTGVhdmUoKSB7XG4gICAgICAgIGlmICghdGhpcy5oaW50RGlyZWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLm9uSG92ZXJlZChOYU4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgaXNTaW5nbGVQb2ludCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUubGVuZ3RoID09PSAxO1xuICAgIH1cblxuICAgIEB0dWlQdXJlXG4gICAgcHJpdmF0ZSBnZXREKHZhbHVlOiBSZWFkb25seUFycmF5PFR1aVBvaW50Piwgc21vb3RoaW5nRmFjdG9yOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdmFsdWUucmVkdWNlKFxuICAgICAgICAgICAgKGQsIHBvaW50LCBpbmRleCkgPT5cbiAgICAgICAgICAgICAgICBpbmRleCA/IGAke2R9ICR7ZHJhdyh2YWx1ZSwgaW5kZXgsIHNtb290aGluZ0ZhY3Rvcil9YCA6IGBNICR7cG9pbnR9YCxcbiAgICAgICAgICAgICcnLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29tcHV0ZVdpZHRoKGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gaW5kZXggPT09IHRoaXMudmFsdWUubGVuZ3RoIC0gMVxuICAgICAgICAgICAgPyAyICogKHRoaXMudmFsdWVbaW5kZXhdWzBdIC0gdGhpcy5nZXRYKGluZGV4KSlcbiAgICAgICAgICAgIDogdGhpcy5nZXRYKGluZGV4ICsgMSkgLSB0aGlzLmdldFgoaW5kZXgpO1xuICAgIH1cbn1cbiJdfQ==
@@ -128,6 +128,9 @@ let TuiLineChartComponent = class TuiLineChartComponent {
128
128
  return !!this.xStringify || !!this.yStringify || !!this.computedHint;
129
129
  }
130
130
  getX(index) {
131
+ if (this.isSinglePoint) {
132
+ return this.value[0][0] / 2;
133
+ }
131
134
  return index
132
135
  ? (this.value[index - 1][0] + this.value[index][0]) / 2
133
136
  : 2 * this.value[0][0] - this.getX(1);
@@ -172,6 +175,9 @@ let TuiLineChartComponent = class TuiLineChartComponent {
172
175
  this.onHovered(NaN);
173
176
  }
174
177
  }
178
+ get isSinglePoint() {
179
+ return this.value.length === 1;
180
+ }
175
181
  getD(value, smoothingFactor) {
176
182
  return value.reduce((d, point, index) => index ? `${d} ${draw(value, index, smoothingFactor)}` : `M ${point}`, '');
177
183
  }
@@ -243,7 +249,7 @@ __decorate([
243
249
  TuiLineChartComponent = __decorate([
244
250
  Component({
245
251
  selector: 'tui-line-chart',
246
- template: "<ng-container *tuiLet=\"hovered$ | async as hovered\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"t-svg\"\n focusable=\"false\"\n preserveAspectRatio=\"none\"\n width=\"100%\"\n height=\"100%\"\n [attr.viewBox]=\"viewBox\"\n >\n <defs>\n <linearGradient x1=\"0\" x2=\"0\" y1=\"1\" y2=\"0\" [attr.id]=\"fillId\">\n <stop\n stop-color=\"currentColor\"\n offset=\"0%\"\n stop-opacity=\"0.5\"\n />\n <stop\n stop-color=\"currentColor\"\n offset=\"100%\"\n stop-opacity=\"0\"\n />\n </linearGradient>\n </defs>\n <path stroke=\"none\" [attr.fill]=\"fill\" [attr.d]=\"fillD\" />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n vector-effect=\"non-scaling-stroke\"\n stroke-width=\"2\"\n [attr.d]=\"d\"\n />\n </svg>\n <ng-container *ngIf=\"dots\">\n <div\n *ngFor=\"let point of value\"\n class=\"t-dot\"\n [style.left.%]=\"getLeft(point[0])\"\n [style.bottom.%]=\"getBottom(point[1])\"\n ></div>\n </ng-container>\n <ng-container *ngIf=\"hasHints\">\n <ng-container *ngFor=\"let point of value; let index = index\">\n <div\n *ngIf=\"value.length > 1\"\n class=\"t-column\"\n tuiHintDirection=\"top-left\"\n [class.t-column_hovered]=\"hovered === index\"\n [tuiHintHost]=\"hintHost\"\n [tuiHint]=\"computedHint && hint\"\n [tuiHintId]=\"getHintId(index)\"\n [style.left.%]=\"getLeft(getX(index))\"\n [style.width.%]=\"getWidth(index)\"\n (mouseenter)=\"onMouseEnter(index)\"\n >\n <div\n class=\"t-line t-line_vertical\"\n [style.left.%]=\"getOffset(index)\"\n ></div>\n <div\n #hintHost\n class=\"t-host\"\n [style.left.%]=\"getOffset(index)\"\n [style.bottom.%]=\"getBottom(point[1])\"\n [tuiFocusable]=\"isFocusable\"\n [tuiDescribedBy]=\"getHintId(index)\"\n ></div>\n </div>\n <div\n *ngIf=\"isFocusable\"\n class=\"t-line t-line_horizontal\"\n [style.bottom.%]=\"getBottom(point[1])\"\n ></div>\n <ng-template #hint>\n <div\n polymorpheus-outlet\n class=\"t-text\"\n [content]=\"computedHint\"\n [context]=\"getContentContext(point)\"\n ></div>\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"getHovered(hovered) as point\">\n <div\n *ngIf=\"xStringify\"\n class=\"t-hint t-hint_x\"\n [style.left.%]=\"getLeft(point[0])\"\n >\n {{xStringify(point[0])}}\n </div>\n <div\n *ngIf=\"yStringify\"\n class=\"t-hint t-hint_y\"\n [style.bottom.%]=\"getBottom(point[1])\"\n >\n {{yStringify(point[1])}}\n </div>\n </ng-container>\n</ng-container>\n",
252
+ template: "<ng-container *tuiLet=\"hovered$ | async as hovered\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"t-svg\"\n focusable=\"false\"\n preserveAspectRatio=\"none\"\n width=\"100%\"\n height=\"100%\"\n [attr.viewBox]=\"viewBox\"\n >\n <defs>\n <linearGradient x1=\"0\" x2=\"0\" y1=\"1\" y2=\"0\" [attr.id]=\"fillId\">\n <stop\n stop-color=\"currentColor\"\n offset=\"0%\"\n stop-opacity=\"0.5\"\n />\n <stop\n stop-color=\"currentColor\"\n offset=\"100%\"\n stop-opacity=\"0\"\n />\n </linearGradient>\n </defs>\n <path stroke=\"none\" [attr.fill]=\"fill\" [attr.d]=\"fillD\" />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n vector-effect=\"non-scaling-stroke\"\n stroke-width=\"2\"\n [attr.d]=\"d\"\n />\n </svg>\n <ng-container *ngIf=\"dots\">\n <div\n *ngFor=\"let point of value\"\n class=\"t-dot\"\n [style.left.%]=\"getLeft(point[0])\"\n [style.bottom.%]=\"getBottom(point[1])\"\n ></div>\n </ng-container>\n <ng-container *ngIf=\"hasHints\">\n <ng-container *ngFor=\"let point of value; let index = index\">\n <div\n *ngIf=\"value.length > 1 || dots\"\n class=\"t-column\"\n tuiHintDirection=\"top-left\"\n [class.t-column_hovered]=\"hovered === index\"\n [tuiHintHost]=\"hintHost\"\n [tuiHint]=\"computedHint && hint\"\n [tuiHintId]=\"getHintId(index)\"\n [style.left.%]=\"getLeft(getX(index))\"\n [style.width.%]=\"getWidth(index)\"\n (mouseenter)=\"onMouseEnter(index)\"\n >\n <div\n class=\"t-line t-line_vertical\"\n [style.left.%]=\"getOffset(index)\"\n ></div>\n <div\n #hintHost\n class=\"t-host\"\n [style.left.%]=\"getOffset(index)\"\n [style.bottom.%]=\"getBottom(point[1])\"\n [tuiFocusable]=\"isFocusable\"\n [tuiDescribedBy]=\"getHintId(index)\"\n ></div>\n </div>\n <div\n *ngIf=\"isFocusable\"\n class=\"t-line t-line_horizontal\"\n [style.bottom.%]=\"getBottom(point[1])\"\n ></div>\n <ng-template #hint>\n <div\n polymorpheus-outlet\n class=\"t-text\"\n [content]=\"computedHint\"\n [context]=\"getContentContext(point)\"\n ></div>\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"getHovered(hovered) as point\">\n <div\n *ngIf=\"xStringify\"\n class=\"t-hint t-hint_x\"\n [style.left.%]=\"getLeft(point[0])\"\n >\n {{xStringify(point[0])}}\n </div>\n <div\n *ngIf=\"yStringify\"\n class=\"t-hint t-hint_y\"\n [style.bottom.%]=\"getBottom(point[1])\"\n >\n {{yStringify(point[1])}}\n </div>\n </ng-container>\n</ng-container>\n",
247
253
  changeDetection: ChangeDetectionStrategy.OnPush,
248
254
  styles: [":host{display:flex;width:100%;height:100%;pointer-events:none}.t-svg{transform:scale(1,-1)}.t-column{position:absolute;top:0;height:100%;pointer-events:auto}.t-dot{position:absolute;width:.375rem;height:.375rem;border-radius:100%;background:currentColor;margin:-.1875rem;box-shadow:0 0 0 2px #fff}.t-host{position:absolute;left:50%;width:.5rem;height:.5rem;border-radius:100%;opacity:0;background:#fff;margin:-.25rem;box-shadow:0 0 0 2px currentColor,0 .0625rem .1875rem .125rem rgba(0,0,0,.1);outline:0;pointer-events:none}.column._hint_hovered .t-host,.column:hover .t-host,.column_hovered .t-host,.t-host:focus{opacity:1}.t-line{position:absolute;opacity:0;background:var(--tui-base-03)}.t-line_vertical{top:0;bottom:0;left:50%;width:.0625rem}.t-line_horizontal{z-index:-1;width:100%;height:.0625rem}:host:not([style]) .column._hint_hovered .t-line,:host:not([style]) .column._hint_hovered+.t-line,:host:not([style]) .column:hover .t-line,:host:not([style]) .column:hover+.t-line,:host[style^='z-index: 0'] .column_hovered .t-line,:host[style^='z-index: 0'] .column_hovered+.t-line{opacity:1}.t-text{white-space:pre-wrap}.t-hint{box-shadow:0 .25rem 1.5rem rgba(0,0,0,.12);font:var(--tui-font-text-xs);position:absolute;height:1.25rem;line-height:1.25rem;margin-bottom:-.625rem;padding:0 .375rem;white-space:nowrap;color:var(--tui-base-09);background:var(--tui-base-01);transform:translate3d(-50%,0,0)}.t-hint_x{bottom:0}.t-hint_y{left:0}"]
249
255
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-addon-charts-components-line-chart.js","sources":["ng://@taiga-ui/addon-charts/components/line-chart/line-chart-hint.directive.ts","ng://@taiga-ui/addon-charts/components/line-chart/line-chart.component.ts","ng://@taiga-ui/addon-charts/components/line-chart/line-chart.module.ts","ng://@taiga-ui/addon-charts/components/line-chart/taiga-ui-addon-charts-components-line-chart.ts"],"sourcesContent":["import {\n ContentChildren,\n Directive,\n ElementRef,\n forwardRef,\n Inject,\n Input,\n NgZone,\n QueryList,\n Renderer2,\n} from '@angular/core';\nimport {ANIMATION_FRAME} from '@ng-web-apis/common';\nimport {\n EMPTY_QUERY,\n TuiContextWithImplicit,\n tuiDefaultProp,\n TuiDestroyService,\n tuiPure,\n tuiZonefree,\n} from '@taiga-ui/cdk';\nimport {HINT_HOVERED_CLASS, TuiPoint} from '@taiga-ui/core';\nimport {PolymorpheusContent} from '@tinkoff/ng-polymorpheus';\nimport {Observable} from 'rxjs';\nimport {\n distinctUntilChanged,\n filter,\n map,\n startWith,\n takeUntil,\n throttleTime,\n} from 'rxjs/operators';\nimport {TuiLineChartComponent} from './line-chart.component';\n\n@Directive({\n selector: '[tuiLineChartHint]',\n providers: [TuiDestroyService],\n})\nexport class TuiLineChartHintDirective {\n @Input('tuiLineChartHint')\n @tuiDefaultProp()\n hint: PolymorpheusContent<TuiContextWithImplicit<ReadonlyArray<TuiPoint>>> = '';\n\n @ContentChildren(forwardRef(() => TuiLineChartComponent))\n private readonly charts: QueryList<TuiLineChartComponent> = EMPTY_QUERY;\n\n @ContentChildren(forwardRef(() => TuiLineChartComponent), {read: ElementRef})\n private readonly chartsRef: QueryList<ElementRef<HTMLElement>> = EMPTY_QUERY;\n\n constructor(\n @Inject(Renderer2) private readonly renderer: Renderer2,\n @Inject(TuiDestroyService) destroy$: TuiDestroyService,\n @Inject(ElementRef) {nativeElement}: ElementRef<HTMLElement>,\n @Inject(NgZone) ngZone: NgZone,\n @Inject(ANIMATION_FRAME) animationFrame$: Observable<number>,\n ) {\n animationFrame$\n .pipe(\n throttleTime(200),\n map(() => !!nativeElement.querySelector(`.${HINT_HOVERED_CLASS}`)),\n startWith(false),\n distinctUntilChanged(),\n filter(v => !v),\n tuiZonefree(ngZone),\n takeUntil(destroy$),\n )\n .subscribe(() => {\n this.charts.forEach(chart => chart.onHovered(NaN));\n });\n }\n\n // _chart is required by TuiLineDaysChartComponent that impersonates this directive\n getContext(\n index: number,\n _chart: TuiLineChartComponent,\n ): TuiContextWithImplicit<ReadonlyArray<TuiPoint>> {\n return this.computeContext(index, this.charts);\n }\n\n // _chart is required by TuiLineDaysChartComponent that impersonates this directive\n raise(index: number, _chart: TuiLineChartComponent) {\n const current = this.charts.map(chart => chart.value[index]);\n const sorted = [...current].sort((a, b) => a[1] - b[1]);\n\n this.charts.forEach(chart => chart.onHovered(index));\n this.chartsRef.forEach(({nativeElement}, index) =>\n this.renderer.setStyle(\n nativeElement,\n 'z-index',\n sorted.indexOf(current[index]),\n ),\n );\n }\n\n @tuiPure\n private computeContext(\n index: number,\n charts: QueryList<TuiLineChartComponent>,\n ): TuiContextWithImplicit<ReadonlyArray<TuiPoint>> {\n return {\n $implicit: charts.map(chart => chart.value[index]),\n };\n }\n}\n","import {Location} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n HostListener,\n Inject,\n Input,\n NgZone,\n Optional,\n} from '@angular/core';\nimport {draw} from '@taiga-ui/addon-charts/utils';\nimport {\n inRange,\n TuiContextWithImplicit,\n tuiDefaultProp,\n TuiIdService,\n tuiPure,\n TuiStringHandler,\n tuiZoneOptimized,\n} from '@taiga-ui/cdk';\nimport {TuiPoint} from '@taiga-ui/core';\nimport {PolymorpheusContent} from '@tinkoff/ng-polymorpheus';\nimport {Observable, Subject} from 'rxjs';\nimport {distinctUntilChanged} from 'rxjs/operators';\nimport {TuiLineChartHintDirective} from './line-chart-hint.directive';\n\nexport function smoothingAssertion(smoothingFactor: number): boolean {\n return inRange(smoothingFactor, 0, 100);\n}\n\nconst SMOOTHING_MESSAGE = 'smoothingFactor must be between 0 and 100';\n\n@Component({\n selector: 'tui-line-chart',\n templateUrl: './line-chart.template.html',\n styleUrls: ['./line-chart.style.less'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TuiLineChartComponent {\n @Input('value')\n @tuiDefaultProp()\n set valueSetter(value: ReadonlyArray<TuiPoint>) {\n this.value = value.filter(item => !item.some(isNaN));\n }\n\n @Input()\n @tuiDefaultProp()\n x = 0;\n\n @Input()\n @tuiDefaultProp()\n y = 0;\n\n @Input()\n @tuiDefaultProp()\n width = 0;\n\n @Input()\n @tuiDefaultProp()\n height = 0;\n\n @Input()\n @tuiDefaultProp(smoothingAssertion, SMOOTHING_MESSAGE)\n smoothingFactor = 0;\n\n @Input()\n @tuiDefaultProp()\n hintContent: PolymorpheusContent<TuiContextWithImplicit<TuiPoint>> = '';\n\n @Input()\n @tuiDefaultProp()\n xStringify: TuiStringHandler<number> | null = null;\n\n @Input()\n @tuiDefaultProp()\n yStringify: TuiStringHandler<number> | null = null;\n\n @Input()\n @tuiDefaultProp()\n filled = false;\n\n @Input()\n @tuiDefaultProp()\n dots = false;\n\n value: ReadonlyArray<TuiPoint> = [];\n\n private readonly _hovered$ = new Subject<number>();\n\n private readonly autoIdString: string;\n\n constructor(\n @Inject(TuiIdService) idService: TuiIdService,\n @Inject(NgZone) private readonly ngZone: NgZone,\n @Inject(Location) private readonly locationRef: Location,\n @Optional()\n @Inject(TuiLineChartHintDirective)\n private readonly hintDirective: TuiLineChartHintDirective | null,\n ) {\n this.autoIdString = idService.generate();\n }\n\n @tuiPure\n get hovered$(): Observable<number> {\n return this._hovered$.pipe(distinctUntilChanged(), tuiZoneOptimized(this.ngZone));\n }\n\n get fillId(): string {\n return 'tui-line-chart-' + this.autoIdString;\n }\n\n get fill(): string {\n return this.filled\n ? `url(${this.locationRef.prepareExternalUrl(this.locationRef.path())}#${\n this.fillId\n })`\n : 'none';\n }\n\n get viewBox(): string {\n return `${this.x} ${this.y} ${this.width} ${this.height}`;\n }\n\n get d(): string {\n return this.getD(this.value, this.smoothingFactor);\n }\n\n get fillD(): string {\n return this.value.length\n ? this.d + `V ${this.y} H ${this.value[0][0]} V ${this.value[0][1]}`\n : this.d;\n }\n\n get computedHint():\n | PolymorpheusContent<TuiContextWithImplicit<TuiPoint>>\n | PolymorpheusContent<TuiContextWithImplicit<ReadonlyArray<TuiPoint>>> {\n return this.hintDirective ? this.hintDirective.hint : this.hintContent;\n }\n\n get isFocusable(): boolean {\n return !this.hintDirective && this.hasHints;\n }\n\n get hasHints(): boolean {\n return !!this.xStringify || !!this.yStringify || !!this.computedHint;\n }\n\n getX(index: number): number {\n return index\n ? (this.value[index - 1][0] + this.value[index][0]) / 2\n : 2 * this.value[0][0] - this.getX(1);\n }\n\n getWidth(index: number): number {\n return (100 * this.computeWidth(index)) / this.width;\n }\n\n getHintId(index: number): string {\n return `${this.autoIdString}_${index}`;\n }\n\n getContentContext(\n $implicit: TuiPoint,\n ):\n | TuiContextWithImplicit<TuiPoint>\n | TuiContextWithImplicit<ReadonlyArray<TuiPoint>> {\n return this.hintDirective\n ? this.hintDirective.getContext(this.value.indexOf($implicit), this)\n : {$implicit};\n }\n\n getHovered(hovered: number): TuiPoint | null {\n // This checks for NaN and null too since async pipe returns null before first item\n return Number.isInteger(hovered) ? this.value[hovered] : null;\n }\n\n getBottom(y: number): number {\n return (100 * (y - this.y)) / this.height;\n }\n\n getLeft(x: number): number {\n return (100 * (x - this.x)) / this.width;\n }\n\n getOffset(x: number): number {\n return (100 * (this.value[x][0] - this.getX(x))) / this.computeWidth(x);\n }\n\n onMouseEnter(index: number) {\n if (this.hintDirective) {\n this.hintDirective.raise(index, this);\n } else {\n this.onHovered(index);\n }\n }\n\n onHovered(index: number) {\n this._hovered$.next(index);\n }\n\n @HostListener('mouseleave')\n onMouseLeave() {\n if (!this.hintDirective) {\n this.onHovered(NaN);\n }\n }\n\n @tuiPure\n private getD(value: ReadonlyArray<TuiPoint>, smoothingFactor: number): string {\n return value.reduce(\n (d, point, index) =>\n index ? `${d} ${draw(value, index, smoothingFactor)}` : `M ${point}`,\n '',\n );\n }\n\n private computeWidth(index: number): number {\n return index === this.value.length - 1\n ? 2 * (this.value[index][0] - this.getX(index))\n : this.getX(index + 1) - this.getX(index);\n }\n}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {TuiFocusableModule, TuiLetModule} from '@taiga-ui/cdk';\nimport {TuiDescribedByModule, TuiHintModule} from '@taiga-ui/core';\nimport {PolymorpheusModule} from '@tinkoff/ng-polymorpheus';\nimport {TuiLineChartHintDirective} from './line-chart-hint.directive';\nimport {TuiLineChartComponent} from './line-chart.component';\n\n@NgModule({\n imports: [\n CommonModule,\n PolymorpheusModule,\n TuiHintModule,\n TuiFocusableModule,\n TuiDescribedByModule,\n TuiLetModule,\n ],\n declarations: [TuiLineChartComponent, TuiLineChartHintDirective],\n exports: [TuiLineChartComponent, TuiLineChartHintDirective],\n})\nexport class TuiLineChartModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"taiga-ui-addon-charts-components-line-chart.js","sources":["ng://@taiga-ui/addon-charts/components/line-chart/line-chart-hint.directive.ts","ng://@taiga-ui/addon-charts/components/line-chart/line-chart.component.ts","ng://@taiga-ui/addon-charts/components/line-chart/line-chart.module.ts","ng://@taiga-ui/addon-charts/components/line-chart/taiga-ui-addon-charts-components-line-chart.ts"],"sourcesContent":["import {\n ContentChildren,\n Directive,\n ElementRef,\n forwardRef,\n Inject,\n Input,\n NgZone,\n QueryList,\n Renderer2,\n} from '@angular/core';\nimport {ANIMATION_FRAME} from '@ng-web-apis/common';\nimport {\n EMPTY_QUERY,\n TuiContextWithImplicit,\n tuiDefaultProp,\n TuiDestroyService,\n tuiPure,\n tuiZonefree,\n} from '@taiga-ui/cdk';\nimport {HINT_HOVERED_CLASS, TuiPoint} from '@taiga-ui/core';\nimport {PolymorpheusContent} from '@tinkoff/ng-polymorpheus';\nimport {Observable} from 'rxjs';\nimport {\n distinctUntilChanged,\n filter,\n map,\n startWith,\n takeUntil,\n throttleTime,\n} from 'rxjs/operators';\nimport {TuiLineChartComponent} from './line-chart.component';\n\n@Directive({\n selector: '[tuiLineChartHint]',\n providers: [TuiDestroyService],\n})\nexport class TuiLineChartHintDirective {\n @Input('tuiLineChartHint')\n @tuiDefaultProp()\n hint: PolymorpheusContent<TuiContextWithImplicit<ReadonlyArray<TuiPoint>>> = '';\n\n @ContentChildren(forwardRef(() => TuiLineChartComponent))\n private readonly charts: QueryList<TuiLineChartComponent> = EMPTY_QUERY;\n\n @ContentChildren(forwardRef(() => TuiLineChartComponent), {read: ElementRef})\n private readonly chartsRef: QueryList<ElementRef<HTMLElement>> = EMPTY_QUERY;\n\n constructor(\n @Inject(Renderer2) private readonly renderer: Renderer2,\n @Inject(TuiDestroyService) destroy$: TuiDestroyService,\n @Inject(ElementRef) {nativeElement}: ElementRef<HTMLElement>,\n @Inject(NgZone) ngZone: NgZone,\n @Inject(ANIMATION_FRAME) animationFrame$: Observable<number>,\n ) {\n animationFrame$\n .pipe(\n throttleTime(200),\n map(() => !!nativeElement.querySelector(`.${HINT_HOVERED_CLASS}`)),\n startWith(false),\n distinctUntilChanged(),\n filter(v => !v),\n tuiZonefree(ngZone),\n takeUntil(destroy$),\n )\n .subscribe(() => {\n this.charts.forEach(chart => chart.onHovered(NaN));\n });\n }\n\n // _chart is required by TuiLineDaysChartComponent that impersonates this directive\n getContext(\n index: number,\n _chart: TuiLineChartComponent,\n ): TuiContextWithImplicit<ReadonlyArray<TuiPoint>> {\n return this.computeContext(index, this.charts);\n }\n\n // _chart is required by TuiLineDaysChartComponent that impersonates this directive\n raise(index: number, _chart: TuiLineChartComponent) {\n const current = this.charts.map(chart => chart.value[index]);\n const sorted = [...current].sort((a, b) => a[1] - b[1]);\n\n this.charts.forEach(chart => chart.onHovered(index));\n this.chartsRef.forEach(({nativeElement}, index) =>\n this.renderer.setStyle(\n nativeElement,\n 'z-index',\n sorted.indexOf(current[index]),\n ),\n );\n }\n\n @tuiPure\n private computeContext(\n index: number,\n charts: QueryList<TuiLineChartComponent>,\n ): TuiContextWithImplicit<ReadonlyArray<TuiPoint>> {\n return {\n $implicit: charts.map(chart => chart.value[index]),\n };\n }\n}\n","import {Location} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n HostListener,\n Inject,\n Input,\n NgZone,\n Optional,\n} from '@angular/core';\nimport {draw} from '@taiga-ui/addon-charts/utils';\nimport {\n inRange,\n TuiContextWithImplicit,\n tuiDefaultProp,\n TuiIdService,\n tuiPure,\n TuiStringHandler,\n tuiZoneOptimized,\n} from '@taiga-ui/cdk';\nimport {TuiPoint} from '@taiga-ui/core';\nimport {PolymorpheusContent} from '@tinkoff/ng-polymorpheus';\nimport {Observable, Subject} from 'rxjs';\nimport {distinctUntilChanged} from 'rxjs/operators';\nimport {TuiLineChartHintDirective} from './line-chart-hint.directive';\n\nexport function smoothingAssertion(smoothingFactor: number): boolean {\n return inRange(smoothingFactor, 0, 100);\n}\n\nconst SMOOTHING_MESSAGE = 'smoothingFactor must be between 0 and 100';\n\n@Component({\n selector: 'tui-line-chart',\n templateUrl: './line-chart.template.html',\n styleUrls: ['./line-chart.style.less'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TuiLineChartComponent {\n @Input('value')\n @tuiDefaultProp()\n set valueSetter(value: ReadonlyArray<TuiPoint>) {\n this.value = value.filter(item => !item.some(isNaN));\n }\n\n @Input()\n @tuiDefaultProp()\n x = 0;\n\n @Input()\n @tuiDefaultProp()\n y = 0;\n\n @Input()\n @tuiDefaultProp()\n width = 0;\n\n @Input()\n @tuiDefaultProp()\n height = 0;\n\n @Input()\n @tuiDefaultProp(smoothingAssertion, SMOOTHING_MESSAGE)\n smoothingFactor = 0;\n\n @Input()\n @tuiDefaultProp()\n hintContent: PolymorpheusContent<TuiContextWithImplicit<TuiPoint>> = '';\n\n @Input()\n @tuiDefaultProp()\n xStringify: TuiStringHandler<number> | null = null;\n\n @Input()\n @tuiDefaultProp()\n yStringify: TuiStringHandler<number> | null = null;\n\n @Input()\n @tuiDefaultProp()\n filled = false;\n\n @Input()\n @tuiDefaultProp()\n dots = false;\n\n value: ReadonlyArray<TuiPoint> = [];\n\n private readonly _hovered$ = new Subject<number>();\n\n private readonly autoIdString: string;\n\n constructor(\n @Inject(TuiIdService) idService: TuiIdService,\n @Inject(NgZone) private readonly ngZone: NgZone,\n @Inject(Location) private readonly locationRef: Location,\n @Optional()\n @Inject(TuiLineChartHintDirective)\n private readonly hintDirective: TuiLineChartHintDirective | null,\n ) {\n this.autoIdString = idService.generate();\n }\n\n @tuiPure\n get hovered$(): Observable<number> {\n return this._hovered$.pipe(distinctUntilChanged(), tuiZoneOptimized(this.ngZone));\n }\n\n get fillId(): string {\n return 'tui-line-chart-' + this.autoIdString;\n }\n\n get fill(): string {\n return this.filled\n ? `url(${this.locationRef.prepareExternalUrl(this.locationRef.path())}#${\n this.fillId\n })`\n : 'none';\n }\n\n get viewBox(): string {\n return `${this.x} ${this.y} ${this.width} ${this.height}`;\n }\n\n get d(): string {\n return this.getD(this.value, this.smoothingFactor);\n }\n\n get fillD(): string {\n return this.value.length\n ? this.d + `V ${this.y} H ${this.value[0][0]} V ${this.value[0][1]}`\n : this.d;\n }\n\n get computedHint():\n | PolymorpheusContent<TuiContextWithImplicit<TuiPoint>>\n | PolymorpheusContent<TuiContextWithImplicit<ReadonlyArray<TuiPoint>>> {\n return this.hintDirective ? this.hintDirective.hint : this.hintContent;\n }\n\n get isFocusable(): boolean {\n return !this.hintDirective && this.hasHints;\n }\n\n get hasHints(): boolean {\n return !!this.xStringify || !!this.yStringify || !!this.computedHint;\n }\n\n getX(index: number): number {\n if (this.isSinglePoint) {\n return this.value[0][0] / 2;\n }\n\n return index\n ? (this.value[index - 1][0] + this.value[index][0]) / 2\n : 2 * this.value[0][0] - this.getX(1);\n }\n\n getWidth(index: number): number {\n return (100 * this.computeWidth(index)) / this.width;\n }\n\n getHintId(index: number): string {\n return `${this.autoIdString}_${index}`;\n }\n\n getContentContext(\n $implicit: TuiPoint,\n ):\n | TuiContextWithImplicit<TuiPoint>\n | TuiContextWithImplicit<ReadonlyArray<TuiPoint>> {\n return this.hintDirective\n ? this.hintDirective.getContext(this.value.indexOf($implicit), this)\n : {$implicit};\n }\n\n getHovered(hovered: number): TuiPoint | null {\n // This checks for NaN and null too since async pipe returns null before first item\n return Number.isInteger(hovered) ? this.value[hovered] : null;\n }\n\n getBottom(y: number): number {\n return (100 * (y - this.y)) / this.height;\n }\n\n getLeft(x: number): number {\n return (100 * (x - this.x)) / this.width;\n }\n\n getOffset(x: number): number {\n return (100 * (this.value[x][0] - this.getX(x))) / this.computeWidth(x);\n }\n\n onMouseEnter(index: number) {\n if (this.hintDirective) {\n this.hintDirective.raise(index, this);\n } else {\n this.onHovered(index);\n }\n }\n\n onHovered(index: number) {\n this._hovered$.next(index);\n }\n\n @HostListener('mouseleave')\n onMouseLeave() {\n if (!this.hintDirective) {\n this.onHovered(NaN);\n }\n }\n\n private get isSinglePoint(): boolean {\n return this.value.length === 1;\n }\n\n @tuiPure\n private getD(value: ReadonlyArray<TuiPoint>, smoothingFactor: number): string {\n return value.reduce(\n (d, point, index) =>\n index ? `${d} ${draw(value, index, smoothingFactor)}` : `M ${point}`,\n '',\n );\n }\n\n private computeWidth(index: number): number {\n return index === this.value.length - 1\n ? 2 * (this.value[index][0] - this.getX(index))\n : this.getX(index + 1) - this.getX(index);\n }\n}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {TuiFocusableModule, TuiLetModule} from '@taiga-ui/cdk';\nimport {TuiDescribedByModule, TuiHintModule} from '@taiga-ui/core';\nimport {PolymorpheusModule} from '@tinkoff/ng-polymorpheus';\nimport {TuiLineChartHintDirective} from './line-chart-hint.directive';\nimport {TuiLineChartComponent} from './line-chart.component';\n\n@NgModule({\n imports: [\n CommonModule,\n PolymorpheusModule,\n TuiHintModule,\n TuiFocusableModule,\n TuiDescribedByModule,\n TuiLetModule,\n ],\n declarations: [TuiLineChartComponent, TuiLineChartHintDirective],\n exports: [TuiLineChartComponent, TuiLineChartHintDirective],\n})\nexport class TuiLineChartModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -175,6 +175,9 @@ var TuiLineChartComponent = /** @class */ (function () {
175
175
  configurable: true
176
176
  });
177
177
  TuiLineChartComponent.prototype.getX = function (index) {
178
+ if (this.isSinglePoint) {
179
+ return this.value[0][0] / 2;
180
+ }
178
181
  return index
179
182
  ? (this.value[index - 1][0] + this.value[index][0]) / 2
180
183
  : 2 * this.value[0][0] - this.getX(1);
@@ -219,6 +222,13 @@ var TuiLineChartComponent = /** @class */ (function () {
219
222
  this.onHovered(NaN);
220
223
  }
221
224
  };
225
+ Object.defineProperty(TuiLineChartComponent.prototype, "isSinglePoint", {
226
+ get: function () {
227
+ return this.value.length === 1;
228
+ },
229
+ enumerable: true,
230
+ configurable: true
231
+ });
222
232
  TuiLineChartComponent.prototype.getD = function (value, smoothingFactor) {
223
233
  return value.reduce(function (d, point, index) {
224
234
  return index ? d + " " + draw(value, index, smoothingFactor) : "M " + point;
@@ -291,7 +301,7 @@ var TuiLineChartComponent = /** @class */ (function () {
291
301
  TuiLineChartComponent = __decorate([
292
302
  Component({
293
303
  selector: 'tui-line-chart',
294
- template: "<ng-container *tuiLet=\"hovered$ | async as hovered\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"t-svg\"\n focusable=\"false\"\n preserveAspectRatio=\"none\"\n width=\"100%\"\n height=\"100%\"\n [attr.viewBox]=\"viewBox\"\n >\n <defs>\n <linearGradient x1=\"0\" x2=\"0\" y1=\"1\" y2=\"0\" [attr.id]=\"fillId\">\n <stop\n stop-color=\"currentColor\"\n offset=\"0%\"\n stop-opacity=\"0.5\"\n />\n <stop\n stop-color=\"currentColor\"\n offset=\"100%\"\n stop-opacity=\"0\"\n />\n </linearGradient>\n </defs>\n <path stroke=\"none\" [attr.fill]=\"fill\" [attr.d]=\"fillD\" />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n vector-effect=\"non-scaling-stroke\"\n stroke-width=\"2\"\n [attr.d]=\"d\"\n />\n </svg>\n <ng-container *ngIf=\"dots\">\n <div\n *ngFor=\"let point of value\"\n class=\"t-dot\"\n [style.left.%]=\"getLeft(point[0])\"\n [style.bottom.%]=\"getBottom(point[1])\"\n ></div>\n </ng-container>\n <ng-container *ngIf=\"hasHints\">\n <ng-container *ngFor=\"let point of value; let index = index\">\n <div\n *ngIf=\"value.length > 1\"\n class=\"t-column\"\n tuiHintDirection=\"top-left\"\n [class.t-column_hovered]=\"hovered === index\"\n [tuiHintHost]=\"hintHost\"\n [tuiHint]=\"computedHint && hint\"\n [tuiHintId]=\"getHintId(index)\"\n [style.left.%]=\"getLeft(getX(index))\"\n [style.width.%]=\"getWidth(index)\"\n (mouseenter)=\"onMouseEnter(index)\"\n >\n <div\n class=\"t-line t-line_vertical\"\n [style.left.%]=\"getOffset(index)\"\n ></div>\n <div\n #hintHost\n class=\"t-host\"\n [style.left.%]=\"getOffset(index)\"\n [style.bottom.%]=\"getBottom(point[1])\"\n [tuiFocusable]=\"isFocusable\"\n [tuiDescribedBy]=\"getHintId(index)\"\n ></div>\n </div>\n <div\n *ngIf=\"isFocusable\"\n class=\"t-line t-line_horizontal\"\n [style.bottom.%]=\"getBottom(point[1])\"\n ></div>\n <ng-template #hint>\n <div\n polymorpheus-outlet\n class=\"t-text\"\n [content]=\"computedHint\"\n [context]=\"getContentContext(point)\"\n ></div>\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"getHovered(hovered) as point\">\n <div\n *ngIf=\"xStringify\"\n class=\"t-hint t-hint_x\"\n [style.left.%]=\"getLeft(point[0])\"\n >\n {{xStringify(point[0])}}\n </div>\n <div\n *ngIf=\"yStringify\"\n class=\"t-hint t-hint_y\"\n [style.bottom.%]=\"getBottom(point[1])\"\n >\n {{yStringify(point[1])}}\n </div>\n </ng-container>\n</ng-container>\n",
304
+ template: "<ng-container *tuiLet=\"hovered$ | async as hovered\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"t-svg\"\n focusable=\"false\"\n preserveAspectRatio=\"none\"\n width=\"100%\"\n height=\"100%\"\n [attr.viewBox]=\"viewBox\"\n >\n <defs>\n <linearGradient x1=\"0\" x2=\"0\" y1=\"1\" y2=\"0\" [attr.id]=\"fillId\">\n <stop\n stop-color=\"currentColor\"\n offset=\"0%\"\n stop-opacity=\"0.5\"\n />\n <stop\n stop-color=\"currentColor\"\n offset=\"100%\"\n stop-opacity=\"0\"\n />\n </linearGradient>\n </defs>\n <path stroke=\"none\" [attr.fill]=\"fill\" [attr.d]=\"fillD\" />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n vector-effect=\"non-scaling-stroke\"\n stroke-width=\"2\"\n [attr.d]=\"d\"\n />\n </svg>\n <ng-container *ngIf=\"dots\">\n <div\n *ngFor=\"let point of value\"\n class=\"t-dot\"\n [style.left.%]=\"getLeft(point[0])\"\n [style.bottom.%]=\"getBottom(point[1])\"\n ></div>\n </ng-container>\n <ng-container *ngIf=\"hasHints\">\n <ng-container *ngFor=\"let point of value; let index = index\">\n <div\n *ngIf=\"value.length > 1 || dots\"\n class=\"t-column\"\n tuiHintDirection=\"top-left\"\n [class.t-column_hovered]=\"hovered === index\"\n [tuiHintHost]=\"hintHost\"\n [tuiHint]=\"computedHint && hint\"\n [tuiHintId]=\"getHintId(index)\"\n [style.left.%]=\"getLeft(getX(index))\"\n [style.width.%]=\"getWidth(index)\"\n (mouseenter)=\"onMouseEnter(index)\"\n >\n <div\n class=\"t-line t-line_vertical\"\n [style.left.%]=\"getOffset(index)\"\n ></div>\n <div\n #hintHost\n class=\"t-host\"\n [style.left.%]=\"getOffset(index)\"\n [style.bottom.%]=\"getBottom(point[1])\"\n [tuiFocusable]=\"isFocusable\"\n [tuiDescribedBy]=\"getHintId(index)\"\n ></div>\n </div>\n <div\n *ngIf=\"isFocusable\"\n class=\"t-line t-line_horizontal\"\n [style.bottom.%]=\"getBottom(point[1])\"\n ></div>\n <ng-template #hint>\n <div\n polymorpheus-outlet\n class=\"t-text\"\n [content]=\"computedHint\"\n [context]=\"getContentContext(point)\"\n ></div>\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"getHovered(hovered) as point\">\n <div\n *ngIf=\"xStringify\"\n class=\"t-hint t-hint_x\"\n [style.left.%]=\"getLeft(point[0])\"\n >\n {{xStringify(point[0])}}\n </div>\n <div\n *ngIf=\"yStringify\"\n class=\"t-hint t-hint_y\"\n [style.bottom.%]=\"getBottom(point[1])\"\n >\n {{yStringify(point[1])}}\n </div>\n </ng-container>\n</ng-container>\n",
295
305
  changeDetection: ChangeDetectionStrategy.OnPush,
296
306
  styles: [":host{display:flex;width:100%;height:100%;pointer-events:none}.t-svg{transform:scale(1,-1)}.t-column{position:absolute;top:0;height:100%;pointer-events:auto}.t-dot{position:absolute;width:.375rem;height:.375rem;border-radius:100%;background:currentColor;margin:-.1875rem;box-shadow:0 0 0 2px #fff}.t-host{position:absolute;left:50%;width:.5rem;height:.5rem;border-radius:100%;opacity:0;background:#fff;margin:-.25rem;box-shadow:0 0 0 2px currentColor,0 .0625rem .1875rem .125rem rgba(0,0,0,.1);outline:0;pointer-events:none}.column._hint_hovered .t-host,.column:hover .t-host,.column_hovered .t-host,.t-host:focus{opacity:1}.t-line{position:absolute;opacity:0;background:var(--tui-base-03)}.t-line_vertical{top:0;bottom:0;left:50%;width:.0625rem}.t-line_horizontal{z-index:-1;width:100%;height:.0625rem}:host:not([style]) .column._hint_hovered .t-line,:host:not([style]) .column._hint_hovered+.t-line,:host:not([style]) .column:hover .t-line,:host:not([style]) .column:hover+.t-line,:host[style^='z-index: 0'] .column_hovered .t-line,:host[style^='z-index: 0'] .column_hovered+.t-line{opacity:1}.t-text{white-space:pre-wrap}.t-hint{box-shadow:0 .25rem 1.5rem rgba(0,0,0,.12);font:var(--tui-font-text-xs);position:absolute;height:1.25rem;line-height:1.25rem;margin-bottom:-.625rem;padding:0 .375rem;white-space:nowrap;color:var(--tui-base-09);background:var(--tui-base-01);transform:translate3d(-50%,0,0)}.t-hint_x{bottom:0}.t-hint_y{left:0}"]
297
307
  }),