ngx-fixed-footer 1.1.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  > Angular directive that adds fixed footer without overlap
16
16
 
17
- > ✓ _Angular 16, Ivy and SSR compatible_
17
+ > ✓ _Angular 17 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
 
@@ -32,37 +32,70 @@ yarn add ngx-fixed-footer
32
32
 
33
33
  2. Add NgxFixedFooterModule into your module `imports`
34
34
 
35
- ```typescript
36
- import { NgxFixedFooterModule } from 'ngx-fixed-footer';
35
+ 2.1. import providers (optional)
36
+
37
+ ```typescript
38
+ import { provideFixedFooter } from 'ngx-fixed-footer';
39
+
40
+ export const appConfig: ApplicationConfig = {
41
+ providers: [
42
+ // ...
43
+ provideFixedFooter({
44
+ containerSelector: '[data-something]',
45
+ cssAttribute: 'margin'
46
+ })
47
+ ]
48
+ };
49
+
50
+ // or
51
+
52
+ import { provideFixedFooter } from 'ngx-fixed-footer';
53
+
54
+ @NgModule({
55
+ // ...
56
+ imports: [
57
+ // ...
58
+ provideFixedFooter({
59
+ containerSelector: '[data-something]',
60
+ cssAttribute: 'margin'
61
+ })
62
+ ]
63
+ })
64
+
65
+ ```
66
+
67
+ 2.2 import directive
37
68
 
38
- @NgModule({
39
- // ...
40
- imports: [
41
- // ...
42
- NgxFixedFooterModule.forRoot({
43
- containerSelector: '[role="main"]',
44
- cssAttribute: 'padding'
69
+ ```typescript
70
+ import { NgxFixedFooterDirective } from 'ngx-fixed-footer';
71
+
72
+ @Component({
73
+ standalone: true,
74
+ imports: [
75
+ // ...
76
+ NgxFixedFooterDirective
77
+ ]
45
78
  })
46
- ]
47
- })
48
79
 
49
- // or
80
+ // or
50
81
 
51
- @NgModule({
52
- // ...
53
- imports: [
54
- // ...
55
- NgxFixedFooterModule
56
- ]
57
- })
82
+ import { NgxFixedFooterDirective } from 'ngx-fixed-footer';
58
83
 
59
- ```
84
+ @NgModule({
85
+ // ...
86
+ imports: [
87
+ // ...
88
+ NgxFixedFooterDirective
89
+ ]
90
+ })
91
+ ```
60
92
 
61
93
  ## Compatibility
62
94
 
63
95
  | Angular | ngx-fixed-footer | Install |
64
96
  | --------- | ---------------- | ----------------------------- |
65
- | >= 12 | 1.x | `yarn add ngx-fixed-footer` |
97
+ | >= 14 | 2.x | `yarn add ngx-fixed-footer` |
98
+ | >= 12 | 1.x | `yarn add ngx-fixed-footer@1` |
66
99
  | >= 5 < 13 | 0.x | `yarn add ngx-fixed-footer@0` |
67
100
 
68
101
  ## Quick start
@@ -1,3 +1,7 @@
1
1
  export const DEFAULT_CSS_ATTRIBUTE = 'padding';
2
2
  export const DEFAULT_CONTAINER_SELECTOR = '[role="main"]';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWZpeGVkLWZvb3Rlci5jb25zdGFudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZml4ZWQtZm9vdGVyL3NyYy9saWIvbmd4LWZpeGVkLWZvb3Rlci5jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsU0FBUyxDQUFDO0FBQy9DLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBERUZBVUxUX0NTU19BVFRSSUJVVEUgPSAncGFkZGluZyc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9DT05UQUlORVJfU0VMRUNUT1IgPSAnW3JvbGU9XCJtYWluXCJdJztcbiJdfQ==
3
+ export const DEFAULT_FIXED_FOOTER_OPTIONS = {
4
+ containerSelector: DEFAULT_CONTAINER_SELECTOR,
5
+ cssAttribute: DEFAULT_CSS_ATTRIBUTE
6
+ };
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWZpeGVkLWZvb3Rlci5jb25zdGFudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZml4ZWQtZm9vdGVyL3NyYy9saWIvbmd4LWZpeGVkLWZvb3Rlci5jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsU0FBUyxDQUFDO0FBQy9DLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLGVBQWUsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBMEI7SUFDakUsaUJBQWlCLEVBQUUsMEJBQTBCO0lBQzdDLFlBQVksRUFBRSxxQkFBcUI7Q0FDcEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5neEZpeGVkRm9vdGVyT3B0aW9ucyB9IGZyb20gJy4vbmd4LWZpeGVkLWZvb3Rlci5pbnRlcmZhY2UnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9DU1NfQVRUUklCVVRFID0gJ3BhZGRpbmcnO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ09OVEFJTkVSX1NFTEVDVE9SID0gJ1tyb2xlPVwibWFpblwiXSc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9GSVhFRF9GT09URVJfT1BUSU9OUzogTmd4Rml4ZWRGb290ZXJPcHRpb25zID0ge1xuICBjb250YWluZXJTZWxlY3RvcjogREVGQVVMVF9DT05UQUlORVJfU0VMRUNUT1IsXG4gIGNzc0F0dHJpYnV0ZTogREVGQVVMVF9DU1NfQVRUUklCVVRFXG59O1xuIl19
@@ -1,16 +1,17 @@
1
1
  import { DOCUMENT } from '@angular/common';
2
- import { Directive, Inject, Input } from '@angular/core';
2
+ import { Directive, Inject, Input, inject } from '@angular/core';
3
+ import { DEFAULT_FIXED_FOOTER_OPTIONS } from './ngx-fixed-footer.constants';
4
+ import { APP_FIXED_FOOTER_OPTIONS_TOKEN } from './ngx-fixed-footer.provider';
3
5
  import * as i0 from "@angular/core";
