ms-data-grid 0.0.65 → 0.0.68

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.
@@ -9,20 +9,21 @@ import { ScrollingModule } from '@angular/cdk/scrolling';
9
9
  import { CellHostDirective } from './directives/cellHost.directive';
10
10
  import { CellRenderInitDirective } from './directives/cell-render-init.directive';
11
11
  import { FormatCurrencyPipe } from './pipes/format-currency.pipe';
12
+ import { CellEditorDirective } from './directives/cell-editor.directive';
12
13
  import * as i0 from "@angular/core";
13
14
  import * as i1 from "ng-inline-svg";
14
15
  export class DataGridModule {
15
16
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataGridModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
16
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: DataGridModule, declarations: [DataGridComponent, FilterPipe, CellHostDirective, CellRenderInitDirective, FormatCurrencyPipe], imports: [CommonModule, FormsModule, DragDropModule, i1.InlineSVGModule, ScrollingModule], exports: [DataGridComponent] }); }
17
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: DataGridModule, declarations: [DataGridComponent, FilterPipe, CellHostDirective, CellRenderInitDirective, CellEditorDirective, FormatCurrencyPipe], imports: [CommonModule, FormsModule, DragDropModule, i1.InlineSVGModule, ScrollingModule], exports: [DataGridComponent] }); }
17
18
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataGridModule, providers: [FormatCurrencyPipe, DatePipe], imports: [CommonModule, FormsModule, DragDropModule, InlineSVGModule.forRoot(), ScrollingModule] }); }
18
19
  }
