@magic-xpa/angular 4.1100.0-dev4110.20 → 4.1100.0-dev4110.203

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/{esm2020 → esm2022}/index.mjs +59 -59
  2. package/{esm2020 → esm2022}/magic-xpa-angular.mjs +1 -1
  3. package/esm2022/src/controls.metadata.model.mjs +183 -0
  4. package/{esm2020 → esm2022}/src/interfaces/sub-form-definition.iterface.mjs +1 -1
  5. package/{esm2020 → esm2022}/src/magic.core.module.mjs +159 -160
  6. package/{esm2020 → esm2022}/src/services/ISubformMagicService.mjs +1 -1
  7. package/esm2022/src/services/OverlayWindowService.mjs +244 -0
  8. package/esm2022/src/services/StylesMapManager.mjs +28 -0
  9. package/esm2022/src/services/accessor.magic.service.mjs +358 -0
  10. package/esm2022/src/services/commands-collector.magic.service.mjs +47 -0
  11. package/esm2022/src/services/component-list.magic.service.mjs +45 -0
  12. package/{esm2020 → esm2022}/src/services/confirmation.components.magic.provider.mjs +21 -21
  13. package/esm2022/src/services/engine.magic.service.mjs +80 -0
  14. package/{esm2020 → esm2022}/src/services/exit.magic.service.mjs +13 -13
  15. package/esm2022/src/services/magic-color.service.mjs +101 -0
  16. package/{esm2020 → esm2022}/src/services/magic.lazy.loader.service.mjs +16 -16
  17. package/{esm2020 → esm2022}/src/services/magic.providers.mjs +24 -24
  18. package/esm2022/src/services/magic.services.mjs +36 -0
  19. package/esm2022/src/services/mg-date-adapter.mjs +108 -0
  20. package/{esm2020 → esm2022}/src/services/overlay.conainer.magic.provider.mjs +14 -14
  21. package/esm2022/src/services/router-commands.magic.service.mjs +31 -0
  22. package/esm2022/src/services/subform.magic.service.mjs +194 -0
  23. package/esm2022/src/services/table.magic.service.mjs +81 -0
  24. package/esm2022/src/services/task.magics.service.mjs +637 -0
  25. package/esm2022/src/services/title.magic.service.mjs +19 -0
  26. package/esm2022/src/ui/GuiInteractiveExecutor.mjs +109 -0
  27. package/esm2022/src/ui/components/base-magic-alert.component.mjs +24 -0
  28. package/esm2022/src/ui/components/base-magic-confirm.component.mjs +24 -0
  29. package/esm2022/src/ui/components/magic-alert.component.mjs +36 -0
  30. package/esm2022/src/ui/components/magic-confirmation-box.component.mjs +42 -0
  31. package/esm2022/src/ui/directives/NonMagicControlDirective.mjs +58 -0
  32. package/esm2022/src/ui/directives/magic/checkbox-noformcontrol.magic.directive.mjs +29 -0
  33. package/esm2022/src/ui/directives/magic/checkbox.magic.directive.mjs +29 -0
  34. package/esm2022/src/ui/directives/magic/combobox.magic.directive.mjs +37 -0
  35. package/esm2022/src/ui/directives/magic/form-controls/control-value-accessors/checkbox.cva.directive.mjs +27 -0
  36. package/esm2022/src/ui/directives/magic/form-controls/control-value-accessors/date.cva.directive.mjs +85 -0
  37. package/esm2022/src/ui/directives/magic/form-controls/control-value-accessors/default.cva.directive.mjs +32 -0
  38. package/esm2022/src/ui/directives/magic/input.noformcontrol.magic.directive.mjs +28 -0
  39. package/esm2022/src/ui/directives/magic/nocontrol.magic.directive.mjs +193 -0
  40. package/esm2022/src/ui/directives/magic/row.magic.directive.mjs +62 -0
  41. package/esm2022/src/ui/directives/magic-focus.directive.mjs +20 -0
  42. package/esm2022/src/ui/directives/magic.directive.mjs +229 -0
  43. package/esm2022/src/ui/directives/magicViewContainerRef.directive.mjs +20 -0
  44. package/esm2022/src/ui/directives/mgformat.magic.directive.mjs +578 -0
  45. package/esm2022/src/ui/directives/range-validator.magic.directive.mjs +60 -0
  46. package/{esm2020 → esm2022}/src/ui/magic-confirmationBox.mjs +42 -42
  47. package/{esm2020 → esm2022}/src/ui/magic-modal/base-magic-overlay-container.mjs +22 -22
  48. package/esm2022/src/ui/magic-modal/magic-modal-form.mjs +6 -0
  49. package/{esm2020 → esm2022}/src/ui/magic-modal/magic-modal-interface.mjs +1 -1
  50. package/esm2022/src/ui/magic-modal/magic-overlay-container-wrapper.mjs +124 -0
  51. package/esm2022/src/ui/magic-modal/magic-overlay-container.mjs +162 -0
  52. package/esm2022/src/ui/magic-root.component.mjs +216 -0
  53. package/esm2022/src/ui/mgerror.magic.component.mjs +125 -0
  54. package/esm2022/src/ui/pipes/date.magic.pipe.mjs +106 -0
  55. package/esm2022/src/ui/pipes/time.magic.pipe.mjs +52 -0
  56. package/esm2022/src/ui/pipes/time24.magic.pipe.mjs +35 -0
  57. package/esm2022/src/ui/router-container.magic.component.mjs +115 -0
  58. package/{esm2020 → esm2022}/src/ui/subform.magic.component.mjs +50 -46
  59. package/esm2022/src/ui/task-base.magic.component.mjs +91 -0
  60. package/esm2022/src/ui/utils.mjs +54 -0
  61. package/{fesm2020 → fesm2022}/magic-xpa-angular.mjs +4807 -4443
  62. package/fesm2022/magic-xpa-angular.mjs.map +1 -0
  63. package/index.d.ts +58 -58
  64. package/package.json +7 -13
  65. package/src/controls.metadata.model.d.ts +62 -62
  66. package/src/interfaces/sub-form-definition.iterface.d.ts +12 -12
  67. package/src/magic.core.module.d.ts +41 -41
  68. package/src/services/ISubformMagicService.d.ts +4 -4
  69. package/src/services/OverlayWindowService.d.ts +30 -25
  70. package/src/services/StylesMapManager.d.ts +5 -5
  71. package/src/services/accessor.magic.service.d.ts +69 -69
  72. package/src/services/commands-collector.magic.service.d.ts +15 -15
  73. package/src/services/component-list.magic.service.d.ts +23 -23
  74. package/src/services/confirmation.components.magic.provider.d.ts +8 -8
  75. package/src/services/engine.magic.service.d.ts +27 -27
  76. package/src/services/exit.magic.service.d.ts +6 -6
  77. package/src/services/magic-color.service.d.ts +19 -19
  78. package/src/services/magic.lazy.loader.service.d.ts +6 -6
  79. package/src/services/magic.providers.d.ts +107 -107
  80. package/src/services/magic.services.d.ts +16 -16
  81. package/src/services/mg-date-adapter.d.ts +38 -40
  82. package/src/services/overlay.conainer.magic.provider.d.ts +7 -7
  83. package/src/services/router-commands.magic.service.d.ts +17 -17
  84. package/src/services/subform.magic.service.d.ts +43 -43
  85. package/src/services/table.magic.service.d.ts +30 -30
  86. package/src/services/task.magics.service.d.ts +100 -100
  87. package/src/services/title.magic.service.d.ts +9 -9
  88. package/src/ui/GuiInteractiveExecutor.d.ts +22 -21
  89. package/src/ui/components/base-magic-alert.component.d.ts +10 -10
  90. package/src/ui/components/base-magic-confirm.component.d.ts +10 -10
  91. package/src/ui/components/magic-alert.component.d.ts +6 -6
  92. package/src/ui/components/magic-confirmation-box.component.d.ts +6 -6
  93. package/src/ui/directives/NonMagicControlDirective.d.ts +26 -26
  94. package/src/ui/directives/magic/checkbox-noformcontrol.magic.directive.d.ts +9 -9
  95. package/src/ui/directives/magic/checkbox.magic.directive.d.ts +9 -9
  96. package/src/ui/directives/magic/combobox.magic.directive.d.ts +10 -10
  97. package/src/ui/directives/magic/form-controls/control-value-accessors/checkbox.cva.directive.d.ts +7 -7
  98. package/src/ui/directives/magic/form-controls/control-value-accessors/date.cva.directive.d.ts +23 -17
  99. package/src/ui/directives/magic/form-controls/control-value-accessors/default.cva.directive.d.ts +7 -7
  100. package/src/ui/directives/magic/input.noformcontrol.magic.directive.d.ts +9 -9
  101. package/src/ui/directives/magic/nocontrol.magic.directive.d.ts +18 -18
  102. package/src/ui/directives/magic/row.magic.directive.d.ts +17 -17
  103. package/src/ui/directives/magic-focus.directive.d.ts +9 -9
  104. package/src/ui/directives/magic.directive.d.ts +44 -44
  105. package/src/ui/directives/magicViewContainerRef.directive.d.ts +8 -8
  106. package/src/ui/directives/mgformat.magic.directive.d.ts +38 -31
  107. package/src/ui/directives/range-validator.magic.directive.d.ts +17 -17
  108. package/src/ui/magic-confirmationBox.d.ts +6 -6
  109. package/src/ui/magic-modal/base-magic-overlay-container.d.ts +5 -5
  110. package/src/ui/magic-modal/magic-modal-form.d.ts +5 -5
  111. package/src/ui/magic-modal/magic-modal-interface.d.ts +10 -10
  112. package/src/ui/magic-modal/magic-overlay-container-wrapper.d.ts +30 -31
  113. package/src/ui/magic-modal/magic-overlay-container.d.ts +24 -25
  114. package/src/ui/magic-root.component.d.ts +40 -40
  115. package/src/ui/mgerror.magic.component.d.ts +20 -20
  116. package/src/ui/pipes/date.magic.pipe.d.ts +17 -17
  117. package/src/ui/pipes/time.magic.pipe.d.ts +11 -11
  118. package/src/ui/pipes/time24.magic.pipe.d.ts +10 -10
  119. package/src/ui/router-container.magic.component.d.ts +29 -30
  120. package/src/ui/subform.magic.component.d.ts +16 -16
  121. package/src/ui/task-base.magic.component.d.ts +34 -34
  122. package/src/ui/utils.d.ts +9 -9
  123. package/esm2020/src/controls.metadata.model.mjs +0 -180
  124. package/esm2020/src/services/OverlayWindowService.mjs +0 -208
  125. package/esm2020/src/services/StylesMapManager.mjs +0 -28
  126. package/esm2020/src/services/accessor.magic.service.mjs +0 -356
  127. package/esm2020/src/services/commands-collector.magic.service.mjs +0 -46
  128. package/esm2020/src/services/component-list.magic.service.mjs +0 -46
  129. package/esm2020/src/services/engine.magic.service.mjs +0 -82
  130. package/esm2020/src/services/magic-color.service.mjs +0 -99
  131. package/esm2020/src/services/magic.services.mjs +0 -31
  132. package/esm2020/src/services/mg-date-adapter.mjs +0 -109
  133. package/esm2020/src/services/router-commands.magic.service.mjs +0 -28
  134. package/esm2020/src/services/subform.magic.service.mjs +0 -184
  135. package/esm2020/src/services/table.magic.service.mjs +0 -77
  136. package/esm2020/src/services/task.magics.service.mjs +0 -624
  137. package/esm2020/src/services/title.magic.service.mjs +0 -18
  138. package/esm2020/src/ui/GuiInteractiveExecutor.mjs +0 -98
  139. package/esm2020/src/ui/components/base-magic-alert.component.mjs +0 -23
  140. package/esm2020/src/ui/components/base-magic-confirm.component.mjs +0 -23
  141. package/esm2020/src/ui/components/magic-alert.component.mjs +0 -35
  142. package/esm2020/src/ui/components/magic-confirmation-box.component.mjs +0 -41
  143. package/esm2020/src/ui/directives/NonMagicControlDirective.mjs +0 -49
  144. package/esm2020/src/ui/directives/magic/checkbox-noformcontrol.magic.directive.mjs +0 -28
  145. package/esm2020/src/ui/directives/magic/checkbox.magic.directive.mjs +0 -28
  146. package/esm2020/src/ui/directives/magic/combobox.magic.directive.mjs +0 -36
  147. package/esm2020/src/ui/directives/magic/form-controls/control-value-accessors/checkbox.cva.directive.mjs +0 -27
  148. package/esm2020/src/ui/directives/magic/form-controls/control-value-accessors/date.cva.directive.mjs +0 -52
  149. package/esm2020/src/ui/directives/magic/form-controls/control-value-accessors/default.cva.directive.mjs +0 -32
  150. package/esm2020/src/ui/directives/magic/input.noformcontrol.magic.directive.mjs +0 -27
  151. package/esm2020/src/ui/directives/magic/nocontrol.magic.directive.mjs +0 -193
  152. package/esm2020/src/ui/directives/magic/row.magic.directive.mjs +0 -58
  153. package/esm2020/src/ui/directives/magic-focus.directive.mjs +0 -19
  154. package/esm2020/src/ui/directives/magic.directive.mjs +0 -215
  155. package/esm2020/src/ui/directives/magicViewContainerRef.directive.mjs +0 -19
  156. package/esm2020/src/ui/directives/mgformat.magic.directive.mjs +0 -408
  157. package/esm2020/src/ui/directives/range-validator.magic.directive.mjs +0 -58
  158. package/esm2020/src/ui/magic-modal/magic-modal-form.mjs +0 -8
  159. package/esm2020/src/ui/magic-modal/magic-overlay-container-wrapper.mjs +0 -121
  160. package/esm2020/src/ui/magic-modal/magic-overlay-container.mjs +0 -159
  161. package/esm2020/src/ui/magic-root.component.mjs +0 -203
  162. package/esm2020/src/ui/mgerror.magic.component.mjs +0 -119
  163. package/esm2020/src/ui/pipes/date.magic.pipe.mjs +0 -105
  164. package/esm2020/src/ui/pipes/time.magic.pipe.mjs +0 -51
  165. package/esm2020/src/ui/pipes/time24.magic.pipe.mjs +0 -34
  166. package/esm2020/src/ui/router-container.magic.component.mjs +0 -108
  167. package/esm2020/src/ui/task-base.magic.component.mjs +0 -86
  168. package/esm2020/src/ui/utils.mjs +0 -54
  169. package/fesm2015/magic-xpa-angular.mjs +0 -4832
  170. package/fesm2015/magic-xpa-angular.mjs.map +0 -1
  171. package/fesm2020/magic-xpa-angular.mjs.map +0 -1