4
- import * as i1 from "./ngx-fixed-footer-options.service";
5
6
  export class NgxFixedFooterDirective {
6
- constructor(document, el, render, options) {
7
+ constructor(document, el, render) {
7
8
  this.document = document;
8
9
  this.el = el;
9
10
  this.render = render;
10
- this.options = options;
11
+ this.options = inject(APP_FIXED_FOOTER_OPTIONS_TOKEN, { optional: true }) || DEFAULT_FIXED_FOOTER_OPTIONS;
12
+ this.offsetHeight = undefined;
11
13
  this.containerSelector = this.options.containerSelector;
12
14
  this.cssAttribute = this.options.cssAttribute;
13
- this.offsetHeight = undefined;
14
15
  }
15
16
  ngOnInit() {
16
17
  if (this.hasResizeObserver && this.document) {
@@ -31,7 +32,7 @@ export class NgxFixedFooterDirective {
31
32
  }
32
33
  // swap css attribute
33
34
  if (changes?.cssAttribute && !changes?.cssAttribute?.firstChange) {
34
- const prev = changes?.containerSelector?.previousValue;
35
+ const prev = changes?.cssAttribute?.previousValue;
35
36
  const next = changes?.cssAttribute?.currentValue;
36
37
  if (next !== prev) {
37
38
  this.removeStyle(this.container, prev);
@@ -56,13 +57,24 @@ export class NgxFixedFooterDirective {
56
57
  }
57
58
  }
58
59
  removeStyle(container, cssAttribute) {
60
+ if (!container) {
61
+ throw new Error(`Cannot removeStyle to undefined container`);
62
+ }
59
63
  this.render.setStyle(container, `${cssAttribute}-bottom`, '');
60
64
  }
61
65
  setStyle(container, cssAttribute, height) {
66
+ if (!container) {
67
+ throw new Error(`Cannot setStyle to undefined container`);
68
+ }
62
69
  this.render.setStyle(container, `${cssAttribute}-bottom`, height === 0 ? '' : `${height}px`);
63
70
  }
64
71
  get container() {
65
- return this.document.body.querySelector(this.containerSelector);
72
+ const selector = this.containerSelector || this.options.containerSelector;
73
+ const container = this.document.body.querySelector(selector);
74
+ if (!container) {
75
+ console.warn(`Container '${selector}' was not found`);
76
+ }
77
+ return container;
66
78
  }
67
79
  get html() {
68
80
  return this.el.nativeElement;
@@ -70,20 +82,21 @@ export class NgxFixedFooterDirective {
70
82
  get hasResizeObserver() {
71
83
  return typeof ResizeObserver !== 'undefined';
72
84
  }
73
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: NgxFixedFooterDirective, deps: [{ token: DOCUMENT }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.NgxFixedFooterOptionsService }], target: i0.ɵɵFactoryTarget.Directive }); }
74
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.0", type: NgxFixedFooterDirective, selector: "[ngxFixedFooter]", inputs: { containerSelector: "containerSelector", cssAttribute: "cssAttribute" }, usesOnChanges: true, ngImport: i0 }); }
85
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: NgxFixedFooterDirective, deps: [{ token: DOCUMENT }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
86
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.8", type: NgxFixedFooterDirective, isStandalone: true, selector: "[ngxFixedFooter]", inputs: { containerSelector: "containerSelector", cssAttribute: "cssAttribute" }, usesOnChanges: true, ngImport: i0 }); }
75
87
  }
76
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: NgxFixedFooterDirective, decorators: [{
88
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: NgxFixedFooterDirective, decorators: [{
77
89
  type: Directive,
78
90
  args: [{
79
- selector: '[ngxFixedFooter]'
91
+ selector: '[ngxFixedFooter]',
92
+ standalone: true
80
93
  }]
81
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
94
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
82
95
  type: Inject,
83
96
  args: [DOCUMENT]
84
- }] }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.NgxFixedFooterOptionsService }]; }, propDecorators: { containerSelector: [{
97
+ }] }, { type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { containerSelector: [{
85
98
  type: Input
86
99
  }], cssAttribute: [{
87
100
  type: Input
88
101
  }] } });
