@dereekb/dbx-web 12.2.0 → 12.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -16,6 +16,7 @@ export * from './table.item.cell.component';
16
16
  export * from './table.item.directive';
17
17
  export * from './table.item.header.component';
18
18
  export * from './table.module';
19
+ export * from './table.reader';
19
20
  export * from './table.store';
20
21
  export * from './table';
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtd2ViL3RhYmxlL3NyYy9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9kYXRlJztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuY2VsbC5hY3Rpb24uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuY2VsbC5pbnB1dC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5jZWxsLnN1bW1hcnllbmQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuY2VsbC5zdW1tYXJ5c3RhcnQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuY29sdW1uLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLmNvbHVtbi5oZWFkZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuY29sdW1uLmZvb3Rlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5ncm91cC5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5ncm91cC5oZWFkZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuZ3JvdXAuZm9vdGVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLml0ZW0uYWN0aW9uLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLml0ZW0uY2VsbC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5pdGVtLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLml0ZW0uaGVhZGVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLnN0b3JlJztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUnO1xuIl19
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtd2ViL3RhYmxlL3NyYy9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2RhdGUnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5jZWxsLmFjdGlvbi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5jZWxsLmlucHV0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLmNlbGwuc3VtbWFyeWVuZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5jZWxsLnN1bW1hcnlzdGFydC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5jb2x1bW4uZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuY29sdW1uLmhlYWRlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5jb2x1bW4uZm9vdGVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLmdyb3VwLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLmdyb3VwLmhlYWRlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5ncm91cC5mb290ZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuaXRlbS5hY3Rpb24uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuaXRlbS5jZWxsLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLml0ZW0uZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuaXRlbS5oZWFkZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUucmVhZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuc3RvcmUnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZSc7XG4iXX0=
@@ -1,11 +1,11 @@
1
- import { ChangeDetectionStrategy, Component, inject, computed, input } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, inject, computed, input, viewChild } from '@angular/core';
2
2
  import { toSignal } from '@angular/core/rxjs-interop';
3
3
  import { DbxTableStore } from './table.store';
4
4
  import { loadingStateContext, mapLoadingStateValueWithOperator, valueFromFinishedLoadingState } from '@dereekb/rxjs';
5
- import { shareReplay, map, switchMap } from 'rxjs';
5
+ import { shareReplay, map, switchMap, throttleTime } from 'rxjs';
6
6
  import { DbxLoadingComponent } from '@dereekb/dbx-web';
7
7
  import { InfiniteScrollDirective } from 'ngx-infinite-scroll';
8
- import { MatTableModule } from '@angular/material/table';
8
+ import { MatTable, MatTableModule } from '@angular/material/table';
9
9
  import { DbxTableInputCellComponent } from './table.cell.input.component';
10
10
  import { DbxTableSummaryEndCellComponent } from './table.cell.summaryend.component';
11
11
  import { DbxTableSummaryStartCellComponent } from './table.cell.summarystart.component';
@@ -36,7 +36,7 @@ export function isDbxTableViewItemElement(element) {
36
36
  */
37
37
  export class DbxTableViewComponent {
38
38
  tableStore = inject((DbxTableStore));
39
- // readonly table = viewChild.required<MatTable<DbxTableViewElement<T, G>>>(MatTable);
39
+ table = viewChild.required(MatTable);
40
40
  DEFAULT_TRACK_BY_FUNCTION = (index) => {
41
41
  return index;
42
42
  };
@@ -89,7 +89,7 @@ export class DbxTableViewComponent {
89
89
  .flat();
90
90
  }));
91
91
  })), shareReplay(1));
92
- elements$ = this.elementsState$.pipe(valueFromFinishedLoadingState([]), shareReplay(1));
92
+ elements$ = this.elementsState$.pipe(valueFromFinishedLoadingState(() => []), throttleTime(50, undefined, { leading: true, trailing: true }), shareReplay(1));
93
93
  displayedColumns$ = this.innerColumnNames$.pipe(map((columnNames) => {
94
94
  return [this.itemsColumnName, ...columnNames, this.actionsColumnName];
95
95
  }), shareReplay(1));
@@ -147,7 +147,7 @@ export class DbxTableViewComponent {
147
147
  return viewDelegate?.fullSummaryRow != null;
148
148
  });
