@kms-ngx-ui/presentational 0.0.24 → 14.0.0

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 (178) hide show
  1. package/README.md +28 -28
  2. package/{esm2015/kms-ngx-ui-presentational.js → esm2020/kms-ngx-ui-presentational.mjs} +4 -4
  3. package/esm2020/lib/directives/directives.module.mjs +40 -0
  4. package/{esm2015/lib/directives/mousewheel.directive.js → esm2020/lib/directives/mousewheel.directive.mjs} +56 -56
  5. package/{esm2015/lib/directives/sum-of-height.directive.js → esm2020/lib/directives/sum-of-height.directive.mjs} +74 -74
  6. package/{esm2015/lib/directives/swipe.directive.js → esm2020/lib/directives/swipe.directive.mjs} +183 -183
  7. package/esm2020/lib/directives/swipe.model.mjs +5 -0
  8. package/{esm2015/lib/directives/tooltip.directive.js → esm2020/lib/directives/tooltip.directive.mjs} +144 -144
  9. package/esm2020/lib/kms-ngx-ui-presentational.component.mjs +22 -0
  10. package/{esm2015/lib/kms-ngx-ui-presentational.module.js → esm2020/lib/kms-ngx-ui-presentational.module.mjs} +215 -217
  11. package/{esm2015/lib/kms-ngx-ui-presentational.service.js → esm2020/lib/kms-ngx-ui-presentational.service.mjs} +14 -14
  12. package/esm2020/lib/models/address.model.mjs +6 -0
  13. package/{esm2015/lib/models/iconSize.enum.js → esm2020/lib/models/iconSize.enum.mjs} +17 -17
  14. package/{esm2015/lib/models/image-snippet.model.js → esm2020/lib/models/image-snippet.model.mjs} +18 -18
  15. package/{esm2015/lib/models/index.js → esm2020/lib/models/index.mjs} +5 -5
  16. package/{esm2015/lib/models/is-value.function.js → esm2020/lib/models/is-value.function.mjs} +17 -17
  17. package/{esm2015/lib/models/salutation.enum.js → esm2020/lib/models/salutation.enum.mjs} +8 -8
  18. package/{esm2015/lib/models/types/attached-file-dto.model.js → esm2020/lib/models/types/attached-file-dto.model.mjs} +6 -6
  19. package/{esm2015/lib/models/types/nullable.type.js → esm2020/lib/models/types/nullable.type.mjs} +5 -5
  20. package/{esm2015/lib/parent-components/actions.component.js → esm2020/lib/parent-components/actions.component.mjs} +56 -56
  21. package/esm2020/lib/parent-components/form-control.component.mjs +75 -0
  22. package/esm2020/lib/parent-components/form.component.mjs +78 -0
  23. package/{esm2015/lib/pipes/custom-pipes.module.js → esm2020/lib/pipes/custom-pipes.module.mjs} +71 -71
  24. package/esm2020/lib/pipes/decode-uri.pipe.mjs +19 -0
  25. package/esm2020/lib/pipes/encode-uri.pipe.mjs +19 -0
  26. package/{esm2015/lib/pipes/integer-currency.pipe.js → esm2020/lib/pipes/integer-currency.pipe.mjs} +27 -27
  27. package/{esm2015/lib/pipes/safe-html.pipe.js → esm2020/lib/pipes/safe-html.pipe.mjs} +23 -23
  28. package/{esm2015/lib/pipes/safe-resource-url.pipe.js → esm2020/lib/pipes/safe-resource-url.pipe.mjs} +23 -23
  29. package/{esm2015/lib/pipes/safe-style.pipe.js → esm2020/lib/pipes/safe-style.pipe.mjs} +23 -23
  30. package/{esm2015/lib/pipes/safe-url.pipe.js → esm2020/lib/pipes/safe-url.pipe.mjs} +23 -23
  31. package/{esm2015/lib/pipes/to-number.pipe.js → esm2020/lib/pipes/to-number.pipe.mjs} +23 -23
  32. package/{esm2015/lib/pipes/trim.pipe.js → esm2020/lib/pipes/trim.pipe.mjs} +20 -20
  33. package/{esm2015/lib/pipes/typeof.pipe.js → esm2020/lib/pipes/typeof.pipe.mjs} +16 -16
  34. package/esm2020/lib/services/viewport.service.mjs +216 -0
  35. package/esm2020/lib/ui/back-to-top/back-to-top.component.mjs +49 -0
  36. package/{esm2015/lib/ui/button-with-confirm-dialog/button-response-types.enum.js → esm2020/lib/ui/button-with-confirm-dialog/button-response-types.enum.mjs} +6 -6
  37. package/esm2020/lib/ui/button-with-confirm-dialog/button-with-confirm-dialog.component.mjs +58 -0
  38. package/{esm2015/lib/ui/button-with-confirm-dialog/dialog-data.model.js → esm2020/lib/ui/button-with-confirm-dialog/dialog-data.model.mjs} +2 -2
  39. package/esm2020/lib/ui/checkbox/checkbox.component.mjs +71 -0
  40. package/esm2020/lib/ui/color-input/color-input.component.mjs +76 -0
  41. package/esm2020/lib/ui/dropdown-from-data/dropdown-from-data.component.mjs +165 -0
  42. package/esm2020/lib/ui/enum-radiogroup/enum-radiogroup.component.mjs +53 -0
  43. package/esm2020/lib/ui/file-input/file-input.component.mjs +232 -0
  44. package/esm2020/lib/ui/flyout/flyout.component.mjs +119 -0
  45. package/esm2020/lib/ui/generic-dialog/generic-dialog.component.mjs +54 -0
  46. package/esm2020/lib/ui/icon/icon.component.mjs +48 -0
  47. package/esm2020/lib/ui/icon/iconSize.enum.mjs +17 -0
  48. package/esm2020/lib/ui/image-slider/image-slider.component.mjs +189 -0
  49. package/esm2020/lib/ui/kms-accordion-item/kms-accordion-item.component.mjs +40 -0
  50. package/esm2020/lib/ui/loader/loader.component.mjs +21 -0
  51. package/esm2020/lib/ui/map/map.component.mjs +116 -0
  52. package/esm2020/lib/ui/radiobutton/radiobutton.component.mjs +73 -0
  53. package/esm2020/lib/ui/salutation-dropdown/salutation-dropdown.component.mjs +55 -0
  54. package/esm2020/lib/ui/salutation-radiogroup/salutation-radiogroup.component.mjs +49 -0
  55. package/esm2020/lib/ui/time-input/time-input.component.mjs +83 -0
  56. package/esm2020/lib/ui/tooltip/tooltip.component.mjs +16 -0
  57. package/esm2020/lib/ui/tooltip-icon/tooltip-icon.component.mjs +35 -0
  58. package/esm2020/lib/ui/yes-no-radiogroup/yes-no-radiogroup.component.mjs +82 -0
  59. package/esm2020/public-api.mjs +49 -0
  60. package/fesm2015/kms-ngx-ui-presentational.mjs +3013 -0
  61. package/fesm2015/kms-ngx-ui-presentational.mjs.map +1 -0
  62. package/{fesm2015/kms-ngx-ui-presentational.js → fesm2020/kms-ngx-ui-presentational.mjs} +2894 -3108
  63. package/fesm2020/kms-ngx-ui-presentational.mjs.map +1 -0
  64. package/{kms-ngx-ui-presentational.d.ts → index.d.ts} +5 -5
  65. package/lib/directives/directives.module.d.ts +11 -13
  66. package/lib/directives/mousewheel.directive.d.ts +15 -15
  67. package/lib/directives/sum-of-height.directive.d.ts +31 -31
  68. package/lib/directives/swipe.directive.d.ts +45 -45
  69. package/lib/directives/swipe.model.d.ts +49 -49
  70. package/lib/directives/tooltip.directive.d.ts +29 -29
  71. package/lib/kms-ngx-ui-presentational.component.d.ts +8 -8
  72. package/lib/kms-ngx-ui-presentational.module.d.ts +47 -47
  73. package/lib/kms-ngx-ui-presentational.service.d.ts +6 -6
  74. package/lib/models/address.model.d.ts +14 -14
  75. package/lib/models/iconSize.enum.d.ts +15 -15
  76. package/lib/models/image-snippet.model.d.ts +15 -15
  77. package/lib/models/index.d.ts +4 -4
  78. package/lib/models/is-value.function.d.ts +9 -9
  79. package/lib/models/salutation.enum.d.ts +5 -5
  80. package/lib/models/types/attached-file-dto.model.d.ts +11 -11
  81. package/lib/models/types/nullable.type.d.ts +4 -4
  82. package/lib/parent-components/actions.component.d.ts +31 -31
  83. package/lib/parent-components/form-control.component.d.ts +27 -27
  84. package/lib/parent-components/form.component.d.ts +34 -40
  85. package/lib/pipes/custom-pipes.module.d.ts +17 -17
  86. package/lib/pipes/decode-uri.pipe.d.ts +10 -10
  87. package/lib/pipes/encode-uri.pipe.d.ts +10 -10
  88. package/lib/pipes/integer-currency.pipe.d.ts +13 -13
  89. package/lib/pipes/safe-html.pipe.d.ts +13 -13
  90. package/lib/pipes/safe-resource-url.pipe.d.ts +13 -13
  91. package/lib/pipes/safe-style.pipe.d.ts +13 -13
  92. package/lib/pipes/safe-url.pipe.d.ts +13 -13
  93. package/lib/pipes/to-number.pipe.d.ts +10 -10
  94. package/lib/pipes/trim.pipe.d.ts +10 -10
  95. package/lib/pipes/typeof.pipe.d.ts +7 -7
  96. package/lib/services/viewport.service.d.ts +74 -83
  97. package/lib/ui/back-to-top/back-to-top.component.d.ts +10 -10
  98. package/lib/ui/button-with-confirm-dialog/button-response-types.enum.d.ts +4 -4
  99. package/lib/ui/button-with-confirm-dialog/button-with-confirm-dialog.component.d.ts +19 -19
  100. package/lib/ui/button-with-confirm-dialog/dialog-data.model.d.ts +9 -9
  101. package/lib/ui/checkbox/checkbox.component.d.ts +31 -31
  102. package/lib/ui/color-input/color-input.component.d.ts +19 -19
  103. package/lib/ui/dropdown-from-data/dropdown-from-data.component.d.ts +55 -55
  104. package/lib/ui/enum-radiogroup/enum-radiogroup.component.d.ts +17 -17
  105. package/lib/ui/file-input/file-input.component.d.ts +89 -89
  106. package/lib/ui/flyout/flyout.component.d.ts +32 -32
  107. package/lib/ui/generic-dialog/generic-dialog.component.d.ts +26 -26
  108. package/lib/ui/icon/icon.component.d.ts +42 -48
  109. package/lib/ui/icon/iconSize.enum.d.ts +15 -25
  110. package/lib/ui/image-slider/image-slider.component.d.ts +62 -62
  111. package/lib/ui/kms-accordion-item/kms-accordion-item.component.d.ts +22 -22
  112. package/lib/ui/loader/loader.component.d.ts +9 -9
  113. package/lib/ui/map/map.component.d.ts +70 -69
  114. package/lib/ui/radiobutton/radiobutton.component.d.ts +26 -27
  115. package/lib/ui/salutation-dropdown/salutation-dropdown.component.d.ts +17 -17
  116. package/lib/ui/salutation-radiogroup/salutation-radiogroup.component.d.ts +15 -15
  117. package/lib/ui/time-input/time-input.component.d.ts +22 -22
  118. package/lib/ui/tooltip/tooltip.component.d.ts +6 -6
  119. package/lib/ui/tooltip-icon/tooltip-icon.component.d.ts +13 -13
  120. package/lib/ui/yes-no-radiogroup/yes-no-radiogroup.component.d.ts +27 -27
  121. package/package.json +27 -14
  122. package/public-api.d.ts +45 -46
  123. package/src/lib/ui/back-to-top/back-to-top.component.scss +46 -45
  124. package/src/lib/ui/button-with-confirm-dialog/button-with-confirm-dialog.component.scss +2 -2
  125. package/src/lib/ui/checkbox/checkbox.component.scss +48 -48
  126. package/src/lib/ui/color-input/color-input.component.scss +38 -38
  127. package/src/lib/ui/file-input/file-input.component.scss +2 -2
  128. package/src/lib/ui/flyout/flyout.component.scss +34 -34
  129. package/src/lib/ui/generic-dialog/generic-dialog.component.scss +59 -59
  130. package/src/lib/ui/icon/icon.component.scss +148 -114
  131. package/src/lib/ui/image-slider/image-slider.component.scss +219 -219
  132. package/src/lib/ui/kms-accordion-item/kms-accordion-item.component.scss +95 -95
  133. package/src/lib/ui/radiobutton/radiobutton.component.scss +31 -31
  134. package/src/lib/ui/time-input/time-input.component.scss +10 -10
  135. package/src/lib/ui/tooltip/tooltip.component.scss +26 -26
  136. package/src/lib/ui/tooltip-icon/tooltip-icon.component.scss +2 -2
  137. package/src/styles/mixins.scss +8 -8
  138. package/src/styles/styles.scss +30 -31
  139. package/bundles/kms-ngx-ui-presentational.umd.js +0 -3751
  140. package/bundles/kms-ngx-ui-presentational.umd.js.map +0 -1
  141. package/esm2015/lib/directives/directives.module.js +0 -45
  142. package/esm2015/lib/directives/size.directive.js +0 -21
  143. package/esm2015/lib/directives/swipe.model.js +0 -5
  144. package/esm2015/lib/kms-ngx-ui-presentational.component.js +0 -26
  145. package/esm2015/lib/models/address.model.js +0 -6
  146. package/esm2015/lib/parent-components/colorable.component.js +0 -35
  147. package/esm2015/lib/parent-components/form-control.component.js +0 -76
  148. package/esm2015/lib/parent-components/form.component.js +0 -99
  149. package/esm2015/lib/pipes/decode-uri.pipe.js +0 -19
  150. package/esm2015/lib/pipes/encode-uri.pipe.js +0 -19
  151. package/esm2015/lib/services/viewport.service.js +0 -242
  152. package/esm2015/lib/ui/back-to-top/back-to-top.component.js +0 -52
  153. package/esm2015/lib/ui/button-with-confirm-dialog/button-with-confirm-dialog.component.js +0 -62
  154. package/esm2015/lib/ui/checkbox/checkbox.component.js +0 -76
  155. package/esm2015/lib/ui/color-input/color-input.component.js +0 -81
  156. package/esm2015/lib/ui/dropdown-from-data/dropdown-from-data.component.js +0 -169
  157. package/esm2015/lib/ui/enum-radiogroup/enum-radiogroup.component.js +0 -57
  158. package/esm2015/lib/ui/file-input/file-input.component.js +0 -237
  159. package/esm2015/lib/ui/flyout/flyout.component.js +0 -125
  160. package/esm2015/lib/ui/generic-dialog/generic-dialog.component.js +0 -58
  161. package/esm2015/lib/ui/icon/icon.component.js +0 -55
  162. package/esm2015/lib/ui/icon/iconSize.enum.js +0 -28
  163. package/esm2015/lib/ui/image-slider/image-slider.component.js +0 -193
  164. package/esm2015/lib/ui/kms-accordion-item/kms-accordion-item.component.js +0 -44
  165. package/esm2015/lib/ui/loader/loader.component.js +0 -25
  166. package/esm2015/lib/ui/map/map.component.js +0 -120
  167. package/esm2015/lib/ui/radiobutton/radiobutton.component.js +0 -82
  168. package/esm2015/lib/ui/salutation-dropdown/salutation-dropdown.component.js +0 -59
  169. package/esm2015/lib/ui/salutation-radiogroup/salutation-radiogroup.component.js +0 -53
  170. package/esm2015/lib/ui/time-input/time-input.component.js +0 -88
  171. package/esm2015/lib/ui/tooltip/tooltip.component.js +0 -20
  172. package/esm2015/lib/ui/tooltip-icon/tooltip-icon.component.js +0 -40
  173. package/esm2015/lib/ui/yes-no-radiogroup/yes-no-radiogroup.component.js +0 -86
  174. package/esm2015/public-api.js +0 -50
  175. package/fesm2015/kms-ngx-ui-presentational.js.map +0 -1
  176. package/lib/directives/size.directive.d.ts +0 -10
  177. package/lib/parent-components/colorable.component.d.ts +0 -10
  178. package/src/styles/animations.scss +0 -47
