@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.
- package/esm2022/kms-ngx-ui-presentational.mjs +5 -0
- package/esm2022/lib/directives/directives.module.mjs +45 -0
- package/esm2022/lib/directives/mousewheel.directive.mjs +56 -0
- package/esm2022/lib/directives/size.directive.mjs +21 -0
- package/esm2022/lib/directives/sum-of-height.directive.mjs +74 -0
- package/esm2022/lib/directives/swipe.directive.mjs +183 -0
- package/esm2022/lib/directives/swipe.model.mjs +5 -0
- package/esm2022/lib/directives/tooltip.directive.mjs +144 -0
- package/esm2022/lib/kms-ngx-ui-presentational.component.mjs +22 -0
- package/esm2022/lib/kms-ngx-ui-presentational.module.mjs +206 -0
- package/esm2022/lib/kms-ngx-ui-presentational.service.mjs +14 -0
- package/esm2022/lib/models/address.model.mjs +6 -0
- package/esm2022/lib/models/iconSize.enum.mjs +17 -0
- package/esm2022/lib/models/image-snippet.model.mjs +18 -0
- package/esm2022/lib/models/index.mjs +5 -0
- package/esm2022/lib/models/is-value.function.mjs +17 -0
- package/esm2022/lib/models/salutation.enum.mjs +8 -0
- package/esm2022/lib/models/types/attached-file-dto.model.mjs +6 -0
- package/esm2022/lib/models/types/nullable.type.mjs +5 -0
- package/esm2022/lib/parent-components/actions.component.mjs +56 -0
- package/esm2022/lib/parent-components/form-control.component.mjs +75 -0
- package/esm2022/lib/parent-components/form.component.mjs +84 -0
- package/esm2022/lib/pipes/custom-pipes.module.mjs +71 -0
- package/esm2022/lib/pipes/decode-uri.pipe.mjs +19 -0
- package/esm2022/lib/pipes/encode-uri.pipe.mjs +19 -0
- package/esm2022/lib/pipes/integer-currency.pipe.mjs +27 -0
- package/esm2022/lib/pipes/safe-html.pipe.mjs +23 -0
- package/esm2022/lib/pipes/safe-resource-url.pipe.mjs +23 -0
- package/esm2022/lib/pipes/safe-style.pipe.mjs +23 -0
- package/esm2022/lib/pipes/safe-url.pipe.mjs +23 -0
- package/esm2022/lib/pipes/to-number.pipe.mjs +23 -0
- package/esm2022/lib/pipes/trim.pipe.mjs +20 -0
- package/esm2022/lib/pipes/typeof.pipe.mjs +16 -0
- package/esm2022/lib/services/viewport.service.mjs +355 -0
- package/esm2022/lib/ui/back-to-top/back-to-top.component.mjs +49 -0
- package/esm2022/lib/ui/button-with-confirm-dialog/button-response-types.enum.mjs +6 -0
- package/esm2022/lib/ui/button-with-confirm-dialog/button-with-confirm-dialog.component.mjs +58 -0
- package/esm2022/lib/ui/button-with-confirm-dialog/dialog-data.model.mjs +2 -0
- package/esm2022/lib/ui/checkbox/checkbox.component.mjs +71 -0
- package/esm2022/lib/ui/color-input/color-input.component.mjs +76 -0
- package/esm2022/lib/ui/dropdown-from-data/dropdown-from-data.component.mjs +162 -0
- package/esm2022/lib/ui/enum-radiogroup/enum-radiogroup.component.mjs +53 -0
- package/esm2022/lib/ui/file-input/file-input.component.mjs +232 -0
- package/esm2022/lib/ui/flyout/flyout.component.mjs +120 -0
- package/esm2022/lib/ui/generic-dialog/generic-dialog.component.mjs +55 -0
- package/esm2022/lib/ui/icon/icon.component.mjs +51 -0
- package/esm2022/lib/ui/icon/iconSize.enum.mjs +28 -0
- package/esm2022/lib/ui/image-slider/image-slider.component.mjs +189 -0
- package/esm2022/lib/ui/kms-accordion-item/kms-accordion-item.component.mjs +40 -0
- package/esm2022/lib/ui/loader/loader.component.mjs +21 -0
- package/esm2022/lib/ui/map/map.component.mjs +116 -0
- package/esm2022/lib/ui/radiobutton/radiobutton.component.mjs +77 -0
- package/esm2022/lib/ui/salutation-dropdown/salutation-dropdown.component.mjs +55 -0
- package/esm2022/lib/ui/salutation-radiogroup/salutation-radiogroup.component.mjs +49 -0
- package/esm2022/lib/ui/time-input/time-input.component.mjs +83 -0
- package/esm2022/lib/ui/tooltip-icon/tooltip-icon.component.mjs +36 -0
- package/esm2022/lib/ui/yes-no-radiogroup/yes-no-radiogroup.component.mjs +82 -0
- package/esm2022/public-api.mjs +49 -0
- package/fesm2022/kms-ngx-ui-presentational.mjs +3175 -0
- package/fesm2022/kms-ngx-ui-presentational.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/directives/directives.module.d.ts +13 -0
- package/lib/directives/mousewheel.directive.d.ts +15 -0
- package/lib/directives/size.directive.d.ts +10 -0
- package/lib/directives/sum-of-height.directive.d.ts +31 -0
- package/lib/directives/swipe.directive.d.ts +45 -0
- package/{src/lib/directives/swipe.model.ts → lib/directives/swipe.model.d.ts} +0 -6
- package/lib/directives/tooltip.directive.d.ts +29 -0
- package/lib/kms-ngx-ui-presentational.component.d.ts +8 -0
- package/lib/kms-ngx-ui-presentational.module.d.ts +46 -0
- package/lib/kms-ngx-ui-presentational.service.d.ts +6 -0
- package/lib/models/address.model.d.ts +14 -0
- package/lib/models/iconSize.enum.d.ts +15 -0
- package/lib/models/image-snippet.model.d.ts +15 -0
- package/lib/models/is-value.function.d.ts +9 -0
- package/lib/models/salutation.enum.d.ts +5 -0
- package/{src/lib/models/types/attached-file-dto.model.ts → lib/models/types/attached-file-dto.model.d.ts} +1 -1
- package/{src/lib/models/types/nullable.type.ts → lib/models/types/nullable.type.d.ts} +0 -1
- package/lib/parent-components/actions.component.d.ts +31 -0
- package/lib/parent-components/form-control.component.d.ts +27 -0
- package/lib/parent-components/form.component.d.ts +34 -0
- package/lib/pipes/custom-pipes.module.d.ts +17 -0
- package/lib/pipes/decode-uri.pipe.d.ts +10 -0
- package/lib/pipes/encode-uri.pipe.d.ts +10 -0
- package/lib/pipes/integer-currency.pipe.d.ts +13 -0
- package/lib/pipes/safe-html.pipe.d.ts +13 -0
- package/lib/pipes/safe-resource-url.pipe.d.ts +13 -0
- package/lib/pipes/safe-style.pipe.d.ts +13 -0
- package/lib/pipes/safe-url.pipe.d.ts +13 -0
- package/lib/pipes/to-number.pipe.d.ts +10 -0
- package/lib/pipes/trim.pipe.d.ts +10 -0
- package/lib/pipes/typeof.pipe.d.ts +7 -0
- package/lib/services/viewport.service.d.ts +149 -0
- package/lib/ui/back-to-top/back-to-top.component.d.ts +10 -0
- package/lib/ui/button-with-confirm-dialog/button-response-types.enum.d.ts +4 -0
- package/lib/ui/button-with-confirm-dialog/button-with-confirm-dialog.component.d.ts +19 -0
- 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
- package/lib/ui/checkbox/checkbox.component.d.ts +31 -0
- package/lib/ui/color-input/color-input.component.d.ts +19 -0
- package/lib/ui/dropdown-from-data/dropdown-from-data.component.d.ts +57 -0
- package/lib/ui/enum-radiogroup/enum-radiogroup.component.d.ts +17 -0
- package/lib/ui/file-input/file-input.component.d.ts +89 -0
- package/lib/ui/flyout/flyout.component.d.ts +32 -0
- package/lib/ui/generic-dialog/generic-dialog.component.d.ts +26 -0
- package/lib/ui/icon/icon.component.d.ts +48 -0
- package/lib/ui/icon/iconSize.enum.d.ts +25 -0
- package/lib/ui/image-slider/image-slider.component.d.ts +62 -0
- package/lib/ui/kms-accordion-item/kms-accordion-item.component.d.ts +22 -0
- package/lib/ui/loader/loader.component.d.ts +9 -0
- package/lib/ui/map/map.component.d.ts +71 -0
- package/lib/ui/radiobutton/radiobutton.component.d.ts +27 -0
- package/lib/ui/salutation-dropdown/salutation-dropdown.component.d.ts +17 -0
- package/lib/ui/salutation-radiogroup/salutation-radiogroup.component.d.ts +15 -0
- package/lib/ui/time-input/time-input.component.d.ts +22 -0
- package/lib/ui/tooltip-icon/tooltip-icon.component.d.ts +13 -0
- package/lib/ui/yes-no-radiogroup/yes-no-radiogroup.component.d.ts +27 -0
- package/package.json +17 -3
- package/{src/public-api.ts → public-api.d.ts} +20 -28
- package/src/lib/ui/back-to-top/back-to-top.component.scss +2 -3
- package/src/lib/ui/icon/icon.component.scss +2 -36
- package/src/lib/ui/image-slider/image-slider.component.scss +209 -202
- package/src/styles/animations.scss +47 -0
- package/src/styles/styles.scss +1 -0
- package/jest.config.js +0 -27
- package/ng-package.json +0 -13
- package/src/lib/directives/directives.module.ts +0 -28
- package/src/lib/directives/mousewheel.directive.ts +0 -43
- package/src/lib/directives/sum-of-height.directive.ts +0 -73
- package/src/lib/directives/swipe.directive.ts +0 -193
- package/src/lib/directives/tooltip.directive.spec.ts.BAK +0 -8
- package/src/lib/directives/tooltip.directive.ts +0 -121
- package/src/lib/kms-ngx-ui-presentational.component.spec.ts +0 -25
- package/src/lib/kms-ngx-ui-presentational.component.ts +0 -20
- package/src/lib/kms-ngx-ui-presentational.module.ts +0 -124
- package/src/lib/kms-ngx-ui-presentational.service.spec.ts +0 -16
- package/src/lib/kms-ngx-ui-presentational.service.ts +0 -9
- package/src/lib/models/address.model.ts +0 -16
- package/src/lib/models/iconSize.enum.ts +0 -17
- package/src/lib/models/image-snippet.model.ts +0 -17
- package/src/lib/models/is-value.function.ts +0 -20
- package/src/lib/models/salutation.enum.ts +0 -6
- package/src/lib/parent-components/actions.component.ts +0 -43
- package/src/lib/parent-components/form-control.component.ts +0 -77
- package/src/lib/parent-components/form.component.ts +0 -79
- package/src/lib/pipes/custom-pipes.module.ts +0 -48
- package/src/lib/pipes/decode-uri.pipe.ts +0 -15
- package/src/lib/pipes/encode-uri.pipe.ts +0 -14
- package/src/lib/pipes/integer-currency.pipe.ts +0 -22
- package/src/lib/pipes/prettyjson.pipe.ts +0 -104
- package/src/lib/pipes/safe-html.pipe.ts +0 -17
- package/src/lib/pipes/safe-resource-url.pipe.ts +0 -17
- package/src/lib/pipes/safe-style.pipe.ts +0 -17
- package/src/lib/pipes/safe-url.pipe.ts +0 -17
- package/src/lib/pipes/to-number.pipe.ts +0 -19
- package/src/lib/pipes/trim.pipe.ts +0 -16
- package/src/lib/pipes/typeof.pipe.ts +0 -10
- package/src/lib/services/viewport.service.ts +0 -241
- package/src/lib/ui/back-to-top/back-to-top.component.html +0 -7
- package/src/lib/ui/back-to-top/back-to-top.component.ts +0 -43
- package/src/lib/ui/back-to-top/back-to-top.stories.ts +0 -19
- package/src/lib/ui/button-with-confirm-dialog/button-response-types.enum.ts +0 -4
- package/src/lib/ui/button-with-confirm-dialog/button-with-confirm-dialog.component.html +0 -8
- package/src/lib/ui/button-with-confirm-dialog/button-with-confirm-dialog.component.spec.ts.BAK +0 -25
- package/src/lib/ui/button-with-confirm-dialog/button-with-confirm-dialog.component.ts +0 -55
- package/src/lib/ui/button-with-confirm-dialog/button-with-confirm-dialog.stories.ts +0 -21
- package/src/lib/ui/checkbox/checkbox.component.html +0 -15
- package/src/lib/ui/checkbox/checkbox.component.stories.ts +0 -19
- package/src/lib/ui/checkbox/checkbox.component.ts +0 -75
- package/src/lib/ui/color-input/color-input.component.html +0 -11
- package/src/lib/ui/color-input/color-input.component.spec.ts +0 -44
- package/src/lib/ui/color-input/color-input.component.ts +0 -67
- package/src/lib/ui/dropdown-from-data/dropdown-from-data.component.html +0 -23
- package/src/lib/ui/dropdown-from-data/dropdown-from-data.component.ts +0 -174
- package/src/lib/ui/enum-radiogroup/enum-radiogroup.component.html +0 -6
- package/src/lib/ui/enum-radiogroup/enum-radiogroup.component.spec.ts.BAK +0 -25
- package/src/lib/ui/enum-radiogroup/enum-radiogroup.component.ts +0 -43
- package/src/lib/ui/file-input/file-input.component.html +0 -45
- package/src/lib/ui/file-input/file-input.component.spec.ts.BAK +0 -25
- package/src/lib/ui/file-input/file-input.component.ts +0 -236
- package/src/lib/ui/flyout/flyout.component.html +0 -35
- package/src/lib/ui/flyout/flyout.component.spec.ts.BAK +0 -30
- package/src/lib/ui/flyout/flyout.component.ts +0 -95
- package/src/lib/ui/generic-dialog/generic-dialog.component.html +0 -24
- package/src/lib/ui/generic-dialog/generic-dialog.component.spec.ts.BAK +0 -43
- package/src/lib/ui/generic-dialog/generic-dialog.component.ts +0 -54
- package/src/lib/ui/icon/icon.component.html +0 -22
- package/src/lib/ui/icon/icon.component.spec.ts.BAK +0 -31
- package/src/lib/ui/icon/icon.component.ts +0 -67
- package/src/lib/ui/icon/iconSize.enum.ts +0 -17
- package/src/lib/ui/image-slider/image-slider.component.html +0 -54
- package/src/lib/ui/image-slider/image-slider.component.ts +0 -205
- package/src/lib/ui/kms-accordion-item/kms-accordion-item.component.html +0 -22
- package/src/lib/ui/kms-accordion-item/kms-accordion-item.component.spec.ts +0 -61
- package/src/lib/ui/kms-accordion-item/kms-accordion-item.component.ts +0 -32
- package/src/lib/ui/loader/loader.component.html +0 -3
- package/src/lib/ui/loader/loader.component.spec.ts.BAK +0 -26
- package/src/lib/ui/loader/loader.component.ts +0 -16
- package/src/lib/ui/map/map.component.html +0 -18
- package/src/lib/ui/map/map.component.spec.ts.BAK +0 -31
- package/src/lib/ui/map/map.component.ts +0 -138
- package/src/lib/ui/radiobutton/radiobutton.component.html +0 -42
- package/src/lib/ui/radiobutton/radiobutton.component.ts +0 -71
- package/src/lib/ui/salutation-dropdown/salutation-dropdown.component.html +0 -9
- package/src/lib/ui/salutation-dropdown/salutation-dropdown.component.spec.ts.BAK +0 -26
- package/src/lib/ui/salutation-dropdown/salutation-dropdown.component.ts +0 -48
- package/src/lib/ui/salutation-radiogroup/salutation-radiogroup.component.html +0 -13
- package/src/lib/ui/salutation-radiogroup/salutation-radiogroup.component.spec.ts.BAK +0 -25
- package/src/lib/ui/salutation-radiogroup/salutation-radiogroup.component.ts +0 -41
- package/src/lib/ui/time-input/time-input.component.html +0 -5
- package/src/lib/ui/time-input/time-input.component.spec.ts +0 -28
- package/src/lib/ui/time-input/time-input.component.ts +0 -88
- package/src/lib/ui/tooltip/tooltip.component.html +0 -1
- package/src/lib/ui/tooltip/tooltip.component.scss +0 -27
- package/src/lib/ui/tooltip/tooltip.component.spec.ts.BAK +0 -26
- package/src/lib/ui/tooltip/tooltip.component.ts +0 -10
- package/src/lib/ui/tooltip-icon/tooltip-icon.component.html +0 -11
- package/src/lib/ui/tooltip-icon/tooltip-icon.component.spec.ts.BAK +0 -28
- package/src/lib/ui/tooltip-icon/tooltip-icon.component.ts +0 -19
- package/src/lib/ui/yes-no-radiogroup/yes-no-radiogroup.component.html +0 -7
- package/src/lib/ui/yes-no-radiogroup/yes-no-radiogroup.component.spec.ts.BAK +0 -25
- package/src/lib/ui/yes-no-radiogroup/yes-no-radiogroup.component.ts +0 -79
- package/src/test-setup.ts +0 -2
- package/tsconfig.lib.json +0 -26
- package/tsconfig.lib.prod.json +0 -10
- package/tsconfig.spec.json +0 -17
- package/tslint.json +0 -17
- /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=
|