149
149
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxTableViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
150
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxTableViewComponent, isStandalone: true, selector: "dbx-table-view", inputs: { scrollDistance: { classPropertyName: "scrollDistance", publicName: "scrollDistance", isSignal: true, isRequired: false, transformFunction: null }, throttleScroll: { classPropertyName: "throttleScroll", publicName: "throttleScroll", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<dbx-loading [context]=\"context\">\n <dbx-loading class=\"dbx-table-view-loading\" [linear]=\"true\" [context]=\"dataLoadingContext\"></dbx-loading>\n <section class=\"dbx-table-view\" dbx-column-size #columnSize=\"dbxColumnSize\" infinite-scroll [infiniteScrollDistance]=\"scrollDistance()\" [infiniteScrollThrottle]=\"throttleScroll()\" [scrollWindow]=\"false\" (scrolled)=\"onScrollDown()\">\n <table class=\"dbx-table-view-table\" mat-table recycleRows [dataSource]=\"elementsSignal()\" [trackBy]=\"trackElementByFunctionSignal()\" multiTemplateDataRows>\n <!-- Groups -->\n <!-- Group Header column -->\n <ng-container matColumnDef=\"groupHeaderColumn\" [sticky]=\"true\">\n <td mat-cell [attr.colspan]=\"columnSize.visibleColumnsSignal()\" *matCellDef=\"let element\">\n <dbx-table-group-header [group]=\"element.group\"></dbx-table-group-header>\n </td>\n </ng-container>\n\n <!-- Group Footer column -->\n <ng-container matColumnDef=\"groupFooterColumn\" [sticky]=\"true\">\n <td mat-cell [attr.colspan]=\"columnSize.visibleColumnsSignal()\" *matCellDef=\"let element\">\n <dbx-table-group-footer [group]=\"element.group\"></dbx-table-group-footer>\n </td>\n </ng-container>\n\n <!-- Items -->\n <!-- Header/Item column -->\n <ng-container [matColumnDef]=\"itemsColumnName\" [sticky]=\"true\">\n <th dbx-column-size-column=\"head\" mat-header-cell *matHeaderCellDef>\n <dbx-table-input-cell></dbx-table-input-cell>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-header [item]=\"element.item\"></dbx-table-item-header>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-summary-start-cell></dbx-table-summary-start-cell>\n </td>\n </ng-container>\n\n <!-- Column Definitions -->\n @for (column of innerColumnsSignal(); track column.columnName) {\n <ng-container [matColumnDef]=\"column.columnName\" [sticky]=\"false\">\n <th [dbx-column-size-column]=\"$index\" mat-header-cell *matHeaderCellDef>\n <dbx-table-column-header [column]=\"column\"></dbx-table-column-header>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-cell [item]=\"element.item\" [column]=\"column\"></dbx-table-item-cell>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-column-footer [column]=\"column\"></dbx-table-column-footer>\n </td>\n </ng-container>\n }\n\n <!-- Tail/Action column -->\n <ng-container [matColumnDef]=\"actionsColumnName\" [stickyEnd]=\"true\">\n <th dbx-column-size-column=\"tail\" mat-header-cell *matHeaderCellDef>\n <dbx-table-action-cell></dbx-table-action-cell>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-action [item]=\"element.item\"></dbx-table-item-action>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-summary-end-cell></dbx-table-summary-end-cell>\n </td>\n </ng-container>\n\n <!-- Table View -->\n <tr mat-header-row *matHeaderRowDef=\"displayedColumnsSignal(); sticky: true\"></tr>\n\n <tr mat-row *matRowDef=\"let row; columns: ['groupHeaderColumn']; when: showGroupHeaderRow\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumnsSignal(); when: showItemRow\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['groupFooterColumn']; when: showGroupFooterRow\"></tr>\n\n <tr [ngClass]=\"{ 'dbx-hide': !showFooterRowSignal() }\" mat-footer-row *matFooterRowDef=\"displayedColumnsSignal(); sticky: true\"></tr>\n </table>\n </section>\n <!-- Full summary row -->\n @if (showFullSummaryRowSignal()) {\n <div class=\"mat-mdc-table dbx-table-view-full-summary-row-container\">\n <div class=\"mdc-data-table__cell mat-mdc-row\">\n <dbx-table-full-summary-row></dbx-table-full-summary-row>\n </div>\n </div>\n }\n</dbx-loading>\n", dependencies: [{ kind: "component", type: DbxLoadingComponent, selector: "dbx-loading", inputs: ["padding", "show", "text", "mode", "color", "diameter", "linear", "loading", "error", "context"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i1.MatRecycleRows, selector: "mat-table[recycleRows], table[mat-table][recycleRows]" }, { kind: "directive", type: i1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i1.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i1.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i1.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i1.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "component", type: DbxTableInputCellComponent, selector: "dbx-table-input-cell" }, { kind: "component", type: DbxTableItemHeaderComponent, selector: "dbx-table-item-header" }, { kind: "component", type: DbxTableItemCellComponent, selector: "dbx-table-item-cell", inputs: ["column"] }, { kind: "component", type: DbxTableItemActionComponent, selector: "dbx-table-item-action" }, { kind: "component", type: DbxTableActionCellComponent, selector: "dbx-table-action-cell" }, { kind: "component", type: DbxTableColumnHeaderComponent, selector: "dbx-table-column-header" }, { kind: "component", type: DbxTableColumnFooterComponent, selector: "dbx-table-column-footer" }, { kind: "component", type: DbxTableSummaryStartCellComponent, selector: "dbx-table-summary-start-cell" }, { kind: "component", type: DbxTableSummaryEndCellComponent, selector: "dbx-table-summary-end-cell" }, { kind: "component", type: DbxTableGroupHeaderComponent, selector: "dbx-table-group-header" }, { kind: "component", type: DbxTableGroupFooterComponent, selector: "dbx-table-group-footer" }, { kind: "component", type: DbxTableFullSummaryRowComponent, selector: "dbx-table-full-summary-row" }, { kind: "directive", type: DbxColumnSizeDirective, selector: "[dbx-column-size]", exportAs: ["dbxColumnSize"] }, { kind: "directive", type: DbxColumnSizeColumnDirective, selector: "[dbx-column-size-column]", inputs: ["dbx-column-size-column"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
150
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxTableViewComponent, isStandalone: true, selector: "dbx-table-view", inputs: { scrollDistance: { classPropertyName: "scrollDistance", publicName: "scrollDistance", isSignal: true, isRequired: false, transformFunction: null }, throttleScroll: { classPropertyName: "throttleScroll", publicName: "throttleScroll", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "table", first: true, predicate: MatTable, descendants: true, isSignal: true }], ngImport: i0, template: "<dbx-loading [context]=\"context\">\n <dbx-loading class=\"dbx-table-view-loading\" [linear]=\"true\" [context]=\"dataLoadingContext\"></dbx-loading>\n <section class=\"dbx-table-view\" dbx-column-size #columnSize=\"dbxColumnSize\" infinite-scroll [infiniteScrollDistance]=\"scrollDistance()\" [infiniteScrollThrottle]=\"throttleScroll()\" [scrollWindow]=\"false\" (scrolled)=\"onScrollDown()\">\n <table class=\"dbx-table-view-table\" mat-table [dataSource]=\"elementsSignal()\" [trackBy]=\"trackElementByFunctionSignal()\" multiTemplateDataRows>\n <!-- Groups -->\n <!-- Group Header column -->\n <ng-container matColumnDef=\"groupHeaderColumn\" [sticky]=\"true\">\n <td mat-cell [attr.colspan]=\"columnSize.visibleColumnsSignal()\" *matCellDef=\"let element\">\n <dbx-table-group-header [group]=\"element.group\"></dbx-table-group-header>\n </td>\n </ng-container>\n\n <!-- Group Footer column -->\n <ng-container matColumnDef=\"groupFooterColumn\" [sticky]=\"true\">\n <td mat-cell [attr.colspan]=\"columnSize.visibleColumnsSignal()\" *matCellDef=\"let element\">\n <dbx-table-group-footer [group]=\"element.group\"></dbx-table-group-footer>\n </td>\n </ng-container>\n\n <!-- Items -->\n <!-- Header/Item column -->\n <ng-container [matColumnDef]=\"itemsColumnName\" [sticky]=\"true\">\n <th dbx-column-size-column=\"head\" mat-header-cell *matHeaderCellDef>\n <dbx-table-input-cell></dbx-table-input-cell>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-header [item]=\"element.item\"></dbx-table-item-header>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-summary-start-cell></dbx-table-summary-start-cell>\n </td>\n </ng-container>\n\n <!-- Column Definitions -->\n @for (column of innerColumnsSignal(); track column.columnName) {\n <ng-container [matColumnDef]=\"column.columnName\" [sticky]=\"false\">\n <th [dbx-column-size-column]=\"$index\" mat-header-cell *matHeaderCellDef>\n <dbx-table-column-header [column]=\"column\"></dbx-table-column-header>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-cell [item]=\"element.item\" [column]=\"column\"></dbx-table-item-cell>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-column-footer [column]=\"column\"></dbx-table-column-footer>\n </td>\n </ng-container>\n }\n\n <!-- Tail/Action column -->\n <ng-container [matColumnDef]=\"actionsColumnName\" [stickyEnd]=\"true\">\n <th dbx-column-size-column=\"tail\" mat-header-cell *matHeaderCellDef>\n <dbx-table-action-cell></dbx-table-action-cell>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-action [item]=\"element.item\"></dbx-table-item-action>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-summary-end-cell></dbx-table-summary-end-cell>\n </td>\n </ng-container>\n\n <!-- Table View -->\n <tr mat-header-row *matHeaderRowDef=\"displayedColumnsSignal(); sticky: true\"></tr>\n\n <tr mat-row *matRowDef=\"let row; columns: ['groupHeaderColumn']; when: showGroupHeaderRow\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumnsSignal(); when: showItemRow\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['groupFooterColumn']; when: showGroupFooterRow\"></tr>\n\n <tr [ngClass]=\"{ 'dbx-hide': !showFooterRowSignal() }\" mat-footer-row *matFooterRowDef=\"displayedColumnsSignal(); sticky: true\"></tr>\n </table>\n </section>\n <!-- Full summary row -->\n @if (showFullSummaryRowSignal()) {\n <div class=\"mat-mdc-table dbx-table-view-full-summary-row-container\">\n <div class=\"mdc-data-table__cell mat-mdc-row\">\n <dbx-table-full-summary-row></dbx-table-full-summary-row>\n </div>\n </div>\n }\n</dbx-loading>\n", dependencies: [{ kind: "component", type: DbxLoadingComponent, selector: "dbx-loading", inputs: ["padding", "show", "text", "mode", "color", "diameter", "linear", "loading", "error", "context"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i1.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i1.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i1.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i1.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "component", type: DbxTableInputCellComponent, selector: "dbx-table-input-cell" }, { kind: "component", type: DbxTableItemHeaderComponent, selector: "dbx-table-item-header" }, { kind: "component", type: DbxTableItemCellComponent, selector: "dbx-table-item-cell", inputs: ["column"] }, { kind: "component", type: DbxTableItemActionComponent, selector: "dbx-table-item-action" }, { kind: "component", type: DbxTableActionCellComponent, selector: "dbx-table-action-cell" }, { kind: "component", type: DbxTableColumnHeaderComponent, selector: "dbx-table-column-header" }, { kind: "component", type: DbxTableColumnFooterComponent, selector: "dbx-table-column-footer" }, { kind: "component", type: DbxTableSummaryStartCellComponent, selector: "dbx-table-summary-start-cell" }, { kind: "component", type: DbxTableSummaryEndCellComponent, selector: "dbx-table-summary-end-cell" }, { kind: "component", type: DbxTableGroupHeaderComponent, selector: "dbx-table-group-header" }, { kind: "component", type: DbxTableGroupFooterComponent, selector: "dbx-table-group-footer" }, { kind: "component", type: DbxTableFullSummaryRowComponent, selector: "dbx-table-full-summary-row" }, { kind: "directive", type: DbxColumnSizeDirective, selector: "[dbx-column-size]", exportAs: ["dbxColumnSize"] }, { kind: "directive", type: DbxColumnSizeColumnDirective, selector: "[dbx-column-size-column]", inputs: ["dbx-column-size-column"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
151
151
  }
152
152
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxTableViewComponent, decorators: [{
153
153
  type: Component,
@@ -170,6 +170,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
170
170
  DbxTableFullSummaryRowComponent,
171
171
  DbxColumnSizeDirective,
172
172
  DbxColumnSizeColumnDirective
173
- ], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<dbx-loading [context]=\"context\">\n <dbx-loading class=\"dbx-table-view-loading\" [linear]=\"true\" [context]=\"dataLoadingContext\"></dbx-loading>\n <section class=\"dbx-table-view\" dbx-column-size #columnSize=\"dbxColumnSize\" infinite-scroll [infiniteScrollDistance]=\"scrollDistance()\" [infiniteScrollThrottle]=\"throttleScroll()\" [scrollWindow]=\"false\" (scrolled)=\"onScrollDown()\">\n <table class=\"dbx-table-view-table\" mat-table recycleRows [dataSource]=\"elementsSignal()\" [trackBy]=\"trackElementByFunctionSignal()\" multiTemplateDataRows>\n <!-- Groups -->\n <!-- Group Header column -->\n <ng-container matColumnDef=\"groupHeaderColumn\" [sticky]=\"true\">\n <td mat-cell [attr.colspan]=\"columnSize.visibleColumnsSignal()\" *matCellDef=\"let element\">\n <dbx-table-group-header [group]=\"element.group\"></dbx-table-group-header>\n </td>\n </ng-container>\n\n <!-- Group Footer column -->\n <ng-container matColumnDef=\"groupFooterColumn\" [sticky]=\"true\">\n <td mat-cell [attr.colspan]=\"columnSize.visibleColumnsSignal()\" *matCellDef=\"let element\">\n <dbx-table-group-footer [group]=\"element.group\"></dbx-table-group-footer>\n </td>\n </ng-container>\n\n <!-- Items -->\n <!-- Header/Item column -->\n <ng-container [matColumnDef]=\"itemsColumnName\" [sticky]=\"true\">\n <th dbx-column-size-column=\"head\" mat-header-cell *matHeaderCellDef>\n <dbx-table-input-cell></dbx-table-input-cell>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-header [item]=\"element.item\"></dbx-table-item-header>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-summary-start-cell></dbx-table-summary-start-cell>\n </td>\n </ng-container>\n\n <!-- Column Definitions -->\n @for (column of innerColumnsSignal(); track column.columnName) {\n <ng-container [matColumnDef]=\"column.columnName\" [sticky]=\"false\">\n <th [dbx-column-size-column]=\"$index\" mat-header-cell *matHeaderCellDef>\n <dbx-table-column-header [column]=\"column\"></dbx-table-column-header>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-cell [item]=\"element.item\" [column]=\"column\"></dbx-table-item-cell>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-column-footer [column]=\"column\"></dbx-table-column-footer>\n </td>\n </ng-container>\n }\n\n <!-- Tail/Action column -->\n <ng-container [matColumnDef]=\"actionsColumnName\" [stickyEnd]=\"true\">\n <th dbx-column-size-column=\"tail\" mat-header-cell *matHeaderCellDef>\n <dbx-table-action-cell></dbx-table-action-cell>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-action [item]=\"element.item\"></dbx-table-item-action>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-summary-end-cell></dbx-table-summary-end-cell>\n </td>\n </ng-container>\n\n <!-- Table View -->\n <tr mat-header-row *matHeaderRowDef=\"displayedColumnsSignal(); sticky: true\"></tr>\n\n <tr mat-row *matRowDef=\"let row; columns: ['groupHeaderColumn']; when: showGroupHeaderRow\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumnsSignal(); when: showItemRow\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['groupFooterColumn']; when: showGroupFooterRow\"></tr>\n\n <tr [ngClass]=\"{ 'dbx-hide': !showFooterRowSignal() }\" mat-footer-row *matFooterRowDef=\"displayedColumnsSignal(); sticky: true\"></tr>\n </table>\n </section>\n <!-- Full summary row -->\n @if (showFullSummaryRowSignal()) {\n <div class=\"mat-mdc-table dbx-table-view-full-summary-row-container\">\n <div class=\"mdc-data-table__cell mat-mdc-row\">\n <dbx-table-full-summary-row></dbx-table-full-summary-row>\n </div>\n </div>\n }\n</dbx-loading>\n" }]
173
+ ], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<dbx-loading [context]=\"context\">\n <dbx-loading class=\"dbx-table-view-loading\" [linear]=\"true\" [context]=\"dataLoadingContext\"></dbx-loading>\n <section class=\"dbx-table-view\" dbx-column-size #columnSize=\"dbxColumnSize\" infinite-scroll [infiniteScrollDistance]=\"scrollDistance()\" [infiniteScrollThrottle]=\"throttleScroll()\" [scrollWindow]=\"false\" (scrolled)=\"onScrollDown()\">\n <table class=\"dbx-table-view-table\" mat-table [dataSource]=\"elementsSignal()\" [trackBy]=\"trackElementByFunctionSignal()\" multiTemplateDataRows>\n <!-- Groups -->\n <!-- Group Header column -->\n <ng-container matColumnDef=\"groupHeaderColumn\" [sticky]=\"true\">\n <td mat-cell [attr.colspan]=\"columnSize.visibleColumnsSignal()\" *matCellDef=\"let element\">\n <dbx-table-group-header [group]=\"element.group\"></dbx-table-group-header>\n </td>\n </ng-container>\n\n <!-- Group Footer column -->\n <ng-container matColumnDef=\"groupFooterColumn\" [sticky]=\"true\">\n <td mat-cell [attr.colspan]=\"columnSize.visibleColumnsSignal()\" *matCellDef=\"let element\">\n <dbx-table-group-footer [group]=\"element.group\"></dbx-table-group-footer>\n </td>\n </ng-container>\n\n <!-- Items -->\n <!-- Header/Item column -->\n <ng-container [matColumnDef]=\"itemsColumnName\" [sticky]=\"true\">\n <th dbx-column-size-column=\"head\" mat-header-cell *matHeaderCellDef>\n <dbx-table-input-cell></dbx-table-input-cell>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-header [item]=\"element.item\"></dbx-table-item-header>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-summary-start-cell></dbx-table-summary-start-cell>\n </td>\n </ng-container>\n\n <!-- Column Definitions -->\n @for (column of innerColumnsSignal(); track column.columnName) {\n <ng-container [matColumnDef]=\"column.columnName\" [sticky]=\"false\">\n <th [dbx-column-size-column]=\"$index\" mat-header-cell *matHeaderCellDef>\n <dbx-table-column-header [column]=\"column\"></dbx-table-column-header>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-cell [item]=\"element.item\" [column]=\"column\"></dbx-table-item-cell>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-column-footer [column]=\"column\"></dbx-table-column-footer>\n </td>\n </ng-container>\n }\n\n <!-- Tail/Action column -->\n <ng-container [matColumnDef]=\"actionsColumnName\" [stickyEnd]=\"true\">\n <th dbx-column-size-column=\"tail\" mat-header-cell *matHeaderCellDef>\n <dbx-table-action-cell></dbx-table-action-cell>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-action [item]=\"element.item\"></dbx-table-item-action>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-summary-end-cell></dbx-table-summary-end-cell>\n </td>\n </ng-container>\n\n <!-- Table View -->\n <tr mat-header-row *matHeaderRowDef=\"displayedColumnsSignal(); sticky: true\"></tr>\n\n <tr mat-row *matRowDef=\"let row; columns: ['groupHeaderColumn']; when: showGroupHeaderRow\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumnsSignal(); when: showItemRow\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['groupFooterColumn']; when: showGroupFooterRow\"></tr>\n\n <tr [ngClass]=\"{ 'dbx-hide': !showFooterRowSignal() }\" mat-footer-row *matFooterRowDef=\"displayedColumnsSignal(); sticky: true\"></tr>\n </table>\n </section>\n <!-- Full summary row -->\n @if (showFullSummaryRowSignal()) {\n <div class=\"mat-mdc-table dbx-table-view-full-summary-row-container\">\n <div class=\"mdc-data-table__cell mat-mdc-row\">\n <dbx-table-full-summary-row></dbx-table-full-summary-row>\n </div>\n </div>\n }\n</dbx-loading>\n" }]
174
174
  }] });
175
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi90YWJsZS9zcmMvbGliL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC13ZWIvdGFibGUvc3JjL2xpYi90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFtQixNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNySCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLEVBQWdCLG1CQUFtQixFQUFFLGdDQUFnQyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25JLE9BQU8sRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFjLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUUsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEYsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDeEYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDeEUsT0FBTyxF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QUFDLENBQUM7d0dBaEtRLHFCQUFxQjs0RkFBckIscUJBQXFCLDRYQzlFbEMsc2dJQWdGQSw0Q0R4QkksbUJBQW1CLG1LQUNuQixPQUFPLG9GQUNQLHVCQUF1Qix5V0FDdkIsY0FBYyw2aURBQ2QsMEJBQTBCLGlFQUMxQiwyQkFBMkIsa0VBQzNCLHlCQUF5QixvRkFDekIsMkJBQTJCLGtFQUMzQiwyQkFBMkIsa0VBQzNCLDZCQUE2QixvRUFDN0IsNkJBQTZCLG9FQUM3QixpQ0FBaUMseUVBQ2pDLCtCQUErQix1RUFDL0IsNEJBQTRCLG1FQUM1Qiw0QkFBNEIsbUVBQzVCLCtCQUErQix1RUFDL0Isc0JBQXNCLDJGQUN0Qiw0QkFBNEI7OzRGQUtuQixxQkFBcUI7a0JBMUJqQyxTQUFTOytCQUNFLGdCQUFnQixXQUVqQjt3QkFDUCxtQkFBbUI7d0JBQ25CLE9BQU87d0JBQ1AsdUJBQXVCO3dCQUN2QixjQUFjO3dCQUNkLDBCQUEwQjt3QkFDMUIsMkJBQTJCO3dCQUMzQix5QkFBeUI7d0JBQ3pCLDJCQUEyQjt3QkFDM0IsMkJBQTJCO3dCQUMzQiw2QkFBNkI7d0JBQzdCLDZCQUE2Qjt3QkFDN0IsaUNBQWlDO3dCQUNqQywrQkFBK0I7d0JBQy9CLDRCQUE0Qjt3QkFDNUIsNEJBQTRCO3dCQUM1QiwrQkFBK0I7d0JBQy9CLHNCQUFzQjt3QkFDdEIsNEJBQTRCO3FCQUM3QixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgVHJhY2tCeUZ1bmN0aW9uLCBpbmplY3QsIGNvbXB1dGVkLCBpbnB1dCwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IERieFRhYmxlU3RvcmUgfSBmcm9tICcuL3RhYmxlLnN0b3JlJztcbmltcG9ydCB7IExvYWRpbmdTdGF0ZSwgbG9hZGluZ1N0YXRlQ29udGV4dCwgbWFwTG9hZGluZ1N0YXRlVmFsdWVXaXRoT3BlcmF0b3IsIHZhbHVlRnJvbUZpbmlzaGVkTG9hZGluZ1N0YXRlIH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBzaGFyZVJlcGxheSwgbWFwLCBPYnNlcnZhYmxlLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERieExvYWRpbmdDb21wb25lbnQgfSBmcm9tICdAZGVyZWVrYi9kYngtd2ViJztcbmltcG9ydCB7IEluZmluaXRlU2Nyb2xsRGlyZWN0aXZlIH0gZnJvbSAnbmd4LWluZmluaXRlLXNjcm9sbCc7XG5pbXBvcnQgeyBNYXRUYWJsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IERieFRhYmxlSW5wdXRDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5jZWxsLmlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYnhUYWJsZVN1bW1hcnlFbmRDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5jZWxsLnN1bW1hcnllbmQuY29tcG9uZW50JztcbmltcG9ydCB7IERieFRhYmxlU3VtbWFyeVN0YXJ0Q2VsbENvbXBvbmVudCB9IGZyb20gJy4vdGFibGUuY2VsbC5zdW1tYXJ5c3RhcnQuY29tcG9uZW50JztcbmltcG9ydCB7IERieFRhYmxlQ29sdW1uRm9vdGVyQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5jb2x1bW4uZm9vdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYnhUYWJsZUl0ZW1DZWxsQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5pdGVtLmNlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IERieFRhYmxlSXRlbUhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vdGFibGUuaXRlbS5oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IERieFRhYmxlSXRlbUFjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vdGFibGUuaXRlbS5hY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7IERieFRhYmxlQWN0aW9uQ2VsbENvbXBvbmVudCB9IGZyb20gJy4vdGFibGUuY2VsbC5hY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7IERieFRhYmxlQ29sdW1uSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5jb2x1bW4uaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYnhUYWJsZUl0ZW1Hcm91cCwgRGVmYXVsdERieFRhYmxlSXRlbUdyb3VwIH0gZnJvbSAnLi90YWJsZSc7XG5pbXBvcnQgeyBEYnhUYWJsZUdyb3VwSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5ncm91cC5oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IERieFRhYmxlR3JvdXBGb290ZXJDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLmdyb3VwLmZvb3Rlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgcHVzaEFycmF5SXRlbXNJbnRvQXJyYXkgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCB7IE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRGJ4VGFibGVGdWxsU3VtbWFyeVJvd0NvbXBvbmVudCB9IGZyb20gJy4vdGFibGUuZnVsbHN1bW1hcnlyb3cuY29tcG9uZW50JztcbmltcG9ydCB7IERieENvbHVtblNpemVEaXJlY3RpdmUsIERieENvbHVtblNpemVDb2x1bW5EaXJlY3RpdmUgfSBmcm9tICcuL3RhYmxlLmNvbHVtbi5zaXplLmRpcmVjdGl2ZSc7XG5cbmV4cG9ydCBjb25zdCBEQlhfVEFCTEVfSVRFTVNfQ09MVU1OX05BTUUgPSAnX2l0ZW1zJztcbmV4cG9ydCBjb25zdCBEQlhfVEFCTEVfQUNUSU9OU19DT0xVTU5fTkFNRSA9ICdfYWN0aW9ucyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4VGFibGVWaWV3R3JvdXBFbGVtZW50PFQsIEc+IHtcbiAgcmVhZG9ubHkgdHlwZTogJ2dyb3VwJztcbiAgcmVhZG9ubHkgbG9jYXRpb246ICdoZWFkZXInIHwgJ2Zvb3Rlcic7XG4gIHJlYWRvbmx5IGdyb3VwOiBEYnhUYWJsZUl0ZW1Hcm91cDxULCBHPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYnhUYWJsZVZpZXdJdGVtRWxlbWVudDxULCBHPiB7XG4gIHJlYWRvbmx5IHR5cGU6ICdpdGVtJztcbiAgcmVhZG9ubHkgaXRlbTogVDtcbn1cblxuZXhwb3J0IHR5cGUgRGJ4VGFibGVWaWV3RWxlbWVudDxULCBHPiA9IERieFRhYmxlVmlld0dyb3VwRWxlbWVudDxULCBHPiB8IERieFRhYmxlVmlld0l0ZW1FbGVtZW50PFQsIEc+O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNEYnhUYWJsZVZpZXdHcm91cEVsZW1lbnQ8VCwgRz4oZWxlbWVudDogRGJ4VGFibGVWaWV3RWxlbWVudDxULCBHPik6IGVsZW1lbnQgaXMgRGJ4VGFibGVWaWV3R3JvdXBFbGVtZW50PFQsIEc+IHtcbiAgcmV0dXJuIGVsZW1lbnQudHlwZSA9PT0gJ2dyb3VwJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGJ4VGFibGVWaWV3SXRlbUVsZW1lbnQ8VCwgRz4oZWxlbWVudDogRGJ4VGFibGVWaWV3RWxlbWVudDxULCBHPik6IGVsZW1lbnQgaXMgRGJ4VGFibGVWaWV3SXRlbUVsZW1lbnQ8VCwgRz4ge1xuICByZXR1cm4gZWxlbWVudC50eXBlID09PSAnaXRlbSc7XG59XG5cbi8qKlxuICogQSB0YWJsZSB3aXRoIGZpeGVkIGNvbnRlbnRcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGJ4LXRhYmxlLXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBpbXBvcnRzOiBbXG4gICAgRGJ4TG9hZGluZ0NvbXBvbmVudCxcbiAgICBOZ0NsYXNzLFxuICAgIEluZmluaXRlU2Nyb2xsRGlyZWN0aXZlLFxuICAgIE1hdFRhYmxlTW9kdWxlLFxuICAgIERieFRhYmxlSW5wdXRDZWxsQ29tcG9uZW50LFxuICAgIERieFRhYmxlSXRlbUhlYWRlckNvbXBvbmVudCxcbiAgICBEYnhUYWJsZUl0ZW1DZWxsQ29tcG9uZW50LFxuICAgIERieFRhYmxlSXRlbUFjdGlvbkNvbXBvbmVudCxcbiAgICBEYnhUYWJsZUFjdGlvbkNlbGxDb21wb25lbnQsXG4gICAgRGJ4VGFibGVDb2x1bW5IZWFkZXJDb21wb25lbnQsXG4gICAgRGJ4VGFibGVDb2x1bW5Gb290ZXJDb21wb25lbnQsXG4gICAgRGJ4VGFibGVTdW1tYXJ5U3RhcnRDZWxsQ29tcG9uZW50LFxuICAgIERieFRhYmxlU3VtbWFyeUVuZENlbGxDb21wb25lbnQsXG4gICAgRGJ4VGFibGVHcm91cEhlYWRlckNvbXBvbmVudCxcbiAgICBEYnhUYWJsZUdyb3VwRm9vdGVyQ29tcG9uZW50LFxuICAgIERieFRhYmxlRnVsbFN1bW1hcnlSb3dDb21wb25lbnQsXG4gICAgRGJ4Q29sdW1uU2l6ZURpcmVjdGl2ZSxcbiAgICBEYnhDb2x1bW5TaXplQ29sdW1uRGlyZWN0aXZlXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIERieFRhYmxlVmlld0NvbXBvbmVudDxJLCBDLCBULCBHID0gdW5rbm93bj4ge1xuICByZWFkb25seSB0YWJsZVN0b3JlID0gaW5qZWN0KERieFRhYmxlU3RvcmU8SSwgQywgVCwgRz4pO1xuICAvLyByZWFkb25seSB0YWJsZSA9IHZpZXdDaGlsZC5yZXF1aXJlZDxNYXRUYWJsZTxEYnhUYWJsZVZpZXdFbGVtZW50PFQsIEc+Pj4oTWF0VGFibGUpO1xuXG4gIHJlYWRvbmx5IERFRkFVTFRfVFJBQ0tfQllfRlVOQ1RJT046IFRyYWNrQnlGdW5jdGlvbjxhbnk+ID0gKGluZGV4KSA9PiB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9O1xuXG4gIHJlYWRvbmx5IHNjcm9sbERpc3RhbmNlID0gaW5wdXQ8bnVtYmVyPigwLjUpO1xuICByZWFkb25seSB0aHJvdHRsZVNjcm9sbCA9IGlucHV0PG51bWJlcj4oNTApO1xuXG4gIHJlYWRvbmx5IGl0ZW1zQ29sdW1uTmFtZSA9IERCWF9UQUJMRV9JVEVNU19DT0xVTU5fTkFNRTtcbiAgcmVhZG9ubHkgYWN0aW9uc0NvbHVtbk5hbWUgPSBEQlhfVEFCTEVfQUNUSU9OU19DT0xVTU5fTkFNRTtcblxuICByZWFkb25seSBpbm5lckNvbHVtbnMkID0gdGhpcy50YWJsZVN0b3JlLmNvbHVtbnMkO1xuICByZWFkb25seSBpbm5lckNvbHVtbk5hbWVzJCA9IHRoaXMuaW5uZXJDb2x1bW5zJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5tYXAoKHkpID0+IHkuY29sdW1uTmFtZSkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaW5uZXJDb2x1bW5zU2lnbmFsID0gdG9TaWduYWwodGhpcy5pbm5lckNvbHVtbnMkKTtcbiAgcmVhZG9ubHkgaW5uZXJDb2x1bW5OYW1lc1NpZ25hbCA9IHRvU2lnbmFsKHRoaXMuaW5uZXJDb2x1bW5OYW1lcyQpO1xuXG4gIHJlYWRvbmx5IGVsZW1lbnRzU3RhdGUkOiBPYnNlcnZhYmxlPExvYWRpbmdTdGF0ZTxEYnhUYWJsZVZpZXdFbGVtZW50PFQsIEc+W10+PiA9IHRoaXMudGFibGVTdG9yZS5ncm91cHNTdGF0ZSQucGlwZShcbiAgICBtYXBMb2FkaW5nU3RhdGVWYWx1ZVdpdGhPcGVyYXRvcihcbiAgICAgIHN3aXRjaE1hcCgoZ3JvdXBzKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhYmxlU3RvcmUudmlld0RlbGVnYXRlJC5waXBlKFxuICAgICAgICAgIG1hcCgodmlld0RlbGVnYXRlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGdyb3VwSGVhZGVyOiBpbnB1dEdyb3VwSGVhZGVyLCBncm91cEZvb3RlcjogaW5wdXRHcm91cEZvb3RlciB9ID0gdmlld0RlbGVnYXRlO1xuICAgICAgICAgICAgY29uc3QgaGFzR3JvdXBIZWFkZXIgPSBpbnB1dEdyb3VwSGVhZGVyICE9IG51bGwgPyAoZ3JvdXA6IERieFRhYmxlSXRlbUdyb3VwPFQsIEc+KSA9PiBpbnB1dEdyb3VwSGVhZGVyKGdyb3VwKSAhPSBudWxsIDogKCkgPT4gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBoYXNHcm91cEZvb3RlciA9IGlucHV0R3JvdXBGb290ZXIgIT0gbnVsbCA/IChncm91cDogRGJ4VGFibGVJdGVtR3JvdXA8VCwgRz4pID0+IGlucHV0R3JvdXBGb290ZXIoZ3JvdXApICE9IG51bGwgOiAoKSA9PiBmYWxzZTtcblxuICAgICAgICAgICAgcmV0dXJuIGdyb3Vwc1xuICAgICAgICAgICAgICAubWFwKChncm91cCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgaXRlbXMgfSA9IGdyb3VwO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbUVsZW1lbnRzOiBEYnhUYWJsZVZpZXdJdGVtRWxlbWVudDxULCBHPltdID0gaXRlbXMubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ2l0ZW0nLFxuICAgICAgICAgICAgICAgICAgaXRlbVxuICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50czogRGJ4VGFibGVWaWV3RWxlbWVudDxULCBHPltdO1xuXG4gICAgICAgICAgICAgICAgaWYgKChncm91cCBhcyBEZWZhdWx0RGJ4VGFibGVJdGVtR3JvdXA8VCwgRz4pLmRlZmF1bHQpIHtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnRzID0gaXRlbUVsZW1lbnRzO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXIgPSBoYXNHcm91cEhlYWRlcihncm91cCk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBmb290ZXIgPSBoYXNHcm91cEZvb3Rlcihncm91cCk7XG5cbiAgICAgICAgICAgICAgICAgIGVsZW1lbnRzID0gW107XG5cbiAgICAgICAgICAgICAgICAgIGlmIChoZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2dyb3VwJyxcbiAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjogJ2hlYWRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgZ3JvdXBcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHB1c2hBcnJheUl0ZW1zSW50b0FycmF5KGVsZW1lbnRzLCBpdGVtRWxlbWVudHMpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoZm9vdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdncm91cCcsXG4gICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246ICdmb290ZXInLFxuICAgICAgICAgICAgICAgICAgICAgIGdyb3VwXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50cztcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmZsYXQoKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZWxlbWVudHMkID0gdGhpcy5lbGVtZW50c1N0YXRlJC5waXBlKHZhbHVlRnJvbUZpbmlzaGVkTG9hZGluZ1N0YXRlKFtdKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHJlYWRvbmx5IGRpc3BsYXllZENvbHVtbnMkID0gdGhpcy5pbm5lckNvbHVtbk5hbWVzJC5waXBlKFxuICAgIG1hcCgoY29sdW1uTmFtZXMpID0+IHtcbiAgICAgIHJldHVybiBbdGhpcy5pdGVtc0NvbHVtbk5hbWUsIC4uLmNvbHVtbk5hbWVzLCB0aGlzLmFjdGlvbnNDb2x1bW5OYW1lXTtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRpc3BsYXllZENvbHVtbnNTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY29sdW1uTmFtZXMgPSB0aGlzLmlubmVyQ29sdW1uTmFtZXNTaWduYWwoKSB8fCBbXTtcbiAgICByZXR1cm4gW3RoaXMuaXRlbXNDb2x1bW5OYW1lLCAuLi5jb2x1bW5OYW1lcywgdGhpcy5hY3Rpb25zQ29sdW1uTmFtZV07XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHZpc2libGVDb2x1bW5zU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGRpc3BsYXllZENvbHVtbnMgPSB0aGlzLmRpc3BsYXllZENvbHVtbnNTaWduYWwoKTtcblxuICAgIC8vIFRPRE86IEV2ZXJ5IHRpbWUgdGhlIHRhYmxlIGlzIHJlbmRlcmVkL3NpemUgY2hhbmdlcy9ldGMgd2Ugc2hvdWxkIHJlY29tcHV0ZSB3aWR0aCBvZiB0aGUgZmlyc3QgbiBjb2x1bW5zIHRoYXQgc3BhbiB0aGUgdmlld3BvcnRcbiAgICAvLyBpbiBvcmRlciB0byBjYWxjdWxhdGUgYSBjb2xzcGFuIGZvciB0aGUgZ3JvdXAgaGVhZGVyL2Zvb3RlciB0aGF0IGlzIG5vdCBncmVhdGVyIHRoYW4gc3BhbiBvZiB0aGUgdGFibGUgZm9yIGEgZ2l2ZW4gdmlldyBzaXplXG4gICAgLy8gSS5FLiBpZiB0aGUgc2NyZWVuIHNocmlua3MgdG8gb25seSBzaG93IHRoZSBmaXJzdCA0IGNvbHVtbnMsIHRoZW4gdGhlIGNvbHNwYW4gc2hvdWxkIGJlIDQuXG5cbiAgICAvLyBhcyBhIHRlbXBvcmFyeSBtZWFzdXJlLCB3ZSBqdXN0IHNob3cgaGFsZiB0aGUgY29sdW1uc1xuXG4gICAgcmV0dXJuIGRpc3BsYXllZENvbHVtbnMubGVuZ3RoIC8gMjtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgdHJhY2tCeUZ1bmN0aW9uJDogT2JzZXJ2YWJsZTxUcmFja0J5RnVuY3Rpb248VD4+ID0gdGhpcy50YWJsZVN0b3JlLnZpZXdEZWxlZ2F0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgudHJhY2tCeSA/PyB0aGlzLkRFRkFVTFRfVFJBQ0tfQllfRlVOQ1RJT04pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaW5wdXRUcmFja0J5RnVuY3Rpb25TaWduYWwgPSB0b1NpZ25hbCh0aGlzLnRyYWNrQnlGdW5jdGlvbiQsIHsgaW5pdGlhbFZhbHVlOiB0aGlzLkRFRkFVTFRfVFJBQ0tfQllfRlVOQ1RJT04gfSk7XG4gIHJlYWRvbmx5IHRyYWNrRWxlbWVudEJ5RnVuY3Rpb25TaWduYWw6IFNpZ25hbDxUcmFja0J5RnVuY3Rpb248RGJ4VGFibGVWaWV3RWxlbWVudDxULCBHPj4+ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHRyYWNrQnlGdW5jdGlvbiA9IHRoaXMuaW5wdXRUcmFja0J5RnVuY3Rpb25TaWduYWwoKSBhcyBUcmFja0J5RnVuY3Rpb248VD47XG5cbiAgICBjb25zdCBmbjogVHJhY2tCeUZ1bmN0aW9uPERieFRhYmxlVmlld0VsZW1lbnQ8VCwgRz4+ID0gKGluZGV4OiBudW1iZXIsIGVsZW1lbnQ6IERieFRhYmxlVmlld0VsZW1lbnQ8VCwgRz4pID0+IHtcbiAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdpdGVtJykge1xuICAgICAgICByZXR1cm4gYGlfJHt0cmFja0J5RnVuY3Rpb24oaW5kZXgsIGVsZW1lbnQuaXRlbSBhcyBUKX1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGBnXyR7ZWxlbWVudC5ncm91cC5ncm91cElkfWA7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBmbjtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgY29udGV4dCA9IGxvYWRpbmdTdGF0ZUNvbnRleHQoeyBvYnM6IHRoaXMudGFibGVTdG9yZS5kYXRhU3RhdGUkIH0pO1xuICByZWFkb25seSBkYXRhTG9hZGluZ0NvbnRleHQgPSBsb2FkaW5nU3RhdGVDb250ZXh0KHsgb2JzOiB0aGlzLmVsZW1lbnRzU3RhdGUkIH0pO1xuXG4gIHJlYWRvbmx5IGNvbnRleHRTaWduYWwgPSB0b1NpZ25hbCh0aGlzLmNvbnRleHQuc3RhdGUkKTtcbiAgcmVhZG9ubHkgZGF0YUxvYWRpbmdDb250ZXh0U2lnbmFsID0gdG9TaWduYWwodGhpcy5kYXRhTG9hZGluZ0NvbnRleHQuc3RhdGUkKTtcblxuICByZWFkb25seSB2aWV3RGVsZWdhdGVTaWduYWwgPSB0b1NpZ25hbCh0aGlzLnRhYmxlU3RvcmUudmlld0RlbGVnYXRlJCk7XG4gIHJlYWRvbmx5IGVsZW1lbnRzU2lnbmFsID0gdG9TaWduYWwodGhpcy5lbGVtZW50cyQsIHsgaW5pdGlhbFZhbHVlOiBbXSB9KTtcblxuICBvblNjcm9sbERvd24oKTogdm9pZCB7XG4gICAgdGhpcy50YWJsZVN0b3JlLmxvYWRNb3JlKCk7XG4gIH1cblxuICBzaG93SXRlbVJvdyhfOiBudW1iZXIsIHJvdzogRGJ4VGFibGVWaWV3RWxlbWVudDxULCBHPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiByb3cudHlwZSA9PT0gJ2l0ZW0nO1xuICB9XG5cbiAgc2hvd0dyb3VwSGVhZGVyUm93KF86IG51bWJlciwgcm93OiBEYnhUYWJsZVZpZXdFbGVtZW50PFQsIEc+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHJvdy50eXBlID09PSAnZ3JvdXAnICYmIHJvdy5sb2NhdGlvbiA9PT0gJ2hlYWRlcic7XG4gIH1cblxuICBzaG93R3JvdXBGb290ZXJSb3coXzogbnVtYmVyLCByb3c6IERieFRhYmxlVmlld0VsZW1lbnQ8VCwgRz4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gcm93LnR5cGUgPT09ICdncm91cCcgJiYgcm93LmxvY2F0aW9uID09PSAnZm9vdGVyJztcbiAgfVxuXG4gIHJlYWRvbmx5IHNob3dGb290ZXJSb3dTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgdmlld0RlbGVnYXRlID0gdGhpcy52aWV3RGVsZWdhdGVTaWduYWwoKTtcbiAgICBjb25zdCBzaG93Rm9vdGVyUm93ID0gdmlld0RlbGVnYXRlICYmICh2aWV3RGVsZWdhdGUuc3VtbWFyeVJvd0hlYWRlciAhPSBudWxsIHx8IHZpZXdEZWxlZ2F0ZS5jb2x1bW5Gb290ZXIgIT0gbnVsbCB8fCB2aWV3RGVsZWdhdGUuc3VtbWFyeVJvd0VuZCAhPSBudWxsKTtcbiAgICByZXR1cm4gc2hvd0Zvb3RlclJvdztcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2hvd0Z1bGxTdW1tYXJ5Um93U2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHZpZXdEZWxlZ2F0ZSA9IHRoaXMudmlld0RlbGVnYXRlU2lnbmFsKCk7XG4gICAgcmV0dXJuIHZpZXdEZWxlZ2F0ZT8uZnVsbFN1bW1hcnlSb3cgIT0gbnVsbDtcbiAgfSk7XG59XG4iLCI8ZGJ4LWxvYWRpbmcgW2NvbnRleHRdPVwiY29udGV4dFwiPlxuICA8ZGJ4LWxvYWRpbmcgY2xhc3M9XCJkYngtdGFibGUtdmlldy1sb2FkaW5nXCIgW2xpbmVhcl09XCJ0cnVlXCIgW2NvbnRleHRdPVwiZGF0YUxvYWRpbmdDb250ZXh0XCI+PC9kYngtbG9hZGluZz5cbiAgPHNlY3Rpb24gY2xhc3M9XCJkYngtdGFibGUtdmlld1wiIGRieC1jb2x1bW4tc2l6ZSAjY29sdW1uU2l6ZT1cImRieENvbHVtblNpemVcIiBpbmZpbml0ZS1zY3JvbGwgW2luZmluaXRlU2Nyb2xsRGlzdGFuY2VdPVwic2Nyb2xsRGlzdGFuY2UoKVwiIFtpbmZpbml0ZVNjcm9sbFRocm90dGxlXT1cInRocm90dGxlU2Nyb2xsKClcIiBbc2Nyb2xsV2luZG93XT1cImZhbHNlXCIgKHNjcm9sbGVkKT1cIm9uU2Nyb2xsRG93bigpXCI+XG4gICAgPHRhYmxlIGNsYXNzPVwiZGJ4LXRhYmxlLXZpZXctdGFibGVcIiBtYXQtdGFibGUgcmVjeWNsZVJvd3MgW2RhdGFTb3VyY2VdPVwiZWxlbWVudHNTaWduYWwoKVwiIFt0cmFja0J5XT1cInRyYWNrRWxlbWVudEJ5RnVuY3Rpb25TaWduYWwoKVwiIG11bHRpVGVtcGxhdGVEYXRhUm93cz5cbiAgICAgIDwhLS0gR3JvdXBzIC0tPlxuICAgICAgPCEtLSBHcm91cCBIZWFkZXIgY29sdW1uIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJncm91cEhlYWRlckNvbHVtblwiIFtzdGlja3ldPVwidHJ1ZVwiPlxuICAgICAgICA8dGQgbWF0LWNlbGwgW2F0dHIuY29sc3Bhbl09XCJjb2x1bW5TaXplLnZpc2libGVDb2x1bW5zU2lnbmFsKClcIiAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAgPGRieC10YWJsZS1ncm91cC1oZWFkZXIgW2dyb3VwXT1cImVsZW1lbnQuZ3JvdXBcIj48L2RieC10YWJsZS1ncm91cC1oZWFkZXI+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBHcm91cCBGb290ZXIgY29sdW1uIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJncm91cEZvb3RlckNvbHVtblwiIFtzdGlja3ldPVwidHJ1ZVwiPlxuICAgICAgICA8dGQgbWF0LWNlbGwgW2F0dHIuY29sc3Bhbl09XCJjb2x1bW5TaXplLnZpc2libGVDb2x1bW5zU2lnbmFsKClcIiAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAgPGRieC10YWJsZS1ncm91cC1mb290ZXIgW2dyb3VwXT1cImVsZW1lbnQuZ3JvdXBcIj48L2RieC10YWJsZS1ncm91cC1mb290ZXI+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBJdGVtcyAtLT5cbiAgICAgIDwhLS0gSGVhZGVyL0l0ZW0gY29sdW1uIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cIml0ZW1zQ29sdW1uTmFtZVwiIFtzdGlja3ldPVwidHJ1ZVwiPlxuICAgICAgICA8dGggZGJ4LWNvbHVtbi1zaXplLWNvbHVtbj1cImhlYWRcIiBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgICAgPGRieC10YWJsZS1pbnB1dC1jZWxsPjwvZGJ4LXRhYmxlLWlucHV0LWNlbGw+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAgPGRieC10YWJsZS1pdGVtLWhlYWRlciBbaXRlbV09XCJlbGVtZW50Lml0ZW1cIj48L2RieC10YWJsZS1pdGVtLWhlYWRlcj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj5cbiAgICAgICAgICA8ZGJ4LXRhYmxlLXN1bW1hcnktc3RhcnQtY2VsbD48L2RieC10YWJsZS1zdW1tYXJ5LXN0YXJ0LWNlbGw+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBDb2x1bW4gRGVmaW5pdGlvbnMgLS0+XG4gICAgICBAZm9yIChjb2x1bW4gb2YgaW5uZXJDb2x1bW5zU2lnbmFsKCk7IHRyYWNrIGNvbHVtbi5jb2x1bW5OYW1lKSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4uY29sdW1uTmFtZVwiIFtzdGlja3ldPVwiZmFsc2VcIj5cbiAgICAgICAgICA8dGggW2RieC1jb2x1bW4tc2l6ZS1jb2x1bW5dPVwiJGluZGV4XCIgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxuICAgICAgICAgICAgPGRieC10YWJsZS1jb2x1bW4taGVhZGVyIFtjb2x1bW5dPVwiY29sdW1uXCI+PC9kYngtdGFibGUtY29sdW1uLWhlYWRlcj5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAgICA8ZGJ4LXRhYmxlLWl0ZW0tY2VsbCBbaXRlbV09XCJlbGVtZW50Lml0ZW1cIiBbY29sdW1uXT1cImNvbHVtblwiPjwvZGJ4LXRhYmxlLWl0ZW0tY2VsbD5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+XG4gICAgICAgICAgICA8ZGJ4LXRhYmxlLWNvbHVtbi1mb290ZXIgW2NvbHVtbl09XCJjb2x1bW5cIj48L2RieC10YWJsZS1jb2x1bW4tZm9vdGVyPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgfVxuXG4gICAgICA8IS0tIFRhaWwvQWN0aW9uIGNvbHVtbiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJhY3Rpb25zQ29sdW1uTmFtZVwiIFtzdGlja3lFbmRdPVwidHJ1ZVwiPlxuICAgICAgICA8dGggZGJ4LWNvbHVtbi1zaXplLWNvbHVtbj1cInRhaWxcIiBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgICAgPGRieC10YWJsZS1hY3Rpb24tY2VsbD48L2RieC10YWJsZS1hY3Rpb24tY2VsbD5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICA8ZGJ4LXRhYmxlLWl0ZW0tYWN0aW9uIFtpdGVtXT1cImVsZW1lbnQuaXRlbVwiPjwvZGJ4LXRhYmxlLWl0ZW0tYWN0aW9uPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPlxuICAgICAgICAgIDxkYngtdGFibGUtc3VtbWFyeS1lbmQtY2VsbD48L2RieC10YWJsZS1zdW1tYXJ5LWVuZC1jZWxsPlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gVGFibGUgVmlldyAtLT5cbiAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uc1NpZ25hbCgpOyBzdGlja3k6IHRydWVcIj48L3RyPlxuXG4gICAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogWydncm91cEhlYWRlckNvbHVtbiddOyB3aGVuOiBzaG93R3JvdXBIZWFkZXJSb3dcIj48L3RyPlxuICAgICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnNTaWduYWwoKTsgd2hlbjogc2hvd0l0ZW1Sb3dcIj48L3RyPlxuICAgICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IFsnZ3JvdXBGb290ZXJDb2x1bW4nXTsgd2hlbjogc2hvd0dyb3VwRm9vdGVyUm93XCI+PC90cj5cblxuICAgICAgPHRyIFtuZ0NsYXNzXT1cInsgJ2RieC1oaWRlJzogIXNob3dGb290ZXJSb3dTaWduYWwoKSB9XCIgbWF0LWZvb3Rlci1yb3cgKm1hdEZvb3RlclJvd0RlZj1cImRpc3BsYXllZENvbHVtbnNTaWduYWwoKTsgc3RpY2t5OiB0cnVlXCI+PC90cj5cbiAgICA8L3RhYmxlPlxuICA8L3NlY3Rpb24+XG4gIDwhLS0gRnVsbCBzdW1tYXJ5IHJvdyAtLT5cbiAgQGlmIChzaG93RnVsbFN1bW1hcnlSb3dTaWduYWwoKSkge1xuICAgIDxkaXYgY2xhc3M9XCJtYXQtbWRjLXRhYmxlIGRieC10YWJsZS12aWV3LWZ1bGwtc3VtbWFyeS1yb3ctY29udGFpbmVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWRjLWRhdGEtdGFibGVfX2NlbGwgbWF0LW1kYy1yb3dcIj5cbiAgICAgICAgPGRieC10YWJsZS1mdWxsLXN1bW1hcnktcm93PjwvZGJ4LXRhYmxlLWZ1bGwtc3VtbWFyeS1yb3c+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuPC9kYngtbG9hZGluZz5cbiJdfQ==
175
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi90YWJsZS9zcmMvbGliL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC13ZWIvdGFibGUvc3JjL2xpYi90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFtQixNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEksT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxFQUFnQixtQkFBbUIsRUFBRSxnQ0FBZ0MsRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuSSxPQUFPLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBYyxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlELE9BQU8sRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUUsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEYsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDeEYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEYsT0FBTyxFQUFFLHlCQUF5QixFQUFF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TyxhQUFhLENBQUM7SUFDdkIsQ0FBQyxDQUFDLENBQUM7SUFFTSx3QkFBd0IsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ2hELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQy9DLE9BQU8sWUFBWSxFQUFFLGNBQWMsSUFBSSxJQUFJLENBQUM7SUFDOUMsQ0FBQyxDQUFDLENBQUM7d0dBcEtRLHFCQUFxQjs0RkFBckIscUJBQXFCLG1hQUV5QyxRQUFRLGdFQ2hGbkYsMC9IQWdGQSw0Q0R4QkksbUJBQW1CLG1LQUNuQixPQUFPLG9GQUNQLHVCQUF1Qix5V0FDdkIsY0FBYywwN0NBQ2QsMEJBQTBCLGlFQUMxQiwyQkFBMkIsa0VBQzNCLHlCQUF5QixvRkFDekIsMkJBQTJCLGtFQUMzQiwyQkFBMkIsa0VBQzNCLDZCQUE2QixvRUFDN0IsNkJBQTZCLG9FQUM3QixpQ0FBaUMseUVBQ2pDLCtCQUErQix1RUFDL0IsNEJBQTRCLG1FQUM1Qiw0QkFBNEIsbUVBQzVCLCtCQUErQix1RUFDL0Isc0JBQXNCLDJGQUN0Qiw0QkFBNEI7OzRGQUtuQixxQkFBcUI7a0JBMUJqQyxTQUFTOytCQUNFLGdCQUFnQixXQUVqQjt3QkFDUCxtQkFBbUI7d0JBQ25CLE9BQU87d0JBQ1AsdUJBQXVCO3dCQUN2QixjQUFjO3dCQUNkLDBCQUEwQjt3QkFDMUIsMkJBQTJCO3dCQUMzQix5QkFBeUI7d0JBQ3pCLDJCQUEyQjt3QkFDM0IsMkJBQTJCO3dCQUMzQiw2QkFBNkI7d0JBQzdCLDZCQUE2Qjt3QkFDN0IsaUNBQWlDO3dCQUNqQywrQkFBK0I7d0JBQy9CLDRCQUE0Qjt3QkFDNUIsNEJBQTRCO3dCQUM1QiwrQkFBK0I7d0JBQy9CLHNCQUFzQjt3QkFDdEIsNEJBQTRCO3FCQUM3QixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgVHJhY2tCeUZ1bmN0aW9uLCBpbmplY3QsIGNvbXB1dGVkLCBpbnB1dCwgU2lnbmFsLCB2aWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRGJ4VGFibGVTdG9yZSB9IGZyb20gJy4vdGFibGUuc3RvcmUnO1xuaW1wb3J0IHsgTG9hZGluZ1N0YXRlLCBsb2FkaW5nU3RhdGVDb250ZXh0LCBtYXBMb2FkaW5nU3RhdGVWYWx1ZVdpdGhPcGVyYXRvciwgdmFsdWVGcm9tRmluaXNoZWRMb2FkaW5nU3RhdGUgfSBmcm9tICdAZGVyZWVrYi9yeGpzJztcbmltcG9ydCB7IHNoYXJlUmVwbGF5LCBtYXAsIE9ic2VydmFibGUsIHN3aXRjaE1hcCwgdGhyb3R0bGVUaW1lIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEYnhMb2FkaW5nQ29tcG9uZW50IH0gZnJvbSAnQGRlcmVla2IvZGJ4LXdlYic7XG5pbXBvcnQgeyBJbmZpbml0ZVNjcm9sbERpcmVjdGl2ZSB9IGZyb20gJ25neC1pbmZpbml0ZS1zY3JvbGwnO1xuaW1wb3J0IHsgTWF0VGFibGUsIE1hdFRhYmxlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgRGJ4VGFibGVJbnB1dENlbGxDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLmNlbGwuaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IERieFRhYmxlU3VtbWFyeUVuZENlbGxDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLmNlbGwuc3VtbWFyeWVuZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGJ4VGFibGVTdW1tYXJ5U3RhcnRDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5jZWxsLnN1bW1hcnlzdGFydC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGJ4VGFibGVDb2x1bW5Gb290ZXJDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLmNvbHVtbi5mb290ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IERieFRhYmxlSXRlbUNlbGxDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLml0ZW0uY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGJ4VGFibGVJdGVtSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5pdGVtLmhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGJ4VGFibGVJdGVtQWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5pdGVtLmFjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGJ4VGFibGVBY3Rpb25DZWxsQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5jZWxsLmFjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGJ4VGFibGVDb2x1bW5IZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLmNvbHVtbi5oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IERieFRhYmxlSXRlbUdyb3VwLCBEZWZhdWx0RGJ4VGFibGVJdGVtR3JvdXAgfSBmcm9tICcuL3RhYmxlJztcbmltcG9ydCB7IERieFRhYmxlR3JvdXBIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLmdyb3VwLmhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGJ4VGFibGVHcm91cEZvb3RlckNvbXBvbmVudCB9IGZyb20gJy4vdGFibGUuZ3JvdXAuZm9vdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBwdXNoQXJyYXlJdGVtc0ludG9BcnJheSB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEYnhUYWJsZUZ1bGxTdW1tYXJ5Um93Q29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5mdWxsc3VtbWFyeXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGJ4Q29sdW1uU2l6ZURpcmVjdGl2ZSwgRGJ4Q29sdW1uU2l6ZUNvbHVtbkRpcmVjdGl2ZSB9IGZyb20gJy4vdGFibGUuY29sdW1uLnNpemUuZGlyZWN0aXZlJztcblxuZXhwb3J0IGNvbnN0IERCWF9UQUJMRV9JVEVNU19DT0xVTU5fTkFNRSA9ICdfaXRlbXMnO1xuZXhwb3J0IGNvbnN0IERCWF9UQUJMRV9BQ1RJT05TX0NPTFVNTl9OQU1FID0gJ19hY3Rpb25zJztcblxuZXhwb3J0IGludGVyZmFjZSBEYnhUYWJsZVZpZXdHcm91cEVsZW1lbnQ8VCwgRz4ge1xuICByZWFkb25seSB0eXBlOiAnZ3JvdXAnO1xuICByZWFkb25seSBsb2NhdGlvbjogJ2hlYWRlcicgfCAnZm9vdGVyJztcbiAgcmVhZG9ubHkgZ3JvdXA6IERieFRhYmxlSXRlbUdyb3VwPFQsIEc+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERieFRhYmxlVmlld0l0ZW1FbGVtZW50PFQsIEc+IHtcbiAgcmVhZG9ubHkgdHlwZTogJ2l0ZW0nO1xuICByZWFkb25seSBpdGVtOiBUO1xufVxuXG5leHBvcnQgdHlwZSBEYnhUYWJsZVZpZXdFbGVtZW50PFQsIEc+ID0gRGJ4VGFibGVWaWV3R3JvdXBFbGVtZW50PFQsIEc+IHwgRGJ4VGFibGVWaWV3SXRlbUVsZW1lbnQ8VCwgRz47XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RieFRhYmxlVmlld0dyb3VwRWxlbWVudDxULCBHPihlbGVtZW50OiBEYnhUYWJsZVZpZXdFbGVtZW50PFQsIEc+KTogZWxlbWVudCBpcyBEYnhUYWJsZVZpZXdHcm91cEVsZW1lbnQ8VCwgRz4ge1xuICByZXR1cm4gZWxlbWVudC50eXBlID09PSAnZ3JvdXAnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEYnhUYWJsZVZpZXdJdGVtRWxlbWVudDxULCBHPihlbGVtZW50OiBEYnhUYWJsZVZpZXdFbGVtZW50PFQsIEc+KTogZWxlbWVudCBpcyBEYnhUYWJsZVZpZXdJdGVtRWxlbWVudDxULCBHPiB7XG4gIHJldHVybiBlbGVtZW50LnR5cGUgPT09ICdpdGVtJztcbn1cblxuLyoqXG4gKiBBIHRhYmxlIHdpdGggZml4ZWQgY29udGVudFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYngtdGFibGUtdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIGltcG9ydHM6IFtcbiAgICBEYnhMb2FkaW5nQ29tcG9uZW50LFxuICAgIE5nQ2xhc3MsXG4gICAgSW5maW5pdGVTY3JvbGxEaXJlY3RpdmUsXG4gICAgTWF0VGFibGVNb2R1bGUsXG4gICAgRGJ4VGFibGVJbnB1dENlbGxDb21wb25lbnQsXG4gICAgRGJ4VGFibGVJdGVtSGVhZGVyQ29tcG9uZW50LFxuICAgIERieFRhYmxlSXRlbUNlbGxDb21wb25lbnQsXG4gICAgRGJ4VGFibGVJdGVtQWN0aW9uQ29tcG9uZW50LFxuICAgIERieFRhYmxlQWN0aW9uQ2VsbENvbXBvbmVudCxcbiAgICBEYnhUYWJsZUNvbHVtbkhlYWRlckNvbXBvbmVudCxcbiAgICBEYnhUYWJsZUNvbHVtbkZvb3RlckNvbXBvbmVudCxcbiAgICBEYnhUYWJsZVN1bW1hcnlTdGFydENlbGxDb21wb25lbnQsXG4gICAgRGJ4VGFibGVTdW1tYXJ5RW5kQ2VsbENvbXBvbmVudCxcbiAgICBEYnhUYWJsZUdyb3VwSGVhZGVyQ29tcG9uZW50LFxuICAgIERieFRhYmxlR3JvdXBGb290ZXJDb21wb25lbnQsXG4gICAgRGJ4VGFibGVGdWxsU3VtbWFyeVJvd0NvbXBvbmVudCxcbiAgICBEYnhDb2x1bW5TaXplRGlyZWN0aXZlLFxuICAgIERieENvbHVtblNpemVDb2x1bW5EaXJlY3RpdmVcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgRGJ4VGFibGVWaWV3Q29tcG9uZW50PEksIEMsIFQsIEcgPSB1bmtub3duPiB7XG4gIHJlYWRvbmx5IHRhYmxlU3RvcmUgPSBpbmplY3QoRGJ4VGFibGVTdG9yZTxJLCBDLCBULCBHPik7XG4gIHJlYWRvbmx5IHRhYmxlID0gdmlld0NoaWxkLnJlcXVpcmVkPE1hdFRhYmxlPERieFRhYmxlVmlld0VsZW1lbnQ8VCwgRz4+PihNYXRUYWJsZSk7XG5cbiAgcmVhZG9ubHkgREVGQVVMVF9UUkFDS19CWV9GVU5DVElPTjogVHJhY2tCeUZ1bmN0aW9uPGFueT4gPSAoaW5kZXgpID0+IHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH07XG5cbiAgcmVhZG9ubHkgc2Nyb2xsRGlzdGFuY2UgPSBpbnB1dDxudW1iZXI+KDAuNSk7XG4gIHJlYWRvbmx5IHRocm90dGxlU2Nyb2xsID0gaW5wdXQ8bnVtYmVyPig1MCk7XG5cbiAgcmVhZG9ubHkgaXRlbXNDb2x1bW5OYW1lID0gREJYX1RBQkxFX0lURU1TX0NPTFVNTl9OQU1FO1xuICByZWFkb25seSBhY3Rpb25zQ29sdW1uTmFtZSA9IERCWF9UQUJMRV9BQ1RJT05TX0NPTFVNTl9OQU1FO1xuXG4gIHJlYWRvbmx5IGlubmVyQ29sdW1ucyQgPSB0aGlzLnRhYmxlU3RvcmUuY29sdW1ucyQ7XG4gIHJlYWRvbmx5IGlubmVyQ29sdW1uTmFtZXMkID0gdGhpcy5pbm5lckNvbHVtbnMkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Lm1hcCgoeSkgPT4geS5jb2x1bW5OYW1lKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpbm5lckNvbHVtbnNTaWduYWwgPSB0b1NpZ25hbCh0aGlzLmlubmVyQ29sdW1ucyQpO1xuICByZWFkb25seSBpbm5lckNvbHVtbk5hbWVzU2lnbmFsID0gdG9TaWduYWwodGhpcy5pbm5lckNvbHVtbk5hbWVzJCk7XG5cbiAgcmVhZG9ubHkgZWxlbWVudHNTdGF0ZSQ6IE9ic2VydmFibGU8TG9hZGluZ1N0YXRlPERieFRhYmxlVmlld0VsZW1lbnQ8VCwgRz5bXT4+ID0gdGhpcy50YWJsZVN0b3JlLmdyb3Vwc1N0YXRlJC5waXBlKFxuICAgIG1hcExvYWRpbmdTdGF0ZVZhbHVlV2l0aE9wZXJhdG9yKFxuICAgICAgc3dpdGNoTWFwKChncm91cHMpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVTdG9yZS52aWV3RGVsZWdhdGUkLnBpcGUoXG4gICAgICAgICAgbWFwKCh2aWV3RGVsZWdhdGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZ3JvdXBIZWFkZXI6IGlucHV0R3JvdXBIZWFkZXIsIGdyb3VwRm9vdGVyOiBpbnB1dEdyb3VwRm9vdGVyIH0gPSB2aWV3RGVsZWdhdGU7XG4gICAgICAgICAgICBjb25zdCBoYXNHcm91cEhlYWRlciA9IGlucHV0R3JvdXBIZWFkZXIgIT0gbnVsbCA/IChncm91cDogRGJ4VGFibGVJdGVtR3JvdXA8VCwgRz4pID0+IGlucHV0R3JvdXBIZWFkZXIoZ3JvdXApICE9IG51bGwgOiAoKSA9PiBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGhhc0dyb3VwRm9vdGVyID0gaW5wdXRHcm91cEZvb3RlciAhPSBudWxsID8gKGdyb3VwOiBEYnhUYWJsZUl0ZW1Hcm91cDxULCBHPikgPT4gaW5wdXRHcm91cEZvb3Rlcihncm91cCkgIT0gbnVsbCA6ICgpID0+IGZhbHNlO1xuXG4gICAgICAgICAgICByZXR1cm4gZ3JvdXBzXG4gICAgICAgICAgICAgIC5tYXAoKGdyb3VwKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBpdGVtcyB9ID0gZ3JvdXA7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtRWxlbWVudHM6IERieFRhYmxlVmlld0l0ZW1FbGVtZW50PFQsIEc+W10gPSBpdGVtcy5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnaXRlbScsXG4gICAgICAgICAgICAgICAgICBpdGVtXG4gICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnRzOiBEYnhUYWJsZVZpZXdFbGVtZW50PFQsIEc+W107XG5cbiAgICAgICAgICAgICAgICBpZiAoKGdyb3VwIGFzIERlZmF1bHREYnhUYWJsZUl0ZW1Hcm91cDxULCBHPikuZGVmYXVsdCkge1xuICAgICAgICAgICAgICAgICAgZWxlbWVudHMgPSBpdGVtRWxlbWVudHM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlciA9IGhhc0dyb3VwSGVhZGVyKGdyb3VwKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZvb3RlciA9IGhhc0dyb3VwRm9vdGVyKGdyb3VwKTtcblxuICAgICAgICAgICAgICAgICAgZWxlbWVudHMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgaWYgKGhlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZ3JvdXAnLFxuICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOiAnaGVhZGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICBncm91cFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcHVzaEFycmF5SXRlbXNJbnRvQXJyYXkoZWxlbWVudHMsIGl0ZW1FbGVtZW50cyk7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChmb290ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2dyb3VwJyxcbiAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjogJ2Zvb3RlcicsXG4gICAgICAgICAgICAgICAgICAgICAgZ3JvdXBcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuZmxhdCgpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBlbGVtZW50cyQgPSB0aGlzLmVsZW1lbnRzU3RhdGUkLnBpcGUoXG4gICAgdmFsdWVGcm9tRmluaXNoZWRMb2FkaW5nU3RhdGUoKCkgPT4gW10pLFxuICAgIHRocm90dGxlVGltZSg1MCwgdW5kZWZpbmVkLCB7IGxlYWRpbmc6IHRydWUsIHRyYWlsaW5nOiB0cnVlIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZGlzcGxheWVkQ29sdW1ucyQgPSB0aGlzLmlubmVyQ29sdW1uTmFtZXMkLnBpcGUoXG4gICAgbWFwKChjb2x1bW5OYW1lcykgPT4ge1xuICAgICAgcmV0dXJuIFt0aGlzLml0ZW1zQ29sdW1uTmFtZSwgLi4uY29sdW1uTmFtZXMsIHRoaXMuYWN0aW9uc0NvbHVtbk5hbWVdO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZGlzcGxheWVkQ29sdW1uc1NpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb2x1bW5OYW1lcyA9IHRoaXMuaW5uZXJDb2x1bW5OYW1lc1NpZ25hbCgpIHx8IFtdO1xuICAgIHJldHVybiBbdGhpcy5pdGVtc0NvbHVtbk5hbWUsIC4uLmNvbHVtbk5hbWVzLCB0aGlzLmFjdGlvbnNDb2x1bW5OYW1lXTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgdmlzaWJsZUNvbHVtbnNTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuZGlzcGxheWVkQ29sdW1uc1NpZ25hbCgpO1xuXG4gICAgLy8gVE9ETzogRXZlcnkgdGltZSB0aGUgdGFibGUgaXMgcmVuZGVyZWQvc2l6ZSBjaGFuZ2VzL2V0YyB3ZSBzaG91bGQgcmVjb21wdXRlIHdpZHRoIG9mIHRoZSBmaXJzdCBuIGNvbHVtbnMgdGhhdCBzcGFuIHRoZSB2aWV3cG9ydFxuICAgIC8vIGluIG9yZGVyIHRvIGNhbGN1bGF0ZSBhIGNvbHNwYW4gZm9yIHRoZSBncm91cCBoZWFkZXIvZm9vdGVyIHRoYXQgaXMgbm90IGdyZWF0ZXIgdGhhbiBzcGFuIG9mIHRoZSB0YWJsZSBmb3IgYSBnaXZlbiB2aWV3IHNpemVcbiAgICAvLyBJLkUuIGlmIHRoZSBzY3JlZW4gc2hyaW5rcyB0byBvbmx5IHNob3cgdGhlIGZpcnN0IDQgY29sdW1ucywgdGhlbiB0aGUgY29sc3BhbiBzaG91bGQgYmUgNC5cblxuICAgIC8vIGFzIGEgdGVtcG9yYXJ5IG1lYXN1cmUsIHdlIGp1c3Qgc2hvdyBoYWxmIHRoZSBjb2x1bW5zXG5cbiAgICByZXR1cm4gZGlzcGxheWVkQ29sdW1ucy5sZW5ndGggLyAyO1xuICB9KTtcblxuICByZWFkb25seSB0cmFja0J5RnVuY3Rpb24kOiBPYnNlcnZhYmxlPFRyYWNrQnlGdW5jdGlvbjxUPj4gPSB0aGlzLnRhYmxlU3RvcmUudmlld0RlbGVnYXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC50cmFja0J5ID8/IHRoaXMuREVGQVVMVF9UUkFDS19CWV9GVU5DVElPTiksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpbnB1dFRyYWNrQnlGdW5jdGlvblNpZ25hbCA9IHRvU2lnbmFsKHRoaXMudHJhY2tCeUZ1bmN0aW9uJCwgeyBpbml0aWFsVmFsdWU6IHRoaXMuREVGQVVMVF9UUkFDS19CWV9GVU5DVElPTiB9KTtcbiAgcmVhZG9ubHkgdHJhY2tFbGVtZW50QnlGdW5jdGlvblNpZ25hbDogU2lnbmFsPFRyYWNrQnlGdW5jdGlvbjxEYnhUYWJsZVZpZXdFbGVtZW50PFQsIEc+Pj4gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdHJhY2tCeUZ1bmN0aW9uID0gdGhpcy5pbnB1dFRyYWNrQnlGdW5jdGlvblNpZ25hbCgpIGFzIFRyYWNrQnlGdW5jdGlvbjxUPjtcblxuICAgIGNvbnN0IGZuOiBUcmFja0J5RnVuY3Rpb248RGJ4VGFibGVWaWV3RWxlbWVudDxULCBHPj4gPSAoaW5kZXg6IG51bWJlciwgZWxlbWVudDogRGJ4VGFibGVWaWV3RWxlbWVudDxULCBHPikgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ2l0ZW0nKSB7XG4gICAgICAgIHJldHVybiBgaV8ke3RyYWNrQnlGdW5jdGlvbihpbmRleCwgZWxlbWVudC5pdGVtIGFzIFQpfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYGdfJHtlbGVtZW50Lmdyb3VwLmdyb3VwSWR9YDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGZuO1xuICB9KTtcblxuICByZWFkb25seSBjb250ZXh0ID0gbG9hZGluZ1N0YXRlQ29udGV4dCh7IG9iczogdGhpcy50YWJsZVN0b3JlLmRhdGFTdGF0ZSQgfSk7XG4gIHJlYWRvbmx5IGRhdGFMb2FkaW5nQ29udGV4dCA9IGxvYWRpbmdTdGF0ZUNvbnRleHQoeyBvYnM6IHRoaXMuZWxlbWVudHNTdGF0ZSQgfSk7XG5cbiAgcmVhZG9ubHkgY29udGV4dFNpZ25hbCA9IHRvU2lnbmFsKHRoaXMuY29udGV4dC5zdGF0ZSQpO1xuICByZWFkb25seSBkYXRhTG9hZGluZ0NvbnRleHRTaWduYWwgPSB0b1NpZ25hbCh0aGlzLmRhdGFMb2FkaW5nQ29udGV4dC5zdGF0ZSQpO1xuXG4gIHJlYWRvbmx5IHZpZXdEZWxlZ2F0ZVNpZ25hbCA9IHRvU2lnbmFsKHRoaXMudGFibGVTdG9yZS52aWV3RGVsZWdhdGUkKTtcbiAgcmVhZG9ubHkgZWxlbWVudHNTaWduYWwgPSB0b1NpZ25hbCh0aGlzLmVsZW1lbnRzJCwgeyBpbml0aWFsVmFsdWU6IFtdIH0pO1xuXG4gIG9uU2Nyb2xsRG93bigpOiB2b2lkIHtcbiAgICB0aGlzLnRhYmxlU3RvcmUubG9hZE1vcmUoKTtcbiAgfVxuXG4gIHNob3dJdGVtUm93KF86IG51bWJlciwgcm93OiBEYnhUYWJsZVZpZXdFbGVtZW50PFQsIEc+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHJvdy50eXBlID09PSAnaXRlbSc7XG4gIH1cblxuICBzaG93R3JvdXBIZWFkZXJSb3coXzogbnVtYmVyLCByb3c6IERieFRhYmxlVmlld0VsZW1lbnQ8VCwgRz4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gcm93LnR5cGUgPT09ICdncm91cCcgJiYgcm93LmxvY2F0aW9uID09PSAnaGVhZGVyJztcbiAgfVxuXG4gIHNob3dHcm91cEZvb3RlclJvdyhfOiBudW1iZXIsIHJvdzogRGJ4VGFibGVWaWV3RWxlbWVudDxULCBHPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiByb3cudHlwZSA9PT0gJ2dyb3VwJyAmJiByb3cubG9jYXRpb24gPT09ICdmb290ZXInO1xuICB9XG5cbiAgcmVhZG9ubHkgc2hvd0Zvb3RlclJvd1NpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB2aWV3RGVsZWdhdGUgPSB0aGlzLnZpZXdEZWxlZ2F0ZVNpZ25hbCgpO1xuICAgIGNvbnN0IHNob3dGb290ZXJSb3cgPSB2aWV3RGVsZWdhdGUgJiYgKHZpZXdEZWxlZ2F0ZS5zdW1tYXJ5Um93SGVhZGVyICE9IG51bGwgfHwgdmlld0RlbGVnYXRlLmNvbHVtbkZvb3RlciAhPSBudWxsIHx8IHZpZXdEZWxlZ2F0ZS5zdW1tYXJ5Um93RW5kICE9IG51bGwpO1xuICAgIHJldHVybiBzaG93Rm9vdGVyUm93O1xuICB9KTtcblxuICByZWFkb25seSBzaG93RnVsbFN1bW1hcnlSb3dTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgdmlld0RlbGVnYXRlID0gdGhpcy52aWV3RGVsZWdhdGVTaWduYWwoKTtcbiAgICByZXR1cm4gdmlld0RlbGVnYXRlPy5mdWxsU3VtbWFyeVJvdyAhPSBudWxsO1xuICB9KTtcbn1cbiIsIjxkYngtbG9hZGluZyBbY29udGV4dF09XCJjb250ZXh0XCI+XG4gIDxkYngtbG9hZGluZyBjbGFzcz1cImRieC10YWJsZS12aWV3LWxvYWRpbmdcIiBbbGluZWFyXT1cInRydWVcIiBbY29udGV4dF09XCJkYXRhTG9hZGluZ0NvbnRleHRcIj48L2RieC1sb2FkaW5nPlxuICA8c2VjdGlvbiBjbGFzcz1cImRieC10YWJsZS12aWV3XCIgZGJ4LWNvbHVtbi1zaXplICNjb2x1bW5TaXplPVwiZGJ4Q29sdW1uU2l6ZVwiIGluZmluaXRlLXNjcm9sbCBbaW5maW5pdGVTY3JvbGxEaXN0YW5jZV09XCJzY3JvbGxEaXN0YW5jZSgpXCIgW2luZmluaXRlU2Nyb2xsVGhyb3R0bGVdPVwidGhyb3R0bGVTY3JvbGwoKVwiIFtzY3JvbGxXaW5kb3ddPVwiZmFsc2VcIiAoc2Nyb2xsZWQpPVwib25TY3JvbGxEb3duKClcIj5cbiAgICA8dGFibGUgY2xhc3M9XCJkYngtdGFibGUtdmlldy10YWJsZVwiIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJlbGVtZW50c1NpZ25hbCgpXCIgW3RyYWNrQnldPVwidHJhY2tFbGVtZW50QnlGdW5jdGlvblNpZ25hbCgpXCIgbXVsdGlUZW1wbGF0ZURhdGFSb3dzPlxuICAgICAgPCEtLSBHcm91cHMgLS0+XG4gICAgICA8IS0tIEdyb3VwIEhlYWRlciBjb2x1bW4gLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImdyb3VwSGVhZGVyQ29sdW1uXCIgW3N0aWNreV09XCJ0cnVlXCI+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCBbYXR0ci5jb2xzcGFuXT1cImNvbHVtblNpemUudmlzaWJsZUNvbHVtbnNTaWduYWwoKVwiICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICA8ZGJ4LXRhYmxlLWdyb3VwLWhlYWRlciBbZ3JvdXBdPVwiZWxlbWVudC5ncm91cFwiPjwvZGJ4LXRhYmxlLWdyb3VwLWhlYWRlcj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIEdyb3VwIEZvb3RlciBjb2x1bW4gLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImdyb3VwRm9vdGVyQ29sdW1uXCIgW3N0aWNreV09XCJ0cnVlXCI+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCBbYXR0ci5jb2xzcGFuXT1cImNvbHVtblNpemUudmlzaWJsZUNvbHVtbnNTaWduYWwoKVwiICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICA8ZGJ4LXRhYmxlLWdyb3VwLWZvb3RlciBbZ3JvdXBdPVwiZWxlbWVudC5ncm91cFwiPjwvZGJ4LXRhYmxlLWdyb3VwLWZvb3Rlcj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIEl0ZW1zIC0tPlxuICAgICAgPCEtLSBIZWFkZXIvSXRlbSBjb2x1bW4gLS0+XG4gICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwiaXRlbXNDb2x1bW5OYW1lXCIgW3N0aWNreV09XCJ0cnVlXCI+XG4gICAgICAgIDx0aCBkYngtY29sdW1uLXNpemUtY29sdW1uPVwiaGVhZFwiIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cbiAgICAgICAgICA8ZGJ4LXRhYmxlLWlucHV0LWNlbGw+PC9kYngtdGFibGUtaW5wdXQtY2VsbD5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICA8ZGJ4LXRhYmxlLWl0ZW0taGVhZGVyIFtpdGVtXT1cImVsZW1lbnQuaXRlbVwiPjwvZGJ4LXRhYmxlLWl0ZW0taGVhZGVyPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPlxuICAgICAgICAgIDxkYngtdGFibGUtc3VtbWFyeS1zdGFydC1jZWxsPjwvZGJ4LXRhYmxlLXN1bW1hcnktc3RhcnQtY2VsbD5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIENvbHVtbiBEZWZpbml0aW9ucyAtLT5cbiAgICAgIEBmb3IgKGNvbHVtbiBvZiBpbm5lckNvbHVtbnNTaWduYWwoKTsgdHJhY2sgY29sdW1uLmNvbHVtbk5hbWUpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5jb2x1bW5OYW1lXCIgW3N0aWNreV09XCJmYWxzZVwiPlxuICAgICAgICAgIDx0aCBbZGJ4LWNvbHVtbi1zaXplLWNvbHVtbl09XCIkaW5kZXhcIiBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgICAgICA8ZGJ4LXRhYmxlLWNvbHVtbi1oZWFkZXIgW2NvbHVtbl09XCJjb2x1bW5cIj48L2RieC10YWJsZS1jb2x1bW4taGVhZGVyPlxuICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICAgIDxkYngtdGFibGUtaXRlbS1jZWxsIFtpdGVtXT1cImVsZW1lbnQuaXRlbVwiIFtjb2x1bW5dPVwiY29sdW1uXCI+PC9kYngtdGFibGUtaXRlbS1jZWxsPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj5cbiAgICAgICAgICAgIDxkYngtdGFibGUtY29sdW1uLWZvb3RlciBbY29sdW1uXT1cImNvbHVtblwiPjwvZGJ4LXRhYmxlLWNvbHVtbi1mb290ZXI+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gVGFpbC9BY3Rpb24gY29sdW1uIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImFjdGlvbnNDb2x1bW5OYW1lXCIgW3N0aWNreUVuZF09XCJ0cnVlXCI+XG4gICAgICAgIDx0aCBkYngtY29sdW1uLXNpemUtY29sdW1uPVwidGFpbFwiIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cbiAgICAgICAgICA8ZGJ4LXRhYmxlLWFjdGlvbi1jZWxsPjwvZGJ4LXRhYmxlLWFjdGlvbi1jZWxsPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuICAgICAgICAgIDxkYngtdGFibGUtaXRlbS1hY3Rpb24gW2l0ZW1dPVwiZWxlbWVudC5pdGVtXCI+PC9kYngtdGFibGUtaXRlbS1hY3Rpb24+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+XG4gICAgICAgICAgPGRieC10YWJsZS1zdW1tYXJ5LWVuZC1jZWxsPjwvZGJ4LXRhYmxlLXN1bW1hcnktZW5kLWNlbGw+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBUYWJsZSBWaWV3IC0tPlxuICAgICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zU2lnbmFsKCk7IHN0aWNreTogdHJ1ZVwiPjwvdHI+XG5cbiAgICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBbJ2dyb3VwSGVhZGVyQ29sdW1uJ107IHdoZW46IHNob3dHcm91cEhlYWRlclJvd1wiPjwvdHI+XG4gICAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1uc1NpZ25hbCgpOyB3aGVuOiBzaG93SXRlbVJvd1wiPjwvdHI+XG4gICAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogWydncm91cEZvb3RlckNvbHVtbiddOyB3aGVuOiBzaG93R3JvdXBGb290ZXJSb3dcIj48L3RyPlxuXG4gICAgICA8dHIgW25nQ2xhc3NdPVwieyAnZGJ4LWhpZGUnOiAhc2hvd0Zvb3RlclJvd1NpZ25hbCgpIH1cIiBtYXQtZm9vdGVyLXJvdyAqbWF0Rm9vdGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uc1NpZ25hbCgpOyBzdGlja3k6IHRydWVcIj48L3RyPlxuICAgIDwvdGFibGU+XG4gIDwvc2VjdGlvbj5cbiAgPCEtLSBGdWxsIHN1bW1hcnkgcm93IC0tPlxuICBAaWYgKHNob3dGdWxsU3VtbWFyeVJvd1NpZ25hbCgpKSB7XG4gICAgPGRpdiBjbGFzcz1cIm1hdC1tZGMtdGFibGUgZGJ4LXRhYmxlLXZpZXctZnVsbC1zdW1tYXJ5LXJvdy1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtZGMtZGF0YS10YWJsZV9fY2VsbCBtYXQtbWRjLXJvd1wiPlxuICAgICAgICA8ZGJ4LXRhYmxlLWZ1bGwtc3VtbWFyeS1yb3c+PC9kYngtdGFibGUtZnVsbC1zdW1tYXJ5LXJvdz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG48L2RieC1sb2FkaW5nPlxuIl19
@@ -1,6 +1,6 @@
1
1
  import { ChangeDetectionStrategy, Component } from '@angular/core';
2
2
  import { toSignal } from '@angular/core/rxjs-interop';
3
- import { map, distinctUntilChanged } from 'rxjs';
3
+ import { map } from 'rxjs';
4
4
  import { AbstractDbxTableItemDirective } from './table.item.directive';
5
5
  import { DbxInjectionComponent } from '@dereekb/dbx-core';
6
6
  import { maybeValueFromObservableOrValue } from '@dereekb/rxjs';
@@ -10,10 +10,10 @@ export class DbxTableItemActionComponent extends AbstractDbxTableItemDirective {
10
10
  const itemAction = viewDelegate.itemAction;
11
11
  let obs = undefined;
12
12
  if (itemAction) {
13
- obs = this.item$.pipe(map((x) => itemAction(x)));
13
+ obs = this.item$.pipe(map((x) => (x != null ? itemAction(x) : undefined)));
14
14
  }
15
15
  return obs;
16
- }), maybeValueFromObservableOrValue(), distinctUntilChanged());
16
+ }), maybeValueFromObservableOrValue());
17
17
  configSignal = toSignal(this.config$);
