@rivet-health/design-system 34.1.1 → 34.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/input/date-range/date-range.component.mjs +2 -2
- package/esm2020/lib/overlay/callout/tooltip/tooltip.directive.mjs +16 -1
- package/esm2020/lib/visualization/chart/chart.component.mjs +11 -6
- package/esm2020/lib/visualization/chart/chart.mjs +35 -18
- package/fesm2015/rivet-health-design-system.mjs +62 -24
- package/fesm2015/rivet-health-design-system.mjs.map +1 -1
- package/fesm2020/rivet-health-design-system.mjs +61 -24
- package/fesm2020/rivet-health-design-system.mjs.map +1 -1
- package/lib/overlay/callout/tooltip/tooltip.directive.d.ts +4 -1
- package/lib/visualization/chart/chart.component.d.ts +4 -1
- package/package.json +1 -1
|
@@ -200,10 +200,10 @@ export class DateRangeComponent extends InputLabelComponent {
|
|
|
200
200
|
}
|
|
201
201
|
}
|
|
202
202
|
DateRangeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DateRangeComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
203
|
-
DateRangeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DateRangeComponent, selector: "riv-date-range", inputs: { showPresets: "showPresets", min: "min", max: "max", value: "value", placeholder: "placeholder", disabled: "disabled", alternativePresetList: "alternativePresetList" }, outputs: { valueChange: "valueChange" }, queries: [{ propertyName: "triggerTemplate", first: true, predicate: ["trigger"], descendants: true }], viewQueries: [{ propertyName: "customTriggerButton", first: true, predicate: ["customTriggerButton"], descendants: true, read: ElementRef }, { propertyName: "standardTriggerButton", first: true, predicate: ["standardTriggerButton"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"triggerTemplate; else standardTrigger\">\n <button\n #customTriggerButton\n (click)=\"open$.next(true)\"\n [disabled]=\"disabled$ | async\"\n type=\"button\"\n >\n <ng-container\n [ngTemplateOutlet]=\"triggerTemplate\"\n [ngTemplateOutletContext]=\"{ open: open$ | async }\"\n ></ng-container>\n </button>\n</ng-container>\n<ng-template #standardTrigger>\n <riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [state]=\"state\"\n [errorMessage]=\"errorMessage\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n >\n <button\n #standardTriggerButton\n class=\"trigger\"\n [class.warning]=\"state === 'warning'\"\n [class.error]=\"state === 'error'\"\n (click)=\"open$.next(true)\"\n [disabled]=\"disabled$ | async\"\n type=\"button\"\n >\n <ng-container\n *ngIf=\"displayValue$ | async; else placeholderValue; let display\"\n >\n <span class=\"value\">{{ display }}</span>\n </ng-container>\n <ng-template #placeholderValue>\n <span class=\"value placeholder\">{{ placeholder$ | async }}</span>\n </ng-template>\n <span class=\"chevron\">\n <riv-icon [name]=\"'Calendar'\" [size]=\"16\"></riv-icon>\n </span>\n </button>\n </riv-input-label>\n</ng-template>\n\n<ng-template\n #self\n [ngTemplateOutlet]=\"self\"\n let-inputValue\n [ngTemplateOutletContext]=\"{ $implicit: (distinctValue$ | async) }\"\n>\n <ng-container *ngIf=\"open$ | async\">\n <riv-callout\n *riv-overlay\n [anchor]=\"getTrigger()\"\n [showCaret]=\"false\"\n [theme]=\"'light'\"\n [allowedPositions]=\"[\n 'top-left',\n 'top-right',\n 'bottom-right',\n 'bottom-left'\n ]\"\n [preferredPosition]=\"'bottom-right'\"\n (close)=\"open$.next(false); userSelectedDate$.next(inputValue)\"\n >\n <div class=\"content\" [class.include-preset]=\"showPresets\">\n <div *ngIf=\"showPresets\" class=\"presets\">\n <riv-simple-select\n [label]=\"'Date presets'\"\n [filterabilityOptions]=\"{ enabled: true, placeholder: 'Search' }\"\n [orderBy]=\"'source'\"\n [optionGroups]=\"\n (filteredPresetOptions$ | async) ?? [] | rivOptionGroup\n \"\n [selectedOption]=\"selectedPreset$ | async\"\n (selectedOptionChange)=\"userSelectedPreset$.next($event)\"\n >\n <ng-template #option let-node=\"node\">\n <ng-template\n #self\n [ngTemplateOutlet]=\"self\"\n let-isFavorite\n [ngTemplateOutletContext]=\"{\n $implicit: (favoritePresetIds$ | async)?.includes(node.id)\n }\"\n >\n <div class=\"preset\" [class.favorite]=\"isFavorite\">\n <div class=\"description\">\n <riv-highlight\n class=\"title\"\n [text]=\"node.title\"\n [indices]=\"node.titleHighlightIndices || []\"\n ></riv-highlight>\n <riv-highlight\n class=\"subtitle\"\n [text]=\"node.subtitle\"\n [indices]=\"node.subtitleHighlightIndices || []\"\n ></riv-highlight>\n </div>\n <button\n (click)=\"\n setFavorite(node, !isFavorite); $event.stopPropagation()\n \"\n type=\"button\"\n >\n <riv-icon\n [name]=\"isFavorite ? 'HeartActive' : 'Heart'\"\n [size]=\"16\"\n [rivTooltip]=\"'Mark as favorite'\"\n ></riv-icon>\n </button>\n </div>\n </ng-template>\n </ng-template>\n </riv-simple-select>\n <ng-template\n #self\n [ngTemplateOutlet]=\"self\"\n let-favorites\n [ngTemplateOutletContext]=\"{ $implicit: favoritePresets$ | async }\"\n >\n <riv-input-label *ngIf=\"favorites.length\" [label]=\"'Favorites'\">\n <div class=\"shortcuts\">\n <button\n *ngFor=\"let favorite of favorites\"\n class=\"shortcut\"\n [class.active]=\"(selectedPreset$ | async)?.id === favorite.id\"\n (click)=\"userSelectedPreset$.next(favorite)\"\n type=\"button\"\n >\n <span class=\"title\">{{ favorite.title }}</span>\n <button\n (click)=\"setFavorite(favorite, false)\"\n [rivTooltip]=\"'Remove favorite'\"\n type=\"button\"\n >\n <riv-icon [name]=\"'HeartActive'\" [size]=\"16\"></riv-icon>\n </button>\n </button>\n </div>\n </riv-input-label>\n </ng-template>\n </div>\n\n <div class=\"calendars\">\n <riv-calendar\n class=\"left\"\n [activeYearMonth]=\"(leftActiveYearMonth$ | async) || TODAY\"\n (activeYearMonthChange)=\"userLeftActiveYearMonth$.next($event)\"\n [displayMin]=\"(min$ | async) || TODAY\"\n [displayMax]=\"(max$ | async) || TODAY\"\n [selectableMin]=\"(leftMin$ | async) || TODAY\"\n [selectableMax]=\"(leftMax$ | async) || TODAY\"\n [omitRange]=\"(leftOmitRange$ | async) || [TODAY, TODAY]\"\n [selectedValue]=\"(selectedValue$ | async) || TODAY\"\n (dateSelect)=\"userSelectedDate$.next($event)\"\n ></riv-calendar>\n <riv-calendar\n class=\"right\"\n [activeYearMonth]=\"(rightActiveYearMonth$ | async) || TODAY\"\n (activeYearMonthChange)=\"userRightActiveYearMonth$.next($event)\"\n [displayMin]=\"(min$ | async) || TODAY\"\n [displayMax]=\"(max$ | async) || TODAY\"\n [selectableMin]=\"(rightMin$ | async) || TODAY\"\n [selectableMax]=\"(rightMax$ | async) || TODAY\"\n [selectedValue]=\"(selectedValue$ | async) || TODAY\"\n (dateSelect)=\"userSelectedDate$.next($event)\"\n ></riv-calendar>\n </div>\n\n <footer class=\"buttons\">\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n (click)=\"userSelectedDate$.next(undefined)\"\n type=\"button\"\n >\n Clear\n </button>\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'primary'\"\n (click)=\"open$.next(false)\"\n type=\"button\"\n >\n Done\n </button>\n </footer>\n </div>\n </riv-callout>\n </ng-container>\n</ng-template>\n", styles: [".trigger{width:100%;border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-small);display:flex;gap:var(--size-small)}.trigger:focus{outline:none;border:var(--border-width) solid var(--purp-60)}.trigger:disabled{color:var(--type-light-disabled);background-color:var(--surface-light-1)}.value{font-size:var(--type-2-font-size);line-height:var(--type-2-line-height-0);color:var(--type-light-high-contrast);padding:var(--size-small);flex-grow:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:pre}.value.placeholder{color:var(--type-light-disabled)}.chevron{display:flex;justify-content:center;align-items:center;padding:var(--size-small)}.trigger.warning{border-color:var(--surface-dark-caution)}.trigger.error{border-color:var(--surface-dark-danger);box-shadow:inset 0 0 0 var(--border-width-large) var(--surface-dark-danger)}.content{display:inline-grid;grid-template-rows:1fr auto}.content.include-preset{grid-template-columns:calc(var(--base-grid-size) * 50) 1fr 1fr}.presets{grid-area:1 / 1 / 3 / 2;background-color:var(--surface-light-1);padding:var(--size-xlarge) var(--size-large);border-right:var(--border-width) solid var(--border-light);display:flex;flex-direction:column;gap:var(--size-medium)}.preset{display:flex;transition:background-color var(--short-transition)}.preset:hover{background-color:var(--surface-light-2)}.preset button{color:transparent;transition:color var(--short-transition);padding:var(--size-medium) var(--size-large) var(--size-medium) var(--size-small);cursor:pointer}.preset:hover button{color:var(--type-light-low-contrast)}.preset button:hover{color:var(--type-light-high-contrast)}.preset.favorite button{color:var(--type-light-link)}.preset .description{flex-grow:1;padding:var(--size-medium) var(--size-small) var(--size-medium) var(--size-medium)}.preset .title{display:block;font-size:var(--type-2-font-size);line-height:var(--type-2-line-height-1)}.preset .subtitle{display:block;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-1);color:var(--type-light-low-contrast)}.shortcuts{display:flex;flex-direction:column;gap:var(--size-xsmall);overflow-y:auto}.shortcut{display:flex;align-items:center;padding:var(--size-small) var(--size-small) var(--size-small) var(--size-medium);gap:var(--size-small);border-radius:var(--border-radius-small);transition:background-color var(--short-transition);cursor:pointer}.shortcut:hover{background-color:var(--black-20)}.shortcut.active{background-color:var(--baloo-05)}.shortcut .title{flex-grow:1;text-align:left;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-2)}.shortcut button{color:transparent;transition:color var(--short-transition);cursor:pointer}.shortcut:hover button{color:var(--type-light-link)}.calendars{grid-column:2 / 4;display:grid;grid-template-columns:subgrid;grid-template-rows:subgrid;padding:var(--size-large)}.left{grid-area:1 / 1 / 2 / 2;padding-right:var(--size-large);border-right:var(--border-width) solid var(--border-light)}.right{padding-left:var(--size-large);grid-area:1 / 2 / 2 / 3}.buttons{grid-area:2 / 2 / 3 / 4;padding:var(--size-small);display:flex;justify-content:space-between}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "current"] }, { kind: "component", type: i3.CalendarComponent, selector: "riv-calendar", inputs: ["activeYearMonth", "displayMin", "displayMax", "selectableMin", "selectableMax", "omitRange", "selectedValue"], outputs: ["activeYearMonthChange", "dateSelect"] }, { kind: "component", type: i4.CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "component", type: i5.HighlightComponent, selector: "riv-highlight", inputs: ["text", "indices"] }, { kind: "component", type: i6.IconComponent, selector: "riv-icon", inputs: ["name", "size", "customSize", "strokeWidth"] }, { kind: "component", type: i7.InputLabelComponent, selector: "riv-input-label", inputs: ["label", "help", "required", "labelActionText", "errorMessage", "state"], outputs: ["labelAction"] }, { kind: "directive", type: i8.OverlayDirective, selector: "[riv-overlay]" }, { kind: "component", type: i9.SimpleSelectComponent, selector: "riv-simple-select", inputs: ["optionGroups", "selectedOption", "size", "disabled", "locked", "filterabilityOptions", "orderBy", "placeholder", "maxHeight", "maxWidth", "minHeight", "minWidth", "dividers"], outputs: ["selectedOptionChange"] }, { kind: "directive", type: i10.TooltipDirective, selector: "[rivTooltip]", inputs: ["rivTooltip", "rivTooltipTheme", "rivTooltipMaxWidth", "rivTooltipPreferredPosition", "rivTooltipCloseDelay", "rivTooltipOpenDelay"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i11.OptionGroupPipe, name: "rivOptionGroup" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
203
|
+
DateRangeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DateRangeComponent, selector: "riv-date-range", inputs: { showPresets: "showPresets", min: "min", max: "max", value: "value", placeholder: "placeholder", disabled: "disabled", alternativePresetList: "alternativePresetList" }, outputs: { valueChange: "valueChange" }, queries: [{ propertyName: "triggerTemplate", first: true, predicate: ["trigger"], descendants: true }], viewQueries: [{ propertyName: "customTriggerButton", first: true, predicate: ["customTriggerButton"], descendants: true, read: ElementRef }, { propertyName: "standardTriggerButton", first: true, predicate: ["standardTriggerButton"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"triggerTemplate; else standardTrigger\">\n <button\n #customTriggerButton\n (click)=\"open$.next(true)\"\n [disabled]=\"disabled$ | async\"\n type=\"button\"\n >\n <ng-container\n [ngTemplateOutlet]=\"triggerTemplate\"\n [ngTemplateOutletContext]=\"{ open: open$ | async }\"\n ></ng-container>\n </button>\n</ng-container>\n<ng-template #standardTrigger>\n <riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [state]=\"state\"\n [errorMessage]=\"errorMessage\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n >\n <button\n #standardTriggerButton\n class=\"trigger\"\n [class.warning]=\"state === 'warning'\"\n [class.error]=\"state === 'error'\"\n (click)=\"open$.next(true)\"\n [disabled]=\"disabled$ | async\"\n type=\"button\"\n >\n <ng-container\n *ngIf=\"displayValue$ | async; else placeholderValue; let display\"\n >\n <span class=\"value\">{{ display }}</span>\n </ng-container>\n <ng-template #placeholderValue>\n <span class=\"value placeholder\">{{ placeholder$ | async }}</span>\n </ng-template>\n <span class=\"chevron\">\n <riv-icon [name]=\"'Calendar'\" [size]=\"16\"></riv-icon>\n </span>\n </button>\n </riv-input-label>\n</ng-template>\n\n<ng-template\n #self\n [ngTemplateOutlet]=\"self\"\n let-inputValue\n [ngTemplateOutletContext]=\"{ $implicit: (distinctValue$ | async) }\"\n>\n <ng-container *ngIf=\"open$ | async\">\n <riv-callout\n *riv-overlay\n [anchor]=\"getTrigger()\"\n [showCaret]=\"false\"\n [theme]=\"'light'\"\n [allowedPositions]=\"[\n 'top-left',\n 'top-right',\n 'bottom-right',\n 'bottom-left'\n ]\"\n [preferredPosition]=\"'bottom-right'\"\n (close)=\"open$.next(false); userSelectedDate$.next(inputValue)\"\n >\n <div class=\"content\" [class.include-preset]=\"showPresets\">\n <div *ngIf=\"showPresets\" class=\"presets\">\n <riv-simple-select\n [label]=\"'Date presets'\"\n [filterabilityOptions]=\"{ enabled: true, placeholder: 'Search' }\"\n [orderBy]=\"'source'\"\n [optionGroups]=\"\n (filteredPresetOptions$ | async) ?? [] | rivOptionGroup\n \"\n [selectedOption]=\"selectedPreset$ | async\"\n (selectedOptionChange)=\"userSelectedPreset$.next($event)\"\n >\n <ng-template #option let-node=\"node\">\n <ng-template\n #self\n [ngTemplateOutlet]=\"self\"\n let-isFavorite\n [ngTemplateOutletContext]=\"{\n $implicit: (favoritePresetIds$ | async)?.includes(node.id)\n }\"\n >\n <div class=\"preset\" [class.favorite]=\"isFavorite\">\n <div class=\"description\">\n <riv-highlight\n class=\"title\"\n [text]=\"node.title\"\n [indices]=\"node.titleHighlightIndices || []\"\n ></riv-highlight>\n <riv-highlight\n class=\"subtitle\"\n [text]=\"node.subtitle\"\n [indices]=\"node.subtitleHighlightIndices || []\"\n ></riv-highlight>\n </div>\n <button\n (click)=\"\n setFavorite(node, !isFavorite); $event.stopPropagation()\n \"\n type=\"button\"\n >\n <riv-icon\n [name]=\"isFavorite ? 'HeartActive' : 'Heart'\"\n [size]=\"16\"\n [rivTooltip]=\"'Mark as favorite'\"\n ></riv-icon>\n </button>\n </div>\n </ng-template>\n </ng-template>\n </riv-simple-select>\n <ng-template\n #self\n [ngTemplateOutlet]=\"self\"\n let-favorites\n [ngTemplateOutletContext]=\"{ $implicit: favoritePresets$ | async }\"\n >\n <riv-input-label *ngIf=\"favorites.length\" [label]=\"'Favorites'\">\n <div class=\"shortcuts\">\n <button\n *ngFor=\"let favorite of favorites\"\n class=\"shortcut\"\n [class.active]=\"(selectedPreset$ | async)?.id === favorite.id\"\n (click)=\"userSelectedPreset$.next(favorite)\"\n type=\"button\"\n >\n <span class=\"title\">{{ favorite.title }}</span>\n <button\n (click)=\"setFavorite(favorite, false)\"\n [rivTooltip]=\"'Remove favorite'\"\n type=\"button\"\n >\n <riv-icon [name]=\"'HeartActive'\" [size]=\"16\"></riv-icon>\n </button>\n </button>\n </div>\n </riv-input-label>\n </ng-template>\n </div>\n\n <div class=\"calendars\">\n <riv-calendar\n class=\"left\"\n [activeYearMonth]=\"(leftActiveYearMonth$ | async) || TODAY\"\n (activeYearMonthChange)=\"userLeftActiveYearMonth$.next($event)\"\n [displayMin]=\"(min$ | async) || TODAY\"\n [displayMax]=\"(max$ | async) || TODAY\"\n [selectableMin]=\"(leftMin$ | async) || TODAY\"\n [selectableMax]=\"(leftMax$ | async) || TODAY\"\n [omitRange]=\"(leftOmitRange$ | async) || [TODAY, TODAY]\"\n [selectedValue]=\"(selectedValue$ | async) || TODAY\"\n (dateSelect)=\"userSelectedDate$.next($event)\"\n ></riv-calendar>\n <riv-calendar\n class=\"right\"\n [activeYearMonth]=\"(rightActiveYearMonth$ | async) || TODAY\"\n (activeYearMonthChange)=\"userRightActiveYearMonth$.next($event)\"\n [displayMin]=\"(min$ | async) || TODAY\"\n [displayMax]=\"(max$ | async) || TODAY\"\n [selectableMin]=\"(rightMin$ | async) || TODAY\"\n [selectableMax]=\"(rightMax$ | async) || TODAY\"\n [selectedValue]=\"(selectedValue$ | async) || TODAY\"\n (dateSelect)=\"userSelectedDate$.next($event)\"\n ></riv-calendar>\n </div>\n\n <footer class=\"buttons\">\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n (click)=\"userSelectedDate$.next(undefined)\"\n type=\"button\"\n >\n Clear\n </button>\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'primary'\"\n (click)=\"open$.next(false)\"\n type=\"button\"\n >\n Done\n </button>\n </footer>\n </div>\n </riv-callout>\n </ng-container>\n</ng-template>\n", styles: [".trigger{width:100%;border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-small);display:flex;gap:var(--size-small);background-color:var(--surface-light-0);cursor:pointer}.trigger:focus{outline:none;border:var(--border-width) solid var(--purp-60)}.trigger:disabled{color:var(--type-light-disabled);background-color:var(--surface-light-1)}.value{font-size:var(--type-2-font-size);line-height:var(--type-2-line-height-0);color:var(--type-light-high-contrast);padding:var(--size-small);flex-grow:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:pre}.value.placeholder{color:var(--type-light-disabled)}.chevron{display:flex;justify-content:center;align-items:center;padding:var(--size-xsmall) calc(var(--base-grid-size) * 1.5)}.trigger.warning{border-color:var(--surface-dark-caution)}.trigger.error{border-color:var(--surface-dark-danger);box-shadow:inset 0 0 0 var(--border-width-large) var(--surface-dark-danger)}.content{display:inline-grid;grid-template-rows:1fr auto}.content.include-preset{grid-template-columns:calc(var(--base-grid-size) * 50) 1fr 1fr}.presets{grid-area:1 / 1 / 3 / 2;background-color:var(--surface-light-1);padding:var(--size-xlarge) var(--size-large);border-right:var(--border-width) solid var(--border-light);display:flex;flex-direction:column;gap:var(--size-medium)}.preset{display:flex;transition:background-color var(--short-transition)}.preset:hover{background-color:var(--surface-light-2)}.preset button{color:transparent;transition:color var(--short-transition);padding:var(--size-medium) var(--size-large) var(--size-medium) var(--size-small);cursor:pointer}.preset:hover button{color:var(--type-light-low-contrast)}.preset button:hover{color:var(--type-light-high-contrast)}.preset.favorite button{color:var(--type-light-link)}.preset .description{flex-grow:1;padding:var(--size-medium) var(--size-small) var(--size-medium) var(--size-medium)}.preset .title{display:block;font-size:var(--type-2-font-size);line-height:var(--type-2-line-height-1)}.preset .subtitle{display:block;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-1);color:var(--type-light-low-contrast)}.shortcuts{display:flex;flex-direction:column;gap:var(--size-xsmall);overflow-y:auto}.shortcut{display:flex;align-items:center;padding:var(--size-small) var(--size-small) var(--size-small) var(--size-medium);gap:var(--size-small);border-radius:var(--border-radius-small);transition:background-color var(--short-transition);cursor:pointer}.shortcut:hover{background-color:var(--black-20)}.shortcut.active{background-color:var(--baloo-05)}.shortcut .title{flex-grow:1;text-align:left;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-2)}.shortcut button{color:transparent;transition:color var(--short-transition);cursor:pointer}.shortcut:hover button{color:var(--type-light-link)}.calendars{grid-column:2 / 4;display:grid;grid-template-columns:subgrid;grid-template-rows:subgrid;padding:var(--size-large)}.left{grid-area:1 / 1 / 2 / 2;padding-right:var(--size-large);border-right:var(--border-width) solid var(--border-light)}.right{padding-left:var(--size-large);grid-area:1 / 2 / 2 / 3}.buttons{grid-area:2 / 2 / 3 / 4;padding:var(--size-small);display:flex;justify-content:space-between}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "current"] }, { kind: "component", type: i3.CalendarComponent, selector: "riv-calendar", inputs: ["activeYearMonth", "displayMin", "displayMax", "selectableMin", "selectableMax", "omitRange", "selectedValue"], outputs: ["activeYearMonthChange", "dateSelect"] }, { kind: "component", type: i4.CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "component", type: i5.HighlightComponent, selector: "riv-highlight", inputs: ["text", "indices"] }, { kind: "component", type: i6.IconComponent, selector: "riv-icon", inputs: ["name", "size", "customSize", "strokeWidth"] }, { kind: "component", type: i7.InputLabelComponent, selector: "riv-input-label", inputs: ["label", "help", "required", "labelActionText", "errorMessage", "state"], outputs: ["labelAction"] }, { kind: "directive", type: i8.OverlayDirective, selector: "[riv-overlay]" }, { kind: "component", type: i9.SimpleSelectComponent, selector: "riv-simple-select", inputs: ["optionGroups", "selectedOption", "size", "disabled", "locked", "filterabilityOptions", "orderBy", "placeholder", "maxHeight", "maxWidth", "minHeight", "minWidth", "dividers"], outputs: ["selectedOptionChange"] }, { kind: "directive", type: i10.TooltipDirective, selector: "[rivTooltip]", inputs: ["rivTooltip", "rivTooltipTheme", "rivTooltipMaxWidth", "rivTooltipPreferredPosition", "rivTooltipCloseDelay", "rivTooltipOpenDelay"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i11.OptionGroupPipe, name: "rivOptionGroup" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
204
204
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DateRangeComponent, decorators: [{
|
|
205
205
|
type: Component,
|
|
206
|
-
args: [{ selector: 'riv-date-range', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"triggerTemplate; else standardTrigger\">\n <button\n #customTriggerButton\n (click)=\"open$.next(true)\"\n [disabled]=\"disabled$ | async\"\n type=\"button\"\n >\n <ng-container\n [ngTemplateOutlet]=\"triggerTemplate\"\n [ngTemplateOutletContext]=\"{ open: open$ | async }\"\n ></ng-container>\n </button>\n</ng-container>\n<ng-template #standardTrigger>\n <riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [state]=\"state\"\n [errorMessage]=\"errorMessage\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n >\n <button\n #standardTriggerButton\n class=\"trigger\"\n [class.warning]=\"state === 'warning'\"\n [class.error]=\"state === 'error'\"\n (click)=\"open$.next(true)\"\n [disabled]=\"disabled$ | async\"\n type=\"button\"\n >\n <ng-container\n *ngIf=\"displayValue$ | async; else placeholderValue; let display\"\n >\n <span class=\"value\">{{ display }}</span>\n </ng-container>\n <ng-template #placeholderValue>\n <span class=\"value placeholder\">{{ placeholder$ | async }}</span>\n </ng-template>\n <span class=\"chevron\">\n <riv-icon [name]=\"'Calendar'\" [size]=\"16\"></riv-icon>\n </span>\n </button>\n </riv-input-label>\n</ng-template>\n\n<ng-template\n #self\n [ngTemplateOutlet]=\"self\"\n let-inputValue\n [ngTemplateOutletContext]=\"{ $implicit: (distinctValue$ | async) }\"\n>\n <ng-container *ngIf=\"open$ | async\">\n <riv-callout\n *riv-overlay\n [anchor]=\"getTrigger()\"\n [showCaret]=\"false\"\n [theme]=\"'light'\"\n [allowedPositions]=\"[\n 'top-left',\n 'top-right',\n 'bottom-right',\n 'bottom-left'\n ]\"\n [preferredPosition]=\"'bottom-right'\"\n (close)=\"open$.next(false); userSelectedDate$.next(inputValue)\"\n >\n <div class=\"content\" [class.include-preset]=\"showPresets\">\n <div *ngIf=\"showPresets\" class=\"presets\">\n <riv-simple-select\n [label]=\"'Date presets'\"\n [filterabilityOptions]=\"{ enabled: true, placeholder: 'Search' }\"\n [orderBy]=\"'source'\"\n [optionGroups]=\"\n (filteredPresetOptions$ | async) ?? [] | rivOptionGroup\n \"\n [selectedOption]=\"selectedPreset$ | async\"\n (selectedOptionChange)=\"userSelectedPreset$.next($event)\"\n >\n <ng-template #option let-node=\"node\">\n <ng-template\n #self\n [ngTemplateOutlet]=\"self\"\n let-isFavorite\n [ngTemplateOutletContext]=\"{\n $implicit: (favoritePresetIds$ | async)?.includes(node.id)\n }\"\n >\n <div class=\"preset\" [class.favorite]=\"isFavorite\">\n <div class=\"description\">\n <riv-highlight\n class=\"title\"\n [text]=\"node.title\"\n [indices]=\"node.titleHighlightIndices || []\"\n ></riv-highlight>\n <riv-highlight\n class=\"subtitle\"\n [text]=\"node.subtitle\"\n [indices]=\"node.subtitleHighlightIndices || []\"\n ></riv-highlight>\n </div>\n <button\n (click)=\"\n setFavorite(node, !isFavorite); $event.stopPropagation()\n \"\n type=\"button\"\n >\n <riv-icon\n [name]=\"isFavorite ? 'HeartActive' : 'Heart'\"\n [size]=\"16\"\n [rivTooltip]=\"'Mark as favorite'\"\n ></riv-icon>\n </button>\n </div>\n </ng-template>\n </ng-template>\n </riv-simple-select>\n <ng-template\n #self\n [ngTemplateOutlet]=\"self\"\n let-favorites\n [ngTemplateOutletContext]=\"{ $implicit: favoritePresets$ | async }\"\n >\n <riv-input-label *ngIf=\"favorites.length\" [label]=\"'Favorites'\">\n <div class=\"shortcuts\">\n <button\n *ngFor=\"let favorite of favorites\"\n class=\"shortcut\"\n [class.active]=\"(selectedPreset$ | async)?.id === favorite.id\"\n (click)=\"userSelectedPreset$.next(favorite)\"\n type=\"button\"\n >\n <span class=\"title\">{{ favorite.title }}</span>\n <button\n (click)=\"setFavorite(favorite, false)\"\n [rivTooltip]=\"'Remove favorite'\"\n type=\"button\"\n >\n <riv-icon [name]=\"'HeartActive'\" [size]=\"16\"></riv-icon>\n </button>\n </button>\n </div>\n </riv-input-label>\n </ng-template>\n </div>\n\n <div class=\"calendars\">\n <riv-calendar\n class=\"left\"\n [activeYearMonth]=\"(leftActiveYearMonth$ | async) || TODAY\"\n (activeYearMonthChange)=\"userLeftActiveYearMonth$.next($event)\"\n [displayMin]=\"(min$ | async) || TODAY\"\n [displayMax]=\"(max$ | async) || TODAY\"\n [selectableMin]=\"(leftMin$ | async) || TODAY\"\n [selectableMax]=\"(leftMax$ | async) || TODAY\"\n [omitRange]=\"(leftOmitRange$ | async) || [TODAY, TODAY]\"\n [selectedValue]=\"(selectedValue$ | async) || TODAY\"\n (dateSelect)=\"userSelectedDate$.next($event)\"\n ></riv-calendar>\n <riv-calendar\n class=\"right\"\n [activeYearMonth]=\"(rightActiveYearMonth$ | async) || TODAY\"\n (activeYearMonthChange)=\"userRightActiveYearMonth$.next($event)\"\n [displayMin]=\"(min$ | async) || TODAY\"\n [displayMax]=\"(max$ | async) || TODAY\"\n [selectableMin]=\"(rightMin$ | async) || TODAY\"\n [selectableMax]=\"(rightMax$ | async) || TODAY\"\n [selectedValue]=\"(selectedValue$ | async) || TODAY\"\n (dateSelect)=\"userSelectedDate$.next($event)\"\n ></riv-calendar>\n </div>\n\n <footer class=\"buttons\">\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n (click)=\"userSelectedDate$.next(undefined)\"\n type=\"button\"\n >\n Clear\n </button>\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'primary'\"\n (click)=\"open$.next(false)\"\n type=\"button\"\n >\n Done\n </button>\n </footer>\n </div>\n </riv-callout>\n </ng-container>\n</ng-template>\n", styles: [".trigger{width:100%;border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-small);display:flex;gap:var(--size-small)}.trigger:focus{outline:none;border:var(--border-width) solid var(--purp-60)}.trigger:disabled{color:var(--type-light-disabled);background-color:var(--surface-light-1)}.value{font-size:var(--type-2-font-size);line-height:var(--type-2-line-height-0);color:var(--type-light-high-contrast);padding:var(--size-small);flex-grow:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:pre}.value.placeholder{color:var(--type-light-disabled)}.chevron{display:flex;justify-content:center;align-items:center;padding:var(--size-small)}.trigger.warning{border-color:var(--surface-dark-caution)}.trigger.error{border-color:var(--surface-dark-danger);box-shadow:inset 0 0 0 var(--border-width-large) var(--surface-dark-danger)}.content{display:inline-grid;grid-template-rows:1fr auto}.content.include-preset{grid-template-columns:calc(var(--base-grid-size) * 50) 1fr 1fr}.presets{grid-area:1 / 1 / 3 / 2;background-color:var(--surface-light-1);padding:var(--size-xlarge) var(--size-large);border-right:var(--border-width) solid var(--border-light);display:flex;flex-direction:column;gap:var(--size-medium)}.preset{display:flex;transition:background-color var(--short-transition)}.preset:hover{background-color:var(--surface-light-2)}.preset button{color:transparent;transition:color var(--short-transition);padding:var(--size-medium) var(--size-large) var(--size-medium) var(--size-small);cursor:pointer}.preset:hover button{color:var(--type-light-low-contrast)}.preset button:hover{color:var(--type-light-high-contrast)}.preset.favorite button{color:var(--type-light-link)}.preset .description{flex-grow:1;padding:var(--size-medium) var(--size-small) var(--size-medium) var(--size-medium)}.preset .title{display:block;font-size:var(--type-2-font-size);line-height:var(--type-2-line-height-1)}.preset .subtitle{display:block;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-1);color:var(--type-light-low-contrast)}.shortcuts{display:flex;flex-direction:column;gap:var(--size-xsmall);overflow-y:auto}.shortcut{display:flex;align-items:center;padding:var(--size-small) var(--size-small) var(--size-small) var(--size-medium);gap:var(--size-small);border-radius:var(--border-radius-small);transition:background-color var(--short-transition);cursor:pointer}.shortcut:hover{background-color:var(--black-20)}.shortcut.active{background-color:var(--baloo-05)}.shortcut .title{flex-grow:1;text-align:left;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-2)}.shortcut button{color:transparent;transition:color var(--short-transition);cursor:pointer}.shortcut:hover button{color:var(--type-light-link)}.calendars{grid-column:2 / 4;display:grid;grid-template-columns:subgrid;grid-template-rows:subgrid;padding:var(--size-large)}.left{grid-area:1 / 1 / 2 / 2;padding-right:var(--size-large);border-right:var(--border-width) solid var(--border-light)}.right{padding-left:var(--size-large);grid-area:1 / 2 / 2 / 3}.buttons{grid-area:2 / 2 / 3 / 4;padding:var(--size-small);display:flex;justify-content:space-between}\n"] }]
|
|
206
|
+
args: [{ selector: 'riv-date-range', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"triggerTemplate; else standardTrigger\">\n <button\n #customTriggerButton\n (click)=\"open$.next(true)\"\n [disabled]=\"disabled$ | async\"\n type=\"button\"\n >\n <ng-container\n [ngTemplateOutlet]=\"triggerTemplate\"\n [ngTemplateOutletContext]=\"{ open: open$ | async }\"\n ></ng-container>\n </button>\n</ng-container>\n<ng-template #standardTrigger>\n <riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [state]=\"state\"\n [errorMessage]=\"errorMessage\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n >\n <button\n #standardTriggerButton\n class=\"trigger\"\n [class.warning]=\"state === 'warning'\"\n [class.error]=\"state === 'error'\"\n (click)=\"open$.next(true)\"\n [disabled]=\"disabled$ | async\"\n type=\"button\"\n >\n <ng-container\n *ngIf=\"displayValue$ | async; else placeholderValue; let display\"\n >\n <span class=\"value\">{{ display }}</span>\n </ng-container>\n <ng-template #placeholderValue>\n <span class=\"value placeholder\">{{ placeholder$ | async }}</span>\n </ng-template>\n <span class=\"chevron\">\n <riv-icon [name]=\"'Calendar'\" [size]=\"16\"></riv-icon>\n </span>\n </button>\n </riv-input-label>\n</ng-template>\n\n<ng-template\n #self\n [ngTemplateOutlet]=\"self\"\n let-inputValue\n [ngTemplateOutletContext]=\"{ $implicit: (distinctValue$ | async) }\"\n>\n <ng-container *ngIf=\"open$ | async\">\n <riv-callout\n *riv-overlay\n [anchor]=\"getTrigger()\"\n [showCaret]=\"false\"\n [theme]=\"'light'\"\n [allowedPositions]=\"[\n 'top-left',\n 'top-right',\n 'bottom-right',\n 'bottom-left'\n ]\"\n [preferredPosition]=\"'bottom-right'\"\n (close)=\"open$.next(false); userSelectedDate$.next(inputValue)\"\n >\n <div class=\"content\" [class.include-preset]=\"showPresets\">\n <div *ngIf=\"showPresets\" class=\"presets\">\n <riv-simple-select\n [label]=\"'Date presets'\"\n [filterabilityOptions]=\"{ enabled: true, placeholder: 'Search' }\"\n [orderBy]=\"'source'\"\n [optionGroups]=\"\n (filteredPresetOptions$ | async) ?? [] | rivOptionGroup\n \"\n [selectedOption]=\"selectedPreset$ | async\"\n (selectedOptionChange)=\"userSelectedPreset$.next($event)\"\n >\n <ng-template #option let-node=\"node\">\n <ng-template\n #self\n [ngTemplateOutlet]=\"self\"\n let-isFavorite\n [ngTemplateOutletContext]=\"{\n $implicit: (favoritePresetIds$ | async)?.includes(node.id)\n }\"\n >\n <div class=\"preset\" [class.favorite]=\"isFavorite\">\n <div class=\"description\">\n <riv-highlight\n class=\"title\"\n [text]=\"node.title\"\n [indices]=\"node.titleHighlightIndices || []\"\n ></riv-highlight>\n <riv-highlight\n class=\"subtitle\"\n [text]=\"node.subtitle\"\n [indices]=\"node.subtitleHighlightIndices || []\"\n ></riv-highlight>\n </div>\n <button\n (click)=\"\n setFavorite(node, !isFavorite); $event.stopPropagation()\n \"\n type=\"button\"\n >\n <riv-icon\n [name]=\"isFavorite ? 'HeartActive' : 'Heart'\"\n [size]=\"16\"\n [rivTooltip]=\"'Mark as favorite'\"\n ></riv-icon>\n </button>\n </div>\n </ng-template>\n </ng-template>\n </riv-simple-select>\n <ng-template\n #self\n [ngTemplateOutlet]=\"self\"\n let-favorites\n [ngTemplateOutletContext]=\"{ $implicit: favoritePresets$ | async }\"\n >\n <riv-input-label *ngIf=\"favorites.length\" [label]=\"'Favorites'\">\n <div class=\"shortcuts\">\n <button\n *ngFor=\"let favorite of favorites\"\n class=\"shortcut\"\n [class.active]=\"(selectedPreset$ | async)?.id === favorite.id\"\n (click)=\"userSelectedPreset$.next(favorite)\"\n type=\"button\"\n >\n <span class=\"title\">{{ favorite.title }}</span>\n <button\n (click)=\"setFavorite(favorite, false)\"\n [rivTooltip]=\"'Remove favorite'\"\n type=\"button\"\n >\n <riv-icon [name]=\"'HeartActive'\" [size]=\"16\"></riv-icon>\n </button>\n </button>\n </div>\n </riv-input-label>\n </ng-template>\n </div>\n\n <div class=\"calendars\">\n <riv-calendar\n class=\"left\"\n [activeYearMonth]=\"(leftActiveYearMonth$ | async) || TODAY\"\n (activeYearMonthChange)=\"userLeftActiveYearMonth$.next($event)\"\n [displayMin]=\"(min$ | async) || TODAY\"\n [displayMax]=\"(max$ | async) || TODAY\"\n [selectableMin]=\"(leftMin$ | async) || TODAY\"\n [selectableMax]=\"(leftMax$ | async) || TODAY\"\n [omitRange]=\"(leftOmitRange$ | async) || [TODAY, TODAY]\"\n [selectedValue]=\"(selectedValue$ | async) || TODAY\"\n (dateSelect)=\"userSelectedDate$.next($event)\"\n ></riv-calendar>\n <riv-calendar\n class=\"right\"\n [activeYearMonth]=\"(rightActiveYearMonth$ | async) || TODAY\"\n (activeYearMonthChange)=\"userRightActiveYearMonth$.next($event)\"\n [displayMin]=\"(min$ | async) || TODAY\"\n [displayMax]=\"(max$ | async) || TODAY\"\n [selectableMin]=\"(rightMin$ | async) || TODAY\"\n [selectableMax]=\"(rightMax$ | async) || TODAY\"\n [selectedValue]=\"(selectedValue$ | async) || TODAY\"\n (dateSelect)=\"userSelectedDate$.next($event)\"\n ></riv-calendar>\n </div>\n\n <footer class=\"buttons\">\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n (click)=\"userSelectedDate$.next(undefined)\"\n type=\"button\"\n >\n Clear\n </button>\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'primary'\"\n (click)=\"open$.next(false)\"\n type=\"button\"\n >\n Done\n </button>\n </footer>\n </div>\n </riv-callout>\n </ng-container>\n</ng-template>\n", styles: [".trigger{width:100%;border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-small);display:flex;gap:var(--size-small);background-color:var(--surface-light-0);cursor:pointer}.trigger:focus{outline:none;border:var(--border-width) solid var(--purp-60)}.trigger:disabled{color:var(--type-light-disabled);background-color:var(--surface-light-1)}.value{font-size:var(--type-2-font-size);line-height:var(--type-2-line-height-0);color:var(--type-light-high-contrast);padding:var(--size-small);flex-grow:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:pre}.value.placeholder{color:var(--type-light-disabled)}.chevron{display:flex;justify-content:center;align-items:center;padding:var(--size-xsmall) calc(var(--base-grid-size) * 1.5)}.trigger.warning{border-color:var(--surface-dark-caution)}.trigger.error{border-color:var(--surface-dark-danger);box-shadow:inset 0 0 0 var(--border-width-large) var(--surface-dark-danger)}.content{display:inline-grid;grid-template-rows:1fr auto}.content.include-preset{grid-template-columns:calc(var(--base-grid-size) * 50) 1fr 1fr}.presets{grid-area:1 / 1 / 3 / 2;background-color:var(--surface-light-1);padding:var(--size-xlarge) var(--size-large);border-right:var(--border-width) solid var(--border-light);display:flex;flex-direction:column;gap:var(--size-medium)}.preset{display:flex;transition:background-color var(--short-transition)}.preset:hover{background-color:var(--surface-light-2)}.preset button{color:transparent;transition:color var(--short-transition);padding:var(--size-medium) var(--size-large) var(--size-medium) var(--size-small);cursor:pointer}.preset:hover button{color:var(--type-light-low-contrast)}.preset button:hover{color:var(--type-light-high-contrast)}.preset.favorite button{color:var(--type-light-link)}.preset .description{flex-grow:1;padding:var(--size-medium) var(--size-small) var(--size-medium) var(--size-medium)}.preset .title{display:block;font-size:var(--type-2-font-size);line-height:var(--type-2-line-height-1)}.preset .subtitle{display:block;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-1);color:var(--type-light-low-contrast)}.shortcuts{display:flex;flex-direction:column;gap:var(--size-xsmall);overflow-y:auto}.shortcut{display:flex;align-items:center;padding:var(--size-small) var(--size-small) var(--size-small) var(--size-medium);gap:var(--size-small);border-radius:var(--border-radius-small);transition:background-color var(--short-transition);cursor:pointer}.shortcut:hover{background-color:var(--black-20)}.shortcut.active{background-color:var(--baloo-05)}.shortcut .title{flex-grow:1;text-align:left;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-2)}.shortcut button{color:transparent;transition:color var(--short-transition);cursor:pointer}.shortcut:hover button{color:var(--type-light-link)}.calendars{grid-column:2 / 4;display:grid;grid-template-columns:subgrid;grid-template-rows:subgrid;padding:var(--size-large)}.left{grid-area:1 / 1 / 2 / 2;padding-right:var(--size-large);border-right:var(--border-width) solid var(--border-light)}.right{padding-left:var(--size-large);grid-area:1 / 2 / 2 / 3}.buttons{grid-area:2 / 2 / 3 / 4;padding:var(--size-small);display:flex;justify-content:space-between}\n"] }]
|
|
207
207
|
}], propDecorators: { showPresets: [{
|
|
208
208
|
type: Input
|
|
209
209
|
}], min: [{
|
|
@@ -11,6 +11,16 @@ export class TooltipDirective {
|
|
|
11
11
|
this.rivTooltipCloseDelay = 100;
|
|
12
12
|
this.rivTooltipOpenDelay = 500;
|
|
13
13
|
}
|
|
14
|
+
set rivTooltip(value) {
|
|
15
|
+
this._rivTooltip = value;
|
|
16
|
+
if (!value) {
|
|
17
|
+
this.cancelOpen();
|
|
18
|
+
this.closeImmediately();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
get rivTooltip() {
|
|
22
|
+
return this._rivTooltip;
|
|
23
|
+
}
|
|
14
24
|
onMouseEnter() {
|
|
15
25
|
if (!this.rivTooltip)
|
|
16
26
|
return;
|
|
@@ -57,6 +67,11 @@ export class TooltipDirective {
|
|
|
57
67
|
window.clearTimeout(this.openTimeout);
|
|
58
68
|
this.openTimeout = undefined;
|
|
59
69
|
}
|
|
70
|
+
closeImmediately() {
|
|
71
|
+
window.clearTimeout(this.closeTimeout);
|
|
72
|
+
this.tooltipRef?.destroy();
|
|
73
|
+
this.tooltipRef = undefined;
|
|
74
|
+
}
|
|
60
75
|
}
|
|
61
76
|
TooltipDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TooltipDirective, deps: [{ token: i0.ElementRef }, { token: i0.ApplicationRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
62
77
|
TooltipDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: TooltipDirective, selector: "[rivTooltip]", inputs: { rivTooltip: "rivTooltip", rivTooltipTheme: "rivTooltipTheme", rivTooltipMaxWidth: "rivTooltipMaxWidth", rivTooltipPreferredPosition: "rivTooltipPreferredPosition", rivTooltipCloseDelay: "rivTooltipCloseDelay", rivTooltipOpenDelay: "rivTooltipOpenDelay" }, host: { listeners: { "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()" } }, ngImport: i0 });
|
|
@@ -84,4 +99,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
84
99
|
type: HostListener,
|
|
85
100
|
args: ['mouseleave']
|
|
86
101
|
}] } });
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9vdmVybGF5L2NhbGxvdXQvdG9vbHRpcC90b29sdGlwLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQUt2RCxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCLFlBQ3FCLEVBQWMsRUFDZCxjQUE4QjtRQUQ5QixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2QsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBbUJuRCxvQkFBZSxHQUFxQixNQUFNLENBQUM7UUFHM0MsdUJBQWtCLEdBQUcsa0NBQWtDLENBQUM7UUFHeEQsZ0NBQTJCLEdBQXNDLFlBQVksQ0FBQztRQUc5RSx5QkFBb0IsR0FBVyxHQUFHLENBQUM7UUFHbkMsd0JBQW1CLEdBQVcsR0FBRyxDQUFDO0lBOUIvQixDQUFDO0lBSUosSUFDSSxVQUFVLENBQUMsS0FBNkM7UUFDMUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQXFCMkIsWUFBWTtRQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPO1FBQzdCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7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QUlOLG1CQUFtQjtzQkFEbEIsS0FBSztnQkFPc0IsWUFBWTtzQkFBdkMsWUFBWTt1QkFBQyxZQUFZO2dCQXNCRSxZQUFZO3NCQUF2QyxZQUFZO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBcHBsaWNhdGlvblJlZixcbiAgQ29tcG9uZW50UmVmLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVG9vbHRpcENvbXBvbmVudCB9IGZyb20gJy4vdG9vbHRpcC5jb21wb25lbnQnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbcml2VG9vbHRpcF0nLFxufSlcbmV4cG9ydCBjbGFzcyBUb29sdGlwRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGVsOiBFbGVtZW50UmVmLFxuICAgIHByb3RlY3RlZCByZWFkb25seSBhcHBsaWNhdGlvblJlZjogQXBwbGljYXRpb25SZWYsXG4gICkge31cblxuICBwcml2YXRlIF9yaXZUb29sdGlwPzogc3RyaW5nIHwgVGVtcGxhdGVSZWY8dm9pZD47XG5cbiAgQElucHV0KClcbiAgc2V0IHJpdlRvb2x0aXAodmFsdWU6IHN0cmluZyB8IFRlbXBsYXRlUmVmPHZvaWQ+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fcml2VG9vbHRpcCA9IHZhbHVlO1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHRoaXMuY2FuY2VsT3BlbigpO1xuICAgICAgdGhpcy5jbG9zZUltbWVkaWF0ZWx5KCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJpdlRvb2x0aXAoKTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8dm9pZD4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9yaXZUb29sdGlwO1xuICB9XG5cbiAgQElucHV0KClcbiAgcml2VG9vbHRpcFRoZW1lOiAnZGFyaycgfCAnbGlnaHQnID0gJ2RhcmsnO1xuXG4gIEBJbnB1dCgpXG4gIHJpdlRvb2x0aXBNYXhXaWR0aCA9ICdjYWxjKHZhcigtLWJhc2UtZ3JpZC1zaXplKSAqIDUwKSc7XG5cbiAgQElucHV0KClcbiAgcml2VG9vbHRpcFByZWZlcnJlZFBvc2l0aW9uOiBUb29sdGlwQ29tcG9uZW50LkFuY2hvcmVkUG9zaXRpb24gPSAndG9wLWNlbnRlcic7XG5cbiAgQElucHV0KClcbiAgcml2VG9vbHRpcENsb3NlRGVsYXk6IG51bWJlciA9IDEwMDtcblxuICBASW5wdXQoKVxuICByaXZUb29sdGlwT3BlbkRlbGF5OiBudW1iZXIgPSA1MDA7XG5cbiAgcHJpdmF0ZSB0b29sdGlwUmVmPzogQ29tcG9uZW50UmVmPFRvb2x0aXBDb21wb25lbnQ+O1xuICBwcml2YXRlIGNsb3NlVGltZW91dD86IG51bWJlcjtcbiAgcHJpdmF0ZSBvcGVuVGltZW91dD86IG51bWJlcjtcblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWVudGVyJykgb25Nb3VzZUVudGVyKCkge1xuICAgIGlmICghdGhpcy5yaXZUb29sdGlwKSByZXR1cm47XG4gICAgaWYgKHRoaXMudG9vbHRpcFJlZikge1xuICAgICAgdGhpcy5jYW5jZWxDbG9zZSgpO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMub3BlblRpbWVvdXQpIHtcbiAgICAgIHRoaXMub3BlblRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRvb2x0aXAgPSB0aGlzLmFwcGxpY2F0aW9uUmVmLmNvbXBvbmVudHNbMF0uaW5qZWN0b3JcbiAgICAgICAgICAuZ2V0KFZpZXdDb250YWluZXJSZWYpXG4gICAgICAgICAgLmNyZWF0ZUNvbXBvbmVudChUb29sdGlwQ29tcG9uZW50KTtcbiAgICAgICAgdG9vbHRpcC5pbnN0YW5jZS5hbmNob3IgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRvb2x0aXAuaW5zdGFuY2UuY29udGVudCA9IHRoaXMucml2VG9vbHRpcDtcbiAgICAgICAgdG9vbHRpcC5pbnN0YW5jZS50aGVtZSA9IHRoaXMucml2VG9vbHRpcFRoZW1lO1xuICAgICAgICB0b29sdGlwLmluc3RhbmNlLm1heFdpZHRoID0gdGhpcy5yaXZUb29sdGlwTWF4V2lkdGg7XG4gICAgICAgIHRvb2x0aXAuaW5zdGFuY2UucHJlZmVycmVkUG9zaXRpb24gPSB0aGlzLnJpdlRvb2x0aXBQcmVmZXJyZWRQb3NpdGlvbjtcbiAgICAgICAgdG9vbHRpcC5pbnN0YW5jZS5vbk1vdXNlRW50ZXIuc3Vic2NyaWJlKHRoaXMuY2FuY2VsQ2xvc2UuYmluZCh0aGlzKSk7XG4gICAgICAgIHRvb2x0aXAuaW5zdGFuY2Uub25Nb3VzZUxlYXZlLnN1YnNjcmliZSh0aGlzLmluaXRpYXRlQ2xvc2UuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJlZiA9IHRvb2x0aXA7XG4gICAgICAgIHRoaXMub3BlblRpbWVvdXQgPSB1bmRlZmluZWQ7XG4gICAgICB9LCB0aGlzLnJpdlRvb2x0aXBPcGVuRGVsYXkpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlbGVhdmUnKSBvbk1vdXNlTGVhdmUoKSB7XG4gICAgdGhpcy5jYW5jZWxPcGVuKCk7XG4gICAgaWYgKHRoaXMudG9vbHRpcFJlZikge1xuICAgICAgdGhpcy5pbml0aWF0ZUNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jYW5jZWxPcGVuKCk7XG4gICAgdGhpcy5pbml0aWF0ZUNsb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYXRlQ2xvc2UoKSB7XG4gICAgdGhpcy5jbG9zZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnRvb2x0aXBSZWY/LmRlc3Ryb3koKTtcbiAgICAgIHRoaXMudG9vbHRpcFJlZiA9IHVuZGVmaW5lZDtcbiAgICB9LCB0aGlzLnJpdlRvb2x0aXBDbG9zZURlbGF5KTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuY2VsQ2xvc2UoKSB7XG4gICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLmNsb3NlVGltZW91dCk7XG4gIH1cblxuICBwcml2YXRlIGNhbmNlbE9wZW4oKSB7XG4gICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLm9wZW5UaW1lb3V0KTtcbiAgICB0aGlzLm9wZW5UaW1lb3V0ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZUltbWVkaWF0ZWx5KCkge1xuICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5jbG9zZVRpbWVvdXQpO1xuICAgIHRoaXMudG9vbHRpcFJlZj8uZGVzdHJveSgpO1xuICAgIHRoaXMudG9vbHRpcFJlZiA9IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
|
|
@@ -12,7 +12,8 @@ import * as i6 from "../../size/size.directive";
|
|
|
12
12
|
import * as i7 from "../../format/svg-text-truncate/svg-text-truncate.directive";
|
|
13
13
|
import * as i8 from "../zero-state/zero-state.component";
|
|
14
14
|
export class ChartComponent {
|
|
15
|
-
constructor() {
|
|
15
|
+
constructor(cdr) {
|
|
16
|
+
this.cdr = cdr;
|
|
16
17
|
this.height$ = new BehaviorSubject(300);
|
|
17
18
|
this.width$ = new BehaviorSubject(0);
|
|
18
19
|
this.config$ = new BehaviorSubject(Chart.defaultConfig);
|
|
@@ -147,6 +148,10 @@ export class ChartComponent {
|
|
|
147
148
|
moreClick() {
|
|
148
149
|
this.lockShowMoreTooltip = !this.lockShowMoreTooltip;
|
|
149
150
|
}
|
|
151
|
+
closeHandler() {
|
|
152
|
+
this.lockShowMoreTooltip = false;
|
|
153
|
+
this.cdr.markForCheck();
|
|
154
|
+
}
|
|
150
155
|
mouseoverLegend() {
|
|
151
156
|
this.showMoreTooltip = true;
|
|
152
157
|
}
|
|
@@ -154,12 +159,12 @@ export class ChartComponent {
|
|
|
154
159
|
this.showMoreTooltip = false;
|
|
155
160
|
}
|
|
156
161
|
}
|
|
157
|
-
ChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
158
|
-
ChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ChartComponent, selector: "riv-chart", inputs: { config: "config", data: "data" }, outputs: { chartClicked: "chartClicked" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "moreTextContainer", first: true, predicate: ["moreTextContainer"], descendants: true }], ngImport: i0, template: "<div\n class=\"container\"\n (rivClientSize)=\"width = $event.width\"\n *ngIf=\"(empty$ | async) === false; else zeroState\"\n>\n <ng-container *ngIf=\"drawData$ | async; let d\">\n <div\n (mousemove)=\"mousemove($event, d.hover)\"\n (mouseleave)=\"mouseleave($event)\"\n (click)=\"click()\"\n #container\n class=\"sub-container\"\n >\n <svg:svg\n xmlns=\"http://www.w3.org/2000/svg\"\n [attr.viewBox]=\"d.viewBox\"\n width=\"100%\"\n [attr.height]=\"height\"\n >\n <ng-container *ngIf=\"!(config.type === 'horizontal-bar')\">\n <g *ngFor=\"let tick of d.xTicks\" text-anchor=\"middle\">\n <text class=\"tick-label\" [attr.x]=\"tick.x\" [attr.y]=\"height - 4\">\n {{ tick.label }}\n </text>\n </g>\n </ng-container>\n <ng-container *ngIf=\"config.type === 'horizontal-bar'\">\n <g *ngFor=\"let tick of d.xTicks\" text-anchor=\"left\">\n <text class=\"tick-label\" [attr.x]=\"tick.x\" [attr.y]=\"12\">\n {{ tick.label }}\n </text>\n <line\n class=\"tick-line\"\n [attr.x1]=\"tick.x\"\n [attr.x2]=\"tick.x\"\n y1=\"0\"\n [attr.y2]=\"height - 16\"\n ></line>\n </g>\n </ng-container>\n <g *ngFor=\"let tick of d.yTicks\">\n <line\n *ngIf=\"!(config.type === 'horizontal-bar')\"\n class=\"tick-line\"\n [attr.y1]=\"tick.y\"\n [attr.y2]=\"tick.y\"\n x1=\"0\"\n [attr.x2]=\"width\"\n ></line>\n <text\n rivSVGTextTruncate\n [text]=\"tick.label\"\n [width]=\"leftLabelMaxSize\"\n class=\"tick-label\"\n [attr.y]=\"tick.y - 4\"\n [attr.x]=\"0\"\n >\n {{ tick.label }}\n </text>\n </g>\n <g *ngIf=\"!!hover && !(config.type === 'horizontal-bar')\">\n <line\n class=\"tick-line\"\n [attr.x1]=\"hover.x\"\n [attr.x2]=\"hover.x\"\n y1=\"0\"\n [attr.y2]=\"height - 16\"\n stroke-width=\"2\"\n stroke-dasharray=\"4\"\n />\n </g>\n <g *ngFor=\"let bar of d.bars; let i = index\">\n <rect\n *ngFor=\"let rect of bar\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n [attr.fill]=\"varColor(d.colors, i)\"\n ></rect>\n </g>\n <g *ngFor=\"let bar of d.horizontalBars; let i = index\">\n <path\n *ngFor=\"let indBar of bar\"\n [attr.d]=\"indBar\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n [attr.fill]=\"varColor(d.colors, i)\"\n stroke-width=\"2\"\n />\n </g>\n <g *ngFor=\"let line of d.lines; let i = index\">\n <path\n [attr.d]=\"line\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n fill=\"none\"\n stroke-width=\"2\"\n ></path>\n </g>\n <g *ngFor=\"let lineSinglePointFallback of d.circles; let i = index\">\n <circle\n class=\"marker\"\n [attr.cx]=\"lineSinglePointFallback.cx\"\n [attr.cy]=\"lineSinglePointFallback.cy\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n <g *ngFor=\"let line of d.lines; let i = index\">\n <circle\n class=\"marker\"\n *ngIf=\"\n !!hover && (config.groupedTooltip || i === hover.visibleYIndex)\n \"\n [attr.cx]=\"hover.x\"\n [attr.cy]=\"hover.ys[i]\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n <g *ngFor=\"let area of d.areas; let i = index\">\n <path [attr.d]=\"area\" [attr.fill]=\"varColor(d.colors, i)\"></path>\n </g>\n <g *ngFor=\"let area of d.areas; let i = index\">\n <circle\n class=\"marker\"\n *ngIf=\"\n !!hover && (config.groupedTooltip || i === hover.visibleYIndex)\n \"\n [attr.cx]=\"hover.x\"\n [attr.cy]=\"hover.ys[i]\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n <path\n *ngFor=\"let path of d.arcs; let i = index\"\n [attr.d]=\"path\"\n [attr.fill]=\"varColor(d.colors, i)\"\n ></path>\n </svg:svg>\n <div *ngIf=\"config.type === 'donut'\" class=\"donut-display\">\n <div class=\"donut-value\" [ngClass]=\"config.donutDisplayInfo.size\">\n {{ config.donutDisplayInfo.displayValue }}\n </div>\n <div class=\"donut-label\">\n {{ config.donutDisplayInfo.displayLabel }}\n </div>\n </div>\n <ng-container *ngIf=\"!!hover && hover.tooltip\">\n <riv-callout\n *riv-overlay\n [anchor]=\"hover.tooltip.anchor\"\n [isModal]=\"false\"\n [preferredPosition]=\"'center-right'\"\n [theme]=\"'light'\"\n >\n <div class=\"callout-content\">\n <div *ngIf=\"hover.tooltip.date\" class=\"callout-row\">\n {{ hover.tooltip.date }}\n </div>\n <div\n class=\"callout-row\"\n *ngFor=\"let metric of hover.tooltip.metrics\"\n >\n <span class=\"series-label\">\n <riv-legend-item [colorToken]=\"metric.color\"></riv-legend-item>\n <span>{{ metric.label }}</span>\n </span>\n <span>{{ metric.value }}</span>\n </div>\n </div>\n </riv-callout>\n </ng-container>\n </div>\n <legend>\n <ng-container *ngIf=\"firstHiddenLegendItemIndex$ | async; let fi\">\n <ng-container *ngFor=\"let item of d.data.ys; let i = index\">\n <riv-legend-item\n *ngIf=\"i < fi\"\n [label]=\"item.label\"\n [visibility]=\"item.hidden ? 'hidden' : 'visible'\"\n [clickable]=\"config.allowLegendToggle\"\n [colorToken]=\"config.colors[i % config.colors.length]\"\n (itemClick)=\"toggleLegend(item.label)\"\n ></riv-legend-item>\n </ng-container>\n <div\n #moreTextContainer\n class=\"more-text-container\"\n (mouseover)=\"mouseoverLegend()\"\n (mouseleave)=\"mouseleaveLegend()\"\n (click)=\"moreClick()\"\n *ngIf=\"fi < d.data.ys.length\"\n >\n <span rivLink class=\"more-text\">\n +\n {{ d.data.ys.length - fi }} more\n </span>\n </div>\n <ng-container *ngIf=\"showMoreTooltip || lockShowMoreTooltip\">\n <riv-callout\n *riv-overlay\n [anchor]=\"moreTextContainer?.nativeElement\"\n [isModal]=\"lockShowMoreTooltip\"\n (close)=\"lockShowMoreTooltip = false\"\n [preferredPosition]=\"'bottom-right'\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n >\n <div class=\"legend-tooltip\">\n <ng-container *ngFor=\"let item of d.data.ys; let i = index\">\n <riv-legend-item\n *ngIf=\"i >= fi\"\n [label]=\"item.label\"\n [visibility]=\"item.hidden ? 'hidden' : 'visible'\"\n [clickable]=\"config.allowLegendToggle\"\n [colorToken]=\"config.colors[i % config.colors.length]\"\n (itemClick)=\"toggleLegend(item.label)\"\n ></riv-legend-item>\n </ng-container>\n </div>\n </riv-callout>\n </ng-container>\n </ng-container>\n </legend>\n </ng-container>\n</div>\n\n<ng-template #zeroState>\n <riv-zero-state [message]=\"config.zeroStateMessage\"></riv-zero-state>\n</ng-template>\n", styles: [".container{-webkit-user-select:none;user-select:none;position:relative;display:flex;flex-direction:column;gap:var(--size-small)}.tick-line{stroke:var(--gray-20)}.tick-label{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);fill:var(--type-light-low-contrast)}.marker{fill:var(--surface-light-0)}.callout-content{pointer-events:none;padding:var(--size-medium) var(--size-xlarge);display:flex;flex-direction:column}.callout-row{white-space:nowrap;display:flex;padding:var(--size-medium) 0;gap:var(--size-medium);align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0)}.callout-row:not(:last-child){border-bottom:var(--border-width) solid var(--border-light)}.series-label{flex-grow:1;font-weight:var(--font-weight-heavy);display:flex;align-items:center;gap:var(--size-small)}legend{display:flex;flex-wrap:wrap;gap:var(--size-large);justify-content:flex-start;align-items:baseline;width:100%}.more-text-container{width:calc(var(--base-grid-size) * 15);height:var(--size-large)}.more-text{font-size:var(--type-1-font-size);top:calc(var(--base-grid-size) * -1);position:relative}.legend-tooltip{padding:var(--size-medium) var(--size-xlarge);display:flex;flex-direction:column;overflow-y:scroll;max-height:clamp(0px,60vh,600px)}.legend-tooltip>riv-legend-item{white-space:nowrap;display:flex;padding:var(--size-medium) 0;gap:var(--size-medium);align-items:center;line-height:var(--type-1-line-height-0)}.sub-container{display:grid;grid-template-rows:1fr;grid-template-columns:1fr;justify-items:center;align-items:center}svg{grid-row:1 / 1;grid-column:1 / 1}.donut-display{grid-row:1 / 1;grid-column:1 / 1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--size-small)}.donut-label{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);color:var(--type-light-low-contrast)}.donut-value,.donut-label{text-shadow:0 0 var(--size-small) var(--surface-light-0),0 0 var(--size-xsmall) var(--surface-light-0)}.donut-value.xsmall{font:var(--stat-xsmall)}.donut-value.small{font:var(--stat-small)}.donut-value.medium{font:var(--stat-medium)}.donut-value.large{font:var(--stat-large)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "component", type: i3.LegendItemComponent, selector: "riv-legend-item", inputs: ["label", "colorToken", "style", "visibility", "iconTooltip", "clickable", "showCheckWhenClickable"], outputs: ["itemClick"] }, { kind: "component", type: i4.LinkComponent, selector: "[rivLink]", inputs: ["disabled", "locked", "theme", "variant"] }, { kind: "directive", type: i5.OverlayDirective, selector: "[riv-overlay]" }, { kind: "directive", type: i6.SizeDirective, selector: "[rivClientSize]", outputs: ["rivClientSize"] }, { kind: "directive", type: i7.SVGTextTruncateDirective, selector: "svg text[rivSVGTextTruncate]", inputs: ["text", "width"] }, { kind: "component", type: i8.ZeroStateComponent, selector: "riv-zero-state", inputs: ["message", "title", "icon"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
162
|
+
ChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ChartComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
163
|
+
ChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ChartComponent, selector: "riv-chart", inputs: { config: "config", data: "data" }, outputs: { chartClicked: "chartClicked" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "moreTextContainer", first: true, predicate: ["moreTextContainer"], descendants: true }], ngImport: i0, template: "<div\n class=\"container\"\n (rivClientSize)=\"width = $event.width\"\n *ngIf=\"(empty$ | async) === false; else zeroState\"\n>\n <ng-container *ngIf=\"drawData$ | async; let d\">\n <div\n (mousemove)=\"mousemove($event, d.hover)\"\n (mouseleave)=\"mouseleave($event)\"\n (click)=\"click()\"\n #container\n class=\"sub-container\"\n >\n <svg:svg\n xmlns=\"http://www.w3.org/2000/svg\"\n [attr.viewBox]=\"d.viewBox\"\n width=\"100%\"\n [attr.height]=\"height\"\n >\n <ng-container *ngIf=\"!(config.type === 'horizontal-bar')\">\n <g *ngFor=\"let tick of d.xTicks\" text-anchor=\"middle\">\n <text class=\"tick-label\" [attr.x]=\"tick.x\" [attr.y]=\"height - 4\">\n {{ tick.label }}\n </text>\n </g>\n </ng-container>\n <ng-container *ngIf=\"config.type === 'horizontal-bar'\">\n <g *ngFor=\"let tick of d.xTicks\" text-anchor=\"left\">\n <text class=\"tick-label\" [attr.x]=\"tick.x\" [attr.y]=\"12\">\n {{ tick.label }}\n </text>\n <line\n class=\"tick-line\"\n [attr.x1]=\"tick.x\"\n [attr.x2]=\"tick.x\"\n y1=\"0\"\n [attr.y2]=\"height - 16\"\n ></line>\n </g>\n </ng-container>\n <g *ngFor=\"let tick of d.yTicks\">\n <line\n *ngIf=\"!(config.type === 'horizontal-bar')\"\n class=\"tick-line\"\n [attr.y1]=\"tick.y\"\n [attr.y2]=\"tick.y\"\n x1=\"0\"\n [attr.x2]=\"width\"\n ></line>\n <text\n rivSVGTextTruncate\n [text]=\"tick.label\"\n [width]=\"leftLabelMaxSize\"\n class=\"tick-label\"\n [attr.y]=\"tick.y - 4\"\n [attr.x]=\"0\"\n >\n {{ tick.label }}\n </text>\n </g>\n <g *ngIf=\"!!hover && !(config.type === 'horizontal-bar')\">\n <line\n class=\"tick-line\"\n [attr.x1]=\"hover.x\"\n [attr.x2]=\"hover.x\"\n y1=\"0\"\n [attr.y2]=\"height - 16\"\n stroke-width=\"2\"\n stroke-dasharray=\"4\"\n />\n </g>\n <g *ngFor=\"let bar of d.bars; let i = index\">\n <rect\n *ngFor=\"let rect of bar\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n [attr.fill]=\"varColor(d.colors, i)\"\n ></rect>\n </g>\n <g *ngFor=\"let bar of d.horizontalBars; let i = index\">\n <path\n *ngFor=\"let indBar of bar\"\n [attr.d]=\"indBar\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n [attr.fill]=\"varColor(d.colors, i)\"\n stroke-width=\"2\"\n />\n </g>\n <g *ngFor=\"let line of d.lines; let i = index\">\n <path\n [attr.d]=\"line\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n fill=\"none\"\n stroke-width=\"2\"\n ></path>\n </g>\n <g *ngFor=\"let lineSinglePointFallback of d.circles; let i = index\">\n <circle\n class=\"marker\"\n [attr.cx]=\"lineSinglePointFallback.cx\"\n [attr.cy]=\"lineSinglePointFallback.cy\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n <g *ngFor=\"let line of d.lines; let i = index\">\n <circle\n class=\"marker\"\n *ngIf=\"\n !!hover && (config.groupedTooltip || i === hover.visibleYIndex)\n \"\n [attr.cx]=\"hover.x\"\n [attr.cy]=\"hover.ys[i]\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n <g *ngFor=\"let area of d.areas; let i = index\">\n <path [attr.d]=\"area\" [attr.fill]=\"varColor(d.colors, i)\"></path>\n </g>\n <g *ngFor=\"let area of d.areas; let i = index\">\n <circle\n class=\"marker\"\n *ngIf=\"\n !!hover && (config.groupedTooltip || i === hover.visibleYIndex)\n \"\n [attr.cx]=\"hover.x\"\n [attr.cy]=\"hover.ys[i]\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n <path\n *ngFor=\"let path of d.arcs; let i = index\"\n [attr.d]=\"path\"\n [attr.fill]=\"varColor(d.colors, i)\"\n ></path>\n </svg:svg>\n <div *ngIf=\"config.type === 'donut'\" class=\"donut-display\">\n <div class=\"donut-value\" [ngClass]=\"config.donutDisplayInfo.size\">\n {{ config.donutDisplayInfo.displayValue }}\n </div>\n <div class=\"donut-label\">\n {{ config.donutDisplayInfo.displayLabel }}\n </div>\n </div>\n <ng-container *ngIf=\"hover?.tooltip as tooltip\">\n <riv-callout\n *riv-overlay\n [anchor]=\"tooltip.anchor\"\n [isModal]=\"false\"\n [preferredPosition]=\"'center-right'\"\n [theme]=\"'light'\"\n >\n <div class=\"callout-content\">\n <div *ngIf=\"tooltip.date\" class=\"callout-row\">\n {{ tooltip.date }}\n </div>\n <div class=\"callout-row\" *ngFor=\"let metric of tooltip.metrics\">\n <span class=\"series-label\">\n <riv-legend-item [colorToken]=\"metric.color\"></riv-legend-item>\n <span>{{ metric.label }}</span>\n </span>\n <span>{{ metric.value }}</span>\n </div>\n </div>\n </riv-callout>\n </ng-container>\n </div>\n <legend>\n <ng-container *ngIf=\"firstHiddenLegendItemIndex$ | async; let fi\">\n <ng-container *ngFor=\"let item of d.data.ys; let i = index\">\n <riv-legend-item\n *ngIf=\"i < fi\"\n [label]=\"item.label\"\n [visibility]=\"item.hidden ? 'hidden' : 'visible'\"\n [clickable]=\"config.allowLegendToggle\"\n [colorToken]=\"config.colors[i % config.colors.length]\"\n (itemClick)=\"toggleLegend(item.label)\"\n ></riv-legend-item>\n </ng-container>\n <div\n #moreTextContainer\n class=\"more-text-container\"\n (mouseover)=\"mouseoverLegend()\"\n (mouseleave)=\"mouseleaveLegend()\"\n (click)=\"moreClick()\"\n *ngIf=\"fi < d.data.ys.length\"\n >\n <span rivLink class=\"more-text\">\n +\n {{ d.data.ys.length - fi }} more\n </span>\n </div>\n <ng-container *ngIf=\"showMoreTooltip || lockShowMoreTooltip\">\n <riv-callout\n *riv-overlay\n [anchor]=\"moreTextContainer?.nativeElement\"\n [isModal]=\"lockShowMoreTooltip\"\n (close)=\"closeHandler()\"\n [preferredPosition]=\"'bottom-right'\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n >\n <div class=\"legend-tooltip\">\n <ng-container *ngFor=\"let item of d.data.ys; let i = index\">\n <riv-legend-item\n *ngIf=\"i >= fi\"\n [label]=\"item.label\"\n [visibility]=\"item.hidden ? 'hidden' : 'visible'\"\n [clickable]=\"config.allowLegendToggle\"\n [colorToken]=\"config.colors[i % config.colors.length]\"\n (itemClick)=\"toggleLegend(item.label)\"\n ></riv-legend-item>\n </ng-container>\n </div>\n </riv-callout>\n </ng-container>\n </ng-container>\n </legend>\n </ng-container>\n</div>\n\n<ng-template #zeroState>\n <riv-zero-state [message]=\"config.zeroStateMessage\"></riv-zero-state>\n</ng-template>\n", styles: [".container{-webkit-user-select:none;user-select:none;position:relative;display:flex;flex-direction:column;gap:var(--size-small)}.tick-line{stroke:var(--gray-20)}.tick-label{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);fill:var(--type-light-low-contrast)}.marker{fill:var(--surface-light-0)}.callout-content{pointer-events:none;padding:var(--size-medium) var(--size-xlarge);display:flex;flex-direction:column}.callout-row{white-space:nowrap;display:flex;padding:var(--size-medium) 0;gap:var(--size-medium);align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0)}.callout-row:not(:last-child){border-bottom:var(--border-width) solid var(--border-light)}.series-label{flex-grow:1;font-weight:var(--font-weight-heavy);display:flex;align-items:center;gap:var(--size-small)}legend{display:flex;flex-wrap:wrap;gap:var(--size-large);justify-content:flex-start;align-items:baseline;width:100%}.more-text-container{width:calc(var(--base-grid-size) * 15);height:var(--size-large)}.more-text{font-size:var(--type-1-font-size);top:calc(var(--base-grid-size) * -1);position:relative}.legend-tooltip{padding:var(--size-medium) var(--size-xlarge);display:flex;flex-direction:column;overflow-y:scroll;max-height:clamp(0px,60vh,600px)}.legend-tooltip>riv-legend-item{white-space:nowrap;display:flex;padding:var(--size-medium) 0;gap:var(--size-medium);align-items:center;line-height:var(--type-1-line-height-0)}.sub-container{display:grid;grid-template-rows:1fr;grid-template-columns:1fr;justify-items:center;align-items:center}svg{grid-row:1 / 1;grid-column:1 / 1}.donut-display{grid-row:1 / 1;grid-column:1 / 1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--size-small)}.donut-label{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);color:var(--type-light-low-contrast)}.donut-value,.donut-label{text-shadow:0 0 var(--size-small) var(--surface-light-0),0 0 var(--size-xsmall) var(--surface-light-0)}.donut-value.xsmall{font:var(--stat-xsmall)}.donut-value.small{font:var(--stat-small)}.donut-value.medium{font:var(--stat-medium)}.donut-value.large{font:var(--stat-large)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "component", type: i3.LegendItemComponent, selector: "riv-legend-item", inputs: ["label", "colorToken", "style", "visibility", "iconTooltip", "clickable", "showCheckWhenClickable"], outputs: ["itemClick"] }, { kind: "component", type: i4.LinkComponent, selector: "[rivLink]", inputs: ["disabled", "locked", "theme", "variant"] }, { kind: "directive", type: i5.OverlayDirective, selector: "[riv-overlay]" }, { kind: "directive", type: i6.SizeDirective, selector: "[rivClientSize]", outputs: ["rivClientSize"] }, { kind: "directive", type: i7.SVGTextTruncateDirective, selector: "svg text[rivSVGTextTruncate]", inputs: ["text", "width"] }, { kind: "component", type: i8.ZeroStateComponent, selector: "riv-zero-state", inputs: ["message", "title", "icon"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
159
164
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ChartComponent, decorators: [{
|
|
160
165
|
type: Component,
|
|
161
|
-
args: [{ selector: 'riv-chart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"container\"\n (rivClientSize)=\"width = $event.width\"\n *ngIf=\"(empty$ | async) === false; else zeroState\"\n>\n <ng-container *ngIf=\"drawData$ | async; let d\">\n <div\n (mousemove)=\"mousemove($event, d.hover)\"\n (mouseleave)=\"mouseleave($event)\"\n (click)=\"click()\"\n #container\n class=\"sub-container\"\n >\n <svg:svg\n xmlns=\"http://www.w3.org/2000/svg\"\n [attr.viewBox]=\"d.viewBox\"\n width=\"100%\"\n [attr.height]=\"height\"\n >\n <ng-container *ngIf=\"!(config.type === 'horizontal-bar')\">\n <g *ngFor=\"let tick of d.xTicks\" text-anchor=\"middle\">\n <text class=\"tick-label\" [attr.x]=\"tick.x\" [attr.y]=\"height - 4\">\n {{ tick.label }}\n </text>\n </g>\n </ng-container>\n <ng-container *ngIf=\"config.type === 'horizontal-bar'\">\n <g *ngFor=\"let tick of d.xTicks\" text-anchor=\"left\">\n <text class=\"tick-label\" [attr.x]=\"tick.x\" [attr.y]=\"12\">\n {{ tick.label }}\n </text>\n <line\n class=\"tick-line\"\n [attr.x1]=\"tick.x\"\n [attr.x2]=\"tick.x\"\n y1=\"0\"\n [attr.y2]=\"height - 16\"\n ></line>\n </g>\n </ng-container>\n <g *ngFor=\"let tick of d.yTicks\">\n <line\n *ngIf=\"!(config.type === 'horizontal-bar')\"\n class=\"tick-line\"\n [attr.y1]=\"tick.y\"\n [attr.y2]=\"tick.y\"\n x1=\"0\"\n [attr.x2]=\"width\"\n ></line>\n <text\n rivSVGTextTruncate\n [text]=\"tick.label\"\n [width]=\"leftLabelMaxSize\"\n class=\"tick-label\"\n [attr.y]=\"tick.y - 4\"\n [attr.x]=\"0\"\n >\n {{ tick.label }}\n </text>\n </g>\n <g *ngIf=\"!!hover && !(config.type === 'horizontal-bar')\">\n <line\n class=\"tick-line\"\n [attr.x1]=\"hover.x\"\n [attr.x2]=\"hover.x\"\n y1=\"0\"\n [attr.y2]=\"height - 16\"\n stroke-width=\"2\"\n stroke-dasharray=\"4\"\n />\n </g>\n <g *ngFor=\"let bar of d.bars; let i = index\">\n <rect\n *ngFor=\"let rect of bar\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n [attr.fill]=\"varColor(d.colors, i)\"\n ></rect>\n </g>\n <g *ngFor=\"let bar of d.horizontalBars; let i = index\">\n <path\n *ngFor=\"let indBar of bar\"\n [attr.d]=\"indBar\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n [attr.fill]=\"varColor(d.colors, i)\"\n stroke-width=\"2\"\n />\n </g>\n <g *ngFor=\"let line of d.lines; let i = index\">\n <path\n [attr.d]=\"line\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n fill=\"none\"\n stroke-width=\"2\"\n ></path>\n </g>\n <g *ngFor=\"let lineSinglePointFallback of d.circles; let i = index\">\n <circle\n class=\"marker\"\n [attr.cx]=\"lineSinglePointFallback.cx\"\n [attr.cy]=\"lineSinglePointFallback.cy\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n <g *ngFor=\"let line of d.lines; let i = index\">\n <circle\n class=\"marker\"\n *ngIf=\"\n !!hover && (config.groupedTooltip || i === hover.visibleYIndex)\n \"\n [attr.cx]=\"hover.x\"\n [attr.cy]=\"hover.ys[i]\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n <g *ngFor=\"let area of d.areas; let i = index\">\n <path [attr.d]=\"area\" [attr.fill]=\"varColor(d.colors, i)\"></path>\n </g>\n <g *ngFor=\"let area of d.areas; let i = index\">\n <circle\n class=\"marker\"\n *ngIf=\"\n !!hover && (config.groupedTooltip || i === hover.visibleYIndex)\n \"\n [attr.cx]=\"hover.x\"\n [attr.cy]=\"hover.ys[i]\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n <path\n *ngFor=\"let path of d.arcs; let i = index\"\n [attr.d]=\"path\"\n [attr.fill]=\"varColor(d.colors, i)\"\n ></path>\n </svg:svg>\n <div *ngIf=\"config.type === 'donut'\" class=\"donut-display\">\n <div class=\"donut-value\" [ngClass]=\"config.donutDisplayInfo.size\">\n {{ config.donutDisplayInfo.displayValue }}\n </div>\n <div class=\"donut-label\">\n {{ config.donutDisplayInfo.displayLabel }}\n </div>\n </div>\n <ng-container *ngIf=\"!!hover && hover.tooltip\">\n <riv-callout\n *riv-overlay\n [anchor]=\"hover.tooltip.anchor\"\n [isModal]=\"false\"\n [preferredPosition]=\"'center-right'\"\n [theme]=\"'light'\"\n >\n <div class=\"callout-content\">\n <div *ngIf=\"hover.tooltip.date\" class=\"callout-row\">\n {{ hover.tooltip.date }}\n </div>\n <div\n class=\"callout-row\"\n *ngFor=\"let metric of hover.tooltip.metrics\"\n >\n <span class=\"series-label\">\n <riv-legend-item [colorToken]=\"metric.color\"></riv-legend-item>\n <span>{{ metric.label }}</span>\n </span>\n <span>{{ metric.value }}</span>\n </div>\n </div>\n </riv-callout>\n </ng-container>\n </div>\n <legend>\n <ng-container *ngIf=\"firstHiddenLegendItemIndex$ | async; let fi\">\n <ng-container *ngFor=\"let item of d.data.ys; let i = index\">\n <riv-legend-item\n *ngIf=\"i < fi\"\n [label]=\"item.label\"\n [visibility]=\"item.hidden ? 'hidden' : 'visible'\"\n [clickable]=\"config.allowLegendToggle\"\n [colorToken]=\"config.colors[i % config.colors.length]\"\n (itemClick)=\"toggleLegend(item.label)\"\n ></riv-legend-item>\n </ng-container>\n <div\n #moreTextContainer\n class=\"more-text-container\"\n (mouseover)=\"mouseoverLegend()\"\n (mouseleave)=\"mouseleaveLegend()\"\n (click)=\"moreClick()\"\n *ngIf=\"fi < d.data.ys.length\"\n >\n <span rivLink class=\"more-text\">\n +\n {{ d.data.ys.length - fi }} more\n </span>\n </div>\n <ng-container *ngIf=\"showMoreTooltip || lockShowMoreTooltip\">\n <riv-callout\n *riv-overlay\n [anchor]=\"moreTextContainer?.nativeElement\"\n [isModal]=\"lockShowMoreTooltip\"\n (close)=\"lockShowMoreTooltip = false\"\n [preferredPosition]=\"'bottom-right'\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n >\n <div class=\"legend-tooltip\">\n <ng-container *ngFor=\"let item of d.data.ys; let i = index\">\n <riv-legend-item\n *ngIf=\"i >= fi\"\n [label]=\"item.label\"\n [visibility]=\"item.hidden ? 'hidden' : 'visible'\"\n [clickable]=\"config.allowLegendToggle\"\n [colorToken]=\"config.colors[i % config.colors.length]\"\n (itemClick)=\"toggleLegend(item.label)\"\n ></riv-legend-item>\n </ng-container>\n </div>\n </riv-callout>\n </ng-container>\n </ng-container>\n </legend>\n </ng-container>\n</div>\n\n<ng-template #zeroState>\n <riv-zero-state [message]=\"config.zeroStateMessage\"></riv-zero-state>\n</ng-template>\n", styles: [".container{-webkit-user-select:none;user-select:none;position:relative;display:flex;flex-direction:column;gap:var(--size-small)}.tick-line{stroke:var(--gray-20)}.tick-label{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);fill:var(--type-light-low-contrast)}.marker{fill:var(--surface-light-0)}.callout-content{pointer-events:none;padding:var(--size-medium) var(--size-xlarge);display:flex;flex-direction:column}.callout-row{white-space:nowrap;display:flex;padding:var(--size-medium) 0;gap:var(--size-medium);align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0)}.callout-row:not(:last-child){border-bottom:var(--border-width) solid var(--border-light)}.series-label{flex-grow:1;font-weight:var(--font-weight-heavy);display:flex;align-items:center;gap:var(--size-small)}legend{display:flex;flex-wrap:wrap;gap:var(--size-large);justify-content:flex-start;align-items:baseline;width:100%}.more-text-container{width:calc(var(--base-grid-size) * 15);height:var(--size-large)}.more-text{font-size:var(--type-1-font-size);top:calc(var(--base-grid-size) * -1);position:relative}.legend-tooltip{padding:var(--size-medium) var(--size-xlarge);display:flex;flex-direction:column;overflow-y:scroll;max-height:clamp(0px,60vh,600px)}.legend-tooltip>riv-legend-item{white-space:nowrap;display:flex;padding:var(--size-medium) 0;gap:var(--size-medium);align-items:center;line-height:var(--type-1-line-height-0)}.sub-container{display:grid;grid-template-rows:1fr;grid-template-columns:1fr;justify-items:center;align-items:center}svg{grid-row:1 / 1;grid-column:1 / 1}.donut-display{grid-row:1 / 1;grid-column:1 / 1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--size-small)}.donut-label{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);color:var(--type-light-low-contrast)}.donut-value,.donut-label{text-shadow:0 0 var(--size-small) var(--surface-light-0),0 0 var(--size-xsmall) var(--surface-light-0)}.donut-value.xsmall{font:var(--stat-xsmall)}.donut-value.small{font:var(--stat-small)}.donut-value.medium{font:var(--stat-medium)}.donut-value.large{font:var(--stat-large)}\n"] }]
|
|
162
|
-
}], propDecorators: { container: [{
|
|
166
|
+
args: [{ selector: 'riv-chart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"container\"\n (rivClientSize)=\"width = $event.width\"\n *ngIf=\"(empty$ | async) === false; else zeroState\"\n>\n <ng-container *ngIf=\"drawData$ | async; let d\">\n <div\n (mousemove)=\"mousemove($event, d.hover)\"\n (mouseleave)=\"mouseleave($event)\"\n (click)=\"click()\"\n #container\n class=\"sub-container\"\n >\n <svg:svg\n xmlns=\"http://www.w3.org/2000/svg\"\n [attr.viewBox]=\"d.viewBox\"\n width=\"100%\"\n [attr.height]=\"height\"\n >\n <ng-container *ngIf=\"!(config.type === 'horizontal-bar')\">\n <g *ngFor=\"let tick of d.xTicks\" text-anchor=\"middle\">\n <text class=\"tick-label\" [attr.x]=\"tick.x\" [attr.y]=\"height - 4\">\n {{ tick.label }}\n </text>\n </g>\n </ng-container>\n <ng-container *ngIf=\"config.type === 'horizontal-bar'\">\n <g *ngFor=\"let tick of d.xTicks\" text-anchor=\"left\">\n <text class=\"tick-label\" [attr.x]=\"tick.x\" [attr.y]=\"12\">\n {{ tick.label }}\n </text>\n <line\n class=\"tick-line\"\n [attr.x1]=\"tick.x\"\n [attr.x2]=\"tick.x\"\n y1=\"0\"\n [attr.y2]=\"height - 16\"\n ></line>\n </g>\n </ng-container>\n <g *ngFor=\"let tick of d.yTicks\">\n <line\n *ngIf=\"!(config.type === 'horizontal-bar')\"\n class=\"tick-line\"\n [attr.y1]=\"tick.y\"\n [attr.y2]=\"tick.y\"\n x1=\"0\"\n [attr.x2]=\"width\"\n ></line>\n <text\n rivSVGTextTruncate\n [text]=\"tick.label\"\n [width]=\"leftLabelMaxSize\"\n class=\"tick-label\"\n [attr.y]=\"tick.y - 4\"\n [attr.x]=\"0\"\n >\n {{ tick.label }}\n </text>\n </g>\n <g *ngIf=\"!!hover && !(config.type === 'horizontal-bar')\">\n <line\n class=\"tick-line\"\n [attr.x1]=\"hover.x\"\n [attr.x2]=\"hover.x\"\n y1=\"0\"\n [attr.y2]=\"height - 16\"\n stroke-width=\"2\"\n stroke-dasharray=\"4\"\n />\n </g>\n <g *ngFor=\"let bar of d.bars; let i = index\">\n <rect\n *ngFor=\"let rect of bar\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n [attr.fill]=\"varColor(d.colors, i)\"\n ></rect>\n </g>\n <g *ngFor=\"let bar of d.horizontalBars; let i = index\">\n <path\n *ngFor=\"let indBar of bar\"\n [attr.d]=\"indBar\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n [attr.fill]=\"varColor(d.colors, i)\"\n stroke-width=\"2\"\n />\n </g>\n <g *ngFor=\"let line of d.lines; let i = index\">\n <path\n [attr.d]=\"line\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n fill=\"none\"\n stroke-width=\"2\"\n ></path>\n </g>\n <g *ngFor=\"let lineSinglePointFallback of d.circles; let i = index\">\n <circle\n class=\"marker\"\n [attr.cx]=\"lineSinglePointFallback.cx\"\n [attr.cy]=\"lineSinglePointFallback.cy\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n <g *ngFor=\"let line of d.lines; let i = index\">\n <circle\n class=\"marker\"\n *ngIf=\"\n !!hover && (config.groupedTooltip || i === hover.visibleYIndex)\n \"\n [attr.cx]=\"hover.x\"\n [attr.cy]=\"hover.ys[i]\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n <g *ngFor=\"let area of d.areas; let i = index\">\n <path [attr.d]=\"area\" [attr.fill]=\"varColor(d.colors, i)\"></path>\n </g>\n <g *ngFor=\"let area of d.areas; let i = index\">\n <circle\n class=\"marker\"\n *ngIf=\"\n !!hover && (config.groupedTooltip || i === hover.visibleYIndex)\n \"\n [attr.cx]=\"hover.x\"\n [attr.cy]=\"hover.ys[i]\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n <path\n *ngFor=\"let path of d.arcs; let i = index\"\n [attr.d]=\"path\"\n [attr.fill]=\"varColor(d.colors, i)\"\n ></path>\n </svg:svg>\n <div *ngIf=\"config.type === 'donut'\" class=\"donut-display\">\n <div class=\"donut-value\" [ngClass]=\"config.donutDisplayInfo.size\">\n {{ config.donutDisplayInfo.displayValue }}\n </div>\n <div class=\"donut-label\">\n {{ config.donutDisplayInfo.displayLabel }}\n </div>\n </div>\n <ng-container *ngIf=\"hover?.tooltip as tooltip\">\n <riv-callout\n *riv-overlay\n [anchor]=\"tooltip.anchor\"\n [isModal]=\"false\"\n [preferredPosition]=\"'center-right'\"\n [theme]=\"'light'\"\n >\n <div class=\"callout-content\">\n <div *ngIf=\"tooltip.date\" class=\"callout-row\">\n {{ tooltip.date }}\n </div>\n <div class=\"callout-row\" *ngFor=\"let metric of tooltip.metrics\">\n <span class=\"series-label\">\n <riv-legend-item [colorToken]=\"metric.color\"></riv-legend-item>\n <span>{{ metric.label }}</span>\n </span>\n <span>{{ metric.value }}</span>\n </div>\n </div>\n </riv-callout>\n </ng-container>\n </div>\n <legend>\n <ng-container *ngIf=\"firstHiddenLegendItemIndex$ | async; let fi\">\n <ng-container *ngFor=\"let item of d.data.ys; let i = index\">\n <riv-legend-item\n *ngIf=\"i < fi\"\n [label]=\"item.label\"\n [visibility]=\"item.hidden ? 'hidden' : 'visible'\"\n [clickable]=\"config.allowLegendToggle\"\n [colorToken]=\"config.colors[i % config.colors.length]\"\n (itemClick)=\"toggleLegend(item.label)\"\n ></riv-legend-item>\n </ng-container>\n <div\n #moreTextContainer\n class=\"more-text-container\"\n (mouseover)=\"mouseoverLegend()\"\n (mouseleave)=\"mouseleaveLegend()\"\n (click)=\"moreClick()\"\n *ngIf=\"fi < d.data.ys.length\"\n >\n <span rivLink class=\"more-text\">\n +\n {{ d.data.ys.length - fi }} more\n </span>\n </div>\n <ng-container *ngIf=\"showMoreTooltip || lockShowMoreTooltip\">\n <riv-callout\n *riv-overlay\n [anchor]=\"moreTextContainer?.nativeElement\"\n [isModal]=\"lockShowMoreTooltip\"\n (close)=\"closeHandler()\"\n [preferredPosition]=\"'bottom-right'\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n >\n <div class=\"legend-tooltip\">\n <ng-container *ngFor=\"let item of d.data.ys; let i = index\">\n <riv-legend-item\n *ngIf=\"i >= fi\"\n [label]=\"item.label\"\n [visibility]=\"item.hidden ? 'hidden' : 'visible'\"\n [clickable]=\"config.allowLegendToggle\"\n [colorToken]=\"config.colors[i % config.colors.length]\"\n (itemClick)=\"toggleLegend(item.label)\"\n ></riv-legend-item>\n </ng-container>\n </div>\n </riv-callout>\n </ng-container>\n </ng-container>\n </legend>\n </ng-container>\n</div>\n\n<ng-template #zeroState>\n <riv-zero-state [message]=\"config.zeroStateMessage\"></riv-zero-state>\n</ng-template>\n", styles: [".container{-webkit-user-select:none;user-select:none;position:relative;display:flex;flex-direction:column;gap:var(--size-small)}.tick-line{stroke:var(--gray-20)}.tick-label{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);fill:var(--type-light-low-contrast)}.marker{fill:var(--surface-light-0)}.callout-content{pointer-events:none;padding:var(--size-medium) var(--size-xlarge);display:flex;flex-direction:column}.callout-row{white-space:nowrap;display:flex;padding:var(--size-medium) 0;gap:var(--size-medium);align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0)}.callout-row:not(:last-child){border-bottom:var(--border-width) solid var(--border-light)}.series-label{flex-grow:1;font-weight:var(--font-weight-heavy);display:flex;align-items:center;gap:var(--size-small)}legend{display:flex;flex-wrap:wrap;gap:var(--size-large);justify-content:flex-start;align-items:baseline;width:100%}.more-text-container{width:calc(var(--base-grid-size) * 15);height:var(--size-large)}.more-text{font-size:var(--type-1-font-size);top:calc(var(--base-grid-size) * -1);position:relative}.legend-tooltip{padding:var(--size-medium) var(--size-xlarge);display:flex;flex-direction:column;overflow-y:scroll;max-height:clamp(0px,60vh,600px)}.legend-tooltip>riv-legend-item{white-space:nowrap;display:flex;padding:var(--size-medium) 0;gap:var(--size-medium);align-items:center;line-height:var(--type-1-line-height-0)}.sub-container{display:grid;grid-template-rows:1fr;grid-template-columns:1fr;justify-items:center;align-items:center}svg{grid-row:1 / 1;grid-column:1 / 1}.donut-display{grid-row:1 / 1;grid-column:1 / 1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--size-small)}.donut-label{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);color:var(--type-light-low-contrast)}.donut-value,.donut-label{text-shadow:0 0 var(--size-small) var(--surface-light-0),0 0 var(--size-xsmall) var(--surface-light-0)}.donut-value.xsmall{font:var(--stat-xsmall)}.donut-value.small{font:var(--stat-small)}.donut-value.medium{font:var(--stat-medium)}.donut-value.large{font:var(--stat-large)}\n"] }]
|
|
167
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { container: [{
|
|
163
168
|
type: ViewChild,
|
|
164
169
|
args: ['container']
|
|
165
170
|
}], moreTextContainer: [{
|
|
@@ -172,4 +177,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
172
177
|
}], chartClicked: [{
|
|
173
178
|
type: Output
|
|
174
179
|
}] } });
|
|
175
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdmlzdWFsaXphdGlvbi9jaGFydC9jaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi92aXN1YWxpemF0aW9uL2NoYXJ0L2NoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLG9CQUFvQixFQUNwQixHQUFHLEVBQ0gsSUFBSSxFQUNKLFNBQVMsRUFDVCxPQUFPLEdBQ1IsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDOzs7Ozs7Ozs7O0FBUWhDLE1BQU0sT0FBTyxjQUFjO0lBTjNCO1FBVUUsWUFBTyxHQUFHLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBUW5DLFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQVFoQyxZQUFPLEdBQUcsSUFBSSxlQUFlLENBQWUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBU2pFLFVBQUssR0FBRyxJQUFJLGVBQWUsQ0FBYTtZQUN0QyxJQUFJLEVBQUUsWUFBWTtZQUNsQixDQUFDLEVBQUUsRUFBRTtZQUNMLEVBQUUsRUFBRSxFQUFFO1NBQ1AsQ0FBQyxDQUFDO1FBYUgsa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBRXRDLDBDQUEwQztRQUMxQyw4Q0FBOEM7UUFDOUMsK0NBQStDO1FB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XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgbWFwLFxuICBzY2FuLFxuICBzdGFydFdpdGgsXG4gIFN1YmplY3QsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ2hhcnQgfSBmcm9tICcuL2NoYXJ0JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncml2LWNoYXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoYXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2hhcnQuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQ2hhcnRDb21wb25lbnQge1xuICBAVmlld0NoaWxkKCdjb250YWluZXInKSBjb250YWluZXI/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdtb3JlVGV4dENvbnRhaW5lcicpIG1vcmVUZXh0Q29udGFpbmVyPzogRWxlbWVudFJlZjtcblxuICBoZWlnaHQkID0gbmV3IEJlaGF2aW9yU3ViamVjdCgzMDApO1xuICBzZXQgaGVpZ2h0KHc6IG51bWJlcikge1xuICAgIHRoaXMuaGVpZ2h0JC5uZXh0KHcpO1xuICB9XG4gIGdldCBoZWlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVpZ2h0JC52YWx1ZTtcbiAgfVxuXG4gIHdpZHRoJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoMCk7XG4gIHNldCB3aWR0aCh3OiBudW1iZXIpIHtcbiAgICB0aGlzLndpZHRoJC5uZXh0KHcpO1xuICB9XG4gIGdldCB3aWR0aCgpIHtcbiAgICByZXR1cm4gdGhpcy53aWR0aCQudmFsdWU7XG4gIH1cblxuICBjb25maWckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDaGFydC5Db25maWc+KENoYXJ0LmRlZmF1bHRDb25maWcpO1xuICBASW5wdXQoKVxuICBzZXQgY29uZmlnKGM6IENoYXJ0LkNvbmZpZykge1xuICAgIHRoaXMuY29uZmlnJC5uZXh0KGMpO1xuICB9XG4gIGdldCBjb25maWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnJC52YWx1ZTtcbiAgfVxuXG4gIGRhdGEkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDaGFydC5EYXRhPih7XG4gICAgdHlwZTogJ3RpbWVzZXJpZXMnLFxuICAgIHg6IFtdLFxuICAgIHlzOiBbXSxcbiAgfSk7XG4gIEBJbnB1dCgpXG4gIHNldCBkYXRhKGQ6IENoYXJ0LkRhdGEpIHtcbiAgICB0aGlzLmRhdGEkLm5leHQoZCk7XG4gIH1cbiAgZ2V0IGRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YSQudmFsdWU7XG4gIH1cblxuICB0b2dnbGVMZWdlbmQobGFiZWw6IHN0cmluZykge1xuICAgIHRoaXMudG9nZ2xlTGVnZW5kJC5uZXh0KGxhYmVsKTtcbiAgfVxuXG4gIHRvZ2dsZUxlZ2VuZCQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG5cbiAgLy8gdG9nZ2xlZExlZ2VuZCQgaXMganVzdCBhIHNldCBvZiBib29sZWFuXG4gIC8vIHZhbHVlcyBmb3Igd2hpY2ggbGVnZW5kcyBoYXZlIGJlZW4gdG9nZ2xlZC5cbiAgLy8gV2UgZG9uJ3Qga25vdyBpZiB0aG9zZSBsZWdlbmRzIHdoZXJlIGFscmVhZHlcbiAgLy8gaGlkZGVuIG9yIG5vdCwgd2UganVzdCBrbm93IHdoZXRoZXIgdGhleSBoYXZlXG4gIC8vIGJlZW4gdG9nZ2xlZC5cbiAgdG9nZ2xlZExlZ2VuZHMkID0gdGhpcy50b2dnbGVMZWdlbmQkLnBpcGUoXG4gICAgc2NhbjxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+PihcbiAgICAgIChhY2MsIHZhbHVlKSA9PiAoeyAuLi5hY2MsIFt2YWx1ZV06ICFhY2NbdmFsdWVdIH0pLFxuICAgICAge30sXG4gICAgKSxcbiAgICBzdGFydFdpdGg8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KHt9KSxcbiAgKTtcblxuICBkcmF3RGF0YSQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLndpZHRoJCxcbiAgICB0aGlzLmNvbmZpZyQsXG4gICAgdGhpcy5kYXRhJCxcbiAgICB0aGlzLnRvZ2dsZWRMZWdlbmRzJCxcbiAgXSkucGlwZShcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldiwgY3VycmVudCkgPT4gaXNFcXVhbChwcmV2LCBjdXJyZW50KSksXG4gICAgbWFwKChbd2lkdGgsIGNvbmZpZywgZGF0YSwgdG9nZ2xlZExlZ2VuZHNdKSA9PiB7XG4gICAgICBpZiAod2lkdGggPT0gMCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhpZGRlbkRhdGEgPSB7XG4gICAgICAgIC4uLmRhdGEsXG4gICAgICAgIHlzOiBkYXRhLnlzLm1hcCh5ID0+ICh7XG4gICAgICAgICAgLi4ueSxcbiAgICAgICAgICAvLyBpZiB0b2dnbGVkLCBmbGlwIHRoZSBoaWRkZW4gYm9vbGVhblxuICAgICAgICAgIGhpZGRlbjogdG9nZ2xlZExlZ2VuZHNbeS5sYWJlbF0gPyAheS5oaWRkZW4gOiB5LmhpZGRlbixcbiAgICAgICAgfSkpLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHZpZXdCb3ggPVxuICAgICAgICBjb25maWcudHlwZSA9PSAnZG9udXQnXG4gICAgICAgICAgPyBgJHstdGhpcy5oZWlnaHQgLyAyfSAkey10aGlzLmhlaWdodCAvIDJ9XG4gICAgICAgICAgICAgICR7dGhpcy5oZWlnaHR9ICR7dGhpcy5oZWlnaHR9YFxuICAgICAgICAgIDogYDAgMCAke3dpZHRofSAke3RoaXMuaGVpZ2h0fWA7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2aWV3Qm94LFxuICAgICAgICBkYXRhOiBoaWRkZW5EYXRhLFxuICAgICAgICAuLi5DaGFydC5jaGFydChjb25maWcsIGhpZGRlbkRhdGEsIHtcbiAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCxcbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgIH0pLFxuICApO1xuXG4gIGVtcHR5JCA9IHRoaXMuZGF0YSQucGlwZShcbiAgICBtYXAoXG4gICAgICBkID0+IChkLngubGVuZ3RoID09IDAgJiYgdGhpcy5jb25maWcudHlwZSAhPSAnZG9udXQnKSB8fCBkLnlzLmxlbmd0aCA9PSAwLFxuICAgICksXG4gICk7XG5cbiAgaG92ZXI6IFJldHVyblR5cGU8Q2hhcnQuSG92ZXI+IHwgbnVsbCA9IG51bGw7XG5cbiAgbW91c2Vtb3ZlKCRldmVudDogTW91c2VFdmVudCwgaG92ZXI/OiBDaGFydC5Ib3Zlcikge1xuICAgIGlmICghaG92ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29udGFpbmVyRWwgPSB0aGlzLmNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAoY29udGFpbmVyRWwgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZWN0ID0gY29udGFpbmVyRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgdGhpcy5ob3ZlciA9IGhvdmVyKHtcbiAgICAgIHJlY3QsXG4gICAgICB4OiAkZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdCxcbiAgICAgIHk6ICRldmVudC5jbGllbnRZIC0gcmVjdC50b3AsXG4gICAgfSk7XG4gIH1cblxuICBtb3VzZWxlYXZlKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuaG92ZXIgPSBudWxsO1xuICB9XG5cbiAgQE91dHB1dCgpXG4gIGNoYXJ0Q2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIHhJbmRleDogbnVtYmVyO1xuICAgIHlJbmRleDogbnVtYmVyO1xuICB9PigpO1xuXG4gIGNsaWNrKCkge1xuICAgIGlmICh0aGlzLmhvdmVyKSB7XG4gICAgICB0aGlzLmNoYXJ0Q2xpY2tlZC5lbWl0KHtcbiAgICAgICAgeEluZGV4OiB0aGlzLmhvdmVyLnhJbmRleCxcbiAgICAgICAgeUluZGV4OiB0aGlzLmhvdmVyLnlJbmRleCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5ob3ZlciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgdmFyQ29sb3IoY29sb3JzOiBzdHJpbmdbXSwgaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiBgdmFyKCR7Y29sb3JzW2luZGV4ICUgY29sb3JzLmxlbmd0aF19KWA7XG4gIH1cblxuICBzaG93TW9yZVRvb2x0aXAgPSBmYWxzZTtcbiAgbG9ja1Nob3dNb3JlVG9vbHRpcCA9IGZhbHNlO1xuXG4gIG1vcmVUZXh0V2lkdGggPSA1MDtcbiAgYmFzZUxlZ2VuZEl0ZW1XaWR0aCA9IDQwO1xuICB3aWR0aFBlckxldHRlciA9IDYuNTtcbiAgbGVmdExhYmVsTWF4U2l6ZSA9IENoYXJ0LkxFRlRfUEFERElOR19MQUJFTF9NQVg7XG5cbiAgZmlyc3RIaWRkZW5MZWdlbmRJdGVtSW5kZXgkID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy53aWR0aCQsXG4gICAgdGhpcy5jb25maWckLFxuICAgIHRoaXMuZGF0YSQsXG4gIF0pLnBpcGUoXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXYsIGN1cnJlbnQpID0+IGlzRXF1YWwocHJldiwgY3VycmVudCkpLFxuICAgIG1hcCgoW3dpZHRoLCBjb25maWcsIGRhdGFdKSA9PiB7XG4gICAgICBpZiAoIWNvbmZpZy50cnVuY2F0ZUxlZ2VuZCkge1xuICAgICAgICByZXR1cm4gZGF0YS55cy5sZW5ndGg7XG4gICAgICB9XG4gICAgICBsZXQgd2lkdGhSdW5uaW5nVG90YWwgPSAwO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLnlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGluZEl0ZW1XaWR0aCA9XG4gICAgICAgICAgdGhpcy5iYXNlTGVnZW5kSXRlbVdpZHRoICtcbiAgICAgICAgICBkYXRhLnlzW2ldLmxhYmVsLmxlbmd0aCAqIHRoaXMud2lkdGhQZXJMZXR0ZXI7XG4gICAgICAgIGlmICh3aWR0aFJ1bm5pbmdUb3RhbCArIGluZEl0ZW1XaWR0aCA+PSB3aWR0aCAtIHRoaXMubW9yZVRleHRXaWR0aCkge1xuICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIHdpZHRoUnVubmluZ1RvdGFsICs9IGluZEl0ZW1XaWR0aDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhLnlzLmxlbmd0aDtcbiAgICB9KSxcbiAgKTtcblxuICBtb3JlQ2xpY2soKSB7XG4gICAgdGhpcy5sb2NrU2hvd01vcmVUb29sdGlwID0gIXRoaXMubG9ja1Nob3dNb3JlVG9vbHRpcDtcbiAgfVxuXG4gIG1vdXNlb3ZlckxlZ2VuZCgpIHtcbiAgICB0aGlzLnNob3dNb3JlVG9vbHRpcCA9IHRydWU7XG4gIH1cblxuICBtb3VzZWxlYXZlTGVnZW5kKCkge1xuICAgIHRoaXMuc2hvd01vcmVUb29sdGlwID0gZmFsc2U7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJjb250YWluZXJcIlxuICAocml2Q2xpZW50U2l6ZSk9XCJ3aWR0aCA9ICRldmVudC53aWR0aFwiXG4gICpuZ0lmPVwiKGVtcHR5JCB8IGFzeW5jKSA9PT0gZmFsc2U7IGVsc2UgemVyb1N0YXRlXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRyYXdEYXRhJCB8IGFzeW5jOyBsZXQgZFwiPlxuICAgIDxkaXZcbiAgICAgIChtb3VzZW1vdmUpPVwibW91c2Vtb3ZlKCRldmVudCwgZC5ob3ZlcilcIlxuICAgICAgKG1vdXNlbGVhdmUpPVwibW91c2VsZWF2ZSgkZXZlbnQpXCJcbiAgICAgIChjbGljayk9XCJjbGljaygpXCJcbiAgICAgICNjb250YWluZXJcbiAgICAgIGNsYXNzPVwic3ViLWNvbnRhaW5lclwiXG4gICAgPlxuICAgICAgPHN2ZzpzdmdcbiAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgIFthdHRyLnZpZXdCb3hdPVwiZC52aWV3Qm94XCJcbiAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgW2F0dHIuaGVpZ2h0XT1cImhlaWdodFwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhKGNvbmZpZy50eXBlID09PSAnaG9yaXpvbnRhbC1iYXInKVwiPlxuICAgICAgICAgIDxnICpuZ0Zvcj1cImxldCB0aWNrIG9mIGQueFRpY2tzXCIgdGV4dC1hbmNob3I9XCJtaWRkbGVcIj5cbiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPVwidGljay1sYWJlbFwiIFthdHRyLnhdPVwidGljay54XCIgW2F0dHIueV09XCJoZWlnaHQgLSA0XCI+XG4gICAgICAgICAgICAgIHt7IHRpY2subGFiZWwgfX1cbiAgICAgICAgICAgIDwvdGV4dD5cbiAgICAgICAgICA8L2c+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29uZmlnLnR5cGUgPT09ICdob3Jpem9udGFsLWJhcidcIj5cbiAgICAgICAgICA8ZyAqbmdGb3I9XCJsZXQgdGljayBvZiBkLnhUaWNrc1wiIHRleHQtYW5jaG9yPVwibGVmdFwiPlxuICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJ0aWNrLWxhYmVsXCIgW2F0dHIueF09XCJ0aWNrLnhcIiBbYXR0ci55XT1cIjEyXCI+XG4gICAgICAgICAgICAgIHt7IHRpY2subGFiZWwgfX1cbiAgICAgICAgICAgIDwvdGV4dD5cbiAgICAgICAgICAgIDxsaW5lXG4gICAgICAgICAgICAgIGNsYXNzPVwidGljay1saW5lXCJcbiAgICAgICAgICAgICAgW2F0dHIueDFdPVwidGljay54XCJcbiAgICAgICAgICAgICAgW2F0dHIueDJdPVwidGljay54XCJcbiAgICAgICAgICAgICAgeTE9XCIwXCJcbiAgICAgICAgICAgICAgW2F0dHIueTJdPVwiaGVpZ2h0IC0gMTZcIlxuICAgICAgICAgICAgPjwvbGluZT5cbiAgICAgICAgICA8L2c+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8ZyAqbmdGb3I9XCJsZXQgdGljayBvZiBkLnlUaWNrc1wiPlxuICAgICAgICAgIDxsaW5lXG4gICAgICAgICAgICAqbmdJZj1cIiEoY29uZmlnLnR5cGUgPT09ICdob3Jpem9udGFsLWJhcicpXCJcbiAgICAgICAgICAgIGNsYXNzPVwidGljay1saW5lXCJcbiAgICAgICAgICAgIFthdHRyLnkxXT1cInRpY2sueVwiXG4gICAgICAgICAgICBbYXR0ci55Ml09XCJ0aWNrLnlcIlxuICAgICAgICAgICAgeDE9XCIwXCJcbiAgICAgICAgICAgIFthdHRyLngyXT1cIndpZHRoXCJcbiAgICAgICAgICA+PC9saW5lPlxuICAgICAgICAgIDx0ZXh0XG4gICAgICAgICAgICByaXZTVkdUZXh0VHJ1bmNhdGVcbiAgICAgICAgICAgIFt0ZXh0XT1cInRpY2subGFiZWxcIlxuICAgICAgICAgICAgW3dpZHRoXT1cImxlZnRMYWJlbE1heFNpemVcIlxuICAgICAgICAgICAgY2xhc3M9XCJ0aWNrLWxhYmVsXCJcbiAgICAgICAgICAgIFthdHRyLnldPVwidGljay55IC0gNFwiXG4gICAgICAgICAgICBbYXR0ci54XT1cIjBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IHRpY2subGFiZWwgfX1cbiAgICAgICAgICA8L3RleHQ+XG4gICAgICAgIDwvZz5cbiAgICAgICAgPGcgKm5nSWY9XCIhIWhvdmVyICYmICEoY29uZmlnLnR5cGUgPT09ICdob3Jpem9udGFsLWJhcicpXCI+XG4gICAgICAgICAgPGxpbmVcbiAgICAgICAgICAgIGNsYXNzPVwidGljay1saW5lXCJcbiAgICAgICAgICAgIFthdHRyLngxXT1cImhvdmVyLnhcIlxuICAgICAgICAgICAgW2F0dHIueDJdPVwiaG92ZXIueFwiXG4gICAgICAgICAgICB5MT1cIjBcIlxuICAgICAgICAgICAgW2F0dHIueTJdPVwiaGVpZ2h0IC0gMTZcIlxuICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgICBzdHJva2UtZGFzaGFycmF5PVwiNFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9nPlxuICAgICAgICA8ZyAqbmdGb3I9XCJsZXQgYmFyIG9mIGQuYmFyczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgIDxyZWN0XG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgcmVjdCBvZiBiYXJcIlxuICAgICAgICAgICAgW2F0dHIueF09XCJyZWN0LnhcIlxuICAgICAgICAgICAgW2F0dHIueV09XCJyZWN0LnlcIlxuICAgICAgICAgICAgW2F0dHIud2lkdGhdPVwicmVjdC53aWR0aFwiXG4gICAgICAgICAgICBbYXR0ci5oZWlnaHRdPVwicmVjdC5oZWlnaHRcIlxuICAgICAgICAgICAgW2F0dHIuZmlsbF09XCJ2YXJDb2xvcihkLmNvbG9ycywgaSlcIlxuICAgICAgICAgID48L3JlY3Q+XG4gICAgICAgIDwvZz5cbiAgICAgICAgPGcgKm5nRm9yPVwibGV0IGJhciBvZiBkLmhvcml6b250YWxCYXJzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpbmRCYXIgb2YgYmFyXCJcbiAgICAgICAgICAgIFthdHRyLmRdPVwiaW5kQmFyXCJcbiAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJ2YXJDb2xvcihkLmNvbG9ycywgaSlcIlxuICAgICAgICAgICAgW2F0dHIuZmlsbF09XCJ2YXJDb2xvcihkLmNvbG9ycywgaSlcIlxuICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9nPlxuICAgICAgICA8ZyAqbmdGb3I9XCJsZXQgbGluZSBvZiBkLmxpbmVzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIFthdHRyLmRdPVwibGluZVwiXG4gICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwidmFyQ29sb3IoZC5jb2xvcnMsIGkpXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgID48L3BhdGg+XG4gICAgICAgIDwvZz5cbiAgICAgICAgPGcgKm5nRm9yPVwibGV0IGxpbmVTaW5nbGVQb2ludEZhbGxiYWNrIG9mIGQuY2lyY2xlczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgIGNsYXNzPVwibWFya2VyXCJcbiAgICAgICAgICAgIFthdHRyLmN4XT1cImxpbmVTaW5nbGVQb2ludEZhbGxiYWNrLmN4XCJcbiAgICAgICAgICAgIFthdHRyLmN5XT1cImxpbmVTaW5nbGVQb2ludEZhbGxiYWNrLmN5XCJcbiAgICAgICAgICAgIHI9XCIzLjVcIlxuICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwidmFyQ29sb3IoZC5jb2xvcnMsIGkpXCJcbiAgICAgICAgICA+PC9jaXJjbGU+XG4gICAgICAgIDwvZz5cbiAgICAgICAgPGcgKm5nRm9yPVwibGV0IGxpbmUgb2YgZC5saW5lczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgIGNsYXNzPVwibWFya2VyXCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICEhaG92ZXIgJiYgKGNvbmZpZy5ncm91cGVkVG9vbHRpcCB8fCBpID09PSBob3Zlci52aXNpYmxlWUluZGV4KVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFthdHRyLmN4XT1cImhvdmVyLnhcIlxuICAgICAgICAgICAgW2F0dHIuY3ldPVwiaG92ZXIueXNbaV1cIlxuICAgICAgICAgICAgcj1cIjMuNVwiXG4gICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJ2YXJDb2xvcihkLmNvbG9ycywgaSlcIlxuICAgICAgICAgID48L2NpcmNsZT5cbiAgICAgICAgPC9nPlxuICAgICAgICA8ZyAqbmdGb3I9XCJsZXQgYXJlYSBvZiBkLmFyZWFzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgPHBhdGggW2F0dHIuZF09XCJhcmVhXCIgW2F0dHIuZmlsbF09XCJ2YXJDb2xvcihkLmNvbG9ycywgaSlcIj48L3BhdGg+XG4gICAgICAgIDwvZz5cbiAgICAgICAgPGcgKm5nRm9yPVwibGV0IGFyZWEgb2YgZC5hcmVhczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgIGNsYXNzPVwibWFya2VyXCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICEhaG92ZXIgJiYgKGNvbmZpZy5ncm91cGVkVG9vbHRpcCB8fCBpID09PSBob3Zlci52aXNpYmxlWUluZGV4KVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFthdHRyLmN4XT1cImhvdmVyLnhcIlxuICAgICAgICAgICAgW2F0dHIuY3ldPVwiaG92ZXIueXNbaV1cIlxuICAgICAgICAgICAgcj1cIjMuNVwiXG4gICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJ2YXJDb2xvcihkLmNvbG9ycywgaSlcIlxuICAgICAgICAgID48L2NpcmNsZT5cbiAgICAgICAgPC9nPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgICpuZ0Zvcj1cImxldCBwYXRoIG9mIGQuYXJjczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgW2F0dHIuZF09XCJwYXRoXCJcbiAgICAgICAgICBbYXR0ci5maWxsXT1cInZhckNvbG9yKGQuY29sb3JzLCBpKVwiXG4gICAgICAgID48L3BhdGg+XG4gICAgICA8L3N2Zzpzdmc+XG4gICAgICA8ZGl2ICpuZ0lmPVwiY29uZmlnLnR5cGUgPT09ICdkb251dCdcIiBjbGFzcz1cImRvbnV0LWRpc3BsYXlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRvbnV0LXZhbHVlXCIgW25nQ2xhc3NdPVwiY29uZmlnLmRvbnV0RGlzcGxheUluZm8uc2l6ZVwiPlxuICAgICAgICAgIHt7IGNvbmZpZy5kb251dERpc3BsYXlJbmZvLmRpc3BsYXlWYWx1ZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRvbnV0LWxhYmVsXCI+XG4gICAgICAgICAge3sgY29uZmlnLmRvbnV0RGlzcGxheUluZm8uZGlzcGxheUxhYmVsIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISFob3ZlciAmJiBob3Zlci50b29sdGlwXCI+XG4gICAgICAgIDxyaXYtY2FsbG91dFxuICAgICAgICAgICpyaXYtb3ZlcmxheVxuICAgICAgICAgIFthbmNob3JdPVwiaG92ZXIudG9vbHRpcC5hbmNob3JcIlxuICAgICAgICAgIFtpc01vZGFsXT1cImZhbHNlXCJcbiAgICAgICAgICBbcHJlZmVycmVkUG9zaXRpb25dPVwiJ2NlbnRlci1yaWdodCdcIlxuICAgICAgICAgIFt0aGVtZV09XCInbGlnaHQnXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsb3V0LWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJob3Zlci50b29sdGlwLmRhdGVcIiBjbGFzcz1cImNhbGxvdXQtcm93XCI+XG4gICAgICAgICAgICAgIHt7IGhvdmVyLnRvb2x0aXAuZGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY2FsbG91dC1yb3dcIlxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbWV0cmljIG9mIGhvdmVyLnRvb2x0aXAubWV0cmljc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VyaWVzLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgPHJpdi1sZWdlbmQtaXRlbSBbY29sb3JUb2tlbl09XCJtZXRyaWMuY29sb3JcIj48L3Jpdi1sZWdlbmQtaXRlbT5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBtZXRyaWMubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgbWV0cmljLnZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvcml2LWNhbGxvdXQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8bGVnZW5kPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpcnN0SGlkZGVuTGVnZW5kSXRlbUluZGV4JCB8IGFzeW5jOyBsZXQgZmlcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkLmRhdGEueXM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICA8cml2LWxlZ2VuZC1pdGVtXG4gICAgICAgICAgICAqbmdJZj1cImkgPCBmaVwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiaXRlbS5sYWJlbFwiXG4gICAgICAgICAgICBbdmlzaWJpbGl0eV09XCJpdGVtLmhpZGRlbiA/ICdoaWRkZW4nIDogJ3Zpc2libGUnXCJcbiAgICAgICAgICAgIFtjbGlja2FibGVdPVwiY29uZmlnLmFsbG93TGVnZW5kVG9nZ2xlXCJcbiAgICAgICAgICAgIFtjb2xvclRva2VuXT1cImNvbmZpZy5jb2xvcnNbaSAlIGNvbmZpZy5jb2xvcnMubGVuZ3RoXVwiXG4gICAgICAgICAgICAoaXRlbUNsaWNrKT1cInRvZ2dsZUxlZ2VuZChpdGVtLmxhYmVsKVwiXG4gICAgICAgICAgPjwvcml2LWxlZ2VuZC1pdGVtPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICNtb3JlVGV4dENvbnRhaW5lclxuICAgICAgICAgIGNsYXNzPVwibW9yZS10ZXh0LWNvbnRhaW5lclwiXG4gICAgICAgICAgKG1vdXNlb3Zlcik9XCJtb3VzZW92ZXJMZWdlbmQoKVwiXG4gICAgICAgICAgKG1vdXNlbGVhdmUpPVwibW91c2VsZWF2ZUxlZ2VuZCgpXCJcbiAgICAgICAgICAoY2xpY2spPVwibW9yZUNsaWNrKClcIlxuICAgICAgICAgICpuZ0lmPVwiZmkgPCBkLmRhdGEueXMubGVuZ3RoXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIHJpdkxpbmsgY2xhc3M9XCJtb3JlLXRleHRcIj5cbiAgICAgICAgICAgICtcbiAgICAgICAgICAgIHt7IGQuZGF0YS55cy5sZW5ndGggLSBmaSB9fSBtb3JlXG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dNb3JlVG9vbHRpcCB8fCBsb2NrU2hvd01vcmVUb29sdGlwXCI+XG4gICAgICAgICAgPHJpdi1jYWxsb3V0XG4gICAgICAgICAgICAqcml2LW92ZXJsYXlcbiAgICAgICAgICAgIFthbmNob3JdPVwibW9yZVRleHRDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnRcIlxuICAgICAgICAgICAgW2lzTW9kYWxdPVwibG9ja1Nob3dNb3JlVG9vbHRpcFwiXG4gICAgICAgICAgICAoY2xvc2UpPVwibG9ja1Nob3dNb3JlVG9vbHRpcCA9IGZhbHNlXCJcbiAgICAgICAgICAgIFtwcmVmZXJyZWRQb3NpdGlvbl09XCInYm90dG9tLXJpZ2h0J1wiXG4gICAgICAgICAgICBbdGhlbWVdPVwiJ2xpZ2h0J1wiXG4gICAgICAgICAgICBbc2hvd0NhcmV0XT1cImZhbHNlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLXRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkLmRhdGEueXM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICA8cml2LWxlZ2VuZC1pdGVtXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImkgPj0gZmlcIlxuICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIml0ZW0ubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgW3Zpc2liaWxpdHldPVwiaXRlbS5oaWRkZW4gPyAnaGlkZGVuJyA6ICd2aXNpYmxlJ1wiXG4gICAgICAgICAgICAgICAgICBbY2xpY2thYmxlXT1cImNvbmZpZy5hbGxvd0xlZ2VuZFRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgICBbY29sb3JUb2tlbl09XCJjb25maWcuY29sb3JzW2kgJSBjb25maWcuY29sb3JzLmxlbmd0aF1cIlxuICAgICAgICAgICAgICAgICAgKGl0ZW1DbGljayk9XCJ0b2dnbGVMZWdlbmQoaXRlbS5sYWJlbClcIlxuICAgICAgICAgICAgICAgID48L3Jpdi1sZWdlbmQtaXRlbT5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3Jpdi1jYWxsb3V0PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbGVnZW5kPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3plcm9TdGF0ZT5cbiAgPHJpdi16ZXJvLXN0YXRlIFttZXNzYWdlXT1cImNvbmZpZy56ZXJvU3RhdGVNZXNzYWdlXCI+PC9yaXYtemVyby1zdGF0ZT5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
180
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdmlzdWFsaXphdGlvbi9jaGFydC9jaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi92aXN1YWxpemF0aW9uL2NoYXJ0L2NoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLG9CQUFvQixFQUNwQixHQUFHLEVBQ0gsSUFBSSxFQUNKLFNBQVMsRUFDVCxPQUFPLEdBQ1IsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDOzs7Ozs7Ozs7O0FBUWhDLE1BQU0sT0FBTyxjQUFjO0lBQ3pCLFlBQTZCLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBS25ELFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQVFuQyxXQUFNLEdBQUcsSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFRaEMsWUFBTyxHQUFHLElBQUksZUFBZSxDQUFlLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztRQVNqRSxVQUFLLEdBQUcsSUFBSSxlQUFlLENBQWE7WUFDdEMsSUFBSSxFQUFFLFlBQVk7WUFDbEIsQ0FBQyxFQUFFLEVBQUU7WUFDTCxFQUFFLEVBQUUsRUFBRTtTQUNQLENBQUMsQ0FBQztRQWFILGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztR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dUJBQUMsV0FBVztnQkFDVSxpQkFBaUI7c0JBQWhELFNBQVM7dUJBQUMsbUJBQW1CO2dCQW9CMUIsTUFBTTtzQkFEVCxLQUFLO2dCQWNGLElBQUk7c0JBRFAsS0FBSztnQkEyRk4sWUFBWTtzQkFEWCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgbWFwLFxuICBzY2FuLFxuICBzdGFydFdpdGgsXG4gIFN1YmplY3QsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ2hhcnQgfSBmcm9tICcuL2NoYXJ0JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncml2LWNoYXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoYXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2hhcnQuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQ2hhcnRDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgY29udGFpbmVyPzogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnbW9yZVRleHRDb250YWluZXInKSBtb3JlVGV4dENvbnRhaW5lcj86IEVsZW1lbnRSZWY7XG5cbiAgaGVpZ2h0JCA9IG5ldyBCZWhhdmlvclN1YmplY3QoMzAwKTtcbiAgc2V0IGhlaWdodCh3OiBudW1iZXIpIHtcbiAgICB0aGlzLmhlaWdodCQubmV4dCh3KTtcbiAgfVxuICBnZXQgaGVpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLmhlaWdodCQudmFsdWU7XG4gIH1cblxuICB3aWR0aCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KDApO1xuICBzZXQgd2lkdGgodzogbnVtYmVyKSB7XG4gICAgdGhpcy53aWR0aCQubmV4dCh3KTtcbiAgfVxuICBnZXQgd2lkdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMud2lkdGgkLnZhbHVlO1xuICB9XG5cbiAgY29uZmlnJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2hhcnQuQ29uZmlnPihDaGFydC5kZWZhdWx0Q29uZmlnKTtcbiAgQElucHV0KClcbiAgc2V0IGNvbmZpZyhjOiBDaGFydC5Db25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyQubmV4dChjKTtcbiAgfVxuICBnZXQgY29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZyQudmFsdWU7XG4gIH1cblxuICBkYXRhJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2hhcnQuRGF0YT4oe1xuICAgIHR5cGU6ICd0aW1lc2VyaWVzJyxcbiAgICB4OiBbXSxcbiAgICB5czogW10sXG4gIH0pO1xuICBASW5wdXQoKVxuICBzZXQgZGF0YShkOiBDaGFydC5EYXRhKSB7XG4gICAgdGhpcy5kYXRhJC5uZXh0KGQpO1xuICB9XG4gIGdldCBkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGEkLnZhbHVlO1xuICB9XG5cbiAgdG9nZ2xlTGVnZW5kKGxhYmVsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRvZ2dsZUxlZ2VuZCQubmV4dChsYWJlbCk7XG4gIH1cblxuICB0b2dnbGVMZWdlbmQkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gIC8vIHRvZ2dsZWRMZWdlbmQkIGlzIGp1c3QgYSBzZXQgb2YgYm9vbGVhblxuICAvLyB2YWx1ZXMgZm9yIHdoaWNoIGxlZ2VuZHMgaGF2ZSBiZWVuIHRvZ2dsZWQuXG4gIC8vIFdlIGRvbid0IGtub3cgaWYgdGhvc2UgbGVnZW5kcyB3aGVyZSBhbHJlYWR5XG4gIC8vIGhpZGRlbiBvciBub3QsIHdlIGp1c3Qga25vdyB3aGV0aGVyIHRoZXkgaGF2ZVxuICAvLyBiZWVuIHRvZ2dsZWQuXG4gIHRvZ2dsZWRMZWdlbmRzJCA9IHRoaXMudG9nZ2xlTGVnZW5kJC5waXBlKFxuICAgIHNjYW48c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj4oXG4gICAgICAoYWNjLCB2YWx1ZSkgPT4gKHsgLi4uYWNjLCBbdmFsdWVdOiAhYWNjW3ZhbHVlXSB9KSxcbiAgICAgIHt9LFxuICAgICksXG4gICAgc3RhcnRXaXRoPFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+Pih7fSksXG4gICk7XG5cbiAgZHJhd0RhdGEkID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy53aWR0aCQsXG4gICAgdGhpcy5jb25maWckLFxuICAgIHRoaXMuZGF0YSQsXG4gICAgdGhpcy50b2dnbGVkTGVnZW5kcyQsXG4gIF0pLnBpcGUoXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXYsIGN1cnJlbnQpID0+IGlzRXF1YWwocHJldiwgY3VycmVudCkpLFxuICAgIG1hcCgoW3dpZHRoLCBjb25maWcsIGRhdGEsIHRvZ2dsZWRMZWdlbmRzXSkgPT4ge1xuICAgICAgaWYgKHdpZHRoID09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBoaWRkZW5EYXRhID0ge1xuICAgICAgICAuLi5kYXRhLFxuICAgICAgICB5czogZGF0YS55cy5tYXAoeSA9PiAoe1xuICAgICAgICAgIC4uLnksXG4gICAgICAgICAgLy8gaWYgdG9nZ2xlZCwgZmxpcCB0aGUgaGlkZGVuIGJvb2xlYW5cbiAgICAgICAgICBoaWRkZW46IHRvZ2dsZWRMZWdlbmRzW3kubGFiZWxdID8gIXkuaGlkZGVuIDogeS5oaWRkZW4sXG4gICAgICAgIH0pKSxcbiAgICAgIH07XG4gICAgICBjb25zdCB2aWV3Qm94ID1cbiAgICAgICAgY29uZmlnLnR5cGUgPT0gJ2RvbnV0J1xuICAgICAgICAgID8gYCR7LXRoaXMuaGVpZ2h0IC8gMn0gJHstdGhpcy5oZWlnaHQgLyAyfVxuICAgICAgICAgICAgICAke3RoaXMuaGVpZ2h0fSAke3RoaXMuaGVpZ2h0fWBcbiAgICAgICAgICA6IGAwIDAgJHt3aWR0aH0gJHt0aGlzLmhlaWdodH1gO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmlld0JveCxcbiAgICAgICAgZGF0YTogaGlkZGVuRGF0YSxcbiAgICAgICAgLi4uQ2hhcnQuY2hhcnQoY29uZmlnLCBoaWRkZW5EYXRhLCB7XG4gICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQsXG4gICAgICAgIH0pLFxuICAgICAgfTtcbiAgICB9KSxcbiAgKTtcblxuICBlbXB0eSQgPSB0aGlzLmRhdGEkLnBpcGUoXG4gICAgbWFwKFxuICAgICAgZCA9PiAoZC54Lmxlbmd0aCA9PSAwICYmIHRoaXMuY29uZmlnLnR5cGUgIT0gJ2RvbnV0JykgfHwgZC55cy5sZW5ndGggPT0gMCxcbiAgICApLFxuICApO1xuXG4gIGhvdmVyOiBSZXR1cm5UeXBlPENoYXJ0LkhvdmVyPiB8IG51bGwgPSBudWxsO1xuXG4gIG1vdXNlbW92ZSgkZXZlbnQ6IE1vdXNlRXZlbnQsIGhvdmVyPzogQ2hhcnQuSG92ZXIpIHtcbiAgICBpZiAoIWhvdmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbnRhaW5lckVsID0gdGhpcy5jb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKGNvbnRhaW5lckVsID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVjdCA9IGNvbnRhaW5lckVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHRoaXMuaG92ZXIgPSBob3Zlcih7XG4gICAgICByZWN0LFxuICAgICAgeDogJGV2ZW50LmNsaWVudFggLSByZWN0LmxlZnQsXG4gICAgICB5OiAkZXZlbnQuY2xpZW50WSAtIHJlY3QudG9wLFxuICAgIH0pO1xuICB9XG5cbiAgbW91c2VsZWF2ZSgkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLmhvdmVyID0gbnVsbDtcbiAgfVxuXG4gIEBPdXRwdXQoKVxuICBjaGFydENsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICB4SW5kZXg6IG51bWJlcjtcbiAgICB5SW5kZXg6IG51bWJlcjtcbiAgfT4oKTtcblxuICBjbGljaygpIHtcbiAgICBpZiAodGhpcy5ob3Zlcikge1xuICAgICAgdGhpcy5jaGFydENsaWNrZWQuZW1pdCh7XG4gICAgICAgIHhJbmRleDogdGhpcy5ob3Zlci54SW5kZXgsXG4gICAgICAgIHlJbmRleDogdGhpcy5ob3Zlci55SW5kZXgsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuaG92ZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHZhckNvbG9yKGNvbG9yczogc3RyaW5nW10sIGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gYHZhcigke2NvbG9yc1tpbmRleCAlIGNvbG9ycy5sZW5ndGhdfSlgO1xuICB9XG5cbiAgc2hvd01vcmVUb29sdGlwID0gZmFsc2U7XG4gIGxvY2tTaG93TW9yZVRvb2x0aXAgPSBmYWxzZTtcblxuICBtb3JlVGV4dFdpZHRoID0gNTA7XG4gIGJhc2VMZWdlbmRJdGVtV2lkdGggPSA0MDtcbiAgd2lkdGhQZXJMZXR0ZXIgPSA2LjU7XG4gIGxlZnRMYWJlbE1heFNpemUgPSBDaGFydC5MRUZUX1BBRERJTkdfTEFCRUxfTUFYO1xuXG4gIGZpcnN0SGlkZGVuTGVnZW5kSXRlbUluZGV4JCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMud2lkdGgkLFxuICAgIHRoaXMuY29uZmlnJCxcbiAgICB0aGlzLmRhdGEkLFxuICBdKS5waXBlKFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwcmV2LCBjdXJyZW50KSA9PiBpc0VxdWFsKHByZXYsIGN1cnJlbnQpKSxcbiAgICBtYXAoKFt3aWR0aCwgY29uZmlnLCBkYXRhXSkgPT4ge1xuICAgICAgaWYgKCFjb25maWcudHJ1bmNhdGVMZWdlbmQpIHtcbiAgICAgICAgcmV0dXJuIGRhdGEueXMubGVuZ3RoO1xuICAgICAgfVxuICAgICAgbGV0IHdpZHRoUnVubmluZ1RvdGFsID0gMDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS55cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBpbmRJdGVtV2lkdGggPVxuICAgICAgICAgIHRoaXMuYmFzZUxlZ2VuZEl0ZW1XaWR0aCArXG4gICAgICAgICAgZGF0YS55c1tpXS5sYWJlbC5sZW5ndGggKiB0aGlzLndpZHRoUGVyTGV0dGVyO1xuICAgICAgICBpZiAod2lkdGhSdW5uaW5nVG90YWwgKyBpbmRJdGVtV2lkdGggPj0gd2lkdGggLSB0aGlzLm1vcmVUZXh0V2lkdGgpIHtcbiAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgICAgICB3aWR0aFJ1bm5pbmdUb3RhbCArPSBpbmRJdGVtV2lkdGg7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YS55cy5sZW5ndGg7XG4gICAgfSksXG4gICk7XG5cbiAgbW9yZUNsaWNrKCkge1xuICAgIHRoaXMubG9ja1Nob3dNb3JlVG9vbHRpcCA9ICF0aGlzLmxvY2tTaG93TW9yZVRvb2x0aXA7XG4gIH1cblxuICBjbG9zZUhhbmRsZXIoKSB7XG4gICAgdGhpcy5sb2NrU2hvd01vcmVUb29sdGlwID0gZmFsc2U7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBtb3VzZW92ZXJMZWdlbmQoKSB7XG4gICAgdGhpcy5zaG93TW9yZVRvb2x0aXAgPSB0cnVlO1xuICB9XG5cbiAgbW91c2VsZWF2ZUxlZ2VuZCgpIHtcbiAgICB0aGlzLnNob3dNb3JlVG9vbHRpcCA9IGZhbHNlO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiY29udGFpbmVyXCJcbiAgKHJpdkNsaWVudFNpemUpPVwid2lkdGggPSAkZXZlbnQud2lkdGhcIlxuICAqbmdJZj1cIihlbXB0eSQgfCBhc3luYykgPT09IGZhbHNlOyBlbHNlIHplcm9TdGF0ZVwiXG4+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJkcmF3RGF0YSQgfCBhc3luYzsgbGV0IGRcIj5cbiAgICA8ZGl2XG4gICAgICAobW91c2Vtb3ZlKT1cIm1vdXNlbW92ZSgkZXZlbnQsIGQuaG92ZXIpXCJcbiAgICAgIChtb3VzZWxlYXZlKT1cIm1vdXNlbGVhdmUoJGV2ZW50KVwiXG4gICAgICAoY2xpY2spPVwiY2xpY2soKVwiXG4gICAgICAjY29udGFpbmVyXG4gICAgICBjbGFzcz1cInN1Yi1jb250YWluZXJcIlxuICAgID5cbiAgICAgIDxzdmc6c3ZnXG4gICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICBbYXR0ci52aWV3Qm94XT1cImQudmlld0JveFwiXG4gICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgIFthdHRyLmhlaWdodF09XCJoZWlnaHRcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShjb25maWcudHlwZSA9PT0gJ2hvcml6b250YWwtYmFyJylcIj5cbiAgICAgICAgICA8ZyAqbmdGb3I9XCJsZXQgdGljayBvZiBkLnhUaWNrc1wiIHRleHQtYW5jaG9yPVwibWlkZGxlXCI+XG4gICAgICAgICAgICA8dGV4dCBjbGFzcz1cInRpY2stbGFiZWxcIiBbYXR0ci54XT1cInRpY2sueFwiIFthdHRyLnldPVwiaGVpZ2h0IC0gNFwiPlxuICAgICAgICAgICAgICB7eyB0aWNrLmxhYmVsIH19XG4gICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgPC9nPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbmZpZy50eXBlID09PSAnaG9yaXpvbnRhbC1iYXInXCI+XG4gICAgICAgICAgPGcgKm5nRm9yPVwibGV0IHRpY2sgb2YgZC54VGlja3NcIiB0ZXh0LWFuY2hvcj1cImxlZnRcIj5cbiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPVwidGljay1sYWJlbFwiIFthdHRyLnhdPVwidGljay54XCIgW2F0dHIueV09XCIxMlwiPlxuICAgICAgICAgICAgICB7eyB0aWNrLmxhYmVsIH19XG4gICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgICA8bGluZVxuICAgICAgICAgICAgICBjbGFzcz1cInRpY2stbGluZVwiXG4gICAgICAgICAgICAgIFthdHRyLngxXT1cInRpY2sueFwiXG4gICAgICAgICAgICAgIFthdHRyLngyXT1cInRpY2sueFwiXG4gICAgICAgICAgICAgIHkxPVwiMFwiXG4gICAgICAgICAgICAgIFthdHRyLnkyXT1cImhlaWdodCAtIDE2XCJcbiAgICAgICAgICAgID48L2xpbmU+XG4gICAgICAgICAgPC9nPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGcgKm5nRm9yPVwibGV0IHRpY2sgb2YgZC55VGlja3NcIj5cbiAgICAgICAgICA8bGluZVxuICAgICAgICAgICAgKm5nSWY9XCIhKGNvbmZpZy50eXBlID09PSAnaG9yaXpvbnRhbC1iYXInKVwiXG4gICAgICAgICAgICBjbGFzcz1cInRpY2stbGluZVwiXG4gICAgICAgICAgICBbYXR0ci55MV09XCJ0aWNrLnlcIlxuICAgICAgICAgICAgW2F0dHIueTJdPVwidGljay55XCJcbiAgICAgICAgICAgIHgxPVwiMFwiXG4gICAgICAgICAgICBbYXR0ci54Ml09XCJ3aWR0aFwiXG4gICAgICAgICAgPjwvbGluZT5cbiAgICAgICAgICA8dGV4dFxuICAgICAgICAgICAgcml2U1ZHVGV4dFRydW5jYXRlXG4gICAgICAgICAgICBbdGV4dF09XCJ0aWNrLmxhYmVsXCJcbiAgICAgICAgICAgIFt3aWR0aF09XCJsZWZ0TGFiZWxNYXhTaXplXCJcbiAgICAgICAgICAgIGNsYXNzPVwidGljay1sYWJlbFwiXG4gICAgICAgICAgICBbYXR0ci55XT1cInRpY2sueSAtIDRcIlxuICAgICAgICAgICAgW2F0dHIueF09XCIwXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyB0aWNrLmxhYmVsIH19XG4gICAgICAgICAgPC90ZXh0PlxuICAgICAgICA8L2c+XG4gICAgICAgIDxnICpuZ0lmPVwiISFob3ZlciAmJiAhKGNvbmZpZy50eXBlID09PSAnaG9yaXpvbnRhbC1iYXInKVwiPlxuICAgICAgICAgIDxsaW5lXG4gICAgICAgICAgICBjbGFzcz1cInRpY2stbGluZVwiXG4gICAgICAgICAgICBbYXR0ci54MV09XCJob3Zlci54XCJcbiAgICAgICAgICAgIFthdHRyLngyXT1cImhvdmVyLnhcIlxuICAgICAgICAgICAgeTE9XCIwXCJcbiAgICAgICAgICAgIFthdHRyLnkyXT1cImhlaWdodCAtIDE2XCJcbiAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgICAgc3Ryb2tlLWRhc2hhcnJheT1cIjRcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZz5cbiAgICAgICAgPGcgKm5nRm9yPVwibGV0IGJhciBvZiBkLmJhcnM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICA8cmVjdFxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHJlY3Qgb2YgYmFyXCJcbiAgICAgICAgICAgIFthdHRyLnhdPVwicmVjdC54XCJcbiAgICAgICAgICAgIFthdHRyLnldPVwicmVjdC55XCJcbiAgICAgICAgICAgIFthdHRyLndpZHRoXT1cInJlY3Qud2lkdGhcIlxuICAgICAgICAgICAgW2F0dHIuaGVpZ2h0XT1cInJlY3QuaGVpZ2h0XCJcbiAgICAgICAgICAgIFthdHRyLmZpbGxdPVwidmFyQ29sb3IoZC5jb2xvcnMsIGkpXCJcbiAgICAgICAgICA+PC9yZWN0PlxuICAgICAgICA8L2c+XG4gICAgICAgIDxnICpuZ0Zvcj1cImxldCBiYXIgb2YgZC5ob3Jpem9udGFsQmFyczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgaW5kQmFyIG9mIGJhclwiXG4gICAgICAgICAgICBbYXR0ci5kXT1cImluZEJhclwiXG4gICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwidmFyQ29sb3IoZC5jb2xvcnMsIGkpXCJcbiAgICAgICAgICAgIFthdHRyLmZpbGxdPVwidmFyQ29sb3IoZC5jb2xvcnMsIGkpXCJcbiAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZz5cbiAgICAgICAgPGcgKm5nRm9yPVwibGV0IGxpbmUgb2YgZC5saW5lczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBbYXR0ci5kXT1cImxpbmVcIlxuICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInZhckNvbG9yKGQuY29sb3JzLCBpKVwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgICA+PC9wYXRoPlxuICAgICAgICA8L2c+XG4gICAgICAgIDxnICpuZ0Zvcj1cImxldCBsaW5lU2luZ2xlUG9pbnRGYWxsYmFjayBvZiBkLmNpcmNsZXM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cIm1hcmtlclwiXG4gICAgICAgICAgICBbYXR0ci5jeF09XCJsaW5lU2luZ2xlUG9pbnRGYWxsYmFjay5jeFwiXG4gICAgICAgICAgICBbYXR0ci5jeV09XCJsaW5lU2luZ2xlUG9pbnRGYWxsYmFjay5jeVwiXG4gICAgICAgICAgICByPVwiMy41XCJcbiAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInZhckNvbG9yKGQuY29sb3JzLCBpKVwiXG4gICAgICAgICAgPjwvY2lyY2xlPlxuICAgICAgICA8L2c+XG4gICAgICAgIDxnICpuZ0Zvcj1cImxldCBsaW5lIG9mIGQubGluZXM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cIm1hcmtlclwiXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAhIWhvdmVyICYmIChjb25maWcuZ3JvdXBlZFRvb2x0aXAgfHwgaSA9PT0gaG92ZXIudmlzaWJsZVlJbmRleClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbYXR0ci5jeF09XCJob3Zlci54XCJcbiAgICAgICAgICAgIFthdHRyLmN5XT1cImhvdmVyLnlzW2ldXCJcbiAgICAgICAgICAgIHI9XCIzLjVcIlxuICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwidmFyQ29sb3IoZC5jb2xvcnMsIGkpXCJcbiAgICAgICAgICA+PC9jaXJjbGU+XG4gICAgICAgIDwvZz5cbiAgICAgICAgPGcgKm5nRm9yPVwibGV0IGFyZWEgb2YgZC5hcmVhczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgIDxwYXRoIFthdHRyLmRdPVwiYXJlYVwiIFthdHRyLmZpbGxdPVwidmFyQ29sb3IoZC5jb2xvcnMsIGkpXCI+PC9wYXRoPlxuICAgICAgICA8L2c+XG4gICAgICAgIDxnICpuZ0Zvcj1cImxldCBhcmVhIG9mIGQuYXJlYXM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cIm1hcmtlclwiXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAhIWhvdmVyICYmIChjb25maWcuZ3JvdXBlZFRvb2x0aXAgfHwgaSA9PT0gaG92ZXIudmlzaWJsZVlJbmRleClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbYXR0ci5jeF09XCJob3Zlci54XCJcbiAgICAgICAgICAgIFthdHRyLmN5XT1cImhvdmVyLnlzW2ldXCJcbiAgICAgICAgICAgIHI9XCIzLjVcIlxuICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwidmFyQ29sb3IoZC5jb2xvcnMsIGkpXCJcbiAgICAgICAgICA+PC9jaXJjbGU+XG4gICAgICAgIDwvZz5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgcGF0aCBvZiBkLmFyY3M7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgIFthdHRyLmRdPVwicGF0aFwiXG4gICAgICAgICAgW2F0dHIuZmlsbF09XCJ2YXJDb2xvcihkLmNvbG9ycywgaSlcIlxuICAgICAgICA+PC9wYXRoPlxuICAgICAgPC9zdmc6c3ZnPlxuICAgICAgPGRpdiAqbmdJZj1cImNvbmZpZy50eXBlID09PSAnZG9udXQnXCIgY2xhc3M9XCJkb251dC1kaXNwbGF5XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkb251dC12YWx1ZVwiIFtuZ0NsYXNzXT1cImNvbmZpZy5kb251dERpc3BsYXlJbmZvLnNpemVcIj5cbiAgICAgICAgICB7eyBjb25maWcuZG9udXREaXNwbGF5SW5mby5kaXNwbGF5VmFsdWUgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkb251dC1sYWJlbFwiPlxuICAgICAgICAgIHt7IGNvbmZpZy5kb251dERpc3BsYXlJbmZvLmRpc3BsYXlMYWJlbCB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhvdmVyPy50b29sdGlwIGFzIHRvb2x0aXBcIj5cbiAgICAgICAgPHJpdi1jYWxsb3V0XG4gICAgICAgICAgKnJpdi1vdmVybGF5XG4gICAgICAgICAgW2FuY2hvcl09XCJ0b29sdGlwLmFuY2hvclwiXG4gICAgICAgICAgW2lzTW9kYWxdPVwiZmFsc2VcIlxuICAgICAgICAgIFtwcmVmZXJyZWRQb3NpdGlvbl09XCInY2VudGVyLXJpZ2h0J1wiXG4gICAgICAgICAgW3RoZW1lXT1cIidsaWdodCdcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGxvdXQtY29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRvb2x0aXAuZGF0ZVwiIGNsYXNzPVwiY2FsbG91dC1yb3dcIj5cbiAgICAgICAgICAgICAge3sgdG9vbHRpcC5kYXRlIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsb3V0LXJvd1wiICpuZ0Zvcj1cImxldCBtZXRyaWMgb2YgdG9vbHRpcC5tZXRyaWNzXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VyaWVzLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgPHJpdi1sZWdlbmQtaXRlbSBbY29sb3JUb2tlbl09XCJtZXRyaWMuY29sb3JcIj48L3Jpdi1sZWdlbmQtaXRlbT5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBtZXRyaWMubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgbWV0cmljLnZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvcml2LWNhbGxvdXQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8bGVnZW5kPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpcnN0SGlkZGVuTGVnZW5kSXRlbUluZGV4JCB8IGFzeW5jOyBsZXQgZmlcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkLmRhdGEueXM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICA8cml2LWxlZ2VuZC1pdGVtXG4gICAgICAgICAgICAqbmdJZj1cImkgPCBmaVwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiaXRlbS5sYWJlbFwiXG4gICAgICAgICAgICBbdmlzaWJpbGl0eV09XCJpdGVtLmhpZGRlbiA/ICdoaWRkZW4nIDogJ3Zpc2libGUnXCJcbiAgICAgICAgICAgIFtjbGlja2FibGVdPVwiY29uZmlnLmFsbG93TGVnZW5kVG9nZ2xlXCJcbiAgICAgICAgICAgIFtjb2xvclRva2VuXT1cImNvbmZpZy5jb2xvcnNbaSAlIGNvbmZpZy5jb2xvcnMubGVuZ3RoXVwiXG4gICAgICAgICAgICAoaXRlbUNsaWNrKT1cInRvZ2dsZUxlZ2VuZChpdGVtLmxhYmVsKVwiXG4gICAgICAgICAgPjwvcml2LWxlZ2VuZC1pdGVtPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICNtb3JlVGV4dENvbnRhaW5lclxuICAgICAgICAgIGNsYXNzPVwibW9yZS10ZXh0LWNvbnRhaW5lclwiXG4gICAgICAgICAgKG1vdXNlb3Zlcik9XCJtb3VzZW92ZXJMZWdlbmQoKVwiXG4gICAgICAgICAgKG1vdXNlbGVhdmUpPVwibW91c2VsZWF2ZUxlZ2VuZCgpXCJcbiAgICAgICAgICAoY2xpY2spPVwibW9yZUNsaWNrKClcIlxuICAgICAgICAgICpuZ0lmPVwiZmkgPCBkLmRhdGEueXMubGVuZ3RoXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIHJpdkxpbmsgY2xhc3M9XCJtb3JlLXRleHRcIj5cbiAgICAgICAgICAgICtcbiAgICAgICAgICAgIHt7IGQuZGF0YS55cy5sZW5ndGggLSBmaSB9fSBtb3JlXG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dNb3JlVG9vbHRpcCB8fCBsb2NrU2hvd01vcmVUb29sdGlwXCI+XG4gICAgICAgICAgPHJpdi1jYWxsb3V0XG4gICAgICAgICAgICAqcml2LW92ZXJsYXlcbiAgICAgICAgICAgIFthbmNob3JdPVwibW9yZVRleHRDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnRcIlxuICAgICAgICAgICAgW2lzTW9kYWxdPVwibG9ja1Nob3dNb3JlVG9vbHRpcFwiXG4gICAgICAgICAgICAoY2xvc2UpPVwiY2xvc2VIYW5kbGVyKClcIlxuICAgICAgICAgICAgW3ByZWZlcnJlZFBvc2l0aW9uXT1cIidib3R0b20tcmlnaHQnXCJcbiAgICAgICAgICAgIFt0aGVtZV09XCInbGlnaHQnXCJcbiAgICAgICAgICAgIFtzaG93Q2FyZXRdPVwiZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtdG9vbHRpcFwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGQuZGF0YS55czsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgIDxyaXYtbGVnZW5kLWl0ZW1cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaSA+PSBmaVwiXG4gICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiaXRlbS5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICBbdmlzaWJpbGl0eV09XCJpdGVtLmhpZGRlbiA/ICdoaWRkZW4nIDogJ3Zpc2libGUnXCJcbiAgICAgICAgICAgICAgICAgIFtjbGlja2FibGVdPVwiY29uZmlnLmFsbG93TGVnZW5kVG9nZ2xlXCJcbiAgICAgICAgICAgICAgICAgIFtjb2xvclRva2VuXT1cImNvbmZpZy5jb2xvcnNbaSAlIGNvbmZpZy5jb2xvcnMubGVuZ3RoXVwiXG4gICAgICAgICAgICAgICAgICAoaXRlbUNsaWNrKT1cInRvZ2dsZUxlZ2VuZChpdGVtLmxhYmVsKVwiXG4gICAgICAgICAgICAgICAgPjwvcml2LWxlZ2VuZC1pdGVtPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvcml2LWNhbGxvdXQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9sZWdlbmQ+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjemVyb1N0YXRlPlxuICA8cml2LXplcm8tc3RhdGUgW21lc3NhZ2VdPVwiY29uZmlnLnplcm9TdGF0ZU1lc3NhZ2VcIj48L3Jpdi16ZXJvLXN0YXRlPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|