@ts-core/angular 13.1.30 → 13.1.33

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.
@@ -2,14 +2,23 @@ import { ElementRef, EventEmitter } from '@angular/core';
2
2
  import { DestroyableContainer } from '@ts-core/common';
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class ScrollCheckDirective extends DestroyableContainer {
5
+ top: EventEmitter<boolean>;
6
+ bottom: EventEmitter<boolean>;
5
7
  limitExceed: EventEmitter<boolean>;
6
8
  private _scrollLimit;
7
- private _scrollValue;
9
+ private element;
10
+ private isTop;
11
+ private isBottom;
8
12
  private isExceedLimit;
13
+ delay: number;
14
+ offset: number;
9
15
  constructor(element: ElementRef);
10
- protected check(): void;
16
+ protected check: () => void;
17
+ protected get scrollValue(): number;
18
+ protected get scrollHeight(): number;
19
+ protected get clientHeight(): number;
11
20
  set scrollLimit(value: number);
12
21
  get scrollLimit(): number;
13
22
  static ɵfac: i0.ɵɵFactoryDeclaration<ScrollCheckDirective, never>;
14
- static ɵdir: i0.ɵɵDirectiveDeclaration<ScrollCheckDirective, "[vi-scroll-check]", never, { "scrollLimit": "vi-scroll-check"; }, { "limitExceed": "limitExceed"; }, never>;
23
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ScrollCheckDirective, "[vi-scroll-check]", never, { "delay": "delay"; "offset": "offset"; "scrollLimit": "vi-scroll-check"; }, { "top": "top"; "bottom": "bottom"; "limitExceed": "limitExceed"; }, never>;
15
24
  }
@@ -17,27 +17,64 @@ export class ScrollCheckDirective extends DestroyableContainer {
17
17
  // Properties
18
18
  //
19
19
  //--------------------------------------------------------------------------
20
+ this.top = new EventEmitter();
21
+ this.bottom = new EventEmitter();
20
22
  this.limitExceed = new EventEmitter();
23
+ this.isTop = false;
24
+ this.isBottom = false;
21
25
  this.isExceedLimit = false;
22
- this._scrollValue = element.nativeElement.scrollTop;
23
- fromEvent(element.nativeElement, 'scroll')
24
- .pipe(debounceTime(DateUtil.MILISECONDS_SECOND / 10), takeUntil(this.destroyed))
25
- .subscribe(() => {
26
- this._scrollValue = element.nativeElement.scrollTop;
27
- this.check();
28
- });
26
+ this.delay = DateUtil.MILLISECONDS_SECOND / 10;
27
+ this.offset = 50;
28
+ //--------------------------------------------------------------------------
29
+ //
30
+ // Protected Methods
31
+ //
32
+ //--------------------------------------------------------------------------
33
+ this.check = () => {
34
+ let value = this.scrollValue >= this.scrollLimit;
35
+ if (value !== this.isExceedLimit) {
36
+ this.isExceedLimit = value;
37
+ this.limitExceed.emit(value);
38
+ }
39
+ value = this.scrollValue + this.clientHeight + this.offset > this.scrollHeight;
40
+ this.bottom.next(value);
41
+ /*
42
+ if (value !== this.isBottom) {
43
+ this.isBottom = value;
44
+ this.bottom.next(value);
45
+ }
46
+ */
47
+ value = this.scrollValue < this.offset;
48
+ this.top.next(value);
49
+ /*
50
+ if (value !== this.isTop) {
51
+ this.isTop = value;
52
+ this.top.next(value);
53
+ }
54
+ */
55
+ };
56
+ this.delay = DateUtil.MILLISECONDS_SECOND / 10;
57
+ this.element = element.nativeElement;
58
+ fromEvent(this.element, 'scroll').pipe(debounceTime(this.delay), takeUntil(this.destroyed)).subscribe(this.check);
29
59
  }
30
60
  //--------------------------------------------------------------------------
31
61
  //
32
- // Protected Methods
62
+ // Private Properties
33
63
  //