18
18
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxTableItemActionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
19
19
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DbxTableItemActionComponent, isStandalone: true, selector: "dbx-table-item-action", usesInheritance: true, ngImport: i0, template: `
@@ -32,4 +32,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
32
32
  standalone: true
33
33
  }]
34
34
  }] });
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuaXRlbS5hY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi90YWJsZS9zcmMvbGliL3RhYmxlLml0ZW0uYWN0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsR0FBRyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxxQkFBcUIsRUFBK0IsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RixPQUFPLEVBQTBCLCtCQUErQixFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVd4RixNQUFNLE9BQU8sMkJBQStCLFNBQVEsNkJBQWdDO0lBQ3pFLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ25ELEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFO1FBQ25CLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUM7UUFDM0MsSUFBSSxHQUFHLEdBQXdELFNBQVMsQ0FBQztRQUV6RSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDLENBQUMsRUFDRiwrQkFBK0IsRUFBRSxFQUNqQyxvQkFBb0IsRUFBRSxDQUN2QixDQUFDO0lBRU8sWUFBWSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7d0dBaEJwQywyQkFBMkI7NEZBQTNCLDJCQUEyQix3R0FQNUI7O0dBRVQsNERBRVMscUJBQXFCOzs0RkFHcEIsMkJBQTJCO2tCQVR2QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx1QkFBdUI7b0JBQ2pDLFFBQVEsRUFBRTs7R0FFVDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMscUJBQXFCLENBQUM7b0JBQ2hDLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgbWFwLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQWJzdHJhY3REYnhUYWJsZUl0ZW1EaXJlY3RpdmUgfSBmcm9tICcuL3RhYmxlLml0ZW0uZGlyZWN0aXZlJztcbmltcG9ydCB7IERieEluamVjdGlvbkNvbXBvbmVudCwgRGJ4SW5qZWN0aW9uQ29tcG9uZW50Q29uZmlnIH0gZnJvbSAnQGRlcmVla2IvZGJ4LWNvcmUnO1xuaW1wb3J0IHsgTWF5YmVPYnNlcnZhYmxlT3JWYWx1ZSwgbWF5YmVWYWx1ZUZyb21PYnNlcnZhYmxlT3JWYWx1ZSB9IGZyb20gJ0BkZXJlZWtiL3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYngtdGFibGUtaXRlbS1hY3Rpb24nLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkYngtaW5qZWN0aW9uIFtjb25maWddPVwiY29uZmlnU2lnbmFsKClcIj48L2RieC1pbmplY3Rpb24+XG4gIGAsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbRGJ4SW5qZWN0aW9uQ29tcG9uZW50XSxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBEYnhUYWJsZUl0ZW1BY3Rpb25Db21wb25lbnQ8VD4gZXh0ZW5kcyBBYnN0cmFjdERieFRhYmxlSXRlbURpcmVjdGl2ZTxUPiB7XG4gIHJlYWRvbmx5IGNvbmZpZyQgPSB0aGlzLnRhYmxlU3RvcmUudmlld0RlbGVnYXRlJC5waXBlKFxuICAgIG1hcCgodmlld0RlbGVnYXRlKSA9PiB7XG4gICAgICBjb25zdCBpdGVtQWN0aW9uID0gdmlld0RlbGVnYXRlLml0ZW1BY3Rpb247XG4gICAgICBsZXQgb2JzOiBNYXliZU9ic2VydmFibGVPclZhbHVlPERieEluamVjdGlvbkNvbXBvbmVudENvbmZpZz4gPSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChpdGVtQWN0aW9uKSB7XG4gICAgICAgIG9icyA9IHRoaXMuaXRlbSQucGlwZShtYXAoKHgpID0+IGl0ZW1BY3Rpb24oeCkpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9icztcbiAgICB9KSxcbiAgICBtYXliZVZhbHVlRnJvbU9ic2VydmFibGVPclZhbHVlKCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICApO1xuXG4gIHJlYWRvbmx5IGNvbmZpZ1NpZ25hbCA9IHRvU2lnbmFsKHRoaXMuY29uZmlnJCk7XG59XG4iXX0=
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuaXRlbS5hY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi90YWJsZS9zcmMvbGliL3RhYmxlLml0ZW0uYWN0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNCLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxxQkFBcUIsRUFBK0IsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RixPQUFPLEVBQTBCLCtCQUErQixFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVd4RixNQUFNLE9BQU8sMkJBQStCLFNBQVEsNkJBQWdDO0lBQ3pFLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ25ELEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFO1FBQ25CLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUM7UUFDM0MsSUFBSSxHQUFHLEdBQXdELFNBQVMsQ0FBQztRQUV6RSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3RSxDQUFDO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDLENBQUMsRUFDRiwrQkFBK0IsRUFBRSxDQUNsQyxDQUFDO0lBRU8sWUFBWSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7d0dBZnBDLDJCQUEyQjs0RkFBM0IsMkJBQTJCLHdHQVA1Qjs7R0FFVCw0REFFUyxxQkFBcUI7OzRGQUdwQiwyQkFBMkI7a0JBVHZDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsUUFBUSxFQUFFOztHQUVUO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztvQkFDaEMsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFic3RyYWN0RGJ4VGFibGVJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi90YWJsZS5pdGVtLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEYnhJbmplY3Rpb25Db21wb25lbnQsIERieEluamVjdGlvbkNvbXBvbmVudENvbmZpZyB9IGZyb20gJ0BkZXJlZWtiL2RieC1jb3JlJztcbmltcG9ydCB7IE1heWJlT2JzZXJ2YWJsZU9yVmFsdWUsIG1heWJlVmFsdWVGcm9tT2JzZXJ2YWJsZU9yVmFsdWUgfSBmcm9tICdAZGVyZWVrYi9yeGpzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGJ4LXRhYmxlLWl0ZW0tYWN0aW9uJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGJ4LWluamVjdGlvbiBbY29uZmlnXT1cImNvbmZpZ1NpZ25hbCgpXCI+PC9kYngtaW5qZWN0aW9uPlxuICBgLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW0RieEluamVjdGlvbkNvbXBvbmVudF0sXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgRGJ4VGFibGVJdGVtQWN0aW9uQ29tcG9uZW50PFQ+IGV4dGVuZHMgQWJzdHJhY3REYnhUYWJsZUl0ZW1EaXJlY3RpdmU8VD4ge1xuICByZWFkb25seSBjb25maWckID0gdGhpcy50YWJsZVN0b3JlLnZpZXdEZWxlZ2F0ZSQucGlwZShcbiAgICBtYXAoKHZpZXdEZWxlZ2F0ZSkgPT4ge1xuICAgICAgY29uc3QgaXRlbUFjdGlvbiA9IHZpZXdEZWxlZ2F0ZS5pdGVtQWN0aW9uO1xuICAgICAgbGV0IG9iczogTWF5YmVPYnNlcnZhYmxlT3JWYWx1ZTxEYnhJbmplY3Rpb25Db21wb25lbnRDb25maWc+ID0gdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoaXRlbUFjdGlvbikge1xuICAgICAgICBvYnMgPSB0aGlzLml0ZW0kLnBpcGUobWFwKCh4KSA9PiAoeCAhPSBudWxsID8gaXRlbUFjdGlvbih4KSA6IHVuZGVmaW5lZCkpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9icztcbiAgICB9KSxcbiAgICBtYXliZVZhbHVlRnJvbU9ic2VydmFibGVPclZhbHVlKClcbiAgKTtcblxuICByZWFkb25seSBjb25maWdTaWduYWwgPSB0b1NpZ25hbCh0aGlzLmNvbmZpZyQpO1xufVxuIl19
@@ -1,14 +1,13 @@
1
- import { filterMaybe, maybeValueFromObservableOrValue } from '@dereekb/rxjs';
2
1
  import { ChangeDetectionStrategy, Component, input } from '@angular/core';
3
2
  import { toSignal, toObservable } from '@angular/core/rxjs-interop';
4
- import { map, distinctUntilChanged, switchMap, combineLatest } from 'rxjs';
3
+ import { map, switchMap, combineLatest } from 'rxjs';
5
4
  import { AbstractDbxTableItemDirective } from './table.item.directive';
6
5
  import { DbxInjectionComponent } from '@dereekb/dbx-core';
7
6
  import * as i0 from "@angular/core";
8
7
  export class DbxTableItemCellComponent extends AbstractDbxTableItemDirective {
9
8
  column = input();
10
- column$ = toObservable(this.column).pipe(filterMaybe());
11
- config$ = this.tableStore.viewDelegate$.pipe(switchMap((viewDelegate) => combineLatest([this.column$, this.item$]).pipe(map(([column, item]) => viewDelegate.itemCell(column, item)))), maybeValueFromObservableOrValue(), distinctUntilChanged());
9
+ column$ = toObservable(this.column);
10
+ config$ = this.tableStore.viewDelegate$.pipe(switchMap((viewDelegate) => combineLatest([this.column$, this.item$]).pipe(map(([column, item]) => (column && item ? viewDelegate.itemCell(column, item) : undefined)))));
12
11
  configSignal = toSignal(this.config$);
13
12
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxTableItemCellComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
14
13
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: DbxTableItemCellComponent, isStandalone: true, selector: "dbx-table-item-cell", inputs: { column: { classPropertyName: "column", publicName: "column", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: `
@@ -27,4 +26,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
27
26
  standalone: true
