@skyux/core 5.2.3 → 5.5.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/README.md +6 -4
- package/bundles/skyux-core-testing.umd.js +6 -6
- package/bundles/skyux-core.umd.js +131 -127
- package/documentation.json +293 -24
- package/esm2015/index.js +60 -0
- package/esm2015/index.js.map +1 -0
- package/esm2015/lib/modules/adapter-service/adapter.module.js +16 -0
- package/esm2015/lib/modules/adapter-service/adapter.module.js.map +1 -0
- package/esm2015/lib/modules/adapter-service/adapter.service.js +218 -0
- package/esm2015/lib/modules/adapter-service/adapter.service.js.map +1 -0
- package/esm2015/lib/modules/adapter-service/focusable-children-options.js +2 -0
- package/esm2015/lib/modules/adapter-service/focusable-children-options.js.map +1 -0
- package/esm2015/lib/modules/affix/affix-auto-fit-context.js +12 -0
- package/esm2015/lib/modules/affix/affix-auto-fit-context.js.map +1 -0
- package/esm2015/lib/modules/affix/affix-config.js +2 -0
- package/esm2015/lib/modules/affix/affix-config.js.map +1 -0
- package/esm2015/lib/modules/affix/affix-horizontal-alignment.js +2 -0
- package/esm2015/lib/modules/affix/affix-horizontal-alignment.js.map +1 -0
- package/esm2015/lib/modules/affix/affix-offset-change.js +2 -0
- package/esm2015/lib/modules/affix/affix-offset-change.js.map +1 -0
- package/esm2015/lib/modules/affix/affix-offset.js +2 -0
- package/esm2015/lib/modules/affix/affix-offset.js.map +1 -0
- package/esm2015/lib/modules/affix/affix-placement-change.js +2 -0
- package/esm2015/lib/modules/affix/affix-placement-change.js.map +1 -0
- package/esm2015/lib/modules/affix/affix-placement.js +2 -0
- package/esm2015/lib/modules/affix/affix-placement.js.map +1 -0
- package/esm2015/lib/modules/affix/affix-utils.js +18 -0
- package/esm2015/lib/modules/affix/affix-utils.js.map +1 -0
- package/esm2015/lib/modules/affix/affix-vertical-alignment.js +2 -0
- package/esm2015/lib/modules/affix/affix-vertical-alignment.js.map +1 -0
- package/esm2015/lib/modules/affix/affix.directive.js +100 -0
- package/esm2015/lib/modules/affix/affix.directive.js.map +1 -0
- package/esm2015/lib/modules/affix/affix.module.js +18 -0
- package/esm2015/lib/modules/affix/affix.module.js.map +1 -0
- package/esm2015/lib/modules/affix/affix.service.js +24 -0
- package/esm2015/lib/modules/affix/affix.service.js.map +1 -0
- package/esm2015/lib/modules/affix/affixer.js +349 -0
- package/esm2015/lib/modules/affix/affixer.js.map +1 -0
- package/esm2015/lib/modules/affix/dom-utils.js +77 -0
- package/esm2015/lib/modules/affix/dom-utils.js.map +1 -0
- package/esm2015/lib/modules/dock/dock-dom-adapter.service.js +80 -0
- package/esm2015/lib/modules/dock/dock-dom-adapter.service.js.map +1 -0
- package/esm2015/lib/modules/dock/dock-insert-component-config.js +2 -0
- package/esm2015/lib/modules/dock/dock-insert-component-config.js.map +1 -0
- package/esm2015/lib/modules/dock/dock-item-config.js +2 -0
- package/esm2015/lib/modules/dock/dock-item-config.js.map +1 -0
- package/esm2015/lib/modules/dock/dock-item-reference.js +2 -0
- package/esm2015/lib/modules/dock/dock-item-reference.js.map +1 -0
- package/esm2015/lib/modules/dock/dock-item.js +29 -0
- package/esm2015/lib/modules/dock/dock-item.js.map +1 -0
- package/esm2015/lib/modules/dock/dock-location.js +19 -0
- package/esm2015/lib/modules/dock/dock-location.js.map +1 -0
- package/esm2015/lib/modules/dock/dock-options.js +2 -0
- package/esm2015/lib/modules/dock/dock-options.js.map +1 -0
- package/esm2015/lib/modules/dock/dock.component.js +95 -0
- package/esm2015/lib/modules/dock/dock.component.js.map +1 -0
- package/esm2015/lib/modules/dock/dock.module.js +20 -0
- package/esm2015/lib/modules/dock/dock.module.js.map +1 -0
- package/esm2015/lib/modules/dock/dock.service.js +92 -0
- package/esm2015/lib/modules/dock/dock.service.js.map +1 -0
- package/esm2015/lib/modules/dock/sort-by-stack-order.js +13 -0
- package/esm2015/lib/modules/dock/sort-by-stack-order.js.map +1 -0
- package/esm2015/lib/modules/dynamic-component/dynamic-component-location.js +27 -0
- package/esm2015/lib/modules/dynamic-component/dynamic-component-location.js.map +1 -0
- package/esm2015/lib/modules/dynamic-component/dynamic-component-options.js +2 -0
- package/esm2015/lib/modules/dynamic-component/dynamic-component-options.js.map +1 -0
- package/esm2015/lib/modules/dynamic-component/dynamic-component.module.js +17 -0
- package/esm2015/lib/modules/dynamic-component/dynamic-component.module.js.map +1 -0
- package/esm2015/lib/modules/dynamic-component/dynamic-component.service.js +83 -0
- package/esm2015/lib/modules/dynamic-component/dynamic-component.service.js.map +1 -0
- package/esm2015/lib/modules/format/app-format.js +18 -0
- package/esm2015/lib/modules/format/app-format.js.map +1 -0
- package/esm2015/lib/modules/id/id.directive.js +34 -0
- package/esm2015/lib/modules/id/id.directive.js.map +1 -0
- package/esm2015/lib/modules/id/id.module.js +16 -0
- package/esm2015/lib/modules/id/id.module.js.map +1 -0
- package/esm2015/lib/modules/log/log.module.js +16 -0
- package/esm2015/lib/modules/log/log.module.js.map +1 -0
- package/esm2015/lib/modules/log/log.service.js +22 -0
- package/esm2015/lib/modules/log/log.service.js.map +1 -0
- package/esm2015/lib/modules/media-query/media-breakpoints.js +20 -0
- package/esm2015/lib/modules/media-query/media-breakpoints.js.map +1 -0
- package/esm2015/lib/modules/media-query/media-query-listener.js +2 -0
- package/esm2015/lib/modules/media-query/media-query-listener.js.map +1 -0
- package/esm2015/lib/modules/media-query/media-query.module.js +16 -0
- package/esm2015/lib/modules/media-query/media-query.module.js.map +1 -0
- package/esm2015/lib/modules/media-query/media-query.service.js +121 -0
- package/esm2015/lib/modules/media-query/media-query.service.js.map +1 -0
- package/esm2015/lib/modules/mutation/mutation-observer-service.js +16 -0
- package/esm2015/lib/modules/mutation/mutation-observer-service.js.map +1 -0
- package/esm2015/lib/modules/numeric/numeric-symbol.js +2 -0
- package/esm2015/lib/modules/numeric/numeric-symbol.js.map +1 -0
- package/esm2015/lib/modules/numeric/numeric.module.js +20 -0
- package/esm2015/lib/modules/numeric/numeric.module.js.map +1 -0
- package/esm2015/lib/modules/numeric/numeric.options.js +41 -0
- package/esm2015/lib/modules/numeric/numeric.options.js.map +1 -0
- package/esm2015/lib/modules/numeric/numeric.pipe.js +83 -0
- package/esm2015/lib/modules/numeric/numeric.pipe.js.map +1 -0
- package/esm2015/lib/modules/numeric/numeric.service.js +188 -0
- package/esm2015/lib/modules/numeric/numeric.service.js.map +1 -0
- package/esm2015/lib/modules/overlay/overlay-adapter.service.js +41 -0
- package/esm2015/lib/modules/overlay/overlay-adapter.service.js.map +1 -0
- package/esm2015/lib/modules/overlay/overlay-config.js +2 -0
- package/esm2015/lib/modules/overlay/overlay-config.js.map +1 -0
- package/esm2015/lib/modules/overlay/overlay-context.js +10 -0
- package/esm2015/lib/modules/overlay/overlay-context.js.map +1 -0
- package/esm2015/lib/modules/overlay/overlay-instance.js +55 -0
- package/esm2015/lib/modules/overlay/overlay-instance.js.map +1 -0
- package/esm2015/lib/modules/overlay/overlay.component.js +154 -0
- package/esm2015/lib/modules/overlay/overlay.component.js.map +1 -0
- package/esm2015/lib/modules/overlay/overlay.module.js +18 -0
- package/esm2015/lib/modules/overlay/overlay.module.js.map +1 -0
- package/esm2015/lib/modules/overlay/overlay.service.js +120 -0
- package/esm2015/lib/modules/overlay/overlay.service.js.map +1 -0
- package/esm2015/lib/modules/percent-pipe/percent-pipe.module.js +20 -0
- package/esm2015/lib/modules/percent-pipe/percent-pipe.module.js.map +1 -0
- package/esm2015/lib/modules/percent-pipe/percent.pipe.js +48 -0
- package/esm2015/lib/modules/percent-pipe/percent.pipe.js.map +1 -0
- package/esm2015/lib/modules/scrollable-host/scrollable-host.service.js +163 -0
- package/esm2015/lib/modules/scrollable-host/scrollable-host.service.js.map +1 -0
- package/esm2015/lib/modules/shared/number-format/number-format-utility.js +74 -0
- package/esm2015/lib/modules/shared/number-format/number-format-utility.js.map +1 -0
- package/esm2015/lib/modules/shared/sky-core-resources.module.js +50 -0
- package/esm2015/lib/modules/shared/sky-core-resources.module.js.map +1 -0
- package/esm2015/lib/modules/title/set-title-args.js +2 -0
- package/esm2015/lib/modules/title/set-title-args.js.map +1 -0
- package/esm2015/lib/modules/title/title.service.js +31 -0
- package/esm2015/lib/modules/title/title.service.js.map +1 -0
- package/esm2015/lib/modules/ui-config/ui-config.service.js +21 -0
- package/esm2015/lib/modules/ui-config/ui-config.service.js.map +1 -0
- package/esm2015/lib/modules/viewkeeper/viewkeeper-boundary-info.js +2 -0
- package/esm2015/lib/modules/viewkeeper/viewkeeper-boundary-info.js.map +1 -0
- package/esm2015/lib/modules/viewkeeper/viewkeeper-fixed-styles.js +2 -0
- package/esm2015/lib/modules/viewkeeper/viewkeeper-fixed-styles.js.map +1 -0
- package/esm2015/lib/modules/viewkeeper/viewkeeper-host-options.js +10 -0
- package/esm2015/lib/modules/viewkeeper/viewkeeper-host-options.js.map +1 -0
- package/esm2015/lib/modules/viewkeeper/viewkeeper-offset.js +2 -0
- package/esm2015/lib/modules/viewkeeper/viewkeeper-offset.js.map +1 -0
- package/esm2015/lib/modules/viewkeeper/viewkeeper-options.js +2 -0
- package/esm2015/lib/modules/viewkeeper/viewkeeper-options.js.map +1 -0
- package/esm2015/lib/modules/viewkeeper/viewkeeper.directive.js +116 -0
- package/esm2015/lib/modules/viewkeeper/viewkeeper.directive.js.map +1 -0
- package/esm2015/lib/modules/viewkeeper/viewkeeper.js +254 -0
- package/esm2015/lib/modules/viewkeeper/viewkeeper.js.map +1 -0
- package/esm2015/lib/modules/viewkeeper/viewkeeper.module.js +16 -0
- package/esm2015/lib/modules/viewkeeper/viewkeeper.module.js.map +1 -0
- package/esm2015/lib/modules/viewkeeper/viewkeeper.service.js +39 -0
- package/esm2015/lib/modules/viewkeeper/viewkeeper.service.js.map +1 -0
- package/esm2015/lib/modules/window/window-ref.js +30 -0
- package/esm2015/lib/modules/window/window-ref.js.map +1 -0
- package/esm2015/skyux-core.js +2 -2
- package/esm2015/skyux-core.js.map +1 -0
- package/esm2015/testing/mock-media-query.service.js +4 -4
- package/esm2015/testing/mock-media-query.service.js.map +1 -0
- package/esm2015/testing/mock-ui-config.service.js +4 -4
- package/esm2015/testing/mock-ui-config.service.js.map +1 -0
- package/esm2015/testing/public-api.js +1 -1
- package/esm2015/testing/public-api.js.map +1 -0
- package/esm2015/testing/skyux-core-testing.js +1 -1
- package/esm2015/testing/skyux-core-testing.js.map +1 -0
- package/fesm2015/skyux-core-testing.js +6 -6
- package/fesm2015/skyux-core-testing.js.map +1 -1
- package/fesm2015/skyux-core.js +170 -166
- package/fesm2015/skyux-core.js.map +1 -1
- package/index.d.ts +57 -0
- package/{modules → lib/modules}/adapter-service/adapter.module.d.ts +0 -0
- package/{modules → lib/modules}/adapter-service/adapter.service.d.ts +0 -0
- package/{modules → lib/modules}/adapter-service/focusable-children-options.d.ts +0 -0
- package/{modules → lib/modules}/affix/affix-auto-fit-context.d.ts +0 -0
- package/{modules → lib/modules}/affix/affix-config.d.ts +0 -0
- package/{modules → lib/modules}/affix/affix-horizontal-alignment.d.ts +0 -0
- package/{modules → lib/modules}/affix/affix-offset-change.d.ts +0 -0
- package/{modules → lib/modules}/affix/affix-offset.d.ts +0 -0
- package/{modules → lib/modules}/affix/affix-placement-change.d.ts +0 -0
- package/{modules → lib/modules}/affix/affix-placement.d.ts +0 -0
- package/{modules → lib/modules}/affix/affix-utils.d.ts +0 -0
- package/{modules → lib/modules}/affix/affix-vertical-alignment.d.ts +0 -0
- package/{modules → lib/modules}/affix/affix.directive.d.ts +0 -0
- package/{modules → lib/modules}/affix/affix.module.d.ts +0 -0
- package/{modules → lib/modules}/affix/affix.service.d.ts +0 -0
- package/{modules → lib/modules}/affix/affixer.d.ts +0 -0
- package/{modules → lib/modules}/affix/dom-utils.d.ts +0 -0
- package/{modules → lib/modules}/dock/dock-dom-adapter.service.d.ts +0 -0
- package/{modules → lib/modules}/dock/dock-insert-component-config.d.ts +0 -0
- package/{modules → lib/modules}/dock/dock-item-config.d.ts +0 -0
- package/{modules → lib/modules}/dock/dock-item-reference.d.ts +0 -0
- package/{modules → lib/modules}/dock/dock-item.d.ts +0 -0
- package/{modules → lib/modules}/dock/dock-location.d.ts +0 -0
- package/{modules → lib/modules}/dock/dock-options.d.ts +0 -0
- package/{modules → lib/modules}/dock/dock.component.d.ts +0 -0
- package/{modules → lib/modules}/dock/dock.module.d.ts +0 -0
- package/{modules → lib/modules}/dock/dock.service.d.ts +0 -0
- package/{modules → lib/modules}/dock/sort-by-stack-order.d.ts +0 -0
- package/{modules → lib/modules}/dynamic-component/dynamic-component-location.d.ts +0 -0
- package/{modules → lib/modules}/dynamic-component/dynamic-component-options.d.ts +0 -0
- package/{modules → lib/modules}/dynamic-component/dynamic-component.module.d.ts +0 -0
- package/{modules → lib/modules}/dynamic-component/dynamic-component.service.d.ts +0 -0
- package/{modules → lib/modules}/format/app-format.d.ts +0 -0
- package/{modules → lib/modules}/id/id.directive.d.ts +0 -0
- package/{modules → lib/modules}/id/id.module.d.ts +0 -0
- package/{modules → lib/modules}/log/log.module.d.ts +0 -0
- package/{modules → lib/modules}/log/log.service.d.ts +0 -0
- package/{modules → lib/modules}/media-query/media-breakpoints.d.ts +0 -0
- package/{modules → lib/modules}/media-query/media-query-listener.d.ts +0 -0
- package/{modules → lib/modules}/media-query/media-query.module.d.ts +0 -0
- package/{modules → lib/modules}/media-query/media-query.service.d.ts +4 -0
- package/{modules → lib/modules}/mutation/mutation-observer-service.d.ts +0 -0
- package/{modules → lib/modules}/numeric/numeric-symbol.d.ts +0 -0
- package/{modules → lib/modules}/numeric/numeric.module.d.ts +0 -0
- package/{modules → lib/modules}/numeric/numeric.options.d.ts +2 -2
- package/{modules → lib/modules}/numeric/numeric.pipe.d.ts +2 -2
- package/{modules → lib/modules}/numeric/numeric.service.d.ts +0 -0
- package/{modules → lib/modules}/overlay/overlay-adapter.service.d.ts +0 -0
- package/{modules → lib/modules}/overlay/overlay-config.d.ts +0 -0
- package/{modules → lib/modules}/overlay/overlay-context.d.ts +0 -0
- package/{modules → lib/modules}/overlay/overlay-instance.d.ts +0 -0
- package/{modules → lib/modules}/overlay/overlay.component.d.ts +0 -0
- package/{modules → lib/modules}/overlay/overlay.module.d.ts +0 -0
- package/{modules → lib/modules}/overlay/overlay.service.d.ts +0 -0
- package/{modules → lib/modules}/percent-pipe/percent-pipe.module.d.ts +0 -0
- package/{modules → lib/modules}/percent-pipe/percent.pipe.d.ts +0 -0
- package/{modules → lib/modules}/scrollable-host/scrollable-host.service.d.ts +0 -0
- package/{modules → lib/modules}/shared/number-format/number-format-utility.d.ts +0 -0
- package/{modules → lib/modules}/shared/sky-core-resources.module.d.ts +0 -0
- package/{modules → lib/modules}/title/set-title-args.d.ts +0 -0
- package/{modules → lib/modules}/title/title.service.d.ts +0 -0
- package/{modules → lib/modules}/ui-config/ui-config.service.d.ts +0 -0
- package/{modules → lib/modules}/viewkeeper/viewkeeper-boundary-info.d.ts +0 -0
- package/{modules → lib/modules}/viewkeeper/viewkeeper-fixed-styles.d.ts +0 -0
- package/{modules → lib/modules}/viewkeeper/viewkeeper-host-options.d.ts +0 -0
- package/{modules → lib/modules}/viewkeeper/viewkeeper-offset.d.ts +0 -0
- package/{modules → lib/modules}/viewkeeper/viewkeeper-options.d.ts +0 -0
- package/{modules → lib/modules}/viewkeeper/viewkeeper.d.ts +0 -0
- package/{modules → lib/modules}/viewkeeper/viewkeeper.directive.d.ts +0 -0
- package/{modules → lib/modules}/viewkeeper/viewkeeper.module.d.ts +0 -0
- package/{modules → lib/modules}/viewkeeper/viewkeeper.service.d.ts +0 -0
- package/{modules → lib/modules}/window/window-ref.d.ts +0 -0
- package/package.json +19 -5
- package/skyux-core.d.ts +1 -1
- package/LICENSE +0 -21
- package/bundles/skyux-core-testing.umd.js.map +0 -1
- package/bundles/skyux-core.umd.js.map +0 -1
- package/esm2015/modules/adapter-service/adapter.module.js +0 -16
- package/esm2015/modules/adapter-service/adapter.service.js +0 -218
- package/esm2015/modules/adapter-service/focusable-children-options.js +0 -2
- package/esm2015/modules/affix/affix-auto-fit-context.js +0 -12
- package/esm2015/modules/affix/affix-config.js +0 -2
- package/esm2015/modules/affix/affix-horizontal-alignment.js +0 -2
- package/esm2015/modules/affix/affix-offset-change.js +0 -2
- package/esm2015/modules/affix/affix-offset.js +0 -2
- package/esm2015/modules/affix/affix-placement-change.js +0 -2
- package/esm2015/modules/affix/affix-placement.js +0 -2
- package/esm2015/modules/affix/affix-utils.js +0 -18
- package/esm2015/modules/affix/affix-vertical-alignment.js +0 -2
- package/esm2015/modules/affix/affix.directive.js +0 -98
- package/esm2015/modules/affix/affix.module.js +0 -18
- package/esm2015/modules/affix/affix.service.js +0 -24
- package/esm2015/modules/affix/affixer.js +0 -349
- package/esm2015/modules/affix/dom-utils.js +0 -77
- package/esm2015/modules/dock/dock-dom-adapter.service.js +0 -79
- package/esm2015/modules/dock/dock-insert-component-config.js +0 -2
- package/esm2015/modules/dock/dock-item-config.js +0 -2
- package/esm2015/modules/dock/dock-item-reference.js +0 -2
- package/esm2015/modules/dock/dock-item.js +0 -29
- package/esm2015/modules/dock/dock-location.js +0 -19
- package/esm2015/modules/dock/dock-options.js +0 -2
- package/esm2015/modules/dock/dock.component.js +0 -95
- package/esm2015/modules/dock/dock.module.js +0 -20
- package/esm2015/modules/dock/dock.service.js +0 -91
- package/esm2015/modules/dock/sort-by-stack-order.js +0 -13
- package/esm2015/modules/dynamic-component/dynamic-component-location.js +0 -27
- package/esm2015/modules/dynamic-component/dynamic-component-options.js +0 -2
- package/esm2015/modules/dynamic-component/dynamic-component.module.js +0 -17
- package/esm2015/modules/dynamic-component/dynamic-component.service.js +0 -82
- package/esm2015/modules/format/app-format.js +0 -18
- package/esm2015/modules/id/id.directive.js +0 -34
- package/esm2015/modules/id/id.module.js +0 -16
- package/esm2015/modules/log/log.module.js +0 -16
- package/esm2015/modules/log/log.service.js +0 -22
- package/esm2015/modules/media-query/media-breakpoints.js +0 -20
- package/esm2015/modules/media-query/media-query-listener.js +0 -2
- package/esm2015/modules/media-query/media-query.module.js +0 -16
- package/esm2015/modules/media-query/media-query.service.js +0 -117
- package/esm2015/modules/mutation/mutation-observer-service.js +0 -16
- package/esm2015/modules/numeric/numeric-symbol.js +0 -2
- package/esm2015/modules/numeric/numeric.module.js +0 -20
- package/esm2015/modules/numeric/numeric.options.js +0 -41
- package/esm2015/modules/numeric/numeric.pipe.js +0 -81
- package/esm2015/modules/numeric/numeric.service.js +0 -188
- package/esm2015/modules/overlay/overlay-adapter.service.js +0 -41
- package/esm2015/modules/overlay/overlay-config.js +0 -2
- package/esm2015/modules/overlay/overlay-context.js +0 -10
- package/esm2015/modules/overlay/overlay-instance.js +0 -55
- package/esm2015/modules/overlay/overlay.component.js +0 -152
- package/esm2015/modules/overlay/overlay.module.js +0 -18
- package/esm2015/modules/overlay/overlay.service.js +0 -119
- package/esm2015/modules/percent-pipe/percent-pipe.module.js +0 -20
- package/esm2015/modules/percent-pipe/percent.pipe.js +0 -48
- package/esm2015/modules/scrollable-host/scrollable-host.service.js +0 -161
- package/esm2015/modules/shared/number-format/number-format-utility.js +0 -74
- package/esm2015/modules/shared/sky-core-resources.module.js +0 -50
- package/esm2015/modules/title/set-title-args.js +0 -2
- package/esm2015/modules/title/title.service.js +0 -30
- package/esm2015/modules/ui-config/ui-config.service.js +0 -21
- package/esm2015/modules/viewkeeper/viewkeeper-boundary-info.js +0 -2
- package/esm2015/modules/viewkeeper/viewkeeper-fixed-styles.js +0 -2
- package/esm2015/modules/viewkeeper/viewkeeper-host-options.js +0 -10
- package/esm2015/modules/viewkeeper/viewkeeper-offset.js +0 -2
- package/esm2015/modules/viewkeeper/viewkeeper-options.js +0 -2
- package/esm2015/modules/viewkeeper/viewkeeper.directive.js +0 -113
- package/esm2015/modules/viewkeeper/viewkeeper.js +0 -254
- package/esm2015/modules/viewkeeper/viewkeeper.module.js +0 -16
- package/esm2015/modules/viewkeeper/viewkeeper.service.js +0 -38
- package/esm2015/modules/window/window-ref.js +0 -30
- package/esm2015/public-api.js +0 -60
- package/public-api.d.ts +0 -57
@@ -1,349 +0,0 @@
|
|
1
|
-
import { fromEvent, Subject } 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 = Object.assign(Object.assign({}, 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(Object.assign({}, 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWZmaXhlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL21vZHVsZXMvYWZmaXgvYWZmaXhlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsU0FBUyxFQUFjLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFFcEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFZbEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRFLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLGdDQUFnQyxFQUNoQyxvQ0FBb0MsR0FDckMsTUFBTSxhQUFhLENBQUM7QUFFckIsTUFBTSxvQkFBb0IsR0FBbUI7SUFDM0MsY0FBYyxFQUFFLHNCQUFzQixDQUFDLGNBQWM7SUFDckQsYUFBYSxFQUFFLEtBQUs7SUFDcEIsbUJBQW1CLEVBQUUsUUFBUTtJQUM3QixRQUFRLEVBQUUsS0FBSztJQUNmLFNBQVMsRUFBRSxPQUFPO0NBQ25CLENBQUM7QUFFRixNQUFNLE9BQU8sVUFBVTtJQWtFckIsWUFDVSxjQUEyQixFQUMzQixRQUFtQjtRQURuQixtQkFBYyxHQUFkLGNBQWMsQ0FBYTtRQUMzQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBUnJCLGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQXdCLENBQUM7UUFFcEQsb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRXRDLHFCQUFnQixHQUFHLElBQUksT0FBTyxFQUEyQixDQUFDO0lBSy9ELENBQUM7SUFwRUo7O09BRUc7SUFDSCxJQUFXLFlBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBVyxjQUFjO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FB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QUFDO1lBQzdELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUU7Z0JBQ25ELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDYixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzlCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQy9ELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FDYixDQUFDO0lBQ0osQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztTQUNqQztJQUNILENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLHNFQUFzRTtZQUN0RSx3RUFBd0U7WUFDeEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDdkQsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUM7U0FDbEM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgZnJvbUV2ZW50LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2t5QWZmaXhBdXRvRml0Q29udGV4dCB9IGZyb20gJy4vYWZmaXgtYXV0by1maXQtY29udGV4dCc7XG5cbmltcG9ydCB7IFNreUFmZml4T2Zmc2V0Q2hhbmdlIH0gZnJvbSAnLi9hZmZpeC1vZmZzZXQtY2hhbmdlJztcblxuaW1wb3J0IHsgU2t5QWZmaXhPZmZzZXQgfSBmcm9tICcuL2FmZml4LW9mZnNldCc7XG5cbmltcG9ydCB7IFNreUFmZml4Q29uZmlnIH0gZnJvbSAnLi9hZmZpeC1jb25maWcnO1xuXG5pbXBvcnQgeyBTa3lBZmZpeFBsYWNlbWVudCB9IGZyb20gJy4vYWZmaXgtcGxhY2VtZW50JztcblxuaW1wb3J0IHsgU2t5QWZmaXhQbGFjZW1lbnRDaGFuZ2UgfSBmcm9tICcuL2FmZml4LXBsYWNlbWVudC1jaGFuZ2UnO1xuXG5pbXBvcnQgeyBnZXRJbnZlcnNlUGxhY2VtZW50LCBnZXROZXh0UGxhY2VtZW50IH0gZnJvbSAnLi9hZmZpeC11dGlscyc7XG5cbmltcG9ydCB7XG4gIGdldEVsZW1lbnRPZmZzZXQsXG4gIGdldE92ZXJmbG93UGFyZW50cyxcbiAgaXNPZmZzZXRGdWxseVZpc2libGVXaXRoaW5QYXJlbnQsXG4gIGlzT2Zmc2V0UGFydGlhbGx5VmlzaWJsZVdpdGhpblBhcmVudCxcbn0gZnJvbSAnLi9kb20tdXRpbHMnO1xuXG5jb25zdCBERUZBVUxUX0FGRklYX0NPTkZJRzogU2t5QWZmaXhDb25maWcgPSB7XG4gIGF1dG9GaXRDb250ZXh0OiBTa3lBZmZpeEF1dG9GaXRDb250ZXh0Lk92ZXJmbG93UGFyZW50LFxuICBlbmFibGVBdXRvRml0OiBmYWxzZSxcbiAgaG9yaXpvbnRhbEFsaWdubWVudDogJ2NlbnRlcicsXG4gIGlzU3RpY2t5OiBmYWxzZSxcbiAgcGxhY2VtZW50OiAnYWJvdmUnLFxufTtcblxuZXhwb3J0IGNsYXNzIFNreUFmZml4ZXIge1xuICAvKipcbiAgICogRmlyZXMgd2hlbiB0aGUgYWZmaXhlZCBlbGVtZW50J3Mgb2Zmc2V0IGNoYW5nZXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG9mZnNldENoYW5nZSgpOiBPYnNlcnZhYmxlPFNreUFmZml4T2Zmc2V0Q2hhbmdlPiB7XG4gICAgcmV0dXJuIHRoaXMuX29mZnNldENoYW5nZS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSBiYXNlIGVsZW1lbnQncyBuZWFyZXN0IG92ZXJmbG93IHBhcmVudCBpcyBzY3JvbGxpbmcuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBuZWVkXG4gICAqIHRvIHBlcmZvcm0gYW4gYWRkaXRpb25hbCBhY3Rpb24gZHVyaW5nIHRoZSBzY3JvbGwgZXZlbnQgYnV0IGRvbid0IHdhbnQgdG8gZ2VuZXJhdGUgYW5vdGhlclxuICAgKiBldmVudCBsaXN0ZW5lci5cbiAgICovXG4gIHB1YmxpYyBnZXQgb3ZlcmZsb3dTY3JvbGwoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX292ZXJmbG93U2Nyb2xsLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIHBsYWNlbWVudCB2YWx1ZSBjaGFuZ2VzLiBBIGBudWxsYCB2YWx1ZSBpbmRpY2F0ZXMgdGhhdCBhIHN1aXRhYmxlXG4gICAqIHBsYWNlbWVudCBjb3VsZCBub3QgYmUgZm91bmQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBsYWNlbWVudENoYW5nZSgpOiBPYnNlcnZhYmxlPFNreUFmZml4UGxhY2VtZW50Q2hhbmdlPiB7XG4gICAgcmV0dXJuIHRoaXMuX3BsYWNlbWVudENoYW5nZS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGNvbmZpZygpOiBTa3lBZmZpeENvbmZpZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcbiAgfVxuXG4gIHByaXZhdGUgc2V0IGNvbmZpZyh2YWx1ZTogU2t5QWZmaXhDb25maWcpIHtcbiAgICBjb25zdCBtZXJnZWQgPSB7IC4uLkRFRkFVTFRfQUZGSVhfQ09ORklHLCAuLi52YWx1ZSB9O1xuXG4gICAgLy8gTWFrZSBzdXJlIG5vbmUgb2YgdGhlIHZhbHVlcyBhcmUgdW5kZWZpbmVkLlxuICAgIE9iamVjdC5rZXlzKG1lcmdlZCkuZm9yRWFjaCgoazoga2V5b2YgU2t5QWZmaXhDb25maWcpID0+IHtcbiAgICAgIGlmIChtZXJnZWRba10gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAobWVyZ2VkIGFzIGFueSlba10gPSBERUZBVUxUX0FGRklYX0NPTkZJR1trXTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuX2NvbmZpZyA9IG1lcmdlZDtcbiAgfVxuXG4gIHByaXZhdGUgYWZmaXhlZFJlY3Q6IENsaWVudFJlY3Q7XG5cbiAgcHJpdmF0ZSBiYXNlRWxlbWVudDogSFRNTEVsZW1lbnQ7XG5cbiAgcHJpdmF0ZSBiYXNlUmVjdDogQ2xpZW50UmVjdDtcblxuICBwcml2YXRlIGN1cnJlbnRPZmZzZXQ6IFNreUFmZml4T2Zmc2V0O1xuXG4gIHByaXZhdGUgY3VycmVudFBsYWNlbWVudDogU2t5QWZmaXhQbGFjZW1lbnQ7XG5cbiAgcHJpdmF0ZSBvdmVyZmxvd1BhcmVudHM6IEhUTUxFbGVtZW50W107XG5cbiAgcHJpdmF0ZSByZXNpemVMaXN0ZW5lcjogU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgc2Nyb2xsTGlzdGVuZXJzOiBGdW5jdGlvbltdO1xuXG4gIHByaXZhdGUgX2NvbmZpZzogU2t5QWZmaXhDb25maWc7XG5cbiAgcHJpdmF0ZSBfb2Zmc2V0Q2hhbmdlID0gbmV3IFN1YmplY3Q8U2t5QWZmaXhPZmZzZXRDaGFuZ2U+KCk7XG5cbiAgcHJpdmF0ZSBfb3ZlcmZsb3dTY3JvbGwgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHByaXZhdGUgX3BsYWNlbWVudENoYW5nZSA9IG5ldyBTdWJqZWN0PFNreUFmZml4UGxhY2VtZW50Q2hhbmdlPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWZmaXhlZEVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMlxuICApIHt9XG5cbiAgLyoqXG4gICAqIEFmZml4ZXMgYW4gZWxlbWVudCB0byBhIGJhc2UgZWxlbWVudC5cbiAgICogQHBhcmFtIGJhc2VFbGVtZW50IFRoZSBiYXNlIGVsZW1lbnQuXG4gICAqIEBwYXJhbSBjb25maWcgQ29uZmlndXJhdGlvbiBmb3IgdGhlIGFmZml4IGFjdGlvbi5cbiAgICovXG4gIHB1YmxpYyBhZmZpeFRvKGJhc2VFbGVtZW50OiBIVE1MRWxlbWVudCwgY29uZmlnPzogU2t5QWZmaXhDb25maWcpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2V0KCk7XG5cbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLmJhc2VFbGVtZW50ID0gYmFzZUVsZW1lbnQ7XG4gICAgdGhpcy5vdmVyZmxvd1BhcmVudHMgPSBnZXRPdmVyZmxvd1BhcmVudHMoYmFzZUVsZW1lbnQpO1xuXG4gICAgdGhpcy5hZmZpeCgpO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLmlzU3RpY2t5KSB7XG4gICAgICB0aGlzLmFkZFNjcm9sbExpc3RlbmVycygpO1xuICAgICAgdGhpcy5hZGRSZXNpemVMaXN0ZW5lcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZS1ydW5zIHRoZSBhZmZpeCBjYWxjdWxhdGlvbi5cbiAgICovXG4gIHB1YmxpYyByZWFmZml4KCk6IHZvaWQge1xuICAgIC8vIFJlc2V0IGN1cnJlbnQgcGxhY2VtZW50IHRvIHByZWZlcnJlZCBwbGFjZW1lbnQuXG4gICAgdGhpcy5jdXJyZW50UGxhY2VtZW50ID0gdGhpcy5jb25maWcucGxhY2VtZW50O1xuICAgIHRoaXMuYWZmaXgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgYWZmaXhlci5cbiAgICovXG4gIHB1YmxpYyBkZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMucmVzZXQoKTtcbiAgICB0aGlzLl9wbGFjZW1lbnRDaGFuZ2UuY29tcGxldGUoKTtcbiAgICB0aGlzLl9vZmZzZXRDaGFuZ2UuY29tcGxldGUoKTtcbiAgICB0aGlzLl9vdmVyZmxvd1Njcm9sbC5jb21wbGV0ZSgpO1xuXG4gICAgdGhpcy5fb2Zmc2V0Q2hhbmdlID1cbiAgICAgIHRoaXMuX3BsYWNlbWVudENoYW5nZSA9XG4gICAgICB0aGlzLl9vdmVyZmxvd1Njcm9sbCA9XG4gICAgICAgIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgYWZmaXgoKTogdm9pZCB7XG4gICAgdGhpcy5iYXNlUmVjdCA9IHRoaXMuYmFzZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgdGhpcy5hZmZpeGVkUmVjdCA9IHRoaXMuYWZmaXhlZEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICBjb25zdCBvZmZzZXQgPSB0aGlzLmdldE9mZnNldCgpO1xuXG4gICAgaWYgKHRoaXMuaXNOZXdPZmZzZXQob2Zmc2V0KSkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmFmZml4ZWRFbGVtZW50LCAndG9wJywgYCR7b2Zmc2V0LnRvcH1weGApO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmFmZml4ZWRFbGVtZW50LCAnbGVmdCcsIGAke29mZnNldC5sZWZ0fXB4YCk7XG4gICAgICB0aGlzLl9vZmZzZXRDaGFuZ2UubmV4dCh7IG9mZnNldCB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldE9mZnNldCgpOiBTa3lBZmZpeE9mZnNldCB7XG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5nZXRBdXRvRml0Q29udGV4dFBhcmVudCgpO1xuXG4gICAgY29uc3QgbWF4QXR0ZW1wdHMgPSA0O1xuICAgIGxldCBhdHRlbXB0cyA9IDA7XG5cbiAgICBsZXQgaXNBZmZpeGVkRWxlbWVudEZ1bGx5VmlzaWJsZSA9IGZhbHNlO1xuICAgIGxldCBvZmZzZXQ6IFNreUFmZml4T2Zmc2V0O1xuICAgIGxldCBwbGFjZW1lbnQgPSB0aGlzLmNvbmZpZy5wbGFjZW1lbnQ7XG5cbiAgICBkbyB7XG4gICAgICBvZmZzZXQgPSB0aGlzLmdldFByZWZlcnJlZE9mZnNldChwbGFjZW1lbnQpO1xuICAgICAgaXNBZmZpeGVkRWxlbWVudEZ1bGx5VmlzaWJsZSA9IGlzT2Zmc2V0RnVsbHlWaXNpYmxlV2l0aGluUGFyZW50KFxuICAgICAgICBwYXJlbnQsXG4gICAgICAgIG9mZnNldCxcbiAgICAgICAgdGhpcy5jb25maWcuYXV0b0ZpdE92ZXJmbG93T2Zmc2V0XG4gICAgICApO1xuXG4gICAgICBpZiAoIXRoaXMuY29uZmlnLmVuYWJsZUF1dG9GaXQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNBZmZpeGVkRWxlbWVudEZ1bGx5VmlzaWJsZSkge1xuICAgICAgICBwbGFjZW1lbnQgPVxuICAgICAgICAgIGF0dGVtcHRzICUgMiA9PT0gMFxuICAgICAgICAgICAgPyBnZXRJbnZlcnNlUGxhY2VtZW50KHBsYWNlbWVudClcbiAgICAgICAgICAgIDogZ2V0TmV4dFBsYWNlbWVudChwbGFjZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBhdHRlbXB0cysrO1xuICAgIH0gd2hpbGUgKCFpc0FmZml4ZWRFbGVtZW50RnVsbHlWaXNpYmxlICYmIGF0dGVtcHRzIDwgbWF4QXR0ZW1wdHMpO1xuXG4gICAgaWYgKGlzQWZmaXhlZEVsZW1lbnRGdWxseVZpc2libGUpIHtcbiAgICAgIGlmICh0aGlzLmlzQmFzZUVsZW1lbnRWaXNpYmxlKCkpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlQbGFjZW1lbnRDaGFuZ2UocGxhY2VtZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1udWxsLWtleXdvcmQgKi9cbiAgICAgICAgdGhpcy5ub3RpZnlQbGFjZW1lbnRDaGFuZ2UobnVsbCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvZmZzZXQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLmVuYWJsZUF1dG9GaXQpIHtcbiAgICAgIC8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1udWxsLWtleXdvcmQgKi9cbiAgICAgIHRoaXMubm90aWZ5UGxhY2VtZW50Q2hhbmdlKG51bGwpO1xuICAgIH1cblxuICAgIC8vIE5vIHN1aXRhYmxlIHBsYWNlbWVudCB3YXMgZm91bmQsIHNvIHJldmVydCB0byBwcmVmZXJyZWQgcGxhY2VtZW50LlxuICAgIHJldHVybiB0aGlzLmdldFByZWZlcnJlZE9mZnNldCh0aGlzLmNvbmZpZy5wbGFjZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQcmVmZXJyZWRPZmZzZXQocGxhY2VtZW50OiBTa3lBZmZpeFBsYWNlbWVudCk6IFNreUFmZml4T2Zmc2V0IHtcbiAgICBjb25zdCBhZmZpeGVkUmVjdCA9IHRoaXMuYWZmaXhlZFJlY3Q7XG4gICAgY29uc3QgYmFzZVJlY3QgPSB0aGlzLmJhc2VSZWN0O1xuXG4gICAgY29uc3QgaG9yaXpvbnRhbEFsaWdubWVudCA9IHRoaXMuY29uZmlnLmhvcml6b250YWxBbGlnbm1lbnQ7XG4gICAgY29uc3QgdmVydGljYWxBbGlnbm1lbnQgPSB0aGlzLmNvbmZpZy52ZXJ0aWNhbEFsaWdubWVudDtcbiAgICBjb25zdCBlbmFibGVBdXRvRml0ID0gdGhpcy5jb25maWcuZW5hYmxlQXV0b0ZpdDtcblxuICAgIGxldCB0b3A6IG51bWJlcjtcbiAgICBsZXQgbGVmdDogbnVtYmVyO1xuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gJ2Fib3ZlJyB8fCBwbGFjZW1lbnQgPT09ICdiZWxvdycpIHtcbiAgICAgIGlmIChwbGFjZW1lbnQgPT09ICdhYm92ZScpIHtcbiAgICAgICAgdG9wID0gYmFzZVJlY3QudG9wIC0gYWZmaXhlZFJlY3QuaGVpZ2h0O1xuXG4gICAgICAgIHN3aXRjaCAodmVydGljYWxBbGlnbm1lbnQpIHtcbiAgICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgICAgdG9wID0gdG9wICsgYWZmaXhlZFJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnbWlkZGxlJzpcbiAgICAgICAgICAgIHRvcCA9IHRvcCArIGFmZml4ZWRSZWN0LmhlaWdodCAvIDI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9wID0gYmFzZVJlY3QuYm90dG9tO1xuXG4gICAgICAgIHN3aXRjaCAodmVydGljYWxBbGlnbm1lbnQpIHtcbiAgICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdtaWRkbGUnOlxuICAgICAgICAgICAgdG9wID0gdG9wIC0gYWZmaXhlZFJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgICB0b3AgPSB0b3AgLSBhZmZpeGVkUmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGhvcml6b250YWxBbGlnbm1lbnQpIHtcbiAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgbGVmdCA9IGJhc2VSZWN0LmxlZnQ7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBsZWZ0ID0gYmFzZVJlY3QubGVmdCArIGJhc2VSZWN0LndpZHRoIC8gMiAtIGFmZml4ZWRSZWN0LndpZHRoIC8gMjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgbGVmdCA9IGJhc2VSZWN0LnJpZ2h0IC0gYWZmaXhlZFJlY3Qud2lkdGg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwbGFjZW1lbnQgPT09ICdsZWZ0Jykge1xuICAgICAgICBsZWZ0ID0gYmFzZVJlY3QubGVmdCAtIGFmZml4ZWRSZWN0LndpZHRoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVmdCA9IGJhc2VSZWN0LnJpZ2h0O1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHZlcnRpY2FsQWxpZ25tZW50KSB7XG4gICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgdG9wID0gYmFzZVJlY3QudG9wO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ21pZGRsZSc6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdG9wID0gYmFzZVJlY3QudG9wICsgYmFzZVJlY3QuaGVpZ2h0IC8gMiAtIGFmZml4ZWRSZWN0LmhlaWdodCAvIDI7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICB0b3AgPSBiYXNlUmVjdC5ib3R0b20gLSBhZmZpeGVkUmVjdC5oZWlnaHQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IG9mZnNldDogU2t5QWZmaXhPZmZzZXQgPSB7IGxlZnQsIHRvcCB9O1xuICAgIGlmIChlbmFibGVBdXRvRml0KSB7XG4gICAgICBvZmZzZXQgPSB0aGlzLmFkanVzdE9mZnNldFRvT3ZlcmZsb3dQYXJlbnQoeyAuLi5vZmZzZXQgfSwgcGxhY2VtZW50KTtcbiAgICB9XG5cbiAgICBvZmZzZXQuYm90dG9tID0gb2Zmc2V0LnRvcCArIGFmZml4ZWRSZWN0LmhlaWdodDtcbiAgICBvZmZzZXQucmlnaHQgPSBvZmZzZXQubGVmdCArIGFmZml4ZWRSZWN0LndpZHRoO1xuXG4gICAgcmV0dXJuIG9mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTbGlnaHRseSBhZGp1c3QgdGhlIG9mZnNldCB0byBmaXQgd2l0aGluIHRoZSBzY3JvbGwgcGFyZW50J3MgYm91bmRhcmllcyBpZlxuICAgKiB0aGUgYWZmaXhlZCBlbGVtZW50IHdvdWxkIG90aGVyd2lzZSBiZSBjbGlwcGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBhZGp1c3RPZmZzZXRUb092ZXJmbG93UGFyZW50KFxuICAgIG9mZnNldDogU2t5QWZmaXhPZmZzZXQsXG4gICAgcGxhY2VtZW50OiBTa3lBZmZpeFBsYWNlbWVudFxuICApOiBTa3lBZmZpeE9mZnNldCB7XG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5nZXRBdXRvRml0Q29udGV4dFBhcmVudCgpO1xuICAgIGNvbnN0IHBhcmVudE9mZnNldCA9IGdldEVsZW1lbnRPZmZzZXQoXG4gICAgICBwYXJlbnQsXG4gICAgICB0aGlzLmNvbmZpZy5hdXRvRml0T3ZlcmZsb3dPZmZzZXRcbiAgICApO1xuXG4gICAgY29uc3QgYWZmaXhlZFJlY3QgPSB0aGlzLmFmZml4ZWRSZWN0O1xuICAgIGNvbnN0IGJhc2VSZWN0ID0gdGhpcy5iYXNlUmVjdDtcblxuICAgIC8vIEEgcGl4ZWwgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBsZWV3YXkgYmV0d2VlbiB0aGUgZWRnZSBvZiB0aGUgb3ZlcmZsb3cgcGFyZW50IGFuZCB0aGUgZWRnZVxuICAgIC8vIG9mIHRoZSBiYXNlIGVsZW1lbnQgYmVmb3JlIGl0IGRpc3NhcGVhcnMgZnJvbSB2aWV3LlxuICAgIC8vIElmIHRoZSB2aXNpYmxlIHBvcnRpb24gb2YgdGhlIGJhc2UgZWxlbWVudCBpcyBsZXNzIHRoYW4gdGhpcyBwaXhlbCB2YWx1ZSwgdGhlIGF1dG8tZml0XG4gICAgLy8gZnVuY3Rpb25hbGl0eSBhdHRlbXB0cyB0byBmaW5kIGFub3RoZXIgcGxhY2VtZW50LlxuICAgIGNvbnN0IGRlZmF1bHRQaXhlbFRvbGVyYW5jZSA9IDQwO1xuICAgIGxldCBwaXhlbFRvbGVyYW5jZTogbnVtYmVyO1xuXG4gICAgY29uc3Qgb3JpZ2luYWxPZmZzZXRUb3AgPSBvZmZzZXQudG9wO1xuICAgIGNvbnN0IG9yaWdpbmFsT2Zmc2V0TGVmdCA9IG9mZnNldC5sZWZ0O1xuXG4gICAgLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnN3aXRjaC1kZWZhdWx0ICovXG4gICAgc3dpdGNoIChwbGFjZW1lbnQpIHtcbiAgICAgIGNhc2UgJ2Fib3ZlJzpcbiAgICAgIGNhc2UgJ2JlbG93JzpcbiAgICAgICAgLy8gS2VlcCB0aGUgYWZmaXhlZCBlbGVtZW50IHdpdGhpbiB0aGUgb3ZlcmZsb3cgcGFyZW50LlxuICAgICAgICBpZiAob2Zmc2V0LmxlZnQgPCBwYXJlbnRPZmZzZXQubGVmdCkge1xuICAgICAgICAgIG9mZnNldC5sZWZ0ID0gcGFyZW50T2Zmc2V0LmxlZnQ7XG4gICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0LmxlZnQgKyBhZmZpeGVkUmVjdC53aWR0aCA+IHBhcmVudE9mZnNldC5yaWdodCkge1xuICAgICAgICAgIG9mZnNldC5sZWZ0ID0gcGFyZW50T2Zmc2V0LnJpZ2h0IC0gYWZmaXhlZFJlY3Qud2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVc2UgYSBzbWFsbGVyIHBpeGVsIHRvbGVyYW5jZSBpZiB0aGUgYmFzZSBlbGVtZW50IHdpZHRoIGlzIGxlc3MgdGhhbiB0aGUgZGVmYXVsdC5cbiAgICAgICAgcGl4ZWxUb2xlcmFuY2UgPSBNYXRoLm1pbihkZWZhdWx0UGl4ZWxUb2xlcmFuY2UsIGJhc2VSZWN0LndpZHRoKTtcblxuICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGFmZml4ZWQgZWxlbWVudCBuZXZlciBkZXRhY2hlcyBmcm9tIHRoZSBiYXNlIGVsZW1lbnQuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBvZmZzZXQubGVmdCArIHBpeGVsVG9sZXJhbmNlID4gYmFzZVJlY3QucmlnaHQgfHxcbiAgICAgICAgICBvZmZzZXQubGVmdCArIGFmZml4ZWRSZWN0LndpZHRoIC0gcGl4ZWxUb2xlcmFuY2UgPCBiYXNlUmVjdC5sZWZ0XG4gICAgICAgICkge1xuICAgICAgICAgIG9mZnNldC5sZWZ0ID0gb3JpZ2luYWxPZmZzZXRMZWZ0O1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAvLyBLZWVwIHRoZSBhZmZpeGVkIGVsZW1lbnQgd2l0aGluIHRoZSBvdmVyZmxvdyBwYXJlbnQuXG4gICAgICAgIGlmIChvZmZzZXQudG9wIDwgcGFyZW50T2Zmc2V0LnRvcCkge1xuICAgICAgICAgIG9mZnNldC50b3AgPSBwYXJlbnRPZmZzZXQudG9wO1xuICAgICAgICB9IGVsc2UgaWYgKG9mZnNldC50b3AgKyBhZmZpeGVkUmVjdC5oZWlnaHQgPiBwYXJlbnRPZmZzZXQuYm90dG9tKSB7XG4gICAgICAgICAgb2Zmc2V0LnRvcCA9IHBhcmVudE9mZnNldC5ib3R0b20gLSBhZmZpeGVkUmVjdC5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVc2UgYSBzbWFsbGVyIHBpeGVsIHRvbGVyYW5jZSBpZiB0aGUgYmFzZSBlbGVtZW50IGhlaWdodCBpcyBsZXNzIHRoYW4gdGhlIGRlZmF1bHQuXG4gICAgICAgIHBpeGVsVG9sZXJhbmNlID0gTWF0aC5taW4oZGVmYXVsdFBpeGVsVG9sZXJhbmNlLCBiYXNlUmVjdC5oZWlnaHQpO1xuXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgYWZmaXhlZCBlbGVtZW50IG5ldmVyIGRldGFjaGVzIGZyb20gdGhlIGJhc2UgZWxlbWVudC5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIG9mZnNldC50b3AgKyBwaXhlbFRvbGVyYW5jZSA+IGJhc2VSZWN0LmJvdHRvbSB8fFxuICAgICAgICAgIG9mZnNldC50b3AgKyBhZmZpeGVkUmVjdC5oZWlnaHQgLSBwaXhlbFRvbGVyYW5jZSA8IGJhc2VSZWN0LnRvcFxuICAgICAgICApIHtcbiAgICAgICAgICBvZmZzZXQudG9wID0gb3JpZ2luYWxPZmZzZXRUb3A7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbW1lZGlhdGVPdmVyZmxvd1BhcmVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMub3ZlcmZsb3dQYXJlbnRzW3RoaXMub3ZlcmZsb3dQYXJlbnRzLmxlbmd0aCAtIDFdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBdXRvRml0Q29udGV4dFBhcmVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgYm9keUVsZW1lbnQgPSB0aGlzLm92ZXJmbG93UGFyZW50c1swXTtcblxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5hdXRvRml0Q29udGV4dCA9PT0gU2t5QWZmaXhBdXRvRml0Q29udGV4dC5PdmVyZmxvd1BhcmVudFxuICAgICAgPyB0aGlzLmdldEltbWVkaWF0ZU92ZXJmbG93UGFyZW50KClcbiAgICAgIDogYm9keUVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIG5vdGlmeVBsYWNlbWVudENoYW5nZShwbGFjZW1lbnQ6IFNreUFmZml4UGxhY2VtZW50IHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmN1cnJlbnRQbGFjZW1lbnQgIT09IHBsYWNlbWVudCkge1xuICAgICAgdGhpcy5jdXJyZW50UGxhY2VtZW50ID0gcGxhY2VtZW50O1xuICAgICAgdGhpcy5fcGxhY2VtZW50Q2hhbmdlLm5leHQoe1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMucmVtb3ZlU2Nyb2xsTGlzdGVuZXJzKCk7XG4gICAgdGhpcy5yZW1vdmVSZXNpemVMaXN0ZW5lcigpO1xuXG4gICAgdGhpcy5fY29uZmlnID1cbiAgICAgIHRoaXMuYWZmaXhlZFJlY3QgPVxuICAgICAgdGhpcy5iYXNlRWxlbWVudCA9XG4gICAgICB0aGlzLmJhc2VSZWN0ID1cbiAgICAgIHRoaXMuY3VycmVudFBsYWNlbWVudCA9XG4gICAgICB0aGlzLmN1cnJlbnRPZmZzZXQgPVxuICAgICAgdGhpcy5vdmVyZmxvd1BhcmVudHMgPVxuICAgICAgICB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGlzTmV3T2Zmc2V0KG9mZnNldDogU2t5QWZmaXhPZmZzZXQpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jdXJyZW50T2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY3VycmVudE9mZnNldCA9IG9mZnNldDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRoaXMuY3VycmVudE9mZnNldC50b3AgPT09IG9mZnNldC50b3AgJiZcbiAgICAgIHRoaXMuY3VycmVudE9mZnNldC5sZWZ0ID09PSBvZmZzZXQubGVmdFxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudE9mZnNldCA9IG9mZnNldDtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0Jhc2VFbGVtZW50VmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNPZmZzZXRQYXJ0aWFsbHlWaXNpYmxlV2l0aGluUGFyZW50KFxuICAgICAgdGhpcy5nZXRJbW1lZGlhdGVPdmVyZmxvd1BhcmVudCgpLFxuICAgICAge1xuICAgICAgICB0b3A6IHRoaXMuYmFzZVJlY3QudG9wLFxuICAgICAgICBsZWZ0OiB0aGlzLmJhc2VSZWN0LmxlZnQsXG4gICAgICAgIHJpZ2h0OiB0aGlzLmJhc2VSZWN0LnJpZ2h0LFxuICAgICAgICBib3R0b206IHRoaXMuYmFzZVJlY3QuYm90dG9tLFxuICAgICAgfSxcbiAgICAgIHRoaXMuY29uZmlnLmF1dG9GaXRPdmVyZmxvd09mZnNldFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFkZFNjcm9sbExpc3RlbmVycygpOiB2b2lkIHtcbiAgICB0aGlzLnNjcm9sbExpc3RlbmVycyA9IHRoaXMub3ZlcmZsb3dQYXJlbnRzLm1hcCgocGFyZW50RWxlbWVudCkgPT4ge1xuICAgICAgY29uc3Qgb3ZlcmZsb3cgPVxuICAgICAgICBwYXJlbnRFbGVtZW50ID09PSBkb2N1bWVudC5ib2R5ID8gJ3dpbmRvdycgOiBwYXJlbnRFbGVtZW50O1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIubGlzdGVuKG92ZXJmbG93LCAnc2Nyb2xsJywgKCkgPT4ge1xuICAgICAgICB0aGlzLmFmZml4KCk7XG4gICAgICAgIHRoaXMuX292ZXJmbG93U2Nyb2xsLm5leHQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRSZXNpemVMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2l6ZUxpc3RlbmVyID0gZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpLnN1YnNjcmliZSgoKSA9PlxuICAgICAgdGhpcy5hZmZpeCgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlUmVzaXplTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVzaXplTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMucmVzaXplTGlzdGVuZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMucmVzaXplTGlzdGVuZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVTY3JvbGxMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2Nyb2xsTGlzdGVuZXJzKSB7XG4gICAgICAvLyBSZW1vdmUgcmVuZGVyZXItZ2VuZXJhdGVkIGxpc3RlbmVycyBieSBjYWxsaW5nIHRoZSBsaXN0ZW5lciBpdHNlbGYuXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy85MzY4I2lzc3VlY29tbWVudC0yMjcxOTk3NzhcbiAgICAgIHRoaXMuc2Nyb2xsTGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiBsaXN0ZW5lcigpKTtcbiAgICAgIHRoaXMuc2Nyb2xsTGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxufVxuIl19
|
@@ -1,77 +0,0 @@
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbW9kdWxlcy9hZmZpeC9kb20tdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsT0FBb0IsRUFDcEIsZUFBK0IsRUFBRTtJQUVqQyxNQUFNLGtCQUFrQixHQUFHLFlBQVksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0lBQ3BELE1BQU0sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7SUFDaEQsTUFBTSxpQkFBaUIsR0FBRyxZQUFZLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztJQUNsRCxNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUU5QyxJQUFJLEdBQVcsQ0FBQztJQUNoQixJQUFJLElBQVksQ0FBQztJQUNqQixJQUFJLEtBQWEsQ0FBQztJQUNsQixJQUFJLE1BQWMsQ0FBQztJQUVuQixJQUFJLE9BQU8sS0FBSyxRQUFRLENBQUMsSUFBSSxFQUFFO1FBQzdCLElBQUksR0FBRyxDQUFDLENBQUM7UUFDVCxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ1IsS0FBSyxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDO1FBQzdDLE1BQU0sR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQztLQUNoRDtTQUFNO1FBQ0wsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDbkQsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDdkIsR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUM7UUFDckIsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDekIsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7S0FDNUI7SUFFRCxNQUFNLElBQUksa0JBQWtCLENBQUM7SUFDN0IsSUFBSSxJQUFJLGdCQUFnQixDQUFDO0lBQ3pCLEtBQUssSUFBSSxpQkFBaUIsQ0FBQztJQUMzQixHQUFHLElBQUksZUFBZSxDQUFDO0lBRXZCLE9BQU87UUFDTCxNQUFNO1FBQ04sSUFBSTtRQUNKLEtBQUs7UUFDTCxHQUFHO0tBQ0osQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsS0FBa0I7SUFDbkQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDekMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUU5QixJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO0lBRXJDLE9BQ0UsYUFBYSxLQUFLLFNBQVM7UUFDM0IsYUFBYSxLQUFLLFdBQVc7UUFDN0IsYUFBYSxZQUFZLFdBQVcsRUFDcEM7UUFDQSxNQUFNLFNBQVMsR0FBRyxNQUFNO2FBQ3JCLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUM7YUFDMUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRTNCLElBQ0UsU0FBUyxLQUFLLE1BQU07WUFDcEIsU0FBUyxLQUFLLFFBQVE7WUFDdEIsU0FBUyxLQUFLLFFBQVEsRUFDdEI7WUFDQSxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQzdCO1FBRUQsYUFBYSxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUM7S0FDMUM7SUFFRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxnQ0FBZ0MsQ0FDOUMsTUFBbUIsRUFDbkIsTUFBc0IsRUFDdEIsWUFBNkI7SUFFN0IsTUFBTSxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBRTVELE9BQU8sQ0FBQyxDQUNOLFlBQVksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUc7UUFDN0IsWUFBWSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSztRQUNqQyxZQUFZLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNO1FBQ25DLFlBQVksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FDaEMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsb0NBQW9DLENBQ2xELE1BQW1CLEVBQ25CLE1BQXNCLEVBQ3RCLFlBQTZCO0lBRTdCLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUU1RCxPQUFPLENBQUMsQ0FDTixZQUFZLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNO1FBQ2pDLFlBQVksQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLElBQUk7UUFDakMsWUFBWSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsR0FBRztRQUNqQyxZQUFZLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQ2xDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2t5QWZmaXhPZmZzZXQgfSBmcm9tICcuL2FmZml4LW9mZnNldCc7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb2Zmc2V0IHZhbHVlcyBvZiBhIGdpdmVuIGVsZW1lbnQuXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgSFRNTCBlbGVtZW50LlxuICogQHBhcmFtIGJ1ZmZlck9mZnNldCBBbiBvcHRpb25hbCBvZmZzZXQgdG8gYWRkL3N1YnRyYWN0IHRvIHRoZSBlbGVtZW50J3MgYWN0dWFsIG9mZnNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVsZW1lbnRPZmZzZXQoXG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICBidWZmZXJPZmZzZXQ6IFNreUFmZml4T2Zmc2V0ID0ge31cbik6IFNreUFmZml4T2Zmc2V0IHtcbiAgY29uc3QgYnVmZmVyT2Zmc2V0Qm90dG9tID0gYnVmZmVyT2Zmc2V0LmJvdHRvbSB8fCAwO1xuICBjb25zdCBidWZmZXJPZmZzZXRMZWZ0ID0gYnVmZmVyT2Zmc2V0LmxlZnQgfHwgMDtcbiAgY29uc3QgYnVmZmVyT2Zmc2V0UmlnaHQgPSBidWZmZXJPZmZzZXQucmlnaHQgfHwgMDtcbiAgY29uc3QgYnVmZmVyT2Zmc2V0VG9wID0gYnVmZmVyT2Zmc2V0LnRvcCB8fCAwO1xuXG4gIGxldCB0b3A6IG51bWJlcjtcbiAgbGV0IGxlZnQ6IG51bWJlcjtcbiAgbGV0IHJpZ2h0OiBudW1iZXI7XG4gIGxldCBib3R0b206IG51bWJlcjtcblxuICBpZiAoZWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keSkge1xuICAgIGxlZnQgPSAwO1xuICAgIHRvcCA9IDA7XG4gICAgcmlnaHQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgYm90dG9tID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBjbGllbnRSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBsZWZ0ID0gY2xpZW50UmVjdC5sZWZ0O1xuICAgIHRvcCA9IGNsaWVudFJlY3QudG9wO1xuICAgIHJpZ2h0ID0gY2xpZW50UmVjdC5yaWdodDtcbiAgICBib3R0b20gPSBjbGllbnRSZWN0LmJvdHRvbTtcbiAgfVxuXG4gIGJvdHRvbSAtPSBidWZmZXJPZmZzZXRCb3R0b207XG4gIGxlZnQgKz0gYnVmZmVyT2Zmc2V0TGVmdDtcbiAgcmlnaHQgLT0gYnVmZmVyT2Zmc2V0UmlnaHQ7XG4gIHRvcCArPSBidWZmZXJPZmZzZXRUb3A7XG5cbiAgcmV0dXJuIHtcbiAgICBib3R0b20sXG4gICAgbGVmdCxcbiAgICByaWdodCxcbiAgICB0b3AsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPdmVyZmxvd1BhcmVudHMoY2hpbGQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRbXSB7XG4gIGNvbnN0IGJvZHlFbGVtZW50ID0gd2luZG93LmRvY3VtZW50LmJvZHk7XG4gIGNvbnN0IHJlc3VsdHMgPSBbYm9keUVsZW1lbnRdO1xuXG4gIGxldCBwYXJlbnRFbGVtZW50ID0gY2hpbGQucGFyZW50Tm9kZTtcblxuICB3aGlsZSAoXG4gICAgcGFyZW50RWxlbWVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgcGFyZW50RWxlbWVudCAhPT0gYm9keUVsZW1lbnQgJiZcbiAgICBwYXJlbnRFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnRcbiAgKSB7XG4gICAgY29uc3Qgb3ZlcmZsb3dZID0gd2luZG93XG4gICAgICAuZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnRFbGVtZW50LCB1bmRlZmluZWQpXG4gICAgICAub3ZlcmZsb3dZLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAoXG4gICAgICBvdmVyZmxvd1kgPT09ICdhdXRvJyB8fFxuICAgICAgb3ZlcmZsb3dZID09PSAnaGlkZGVuJyB8fFxuICAgICAgb3ZlcmZsb3dZID09PSAnc2Nyb2xsJ1xuICAgICkge1xuICAgICAgcmVzdWx0cy5wdXNoKHBhcmVudEVsZW1lbnQpO1xuICAgIH1cblxuICAgIHBhcmVudEVsZW1lbnQgPSBwYXJlbnRFbGVtZW50LnBhcmVudE5vZGU7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuLyoqXG4gKiBDb25maXJtcyBvZmZzZXQgaXMgZnVsbHkgdmlzaWJsZSB3aXRoaW4gYSBwYXJlbnQgZWxlbWVudC5cbiAqIEBwYXJhbSBwYXJlbnRcbiAqIEBwYXJhbSBvZmZzZXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzT2Zmc2V0RnVsbHlWaXNpYmxlV2l0aGluUGFyZW50KFxuICBwYXJlbnQ6IEhUTUxFbGVtZW50LFxuICBvZmZzZXQ6IFNreUFmZml4T2Zmc2V0LFxuICBidWZmZXJPZmZzZXQ/OiBTa3lBZmZpeE9mZnNldFxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IHBhcmVudE9mZnNldCA9IGdldEVsZW1lbnRPZmZzZXQocGFyZW50LCBidWZmZXJPZmZzZXQpO1xuXG4gIHJldHVybiAhKFxuICAgIHBhcmVudE9mZnNldC50b3AgPiBvZmZzZXQudG9wIHx8XG4gICAgcGFyZW50T2Zmc2V0LnJpZ2h0IDwgb2Zmc2V0LnJpZ2h0IHx8XG4gICAgcGFyZW50T2Zmc2V0LmJvdHRvbSA8IG9mZnNldC5ib3R0b20gfHxcbiAgICBwYXJlbnRPZmZzZXQubGVmdCA+IG9mZnNldC5sZWZ0XG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09mZnNldFBhcnRpYWxseVZpc2libGVXaXRoaW5QYXJlbnQoXG4gIHBhcmVudDogSFRNTEVsZW1lbnQsXG4gIG9mZnNldDogU2t5QWZmaXhPZmZzZXQsXG4gIGJ1ZmZlck9mZnNldD86IFNreUFmZml4T2Zmc2V0XG4pOiBib29sZWFuIHtcbiAgY29uc3QgcGFyZW50T2Zmc2V0ID0gZ2V0RWxlbWVudE9mZnNldChwYXJlbnQsIGJ1ZmZlck9mZnNldCk7XG5cbiAgcmV0dXJuICEoXG4gICAgcGFyZW50T2Zmc2V0LnRvcCA+PSBvZmZzZXQuYm90dG9tIHx8XG4gICAgcGFyZW50T2Zmc2V0LnJpZ2h0IDw9IG9mZnNldC5sZWZ0IHx8XG4gICAgcGFyZW50T2Zmc2V0LmJvdHRvbSA8PSBvZmZzZXQudG9wIHx8XG4gICAgcGFyZW50T2Zmc2V0LmxlZnQgPj0gb2Zmc2V0LnJpZ2h0XG4gICk7XG59XG4iXX0=
|
@@ -1,79 +0,0 @@
|
|
1
|
-
import { Injectable, } from '@angular/core';
|
2
|
-
import { fromEvent as observableFromEvent, Subject } from 'rxjs';
|
3
|
-
import { debounceTime, takeUntil } from 'rxjs/operators';
|
4
|
-
import * as i0 from "@angular/core";
|
5
|
-
import * as i1 from "../mutation/mutation-observer-service";
|
6
|
-
/**
|
7
|
-
* @internal
|
8
|
-
*/
|
9
|
-
export class SkyDockDomAdapterService {
|
10
|
-
constructor(mutationService, rendererFactory) {
|
11
|
-
this.mutationService = mutationService;
|
12
|
-
this.ngUnsubscribe = new Subject();
|
13
|
-
this.renderer = rendererFactory.createRenderer(undefined, undefined);
|
14
|
-
}
|
15
|
-
ngOnDestroy() {
|
16
|
-
if (this.observer) {
|
17
|
-
this.observer.disconnect();
|
18
|
-
}
|
19
|
-
this.ngUnsubscribe.next();
|
20
|
-
if (this.styleElement) {
|
21
|
-
this.destroyStyleElement();
|
22
|
-
}
|
23
|
-
this.currentDockHeight =
|
24
|
-
this.ngUnsubscribe =
|
25
|
-
this.observer =
|
26
|
-
this.styleElement =
|
27
|
-
undefined;
|
28
|
-
}
|
29
|
-
setSticky(elementRef) {
|
30
|
-
this.renderer.addClass(elementRef.nativeElement, 'sky-dock-sticky');
|
31
|
-
}
|
32
|
-
setZIndex(zIndex, elementRef) {
|
33
|
-
this.renderer.setStyle(elementRef.nativeElement, 'z-index', zIndex);
|
34
|
-
}
|
35
|
-
unbindDock(elementRef) {
|
36
|
-
this.renderer.addClass(elementRef.nativeElement, 'sky-dock-unbound');
|
37
|
-
}
|
38
|
-
watchDomChanges(elementRef) {
|
39
|
-
this.observer = this.mutationService.create(() => {
|
40
|
-
this.adjustBodyStyles(elementRef);
|
41
|
-
});
|
42
|
-
this.observer.observe(elementRef.nativeElement, {
|
43
|
-
attributes: true,
|
44
|
-
childList: true,
|
45
|
-
characterData: true,
|
46
|
-
subtree: true,
|
47
|
-
});
|
48
|
-
observableFromEvent(window, 'resize')
|
49
|
-
.pipe(debounceTime(250), takeUntil(this.ngUnsubscribe))
|
50
|
-
.subscribe(() => this.adjustBodyStyles(elementRef));
|
51
|
-
}
|
52
|
-
adjustBodyStyles(elementRef) {
|
53
|
-
const dockHeight = elementRef.nativeElement.getBoundingClientRect().height;
|
54
|
-
if (dockHeight === this.currentDockHeight) {
|
55
|
-
return;
|
56
|
-
}
|
57
|
-
// Create a style element to avoid overwriting any existing inline body styles.
|
58
|
-
const styleElement = this.renderer.createElement('style');
|
59
|
-
const textNode = this.renderer.createText(`body { margin-bottom: ${dockHeight}px; }`);
|
60
|
-
// Apply a `data-` attribute to make unit testing easier.
|
61
|
-
this.renderer.setAttribute(styleElement, 'data-test-selector', 'sky-layout-dock-bottom-styles');
|
62
|
-
this.renderer.appendChild(styleElement, textNode);
|
63
|
-
this.renderer.appendChild(document.head, styleElement);
|
64
|
-
if (this.styleElement) {
|
65
|
-
this.destroyStyleElement();
|
66
|
-
}
|
67
|
-
this.currentDockHeight = dockHeight;
|
68
|
-
this.styleElement = styleElement;
|
69
|
-
}
|
70
|
-
destroyStyleElement() {
|
71
|
-
this.renderer.removeChild(document.head, this.styleElement);
|
72
|
-
}
|
73
|
-
}
|
74
|
-
SkyDockDomAdapterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.14", ngImport: i0, type: SkyDockDomAdapterService, deps: [{ token: i1.MutationObserverService }, { token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable });
|
75
|
-
SkyDockDomAdapterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.14", ngImport: i0, type: SkyDockDomAdapterService });
|
76
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.14", ngImport: i0, type: SkyDockDomAdapterService, decorators: [{
|
77
|
-
type: Injectable
|
78
|
-
}], ctorParameters: function () { return [{ type: i1.MutationObserverService }, { type: i0.RendererFactory2 }]; } });
|
79
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jay1kb20tYWRhcHRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbW9kdWxlcy9kb2NrL2RvY2stZG9tLWFkYXB0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsVUFBVSxHQUlYLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxTQUFTLElBQUksbUJBQW1CLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWpFLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUl6RDs7R0FFRztBQUVILE1BQU0sT0FBTyx3QkFBd0I7SUFXbkMsWUFDVSxlQUF3QyxFQUNoRCxlQUFpQztRQUR6QixvQkFBZSxHQUFmLGVBQWUsQ0FBeUI7UUFUMUMsa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBWTFDLElBQUksQ0FBQyxRQUFRLEdBQUcsZUFBZSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDNUI7UUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTFCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztTQUM1QjtRQUVELElBQUksQ0FBQyxpQkFBaUI7WUFDcEIsSUFBSSxDQUFDLGFBQWE7Z0JBQ2xCLElBQUksQ0FBQyxRQUFRO29CQUNiLElBQUksQ0FBQyxZQUFZO3dCQUNmLFNBQVMsQ0FBQztJQUNoQixDQUFDO0lBRU0sU0FBUyxDQUFDLFVBQXNCO1FBQ3JDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRU0sU0FBUyxDQUFDLE1BQWMsRUFBRSxVQUFzQjtRQUNyRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRU0sVUFBVSxDQUFDLFVBQXNCO1FBQ3RDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRU0sZUFBZSxDQUFDLFVBQXNCO1FBQzNDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQy9DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUU7WUFDOUMsVUFBVSxFQUFFLElBQUk7WUFDaEIsU0FBUyxFQUFFLElBQUk7WUFDZixhQUFhLEVBQUUsSUFBSTtZQUNuQixPQUFPLEVBQUUsSUFBSTtTQUNkLENBQUMsQ0FBQztRQUVILG1CQUFtQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUM7YUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ3RELFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsVUFBc0I7UUFDN0MsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUMzRSxJQUFJLFVBQVUsS0FBSyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDekMsT0FBTztTQUNSO1FBRUQsK0VBQStFO1FBQy9FLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUN2Qyx5QkFBeUIsVUFBVSxPQUFPLENBQzNDLENBQUM7UUFFRix5REFBeUQ7UUFDekQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQ3hCLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsK0JBQStCLENBQ2hDLENBQUM7UUFFRixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztRQUV2RCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7U0FDNUI7UUFFRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0lBQ25DLENBQUM7SUFFTyxtQkFBbUI7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDOUQsQ0FBQzs7c0hBaEdVLHdCQUF3QjswSEFBeEIsd0JBQXdCOzRGQUF4Qix3QkFBd0I7a0JBRHBDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBFbGVtZW50UmVmLFxuICBJbmplY3RhYmxlLFxuICBPbkRlc3Ryb3ksXG4gIFJlbmRlcmVyMixcbiAgUmVuZGVyZXJGYWN0b3J5Mixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IGZyb21FdmVudCBhcyBvYnNlcnZhYmxlRnJvbUV2ZW50LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBNdXRhdGlvbk9ic2VydmVyU2VydmljZSB9IGZyb20gJy4uL211dGF0aW9uL211dGF0aW9uLW9ic2VydmVyLXNlcnZpY2UnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2t5RG9ja0RvbUFkYXB0ZXJTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBjdXJyZW50RG9ja0hlaWdodDogbnVtYmVyO1xuXG4gIHByaXZhdGUgbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBvYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlcjtcblxuICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjI7XG5cbiAgcHJpdmF0ZSBzdHlsZUVsZW1lbnQ6IEhUTUxTdHlsZUVsZW1lbnQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBtdXRhdGlvblNlcnZpY2U6IE11dGF0aW9uT2JzZXJ2ZXJTZXJ2aWNlLFxuICAgIHJlbmRlcmVyRmFjdG9yeTogUmVuZGVyZXJGYWN0b3J5MlxuICApIHtcbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vYnNlcnZlcikge1xuICAgICAgdGhpcy5vYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfVxuICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XG5cbiAgICBpZiAodGhpcy5zdHlsZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuZGVzdHJveVN0eWxlRWxlbWVudCgpO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudERvY2tIZWlnaHQgPVxuICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlID1cbiAgICAgIHRoaXMub2JzZXJ2ZXIgPVxuICAgICAgdGhpcy5zdHlsZUVsZW1lbnQgPVxuICAgICAgICB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0U3RpY2t5KGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3NreS1kb2NrLXN0aWNreScpO1xuICB9XG5cbiAgcHVibGljIHNldFpJbmRleCh6SW5kZXg6IG51bWJlciwgZWxlbWVudFJlZjogRWxlbWVudFJlZik6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnei1pbmRleCcsIHpJbmRleCk7XG4gIH1cblxuICBwdWJsaWMgdW5iaW5kRG9jayhlbGVtZW50UmVmOiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdza3ktZG9jay11bmJvdW5kJyk7XG4gIH1cblxuICBwdWJsaWMgd2F0Y2hEb21DaGFuZ2VzKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpOiB2b2lkIHtcbiAgICB0aGlzLm9ic2VydmVyID0gdGhpcy5tdXRhdGlvblNlcnZpY2UuY3JlYXRlKCgpID0+IHtcbiAgICAgIHRoaXMuYWRqdXN0Qm9keVN0eWxlcyhlbGVtZW50UmVmKTtcbiAgICB9KTtcblxuICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlLFxuICAgICAgc3VidHJlZTogdHJ1ZSxcbiAgICB9KTtcblxuICAgIG9ic2VydmFibGVGcm9tRXZlbnQod2luZG93LCAncmVzaXplJylcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgyNTApLCB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5hZGp1c3RCb2R5U3R5bGVzKGVsZW1lbnRSZWYpKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRqdXN0Qm9keVN0eWxlcyhlbGVtZW50UmVmOiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgY29uc3QgZG9ja0hlaWdodCA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG4gICAgaWYgKGRvY2tIZWlnaHQgPT09IHRoaXMuY3VycmVudERvY2tIZWlnaHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgYSBzdHlsZSBlbGVtZW50IHRvIGF2b2lkIG92ZXJ3cml0aW5nIGFueSBleGlzdGluZyBpbmxpbmUgYm9keSBzdHlsZXMuXG4gICAgY29uc3Qgc3R5bGVFbGVtZW50ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIGNvbnN0IHRleHROb2RlID0gdGhpcy5yZW5kZXJlci5jcmVhdGVUZXh0KFxuICAgICAgYGJvZHkgeyBtYXJnaW4tYm90dG9tOiAke2RvY2tIZWlnaHR9cHg7IH1gXG4gICAgKTtcblxuICAgIC8vIEFwcGx5IGEgYGRhdGEtYCBhdHRyaWJ1dGUgdG8gbWFrZSB1bml0IHRlc3RpbmcgZWFzaWVyLlxuICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKFxuICAgICAgc3R5bGVFbGVtZW50LFxuICAgICAgJ2RhdGEtdGVzdC1zZWxlY3RvcicsXG4gICAgICAnc2t5LWxheW91dC1kb2NrLWJvdHRvbS1zdHlsZXMnXG4gICAgKTtcblxuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50LCB0ZXh0Tm9kZSk7XG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChkb2N1bWVudC5oZWFkLCBzdHlsZUVsZW1lbnQpO1xuXG4gICAgaWYgKHRoaXMuc3R5bGVFbGVtZW50KSB7XG4gICAgICB0aGlzLmRlc3Ryb3lTdHlsZUVsZW1lbnQoKTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnREb2NrSGVpZ2h0ID0gZG9ja0hlaWdodDtcbiAgICB0aGlzLnN0eWxlRWxlbWVudCA9IHN0eWxlRWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgZGVzdHJveVN0eWxlRWxlbWVudCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKGRvY3VtZW50LmhlYWQsIHRoaXMuc3R5bGVFbGVtZW50KTtcbiAgfVxufVxuIl19
|
@@ -1,2 +0,0 @@
|
|
1
|
-
export {};
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jay1pbnNlcnQtY29tcG9uZW50LWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL21vZHVsZXMvZG9jay9kb2NrLWluc2VydC1jb21wb25lbnQtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGF0aWNQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTa3lEb2NrSXRlbUNvbmZpZyB9IGZyb20gJy4vZG9jay1pdGVtLWNvbmZpZyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2t5RG9ja0luc2VydENvbXBvbmVudENvbmZpZyBleHRlbmRzIFNreURvY2tJdGVtQ29uZmlnIHtcbiAgLyoqXG4gICAqIFN0YXRpYyBwcm92aWRlcnMgdG8gaW5qZWN0IGludG8gdGhlIGl0ZW0ncyBjb21wb25lbnQuXG4gICAqL1xuICBwcm92aWRlcnM/OiBTdGF0aWNQcm92aWRlcltdO1xufVxuIl19
|
@@ -1,2 +0,0 @@
|
|
1
|
-
export {};
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jay1pdGVtLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL21vZHVsZXMvZG9jay9kb2NrLWl0ZW0tY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbmZpZ3VyYXRpb24gdG8gYmUgdXNlZCBieSB0aGUgZG9ja2luZyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2t5RG9ja0l0ZW1Db25maWcge1xuICAvKipcbiAgICogVGhlIHN0YWNrIG9yZGVyIG9mIHRoZSBpdGVtLiBUaGUgaGlnaGVyIHRoZSBudW1iZXIsIHRoZSBoaWdoZXJcbiAgICogdGhlIGl0ZW0gd2lsbCBiZSBwbGFjZWQgaW4gdGhlIGRvY2suIEJ5IGRlZmF1bHQsIG5ldyBpdGVtcyB3aWxsIGJlIHBsYWNlZCBhdFxuICAgKiB0aGUgdG9wIG9mIHRoZSBzdGFjay5cbiAgICovXG4gIHN0YWNrT3JkZXI/OiBudW1iZXI7XG59XG4iXX0=
|
@@ -1,2 +0,0 @@
|
|
1
|
-
export {};
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jay1pdGVtLXJlZmVyZW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL21vZHVsZXMvZG9jay9kb2NrLWl0ZW0tcmVmZXJlbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZG9jayBpdGVtJ3MgY29tcG9uZW50IHJlZmVyZW5jZS5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNreURvY2tJdGVtUmVmZXJlbmNlPFQ+IHtcbiAgY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8VD47XG5cbiAgc3RhY2tPcmRlcjogbnVtYmVyO1xufVxuIl19
|
@@ -1,29 +0,0 @@
|
|
1
|
-
import { Subject } from 'rxjs';
|
2
|
-
/**
|
3
|
-
* Represents a single item added to the dock.
|
4
|
-
*/
|
5
|
-
export class SkyDockItem {
|
6
|
-
/**
|
7
|
-
* @param componentInstance The item's component instance.
|
8
|
-
* @param stackOrder The assigned stack order of the docked item.
|
9
|
-
*/
|
10
|
-
constructor(componentInstance, stackOrder) {
|
11
|
-
this.componentInstance = componentInstance;
|
12
|
-
this.stackOrder = stackOrder;
|
13
|
-
this._destroyed = new Subject();
|
14
|
-
}
|
15
|
-
/**
|
16
|
-
* An event that emits when the item is removed from the dock.
|
17
|
-
*/
|
18
|
-
get destroyed() {
|
19
|
-
return this._destroyed.asObservable();
|
20
|
-
}
|
21
|
-
/**
|
22
|
-
* Removes the item from the dock.
|
23
|
-
*/
|
24
|
-
destroy() {
|
25
|
-
this._destroyed.next();
|
26
|
-
this._destroyed.complete();
|
27
|
-
}
|
28
|
-
}
|
29
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jay1pdGVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbW9kdWxlcy9kb2NrL2RvY2staXRlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTNDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFdBQVc7SUFVdEI7OztPQUdHO0lBQ0gsWUFDa0IsaUJBQW9CLEVBQ3BCLFVBQWtCO1FBRGxCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBRztRQUNwQixlQUFVLEdBQVYsVUFBVSxDQUFRO1FBUjVCLGVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBU3RDLENBQUM7SUFoQko7O09BRUc7SUFDSCxJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFhRDs7T0FFRztJQUNJLE9BQU87UUFDWixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBzaW5nbGUgaXRlbSBhZGRlZCB0byB0aGUgZG9jay5cbiAqL1xuZXhwb3J0IGNsYXNzIFNreURvY2tJdGVtPFQ+IHtcbiAgLyoqXG4gICAqIEFuIGV2ZW50IHRoYXQgZW1pdHMgd2hlbiB0aGUgaXRlbSBpcyByZW1vdmVkIGZyb20gdGhlIGRvY2suXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlc3Ryb3llZCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fZGVzdHJveWVkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGVzdHJveWVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvKipcbiAgICogQHBhcmFtIGNvbXBvbmVudEluc3RhbmNlIFRoZSBpdGVtJ3MgY29tcG9uZW50IGluc3RhbmNlLlxuICAgKiBAcGFyYW0gc3RhY2tPcmRlciBUaGUgYXNzaWduZWQgc3RhY2sgb3JkZXIgb2YgdGhlIGRvY2tlZCBpdGVtLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGNvbXBvbmVudEluc3RhbmNlOiBULFxuICAgIHB1YmxpYyByZWFkb25seSBzdGFja09yZGVyOiBudW1iZXJcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBpdGVtIGZyb20gdGhlIGRvY2suXG4gICAqL1xuICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kZXN0cm95ZWQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpO1xuICB9XG59XG4iXX0=
|