UNPKG

@taiga-ui/kit

Version:

Taiga UI Angular main components kit

149 lines 21.9 kB
import { Directive, inject, Input } from '@angular/core'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { tuiAsControl, TuiControl } from '@taiga-ui/cdk/classes'; import { TuiActiveZone } from '@taiga-ui/cdk/directives/active-zone'; import { TuiNativeValidator } from '@taiga-ui/cdk/directives/native-validator'; import { TUI_IS_MOBILE, tuiFallbackValueProvider } from '@taiga-ui/cdk/tokens'; import { tuiGetClipboardDataText, tuiInjectElement } from '@taiga-ui/cdk/utils/dom'; import { tuiDirectiveBinding, tuiSanitizeText } from '@taiga-ui/cdk/utils/miscellaneous'; import { tuiAsTextfieldAccessor, TuiTextfieldBase, TuiTextfieldMultiComponent, } from '@taiga-ui/core/components/textfield'; import { TuiDropdownDirective, TuiDropdownOpen, tuiDropdownOpen, } from '@taiga-ui/core/directives/dropdown'; import { TUI_ITEMS_HANDLERS, } from '@taiga-ui/core/directives/items-handlers'; import { filter } from 'rxjs'; import { TUI_INPUT_CHIP_OPTIONS } from './input-chip.options'; import * as i0 from "@angular/core"; import * as i1 from "@taiga-ui/cdk/directives/native-validator"; import * as i2 from "@taiga-ui/core/components/textfield"; // TODO(v5): remove base component after angular update class TuiInputChipBaseDirective extends TuiControl { constructor() { super(...arguments); this.options = inject(TUI_INPUT_CHIP_OPTIONS); this.mobile = inject(TUI_IS_MOBILE); this.dropdown = inject(TuiDropdownDirective); this.textfield = inject(TuiTextfieldMultiComponent); this.open = tuiDropdownOpen(); this.handlers = inject(TUI_ITEMS_HANDLERS); this.enabled = tuiDirectiveBinding(TuiDropdownOpen, 'tuiDropdownEnabled', this.interactive, {}); this.sub = inject(TuiActiveZone) .tuiActiveZoneChange.pipe(filter((active) => !active && !this.el.matches('select')), takeUntilDestroyed()) .subscribe(() => { this.onEnter(); this.textfield.value.set(''); }); this.separator = this.options.separator; this.unique = this.options.unique; this.el = tuiInjectElement(); } setValue(value) { this.textfield.value.set(''); this.onChange(this.unique ? Array.from(new Set(value.reverse())).reverse() : value); } onEnter(rawValue = this.textfield.value()) { const value = rawValue.trim(); const items = this.separator ? value.split(this.separator) : [value]; const valid = items .map((item) => tuiSanitizeText(item)) .filter((item) => item && !this.handlers.disabledItemHandler()(item) && this.handlers.stringify()(item)); if (!value || !valid.length) { return; } this.setValue([...this.value(), ...valid]); this.scrollTo(); } onInput() { this.open.set(!!this.dropdown.content); if (this.separator && this.textfield.value().match(this.separator)) { this.onEnter(); } else { this.scrollTo(); } } onPaste(event) { const value = 'dataTransfer' in event ? event.dataTransfer?.getData('text/plain') || '' : tuiGetClipboardDataText(event); if (this.textfield.input?.nativeElement) { this.textfield.input.nativeElement.value = value; } this.onEnter(value); } onBackspace(key) { // (keydown.backspace) doesn't emit event on empty input in ios safari if (key === 'Backspace' && !this.textfield.value() && this.interactive()) { if (this.mobile || !this.textfield.item) { this.onChange(this.value().slice(0, -1)); } else { this.el.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowLeft', bubbles: true, })); } } } scrollTo() { const sign = this.textfield.el.matches('[dir="rtl"] :scope') ? -1 : 1; // Allow change detection to run and add new tag to DOM setTimeout(() => { this.textfield.el.scrollTo({ left: sign * Number.MAX_SAFE_INTEGER, top: Number.MAX_SAFE_INTEGER, }); }, 100); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiInputChipBaseDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiInputChipBaseDirective, isStandalone: true, inputs: { separator: "separator", unique: "unique" }, host: { attributes: { "enterkeyhint": "enter" }, listeners: { "keydown.enter.prevent": "onEnter()", "keydown.zoneless": "onBackspace($event.key)", "input": "onInput()", "paste.prevent": "onPaste($event)", "drop.prevent": "onPaste($event)" }, properties: { "disabled": "disabled()" } }, usesInheritance: true, ngImport: i0 }); } } export { TuiInputChipBaseDirective }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiInputChipBaseDirective, decorators: [{ type: Directive, args: [{ standalone: true, host: { enterkeyhint: 'enter', '[disabled]': 'disabled()', '(keydown.enter.prevent)': 'onEnter()', '(keydown.zoneless)': 'onBackspace($event.key)', '(input)': 'onInput()', '(paste.prevent)': 'onPaste($event)', '(drop.prevent)': 'onPaste($event)', }, }] }], propDecorators: { separator: [{ type: Input }], unique: [{ type: Input }] } }); class TuiInputChipDirective extends TuiInputChipBaseDirective { static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiInputChipDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiInputChipDirective, isStandalone: true, selector: "input[tuiInputChip]", providers: [ tuiAsControl(TuiInputChipDirective), tuiFallbackValueProvider([]), tuiAsTextfieldAccessor(TuiInputChipDirective), ], usesInheritance: true, hostDirectives: [{ directive: i1.TuiNativeValidator }, { directive: i2.TuiTextfieldBase, inputs: ["invalid", "invalid", "focused", "focused", "readOnly", "readOnly", "state", "state"] }], ngImport: i0 }); } } export { TuiInputChipDirective }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiInputChipDirective, decorators: [{ type: Directive, args: [{ standalone: true, selector: 'input[tuiInputChip]', providers: [ tuiAsControl(TuiInputChipDirective), tuiFallbackValueProvider([]), tuiAsTextfieldAccessor(TuiInputChipDirective), ], hostDirectives: [ TuiNativeValidator, { directive: TuiTextfieldBase, inputs: ['invalid', 'focused', 'readOnly', 'state'], }, ], }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtY2hpcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9raXQvY29tcG9uZW50cy9pbnB1dC1jaGlwL2lucHV0LWNoaXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsWUFBWSxFQUFFLFVBQVUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQy9ELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUM3RSxPQUFPLEVBQUMsYUFBYSxFQUFFLHdCQUF3QixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDN0UsT0FBTyxFQUFDLHVCQUF1QixFQUFFLGdCQUFnQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDbEYsT0FBTyxFQUFDLG1CQUFtQixFQUFFLGVBQWUsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZGLE9BQU8sRUFDSCxzQkFBc0IsRUFFdEIsZ0JBQWdCLEVBQ2hCLDBCQUEwQixHQUM3QixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFDSCxvQkFBb0IsRUFDcEIsZUFBZSxFQUNmLGVBQWUsR0FDbEIsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1QyxPQUFPLEVBQ0gsa0JBQWtCLEdBRXJCLE1BQU0sMENBQTBDLENBQUM7QUFDbEQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU1QixPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQzs7OztBQUU1RCx1REFBdUQ7QUFDdkQsTUFZYSx5QkFDVCxTQUFRLFVBQWU7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QUMsRUFBRSxDQUFDO1lBQzVCLHNCQUFzQixDQUFDLHFCQUFxQixDQUFDO1NBQ2hEOztTQVNRLHFCQUFxQjs0RkFBckIscUJBQXFCO2tCQWhCakMsU0FBUzttQkFBQztvQkFDUCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsU0FBUyxFQUFFO3dCQUNQLFlBQVksdUJBQXVCO3dCQUNuQyx3QkFBd0IsQ0FBQyxFQUFFLENBQUM7d0JBQzVCLHNCQUFzQix1QkFBdUI7cUJBQ2hEO29CQUNELGNBQWMsRUFBRTt3QkFDWixrQkFBa0I7d0JBQ2xCOzRCQUNJLFNBQVMsRUFBRSxnQkFBZ0I7NEJBQzNCLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQzt5QkFDdEQ7cUJBQ0o7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZSwgaW5qZWN0LCBJbnB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHt0dWlBc0NvbnRyb2wsIFR1aUNvbnRyb2x9IGZyb20gJ0B0YWlnYS11aS9jZGsvY2xhc3Nlcyc7XG5pbXBvcnQge1R1aUFjdGl2ZVpvbmV9IGZyb20gJ0B0YWlnYS11aS9jZGsvZGlyZWN0aXZlcy9hY3RpdmUtem9uZSc7XG5pbXBvcnQge1R1aU5hdGl2ZVZhbGlkYXRvcn0gZnJvbSAnQHRhaWdhLXVpL2Nkay9kaXJlY3RpdmVzL25hdGl2ZS12YWxpZGF0b3InO1xuaW1wb3J0IHtUVUlfSVNfTU9CSUxFLCB0dWlGYWxsYmFja1ZhbHVlUHJvdmlkZXJ9IGZyb20gJ0B0YWlnYS11aS9jZGsvdG9rZW5zJztcbmltcG9ydCB7dHVpR2V0Q2xpcGJvYXJkRGF0YVRleHQsIHR1aUluamVjdEVsZW1lbnR9IGZyb20gJ0B0YWlnYS11aS9jZGsvdXRpbHMvZG9tJztcbmltcG9ydCB7dHVpRGlyZWN0aXZlQmluZGluZywgdHVpU2FuaXRpemVUZXh0fSBmcm9tICdAdGFpZ2EtdWkvY2RrL3V0aWxzL21pc2NlbGxhbmVvdXMnO1xuaW1wb3J0IHtcbiAgICB0dWlBc1RleHRmaWVsZEFjY2Vzc29yLFxuICAgIHR5cGUgVHVpVGV4dGZpZWxkQWNjZXNzb3IsXG4gICAgVHVpVGV4dGZpZWxkQmFzZSxcbiAgICBUdWlUZXh0ZmllbGRNdWx0aUNvbXBvbmVudCxcbn0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvY29tcG9uZW50cy90ZXh0ZmllbGQnO1xuaW1wb3J0IHtcbiAgICBUdWlEcm9wZG93bkRpcmVjdGl2ZSxcbiAgICBUdWlEcm9wZG93bk9wZW4sXG4gICAgdHVpRHJvcGRvd25PcGVuLFxufSBmcm9tICdAdGFpZ2EtdWkvY29yZS9kaXJlY3RpdmVzL2Ryb3Bkb3duJztcbmltcG9ydCB7XG4gICAgVFVJX0lURU1TX0hBTkRMRVJTLFxuICAgIHR5cGUgVHVpSXRlbXNIYW5kbGVycyxcbn0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvZGlyZWN0aXZlcy9pdGVtcy1oYW5kbGVycyc7XG5pbXBvcnQge2ZpbHRlcn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7VFVJX0lOUFVUX0NISVBfT1BUSU9OU30gZnJvbSAnLi9pbnB1dC1jaGlwLm9wdGlvbnMnO1xuXG4vLyBUT0RPKHY1KTogcmVtb3ZlIGJhc2UgY29tcG9uZW50IGFmdGVyIGFuZ3VsYXIgdXBkYXRlXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgZW50ZXJrZXloaW50OiAnZW50ZXInLFxuICAgICAgICAnW2Rpc2FibGVkXSc6ICdkaXNhYmxlZCgpJyxcbiAgICAgICAgJyhrZXlkb3duLmVudGVyLnByZXZlbnQpJzogJ29uRW50ZXIoKScsXG4gICAgICAgICcoa2V5ZG93bi56b25lbGVzcyknOiAnb25CYWNrc3BhY2UoJGV2ZW50LmtleSknLFxuICAgICAgICAnKGlucHV0KSc6ICdvbklucHV0KCknLFxuICAgICAgICAnKHBhc3RlLnByZXZlbnQpJzogJ29uUGFzdGUoJGV2ZW50KScsXG4gICAgICAgICcoZHJvcC5wcmV2ZW50KSc6ICdvblBhc3RlKCRldmVudCknLFxuICAgIH0sXG59KVxuZXhwb3J0IGNsYXNzIFR1aUlucHV0Q2hpcEJhc2VEaXJlY3RpdmU8VD5cbiAgICBleHRlbmRzIFR1aUNvbnRyb2w8VFtdPlxuICAgIGltcGxlbWVudHMgVHVpVGV4dGZpZWxkQWNjZXNzb3I8VFtdPlxue1xuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9ucyA9IGluamVjdChUVUlfSU5QVVRfQ0hJUF9PUFRJT05TKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1vYmlsZSA9IGluamVjdChUVUlfSVNfTU9CSUxFKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRyb3Bkb3duID0gaW5qZWN0KFR1aURyb3Bkb3duRGlyZWN0aXZlKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSB0ZXh0ZmllbGQgPSBpbmplY3QoVHVpVGV4dGZpZWxkTXVsdGlDb21wb25lbnQpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBvcGVuID0gdHVpRHJvcGRvd25PcGVuKCk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGhhbmRsZXJzOiBUdWlJdGVtc0hhbmRsZXJzPFQ+ID0gaW5qZWN0KFRVSV9JVEVNU19IQU5ETEVSUyk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGVuYWJsZWQgPSB0dWlEaXJlY3RpdmVCaW5kaW5nKFxuICAgICAgICBUdWlEcm9wZG93bk9wZW4sXG4gICAgICAgICd0dWlEcm9wZG93bkVuYWJsZWQnLFxuICAgICAgICB0aGlzLmludGVyYWN0aXZlLFxuICAgICAgICB7fSxcbiAgICApO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHN1YiA9IGluamVjdChUdWlBY3RpdmVab25lKVxuICAgICAgICAudHVpQWN0aXZlWm9uZUNoYW5nZS5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKChhY3RpdmUpID0+ICFhY3RpdmUgJiYgIXRoaXMuZWwubWF0Y2hlcygnc2VsZWN0JykpLFxuICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uRW50ZXIoKTtcbiAgICAgICAgICAgIHRoaXMudGV4dGZpZWxkLnZhbHVlLnNldCgnJyk7XG4gICAgICAgIH0pO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2VwYXJhdG9yID0gdGhpcy5vcHRpb25zLnNlcGFyYXRvcjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHVuaXF1ZSA9IHRoaXMub3B0aW9ucy51bmlxdWU7XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgZWwgPSB0dWlJbmplY3RFbGVtZW50PEhUTUxJbnB1dEVsZW1lbnQ+KCk7XG5cbiAgICBwdWJsaWMgc2V0VmFsdWUodmFsdWU6IFRbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLnRleHRmaWVsZC52YWx1ZS5zZXQoJycpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKFxuICAgICAgICAgICAgdGhpcy51bmlxdWUgPyBBcnJheS5mcm9tKG5ldyBTZXQodmFsdWUucmV2ZXJzZSgpKSkucmV2ZXJzZSgpIDogdmFsdWUsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uRW50ZXIocmF3VmFsdWUgPSB0aGlzLnRleHRmaWVsZC52YWx1ZSgpKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcmF3VmFsdWUudHJpbSgpO1xuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuc2VwYXJhdG9yID8gdmFsdWUuc3BsaXQodGhpcy5zZXBhcmF0b3IpIDogW3ZhbHVlXTtcblxuICAgICAgICBjb25zdCB2YWxpZCA9IGl0ZW1zXG4gICAgICAgICAgICAubWFwKChpdGVtKSA9PiB0dWlTYW5pdGl6ZVRleHQoaXRlbSkgYXMgVClcbiAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKGl0ZW0pID0+XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0gJiZcbiAgICAgICAgICAgICAgICAgICAgIXRoaXMuaGFuZGxlcnMuZGlzYWJsZWRJdGVtSGFuZGxlcigpKGl0ZW0pICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlcnMuc3RyaW5naWZ5KCkoaXRlbSksXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIGlmICghdmFsdWUgfHwgIXZhbGlkLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRWYWx1ZShbLi4udGhpcy52YWx1ZSgpLCAuLi52YWxpZF0pO1xuICAgICAgICB0aGlzLnNjcm9sbFRvKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uSW5wdXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMub3Blbi5zZXQoISF0aGlzLmRyb3Bkb3duLmNvbnRlbnQpO1xuXG4gICAgICAgIGlmICh0aGlzLnNlcGFyYXRvciAmJiB0aGlzLnRleHRmaWVsZC52YWx1ZSgpLm1hdGNoKHRoaXMuc2VwYXJhdG9yKSkge1xuICAgICAgICAgICAgdGhpcy5vbkVudGVyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQgfCBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPVxuICAgICAgICAgICAgJ2RhdGFUcmFuc2ZlcicgaW4gZXZlbnRcbiAgICAgICAgICAgICAgICA/IGV2ZW50LmRhdGFUcmFuc2Zlcj8uZ2V0RGF0YSgndGV4dC9wbGFpbicpIHx8ICcnXG4gICAgICAgICAgICAgICAgOiB0dWlHZXRDbGlwYm9hcmREYXRhVGV4dChldmVudCk7XG5cbiAgICAgICAgaWYgKHRoaXMudGV4dGZpZWxkLmlucHV0Py5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnRleHRmaWVsZC5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uRW50ZXIodmFsdWUpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbkJhY2tzcGFjZShrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICAvLyAoa2V5ZG93bi5iYWNrc3BhY2UpIGRvZXNuJ3QgZW1pdCBldmVudCBvbiBlbXB0eSBpbnB1dCBpbiBpb3Mgc2FmYXJpXG4gICAgICAgIGlmIChrZXkgPT09ICdCYWNrc3BhY2UnICYmICF0aGlzLnRleHRmaWVsZC52YWx1ZSgpICYmIHRoaXMuaW50ZXJhY3RpdmUoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMubW9iaWxlIHx8ICF0aGlzLnRleHRmaWVsZC5pdGVtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKCkuc2xpY2UoMCwgLTEpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICAgICAgICBuZXcgS2V5Ym9hcmRFdmVudCgna2V5ZG93bicsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ0Fycm93TGVmdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNjcm9sbFRvKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzaWduID0gdGhpcy50ZXh0ZmllbGQuZWwubWF0Y2hlcygnW2Rpcj1cInJ0bFwiXSA6c2NvcGUnKSA/IC0xIDogMTtcblxuICAgICAgICAvLyBBbGxvdyBjaGFuZ2UgZGV0ZWN0aW9uIHRvIHJ1biBhbmQgYWRkIG5ldyB0YWcgdG8gRE9NXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50ZXh0ZmllbGQuZWwuc2Nyb2xsVG8oe1xuICAgICAgICAgICAgICAgIGxlZnQ6IHNpZ24gKiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcbiAgICAgICAgICAgICAgICB0b3A6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIDEwMCk7XG4gICAgfVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnaW5wdXRbdHVpSW5wdXRDaGlwXScsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHR1aUFzQ29udHJvbChUdWlJbnB1dENoaXBEaXJlY3RpdmUpLFxuICAgICAgICB0dWlGYWxsYmFja1ZhbHVlUHJvdmlkZXIoW10pLFxuICAgICAgICB0dWlBc1RleHRmaWVsZEFjY2Vzc29yKFR1aUlucHV0Q2hpcERpcmVjdGl2ZSksXG4gICAgXSxcbiAgICBob3N0RGlyZWN0aXZlczogW1xuICAgICAgICBUdWlOYXRpdmVWYWxpZGF0b3IsXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZTogVHVpVGV4dGZpZWxkQmFzZSxcbiAgICAgICAgICAgIGlucHV0czogWydpbnZhbGlkJywgJ2ZvY3VzZWQnLCAncmVhZE9ubHknLCAnc3RhdGUnXSxcbiAgICAgICAgfSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBUdWlJbnB1dENoaXBEaXJlY3RpdmU8VD4gZXh0ZW5kcyBUdWlJbnB1dENoaXBCYXNlRGlyZWN0aXZlPFQ+IHt9XG4iXX0=