mapa-library-ui 0.0.23 → 0.0.24

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.
Files changed (37) hide show
  1. package/esm2020/src/lib/components/capability/lib/components/filters/src/filters.component.mjs +2 -2
  2. package/esm2020/src/lib/components/filters/lib/components/filters/src/filters.component.mjs +2 -2
  3. package/esm2020/src/lib/components/table/lib/components/table/public-api.mjs +6 -0
  4. package/esm2020/src/lib/components/table/lib/components/table/src/paginator_customization.mjs +21 -0
  5. package/esm2020/src/lib/components/table/lib/components/table/src/table.component.mjs +121 -0
  6. package/esm2020/src/lib/components/table/lib/components/table/src/table.module.mjs +59 -0
  7. package/esm2020/src/lib/components/table/lib/core/directives/custom-paginator-legacy.directive.mjs +227 -0
  8. package/esm2020/src/lib/components/table/lib/core/directives/custom-paginator.directive.mjs +183 -0
  9. package/esm2020/src/lib/components/table/mapa-library-ui-src-lib-components-table.mjs +2 -2
  10. package/esm2020/src/lib/components/table/table.mjs +7 -0
  11. package/fesm2015/mapa-library-ui-src-lib-components-capability.mjs +2 -2
  12. package/fesm2015/mapa-library-ui-src-lib-components-capability.mjs.map +1 -1
  13. package/fesm2015/mapa-library-ui-src-lib-components-filters.mjs +2 -2
  14. package/fesm2015/mapa-library-ui-src-lib-components-filters.mjs.map +1 -1
  15. package/fesm2015/mapa-library-ui-src-lib-components-table.mjs +470 -38
  16. package/fesm2015/mapa-library-ui-src-lib-components-table.mjs.map +1 -1
  17. package/fesm2020/mapa-library-ui-src-lib-components-capability.mjs +2 -2
  18. package/fesm2020/mapa-library-ui-src-lib-components-capability.mjs.map +1 -1
  19. package/fesm2020/mapa-library-ui-src-lib-components-filters.mjs +2 -2
  20. package/fesm2020/mapa-library-ui-src-lib-components-filters.mjs.map +1 -1
  21. package/fesm2020/mapa-library-ui-src-lib-components-table.mjs +466 -38
  22. package/fesm2020/mapa-library-ui-src-lib-components-table.mjs.map +1 -1
  23. package/mapa-library-ui-0.0.24.tgz +0 -0
  24. package/package.json +1 -1
  25. package/src/lib/components/table/index.d.ts +1 -1
  26. package/src/lib/components/table/{src → lib/components/table/src}/table.component.d.ts +14 -8
  27. package/src/lib/components/table/{src → lib/components/table/src}/table.module.d.ts +4 -2
  28. package/src/lib/components/table/lib/core/directives/custom-paginator-legacy.directive.d.ts +27 -0
  29. package/src/lib/components/table/lib/core/directives/custom-paginator.directive.d.ts +33 -0
  30. package/src/lib/components/table/table.d.ts +3 -0
  31. package/esm2020/src/lib/components/table/public-api.mjs +0 -6
  32. package/esm2020/src/lib/components/table/src/paginator_customization.mjs +0 -9
  33. package/esm2020/src/lib/components/table/src/table.component.mjs +0 -120
  34. package/esm2020/src/lib/components/table/src/table.module.mjs +0 -49
  35. package/mapa-library-ui-0.0.23.tgz +0 -0
  36. /package/src/lib/components/table/{public-api.d.ts → lib/components/table/public-api.d.ts} +0 -0
  37. /package/src/lib/components/table/{src → lib/components/table/src}/paginator_customization.d.ts +0 -0
