UNPKG

@taiga-ui/core

Version:

Core library for creating Angular components and applications using Taiga UI

131 lines 17 kB
import { computed, Directive, inject, Input, signal } from '@angular/core'; import { NgControl } from '@angular/forms'; import { TuiNativeValidator } from '@taiga-ui/cdk/directives/native-validator'; import { tuiInjectElement, tuiValue } from '@taiga-ui/cdk/utils/dom'; import { tuiProvide } from '@taiga-ui/cdk/utils/miscellaneous'; import { TuiAppearance, tuiAppearance, tuiAppearanceFocus, tuiAppearanceMode, tuiAppearanceState, } from '@taiga-ui/core/directives/appearance'; import { TUI_ITEMS_HANDLERS, } from '@taiga-ui/core/directives/items-handlers'; import { TuiTextfieldComponent } from './textfield.component'; import { TUI_TEXTFIELD_OPTIONS } from './textfield.options'; import { tuiAsTextfieldAccessor } from './textfield-accessor'; import * as i0 from "@angular/core"; import * as i1 from "@taiga-ui/cdk/directives/native-validator"; import * as i2 from "@taiga-ui/core/directives/appearance"; // TODO: Drop in v5 after updated Angular and hostDirectives inherit class TuiTextfieldBase { constructor() { // TODO: refactor to signal inputs after Angular update this.focused = signal(null); this.control = inject(NgControl, { optional: true }); this.a = tuiAppearance(inject(TUI_TEXTFIELD_OPTIONS).appearance, {}); this.s = tuiAppearanceState(null, {}); this.m = tuiAppearanceMode(this.mode, {}); this.f = tuiAppearanceFocus(computed(() => this.focused() ?? this.textfield.focused()), {}); this.el = tuiInjectElement(); this.handlers = inject(TUI_ITEMS_HANDLERS); this.textfield = inject(TuiTextfieldComponent); this.readOnly = false; this.invalid = null; this.value = tuiValue(this.el); } set focusedSetter(focused) { this.focused.set(focused); } set stateSetter(state) { this.s.set(state); } get mode() { if (this.readOnly) { return 'readonly'; } if (this.invalid === false) { return 'valid'; } if (this.invalid) { return 'invalid'; } return null; } // TODO: refactor to signal inputs after Angular update ngOnChanges() { this.m.set(this.mode); } setValue(value) { this.el.focus(); this.el.select(); if (value == null) { this.el.ownerDocument.execCommand('delete'); } else { this.el.ownerDocument.execCommand('insertText', false, this.handlers.stringify()(value)); } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTextfieldBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiTextfieldBase, isStandalone: true, inputs: { readOnly: "readOnly", invalid: "invalid", focusedSetter: ["focused", "focusedSetter"], stateSetter: ["state", "stateSetter"] }, host: { attributes: { "tuiTextfield": "" }, listeners: { "input": "0", "focusin": "0", "focusout": "0" }, properties: { "id": "textfield.id", "readOnly": "readOnly", "class._empty": "value() === \"\"" } }, providers: [tuiAsTextfieldAccessor(TuiTextfieldBase)], usesOnChanges: true, ngImport: i0 }); } } export { TuiTextfieldBase }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTextfieldBase, decorators: [{ type: Directive, args: [{ standalone: true, providers: [tuiAsTextfieldAccessor(TuiTextfieldBase)], host: { tuiTextfield: '', '[id]': 'textfield.id', '[readOnly]': 'readOnly', '[class._empty]': 'value() === ""', '(input)': '0', '(focusin)': '0', '(focusout)': '0', }, }] }], propDecorators: { readOnly: [{ type: Input }], invalid: [{ type: Input }], focusedSetter: [{ type: Input, args: ['focused'] }], stateSetter: [{ type: Input, args: ['state'] }] } }); class TuiTextfieldDirective extends TuiTextfieldBase { static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTextfieldDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiTextfieldDirective, isStandalone: true, selector: "input[tuiTextfield]:not([tuiInputCard]):not([tuiInputExpire]):not([tuiInputCVC])", providers: [ tuiAsTextfieldAccessor(TuiTextfieldDirective), tuiProvide(TuiTextfieldBase, TuiTextfieldDirective), ], usesInheritance: true, hostDirectives: [{ directive: i1.TuiNativeValidator }, { directive: i2.TuiAppearance }], ngImport: i0 }); } } export { TuiTextfieldDirective }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTextfieldDirective, decorators: [{ type: Directive, args: [{ standalone: true, // TODO: Remove :not in v.5 selector: 'input[tuiTextfield]:not([tuiInputCard]):not([tuiInputExpire]):not([tuiInputCVC])', providers: [ tuiAsTextfieldAccessor(TuiTextfieldDirective), tuiProvide(TuiTextfieldBase, TuiTextfieldDirective), ], hostDirectives: [TuiNativeValidator, TuiAppearance], }] }] }); class TuiWithTextfield { static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiWithTextfield, deps: [], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiWithTextfield, isStandalone: true, hostDirectives: [{ directive: TuiTextfieldDirective, inputs: ["invalid", "invalid", "focused", "focused", "readOnly", "readOnly", "state", "state"] }], ngImport: i0 }); } } export { TuiWithTextfield }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiWithTextfield, decorators: [{ type: Directive, args: [{ standalone: true, hostDirectives: [ { directive: TuiTextfieldDirective, inputs: ['invalid', 'focused', 'readOnly', 'state'], }, ], }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dGZpZWxkLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvY29tcG9uZW50cy90ZXh0ZmllbGQvdGV4dGZpZWxkLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFrQixNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3pDLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBQzdFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxRQUFRLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDN0QsT0FBTyxFQUNILGFBQWEsRUFDYixhQUFhLEVBQ2Isa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQixrQkFBa0IsR0FDckIsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5QyxPQUFPLEVBQ0gsa0JBQWtCLEdBRXJCLE1BQU0sMENBQTBDLENBQUM7QUFHbEQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDMUQsT0FBTyxFQUFDLHNCQUFzQixFQUE0QixNQUFNLHNCQUFzQixDQUFDOzs7O0FBRXZGLG9FQUFvRTtBQUNwRSxNQWFhLGdCQUFnQjtJQWI3QjtRQWNJLHVEQUF1RDtRQUN0QyxZQUFPLEdBQUcsTUFBTSxDQUFpQixJQUFJLENBQUMsQ0FBQztRQUVyQyxZQUFPLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBQzlDLE1BQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLE1BQUMsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakMsTUFBQyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDckMsTUFBQyxHQUFHLGtCQUFrQixDQUNyQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsRUFDMUQsRUFBRSxDQUNMLENBQUM7UUFFaUIsT0FBRSxHQUFHLGdCQUFnQixFQUFvQixDQUFDO1FBQzFDLGFBQVEsR0FBd0IsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDM0QsY0FBUyxHQUN4QixNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUczQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBR2pCLFlBQU8sR0FBbUIsSUFBSSxDQUFDO1FBRXRCLFVBQUssR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBK0M3QztJQTdDRyxJQUNXLGFBQWEsQ0FBQyxPQUF1QjtRQUM1QyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFDVyxXQUFXLENBQUMsS0FBaUM7UUFDcEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQVcsSUFBSTtRQUNYLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNmLE9BQU8sVUFBVSxDQUFDO1NBQ3JCO1FBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUssRUFBRTtZQUN4QixPQUFPLE9BQU8sQ0FBQztTQUNsQjtRQUVELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNkLE9BQU8sU0FBUyxDQUFDO1NBQ3BCO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELHVEQUF1RDtJQUNoRCxXQUFXO1FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFTSxRQUFRLENBQUMsS0FBZTtRQUMzQixJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFakIsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1lBQ2YsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQy9DO2FBQU07WUFDSCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQzdCLFlBQVksRUFDWixLQUFLLEVBQ0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FDbkMsQ0FBQztTQUNMO0lBQ0wsQ0FBQzsrR0F0RVEsZ0JBQWdCO21HQUFoQixnQkFBZ0IseVhBWGQsQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDOztTQVc1QyxnQkFBZ0I7NEZBQWhCLGdCQUFnQjtrQkFiNUIsU0FBUzttQkFBQztvQkFDUCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsU0FBUyxFQUFFLENBQUMsc0JBQXNCLGtCQUFrQixDQUFDO29CQUNyRCxJQUFJLEVBQUU7d0JBQ0YsWUFBWSxFQUFFLEVBQUU7d0JBQ2hCLE1BQU0sRUFBRSxjQUFjO3dCQUN0QixZQUFZLEVBQUUsVUFBVTt3QkFDeEIsZ0JBQWdCLEVBQUUsZ0JBQWdCO3dCQUNsQyxTQUFTLEVBQUUsR0FBRzt3QkFDZCxXQUFXLEVBQUUsR0FBRzt3QkFDaEIsWUFBWSxFQUFFLEdBQUc7cUJBQ3BCO2lCQUNKOzhCQW9CVSxRQUFRO3NCQURkLEtBQUs7Z0JBSUMsT0FBTztzQkFEYixLQUFLO2dCQU1LLGFBQWE7c0JBRHZCLEtBQUs7dUJBQUMsU0FBUztnQkFNTCxXQUFXO3NCQURyQixLQUFLO3VCQUFDLE9BQU87O0FBMENsQixNQVdhLHFCQUF5QixTQUFRLGdCQUFtQjsrR0FBcEQscUJBQXFCO21HQUFyQixxQkFBcUIsK0hBTm5CO1lBQ1Asc0JBQXNCLENBQUMscUJBQXFCLENBQUM7WUFDN0MsVUFBVSxDQUFDLGdCQUFnQixFQUFFLHFCQUFxQixDQUFDO1NBQ3REOztTQUdRLHFCQUFxQjs0RkFBckIscUJBQXFCO2tCQVhqQyxTQUFTO21CQUFDO29CQUNQLFVBQVUsRUFBRSxJQUFJO29CQUNoQiwyQkFBMkI7b0JBQzNCLFFBQVEsRUFDSixrRkFBa0Y7b0JBQ3RGLFNBQVMsRUFBRTt3QkFDUCxzQkFBc0IsdUJBQXVCO3dCQUM3QyxVQUFVLENBQUMsZ0JBQWdCLHdCQUF3QjtxQkFDdEQ7b0JBQ0QsY0FBYyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsYUFBYSxDQUFDO2lCQUN0RDs7QUFHRCxNQVNhLGdCQUFnQjsrR0FBaEIsZ0JBQWdCO21HQUFoQixnQkFBZ0Isb0RBWGhCLHFCQUFxQjs7U0FXckIsZ0JBQWdCOzRGQUFoQixnQkFBZ0I7a0JBVDVCLFNBQVM7bUJBQUM7b0JBQ1AsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLGNBQWMsRUFBRTt3QkFDWjs0QkFDSSxTQUFTLEVBQUUscUJBQXFCOzRCQUNoQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUM7eUJBQ3REO3FCQUNKO2lCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtjb21wdXRlZCwgRGlyZWN0aXZlLCBpbmplY3QsIElucHV0LCB0eXBlIE9uQ2hhbmdlcywgc2lnbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TmdDb250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1R1aU5hdGl2ZVZhbGlkYXRvcn0gZnJvbSAnQHRhaWdhLXVpL2Nkay9kaXJlY3RpdmVzL25hdGl2ZS12YWxpZGF0b3InO1xuaW1wb3J0IHt0dWlJbmplY3RFbGVtZW50LCB0dWlWYWx1ZX0gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9kb20nO1xuaW1wb3J0IHt0dWlQcm92aWRlfSBmcm9tICdAdGFpZ2EtdWkvY2RrL3V0aWxzL21pc2NlbGxhbmVvdXMnO1xuaW1wb3J0IHtcbiAgICBUdWlBcHBlYXJhbmNlLFxuICAgIHR1aUFwcGVhcmFuY2UsXG4gICAgdHVpQXBwZWFyYW5jZUZvY3VzLFxuICAgIHR1aUFwcGVhcmFuY2VNb2RlLFxuICAgIHR1aUFwcGVhcmFuY2VTdGF0ZSxcbn0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvZGlyZWN0aXZlcy9hcHBlYXJhbmNlJztcbmltcG9ydCB7XG4gICAgVFVJX0lURU1TX0hBTkRMRVJTLFxuICAgIHR5cGUgVHVpSXRlbXNIYW5kbGVycyxcbn0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvZGlyZWN0aXZlcy9pdGVtcy1oYW5kbGVycyc7XG5pbXBvcnQge3R5cGUgVHVpSW50ZXJhY3RpdmVTdGF0ZX0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvdHlwZXMnO1xuXG5pbXBvcnQge1R1aVRleHRmaWVsZENvbXBvbmVudH0gZnJvbSAnLi90ZXh0ZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7VFVJX1RFWFRGSUVMRF9PUFRJT05TfSBmcm9tICcuL3RleHRmaWVsZC5vcHRpb25zJztcbmltcG9ydCB7dHVpQXNUZXh0ZmllbGRBY2Nlc3NvciwgdHlwZSBUdWlUZXh0ZmllbGRBY2Nlc3Nvcn0gZnJvbSAnLi90ZXh0ZmllbGQtYWNjZXNzb3InO1xuXG4vLyBUT0RPOiBEcm9wIGluIHY1IGFmdGVyIHVwZGF0ZWQgQW5ndWxhciBhbmQgaG9zdERpcmVjdGl2ZXMgaW5oZXJpdFxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBwcm92aWRlcnM6IFt0dWlBc1RleHRmaWVsZEFjY2Vzc29yKFR1aVRleHRmaWVsZEJhc2UpXSxcbiAgICBob3N0OiB7XG4gICAgICAgIHR1aVRleHRmaWVsZDogJycsXG4gICAgICAgICdbaWRdJzogJ3RleHRmaWVsZC5pZCcsXG4gICAgICAgICdbcmVhZE9ubHldJzogJ3JlYWRPbmx5JyxcbiAgICAgICAgJ1tjbGFzcy5fZW1wdHldJzogJ3ZhbHVlKCkgPT09IFwiXCInLFxuICAgICAgICAnKGlucHV0KSc6ICcwJyxcbiAgICAgICAgJyhmb2N1c2luKSc6ICcwJyxcbiAgICAgICAgJyhmb2N1c291dCknOiAnMCcsXG4gICAgfSxcbn0pXG5leHBvcnQgY2xhc3MgVHVpVGV4dGZpZWxkQmFzZTxUPiBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgVHVpVGV4dGZpZWxkQWNjZXNzb3I8VD4ge1xuICAgIC8vIFRPRE86IHJlZmFjdG9yIHRvIHNpZ25hbCBpbnB1dHMgYWZ0ZXIgQW5ndWxhciB1cGRhdGVcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvY3VzZWQgPSBzaWduYWw8Ym9vbGVhbiB8IG51bGw+KG51bGwpO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbnRyb2wgPSBpbmplY3QoTmdDb250cm9sLCB7b3B0aW9uYWw6IHRydWV9KTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYSA9IHR1aUFwcGVhcmFuY2UoaW5qZWN0KFRVSV9URVhURklFTERfT1BUSU9OUykuYXBwZWFyYW5jZSwge30pO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBzID0gdHVpQXBwZWFyYW5jZVN0YXRlKG51bGwsIHt9KTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbSA9IHR1aUFwcGVhcmFuY2VNb2RlKHRoaXMubW9kZSwge30pO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBmID0gdHVpQXBwZWFyYW5jZUZvY3VzKFxuICAgICAgICBjb21wdXRlZCgoKSA9PiB0aGlzLmZvY3VzZWQoKSA/PyB0aGlzLnRleHRmaWVsZC5mb2N1c2VkKCkpLFxuICAgICAgICB7fSxcbiAgICApO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGVsID0gdHVpSW5qZWN0RWxlbWVudDxIVE1MSW5wdXRFbGVtZW50PigpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBoYW5kbGVyczogVHVpSXRlbXNIYW5kbGVyczxUPiA9IGluamVjdChUVUlfSVRFTVNfSEFORExFUlMpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSB0ZXh0ZmllbGQ6IFR1aVRleHRmaWVsZENvbXBvbmVudDxUPiA9XG4gICAgICAgIGluamVjdChUdWlUZXh0ZmllbGRDb21wb25lbnQpO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVhZE9ubHkgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGludmFsaWQ6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcblxuICAgIHB1YmxpYyByZWFkb25seSB2YWx1ZSA9IHR1aVZhbHVlKHRoaXMuZWwpO1xuXG4gICAgQElucHV0KCdmb2N1c2VkJylcbiAgICBwdWJsaWMgc2V0IGZvY3VzZWRTZXR0ZXIoZm9jdXNlZDogYm9vbGVhbiB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkLnNldChmb2N1c2VkKTtcbiAgICB9XG5cbiAgICBASW5wdXQoJ3N0YXRlJylcbiAgICBwdWJsaWMgc2V0IHN0YXRlU2V0dGVyKHN0YXRlOiBUdWlJbnRlcmFjdGl2ZVN0YXRlIHwgbnVsbCkge1xuICAgICAgICB0aGlzLnMuc2V0KHN0YXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1vZGUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICAgICAgICByZXR1cm4gJ3JlYWRvbmx5JztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmludmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3ZhbGlkJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmludmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybiAnaW52YWxpZCc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiByZWZhY3RvciB0byBzaWduYWwgaW5wdXRzIGFmdGVyIEFuZ3VsYXIgdXBkYXRlXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm0uc2V0KHRoaXMubW9kZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFZhbHVlKHZhbHVlOiBUIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVsLmZvY3VzKCk7XG4gICAgICAgIHRoaXMuZWwuc2VsZWN0KCk7XG5cbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuZWwub3duZXJEb2N1bWVudC5leGVjQ29tbWFuZCgnZGVsZXRlJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVsLm93bmVyRG9jdW1lbnQuZXhlY0NvbW1hbmQoXG4gICAgICAgICAgICAgICAgJ2luc2VydFRleHQnLFxuICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlcnMuc3RyaW5naWZ5KCkodmFsdWUpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICAvLyBUT0RPOiBSZW1vdmUgOm5vdCBpbiB2LjVcbiAgICBzZWxlY3RvcjpcbiAgICAgICAgJ2lucHV0W3R1aVRleHRmaWVsZF06bm90KFt0dWlJbnB1dENhcmRdKTpub3QoW3R1aUlucHV0RXhwaXJlXSk6bm90KFt0dWlJbnB1dENWQ10pJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgdHVpQXNUZXh0ZmllbGRBY2Nlc3NvcihUdWlUZXh0ZmllbGREaXJlY3RpdmUpLFxuICAgICAgICB0dWlQcm92aWRlKFR1aVRleHRmaWVsZEJhc2UsIFR1aVRleHRmaWVsZERpcmVjdGl2ZSksXG4gICAgXSxcbiAgICBob3N0RGlyZWN0aXZlczogW1R1aU5hdGl2ZVZhbGlkYXRvciwgVHVpQXBwZWFyYW5jZV0sXG59KVxuZXhwb3J0IGNsYXNzIFR1aVRleHRmaWVsZERpcmVjdGl2ZTxUPiBleHRlbmRzIFR1aVRleHRmaWVsZEJhc2U8VD4ge31cblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBob3N0RGlyZWN0aXZlczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBkaXJlY3RpdmU6IFR1aVRleHRmaWVsZERpcmVjdGl2ZSxcbiAgICAgICAgICAgIGlucHV0czogWydpbnZhbGlkJywgJ2ZvY3VzZWQnLCAncmVhZE9ubHknLCAnc3RhdGUnXSxcbiAgICAgICAgfSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBUdWlXaXRoVGV4dGZpZWxkIHt9XG4iXX0=