89
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWZpeGVkLWZvb3Rlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZml4ZWQtZm9vdGVyL3NyYy9saWIvbmd4LWZpeGVkLWZvb3Rlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFDTCxTQUFTLEVBRVQsTUFBTSxFQUNOLEtBQUssRUFNTixNQUFNLGVBQWUsQ0FBQzs7O0FBT3ZCLE1BQU0sT0FBTyx1QkFBdUI7SUFPbEMsWUFDNEIsUUFBYSxFQUMvQixFQUFjLEVBQ2QsTUFBaUIsRUFDakIsT0FBcUM7UUFIbkIsYUFBUSxHQUFSLFFBQVEsQ0FBSztRQUMvQixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2QsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNqQixZQUFPLEdBQVAsT0FBTyxDQUE4QjtRQVYvQixzQkFBaUIsR0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO1FBQzNELGlCQUFZLEdBQStCLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO1FBRTdFLGlCQUFZLEdBQVcsU0FBUyxDQUFDO0lBUXRDLENBQUM7SUFFRyxRQUFRO1FBQ2IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUMzQyxNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUNwRSxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuQztJQUNILENBQUM7SUFFTSxXQUFXLENBQUMsT0FBc0I7UUFDdkMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUMzQyxnQkFBZ0I7WUFD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SUFDL0IsQ0FBQztJQUVELElBQVksaUJBQWlCO1FBQzNCLE9BQU8sT0FBTyxjQUFjLEtBQUssV0FBVyxDQUFDO0lBQy9DLENBQUM7OEdBaEZVLHVCQUF1QixrQkFReEIsUUFBUTtrR0FSUCx1QkFBdUI7OzJGQUF2Qix1QkFBdUI7a0JBSG5DLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtpQkFDN0I7OzBCQVNJLE1BQU07MkJBQUMsUUFBUTt3SUFQRixpQkFBaUI7c0JBQWhDLEtBQUs7Z0JBQ1UsWUFBWTtzQkFBM0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd4Rml4ZWRGb290ZXJPcHRpb25zU2VydmljZSB9IGZyb20gJy4vbmd4LWZpeGVkLWZvb3Rlci1vcHRpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmd4Rml4ZWRGb290ZXJDc3NBdHRyaWJ1dGUgfSBmcm9tICcuL25neC1maXhlZC1mb290ZXIuaW50ZXJmYWNlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW25neEZpeGVkRm9vdGVyXSdcbn0pXG5leHBvcnQgY2xhc3MgTmd4Rml4ZWRGb290ZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgT25Jbml0IHtcbiAgQElucHV0KCkgcHVibGljIGNvbnRhaW5lclNlbGVjdG9yOiBzdHJpbmcgPSB0aGlzLm9wdGlvbnMuY29udGFpbmVyU2VsZWN0b3I7XG4gIEBJbnB1dCgpIHB1YmxpYyBjc3NBdHRyaWJ1dGU6IE5neEZpeGVkRm9vdGVyQ3NzQXR0cmlidXRlID0gdGhpcy5vcHRpb25zLmNzc0F0dHJpYnV0ZTtcblxuICBwcml2YXRlIG9mZnNldEhlaWdodDogbnVtYmVyID0gdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBhbnksXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlbmRlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgb3B0aW9uczogTmd4Rml4ZWRGb290ZXJPcHRpb25zU2VydmljZVxuICApIHt9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmhhc1Jlc2l6ZU9ic2VydmVyICYmIHRoaXMuZG9jdW1lbnQpIHtcbiAgICAgIGNvbnN0IHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHRoaXMuY2hlY2tIZWlnaHQoKSk7XG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuaHRtbCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oYXNSZXNpemVPYnNlcnZlciAmJiB0aGlzLmRvY3VtZW50KSB7XG4gICAgICAvLyBzd2FwIHNlbGVjdG9yXG4gICAgICBpZiAoY2hhbmdlcz8uY29udGFpbmVyU2VsZWN0b3IgJiYgIWNoYW5nZXM/LmNvbnRhaW5lclNlbGVjdG9yPy5maXJzdENoYW5nZSkge1xuICAgICAgICBjb25zdCBwcmV2ID0gY2hhbmdlcz8uY29udGFpbmVyU2VsZWN0b3I/LnByZXZpb3VzVmFsdWU7XG4gICAgICAgIGNvbnN0IG5leHQgPSBjaGFuZ2VzPy5jb250YWluZXJTZWxlY3Rvcj8uY3VycmVudFZhbHVlO1xuICAgICAgICBpZiAobmV4dCAhPT0gcHJldikge1xuICAgICAgICAgIHRoaXMucmVtb3ZlU3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3IocHJldiksIHRoaXMuY3NzQXR0cmlidXRlKTtcbiAgICAgICAgICB0aGlzLnNldFN0eWxlKHRoaXMuZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yKG5leHQpLCB0aGlzLmNzc0F0dHJpYnV0ZSwgdGhpcy5vZmZzZXRIZWlnaHQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHN3YXAgY3NzIGF0dHJpYnV0ZVxuICAgICAgaWYgKGNoYW5nZXM/LmNzc0F0dHJpYnV0ZSAmJiAhY2hhbmdlcz8uY3NzQXR0cmlidXRlPy5maXJzdENoYW5nZSkge1xuICAgICAgICBjb25zdCBwcmV2ID0gY2hhbmdlcz8uY29udGFpbmVyU2VsZWN0b3I/LnByZXZpb3VzVmFsdWU7XG4gICAgICAgIGNvbnN0IG5leHQgPSBjaGFuZ2VzPy5jc3NBdHRyaWJ1dGU/LmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgaWYgKG5leHQgIT09IHByZXYpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZVN0eWxlKHRoaXMuY29udGFpbmVyLCBwcmV2KTtcbiAgICAgICAgICB0aGlzLnNldFN0eWxlKHRoaXMuY29udGFpbmVyLCBuZXh0LCB0aGlzLm9mZnNldEhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGFzUmVzaXplT2JzZXJ2ZXIgJiYgdGhpcy5kb2N1bWVudCkge1xuICAgICAgdGhpcy5yZW1vdmVTdHlsZSh0aGlzLmNvbnRhaW5lciwgdGhpcy5jc3NBdHRyaWJ1dGUpO1xuICAgICAgaWYgKHRoaXMucmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci51bm9ic2VydmUodGhpcy5odG1sKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrSGVpZ2h0KCk6IHZvaWQge1xuICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuaHRtbC5vZmZzZXRIZWlnaHQ7XG4gICAgaWYgKHRoaXMub2Zmc2V0SGVpZ2h0ICE9PSBoZWlnaHQpIHtcbiAgICAgIHRoaXMuc2V0U3R5bGUodGhpcy5jb250YWluZXIsIHRoaXMuY3NzQXR0cmlidXRlLCBoZWlnaHQpO1xuICAgICAgdGhpcy5vZmZzZXRIZWlnaHQgPSBoZWlnaHQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVTdHlsZShjb250YWluZXI6IEhUTUxFbGVtZW50LCBjc3NBdHRyaWJ1dGU6IE5neEZpeGVkRm9vdGVyQ3NzQXR0cmlidXRlKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXIuc2V0U3R5bGUoY29udGFpbmVyLCBgJHtjc3NBdHRyaWJ1dGV9LWJvdHRvbWAsICcnKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U3R5bGUoY29udGFpbmVyOiBIVE1MRWxlbWVudCwgY3NzQXR0cmlidXRlOiBOZ3hGaXhlZEZvb3RlckNzc0F0dHJpYnV0ZSwgaGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlci5zZXRTdHlsZShjb250YWluZXIsIGAke2Nzc0F0dHJpYnV0ZX0tYm90dG9tYCwgaGVpZ2h0ID09PSAwID8gJycgOiBgJHtoZWlnaHR9cHhgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGNvbnRhaW5lcigpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yKHRoaXMuY29udGFpbmVyU2VsZWN0b3IpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaHRtbCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuZWwubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGhhc1Jlc2l6ZU9ic2VydmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnO1xuICB9XG59XG4iXX0=
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWZpeGVkLWZvb3Rlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZml4ZWQtZm9vdGVyL3NyYy9saWIvbmd4LWZpeGVkLWZvb3Rlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFDTCxTQUFTLEVBRVQsTUFBTSxFQUNOLEtBQUssRUFNTCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFNUUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7O0FBTTdFLE1BQU0sT0FBTyx1QkFBdUI7SUFTbEMsWUFDNEIsUUFBYSxFQUMvQixFQUFjLEVBQ2QsTUFBaUI7UUFGQyxhQUFRLEdBQVIsUUFBUSxDQUFLO1FBQy9CLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDZCxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBWG5CLFlBQU8sR0FDYixNQUFNLENBQUMsOEJBQThCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSw0QkFBNEIsQ0FBQztRQUNyRixpQkFBWSxHQUFXLFNBQVMsQ0FBQztRQUd6QixzQkFBaUIsR0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO1FBQzNELGlCQUFZLEdBQStCLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO0lBTWxGLENBQUM7SUFFRyxRQUFRO1FBQ2IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUMzQyxNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUNwRSxjQUFjLENB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QUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxHQUFHLFlBQVksU0FBUyxFQUFFLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFRCxJQUFZLFNBQVM7UUFDbkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUM7UUFDMUUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDZCxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsUUFBUSxpQkFBaUIsQ0FBQyxDQUFDO1NBQ3ZEO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELElBQVksSUFBSTtRQUNkLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQVksaUJBQWlCO1FBQzNCLE9BQU8sT0FBTyxjQUFjLEtBQUssV0FBVyxDQUFDO0lBQy9DLENBQUM7OEdBNUZVLHVCQUF1QixrQkFVeEIsUUFBUTtrR0FWUCx1QkFBdUI7OzJGQUF2Qix1QkFBdUI7a0JBSm5DLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzswQkFXSSxNQUFNOzJCQUFDLFFBQVE7MEZBSkYsaUJBQWlCO3NCQUFoQyxLQUFLO2dCQUNVLFlBQVk7c0JBQTNCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFJlbmRlcmVyMixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgaW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgREVGQVVMVF9GSVhFRF9GT09URVJfT1BUSU9OUyB9IGZyb20gJy4vbmd4LWZpeGVkLWZvb3Rlci5jb25zdGFudHMnO1xuaW1wb3J0IHsgTmd4Rml4ZWRGb290ZXJDc3NBdHRyaWJ1dGUsIE5neEZpeGVkRm9vdGVyT3B0aW9ucyB9IGZyb20gJy4vbmd4LWZpeGVkLWZvb3Rlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQVBQX0ZJWEVEX0ZPT1RFUl9PUFRJT05TX1RPS0VOIH0gZnJvbSAnLi9uZ3gtZml4ZWQtZm9vdGVyLnByb3ZpZGVyJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW25neEZpeGVkRm9vdGVyXScsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgTmd4Rml4ZWRGb290ZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgT25Jbml0IHtcbiAgcHJpdmF0ZSBvcHRpb25zOiBOZ3hGaXhlZEZvb3Rlck9wdGlvbnMgPVxuICAgIGluamVjdChBUFBfRklYRURfRk9PVEVSX09QVElPTlNfVE9LRU4sIHsgb3B0aW9uYWw6IHRydWUgfSkgfHwgREVGQVVMVF9GSVhFRF9GT09URVJfT1BUSU9OUztcbiAgcHJpdmF0ZSBvZmZzZXRIZWlnaHQ6IG51bWJlciA9IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZXNpemVPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXI7XG5cbiAgQElucHV0KCkgcHVibGljIGNvbnRhaW5lclNlbGVjdG9yOiBzdHJpbmcgPSB0aGlzLm9wdGlvbnMuY29udGFpbmVyU2VsZWN0b3I7XG4gIEBJbnB1dCgpIHB1YmxpYyBjc3NBdHRyaWJ1dGU6IE5neEZpeGVkRm9vdGVyQ3NzQXR0cmlidXRlID0gdGhpcy5vcHRpb25zLmNzc0F0dHJpYnV0ZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBhbnksXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlbmRlcjogUmVuZGVyZXIyXG4gICkge31cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGFzUmVzaXplT2JzZXJ2ZXIgJiYgdGhpcy5kb2N1bWVudCkge1xuICAgICAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gdGhpcy5jaGVja0hlaWdodCgpKTtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5odG1sKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmhhc1Jlc2l6ZU9ic2VydmVyICYmIHRoaXMuZG9jdW1lbnQpIHtcbiAgICAgIC8vIHN3YXAgc2VsZWN0b3JcbiAgICAgIGlmIChjaGFuZ2VzPy5jb250YWluZXJTZWxlY3RvciAmJiAhY2hhbmdlcz8uY29udGFpbmVyU2VsZWN0b3I/LmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgIGNvbnN0IHByZXYgPSBjaGFuZ2VzPy5jb250YWluZXJTZWxlY3Rvcj8ucHJldmlvdXNWYWx1ZTtcbiAgICAgICAgY29uc3QgbmV4dCA9IGNoYW5nZXM/LmNvbnRhaW5lclNlbGVjdG9yPy5jdXJyZW50VmFsdWU7XG4gICAgICAgIGlmIChuZXh0ICE9PSBwcmV2KSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVTdHlsZSh0aGlzLmRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvcihwcmV2KSwgdGhpcy5jc3NBdHRyaWJ1dGUpO1xuICAgICAgICAgIHRoaXMuc2V0U3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3IobmV4dCksIHRoaXMuY3NzQXR0cmlidXRlLCB0aGlzLm9mZnNldEhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gc3dhcCBjc3MgYXR0cmlidXRlXG4gICAgICBpZiAoY2hhbmdlcz8uY3NzQXR0cmlidXRlICYmICFjaGFuZ2VzPy5jc3NBdHRyaWJ1dGU/LmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgIGNvbnN0IHByZXYgPSBjaGFuZ2VzPy5jc3NBdHRyaWJ1dGU/LnByZXZpb3VzVmFsdWU7XG4gICAgICAgIGNvbnN0IG5leHQgPSBjaGFuZ2VzPy5jc3NBdHRyaWJ1dGU/LmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgaWYgKG5leHQgIT09IHByZXYpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZVN0eWxlKHRoaXMuY29udGFpbmVyLCBwcmV2KTtcbiAgICAgICAgICB0aGlzLnNldFN0eWxlKHRoaXMuY29udGFpbmVyLCBuZXh0LCB0aGlzLm9mZnNldEhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGFzUmVzaXplT2JzZXJ2ZXIgJiYgdGhpcy5kb2N1bWVudCkge1xuICAgICAgdGhpcy5yZW1vdmVTdHlsZSh0aGlzLmNvbnRhaW5lciwgdGhpcy5jc3NBdHRyaWJ1dGUpO1xuICAgICAgaWYgKHRoaXMucmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci51bm9ic2VydmUodGhpcy5odG1sKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrSGVpZ2h0KCk6IHZvaWQge1xuICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuaHRtbC5vZmZzZXRIZWlnaHQ7XG4gICAgaWYgKHRoaXMub2Zmc2V0SGVpZ2h0ICE9PSBoZWlnaHQpIHtcbiAgICAgIHRoaXMuc2V0U3R5bGUodGhpcy5jb250YWluZXIsIHRoaXMuY3NzQXR0cmlidXRlLCBoZWlnaHQpO1xuICAgICAgdGhpcy5vZmZzZXRIZWlnaHQgPSBoZWlnaHQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVTdHlsZShjb250YWluZXI6IEhUTUxFbGVtZW50LCBjc3NBdHRyaWJ1dGU6IE5neEZpeGVkRm9vdGVyQ3NzQXR0cmlidXRlKTogdm9pZCB7XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlbW92ZVN0eWxlIHRvIHVuZGVmaW5lZCBjb250YWluZXJgKTtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXIuc2V0U3R5bGUoY29udGFpbmVyLCBgJHtjc3NBdHRyaWJ1dGV9LWJvdHRvbWAsICcnKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U3R5bGUoY29udGFpbmVyOiBIVE1MRWxlbWVudCwgY3NzQXR0cmlidXRlOiBOZ3hGaXhlZEZvb3RlckNzc0F0dHJpYnV0ZSwgaGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2V0U3R5bGUgdG8gdW5kZWZpbmVkIGNvbnRhaW5lcmApO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlci5zZXRTdHlsZShjb250YWluZXIsIGAke2Nzc0F0dHJpYnV0ZX0tYm90dG9tYCwgaGVpZ2h0ID09PSAwID8gJycgOiBgJHtoZWlnaHR9cHhgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGNvbnRhaW5lcigpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSB0aGlzLmNvbnRhaW5lclNlbGVjdG9yIHx8IHRoaXMub3B0aW9ucy5jb250YWluZXJTZWxlY3RvcjtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIGNvbnNvbGUud2FybihgQ29udGFpbmVyICcke3NlbGVjdG9yfScgd2FzIG5vdCBmb3VuZGApO1xuICAgIH1cbiAgICByZXR1cm4gY29udGFpbmVyO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaHRtbCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuZWwubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGhhc1Jlc2l6ZU9ic2VydmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,13 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { DEFAULT_CONTAINER_SELECTOR, DEFAULT_CSS_ATTRIBUTE } from './ngx-fixed-footer.constants';
3
+ export const APP_FIXED_FOOTER_OPTIONS_TOKEN = new InjectionToken('[ngxFixedFooter] Options');
4
+ export const provideFixedFooter = (options) => {
5
+ return {
6
+ provide: APP_FIXED_FOOTER_OPTIONS_TOKEN,
7
+ useValue: {
8
+ cssAttribute: options.cssAttribute || DEFAULT_CSS_ATTRIBUTE,
9
+ containerSelector: options.containerSelector || DEFAULT_CONTAINER_SELECTOR
10
+ }
11
+ };
12
+ };
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWZpeGVkLWZvb3Rlci5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1maXhlZC1mb290ZXIvc3JjL2xpYi9uZ3gtZml4ZWQtZm9vdGVyLnByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHakcsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsSUFBSSxjQUFjLENBQXdCLDBCQUEwQixDQUFDLENBQUM7QUFFcEgsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxPQUE4QixFQUFZLEVBQUU7SUFDN0UsT0FBTztRQUNMLE9BQU8sRUFBRSw4QkFBOEI7UUFDdkMsUUFBUSxFQUFFO1lBQ1IsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZLElBQUkscUJBQXFCO1lBQzNELGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxpQkFBaUIsSUFBSSwwQkFBMEI7U0FDM0U7S0FDRixDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBERUZBVUxUX0NPTlRBSU5FUl9TRUxFQ1RPUiwgREVGQVVMVF9DU1NfQVRUUklCVVRFIH0gZnJvbSAnLi9uZ3gtZml4ZWQtZm9vdGVyLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBOZ3hGaXhlZEZvb3Rlck9wdGlvbnMgfSBmcm9tICcuL25neC1maXhlZC1mb290ZXIuaW50ZXJmYWNlJztcblxuZXhwb3J0IGNvbnN0IEFQUF9GSVhFRF9GT09URVJfT1BUSU9OU19UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxOZ3hGaXhlZEZvb3Rlck9wdGlvbnM+KCdbbmd4Rml4ZWRGb290ZXJdIE9wdGlvbnMnKTtcblxuZXhwb3J0IGNvbnN0IHByb3ZpZGVGaXhlZEZvb3RlciA9IChvcHRpb25zOiBOZ3hGaXhlZEZvb3Rlck9wdGlvbnMpOiBQcm92aWRlciA9PiB7XG4gIHJldHVybiB7XG4gICAgcHJvdmlkZTogQVBQX0ZJWEVEX0ZPT1RFUl9PUFRJT05TX1RPS0VOLFxuICAgIHVzZVZhbHVlOiB7XG4gICAgICBjc3NBdHRyaWJ1dGU6IG9wdGlvbnMuY3NzQXR0cmlidXRlIHx8IERFRkFVTFRfQ1NTX0FUVFJJQlVURSxcbiAgICAgIGNvbnRhaW5lclNlbGVjdG9yOiBvcHRpb25zLmNvbnRhaW5lclNlbGVjdG9yIHx8IERFRkFVTFRfQ09OVEFJTkVSX1NFTEVDVE9SXG4gICAgfVxuICB9O1xufTtcbiJdfQ==
@@ -1,9 +1,8 @@
1
1
  /*
2
2
  * Public API Surface of ngx-fixed-footer
3
3
  */