@@ -1,183 +1,183 @@
1
- /*!
2
- * @copyright FLYACTS GmbH 2019
3
- */
4
- import { Directive, EventEmitter, HostListener, Input, Output } from '@angular/core';
5
- import * as i0 from "@angular/core";
6
- export class SwipeDirective {
7
- constructor() {
8
- /**
9
- * Output Event that is emitted during swipe process (mouse move or touch move event).
10
- * Can be used for calculation purposes.
11
- */
12
- this.moveEvent = new EventEmitter();
13
- /**
14
- * Output Event that is emitted when swipe process end (mouse up or touch end event).
15
- * Can be used for calculation purposes.
16
- */
17
- this.releaseEvent = new EventEmitter();
18
- this._startPosition = -1;
19
- this._lastPosX = 0;
20
- this._thresholdWasReached = false;
21
- this._timeStart = 0;
22
- }
23
- /**
24
- * Needed config that defines swipe behaviour.
25
- * @param options SwipeOptions
26
- */
27
- set config(options) {
28
- if (options) {
29
- this._swipeOptions = options;
30
- }
31
- }
32
- onMouseDown(event) {
33
- this.calculateStartPosition(event);
34
- }
35
- onMove(event) {
36
- this.move(event);
37
- }
38
- onRelease(event) {
39
- this.release(event);
40
- this.reset();
41
- }
42
- // ** PRIVATE ** //
43
- /**
44
- * Function checks if the current moving delta is inside the defined threshold.
45
- * Sets the flag to true if the threshold was reached once.
46
- */
47
- checkThreshold(moveEvent) {
48
- const percentage = this._swipeOptions && this._swipeOptions.swipeThresholdType === '%';
49
- if (!percentage && this._swipeOptions && moveEvent.swipeDistanceTotal < this._swipeOptions.swipeThreshold) {
50
- return;
51
- }
52
- else if (percentage &&
53
- this._swipeOptions &&
54
- moveEvent.swipeDistancePercentage < this._swipeOptions.swipeThreshold / 100) {
55
- return;
56
- }
57
- else {
58
- this._thresholdWasReached = true;
59
- }
60
- }
61
- calculateStartPosition(event) {
62
- // detect if touch or click
63
- this._isMobile = event.type === 'touchstart';
64
- // save start position
65
- if (this._swipeOptions && this._swipeOptions.swipeLocalPosition) {
66
- if (this._isMobile) {
67
- const touch = event.touches[0];
68
- this._startPosition = this._swipeOptions.swipeLocalPosition ? touch.clientX : touch.pageX;
69
- }
70
- else {
71
- this._startPosition = this._swipeOptions.swipeLocalPosition ? event.offsetX : event.pageX;
72
- }
73
- }
74
- this._lastPosX = this._startPosition;
75
- this._timeStart = event.timeStamp;
76
- this._thresholdWasReached = false;
77
- }
78
- move(event) {
79
- // failsafe
80
- if (typeof event === 'undefined') {
81
- return;
82
- }
83
- let posX = 0;
84
- if (this._swipeOptions) {
85
- if (this._isMobile && event.type === 'touchmove') {
86
- const touch = event.touches[0];
87
- posX = this._swipeOptions.swipeLocalPosition ? touch.clientX : touch.pageX;
88
- }
89
- else {
90
- posX = this._swipeOptions.swipeLocalPosition ? event.offsetX : event.pageX;
91
- }
92
- }
93
- const offsetPerFrame = posX - this._lastPosX;
94
- const swipeDistanceTotal = Math.abs(posX - this._startPosition);
95
- const swipeDistancePercentage = Math.abs(swipeDistanceTotal / event.target.clientWidth);
96
- const timeDuration = Math.abs(event.timeStamp - this._timeStart);
97
- let direction;
98
- let speed = 1 - swipeDistanceTotal / timeDuration;
99
- speed = Math.max(0.1, speed);
100
- if (posX - this._startPosition > 0) {
101
- direction = 1; // a.k.a LTR
102
- }
103
- else {
104
- direction = -1; // a.k.a RTL
105
- }
106
- this._moveEventData = {
107
- position: posX,
108
- offsetPerFrame: offsetPerFrame,
109
- swipeDistanceTotal: swipeDistanceTotal,
110
- swipeDistancePercentage: swipeDistancePercentage,
111
- direction: direction,
112
- speed: speed,
113
- thresholdWasReached: this._thresholdWasReached,
114
- };
115
- this.checkThreshold(this._moveEventData);
116
- // update move delta
117
- this._lastPosX = posX;
118
- // inform
119
- this.moveEvent.emit(this._moveEventData);
120
- }
121
- release(event) {
122
- // case: just a click/touch
123
- if (!this._moveEventData) {
124
- return;
125
- }
126
- const releaseEventData = {
127
- thresholdWasReached: this._thresholdWasReached,
128
- direction: this._moveEventData.direction,
129
- speed: this._moveEventData.speed,
130
- easingType: this.getEasingCurve(this._moveEventData.speed),
131
- target: event.currentTarget,
132
- };
133
- // inform
134
- this.releaseEvent.emit(releaseEventData);
135
- }
136
- getEasingCurve(speed) {
137
- return speed > 0.5 ? 'ease-in' : 'ease-out';
138
- }
139
- reset() {
140
- this._startPosition = -1;
141
- this._thresholdWasReached = false;
142
- if (this._moveEventData) {
143
- this._moveEventData = undefined;
144
- }
145
- }
146
- }
147
- SwipeDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SwipeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
148
- SwipeDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: SwipeDirective, selector: "[swipeDirective]", inputs: { config: ["swipeDirective", "config"] }, outputs: { moveEvent: "moveEvent", releaseEvent: "releaseEvent" }, host: { listeners: { "mousedown": "onMouseDown($event)", "touchstart": "onMouseDown($event)", "mousemove": "onMove($event)", "touchmove": "onMove($event)", "mouseup": "onRelease($event)", "mouseleave": "onRelease($event)", "touchend": "onRelease($event)" } }, ngImport: i0 });
149
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SwipeDirective, decorators: [{
150
- type: Directive,
151
- args: [{
152
- selector: '[swipeDirective]',
153
- }]
154
- }], propDecorators: { moveEvent: [{
155
- type: Output
156
- }], releaseEvent: [{
157
- type: Output
158
- }], config: [{
159
- type: Input,
160
- args: ['swipeDirective']
161
- }], onMouseDown: [{
162
- type: HostListener,
163
- args: ['mousedown', ['$event']]
164
- }, {
165
- type: HostListener,
166
- args: ['touchstart', ['$event']]
167
- }], onMove: [{
168
- type: HostListener,
169
- args: ['mousemove', ['$event']]
170
- }, {
171
- type: HostListener,
172
- args: ['touchmove', ['$event']]
173
- }], onRelease: [{
174
- type: HostListener,
175
- args: ['mouseup', ['$event']]
176
- }, {
177
- type: HostListener,
178
- args: ['mouseleave', ['$event']]
179
- }, {
180
- type: HostListener,
181
- args: ['touchend', ['$event']]
182
- }] } });
183
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpcGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva21zLW5neC11aS1wcmVzZW50YXRpb25hbC9zcmMvbGliL2RpcmVjdGl2ZXMvc3dpcGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBT3JGLE1BQU0sT0FBTyxjQUFjO0lBSDNCO1FBSUk7OztXQUdHO1FBQ2MsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDO1FBRWhFOzs7V0FHRztRQUNjLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQXFCLENBQUM7UUFLOUQsbUJBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVwQixjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBRWQseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBSTdCLGVBQVUsR0FBRyxDQUFDLENBQUM7S0E2SjFCO0lBM0pHOzs7T0FHRztJQUNILElBQ0ksTUFBTSxDQUFDLE9BQXFCO1FBQzVCLElBQUksT0FBTyxFQUFFO1lBQ1QsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUM7U0FDaEM7SUFDTCxDQUFDO0lBSUQsV0FBVyxDQUFDLEtBQVU7UUFDbEIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFJRCxNQUFNLENBQUMsS0FBVTtRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUtELFNBQVMsQ0FBQyxLQUFVO1FBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxtQkFBbUI7SUFFbkI7OztPQUdHO0lBQ0ssY0FBYyxDQUFDLFNBQXlCO1FBQzVDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsS0FBSyxHQUFHLENBQUM7UUFFdkYsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLFNBQVMsQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRTtZQUN2RyxPQUFPO1NBQ1Y7YUFBTSxJQUNILFVBQVU7WUFDVixJQUFJLENBQUMsYUFBYTtZQUNsQixTQUFTLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEdBQUcsR0FBRyxFQUM3RTtZQUNFLE9BQU87U0FDVjthQUFNO1lBQ0gsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztTQUNwQztJQUNMLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxLQUFXO1FBQ3RDLDJCQUEyQjtRQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDO1FBRTdDLHNCQUFzQjtRQUV0QixJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRTtZQUM3RCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ2hCLE1BQU0sS0FBSyxHQUFVLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQzthQUM3RjtpQkFBTTtnQkFDSCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7YUFDN0Y7U0FDSjtRQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUNyQyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDbEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztJQUN0QyxDQUFDO0lBRU8sSUFBSSxDQUFDLEtBQVU7UUFDbkIsV0FBVztRQUNYLElBQUksT0FBTyxLQUFLLEtBQUssV0FBVyxFQUFFO1lBQzlCLE9BQU87U0FDVjtRQUVELElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztRQUViLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNwQixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7Z0JBQzlDLE1BQU0sS0FBSyxHQUFVLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RDLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO2FBQzlFO2lCQUFNO2dCQUNILElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO2FBQzlFO1NBQ0o7UUFFRCxNQUFNLGNBQWMsR0FBVyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNyRCxNQUFNLGtCQUFrQixHQUFXLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN4RSxNQUFNLHVCQUF1QixHQUFXLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNoRyxNQUFNLFlBQVksR0FBVyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXpFLElBQUksU0FBaUIsQ0FBQztRQUN0QixJQUFJLEtBQUssR0FBVyxDQUFDLEdBQUcsa0JBQWtCLEdBQUcsWUFBWSxDQUFDO1FBQzFELEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUU3QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsRUFBRTtZQUNoQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsWUFBWTtTQUM5QjthQUFNO1lBQ0gsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWTtTQUMvQjtRQUVELElBQUksQ0FBQyxjQUFjLEdBQUc7WUFDbEIsUUFBUSxFQUFFLElBQUk7WUFDZCxjQUFjLEVBQUUsY0FBYztZQUM5QixrQkFBa0IsRUFBRSxrQkFBa0I7WUFDdEMsdUJBQXVCLEVBQUUsdUJBQXVCO1lBQ2hELFNBQVMsRUFBRSxTQUFTO1lBQ3BCLEtBQUssRUFBRSxLQUFLO1lBQ1osbUJBQW1CLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjtTQUNqRCxDQUFDO1FBRUYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFekMsb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBRXRCLFNBQVM7UUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVPLE9BQU8sQ0FBQyxLQUFVO1FBQ3RCLDJCQUEyQjtRQUUzQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN0QixPQUFPO1NBQ1Y7UUFFRCxNQUFNLGdCQUFnQixHQUFzQjtZQUN4QyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsb0JBQW9CO1lBQzlDLFNBQVMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVM7WUFDeEMsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSztZQUNoQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQztZQUMxRCxNQUFNLEVBQUUsS0FBSyxDQUFDLGFBQWE7U0FDOUIsQ0FBQztRQUVGLFNBQVM7UUFDVCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFTyxjQUFjLENBQUMsS0FBYTtRQUNoQyxPQUFPLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO0lBQ2hELENBQUM7SUFFTyxLQUFLO1FBQ1QsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1FBRWxDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNyQixJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztTQUNuQztJQUNMLENBQUM7OzRHQXBMUSxjQUFjO2dHQUFkLGNBQWM7NEZBQWQsY0FBYztrQkFIMUIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsa0JBQWtCO2lCQUMvQjs4QkFNb0IsU0FBUztzQkFBekIsTUFBTTtnQkFNVSxZQUFZO3NCQUE1QixNQUFNO2dCQW9CSCxNQUFNO3NCQURULEtBQUs7dUJBQUMsZ0JBQWdCO2dCQVN2QixXQUFXO3NCQUZWLFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDOztzQkFDcEMsWUFBWTt1QkFBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBT3RDLE1BQU07c0JBRkwsWUFBWTt1QkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3NCQUNwQyxZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFRckMsU0FBUztzQkFIUixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBQ2xDLFlBQVk7dUJBQUMsWUFBWSxFQUFFLENBQUMsUUFBUSxDQUFDOztzQkFDckMsWUFBWTt1QkFBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcclxuICogQGNvcHlyaWdodCBGTFlBQ1RTIEdtYkggMjAxOVxyXG4gKi9cclxuXHJcbmltcG9ydCB7IERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IFN3aXBlTW92ZUV2ZW50LCBTd2lwZU9wdGlvbnMsIFN3aXBlUmVsZWFzZUV2ZW50IH0gZnJvbSAnLi9zd2lwZS5tb2RlbCc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICAgIHNlbGVjdG9yOiAnW3N3aXBlRGlyZWN0aXZlXScsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTd2lwZURpcmVjdGl2ZSB7XHJcbiAgICAvKipcclxuICAgICAqIE91dHB1dCBFdmVudCB0aGF0IGlzIGVtaXR0ZWQgZHVyaW5nIHN3aXBlIHByb2Nlc3MgKG1vdXNlIG1vdmUgb3IgdG91Y2ggbW92ZSBldmVudCkuXHJcbiAgICAgKiBDYW4gYmUgdXNlZCBmb3IgY2FsY3VsYXRpb24gcHVycG9zZXMuXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgbW92ZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxTd2lwZU1vdmVFdmVudD4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE91dHB1dCBFdmVudCB0aGF0IGlzIGVtaXR0ZWQgd2hlbiBzd2lwZSBwcm9jZXNzIGVuZCAobW91c2UgdXAgb3IgdG91Y2ggZW5kIGV2ZW50KS5cclxuICAgICAqIENhbiBiZSB1c2VkIGZvciBjYWxjdWxhdGlvbiBwdXJwb3Nlcy5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyByZWxlYXNlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFN3aXBlUmVsZWFzZUV2ZW50PigpO1xyXG5cclxuICAgIHByaXZhdGUgX3N3aXBlT3B0aW9uczogU3dpcGVPcHRpb25zIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIHByaXZhdGUgX21vdmVFdmVudERhdGE6IFN3aXBlTW92ZUV2ZW50IHwgdW5kZWZpbmVkO1xyXG4gICAgcHJpdmF0ZSBfc3RhcnRQb3NpdGlvbiA9IC0xO1xyXG5cclxuICAgIHByaXZhdGUgX2xhc3RQb3NYID0gMDtcclxuXHJcbiAgICBwcml2YXRlIF90aHJlc2hvbGRXYXNSZWFjaGVkID0gZmFsc2U7XHJcblxyXG4gICAgcHJpdmF0ZSBfaXNNb2JpbGU6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgcHJpdmF0ZSBfdGltZVN0YXJ0ID0gMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5lZWRlZCBjb25maWcgdGhhdCBkZWZpbmVzIHN3aXBlIGJlaGF2aW91ci5cclxuICAgICAqIEBwYXJhbSBvcHRpb25zIFN3aXBlT3B0aW9uc1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoJ3N3aXBlRGlyZWN0aXZlJylcclxuICAgIHNldCBjb25maWcob3B0aW9uczogU3dpcGVPcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgdGhpcy5fc3dpcGVPcHRpb25zID0gb3B0aW9ucztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgWyckZXZlbnQnXSlcclxuICAgIEBIb3N0TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBbJyRldmVudCddKVxyXG4gICAgb25Nb3VzZURvd24oZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIHRoaXMuY2FsY3VsYXRlU3RhcnRQb3NpdGlvbihldmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2Vtb3ZlJywgWyckZXZlbnQnXSlcclxuICAgIEBIb3N0TGlzdGVuZXIoJ3RvdWNobW92ZScsIFsnJGV2ZW50J10pXHJcbiAgICBvbk1vdmUoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIHRoaXMubW92ZShldmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2V1cCcsIFsnJGV2ZW50J10pXHJcbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWxlYXZlJywgWyckZXZlbnQnXSlcclxuICAgIEBIb3N0TGlzdGVuZXIoJ3RvdWNoZW5kJywgWyckZXZlbnQnXSlcclxuICAgIG9uUmVsZWFzZShldmVudDogYW55KSB7XHJcbiAgICAgICAgdGhpcy5yZWxlYXNlKGV2ZW50KTtcclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gKiogUFJJVkFURSAqKiAvL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBjdXJyZW50IG1vdmluZyBkZWx0YSBpcyBpbnNpZGUgdGhlIGRlZmluZWQgdGhyZXNob2xkLlxyXG4gICAgICogU2V0cyB0aGUgZmxhZyB0byB0cnVlIGlmIHRoZSB0aHJlc2hvbGQgd2FzIHJlYWNoZWQgb25jZS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjaGVja1RocmVzaG9sZChtb3ZlRXZlbnQ6IFN3aXBlTW92ZUV2ZW50KSB7XHJcbiAgICAgICAgY29uc3QgcGVyY2VudGFnZSA9IHRoaXMuX3N3aXBlT3B0aW9ucyAmJiB0aGlzLl9zd2lwZU9wdGlvbnMuc3dpcGVUaHJlc2hvbGRUeXBlID09PSAnJSc7XHJcblxyXG4gICAgICAgIGlmICghcGVyY2VudGFnZSAmJiB0aGlzLl9zd2lwZU9wdGlvbnMgJiYgbW92ZUV2ZW50LnN3aXBlRGlzdGFuY2VUb3RhbCA8IHRoaXMuX3N3aXBlT3B0aW9ucy5zd2lwZVRocmVzaG9sZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgcGVyY2VudGFnZSAmJlxyXG4gICAgICAgICAgICB0aGlzLl9zd2lwZU9wdGlvbnMgJiZcclxuICAgICAgICAgICAgbW92ZUV2ZW50LnN3aXBlRGlzdGFuY2VQZXJjZW50YWdlIDwgdGhpcy5fc3dpcGVPcHRpb25zLnN3aXBlVGhyZXNob2xkIC8gMTAwXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl90aHJlc2hvbGRXYXNSZWFjaGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVTdGFydFBvc2l0aW9uKGV2ZW50PzogYW55KSB7XHJcbiAgICAgICAgLy8gZGV0ZWN0IGlmIHRvdWNoIG9yIGNsaWNrXHJcbiAgICAgICAgdGhpcy5faXNNb2JpbGUgPSBldmVudC50eXBlID09PSAndG91Y2hzdGFydCc7XHJcblxyXG4gICAgICAgIC8vIHNhdmUgc3RhcnQgcG9zaXRpb25cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3N3aXBlT3B0aW9ucyAmJiB0aGlzLl9zd2lwZU9wdGlvbnMuc3dpcGVMb2NhbFBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc01vYmlsZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdG91Y2g6IFRvdWNoID0gZXZlbnQudG91Y2hlc1swXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0UG9zaXRpb24gPSB0aGlzLl9zd2lwZU9wdGlvbnMuc3dpcGVMb2NhbFBvc2l0aW9uID8gdG91Y2guY2xpZW50WCA6IHRvdWNoLnBhZ2VYO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhcnRQb3NpdGlvbiA9IHRoaXMuX3N3aXBlT3B0aW9ucy5zd2lwZUxvY2FsUG9zaXRpb24gPyBldmVudC5vZmZzZXRYIDogZXZlbnQucGFnZVg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2xhc3RQb3NYID0gdGhpcy5fc3RhcnRQb3NpdGlvbjtcclxuICAgICAgICB0aGlzLl90aW1lU3RhcnQgPSBldmVudC50aW1lU3RhbXA7XHJcbiAgICAgICAgdGhpcy5fdGhyZXNob2xkV2FzUmVhY2hlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbW92ZShldmVudDogYW55KSB7XHJcbiAgICAgICAgLy8gZmFpbHNhZmVcclxuICAgICAgICBpZiAodHlwZW9mIGV2ZW50ID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcG9zWCA9IDA7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9zd2lwZU9wdGlvbnMpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2lzTW9iaWxlICYmIGV2ZW50LnR5cGUgPT09ICd0b3VjaG1vdmUnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0b3VjaDogVG91Y2ggPSBldmVudC50b3VjaGVzWzBdO1xyXG4gICAgICAgICAgICAgICAgcG9zWCA9IHRoaXMuX3N3aXBlT3B0aW9ucy5zd2lwZUxvY2FsUG9zaXRpb24gPyB0b3VjaC5jbGllbnRYIDogdG91Y2gucGFnZVg7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwb3NYID0gdGhpcy5fc3dpcGVPcHRpb25zLnN3aXBlTG9jYWxQb3NpdGlvbiA/IGV2ZW50Lm9mZnNldFggOiBldmVudC5wYWdlWDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgb2Zmc2V0UGVyRnJhbWU6IG51bWJlciA9IHBvc1ggLSB0aGlzLl9sYXN0UG9zWDtcclxuICAgICAgICBjb25zdCBzd2lwZURpc3RhbmNlVG90YWw6IG51bWJlciA9IE1hdGguYWJzKHBvc1ggLSB0aGlzLl9zdGFydFBvc2l0aW9uKTtcclxuICAgICAgICBjb25zdCBzd2lwZURpc3RhbmNlUGVyY2VudGFnZTogbnVtYmVyID0gTWF0aC5hYnMoc3dpcGVEaXN0YW5jZVRvdGFsIC8gZXZlbnQudGFyZ2V0LmNsaWVudFdpZHRoKTtcclxuICAgICAgICBjb25zdCB0aW1lRHVyYXRpb246IG51bWJlciA9IE1hdGguYWJzKGV2ZW50LnRpbWVTdGFtcCAtIHRoaXMuX3RpbWVTdGFydCk7XHJcblxyXG4gICAgICAgIGxldCBkaXJlY3Rpb246IG51bWJlcjtcclxuICAgICAgICBsZXQgc3BlZWQ6IG51bWJlciA9IDEgLSBzd2lwZURpc3RhbmNlVG90YWwgLyB0aW1lRHVyYXRpb247XHJcbiAgICAgICAgc3BlZWQgPSBNYXRoLm1heCgwLjEsIHNwZWVkKTtcclxuXHJcbiAgICAgICAgaWYgKHBvc1ggLSB0aGlzLl9zdGFydFBvc2l0aW9uID4gMCkge1xyXG4gICAgICAgICAgICBkaXJlY3Rpb24gPSAxOyAvLyBhLmsuYSBMVFJcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkaXJlY3Rpb24gPSAtMTsgLy8gYS5rLmEgUlRMXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9tb3ZlRXZlbnREYXRhID0ge1xyXG4gICAgICAgICAgICBwb3NpdGlvbjogcG9zWCxcclxuICAgICAgICAgICAgb2Zmc2V0UGVyRnJhbWU6IG9mZnNldFBlckZyYW1lLFxyXG4gICAgICAgICAgICBzd2lwZURpc3RhbmNlVG90YWw6IHN3aXBlRGlzdGFuY2VUb3RhbCxcclxuICAgICAgICAgICAgc3dpcGVEaXN0YW5jZVBlcmNlbnRhZ2U6IHN3aXBlRGlzdGFuY2VQZXJjZW50YWdlLFxyXG4gICAgICAgICAgICBkaXJlY3Rpb246IGRpcmVjdGlvbixcclxuICAgICAgICAgICAgc3BlZWQ6IHNwZWVkLFxyXG4gICAgICAgICAgICB0aHJlc2hvbGRXYXNSZWFjaGVkOiB0aGlzLl90aHJlc2hvbGRXYXNSZWFjaGVkLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuY2hlY2tUaHJlc2hvbGQodGhpcy5fbW92ZUV2ZW50RGF0YSk7XHJcblxyXG4gICAgICAgIC8vIHVwZGF0ZSBtb3ZlIGRlbHRhXHJcbiAgICAgICAgdGhpcy5fbGFzdFBvc1ggPSBwb3NYO1xyXG5cclxuICAgICAgICAvLyBpbmZvcm1cclxuICAgICAgICB0aGlzLm1vdmVFdmVudC5lbWl0KHRoaXMuX21vdmVFdmVudERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVsZWFzZShldmVudDogYW55KSB7XHJcbiAgICAgICAgLy8gY2FzZToganVzdCBhIGNsaWNrL3RvdWNoXHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fbW92ZUV2ZW50RGF0YSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCByZWxlYXNlRXZlbnREYXRhOiBTd2lwZVJlbGVhc2VFdmVudCA9IHtcclxuICAgICAgICAgICAgdGhyZXNob2xkV2FzUmVhY2hlZDogdGhpcy5fdGhyZXNob2xkV2FzUmVhY2hlZCxcclxuICAgICAgICAgICAgZGlyZWN0aW9uOiB0aGlzLl9tb3ZlRXZlbnREYXRhLmRpcmVjdGlvbixcclxuICAgICAgICAgICAgc3BlZWQ6IHRoaXMuX21vdmVFdmVudERhdGEuc3BlZWQsXHJcbiAgICAgICAgICAgIGVhc2luZ1R5cGU6IHRoaXMuZ2V0RWFzaW5nQ3VydmUodGhpcy5fbW92ZUV2ZW50RGF0YS5zcGVlZCksXHJcbiAgICAgICAgICAgIHRhcmdldDogZXZlbnQuY3VycmVudFRhcmdldCxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyBpbmZvcm1cclxuICAgICAgICB0aGlzLnJlbGVhc2VFdmVudC5lbWl0KHJlbGVhc2VFdmVudERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0RWFzaW5nQ3VydmUoc3BlZWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHNwZWVkID4gMC41ID8gJ2Vhc2UtaW4nIDogJ2Vhc2Utb3V0JztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlc2V0KCkge1xyXG4gICAgICAgIHRoaXMuX3N0YXJ0UG9zaXRpb24gPSAtMTtcclxuICAgICAgICB0aGlzLl90aHJlc2hvbGRXYXNSZWFjaGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlRXZlbnREYXRhKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX21vdmVFdmVudERhdGEgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
1
+ /*!
2
+ * @copyright FLYACTS GmbH 2019
3
+ */
4
+ import { Directive, EventEmitter, HostListener, Input, Output } from '@angular/core';
5
+ import * as i0 from "@angular/core";
6
+ export class SwipeDirective {
7
+ constructor() {
8
+ /**
9
+ * Output Event that is emitted during swipe process (mouse move or touch move event).
10
+ * Can be used for calculation purposes.
11
+ */
12
+ this.moveEvent = new EventEmitter();
13
+ /**
14
+ * Output Event that is emitted when swipe process end (mouse up or touch end event).
15
+ * Can be used for calculation purposes.
16
+ */
17
+ this.releaseEvent = new EventEmitter();
18
+ this._startPosition = -1;
19
+ this._lastPosX = 0;
20
+ this._thresholdWasReached = false;
21
+ this._timeStart = 0;
22
+ }
23
+ /**
24
+ * Needed config that defines swipe behaviour.
25
+ * @param options SwipeOptions
26
+ */
27
+ set config(options) {
28
+ if (options) {
29
+ this._swipeOptions = options;
30
+ }
31
+ }
32
+ onMouseDown(event) {
33
+ this.calculateStartPosition(event);
34
+ }
35
+ onMove(event) {
36
+ this.move(event);
37
+ }
38
+ onRelease(event) {
39
+ this.release(event);
40
+ this.reset();
41
+ }
42
+ // ** PRIVATE ** //
43
+ /**
44
+ * Function checks if the current moving delta is inside the defined threshold.
45
+ * Sets the flag to true if the threshold was reached once.
46
+ */
47
+ checkThreshold(moveEvent) {
48
+ const percentage = this._swipeOptions && this._swipeOptions.swipeThresholdType === '%';
49
+ if (!percentage && this._swipeOptions && moveEvent.swipeDistanceTotal < this._swipeOptions.swipeThreshold) {
50
+ return;
51
+ }
52
+ else if (percentage &&
53
+ this._swipeOptions &&
54
+ moveEvent.swipeDistancePercentage < this._swipeOptions.swipeThreshold / 100) {
55
+ return;
56
+ }
57
+ else {
58
+ this._thresholdWasReached = true;
59
+ }
60
+ }
61
+ calculateStartPosition(event) {
62
+ // detect if touch or click
63
+ this._isMobile = event.type === 'touchstart';
64
+ // save start position
65
+ if (this._swipeOptions && this._swipeOptions.swipeLocalPosition) {
66
+ if (this._isMobile) {
67
+ const touch = event.touches[0];
68
+ this._startPosition = this._swipeOptions.swipeLocalPosition ? touch.clientX : touch.pageX;
69
+ }
70
+ else {
71
+ this._startPosition = this._swipeOptions.swipeLocalPosition ? event.offsetX : event.pageX;
72
+ }
73
+ }
74
+ this._lastPosX = this._startPosition;
75
+ this._timeStart = event.timeStamp;
76
+ this._thresholdWasReached = false;
77
+ }
78
+ move(event) {
79
+ // failsafe
80
+ if (typeof event === 'undefined') {
81
+ return;
82
+ }
83
+ let posX = 0;
84
+ if (this._swipeOptions) {
85
+ if (this._isMobile && event.type === 'touchmove') {
86
+ const touch = event.touches[0];
87
+ posX = this._swipeOptions.swipeLocalPosition ? touch.clientX : touch.pageX;
88
+ }
89
+ else {
90
+ posX = this._swipeOptions.swipeLocalPosition ? event.offsetX : event.pageX;
91
+ }
92
+ }
93
+ const offsetPerFrame = posX - this._lastPosX;
94
+ const swipeDistanceTotal = Math.abs(posX - this._startPosition);
95
+ const swipeDistancePercentage = Math.abs(swipeDistanceTotal / event.target.clientWidth);
96
+ const timeDuration = Math.abs(event.timeStamp - this._timeStart);
97
+ let direction;
98
+ let speed = 1 - swipeDistanceTotal / timeDuration;
99
+ speed = Math.max(0.1, speed);
100
+ if (posX - this._startPosition > 0) {
101
+ direction = 1; // a.k.a LTR
102
+ }
103
+ else {
104
+ direction = -1; // a.k.a RTL
105
+ }
106
+ this._moveEventData = {
107
+ position: posX,
108
+ offsetPerFrame: offsetPerFrame,
109
+ swipeDistanceTotal: swipeDistanceTotal,
110
+ swipeDistancePercentage: swipeDistancePercentage,
111
+ direction: direction,
112
+ speed: speed,
113
+ thresholdWasReached: this._thresholdWasReached,
114
+ };
115
+ this.checkThreshold(this._moveEventData);
116
+ // update move delta
117
+ this._lastPosX = posX;
118
+ // inform
119
+ this.moveEvent.emit(this._moveEventData);
120
+ }
121
+ release(event) {
122
+ // case: just a click/touch
123
+ if (!this._moveEventData) {
124
+ return;
125
+ }
126
+ const releaseEventData = {
127
+ thresholdWasReached: this._thresholdWasReached,
128
+ direction: this._moveEventData.direction,
129
+ speed: this._moveEventData.speed,
130
+ easingType: this.getEasingCurve(this._moveEventData.speed),
131
+ target: event.currentTarget,
132
+ };
133
+ // inform
134
+ this.releaseEvent.emit(releaseEventData);
135
+ }
136
+ getEasingCurve(speed) {
137
+ return speed > 0.5 ? 'ease-in' : 'ease-out';
138
+ }
139
+ reset() {
140
+ this._startPosition = -1;
141
+ this._thresholdWasReached = false;
142
+ if (this._moveEventData) {
143
+ this._moveEventData = undefined;
144
+ }
145
+ }
146
+ }
147
+ SwipeDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SwipeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
148
+ SwipeDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: SwipeDirective, selector: "[swipeDirective]", inputs: { config: ["swipeDirective", "config"] }, outputs: { moveEvent: "moveEvent", releaseEvent: "releaseEvent" }, host: { listeners: { "mousedown": "onMouseDown($event)", "touchstart": "onMouseDown($event)", "mousemove": "onMove($event)", "touchmove": "onMove($event)", "mouseup": "onRelease($event)", "mouseleave": "onRelease($event)", "touchend": "onRelease($event)" } }, ngImport: i0 });
149
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SwipeDirective, decorators: [{
150
+ type: Directive,
151
+ args: [{
152
+ selector: '[swipeDirective]',
153
+ }]
154
+ }], propDecorators: { moveEvent: [{
155
+ type: Output
156
+ }], releaseEvent: [{
157
+ type: Output
158
+ }], config: [{
159
+ type: Input,
160
+ args: ['swipeDirective']
161
+ }], onMouseDown: [{
162
+ type: HostListener,
163
+ args: ['mousedown', ['$event']]
164
+ }, {
165
+ type: HostListener,
166
+ args: ['touchstart', ['$event']]
167
+ }], onMove: [{
168
+ type: HostListener,
169
+ args: ['mousemove', ['$event']]
170
+ }, {
171
+ type: HostListener,
172
+ args: ['touchmove', ['$event']]
173
+ }], onRelease: [{
174
+ type: HostListener,
175
+ args: ['mouseup', ['$event']]
176
+ }, {
177
+ type: HostListener,
178
+ args: ['mouseleave', ['$event']]
179
+ }, {
180
+ type: HostListener,
181
+ args: ['touchend', ['$event']]
182
+ }] } });
183
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpcGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva21zLW5neC11aS1wcmVzZW50YXRpb25hbC9zcmMvbGliL2RpcmVjdGl2ZXMvc3dpcGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBT3JGLE1BQU0sT0FBTyxjQUFjO0lBSDNCO1FBSUk7OztXQUdHO1FBQ2MsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDO1FBRWhFOzs7V0FHRztRQUNjLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQXFCLENBQUM7UUFLOUQsbUJBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVwQixjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBRWQseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBSTdCLGVBQVUsR0FBRyxDQUFDLENBQUM7S0E2SjFCO0lBM0pHOzs7T0FHRztJQUNILElBQ0ksTUFBTSxDQUFDLE9BQXFCO1FBQzVCLElBQUksT0FBTyxFQUFFO1lBQ1QsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUM7U0FDaEM7SUFDTCxDQUFDO0lBSUQsV0FBVyxDQUFDLEtBQVU7UUFDbEIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFJRCxNQUFNLENBQUMsS0FBVTtRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUtELFNBQVMsQ0FBQyxLQUFVO1FBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxtQkFBbUI7SUFFbkI7OztP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RSxDQUFDLFFBQVEsQ0FBQzs7c0JBQ2xDLFlBQVk7dUJBQUMsWUFBWSxFQUFFLENBQUMsUUFBUSxDQUFDOztzQkFDckMsWUFBWTt1QkFBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBjb3B5cmlnaHQgRkxZQUNUUyBHbWJIIDIwMTlcbiAqL1xuXG5pbXBvcnQgeyBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFN3aXBlTW92ZUV2ZW50LCBTd2lwZU9wdGlvbnMsIFN3aXBlUmVsZWFzZUV2ZW50IH0gZnJvbSAnLi9zd2lwZS5tb2RlbCc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3N3aXBlRGlyZWN0aXZlXScsXG59KVxuZXhwb3J0IGNsYXNzIFN3aXBlRGlyZWN0aXZlIHtcbiAgICAvKipcbiAgICAgKiBPdXRwdXQgRXZlbnQgdGhhdCBpcyBlbWl0dGVkIGR1cmluZyBzd2lwZSBwcm9jZXNzIChtb3VzZSBtb3ZlIG9yIHRvdWNoIG1vdmUgZXZlbnQpLlxuICAgICAqIENhbiBiZSB1c2VkIGZvciBjYWxjdWxhdGlvbiBwdXJwb3Nlcy5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcHVibGljIG1vdmVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8U3dpcGVNb3ZlRXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBPdXRwdXQgRXZlbnQgdGhhdCBpcyBlbWl0dGVkIHdoZW4gc3dpcGUgcHJvY2VzcyBlbmQgKG1vdXNlIHVwIG9yIHRvdWNoIGVuZCBldmVudCkuXG4gICAgICogQ2FuIGJlIHVzZWQgZm9yIGNhbGN1bGF0aW9uIHB1cnBvc2VzLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgcmVsZWFzZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxTd2lwZVJlbGVhc2VFdmVudD4oKTtcblxuICAgIHByaXZhdGUgX3N3aXBlT3B0aW9uczogU3dpcGVPcHRpb25zIHwgdW5kZWZpbmVkO1xuXG4gICAgcHJpdmF0ZSBfbW92ZUV2ZW50RGF0YTogU3dpcGVNb3ZlRXZlbnQgfCB1bmRlZmluZWQ7XG4gICAgcHJpdmF0ZSBfc3RhcnRQb3NpdGlvbiA9IC0xO1xuXG4gICAgcHJpdmF0ZSBfbGFzdFBvc1ggPSAwO1xuXG4gICAgcHJpdmF0ZSBfdGhyZXNob2xkV2FzUmVhY2hlZCA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfaXNNb2JpbGU6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgICBwcml2YXRlIF90aW1lU3RhcnQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogTmVlZGVkIGNvbmZpZyB0aGF0IGRlZmluZXMgc3dpcGUgYmVoYXZpb3VyLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFN3aXBlT3B0aW9uc1xuICAgICAqL1xuICAgIEBJbnB1dCgnc3dpcGVEaXJlY3RpdmUnKVxuICAgIHNldCBjb25maWcob3B0aW9uczogU3dpcGVPcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLl9zd2lwZU9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgWyckZXZlbnQnXSlcbiAgICBASG9zdExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgWyckZXZlbnQnXSlcbiAgICBvbk1vdXNlRG93bihldmVudDogYW55KSB7XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlU3RhcnRQb3NpdGlvbihldmVudCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2Vtb3ZlJywgWyckZXZlbnQnXSlcbiAgICBASG9zdExpc3RlbmVyKCd0b3VjaG1vdmUnLCBbJyRldmVudCddKVxuICAgIG9uTW92ZShldmVudDogYW55KSB7XG4gICAgICAgIHRoaXMubW92ZShldmVudCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2V1cCcsIFsnJGV2ZW50J10pXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScsIFsnJGV2ZW50J10pXG4gICAgQEhvc3RMaXN0ZW5lcigndG91Y2hlbmQnLCBbJyRldmVudCddKVxuICAgIG9uUmVsZWFzZShldmVudDogYW55KSB7XG4gICAgICAgIHRoaXMucmVsZWFzZShldmVudCk7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG5cbiAgICAvLyAqKiBQUklWQVRFICoqIC8vXG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiBjaGVja3MgaWYgdGhlIGN1cnJlbnQgbW92aW5nIGRlbHRhIGlzIGluc2lkZSB0aGUgZGVmaW5lZCB0aHJlc2hvbGQuXG4gICAgICogU2V0cyB0aGUgZmxhZyB0byB0cnVlIGlmIHRoZSB0aHJlc2hvbGQgd2FzIHJlYWNoZWQgb25jZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNoZWNrVGhyZXNob2xkKG1vdmVFdmVudDogU3dpcGVNb3ZlRXZlbnQpIHtcbiAgICAgICAgY29uc3QgcGVyY2VudGFnZSA9IHRoaXMuX3N3aXBlT3B0aW9ucyAmJiB0aGlzLl9zd2lwZU9wdGlvbnMuc3dpcGVUaHJlc2hvbGRUeXBlID09PSAnJSc7XG5cbiAgICAgICAgaWYgKCFwZXJjZW50YWdlICYmIHRoaXMuX3N3aXBlT3B0aW9ucyAmJiBtb3ZlRXZlbnQuc3dpcGVEaXN0YW5jZVRvdGFsIDwgdGhpcy5fc3dpcGVPcHRpb25zLnN3aXBlVGhyZXNob2xkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBwZXJjZW50YWdlICYmXG4gICAgICAgICAgICB0aGlzLl9zd2lwZU9wdGlvbnMgJiZcbiAgICAgICAgICAgIG1vdmVFdmVudC5zd2lwZURpc3RhbmNlUGVyY2VudGFnZSA8IHRoaXMuX3N3aXBlT3B0aW9ucy5zd2lwZVRocmVzaG9sZCAvIDEwMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3RocmVzaG9sZFdhc1JlYWNoZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVTdGFydFBvc2l0aW9uKGV2ZW50PzogYW55KSB7XG4gICAgICAgIC8vIGRldGVjdCBpZiB0b3VjaCBvciBjbGlja1xuICAgICAgICB0aGlzLl9pc01vYmlsZSA9IGV2ZW50LnR5cGUgPT09ICd0b3VjaHN0YXJ0JztcblxuICAgICAgICAvLyBzYXZlIHN0YXJ0IHBvc2l0aW9uXG5cbiAgICAgICAgaWYgKHRoaXMuX3N3aXBlT3B0aW9ucyAmJiB0aGlzLl9zd2lwZU9wdGlvbnMuc3dpcGVMb2NhbFBvc2l0aW9uKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faXNNb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b3VjaDogVG91Y2ggPSBldmVudC50b3VjaGVzWzBdO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0UG9zaXRpb24gPSB0aGlzLl9zd2lwZU9wdGlvbnMuc3dpcGVMb2NhbFBvc2l0aW9uID8gdG91Y2guY2xpZW50WCA6IHRvdWNoLnBhZ2VYO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGFydFBvc2l0aW9uID0gdGhpcy5fc3dpcGVPcHRpb25zLnN3aXBlTG9jYWxQb3NpdGlvbiA/IGV2ZW50Lm9mZnNldFggOiBldmVudC5wYWdlWDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xhc3RQb3NYID0gdGhpcy5fc3RhcnRQb3NpdGlvbjtcbiAgICAgICAgdGhpcy5fdGltZVN0YXJ0ID0gZXZlbnQudGltZVN0YW1wO1xuICAgICAgICB0aGlzLl90aHJlc2hvbGRXYXNSZWFjaGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtb3ZlKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgLy8gZmFpbHNhZmVcbiAgICAgICAgaWYgKHR5cGVvZiBldmVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwb3NYID0gMDtcblxuICAgICAgICBpZiAodGhpcy5fc3dpcGVPcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faXNNb2JpbGUgJiYgZXZlbnQudHlwZSA9PT0gJ3RvdWNobW92ZScpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b3VjaDogVG91Y2ggPSBldmVudC50b3VjaGVzWzBdO1xuICAgICAgICAgICAgICAgIHBvc1ggPSB0aGlzLl9zd2lwZU9wdGlvbnMuc3dpcGVMb2NhbFBvc2l0aW9uID8gdG91Y2guY2xpZW50WCA6IHRvdWNoLnBhZ2VYO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwb3NYID0gdGhpcy5fc3dpcGVPcHRpb25zLnN3aXBlTG9jYWxQb3NpdGlvbiA/IGV2ZW50Lm9mZnNldFggOiBldmVudC5wYWdlWDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9mZnNldFBlckZyYW1lOiBudW1iZXIgPSBwb3NYIC0gdGhpcy5fbGFzdFBvc1g7XG4gICAgICAgIGNvbnN0IHN3aXBlRGlzdGFuY2VUb3RhbDogbnVtYmVyID0gTWF0aC5hYnMocG9zWCAtIHRoaXMuX3N0YXJ0UG9zaXRpb24pO1xuICAgICAgICBjb25zdCBzd2lwZURpc3RhbmNlUGVyY2VudGFnZTogbnVtYmVyID0gTWF0aC5hYnMoc3dpcGVEaXN0YW5jZVRvdGFsIC8gZXZlbnQudGFyZ2V0LmNsaWVudFdpZHRoKTtcbiAgICAgICAgY29uc3QgdGltZUR1cmF0aW9uOiBudW1iZXIgPSBNYXRoLmFicyhldmVudC50aW1lU3RhbXAgLSB0aGlzLl90aW1lU3RhcnQpO1xuXG4gICAgICAgIGxldCBkaXJlY3Rpb246IG51bWJlcjtcbiAgICAgICAgbGV0IHNwZWVkOiBudW1iZXIgPSAxIC0gc3dpcGVEaXN0YW5jZVRvdGFsIC8gdGltZUR1cmF0aW9uO1xuICAgICAgICBzcGVlZCA9IE1hdGgubWF4KDAuMSwgc3BlZWQpO1xuXG4gICAgICAgIGlmIChwb3NYIC0gdGhpcy5fc3RhcnRQb3NpdGlvbiA+IDApIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IDE7IC8vIGEuay5hIExUUlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGlyZWN0aW9uID0gLTE7IC8vIGEuay5hIFJUTFxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbW92ZUV2ZW50RGF0YSA9IHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBwb3NYLFxuICAgICAgICAgICAgb2Zmc2V0UGVyRnJhbWU6IG9mZnNldFBlckZyYW1lLFxuICAgICAgICAgICAgc3dpcGVEaXN0YW5jZVRvdGFsOiBzd2lwZURpc3RhbmNlVG90YWwsXG4gICAgICAgICAgICBzd2lwZURpc3RhbmNlUGVyY2VudGFnZTogc3dpcGVEaXN0YW5jZVBlcmNlbnRhZ2UsXG4gICAgICAgICAgICBkaXJlY3Rpb246IGRpcmVjdGlvbixcbiAgICAgICAgICAgIHNwZWVkOiBzcGVlZCxcbiAgICAgICAgICAgIHRocmVzaG9sZFdhc1JlYWNoZWQ6IHRoaXMuX3RocmVzaG9sZFdhc1JlYWNoZWQsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jaGVja1RocmVzaG9sZCh0aGlzLl9tb3ZlRXZlbnREYXRhKTtcblxuICAgICAgICAvLyB1cGRhdGUgbW92ZSBkZWx0YVxuICAgICAgICB0aGlzLl9sYXN0UG9zWCA9IHBvc1g7XG5cbiAgICAgICAgLy8gaW5mb3JtXG4gICAgICAgIHRoaXMubW92ZUV2ZW50LmVtaXQodGhpcy5fbW92ZUV2ZW50RGF0YSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWxlYXNlKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgLy8gY2FzZToganVzdCBhIGNsaWNrL3RvdWNoXG5cbiAgICAgICAgaWYgKCF0aGlzLl9tb3ZlRXZlbnREYXRhKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWxlYXNlRXZlbnREYXRhOiBTd2lwZVJlbGVhc2VFdmVudCA9IHtcbiAgICAgICAgICAgIHRocmVzaG9sZFdhc1JlYWNoZWQ6IHRoaXMuX3RocmVzaG9sZFdhc1JlYWNoZWQsXG4gICAgICAgICAgICBkaXJlY3Rpb246IHRoaXMuX21vdmVFdmVudERhdGEuZGlyZWN0aW9uLFxuICAgICAgICAgICAgc3BlZWQ6IHRoaXMuX21vdmVFdmVudERhdGEuc3BlZWQsXG4gICAgICAgICAgICBlYXNpbmdUeXBlOiB0aGlzLmdldEVhc2luZ0N1cnZlKHRoaXMuX21vdmVFdmVudERhdGEuc3BlZWQpLFxuICAgICAgICAgICAgdGFyZ2V0OiBldmVudC5jdXJyZW50VGFyZ2V0LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGluZm9ybVxuICAgICAgICB0aGlzLnJlbGVhc2VFdmVudC5lbWl0KHJlbGVhc2VFdmVudERhdGEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RWFzaW5nQ3VydmUoc3BlZWQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBzcGVlZCA+IDAuNSA/ICdlYXNlLWluJyA6ICdlYXNlLW91dCc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldCgpIHtcbiAgICAgICAgdGhpcy5fc3RhcnRQb3NpdGlvbiA9IC0xO1xuICAgICAgICB0aGlzLl90aHJlc2hvbGRXYXNSZWFjaGVkID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMuX21vdmVFdmVudERhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuX21vdmVFdmVudERhdGEgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /*!
2
+ * @copyright FLYACTS GmbH 2019
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpcGUubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rbXMtbmd4LXVpLXByZXNlbnRhdGlvbmFsL3NyYy9saWIvZGlyZWN0aXZlcy9zd2lwZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGNvcHlyaWdodCBGTFlBQ1RTIEdtYkggMjAxOVxuICovXG5cbi8qKlxuICogSW5wdXQgYmVoYXZpb3VyIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTd2lwZU9wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIFZhbHVlIGZvciB0aGUgc3dpcGVUaHJlc2hvbGRUeXBlLlxuICAgICAqIEV4YW1wbGU6IDUwMHB4IG9yIDEwJSAoZGVwZW5kcyBvbiBzd2lwZVRocmVzaG9sZFR5cGUpXG4gICAgICovXG4gICAgc3dpcGVUaHJlc2hvbGQ6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEFsbG93ZWQgdmFsdWVzOiAnJScgb3IgJ3B4J1xuICAgICAqIERlZmluZXMgdG9nZXRoZXIgd2l0aCB0aGUgdmFsdWUgb2Ygc3dpcGVUaHJlc2hvbGQgdGhlIHdheSBob3cgdGhlIHRocmVzaG9sZCBpcyBjYWxjdWxhdGVkOlxuICAgICAqIElmIGEgY2VydGFpbiBhbW91bnQgb2YgcGl4ZWxzIG9yIGEgcGVyY2VudGFnZSBvZiB0aGUgcGFyZW50IGNvbnRhaW5lciB3YXMgcGFzc2VkLlxuICAgICAqIFB1cnBvc2U6XG4gICAgICogVGhyZXNob2xkIGNhbiBiZSB1c2VkIHRvIGRlZmluZSBpZiBzdGguIHNob3VsZCBoYXBwZW4gd2hlbiB0aGUgdXNlciBvdmVyIHN3aXBlcyB0aGUgZ2l2ZW4gdmFsdWVzLFxuICAgICAqIGZvciBpbnN0YW5jZSBza2lwIHRvIG5leHQgc2xpZGUuXG4gICAgICovXG4gICAgc3dpcGVUaHJlc2hvbGRUeXBlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBub3RlOiBEZWZpbmVzIGlmIHRoZSBsb2NhbCBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCBzaG91bGQgYmUgdXNlZCBmb3IgY2FsY3VsYXRpb24gb3IgdGhlIGdsb2JhbC5cbiAgICAgKiBGb3IgYSBzbGlkZXIgdGhlIGdsb2JhbCBpcyBuZWVkZWQuXG4gICAgICovXG4gICAgc3dpcGVMb2NhbFBvc2l0aW9uOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFN3aXBlIG1vdmUgZXZlbnQgaW5mb3JtYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTd2lwZU1vdmVFdmVudCB7XG4gICAgcG9zaXRpb246IG51bWJlcjtcbiAgICBvZmZzZXRQZXJGcmFtZTogbnVtYmVyO1xuICAgIHN3aXBlRGlzdGFuY2VUb3RhbDogbnVtYmVyO1xuICAgIHN3aXBlRGlzdGFuY2VQZXJjZW50YWdlOiBudW1iZXI7XG4gICAgZGlyZWN0aW9uOiBudW1iZXI7XG4gICAgc3BlZWQ6IG51bWJlcjtcbiAgICB0aHJlc2hvbGRXYXNSZWFjaGVkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFN3aXBlIHJlbGVhc2UgZXZlbnQgaW5mb3JtYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTd2lwZVJlbGVhc2VFdmVudCB7XG4gICAgdGhyZXNob2xkV2FzUmVhY2hlZDogYm9vbGVhbjtcbiAgICBkaXJlY3Rpb246IG51bWJlcjtcbiAgICBzcGVlZDogbnVtYmVyO1xuICAgIGVhc2luZ1R5cGU6IHN0cmluZztcbiAgICBcbiAgICB0YXJnZXQ6IGFueTtcbn1cbiJdfQ==