@abgov/angular-components
Version:
Government of Alberta - UI components for Angular
259 lines • 22.8 kB
JavaScript
import { CUSTOM_ELEMENTS_SCHEMA, Component, EventEmitter, Input, Output, forwardRef, booleanAttribute, numberAttribute, } from "@angular/core";
import { NG_VALUE_ACCESSOR } from "@angular/forms";
import * as i0 from "@angular/core";
export class GoabInputNumber {
constructor() {
this.type = "number";
this.textAlign = "right"; // Default to right for numbers
this.value = null;
this.onTrailingIconClick = new EventEmitter(); // Keep void type
this.onFocus = new EventEmitter();
this.onBlur = new EventEmitter();
this.onKeyPress = new EventEmitter();
this.onChange = new EventEmitter();
this.handleTrailingIconClick = false;
this.touched = false;
}
ngOnInit() {
this.handleTrailingIconClick = this.onTrailingIconClick.observed;
}
_onTrailingIconClick(_) {
if (this.handleTrailingIconClick) {
this.onTrailingIconClick.emit();
}
}
_onChange(e) {
this.markAsTouched();
const detail = e.detail;
const stringValue = detail.value;
let numericValue = null;
if (stringValue !== null && stringValue.trim() !== "") {
const parsed = parseFloat(stringValue);
if (!isNaN(parsed)) {
numericValue = parsed;
}
}
this.value = numericValue;
this.fcChange?.(numericValue);
this.onChange.emit(detail);
}
_onKeyPress(e) {
this.markAsTouched();
const detail = e.detail;
this.onKeyPress.emit(detail);
}
_onFocus(e) {
this.markAsTouched();
const detail = e.detail;
this.onFocus.emit(detail);
}
_onBlur(e) {
this.markAsTouched();
const detail = e.detail;
this.onBlur.emit(detail);
}
markAsTouched() {
if (!this.touched) {
this.fcTouched?.();
this.touched = true;
}
}
writeValue(value) {
this.value = value === undefined ? null : value;
}
registerOnChange(fn) {
this.fcChange = fn;
}
registerOnTouched(fn) {
this.fcTouched = fn;
}
setDisabledState(isDisabled) {
this.disabled = isDisabled;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: GoabInputNumber, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.0.3", type: GoabInputNumber, isStandalone: true, selector: "goab-input-number", inputs: { type: "type", name: "name", id: "id", debounce: ["debounce", "debounce", numberAttribute], disabled: ["disabled", "disabled", booleanAttribute], autoCapitalize: "autoCapitalize", placeholder: "placeholder", leadingIcon: "leadingIcon", trailingIcon: "trailingIcon", variant: "variant", focused: ["focused", "focused", booleanAttribute], readonly: ["readonly", "readonly", booleanAttribute], error: ["error", "error", booleanAttribute], width: "width", prefix: "prefix", suffix: "suffix", testId: "testId", ariaLabel: "ariaLabel", maxLength: ["maxLength", "maxLength", numberAttribute], min: "min", max: "max", step: ["step", "step", numberAttribute], ariaLabelledBy: "ariaLabelledBy", mt: "mt", mr: "mr", mb: "mb", ml: "ml", trailingIconAriaLabel: "trailingIconAriaLabel", textAlign: "textAlign", value: "value" }, outputs: { onTrailingIconClick: "onTrailingIconClick", onFocus: "onFocus", onBlur: "onBlur", onKeyPress: "onKeyPress", onChange: "onChange" }, providers: [
{
provide: NG_VALUE_ACCESSOR,
multi: true,
// Use forwardRef with the new class name
useExisting: forwardRef(() => GoabInputNumber),
},
], ngImport: i0, template: `
<goa-input
[]="type"
[]="name"
[]="focused"
[]="value !== null ? value : ''"
[]="autoCapitalize"
[]="placeholder"
[]="leadingIcon"
[]="trailingIcon"
[]="variant"
[]="disabled"
[]="readonly"
[]="error"
[]="testId"
[]="width"
[]="ariaLabel"
[]="ariaLabelledBy"
[]="min"
[]="max"
[]="step"
[]="prefix"
[]="suffix"
[]="debounce"
[]="maxLength"
[]="id"
[]="mt"
[]="mr"
[]="mb"
[]="ml"
[]="handleTrailingIconClick"
[]="textAlign"
(_trailingIconClick)="_onTrailingIconClick($event)"
(_change)="_onChange($event)"
(_focus)="_onFocus($event)"
(_blur)="_onBlur($event)"
(_keypress)="_onKeyPress($event)"
[]="trailingIconAriaLabel"
>
<ng-content />
</goa-input>
`, isInline: true }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: GoabInputNumber, decorators: [{
type: Component,
args: [{
standalone: true,
selector: "goab-input-number",
template: `
<goa-input
[]="type"
[]="name"
[]="focused"
[]="value !== null ? value : ''"
[]="autoCapitalize"
[]="placeholder"
[]="leadingIcon"
[]="trailingIcon"
[]="variant"
[]="disabled"
[]="readonly"
[]="error"
[]="testId"
[]="width"
[]="ariaLabel"
[]="ariaLabelledBy"
[]="min"
[]="max"
[]="step"
[]="prefix"
[]="suffix"
[]="debounce"
[]="maxLength"
[]="id"
[]="mt"
[]="mr"
[]="mb"
[]="ml"
[]="handleTrailingIconClick"
[]="textAlign"
(_trailingIconClick)="_onTrailingIconClick($event)"
(_change)="_onChange($event)"
(_focus)="_onFocus($event)"
(_blur)="_onBlur($event)"
(_keypress)="_onKeyPress($event)"
[]="trailingIconAriaLabel"
>
<ng-content />
</goa-input>
`,
schemas: [CUSTOM_ELEMENTS_SCHEMA],
providers: [
{
provide: NG_VALUE_ACCESSOR,
multi: true,
// Use forwardRef with the new class name
useExisting: forwardRef(() => GoabInputNumber),
},
],
}]
}], propDecorators: { type: [{
type: Input
}], name: [{
type: Input
}], id: [{
type: Input
}], debounce: [{
type: Input,
args: [{ transform: numberAttribute }]
}], disabled: [{
type: Input,
args: [{ transform: booleanAttribute }]
}], autoCapitalize: [{
type: Input
}], placeholder: [{
type: Input
}], leadingIcon: [{
type: Input
}], trailingIcon: [{
type: Input
}], variant: [{
type: Input
}], focused: [{
type: Input,
args: [{ transform: booleanAttribute }]
}], readonly: [{
type: Input,
args: [{ transform: booleanAttribute }]
}], error: [{
type: Input,
args: [{ transform: booleanAttribute }]
}], width: [{
type: Input
}], prefix: [{
type: Input
}], suffix: [{
type: Input
}], testId: [{
type: Input
}], ariaLabel: [{
type: Input
}], maxLength: [{
type: Input,
args: [{ transform: numberAttribute }]
}], min: [{
type: Input
}], max: [{
type: Input
}], step: [{
type: Input,
args: [{ transform: numberAttribute }]
}], ariaLabelledBy: [{
type: Input
}], mt: [{
type: Input
}], mr: [{
type: Input
}], mb: [{
type: Input
}], ml: [{
type: Input
}], trailingIconAriaLabel: [{
type: Input
}], textAlign: [{
type: Input
}], value: [{
type: Input
}], onTrailingIconClick: [{
type: Output
}], onFocus: [{
type: Output
}], onBlur: [{
type: Output
}], onKeyPress: [{
type: Output
}], onChange: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtbnVtYmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2lucHV0LW51bWJlci9pbnB1dC1udW1iZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sVUFBVSxFQUVWLGdCQUFnQixFQUNoQixlQUFlLEdBQ2hCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUF5RHpFLE1BQU0sT0FBTyxlQUFlO0lBdkQ1QjtRQXdEVyxTQUFJLEdBQWtCLFFBQVEsQ0FBQztRQTRCL0IsY0FBUyxHQUFzQixPQUFPLENBQUMsQ0FBQywrQkFBK0I7UUFFdkUsVUFBSyxHQUFrQixJQUFJLENBQUM7UUFFM0Isd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQyxDQUFDLGlCQUFpQjtRQUNqRSxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQTBCLENBQUM7UUFDckQsV0FBTSxHQUFHLElBQUksWUFBWSxFQUF5QixDQUFDO1FBQ25ELGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBNkIsQ0FBQztRQUMzRCxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQTJCLENBQUM7UUFFakUsNEJBQXVCLEdBQUcsS0FBSyxDQUFDO1FBcURoQyxZQUFPLEdBQUcsS0FBSyxDQUFDO0tBd0JqQjtJQTNFQyxRQUFRO1FBQ04sSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUM7SUFDbkUsQ0FBQztJQUVELG9CQUFvQixDQUFDLENBQVE7UUFDM0IsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsbUJBQW1CLENBQUMs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LEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQUM1QixHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNpQyxJQUFJO3NCQUExQyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtnQkFDNUIsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csRUFBRTtzQkFBVixLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxFQUFFO3NCQUFWLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUVJLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBHb2FiSWNvblR5cGUsXG4gIEdvYWJJbnB1dEF1dG9DYXBpdGFsaXplLFxuICBHb2FiSW5wdXRPbkJsdXJEZXRhaWwsXG4gIEdvYWJJbnB1dE9uQ2hhbmdlRGV0YWlsLFxuICBHb2FiSW5wdXRPbkZvY3VzRGV0YWlsLFxuICBHb2FiSW5wdXRPbktleVByZXNzRGV0YWlsLFxuICBHb2FiSW5wdXRUeXBlLFxuICBTcGFjaW5nLFxufSBmcm9tIFwiQGFiZ292L3VpLWNvbXBvbmVudHMtY29tbW9uXCI7XG5pbXBvcnQge1xuICBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgZm9yd2FyZFJlZixcbiAgT25Jbml0LFxuICBib29sZWFuQXR0cmlidXRlLFxuICBudW1iZXJBdHRyaWJ1dGUsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiBcImdvYWItaW5wdXQtbnVtYmVyXCIsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGdvYS1pbnB1dFxuICAgICAgW2F0dHIudHlwZV09XCJ0eXBlXCJcbiAgICAgIFthdHRyLm5hbWVdPVwibmFtZVwiXG4gICAgICBbYXR0ci5mb2N1c2VkXT1cImZvY3VzZWRcIlxuICAgICAgW2F0dHIudmFsdWVdPVwidmFsdWUgIT09IG51bGwgPyB2YWx1ZSA6ICcnXCJcbiAgICAgIFthdHRyLmF1dG9jYXBpdGFsaXplXT1cImF1dG9DYXBpdGFsaXplXCJcbiAgICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgIFthdHRyLmxlYWRpbmdpY29uXT1cImxlYWRpbmdJY29uXCJcbiAgICAgIFthdHRyLnRyYWlsaW5naWNvbl09XCJ0cmFpbGluZ0ljb25cIlxuICAgICAgW2F0dHIudmFyaWFudF09XCJ2YXJpYW50XCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbYXR0ci5yZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICBbYXR0ci5lcnJvcl09XCJlcnJvclwiXG4gICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCJ0ZXN0SWRcIlxuICAgICAgW2F0dHIud2lkdGhdPVwid2lkdGhcIlxuICAgICAgW2F0dHIuYXJpYWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gICAgICBbYXR0ci5hcmlhbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiXG4gICAgICBbYXR0ci5taW5dPVwibWluXCJcbiAgICAgIFthdHRyLm1heF09XCJtYXhcIlxuICAgICAgW2F0dHIuc3RlcF09XCJzdGVwXCJcbiAgICAgIFthdHRyLnByZWZpeF09XCJwcmVmaXhcIlxuICAgICAgW2F0dHIuc3VmZml4XT1cInN1ZmZpeFwiXG4gICAgICBbYXR0ci5kZWJvdW5jZV09XCJkZWJvdW5jZVwiXG4gICAgICBbYXR0ci5tYXhsZW5ndGhdPVwibWF4TGVuZ3RoXCJcbiAgICAgIFthdHRyLmlkXT1cImlkXCJcbiAgICAgIFthdHRyLm10XT1cIm10XCJcbiAgICAgIFthdHRyLm1yXT1cIm1yXCJcbiAgICAgIFthdHRyLm1iXT1cIm1iXCJcbiAgICAgIFthdHRyLm1sXT1cIm1sXCJcbiAgICAgIFthdHRyLmhhbmRsZXRyYWlsaW5naWNvbmNsaWNrXT1cImhhbmRsZVRyYWlsaW5nSWNvbkNsaWNrXCJcbiAgICAgIFthdHRyLnRleHRhbGlnbl09XCJ0ZXh0QWxpZ25cIlxuICAgICAgKF90cmFpbGluZ0ljb25DbGljayk9XCJfb25UcmFpbGluZ0ljb25DbGljaygkZXZlbnQpXCJcbiAgICAgIChfY2hhbmdlKT1cIl9vbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChfZm9jdXMpPVwiX29uRm9jdXMoJGV2ZW50KVwiXG4gICAgICAoX2JsdXIpPVwiX29uQmx1cigkZXZlbnQpXCJcbiAgICAgIChfa2V5cHJlc3MpPVwiX29uS2V5UHJlc3MoJGV2ZW50KVwiXG4gICAgICBbYXR0ci50cmFpbGluZ2ljb25hcmlhbGFiZWxdPVwidHJhaWxpbmdJY29uQXJpYUxhYmVsXCJcbiAgICA+XG4gICAgICA8bmctY29udGVudCAvPlxuICAgIDwvZ29hLWlucHV0PlxuICBgLFxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAvLyBVc2UgZm9yd2FyZFJlZiB3aXRoIHRoZSBuZXcgY2xhc3MgbmFtZVxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gR29hYklucHV0TnVtYmVyKSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBHb2FiSW5wdXROdW1iZXIgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0IHtcbiAgQElucHV0KCkgdHlwZTogR29hYklucHV0VHlwZSA9IFwibnVtYmVyXCI7XG4gIEBJbnB1dCgpIG5hbWU/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlkPzogc3RyaW5nO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBkZWJvdW5jZT86IG51bWJlcjtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgQElucHV0KCkgYXV0b0NhcGl0YWxpemU/OiBHb2FiSW5wdXRBdXRvQ2FwaXRhbGl6ZTtcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGxlYWRpbmdJY29uPzogR29hYkljb25UeXBlO1xuICBASW5wdXQoKSB0cmFpbGluZ0ljb24/OiBHb2FiSWNvblR5cGU7XG4gIEBJbnB1dCgpIHZhcmlhbnQ/OiBzdHJpbmc7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBmb2N1c2VkPzogYm9vbGVhbjtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHJlYWRvbmx5PzogYm9vbGVhbjtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGVycm9yPzogYm9vbGVhbjtcbiAgQElucHV0KCkgd2lkdGg/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHByZWZpeD86IHN0cmluZztcbiAgQElucHV0KCkgc3VmZml4Pzogc3RyaW5nO1xuICBASW5wdXQoKSB0ZXN0SWQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGFyaWFMYWJlbD86IHN0cmluZztcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgbWF4TGVuZ3RoPzogbnVtYmVyO1xuICBASW5wdXQoKSBtaW4/OiBzdHJpbmcgfCBudW1iZXI7XG4gIEBJbnB1dCgpIG1heD86IHN0cmluZyB8IG51bWJlcjtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgc3RlcD86IG51bWJlcjtcbiAgQElucHV0KCkgYXJpYUxhYmVsbGVkQnk/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIG10PzogU3BhY2luZztcbiAgQElucHV0KCkgbXI/OiBTcGFjaW5nO1xuICBASW5wdXQoKSBtYj86IFNwYWNpbmc7XG4gIEBJbnB1dCgpIG1sPzogU3BhY2luZztcbiAgQElucHV0KCkgdHJhaWxpbmdJY29uQXJpYUxhYmVsPzogc3RyaW5nO1xuICBASW5wdXQoKSB0ZXh0QWxpZ24/OiBcImxlZnRcIiB8IFwicmlnaHRcIiA9IFwicmlnaHRcIjsgLy8gRGVmYXVsdCB0byByaWdodCBmb3IgbnVtYmVyc1xuXG4gIEBJbnB1dCgpIHZhbHVlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICBAT3V0cHV0KCkgb25UcmFpbGluZ0ljb25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTsgLy8gS2VlcCB2b2lkIHR5cGVcbiAgQE91dHB1dCgpIG9uRm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyPEdvYWJJbnB1dE9uRm9jdXNEZXRhaWw+KCk7XG4gIEBPdXRwdXQoKSBvbkJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyPEdvYWJJbnB1dE9uQmx1ckRldGFpbD4oKTtcbiAgQE91dHB1dCgpIG9uS2V5UHJlc3MgPSBuZXcgRXZlbnRFbWl0dGVyPEdvYWJJbnB1dE9uS2V5UHJlc3NEZXRhaWw+KCk7XG4gIEBPdXRwdXQoKSBvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8R29hYklucHV0T25DaGFuZ2VEZXRhaWw+KCk7XG5cbiAgaGFuZGxlVHJhaWxpbmdJY29uQ2xpY2sgPSBmYWxzZTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmhhbmRsZVRyYWlsaW5nSWNvbkNsaWNrID0gdGhpcy5vblRyYWlsaW5nSWNvbkNsaWNrLm9ic2VydmVkO1xuICB9XG5cbiAgX29uVHJhaWxpbmdJY29uQ2xpY2soXzogRXZlbnQpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVUcmFpbGluZ0ljb25DbGljaykge1xuICAgICAgdGhpcy5vblRyYWlsaW5nSWNvbkNsaWNrLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBfb25DaGFuZ2UoZTogRXZlbnQpIHtcbiAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcbiAgICBjb25zdCBkZXRhaWwgPSAoZSBhcyBDdXN0b21FdmVudDxHb2FiSW5wdXRPbkNoYW5nZURldGFpbD4pLmRldGFpbDtcblxuICAgIGNvbnN0IHN0cmluZ1ZhbHVlID0gZGV0YWlsLnZhbHVlO1xuICAgIGxldCBudW1lcmljVmFsdWU6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYgKHN0cmluZ1ZhbHVlICE9PSBudWxsICYmIHN0cmluZ1ZhbHVlLnRyaW0oKSAhPT0gXCJcIikge1xuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VGbG9hdChzdHJpbmdWYWx1ZSk7XG4gICAgICBpZiAoIWlzTmFOKHBhcnNlZCkpIHtcbiAgICAgICAgbnVtZXJpY1ZhbHVlID0gcGFyc2VkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudmFsdWUgPSBudW1lcmljVmFsdWU7XG5cbiAgICB0aGlzLmZjQ2hhbmdlPy4obnVtZXJpY1ZhbHVlKTtcblxuICAgIHRoaXMub25DaGFuZ2UuZW1pdChkZXRhaWwpO1xuICB9XG5cbiAgX29uS2V5UHJlc3MoZTogRXZlbnQpIHtcbiAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcbiAgICBjb25zdCBkZXRhaWwgPSAoZSBhcyBDdXN0b21FdmVudDxHb2FiSW5wdXRPbktleVByZXNzRGV0YWlsPikuZGV0YWlsO1xuICAgIHRoaXMub25LZXlQcmVzcy5lbWl0KGRldGFpbCk7XG4gIH1cblxuICBfb25Gb2N1cyhlOiBFdmVudCkge1xuICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xuICAgIGNvbnN0IGRldGFpbCA9IChlIGFzIEN1c3RvbUV2ZW50PEdvYWJJbnB1dE9uRm9jdXNEZXRhaWw+KS5kZXRhaWw7XG4gICAgdGhpcy5vbkZvY3VzLmVtaXQoZGV0YWlsKTtcbiAgfVxuXG4gIF9vbkJsdXIoZTogRXZlbnQpIHtcbiAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcbiAgICBjb25zdCBkZXRhaWwgPSAoZSBhcyBDdXN0b21FdmVudDxHb2FiSW5wdXRPbkJsdXJEZXRhaWw+KS5kZXRhaWw7XG4gICAgdGhpcy5vbkJsdXIuZW1pdChkZXRhaWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBmY0NoYW5nZT86ICh2YWx1ZTogbnVtYmVyIHwgbnVsbCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBmY1RvdWNoZWQ/OiAoKSA9PiB2b2lkOyAvLyBDaGFuZ2VkIHR5cGUgdG8gdm9pZCBmb3IgY29uc2lzdGVuY3lcbiAgdG91Y2hlZCA9IGZhbHNlO1xuXG4gIG1hcmtBc1RvdWNoZWQoKSB7XG4gICAgaWYgKCF0aGlzLnRvdWNoZWQpIHtcbiAgICAgIHRoaXMuZmNUb3VjaGVkPy4oKTtcbiAgICAgIHRoaXMudG91Y2hlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IHZhbHVlO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBudW1iZXIgfCBudWxsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5mY0NoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLmZjVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG59XG4iXX0=