@skyux/core 5.7.1 → 6.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/documentation.json +4 -4
- package/esm2020/index.mjs +60 -0
- package/esm2020/lib/modules/adapter-service/adapter.module.mjs +16 -0
- package/esm2020/lib/modules/adapter-service/adapter.service.mjs +218 -0
- package/esm2020/lib/modules/adapter-service/focusable-children-options.mjs +2 -0
- package/esm2020/lib/modules/affix/affix-auto-fit-context.mjs +12 -0
- package/esm2020/lib/modules/affix/affix-config.mjs +2 -0
- package/esm2020/lib/modules/affix/affix-horizontal-alignment.mjs +2 -0
- package/esm2020/lib/modules/affix/affix-offset-change.mjs +2 -0
- package/esm2020/lib/modules/affix/affix-offset.mjs +2 -0
- package/esm2020/lib/modules/affix/affix-placement-change.mjs +2 -0
- package/esm2020/lib/modules/affix/affix-placement.mjs +2 -0
- package/esm2020/lib/modules/affix/affix-utils.mjs +18 -0
- package/esm2020/lib/modules/affix/affix-vertical-alignment.mjs +2 -0
- package/esm2020/lib/modules/affix/affix.directive.mjs +100 -0
- package/esm2020/lib/modules/affix/affix.module.mjs +18 -0
- package/esm2020/lib/modules/affix/affix.service.mjs +24 -0
- package/esm2020/lib/modules/affix/affixer.mjs +349 -0
- package/esm2020/lib/modules/affix/dom-utils.mjs +77 -0
- package/esm2020/lib/modules/dock/dock-dom-adapter.service.mjs +80 -0
- package/esm2020/lib/modules/dock/dock-insert-component-config.mjs +2 -0
- package/esm2020/lib/modules/dock/dock-item-config.mjs +2 -0
- package/esm2020/lib/modules/dock/dock-item-reference.mjs +2 -0
- package/esm2020/lib/modules/dock/dock-item.mjs +29 -0
- package/esm2020/lib/modules/dock/dock-location.mjs +19 -0
- package/esm2020/lib/modules/dock/dock-options.mjs +2 -0
- package/esm2020/lib/modules/dock/dock.component.mjs +88 -0
- package/esm2020/lib/modules/dock/dock.module.mjs +19 -0
- package/esm2020/lib/modules/dock/dock.service.mjs +95 -0
- package/esm2020/lib/modules/dock/sort-by-stack-order.mjs +13 -0
- package/esm2020/lib/modules/dynamic-component/dynamic-component-location.mjs +27 -0
- package/esm2020/lib/modules/dynamic-component/dynamic-component-options.mjs +2 -0
- package/esm2020/lib/modules/dynamic-component/dynamic-component.module.mjs +17 -0
- package/esm2020/lib/modules/dynamic-component/dynamic-component.service.mjs +83 -0
- package/esm2020/lib/modules/format/app-format.mjs +18 -0
- package/esm2020/lib/modules/id/id.directive.mjs +34 -0
- package/esm2020/lib/modules/id/id.module.mjs +16 -0
- package/esm2020/lib/modules/log/log.module.mjs +16 -0
- package/esm2020/lib/modules/log/log.service.mjs +23 -0
- package/esm2020/lib/modules/media-query/media-breakpoints.mjs +20 -0
- package/esm2020/lib/modules/media-query/media-query-listener.mjs +2 -0
- package/esm2020/lib/modules/media-query/media-query.module.mjs +16 -0
- package/esm2020/lib/modules/media-query/media-query.service.mjs +121 -0
- package/esm2020/lib/modules/mutation/mutation-observer-service.mjs +16 -0
- package/esm2020/lib/modules/numeric/numeric-symbol.mjs +2 -0
- package/esm2020/lib/modules/numeric/numeric.module.mjs +20 -0
- package/esm2020/lib/modules/numeric/numeric.options.mjs +41 -0
- package/esm2020/lib/modules/numeric/numeric.pipe.mjs +82 -0
- package/esm2020/lib/modules/numeric/numeric.service.mjs +188 -0
- package/esm2020/lib/modules/overlay/overlay-adapter.service.mjs +41 -0
- package/esm2020/lib/modules/overlay/overlay-config.mjs +2 -0
- package/esm2020/lib/modules/overlay/overlay-context.mjs +10 -0
- package/esm2020/lib/modules/overlay/overlay-instance.mjs +55 -0
- package/esm2020/lib/modules/overlay/overlay.component.mjs +149 -0
- package/esm2020/lib/modules/overlay/overlay.module.mjs +17 -0
- package/esm2020/lib/modules/overlay/overlay.service.mjs +120 -0
- package/esm2020/lib/modules/percent-pipe/percent-pipe.module.mjs +20 -0
- package/esm2020/lib/modules/percent-pipe/percent.pipe.mjs +48 -0
- package/esm2020/lib/modules/scrollable-host/scrollable-host.service.mjs +184 -0
- package/esm2020/lib/modules/shared/number-format/number-format-utility.mjs +72 -0
- package/esm2020/lib/modules/shared/sky-core-resources.module.mjs +50 -0
- package/esm2020/lib/modules/title/set-title-args.mjs +2 -0
- package/esm2020/lib/modules/title/title.service.mjs +31 -0
- package/esm2020/lib/modules/ui-config/ui-config.service.mjs +21 -0
- package/esm2020/lib/modules/viewkeeper/viewkeeper-boundary-info.mjs +2 -0
- package/esm2020/lib/modules/viewkeeper/viewkeeper-fixed-styles.mjs +2 -0
- package/esm2020/lib/modules/viewkeeper/viewkeeper-host-options.mjs +10 -0
- package/esm2020/lib/modules/viewkeeper/viewkeeper-offset.mjs +2 -0
- package/esm2020/lib/modules/viewkeeper/viewkeeper-options.mjs +2 -0
- package/esm2020/lib/modules/viewkeeper/viewkeeper.directive.mjs +116 -0
- package/esm2020/lib/modules/viewkeeper/viewkeeper.mjs +251 -0
- package/esm2020/lib/modules/viewkeeper/viewkeeper.module.mjs +16 -0
- package/esm2020/lib/modules/viewkeeper/viewkeeper.service.mjs +39 -0
- package/esm2020/lib/modules/window/window-ref.mjs +30 -0
- package/esm2020/skyux-core.mjs +5 -0
- package/esm2020/testing/mock-media-query.service.mjs +41 -0
- package/esm2020/testing/mock-ui-config.service.mjs +59 -0
- package/esm2020/testing/public-api.mjs +3 -0
- package/esm2020/testing/skyux-core-testing.mjs +5 -0
- package/fesm2015/{skyux-core-testing.js → skyux-core-testing.mjs} +7 -7
- package/fesm2015/skyux-core-testing.mjs.map +1 -0
- package/fesm2015/skyux-core.mjs +3043 -0
- package/fesm2015/skyux-core.mjs.map +1 -0
- package/fesm2020/skyux-core-testing.mjs +103 -0
- package/fesm2020/skyux-core-testing.mjs.map +1 -0
- package/{fesm2015/skyux-core.js → fesm2020/skyux-core.mjs} +134 -150
- package/fesm2020/skyux-core.mjs.map +1 -0
- package/package.json +32 -11
- package/testing/package.json +5 -5
- package/bundles/skyux-core-testing.umd.js +0 -459
- package/bundles/skyux-core.umd.js +0 -3648
- package/esm2015/index.js +0 -60
- package/esm2015/index.js.map +0 -1
- package/esm2015/lib/modules/adapter-service/adapter.module.js +0 -16
- package/esm2015/lib/modules/adapter-service/adapter.module.js.map +0 -1
- package/esm2015/lib/modules/adapter-service/adapter.service.js +0 -218
- package/esm2015/lib/modules/adapter-service/adapter.service.js.map +0 -1
- package/esm2015/lib/modules/adapter-service/focusable-children-options.js +0 -2
- package/esm2015/lib/modules/adapter-service/focusable-children-options.js.map +0 -1
- package/esm2015/lib/modules/affix/affix-auto-fit-context.js +0 -12
- package/esm2015/lib/modules/affix/affix-auto-fit-context.js.map +0 -1
- package/esm2015/lib/modules/affix/affix-config.js +0 -2
- package/esm2015/lib/modules/affix/affix-config.js.map +0 -1
- package/esm2015/lib/modules/affix/affix-horizontal-alignment.js +0 -2
- package/esm2015/lib/modules/affix/affix-horizontal-alignment.js.map +0 -1
- package/esm2015/lib/modules/affix/affix-offset-change.js +0 -2
- package/esm2015/lib/modules/affix/affix-offset-change.js.map +0 -1
- package/esm2015/lib/modules/affix/affix-offset.js +0 -2
- package/esm2015/lib/modules/affix/affix-offset.js.map +0 -1
- package/esm2015/lib/modules/affix/affix-placement-change.js +0 -2
- package/esm2015/lib/modules/affix/affix-placement-change.js.map +0 -1
- package/esm2015/lib/modules/affix/affix-placement.js +0 -2
- package/esm2015/lib/modules/affix/affix-placement.js.map +0 -1
- package/esm2015/lib/modules/affix/affix-utils.js +0 -18
- package/esm2015/lib/modules/affix/affix-utils.js.map +0 -1
- package/esm2015/lib/modules/affix/affix-vertical-alignment.js +0 -2
- package/esm2015/lib/modules/affix/affix-vertical-alignment.js.map +0 -1
- package/esm2015/lib/modules/affix/affix.directive.js +0 -100
- package/esm2015/lib/modules/affix/affix.directive.js.map +0 -1
- package/esm2015/lib/modules/affix/affix.module.js +0 -18
- package/esm2015/lib/modules/affix/affix.module.js.map +0 -1
- package/esm2015/lib/modules/affix/affix.service.js +0 -24
- package/esm2015/lib/modules/affix/affix.service.js.map +0 -1
- package/esm2015/lib/modules/affix/affixer.js +0 -349
- package/esm2015/lib/modules/affix/affixer.js.map +0 -1
- package/esm2015/lib/modules/affix/dom-utils.js +0 -77
- package/esm2015/lib/modules/affix/dom-utils.js.map +0 -1
- package/esm2015/lib/modules/dock/dock-dom-adapter.service.js +0 -80
- package/esm2015/lib/modules/dock/dock-dom-adapter.service.js.map +0 -1
- package/esm2015/lib/modules/dock/dock-insert-component-config.js +0 -2
- package/esm2015/lib/modules/dock/dock-insert-component-config.js.map +0 -1
- package/esm2015/lib/modules/dock/dock-item-config.js +0 -2
- package/esm2015/lib/modules/dock/dock-item-config.js.map +0 -1
- package/esm2015/lib/modules/dock/dock-item-reference.js +0 -2
- package/esm2015/lib/modules/dock/dock-item-reference.js.map +0 -1
- package/esm2015/lib/modules/dock/dock-item.js +0 -29
- package/esm2015/lib/modules/dock/dock-item.js.map +0 -1
- package/esm2015/lib/modules/dock/dock-location.js +0 -19
- package/esm2015/lib/modules/dock/dock-location.js.map +0 -1
- package/esm2015/lib/modules/dock/dock-options.js +0 -2
- package/esm2015/lib/modules/dock/dock-options.js.map +0 -1
- package/esm2015/lib/modules/dock/dock.component.js +0 -95
- package/esm2015/lib/modules/dock/dock.component.js.map +0 -1
- package/esm2015/lib/modules/dock/dock.module.js +0 -20
- package/esm2015/lib/modules/dock/dock.module.js.map +0 -1
- package/esm2015/lib/modules/dock/dock.service.js +0 -95
- package/esm2015/lib/modules/dock/dock.service.js.map +0 -1
- package/esm2015/lib/modules/dock/sort-by-stack-order.js +0 -13
- package/esm2015/lib/modules/dock/sort-by-stack-order.js.map +0 -1
- package/esm2015/lib/modules/dynamic-component/dynamic-component-location.js +0 -27
- package/esm2015/lib/modules/dynamic-component/dynamic-component-location.js.map +0 -1
- package/esm2015/lib/modules/dynamic-component/dynamic-component-options.js +0 -2
- package/esm2015/lib/modules/dynamic-component/dynamic-component-options.js.map +0 -1
- package/esm2015/lib/modules/dynamic-component/dynamic-component.module.js +0 -17
- package/esm2015/lib/modules/dynamic-component/dynamic-component.module.js.map +0 -1
- package/esm2015/lib/modules/dynamic-component/dynamic-component.service.js +0 -83
- package/esm2015/lib/modules/dynamic-component/dynamic-component.service.js.map +0 -1
- package/esm2015/lib/modules/format/app-format.js +0 -18
- package/esm2015/lib/modules/format/app-format.js.map +0 -1
- package/esm2015/lib/modules/id/id.directive.js +0 -34
- package/esm2015/lib/modules/id/id.directive.js.map +0 -1
- package/esm2015/lib/modules/id/id.module.js +0 -16
- package/esm2015/lib/modules/id/id.module.js.map +0 -1
- package/esm2015/lib/modules/log/log.module.js +0 -16
- package/esm2015/lib/modules/log/log.module.js.map +0 -1
- package/esm2015/lib/modules/log/log.service.js +0 -23
- package/esm2015/lib/modules/log/log.service.js.map +0 -1
- package/esm2015/lib/modules/media-query/media-breakpoints.js +0 -20
- package/esm2015/lib/modules/media-query/media-breakpoints.js.map +0 -1
- package/esm2015/lib/modules/media-query/media-query-listener.js +0 -2
- package/esm2015/lib/modules/media-query/media-query-listener.js.map +0 -1
- package/esm2015/lib/modules/media-query/media-query.module.js +0 -16
- package/esm2015/lib/modules/media-query/media-query.module.js.map +0 -1
- package/esm2015/lib/modules/media-query/media-query.service.js +0 -121
- package/esm2015/lib/modules/media-query/media-query.service.js.map +0 -1
- package/esm2015/lib/modules/mutation/mutation-observer-service.js +0 -16
- package/esm2015/lib/modules/mutation/mutation-observer-service.js.map +0 -1
- package/esm2015/lib/modules/numeric/numeric-symbol.js +0 -2
- package/esm2015/lib/modules/numeric/numeric-symbol.js.map +0 -1
- package/esm2015/lib/modules/numeric/numeric.module.js +0 -20
- package/esm2015/lib/modules/numeric/numeric.module.js.map +0 -1
- package/esm2015/lib/modules/numeric/numeric.options.js +0 -41
- package/esm2015/lib/modules/numeric/numeric.options.js.map +0 -1
- package/esm2015/lib/modules/numeric/numeric.pipe.js +0 -83
- package/esm2015/lib/modules/numeric/numeric.pipe.js.map +0 -1
- package/esm2015/lib/modules/numeric/numeric.service.js +0 -189
- package/esm2015/lib/modules/numeric/numeric.service.js.map +0 -1
- package/esm2015/lib/modules/overlay/overlay-adapter.service.js +0 -41
- package/esm2015/lib/modules/overlay/overlay-adapter.service.js.map +0 -1
- package/esm2015/lib/modules/overlay/overlay-config.js +0 -2
- package/esm2015/lib/modules/overlay/overlay-config.js.map +0 -1
- package/esm2015/lib/modules/overlay/overlay-context.js +0 -10
- package/esm2015/lib/modules/overlay/overlay-context.js.map +0 -1
- package/esm2015/lib/modules/overlay/overlay-instance.js +0 -55
- package/esm2015/lib/modules/overlay/overlay-instance.js.map +0 -1
- package/esm2015/lib/modules/overlay/overlay.component.js +0 -154
- package/esm2015/lib/modules/overlay/overlay.component.js.map +0 -1
- package/esm2015/lib/modules/overlay/overlay.module.js +0 -18
- package/esm2015/lib/modules/overlay/overlay.module.js.map +0 -1
- package/esm2015/lib/modules/overlay/overlay.service.js +0 -120
- package/esm2015/lib/modules/overlay/overlay.service.js.map +0 -1
- package/esm2015/lib/modules/percent-pipe/percent-pipe.module.js +0 -20
- package/esm2015/lib/modules/percent-pipe/percent-pipe.module.js.map +0 -1
- package/esm2015/lib/modules/percent-pipe/percent.pipe.js +0 -48
- package/esm2015/lib/modules/percent-pipe/percent.pipe.js.map +0 -1
- package/esm2015/lib/modules/scrollable-host/scrollable-host.service.js +0 -184
- package/esm2015/lib/modules/scrollable-host/scrollable-host.service.js.map +0 -1
- package/esm2015/lib/modules/shared/number-format/number-format-utility.js +0 -72
- package/esm2015/lib/modules/shared/number-format/number-format-utility.js.map +0 -1
- package/esm2015/lib/modules/shared/sky-core-resources.module.js +0 -50
- package/esm2015/lib/modules/shared/sky-core-resources.module.js.map +0 -1
- package/esm2015/lib/modules/title/set-title-args.js +0 -2
- package/esm2015/lib/modules/title/set-title-args.js.map +0 -1
- package/esm2015/lib/modules/title/title.service.js +0 -31
- package/esm2015/lib/modules/title/title.service.js.map +0 -1
- package/esm2015/lib/modules/ui-config/ui-config.service.js +0 -21
- package/esm2015/lib/modules/ui-config/ui-config.service.js.map +0 -1
- package/esm2015/lib/modules/viewkeeper/viewkeeper-boundary-info.js +0 -2
- package/esm2015/lib/modules/viewkeeper/viewkeeper-boundary-info.js.map +0 -1
- package/esm2015/lib/modules/viewkeeper/viewkeeper-fixed-styles.js +0 -2
- package/esm2015/lib/modules/viewkeeper/viewkeeper-fixed-styles.js.map +0 -1
- package/esm2015/lib/modules/viewkeeper/viewkeeper-host-options.js +0 -10
- package/esm2015/lib/modules/viewkeeper/viewkeeper-host-options.js.map +0 -1
- package/esm2015/lib/modules/viewkeeper/viewkeeper-offset.js +0 -2
- package/esm2015/lib/modules/viewkeeper/viewkeeper-offset.js.map +0 -1
- package/esm2015/lib/modules/viewkeeper/viewkeeper-options.js +0 -2
- package/esm2015/lib/modules/viewkeeper/viewkeeper-options.js.map +0 -1
- package/esm2015/lib/modules/viewkeeper/viewkeeper.directive.js +0 -116
- package/esm2015/lib/modules/viewkeeper/viewkeeper.directive.js.map +0 -1
- package/esm2015/lib/modules/viewkeeper/viewkeeper.js +0 -251
- package/esm2015/lib/modules/viewkeeper/viewkeeper.js.map +0 -1
- package/esm2015/lib/modules/viewkeeper/viewkeeper.module.js +0 -16
- package/esm2015/lib/modules/viewkeeper/viewkeeper.module.js.map +0 -1
- package/esm2015/lib/modules/viewkeeper/viewkeeper.service.js +0 -39
- package/esm2015/lib/modules/viewkeeper/viewkeeper.service.js.map +0 -1
- package/esm2015/lib/modules/window/window-ref.js +0 -30
- package/esm2015/lib/modules/window/window-ref.js.map +0 -1
- package/esm2015/skyux-core.js +0 -5
- package/esm2015/skyux-core.js.map +0 -1
- package/esm2015/testing/mock-media-query.service.js +0 -41
- package/esm2015/testing/mock-media-query.service.js.map +0 -1
- package/esm2015/testing/mock-ui-config.service.js +0 -59
- package/esm2015/testing/mock-ui-config.service.js.map +0 -1
- package/esm2015/testing/public-api.js +0 -3
- package/esm2015/testing/public-api.js.map +0 -1
- package/esm2015/testing/skyux-core-testing.js +0 -5
- package/esm2015/testing/skyux-core-testing.js.map +0 -1
- package/fesm2015/skyux-core-testing.js.map +0 -1
- package/fesm2015/skyux-core.js.map +0 -1
@@ -0,0 +1,24 @@
|
|
1
|
+
import { Injectable, RendererFactory2, } from '@angular/core';
|
2
|
+
import { SkyAffixer } from './affixer';
|
3
|
+
import * as i0 from "@angular/core";
|
4
|
+
export class SkyAffixService {
|
5
|
+
constructor(rendererFactory) {
|
6
|
+
this.renderer = rendererFactory.createRenderer(undefined, undefined);
|
7
|
+
}
|
8
|
+
/**
|
9
|
+
* Creates an instance of [[SkyAffixer]].
|
10
|
+
* @param affixed The element to be affixed.
|
11
|
+
*/
|
12
|
+
createAffixer(affixed) {
|
13
|
+
return new SkyAffixer(affixed.nativeElement, this.renderer);
|
14
|
+
}
|
15
|
+
}
|
16
|
+
SkyAffixService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyAffixService, deps: [{ token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable });
|
17
|
+
SkyAffixService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyAffixService, providedIn: 'root' });
|
18
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyAffixService, decorators: [{
|
19
|
+
type: Injectable,
|
20
|
+
args: [{
|
21
|
+
providedIn: 'root',
|
22
|
+
}]
|
23
|
+
}], ctorParameters: function () { return [{ type: i0.RendererFactory2 }]; } });
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWZmaXguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jb3JlL3NyYy9saWIvbW9kdWxlcy9hZmZpeC9hZmZpeC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxVQUFVLEVBRVYsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBS3ZDLE1BQU0sT0FBTyxlQUFlO0lBRzFCLFlBQVksZUFBaUM7UUFDM0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxlQUFlLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksYUFBYSxDQUFDLE9BQW1CO1FBQ3RDLE9BQU8sSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDOUQsQ0FBQzs7NEdBYlUsZUFBZTtnSEFBZixlQUFlLGNBRmQsTUFBTTsyRkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdGFibGUsXG4gIFJlbmRlcmVyMixcbiAgUmVuZGVyZXJGYWN0b3J5Mixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNreUFmZml4ZXIgfSBmcm9tICcuL2FmZml4ZXInO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2t5QWZmaXhTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyO1xuXG4gIGNvbnN0cnVjdG9yKHJlbmRlcmVyRmFjdG9yeTogUmVuZGVyZXJGYWN0b3J5Mikge1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIodW5kZWZpbmVkLCB1bmRlZmluZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgW1tTa3lBZmZpeGVyXV0uXG4gICAqIEBwYXJhbSBhZmZpeGVkIFRoZSBlbGVtZW50IHRvIGJlIGFmZml4ZWQuXG4gICAqL1xuICBwdWJsaWMgY3JlYXRlQWZmaXhlcihhZmZpeGVkOiBFbGVtZW50UmVmKTogU2t5QWZmaXhlciB7XG4gICAgcmV0dXJuIG5ldyBTa3lBZmZpeGVyKGFmZml4ZWQubmF0aXZlRWxlbWVudCwgdGhpcy5yZW5kZXJlcik7XG4gIH1cbn1cbiJdfQ==
|
@@ -0,0 +1,349 @@
|
|
1
|
+
import { Subject, fromEvent } from 'rxjs';
|
2
|
+
import { SkyAffixAutoFitContext } from './affix-auto-fit-context';
|
3
|
+
import { getInversePlacement, getNextPlacement } from './affix-utils';
|
4
|
+
import { getElementOffset, getOverflowParents, isOffsetFullyVisibleWithinParent, isOffsetPartiallyVisibleWithinParent, } from './dom-utils';
|
5
|
+
const DEFAULT_AFFIX_CONFIG = {
|
6
|
+
autoFitContext: SkyAffixAutoFitContext.OverflowParent,
|
7
|
+
enableAutoFit: false,
|
8
|
+
horizontalAlignment: 'center',
|
9
|
+
isSticky: false,
|
10
|
+
placement: 'above',
|
11
|
+
};
|
12
|
+
export class SkyAffixer {
|
13
|
+
constructor(affixedElement, renderer) {
|
14
|
+
this.affixedElement = affixedElement;
|
15
|
+
this.renderer = renderer;
|
16
|
+
this._offsetChange = new Subject();
|
17
|
+
this._overflowScroll = new Subject();
|
18
|
+
this._placementChange = new Subject();
|
19
|
+
}
|
20
|
+
/**
|
21
|
+
* Fires when the affixed element's offset changes.
|
22
|
+
*/
|
23
|
+
get offsetChange() {
|
24
|
+
return this._offsetChange.asObservable();
|
25
|
+
}
|
26
|
+
/**
|
27
|
+
* Fires when the base element's nearest overflow parent is scrolling. This is useful if you need
|
28
|
+
* to perform an additional action during the scroll event but don't want to generate another
|
29
|
+
* event listener.
|
30
|
+
*/
|
31
|
+
get overflowScroll() {
|
32
|
+
return this._overflowScroll.asObservable();
|
33
|
+
}
|
34
|
+
/**
|
35
|
+
* Fires when the placement value changes. A `null` value indicates that a suitable
|
36
|
+
* placement could not be found.
|
37
|
+
*/
|
38
|
+
get placementChange() {
|
39
|
+
return this._placementChange.asObservable();
|
40
|
+
}
|
41
|
+
get config() {
|
42
|
+
return this._config;
|
43
|
+
}
|
44
|
+
set config(value) {
|
45
|
+
const merged = { ...DEFAULT_AFFIX_CONFIG, ...value };
|
46
|
+
// Make sure none of the values are undefined.
|
47
|
+
Object.keys(merged).forEach((k) => {
|
48
|
+
if (merged[k] === undefined) {
|
49
|
+
merged[k] = DEFAULT_AFFIX_CONFIG[k];
|
50
|
+
}
|
51
|
+
});
|
52
|
+
this._config = merged;
|
53
|
+
}
|
54
|
+
/**
|
55
|
+
* Affixes an element to a base element.
|
56
|
+
* @param baseElement The base element.
|
57
|
+
* @param config Configuration for the affix action.
|
58
|
+
*/
|
59
|
+
affixTo(baseElement, config) {
|
60
|
+
this.reset();
|
61
|
+
this.config = config;
|
62
|
+
this.baseElement = baseElement;
|
63
|
+
this.overflowParents = getOverflowParents(baseElement);
|
64
|
+
this.affix();
|
65
|
+
if (this.config.isSticky) {
|
66
|
+
this.addScrollListeners();
|
67
|
+
this.addResizeListener();
|
68
|
+
}
|
69
|
+
}
|
70
|
+
/**
|
71
|
+
* Re-runs the affix calculation.
|
72
|
+
*/
|
73
|
+
reaffix() {
|
74
|
+
// Reset current placement to preferred placement.
|
75
|
+
this.currentPlacement = this.config.placement;
|
76
|
+
this.affix();
|
77
|
+
}
|
78
|
+
/**
|
79
|
+
* Destroys the affixer.
|
80
|
+
*/
|
81
|
+
destroy() {
|
82
|
+
this.reset();
|
83
|
+
this._placementChange.complete();
|
84
|
+
this._offsetChange.complete();
|
85
|
+
this._overflowScroll.complete();
|
86
|
+
this._offsetChange =
|
87
|
+
this._placementChange =
|
88
|
+
this._overflowScroll =
|
89
|
+
undefined;
|
90
|
+
}
|
91
|
+
affix() {
|
92
|
+
this.baseRect = this.baseElement.getBoundingClientRect();
|
93
|
+
this.affixedRect = this.affixedElement.getBoundingClientRect();
|
94
|
+
const offset = this.getOffset();
|
95
|
+
if (this.isNewOffset(offset)) {
|
96
|
+
this.renderer.setStyle(this.affixedElement, 'top', `${offset.top}px`);
|
97
|
+
this.renderer.setStyle(this.affixedElement, 'left', `${offset.left}px`);
|
98
|
+
this._offsetChange.next({ offset });
|
99
|
+
}
|
100
|
+
}
|
101
|
+
getOffset() {
|
102
|
+
const parent = this.getAutoFitContextParent();
|
103
|
+
const maxAttempts = 4;
|
104
|
+
let attempts = 0;
|
105
|
+
let isAffixedElementFullyVisible = false;
|
106
|
+
let offset;
|
107
|
+
let placement = this.config.placement;
|
108
|
+
do {
|
109
|
+
offset = this.getPreferredOffset(placement);
|
110
|
+
isAffixedElementFullyVisible = isOffsetFullyVisibleWithinParent(parent, offset, this.config.autoFitOverflowOffset);
|
111
|
+
if (!this.config.enableAutoFit) {
|
112
|
+
break;
|
113
|
+
}
|
114
|
+
if (!isAffixedElementFullyVisible) {
|
115
|
+
placement =
|
116
|
+
attempts % 2 === 0
|
117
|
+
? getInversePlacement(placement)
|
118
|
+
: getNextPlacement(placement);
|
119
|
+
}
|
120
|
+
attempts++;
|
121
|
+
} while (!isAffixedElementFullyVisible && attempts < maxAttempts);
|
122
|
+
if (isAffixedElementFullyVisible) {
|
123
|
+
if (this.isBaseElementVisible()) {
|
124
|
+
this.notifyPlacementChange(placement);
|
125
|
+
}
|
126
|
+
else {
|
127
|
+
/* tslint:disable-next-line:no-null-keyword */
|
128
|
+
this.notifyPlacementChange(null);
|
129
|
+
}
|
130
|
+
return offset;
|
131
|
+
}
|
132
|
+
if (this.config.enableAutoFit) {
|
133
|
+
/* tslint:disable-next-line:no-null-keyword */
|
134
|
+
this.notifyPlacementChange(null);
|
135
|
+
}
|
136
|
+
// No suitable placement was found, so revert to preferred placement.
|
137
|
+
return this.getPreferredOffset(this.config.placement);
|
138
|
+
}
|
139
|
+
getPreferredOffset(placement) {
|
140
|
+
const affixedRect = this.affixedRect;
|
141
|
+
const baseRect = this.baseRect;
|
142
|
+
const horizontalAlignment = this.config.horizontalAlignment;
|
143
|
+
const verticalAlignment = this.config.verticalAlignment;
|
144
|
+
const enableAutoFit = this.config.enableAutoFit;
|
145
|
+
let top;
|
146
|
+
let left;
|
147
|
+
if (placement === 'above' || placement === 'below') {
|
148
|
+
if (placement === 'above') {
|
149
|
+
top = baseRect.top - affixedRect.height;
|
150
|
+
switch (verticalAlignment) {
|
151
|
+
case 'top':
|
152
|
+
top = top + affixedRect.height;
|
153
|
+
break;
|
154
|
+
case 'middle':
|
155
|
+
top = top + affixedRect.height / 2;
|
156
|
+
break;
|
157
|
+
case 'bottom':
|
158
|
+
default:
|
159
|
+
break;
|
160
|
+
}
|
161
|
+
}
|
162
|
+
else {
|
163
|
+
top = baseRect.bottom;
|
164
|
+
switch (verticalAlignment) {
|
165
|
+
case 'top':
|
166
|
+
default:
|
167
|
+
break;
|
168
|
+
case 'middle':
|
169
|
+
top = top - affixedRect.height / 2;
|
170
|
+
break;
|
171
|
+
case 'bottom':
|
172
|
+
top = top - affixedRect.height;
|
173
|
+
break;
|
174
|
+
}
|
175
|
+
}
|
176
|
+
switch (horizontalAlignment) {
|
177
|
+
case 'left':
|
178
|
+
left = baseRect.left;
|
179
|
+
break;
|
180
|
+
case 'center':
|
181
|
+
default:
|
182
|
+
left = baseRect.left + baseRect.width / 2 - affixedRect.width / 2;
|
183
|
+
break;
|
184
|
+
case 'right':
|
185
|
+
left = baseRect.right - affixedRect.width;
|
186
|
+
break;
|
187
|
+
}
|
188
|
+
}
|
189
|
+
else {
|
190
|
+
if (placement === 'left') {
|
191
|
+
left = baseRect.left - affixedRect.width;
|
192
|
+
}
|
193
|
+
else {
|
194
|
+
left = baseRect.right;
|
195
|
+
}
|
196
|
+
switch (verticalAlignment) {
|
197
|
+
case 'top':
|
198
|
+
top = baseRect.top;
|
199
|
+
break;
|
200
|
+
case 'middle':
|
201
|
+
default:
|
202
|
+
top = baseRect.top + baseRect.height / 2 - affixedRect.height / 2;
|
203
|
+
break;
|
204
|
+
case 'bottom':
|
205
|
+
top = baseRect.bottom - affixedRect.height;
|
206
|
+
break;
|
207
|
+
}
|
208
|
+
}
|
209
|
+
let offset = { left, top };
|
210
|
+
if (enableAutoFit) {
|
211
|
+
offset = this.adjustOffsetToOverflowParent({ ...offset }, placement);
|
212
|
+
}
|
213
|
+
offset.bottom = offset.top + affixedRect.height;
|
214
|
+
offset.right = offset.left + affixedRect.width;
|
215
|
+
return offset;
|
216
|
+
}
|
217
|
+
/**
|
218
|
+
* Slightly adjust the offset to fit within the scroll parent's boundaries if
|
219
|
+
* the affixed element would otherwise be clipped.
|
220
|
+
*/
|
221
|
+
adjustOffsetToOverflowParent(offset, placement) {
|
222
|
+
const parent = this.getAutoFitContextParent();
|
223
|
+
const parentOffset = getElementOffset(parent, this.config.autoFitOverflowOffset);
|
224
|
+
const affixedRect = this.affixedRect;
|
225
|
+
const baseRect = this.baseRect;
|
226
|
+
// A pixel value representing the leeway between the edge of the overflow parent and the edge
|
227
|
+
// of the base element before it dissapears from view.
|
228
|
+
// If the visible portion of the base element is less than this pixel value, the auto-fit
|
229
|
+
// functionality attempts to find another placement.
|
230
|
+
const defaultPixelTolerance = 40;
|
231
|
+
let pixelTolerance;
|
232
|
+
const originalOffsetTop = offset.top;
|
233
|
+
const originalOffsetLeft = offset.left;
|
234
|
+
/* tslint:disable-next-line:switch-default */
|
235
|
+
switch (placement) {
|
236
|
+
case 'above':
|
237
|
+
case 'below':
|
238
|
+
// Keep the affixed element within the overflow parent.
|
239
|
+
if (offset.left < parentOffset.left) {
|
240
|
+
offset.left = parentOffset.left;
|
241
|
+
}
|
242
|
+
else if (offset.left + affixedRect.width > parentOffset.right) {
|
243
|
+
offset.left = parentOffset.right - affixedRect.width;
|
244
|
+
}
|
245
|
+
// Use a smaller pixel tolerance if the base element width is less than the default.
|
246
|
+
pixelTolerance = Math.min(defaultPixelTolerance, baseRect.width);
|
247
|
+
// Make sure the affixed element never detaches from the base element.
|
248
|
+
if (offset.left + pixelTolerance > baseRect.right ||
|
249
|
+
offset.left + affixedRect.width - pixelTolerance < baseRect.left) {
|
250
|
+
offset.left = originalOffsetLeft;
|
251
|
+
}
|
252
|
+
break;
|
253
|
+
case 'left':
|
254
|
+
case 'right':
|
255
|
+
// Keep the affixed element within the overflow parent.
|
256
|
+
if (offset.top < parentOffset.top) {
|
257
|
+
offset.top = parentOffset.top;
|
258
|
+
}
|
259
|
+
else if (offset.top + affixedRect.height > parentOffset.bottom) {
|
260
|
+
offset.top = parentOffset.bottom - affixedRect.height;
|
261
|
+
}
|
262
|
+
// Use a smaller pixel tolerance if the base element height is less than the default.
|
263
|
+
pixelTolerance = Math.min(defaultPixelTolerance, baseRect.height);
|
264
|
+
// Make sure the affixed element never detaches from the base element.
|
265
|
+
if (offset.top + pixelTolerance > baseRect.bottom ||
|
266
|
+
offset.top + affixedRect.height - pixelTolerance < baseRect.top) {
|
267
|
+
offset.top = originalOffsetTop;
|
268
|
+
}
|
269
|
+
break;
|
270
|
+
}
|
271
|
+
return offset;
|
272
|
+
}
|
273
|
+
getImmediateOverflowParent() {
|
274
|
+
return this.overflowParents[this.overflowParents.length - 1];
|
275
|
+
}
|
276
|
+
getAutoFitContextParent() {
|
277
|
+
const bodyElement = this.overflowParents[0];
|
278
|
+
return this.config.autoFitContext === SkyAffixAutoFitContext.OverflowParent
|
279
|
+
? this.getImmediateOverflowParent()
|
280
|
+
: bodyElement;
|
281
|
+
}
|
282
|
+
notifyPlacementChange(placement) {
|
283
|
+
if (this.currentPlacement !== placement) {
|
284
|
+
this.currentPlacement = placement;
|
285
|
+
this._placementChange.next({
|
286
|
+
placement,
|
287
|
+
});
|
288
|
+
}
|
289
|
+
}
|
290
|
+
reset() {
|
291
|
+
this.removeScrollListeners();
|
292
|
+
this.removeResizeListener();
|
293
|
+
this._config =
|
294
|
+
this.affixedRect =
|
295
|
+
this.baseElement =
|
296
|
+
this.baseRect =
|
297
|
+
this.currentPlacement =
|
298
|
+
this.currentOffset =
|
299
|
+
this.overflowParents =
|
300
|
+
undefined;
|
301
|
+
}
|
302
|
+
isNewOffset(offset) {
|
303
|
+
if (this.currentOffset === undefined) {
|
304
|
+
this.currentOffset = offset;
|
305
|
+
return true;
|
306
|
+
}
|
307
|
+
if (this.currentOffset.top === offset.top &&
|
308
|
+
this.currentOffset.left === offset.left) {
|
309
|
+
return false;
|
310
|
+
}
|
311
|
+
this.currentOffset = offset;
|
312
|
+
return true;
|
313
|
+
}
|
314
|
+
isBaseElementVisible() {
|
315
|
+
return isOffsetPartiallyVisibleWithinParent(this.getImmediateOverflowParent(), {
|
316
|
+
top: this.baseRect.top,
|
317
|
+
left: this.baseRect.left,
|
318
|
+
right: this.baseRect.right,
|
319
|
+
bottom: this.baseRect.bottom,
|
320
|
+
}, this.config.autoFitOverflowOffset);
|
321
|
+
}
|
322
|
+
addScrollListeners() {
|
323
|
+
this.scrollListeners = this.overflowParents.map((parentElement) => {
|
324
|
+
const overflow = parentElement === document.body ? 'window' : parentElement;
|
325
|
+
return this.renderer.listen(overflow, 'scroll', () => {
|
326
|
+
this.affix();
|
327
|
+
this._overflowScroll.next();
|
328
|
+
});
|
329
|
+
});
|
330
|
+
}
|
331
|
+
addResizeListener() {
|
332
|
+
this.resizeListener = fromEvent(window, 'resize').subscribe(() => this.affix());
|
333
|
+
}
|
334
|
+
removeResizeListener() {
|
335
|
+
if (this.resizeListener) {
|
336
|
+
this.resizeListener.unsubscribe();
|
337
|
+
this.resizeListener = undefined;
|
338
|
+
}
|
339
|
+
}
|
340
|
+
removeScrollListeners() {
|
341
|
+
if (this.scrollListeners) {
|
342
|
+
// Remove renderer-generated listeners by calling the listener itself.
|
343
|
+
// https://github.com/angular/angular/issues/9368#issuecomment-227199778
|
344
|
+
this.scrollListeners.forEach((listener) => listener());
|
345
|
+
this.scrollListeners = undefined;
|
346
|
+
}
|
347
|
+
}
|
348
|
+
}
|
349
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWZmaXhlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jb3JlL3NyYy9saWIvbW9kdWxlcy9hZmZpeC9hZmZpeGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBYyxPQUFPLEVBQWdCLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQU1sRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsZ0NBQWdDLEVBQ2hDLG9DQUFvQyxHQUNyQyxNQUFNLGFBQWEsQ0FBQztBQUVyQixNQUFNLG9CQUFvQixHQUFtQjtJQUMzQyxjQUFjLEVBQUUsc0JBQXNCLENBQUMsY0FBYztJQUNyRCxhQUFhLEVBQUUsS0FBSztJQUNwQixtQkFBbUIsRUFBRSxRQUFRO0lBQzdCLFFBQVEsRUFBRSxLQUFLO0lBQ2YsU0FBUyxFQUFFLE9BQU87Q0FDbkIsQ0FBQztBQUVGLE1BQU0sT0FBTyxVQUFVO0lBa0VyQixZQUNVLGNBQTJCLEVBQzNCLFFBQW1CO1FBRG5CLG1CQUFjLEdBQWQsY0FBYyxDQUFhO1FBQzNCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFSckIsa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBd0IsQ0FBQztRQUVwRCxvQkFBZSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFdEMscUJBQWdCLEdBQUcsSUFBSSxPQUFPLEVBQTJCLENBQUM7SUFLL0QsQ0FBQztJQXBFSjs7T0FFRztJQUNILElBQVcsWUFBWTtRQUNyQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFXLGNBQWM7UUFDdkIsT0FB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QyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO1lBQzdELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUU7Z0JBQ25ELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDYixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzlCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQy9ELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FDYixDQUFDO0lBQ0osQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztTQUNqQztJQUNILENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLHNFQUFzRTtZQUN0RSx3RUFBd0U7WUFDeEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDdkQsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUM7U0FDbEM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2t5QWZmaXhBdXRvRml0Q29udGV4dCB9IGZyb20gJy4vYWZmaXgtYXV0by1maXQtY29udGV4dCc7XG5pbXBvcnQgeyBTa3lBZmZpeENvbmZpZyB9IGZyb20gJy4vYWZmaXgtY29uZmlnJztcbmltcG9ydCB7IFNreUFmZml4T2Zmc2V0IH0gZnJvbSAnLi9hZmZpeC1vZmZzZXQnO1xuaW1wb3J0IHsgU2t5QWZmaXhPZmZzZXRDaGFuZ2UgfSBmcm9tICcuL2FmZml4LW9mZnNldC1jaGFuZ2UnO1xuaW1wb3J0IHsgU2t5QWZmaXhQbGFjZW1lbnQgfSBmcm9tICcuL2FmZml4LXBsYWNlbWVudCc7XG5pbXBvcnQgeyBTa3lBZmZpeFBsYWNlbWVudENoYW5nZSB9IGZyb20gJy4vYWZmaXgtcGxhY2VtZW50LWNoYW5nZSc7XG5pbXBvcnQgeyBnZXRJbnZlcnNlUGxhY2VtZW50LCBnZXROZXh0UGxhY2VtZW50IH0gZnJvbSAnLi9hZmZpeC11dGlscyc7XG5pbXBvcnQge1xuICBnZXRFbGVtZW50T2Zmc2V0LFxuICBnZXRPdmVyZmxvd1BhcmVudHMsXG4gIGlzT2Zmc2V0RnVsbHlWaXNpYmxlV2l0aGluUGFyZW50LFxuICBpc09mZnNldFBhcnRpYWxseVZpc2libGVXaXRoaW5QYXJlbnQsXG59IGZyb20gJy4vZG9tLXV0aWxzJztcblxuY29uc3QgREVGQVVMVF9BRkZJWF9DT05GSUc6IFNreUFmZml4Q29uZmlnID0ge1xuICBhdXRvRml0Q29udGV4dDogU2t5QWZmaXhBdXRvRml0Q29udGV4dC5PdmVyZmxvd1BhcmVudCxcbiAgZW5hYmxlQXV0b0ZpdDogZmFsc2UsXG4gIGhvcml6b250YWxBbGlnbm1lbnQ6ICdjZW50ZXInLFxuICBpc1N0aWNreTogZmFsc2UsXG4gIHBsYWNlbWVudDogJ2Fib3ZlJyxcbn07XG5cbmV4cG9ydCBjbGFzcyBTa3lBZmZpeGVyIHtcbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIGFmZml4ZWQgZWxlbWVudCdzIG9mZnNldCBjaGFuZ2VzLlxuICAgKi9cbiAgcHVibGljIGdldCBvZmZzZXRDaGFuZ2UoKTogT2JzZXJ2YWJsZTxTa3lBZmZpeE9mZnNldENoYW5nZT4ge1xuICAgIHJldHVybiB0aGlzLl9vZmZzZXRDaGFuZ2UuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB0aGUgYmFzZSBlbGVtZW50J3MgbmVhcmVzdCBvdmVyZmxvdyBwYXJlbnQgaXMgc2Nyb2xsaW5nLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgbmVlZFxuICAgKiB0byBwZXJmb3JtIGFuIGFkZGl0aW9uYWwgYWN0aW9uIGR1cmluZyB0aGUgc2Nyb2xsIGV2ZW50IGJ1dCBkb24ndCB3YW50IHRvIGdlbmVyYXRlIGFub3RoZXJcbiAgICogZXZlbnQgbGlzdGVuZXIuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG92ZXJmbG93U2Nyb2xsKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9vdmVyZmxvd1Njcm9sbC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSBwbGFjZW1lbnQgdmFsdWUgY2hhbmdlcy4gQSBgbnVsbGAgdmFsdWUgaW5kaWNhdGVzIHRoYXQgYSBzdWl0YWJsZVxuICAgKiBwbGFjZW1lbnQgY291bGQgbm90IGJlIGZvdW5kLlxuICAgKi9cbiAgcHVibGljIGdldCBwbGFjZW1lbnRDaGFuZ2UoKTogT2JzZXJ2YWJsZTxTa3lBZmZpeFBsYWNlbWVudENoYW5nZT4ge1xuICAgIHJldHVybiB0aGlzLl9wbGFjZW1lbnRDaGFuZ2UuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldCBjb25maWcoKTogU2t5QWZmaXhDb25maWcge1xuICAgIHJldHVybiB0aGlzLl9jb25maWc7XG4gIH1cblxuICBwcml2YXRlIHNldCBjb25maWcodmFsdWU6IFNreUFmZml4Q29uZmlnKSB7XG4gICAgY29uc3QgbWVyZ2VkID0geyAuLi5ERUZBVUxUX0FGRklYX0NPTkZJRywgLi4udmFsdWUgfTtcblxuICAgIC8vIE1ha2Ugc3VyZSBub25lIG9mIHRoZSB2YWx1ZXMgYXJlIHVuZGVmaW5lZC5cbiAgICBPYmplY3Qua2V5cyhtZXJnZWQpLmZvckVhY2goKGs6IGtleW9mIFNreUFmZml4Q29uZmlnKSA9PiB7XG4gICAgICBpZiAobWVyZ2VkW2tdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgKG1lcmdlZCBhcyBhbnkpW2tdID0gREVGQVVMVF9BRkZJWF9DT05GSUdba107XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLl9jb25maWcgPSBtZXJnZWQ7XG4gIH1cblxuICBwcml2YXRlIGFmZml4ZWRSZWN0OiBDbGllbnRSZWN0O1xuXG4gIHByaXZhdGUgYmFzZUVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXG4gIHByaXZhdGUgYmFzZVJlY3Q6IENsaWVudFJlY3Q7XG5cbiAgcHJpdmF0ZSBjdXJyZW50T2Zmc2V0OiBTa3lBZmZpeE9mZnNldDtcblxuICBwcml2YXRlIGN1cnJlbnRQbGFjZW1lbnQ6IFNreUFmZml4UGxhY2VtZW50O1xuXG4gIHByaXZhdGUgb3ZlcmZsb3dQYXJlbnRzOiBIVE1MRWxlbWVudFtdO1xuXG4gIHByaXZhdGUgcmVzaXplTGlzdGVuZXI6IFN1YnNjcmlwdGlvbjtcblxuICBwcml2YXRlIHNjcm9sbExpc3RlbmVyczogKCgpID0+IHZvaWQpW107XG5cbiAgcHJpdmF0ZSBfY29uZmlnOiBTa3lBZmZpeENvbmZpZztcblxuICBwcml2YXRlIF9vZmZzZXRDaGFuZ2UgPSBuZXcgU3ViamVjdDxTa3lBZmZpeE9mZnNldENoYW5nZT4oKTtcblxuICBwcml2YXRlIF9vdmVyZmxvd1Njcm9sbCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBfcGxhY2VtZW50Q2hhbmdlID0gbmV3IFN1YmplY3Q8U2t5QWZmaXhQbGFjZW1lbnRDaGFuZ2U+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhZmZpeGVkRWxlbWVudDogSFRNTEVsZW1lbnQsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyXG4gICkge31cblxuICAvKipcbiAgICogQWZmaXhlcyBhbiBlbGVtZW50IHRvIGEgYmFzZSBlbGVtZW50LlxuICAgKiBAcGFyYW0gYmFzZUVsZW1lbnQgVGhlIGJhc2UgZWxlbWVudC5cbiAgICogQHBhcmFtIGNvbmZpZyBDb25maWd1cmF0aW9uIGZvciB0aGUgYWZmaXggYWN0aW9uLlxuICAgKi9cbiAgcHVibGljIGFmZml4VG8oYmFzZUVsZW1lbnQ6IEhUTUxFbGVtZW50LCBjb25maWc/OiBTa3lBZmZpeENvbmZpZyk6IHZvaWQge1xuICAgIHRoaXMucmVzZXQoKTtcblxuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMuYmFzZUVsZW1lbnQgPSBiYXNlRWxlbWVudDtcbiAgICB0aGlzLm92ZXJmbG93UGFyZW50cyA9IGdldE92ZXJmbG93UGFyZW50cyhiYXNlRWxlbWVudCk7XG5cbiAgICB0aGlzLmFmZml4KCk7XG5cbiAgICBpZiAodGhpcy5jb25maWcuaXNTdGlja3kpIHtcbiAgICAgIHRoaXMuYWRkU2Nyb2xsTGlzdGVuZXJzKCk7XG4gICAgICB0aGlzLmFkZFJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlLXJ1bnMgdGhlIGFmZml4IGNhbGN1bGF0aW9uLlxuICAgKi9cbiAgcHVibGljIHJlYWZmaXgoKTogdm9pZCB7XG4gICAgLy8gUmVzZXQgY3VycmVudCBwbGFjZW1lbnQgdG8gcHJlZmVycmVkIHBsYWNlbWVudC5cbiAgICB0aGlzLmN1cnJlbnRQbGFjZW1lbnQgPSB0aGlzLmNvbmZpZy5wbGFjZW1lbnQ7XG4gICAgdGhpcy5hZmZpeCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIHRoZSBhZmZpeGVyLlxuICAgKi9cbiAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5yZXNldCgpO1xuICAgIHRoaXMuX3BsYWNlbWVudENoYW5nZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX29mZnNldENoYW5nZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX292ZXJmbG93U2Nyb2xsLmNvbXBsZXRlKCk7XG5cbiAgICB0aGlzLl9vZmZzZXRDaGFuZ2UgPVxuICAgICAgdGhpcy5fcGxhY2VtZW50Q2hhbmdlID1cbiAgICAgIHRoaXMuX292ZXJmbG93U2Nyb2xsID1cbiAgICAgICAgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBhZmZpeCgpOiB2b2lkIHtcbiAgICB0aGlzLmJhc2VSZWN0ID0gdGhpcy5iYXNlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB0aGlzLmFmZml4ZWRSZWN0ID0gdGhpcy5hZmZpeGVkRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGNvbnN0IG9mZnNldCA9IHRoaXMuZ2V0T2Zmc2V0KCk7XG5cbiAgICBpZiAodGhpcy5pc05ld09mZnNldChvZmZzZXQpKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuYWZmaXhlZEVsZW1lbnQsICd0b3AnLCBgJHtvZmZzZXQudG9wfXB4YCk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuYWZmaXhlZEVsZW1lbnQsICdsZWZ0JywgYCR7b2Zmc2V0LmxlZnR9cHhgKTtcbiAgICAgIHRoaXMuX29mZnNldENoYW5nZS5uZXh0KHsgb2Zmc2V0IH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0T2Zmc2V0KCk6IFNreUFmZml4T2Zmc2V0IHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmdldEF1dG9GaXRDb250ZXh0UGFyZW50KCk7XG5cbiAgICBjb25zdCBtYXhBdHRlbXB0cyA9IDQ7XG4gICAgbGV0IGF0dGVtcHRzID0gMDtcblxuICAgIGxldCBpc0FmZml4ZWRFbGVtZW50RnVsbHlWaXNpYmxlID0gZmFsc2U7XG4gICAgbGV0IG9mZnNldDogU2t5QWZmaXhPZmZzZXQ7XG4gICAgbGV0IHBsYWNlbWVudCA9IHRoaXMuY29uZmlnLnBsYWNlbWVudDtcblxuICAgIGRvIHtcbiAgICAgIG9mZnNldCA9IHRoaXMuZ2V0UHJlZmVycmVkT2Zmc2V0KHBsYWNlbWVudCk7XG4gICAgICBpc0FmZml4ZWRFbGVtZW50RnVsbHlWaXNpYmxlID0gaXNPZmZzZXRGdWxseVZpc2libGVXaXRoaW5QYXJlbnQoXG4gICAgICAgIHBhcmVudCxcbiAgICAgICAgb2Zmc2V0LFxuICAgICAgICB0aGlzLmNvbmZpZy5hdXRvRml0T3ZlcmZsb3dPZmZzZXRcbiAgICAgICk7XG5cbiAgICAgIGlmICghdGhpcy5jb25maWcuZW5hYmxlQXV0b0ZpdCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc0FmZml4ZWRFbGVtZW50RnVsbHlWaXNpYmxlKSB7XG4gICAgICAgIHBsYWNlbWVudCA9XG4gICAgICAgICAgYXR0ZW1wdHMgJSAyID09PSAwXG4gICAgICAgICAgICA/IGdldEludmVyc2VQbGFjZW1lbnQocGxhY2VtZW50KVxuICAgICAgICAgICAgOiBnZXROZXh0UGxhY2VtZW50KHBsYWNlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGF0dGVtcHRzKys7XG4gICAgfSB3aGlsZSAoIWlzQWZmaXhlZEVsZW1lbnRGdWxseVZpc2libGUgJiYgYXR0ZW1wdHMgPCBtYXhBdHRlbXB0cyk7XG5cbiAgICBpZiAoaXNBZmZpeGVkRWxlbWVudEZ1bGx5VmlzaWJsZSkge1xuICAgICAgaWYgKHRoaXMuaXNCYXNlRWxlbWVudFZpc2libGUoKSkge1xuICAgICAgICB0aGlzLm5vdGlmeVBsYWNlbWVudENoYW5nZShwbGFjZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLW51bGwta2V5d29yZCAqL1xuICAgICAgICB0aGlzLm5vdGlmeVBsYWNlbWVudENoYW5nZShudWxsKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9mZnNldDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcuZW5hYmxlQXV0b0ZpdCkge1xuICAgICAgLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLW51bGwta2V5d29yZCAqL1xuICAgICAgdGhpcy5ub3RpZnlQbGFjZW1lbnRDaGFuZ2UobnVsbCk7XG4gICAgfVxuXG4gICAgLy8gTm8gc3VpdGFibGUgcGxhY2VtZW50IHdhcyBmb3VuZCwgc28gcmV2ZXJ0IHRvIHByZWZlcnJlZCBwbGFjZW1lbnQuXG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJlZmVycmVkT2Zmc2V0KHRoaXMuY29uZmlnLnBsYWNlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIGdldFByZWZlcnJlZE9mZnNldChwbGFjZW1lbnQ6IFNreUFmZml4UGxhY2VtZW50KTogU2t5QWZmaXhPZmZzZXQge1xuICAgIGNvbnN0IGFmZml4ZWRSZWN0ID0gdGhpcy5hZmZpeGVkUmVjdDtcbiAgICBjb25zdCBiYXNlUmVjdCA9IHRoaXMuYmFzZVJlY3Q7XG5cbiAgICBjb25zdCBob3Jpem9udGFsQWxpZ25tZW50ID0gdGhpcy5jb25maWcuaG9yaXpvbnRhbEFsaWdubWVudDtcbiAgICBjb25zdCB2ZXJ0aWNhbEFsaWdubWVudCA9IHRoaXMuY29uZmlnLnZlcnRpY2FsQWxpZ25tZW50O1xuICAgIGNvbnN0IGVuYWJsZUF1dG9GaXQgPSB0aGlzLmNvbmZpZy5lbmFibGVBdXRvRml0O1xuXG4gICAgbGV0IHRvcDogbnVtYmVyO1xuICAgIGxldCBsZWZ0OiBudW1iZXI7XG5cbiAgICBpZiAocGxhY2VtZW50ID09PSAnYWJvdmUnIHx8IHBsYWNlbWVudCA9PT0gJ2JlbG93Jykge1xuICAgICAgaWYgKHBsYWNlbWVudCA9PT0gJ2Fib3ZlJykge1xuICAgICAgICB0b3AgPSBiYXNlUmVjdC50b3AgLSBhZmZpeGVkUmVjdC5oZWlnaHQ7XG5cbiAgICAgICAgc3dpdGNoICh2ZXJ0aWNhbEFsaWdubWVudCkge1xuICAgICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgICB0b3AgPSB0b3AgKyBhZmZpeGVkUmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdtaWRkbGUnOlxuICAgICAgICAgICAgdG9wID0gdG9wICsgYWZmaXhlZFJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3AgPSBiYXNlUmVjdC5ib3R0b207XG5cbiAgICAgICAgc3dpdGNoICh2ZXJ0aWNhbEFsaWdubWVudCkge1xuICAgICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ21pZGRsZSc6XG4gICAgICAgICAgICB0b3AgPSB0b3AgLSBhZmZpeGVkUmVjdC5oZWlnaHQgLyAyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICAgIHRvcCA9IHRvcCAtIGFmZml4ZWRSZWN0LmhlaWdodDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoaG9yaXpvbnRhbEFsaWdubWVudCkge1xuICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICBsZWZ0ID0gYmFzZVJlY3QubGVmdDtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGxlZnQgPSBiYXNlUmVjdC5sZWZ0ICsgYmFzZVJlY3Qud2lkdGggLyAyIC0gYWZmaXhlZFJlY3Qud2lkdGggLyAyO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICBsZWZ0ID0gYmFzZVJlY3QucmlnaHQgLSBhZmZpeGVkUmVjdC53aWR0aDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHBsYWNlbWVudCA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIGxlZnQgPSBiYXNlUmVjdC5sZWZ0IC0gYWZmaXhlZFJlY3Qud2lkdGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZWZ0ID0gYmFzZVJlY3QucmlnaHQ7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAodmVydGljYWxBbGlnbm1lbnQpIHtcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgICB0b3AgPSBiYXNlUmVjdC50b3A7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnbWlkZGxlJzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0b3AgPSBiYXNlUmVjdC50b3AgKyBiYXNlUmVjdC5oZWlnaHQgLyAyIC0gYWZmaXhlZFJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgIHRvcCA9IGJhc2VSZWN0LmJvdHRvbSAtIGFmZml4ZWRSZWN0LmhlaWdodDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgb2Zmc2V0OiBTa3lBZmZpeE9mZnNldCA9IHsgbGVmdCwgdG9wIH07XG4gICAgaWYgKGVuYWJsZUF1dG9GaXQpIHtcbiAgICAgIG9mZnNldCA9IHRoaXMuYWRqdXN0T2Zmc2V0VG9PdmVyZmxvd1BhcmVudCh7IC4uLm9mZnNldCB9LCBwbGFjZW1lbnQpO1xuICAgIH1cblxuICAgIG9mZnNldC5ib3R0b20gPSBvZmZzZXQudG9wICsgYWZmaXhlZFJlY3QuaGVpZ2h0O1xuICAgIG9mZnNldC5yaWdodCA9IG9mZnNldC5sZWZ0ICsgYWZmaXhlZFJlY3Qud2lkdGg7XG5cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFNsaWdodGx5IGFkanVzdCB0aGUgb2Zmc2V0IHRvIGZpdCB3aXRoaW4gdGhlIHNjcm9sbCBwYXJlbnQncyBib3VuZGFyaWVzIGlmXG4gICAqIHRoZSBhZmZpeGVkIGVsZW1lbnQgd291bGQgb3RoZXJ3aXNlIGJlIGNsaXBwZWQuXG4gICAqL1xuICBwcml2YXRlIGFkanVzdE9mZnNldFRvT3ZlcmZsb3dQYXJlbnQoXG4gICAgb2Zmc2V0OiBTa3lBZmZpeE9mZnNldCxcbiAgICBwbGFjZW1lbnQ6IFNreUFmZml4UGxhY2VtZW50XG4gICk6IFNreUFmZml4T2Zmc2V0IHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmdldEF1dG9GaXRDb250ZXh0UGFyZW50KCk7XG4gICAgY29uc3QgcGFyZW50T2Zmc2V0ID0gZ2V0RWxlbWVudE9mZnNldChcbiAgICAgIHBhcmVudCxcbiAgICAgIHRoaXMuY29uZmlnLmF1dG9GaXRPdmVyZmxvd09mZnNldFxuICAgICk7XG5cbiAgICBjb25zdCBhZmZpeGVkUmVjdCA9IHRoaXMuYWZmaXhlZFJlY3Q7XG4gICAgY29uc3QgYmFzZVJlY3QgPSB0aGlzLmJhc2VSZWN0O1xuXG4gICAgLy8gQSBwaXhlbCB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIGxlZXdheSBiZXR3ZWVuIHRoZSBlZGdlIG9mIHRoZSBvdmVyZmxvdyBwYXJlbnQgYW5kIHRoZSBlZGdlXG4gICAgLy8gb2YgdGhlIGJhc2UgZWxlbWVudCBiZWZvcmUgaXQgZGlzc2FwZWFycyBmcm9tIHZpZXcuXG4gICAgLy8gSWYgdGhlIHZpc2libGUgcG9ydGlvbiBvZiB0aGUgYmFzZSBlbGVtZW50IGlzIGxlc3MgdGhhbiB0aGlzIHBpeGVsIHZhbHVlLCB0aGUgYXV0by1maXRcbiAgICAvLyBmdW5jdGlvbmFsaXR5IGF0dGVtcHRzIHRvIGZpbmQgYW5vdGhlciBwbGFjZW1lbnQuXG4gICAgY29uc3QgZGVmYXVsdFBpeGVsVG9sZXJhbmNlID0gNDA7XG4gICAgbGV0IHBpeGVsVG9sZXJhbmNlOiBudW1iZXI7XG5cbiAgICBjb25zdCBvcmlnaW5hbE9mZnNldFRvcCA9IG9mZnNldC50b3A7XG4gICAgY29uc3Qgb3JpZ2luYWxPZmZzZXRMZWZ0ID0gb2Zmc2V0LmxlZnQ7XG5cbiAgICAvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6c3dpdGNoLWRlZmF1bHQgKi9cbiAgICBzd2l0Y2ggKHBsYWNlbWVudCkge1xuICAgICAgY2FzZSAnYWJvdmUnOlxuICAgICAgY2FzZSAnYmVsb3cnOlxuICAgICAgICAvLyBLZWVwIHRoZSBhZmZpeGVkIGVsZW1lbnQgd2l0aGluIHRoZSBvdmVyZmxvdyBwYXJlbnQuXG4gICAgICAgIGlmIChvZmZzZXQubGVmdCA8IHBhcmVudE9mZnNldC5sZWZ0KSB7XG4gICAgICAgICAgb2Zmc2V0LmxlZnQgPSBwYXJlbnRPZmZzZXQubGVmdDtcbiAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQubGVmdCArIGFmZml4ZWRSZWN0LndpZHRoID4gcGFyZW50T2Zmc2V0LnJpZ2h0KSB7XG4gICAgICAgICAgb2Zmc2V0LmxlZnQgPSBwYXJlbnRPZmZzZXQucmlnaHQgLSBhZmZpeGVkUmVjdC53aWR0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVzZSBhIHNtYWxsZXIgcGl4ZWwgdG9sZXJhbmNlIGlmIHRoZSBiYXNlIGVsZW1lbnQgd2lkdGggaXMgbGVzcyB0aGFuIHRoZSBkZWZhdWx0LlxuICAgICAgICBwaXhlbFRvbGVyYW5jZSA9IE1hdGgubWluKGRlZmF1bHRQaXhlbFRvbGVyYW5jZSwgYmFzZVJlY3Qud2lkdGgpO1xuXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgYWZmaXhlZCBlbGVtZW50IG5ldmVyIGRldGFjaGVzIGZyb20gdGhlIGJhc2UgZWxlbWVudC5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIG9mZnNldC5sZWZ0ICsgcGl4ZWxUb2xlcmFuY2UgPiBiYXNlUmVjdC5yaWdodCB8fFxuICAgICAgICAgIG9mZnNldC5sZWZ0ICsgYWZmaXhlZFJlY3Qud2lkdGggLSBwaXhlbFRvbGVyYW5jZSA8IGJhc2VSZWN0LmxlZnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgb2Zmc2V0LmxlZnQgPSBvcmlnaW5hbE9mZnNldExlZnQ7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgIC8vIEtlZXAgdGhlIGFmZml4ZWQgZWxlbWVudCB3aXRoaW4gdGhlIG92ZXJmbG93IHBhcmVudC5cbiAgICAgICAgaWYgKG9mZnNldC50b3AgPCBwYXJlbnRPZmZzZXQudG9wKSB7XG4gICAgICAgICAgb2Zmc2V0LnRvcCA9IHBhcmVudE9mZnNldC50b3A7XG4gICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0LnRvcCArIGFmZml4ZWRSZWN0LmhlaWdodCA+IHBhcmVudE9mZnNldC5ib3R0b20pIHtcbiAgICAgICAgICBvZmZzZXQudG9wID0gcGFyZW50T2Zmc2V0LmJvdHRvbSAtIGFmZml4ZWRSZWN0LmhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVzZSBhIHNtYWxsZXIgcGl4ZWwgdG9sZXJhbmNlIGlmIHRoZSBiYXNlIGVsZW1lbnQgaGVpZ2h0IGlzIGxlc3MgdGhhbiB0aGUgZGVmYXVsdC5cbiAgICAgICAgcGl4ZWxUb2xlcmFuY2UgPSBNYXRoLm1pbihkZWZhdWx0UGl4ZWxUb2xlcmFuY2UsIGJhc2VSZWN0LmhlaWdodCk7XG5cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBhZmZpeGVkIGVsZW1lbnQgbmV2ZXIgZGV0YWNoZXMgZnJvbSB0aGUgYmFzZSBlbGVtZW50LlxuICAgICAgICBpZiAoXG4gICAgICAgICAgb2Zmc2V0LnRvcCArIHBpeGVsVG9sZXJhbmNlID4gYmFzZVJlY3QuYm90dG9tIHx8XG4gICAgICAgICAgb2Zmc2V0LnRvcCArIGFmZml4ZWRSZWN0LmhlaWdodCAtIHBpeGVsVG9sZXJhbmNlIDwgYmFzZVJlY3QudG9wXG4gICAgICAgICkge1xuICAgICAgICAgIG9mZnNldC50b3AgPSBvcmlnaW5hbE9mZnNldFRvcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBvZmZzZXQ7XG4gIH1cblxuICBwcml2YXRlIGdldEltbWVkaWF0ZU92ZXJmbG93UGFyZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5vdmVyZmxvd1BhcmVudHNbdGhpcy5vdmVyZmxvd1BhcmVudHMubGVuZ3RoIC0gMV07XG4gIH1cblxuICBwcml2YXRlIGdldEF1dG9GaXRDb250ZXh0UGFyZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBib2R5RWxlbWVudCA9IHRoaXMub3ZlcmZsb3dQYXJlbnRzWzBdO1xuXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmF1dG9GaXRDb250ZXh0ID09PSBTa3lBZmZpeEF1dG9GaXRDb250ZXh0Lk92ZXJmbG93UGFyZW50XG4gICAgICA/IHRoaXMuZ2V0SW1tZWRpYXRlT3ZlcmZsb3dQYXJlbnQoKVxuICAgICAgOiBib2R5RWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgbm90aWZ5UGxhY2VtZW50Q2hhbmdlKHBsYWNlbWVudDogU2t5QWZmaXhQbGFjZW1lbnQgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY3VycmVudFBsYWNlbWVudCAhPT0gcGxhY2VtZW50KSB7XG4gICAgICB0aGlzLmN1cnJlbnRQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gICAgICB0aGlzLl9wbGFjZW1lbnRDaGFuZ2UubmV4dCh7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5yZW1vdmVTY3JvbGxMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLnJlbW92ZVJlc2l6ZUxpc3RlbmVyKCk7XG5cbiAgICB0aGlzLl9jb25maWcgPVxuICAgICAgdGhpcy5hZmZpeGVkUmVjdCA9XG4gICAgICB0aGlzLmJhc2VFbGVtZW50ID1cbiAgICAgIHRoaXMuYmFzZVJlY3QgPVxuICAgICAgdGhpcy5jdXJyZW50UGxhY2VtZW50ID1cbiAgICAgIHRoaXMuY3VycmVudE9mZnNldCA9XG4gICAgICB0aGlzLm92ZXJmbG93UGFyZW50cyA9XG4gICAgICAgIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgaXNOZXdPZmZzZXQob2Zmc2V0OiBTa3lBZmZpeE9mZnNldCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmN1cnJlbnRPZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jdXJyZW50T2Zmc2V0ID0gb2Zmc2V0O1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5jdXJyZW50T2Zmc2V0LnRvcCA9PT0gb2Zmc2V0LnRvcCAmJlxuICAgICAgdGhpcy5jdXJyZW50T2Zmc2V0LmxlZnQgPT09IG9mZnNldC5sZWZ0XG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50T2Zmc2V0ID0gb2Zmc2V0O1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGlzQmFzZUVsZW1lbnRWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc09mZnNldFBhcnRpYWxseVZpc2libGVXaXRoaW5QYXJlbnQoXG4gICAgICB0aGlzLmdldEltbWVkaWF0ZU92ZXJmbG93UGFyZW50KCksXG4gICAgICB7XG4gICAgICAgIHRvcDogdGhpcy5iYXNlUmVjdC50b3AsXG4gICAgICAgIGxlZnQ6IHRoaXMuYmFzZVJlY3QubGVmdCxcbiAgICAgICAgcmlnaHQ6IHRoaXMuYmFzZVJlY3QucmlnaHQsXG4gICAgICAgIGJvdHRvbTogdGhpcy5iYXNlUmVjdC5ib3R0b20sXG4gICAgICB9LFxuICAgICAgdGhpcy5jb25maWcuYXV0b0ZpdE92ZXJmbG93T2Zmc2V0XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkU2Nyb2xsTGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIHRoaXMuc2Nyb2xsTGlzdGVuZXJzID0gdGhpcy5vdmVyZmxvd1BhcmVudHMubWFwKChwYXJlbnRFbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBvdmVyZmxvdyA9XG4gICAgICAgIHBhcmVudEVsZW1lbnQgPT09IGRvY3VtZW50LmJvZHkgPyAnd2luZG93JyA6IHBhcmVudEVsZW1lbnQ7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5saXN0ZW4ob3ZlcmZsb3csICdzY3JvbGwnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuYWZmaXgoKTtcbiAgICAgICAgdGhpcy5fb3ZlcmZsb3dTY3JvbGwubmV4dCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFkZFJlc2l6ZUxpc3RlbmVyKCk6IHZvaWQge1xuICAgIHRoaXMucmVzaXplTGlzdGVuZXIgPSBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJykuc3Vic2NyaWJlKCgpID0+XG4gICAgICB0aGlzLmFmZml4KClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVSZXNpemVMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZXNpemVMaXN0ZW5lcikge1xuICAgICAgdGhpcy5yZXNpemVMaXN0ZW5lci51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5yZXNpemVMaXN0ZW5lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVNjcm9sbExpc3RlbmVycygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zY3JvbGxMaXN0ZW5lcnMpIHtcbiAgICAgIC8vIFJlbW92ZSByZW5kZXJlci1nZW5lcmF0ZWQgbGlzdGVuZXJzIGJ5IGNhbGxpbmcgdGhlIGxpc3RlbmVyIGl0c2VsZi5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzkzNjgjaXNzdWVjb21tZW50LTIyNzE5OTc3OFxuICAgICAgdGhpcy5zY3JvbGxMaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IGxpc3RlbmVyKCkpO1xuICAgICAgdGhpcy5zY3JvbGxMaXN0ZW5lcnMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG59XG4iXX0=
|
@@ -0,0 +1,77 @@
|
|
1
|
+
/**
|
2
|
+
* Returns the offset values of a given element.
|
3
|
+
* @param element The HTML element.
|
4
|
+
* @param bufferOffset An optional offset to add/subtract to the element's actual offset.
|
5
|
+
*/
|
6
|
+
export function getElementOffset(element, bufferOffset = {}) {
|
7
|
+
const bufferOffsetBottom = bufferOffset.bottom || 0;
|
8
|
+
const bufferOffsetLeft = bufferOffset.left || 0;
|
9
|
+
const bufferOffsetRight = bufferOffset.right || 0;
|
10
|
+
const bufferOffsetTop = bufferOffset.top || 0;
|
11
|
+
let top;
|
12
|
+
let left;
|
13
|
+
let right;
|
14
|
+
let bottom;
|
15
|
+
if (element === document.body) {
|
16
|
+
left = 0;
|
17
|
+
top = 0;
|
18
|
+
right = document.documentElement.clientWidth;
|
19
|
+
bottom = document.documentElement.clientHeight;
|
20
|
+
}
|
21
|
+
else {
|
22
|
+
const clientRect = element.getBoundingClientRect();
|
23
|
+
left = clientRect.left;
|
24
|
+
top = clientRect.top;
|
25
|
+
right = clientRect.right;
|
26
|
+
bottom = clientRect.bottom;
|
27
|
+
}
|
28
|
+
bottom -= bufferOffsetBottom;
|
29
|
+
left += bufferOffsetLeft;
|
30
|
+
right -= bufferOffsetRight;
|
31
|
+
top += bufferOffsetTop;
|
32
|
+
return {
|
33
|
+
bottom,
|
34
|
+
left,
|
35
|
+
right,
|
36
|
+
top,
|
37
|
+
};
|
38
|
+
}
|
39
|
+
export function getOverflowParents(child) {
|
40
|
+
const bodyElement = window.document.body;
|
41
|
+
const results = [bodyElement];
|
42
|
+
let parentElement = child.parentNode;
|
43
|
+
while (parentElement !== undefined &&
|
44
|
+
parentElement !== bodyElement &&
|
45
|
+
parentElement instanceof HTMLElement) {
|
46
|
+
const overflowY = window
|
47
|
+
.getComputedStyle(parentElement, undefined)
|
48
|
+
.overflowY.toLowerCase();
|
49
|
+
if (overflowY === 'auto' ||
|
50
|
+
overflowY === 'hidden' ||
|
51
|
+
overflowY === 'scroll') {
|
52
|
+
results.push(parentElement);
|
53
|
+
}
|
54
|
+
parentElement = parentElement.parentNode;
|
55
|
+
}
|
56
|
+
return results;
|
57
|
+
}
|
58
|
+
/**
|
59
|
+
* Confirms offset is fully visible within a parent element.
|
60
|
+
* @param parent
|
61
|
+
* @param offset
|
62
|
+
*/
|
63
|
+
export function isOffsetFullyVisibleWithinParent(parent, offset, bufferOffset) {
|
64
|
+
const parentOffset = getElementOffset(parent, bufferOffset);
|
65
|
+
return !(parentOffset.top > offset.top ||
|
66
|
+
parentOffset.right < offset.right ||
|
67
|
+
parentOffset.bottom < offset.bottom ||
|
68
|
+
parentOffset.left > offset.left);
|
69
|
+
}
|
70
|
+
export function isOffsetPartiallyVisibleWithinParent(parent, offset, bufferOffset) {
|
71
|
+
const parentOffset = getElementOffset(parent, bufferOffset);
|
72
|
+
return !(parentOffset.top >= offset.bottom ||
|
73
|
+
parentOffset.right <= offset.left ||
|
74
|
+
parentOffset.bottom <= offset.top ||
|
75
|
+
parentOffset.left >= offset.right);
|
76
|
+
}
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2NvcmUvc3JjL2xpYi9tb2R1bGVzL2FmZml4L2RvbS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUM5QixPQUFvQixFQUNwQixlQUErQixFQUFFO0lBRWpDLE1BQU0sa0JBQWtCLEdBQUcsWUFBWSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7SUFDcEQsTUFBTSxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUNoRCxNQUFNLGlCQUFpQixHQUFHLFlBQVksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ2xELE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0lBRTlDLElBQUksR0FBVyxDQUFDO0lBQ2hCLElBQUksSUFBWSxDQUFDO0lBQ2pCLElBQUksS0FBYSxDQUFDO0lBQ2xCLElBQUksTUFBYyxDQUFDO0lBRW5CLElBQUksT0FBTyxLQUFLLFFBQVEsQ0FBQyxJQUFJLEVBQUU7UUFDN0IsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNULEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDUixLQUFLLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUM7UUFDN0MsTUFBTSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDO0tBQ2hEO1NBQU07UUFDTCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUNuRCxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztRQUN2QixHQUFHLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQztRQUNyQixLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQztRQUN6QixNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztLQUM1QjtJQUVELE1BQU0sSUFBSSxrQkFBa0IsQ0FBQztJQUM3QixJQUFJLElBQUksZ0JBQWdCLENBQUM7SUFDekIsS0FBSyxJQUFJLGlCQUFpQixDQUFDO0lBQzNCLEdBQUcsSUFBSSxlQUFlLENBQUM7SUFFdkIsT0FBTztRQUNMLE1BQU07UUFDTixJQUFJO1FBQ0osS0FBSztRQUNMLEdBQUc7S0FDSixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUFrQjtJQUNuRCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztJQUN6QyxNQUFNLE9BQU8sR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRTlCLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7SUFFckMsT0FDRSxhQUFhLEtBQUssU0FBUztRQUMzQixhQUFhLEtBQUssV0FBVztRQUM3QixhQUFhLFlBQVksV0FBVyxFQUNwQztRQUNBLE1BQU0sU0FBUyxHQUFHLE1BQU07YUFDckIsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQzthQUMxQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFM0IsSUFDRSxTQUFTLEtBQUssTUFBTTtZQUNwQixTQUFTLEtBQUssUUFBUTtZQUN0QixTQUFTLEtBQUssUUFBUSxFQUN0QjtZQUNBLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDN0I7UUFFRCxhQUFhLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQztLQUMxQztJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGdDQUFnQyxDQUM5QyxNQUFtQixFQUNuQixNQUFzQixFQUN0QixZQUE2QjtJQUU3QixNQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFFNUQsT0FBTyxDQUFDLENBQ04sWUFBWSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRztRQUM3QixZQUFZLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLO1FBQ2pDLFlBQVksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU07UUFDbkMsWUFBWSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUNoQyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxvQ0FBb0MsQ0FDbEQsTUFBbUIsRUFDbkIsTUFBc0IsRUFDdEIsWUFBNkI7SUFFN0IsTUFBTSxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBRTVELE9BQU8sQ0FBQyxDQUNOLFlBQVksQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLE1BQU07UUFDakMsWUFBWSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsSUFBSTtRQUNqQyxZQUFZLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxHQUFHO1FBQ2pDLFlBQVksQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssQ0FDbEMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTa3lBZmZpeE9mZnNldCB9IGZyb20gJy4vYWZmaXgtb2Zmc2V0JztcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvZmZzZXQgdmFsdWVzIG9mIGEgZ2l2ZW4gZWxlbWVudC5cbiAqIEBwYXJhbSBlbGVtZW50IFRoZSBIVE1MIGVsZW1lbnQuXG4gKiBAcGFyYW0gYnVmZmVyT2Zmc2V0IEFuIG9wdGlvbmFsIG9mZnNldCB0byBhZGQvc3VidHJhY3QgdG8gdGhlIGVsZW1lbnQncyBhY3R1YWwgb2Zmc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudE9mZnNldChcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4gIGJ1ZmZlck9mZnNldDogU2t5QWZmaXhPZmZzZXQgPSB7fVxuKTogU2t5QWZmaXhPZmZzZXQge1xuICBjb25zdCBidWZmZXJPZmZzZXRCb3R0b20gPSBidWZmZXJPZmZzZXQuYm90dG9tIHx8IDA7XG4gIGNvbnN0IGJ1ZmZlck9mZnNldExlZnQgPSBidWZmZXJPZmZzZXQubGVmdCB8fCAwO1xuICBjb25zdCBidWZmZXJPZmZzZXRSaWdodCA9IGJ1ZmZlck9mZnNldC5yaWdodCB8fCAwO1xuICBjb25zdCBidWZmZXJPZmZzZXRUb3AgPSBidWZmZXJPZmZzZXQudG9wIHx8IDA7XG5cbiAgbGV0IHRvcDogbnVtYmVyO1xuICBsZXQgbGVmdDogbnVtYmVyO1xuICBsZXQgcmlnaHQ6IG51bWJlcjtcbiAgbGV0IGJvdHRvbTogbnVtYmVyO1xuXG4gIGlmIChlbGVtZW50ID09PSBkb2N1bWVudC5ib2R5KSB7XG4gICAgbGVmdCA9IDA7XG4gICAgdG9wID0gMDtcbiAgICByaWdodCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICBib3R0b20gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNsaWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGxlZnQgPSBjbGllbnRSZWN0LmxlZnQ7XG4gICAgdG9wID0gY2xpZW50UmVjdC50b3A7XG4gICAgcmlnaHQgPSBjbGllbnRSZWN0LnJpZ2h0O1xuICAgIGJvdHRvbSA9IGNsaWVudFJlY3QuYm90dG9tO1xuICB9XG5cbiAgYm90dG9tIC09IGJ1ZmZlck9mZnNldEJvdHRvbTtcbiAgbGVmdCArPSBidWZmZXJPZmZzZXRMZWZ0O1xuICByaWdodCAtPSBidWZmZXJPZmZzZXRSaWdodDtcbiAgdG9wICs9IGJ1ZmZlck9mZnNldFRvcDtcblxuICByZXR1cm4ge1xuICAgIGJvdHRvbSxcbiAgICBsZWZ0LFxuICAgIHJpZ2h0LFxuICAgIHRvcCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE92ZXJmbG93UGFyZW50cyhjaGlsZDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudFtdIHtcbiAgY29uc3QgYm9keUVsZW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQuYm9keTtcbiAgY29uc3QgcmVzdWx0cyA9IFtib2R5RWxlbWVudF07XG5cbiAgbGV0IHBhcmVudEVsZW1lbnQgPSBjaGlsZC5wYXJlbnROb2RlO1xuXG4gIHdoaWxlIChcbiAgICBwYXJlbnRFbGVtZW50ICE9PSB1bmRlZmluZWQgJiZcbiAgICBwYXJlbnRFbGVtZW50ICE9PSBib2R5RWxlbWVudCAmJlxuICAgIHBhcmVudEVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudFxuICApIHtcbiAgICBjb25zdCBvdmVyZmxvd1kgPSB3aW5kb3dcbiAgICAgIC5nZXRDb21wdXRlZFN0eWxlKHBhcmVudEVsZW1lbnQsIHVuZGVmaW5lZClcbiAgICAgIC5vdmVyZmxvd1kudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmIChcbiAgICAgIG92ZXJmbG93WSA9PT0gJ2F1dG8nIHx8XG4gICAgICBvdmVyZmxvd1kgPT09ICdoaWRkZW4nIHx8XG4gICAgICBvdmVyZmxvd1kgPT09ICdzY3JvbGwnXG4gICAgKSB7XG4gICAgICByZXN1bHRzLnB1c2gocGFyZW50RWxlbWVudCk7XG4gICAgfVxuXG4gICAgcGFyZW50RWxlbWVudCA9IHBhcmVudEVsZW1lbnQucGFyZW50Tm9kZTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHRzO1xufVxuXG4vKipcbiAqIENvbmZpcm1zIG9mZnNldCBpcyBmdWxseSB2aXNpYmxlIHdpdGhpbiBhIHBhcmVudCBlbGVtZW50LlxuICogQHBhcmFtIHBhcmVudFxuICogQHBhcmFtIG9mZnNldFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNPZmZzZXRGdWxseVZpc2libGVXaXRoaW5QYXJlbnQoXG4gIHBhcmVudDogSFRNTEVsZW1lbnQsXG4gIG9mZnNldDogU2t5QWZmaXhPZmZzZXQsXG4gIGJ1ZmZlck9mZnNldD86IFNreUFmZml4T2Zmc2V0XG4pOiBib29sZWFuIHtcbiAgY29uc3QgcGFyZW50T2Zmc2V0ID0gZ2V0RWxlbWVudE9mZnNldChwYXJlbnQsIGJ1ZmZlck9mZnNldCk7XG5cbiAgcmV0dXJuICEoXG4gICAgcGFyZW50T2Zmc2V0LnRvcCA+IG9mZnNldC50b3AgfHxcbiAgICBwYXJlbnRPZmZzZXQucmlnaHQgPCBvZmZzZXQucmlnaHQgfHxcbiAgICBwYXJlbnRPZmZzZXQuYm90dG9tIDwgb2Zmc2V0LmJvdHRvbSB8fFxuICAgIHBhcmVudE9mZnNldC5sZWZ0ID4gb2Zmc2V0LmxlZnRcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2Zmc2V0UGFydGlhbGx5VmlzaWJsZVdpdGhpblBhcmVudChcbiAgcGFyZW50OiBIVE1MRWxlbWVudCxcbiAgb2Zmc2V0OiBTa3lBZmZpeE9mZnNldCxcbiAgYnVmZmVyT2Zmc2V0PzogU2t5QWZmaXhPZmZzZXRcbik6IGJvb2xlYW4ge1xuICBjb25zdCBwYXJlbnRPZmZzZXQgPSBnZXRFbGVtZW50T2Zmc2V0KHBhcmVudCwgYnVmZmVyT2Zmc2V0KTtcblxuICByZXR1cm4gIShcbiAgICBwYXJlbnRPZmZzZXQudG9wID49IG9mZnNldC5ib3R0b20gfHxcbiAgICBwYXJlbnRPZmZzZXQucmlnaHQgPD0gb2Zmc2V0LmxlZnQgfHxcbiAgICBwYXJlbnRPZmZzZXQuYm90dG9tIDw9IG9mZnNldC50b3AgfHxcbiAgICBwYXJlbnRPZmZzZXQubGVmdCA+PSBvZmZzZXQucmlnaHRcbiAgKTtcbn1cbiJdfQ==
|
@@ -0,0 +1,80 @@
|
|
1
|
+
import { Injectable, RendererFactory2, } from '@angular/core';
|
2
|
+
import { Subject, fromEvent as observableFromEvent } from 'rxjs';
|
3
|
+
import { debounceTime, takeUntil } from 'rxjs/operators';
|
4
|
+
import { MutationObserverService } from '../mutation/mutation-observer-service';
|
5
|
+
import * as i0 from "@angular/core";
|
6
|
+
import * as i1 from "../mutation/mutation-observer-service";
|
7
|
+
/**
|
8
|
+
* @internal
|
9
|
+
*/
|
10
|
+
export class SkyDockDomAdapterService {
|
11
|
+
constructor(mutationService, rendererFactory) {
|
12
|
+
this.mutationService = mutationService;
|
13
|
+
this.ngUnsubscribe = new Subject();
|
14
|
+
this.renderer = rendererFactory.createRenderer(undefined, undefined);
|
15
|
+
}
|
16
|
+
ngOnDestroy() {
|
17
|
+
if (this.observer) {
|
18
|
+
this.observer.disconnect();
|
19
|
+
}
|
20
|
+
this.ngUnsubscribe.next();
|
21
|
+
if (this.styleElement) {
|
22
|
+
this.destroyStyleElement();
|
23
|
+
}
|
24
|
+
this.currentDockHeight =
|
25
|
+
this.ngUnsubscribe =
|
26
|
+
this.observer =
|
27
|
+
this.styleElement =
|
28
|
+
undefined;
|
29
|
+
}
|
30
|
+
setSticky(elementRef) {
|
31
|
+
this.renderer.addClass(elementRef.nativeElement, 'sky-dock-sticky');
|
32
|
+
}
|
33
|
+
setZIndex(zIndex, elementRef) {
|
34
|
+
this.renderer.setStyle(elementRef.nativeElement, 'z-index', zIndex);
|
35
|
+
}
|
36
|
+
unbindDock(elementRef) {
|
37
|
+
this.renderer.addClass(elementRef.nativeElement, 'sky-dock-unbound');
|
38
|
+
}
|
39
|
+
watchDomChanges(elementRef) {
|
40
|
+
this.observer = this.mutationService.create(() => {
|
41
|
+
this.adjustBodyStyles(elementRef);
|
42
|
+
});
|
43
|
+
this.observer.observe(elementRef.nativeElement, {
|
44
|
+
attributes: true,
|
45
|
+
childList: true,
|
46
|
+
characterData: true,
|
47
|
+
subtree: true,
|
48
|
+
});
|
49
|
+
observableFromEvent(window, 'resize')
|
50
|
+
.pipe(debounceTime(250), takeUntil(this.ngUnsubscribe))
|
51
|
+
.subscribe(() => this.adjustBodyStyles(elementRef));
|
52
|
+
}
|
53
|
+
adjustBodyStyles(elementRef) {
|
54
|
+
const dockHeight = elementRef.nativeElement.getBoundingClientRect().height;
|
55
|
+
if (dockHeight === this.currentDockHeight) {
|
56
|
+
return;
|
57
|
+
}
|
58
|
+
// Create a style element to avoid overwriting any existing inline body styles.
|
59
|
+
const styleElement = this.renderer.createElement('style');
|
60
|
+
const textNode = this.renderer.createText(`body { margin-bottom: ${dockHeight}px; }`);
|
61
|
+
// Apply a `data-` attribute to make unit testing easier.
|
62
|
+
this.renderer.setAttribute(styleElement, 'data-test-selector', 'sky-layout-dock-bottom-styles');
|
63
|
+
this.renderer.appendChild(styleElement, textNode);
|
64
|
+
this.renderer.appendChild(document.head, styleElement);
|
65
|
+
if (this.styleElement) {
|
66
|
+
this.destroyStyleElement();
|
67
|
+
}
|
68
|
+
this.currentDockHeight = dockHeight;
|
69
|
+
this.styleElement = styleElement;
|
70
|
+
}
|
71
|
+
destroyStyleElement() {
|
72
|
+
this.renderer.removeChild(document.head, this.styleElement);
|
73
|
+
}
|
74
|
+
}
|
75
|
+
SkyDockDomAdapterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyDockDomAdapterService, deps: [{ token: i1.MutationObserverService }, { token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable });
|
76
|
+
SkyDockDomAdapterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyDockDomAdapterService });
|
77
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyDockDomAdapterService, decorators: [{
|
78
|
+
type: Injectable
|
79
|
+
}], ctorParameters: function () { return [{ type: i1.MutationObserverService }, { type: i0.RendererFactory2 }]; } });
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jay1kb20tYWRhcHRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2NvcmUvc3JjL2xpYi9tb2R1bGVzL2RvY2svZG9jay1kb20tYWRhcHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxVQUFVLEVBR1YsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxJQUFJLG1CQUFtQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7OztBQUVoRjs7R0FFRztBQUVILE1BQU0sT0FBTyx3QkFBd0I7SUFXbkMsWUFDVSxlQUF3QyxFQUNoRCxlQUFpQztRQUR6QixvQkFBZSxHQUFmLGVBQWUsQ0FBeUI7UUFUMUMsa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBWTFDLElBQUksQ0FBQyxRQUFRLEdBQUcsZUFBZSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDNUI7UUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTFCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztTQUM1QjtRQUVELElBQUksQ0FBQyxpQkFBaUI7WUFDcEIsSUFBSSxDQUFDLGFBQWE7Z0JBQ2xCLElBQUksQ0FBQyxRQUFRO29CQUNiLElBQUksQ0FBQyxZQUFZO3dCQUNmLFNBQVMsQ0FBQztJQUNoQixDQUFDO0lBRU0sU0FBUyxDQUFDLFVBQXNCO1FBQ3JDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRU0sU0FBUyxDQUFDLE1BQWMsRUFBRSxVQUFzQjtRQUNyRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRU0sVUFBVSxDQUFDLFVBQXNCO1FBQ3RDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRU0sZUFBZSxDQUFDLFVBQXNCO1FBQzNDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQy9DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUU7WUFDOUMsVUFBVSxFQUFFLElBQUk7WUFDaEIsU0FBUyxFQUFFLElBQUk7WUFDZixhQUFhLEVBQUUsSUFBSTtZQUNuQixPQUFPLEVBQUUsSUFBSTtTQUNkLENBQUMsQ0FBQztRQUVILG1CQUFtQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUM7YUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ3RELFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsVUFBc0I7UUFDN0MsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUMzRSxJQUFJLFVBQVUsS0FBSyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDekMsT0FBTztTQUNSO1FBRUQsK0VBQStFO1FBQy9FLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUN2Qyx5QkFBeUIsVUFBVSxPQUFPLENBQzNDLENBQUM7UUFFRix5REFBeUQ7UUFDekQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQ3hCLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsK0JBQStCLENBQ2hDLENBQUM7UUFFRixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztRQUV2RCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7U0FDNUI7UUFFRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0lBQ25DLENBQUM7SUFFTyxtQkFBbUI7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDOUQsQ0FBQzs7cUhBaEdVLHdCQUF3Qjt5SEFBeEIsd0JBQXdCOzJGQUF4Qix3QkFBd0I7a0JBRHBDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBFbGVtZW50UmVmLFxuICBJbmplY3RhYmxlLFxuICBPbkRlc3Ryb3ksXG4gIFJlbmRlcmVyMixcbiAgUmVuZGVyZXJGYWN0b3J5Mixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFN1YmplY3QsIGZyb21FdmVudCBhcyBvYnNlcnZhYmxlRnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgTXV0YXRpb25PYnNlcnZlclNlcnZpY2UgfSBmcm9tICcuLi9tdXRhdGlvbi9tdXRhdGlvbi1vYnNlcnZlci1zZXJ2aWNlJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNreURvY2tEb21BZGFwdGVyU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgY3VycmVudERvY2tIZWlnaHQ6IG51bWJlcjtcblxuICBwcml2YXRlIG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHByaXZhdGUgb2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXI7XG5cbiAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyO1xuXG4gIHByaXZhdGUgc3R5bGVFbGVtZW50OiBIVE1MU3R5bGVFbGVtZW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbXV0YXRpb25TZXJ2aWNlOiBNdXRhdGlvbk9ic2VydmVyU2VydmljZSxcbiAgICByZW5kZXJlckZhY3Rvcnk6IFJlbmRlcmVyRmFjdG9yeTJcbiAgKSB7XG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyRmFjdG9yeS5jcmVhdGVSZW5kZXJlcih1bmRlZmluZWQsIHVuZGVmaW5lZCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH1cbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xuXG4gICAgaWYgKHRoaXMuc3R5bGVFbGVtZW50KSB7XG4gICAgICB0aGlzLmRlc3Ryb3lTdHlsZUVsZW1lbnQoKTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnREb2NrSGVpZ2h0ID1cbiAgICAgIHRoaXMubmdVbnN1YnNjcmliZSA9XG4gICAgICB0aGlzLm9ic2VydmVyID1cbiAgICAgIHRoaXMuc3R5bGVFbGVtZW50ID1cbiAgICAgICAgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHNldFN0aWNreShlbGVtZW50UmVmOiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdza3ktZG9jay1zdGlja3knKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRaSW5kZXgoekluZGV4OiBudW1iZXIsIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3otaW5kZXgnLCB6SW5kZXgpO1xuICB9XG5cbiAgcHVibGljIHVuYmluZERvY2soZWxlbWVudFJlZjogRWxlbWVudFJlZik6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnc2t5LWRvY2stdW5ib3VuZCcpO1xuICB9XG5cbiAgcHVibGljIHdhdGNoRG9tQ2hhbmdlcyhlbGVtZW50UmVmOiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgdGhpcy5vYnNlcnZlciA9IHRoaXMubXV0YXRpb25TZXJ2aWNlLmNyZWF0ZSgoKSA9PiB7XG4gICAgICB0aGlzLmFkanVzdEJvZHlTdHlsZXMoZWxlbWVudFJlZik7XG4gICAgfSk7XG5cbiAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUoZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB7XG4gICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgIHN1YnRyZWU6IHRydWUsXG4gICAgfSk7XG5cbiAgICBvYnNlcnZhYmxlRnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMjUwKSwgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuYWRqdXN0Qm9keVN0eWxlcyhlbGVtZW50UmVmKSk7XG4gIH1cblxuICBwcml2YXRlIGFkanVzdEJvZHlTdHlsZXMoZWxlbWVudFJlZjogRWxlbWVudFJlZik6IHZvaWQge1xuICAgIGNvbnN0IGRvY2tIZWlnaHQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgIGlmIChkb2NrSGVpZ2h0ID09PSB0aGlzLmN1cnJlbnREb2NrSGVpZ2h0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGEgc3R5bGUgZWxlbWVudCB0byBhdm9pZCBvdmVyd3JpdGluZyBhbnkgZXhpc3RpbmcgaW5saW5lIGJvZHkgc3R5bGVzLlxuICAgIGNvbnN0IHN0eWxlRWxlbWVudCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICBjb25zdCB0ZXh0Tm9kZSA9IHRoaXMucmVuZGVyZXIuY3JlYXRlVGV4dChcbiAgICAgIGBib2R5IHsgbWFyZ2luLWJvdHRvbTogJHtkb2NrSGVpZ2h0fXB4OyB9YFxuICAgICk7XG5cbiAgICAvLyBBcHBseSBhIGBkYXRhLWAgYXR0cmlidXRlIHRvIG1ha2UgdW5pdCB0ZXN0aW5nIGVhc2llci5cbiAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShcbiAgICAgIHN0eWxlRWxlbWVudCxcbiAgICAgICdkYXRhLXRlc3Qtc2VsZWN0b3InLFxuICAgICAgJ3NreS1sYXlvdXQtZG9jay1ib3R0b20tc3R5bGVzJ1xuICAgICk7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCwgdGV4dE5vZGUpO1xuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuaGVhZCwgc3R5bGVFbGVtZW50KTtcblxuICAgIGlmICh0aGlzLnN0eWxlRWxlbWVudCkge1xuICAgICAgdGhpcy5kZXN0cm95U3R5bGVFbGVtZW50KCk7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50RG9ja0hlaWdodCA9IGRvY2tIZWlnaHQ7XG4gICAgdGhpcy5zdHlsZUVsZW1lbnQgPSBzdHlsZUVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGRlc3Ryb3lTdHlsZUVsZW1lbnQoKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZChkb2N1bWVudC5oZWFkLCB0aGlzLnN0eWxlRWxlbWVudCk7XG4gIH1cbn1cbiJdfQ==
|
@@ -0,0 +1,2 @@
|
|
1
|
+
export {};
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jay1pbnNlcnQtY29tcG9uZW50LWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jb3JlL3NyYy9saWIvbW9kdWxlcy9kb2NrL2RvY2staW5zZXJ0LWNvbXBvbmVudC1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0YXRpY1Byb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNreURvY2tJdGVtQ29uZmlnIH0gZnJvbSAnLi9kb2NrLWl0ZW0tY29uZmlnJztcblxuZXhwb3J0IGludGVyZmFjZSBTa3lEb2NrSW5zZXJ0Q29tcG9uZW50Q29uZmlnIGV4dGVuZHMgU2t5RG9ja0l0ZW1Db25maWcge1xuICAvKipcbiAgICogU3RhdGljIHByb3ZpZGVycyB0byBpbmplY3QgaW50byB0aGUgaXRlbSdzIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3ZpZGVycz86IFN0YXRpY1Byb3ZpZGVyW107XG59XG4iXX0=
|
@@ -0,0 +1,2 @@
|
|
1
|
+
export {};
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jay1pdGVtLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jb3JlL3NyYy9saWIvbW9kdWxlcy9kb2NrL2RvY2staXRlbS1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29uZmlndXJhdGlvbiB0byBiZSB1c2VkIGJ5IHRoZSBkb2NraW5nIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTa3lEb2NrSXRlbUNvbmZpZyB7XG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgb3JkZXIgb2YgdGhlIGl0ZW0uIFRoZSBoaWdoZXIgdGhlIG51bWJlciwgdGhlIGhpZ2hlclxuICAgKiB0aGUgaXRlbSB3aWxsIGJlIHBsYWNlZCBpbiB0aGUgZG9jay4gQnkgZGVmYXVsdCwgbmV3IGl0ZW1zIHdpbGwgYmUgcGxhY2VkIGF0XG4gICAqIHRoZSB0b3Agb2YgdGhlIHN0YWNrLlxuICAgKi9cbiAgc3RhY2tPcmRlcj86IG51bWJlcjtcbn1cbiJdfQ==
|
@@ -0,0 +1,2 @@
|
|
1
|
+
export {};
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jay1pdGVtLXJlZmVyZW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jb3JlL3NyYy9saWIvbW9kdWxlcy9kb2NrL2RvY2staXRlbS1yZWZlcmVuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBkb2NrIGl0ZW0ncyBjb21wb25lbnQgcmVmZXJlbmNlLlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2t5RG9ja0l0ZW1SZWZlcmVuY2U8VD4ge1xuICBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxUPjtcblxuICBzdGFja09yZGVyOiBudW1iZXI7XG59XG4iXX0=
|