ng-virtual-list 18.11.3 → 18.12.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 +115 -111
- package/esm2022/lib/components/ng-list-item/base/base-virtual-list-item-component.mjs +170 -61
- package/esm2022/lib/components/ng-list-item/const/index.mjs +41 -2
- package/esm2022/lib/components/ng-list-item/interfaces/template-context.mjs +1 -1
- package/esm2022/lib/components/ng-list-item/ng-virtual-list-item.component.mjs +55 -51
- package/esm2022/lib/components/ng-list-item/ng-virtual-list-item.module.mjs +5 -5
- package/esm2022/lib/components/ng-list-item/utils/create-display-id.mjs +7 -1
- package/esm2022/lib/components/ng-list-item/utils/get-element-by-index.mjs +17 -3
- package/esm2022/lib/components/ng-list-item/utils/index.mjs +3 -2
- package/esm2022/lib/components/ng-list-item/utils/matrix-3d.mjs +18 -0
- package/esm2022/lib/components/ng-prerender-container/components/ng-prerender-list/ng-prerender-list.component.mjs +172 -47
- package/esm2022/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.component.mjs +32 -16
- package/esm2022/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.module.mjs +5 -5
- package/esm2022/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.component.mjs +58 -34
- package/esm2022/lib/components/ng-prerender-container/core/prerender-track-box.mjs +37 -7
- package/esm2022/lib/components/ng-prerender-container/interfaces/refresh-params.mjs +1 -1
- package/esm2022/lib/components/ng-prerender-container/ng-prerender-container.component.mjs +58 -28
- package/esm2022/lib/components/ng-scroll-bar/const/index.mjs +8 -1
- package/esm2022/lib/components/ng-scroll-bar/interfaces/scroll-bar-template-context.mjs +1 -1
- package/esm2022/lib/components/ng-scroll-bar/ng-scroll-bar.component.mjs +236 -88
- package/esm2022/lib/components/ng-scroll-view/base/base-scroll-view.component.mjs +170 -44
- package/esm2022/lib/components/ng-scroll-view/const/index.mjs +4 -2
- package/esm2022/lib/components/ng-scroll-view/interfaces/scroll-to-params.mjs +1 -1
- package/esm2022/lib/components/ng-scroll-view/ng-scroll-view.component.mjs +610 -99
- package/esm2022/lib/components/ng-scroll-view/utils/calculate-direction.mjs +7 -1
- package/esm2022/lib/components/ng-scroll-view/utils/calculate-velocity.mjs +12 -0
- package/esm2022/lib/components/ng-scroll-view/utils/get-dir.mjs +10 -0
- package/esm2022/lib/components/ng-scroll-view/utils/index.mjs +4 -2
- package/esm2022/lib/components/ng-scroll-view/utils/matrix-3d.mjs +15 -0
- package/esm2022/lib/components/ng-scroller/enums/scroller-directions.mjs +1 -1
- package/esm2022/lib/components/ng-scroller/ng-scroller.component.mjs +342 -160
- package/esm2022/lib/const/index.mjs +50 -10
- package/esm2022/lib/core/cache-map.mjs +1 -54
- package/esm2022/lib/core/const/index.mjs +3 -0
- package/esm2022/lib/core/enums/index.mjs +3 -0
- package/esm2022/lib/core/enums/item-display-methods.mjs +14 -0
- package/esm2022/lib/core/events/index.mjs +3 -0
- package/esm2022/lib/core/events/track-box-events.mjs +12 -0
- package/esm2022/lib/core/interfaces/get-item-position-options.mjs +2 -0
- package/esm2022/lib/core/interfaces/get-metrics-returns.mjs +2 -0
- package/esm2022/lib/core/interfaces/index.mjs +2 -0
- package/esm2022/lib/core/interfaces/item.mjs +2 -0
- package/esm2022/lib/core/interfaces/metrics.mjs +2 -0
- package/esm2022/lib/core/interfaces/recalculate-metrics-options.mjs +2 -0
- package/esm2022/lib/core/interfaces/update-collection-options.mjs +2 -0
- package/esm2022/lib/core/interfaces/update-collection-returns.mjs +2 -0
- package/esm2022/lib/core/track-box.mjs +601 -191
- package/esm2022/lib/core/tracker.mjs +14 -8
- package/esm2022/lib/core/types/cache-map-events.mjs +2 -0
- package/esm2022/lib/core/types/cache-map-listeners.mjs +2 -0
- package/esm2022/lib/core/types/cache.mjs +2 -0
- package/esm2022/lib/core/types/index.mjs +2 -0
- package/esm2022/lib/core/types/on-change-event-listener.mjs +2 -0
- package/esm2022/lib/core/types/on-tick-event-listener.mjs +2 -0
- package/esm2022/lib/core/utils/get-service-id-prop.mjs +10 -0
- package/esm2022/lib/core/utils/index.mjs +3 -0
- package/esm2022/lib/directives/index.mjs +3 -3
- package/esm2022/lib/directives/locale-sensitive/locale-sensitive.directive.mjs +34 -13
- package/esm2022/lib/directives/virtual-click/virtual-click.directive.mjs +67 -0
- package/esm2022/lib/directives/virtual-click/virtual-click.module.mjs +19 -0
- package/esm2022/lib/enums/alignments.mjs +12 -0
- package/esm2022/lib/enums/collapsing-modes.mjs +22 -0
- package/esm2022/lib/enums/index.mjs +8 -4
- package/esm2022/lib/enums/selecting-modes-types.mjs +22 -0
- package/esm2022/lib/enums/selecting-modes.mjs +22 -0
- package/esm2022/lib/enums/snap-to-item-aligns.mjs +22 -0
- package/esm2022/lib/enums/spreading-modes.mjs +18 -0
- package/esm2022/lib/interfaces/animation-params.mjs +1 -1
- package/esm2022/lib/interfaces/base-virtual-list-item-component.mjs +2 -9
- package/esm2022/lib/interfaces/index.mjs +1 -1
- package/esm2022/lib/interfaces/item-transformation.mjs +2 -0
- package/esm2022/lib/interfaces/point.mjs +2 -0
- package/esm2022/lib/interfaces/scroll-options.mjs +1 -1
- package/esm2022/lib/interfaces/scroll-params.mjs +1 -1
- package/esm2022/lib/models/item-config-map.model.mjs +1 -1
- package/esm2022/lib/models/item.model.mjs +1 -1
- package/esm2022/lib/models/render-item-config.model.mjs +1 -1
- package/esm2022/lib/models/render-item-measures.model.mjs +1 -1
- package/esm2022/lib/ng-virtual-list-public.service.mjs +6 -7
- package/esm2022/lib/ng-virtual-list.component.mjs +2032 -902
- package/esm2022/lib/ng-virtual-list.service.mjs +91 -30
- package/esm2022/lib/transformations/deck-of-cards-3d.mjs +57 -0
- package/esm2022/lib/transformations/deck-of-cards.mjs +54 -0
- package/esm2022/lib/transformations/event-horizon.mjs +47 -0
- package/esm2022/lib/transformations/index.mjs +13 -0
- package/esm2022/lib/transformations/linear.mjs +47 -0
- package/esm2022/lib/transformations/swipe-3d.mjs +51 -0
- package/esm2022/lib/types/alignment.mjs +2 -0
- package/esm2022/lib/types/arithmetic-expression.mjs +2 -0
- package/esm2022/lib/types/collapsing-mode.mjs +2 -0
- package/esm2022/lib/types/collection-mode.mjs +2 -0
- package/esm2022/lib/types/color.mjs +2 -0
- package/esm2022/lib/types/direction.mjs +2 -0
- package/esm2022/lib/types/float-or-persentage-value.mjs +2 -0
- package/esm2022/lib/types/focus-item-params.mjs +1 -1
- package/esm2022/lib/types/gradient-color-position.mjs +1 -1
- package/esm2022/lib/types/index.mjs +1 -1
- package/esm2022/lib/types/item-transform.mjs +2 -0
- package/esm2022/lib/types/scroll-direction.mjs +1 -1
- package/esm2022/lib/types/selecting-mode.mjs +2 -0
- package/esm2022/lib/types/snap-to-item-align.mjs +2 -0
- package/esm2022/lib/types/snapping-distance.mjs +2 -0
- package/esm2022/lib/types/snapping-method.mjs +2 -0
- package/esm2022/lib/types/spreading-mode.mjs +2 -0
- package/esm2022/lib/types/text-direction.mjs +2 -0
- package/esm2022/lib/utils/animator/animator.mjs +28 -8
- package/esm2022/lib/utils/animator/const/index.mjs +2 -0
- package/esm2022/lib/utils/animator/index.mjs +3 -2
- package/esm2022/lib/utils/animator/interfaces/animator-params.mjs +2 -0
- package/esm2022/lib/utils/animator/interfaces/animator-update-data.mjs +2 -0
- package/esm2022/lib/utils/animator/interfaces/index.mjs +2 -0
- package/esm2022/lib/utils/animator/types/easing.mjs +1 -1
- package/esm2022/lib/utils/disposable-component.mjs +27 -0
- package/esm2022/lib/utils/event-emitter/event-emitter.mjs +1 -1
- package/esm2022/lib/utils/get-scroll-state-version.mjs +12 -0
- package/esm2022/lib/utils/is-collapse-mode.mjs +18 -0
- package/esm2022/lib/utils/is-collection-mode.mjs +1 -1
- package/esm2022/lib/utils/is-direction.mjs +1 -1
- package/esm2022/lib/utils/is-persentage-value.mjs +14 -0
- package/esm2022/lib/utils/is-select-mode.mjs +18 -0
- package/esm2022/lib/utils/is-spreading-mode.mjs +15 -0
- package/esm2022/lib/utils/list-validators.mjs +1 -1
- package/esm2022/lib/utils/normalize-collection.mjs +42 -0
- package/esm2022/lib/utils/object.mjs +1 -1
- package/esm2022/lib/utils/parse-arithmetic-expression.mjs +53 -0
- package/esm2022/lib/utils/parse-float-or-persentage-value.mjs +17 -0
- package/esm2022/lib/utils/scrolling-direction.mjs +29 -0
- package/esm2022/lib/utils/snapping-method.mjs +1 -1
- package/esm2022/public-api.mjs +4 -1
- package/fesm2022/ng-virtual-list.mjs +7539 -3898
- package/fesm2022/ng-virtual-list.mjs.map +1 -1
- package/lib/components/ng-list-item/base/base-virtual-list-item-component.d.ts +40 -16
- package/lib/components/ng-list-item/const/index.d.ts +3 -1
- package/lib/components/ng-list-item/interfaces/template-context.d.ts +1 -1
- package/lib/components/ng-list-item/ng-virtual-list-item.component.d.ts +5 -2
- package/lib/components/ng-list-item/ng-virtual-list-item.module.d.ts +2 -2
- package/lib/components/ng-list-item/utils/create-display-id.d.ts +6 -0
- package/lib/components/ng-list-item/utils/get-element-by-index.d.ts +15 -1
- package/lib/components/ng-list-item/utils/index.d.ts +2 -1
- package/lib/components/ng-list-item/utils/matrix-3d.d.ts +7 -0
- package/lib/components/ng-prerender-container/components/ng-prerender-list/ng-prerender-list.component.d.ts +69 -26
- package/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.component.d.ts +2 -2
- package/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.module.d.ts +2 -2
- package/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.component.d.ts +33 -12
- package/lib/components/ng-prerender-container/interfaces/refresh-params.d.ts +1 -0
- package/lib/components/ng-prerender-container/ng-prerender-container.component.d.ts +20 -17
- package/lib/components/ng-scroll-bar/const/index.d.ts +2 -0
- package/lib/components/ng-scroll-bar/interfaces/scroll-bar-template-context.d.ts +2 -2
- package/lib/components/ng-scroll-bar/ng-scroll-bar.component.d.ts +75 -24
- package/lib/components/ng-scroll-view/base/base-scroll-view.component.d.ts +49 -16
- package/lib/components/ng-scroll-view/const/index.d.ts +3 -1
- package/lib/components/ng-scroll-view/interfaces/scroll-to-params.d.ts +4 -1
- package/lib/components/ng-scroll-view/ng-scroll-view.component.d.ts +79 -11
- package/lib/components/ng-scroll-view/utils/calculate-direction.d.ts +6 -0
- package/lib/components/ng-scroll-view/utils/calculate-velocity.d.ts +7 -0
- package/lib/components/ng-scroll-view/utils/get-dir.d.ts +7 -0
- package/lib/components/ng-scroll-view/utils/index.d.ts +3 -1
- package/lib/components/ng-scroll-view/utils/matrix-3d.d.ts +7 -0
- package/lib/components/ng-scroller/enums/scroller-directions.d.ts +2 -1
- package/lib/components/ng-scroller/ng-scroller.component.d.ts +111 -47
- package/lib/const/index.d.ts +46 -5
- package/lib/core/cache-map.d.ts +0 -10
- package/lib/core/const/index.d.ts +1 -0
- package/lib/core/enums/index.d.ts +2 -0
- package/lib/core/enums/item-display-methods.d.ts +12 -0
- package/lib/core/events/index.d.ts +2 -0
- package/lib/core/events/track-box-events.d.ts +10 -0
- package/lib/core/interfaces/get-item-position-options.d.ts +10 -0
- package/lib/core/interfaces/get-metrics-returns.d.ts +11 -0
- package/lib/core/interfaces/index.d.ts +8 -0
- package/lib/core/interfaces/item.d.ts +9 -0
- package/lib/core/interfaces/metrics.d.ts +51 -0
- package/lib/core/interfaces/recalculate-metrics-options.d.ts +32 -0
- package/lib/core/interfaces/update-collection-options.d.ts +10 -0
- package/lib/core/interfaces/update-collection-returns.d.ts +14 -0
- package/lib/core/track-box.d.ts +25 -95
- package/lib/core/tracker.d.ts +1 -1
- package/lib/core/types/cache-map-events.d.ts +8 -0
- package/lib/core/types/cache-map-listeners.d.ts +9 -0
- package/lib/core/types/cache.d.ts +12 -0
- package/lib/core/types/index.d.ts +6 -0
- package/lib/core/types/on-change-event-listener.d.ts +7 -0
- package/lib/core/types/on-tick-event-listener.d.ts +7 -0
- package/lib/core/utils/get-service-id-prop.d.ts +7 -0
- package/lib/core/utils/index.d.ts +2 -0
- package/lib/directives/index.d.ts +2 -2
- package/lib/directives/locale-sensitive/locale-sensitive.directive.d.ts +16 -6
- package/lib/directives/virtual-click/virtual-click.directive.d.ts +22 -0
- package/lib/directives/virtual-click/virtual-click.module.d.ts +8 -0
- package/lib/enums/alignments.d.ts +10 -0
- package/lib/enums/collapsing-modes.d.ts +20 -0
- package/lib/enums/index.d.ts +7 -9
- package/lib/enums/{method-for-selecting-types.d.ts → selecting-modes-types.d.ts} +3 -3
- package/lib/enums/{methods-for-selecting.d.ts → selecting-modes.d.ts} +3 -3
- package/lib/enums/snap-to-item-aligns.d.ts +20 -0
- package/lib/enums/spreading-modes.d.ts +16 -0
- package/lib/interfaces/animation-params.d.ts +1 -0
- package/lib/interfaces/base-virtual-list-item-component.d.ts +13 -13
- package/lib/interfaces/index.d.ts +3 -2
- package/lib/interfaces/item-transformation.d.ts +22 -0
- package/lib/interfaces/point.d.ts +16 -0
- package/lib/interfaces/scroll-options.d.ts +4 -0
- package/lib/interfaces/scroll-params.d.ts +3 -2
- package/lib/models/item-config-map.model.d.ts +5 -0
- package/lib/models/item.model.d.ts +7 -0
- package/lib/models/render-item-config.model.d.ts +50 -0
- package/lib/models/render-item-measures.model.d.ts +71 -0
- package/lib/ng-virtual-list-public.service.d.ts +4 -5
- package/lib/ng-virtual-list.component.d.ts +462 -135
- package/lib/ng-virtual-list.service.d.ts +33 -12
- package/lib/transformations/deck-of-cards-3d.d.ts +54 -0
- package/lib/transformations/deck-of-cards.d.ts +50 -0
- package/lib/transformations/event-horizon.d.ts +26 -0
- package/lib/transformations/index.d.ts +7 -0
- package/lib/transformations/linear.d.ts +26 -0
- package/lib/transformations/swipe-3d.d.ts +38 -0
- package/lib/types/alignment.d.ts +8 -0
- package/lib/types/arithmetic-expression.d.ts +10 -0
- package/lib/types/collapsing-mode.d.ts +8 -0
- package/lib/{enums → types}/collection-mode.d.ts +1 -1
- package/lib/types/color.d.ts +4 -0
- package/lib/{enums → types}/direction.d.ts +1 -1
- package/lib/types/float-or-persentage-value.d.ts +7 -0
- package/lib/types/focus-item-params.d.ts +6 -0
- package/lib/types/gradient-color-position.d.ts +1 -1
- package/lib/types/index.d.ts +15 -1
- package/lib/types/item-transform.d.ts +9 -0
- package/lib/types/scroll-direction.d.ts +2 -0
- package/lib/types/selecting-mode.d.ts +8 -0
- package/lib/types/snap-to-item-align.d.ts +8 -0
- package/lib/types/snapping-distance.d.ts +8 -0
- package/lib/{enums → types}/snapping-method.d.ts +1 -1
- package/lib/types/spreading-mode.d.ts +8 -0
- package/lib/{enums → types}/text-direction.d.ts +1 -1
- package/lib/utils/animator/animator.d.ts +10 -17
- package/lib/utils/animator/const/index.d.ts +1 -0
- package/lib/utils/animator/index.d.ts +2 -1
- package/lib/utils/animator/interfaces/animator-params.d.ts +18 -0
- package/lib/utils/animator/interfaces/animator-update-data.d.ts +13 -0
- package/lib/utils/animator/interfaces/index.d.ts +3 -0
- package/lib/utils/animator/types/easing.d.ts +6 -0
- package/lib/utils/disposable-component.d.ts +15 -0
- package/lib/utils/get-scroll-state-version.d.ts +1 -0
- package/lib/utils/is-collapse-mode.d.ts +8 -0
- package/lib/utils/is-collection-mode.d.ts +1 -1
- package/lib/utils/is-direction.d.ts +1 -1
- package/lib/utils/is-persentage-value.d.ts +7 -0
- package/lib/utils/is-select-mode.d.ts +8 -0
- package/lib/utils/is-spreading-mode.d.ts +8 -0
- package/lib/utils/list-validators.d.ts +1 -1
- package/lib/utils/normalize-collection.d.ts +8 -0
- package/lib/utils/object.d.ts +1 -1
- package/lib/utils/parse-arithmetic-expression.d.ts +8 -0
- package/lib/utils/parse-float-or-persentage-value.d.ts +7 -0
- package/lib/utils/scrolling-direction.d.ts +17 -0
- package/lib/utils/snapping-method.d.ts +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +3 -0
- package/esm2022/lib/components/ng-scroller/const/index.mjs +0 -2
- package/esm2022/lib/directives/item-click/item-click.directive.mjs +0 -59
- package/esm2022/lib/directives/item-click/item-click.module.mjs +0 -19
- package/esm2022/lib/enums/collection-mode.mjs +0 -2
- package/esm2022/lib/enums/direction.mjs +0 -2
- package/esm2022/lib/enums/method-for-selecting-types.mjs +0 -22
- package/esm2022/lib/enums/method-for-selecting.mjs +0 -2
- package/esm2022/lib/enums/methods-for-selecting.mjs +0 -22
- package/esm2022/lib/enums/snapping-method.mjs +0 -2
- package/esm2022/lib/enums/text-direction.mjs +0 -2
- package/esm2022/lib/utils/is-method-for-selecting.mjs +0 -18
- package/lib/components/ng-scroller/const/index.d.ts +0 -1
- package/lib/directives/item-click/item-click.directive.d.ts +0 -19
- package/lib/directives/item-click/item-click.module.d.ts +0 -8
- package/lib/enums/method-for-selecting.d.ts +0 -8
- package/lib/utils/is-method-for-selecting.d.ts +0 -8
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { Component,
|
|
2
|
-
import { Subject } from 'rxjs';
|
|
1
|
+
import { Component, inject, Input, ViewChild, } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject, distinctUntilChanged, Subject, takeUntil, tap } from 'rxjs';
|
|
3
3
|
import { ScrollerDirection } from '../enums';
|
|
4
|
-
import { SCROLL_VIEW_INVERSION } from '../const';
|
|
4
|
+
import { SCROLL_VIEW_INVERSION, SCROLL_VIEW_OVERSCROLL_ENABLED } from '../const';
|
|
5
|
+
import { DisposableComponent } from '../../../utils/disposable-component';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
/**
|
|
7
8
|
* BaseScrollView
|
|
@@ -11,33 +12,83 @@ import * as i0 from "@angular/core";
|
|
|
11
12
|
* @author Evgenii Alexandrovich Grebennikov
|
|
12
13
|
* @email djonnyx@gmail.com
|
|
13
14
|
*/
|
|
14
|
-
export class BaseScrollView {
|
|
15
|
-
scrollContent
|
|
16
|
-
scrollViewport
|
|
17
|
-
direction =
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
export class BaseScrollView extends DisposableComponent {
|
|
16
|
+
scrollContent;
|
|
17
|
+
scrollViewport;
|
|
18
|
+
_$direction = new BehaviorSubject(ScrollerDirection.VERTICAL);
|
|
19
|
+
$direction = this._$direction.asObservable();
|
|
20
|
+
set direction(v) {
|
|
21
|
+
if (this._$direction.getValue() !== v) {
|
|
22
|
+
this._$direction.next(v);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
get direction() { return this._$direction.getValue(); }
|
|
26
|
+
_$startOffset = new BehaviorSubject(0);
|
|
27
|
+
$startOffset = this._$startOffset.asObservable();
|
|
28
|
+
set startOffset(v) {
|
|
29
|
+
if (this._$startOffset.getValue() !== v) {
|
|
30
|
+
this._$startOffset.next(v);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
get startOffset() { return this._$startOffset.getValue(); }
|
|
34
|
+
_$endOffset = new BehaviorSubject(0);
|
|
35
|
+
$endOffset = this._$endOffset.asObservable();
|
|
36
|
+
set endOffset(v) {
|
|
37
|
+
if (this._$endOffset.getValue() !== v) {
|
|
38
|
+
this._$endOffset.next(v);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
get endOffset() { return this._$endOffset.getValue(); }
|
|
42
|
+
_$alignmentStartOffset = new BehaviorSubject(0);
|
|
43
|
+
$alignmentStartOffset = this._$alignmentStartOffset.asObservable();
|
|
44
|
+
set alignmentStartOffset(v) {
|
|
45
|
+
if (this._$alignmentStartOffset.getValue() !== v) {
|
|
46
|
+
this._$alignmentStartOffset.next(v);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
get alignmentStartOffset() { return this._$alignmentStartOffset.getValue(); }
|
|
50
|
+
_$alignmentEndOffset = new BehaviorSubject(0);
|
|
51
|
+
$alignmentEndOffset = this._$alignmentEndOffset.asObservable();
|
|
52
|
+
set alignmentEndOffset(v) {
|
|
53
|
+
if (this._$alignmentEndOffset.getValue() !== v) {
|
|
54
|
+
this._$alignmentEndOffset.next(v);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
get alignmentEndOffset() { return this._$alignmentEndOffset.getValue(); }
|
|
58
|
+
_$isInfinity = new BehaviorSubject(false);
|
|
59
|
+
$isInfinity = this._$isInfinity.asObservable();
|
|
60
|
+
set isInfinity(v) {
|
|
61
|
+
if (this._$isInfinity.getValue() !== v) {
|
|
62
|
+
this._$isInfinity.next(v);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
get isInfinity() { return this._$isInfinity.getValue(); }
|
|
66
|
+
_$isVertical = new BehaviorSubject(true);
|
|
67
|
+
$isVertical = this._$isVertical.asObservable();
|
|
68
|
+
_$grabbing = new BehaviorSubject(false);
|
|
69
|
+
$grabbing = this._$grabbing.asObservable();
|
|
70
|
+
_inversion = inject(SCROLL_VIEW_INVERSION);
|
|
71
|
+
_overscrollEnabled = inject(SCROLL_VIEW_OVERSCROLL_ENABLED);
|
|
22
72
|
_$updateScrollBar = new Subject();
|
|
23
73
|
$updateScrollBar = this._$updateScrollBar.asObservable();
|
|
24
74
|
get scrollable() {
|
|
25
|
-
const { width, height } = this.viewportBounds(), isVertical = this.isVertical(), viewportSize = isVertical ? height : width, totalSize = this._totalSize;
|
|
26
|
-
return totalSize > viewportSize;
|
|
75
|
+
const { width, height } = this._$viewportBounds.getValue(), isVertical = this._$isVertical.getValue(), viewportSize = isVertical ? height : width, totalSize = this._totalSize;
|
|
76
|
+
return this._inversion ? (totalSize < viewportSize) : (totalSize > viewportSize);
|
|
27
77
|
}
|
|
28
|
-
_destroyRef = inject(DestroyRef);
|
|
29
78
|
_isMoving = false;
|
|
30
79
|
get isMoving() {
|
|
31
80
|
return this._isMoving;
|
|
32
81
|
}
|
|
33
|
-
_x =
|
|
82
|
+
_x = 0;
|
|
34
83
|
set x(v) {
|
|
35
84
|
this._x = this._actualX = v;
|
|
85
|
+
this.normalizeScrollSize();
|
|
36
86
|
}
|
|
37
87
|
get x() { return this._x; }
|
|
38
|
-
_y =
|
|
88
|
+
_y = 0;
|
|
39
89
|
set y(v) {
|
|
40
90
|
this._y = this._actualY = v;
|
|
91
|
+
this.normalizeScrollSize();
|
|
41
92
|
}
|
|
42
93
|
get y() { return this._y; }
|
|
43
94
|
_actualTotalSize = 0;
|
|
@@ -45,19 +96,30 @@ export class BaseScrollView {
|
|
|
45
96
|
set totalSize(v) {
|
|
46
97
|
if (this._totalSize !== v) {
|
|
47
98
|
this._totalSize = v;
|
|
48
|
-
const startOffset = this.startOffset();
|
|
49
|
-
this._actualTotalSize = v + startOffset;
|
|
99
|
+
const startOffset = this._$startOffset.getValue(), endOffset = this._$alignmentEndOffset.getValue();
|
|
100
|
+
this._actualTotalSize = v + startOffset + endOffset;
|
|
101
|
+
this.normalizeScrollSize();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
get totalSize() {
|
|
105
|
+
return this._totalSize;
|
|
106
|
+
}
|
|
107
|
+
_startLayoutOffset = 0;
|
|
108
|
+
set startLayoutOffset(v) {
|
|
109
|
+
if (this._startLayoutOffset !== v) {
|
|
110
|
+
this._startLayoutOffset = v;
|
|
50
111
|
}
|
|
51
112
|
}
|
|
113
|
+
get startLayoutOffset() { return this._startLayoutOffset; }
|
|
52
114
|
get actualScrollHeight() {
|
|
53
|
-
const { height: viewportHeight } = this.viewportBounds(), totalSize = this._actualTotalSize, isVertical = this.isVertical(), startOffset = this.startOffset(), endOffset = this.endOffset();
|
|
115
|
+
const { height: viewportHeight } = this._$viewportBounds.getValue(), totalSize = this._actualTotalSize, isVertical = this._$isVertical.getValue(), startOffset = this._$startOffset.getValue(), endOffset = this._$endOffset.getValue();
|
|
54
116
|
if (this._inversion) {
|
|
55
117
|
return totalSize > viewportHeight ? isVertical ? endOffset : 0 : viewportHeight - totalSize;
|
|
56
118
|
}
|
|
57
119
|
return totalSize < viewportHeight ? isVertical ? startOffset : 0 : totalSize - viewportHeight;
|
|
58
120
|
}
|
|
59
121
|
get actualScrollWidth() {
|
|
60
|
-
const { width: viewportWidth } = this.viewportBounds(), totalSize = this._actualTotalSize, isVertical = this.isVertical(), startOffset = this.startOffset(), endOffset = this.endOffset();
|
|
122
|
+
const { width: viewportWidth } = this._$viewportBounds.getValue(), totalSize = this._actualTotalSize, isVertical = this._$isVertical.getValue(), startOffset = this._$startOffset.getValue(), endOffset = this._$endOffset.getValue();
|
|
61
123
|
if (this._inversion) {
|
|
62
124
|
return totalSize > viewportWidth ? isVertical ? 0 : endOffset : viewportWidth - totalSize;
|
|
63
125
|
}
|
|
@@ -78,53 +140,99 @@ export class BaseScrollView {
|
|
|
78
140
|
return this._y;
|
|
79
141
|
}
|
|
80
142
|
get scrollWidth() {
|
|
81
|
-
const { width: viewportWidth } = this.viewportBounds(), { width: contentWidth } = this.contentBounds(), isVertical = this.isVertical(), startOffset = this.startOffset(), endOffset = this.endOffset();
|
|
143
|
+
const { width: viewportWidth } = this._$viewportBounds.getValue(), { width: contentWidth } = this._$contentBounds.getValue(), isVertical = this._$isVertical.getValue(), startOffset = this._$startOffset.getValue(), endOffset = this._$endOffset.getValue();
|
|
82
144
|
if (this._inversion) {
|
|
83
|
-
return contentWidth > viewportWidth ? isVertical ? 0 : endOffset : (viewportWidth - contentWidth);
|
|
145
|
+
return contentWidth > viewportWidth ? isVertical ? 0 : endOffset : (viewportWidth - (contentWidth + this._$alignmentEndOffset.getValue()));
|
|
84
146
|
}
|
|
85
|
-
return contentWidth < viewportWidth ? isVertical ? 0 : startOffset : (contentWidth - viewportWidth);
|
|
147
|
+
return contentWidth < viewportWidth ? isVertical ? 0 : startOffset : ((contentWidth + this._$alignmentEndOffset.getValue()) - viewportWidth);
|
|
86
148
|
}
|
|
87
149
|
get scrollHeight() {
|
|
88
|
-
const { height: viewportHeight } = this.viewportBounds(), { height: contentHeight } = this.contentBounds(), isVertical = this.isVertical(), startOffset = this.startOffset(), endOffset = this.endOffset();
|
|
150
|
+
const { height: viewportHeight } = this._$viewportBounds.getValue(), { height: contentHeight } = this._$contentBounds.getValue(), isVertical = this._$isVertical.getValue(), startOffset = this._$startOffset.getValue(), endOffset = this._$endOffset.getValue();
|
|
89
151
|
if (this._inversion) {
|
|
90
|
-
return contentHeight > viewportHeight ? isVertical ? endOffset : 0 : (viewportHeight - contentHeight);
|
|
152
|
+
return contentHeight > viewportHeight ? isVertical ? endOffset : 0 : (viewportHeight - (contentHeight + this._$alignmentEndOffset.getValue()));
|
|
91
153
|
}
|
|
92
|
-
return contentHeight < viewportHeight ? isVertical ? startOffset : 0 : (contentHeight - viewportHeight);
|
|
154
|
+
return contentHeight < viewportHeight ? isVertical ? startOffset : 0 : ((contentHeight + this._$alignmentEndOffset.getValue()) - viewportHeight);
|
|
93
155
|
}
|
|
94
|
-
viewportBounds =
|
|
95
|
-
|
|
96
|
-
|
|
156
|
+
_$viewportBounds = new BehaviorSubject({ width: 0, height: 0 });
|
|
157
|
+
$viewportBounds = this._$viewportBounds.asObservable();
|
|
158
|
+
_$contentBounds = new BehaviorSubject({ width: 0, height: 0 });
|
|
159
|
+
$contentBounds = this._$contentBounds.asObservable();
|
|
160
|
+
_isCoordinatesOverrided = false;
|
|
97
161
|
constructor() {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
162
|
+
super();
|
|
163
|
+
const $direction = this.$direction;
|
|
164
|
+
$direction.pipe(takeUntil(this._$unsubscribe), distinctUntilChanged(), tap(v => {
|
|
165
|
+
this._$isVertical.next(v === ScrollerDirection.VERTICAL);
|
|
166
|
+
})).subscribe();
|
|
101
167
|
}
|
|
102
168
|
tick() {
|
|
103
169
|
this.onResizeContent();
|
|
104
170
|
this.onResizeViewport();
|
|
105
171
|
}
|
|
172
|
+
overrideCoordinates(x, y) { }
|
|
173
|
+
normalizeScrollSize() {
|
|
174
|
+
if (this._$isInfinity.getValue()) {
|
|
175
|
+
const isVertical = this._$isVertical.getValue();
|
|
176
|
+
if (isVertical) {
|
|
177
|
+
const scrollSize = (this._totalSize - this._$viewportBounds.getValue().height);
|
|
178
|
+
if (this._y < 0) {
|
|
179
|
+
this._isCoordinatesOverrided = true;
|
|
180
|
+
const currentPosition = scrollSize;
|
|
181
|
+
this.overrideCoordinates(this._x, currentPosition);
|
|
182
|
+
this._y = currentPosition;
|
|
183
|
+
return true;
|
|
184
|
+
}
|
|
185
|
+
else if (this._y > scrollSize) {
|
|
186
|
+
this._isCoordinatesOverrided = true;
|
|
187
|
+
const currentPosition = 0;
|
|
188
|
+
this.overrideCoordinates(this._x, currentPosition);
|
|
189
|
+
this._y = currentPosition;
|
|
190
|
+
return true;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
const scrollSize = (this._totalSize - this._$viewportBounds.getValue().width);
|
|
195
|
+
if (this._x < 0) {
|
|
196
|
+
this._isCoordinatesOverrided = true;
|
|
197
|
+
const currentPosition = scrollSize;
|
|
198
|
+
this.overrideCoordinates(currentPosition, this._y);
|
|
199
|
+
this._x = currentPosition;
|
|
200
|
+
return true;
|
|
201
|
+
}
|
|
202
|
+
else if (this._x > scrollSize) {
|
|
203
|
+
this._isCoordinatesOverrided = true;
|
|
204
|
+
const currentPosition = 0;
|
|
205
|
+
this.overrideCoordinates(currentPosition, this._y);
|
|
206
|
+
this._x = currentPosition;
|
|
207
|
+
return true;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
this._isCoordinatesOverrided = false;
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
106
214
|
onResizeViewport() {
|
|
107
|
-
const viewport = this.scrollViewport
|
|
108
|
-
if (viewport) {
|
|
109
|
-
const isVertical = this.isVertical(), startOffset = this.startOffset(), endOffset = this.endOffset(), w = viewport.offsetWidth, h = viewport.offsetHeight, width = isVertical ? w : w - startOffset - endOffset, height = isVertical ? h - startOffset - endOffset : h, bounds = this.viewportBounds();
|
|
215
|
+
const viewport = this.scrollViewport?.nativeElement;
|
|
216
|
+
if (!!viewport) {
|
|
217
|
+
const isVertical = this._$isVertical.getValue(), startOffset = this._$startOffset.getValue(), endOffset = this._$endOffset.getValue(), w = viewport.offsetWidth, h = viewport.offsetHeight, width = isVertical ? w : (w - startOffset - endOffset), height = isVertical ? (h - startOffset - endOffset) : h, bounds = this._$viewportBounds.getValue();
|
|
110
218
|
if (bounds.width === width && bounds.height === height) {
|
|
111
219
|
return;
|
|
112
220
|
}
|
|
113
|
-
this.viewportBounds.
|
|
221
|
+
this._$viewportBounds.next({ width, height });
|
|
114
222
|
}
|
|
115
223
|
}
|
|
116
|
-
onResizeContent() {
|
|
117
|
-
const content = this.scrollContent
|
|
118
|
-
if (content) {
|
|
119
|
-
const isVertical = this.isVertical(), startOffset = this.startOffset(), w = content.offsetWidth, h = content.offsetHeight, width = isVertical ? w : w - startOffset, height = isVertical ? h - startOffset : h, bounds = this.contentBounds();
|
|
224
|
+
onResizeContent(value = null) {
|
|
225
|
+
const content = this.scrollContent?.nativeElement;
|
|
226
|
+
if (!!content) {
|
|
227
|
+
const isVertical = this._$isVertical.getValue(), startOffset = this._$startOffset.getValue(), w = content.offsetWidth, h = content.offsetHeight, width = isVertical ? w : value ?? (w - startOffset), height = isVertical ? value ?? (h - startOffset) : h, bounds = this._$contentBounds.getValue();
|
|
120
228
|
if (bounds.width === width && bounds.height === height) {
|
|
121
229
|
return;
|
|
122
230
|
}
|
|
123
|
-
this.contentBounds.
|
|
231
|
+
this._$contentBounds.next({ width, height });
|
|
124
232
|
}
|
|
125
233
|
}
|
|
126
234
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaseScrollView, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
127
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
235
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: BaseScrollView, selector: "base-scroll-view", inputs: { direction: "direction", startOffset: "startOffset", endOffset: "endOffset", alignmentStartOffset: "alignmentStartOffset", alignmentEndOffset: "alignmentEndOffset", isInfinity: "isInfinity" }, viewQueries: [{ propertyName: "scrollContent", first: true, predicate: ["scrollContent"], descendants: true }, { propertyName: "scrollViewport", first: true, predicate: ["scrollViewport"], descendants: true }], usesInheritance: true, ngImport: i0, template: '', isInline: true });
|
|
128
236
|
}
|
|
129
237
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaseScrollView, decorators: [{
|
|
130
238
|
type: Component,
|
|
@@ -132,5 +240,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
132
240
|
selector: 'base-scroll-view',
|
|
133
241
|
template: '',
|
|
134
242
|
}]
|
|
135
|
-
}], ctorParameters: () => []
|
|
136
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1zY3JvbGwtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL25nLXNjcm9sbC12aWV3L2Jhc2UvYmFzZS1zY3JvbGwtdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFjLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsR0FDeEYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsaUJBQWlCLEVBQXNCLE1BQU0sVUFBVSxDQUFDO0FBRWpFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7QUFFakQ7Ozs7Ozs7R0FPRztBQUtILE1BQU0sT0FBTyxjQUFjO0lBQ2QsYUFBYSxHQUFHLFNBQVMsQ0FBNkIsZUFBZSxDQUFDLENBQUM7SUFFdkUsY0FBYyxHQUFHLFNBQVMsQ0FBNkIsZ0JBQWdCLENBQUMsQ0FBQztJQUV6RSxTQUFTLEdBQUcsS0FBSyxDQUFxQixpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVsRSxXQUFXLEdBQUcsS0FBSyxDQUFTLENBQUMsQ0FBQyxDQUFDO0lBRS9CLFNBQVMsR0FBRyxLQUFLLENBQVMsQ0FBQyxDQUFDLENBQUM7SUFFN0IsVUFBVSxDQUFrQjtJQUU1QixRQUFRLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBRWpDLGlCQUFpQixHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFDeEMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBRW5FLElBQUksVUFBVTtRQUNWLE1BQU0sRUFBRSxLQUFLLEVBQUUs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QUM7UUFDL0MsQ0FBQztJQUNMLENBQUM7SUFFUyxlQUFlO1FBQ3JCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxhQUFhLENBQUM7UUFDcEQsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNWLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFDaEMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFDaEMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQ3ZCLENBQUMsR0FBRyxPQUFPLENBQUMsWUFBWSxFQUN4QixLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLEVBQ3hDLE1BQU0sR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDekMsTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNsQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQ3JELE9BQU87WUFDWCxDQUFDO1lBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUM5QyxDQUFDO0lBQ0wsQ0FBQzt3R0EzS1EsY0FBYzs0RkFBZCxjQUFjLHlzQkFGYixFQUFFOzs0RkFFSCxjQUFjO2tCQUoxQixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFFBQVEsRUFBRSxFQUFFO2lCQUNmIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCwgY29tcHV0ZWQsIERlc3Ryb3lSZWYsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIFNpZ25hbCwgc2lnbmFsLCB2aWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU2Nyb2xsZXJEaXJlY3Rpb24sIFNjcm9sbGVyRGlyZWN0aW9ucyB9IGZyb20gJy4uL2VudW1zJztcclxuaW1wb3J0IHsgSVNpemUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgU0NST0xMX1ZJRVdfSU5WRVJTSU9OIH0gZnJvbSAnLi4vY29uc3QnO1xyXG5cclxuLyoqXHJcbiAqIEJhc2VTY3JvbGxWaWV3XHJcbiAqIE1heGltdW0gcGVyZm9ybWFuY2UgZm9yIGV4dHJlbWVseSBsYXJnZSBsaXN0cy5cclxuICogSXQgaXMgYmFzZWQgb24gYWxnb3JpdGhtcyBmb3IgdmlydHVhbGl6YXRpb24gb2Ygc2NyZWVuIG9iamVjdHMuXHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iLzE4LngvcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29tcG9uZW50cy9uZy1zY3JvbGwtdmlldy9iYXNlL2Jhc2Utc2Nyb2xsLXZpZXcuY29tcG9uZW50LnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBBbGV4YW5kcm92aWNoIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2Jhc2Utc2Nyb2xsLXZpZXcnLFxyXG4gICAgdGVtcGxhdGU6ICcnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFzZVNjcm9sbFZpZXcge1xyXG4gICAgcmVhZG9ubHkgc2Nyb2xsQ29udGVudCA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4oJ3Njcm9sbENvbnRlbnQnKTtcclxuXHJcbiAgICByZWFkb25seSBzY3JvbGxWaWV3cG9ydCA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4oJ3Njcm9sbFZpZXdwb3J0Jyk7XHJcblxyXG4gICAgcmVhZG9ubHkgZGlyZWN0aW9uID0gaW5wdXQ8U2Nyb2xsZXJEaXJlY3Rpb25zPihTY3JvbGxlckRpcmVjdGlvbi5WRVJUSUNBTCk7XHJcblxyXG4gICAgcmVhZG9ubHkgc3RhcnRPZmZzZXQgPSBpbnB1dDxudW1iZXI+KDApO1xyXG5cclxuICAgIHJlYWRvbmx5IGVuZE9mZnNldCA9IGlucHV0PG51bWJlcj4oMCk7XHJcblxyXG4gICAgcmVhZG9ubHkgaXNWZXJ0aWNhbDogU2lnbmFsPGJvb2xlYW4+O1xyXG5cclxuICAgIHJlYWRvbmx5IGdyYWJiaW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgXyR1cGRhdGVTY3JvbGxCYXIgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgcHJvdGVjdGVkICR1cGRhdGVTY3JvbGxCYXIgPSB0aGlzLl8kdXBkYXRlU2Nyb2xsQmFyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAgIGdldCBzY3JvbGxhYmxlKCkge1xyXG4gICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy52aWV3cG9ydEJvdW5kcygpLFxyXG4gICAgICAgICAgICBpc1ZlcnRpY2FsID0gdGhpcy5pc1ZlcnRpY2FsKCksXHJcbiAgICAgICAgICAgIHZpZXdwb3J0U2l6ZSA9IGlzVmVydGljYWwgPyBoZWlnaHQgOiB3aWR0aCxcclxuICAgICAgICAgICAgdG90YWxTaXplID0gdGhpcy5fdG90YWxTaXplO1xyXG4gICAgICAgIHJldHVybiB0b3RhbFNpemUgPiB2aWV3cG9ydFNpemU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xyXG5cclxuICAgIHByb3RlY3RlZCBfaXNNb3ZpbmcgPSBmYWxzZTtcclxuICAgIGdldCBpc01vdmluZygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNNb3Zpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF94OiBudW1iZXIgPSB0aGlzLnN0YXJ0T2Zmc2V0KCk7XHJcbiAgICBzZXQgeCh2OiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLl94ID0gdGhpcy5fYWN0dWFsWCA9IHY7XHJcbiAgICB9XHJcbiAgICBnZXQgeCgpIHsgcmV0dXJuIHRoaXMuX3g7IH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3k6IG51bWJlciA9IHRoaXMuZW5kT2Zmc2V0KCk7XHJcbiAgICBzZXQgeSh2OiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLl95ID0gdGhpcy5fYWN0dWFsWSA9IHY7XHJcbiAgICB9XHJcbiAgICBnZXQgeSgpIHsgcmV0dXJuIHRoaXMuX3k7IH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2FjdHVhbFRvdGFsU2l6ZTogbnVtYmVyID0gMDtcclxuICAgIHByb3RlY3RlZCBfdG90YWxTaXplOiBudW1iZXIgPSAwO1xyXG4gICAgc2V0IHRvdGFsU2l6ZSh2OiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5fdG90YWxTaXplICE9PSB2KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RvdGFsU2l6ZSA9IHY7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gdGhpcy5zdGFydE9mZnNldCgpO1xyXG4gICAgICAgICAgICB0aGlzLl9hY3R1YWxUb3RhbFNpemUgPSB2ICsgc3RhcnRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBhY3R1YWxTY3JvbGxIZWlnaHQoKSB7XHJcbiAgICAgICAgY29uc3QgeyBoZWlnaHQ6IHZpZXdwb3J0SGVpZ2h0IH0gPSB0aGlzLnZpZXdwb3J0Qm91bmRzKCksXHJcbiAgICAgICAgICAgIHRvdGFsU2l6ZSA9IHRoaXMuX2FjdHVhbFRvdGFsU2l6ZSxcclxuICAgICAgICAgICAgaXNWZXJ0aWNhbCA9IHRoaXMuaXNWZXJ0aWNhbCgpLFxyXG4gICAgICAgICAgICBzdGFydE9mZnNldCA9IHRoaXMuc3RhcnRPZmZzZXQoKSxcclxuICAgICAgICAgICAgZW5kT2Zmc2V0ID0gdGhpcy5lbmRPZmZzZXQoKTtcclxuICAgICAgICBpZiAodGhpcy5faW52ZXJzaW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0b3RhbFNpemUgPiB2aWV3cG9ydEhlaWdodCA/IGlzVmVydGljYWwgPyBlbmRPZmZzZXQgOiAwIDogdmlld3BvcnRIZWlnaHQgLSB0b3RhbFNpemU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0b3RhbFNpemUgPCB2aWV3cG9ydEhlaWdodCA/IGlzVmVydGljYWwgPyBzdGFydE9mZnNldCA6IDAgOiB0b3RhbFNpemUgLSB2aWV3cG9ydEhlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYWN0dWFsU2Nyb2xsV2lkdGgoKSB7XHJcbiAgICAgICAgY29uc3QgeyB3aWR0aDogdmlld3BvcnRXaWR0aCB9ID0gdGhpcy52aWV3cG9ydEJvdW5kcygpLFxyXG4gICAgICAgICAgICB0b3RhbFNpemUgPSB0aGlzLl9hY3R1YWxUb3RhbFNpemUsXHJcbiAgICAgICAgICAgIGlzVmVydGljYWwgPSB0aGlzLmlzVmVydGljYWwoKSxcclxuICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSB0aGlzLnN0YXJ0T2Zmc2V0KCksXHJcbiAgICAgICAgICAgIGVuZE9mZnNldCA9IHRoaXMuZW5kT2Zmc2V0KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ludmVyc2lvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdG90YWxTaXplID4gdmlld3BvcnRXaWR0aCA/IGlzVmVydGljYWwgPyAwIDogZW5kT2Zmc2V0IDogdmlld3BvcnRXaWR0aCAtIHRvdGFsU2l6ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRvdGFsU2l6ZSA8IHZpZXdwb3J0V2lkdGggPyBpc1ZlcnRpY2FsID8gMCA6IHN0YXJ0T2Zmc2V0IDogdG90YWxTaXplIC0gdmlld3BvcnRXaWR0aDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2FjdHVhbFg6IG51bWJlciA9IDA7XHJcbiAgICBnZXQgYWN0dWFsU2Nyb2xsTGVmdCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYWN0dWFsWDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2FjdHVhbFk6IG51bWJlciA9IDA7XHJcbiAgICBnZXQgYWN0dWFsU2Nyb2xsVG9wKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hY3R1YWxZO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzY3JvbGxMZWZ0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl94O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzY3JvbGxUb3AoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3k7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNjcm9sbFdpZHRoKCkge1xyXG4gICAgICAgIGNvbnN0IHsgd2lkdGg6IHZpZXdwb3J0V2lkdGggfSA9IHRoaXMudmlld3BvcnRCb3VuZHMoKSxcclxuICAgICAgICAgICAgeyB3aWR0aDogY29udGVudFdpZHRoIH0gPSB0aGlzLmNvbnRlbnRCb3VuZHMoKSxcclxuICAgICAgICAgICAgaXNWZXJ0aWNhbCA9IHRoaXMuaXNWZXJ0aWNhbCgpLFxyXG4gICAgICAgICAgICBzdGFydE9mZnNldCA9IHRoaXMuc3RhcnRPZmZzZXQoKSxcclxuICAgICAgICAgICAgZW5kT2Zmc2V0ID0gdGhpcy5lbmRPZmZzZXQoKTtcclxuICAgICAgICBpZiAodGhpcy5faW52ZXJzaW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb250ZW50V2lkdGggPiB2aWV3cG9ydFdpZHRoID8gaXNWZXJ0aWNhbCA/IDAgOiBlbmRPZmZzZXQgOiAodmlld3BvcnRXaWR0aCAtIGNvbnRlbnRXaWR0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb250ZW50V2lkdGggPCB2aWV3cG9ydFdpZHRoID8gaXNWZXJ0aWNhbCA/IDAgOiBzdGFydE9mZnNldCA6IChjb250ZW50V2lkdGggLSB2aWV3cG9ydFdpZHRoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2Nyb2xsSGVpZ2h0KCkge1xyXG4gICAgICAgIGNvbnN0IHsgaGVpZ2h0OiB2aWV3cG9ydEhlaWdodCB9ID0gdGhpcy52aWV3cG9ydEJvdW5kcygpLFxyXG4gICAgICAgICAgICB7IGhlaWdodDogY29udGVudEhlaWdodCB9ID0gdGhpcy5jb250ZW50Qm91bmRzKCksXHJcbiAgICAgICAgICAgIGlzVmVydGljYWwgPSB0aGlzLmlzVmVydGljYWwoKSxcclxuICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSB0aGlzLnN0YXJ0T2Zmc2V0KCksXHJcbiAgICAgICAgICAgIGVuZE9mZnNldCA9IHRoaXMuZW5kT2Zmc2V0KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ludmVyc2lvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gY29udGVudEhlaWdodCA+IHZpZXdwb3J0SGVpZ2h0ID8gaXNWZXJ0aWNhbCA/IGVuZE9mZnNldCA6IDAgOiAodmlld3BvcnRIZWlnaHQgLSBjb250ZW50SGVpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbnRlbnRIZWlnaHQgPCB2aWV3cG9ydEhlaWdodCA/IGlzVmVydGljYWwgPyBzdGFydE9mZnNldCA6IDAgOiAoY29udGVudEhlaWdodCAtIHZpZXdwb3J0SGVpZ2h0KTtcclxuICAgIH1cclxuXHJcbiAgICByZWFkb25seSB2aWV3cG9ydEJvdW5kcyA9IHNpZ25hbDxJU2l6ZT4oeyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0pO1xyXG5cclxuICAgIHJlYWRvbmx5IGNvbnRlbnRCb3VuZHMgPSBzaWduYWw8SVNpemU+KHsgd2lkdGg6IDAsIGhlaWdodDogMCB9KTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX2ludmVyc2lvbiA9IGluamVjdChTQ1JPTExfVklFV19JTlZFUlNJT04pO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuaXNWZXJ0aWNhbCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlyZWN0aW9uKCkgPT09IFNjcm9sbGVyRGlyZWN0aW9uLlZFUlRJQ0FMO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRpY2soKSB7XHJcbiAgICAgICAgdGhpcy5vblJlc2l6ZUNvbnRlbnQoKTtcclxuICAgICAgICB0aGlzLm9uUmVzaXplVmlld3BvcnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgb25SZXNpemVWaWV3cG9ydCgpIHtcclxuICAgICAgICBjb25zdCB2aWV3cG9ydCA9IHRoaXMuc2Nyb2xsVmlld3BvcnQoKT8ubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBpZiAodmlld3BvcnQpIHtcclxuICAgICAgICAgICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuaXNWZXJ0aWNhbCgpLFxyXG4gICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSB0aGlzLnN0YXJ0T2Zmc2V0KCksXHJcbiAgICAgICAgICAgICAgICBlbmRPZmZzZXQgPSB0aGlzLmVuZE9mZnNldCgpLFxyXG4gICAgICAgICAgICAgICAgdyA9IHZpZXdwb3J0Lm9mZnNldFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgaCA9IHZpZXdwb3J0Lm9mZnNldEhlaWdodCxcclxuICAgICAgICAgICAgICAgIHdpZHRoID0gaXNWZXJ0aWNhbCA/IHcgOiB3IC0gc3RhcnRPZmZzZXQgLSBlbmRPZmZzZXQsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBpc1ZlcnRpY2FsID8gaCAtIHN0YXJ0T2Zmc2V0IC0gZW5kT2Zmc2V0IDogaCxcclxuICAgICAgICAgICAgICAgIGJvdW5kcyA9IHRoaXMudmlld3BvcnRCb3VuZHMoKTtcclxuICAgICAgICAgICAgaWYgKGJvdW5kcy53aWR0aCA9PT0gd2lkdGggJiYgYm91bmRzLmhlaWdodCA9PT0gaGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy52aWV3cG9ydEJvdW5kcy5zZXQoeyB3aWR0aCwgaGVpZ2h0IH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgb25SZXNpemVDb250ZW50KCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLnNjcm9sbENvbnRlbnQoKT8ubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBpZiAoY29udGVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5pc1ZlcnRpY2FsKCksXHJcbiAgICAgICAgICAgICAgICBzdGFydE9mZnNldCA9IHRoaXMuc3RhcnRPZmZzZXQoKSxcclxuICAgICAgICAgICAgICAgIHcgPSBjb250ZW50Lm9mZnNldFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgaCA9IGNvbnRlbnQub2Zmc2V0SGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgd2lkdGggPSBpc1ZlcnRpY2FsID8gdyA6IHcgLSBzdGFydE9mZnNldCxcclxuICAgICAgICAgICAgICAgIGhlaWdodCA9IGlzVmVydGljYWwgPyBoIC0gc3RhcnRPZmZzZXQgOiBoLFxyXG4gICAgICAgICAgICAgICAgYm91bmRzID0gdGhpcy5jb250ZW50Qm91bmRzKCk7XHJcbiAgICAgICAgICAgIGlmIChib3VuZHMud2lkdGggPT09IHdpZHRoICYmIGJvdW5kcy5oZWlnaHQgPT09IGhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuY29udGVudEJvdW5kcy5zZXQoeyB3aWR0aCwgaGVpZ2h0IH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSJdfQ==
|
|
243
|
+
}], ctorParameters: () => [], propDecorators: { scrollContent: [{
|
|
244
|
+
type: ViewChild,
|
|
245
|
+
args: ['scrollContent']
|
|
246
|
+
}], scrollViewport: [{
|
|
247
|
+
type: ViewChild,
|
|
248
|
+
args: ['scrollViewport']
|
|
249
|
+
}], direction: [{
|
|
250
|
+
type: Input
|
|
251
|
+
}], startOffset: [{
|
|
252
|
+
type: Input
|
|
253
|
+
}], endOffset: [{
|
|
254
|
+
type: Input
|
|
255
|
+
}], alignmentStartOffset: [{
|
|
256
|
+
type: Input
|
|
257
|
+
}], alignmentEndOffset: [{
|
|
258
|
+
type: Input
|
|
259
|
+
}], isInfinity: [{
|
|
260
|
+
type: Input
|
|
261
|
+
}] } });
|
|
262
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1zY3JvbGwtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL25nLXNjcm9sbC12aWV3L2Jhc2UvYmFzZS1zY3JvbGwtdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsR0FDbEQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RixPQUFPLEVBQUUsaUJBQWlCLEVBQXNCLE1BQU0sVUFBVSxDQUFDO0FBRWpFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSw4QkFBOEIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNqRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7QUFFMUU7Ozs7Ozs7R0FPRztBQUtILE1BQU0sT0FBTyxjQUFlLFNBQVEsbUJBQW1CO0lBRW5ELGFBQWEsQ0FBeUM7SUFHdEQsY0FBYyxDQUF5QztJQUU3QyxXQUFXLEdBQUcsSUFBSSxlQUFlLENBQTJCLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pGLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RELElBQ0ksU0FBUyxDQUFDLENBQTJCO1FBQ3JDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0wsQ0FBQztJQUNELElBQUksU0FBUyxLQUFLLE9BQU8sSUFB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QztnQkFDckQsT0FBTztZQUNYLENBQUM7WUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELENBQUM7SUFDTCxDQUFDO3dHQTFTUSxjQUFjOzRGQUFkLGNBQWMsNGVBRmIsRUFBRTs7NEZBRUgsY0FBYztrQkFKMUIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixRQUFRLEVBQUUsRUFBRTtpQkFDZjt3REFHRyxhQUFhO3NCQURaLFNBQVM7dUJBQUMsZUFBZTtnQkFJMUIsY0FBYztzQkFEYixTQUFTO3VCQUFDLGdCQUFnQjtnQkFNdkIsU0FBUztzQkFEWixLQUFLO2dCQVdGLFdBQVc7c0JBRGQsS0FBSztnQkFXRixTQUFTO3NCQURaLEtBQUs7Z0JBV0Ysb0JBQW9CO3NCQUR2QixLQUFLO2dCQVdGLGtCQUFrQjtzQkFEckIsS0FBSztnQkFXRixVQUFVO3NCQURiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBpbmplY3QsIElucHV0LCBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIFN1YmplY3QsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFNjcm9sbGVyRGlyZWN0aW9uLCBTY3JvbGxlckRpcmVjdGlvbnMgfSBmcm9tICcuLi9lbnVtcyc7XHJcbmltcG9ydCB7IElTaXplIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IFNDUk9MTF9WSUVXX0lOVkVSU0lPTiwgU0NST0xMX1ZJRVdfT1ZFUlNDUk9MTF9FTkFCTEVEIH0gZnJvbSAnLi4vY29uc3QnO1xyXG5pbXBvcnQgeyBEaXNwb3NhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZGlzcG9zYWJsZS1jb21wb25lbnQnO1xyXG5cclxuLyoqXHJcbiAqIEJhc2VTY3JvbGxWaWV3XHJcbiAqIE1heGltdW0gcGVyZm9ybWFuY2UgZm9yIGV4dHJlbWVseSBsYXJnZSBsaXN0cy5cclxuICogSXQgaXMgYmFzZWQgb24gYWxnb3JpdGhtcyBmb3IgdmlydHVhbGl6YXRpb24gb2Ygc2NyZWVuIG9iamVjdHMuXHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iLzE4LngvcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29tcG9uZW50cy9uZy1zY3JvbGwtdmlldy9iYXNlL2Jhc2Utc2Nyb2xsLXZpZXcuY29tcG9uZW50LnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBBbGV4YW5kcm92aWNoIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2Jhc2Utc2Nyb2xsLXZpZXcnLFxyXG4gICAgdGVtcGxhdGU6ICcnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFzZVNjcm9sbFZpZXcgZXh0ZW5kcyBEaXNwb3NhYmxlQ29tcG9uZW50IHtcclxuICAgIEBWaWV3Q2hpbGQoJ3Njcm9sbENvbnRlbnQnKVxyXG4gICAgc2Nyb2xsQ29udGVudDogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4gfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnc2Nyb2xsVmlld3BvcnQnKVxyXG4gICAgc2Nyb2xsVmlld3BvcnQ6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+IHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIHByb3RlY3RlZCBfJGRpcmVjdGlvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2Nyb2xsZXJEaXJlY3Rpb25zIHwgYW55PihTY3JvbGxlckRpcmVjdGlvbi5WRVJUSUNBTCk7XHJcbiAgICByZWFkb25seSAkZGlyZWN0aW9uID0gdGhpcy5fJGRpcmVjdGlvbi5hc09ic2VydmFibGUoKTtcclxuICAgIEBJbnB1dCgpXHJcbiAgICBzZXQgZGlyZWN0aW9uKHY6IFNjcm9sbGVyRGlyZWN0aW9ucyB8IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLl8kZGlyZWN0aW9uLmdldFZhbHVlKCkgIT09IHYpIHtcclxuICAgICAgICAgICAgdGhpcy5fJGRpcmVjdGlvbi5uZXh0KHYpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldCBkaXJlY3Rpb24oKSB7IHJldHVybiB0aGlzLl8kZGlyZWN0aW9uLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgXyRzdGFydE9mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICAgIHJlYWRvbmx5ICRzdGFydE9mZnNldCA9IHRoaXMuXyRzdGFydE9mZnNldC5hc09ic2VydmFibGUoKTtcclxuICAgIEBJbnB1dCgpXHJcbiAgICBzZXQgc3RhcnRPZmZzZXQodjogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuXyRzdGFydE9mZnNldC5nZXRWYWx1ZSgpICE9PSB2KSB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRzdGFydE9mZnNldC5uZXh0KHYpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldCBzdGFydE9mZnNldCgpIHsgcmV0dXJuIHRoaXMuXyRzdGFydE9mZnNldC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF8kZW5kT2Zmc2V0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gICAgcmVhZG9ubHkgJGVuZE9mZnNldCA9IHRoaXMuXyRlbmRPZmZzZXQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2V0IGVuZE9mZnNldCh2OiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5fJGVuZE9mZnNldC5nZXRWYWx1ZSgpICE9PSB2KSB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRlbmRPZmZzZXQubmV4dCh2KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXQgZW5kT2Zmc2V0KCkgeyByZXR1cm4gdGhpcy5fJGVuZE9mZnNldC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF8kYWxpZ25tZW50U3RhcnRPZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgICByZWFkb25seSAkYWxpZ25tZW50U3RhcnRPZmZzZXQgPSB0aGlzLl8kYWxpZ25tZW50U3RhcnRPZmZzZXQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2V0IGFsaWdubWVudFN0YXJ0T2Zmc2V0KHY6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh0aGlzLl8kYWxpZ25tZW50U3RhcnRPZmZzZXQuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICAgICAgICB0aGlzLl8kYWxpZ25tZW50U3RhcnRPZmZzZXQubmV4dCh2KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXQgYWxpZ25tZW50U3RhcnRPZmZzZXQoKSB7IHJldHVybiB0aGlzLl8kYWxpZ25tZW50U3RhcnRPZmZzZXQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfJGFsaWdubWVudEVuZE9mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICAgIHJlYWRvbmx5ICRhbGlnbm1lbnRFbmRPZmZzZXQgPSB0aGlzLl8kYWxpZ25tZW50RW5kT2Zmc2V0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgQElucHV0KClcclxuICAgIHNldCBhbGlnbm1lbnRFbmRPZmZzZXQodjogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuXyRhbGlnbm1lbnRFbmRPZmZzZXQuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICAgICAgICB0aGlzLl8kYWxpZ25tZW50RW5kT2Zmc2V0Lm5leHQodik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0IGFsaWdubWVudEVuZE9mZnNldCgpIHsgcmV0dXJuIHRoaXMuXyRhbGlnbm1lbnRFbmRPZmZzZXQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfJGlzSW5maW5pdHkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHJlYWRvbmx5ICRpc0luZmluaXR5ID0gdGhpcy5fJGlzSW5maW5pdHkuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2V0IGlzSW5maW5pdHkodjogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh0aGlzLl8kaXNJbmZpbml0eS5nZXRWYWx1ZSgpICE9PSB2KSB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRpc0luZmluaXR5Lm5leHQodik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0IGlzSW5maW5pdHkoKSB7IHJldHVybiB0aGlzLl8kaXNJbmZpbml0eS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF8kaXNWZXJ0aWNhbCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgICByZWFkb25seSAkaXNWZXJ0aWNhbCA9IHRoaXMuXyRpc1ZlcnRpY2FsLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAgIHByb3RlY3RlZCBfJGdyYWJiaW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgICByZWFkb25seSAkZ3JhYmJpbmcgPSB0aGlzLl8kZ3JhYmJpbmcuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pbnZlcnNpb24gPSBpbmplY3QoU0NST0xMX1ZJRVdfSU5WRVJTSU9OKTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX292ZXJzY3JvbGxFbmFibGVkID0gaW5qZWN0KFNDUk9MTF9WSUVXX09WRVJTQ1JPTExfRU5BQkxFRCk7XHJcblxyXG4gICAgcHJvdGVjdGVkIF8kdXBkYXRlU2Nyb2xsQmFyID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByb3RlY3RlZCAkdXBkYXRlU2Nyb2xsQmFyID0gdGhpcy5fJHVwZGF0ZVNjcm9sbEJhci5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgICBnZXQgc2Nyb2xsYWJsZSgpIHtcclxuICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuXyR2aWV3cG9ydEJvdW5kcy5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBpc1ZlcnRpY2FsID0gdGhpcy5fJGlzVmVydGljYWwuZ2V0VmFsdWUoKSxcclxuICAgICAgICAgICAgdmlld3BvcnRTaXplID0gaXNWZXJ0aWNhbCA/IGhlaWdodCA6IHdpZHRoLFxyXG4gICAgICAgICAgICB0b3RhbFNpemUgPSB0aGlzLl90b3RhbFNpemU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludmVyc2lvbiA/ICh0b3RhbFNpemUgPCB2aWV3cG9ydFNpemUpIDogKHRvdGFsU2l6ZSA+IHZpZXdwb3J0U2l6ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pc01vdmluZyA9IGZhbHNlO1xyXG4gICAgZ2V0IGlzTW92aW5nKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc01vdmluZztcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3g6IG51bWJlciA9IDA7XHJcbiAgICBzZXQgeCh2OiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLl94ID0gdGhpcy5fYWN0dWFsWCA9IHY7XHJcblxyXG4gICAgICAgIHRoaXMubm9ybWFsaXplU2Nyb2xsU2l6ZSgpO1xyXG4gICAgfVxyXG4gICAgZ2V0IHgoKSB7IHJldHVybiB0aGlzLl94OyB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF95OiBudW1iZXIgPSAwO1xyXG4gICAgc2V0IHkodjogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5feSA9IHRoaXMuX2FjdHVhbFkgPSB2O1xyXG5cclxuICAgICAgICB0aGlzLm5vcm1hbGl6ZVNjcm9sbFNpemUoKTtcclxuICAgIH1cclxuICAgIGdldCB5KCkgeyByZXR1cm4gdGhpcy5feTsgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfYWN0dWFsVG90YWxTaXplOiBudW1iZXIgPSAwO1xyXG4gICAgcHJvdGVjdGVkIF90b3RhbFNpemU6IG51bWJlciA9IDA7XHJcbiAgICBzZXQgdG90YWxTaXplKHY6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh0aGlzLl90b3RhbFNpemUgIT09IHYpIHtcclxuICAgICAgICAgICAgdGhpcy5fdG90YWxTaXplID0gdjtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnRPZmZzZXQgPSB0aGlzLl8kc3RhcnRPZmZzZXQuZ2V0VmFsdWUoKSwgZW5kT2Zmc2V0ID0gdGhpcy5fJGFsaWdubWVudEVuZE9mZnNldC5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLl9hY3R1YWxUb3RhbFNpemUgPSB2ICsgc3RhcnRPZmZzZXQgKyBlbmRPZmZzZXQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vcm1hbGl6ZVNjcm9sbFNpemUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXQgdG90YWxTaXplKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90b3RhbFNpemU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9zdGFydExheW91dE9mZnNldDogbnVtYmVyID0gMDtcclxuICAgIHNldCBzdGFydExheW91dE9mZnNldCh2OiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5fc3RhcnRMYXlvdXRPZmZzZXQgIT09IHYpIHtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnRMYXlvdXRPZmZzZXQgPSB2O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldCBzdGFydExheW91dE9mZnNldCgpIHsgcmV0dXJuIHRoaXMuX3N0YXJ0TGF5b3V0T2Zmc2V0OyB9XHJcblxyXG4gICAgZ2V0IGFjdHVhbFNjcm9sbEhlaWdodCgpIHtcclxuICAgICAgICBjb25zdCB7IGhlaWdodDogdmlld3BvcnRIZWlnaHQgfSA9IHRoaXMuXyR2aWV3cG9ydEJvdW5kcy5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICB0b3RhbFNpemUgPSB0aGlzLl9hY3R1YWxUb3RhbFNpemUsXHJcbiAgICAgICAgICAgIGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBzdGFydE9mZnNldCA9IHRoaXMuXyRzdGFydE9mZnNldC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBlbmRPZmZzZXQgPSB0aGlzLl8kZW5kT2Zmc2V0LmdldFZhbHVlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ludmVyc2lvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdG90YWxTaXplID4gdmlld3BvcnRIZWlnaHQgPyBpc1ZlcnRpY2FsID8gZW5kT2Zmc2V0IDogMCA6IHZpZXdwb3J0SGVpZ2h0IC0gdG90YWxTaXplO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdG90YWxTaXplIDwgdmlld3BvcnRIZWlnaHQgPyBpc1ZlcnRpY2FsID8gc3RhcnRPZmZzZXQgOiAwIDogdG90YWxTaXplIC0gdmlld3BvcnRIZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGFjdHVhbFNjcm9sbFdpZHRoKCkge1xyXG4gICAgICAgIGNvbnN0IHsgd2lkdGg6IHZpZXdwb3J0V2lkdGggfSA9IHRoaXMuXyR2aWV3cG9ydEJvdW5kcy5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICB0b3RhbFNpemUgPSB0aGlzLl9hY3R1YWxUb3RhbFNpemUsXHJcbiAgICAgICAgICAgIGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBzdGFydE9mZnNldCA9IHRoaXMuXyRzdGFydE9mZnNldC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBlbmRPZmZzZXQgPSB0aGlzLl8kZW5kT2Zmc2V0LmdldFZhbHVlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ludmVyc2lvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdG90YWxTaXplID4gdmlld3BvcnRXaWR0aCA/IGlzVmVydGljYWwgPyAwIDogZW5kT2Zmc2V0IDogdmlld3BvcnRXaWR0aCAtIHRvdGFsU2l6ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRvdGFsU2l6ZSA8IHZpZXdwb3J0V2lkdGggPyBpc1ZlcnRpY2FsID8gMCA6IHN0YXJ0T2Zmc2V0IDogdG90YWxTaXplIC0gdmlld3BvcnRXaWR0aDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2FjdHVhbFg6IG51bWJlciA9IDA7XHJcbiAgICBnZXQgYWN0dWFsU2Nyb2xsTGVmdCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYWN0dWFsWDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2FjdHVhbFk6IG51bWJlciA9IDA7XHJcbiAgICBnZXQgYWN0dWFsU2Nyb2xsVG9wKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hY3R1YWxZO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzY3JvbGxMZWZ0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl94O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzY3JvbGxUb3AoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3k7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNjcm9sbFdpZHRoKCkge1xyXG4gICAgICAgIGNvbnN0IHsgd2lkdGg6IHZpZXdwb3J0V2lkdGggfSA9IHRoaXMuXyR2aWV3cG9ydEJvdW5kcy5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICB7IHdpZHRoOiBjb250ZW50V2lkdGggfSA9IHRoaXMuXyRjb250ZW50Qm91bmRzLmdldFZhbHVlKCksXHJcbiAgICAgICAgICAgIGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBzdGFydE9mZnNldCA9IHRoaXMuXyRzdGFydE9mZnNldC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBlbmRPZmZzZXQgPSB0aGlzLl8kZW5kT2Zmc2V0LmdldFZhbHVlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ludmVyc2lvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gY29udGVudFdpZHRoID4gdmlld3BvcnRXaWR0aCA/IGlzVmVydGljYWwgPyAwIDogZW5kT2Zmc2V0IDogKHZpZXdwb3J0V2lkdGggLSAoY29udGVudFdpZHRoICsgdGhpcy5fJGFsaWdubWVudEVuZE9mZnNldC5nZXRWYWx1ZSgpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb250ZW50V2lkdGggPCB2aWV3cG9ydFdpZHRoID8gaXNWZXJ0aWNhbCA/IDAgOiBzdGFydE9mZnNldCA6ICgoY29udGVudFdpZHRoICsgdGhpcy5fJGFsaWdubWVudEVuZE9mZnNldC5nZXRWYWx1ZSgpKSAtIHZpZXdwb3J0V2lkdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzY3JvbGxIZWlnaHQoKSB7XHJcbiAgICAgICAgY29uc3QgeyBoZWlnaHQ6IHZpZXdwb3J0SGVpZ2h0IH0gPSB0aGlzLl8kdmlld3BvcnRCb3VuZHMuZ2V0VmFsdWUoKSxcclxuICAgICAgICAgICAgeyBoZWlnaHQ6IGNvbnRlbnRIZWlnaHQgfSA9IHRoaXMuXyRjb250ZW50Qm91bmRzLmdldFZhbHVlKCksXHJcbiAgICAgICAgICAgIGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBzdGFydE9mZnNldCA9IHRoaXMuXyRzdGFydE9mZnNldC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICBlbmRPZmZzZXQgPSB0aGlzLl8kZW5kT2Zmc2V0LmdldFZhbHVlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ludmVyc2lvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gY29udGVudEhlaWdodCA+IHZpZXdwb3J0SGVpZ2h0ID8gaXNWZXJ0aWNhbCA/IGVuZE9mZnNldCA6IDAgOiAodmlld3BvcnRIZWlnaHQgLSAoY29udGVudEhlaWdodCArIHRoaXMuXyRhbGlnbm1lbnRFbmRPZmZzZXQuZ2V0VmFsdWUoKSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY29udGVudEhlaWdodCA8IHZpZXdwb3J0SGVpZ2h0ID8gaXNWZXJ0aWNhbCA/IHN0YXJ0T2Zmc2V0IDogMCA6ICgoY29udGVudEhlaWdodCArIHRoaXMuXyRhbGlnbm1lbnRFbmRPZmZzZXQuZ2V0VmFsdWUoKSkgLSB2aWV3cG9ydEhlaWdodCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF8kdmlld3BvcnRCb3VuZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElTaXplPih7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSk7XHJcbiAgICByZWFkb25seSAkdmlld3BvcnRCb3VuZHMgPSB0aGlzLl8kdmlld3BvcnRCb3VuZHMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gICAgcHJvdGVjdGVkIF8kY29udGVudEJvdW5kcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVNpemU+KHsgd2lkdGg6IDAsIGhlaWdodDogMCB9KTtcclxuICAgIHJlYWRvbmx5ICRjb250ZW50Qm91bmRzID0gdGhpcy5fJGNvbnRlbnRCb3VuZHMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pc0Nvb3JkaW5hdGVzT3ZlcnJpZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuXHJcbiAgICAgICAgY29uc3QgJGRpcmVjdGlvbiA9IHRoaXMuJGRpcmVjdGlvbjtcclxuICAgICAgICAkZGlyZWN0aW9uLnBpcGUoXHJcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl8kaXNWZXJ0aWNhbC5uZXh0KHYgPT09IFNjcm9sbGVyRGlyZWN0aW9uLlZFUlRJQ0FMKTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKS5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aWNrKCkge1xyXG4gICAgICAgIHRoaXMub25SZXNpemVDb250ZW50KCk7XHJcbiAgICAgICAgdGhpcy5vblJlc2l6ZVZpZXdwb3J0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlQ29vcmRpbmF0ZXMoeDogbnVtYmVyLCB5OiBudW1iZXIpIHsgfVxyXG5cclxuICAgIHByb3RlY3RlZCBub3JtYWxpemVTY3JvbGxTaXplKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl8kaXNJbmZpbml0eS5nZXRWYWx1ZSgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsU2l6ZSA9ICh0aGlzLl90b3RhbFNpemUgLSB0aGlzLl8kdmlld3BvcnRCb3VuZHMuZ2V0VmFsdWUoKS5oZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3kgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNDb29yZGluYXRlc092ZXJyaWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFBvc2l0aW9uID0gc2Nyb2xsU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJyaWRlQ29vcmRpbmF0ZXModGhpcy5feCwgY3VycmVudFBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl95ID0gY3VycmVudFBvc2l0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl95ID4gc2Nyb2xsU2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzQ29vcmRpbmF0ZXNPdmVycmlkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQb3NpdGlvbiA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVycmlkZUNvb3JkaW5hdGVzKHRoaXMuX3gsIGN1cnJlbnRQb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5feSA9IGN1cnJlbnRQb3NpdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbFNpemUgPSAodGhpcy5fdG90YWxTaXplIC0gdGhpcy5fJHZpZXdwb3J0Qm91bmRzLmdldFZhbHVlKCkud2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ggPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNDb29yZGluYXRlc092ZXJyaWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFBvc2l0aW9uID0gc2Nyb2xsU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJyaWRlQ29vcmRpbmF0ZXMoY3VycmVudFBvc2l0aW9uLCB0aGlzLl95KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl94ID0gY3VycmVudFBvc2l0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl94ID4gc2Nyb2xsU2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzQ29vcmRpbmF0ZXNPdmVycmlkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQb3NpdGlvbiA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVycmlkZUNvb3JkaW5hdGVzKGN1cnJlbnRQb3NpdGlvbiwgdGhpcy5feSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5feCA9IGN1cnJlbnRQb3NpdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9pc0Nvb3JkaW5hdGVzT3ZlcnJpZGVkID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBvblJlc2l6ZVZpZXdwb3J0KCkge1xyXG4gICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gdGhpcy5zY3JvbGxWaWV3cG9ydD8ubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBpZiAoISF2aWV3cG9ydCkge1xyXG4gICAgICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5fJGlzVmVydGljYWwuZ2V0VmFsdWUoKSxcclxuICAgICAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gdGhpcy5fJHN0YXJ0T2Zmc2V0LmdldFZhbHVlKCksXHJcbiAgICAgICAgICAgICAgICBlbmRPZmZzZXQgPSB0aGlzLl8kZW5kT2Zmc2V0LmdldFZhbHVlKCksXHJcbiAgICAgICAgICAgICAgICB3ID0gdmlld3BvcnQub2Zmc2V0V2lkdGgsXHJcbiAgICAgICAgICAgICAgICBoID0gdmlld3BvcnQub2Zmc2V0SGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgd2lkdGggPSBpc1ZlcnRpY2FsID8gdyA6ICh3IC0gc3RhcnRPZmZzZXQgLSBlbmRPZmZzZXQpLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0ID0gaXNWZXJ0aWNhbCA/IChoIC0gc3RhcnRPZmZzZXQgLSBlbmRPZmZzZXQpIDogaCxcclxuICAgICAgICAgICAgICAgIGJvdW5kcyA9IHRoaXMuXyR2aWV3cG9ydEJvdW5kcy5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICBpZiAoYm91bmRzLndpZHRoID09PSB3aWR0aCAmJiBib3VuZHMuaGVpZ2h0ID09PSBoZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl8kdmlld3BvcnRCb3VuZHMubmV4dCh7IHdpZHRoLCBoZWlnaHQgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBvblJlc2l6ZUNvbnRlbnQodmFsdWU6IG51bWJlciB8IG51bGwgPSBudWxsKSB7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHRoaXMuc2Nyb2xsQ29udGVudD8ubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBpZiAoISFjb250ZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSB0aGlzLl8kc3RhcnRPZmZzZXQuZ2V0VmFsdWUoKSxcclxuICAgICAgICAgICAgICAgIHcgPSBjb250ZW50Lm9mZnNldFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgaCA9IGNvbnRlbnQub2Zmc2V0SGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgd2lkdGggPSBpc1ZlcnRpY2FsID8gdyA6IHZhbHVlID8/ICh3IC0gc3RhcnRPZmZzZXQpLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0ID0gaXNWZXJ0aWNhbCA/IHZhbHVlID8/IChoIC0gc3RhcnRPZmZzZXQpIDogaCxcclxuICAgICAgICAgICAgICAgIGJvdW5kcyA9IHRoaXMuXyRjb250ZW50Qm91bmRzLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgIGlmIChib3VuZHMud2lkdGggPT09IHdpZHRoICYmIGJvdW5kcy5oZWlnaHQgPT09IGhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuXyRjb250ZW50Qm91bmRzLm5leHQoeyB3aWR0aCwgaGVpZ2h0IH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSJdfQ==
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { InjectionToken } from "@angular/core";
|
|
2
2
|
import { SCROLLER_SCROLL } from "../../../const";
|
|
3
3
|
export const SCROLL_VIEW_INVERSION = new InjectionToken('ScrollViewInversion');
|
|
4
|
+
export const SCROLL_VIEW_OVERSCROLL_ENABLED = new InjectionToken('ScrollViewOverscrollEnabled');
|
|
4
5
|
export const SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO = new InjectionToken('ScrollViewNormalizeValueFromZero');
|
|
5
|
-
export const TOP = 'top', LEFT = 'left', INSTANT = 'instant', AUTO = 'auto', SMOOTH = 'smooth', DURATION = 2000, FRICTION_FORCE = .035, MAX_DURATION = 4000, ANIMATION_DURATION = 50, MASS = .005, MAX_DIST = 12500, MAX_VELOCITY_TIMESTAMP = 100, SPEED_SCALE = 15, OVERSCROLL_START_ITERATION = 2;
|
|
6
|
+
export const TOP = 'top', LEFT = 'left', INSTANT = 'instant', AUTO = 'auto', SMOOTH = 'smooth', DURATION = 2000, FRICTION_FORCE = .035, MAX_DURATION = 4000, ANIMATION_DURATION = 50, MASS = .005, MAX_DIST = 12500, MAX_VELOCITY_TIMESTAMP = 100, SPEED_SCALE = 15, OVERSCROLL_START_ITERATION = 2, INTERSECTION_DISTANCE = 1;
|
|
7
|
+
export const MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS = 5, INSTANT_VELOCITY_SCALE = 1000;
|
|
6
8
|
export const SCROLL_EVENT = new Event(SCROLLER_SCROLL);
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL25nLXNjcm9sbC12aWV3L2NvbnN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUFVLHFCQUFxQixDQUFDLENBQUM7QUFFeEYsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsSUFBSSxjQUFjLENBQVUsNkJBQTZCLENBQUMsQ0FBQztBQUV6RyxNQUFNLENBQUMsTUFBTSxxQ0FBcUMsR0FBRyxJQUFJLGNBQWMsQ0FBVSxrQ0FBa0MsQ0FBQyxDQUFDO0FBRXJILE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQ3BCLElBQUksR0FBRyxNQUFNLEVBQ2IsT0FBTyxHQUFHLFNBQVMsRUFDbkIsSUFBSSxHQUFHLE1BQU0sRUFDYixNQUFNLEdBQUcsUUFBUSxFQUNqQixRQUFRLEdBQUcsSUFBSSxFQUNmLGNBQWMsR0FBRyxJQUFJLEVBQ3JCLFlBQVksR0FBRyxJQUFJLEVBQ25CLGtCQUFrQixHQUFHLEVBQUUsRUFDdkIsSUFBSSxHQUFHLElBQUksRUFDWCxRQUFRLEdBQUcsS0FBSyxFQUNoQixzQkFBc0IsR0FBRyxHQUFHLEVBQzVCLFdBQVcsR0FBRyxFQUFFLEVBQ2hCLDBCQUEwQixHQUFHLENBQUMsRUFDOUIscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO0FBRTlCLE1BQU0sQ0FBQyxNQUFNLHVDQUF1QyxHQUFHLENBQUMsRUFDcEQsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO0FBRWxDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgU0NST0xMRVJfU0NST0xMIH0gZnJvbSBcIi4uLy4uLy4uL2NvbnN0XCI7XHJcblxyXG5leHBvcnQgY29uc3QgU0NST0xMX1ZJRVdfSU5WRVJTSU9OID0gbmV3IEluamVjdGlvblRva2VuPGJvb2xlYW4+KCdTY3JvbGxWaWV3SW52ZXJzaW9uJyk7XHJcblxyXG5leHBvcnQgY29uc3QgU0NST0xMX1ZJRVdfT1ZFUlNDUk9MTF9FTkFCTEVEID0gbmV3IEluamVjdGlvblRva2VuPGJvb2xlYW4+KCdTY3JvbGxWaWV3T3ZlcnNjcm9sbEVuYWJsZWQnKTtcclxuXHJcbmV4cG9ydCBjb25zdCBTQ1JPTExfVklFV19OT1JNQUxJWkVfVkFMVUVfRlJPTV9aRVJPID0gbmV3IEluamVjdGlvblRva2VuPGJvb2xlYW4+KCdTY3JvbGxWaWV3Tm9ybWFsaXplVmFsdWVGcm9tWmVybycpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRPUCA9ICd0b3AnLFxyXG4gICAgTEVGVCA9ICdsZWZ0JyxcclxuICAgIElOU1RBTlQgPSAnaW5zdGFudCcsXHJcbiAgICBBVVRPID0gJ2F1dG8nLFxyXG4gICAgU01PT1RIID0gJ3Ntb290aCcsXHJcbiAgICBEVVJBVElPTiA9IDIwMDAsXHJcbiAgICBGUklDVElPTl9GT1JDRSA9IC4wMzUsXHJcbiAgICBNQVhfRFVSQVRJT04gPSA0MDAwLFxyXG4gICAgQU5JTUFUSU9OX0RVUkFUSU9OID0gNTAsXHJcbiAgICBNQVNTID0gLjAwNSxcclxuICAgIE1BWF9ESVNUID0gMTI1MDAsXHJcbiAgICBNQVhfVkVMT0NJVFlfVElNRVNUQU1QID0gMTAwLFxyXG4gICAgU1BFRURfU0NBTEUgPSAxNSxcclxuICAgIE9WRVJTQ1JPTExfU1RBUlRfSVRFUkFUSU9OID0gMixcclxuICAgIElOVEVSU0VDVElPTl9ESVNUQU5DRSA9IDE7XHJcblxyXG5leHBvcnQgY29uc3QgTUFYX0lURVJBVElPTlNfRk9SX0FWRVJBR0VfQ0FMQ1VMQVRJT05TID0gNSxcclxuICAgIElOU1RBTlRfVkVMT0NJVFlfU0NBTEUgPSAxMDAwO1xyXG5cclxuZXhwb3J0IGNvbnN0IFNDUk9MTF9FVkVOVCA9IG5ldyBFdmVudChTQ1JPTExFUl9TQ1JPTEwpO1xyXG4iXX0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLXRvLXBhcmFtcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL2NvbXBvbmVudHMvbmctc2Nyb2xsLXZpZXcvaW50ZXJmYWNlcy9zY3JvbGwtdG8tcGFyYW1zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFYXNpbmcgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvYW5pbWF0b3JcIjtcclxuXHJcbi8qKlxyXG4gKiBJU2Nyb2xsVG9QYXJhbXNcclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTgueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL25nLXNjcm9sbC12aWV3L2ludGVyZmFjZXMvc2Nyb2xsLXRvLXBhcmFtcy50c1xyXG4gKiBAYXV0aG9yIEV2Z2VuaWkgQWxleGFuZHJvdmljaCBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVNjcm9sbFRvUGFyYW1zIHtcclxuICAgIHg/
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLXRvLXBhcmFtcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL2NvbXBvbmVudHMvbmctc2Nyb2xsLXZpZXcvaW50ZXJmYWNlcy9zY3JvbGwtdG8tcGFyYW1zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFYXNpbmcgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvYW5pbWF0b3JcIjtcclxuXHJcbi8qKlxyXG4gKiBJU2Nyb2xsVG9QYXJhbXNcclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTgueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL25nLXNjcm9sbC12aWV3L2ludGVyZmFjZXMvc2Nyb2xsLXRvLXBhcmFtcy50c1xyXG4gKiBAYXV0aG9yIEV2Z2VuaWkgQWxleGFuZHJvdmljaCBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVNjcm9sbFRvUGFyYW1zIHtcclxuICAgIHg/OiBudW1iZXI7XHJcbiAgICB5PzogbnVtYmVyO1xyXG4gICAgbGVmdD86IG51bWJlcjtcclxuICAgIHRvcD86IG51bWJlcjtcclxuICAgIHNuYXA/OiBib29sZWFuO1xyXG4gICAgbm9ybWFsaXplPzogYm9vbGVhbjtcclxuICAgIGZvcmNlPzogYm9vbGVhbjtcclxuICAgIGJsZW5kaW5nPzogYm9vbGVhbjtcclxuICAgIGJlaGF2aW9yPzogU2Nyb2xsQmVoYXZpb3IgfCBcImF1dG9cIiB8IFwiaW5zdGFudFwiIHwgXCJzbW9vdGhcIjtcclxuICAgIGVhc2U/OiBFYXNpbmc7XHJcbiAgICBmaXJlVXBkYXRlPzogYm9vbGVhbjtcclxuICAgIHVzZXJBY3Rpb24/OiBib29sZWFuO1xyXG4gICAgZHVyYXRpb24/OiBudW1iZXI7XHJcbn1cclxuIl19
|