UNPKG

carbon-components-angular

Version:
219 lines 18.9 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++}`; /** * 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.tabindex = this.selection ? "0" : null; row.change.subscribe(() => { this.selected.emit({ value: row.value, selected: row.selected, name: this.name }); this.onChange(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", 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" [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" [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 }], skeleton: [{ type: Input }], selected: [{ type: Output }], rows: [{ type: ContentChildren, args: [ListRow] }], headers: [{ type: ContentChildren, args: [ListHeader] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RydWN0dXJlZC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zdHJ1Y3R1cmVkLWxpc3Qvc3RydWN0dXJlZC1saXN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULEtBQUssRUFDTCxlQUFlLEVBR2YsTUFBTSxFQUNOLFlBQVksRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxpQkFBaUIsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRXpFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRDRztBQTJCSCxNQUFNLE9BQU8sY0FBYztJQTFCM0I7UUErQkM7O1dBRUc7UUFDTSxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQzNCOztXQUVHO1FBQ00sWUFBTyxHQUFHLEtBQUssQ0FBQztRQUN6Qjs7V0FFRztRQUNNLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDM0I7O1dBRUc7UUFDTSxTQUFJLEdBQUcsbUJBQW1CLGNBQWMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1FBa0JoRTs7Ozs7Ozs7Ozs7V0FXRztRQUNPLGFBQVEsR0FBbUUsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUs5RixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRTVCLGFBQVEsR0FBRyxDQUFDLENBQU0sRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRTNCLGNBQVMsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FnRHRCO0lBckZBOztPQUVHO0lBQ0gsSUFDSSxRQUFRLENBQUMsS0FBVTtRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJ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QUFTO3NCQUFqQixLQUFLO2dCQUlHLE9BQU87c0JBQWYsS0FBSztnQkFJRyxTQUFTO3NCQUFqQixLQUFLO2dCQUlHLElBQUk7c0JBQVosS0FBSztnQkFNRixRQUFRO3NCQURYLEtBQUs7Z0JBeUJJLFFBQVE7c0JBQWpCLE1BQU07Z0JBRW1CLElBQUk7c0JBQTdCLGVBQWU7dUJBQUMsT0FBTztnQkFDSyxPQUFPO3NCQUFuQyxlQUFlO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDb21wb25lbnQsXG5cdElucHV0LFxuXHRDb250ZW50Q2hpbGRyZW4sXG5cdFF1ZXJ5TGlzdCxcblx0QWZ0ZXJDb250ZW50SW5pdCxcblx0T3V0cHV0LFxuXHRFdmVudEVtaXR0ZXJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IExpc3RSb3cgfSBmcm9tIFwiLi9saXN0LXJvdy5jb21wb25lbnRcIjtcbmltcG9ydCB7IExpc3RIZWFkZXIgfSBmcm9tIFwiLi9saXN0LWhlYWRlci5jb21wb25lbnRcIjtcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuXG4vKipcbiAqIFN0cnVjdHVyZWQgTGlzdHMgcmVwcmVzZW50IHJlbGF0ZWQgdGFidWxhciBkYXRhLiBGb3IgbGFyZ2VyIGRhdGFzZXRzIGNvbnNpZGVyIGEgZnVsbCBgVGFibGVgLlxuICpcbiAqIFNlZSBbc3RydWN0dXJlZC1saXN0L3VzYWdlXShodHRwczovL3d3dy5jYXJib25kZXNpZ25zeXN0ZW0uY29tL2NvbXBvbmVudHMvc3RydWN0dXJlZC1saXN0L3VzYWdlKSBmb3IgdXNhZ2UgZ3VpZGFuY2UuXG4gKlxuICogR2V0IHN0YXJ0ZWQgd2l0aCBpbXBvcnRpbmcgdGhlIG1vZHVsZTpcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBTdHJ1Y3R1cmVkTGlzdE1vZHVsZSB9IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuICogYGBgXG4gKlxuICogYGBgaHRtbFxuICpcdDxjZHMtc3RydWN0dXJlZC1saXN0PlxuICpcdFx0PGNkcy1saXN0LWhlYWRlcj5cbiAqXHRcdFx0PGNkcy1saXN0LWNvbHVtbiBub3dyYXA9XCJ0cnVlXCI+Q29sdW1uIDE8L2Nkcy1saXN0LWNvbHVtbj5cbiAqXHRcdFx0PGNkcy1saXN0LWNvbHVtbiBub3dyYXA9XCJ0cnVlXCI+Q29sdW1uIDI8L2Nkcy1saXN0LWNvbHVtbj5cbiAqXHRcdFx0PGNkcy1saXN0LWNvbHVtbj5Db2x1bW4gMzwvY2RzLWxpc3QtY29sdW1uPlxuICpcdFx0PC9jZHMtbGlzdC1oZWFkZXI+XG4gKlx0XHQ8Y2RzLWxpc3Qtcm93PlxuICpcdFx0XHQ8Y2RzLWxpc3QtY29sdW1uPlJvdyAxPC9jZHMtbGlzdC1jb2x1bW4+XG4gKlx0XHRcdDxjZHMtbGlzdC1jb2x1bW4gbm93cmFwPVwidHJ1ZVwiPlJvdyBPbmU8L2Nkcy1saXN0LWNvbHVtbj5cbiAqXHRcdFx0PGNkcy1saXN0LWNvbHVtbj5cbiAqXHRcdFx0XHRMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCxcbiAqXHRcdFx0XHRjb25zZWN0ZXR1ciBhZGlwaXNjaW5nIGVsaXQuIE51bmMgZHVpIG1hZ25hLFxuICpcdFx0XHRcdGZpbmlidXMgaWQgdG9ydG9yIHNlZCwgYWxpcXVldCBiaWJlbmR1bSBhdWd1ZS5cbiAqXHRcdFx0XHRBZW5lYW4gcG9zdWVyZSBzZW0gdmVsIGV1aXNtb2QgZGlnbmlzc2ltLiBOdWxsYSB1dCBjdXJzdXMgZG9sb3IuXG4gKlx0XHRcdFx0UGVsbGVudGVzcXVlIHZ1bHB1dGF0ZSBuaXNsIGEgcG9ydHRpdG9yIGludGVyZHVtLlxuICpcdFx0XHQ8L2Nkcy1saXN0LWNvbHVtbj5cbiAqXHRcdDwvY2RzLWxpc3Qtcm93PlxuICpcdFx0PGNkcy1saXN0LXJvdz5cbiAqXHRcdFx0PGNkcy1saXN0LWNvbHVtbj5Sb3cgMjwvY2RzLWxpc3QtY29sdW1uPlxuICpcdFx0XHQ8Y2RzLWxpc3QtY29sdW1uIG5vd3JhcD1cInRydWVcIj5Sb3cgVHdvPC9jZHMtbGlzdC1jb2x1bW4+XG4gKlx0XHRcdDxjZHMtbGlzdC1jb2x1bW4+XG4gKlx0XHRcdFx0TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsXG4gKlx0XHRcdFx0Y29uc2VjdGV0dXIgYWRpcGlzY2luZyBlbGl0LiBOdW5jIGR1aSBtYWduYSxcbiAqXHRcdFx0XHRmaW5pYnVzIGlkIHRvcnRvciBzZWQsIGFsaXF1ZXQgYmliZW5kdW0gYXVndWUuXG4gKlx0XHRcdFx0QWVuZWFuIHBvc3VlcmUgc2VtIHZlbCBldWlzbW9kIGRpZ25pc3NpbS4gTnVsbGEgdXQgY3Vyc3VzIGRvbG9yLlxuICpcdFx0XHRcdFBlbGxlbnRlc3F1ZSB2dWxwdXRhdGUgbmlzbCBhIHBvcnR0aXRvciBpbnRlcmR1bS5cbiAqXHRcdFx0PC9jZHMtbGlzdC1jb2x1bW4+XG4gKlx0XHQ8L2Nkcy1saXN0LXJvdz5cbiAqXHQ8L2Nkcy1zdHJ1Y3R1cmVkLWxpc3Q+XG4gKiBgYGBcbiAqXG4gKiBbU2VlIGRlbW9dKC4uLy4uLz9wYXRoPS9zdG9yeS9jb21wb25lbnRzLXN0cnVjdHVyZWQtbGlzdC0tYmFzaWMpXG4gKi9cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogXCJjZHMtc3RydWN0dXJlZC1saXN0LCBpYm0tc3RydWN0dXJlZC1saXN0XCIsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3M9XCJjZHMtLXN0cnVjdHVyZWQtbGlzdFwiXG5cdFx0XHRyb2xlPVwidGFibGVcIlxuXHRcdFx0W25nQ2xhc3NdPVwie1xuXHRcdFx0XHQnY2RzLS1zdHJ1Y3R1cmVkLWxpc3QtLWZsdXNoJzogZmx1c2hlZCxcblx0XHRcdFx0J2Nkcy0tc3RydWN0dXJlZC1saXN0LS1zZWxlY3Rpb24nOiBzZWxlY3Rpb24sXG5cdFx0XHRcdCdjZHMtLXN0cnVjdHVyZWQtbGlzdC0tY29uZGVuc2VkJzogY29uZGVuc2VkLFxuXHRcdFx0XHQnY2RzLS1za2VsZXRvbic6IHNrZWxldG9uXG5cdFx0XHR9XCI+XG5cdFx0XHQ8bmctY29udGVudCBzZWxlY3Q9XCJjZHMtbGlzdC1oZWFkZXIsaWJtLWxpc3QtaGVhZGVyXCI+PC9uZy1jb250ZW50PlxuXHRcdFx0PGRpdiBjbGFzcz1cImNkcy0tc3RydWN0dXJlZC1saXN0LXRib2R5XCIgcm9sZT1cInJvd2dyb3VwXCI+XG5cdFx0XHRcdDxuZy1jb250ZW50PjwvbmctY29udGVudD5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHRgLFxuXHRwcm92aWRlcnM6IFtcblx0XHR7XG5cdFx0XHRwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcblx0XHRcdHVzZUV4aXN0aW5nOiBTdHJ1Y3R1cmVkTGlzdCxcblx0XHRcdG11bHRpOiB0cnVlXG5cdFx0fVxuXHRdXG59KVxuZXhwb3J0IGNsYXNzIFN0cnVjdHVyZWRMaXN0IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXHQvKipcblx0ICogQSBjb3VudGVyIHRvIHByb3ZpZGUgdW5pcXVlIGRlZmF1bHQgdmFsdWVzLlxuXHQgKi9cblx0c3RhdGljIGxpc3RDb3VudCA9IDA7XG5cdC8qKlxuXHQgKiBTZXQgdG8gYHRydWVgIHRvIGVuYWJsZSByYWRpbyBsaWtlIHNlbGVjdGlvbiBvZiB0aGUgcm93cy5cblx0ICovXG5cdEBJbnB1dCgpIHNlbGVjdGlvbiA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0IHRvIGB0cnVlYCB0byBhbGlnbiBjb250ZW50IHdpdGggbWFyZ2luXG5cdCAqL1xuXHRASW5wdXQoKSBmbHVzaGVkID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBTZXQgdG8gYHRydWVgIHRvIGFwcGx5IGEgY29uZGVuc2VkIHN0eWxlIHRvIHRoZSBoZWFkZXJzIGFuZCByb3dzLlxuXHQgKi9cblx0QElucHV0KCkgY29uZGVuc2VkID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBVc2VkIHdoZW4gYHNlbGVjdGlvbiA9IHRydWVgIGFzIHRoZSByb3cgcmFkaW8gZ3JvdXAgYG5hbWVgXG5cdCAqL1xuXHRASW5wdXQoKSBuYW1lID0gYHN0cnVjdHVyZWQtbGlzdC0ke1N0cnVjdHVyZWRMaXN0Lmxpc3RDb3VudCsrfWA7XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHNrZWxldG9uIHZhbHVlIGZvciBhbGwgYExpc3RIZWFkZXJgIHRvIHRoZSBza2VsZXRvbiB2YWx1ZSBvZiBgU3RydWN0dXJlZExpc3RgLlxuXHQgKi9cblx0QElucHV0KClcblx0c2V0IHNrZWxldG9uKHZhbHVlOiBhbnkpIHtcblx0XHR0aGlzLl9za2VsZXRvbiA9IHZhbHVlO1xuXHRcdHRoaXMudXBkYXRlQ2hpbGRyZW4oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBza2VsZXRvbiB2YWx1ZSBpbiB0aGUgYFN0cnVjdHVyZWRMaXN0YCBpZiB0aGVyZSBpcyBvbmUuXG5cdCAqL1xuXHRnZXQgc2tlbGV0b24oKTogYW55IHtcblx0XHRyZXR1cm4gdGhpcy5fc2tlbGV0b247XG5cdH1cblxuXHQvKipcblx0ICogRW1pdHMgYW4gZXZlbnQgd2hlbiB0aGUgcm93IHNlbGVjdGlvbiBjaGFuZ2VzLlxuXHQgKlxuXHQgKiBFbWl0cyBhbiBvYmplY3QgdGhhdCBsb29rcyBsaWtlOlxuXHQgKiBgYGBqYXZhc2NyaXB0XG5cdCAqIHtcblx0ICogXHR2YWx1ZTogXCJzb21ldGhpbmdcIixcblx0ICogXHRzZWxlY3RlZDogdHJ1ZSxcblx0ICogXHRuYW1lOiBcInN0cnVjdHVyZWQtbGlzdC0xXCJcblx0ICogfVxuXHQgKiBgYGBcblx0ICovXG5cdEBPdXRwdXQoKSBzZWxlY3RlZDogRXZlbnRFbWl0dGVyPHt2YWx1ZTogc3RyaW5nLCBzZWxlY3RlZDogYm9vbGVhbiwgbmFtZTogc3RyaW5nfT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0QENvbnRlbnRDaGlsZHJlbihMaXN0Um93KSByb3dzOiBRdWVyeUxpc3Q8TGlzdFJvdz47XG5cdEBDb250ZW50Q2hpbGRyZW4oTGlzdEhlYWRlcikgaGVhZGVyczogUXVlcnlMaXN0PExpc3RIZWFkZXI+O1xuXG5cdHByb3RlY3RlZCBfc2tlbGV0b24gPSBmYWxzZTtcblxuXHRvbkNoYW5nZSA9IChfOiBhbnkpID0+IHsgfTtcblxuXHRvblRvdWNoZWQgPSAoKSA9PiB7IH07XG5cblx0bmdBZnRlckNvbnRlbnRJbml0KCkge1xuXHRcdGNvbnN0IHNldFNlbGVjdGlvbiA9IChyb3dPckhlYWRlcjogTGlzdFJvdyB8IExpc3RIZWFkZXIpID0+IHtcblx0XHRcdHJvd09ySGVhZGVyLnNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uO1xuXHRcdH07XG5cblx0XHR0aGlzLmhlYWRlcnMuZm9yRWFjaChzZXRTZWxlY3Rpb24pO1xuXHRcdHRoaXMucm93cy5mb3JFYWNoKHJvdyA9PiB7XG5cdFx0XHRzZXRTZWxlY3Rpb24ocm93KTtcblx0XHRcdHJvdy5uYW1lID0gdGhpcy5uYW1lO1xuXHRcdFx0cm93LnRhYmluZGV4ID0gdGhpcy5zZWxlY3Rpb24gPyBcIjBcIiA6IG51bGw7XG5cdFx0XHRyb3cuY2hhbmdlLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWQuZW1pdCh7XG5cdFx0XHRcdFx0dmFsdWU6IHJvdy52YWx1ZSxcblx0XHRcdFx0XHRzZWxlY3RlZDogcm93LnNlbGVjdGVkLFxuXHRcdFx0XHRcdG5hbWU6IHRoaXMubmFtZVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0dGhpcy5vbkNoYW5nZShyb3cudmFsdWUpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0dGhpcy51cGRhdGVDaGlsZHJlbigpO1xuXHR9XG5cblx0d3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG5cdFx0aWYgKCF0aGlzLnJvd3MpIHsgcmV0dXJuOyB9XG5cdFx0dGhpcy5yb3dzLmZvckVhY2gocm93ID0+IHtcblx0XHRcdGlmIChyb3cudmFsdWUgPT09IHZhbHVlKSB7XG5cdFx0XHRcdHJvdy5zZWxlY3RlZCA9IHRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyb3cuc2VsZWN0ZWQgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuXHRcdHRoaXMub25DaGFuZ2UgPSBmbjtcblx0fVxuXG5cdHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcblx0XHR0aGlzLm9uVG91Y2hlZCA9IGZuO1xuXHR9XG5cblx0cHJvdGVjdGVkIHVwZGF0ZUNoaWxkcmVuKCkge1xuXHRcdGlmICh0aGlzLmhlYWRlcnMpIHtcblx0XHRcdHRoaXMuaGVhZGVycy50b0FycmF5KCkuZm9yRWFjaChjaGlsZCA9PiBjaGlsZC5za2VsZXRvbiA9IHRoaXMuc2tlbGV0b24pO1xuXHRcdH1cblx0fVxufVxuIl19