UNPKG

carbon-components-angular

Version:
227 lines 19.4 kB
import { Component, Input, ContentChildren, Output, EventEmitter } from "@angular/core"; import { ListRow } from "./list-row.component"; import { ListHeader } from "./list-header.component"; import { NG_VALUE_ACCESSOR } from "@angular/forms"; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; /** * Structured Lists represent related tabular data. For larger datasets consider a full `Table`. * * See [structured-list/usage](https://www.carbondesignsystem.com/components/structured-list/usage) for usage guidance. * * Get started with importing the module: * * ```typescript * import { StructuredListModule } from 'carbon-components-angular'; * ``` * * ```html * <cds-structured-list> * <cds-list-header> * <cds-list-column nowrap="true">Column 1</cds-list-column> * <cds-list-column nowrap="true">Column 2</cds-list-column> * <cds-list-column>Column 3</cds-list-column> * </cds-list-header> * <cds-list-row> * <cds-list-column>Row 1</cds-list-column> * <cds-list-column nowrap="true">Row One</cds-list-column> * <cds-list-column> * Lorem ipsum dolor sit amet, * consectetur adipiscing elit. Nunc dui magna, * finibus id tortor sed, aliquet bibendum augue. * Aenean posuere sem vel euismod dignissim. Nulla ut cursus dolor. * Pellentesque vulputate nisl a porttitor interdum. * </cds-list-column> * </cds-list-row> * <cds-list-row> * <cds-list-column>Row 2</cds-list-column> * <cds-list-column nowrap="true">Row Two</cds-list-column> * <cds-list-column> * Lorem ipsum dolor sit amet, * consectetur adipiscing elit. Nunc dui magna, * finibus id tortor sed, aliquet bibendum augue. * Aenean posuere sem vel euismod dignissim. Nulla ut cursus dolor. * Pellentesque vulputate nisl a porttitor interdum. * </cds-list-column> * </cds-list-row> * </cds-structured-list> * ``` * * [See demo](../../?path=/story/components-structured-list--basic) */ export class StructuredList { constructor() { /** * Set to `true` to enable radio like selection of the rows. */ this.selection = false; /** * Set to `true` to align content with margin */ this.flushed = false; /** * Set to `true` to apply a condensed style to the headers and rows. */ this.condensed = false; /** * Used when `selection = true` as the row radio group `name` */ this.name = `structured-list-${StructuredList.listCount++}`; /** * Accessible label applied to the `role="table"` container. */ this.ariaLabel = "Structured list section"; /** * Emits an event when the row selection changes. * * Emits an object that looks like: * ```javascript * { * value: "something", * selected: true, * name: "structured-list-1" * } * ``` */ this.selected = new EventEmitter(); this._skeleton = false; this.onChange = (_) => { }; this.onTouched = () => { }; } /** * Sets the skeleton value for all `ListHeader` to the skeleton value of `StructuredList`. */ set skeleton(value) { this._skeleton = value; this.updateChildren(); } /** * Returns the skeleton value in the `StructuredList` if there is one. */ get skeleton() { return this._skeleton; } ngAfterContentInit() { const setSelection = (rowOrHeader) => { rowOrHeader.selection = this.selection; }; this.headers.forEach(setSelection); this.rows.forEach(row => { setSelection(row); row.name = this.name; row.change.subscribe(() => { this.selected.emit({ value: row.value, selected: row.selected, name: this.name }); this.onChange(row.value); this.writeValue(row.value); }); }); this.updateChildren(); } writeValue(value) { if (!this.rows) { return; } this.rows.forEach(row => { if (row.value === value) { row.selected = true; } else { row.selected = false; } }); } registerOnChange(fn) { this.onChange = fn; } registerOnTouched(fn) { this.onTouched = fn; } updateChildren() { if (this.headers) { this.headers.toArray().forEach(child => child.skeleton = this.skeleton); } } } /** * A counter to provide unique default values. */ StructuredList.listCount = 0; StructuredList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: StructuredList, deps: [], target: i0.ɵɵFactoryTarget.Component }); StructuredList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: StructuredList, selector: "cds-structured-list, ibm-structured-list", inputs: { selection: "selection", flushed: "flushed", condensed: "condensed", name: "name", ariaLabel: "ariaLabel", skeleton: "skeleton" }, outputs: { selected: "selected" }, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: StructuredList, multi: true } ], queries: [{ propertyName: "rows", predicate: ListRow }, { propertyName: "headers", predicate: ListHeader }], ngImport: i0, template: ` <div class="cds--structured-list" role="table" [attr.aria-label]="ariaLabel" [ngClass]="{ 'cds--structured-list--flush': flushed, 'cds--structured-list--selection': selection, 'cds--structured-list--condensed': condensed, 'cds--skeleton': skeleton }"> <ng-content select="cds-list-header,ibm-list-header"></ng-content> <div class="cds--structured-list-tbody" role="rowgroup"> <ng-content></ng-content> </div> </div> `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: StructuredList, decorators: [{ type: Component, args: [{ selector: "cds-structured-list, ibm-structured-list", template: ` <div class="cds--structured-list" role="table" [attr.aria-label]="ariaLabel" [ngClass]="{ 'cds--structured-list--flush': flushed, 'cds--structured-list--selection': selection, 'cds--structured-list--condensed': condensed, 'cds--skeleton': skeleton }"> <ng-content select="cds-list-header,ibm-list-header"></ng-content> <div class="cds--structured-list-tbody" role="rowgroup"> <ng-content></ng-content> </div> </div> `, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: StructuredList, multi: true } ] }] }], propDecorators: { selection: [{ type: Input }], flushed: [{ type: Input }], condensed: [{ type: Input }], name: [{ type: Input }], ariaLabel: [{ type: Input }], skeleton: [{ type: Input }], selected: [{ type: Output }], rows: [{ type: ContentChildren, args: [ListRow] }], headers: [{ type: ContentChildren, args: [ListHeader] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RydWN0dXJlZC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zdHJ1Y3R1cmVkLWxpc3Qvc3RydWN0dXJlZC1saXN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULEtBQUssRUFDTCxlQUFlLEVBR2YsTUFBTSxFQUNOLFlBQVksRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxpQkFBaUIsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRXpFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRDRztBQTRCSCxNQUFNLE9BQU8sY0FBYztJQTNCM0I7UUFnQ0M7O1dBRUc7UUFDTSxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQzNCOztXQUVHO1FBQ00sWUFBTyxHQUFHLEtBQUssQ0FBQztRQUN6Qjs7V0FFRztRQUNNLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDM0I7O1dBRUc7UUFDTSxTQUFJLEdBQUcsbUJBQW1CLGNBQWMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1FBQ2hFOztXQUVHO1FBQ00sY0FBUyxHQUFHLHlCQUF5QixDQUFDO1FBa0IvQzs7Ozs7Ozs7Ozs7V0FXRztRQUNPLGFBQVEsR0FBbUUsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUs5RixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRTVCLGFBQVEsR0FBRyxDQUFDLENBQU0sRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRTNCLGNBQVMsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FnRHRCO0lBckZBOztPQUVHO0lBQ0gsSUFDSSxRQUFRLENBQUMsS0FBVTtRQUN0QixJ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RDs4QkFTUyxTQUFTO3NCQUFqQixLQUFLO2dCQUlHLE9BQU87c0JBQWYsS0FBSztnQkFJRyxTQUFTO3NCQUFqQixLQUFLO2dCQUlHLElBQUk7c0JBQVosS0FBSztnQkFJRyxTQUFTO3NCQUFqQixLQUFLO2dCQU1GLFFBQVE7c0JBRFgsS0FBSztnQkF5QkksUUFBUTtzQkFBakIsTUFBTTtnQkFFbUIsSUFBSTtzQkFBN0IsZUFBZTt1QkFBQyxPQUFPO2dCQUNLLE9BQU87c0JBQW5DLGVBQWU7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENvbXBvbmVudCxcblx0SW5wdXQsXG5cdENvbnRlbnRDaGlsZHJlbixcblx0UXVlcnlMaXN0LFxuXHRBZnRlckNvbnRlbnRJbml0LFxuXHRPdXRwdXQsXG5cdEV2ZW50RW1pdHRlclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTGlzdFJvdyB9IGZyb20gXCIuL2xpc3Qtcm93LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgTGlzdEhlYWRlciB9IGZyb20gXCIuL2xpc3QtaGVhZGVyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5cbi8qKlxuICogU3RydWN0dXJlZCBMaXN0cyByZXByZXNlbnQgcmVsYXRlZCB0YWJ1bGFyIGRhdGEuIEZvciBsYXJnZXIgZGF0YXNldHMgY29uc2lkZXIgYSBmdWxsIGBUYWJsZWAuXG4gKlxuICogU2VlIFtzdHJ1Y3R1cmVkLWxpc3QvdXNhZ2VdKGh0dHBzOi8vd3d3LmNhcmJvbmRlc2lnbnN5c3RlbS5jb20vY29tcG9uZW50cy9zdHJ1Y3R1cmVkLWxpc3QvdXNhZ2UpIGZvciB1c2FnZSBndWlkYW5jZS5cbiAqXG4gKiBHZXQgc3RhcnRlZCB3aXRoIGltcG9ydGluZyB0aGUgbW9kdWxlOlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IFN0cnVjdHVyZWRMaXN0TW9kdWxlIH0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG4gKiBgYGBcbiAqXG4gKiBgYGBodG1sXG4gKlx0PGNkcy1zdHJ1Y3R1cmVkLWxpc3Q+XG4gKlx0XHQ8Y2RzLWxpc3QtaGVhZGVyPlxuICpcdFx0XHQ8Y2RzLWxpc3QtY29sdW1uIG5vd3JhcD1cInRydWVcIj5Db2x1bW4gMTwvY2RzLWxpc3QtY29sdW1uPlxuICpcdFx0XHQ8Y2RzLWxpc3QtY29sdW1uIG5vd3JhcD1cInRydWVcIj5Db2x1bW4gMjwvY2RzLWxpc3QtY29sdW1uPlxuICpcdFx0XHQ8Y2RzLWxpc3QtY29sdW1uPkNvbHVtbiAzPC9jZHMtbGlzdC1jb2x1bW4+XG4gKlx0XHQ8L2Nkcy1saXN0LWhlYWRlcj5cbiAqXHRcdDxjZHMtbGlzdC1yb3c+XG4gKlx0XHRcdDxjZHMtbGlzdC1jb2x1bW4+Um93IDE8L2Nkcy1saXN0LWNvbHVtbj5cbiAqXHRcdFx0PGNkcy1saXN0LWNvbHVtbiBub3dyYXA9XCJ0cnVlXCI+Um93IE9uZTwvY2RzLWxpc3QtY29sdW1uPlxuICpcdFx0XHQ8Y2RzLWxpc3QtY29sdW1uPlxuICpcdFx0XHRcdExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LFxuICpcdFx0XHRcdGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gTnVuYyBkdWkgbWFnbmEsXG4gKlx0XHRcdFx0ZmluaWJ1cyBpZCB0b3J0b3Igc2VkLCBhbGlxdWV0IGJpYmVuZHVtIGF1Z3VlLlxuICpcdFx0XHRcdEFlbmVhbiBwb3N1ZXJlIHNlbSB2ZWwgZXVpc21vZCBkaWduaXNzaW0uIE51bGxhIHV0IGN1cnN1cyBkb2xvci5cbiAqXHRcdFx0XHRQZWxsZW50ZXNxdWUgdnVscHV0YXRlIG5pc2wgYSBwb3J0dGl0b3IgaW50ZXJkdW0uXG4gKlx0XHRcdDwvY2RzLWxpc3QtY29sdW1uPlxuICpcdFx0PC9jZHMtbGlzdC1yb3c+XG4gKlx0XHQ8Y2RzLWxpc3Qtcm93PlxuICpcdFx0XHQ8Y2RzLWxpc3QtY29sdW1uPlJvdyAyPC9jZHMtbGlzdC1jb2x1bW4+XG4gKlx0XHRcdDxjZHMtbGlzdC1jb2x1bW4gbm93cmFwPVwidHJ1ZVwiPlJvdyBUd288L2Nkcy1saXN0LWNvbHVtbj5cbiAqXHRcdFx0PGNkcy1saXN0LWNvbHVtbj5cbiAqXHRcdFx0XHRMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCxcbiAqXHRcdFx0XHRjb25zZWN0ZXR1ciBhZGlwaXNjaW5nIGVsaXQuIE51bmMgZHVpIG1hZ25hLFxuICpcdFx0XHRcdGZpbmlidXMgaWQgdG9ydG9yIHNlZCwgYWxpcXVldCBiaWJlbmR1bSBhdWd1ZS5cbiAqXHRcdFx0XHRBZW5lYW4gcG9zdWVyZSBzZW0gdmVsIGV1aXNtb2QgZGlnbmlzc2ltLiBOdWxsYSB1dCBjdXJzdXMgZG9sb3IuXG4gKlx0XHRcdFx0UGVsbGVudGVzcXVlIHZ1bHB1dGF0ZSBuaXNsIGEgcG9ydHRpdG9yIGludGVyZHVtLlxuICpcdFx0XHQ8L2Nkcy1saXN0LWNvbHVtbj5cbiAqXHRcdDwvY2RzLWxpc3Qtcm93PlxuICpcdDwvY2RzLXN0cnVjdHVyZWQtbGlzdD5cbiAqIGBgYFxuICpcbiAqIFtTZWUgZGVtb10oLi4vLi4vP3BhdGg9L3N0b3J5L2NvbXBvbmVudHMtc3RydWN0dXJlZC1saXN0LS1iYXNpYylcbiAqL1xuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiBcImNkcy1zdHJ1Y3R1cmVkLWxpc3QsIGlibS1zdHJ1Y3R1cmVkLWxpc3RcIixcblx0dGVtcGxhdGU6IGBcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzcz1cImNkcy0tc3RydWN0dXJlZC1saXN0XCJcblx0XHRcdHJvbGU9XCJ0YWJsZVwiXG5cdFx0XHRbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG5cdFx0XHRbbmdDbGFzc109XCJ7XG5cdFx0XHRcdCdjZHMtLXN0cnVjdHVyZWQtbGlzdC0tZmx1c2gnOiBmbHVzaGVkLFxuXHRcdFx0XHQnY2RzLS1zdHJ1Y3R1cmVkLWxpc3QtLXNlbGVjdGlvbic6IHNlbGVjdGlvbixcblx0XHRcdFx0J2Nkcy0tc3RydWN0dXJlZC1saXN0LS1jb25kZW5zZWQnOiBjb25kZW5zZWQsXG5cdFx0XHRcdCdjZHMtLXNrZWxldG9uJzogc2tlbGV0b25cblx0XHRcdH1cIj5cblx0XHRcdDxuZy1jb250ZW50IHNlbGVjdD1cImNkcy1saXN0LWhlYWRlcixpYm0tbGlzdC1oZWFkZXJcIj48L25nLWNvbnRlbnQ+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiY2RzLS1zdHJ1Y3R1cmVkLWxpc3QtdGJvZHlcIiByb2xlPVwicm93Z3JvdXBcIj5cblx0XHRcdFx0PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdGAsXG5cdHByb3ZpZGVyczogW1xuXHRcdHtcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuXHRcdFx0dXNlRXhpc3Rpbmc6IFN0cnVjdHVyZWRMaXN0LFxuXHRcdFx0bXVsdGk6IHRydWVcblx0XHR9XG5cdF1cbn0pXG5leHBvcnQgY2xhc3MgU3RydWN0dXJlZExpc3QgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG5cdC8qKlxuXHQgKiBBIGNvdW50ZXIgdG8gcHJvdmlkZSB1bmlxdWUgZGVmYXVsdCB2YWx1ZXMuXG5cdCAqL1xuXHRzdGF0aWMgbGlzdENvdW50ID0gMDtcblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgdG8gZW5hYmxlIHJhZGlvIGxpa2Ugc2VsZWN0aW9uIG9mIHRoZSByb3dzLlxuXHQgKi9cblx0QElucHV0KCkgc2VsZWN0aW9uID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBTZXQgdG8gYHRydWVgIHRvIGFsaWduIGNvbnRlbnQgd2l0aCBtYXJnaW5cblx0ICovXG5cdEBJbnB1dCgpIGZsdXNoZWQgPSBmYWxzZTtcblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgdG8gYXBwbHkgYSBjb25kZW5zZWQgc3R5bGUgdG8gdGhlIGhlYWRlcnMgYW5kIHJvd3MuXG5cdCAqL1xuXHRASW5wdXQoKSBjb25kZW5zZWQgPSBmYWxzZTtcblx0LyoqXG5cdCAqIFVzZWQgd2hlbiBgc2VsZWN0aW9uID0gdHJ1ZWAgYXMgdGhlIHJvdyByYWRpbyBncm91cCBgbmFtZWBcblx0ICovXG5cdEBJbnB1dCgpIG5hbWUgPSBgc3RydWN0dXJlZC1saXN0LSR7U3RydWN0dXJlZExpc3QubGlzdENvdW50Kyt9YDtcblx0LyoqXG5cdCAqIEFjY2Vzc2libGUgbGFiZWwgYXBwbGllZCB0byB0aGUgYHJvbGU9XCJ0YWJsZVwiYCBjb250YWluZXIuXG5cdCAqL1xuXHRASW5wdXQoKSBhcmlhTGFiZWwgPSBcIlN0cnVjdHVyZWQgbGlzdCBzZWN0aW9uXCI7XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHNrZWxldG9uIHZhbHVlIGZvciBhbGwgYExpc3RIZWFkZXJgIHRvIHRoZSBza2VsZXRvbiB2YWx1ZSBvZiBgU3RydWN0dXJlZExpc3RgLlxuXHQgKi9cblx0QElucHV0KClcblx0c2V0IHNrZWxldG9uKHZhbHVlOiBhbnkpIHtcblx0XHR0aGlzLl9za2VsZXRvbiA9IHZhbHVlO1xuXHRcdHRoaXMudXBkYXRlQ2hpbGRyZW4oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBza2VsZXRvbiB2YWx1ZSBpbiB0aGUgYFN0cnVjdHVyZWRMaXN0YCBpZiB0aGVyZSBpcyBvbmUuXG5cdCAqL1xuXHRnZXQgc2tlbGV0b24oKTogYW55IHtcblx0XHRyZXR1cm4gdGhpcy5fc2tlbGV0b247XG5cdH1cblxuXHQvKipcblx0ICogRW1pdHMgYW4gZXZlbnQgd2hlbiB0aGUgcm93IHNlbGVjdGlvbiBjaGFuZ2VzLlxuXHQgKlxuXHQgKiBFbWl0cyBhbiBvYmplY3QgdGhhdCBsb29rcyBsaWtlOlxuXHQgKiBgYGBqYXZhc2NyaXB0XG5cdCAqIHtcblx0ICogXHR2YWx1ZTogXCJzb21ldGhpbmdcIixcblx0ICogXHRzZWxlY3RlZDogdHJ1ZSxcblx0ICogXHRuYW1lOiBcInN0cnVjdHVyZWQtbGlzdC0xXCJcblx0ICogfVxuXHQgKiBgYGBcblx0ICovXG5cdEBPdXRwdXQoKSBzZWxlY3RlZDogRXZlbnRFbWl0dGVyPHt2YWx1ZTogc3RyaW5nLCBzZWxlY3RlZDogYm9vbGVhbiwgbmFtZTogc3RyaW5nfT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0QENvbnRlbnRDaGlsZHJlbihMaXN0Um93KSByb3dzOiBRdWVyeUxpc3Q8TGlzdFJvdz47XG5cdEBDb250ZW50Q2hpbGRyZW4oTGlzdEhlYWRlcikgaGVhZGVyczogUXVlcnlMaXN0PExpc3RIZWFkZXI+O1xuXG5cdHByb3RlY3RlZCBfc2tlbGV0b24gPSBmYWxzZTtcblxuXHRvbkNoYW5nZSA9IChfOiBhbnkpID0+IHsgfTtcblxuXHRvblRvdWNoZWQgPSAoKSA9PiB7IH07XG5cblx0bmdBZnRlckNvbnRlbnRJbml0KCkge1xuXHRcdGNvbnN0IHNldFNlbGVjdGlvbiA9IChyb3dPckhlYWRlcjogTGlzdFJvdyB8IExpc3RIZWFkZXIpID0+IHtcblx0XHRcdHJvd09ySGVhZGVyLnNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uO1xuXHRcdH07XG5cblx0XHR0aGlzLmhlYWRlcnMuZm9yRWFjaChzZXRTZWxlY3Rpb24pO1xuXHRcdHRoaXMucm93cy5mb3JFYWNoKHJvdyA9PiB7XG5cdFx0XHRzZXRTZWxlY3Rpb24ocm93KTtcblx0XHRcdHJvdy5uYW1lID0gdGhpcy5uYW1lO1xuXHRcdFx0cm93LmNoYW5nZS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnNlbGVjdGVkLmVtaXQoe1xuXHRcdFx0XHRcdHZhbHVlOiByb3cudmFsdWUsXG5cdFx0XHRcdFx0c2VsZWN0ZWQ6IHJvdy5zZWxlY3RlZCxcblx0XHRcdFx0XHRuYW1lOiB0aGlzLm5hbWVcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMub25DaGFuZ2Uocm93LnZhbHVlKTtcblx0XHRcdFx0dGhpcy53cml0ZVZhbHVlKHJvdy52YWx1ZSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHR0aGlzLnVwZGF0ZUNoaWxkcmVuKCk7XG5cdH1cblxuXHR3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcblx0XHRpZiAoIXRoaXMucm93cykgeyByZXR1cm47IH1cblx0XHR0aGlzLnJvd3MuZm9yRWFjaChyb3cgPT4ge1xuXHRcdFx0aWYgKHJvdy52YWx1ZSA9PT0gdmFsdWUpIHtcblx0XHRcdFx0cm93LnNlbGVjdGVkID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJvdy5zZWxlY3RlZCA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG5cdFx0dGhpcy5vbkNoYW5nZSA9IGZuO1xuXHR9XG5cblx0cmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xuXHRcdHRoaXMub25Ub3VjaGVkID0gZm47XG5cdH1cblxuXHRwcm90ZWN0ZWQgdXBkYXRlQ2hpbGRyZW4oKSB7XG5cdFx0aWYgKHRoaXMuaGVhZGVycykge1xuXHRcdFx0dGhpcy5oZWFkZXJzLnRvQXJyYXkoKS5mb3JFYWNoKGNoaWxkID0+IGNoaWxkLnNrZWxldG9uID0gdGhpcy5za2VsZXRvbik7XG5cdFx0fVxuXHR9XG59XG4iXX0=