4
- export * from './lib/ngx-fixed-footer-options.service';
5
4
  export * from './lib/ngx-fixed-footer.constants';
6
5
  export * from './lib/ngx-fixed-footer.directive';
7
6
  export * from './lib/ngx-fixed-footer.interface';
8
- export * from './lib/ngx-fixed-footer.module';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1maXhlZC1mb290ZXIvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsK0JBQStCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIG5neC1maXhlZC1mb290ZXJcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9uZ3gtZml4ZWQtZm9vdGVyLW9wdGlvbnMuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9uZ3gtZml4ZWQtZm9vdGVyLmNvbnN0YW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9uZ3gtZml4ZWQtZm9vdGVyLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9uZ3gtZml4ZWQtZm9vdGVyLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9uZ3gtZml4ZWQtZm9vdGVyLm1vZHVsZSc7XG4iXX0=
7
+ export * from './lib/ngx-fixed-footer.provider';
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1maXhlZC1mb290ZXIvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLGlDQUFpQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBuZ3gtZml4ZWQtZm9vdGVyXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvbmd4LWZpeGVkLWZvb3Rlci5jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbmd4LWZpeGVkLWZvb3Rlci5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbmd4LWZpeGVkLWZvb3Rlci5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbmd4LWZpeGVkLWZvb3Rlci5wcm92aWRlcic7XG4iXX0=
@@ -1,37 +1,34 @@
1
- import * as i0 from '@angular/core';
2
- import { Injectable, Directive, Inject, Input, InjectionToken, NgModule } from '@angular/core';
3
1
  import { DOCUMENT } from '@angular/common';
