UNPKG

@blox/material

Version:

Material Components for Angular

166 lines 19.3 kB
import { ContentChildren, Directive, ElementRef, HostBinding, Input, Renderer2 } from '@angular/core'; import { MDCFadingTabIndicatorFoundation, MDCSlidingTabIndicatorFoundation } from '@material/tab-indicator'; import { takeUntil } from 'rxjs/operators'; import { Subject } from 'rxjs'; /** * Child directive for an `mdcTabIndicator`. Must be present, and can be assigned * the value `underline` (default), or `icon`, to set the type of indicator. */ export class MdcTabIndicatorContentDirective { constructor(_root) { this._root = _root; /** @internal */ this._cls = true; /** @internal */ this._type = 'underline'; } /** * By default the indicator is represented as an underline. Set this value to * `icon` to have it represented as an icon. * You can use SVG, or font icon libraries to set the content icon. */ get mdcTabIndicatorContent() { return this._type; } set mdcTabIndicatorContent(value) { this._type = value === 'icon' ? value : 'underline'; } get _underline() { return this._type === 'underline'; } get _icon() { return this._type === 'icon'; } } MdcTabIndicatorContentDirective.decorators = [ { type: Directive, args: [{ selector: '[mdcTabIndicatorContent]' },] } ]; MdcTabIndicatorContentDirective.ctorParameters = () => [ { type: ElementRef } ]; MdcTabIndicatorContentDirective.propDecorators = { _cls: [{ type: HostBinding, args: ['class.mdc-tab-indicator__content',] }], mdcTabIndicatorContent: [{ type: Input }], _underline: [{ type: HostBinding, args: ['class.mdc-tab-indicator__content--underline',] }], _icon: [{ type: HostBinding, args: ['class.mdc-tab-indicator__content--icon',] }] }; /** * Directive for the content (label and optional icon of the tab). * This directive must be used as a child of an `mdcTab`, or `mdcTabRouter`. */ export class MdcTabIndicatorDirective { constructor(rndr, root) { this.rndr = rndr; this.root = root; /** @internal */ this._cls = true; this.onDestroy$ = new Subject(); /** @internal */ this._type = 'slide'; this.active = false; this.mdcAdapter = { addClass: (className) => { this.rndr.addClass(this.root.nativeElement, className); }, removeClass: (className) => { this.rndr.removeClass(this.root.nativeElement, className); }, computeContentClientRect: () => this._content._root.nativeElement.getBoundingClientRect(), setContentStyleProperty: (name, value) => this.rndr.setStyle(this._content._root.nativeElement, name, value) }; this.foundation = null; } ngAfterContentInit() { if (this._content) { this.initFoundation(); } this._contents.changes.pipe(takeUntil(this.onDestroy$)).subscribe(() => { this.destroyFoundation(); if (this._content) this.initFoundation(); }); } ngOnDestroy() { this.onDestroy$.next(); this.onDestroy$.complete(); this.destroyFoundation(); } destroyFoundation() { let destroy = this.foundation != null; if (destroy) { this.foundation.destroy(); this.mdcAdapter.removeClass('mdc-tab-indicator--active'); } this.foundation = null; return destroy; } initFoundation() { this.foundation = this._type === 'fade' ? new MDCFadingTabIndicatorFoundation(this.mdcAdapter) : new MDCSlidingTabIndicatorFoundation(this.mdcAdapter); this.foundation.init(); if (this.active) { let clientRect = typeof this.active === 'boolean' ? undefined : this.active; this.foundation.activate(clientRect); } } /** * By default the indicator is a sliding indicator: when another tab is activated, the indicator * animates a slide to the new tab. Set this property `fade` to have a fading animation * instead. */ get mdcTabIndicator() { return this._type; } set mdcTabIndicator(value) { let newValue = value === 'fade' ? value : 'slide'; if (newValue !== this._type) { this._type = newValue; if (this.destroyFoundation()) this.initFoundation(); } } /** @internal */ activate(previousIndicatorClientRect) { this.active = previousIndicatorClientRect || true; if (this.foundation) this.foundation.activate(previousIndicatorClientRect); } /** @internal */ deactivate() { this.active = false; if (this.foundation) this.foundation.deactivate(); } /** @internal */ get _slide() { return this._type === 'fade'; } get _content() { return this._contents && this._contents.length > 0 ? this._contents.first : null; } /** @internal */ _computeContentClientRect() { var _a; return (_a = this.foundation) === null || _a === void 0 ? void 0 : _a.computeContentClientRect(); } } MdcTabIndicatorDirective.decorators = [ { type: Directive, args: [{ selector: '[mdcTabIndicator]' },] } ]; MdcTabIndicatorDirective.ctorParameters = () => [ { type: Renderer2 }, { type: ElementRef } ]; MdcTabIndicatorDirective.propDecorators = { _cls: [{ type: HostBinding, args: ['class.mdc-tab-indicator',] }], _contents: [{ type: ContentChildren, args: [MdcTabIndicatorContentDirective,] }], mdcTabIndicator: [{ type: Input }], _slide: [{ type: HostBinding, args: ['class.mdc-tab-indicator--fade',] }] }; export const TAB_INDICATOR_DIRECTIVES = [MdcTabIndicatorContentDirective, MdcTabIndicatorDirective]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWRjLnRhYi5pbmRpY2F0b3IuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdGFiL21kYy50YWIuaW5kaWNhdG9yLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLGVBQWUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUM3RCxXQUFXLEVBQUUsS0FBSyxFQUFhLFNBQVMsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQTZCLCtCQUErQixFQUFFLGdDQUFnQyxFQUEwQixNQUFNLHlCQUF5QixDQUFDO0FBQy9KLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9COzs7R0FHRztBQUlILE1BQU0sT0FBTywrQkFBK0I7SUFNeEMsWUFBbUIsS0FBaUI7UUFBakIsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUxwQyxnQkFBZ0I7UUFDMEMsU0FBSSxHQUFHLElBQUksQ0FBQztRQUN0RSxnQkFBZ0I7UUFDaEIsVUFBSyxHQUF5QixXQUFXLENBQUM7SUFFSCxDQUFDO0lBRXpDOzs7O1FBSUk7SUFDSCxJQUFhLHNCQUFzQjtRQUMvQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQUksc0JBQXNCLENBQUMsS0FBMkI7UUFDbEQsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQTtJQUN2RCxDQUFDO0lBSUQsSUFBZ0UsVUFBVTtRQUN0RSxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssV0FBVyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUEyRCxLQUFLO1FBQzVELE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxNQUFNLENBQUM7SUFDakMsQ0FBQzs7O1lBaENKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsMEJBQTBCO2FBQ3ZDOzs7WUFac0QsVUFBVTs7O21CQWU1RCxXQUFXLFNBQUMsa0NBQWtDO3FDQVc5QyxLQUFLO3lCQVVMLFdBQVcsU0FBQyw2Q0FBNkM7b0JBSXpELFdBQVcsU0FBQyx3Q0FBd0M7O0FBS3pEOzs7R0FHRztBQUlILE1BQU0sT0FBTyx3QkFBd0I7SUFzQmpDLFlBQW9CLElBQWUsRUFBVSxJQUFnQjtRQUF6QyxTQUFJLEdBQUosSUFBSSxDQUFXO1FBQVUsU0FBSSxHQUFKLElBQUksQ0FBWTtRQXJCN0QsZ0JBQWdCO1FBQ2lDLFNBQUksR0FBRyxJQUFJLENBQUM7UUFDckQsZUFBVSxHQUFpQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBR2pELGdCQUFnQjtRQUNoQixVQUFLLEdBQXFCLE9BQU8sQ0FBQztRQUMxQixXQUFNLEdBQXlCLEtBQUssQ0FBQztRQUVyQyxlQUFVLEdBQTJCO1lBQ3pDLFFBQVEsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUMzRCxDQUFDO1lBQ0QsV0FBVyxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQzlELENBQUM7WUFDRCx3QkFBd0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUU7WUFDMUYsdUJBQXVCLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQztTQUNoSCxDQUFDO1FBQ00sZUFBVSxHQUFxQyxJQUFJLENBQUM7SUFFSSxDQUFDO0lBRWpFLGtCQUFrQjtRQUNkLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNmLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN6QjtRQUNELElBQUksQ0FBQyxTQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNwRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QixJQUFJLElBQUksQ0FBQyxRQUFRO2dCQUNiLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbkQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVPLGlCQUFpQjtRQUNyQixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQztRQUN0QyxJQUFJLE9BQU8sRUFBRTtZQUNULElBQUksQ0FBQyxVQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsMkJBQTJCLENBQUMsQ0FBQztTQUM1RDtRQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFFTyxjQUFjO1FBQ2xCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssS0FBSyxNQUFNLENBQUMsQ0FBQztZQUNyQyxJQUFJLCtCQUErQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ3RELElBQUksZ0NBQWdDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2IsSUFBSSxVQUFVLEdBQUcsT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzVFLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3hDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFhLGVBQWU7UUFDeEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUFJLGVBQWUsQ0FBQyxLQUF1QjtRQUN2QyxJQUFJLFFBQVEsR0FBcUIsS0FBSyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUE7UUFDbkUsSUFBSSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssRUFBRTtZQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztZQUN0QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDeEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQzdCO0lBQ0wsQ0FBQztJQUlELGdCQUFnQjtJQUNoQixRQUFRLENBQUMsMkJBQW1EO1FBQ3hELElBQUksQ0FBQyxNQUFNLEdBQUcsMkJBQTJCLElBQUksSUFBSSxDQUFDO1FBQ2xELElBQUksSUFBSSxDQUFDLFVBQVU7WUFDZixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxnQkFBZ0I7SUFDaEIsVUFBVTtRQUNOLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksSUFBSSxDQUFDLFVBQVU7WUFDZixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxnQkFBZ0I7SUFDaEIsSUFBa0QsTUFBTTtRQUNwRCxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFZLFFBQVE7UUFDaEIsT0FBTyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNyRixDQUFDO0lBRUQsZ0JBQWdCO0lBQ2hCLHlCQUF5Qjs7UUFDckIsYUFBTyxJQUFJLENBQUMsVUFBVSwwQ0FBRSx3QkFBd0IsR0FBRztJQUN2RCxDQUFDOzs7WUE5R0osU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxtQkFBbUI7YUFDaEM7OztZQWxEa0MsU0FBUztZQURXLFVBQVU7OzttQkFzRDVELFdBQVcsU0FBQyx5QkFBeUI7d0JBR3JDLGVBQWUsU0FBQywrQkFBK0I7OEJBNkQvQyxLQUFLO3FCQThCTCxXQUFXLFNBQUMsK0JBQStCOztBQWNoRCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLCtCQUErQixFQUFFLHdCQUF3QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBDb250ZW50Q2hpbGRyZW4sIERpcmVjdGl2ZSwgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZywgSW5wdXQsIE9uRGVzdHJveSwgUmVuZGVyZXIyLCBRdWVyeUxpc3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1EQ1RhYkluZGljYXRvckZvdW5kYXRpb24sIE1EQ0ZhZGluZ1RhYkluZGljYXRvckZvdW5kYXRpb24sIE1EQ1NsaWRpbmdUYWJJbmRpY2F0b3JGb3VuZGF0aW9uLCBNRENUYWJJbmRpY2F0b3JBZGFwdGVyIH0gZnJvbSAnQG1hdGVyaWFsL3RhYi1pbmRpY2F0b3InO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIENoaWxkIGRpcmVjdGl2ZSBmb3IgYW4gYG1kY1RhYkluZGljYXRvcmAuIE11c3QgYmUgcHJlc2VudCwgYW5kIGNhbiBiZSBhc3NpZ25lZFxuICogdGhlIHZhbHVlIGB1bmRlcmxpbmVgIChkZWZhdWx0KSwgb3IgYGljb25gLCB0byBzZXQgdGhlIHR5cGUgb2YgaW5kaWNhdG9yLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1ttZGNUYWJJbmRpY2F0b3JDb250ZW50XSdcbn0pXG5leHBvcnQgY2xhc3MgTWRjVGFiSW5kaWNhdG9yQ29udGVudERpcmVjdGl2ZSB7XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQnKSByZWFkb25seSBfY2xzID0gdHJ1ZTtcbiAgICAvKiogQGludGVybmFsICovXG4gICAgX3R5cGU6ICd1bmRlcmxpbmUnIHwgJ2ljb24nID0gJ3VuZGVybGluZSc7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgX3Jvb3Q6IEVsZW1lbnRSZWYpIHt9XG5cbiAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQgdGhlIGluZGljYXRvciBpcyByZXByZXNlbnRlZCBhcyBhbiB1bmRlcmxpbmUuIFNldCB0aGlzIHZhbHVlIHRvXG4gICAgICogYGljb25gIHRvIGhhdmUgaXQgcmVwcmVzZW50ZWQgYXMgYW4gaWNvbi5cbiAgICAgKiBZb3UgY2FuIHVzZSBTVkcsIG9yIGZvbnQgaWNvbiBsaWJyYXJpZXMgdG8gc2V0IHRoZSBjb250ZW50IGljb24uXG4gICAgICovXG4gICAgQElucHV0KCkgZ2V0IG1kY1RhYkluZGljYXRvckNvbnRlbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuICAgIH1cblxuICAgIHNldCBtZGNUYWJJbmRpY2F0b3JDb250ZW50KHZhbHVlOiAndW5kZXJsaW5lJyB8ICdpY29uJykge1xuICAgICAgICB0aGlzLl90eXBlID0gdmFsdWUgPT09ICdpY29uJyA/IHZhbHVlIDogJ3VuZGVybGluZSdcbiAgICB9XG5cbiAgICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbWRjVGFiSW5kaWNhdG9yQ29udGVudDogJ3VuZGVybGluZScgfCAnaWNvbicgfCAnJztcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZScpIGdldCBfdW5kZXJsaW5lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZSA9PT0gJ3VuZGVybGluZSc7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudC0taWNvbicpIGdldCBfaWNvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGUgPT09ICdpY29uJztcbiAgICB9XG59XG5cbi8qKlxuICogRGlyZWN0aXZlIGZvciB0aGUgY29udGVudCAobGFiZWwgYW5kIG9wdGlvbmFsIGljb24gb2YgdGhlIHRhYikuXG4gKiBUaGlzIGRpcmVjdGl2ZSBtdXN0IGJlIHVzZWQgYXMgYSBjaGlsZCBvZiBhbiBgbWRjVGFiYCwgb3IgYG1kY1RhYlJvdXRlcmAuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW21kY1RhYkluZGljYXRvcl0nXG59KVxuZXhwb3J0IGNsYXNzIE1kY1RhYkluZGljYXRvckRpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MubWRjLXRhYi1pbmRpY2F0b3InKSByZWFkb25seSBfY2xzID0gdHJ1ZTtcbiAgICBwcml2YXRlIG9uRGVzdHJveSQ6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oTWRjVGFiSW5kaWNhdG9yQ29udGVudERpcmVjdGl2ZSkgX2NvbnRlbnRzPzogUXVlcnlMaXN0PE1kY1RhYkluZGljYXRvckNvbnRlbnREaXJlY3RpdmU+O1xuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBfdHlwZTogJ3NsaWRlJyB8ICdmYWRlJyA9ICdzbGlkZSc7XG4gICAgcHJpdmF0ZSBhY3RpdmU6IENsaWVudFJlY3QgfCBib29sZWFuID0gZmFsc2U7XG4gICAgXG4gICAgcHJpdmF0ZSBtZGNBZGFwdGVyOiBNRENUYWJJbmRpY2F0b3JBZGFwdGVyID0ge1xuICAgICAgICBhZGRDbGFzczogKGNsYXNzTmFtZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ybmRyLmFkZENsYXNzKHRoaXMucm9vdC5uYXRpdmVFbGVtZW50LCBjbGFzc05hbWUpO1xuICAgICAgICB9LFxuICAgICAgICByZW1vdmVDbGFzczogKGNsYXNzTmFtZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ybmRyLnJlbW92ZUNsYXNzKHRoaXMucm9vdC5uYXRpdmVFbGVtZW50LCBjbGFzc05hbWUpO1xuICAgICAgICB9LFxuICAgICAgICBjb21wdXRlQ29udGVudENsaWVudFJlY3Q6ICgpID0+IHRoaXMuX2NvbnRlbnQhLl9yb290Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICAgIHNldENvbnRlbnRTdHlsZVByb3BlcnR5OiAobmFtZSwgdmFsdWUpID0+IHRoaXMucm5kci5zZXRTdHlsZSh0aGlzLl9jb250ZW50IS5fcm9vdC5uYXRpdmVFbGVtZW50LCBuYW1lLCB2YWx1ZSlcbiAgICB9O1xuICAgIHByaXZhdGUgZm91bmRhdGlvbjogTURDVGFiSW5kaWNhdG9yRm91bmRhdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBybmRyOiBSZW5kZXJlcjIsIHByaXZhdGUgcm9vdDogRWxlbWVudFJlZikge31cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbnRlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdEZvdW5kYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jb250ZW50cyEuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95Rm91bmRhdGlvbigpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NvbnRlbnQpXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0Rm91bmRhdGlvbigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5vbkRlc3Ryb3kkLm5leHQoKTsgdGhpcy5vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuZGVzdHJveUZvdW5kYXRpb24oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc3Ryb3lGb3VuZGF0aW9uKCkge1xuICAgICAgICBsZXQgZGVzdHJveSA9IHRoaXMuZm91bmRhdGlvbiAhPSBudWxsO1xuICAgICAgICBpZiAoZGVzdHJveSkge1xuICAgICAgICAgICAgdGhpcy5mb3VuZGF0aW9uIS5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLm1kY0FkYXB0ZXIucmVtb3ZlQ2xhc3MoJ21kYy10YWItaW5kaWNhdG9yLS1hY3RpdmUnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvdW5kYXRpb24gPSBudWxsO1xuICAgICAgICByZXR1cm4gZGVzdHJveTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRGb3VuZGF0aW9uKCkge1xuICAgICAgICB0aGlzLmZvdW5kYXRpb24gPSB0aGlzLl90eXBlID09PSAnZmFkZScgP1xuICAgICAgICAgICAgbmV3IE1EQ0ZhZGluZ1RhYkluZGljYXRvckZvdW5kYXRpb24odGhpcy5tZGNBZGFwdGVyKSA6XG4gICAgICAgICAgICBuZXcgTURDU2xpZGluZ1RhYkluZGljYXRvckZvdW5kYXRpb24odGhpcy5tZGNBZGFwdGVyKTtcbiAgICAgICAgdGhpcy5mb3VuZGF0aW9uLmluaXQoKTtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlKSB7XG4gICAgICAgICAgICBsZXQgY2xpZW50UmVjdCA9IHR5cGVvZiB0aGlzLmFjdGl2ZSA9PT0gJ2Jvb2xlYW4nID8gdW5kZWZpbmVkIDogdGhpcy5hY3RpdmU7XG4gICAgICAgICAgICB0aGlzLmZvdW5kYXRpb24uYWN0aXZhdGUoY2xpZW50UmVjdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0IHRoZSBpbmRpY2F0b3IgaXMgYSBzbGlkaW5nIGluZGljYXRvcjogd2hlbiBhbm90aGVyIHRhYiBpcyBhY3RpdmF0ZWQsIHRoZSBpbmRpY2F0b3JcbiAgICAgKiBhbmltYXRlcyBhIHNsaWRlIHRvIHRoZSBuZXcgdGFiLiBTZXQgdGhpcyBwcm9wZXJ0eSBgZmFkZWAgdG8gaGF2ZSBhIGZhZGluZyBhbmltYXRpb25cbiAgICAgKiBpbnN0ZWFkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIGdldCBtZGNUYWJJbmRpY2F0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuICAgIH1cblxuICAgIHNldCBtZGNUYWJJbmRpY2F0b3IodmFsdWU6ICdzbGlkZScgfCAnZmFkZScpIHtcbiAgICAgICAgbGV0IG5ld1ZhbHVlOiAnc2xpZGUnIHwgJ2ZhZGUnID0gdmFsdWUgPT09ICdmYWRlJyA/IHZhbHVlIDogJ3NsaWRlJ1xuICAgICAgICBpZiAobmV3VmFsdWUgIT09IHRoaXMuX3R5cGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3R5cGUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRlc3Ryb3lGb3VuZGF0aW9uKCkpXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0Rm91bmRhdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX21kY1RhYkluZGljYXRvcjogJ3NsaWRlJyB8ICdmYWRlJyB8ICcnO1xuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIGFjdGl2YXRlKHByZXZpb3VzSW5kaWNhdG9yQ2xpZW50UmVjdDogQ2xpZW50UmVjdCB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IHByZXZpb3VzSW5kaWNhdG9yQ2xpZW50UmVjdCB8fCB0cnVlO1xuICAgICAgICBpZiAodGhpcy5mb3VuZGF0aW9uKVxuICAgICAgICAgICAgdGhpcy5mb3VuZGF0aW9uLmFjdGl2YXRlKHByZXZpb3VzSW5kaWNhdG9yQ2xpZW50UmVjdCk7XG4gICAgfVxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIGRlYWN0aXZhdGUoKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmZvdW5kYXRpb24pXG4gICAgICAgICAgICB0aGlzLmZvdW5kYXRpb24uZGVhY3RpdmF0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLm1kYy10YWItaW5kaWNhdG9yLS1mYWRlJykgZ2V0IF9zbGlkZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGUgPT09ICdmYWRlJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBfY29udGVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRzICYmIHRoaXMuX2NvbnRlbnRzLmxlbmd0aCA+IDAgPyB0aGlzLl9jb250ZW50cy5maXJzdCA6IG51bGw7XG4gICAgfVxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIF9jb21wdXRlQ29udGVudENsaWVudFJlY3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvdW5kYXRpb24/LmNvbXB1dGVDb250ZW50Q2xpZW50UmVjdCgpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IFRBQl9JTkRJQ0FUT1JfRElSRUNUSVZFUyA9IFtNZGNUYWJJbmRpY2F0b3JDb250ZW50RGlyZWN0aXZlLCBNZGNUYWJJbmRpY2F0b3JEaXJlY3RpdmVdO1xuIl19