@@ -1,40 +1,40 @@
1
- import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, TemplateRef, ViewContainerRef } from '@angular/core';
2
- import { GuiCommand } from '@magic-xpa/gui';
3
- import { Title } from '@angular/platform-browser';
4
- import { EngineMagicService } from '../services/engine.magic.service';
5
- import { ComponentListMagicService } from '../services/component-list.magic.service';
6
- import { ExitMagicService } from '../services/exit.magic.service';
7
- import { OverlayWindowService } from '../services/OverlayWindowService';
8
- import { IMagicViewContainerRef } from '../..';
9
- import { CommandsCollectorMagicService } from '../services/commands-collector.magic.service';
10
- import { HttpClient } from '@angular/common/http';
11
- import * as i0 from "@angular/core";
12
- export declare class MagicShellComponent implements AfterViewInit, IMagicViewContainerRef {
13
- protected engineMagicService: EngineMagicService;
14
- protected componentList: ComponentListMagicService;
15
- protected changeDetectorRef: ChangeDetectorRef;
16
- private titleService;
17
- private overlayWindowService;
18
- private httpClient;
19
- private pendingCommandsCollector;
20
- exitMagicService: ExitMagicService;
21
- RootComponent: Component;
22
- RootComponentParameters: any;
23
- overlayWindowsContainerViewRef: ViewContainerRef;
24
- rootMagicElementRef: ElementRef;
25
- SpinnerTemplate: TemplateRef<any>;
26
- showSpinner: boolean;
27
- magicEngineTerminated: boolean;
28
- constructor(engineMagicService: EngineMagicService, componentList: ComponentListMagicService, changeDetectorRef: ChangeDetectorRef, titleService: Title, overlayWindowService: OverlayWindowService, httpClient: HttpClient, pendingCommandsCollector: CommandsCollectorMagicService, exitMagicService: ExitMagicService);
29
- onBeforeUnload(event: any): string;
30
- onUnload(event: any): void;
31
- ngAfterViewInit(): void;
32
- setViewContainerRef(vcRef: ViewContainerRef): void;
33
- initialize(): void;
34
- setTitle(): void;
35
- private setComponent;
36
- registerUICommands(): void;
37
- executeCommand(command: GuiCommand): void;
38
- static ɵfac: i0.ɵɵFactoryDeclaration<MagicShellComponent, [null, null, null, null, null, null, null, { optional: true; }]>;
39
- static ɵcmp: i0.ɵɵComponentDeclaration<MagicShellComponent, "magic-root", never, { "SpinnerTemplate": "SpinnerTemplate"; }, {}, never, never, false, never>;
40
- }
1
+ import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, TemplateRef, ViewContainerRef } from '@angular/core';
2
+ import { GuiCommand } from '@magic-xpa/gui';
3
+ import { Title } from '@angular/platform-browser';
4
+ import { EngineMagicService } from '../services/engine.magic.service';
5
+ import { ComponentListMagicService } from '../services/component-list.magic.service';
6
+ import { ExitMagicService } from '../services/exit.magic.service';
7
+ import { OverlayWindowService } from '../services/OverlayWindowService';
8
+ import { IMagicViewContainerRef } from '../..';
9
+ import { CommandsCollectorMagicService } from '../services/commands-collector.magic.service';
10
+ import { HttpClient } from '@angular/common/http';
11
+ import * as i0 from "@angular/core";
12
+ export declare class MagicShellComponent implements AfterViewInit, IMagicViewContainerRef {
13
+ protected engineMagicService: EngineMagicService;
14
+ protected componentList: ComponentListMagicService;
15
+ protected changeDetectorRef: ChangeDetectorRef;
16
+ private titleService;
17
+ private overlayWindowService;
18
+ private httpClient;
19
+ private pendingCommandsCollector;
20
+ exitMagicService: ExitMagicService;
21
+ RootComponent: Component;
22
+ RootComponentParameters: any;
23
+ overlayWindowsContainerViewRef: ViewContainerRef;
24
+ rootMagicElementRef: ElementRef;
25
+ SpinnerTemplate: TemplateRef<any>;
26
+ showSpinner: boolean;
27
+ magicEngineTerminated: boolean;
28
+ constructor(engineMagicService: EngineMagicService, componentList: ComponentListMagicService, changeDetectorRef: ChangeDetectorRef, titleService: Title, overlayWindowService: OverlayWindowService, httpClient: HttpClient, pendingCommandsCollector: CommandsCollectorMagicService, exitMagicService: ExitMagicService);
29
+ onBeforeUnload(event: any): string;
30
+ onUnload(event: any): void;
31
+ ngAfterViewInit(): void;
32
+ setViewContainerRef(vcRef: ViewContainerRef): void;
33
+ initialize(): void;
34
+ setTitle(): void;
35
+ private setComponent;
36
+ registerUICommands(): void;
37
+ executeCommand(command: GuiCommand): void;
38
+ static ɵfac: i0.ɵɵFactoryDeclaration<MagicShellComponent, [null, null, null, null, null, null, null, { optional: true; }]>;
39
+ static ɵcmp: i0.ɵɵComponentDeclaration<MagicShellComponent, "magic-root", never, { "SpinnerTemplate": { "alias": "SpinnerTemplate"; "required": false; }; }, {}, never, never, false, never>;
40
+ }
@@ -1,20 +1,20 @@
1
- import { ChangeDetectorRef, ElementRef } from "@angular/core";
2
- import { AccessorMagicService } from "../services/accessor.magic.service";
3
- import { TaskMagicService } from "../services/task.magics.service";
4
- import * as i0 from "@angular/core";
5
- export declare class ErrorMagicComponent {
6
- protected _task: TaskMagicService;
7
- mgService: AccessorMagicService;
8
- protected changeDetectorRef: ChangeDetectorRef;
9
- id: string;
10
- rowId: string;
11
- set magic(val: any);
12
- set rowId1(val: any);
13
- defaultDisplay: boolean;
14
- set CustomContent(innerComponent: ElementRef);
15
- constructor(_task: TaskMagicService, mgService: AccessorMagicService, changeDetectorRef: ChangeDetectorRef);
16
- isEmpty(element: HTMLElement): boolean;
17
- HasErrors(id: string): boolean;
18
- static ɵfac: i0.ɵɵFactoryDeclaration<ErrorMagicComponent, never>;
19
- static ɵcmp: i0.ɵɵComponentDeclaration<ErrorMagicComponent, "mgError", never, { "magic": "magic"; "rowId1": "rowId"; }, {}, never, ["*"], false, never>;
20
- }
1
+ import { ChangeDetectorRef, ElementRef } from "@angular/core";
2
+ import { AccessorMagicService } from "../services/accessor.magic.service";
3
+ import { TaskMagicService } from "../services/task.magics.service";
4
+ import * as i0 from "@angular/core";
5
+ export declare class ErrorMagicComponent {
6
+ protected _task: TaskMagicService;
7
+ mgService: AccessorMagicService;
8
+ protected changeDetectorRef: ChangeDetectorRef;
9
+ id: string;
10
+ rowId: string;
11
+ set magic(val: any);
12
+ set rowId1(val: any);
13
+ defaultDisplay: boolean;
14
+ set CustomContent(innerComponent: ElementRef);
15
+ constructor(_task: TaskMagicService, mgService: AccessorMagicService, changeDetectorRef: ChangeDetectorRef);
16
+ isEmpty(element: HTMLElement): boolean;
17
+ HasErrors(id: string): boolean;
18
+ static ɵfac: i0.ɵɵFactoryDeclaration<ErrorMagicComponent, never>;
19
+ static ɵcmp: i0.ɵɵComponentDeclaration<ErrorMagicComponent, "mgError", never, { "magic": { "alias": "magic"; "required": false; }; "rowId1": { "alias": "rowId"; "required": false; }; }, {}, never, ["*"], false, never>;
20
+ }
@@ -1,17 +1,17 @@
1
- import { PipeTransform } from '@angular/core';
2
- import { DatePipe } from '@angular/common';
3
- import { TaskMagicService } from '../../services/task.magics.service';
4
- import * as i0 from "@angular/core";
5
- export declare class Constants {
6
- static readonly DATE_FMT = "dd/MMM/yyyy";
7
- }
8
- export declare class DateMagicPipe extends DatePipe implements PipeTransform {
9
- protected _task: TaskMagicService;
10
- constructor(_task: TaskMagicService);
11
- transform(value: any, controlId: string): any;
12
- static ɵfac: i0.ɵɵFactoryDeclaration<DateMagicPipe, never>;
13
- static ɵpipe: i0.ɵɵPipeDeclaration<DateMagicPipe, "magicDate", false>;
14
- }
15
- export declare class MgDateFormatter {
16
- ConvertMgDateFormatToAngular(mgDateMask: string): string;
17
- }
1
+ import { PipeTransform } from '@angular/core';
2
+ import { DatePipe } from '@angular/common';
3
+ import { TaskMagicService } from '../../services/task.magics.service';
4
+ import * as i0 from "@angular/core";
5
+ export declare class Constants {
6
+ static readonly DATE_FMT = "dd/MMM/yyyy";
7
+ }
8
+ export declare class DateMagicPipe extends DatePipe implements PipeTransform {
9
+ protected _task: TaskMagicService;
10
+ constructor(_task: TaskMagicService);
11
+ transform(value: any, controlId: string): any;
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<DateMagicPipe, never>;
13
+ static ɵpipe: i0.ɵɵPipeDeclaration<DateMagicPipe, "magicDate", false>;
14
+ }
15
+ export declare class MgDateFormatter {
16
+ ConvertMgDateFormatToAngular(mgDateMask: string): string;
17
+ }
@@ -1,11 +1,11 @@
1
- import { PipeTransform } from '@angular/core';
2
- import { DatePipe } from '@angular/common';
3
- import { TaskMagicService } from '../../services/task.magics.service';
4
- import * as i0 from "@angular/core";
5
- export declare class TimeMagicPipe extends DatePipe implements PipeTransform {
6
- protected _task: TaskMagicService;
7
- constructor(_task: TaskMagicService);
8
- transform(value: any, controlId: string): any;
9
- static ɵfac: i0.ɵɵFactoryDeclaration<TimeMagicPipe, never>;
10
- static ɵpipe: i0.ɵɵPipeDeclaration<TimeMagicPipe, "magicTime", false>;
11
- }
1
+ import { PipeTransform } from '@angular/core';
2
+ import { DatePipe } from '@angular/common';
3
+ import { TaskMagicService } from '../../services/task.magics.service';
4
+ import * as i0 from "@angular/core";
5
+ export declare class TimeMagicPipe extends DatePipe implements PipeTransform {
6
+ protected _task: TaskMagicService;
7
+ constructor(_task: TaskMagicService);
8
+ transform(value: any, controlId: string): any;
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<TimeMagicPipe, never>;
10
+ static ɵpipe: i0.ɵɵPipeDeclaration<TimeMagicPipe, "magicTime", false>;
11
+ }
@@ -1,10 +1,10 @@
1
- import { PipeTransform } from '@angular/core';
2
- import { TaskMagicService } from "../../services/task.magics.service";
3
- import * as i0 from "@angular/core";
4
- export declare class Time24MagicPipe implements PipeTransform {
5
- protected _task: TaskMagicService;
6
- constructor(_task: TaskMagicService);
7
- transform(value: any, controlId: string): any;
8
- static ɵfac: i0.ɵɵFactoryDeclaration<Time24MagicPipe, never>;
9
- static ɵpipe: i0.ɵɵPipeDeclaration<Time24MagicPipe, "magicTime24", false>;
10
- }
1
+ import { PipeTransform } from '@angular/core';
2
+ import { TaskMagicService } from "../../services/task.magics.service";
3
+ import * as i0 from "@angular/core";
4
+ export declare class Time24MagicPipe implements PipeTransform {
5
+ protected _task: TaskMagicService;
6
+ constructor(_task: TaskMagicService);
7
+ transform(value: any, controlId: string): any;
8
+ static ɵfac: i0.ɵɵFactoryDeclaration<Time24MagicPipe, never>;
9
+ static ɵpipe: i0.ɵɵPipeDeclaration<Time24MagicPipe, "magicTime24", false>;
10
+ }
@@ -1,30 +1,29 @@
1
- import { ComponentFactoryResolver, OnInit, ViewContainerRef } from '@angular/core';
2
- import { ActivatedRoute, Router } from '@angular/router';
3
- import { EngineMagicService } from '../services/engine.magic.service';
4
- import { ComponentListMagicService } from '../services/component-list.magic.service';
5
- import { CommandsCollectorMagicService } from '../services/commands-collector.magic.service';
6
- import { RouterCommandsMagicService } from '../services/router-commands.magic.service';
7
- import { TaskMagicService } from '../services/task.magics.service';
8
- import * as i0 from "@angular/core";
9
- export declare class RouterContainerMagicComponent implements OnInit {
10
- private activatedRoute;
11
- protected router: Router;
12
- protected magic: EngineMagicService;
13
- private containerTaskService;
14
- private componentFactoryResolver;
15
- private viewContainerRef;
16
- private componentList;
17
- protected pendingCommandsCollector: CommandsCollectorMagicService;
18
- protected routerCommandsMagicService: RouterCommandsMagicService;
19
- private componentRef;
20
- private parentMgSubformService;
21
- private static lastRoute;
22
- static get LastRoute(): string;
23
- constructor(activatedRoute: ActivatedRoute, router: Router, magic: EngineMagicService, containerTaskService: TaskMagicService, componentFactoryResolver: ComponentFactoryResolver, viewContainerRef: ViewContainerRef, componentList: ComponentListMagicService, pendingCommandsCollector: CommandsCollectorMagicService, routerCommandsMagicService: RouterCommandsMagicService);
24
- ngOnInit(): void;
25
- private insertRouteEvent;
26
- initializeComponent(): void;
27
- ngOnDestroy(): void;
28
- static ɵfac: i0.ɵɵFactoryDeclaration<RouterContainerMagicComponent, never>;
29
- static ɵcmp: i0.ɵɵComponentDeclaration<RouterContainerMagicComponent, "magic-route-outlet", never, {}, {}, never, never, false, never>;
30
- }
1
+ import { OnInit, ViewContainerRef } from '@angular/core';
2
+ import { ActivatedRoute, Router } from '@angular/router';
3
+ import { EngineMagicService } from '../services/engine.magic.service';
4
+ import { ComponentListMagicService } from '../services/component-list.magic.service';
5
+ import { CommandsCollectorMagicService } from '../services/commands-collector.magic.service';
6
+ import { RouterCommandsMagicService } from '../services/router-commands.magic.service';
7
+ import { TaskMagicService } from '../services/task.magics.service';
8
+ import * as i0 from "@angular/core";
9
+ export declare class RouterContainerMagicComponent implements OnInit {
10
+ private activatedRoute;
11
+ protected router: Router;
12
+ protected magic: EngineMagicService;
13
+ private containerTaskService;
14
+ private viewContainerRef;
15
+ private componentList;
16
+ protected pendingCommandsCollector: CommandsCollectorMagicService;
17
+ protected routerCommandsMagicService: RouterCommandsMagicService;
18
+ private componentRef;
19
+ private parentMgSubformService;
20
+ private static lastRoute;
21
+ static get LastRoute(): string;
22
+ constructor(activatedRoute: ActivatedRoute, router: Router, magic: EngineMagicService, containerTaskService: TaskMagicService, viewContainerRef: ViewContainerRef, componentList: ComponentListMagicService, pendingCommandsCollector: CommandsCollectorMagicService, routerCommandsMagicService: RouterCommandsMagicService);
23
+ ngOnInit(): void;
24
+ private insertRouteEvent;
25
+ initializeComponent(): void;
26
+ ngOnDestroy(): void;
27
+ static ɵfac: i0.ɵɵFactoryDeclaration<RouterContainerMagicComponent, never>;
28
+ static ɵcmp: i0.ɵɵComponentDeclaration<RouterContainerMagicComponent, "magic-route-outlet", never, {}, {}, never, never, false, never>;
29
+ }
@@ -1,16 +1,16 @@
1
- import { Component, ViewContainerRef } from "@angular/core";
2
- import { TaskBaseMagicComponent } from "./task-base.magic.component";
3
- import { SubformMagicService } from "../services/subform.magic.service";
4
- import * as i0 from "@angular/core";
5
- export declare class SubformMagicComponent {
6
- private vcRef;
7
- protected mgSub: SubformMagicService;
8
- id: string;
9
- set magic(val: any);
10
- component: TaskBaseMagicComponent;
11
- constructor(vcRef: ViewContainerRef, mgSub: SubformMagicService);
12
- get Component(): Component;
13
- get Parameters(): any;
14
- static ɵfac: i0.ɵɵFactoryDeclaration<SubformMagicComponent, never>;
15
- static ɵcmp: i0.ɵɵComponentDeclaration<SubformMagicComponent, "magic-subform", never, { "magic": "magic"; }, {}, never, never, false, never>;
16
- }
1
+ import { Component, ViewContainerRef } from "@angular/core";
2
+ import { TaskBaseMagicComponent } from "./task-base.magic.component";
3
+ import { SubformMagicService } from "../services/subform.magic.service";
4
+ import * as i0 from "@angular/core";
5
+ export declare class SubformMagicComponent {
6
+ private vcRef;
7
+ protected mgSub: SubformMagicService;
8
+ id: string;
9
+ set magic(val: any);
10
+ component: TaskBaseMagicComponent;
11
+ constructor(vcRef: ViewContainerRef, mgSub: SubformMagicService);
12
+ get Component(): Component;
13
+ get Parameters(): any;
14
+ static ɵfac: i0.ɵɵFactoryDeclaration<SubformMagicComponent, never>;
15
+ static ɵcmp: i0.ɵɵComponentDeclaration<SubformMagicComponent, "magic-subform", never, { "magic": { "alias": "magic"; "required": false; }; }, {}, never, never, false, never>;
16
+ }
@@ -1,34 +1,34 @@
1
- import { AfterViewInit, ChangeDetectorRef, OnDestroy, OnInit } from '@angular/core';
2
- import { FormGroup } from '@angular/forms';
3
- import { MagicProperties } from "@magic-xpa/utils";
4
- import { TaskMagicService } from "../services/task.magics.service";
5
- import { SubformMagicService } from "../services/subform.magic.service";
6
- import { TableMagicService } from "../services/table.magic.service";
7
- import { MagicServices } from "../services/magic.services";
8
- import { AccessorMagicService } from "../services/accessor.magic.service";
9
- import * as i0 from "@angular/core";
10
- export declare class TaskBaseMagicComponent implements OnInit, OnDestroy, AfterViewInit {
11
- protected ref: ChangeDetectorRef;
12
- magicServices: MagicServices;
13
- taskIdParam: string;
14
- taskDescription: string;
15
- magicProperties: typeof MagicProperties;
16
- constructor(ref: ChangeDetectorRef, magicServices: MagicServices);
17
- get task(): TaskMagicService;
18
- get mgSub(): SubformMagicService;
19
- get tableService(): TableMagicService;
20
- get mg(): AccessorMagicService;
21
- get taskId(): string;
22
- get screenFormGroup(): FormGroup;
23
- ngOnInit(): void;
24
- createFormControlsAccessor(formGroup: FormGroup): void;
25
- setInputDateFormat(): void;
26
- PropertyChanged(propertyName: string, rowId: number, value: any): void;
27
- RecordsCountChanged(recordsCount: number): void;
28
- mgOnLoad(): void;
29
- ngAfterViewInit(): void;
30
- ngAfterContentChecked(): void;
31
- ngOnDestroy(): void;
32
- static ɵfac: i0.ɵɵFactoryDeclaration<TaskBaseMagicComponent, never>;
33
- static ɵcmp: i0.ɵɵComponentDeclaration<TaskBaseMagicComponent, "task-magic", never, { "taskIdParam": "taskIdParam"; "taskDescription": "taskDescription"; }, {}, never, never, false, never>;
34
- }
1
+ import { AfterViewInit, ChangeDetectorRef, OnDestroy, OnInit } from '@angular/core';
2
+ import { FormGroup } from '@angular/forms';
3
+ import { MagicProperties } from "@magic-xpa/utils";
4
+ import { TaskMagicService } from "../services/task.magics.service";
5
+ import { SubformMagicService } from "../services/subform.magic.service";
6
+ import { TableMagicService } from "../services/table.magic.service";
7
+ import { MagicServices } from "../services/magic.services";
8
+ import { AccessorMagicService } from "../services/accessor.magic.service";
9
+ import * as i0 from "@angular/core";
10
+ export declare class TaskBaseMagicComponent implements OnInit, OnDestroy, AfterViewInit {
11
+ protected ref: ChangeDetectorRef;
12
+ magicServices: MagicServices;
13
+ taskIdParam: string;
14
+ taskDescription: string;
15
+ magicProperties: typeof MagicProperties;
16
+ constructor(ref: ChangeDetectorRef, magicServices: MagicServices);
17
+ get task(): TaskMagicService;
18
+ get mgSub(): SubformMagicService;
19
+ get tableService(): TableMagicService;
20
+ get mg(): AccessorMagicService;
21
+ get taskId(): string;
22
+ get screenFormGroup(): FormGroup;
23
+ ngOnInit(): void;
24
+ createFormControlsAccessor(formGroup: FormGroup): void;
25
+ setInputDateFormat(): void;
26
+ PropertyChanged(propertyName: string, rowId: number, value: any): void;
27
+ RecordsCountChanged(recordsCount: number): void;
28
+ mgOnLoad(): void;
29
+ ngAfterViewInit(): void;
30
+ ngAfterContentChecked(): void;
31
+ ngOnDestroy(): void;
32
+ static ɵfac: i0.ɵɵFactoryDeclaration<TaskBaseMagicComponent, never>;
33
+ static ɵcmp: i0.ɵɵComponentDeclaration<TaskBaseMagicComponent, "task-magic", never, { "taskIdParam": { "alias": "taskIdParam"; "required": false; }; "taskDescription": { "alias": "taskDescription"; "required": false; }; }, {}, never, never, false, never>;
34
+ }
package/src/ui/utils.d.ts CHANGED
@@ -1,9 +1,9 @@
1
- export declare class utils {
2
- static getDistance(control: Element, x: number, y: number): number;
3
- static getDimentions(el: any): {
4
- x: number;
5
- y: number;
6
- width: any;
7
- height: any;
8
- };
9
- }
1
+ export declare class utils {
2
+ static getDistance(control: Element, x: number, y: number): number;
3
+ static getDimentions(el: any): {
4
+ x: number;
5
+ y: number;
6
+ width: any;
7
+ height: any;
8
+ };
9
+ }
@@ -1,180 +0,0 @@
1
- import { isNullOrUndefined } from "@magic-xpa/mscorelib";
2
- export class ControlMetadata {
3
- constructor() {
4
- this.properties = new Map();
5
- this.classesMap = new Map();
6
- this.stylesMap = new Map();
7
- this.userProperties = new Map();
8
- this.customValidators = new Map();
9
- }
10
- setClass(key, value) {
11
- if (this.classesMap.has(key)) {
12
- this.removedClass = this.classesMap.get(key);
13
- }
14
- this.classesMap.set(key, value);
15
- let result = '';
16
- for (let value of this.classesMap) {
17
- result += value + ' ';
18
- }
19
- this.classes = result;
20
- }
21
- setStyle(key, value) {
22
- this.stylesMap.set(key, value);
23
- }
24
- }
25
- export class ControlsMetadata {
26
- constructor() {
27
- this.values = new Map();
28
- this.ControlsProperties = new Map();
29
- this.isCreated = false;
30
- this.isEditing = false;
31
- }
32
- get Values() {
33
- return this.values;
34
- }
35
- getControlMetadata(controlId) {
36
- if (!this.ControlsProperties.has(controlId))
37
- this.ControlsProperties.set(controlId, new ControlMetadata());
38
- return this.ControlsProperties.get(controlId);
39
- }
40
- update(obj) {
41
- let props = obj.ControlsMetaData;
42
- for (let controlName in props) {
43
- if (!this.ControlsProperties.has(controlName))
44
- this.ControlsProperties.set(controlName, new ControlMetadata());
45
- let controlMetaData = this.ControlsProperties.get(controlName);
46
- for (let property in obj.ControlsMetaData[controlName].Properties)
47
- controlMetaData[property] = obj.ControlsMetaData[controlName].Properties[property];
48
- controlMetaData.controlType = obj.ControlsMetaData[controlName].Type;
49
- }
50
- for (let controlName in obj.ControlsValues) {
51
- this.setValue(controlName, obj.ControlsValues[controlName]);
52
- }
53
- }
54
- setValue(controlName, value) {
55
- this.values.set(controlName, value);
56
- }
57
- getProperty(controlId, prop) {
58
- if (this.ControlsProperties.has(controlId)) {
59
- if (this.ControlsProperties.get(controlId).properties.has(prop)) {
60
- return this.ControlsProperties.get(controlId).properties.get(prop);
61
- }
62
- }
63
- return "";
64
- }
65
- getValue(controlName) {
66
- return this.values.get(controlName);
67
- }
68
- }
69
- export class Records {
70
- constructor() {
71
- this.data = new Map();
72
- this.list = [];
73
- this.recordsBeforeCurrentView = 0;
74
- this.isEmptyDataView = false;
75
- this.sizeUpdated = false;
76
- }
77
- getRow(dvRowId) {
78
- return this.list[dvRowId + this.recordsBeforeCurrentView];
79
- }
80
- markRowAsCreated(guiRowId) {
81
- if (guiRowId < this.list.length) {
82
- this.addRow(guiRowId);
83
- this.data.get(guiRowId).isCreated = true;
84
- }
85
- }
86
- markRowAsNotCreated(guiRowId) {
87
- if (guiRowId < this.list.length)
88
- this.data.get(guiRowId).isCreated = false;
89
- }
90
- isRowCreated(guiRowId) {
91
- if (guiRowId < this.list.length) {
92
- if (!this.data.has(guiRowId) || isNullOrUndefined(this.data.get(guiRowId)))
93
- return false;
94
- else
95
- return this.data.get(guiRowId).isCreated;
96
- }
97
- return false;
98
- }
99
- startRowEditing(guiRowId) {
100
- if (guiRowId < this.list.length && this.data.has(guiRowId))
101
- this.data.get(guiRowId).isEditing = true;
102
- }
103
- stopRowEditing(guiRowId) {
104
- if (guiRowId < this.list.length && this.data.has(guiRowId))
105
- this.data.get(guiRowId).isEditing = false;
106
- }
107
- isRowInRowEditing(guiRowId) {
108
- if (+guiRowId < this.list.length) {
109
- if (!this.data.has(+guiRowId) || isNullOrUndefined(this.data.get(+guiRowId)))
110
- return false;
111
- else
112
- return this.data.get(+guiRowId).isEditing;
113
- }
114
- return false;
115
- }
116
- update(obj) {
117
- if (obj.fullRefresh && obj.rows.length != this.list.length) {
118
- this.data = new Map();
119
- this.list = new Array();
120
- }
121
- for (let rowId in obj.rows) {
122
- if (!this.data.has(+rowId) || this.data.get(+rowId) === null)
123
- this.data.set(+rowId, new ControlsMetadata());
124
- let controlsData = this.data.get(+rowId);
125
- controlsData.update(obj.rows[rowId]);
126
- controlsData.rowId = rowId;
127
- }
128
- for (var [key, value] of this.data) {
129
- this.list[key] = value;
130
- }
131
- }
132
- updateSize(len) {
133
- if (this.list.length != len) {
134
- if (len < this.list.length) {
135
- for (let i = len; i < this.list.length; i++) {
136
- this.data.delete(i);
137
- }
138
- }
139
- this.list.length = len;
140
- this.sizeUpdated = true;
141
- }
142
- }
143
- clearFirstTableRecord(template) {
144
- if (this.list.length >= 1) {
145
- for (const key in template) {
146
- if (template[key] == '1' && this.list[0].ControlsProperties.has(key)) {
147
- this.list[0].ControlsProperties.get(key).properties = new Map();
148
- }
149
- }
150
- }
151
- }
152
- addRow(guiRowId) {
153
- if (guiRowId !== 0 || !this.data.has(guiRowId) || isNullOrUndefined(this.data.get(guiRowId))) {
154
- this.data.set(guiRowId, new ControlsMetadata());
155
- this.data.get(guiRowId).rowId = "" + guiRowId;
156
- this.list[guiRowId] = this.data.get(guiRowId);
157
- }
158
- }
159
- createFirst() {
160
- this.addRow(0);
161
- }
162
- fromJson(data) {
163
- var obj = JSON.parse(data);
164
- this.update(obj);
165
- }
166
- setGuiTopIndex(topIndex) {
167
- this.guiTopIndex = topIndex;
168
- }
169
- getGuiTopIndex() {
170
- return this.guiTopIndex;
171
- }
172
- }
173
- export var HtmlClasses;
174
- (function (HtmlClasses) {
175
- HtmlClasses["Color"] = "color";
176
- HtmlClasses["font"] = "font";
177
- HtmlClasses["FocusColor"] = "focuscolor";
178
- HtmlClasses["HintColor"] = "hintcolor";
179
- })(HtmlClasses || (HtmlClasses = {}));
180
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbHMubWV0YWRhdGEubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyL3NyYy9jb250cm9scy5tZXRhZGF0YS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQU16RCxNQUFNLE9BQU8sZUFBZTtJQUE1QjtRQUdFLGVBQVUsR0FBNkIsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNqRCxlQUFVLEdBQTBCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDOUMsY0FBUyxHQUEwQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBTTdDLG1CQUFjLEdBQXFCLElBQUksR0FBRyxFQUFFLENBQUM7UUFFN0MscUJBQWdCLEdBQWlDLElBQUksR0FBRyxFQUFFLENBQUM7SUFzQjdELENBQUM7SUFwQkMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLO1FBRWpCLElBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM5QztRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNoQyxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFFaEIsS0FBSyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pDLE1BQU0sSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDO1NBQ3ZCO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFFeEIsQ0FBQztJQUVELFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSztRQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUs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QUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQsY0FBYyxDQUFDLFFBQWdCO1FBQzdCLElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDO0lBQzlCLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7Q0FFRjtBQUtELE1BQU0sQ0FBTixJQUFZLFdBS1g7QUFMRCxXQUFZLFdBQVc7SUFDckIsOEJBQWUsQ0FBQTtJQUNmLDRCQUFhLENBQUE7SUFDYix3Q0FBdUIsQ0FBQTtJQUN2QixzQ0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBTFcsV0FBVyxLQUFYLFdBQVcsUUFLdEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1N0b3JhZ2VBdHRyaWJ1dGV9IGZyb20gXCJAbWFnaWMteHBhL3V0aWxzXCI7XHJcbmltcG9ydCB7IGlzTnVsbE9yVW5kZWZpbmVkIH0gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcbmltcG9ydCB7SHRtbFByb3BlcnRpZXMsIEN1c3RvbVZhbGlkYXRvcn0gZnJvbSAgXCJAbWFnaWMteHBhL2d1aVwiO1xyXG5cclxuLyoqXHJcbiAqIEBpZ25vcmVcclxuICovXHJcbmV4cG9ydCBjbGFzcyBDb250cm9sTWV0YWRhdGEge1xyXG4gIGNvbnRyb2xUeXBlOiBzdHJpbmc7XHJcbiAgZGF0YVR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGU7XHJcbiAgcHJvcGVydGllczogTWFwPEh0bWxQcm9wZXJ0aWVzLCBhbnk+ID0gbmV3IE1hcCgpO1xyXG4gIGNsYXNzZXNNYXA6IE1hcDxIdG1sQ2xhc3NlcywgYW55PiA9IG5ldyBNYXAoKTtcclxuICBzdHlsZXNNYXA6IE1hcDxIdG1sQ2xhc3NlcywgYW55PiA9IG5ldyBNYXAoKTtcclxuICByZW1vdmVkQ2xhc3M6IHN0cmluZztcclxuICBjbGFzc2VzOiBzdHJpbmcgIDtcclxuICByYW5nZVZhbGlkYXRvcjogYm9vbGVhbjtcclxuXHJcbiAgLy8gdXNlciBwcm9wZXJ0aWVzXHJcbiAgdXNlclByb3BlcnRpZXM6IE1hcDxzdHJpbmcsIGFueT4gPSBuZXcgTWFwKCk7XHJcblxyXG4gIGN1c3RvbVZhbGlkYXRvcnM6IE1hcDxzdHJpbmcsIEN1c3RvbVZhbGlkYXRvcj4gPSBuZXcgTWFwKCk7XHJcblxyXG4gIHNldENsYXNzKGtleSwgdmFsdWUpIHtcclxuICAgIC8vIGZvciBuby1jb250cm9sIC0gaG9sZCB0aGUgbmFtZSBvZiB0aGUgY2xhc3MgdG8gYmUgcmVtb3ZlZCBsYXRlclxyXG4gICAgaWYodGhpcy5jbGFzc2VzTWFwLmhhcyhrZXkpKSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlZENsYXNzID0gdGhpcy5jbGFzc2VzTWFwLmdldChrZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xhc3Nlc01hcC5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICBsZXQgcmVzdWx0ID0gJyc7XHJcblxyXG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdGhpcy5jbGFzc2VzTWFwKSB7XHJcbiAgICAgIHJlc3VsdCArPSB2YWx1ZSArICcgJztcclxuICAgIH1cclxuICAgIHRoaXMuY2xhc3NlcyA9IHJlc3VsdDtcclxuXHJcbiAgfVxyXG5cclxuICBzZXRTdHlsZShrZXksIHZhbHVlKSB7XHJcbiAgICB0aGlzLnN0eWxlc01hcC5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuLyoqXHJcbiAqIEBpZ25vcmVcclxuICovXHJcbmV4cG9ydCBjbGFzcyBDb250cm9sc01ldGFkYXRhIHtcclxuXHJcbiAgLy92YWx1ZXMgb2YgY29udHJvbFxyXG4gIHZhbHVlczogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoKTtcclxuICAvLyBkaWN0aW9uYXJ5IG9mIGNvbnRyb2xzIHdpdGggdGhlcmUgcHJvcGVydGllc1xyXG4gIENvbnRyb2xzUHJvcGVydGllczogTWFwPHN0cmluZywgQ29udHJvbE1ldGFkYXRhPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgcm93SWQ6IHN0cmluZztcclxuICBpc0NyZWF0ZWQgPSBmYWxzZTtcclxuICBpc0VkaXRpbmcgPSBmYWxzZTtcclxuXHJcbiAgZ2V0IFZhbHVlcygpe1xyXG4gICAgcmV0dXJuIHRoaXMudmFsdWVzO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29udHJvbE1ldGFkYXRhKGNvbnRyb2xJZDogc3RyaW5nKSB7XHJcbiAgICBpZiAoIXRoaXMuQ29udHJvbHNQcm9wZXJ0aWVzLmhhcyhjb250cm9sSWQpKVxyXG4gICAgICB0aGlzLkNvbnRyb2xzUHJvcGVydGllcy5zZXQoY29udHJvbElkLCBuZXcgQ29udHJvbE1ldGFkYXRhKCkpO1xyXG4gICAgcmV0dXJuIHRoaXMuQ29udHJvbHNQcm9wZXJ0aWVzLmdldChjb250cm9sSWQpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICB1cGRhdGUob2JqOmFueSkge1xyXG4gICAgLy9zaG91bGQgd2Uga2VlcCB0aGUgdmFsdWVzIGhlcmUgP1xyXG4gICAgLy90aGlzLnZhbHVlcyA9IG9iai5Db250cm9sc1ZhbHVlcztcclxuICAgIGxldCBwcm9wczogeyBbaWQ6IHN0cmluZ106IHsgW2lkOiBzdHJpbmddOiBzdHJpbmc7IH0gfSA9IG9iai5Db250cm9sc01ldGFEYXRhO1xyXG4gICAgZm9yIChsZXQgY29udHJvbE5hbWUgaW4gcHJvcHMpIHtcclxuICAgICAgaWYgKCF0aGlzLkNvbnRyb2xzUHJvcGVydGllcy5oYXMoY29udHJvbE5hbWUpKVxyXG4gICAgICAgIHRoaXMuQ29udHJvbHNQcm9wZXJ0aWVzLnNldChjb250cm9sTmFtZSwgbmV3IENvbnRyb2xNZXRhZGF0YSgpKTtcclxuICAgICAgbGV0IGNvbnRyb2xNZXRhRGF0YTogQ29udHJvbE1ldGFkYXRhID0gdGhpcy5Db250cm9sc1Byb3BlcnRpZXMuZ2V0KGNvbnRyb2xOYW1lKTtcclxuICAgICAgZm9yIChsZXQgcHJvcGVydHkgaW4gb2JqLkNvbnRyb2xzTWV0YURhdGFbY29udHJvbE5hbWVdLlByb3BlcnRpZXMpXHJcbiAgICAgICAgY29udHJvbE1ldGFEYXRhW3Byb3BlcnR5XSA9IG9iai5Db250cm9sc01ldGFEYXRhW2NvbnRyb2xOYW1lXS5Qcm9wZXJ0aWVzW3Byb3BlcnR5XTtcclxuICAgICAgY29udHJvbE1ldGFEYXRhLmNvbnRyb2xUeXBlID0gb2JqLkNvbnRyb2xzTWV0YURhdGFbY29udHJvbE5hbWVdLlR5cGU7XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBjb250cm9sTmFtZSBpbiBvYmouQ29udHJvbHNWYWx1ZXMpIHtcclxuICAgICAgdGhpcy5zZXRWYWx1ZShjb250cm9sTmFtZSwgb2JqLkNvbnRyb2xzVmFsdWVzW2NvbnRyb2xOYW1lXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZShjb250cm9sTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCAge1xyXG4gICAgdGhpcy52YWx1ZXMuc2V0KGNvbnRyb2xOYW1lLCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBnZXRQcm9wZXJ0eShjb250cm9sSWQ6IHN0cmluZywgcHJvcDogSHRtbFByb3BlcnRpZXMpIHtcclxuICAgIGlmICh0aGlzLkNvbnRyb2xzUHJvcGVydGllcy5oYXMoY29udHJvbElkKSkge1xyXG4gICAgICBpZiAodGhpcy5Db250cm9sc1Byb3BlcnRpZXMuZ2V0KGNvbnRyb2xJZCkucHJvcGVydGllcy5oYXMocHJvcCkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5Db250cm9sc1Byb3BlcnRpZXMuZ2V0KGNvbnRyb2xJZCkucHJvcGVydGllcy5nZXQocHJvcCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBcIlwiO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldFZhbHVlKGNvbnRyb2xOYW1lOiBzdHJpbmcpe1xyXG4gICAgcmV0dXJuIHRoaXMudmFsdWVzLmdldChjb250cm9sTmFtZSk7XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAaWdub3JlXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgUmVjb3JkcyB7XHJcbiAgZGF0YTogTWFwPG51bWJlciwgQ29udHJvbHNNZXRhZGF0YT4gPSBuZXcgTWFwKCk7XHJcbiAgbGlzdDogQ29udHJvbHNNZXRhZGF0YVtdID0gW107IC8vdXNlZCBmb3Igc2VxdWVudGlhbCBhY2Nlc3MgaW4gdGFibGVcclxuICBpbmNsdWRlc0ZpcnN0OiBib29sZWFuO1xyXG4gIGluY2x1ZGVzTGFzdDogYm9vbGVhbjtcclxuICBndWlUb3BJbmRleDogbnVtYmVyO1xyXG4gIHJlY29yZHNCZWZvcmVDdXJyZW50VmlldzogbnVtYmVyID0gMDtcclxuICBpc0VtcHR5RGF0YVZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaXplVXBkYXRlZDogYm9vbGVhbiA9IGZhbHNlOyAvL3VzZWQgZm9yIGV2YWx1YXRpbmcgdGhlIFJlY29yZHNTaXplQ2hhbmdlLlxyXG5cclxuICBnZXRSb3coZHZSb3dJZDogbnVtYmVyKTogQ29udHJvbHNNZXRhZGF0YSB7XHJcbiAgICByZXR1cm4gdGhpcy5saXN0W2R2Um93SWQgKyB0aGlzLnJlY29yZHNCZWZvcmVDdXJyZW50Vmlld107XHJcbiAgfVxyXG5cclxuICBtYXJrUm93QXNDcmVhdGVkKGd1aVJvd0lkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmIChndWlSb3dJZCA8IHRoaXMubGlzdC5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5hZGRSb3coZ3VpUm93SWQpO1xyXG4gICAgICB0aGlzLmRhdGEuZ2V0KGd1aVJvd0lkKS5pc0NyZWF0ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbWFya1Jvd0FzTm90Q3JlYXRlZChndWlSb3dJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoZ3VpUm93SWQgPCB0aGlzLmxpc3QubGVuZ3RoKVxyXG4gICAgICB0aGlzLmRhdGEuZ2V0KGd1aVJvd0lkKS5pc0NyZWF0ZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG5cclxuICBpc1Jvd0NyZWF0ZWQoZ3VpUm93SWQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGd1aVJvd0lkIDwgdGhpcy5saXN0Lmxlbmd0aCkge1xyXG4gICAgICBpZiAoIXRoaXMuZGF0YS5oYXMoZ3VpUm93SWQpIHx8IGlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuZGF0YS5nZXQoZ3VpUm93SWQpKSlcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmdldChndWlSb3dJZCkuaXNDcmVhdGVkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAqIGZvciByb3cgZWRpdGluZ1xyXG4gICogKi9cclxuICBzdGFydFJvd0VkaXRpbmcoZ3VpUm93SWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKGd1aVJvd0lkIDwgdGhpcy5saXN0Lmxlbmd0aCAmJiB0aGlzLmRhdGEuaGFzKGd1aVJvd0lkKSlcclxuICAgICAgdGhpcy5kYXRhLmdldChndWlSb3dJZCkuaXNFZGl0aW5nID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgKiBzdG9wIHJvdyBlZGl0aW5nIG9uIHJvdyBJZFxyXG4gICogKi9cclxuICBzdG9wUm93RWRpdGluZyhndWlSb3dJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoZ3VpUm93SWQgPCB0aGlzLmxpc3QubGVuZ3RoICYmIHRoaXMuZGF0YS5oYXMoZ3VpUm93SWQpKVxyXG4gICAgICB0aGlzLmRhdGEuZ2V0KGd1aVJvd0lkKS5pc0VkaXRpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgKiByZXR1cm4gaWYgcm93IGlzIGluIGVkaXRpbmdcclxuICAqIENhbGxlZCBieSB0aGUgSFRNTCBjb2RlLCBzbyBwYXJhbWV0ZXIgaXMgYSBzdHJpbmcsIG5vdCBhIG51bWViclxyXG4gICogKi9cclxuICBpc1Jvd0luUm93RWRpdGluZyhndWlSb3dJZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoK2d1aVJvd0lkIDwgdGhpcy5saXN0Lmxlbmd0aCkge1xyXG4gICAgICBpZiAoIXRoaXMuZGF0YS5oYXMoK2d1aVJvd0lkKSB8fCBpc051bGxPclVuZGVmaW5lZCh0aGlzLmRhdGEuZ2V0KCtndWlSb3dJZCkpKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZ2V0KCtndWlSb3dJZCkuaXNFZGl0aW5nO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKG9iaikge1xyXG5cclxuICAgIGlmIChvYmouZnVsbFJlZnJlc2ggJiYgb2JqLnJvd3MubGVuZ3RoICE9IHRoaXMubGlzdC5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5kYXRhID0gbmV3IE1hcCgpO1xyXG4gICAgICB0aGlzLmxpc3QgPSBuZXcgQXJyYXk8Q29udHJvbHNNZXRhZGF0YT4oKTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IHJvd0lkIGluIG9iai5yb3dzKSB7XHJcbiAgICAgIGlmICghdGhpcy5kYXRhLmhhcygrcm93SWQpIHx8IHRoaXMuZGF0YS5nZXQoK3Jvd0lkKSA9PT0gbnVsbClcclxuICAgICAgICB0aGlzLmRhdGEuc2V0KCtyb3dJZCwgbmV3IENvbnRyb2xzTWV0YWRhdGEoKSk7XHJcbiAgICAgIGxldCBjb250cm9sc0RhdGE6IENvbnRyb2xzTWV0YWRhdGEgPSB0aGlzLmRhdGEuZ2V0KCtyb3dJZCk7XHJcbiAgICAgIGNvbnRyb2xzRGF0YS51cGRhdGUob2JqLnJvd3Nbcm93SWRdKTtcclxuICAgICAgY29udHJvbHNEYXRhLnJvd0lkID0gcm93SWQ7XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBba2V5LCB2YWx1ZV0gb2YgdGhpcy5kYXRhKSB7XHJcbiAgICAgIHRoaXMubGlzdFtrZXldID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgdXBkYXRlU2l6ZShsZW46IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMubGlzdC5sZW5ndGggIT0gbGVuKSB7XHJcbiAgICAgIGlmIChsZW4gPCB0aGlzLmxpc3QubGVuZ3RoKSB7XHJcbiAgICAgICAgLy9yZW1vdmUgcm93c1xyXG4gICAgICAgIGZvciAobGV0IGkgPSBsZW47IGkgPCB0aGlzLmxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIHRoaXMuZGF0YS5kZWxldGUoaSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG4gICAgICB0aGlzLmxpc3QubGVuZ3RoID0gbGVuO1xyXG4gICAgICB0aGlzLnNpemVVcGRhdGVkID0gdHJ1ZTtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogY3JlYXJzIGRhdGEgZm9yIHRoZSBmaXJzdCByZWNvcmRcclxuICAgKiBAcGFyYW0gdGVtcGxhdGVcclxuICAgKi9cclxuICBjbGVhckZpcnN0VGFibGVSZWNvcmQodGVtcGxhdGU6IHsgW2lkOiBzdHJpbmddOiBzdHJpbmc7IH0pIHtcclxuICAgIGlmICh0aGlzLmxpc3QubGVuZ3RoID49IDEpIHtcclxuICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGVtcGxhdGUpIHtcclxuICAgICAgICBpZiAodGVtcGxhdGVba2V5XSA9PSAnMScgJiYgdGhpcy5saXN0WzBdLkNvbnRyb2xzUHJvcGVydGllcy5oYXMoa2V5KSkge1xyXG4gICAgICAgICAgdGhpcy5saXN0WzBdLkNvbnRyb2xzUHJvcGVydGllcy5nZXQoa2V5KS5wcm9wZXJ0aWVzID0gIG5ldyBNYXAoKSA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRSb3coZ3VpUm93SWQ6IG51bWJlcikge1xyXG4gICAgaWYgKGd1aVJvd0lkICE9PSAwIHx8ICF0aGlzLmRhdGEuaGFzKGd1aVJvd0lkKSB8fCBpc051bGxPclVuZGVmaW5lZCh0aGlzLmRhdGEuZ2V0KGd1aVJvd0lkKSkpIHtcclxuICAgICAgdGhpcy5kYXRhLnNldChndWlSb3dJZCwgbmV3IENvbnRyb2xzTWV0YWRhdGEoKSk7XHJcbiAgICAgIHRoaXMuZGF0YS5nZXQoZ3VpUm93SWQpLnJvd0lkID0gXCJcIitndWlSb3dJZDtcclxuICAgICAgdGhpcy5saXN0W2d1aVJvd0lkXSA9IHRoaXMuZGF0YS5nZXQoZ3VpUm93SWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlRmlyc3QoKSB7XHJcbiAgICB0aGlzLmFkZFJvdygwKTtcclxuICB9XHJcblxyXG4gIGZyb21Kc29uKGRhdGE6IHN0cmluZykge1xyXG4gICAgdmFyIG9iaiA9IEpTT04ucGFyc2UoZGF0YSk7XHJcbiAgICB0aGlzLnVwZGF0ZShvYmopO1xyXG4gIH1cclxuXHJcbiAgc2V0R3VpVG9wSW5kZXgodG9wSW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5ndWlUb3BJbmRleCA9IHRvcEluZGV4O1xyXG4gIH1cclxuXHJcbiAgZ2V0R3VpVG9wSW5kZXgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmd1aVRvcEluZGV4O1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG5leHBvcnQgZW51bSBIdG1sQ2xhc3NlcyB7XHJcbiAgQ29sb3IgPSBcImNvbG9yXCIsXHJcbiAgZm9udCA9IFwiZm9udFwiLFxyXG4gIEZvY3VzQ29sb3I9XCJmb2N1c2NvbG9yXCIsXHJcbiAgSGludENvbG9yPVwiaGludGNvbG9yXCIsXHJcbn1cclxuIl19