2
+ import * as i0 from '@angular/core';
3
+ import { InjectionToken, inject, Directive, Inject, Input } from '@angular/core';
4
4
 
5
5
  const DEFAULT_CSS_ATTRIBUTE = 'padding';
6
6
  const DEFAULT_CONTAINER_SELECTOR = '[role="main"]';
7
+ const DEFAULT_FIXED_FOOTER_OPTIONS = {
8
+ containerSelector: DEFAULT_CONTAINER_SELECTOR,
9
+ cssAttribute: DEFAULT_CSS_ATTRIBUTE
10
+ };
7
11
 
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
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: NgxFixedFooterOptionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
20
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: NgxFixedFooterOptionsService }); }
21
- }
22
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: NgxFixedFooterOptionsService, decorators: [{
23
- type: Injectable
24
- }] });
12
+ const APP_FIXED_FOOTER_OPTIONS_TOKEN = new InjectionToken('[ngxFixedFooter] Options');
13
+ const provideFixedFooter = (options) => {
14
+ return {
15
+ provide: APP_FIXED_FOOTER_OPTIONS_TOKEN,
16
+ useValue: {
17
+ cssAttribute: options.cssAttribute || DEFAULT_CSS_ATTRIBUTE,
18
+ containerSelector: options.containerSelector || DEFAULT_CONTAINER_SELECTOR
19
+ }
20
+ };
21
+ };
25
22
 
26
23
  class NgxFixedFooterDirective {
27
- constructor(document, el, render, options) {
24
+ constructor(document, el, render) {
28
25
  this.document = document;
29
26
  this.el = el;
30
27
  this.render = render;
31
- this.options = options;
28
+ this.options = inject(APP_FIXED_FOOTER_OPTIONS_TOKEN, { optional: true }) || DEFAULT_FIXED_FOOTER_OPTIONS;
29
+ this.offsetHeight = undefined;
32
30
  this.containerSelector = this.options.containerSelector;
33
31
  this.cssAttribute = this.options.cssAttribute;
34
- this.offsetHeight = undefined;
35
32
  }
36
33
  ngOnInit() {
37
34
  if (this.hasResizeObserver && this.document) {
@@ -52,7 +49,7 @@ class NgxFixedFooterDirective {
52
49
  }
53
50
  // swap css attribute
54
51
  if (changes?.cssAttribute && !changes?.cssAttribute?.firstChange) {
55
- const prev = changes?.containerSelector?.previousValue;
52
+ const prev = changes?.cssAttribute?.previousValue;
56
53
  const next = changes?.cssAttribute?.currentValue;
57
54
  if (next !== prev) {
58
55
  this.removeStyle(this.container, prev);
@@ -77,13 +74,24 @@ class NgxFixedFooterDirective {
77
74
  }
78
75
  }
79
76
  removeStyle(container, cssAttribute) {
77
+ if (!container) {
78
+ throw new Error(`Cannot removeStyle to undefined container`);
79
+ }
80
80
  this.render.setStyle(container, `${cssAttribute}-bottom`, '');
81
81
  }
82
82
  setStyle(container, cssAttribute, height) {
83
+ if (!container) {
84
+ throw new Error(`Cannot setStyle to undefined container`);
85
+ }
83
86
  this.render.setStyle(container, `${cssAttribute}-bottom`, height === 0 ? '' : `${height}px`);
84
87
  }
85
88
  get container() {
86
- return this.document.body.querySelector(this.containerSelector);
89
+ const selector = this.containerSelector || this.options.containerSelector;
90
+ const container = this.document.body.querySelector(selector);
91
+ if (!container) {
92
+ console.warn(`Container '${selector}' was not found`);
93
+ }
94
+ return container;
87
95
  }
88
96
  get html() {
89
97
  return this.el.nativeElement;
@@ -91,67 +99,24 @@ class NgxFixedFooterDirective {
91
99
  get hasResizeObserver() {
92
100
  return typeof ResizeObserver !== 'undefined';
93
101
  }
94
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: NgxFixedFooterDirective, deps: [{ token: DOCUMENT }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: NgxFixedFooterOptionsService }], target: i0.ɵɵFactoryTarget.Directive }); }
95
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.0", type: NgxFixedFooterDirective, selector: "[ngxFixedFooter]", inputs: { containerSelector: "containerSelector", cssAttribute: "cssAttribute" }, usesOnChanges: true, ngImport: i0 }); }
102
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: NgxFixedFooterDirective, deps: [{ token: DOCUMENT }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
103
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.8", type: NgxFixedFooterDirective, isStandalone: true, selector: "[ngxFixedFooter]", inputs: { containerSelector: "containerSelector", cssAttribute: "cssAttribute" }, usesOnChanges: true, ngImport: i0 }); }
96
104
  }
97
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: NgxFixedFooterDirective, decorators: [{
105
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: NgxFixedFooterDirective, decorators: [{
98
106
  type: Directive,
99
107
  args: [{
100
- selector: '[ngxFixedFooter]'
108
+ selector: '[ngxFixedFooter]',
109
+ standalone: true
101
110
  }]
102
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
111
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
103
112
  type: Inject,
104
113
  args: [DOCUMENT]
105
- }] }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: NgxFixedFooterOptionsService }]; }, propDecorators: { containerSelector: [{
114
+ }] }, { type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { containerSelector: [{
106
115
  type: Input
107
116
  }], cssAttribute: [{
108
117
  type: Input
109
118
  }] } });
