@sumaris-net/ngx-components 2.7.6 → 2.8.0-rc2

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.
Files changed (52) hide show
  1. package/doc/changelog.md +8 -0
  2. package/esm2022/public_api.mjs +7 -3
  3. package/esm2022/src/app/admin/users/users.mjs +5 -3
  4. package/esm2022/src/app/core/account/new-token.modal.mjs +4 -4
  5. package/esm2022/src/app/core/auth/auth.form.mjs +2 -2
  6. package/esm2022/src/app/core/core.testing.module.mjs +2 -2
  7. package/esm2022/src/app/core/form/entity/editor.class.mjs +33 -487
  8. package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +14 -26
  9. package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +5 -4
  10. package/esm2022/src/app/core/form/entity/tab-editor.class.mjs +194 -0
  11. package/esm2022/src/app/core/form/form-container.class.mjs +312 -0
  12. package/esm2022/src/app/core/form/form.class.mjs +27 -36
  13. package/esm2022/src/app/core/form/form.utils.mjs +1 -1
  14. package/esm2022/src/app/core/menu/testing/menu.testing.mjs +2 -2
  15. package/esm2022/src/app/core/services/model/settings.model.mjs +2 -1
  16. package/esm2022/src/app/core/settings/settings.page.mjs +5 -9
  17. package/esm2022/src/app/core/table/table.class.mjs +9 -5
  18. package/esm2022/src/app/core/table/table.module.mjs +16 -3
  19. package/esm2022/src/app/core/table/table.pipes.mjs +74 -0
  20. package/esm2022/src/app/core/table/testing/table.testing.mjs +39 -17
  21. package/esm2022/src/app/core/table/testing/table2.testing.mjs +40 -22
  22. package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +3 -3
  23. package/esm2022/src/app/shared/pipes/form.pipes.mjs +10 -10
  24. package/esm2022/src/app/shared/pipes/pipes.module.mjs +28 -3
  25. package/esm2022/src/app/shared/pipes/selection.pipes.mjs +176 -0
  26. package/esm2022/src/app/shared/validator/validators.mjs +3 -2
  27. package/fesm2022/sumaris-net.ngx-components.mjs +655 -321
  28. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
  29. package/package.json +1 -1
  30. package/public_api.d.ts +6 -2
  31. package/src/app/core/account/new-token.modal.d.ts +1 -1
  32. package/src/app/core/form/entity/editor.class.d.ts +18 -177
  33. package/src/app/core/form/entity/entity-editor-modal.class.d.ts +9 -12
  34. package/src/app/core/form/entity/entity-editor.class.d.ts +10 -6
  35. package/src/app/core/form/entity/tab-editor.class.d.ts +70 -0
  36. package/src/app/core/form/form-container.class.d.ts +123 -0
  37. package/src/app/core/form/form.class.d.ts +11 -21
  38. package/src/app/core/form/form.utils.d.ts +38 -23
  39. package/src/app/core/menu/testing/menu.testing.d.ts +1 -1
  40. package/src/app/core/services/model/settings.model.d.ts +1 -0
  41. package/src/app/core/settings/settings.page.d.ts +1 -2
  42. package/src/app/core/table/table.module.d.ts +4 -3
  43. package/src/app/core/table/table.pipes.d.ts +28 -0
  44. package/src/app/core/table/testing/table.testing.d.ts +9 -5
  45. package/src/app/core/table/testing/table2.testing.d.ts +10 -5
  46. package/src/app/shared/pipes/form.pipes.d.ts +1 -1
  47. package/src/app/shared/pipes/pipes.module.d.ts +5 -4
  48. package/src/app/shared/pipes/selection.pipes.d.ts +62 -0
  49. package/src/app/shared/validator/validators.d.ts +1 -0
  50. package/src/assets/manifest.json +1 -1
  51. package/src/theme/_ngx-components.scss +4 -0
  52. package/src/theme/_ngx-components.table.scss +4 -14