@@ -0,0 +1,227 @@
1
+ import { Directive, Host, Optional, Self, } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/material/paginator";
4
+ export class PaginatorLegacyDirective {
5
+ constructor(matPag, ViewContainer, renderer) {
6
+ this.matPag = matPag;
7
+ this.ViewContainer = ViewContainer;
8
+ this.renderer = renderer;
9
+ this.buttons = [];
10
+ this.buildPageNumbers = () => {
11
+ let dots;
12
+ let page;
13
+ let pageDifference;
14
+ let startIndex;
15
+ let totalPages;
16
+ totalPages = this.matPag.getNumberOfPages();
17
+ // Container div with paginator elements
18
+ const actionContainer = this.ViewContainer.element.nativeElement.querySelector('div.mat-paginator-range-actions');
19
+ // Button that triggers the next page action
20
+ const nextPageNode = this.ViewContainer.element.nativeElement.querySelector('button.mat-paginator-navigation-next');
21
+ // Label showing the page range
22
+ const pageRange = this.ViewContainer.element.nativeElement.querySelector('div.mat-paginator-range-label');
23
+ let prevButtonCount = this.buttons.length;
24
+ // Remove buttons before creating new ones
25
+ if (prevButtonCount > 0) {
26
+ this.buttons.forEach((button) => {
27
+ this.renderer.removeChild(actionContainer, button);
28
+ });
29
+ // Empty state array
30
+ prevButtonCount = 0;
31
+ }
32
+ this.renderer.addClass(pageRange, 'custom-paginator-counter');
33
+ this.renderer.addClass(actionContainer, 'custom-paginator-container');
34
+ // Initialize next page and last page buttons
35
+ if (prevButtonCount === 0) {
36
+ const nodeArray = actionContainer.childNodes;
37
+ setTimeout(() => {
38
+ for (const node of nodeArray) {
39
+ if (node.nodeName === 'BUTTON') {
40
+ // Next Button styles
41
+ if (node.innerHTML.length > 100 && node.disabled) {
42
+ this.renderer.addClass(node, 'custom-paginator-arrow-disabled');
43
+ this.renderer.removeClass(node, 'custom-paginator-arrow-enabled');
44
+ }
45
+ else if (node.innerHTML.length > 100 && !node.disabled) {
46
+ this.renderer.addClass(node, 'custom-paginator-arrow-enabled');
47
+ this.renderer.removeClass(node, 'custom-paginator-arrow-disabled');
48
+ }
49
+ }
50
+ }
51
+ });
52
+ }
53
+ dots = [false, false];
54
+ if (totalPages > 0) {
55
+ this.renderer.insertBefore(actionContainer, this.createButton('0', this.matPag.pageIndex), nextPageNode);
56
+ }
57
+ page = this.showTotalPages + 2;
58
+ pageDifference = totalPages - page;
59
+ startIndex = Math.max(this.currentPage - this.showTotalPages - 2, 1);
60
+ for (let index = startIndex; index < totalPages - 1; index = index + 1) {
61
+ if ((index < page && this.currentPage <= this.showTotalPages) ||
62
+ (index >= this.rangeStart && index <= this.rangeEnd) ||
63
+ (this.currentPage > pageDifference && index >= pageDifference) ||
64
+ totalPages < this.showTotalPages + page) {
65
+ this.renderer.insertBefore(actionContainer, this.createButton(`${index}`, this.matPag.pageIndex), nextPageNode);
66
+ }
67
+ else {
68
+ if (index > this.rangeEnd && !dots[0]) {
69
+ this.renderer.insertBefore(actionContainer, this.createButton(this.pageGapTxt[0], this.matPag.pageIndex), nextPageNode);
70
+ dots[0] = true;
71
+ break;
72
+ }
73
+ if (index < this.rangeEnd && !dots[1]) {
74
+ this.renderer.insertBefore(actionContainer, this.createButton(this.pageGapTxt[1], this.matPag.pageIndex), nextPageNode);
75
+ dots[1] = true;
76
+ }
77
+ }
78
+ }
79
+ if (totalPages > 1) {
80
+ this.renderer.insertBefore(actionContainer, this.createButton(`${totalPages - 1}`, this.matPag.pageIndex), nextPageNode);
81
+ }
82
+ };
83
+ this.currentPage = 1;
84
+ this.pageGapTxt = ['•••', '---'];
85
+ this.showTotalPages = 2;
86
+ this.checkPage = [0, 0, 0];
87
+ // Display custom range label text
88
+ this.matPag._intl.getRangeLabel = (page, pageSize, length) => {
89
+ const startIndex = page * pageSize;
90
+ const endIndex = startIndex < length
91
+ ? Math.min(startIndex + pageSize, length)
92
+ : startIndex + pageSize;
93
+ if (length === 0) {
94
+ return 'Mostrando 0 – 0 de 0 item';
95
+ }
96
+ if (length === 1) {
97
+ return ('Mostrando ' +
98
+ (startIndex + 1) +
99
+ ' – ' +
100
+ endIndex +
101
+ ' de ' +
102
+ length +
103
+ ' item');
104
+ }
105
+ else {
106
+ return ('Mostrando ' +
107
+ (startIndex + 1) +
108
+ ' – ' +
109
+ endIndex +
110
+ ' de ' +
111
+ length +
112
+ ' itens');
113
+ }
114
+ };
115
+ // Subscribe to rerender buttons when next page and last page button is used
116
+ this.matPag.page.subscribe((paginator) => {
117
+ this.currentPage = paginator.pageIndex;
118
+ this.matPag.pageIndex = paginator.pageIndex;
119
+ this.initPageRange();
120
+ });
121
+ this.matPag._intl.itemsPerPageLabel = 'Itens por página';
122
+ const paginatorIntl = this.matPag._intl;
123
+ paginatorIntl.nextPageLabel = '';
124
+ paginatorIntl.previousPageLabel = '';
125
+ }
126
+ ngDoCheck() {
127
+ // Reset paginator if the pageSize, pageIndex, length changes
128
+ if (this.matPag?.length !== this.checkPage[0] ||
129
+ this.matPag?.pageSize !== this.checkPage[1] ||
130
+ this.matPag?.pageIndex !== this.checkPage[2]) {
131
+ const pageCount = this.matPag.getNumberOfPages();
132
+ if (this.currentPage > pageCount && pageCount !== 0) {
133
+ this.currentPage = 1;
134
+ this.matPag.pageIndex = 0;
135
+ }
136
+ this.currentPage = this.matPag.pageIndex;
137
+ this.initPageRange();
138
+ this.checkPage = [
139
+ this.matPag.length,
140
+ this.matPag.pageSize,
141
+ this.matPag.pageIndex,
142
+ ];
143
+ }
144
+ }
145
+ createButton(index, pageIndex) {
146
+ const linkBtn = this.renderer.createElement('button');
147
+ this.renderer.setAttribute(linkBtn, 'class', 'custom-paginator-page');
148
+ this.renderer.addClass(linkBtn, 'custom-paginator-page-enabled');
149
+ if (index === this.pageGapTxt[0] || index === this.pageGapTxt[1]) {
150
+ this.renderer.addClass(linkBtn, 'custom-paginator-arrow-enabled');
151
+ }
152
+ const pagingTxt = isNaN(+index) ? this.pageGapTxt[0] : +index + 1;
153
+ const text = this.renderer.createText(pagingTxt + '');
154
+ this.renderer.addClass(linkBtn, 'mat-custom-page');
155
+ switch (index) {
156
+ case `${pageIndex}`:
157
+ this.renderer.setAttribute(linkBtn, 'disabled', 'disabled');
158
+ this.renderer.removeClass(linkBtn, 'custom-paginator-page-enabled');
159
+ this.renderer.addClass(linkBtn, 'custom-paginator-page-disabled');
160
+ break;
161
+ case this.pageGapTxt[0]:
162
+ this.renderer.listen(linkBtn, 'click', () => {
163
+ this.switchPage(this.currentPage < this.showTotalPages + 1
164
+ ? this.showTotalPages + 2
165
+ : this.currentPage + this.showTotalPages - 1);
166
+ });
167
+ break;
168
+ case this.pageGapTxt[1]:
169
+ this.renderer.listen(linkBtn, 'click', () => {
170
+ this.switchPage(this.currentPage >
171
+ this.matPag.getNumberOfPages() - this.showTotalPages - 2
172
+ ? this.matPag.getNumberOfPages() - this.showTotalPages - 3
173
+ : this.currentPage - this.showTotalPages + 1);
174
+ });
175
+ break;
176
+ default:
177
+ this.renderer.listen(linkBtn, 'click', () => {
178
+ this.switchPage(+index);
179
+ });
180
+ break;
181
+ }
182
+ this.renderer.appendChild(linkBtn, text);
183
+ // Add button to private array for state
184
+ this.buttons.push(linkBtn);
185
+ return linkBtn;
186
+ }
187
+ /**
188
+ * @description calculates the button range based on class input parameters and based on current page index value.
189
+ */
190
+ initPageRange() {
191
+ this.rangeStart = this.currentPage - this.showTotalPages / 2;
192
+ this.rangeEnd = this.currentPage + this.showTotalPages / 2;
193
+ this.buildPageNumbers();
194
+ }
195
+ switchPage(index) {
196
+ this.matPag.pageIndex = index;
197
+ this.matPag.page.emit({
198
+ previousPageIndex: this.currentPage,
199
+ pageIndex: index,
200
+ pageSize: this.matPag.pageSize,
201
+ length: this.matPag.length,
202
+ });
203
+ this.currentPage = index;
204
+ this.initPageRange();
205
+ }
206
+ ngAfterViewInit() {
207
+ this.rangeStart = 0;
208
+ this.rangeEnd = this.showTotalPages - 1;
209
+ this.initPageRange();
210
+ }
211
+ }
212
+ PaginatorLegacyDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PaginatorLegacyDirective, deps: [{ token: i1.MatPaginator, host: true, optional: true, self: true }, { token: i0.ViewContainerRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
213
+ PaginatorLegacyDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: PaginatorLegacyDirective, isStandalone: true, selector: "[appStylePaginator]", ngImport: i0 });
214
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PaginatorLegacyDirective, decorators: [{
215
+ type: Directive,
216
+ args: [{
217
+ selector: '[appStylePaginator]',
218
+ standalone: true,
219
+ }]
220
+ }], ctorParameters: function () { return [{ type: i1.MatPaginator, decorators: [{
221
+ type: Host
222
+ }, {
223
+ type: Self
224
+ }, {
225
+ type: Optional
226
+ }] }, { type: i0.ViewContainerRef }, { type: i0.Renderer2 }]; } });
227
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXBhZ2luYXRvci1sZWdhY3kuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWFwYS1saWJyYXJ5LXVpL3NyYy9saWIvY29yZS9kaXJlY3RpdmVzL2N1c3RvbS1wYWdpbmF0b3ItbGVnYWN5LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULElBQUksRUFDSixRQUFRLEVBRVIsSUFBSSxHQUVMLE1BQU0sZUFBZSxDQUFDOzs7QUFRdkIsTUFBTSxPQUFPLHdCQUF3QjtJQVNuQyxZQUMrQyxNQUFvQixFQUNoRCxhQUErQixFQUMvQixRQUFtQjtRQUZTLFdBQU0sR0FBTixNQUFNLENBQWM7UUFDaEQsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQy9CLGFBQVEsR0FBUixRQUFRLENBQVc7UUFQOUIsWUFBTyxHQUFnQixFQUFFLENBQUM7UUFtRjFCLHFCQUFnQixHQUFHLEdBQUcsRUFBRTtZQUM5QixJQUFJLElBQWUsQ0FBQztZQUNwQixJQUFJLElBQVksQ0FBQztZQUNqQixJQUFJLGNBQXNCLENBQUM7WUFDM0IsSUFBSSxVQUFrQixDQUFDO1lBQ3ZCLElBQUksVUFBa0IsQ0FBQztZQUN2QixVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzVDLHdDQUF3QztZQUN4QyxNQUFNLGVBQWUsR0FDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FDcEQsaUNBQWlDLENBQ2xDLENBQUM7WUFDSiw0Q0FBNEM7WUFDNUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FDekUsc0NBQXNDLENBQ3ZDLENBQUM7WUFDRiwrQkFBK0I7WUFDL0IsTUFBTSxTQUFTLEdBQUcs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LFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxlQUFlO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7O3NIQWpSVSx3QkFBd0I7MEdBQXhCLHdCQUF3Qjs0RkFBeEIsd0JBQXdCO2tCQUpwQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs7MEJBV0ksSUFBSTs7MEJBQUksSUFBSTs7MEJBQUksUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIERpcmVjdGl2ZSxcbiAgRG9DaGVjayxcbiAgSG9zdCxcbiAgT3B0aW9uYWwsXG4gIFJlbmRlcmVyMixcbiAgU2VsZixcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IsIFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBNYXRCdXR0b24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYXBwU3R5bGVQYWdpbmF0b3JdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgUGFnaW5hdG9yTGVnYWN5RGlyZWN0aXZlIGltcGxlbWVudHMgRG9DaGVjaywgQWZ0ZXJWaWV3SW5pdCB7XG4gIHByaXZhdGUgY3VycmVudFBhZ2U6IG51bWJlcjtcbiAgcHJpdmF0ZSBwYWdlR2FwVHh0OiBzdHJpbmdbXTtcbiAgcHJpdmF0ZSByYW5nZVN0YXJ0ITogbnVtYmVyO1xuICBwcml2YXRlIHJhbmdlRW5kITogbnVtYmVyO1xuICBwcml2YXRlIGJ1dHRvbnM6IE1hdEJ1dHRvbltdID0gW107XG4gIHByaXZhdGUgc2hvd1RvdGFsUGFnZXM6IG51bWJlcjtcbiAgcHJpdmF0ZSBjaGVja1BhZ2U6IG51bWJlcltdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBIb3N0KCkgQFNlbGYoKSBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IG1hdFBhZzogTWF0UGFnaW5hdG9yLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgVmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyOiBSZW5kZXJlcjJcbiAgKSB7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XG4gICAgdGhpcy5wYWdlR2FwVHh0ID0gWyfigKLigKLigKInLCAnLS0tJ107XG4gICAgdGhpcy5zaG93VG90YWxQYWdlcyA9IDI7XG4gICAgdGhpcy5jaGVja1BhZ2UgPSBbMCwgMCwgMF07XG4gICAgLy8gRGlzcGxheSBjdXN0b20gcmFuZ2UgbGFiZWwgdGV4dFxuICAgIHRoaXMubWF0UGFnLl9pbnRsLmdldFJhbmdlTGFiZWwgPSAoXG4gICAgICBwYWdlOiBudW1iZXIsXG4gICAgICBwYWdlU2l6ZTogbnVtYmVyLFxuICAgICAgbGVuZ3RoOiBudW1iZXJcbiAgICApOiBzdHJpbmcgPT4ge1xuICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IHBhZ2UgKiBwYWdlU2l6ZTtcbiAgICAgIGNvbnN0IGVuZEluZGV4ID1cbiAgICAgICAgc3RhcnRJbmRleCA8IGxlbmd0aFxuICAgICAgICAgID8gTWF0aC5taW4oc3RhcnRJbmRleCArIHBhZ2VTaXplLCBsZW5ndGgpXG4gICAgICAgICAgOiBzdGFydEluZGV4ICsgcGFnZVNpemU7XG4gICAgICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnTW9zdHJhbmRvIDAg4oCTIDAgZGUgMCBpdGVtJztcbiAgICAgIH1cbiAgICAgIGlmIChsZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAnTW9zdHJhbmRvICcgK1xuICAgICAgICAgIChzdGFydEluZGV4ICsgMSkgK1xuICAgICAgICAgICcg4oCTICcgK1xuICAgICAgICAgIGVuZEluZGV4ICtcbiAgICAgICAgICAnIGRlICcgK1xuICAgICAgICAgIGxlbmd0aCArXG4gICAgICAgICAgJyBpdGVtJ1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAnTW9zdHJhbmRvICcgK1xuICAgICAgICAgIChzdGFydEluZGV4ICsgMSkgK1xuICAgICAgICAgICcg4oCTICcgK1xuICAgICAgICAgIGVuZEluZGV4ICtcbiAgICAgICAgICAnIGRlICcgK1xuICAgICAgICAgIGxlbmd0aCArXG4gICAgICAgICAgJyBpdGVucydcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIC8vIFN1YnNjcmliZSB0byByZXJlbmRlciBidXR0b25zIHdoZW4gbmV4dCBwYWdlIGFuZCBsYXN0IHBhZ2UgYnV0dG9uIGlzIHVzZWRcbiAgICB0aGlzLm1hdFBhZy5wYWdlLnN1YnNjcmliZSgocGFnaW5hdG9yOiBQYWdlRXZlbnQpID0+IHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdpbmF0b3IucGFnZUluZGV4O1xuICAgICAgdGhpcy5tYXRQYWcucGFnZUluZGV4ID0gcGFnaW5hdG9yLnBhZ2VJbmRleDtcbiAgICAgIHRoaXMuaW5pdFBhZ2VSYW5nZSgpO1xuICAgIH0pO1xuICAgIHRoaXMubWF0UGFnLl9pbnRsLml0ZW1zUGVyUGFnZUxhYmVsID0gJ0l0ZW5zIHBvciBww6FnaW5hJztcbiAgICBjb25zdCBwYWdpbmF0b3JJbnRsID0gdGhpcy5tYXRQYWcuX2ludGw7XG4gICAgcGFnaW5hdG9ySW50bC5uZXh0UGFnZUxhYmVsID0gJyc7XG4gICAgcGFnaW5hdG9ySW50bC5wcmV2aW91c1BhZ2VMYWJlbCA9ICcnO1xuICB9XG5cbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIC8vIFJlc2V0IHBhZ2luYXRvciBpZiB0aGUgcGFnZVNpemUsIHBhZ2VJbmRleCwgbGVuZ3RoIGNoYW5nZXNcbiAgICBpZiAoXG4gICAgICB0aGlzLm1hdFBhZz8ubGVuZ3RoICE9PSB0aGlzLmNoZWNrUGFnZVswXSB8fFxuICAgICAgdGhpcy5tYXRQYWc/LnBhZ2VTaXplICE9PSB0aGlzLmNoZWNrUGFnZVsxXSB8fFxuICAgICAgdGhpcy5tYXRQYWc/LnBhZ2VJbmRleCAhPT0gdGhpcy5jaGVja1BhZ2VbMl1cbiAgICApIHtcbiAgICAgIGNvbnN0IHBhZ2VDb3VudCA9IHRoaXMubWF0UGFnLmdldE51bWJlck9mUGFnZXMoKTtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID4gcGFnZUNvdW50ICYmIHBhZ2VDb3VudCAhPT0gMCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcbiAgICAgICAgdGhpcy5tYXRQYWcucGFnZUluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLm1hdFBhZy5wYWdlSW5kZXg7XG4gICAgICB0aGlzLmluaXRQYWdlUmFuZ2UoKTtcbiAgICAgIHRoaXMuY2hlY2tQYWdlID0gW1xuICAgICAgICB0aGlzLm1hdFBhZy5sZW5ndGgsXG4gICAgICAgIHRoaXMubWF0UGFnLnBhZ2VTaXplLFxuICAgICAgICB0aGlzLm1hdFBhZy5wYWdlSW5kZXgsXG4gICAgICBdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQYWdlTnVtYmVycyA9ICgpID0+IHtcbiAgICBsZXQgZG90czogYm9vbGVhbltdO1xuICAgIGxldCBwYWdlOiBudW1iZXI7XG4gICAgbGV0IHBhZ2VEaWZmZXJlbmNlOiBudW1iZXI7XG4gICAgbGV0IHN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgICBsZXQgdG90YWxQYWdlczogbnVtYmVyO1xuICAgIHRvdGFsUGFnZXMgPSB0aGlzLm1hdFBhZy5nZXROdW1iZXJPZlBhZ2VzKCk7XG4gICAgLy8gQ29udGFpbmVyIGRpdiB3aXRoIHBhZ2luYXRvciBlbGVtZW50c1xuICAgIGNvbnN0IGFjdGlvbkNvbnRhaW5lciA9XG4gICAgICB0aGlzLlZpZXdDb250YWluZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICdkaXYubWF0LXBhZ2luYXRvci1yYW5nZS1hY3Rpb25zJ1xuICAgICAgKTtcbiAgICAvLyBCdXR0b24gdGhhdCB0cmlnZ2VycyB0aGUgbmV4dCBwYWdlIGFjdGlvblxuICAgIGNvbnN0IG5leHRQYWdlTm9kZSA9IHRoaXMuVmlld0NvbnRhaW5lci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICdidXR0b24ubWF0LXBhZ2luYXRvci1uYXZpZ2F0aW9uLW5leHQnXG4gICAgKTtcbiAgICAvLyBMYWJlbCBzaG93aW5nIHRoZSBwYWdlIHJhbmdlXG4gICAgY29uc3QgcGFnZVJhbmdlID0gdGhpcy5WaWV3Q29udGFpbmVyLmVsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJ2Rpdi5tYXQtcGFnaW5hdG9yLXJhbmdlLWxhYmVsJ1xuICAgICk7XG5cbiAgICBsZXQgcHJldkJ1dHRvbkNvdW50ID0gdGhpcy5idXR0b25zLmxlbmd0aDtcblxuICAgIC8vIFJlbW92ZSBidXR0b25zIGJlZm9yZSBjcmVhdGluZyBuZXcgb25lc1xuICAgIGlmIChwcmV2QnV0dG9uQ291bnQgPiAwKSB7XG4gICAgICB0aGlzLmJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQoYWN0aW9uQ29udGFpbmVyLCBidXR0b24pO1xuICAgICAgfSk7XG4gICAgICAvLyBFbXB0eSBzdGF0ZSBhcnJheVxuICAgICAgcHJldkJ1dHRvbkNvdW50ID0gMDtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHBhZ2VSYW5nZSwgJ2N1c3RvbS1wYWdpbmF0b3ItY291bnRlcicpO1xuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoYWN0aW9uQ29udGFpbmVyLCAnY3VzdG9tLXBhZ2luYXRvci1jb250YWluZXInKTtcblxuICAgIC8vIEluaXRpYWxpemUgbmV4dCBwYWdlIGFuZCBsYXN0IHBhZ2UgYnV0dG9uc1xuICAgIGlmIChwcmV2QnV0dG9uQ291bnQgPT09IDApIHtcbiAgICAgIGNvbnN0IG5vZGVBcnJheSA9IGFjdGlvbkNvbnRhaW5lci5jaGlsZE5vZGVzO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2RlQXJyYXkpIHtcbiAgICAgICAgICBpZiAobm9kZS5ub2RlTmFtZSA9PT0gJ0JVVFRPTicpIHtcbiAgICAgICAgICAgIC8vIE5leHQgQnV0dG9uIHN0eWxlc1xuICAgICAgICAgICAgaWYgKG5vZGUuaW5uZXJIVE1MLmxlbmd0aCA+IDEwMCAmJiBub2RlLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3Mobm9kZSwgJ2N1c3RvbS1wYWdpbmF0b3ItYXJyb3ctZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhub2RlLCAnY3VzdG9tLXBhZ2luYXRvci1hcnJvdy1lbmFibGVkJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUuaW5uZXJIVE1MLmxlbmd0aCA+IDEwMCAmJiAhbm9kZS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKG5vZGUsICdjdXN0b20tcGFnaW5hdG9yLWFycm93LWVuYWJsZWQnKTtcbiAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhcbiAgICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICAgICdjdXN0b20tcGFnaW5hdG9yLWFycm93LWRpc2FibGVkJ1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZG90cyA9IFtmYWxzZSwgZmFsc2VdO1xuXG4gICAgaWYgKHRvdGFsUGFnZXMgPiAwKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLmluc2VydEJlZm9yZShcbiAgICAgICAgYWN0aW9uQ29udGFpbmVyLFxuICAgICAgICB0aGlzLmNyZWF0ZUJ1dHRvbignMCcsIHRoaXMubWF0UGFnLnBhZ2VJbmRleCksXG4gICAgICAgIG5leHRQYWdlTm9kZVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBwYWdlID0gdGhpcy5zaG93VG90YWxQYWdlcyArIDI7XG4gICAgcGFnZURpZmZlcmVuY2UgPSB0b3RhbFBhZ2VzIC0gcGFnZTtcbiAgICBzdGFydEluZGV4ID0gTWF0aC5tYXgodGhpcy5jdXJyZW50UGFnZSAtIHRoaXMuc2hvd1RvdGFsUGFnZXMgLSAyLCAxKTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gc3RhcnRJbmRleDsgaW5kZXggPCB0b3RhbFBhZ2VzIC0gMTsgaW5kZXggPSBpbmRleCArIDEpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKGluZGV4IDwgcGFnZSAmJiB0aGlzLmN1cnJlbnRQYWdlIDw9IHRoaXMuc2hvd1RvdGFsUGFnZXMpIHx8XG4gICAgICAgIChpbmRleCA+PSB0aGlzLnJhbmdlU3RhcnQgJiYgaW5kZXggPD0gdGhpcy5yYW5nZUVuZCkgfHxcbiAgICAgICAgKHRoaXMuY3VycmVudFBhZ2UgPiBwYWdlRGlmZmVyZW5jZSAmJiBpbmRleCA+PSBwYWdlRGlmZmVyZW5jZSkgfHxcbiAgICAgICAgdG90YWxQYWdlcyA8IHRoaXMuc2hvd1RvdGFsUGFnZXMgKyBwYWdlXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5pbnNlcnRCZWZvcmUoXG4gICAgICAgICAgYWN0aW9uQ29udGFpbmVyLFxuICAgICAgICAgIHRoaXMuY3JlYXRlQnV0dG9uKGAke2luZGV4fWAsIHRoaXMubWF0UGFnLnBhZ2VJbmRleCksXG4gICAgICAgICAgbmV4dFBhZ2VOb2RlXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaW5kZXggPiB0aGlzLnJhbmdlRW5kICYmICFkb3RzWzBdKSB7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5pbnNlcnRCZWZvcmUoXG4gICAgICAgICAgICBhY3Rpb25Db250YWluZXIsXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUJ1dHRvbih0aGlzLnBhZ2VHYXBUeHRbMF0sIHRoaXMubWF0UGFnLnBhZ2VJbmRleCksXG4gICAgICAgICAgICBuZXh0UGFnZU5vZGVcbiAgICAgICAgICApO1xuICAgICAgICAgIGRvdHNbMF0gPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmRleCA8IHRoaXMucmFuZ2VFbmQgJiYgIWRvdHNbMV0pIHtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLmluc2VydEJlZm9yZShcbiAgICAgICAgICAgIGFjdGlvbkNvbnRhaW5lcixcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQnV0dG9uKHRoaXMucGFnZUdhcFR4dFsxXSwgdGhpcy5tYXRQYWcucGFnZUluZGV4KSxcbiAgICAgICAgICAgIG5leHRQYWdlTm9kZVxuICAgICAgICAgICk7XG4gICAgICAgICAgZG90c1sxXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodG90YWxQYWdlcyA+IDEpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuaW5zZXJ0QmVmb3JlKFxuICAgICAgICBhY3Rpb25Db250YWluZXIsXG4gICAgICAgIHRoaXMuY3JlYXRlQnV0dG9uKGAke3RvdGFsUGFnZXMgLSAxfWAsIHRoaXMubWF0UGFnLnBhZ2VJbmRleCksXG4gICAgICAgIG5leHRQYWdlTm9kZVxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBjcmVhdGVCdXR0b24oaW5kZXg6IHN0cmluZywgcGFnZUluZGV4OiBudW1iZXIpOiBNYXRCdXR0b24ge1xuICAgIGNvbnN0IGxpbmtCdG46IE1hdEJ1dHRvbiA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUobGlua0J0biwgJ2NsYXNzJywgJ2N1c3RvbS1wYWdpbmF0b3ItcGFnZScpO1xuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MobGlua0J0biwgJ2N1c3RvbS1wYWdpbmF0b3ItcGFnZS1lbmFibGVkJyk7XG4gICAgaWYgKGluZGV4ID09PSB0aGlzLnBhZ2VHYXBUeHRbMF0gfHwgaW5kZXggPT09IHRoaXMucGFnZUdhcFR4dFsxXSkge1xuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhsaW5rQnRuLCAnY3VzdG9tLXBhZ2luYXRvci1hcnJvdy1lbmFibGVkJyk7XG4gICAgfVxuICAgIGNvbnN0IHBhZ2luZ1R4dCA9IGlzTmFOKCtpbmRleCkgPyB0aGlzLnBhZ2VHYXBUeHRbMF0gOiAraW5kZXggKyAxO1xuICAgIGNvbnN0IHRleHQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZVRleHQocGFnaW5nVHh0ICsgJycpO1xuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MobGlua0J0biwgJ21hdC1jdXN0b20tcGFnZScpO1xuICAgIHN3aXRjaCAoaW5kZXgpIHtcbiAgICAgIGNhc2UgYCR7cGFnZUluZGV4fWA6XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGxpbmtCdG4sICdkaXNhYmxlZCcsICdkaXNhYmxlZCcpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGxpbmtCdG4sICdjdXN0b20tcGFnaW5hdG9yLXBhZ2UtZW5hYmxlZCcpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGxpbmtCdG4sICdjdXN0b20tcGFnaW5hdG9yLXBhZ2UtZGlzYWJsZWQnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRoaXMucGFnZUdhcFR4dFswXTpcbiAgICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4obGlua0J0biwgJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc3dpdGNoUGFnZShcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPCB0aGlzLnNob3dUb3RhbFBhZ2VzICsgMVxuICAgICAgICAgICAgICA/IHRoaXMuc2hvd1RvdGFsUGFnZXMgKyAyXG4gICAgICAgICAgICAgIDogdGhpcy5jdXJyZW50UGFnZSArIHRoaXMuc2hvd1RvdGFsUGFnZXMgLSAxXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLnBhZ2VHYXBUeHRbMV06XG4gICAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKGxpbmtCdG4sICdjbGljaycsICgpID0+IHtcbiAgICAgICAgICB0aGlzLnN3aXRjaFBhZ2UoXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID5cbiAgICAgICAgICAgICAgdGhpcy5tYXRQYWcuZ2V0TnVtYmVyT2ZQYWdlcygpIC0gdGhpcy5zaG93VG90YWxQYWdlcyAtIDJcbiAgICAgICAgICAgICAgPyB0aGlzLm1hdFBhZy5nZXROdW1iZXJPZlBhZ2VzKCkgLSB0aGlzLnNob3dUb3RhbFBhZ2VzIC0gM1xuICAgICAgICAgICAgICA6IHRoaXMuY3VycmVudFBhZ2UgLSB0aGlzLnNob3dUb3RhbFBhZ2VzICsgMVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKGxpbmtCdG4sICdjbGljaycsICgpID0+IHtcbiAgICAgICAgICB0aGlzLnN3aXRjaFBhZ2UoK2luZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGxpbmtCdG4sIHRleHQpO1xuICAgIC8vIEFkZCBidXR0b24gdG8gcHJpdmF0ZSBhcnJheSBmb3Igc3RhdGVcbiAgICB0aGlzLmJ1dHRvbnMucHVzaChsaW5rQnRuKTtcbiAgICByZXR1cm4gbGlua0J0bjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gY2FsY3VsYXRlcyB0aGUgYnV0dG9uIHJhbmdlIGJhc2VkIG9uIGNsYXNzIGlucHV0IHBhcmFtZXRlcnMgYW5kIGJhc2VkIG9uIGN1cnJlbnQgcGFnZSBpbmRleCB2YWx1ZS5cbiAgICovXG4gIHByaXZhdGUgaW5pdFBhZ2VSYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLnJhbmdlU3RhcnQgPSB0aGlzLmN1cnJlbnRQYWdlIC0gdGhpcy5zaG93VG90YWxQYWdlcyAvIDI7XG4gICAgdGhpcy5yYW5nZUVuZCA9IHRoaXMuY3VycmVudFBhZ2UgKyB0aGlzLnNob3dUb3RhbFBhZ2VzIC8gMjtcbiAgICB0aGlzLmJ1aWxkUGFnZU51bWJlcnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3dpdGNoUGFnZShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5tYXRQYWcucGFnZUluZGV4ID0gaW5kZXg7XG4gICAgdGhpcy5tYXRQYWcucGFnZS5lbWl0KHtcbiAgICAgIHByZXZpb3VzUGFnZUluZGV4OiB0aGlzLmN1cnJlbnRQYWdlLFxuICAgICAgcGFnZUluZGV4OiBpbmRleCxcbiAgICAgIHBhZ2VTaXplOiB0aGlzLm1hdFBhZy5wYWdlU2l6ZSxcbiAgICAgIGxlbmd0aDogdGhpcy5tYXRQYWcubGVuZ3RoLFxuICAgIH0pO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSBpbmRleDtcbiAgICB0aGlzLmluaXRQYWdlUmFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5yYW5nZVN0YXJ0ID0gMDtcbiAgICB0aGlzLnJhbmdlRW5kID0gdGhpcy5zaG93VG90YWxQYWdlcyAtIDE7XG4gICAgdGhpcy5pbml0UGFnZVJhbmdlKCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,183 @@
1
+ import { Directive, EventEmitter, Input, Output, } from "@angular/core";
2
+ import { map, startWith } from "rxjs";
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/material/paginator";
5
+ export class BubblePaginationDirective {
6
+ constructor(matPag, elementRef, ren) {
7
+ this.matPag = matPag;
8
+ this.elementRef = elementRef;
9
+ this.ren = ren;
10
+ this.pageIndexChangeEmitter = new EventEmitter();
11
+ this.showFirstButton = true;
12
+ this.showLastButton = true;
13
+ this.renderButtonsNumber = 2;
14
+ this.appCustomLength = 0;
15
+ this.hideDefaultArrows = false;
16
+ this.buttonsRef = [];
17
+ }
18
+ ngAfterViewInit() {
19
+ this.styleDefaultPagination();
20
+ this.createBubbleDivRef();
21
+ this.renderButtons();
22
+ }
23
+ ngOnChanges(changes) {
24
+ if (!changes?.["appCustomLength"]?.firstChange) {
25
+ this.removeButtons();
26
+ this.switchPage(0);
27
+ this.renderButtons();
28
+ }
29
+ }
30
+ renderButtons() {
31
+ this.buildButtons();
32
+ this.matPag.page
33
+ .pipe(map((e) => [e.previousPageIndex ?? 0, e.pageIndex]), startWith([0, 0]))
34
+ .subscribe(([prev, curr]) => {
35
+ this.changeActiveButtonStyles(prev, curr);
36
+ this.updateButtonsOnPageEvent();
37
+ });
38
+ }
39
+ changeActiveButtonStyles(previousIndex, newIndex) {
40
+ const previouslyActive = this.buttonsRef[previousIndex];
41
+ const currentActive = this.buttonsRef[newIndex];
42
+ try {
43
+ this.ren.removeClass(previouslyActive, "g-bubble__active");
44
+ this.ren.addClass(currentActive, "g-bubble__active");
45
+ }
46
+ catch { }
47
+ this.buttonsRef.forEach((button) => this.ren.setStyle(button, "display", "none"));
48
+ const renderElements = this.renderButtonsNumber;
49
+ const endDots = newIndex < this.buttonsRef.length - renderElements - 1;
50
+ const startDots = newIndex - renderElements > 0;
51
+ const firstButton = this.buttonsRef[0];
52
+ const lastButton = this.buttonsRef[this.buttonsRef.length - 1];
53
+ try {
54
+ if (this.showLastButton) {
55
+ this.ren.setStyle(this.dotsEndRef, "display", endDots ? "block" : "none");
56
+ this.ren.setStyle(lastButton, "display", endDots ? "flex" : "none");
57
+ }
58
+ }
59
+ catch { }
60
+ try {
61
+ if (this.showFirstButton) {
62
+ this.ren.setStyle(this.dotsStartRef, "display", startDots ? "block" : "none");
63
+ this.ren.setStyle(firstButton, "display", startDots ? "flex" : "none");
64
+ }
65
+ }
66
+ catch { }
67
+ const startingIndex = startDots ? newIndex - renderElements : 0;
68
+ const endingIndex = endDots
69
+ ? newIndex + renderElements
70
+ : this.buttonsRef.length - 1;
71
+ for (let i = startingIndex; i <= endingIndex; i++) {
72
+ const button = this.buttonsRef[i];
73
+ this.ren.setStyle(button, "display", "flex");
74
+ }
75
+ }
76
+ styleDefaultPagination() {
77
+ const nativeElement = this.elementRef.nativeElement;
78
+ const itemsPerPage = nativeElement.querySelector(".mat-mdc-paginator-page-size");
79
+ const howManyDisplayedEl = nativeElement.querySelector(".mat-mdc-paginator-range-label");
80
+ const previousButton = nativeElement.querySelector("button.mat-mdc-paginator-navigation-previous");
81
+ const nextButtonDefault = nativeElement.querySelector("button.mat-mdc-paginator-navigation-next");
82
+ if (this.hideDefaultArrows) {
83
+ this.ren.setStyle(previousButton, "display", "none");
84
+ this.ren.setStyle(nextButtonDefault, "display", "none");
85
+ }
86
+ }
87
+ createBubbleDivRef() {
88
+ const actionContainer = this.elementRef.nativeElement.querySelector("div.mat-mdc-paginator-range-actions");
89
+ const nextButtonDefault = this.elementRef.nativeElement.querySelector("button.mat-mdc-paginator-navigation-next");
90
+ this.bubbleContainerRef = this.ren.createElement("div");
91
+ this.ren.addClass(this.bubbleContainerRef, "g-bubble-container");
92
+ this.ren.insertBefore(actionContainer, this.bubbleContainerRef, nextButtonDefault);
93
+ }
94
+ buildButtons() {
95
+ const neededButtons = Math.ceil(this.appCustomLength / this.matPag.pageSize);
96
+ if (neededButtons === 1) {
97
+ this.ren.setStyle(this.elementRef.nativeElement, "display", "none");
98
+ return;
99
+ }
100
+ this.buttonsRef = [this.createButton(0)];
101
+ this.dotsStartRef = this.createDotsElement();
102
+ for (let index = 1; index < neededButtons - 1; index++) {
103
+ this.buttonsRef = [...this.buttonsRef, this.createButton(index)];
104
+ }
105
+ this.dotsEndRef = this.createDotsElement();
106
+ this.buttonsRef = [
107
+ ...this.buttonsRef,
108
+ this.createButton(neededButtons - 1),
109
+ ];
110
+ }
111
+ removeButtons() {
112
+ this.bubbleContainerRef.innerHTML = '';
113
+ this.buttonsRef.forEach((button) => {
114
+ this.ren.removeChild(this.bubbleContainerRef, button);
115
+ });
116
+ this.buttonsRef = [];
117
+ this.buttonsRef.length = 0;
118
+ }
119
+ createButton(i) {
120
+ const bubbleButton = this.ren.createElement("div");
121
+ const text = this.ren.createText(String(i + 1));
122
+ this.ren.addClass(bubbleButton, "g-bubble");
123
+ this.ren.setStyle(bubbleButton, "margin-right", "8px");
124
+ this.ren.appendChild(bubbleButton, text);
125
+ this.ren.listen(bubbleButton, "click", () => {
126
+ this.switchPage(i);
127
+ });
128
+ this.ren.appendChild(this.bubbleContainerRef, bubbleButton);
129
+ this.ren.setStyle(bubbleButton, "display", "none");
130
+ return bubbleButton;
131
+ }
132
+ createDotsElement() {
133
+ const dotsEl = this.ren.createElement("span");
134
+ const dotsText = this.ren.createText(".....");
135
+ this.ren.setStyle(dotsEl, "font-size", "18px");
136
+ this.ren.setStyle(dotsEl, "margin-right", "8px");
137
+ this.ren.setStyle(dotsEl, "padding-top", "6px");
138
+ this.ren.setStyle(dotsEl, "color", "#919191");
139
+ this.ren.appendChild(dotsEl, dotsText);
140
+ this.ren.appendChild(this.bubbleContainerRef, dotsEl);
141
+ this.ren.setStyle(dotsEl, "display", "none");
142
+ return dotsEl;
143
+ }
144
+ switchPage(i) {
145
+ const previousPageIndex = this.matPag.pageIndex;
146
+ this.matPag.pageIndex = i;
147
+ try {
148
+ this.matPag["_emitPageEvent"](previousPageIndex);
149
+ }
150
+ catch { }
151
+ this.pageIndexChangeEmitter.emit(i);
152
+ }
153
+ updateButtonsOnPageEvent() {
154
+ const neededButtons = Math.ceil(this.appCustomLength / this.matPag.pageSize);
155
+ if (neededButtons === this.buttonsRef.length) {
156
+ return;
157
+ }
158
+ this.removeButtons();
159
+ this.buildButtons();
160
+ }
161
+ }
162
+ BubblePaginationDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: BubblePaginationDirective, deps: [{ token: i1.MatPaginator }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
163
+ BubblePaginationDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: BubblePaginationDirective, isStandalone: true, selector: "[appBubblePagination]", inputs: { showFirstButton: "showFirstButton", showLastButton: "showLastButton", renderButtonsNumber: "renderButtonsNumber", appCustomLength: "appCustomLength", hideDefaultArrows: "hideDefaultArrows" }, outputs: { pageIndexChangeEmitter: "pageIndexChangeEmitter" }, usesOnChanges: true, ngImport: i0 });
164
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: BubblePaginationDirective, decorators: [{
165
+ type: Directive,
166
+ args: [{
167
+ selector: "[appBubblePagination]",
168
+ standalone: true,
169
+ }]
170
+ }], ctorParameters: function () { return [{ type: i1.MatPaginator }, { type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { pageIndexChangeEmitter: [{
171
+ type: Output
172
+ }], showFirstButton: [{
173
+ type: Input
174
+ }], showLastButton: [{
175
+ type: Input
176
+ }], renderButtonsNumber: [{
177
+ type: Input
178
+ }], appCustomLength: [{
179
+ type: Input
180
+ }], hideDefaultArrows: [{
181
+ type: Input
182
+ }] } });
183
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXBhZ2luYXRvci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXBhLWxpYnJhcnktdWkvc3JjL2xpYi9jb3JlL2RpcmVjdGl2ZXMvY3VzdG9tLXBhZ2luYXRvci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sR0FHUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBTXRDLE1BQU0sT0FBTyx5QkFBeUI7SUFZcEMsWUFDbUIsTUFBb0IsRUFDN0IsVUFBc0IsRUFDdEIsR0FBYztRQUZMLFdBQU0sR0FBTixNQUFNLENBQWM7UUFDN0IsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixRQUFHLEdBQUgsR0FBRyxDQUFXO1FBZGQsMkJBQXNCLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFDM0Usb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFDdkIsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFDdEIsd0JBQW1CLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLG9CQUFlLEdBQVcsQ0FBQyxDQUFDO1FBQzVCLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUkzQixlQUFVLEdBQWtCLEVBQUUsQ0FBQztJQU1wQyxDQUFDO0lBRUosZUFBZTtRQUNiLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFdBQVcsRUFBRTtZQUM5QyxJQUFJLENB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LEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvclwiO1xuaW1wb3J0IHsgbWFwLCBzdGFydFdpdGggfSBmcm9tIFwicnhqc1wiO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6IFwiW2FwcEJ1YmJsZVBhZ2luYXRpb25dXCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEJ1YmJsZVBhZ2luYXRpb25EaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuICBAT3V0cHV0KCkgcGFnZUluZGV4Q2hhbmdlRW1pdHRlcjogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQElucHV0KCkgc2hvd0ZpcnN0QnV0dG9uID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd0xhc3RCdXR0b24gPSB0cnVlO1xuICBASW5wdXQoKSByZW5kZXJCdXR0b25zTnVtYmVyID0gMjtcbiAgQElucHV0KCkgYXBwQ3VzdG9tTGVuZ3RoOiBudW1iZXIgPSAwO1xuICBASW5wdXQoKSBoaWRlRGVmYXVsdEFycm93cyA9IGZhbHNlO1xuICBwcml2YXRlIGRvdHNFbmRSZWYhOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBkb3RzU3RhcnRSZWYhOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBidWJibGVDb250YWluZXJSZWYhOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBidXR0b25zUmVmOiBIVE1MRWxlbWVudFtdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBtYXRQYWc6IE1hdFBhZ2luYXRvcixcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZW46IFJlbmRlcmVyMlxuICApIHt9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3R5bGVEZWZhdWx0UGFnaW5hdGlvbigpO1xuICAgIHRoaXMuY3JlYXRlQnViYmxlRGl2UmVmKCk7XG4gICAgdGhpcy5yZW5kZXJCdXR0b25zKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKCFjaGFuZ2VzPy5bXCJhcHBDdXN0b21MZW5ndGhcIl0/LmZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLnJlbW92ZUJ1dHRvbnMoKTtcbiAgICAgIHRoaXMuc3dpdGNoUGFnZSgwKTtcbiAgICAgIHRoaXMucmVuZGVyQnV0dG9ucygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQnV0dG9ucygpOiB2b2lkIHtcbiAgICB0aGlzLmJ1aWxkQnV0dG9ucygpO1xuXG4gICAgdGhpcy5tYXRQYWcucGFnZVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoZSkgPT4gW2UucHJldmlvdXNQYWdlSW5kZXggPz8gMCwgZS5wYWdlSW5kZXhdKSxcbiAgICAgICAgc3RhcnRXaXRoKFswLCAwXSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKFtwcmV2LCBjdXJyXSkgPT4ge1xuICAgICAgICB0aGlzLmNoYW5nZUFjdGl2ZUJ1dHRvblN0eWxlcyhwcmV2LCBjdXJyKTtcbiAgICAgICAgdGhpcy51cGRhdGVCdXR0b25zT25QYWdlRXZlbnQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGFuZ2VBY3RpdmVCdXR0b25TdHlsZXMocHJldmlvdXNJbmRleDogbnVtYmVyLCBuZXdJbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgcHJldmlvdXNseUFjdGl2ZSA9IHRoaXMuYnV0dG9uc1JlZltwcmV2aW91c0luZGV4XTtcbiAgICBjb25zdCBjdXJyZW50QWN0aXZlID0gdGhpcy5idXR0b25zUmVmW25ld0luZGV4XTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLnJlbi5yZW1vdmVDbGFzcyhwcmV2aW91c2x5QWN0aXZlLCBcImctYnViYmxlX19hY3RpdmVcIik7XG4gICAgICB0aGlzLnJlbi5hZGRDbGFzcyhjdXJyZW50QWN0aXZlLCBcImctYnViYmxlX19hY3RpdmVcIik7XG4gICAgfSBjYXRjaCB7fVxuXG4gICAgdGhpcy5idXR0b25zUmVmLmZvckVhY2goKGJ1dHRvbikgPT5cbiAgICAgIHRoaXMucmVuLnNldFN0eWxlKGJ1dHRvbiwgXCJkaXNwbGF5XCIsIFwibm9uZVwiKVxuICAgICk7XG5cbiAgICBjb25zdCByZW5kZXJFbGVtZW50cyA9IHRoaXMucmVuZGVyQnV0dG9uc051bWJlcjtcbiAgICBjb25zdCBlbmREb3RzID0gbmV3SW5kZXggPCB0aGlzLmJ1dHRvbnNSZWYubGVuZ3RoIC0gcmVuZGVyRWxlbWVudHMgLSAxO1xuICAgIGNvbnN0IHN0YXJ0RG90cyA9IG5ld0luZGV4IC0gcmVuZGVyRWxlbWVudHMgPiAwO1xuXG4gICAgY29uc3QgZmlyc3RCdXR0b24gPSB0aGlzLmJ1dHRvbnNSZWZbMF07XG4gICAgY29uc3QgbGFzdEJ1dHRvbiA9IHRoaXMuYnV0dG9uc1JlZlt0aGlzLmJ1dHRvbnNSZWYubGVuZ3RoIC0gMV07XG5cbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuc2hvd0xhc3RCdXR0b24pIHtcbiAgICAgICAgdGhpcy5yZW4uc2V0U3R5bGUodGhpcy5kb3RzRW5kUmVmLCBcImRpc3BsYXlcIiwgZW5kRG90cyA/IFwiYmxvY2tcIiA6IFwibm9uZVwiKTtcbiAgICAgICAgdGhpcy5yZW4uc2V0U3R5bGUobGFzdEJ1dHRvbiwgXCJkaXNwbGF5XCIsIGVuZERvdHMgPyBcImZsZXhcIiA6IFwibm9uZVwiKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHt9XG5cbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuc2hvd0ZpcnN0QnV0dG9uKSB7XG4gICAgICAgIHRoaXMucmVuLnNldFN0eWxlKFxuICAgICAgICAgIHRoaXMuZG90c1N0YXJ0UmVmLFxuICAgICAgICAgIFwiZGlzcGxheVwiLFxuICAgICAgICAgIHN0YXJ0RG90cyA/IFwiYmxvY2tcIiA6IFwibm9uZVwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVuLnNldFN0eWxlKGZpcnN0QnV0dG9uLCBcImRpc3BsYXlcIiwgc3RhcnREb3RzID8gXCJmbGV4XCIgOiBcIm5vbmVcIik7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7fVxuXG4gICAgY29uc3Qgc3RhcnRpbmdJbmRleCA9IHN0YXJ0RG90cyA/IG5ld0luZGV4IC0gcmVuZGVyRWxlbWVudHMgOiAwO1xuICAgIGNvbnN0IGVuZGluZ0luZGV4ID0gZW5kRG90c1xuICAgICAgPyBuZXdJbmRleCArIHJlbmRlckVsZW1lbnRzXG4gICAgICA6IHRoaXMuYnV0dG9uc1JlZi5sZW5ndGggLSAxO1xuXG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0aW5nSW5kZXg7IGkgPD0gZW5kaW5nSW5kZXg7IGkrKykge1xuICAgICAgY29uc3QgYnV0dG9uID0gdGhpcy5idXR0b25zUmVmW2ldO1xuICAgICAgdGhpcy5yZW4uc2V0U3R5bGUoYnV0dG9uLCBcImRpc3BsYXlcIiwgXCJmbGV4XCIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3R5bGVEZWZhdWx0UGFnaW5hdGlvbigpIHtcbiAgICBjb25zdCBuYXRpdmVFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgaXRlbXNQZXJQYWdlID0gbmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgXCIubWF0LW1kYy1wYWdpbmF0b3ItcGFnZS1zaXplXCJcbiAgICApO1xuICAgIGNvbnN0IGhvd01hbnlEaXNwbGF5ZWRFbCA9IG5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgIFwiLm1hdC1tZGMtcGFnaW5hdG9yLXJhbmdlLWxhYmVsXCJcbiAgICApO1xuICAgIGNvbnN0IHByZXZpb3VzQnV0dG9uID0gbmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgXCJidXR0b24ubWF0LW1kYy1wYWdpbmF0b3ItbmF2aWdhdGlvbi1wcmV2aW91c1wiXG4gICAgKTtcbiAgICBjb25zdCBuZXh0QnV0dG9uRGVmYXVsdCA9IG5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgIFwiYnV0dG9uLm1hdC1tZGMtcGFnaW5hdG9yLW5hdmlnYXRpb24tbmV4dFwiXG4gICAgKTtcblxuICAgIGlmICh0aGlzLmhpZGVEZWZhdWx0QXJyb3dzKSB7XG4gICAgICB0aGlzLnJlbi5zZXRTdHlsZShwcmV2aW91c0J1dHRvbiwgXCJkaXNwbGF5XCIsIFwibm9uZVwiKTtcbiAgICAgIHRoaXMucmVuLnNldFN0eWxlKG5leHRCdXR0b25EZWZhdWx0LCBcImRpc3BsYXlcIiwgXCJub25lXCIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQnViYmxlRGl2UmVmKCk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGlvbkNvbnRhaW5lciA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICBcImRpdi5tYXQtbWRjLXBhZ2luYXRvci1yYW5nZS1hY3Rpb25zXCJcbiAgICApO1xuICAgIGNvbnN0IG5leHRCdXR0b25EZWZhdWx0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgIFwiYnV0dG9uLm1hdC1tZGMtcGFnaW5hdG9yLW5hdmlnYXRpb24tbmV4dFwiXG4gICAgKTtcblxuICAgIHRoaXMuYnViYmxlQ29udGFpbmVyUmVmID0gdGhpcy5yZW4uY3JlYXRlRWxlbWVudChcImRpdlwiKSBhcyBIVE1MRWxlbWVudDtcbiAgICB0aGlzLnJlbi5hZGRDbGFzcyh0aGlzLmJ1YmJsZUNvbnRhaW5lclJlZiwgXCJnLWJ1YmJsZS1jb250YWluZXJcIik7XG5cbiAgICB0aGlzLnJlbi5pbnNlcnRCZWZvcmUoXG4gICAgICBhY3Rpb25Db250YWluZXIsXG4gICAgICB0aGlzLmJ1YmJsZUNvbnRhaW5lclJlZixcbiAgICAgIG5leHRCdXR0b25EZWZhdWx0XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRCdXR0b25zKCk6IHZvaWQge1xuICAgIGNvbnN0IG5lZWRlZEJ1dHRvbnMgPSBNYXRoLmNlaWwoXG4gICAgICB0aGlzLmFwcEN1c3RvbUxlbmd0aCAvIHRoaXMubWF0UGFnLnBhZ2VTaXplXG4gICAgKTtcblxuICAgIGlmIChuZWVkZWRCdXR0b25zID09PSAxKSB7XG4gICAgICB0aGlzLnJlbi5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgXCJkaXNwbGF5XCIsIFwibm9uZVwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJ1dHRvbnNSZWYgPSBbdGhpcy5jcmVhdGVCdXR0b24oMCldO1xuICAgIHRoaXMuZG90c1N0YXJ0UmVmID0gdGhpcy5jcmVhdGVEb3RzRWxlbWVudCgpO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IG5lZWRlZEJ1dHRvbnMgLSAxOyBpbmRleCsrKSB7XG4gICAgICB0aGlzLmJ1dHRvbnNSZWYgPSBbLi4udGhpcy5idXR0b25zUmVmLCB0aGlzLmNyZWF0ZUJ1dHRvbihpbmRleCldO1xuICAgIH1cblxuICAgIHRoaXMuZG90c0VuZFJlZiA9IHRoaXMuY3JlYXRlRG90c0VsZW1lbnQoKTtcblxuICAgIHRoaXMuYnV0dG9uc1JlZiA9IFtcbiAgICAgIC4uLnRoaXMuYnV0dG9uc1JlZixcbiAgICAgIHRoaXMuY3JlYXRlQnV0dG9uKG5lZWRlZEJ1dHRvbnMgLSAxKSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVCdXR0b25zKCk6IHZvaWQge1xuICAgIHRoaXMuYnViYmxlQ29udGFpbmVyUmVmLmlubmVySFRNTCA9ICcnO1xuICAgIHRoaXMuYnV0dG9uc1JlZi5mb3JFYWNoKChidXR0b24pID0+IHtcbiAgICAgIHRoaXMucmVuLnJlbW92ZUNoaWxkKHRoaXMuYnViYmxlQ29udGFpbmVyUmVmLCBidXR0b24pO1xuICAgIH0pO1xuICAgIHRoaXMuYnV0dG9uc1JlZiA9IFtdO1xuICAgIHRoaXMuYnV0dG9uc1JlZi5sZW5ndGggPSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVCdXR0b24oaTogbnVtYmVyKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IGJ1YmJsZUJ1dHRvbiA9IHRoaXMucmVuLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgY29uc3QgdGV4dCA9IHRoaXMucmVuLmNyZWF0ZVRleHQoU3RyaW5nKGkgKyAxKSk7XG5cbiAgICB0aGlzLnJlbi5hZGRDbGFzcyhidWJibGVCdXR0b24sIFwiZy1idWJibGVcIik7XG4gICAgdGhpcy5yZW4uc2V0U3R5bGUoYnViYmxlQnV0dG9uLCBcIm1hcmdpbi1yaWdodFwiLCBcIjhweFwiKTtcbiAgICB0aGlzLnJlbi5hcHBlbmRDaGlsZChidWJibGVCdXR0b24sIHRleHQpO1xuXG4gICAgdGhpcy5yZW4ubGlzdGVuKGJ1YmJsZUJ1dHRvbiwgXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICB0aGlzLnN3aXRjaFBhZ2UoaSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlbi5hcHBlbmRDaGlsZCh0aGlzLmJ1YmJsZUNvbnRhaW5lclJlZiwgYnViYmxlQnV0dG9uKTtcbiAgICB0aGlzLnJlbi5zZXRTdHlsZShidWJibGVCdXR0b24sIFwiZGlzcGxheVwiLCBcIm5vbmVcIik7XG5cbiAgICByZXR1cm4gYnViYmxlQnV0dG9uO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEb3RzRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgZG90c0VsID0gdGhpcy5yZW4uY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gICAgY29uc3QgZG90c1RleHQgPSB0aGlzLnJlbi5jcmVhdGVUZXh0KFwiLi4uLi5cIik7XG5cbiAgICB0aGlzLnJlbi5zZXRTdHlsZShkb3RzRWwsIFwiZm9udC1zaXplXCIsIFwiMThweFwiKTtcbiAgICB0aGlzLnJlbi5zZXRTdHlsZShkb3RzRWwsIFwibWFyZ2luLXJpZ2h0XCIsIFwiOHB4XCIpO1xuICAgIHRoaXMucmVuLnNldFN0eWxlKGRvdHNFbCwgXCJwYWRkaW5nLXRvcFwiLCBcIjZweFwiKTtcbiAgICB0aGlzLnJlbi5zZXRTdHlsZShkb3RzRWwsIFwiY29sb3JcIiwgXCIjOTE5MTkxXCIpO1xuXG4gICAgdGhpcy5yZW4uYXBwZW5kQ2hpbGQoZG90c0VsLCBkb3RzVGV4dCk7XG4gICAgdGhpcy5yZW4uYXBwZW5kQ2hpbGQodGhpcy5idWJibGVDb250YWluZXJSZWYsIGRvdHNFbCk7XG4gICAgdGhpcy5yZW4uc2V0U3R5bGUoZG90c0VsLCBcImRpc3BsYXlcIiwgXCJub25lXCIpO1xuXG4gICAgcmV0dXJuIGRvdHNFbDtcbiAgfVxuXG4gIHByaXZhdGUgc3dpdGNoUGFnZShpOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBwcmV2aW91c1BhZ2VJbmRleCA9IHRoaXMubWF0UGFnLnBhZ2VJbmRleDtcbiAgICB0aGlzLm1hdFBhZy5wYWdlSW5kZXggPSBpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLm1hdFBhZ1tcIl9lbWl0UGFnZUV2ZW50XCJdKHByZXZpb3VzUGFnZUluZGV4KTtcbiAgICB9IGNhdGNoIHt9XG5cbiAgICB0aGlzLnBhZ2VJbmRleENoYW5nZUVtaXR0ZXIuZW1pdChpKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQnV0dG9uc09uUGFnZUV2ZW50KCk6IHZvaWQge1xuICAgIGNvbnN0IG5lZWRlZEJ1dHRvbnMgPSBNYXRoLmNlaWwoXG4gICAgICB0aGlzLmFwcEN1c3RvbUxlbmd0aCAvIHRoaXMubWF0UGFnLnBhZ2VTaXplXG4gICAgKTtcbiAgICBpZiAobmVlZGVkQnV0dG9ucyA9PT0gdGhpcy5idXR0b25zUmVmLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVtb3ZlQnV0dG9ucygpO1xuICAgIHRoaXMuYnVpbGRCdXR0b25zKCk7XG4gIH1cbn1cbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  /**
2
2
  * Generated bundle index. Do not edit.
3
3
  */
4
- export * from './public-api';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYS1saWJyYXJ5LXVpLXNyYy1saWItY29tcG9uZW50cy10YWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21hcGEtbGlicmFyeS11aS9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUvbWFwYS1saWJyYXJ5LXVpLXNyYy1saWItY29tcG9uZW50cy10YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
4
+ export * from './table';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYS1saWJyYXJ5LXVpLXNyYy1saWItY29tcG9uZW50cy10YWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21hcGEtbGlicmFyeS11aS9zcmMvbWFwYS1saWJyYXJ5LXVpLXNyYy1saWItY29tcG9uZW50cy10YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3RhYmxlJztcbiJdfQ==
@@ -0,0 +1,7 @@
1
+ /*
2
+ * Public API Surface of mapa-library-ui table
3
+ */
4
+ export * from './lib/core/directives/custom-paginator.directive';
5
+ export * from './lib/core/directives/custom-paginator-legacy.directive';
6
+ export * from './lib/components/table/public-api';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXBhLWxpYnJhcnktdWkvc3JjL3RhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsY0FBYyxrREFBa0QsQ0FBQztBQUNqRSxjQUFjLHlEQUF5RCxDQUFDO0FBQ3hFLGNBQWMsbUNBQW1DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIG1hcGEtbGlicmFyeS11aSB0YWJsZVxuICovXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb3JlL2RpcmVjdGl2ZXMvY3VzdG9tLXBhZ2luYXRvci5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29yZS9kaXJlY3RpdmVzL2N1c3RvbS1wYWdpbmF0b3ItbGVnYWN5LmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3RhYmxlL3B1YmxpYy1hcGknO1xuIl19
@@ -600,10 +600,10 @@ class FiltersComponent {
600
600
  }
601
601
  }
