@kms-ngx-ui/presentational 16.3.2 → 16.3.3

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 (227) hide show
  1. package/esm2022/kms-ngx-ui-presentational.mjs +5 -0
  2. package/esm2022/lib/directives/directives.module.mjs +45 -0
  3. package/esm2022/lib/directives/mousewheel.directive.mjs +56 -0
  4. package/esm2022/lib/directives/size.directive.mjs +21 -0
  5. package/esm2022/lib/directives/sum-of-height.directive.mjs +74 -0
  6. package/esm2022/lib/directives/swipe.directive.mjs +183 -0
  7. package/esm2022/lib/directives/swipe.model.mjs +5 -0
  8. package/esm2022/lib/directives/tooltip.directive.mjs +144 -0
  9. package/esm2022/lib/kms-ngx-ui-presentational.component.mjs +22 -0
  10. package/esm2022/lib/kms-ngx-ui-presentational.module.mjs +206 -0
  11. package/esm2022/lib/kms-ngx-ui-presentational.service.mjs +14 -0
  12. package/esm2022/lib/models/address.model.mjs +6 -0
  13. package/esm2022/lib/models/iconSize.enum.mjs +17 -0
  14. package/esm2022/lib/models/image-snippet.model.mjs +18 -0
  15. package/esm2022/lib/models/index.mjs +5 -0
  16. package/esm2022/lib/models/is-value.function.mjs +17 -0
  17. package/esm2022/lib/models/salutation.enum.mjs +8 -0
  18. package/esm2022/lib/models/types/attached-file-dto.model.mjs +6 -0
  19. package/esm2022/lib/models/types/nullable.type.mjs +5 -0
  20. package/esm2022/lib/parent-components/actions.component.mjs +56 -0
  21. package/esm2022/lib/parent-components/form-control.component.mjs +75 -0
  22. package/esm2022/lib/parent-components/form.component.mjs +84 -0
  23. package/esm2022/lib/pipes/custom-pipes.module.mjs +71 -0
  24. package/esm2022/lib/pipes/decode-uri.pipe.mjs +19 -0
  25. package/esm2022/lib/pipes/encode-uri.pipe.mjs +19 -0
  26. package/esm2022/lib/pipes/integer-currency.pipe.mjs +27 -0
  27. package/esm2022/lib/pipes/safe-html.pipe.mjs +23 -0
  28. package/esm2022/lib/pipes/safe-resource-url.pipe.mjs +23 -0
  29. package/esm2022/lib/pipes/safe-style.pipe.mjs +23 -0
  30. package/esm2022/lib/pipes/safe-url.pipe.mjs +23 -0
  31. package/esm2022/lib/pipes/to-number.pipe.mjs +23 -0
  32. package/esm2022/lib/pipes/trim.pipe.mjs +20 -0
  33. package/esm2022/lib/pipes/typeof.pipe.mjs +16 -0
  34. package/esm2022/lib/services/viewport.service.mjs +355 -0
  35. package/esm2022/lib/ui/back-to-top/back-to-top.component.mjs +49 -0
  36. package/esm2022/lib/ui/button-with-confirm-dialog/button-response-types.enum.mjs +6 -0
  37. package/esm2022/lib/ui/button-with-confirm-dialog/button-with-confirm-dialog.component.mjs +58 -0
  38. package/esm2022/lib/ui/button-with-confirm-dialog/dialog-data.model.mjs +2 -0
  39. package/esm2022/lib/ui/checkbox/checkbox.component.mjs +71 -0
  40. package/esm2022/lib/ui/color-input/color-input.component.mjs +76 -0
  41. package/esm2022/lib/ui/dropdown-from-data/dropdown-from-data.component.mjs +162 -0
  42. package/esm2022/lib/ui/enum-radiogroup/enum-radiogroup.component.mjs +53 -0
  43. package/esm2022/lib/ui/file-input/file-input.component.mjs +232 -0
  44. package/esm2022/lib/ui/flyout/flyout.component.mjs +120 -0
  45. package/esm2022/lib/ui/generic-dialog/generic-dialog.component.mjs +55 -0
  46. package/esm2022/lib/ui/icon/icon.component.mjs +51 -0
  47. package/esm2022/lib/ui/icon/iconSize.enum.mjs +28 -0
  48. package/esm2022/lib/ui/image-slider/image-slider.component.mjs +189 -0
  49. package/esm2022/lib/ui/kms-accordion-item/kms-accordion-item.component.mjs +40 -0
  50. package/esm2022/lib/ui/loader/loader.component.mjs +21 -0
  51. package/esm2022/lib/ui/map/map.component.mjs +116 -0
  52. package/esm2022/lib/ui/radiobutton/radiobutton.component.mjs +77 -0
  53. package/esm2022/lib/ui/salutation-dropdown/salutation-dropdown.component.mjs +55 -0
  54. package/esm2022/lib/ui/salutation-radiogroup/salutation-radiogroup.component.mjs +49 -0
  55. package/esm2022/lib/ui/time-input/time-input.component.mjs +83 -0
  56. package/esm2022/lib/ui/tooltip-icon/tooltip-icon.component.mjs +36 -0
  57. package/esm2022/lib/ui/yes-no-radiogroup/yes-no-radiogroup.component.mjs +82 -0
  58. package/esm2022/public-api.mjs +49 -0
  59. package/fesm2022/kms-ngx-ui-presentational.mjs +3175 -0
  60. package/fesm2022/kms-ngx-ui-presentational.mjs.map +1 -0
  61. package/index.d.ts +5 -0
  62. package/lib/directives/directives.module.d.ts +13 -0
  63. package/lib/directives/mousewheel.directive.d.ts +15 -0
  64. package/lib/directives/size.directive.d.ts +10 -0
  65. package/lib/directives/sum-of-height.directive.d.ts +31 -0
  66. package/lib/directives/swipe.directive.d.ts +45 -0
  67. package/{src/lib/directives/swipe.model.ts → lib/directives/swipe.model.d.ts} +0 -6
  68. package/lib/directives/tooltip.directive.d.ts +29 -0
  69. package/lib/kms-ngx-ui-presentational.component.d.ts +8 -0
  70. package/lib/kms-ngx-ui-presentational.module.d.ts +46 -0
  71. package/lib/kms-ngx-ui-presentational.service.d.ts +6 -0
  72. package/lib/models/address.model.d.ts +14 -0
  73. package/lib/models/iconSize.enum.d.ts +15 -0
  74. package/lib/models/image-snippet.model.d.ts +15 -0
  75. package/lib/models/is-value.function.d.ts +9 -0
  76. package/lib/models/salutation.enum.d.ts +5 -0
  77. package/{src/lib/models/types/attached-file-dto.model.ts → lib/models/types/attached-file-dto.model.d.ts} +1 -1
  78. package/{src/lib/models/types/nullable.type.ts → lib/models/types/nullable.type.d.ts} +0 -1
  79. package/lib/parent-components/actions.component.d.ts +31 -0
  80. package/lib/parent-components/form-control.component.d.ts +27 -0
  81. package/lib/parent-components/form.component.d.ts +34 -0
  82. package/lib/pipes/custom-pipes.module.d.ts +17 -0
  83. package/lib/pipes/decode-uri.pipe.d.ts +10 -0
  84. package/lib/pipes/encode-uri.pipe.d.ts +10 -0
  85. package/lib/pipes/integer-currency.pipe.d.ts +13 -0
  86. package/lib/pipes/safe-html.pipe.d.ts +13 -0
  87. package/lib/pipes/safe-resource-url.pipe.d.ts +13 -0
  88. package/lib/pipes/safe-style.pipe.d.ts +13 -0
  89. package/lib/pipes/safe-url.pipe.d.ts +13 -0
  90. package/lib/pipes/to-number.pipe.d.ts +10 -0
  91. package/lib/pipes/trim.pipe.d.ts +10 -0
  92. package/lib/pipes/typeof.pipe.d.ts +7 -0
  93. package/lib/services/viewport.service.d.ts +149 -0
  94. package/lib/ui/back-to-top/back-to-top.component.d.ts +10 -0
  95. package/lib/ui/button-with-confirm-dialog/button-response-types.enum.d.ts +4 -0
  96. package/lib/ui/button-with-confirm-dialog/button-with-confirm-dialog.component.d.ts +19 -0
  97. package/{src/lib/ui/button-with-confirm-dialog/dialog-data.model.ts → lib/ui/button-with-confirm-dialog/dialog-data.model.d.ts} +3 -4
  98. package/lib/ui/checkbox/checkbox.component.d.ts +31 -0
  99. package/lib/ui/color-input/color-input.component.d.ts +19 -0
  100. package/lib/ui/dropdown-from-data/dropdown-from-data.component.d.ts +57 -0
  101. package/lib/ui/enum-radiogroup/enum-radiogroup.component.d.ts +17 -0
  102. package/lib/ui/file-input/file-input.component.d.ts +89 -0
  103. package/lib/ui/flyout/flyout.component.d.ts +32 -0
  104. package/lib/ui/generic-dialog/generic-dialog.component.d.ts +26 -0
  105. package/lib/ui/icon/icon.component.d.ts +48 -0
  106. package/lib/ui/icon/iconSize.enum.d.ts +25 -0
  107. package/lib/ui/image-slider/image-slider.component.d.ts +62 -0
  108. package/lib/ui/kms-accordion-item/kms-accordion-item.component.d.ts +22 -0
  109. package/lib/ui/loader/loader.component.d.ts +9 -0
  110. package/lib/ui/map/map.component.d.ts +71 -0
  111. package/lib/ui/radiobutton/radiobutton.component.d.ts +27 -0
  112. package/lib/ui/salutation-dropdown/salutation-dropdown.component.d.ts +17 -0
  113. package/lib/ui/salutation-radiogroup/salutation-radiogroup.component.d.ts +15 -0
  114. package/lib/ui/time-input/time-input.component.d.ts +22 -0
  115. package/lib/ui/tooltip-icon/tooltip-icon.component.d.ts +13 -0
  116. package/lib/ui/yes-no-radiogroup/yes-no-radiogroup.component.d.ts +27 -0
  117. package/package.json +17 -3
  118. package/{src/public-api.ts → public-api.d.ts} +20 -28
  119. package/src/lib/ui/back-to-top/back-to-top.component.scss +2 -3
  120. package/src/lib/ui/icon/icon.component.scss +2 -36
  121. package/src/lib/ui/image-slider/image-slider.component.scss +209 -202
  122. package/src/styles/animations.scss +47 -0
  123. package/src/styles/styles.scss +1 -0
  124. package/jest.config.js +0 -27
  125. package/ng-package.json +0 -13
  126. package/src/lib/directives/directives.module.ts +0 -28
  127. package/src/lib/directives/mousewheel.directive.ts +0 -43
  128. package/src/lib/directives/sum-of-height.directive.ts +0 -73
  129. package/src/lib/directives/swipe.directive.ts +0 -193
  130. package/src/lib/directives/tooltip.directive.spec.ts.BAK +0 -8
  131. package/src/lib/directives/tooltip.directive.ts +0 -121
  132. package/src/lib/kms-ngx-ui-presentational.component.spec.ts +0 -25
  133. package/src/lib/kms-ngx-ui-presentational.component.ts +0 -20
  134. package/src/lib/kms-ngx-ui-presentational.module.ts +0 -124
  135. package/src/lib/kms-ngx-ui-presentational.service.spec.ts +0 -16
  136. package/src/lib/kms-ngx-ui-presentational.service.ts +0 -9
  137. package/src/lib/models/address.model.ts +0 -16
  138. package/src/lib/models/iconSize.enum.ts +0 -17
  139. package/src/lib/models/image-snippet.model.ts +0 -17
  140. package/src/lib/models/is-value.function.ts +0 -20
  141. package/src/lib/models/salutation.enum.ts +0 -6
  142. package/src/lib/parent-components/actions.component.ts +0 -43
  143. package/src/lib/parent-components/form-control.component.ts +0 -77
  144. package/src/lib/parent-components/form.component.ts +0 -79
  145. package/src/lib/pipes/custom-pipes.module.ts +0 -48
  146. package/src/lib/pipes/decode-uri.pipe.ts +0 -15
  147. package/src/lib/pipes/encode-uri.pipe.ts +0 -14
  148. package/src/lib/pipes/integer-currency.pipe.ts +0 -22
  149. package/src/lib/pipes/prettyjson.pipe.ts +0 -104
  150. package/src/lib/pipes/safe-html.pipe.ts +0 -17
  151. package/src/lib/pipes/safe-resource-url.pipe.ts +0 -17
  152. package/src/lib/pipes/safe-style.pipe.ts +0 -17
  153. package/src/lib/pipes/safe-url.pipe.ts +0 -17
  154. package/src/lib/pipes/to-number.pipe.ts +0 -19
  155. package/src/lib/pipes/trim.pipe.ts +0 -16
  156. package/src/lib/pipes/typeof.pipe.ts +0 -10
  157. package/src/lib/services/viewport.service.ts +0 -241
  158. package/src/lib/ui/back-to-top/back-to-top.component.html +0 -7
  159. package/src/lib/ui/back-to-top/back-to-top.component.ts +0 -43
  160. package/src/lib/ui/back-to-top/back-to-top.stories.ts +0 -19
  161. package/src/lib/ui/button-with-confirm-dialog/button-response-types.enum.ts +0 -4
  162. package/src/lib/ui/button-with-confirm-dialog/button-with-confirm-dialog.component.html +0 -8
  163. package/src/lib/ui/button-with-confirm-dialog/button-with-confirm-dialog.component.spec.ts.BAK +0 -25
  164. package/src/lib/ui/button-with-confirm-dialog/button-with-confirm-dialog.component.ts +0 -55
  165. package/src/lib/ui/button-with-confirm-dialog/button-with-confirm-dialog.stories.ts +0 -21
  166. package/src/lib/ui/checkbox/checkbox.component.html +0 -15
  167. package/src/lib/ui/checkbox/checkbox.component.stories.ts +0 -19
  168. package/src/lib/ui/checkbox/checkbox.component.ts +0 -75
  169. package/src/lib/ui/color-input/color-input.component.html +0 -11
  170. package/src/lib/ui/color-input/color-input.component.spec.ts +0 -44
  171. package/src/lib/ui/color-input/color-input.component.ts +0 -67
  172. package/src/lib/ui/dropdown-from-data/dropdown-from-data.component.html +0 -23
  173. package/src/lib/ui/dropdown-from-data/dropdown-from-data.component.ts +0 -174
  174. package/src/lib/ui/enum-radiogroup/enum-radiogroup.component.html +0 -6
  175. package/src/lib/ui/enum-radiogroup/enum-radiogroup.component.spec.ts.BAK +0 -25
  176. package/src/lib/ui/enum-radiogroup/enum-radiogroup.component.ts +0 -43
  177. package/src/lib/ui/file-input/file-input.component.html +0 -45
  178. package/src/lib/ui/file-input/file-input.component.spec.ts.BAK +0 -25
  179. package/src/lib/ui/file-input/file-input.component.ts +0 -236
  180. package/src/lib/ui/flyout/flyout.component.html +0 -35
  181. package/src/lib/ui/flyout/flyout.component.spec.ts.BAK +0 -30
  182. package/src/lib/ui/flyout/flyout.component.ts +0 -95
  183. package/src/lib/ui/generic-dialog/generic-dialog.component.html +0 -24
  184. package/src/lib/ui/generic-dialog/generic-dialog.component.spec.ts.BAK +0 -43
  185. package/src/lib/ui/generic-dialog/generic-dialog.component.ts +0 -54
  186. package/src/lib/ui/icon/icon.component.html +0 -22
  187. package/src/lib/ui/icon/icon.component.spec.ts.BAK +0 -31
  188. package/src/lib/ui/icon/icon.component.ts +0 -67
  189. package/src/lib/ui/icon/iconSize.enum.ts +0 -17
  190. package/src/lib/ui/image-slider/image-slider.component.html +0 -54
  191. package/src/lib/ui/image-slider/image-slider.component.ts +0 -205
  192. package/src/lib/ui/kms-accordion-item/kms-accordion-item.component.html +0 -22
  193. package/src/lib/ui/kms-accordion-item/kms-accordion-item.component.spec.ts +0 -61
  194. package/src/lib/ui/kms-accordion-item/kms-accordion-item.component.ts +0 -32
  195. package/src/lib/ui/loader/loader.component.html +0 -3
  196. package/src/lib/ui/loader/loader.component.spec.ts.BAK +0 -26
  197. package/src/lib/ui/loader/loader.component.ts +0 -16
  198. package/src/lib/ui/map/map.component.html +0 -18
  199. package/src/lib/ui/map/map.component.spec.ts.BAK +0 -31
  200. package/src/lib/ui/map/map.component.ts +0 -138
  201. package/src/lib/ui/radiobutton/radiobutton.component.html +0 -42
  202. package/src/lib/ui/radiobutton/radiobutton.component.ts +0 -71
  203. package/src/lib/ui/salutation-dropdown/salutation-dropdown.component.html +0 -9
  204. package/src/lib/ui/salutation-dropdown/salutation-dropdown.component.spec.ts.BAK +0 -26
  205. package/src/lib/ui/salutation-dropdown/salutation-dropdown.component.ts +0 -48
  206. package/src/lib/ui/salutation-radiogroup/salutation-radiogroup.component.html +0 -13
  207. package/src/lib/ui/salutation-radiogroup/salutation-radiogroup.component.spec.ts.BAK +0 -25
  208. package/src/lib/ui/salutation-radiogroup/salutation-radiogroup.component.ts +0 -41
  209. package/src/lib/ui/time-input/time-input.component.html +0 -5
  210. package/src/lib/ui/time-input/time-input.component.spec.ts +0 -28
  211. package/src/lib/ui/time-input/time-input.component.ts +0 -88
  212. package/src/lib/ui/tooltip/tooltip.component.html +0 -1
  213. package/src/lib/ui/tooltip/tooltip.component.scss +0 -27
  214. package/src/lib/ui/tooltip/tooltip.component.spec.ts.BAK +0 -26
  215. package/src/lib/ui/tooltip/tooltip.component.ts +0 -10
  216. package/src/lib/ui/tooltip-icon/tooltip-icon.component.html +0 -11
  217. package/src/lib/ui/tooltip-icon/tooltip-icon.component.spec.ts.BAK +0 -28
  218. package/src/lib/ui/tooltip-icon/tooltip-icon.component.ts +0 -19
  219. package/src/lib/ui/yes-no-radiogroup/yes-no-radiogroup.component.html +0 -7
  220. package/src/lib/ui/yes-no-radiogroup/yes-no-radiogroup.component.spec.ts.BAK +0 -25
  221. package/src/lib/ui/yes-no-radiogroup/yes-no-radiogroup.component.ts +0 -79
  222. package/src/test-setup.ts +0 -2
  223. package/tsconfig.lib.json +0 -26
  224. package/tsconfig.lib.prod.json +0 -10
  225. package/tsconfig.spec.json +0 -17
  226. package/tslint.json +0 -17
  227. /package/{src/lib/models/index.ts → lib/models/index.d.ts} +0 -0
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia21zLW5neC11aS1wcmVzZW50YXRpb25hbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2ttcy1uZ3gtdWktcHJlc2VudGF0aW9uYWwvc3JjL2ttcy1uZ3gtdWktcHJlc2VudGF0aW9uYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -0,0 +1,45 @@
1
+ /**
2
+ * @copyright KMS GmbH
3
+ */
4
+ import { CommonModule } from '@angular/common';
5
+ import { NgModule } from '@angular/core';
6
+ import { MouseWheelDirective } from './mousewheel.directive';
7
+ import { GetMaxHeightDirective } from './sum-of-height.directive';
8
+ import { SwipeDirective } from './swipe.directive';
9
+ import { TooltipDirective } from './tooltip.directive';
10
+ import { SizeDirective } from './size.directive';
11
+ import * as i0 from "@angular/core";
12
+ export class DirectivesModule {
13
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DirectivesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
14
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: DirectivesModule, declarations: [SwipeDirective,
15
+ MouseWheelDirective,
16
+ GetMaxHeightDirective,
17
+ TooltipDirective,
18
+ SizeDirective], imports: [CommonModule], exports: [SwipeDirective,
19
+ MouseWheelDirective,
20
+ GetMaxHeightDirective,
21
+ TooltipDirective,
22
+ SizeDirective] }); }
23
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DirectivesModule, imports: [CommonModule] }); }
24
+ }
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DirectivesModule, decorators: [{
26
+ type: NgModule,
27
+ args: [{
28
+ declarations: [
29
+ SwipeDirective,
30
+ MouseWheelDirective,
31
+ GetMaxHeightDirective,
32
+ TooltipDirective,
33
+ SizeDirective,
34
+ ],
35
+ imports: [CommonModule],
36
+ exports: [
37
+ SwipeDirective,
38
+ MouseWheelDirective,
39
+ GetMaxHeightDirective,
40
+ TooltipDirective,
41
+ SizeDirective,
42
+ ],
43
+ }]
44
+ }] });
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aXZlcy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rbXMtbmd4LXVpLXByZXNlbnRhdGlvbmFsL3NyYy9saWIvZGlyZWN0aXZlcy9kaXJlY3RpdmVzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBbUJqRCxNQUFNLE9BQU8sZ0JBQWdCOytHQUFoQixnQkFBZ0I7Z0hBQWhCLGdCQUFnQixpQkFmekIsY0FBYztZQUNkLG1CQUFtQjtZQUNuQixxQkFBcUI7WUFDckIsZ0JBQWdCO1lBQ2hCLGFBQWEsYUFFTCxZQUFZLGFBRXBCLGNBQWM7WUFDZCxtQkFBbUI7WUFDbkIscUJBQXFCO1lBQ3JCLGdCQUFnQjtZQUNoQixhQUFhO2dIQUdKLGdCQUFnQixZQVRqQixZQUFZOzs0RkFTWCxnQkFBZ0I7a0JBakI1QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWixjQUFjO3dCQUNkLG1CQUFtQjt3QkFDbkIscUJBQXFCO3dCQUNyQixnQkFBZ0I7d0JBQ2hCLGFBQWE7cUJBQ2Q7b0JBQ0QsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixPQUFPLEVBQUU7d0JBQ1AsY0FBYzt3QkFDZCxtQkFBbUI7d0JBQ25CLHFCQUFxQjt3QkFDckIsZ0JBQWdCO3dCQUNoQixhQUFhO3FCQUNkO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAY29weXJpZ2h0IEtNUyBHbWJIXG4gKi9cblxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE1vdXNlV2hlZWxEaXJlY3RpdmUgfSBmcm9tICcuL21vdXNld2hlZWwuZGlyZWN0aXZlJztcbmltcG9ydCB7IEdldE1heEhlaWdodERpcmVjdGl2ZSB9IGZyb20gJy4vc3VtLW9mLWhlaWdodC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU3dpcGVEaXJlY3RpdmUgfSBmcm9tICcuL3N3aXBlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnLi90b29sdGlwLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTaXplRGlyZWN0aXZlIH0gZnJvbSAnLi9zaXplLmRpcmVjdGl2ZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFN3aXBlRGlyZWN0aXZlLFxuICAgIE1vdXNlV2hlZWxEaXJlY3RpdmUsXG4gICAgR2V0TWF4SGVpZ2h0RGlyZWN0aXZlLFxuICAgIFRvb2x0aXBEaXJlY3RpdmUsXG4gICAgU2l6ZURpcmVjdGl2ZSxcbiAgXSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGV4cG9ydHM6IFtcbiAgICBTd2lwZURpcmVjdGl2ZSxcbiAgICBNb3VzZVdoZWVsRGlyZWN0aXZlLFxuICAgIEdldE1heEhlaWdodERpcmVjdGl2ZSxcbiAgICBUb29sdGlwRGlyZWN0aXZlLFxuICAgIFNpemVEaXJlY3RpdmUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIERpcmVjdGl2ZXNNb2R1bGUge1xuICBTaXplRGlyZWN0aXZlO1xufVxuIl19
@@ -0,0 +1,56 @@
1
+ /*!
2
+ * @copyright FLYACTS GmbH 2019
3
+ */
4
+ import { Directive, EventEmitter, HostListener, Output } from '@angular/core';
5
+ import * as i0 from "@angular/core";
6
+ export class MouseWheelDirective {
7
+ constructor() {
8
+ this.mouseWheelUp = new EventEmitter();
9
+ this.mouseWheelDown = new EventEmitter();
10
+ }
11
+ onMouseWheelChrome(event) {
12
+ this.mouseWheelFunc(event);
13
+ }
14
+ onMouseWheelFirefox(event) {
15
+ this.mouseWheelFunc(event);
16
+ }
17
+ onMouseWheelIE(event) {
18
+ this.mouseWheelFunc(event);
19
+ }
20
+ mouseWheelFunc(event) {
21
+ event = window.event || event; // old IE support
22
+ const delta = Math.max(-1, Math.min(1, (event.wheelDelta || -event.detail)));
23
+ if (delta > 0) {
24
+ this.mouseWheelUp.emit(event);
25
+ }
26
+ else if (delta < 0) {
27
+ this.mouseWheelDown.emit(event);
28
+ }
29
+ // for IE
30
+ event.returnValue = false;
31
+ // for Chrome and Firefox
32
+ if (event.preventDefault) {
33
+ event.preventDefault();
34
+ }
35
+ }
36
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MouseWheelDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
37
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: MouseWheelDirective, selector: "[mouseWheel]", outputs: { mouseWheelUp: "mouseWheelUp", mouseWheelDown: "mouseWheelDown" }, host: { listeners: { "mousewheel": "onMouseWheelChrome($event)", "DOMMouseScroll": "onMouseWheelFirefox($event)", "onmousewheel": "onMouseWheelIE($event)" } }, ngImport: i0 }); }
38
+ }
39
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MouseWheelDirective, decorators: [{
40
+ type: Directive,
41
+ args: [{ selector: '[mouseWheel]' }]
42
+ }], propDecorators: { mouseWheelUp: [{
43
+ type: Output
44
+ }], mouseWheelDown: [{
45
+ type: Output
46
+ }], onMouseWheelChrome: [{
47
+ type: HostListener,
48
+ args: ['mousewheel', ['$event']]
49
+ }], onMouseWheelFirefox: [{
50
+ type: HostListener,
51
+ args: ['DOMMouseScroll', ['$event']]
52
+ }], onMouseWheelIE: [{
53
+ type: HostListener,
54
+ args: ['onmousewheel', ['$event']]
55
+ }] } });
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW91c2V3aGVlbC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rbXMtbmd4LXVpLXByZXNlbnRhdGlvbmFsL3NyYy9saWIvZGlyZWN0aXZlcy9tb3VzZXdoZWVsLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRzlFLE1BQU0sT0FBTyxtQkFBbUI7SUFEaEM7UUFFYyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbEMsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0tBaUNqRDtJQTlCMkMsa0JBQWtCLENBQUMsS0FBVTtRQUNqRSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFHMkMsbUJBQW1CLENBQUMsS0FBVTtRQUN0RSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFNkMsY0FBYyxDQUFDLEtBQVU7UUFDbkUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBR0QsY0FBYyxDQUFDLEtBQVU7UUFDckIsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLENBQUMsaUJBQWlCO1FBRWhELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3RSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7WUFDWCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNqQzthQUFNLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtZQUNsQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNuQztRQUNELFNBQVM7UUFDVCxLQUFLLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUMxQix5QkFBeUI7UUFDekIsSUFBSSxLQUFLLENBQUMsY0FBYyxFQUFFO1lBQ3RCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUMxQjtJQUNMLENBQUM7K0dBbENRLG1CQUFtQjttR0FBbkIsbUJBQW1COzs0RkFBbkIsbUJBQW1CO2tCQUQvQixTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRTs4QkFFekIsWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUdpQyxrQkFBa0I7c0JBQXpELFlBQVk7dUJBQUMsWUFBWSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQUtNLG1CQUFtQjtzQkFBOUQsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFJSSxjQUFjO3NCQUF2RCxZQUFZO3VCQUFDLGNBQWMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGNvcHlyaWdodCBGTFlBQ1RTIEdtYkggMjAxOVxuICovXG5cbmltcG9ydCB7IERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbbW91c2VXaGVlbF0nIH0pXG5leHBvcnQgY2xhc3MgTW91c2VXaGVlbERpcmVjdGl2ZSB7XG4gICAgQE91dHB1dCgpIG1vdXNlV2hlZWxVcCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgbW91c2VXaGVlbERvd24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBcbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZXdoZWVsJywgWyckZXZlbnQnXSkgb25Nb3VzZVdoZWVsQ2hyb21lKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgdGhpcy5tb3VzZVdoZWVsRnVuYyhldmVudCk7XG4gICAgfVxuXG4gICAgXG4gICAgQEhvc3RMaXN0ZW5lcignRE9NTW91c2VTY3JvbGwnLCBbJyRldmVudCddKSBvbk1vdXNlV2hlZWxGaXJlZm94KGV2ZW50OiBhbnkpIHtcbiAgICAgICAgdGhpcy5tb3VzZVdoZWVsRnVuYyhldmVudCk7XG4gICAgfVxuXG4gICAgICAgIEBIb3N0TGlzdGVuZXIoJ29ubW91c2V3aGVlbCcsIFsnJGV2ZW50J10pIG9uTW91c2VXaGVlbElFKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgdGhpcy5tb3VzZVdoZWVsRnVuYyhldmVudCk7XG4gICAgfVxuXG4gICAgXG4gICAgbW91c2VXaGVlbEZ1bmMoZXZlbnQ6IGFueSkge1xuICAgICAgICBldmVudCA9IHdpbmRvdy5ldmVudCB8fCBldmVudDsgLy8gb2xkIElFIHN1cHBvcnRcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGRlbHRhID0gTWF0aC5tYXgoLTEsIE1hdGgubWluKDEsIChldmVudC53aGVlbERlbHRhIHx8IC1ldmVudC5kZXRhaWwpKSk7XG4gICAgICAgIGlmIChkZWx0YSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMubW91c2VXaGVlbFVwLmVtaXQoZXZlbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKGRlbHRhIDwgMCkge1xuICAgICAgICAgICAgdGhpcy5tb3VzZVdoZWVsRG93bi5lbWl0KGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBmb3IgSUVcbiAgICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgLy8gZm9yIENocm9tZSBhbmQgRmlyZWZveFxuICAgICAgICBpZiAoZXZlbnQucHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,21 @@
1
+ import { Directive, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class SizeDirective {
4
+ constructor(elementRef) {
5
+ this.elementRef = elementRef;
6
+ this.size = '';
7
+ }
8
+ ngOnInit() {
9
+ this.elementRef.nativeElement.style.width = this.size + 'px';
10
+ this.elementRef.nativeElement.style.height = this.size + 'px';
11
+ }
12
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SizeDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
13
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: SizeDirective, selector: "[size]", inputs: { size: "size" }, ngImport: i0 }); }
14
+ }
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SizeDirective, decorators: [{
16
+ type: Directive,
17
+ args: [{ selector: '[size]' }]
18
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { size: [{
19
+ type: Input
20
+ }] } });
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2l6ZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rbXMtbmd4LXVpLXByZXNlbnRhdGlvbmFsL3NyYy9saWIvZGlyZWN0aXZlcy9zaXplLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFHN0QsTUFBTSxPQUFPLGFBQWE7SUFHdEIsWUFBb0IsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUZqQyxTQUFJLEdBQVcsRUFBRSxDQUFDO0lBRW1CLENBQUM7SUFFL0MsUUFBUTtRQUNKLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDN0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNsRSxDQUFDOytHQVJRLGFBQWE7bUdBQWIsYUFBYTs7NEZBQWIsYUFBYTtrQkFEekIsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUU7aUdBRXBCLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW3NpemVdJyB9KVxuZXhwb3J0IGNsYXNzIFNpemVEaXJlY3RpdmUge1xuICAgIEBJbnB1dCgpIHNpemU6IHN0cmluZyA9ICcnO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7IH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS53aWR0aCA9IHRoaXMuc2l6ZSArICdweCc7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuc2l6ZSArICdweCc7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,74 @@
1
+ /*!
2
+ * @copyright FLYACTS GmbH 2019
3
+ */
4
+ // ng
5
+ import { Directive, EventEmitter, Input, Output } from '@angular/core';
6
+ import * as i0 from "@angular/core";
7
+ /**
8
+ * Directive to calc the height of all inner elements
9
+ */
10
+ export class GetMaxHeightDirective {
11
+ constructor(el) {
12
+ this.el = el;
13
+ /**
14
+ * CSS class name of the child items (markup elements) that should be checked for their height.
15
+ * This is mandatory.
16
+ */
17
+ this.cssClassName = '';
18
+ /**
19
+ * Event that will pass the height of the tallest child inside the container.
20
+ * Useful to calculate the target height of containers with different content (like accordion) for animations.
21
+ */
22
+ this.maxHeightChanged = new EventEmitter();
23
+ /**
24
+ * Event that will pass the complete sum of all height values from each child.
25
+ * Useful to calculate the full target height of a container (like dropdown) for animations.
26
+ */
27
+ this.sumOfHeight = new EventEmitter();
28
+ }
29
+ ngAfterContentChecked() {
30
+ this.checkHeightOfChildren(this.el.nativeElement, this.cssClassName);
31
+ }
32
+ checkHeightOfChildren(parent, cssClassName) {
33
+ if (!parent) {
34
+ return;
35
+ }
36
+ // find all the child elements with the selected class name
37
+ const children = parent.getElementsByClassName(cssClassName);
38
+ // failsafe
39
+ if (!children) {
40
+ return;
41
+ }
42
+ // get all the child elements heights
43
+ const itemHeights = Array.from(children).map((x) => x.getBoundingClientRect().height);
44
+ // failsafe
45
+ if (itemHeights.length === 0) {
46
+ return;
47
+ }
48
+ // find out the tallest element
49
+ const maxHeight = itemHeights.reduce((prev, curr) => {
50
+ return curr > prev ? curr : prev;
51
+ }, 0);
52
+ // get sum of heights
53
+ const sumOfHeight = itemHeights.reduce((pv, cv) => pv + cv, 0);
54
+ // inform
55
+ this.maxHeightChanged.emit(maxHeight);
56
+ this.sumOfHeight.emit(sumOfHeight);
57
+ }
58
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GetMaxHeightDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
59
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: GetMaxHeightDirective, selector: "[getMaxHeight]", inputs: { cssClassName: ["getMaxHeight", "cssClassName"] }, outputs: { maxHeightChanged: "maxHeightChanged", sumOfHeight: "sumOfHeight" }, ngImport: i0 }); }
60
+ }
61
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GetMaxHeightDirective, decorators: [{
62
+ type: Directive,
63
+ args: [{
64
+ selector: '[getMaxHeight]',
65
+ }]
66
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { cssClassName: [{
67
+ type: Input,
68
+ args: ['getMaxHeight']
69
+ }], maxHeightChanged: [{
70
+ type: Output
71
+ }], sumOfHeight: [{
72
+ type: Output
73
+ }] } });
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VtLW9mLWhlaWdodC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rbXMtbmd4LXVpLXByZXNlbnRhdGlvbmFsL3NyYy9saWIvZGlyZWN0aXZlcy9zdW0tb2YtaGVpZ2h0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILEtBQUs7QUFDTCxPQUFPLEVBQXVCLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFeEc7O0dBRUc7QUFLSCxNQUFNLE9BQU8scUJBQXFCO0lBbUI5QixZQUFvQixFQUFjO1FBQWQsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQWxCbEM7OztXQUdHO1FBQ29CLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBRXpDOzs7V0FHRztRQUNjLHFCQUFnQixHQUF5QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTdFOzs7V0FHRztRQUNjLGdCQUFXLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7SUFFbkMsQ0FBQztJQUV0QyxxQkFBcUI7UUFDakIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRU8scUJBQXFCLENBQUMsTUFBbUIsRUFBRSxZQUFvQjtRQUNuRSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBRUQsMkRBQTJEO1FBQzNELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUU3RCxXQUFXO1FBQ1gsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNYLE9BQU87U0FDVjtRQUVELHFDQUFxQztRQUNyQyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdEYsV0FBVztRQUNYLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDMUIsT0FBTztTQUNWO1FBRUQsK0JBQStCO1FBQy9CLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDaEQsT0FBTyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNyQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFTixxQkFBcUI7UUFDckIsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFL0QsU0FBUztRQUNULElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdkMsQ0FBQzsrR0F6RFEscUJBQXFCO21HQUFyQixxQkFBcUI7OzRGQUFyQixxQkFBcUI7a0JBSmpDLFNBQVM7bUJBQUM7b0JBRVAsUUFBUSxFQUFFLGdCQUFnQjtpQkFDN0I7aUdBTTBCLFlBQVk7c0JBQWxDLEtBQUs7dUJBQUMsY0FBYztnQkFNSixnQkFBZ0I7c0JBQWhDLE1BQU07Z0JBTVUsV0FBVztzQkFBM0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGNvcHlyaWdodCBGTFlBQ1RTIEdtYkggMjAxOVxuICovXG5cbi8vIG5nXG5pbXBvcnQgeyBBZnRlckNvbnRlbnRDaGVja2VkLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIERpcmVjdGl2ZSB0byBjYWxjIHRoZSBoZWlnaHQgb2YgYWxsIGlubmVyIGVsZW1lbnRzXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIFxuICAgIHNlbGVjdG9yOiAnW2dldE1heEhlaWdodF0nLFxufSlcbmV4cG9ydCBjbGFzcyBHZXRNYXhIZWlnaHREaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRDaGVja2VkIHtcbiAgICAvKipcbiAgICAgKiBDU1MgY2xhc3MgbmFtZSBvZiB0aGUgY2hpbGQgaXRlbXMgKG1hcmt1cCBlbGVtZW50cykgdGhhdCBzaG91bGQgYmUgY2hlY2tlZCBmb3IgdGhlaXIgaGVpZ2h0LlxuICAgICAqIFRoaXMgaXMgbWFuZGF0b3J5LlxuICAgICAqL1xuICAgIEBJbnB1dCgnZ2V0TWF4SGVpZ2h0JykgY3NzQ2xhc3NOYW1lID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCB0aGF0IHdpbGwgcGFzcyB0aGUgaGVpZ2h0IG9mIHRoZSB0YWxsZXN0IGNoaWxkIGluc2lkZSB0aGUgY29udGFpbmVyLlxuICAgICAqIFVzZWZ1bCB0byBjYWxjdWxhdGUgdGhlIHRhcmdldCBoZWlnaHQgb2YgY29udGFpbmVycyB3aXRoIGRpZmZlcmVudCBjb250ZW50IChsaWtlIGFjY29yZGlvbikgZm9yIGFuaW1hdGlvbnMuXG4gICAgICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyBtYXhIZWlnaHRDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IHRoYXQgd2lsbCBwYXNzIHRoZSBjb21wbGV0ZSBzdW0gb2YgYWxsIGhlaWdodCB2YWx1ZXMgZnJvbSBlYWNoIGNoaWxkLlxuICAgICAqIFVzZWZ1bCB0byBjYWxjdWxhdGUgdGhlIGZ1bGwgdGFyZ2V0IGhlaWdodCBvZiBhIGNvbnRhaW5lciAobGlrZSBkcm9wZG93bikgZm9yIGFuaW1hdGlvbnMuXG4gICAgICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyBzdW1PZkhlaWdodDogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmKSB7fVxuXG4gICAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNoZWNrSGVpZ2h0T2ZDaGlsZHJlbih0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIHRoaXMuY3NzQ2xhc3NOYW1lKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrSGVpZ2h0T2ZDaGlsZHJlbihwYXJlbnQ6IEhUTUxFbGVtZW50LCBjc3NDbGFzc05hbWU6IHN0cmluZykge1xuICAgICAgICBpZiAoIXBhcmVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZmluZCBhbGwgdGhlIGNoaWxkIGVsZW1lbnRzIHdpdGggdGhlIHNlbGVjdGVkIGNsYXNzIG5hbWVcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBwYXJlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjc3NDbGFzc05hbWUpO1xuXG4gICAgICAgIC8vIGZhaWxzYWZlXG4gICAgICAgIGlmICghY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGdldCBhbGwgdGhlIGNoaWxkIGVsZW1lbnRzIGhlaWdodHNcbiAgICAgICAgY29uc3QgaXRlbUhlaWdodHMgPSBBcnJheS5mcm9tKGNoaWxkcmVuKS5tYXAoKHgpID0+IHguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KTtcblxuICAgICAgICAvLyBmYWlsc2FmZVxuICAgICAgICBpZiAoaXRlbUhlaWdodHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBmaW5kIG91dCB0aGUgdGFsbGVzdCBlbGVtZW50XG4gICAgICAgIGNvbnN0IG1heEhlaWdodCA9IGl0ZW1IZWlnaHRzLnJlZHVjZSgocHJldiwgY3VycikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnIgPiBwcmV2ID8gY3VyciA6IHByZXY7XG4gICAgICAgIH0sIDApO1xuXG4gICAgICAgIC8vIGdldCBzdW0gb2YgaGVpZ2h0c1xuICAgICAgICBjb25zdCBzdW1PZkhlaWdodCA9IGl0ZW1IZWlnaHRzLnJlZHVjZSgocHYsIGN2KSA9PiBwdiArIGN2LCAwKTtcblxuICAgICAgICAvLyBpbmZvcm1cbiAgICAgICAgdGhpcy5tYXhIZWlnaHRDaGFuZ2VkLmVtaXQobWF4SGVpZ2h0KTtcbiAgICAgICAgdGhpcy5zdW1PZkhlaWdodC5lbWl0KHN1bU9mSGVpZ2h0KTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +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
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SwipeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
147
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", 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 }); }
148
+ }
149
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", 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==
@@ -0,0 +1,144 @@
1
+ import { Directive, Input, HostListener } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class TooltipDirective {
4
+ constructor(el, renderer) {
5
+ this.el = el;
6
+ this.renderer = renderer;
7
+ this.tooltipTitle = "";
8
+ this.tooltipText = "";
9
+ this.tooltipLinkText = "";
10
+ this.tooltipLinkUrl = "";
11
+ this.tooltipPlacement = "bottom";
12
+ this.tooltipDelay = 1000;
13
+ this.tooltipPlaceIntoHost = false;
14
+ this.tooltipOnlyonclick = false;
15
+ this.offset = 0;
16
+ }
17
+ onMouseEnter() {
18
+ if (!this.tooltipOnlyonclick) {
19
+ this.show();
20
+ }
21
+ }
22
+ onClick() {
23
+ if (this.tooltipOnlyonclick) {
24
+ this.show();
25
+ }
26
+ }
27
+ onMouseLeave() {
28
+ if (this.tooltipElem) {
29
+ this.hide();
30
+ }
31
+ }
32
+ show() {
33
+ if (!this.tooltipElem) {
34
+ this.create();
35
+ this.setPosition();
36
+ }
37
+ this.renderer.addClass(this.tooltipElem, 'tooltip-show');
38
+ }
39
+ hide() {
40
+ this.renderer.removeClass(this.tooltipElem, 'tooltip-show');
41
+ window.setTimeout(() => {
42
+ }, this.tooltipDelay);
43
+ }
44
+ create() {
45
+ this.tooltipElem = this.renderer.createElement('kms-tooltip-element');
46
+ this.tooltipTitleElem = this.renderer.createElement('b');
47
+ this.renderer.appendChild(this.tooltipTitleElem, this.renderer.createText(this.tooltipTitle));
48
+ this.renderer.appendChild(this.tooltipElem, this.tooltipTitleElem);
49
+ this.tooltipTextElem = this.renderer.createElement('div');
50
+ this.renderer.appendChild(this.tooltipTextElem, this.renderer.createText(this.tooltipText));
51
+ this.renderer.appendChild(this.tooltipElem, this.tooltipTextElem);
52
+ this.tooltipLinkElem = this.renderer.createElement('a');
53
+ this.renderer.setAttribute(this.tooltipLinkElem, 'href', this.tooltipLinkUrl);
54
+ this.renderer.appendChild(this.tooltipLinkElem, this.renderer.createText(this.tooltipLinkText));
55
+ this.renderer.appendChild(this.tooltipElem, this.tooltipLinkElem);
56
+ if (this.tooltipPlaceIntoHost) {
57
+ this.renderer.appendChild(this.el.nativeElement, this.tooltipElem);
58
+ }
59
+ else {
60
+ this.renderer.appendChild(document.body, this.tooltipElem);
61
+ }
62
+ this.renderer.addClass(this.tooltipElem, 'tooltip');
63
+ this.renderer.addClass(this.tooltipElem, `tooltip-${this.tooltipPlacement}`);
64
+ this.renderer.setStyle(this.tooltipElem, '-webkit-transition', `opacity ${this.tooltipDelay}ms`);
65
+ this.renderer.setStyle(this.tooltipElem, '-moz-transition', `opacity ${this.tooltipDelay}ms`);
66
+ this.renderer.setStyle(this.tooltipElem, '-o-transition', `opacity ${this.tooltipDelay}ms`);
67
+ this.renderer.setStyle(this.tooltipElem, 'transition', `opacity ${this.tooltipDelay}ms`);
68
+ }
69
+ setPosition() {
70
+ if (this.tooltipElem) {
71
+ const hostPos = this.el.nativeElement.getBoundingClientRect();
72
+ const tooltipPos = this.tooltipElem.getBoundingClientRect();
73
+ let top, left;
74
+ if (this.tooltipPlaceIntoHost) {
75
+ left = 0;
76
+ top = hostPos.height;
77
+ }
78
+ else {
79
+ const scrollPos = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
80
+ if (this.tooltipPlacement === 'top') {
81
+ top = hostPos.top - tooltipPos.height - this.offset;
82
+ left = hostPos.left + (hostPos.width - tooltipPos.width) / 2;
83
+ }
84
+ if (!this.tooltipPlacement || this.tooltipPlacement === 'bottom') {
85
+ top = hostPos.bottom + this.offset;
86
+ left = hostPos.left + (hostPos.width - tooltipPos.width) / 2;
87
+ }
88
+ if (this.tooltipPlacement === 'left') {
89
+ top = hostPos.top + (hostPos.height - tooltipPos.height) / 2;
90
+ left = hostPos.left - tooltipPos.width - this.offset;
91
+ }
92
+ if (this.tooltipPlacement === 'right') {
93
+ top = hostPos.top + (hostPos.height - tooltipPos.height) / 2;
94
+ left = hostPos.right + this.offset;
95
+ }
96
+ top += scrollPos;
97
+ }
98
+ this.renderer.setStyle(this.tooltipElem, 'top', `${top}px`);
99
+ this.renderer.setStyle(this.tooltipElem, 'left', `${left}px`);
100
+ }
101
+ }
102
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TooltipDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
103
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TooltipDirective, selector: "[kmsTooltip]", inputs: { tooltipTitle: "tooltipTitle", tooltipText: "tooltipText", tooltipLinkText: "tooltipLinkText", tooltipLinkUrl: "tooltipLinkUrl", tooltipPlacement: "tooltipPlacement", tooltipDelay: "tooltipDelay", tooltipPlaceIntoHost: "tooltipPlaceIntoHost", tooltipOnlyonclick: "tooltipOnlyonclick" }, host: { listeners: { "mouseenter": "onMouseEnter()", "click": "onClick()", "mouseleave": "onMouseLeave()" } }, ngImport: i0 }); }
104
+ }
105
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TooltipDirective, decorators: [{
106
+ type: Directive,
107
+ args: [{
108
+ selector: '[kmsTooltip]'
109
+ }]
110
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { tooltipTitle: [{
111
+ type: Input,
112
+ args: ['tooltipTitle']
113
+ }], tooltipText: [{
114
+ type: Input,
115
+ args: ['tooltipText']
116
+ }], tooltipLinkText: [{
117
+ type: Input,
118
+ args: ['tooltipLinkText']
119
+ }], tooltipLinkUrl: [{
120
+ type: Input,
121
+ args: ['tooltipLinkUrl']
122
+ }], tooltipPlacement: [{
123
+ type: Input,
124
+ args: ['tooltipPlacement']
125
+ }], tooltipDelay: [{
126
+ type: Input,
127
+ args: ['tooltipDelay']
128
+ }], tooltipPlaceIntoHost: [{
129
+ type: Input,
130
+ args: ['tooltipPlaceIntoHost']
131
+ }], tooltipOnlyonclick: [{
132
+ type: Input,
133
+ args: ['tooltipOnlyonclick']
134
+ }], onMouseEnter: [{
135
+ type: HostListener,
136
+ args: ['mouseenter']
137
+ }], onClick: [{
138
+ type: HostListener,
139
+ args: ['click']
140
+ }], onMouseLeave: [{
141
+ type: HostListener,
142
+ args: ['mouseleave']
143
+ }] } });
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rbXMtbmd4LXVpLXByZXNlbnRhdGlvbmFsL3NyYy9saWIvZGlyZWN0aXZlcy90b29sdGlwLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBYyxZQUFZLEVBQWEsTUFBTSxlQUFlLENBQUM7O0FBS3RGLE1BQU0sT0FBTyxnQkFBZ0I7SUFnQnpCLFlBQW9CLEVBQWMsRUFBVSxRQUFtQjtRQUEzQyxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQWZ4QyxpQkFBWSxHQUFHLEVBQUUsQ0FBQztRQUNuQixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNiLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLG1CQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLHFCQUFnQixHQUFHLFFBQVEsQ0FBQztRQUNoQyxpQkFBWSxHQUFHLElBQUksQ0FBQztRQUNaLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUMvQix1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUFNeEQsV0FBTSxHQUFHLENBQUMsQ0FBQztJQUlYLENBQUM7SUFFMkIsWUFBWTtRQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQUU7SUFDbEQsQ0FBQztJQUVzQixPQUFPO1FBQzFCLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQUU7SUFDakQsQ0FBQztJQUUyQixZQUFZO1FBQ3BDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUFFO0lBQzFDLENBQUM7SUFFRCxJQUFJO1FBQ0EsSUFBSSxD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QUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztTQUNqRTtJQUNMLENBQUM7K0dBbEhRLGdCQUFnQjttR0FBaEIsZ0JBQWdCOzs0RkFBaEIsZ0JBQWdCO2tCQUg1QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxjQUFjO2lCQUMzQjt5SEFFMEIsWUFBWTtzQkFBbEMsS0FBSzt1QkFBQyxjQUFjO2dCQUNDLFdBQVc7c0JBQWhDLEtBQUs7dUJBQUMsYUFBYTtnQkFDTSxlQUFlO3NCQUF4QyxLQUFLO3VCQUFDLGlCQUFpQjtnQkFDQyxjQUFjO3NCQUF0QyxLQUFLO3VCQUFDLGdCQUFnQjtnQkFDSSxnQkFBZ0I7c0JBQTFDLEtBQUs7dUJBQUMsa0JBQWtCO2dCQUNGLFlBQVk7c0JBQWxDLEtBQUs7dUJBQUMsY0FBYztnQkFDVSxvQkFBb0I7c0JBQWxELEtBQUs7dUJBQUMsc0JBQXNCO2dCQUNBLGtCQUFrQjtzQkFBOUMsS0FBSzt1QkFBQyxvQkFBb0I7Z0JBWUMsWUFBWTtzQkFBdkMsWUFBWTt1QkFBQyxZQUFZO2dCQUlILE9BQU87c0JBQTdCLFlBQVk7dUJBQUMsT0FBTztnQkFJTyxZQUFZO3NCQUF2QyxZQUFZO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIElucHV0LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1trbXNUb29sdGlwXSdcbn0pXG5leHBvcnQgY2xhc3MgVG9vbHRpcERpcmVjdGl2ZSB7XG4gICAgQElucHV0KCd0b29sdGlwVGl0bGUnKSB0b29sdGlwVGl0bGUgPSBcIlwiO1xuICAgIEBJbnB1dCgndG9vbHRpcFRleHQnKSB0b29sdGlwVGV4dCA9IFwiXCI7XG4gICAgQElucHV0KCd0b29sdGlwTGlua1RleHQnKSB0b29sdGlwTGlua1RleHQgPSBcIlwiO1xuICAgIEBJbnB1dCgndG9vbHRpcExpbmtVcmwnKSB0b29sdGlwTGlua1VybCA9IFwiXCI7XG4gICAgQElucHV0KCd0b29sdGlwUGxhY2VtZW50JykgdG9vbHRpcFBsYWNlbWVudCA9IFwiYm90dG9tXCI7XG4gICAgQElucHV0KCd0b29sdGlwRGVsYXknKSB0b29sdGlwRGVsYXkgPSAxMDAwO1xuICAgIEBJbnB1dCgndG9vbHRpcFBsYWNlSW50b0hvc3QnKSB0b29sdGlwUGxhY2VJbnRvSG9zdCA9IGZhbHNlO1xuICAgIEBJbnB1dCgndG9vbHRpcE9ubHlvbmNsaWNrJykgdG9vbHRpcE9ubHlvbmNsaWNrID0gZmFsc2U7XG5cbiAgICB0b29sdGlwRWxlbT86IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkO1xuICAgIHRvb2x0aXBMaW5rRWxlbT86IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkO1xuICAgIHRvb2x0aXBUaXRsZUVsZW0/OiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICB0b29sdGlwVGV4dEVsZW0/OiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICBvZmZzZXQgPSAwO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZiwgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7XG5cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWVudGVyJykgb25Nb3VzZUVudGVyKCkge1xuICAgICAgICBpZiAoIXRoaXMudG9vbHRpcE9ubHlvbmNsaWNrKSB7IHRoaXMuc2hvdygpOyB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snKSBvbkNsaWNrKCkge1xuICAgICAgICBpZiAodGhpcy50b29sdGlwT25seW9uY2xpY2spIHsgdGhpcy5zaG93KCk7IH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWxlYXZlJykgb25Nb3VzZUxlYXZlKCkge1xuICAgICAgICBpZiAodGhpcy50b29sdGlwRWxlbSkgeyB0aGlzLmhpZGUoKTsgfVxuICAgIH1cblxuICAgIHNob3coKSB7XG4gICAgICAgIGlmICghdGhpcy50b29sdGlwRWxlbSl7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy50b29sdGlwRWxlbSwgJ3Rvb2x0aXAtc2hvdycpO1xuICAgIH1cblxuICAgIGhpZGUoKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy50b29sdGlwRWxlbSwgJ3Rvb2x0aXAtc2hvdycpO1xuICAgICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIH0sIHRoaXMudG9vbHRpcERlbGF5KTtcbiAgICB9XG5cbiAgICBjcmVhdGUoKSB7XG4gICAgICAgIHRoaXMudG9vbHRpcEVsZW0gPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2ttcy10b29sdGlwLWVsZW1lbnQnKTtcblxuICAgICAgICB0aGlzLnRvb2x0aXBUaXRsZUVsZW0gPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2InKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLnRvb2x0aXBUaXRsZUVsZW0sIHRoaXMucmVuZGVyZXIuY3JlYXRlVGV4dCh0aGlzLnRvb2x0aXBUaXRsZSkpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMudG9vbHRpcEVsZW0sIHRoaXMudG9vbHRpcFRpdGxlRWxlbSk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLnRvb2x0aXBUZXh0RWxlbSA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy50b29sdGlwVGV4dEVsZW0sIHRoaXMucmVuZGVyZXIuY3JlYXRlVGV4dCh0aGlzLnRvb2x0aXBUZXh0KSk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy50b29sdGlwRWxlbSwgdGhpcy50b29sdGlwVGV4dEVsZW0pO1xuICAgICAgICBcbiAgICAgICAgdGhpcy50b29sdGlwTGlua0VsZW0gPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy50b29sdGlwTGlua0VsZW0sICdocmVmJywgdGhpcy50b29sdGlwTGlua1VybCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy50b29sdGlwTGlua0VsZW0sIHRoaXMucmVuZGVyZXIuY3JlYXRlVGV4dCh0aGlzLnRvb2x0aXBMaW5rVGV4dCkpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMudG9vbHRpcEVsZW0sIHRoaXMudG9vbHRpcExpbmtFbGVtKTtcblxuICAgICAgICBpZih0aGlzLnRvb2x0aXBQbGFjZUludG9Ib3N0KXtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5lbC5uYXRpdmVFbGVtZW50LCB0aGlzLnRvb2x0aXBFbGVtKTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGRvY3VtZW50LmJvZHksIHRoaXMudG9vbHRpcEVsZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLnRvb2x0aXBFbGVtLCAndG9vbHRpcCcpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMudG9vbHRpcEVsZW0sIGB0b29sdGlwLSR7dGhpcy50b29sdGlwUGxhY2VtZW50fWApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudG9vbHRpcEVsZW0sICctd2Via2l0LXRyYW5zaXRpb24nLCBgb3BhY2l0eSAke3RoaXMudG9vbHRpcERlbGF5fW1zYCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy50b29sdGlwRWxlbSwgJy1tb3otdHJhbnNpdGlvbicsIGBvcGFjaXR5ICR7dGhpcy50b29sdGlwRGVsYXl9bXNgKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnRvb2x0aXBFbGVtLCAnLW8tdHJhbnNpdGlvbicsIGBvcGFjaXR5ICR7dGhpcy50b29sdGlwRGVsYXl9bXNgKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnRvb2x0aXBFbGVtLCAndHJhbnNpdGlvbicsIGBvcGFjaXR5ICR7dGhpcy50b29sdGlwRGVsYXl9bXNgKTtcbiAgICB9XG5cbiAgICBzZXRQb3NpdGlvbigpIHtcbiAgICAgICAgaWYodGhpcy50b29sdGlwRWxlbSl7XG4gICAgICAgICAgICBjb25zdCBob3N0UG9zID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgY29uc3QgdG9vbHRpcFBvcyA9IHRoaXMudG9vbHRpcEVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgICAgIGxldCB0b3AsIGxlZnQ7XG5cbiAgICAgICAgICAgIGlmKHRoaXMudG9vbHRpcFBsYWNlSW50b0hvc3Qpe1xuICAgICAgICAgICAgICAgIGxlZnQgPSAwO1xuICAgICAgICAgICAgICAgIHRvcCA9IGhvc3RQb3MuaGVpZ2h0OyBcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsUG9zID0gd2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgfHwgMDtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRvb2x0aXBQbGFjZW1lbnQgPT09ICd0b3AnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvcCA9IGhvc3RQb3MudG9wIC0gdG9vbHRpcFBvcy5oZWlnaHQgLSB0aGlzLm9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGhvc3RQb3MubGVmdCArIChob3N0UG9zLndpZHRoIC0gdG9vbHRpcFBvcy53aWR0aCkgLyAyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy50b29sdGlwUGxhY2VtZW50IHx8IHRoaXMudG9vbHRpcFBsYWNlbWVudCA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9wID0gaG9zdFBvcy5ib3R0b20gKyB0aGlzLm9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGhvc3RQb3MubGVmdCArIChob3N0UG9zLndpZHRoIC0gdG9vbHRpcFBvcy53aWR0aCkgLyAyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRvb2x0aXBQbGFjZW1lbnQgPT09ICdsZWZ0Jykge1xuICAgICAgICAgICAgICAgICAgICB0b3AgPSBob3N0UG9zLnRvcCArIChob3N0UG9zLmhlaWdodCAtIHRvb2x0aXBQb3MuaGVpZ2h0KSAvIDI7XG4gICAgICAgICAgICAgICAgICAgIGxlZnQgPSBob3N0UG9zLmxlZnQgLSB0b29sdGlwUG9zLndpZHRoIC0gdGhpcy5vZmZzZXQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudG9vbHRpcFBsYWNlbWVudCA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgICAgICAgICB0b3AgPSBob3N0UG9zLnRvcCArIChob3N0UG9zLmhlaWdodCAtIHRvb2x0aXBQb3MuaGVpZ2h0KSAvIDI7XG4gICAgICAgICAgICAgICAgICAgIGxlZnQgPSBob3N0UG9zLnJpZ2h0ICsgdGhpcy5vZmZzZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRvcCArPSBzY3JvbGxQb3M7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy50b29sdGlwRWxlbSwgJ3RvcCcsIGAke3RvcH1weGApO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnRvb2x0aXBFbGVtLCAnbGVmdCcsIGAke2xlZnR9cHhgKTtcbiAgICAgICAgfVxuICAgIH1cbn0iXX0=