@@ -3,6 +3,7 @@ import { SharedModule } from '../../shared/shared.module';
3
3
  import { TableSelectColumnsComponent } from './table-select-columns.component';
4
4
  import { ActionsColumnComponent } from './actions-column.component';
5
5
  import { TranslateModule } from '@ngx-translate/core';
6
+ import { IsAllSelectedPipe, IsNotAllSelectedPipe } from './table.pipes';
6
7
  import * as i0 from "@angular/core";
7
8
  import * as i1 from "@ngx-translate/core";
8
9
  export class AppTableModule {
@@ -10,10 +11,16 @@ export class AppTableModule {
10
11
  static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.2.4", ngImport: i0, type: AppTableModule, declarations: [
11
12
  // Components
12
13
  TableSelectColumnsComponent,
13
- ActionsColumnComponent], imports: [SharedModule, i1.TranslateModule], exports: [TranslateModule,
14
+ ActionsColumnComponent,
15
+ // Pipes
16
+ IsAllSelectedPipe,
17
+ IsNotAllSelectedPipe], imports: [SharedModule, i1.TranslateModule], exports: [TranslateModule,
14
18
  // Components
15
19
  TableSelectColumnsComponent,
16
- ActionsColumnComponent] });
20
+ ActionsColumnComponent,
21
+ // Pipes
22
+ IsAllSelectedPipe,
23
+ IsNotAllSelectedPipe] });
17
24
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: AppTableModule, imports: [SharedModule, TranslateModule.forChild(), TranslateModule] });
18
25
  }
19
26
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: AppTableModule, decorators: [{
@@ -24,13 +31,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
24
31
  // Components
25
32
  TableSelectColumnsComponent,
26
33
  ActionsColumnComponent,
34
+ // Pipes
35
+ IsAllSelectedPipe,
36
+ IsNotAllSelectedPipe,
27
37
  ],
28
38
  exports: [
29
39
  TranslateModule,
30
40
  // Components
31
41
  TableSelectColumnsComponent,
32
42
  ActionsColumnComponent,
43
+ // Pipes
44
+ IsAllSelectedPipe,
45
+ IsNotAllSelectedPipe,
33
46
  ],
34
47
  }]
