@simpleangularcontrols/sac-common 10.0.0-rc.2 → 10.0.0-rc.21

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 (140) hide show
  1. package/bundles/simpleangularcontrols-sac-common.umd.js +2232 -1604
  2. package/bundles/simpleangularcontrols-sac-common.umd.js.map +1 -1
  3. package/bundles/simpleangularcontrols-sac-common.umd.min.js +1 -1
  4. package/bundles/simpleangularcontrols-sac-common.umd.min.js.map +1 -1
  5. package/common/basedatetimecontrol.d.ts +100 -14
  6. package/common/baseinputcontrol.d.ts +0 -4
  7. package/common/basemodelcontrol.d.ts +55 -27
  8. package/common/baseuploadcontrol.d.ts +71 -55
  9. package/controls/checkbox/checkbox.d.ts +12 -3
  10. package/controls/checkbox/radiobutton.d.ts +61 -26
  11. package/controls/contextmenu/contextmenu.d.ts +26 -19
  12. package/controls/contextmenu/contextmenu.interface.d.ts +3 -0
  13. package/controls/contextmenu/contextmenuitem.d.ts +5 -0
  14. package/controls/contextmenu/contextmenuitembutton.d.ts +21 -20
  15. package/controls/datetime/date.d.ts +28 -31
  16. package/controls/datetime/datetime.d.ts +27 -31
  17. package/controls/datetime/time.d.ts +26 -30
  18. package/controls/dialog/dialog.d.ts +31 -43
  19. package/controls/grid/grid.d.ts +38 -36
  20. package/controls/grid/gridbutton.d.ts +13 -13
  21. package/controls/grid/gridcolumn.d.ts +8 -8
  22. package/controls/grid/gridcolumnaction.d.ts +3 -3
  23. package/controls/grid/gridcolumnbase.d.ts +45 -37
  24. package/controls/grid/gridimage.d.ts +2 -2
  25. package/controls/grid/model.d.ts +51 -42
  26. package/controls/grid/paging.d.ts +41 -43
  27. package/controls/input/input.d.ts +3 -3
  28. package/controls/input/inputarea.d.ts +5 -5
  29. package/controls/input/inputpassword.d.ts +7 -7
  30. package/controls/input/inputsearch.d.ts +13 -4
  31. package/controls/layout/formlayout.d.ts +17 -1
  32. package/controls/list/buildvaluestring.d.ts +6 -0
  33. package/controls/list/dropdown.d.ts +9 -51
  34. package/controls/list/dropdownoptions.d.ts +38 -0
  35. package/controls/multilanguage/multilanguageinput.d.ts +2 -2
  36. package/controls/multilanguage/multilanguageinputarea.d.ts +4 -4
  37. package/controls/static/formcontainer.d.ts +7 -3
  38. package/controls/tooltip/tooltip.d.ts +76 -69
  39. package/controls/treeview/treeview.d.ts +107 -107
  40. package/esm2015/common/basedatetimecontrol.js +185 -30
  41. package/esm2015/common/baseinputcontrol.js +2 -7
  42. package/esm2015/common/basemodelcontrol.js +109 -57
  43. package/esm2015/common/baseuploadcontrol.js +92 -59
  44. package/esm2015/controls/checkbox/checkbox.js +29 -6
  45. package/esm2015/controls/checkbox/radiobutton.js +94 -45
  46. package/esm2015/controls/contextmenu/contextmenu.interface.js +1 -0
  47. package/esm2015/controls/contextmenu/contextmenu.interface.ngfactory.js +7 -0
  48. package/esm2015/controls/contextmenu/contextmenu.js +22 -23
  49. package/esm2015/controls/contextmenu/contextmenuitem.js +13 -2
  50. package/esm2015/controls/contextmenu/contextmenuitembutton.js +34 -25
  51. package/esm2015/controls/datetime/date.js +44 -43
  52. package/esm2015/controls/datetime/datetime.js +43 -43
  53. package/esm2015/controls/datetime/time.js +43 -43
  54. package/esm2015/controls/dialog/dialog.js +41 -83
  55. package/esm2015/controls/grid/grid.js +21 -21
  56. package/esm2015/controls/grid/gridbutton.js +19 -13
  57. package/esm2015/controls/grid/gridcolumn.js +14 -7
  58. package/esm2015/controls/grid/gridcolumnaction.js +6 -5
  59. package/esm2015/controls/grid/gridcolumnbase.js +67 -55
  60. package/esm2015/controls/grid/gridimage.js +3 -3
  61. package/esm2015/controls/grid/model.js +51 -30
  62. package/esm2015/controls/grid/paging.js +40 -42
  63. package/esm2015/controls/input/input.js +6 -8
  64. package/esm2015/controls/input/inputarea.js +19 -12
  65. package/esm2015/controls/input/inputpassword.js +12 -12
  66. package/esm2015/controls/input/inputsearch.js +35 -6
  67. package/esm2015/controls/layout/formlayout.js +20 -8
  68. package/esm2015/controls/list/buildvaluestring.js +18 -0
  69. package/esm2015/controls/{treeview/ngtreeitemaction.ngfactory.js → list/buildvaluestring.ngfactory.js} +1 -1
  70. package/esm2015/controls/list/dropdown.js +16 -114
  71. package/esm2015/controls/list/dropdownoptions.js +72 -0
  72. package/esm2015/controls/{treeview/treeviewchild.ngfactory.js → list/dropdownoptions.ngfactory.js} +1 -1
  73. package/esm2015/controls/multilanguage/multilanguageinput.js +8 -14
  74. package/esm2015/controls/multilanguage/multilanguageinputarea.js +9 -15
  75. package/esm2015/controls/static/formcontainer.js +16 -5
  76. package/esm2015/controls/tooltip/tooltip.js +126 -245
  77. package/esm2015/controls/treeview/treeview.js +276 -231
  78. package/esm2015/interfaces/ISacConfigurationService.js +1 -1
  79. package/esm2015/interfaces/ISacIconService.js +1 -1
  80. package/esm2015/interfaces/ISacUploadEventCompleteState.js +1 -0
  81. package/esm2015/interfaces/ISacUploadEventCompleteState.ngfactory.js +7 -0
  82. package/esm2015/interfaces/ISacValidationKeyService.js +1 -1
  83. package/esm2015/interfaces/treeviewaction.interface.js +1 -0
  84. package/esm2015/interfaces/treeviewaction.interface.ngfactory.js +7 -0
  85. package/esm2015/public_api.js +15 -8
  86. package/esm2015/services/sac-configuration.service.js +31 -5
  87. package/esm2015/services/sac-icon.service.js +37 -1
  88. package/esm2015/services/sac-localisation.service.js +69 -180
  89. package/esm2015/services/sac-validationkey.service.js +12 -9
  90. package/esm2015/simpleangularcontrols-sac-common.js +1 -7
  91. package/esm2015/utilities/enums.js +5 -1
  92. package/esm2015/utilities/guid.js +4 -2
  93. package/esm2015/utilities/popuphelper.js +343 -0
  94. package/esm2015/utilities/popuphelper.ngfactory.js +7 -0
  95. package/esm2015/validation/equals.validator.js +14 -0
  96. package/esm2015/validation/equals.validator.ngfactory.js +7 -0
  97. package/esm2015/validation/isDateValid.js +9 -1
  98. package/esm2015/validation/mintextlength.validator.js +23 -0
  99. package/esm2015/validation/mintextlength.validator.ngfactory.js +7 -0
  100. package/esm2015/validation/notequals.validator.js +14 -0
  101. package/esm2015/validation/{minlength.validator.ngfactory.js → notequals.validator.ngfactory.js} +1 -1
  102. package/esm2015/validation/validation.class.js +35 -6
  103. package/fesm2015/simpleangularcontrols-sac-common.js +2070 -1498
  104. package/fesm2015/simpleangularcontrols-sac-common.js.map +1 -1
  105. package/interfaces/ISacConfigurationService.d.ts +20 -0
  106. package/interfaces/ISacIconService.d.ts +24 -0
  107. package/interfaces/ISacUploadEventCompleteState.d.ts +5 -0
  108. package/interfaces/ISacUploadEventCompleteState.ngfactory.d.ts +1 -0
  109. package/interfaces/ISacValidationKeyService.d.ts +2 -2
  110. package/interfaces/treeviewaction.interface.d.ts +4 -0
  111. package/interfaces/treeviewaction.interface.ngfactory.d.ts +1 -0
  112. package/package.json +2 -2
  113. package/public_api.d.ts +13 -6
  114. package/services/sac-configuration.service.d.ts +40 -0
  115. package/services/sac-icon.service.d.ts +49 -1
  116. package/services/sac-localisation.service.d.ts +10 -10
  117. package/services/sac-validationkey.service.d.ts +7 -7
  118. package/simpleangularcontrols-sac-common-10.0.0-rc.21.tgz +0 -0
  119. package/simpleangularcontrols-sac-common.d.ts +0 -6
  120. package/simpleangularcontrols-sac-common.metadata.json +1 -1
  121. package/utilities/enums.d.ts +3 -1
  122. package/utilities/popuphelper.d.ts +83 -0
  123. package/utilities/popuphelper.ngfactory.d.ts +1 -0
  124. package/validation/equals.validator.d.ts +2 -0
  125. package/validation/equals.validator.ngfactory.d.ts +1 -0
  126. package/validation/mintextlength.validator.d.ts +2 -0
  127. package/validation/mintextlength.validator.ngfactory.d.ts +1 -0
  128. package/validation/notequals.validator.d.ts +2 -0
  129. package/validation/notequals.validator.ngfactory.d.ts +1 -0
  130. package/validation/validation.class.d.ts +22 -3
  131. package/controls/treeview/ngtreeitemaction.d.ts +0 -40
  132. package/controls/treeview/treeviewchild.d.ts +0 -12
  133. package/esm2015/controls/treeview/ngtreeitemaction.js +0 -60
  134. package/esm2015/controls/treeview/treeviewchild.js +0 -18
  135. package/esm2015/validation/minlength.validator.js +0 -21
  136. package/simpleangularcontrols-sac-common-10.0.0-rc.2.tgz +0 -0
  137. package/validation/minlength.validator.d.ts +0 -2
  138. /package/controls/{treeview/ngtreeitemaction.ngfactory.d.ts → contextmenu/contextmenu.interface.ngfactory.d.ts} +0 -0
  139. /package/controls/{treeview/treeviewchild.ngfactory.d.ts → list/buildvaluestring.ngfactory.d.ts} +0 -0
  140. /package/{validation/minlength.validator.ngfactory.d.ts → controls/list/dropdownoptions.ngfactory.d.ts} +0 -0
