ato-water-lib 0.0.90 → 0.0.91

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. package/{esm2022 → esm2020}/lib/ato-water-lib.component.mjs +5 -5
  2. package/{esm2022 → esm2020}/lib/ato-water-lib.module.mjs +15 -15
  3. package/{esm2022 → esm2020}/lib/ato-water-lib.service.mjs +5 -5
  4. package/esm2020/lib/components/asset-flow/asset-flow.component.mjs +165 -0
  5. package/{esm2022 → esm2020}/lib/components/asset-params-view/asset-params-view.component.mjs +9 -7
  6. package/esm2020/lib/components/flow-diagram-lib/flow-diagram-lib.component.mjs +54 -0
  7. package/esm2020/lib/constants/components-group-const.mjs +3236 -0
  8. package/esm2020/lib/directive/ato-loading.directive.mjs +55 -0
  9. package/esm2020/lib/directive/ng-var.directive.mjs +31 -0
  10. package/esm2020/lib/models/default-gojs-editor.model.mjs +3578 -0
  11. package/esm2020/lib/models/gojs-data.model.mjs +6 -0
  12. package/esm2020/lib/models/gojs-editor.model.mjs +1811 -0
  13. package/esm2020/lib/services/utils/utils.service.mjs +133 -0
  14. package/fesm2015/ato-water-lib.mjs +9674 -0
  15. package/fesm2015/ato-water-lib.mjs.map +1 -0
  16. package/{fesm2022 → fesm2020}/ato-water-lib.mjs +1324 -385
  17. package/fesm2020/ato-water-lib.mjs.map +1 -0
  18. package/lib/components/asset-flow/asset-flow.component.d.ts +1 -1
  19. package/lib/components/asset-params-view/asset-params-view.component.d.ts +1 -1
  20. package/lib/components/flow-diagram-lib/flow-diagram-lib.component.d.ts +1 -1
  21. package/lib/constants/components-group-const.d.ts +454 -3
  22. package/lib/directive/ato-loading.directive.d.ts +1 -1
  23. package/lib/directive/ng-var.directive.d.ts +1 -1
  24. package/lib/models/default-gojs-editor.model.d.ts +2 -2
  25. package/lib/models/gojs-editor.model.d.ts +8 -4
  26. package/package.json +13 -7
  27. package/esm2022/lib/components/asset-flow/asset-flow.component.mjs +0 -174
  28. package/esm2022/lib/components/flow-diagram-lib/flow-diagram-lib.component.mjs +0 -55
  29. package/esm2022/lib/constants/components-group-const.mjs +0 -2291
  30. package/esm2022/lib/directive/ato-loading.directive.mjs +0 -59
  31. package/esm2022/lib/directive/ng-var.directive.mjs +0 -33
  32. package/esm2022/lib/models/default-gojs-editor.model.mjs +0 -3582
  33. package/esm2022/lib/models/gojs-data.model.mjs +0 -10
  34. package/esm2022/lib/models/gojs-editor.model.mjs +0 -1799
  35. package/esm2022/lib/services/utils/utils.service.mjs +0 -133
  36. package/fesm2022/ato-water-lib.mjs.map +0 -1
  37. /package/{esm2022 → esm2020}/ato-water-lib.mjs +0 -0
  38. /package/{esm2022 → esm2020}/lib/constants/applicable-prefixes-const.mjs +0 -0
  39. /package/{esm2022 → esm2020}/lib/constants/base64.const.mjs +0 -0
  40. /package/{esm2022 → esm2020}/lib/constants/icon-base64.const.mjs +0 -0
  41. /package/{esm2022 → esm2020}/lib/constants/key.const.mjs +0 -0
  42. /package/{esm2022 → esm2020}/lib/constants/plant.constant.mjs +0 -0
  43. /package/{esm2022 → esm2020}/lib/constants/value.const.mjs +0 -0
  44. /package/{esm2022 → esm2020}/lib/models/ato-asset-flow.model.mjs +0 -0
  45. /package/{esm2022 → esm2020}/public-api.mjs +0 -0
