ngx-fixed-footer 0.1.0 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  > Angular directive that adds fixed footer without overlap
16
16
 
17
- > ✓ _Angular 12, Ivy and SSR compatible_
17
+ > ✓ _Angular 13, Ivy and SSR compatible_
18
18
 
19
19
  Here's the [demo](http://celtian.github.io/ngx-fixed-footer/) or [stackblitz live preview](https://stackblitz.com/edit/ngx-fixed-footer) or [codesandbox live preview](https://codesandbox.io/s/ngx-fixed-footer-m4f21)
20
20
 
@@ -59,6 +59,13 @@ yarn add ngx-fixed-footer
59
59
 
60
60
  ```
61
61
 
62
+ ## Compatibility
63
+
64
+ | Angular | ngx-fixed-footer | Install |
65
+ | --------- | ---------------- | ----------------------------- |
66
+ | >= 12 | 1.x | `yarn add ngx-fixed-footer` |
67
+ | >= 5 < 13 | 0.x | `yarn add ngx-fixed-footer@0` |
68
+
62
69
  ## Quick start
63
70
 
64
71
  ### Example code
@@ -101,7 +108,7 @@ _None_
101
108
 
102
109
  ## License
103
110
 
104
- Copyright &copy; 2021 [Dominik Hladik](https://github.com/Celtian)
111
+ Copyright &copy; 2021 - 2022 [Dominik Hladik](https://github.com/Celtian)
105
112
 
106
113
  All contents are licensed under the [MIT license].
107
114
 
@@ -0,0 +1,21 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { DEFAULT_CONTAINER_SELECTOR, DEFAULT_CSS_ATTRIBUTE } from './ngx-fixed-footer.constants';
3
+ import * as i0 from "@angular/core";
4
+ export class NgxFixedFooterOptionsService {
5
+ constructor() {
6
+ /**
7
+ * @returns Css attribute of HTML element which gets style. It means margin or padding
8
+ */
9
+ this.cssAttribute = DEFAULT_CSS_ATTRIBUTE;
10
+ /**
11
+ * @returns Css selector of HTML element which gets extra margin or padding
12
+ */
13
+ this.containerSelector = DEFAULT_CONTAINER_SELECTOR;
14
+ }
15
+ }
16
+ NgxFixedFooterOptionsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxFixedFooterOptionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
17
+ NgxFixedFooterOptionsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxFixedFooterOptionsService });
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxFixedFooterOptionsService, decorators: [{
19
+ type: Injectable
20
+ }] });
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWZpeGVkLWZvb3Rlci1vcHRpb25zLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZml4ZWQtZm9vdGVyL3NyYy9saWIvbmd4LWZpeGVkLWZvb3Rlci1vcHRpb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7QUFJakcsTUFBTSxPQUFPLDRCQUE0QjtJQUR6QztRQUVFOztXQUVHO1FBQ0ksaUJBQVksR0FBK0IscUJBQXFCLENBQUM7UUFFeEU7O1dBRUc7UUFDSSxzQkFBaUIsR0FBVywwQkFBMEIsQ0FBQztLQUMvRDs7eUhBVlksNEJBQTRCOzZIQUE1Qiw0QkFBNEI7MkZBQTVCLDRCQUE0QjtrQkFEeEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERFRkFVTFRfQ09OVEFJTkVSX1NFTEVDVE9SLCBERUZBVUxUX0NTU19BVFRSSUJVVEUgfSBmcm9tICcuL25neC1maXhlZC1mb290ZXIuY29uc3RhbnRzJztcbmltcG9ydCB7IE5neEZpeGVkRm9vdGVyQ3NzQXR0cmlidXRlIH0gZnJvbSAnLi9uZ3gtZml4ZWQtZm9vdGVyLmludGVyZmFjZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOZ3hGaXhlZEZvb3Rlck9wdGlvbnNTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIEByZXR1cm5zIENzcyBhdHRyaWJ1dGUgb2YgSFRNTCBlbGVtZW50IHdoaWNoIGdldHMgc3R5bGUuIEl0IG1lYW5zIG1hcmdpbiBvciBwYWRkaW5nXG4gICAqL1xuICBwdWJsaWMgY3NzQXR0cmlidXRlOiBOZ3hGaXhlZEZvb3RlckNzc0F0dHJpYnV0ZSA9IERFRkFVTFRfQ1NTX0FUVFJJQlVURTtcblxuICAvKipcbiAgICogQHJldHVybnMgQ3NzIHNlbGVjdG9yIG9mIEhUTUwgZWxlbWVudCB3aGljaCBnZXRzIGV4dHJhIG1hcmdpbiBvciBwYWRkaW5nXG4gICAqL1xuICBwdWJsaWMgY29udGFpbmVyU2VsZWN0b3I6IHN0cmluZyA9IERFRkFVTFRfQ09OVEFJTkVSX1NFTEVDVE9SO1xufVxuIl19
@@ -0,0 +1,89 @@
1
+ import { DOCUMENT } from '@angular/common';
2
+ import { Directive, Inject, Input } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "./ngx-fixed-footer-options.service";
5
+ export class NgxFixedFooterDirective {
6
+ constructor(document, el, render, options) {
7
+ this.document = document;
8
+ this.el = el;
9
+ this.render = render;
10
+ this.options = options;
11
+ this.containerSelector = this.options.containerSelector;
12
+ this.cssAttribute = this.options.cssAttribute;
13
+ this.offsetHeight = undefined;
14
+ }
15
+ ngOnInit() {
16
+ if (this.hasResizeObserver && this.document) {
17
+ const resizeObserver = new ResizeObserver(() => this.checkHeight());
18
+ resizeObserver.observe(this.html);
19
+ }
20
+ }
21
+ ngOnChanges(changes) {
22
+ if (this.hasResizeObserver && this.document) {
23
+ // swap selector
24
+ if (changes?.containerSelector && !changes?.containerSelector?.firstChange) {
25
+ const prev = changes?.containerSelector?.previousValue;
26
+ const next = changes?.containerSelector?.currentValue;
27
+ if (next !== prev) {
28
+ this.removeStyle(this.document.body.querySelector(prev), this.cssAttribute);
29
+ this.setStyle(this.document.body.querySelector(next), this.cssAttribute, this.offsetHeight);
30
+ }
31
+ }
32
+ // swap css attribute
33
+ if (changes?.cssAttribute && !changes?.cssAttribute?.firstChange) {
34
+ const prev = changes?.containerSelector?.previousValue;
35
+ const next = changes?.cssAttribute?.currentValue;
36
+ if (next !== prev) {
37
+ this.removeStyle(this.container, prev);
38
+ this.setStyle(this.container, next, this.offsetHeight);
39
+ }
40
+ }
41
+ }
42
+ }
43
+ ngOnDestroy() {
44
+ if (this.hasResizeObserver && this.document) {
45
+ this.removeStyle(this.container, this.cssAttribute);
46
+ if (this.resizeObserver) {
47
+ this.resizeObserver.unobserve(this.html);
48
+ }
49
+ }
50
+ }
51
+ checkHeight() {
52
+ const height = this.html.offsetHeight;
53
+ if (this.offsetHeight !== height) {
54
+ this.setStyle(this.container, this.cssAttribute, height);
55
+ this.offsetHeight = height;
56
+ }
57
+ }
58
+ removeStyle(container, cssAttribute) {
59
+ this.render.setStyle(container, `${cssAttribute}-bottom`, '');
60
+ }
61
+ setStyle(container, cssAttribute, height) {
62
+ this.render.setStyle(container, `${cssAttribute}-bottom`, height === 0 ? '' : `${height}px`);
63
+ }
64
+ get container() {
65
+ return this.document.body.querySelector(this.containerSelector);
66
+ }
67
+ get html() {
68
+ return this.el.nativeElement;
69
+ }
70
+ get hasResizeObserver() {
71
+ return typeof ResizeObserver !== 'undefined';
72
+ }
73
+ }
74
+ NgxFixedFooterDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxFixedFooterDirective, deps: [{ token: DOCUMENT }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.NgxFixedFooterOptionsService }], target: i0.ɵɵFactoryTarget.Directive });
75
+ NgxFixedFooterDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.8", type: NgxFixedFooterDirective, selector: "[ngxFixedFooter]", inputs: { containerSelector: "containerSelector", cssAttribute: "cssAttribute" }, usesOnChanges: true, ngImport: i0 });
76
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxFixedFooterDirective, decorators: [{
77
+ type: Directive,
78
+ args: [{
79
+ selector: '[ngxFixedFooter]'
80
+ }]
81
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
82
+ type: Inject,
83
+ args: [DOCUMENT]
84
+ }] }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.NgxFixedFooterOptionsService }]; }, propDecorators: { containerSelector: [{
85
+ type: Input
86
+ }], cssAttribute: [{
87
+ type: Input
88
+ }] } });
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWZpeGVkLWZvb3Rlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZml4ZWQtZm9vdGVyL3NyYy9saWIvbmd4LWZpeGVkLWZvb3Rlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFDTCxTQUFTLEVBRVQsTUFBTSxFQUNOLEtBQUssRUFNTixNQUFNLGVBQWUsQ0FBQzs7O0FBT3ZCLE1BQU0sT0FBTyx1QkFBdUI7SUFPbEMsWUFDNEIsUUFBYSxFQUMvQixFQUFjLEVBQ2QsTUFBaUIsRUFDakIsT0FBcUM7UUFIbkIsYUFBUSxHQUFSLFFBQVEsQ0FBSztRQUMvQixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2QsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNqQixZQUFPLEdBQVAsT0FBTyxDQUE4QjtRQVYvQixzQkFBaUIsR0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO1FBQzNELGlCQUFZLEdBQStCLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO1FBRTdFLGlCQUFZLEdBQVcsU0FBUyxDQUFDO0lBUXRDLENBQUM7SUFFRyxRQUFRO1FBQ2IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUMzQyxNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUNwRSxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuQztJQUNILENBQUM7SUFFTSxXQUFXLENBQUMsT0FBc0I7UUFDdkMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUMzQyxnQkFBZ0I7WUFD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SUFDL0IsQ0FBQztJQUVELElBQVksaUJBQWlCO1FBQzNCLE9BQU8sT0FBTyxjQUFjLEtBQUssV0FBVyxDQUFDO0lBQy9DLENBQUM7O29IQWhGVSx1QkFBdUIsa0JBUXhCLFFBQVE7d0dBUlAsdUJBQXVCOzJGQUF2Qix1QkFBdUI7a0JBSG5DLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtpQkFDN0I7OzBCQVNJLE1BQU07MkJBQUMsUUFBUTt3SUFQRixpQkFBaUI7c0JBQWhDLEtBQUs7Z0JBQ1UsWUFBWTtzQkFBM0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd4Rml4ZWRGb290ZXJPcHRpb25zU2VydmljZSB9IGZyb20gJy4vbmd4LWZpeGVkLWZvb3Rlci1vcHRpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmd4Rml4ZWRGb290ZXJDc3NBdHRyaWJ1dGUgfSBmcm9tICcuL25neC1maXhlZC1mb290ZXIuaW50ZXJmYWNlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW25neEZpeGVkRm9vdGVyXSdcbn0pXG5leHBvcnQgY2xhc3MgTmd4Rml4ZWRGb290ZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgT25Jbml0IHtcbiAgQElucHV0KCkgcHVibGljIGNvbnRhaW5lclNlbGVjdG9yOiBzdHJpbmcgPSB0aGlzLm9wdGlvbnMuY29udGFpbmVyU2VsZWN0b3I7XG4gIEBJbnB1dCgpIHB1YmxpYyBjc3NBdHRyaWJ1dGU6IE5neEZpeGVkRm9vdGVyQ3NzQXR0cmlidXRlID0gdGhpcy5vcHRpb25zLmNzc0F0dHJpYnV0ZTtcblxuICBwcml2YXRlIG9mZnNldEhlaWdodDogbnVtYmVyID0gdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBhbnksXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlbmRlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgb3B0aW9uczogTmd4Rml4ZWRGb290ZXJPcHRpb25zU2VydmljZVxuICApIHt9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmhhc1Jlc2l6ZU9ic2VydmVyICYmIHRoaXMuZG9jdW1lbnQpIHtcbiAgICAgIGNvbnN0IHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHRoaXMuY2hlY2tIZWlnaHQoKSk7XG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuaHRtbCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oYXNSZXNpemVPYnNlcnZlciAmJiB0aGlzLmRvY3VtZW50KSB7XG4gICAgICAvLyBzd2FwIHNlbGVjdG9yXG4gICAgICBpZiAoY2hhbmdlcz8uY29udGFpbmVyU2VsZWN0b3IgJiYgIWNoYW5nZXM/LmNvbnRhaW5lclNlbGVjdG9yPy5maXJzdENoYW5nZSkge1xuICAgICAgICBjb25zdCBwcmV2ID0gY2hhbmdlcz8uY29udGFpbmVyU2VsZWN0b3I/LnByZXZpb3VzVmFsdWU7XG4gICAgICAgIGNvbnN0IG5leHQgPSBjaGFuZ2VzPy5jb250YWluZXJTZWxlY3Rvcj8uY3VycmVudFZhbHVlO1xuICAgICAgICBpZiAobmV4dCAhPT0gcHJldikge1xuICAgICAgICAgIHRoaXMucmVtb3ZlU3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3IocHJldiksIHRoaXMuY3NzQXR0cmlidXRlKTtcbiAgICAgICAgICB0aGlzLnNldFN0eWxlKHRoaXMuZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yKG5leHQpLCB0aGlzLmNzc0F0dHJpYnV0ZSwgdGhpcy5vZmZzZXRIZWlnaHQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHN3YXAgY3NzIGF0dHJpYnV0ZVxuICAgICAgaWYgKGNoYW5nZXM/LmNzc0F0dHJpYnV0ZSAmJiAhY2hhbmdlcz8uY3NzQXR0cmlidXRlPy5maXJzdENoYW5nZSkge1xuICAgICAgICBjb25zdCBwcmV2ID0gY2hhbmdlcz8uY29udGFpbmVyU2VsZWN0b3I/LnByZXZpb3VzVmFsdWU7XG4gICAgICAgIGNvbnN0IG5leHQgPSBjaGFuZ2VzPy5jc3NBdHRyaWJ1dGU/LmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgaWYgKG5leHQgIT09IHByZXYpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZVN0eWxlKHRoaXMuY29udGFpbmVyLCBwcmV2KTtcbiAgICAgICAgICB0aGlzLnNldFN0eWxlKHRoaXMuY29udGFpbmVyLCBuZXh0LCB0aGlzLm9mZnNldEhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGFzUmVzaXplT2JzZXJ2ZXIgJiYgdGhpcy5kb2N1bWVudCkge1xuICAgICAgdGhpcy5yZW1vdmVTdHlsZSh0aGlzLmNvbnRhaW5lciwgdGhpcy5jc3NBdHRyaWJ1dGUpO1xuICAgICAgaWYgKHRoaXMucmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci51bm9ic2VydmUodGhpcy5odG1sKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrSGVpZ2h0KCk6IHZvaWQge1xuICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuaHRtbC5vZmZzZXRIZWlnaHQ7XG4gICAgaWYgKHRoaXMub2Zmc2V0SGVpZ2h0ICE9PSBoZWlnaHQpIHtcbiAgICAgIHRoaXMuc2V0U3R5bGUodGhpcy5jb250YWluZXIsIHRoaXMuY3NzQXR0cmlidXRlLCBoZWlnaHQpO1xuICAgICAgdGhpcy5vZmZzZXRIZWlnaHQgPSBoZWlnaHQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVTdHlsZShjb250YWluZXI6IEhUTUxFbGVtZW50LCBjc3NBdHRyaWJ1dGU6IE5neEZpeGVkRm9vdGVyQ3NzQXR0cmlidXRlKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXIuc2V0U3R5bGUoY29udGFpbmVyLCBgJHtjc3NBdHRyaWJ1dGV9LWJvdHRvbWAsICcnKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U3R5bGUoY29udGFpbmVyOiBIVE1MRWxlbWVudCwgY3NzQXR0cmlidXRlOiBOZ3hGaXhlZEZvb3RlckNzc0F0dHJpYnV0ZSwgaGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlci5zZXRTdHlsZShjb250YWluZXIsIGAke2Nzc0F0dHJpYnV0ZX0tYm90dG9tYCwgaGVpZ2h0ID09PSAwID8gJycgOiBgJHtoZWlnaHR9cHhgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGNvbnRhaW5lcigpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yKHRoaXMuY29udGFpbmVyU2VsZWN0b3IpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaHRtbCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuZWwubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGhhc1Jlc2l6ZU9ic2VydmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,36 @@
1
+ import { InjectionToken, NgModule } from '@angular/core';
2
+ import { ngxFixedFooterOptionsFactory } from './ngx-fixed-footer-factory';
3
+ import { NgxFixedFooterOptionsService } from './ngx-fixed-footer-options.service';
4
+ import { NgxFixedFooterDirective } from './ngx-fixed-footer.directive';
5
+ import * as i0 from "@angular/core";
6
+ export let FOR_ROOT_OPTIONS_TOKEN = new InjectionToken('forRoot() NgxCutOptionsService configuration.');
7
+ export class NgxFixedFooterModule {
8
+ static forRoot(options) {
9
+ return {
10
+ ngModule: NgxFixedFooterModule,
11
+ providers: [
12
+ {
13
+ provide: FOR_ROOT_OPTIONS_TOKEN,
14
+ useValue: options
15
+ },
16
+ {
17
+ provide: NgxFixedFooterOptionsService,
18
+ useFactory: ngxFixedFooterOptionsFactory,
19
+ deps: [FOR_ROOT_OPTIONS_TOKEN]
20
+ }
21
+ ]
22
+ };
23
+ }
24
+ }
25
+ NgxFixedFooterModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxFixedFooterModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
26
+ NgxFixedFooterModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxFixedFooterModule, declarations: [NgxFixedFooterDirective], exports: [NgxFixedFooterDirective] });
27
+ NgxFixedFooterModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxFixedFooterModule, providers: [NgxFixedFooterOptionsService] });
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxFixedFooterModule, decorators: [{
29
+ type: NgModule,
30
+ args: [{
31
+ declarations: [NgxFixedFooterDirective],
32
+ exports: [NgxFixedFooterDirective],
33
+ providers: [NgxFixedFooterOptionsService]
34
+ }]
35
+ }] });
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWZpeGVkLWZvb3Rlci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZml4ZWQtZm9vdGVyL3NyYy9saWIvbmd4LWZpeGVkLWZvb3Rlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBdUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDOztBQUd2RSxNQUFNLENBQUMsSUFBSSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FDcEQsK0NBQStDLENBQ2hELENBQUM7QUFPRixNQUFNLE9BQU8sb0JBQW9CO0lBQ3hCLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBK0I7UUFDbkQsT0FBTztZQUNMLFFBQVEsRUFBRSxvQkFBb0I7WUFDOUIsU0FBUyxFQUFFO2dCQUNUO29CQUNFLE9BQU8sRUFBRSxzQkFBc0I7b0JBQy9CLFFBQVEsRUFBRSxPQUFPO2lCQUNsQjtnQkFDRDtvQkFDRSxPQUFPLEVBQUUsNEJBQTRCO29CQUNyQyxVQUFVLEVBQUUsNEJBQTRCO29CQUN4QyxJQUFJLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztpQkFDL0I7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDOztpSEFoQlUsb0JBQW9CO2tIQUFwQixvQkFBb0IsaUJBSmhCLHVCQUF1QixhQUM1Qix1QkFBdUI7a0hBR3RCLG9CQUFvQixhQUZwQixDQUFDLDRCQUE0QixDQUFDOzJGQUU5QixvQkFBb0I7a0JBTGhDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsdUJBQXVCLENBQUM7b0JBQ3ZDLE9BQU8sRUFBRSxDQUFDLHVCQUF1QixDQUFDO29CQUNsQyxTQUFTLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQztpQkFDMUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG5neEZpeGVkRm9vdGVyT3B0aW9uc0ZhY3RvcnkgfSBmcm9tICcuL25neC1maXhlZC1mb290ZXItZmFjdG9yeSc7XG5pbXBvcnQgeyBOZ3hGaXhlZEZvb3Rlck9wdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi9uZ3gtZml4ZWQtZm9vdGVyLW9wdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBOZ3hGaXhlZEZvb3RlckRpcmVjdGl2ZSB9IGZyb20gJy4vbmd4LWZpeGVkLWZvb3Rlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTmd4Rml4ZWRGb290ZXJPcHRpb25zIH0gZnJvbSAnLi9uZ3gtZml4ZWQtZm9vdGVyLmludGVyZmFjZSc7XG5cbmV4cG9ydCBsZXQgRk9SX1JPT1RfT1BUSU9OU19UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxOZ3hGaXhlZEZvb3Rlck9wdGlvbnM+KFxuICAnZm9yUm9vdCgpIE5neEN1dE9wdGlvbnNTZXJ2aWNlIGNvbmZpZ3VyYXRpb24uJ1xuKTtcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbTmd4Rml4ZWRGb290ZXJEaXJlY3RpdmVdLFxuICBleHBvcnRzOiBbTmd4Rml4ZWRGb290ZXJEaXJlY3RpdmVdLFxuICBwcm92aWRlcnM6IFtOZ3hGaXhlZEZvb3Rlck9wdGlvbnNTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3hGaXhlZEZvb3Rlck1vZHVsZSB7XG4gIHB1YmxpYyBzdGF0aWMgZm9yUm9vdChvcHRpb25zPzogTmd4Rml4ZWRGb290ZXJPcHRpb25zKTogTW9kdWxlV2l0aFByb3ZpZGVyczxOZ3hGaXhlZEZvb3Rlck1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogTmd4Rml4ZWRGb290ZXJNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IEZPUl9ST09UX09QVElPTlNfVE9LRU4sXG4gICAgICAgICAgdXNlVmFsdWU6IG9wdGlvbnNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IE5neEZpeGVkRm9vdGVyT3B0aW9uc1NlcnZpY2UsXG4gICAgICAgICAgdXNlRmFjdG9yeTogbmd4Rml4ZWRGb290ZXJPcHRpb25zRmFjdG9yeSxcbiAgICAgICAgICBkZXBzOiBbRk9SX1JPT1RfT1BUSU9OU19UT0tFTl1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWZpeGVkLWZvb3Rlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1maXhlZC1mb290ZXIvc3JjL25neC1maXhlZC1mb290ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -1,4 +1,5 @@
1
- import { Injectable, Directive, Inject, ElementRef, Renderer2, Input, InjectionToken, NgModule } from '@angular/core';
1
+ import * as i0 from '@angular/core';
2
+ import { Injectable, Directive, Inject, Input, InjectionToken, NgModule } from '@angular/core';
2
3
  import { DOCUMENT } from '@angular/common';
3
4
 
4
5
  const DEFAULT_CSS_ATTRIBUTE = 'padding';
@@ -16,9 +17,11 @@ class NgxFixedFooterOptionsService {
16
17
  this.containerSelector = DEFAULT_CONTAINER_SELECTOR;
17
18
  }
18
19
  }
19
- NgxFixedFooterOptionsService.decorators = [
20
- { type: Injectable }
21
- ];
20
+ NgxFixedFooterOptionsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxFixedFooterOptionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
21
+ NgxFixedFooterOptionsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxFixedFooterOptionsService });
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxFixedFooterOptionsService, decorators: [{
23
+ type: Injectable
24
+ }] });
22
25
 
23
26
  class NgxFixedFooterDirective {
24
27
  constructor(document, el, render, options) {
@@ -90,21 +93,23 @@ class NgxFixedFooterDirective {
90
93
  return typeof ResizeObserver !== 'undefined';
91
94
  }
92
95
  }
93
- NgxFixedFooterDirective.decorators = [
94
- { type: Directive, args: [{
95
- selector: '[ngxFixedFooter]'
96
- },] }
97
- ];
98
- NgxFixedFooterDirective.ctorParameters = () => [
99
- { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
100
- { type: ElementRef },
101
- { type: Renderer2 },
102
- { type: NgxFixedFooterOptionsService }
103
- ];
104
- NgxFixedFooterDirective.propDecorators = {
105
- containerSelector: [{ type: Input }],
106
- cssAttribute: [{ type: Input }]
107
- };
96
+ NgxFixedFooterDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxFixedFooterDirective, deps: [{ token: DOCUMENT }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: NgxFixedFooterOptionsService }], target: i0.ɵɵFactoryTarget.Directive });
97
+ NgxFixedFooterDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.8", type: NgxFixedFooterDirective, selector: "[ngxFixedFooter]", inputs: { containerSelector: "containerSelector", cssAttribute: "cssAttribute" }, usesOnChanges: true, ngImport: i0 });
98
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxFixedFooterDirective, decorators: [{
99
+ type: Directive,
100
+ args: [{
101
+ selector: '[ngxFixedFooter]'
102
+ }]
103
+ }], ctorParameters: function () {
104
+ return [{ type: undefined, decorators: [{
105
+ type: Inject,
106
+ args: [DOCUMENT]
107
+ }] }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: NgxFixedFooterOptionsService }];
108
+ }, propDecorators: { containerSelector: [{
109
+ type: Input
110
+ }], cssAttribute: [{
111
+ type: Input
112
+ }] } });
108
113
 
109
114
  const ngxFixedFooterOptionsFactory = (options) => {
110
115
  const ngxFixedFooterOptionsService = new NgxFixedFooterOptionsService();
@@ -138,13 +143,17 @@ class NgxFixedFooterModule {
138
143
  };
139
144
  }
140
145
  }
141
- NgxFixedFooterModule.decorators = [
142
- { type: NgModule, args: [{
143
- declarations: [NgxFixedFooterDirective],
144
- exports: [NgxFixedFooterDirective],
145
- providers: [NgxFixedFooterOptionsService]
146
- },] }
147
- ];
146
+ NgxFixedFooterModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxFixedFooterModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
147
+ NgxFixedFooterModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxFixedFooterModule, declarations: [NgxFixedFooterDirective], exports: [NgxFixedFooterDirective] });
148
+ NgxFixedFooterModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxFixedFooterModule, providers: [NgxFixedFooterOptionsService] });
149
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxFixedFooterModule, decorators: [{
150
+ type: NgModule,
151
+ args: [{
152
+ declarations: [NgxFixedFooterDirective],
153
+ exports: [NgxFixedFooterDirective],
154
+ providers: [NgxFixedFooterOptionsService]
155
+ }]
156
+ }] });
148
157
 
149
158
  /*
150
159
  * Public API Surface of ngx-fixed-footer
@@ -154,5 +163,5 @@ NgxFixedFooterModule.decorators = [
154
163
  * Generated bundle index. Do not edit.
155
164
  */
156
165
 
157
- export { DEFAULT_CONTAINER_SELECTOR, DEFAULT_CSS_ATTRIBUTE, FOR_ROOT_OPTIONS_TOKEN, NgxFixedFooterDirective, NgxFixedFooterModule, NgxFixedFooterOptionsService, ngxFixedFooterOptionsFactory as ɵa };
158
- //# sourceMappingURL=ngx-fixed-footer.js.map
166
+ export { DEFAULT_CONTAINER_SELECTOR, DEFAULT_CSS_ATTRIBUTE, FOR_ROOT_OPTIONS_TOKEN, NgxFixedFooterDirective, NgxFixedFooterModule, NgxFixedFooterOptionsService };
167
+ //# sourceMappingURL=ngx-fixed-footer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngx-fixed-footer.mjs","sources":["../../../projects/ngx-fixed-footer/src/lib/ngx-fixed-footer.constants.ts","../../../projects/ngx-fixed-footer/src/lib/ngx-fixed-footer-options.service.ts","../../../projects/ngx-fixed-footer/src/lib/ngx-fixed-footer.directive.ts","../../../projects/ngx-fixed-footer/src/lib/ngx-fixed-footer-factory.ts","../../../projects/ngx-fixed-footer/src/lib/ngx-fixed-footer.module.ts","../../../projects/ngx-fixed-footer/src/public-api.ts","../../../projects/ngx-fixed-footer/src/ngx-fixed-footer.ts"],"sourcesContent":["export const DEFAULT_CSS_ATTRIBUTE = 'padding';\nexport const DEFAULT_CONTAINER_SELECTOR = '[role=\"main\"]';\n","import { Injectable } from '@angular/core';\nimport { DEFAULT_CONTAINER_SELECTOR, DEFAULT_CSS_ATTRIBUTE } from './ngx-fixed-footer.constants';\nimport { NgxFixedFooterCssAttribute } from './ngx-fixed-footer.interface';\n\n@Injectable()\nexport class NgxFixedFooterOptionsService {\n /**\n * @returns Css attribute of HTML element which gets style. It means margin or padding\n */\n public cssAttribute: NgxFixedFooterCssAttribute = DEFAULT_CSS_ATTRIBUTE;\n\n /**\n * @returns Css selector of HTML element which gets extra margin or padding\n */\n public containerSelector: string = DEFAULT_CONTAINER_SELECTOR;\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n Directive,\n ElementRef,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Renderer2,\n SimpleChanges\n} from '@angular/core';\nimport { NgxFixedFooterOptionsService } from './ngx-fixed-footer-options.service';\nimport { NgxFixedFooterCssAttribute } from './ngx-fixed-footer.interface';\n\n@Directive({\n selector: '[ngxFixedFooter]'\n})\nexport class NgxFixedFooterDirective implements OnDestroy, OnChanges, OnInit {\n @Input() public containerSelector: string = this.options.containerSelector;\n @Input() public cssAttribute: NgxFixedFooterCssAttribute = this.options.cssAttribute;\n\n private offsetHeight: number = undefined;\n private resizeObserver: ResizeObserver;\n\n constructor(\n @Inject(DOCUMENT) private document: any,\n private el: ElementRef,\n private render: Renderer2,\n private options: NgxFixedFooterOptionsService\n ) {}\n\n public ngOnInit(): void {\n if (this.hasResizeObserver && this.document) {\n const resizeObserver = new ResizeObserver(() => this.checkHeight());\n resizeObserver.observe(this.html);\n }\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (this.hasResizeObserver && this.document) {\n // swap selector\n if (changes?.containerSelector && !changes?.containerSelector?.firstChange) {\n const prev = changes?.containerSelector?.previousValue;\n const next = changes?.containerSelector?.currentValue;\n if (next !== prev) {\n this.removeStyle(this.document.body.querySelector(prev), this.cssAttribute);\n this.setStyle(this.document.body.querySelector(next), this.cssAttribute, this.offsetHeight);\n }\n }\n\n // swap css attribute\n if (changes?.cssAttribute && !changes?.cssAttribute?.firstChange) {\n const prev = changes?.containerSelector?.previousValue;\n const next = changes?.cssAttribute?.currentValue;\n if (next !== prev) {\n this.removeStyle(this.container, prev);\n this.setStyle(this.container, next, this.offsetHeight);\n }\n }\n }\n }\n\n public ngOnDestroy(): void {\n if (this.hasResizeObserver && this.document) {\n this.removeStyle(this.container, this.cssAttribute);\n if (this.resizeObserver) {\n this.resizeObserver.unobserve(this.html);\n }\n }\n }\n\n private checkHeight(): void {\n const height = this.html.offsetHeight;\n if (this.offsetHeight !== height) {\n this.setStyle(this.container, this.cssAttribute, height);\n this.offsetHeight = height;\n }\n }\n\n private removeStyle(container: HTMLElement, cssAttribute: NgxFixedFooterCssAttribute): void {\n this.render.setStyle(container, `${cssAttribute}-bottom`, '');\n }\n\n private setStyle(container: HTMLElement, cssAttribute: NgxFixedFooterCssAttribute, height: number): void {\n this.render.setStyle(container, `${cssAttribute}-bottom`, height === 0 ? '' : `${height}px`);\n }\n\n private get container(): HTMLElement {\n return this.document.body.querySelector(this.containerSelector);\n }\n\n private get html(): HTMLElement {\n return this.el.nativeElement;\n }\n\n private get hasResizeObserver(): boolean {\n return typeof ResizeObserver !== 'undefined';\n }\n}\n","import { NgxFixedFooterOptionsService } from './ngx-fixed-footer-options.service';\nimport { NgxFixedFooterOptions } from './ngx-fixed-footer.interface';\n\nexport const ngxFixedFooterOptionsFactory = (options?: NgxFixedFooterOptions): NgxFixedFooterOptionsService => {\n const ngxFixedFooterOptionsService = new NgxFixedFooterOptionsService();\n if (options) {\n if (options.containerSelector) {\n ngxFixedFooterOptionsService.containerSelector = options.containerSelector;\n }\n if (options.cssAttribute) {\n ngxFixedFooterOptionsService.cssAttribute = options.cssAttribute;\n }\n }\n return ngxFixedFooterOptionsService;\n};\n","import { InjectionToken, ModuleWithProviders, NgModule } from '@angular/core';\nimport { ngxFixedFooterOptionsFactory } from './ngx-fixed-footer-factory';\nimport { NgxFixedFooterOptionsService } from './ngx-fixed-footer-options.service';\nimport { NgxFixedFooterDirective } from './ngx-fixed-footer.directive';\nimport { NgxFixedFooterOptions } from './ngx-fixed-footer.interface';\n\nexport let FOR_ROOT_OPTIONS_TOKEN = new InjectionToken<NgxFixedFooterOptions>(\n 'forRoot() NgxCutOptionsService configuration.'\n);\n\n@NgModule({\n declarations: [NgxFixedFooterDirective],\n exports: [NgxFixedFooterDirective],\n providers: [NgxFixedFooterOptionsService]\n})\nexport class NgxFixedFooterModule {\n public static forRoot(options?: NgxFixedFooterOptions): ModuleWithProviders<NgxFixedFooterModule> {\n return {\n ngModule: NgxFixedFooterModule,\n providers: [\n {\n provide: FOR_ROOT_OPTIONS_TOKEN,\n useValue: options\n },\n {\n provide: NgxFixedFooterOptionsService,\n useFactory: ngxFixedFooterOptionsFactory,\n deps: [FOR_ROOT_OPTIONS_TOKEN]\n }\n ]\n };\n }\n}\n","/*\n * Public API Surface of ngx-fixed-footer\n */\n\nexport * from './lib/ngx-fixed-footer-options.service';\nexport * from './lib/ngx-fixed-footer.constants';\nexport * from './lib/ngx-fixed-footer.directive';\nexport * from './lib/ngx-fixed-footer.interface';\nexport * from './lib/ngx-fixed-footer.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,164 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Injectable, Directive, Inject, Input, InjectionToken, NgModule } from '@angular/core';
3
+ import { DOCUMENT } from '@angular/common';
4
+
5
+ const DEFAULT_CSS_ATTRIBUTE = 'padding';
6
+ const DEFAULT_CONTAINER_SELECTOR = '[role="main"]';
7
+
8
+ class NgxFixedFooterOptionsService {
9
+ constructor() {
10
+ /**
11
+ * @returns Css attribute of HTML element which gets style. It means margin or padding
12
+ */
13
+ this.cssAttribute = DEFAULT_CSS_ATTRIBUTE;
14
+ /**
15
+ * @returns Css selector of HTML element which gets extra margin or padding
16
+ */
17
+ this.containerSelector = DEFAULT_CONTAINER_SELECTOR;
18
+ }
19
+ }
20
+ NgxFixedFooterOptionsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxFixedFooterOptionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
21
+ NgxFixedFooterOptionsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxFixedFooterOptionsService });
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxFixedFooterOptionsService, decorators: [{
23
+ type: Injectable
24
+ }] });
25
+
26
+ class NgxFixedFooterDirective {
27
+ constructor(document, el, render, options) {
28
+ this.document = document;
29
+ this.el = el;
30
+ this.render = render;
31
+ this.options = options;
32
+ this.containerSelector = this.options.containerSelector;
33
+ this.cssAttribute = this.options.cssAttribute;
34
+ this.offsetHeight = undefined;
35
+ }
36
+ ngOnInit() {
37
+ if (this.hasResizeObserver && this.document) {
38
+ const resizeObserver = new ResizeObserver(() => this.checkHeight());
39
+ resizeObserver.observe(this.html);
40
+ }
41
+ }
42
+ ngOnChanges(changes) {
43
+ if (this.hasResizeObserver && this.document) {
44
+ // swap selector
45
+ if (changes?.containerSelector && !changes?.containerSelector?.firstChange) {
46
+ const prev = changes?.containerSelector?.previousValue;
47
+ const next = changes?.containerSelector?.currentValue;
48
+ if (next !== prev) {
49
+ this.removeStyle(this.document.body.querySelector(prev), this.cssAttribute);
50
+ this.setStyle(this.document.body.querySelector(next), this.cssAttribute, this.offsetHeight);
51
+ }
52
+ }
53
+ // swap css attribute
54
+ if (changes?.cssAttribute && !changes?.cssAttribute?.firstChange) {
55
+ const prev = changes?.containerSelector?.previousValue;
56
+ const next = changes?.cssAttribute?.currentValue;
57
+ if (next !== prev) {
58
+ this.removeStyle(this.container, prev);
59
+ this.setStyle(this.container, next, this.offsetHeight);
60
+ }
61
+ }
62
+ }
63
+ }
64
+ ngOnDestroy() {
65
+ if (this.hasResizeObserver && this.document) {
66
+ this.removeStyle(this.container, this.cssAttribute);
67
+ if (this.resizeObserver) {
68
+ this.resizeObserver.unobserve(this.html);
69
+ }
70
+ }
71
+ }
72
+ checkHeight() {
73
+ const height = this.html.offsetHeight;
74
+ if (this.offsetHeight !== height) {
75
+ this.setStyle(this.container, this.cssAttribute, height);
76
+ this.offsetHeight = height;
77
+ }
78
+ }
79
+ removeStyle(container, cssAttribute) {
80
+ this.render.setStyle(container, `${cssAttribute}-bottom`, '');
81
+ }
82
+ setStyle(container, cssAttribute, height) {
83
+ this.render.setStyle(container, `${cssAttribute}-bottom`, height === 0 ? '' : `${height}px`);
84
+ }
85
+ get container() {
86
+ return this.document.body.querySelector(this.containerSelector);
87
+ }
88
+ get html() {
89
+ return this.el.nativeElement;
90
+ }
91
+ get hasResizeObserver() {
92
+ return typeof ResizeObserver !== 'undefined';
93
+ }
94
+ }
95
+ NgxFixedFooterDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxFixedFooterDirective, deps: [{ token: DOCUMENT }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: NgxFixedFooterOptionsService }], target: i0.ɵɵFactoryTarget.Directive });
96
+ NgxFixedFooterDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.8", type: NgxFixedFooterDirective, selector: "[ngxFixedFooter]", inputs: { containerSelector: "containerSelector", cssAttribute: "cssAttribute" }, usesOnChanges: true, ngImport: i0 });
97
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxFixedFooterDirective, decorators: [{
98
+ type: Directive,
99
+ args: [{
100
+ selector: '[ngxFixedFooter]'
101
+ }]
102
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
103
+ type: Inject,
104
+ args: [DOCUMENT]
105
+ }] }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: NgxFixedFooterOptionsService }]; }, propDecorators: { containerSelector: [{
106
+ type: Input
107
+ }], cssAttribute: [{
108
+ type: Input
109
+ }] } });
110
+
111
+ const ngxFixedFooterOptionsFactory = (options) => {
112
+ const ngxFixedFooterOptionsService = new NgxFixedFooterOptionsService();
113
+ if (options) {
114
+ if (options.containerSelector) {
115
+ ngxFixedFooterOptionsService.containerSelector = options.containerSelector;
116
+ }
117
+ if (options.cssAttribute) {
118
+ ngxFixedFooterOptionsService.cssAttribute = options.cssAttribute;
119
+ }
120
+ }
121
+ return ngxFixedFooterOptionsService;
122
+ };
123
+
124
+ let FOR_ROOT_OPTIONS_TOKEN = new InjectionToken('forRoot() NgxCutOptionsService configuration.');
125
+ class NgxFixedFooterModule {
126
+ static forRoot(options) {
127
+ return {
128
+ ngModule: NgxFixedFooterModule,
129
+ providers: [
130
+ {
131
+ provide: FOR_ROOT_OPTIONS_TOKEN,
132
+ useValue: options
133
+ },
134
+ {
135
+ provide: NgxFixedFooterOptionsService,
136
+ useFactory: ngxFixedFooterOptionsFactory,
137
+ deps: [FOR_ROOT_OPTIONS_TOKEN]
138
+ }
139
+ ]
140
+ };
141
+ }
142
+ }
143
+ NgxFixedFooterModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxFixedFooterModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
144
+ NgxFixedFooterModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxFixedFooterModule, declarations: [NgxFixedFooterDirective], exports: [NgxFixedFooterDirective] });
145
+ NgxFixedFooterModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxFixedFooterModule, providers: [NgxFixedFooterOptionsService] });
146
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxFixedFooterModule, decorators: [{
147
+ type: NgModule,
148
+ args: [{
149
+ declarations: [NgxFixedFooterDirective],
150
+ exports: [NgxFixedFooterDirective],
151
+ providers: [NgxFixedFooterOptionsService]
152
+ }]
153
+ }] });
154
+
155
+ /*
156
+ * Public API Surface of ngx-fixed-footer
157
+ */
158
+
159
+ /**
160
+ * Generated bundle index. Do not edit.
161
+ */
162
+
163
+ export { DEFAULT_CONTAINER_SELECTOR, DEFAULT_CSS_ATTRIBUTE, FOR_ROOT_OPTIONS_TOKEN, NgxFixedFooterDirective, NgxFixedFooterModule, NgxFixedFooterOptionsService };
164
+ //# sourceMappingURL=ngx-fixed-footer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngx-fixed-footer.mjs","sources":["../../../projects/ngx-fixed-footer/src/lib/ngx-fixed-footer.constants.ts","../../../projects/ngx-fixed-footer/src/lib/ngx-fixed-footer-options.service.ts","../../../projects/ngx-fixed-footer/src/lib/ngx-fixed-footer.directive.ts","../../../projects/ngx-fixed-footer/src/lib/ngx-fixed-footer-factory.ts","../../../projects/ngx-fixed-footer/src/lib/ngx-fixed-footer.module.ts","../../../projects/ngx-fixed-footer/src/public-api.ts","../../../projects/ngx-fixed-footer/src/ngx-fixed-footer.ts"],"sourcesContent":["export const DEFAULT_CSS_ATTRIBUTE = 'padding';\nexport const DEFAULT_CONTAINER_SELECTOR = '[role=\"main\"]';\n","import { Injectable } from '@angular/core';\nimport { DEFAULT_CONTAINER_SELECTOR, DEFAULT_CSS_ATTRIBUTE } from './ngx-fixed-footer.constants';\nimport { NgxFixedFooterCssAttribute } from './ngx-fixed-footer.interface';\n\n@Injectable()\nexport class NgxFixedFooterOptionsService {\n /**\n * @returns Css attribute of HTML element which gets style. It means margin or padding\n */\n public cssAttribute: NgxFixedFooterCssAttribute = DEFAULT_CSS_ATTRIBUTE;\n\n /**\n * @returns Css selector of HTML element which gets extra margin or padding\n */\n public containerSelector: string = DEFAULT_CONTAINER_SELECTOR;\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n Directive,\n ElementRef,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Renderer2,\n SimpleChanges\n} from '@angular/core';\nimport { NgxFixedFooterOptionsService } from './ngx-fixed-footer-options.service';\nimport { NgxFixedFooterCssAttribute } from './ngx-fixed-footer.interface';\n\n@Directive({\n selector: '[ngxFixedFooter]'\n})\nexport class NgxFixedFooterDirective implements OnDestroy, OnChanges, OnInit {\n @Input() public containerSelector: string = this.options.containerSelector;\n @Input() public cssAttribute: NgxFixedFooterCssAttribute = this.options.cssAttribute;\n\n private offsetHeight: number = undefined;\n private resizeObserver: ResizeObserver;\n\n constructor(\n @Inject(DOCUMENT) private document: any,\n private el: ElementRef,\n private render: Renderer2,\n private options: NgxFixedFooterOptionsService\n ) {}\n\n public ngOnInit(): void {\n if (this.hasResizeObserver && this.document) {\n const resizeObserver = new ResizeObserver(() => this.checkHeight());\n resizeObserver.observe(this.html);\n }\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (this.hasResizeObserver && this.document) {\n // swap selector\n if (changes?.containerSelector && !changes?.containerSelector?.firstChange) {\n const prev = changes?.containerSelector?.previousValue;\n const next = changes?.containerSelector?.currentValue;\n if (next !== prev) {\n this.removeStyle(this.document.body.querySelector(prev), this.cssAttribute);\n this.setStyle(this.document.body.querySelector(next), this.cssAttribute, this.offsetHeight);\n }\n }\n\n // swap css attribute\n if (changes?.cssAttribute && !changes?.cssAttribute?.firstChange) {\n const prev = changes?.containerSelector?.previousValue;\n const next = changes?.cssAttribute?.currentValue;\n if (next !== prev) {\n this.removeStyle(this.container, prev);\n this.setStyle(this.container, next, this.offsetHeight);\n }\n }\n }\n }\n\n public ngOnDestroy(): void {\n if (this.hasResizeObserver && this.document) {\n this.removeStyle(this.container, this.cssAttribute);\n if (this.resizeObserver) {\n this.resizeObserver.unobserve(this.html);\n }\n }\n }\n\n private checkHeight(): void {\n const height = this.html.offsetHeight;\n if (this.offsetHeight !== height) {\n this.setStyle(this.container, this.cssAttribute, height);\n this.offsetHeight = height;\n }\n }\n\n private removeStyle(container: HTMLElement, cssAttribute: NgxFixedFooterCssAttribute): void {\n this.render.setStyle(container, `${cssAttribute}-bottom`, '');\n }\n\n private setStyle(container: HTMLElement, cssAttribute: NgxFixedFooterCssAttribute, height: number): void {\n this.render.setStyle(container, `${cssAttribute}-bottom`, height === 0 ? '' : `${height}px`);\n }\n\n private get container(): HTMLElement {\n return this.document.body.querySelector(this.containerSelector);\n }\n\n private get html(): HTMLElement {\n return this.el.nativeElement;\n }\n\n private get hasResizeObserver(): boolean {\n return typeof ResizeObserver !== 'undefined';\n }\n}\n","import { NgxFixedFooterOptionsService } from './ngx-fixed-footer-options.service';\nimport { NgxFixedFooterOptions } from './ngx-fixed-footer.interface';\n\nexport const ngxFixedFooterOptionsFactory = (options?: NgxFixedFooterOptions): NgxFixedFooterOptionsService => {\n const ngxFixedFooterOptionsService = new NgxFixedFooterOptionsService();\n if (options) {\n if (options.containerSelector) {\n ngxFixedFooterOptionsService.containerSelector = options.containerSelector;\n }\n if (options.cssAttribute) {\n ngxFixedFooterOptionsService.cssAttribute = options.cssAttribute;\n }\n }\n return ngxFixedFooterOptionsService;\n};\n","import { InjectionToken, ModuleWithProviders, NgModule } from '@angular/core';\nimport { ngxFixedFooterOptionsFactory } from './ngx-fixed-footer-factory';\nimport { NgxFixedFooterOptionsService } from './ngx-fixed-footer-options.service';\nimport { NgxFixedFooterDirective } from './ngx-fixed-footer.directive';\nimport { NgxFixedFooterOptions } from './ngx-fixed-footer.interface';\n\nexport let FOR_ROOT_OPTIONS_TOKEN = new InjectionToken<NgxFixedFooterOptions>(\n 'forRoot() NgxCutOptionsService configuration.'\n);\n\n@NgModule({\n declarations: [NgxFixedFooterDirective],\n exports: [NgxFixedFooterDirective],\n providers: [NgxFixedFooterOptionsService]\n})\nexport class NgxFixedFooterModule {\n public static forRoot(options?: NgxFixedFooterOptions): ModuleWithProviders<NgxFixedFooterModule> {\n return {\n ngModule: NgxFixedFooterModule,\n providers: [\n {\n provide: FOR_ROOT_OPTIONS_TOKEN,\n useValue: options\n },\n {\n provide: NgxFixedFooterOptionsService,\n useFactory: ngxFixedFooterOptionsFactory,\n deps: [FOR_ROOT_OPTIONS_TOKEN]\n }\n ]\n };\n }\n}\n","/*\n * Public API Surface of ngx-fixed-footer\n */\n\nexport * from './lib/ngx-fixed-footer-options.service';\nexport * from './lib/ngx-fixed-footer.constants';\nexport * from './lib/ngx-fixed-footer.directive';\nexport * from './lib/ngx-fixed-footer.interface';\nexport * from './lib/ngx-fixed-footer.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { NgxFixedFooterCssAttribute } from './ngx-fixed-footer.interface';
2
+ import * as i0 from "@angular/core";
2
3
  export declare class NgxFixedFooterOptionsService {
3
4
  /**
4
5
  * @returns Css attribute of HTML element which gets style. It means margin or padding
@@ -8,4 +9,6 @@ export declare class NgxFixedFooterOptionsService {
8
9
  * @returns Css selector of HTML element which gets extra margin or padding
9
10
  */
10
11
  containerSelector: string;
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgxFixedFooterOptionsService, never>;
13
+ static ɵprov: i0.ɵɵInjectableDeclaration<NgxFixedFooterOptionsService>;
11
14
  }
@@ -1,6 +1,7 @@
1
1
  import { ElementRef, OnChanges, OnDestroy, OnInit, Renderer2, SimpleChanges } from '@angular/core';
2
2
  import { NgxFixedFooterOptionsService } from './ngx-fixed-footer-options.service';
3
3
  import { NgxFixedFooterCssAttribute } from './ngx-fixed-footer.interface';
4
+ import * as i0 from "@angular/core";
4
5
  export declare class NgxFixedFooterDirective implements OnDestroy, OnChanges, OnInit {
5
6
  private document;
6
7
  private el;
@@ -20,4 +21,6 @@ export declare class NgxFixedFooterDirective implements OnDestroy, OnChanges, On
20
21
  private get container();
21
22
  private get html();
22
23
  private get hasResizeObserver();
24
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgxFixedFooterDirective, never>;
25
+ static ɵdir: i0.ɵɵDirectiveDeclaration<NgxFixedFooterDirective, "[ngxFixedFooter]", never, { "containerSelector": "containerSelector"; "cssAttribute": "cssAttribute"; }, {}, never>;
23
26
  }
@@ -1,6 +1,11 @@
1
1
  import { InjectionToken, ModuleWithProviders } from '@angular/core';
2
2
  import { NgxFixedFooterOptions } from './ngx-fixed-footer.interface';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "./ngx-fixed-footer.directive";
3
5
  export declare let FOR_ROOT_OPTIONS_TOKEN: InjectionToken<NgxFixedFooterOptions>;
4
6
  export declare class NgxFixedFooterModule {
5
7
  static forRoot(options?: NgxFixedFooterOptions): ModuleWithProviders<NgxFixedFooterModule>;
8
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgxFixedFooterModule, never>;
9
+ static ɵmod: i0.ɵɵNgModuleDeclaration<NgxFixedFooterModule, [typeof i1.NgxFixedFooterDirective], never, [typeof i1.NgxFixedFooterDirective]>;
10
+ static ɵinj: i0.ɵɵInjectorDeclaration<NgxFixedFooterModule>;
6
11
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
2
  * Generated bundle index. Do not edit.
3
3
  */
4
+ /// <amd-module name="ngx-fixed-footer" />
4
5
  export * from './public-api';
5
- export { ngxFixedFooterOptionsFactory as ɵa } from './lib/ngx-fixed-footer-factory';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-fixed-footer",
3
- "version": "0.1.0",
3
+ "version": "1.0.3",
4
4
  "author": {
5
5
  "name": "Dominik Hladík",
6
6
  "email": "dominik.hladik@seznam.cz",
@@ -10,7 +10,11 @@
10
10
  "license": "MIT",
11
11
  "description": "Angular directive that adds fixed footer without overlap",
12
12
  "dependencies": {
13
- "tslib": "^2.2.0"
13
+ "tslib": "^2.4.0"
14
+ },
15
+ "peerDependencies": {
16
+ "@angular/common": ">=12",
17
+ "@angular/core": ">=12"
14
18
  },
15
19
  "publishConfig": {
16
20
  "registry": "https://registry.npmjs.org"
@@ -31,14 +35,26 @@
31
35
  "overlap"
32
36
  ],
33
37
  "engines": {
34
- "node": ">=10"
38
+ "node": ">=12"
35
39
  },
36
- "main": "bundles/ngx-fixed-footer.umd.js",
37
- "module": "fesm2015/ngx-fixed-footer.js",
38
- "es2015": "fesm2015/ngx-fixed-footer.js",
39
- "esm2015": "esm2015/ngx-fixed-footer.js",
40
- "fesm2015": "fesm2015/ngx-fixed-footer.js",
40
+ "module": "fesm2015/ngx-fixed-footer.mjs",
41
+ "es2020": "fesm2020/ngx-fixed-footer.mjs",
42
+ "esm2020": "esm2020/ngx-fixed-footer.mjs",
43
+ "fesm2020": "fesm2020/ngx-fixed-footer.mjs",
44
+ "fesm2015": "fesm2015/ngx-fixed-footer.mjs",
41
45
  "typings": "ngx-fixed-footer.d.ts",
42
- "metadata": "ngx-fixed-footer.metadata.json",
46
+ "exports": {
47
+ "./package.json": {
48
+ "default": "./package.json"
49
+ },
50
+ ".": {
51
+ "types": "./ngx-fixed-footer.d.ts",
52
+ "esm2020": "./esm2020/ngx-fixed-footer.mjs",
53
+ "es2020": "./fesm2020/ngx-fixed-footer.mjs",
54
+ "es2015": "./fesm2015/ngx-fixed-footer.mjs",
55
+ "node": "./fesm2015/ngx-fixed-footer.mjs",
56
+ "default": "./fesm2020/ngx-fixed-footer.mjs"
57
+ }
58
+ },
43
59
  "sideEffects": false
44
60
  }
@@ -1,189 +0,0 @@
1
- (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common')) :
3
- typeof define === 'function' && define.amd ? define('ngx-fixed-footer', ['exports', '@angular/core', '@angular/common'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global['ngx-fixed-footer'] = {}, global.ng.core, global.ng.common));
5
- }(this, (function (exports, core, common) { 'use strict';
6
-
7
- var DEFAULT_CSS_ATTRIBUTE = 'padding';
8
- var DEFAULT_CONTAINER_SELECTOR = '[role="main"]';
9
-
10
- var NgxFixedFooterOptionsService = /** @class */ (function () {
11
- function NgxFixedFooterOptionsService() {
12
- /**
13
- * @returns Css attribute of HTML element which gets style. It means margin or padding
14
- */
15
- this.cssAttribute = DEFAULT_CSS_ATTRIBUTE;
16
- /**
17
- * @returns Css selector of HTML element which gets extra margin or padding
18
- */
19
- this.containerSelector = DEFAULT_CONTAINER_SELECTOR;
20
- }
21
- return NgxFixedFooterOptionsService;
22
- }());
23
- NgxFixedFooterOptionsService.decorators = [
24
- { type: core.Injectable }
25
- ];
26
-
27
- var NgxFixedFooterDirective = /** @class */ (function () {
28
- function NgxFixedFooterDirective(document, el, render, options) {
29
- this.document = document;
30
- this.el = el;
31
- this.render = render;
32
- this.options = options;
33
- this.containerSelector = this.options.containerSelector;
34
- this.cssAttribute = this.options.cssAttribute;
35
- this.offsetHeight = undefined;
36
- }
37
- NgxFixedFooterDirective.prototype.ngOnInit = function () {
38
- var _this = this;
39
- if (this.hasResizeObserver && this.document) {
40
- var resizeObserver = new ResizeObserver(function () { return _this.checkHeight(); });
41
- resizeObserver.observe(this.html);
42
- }
43
- };
44
- NgxFixedFooterDirective.prototype.ngOnChanges = function (changes) {
45
- var _a, _b, _c, _d, _e, _f;
46
- if (this.hasResizeObserver && this.document) {
47
- // swap selector
48
- if ((changes === null || changes === void 0 ? void 0 : changes.containerSelector) && !((_a = changes === null || changes === void 0 ? void 0 : changes.containerSelector) === null || _a === void 0 ? void 0 : _a.firstChange)) {
49
- var prev = (_b = changes === null || changes === void 0 ? void 0 : changes.containerSelector) === null || _b === void 0 ? void 0 : _b.previousValue;
50
- var next = (_c = changes === null || changes === void 0 ? void 0 : changes.containerSelector) === null || _c === void 0 ? void 0 : _c.currentValue;
51
- if (next !== prev) {
52
- this.removeStyle(this.document.body.querySelector(prev), this.cssAttribute);
53
- this.setStyle(this.document.body.querySelector(next), this.cssAttribute, this.offsetHeight);
54
- }
55
- }
56
- // swap css attribute
57
- if ((changes === null || changes === void 0 ? void 0 : changes.cssAttribute) && !((_d = changes === null || changes === void 0 ? void 0 : changes.cssAttribute) === null || _d === void 0 ? void 0 : _d.firstChange)) {
58
- var prev = (_e = changes === null || changes === void 0 ? void 0 : changes.containerSelector) === null || _e === void 0 ? void 0 : _e.previousValue;
59
- var next = (_f = changes === null || changes === void 0 ? void 0 : changes.cssAttribute) === null || _f === void 0 ? void 0 : _f.currentValue;
60
- if (next !== prev) {
61
- this.removeStyle(this.container, prev);
62
- this.setStyle(this.container, next, this.offsetHeight);
63
- }
64
- }
65
- }
66
- };
67
- NgxFixedFooterDirective.prototype.ngOnDestroy = function () {
68
- if (this.hasResizeObserver && this.document) {
69
- this.removeStyle(this.container, this.cssAttribute);
70
- if (this.resizeObserver) {
71
- this.resizeObserver.unobserve(this.html);
72
- }
73
- }
74
- };
75
- NgxFixedFooterDirective.prototype.checkHeight = function () {
76
- var height = this.html.offsetHeight;
77
- if (this.offsetHeight !== height) {
78
- this.setStyle(this.container, this.cssAttribute, height);
79
- this.offsetHeight = height;
80
- }
81
- };
82
- NgxFixedFooterDirective.prototype.removeStyle = function (container, cssAttribute) {
83
- this.render.setStyle(container, cssAttribute + "-bottom", '');
84
- };
85
- NgxFixedFooterDirective.prototype.setStyle = function (container, cssAttribute, height) {
86
- this.render.setStyle(container, cssAttribute + "-bottom", height === 0 ? '' : height + "px");
87
- };
88
- Object.defineProperty(NgxFixedFooterDirective.prototype, "container", {
89
- get: function () {
90
- return this.document.body.querySelector(this.containerSelector);
91
- },
92
- enumerable: false,
93
- configurable: true
94
- });
95
- Object.defineProperty(NgxFixedFooterDirective.prototype, "html", {
96
- get: function () {
97
- return this.el.nativeElement;
98
- },
99
- enumerable: false,
100
- configurable: true
101
- });
102
- Object.defineProperty(NgxFixedFooterDirective.prototype, "hasResizeObserver", {
103
- get: function () {
104
- return typeof ResizeObserver !== 'undefined';
105
- },
106
- enumerable: false,
107
- configurable: true
108
- });
109
- return NgxFixedFooterDirective;
110
- }());
111
- NgxFixedFooterDirective.decorators = [
112
- { type: core.Directive, args: [{
113
- selector: '[ngxFixedFooter]'
114
- },] }
115
- ];
116
- NgxFixedFooterDirective.ctorParameters = function () { return [
117
- { type: undefined, decorators: [{ type: core.Inject, args: [common.DOCUMENT,] }] },
118
- { type: core.ElementRef },
119
- { type: core.Renderer2 },
120
- { type: NgxFixedFooterOptionsService }
121
- ]; };
122
- NgxFixedFooterDirective.propDecorators = {
123
- containerSelector: [{ type: core.Input }],
124
- cssAttribute: [{ type: core.Input }]
125
- };
126
-
127
- var ngxFixedFooterOptionsFactory = function (options) {
128
- var ngxFixedFooterOptionsService = new NgxFixedFooterOptionsService();
129
- if (options) {
130
- if (options.containerSelector) {
131
- ngxFixedFooterOptionsService.containerSelector = options.containerSelector;
132
- }
133
- if (options.cssAttribute) {
134
- ngxFixedFooterOptionsService.cssAttribute = options.cssAttribute;
135
- }
136
- }
137
- return ngxFixedFooterOptionsService;
138
- };
139
-
140
- var FOR_ROOT_OPTIONS_TOKEN = new core.InjectionToken('forRoot() NgxCutOptionsService configuration.');
141
- var NgxFixedFooterModule = /** @class */ (function () {
142
- function NgxFixedFooterModule() {
143
- }
144
- NgxFixedFooterModule.forRoot = function (options) {
145
- return {
146
- ngModule: NgxFixedFooterModule,
147
- providers: [
148
- {
149
- provide: FOR_ROOT_OPTIONS_TOKEN,
150
- useValue: options
151
- },
152
- {
153
- provide: NgxFixedFooterOptionsService,
154
- useFactory: ngxFixedFooterOptionsFactory,
155
- deps: [FOR_ROOT_OPTIONS_TOKEN]
156
- }
157
- ]
158
- };
159
- };
160
- return NgxFixedFooterModule;
161
- }());
162
- NgxFixedFooterModule.decorators = [
163
- { type: core.NgModule, args: [{
164
- declarations: [NgxFixedFooterDirective],
165
- exports: [NgxFixedFooterDirective],
166
- providers: [NgxFixedFooterOptionsService]
167
- },] }
168
- ];
169
-
170
- /*
171
- * Public API Surface of ngx-fixed-footer
172
- */
173
-
174
- /**
175
- * Generated bundle index. Do not edit.
176
- */
177
-
178
- exports.DEFAULT_CONTAINER_SELECTOR = DEFAULT_CONTAINER_SELECTOR;
179
- exports.DEFAULT_CSS_ATTRIBUTE = DEFAULT_CSS_ATTRIBUTE;
180
- exports.FOR_ROOT_OPTIONS_TOKEN = FOR_ROOT_OPTIONS_TOKEN;
181
- exports.NgxFixedFooterDirective = NgxFixedFooterDirective;
182
- exports.NgxFixedFooterModule = NgxFixedFooterModule;
183
- exports.NgxFixedFooterOptionsService = NgxFixedFooterOptionsService;
184
- exports.ɵa = ngxFixedFooterOptionsFactory;
185
-
186
- Object.defineProperty(exports, '__esModule', { value: true });
187
-
188
- })));
189
- //# sourceMappingURL=ngx-fixed-footer.umd.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ngx-fixed-footer.umd.js","sources":["../../../projects/ngx-fixed-footer/src/lib/ngx-fixed-footer.constants.ts","../../../projects/ngx-fixed-footer/src/lib/ngx-fixed-footer-options.service.ts","../../../projects/ngx-fixed-footer/src/lib/ngx-fixed-footer.directive.ts","../../../projects/ngx-fixed-footer/src/lib/ngx-fixed-footer-factory.ts","../../../projects/ngx-fixed-footer/src/lib/ngx-fixed-footer.module.ts","../../../projects/ngx-fixed-footer/src/public-api.ts","../../../projects/ngx-fixed-footer/src/ngx-fixed-footer.ts"],"sourcesContent":["export const DEFAULT_CSS_ATTRIBUTE = 'padding';\nexport const DEFAULT_CONTAINER_SELECTOR = '[role=\"main\"]';\n","import { Injectable } from '@angular/core';\nimport { DEFAULT_CONTAINER_SELECTOR, DEFAULT_CSS_ATTRIBUTE } from './ngx-fixed-footer.constants';\nimport { NgxFixedFooterCssAttribute } from './ngx-fixed-footer.interface';\n\n@Injectable()\nexport class NgxFixedFooterOptionsService {\n /**\n * @returns Css attribute of HTML element which gets style. It means margin or padding\n */\n public cssAttribute: NgxFixedFooterCssAttribute = DEFAULT_CSS_ATTRIBUTE;\n\n /**\n * @returns Css selector of HTML element which gets extra margin or padding\n */\n public containerSelector: string = DEFAULT_CONTAINER_SELECTOR;\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n Directive,\n ElementRef,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Renderer2,\n SimpleChanges\n} from '@angular/core';\nimport { NgxFixedFooterOptionsService } from './ngx-fixed-footer-options.service';\nimport { NgxFixedFooterCssAttribute } from './ngx-fixed-footer.interface';\n\n@Directive({\n selector: '[ngxFixedFooter]'\n})\nexport class NgxFixedFooterDirective implements OnDestroy, OnChanges, OnInit {\n @Input() public containerSelector: string = this.options.containerSelector;\n @Input() public cssAttribute: NgxFixedFooterCssAttribute = this.options.cssAttribute;\n\n private offsetHeight: number = undefined;\n private resizeObserver: ResizeObserver;\n\n constructor(\n @Inject(DOCUMENT) private document: any,\n private el: ElementRef,\n private render: Renderer2,\n private options: NgxFixedFooterOptionsService\n ) {}\n\n public ngOnInit(): void {\n if (this.hasResizeObserver && this.document) {\n const resizeObserver = new ResizeObserver(() => this.checkHeight());\n resizeObserver.observe(this.html);\n }\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (this.hasResizeObserver && this.document) {\n // swap selector\n if (changes?.containerSelector && !changes?.containerSelector?.firstChange) {\n const prev = changes?.containerSelector?.previousValue;\n const next = changes?.containerSelector?.currentValue;\n if (next !== prev) {\n this.removeStyle(this.document.body.querySelector(prev), this.cssAttribute);\n this.setStyle(this.document.body.querySelector(next), this.cssAttribute, this.offsetHeight);\n }\n }\n\n // swap css attribute\n if (changes?.cssAttribute && !changes?.cssAttribute?.firstChange) {\n const prev = changes?.containerSelector?.previousValue;\n const next = changes?.cssAttribute?.currentValue;\n if (next !== prev) {\n this.removeStyle(this.container, prev);\n this.setStyle(this.container, next, this.offsetHeight);\n }\n }\n }\n }\n\n public ngOnDestroy(): void {\n if (this.hasResizeObserver && this.document) {\n this.removeStyle(this.container, this.cssAttribute);\n if (this.resizeObserver) {\n this.resizeObserver.unobserve(this.html);\n }\n }\n }\n\n private checkHeight(): void {\n const height = this.html.offsetHeight;\n if (this.offsetHeight !== height) {\n this.setStyle(this.container, this.cssAttribute, height);\n this.offsetHeight = height;\n }\n }\n\n private removeStyle(container: HTMLElement, cssAttribute: NgxFixedFooterCssAttribute): void {\n this.render.setStyle(container, `${cssAttribute}-bottom`, '');\n }\n\n private setStyle(container: HTMLElement, cssAttribute: NgxFixedFooterCssAttribute, height: number): void {\n this.render.setStyle(container, `${cssAttribute}-bottom`, height === 0 ? '' : `${height}px`);\n }\n\n private get container(): HTMLElement {\n return this.document.body.querySelector(this.containerSelector);\n }\n\n private get html(): HTMLElement {\n return this.el.nativeElement;\n }\n\n private get hasResizeObserver(): boolean {\n return typeof ResizeObserver !== 'undefined';\n }\n}\n","import { NgxFixedFooterOptionsService } from './ngx-fixed-footer-options.service';\nimport { NgxFixedFooterOptions } from './ngx-fixed-footer.interface';\n\nexport const ngxFixedFooterOptionsFactory = (options?: NgxFixedFooterOptions): NgxFixedFooterOptionsService => {\n const ngxFixedFooterOptionsService = new NgxFixedFooterOptionsService();\n if (options) {\n if (options.containerSelector) {\n ngxFixedFooterOptionsService.containerSelector = options.containerSelector;\n }\n if (options.cssAttribute) {\n ngxFixedFooterOptionsService.cssAttribute = options.cssAttribute;\n }\n }\n return ngxFixedFooterOptionsService;\n};\n","import { InjectionToken, ModuleWithProviders, NgModule } from '@angular/core';\nimport { ngxFixedFooterOptionsFactory } from './ngx-fixed-footer-factory';\nimport { NgxFixedFooterOptionsService } from './ngx-fixed-footer-options.service';\nimport { NgxFixedFooterDirective } from './ngx-fixed-footer.directive';\nimport { NgxFixedFooterOptions } from './ngx-fixed-footer.interface';\n\nexport let FOR_ROOT_OPTIONS_TOKEN = new InjectionToken<NgxFixedFooterOptions>(\n 'forRoot() NgxCutOptionsService configuration.'\n);\n\n@NgModule({\n declarations: [NgxFixedFooterDirective],\n exports: [NgxFixedFooterDirective],\n providers: [NgxFixedFooterOptionsService]\n})\nexport class NgxFixedFooterModule {\n public static forRoot(options?: NgxFixedFooterOptions): ModuleWithProviders<NgxFixedFooterModule> {\n return {\n ngModule: NgxFixedFooterModule,\n providers: [\n {\n provide: FOR_ROOT_OPTIONS_TOKEN,\n useValue: options\n },\n {\n provide: NgxFixedFooterOptionsService,\n useFactory: ngxFixedFooterOptionsFactory,\n deps: [FOR_ROOT_OPTIONS_TOKEN]\n }\n ]\n };\n }\n}\n","/*\n * Public API Surface of ngx-fixed-footer\n */\n\nexport * from './lib/ngx-fixed-footer-options.service';\nexport * from './lib/ngx-fixed-footer.constants';\nexport * from './lib/ngx-fixed-footer.directive';\nexport * from './lib/ngx-fixed-footer.interface';\nexport * from './lib/ngx-fixed-footer.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {ngxFixedFooterOptionsFactory as ɵa} from './lib/ngx-fixed-footer-factory';"],"names":["Injectable","Directive","Inject","DOCUMENT","ElementRef","Renderer2","Input","InjectionToken","NgModule"],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { DEFAULT_CONTAINER_SELECTOR, DEFAULT_CSS_ATTRIBUTE } from './ngx-fixed-footer.constants';
3
- export class NgxFixedFooterOptionsService {
4
- constructor() {
5
- /**
6
- * @returns Css attribute of HTML element which gets style. It means margin or padding
7
- */
8
- this.cssAttribute = DEFAULT_CSS_ATTRIBUTE;
9
- /**
10
- * @returns Css selector of HTML element which gets extra margin or padding
11
- */
12
- this.containerSelector = DEFAULT_CONTAINER_SELECTOR;
13
- }
14
- }
15
- NgxFixedFooterOptionsService.decorators = [
16
- { type: Injectable }
17
- ];
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWZpeGVkLWZvb3Rlci1vcHRpb25zLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZml4ZWQtZm9vdGVyL3NyYy9saWIvbmd4LWZpeGVkLWZvb3Rlci1vcHRpb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUlqRyxNQUFNLE9BQU8sNEJBQTRCO0lBRHpDO1FBRUU7O1dBRUc7UUFDSSxpQkFBWSxHQUErQixxQkFBcUIsQ0FBQztRQUV4RTs7V0FFRztRQUNJLHNCQUFpQixHQUFXLDBCQUEwQixDQUFDO0lBQ2hFLENBQUM7OztZQVhBLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBERUZBVUxUX0NPTlRBSU5FUl9TRUxFQ1RPUiwgREVGQVVMVF9DU1NfQVRUUklCVVRFIH0gZnJvbSAnLi9uZ3gtZml4ZWQtZm9vdGVyLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBOZ3hGaXhlZEZvb3RlckNzc0F0dHJpYnV0ZSB9IGZyb20gJy4vbmd4LWZpeGVkLWZvb3Rlci5pbnRlcmZhY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmd4Rml4ZWRGb290ZXJPcHRpb25zU2VydmljZSB7XG4gIC8qKlxuICAgKiBAcmV0dXJucyBDc3MgYXR0cmlidXRlIG9mIEhUTUwgZWxlbWVudCB3aGljaCBnZXRzIHN0eWxlLiBJdCBtZWFucyBtYXJnaW4gb3IgcGFkZGluZ1xuICAgKi9cbiAgcHVibGljIGNzc0F0dHJpYnV0ZTogTmd4Rml4ZWRGb290ZXJDc3NBdHRyaWJ1dGUgPSBERUZBVUxUX0NTU19BVFRSSUJVVEU7XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIENzcyBzZWxlY3RvciBvZiBIVE1MIGVsZW1lbnQgd2hpY2ggZ2V0cyBleHRyYSBtYXJnaW4gb3IgcGFkZGluZ1xuICAgKi9cbiAgcHVibGljIGNvbnRhaW5lclNlbGVjdG9yOiBzdHJpbmcgPSBERUZBVUxUX0NPTlRBSU5FUl9TRUxFQ1RPUjtcbn1cbiJdfQ==
@@ -1,89 +0,0 @@
1
- import { DOCUMENT } from '@angular/common';
2
- import { Directive, ElementRef, Inject, Input, Renderer2 } from '@angular/core';
3
- import { NgxFixedFooterOptionsService } from './ngx-fixed-footer-options.service';
4
- export class NgxFixedFooterDirective {
5
- constructor(document, el, render, options) {
6
- this.document = document;
7
- this.el = el;
8
- this.render = render;
9
- this.options = options;
10
- this.containerSelector = this.options.containerSelector;
11
- this.cssAttribute = this.options.cssAttribute;
12
- this.offsetHeight = undefined;
13
- }
14
- ngOnInit() {
15
- if (this.hasResizeObserver && this.document) {
16
- const resizeObserver = new ResizeObserver(() => this.checkHeight());
17
- resizeObserver.observe(this.html);
18
- }
19
- }
20
- ngOnChanges(changes) {
21
- var _a, _b, _c, _d, _e, _f;
22
- if (this.hasResizeObserver && this.document) {
23
- // swap selector
24
- if ((changes === null || changes === void 0 ? void 0 : changes.containerSelector) && !((_a = changes === null || changes === void 0 ? void 0 : changes.containerSelector) === null || _a === void 0 ? void 0 : _a.firstChange)) {
25
- const prev = (_b = changes === null || changes === void 0 ? void 0 : changes.containerSelector) === null || _b === void 0 ? void 0 : _b.previousValue;
26
- const next = (_c = changes === null || changes === void 0 ? void 0 : changes.containerSelector) === null || _c === void 0 ? void 0 : _c.currentValue;
27
- if (next !== prev) {
28
- this.removeStyle(this.document.body.querySelector(prev), this.cssAttribute);
29
- this.setStyle(this.document.body.querySelector(next), this.cssAttribute, this.offsetHeight);
30
- }
31
- }
32
- // swap css attribute
33
- if ((changes === null || changes === void 0 ? void 0 : changes.cssAttribute) && !((_d = changes === null || changes === void 0 ? void 0 : changes.cssAttribute) === null || _d === void 0 ? void 0 : _d.firstChange)) {
34
- const prev = (_e = changes === null || changes === void 0 ? void 0 : changes.containerSelector) === null || _e === void 0 ? void 0 : _e.previousValue;
35
- const next = (_f = changes === null || changes === void 0 ? void 0 : changes.cssAttribute) === null || _f === void 0 ? void 0 : _f.currentValue;
36
- if (next !== prev) {
37
- this.removeStyle(this.container, prev);
38
- this.setStyle(this.container, next, this.offsetHeight);
39
- }
40
- }
41
- }
42
- }
43
- ngOnDestroy() {
44
- if (this.hasResizeObserver && this.document) {
45
- this.removeStyle(this.container, this.cssAttribute);
46
- if (this.resizeObserver) {
47
- this.resizeObserver.unobserve(this.html);
48
- }
49
- }
50
- }
51
- checkHeight() {
52
- const height = this.html.offsetHeight;
53
- if (this.offsetHeight !== height) {
54
- this.setStyle(this.container, this.cssAttribute, height);
55
- this.offsetHeight = height;
56
- }
57
- }
58
- removeStyle(container, cssAttribute) {
59
- this.render.setStyle(container, `${cssAttribute}-bottom`, '');
60
- }
61
- setStyle(container, cssAttribute, height) {
62
- this.render.setStyle(container, `${cssAttribute}-bottom`, height === 0 ? '' : `${height}px`);
63
- }
64
- get container() {
65
- return this.document.body.querySelector(this.containerSelector);
66
- }
67
- get html() {
68
- return this.el.nativeElement;
69
- }
70
- get hasResizeObserver() {
71
- return typeof ResizeObserver !== 'undefined';
72
- }
73
- }
74
- NgxFixedFooterDirective.decorators = [
75
- { type: Directive, args: [{
76
- selector: '[ngxFixedFooter]'
77
- },] }
78
- ];
79
- NgxFixedFooterDirective.ctorParameters = () => [
80
- { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
81
- { type: ElementRef },
82
- { type: Renderer2 },
83
- { type: NgxFixedFooterOptionsService }
84
- ];
85
- NgxFixedFooterDirective.propDecorators = {
86
- containerSelector: [{ type: Input }],
87
- cssAttribute: [{ type: Input }]
88
- };
89
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWZpeGVkLWZvb3Rlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZml4ZWQtZm9vdGVyL3NyYy9saWIvbmd4LWZpeGVkLWZvb3Rlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBSUwsU0FBUyxFQUVWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBTWxGLE1BQU0sT0FBTyx1QkFBdUI7SUFPbEMsWUFDNEIsUUFBYSxFQUMvQixFQUFjLEVBQ2QsTUFBaUIsRUFDakIsT0FBcUM7UUFIbkIsYUFBUSxHQUFSLFFBQVEsQ0FBSztRQUMvQixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2QsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNqQixZQUFPLEdBQVAsT0FBTyxDQUE4QjtRQVYvQixzQkFBaUIsR0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO1FBQzNELGlCQUFZLEdBQStCLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO1FBRTdFLGlCQUFZLEdBQVcsU0FBUyxDQUFDO0lBUXRDLENBQUM7SUFFRyxRQUFRO1FBQ2IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUMzQyxNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUNwRSxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuQztJQUNILENBQUM7SUFFTSxXQUFXLENBQUMsT0FBc0I7O1FBQ3ZD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QUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsR0FBRyxZQUFZLFNBQVMsRUFBRSxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBRUQsSUFBWSxTQUFTO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxJQUFZLElBQUk7UUFDZCxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFZLGlCQUFpQjtRQUMzQixPQUFPLE9BQU8sY0FBYyxLQUFLLFdBQVcsQ0FBQztJQUMvQyxDQUFDOzs7WUFuRkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxrQkFBa0I7YUFDN0I7Ozs0Q0FTSSxNQUFNLFNBQUMsUUFBUTtZQXZCbEIsVUFBVTtZQU1WLFNBQVM7WUFHRiw0QkFBNEI7OztnQ0FPbEMsS0FBSzsyQkFDTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBSZW5kZXJlcjIsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3hGaXhlZEZvb3Rlck9wdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi9uZ3gtZml4ZWQtZm9vdGVyLW9wdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBOZ3hGaXhlZEZvb3RlckNzc0F0dHJpYnV0ZSB9IGZyb20gJy4vbmd4LWZpeGVkLWZvb3Rlci5pbnRlcmZhY2UnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbmd4Rml4ZWRGb290ZXJdJ1xufSlcbmV4cG9ydCBjbGFzcyBOZ3hGaXhlZEZvb3RlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBPbkluaXQge1xuICBASW5wdXQoKSBwdWJsaWMgY29udGFpbmVyU2VsZWN0b3I6IHN0cmluZyA9IHRoaXMub3B0aW9ucy5jb250YWluZXJTZWxlY3RvcjtcbiAgQElucHV0KCkgcHVibGljIGNzc0F0dHJpYnV0ZTogTmd4Rml4ZWRGb290ZXJDc3NBdHRyaWJ1dGUgPSB0aGlzLm9wdGlvbnMuY3NzQXR0cmlidXRlO1xuXG4gIHByaXZhdGUgb2Zmc2V0SGVpZ2h0OiBudW1iZXIgPSB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IGFueSxcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcmVuZGVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBvcHRpb25zOiBOZ3hGaXhlZEZvb3Rlck9wdGlvbnNTZXJ2aWNlXG4gICkge31cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGFzUmVzaXplT2JzZXJ2ZXIgJiYgdGhpcy5kb2N1bWVudCkge1xuICAgICAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gdGhpcy5jaGVja0hlaWdodCgpKTtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5odG1sKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmhhc1Jlc2l6ZU9ic2VydmVyICYmIHRoaXMuZG9jdW1lbnQpIHtcbiAgICAgIC8vIHN3YXAgc2VsZWN0b3JcbiAgICAgIGlmIChjaGFuZ2VzPy5jb250YWluZXJTZWxlY3RvciAmJiAhY2hhbmdlcz8uY29udGFpbmVyU2VsZWN0b3I/LmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgIGNvbnN0IHByZXYgPSBjaGFuZ2VzPy5jb250YWluZXJTZWxlY3Rvcj8ucHJldmlvdXNWYWx1ZTtcbiAgICAgICAgY29uc3QgbmV4dCA9IGNoYW5nZXM/LmNvbnRhaW5lclNlbGVjdG9yPy5jdXJyZW50VmFsdWU7XG4gICAgICAgIGlmIChuZXh0ICE9PSBwcmV2KSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVTdHlsZSh0aGlzLmRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvcihwcmV2KSwgdGhpcy5jc3NBdHRyaWJ1dGUpO1xuICAgICAgICAgIHRoaXMuc2V0U3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3IobmV4dCksIHRoaXMuY3NzQXR0cmlidXRlLCB0aGlzLm9mZnNldEhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gc3dhcCBjc3MgYXR0cmlidXRlXG4gICAgICBpZiAoY2hhbmdlcz8uY3NzQXR0cmlidXRlICYmICFjaGFuZ2VzPy5jc3NBdHRyaWJ1dGU/LmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgIGNvbnN0IHByZXYgPSBjaGFuZ2VzPy5jb250YWluZXJTZWxlY3Rvcj8ucHJldmlvdXNWYWx1ZTtcbiAgICAgICAgY29uc3QgbmV4dCA9IGNoYW5nZXM/LmNzc0F0dHJpYnV0ZT8uY3VycmVudFZhbHVlO1xuICAgICAgICBpZiAobmV4dCAhPT0gcHJldikge1xuICAgICAgICAgIHRoaXMucmVtb3ZlU3R5bGUodGhpcy5jb250YWluZXIsIHByZXYpO1xuICAgICAgICAgIHRoaXMuc2V0U3R5bGUodGhpcy5jb250YWluZXIsIG5leHQsIHRoaXMub2Zmc2V0SGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oYXNSZXNpemVPYnNlcnZlciAmJiB0aGlzLmRvY3VtZW50KSB7XG4gICAgICB0aGlzLnJlbW92ZVN0eWxlKHRoaXMuY29udGFpbmVyLCB0aGlzLmNzc0F0dHJpYnV0ZSk7XG4gICAgICBpZiAodGhpcy5yZXNpemVPYnNlcnZlcikge1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZSh0aGlzLmh0bWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tIZWlnaHQoKTogdm9pZCB7XG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5odG1sLm9mZnNldEhlaWdodDtcbiAgICBpZiAodGhpcy5vZmZzZXRIZWlnaHQgIT09IGhlaWdodCkge1xuICAgICAgdGhpcy5zZXRTdHlsZSh0aGlzLmNvbnRhaW5lciwgdGhpcy5jc3NBdHRyaWJ1dGUsIGhlaWdodCk7XG4gICAgICB0aGlzLm9mZnNldEhlaWdodCA9IGhlaWdodDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVN0eWxlKGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsIGNzc0F0dHJpYnV0ZTogTmd4Rml4ZWRGb290ZXJDc3NBdHRyaWJ1dGUpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlci5zZXRTdHlsZShjb250YWluZXIsIGAke2Nzc0F0dHJpYnV0ZX0tYm90dG9tYCwgJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTdHlsZShjb250YWluZXI6IEhUTUxFbGVtZW50LCBjc3NBdHRyaWJ1dGU6IE5neEZpeGVkRm9vdGVyQ3NzQXR0cmlidXRlLCBoZWlnaHQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyLnNldFN0eWxlKGNvbnRhaW5lciwgYCR7Y3NzQXR0cmlidXRlfS1ib3R0b21gLCBoZWlnaHQgPT09IDAgPyAnJyA6IGAke2hlaWdodH1weGApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY29udGFpbmVyKCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5kb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3IodGhpcy5jb250YWluZXJTZWxlY3Rvcik7XG4gIH1cblxuICBwcml2YXRlIGdldCBodG1sKCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaGFzUmVzaXplT2JzZXJ2ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBSZXNpemVPYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCc7XG4gIH1cbn1cbiJdfQ==
@@ -1,31 +0,0 @@
1
- import { InjectionToken, NgModule } from '@angular/core';
2
- import { ngxFixedFooterOptionsFactory } from './ngx-fixed-footer-factory';
3
- import { NgxFixedFooterOptionsService } from './ngx-fixed-footer-options.service';
4
- import { NgxFixedFooterDirective } from './ngx-fixed-footer.directive';
5
- export let FOR_ROOT_OPTIONS_TOKEN = new InjectionToken('forRoot() NgxCutOptionsService configuration.');
6
- export class NgxFixedFooterModule {
7
- static forRoot(options) {
8
- return {
9
- ngModule: NgxFixedFooterModule,
10
- providers: [
11
- {
12
- provide: FOR_ROOT_OPTIONS_TOKEN,
13
- useValue: options
14
- },
15
- {
16
- provide: NgxFixedFooterOptionsService,
17
- useFactory: ngxFixedFooterOptionsFactory,
18
- deps: [FOR_ROOT_OPTIONS_TOKEN]
19
- }
20
- ]
21
- };
22
- }
23
- }
24
- NgxFixedFooterModule.decorators = [
25
- { type: NgModule, args: [{
26
- declarations: [NgxFixedFooterDirective],
27
- exports: [NgxFixedFooterDirective],
28
- providers: [NgxFixedFooterOptionsService]
29
- },] }
30
- ];
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWZpeGVkLWZvb3Rlci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZml4ZWQtZm9vdGVyL3NyYy9saWIvbmd4LWZpeGVkLWZvb3Rlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBdUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBR3ZFLE1BQU0sQ0FBQyxJQUFJLHNCQUFzQixHQUFHLElBQUksY0FBYyxDQUNwRCwrQ0FBK0MsQ0FDaEQsQ0FBQztBQU9GLE1BQU0sT0FBTyxvQkFBb0I7SUFDeEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUErQjtRQUNuRCxPQUFPO1lBQ0wsUUFBUSxFQUFFLG9CQUFvQjtZQUM5QixTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsT0FBTyxFQUFFLHNCQUFzQjtvQkFDL0IsUUFBUSxFQUFFLE9BQU87aUJBQ2xCO2dCQUNEO29CQUNFLE9BQU8sRUFBRSw0QkFBNEI7b0JBQ3JDLFVBQVUsRUFBRSw0QkFBNEI7b0JBQ3hDLElBQUksRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUMvQjthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7OztZQXJCRixRQUFRLFNBQUM7Z0JBQ1IsWUFBWSxFQUFFLENBQUMsdUJBQXVCLENBQUM7Z0JBQ3ZDLE9BQU8sRUFBRSxDQUFDLHVCQUF1QixDQUFDO2dCQUNsQyxTQUFTLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQzthQUMxQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuLCBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbmd4Rml4ZWRGb290ZXJPcHRpb25zRmFjdG9yeSB9IGZyb20gJy4vbmd4LWZpeGVkLWZvb3Rlci1mYWN0b3J5JztcbmltcG9ydCB7IE5neEZpeGVkRm9vdGVyT3B0aW9uc1NlcnZpY2UgfSBmcm9tICcuL25neC1maXhlZC1mb290ZXItb3B0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IE5neEZpeGVkRm9vdGVyRGlyZWN0aXZlIH0gZnJvbSAnLi9uZ3gtZml4ZWQtZm9vdGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBOZ3hGaXhlZEZvb3Rlck9wdGlvbnMgfSBmcm9tICcuL25neC1maXhlZC1mb290ZXIuaW50ZXJmYWNlJztcblxuZXhwb3J0IGxldCBGT1JfUk9PVF9PUFRJT05TX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPE5neEZpeGVkRm9vdGVyT3B0aW9ucz4oXG4gICdmb3JSb290KCkgTmd4Q3V0T3B0aW9uc1NlcnZpY2UgY29uZmlndXJhdGlvbi4nXG4pO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtOZ3hGaXhlZEZvb3RlckRpcmVjdGl2ZV0sXG4gIGV4cG9ydHM6IFtOZ3hGaXhlZEZvb3RlckRpcmVjdGl2ZV0sXG4gIHByb3ZpZGVyczogW05neEZpeGVkRm9vdGVyT3B0aW9uc1NlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIE5neEZpeGVkRm9vdGVyTW9kdWxlIHtcbiAgcHVibGljIHN0YXRpYyBmb3JSb290KG9wdGlvbnM/OiBOZ3hGaXhlZEZvb3Rlck9wdGlvbnMpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPE5neEZpeGVkRm9vdGVyTW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBOZ3hGaXhlZEZvb3Rlck1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogRk9SX1JPT1RfT1BUSU9OU19UT0tFTixcbiAgICAgICAgICB1c2VWYWx1ZTogb3B0aW9uc1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogTmd4Rml4ZWRGb290ZXJPcHRpb25zU2VydmljZSxcbiAgICAgICAgICB1c2VGYWN0b3J5OiBuZ3hGaXhlZEZvb3Rlck9wdGlvbnNGYWN0b3J5LFxuICAgICAgICAgIGRlcHM6IFtGT1JfUk9PVF9PUFRJT05TX1RPS0VOXVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -1,6 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public-api';
5
- export { ngxFixedFooterOptionsFactory as ɵa } from './lib/ngx-fixed-footer-factory';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWZpeGVkLWZvb3Rlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1maXhlZC1mb290ZXIvc3JjL25neC1maXhlZC1mb290ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQztBQUU3QixPQUFPLEVBQUMsNEJBQTRCLElBQUksRUFBRSxFQUFDLE1BQU0sZ0NBQWdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG5cbmV4cG9ydCB7bmd4Rml4ZWRGb290ZXJPcHRpb25zRmFjdG9yeSBhcyDJtWF9IGZyb20gJy4vbGliL25neC1maXhlZC1mb290ZXItZmFjdG9yeSc7Il19
@@ -1 +0,0 @@
1
- {"version":3,"file":"ngx-fixed-footer.js","sources":["../../../projects/ngx-fixed-footer/src/lib/ngx-fixed-footer.constants.ts","../../../projects/ngx-fixed-footer/src/lib/ngx-fixed-footer-options.service.ts","../../../projects/ngx-fixed-footer/src/lib/ngx-fixed-footer.directive.ts","../../../projects/ngx-fixed-footer/src/lib/ngx-fixed-footer-factory.ts","../../../projects/ngx-fixed-footer/src/lib/ngx-fixed-footer.module.ts","../../../projects/ngx-fixed-footer/src/public-api.ts","../../../projects/ngx-fixed-footer/src/ngx-fixed-footer.ts"],"sourcesContent":["export const DEFAULT_CSS_ATTRIBUTE = 'padding';\nexport const DEFAULT_CONTAINER_SELECTOR = '[role=\"main\"]';\n","import { Injectable } from '@angular/core';\nimport { DEFAULT_CONTAINER_SELECTOR, DEFAULT_CSS_ATTRIBUTE } from './ngx-fixed-footer.constants';\nimport { NgxFixedFooterCssAttribute } from './ngx-fixed-footer.interface';\n\n@Injectable()\nexport class NgxFixedFooterOptionsService {\n /**\n * @returns Css attribute of HTML element which gets style. It means margin or padding\n */\n public cssAttribute: NgxFixedFooterCssAttribute = DEFAULT_CSS_ATTRIBUTE;\n\n /**\n * @returns Css selector of HTML element which gets extra margin or padding\n */\n public containerSelector: string = DEFAULT_CONTAINER_SELECTOR;\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n Directive,\n ElementRef,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Renderer2,\n SimpleChanges\n} from '@angular/core';\nimport { NgxFixedFooterOptionsService } from './ngx-fixed-footer-options.service';\nimport { NgxFixedFooterCssAttribute } from './ngx-fixed-footer.interface';\n\n@Directive({\n selector: '[ngxFixedFooter]'\n})\nexport class NgxFixedFooterDirective implements OnDestroy, OnChanges, OnInit {\n @Input() public containerSelector: string = this.options.containerSelector;\n @Input() public cssAttribute: NgxFixedFooterCssAttribute = this.options.cssAttribute;\n\n private offsetHeight: number = undefined;\n private resizeObserver: ResizeObserver;\n\n constructor(\n @Inject(DOCUMENT) private document: any,\n private el: ElementRef,\n private render: Renderer2,\n private options: NgxFixedFooterOptionsService\n ) {}\n\n public ngOnInit(): void {\n if (this.hasResizeObserver && this.document) {\n const resizeObserver = new ResizeObserver(() => this.checkHeight());\n resizeObserver.observe(this.html);\n }\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (this.hasResizeObserver && this.document) {\n // swap selector\n if (changes?.containerSelector && !changes?.containerSelector?.firstChange) {\n const prev = changes?.containerSelector?.previousValue;\n const next = changes?.containerSelector?.currentValue;\n if (next !== prev) {\n this.removeStyle(this.document.body.querySelector(prev), this.cssAttribute);\n this.setStyle(this.document.body.querySelector(next), this.cssAttribute, this.offsetHeight);\n }\n }\n\n // swap css attribute\n if (changes?.cssAttribute && !changes?.cssAttribute?.firstChange) {\n const prev = changes?.containerSelector?.previousValue;\n const next = changes?.cssAttribute?.currentValue;\n if (next !== prev) {\n this.removeStyle(this.container, prev);\n this.setStyle(this.container, next, this.offsetHeight);\n }\n }\n }\n }\n\n public ngOnDestroy(): void {\n if (this.hasResizeObserver && this.document) {\n this.removeStyle(this.container, this.cssAttribute);\n if (this.resizeObserver) {\n this.resizeObserver.unobserve(this.html);\n }\n }\n }\n\n private checkHeight(): void {\n const height = this.html.offsetHeight;\n if (this.offsetHeight !== height) {\n this.setStyle(this.container, this.cssAttribute, height);\n this.offsetHeight = height;\n }\n }\n\n private removeStyle(container: HTMLElement, cssAttribute: NgxFixedFooterCssAttribute): void {\n this.render.setStyle(container, `${cssAttribute}-bottom`, '');\n }\n\n private setStyle(container: HTMLElement, cssAttribute: NgxFixedFooterCssAttribute, height: number): void {\n this.render.setStyle(container, `${cssAttribute}-bottom`, height === 0 ? '' : `${height}px`);\n }\n\n private get container(): HTMLElement {\n return this.document.body.querySelector(this.containerSelector);\n }\n\n private get html(): HTMLElement {\n return this.el.nativeElement;\n }\n\n private get hasResizeObserver(): boolean {\n return typeof ResizeObserver !== 'undefined';\n }\n}\n","import { NgxFixedFooterOptionsService } from './ngx-fixed-footer-options.service';\nimport { NgxFixedFooterOptions } from './ngx-fixed-footer.interface';\n\nexport const ngxFixedFooterOptionsFactory = (options?: NgxFixedFooterOptions): NgxFixedFooterOptionsService => {\n const ngxFixedFooterOptionsService = new NgxFixedFooterOptionsService();\n if (options) {\n if (options.containerSelector) {\n ngxFixedFooterOptionsService.containerSelector = options.containerSelector;\n }\n if (options.cssAttribute) {\n ngxFixedFooterOptionsService.cssAttribute = options.cssAttribute;\n }\n }\n return ngxFixedFooterOptionsService;\n};\n","import { InjectionToken, ModuleWithProviders, NgModule } from '@angular/core';\nimport { ngxFixedFooterOptionsFactory } from './ngx-fixed-footer-factory';\nimport { NgxFixedFooterOptionsService } from './ngx-fixed-footer-options.service';\nimport { NgxFixedFooterDirective } from './ngx-fixed-footer.directive';\nimport { NgxFixedFooterOptions } from './ngx-fixed-footer.interface';\n\nexport let FOR_ROOT_OPTIONS_TOKEN = new InjectionToken<NgxFixedFooterOptions>(\n 'forRoot() NgxCutOptionsService configuration.'\n);\n\n@NgModule({\n declarations: [NgxFixedFooterDirective],\n exports: [NgxFixedFooterDirective],\n providers: [NgxFixedFooterOptionsService]\n})\nexport class NgxFixedFooterModule {\n public static forRoot(options?: NgxFixedFooterOptions): ModuleWithProviders<NgxFixedFooterModule> {\n return {\n ngModule: NgxFixedFooterModule,\n providers: [\n {\n provide: FOR_ROOT_OPTIONS_TOKEN,\n useValue: options\n },\n {\n provide: NgxFixedFooterOptionsService,\n useFactory: ngxFixedFooterOptionsFactory,\n deps: [FOR_ROOT_OPTIONS_TOKEN]\n }\n ]\n };\n }\n}\n","/*\n * Public API Surface of ngx-fixed-footer\n */\n\nexport * from './lib/ngx-fixed-footer-options.service';\nexport * from './lib/ngx-fixed-footer.constants';\nexport * from './lib/ngx-fixed-footer.directive';\nexport * from './lib/ngx-fixed-footer.interface';\nexport * from './lib/ngx-fixed-footer.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {ngxFixedFooterOptionsFactory as ɵa} from './lib/ngx-fixed-footer-factory';"],"names":[],"mappings":";;;MAAa,qBAAqB,GAAG,UAAU;MAClC,0BAA0B,GAAG;;MCI7B,4BAA4B;IADzC;;;;QAKS,iBAAY,GAA+B,qBAAqB,CAAC;;;;QAKjE,sBAAiB,GAAW,0BAA0B,CAAC;KAC/D;;;YAXA,UAAU;;;MCcE,uBAAuB;IAOlC,YAC4B,QAAa,EAC/B,EAAc,EACd,MAAiB,EACjB,OAAqC;QAHnB,aAAQ,GAAR,QAAQ,CAAK;QAC/B,OAAE,GAAF,EAAE,CAAY;QACd,WAAM,GAAN,MAAM,CAAW;QACjB,YAAO,GAAP,OAAO,CAA8B;QAV/B,sBAAiB,GAAW,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC;QAC3D,iBAAY,GAA+B,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;QAE7E,iBAAY,GAAW,SAAS,CAAC;KAQrC;IAEG,QAAQ;QACb,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC3C,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YACpE,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACnC;KACF;IAEM,WAAW,CAAC,OAAsB;;QACvC,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,QAAQ,EAAE;;YAE3C,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,iBAAiB,KAAI,EAAC,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,iBAAiB,0CAAE,WAAW,CAAA,EAAE;gBAC1E,MAAM,IAAI,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,iBAAiB,0CAAE,aAAa,CAAC;gBACvD,MAAM,IAAI,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,iBAAiB,0CAAE,YAAY,CAAC;gBACtD,IAAI,IAAI,KAAK,IAAI,EAAE;oBACjB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;oBAC5E,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;iBAC7F;aACF;;YAGD,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,KAAI,EAAC,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,0CAAE,WAAW,CAAA,EAAE;gBAChE,MAAM,IAAI,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,iBAAiB,0CAAE,aAAa,CAAC;gBACvD,MAAM,IAAI,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,0CAAE,YAAY,CAAC;gBACjD,IAAI,IAAI,KAAK,IAAI,EAAE;oBACjB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;oBACvC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;iBACxD;aACF;SACF;KACF;IAEM,WAAW;QAChB,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC3C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACpD,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC1C;SACF;KACF;IAEO,WAAW;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,EAAE;YAChC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;YACzD,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;SAC5B;KACF;IAEO,WAAW,CAAC,SAAsB,EAAE,YAAwC;QAClF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,YAAY,SAAS,EAAE,EAAE,CAAC,CAAC;KAC/D;IAEO,QAAQ,CAAC,SAAsB,EAAE,YAAwC,EAAE,MAAc;QAC/F,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,YAAY,SAAS,EAAE,MAAM,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,IAAI,CAAC,CAAC;KAC9F;IAED,IAAY,SAAS;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;KACjE;IAED,IAAY,IAAI;QACd,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;KAC9B;IAED,IAAY,iBAAiB;QAC3B,OAAO,OAAO,cAAc,KAAK,WAAW,CAAC;KAC9C;;;YAnFF,SAAS,SAAC;gBACT,QAAQ,EAAE,kBAAkB;aAC7B;;;4CASI,MAAM,SAAC,QAAQ;YAvBlB,UAAU;YAMV,SAAS;YAGF,4BAA4B;;;gCAOlC,KAAK;2BACL,KAAK;;;MCjBK,4BAA4B,GAAG,CAAC,OAA+B;IAC1E,MAAM,4BAA4B,GAAG,IAAI,4BAA4B,EAAE,CAAC;IACxE,IAAI,OAAO,EAAE;QACX,IAAI,OAAO,CAAC,iBAAiB,EAAE;YAC7B,4BAA4B,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;SAC5E;QACD,IAAI,OAAO,CAAC,YAAY,EAAE;YACxB,4BAA4B,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;SAClE;KACF;IACD,OAAO,4BAA4B,CAAC;AACtC;;ICRW,sBAAsB,GAAG,IAAI,cAAc,CACpD,+CAA+C,EAC/C;MAOW,oBAAoB;IACxB,OAAO,OAAO,CAAC,OAA+B;QACnD,OAAO;YACL,QAAQ,EAAE,oBAAoB;YAC9B,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,sBAAsB;oBAC/B,QAAQ,EAAE,OAAO;iBAClB;gBACD;oBACE,OAAO,EAAE,4BAA4B;oBACrC,UAAU,EAAE,4BAA4B;oBACxC,IAAI,EAAE,CAAC,sBAAsB,CAAC;iBAC/B;aACF;SACF,CAAC;KACH;;;YArBF,QAAQ,SAAC;gBACR,YAAY,EAAE,CAAC,uBAAuB,CAAC;gBACvC,OAAO,EAAE,CAAC,uBAAuB,CAAC;gBAClC,SAAS,EAAE,CAAC,4BAA4B,CAAC;aAC1C;;;ACdD;;;;ACAA;;;;;;"}
@@ -1 +0,0 @@
1
- {"__symbolic":"module","version":4,"metadata":{"NgxFixedFooterOptionsService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":4,"character":1}}],"members":{}},"DEFAULT_CSS_ATTRIBUTE":"padding","DEFAULT_CONTAINER_SELECTOR":"[role=\"main\"]","NgxFixedFooterDirective":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":15,"character":1},"arguments":[{"selector":"[ngxFixedFooter]"}]}],"members":{"containerSelector":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":19,"character":3}}]}],"cssAttribute":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":20,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":26,"character":5},"arguments":[{"__symbolic":"reference","module":"@angular/common","name":"DOCUMENT","line":26,"character":12}]}],null,null,null],"parameters":[{"__symbolic":"reference","name":"any"},{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":27,"character":16},{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":28,"character":20},{"__symbolic":"reference","name":"NgxFixedFooterOptionsService"}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"checkHeight":[{"__symbolic":"method"}],"removeStyle":[{"__symbolic":"method"}],"setStyle":[{"__symbolic":"method"}]}},"NgxFixedFooterCssAttribute":{"__symbolic":"interface"},"NgxFixedFooterOptions":{"__symbolic":"interface"},"FOR_ROOT_OPTIONS_TOKEN":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":6,"character":40},"arguments":["forRoot() NgxCutOptionsService configuration."]},"NgxFixedFooterModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":10,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"NgxFixedFooterDirective"}],"exports":[{"__symbolic":"reference","name":"NgxFixedFooterDirective"}],"providers":[{"__symbolic":"reference","name":"NgxFixedFooterOptionsService"}]}]}],"members":{},"statics":{"forRoot":{"__symbolic":"function","parameters":["options"],"value":{"ngModule":{"__symbolic":"reference","name":"NgxFixedFooterModule"},"providers":[{"provide":{"__symbolic":"reference","name":"FOR_ROOT_OPTIONS_TOKEN"},"useValue":{"__symbolic":"reference","name":"options"}},{"provide":{"__symbolic":"reference","name":"NgxFixedFooterOptionsService"},"useFactory":{"__symbolic":"reference","name":"ɵa"},"deps":[{"__symbolic":"reference","name":"FOR_ROOT_OPTIONS_TOKEN"}]}]}}}},"ɵa":{"__symbolic":"error","message":"Lambda not supported","line":3,"character":44,"module":"./lib/ngx-fixed-footer-factory"}},"origins":{"NgxFixedFooterOptionsService":"./lib/ngx-fixed-footer-options.service","DEFAULT_CSS_ATTRIBUTE":"./lib/ngx-fixed-footer.constants","DEFAULT_CONTAINER_SELECTOR":"./lib/ngx-fixed-footer.constants","NgxFixedFooterDirective":"./lib/ngx-fixed-footer.directive","NgxFixedFooterCssAttribute":"./lib/ngx-fixed-footer.interface","NgxFixedFooterOptions":"./lib/ngx-fixed-footer.interface","FOR_ROOT_OPTIONS_TOKEN":"./lib/ngx-fixed-footer.module","NgxFixedFooterModule":"./lib/ngx-fixed-footer.module","ɵa":"./lib/ngx-fixed-footer-factory"},"importAs":"ngx-fixed-footer"}