@acorex/layout 16.18.50 → 16.19.2

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.
@@ -1,118 +0,0 @@
1
- import { NO_ERRORS_SCHEMA, NgModule } from '@angular/core';
2
- import { AXWidgetBoardComponent } from './widget-board.component';
3
- import { CommonModule } from '@angular/common';
4
- import { AXWidgetHostComponent } from './widget-host.component';
5
- import { AXSearchBoxModule, AXLoadingModule, AXProppertyEditorModule, AXPageModule, AXLabelModule, AXToolbarModule, AXTabStripModule, AXMenuModule, AXFormGroupModule, AXTextAreaModule, AXTextBoxModule, AXFieldsetModule, AXCheckBoxModule, AXValidationModule, } from '@acorex/components';
6
- import { RouterModule } from '@angular/router';
7
- import { AXWidgetConfigComponent } from './widget-config.component';
8
- import { AXTranslator, AXTranslatorModule } from '@acorex/core';
9
- import { AXWidgetSizePropertyEditorComponent } from './editors/widget-size-editor/widget-size.editor';
10
- import { AXWidgetSaveComponent } from './widget-save.component';
11
- import * as i0 from "@angular/core";
12
- import * as i1 from "@angular/router";
13
- export class AXWidgetBoardModule {
14
- /**
15
- *
16
- */
17
- constructor() {
18
- AXTranslator.load('en', {
19
- 'widget-board': {
20
- 'configurable-props': 'Configurable Properties',
21
- configure: 'Configure Widget',
22
- },
23
- });
24
- AXTranslator.load('fa', {
25
- 'widget-board': {
26
- 'configurable-props': 'ویژگی های قابل تنظیم',
27
- configure: 'پیکر بندی ابزارک',
28
- },
29
- });
30
- }
31
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: AXWidgetBoardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
32
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.7", ngImport: i0, type: AXWidgetBoardModule, declarations: [AXWidgetBoardComponent,
33
- AXWidgetHostComponent,
34
- AXWidgetConfigComponent,
35
- AXWidgetSaveComponent], imports: [CommonModule,
36
- AXSearchBoxModule,
37
- AXLoadingModule,
38
- RouterModule,
39
- AXProppertyEditorModule,
40
- AXPageModule,
41
- AXToolbarModule,
42
- AXTranslatorModule,
43
- AXLabelModule,
44
- AXTextAreaModule,
45
- AXFieldsetModule,
46
- AXTextBoxModule,
47
- AXFormGroupModule,
48
- AXTabStripModule,
49
- AXCheckBoxModule,
50
- AXMenuModule,
51
- AXTranslatorModule,
52
- AXValidationModule, i1.RouterModule], exports: [AXWidgetBoardComponent, AXProppertyEditorModule] });
53
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: AXWidgetBoardModule, imports: [CommonModule,
54
- AXSearchBoxModule,
55
- AXLoadingModule,
56
- RouterModule,
57
- AXProppertyEditorModule,
58
- AXPageModule,
59
- AXToolbarModule,
60
- AXTranslatorModule,
61
- AXLabelModule,
62
- AXTextAreaModule,
63
- AXFieldsetModule,
64
- AXTextBoxModule,
65
- AXFormGroupModule,
66
- AXTabStripModule,
67
- AXCheckBoxModule,
68
- AXMenuModule,
69
- AXTranslatorModule,
70
- AXValidationModule,
71
- RouterModule.forChild([
72
- {
73
- component: AXWidgetSizePropertyEditorComponent,
74
- path: 'ax/editors/widget-size',
75
- },
76
- ]), AXProppertyEditorModule] });
77
- }
78
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: AXWidgetBoardModule, decorators: [{
79
- type: NgModule,
80
- args: [{
81
- imports: [
82
- CommonModule,
83
- AXSearchBoxModule,
84
- AXLoadingModule,
85
- RouterModule,
86
- AXProppertyEditorModule,
87
- AXPageModule,
88
- AXToolbarModule,
89
- AXTranslatorModule,
90
- AXLabelModule,
91
- AXTextAreaModule,
92
- AXFieldsetModule,
93
- AXTextBoxModule,
94
- AXFormGroupModule,
95
- AXTabStripModule,
96
- AXCheckBoxModule,
97
- AXMenuModule,
98
- AXTranslatorModule,
99
- AXValidationModule,
100
- RouterModule.forChild([
101
- {
102
- component: AXWidgetSizePropertyEditorComponent,
103
- path: 'ax/editors/widget-size',
104
- },
105
- ]),
106
- ],
107
- exports: [AXWidgetBoardComponent, AXProppertyEditorModule],
108
- declarations: [
109
- AXWidgetBoardComponent,
110
- AXWidgetHostComponent,
111
- AXWidgetConfigComponent,
112
- AXWidgetSaveComponent,
113
- ],
114
- providers: [],
115
- schemas: [NO_ERRORS_SCHEMA],
116
- }]
117
- }], ctorParameters: () => [] });
118
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWJvYXJkLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbGF5b3V0L3NyYy9saWIvd2lkZ2V0LWJvYXJkL3dpZGdldC1ib2FyZC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLFlBQVksRUFDWixhQUFhLEVBQ2IsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixrQkFBa0IsR0FDbkIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUV0RyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7O0FBdUNoRSxNQUFNLE9BQU8sbUJBQW1CO0lBQzlCOztPQUVHO0lBQ0g7UUFDRSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUN0QixjQUFjLEVBQUU7Z0JBQ2Qsb0JBQW9CLEVBQUUseUJBQXlCO2dCQUMvQyxTQUFTLEVBQUUsa0JBQWtCO2FBQzlCO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDdEIsY0FBYyxFQUFFO2dCQUNkLG9CQUFvQixFQUFFLHNCQUFzQjtnQkFDNUMsU0FBUyxFQUFFLGtCQUFrQjthQUM5QjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7dUdBakJVLG1CQUFtQjt3R0FBbkIsbUJBQW1CLGlCQVI1QixzQkFBc0I7WUFDdEIscUJBQXFCO1lBQ3JCLHVCQUF1QjtZQUN2QixxQkFBcUIsYUE5QnJCLFlBQVk7WUFDWixpQkFBaUI7WUFDakIsZUFBZTtZQUNmLFlBQVk7WUFDWix1QkFBdUI7WUFDdkIsWUFBWTtZQUNaLGVBQWU7WUFDZixrQkFBa0I7WUFDbEIsYUFBYTtZQUNiLGdCQUFnQjtZQUNoQixnQkFBZ0I7WUFDaEIsZUFBZTtZQUNmLGlCQUFpQjtZQUNqQixnQkFBZ0I7WUFDaEIsZ0JBQWdCO1lBQ2hCLFlBQVk7WUFDWixrQkFBa0I7WUFDbEIsa0JBQWtCLDhCQVFWLHNCQUFzQixFQUFFLHVCQUF1Qjt3R0FVOUMsbUJBQW1CLFlBbkM1QixZQUFZO1lBQ1osaUJBQWlCO1lBQ2pCLGVBQWU7WUFDZixZQUFZO1lBQ1osdUJBQXVCO1lBQ3ZCLFlBQVk7WUFDWixlQUFlO1lBQ2Ysa0JBQWtCO1lBQ2xCLGFBQWE7WUFDYixnQkFBZ0I7WUFDaEIsZ0JBQWdCO1lBQ2hCLGVBQWU7WUFDZixpQkFBaUI7WUFDakIsZ0JBQWdCO1lBQ2hCLGdCQUFnQjtZQUNoQixZQUFZO1lBQ1osa0JBQWtCO1lBQ2xCLGtCQUFrQjtZQUNsQixZQUFZLENBQUMsUUFBUSxDQUFDO2dCQUNwQjtvQkFDRSxTQUFTLEVBQUUsbUNBQW1DO29CQUM5QyxJQUFJLEVBQUUsd0JBQXdCO2lCQUMvQjthQUNGLENBQUMsRUFFOEIsdUJBQXVCOzsyRkFVOUMsbUJBQW1CO2tCQXJDL0IsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixpQkFBaUI7d0JBQ2pCLGVBQWU7d0JBQ2YsWUFBWTt3QkFDWix1QkFBdUI7d0JBQ3ZCLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixrQkFBa0I7d0JBQ2xCLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2YsaUJBQWlCO3dCQUNqQixnQkFBZ0I7d0JBQ2hCLGdCQUFnQjt3QkFDaEIsWUFBWTt3QkFDWixrQkFBa0I7d0JBQ2xCLGtCQUFrQjt3QkFDbEIsWUFBWSxDQUFDLFFBQVEsQ0FBQzs0QkFDcEI7Z0NBQ0UsU0FBUyxFQUFFLG1DQUFtQztnQ0FDOUMsSUFBSSxFQUFFLHdCQUF3Qjs2QkFDL0I7eUJBQ0YsQ0FBQztxQkFDSDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSx1QkFBdUIsQ0FBQztvQkFDMUQsWUFBWSxFQUFFO3dCQUNaLHNCQUFzQjt3QkFDdEIscUJBQXFCO3dCQUNyQix1QkFBdUI7d0JBQ3ZCLHFCQUFxQjtxQkFDdEI7b0JBQ0QsU0FBUyxFQUFFLEVBQUU7b0JBQ2IsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7aUJBQzVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTk9fRVJST1JTX1NDSEVNQSwgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYV2lkZ2V0Qm9hcmRDb21wb25lbnQgfSBmcm9tICcuL3dpZGdldC1ib2FyZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFYV2lkZ2V0SG9zdENvbXBvbmVudCB9IGZyb20gJy4vd2lkZ2V0LWhvc3QuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIEFYU2VhcmNoQm94TW9kdWxlLFxuICBBWExvYWRpbmdNb2R1bGUsXG4gIEFYUHJvcHBlcnR5RWRpdG9yTW9kdWxlLFxuICBBWFBhZ2VNb2R1bGUsXG4gIEFYTGFiZWxNb2R1bGUsXG4gIEFYVG9vbGJhck1vZHVsZSxcbiAgQVhUYWJTdHJpcE1vZHVsZSxcbiAgQVhNZW51TW9kdWxlLFxuICBBWEZvcm1Hcm91cE1vZHVsZSxcbiAgQVhUZXh0QXJlYU1vZHVsZSxcbiAgQVhUZXh0Qm94TW9kdWxlLFxuICBBWEZpZWxkc2V0TW9kdWxlLFxuICBBWENoZWNrQm94TW9kdWxlLFxuICBBWFZhbGlkYXRpb25Nb2R1bGUsXG59IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQVhXaWRnZXRDb25maWdDb21wb25lbnQgfSBmcm9tICcuL3dpZGdldC1jb25maWcuY29tcG9uZW50JztcbmltcG9ydCB7IEFYVHJhbnNsYXRvciwgQVhUcmFuc2xhdG9yTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb3JlJztcbmltcG9ydCB7IEFYV2lkZ2V0U2l6ZVByb3BlcnR5RWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9lZGl0b3JzL3dpZGdldC1zaXplLWVkaXRvci93aWRnZXQtc2l6ZS5lZGl0b3InO1xuaW1wb3J0IHsgQVhXaWRnZXRTaXplUHJvcGVydHlFZGl0b3JNb2R1bGUgfSBmcm9tICcuL2VkaXRvcnMvd2lkZ2V0LXNpemUtZWRpdG9yL3dpZGdldC1zaXplLm1vZHVsZSc7XG5pbXBvcnQgeyBBWFdpZGdldFNhdmVDb21wb25lbnQgfSBmcm9tICcuL3dpZGdldC1zYXZlLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgQVhTZWFyY2hCb3hNb2R1bGUsXG4gICAgQVhMb2FkaW5nTW9kdWxlLFxuICAgIFJvdXRlck1vZHVsZSxcbiAgICBBWFByb3BwZXJ0eUVkaXRvck1vZHVsZSxcbiAgICBBWFBhZ2VNb2R1bGUsXG4gICAgQVhUb29sYmFyTW9kdWxlLFxuICAgIEFYVHJhbnNsYXRvck1vZHVsZSxcbiAgICBBWExhYmVsTW9kdWxlLFxuICAgIEFYVGV4dEFyZWFNb2R1bGUsXG4gICAgQVhGaWVsZHNldE1vZHVsZSxcbiAgICBBWFRleHRCb3hNb2R1bGUsXG4gICAgQVhGb3JtR3JvdXBNb2R1bGUsXG4gICAgQVhUYWJTdHJpcE1vZHVsZSxcbiAgICBBWENoZWNrQm94TW9kdWxlLFxuICAgIEFYTWVudU1vZHVsZSxcbiAgICBBWFRyYW5zbGF0b3JNb2R1bGUsXG4gICAgQVhWYWxpZGF0aW9uTW9kdWxlLFxuICAgIFJvdXRlck1vZHVsZS5mb3JDaGlsZChbXG4gICAgICB7XG4gICAgICAgIGNvbXBvbmVudDogQVhXaWRnZXRTaXplUHJvcGVydHlFZGl0b3JDb21wb25lbnQsXG4gICAgICAgIHBhdGg6ICdheC9lZGl0b3JzL3dpZGdldC1zaXplJyxcbiAgICAgIH0sXG4gICAgXSksXG4gIF0sXG4gIGV4cG9ydHM6IFtBWFdpZGdldEJvYXJkQ29tcG9uZW50LCBBWFByb3BwZXJ0eUVkaXRvck1vZHVsZV0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIEFYV2lkZ2V0Qm9hcmRDb21wb25lbnQsXG4gICAgQVhXaWRnZXRIb3N0Q29tcG9uZW50LFxuICAgIEFYV2lkZ2V0Q29uZmlnQ29tcG9uZW50LFxuICAgIEFYV2lkZ2V0U2F2ZUNvbXBvbmVudCxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXSxcbiAgc2NoZW1hczogW05PX0VSUk9SU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBBWFdpZGdldEJvYXJkTW9kdWxlIHtcbiAgLyoqXG4gICAqXG4gICAqL1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBBWFRyYW5zbGF0b3IubG9hZCgnZW4nLCB7XG4gICAgICAnd2lkZ2V0LWJvYXJkJzoge1xuICAgICAgICAnY29uZmlndXJhYmxlLXByb3BzJzogJ0NvbmZpZ3VyYWJsZSBQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29uZmlndXJlOiAnQ29uZmlndXJlIFdpZGdldCcsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIEFYVHJhbnNsYXRvci5sb2FkKCdmYScsIHtcbiAgICAgICd3aWRnZXQtYm9hcmQnOiB7XG4gICAgICAgICdjb25maWd1cmFibGUtcHJvcHMnOiAn2YjbjNqY2q/bjCDZh9in24wg2YLYp9io2YQg2KrZhti424zZhScsXG4gICAgICAgIGNvbmZpZ3VyZTogJ9m+24zaqdixINio2YbYr9uMINin2KjYstin2LHaqScsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -1,85 +0,0 @@
1
- import { Component, ViewEncapsulation, ChangeDetectionStrategy, ChangeDetectorRef, ViewChild } from '@angular/core';
2
- import { AXBasePopupPageComponent, AXValidationFormComponent } from '@acorex/components';
3
- import { AXTranslator } from '@acorex/core';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/common";
6
- import * as i2 from "@acorex/components";
7
- import * as i3 from "@acorex/core";
8
- export class AXWidgetConfigComponent extends AXBasePopupPageComponent {
9
- cdr;
10
- form;
11
- constructor(cdr) {
12
- super();
13
- this.cdr = cdr;
14
- }
15
- widget;
16
- props = [];
17
- displayProps = [];
18
- changes = [];
19
- context = {};
20
- getFooterButtons() {
21
- return [
22
- {
23
- name: 'okay',
24
- submitBehavior: true,
25
- text: AXTranslator.get('common.confirm'),
26
- style: 'success'
27
- },
28
- {
29
- name: 'cancel',
30
- cancelBehavior: true,
31
- text: AXTranslator.get('common.cancel'),
32
- style: 'danger blank'
33
- }
34
- ];
35
- }
36
- onFooterButtonClick(e) {
37
- if (e.name === 'cancel') {
38
- this.close();
39
- }
40
- if (e.name === 'okay') {
41
- this.form.validate().then(c => {
42
- if (c.result) {
43
- this.close(this.changes);
44
- }
45
- });
46
- }
47
- }
48
- handleValueChange(e) {
49
- const prop = this.changes.find(c => c.property.name === e.property.name);
50
- if (prop) {
51
- prop.value = e.value;
52
- }
53
- else {
54
- this.changes.push({ property: e.property, value: e.value });
55
- }
56
- this.updateContext();
57
- }
58
- ngOnInit() {
59
- this.displayProps = this.props.filter(c => c.property.visible !== false).sort((a, b) => a.property.order - b.property.order);
60
- this.updateContext();
61
- }
62
- updateContext() {
63
- const ctx = {};
64
- this.props.forEach(p => {
65
- ctx[p.property.name] = p.value;
66
- });
67
- this.changes.forEach(p => {
68
- ctx[p.property.name] = p.value;
69
- });
70
- this.context = ctx;
71
- }
72
- identify(index, item) {
73
- return item.property.name;
74
- }
75
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: AXWidgetConfigComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
76
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.7", type: AXWidgetConfigComponent, selector: "ng-component", viewQueries: [{ propertyName: "form", first: true, predicate: AXValidationFormComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ax-page>\n <ax-page-content>\n <div class=\"container\">\n <ax-validation-form #form>\n <div class=\"row\" *ngFor=\"let p of displayProps; trackBy: identify\">\n <div class=\"col-12\">\n <ax-label>{{p.property.title | trans}}</ax-label>\n <ng-container ax-property-editor-renderer [property]=\"p\" [context]=\"context\" [host]=\"widget\" [validationForm]=\"form\"\n (onValueChange)=\"handleValueChange($event)\">\n </ng-container>\n </div>\n </div>\n </ax-validation-form>\n </div>\n </ax-page-content>\n</ax-page>", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.AXPropertyEditorRendererDirective, selector: "[ax-property-editor-renderer]", inputs: ["property", "validationForm", "context", "host", "groupId"], outputs: ["onValueChange"] }, { kind: "component", type: i2.AXPageContentComponent, selector: "ax-page-content" }, { kind: "component", type: i2.AXPageComponent, selector: "ax-page" }, { kind: "component", type: i2.AXLabelComponent, selector: "ax-label", inputs: ["size"], outputs: ["clickLabel"] }, { kind: "component", type: i2.AXValidationFormComponent, selector: "ax-validation-form", inputs: ["validateOn"], outputs: ["onInit"] }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "trans" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
77
- }
78
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: AXWidgetConfigComponent, decorators: [{
79
- type: Component,
80
- args: [{ encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ax-page>\n <ax-page-content>\n <div class=\"container\">\n <ax-validation-form #form>\n <div class=\"row\" *ngFor=\"let p of displayProps; trackBy: identify\">\n <div class=\"col-12\">\n <ax-label>{{p.property.title | trans}}</ax-label>\n <ng-container ax-property-editor-renderer [property]=\"p\" [context]=\"context\" [host]=\"widget\" [validationForm]=\"form\"\n (onValueChange)=\"handleValueChange($event)\">\n </ng-container>\n </div>\n </div>\n </ax-validation-form>\n </div>\n </ax-page-content>\n</ax-page>" }]
81
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { form: [{
82
- type: ViewChild,
83
- args: [AXValidationFormComponent]
84
- }] } });
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWNvbmZpZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2xheW91dC9zcmMvbGliL3dpZGdldC1ib2FyZC93aWRnZXQtY29uZmlnLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbGF5b3V0L3NyYy9saWIvd2lkZ2V0LWJvYXJkL3dpZGdldC1jb25maWcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFvQix3QkFBd0IsRUFBeUQseUJBQXlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsSyxPQUFPLEVBQWdCLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7QUFVMUQsTUFBTSxPQUFPLHVCQUF3QixTQUFRLHdCQUF3QjtJQUk3QztJQUZrQixJQUFJLENBQTRCO0lBRXRFLFlBQW9CLEdBQXNCO1FBQ3RDLEtBQUssRUFBRSxDQUFDO1FBRFEsUUFBRyxHQUFILEdBQUcsQ0FBbUI7SUFFMUMsQ0FBQztJQUdELE1BQU0sQ0FBb0I7SUFDMUIsS0FBSyxHQUF1QixFQUFFLENBQUM7SUFDL0IsWUFBWSxHQUF1QixFQUFFLENBQUM7SUFHdEMsT0FBTyxHQUF1QixFQUFFLENBQUM7SUFFakMsT0FBTyxHQUFRLEVBQUUsQ0FBQztJQUdsQixnQkFBZ0I7UUFDWixPQUFPO1lBQ0g7Z0JBQ0ksSUFBSSxFQUFFLE1BQU07Z0JBQ1osY0FBYyxFQUFFLElBQUk7Z0JBQ3BCLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDO2dCQUN4QyxLQUFLLEVBQUUsU0FBUzthQUNuQjtZQUNEO2dCQUNJLElBQUksRUFBRSxRQUFRO2dCQUNkLGNBQWMsRUFBRSxJQUFJO2dCQUNwQixJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUM7Z0JBQ3ZDLEtBQUssRUFBRSxjQUFjO2FBQ3hCO1NBQ0osQ0FBQztJQUNOLENBQUM7SUFNRCxtQkFBbUIsQ0FBQyxDQUF1QjtRQUN2QyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pCLENBQUM7UUFDRCxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNYLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM3QixDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0wsQ0FBQztJQUVELGlCQUFpQixDQUFDLENBQWtDO1FBQ2hELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6RSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1AsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3pCLENBQUM7YUFDSSxDQUFDO1lBQ0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdILElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBR08sYUFBYTtRQUNqQixNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0lBQ3ZCLENBQUM7SUFHRCxRQUFRLENBQUMsS0FBSyxFQUFFLElBQXNCO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDOUIsQ0FBQzt1R0FwRlEsdUJBQXVCOzJGQUF2Qix1QkFBdUIsMEZBRXJCLHlCQUF5Qix1RUNkeEMsb3RCQWVVOzsyRkRIRyx1QkFBdUI7a0JBTm5DLFNBQVM7b0NBRVMsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTTtzRkFLVCxJQUFJO3NCQUF6QyxTQUFTO3VCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgVmlld0VuY2Fwc3VsYXRpb24sIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFByb3BlcnR5Q29uZmlnLCBBWEJhc2VQb3B1cFBhZ2VDb21wb25lbnQsIEFYTWVudUl0ZW1DbGlja0V2ZW50LCBBWFByb3BlcnlFZGl0b3JWYWx1ZUNoYW5nZUV2ZW50LCBBWFZhbGlkYXRpb25Gb3JtQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzJztcbmltcG9ydCB7IEFYQnV0dG9uSXRlbSwgQVhUcmFuc2xhdG9yIH0gZnJvbSAnQGFjb3JleC9jb3JlJztcbmltcG9ydCB7IEFYV2lkZ2V0Q29tcG9uZW50IH0gZnJvbSAnLi93aWRnZXQuY2xhc3MnO1xuXG5cbkBDb21wb25lbnQoe1xuICAgIHRlbXBsYXRlVXJsOiAnLi93aWRnZXQtY29uZmlnLmNvbXBvbmVudC5odG1sJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuXG5leHBvcnQgY2xhc3MgQVhXaWRnZXRDb25maWdDb21wb25lbnQgZXh0ZW5kcyBBWEJhc2VQb3B1cFBhZ2VDb21wb25lbnQge1xuXG4gICAgQFZpZXdDaGlsZChBWFZhbGlkYXRpb25Gb3JtQ29tcG9uZW50KSBmb3JtOiBBWFZhbGlkYXRpb25Gb3JtQ29tcG9uZW50O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG5cbiAgICB3aWRnZXQ6IEFYV2lkZ2V0Q29tcG9uZW50O1xuICAgIHByb3BzOiBBWFByb3BlcnR5Q29uZmlnW10gPSBbXTtcbiAgICBkaXNwbGF5UHJvcHM6IEFYUHJvcGVydHlDb25maWdbXSA9IFtdO1xuXG5cbiAgICBjaGFuZ2VzOiBBWFByb3BlcnR5Q29uZmlnW10gPSBbXTtcblxuICAgIGNvbnRleHQ6IGFueSA9IHt9O1xuXG5cbiAgICBnZXRGb290ZXJCdXR0b25zKCk6IEFYQnV0dG9uSXRlbVtdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnb2theScsXG4gICAgICAgICAgICAgICAgc3VibWl0QmVoYXZpb3I6IHRydWUsXG4gICAgICAgICAgICAgICAgdGV4dDogQVhUcmFuc2xhdG9yLmdldCgnY29tbW9uLmNvbmZpcm0nKSxcbiAgICAgICAgICAgICAgICBzdHlsZTogJ3N1Y2Nlc3MnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdjYW5jZWwnLFxuICAgICAgICAgICAgICAgIGNhbmNlbEJlaGF2aW9yOiB0cnVlLFxuICAgICAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ2NvbW1vbi5jYW5jZWwnKSxcbiAgICAgICAgICAgICAgICBzdHlsZTogJ2RhbmdlciBibGFuaydcbiAgICAgICAgICAgIH1cbiAgICAgICAgXTtcbiAgICB9XG5cblxuXG5cblxuICAgIG9uRm9vdGVyQnV0dG9uQ2xpY2soZTogQVhNZW51SXRlbUNsaWNrRXZlbnQpIHtcbiAgICAgICAgaWYgKGUubmFtZSA9PT0gJ2NhbmNlbCcpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZS5uYW1lID09PSAnb2theScpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS52YWxpZGF0ZSgpLnRoZW4oYyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGMucmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UodGhpcy5jaGFuZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZVZhbHVlQ2hhbmdlKGU6IEFYUHJvcGVyeUVkaXRvclZhbHVlQ2hhbmdlRXZlbnQpIHtcbiAgICAgICAgY29uc3QgcHJvcCA9IHRoaXMuY2hhbmdlcy5maW5kKGMgPT4gYy5wcm9wZXJ0eS5uYW1lID09PSBlLnByb3BlcnR5Lm5hbWUpO1xuICAgICAgICBpZiAocHJvcCkge1xuICAgICAgICAgICAgcHJvcC52YWx1ZSA9IGUudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZXMucHVzaCh7IHByb3BlcnR5OiBlLnByb3BlcnR5LCB2YWx1ZTogZS52YWx1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZUNvbnRleHQoKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5UHJvcHMgPSB0aGlzLnByb3BzLmZpbHRlcihjID0+IGMucHJvcGVydHkudmlzaWJsZSAhPT0gZmFsc2UpLnNvcnQoKGEsIGIpID0+IGEucHJvcGVydHkub3JkZXIgLSBiLnByb3BlcnR5Lm9yZGVyKTtcbiAgICAgICAgdGhpcy51cGRhdGVDb250ZXh0KCk7XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIHVwZGF0ZUNvbnRleHQoKSB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHt9O1xuICAgICAgICB0aGlzLnByb3BzLmZvckVhY2gocCA9PiB7XG4gICAgICAgICAgICBjdHhbcC5wcm9wZXJ0eS5uYW1lXSA9IHAudmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNoYW5nZXMuZm9yRWFjaChwID0+IHtcbiAgICAgICAgICAgIGN0eFtwLnByb3BlcnR5Lm5hbWVdID0gcC52YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IGN0eDtcbiAgICB9XG5cblxuICAgIGlkZW50aWZ5KGluZGV4LCBpdGVtOiBBWFByb3BlcnR5Q29uZmlnKSB7XG4gICAgICAgIHJldHVybiBpdGVtLnByb3BlcnR5Lm5hbWU7XG4gICAgfVxuXG59IiwiPGF4LXBhZ2U+XG4gICAgPGF4LXBhZ2UtY29udGVudD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGF4LXZhbGlkYXRpb24tZm9ybSAjZm9ybT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nRm9yPVwibGV0IHAgb2YgZGlzcGxheVByb3BzOyB0cmFja0J5OiBpZGVudGlmeVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YXgtbGFiZWw+e3twLnByb3BlcnR5LnRpdGxlIHwgdHJhbnN9fTwvYXgtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIGF4LXByb3BlcnR5LWVkaXRvci1yZW5kZXJlciBbcHJvcGVydHldPVwicFwiIFtjb250ZXh0XT1cImNvbnRleHRcIiBbaG9zdF09XCJ3aWRnZXRcIiAgW3ZhbGlkYXRpb25Gb3JtXT1cImZvcm1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlKT1cImhhbmRsZVZhbHVlQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYXgtdmFsaWRhdGlvbi1mb3JtPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2F4LXBhZ2UtY29udGVudD5cbjwvYXgtcGFnZT4iXX0=
@@ -1,311 +0,0 @@
1
- import { Component, ViewEncapsulation, Input, ElementRef, HostBinding, ComponentFactoryResolver, ViewChild, ViewContainerRef, Output, EventEmitter, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';
2
- import { AXObjectUtil, AXRenderService } from '@acorex/core';
3
- import { AXPopupService, AXPropertyDecorators, AXLoadingService } from '@acorex/components';
4
- import { AXWidgetConfigComponent } from './widget-config.component';
5
- import { AXTranslator } from '@acorex/core';
6
- import { AXWidgetSaveComponent } from './widget-save.component';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@acorex/core";
9
- import * as i2 from "@acorex/components";
10
- import * as i3 from "@angular/common";
11
- export class AXWidgetHostComponent {
12
- ref;
13
- componentFactoryResolver;
14
- rendererService;
15
- cdr;
16
- popup;
17
- loadingService;
18
- _widget;
19
- get widget() {
20
- return this._widget;
21
- }
22
- _hasProps = false;
23
- _hasMenu = false;
24
- provideValue;
25
- get element() {
26
- return this.ref.nativeElement;
27
- }
28
- configMenuItem = [
29
- {
30
- icon: 'far fa-ellipsis-h',
31
- items: []
32
- }
33
- ];
34
- onRemove = new EventEmitter();
35
- onConfigChanged = new EventEmitter();
36
- onResized = new EventEmitter();
37
- onSave = new EventEmitter();
38
- config;
39
- vc;
40
- readonly = false;
41
- componentRef;
42
- //private isLoading: boolean = true;
43
- // get isBusy() {
44
- // return this._widget?.isBusy || this.isLoading;
45
- // }
46
- _loadingId;
47
- _isLoading = false;
48
- get isLoading() {
49
- return this._isLoading;
50
- }
51
- set isLoading(v) {
52
- this._isLoading = v;
53
- if (this._loadingId && !v) {
54
- this.loadingService.hide(this._loadingId);
55
- this._loadingId = null;
56
- }
57
- if (v) {
58
- // this._loadingId = this.loadingService.show(this.ref.nativeElement);
59
- }
60
- }
61
- get isConfigured() {
62
- return this._widget?.isConfigured || false;
63
- }
64
- constructor(ref, componentFactoryResolver, rendererService, cdr, popup, loadingService) {
65
- this.ref = ref;
66
- this.componentFactoryResolver = componentFactoryResolver;
67
- this.rendererService = rendererService;
68
- this.cdr = cdr;
69
- this.popup = popup;
70
- this.loadingService = loadingService;
71
- }
72
- ngOnInit() {
73
- // this.isLoading = true;
74
- }
75
- async ngAfterViewInit() {
76
- let component;
77
- if (typeof this.config.component === 'string') {
78
- const route = await this.rendererService.findLoadedComponentByRoute(this.config.component, 20);
79
- component = route?.component;
80
- }
81
- else if (typeof this.config.component === 'function') {
82
- component = this.config.component;
83
- }
84
- if (component == null) {
85
- console.error(`Invalid Widget Component!`, this.config);
86
- this.onRemove.emit(this);
87
- return;
88
- }
89
- const widgetFactory = this.componentFactoryResolver.resolveComponentFactory(component);
90
- this.componentRef = this.vc.createComponent(widgetFactory);
91
- this._widget = this.componentRef.instance;
92
- this._widget.provideValue = this.provideValue;
93
- if (this._widget.onBusyChanged) {
94
- this._widget.onBusyChanged.subscribe((d) => {
95
- if (!this._widget.widgetSize) {
96
- this._widget.setValue('widgetSize', [this.sizeX, this.sizeY]);
97
- }
98
- else {
99
- this.setSizeFromOptions();
100
- }
101
- // this.isLoading = d.value;
102
- this.cdr.detectChanges();
103
- });
104
- }
105
- if (this._widget.onConfiguredChanged) {
106
- this._widget.onConfiguredChanged.subscribe(() => {
107
- this.setSizeFromOptions();
108
- });
109
- }
110
- //
111
- if (this.config.options) {
112
- Object.assign(this._widget, this.config.options);
113
- }
114
- this._hasProps = AXPropertyDecorators.getProperties(this._widget).length > 0;
115
- this.isLoading = false;
116
- this.config['__meta__'].instance = this;
117
- this._widget['__meta__'] = {};
118
- this._widget['__meta__'].config = this.config;
119
- //
120
- this.configMenuItem[0].items.push({
121
- name: 'refresh',
122
- icon: 'far fa-undo',
123
- text: AXTranslator.get('common.refresh'),
124
- onClick: () => {
125
- this?.widget?.refresh();
126
- }
127
- });
128
- //
129
- if (this._hasProps) {
130
- this.configMenuItem[0].items.push({
131
- name: 'configs',
132
- icon: 'far fa-cogs',
133
- text: AXTranslator.get('common.configs'),
134
- onClick: () => {
135
- this.openConfigDialog();
136
- }
137
- });
138
- }
139
- this.configMenuItem[0].items.push({
140
- name: 'save',
141
- icon: 'far fa-save',
142
- text: AXTranslator.get('common.save-as'),
143
- onClick: () => {
144
- this.openSaveDialog();
145
- }
146
- });
147
- if (true) {
148
- this.configMenuItem[0].items.push({
149
- name: 'remove',
150
- icon: 'far fa-times',
151
- style: 'ax danger blank',
152
- text: AXTranslator.get('common.remove'),
153
- onClick: () => {
154
- this.onRemove.emit(this);
155
- }
156
- });
157
- }
158
- this._hasMenu = this.configMenuItem[0].items.length > 0;
159
- this.cdr.detectChanges();
160
- }
161
- sizeX = 1;
162
- sizeY = 1;
163
- col = 1;
164
- row = 1;
165
- setSizeFromOptions() {
166
- this._widget.getValue('widgetSize').then(c => {
167
- const oldSizeX = this.sizeX;
168
- const oldSizeY = this.sizeY;
169
- if (c && Array.isArray(c) && (oldSizeX !== c[0] || oldSizeY !== c[1])) {
170
- this.config.sizeX = this.sizeX = c[0];
171
- this.config.sizeY = this.sizeY = c[1];
172
- this.onResized.emit({
173
- component: this._widget,
174
- config: this.config
175
- });
176
- }
177
- this.cdr.detectChanges();
178
- });
179
- }
180
- remove(e) {
181
- e.preventDefault();
182
- e.stopPropagation();
183
- if (!this.readonly)
184
- this.onRemove.emit(this);
185
- return false;
186
- }
187
- handleConfig(e) {
188
- e.preventDefault();
189
- e.stopPropagation();
190
- if (!this.readonly)
191
- this.openConfigDialog();
192
- return false;
193
- }
194
- openConfigDialog() {
195
- const ppp = this.getMergedProps();
196
- this.popup.open(AXWidgetConfigComponent, {
197
- title: AXTranslator.get('common.configs'),
198
- size: 'sm',
199
- data: {
200
- props: ppp.map(c => ({ property: c.options, value: this._widget[c.options.name] })),
201
- widget: this.widget
202
- }
203
- }).then(c => {
204
- if (c.data) {
205
- if (!this.config.options) {
206
- this.config.options = {};
207
- }
208
- c.data.forEach(p => {
209
- this._widget.setValue(p.property.name, p.value);
210
- this.config.options[p.property.name] = p.value;
211
- });
212
- this.emitConfigChanged();
213
- this._widget.redraw();
214
- this.cdr.detectChanges();
215
- }
216
- });
217
- }
218
- openSaveDialog() {
219
- const ppp = this.getMergedProps();
220
- this.popup.open(AXWidgetSaveComponent, {
221
- title: AXTranslator.get('common.save-as'),
222
- size: 'sm',
223
- data: {
224
- config: this.config,
225
- props: ppp.map(c => ({ property: c.options, value: this._widget[c.options.name] }))
226
- }
227
- }).then(c => {
228
- if (c.data) {
229
- this.onSave.emit({
230
- component: this._widget,
231
- data: c.data
232
- });
233
- }
234
- });
235
- }
236
- handleOptionClick(e) {
237
- e.preventDefault();
238
- e.stopPropagation();
239
- this.openConfigDialog();
240
- return false;
241
- }
242
- ngOnDestroy() {
243
- this.vc.clear();
244
- if (this.componentRef) {
245
- this.componentRef.destroy();
246
- }
247
- }
248
- getMergedProps() {
249
- const ppp = AXObjectUtil.deepCopy(AXPropertyDecorators.getProperties(this._widget));
250
- for (const key in this.config.props) {
251
- if (Object.prototype.hasOwnProperty.call(this.config.props, key)) {
252
- const newP = this.config.props[key];
253
- const existPropDec = ppp.find(p => p.property === key);
254
- if (existPropDec) {
255
- Object.assign(existPropDec.options, newP);
256
- }
257
- }
258
- }
259
- return ppp;
260
- }
261
- emitConfigChanged() {
262
- this.onConfigChanged.emit({
263
- component: this._widget,
264
- config: this.config
265
- });
266
- }
267
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: AXWidgetHostComponent, deps: [{ token: i0.ElementRef }, { token: i0.ComponentFactoryResolver }, { token: i1.AXRenderService }, { token: i0.ChangeDetectorRef }, { token: i2.AXPopupService }, { token: i2.AXLoadingService }], target: i0.ɵɵFactoryTarget.Component });
268
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.7", type: AXWidgetHostComponent, selector: "ax-widget-host", inputs: { provideValue: "provideValue", config: "config", readonly: "readonly", sizeX: "sizeX", sizeY: "sizeY", col: "col", row: "row" }, outputs: { onRemove: "onRemove", onConfigChanged: "onConfigChanged", onResized: "onResized", onSave: "onSave" }, host: { attributes: { "tabindex": "0" }, properties: { "attr.data-size-x": "this.sizeX", "attr.data-size-y": "this.sizeY", "attr.data-col": "this.col", "attr.data-row": "this.row" }, classAttribute: "ax widget-host" }, viewQueries: [{ propertyName: "vc", first: true, predicate: ["vc"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<div class='widget-container'>\n <div class=\"widget-config-overlay\" *ngIf=\"!isConfigured\" (click)=\"handleConfig($event)\">\n <div class=\"widget-title\">{{config.title}}</div>\n <div class=\"widget-config-box\">\n <div class=\"config-title\">{{ 'widget-board.configure' | trans}}</div>\n <div class=\"config-icon\" *ngIf=\"!readonly\"><i class=\"fas fa-cogs fa-5x\" aria-hidden=\"true\"></i></div>\n </div>\n </div>\n <div class='widget-edit-overlay' >\n <div class='widget-edit-menu'>\n <button class=\"widget-edit-menu-button\" (click)=\"handleConfig($event)\"\n (mousedown)=\"$event.stopPropagation()\" *ngIf=\"_hasProps\" (mouseup)=\"$event.stopPropagation()\">\n <i class=\"far fa-cogs\" aria-hidden=\"true\"></i>\n </button>\n <button class=\"widget-edit-menu-button\" (click)=\"remove($event)\" (mousedown)=\"$event.stopPropagation()\"\n (mouseup)=\"$event.stopPropagation()\">\n <i class=\"far fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n\n </div>\n <div class=\"widget-options-menu\" *ngIf=\"_hasMenu && !readonly\">\n <ax-menu [items]='configMenuItem' direction=\"horizontal\"></ax-menu>\n </div>\n <!-- <ax-loading-panel [visible]=\"isBusy\">\n </ax-loading-panel> -->\n <div class=\"widget-content\">\n <ng-container #vc></ng-container>\n </div>\n</div>", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.AXMenuComponent, selector: "ax-menu", inputs: ["menuTemplate", "rtl", "size", "selection", "mode", "target", "floatAlignment", "floatPlacemnet", "direction", "items"], outputs: ["onItemClick"] }, { kind: "pipe", type: i1.AXTranslatorPipe, name: "trans" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
269
- }
270
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: AXWidgetHostComponent, decorators: [{
271
- type: Component,
272
- args: [{ selector: 'ax-widget-host', host: { class: 'ax widget-host', tabindex: '0' }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class='widget-container'>\n <div class=\"widget-config-overlay\" *ngIf=\"!isConfigured\" (click)=\"handleConfig($event)\">\n <div class=\"widget-title\">{{config.title}}</div>\n <div class=\"widget-config-box\">\n <div class=\"config-title\">{{ 'widget-board.configure' | trans}}</div>\n <div class=\"config-icon\" *ngIf=\"!readonly\"><i class=\"fas fa-cogs fa-5x\" aria-hidden=\"true\"></i></div>\n </div>\n </div>\n <div class='widget-edit-overlay' >\n <div class='widget-edit-menu'>\n <button class=\"widget-edit-menu-button\" (click)=\"handleConfig($event)\"\n (mousedown)=\"$event.stopPropagation()\" *ngIf=\"_hasProps\" (mouseup)=\"$event.stopPropagation()\">\n <i class=\"far fa-cogs\" aria-hidden=\"true\"></i>\n </button>\n <button class=\"widget-edit-menu-button\" (click)=\"remove($event)\" (mousedown)=\"$event.stopPropagation()\"\n (mouseup)=\"$event.stopPropagation()\">\n <i class=\"far fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n\n </div>\n <div class=\"widget-options-menu\" *ngIf=\"_hasMenu && !readonly\">\n <ax-menu [items]='configMenuItem' direction=\"horizontal\"></ax-menu>\n </div>\n <!-- <ax-loading-panel [visible]=\"isBusy\">\n </ax-loading-panel> -->\n <div class=\"widget-content\">\n <ng-container #vc></ng-container>\n </div>\n</div>" }]
273
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ComponentFactoryResolver }, { type: i1.AXRenderService }, { type: i0.ChangeDetectorRef }, { type: i2.AXPopupService }, { type: i2.AXLoadingService }], propDecorators: { provideValue: [{
274
- type: Input
275
- }], onRemove: [{
276
- type: Output
277
- }], onConfigChanged: [{
278
- type: Output
279
- }], onResized: [{
280
- type: Output
281
- }], onSave: [{
282
- type: Output
283
- }], config: [{
284
- type: Input
285
- }], vc: [{
286
- type: ViewChild,
287
- args: ['vc', { read: ViewContainerRef }]
288
- }], readonly: [{
289
- type: Input
290
- }], sizeX: [{
291
- type: HostBinding,
292
- args: ['attr.data-size-x']
293
- }, {
294
- type: Input
295
- }], sizeY: [{
296
- type: HostBinding,
297
- args: ['attr.data-size-y']
298
- }, {
299
- type: Input
300
- }], col: [{
301
- type: HostBinding,
302
- args: ['attr.data-col']
303
- }, {
304
- type: Input
305
- }], row: [{
306
- type: HostBinding,
307
- args: ['attr.data-row']
308
- }, {
309
- type: Input
310
- }] } });
311
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWhvc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9sYXlvdXQvc3JjL2xpYi93aWRnZXQtYm9hcmQvd2lkZ2V0LWhvc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9sYXlvdXQvc3JjL2xpYi93aWRnZXQtYm9hcmQvd2lkZ2V0LWhvc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxpQkFBaUIsRUFBRSxLQUFLLEVBQ3hCLFVBQVUsRUFBRSxXQUFXLEVBQUUsd0JBQXdCLEVBQUUsU0FBUyxFQUM1RCxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLHVCQUF1QixFQUMvRCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBdUIsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqSCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7OztBQWNoRSxNQUFNLE9BQU8scUJBQXFCO0lBcUZsQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUF4RkosT0FBTyxDQUFvQjtJQUNuQyxJQUFXLE1BQU07UUFDYixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQUVELFNBQVMsR0FBWSxLQUFLLENBQUM7SUFHM0IsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUcxQixZQUFZLENBQWtCO0lBRzlCLElBQUksT0FBTztRQUNQLE9BQU8sSUFB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UUFFcEIsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxpQkFDakMsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTTtnUEFnQi9DLFlBQVk7c0JBRFgsS0FBSztnQkFrQk4sUUFBUTtzQkFEUCxNQUFNO2dCQUlQLGVBQWU7c0JBRGQsTUFBTTtnQkFLUCxTQUFTO3NCQURSLE1BQU07Z0JBSVAsTUFBTTtzQkFETCxNQUFNO2dCQUlQLE1BQU07c0JBREwsS0FBSztnQkFJTixFQUFFO3NCQURELFNBQVM7dUJBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQU0zQyxRQUFRO3NCQURQLEtBQUs7Z0JBK0lOLEtBQUs7c0JBRkosV0FBVzt1QkFBQyxrQkFBa0I7O3NCQUM5QixLQUFLO2dCQUtOLEtBQUs7c0JBRkosV0FBVzt1QkFBQyxrQkFBa0I7O3NCQUM5QixLQUFLO2dCQUtOLEdBQUc7c0JBRkYsV0FBVzt1QkFBQyxlQUFlOztzQkFDM0IsS0FBSztnQkFNTixHQUFHO3NCQUZGLFdBQVc7dUJBQUMsZUFBZTs7c0JBQzNCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbiwgSW5wdXQsXG4gICAgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgVmlld0NoaWxkLFxuICAgIFZpZXdDb250YWluZXJSZWYsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50UmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhXaWRnZXRDb25maWcsIEFYV2lkZ2V0Q29tcG9uZW50LCBBWFdpZGdldENvbmZpZ0NoYW5nZWQsIEFYV2lkZ2V0Q29uZmlnU2F2ZWRFdmVudCB9IGZyb20gJy4vd2lkZ2V0LmNsYXNzJztcbmltcG9ydCB7IEFYT2JqZWN0VXRpbCwgQVhSZW5kZXJTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb3JlJztcbmltcG9ydCB7IEFYUG9wdXBTZXJ2aWNlLCBBWFByb3BlcnR5RGVjb3JhdG9ycywgQVhQcm9wZXJ0eURlY29yYXRvciwgQVhMb2FkaW5nU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBWFdpZGdldENvbmZpZ0NvbXBvbmVudCB9IGZyb20gJy4vd2lkZ2V0LWNvbmZpZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhNZW51SXRlbSB9IGZyb20gJ0BhY29yZXgvY29yZSc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0b3IgfSBmcm9tICdAYWNvcmV4L2NvcmUnO1xuaW1wb3J0IHsgQVhXaWRnZXRTYXZlQ29tcG9uZW50IH0gZnJvbSAnLi93aWRnZXQtc2F2ZS5jb21wb25lbnQnO1xuXG5cblxuXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXgtd2lkZ2V0LWhvc3QnLFxuICAgIHRlbXBsYXRlVXJsOiBcIi4vd2lkZ2V0LWhvc3QuY29tcG9uZW50Lmh0bWxcIixcbiAgICBob3N0OiB7IGNsYXNzOiAnYXggd2lkZ2V0LWhvc3QnLCB0YWJpbmRleDogJzAnIH0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcblxuZXhwb3J0IGNsYXNzIEFYV2lkZ2V0SG9zdENvbXBvbmVudCB7XG5cbiAgICBwcml2YXRlIF93aWRnZXQ6IEFYV2lkZ2V0Q29tcG9uZW50O1xuICAgIHB1YmxpYyBnZXQgd2lkZ2V0KCk6IEFYV2lkZ2V0Q29tcG9uZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZGdldDtcbiAgICB9XG5cbiAgICBfaGFzUHJvcHM6IGJvb2xlYW4gPSBmYWxzZTtcblxuXG4gICAgX2hhc01lbnU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHJvdmlkZVZhbHVlOiAoZTogYW55KSA9PiBhbnk7XG5cblxuICAgIGdldCBlbGVtZW50KCk6IEhUTUxEaXZFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG5cbiAgICBjb25maWdNZW51SXRlbTogQVhNZW51SXRlbVtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICBpY29uOiAnZmFyIGZhLWVsbGlwc2lzLWgnLFxuICAgICAgICAgICAgaXRlbXM6IFtdXG4gICAgICAgIH1cbiAgICBdO1xuXG5cbiAgICBAT3V0cHV0KClcbiAgICBvblJlbW92ZTogRXZlbnRFbWl0dGVyPEFYV2lkZ2V0SG9zdENvbXBvbmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYV2lkZ2V0SG9zdENvbXBvbmVudD4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIG9uQ29uZmlnQ2hhbmdlZDogRXZlbnRFbWl0dGVyPEFYV2lkZ2V0Q29uZmlnQ2hhbmdlZD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYV2lkZ2V0Q29uZmlnQ2hhbmdlZD4oKTtcblxuXG4gICAgQE91dHB1dCgpXG4gICAgb25SZXNpemVkOiBFdmVudEVtaXR0ZXI8QVhXaWRnZXRDb25maWdDaGFuZ2VkPiA9IG5ldyBFdmVudEVtaXR0ZXI8QVhXaWRnZXRDb25maWdDaGFuZ2VkPigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgb25TYXZlOiBFdmVudEVtaXR0ZXI8QVhXaWRnZXRDb25maWdTYXZlZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8QVhXaWRnZXRDb25maWdTYXZlZEV2ZW50PigpO1xuXG4gICAgQElucHV0KClcbiAgICBjb25maWc6IEFYV2lkZ2V0Q29uZmlnO1xuXG4gICAgQFZpZXdDaGlsZCgndmMnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSlcbiAgICB2YzogVmlld0NvbnRhaW5lclJlZjtcblxuXG5cbiAgICBASW5wdXQoKVxuICAgIHJlYWRvbmx5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPGFueT47XG4gICAgLy9wcml2YXRlIGlzTG9hZGluZzogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvLyBnZXQgaXNCdXN5KCkge1xuICAgIC8vICAgICByZXR1cm4gdGhpcy5fd2lkZ2V0Py5pc0J1c3kgfHwgdGhpcy5pc0xvYWRpbmc7XG4gICAgLy8gfVxuXG5cbiAgICBwcml2YXRlIF9sb2FkaW5nSWQ6IG51bWJlcjtcblxuICAgIHByaXZhdGUgX2lzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBnZXQgaXNMb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNMb2FkaW5nO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IGlzTG9hZGluZyh2OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2lzTG9hZGluZyA9IHY7XG4gICAgICAgIGlmICh0aGlzLl9sb2FkaW5nSWQgJiYgIXYpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1NlcnZpY2UuaGlkZSh0aGlzLl9sb2FkaW5nSWQpO1xuICAgICAgICAgICAgdGhpcy5fbG9hZGluZ0lkID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgLy8gdGhpcy5fbG9hZGluZ0lkID0gdGhpcy5sb2FkaW5nU2VydmljZS5zaG93KHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBnZXQgaXNDb25maWd1cmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2lkZ2V0Py5pc0NvbmZpZ3VyZWQgfHwgZmFsc2U7XG4gICAgfVxuXG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWY6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+LFxuICAgICAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyU2VydmljZTogQVhSZW5kZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcG9wdXA6IEFYUG9wdXBTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGxvYWRpbmdTZXJ2aWNlOiBBWExvYWRpbmdTZXJ2aWNlXG5cbiAgICApIHtcblxuICAgIH1cblxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIC8vIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICB9XG5cblxuICAgIGFzeW5jIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgbGV0IGNvbXBvbmVudDogYW55O1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29uZmlnLmNvbXBvbmVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlID0gYXdhaXQgdGhpcy5yZW5kZXJlclNlcnZpY2UuZmluZExvYWRlZENvbXBvbmVudEJ5Um91dGUodGhpcy5jb25maWcuY29tcG9uZW50LCAyMCk7XG4gICAgICAgICAgICBjb21wb25lbnQgPSByb3V0ZT8uY29tcG9uZW50O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZy5jb21wb25lbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudCA9IHRoaXMuY29uZmlnLmNvbXBvbmVudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcG9uZW50ID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgV2lkZ2V0IENvbXBvbmVudCFgLCB0aGlzLmNvbmZpZyk7XG4gICAgICAgICAgICB0aGlzLm9uUmVtb3ZlLmVtaXQodGhpcyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB3aWRnZXRGYWN0b3J5ID0gdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoY29tcG9uZW50KTtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSB0aGlzLnZjLmNyZWF0ZUNvbXBvbmVudCh3aWRnZXRGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5fd2lkZ2V0ID0gdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgQVhXaWRnZXRDb21wb25lbnQ7XG4gICAgICAgIHRoaXMuX3dpZGdldC5wcm92aWRlVmFsdWUgPSB0aGlzLnByb3ZpZGVWYWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuX3dpZGdldC5vbkJ1c3lDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLl93aWRnZXQub25CdXN5Q2hhbmdlZC5zdWJzY3JpYmUoKGQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3dpZGdldC53aWRnZXRTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3dpZGdldC5zZXRWYWx1ZSgnd2lkZ2V0U2l6ZScsIFt0aGlzLnNpemVYLCB0aGlzLnNpemVZXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFNpemVGcm9tT3B0aW9ucygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyB0aGlzLmlzTG9hZGluZyA9IGQudmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3dpZGdldC5vbkNvbmZpZ3VyZWRDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLl93aWRnZXQub25Db25maWd1cmVkQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U2l6ZUZyb21PcHRpb25zKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvL1xuICAgICAgICBpZiAodGhpcy5jb25maWcub3B0aW9ucykge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLl93aWRnZXQsIHRoaXMuY29uZmlnLm9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2hhc1Byb3BzID0gQVhQcm9wZXJ0eURlY29yYXRvcnMuZ2V0UHJvcGVydGllcyh0aGlzLl93aWRnZXQpLmxlbmd0aCA+IDA7XG5cbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb25maWdbJ19fbWV0YV9fJ10uaW5zdGFuY2UgPSB0aGlzO1xuICAgICAgICB0aGlzLl93aWRnZXRbJ19fbWV0YV9fJ10gPSB7fTtcbiAgICAgICAgdGhpcy5fd2lkZ2V0WydfX21ldGFfXyddLmNvbmZpZyA9IHRoaXMuY29uZmlnO1xuICAgICAgICAvL1xuICAgICAgICB0aGlzLmNvbmZpZ01lbnVJdGVtWzBdLml0ZW1zLnB1c2goe1xuICAgICAgICAgICAgbmFtZTogJ3JlZnJlc2gnLFxuICAgICAgICAgICAgaWNvbjogJ2ZhciBmYS11bmRvJyxcbiAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ2NvbW1vbi5yZWZyZXNoJyksXG4gICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcz8ud2lkZ2V0Py5yZWZyZXNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvL1xuICAgICAgICBpZiAodGhpcy5faGFzUHJvcHMpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnTWVudUl0ZW1bMF0uaXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2NvbmZpZ3MnLFxuICAgICAgICAgICAgICAgIGljb246ICdmYXIgZmEtY29ncycsXG4gICAgICAgICAgICAgICAgdGV4dDogQVhUcmFuc2xhdG9yLmdldCgnY29tbW9uLmNvbmZpZ3MnKSxcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbkNvbmZpZ0RpYWxvZygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29uZmlnTWVudUl0ZW1bMF0uaXRlbXMucHVzaCh7XG4gICAgICAgICAgICBuYW1lOiAnc2F2ZScsXG4gICAgICAgICAgICBpY29uOiAnZmFyIGZhLXNhdmUnLFxuICAgICAgICAgICAgdGV4dDogQVhUcmFuc2xhdG9yLmdldCgnY29tbW9uLnNhdmUtYXMnKSxcbiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5TYXZlRGlhbG9nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodHJ1ZSkge1xuICAgICAgICAgICAgdGhpcy5jb25maWdNZW51SXRlbVswXS5pdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncmVtb3ZlJyxcbiAgICAgICAgICAgICAgICBpY29uOiAnZmFyIGZhLXRpbWVzJyxcbiAgICAgICAgICAgICAgICBzdHlsZTogJ2F4IGRhbmdlciBibGFuaycsXG4gICAgICAgICAgICAgICAgdGV4dDogQVhUcmFuc2xhdG9yLmdldCgnY29tbW9uLnJlbW92ZScpLFxuICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblJlbW92ZS5lbWl0KHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2hhc01lbnUgPSB0aGlzLmNvbmZpZ01lbnVJdGVtWzBdLml0ZW1zLmxlbmd0aCA+IDA7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1zaXplLXgnKVxuICAgIEBJbnB1dCgpXG4gICAgc2l6ZVg6IG51bWJlciA9IDE7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1zaXplLXknKVxuICAgIEBJbnB1dCgpXG4gICAgc2l6ZVk6IG51bWJlciA9IDE7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1jb2wnKVxuICAgIEBJbnB1dCgpXG4gICAgY29sOiBudW1iZXIgPSAxO1xuXG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1yb3cnKVxuICAgIEBJbnB1dCgpXG4gICAgcm93OiBudW1iZXIgPSAxO1xuXG5cbiAgICBwcml2YXRlIHNldFNpemVGcm9tT3B0aW9ucygpIHtcbiAgICAgICAgdGhpcy5fd2lkZ2V0LmdldFZhbHVlKCd3aWRnZXRTaXplJykudGhlbihjID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9sZFNpemVYID0gdGhpcy5zaXplWDtcbiAgICAgICAgICAgIGNvbnN0IG9sZFNpemVZID0gdGhpcy5zaXplWTtcbiAgICAgICAgICAgIGlmIChjICYmIEFycmF5LmlzQXJyYXkoYykgJiYgKG9sZFNpemVYICE9PSBjWzBdIHx8IG9sZFNpemVZICE9PSBjWzFdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLnNpemVYID0gdGhpcy5zaXplWCA9IGNbMF07XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcuc2l6ZVkgPSB0aGlzLnNpemVZID0gY1sxXTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uUmVzaXplZC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLl93aWRnZXQsXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZzogdGhpcy5jb25maWdcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlKGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAoIXRoaXMucmVhZG9ubHkpXG4gICAgICAgICAgICB0aGlzLm9uUmVtb3ZlLmVtaXQodGhpcyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBoYW5kbGVDb25maWcoZTogTW91c2VFdmVudCkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmICghdGhpcy5yZWFkb25seSlcbiAgICAgICAgICAgIHRoaXMub3BlbkNvbmZpZ0RpYWxvZygpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvcGVuQ29uZmlnRGlhbG9nKCkge1xuICAgICAgICBjb25zdCBwcHAgPSB0aGlzLmdldE1lcmdlZFByb3BzKCk7XG4gICAgICAgIHRoaXMucG9wdXAub3BlbihBWFdpZGdldENvbmZpZ0NvbXBvbmVudCwge1xuICAgICAgICAgICAgdGl0bGU6IEFYVHJhbnNsYXRvci5nZXQoJ2NvbW1vbi5jb25maWdzJyksXG4gICAgICAgICAgICBzaXplOiAnc20nLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIHByb3BzOiBwcHAubWFwKGMgPT4gKHsgcHJvcGVydHk6IGMub3B0aW9ucywgdmFsdWU6IHRoaXMuX3dpZGdldFtjLm9wdGlvbnMubmFtZV0gfSkpLFxuICAgICAgICAgICAgICAgIHdpZGdldDogdGhpcy53aWRnZXRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkudGhlbihjID0+IHtcbiAgICAgICAgICAgIGlmIChjLmRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29uZmlnLm9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjLmRhdGEuZm9yRWFjaChwID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fd2lkZ2V0LnNldFZhbHVlKHAucHJvcGVydHkubmFtZSwgcC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnNbcC5wcm9wZXJ0eS5uYW1lXSA9IHAudmFsdWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q29uZmlnQ2hhbmdlZCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3dpZGdldC5yZWRyYXcoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgb3BlblNhdmVEaWFsb2coKSB7XG4gICAgICAgIGNvbnN0IHBwcCA9IHRoaXMuZ2V0TWVyZ2VkUHJvcHMoKTtcbiAgICAgICAgdGhpcy5wb3B1cC5vcGVuKEFYV2lkZ2V0U2F2ZUNvbXBvbmVudCwge1xuICAgICAgICAgICAgdGl0bGU6IEFYVHJhbnNsYXRvci5nZXQoJ2NvbW1vbi5zYXZlLWFzJyksXG4gICAgICAgICAgICBzaXplOiAnc20nLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICAgICAgICAgICAgcHJvcHM6IHBwcC5tYXAoYyA9PiAoeyBwcm9wZXJ0eTogYy5vcHRpb25zLCB2YWx1ZTogdGhpcy5fd2lkZ2V0W2Mub3B0aW9ucy5uYW1lXSB9KSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkudGhlbihjID0+IHtcbiAgICAgICAgICAgIGlmIChjLmRhdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2F2ZS5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLl93aWRnZXQsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGMuZGF0YVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cblxuXG4gICAgaGFuZGxlT3B0aW9uQ2xpY2soZTogTW91c2VFdmVudCkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMub3BlbkNvbmZpZ0RpYWxvZygpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMudmMuY2xlYXIoKTtcbiAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50UmVmKSB7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE1lcmdlZFByb3BzKCk6IEFYUHJvcGVydHlEZWNvcmF0b3JbXSB7XG4gICAgICAgIGNvbnN0IHBwcCA9IEFYT2JqZWN0VXRpbC5kZWVwQ29weShBWFByb3BlcnR5RGVjb3JhdG9ycy5nZXRQcm9wZXJ0aWVzKHRoaXMuX3dpZGdldCkpIGFzIEFYUHJvcGVydHlEZWNvcmF0b3JbXTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5jb25maWcucHJvcHMpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5jb25maWcucHJvcHMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdQID0gdGhpcy5jb25maWcucHJvcHNba2V5XTtcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdFByb3BEZWMgPSBwcHAuZmluZChwID0+IHAucHJvcGVydHkgPT09IGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKGV4aXN0UHJvcERlYykge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGV4aXN0UHJvcERlYy5vcHRpb25zLCBuZXdQKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBwcDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXRDb25maWdDaGFuZ2VkKCkge1xuICAgICAgICB0aGlzLm9uQ29uZmlnQ2hhbmdlZC5lbWl0KHtcbiAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcy5fd2lkZ2V0LFxuICAgICAgICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZ1xuICAgICAgICB9KTtcbiAgICB9XG5cbn0iLCI8ZGl2IGNsYXNzPSd3aWRnZXQtY29udGFpbmVyJz5cbiAgICA8ZGl2IGNsYXNzPVwid2lkZ2V0LWNvbmZpZy1vdmVybGF5XCIgKm5nSWY9XCIhaXNDb25maWd1cmVkXCIgKGNsaWNrKT1cImhhbmRsZUNvbmZpZygkZXZlbnQpXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3aWRnZXQtdGl0bGVcIj57e2NvbmZpZy50aXRsZX19PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3aWRnZXQtY29uZmlnLWJveFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy10aXRsZVwiPnt7ICd3aWRnZXQtYm9hcmQuY29uZmlndXJlJyB8IHRyYW5zfX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWctaWNvblwiICpuZ0lmPVwiIXJlYWRvbmx5XCI+PGkgY2xhc3M9XCJmYXMgZmEtY29ncyBmYS01eFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0nd2lkZ2V0LWVkaXQtb3ZlcmxheScgPlxuICAgICAgICA8ZGl2IGNsYXNzPSd3aWRnZXQtZWRpdC1tZW51Jz5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ3aWRnZXQtZWRpdC1tZW51LWJ1dHRvblwiIChjbGljayk9XCJoYW5kbGVDb25maWcoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiAqbmdJZj1cIl9oYXNQcm9wc1wiIChtb3VzZXVwKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFyIGZhLWNvZ3NcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ3aWRnZXQtZWRpdC1tZW51LWJ1dHRvblwiIChjbGljayk9XCJyZW1vdmUoJGV2ZW50KVwiIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAobW91c2V1cCk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhciBmYS10aW1lc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ3aWRnZXQtb3B0aW9ucy1tZW51XCIgICpuZ0lmPVwiX2hhc01lbnUgJiYgIXJlYWRvbmx5XCI+XG4gICAgICAgIDxheC1tZW51IFtpdGVtc109J2NvbmZpZ01lbnVJdGVtJyBkaXJlY3Rpb249XCJob3Jpem9udGFsXCI+PC9heC1tZW51PlxuICAgIDwvZGl2PlxuICAgIDwhLS0gPGF4LWxvYWRpbmctcGFuZWwgW3Zpc2libGVdPVwiaXNCdXN5XCI+XG4gICAgPC9heC1sb2FkaW5nLXBhbmVsPiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwid2lkZ2V0LWNvbnRlbnRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAjdmM+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L2Rpdj4iXX0=