@@ -1,14 +1,9 @@
1
- import { Directive, ElementRef, HostListener, Injector, Input, } from '@angular/core';
2
- import * as IMask from 'imask';
3
- import * as moment_ from 'moment';
4
1
  import { SacBaseDateTimeControl } from '../../common/basedatetimecontrol';
5
- import { SACICON_SERVICE, SacDefaultIconService } from '../../services';
6
2
  import { Validation } from '../../validation';
7
3
  import { SacFormLayoutCommon } from '../layout/formlayout';
8
- /**
9
- * Moment
10
- */
11
- const moment = moment_['default'];
4
+ import { ChangeDetectorRef, Directive, ElementRef, HostListener, Injector, Input } from '@angular/core';
5
+ import * as IMask from 'imask';
6
+ import * as moment_ from 'moment';
12
7
  /**
13
8
  * Komponente für SacTimeCommon. Extends SacBaseDateTimeControl
14
9
  */
@@ -21,9 +16,10 @@ export class SacTimeCommon extends SacBaseDateTimeControl {
21
16
  * @param injector Injector for injecting services
22
17
  * @param elementRef reference to html element
23
18
  */
24
- constructor(formlayout, injector, elementRef) {
25
- super(formlayout, injector, elementRef);
19
+ constructor(formlayout, injector, elementRef, cdRef) {
20
+ super(formlayout, injector, elementRef, cdRef);
26
21
  this.elementRef = elementRef;
22
+ // #region Properties
27
23
  /**
28
24
  * Format des Datums
29
25
  */
@@ -52,6 +48,18 @@ export class SacTimeCommon extends SacBaseDateTimeControl {
52
48
  lazy: false,
53
49
  overwrite: true,
54
50
  };
51
+ /**
52
+ * Max Time
53
+ */
54
+ this._maxtime = null;
55
+ /**
56
+ * Min Time
57
+ */
58
+ this._mintime = null;
59
+ /**
60
+ * Moment JS module instance
61
+ */
62
+ this.moment = moment_['default'];
55
63
  /**
56
64
  * Resource Key für Validation Message MinTime bei Control
57
65
  */
@@ -68,27 +76,20 @@ export class SacTimeCommon extends SacBaseDateTimeControl {
68
76
  * Resource Key für Validation Message MinTime in Validation Summary
69
77
  */
70
78
  this.validationmessagesummarymintime = this.validationKeyService.ValidationErrorSummaryMinTime;
71
- /**
72
- * Max Time
73
- */
74
- this._maxtime = null;
75
- /**
76
- * Min Time
77
- */
78
- this._mintime = null;
79
- /**
80
- * Definiert ob der Date Selector angezeigt wird
81
- */
82
- this._showselector = false;
83
- this.iconService = injector.get(SACICON_SERVICE, new SacDefaultIconService());
84
79
  }
85
80
  // #endregion Constructors
86
81
  // #region Public Getters And Setters
82
+ /**
83
+ * icon for date selector button
84
+ */
85
+ get IconSelector() {
86
+ return this.iconService.TimeComponentSelectorIcon;
87
+ }
87
88
  /**
88
89
  * Max Time
89
90
  */
90
91
  set maxtime(v) {
91
- let time = moment(v, [this.TIMEFORMAT], true);
92
+ let time = this.moment(v, [this.TIMEFORMAT], true);
92
93
  time = this.ModifyParsedDateTimeValue(time);
93
94
  if (time.isValid()) {
94
95
  this._maxtime = super.getDate(time).toDate();
@@ -101,7 +102,7 @@ export class SacTimeCommon extends SacBaseDateTimeControl {
101
102
  * Min Time
102
103
  */
103
104
  set mintime(v) {
104
- let time = moment(v, [this.TIMEFORMAT], true);
105
+ let time = this.moment(v, [this.TIMEFORMAT], true);
105
106
  time = this.ModifyParsedDateTimeValue(time);
106
107
  if (time.isValid()) {
107
108
  this._mintime = super.getDate(time).toDate();
@@ -110,23 +111,8 @@ export class SacTimeCommon extends SacBaseDateTimeControl {
110
111
  this._mintime = null;
111
112
  }
112
113
  }
113
- /**
114
- * icon for date selector button
115
- */
116
- get IconSelector() {
117
- return this.iconService.TimeComponentSelectorIcon;
118
- }
119
114
  // #endregion Public Getters And Setters
120
115
  // #region Public Methods
121
- /**
122
- * HostListener
123
- */
124
- onClick(targetElement) {
125
- const clickedInside = this.elementRef.nativeElement.contains(targetElement);
126
- if (!clickedInside) {
127
- this._showselector = false;
128
- }
129
- }
130
116
  /**
131
117
  * Methode ergibt Datum-Format vom String
132
118
  */
@@ -142,6 +128,19 @@ export class SacTimeCommon extends SacBaseDateTimeControl {
142
128
  v.year(1900);
143
129
  return v;
144
130
  }
131
+ /**
132
+ * HostListener
133
+ */
134
+ onClick(targetElement) {
135
+ if (!this.pickercontainer) {
136
+ return;
137
+ }
138
+ const clickedInsideContainer = this.pickercontainer.nativeElement.contains(targetElement);
139
+ const clickedInsideReference = this.pickerbutton.nativeElement.contains(targetElement);
140
+ if (!clickedInsideContainer && !clickedInsideReference) {
141
+ this._showselector = false;
142
+ }
143
+ }
145
144
  /**
146
145
  * Zeigt Date Selector an
147
146
  */
@@ -163,7 +162,7 @@ export class SacTimeCommon extends SacBaseDateTimeControl {
163
162
  this.setValueString('');
164
163
  }
165
164
  else {
166
- this.value = moment(v.date).utc().toDate();
165
+ this.value = this.moment(v.date).utc().toDate();
167
166
  }
168
167
  this._showselector = false;
169
168
  }
@@ -198,7 +197,8 @@ SacTimeCommon.decorators = [
198
197
  SacTimeCommon.ctorParameters = () => [
199
198
  { type: SacFormLayoutCommon },
200
199
  { type: Injector },
201
- { type: ElementRef }
200
+ { type: ElementRef },
201
+ { type: ChangeDetectorRef }
202
202
  ];
203
203
  SacTimeCommon.propDecorators = {
204
204
  validationmessagemaxtime: [{ type: Input }],
@@ -209,4 +209,4 @@ SacTimeCommon.propDecorators = {
209
209
  mintime: [{ type: Input }],
210
210
  onClick: [{ type: HostListener, args: ['document:click', ['$event.target'],] }]
211
211
  };
212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS5qcyIsInNvdXJjZVJvb3QiOiJDOi9Qcm9qZWt0ZS9zaW1wbGVhbmd1bGFyY29udHJvbHMtbmcxMC9jaC5qbmV0d29yay5zYWMtY29udHJvbHMvcHJvamVjdHMvc2FjLWNvbW1vbi9zcmMvIiwic291cmNlcyI6WyJjb250cm9scy9kYXRldGltZS90aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixRQUFRLEVBQ1IsS0FBSyxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBR2xDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRTFFLE9BQU8sRUFBRSxlQUFlLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFM0Q7O0dBRUc7QUFDSCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFFbEM7O0dBRUc7QUFFSCxNQUFNLE9BQU8sYUFBYyxTQUFRLHNCQUFzQjtJQXVFdkQsd0JBQXdCO0lBRXhCLHVCQUF1QjtJQUV2Qjs7Ozs7T0FLRztJQUNILFlBQ0UsVUFBK0IsRUFDL0IsUUFBa0IsRUFDUixVQUFzQjtRQUVoQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUY5QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBNUVsQzs7V0FFRztRQUNhLGVBQVUsR0FBVyxPQUFPLENBQUM7UUFDN0M7O1dBRUc7UUFDYSxjQUFTLEdBQUc7WUFDMUIsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQ3JCLE1B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WUFDaEIsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTO1lBQ3JCLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRTtZQUNkLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUztZQUMzQixJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFDdEI7WUFDQSxLQUFLLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FDeEIsSUFBSSxDQUFDLFFBQVEsRUFDYixJQUFJLENBQUMsd0JBQXdCLEVBQzdCLElBQUksQ0FBQywrQkFBK0IsQ0FDckMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNOO1FBRUQsSUFDRSxLQUFLLEtBQUssSUFBSTtZQUNkLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFBSTtZQUNoQixDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVM7WUFDckIsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTO1lBQzNCLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUN0QjtZQUNBLEtBQUssR0FBRyxVQUFVLENBQUMsT0FBTyxDQUN4QixJQUFJLENBQUMsUUFBUSxFQUNiLElBQUksQ0FBQyx3QkFBd0IsRUFDN0IsSUFBSSxDQUFDLCtCQUErQixDQUNyQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7OztZQS9PRixTQUFTOzs7WUFWRCxtQkFBbUI7WUFaMUIsUUFBUTtZQUZSLFVBQVU7Ozt1Q0FpRVQsS0FBSzt1Q0FLTCxLQUFLOzhDQUtMLEtBQUs7OENBS0wsS0FBSztzQkE4Q0wsS0FBSztzQkFnQkwsS0FBSztzQkEyQkwsWUFBWSxTQUFDLGdCQUFnQixFQUFFLENBQUMsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBEaXJlY3RpdmUsXHJcbiAgRWxlbWVudFJlZixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5qZWN0b3IsXHJcbiAgSW5wdXQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0ICogYXMgSU1hc2sgZnJvbSAnaW1hc2snO1xyXG5pbXBvcnQgKiBhcyBtb21lbnRfIGZyb20gJ21vbWVudCc7XHJcbi8vIEltcG9ydCBNb21lbnQuSlNcclxuaW1wb3J0IHsgTW9tZW50IH0gZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgU2FjQmFzZURhdGVUaW1lQ29udHJvbCB9IGZyb20gJy4uLy4uL2NvbW1vbi9iYXNlZGF0ZXRpbWVjb250cm9sJztcclxuaW1wb3J0IHsgSVNhY0ljb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JU2FjSWNvblNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTQUNJQ09OX1NFUlZJQ0UsIFNhY0RlZmF1bHRJY29uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbiB9IGZyb20gJy4uLy4uL3ZhbGlkYXRpb24nO1xyXG5pbXBvcnQgeyBTYWNGb3JtTGF5b3V0Q29tbW9uIH0gZnJvbSAnLi4vbGF5b3V0L2Zvcm1sYXlvdXQnO1xyXG5cclxuLyoqXHJcbiAqIE1vbWVudFxyXG4gKi9cclxuY29uc3QgbW9tZW50ID0gbW9tZW50X1snZGVmYXVsdCddO1xyXG5cclxuLyoqXHJcbiAqIEtvbXBvbmVudGUgZsO8ciBTYWNUaW1lQ29tbW9uLiBFeHRlbmRzIFNhY0Jhc2VEYXRlVGltZUNvbnRyb2xcclxuICovXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgY2xhc3MgU2FjVGltZUNvbW1vbiBleHRlbmRzIFNhY0Jhc2VEYXRlVGltZUNvbnRyb2wge1xyXG4gIC8vICNyZWdpb24gUHJvcGVydGllc1xyXG5cclxuICAvKipcclxuICAgKiBpY29uIHNlcnZpY2VcclxuICAgKi9cclxuICBwcml2YXRlIGljb25TZXJ2aWNlOiBJU2FjSWNvblNlcnZpY2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvcm1hdCBkZXMgRGF0dW1zXHJcbiAgICovXHJcbiAgcHVibGljIHJlYWRvbmx5IFRJTUVGT1JNQVQ6IHN0cmluZyA9ICdISDptbSc7XHJcbiAgLyoqXHJcbiAgICogTWFza2VcclxuICAgKi9cclxuICBwdWJsaWMgcmVhZG9ubHkgaW1hc2tEYXRlID0ge1xyXG4gICAgbWFzazogdGhpcy5USU1FRk9STUFULFxyXG4gICAgYmxvY2tzOiB7XHJcbiAgICAgIEhIOiB7XHJcbiAgICAgICAgbWFzazogSU1hc2suTWFza2VkUmFuZ2UsXHJcbiAgICAgICAgZnJvbTogMCxcclxuICAgICAgICB0bzogMjMsXHJcbiAgICAgICAgbWF4TGVuZ3RoOiAyLFxyXG4gICAgICB9LFxyXG4gICAgICBtbToge1xyXG4gICAgICAgIG1hc2s6IElNYXNrLk1hc2tlZFJhbmdlLFxyXG4gICAgICAgIGZyb206IDAsXHJcbiAgICAgICAgdG86IDU5LFxyXG4gICAgICAgIG1heExlbmd0aDogMixcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgICBwbGFjZWhvbGRlckNoYXI6ICdfJyxcclxuICAgIGF1dG9maXg6IHRydWUsXHJcbiAgICBsYXp5OiBmYWxzZSxcclxuICAgIG92ZXJ3cml0ZTogdHJ1ZSxcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBSZXNvdXJjZSBLZXkgZsO8ciBWYWxpZGF0aW9uIE1lc3NhZ2UgTWluVGltZSBiZWkgQ29udHJvbFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyB2YWxpZGF0aW9ubWVzc2FnZW1heHRpbWU6IHN0cmluZyA9XHJcbiAgICB0aGlzLnZhbGlkYXRpb25LZXlTZXJ2aWNlLlZhbGlkYXRpb25FcnJvck1heFRpbWU7XHJcbiAgLyoqXHJcbiAgICogUmVzb3VyY2UgS2V5IGbDvHIgVmFsaWRhdGlvbiBNZXNzYWdlIE1pblRpbWUgYmVpIENvbnRyb2xcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgdmFsaWRhdGlvbm1lc3NhZ2VtaW50aW1lOiBzdHJpbmcgPVxyXG4gICAgdGhpcy52YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JNaW5UaW1lO1xyXG4gIC8qKlxyXG4gICAqIFJlc291cmNlIEtleSBmw7xyIFZhbGlkYXRpb24gTWVzc2FnZSBNaW5UaW1lIGluIFZhbGlkYXRpb24gU3VtbWFyeVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyB2YWxpZGF0aW9ubWVzc2FnZXN1bW1hcnltYXh0aW1lOiBzdHJpbmcgPVxyXG4gICAgdGhpcy52YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JTdW1tYXJ5TWF4VGltZTtcclxuICAvKipcclxuICAgKiBSZXNvdXJjZSBLZXkgZsO8ciBWYWxpZGF0aW9uIE1lc3NhZ2UgTWluVGltZSBpbiBWYWxpZGF0aW9uIFN1bW1hcnlcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgdmFsaWRhdGlvbm1lc3NhZ2VzdW1tYXJ5bWludGltZTogc3RyaW5nID1cclxuICAgIHRoaXMudmFsaWRhdGlvbktleVNlcnZpY2UuVmFsaWRhdGlvbkVycm9yU3VtbWFyeU1pblRpbWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1heCBUaW1lXHJcbiAgICovXHJcbiAgcHVibGljIF9tYXh0aW1lOiBEYXRlID0gbnVsbDtcclxuICAvKipcclxuICAgKiBNaW4gVGltZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBfbWludGltZTogRGF0ZSA9IG51bGw7XHJcbiAgLyoqXHJcbiAgICogRGVmaW5pZXJ0IG9iIGRlciBEYXRlIFNlbGVjdG9yIGFuZ2V6ZWlndCB3aXJkXHJcbiAgICovXHJcbiAgcHVibGljIF9zaG93c2VsZWN0b3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gI2VuZHJlZ2lvbiBQcm9wZXJ0aWVzXHJcblxyXG4gIC8vICNyZWdpb24gQ29uc3RydWN0b3JzXHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnN0cnVjdG9yXHJcbiAgICogQHBhcmFtIGZvcm1sYXlvdXQgU2FjRm9ybUxheW91dENvbW1vbiB0byBkZWZpbmUgc2NvcGVkIGxheW91dCBzZXR0aW5nc1xyXG4gICAqIEBwYXJhbSBpbmplY3RvciBJbmplY3RvciBmb3IgaW5qZWN0aW5nIHNlcnZpY2VzXHJcbiAgICogQHBhcmFtIGVsZW1lbnRSZWYgcmVmZXJlbmNlIHRvIGh0bWwgZWxlbWVudFxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgZm9ybWxheW91dDogU2FjRm9ybUxheW91dENvbW1vbixcclxuICAgIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgIHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmXHJcbiAgKSB7XHJcbiAgICBzdXBlcihmb3JtbGF5b3V0LCBpbmplY3RvciwgZWxlbWVudFJlZik7XHJcblxyXG4gICAgdGhpcy5pY29uU2VydmljZSA9IGluamVjdG9yLmdldChcclxuICAgICAgU0FDSUNPTl9TRVJWSUNFLFxyXG4gICAgICBuZXcgU2FjRGVmYXVsdEljb25TZXJ2aWNlKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyAjZW5kcmVnaW9uIENvbnN0cnVjdG9yc1xyXG5cclxuICAvLyAjcmVnaW9uIFB1YmxpYyBHZXR0ZXJzIEFuZCBTZXR0ZXJzXHJcblxyXG4gIC8qKlxyXG4gICAqIE1heCBUaW1lXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IG1heHRpbWUodjogc3RyaW5nIHwgRGF0ZSB8IG51bGwpIHtcclxuICAgIGxldCB0aW1lID0gbW9tZW50KHYsIFt0aGlzLlRJTUVGT1JNQVRdLCB0cnVlKTtcclxuXHJcbiAgICB0aW1lID0gdGhpcy5Nb2RpZnlQYXJzZWREYXRlVGltZVZhbHVlKHRpbWUpO1xyXG5cclxuICAgIGlmICh0aW1lLmlzVmFsaWQoKSkge1xyXG4gICAgICB0aGlzLl9tYXh0aW1lID0gc3VwZXIuZ2V0RGF0ZSh0aW1lKS50b0RhdGUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX21heHRpbWUgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWluIFRpbWVcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgbWludGltZSh2OiBzdHJpbmcgfCBEYXRlIHwgbnVsbCkge1xyXG4gICAgbGV0IHRpbWUgPSBtb21lbnQodiwgW3RoaXMuVElNRUZPUk1BVF0sIHRydWUpO1xyXG5cclxuICAgIHRpbWUgPSB0aGlzLk1vZGlmeVBhcnNlZERhdGVUaW1lVmFsdWUodGltZSk7XHJcblxyXG4gICAgaWYgKHRpbWUuaXNWYWxpZCgpKSB7XHJcbiAgICAgIHRoaXMuX21pbnRpbWUgPSBzdXBlci5nZXREYXRlKHRpbWUpLnRvRGF0ZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fbWludGltZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBpY29uIGZvciBkYXRlIHNlbGVjdG9yIGJ1dHRvblxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgSWNvblNlbGVjdG9yKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5pY29uU2VydmljZS5UaW1lQ29tcG9uZW50U2VsZWN0b3JJY29uO1xyXG4gIH1cclxuXHJcbiAgLy8gI2VuZHJlZ2lvbiBQdWJsaWMgR2V0dGVycyBBbmQgU2V0dGVyc1xyXG5cclxuICAvLyAjcmVnaW9uIFB1YmxpYyBNZXRob2RzXHJcblxyXG4gIC8qKlxyXG4gICAqIEhvc3RMaXN0ZW5lclxyXG4gICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQudGFyZ2V0J10pXHJcbiAgLyoqXHJcbiAgICogQ2xpY2sgRXZlbnRcclxuICAgKi9cclxuICBwdWJsaWMgb25DbGljayh0YXJnZXRFbGVtZW50KSB7XHJcbiAgICBjb25zdCBjbGlja2VkSW5zaWRlID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0RWxlbWVudCk7XHJcbiAgICBpZiAoIWNsaWNrZWRJbnNpZGUpIHtcclxuICAgICAgdGhpcy5fc2hvd3NlbGVjdG9yID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRob2RlIGVyZ2lidCBEYXR1bS1Gb3JtYXQgdm9tIFN0cmluZ1xyXG4gICAqL1xyXG4gIHB1YmxpYyBHZXREYXRlVGltZUZvcm1hdFN0cmluZygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuVElNRUZPUk1BVDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgZXJnaWJ0IERhdHVtIC0gTW9tZW50XHJcbiAgICovXHJcbiAgcHVibGljIE1vZGlmeVBhcnNlZERhdGVUaW1lVmFsdWUodjogTW9tZW50KTogTW9tZW50IHtcclxuICAgIHYuZGF0ZSgxKTtcclxuICAgIHYubW9udGgoMCk7XHJcbiAgICB2LnllYXIoMTkwMCk7XHJcbiAgICByZXR1cm4gdjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFplaWd0IERhdGUgU2VsZWN0b3IgYW5cclxuICAgKi9cclxuICBwdWJsaWMgc2hvd1RpbWVTZWxlY3RvcigpOiB2b2lkIHtcclxuICAgIC8vIFRvdWNoIEV2ZW50IGF1c2zDtnNlblxyXG4gICAgdGhpcy5vblRvdWNoKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuX3Nob3dzZWxlY3Rvcikge1xyXG4gICAgICB0aGlzLl9zaG93c2VsZWN0b3IgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3Nob3dzZWxlY3RvciA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaW1lIFNlbGVjdG9yXHJcbiAgICovXHJcbiAgcHVibGljIHRpbWVzZWxlY3QodjogYW55KSB7XHJcbiAgICBpZiAodi5kYXRlID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuc2V0VmFsdWVTdHJpbmcoJycpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IG1vbWVudCh2LmRhdGUpLnV0YygpLnRvRGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3Nob3dzZWxlY3RvciA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVmFsaWRhdG9yXHJcbiAgICovXHJcbiAgcHVibGljIHZhbGlkYXRlRGF0YShjOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBsZXQgZXJyb3I6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBlcnJvciA9IHN1cGVyLnZhbGlkYXRlRGF0YShjKTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIGVycm9yID09PSBudWxsICYmXHJcbiAgICAgIGMudmFsdWUgIT09IG51bGwgJiZcclxuICAgICAgYy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIGMudmFsdWUgIT09ICcnICYmXHJcbiAgICAgIHRoaXMuX21pbnRpbWUgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLl9taW50aW1lICE9PSBudWxsXHJcbiAgICApIHtcclxuICAgICAgZXJyb3IgPSBWYWxpZGF0aW9uLm1pblRpbWUoXHJcbiAgICAgICAgdGhpcy5fbWludGltZSxcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25tZXNzYWdlbWludGltZSxcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25tZXNzYWdlc3VtbWFyeW1pbnRpbWVcclxuICAgICAgKShjKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIGVycm9yID09PSBudWxsICYmXHJcbiAgICAgIGMudmFsdWUgIT09IG51bGwgJiZcclxuICAgICAgYy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIGMudmFsdWUgIT09ICcnICYmXHJcbiAgICAgIHRoaXMuX21heHRpbWUgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLl9tYXh0aW1lICE9PSBudWxsXHJcbiAgICApIHtcclxuICAgICAgZXJyb3IgPSBWYWxpZGF0aW9uLm1heFRpbWUoXHJcbiAgICAgICAgdGhpcy5fbWF4dGltZSxcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25tZXNzYWdlbWF4dGltZSxcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25tZXNzYWdlc3VtbWFyeW1heHRpbWVcclxuICAgICAgKShjKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZXJyb3I7XHJcbiAgfVxyXG5cclxuICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBNZXRob2RzXHJcbn1cclxuIl19
212
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS5qcyIsInNvdXJjZVJvb3QiOiJDOi9Qcm9qZWt0ZS9zaW1wbGVhbmd1bGFyY29udHJvbHMtbmcxMC9jaC5qbmV0d29yay5zYWMtY29udHJvbHMvcHJvamVjdHMvc2FjLWNvbW1vbi9zcmMvIiwic291cmNlcyI6WyJjb250cm9scy9kYXRldGltZS90aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4RyxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEtBQUssT0FBTyxNQUFNLFFBQVEsQ0FBQztBQUVsQzs7R0FFRztBQUVILE1BQU0sT0FBTyxhQUFjLFNBQVEsc0JBQXNCO0lBb0VyRCx3QkFBd0I7SUFFeEIsdUJBQXVCO0lBRXZCOzs7OztPQUtHO0lBQ0gsWUFDSSxVQUErQixFQUMvQixRQUFrQixFQUNSLFVBQXNCLEVBQ2hDLEtBQXdCO1FBRXhCLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUhyQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBaEZwQyxxQkFBcUI7UUFFckI7O1dBRUc7UUFDYSxlQUFVLEdBQVcsT0FBTyxDQUFDO1FBRTdDOztXQUVHO1FBQ2EsY0FBUyxHQUFHO1lBQ3hCLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVTtZQUNyQixNQUFNLEVBQUU7Z0JBQ0osRUFBRSxFQUFFO29CQUNBLElBQUksRUFBRSxLQUFLLENBQUMsV0FBVztvQkFDdkIsSUFB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SyxLQUFLLElBQUk7WUFDZCxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUk7WUFDaEIsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTO1lBQ3JCLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRTtZQUNkLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUztZQUMzQixJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFDeEI7WUFDRSxLQUFLLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FDdEIsSUFBSSxDQUFDLFFBQVEsRUFDYixJQUFJLENBQUMsd0JBQXdCLEVBQzdCLElBQUksQ0FBQywrQkFBK0IsQ0FDdkMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNSO1FBRUQsSUFDSSxLQUFLLEtBQUssSUFBSTtZQUNkLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFBSTtZQUNoQixDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVM7WUFDckIsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTO1lBQzNCLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUN4QjtZQUNFLEtBQUssR0FBRyxVQUFVLENBQUMsT0FBTyxDQUN0QixJQUFJLENBQUMsUUFBUSxFQUNiLElBQUksQ0FBQyx3QkFBd0IsRUFDN0IsSUFBSSxDQUFDLCtCQUErQixDQUN2QyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ1I7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDOzs7WUE3T0osU0FBUzs7O1lBVEQsbUJBQW1CO1lBQ3FDLFFBQVE7WUFBbEMsVUFBVTtZQUF4QyxpQkFBaUI7Ozt1Q0E0RHJCLEtBQUs7dUNBS0wsS0FBSzs4Q0FLTCxLQUFLOzhDQUtMLEtBQUs7c0JBbUNMLEtBQUs7c0JBZ0JMLEtBQUs7c0JBcUNMLFlBQVksU0FBQyxnQkFBZ0IsRUFBRSxDQUFDLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNhY0Jhc2VEYXRlVGltZUNvbnRyb2wgfSBmcm9tICcuLi8uLi9jb21tb24vYmFzZWRhdGV0aW1lY29udHJvbCc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb24gfSBmcm9tICcuLi8uLi92YWxpZGF0aW9uJztcclxuaW1wb3J0IHsgU2FjRm9ybUxheW91dENvbW1vbiB9IGZyb20gJy4uL2xheW91dC9mb3JtbGF5b3V0JztcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbmplY3RvciwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgKiBhcyBJTWFzayBmcm9tICdpbWFzayc7XHJcbmltcG9ydCAqIGFzIG1vbWVudF8gZnJvbSAnbW9tZW50JztcclxuXHJcbi8qKlxyXG4gKiBLb21wb25lbnRlIGbDvHIgU2FjVGltZUNvbW1vbi4gRXh0ZW5kcyBTYWNCYXNlRGF0ZVRpbWVDb250cm9sXHJcbiAqL1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGNsYXNzIFNhY1RpbWVDb21tb24gZXh0ZW5kcyBTYWNCYXNlRGF0ZVRpbWVDb250cm9sIHtcclxuICAgIC8vICNyZWdpb24gUHJvcGVydGllc1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRm9ybWF0IGRlcyBEYXR1bXNcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlYWRvbmx5IFRJTUVGT1JNQVQ6IHN0cmluZyA9ICdISDptbSc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXNrZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgaW1hc2tEYXRlID0ge1xyXG4gICAgICAgIG1hc2s6IHRoaXMuVElNRUZPUk1BVCxcclxuICAgICAgICBibG9ja3M6IHtcclxuICAgICAgICAgICAgSEg6IHtcclxuICAgICAgICAgICAgICAgIG1hc2s6IElNYXNrLk1hc2tlZFJhbmdlLFxyXG4gICAgICAgICAgICAgICAgZnJvbTogMCxcclxuICAgICAgICAgICAgICAgIHRvOiAyMyxcclxuICAgICAgICAgICAgICAgIG1heExlbmd0aDogMixcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbW06IHtcclxuICAgICAgICAgICAgICAgIG1hc2s6IElNYXNrLk1hc2tlZFJhbmdlLFxyXG4gICAgICAgICAgICAgICAgZnJvbTogMCxcclxuICAgICAgICAgICAgICAgIHRvOiA1OSxcclxuICAgICAgICAgICAgICAgIG1heExlbmd0aDogMixcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBsYWNlaG9sZGVyQ2hhcjogJ18nLFxyXG4gICAgICAgIGF1dG9maXg6IHRydWUsXHJcbiAgICAgICAgbGF6eTogZmFsc2UsXHJcbiAgICAgICAgb3ZlcndyaXRlOiB0cnVlLFxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1heCBUaW1lXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBfbWF4dGltZTogRGF0ZSA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNaW4gVGltZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgX21pbnRpbWU6IERhdGUgPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTW9tZW50IEpTIG1vZHVsZSBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbW9tZW50ID0gbW9tZW50X1snZGVmYXVsdCddO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzb3VyY2UgS2V5IGbDvHIgVmFsaWRhdGlvbiBNZXNzYWdlIE1pblRpbWUgYmVpIENvbnRyb2xcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIHZhbGlkYXRpb25tZXNzYWdlbWF4dGltZTogc3RyaW5nID0gdGhpcy52YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JNYXhUaW1lO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzb3VyY2UgS2V5IGbDvHIgVmFsaWRhdGlvbiBNZXNzYWdlIE1pblRpbWUgYmVpIENvbnRyb2xcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIHZhbGlkYXRpb25tZXNzYWdlbWludGltZTogc3RyaW5nID0gdGhpcy52YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JNaW5UaW1lO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzb3VyY2UgS2V5IGbDvHIgVmFsaWRhdGlvbiBNZXNzYWdlIE1pblRpbWUgaW4gVmFsaWRhdGlvbiBTdW1tYXJ5XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyB2YWxpZGF0aW9ubWVzc2FnZXN1bW1hcnltYXh0aW1lOiBzdHJpbmcgPSB0aGlzLnZhbGlkYXRpb25LZXlTZXJ2aWNlLlZhbGlkYXRpb25FcnJvclN1bW1hcnlNYXhUaW1lO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzb3VyY2UgS2V5IGbDvHIgVmFsaWRhdGlvbiBNZXNzYWdlIE1pblRpbWUgaW4gVmFsaWRhdGlvbiBTdW1tYXJ5XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyB2YWxpZGF0aW9ubWVzc2FnZXN1bW1hcnltaW50aW1lOiBzdHJpbmcgPSB0aGlzLnZhbGlkYXRpb25LZXlTZXJ2aWNlLlZhbGlkYXRpb25FcnJvclN1bW1hcnlNaW5UaW1lO1xyXG5cclxuICAgIC8vICNlbmRyZWdpb24gUHJvcGVydGllc1xyXG5cclxuICAgIC8vICNyZWdpb24gQ29uc3RydWN0b3JzXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb25zdHJ1Y3RvclxyXG4gICAgICogQHBhcmFtIGZvcm1sYXlvdXQgU2FjRm9ybUxheW91dENvbW1vbiB0byBkZWZpbmUgc2NvcGVkIGxheW91dCBzZXR0aW5nc1xyXG4gICAgICogQHBhcmFtIGluamVjdG9yIEluamVjdG9yIGZvciBpbmplY3Rpbmcgc2VydmljZXNcclxuICAgICAqIEBwYXJhbSBlbGVtZW50UmVmIHJlZmVyZW5jZSB0byBodG1sIGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgZm9ybWxheW91dDogU2FjRm9ybUxheW91dENvbW1vbixcclxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHJvdGVjdGVkIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihmb3JtbGF5b3V0LCBpbmplY3RvciwgZWxlbWVudFJlZiwgY2RSZWYpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICNlbmRyZWdpb24gQ29uc3RydWN0b3JzXHJcblxyXG4gICAgLy8gI3JlZ2lvbiBQdWJsaWMgR2V0dGVycyBBbmQgU2V0dGVyc1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogaWNvbiBmb3IgZGF0ZSBzZWxlY3RvciBidXR0b25cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBJY29uU2VsZWN0b3IoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pY29uU2VydmljZS5UaW1lQ29tcG9uZW50U2VsZWN0b3JJY29uO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWF4IFRpbWVcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgbWF4dGltZSh2OiBzdHJpbmcgfCBEYXRlIHwgbnVsbCkge1xyXG4gICAgICAgIGxldCB0aW1lID0gdGhpcy5tb21lbnQodiwgW3RoaXMuVElNRUZPUk1BVF0sIHRydWUpO1xyXG5cclxuICAgICAgICB0aW1lID0gdGhpcy5Nb2RpZnlQYXJzZWREYXRlVGltZVZhbHVlKHRpbWUpO1xyXG5cclxuICAgICAgICBpZiAodGltZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5fbWF4dGltZSA9IHN1cGVyLmdldERhdGUodGltZSkudG9EYXRlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fbWF4dGltZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWluIFRpbWVcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgbWludGltZSh2OiBzdHJpbmcgfCBEYXRlIHwgbnVsbCkge1xyXG4gICAgICAgIGxldCB0aW1lID0gdGhpcy5tb21lbnQodiwgW3RoaXMuVElNRUZPUk1BVF0sIHRydWUpO1xyXG5cclxuICAgICAgICB0aW1lID0gdGhpcy5Nb2RpZnlQYXJzZWREYXRlVGltZVZhbHVlKHRpbWUpO1xyXG5cclxuICAgICAgICBpZiAodGltZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5fbWludGltZSA9IHN1cGVyLmdldERhdGUodGltZSkudG9EYXRlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fbWludGltZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vICNlbmRyZWdpb24gUHVibGljIEdldHRlcnMgQW5kIFNldHRlcnNcclxuXHJcbiAgICAvLyAjcmVnaW9uIFB1YmxpYyBNZXRob2RzXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRob2RlIGVyZ2lidCBEYXR1bS1Gb3JtYXQgdm9tIFN0cmluZ1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgR2V0RGF0ZVRpbWVGb3JtYXRTdHJpbmcoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5USU1FRk9STUFUO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kZSBlcmdpYnQgRGF0dW0gLSBNb21lbnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIE1vZGlmeVBhcnNlZERhdGVUaW1lVmFsdWUodjogbW9tZW50Xy5Nb21lbnQpOiBtb21lbnRfLk1vbWVudCB7XHJcbiAgICAgICAgdi5kYXRlKDEpO1xyXG4gICAgICAgIHYubW9udGgoMCk7XHJcbiAgICAgICAgdi55ZWFyKDE5MDApO1xyXG4gICAgICAgIHJldHVybiB2O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSG9zdExpc3RlbmVyXHJcbiAgICAgKi9cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQudGFyZ2V0J10pXHJcbiAgICAvKipcclxuICAgICAqIENsaWNrIEV2ZW50XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbkNsaWNrKHRhcmdldEVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoIXRoaXMucGlja2VyY29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGNsaWNrZWRJbnNpZGVDb250YWluZXIgPSB0aGlzLnBpY2tlcmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRhcmdldEVsZW1lbnQpO1xyXG4gICAgICAgIGNvbnN0IGNsaWNrZWRJbnNpZGVSZWZlcmVuY2UgPSB0aGlzLnBpY2tlcmJ1dHRvbi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRhcmdldEVsZW1lbnQpO1xyXG4gICAgICAgIGlmICghY2xpY2tlZEluc2lkZUNvbnRhaW5lciAmJiAhY2xpY2tlZEluc2lkZVJlZmVyZW5jZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9zaG93c2VsZWN0b3IgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBaZWlndCBEYXRlIFNlbGVjdG9yIGFuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzaG93VGltZVNlbGVjdG9yKCk6IHZvaWQge1xyXG4gICAgICAgIC8vIFRvdWNoIEV2ZW50IGF1c2zDtnNlblxyXG4gICAgICAgIHRoaXMub25Ub3VjaCgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fc2hvd3NlbGVjdG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Nob3dzZWxlY3RvciA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Nob3dzZWxlY3RvciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGltZSBTZWxlY3RvclxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdGltZXNlbGVjdCh2OiBhbnkpIHtcclxuICAgICAgICBpZiAodi5kYXRlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVTdHJpbmcoJycpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm1vbWVudCh2LmRhdGUpLnV0YygpLnRvRGF0ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc2hvd3NlbGVjdG9yID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0b3JcclxuICAgICAqL1xyXG4gICAgcHVibGljIHZhbGlkYXRlRGF0YShjOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICAgICAgbGV0IGVycm9yOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICAgIGVycm9yID0gc3VwZXIudmFsaWRhdGVEYXRhKGMpO1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGVycm9yID09PSBudWxsICYmXHJcbiAgICAgICAgICAgIGMudmFsdWUgIT09IG51bGwgJiZcclxuICAgICAgICAgICAgYy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgIGMudmFsdWUgIT09ICcnICYmXHJcbiAgICAgICAgICAgIHRoaXMuX21pbnRpbWUgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICB0aGlzLl9taW50aW1lICE9PSBudWxsXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGVycm9yID0gVmFsaWRhdGlvbi5taW5UaW1lKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbWludGltZSxcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbm1lc3NhZ2VtaW50aW1lLFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9ubWVzc2FnZXN1bW1hcnltaW50aW1lXHJcbiAgICAgICAgICAgICkoYyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGVycm9yID09PSBudWxsICYmXHJcbiAgICAgICAgICAgIGMudmFsdWUgIT09IG51bGwgJiZcclxuICAgICAgICAgICAgYy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgIGMudmFsdWUgIT09ICcnICYmXHJcbiAgICAgICAgICAgIHRoaXMuX21heHRpbWUgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICB0aGlzLl9tYXh0aW1lICE9PSBudWxsXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGVycm9yID0gVmFsaWRhdGlvbi5tYXhUaW1lKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4dGltZSxcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbm1lc3NhZ2VtYXh0aW1lLFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9ubWVzc2FnZXN1bW1hcnltYXh0aW1lXHJcbiAgICAgICAgICAgICkoYyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZXJyb3I7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gI2VuZHJlZ2lvbiBQdWJsaWMgTWV0aG9kc1xyXG59XHJcbiJdfQ==
@@ -1,10 +1,8 @@
1
- import { ChangeDetectorRef, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild, Directive, } from '@angular/core';
1
+ import { ChangeDetectorRef, Directive, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild, } from '@angular/core';
2
2
  /**
3
3
  * Base Komponente für Dialog
4
4
  */
5
5
  export class SacDialogCommon {
6
- // #endregion
7
- // #region Constructor
8
6
  /**
9
7
  * Konstruktor
10
8
  * Inject des Formulars
@@ -21,11 +19,6 @@ export class SacDialogCommon {
21
19
  * Die akzeptabel keywordssind: 'small', 'large', 'extralarge', 'medium', ''.
22
20
  */
23
21
  this._size = '';
24
- // #region Properties
25
- /**
26
- * Input Property. Erhält den Title des Dialog. Default Value: 'Dialog'.
27
- */
28
- this.title = 'Dialog';
29
22
  /**
30
23
  * Das input property akzeptiert boolen Wert. Definiert ob das Dialog darf durch ESC geschlossen werden. Default ist true.
31
24
  */
@@ -34,26 +27,22 @@ export class SacDialogCommon {
34
27
  * Das input property akzeptiert boolen Wert. Definiert ob das Dialog darf durch click außerhalb des Dialog-Fenster geschlossen werden. Default ist true.
35
28
  */
36
29
  this.backdrop = true;
37
- /**
38
- * Input Property. Erhält den Namen des Dialog - benutzt für das ID. Default Value: ''
39
- */
40
- this.name = '';
41
30
  /**
42
31
  * Steuert ob im Header des Dialogs ein Button angezeigt wird.
43
32
  */
44
33
  this.closebutton = true;
45
34
  /**
46
- * Input Property. Erhält die Breite des Dialog
35
+ * Output Emitter. Wird aufgerufen, wenn das Wert des _show property geändert ist - damait das Dialog geöfnet/geschlossen wird.
47
36
  */
48
- this.width = null;
37
+ this.isvisibleChange = new EventEmitter();
49
38
  /**
50
- * Definiert eine feste Höhe beim Dialog.
39
+ * Input Property. Erhält den Namen des Dialog - benutzt für das ID. Default Value: ''
51
40
  */
52
- this.height = null;
41
+ this.name = '';
53
42
  /**
54
- * Output Emitter. Wird aufgerufen, wenn das Wert des _show property geändert ist - damait das Dialog geöfnet/geschlossen wird.
43
+ * Input Property. Erhält den Title des Dialog. Default Value: 'Dialog'.
55
44
  */
56
- this.isvisibleChange = new EventEmitter();
45
+ this.title = 'Dialog';
57
46
  }
58
47
  /**
59
48
  * Implementation als Setter, da mit ngIf das Element bei Unsichtbarkeit UNDEFINED ist.
@@ -62,14 +51,10 @@ export class SacDialogCommon {
62
51
  this.dialogElement = content;
63
52
  }
64
53
  /**
65
- * Das Input akzeptiert sowohl default size-css-Klassen als auch custom Klassen.
66
- * case insensitive.
67
- * Die akzeptabel default-size-Klassen sind: 'small', 'large', 'extralarge', 'medium', ''.
68
- * Wenn size ist NICHT gesetzt (oder 'medium' oder ''), default ist in medium size: max-width 500px.
54
+ * Getter. Ergibt das boolen Wert des _show property
69
55
  */
70
- set size(v) {
71
- v = v.toLowerCase();
72
- this._size = v;
56
+ get isvisible() {
57
+ return this._show;
73
58
  }
74
59
  /**
75
60
  * Setter. Erhält das boolen Wert des _show property
@@ -90,77 +75,40 @@ export class SacDialogCommon {
90
75
  this._show = v;
91
76
  }
92
77
  /**
93
- * Getter. Ergibt das boolen Wert des _show property
78
+ * Das Input akzeptiert sowohl default size-css-Klassen als auch custom Klassen.
79
+ * case insensitive.
80
+ * Die akzeptabel default-size-Klassen sind: 'small', 'large', 'extralarge', 'medium', ''.
81
+ * Wenn size ist NICHT gesetzt (oder 'medium' oder ''), default ist in medium size: max-width 500px.
94
82
  */
95
- get isvisible() {
96
- return this._show;
83
+ set size(v) {
84
+ this._size = v;
97
85
  }
98
86
  /**
99
- * Die Funktion prüft ob es ein default css classe für Size des Dialog durch den size Input gesetzt wurde.
87
+ * Getter for ChangeDetector.
100
88
  */
101
- issetdefaultsize() {
102
- let result = false;
103
- switch (this._size) {
104
- case 'small':
105
- result = true;
106
- break;
107
- case 'medium':
108
- result = true;
109
- break;
110
- case 'large':
111
- result = true;
112
- break;
113
- case 'extralarge':
114
- result = true;
115
- break;
116
- case '':
117
- result = true;
118
- break;
119
- }
120
- return result;
89
+ get ChangeDetector() {
90
+ return this.cdRef;
121
91
  }
122
- // #endregion
123
92
  /**
124
- * Methode wenn Componente entfernt wird
93
+ * Die Methode setz den Wert des _show property auf false
125
94
  */
126
- ngOnDestroy() {
95
+ hide() {
127
96
  if (this.hasSetBodyTag && document.body.classList.contains('modal-open')) {
128
97
  document.body.classList.remove('modal-open');
129
98
  this.hasSetBodyTag = false;
130
99
  }
131
- }
132
- // #region Methods
133
- /**
134
- * Die Methode setz den Wert des _show property auf true
135
- */
136
- show() {
137
- this._show = true;
138
- if (!this.hasSetBodyTag &&
139
- !document.body.classList.contains('modal-open')) {
140
- document.body.classList.add('modal-open');
141
- this.hasSetBodyTag = true;
142
- }
100
+ this._show = false;
143
101
  this.isvisibleChange.emit(this._show);
144
102
  }
145
103
  /**
146
- * Die Methode setz den Wert des _show property auf false
104
+ * Methode wenn Componente entfernt wird
147
105
  */
148
- hide() {
106
+ ngOnDestroy() {
149
107
  if (this.hasSetBodyTag && document.body.classList.contains('modal-open')) {
150
108
  document.body.classList.remove('modal-open');
151
109
  this.hasSetBodyTag = false;
152
110
  }
153
- this._show = false;
154
- this.isvisibleChange.emit(this._show);
155
111
  }
156
- /**
157
- * Getter for ChangeDetector.
158
- */
159
- get ChangeDetector() {
160
- return this.cdRef;
161
- }
162
- // #endregion
163
- // #region Host Actions
164
112
  /**
165
113
  * Allow Close by Click outside Dialog
166
114
  */
@@ -182,6 +130,18 @@ export class SacDialogCommon {
182
130
  this.hide();
183
131
  }
184
132
  }
133
+ /**
134
+ * Die Methode setz den Wert des _show property auf true
135
+ */
136
+ show() {
137
+ this._show = true;
138
+ if (!this.hasSetBodyTag &&
139
+ !document.body.classList.contains('modal-open')) {
140
+ document.body.classList.add('modal-open');
141
+ this.hasSetBodyTag = true;
142
+ }
143
+ this.isvisibleChange.emit(this._show);
144
+ }
185
145
  }
186
146
  SacDialogCommon.decorators = [
187
147
  { type: Directive }
@@ -190,18 +150,16 @@ SacDialogCommon.ctorParameters = () => [
190
150
  { type: ChangeDetectorRef }
191
151
  ];
192
152
  SacDialogCommon.propDecorators = {
193
- dialogElementSetter: [{ type: ViewChild, args: ['dialog', { static: false },] }],
194
- title: [{ type: Input }],
195
153
  allowesc: [{ type: Input }],
196
154
  backdrop: [{ type: Input }],
197
- name: [{ type: Input }],
198
155
  closebutton: [{ type: Input }],
199
- width: [{ type: Input }],
200
- height: [{ type: Input }],
201
- size: [{ type: Input }],
202
156
  isvisibleChange: [{ type: Output }],
157
+ name: [{ type: Input }],
158
+ title: [{ type: Input }],
159
+ dialogElementSetter: [{ type: ViewChild, args: ['dialog', { static: false },] }],
203
160
  isvisible: [{ type: Input }],
161
+ size: [{ type: Input }],
204
162
  onClick: [{ type: HostListener, args: ['click', ['$event'],] }],
205
163
  onKeydownHandler: [{ type: HostListener, args: ['document:keydown', ['$event'],] }]
206
164
  };
207
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmpzIiwic291cmNlUm9vdCI6IkM6L1Byb2pla3RlL3NpbXBsZWFuZ3VsYXJjb250cm9scy1uZzEwL2NoLmpuZXR3b3JrLnNhYy1jb250cm9scy9wcm9qZWN0cy9zYWMtY29tbW9uL3NyYy8iLCJzb3VyY2VzIjpbImNvbnRyb2xzL2RpYWxvZy9kaWFsb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEdBRVYsTUFBTSxlQUFlLENBQUM7QUFFdkI7O0dBRUc7QUFFSCxNQUFNLE9BQU8sZUFBZTtJQXFKMUIsYUFBYTtJQUViLHNCQUFzQjtJQUV0Qjs7O09BR0c7SUFDSCxZQUFvQixLQUF3QjtRQUF4QixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQXZKcEMsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFVOUI7O1dBRUc7UUFDSCxVQUFLLEdBQVksS0FBSyxDQUFDO1FBRXZCOzs7V0FHRztRQUNILFVBQUssR0FBVyxFQUFFLENBQUM7UUFFbkIscUJBQXFCO1FBRXJCOztXQUVHO1FBRUksVUFBSyxHQUFXLFFBQVEsQ0FBQztRQUVoQzs7V0FFRztRQUVJLGFBQVEsR0FBWSxJQUFJLENBQUM7UUFFaEM7O1dBRUc7UUFFSSxhQUFRLEdBQVksSUFBSSxDQUFDO1FBRWhDOztXQUVHO1FBRUksU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUV6Qjs7V0FFRztRQUVJLGdCQUFXLEdBQVksSUFBSSxDQUFDO1FBRW5DOztXQUVHO1FBRUksVUFBSyxHQUFXLElBQUksQ0FBQztRQUU1Qjs7V0FFRztRQUVJLFdBQU0sR0FBVyxJQUFJLENBQUM7UUFjN0I7O1dBRUc7UUFFSCxvQkFBZSxHQUEwQixJQUFJLFlBQVksRUFBVyxDQUFDO0lBc0V0QixDQUFDO0lBckpoRDs7T0FFRztJQUNILElBQ0ksbUJBQW1CLENBQUMsT0FB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S0FBSzs4QkFTTCxNQUFNO3dCQU1OLEtBQUs7c0JBNkhMLFlBQVksU0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7K0JBZ0JoQyxZQUFZLFNBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIERpcmVjdGl2ZSxcclxuICBPbkRlc3Ryb3ksXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG4vKipcclxuICogQmFzZSBLb21wb25lbnRlIGbDvHIgRGlhbG9nXHJcbiAqL1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGNsYXNzIFNhY0RpYWxvZ0NvbW1vbiBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgLyoqXHJcbiAgICogTmFtZSBkZXMgQ29udGFpbmVycyBmw7xyIGRlbiBEaWFsb2dcclxuICAgKi9cclxuICBkaWFsb2dFbGVtZW50OiBFbGVtZW50UmVmO1xyXG5cclxuICBwcml2YXRlIGhhc1NldEJvZHlUYWcgPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW1wbGVtZW50YXRpb24gYWxzIFNldHRlciwgZGEgbWl0IG5nSWYgZGFzIEVsZW1lbnQgYmVpIFVuc2ljaHRiYXJrZWl0IFVOREVGSU5FRCBpc3QuXHJcbiAgICovXHJcbiAgQFZpZXdDaGlsZCgnZGlhbG9nJywgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgc2V0IGRpYWxvZ0VsZW1lbnRTZXR0ZXIoY29udGVudDogRWxlbWVudFJlZikge1xyXG4gICAgdGhpcy5kaWFsb2dFbGVtZW50ID0gY29udGVudDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEJvb2xlYW4gUHJvcGVydHkgZGVmaW5pZXJ0IG9iIGRhcyBEaWFsb2cgYW5nZXplaWd0IHdpcmRcclxuICAgKi9cclxuICBfc2hvdzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBEYXMgcHJvcGVydHkgZW50aGllbHQgKHdlbm4gw7xiZXJoYXVwdCBnZXNldHp0KSBlbnR3ZWRlciBrZXl3b3JkcyBmw7xyIHNpemluZyBvZGVyIGN1c3RvbSBjc3MgS2xhc3Nlbi5cclxuICAgKiBEaWUgYWt6ZXB0YWJlbCBrZXl3b3Jkc3NpbmQ6ICdzbWFsbCcsICdsYXJnZScsICdleHRyYWxhcmdlJywgJ21lZGl1bScsICcnLlxyXG4gICAqL1xyXG4gIF9zaXplOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLy8gI3JlZ2lvbiBQcm9wZXJ0aWVzXHJcblxyXG4gIC8qKlxyXG4gICAqIElucHV0IFByb3BlcnR5LiBFcmjDpGx0IGRlbiBUaXRsZSBkZXMgRGlhbG9nLiBEZWZhdWx0IFZhbHVlOiAnRGlhbG9nJy5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyB0aXRsZTogc3RyaW5nID0gJ0RpYWxvZyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIERhcyBpbnB1dCBwcm9wZXJ0eSBha3plcHRpZXJ0IGJvb2xlbiBXZXJ0LiBEZWZpbmllcnQgb2IgZGFzIERpYWxvZyBkYXJmIGR1cmNoIEVTQyBnZXNjaGxvc3NlbiB3ZXJkZW4uIERlZmF1bHQgaXN0IHRydWUuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgYWxsb3dlc2M6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvKipcclxuICAgKiBEYXMgaW5wdXQgcHJvcGVydHkgYWt6ZXB0aWVydCBib29sZW4gV2VydC4gRGVmaW5pZXJ0IG9iIGRhcyBEaWFsb2cgZGFyZiBkdXJjaCBjbGljayBhdcOfZXJoYWxiIGRlcyBEaWFsb2ctRmVuc3RlciBnZXNjaGxvc3NlbiB3ZXJkZW4uIERlZmF1bHQgaXN0IHRydWUuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgYmFja2Ryb3A6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvKipcclxuICAgKiBJbnB1dCBQcm9wZXJ0eS4gRXJow6RsdCBkZW4gTmFtZW4gZGVzIERpYWxvZyAtIGJlbnV0enQgZsO8ciBkYXMgSUQuIERlZmF1bHQgVmFsdWU6ICcnXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgbmFtZTogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0ZXVlcnQgb2IgaW0gSGVhZGVyIGRlcyBEaWFsb2dzIGVpbiBCdXR0b24gYW5nZXplaWd0IHdpcmQuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgY2xvc2VidXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvKipcclxuICAgKiBJbnB1dCBQcm9wZXJ0eS4gRXJow6RsdCBkaWUgQnJlaXRlIGRlcyBEaWFsb2dcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyB3aWR0aDogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5pZXJ0IGVpbmUgZmVzdGUgSMO2aGUgYmVpbSBEaWFsb2cuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgaGVpZ2h0OiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBEYXMgSW5wdXQgYWt6ZXB0aWVydCBzb3dvaGwgZGVmYXVsdCBzaXplLWNzcy1LbGFzc2VuIGFscyBhdWNoIGN1c3RvbSBLbGFzc2VuLlxyXG4gICAqIGNhc2UgaW5zZW5zaXRpdmUuXHJcbiAgICogRGllIGFremVwdGFiZWwgZGVmYXVsdC1zaXplLUtsYXNzZW4gc2luZDogJ3NtYWxsJywgJ2xhcmdlJywgJ2V4dHJhbGFyZ2UnLCAnbWVkaXVtJywgJycuXHJcbiAgICogV2VubiBzaXplIGlzdCBOSUNIVCBnZXNldHp0IChvZGVyICdtZWRpdW0nIG9kZXIgJycpLCBkZWZhdWx0IGlzdCBpbiBtZWRpdW0gc2l6ZTogbWF4LXdpZHRoIDUwMHB4LlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNpemUodjogc3RyaW5nKSB7XHJcbiAgICB2ID0gdi50b0xvd2VyQ2FzZSgpO1xyXG4gICAgdGhpcy5fc2l6ZSA9IHY7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPdXRwdXQgRW1pdHRlci4gV2lyZCBhdWZnZXJ1ZmVuLCB3ZW5uIGRhcyBXZXJ0IGRlcyBfc2hvdyBwcm9wZXJ0eSBnZcOkbmRlcnQgaXN0IC0gZGFtYWl0IGRhcyBEaWFsb2cgZ2XDtmZuZXQvZ2VzY2hsb3NzZW4gd2lyZC5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBpc3Zpc2libGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0dGVyLiBFcmjDpGx0IGRhcyBib29sZW4gV2VydCBkZXMgX3Nob3cgcHJvcGVydHlcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpc3Zpc2libGUodjogYm9vbGVhbikge1xyXG4gICAgaWYgKFxyXG4gICAgICB2ICYmXHJcbiAgICAgICF0aGlzLmhhc1NldEJvZHlUYWcgJiZcclxuICAgICAgIWRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdtb2RhbC1vcGVuJylcclxuICAgICkge1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ21vZGFsLW9wZW4nKTtcclxuICAgICAgdGhpcy5oYXNTZXRCb2R5VGFnID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgICF2ICYmXHJcbiAgICAgIHRoaXMuaGFzU2V0Qm9keVRhZyAmJlxyXG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygnbW9kYWwtb3BlbicpXHJcbiAgICApIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdtb2RhbC1vcGVuJyk7XHJcbiAgICAgIHRoaXMuaGFzU2V0Qm9keVRhZyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3Nob3cgPSB2O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0dGVyLiBFcmdpYnQgZGFzIGJvb2xlbiBXZXJ0IGRlcyBfc2hvdyBwcm9wZXJ0eVxyXG4gICAqL1xyXG4gIGdldCBpc3Zpc2libGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2hvdztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERpZSBGdW5rdGlvbiBwcsO8ZnQgb2IgZXMgZWluIGRlZmF1bHQgY3NzIGNsYXNzZSBmw7xyIFNpemUgZGVzIERpYWxvZyBkdXJjaCBkZW4gc2l6ZSBJbnB1dCBnZXNldHp0IHd1cmRlLlxyXG4gICAqL1xyXG4gIGlzc2V0ZGVmYXVsdHNpemUoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmVzdWx0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLl9zaXplKSB7XHJcbiAgICAgIGNhc2UgJ3NtYWxsJzpcclxuICAgICAgICByZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdtZWRpdW0nOlxyXG4gICAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2xhcmdlJzpcclxuICAgICAgICByZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdleHRyYWxhcmdlJzpcclxuICAgICAgICByZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICcnOlxyXG4gICAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vICNlbmRyZWdpb25cclxuXHJcbiAgLy8gI3JlZ2lvbiBDb25zdHJ1Y3RvclxyXG5cclxuICAvKipcclxuICAgKiBLb25zdHJ1a3RvclxyXG4gICAqIEluamVjdCBkZXMgRm9ybXVsYXJzXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XHJcblxyXG4gIC8vICNlbmRyZWdpb25cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kZSB3ZW5uIENvbXBvbmVudGUgZW50ZmVybnQgd2lyZFxyXG4gICAqL1xyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaGFzU2V0Qm9keVRhZyAmJiBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygnbW9kYWwtb3BlbicpKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnbW9kYWwtb3BlbicpO1xyXG4gICAgICB0aGlzLmhhc1NldEJvZHlUYWcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vICNyZWdpb24gTWV0aG9kc1xyXG5cclxuICAvKipcclxuICAgKiBEaWUgTWV0aG9kZSBzZXR6IGRlbiBXZXJ0IGRlcyBfc2hvdyBwcm9wZXJ0eSBhdWYgdHJ1ZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzaG93KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc2hvdyA9IHRydWU7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5oYXNTZXRCb2R5VGFnICYmXHJcbiAgICAgICFkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygnbW9kYWwtb3BlbicpXHJcbiAgICApIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdtb2RhbC1vcGVuJyk7XHJcbiAgICAgIHRoaXMuaGFzU2V0Qm9keVRhZyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc3Zpc2libGVDaGFuZ2UuZW1pdCh0aGlzLl9zaG93KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERpZSBNZXRob2RlIHNldHogZGVuIFdlcnQgZGVzIF9zaG93IHByb3BlcnR5IGF1ZiBmYWxzZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBoaWRlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaGFzU2V0Qm9keVRhZyAmJiBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygnbW9kYWwtb3BlbicpKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnbW9kYWwtb3BlbicpO1xyXG4gICAgICB0aGlzLmhhc1NldEJvZHlUYWcgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9zaG93ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzdmlzaWJsZUNoYW5nZS5lbWl0KHRoaXMuX3Nob3cpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0dGVyIGZvciBDaGFuZ2VEZXRlY3Rvci5cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZ2V0IENoYW5nZURldGVjdG9yKCk6IENoYW5nZURldGVjdG9yUmVmIHtcclxuICAgIHJldHVybiB0aGlzLmNkUmVmO1xyXG4gIH1cclxuXHJcbiAgLy8gI2VuZHJlZ2lvblxyXG5cclxuICAvLyAjcmVnaW9uIEhvc3QgQWN0aW9uc1xyXG5cclxuICAvKipcclxuICAgKiBBbGxvdyBDbG9zZSBieSBDbGljayBvdXRzaWRlIERpYWxvZ1xyXG4gICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcclxuICBvbkNsaWNrKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5hbGxvd2VzYyA9PT0gZmFsc2UgfHxcclxuICAgICAgKHRoaXMuZGlhbG9nRWxlbWVudCAhPT0gbnVsbCAmJlxyXG4gICAgICAgIHRoaXMuZGlhbG9nRWxlbWVudCAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgZXZlbnQudGFyZ2V0ICE9PSB0aGlzLmRpYWxvZ0VsZW1lbnQubmF0aXZlRWxlbWVudClcclxuICAgICkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmhpZGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsbG93IENsb3NlIGJ5IEVTQ1xyXG4gICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxyXG4gIG9uS2V5ZG93bkhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGNvbnN0IEVTQ0FQRV9LRVlDT0RFID0gJ0VzY2FwZSc7XHJcblxyXG4gICAgaWYgKHRoaXMuYWxsb3dlc2MgPT09IHRydWUgJiYgZXZlbnQua2V5ID09PSBFU0NBUEVfS0VZQ09ERSkge1xyXG4gICAgICB0aGlzLmhpZGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vICNlbmRyZWdpb25cclxufVxyXG4iXX0=
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmpzIiwic291cmNlUm9vdCI6IkM6L1Byb2pla3RlL3NpbXBsZWFuZ3VsYXJjb250cm9scy1uZzEwL2NoLmpuZXR3b3JrLnNhYy1jb250cm9scy9wcm9qZWN0cy9zYWMtY29tbW9uL3NyYy8iLCJzb3VyY2VzIjpbImNvbnRyb2xzL2RpYWxvZy9kaWFsb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkI7O0dBRUc7QUFFSCxNQUFNLE9BQU8sZUFBZTtJQXVEMUI7OztPQUdHO0lBQ0gsWUFBb0IsS0FBd0I7UUFBeEIsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUExRHBDLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBRTlCOztXQUVHO1FBQ0ksVUFBSyxHQUFZLEtBQUssQ0FBQztRQUU5Qjs7O1dBR0c7UUFDSSxVQUFLLEdBQXFELEVBQUUsQ0FBQztRQUVwRTs7V0FFRztRQUVJLGFBQVEsR0FBWSxJQUFJLENBQUM7UUFFaEM7O1dBRUc7UUFFSSxhQUFRLEdBQVksSUFBSSxDQUFDO1FBRWhDOztXQUVHO1FBRUksZ0JBQVcsR0FBWSxJQUFJLENBQUM7UUFPbkM7O1dBRUc7UUFFSSxvQkFBZSxHQUEwQixJQUFJLFlBQVksRUFBVyxDQUFDO1FBRTVFOztXQUVHO1FBRUksU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUV6Qjs7V0FFRztRQUVJLFVBQUssR0FBVyxRQUFRLENBQUM7SUFNZSxDQUFDO0lBRWhEOztPQUVHO0lBQ0gsSUFDVyxtQkFBbUIsQ0FBQyxPQUFtQjtRQUNoRCxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BC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SSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7U0FDM0I7UUFFRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQzs7O1lBM0xGLFNBQVM7OztZQWRSLGlCQUFpQjs7O3VCQWdDaEIsS0FBSzt1QkFNTCxLQUFLOzBCQU1MLEtBQUs7OEJBV0wsTUFBTTttQkFNTixLQUFLO29CQU1MLEtBQUs7a0NBWUwsU0FBUyxTQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7d0JBZXJDLEtBQUs7bUJBNkJMLEtBQUs7c0JBc0NMLFlBQVksU0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7K0JBZ0JoQyxZQUFZLFNBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIERpcmVjdGl2ZSxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG4vKipcclxuICogQmFzZSBLb21wb25lbnRlIGbDvHIgRGlhbG9nXHJcbiAqL1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGNsYXNzIFNhY0RpYWxvZ0NvbW1vbiBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBoYXNTZXRCb2R5VGFnID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIEJvb2xlYW4gUHJvcGVydHkgZGVmaW5pZXJ0IG9iIGRhcyBEaWFsb2cgYW5nZXplaWd0IHdpcmRcclxuICAgKi9cclxuICBwdWJsaWMgX3Nob3c6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGFzIHByb3BlcnR5IGVudGhpZWx0ICh3ZW5uIMO8YmVyaGF1cHQgZ2VzZXR6dCkgZW50d2VkZXIga2V5d29yZHMgZsO8ciBzaXppbmcgb2RlciBjdXN0b20gY3NzIEtsYXNzZW4uXHJcbiAgICogRGllIGFremVwdGFiZWwga2V5d29yZHNzaW5kOiAnc21hbGwnLCAnbGFyZ2UnLCAnZXh0cmFsYXJnZScsICdtZWRpdW0nLCAnJy5cclxuICAgKi9cclxuICBwdWJsaWMgX3NpemU6ICdzbWFsbCcgfCAnbGFyZ2UnIHwgJ2V4dHJhbGFyZ2UnIHwgJ21lZGl1bScgfCAnJyA9ICcnO1xyXG5cclxuICAvKipcclxuICAgKiBEYXMgaW5wdXQgcHJvcGVydHkgYWt6ZXB0aWVydCBib29sZW4gV2VydC4gRGVmaW5pZXJ0IG9iIGRhcyBEaWFsb2cgZGFyZiBkdXJjaCBFU0MgZ2VzY2hsb3NzZW4gd2VyZGVuLiBEZWZhdWx0IGlzdCB0cnVlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGFsbG93ZXNjOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGFzIGlucHV0IHByb3BlcnR5IGFremVwdGllcnQgYm9vbGVuIFdlcnQuIERlZmluaWVydCBvYiBkYXMgRGlhbG9nIGRhcmYgZHVyY2ggY2xpY2sgYXXDn2VyaGFsYiBkZXMgRGlhbG9nLUZlbnN0ZXIgZ2VzY2hsb3NzZW4gd2VyZGVuLiBEZWZhdWx0IGlzdCB0cnVlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGJhY2tkcm9wOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogU3RldWVydCBvYiBpbSBIZWFkZXIgZGVzIERpYWxvZ3MgZWluIEJ1dHRvbiBhbmdlemVpZ3Qgd2lyZC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBjbG9zZWJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIE5hbWUgZGVzIENvbnRhaW5lcnMgZsO8ciBkZW4gRGlhbG9nXHJcbiAgICovXHJcbiAgcHVibGljIGRpYWxvZ0VsZW1lbnQ6IEVsZW1lbnRSZWY7XHJcblxyXG4gIC8qKlxyXG4gICAqIE91dHB1dCBFbWl0dGVyLiBXaXJkIGF1ZmdlcnVmZW4sIHdlbm4gZGFzIFdlcnQgZGVzIF9zaG93IHByb3BlcnR5IGdlw6RuZGVydCBpc3QgLSBkYW1haXQgZGFzIERpYWxvZyBnZcO2Zm5ldC9nZXNjaGxvc3NlbiB3aXJkLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBpc3Zpc2libGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5wdXQgUHJvcGVydHkuIEVyaMOkbHQgZGVuIE5hbWVuIGRlcyBEaWFsb2cgLSBiZW51dHp0IGbDvHIgZGFzIElELiBEZWZhdWx0IFZhbHVlOiAnJ1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIG5hbWU6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKipcclxuICAgKiBJbnB1dCBQcm9wZXJ0eS4gRXJow6RsdCBkZW4gVGl0bGUgZGVzIERpYWxvZy4gRGVmYXVsdCBWYWx1ZTogJ0RpYWxvZycuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgdGl0bGU6IHN0cmluZyA9ICdEaWFsb2cnO1xyXG5cclxuICAvKipcclxuICAgKiBLb25zdHJ1a3RvclxyXG4gICAqIEluamVjdCBkZXMgRm9ybXVsYXJzXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEltcGxlbWVudGF0aW9uIGFscyBTZXR0ZXIsIGRhIG1pdCBuZ0lmIGRhcyBFbGVtZW50IGJlaSBVbnNpY2h0YmFya2VpdCBVTkRFRklORUQgaXN0LlxyXG4gICAqL1xyXG4gIEBWaWV3Q2hpbGQoJ2RpYWxvZycsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIHB1YmxpYyBzZXQgZGlhbG9nRWxlbWVudFNldHRlcihjb250ZW50OiBFbGVtZW50UmVmKSB7XHJcbiAgICB0aGlzLmRpYWxvZ0VsZW1lbnQgPSBjb250ZW50O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0dGVyLiBFcmdpYnQgZGFzIGJvb2xlbiBXZXJ0IGRlcyBfc2hvdyBwcm9wZXJ0eVxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgaXN2aXNpYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Nob3c7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXR0ZXIuIEVyaMOkbHQgZGFzIGJvb2xlbiBXZXJ0IGRlcyBfc2hvdyBwcm9wZXJ0eVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBpc3Zpc2libGUodjogYm9vbGVhbikge1xyXG4gICAgaWYgKFxyXG4gICAgICB2ICYmXHJcbiAgICAgICF0aGlzLmhhc1NldEJvZHlUYWcgJiZcclxuICAgICAgIWRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdtb2RhbC1vcGVuJylcclxuICAgICkge1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ21vZGFsLW9wZW4nKTtcclxuICAgICAgdGhpcy5oYXNTZXRCb2R5VGFnID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgICF2ICYmXHJcbiAgICAgIHRoaXMuaGFzU2V0Qm9keVRhZyAmJlxyXG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygnbW9kYWwtb3BlbicpXHJcbiAgICApIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdtb2RhbC1vcGVuJyk7XHJcbiAgICAgIHRoaXMuaGFzU2V0Qm9keVRhZyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3Nob3cgPSB2O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGFzIElucHV0IGFremVwdGllcnQgc293b2hsIGRlZmF1bHQgc2l6ZS1jc3MtS2xhc3NlbiBhbHMgYXVjaCBjdXN0b20gS2xhc3Nlbi5cclxuICAgKiBjYXNlIGluc2Vuc2l0aXZlLlxyXG4gICAqIERpZSBha3plcHRhYmVsIGRlZmF1bHQtc2l6ZS1LbGFzc2VuIHNpbmQ6ICdzbWFsbCcsICdsYXJnZScsICdleHRyYWxhcmdlJywgJ21lZGl1bScsICcnLlxyXG4gICAqIFdlbm4gc2l6ZSBpc3QgTklDSFQgZ2VzZXR6dCAob2RlciAnbWVkaXVtJyBvZGVyICcnKSwgZGVmYXVsdCBpc3QgaW4gbWVkaXVtIHNpemU6IG1heC13aWR0aCA1MDBweC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgc2l6ZSh2OiAnc21hbGwnIHwgJ2xhcmdlJyB8ICdleHRyYWxhcmdlJyB8ICdtZWRpdW0nIHwgJycpIHtcclxuICAgIHRoaXMuX3NpemUgPSB2O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0dGVyIGZvciBDaGFuZ2VEZXRlY3Rvci5cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZ2V0IENoYW5nZURldGVjdG9yKCk6IENoYW5nZURldGVjdG9yUmVmIHtcclxuICAgIHJldHVybiB0aGlzLmNkUmVmO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGllIE1ldGhvZGUgc2V0eiBkZW4gV2VydCBkZXMgX3Nob3cgcHJvcGVydHkgYXVmIGZhbHNlXHJcbiAgICovXHJcbiAgcHVibGljIGhpZGUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5oYXNTZXRCb2R5VGFnICYmIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdtb2RhbC1vcGVuJykpIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdtb2RhbC1vcGVuJyk7XHJcbiAgICAgIHRoaXMuaGFzU2V0Qm9keVRhZyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3Nob3cgPSBmYWxzZTtcclxuICAgIHRoaXMuaXN2aXNpYmxlQ2hhbmdlLmVtaXQodGhpcy5fc2hvdyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRob2RlIHdlbm4gQ29tcG9uZW50ZSBlbnRmZXJudCB3aXJkXHJcbiAgICovXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaGFzU2V0Qm9keVRhZyAmJiBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygnbW9kYWwtb3BlbicpKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnbW9kYWwtb3BlbicpO1xyXG4gICAgICB0aGlzLmhhc1NldEJvZHlUYWcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsbG93IENsb3NlIGJ5IENsaWNrIG91dHNpZGUgRGlhbG9nXHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxyXG4gIHB1YmxpYyBvbkNsaWNrKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5hbGxvd2VzYyA9PT0gZmFsc2UgfHxcclxuICAgICAgKHRoaXMuZGlhbG9nRWxlbWVudCAhPT0gbnVsbCAmJlxyXG4gICAgICAgIHRoaXMuZGlhbG9nRWxlbWVudCAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgZXZlbnQudGFyZ2V0ICE9PSB0aGlzLmRpYWxvZ0VsZW1lbnQubmF0aXZlRWxlbWVudClcclxuICAgICkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmhpZGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsbG93IENsb3NlIGJ5IEVTQ1xyXG4gICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxyXG4gIHB1YmxpYyBvbktleWRvd25IYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBjb25zdCBFU0NBUEVfS0VZQ09ERSA9ICdFc2NhcGUnO1xyXG5cclxuICAgIGlmICh0aGlzLmFsbG93ZXNjID09PSB0cnVlICYmIGV2ZW50LmtleSA9PT0gRVNDQVBFX0tFWUNPREUpIHtcclxuICAgICAgdGhpcy5oaWRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaWUgTWV0aG9kZSBzZXR6IGRlbiBXZXJ0IGRlcyBfc2hvdyBwcm9wZXJ0eSBhdWYgdHJ1ZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzaG93KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc2hvdyA9IHRydWU7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5oYXNTZXRCb2R5VGFnICYmXHJcbiAgICAgICFkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygnbW9kYWwtb3BlbicpXHJcbiAgICApIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdtb2RhbC1vcGVuJyk7XHJcbiAgICAgIHRoaXMuaGFzU2V0Qm9keVRhZyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc3Zpc2libGVDaGFuZ2UuZW1pdCh0aGlzLl9zaG93KTtcclxuICB9XHJcbn1cclxuIl19