110
119
 
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
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: NgxFixedFooterModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
143
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.0", ngImport: i0, type: NgxFixedFooterModule, declarations: [NgxFixedFooterDirective], exports: [NgxFixedFooterDirective] }); }
144
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: NgxFixedFooterModule, providers: [NgxFixedFooterOptionsService] }); }
145
- }
146
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: NgxFixedFooterModule, decorators: [{
147
- type: NgModule,
148
- args: [{
149
- declarations: [NgxFixedFooterDirective],
150
- exports: [NgxFixedFooterDirective],
151
- providers: [NgxFixedFooterOptionsService]
152
- }]
153
- }] });
154
-
155
120
  /*
156
121
  * Public API Surface of ngx-fixed-footer
157
122
  */
@@ -160,5 +125,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImpor
160
125
  * Generated bundle index. Do not edit.
161
126
  */
162
127
 
163
- export { DEFAULT_CONTAINER_SELECTOR, DEFAULT_CSS_ATTRIBUTE, FOR_ROOT_OPTIONS_TOKEN, NgxFixedFooterDirective, NgxFixedFooterModule, NgxFixedFooterOptionsService };
128
+ export { APP_FIXED_FOOTER_OPTIONS_TOKEN, DEFAULT_CONTAINER_SELECTOR, DEFAULT_CSS_ATTRIBUTE, DEFAULT_FIXED_FOOTER_OPTIONS, NgxFixedFooterDirective, provideFixedFooter };
164
129
  //# sourceMappingURL=ngx-fixed-footer.mjs.map
