UNPKG

@taiga-ui/addon-mobile

Version:

Extension package for Taiga UI that adds support for mobile specific behaviors such as custom data pickers, dropdowns, etc.

117 lines 22.9 kB
import { __decorate } from "tslib"; import { ChangeDetectionStrategy, Component, computed, inject, } from '@angular/core'; import { TuiMobileCalendar } from '@taiga-ui/addon-mobile/components/mobile-calendar'; import { TuiKeyboardService } from '@taiga-ui/addon-mobile/services'; import { TuiControl } from '@taiga-ui/cdk/classes'; import { TUI_FALSE_HANDLER } from '@taiga-ui/cdk/constants'; import { TUI_FIRST_DAY, TUI_LAST_DAY, TuiDay, TuiDayRange, } from '@taiga-ui/cdk/date-time'; import { TuiActiveZone } from '@taiga-ui/cdk/directives/active-zone'; import { TuiAnimated } from '@taiga-ui/cdk/directives/animated'; import { tuiPure } from '@taiga-ui/cdk/utils/miscellaneous'; import { TuiDropdownDirective } from '@taiga-ui/core/directives/dropdown'; import { calculateDisabledItemHandler, TUI_DAY_CAPS_MAPPER, } from '@taiga-ui/kit/components/calendar-range'; import { TUI_MOBILE_CALENDAR } from '@taiga-ui/kit/tokens'; import { injectContext } from '@taiga-ui/polymorpheus'; import { TuiMobileCalendarDropdownNew } from './mobile-calendar-dropdown.directive'; import * as i0 from "@angular/core"; import * as i1 from "@taiga-ui/cdk/directives/active-zone"; import * as i2 from "@taiga-ui/cdk/directives/animated"; // TODO: Rename to TuiMobileCalendarDropdownComponent in v5, this component is terrible and needs a complete rewrite class TuiMobileCalendarDropdown { constructor() { // TODO: Rework to use TuiDropdownOpenDirective so the focus returns to the field on closing this.dropdown = inject(TuiDropdownDirective, { optional: true }); this.keyboard = inject(TuiKeyboardService); this.context = injectContext({ optional: true }); this.observer = this.context?.$implicit; this.data = this.context?.data || {}; this.selectedPeriod = null; // TODO: Refactor to proper Date, DateMulti and DateRange components after they are added to kit this.control = inject(TuiControl, { optional: true }); this.directive = inject(TuiMobileCalendarDropdownNew, { optional: true }); this.range = !!this.directive?.range || this.is('tui-input-date-range'); this.multi = this.data.multi || this.is('tui-input-date[multiple]'); this.single = !!this.directive?.single || !!this.directive?.dateTime || this.data.single || // TODO(v5): use `rangeMode` from DI token `TUI_CALENDAR_SHEET_DEFAULT_OPTIONS` this.is('tui-input-date:not([multiple])'); this.value = computed((value = this.directive?.date?.value()) => Array.isArray(value) ? value[0] : value); this.keyboard.hide(); } max() { if (this.directive?.date) { return this.directive.date.max(); } return (this.data.max || (this.range ? TUI_DAY_CAPS_MAPPER(this.control.max, this.selectedPeriod, this.control.maxLength, false) : this.control?.max) || TUI_LAST_DAY); } min() { if (this.directive?.date) { return this.directive.date.min(); } return (this.data.min || (this.range ? TUI_DAY_CAPS_MAPPER(this.control.min, this.selectedPeriod, this.control.maxLength, true) : this.control?.min) || TUI_FIRST_DAY); } onValueChange(value) { if (!this.range) { return; } if (value === null || value instanceof TuiDayRange) { this.selectedPeriod = value; } else if (value instanceof TuiDay) { this.selectedPeriod = new TuiDayRange(value, value); } } get calculatedDisabledItemHandler() { return this.calculateDisabledItemHandler(this.directive?.handlers.disabledItemHandler() || this.data.disabledItemHandler || this.control?.disabledItemHandler || TUI_FALSE_HANDLER, this.selectedPeriod, this.control?.minLength ?? null); } close() { this.dropdown?.toggle(false); this.observer?.complete(); this.keyboard.show(); } confirm(value) { const normalizedValue = this.range ? this.selectedPeriod : value; if (this.control) { this.control.value = normalizedValue; } if (this.directive?.date) { this.directive.date.setDate(normalizedValue); } this.observer?.next(normalizedValue); this.close(); } calculateDisabledItemHandler(disabledItemHandler, value, minLength) { return calculateDisabledItemHandler(disabledItemHandler, value, minLength); } is(selector) { return !!this.dropdown?.el.closest(selector); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiMobileCalendarDropdown, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiMobileCalendarDropdown, isStandalone: true, selector: "tui-mobile-calendar-dropdown", hostDirectives: [{ directive: i1.TuiActiveZone }, { directive: i2.TuiAnimated }], ngImport: i0, template: "<tui-mobile-calendar\n [disabledItemHandler]=\"calculatedDisabledItemHandler\"\n [max]=\"max()\"\n [min]=\"min()\"\n [multi]=\"multi\"\n [single]=\"single\"\n [value]=\"value()\"\n (cancel)=\"close()\"\n (confirm)=\"confirm($event)\"\n (valueChange)=\"onValueChange($event)\"\n/>\n", styles: [":host{position:fixed;top:0;left:0;inline-size:100%;block-size:100%;background:var(--tui-background-elevation-1);box-shadow:0 10rem var(--tui-background-elevation-1),0 -90vh 1rem 2rem var(--tui-service-backdrop);block-size:calc(100% - env(safe-area-inset-top) - env(safe-area-inset-bottom));padding:env(safe-area-inset-top) 0 env(safe-area-inset-bottom)}:host.tui-enter,:host.tui-leave{animation-name:tuiFade,tuiSlide}\n"], dependencies: [{ kind: "component", type: TuiMobileCalendar, selector: "tui-mobile-calendar", inputs: ["single", "multi", "min", "max", "disabledItemHandler", "value"], outputs: ["cancel", "confirm", "valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); } } __decorate([ tuiPure ], TuiMobileCalendarDropdown.prototype, "calculateDisabledItemHandler", null); export { TuiMobileCalendarDropdown }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiMobileCalendarDropdown, decorators: [{ type: Component, args: [{ standalone: true, selector: 'tui-mobile-calendar-dropdown', imports: [TuiMobileCalendar], changeDetection: ChangeDetectionStrategy.OnPush, hostDirectives: [TuiActiveZone, TuiAnimated], template: "<tui-mobile-calendar\n [disabledItemHandler]=\"calculatedDisabledItemHandler\"\n [max]=\"max()\"\n [min]=\"min()\"\n [multi]=\"multi\"\n [single]=\"single\"\n [value]=\"value()\"\n (cancel)=\"close()\"\n (confirm)=\"confirm($event)\"\n (valueChange)=\"onValueChange($event)\"\n/>\n", styles: [":host{position:fixed;top:0;left:0;inline-size:100%;block-size:100%;background:var(--tui-background-elevation-1);box-shadow:0 10rem var(--tui-background-elevation-1),0 -90vh 1rem 2rem var(--tui-service-backdrop);block-size:calc(100% - env(safe-area-inset-top) - env(safe-area-inset-bottom));padding:env(safe-area-inset-top) 0 env(safe-area-inset-bottom)}:host.tui-enter,:host.tui-leave{animation-name:tuiFade,tuiSlide}\n"] }] }], ctorParameters: function () { return []; }, propDecorators: { calculateDisabledItemHandler: [] } }); export function tuiProvideMobileCalendar() { return { provide: TUI_MOBILE_CALENDAR, useValue: TuiMobileCalendarDropdown, }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9iaWxlLWNhbGVuZGFyLWRyb3Bkb3duLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FkZG9uLW1vYmlsZS9jb21wb25lbnRzL21vYmlsZS1jYWxlbmRhci1kcm9wZG93bi9tb2JpbGUtY2FsZW5kYXItZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWRkb24tbW9iaWxlL2NvbXBvbmVudHMvbW9iaWxlLWNhbGVuZGFyLWRyb3Bkb3duL21vYmlsZS1jYWxlbmRhci1kcm9wZG93bi50ZW1wbGF0ZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxHQUVULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBQ3BGLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRCxPQUFPLEVBQ0gsYUFBYSxFQUNiLFlBQVksRUFDWixNQUFNLEVBRU4sV0FBVyxHQUNkLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUU5RCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDMUQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUNILDRCQUE0QixFQUM1QixtQkFBbUIsR0FDdEIsTUFBTSx5Q0FBeUMsQ0FBQztBQUNq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QixRQUFRLEVBQUUseUJBQXlCO0tBQ3RDLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgY29tcHV0ZWQsXG4gICAgaW5qZWN0LFxuICAgIHR5cGUgVmFsdWVQcm92aWRlcixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1R1aU1vYmlsZUNhbGVuZGFyfSBmcm9tICdAdGFpZ2EtdWkvYWRkb24tbW9iaWxlL2NvbXBvbmVudHMvbW9iaWxlLWNhbGVuZGFyJztcbmltcG9ydCB7VHVpS2V5Ym9hcmRTZXJ2aWNlfSBmcm9tICdAdGFpZ2EtdWkvYWRkb24tbW9iaWxlL3NlcnZpY2VzJztcbmltcG9ydCB7VHVpQ29udHJvbH0gZnJvbSAnQHRhaWdhLXVpL2Nkay9jbGFzc2VzJztcbmltcG9ydCB7VFVJX0ZBTFNFX0hBTkRMRVJ9IGZyb20gJ0B0YWlnYS11aS9jZGsvY29uc3RhbnRzJztcbmltcG9ydCB7XG4gICAgVFVJX0ZJUlNUX0RBWSxcbiAgICBUVUlfTEFTVF9EQVksXG4gICAgVHVpRGF5LFxuICAgIHR5cGUgVHVpRGF5TGlrZSxcbiAgICBUdWlEYXlSYW5nZSxcbn0gZnJvbSAnQHRhaWdhLXVpL2Nkay9kYXRlLXRpbWUnO1xuaW1wb3J0IHtUdWlBY3RpdmVab25lfSBmcm9tICdAdGFpZ2EtdWkvY2RrL2RpcmVjdGl2ZXMvYWN0aXZlLXpvbmUnO1xuaW1wb3J0IHtUdWlBbmltYXRlZH0gZnJvbSAnQHRhaWdhLXVpL2Nkay9kaXJlY3RpdmVzL2FuaW1hdGVkJztcbmltcG9ydCB7dHlwZSBUdWlCb29sZWFuSGFuZGxlcn0gZnJvbSAnQHRhaWdhLXVpL2Nkay90eXBlcyc7XG5pbXBvcnQge3R1aVB1cmV9IGZyb20gJ0B0YWlnYS11aS9jZGsvdXRpbHMvbWlzY2VsbGFuZW91cyc7XG5pbXBvcnQge1R1aURyb3Bkb3duRGlyZWN0aXZlfSBmcm9tICdAdGFpZ2EtdWkvY29yZS9kaXJlY3RpdmVzL2Ryb3Bkb3duJztcbmltcG9ydCB7XG4gICAgY2FsY3VsYXRlRGlzYWJsZWRJdGVtSGFuZGxlcixcbiAgICBUVUlfREFZX0NBUFNfTUFQUEVSLFxufSBmcm9tICdAdGFpZ2EtdWkva2l0L2NvbXBvbmVudHMvY2FsZW5kYXItcmFuZ2UnO1xuaW1wb3J0IHtUVUlfTU9CSUxFX0NBTEVOREFSfSBmcm9tICdAdGFpZ2EtdWkva2l0L3Rva2Vucyc7XG5pbXBvcnQge2luamVjdENvbnRleHR9IGZyb20gJ0B0YWlnYS11aS9wb2x5bW9ycGhldXMnO1xuaW1wb3J0IHt0eXBlIE9ic2VydmVyfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtUdWlNb2JpbGVDYWxlbmRhckRyb3Bkb3duTmV3fSBmcm9tICcuL21vYmlsZS1jYWxlbmRhci1kcm9wZG93bi5kaXJlY3RpdmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFR1aU1vYmlsZUNhbGVuZGFyRGF0YSB7XG4gICAgZGlzYWJsZWRJdGVtSGFuZGxlcj86IFR1aUJvb2xlYW5IYW5kbGVyPFR1aURheT47XG4gICAgbWF4PzogVHVpRGF5IHwgbnVsbDtcbiAgICBtaW4/OiBUdWlEYXkgfCBudWxsO1xuICAgIG11bHRpPzogYm9vbGVhbjtcbiAgICBzaW5nbGU/OiBib29sZWFuO1xufVxuXG4vLyBUT0RPOiBSZW5hbWUgdG8gVHVpTW9iaWxlQ2FsZW5kYXJEcm9wZG93bkNvbXBvbmVudCBpbiB2NSwgdGhpcyBjb21wb25lbnQgaXMgdGVycmlibGUgYW5kIG5lZWRzIGEgY29tcGxldGUgcmV3cml0ZVxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ3R1aS1tb2JpbGUtY2FsZW5kYXItZHJvcGRvd24nLFxuICAgIGltcG9ydHM6IFtUdWlNb2JpbGVDYWxlbmRhcl0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL21vYmlsZS1jYWxlbmRhci1kcm9wZG93bi50ZW1wbGF0ZS5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9tb2JpbGUtY2FsZW5kYXItZHJvcGRvd24uc3R5bGUubGVzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGhvc3REaXJlY3RpdmVzOiBbVHVpQWN0aXZlWm9uZSwgVHVpQW5pbWF0ZWRdLFxufSlcbmV4cG9ydCBjbGFzcyBUdWlNb2JpbGVDYWxlbmRhckRyb3Bkb3duIHtcbiAgICAvLyBUT0RPOiBSZXdvcmsgdG8gdXNlIFR1aURyb3Bkb3duT3BlbkRpcmVjdGl2ZSBzbyB0aGUgZm9jdXMgcmV0dXJucyB0byB0aGUgZmllbGQgb24gY2xvc2luZ1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZHJvcGRvd24gPSBpbmplY3QoVHVpRHJvcGRvd25EaXJlY3RpdmUsIHtvcHRpb25hbDogdHJ1ZX0pO1xuICAgIHByaXZhdGUgcmVhZG9ubHkga2V5Ym9hcmQgPSBpbmplY3QoVHVpS2V5Ym9hcmRTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnRleHQgPSBpbmplY3RDb250ZXh0PFJlY29yZDxzdHJpbmcsIGFueT4+KHtvcHRpb25hbDogdHJ1ZX0pO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgb2JzZXJ2ZXI/OiBPYnNlcnZlcjxhbnk+ID0gdGhpcy5jb250ZXh0Py4kaW1wbGljaXQ7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkYXRhOiBUdWlNb2JpbGVDYWxlbmRhckRhdGEgPSB0aGlzLmNvbnRleHQ/LmRhdGEgfHwge307XG5cbiAgICBwcml2YXRlIHNlbGVjdGVkUGVyaW9kOiBUdWlEYXlSYW5nZSB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gVE9ETzogUmVmYWN0b3IgdG8gcHJvcGVyIERhdGUsIERhdGVNdWx0aSBhbmQgRGF0ZVJhbmdlIGNvbXBvbmVudHMgYWZ0ZXIgdGhleSBhcmUgYWRkZWQgdG8ga2l0XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbnRyb2w6IGFueSA9IGluamVjdChUdWlDb250cm9sLCB7b3B0aW9uYWw6IHRydWV9KTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGlyZWN0aXZlID0gaW5qZWN0KFR1aU1vYmlsZUNhbGVuZGFyRHJvcGRvd25OZXcsIHtvcHRpb25hbDogdHJ1ZX0pO1xuICAgIHByb3RlY3RlZCByZWFkb25seSByYW5nZSA9ICEhdGhpcy5kaXJlY3RpdmU/LnJhbmdlIHx8IHRoaXMuaXMoJ3R1aS1pbnB1dC1kYXRlLXJhbmdlJyk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG11bHRpID0gdGhpcy5kYXRhLm11bHRpIHx8IHRoaXMuaXMoJ3R1aS1pbnB1dC1kYXRlW211bHRpcGxlXScpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBzaW5nbGUgPVxuICAgICAgICAhIXRoaXMuZGlyZWN0aXZlPy5zaW5nbGUgfHxcbiAgICAgICAgISF0aGlzLmRpcmVjdGl2ZT8uZGF0ZVRpbWUgfHxcbiAgICAgICAgdGhpcy5kYXRhLnNpbmdsZSB8fCAvLyBUT0RPKHY1KTogdXNlIGByYW5nZU1vZGVgIGZyb20gREkgdG9rZW4gYFRVSV9DQUxFTkRBUl9TSEVFVF9ERUZBVUxUX09QVElPTlNgXG4gICAgICAgIHRoaXMuaXMoJ3R1aS1pbnB1dC1kYXRlOm5vdChbbXVsdGlwbGVdKScpO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHZhbHVlID0gY29tcHV0ZWQ8VHVpRGF5IHwgVHVpRGF5UmFuZ2UgfCBudWxsPihcbiAgICAgICAgKHZhbHVlID0gdGhpcy5kaXJlY3RpdmU/LmRhdGU/LnZhbHVlKCkpID0+XG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlWzBdIDogdmFsdWUsXG4gICAgKTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmtleWJvYXJkLmhpZGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbWF4KCk6IFR1aURheSB7XG4gICAgICAgIGlmICh0aGlzLmRpcmVjdGl2ZT8uZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlyZWN0aXZlLmRhdGUubWF4KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5kYXRhLm1heCB8fFxuICAgICAgICAgICAgKHRoaXMucmFuZ2VcbiAgICAgICAgICAgICAgICA/IFRVSV9EQVlfQ0FQU19NQVBQRVIoXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLm1heCxcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUGVyaW9kLFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5tYXhMZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiB0aGlzLmNvbnRyb2w/Lm1heCkgfHxcbiAgICAgICAgICAgIFRVSV9MQVNUX0RBWVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBtaW4oKTogVHVpRGF5IHtcbiAgICAgICAgaWYgKHRoaXMuZGlyZWN0aXZlPy5kYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJlY3RpdmUuZGF0ZS5taW4oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmRhdGEubWluIHx8XG4gICAgICAgICAgICAodGhpcy5yYW5nZVxuICAgICAgICAgICAgICAgID8gVFVJX0RBWV9DQVBTX01BUFBFUihcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wubWluLFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQZXJpb2QsXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLm1heExlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogdGhpcy5jb250cm9sPy5taW4pIHx8XG4gICAgICAgICAgICBUVUlfRklSU1RfREFZXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uVmFsdWVDaGFuZ2UodmFsdWU6IFR1aURheSB8IFR1aURheVJhbmdlIHwgcmVhZG9ubHkgVHVpRGF5W10gfCBudWxsKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5yYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlIGluc3RhbmNlb2YgVHVpRGF5UmFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQZXJpb2QgPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFR1aURheSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFBlcmlvZCA9IG5ldyBUdWlEYXlSYW5nZSh2YWx1ZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCBjYWxjdWxhdGVkRGlzYWJsZWRJdGVtSGFuZGxlcigpOiBUdWlCb29sZWFuSGFuZGxlcjxUdWlEYXk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlRGlzYWJsZWRJdGVtSGFuZGxlcihcbiAgICAgICAgICAgIHRoaXMuZGlyZWN0aXZlPy5oYW5kbGVycy5kaXNhYmxlZEl0ZW1IYW5kbGVyKCkgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuZGlzYWJsZWRJdGVtSGFuZGxlciB8fFxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbD8uZGlzYWJsZWRJdGVtSGFuZGxlciB8fFxuICAgICAgICAgICAgICAgIFRVSV9GQUxTRV9IQU5ETEVSLFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFBlcmlvZCxcbiAgICAgICAgICAgIHRoaXMuY29udHJvbD8ubWluTGVuZ3RoID8/IG51bGwsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNsb3NlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRyb3Bkb3duPy50b2dnbGUoZmFsc2UpO1xuICAgICAgICB0aGlzLm9ic2VydmVyPy5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmtleWJvYXJkLnNob3coKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY29uZmlybSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IHRoaXMucmFuZ2UgPyB0aGlzLnNlbGVjdGVkUGVyaW9kIDogdmFsdWU7XG5cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLnZhbHVlID0gbm9ybWFsaXplZFZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZGlyZWN0aXZlPy5kYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmRpcmVjdGl2ZS5kYXRlLnNldERhdGUobm9ybWFsaXplZFZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub2JzZXJ2ZXI/Lm5leHQobm9ybWFsaXplZFZhbHVlKTtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cblxuICAgIEB0dWlQdXJlXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVEaXNhYmxlZEl0ZW1IYW5kbGVyKFxuICAgICAgICBkaXNhYmxlZEl0ZW1IYW5kbGVyOiBUdWlCb29sZWFuSGFuZGxlcjxUdWlEYXk+LFxuICAgICAgICB2YWx1ZTogVHVpRGF5UmFuZ2UgfCBudWxsLFxuICAgICAgICBtaW5MZW5ndGg6IFR1aURheUxpa2UgfCBudWxsLFxuICAgICk6IFR1aUJvb2xlYW5IYW5kbGVyPFR1aURheT4ge1xuICAgICAgICByZXR1cm4gY2FsY3VsYXRlRGlzYWJsZWRJdGVtSGFuZGxlcihkaXNhYmxlZEl0ZW1IYW5kbGVyLCB2YWx1ZSwgbWluTGVuZ3RoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzKHNlbGVjdG9yOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5kcm9wZG93bj8uZWwuY2xvc2VzdChzZWxlY3Rvcik7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdHVpUHJvdmlkZU1vYmlsZUNhbGVuZGFyKCk6IFZhbHVlUHJvdmlkZXIge1xuICAgIHJldHVybiB7XG4gICAgICAgIHByb3ZpZGU6IFRVSV9NT0JJTEVfQ0FMRU5EQVIsXG4gICAgICAgIHVzZVZhbHVlOiBUdWlNb2JpbGVDYWxlbmRhckRyb3Bkb3duLFxuICAgIH07XG59XG4iLCI8dHVpLW1vYmlsZS1jYWxlbmRhclxuICAgIFtkaXNhYmxlZEl0ZW1IYW5kbGVyXT1cImNhbGN1bGF0ZWREaXNhYmxlZEl0ZW1IYW5kbGVyXCJcbiAgICBbbWF4XT1cIm1heCgpXCJcbiAgICBbbWluXT1cIm1pbigpXCJcbiAgICBbbXVsdGldPVwibXVsdGlcIlxuICAgIFtzaW5nbGVdPVwic2luZ2xlXCJcbiAgICBbdmFsdWVdPVwidmFsdWUoKVwiXG4gICAgKGNhbmNlbCk9XCJjbG9zZSgpXCJcbiAgICAoY29uZmlybSk9XCJjb25maXJtKCRldmVudClcIlxuICAgICh2YWx1ZUNoYW5nZSk9XCJvblZhbHVlQ2hhbmdlKCRldmVudClcIlxuLz5cbiJdfQ==