602
602
  FiltersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FiltersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
603
- FiltersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: FiltersComponent, selector: "mapa-filters", inputs: { form: "form", elements: "elements" }, outputs: { selectedValues: "selectedValues" }, ngImport: i0, template: "<div class=\"filter\">\n <div *ngFor=\"let filter of elements\">\n <div *ngIf=\"filter.controlType === 'checkbox'\" class=\"filter__item--resizable\">\n <mapa-checkbox [formControl]=\"getFormControl(filter.key)\"></mapa-checkbox>\n </div>\n <div *ngIf=\"filter.controlType === 'dropdown'\" class=\"filter__item--resizable\">\n <mapa-dropdown\n [formControl]=\"getFormControl(filter.key)\"\n [element]=\"filter\"\n ></mapa-dropdown>\n </div>\n <div *ngIf=\"filter.controlType === 'input'\" class=\"filter__item\">\n <mapa-input\n [formControl]=\"getFormControl(filter.key)\"\n [element]=\"filter\"\n ></mapa-input>\n </div>\n </div>\n <div class=\"filter__item\">\n <mapa-button [color]=\"'basic'\" (clicked)=\"clearFilters()\">\n Limpar filtros\n </mapa-button>\n <mapa-button\n [color]=\"'primary'\"\n [disabled]=\"!!form.invalid\"\n (clicked)=\"emitSelectedValues()\"\n >\n Filtrar\n </mapa-button>\n </div>\n</div>\n<!--\n<div class=\"input\" *ngIf=\"containsInputText\">\n <div class=\"overlay\"></div>\n <div class=\"inputBackground\">\n <mapa-input\n [formControl]=\"formControlSearchAutoresize\"\n [element]=\"inputTextSearchAutoresize\"\n ></mapa-input>\n </div>\n</div>\n-->\n", styles: [".filter{display:inline-flex;align-items:flex-end;flex-wrap:wrap;background-color:#f6f7f7;padding:32px;width:95vw;gap:30px}.filter__item{display:flex}.filter__item--resizable{width:calc(15vw - 20px)}.input{position:relative}.overlay{position:absolute;top:0;left:2%;width:96%;height:100%;border-bottom:1px solid #d2d7da;z-index:-1}.inputBackground{background-color:#fff;padding:32px 30px;position:relative}button{border:none;background-color:transparent;color:#ea561d;margin-top:30px}::ng-deep mapa-dropdown .mapa-dropdown{max-width:none;min-width:10vw}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.ButtonComponent, selector: "mapa-button", inputs: ["color", "disabled"], outputs: ["clicked"] }, { kind: "component", type: i3.CheckboxComponent, selector: "mapa-checkbox", inputs: ["color", "formControl"] }, { kind: "component", type: i4.MapaDropdownComponent, selector: "mapa-dropdown", inputs: ["formControl", "formControlSearch", "element", "border"] }, { kind: "component", type: i5.MapaInputComponent, selector: "mapa-input", inputs: ["formControl", "element"] }] });
603
+ FiltersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: FiltersComponent, selector: "mapa-filters", inputs: { form: "form", elements: "elements" }, outputs: { selectedValues: "selectedValues" }, ngImport: i0, template: "<div class=\"filter\">\n <div *ngFor=\"let filter of elements\">\n <div *ngIf=\"filter.controlType === 'checkbox'\" class=\"filter__item--resizable\">\n <mapa-checkbox [formControl]=\"getFormControl(filter.key)\"></mapa-checkbox>\n </div>\n <div *ngIf=\"filter.controlType === 'dropdown'\" class=\"filter__item--resizable\">\n <mapa-dropdown\n [formControl]=\"getFormControl(filter.key)\"\n [element]=\"filter\"\n ></mapa-dropdown>\n </div>\n <div *ngIf=\"filter.controlType === 'input'\" class=\"filter__item\">\n <mapa-input\n [formControl]=\"getFormControl(filter.key)\"\n [element]=\"filter\"\n ></mapa-input>\n </div>\n </div>\n <div class=\"filter__item\">\n <mapa-button [color]=\"'basic'\" (clicked)=\"clearFilters()\">\n Limpar filtros\n </mapa-button>\n <mapa-button\n [color]=\"'primary'\"\n [disabled]=\"!!form.invalid\"\n (clicked)=\"emitSelectedValues()\"\n >\n Filtrar\n </mapa-button>\n </div>\n</div>\n<!--\n<div class=\"input\" *ngIf=\"containsInputText\">\n <div class=\"overlay\"></div>\n <div class=\"inputBackground\">\n <mapa-input\n [formControl]=\"formControlSearchAutoresize\"\n [element]=\"inputTextSearchAutoresize\"\n ></mapa-input>\n </div>\n</div>\n-->\n", styles: [".filter{display:flex;align-items:center;flex-wrap:wrap;background-color:#f6f7f7;padding:32px;width:95vw;gap:30px}.filter__item{display:flex}.input{position:relative}.overlay{position:absolute;top:0;left:2%;width:96%;height:100%;border-bottom:1px solid #d2d7da;z-index:-1}.inputBackground{background-color:#fff;padding:32px 30px;position:relative}button{border:none;background-color:transparent;color:#ea561d;margin-top:30px}::ng-deep mapa-dropdown .mapa-dropdown{max-width:none;min-width:10vw}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.ButtonComponent, selector: "mapa-button", inputs: ["color", "disabled"], outputs: ["clicked"] }, { kind: "component", type: i3.CheckboxComponent, selector: "mapa-checkbox", inputs: ["color", "formControl"] }, { kind: "component", type: i4.MapaDropdownComponent, selector: "mapa-dropdown", inputs: ["formControl", "formControlSearch", "element", "border"] }, { kind: "component", type: i5.MapaInputComponent, selector: "mapa-input", inputs: ["formControl", "element"] }] });
604
604
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FiltersComponent, decorators: [{
605
605
  type: Component,
606
- args: [{ selector: 'mapa-filters', template: "<div class=\"filter\">\n <div *ngFor=\"let filter of elements\">\n <div *ngIf=\"filter.controlType === 'checkbox'\" class=\"filter__item--resizable\">\n <mapa-checkbox [formControl]=\"getFormControl(filter.key)\"></mapa-checkbox>\n </div>\n <div *ngIf=\"filter.controlType === 'dropdown'\" class=\"filter__item--resizable\">\n <mapa-dropdown\n [formControl]=\"getFormControl(filter.key)\"\n [element]=\"filter\"\n ></mapa-dropdown>\n </div>\n <div *ngIf=\"filter.controlType === 'input'\" class=\"filter__item\">\n <mapa-input\n [formControl]=\"getFormControl(filter.key)\"\n [element]=\"filter\"\n ></mapa-input>\n </div>\n </div>\n <div class=\"filter__item\">\n <mapa-button [color]=\"'basic'\" (clicked)=\"clearFilters()\">\n Limpar filtros\n </mapa-button>\n <mapa-button\n [color]=\"'primary'\"\n [disabled]=\"!!form.invalid\"\n (clicked)=\"emitSelectedValues()\"\n >\n Filtrar\n </mapa-button>\n </div>\n</div>\n<!--\n<div class=\"input\" *ngIf=\"containsInputText\">\n <div class=\"overlay\"></div>\n <div class=\"inputBackground\">\n <mapa-input\n [formControl]=\"formControlSearchAutoresize\"\n [element]=\"inputTextSearchAutoresize\"\n ></mapa-input>\n </div>\n</div>\n-->\n", styles: [".filter{display:inline-flex;align-items:flex-end;flex-wrap:wrap;background-color:#f6f7f7;padding:32px;width:95vw;gap:30px}.filter__item{display:flex}.filter__item--resizable{width:calc(15vw - 20px)}.input{position:relative}.overlay{position:absolute;top:0;left:2%;width:96%;height:100%;border-bottom:1px solid #d2d7da;z-index:-1}.inputBackground{background-color:#fff;padding:32px 30px;position:relative}button{border:none;background-color:transparent;color:#ea561d;margin-top:30px}::ng-deep mapa-dropdown .mapa-dropdown{max-width:none;min-width:10vw}\n"] }]
606
+ args: [{ selector: 'mapa-filters', template: "<div class=\"filter\">\n <div *ngFor=\"let filter of elements\">\n <div *ngIf=\"filter.controlType === 'checkbox'\" class=\"filter__item--resizable\">\n <mapa-checkbox [formControl]=\"getFormControl(filter.key)\"></mapa-checkbox>\n </div>\n <div *ngIf=\"filter.controlType === 'dropdown'\" class=\"filter__item--resizable\">\n <mapa-dropdown\n [formControl]=\"getFormControl(filter.key)\"\n [element]=\"filter\"\n ></mapa-dropdown>\n </div>\n <div *ngIf=\"filter.controlType === 'input'\" class=\"filter__item\">\n <mapa-input\n [formControl]=\"getFormControl(filter.key)\"\n [element]=\"filter\"\n ></mapa-input>\n </div>\n </div>\n <div class=\"filter__item\">\n <mapa-button [color]=\"'basic'\" (clicked)=\"clearFilters()\">\n Limpar filtros\n </mapa-button>\n <mapa-button\n [color]=\"'primary'\"\n [disabled]=\"!!form.invalid\"\n (clicked)=\"emitSelectedValues()\"\n >\n Filtrar\n </mapa-button>\n </div>\n</div>\n<!--\n<div class=\"input\" *ngIf=\"containsInputText\">\n <div class=\"overlay\"></div>\n <div class=\"inputBackground\">\n <mapa-input\n [formControl]=\"formControlSearchAutoresize\"\n [element]=\"inputTextSearchAutoresize\"\n ></mapa-input>\n </div>\n</div>\n-->\n", styles: [".filter{display:flex;align-items:center;flex-wrap:wrap;background-color:#f6f7f7;padding:32px;width:95vw;gap:30px}.filter__item{display:flex}.input{position:relative}.overlay{position:absolute;top:0;left:2%;width:96%;height:100%;border-bottom:1px solid #d2d7da;z-index:-1}.inputBackground{background-color:#fff;padding:32px 30px;position:relative}button{border:none;background-color:transparent;color:#ea561d;margin-top:30px}::ng-deep mapa-dropdown .mapa-dropdown{max-width:none;min-width:10vw}\n"] }]
607
607
  }], propDecorators: { form: [{
608
608
  type: Input
609
609
  }], elements: [{