@@ -1,174 +0,0 @@
1
- import { Component, EventEmitter, HostListener, Input, Output, ViewChild, } from '@angular/core';
2
- import * as go from 'gojs';
3
- import _ from 'lodash';
4
- import { AtoGoJSBase64 } from '../../constants/base64.const';
5
- import { ATO_COMPONENTS_GROUP_DATA, } from '../../constants/components-group-const';
6
- import { AtoGojsEditorModel } from '../../models/gojs-editor.model';
7
- import { AtoAssetParamsViewComponent } from '../asset-params-view/asset-params-view.component';
8
- import { AtoFlowDiagramLibComponent } from '../flow-diagram-lib/flow-diagram-lib.component';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "@angular/common";
11
- import * as i2 from "../flow-diagram-lib/flow-diagram-lib.component";
12
- import * as i3 from "../../directive/ato-loading.directive";
13
- import * as i4 from "../asset-params-view/asset-params-view.component";
14
- export class AssetFlowComponent {
15
- assetLayer;
16
- gjFlowDiagramTemp;
17
- assetParamsViewTemp;
18
- selectedComponent;
19
- systemType;
20
- onClickParamOfTableEvent = new EventEmitter();
21
- isUseBase64 = false;
22
- isFrom;
23
- $ = go.GraphObject.make;
24
- options = {
25
- layout: this.$(go.LayeredDigraphLayout, {
26
- // direction: 0,
27
- }),
28
- // isReadOnly: true,
29
- };
30
- _flowData;
31
- set flowData(v) {
32
- this._flowData = v;
33
- this.updateDataTableAssetParams({ ...v, assetLayer: this.assetLayer });
34
- }
35
- get flowData() {
36
- return this._flowData;
37
- }
38
- // Reponsive
39
- dataTableAssetParams;
40
- // @Input() isResponsiveView = false;
41
- get isResponsiveView() {
42
- return window.innerWidth < 1024;
43
- }
44
- getFlowDataCallBack;
45
- timeoutResizeWindow;
46
- onResize(event) {
47
- // Now only Support Cooling Tower Responsive
48
- if (this.timeoutResizeWindow) {
49
- clearTimeout(this.timeoutResizeWindow);
50
- }
51
- this.timeoutResizeWindow = setTimeout(() => {
52
- this.updateLocationReponsive();
53
- }, 1000);
54
- }
55
- updateLocationReponsive() {
56
- if (!this.flowData?.nodeDataArray) {
57
- this.flowData = AssetFlowComponent.getDefaultFlowData({
58
- systemType: this.systemType,
59
- isUseBase64: this.isUseBase64,
60
- assetLayer: this.assetLayer,
61
- });
62
- }
63
- _.forEach(this.flowData?.nodeDataArray, (node) => {
64
- node = _.merge(node, node[`extendedData${this.isResponsiveView ? 'Responsive' : ''}`]);
65
- });
66
- this.setFlowData(_.cloneDeep(this.flowData));
67
- }
68
- ngOnInit() {
69
- this.updateLocationReponsive();
70
- }
71
- onClickParamOfTable($event) {
72
- this.onClickParamOfTableEvent.emit($event);
73
- }
74
- static getDefaultFlowData(defaultData) {
75
- const flowData = {
76
- ...defaultData,
77
- ..._.cloneDeep(ATO_COMPONENTS_GROUP_DATA)[defaultData?.systemType],
78
- linkFromPortIdProperty: 'fromPort',
79
- linkToPortIdProperty: 'toPort',
80
- };
81
- const isResponsiveView = window.innerWidth < 1024;
82
- // Reponsive
83
- _.forEach(flowData?.nodeDataArray, (node) => {
84
- const propertyNameExtend = `extendedData${defaultData.isFrom && node?.isFrom ? `isFrom${defaultData.isFrom}` : ''}${isResponsiveView ? 'Responsive' : ''}`;
85
- node = _.merge(node, node[propertyNameExtend]);
86
- if (node?.assetLayers) {
87
- node.visible =
88
- node?.assetLayers === defaultData?.assetLayer &&
89
- node[propertyNameExtend]?.visible;
90
- }
91
- if (defaultData.isFrom && node?.dataTable) {
92
- _.forEach(node?.dataTable, item => {
93
- if (item?.isFrom) {
94
- item.visible = item?.isFrom === defaultData.isFrom;
95
- }
96
- item = _.merge(item, item[`extendedDataIsFrom${defaultData.isFrom}`]);
97
- });
98
- }
99
- });
100
- // assetLayer
101
- // flowData.nodeDataArray = _.filter(flowData.nodeDataArray, x => !x?.assetLayers || (x?.assetLayers && x?.assetLayers === (defaultData?.assetLayer ?? ATO_ASSET_LAYERS.FLOW)))
102
- if (defaultData?.isUseBase64) {
103
- const itemImageTemp = flowData?.nodeDataArray?.find((x) => x?.type === 'Image Template');
104
- if (itemImageTemp) {
105
- itemImageTemp.source = AtoGoJSBase64[defaultData?.systemType];
106
- }
107
- }
108
- return flowData;
109
- }
110
- setFlowData(data) {
111
- _.forEach(data.nodeDataArray, (node) => {
112
- const propertyNameExtend = `extendedData${data.isFrom && node?.isFrom ? `isFrom${data.isFrom}` : ''}${this.isResponsiveView ? 'Responsive' : ''}`;
113
- node = _.merge(node, node[propertyNameExtend]);
114
- if (node?.assetLayers) {
115
- node.visible =
116
- node?.assetLayers === data.assetLayer &&
117
- node[propertyNameExtend]
118
- ?.visible;
119
- }
120
- if (data.isFrom && node?.dataTable) {
121
- _.forEach(node?.dataTable, item => {
122
- if (item?.isFrom) {
123
- item.visible = item?.isFrom === data.isFrom;
124
- }
125
- item = _.merge(item, item[`extendedDataIsFrom${data.isFrom}`]);
126
- });
127
- }
128
- });
129
- this.flowData = {
130
- ...data,
131
- };
132
- this.updateDataTableAssetParams(data);
133
- }
134
- updateDataTableAssetParams(data) {
135
- this.dataTableAssetParams = _.forEach(this.flowData?.nodeDataArray?.filter((e) => e?.type === AtoGojsEditorModel.ENUM_TEMPLATES.PARAM_TABLE &&
136
- (data?.assetLayer ? (e?.assetLayers === data?.assetLayer) : true)), (x) => {
137
- if (!data?.isRefresh) {
138
- x.isCollapsed = this.assetParamsViewTemp?.data?.find((y) => y?.key === x?.key)?.isCollapsed;
139
- }
140
- });
141
- }
142
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: AssetFlowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
143
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: AssetFlowComponent, selector: "ato-asset-flow", inputs: { assetLayer: "assetLayer", selectedComponent: "selectedComponent", systemType: "systemType", isUseBase64: "isUseBase64", isFrom: "isFrom", flowData: "flowData", getFlowDataCallBack: "getFlowDataCallBack" }, outputs: { onClickParamOfTableEvent: "onClickParamOfTableEvent" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "gjFlowDiagramTemp", first: true, predicate: AtoFlowDiagramLibComponent, descendants: true }, { propertyName: "assetParamsViewTemp", first: true, predicate: AtoAssetParamsViewComponent, descendants: true }], ngImport: i0, template: "<div class=\"h-100 d-flex flex-column flex-gap-3 flex-grow-1 overflow-auto px-3 pb-3\">\n <div class=\"h-100 d-flex flex-column\" atoLoading [appLoading]=\"flowData === null\">\n <ato-flow-diagram-lib\n *ngIf=\"flowData !== null\"\n #gjFlowDiagramTemp\n [data]=\"flowData\"\n [initialOptions]=\"options\"\n (onClikParamOfTable)=\"onClickParamOfTable($event)\"\n [class]=\"!!isResponsiveView ? 'diagram-responsive-view' : 'flex-grow-1'\"\n ></ato-flow-diagram-lib>\n <div class=\"mt-2\" *ngIf=\"isResponsiveView\">\n <ato-asset-params-view\n #assetParamsViewTemp\n [data]=\"dataTableAssetParams\"\n [isEditView]=\"true\"\n (clickParamTableRow)=\"onClickParamOfTable($event)\"\n ></ato-asset-params-view>\n </div>\n </div>\n</div>\n\n", styles: [".diagram-responsive-view{height:30vh;min-height:30vh}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.AtoFlowDiagramLibComponent, selector: "ato-flow-diagram-lib", inputs: ["data", "isLoading"] }, { kind: "directive", type: i3.AtoLoadingDirective, selector: "[atoLoading]", inputs: ["appLoading"] }, { kind: "component", type: i4.AtoAssetParamsViewComponent, selector: "ato-asset-params-view", inputs: ["isEditView", "data"], outputs: ["clickParamTableRow"] }] });
144
- }
145
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: AssetFlowComponent, decorators: [{
146
- type: Component,
147
- args: [{ selector: 'ato-asset-flow', template: "<div class=\"h-100 d-flex flex-column flex-gap-3 flex-grow-1 overflow-auto px-3 pb-3\">\n <div class=\"h-100 d-flex flex-column\" atoLoading [appLoading]=\"flowData === null\">\n <ato-flow-diagram-lib\n *ngIf=\"flowData !== null\"\n #gjFlowDiagramTemp\n [data]=\"flowData\"\n [initialOptions]=\"options\"\n (onClikParamOfTable)=\"onClickParamOfTable($event)\"\n [class]=\"!!isResponsiveView ? 'diagram-responsive-view' : 'flex-grow-1'\"\n ></ato-flow-diagram-lib>\n <div class=\"mt-2\" *ngIf=\"isResponsiveView\">\n <ato-asset-params-view\n #assetParamsViewTemp\n [data]=\"dataTableAssetParams\"\n [isEditView]=\"true\"\n (clickParamTableRow)=\"onClickParamOfTable($event)\"\n ></ato-asset-params-view>\n </div>\n </div>\n</div>\n\n", styles: [".diagram-responsive-view{height:30vh;min-height:30vh}\n"] }]
148
- }], propDecorators: { assetLayer: [{
149
- type: Input
150
- }], gjFlowDiagramTemp: [{
151
- type: ViewChild,
152
- args: [AtoFlowDiagramLibComponent]
153
- }], assetParamsViewTemp: [{
154
- type: ViewChild,
155
- args: [AtoAssetParamsViewComponent]
156
- }], selectedComponent: [{
157
- type: Input
158
- }], systemType: [{
159
- type: Input
160
- }], onClickParamOfTableEvent: [{
161
- type: Output
162
- }], isUseBase64: [{
163
- type: Input
164
- }], isFrom: [{
165
- type: Input
166
- }], flowData: [{
167
- type: Input
168
- }], getFlowDataCallBack: [{
169
- type: Input
170
- }], onResize: [{
171
- type: HostListener,
172
- args: ['window:resize', ['$event']]
173
- }] } });
174
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtZmxvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hdG8td2F0ZXItbGliL3NyYy9saWIvY29tcG9uZW50cy9hc3NldC1mbG93L2Fzc2V0LWZsb3cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXRvLXdhdGVyLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvYXNzZXQtZmxvdy9hc3NldC1mbG93LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQixPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFFTCx5QkFBeUIsR0FDMUIsTUFBTSx3Q0FBd0MsQ0FBQztBQUdoRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQzs7Ozs7O0FBTzVGLE1BQU0sT0FBTyxrQkFBa0I7SUFDcEIsVUFBVSxDQUFtQjtJQUV0QyxpQkFBaUIsQ0FBNkI7SUFFOUMsbUJBQW1CLENBQThCO0lBQ3hDLGlCQUFpQixDQUFNO0lBQ3ZCLFVBQVUsQ0FBZ0M7SUFDekMsd0JBQXdCLEdBQ2hDLElBQUksWUFBWSxFQUFPLENBQUM7SUFDakIsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUNwQixNQUFNLENBQVM7SUFDeEIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxX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RkFFMUIsMkJBQTJCLGdEQy9CeEMsZ3pCQXFCQTs7MkZETWEsa0JBQWtCO2tCQUw5QixTQUFTOytCQUNFLGdCQUFnQjs4QkFLakIsVUFBVTtzQkFBbEIsS0FBSztnQkFFTixpQkFBaUI7c0JBRGhCLFNBQVM7dUJBQUMsMEJBQTBCO2dCQUdyQyxtQkFBbUI7c0JBRGxCLFNBQVM7dUJBQUMsMkJBQTJCO2dCQUU3QixpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDSSx3QkFBd0I7c0JBQWpDLE1BQU07Z0JBRUUsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBVU8sUUFBUTtzQkFBcEIsS0FBSztnQkFjRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBSU4sUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIGdvIGZyb20gJ2dvanMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEF0b0dvSlNCYXNlNjQgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvYmFzZTY0LmNvbnN0JztcbmltcG9ydCB7XG4gIEFUT19BU1NFVF9MQVlFUlMsXG4gIEFUT19DT01QT05FTlRTX0dST1VQX0RBVEEsXG59IGZyb20gJy4uLy4uL2NvbnN0YW50cy9jb21wb25lbnRzLWdyb3VwLWNvbnN0JztcbmltcG9ydCB7IEF0b0RlZmF1bHRGbG93RGF0YSB9IGZyb20gJy4uLy4uL21vZGVscy9hdG8tYXNzZXQtZmxvdy5tb2RlbCc7XG5pbXBvcnQgeyBBdG9Hb0pTRGF0YSB9IGZyb20gJy4uLy4uL21vZGVscy9nb2pzLWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgQXRvR29qc0VkaXRvck1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dvanMtZWRpdG9yLm1vZGVsJztcbmltcG9ydCB7IEF0b0Fzc2V0UGFyYW1zVmlld0NvbXBvbmVudCB9IGZyb20gJy4uL2Fzc2V0LXBhcmFtcy12aWV3L2Fzc2V0LXBhcmFtcy12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBdG9GbG93RGlhZ3JhbUxpYkNvbXBvbmVudCB9IGZyb20gJy4uL2Zsb3ctZGlhZ3JhbS1saWIvZmxvdy1kaWFncmFtLWxpYi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhdG8tYXNzZXQtZmxvdycsXG4gIHRlbXBsYXRlVXJsOiAnLi9hc3NldC1mbG93LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXNzZXQtZmxvdy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBBc3NldEZsb3dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBhc3NldExheWVyOiBBVE9fQVNTRVRfTEFZRVJTO1xuICBAVmlld0NoaWxkKEF0b0Zsb3dEaWFncmFtTGliQ29tcG9uZW50KVxuICBnakZsb3dEaWFncmFtVGVtcDogQXRvRmxvd0RpYWdyYW1MaWJDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoQXRvQXNzZXRQYXJhbXNWaWV3Q29tcG9uZW50KVxuICBhc3NldFBhcmFtc1ZpZXdUZW1wOiBBdG9Bc3NldFBhcmFtc1ZpZXdDb21wb25lbnQ7XG4gIEBJbnB1dCgpIHNlbGVjdGVkQ29tcG9uZW50OiBhbnk7XG4gIEBJbnB1dCgpIHN5c3RlbVR5cGU6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RZUEVTO1xuICBAT3V0cHV0KCkgb25DbGlja1BhcmFtT2ZUYWJsZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBJbnB1dCgpIGlzVXNlQmFzZTY0ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzRnJvbTogc3RyaW5nO1xuICAkID0gZ28uR3JhcGhPYmplY3QubWFrZTtcbiAgb3B0aW9ucyA9IHtcbiAgICBsYXlvdXQ6IHRoaXMuJChnby5MYXllcmVkRGlncmFwaExheW91dCwge1xuICAgICAgLy8gZGlyZWN0aW9uOiAwLFxuICAgIH0pLFxuICAgIC8vIGlzUmVhZE9ubHk6IHRydWUsXG4gIH07XG5cbiAgcHJpdmF0ZSBfZmxvd0RhdGE6IGFueTtcbiAgQElucHV0KCkgc2V0IGZsb3dEYXRhKHY6IEF0b0dvSlNEYXRhKSB7XG4gICAgdGhpcy5fZmxvd0RhdGEgPSB2O1xuICAgIHRoaXMudXBkYXRlRGF0YVRhYmxlQXNzZXRQYXJhbXMoeyAuLi52LCBhc3NldExheWVyOiB0aGlzLmFzc2V0TGF5ZXIgfSk7XG4gIH1cbiAgZ2V0IGZsb3dEYXRhKCk6IEF0b0dvSlNEYXRhIHtcbiAgICByZXR1cm4gdGhpcy5fZmxvd0RhdGE7XG4gIH1cblxuICAvLyBSZXBvbnNpdmVcbiAgZGF0YVRhYmxlQXNzZXRQYXJhbXM6IGFueVtdO1xuICAvLyBASW5wdXQoKSBpc1Jlc3BvbnNpdmVWaWV3ID0gZmFsc2U7XG4gIGdldCBpc1Jlc3BvbnNpdmVWaWV3KCkge1xuICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aCA8IDEwMjQ7XG4gIH1cbiAgQElucHV0KCkgZ2V0Rmxvd0RhdGFDYWxsQmFjazogRnVuY3Rpb247XG5cbiAgdGltZW91dFJlc2l6ZVdpbmRvdztcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG4gIG9uUmVzaXplKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIC8vIE5vdyBvbmx5IFN1cHBvcnQgQ29vbGluZyBUb3dlciBSZXNwb25zaXZlXG4gICAgaWYgKHRoaXMudGltZW91dFJlc2l6ZVdpbmRvdykge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dFJlc2l6ZVdpbmRvdyk7XG4gICAgfVxuICAgIHRoaXMudGltZW91dFJlc2l6ZVdpbmRvdyA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVMb2NhdGlvblJlcG9uc2l2ZSgpO1xuICAgIH0sIDEwMDApO1xuICB9XG5cbiAgdXBkYXRlTG9jYXRpb25SZXBvbnNpdmUoKSB7XG4gICAgaWYgKCF0aGlzLmZsb3dEYXRhPy5ub2RlRGF0YUFycmF5KSB7XG4gICAgICB0aGlzLmZsb3dEYXRhID0gQXNzZXRGbG93Q29tcG9uZW50LmdldERlZmF1bHRGbG93RGF0YSh7XG4gICAgICAgIHN5c3RlbVR5cGU6IHRoaXMuc3lzdGVtVHlwZSxcbiAgICAgICAgaXNVc2VCYXNlNjQ6IHRoaXMuaXNVc2VCYXNlNjQsXG4gICAgICAgIGFzc2V0TGF5ZXI6IHRoaXMuYXNzZXRMYXllcixcbiAgICAgIH0pO1xuICAgIH1cbiAgICBfLmZvckVhY2godGhpcy5mbG93RGF0YT8ubm9kZURhdGFBcnJheSwgKG5vZGU6IGFueSkgPT4ge1xuICAgICAgbm9kZSA9IF8ubWVyZ2UoXG4gICAgICAgIG5vZGUsXG4gICAgICAgIG5vZGVbYGV4dGVuZGVkRGF0YSR7dGhpcy5pc1Jlc3BvbnNpdmVWaWV3ID8gJ1Jlc3BvbnNpdmUnIDogJyd9YF1cbiAgICAgICk7XG4gICAgfSk7XG4gICAgdGhpcy5zZXRGbG93RGF0YShfLmNsb25lRGVlcCh0aGlzLmZsb3dEYXRhKSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnVwZGF0ZUxvY2F0aW9uUmVwb25zaXZlKCk7XG4gIH1cbiAgb25DbGlja1BhcmFtT2ZUYWJsZSgkZXZlbnQ6IGFueSkge1xuICAgIHRoaXMub25DbGlja1BhcmFtT2ZUYWJsZUV2ZW50LmVtaXQoJGV2ZW50KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXREZWZhdWx0Rmxvd0RhdGEoZGVmYXVsdERhdGE6IEF0b0RlZmF1bHRGbG93RGF0YSkge1xuICAgIGNvbnN0IGZsb3dEYXRhID0ge1xuICAgICAgLi4uZGVmYXVsdERhdGEsXG4gICAgICAuLi5fLmNsb25lRGVlcChBVE9fQ09NUE9ORU5UU19HUk9VUF9EQVRBKVtkZWZhdWx0RGF0YT8uc3lzdGVtVHlwZV0sXG4gICAgICBsaW5rRnJvbVBvcnRJZFByb3BlcnR5OiAnZnJvbVBvcnQnLFxuICAgICAgbGlua1RvUG9ydElkUHJvcGVydHk6ICd0b1BvcnQnLFxuICAgIH07XG4gICAgY29uc3QgaXNSZXNwb25zaXZlVmlldyA9IHdpbmRvdy5pbm5lcldpZHRoIDwgMTAyNDtcbiAgICAvLyBSZXBvbnNpdmVcbiAgICBfLmZvckVhY2goZmxvd0RhdGE/Lm5vZGVEYXRhQXJyYXksIChub2RlOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHByb3BlcnR5TmFtZUV4dGVuZCA9ICBgZXh0ZW5kZWREYXRhJHtkZWZhdWx0RGF0YS5pc0Zyb20gJiYgbm9kZT8uaXNGcm9tID8gYGlzRnJvbSR7ZGVmYXVsdERhdGEuaXNGcm9tfWAgOiAnJ30ke2lzUmVzcG9uc2l2ZVZpZXcgPyAnUmVzcG9uc2l2ZScgOiAnJ31gO1xuICAgICAgbm9kZSA9IF8ubWVyZ2UoXG4gICAgICAgIG5vZGUsXG4gICAgICAgIG5vZGVbcHJvcGVydHlOYW1lRXh0ZW5kXVxuICAgICAgKTtcbiAgICAgIGlmIChub2RlPy5hc3NldExheWVycykge1xuICAgICAgICBub2RlLnZpc2libGUgPVxuICAgICAgICAgIG5vZGU/LmFzc2V0TGF5ZXJzID09PSBkZWZhdWx0RGF0YT8uYXNzZXRMYXllciAmJlxuICAgICAgICAgIG5vZGVbcHJvcGVydHlOYW1lRXh0ZW5kXT8udmlzaWJsZTtcbiAgICAgIH1cbiAgICAgIGlmIChkZWZhdWx0RGF0YS5pc0Zyb20gJiYgbm9kZT8uZGF0YVRhYmxlKSB7XG4gICAgICAgIF8uZm9yRWFjaChub2RlPy5kYXRhVGFibGUsIGl0ZW0gPT4ge1xuICAgICAgICAgIGlmIChpdGVtPy5pc0Zyb20pIHtcbiAgICAgICAgICAgIGl0ZW0udmlzaWJsZSA9IGl0ZW0/LmlzRnJvbSA9PT0gZGVmYXVsdERhdGEuaXNGcm9tO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpdGVtID0gXy5tZXJnZShcbiAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICBpdGVtW2BleHRlbmRlZERhdGFJc0Zyb20ke2RlZmF1bHREYXRhLmlzRnJvbX1gXVxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSk7XG4gICAgLy8gYXNzZXRMYXllclxuICAgIC8vIGZsb3dEYXRhLm5vZGVEYXRhQXJyYXkgPSBfLmZpbHRlcihmbG93RGF0YS5ub2RlRGF0YUFycmF5LCB4ID0+ICF4Py5hc3NldExheWVycyB8fCAoeD8uYXNzZXRMYXllcnMgJiYgeD8uYXNzZXRMYXllcnMgPT09IChkZWZhdWx0RGF0YT8uYXNzZXRMYXllciA/PyBBVE9fQVNTRVRfTEFZRVJTLkZMT1cpKSlcbiAgICBpZiAoZGVmYXVsdERhdGE/LmlzVXNlQmFzZTY0KSB7XG4gICAgICBjb25zdCBpdGVtSW1hZ2VUZW1wID0gKGZsb3dEYXRhIGFzIEF0b0dvSlNEYXRhKT8ubm9kZURhdGFBcnJheT8uZmluZChcbiAgICAgICAgKHgpID0+IHg/LnR5cGUgPT09ICdJbWFnZSBUZW1wbGF0ZSdcbiAgICAgICk7XG4gICAgICBpZiAoaXRlbUltYWdlVGVtcCkge1xuICAgICAgICBpdGVtSW1hZ2VUZW1wLnNvdXJjZSA9IEF0b0dvSlNCYXNlNjRbZGVmYXVsdERhdGE/LnN5c3RlbVR5cGVdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmxvd0RhdGE7XG4gIH1cblxuICBzZXRGbG93RGF0YShkYXRhOiBBdG9Hb0pTRGF0YSkge1xuICAgIF8uZm9yRWFjaChkYXRhLm5vZGVEYXRhQXJyYXksIChub2RlKSA9PiB7XG4gICAgICBjb25zdCBwcm9wZXJ0eU5hbWVFeHRlbmQgPSAgYGV4dGVuZGVkRGF0YSR7ZGF0YS5pc0Zyb20gJiYgbm9kZT8uaXNGcm9tID8gYGlzRnJvbSR7ZGF0YS5pc0Zyb219YCA6ICcnfSR7dGhpcy5pc1Jlc3BvbnNpdmVWaWV3ID8gJ1Jlc3BvbnNpdmUnIDogJyd9YDtcbiAgICAgIG5vZGUgPSBfLm1lcmdlKFxuICAgICAgICBub2RlLFxuICAgICAgICBub2RlW3Byb3BlcnR5TmFtZUV4dGVuZF0sXG4gICAgICApO1xuICAgICAgaWYgKG5vZGU/LmFzc2V0TGF5ZXJzKSB7XG4gICAgICAgIG5vZGUudmlzaWJsZSA9XG4gICAgICAgICAgbm9kZT8uYXNzZXRMYXllcnMgPT09IGRhdGEuYXNzZXRMYXllciAmJlxuICAgICAgICAgIG5vZGVbcHJvcGVydHlOYW1lRXh0ZW5kXVxuICAgICAgICAgICAgPy52aXNpYmxlO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGEuaXNGcm9tICYmIG5vZGU/LmRhdGFUYWJsZSkge1xuICAgICAgICBfLmZvckVhY2gobm9kZT8uZGF0YVRhYmxlLCBpdGVtID0+IHtcbiAgICAgICAgICBpZiAoaXRlbT8uaXNGcm9tKSB7XG4gICAgICAgICAgICBpdGVtLnZpc2libGUgPSBpdGVtPy5pc0Zyb20gPT09IGRhdGEuaXNGcm9tO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpdGVtID0gXy5tZXJnZShcbiAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICBpdGVtW2BleHRlbmRlZERhdGFJc0Zyb20ke2RhdGEuaXNGcm9tfWBdXG4gICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmZsb3dEYXRhID0ge1xuICAgICAgLi4uZGF0YSxcbiAgICB9O1xuICAgIHRoaXMudXBkYXRlRGF0YVRhYmxlQXNzZXRQYXJhbXMoZGF0YSk7XG4gIH1cblxuICB1cGRhdGVEYXRhVGFibGVBc3NldFBhcmFtcyhkYXRhOiBBdG9Hb0pTRGF0YSkge1xuICAgIHRoaXMuZGF0YVRhYmxlQXNzZXRQYXJhbXMgPSBfLmZvckVhY2goXG4gICAgICB0aGlzLmZsb3dEYXRhPy5ub2RlRGF0YUFycmF5Py5maWx0ZXIoXG4gICAgICAgIChlKSA9PlxuICAgICAgICAgIGU/LnR5cGUgPT09IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5QQVJBTV9UQUJMRSAmJlxuICAgICAgICAgIChkYXRhPy5hc3NldExheWVyID8gKGU/LmFzc2V0TGF5ZXJzID09PSBkYXRhPy5hc3NldExheWVyKSA6IHRydWUpXG4gICAgICApLFxuICAgICAgKHgpID0+IHtcbiAgICAgICAgaWYgKCFkYXRhPy5pc1JlZnJlc2gpIHtcbiAgICAgICAgICB4LmlzQ29sbGFwc2VkID0gdGhpcy5hc3NldFBhcmFtc1ZpZXdUZW1wPy5kYXRhPy5maW5kKFxuICAgICAgICAgICAgKHkpID0+IHk/LmtleSA9PT0geD8ua2V5XG4gICAgICAgICAgKT8uaXNDb2xsYXBzZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiaC0xMDAgZC1mbGV4IGZsZXgtY29sdW1uIGZsZXgtZ2FwLTMgZmxleC1ncm93LTEgb3ZlcmZsb3ctYXV0byBweC0zIHBiLTNcIj5cbiAgPGRpdiBjbGFzcz1cImgtMTAwIGQtZmxleCBmbGV4LWNvbHVtblwiIGF0b0xvYWRpbmcgW2FwcExvYWRpbmddPVwiZmxvd0RhdGEgPT09IG51bGxcIj5cbiAgICA8YXRvLWZsb3ctZGlhZ3JhbS1saWJcbiAgICAgICpuZ0lmPVwiZmxvd0RhdGEgIT09IG51bGxcIlxuICAgICAgI2dqRmxvd0RpYWdyYW1UZW1wXG4gICAgICBbZGF0YV09XCJmbG93RGF0YVwiXG4gICAgICBbaW5pdGlhbE9wdGlvbnNdPVwib3B0aW9uc1wiXG4gICAgICAob25DbGlrUGFyYW1PZlRhYmxlKT1cIm9uQ2xpY2tQYXJhbU9mVGFibGUoJGV2ZW50KVwiXG4gICAgICBbY2xhc3NdPVwiISFpc1Jlc3BvbnNpdmVWaWV3ID8gJ2RpYWdyYW0tcmVzcG9uc2l2ZS12aWV3JyA6ICdmbGV4LWdyb3ctMSdcIlxuICAgID48L2F0by1mbG93LWRpYWdyYW0tbGliPlxuICAgIDxkaXYgY2xhc3M9XCJtdC0yXCIgKm5nSWY9XCJpc1Jlc3BvbnNpdmVWaWV3XCI+XG4gICAgICA8YXRvLWFzc2V0LXBhcmFtcy12aWV3XG4gICAgICAgICNhc3NldFBhcmFtc1ZpZXdUZW1wXG4gICAgICAgIFtkYXRhXT1cImRhdGFUYWJsZUFzc2V0UGFyYW1zXCJcbiAgICAgICAgW2lzRWRpdFZpZXddPVwidHJ1ZVwiXG4gICAgICAgIChjbGlja1BhcmFtVGFibGVSb3cpPVwib25DbGlja1BhcmFtT2ZUYWJsZSgkZXZlbnQpXCJcbiAgICAgID48L2F0by1hc3NldC1wYXJhbXMtdmlldz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuIl19
@@ -1,55 +0,0 @@
1
- import { Component, Input, ViewChild } from '@angular/core';
2
- import { AtoDefaultGojsEditor } from '../../models/default-gojs-editor.model';
3
- import { AtoGojsEditorModel } from '../../models/gojs-editor.model';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/common";
6
- import * as i2 from "../../directive/ato-loading.directive";
7
- export class AtoFlowDiagramLibComponent extends AtoDefaultGojsEditor {
8
- myDiagramDivTemp;
9
- _data = null;
10
- set data(v) {
11
- this._data = v;
12
- this.loadDiagram();
13
- }
14
- isLoading = false;
15
- get data() {
16
- return this._data;
17
- }
18
- constructor(_elRef) {
19
- super(_elRef);
20
- this.actions = [
21
- AtoDefaultGojsEditor.ACTIONS[AtoDefaultGojsEditor.ENUM_ACTIONS.DETAILS],
22
- AtoDefaultGojsEditor.ACTIONS[AtoDefaultGojsEditor.ENUM_ACTIONS.DELETE],
23
- ];
24
- this.unsubscribeAll();
25
- }
26
- ngOnInit() {
27
- this.addSubscribes(this.committedTransactionSubject?.subscribe((e) => {
28
- this.onModelChangeListenerEvent.emit(e);
29
- }));
30
- }
31
- loadDiagram() {
32
- this.editor = new AtoGojsEditorModel({
33
- class: 'go.GraphLinksModel',
34
- nodeCategoryProperty: 'type',
35
- ...this.data,
36
- });
37
- }
38
- findNodeForKey(key) {
39
- this.myDiagram.select(this.myDiagram.findNodeForKey(key));
40
- }
41
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: AtoFlowDiagramLibComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
42
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: AtoFlowDiagramLibComponent, selector: "ato-flow-diagram-lib", inputs: { data: "data", isLoading: "isLoading" }, viewQueries: [{ propertyName: "myDiagramDivTemp", first: true, predicate: ["myDiagramDivTemp"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"w-100 h-100 gj-flow-diagram-wrapper\" atoLoading [appLoading]=\"data === null || !!isLoading\">\n <div class=\"w-100 h-100 d-flex\">\n <!-- <button\n id=\"actionMenuId\"\n class=\"invisible-btn\"\n mat-button\n [matMenuTriggerFor]=\"menu\"\n #menuTrigger=\"matMenuTrigger\"\n ></button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item *ngFor=\"let item of actions\" (click)=\"item?.onClick($event)\">\n <div class=\"d-flex flex-gap-2\">\n <div><i class=\"{{ item?.iconClassName }}\"></i></div>\n <div>{{ item?.name }}</div>\n </div>\n </button>\n </mat-menu> -->\n\n <div #myDiagramDivTemp class=\"flex-grow-1 {{myDiagramDiv}}\"></div>\n <div *ngIf=\"initialOptions?.isReadOnly && !data?.nodeDataArray?.length\" class=\"empty-data\">\n <!-- <nz-empty nzNotFoundImage=\"simple\"></nz-empty> -->\n No Data\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.AtoLoadingDirective, selector: "[atoLoading]", inputs: ["appLoading"] }] });
43
- }
44
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: AtoFlowDiagramLibComponent, decorators: [{
45
- type: Component,
46
- args: [{ selector: 'ato-flow-diagram-lib', template: "<div class=\"w-100 h-100 gj-flow-diagram-wrapper\" atoLoading [appLoading]=\"data === null || !!isLoading\">\n <div class=\"w-100 h-100 d-flex\">\n <!-- <button\n id=\"actionMenuId\"\n class=\"invisible-btn\"\n mat-button\n [matMenuTriggerFor]=\"menu\"\n #menuTrigger=\"matMenuTrigger\"\n ></button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item *ngFor=\"let item of actions\" (click)=\"item?.onClick($event)\">\n <div class=\"d-flex flex-gap-2\">\n <div><i class=\"{{ item?.iconClassName }}\"></i></div>\n <div>{{ item?.name }}</div>\n </div>\n </button>\n </mat-menu> -->\n\n <div #myDiagramDivTemp class=\"flex-grow-1 {{myDiagramDiv}}\"></div>\n <div *ngIf=\"initialOptions?.isReadOnly && !data?.nodeDataArray?.length\" class=\"empty-data\">\n <!-- <nz-empty nzNotFoundImage=\"simple\"></nz-empty> -->\n No Data\n </div>\n </div>\n</div>\n" }]
47
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { myDiagramDivTemp: [{
48
- type: ViewChild,
49
- args: ['myDiagramDivTemp']
50
- }], data: [{
51
- type: Input
52
- }], isLoading: [{
53
- type: Input
54
- }] } });
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy1kaWFncmFtLWxpYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hdG8td2F0ZXItbGliL3NyYy9saWIvY29tcG9uZW50cy9mbG93LWRpYWdyYW0tbGliL2Zsb3ctZGlhZ3JhbS1saWIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXRvLXdhdGVyLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZmxvdy1kaWFncmFtLWxpYi9mbG93LWRpYWdyYW0tbGliLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdoRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7OztBQU9wRSxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsb0JBQW9CO0lBQ3BDLGdCQUFnQixDQUFNO0lBQ3BELEtBQUssR0FBUSxJQUFJLENBQUM7SUFDbEIsSUFBYSxJQUFJLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFUSxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBRTNCLElBQUksSUFBSTtRQUNKLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBRUQsWUFDRSxNQUFrQjtRQUVoQixLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsT0FBTyxHQUFHO1lBQ2Isb0JBQW9CLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUM7WUFDdkUsb0JBQW9CLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7U0FDdkUsQ0FBQztRQUNGLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBSUQsUUFBUTtRQUNKLElBQUksQ0FBQyxhQUFhLENBQ2QsSUFBSSxDQUFDLDJCQUEyQixFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzlDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBT0wsQ0FBQztJQUNOLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGtCQUFrQixDQUFDO1lBQ2pDLEtBQUssRUFBRSxvQkFBb0I7WUFDM0Isb0JBQW9CLEVBQUUsTUFBTTtZQUM1QixHQUFHLElBQUksQ0FBQyxJQUFJO1NBQ2YsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGNBQWMsQ0FBQyxHQUFvQjtRQUMvQixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7dUdBbkRVLDBCQUEwQjsyRkFBMUIsMEJBQTBCLDJQQ1h2QyxtakNBeUJBOzsyRkRkYSwwQkFBMEI7a0JBTHRDLFNBQVM7K0JBQ0Usc0JBQXNCOytFQUtGLGdCQUFnQjtzQkFBOUMsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBRWYsSUFBSTtzQkFBaEIsS0FBSztnQkFLRyxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7IEF0b0RlZmF1bHRHb2pzRWRpdG9yIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2RlZmF1bHQtZ29qcy1lZGl0b3IubW9kZWwnO1xuaW1wb3J0IHsgQXRvR29qc0VkaXRvck1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dvanMtZWRpdG9yLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXRvLWZsb3ctZGlhZ3JhbS1saWInLFxuICB0ZW1wbGF0ZVVybDogJy4vZmxvdy1kaWFncmFtLWxpYi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Zsb3ctZGlhZ3JhbS1saWIuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIEF0b0Zsb3dEaWFncmFtTGliQ29tcG9uZW50IGV4dGVuZHMgQXRvRGVmYXVsdEdvanNFZGl0b3IgaW1wbGVtZW50cyBPbkluaXQgIHtcbiBAVmlld0NoaWxkKCdteURpYWdyYW1EaXZUZW1wJykgbXlEaWFncmFtRGl2VGVtcDogYW55O1xuICBfZGF0YTogYW55ID0gbnVsbDtcbiAgQElucHV0KCkgc2V0IGRhdGEodikge1xuICAgICAgdGhpcy5fZGF0YSA9IHY7XG4gICAgICB0aGlzLmxvYWREaWFncmFtKCk7XG4gIH1cblxuICBASW5wdXQoKSBpc0xvYWRpbmcgPSBmYWxzZTtcblxuICBnZXQgZGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgX2VsUmVmOiBFbGVtZW50UmVmLFxuICApIHtcbiAgICAgIHN1cGVyKF9lbFJlZik7XG4gICAgICB0aGlzLmFjdGlvbnMgPSBbXG4gICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkFDVElPTlNbQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLkRFVEFJTFNdLFxuICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5BQ1RJT05TW0F0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5ERUxFVEVdLFxuICAgICAgXTtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmVBbGwoKTtcbiAgfVxuXG5cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgIHRoaXMuYWRkU3Vic2NyaWJlcyhcbiAgICAgICAgICB0aGlzLmNvbW1pdHRlZFRyYW5zYWN0aW9uU3ViamVjdD8uc3Vic2NyaWJlKChlKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMub25Nb2RlbENoYW5nZUxpc3RlbmVyRXZlbnQuZW1pdChlKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAvLyB0aGlzLl9HalV0aWxzU2VydmljZT8udXBkYXRlTmFtZURhdGFCb3gkPy5zdWJzY3JpYmUoKHJzKSA9PiB7XG4gICAgICAgICAgLy8gICAgIGlmIChycyAmJiBycz8ua2V5KSB7XG4gICAgICAgICAgLy8gICAgICAgICBjb25zdCBub2RlID0gdGhpcy5teURpYWdyYW0uZmluZE5vZGVGb3JLZXkocnM/LmtleSk7XG4gICAgICAgICAgLy8gICAgICAgICB0aGlzLm15RGlhZ3JhbS5tb2RlbC5zZXREYXRhUHJvcGVydHkobm9kZT8uZGF0YSwgJ25hbWUnLCBycz8ubmFtZSk7XG4gICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAvLyB9KSxcbiAgICAgICk7XG4gIH1cblxuICBsb2FkRGlhZ3JhbSgpIHtcbiAgICAgIHRoaXMuZWRpdG9yID0gbmV3IEF0b0dvanNFZGl0b3JNb2RlbCh7XG4gICAgICAgICAgY2xhc3M6ICdnby5HcmFwaExpbmtzTW9kZWwnLFxuICAgICAgICAgIG5vZGVDYXRlZ29yeVByb3BlcnR5OiAndHlwZScsXG4gICAgICAgICAgLi4udGhpcy5kYXRhLFxuICAgICAgfSk7XG4gIH1cblxuICBmaW5kTm9kZUZvcktleShrZXk6IG51bWJlciB8IHN0cmluZykge1xuICAgICAgdGhpcy5teURpYWdyYW0uc2VsZWN0KHRoaXMubXlEaWFncmFtLmZpbmROb2RlRm9yS2V5KGtleSkpO1xuICB9XG59XG5cblxuXG5cblxuIiwiPGRpdiBjbGFzcz1cInctMTAwIGgtMTAwIGdqLWZsb3ctZGlhZ3JhbS13cmFwcGVyXCIgYXRvTG9hZGluZyBbYXBwTG9hZGluZ109XCJkYXRhID09PSBudWxsIHx8ICEhaXNMb2FkaW5nXCI+XG4gICAgPGRpdiBjbGFzcz1cInctMTAwIGgtMTAwIGQtZmxleFwiPlxuICAgICAgICA8IS0tIDxidXR0b25cbiAgICAgICAgICAgIGlkPVwiYWN0aW9uTWVudUlkXCJcbiAgICAgICAgICAgIGNsYXNzPVwiaW52aXNpYmxlLWJ0blwiXG4gICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiXG4gICAgICAgICAgICAjbWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFjdGlvbnNcIiAoY2xpY2spPVwiaXRlbT8ub25DbGljaygkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+PGkgY2xhc3M9XCJ7eyBpdGVtPy5pY29uQ2xhc3NOYW1lIH19XCI+PC9pPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7IGl0ZW0/Lm5hbWUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L21hdC1tZW51PiAtLT5cblxuICAgICAgICA8ZGl2ICNteURpYWdyYW1EaXZUZW1wIGNsYXNzPVwiZmxleC1ncm93LTEge3tteURpYWdyYW1EaXZ9fVwiPjwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaW5pdGlhbE9wdGlvbnM/LmlzUmVhZE9ubHkgJiYgIWRhdGE/Lm5vZGVEYXRhQXJyYXk/Lmxlbmd0aFwiIGNsYXNzPVwiZW1wdHktZGF0YVwiPlxuICAgICAgICAgICAgPCEtLSA8bnotZW1wdHkgbnpOb3RGb3VuZEltYWdlPVwic2ltcGxlXCI+PC9uei1lbXB0eT4gLS0+XG4gICAgICAgICAgICBObyBEYXRhXG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=