UNPKG

carbon-components-angular

Version:
219 lines 18.8 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.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", 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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QUFLO2dCQUlHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBSUcsSUFBSTtzQkFBWixLQUFLO2dCQU1GLFFBQVE7c0JBRFgsS0FBSztnQkF5QkksUUFBUTtzQkFBakIsTUFBTTtnQkFFbUIsSUFBSTtzQkFBN0IsZUFBZTt1QkFBQyxPQUFPO2dCQUNLLE9BQU87c0JBQW5DLGVBQWU7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENvbXBvbmVudCxcblx0SW5wdXQsXG5cdENvbnRlbnRDaGlsZHJlbixcblx0UXVlcnlMaXN0LFxuXHRBZnRlckNvbnRlbnRJbml0LFxuXHRPdXRwdXQsXG5cdEV2ZW50RW1pdHRlclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTGlzdFJvdyB9IGZyb20gXCIuL2xpc3Qtcm93LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgTGlzdEhlYWRlciB9IGZyb20gXCIuL2xpc3QtaGVhZGVyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5cbi8qKlxuICogU3RydWN0dXJlZCBMaXN0cyByZXByZXNlbnQgcmVsYXRlZCB0YWJ1bGFyIGRhdGEuIEZvciBsYXJnZXIgZGF0YXNldHMgY29uc2lkZXIgYSBmdWxsIGBUYWJsZWAuXG4gKlxuICogU2VlIFtzdHJ1Y3R1cmVkLWxpc3QvdXNhZ2VdKGh0dHBzOi8vd3d3LmNhcmJvbmRlc2lnbnN5c3RlbS5jb20vY29tcG9uZW50cy9zdHJ1Y3R1cmVkLWxpc3QvdXNhZ2UpIGZvciB1c2FnZSBndWlkYW5jZS5cbiAqXG4gKiBHZXQgc3RhcnRlZCB3aXRoIGltcG9ydGluZyB0aGUgbW9kdWxlOlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IFN0cnVjdHVyZWRMaXN0TW9kdWxlIH0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG4gKiBgYGBcbiAqXG4gKiBgYGBodG1sXG4gKlx0PGNkcy1zdHJ1Y3R1cmVkLWxpc3Q+XG4gKlx0XHQ8Y2RzLWxpc3QtaGVhZGVyPlxuICpcdFx0XHQ8Y2RzLWxpc3QtY29sdW1uIG5vd3JhcD1cInRydWVcIj5Db2x1bW4gMTwvY2RzLWxpc3QtY29sdW1uPlxuICpcdFx0XHQ8Y2RzLWxpc3QtY29sdW1uIG5vd3JhcD1cInRydWVcIj5Db2x1bW4gMjwvY2RzLWxpc3QtY29sdW1uPlxuICpcdFx0XHQ8Y2RzLWxpc3QtY29sdW1uPkNvbHVtbiAzPC9jZHMtbGlzdC1jb2x1bW4+XG4gKlx0XHQ8L2Nkcy1saXN0LWhlYWRlcj5cbiAqXHRcdDxjZHMtbGlzdC1yb3c+XG4gKlx0XHRcdDxjZHMtbGlzdC1jb2x1bW4+Um93IDE8L2Nkcy1saXN0LWNvbHVtbj5cbiAqXHRcdFx0PGNkcy1saXN0LWNvbHVtbiBub3dyYXA9XCJ0cnVlXCI+Um93IE9uZTwvY2RzLWxpc3QtY29sdW1uPlxuICpcdFx0XHQ8Y2RzLWxpc3QtY29sdW1uPlxuICpcdFx0XHRcdExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LFxuICpcdFx0XHRcdGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gTnVuYyBkdWkgbWFnbmEsXG4gKlx0XHRcdFx0ZmluaWJ1cyBpZCB0b3J0b3Igc2VkLCBhbGlxdWV0IGJpYmVuZHVtIGF1Z3VlLlxuICpcdFx0XHRcdEFlbmVhbiBwb3N1ZXJlIHNlbSB2ZWwgZXVpc21vZCBkaWduaXNzaW0uIE51bGxhIHV0IGN1cnN1cyBkb2xvci5cbiAqXHRcdFx0XHRQZWxsZW50ZXNxdWUgdnVscHV0YXRlIG5pc2wgYSBwb3J0dGl0b3IgaW50ZXJkdW0uXG4gKlx0XHRcdDwvY2RzLWxpc3QtY29sdW1uPlxuICpcdFx0PC9jZHMtbGlzdC1yb3c+XG4gKlx0XHQ8Y2RzLWxpc3Qtcm93PlxuICpcdFx0XHQ8Y2RzLWxpc3QtY29sdW1uPlJvdyAyPC9jZHMtbGlzdC1jb2x1bW4+XG4gKlx0XHRcdDxjZHMtbGlzdC1jb2x1bW4gbm93cmFwPVwidHJ1ZVwiPlJvdyBUd288L2Nkcy1saXN0LWNvbHVtbj5cbiAqXHRcdFx0PGNkcy1saXN0LWNvbHVtbj5cbiAqXHRcdFx0XHRMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCxcbiAqXHRcdFx0XHRjb25zZWN0ZXR1ciBhZGlwaXNjaW5nIGVsaXQuIE51bmMgZHVpIG1hZ25hLFxuICpcdFx0XHRcdGZpbmlidXMgaWQgdG9ydG9yIHNlZCwgYWxpcXVldCBiaWJlbmR1bSBhdWd1ZS5cbiAqXHRcdFx0XHRBZW5lYW4gcG9zdWVyZSBzZW0gdmVsIGV1aXNtb2QgZGlnbmlzc2ltLiBOdWxsYSB1dCBjdXJzdXMgZG9sb3IuXG4gKlx0XHRcdFx0UGVsbGVudGVzcXVlIHZ1bHB1dGF0ZSBuaXNsIGEgcG9ydHRpdG9yIGludGVyZHVtLlxuICpcdFx0XHQ8L2Nkcy1saXN0LWNvbHVtbj5cbiAqXHRcdDwvY2RzLWxpc3Qtcm93PlxuICpcdDwvY2RzLXN0cnVjdHVyZWQtbGlzdD5cbiAqIGBgYFxuICpcbiAqIFtTZWUgZGVtb10oLi4vLi4vP3BhdGg9L3N0b3J5L2NvbXBvbmVudHMtc3RydWN0dXJlZC1saXN0LS1iYXNpYylcbiAqL1xuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiBcImNkcy1zdHJ1Y3R1cmVkLWxpc3QsIGlibS1zdHJ1Y3R1cmVkLWxpc3RcIixcblx0dGVtcGxhdGU6IGBcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzcz1cImNkcy0tc3RydWN0dXJlZC1saXN0XCJcblx0XHRcdHJvbGU9XCJ0YWJsZVwiXG5cdFx0XHRbbmdDbGFzc109XCJ7XG5cdFx0XHRcdCdjZHMtLXN0cnVjdHVyZWQtbGlzdC0tZmx1c2gnOiBmbHVzaGVkLFxuXHRcdFx0XHQnY2RzLS1zdHJ1Y3R1cmVkLWxpc3QtLXNlbGVjdGlvbic6IHNlbGVjdGlvbixcblx0XHRcdFx0J2Nkcy0tc3RydWN0dXJlZC1saXN0LS1jb25kZW5zZWQnOiBjb25kZW5zZWQsXG5cdFx0XHRcdCdjZHMtLXNrZWxldG9uJzogc2tlbGV0b25cblx0XHRcdH1cIj5cblx0XHRcdDxuZy1jb250ZW50IHNlbGVjdD1cImNkcy1saXN0LWhlYWRlcixpYm0tbGlzdC1oZWFkZXJcIj48L25nLWNvbnRlbnQ+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiY2RzLS1zdHJ1Y3R1cmVkLWxpc3QtdGJvZHlcIiByb2xlPVwicm93Z3JvdXBcIj5cblx0XHRcdFx0PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdGAsXG5cdHByb3ZpZGVyczogW1xuXHRcdHtcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuXHRcdFx0dXNlRXhpc3Rpbmc6IFN0cnVjdHVyZWRMaXN0LFxuXHRcdFx0bXVsdGk6IHRydWVcblx0XHR9XG5cdF1cbn0pXG5leHBvcnQgY2xhc3MgU3RydWN0dXJlZExpc3QgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG5cdC8qKlxuXHQgKiBBIGNvdW50ZXIgdG8gcHJvdmlkZSB1bmlxdWUgZGVmYXVsdCB2YWx1ZXMuXG5cdCAqL1xuXHRzdGF0aWMgbGlzdENvdW50ID0gMDtcblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgdG8gZW5hYmxlIHJhZGlvIGxpa2Ugc2VsZWN0aW9uIG9mIHRoZSByb3dzLlxuXHQgKi9cblx0QElucHV0KCkgc2VsZWN0aW9uID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBTZXQgdG8gYHRydWVgIHRvIGFsaWduIGNvbnRlbnQgd2l0aCBtYXJnaW5cblx0ICovXG5cdEBJbnB1dCgpIGZsdXNoZWQgPSBmYWxzZTtcblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgdG8gYXBwbHkgYSBjb25kZW5zZWQgc3R5bGUgdG8gdGhlIGhlYWRlcnMgYW5kIHJvd3MuXG5cdCAqL1xuXHRASW5wdXQoKSBjb25kZW5zZWQgPSBmYWxzZTtcblx0LyoqXG5cdCAqIFVzZWQgd2hlbiBgc2VsZWN0aW9uID0gdHJ1ZWAgYXMgdGhlIHJvdyByYWRpbyBncm91cCBgbmFtZWBcblx0ICovXG5cdEBJbnB1dCgpIG5hbWUgPSBgc3RydWN0dXJlZC1saXN0LSR7U3RydWN0dXJlZExpc3QubGlzdENvdW50Kyt9YDtcblxuXHQvKipcblx0ICogU2V0cyB0aGUgc2tlbGV0b24gdmFsdWUgZm9yIGFsbCBgTGlzdEhlYWRlcmAgdG8gdGhlIHNrZWxldG9uIHZhbHVlIG9mIGBTdHJ1Y3R1cmVkTGlzdGAuXG5cdCAqL1xuXHRASW5wdXQoKVxuXHRzZXQgc2tlbGV0b24odmFsdWU6IGFueSkge1xuXHRcdHRoaXMuX3NrZWxldG9uID0gdmFsdWU7XG5cdFx0dGhpcy51cGRhdGVDaGlsZHJlbigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHNrZWxldG9uIHZhbHVlIGluIHRoZSBgU3RydWN0dXJlZExpc3RgIGlmIHRoZXJlIGlzIG9uZS5cblx0ICovXG5cdGdldCBza2VsZXRvbigpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzLl9za2VsZXRvbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSByb3cgc2VsZWN0aW9uIGNoYW5nZXMuXG5cdCAqXG5cdCAqIEVtaXRzIGFuIG9iamVjdCB0aGF0IGxvb2tzIGxpa2U6XG5cdCAqIGBgYGphdmFzY3JpcHRcblx0ICoge1xuXHQgKiBcdHZhbHVlOiBcInNvbWV0aGluZ1wiLFxuXHQgKiBcdHNlbGVjdGVkOiB0cnVlLFxuXHQgKiBcdG5hbWU6IFwic3RydWN0dXJlZC1saXN0LTFcIlxuXHQgKiB9XG5cdCAqIGBgYFxuXHQgKi9cblx0QE91dHB1dCgpIHNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8e3ZhbHVlOiBzdHJpbmcsIHNlbGVjdGVkOiBib29sZWFuLCBuYW1lOiBzdHJpbmd9PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHRAQ29udGVudENoaWxkcmVuKExpc3RSb3cpIHJvd3M6IFF1ZXJ5TGlzdDxMaXN0Um93Pjtcblx0QENvbnRlbnRDaGlsZHJlbihMaXN0SGVhZGVyKSBoZWFkZXJzOiBRdWVyeUxpc3Q8TGlzdEhlYWRlcj47XG5cblx0cHJvdGVjdGVkIF9za2VsZXRvbiA9IGZhbHNlO1xuXG5cdG9uQ2hhbmdlID0gKF86IGFueSkgPT4geyB9O1xuXG5cdG9uVG91Y2hlZCA9ICgpID0+IHsgfTtcblxuXHRuZ0FmdGVyQ29udGVudEluaXQoKSB7XG5cdFx0Y29uc3Qgc2V0U2VsZWN0aW9uID0gKHJvd09ySGVhZGVyOiBMaXN0Um93IHwgTGlzdEhlYWRlcikgPT4ge1xuXHRcdFx0cm93T3JIZWFkZXIuc2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb247XG5cdFx0fTtcblxuXHRcdHRoaXMuaGVhZGVycy5mb3JFYWNoKHNldFNlbGVjdGlvbik7XG5cdFx0dGhpcy5yb3dzLmZvckVhY2gocm93ID0+IHtcblx0XHRcdHNldFNlbGVjdGlvbihyb3cpO1xuXHRcdFx0cm93Lm5hbWUgPSB0aGlzLm5hbWU7XG5cdFx0XHRyb3cuY2hhbmdlLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWQuZW1pdCh7XG5cdFx0XHRcdFx0dmFsdWU6IHJvdy52YWx1ZSxcblx0XHRcdFx0XHRzZWxlY3RlZDogcm93LnNlbGVjdGVkLFxuXHRcdFx0XHRcdG5hbWU6IHRoaXMubmFtZVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0dGhpcy5vbkNoYW5nZShyb3cudmFsdWUpO1xuXHRcdFx0XHR0aGlzLndyaXRlVmFsdWUocm93LnZhbHVlKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdHRoaXMudXBkYXRlQ2hpbGRyZW4oKTtcblx0fVxuXG5cdHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuXHRcdGlmICghdGhpcy5yb3dzKSB7IHJldHVybjsgfVxuXHRcdHRoaXMucm93cy5mb3JFYWNoKHJvdyA9PiB7XG5cdFx0XHRpZiAocm93LnZhbHVlID09PSB2YWx1ZSkge1xuXHRcdFx0XHRyb3cuc2VsZWN0ZWQgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cm93LnNlbGVjdGVkID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRyZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcblx0XHR0aGlzLm9uQ2hhbmdlID0gZm47XG5cdH1cblxuXHRyZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG5cdFx0dGhpcy5vblRvdWNoZWQgPSBmbjtcblx0fVxuXG5cdHByb3RlY3RlZCB1cGRhdGVDaGlsZHJlbigpIHtcblx0XHRpZiAodGhpcy5oZWFkZXJzKSB7XG5cdFx0XHR0aGlzLmhlYWRlcnMudG9BcnJheSgpLmZvckVhY2goY2hpbGQgPT4gY2hpbGQuc2tlbGV0b24gPSB0aGlzLnNrZWxldG9uKTtcblx0XHR9XG5cdH1cbn1cbiJdfQ==