28
27
  }]
29
28
  }] });
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuaXRlbS5jZWxsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC13ZWIvdGFibGUvc3JjL2xpYi90YWJsZS5pdGVtLmNlbGwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsR0FBRyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0UsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFdkUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBVzFELE1BQU0sT0FBTyx5QkFBZ0MsU0FBUSw2QkFBbUM7SUFDN0UsTUFBTSxHQUFHLEtBQUssRUFBNEIsQ0FBQztJQUMzQyxPQUFPLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUV4RCxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNuRCxTQUFTLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDekksK0JBQStCLEVBQUUsRUFDakMsb0JBQW9CLEVBQUUsQ0FDdkIsQ0FBQztJQUVPLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dHQVZwQyx5QkFBeUI7NEZBQXpCLHlCQUF5Qiw2T0FQMUI7O0dBRVQsNERBRVMscUJBQXFCOzs0RkFHcEIseUJBQXlCO2tCQVRyQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFFBQVEsRUFBRTs7R0FFVDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMscUJBQXFCLENBQUM7b0JBQ2hDLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZpbHRlck1heWJlLCBtYXliZVZhbHVlRnJvbU9ic2VydmFibGVPclZhbHVlIH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9TaWduYWwsIHRvT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IG1hcCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHN3aXRjaE1hcCwgY29tYmluZUxhdGVzdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdHlwZSBNYXliZSB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgQWJzdHJhY3REYnhUYWJsZUl0ZW1EaXJlY3RpdmUgfSBmcm9tICcuL3RhYmxlLml0ZW0uZGlyZWN0aXZlJztcbmltcG9ydCB7IERieFRhYmxlQ29sdW1uIH0gZnJvbSAnLi90YWJsZSc7XG5pbXBvcnQgeyBEYnhJbmplY3Rpb25Db21wb25lbnQgfSBmcm9tICdAZGVyZWVrYi9kYngtY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RieC10YWJsZS1pdGVtLWNlbGwnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkYngtaW5qZWN0aW9uIFtjb25maWddPVwiY29uZmlnU2lnbmFsKClcIj48L2RieC1pbmplY3Rpb24+XG4gIGAsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbRGJ4SW5qZWN0aW9uQ29tcG9uZW50XSxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBEYnhUYWJsZUl0ZW1DZWxsQ29tcG9uZW50PFQsIEM+IGV4dGVuZHMgQWJzdHJhY3REYnhUYWJsZUl0ZW1EaXJlY3RpdmU8VCwgQz4ge1xuICByZWFkb25seSBjb2x1bW4gPSBpbnB1dDxNYXliZTxEYnhUYWJsZUNvbHVtbjxDPj4+KCk7XG4gIHJlYWRvbmx5IGNvbHVtbiQgPSB0b09ic2VydmFibGUodGhpcy5jb2x1bW4pLnBpcGUoZmlsdGVyTWF5YmUoKSk7XG5cbiAgcmVhZG9ubHkgY29uZmlnJCA9IHRoaXMudGFibGVTdG9yZS52aWV3RGVsZWdhdGUkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCh2aWV3RGVsZWdhdGUpID0+IGNvbWJpbmVMYXRlc3QoW3RoaXMuY29sdW1uJCwgdGhpcy5pdGVtJF0pLnBpcGUobWFwKChbY29sdW1uLCBpdGVtXSkgPT4gdmlld0RlbGVnYXRlLml0ZW1DZWxsKGNvbHVtbiwgaXRlbSkpKSksXG4gICAgbWF5YmVWYWx1ZUZyb21PYnNlcnZhYmxlT3JWYWx1ZSgpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgKTtcblxuICByZWFkb25seSBjb25maWdTaWduYWwgPSB0b1NpZ25hbCh0aGlzLmNvbmZpZyQpO1xufVxuIl19
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuaXRlbS5jZWxsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC13ZWIvdGFibGUvc3JjL2xpYi90YWJsZS5pdGVtLmNlbGwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXJELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXZFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQVcxRCxNQUFNLE9BQU8seUJBQWdDLFNBQVEsNkJBQW1DO0lBQzdFLE1BQU0sR0FBRyxLQUFLLEVBQTRCLENBQUM7SUFDM0MsT0FBTyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFcEMsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXZOLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dHQU5wQyx5QkFBeUI7NEZBQXpCLHlCQUF5Qiw2T0FQMUI7O0dBRVQsNERBRVMscUJBQXFCOzs0RkFHcEIseUJBQXlCO2tCQVRyQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFFBQVEsRUFBRTs7R0FFVDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMscUJBQXFCLENBQUM7b0JBQ2hDLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b1NpZ25hbCwgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAsIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHR5cGUgTWF5YmUgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCB7IEFic3RyYWN0RGJ4VGFibGVJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi90YWJsZS5pdGVtLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEYnhUYWJsZUNvbHVtbiB9IGZyb20gJy4vdGFibGUnO1xuaW1wb3J0IHsgRGJ4SW5qZWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnQGRlcmVla2IvZGJ4LWNvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYngtdGFibGUtaXRlbS1jZWxsJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGJ4LWluamVjdGlvbiBbY29uZmlnXT1cImNvbmZpZ1NpZ25hbCgpXCI+PC9kYngtaW5qZWN0aW9uPlxuICBgLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW0RieEluamVjdGlvbkNvbXBvbmVudF0sXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgRGJ4VGFibGVJdGVtQ2VsbENvbXBvbmVudDxULCBDPiBleHRlbmRzIEFic3RyYWN0RGJ4VGFibGVJdGVtRGlyZWN0aXZlPFQsIEM+IHtcbiAgcmVhZG9ubHkgY29sdW1uID0gaW5wdXQ8TWF5YmU8RGJ4VGFibGVDb2x1bW48Qz4+PigpO1xuICByZWFkb25seSBjb2x1bW4kID0gdG9PYnNlcnZhYmxlKHRoaXMuY29sdW1uKTtcblxuICByZWFkb25seSBjb25maWckID0gdGhpcy50YWJsZVN0b3JlLnZpZXdEZWxlZ2F0ZSQucGlwZShzd2l0Y2hNYXAoKHZpZXdEZWxlZ2F0ZSkgPT4gY29tYmluZUxhdGVzdChbdGhpcy5jb2x1bW4kLCB0aGlzLml0ZW0kXSkucGlwZShtYXAoKFtjb2x1bW4sIGl0ZW1dKSA9PiAoY29sdW1uICYmIGl0ZW0gPyB2aWV3RGVsZWdhdGUuaXRlbUNlbGwoY29sdW1uLCBpdGVtKSA6IHVuZGVmaW5lZCkpKSkpO1xuXG4gIHJlYWRvbmx5IGNvbmZpZ1NpZ25hbCA9IHRvU2lnbmFsKHRoaXMuY29uZmlnJCk7XG59XG4iXX0=
@@ -1,7 +1,5 @@
1
1
  import { toObservable } from '@angular/core/rxjs-interop';