35
48
  }] });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3RhYmxlL3RhYmxlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQWlCdEQsTUFBTSxPQUFPLGNBQWM7dUdBQWQsY0FBYzt3R0FBZCxjQUFjO1lBWHZCLGFBQWE7WUFDYiwyQkFBMkI7WUFDM0Isc0JBQXNCLGFBTGQsWUFBWSxpQ0FRcEIsZUFBZTtZQUNmLGFBQWE7WUFDYiwyQkFBMkI7WUFDM0Isc0JBQXNCO3dHQUdiLGNBQWMsWUFkZixZQUFZLEVBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRSxFQVFoRCxlQUFlOzsyRkFNTixjQUFjO2tCQWYxQixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBRW5ELFlBQVksRUFBRTt3QkFDWixhQUFhO3dCQUNiLDJCQUEyQjt3QkFDM0Isc0JBQXNCO3FCQUN2QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsZUFBZTt3QkFDZixhQUFhO3dCQUNiLDJCQUEyQjt3QkFDM0Isc0JBQXNCO3FCQUN2QjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTaGFyZWRNb2R1bGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2hhcmVkLm1vZHVsZSc7XG5pbXBvcnQgeyBUYWJsZVNlbGVjdENvbHVtbnNDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLXNlbGVjdC1jb2x1bW5zLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBY3Rpb25zQ29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi9hY3Rpb25zLWNvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtTaGFyZWRNb2R1bGUsIFRyYW5zbGF0ZU1vZHVsZS5mb3JDaGlsZCgpXSxcblxuICBkZWNsYXJhdGlvbnM6IFtcbiAgICAvLyBDb21wb25lbnRzXG4gICAgVGFibGVTZWxlY3RDb2x1bW5zQ29tcG9uZW50LFxuICAgIEFjdGlvbnNDb2x1bW5Db21wb25lbnQsXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgLy8gQ29tcG9uZW50c1xuICAgIFRhYmxlU2VsZWN0Q29sdW1uc0NvbXBvbmVudCxcbiAgICBBY3Rpb25zQ29sdW1uQ29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBUYWJsZU1vZHVsZSB7fVxuIl19
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3RhYmxlL3RhYmxlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUF1QnhFLE1BQU0sT0FBTyxjQUFjO3VHQUFkLGNBQWM7d0dBQWQsY0FBYztZQWpCdkIsYUFBYTtZQUNiLDJCQUEyQjtZQUMzQixzQkFBc0I7WUFDdEIsUUFBUTtZQUNSLGlCQUFpQjtZQUNqQixvQkFBb0IsYUFSWixZQUFZLGlDQVdwQixlQUFlO1lBQ2YsYUFBYTtZQUNiLDJCQUEyQjtZQUMzQixzQkFBc0I7WUFDdEIsUUFBUTtZQUNSLGlCQUFpQjtZQUNqQixvQkFBb0I7d0dBR1gsY0FBYyxZQXBCZixZQUFZLEVBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRSxFQVdoRCxlQUFlOzsyRkFTTixjQUFjO2tCQXJCMUIsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUVuRCxZQUFZLEVBQUU7d0JBQ1osYUFBYTt3QkFDYiwyQkFBMkI7d0JBQzNCLHNCQUFzQjt3QkFDdEIsUUFBUTt3QkFDUixpQkFBaUI7d0JBQ2pCLG9CQUFvQjtxQkFDckI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYiwyQkFBMkI7d0JBQzNCLHNCQUFzQjt3QkFDdEIsUUFBUTt3QkFDUixpQkFBaUI7d0JBQ2pCLG9CQUFvQjtxQkFDckI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2hhcmVkTW9kdWxlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NoYXJlZC5tb2R1bGUnO1xuaW1wb3J0IHsgVGFibGVTZWxlY3RDb2x1bW5zQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS1zZWxlY3QtY29sdW1ucy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWN0aW9uc0NvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4vYWN0aW9ucy1jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgSXNBbGxTZWxlY3RlZFBpcGUsIElzTm90QWxsU2VsZWN0ZWRQaXBlIH0gZnJvbSAnLi90YWJsZS5waXBlcyc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtTaGFyZWRNb2R1bGUsIFRyYW5zbGF0ZU1vZHVsZS5mb3JDaGlsZCgpXSxcblxuICBkZWNsYXJhdGlvbnM6IFtcbiAgICAvLyBDb21wb25lbnRzXG4gICAgVGFibGVTZWxlY3RDb2x1bW5zQ29tcG9uZW50LFxuICAgIEFjdGlvbnNDb2x1bW5Db21wb25lbnQsXG4gICAgLy8gUGlwZXNcbiAgICBJc0FsbFNlbGVjdGVkUGlwZSxcbiAgICBJc05vdEFsbFNlbGVjdGVkUGlwZSxcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICAvLyBDb21wb25lbnRzXG4gICAgVGFibGVTZWxlY3RDb2x1bW5zQ29tcG9uZW50LFxuICAgIEFjdGlvbnNDb2x1bW5Db21wb25lbnQsXG4gICAgLy8gUGlwZXNcbiAgICBJc0FsbFNlbGVjdGVkUGlwZSxcbiAgICBJc05vdEFsbFNlbGVjdGVkUGlwZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQXBwVGFibGVNb2R1bGUge31cbiJdfQ==
@@ -0,0 +1,74 @@
1
+ import { Directive, Pipe } from '@angular/core';
2
+ import { AbstractSelectionModelPipe } from '../../shared/pipes/selection.pipes';
3
+ import { AppTable } from './table.class';
4
+ import * as i0 from "@angular/core";
5
+ export class AbstractTableSelectionPipe extends AbstractSelectionModelPipe {
6
+ _onRowsChanges;
7
+ constructor(_ref) {
8
+ super(_ref);
9
+ }
10
+ transform(selectionOrTable, tableOrOpts, opts) {
11
+ // @ts-ignore
12
+ const _table = tableOrOpts instanceof (AppTable) ? tableOrOpts : selectionOrTable instanceof (AppTable) ? selectionOrTable : undefined;
13
+ // @ts-ignore
14
+ const _selection = _table?.selection || selectionOrTable;
15
+ // @ts-ignore
16
+ const _opts = opts || !(tableOrOpts instanceof (AppTable) && tableOrOpts);
17
+ return super.transform(_selection, _table, _opts);
18
+ }
19
+ _subscribe(selection, table, opts) {
20
+ this._onRowsChanges = table?.dataSource?.rowsSubject.subscribe((_) => {
21
+ const result = this._transform(selection, table, opts);
22
+ if (result !== this._result) {
23
+ this._result = result;
24
+ this._ref.markForCheck();
25
+ }
26
+ });
27
+ return super._subscribe(selection, table);
28
+ }
29
+ _dispose() {
30
+ super._dispose();
31
+ this._onRowsChanges?.unsubscribe();
32
+ this._onRowsChanges = null;
33
+ }
34
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: AbstractTableSelectionPipe, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
35
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.4", type: AbstractTableSelectionPipe, usesInheritance: true, ngImport: i0 });
36
+ }
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: AbstractTableSelectionPipe, decorators: [{
38
+ type: Directive
39
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }] });
40
+ export class IsAllSelectedPipe extends AbstractTableSelectionPipe {
41
+ constructor(_ref) {
42
+ super(_ref);
43
+ }
44
+ _transform(selection, table, countPropertyName = 'visibleRowCount') {
45
+ return selection.selected.length === table?.[countPropertyName];
46
+ }
47
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IsAllSelectedPipe, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Pipe });
48
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.2.4", ngImport: i0, type: IsAllSelectedPipe, name: "isAllSelected", pure: false });
49
+ }
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IsAllSelectedPipe, decorators: [{
51
+ type: Pipe,
52
+ args: [{
53
+ name: 'isAllSelected',
54
+ pure: false,
55
+ }]
56
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }] });
57
+ export class IsNotAllSelectedPipe extends IsAllSelectedPipe {
58
+ constructor(_ref) {
59
+ super(_ref);
60
+ }
61
+ _transform(selection, table, countPropertyName = 'visibleRowCount') {
62
+ return selection.hasValue() && selection.selected.length !== table?.[countPropertyName];
63
+ }
64
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IsNotAllSelectedPipe, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Pipe });
65
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.2.4", ngImport: i0, type: IsNotAllSelectedPipe, name: "isNotAllSelected", pure: false });
66
+ }
67
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IsNotAllSelectedPipe, decorators: [{
68
+ type: Pipe,
69
+ args: [{
70
+ name: 'isNotAllSelected',
71
+ pure: false,
72
+ }]
73
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }] });
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUucGlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvdGFibGUvdGFibGUucGlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5FLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTXpDLE1BQU0sT0FBZ0IsMEJBQTBFLFNBQVEsMEJBQXFDO0lBQ25JLGNBQWMsQ0FBZTtJQUVyQyxZQUFzQixJQUF1QjtRQUMzQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDZCxDQUFDO0lBRUQsU0FBUyxDQUFDLGdCQUF5QyxFQUFFLFdBQW1CLEVBQUUsSUFBUTtRQUNoRixhQUFhO1FBQ2IsTUFBTSxNQUFNLEdBQU0sV0FBVyxhQUFZLFFBQWEsQ0FBQSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixhQUFZLFFBQWEsQ0FBQSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2hKLGFBQWE7UUFDYixNQUFNLFVBQVUsR0FBd0IsTUFBTSxFQUFFLFNBQVMsSUFBSSxnQkFBZ0IsQ0FBQztRQUM5RSxhQUFhO1FBQ2IsTUFBTSxLQUFLLEdBQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxXQUFXLGFBQVksUUFBYSxDQUFBLElBQUssV0FBaUIsQ0FBQyxDQUFDO1FBQ3ZGLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFUyxVQUFVLENBQUMsU0FBOEIsRUFBRSxLQUFTLEVBQUUsSUFBUTtRQUN0RSxJQUFJLENBQUMsY0FBYyxHQUFJLEtBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzFFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN2RCxJQUFJLE1BQU0sS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO2dCQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzNCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVTLFFBQVE7UUFDaEIsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxjQUFjLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFDN0IsQ0FBQzt1R0FqQ21CLDBCQUEwQjsyRkFBMUIsMEJBQTBCOzsyRkFBMUIsMEJBQTBCO2tCQUQvQyxTQUFTOztBQXlDVixNQUFNLE9BQU8saUJBQWtCLFNBQVEsMEJBQTZEO0lBQ2xHLFlBQVksSUFBdUI7UUFDakMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2QsQ0FBQztJQUVTLFVBQVUsQ0FDbEIsU0FBOEIsRUFDOUIsS0FBb0IsRUFDcEIsb0JBQThDLGlCQUFpQjtRQUUvRCxPQUFPLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLEtBQUssRUFBRSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDbEUsQ0FBQzt1R0FYVSxpQkFBaUI7cUdBQWpCLGlCQUFpQjs7MkZBQWpCLGlCQUFpQjtrQkFKN0IsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsZUFBZTtvQkFDckIsSUFBSSxFQUFFLEtBQUs7aUJBQ1o7O0FBbUJELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxpQkFBaUI7SUFDekQsWUFBWSxJQUF1QjtRQUNqQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDZCxDQUFDO0lBRVMsVUFBVSxDQUNsQixTQUE4QixFQUM5QixLQUFvQixFQUNwQixvQkFBOEMsaUJBQWlCO1FBRS9ELE9BQU8sU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLEtBQUssRUFBRSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDMUYsQ0FBQzt1R0FYVSxvQkFBb0I7cUdBQXBCLG9CQUFvQjs7MkZBQXBCLG9CQUFvQjtrQkFKaEMsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsa0JBQWtCO29CQUN4QixJQUFJLEVBQUUsS0FBSztpQkFDWiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBEaXJlY3RpdmUsIFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IEFic3RyYWN0U2VsZWN0aW9uTW9kZWxQaXBlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3BpcGVzL3NlbGVjdGlvbi5waXBlcyc7XG5pbXBvcnQgeyBBcHBUYWJsZSB9IGZyb20gJy4vdGFibGUuY2xhc3MnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCB0eXBlIEFwcFRhYmxlUm93Q291bnRQcm9wZXJ0eSA9ICd2aXNpYmxlUm93Q291bnQnIHwgJ3RvdGFsUm93Q291bnQnO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFRhYmxlU2VsZWN0aW9uUGlwZTxSLCBPLCBUIGV4dGVuZHMgQXBwVGFibGU8YW55PiA9IEFwcFRhYmxlPGFueT4+IGV4dGVuZHMgQWJzdHJhY3RTZWxlY3Rpb25Nb2RlbFBpcGU8YW55LCBSLCBPPiB7XG4gIHByaXZhdGUgX29uUm93c0NoYW5nZXM6IFN1YnNjcmlwdGlvbjtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoX3JlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICBzdXBlcihfcmVmKTtcbiAgfVxuXG4gIHRyYW5zZm9ybShzZWxlY3Rpb25PclRhYmxlOiBTZWxlY3Rpb25Nb2RlbDxhbnk+IHwgVCwgdGFibGVPck9wdHM/OiBUIHwgTywgb3B0cz86IE8pOiBSIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgX3RhYmxlOiBUID0gdGFibGVPck9wdHMgaW5zdGFuY2VvZiBBcHBUYWJsZTxhbnk+ID8gdGFibGVPck9wdHMgOiBzZWxlY3Rpb25PclRhYmxlIGluc3RhbmNlb2YgQXBwVGFibGU8YW55PiA/IHNlbGVjdGlvbk9yVGFibGUgOiB1bmRlZmluZWQ7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IF9zZWxlY3Rpb246IFNlbGVjdGlvbk1vZGVsPGFueT4gPSBfdGFibGU/LnNlbGVjdGlvbiB8fCBzZWxlY3Rpb25PclRhYmxlO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBfb3B0czogTyA9IG9wdHMgfHwgISh0YWJsZU9yT3B0cyBpbnN0YW5jZW9mIEFwcFRhYmxlPGFueT4gJiYgKHRhYmxlT3JPcHRzIGFzIE8pKTtcbiAgICByZXR1cm4gc3VwZXIudHJhbnNmb3JtKF9zZWxlY3Rpb24sIF90YWJsZSwgX29wdHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9zdWJzY3JpYmUoc2VsZWN0aW9uOiBTZWxlY3Rpb25Nb2RlbDxhbnk+LCB0YWJsZT86IFQsIG9wdHM/OiBPKTogU3Vic2NyaXB0aW9uIHtcbiAgICB0aGlzLl9vblJvd3NDaGFuZ2VzID0gKHRhYmxlIGFzIFQpPy5kYXRhU291cmNlPy5yb3dzU3ViamVjdC5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX3RyYW5zZm9ybShzZWxlY3Rpb24sIHRhYmxlLCBvcHRzKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRoaXMuX3Jlc3VsdCkge1xuICAgICAgICB0aGlzLl9yZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgIHRoaXMuX3JlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzdXBlci5fc3Vic2NyaWJlKHNlbGVjdGlvbiwgdGFibGUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9kaXNwb3NlKCkge1xuICAgIHN1cGVyLl9kaXNwb3NlKCk7XG4gICAgdGhpcy5fb25Sb3dzQ2hhbmdlcz8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9vblJvd3NDaGFuZ2VzID0gbnVsbDtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdpc0FsbFNlbGVjdGVkJyxcbiAgcHVyZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIElzQWxsU2VsZWN0ZWRQaXBlIGV4dGVuZHMgQWJzdHJhY3RUYWJsZVNlbGVjdGlvblBpcGU8Ym9vbGVhbiwgQXBwVGFibGVSb3dDb3VudFByb3BlcnR5PiB7XG4gIGNvbnN0cnVjdG9yKF9yZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgc3VwZXIoX3JlZik7XG4gIH1cblxuICBwcm90ZWN0ZWQgX3RyYW5zZm9ybShcbiAgICBzZWxlY3Rpb246IFNlbGVjdGlvbk1vZGVsPGFueT4sXG4gICAgdGFibGU6IEFwcFRhYmxlPGFueT4sXG4gICAgY291bnRQcm9wZXJ0eU5hbWU6IEFwcFRhYmxlUm93Q291bnRQcm9wZXJ0eSA9ICd2aXNpYmxlUm93Q291bnQnXG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoID09PSB0YWJsZT8uW2NvdW50UHJvcGVydHlOYW1lXTtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdpc05vdEFsbFNlbGVjdGVkJyxcbiAgcHVyZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIElzTm90QWxsU2VsZWN0ZWRQaXBlIGV4dGVuZHMgSXNBbGxTZWxlY3RlZFBpcGUge1xuICBjb25zdHJ1Y3RvcihfcmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKF9yZWYpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF90cmFuc2Zvcm0oXG4gICAgc2VsZWN0aW9uOiBTZWxlY3Rpb25Nb2RlbDxhbnk+LFxuICAgIHRhYmxlOiBBcHBUYWJsZTxhbnk+LFxuICAgIGNvdW50UHJvcGVydHlOYW1lOiBBcHBUYWJsZVJvd0NvdW50UHJvcGVydHkgPSAndmlzaWJsZVJvd0NvdW50J1xuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gc2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aCAhPT0gdGFibGU/Lltjb3VudFByb3BlcnR5TmFtZV07XG4gIH1cbn1cbiJdfQ==