19
20
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataGridModule, decorators: [{
20
21
  type: NgModule,
21
22
  args: [{
22
- declarations: [DataGridComponent, FilterPipe, CellHostDirective, CellRenderInitDirective, FormatCurrencyPipe],
23
+ declarations: [DataGridComponent, FilterPipe, CellHostDirective, CellRenderInitDirective, CellEditorDirective, FormatCurrencyPipe],
23
24
  imports: [CommonModule, FormsModule, DragDropModule, InlineSVGModule.forRoot(), ScrollingModule],
24
25
  exports: [DataGridComponent],
25
26
  providers: [FormatCurrencyPipe, DatePipe],
26
27
  }]
27
28
  }] });
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEtZ3JpZC9zcmMvbGliL2RhdGEtZ3JpZC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7QUFTbEUsTUFBTSxPQUFPLGNBQWM7K0dBQWQsY0FBYztnSEFBZCxjQUFjLGlCQUxWLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSxrQkFBa0IsYUFDbEcsWUFBWSxFQUFFLFdBQVcsRUFBRSxjQUFjLHNCQUE2QixlQUFlLGFBQ3JGLGlCQUFpQjtnSEFHaEIsY0FBYyxhQUZkLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLFlBRi9CLFlBQVksRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGVBQWUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxlQUFlOzs0RkFJcEYsY0FBYztrQkFOMUIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsa0JBQWtCLENBQUM7b0JBQzdHLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGVBQWUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxlQUFlLENBQUM7b0JBQ2hHLE9BQU8sRUFBRSxDQUFDLGlCQUFpQixDQUFDO29CQUM1QixTQUFTLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUM7aUJBQzFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGF0YUdyaWRDb21wb25lbnQgfSBmcm9tICcuL2RhdGEtZ3JpZC9kYXRhLWdyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGaWx0ZXJQaXBlIH0gZnJvbSAnLi9waXBlcy9maWx0ZXIucGlwZSc7XHJcbmltcG9ydCB7IERyYWdEcm9wTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7IElubGluZVNWR01vZHVsZSB9IGZyb20gJ25nLWlubGluZS1zdmcnO1xyXG5pbXBvcnQgeyBCcm93c2VyQW5pbWF0aW9uc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IFNjcm9sbGluZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnOyBcclxuaW1wb3J0IHsgQ2VsbEhvc3REaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvY2VsbEhvc3QuZGlyZWN0aXZlJzsgXHJcbmltcG9ydCB7IENlbGxSZW5kZXJJbml0RGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2NlbGwtcmVuZGVyLWluaXQuZGlyZWN0aXZlJzsgXHJcbmltcG9ydCB7IEZvcm1hdEN1cnJlbmN5UGlwZSB9IGZyb20gJy4vcGlwZXMvZm9ybWF0LWN1cnJlbmN5LnBpcGUnO1xyXG5cclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbRGF0YUdyaWRDb21wb25lbnQsIEZpbHRlclBpcGUsIENlbGxIb3N0RGlyZWN0aXZlLCBDZWxsUmVuZGVySW5pdERpcmVjdGl2ZSwgRm9ybWF0Q3VycmVuY3lQaXBlXSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgRHJhZ0Ryb3BNb2R1bGUsIElubGluZVNWR01vZHVsZS5mb3JSb290KCksIFNjcm9sbGluZ01vZHVsZV0sXHJcbiAgZXhwb3J0czogW0RhdGFHcmlkQ29tcG9uZW50XSxcclxuICBwcm92aWRlcnM6IFtGb3JtYXRDdXJyZW5jeVBpcGUsIERhdGVQaXBlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGFHcmlkTW9kdWxlIHt9XHJcbiJdfQ==
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEtZ3JpZC9zcmMvbGliL2RhdGEtZ3JpZC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7QUFTekUsTUFBTSxPQUFPLGNBQWM7K0dBQWQsY0FBYztnSEFBZCxjQUFjLGlCQUxWLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsYUFDdkgsWUFBWSxFQUFFLFdBQVcsRUFBRSxjQUFjLHNCQUE2QixlQUFlLGFBQ3ZGLGlCQUFpQjtnSEFHZCxjQUFjLGFBRmQsQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsWUFGL0IsWUFBWSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsZUFBZSxDQUFDLE9BQU8sRUFBRSxFQUFFLGVBQWU7OzRGQUlwRixjQUFjO2tCQU4xQixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsQ0FBRztvQkFDcEksT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsZUFBZSxDQUFDLE9BQU8sRUFBRSxFQUFFLGVBQWUsQ0FBQztvQkFDbEcsT0FBTyxFQUFFLENBQUMsaUJBQWlCLENBQUM7b0JBQzFCLFNBQVMsRUFBRSxDQUFDLGtCQUFrQixFQUFFLFFBQVEsQ0FBQztpQkFDMUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEYXRhR3JpZENvbXBvbmVudCB9IGZyb20gJy4vZGF0YS1ncmlkL2RhdGEtZ3JpZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEZpbHRlclBpcGUgfSBmcm9tICcuL3BpcGVzL2ZpbHRlci5waXBlJztcclxuaW1wb3J0IHsgRHJhZ0Ryb3BNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcclxuaW1wb3J0IHsgSW5saW5lU1ZHTW9kdWxlIH0gZnJvbSAnbmctaW5saW5lLXN2Zyc7XHJcbmltcG9ydCB7IEJyb3dzZXJBbmltYXRpb25zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlci9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgU2Nyb2xsaW5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7IFxyXG5pbXBvcnQgeyBDZWxsSG9zdERpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9jZWxsSG9zdC5kaXJlY3RpdmUnOyBcclxuaW1wb3J0IHsgQ2VsbFJlbmRlckluaXREaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvY2VsbC1yZW5kZXItaW5pdC5kaXJlY3RpdmUnOyBcclxuaW1wb3J0IHsgRm9ybWF0Q3VycmVuY3lQaXBlIH0gZnJvbSAnLi9waXBlcy9mb3JtYXQtY3VycmVuY3kucGlwZSc7XHJcbmltcG9ydCB7IENlbGxFZGl0b3JEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvY2VsbC1lZGl0b3IuZGlyZWN0aXZlJztcclxuXHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGRlY2xhcmF0aW9uczogW0RhdGFHcmlkQ29tcG9uZW50LCBGaWx0ZXJQaXBlLCBDZWxsSG9zdERpcmVjdGl2ZSwgQ2VsbFJlbmRlckluaXREaXJlY3RpdmUsIENlbGxFZGl0b3JEaXJlY3RpdmUsIEZvcm1hdEN1cnJlbmN5UGlwZSAgXSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgRHJhZ0Ryb3BNb2R1bGUsIElubGluZVNWR01vZHVsZS5mb3JSb290KCksIFNjcm9sbGluZ01vZHVsZV0sXHJcbmV4cG9ydHM6IFtEYXRhR3JpZENvbXBvbmVudF0sXHJcbiAgcHJvdmlkZXJzOiBbRm9ybWF0Q3VycmVuY3lQaXBlLCBEYXRlUGlwZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRhR3JpZE1vZHVsZSB7fVxyXG4iXX0=
@@ -0,0 +1,75 @@
1
+ import { Directive, Input, Injector, EventEmitter, Output } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class CellEditorDirective {
4
+ constructor(vcr, injector) {
5
+ this.vcr = vcr;
6
+ this.injector = injector;
7
+ // Parent component listens using:
8
+ // (editorEvent)="finishEdit($event)"
9
+ this.editorEvent = new EventEmitter();
10
+ }
11
+ ngOnInit() {
12
+ if (!this.componentType)
13
+ return;
14
+ // ✅ Dynamically create the editor component
15
+ const componentRef = this.vcr.createComponent(this.componentType, {
16
+ injector: Injector.create({
17
+ providers: [
18
+ { provide: 'rowData', useValue: this.rowData },
19
+ { provide: 'colData', useValue: this.colData },
20
+ { provide: 'cellValue', useValue: this.cellValue }
21
+ ],
22
+ parent: this.injector
23
+ })
24
+ });
25
+ // -----------------------------------------------
26
+ // 1️⃣ Call custom lifecycle hook if it exists
27
+ // -----------------------------------------------
28
+ if (typeof componentRef.instance.editorInit === 'function') {
29
+ componentRef.instance.editorInit({
30
+ row: this.rowData,
31
+ col: this.colData,
32
+ value: this.cellValue
33
+ });
34
+ }
35
+ // -----------------------------------------------
36
+ // 2️⃣ Auto-detect all @Output() EventEmitters
37
+ // -----------------------------------------------
38
+ for (const key of Object.keys(componentRef.instance)) {
39
+ const property = componentRef.instance[key];
40
+ // Check if any property is an EventEmitter
41
+ if (property instanceof EventEmitter) {
42
+ property.subscribe((value) => {
43
+ this.editorEvent.emit({
44
+ eventName: key,
45
+ data: {
46
+ row: this.rowData,
47
+ col: this.colData,
48
+ value
49
+ }
50
+ });
51
+ });
52
+ }
53
+ }
54
+ }
55
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CellEditorDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive }); }
56
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: CellEditorDirective, selector: "[cellEditor]", inputs: { componentType: ["cellEditor", "componentType"], rowData: "rowData", colData: "colData", cellValue: "cellValue" }, outputs: { editorEvent: "editorEvent" }, ngImport: i0 }); }
57
+ }
58
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CellEditorDirective, decorators: [{
59
+ type: Directive,
60
+ args: [{
61
+ selector: '[cellEditor]'
62
+ }]
63
+ }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.Injector }]; }, propDecorators: { componentType: [{
64
+ type: Input,
65
+ args: ['cellEditor']
66
+ }], rowData: [{
67
+ type: Input
68
+ }], colData: [{
69
+ type: Input
70
+ }], cellValue: [{
71
+ type: Input
72
+ }], editorEvent: [{
73
+ type: Output
74
+ }] } });
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1lZGl0b3IuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1ncmlkL3NyYy9saWIvZGlyZWN0aXZlcy9jZWxsLWVkaXRvci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBR0wsUUFBUSxFQUdSLFlBQVksRUFDWixNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7O0FBS3ZCLE1BQU0sT0FBTyxtQkFBbUI7SUFpQjlCLFlBQ1UsR0FBcUIsRUFDckIsUUFBa0I7UUFEbEIsUUFBRyxHQUFILEdBQUcsQ0FBa0I7UUFDckIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQVQ1QixrQ0FBa0M7UUFDbEMscUNBQXFDO1FBQzNCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBR3BDLENBQUM7SUFLRixDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU87UUFFaEMsNENBQTRDO1FBQzVDLE1BQU0sWUFBWSxHQUFzQixJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FDOUQsSUFBSSxDQUFDLGFBQWEsRUFDbEI7WUFDRSxRQUFRLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQztnQkFDeEIsU0FBUyxFQUFFO29CQUNULEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRTtvQkFDOUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUM5QyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUU7aUJBQ25EO2dCQUNELE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUTthQUN0QixDQUFDO1NBQ0gsQ0FDRixDQUFDO1FBRUYsa0RBQWtEO1FBQ2xELDhDQUE4QztRQUM5QyxrREFBa0Q7UUFDbEQsSUFBSSxPQUFPLFlBQVksQ0FBQyxRQUFRLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBRTtZQUMxRCxZQUFZLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztnQkFDL0IsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNqQixHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ2pCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUzthQUN0QixDQUFDLENBQUM7U0FDSjtRQUVELGtEQUFrRDtRQUNsRCw4Q0FBOEM7UUFDOUMsa0RBQWtEO1FBQ2xELEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDcEQsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUU1QywyQ0FBMkM7WUFDM0MsSUFBSSxRQUFRLFlBQVksWUFBWSxFQUFFO2dCQUNwQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7b0JBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO3dCQUNwQixTQUFTLEVBQUUsR0FBRzt3QkFDZCxJQUFJLEVBQUU7NEJBQ0osR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPOzRCQUNqQixHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU87NEJBQ2pCLEtBQUs7eUJBQ047cUJBQ0YsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtJQUNILENBQUM7K0dBdkVVLG1CQUFtQjttR0FBbkIsbUJBQW1COzs0RkFBbkIsbUJBQW1CO2tCQUgvQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxjQUFjO2lCQUN6Qjs4SEFJc0IsYUFBYTtzQkFBakMsS0FBSzt1QkFBQyxZQUFZO2dCQUdWLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFJSSxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBEaXJlY3RpdmUsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbiAgSW5qZWN0b3IsXHJcbiAgQ29tcG9uZW50UmVmLFxyXG4gIFR5cGUsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE91dHB1dFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbY2VsbEVkaXRvcl0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDZWxsRWRpdG9yRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgLy8gQ29tcG9uZW50IHR5cGVcclxuICBASW5wdXQoJ2NlbGxFZGl0b3InKSBjb21wb25lbnRUeXBlITogVHlwZTxhbnk+O1xyXG5cclxuICAvLyBJbnB1dHMgcGFzc2VkIHRvIHRoZSBlZGl0b3IgY29tcG9uZW50XHJcbiAgQElucHV0KCkgcm93RGF0YTogYW55O1xyXG4gIEBJbnB1dCgpIGNvbERhdGE6IGFueTtcclxuICBASW5wdXQoKSBjZWxsVmFsdWU6IGFueTtcclxuXHJcbiAgLy8gUGFyZW50IGNvbXBvbmVudCBsaXN0ZW5zIHVzaW5nOlxyXG4gIC8vIChlZGl0b3JFdmVudCk9XCJmaW5pc2hFZGl0KCRldmVudClcIlxyXG4gIEBPdXRwdXQoKSBlZGl0b3JFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgZXZlbnROYW1lOiBzdHJpbmc7XHJcbiAgICBkYXRhOiBhbnk7XHJcbiAgfT4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHZjcjogVmlld0NvbnRhaW5lclJlZixcclxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5jb21wb25lbnRUeXBlKSByZXR1cm47XHJcblxyXG4gICAgLy8g4pyFIER5bmFtaWNhbGx5IGNyZWF0ZSB0aGUgZWRpdG9yIGNvbXBvbmVudFxyXG4gICAgY29uc3QgY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8YW55PiA9IHRoaXMudmNyLmNyZWF0ZUNvbXBvbmVudChcclxuICAgICAgdGhpcy5jb21wb25lbnRUeXBlLFxyXG4gICAgICB7XHJcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLmNyZWF0ZSh7XHJcbiAgICAgICAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICAgICAgeyBwcm92aWRlOiAncm93RGF0YScsIHVzZVZhbHVlOiB0aGlzLnJvd0RhdGEgfSxcclxuICAgICAgICAgICAgeyBwcm92aWRlOiAnY29sRGF0YScsIHVzZVZhbHVlOiB0aGlzLmNvbERhdGEgfSxcclxuICAgICAgICAgICAgeyBwcm92aWRlOiAnY2VsbFZhbHVlJywgdXNlVmFsdWU6IHRoaXMuY2VsbFZhbHVlIH1cclxuICAgICAgICAgIF0sXHJcbiAgICAgICAgICBwYXJlbnQ6IHRoaXMuaW5qZWN0b3JcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAx77iP4oOjIENhbGwgY3VzdG9tIGxpZmVjeWNsZSBob29rIGlmIGl0IGV4aXN0c1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGlmICh0eXBlb2YgY29tcG9uZW50UmVmLmluc3RhbmNlLmVkaXRvckluaXQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmVkaXRvckluaXQoe1xyXG4gICAgICAgIHJvdzogdGhpcy5yb3dEYXRhLFxyXG4gICAgICAgIGNvbDogdGhpcy5jb2xEYXRhLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLmNlbGxWYWx1ZVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gMu+4j+KDoyBBdXRvLWRldGVjdCBhbGwgQE91dHB1dCgpIEV2ZW50RW1pdHRlcnNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjb21wb25lbnRSZWYuaW5zdGFuY2UpKSB7XHJcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gY29tcG9uZW50UmVmLmluc3RhbmNlW2tleV07XHJcblxyXG4gICAgICAvLyBDaGVjayBpZiBhbnkgcHJvcGVydHkgaXMgYW4gRXZlbnRFbWl0dGVyXHJcbiAgICAgIGlmIChwcm9wZXJ0eSBpbnN0YW5jZW9mIEV2ZW50RW1pdHRlcikge1xyXG4gICAgICAgIHByb3BlcnR5LnN1YnNjcmliZSgodmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5lZGl0b3JFdmVudC5lbWl0KHtcclxuICAgICAgICAgICAgZXZlbnROYW1lOiBrZXksXHJcbiAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICByb3c6IHRoaXMucm93RGF0YSxcclxuICAgICAgICAgICAgICBjb2w6IHRoaXMuY29sRGF0YSxcclxuICAgICAgICAgICAgICB2YWx1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=