2
- import { filterMaybe } from '@dereekb/rxjs';
3
2
  import { Directive, inject, input } from '@angular/core';
4
- import { distinctUntilChanged } from 'rxjs';
5
3
  import { DbxTableStore } from './table.store';
6
4
  import * as i0 from "@angular/core";
7
5
  /**
@@ -10,11 +8,11 @@ import * as i0 from "@angular/core";
10
8
  export class AbstractDbxTableItemDirective {
11
9
  tableStore = inject((DbxTableStore));
12
10
  item = input();
13
- item$ = toObservable(this.item).pipe(filterMaybe(), distinctUntilChanged());
11
+ item$ = toObservable(this.item);
14
12
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AbstractDbxTableItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
15
13
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: AbstractDbxTableItemDirective, inputs: { item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
16
14
  }
17
15
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AbstractDbxTableItemDirective, decorators: [{
18
16
  type: Directive
19
17
  }] });
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuaXRlbS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtd2ViL3RhYmxlL3NyYy9saWIvdGFibGUuaXRlbS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUc5Qzs7R0FFRztBQUVILE1BQU0sT0FBZ0IsNkJBQTZCO0lBQ3hDLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQSxhQUE0QixDQUFBLENBQUMsQ0FBQztJQUVsRCxJQUFJLEdBQUcsS0FBSyxFQUFZLENBQUM7SUFDekIsS0FBSyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLG9CQUFvQixFQUFFLENBQUMsQ0FBQzt3R0FKakUsNkJBQTZCOzRGQUE3Qiw2QkFBNkI7OzRGQUE3Qiw2QkFBNkI7a0JBRGxELFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0b09ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBmaWx0ZXJNYXliZSB9IGZyb20gJ0BkZXJlZWtiL3J4anMnO1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBpbmplY3QsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGJ4VGFibGVTdG9yZSB9IGZyb20gJy4vdGFibGUuc3RvcmUnO1xuaW1wb3J0IHsgdHlwZSBNYXliZSB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuXG4vKipcbiAqIEFic3RyYWN0IGRpcmVjdGl2ZSB0aGF0IGhhcyBhbiBlbGVtZW50IGlucHV0LlxuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdERieFRhYmxlSXRlbURpcmVjdGl2ZTxULCBDID0gdW5rbm93bj4ge1xuICByZWFkb25seSB0YWJsZVN0b3JlID0gaW5qZWN0KERieFRhYmxlU3RvcmU8dW5rbm93biwgQywgVD4pO1xuXG4gIHJlYWRvbmx5IGl0ZW0gPSBpbnB1dDxNYXliZTxUPj4oKTtcbiAgcmVhZG9ubHkgaXRlbSQgPSB0b09ic2VydmFibGUodGhpcy5pdGVtKS5waXBlKGZpbHRlck1heWJlKCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xufVxuIl19
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuaXRlbS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtd2ViL3RhYmxlL3NyYy9saWIvdGFibGUuaXRlbS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUc5Qzs7R0FFRztBQUVILE1BQU0sT0FBZ0IsNkJBQTZCO0lBQ3hDLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQSxhQUE0QixDQUFBLENBQUMsQ0FBQztJQUVsRCxJQUFJLEdBQUcsS0FBSyxFQUFZLENBQUM7SUFDekIsS0FBSyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7d0dBSnJCLDZCQUE2Qjs0RkFBN0IsNkJBQTZCOzs0RkFBN0IsNkJBQTZCO2tCQURsRCxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBpbmplY3QsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYnhUYWJsZVN0b3JlIH0gZnJvbSAnLi90YWJsZS5zdG9yZSc7XG5pbXBvcnQgeyB0eXBlIE1heWJlIH0gZnJvbSAnQGRlcmVla2IvdXRpbCc7XG5cbi8qKlxuICogQWJzdHJhY3QgZGlyZWN0aXZlIHRoYXQgaGFzIGFuIGVsZW1lbnQgaW5wdXQuXG4gKi9cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0RGJ4VGFibGVJdGVtRGlyZWN0aXZlPFQsIEMgPSB1bmtub3duPiB7XG4gIHJlYWRvbmx5IHRhYmxlU3RvcmUgPSBpbmplY3QoRGJ4VGFibGVTdG9yZTx1bmtub3duLCBDLCBUPik7XG5cbiAgcmVhZG9ubHkgaXRlbSA9IGlucHV0PE1heWJlPFQ+PigpO1xuICByZWFkb25seSBpdGVtJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLml0ZW0pO1xufVxuIl19
@@ -1,12 +1,12 @@
1
1
  import { ChangeDetectionStrategy, Component } from '@angular/core';
2
2
  import { toSignal } from '@angular/core/rxjs-interop';
3
- import { map, distinctUntilChanged, switchMap } from 'rxjs';
3
+ import { map, switchMap } from 'rxjs';
4
4
  import { AbstractDbxTableItemDirective } from './table.item.directive';
5
5
  import { maybeValueFromObservableOrValue } from '@dereekb/rxjs';
6
6
  import { DbxInjectionComponent } from '@dereekb/dbx-core';
7
7
  import * as i0 from "@angular/core";
8
8
  export class DbxTableItemHeaderComponent extends AbstractDbxTableItemDirective {
9
- config$ = this.tableStore.viewDelegate$.pipe(switchMap((viewDelegate) => this.item$.pipe(map((x) => viewDelegate.itemHeader(x)))), maybeValueFromObservableOrValue(), distinctUntilChanged());
9
+ config$ = this.tableStore.viewDelegate$.pipe(switchMap((viewDelegate) => this.item$.pipe(map((x) => (x != null ? viewDelegate.itemHeader(x) : undefined)))), maybeValueFromObservableOrValue());
10
10
  configSignal = toSignal(this.config$);
11
11
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxTableItemHeaderComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
12
12
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DbxTableItemHeaderComponent, isStandalone: true, selector: "dbx-table-item-header", usesInheritance: true, ngImport: i0, template: `
@@ -25,4 +25,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
25
25
  standalone: true
26
26
  }]
27
27
  }] });
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuaXRlbS5oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi90YWJsZS9zcmMvbGliL3RhYmxlLml0ZW0uaGVhZGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsR0FBRyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBVzFELE1BQU0sT0FBTywyQkFBK0IsU0FBUSw2QkFBZ0M7SUFDekUsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDbkQsU0FBUyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3BGLCtCQUErQixFQUFFLEVBQ2pDLG9CQUFvQixFQUFFLENBQ3ZCLENBQUM7SUFFTyxZQUFZLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzt3R0FQcEMsMkJBQTJCOzRGQUEzQiwyQkFBMkIsd0dBUDVCOztHQUVULDREQUVTLHFCQUFxQjs7NEZBR3BCLDJCQUEyQjtrQkFUdkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyxRQUFRLEVBQUU7O0dBRVQ7b0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLE9BQU8sRUFBRSxDQUFDLHFCQUFxQixDQUFDO29CQUNoQyxVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IG1hcCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQWJzdHJhY3REYnhUYWJsZUl0ZW1EaXJlY3RpdmUgfSBmcm9tICcuL3RhYmxlLml0ZW0uZGlyZWN0aXZlJztcbmltcG9ydCB7IG1heWJlVmFsdWVGcm9tT2JzZXJ2YWJsZU9yVmFsdWUgfSBmcm9tICdAZGVyZWVrYi9yeGpzJztcbmltcG9ydCB7IERieEluamVjdGlvbkNvbXBvbmVudCB9IGZyb20gJ0BkZXJlZWtiL2RieC1jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGJ4LXRhYmxlLWl0ZW0taGVhZGVyJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGJ4LWluamVjdGlvbiBbY29uZmlnXT1cImNvbmZpZ1NpZ25hbCgpXCI+PC9kYngtaW5qZWN0aW9uPlxuICBgLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW0RieEluamVjdGlvbkNvbXBvbmVudF0sXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgRGJ4VGFibGVJdGVtSGVhZGVyQ29tcG9uZW50PFQ+IGV4dGVuZHMgQWJzdHJhY3REYnhUYWJsZUl0ZW1EaXJlY3RpdmU8VD4ge1xuICByZWFkb25seSBjb25maWckID0gdGhpcy50YWJsZVN0b3JlLnZpZXdEZWxlZ2F0ZSQucGlwZShcbiAgICBzd2l0Y2hNYXAoKHZpZXdEZWxlZ2F0ZSkgPT4gdGhpcy5pdGVtJC5waXBlKG1hcCgoeCkgPT4gdmlld0RlbGVnYXRlLml0ZW1IZWFkZXIoeCkpKSksXG4gICAgbWF5YmVWYWx1ZUZyb21PYnNlcnZhYmxlT3JWYWx1ZSgpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgKTtcblxuICByZWFkb25seSBjb25maWdTaWduYWwgPSB0b1NpZ25hbCh0aGlzLmNvbmZpZyQpO1xufVxuIl19
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuaXRlbS5oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi90YWJsZS9zcmMvbGliL3RhYmxlLml0ZW0uaGVhZGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBVzFELE1BQU0sT0FBTywyQkFBK0IsU0FBUSw2QkFBZ0M7SUFDekUsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDbkQsU0FBUyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQzlHLCtCQUErQixFQUFFLENBQ2xDLENBQUM7SUFFTyxZQUFZLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzt3R0FOcEMsMkJBQTJCOzRGQUEzQiwyQkFBMkIsd0dBUDVCOztHQUVULDREQUVTLHFCQUFxQjs7NEZBR3BCLDJCQUEyQjtrQkFUdkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyxRQUFRLEVBQUU7O0dBRVQ7b0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLE9BQU8sRUFBRSxDQUFDLHFCQUFxQixDQUFDO29CQUNoQyxVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBYnN0cmFjdERieFRhYmxlSXRlbURpcmVjdGl2ZSB9IGZyb20gJy4vdGFibGUuaXRlbS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgbWF5YmVWYWx1ZUZyb21PYnNlcnZhYmxlT3JWYWx1ZSB9IGZyb20gJ0BkZXJlZWtiL3J4anMnO1xuaW1wb3J0IHsgRGJ4SW5qZWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnQGRlcmVla2IvZGJ4LWNvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYngtdGFibGUtaXRlbS1oZWFkZXInLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkYngtaW5qZWN0aW9uIFtjb25maWddPVwiY29uZmlnU2lnbmFsKClcIj48L2RieC1pbmplY3Rpb24+XG4gIGAsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbRGJ4SW5qZWN0aW9uQ29tcG9uZW50XSxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBEYnhUYWJsZUl0ZW1IZWFkZXJDb21wb25lbnQ8VD4gZXh0ZW5kcyBBYnN0cmFjdERieFRhYmxlSXRlbURpcmVjdGl2ZTxUPiB7XG4gIHJlYWRvbmx5IGNvbmZpZyQgPSB0aGlzLnRhYmxlU3RvcmUudmlld0RlbGVnYXRlJC5waXBlKFxuICAgIHN3aXRjaE1hcCgodmlld0RlbGVnYXRlKSA9PiB0aGlzLml0ZW0kLnBpcGUobWFwKCh4KSA9PiAoeCAhPSBudWxsID8gdmlld0RlbGVnYXRlLml0ZW1IZWFkZXIoeCkgOiB1bmRlZmluZWQpKSkpLFxuICAgIG1heWJlVmFsdWVGcm9tT2JzZXJ2YWJsZU9yVmFsdWUoKVxuICApO1xuXG4gIHJlYWRvbmx5IGNvbmZpZ1NpZ25hbCA9IHRvU2lnbmFsKHRoaXMuY29uZmlnJCk7XG59XG4iXX0=
@@ -0,0 +1,103 @@
1
+ import { combineLatest, map, of, shareReplay, startWith, switchMap } from 'rxjs';
2
+ import { filterMaybeArrayValues } from '@dereekb/util';
3
+ /**
4
+ * Default track by function for DbxTableColumn.
5
+ *
6
+ * Returns the column name.
7
+ *
8
+ * @param column
9
+ * @returns
10
+ */
11
+ export const DEFAULT_DBX_TABLE_READER_COLUMN_TRACK_BY = (column) => column.columnName;
12
+ export function dbxTableReader(config) {
13
+ const { delegate, tableStore } = config;
14
+ const { items$ } = tableStore;
15
+ const { readItemCellDataForColumn, trackColumn: inputTrackColumn, trackItem } = delegate;
16
+ const trackColumn = (inputTrackColumn ?? DEFAULT_DBX_TABLE_READER_COLUMN_TRACK_BY);
17
+ const _cellDataAccessorsForColumn = (column) => {
18
+ return items$.pipe(map((x) => {
19
+ const allObservables = [];
20
+ const accessorsRecord = {};
21
+ x.forEach((item) => {
22
+ const itemKey = trackItem(item);
23
+ const accessor$ = readItemCellDataForColumn(column, item).pipe(map((value) => {
24
+ return {
25
+ column,
26
+ item,
27
+ value
28
+ };
29
+ }));
30
+ accessorsRecord[itemKey] = accessor$;
31
+ allObservables.push(accessor$);
32
+ });
33
+ const allValues$ = combineLatest(allObservables).pipe(startWith([]), shareReplay(1));
34
+ return {
35
+ column,
36
+ allValues$,
37
+ accessorsRecord
38
+ };
39
+ }), shareReplay(1));
40
+ };
41
+ function columnDataCellsAccessor(columnKey, column) {
42
+ const cellDataAccessors$ = _cellDataAccessorsForColumn(column);
43
+ const cellData$ = cellDataAccessors$.pipe(switchMap((record) => record.allValues$), startWith([]), shareReplay(1));
44
+ return {
45
+ columnKey,
46
+ column,
47
+ cellDataAccessors$,
48
+ cellData$
49
+ };
50
+ }
51
+ const allColumnsData$ = tableStore.columns$.pipe(map((nextColumns) => {
52
+ const record = {};
53
+ nextColumns.forEach((column) => {
54
+ const columnKey = trackColumn(column);
55
+ record[columnKey] = columnDataCellsAccessor(columnKey, column);
56
+ });
57
+ return {
58
+ record
59
+ };
60
+ }), shareReplay(1));
61
+ const _columnAccessorForColumn = (column) => {
62
+ const columnKey = trackColumn(column);
63
+ return allColumnsData$.pipe(map((columnsData) => columnsData.record[columnKey]), shareReplay(1));
64
+ };
65
+ const loadCellDataPairsForColumn = (column) => {
66
+ const columnsData$ = _columnAccessorForColumn(column).pipe(switchMap((accessor) => {
67
+ // when visibility changes, the data will change to be an empty array
68
+ return accessor ? accessor.cellData$ : of([]);
69
+ }), shareReplay(1));
70
+ return columnsData$;
71
+ };
72
+ const cellDataPairsForColumn = (column) => {
73
+ return loadCellDataPairsForColumn(column);
74
+ };
75
+ const cellDataForColumn = (column) => {
76
+ return cellDataPairsForColumn(column).pipe(map((pairs) => filterMaybeArrayValues(pairs.map((pair) => pair.value))), shareReplay(1));
77
+ };
78
+ const cellDataPairForColumnAndItem = (column, item) => {
79
+ const itemKey = trackItem(item);
80
+ const columnsData$ = _columnAccessorForColumn(column).pipe(switchMap((columnsData) => {
81
+ return columnsData
82
+ ? columnsData.cellDataAccessors$.pipe(switchMap((cellDataAccessor) => {
83
+ const itemAccessor = cellDataAccessor.accessorsRecord[itemKey];
84
+ const result = itemAccessor ? itemAccessor : of(null);
85
+ return result;
86
+ }))
87
+ : of(null);
88
+ }), shareReplay(1));
89
+ return columnsData$;
90
+ };
91
+ const cellDataForColumnAndItem = (column, item) => {
92
+ return cellDataPairForColumnAndItem(column, item).pipe(map((pair) => pair?.value));
93
+ };
94
+ return {
95
+ tableStore,
96
+ delegate,
97
+ cellDataPairsForColumn,
98
+ cellDataForColumn,
99
+ cellDataPairForColumnAndItem,
100
+ cellDataForColumnAndItem
101
+ };
102
+ }
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUucmVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi90YWJsZS9zcmMvbGliL3RhYmxlLnJlYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0YsT0FBTyxFQUF1QixzQkFBc0IsRUFBMkIsTUFBTSxlQUFlLENBQUM7QUEyQnJHOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsTUFBTSx3Q0FBd0MsR0FBcUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7QUE0RXhKLE1BQU0sVUFBVSxjQUFjLENBQXVCLE1BQXdDO0lBQzNGLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBQ3hDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUM7SUFDOUIsTUFBTSxFQUFFLHlCQUF5QixFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsR0FBRyxRQUFRLENBQUM7SUFDekYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxnQkFBZ0IsSUFBSSx3Q0FBd0MsQ0FBMkMsQ0FBQztJQVU3SCxNQUFNLDJCQUEyQixHQUFHLENBQUMsTUFBeUIsRUFBd0QsRUFBRTtRQUN0SCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQ2hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ1IsTUFBTSxjQUFjLEdBQXNELEVBQUUsQ0FBQztZQUM3RSxNQUFNLGVBQWUsR0FBbUQsRUFBRSxDQUFDO1lBRTNFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDakIsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FB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Q0FBQyxDQUNmLENBQUM7UUFFRixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDLENBQUM7SUFFRixNQUFNLHdCQUF3QixHQUFHLENBQUMsTUFBeUIsRUFBRSxJQUFPLEVBQXdCLEVBQUU7UUFDNUYsT0FBTyw0QkFBNEIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDckYsQ0FBQyxDQUFDO0lBRUYsT0FBTztRQUNMLFVBQVU7UUFDVixRQUFRO1FBQ1Isc0JBQXNCO1FBQ3RCLGlCQUFpQjtRQUNqQiw0QkFBNEI7UUFDNUIsd0JBQXdCO0tBQ3pCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgc2hhcmVSZXBsYXksIHN0YXJ0V2l0aCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQcmltYXRpdmVLZXksIE1heWJlLCBmaWx0ZXJNYXliZUFycmF5VmFsdWVzLCBSZWFkUmVxdWlyZWRLZXlGdW5jdGlvbiB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgRGJ4VGFibGVDb2x1bW4gfSBmcm9tICcuL3RhYmxlJztcbmltcG9ydCB7IERieFRhYmxlU3RvcmUgfSBmcm9tICcuL3RhYmxlLnN0b3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBEYnhUYWJsZVJlYWRlckNlbGxQYWlyPEMsIFQ+IHtcbiAgcmVhZG9ubHkgY29sdW1uOiBEYnhUYWJsZUNvbHVtbjxDPjtcbiAgcmVhZG9ubHkgaXRlbTogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYnhUYWJsZVJlYWRlckNlbGxEYXRhUGFpcjxDLCBULCBPPiBleHRlbmRzIERieFRhYmxlUmVhZGVyQ2VsbFBhaXI8QywgVD4ge1xuICByZWFkb25seSB2YWx1ZTogTztcbn1cblxuLyoqXG4gKiBLZXkgdXNlZCBmb3IgdHJhY2tpbmcgY29sdW1ucy5cbiAqXG4gKiBHZW5lcmFsbHkgdGhlIHRhYmxlIG5hbWUgaXMgdXNlZCBmb3IgdGhpcy5cbiAqL1xuZXhwb3J0IHR5cGUgRGJ4VGFibGVSZWFkZXJDb2x1bW5LZXkgPSBzdHJpbmc7XG5cbi8qKlxuICogS2V5IHVzZWQgZm9yIHRyYWNraW5nIGl0ZW1zLlxuICpcbiAqIEdlbmVyYWxseSB0aGUgaXRlbSdzIHVuaXF1ZSBpZGVudGlmaWVyIGlzIHVzZWQgZm9yIHRoaXMuXG4gKi9cbmV4cG9ydCB0eXBlIERieFRhYmxlUmVhZGVySXRlbUtleSA9IFByaW1hdGl2ZUtleTtcblxuLyoqXG4gKiBEZWZhdWx0IHRyYWNrIGJ5IGZ1bmN0aW9uIGZvciBEYnhUYWJsZUNvbHVtbi5cbiAqXG4gKiBSZXR1cm5zIHRoZSBjb2x1bW4gbmFtZS5cbiAqXG4gKiBAcGFyYW0gY29sdW1uXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9EQlhfVEFCTEVfUkVBREVSX0NPTFVNTl9UUkFDS19CWTogUmVhZFJlcXVpcmVkS2V5RnVuY3Rpb248RGJ4VGFibGVDb2x1bW48RGJ4VGFibGVSZWFkZXJDb2x1bW5LZXk+PiA9IChjb2x1bW4pID0+IGNvbHVtbi5jb2x1bW5OYW1lO1xuXG4vKipcbiAqIEZ1bmN0aW9uIHVzZWQgZm9yIHRyYWNraW5nIHVuaXF1ZSBjb2x1bW5zIHVzaW5nIHRoZSBjb2x1bW4ncyBkYXRhLlxuICpcbiAqIElmIHRoZSBjb2x1bW4ga2V5IHZhbHVlIGlzIHRoZSBzYW1lIGJldHdlZW4gdGhvc2UgdHdvIGNvbHVtbnMsIHRoZW4gdGhlIG1ldGFkYXRhIG9mIGJvdGggY29sdW1ucyB3aWxsIGJlIGNvbnNpZGVyZWQgdGhlIHNhbWUvZXF1YWwuXG4gKi9cbmV4cG9ydCB0eXBlIERieFRhYmxlUmVhZGVyQ29sdW1uVHJhY2tCeUZ1bmN0aW9uPEM+ID0gUmVhZFJlcXVpcmVkS2V5RnVuY3Rpb248RGJ4VGFibGVDb2x1bW48Qz4sIERieFRhYmxlUmVhZGVyQ29sdW1uS2V5PjtcblxuLyoqXG4gKiBGdW5jdGlvbiB1c2VkIGZvciB0cmFja2luZyB1bmlxdWUgY29sdW1ucyB1c2luZyB0aGUgY29sdW1uJ3MgZGF0YS5cbiAqXG4gKiBJZiB0aGUgY29sdW1uIGtleSB2YWx1ZSBpcyB0aGUgc2FtZSBiZXR3ZWVuIHRob3NlIHR3byBjb2x1bW5zLCB0aGVuIHRoZSBtZXRhZGF0YSBvZiBib3RoIGNvbHVtbnMgd2lsbCBiZSBjb25zaWRlcmVkIHRoZSBzYW1lL2VxdWFsLlxuICovXG5leHBvcnQgdHlwZSBEYnhUYWJsZVJlYWRlckl0ZW1UcmFja0J5RnVuY3Rpb248VD4gPSBSZWFkUmVxdWlyZWRLZXlGdW5jdGlvbjxULCBEYnhUYWJsZVJlYWRlckl0ZW1LZXk+O1xuXG5leHBvcnQgaW50ZXJmYWNlIERieFRhYmxlUmVhZGVyRGVsZWdhdGU8QywgVCwgTz4ge1xuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBkYXRhIGZvciBhIHNwZWNpZmljIGNvbHVtbiBhbmQgaXRlbS9yb3cuXG4gICAqXG4gICAqIEBwYXJhbSBjb2x1bW5cbiAgICogQHBhcmFtIGl0ZW1cbiAgICovXG4gIHJlYWRJdGVtQ2VsbERhdGFGb3JDb2x1bW4oY29sdW1uOiBEYnhUYWJsZUNvbHVtbjxDPiwgaXRlbTogVCk6IE9ic2VydmFibGU8Tz47XG4gIC8qKlxuICAgKiBVc2VkIGZvciB0cmFja2luZyB1bmlxdWUgY29sdW1ucy5cbiAgICpcbiAgICogVXNlIGlmIHRoZSBtZXRhZGF0YSBiZXR3ZWVuIGNvbHVtbnMgc2hvdWxkIGJlIHVzZWQgZm9yIHVuaXF1ZSBpZGVudGlmaWNhdGlvbi5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gdXNpbmcgdGhlIGNvbHVtbiBuYW1lIGFzIHRoZSBrZXkgaWYgbm90IGRlZmluZWQuXG4gICAqL1xuICB0cmFja0NvbHVtbj86IERieFRhYmxlUmVhZGVyQ29sdW1uVHJhY2tCeUZ1bmN0aW9uPEM+O1xuICAvKipcbiAgICogVXNlZCBmb3IgdHJhY2tpbmcgdW5pcXVlIGl0ZW1zL3Jvd3MuXG4gICAqXG4gICAqIFVzZSBpZiB0aGUgbWV0YWRhdGEgYmV0d2VlbiBpdGVtcyBzaG91bGQgYmUgdXNlZCBmb3IgdW5pcXVlIGlkZW50aWZpY2F0aW9uLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB1c2luZyB0aGUgaXRlbSBpdHNlbGYgYXMgdGhlIGtleSBpZiBub3QgZGVmaW5lZC5cbiAgICovXG4gIHRyYWNrSXRlbTogRGJ4VGFibGVSZWFkZXJJdGVtVHJhY2tCeUZ1bmN0aW9uPFQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERieFRhYmxlUmVhZGVyQ29uZmlnPEMsIFQsIE8sIEcgPSB1bmtub3duPiB7XG4gIC8qKlxuICAgKiBEZWxlZ2F0ZSB1c2VkIGZvciByZXRyaWV2aW5nIHRoZSBkYXRhIGZvciBhIHNwZWNpZmljIGNvbHVtbiBhbmQgaXRlbS9yb3cuXG4gICAqL1xuICByZWFkb25seSBkZWxlZ2F0ZTogRGJ4VGFibGVSZWFkZXJEZWxlZ2F0ZTxDLCBULCBPPjtcbiAgLyoqXG4gICAqIFRoZSB0YWJsZSBzdG9yZSB1c2VkIGZvciByZXRyaWV2aW5nIHRoZSBpdGVtcy5cbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlU3RvcmU6IERieFRhYmxlU3RvcmU8dW5rbm93biwgQywgVCwgRz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4VGFibGVSZWFkZXI8QywgVCwgTywgRyA9IHVua25vd24+IGV4dGVuZHMgRGJ4VGFibGVSZWFkZXJDb25maWc8QywgVCwgTywgRz4ge1xuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCBjZWxsIGRhdGEgcGFpcnMgZm9yIGEgc3BlY2lmaWMgY29sdW1uLlxuICAgKi9cbiAgY2VsbERhdGFQYWlyc0ZvckNvbHVtbihjb2x1bW46IERieFRhYmxlQ29sdW1uPEM+KTogT2JzZXJ2YWJsZTxEYnhUYWJsZVJlYWRlckNlbGxEYXRhUGFpcjxDLCBULCBPPltdPjtcbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgY2VsbCBkYXRhIGZvciBhIHNwZWNpZmljIGNvbHVtbi5cbiAgICovXG4gIGNlbGxEYXRhRm9yQ29sdW1uKGNvbHVtbjogRGJ4VGFibGVDb2x1bW48Qz4pOiBPYnNlcnZhYmxlPE9bXT47XG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGNlbGwgZGF0YSBwYWlyIGZvciBhIHNwZWNpZmljIGNvbHVtbiBhbmQgaXRlbS5cbiAgICpcbiAgICogUmV0dXJucyBudWxsIGlmIHRoZSBjb2x1bW4gaXMgbm90IHZpc2libGUgb3IgdGhlIGl0ZW0gaXMgbm90IGZvdW5kLlxuICAgKi9cbiAgY2VsbERhdGFQYWlyRm9yQ29sdW1uQW5kSXRlbShjb2x1bW46IERieFRhYmxlQ29sdW1uPEM+LCBpdGVtOiBUKTogT2JzZXJ2YWJsZTxNYXliZTxEYnhUYWJsZVJlYWRlckNlbGxEYXRhUGFpcjxDLCBULCBPPj4+O1xuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBjZWxsIGRhdGEgZm9yIGEgc3BlY2lmaWMgY29sdW1uIGFuZCBpdGVtLlxuICAgKlxuICAgKiBSZXR1cm5zIG51bGwgaWYgdGhlIGNvbHVtbiBpcyBub3QgdmlzaWJsZSBvciB0aGUgaXRlbSBpcyBub3QgZm91bmQuXG4gICAqL1xuICBjZWxsRGF0YUZvckNvbHVtbkFuZEl0ZW0oY29sdW1uOiBEYnhUYWJsZUNvbHVtbjxDPiwgaXRlbTogVCk6IE9ic2VydmFibGU8TWF5YmU8Tz4+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGJ4VGFibGVSZWFkZXI8QywgVCwgTywgRyA9IHVua25vd24+KGNvbmZpZzogRGJ4VGFibGVSZWFkZXJDb25maWc8QywgVCwgTywgRz4pOiBEYnhUYWJsZVJlYWRlcjxDLCBULCBPLCBHPiB7XG4gIGNvbnN0IHsgZGVsZWdhdGUsIHRhYmxlU3RvcmUgfSA9IGNvbmZpZztcbiAgY29uc3QgeyBpdGVtcyQgfSA9IHRhYmxlU3RvcmU7XG4gIGNvbnN0IHsgcmVhZEl0ZW1DZWxsRGF0YUZvckNvbHVtbiwgdHJhY2tDb2x1bW46IGlucHV0VHJhY2tDb2x1bW4sIHRyYWNrSXRlbSB9ID0gZGVsZWdhdGU7XG4gIGNvbnN0IHRyYWNrQ29sdW1uID0gKGlucHV0VHJhY2tDb2x1bW4gPz8gREVGQVVMVF9EQlhfVEFCTEVfUkVBREVSX0NPTFVNTl9UUkFDS19CWSkgYXMgRGJ4VGFibGVSZWFkZXJDb2x1bW5UcmFja0J5RnVuY3Rpb248Qz47XG5cbiAgaW50ZXJmYWNlIERieFRhYmxlUmVhZGVyQ2VsbERhdGFBY2Nlc3NvcnNGb3JDb2x1bW4ge1xuICAgIHJlYWRvbmx5IGNvbHVtbjogRGJ4VGFibGVDb2x1bW48Qz47XG4gICAgcmVhZG9ubHkgYWxsVmFsdWVzJDogT2JzZXJ2YWJsZTxEYnhUYWJsZVJlYWRlckNlbGxEYXRhUGFpcjxDLCBULCBPPltdPjtcbiAgICByZWFkb25seSBhY2Nlc3NvcnNSZWNvcmQ6IERieFRhYmxlUmVhZGVyQ2VsbERhdGFBY2Nlc3NvcnNGb3JDb2x1bW5SZWNvcmQ7XG4gIH1cblxuICB0eXBlIERieFRhYmxlUmVhZGVyQ2VsbERhdGFBY2Nlc3NvcnNGb3JDb2x1bW5SZWNvcmQgPSBSZWNvcmQ8RGJ4VGFibGVSZWFkZXJJdGVtS2V5LCBPYnNlcnZhYmxlPERieFRhYmxlUmVhZGVyQ2VsbERhdGFQYWlyPEMsIFQsIE8+Pj47XG5cbiAgY29uc3QgX2NlbGxEYXRhQWNjZXNzb3JzRm9yQ29sdW1uID0gKGNvbHVtbjogRGJ4VGFibGVDb2x1bW48Qz4pOiBPYnNlcnZhYmxlPERieFRhYmxlUmVhZGVyQ2VsbERhdGFBY2Nlc3NvcnNGb3JDb2x1bW4+ID0+IHtcbiAgICByZXR1cm4gaXRlbXMkLnBpcGUoXG4gICAgICBtYXAoKHgpID0+IHtcbiAgICAgICAgY29uc3QgYWxsT2JzZXJ2YWJsZXM6IE9ic2VydmFibGU8RGJ4VGFibGVSZWFkZXJDZWxsRGF0YVBhaXI8QywgVCwgTz4+W10gPSBbXTtcbiAgICAgICAgY29uc3QgYWNjZXNzb3JzUmVjb3JkOiBEYnhUYWJsZVJlYWRlckNlbGxEYXRhQWNjZXNzb3JzRm9yQ29sdW1uUmVjb3JkID0ge307XG5cbiAgICAgICAgeC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgY29uc3QgaXRlbUtleSA9IHRyYWNrSXRlbShpdGVtKTtcbiAgICAgICAgICBjb25zdCBhY2Nlc3NvciQgPSByZWFkSXRlbUNlbGxEYXRhRm9yQ29sdW1uKGNvbHVtbiwgaXRlbSkucGlwZShcbiAgICAgICAgICAgIG1hcCgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgYWNjZXNzb3JzUmVjb3JkW2l0ZW1LZXldID0gYWNjZXNzb3IkO1xuICAgICAgICAgIGFsbE9ic2VydmFibGVzLnB1c2goYWNjZXNzb3IkKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgYWxsVmFsdWVzJCA9IGNvbWJpbmVMYXRlc3QoYWxsT2JzZXJ2YWJsZXMpLnBpcGUoc3RhcnRXaXRoKFtdKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29sdW1uLFxuICAgICAgICAgIGFsbFZhbHVlcyQsXG4gICAgICAgICAgYWNjZXNzb3JzUmVjb3JkXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcbiAgfTtcblxuICBpbnRlcmZhY2UgRGJ4VGFibGVSZWFkZXJDb2x1bW5EYXRhQ2VsbHNBY2Nlc3NvciB7XG4gICAgcmVhZG9ubHkgY29sdW1uS2V5OiBEYnhUYWJsZVJlYWRlckNvbHVtbktleTtcbiAgICByZWFkb25seSBjb2x1bW46IERieFRhYmxlQ29sdW1uPEM+O1xuICAgIHJlYWRvbmx5IGNlbGxEYXRhQWNjZXNzb3JzJDogT2JzZXJ2YWJsZTxEYnhUYWJsZVJlYWRlckNlbGxEYXRhQWNjZXNzb3JzRm9yQ29sdW1uPjtcbiAgICByZWFkb25seSBjZWxsRGF0YSQ6IE9ic2VydmFibGU8RGJ4VGFibGVSZWFkZXJDZWxsRGF0YVBhaXI8QywgVCwgTz5bXT47XG4gIH1cblxuICBmdW5jdGlvbiBjb2x1bW5EYXRhQ2VsbHNBY2Nlc3Nvcihjb2x1bW5LZXk6IERieFRhYmxlUmVhZGVyQ29sdW1uS2V5LCBjb2x1bW46IERieFRhYmxlQ29sdW1uPEM+KTogRGJ4VGFibGVSZWFkZXJDb2x1bW5EYXRhQ2VsbHNBY2Nlc3NvciB7XG4gICAgY29uc3QgY2VsbERhdGFBY2Nlc3NvcnMkID0gX2NlbGxEYXRhQWNjZXNzb3JzRm9yQ29sdW1uKGNvbHVtbik7XG4gICAgY29uc3QgY2VsbERhdGEkID0gY2VsbERhdGFBY2Nlc3NvcnMkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHJlY29yZCkgPT4gcmVjb3JkLmFsbFZhbHVlcyQpLFxuICAgICAgc3RhcnRXaXRoKFtdKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBjb2x1bW5LZXksXG4gICAgICBjb2x1bW4sXG4gICAgICBjZWxsRGF0YUFjY2Vzc29ycyQsXG4gICAgICBjZWxsRGF0YSRcbiAgICB9O1xuICB9XG5cbiAgaW50ZXJmYWNlIERieFRhYmxlUmVhZGVyQ29sdW1uRGF0YUFjY3VtdWxhdG9yIHtcbiAgICByZWFkb25seSByZWNvcmQ6IERieFRhYmxlUmVhZGVyQ29sdW1uRGF0YVJlY29yZDtcbiAgfVxuXG4gIHR5cGUgRGJ4VGFibGVSZWFkZXJDb2x1bW5EYXRhUmVjb3JkID0gUmVjb3JkPERieFRhYmxlUmVhZGVyQ29sdW1uS2V5LCBEYnhUYWJsZVJlYWRlckNvbHVtbkRhdGFDZWxsc0FjY2Vzc29yPjtcblxuICBjb25zdCBhbGxDb2x1bW5zRGF0YSQ6IE9ic2VydmFibGU8RGJ4VGFibGVSZWFkZXJDb2x1bW5EYXRhQWNjdW11bGF0b3I+ID0gdGFibGVTdG9yZS5jb2x1bW5zJC5waXBlKFxuICAgIG1hcCgobmV4dENvbHVtbnM6IERieFRhYmxlQ29sdW1uPEM+W10pID0+IHtcbiAgICAgIGNvbnN0IHJlY29yZDogRGJ4VGFibGVSZWFkZXJDb2x1bW5EYXRhUmVjb3JkID0ge307XG5cbiAgICAgIG5leHRDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICBjb25zdCBjb2x1bW5LZXkgPSB0cmFja0NvbHVtbihjb2x1bW4pO1xuICAgICAgICByZWNvcmRbY29sdW1uS2V5XSA9IGNvbHVtbkRhdGFDZWxsc0FjY2Vzc29yKGNvbHVtbktleSwgY29sdW1uKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICByZWNvcmRcbiAgICAgIH07XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICBjb25zdCBfY29sdW1uQWNjZXNzb3JGb3JDb2x1bW4gPSAoY29sdW1uOiBEYnhUYWJsZUNvbHVtbjxDPik6IE9ic2VydmFibGU8TWF5YmU8RGJ4VGFibGVSZWFkZXJDb2x1bW5EYXRhQ2VsbHNBY2Nlc3Nvcj4+ID0+IHtcbiAgICBjb25zdCBjb2x1bW5LZXkgPSB0cmFja0NvbHVtbihjb2x1bW4pO1xuICAgIHJldHVybiBhbGxDb2x1bW5zRGF0YSQucGlwZShcbiAgICAgIG1hcCgoY29sdW1uc0RhdGEpID0+IGNvbHVtbnNEYXRhLnJlY29yZFtjb2x1bW5LZXldKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcbiAgfTtcblxuICBjb25zdCBsb2FkQ2VsbERhdGFQYWlyc0ZvckNvbHVtbiA9IChjb2x1bW46IERieFRhYmxlQ29sdW1uPEM+KTogT2JzZXJ2YWJsZTxEYnhUYWJsZVJlYWRlckNlbGxEYXRhUGFpcjxDLCBULCBPPltdPiA9PiB7XG4gICAgY29uc3QgY29sdW1uc0RhdGEkID0gX2NvbHVtbkFjY2Vzc29yRm9yQ29sdW1uKGNvbHVtbikucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoYWNjZXNzb3IpID0+IHtcbiAgICAgICAgLy8gd2hlbiB2aXNpYmlsaXR5IGNoYW5nZXMsIHRoZSBkYXRhIHdpbGwgY2hhbmdlIHRvIGJlIGFuIGVtcHR5IGFycmF5XG4gICAgICAgIHJldHVybiBhY2Nlc3NvciA/IGFjY2Vzc29yLmNlbGxEYXRhJCA6IG9mKFtdKTtcbiAgICAgIH0pLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuXG4gICAgcmV0dXJuIGNvbHVtbnNEYXRhJDtcbiAgfTtcblxuICBjb25zdCBjZWxsRGF0YVBhaXJzRm9yQ29sdW1uID0gKGNvbHVtbjogRGJ4VGFibGVDb2x1bW48Qz4pOiBPYnNlcnZhYmxlPERieFRhYmxlUmVhZGVyQ2VsbERhdGFQYWlyPEMsIFQsIE8+W10+ID0+IHtcbiAgICByZXR1cm4gbG9hZENlbGxEYXRhUGFpcnNGb3JDb2x1bW4oY29sdW1uKTtcbiAgfTtcblxuICBjb25zdCBjZWxsRGF0YUZvckNvbHVtbiA9IChjb2x1bW46IERieFRhYmxlQ29sdW1uPEM+KTogT2JzZXJ2YWJsZTxPW10+ID0+IHtcbiAgICByZXR1cm4gY2VsbERhdGFQYWlyc0ZvckNvbHVtbihjb2x1bW4pLnBpcGUoXG4gICAgICBtYXAoKHBhaXJzKSA9PiBmaWx0ZXJNYXliZUFycmF5VmFsdWVzKHBhaXJzLm1hcCgocGFpcikgPT4gcGFpci52YWx1ZSkpKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcbiAgfTtcblxuICBjb25zdCBjZWxsRGF0YVBhaXJGb3JDb2x1bW5BbmRJdGVtID0gKGNvbHVtbjogRGJ4VGFibGVDb2x1bW48Qz4sIGl0ZW06IFQpOiBPYnNlcnZhYmxlPE1heWJlPERieFRhYmxlUmVhZGVyQ2VsbERhdGFQYWlyPEMsIFQsIE8+Pj4gPT4ge1xuICAgIGNvbnN0IGl0ZW1LZXkgPSB0cmFja0l0ZW0oaXRlbSk7XG4gICAgY29uc3QgY29sdW1uc0RhdGEkID0gX2NvbHVtbkFjY2Vzc29yRm9yQ29sdW1uKGNvbHVtbikucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoY29sdW1uc0RhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbnNEYXRhXG4gICAgICAgICAgPyBjb2x1bW5zRGF0YS5jZWxsRGF0YUFjY2Vzc29ycyQucGlwZShcbiAgICAgICAgICAgICAgc3dpdGNoTWFwKChjZWxsRGF0YUFjY2Vzc29yKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbUFjY2Vzc29yID0gY2VsbERhdGFBY2Nlc3Nvci5hY2Nlc3NvcnNSZWNvcmRbaXRlbUtleV07XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBPYnNlcnZhYmxlPE1heWJlPERieFRhYmxlUmVhZGVyQ2VsbERhdGFQYWlyPEMsIFQsIE8+Pj4gPSBpdGVtQWNjZXNzb3IgPyBpdGVtQWNjZXNzb3IgOiBvZihudWxsKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogb2YobnVsbCk7XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcblxuICAgIHJldHVybiBjb2x1bW5zRGF0YSQ7XG4gIH07XG5cbiAgY29uc3QgY2VsbERhdGFGb3JDb2x1bW5BbmRJdGVtID0gKGNvbHVtbjogRGJ4VGFibGVDb2x1bW48Qz4sIGl0ZW06IFQpOiBPYnNlcnZhYmxlPE1heWJlPE8+PiA9PiB7XG4gICAgcmV0dXJuIGNlbGxEYXRhUGFpckZvckNvbHVtbkFuZEl0ZW0oY29sdW1uLCBpdGVtKS5waXBlKG1hcCgocGFpcikgPT4gcGFpcj8udmFsdWUpKTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIHRhYmxlU3RvcmUsXG4gICAgZGVsZWdhdGUsXG4gICAgY2VsbERhdGFQYWlyc0ZvckNvbHVtbixcbiAgICBjZWxsRGF0YUZvckNvbHVtbixcbiAgICBjZWxsRGF0YVBhaXJGb3JDb2x1bW5BbmRJdGVtLFxuICAgIGNlbGxEYXRhRm9yQ29sdW1uQW5kSXRlbVxuICB9O1xufVxuIl19