34
64
  //--------------------------------------------------------------------------
35
- check() {
36
- let value = this._scrollValue >= this.scrollLimit;
37
- if (value !== this.isExceedLimit) {
38
- this.isExceedLimit = value;
39
- this.limitExceed.emit(this.isExceedLimit);
40
- }
65
+ // --------------------------------------------------------------------------
66
+ //
67
+ // Private Properties
68
+ //
69
+ // --------------------------------------------------------------------------
70
+ get scrollValue() {
71
+ return this.element.scrollTop;
72
+ }
73
+ get scrollHeight() {
74
+ return this.element.scrollHeight;
75
+ }
76
+ get clientHeight() {
77
+ return this.element.clientHeight;
41
78
  }
42
79
  //--------------------------------------------------------------------------
43
80
  //
@@ -56,16 +93,24 @@ export class ScrollCheckDirective extends DestroyableContainer {
56
93
  }
57
94
  }
58
95
  ScrollCheckDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ScrollCheckDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
59
- ScrollCheckDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: ScrollCheckDirective, selector: "[vi-scroll-check]", inputs: { scrollLimit: ["vi-scroll-check", "scrollLimit"] }, outputs: { limitExceed: "limitExceed" }, usesInheritance: true, ngImport: i0 });
96
+ ScrollCheckDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: ScrollCheckDirective, selector: "[vi-scroll-check]", inputs: { delay: "delay", offset: "offset", scrollLimit: ["vi-scroll-check", "scrollLimit"] }, outputs: { top: "top", bottom: "bottom", limitExceed: "limitExceed" }, usesInheritance: true, ngImport: i0 });
60
97
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ScrollCheckDirective, decorators: [{
61
98
  type: Directive,
62
99
  args: [{
63
100
  selector: '[vi-scroll-check]'
64
101
  }]
65
- }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { limitExceed: [{
102
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { top: [{
103
+ type: Output
104
+ }], bottom: [{
105
+ type: Output
106
+ }], limitExceed: [{
66
107
  type: Output
108
+ }], delay: [{
109
+ type: Input
110
+ }], offset: [{
111
+ type: Input
67
112
  }], scrollLimit: [{
68
113
  type: Input,
69
114
  args: ['vi-scroll-check']
70
115
  }] } });
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2Nyb2xsQ2hlY2tEaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGlyZWN0aXZlL1Njcm9sbENoZWNrRGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakMsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBSy9DLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxvQkFBb0I7SUFjMUQsNEVBQTRFO0lBQzVFLEVBQUU7SUFDRixjQUFjO0lBQ2QsRUFBRTtJQUNGLDRFQUE0RTtJQUU1RSxZQUFZLE9BQW1CO1FBQzNCLEtBQUssRUFBRSxDQUFDO1FBcEJaLDRFQUE0RTtRQUM1RSxFQUFFO1FBQ0YsYUFBYTtRQUNiLEVBQUU7UUFDRiw0RUFBNEU7UUFHckUsZ0JBQVcsR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUl2RCxrQkFBYSxHQUFZLEtBQUssQ0FBQztRQVduQyxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO1FBQ3BELFNBQVMsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQzthQUNyQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQy9FLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO1lBQ3BELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsRUFBRTtJQUNGLG9CQUFvQjtJQUNwQixFQUFFO0lBQ0YsNEVBQTRFO0lBRWxFLEtBQUs7UUFDWCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDbEQsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUM5QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDN0M7SUFDTCxDQUFDO0lBRUQsNEVBQTRFO0lBQzVFLEVBQUU7SUFDRixvQkFBb0I7SUFDcEIsRUFBRTtJQUNGLDRFQUE0RTtJQUU1RSxJQUNXLFdBQVcsQ0FBQyxLQUFhO1FBQ2hDLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDNUIsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFDRCxJQUFXLFdBQVc7UUFDbEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzdCLENBQUM7O2tIQTlEUSxvQkFBb0I7c0dBQXBCLG9CQUFvQjs0RkFBcEIsb0JBQW9CO2tCQUhoQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxtQkFBbUI7aUJBQ2hDO2lHQVNVLFdBQVc7c0JBRGpCLE1BQU07Z0JBOENJLFdBQVc7c0JBRHJCLEtBQUs7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERlc3Ryb3lhYmxlQ29udGFpbmVyIH0gZnJvbSAnQHRzLWNvcmUvY29tbW9uJztcbmltcG9ydCB7IERhdGVVdGlsIH0gZnJvbSAnQHRzLWNvcmUvY29tbW9uJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbdmktc2Nyb2xsLWNoZWNrXSdcbn0pXG5leHBvcnQgY2xhc3MgU2Nyb2xsQ2hlY2tEaXJlY3RpdmUgZXh0ZW5kcyBEZXN0cm95YWJsZUNvbnRhaW5lciB7XG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy9cdFByb3BlcnRpZXNcbiAgICAvL1xuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBsaW1pdEV4Y2VlZDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgcHJpdmF0ZSBfc2Nyb2xsTGltaXQ6IG51bWJlcjtcbiAgICBwcml2YXRlIF9zY3JvbGxWYWx1ZTogbnVtYmVyO1xuICAgIHByaXZhdGUgaXNFeGNlZWRMaW1pdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy9cdENvbnN0cnVjdG9yXG4gICAgLy9cbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50OiBFbGVtZW50UmVmKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5fc2Nyb2xsVmFsdWUgPSBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgICAgICBmcm9tRXZlbnQoZWxlbWVudC5uYXRpdmVFbGVtZW50LCAnc2Nyb2xsJylcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZShEYXRlVXRpbC5NSUxJU0VDT05EU19TRUNPTkQgLyAxMCksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zY3JvbGxWYWx1ZSA9IGVsZW1lbnQubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy9cdFByb3RlY3RlZCBNZXRob2RzXG4gICAgLy9cbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBwcm90ZWN0ZWQgY2hlY2soKTogdm9pZCB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuX3Njcm9sbFZhbHVlID49IHRoaXMuc2Nyb2xsTGltaXQ7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5pc0V4Y2VlZExpbWl0KSB7XG4gICAgICAgICAgICB0aGlzLmlzRXhjZWVkTGltaXQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMubGltaXRFeGNlZWQuZW1pdCh0aGlzLmlzRXhjZWVkTGltaXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy9cdFB1YmxpYyBQcm9wZXJ0aWVzXG4gICAgLy9cbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBASW5wdXQoJ3ZpLXNjcm9sbC1jaGVjaycpXG4gICAgcHVibGljIHNldCBzY3JvbGxMaW1pdCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSB0aGlzLl9zY3JvbGxMaW1pdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Njcm9sbExpbWl0ID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY2hlY2soKTtcbiAgICB9XG4gICAgcHVibGljIGdldCBzY3JvbGxMaW1pdCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2Nyb2xsTGltaXQ7XG4gICAgfVxufVxuIl19
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2Nyb2xsQ2hlY2tEaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGlyZWN0aXZlL1Njcm9sbENoZWNrRGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakMsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBSy9DLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxvQkFBb0I7SUEwQjFELDRFQUE0RTtJQUM1RSxFQUFFO0lBQ0YsY0FBYztJQUNkLEVBQUU7SUFDRiw0RUFBNEU7SUFFNUUsWUFBWSxPQUFtQjtRQUMzQixLQUFLLEVBQUUsQ0FBQztRQWhDWiw0RUFBNEU7UUFDNUUsRUFBRTtRQUNGLGFBQWE7UUFDYixFQUFFO1FBQ0YsNEVBQTRFO1FBR3JFLFFBQUcsR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVoRCxXQUFNLEdBQTBCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFbkQsZ0JBQVcsR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUt2RCxVQUFLLEdBQVksS0FBSyxDQUFDO1FBQ3ZCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFHaEMsVUFBSyxHQUFXLFFBQVEsQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUM7UUFFbEQsV0FBTSxHQUFXLEVBQUUsQ0FBQztRQWdCM0IsNEVBQTRFO1FBQzVFLEVBQUU7UUFDRixvQkFBb0I7UUFDcEIsRUFBRTtRQUNGLDRFQUE0RTtRQUVsRSxVQUFLLEdBQUcsR0FBUyxFQUFFO1lBQ3pCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUNqRCxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUM5QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDaEM7WUFFRCxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUMvRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUV4Qjs7Ozs7Y0FLRTtZQUVGLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDdkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckI7Ozs7O2NBS0U7UUFDTixDQUFDLENBQUM7UUFyQ0UsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQy9DLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztRQUVyQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0SCxDQUFDO0lBbUNELDRFQUE0RTtJQUM1RSxFQUFFO0lBQ0YscUJBQXFCO0lBQ3JCLEVBQUU7SUFDRiw0RUFBNEU7SUFFNUUsNkVBQTZFO0lBQzdFLEVBQUU7SUFDRixxQkFBcUI7SUFDckIsRUFBRTtJQUNGLDZFQUE2RTtJQUU3RSxJQUFjLFdBQVc7UUFDckIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsSUFBYyxZQUFZO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7SUFDckMsQ0FBQztJQUNELElBQWMsWUFBWTtRQUN0QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO0lBQ3JDLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsRUFBRTtJQUNGLG9CQUFvQjtJQUNwQixFQUFFO0lBQ0YsNEVBQTRFO0lBRTVFLElBQ1csV0FBVyxDQUFDLEtBQWE7UUFDaEMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUM1QixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUNELElBQVcsV0FBVztRQUNsQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDN0IsQ0FBQzs7a0hBL0dRLG9CQUFvQjtzR0FBcEIsb0JBQW9COzRGQUFwQixvQkFBb0I7a0JBSGhDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLG1CQUFtQjtpQkFDaEM7aUdBU1UsR0FBRztzQkFEVCxNQUFNO2dCQUdBLE1BQU07c0JBRFosTUFBTTtnQkFHQSxXQUFXO3NCQURqQixNQUFNO2dCQVdBLEtBQUs7c0JBRFgsS0FBSztnQkFHQyxNQUFNO3NCQURaLEtBQUs7Z0JBK0VLLFdBQVc7c0JBRHJCLEtBQUs7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERlc3Ryb3lhYmxlQ29udGFpbmVyIH0gZnJvbSAnQHRzLWNvcmUvY29tbW9uJztcbmltcG9ydCB7IERhdGVVdGlsIH0gZnJvbSAnQHRzLWNvcmUvY29tbW9uJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbdmktc2Nyb2xsLWNoZWNrXSdcbn0pXG5leHBvcnQgY2xhc3MgU2Nyb2xsQ2hlY2tEaXJlY3RpdmUgZXh0ZW5kcyBEZXN0cm95YWJsZUNvbnRhaW5lciB7XG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy9cdFByb3BlcnRpZXNcbiAgICAvL1xuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyB0b3A6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgYm90dG9tOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGxpbWl0RXhjZWVkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBwcml2YXRlIF9zY3JvbGxMaW1pdDogbnVtYmVyO1xuXG4gICAgcHJpdmF0ZSBlbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIGlzVG9wOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBpc0JvdHRvbTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgaXNFeGNlZWRMaW1pdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGVsYXk6IG51bWJlciA9IERhdGVVdGlsLk1JTExJU0VDT05EU19TRUNPTkQgLyAxMDtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvZmZzZXQ6IG51bWJlciA9IDUwO1xuXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy9cdENvbnN0cnVjdG9yXG4gICAgLy9cbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50OiBFbGVtZW50UmVmKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuZGVsYXkgPSBEYXRlVXRpbC5NSUxMSVNFQ09ORFNfU0VDT05EIC8gMTA7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQubmF0aXZlRWxlbWVudDtcblxuICAgICAgICBmcm9tRXZlbnQodGhpcy5lbGVtZW50LCAnc2Nyb2xsJykucGlwZShkZWJvdW5jZVRpbWUodGhpcy5kZWxheSksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCkpLnN1YnNjcmliZSh0aGlzLmNoZWNrKTtcbiAgICB9XG5cbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvL1x0UHJvdGVjdGVkIE1ldGhvZHNcbiAgICAvL1xuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIHByb3RlY3RlZCBjaGVjayA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5zY3JvbGxWYWx1ZSA+PSB0aGlzLnNjcm9sbExpbWl0O1xuICAgICAgICBpZiAodmFsdWUgIT09IHRoaXMuaXNFeGNlZWRMaW1pdCkge1xuICAgICAgICAgICAgdGhpcy5pc0V4Y2VlZExpbWl0ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmxpbWl0RXhjZWVkLmVtaXQodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFsdWUgPSB0aGlzLnNjcm9sbFZhbHVlICsgdGhpcy5jbGllbnRIZWlnaHQgKyB0aGlzLm9mZnNldCA+IHRoaXMuc2Nyb2xsSGVpZ2h0O1xuICAgICAgICB0aGlzLmJvdHRvbS5uZXh0KHZhbHVlKTtcblxuICAgICAgICAvKlxuICAgICAgICBpZiAodmFsdWUgIT09IHRoaXMuaXNCb3R0b20pIHtcbiAgICAgICAgICAgIHRoaXMuaXNCb3R0b20gPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuYm90dG9tLm5leHQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgICovXG5cbiAgICAgICAgdmFsdWUgPSB0aGlzLnNjcm9sbFZhbHVlIDwgdGhpcy5vZmZzZXQ7XG4gICAgICAgIHRoaXMudG9wLm5leHQodmFsdWUpO1xuICAgICAgICAvKlxuICAgICAgICBpZiAodmFsdWUgIT09IHRoaXMuaXNUb3ApIHtcbiAgICAgICAgICAgIHRoaXMuaXNUb3AgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudG9wLm5leHQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgICovXG4gICAgfTtcblxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvL1xuICAgIC8vXHRQcml2YXRlIFByb3BlcnRpZXNcbiAgICAvL1xuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvL1x0UHJpdmF0ZSBQcm9wZXJ0aWVzXG4gICAgLy9cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgcHJvdGVjdGVkIGdldCBzY3JvbGxWYWx1ZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LnNjcm9sbFRvcDtcbiAgICB9XG4gICAgcHJvdGVjdGVkIGdldCBzY3JvbGxIZWlnaHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgZ2V0IGNsaWVudEhlaWdodCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICB9XG5cbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvL1x0UHVibGljIFByb3BlcnRpZXNcbiAgICAvL1xuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIEBJbnB1dCgndmktc2Nyb2xsLWNoZWNrJylcbiAgICBwdWJsaWMgc2V0IHNjcm9sbExpbWl0KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09IHRoaXMuX3Njcm9sbExpbWl0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2Nyb2xsTGltaXQgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5jaGVjaygpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IHNjcm9sbExpbWl0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zY3JvbGxMaW1pdDtcbiAgICB9XG59XG4iXX0=
@@ -2951,27 +2951,64 @@ class ScrollCheckDirective extends DestroyableContainer {
2951
2951
  // Properties
2952
2952
  //
2953
2953
  //--------------------------------------------------------------------------
2954
+ this.top = new EventEmitter();
2955
+ this.bottom = new EventEmitter();
2954
2956
  this.limitExceed = new EventEmitter();
2957
+ this.isTop = false;
2958
+ this.isBottom = false;
2955
2959
  this.isExceedLimit = false;
2956
- this._scrollValue = element.nativeElement.scrollTop;
2957
- fromEvent(element.nativeElement, 'scroll')
2958
- .pipe(debounceTime(DateUtil.MILISECONDS_SECOND / 10), takeUntil(this.destroyed))
2959
- .subscribe(() => {
2960
- this._scrollValue = element.nativeElement.scrollTop;
2961
- this.check();
2962
- });
2960
+ this.delay = DateUtil.MILLISECONDS_SECOND / 10;
2961
+ this.offset = 50;
2962
+ //--------------------------------------------------------------------------
2963
+ //
2964
+ // Protected Methods
2965
+ //
2966
+ //--------------------------------------------------------------------------
2967
+ this.check = () => {
2968
+ let value = this.scrollValue >= this.scrollLimit;
2969
+ if (value !== this.isExceedLimit) {
2970
+ this.isExceedLimit = value;
2971
+ this.limitExceed.emit(value);
2972
+ }
2973
+ value = this.scrollValue + this.clientHeight + this.offset > this.scrollHeight;
2974
+ this.bottom.next(value);
2975
+ /*
2976
+ if (value !== this.isBottom) {
2977
+ this.isBottom = value;
2978
+ this.bottom.next(value);
2979
+ }
2980
+ */
2981
+ value = this.scrollValue < this.offset;
2982
+ this.top.next(value);
2983
+ /*
2984
+ if (value !== this.isTop) {
2985
+ this.isTop = value;
2986
+ this.top.next(value);
2987
+ }
2988
+ */
2989
+ };
2990
+ this.delay = DateUtil.MILLISECONDS_SECOND / 10;
2991
+ this.element = element.nativeElement;
2992
+ fromEvent(this.element, 'scroll').pipe(debounceTime(this.delay), takeUntil(this.destroyed)).subscribe(this.check);
2963
2993
  }
2964
2994
  //--------------------------------------------------------------------------
2965
2995
  //
2966
- // Protected Methods
2996
+ // Private Properties
2967
2997
  //
2968
2998
  //--------------------------------------------------------------------------
2969
- check() {
2970
- let value = this._scrollValue >= this.scrollLimit;
2971
- if (value !== this.isExceedLimit) {
2972
- this.isExceedLimit = value;
2973
- this.limitExceed.emit(this.isExceedLimit);
2974
- }
2999
+ // --------------------------------------------------------------------------
3000
+ //
3001
+ // Private Properties
3002
+ //
3003
+ // --------------------------------------------------------------------------
3004
+ get scrollValue() {
3005
+ return this.element.scrollTop;
3006
+ }
3007
+ get scrollHeight() {
3008
+ return this.element.scrollHeight;
3009
+ }
3010
+ get clientHeight() {
3011
+ return this.element.clientHeight;
2975
3012
  }
2976
3013
  //--------------------------------------------------------------------------
2977
3014
  //
@@ -2990,14 +3027,22 @@ class ScrollCheckDirective extends DestroyableContainer {
2990
3027
  }
2991
3028
  }
2992
3029
  ScrollCheckDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ScrollCheckDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
2993
- ScrollCheckDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: ScrollCheckDirective, selector: "[vi-scroll-check]", inputs: { scrollLimit: ["vi-scroll-check", "scrollLimit"] }, outputs: { limitExceed: "limitExceed" }, usesInheritance: true, ngImport: i0 });
3030
+ ScrollCheckDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: ScrollCheckDirective, selector: "[vi-scroll-check]", inputs: { delay: "delay", offset: "offset", scrollLimit: ["vi-scroll-check", "scrollLimit"] }, outputs: { top: "top", bottom: "bottom", limitExceed: "limitExceed" }, usesInheritance: true, ngImport: i0 });
2994
3031
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ScrollCheckDirective, decorators: [{
2995
3032
  type: Directive,
2996
3033
  args: [{
2997
3034
  selector: '[vi-scroll-check]'
2998
3035
  }]
2999
- }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { limitExceed: [{
3036
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { top: [{
3000
3037
  type: Output
3038
+ }], bottom: [{
3039
+ type: Output
3040
+ }], limitExceed: [{
3041
+ type: Output
3042
+ }], delay: [{
3043
+ type: Input
3044
+ }], offset: [{
3045
+ type: Input
3001
3046
  }], scrollLimit: [{
3002
3047
  type: Input,
3003
3048
  args: ['vi-scroll-check']