@acorex/components 7.24.4 → 17.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. package/common/lib/classes/datasource.class.d.ts +2 -0
  2. package/data-table/index.d.ts +3 -2
  3. package/data-table/lib/base-data-table.class.d.ts +25 -0
  4. package/data-table/lib/columns/row-command-column.component.d.ts +2 -2
  5. package/data-table/lib/data-table/data-table.component.d.ts +52 -0
  6. package/data-table/lib/data-table.module.d.ts +21 -18
  7. package/data-table/lib/{data-table.component.d.ts → infinite-scroll-data-table/infinite-scroll-data-table.component.d.ts} +8 -22
  8. package/esm2022/button/lib/button.component.mjs +2 -2
  9. package/esm2022/common/lib/classes/datasource.class.mjs +8 -2
  10. package/esm2022/common/lib/components/selection-base.component.class.mjs +12 -35
  11. package/esm2022/data-pager/lib/data-pager.component.mjs +7 -11
  12. package/esm2022/data-table/index.mjs +4 -3
  13. package/esm2022/data-table/lib/base-data-table.class.mjs +36 -0
  14. package/esm2022/data-table/lib/columns/row-command-column.component.mjs +57 -69
  15. package/esm2022/data-table/lib/columns/row-index-column.component.mjs +7 -21
  16. package/esm2022/data-table/lib/columns/row-select-column.component.mjs +6 -18
  17. package/esm2022/data-table/lib/data-table/data-table.component.mjs +233 -0
  18. package/esm2022/data-table/lib/data-table.module.mjs +24 -7
  19. package/esm2022/data-table/lib/infinite-scroll-data-table/infinite-scroll-data-table.component.mjs +272 -0
  20. package/esm2022/drawer/lib/drawer.component.mjs +2 -2
  21. package/esm2022/menu/lib/menu-item/menu-item.component.mjs +3 -3
  22. package/esm2022/menu/lib/menu.component.mjs +2 -2
  23. package/esm2022/otp/lib/otp.component.mjs +2 -2
  24. package/esm2022/phone-box/lib/phone-box.component.mjs +25 -42
  25. package/esm2022/phone-box/lib/phone-box.module.mjs +20 -3
  26. package/esm2022/select-box/lib/select-box.component.mjs +2 -2
  27. package/esm2022/text-area/lib/text-area.component.mjs +6 -22
  28. package/fesm2022/acorex-components-button.mjs +2 -2
  29. package/fesm2022/acorex-components-button.mjs.map +1 -1
  30. package/fesm2022/acorex-components-common.mjs +18 -35
  31. package/fesm2022/acorex-components-common.mjs.map +1 -1
  32. package/fesm2022/acorex-components-data-pager.mjs +5 -9
  33. package/fesm2022/acorex-components-data-pager.mjs.map +1 -1
  34. package/fesm2022/acorex-components-data-table.mjs +684 -470
  35. package/fesm2022/acorex-components-data-table.mjs.map +1 -1
  36. package/fesm2022/acorex-components-drawer.mjs +2 -2
  37. package/fesm2022/acorex-components-drawer.mjs.map +1 -1
  38. package/fesm2022/acorex-components-menu.mjs +4 -4
  39. package/fesm2022/acorex-components-menu.mjs.map +1 -1
  40. package/fesm2022/acorex-components-otp.mjs +2 -2
  41. package/fesm2022/acorex-components-otp.mjs.map +1 -1
  42. package/fesm2022/acorex-components-phone-box.mjs +45 -44
  43. package/fesm2022/acorex-components-phone-box.mjs.map +1 -1
  44. package/fesm2022/acorex-components-select-box.mjs +2 -2
  45. package/fesm2022/acorex-components-select-box.mjs.map +1 -1
  46. package/fesm2022/acorex-components-text-area.mjs +5 -21
  47. package/fesm2022/acorex-components-text-area.mjs.map +1 -1
  48. package/package.json +7 -13
  49. package/phone-box/lib/phone-box.component.d.ts +4 -13
  50. package/phone-box/lib/phone-box.module.d.ts +2 -1
  51. package/text-area/lib/text-area.component.d.ts +0 -1
  52. package/data-table-2/README.md +0 -3
  53. package/data-table-2/index.d.ts +0 -8
  54. package/data-table-2/lib/columns/data-table-column-resizable.directive.d.ts +0 -22
  55. package/data-table-2/lib/columns/data-table-column.d.ts +0 -22
  56. package/data-table-2/lib/columns/data-text-column.component.d.ts +0 -18
  57. package/data-table-2/lib/columns/row-command-column.component.d.ts +0 -40
  58. package/data-table-2/lib/columns/row-index-column.component.d.ts +0 -18
  59. package/data-table-2/lib/columns/row-select-column.component.d.ts +0 -14
  60. package/data-table-2/lib/data-table-2.component.d.ts +0 -61
  61. package/data-table-2/lib/data-table-2.module.d.ts +0 -24
  62. package/esm2022/data-table/lib/data-table.component.mjs +0 -290
  63. package/esm2022/data-table-2/acorex-components-data-table-2.mjs +0 -5
  64. package/esm2022/data-table-2/index.mjs +0 -9
  65. package/esm2022/data-table-2/lib/columns/data-table-column-resizable.directive.mjs +0 -59
  66. package/esm2022/data-table-2/lib/columns/data-table-column.mjs +0 -42
  67. package/esm2022/data-table-2/lib/columns/data-text-column.component.mjs +0 -81
  68. package/esm2022/data-table-2/lib/columns/row-command-column.component.mjs +0 -231
  69. package/esm2022/data-table-2/lib/columns/row-index-column.component.mjs +0 -71
  70. package/esm2022/data-table-2/lib/columns/row-select-column.component.mjs +0 -61
  71. package/esm2022/data-table-2/lib/data-table-2.component.mjs +0 -211
  72. package/esm2022/data-table-2/lib/data-table-2.module.mjs +0 -94
  73. package/fesm2022/acorex-components-data-table-2.mjs +0 -822
  74. package/fesm2022/acorex-components-data-table-2.mjs.map +0 -1
@@ -43,6 +43,7 @@ export interface AXDataSourceChangedEvent<T = unknown> {
43
43
  }