@@ -1 +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":["i1.NgxFixedFooterOptionsService"],"mappings":"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"}
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.provider.ts","../../../projects/ngx-fixed-footer/src/lib/ngx-fixed-footer.directive.ts","../../../projects/ngx-fixed-footer/src/public-api.ts","../../../projects/ngx-fixed-footer/src/ngx-fixed-footer.ts"],"sourcesContent":["import { NgxFixedFooterOptions } from './ngx-fixed-footer.interface';\n\nexport const DEFAULT_CSS_ATTRIBUTE = 'padding';\nexport const DEFAULT_CONTAINER_SELECTOR = '[role=\"main\"]';\nexport const DEFAULT_FIXED_FOOTER_OPTIONS: NgxFixedFooterOptions = {\n containerSelector: DEFAULT_CONTAINER_SELECTOR,\n cssAttribute: DEFAULT_CSS_ATTRIBUTE\n};\n","import { InjectionToken, Provider } from '@angular/core';\nimport { DEFAULT_CONTAINER_SELECTOR, DEFAULT_CSS_ATTRIBUTE } from './ngx-fixed-footer.constants';\nimport { NgxFixedFooterOptions } from './ngx-fixed-footer.interface';\n\nexport const APP_FIXED_FOOTER_OPTIONS_TOKEN = new InjectionToken<NgxFixedFooterOptions>('[ngxFixedFooter] Options');\n\nexport const provideFixedFooter = (options: NgxFixedFooterOptions): Provider => {\n return {\n provide: APP_FIXED_FOOTER_OPTIONS_TOKEN,\n useValue: {\n cssAttribute: options.cssAttribute || DEFAULT_CSS_ATTRIBUTE,\n containerSelector: options.containerSelector || DEFAULT_CONTAINER_SELECTOR\n }\n };\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 inject\n} from '@angular/core';\nimport { DEFAULT_FIXED_FOOTER_OPTIONS } from './ngx-fixed-footer.constants';\nimport { NgxFixedFooterCssAttribute, NgxFixedFooterOptions } from './ngx-fixed-footer.interface';\nimport { APP_FIXED_FOOTER_OPTIONS_TOKEN } from './ngx-fixed-footer.provider';\n\n@Directive({\n selector: '[ngxFixedFooter]',\n standalone: true\n})\nexport class NgxFixedFooterDirective implements OnDestroy, OnChanges, OnInit {\n private options: NgxFixedFooterOptions =\n inject(APP_FIXED_FOOTER_OPTIONS_TOKEN, { optional: true }) || DEFAULT_FIXED_FOOTER_OPTIONS;\n private offsetHeight: number = undefined;\n private resizeObserver: ResizeObserver;\n\n @Input() public containerSelector: string = this.options.containerSelector;\n @Input() public cssAttribute: NgxFixedFooterCssAttribute = this.options.cssAttribute;\n\n constructor(\n @Inject(DOCUMENT) private document: any,\n private el: ElementRef,\n private render: Renderer2\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?.cssAttribute?.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 if (!container) {\n throw new Error(`Cannot removeStyle to undefined container`);\n }\n this.render.setStyle(container, `${cssAttribute}-bottom`, '');\n }\n\n private setStyle(container: HTMLElement, cssAttribute: NgxFixedFooterCssAttribute, height: number): void {\n if (!container) {\n throw new Error(`Cannot setStyle to undefined container`);\n }\n this.render.setStyle(container, `${cssAttribute}-bottom`, height === 0 ? '' : `${height}px`);\n }\n\n private get container(): HTMLElement {\n const selector = this.containerSelector || this.options.containerSelector;\n const container = this.document.body.querySelector(selector);\n if (!container) {\n console.warn(`Container '${selector}' was not found`);\n }\n return container;\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","/*\n * Public API Surface of ngx-fixed-footer\n */\n\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.provider';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1,2 +1,4 @@
1
+ import { NgxFixedFooterOptions } from './ngx-fixed-footer.interface';
1
2
  export declare const DEFAULT_CSS_ATTRIBUTE = "padding";
2
3
  export declare const DEFAULT_CONTAINER_SELECTOR = "[role=\"main\"]";
4
+ export declare const DEFAULT_FIXED_FOOTER_OPTIONS: NgxFixedFooterOptions;
@@ -1,5 +1,4 @@
1
1
  import { ElementRef, OnChanges, OnDestroy, OnInit, Renderer2, SimpleChanges } from '@angular/core';
2
- import { NgxFixedFooterOptionsService } from './ngx-fixed-footer-options.service';
3
2
  import { NgxFixedFooterCssAttribute } from './ngx-fixed-footer.interface';
4
3
  import * as i0 from "@angular/core";
5
4
  export declare class NgxFixedFooterDirective implements OnDestroy, OnChanges, OnInit {
@@ -7,11 +6,11 @@ export declare class NgxFixedFooterDirective implements OnDestroy, OnChanges, On
7
6
  private el;
8
7
  private render;
9
8
  private options;
10
- containerSelector: string;
11
- cssAttribute: NgxFixedFooterCssAttribute;
12
9
  private offsetHeight;
13
10
  private resizeObserver;
14
- constructor(document: any, el: ElementRef, render: Renderer2, options: NgxFixedFooterOptionsService);
11
+ containerSelector: string;
12
+ cssAttribute: NgxFixedFooterCssAttribute;
13
+ constructor(document: any, el: ElementRef, render: Renderer2);
15
14
  ngOnInit(): void;
16
15
  ngOnChanges(changes: SimpleChanges): void;
17
16
  ngOnDestroy(): void;
@@ -22,5 +21,5 @@ export declare class NgxFixedFooterDirective implements OnDestroy, OnChanges, On
22
21
  private get html();
23
22
  private get hasResizeObserver();
24
23
  static ɵfac: i0.ɵɵFactoryDeclaration<NgxFixedFooterDirective, never>;
25
- static ɵdir: i0.ɵɵDirectiveDeclaration<NgxFixedFooterDirective, "[ngxFixedFooter]", never, { "containerSelector": { "alias": "containerSelector"; "required": false; }; "cssAttribute": { "alias": "cssAttribute"; "required": false; }; }, {}, never, never, false, never>;
24
+ static ɵdir: i0.ɵɵDirectiveDeclaration<NgxFixedFooterDirective, "[ngxFixedFooter]", never, { "containerSelector": { "alias": "containerSelector"; "required": false; }; "cssAttribute": { "alias": "cssAttribute"; "required": false; }; }, {}, never, never, true, never>;
26
25
  }
@@ -0,0 +1,4 @@
1
+ import { InjectionToken, Provider } from '@angular/core';
2
+ import { NgxFixedFooterOptions } from './ngx-fixed-footer.interface';
3
+ export declare const APP_FIXED_FOOTER_OPTIONS_TOKEN: InjectionToken<NgxFixedFooterOptions>;
4
+ export declare const provideFixedFooter: (options: NgxFixedFooterOptions) => Provider;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-fixed-footer",
3
- "version": "1.1.0",
3
+ "version": "2.0.0",
4
4
  "author": {
5
5
  "name": "Dominik Hladík",
6
6
  "email": "dominik.hladik@seznam.cz",
package/public-api.d.ts CHANGED
@@ -1,5 +1,4 @@
1
- export * from './lib/ngx-fixed-footer-options.service';
2
1
  export * from './lib/ngx-fixed-footer.constants';
3
2
  export * from './lib/ngx-fixed-footer.directive';
4
3
  export * from './lib/ngx-fixed-footer.interface';
5
- export * from './lib/ngx-fixed-footer.module';
4
+ export * from './lib/ngx-fixed-footer.provider';
@@ -1,14 +0,0 @@
1
- import { NgxFixedFooterOptionsService } from './ngx-fixed-footer-options.service';
2
- export const ngxFixedFooterOptionsFactory = (options) => {
3
- const ngxFixedFooterOptionsService = new NgxFixedFooterOptionsService();
4
- if (options) {
5
- if (options.containerSelector) {
6
- ngxFixedFooterOptionsService.containerSelector = options.containerSelector;
7
- }
8
- if (options.cssAttribute) {
9
- ngxFixedFooterOptionsService.cssAttribute = options.cssAttribute;
10
- }
11
- }
12
- return ngxFixedFooterOptionsService;
13
- };
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWZpeGVkLWZvb3Rlci1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWZpeGVkLWZvb3Rlci9zcmMvbGliL25neC1maXhlZC1mb290ZXItZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUdsRixNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxDQUFDLE9BQStCLEVBQWdDLEVBQUU7SUFDNUcsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLDRCQUE0QixFQUFFLENBQUM7SUFDeEUsSUFBSSxPQUFPLEVBQUU7UUFDWCxJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRTtZQUM3Qiw0QkFBNEIsQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUM7U0FDNUU7UUFDRCxJQUFJLE9BQU8sQ0FBQyxZQUFZLEVBQUU7WUFDeEIsNEJBQTRCLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUM7U0FDbEU7S0FDRjtJQUNELE9BQU8sNEJBQTRCLENBQUM7QUFDdEMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmd4Rml4ZWRGb290ZXJPcHRpb25zU2VydmljZSB9IGZyb20gJy4vbmd4LWZpeGVkLWZvb3Rlci1vcHRpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmd4Rml4ZWRGb290ZXJPcHRpb25zIH0gZnJvbSAnLi9uZ3gtZml4ZWQtZm9vdGVyLmludGVyZmFjZSc7XG5cbmV4cG9ydCBjb25zdCBuZ3hGaXhlZEZvb3Rlck9wdGlvbnNGYWN0b3J5ID0gKG9wdGlvbnM/OiBOZ3hGaXhlZEZvb3Rlck9wdGlvbnMpOiBOZ3hGaXhlZEZvb3Rlck9wdGlvbnNTZXJ2aWNlID0+IHtcbiAgY29uc3Qgbmd4Rml4ZWRGb290ZXJPcHRpb25zU2VydmljZSA9IG5ldyBOZ3hGaXhlZEZvb3Rlck9wdGlvbnNTZXJ2aWNlKCk7XG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuY29udGFpbmVyU2VsZWN0b3IpIHtcbiAgICAgIG5neEZpeGVkRm9vdGVyT3B0aW9uc1NlcnZpY2UuY29udGFpbmVyU2VsZWN0b3IgPSBvcHRpb25zLmNvbnRhaW5lclNlbGVjdG9yO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5jc3NBdHRyaWJ1dGUpIHtcbiAgICAgIG5neEZpeGVkRm9vdGVyT3B0aW9uc1NlcnZpY2UuY3NzQXR0cmlidXRlID0gb3B0aW9ucy5jc3NBdHRyaWJ1dGU7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZ3hGaXhlZEZvb3Rlck9wdGlvbnNTZXJ2aWNlO1xufTtcbiJdfQ==
@@ -1,21 +0,0 @@
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
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: NgxFixedFooterOptionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
16
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: NgxFixedFooterOptionsService }); }
17
- }
18
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: NgxFixedFooterOptionsService, decorators: [{
19
- type: Injectable
20
- }] });
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWZpeGVkLWZvb3Rlci1vcHRpb25zLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZml4ZWQtZm9vdGVyL3NyYy9saWIvbmd4LWZpeGVkLWZvb3Rlci1vcHRpb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7QUFJakcsTUFBTSxPQUFPLDRCQUE0QjtJQUR6QztRQUVFOztXQUVHO1FBQ0ksaUJBQVksR0FBK0IscUJBQXFCLENBQUM7UUFFeEU7O1dBRUc7UUFDSSxzQkFBaUIsR0FBVywwQkFBMEIsQ0FBQztLQUMvRDs4R0FWWSw0QkFBNEI7a0hBQTVCLDRCQUE0Qjs7MkZBQTVCLDRCQUE0QjtrQkFEeEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERFRkFVTFRfQ09OVEFJTkVSX1NFTEVDVE9SLCBERUZBVUxUX0NTU19BVFRSSUJVVEUgfSBmcm9tICcuL25neC1maXhlZC1mb290ZXIuY29uc3RhbnRzJztcbmltcG9ydCB7IE5neEZpeGVkRm9vdGVyQ3NzQXR0cmlidXRlIH0gZnJvbSAnLi9uZ3gtZml4ZWQtZm9vdGVyLmludGVyZmFjZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOZ3hGaXhlZEZvb3Rlck9wdGlvbnNTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIEByZXR1cm5zIENzcyBhdHRyaWJ1dGUgb2YgSFRNTCBlbGVtZW50IHdoaWNoIGdldHMgc3R5bGUuIEl0IG1lYW5zIG1hcmdpbiBvciBwYWRkaW5nXG4gICAqL1xuICBwdWJsaWMgY3NzQXR0cmlidXRlOiBOZ3hGaXhlZEZvb3RlckNzc0F0dHJpYnV0ZSA9IERFRkFVTFRfQ1NTX0FUVFJJQlVURTtcblxuICAvKipcbiAgICogQHJldHVybnMgQ3NzIHNlbGVjdG9yIG9mIEhUTUwgZWxlbWVudCB3aGljaCBnZXRzIGV4dHJhIG1hcmdpbiBvciBwYWRkaW5nXG4gICAqL1xuICBwdWJsaWMgY29udGFpbmVyU2VsZWN0b3I6IHN0cmluZyA9IERFRkFVTFRfQ09OVEFJTkVSX1NFTEVDVE9SO1xufVxuIl19
@@ -1,36 +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
- 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
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: NgxFixedFooterModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
25
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.0", ngImport: i0, type: NgxFixedFooterModule, declarations: [NgxFixedFooterDirective], exports: [NgxFixedFooterDirective] }); }
26
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: NgxFixedFooterModule, providers: [NgxFixedFooterOptionsService] }); }
27
- }
28
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWZpeGVkLWZvb3Rlci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZml4ZWQtZm9vdGVyL3NyYy9saWIvbmd4LWZpeGVkLWZvb3Rlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBdUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDOztBQUd2RSxNQUFNLENBQUMsSUFBSSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FDcEQsK0NBQStDLENBQ2hELENBQUM7QUFPRixNQUFNLE9BQU8sb0JBQW9CO0lBQ3hCLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBK0I7UUFDbkQsT0FBTztZQUNMLFFBQVEsRUFBRSxvQkFBb0I7WUFDOUIsU0FBUyxFQUFFO2dCQUNUO29CQUNFLE9BQU8sRUFBRSxzQkFBc0I7b0JBQy9CLFFBQVEsRUFBRSxPQUFPO2lCQUNsQjtnQkFDRDtvQkFDRSxPQUFPLEVBQUUsNEJBQTRCO29CQUNyQyxVQUFVLEVBQUUsNEJBQTRCO29CQUN4QyxJQUFJLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztpQkFDL0I7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDOzhHQWhCVSxvQkFBb0I7K0dBQXBCLG9CQUFvQixpQkFKaEIsdUJBQXVCLGFBQzVCLHVCQUF1QjsrR0FHdEIsb0JBQW9CLGFBRnBCLENBQUMsNEJBQTRCLENBQUM7OzJGQUU5QixvQkFBb0I7a0JBTGhDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsdUJBQXVCLENBQUM7b0JBQ3ZDLE9BQU8sRUFBRSxDQUFDLHVCQUF1QixDQUFDO29CQUNsQyxTQUFTLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQztpQkFDMUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG5neEZpeGVkRm9vdGVyT3B0aW9uc0ZhY3RvcnkgfSBmcm9tICcuL25neC1maXhlZC1mb290ZXItZmFjdG9yeSc7XG5pbXBvcnQgeyBOZ3hGaXhlZEZvb3Rlck9wdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi9uZ3gtZml4ZWQtZm9vdGVyLW9wdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBOZ3hGaXhlZEZvb3RlckRpcmVjdGl2ZSB9IGZyb20gJy4vbmd4LWZpeGVkLWZvb3Rlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTmd4Rml4ZWRGb290ZXJPcHRpb25zIH0gZnJvbSAnLi9uZ3gtZml4ZWQtZm9vdGVyLmludGVyZmFjZSc7XG5cbmV4cG9ydCBsZXQgRk9SX1JPT1RfT1BUSU9OU19UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxOZ3hGaXhlZEZvb3Rlck9wdGlvbnM+KFxuICAnZm9yUm9vdCgpIE5neEN1dE9wdGlvbnNTZXJ2aWNlIGNvbmZpZ3VyYXRpb24uJ1xuKTtcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbTmd4Rml4ZWRGb290ZXJEaXJlY3RpdmVdLFxuICBleHBvcnRzOiBbTmd4Rml4ZWRGb290ZXJEaXJlY3RpdmVdLFxuICBwcm92aWRlcnM6IFtOZ3hGaXhlZEZvb3Rlck9wdGlvbnNTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3hGaXhlZEZvb3Rlck1vZHVsZSB7XG4gIHB1YmxpYyBzdGF0aWMgZm9yUm9vdChvcHRpb25zPzogTmd4Rml4ZWRGb290ZXJPcHRpb25zKTogTW9kdWxlV2l0aFByb3ZpZGVyczxOZ3hGaXhlZEZvb3Rlck1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogTmd4Rml4ZWRGb290ZXJNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IEZPUl9ST09UX09QVElPTlNfVE9LRU4sXG4gICAgICAgICAgdXNlVmFsdWU6IG9wdGlvbnNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IE5neEZpeGVkRm9vdGVyT3B0aW9uc1NlcnZpY2UsXG4gICAgICAgICAgdXNlRmFjdG9yeTogbmd4Rml4ZWRGb290ZXJPcHRpb25zRmFjdG9yeSxcbiAgICAgICAgICBkZXBzOiBbRk9SX1JPT1RfT1BUSU9OU19UT0tFTl1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -1,3 +0,0 @@
1
- import { NgxFixedFooterOptionsService } from './ngx-fixed-footer-options.service';
2
- import { NgxFixedFooterOptions } from './ngx-fixed-footer.interface';
3
- export declare const ngxFixedFooterOptionsFactory: (options?: NgxFixedFooterOptions) => NgxFixedFooterOptionsService;
@@ -1,14 +0,0 @@
1
- import { NgxFixedFooterCssAttribute } from './ngx-fixed-footer.interface';
2
- import * as i0 from "@angular/core";
3
- export declare class NgxFixedFooterOptionsService {
4
- /**
5
- * @returns Css attribute of HTML element which gets style. It means margin or padding
6
- */
7
- cssAttribute: NgxFixedFooterCssAttribute;
8
- /**
9
- * @returns Css selector of HTML element which gets extra margin or padding
10
- */
11
- containerSelector: string;
12
- static ɵfac: i0.ɵɵFactoryDeclaration<NgxFixedFooterOptionsService, never>;
13
- static ɵprov: i0.ɵɵInjectableDeclaration<NgxFixedFooterOptionsService>;
14
- }
@@ -1,11 +0,0 @@
1
- import { InjectionToken, ModuleWithProviders } from '@angular/core';
2
- import { NgxFixedFooterOptions } from './ngx-fixed-footer.interface';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "./ngx-fixed-footer.directive";
5
- export declare let FOR_ROOT_OPTIONS_TOKEN: InjectionToken<NgxFixedFooterOptions>;
6
- export declare class NgxFixedFooterModule {
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>;
11
- }