44
44
  export declare class AXDataSource<T = unknown> {
45
45
  config: AXDataSourceConfig<T>;
46
+ useCache: boolean;
46
47
  private _totalCount;
47
48
  get totalCount(): number;
48
49
  get totalPages(): number;
@@ -63,6 +64,7 @@ export declare class AXDataSource<T = unknown> {
63
64
  private load;
64
65
  private setLoadingState;
65
66
  setPage(page: number): void;
67
+ setPageSize(pageSize: number): void;
66
68
  filter(value: AXDataSourceFilterOption): void;
67
69
  sort(...value: AXDataSourceSortOption[]): void;
68
70
  clearFilter(): void;
@@ -1,8 +1,9 @@
1
1
  export * from './lib/columns/data-table-column';
2
+ export * from './lib/columns/data-table-column-resizable.directive';
2
3
  export * from './lib/columns/data-text-column.component';
3
4
  export * from './lib/columns/row-command-column.component';
4
5
  export * from './lib/columns/row-index-column.component';
5
6
  export * from './lib/columns/row-select-column.component';
6
- export * from './lib/columns/data-table-column-resizable.directive';
7
- export * from './lib/data-table.component';
8
7
  export * from './lib/data-table.module';
8
+ export * from './lib/data-table/data-table.component';
9
+ export * from './lib/infinite-scroll-data-table/infinite-scroll-data-table.component';
@@ -0,0 +1,25 @@
1
+ import { AXDataSource, AXEvent, MXBaseComponent } from '@acorex/components/common';
2
+ import { EventEmitter } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ export interface AXDataTableScrollIndexChanged extends AXEvent {
5
+ index: number;
6
+ }
7
+ export interface AXDataTableRowClick extends AXEvent {
8
+ data?: any;
9
+ }
10
+ export interface AXColumnsOrderChangedEvent extends AXEvent {
11
+ data?: any;
12
+ }
13
+ export interface AXDataTableRowDbClick extends AXDataTableRowClick {
14
+ }
15
+ export declare abstract class AXBaseDataTable extends MXBaseComponent {
16
+ dataSource: AXDataSource<unknown>;
17
+ selectedRowsChange: EventEmitter<unknown[]>;
18
+ private _selectedRows;
19
+ get selectedRows(): unknown[];
20
+ set selectedRows(v: unknown[]);
21
+ selectRows(...rows: unknown[]): void;
22
+ unSelectRows(...rows: unknown[]): void;
23
+ static ɵfac: i0.ɵɵFactoryDeclaration<AXBaseDataTable, never>;
24
+ static ɵprov: i0.ɵɵInjectableDeclaration<AXBaseDataTable>;
25
+ }
@@ -1,7 +1,7 @@
1
1
  import { AXButtonItemComponent, AXButtonItemListItem } from '@acorex/components/button';
2
2
  import { AXButtonClickEvent, AXItemClickEvent } from '@acorex/components/common';
3
3
  import { ChangeDetectorRef, EventEmitter, TemplateRef } from '@angular/core';
4
- import { AXDataTableComponent } from '../data-table.component';
4
+ import { AXBaseDataTable } from '../base-data-table.class';
5
5
  import { AXDataTableColumnComponent } from './data-table-column';
6
6
  import * as i0 from "@angular/core";
7
7
  export interface AXRowCommandItem extends AXButtonItemListItem {
@@ -9,7 +9,7 @@ export interface AXRowCommandItem extends AXButtonItemListItem {
9
9
  export interface AXRowCommandItemClickEvent extends AXButtonClickEvent {
10
10
  }
11
11
  export declare abstract class AXBaseRowCommandColumnComponent extends AXDataTableColumnComponent {
12
- protected grid: AXDataTableComponent;
12
+ protected grid: AXBaseDataTable;
13
13
  protected cdr: ChangeDetectorRef;
14
14
  allowSorting: boolean;
15
15
  get loadingEnabled(): boolean;
@@ -0,0 +1,52 @@
1
+ import { AXDataPagerChangedEvent } from '@acorex/components/data-pager';
2
+ import { CdkDragDrop } from '@angular/cdk/drag-drop';
3
+ import { AfterViewInit, EventEmitter, OnInit, QueryList, TemplateRef, WritableSignal } from '@angular/core';
4
+ import { AXBaseDataTable, AXColumnsOrderChangedEvent, AXDataTableRowClick, AXDataTableRowDbClick } from '../base-data-table.class';
5
+ import { AXDataTableColumnComponent } from '../columns/data-table-column';
6
+ import * as i0 from "@angular/core";
7
+ export declare class AXDataTableComponent extends AXBaseDataTable implements OnInit, AfterViewInit {
8
+ onColumnsOrderChanged: EventEmitter<AXColumnsOrderChangedEvent>;
9
+ protected displayedRows: WritableSignal<any[]>;
10
+ protected page: WritableSignal<number>;
11
+ protected pageSize: WritableSignal<number>;
12
+ protected columnsList: WritableSignal<any[]>;
13
+ protected columns: QueryList<AXDataTableColumnComponent>;
14
+ ngAfterViewInit(): void;
15
+ protected drop(event: CdkDragDrop<any, any, any>): void;
16
+ ngOnInit(): void;
17
+ rowTemplate?: TemplateRef<unknown>;
18
+ emptyTemplate?: TemplateRef<unknown>;
19
+ showHeader: boolean;
20
+ fixedHeader: boolean;
21
+ itemHeight: number | 'auto';
22
+ fetchDataMode: 'auto' | 'manual';
23
+ loading: {
24
+ enabled: boolean;
25
+ animation: boolean;
26
+ loadingTemplate?: TemplateRef<unknown>;
27
+ };
28
+ private _focusedRow;
29
+ get focusedRow(): unknown;
30
+ set focusedRow(v: unknown);
31
+ protected isLoading: WritableSignal<boolean>;
32
+ protected hasItems: boolean;
33
+ protected totalRows: number;
34
+ protected currentPage: number;
35
+ protected totalPages: number;
36
+ protected startRowIndex: number;
37
+ private lastIndex;
38
+ focusedRowChange: EventEmitter<unknown>;
39
+ onRowClick: EventEmitter<AXDataTableRowClick>;
40
+ onRowDbClick: EventEmitter<AXDataTableRowDbClick>;
41
+ private clickSubject;
42
+ protected handleRowClick(event: MouseEvent, item: unknown): void;
43
+ private handleRowSingleClick;
44
+ protected onPageChanged(event: AXDataPagerChangedEvent): void;
45
+ protected handleRowDoubleClick(e: MouseEvent, item: unknown): void;
46
+ handleColumnClick(e: MouseEvent, column: AXDataTableColumnComponent): void;
47
+ protected getSort(column: AXDataTableColumnComponent): string | undefined;
48
+ refresh(): void;
49
+ private calculateStickyColumnsPositions;
50
+ static ɵfac: i0.ɵɵFactoryDeclaration<AXDataTableComponent, never>;
51
+ static ɵcmp: i0.ɵɵComponentDeclaration<AXDataTableComponent, "ax-data-table", never, { "dataSource": { "alias": "dataSource"; "required": false; }; "rowTemplate": { "alias": "rowTemplate"; "required": false; }; "emptyTemplate": { "alias": "emptyTemplate"; "required": false; }; "showHeader": { "alias": "showHeader"; "required": false; }; "fixedHeader": { "alias": "fixedHeader"; "required": false; }; "itemHeight": { "alias": "itemHeight"; "required": false; }; "fetchDataMode": { "alias": "fetchDataMode"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "focusedRow": { "alias": "focusedRow"; "required": false; }; }, { "onColumnsOrderChanged": "onColumnsOrderChanged"; "focusedRowChange": "focusedRowChange"; "onRowClick": "onRowClick"; "onRowDbClick": "onRowDbClick"; }, ["columns"], ["ax-header", "ax-footer"], false, never>;
52
+ }
@@ -1,23 +1,26 @@
1
1
  import * as i0 from "@angular/core";
2
- import * as i1 from "./data-table.component";
3
- import * as i2 from "./columns/data-text-column.component";
4
- import * as i3 from "./columns/row-index-column.component";
5
- import * as i4 from "./columns/row-select-column.component";
6
- import * as i5 from "./columns/row-command-column.component";
7
- import * as i6 from "./columns/data-table-column-resizable.directive";
8
- import * as i7 from "@angular/common";
9
- import * as i8 from "@acorex/components/common";
10
- import * as i9 from "@angular/cdk/scrolling";
11
- import * as i10 from "@acorex/core/translation";
12
- import * as i11 from "@acorex/components/result";
13
- import * as i12 from "@acorex/components/loading";
14
- import * as i13 from "@acorex/components/decorators";
15
- import * as i14 from "@acorex/components/skeleton";
16
- import * as i15 from "@acorex/components/button";
17
- import * as i16 from "@acorex/components/dropdown";
18
- import * as i17 from "@acorex/core/format";
2
+ import * as i1 from "./infinite-scroll-data-table/infinite-scroll-data-table.component";
3
+ import * as i2 from "./data-table/data-table.component";
4
+ import * as i3 from "./columns/data-text-column.component";
5
+ import * as i4 from "./columns/row-index-column.component";
6
+ import * as i5 from "./columns/row-select-column.component";
7
+ import * as i6 from "./columns/row-command-column.component";
8
+ import * as i7 from "./columns/data-table-column-resizable.directive";
9
+ import * as i8 from "@angular/common";
10
+ import * as i9 from "@acorex/components/common";
11
+ import * as i10 from "@angular/cdk/scrolling";
12
+ import * as i11 from "@acorex/core/translation";
13
+ import * as i12 from "@acorex/components/result";
14
+ import * as i13 from "@acorex/components/loading";
15
+ import * as i14 from "@acorex/components/decorators";
16
+ import * as i15 from "@acorex/components/skeleton";
17
+ import * as i16 from "@acorex/components/button";
18
+ import * as i17 from "@acorex/components/dropdown";
19
+ import * as i18 from "@acorex/core/format";
20
+ import * as i19 from "@acorex/components/data-pager";
21
+ import * as i20 from "@angular/cdk/drag-drop";
19
22
  export declare class AXDataTableModule {
20
23
  static ɵfac: i0.ɵɵFactoryDeclaration<AXDataTableModule, never>;
21
- static ɵmod: i0.ɵɵNgModuleDeclaration<AXDataTableModule, [typeof i1.AXDataTableComponent, typeof i2.AXDataTableTextColumnComponent, typeof i3.AXRowIndexColumnComponent, typeof i4.AXRowSelectColumnComponent, typeof i5.AXRowCommandColumnComponent, typeof i5.AXRowDropdownCommandColumnComponent, typeof i6.AXDataTableColumnResizableDirective], [typeof i7.CommonModule, typeof i8.AXCommonModule, typeof i9.ScrollingModule, typeof i10.AXTranslationModule, typeof i11.AXResultModule, typeof i12.AXLoadingModule, typeof i13.AXDecoratorModule, typeof i14.AXSkeletonModule, typeof i15.AXButtonModule, typeof i16.AXDropdownModule, typeof i17.AXFormatModule, typeof i8.AXRippleDirective], [typeof i1.AXDataTableComponent, typeof i2.AXDataTableTextColumnComponent, typeof i3.AXRowIndexColumnComponent, typeof i4.AXRowSelectColumnComponent, typeof i5.AXRowCommandColumnComponent, typeof i5.AXRowDropdownCommandColumnComponent, typeof i6.AXDataTableColumnResizableDirective]>;
24
+ static ɵmod: i0.ɵɵNgModuleDeclaration<AXDataTableModule, [typeof i1.AXInfiniteScrollDataTableComponent, typeof i2.AXDataTableComponent, typeof i3.AXDataTableTextColumnComponent, typeof i4.AXRowIndexColumnComponent, typeof i5.AXRowSelectColumnComponent, typeof i6.AXRowCommandColumnComponent, typeof i6.AXRowDropdownCommandColumnComponent, typeof i7.AXDataTableColumnResizableDirective], [typeof i8.CommonModule, typeof i9.AXCommonModule, typeof i10.ScrollingModule, typeof i11.AXTranslationModule, typeof i12.AXResultModule, typeof i13.AXLoadingModule, typeof i14.AXDecoratorModule, typeof i15.AXSkeletonModule, typeof i16.AXButtonModule, typeof i17.AXDropdownModule, typeof i18.AXFormatModule, typeof i9.AXRippleDirective, typeof i19.AXDataPagerModule, typeof i20.CdkDropList, typeof i20.CdkDrag, typeof i20.CdkDragPlaceholder, typeof i20.CdkDragHandle], [typeof i1.AXInfiniteScrollDataTableComponent, typeof i2.AXDataTableComponent, typeof i3.AXDataTableTextColumnComponent, typeof i4.AXRowIndexColumnComponent, typeof i5.AXRowSelectColumnComponent, typeof i6.AXRowCommandColumnComponent, typeof i6.AXRowDropdownCommandColumnComponent, typeof i7.AXDataTableColumnResizableDirective]>;
22
25
  static ɵinj: i0.ɵɵInjectorDeclaration<AXDataTableModule>;
23
26
  }
@@ -1,16 +1,9 @@
1
- import { AXDataSource, AXEvent, AXListDataSource, AXValueChangedEvent, MXBaseComponent } from '@acorex/components/common';
2
- import { DoCheck, ElementRef, EventEmitter, OnInit, QueryList, TemplateRef } from '@angular/core';
3
- import { AXDataTableColumnComponent } from './columns/data-table-column';
1
+ import { AXListDataSource, AXValueChangedEvent } from '@acorex/components/common';
2
+ import { DoCheck, ElementRef, EventEmitter, OnInit, QueryList, TemplateRef, WritableSignal } from '@angular/core';
3
+ import { AXBaseDataTable, AXDataTableRowClick, AXDataTableRowDbClick, AXDataTableScrollIndexChanged } from '../base-data-table.class';
4
+ import { AXDataTableColumnComponent } from '../columns/data-table-column';
4
5
  import * as i0 from "@angular/core";
5
- export interface AXDataTableScrollIndexChanged extends AXEvent {
6
- index: number;
7
- }
8
- export interface AXDataTableRowClick extends AXEvent {
9
- data?: any;
10
- }
11
- export interface AXDataTableRowDbClick extends AXDataTableRowClick {
12
- }
13
- export declare class AXDataTableComponent extends MXBaseComponent implements OnInit, DoCheck {
6
+ export declare class AXInfiniteScrollDataTableComponent extends AXBaseDataTable implements OnInit, DoCheck {
14
7
  private ngZone;
15
8
  protected columns: QueryList<AXDataTableColumnComponent>;
16
9
  protected startFixedColumn(): AXDataTableColumnComponent[];
@@ -26,14 +19,13 @@ export declare class AXDataTableComponent extends MXBaseComponent implements OnI
26
19
  emptyTemplate?: TemplateRef<unknown>;
27
20
  showHeader: boolean;
28
21
  fetchDataMode: 'auto' | 'manual';
29
- dataSource: AXDataSource<unknown>;
30
22
  loading: {
31
23
  enabled: boolean;
32
24
  animation: boolean;
33
25
  loadingTemplate?: TemplateRef<unknown>;
34
26
  };
35
27
  protected listDataSource: AXListDataSource<unknown>;
36
- protected isLoading: boolean;
28
+ protected isLoading: WritableSignal<boolean>;
37
29
  protected hasItems: boolean;
38
30
  protected totalRows: number;
39
31
  protected currentPage: number;
@@ -44,12 +36,6 @@ export declare class AXDataTableComponent extends MXBaseComponent implements OnI
44
36
  private _focusedRow;
45
37
  get focusedRow(): unknown;
46
38
  set focusedRow(v: unknown);
47
- selectedRowsChange: EventEmitter<unknown[]>;
48
- private _selectedRows;
49
- get selectedRows(): unknown[];
50
- set selectedRows(v: unknown[]);
51
- selectRows(...rows: unknown[]): void;
52
- unSelectRows(...rows: unknown[]): void;
53
39
  itemHeight: number | 'auto';
54
40
  protected width: string;
55
41
  protected height: string;
@@ -75,6 +61,6 @@ export declare class AXDataTableComponent extends MXBaseComponent implements OnI
75
61
  handleColumnClick(e: MouseEvent, column: AXDataTableColumnComponent): void;
76
62
  protected getSort(column: AXDataTableColumnComponent): string | undefined;
77
63
  protected _handleOnScroll(): void;
78
- static ɵfac: i0.ɵɵFactoryDeclaration<AXDataTableComponent, never>;
79
- static ɵcmp: i0.ɵɵComponentDeclaration<AXDataTableComponent, "ax-data-table", never, { "rowTemplate": { "alias": "rowTemplate"; "required": false; }; "emptyTemplate": { "alias": "emptyTemplate"; "required": false; }; "showHeader": { "alias": "showHeader"; "required": false; }; "fetchDataMode": { "alias": "fetchDataMode"; "required": false; }; "dataSource": { "alias": "dataSource"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "focusedRow": { "alias": "focusedRow"; "required": false; }; "selectedRows": { "alias": "selectedRows"; "required": false; }; "itemHeight": { "alias": "itemHeight"; "required": false; }; }, { "onPageChanged": "onPageChanged"; "onRowClick": "onRowClick"; "onRowDbClick": "onRowDbClick"; "focusedRowChange": "focusedRowChange"; "selectedRowsChange": "selectedRowsChange"; "onScrolledIndexChanged": "onScrolledIndexChanged"; }, ["columns"], ["ax-header", "ax-footer"], false, never>;
64
+ static ɵfac: i0.ɵɵFactoryDeclaration<AXInfiniteScrollDataTableComponent, never>;
65
+ static ɵcmp: i0.ɵɵComponentDeclaration<AXInfiniteScrollDataTableComponent, "ax-infinite-scroll-data-table", never, { "dataSource": { "alias": "dataSource"; "required": false; }; "rowTemplate": { "alias": "rowTemplate"; "required": false; }; "emptyTemplate": { "alias": "emptyTemplate"; "required": false; }; "showHeader": { "alias": "showHeader"; "required": false; }; "fetchDataMode": { "alias": "fetchDataMode"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "focusedRow": { "alias": "focusedRow"; "required": false; }; "itemHeight": { "alias": "itemHeight"; "required": false; }; }, { "onPageChanged": "onPageChanged"; "onRowClick": "onRowClick"; "onRowDbClick": "onRowDbClick"; "focusedRowChange": "focusedRowChange"; "onScrolledIndexChanged": "onScrolledIndexChanged"; }, ["columns"], ["ax-header", "ax-footer"], false, never>;
80
66
  }
@@ -62,7 +62,7 @@ export class AXButtonComponent extends MXButtonBaseComponent {
62
62
  { provide: AXComponent, useExisting: AXButtonComponent },
63
63
  { provide: AXButtonItemComponent, useExisting: AXButtonComponent },
64
64
  { provide: AXFocusableComponent, useExisting: AXButtonComponent },
65
- ], usesInheritance: true, ngImport: i0, template: "<button [axRipple] [disabled]=\"disabled\" [attr.tabindex]=\"tabIndex\" (focus)=\"emitOnFocusEvent($event)\"\n (blur)=\"emitOnBlurEvent($event)\" (click)=\"_handleClick($event)\" [attr.type]=\"type\">\n <ng-content select=\"ax-prefix, ax-loading, ax-loading-spinner, ax-icon\"> </ng-content>\n <ng-content select=\"ax-content\"> </ng-content>\n\n @if(text){\n <span class=\"ax-button-text\">{{ text }}</span>\n }\n\n <ng-content select=\"ax-suffix\"> </ng-content>\n <ng-content select=\"ax-dropdown-panel\"> </ng-content>\n <ng-content select=\".tab-content\"> </ng-content>\n</button>", styles: ["ax-button{position:relative;display:inline-flex;height:var(--ax-size-default);cursor:pointer;align-items:center;justify-content:center;border-radius:var(--ax-rounded-border-default);font-size:.875rem;line-height:1.25rem;outline:2px solid transparent;outline-offset:2px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}ax-button.ax-xs{font-size:.75rem;line-height:1rem}ax-button.ax-xs>button{padding-left:.25rem;padding-right:.25rem}ax-button.ax-sm>button{padding-left:.5rem;padding-right:.5rem}ax-button.ax-sm,ax-button.ax-md{font-size:.875rem;line-height:1.25rem}ax-button.ax-lg{font-size:1rem;line-height:1.25rem}ax-button.ax-lg>button{padding-left:1.5rem;padding-right:1.5rem}ax-button.ax-xl{font-size:1.125rem;line-height:1.75rem}ax-button.ax-xl>button{padding-left:2rem;padding-right:2rem}ax-button.ax-xl.ax-button-icon{font-size:1.5rem}ax-button.ax-xs.ax-button-icon,ax-button.ax-sm.ax-button-icon{font-size:1rem}ax-button.ax-button-icon{height:var(--ax-size-default);width:var(--ax-size-default);font-size:1.25rem}ax-button.ax-state-disabled,ax-button.ax-state-loading{opacity:.5}ax-button.ax-state-disabled>button,ax-button.ax-state-loading>button{cursor:not-allowed}ax-button>button{position:relative;display:inline-flex;height:100%;width:100%;align-items:center;justify-content:center;overflow:hidden;border-radius:var(--ax-rounded-border-default);padding-left:1rem;padding-right:1rem;outline-color:transparent}ax-button>button.ax-state-focus:focus,ax-button>button:focus-visible{outline-width:2px;outline-offset:2px;outline-color:#000}ax-button>button .ax-button-text{white-space:nowrap;padding-left:.5rem;padding-right:.5rem;font-weight:500;line-height:1}ax-button ax-button-item.ax-divided{border-bottom-width:1px!important;border-color:rgba(var(--ax-color-border-default))!important}\n"], dependencies: [{ kind: "directive", type: i1.AXRippleDirective, selector: "[axRipple]", inputs: ["axRipple", "axRippleColor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
65
+ ], usesInheritance: true, ngImport: i0, template: "<button [axRipple] [disabled]=\"disabled\" [attr.tabindex]=\"tabIndex\" (focus)=\"emitOnFocusEvent($event)\"\n (blur)=\"emitOnBlurEvent($event)\" (click)=\"_handleClick($event)\" [attr.type]=\"type\">\n <ng-content select=\"ax-prefix, ax-loading, ax-loading-spinner, ax-icon\"> </ng-content>\n <ng-content select=\"ax-content\"> </ng-content>\n\n @if(text){\n <span class=\"ax-button-text\">{{ text }}</span>\n }\n\n <ng-content select=\"ax-suffix\"> </ng-content>\n <ng-content select=\"ax-dropdown-panel\"> </ng-content>\n <ng-content select=\".tab-content\"> </ng-content>\n</button>", styles: ["ax-button{position:relative;display:inline-flex;height:var(--ax-size-default);cursor:pointer;align-items:center;justify-content:center;border-radius:var(--ax-rounded-border-default);font-size:.875rem;line-height:1.25rem;outline:2px solid transparent;outline-offset:2px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}ax-button.ax-xs{font-size:.75rem;line-height:1rem}ax-button.ax-xs>button{padding-left:.25rem;padding-right:.25rem}ax-button.ax-sm>button{padding-left:.5rem;padding-right:.5rem}ax-button.ax-sm,ax-button.ax-md{font-size:.875rem;line-height:1.25rem}ax-button.ax-lg{font-size:1rem;line-height:1.25rem}ax-button.ax-lg>button{padding-left:1.5rem;padding-right:1.5rem}ax-button.ax-xl{font-size:1.125rem;line-height:1.75rem}ax-button.ax-xl>button{padding-left:2rem;padding-right:2rem}ax-button.ax-xl.ax-button-icon{font-size:1.5rem}ax-button.ax-xs.ax-button-icon,ax-button.ax-sm.ax-button-icon{font-size:1rem}ax-button.ax-button-icon{height:var(--ax-size-default);width:var(--ax-size-default);font-size:1.25rem}ax-button.ax-state-disabled,ax-button.ax-state-loading{opacity:.5}ax-button.ax-state-disabled>button,ax-button.ax-state-loading>button{cursor:not-allowed}ax-button>button{position:relative;display:inline-flex;height:100%;width:100%;align-items:center;justify-content:center;overflow:hidden;border-radius:var(--ax-rounded-border-default);padding-left:1rem;padding-right:1rem;outline-color:transparent}ax-button>button.ax-state-focus:focus,ax-button>button:focus-visible{outline-width:2px;outline-offset:2px;outline-color:#000;border-radius:inherit}ax-button>button .ax-button-text{white-space:nowrap;padding-left:.5rem;padding-right:.5rem;font-weight:500;line-height:1}ax-button ax-button-item.ax-divided{border-bottom-width:1px!important;border-color:rgba(var(--ax-color-border-default))!important}\n"], dependencies: [{ kind: "directive", type: i1.AXRippleDirective, selector: "[axRipple]", inputs: ["axRipple", "axRippleColor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
66
66
  }
67
67
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXButtonComponent, decorators: [{
68
68
  type: Component,
@@ -88,7 +88,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImpor
88
88
  { provide: AXComponent, useExisting: AXButtonComponent },
89
89
  { provide: AXButtonItemComponent, useExisting: AXButtonComponent },
90
90
  { provide: AXFocusableComponent, useExisting: AXButtonComponent },
91
- ], template: "<button [axRipple] [disabled]=\"disabled\" [attr.tabindex]=\"tabIndex\" (focus)=\"emitOnFocusEvent($event)\"\n (blur)=\"emitOnBlurEvent($event)\" (click)=\"_handleClick($event)\" [attr.type]=\"type\">\n <ng-content select=\"ax-prefix, ax-loading, ax-loading-spinner, ax-icon\"> </ng-content>\n <ng-content select=\"ax-content\"> </ng-content>\n\n @if(text){\n <span class=\"ax-button-text\">{{ text }}</span>\n }\n\n <ng-content select=\"ax-suffix\"> </ng-content>\n <ng-content select=\"ax-dropdown-panel\"> </ng-content>\n <ng-content select=\".tab-content\"> </ng-content>\n</button>", styles: ["ax-button{position:relative;display:inline-flex;height:var(--ax-size-default);cursor:pointer;align-items:center;justify-content:center;border-radius:var(--ax-rounded-border-default);font-size:.875rem;line-height:1.25rem;outline:2px solid transparent;outline-offset:2px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}ax-button.ax-xs{font-size:.75rem;line-height:1rem}ax-button.ax-xs>button{padding-left:.25rem;padding-right:.25rem}ax-button.ax-sm>button{padding-left:.5rem;padding-right:.5rem}ax-button.ax-sm,ax-button.ax-md{font-size:.875rem;line-height:1.25rem}ax-button.ax-lg{font-size:1rem;line-height:1.25rem}ax-button.ax-lg>button{padding-left:1.5rem;padding-right:1.5rem}ax-button.ax-xl{font-size:1.125rem;line-height:1.75rem}ax-button.ax-xl>button{padding-left:2rem;padding-right:2rem}ax-button.ax-xl.ax-button-icon{font-size:1.5rem}ax-button.ax-xs.ax-button-icon,ax-button.ax-sm.ax-button-icon{font-size:1rem}ax-button.ax-button-icon{height:var(--ax-size-default);width:var(--ax-size-default);font-size:1.25rem}ax-button.ax-state-disabled,ax-button.ax-state-loading{opacity:.5}ax-button.ax-state-disabled>button,ax-button.ax-state-loading>button{cursor:not-allowed}ax-button>button{position:relative;display:inline-flex;height:100%;width:100%;align-items:center;justify-content:center;overflow:hidden;border-radius:var(--ax-rounded-border-default);padding-left:1rem;padding-right:1rem;outline-color:transparent}ax-button>button.ax-state-focus:focus,ax-button>button:focus-visible{outline-width:2px;outline-offset:2px;outline-color:#000}ax-button>button .ax-button-text{white-space:nowrap;padding-left:.5rem;padding-right:.5rem;font-weight:500;line-height:1}ax-button ax-button-item.ax-divided{border-bottom-width:1px!important;border-color:rgba(var(--ax-color-border-default))!important}\n"] }]
91
+ ], template: "<button [axRipple] [disabled]=\"disabled\" [attr.tabindex]=\"tabIndex\" (focus)=\"emitOnFocusEvent($event)\"\n (blur)=\"emitOnBlurEvent($event)\" (click)=\"_handleClick($event)\" [attr.type]=\"type\">\n <ng-content select=\"ax-prefix, ax-loading, ax-loading-spinner, ax-icon\"> </ng-content>\n <ng-content select=\"ax-content\"> </ng-content>\n\n @if(text){\n <span class=\"ax-button-text\">{{ text }}</span>\n }\n\n <ng-content select=\"ax-suffix\"> </ng-content>\n <ng-content select=\"ax-dropdown-panel\"> </ng-content>\n <ng-content select=\".tab-content\"> </ng-content>\n</button>", styles: ["ax-button{position:relative;display:inline-flex;height:var(--ax-size-default);cursor:pointer;align-items:center;justify-content:center;border-radius:var(--ax-rounded-border-default);font-size:.875rem;line-height:1.25rem;outline:2px solid transparent;outline-offset:2px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}ax-button.ax-xs{font-size:.75rem;line-height:1rem}ax-button.ax-xs>button{padding-left:.25rem;padding-right:.25rem}ax-button.ax-sm>button{padding-left:.5rem;padding-right:.5rem}ax-button.ax-sm,ax-button.ax-md{font-size:.875rem;line-height:1.25rem}ax-button.ax-lg{font-size:1rem;line-height:1.25rem}ax-button.ax-lg>button{padding-left:1.5rem;padding-right:1.5rem}ax-button.ax-xl{font-size:1.125rem;line-height:1.75rem}ax-button.ax-xl>button{padding-left:2rem;padding-right:2rem}ax-button.ax-xl.ax-button-icon{font-size:1.5rem}ax-button.ax-xs.ax-button-icon,ax-button.ax-sm.ax-button-icon{font-size:1rem}ax-button.ax-button-icon{height:var(--ax-size-default);width:var(--ax-size-default);font-size:1.25rem}ax-button.ax-state-disabled,ax-button.ax-state-loading{opacity:.5}ax-button.ax-state-disabled>button,ax-button.ax-state-loading>button{cursor:not-allowed}ax-button>button{position:relative;display:inline-flex;height:100%;width:100%;align-items:center;justify-content:center;overflow:hidden;border-radius:var(--ax-rounded-border-default);padding-left:1rem;padding-right:1rem;outline-color:transparent}ax-button>button.ax-state-focus:focus,ax-button>button:focus-visible{outline-width:2px;outline-offset:2px;outline-color:#000;border-radius:inherit}ax-button>button .ax-button-text{white-space:nowrap;padding-left:.5rem;padding-right:.5rem;font-weight:500;line-height:1}ax-button ax-button-item.ax-divided{border-bottom-width:1px!important;border-color:rgba(var(--ax-color-border-default))!important}\n"] }]
92
92
  }], propDecorators: { type: [{
93
93
  type: Input
94
94
  }], __hostClass: [{
@@ -23,6 +23,7 @@ export class AXDataSource {
23
23
  return this._isLoading;
24
24
  }
25
25
  constructor(config) {
26
+ this.useCache = true;
26
27
  this._totalCount = 0;
27
28
  this._items = [];
28
29
  this.fetchedPages = new Set();
@@ -38,11 +39,12 @@ export class AXDataSource {
38
39
  }
39
40
  load() {
40
41
  const page = this._page;
41
- if (this.fetchedPages.has(page)) {
42
+ if (this.fetchedPages.has(page) && this.useCache) {
42
43
  return;
43
44
  }
44
45
  this.setLoadingState(true);
45
46
  this.fetchedPages.add(page);
47
+ this._query.take = this.config.pageSize;
46
48
  this._query.skip = page * this.config.pageSize;
47
49
  this.config
48
50
  .load({ ...this._query })
@@ -76,6 +78,10 @@ export class AXDataSource {
76
78
  this.load();
77
79
  }
78
80
  }
81
+ setPageSize(pageSize) {
82
+ this.config.pageSize = pageSize;
83
+ this.load();
84
+ }
79
85
  filter(value) {
80
86
  this._query.filter = value;
81
87
  }
@@ -124,4 +130,4 @@ export function convertArrayToDataSource(items, options = { key: 'id', pageSize:
124
130
  };
125
131
  return new AXDataSource(config);
126
132
  }
127
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXNvdXJjZS5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jb21tb24vc3JjL2xpYi9jbGFzc2VzL2RhdGFzb3VyY2UuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBK0MvQixNQUFNLE9BQU8sWUFBWTtJQUl2QixJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7SUFDOUIsQ0FBQztJQUdELElBQVcsV0FBVztRQUNwQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUdELElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBTUQsSUFBVyxLQUFLO1FBQ2QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFNRCxJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxZQUFZLE1BQTZCO1FBdkNqQyxnQkFBVyxHQUFHLENBQUMsQ0FBQztRQWtCaEIsV0FBTSxHQUFRLEVBQUUsQ0FBQztRQUtqQixpQkFBWSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDakMsVUFBSyxHQUFHLENBQUMsQ0FBQztRQUNWLFdBQU0sR0FBc0IsRUFBRSxJQUFJ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LENBQUMsTUFBTTthQUNyQixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsS0FBSyxFQUFFLENBQUMsQ0FBVSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7S0FDbEYsQ0FBQztJQUNGLE9BQU8sSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZpbHRlciB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCB0eXBlIEFYRGF0YVNvdXJjZU9wZXJhdG9yID0ge1xuICB0eXBlOiAnZXF1YWwnIHwgJ2lzTnVsbCcgfCAnaXNFbXB0eScgfCAnbHQnIHwgJ2x0ZScgfCAnZ3QnIHwgJ2d0ZScgfCAnc3RhcnRzV2l0aCcgfCAnZW5kc1dpdGgnIHwgJ2NvbnRhaW5zJztcbiAgbmVnYXRpdmU/OiBib29sZWFuO1xufTtcbmV4cG9ydCB0eXBlIEFYRmlsdGVyTG9naWMgPSAnYW5kJyB8ICdvcic7XG5leHBvcnQgdHlwZSBBWFNvcnRPcmRlciA9ICdhc2MnIHwgJ2Rlc2MnO1xuXG5leHBvcnQgdHlwZSBBWERhdGFTb3VyY2VGaWx0ZXJPcHRpb24gPSB7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIHZhbHVlPzogdW5rbm93bjtcbiAgb3BlcmF0b3I6IEFYRGF0YVNvdXJjZU9wZXJhdG9yO1xuICBsb2dpYz86IEFYRmlsdGVyTG9naWM7XG4gIGZpbHRlcnM/OiBBWERhdGFTb3VyY2VGaWx0ZXJPcHRpb25bXTtcbn07XG5leHBvcnQgdHlwZSBBWERhdGFTb3VyY2VTb3J0T3B0aW9uID0geyBmaWVsZDogc3RyaW5nOyBkaXI6ICdhc2MnIHwgJ2Rlc2MnIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhEYXRhU291cmNlUXVlcnkge1xuICB0YWtlOiBudW1iZXI7XG4gIHNraXA6IG51bWJlcjtcbiAgZmlsdGVyPzogQVhEYXRhU291cmNlRmlsdGVyT3B0aW9uO1xuICBzb3J0OiBBWERhdGFTb3VyY2VTb3J0T3B0aW9uW107XG59XG5leHBvcnQgaW50ZXJmYWNlIEFYRGF0YVNvdXJjZUNhbGxiYWNrUmVzdWx0PFQ+IHtcbiAgaXRlbXM6IEFycmF5PFQ+O1xuICB0b3RhbDogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBBWERhdGFTb3VyY2VMb2FkQ2FsbGJhY2s8VD4gPSAoZTogQVhEYXRhU291cmNlUXVlcnkpID0+IFByb21pc2U8QVhEYXRhU291cmNlQ2FsbGJhY2tSZXN1bHQ8VD4+O1xuZXhwb3J0IHR5cGUgQVhEYXRhU291cmNlQnlLZXlDYWxsYmFjazxUPiA9IChrZXk6IHVua25vd24pID0+IFByb21pc2U8VD47XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhEYXRhU291cmNlQ29uZmlnPFQgPSB1bmtub3duPiB7XG4gIGtleT86IHN0cmluZztcbiAgcGFnZVNpemU6IG51bWJlcjtcbiAgbG9hZDogQVhEYXRhU291cmNlTG9hZENhbGxiYWNrPFQ+O1xuICBieUtleT86IEFYRGF0YVNvdXJjZUJ5S2V5Q2FsbGJhY2s8VD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhEYXRhU291cmNlQ2hhbmdlZEV2ZW50PFQgPSB1bmtub3duPiB7XG4gIGNhY2hlZEl0ZW1zOiBBcnJheTxUPjtcbiAgaXRlbXM6IEFycmF5PFQ+O1xuICB0b3RhbENvdW50OiBudW1iZXI7XG4gIHRvdGFsUGFnZXM6IG51bWJlcjtcbiAgcGFnZTogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgQVhEYXRhU291cmNlPFQgPSB1bmtub3duPiB7XG4gIGNvbmZpZyE6IEFYRGF0YVNvdXJjZUNvbmZpZzxUPjtcblxuICBwcml2YXRlIF90b3RhbENvdW50ID0gMDtcbiAgcHVibGljIGdldCB0b3RhbENvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3RvdGFsQ291bnQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRvdGFsUGFnZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcih0aGlzLnRvdGFsQ291bnQgLyB0aGlzLmNvbmZpZy5wYWdlU2l6ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHBhZ2VTaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnBhZ2VTaXplO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2FjaGVkSXRlbXM6IFRbXTtcbiAgcHVibGljIGdldCBjYWNoZWRJdGVtcygpOiBUW10ge1xuICAgIHJldHVybiB0aGlzLl9jYWNoZWRJdGVtcztcbiAgfVxuXG4gIHByaXZhdGUgX2l0ZW1zOiBUW10gPSBbXTtcbiAgcHVibGljIGdldCBpdGVtcygpOiBUW10ge1xuICAgIHJldHVybiB0aGlzLl9pdGVtcztcbiAgfVxuXG4gIHByaXZhdGUgZmV0Y2hlZFBhZ2VzID0gbmV3IFNldDxudW1iZXI+KCk7XG4gIHByaXZhdGUgX3BhZ2UgPSAwO1xuICBwcml2YXRlIF9xdWVyeTogQVhEYXRhU291cmNlUXVlcnkgPSB7IHNraXA6IDAsIHRha2U6IDAsIHNvcnQ6IFtdIH07XG5cbiAgcHVibGljIGdldCBxdWVyeSgpOiBBWERhdGFTb3VyY2VRdWVyeSB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXJ5O1xuICB9XG5cbiAgcHVibGljIG9uQ2hhbmdlZCA9IG5ldyBTdWJqZWN0PEFYRGF0YVNvdXJjZUNoYW5nZWRFdmVudDxUPj4oKTtcblxuICBwdWJsaWMgb25Mb2FkaW5nQ2hhbmdlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHByaXZhdGUgX2lzTG9hZGluZyA9IGZhbHNlO1xuICBwdWJsaWMgZ2V0IGlzTG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNMb2FkaW5nO1xuICB9XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBBWERhdGFTb3VyY2VDb25maWc8VD4pIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLl9jYWNoZWRJdGVtcyA9IG5ldyBBcnJheSh0aGlzLmNvbmZpZy5wYWdlU2l6ZSk7XG4gICAgdGhpcy5faXRlbXMgPSBuZXcgQXJyYXkoMCk7XG4gICAgdGhpcy5fcXVlcnkudGFrZSA9IHRoaXMuY29uZmlnLnBhZ2VTaXplO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkKCkge1xuICAgIGNvbnN0IHBhZ2UgPSB0aGlzLl9wYWdlO1xuICAgIGlmICh0aGlzLmZldGNoZWRQYWdlcy5oYXMocGFnZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZXRMb2FkaW5nU3RhdGUodHJ1ZSk7XG4gICAgdGhpcy5mZXRjaGVkUGFnZXMuYWRkKHBhZ2UpO1xuICAgIHRoaXMuX3F1ZXJ5LnNraXAgPSBwYWdlICogdGhpcy5jb25maWcucGFnZVNpemU7XG4gICAgdGhpcy5jb25maWdcbiAgICAgIC5sb2FkKHsgLi4udGhpcy5fcXVlcnkgfSlcbiAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX3RvdGFsQ291bnQgIT0gcmVzdWx0LnRvdGFsKSB7XG4gICAgICAgICAgdGhpcy5fY2FjaGVkSXRlbXMgPSBuZXcgQXJyYXkocmVzdWx0LnRvdGFsKTtcbiAgICAgICAgICB0aGlzLl90b3RhbENvdW50ID0gcmVzdWx0LnRvdGFsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2l0ZW1zID0gcmVzdWx0Lml0ZW1zO1xuICAgICAgICB0aGlzLl9jYWNoZWRJdGVtcy5zcGxpY2UocGFnZSAqIHRoaXMuY29uZmlnLnBhZ2VTaXplLCB0aGlzLmNvbmZpZy5wYWdlU2l6ZSwgLi4ucmVzdWx0Lml0ZW1zKTtcbiAgICAgICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICAgICAgY2FjaGVkSXRlbXM6IHRoaXMuY2FjaGVkSXRlbXMsXG4gICAgICAgICAgaXRlbXM6IHRoaXMuaXRlbXMsXG4gICAgICAgICAgcGFnZTogcGFnZSxcbiAgICAgICAgICB0b3RhbENvdW50OiB0aGlzLnRvdGFsQ291bnQsXG4gICAgICAgICAgdG90YWxQYWdlczogdGhpcy50b3RhbFBhZ2VzLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uQ2hhbmdlZC5uZXh0KGV2ZW50KTtcbiAgICAgIH0pXG4gICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0TG9hZGluZ1N0YXRlKGZhbHNlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRMb2FkaW5nU3RhdGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9pc0xvYWRpbmcgPSB2YWx1ZTtcbiAgICB0aGlzLm9uTG9hZGluZ0NoYW5nZWQubmV4dCh0aGlzLl9pc0xvYWRpbmcpO1xuICB9XG5cbiAgcHVibGljIHNldFBhZ2UocGFnZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuX3BhZ2UgIT0gcGFnZSB8fCB0aGlzLl9pdGVtcy5sZW5ndGggPT0gMCkge1xuICAgICAgdGhpcy5fcGFnZSA9IHBhZ2U7XG4gICAgICB0aGlzLmxvYWQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZmlsdGVyKHZhbHVlOiBBWERhdGFTb3VyY2VGaWx0ZXJPcHRpb24pIHtcbiAgICB0aGlzLl9xdWVyeS5maWx0ZXIgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzb3J0KC4uLnZhbHVlOiBBWERhdGFTb3VyY2VTb3J0T3B0aW9uW10pIHtcbiAgICB0aGlzLl9xdWVyeS5zb3J0ID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJGaWx0ZXIoKSB7XG4gICAgdGhpcy5fcXVlcnkuZmlsdGVyID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXQoKSB7XG4gICAgdGhpcy5fcXVlcnkuZmlsdGVyID0gbnVsbDtcbiAgICB0aGlzLl9xdWVyeS5zb3J0ID0gW107XG4gICAgdGhpcy5fcXVlcnkuc2tpcCA9IDA7XG4gICAgdGhpcy5fY2FjaGVkSXRlbXMgPSBuZXcgQXJyYXkodGhpcy5jb25maWcucGFnZVNpemUpO1xuICAgIHRoaXMuZmV0Y2hlZFBhZ2VzLmNsZWFyKCk7XG4gICAgdGhpcy5fcGFnZSA9IDA7XG4gICAgdGhpcy5fdG90YWxDb3VudCA9IDA7XG4gIH1cblxuICBwdWJsaWMgcmVmcmVzaCgpIHtcbiAgICBjb25zdCBjdXJyZW50RmlsdGVyID0gdGhpcy5fcXVlcnkuZmlsdGVyO1xuICAgIGNvbnN0IGN1cnJlbnRTb3J0ID0gdGhpcy5fcXVlcnkuc29ydDtcbiAgICB0aGlzLnJlc2V0KCk7XG4gICAgdGhpcy5fcXVlcnkuZmlsdGVyID0gY3VycmVudEZpbHRlcjtcbiAgICB0aGlzLl9xdWVyeS5zb3J0ID0gY3VycmVudFNvcnQ7XG4gICAgdGhpcy5sb2FkKCk7XG4gIH1cblxuICBmaW5kKGtleTogdW5rbm93bik6IFQgfCBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCBmcm9tQ2FjaGUgPSB0aGlzLmNhY2hlZEl0ZW1zLmZpbmQoKGMpID0+ICghdGhpcy5jb25maWcua2V5ICYmIGMgPT0ga2V5KSB8fCAoYyAmJiB0aGlzLmNvbmZpZy5rZXkgJiYgY1t0aGlzLmNvbmZpZy5rZXldID09IGtleSkpO1xuICAgIGlmIChmcm9tQ2FjaGUpIHJldHVybiBmcm9tQ2FjaGU7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmJ5S2V5ID8gdGhpcy5jb25maWcuYnlLZXkoa2V5KSA6IG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRBcnJheVRvRGF0YVNvdXJjZTxUPihcbiAgaXRlbXM6IFRbXSxcbiAgb3B0aW9uczogeyBrZXk6IHN0cmluZzsgcGFnZVNpemU6IG51bWJlciB9ID0geyBrZXk6ICdpZCcsIHBhZ2VTaXplOiAxMDAgfSxcbik6IEFYRGF0YVNvdXJjZSB7XG4gIGNvbnN0IGNvbmZpZzogQVhEYXRhU291cmNlQ29uZmlnID0ge1xuICAgIGtleTogb3B0aW9ucy5rZXksXG4gICAgcGFnZVNpemU6IG9wdGlvbnMucGFnZVNpemUsXG4gICAgbG9hZDogKGU6IEFYRGF0YVNvdXJjZVF1ZXJ5KSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBlLmZpbHRlciA/IGZpbHRlcihpdGVtcywgZS5maWx0ZXIpIDogaXRlbXM7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgaXRlbXM6IHJlc3VsdC5zbGljZShlLnNraXAsIGUuc2tpcCArIGUudGFrZSksXG4gICAgICAgIHRvdGFsOiByZXN1bHQubGVuZ3RoLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBieUtleTogKHY6IHVua25vd24pID0+IFByb21pc2UucmVzb2x2ZTxUPihpdGVtcy5maW5kKChjKSA9PiBjW29wdGlvbnMua2V5XSA9PSB2KSksXG4gIH07XG4gIHJldHVybiBuZXcgQVhEYXRhU291cmNlKGNvbmZpZyk7XG59XG4iXX0=
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXNvdXJjZS5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jb21tb24vc3JjL2xpYi9jbGFzc2VzL2RhdGFzb3VyY2UuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBK0MvQixNQUFNLE9BQU8sWUFBWTtJQUt2QixJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7SUFDOUIsQ0FBQztJQUdELElBQVcsV0FBVztRQUNwQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUdELElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBTUQsSUFBVyxLQUFLO1FBQ2QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFNRCxJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxZQUFZLE1BQTZCO1FBekN6QyxhQUFRLEdBQUcsSUFBSSxDQUFDO1FBRVIsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFrQmhCLFdBQU0sR0FBUSxFQUFFLENBQUM7UUFLakIsaUJBQVksR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBQ2pDLFVBQUssR0FBRyxDQUFDLENBQUM7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Q0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQzFELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQztnQkFDckIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQzVDLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTTthQUNyQixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsS0FBSyxFQUFFLENBQUMsQ0FBVSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7S0FDbEYsQ0FBQztJQUNGLE9BQU8sSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZpbHRlciB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCB0eXBlIEFYRGF0YVNvdXJjZU9wZXJhdG9yID0ge1xuICB0eXBlOiAnZXF1YWwnIHwgJ2lzTnVsbCcgfCAnaXNFbXB0eScgfCAnbHQnIHwgJ2x0ZScgfCAnZ3QnIHwgJ2d0ZScgfCAnc3RhcnRzV2l0aCcgfCAnZW5kc1dpdGgnIHwgJ2NvbnRhaW5zJztcbiAgbmVnYXRpdmU/OiBib29sZWFuO1xufTtcbmV4cG9ydCB0eXBlIEFYRmlsdGVyTG9naWMgPSAnYW5kJyB8ICdvcic7XG5leHBvcnQgdHlwZSBBWFNvcnRPcmRlciA9ICdhc2MnIHwgJ2Rlc2MnO1xuXG5leHBvcnQgdHlwZSBBWERhdGFTb3VyY2VGaWx0ZXJPcHRpb24gPSB7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIHZhbHVlPzogdW5rbm93bjtcbiAgb3BlcmF0b3I6IEFYRGF0YVNvdXJjZU9wZXJhdG9yO1xuICBsb2dpYz86IEFYRmlsdGVyTG9naWM7XG4gIGZpbHRlcnM/OiBBWERhdGFTb3VyY2VGaWx0ZXJPcHRpb25bXTtcbn07XG5leHBvcnQgdHlwZSBBWERhdGFTb3VyY2VTb3J0T3B0aW9uID0geyBmaWVsZDogc3RyaW5nOyBkaXI6ICdhc2MnIHwgJ2Rlc2MnIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhEYXRhU291cmNlUXVlcnkge1xuICB0YWtlOiBudW1iZXI7XG4gIHNraXA6IG51bWJlcjtcbiAgZmlsdGVyPzogQVhEYXRhU291cmNlRmlsdGVyT3B0aW9uO1xuICBzb3J0OiBBWERhdGFTb3VyY2VTb3J0T3B0aW9uW107XG59XG5leHBvcnQgaW50ZXJmYWNlIEFYRGF0YVNvdXJjZUNhbGxiYWNrUmVzdWx0PFQ+IHtcbiAgaXRlbXM6IEFycmF5PFQ+O1xuICB0b3RhbDogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBBWERhdGFTb3VyY2VMb2FkQ2FsbGJhY2s8VD4gPSAoZTogQVhEYXRhU291cmNlUXVlcnkpID0+IFByb21pc2U8QVhEYXRhU291cmNlQ2FsbGJhY2tSZXN1bHQ8VD4+O1xuZXhwb3J0IHR5cGUgQVhEYXRhU291cmNlQnlLZXlDYWxsYmFjazxUPiA9IChrZXk6IHVua25vd24pID0+IFByb21pc2U8VD47XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhEYXRhU291cmNlQ29uZmlnPFQgPSB1bmtub3duPiB7XG4gIGtleT86IHN0cmluZztcbiAgcGFnZVNpemU6IG51bWJlcjtcbiAgbG9hZDogQVhEYXRhU291cmNlTG9hZENhbGxiYWNrPFQ+O1xuICBieUtleT86IEFYRGF0YVNvdXJjZUJ5S2V5Q2FsbGJhY2s8VD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhEYXRhU291cmNlQ2hhbmdlZEV2ZW50PFQgPSB1bmtub3duPiB7XG4gIGNhY2hlZEl0ZW1zOiBBcnJheTxUPjtcbiAgaXRlbXM6IEFycmF5PFQ+O1xuICB0b3RhbENvdW50OiBudW1iZXI7XG4gIHRvdGFsUGFnZXM6IG51bWJlcjtcbiAgcGFnZTogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgQVhEYXRhU291cmNlPFQgPSB1bmtub3duPiB7XG4gIGNvbmZpZyE6IEFYRGF0YVNvdXJjZUNvbmZpZzxUPjtcbiAgdXNlQ2FjaGUgPSB0cnVlO1xuXG4gIHByaXZhdGUgX3RvdGFsQ291bnQgPSAwO1xuICBwdWJsaWMgZ2V0IHRvdGFsQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdG90YWxDb3VudDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdG90YWxQYWdlcygpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMudG90YWxDb3VudCAvIHRoaXMuY29uZmlnLnBhZ2VTaXplKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGFnZVNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucGFnZVNpemU7XG4gIH1cblxuICBwcml2YXRlIF9jYWNoZWRJdGVtczogVFtdO1xuICBwdWJsaWMgZ2V0IGNhY2hlZEl0ZW1zKCk6IFRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlZEl0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXRlbXM6IFRbXSA9IFtdO1xuICBwdWJsaWMgZ2V0IGl0ZW1zKCk6IFRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBmZXRjaGVkUGFnZXMgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgcHJpdmF0ZSBfcGFnZSA9IDA7XG4gIHByaXZhdGUgX3F1ZXJ5OiBBWERhdGFTb3VyY2VRdWVyeSA9IHsgc2tpcDogMCwgdGFrZTogMCwgc29ydDogW10gfTtcblxuICBwdWJsaWMgZ2V0IHF1ZXJ5KCk6IEFYRGF0YVNvdXJjZVF1ZXJ5IHtcbiAgICByZXR1cm4gdGhpcy5fcXVlcnk7XG4gIH1cblxuICBwdWJsaWMgb25DaGFuZ2VkID0gbmV3IFN1YmplY3Q8QVhEYXRhU291cmNlQ2hhbmdlZEV2ZW50PFQ+PigpO1xuXG4gIHB1YmxpYyBvbkxvYWRpbmdDaGFuZ2VkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHJpdmF0ZSBfaXNMb2FkaW5nID0gZmFsc2U7XG4gIHB1YmxpYyBnZXQgaXNMb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0xvYWRpbmc7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IEFYRGF0YVNvdXJjZUNvbmZpZzxUPikge1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMuX2NhY2hlZEl0ZW1zID0gbmV3IEFycmF5KHRoaXMuY29uZmlnLnBhZ2VTaXplKTtcbiAgICB0aGlzLl9pdGVtcyA9IG5ldyBBcnJheSgwKTtcbiAgICB0aGlzLl9xdWVyeS50YWtlID0gdGhpcy5jb25maWcucGFnZVNpemU7XG4gIH1cblxuICBwcml2YXRlIGxvYWQoKSB7XG4gICAgY29uc3QgcGFnZSA9IHRoaXMuX3BhZ2U7XG4gICAgaWYgKHRoaXMuZmV0Y2hlZFBhZ2VzLmhhcyhwYWdlKSAmJiB0aGlzLnVzZUNhY2hlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2V0TG9hZGluZ1N0YXRlKHRydWUpO1xuICAgIHRoaXMuZmV0Y2hlZFBhZ2VzLmFkZChwYWdlKTtcbiAgICB0aGlzLl9xdWVyeS50YWtlID0gdGhpcy5jb25maWcucGFnZVNpemU7XG4gICAgdGhpcy5fcXVlcnkuc2tpcCA9IHBhZ2UgKiB0aGlzLmNvbmZpZy5wYWdlU2l6ZTtcbiAgICB0aGlzLmNvbmZpZ1xuICAgICAgLmxvYWQoeyAuLi50aGlzLl9xdWVyeSB9KVxuICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fdG90YWxDb3VudCAhPSByZXN1bHQudG90YWwpIHtcbiAgICAgICAgICB0aGlzLl9jYWNoZWRJdGVtcyA9IG5ldyBBcnJheShyZXN1bHQudG90YWwpO1xuICAgICAgICAgIHRoaXMuX3RvdGFsQ291bnQgPSByZXN1bHQudG90YWw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faXRlbXMgPSByZXN1bHQuaXRlbXM7XG4gICAgICAgIHRoaXMuX2NhY2hlZEl0ZW1zLnNwbGljZShwYWdlICogdGhpcy5jb25maWcucGFnZVNpemUsIHRoaXMuY29uZmlnLnBhZ2VTaXplLCAuLi5yZXN1bHQuaXRlbXMpO1xuICAgICAgICBjb25zdCBldmVudCA9IHtcbiAgICAgICAgICBjYWNoZWRJdGVtczogdGhpcy5jYWNoZWRJdGVtcyxcbiAgICAgICAgICBpdGVtczogdGhpcy5pdGVtcyxcbiAgICAgICAgICBwYWdlOiBwYWdlLFxuICAgICAgICAgIHRvdGFsQ291bnQ6IHRoaXMudG90YWxDb3VudCxcbiAgICAgICAgICB0b3RhbFBhZ2VzOiB0aGlzLnRvdGFsUGFnZXMsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMub25DaGFuZ2VkLm5leHQoZXZlbnQpO1xuICAgICAgfSlcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRMb2FkaW5nU3RhdGUoZmFsc2UpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldExvYWRpbmdTdGF0ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2lzTG9hZGluZyA9IHZhbHVlO1xuICAgIHRoaXMub25Mb2FkaW5nQ2hhbmdlZC5uZXh0KHRoaXMuX2lzTG9hZGluZyk7XG4gIH1cblxuICBwdWJsaWMgc2V0UGFnZShwYWdlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5fcGFnZSAhPSBwYWdlIHx8IHRoaXMuX2l0ZW1zLmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLl9wYWdlID0gcGFnZTtcbiAgICAgIHRoaXMubG9hZCgpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgc2V0UGFnZVNpemUocGFnZVNpemU6IG51bWJlcikge1xuICAgIHRoaXMuY29uZmlnLnBhZ2VTaXplID0gcGFnZVNpemU7XG4gICAgdGhpcy5sb2FkKCk7XG4gIH1cblxuICBwdWJsaWMgZmlsdGVyKHZhbHVlOiBBWERhdGFTb3VyY2VGaWx0ZXJPcHRpb24pIHtcbiAgICB0aGlzLl9xdWVyeS5maWx0ZXIgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzb3J0KC4uLnZhbHVlOiBBWERhdGFTb3VyY2VTb3J0T3B0aW9uW10pIHtcbiAgICB0aGlzLl9xdWVyeS5zb3J0ID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJGaWx0ZXIoKSB7XG4gICAgdGhpcy5fcXVlcnkuZmlsdGVyID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXQoKSB7XG4gICAgdGhpcy5fcXVlcnkuZmlsdGVyID0gbnVsbDtcbiAgICB0aGlzLl9xdWVyeS5zb3J0ID0gW107XG4gICAgdGhpcy5fcXVlcnkuc2tpcCA9IDA7XG4gICAgdGhpcy5fY2FjaGVkSXRlbXMgPSBuZXcgQXJyYXkodGhpcy5jb25maWcucGFnZVNpemUpO1xuICAgIHRoaXMuZmV0Y2hlZFBhZ2VzLmNsZWFyKCk7XG4gICAgdGhpcy5fcGFnZSA9IDA7XG4gICAgdGhpcy5fdG90YWxDb3VudCA9IDA7XG4gIH1cblxuICBwdWJsaWMgcmVmcmVzaCgpIHtcbiAgICBjb25zdCBjdXJyZW50RmlsdGVyID0gdGhpcy5fcXVlcnkuZmlsdGVyO1xuICAgIGNvbnN0IGN1cnJlbnRTb3J0ID0gdGhpcy5fcXVlcnkuc29ydDtcbiAgICB0aGlzLnJlc2V0KCk7XG4gICAgdGhpcy5fcXVlcnkuZmlsdGVyID0gY3VycmVudEZpbHRlcjtcbiAgICB0aGlzLl9xdWVyeS5zb3J0ID0gY3VycmVudFNvcnQ7XG4gICAgdGhpcy5sb2FkKCk7XG4gIH1cblxuICBmaW5kKGtleTogdW5rbm93bik6IFQgfCBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCBmcm9tQ2FjaGUgPSB0aGlzLmNhY2hlZEl0ZW1zLmZpbmQoKGMpID0+ICghdGhpcy5jb25maWcua2V5ICYmIGMgPT0ga2V5KSB8fCAoYyAmJiB0aGlzLmNvbmZpZy5rZXkgJiYgY1t0aGlzLmNvbmZpZy5rZXldID09IGtleSkpO1xuICAgIGlmIChmcm9tQ2FjaGUpIHJldHVybiBmcm9tQ2FjaGU7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmJ5S2V5ID8gdGhpcy5jb25maWcuYnlLZXkoa2V5KSA6IG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRBcnJheVRvRGF0YVNvdXJjZTxUPihcbiAgaXRlbXM6IFRbXSxcbiAgb3B0aW9uczogeyBrZXk6IHN0cmluZzsgcGFnZVNpemU6IG51bWJlciB9ID0geyBrZXk6ICdpZCcsIHBhZ2VTaXplOiAxMDAgfSxcbik6IEFYRGF0YVNvdXJjZSB7XG4gIGNvbnN0IGNvbmZpZzogQVhEYXRhU291cmNlQ29uZmlnID0ge1xuICAgIGtleTogb3B0aW9ucy5rZXksXG4gICAgcGFnZVNpemU6IG9wdGlvbnMucGFnZVNpemUsXG4gICAgbG9hZDogKGU6IEFYRGF0YVNvdXJjZVF1ZXJ5KSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBlLmZpbHRlciA/IGZpbHRlcihpdGVtcywgZS5maWx0ZXIpIDogaXRlbXM7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgaXRlbXM6IHJlc3VsdC5zbGljZShlLnNraXAsIGUuc2tpcCArIGUudGFrZSksXG4gICAgICAgIHRvdGFsOiByZXN1bHQubGVuZ3RoLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBieUtleTogKHY6IHVua25vd24pID0+IFByb21pc2UucmVzb2x2ZTxUPihpdGVtcy5maW5kKChjKSA9PiBjW29wdGlvbnMua2V5XSA9PSB2KSksXG4gIH07XG4gIHJldHVybiBuZXcgQVhEYXRhU291cmNlKGNvbmZpZyk7XG59XG4iXX0=
@@ -70,15 +70,11 @@ export class MXSelectionValueComponent extends MXValueComponent {
70
70
  if (value == null || (isArray && value.length == 0)) {
71
71
  return this.multiple ? [] : null;
72
72
  }
73
- const normalizedItems = isArray
74
- ? this.normalizeItemsList(value, true)
75
- : this.normalizeItemsList([value], true);
73
+ const normalizedItems = isArray ? this.normalizeItemsList(value, true) : this.normalizeItemsList([value], true);
76
74
  if (normalizedItems.length == 0) {
77
75
  return this.multiple ? [] : null;
78
76
  }
79
- const result = this.multiple
80
- ? normalizedItems.map((c) => c[this.valueField])
81
- : normalizedItems[0][this.valueField];
77
+ const result = this.multiple ? normalizedItems.map((c) => c[this.valueField]) : normalizedItems[0][this.valueField];
82
78
  return result;
83
79
  }
84
80
  emitOnValueChangedEvent(oldValue, newValue) {
@@ -88,9 +84,7 @@ export class MXSelectionValueComponent extends MXValueComponent {
88
84
  normalizeItemsList(items, findBykey = false) {
89
85
  if (items == null)
90
86
  return [];
91
- return items
92
- .filter((c) => c != null)
93
- .map((i) => this.normalizeItem(i, findBykey));
87
+ return items.filter((c) => c != null).map((i) => this.normalizeItem(i, findBykey));
94
88
  }
95
89
  normalizeItem(item, findBykey = false) {
96
90
  const complex = typeof item == 'object';
@@ -98,8 +92,7 @@ export class MXSelectionValueComponent extends MXValueComponent {
98
92
  const cacheKey = `k-${key}`;
99
93
  const hasText = !complex || item[this.textField] != null;
100
94
  //
101
- if (this.dataService.cacheList[cacheKey] &&
102
- this.dataService.cacheList[cacheKey][this.textField])
95
+ if (this.dataService.cacheList[cacheKey] && this.dataService.cacheList[cacheKey][this.textField])
103
96
  return this.dataService.cacheList[cacheKey];
104
97
  //
105
98
  const obj = {};
@@ -129,9 +122,7 @@ export class MXSelectionValueComponent extends MXValueComponent {
129
122
  });
130
123
  }
131
124
  else if (existsItem) {
132
- obj[this.valueField] = complex
133
- ? existsItem[this.valueField]
134
- : existsItem;
125
+ obj[this.valueField] = complex ? existsItem[this.valueField] : existsItem;
135
126
  }
136
127
  else {
137
128
  obj[this.valueField] = complex ? item[this.valueField] : item;
@@ -141,11 +132,7 @@ export class MXSelectionValueComponent extends MXValueComponent {
141
132
  return obj;
142
133
  }
143
134
  _normalizeSelectedItems() {
144
- const values = Array.isArray(this.value)
145
- ? this.value
146
- : this.value != null
147
- ? [this.value]
148
- : [];
135
+ const values = Array.isArray(this.value) ? this.value : this.value != null ? [this.value] : [];
149
136
  this.dataService.selectedItems = values.map((v) => this.normalizeItem(v));
150
137
  }
151
138
  unselectItems(...items) {
@@ -153,20 +140,14 @@ export class MXSelectionValueComponent extends MXValueComponent {
153
140
  this.commitValue([], true);
154
141
  return;
155
142
  }
156
- const normalizeItems = Array.isArray(items)
157
- ? this.normalizeItemsList(items)
158
- : [this.normalizeItem(items)];
143
+ const normalizeItems = Array.isArray(items) ? this.normalizeItemsList(items) : [this.normalizeItem(items)];
159
144
  const newSelectedItems = this.selectedItems.filter((i) => !normalizeItems.some((n) => n[this.valueField] == i[this.valueField]));
160
145
  this.commitValue(newSelectedItems, true);
161
146
  }
162
147
  selectItems(...items) {
163
148
  if (items && items.length) {
164
- let newSelectedItems = Array.isArray(this.value)
165
- ? this.value
166
- : [this.value];
167
- const normalizeItems = Array.isArray(items)
168
- ? this.normalizeItemsList(items)
169
- : [this.normalizeItem(items)];
149
+ let newSelectedItems = Array.isArray(this.value) ? this.value : [this.value];
150
+ const normalizeItems = Array.isArray(items) ? this.normalizeItemsList(items) : [this.normalizeItem(items)];
170
151
  if (this.multiple) {
171
152
  newSelectedItems = [...newSelectedItems, ...normalizeItems];
172
153
  }
@@ -179,9 +160,7 @@ export class MXSelectionValueComponent extends MXValueComponent {
179
160
  toggleSelect(...items) {
180
161
  items?.forEach((item) => {
181
162
  if (this.multiple) {
182
- this.isItemSelected(item)
183
- ? this.unselectItems(item)
184
- : this.selectItems(item);
163
+ this.isItemSelected(item) ? this.unselectItems(item) : this.selectItems(item);
185
164
  }
186
165
  else {
187
166
  this.selectItems(item);
@@ -194,9 +173,7 @@ export class MXSelectionValueComponent extends MXValueComponent {
194
173
  isItemDisabled(item) {
195
174
  return (this.disabled ||
196
175
  coerceBooleanProperty(item[this.disabledField]) === true ||
197
- (this.disabledCallback
198
- ? this.disabledCallback({ item, index: -1 })
199
- : false));
176
+ (this.disabledCallback ? this.disabledCallback({ item, index: -1 }) : false));
200
177
  }
201
178
  getDisplayText(item) {
202
179
  const normalizeItem = this.normalizeItem(item);
@@ -216,4 +193,4 @@ export class MXSelectionValueComponent extends MXValueComponent {
216
193
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: MXSelectionValueComponent, decorators: [{
217
194
  type: Injectable
218
195
  }] });
219
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLWJhc2UuY29tcG9uZW50LmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2NvbW1vbi9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0aW9uLWJhc2UuY29tcG9uZW50LmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFHM0QsTUFBTSxPQUFPLHdCQUF3QjtJQURyQztRQUVTLGtCQUFhLEdBQWMsRUFBRSxDQUFDO1FBQzlCLGNBQVMsR0FBd0MsRUFBRSxDQUFDO0tBQzVEOzhHQUhZLHdCQUF3QjtrSEFBeEIsd0JBQXdCOzsyRkFBeEIsd0JBQXdCO2tCQURwQyxVQUFVOztBQU1YLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUNsQyxJQUFJLGNBQWMsQ0FBMkIseUJBQXlCLENBQUMsQ0FBQztBQUcxRSxNQUFNLE9BQWdCLHlCQUVwQixTQUFRLGdCQUF5QjtJQUhuQzs7UUFJVSxnQkFBVyxHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBSTlDLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBV25CLGVBQVUsR0FBRyxNQUFNLENBQUM7UUFXcEIsbUJBQWMsR0FBRyxVQUFVLENBQUM7UUFXNUIsY0FBUyxHQUFHLEtBQUssQ0FBQztLQW9MM0I7SUFwTkMsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBQ0QsSUFBVyxVQUFVLENBQUMsQ0FBUztRQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ2IsSUFBSSxFQUFFLFlBQVk7WUFDbEIs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QUFhLENBQUMsSUFBSSxDQUFRLENBQUM7UUFDdEQsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFUyxtQkFBbUI7UUFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztJQUN0QyxDQUFDOzhHQTNObUIseUJBQXlCO2tIQUF6Qix5QkFBeUI7OzJGQUF6Qix5QkFBeUI7a0JBRDlDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTVhWYWx1ZUNvbXBvbmVudCB9IGZyb20gJy4vdmFsdWUtY29tcG9uZW50LmNsYXNzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1YU2VsZWN0aW9uQnJpZGdlU2VydmljZSB7XG4gIHB1YmxpYyBzZWxlY3RlZEl0ZW1zOiB1bmtub3duW10gPSBbXTtcbiAgcHVibGljIGNhY2hlTGlzdDogeyBba2V5OiBzdHJpbmcgfCBudW1iZXJdOiB1bmtub3duIH0gPSB7fTtcbn1cblxuZXhwb3J0IGNvbnN0IEFYX1NFTEVDVElPTl9EQVRBX1RPS0VOID1cbiAgbmV3IEluamVjdGlvblRva2VuPE1YU2VsZWN0aW9uQnJpZGdlU2VydmljZT4oJ0FYX1NFTEVDVElPTl9EQVRBX1RPS0VOJyk7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBNWFNlbGVjdGlvblZhbHVlQ29tcG9uZW50PFxuICBUID0gdW5rbm93blxuPiBleHRlbmRzIE1YVmFsdWVDb21wb25lbnQ8dW5rbm93bj4ge1xuICBwcml2YXRlIGRhdGFTZXJ2aWNlID0gaW5qZWN0KEFYX1NFTEVDVElPTl9EQVRBX1RPS0VOKTtcblxuICBkaXNhYmxlZENhbGxiYWNrOiAoZTogeyBpdGVtOiBUOyBpbmRleDogbnVtYmVyIH0pID0+IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSBfdmFsdWVGaWVsZCA9ICdpZCc7XG4gIHB1YmxpYyBnZXQgdmFsdWVGaWVsZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZUZpZWxkO1xuICB9XG4gIHB1YmxpYyBzZXQgdmFsdWVGaWVsZCh2OiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldE9wdGlvbih7XG4gICAgICBuYW1lOiAndmFsdWVGaWVsZCcsXG4gICAgICB2YWx1ZTogdixcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3RleHRGaWVsZCA9ICd0ZXh0JztcbiAgcHVibGljIGdldCB0ZXh0RmllbGQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGV4dEZpZWxkO1xuICB9XG4gIHB1YmxpYyBzZXQgdGV4dEZpZWxkKHY6IHN0cmluZykge1xuICAgIHRoaXMuc2V0T3B0aW9uKHtcbiAgICAgIG5hbWU6ICd0ZXh0RmllbGQnLFxuICAgICAgdmFsdWU6IHYsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9kaXNhYmxlZEZpZWxkID0gJ2Rpc2FibGVkJztcbiAgcHVibGljIGdldCBkaXNhYmxlZEZpZWxkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkRmllbGQ7XG4gIH1cbiAgcHVibGljIHNldCBkaXNhYmxlZEZpZWxkKHY6IHN0cmluZykge1xuICAgIHRoaXMuc2V0T3B0aW9uKHtcbiAgICAgIG5hbWU6ICdkaXNhYmxlZEZpZWxkJyxcbiAgICAgIHZhbHVlOiB2LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfbXVsdGlwbGUgPSBmYWxzZTtcbiAgcHVibGljIGdldCBtdWx0aXBsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbXVsdGlwbGU7XG4gIH1cbiAgcHVibGljIHNldCBtdWx0aXBsZSh2OiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRPcHRpb24oe1xuICAgICAgbmFtZTogJ211bHRpcGxlJyxcbiAgICAgIHZhbHVlOiB2LFxuICAgICAgYWZ0ZXJDYWxsYmFjazogKCkgPT4ge1xuICAgICAgICB0aGlzLmNsZWFyKGZhbHNlKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRJdGVtcygpOiB1bmtub3duW10ge1xuICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLnNlbGVjdGVkSXRlbXMgfHwgW107XG4gIH1cblxuICBvdmVycmlkZSBpbnRlcm5hbFNldFZhbHVlKHZhbHVlOiB1bmtub3duKSB7XG4gICAgY29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkodmFsdWUpO1xuICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IChpc0FycmF5ICYmIHZhbHVlLmxlbmd0aCA9PSAwKSkge1xuICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGUgPyBbXSA6IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IG5vcm1hbGl6ZWRJdGVtcyA9IGlzQXJyYXlcbiAgICAgID8gdGhpcy5ub3JtYWxpemVJdGVtc0xpc3QodmFsdWUsIHRydWUpXG4gICAgICA6IHRoaXMubm9ybWFsaXplSXRlbXNMaXN0KFt2YWx1ZV0sIHRydWUpO1xuXG4gICAgaWYgKG5vcm1hbGl6ZWRJdGVtcy5sZW5ndGggPT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGUgPyBbXSA6IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMubXVsdGlwbGVcbiAgICAgID8gbm9ybWFsaXplZEl0ZW1zLm1hcCgoYykgPT4gY1t0aGlzLnZhbHVlRmllbGRdKVxuICAgICAgOiBub3JtYWxpemVkSXRlbXNbMF1bdGhpcy52YWx1ZUZpZWxkXTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgb3ZlcnJpZGUgZW1pdE9uVmFsdWVDaGFuZ2VkRXZlbnQob2xkVmFsdWU/OiB1bmtub3duLCBuZXdWYWx1ZT86IHVua25vd24pIHtcbiAgICB0aGlzLl9ub3JtYWxpemVTZWxlY3RlZEl0ZW1zKCk7XG4gICAgc3VwZXIuZW1pdE9uVmFsdWVDaGFuZ2VkRXZlbnQob2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgfVxuXG4gIGFic3RyYWN0IGdldEl0ZW1CeUtleShrZXk6IHVua25vd24pOiB1bmtub3duIHwgUHJvbWlzZTx1bmtub3duPjtcblxuICBwcm90ZWN0ZWQgbm9ybWFsaXplSXRlbXNMaXN0KGl0ZW1zOiB1bmtub3duW10sIGZpbmRCeWtleSA9IGZhbHNlKTogdW5rbm93bltdIHtcbiAgICBpZiAoaXRlbXMgPT0gbnVsbCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBpdGVtc1xuICAgICAgLmZpbHRlcigoYykgPT4gYyAhPSBudWxsKVxuICAgICAgLm1hcCgoaSkgPT4gdGhpcy5ub3JtYWxpemVJdGVtKGksIGZpbmRCeWtleSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVJdGVtKGl0ZW06IHVua25vd24sIGZpbmRCeWtleSA9IGZhbHNlKTogdW5rbm93biB7XG4gICAgY29uc3QgY29tcGxleCA9IHR5cGVvZiBpdGVtID09ICdvYmplY3QnO1xuICAgIGNvbnN0IGtleSA9IGNvbXBsZXggPyBpdGVtW3RoaXMudmFsdWVGaWVsZF0gOiBgJHtpdGVtfWA7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBgay0ke2tleX1gO1xuICAgIGNvbnN0IGhhc1RleHQgPSAhY29tcGxleCB8fCBpdGVtW3RoaXMudGV4dEZpZWxkXSAhPSBudWxsO1xuICAgIC8vXG4gICAgaWYgKFxuICAgICAgdGhpcy5kYXRhU2VydmljZS5jYWNoZUxpc3RbY2FjaGVLZXldICYmXG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLmNhY2hlTGlzdFtjYWNoZUtleV1bdGhpcy50ZXh0RmllbGRdXG4gICAgKVxuICAgICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2UuY2FjaGVMaXN0W2NhY2hlS2V5XTtcbiAgICAvL1xuICAgIGNvbnN0IG9iajogdW5rbm93biA9IHt9O1xuICAgIGlmIChjb21wbGV4ICYmIGhhc1RleHQpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ob2JqLCBpdGVtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZXhpc3RzSXRlbSA9IGZpbmRCeWtleSA/IHRoaXMuZ2V0SXRlbUJ5S2V5KGtleSkgOiBudWxsO1xuICAgICAgaWYgKGV4aXN0c0l0ZW0gJiYgZXhpc3RzSXRlbSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgb2JqW3RoaXMudmFsdWVGaWVsZF0gPSBrZXk7XG4gICAgICAgIG9ialsnaXNMb2FkaW5nJ10gPSB0cnVlO1xuICAgICAgICAvL1xuICAgICAgICBleGlzdHNJdGVtXG4gICAgICAgICAgLnRoZW4oKHIpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgb2JqW3RoaXMudmFsdWVGaWVsZF0gPSByW3RoaXMudmFsdWVGaWVsZF07XG4gICAgICAgICAgICAgIG9ialt0aGlzLnRleHRGaWVsZF0gPSByW3RoaXMudGV4dEZpZWxkXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG9ialt0aGlzLnZhbHVlRmllbGRdID0gciB8fCBrZXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICBvYmpbJ2lzTG9hZGluZyddID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLmNhY2hlTGlzdFtjYWNoZUtleV0gPSBvYmo7XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoZXhpc3RzSXRlbSkge1xuICAgICAgICBvYmpbdGhpcy52YWx1ZUZpZWxkXSA9IGNvbXBsZXhcbiAgICAgICAgICA/IGV4aXN0c0l0ZW1bdGhpcy52YWx1ZUZpZWxkXVxuICAgICAgICAgIDogZXhpc3RzSXRlbTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialt0aGlzLnZhbHVlRmllbGRdID0gY29tcGxleCA/IGl0ZW1bdGhpcy52YWx1ZUZpZWxkXSA6IGl0ZW07XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZGF0YVNlcnZpY2UuY2FjaGVMaXN0W2NhY2hlS2V5XSA9IG9iajtcbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgcHJpdmF0ZSBfbm9ybWFsaXplU2VsZWN0ZWRJdGVtcygpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpXG4gICAgICA/IHRoaXMudmFsdWVcbiAgICAgIDogdGhpcy52YWx1ZSAhPSBudWxsXG4gICAgICA/IFt0aGlzLnZhbHVlXVxuICAgICAgOiBbXTtcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLnNlbGVjdGVkSXRlbXMgPSB2YWx1ZXMubWFwKCh2KSA9PiB0aGlzLm5vcm1hbGl6ZUl0ZW0odikpO1xuICB9XG5cbiAgcHVibGljIHVuc2VsZWN0SXRlbXMoLi4uaXRlbXM6IFRbXSkge1xuICAgIGlmICghaXRlbXMgfHwgaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmNvbW1pdFZhbHVlKFtdLCB0cnVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgbm9ybWFsaXplSXRlbXMgPSBBcnJheS5pc0FycmF5KGl0ZW1zKVxuICAgICAgPyB0aGlzLm5vcm1hbGl6ZUl0ZW1zTGlzdChpdGVtcylcbiAgICAgIDogW3RoaXMubm9ybWFsaXplSXRlbShpdGVtcyldO1xuICAgIGNvbnN0IG5ld1NlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKFxuICAgICAgKGkpID0+XG4gICAgICAgICFub3JtYWxpemVJdGVtcy5zb21lKChuKSA9PiBuW3RoaXMudmFsdWVGaWVsZF0gPT0gaVt0aGlzLnZhbHVlRmllbGRdKVxuICAgICk7XG4gICAgdGhpcy5jb21taXRWYWx1ZShuZXdTZWxlY3RlZEl0ZW1zLCB0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RJdGVtcyguLi5pdGVtczogVFtdKSB7XG4gICAgaWYgKGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCkge1xuICAgICAgbGV0IG5ld1NlbGVjdGVkSXRlbXMgPSBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpXG4gICAgICAgID8gdGhpcy52YWx1ZVxuICAgICAgICA6IFt0aGlzLnZhbHVlXTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZUl0ZW1zID0gQXJyYXkuaXNBcnJheShpdGVtcylcbiAgICAgICAgPyB0aGlzLm5vcm1hbGl6ZUl0ZW1zTGlzdChpdGVtcylcbiAgICAgICAgOiBbdGhpcy5ub3JtYWxpemVJdGVtKGl0ZW1zKV07XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICBuZXdTZWxlY3RlZEl0ZW1zID0gWy4uLm5ld1NlbGVjdGVkSXRlbXMsIC4uLm5vcm1hbGl6ZUl0ZW1zXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1NlbGVjdGVkSXRlbXMgPSBub3JtYWxpemVJdGVtcztcbiAgICAgIH1cbiAgICAgIHRoaXMuY29tbWl0VmFsdWUobmV3U2VsZWN0ZWRJdGVtcywgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHRvZ2dsZVNlbGVjdCguLi5pdGVtczogVFtdKSB7XG4gICAgaXRlbXM/LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIHRoaXMuaXNJdGVtU2VsZWN0ZWQoaXRlbSlcbiAgICAgICAgICA/IHRoaXMudW5zZWxlY3RJdGVtcyhpdGVtKVxuICAgICAgICAgIDogdGhpcy5zZWxlY3RJdGVtcyhpdGVtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0SXRlbXMoaXRlbSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgaXNJdGVtU2VsZWN0ZWQoaXRlbTogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbXMuc29tZShcbiAgICAgIChjKSA9PiBjW3RoaXMudmFsdWVGaWVsZF0gPT09IHRoaXMubm9ybWFsaXplSXRlbShpdGVtKVt0aGlzLnZhbHVlRmllbGRdXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0l0ZW1EaXNhYmxlZChpdGVtOiBUKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZGlzYWJsZWQgfHxcbiAgICAgIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShpdGVtW3RoaXMuZGlzYWJsZWRGaWVsZF0pID09PSB0cnVlIHx8XG4gICAgICAodGhpcy5kaXNhYmxlZENhbGxiYWNrXG4gICAgICAgID8gdGhpcy5kaXNhYmxlZENhbGxiYWNrKHsgaXRlbSwgaW5kZXg6IC0xIH0pXG4gICAgICAgIDogZmFsc2UpXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXREaXNwbGF5VGV4dChpdGVtOiBUKSB7XG4gICAgY29uc3Qgbm9ybWFsaXplSXRlbSA9IHRoaXMubm9ybWFsaXplSXRlbShpdGVtKSBhcyBhbnk7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZUl0ZW1bdGhpcy50ZXh0RmllbGRdIHx8IG5vcm1hbGl6ZUl0ZW1bdGhpcy52YWx1ZUZpZWxkXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRWYWx1ZShpdGVtOiBUKSB7XG4gICAgY29uc3Qgbm9ybWFsaXplSXRlbSA9IHRoaXMubm9ybWFsaXplSXRlbShpdGVtKSBhcyBhbnk7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZUl0ZW1bdGhpcy52YWx1ZUZpZWxkXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbGVhclNlbGVjdGlvbkNhY2hlKCkge1xuICAgIHRoaXMuZGF0YVNlcnZpY2UuY2FjaGVMaXN0ID0ge307XG4gICAgdGhpcy5kYXRhU2VydmljZS5zZWxlY3RlZEl0ZW1zID0gW107XG4gIH1cbn1cbiJdfQ==
196
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLWJhc2UuY29tcG9uZW50LmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2NvbW1vbi9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0aW9uLWJhc2UuY29tcG9uZW50LmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFHM0QsTUFBTSxPQUFPLHdCQUF3QjtJQURyQztRQUVTLGtCQUFhLEdBQWMsRUFBRSxDQUFDO1FBQzlCLGNBQVMsR0FBd0MsRUFBRSxDQUFDO0tBQzVEOzhHQUhZLHdCQUF3QjtrSEFBeEIsd0JBQXdCOzsyRkFBeEIsd0JBQXdCO2tCQURwQyxVQUFVOztBQU1YLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLElBQUksY0FBYyxDQUEyQix5QkFBeUIsQ0FBQyxDQUFDO0FBRy9HLE1BQU0sT0FBZ0IseUJBQXVDLFNBQVEsZ0JBQXlCO0lBRDlGOztRQUVVLGdCQUFXLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFJOUMsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFXbkIsZUFBVSxHQUFHLE1BQU0sQ0FBQztRQVdwQixtQkFBYyxHQUFHLFVBQVUsQ0FBQztRQVc1QixjQUFTLEdBQUcsS0FBSyxDQUFDO0tBc0ozQjtJQXRMQyxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFDRCxJQUFXLFVBQVUsQ0FBQyxDQUFTO1FBQzdCLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDYixJQUFJLEVBQUUsWUFBWTtZQUNsQixL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QU8sYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRVMsbUJBQW1CO1FBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7SUFDdEMsQ0FBQzs4R0EzTG1CLHlCQUF5QjtrSEFBekIseUJBQXlCOzsyRkFBekIseUJBQXlCO2tCQUQ5QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1YVmFsdWVDb21wb25lbnQgfSBmcm9tICcuL3ZhbHVlLWNvbXBvbmVudC5jbGFzcyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNWFNlbGVjdGlvbkJyaWRnZVNlcnZpY2Uge1xuICBwdWJsaWMgc2VsZWN0ZWRJdGVtczogdW5rbm93bltdID0gW107XG4gIHB1YmxpYyBjYWNoZUxpc3Q6IHsgW2tleTogc3RyaW5nIHwgbnVtYmVyXTogdW5rbm93biB9ID0ge307XG59XG5cbmV4cG9ydCBjb25zdCBBWF9TRUxFQ1RJT05fREFUQV9UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxNWFNlbGVjdGlvbkJyaWRnZVNlcnZpY2U+KCdBWF9TRUxFQ1RJT05fREFUQV9UT0tFTicpO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTVhTZWxlY3Rpb25WYWx1ZUNvbXBvbmVudDxUID0gdW5rbm93bj4gZXh0ZW5kcyBNWFZhbHVlQ29tcG9uZW50PHVua25vd24+IHtcbiAgcHJpdmF0ZSBkYXRhU2VydmljZSA9IGluamVjdChBWF9TRUxFQ1RJT05fREFUQV9UT0tFTik7XG5cbiAgZGlzYWJsZWRDYWxsYmFjazogKGU6IHsgaXRlbTogVDsgaW5kZXg6IG51bWJlciB9KSA9PiBib29sZWFuO1xuXG4gIHByaXZhdGUgX3ZhbHVlRmllbGQgPSAnaWQnO1xuICBwdWJsaWMgZ2V0IHZhbHVlRmllbGQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWVGaWVsZDtcbiAgfVxuICBwdWJsaWMgc2V0IHZhbHVlRmllbGQodjogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRPcHRpb24oe1xuICAgICAgbmFtZTogJ3ZhbHVlRmllbGQnLFxuICAgICAgdmFsdWU6IHYsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF90ZXh0RmllbGQgPSAndGV4dCc7XG4gIHB1YmxpYyBnZXQgdGV4dEZpZWxkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RleHRGaWVsZDtcbiAgfVxuICBwdWJsaWMgc2V0IHRleHRGaWVsZCh2OiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldE9wdGlvbih7XG4gICAgICBuYW1lOiAndGV4dEZpZWxkJyxcbiAgICAgIHZhbHVlOiB2LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGlzYWJsZWRGaWVsZCA9ICdkaXNhYmxlZCc7XG4gIHB1YmxpYyBnZXQgZGlzYWJsZWRGaWVsZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZEZpZWxkO1xuICB9XG4gIHB1YmxpYyBzZXQgZGlzYWJsZWRGaWVsZCh2OiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldE9wdGlvbih7XG4gICAgICBuYW1lOiAnZGlzYWJsZWRGaWVsZCcsXG4gICAgICB2YWx1ZTogdixcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX211bHRpcGxlID0gZmFsc2U7XG4gIHB1YmxpYyBnZXQgbXVsdGlwbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX211bHRpcGxlO1xuICB9XG4gIHB1YmxpYyBzZXQgbXVsdGlwbGUodjogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0T3B0aW9uKHtcbiAgICAgIG5hbWU6ICdtdWx0aXBsZScsXG4gICAgICB2YWx1ZTogdixcbiAgICAgIGFmdGVyQ2FsbGJhY2s6ICgpID0+IHtcbiAgICAgICAgdGhpcy5jbGVhcihmYWxzZSk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGVkSXRlbXMoKTogdW5rbm93bltdIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5zZWxlY3RlZEl0ZW1zIHx8IFtdO1xuICB9XG5cbiAgb3ZlcnJpZGUgaW50ZXJuYWxTZXRWYWx1ZSh2YWx1ZTogdW5rbm93bikge1xuICAgIGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHZhbHVlKTtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCAoaXNBcnJheSAmJiB2YWx1ZS5sZW5ndGggPT0gMCkpIHtcbiAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlID8gW10gOiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBub3JtYWxpemVkSXRlbXMgPSBpc0FycmF5ID8gdGhpcy5ub3JtYWxpemVJdGVtc0xpc3QodmFsdWUsIHRydWUpIDogdGhpcy5ub3JtYWxpemVJdGVtc0xpc3QoW3ZhbHVlXSwgdHJ1ZSk7XG5cbiAgICBpZiAobm9ybWFsaXplZEl0ZW1zLmxlbmd0aCA9PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSA/IFtdIDogbnVsbDtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5tdWx0aXBsZSA/IG5vcm1hbGl6ZWRJdGVtcy5tYXAoKGMpID0+IGNbdGhpcy52YWx1ZUZpZWxkXSkgOiBub3JtYWxpemVkSXRlbXNbMF1bdGhpcy52YWx1ZUZpZWxkXTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgb3ZlcnJpZGUgZW1pdE9uVmFsdWVDaGFuZ2VkRXZlbnQob2xkVmFsdWU/OiB1bmtub3duLCBuZXdWYWx1ZT86IHVua25vd24pIHtcbiAgICB0aGlzLl9ub3JtYWxpemVTZWxlY3RlZEl0ZW1zKCk7XG4gICAgc3VwZXIuZW1pdE9uVmFsdWVDaGFuZ2VkRXZlbnQob2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgfVxuXG4gIGFic3RyYWN0IGdldEl0ZW1CeUtleShrZXk6IHVua25vd24pOiB1bmtub3duIHwgUHJvbWlzZTx1bmtub3duPjtcblxuICBwcm90ZWN0ZWQgbm9ybWFsaXplSXRlbXNMaXN0KGl0ZW1zOiB1bmtub3duW10sIGZpbmRCeWtleSA9IGZhbHNlKTogdW5rbm93bltdIHtcbiAgICBpZiAoaXRlbXMgPT0gbnVsbCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBpdGVtcy5maWx0ZXIoKGMpID0+IGMgIT0gbnVsbCkubWFwKChpKSA9PiB0aGlzLm5vcm1hbGl6ZUl0ZW0oaSwgZmluZEJ5a2V5KSk7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZUl0ZW0oaXRlbTogdW5rbm93biwgZmluZEJ5a2V5ID0gZmFsc2UpOiB1bmtub3duIHtcbiAgICBjb25zdCBjb21wbGV4ID0gdHlwZW9mIGl0ZW0gPT0gJ29iamVjdCc7XG4gICAgY29uc3Qga2V5ID0gY29tcGxleCA/IGl0ZW1bdGhpcy52YWx1ZUZpZWxkXSA6IGAke2l0ZW19YDtcbiAgICBjb25zdCBjYWNoZUtleSA9IGBrLSR7a2V5fWA7XG4gICAgY29uc3QgaGFzVGV4dCA9ICFjb21wbGV4IHx8IGl0ZW1bdGhpcy50ZXh0RmllbGRdICE9IG51bGw7XG4gICAgLy9cbiAgICBpZiAodGhpcy5kYXRhU2VydmljZS5jYWNoZUxpc3RbY2FjaGVLZXldICYmIHRoaXMuZGF0YVNlcnZpY2UuY2FjaGVMaXN0W2NhY2hlS2V5XVt0aGlzLnRleHRGaWVsZF0pXG4gICAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5jYWNoZUxpc3RbY2FjaGVLZXldO1xuICAgIC8vXG4gICAgY29uc3Qgb2JqOiB1bmtub3duID0ge307XG4gICAgaWYgKGNvbXBsZXggJiYgaGFzVGV4dCkge1xuICAgICAgT2JqZWN0LmFzc2lnbihvYmosIGl0ZW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBleGlzdHNJdGVtID0gZmluZEJ5a2V5ID8gdGhpcy5nZXRJdGVtQnlLZXkoa2V5KSA6IG51bGw7XG4gICAgICBpZiAoZXhpc3RzSXRlbSAmJiBleGlzdHNJdGVtIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICBvYmpbdGhpcy52YWx1ZUZpZWxkXSA9IGtleTtcbiAgICAgICAgb2JqWydpc0xvYWRpbmcnXSA9IHRydWU7XG4gICAgICAgIC8vXG4gICAgICAgIGV4aXN0c0l0ZW1cbiAgICAgICAgICAudGhlbigocikgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICBvYmpbdGhpcy52YWx1ZUZpZWxkXSA9IHJbdGhpcy52YWx1ZUZpZWxkXTtcbiAgICAgICAgICAgICAgb2JqW3RoaXMudGV4dEZpZWxkXSA9IHJbdGhpcy50ZXh0RmllbGRdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb2JqW3RoaXMudmFsdWVGaWVsZF0gPSByIHx8IGtleTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICAgIG9ialsnaXNMb2FkaW5nJ10gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuY2FjaGVMaXN0W2NhY2hlS2V5XSA9IG9iajtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChleGlzdHNJdGVtKSB7XG4gICAgICAgIG9ialt0aGlzLnZhbHVlRmllbGRdID0gY29tcGxleCA/IGV4aXN0c0l0ZW1bdGhpcy52YWx1ZUZpZWxkXSA6IGV4aXN0c0l0ZW07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmpbdGhpcy52YWx1ZUZpZWxkXSA9IGNvbXBsZXggPyBpdGVtW3RoaXMudmFsdWVGaWVsZF0gOiBpdGVtO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmRhdGFTZXJ2aWNlLmNhY2hlTGlzdFtjYWNoZUtleV0gPSBvYmo7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHByaXZhdGUgX25vcm1hbGl6ZVNlbGVjdGVkSXRlbXMoKSB7XG4gICAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSA/IHRoaXMudmFsdWUgOiB0aGlzLnZhbHVlICE9IG51bGwgPyBbdGhpcy52YWx1ZV0gOiBbXTtcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLnNlbGVjdGVkSXRlbXMgPSB2YWx1ZXMubWFwKCh2KSA9PiB0aGlzLm5vcm1hbGl6ZUl0ZW0odikpO1xuICB9XG5cbiAgcHVibGljIHVuc2VsZWN0SXRlbXMoLi4uaXRlbXM6IFRbXSkge1xuICAgIGlmICghaXRlbXMgfHwgaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmNvbW1pdFZhbHVlKFtdLCB0cnVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgbm9ybWFsaXplSXRlbXMgPSBBcnJheS5pc0FycmF5KGl0ZW1zKSA/IHRoaXMubm9ybWFsaXplSXRlbXNMaXN0KGl0ZW1zKSA6IFt0aGlzLm5vcm1hbGl6ZUl0ZW0oaXRlbXMpXTtcbiAgICBjb25zdCBuZXdTZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcigoaSkgPT4gIW5vcm1hbGl6ZUl0ZW1zLnNvbWUoKG4pID0+IG5bdGhpcy52YWx1ZUZpZWxkXSA9PSBpW3RoaXMudmFsdWVGaWVsZF0pKTtcbiAgICB0aGlzLmNvbW1pdFZhbHVlKG5ld1NlbGVjdGVkSXRlbXMsIHRydWUpO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdEl0ZW1zKC4uLml0ZW1zOiBUW10pIHtcbiAgICBpZiAoaXRlbXMgJiYgaXRlbXMubGVuZ3RoKSB7XG4gICAgICBsZXQgbmV3U2VsZWN0ZWRJdGVtcyA9IEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgPyB0aGlzLnZhbHVlIDogW3RoaXMudmFsdWVdO1xuICAgICAgY29uc3Qgbm9ybWFsaXplSXRlbXMgPSBBcnJheS5pc0FycmF5KGl0ZW1zKSA/IHRoaXMubm9ybWFsaXplSXRlbXNMaXN0KGl0ZW1zKSA6IFt0aGlzLm5vcm1hbGl6ZUl0ZW0oaXRlbXMpXTtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIG5ld1NlbGVjdGVkSXRlbXMgPSBbLi4ubmV3U2VsZWN0ZWRJdGVtcywgLi4ubm9ybWFsaXplSXRlbXNdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3U2VsZWN0ZWRJdGVtcyA9IG5vcm1hbGl6ZUl0ZW1zO1xuICAgICAgfVxuICAgICAgdGhpcy5jb21taXRWYWx1ZShuZXdTZWxlY3RlZEl0ZW1zLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlU2VsZWN0KC4uLml0ZW1zOiBUW10pIHtcbiAgICBpdGVtcz8uZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgdGhpcy5pc0l0ZW1TZWxlY3RlZChpdGVtKSA/IHRoaXMudW5zZWxlY3RJdGVtcyhpdGVtKSA6IHRoaXMuc2VsZWN0SXRlbXMoaXRlbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdEl0ZW1zKGl0ZW0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGlzSXRlbVNlbGVjdGVkKGl0ZW06IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zLnNvbWUoKGMpID0+IGNbdGhpcy52YWx1ZUZpZWxkXSA9PT0gdGhpcy5ub3JtYWxpemVJdGVtKGl0ZW0pW3RoaXMudmFsdWVGaWVsZF0pO1xuICB9XG5cbiAgcHVibGljIGlzSXRlbURpc2FibGVkKGl0ZW06IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5kaXNhYmxlZCB8fFxuICAgICAgY29lcmNlQm9vbGVhblByb3BlcnR5KGl0ZW1bdGhpcy5kaXNhYmxlZEZpZWxkXSkgPT09IHRydWUgfHxcbiAgICAgICh0aGlzLmRpc2FibGVkQ2FsbGJhY2sgPyB0aGlzLmRpc2FibGVkQ2FsbGJhY2soeyBpdGVtLCBpbmRleDogLTEgfSkgOiBmYWxzZSlcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldERpc3BsYXlUZXh0KGl0ZW06IFQpIHtcbiAgICBjb25zdCBub3JtYWxpemVJdGVtID0gdGhpcy5ub3JtYWxpemVJdGVtKGl0ZW0pIGFzIGFueTtcbiAgICByZXR1cm4gbm9ybWFsaXplSXRlbVt0aGlzLnRleHRGaWVsZF0gfHwgbm9ybWFsaXplSXRlbVt0aGlzLnZhbHVlRmllbGRdO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFZhbHVlKGl0ZW06IFQpIHtcbiAgICBjb25zdCBub3JtYWxpemVJdGVtID0gdGhpcy5ub3JtYWxpemVJdGVtKGl0ZW0pIGFzIGFueTtcbiAgICByZXR1cm4gbm9ybWFsaXplSXRlbVt0aGlzLnZhbHVlRmllbGRdO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNsZWFyU2VsZWN0aW9uQ2FjaGUoKSB7XG4gICAgdGhpcy5kYXRhU2VydmljZS5jYWNoZUxpc3QgPSB7fTtcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLnNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgfVxufVxuIl19