@swimlane/ngx-datatable 18.0.0 → 20.0.0-alpha-1

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 (136) hide show
  1. package/README.md +0 -1
  2. package/esm2020/lib/components/body/body-cell.component.mjs +432 -0
  3. package/esm2020/lib/components/body/body-group-header-template.directive.mjs +16 -0
  4. package/esm2020/lib/components/body/body-group-header.directive.mjs +62 -0
  5. package/esm2020/lib/components/body/body-row-wrapper.component.mjs +140 -0
  6. package/esm2020/lib/components/body/body-row.component.mjs +262 -0
  7. package/esm2020/lib/components/body/body.component.mjs +863 -0
  8. package/esm2020/lib/components/body/progress-bar.component.mjs +27 -0
  9. package/esm2020/lib/components/body/scroller.component.mjs +91 -0
  10. package/esm2020/lib/components/body/selection.component.mjs +150 -0
  11. package/esm2020/lib/components/body/summary/summary-row.component.mjs +105 -0
  12. package/esm2020/lib/components/columns/column-cell.directive.mjs +14 -0
  13. package/esm2020/lib/components/columns/column-header.directive.mjs +14 -0
  14. package/esm2020/lib/components/columns/column.directive.mjs +98 -0
  15. package/esm2020/lib/components/columns/tree.directive.mjs +14 -0
  16. package/esm2020/lib/components/datatable.component.mjs +1008 -0
  17. package/esm2020/lib/components/footer/footer-template.directive.mjs +14 -0
  18. package/esm2020/lib/components/footer/footer.component.mjs +128 -0
  19. package/esm2020/lib/components/footer/footer.directive.mjs +35 -0
  20. package/esm2020/lib/components/footer/pager.component.mjs +181 -0
  21. package/esm2020/lib/components/header/header-cell.component.mjs +243 -0
  22. package/esm2020/lib/components/header/header.component.mjs +376 -0
  23. package/esm2020/lib/components/row-detail/row-detail-template.directive.mjs +16 -0
  24. package/esm2020/lib/components/row-detail/row-detail.directive.mjs +63 -0
  25. package/esm2020/lib/directives/draggable.directive.mjs +108 -0
  26. package/esm2020/lib/directives/long-press.directive.mjs +117 -0
  27. package/esm2020/lib/directives/orderable.directive.mjs +136 -0
  28. package/esm2020/lib/directives/resizeable.directive.mjs +93 -0
  29. package/esm2020/lib/directives/visibility.directive.mjs +63 -0
  30. package/{esm2015/lib/events.js → esm2020/lib/events.mjs} +0 -0
  31. package/esm2020/lib/ngx-datatable.module.mjs +139 -0
  32. package/esm2020/lib/services/column-changes.service.mjs +24 -0
  33. package/esm2020/lib/services/dimensions-helper.service.mjs +17 -0
  34. package/esm2020/lib/services/scrollbar-helper.service.mjs +37 -0
  35. package/{esm2015/lib/types/click.type.js → esm2020/lib/types/click.type.mjs} +0 -0
  36. package/{esm2015/lib/types/column-mode.type.js → esm2020/lib/types/column-mode.type.mjs} +0 -0
  37. package/{esm2015/lib/types/contextmenu.type.js → esm2020/lib/types/contextmenu.type.mjs} +0 -0
  38. package/{esm2015/lib/types/selection.type.js → esm2020/lib/types/selection.type.mjs} +0 -0
  39. package/{esm2015/lib/types/sort-direction.type.js → esm2020/lib/types/sort-direction.type.mjs} +0 -0
  40. package/{esm2015/lib/types/sort-prop-dir.type.js → esm2020/lib/types/sort-prop-dir.type.mjs} +1 -0
  41. package/{esm2015/lib/types/sort.type.js → esm2020/lib/types/sort.type.mjs} +0 -0
  42. package/{esm2015/lib/types/table-column.type.js → esm2020/lib/types/table-column.type.mjs} +1 -0
  43. package/{esm2015/lib/utils/camel-case.js → esm2020/lib/utils/camel-case.mjs} +0 -0
  44. package/{esm2015/lib/utils/column-helper.js → esm2020/lib/utils/column-helper.mjs} +0 -0
  45. package/{esm2015/lib/utils/column-prop-getters.js → esm2020/lib/utils/column-prop-getters.mjs} +0 -0
  46. package/{esm2015/lib/utils/column.js → esm2020/lib/utils/column.mjs} +0 -0
  47. package/{esm2015/lib/utils/elm-from-point.js → esm2020/lib/utils/elm-from-point.mjs} +0 -0
  48. package/{esm2015/lib/utils/id.js → esm2020/lib/utils/id.mjs} +0 -0
  49. package/{esm2015/lib/utils/keys.js → esm2020/lib/utils/keys.mjs} +0 -0
  50. package/{esm2015/lib/utils/math.js → esm2020/lib/utils/math.mjs} +0 -0
  51. package/esm2020/lib/utils/prefixes.mjs +38 -0
  52. package/{esm2015/lib/utils/row-height-cache.js → esm2020/lib/utils/row-height-cache.mjs} +0 -0
  53. package/{esm2015/lib/utils/selection.js → esm2020/lib/utils/selection.mjs} +0 -0
  54. package/{esm2015/lib/utils/sort.js → esm2020/lib/utils/sort.mjs} +0 -0
  55. package/{esm2015/lib/utils/throttle.js → esm2020/lib/utils/throttle.mjs} +0 -0
  56. package/{esm2015/lib/utils/translate.js → esm2020/lib/utils/translate.mjs} +0 -0
  57. package/{esm2015/lib/utils/tree.js → esm2020/lib/utils/tree.mjs} +0 -0
  58. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  59. package/{esm2015/swimlane-ngx-datatable.js → esm2020/swimlane-ngx-datatable.mjs} +0 -0
  60. package/fesm2015/{swimlane-ngx-datatable.js → swimlane-ngx-datatable.mjs} +4104 -3337
  61. package/fesm2015/swimlane-ngx-datatable.mjs.map +1 -0
  62. package/fesm2020/swimlane-ngx-datatable.mjs +5974 -0
  63. package/fesm2020/swimlane-ngx-datatable.mjs.map +1 -0
  64. package/lib/components/body/body-cell.component.d.ts +3 -0
  65. package/lib/components/body/body-group-header-template.directive.d.ts +3 -0
  66. package/lib/components/body/body-group-header.directive.d.ts +3 -0
  67. package/lib/components/body/body-row-wrapper.component.d.ts +3 -0
  68. package/lib/components/body/body-row.component.d.ts +3 -0
  69. package/lib/components/body/body.component.d.ts +3 -0
  70. package/lib/components/body/progress-bar.component.d.ts +3 -0
  71. package/lib/components/body/scroller.component.d.ts +3 -0
  72. package/lib/components/body/selection.component.d.ts +3 -0
  73. package/lib/components/body/summary/summary-row.component.d.ts +3 -0
  74. package/lib/components/columns/column-cell.directive.d.ts +3 -0
  75. package/lib/components/columns/column-header.directive.d.ts +3 -0
  76. package/lib/components/columns/column.directive.d.ts +3 -0
  77. package/lib/components/columns/tree.directive.d.ts +3 -0
  78. package/lib/components/datatable.component.d.ts +3 -0
  79. package/lib/components/footer/footer-template.directive.d.ts +3 -0
  80. package/lib/components/footer/footer.component.d.ts +3 -0
  81. package/lib/components/footer/footer.directive.d.ts +3 -0
  82. package/lib/components/footer/pager.component.d.ts +3 -0
  83. package/lib/components/header/header-cell.component.d.ts +3 -0
  84. package/lib/components/header/header.component.d.ts +3 -0
  85. package/lib/components/row-detail/row-detail-template.directive.d.ts +3 -0
  86. package/lib/components/row-detail/row-detail.directive.d.ts +3 -0
  87. package/lib/directives/draggable.directive.d.ts +3 -0
  88. package/lib/directives/long-press.directive.d.ts +3 -0
  89. package/lib/directives/orderable.directive.d.ts +3 -0
  90. package/lib/directives/resizeable.directive.d.ts +3 -0
  91. package/lib/directives/visibility.directive.d.ts +3 -0
  92. package/lib/ngx-datatable.module.d.ts +33 -0
  93. package/lib/services/column-changes.service.d.ts +3 -0
  94. package/lib/services/dimensions-helper.service.d.ts +3 -0
  95. package/lib/services/scrollbar-helper.service.d.ts +3 -0
  96. package/package.json +24 -12
  97. package/swimlane-ngx-datatable.d.ts +1 -0
  98. package/bundles/swimlane-ngx-datatable.umd.js +0 -5876
  99. package/bundles/swimlane-ngx-datatable.umd.js.map +0 -1
  100. package/bundles/swimlane-ngx-datatable.umd.min.js +0 -2
  101. package/bundles/swimlane-ngx-datatable.umd.min.js.map +0 -1
  102. package/esm2015/lib/components/body/body-cell.component.js +0 -361
  103. package/esm2015/lib/components/body/body-group-header-template.directive.js +0 -15
  104. package/esm2015/lib/components/body/body-group-header.directive.js +0 -54
  105. package/esm2015/lib/components/body/body-row-wrapper.component.js +0 -106
  106. package/esm2015/lib/components/body/body-row.component.js +0 -212
  107. package/esm2015/lib/components/body/body.component.js +0 -713
  108. package/esm2015/lib/components/body/progress-bar.component.js +0 -17
  109. package/esm2015/lib/components/body/scroller.component.js +0 -83
  110. package/esm2015/lib/components/body/selection.component.js +0 -140
  111. package/esm2015/lib/components/body/summary/summary-row.component.js +0 -81
  112. package/esm2015/lib/components/columns/column-cell.directive.js +0 -13
  113. package/esm2015/lib/components/columns/column-header.directive.js +0 -13
  114. package/esm2015/lib/components/columns/column.directive.js +0 -65
  115. package/esm2015/lib/components/columns/tree.directive.js +0 -13
  116. package/esm2015/lib/components/datatable.component.js +0 -925
  117. package/esm2015/lib/components/footer/footer-template.directive.js +0 -13
  118. package/esm2015/lib/components/footer/footer.component.js +0 -75
  119. package/esm2015/lib/components/footer/footer.directive.js +0 -22
  120. package/esm2015/lib/components/footer/pager.component.js +0 -136
  121. package/esm2015/lib/components/header/header-cell.component.js +0 -191
  122. package/esm2015/lib/components/header/header.component.js +0 -295
  123. package/esm2015/lib/components/row-detail/row-detail-template.directive.js +0 -15
  124. package/esm2015/lib/components/row-detail/row-detail.directive.js +0 -55
  125. package/esm2015/lib/directives/draggable.directive.js +0 -102
  126. package/esm2015/lib/directives/long-press.directive.js +0 -103
  127. package/esm2015/lib/directives/orderable.directive.js +0 -131
  128. package/esm2015/lib/directives/resizeable.directive.js +0 -89
  129. package/esm2015/lib/directives/visibility.directive.js +0 -62
  130. package/esm2015/lib/ngx-datatable.module.js +0 -96
  131. package/esm2015/lib/services/column-changes.service.js +0 -21
  132. package/esm2015/lib/services/dimensions-helper.service.js +0 -14
  133. package/esm2015/lib/services/scrollbar-helper.service.js +0 -34
  134. package/esm2015/lib/utils/prefixes.js +0 -40
  135. package/fesm2015/swimlane-ngx-datatable.js.map +0 -1
  136. package/swimlane-ngx-datatable.metadata.json +0 -1
@@ -0,0 +1,14 @@
1
+ import { Directive } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class DataTableFooterTemplateDirective {
4
+ constructor(template) {
5
+ this.template = template;
6
+ }
7
+ }
8
+ DataTableFooterTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DataTableFooterTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
9
+ DataTableFooterTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: DataTableFooterTemplateDirective, selector: "[ngx-datatable-footer-template]", ngImport: i0 });
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DataTableFooterTemplateDirective, decorators: [{
11
+ type: Directive,
12
+ args: [{ selector: '[ngx-datatable-footer-template]' }]
13
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9vdGVyLXRlbXBsYXRlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N3aW1sYW5lL25neC1kYXRhdGFibGUvc3JjL2xpYi9jb21wb25lbnRzL2Zvb3Rlci9mb290ZXItdGVtcGxhdGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWUsTUFBTSxlQUFlLENBQUM7O0FBR3ZELE1BQU0sT0FBTyxnQ0FBZ0M7SUFDM0MsWUFBbUIsUUFBMEI7UUFBMUIsYUFBUSxHQUFSLFFBQVEsQ0FBa0I7SUFBRyxDQUFDOzs2SEFEdEMsZ0NBQWdDO2lIQUFoQyxnQ0FBZ0M7MkZBQWhDLGdDQUFnQztrQkFENUMsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSxpQ0FBaUMsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW25neC1kYXRhdGFibGUtZm9vdGVyLXRlbXBsYXRlXScgfSlcbmV4cG9ydCBjbGFzcyBEYXRhVGFibGVGb290ZXJUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pikge31cbn1cbiJdfQ==
@@ -0,0 +1,128 @@
1
+ import { Component, Output, EventEmitter, ChangeDetectionStrategy, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "./pager.component";
4
+ import * as i2 from "@angular/common";
5
+ export class DataTableFooterComponent {
6
+ constructor() {
7
+ this.selectedCount = 0;
8
+ this.page = new EventEmitter();
9
+ }
10
+ get isVisible() {
11
+ return this.rowCount / this.pageSize > 1;
12
+ }
13
+ get curPage() {
14
+ return this.offset + 1;
15
+ }
16
+ }
17
+ DataTableFooterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DataTableFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
18
+ DataTableFooterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: DataTableFooterComponent, selector: "datatable-footer", inputs: { footerHeight: "footerHeight", rowCount: "rowCount", pageSize: "pageSize", offset: "offset", pagerLeftArrowIcon: "pagerLeftArrowIcon", pagerRightArrowIcon: "pagerRightArrowIcon", pagerPreviousIcon: "pagerPreviousIcon", pagerNextIcon: "pagerNextIcon", totalMessage: "totalMessage", footerTemplate: "footerTemplate", selectedCount: "selectedCount", selectedMessage: "selectedMessage" }, outputs: { page: "page" }, host: { classAttribute: "datatable-footer" }, ngImport: i0, template: `
19
+ <div
20
+ class="datatable-footer-inner"
21
+ [ngClass]="{ 'selected-count': selectedMessage }"
22
+ [style.height.px]="footerHeight"
23
+ >
24
+ <ng-template
25
+ *ngIf="footerTemplate"
26
+ [ngTemplateOutlet]="footerTemplate.template"
27
+ [ngTemplateOutletContext]="{
28
+ rowCount: rowCount,
29
+ pageSize: pageSize,
30
+ selectedCount: selectedCount,
31
+ curPage: curPage,
32
+ offset: offset
33
+ }"
34
+ >
35
+ </ng-template>
36
+ <div class="page-count" *ngIf="!footerTemplate">
37
+ <span *ngIf="selectedMessage"> {{ selectedCount?.toLocaleString() }} {{ selectedMessage }} / </span>
38
+ {{ rowCount?.toLocaleString() }} {{ totalMessage }}
39
+ </div>
40
+ <datatable-pager
41
+ *ngIf="!footerTemplate"
42
+ [pagerLeftArrowIcon]="pagerLeftArrowIcon"
43
+ [pagerRightArrowIcon]="pagerRightArrowIcon"
44
+ [pagerPreviousIcon]="pagerPreviousIcon"
45
+ [pagerNextIcon]="pagerNextIcon"
46
+ [page]="curPage"
47
+ [size]="pageSize"
48
+ [count]="rowCount"
49
+ [hidden]="!isVisible"
50
+ (change)="page.emit($event)"
51
+ >
52
+ </datatable-pager>
53
+ </div>
54
+ `, isInline: true, components: [{ type: i1.DataTablePagerComponent, selector: "datatable-pager", inputs: ["pagerLeftArrowIcon", "pagerRightArrowIcon", "pagerPreviousIcon", "pagerNextIcon", "size", "count", "page"], outputs: ["change"] }], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
55
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DataTableFooterComponent, decorators: [{
56
+ type: Component,
57
+ args: [{
58
+ selector: 'datatable-footer',
59
+ template: `
60
+ <div
61
+ class="datatable-footer-inner"
62
+ [ngClass]="{ 'selected-count': selectedMessage }"
63
+ [style.height.px]="footerHeight"
64
+ >
65
+ <ng-template
66
+ *ngIf="footerTemplate"
67
+ [ngTemplateOutlet]="footerTemplate.template"
68
+ [ngTemplateOutletContext]="{
69
+ rowCount: rowCount,
70
+ pageSize: pageSize,
71
+ selectedCount: selectedCount,
72
+ curPage: curPage,
73
+ offset: offset
74
+ }"
75
+ >
76
+ </ng-template>
77
+ <div class="page-count" *ngIf="!footerTemplate">
78
+ <span *ngIf="selectedMessage"> {{ selectedCount?.toLocaleString() }} {{ selectedMessage }} / </span>
79
+ {{ rowCount?.toLocaleString() }} {{ totalMessage }}
80
+ </div>
81
+ <datatable-pager
82
+ *ngIf="!footerTemplate"
83
+ [pagerLeftArrowIcon]="pagerLeftArrowIcon"
84
+ [pagerRightArrowIcon]="pagerRightArrowIcon"
85
+ [pagerPreviousIcon]="pagerPreviousIcon"
86
+ [pagerNextIcon]="pagerNextIcon"
87
+ [page]="curPage"
88
+ [size]="pageSize"
89
+ [count]="rowCount"
90
+ [hidden]="!isVisible"
91
+ (change)="page.emit($event)"
92
+ >
93
+ </datatable-pager>
94
+ </div>
95
+ `,
96
+ host: {
97
+ class: 'datatable-footer'
98
+ },
99
+ changeDetection: ChangeDetectionStrategy.OnPush
100
+ }]
101
+ }], propDecorators: { footerHeight: [{
102
+ type: Input
103
+ }], rowCount: [{
104
+ type: Input
105
+ }], pageSize: [{
106
+ type: Input
107
+ }], offset: [{
108
+ type: Input
109
+ }], pagerLeftArrowIcon: [{
110
+ type: Input
111
+ }], pagerRightArrowIcon: [{
112
+ type: Input
113
+ }], pagerPreviousIcon: [{
114
+ type: Input
115
+ }], pagerNextIcon: [{
116
+ type: Input
117
+ }], totalMessage: [{
118
+ type: Input
119
+ }], footerTemplate: [{
120
+ type: Input
121
+ }], selectedCount: [{
122
+ type: Input
123
+ }], selectedMessage: [{
124
+ type: Input
125
+ }], page: [{
126
+ type: Output
127
+ }] } });
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9vdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N3aW1sYW5lL25neC1kYXRhdGFibGUvc3JjL2xpYi9jb21wb25lbnRzL2Zvb3Rlci9mb290ZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSx1QkFBdUIsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUE4Q2hHLE1BQU0sT0FBTyx3QkFBd0I7SUE1Q3JDO1FBd0RXLGtCQUFhLEdBQVcsQ0FBQyxDQUFDO1FBR3pCLFNBQUksR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztLQVN4RDtJQVBDLElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUN6QixDQUFDOztxSEF2QlUsd0JBQXdCO3lHQUF4Qix3QkFBd0IsMmdCQTFDekI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9DVDsyRkFNVSx3QkFBd0I7a0JBNUNwQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0NUO29CQUNELElBQUksRUFBRTt3QkFDSixLQUFLLEVBQUUsa0JBQWtCO3FCQUMxQjtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQ7OEJBRVUsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFFSSxJQUFJO3NCQUFiLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGF0YWJsZUZvb3RlckRpcmVjdGl2ZSB9IGZyb20gJy4vZm9vdGVyLmRpcmVjdGl2ZSc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYXRhdGFibGUtZm9vdGVyJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImRhdGF0YWJsZS1mb290ZXItaW5uZXJcIlxuICAgICAgW25nQ2xhc3NdPVwieyAnc2VsZWN0ZWQtY291bnQnOiBzZWxlY3RlZE1lc3NhZ2UgfVwiXG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImZvb3RlckhlaWdodFwiXG4gICAgPlxuICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICpuZ0lmPVwiZm9vdGVyVGVtcGxhdGVcIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJmb290ZXJUZW1wbGF0ZS50ZW1wbGF0ZVwiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgcm93Q291bnQ6IHJvd0NvdW50LFxuICAgICAgICAgIHBhZ2VTaXplOiBwYWdlU2l6ZSxcbiAgICAgICAgICBzZWxlY3RlZENvdW50OiBzZWxlY3RlZENvdW50LFxuICAgICAgICAgIGN1clBhZ2U6IGN1clBhZ2UsXG4gICAgICAgICAgb2Zmc2V0OiBvZmZzZXRcbiAgICAgICAgfVwiXG4gICAgICA+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBjbGFzcz1cInBhZ2UtY291bnRcIiAqbmdJZj1cIiFmb290ZXJUZW1wbGF0ZVwiPlxuICAgICAgICA8c3BhbiAqbmdJZj1cInNlbGVjdGVkTWVzc2FnZVwiPiB7eyBzZWxlY3RlZENvdW50Py50b0xvY2FsZVN0cmluZygpIH19IHt7IHNlbGVjdGVkTWVzc2FnZSB9fSAvIDwvc3Bhbj5cbiAgICAgICAge3sgcm93Q291bnQ/LnRvTG9jYWxlU3RyaW5nKCkgfX0ge3sgdG90YWxNZXNzYWdlIH19XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkYXRhdGFibGUtcGFnZXJcbiAgICAgICAgKm5nSWY9XCIhZm9vdGVyVGVtcGxhdGVcIlxuICAgICAgICBbcGFnZXJMZWZ0QXJyb3dJY29uXT1cInBhZ2VyTGVmdEFycm93SWNvblwiXG4gICAgICAgIFtwYWdlclJpZ2h0QXJyb3dJY29uXT1cInBhZ2VyUmlnaHRBcnJvd0ljb25cIlxuICAgICAgICBbcGFnZXJQcmV2aW91c0ljb25dPVwicGFnZXJQcmV2aW91c0ljb25cIlxuICAgICAgICBbcGFnZXJOZXh0SWNvbl09XCJwYWdlck5leHRJY29uXCJcbiAgICAgICAgW3BhZ2VdPVwiY3VyUGFnZVwiXG4gICAgICAgIFtzaXplXT1cInBhZ2VTaXplXCJcbiAgICAgICAgW2NvdW50XT1cInJvd0NvdW50XCJcbiAgICAgICAgW2hpZGRlbl09XCIhaXNWaXNpYmxlXCJcbiAgICAgICAgKGNoYW5nZSk9XCJwYWdlLmVtaXQoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICA8L2RhdGF0YWJsZS1wYWdlcj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnZGF0YXRhYmxlLWZvb3RlcidcbiAgfSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRGF0YVRhYmxlRm9vdGVyQ29tcG9uZW50IHtcbiAgQElucHV0KCkgZm9vdGVySGVpZ2h0OiBudW1iZXI7XG4gIEBJbnB1dCgpIHJvd0NvdW50OiBudW1iZXI7XG4gIEBJbnB1dCgpIHBhZ2VTaXplOiBudW1iZXI7XG4gIEBJbnB1dCgpIG9mZnNldDogbnVtYmVyO1xuICBASW5wdXQoKSBwYWdlckxlZnRBcnJvd0ljb246IHN0cmluZztcbiAgQElucHV0KCkgcGFnZXJSaWdodEFycm93SWNvbjogc3RyaW5nO1xuICBASW5wdXQoKSBwYWdlclByZXZpb3VzSWNvbjogc3RyaW5nO1xuICBASW5wdXQoKSBwYWdlck5leHRJY29uOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRvdGFsTWVzc2FnZTogc3RyaW5nO1xuICBASW5wdXQoKSBmb290ZXJUZW1wbGF0ZTogRGF0YXRhYmxlRm9vdGVyRGlyZWN0aXZlO1xuXG4gIEBJbnB1dCgpIHNlbGVjdGVkQ291bnQ6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIHNlbGVjdGVkTWVzc2FnZTogc3RyaW5nIHwgYm9vbGVhbjtcblxuICBAT3V0cHV0KCkgcGFnZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgZ2V0IGlzVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yb3dDb3VudCAvIHRoaXMucGFnZVNpemUgPiAxO1xuICB9XG5cbiAgZ2V0IGN1clBhZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5vZmZzZXQgKyAxO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,35 @@
1
+ import { Input, Directive, TemplateRef, ContentChild } from '@angular/core';
2
+ import { DataTableFooterTemplateDirective } from './footer-template.directive';
3
+ import * as i0 from "@angular/core";
4
+ export class DatatableFooterDirective {
5
+ get template() {
6
+ return this._templateInput || this._templateQuery;
7
+ }
8
+ }
9
+ DatatableFooterDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DatatableFooterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
10
+ DatatableFooterDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: DatatableFooterDirective, selector: "ngx-datatable-footer", inputs: { footerHeight: "footerHeight", totalMessage: "totalMessage", selectedMessage: "selectedMessage", pagerLeftArrowIcon: "pagerLeftArrowIcon", pagerRightArrowIcon: "pagerRightArrowIcon", pagerPreviousIcon: "pagerPreviousIcon", pagerNextIcon: "pagerNextIcon", _templateInput: ["template", "_templateInput"] }, queries: [{ propertyName: "_templateQuery", first: true, predicate: DataTableFooterTemplateDirective, descendants: true, read: TemplateRef }], ngImport: i0 });
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DatatableFooterDirective, decorators: [{
12
+ type: Directive,
13
+ args: [{ selector: 'ngx-datatable-footer' }]
14
+ }], propDecorators: { footerHeight: [{
15
+ type: Input
16
+ }], totalMessage: [{
17
+ type: Input
18
+ }], selectedMessage: [{
19
+ type: Input
20
+ }], pagerLeftArrowIcon: [{
21
+ type: Input
22
+ }], pagerRightArrowIcon: [{
23
+ type: Input
24
+ }], pagerPreviousIcon: [{
25
+ type: Input
26
+ }], pagerNextIcon: [{
27
+ type: Input
28
+ }], _templateInput: [{
29
+ type: Input,
30
+ args: ['template']
31
+ }], _templateQuery: [{
32
+ type: ContentChild,
33
+ args: [DataTableFooterTemplateDirective, { read: TemplateRef }]
34
+ }] } });
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9vdGVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N3aW1sYW5lL25neC1kYXRhdGFibGUvc3JjL2xpYi9jb21wb25lbnRzL2Zvb3Rlci9mb290ZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7O0FBRy9FLE1BQU0sT0FBTyx3QkFBd0I7SUFlbkMsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDcEQsQ0FBQzs7cUhBakJVLHdCQUF3Qjt5R0FBeEIsd0JBQXdCLGthQVlyQixnQ0FBZ0MsMkJBQVUsV0FBVzsyRkFaeEQsd0JBQXdCO2tCQURwQyxTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLHNCQUFzQixFQUFFOzhCQUVwQyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdOLGNBQWM7c0JBRGIsS0FBSzt1QkFBQyxVQUFVO2dCQUlqQixjQUFjO3NCQURiLFlBQVk7dUJBQUMsZ0NBQWdDLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5wdXQsIERpcmVjdGl2ZSwgVGVtcGxhdGVSZWYsIENvbnRlbnRDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0YVRhYmxlRm9vdGVyVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuL2Zvb3Rlci10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICduZ3gtZGF0YXRhYmxlLWZvb3RlcicgfSlcbmV4cG9ydCBjbGFzcyBEYXRhdGFibGVGb290ZXJEaXJlY3RpdmUge1xuICBASW5wdXQoKSBmb290ZXJIZWlnaHQ6IG51bWJlcjtcbiAgQElucHV0KCkgdG90YWxNZXNzYWdlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNlbGVjdGVkTWVzc2FnZTogc3RyaW5nIHwgYm9vbGVhbjtcbiAgQElucHV0KCkgcGFnZXJMZWZ0QXJyb3dJY29uOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBhZ2VyUmlnaHRBcnJvd0ljb246IHN0cmluZztcbiAgQElucHV0KCkgcGFnZXJQcmV2aW91c0ljb246IHN0cmluZztcbiAgQElucHV0KCkgcGFnZXJOZXh0SWNvbjogc3RyaW5nO1xuXG4gIEBJbnB1dCgndGVtcGxhdGUnKVxuICBfdGVtcGxhdGVJbnB1dDogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAQ29udGVudENoaWxkKERhdGFUYWJsZUZvb3RlclRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIF90ZW1wbGF0ZVF1ZXJ5OiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIGdldCB0ZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGVJbnB1dCB8fCB0aGlzLl90ZW1wbGF0ZVF1ZXJ5O1xuICB9XG59XG4iXX0=
@@ -0,0 +1,181 @@
1
+ import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ export class DataTablePagerComponent {
5
+ constructor() {
6
+ this.change = new EventEmitter();
7
+ this._count = 0;
8
+ this._page = 1;
9
+ this._size = 0;
10
+ }
11
+ set size(val) {
12
+ this._size = val;
13
+ this.pages = this.calcPages();
14
+ }
15
+ get size() {
16
+ return this._size;
17
+ }
18
+ set count(val) {
19
+ this._count = val;
20
+ this.pages = this.calcPages();
21
+ }
22
+ get count() {
23
+ return this._count;
24
+ }
25
+ set page(val) {
26
+ this._page = val;
27
+ this.pages = this.calcPages();
28
+ }
29
+ get page() {
30
+ return this._page;
31
+ }
32
+ get totalPages() {
33
+ const count = this.size < 1 ? 1 : Math.ceil(this.count / this.size);
34
+ return Math.max(count || 0, 1);
35
+ }
36
+ canPrevious() {
37
+ return this.page > 1;
38
+ }
39
+ canNext() {
40
+ return this.page < this.totalPages;
41
+ }
42
+ prevPage() {
43
+ this.selectPage(this.page - 1);
44
+ }
45
+ nextPage() {
46
+ this.selectPage(this.page + 1);
47
+ }
48
+ selectPage(page) {
49
+ if (page > 0 && page <= this.totalPages && page !== this.page) {
50
+ this.page = page;
51
+ this.change.emit({
52
+ page
53
+ });
54
+ }
55
+ }
56
+ calcPages(page) {
57
+ const pages = [];
58
+ let startPage = 1;
59
+ let endPage = this.totalPages;
60
+ const maxSize = 5;
61
+ const isMaxSized = maxSize < this.totalPages;
62
+ page = page || this.page;
63
+ if (isMaxSized) {
64
+ startPage = page - Math.floor(maxSize / 2);
65
+ endPage = page + Math.floor(maxSize / 2);
66
+ if (startPage < 1) {
67
+ startPage = 1;
68
+ endPage = Math.min(startPage + maxSize - 1, this.totalPages);
69
+ }
70
+ else if (endPage > this.totalPages) {
71
+ startPage = Math.max(this.totalPages - maxSize + 1, 1);
72
+ endPage = this.totalPages;
73
+ }
74
+ }
75
+ for (let num = startPage; num <= endPage; num++) {
76
+ pages.push({
77
+ number: num,
78
+ text: num
79
+ });
80
+ }
81
+ return pages;
82
+ }
83
+ }
84
+ DataTablePagerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DataTablePagerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
85
+ DataTablePagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: DataTablePagerComponent, selector: "datatable-pager", inputs: { pagerLeftArrowIcon: "pagerLeftArrowIcon", pagerRightArrowIcon: "pagerRightArrowIcon", pagerPreviousIcon: "pagerPreviousIcon", pagerNextIcon: "pagerNextIcon", size: "size", count: "count", page: "page" }, outputs: { change: "change" }, host: { classAttribute: "datatable-pager" }, ngImport: i0, template: `
86
+ <ul class="pager">
87
+ <li [class.disabled]="!canPrevious()">
88
+ <a role="button" aria-label="go to first page" href="javascript:void(0)" (click)="selectPage(1)">
89
+ <i class="{{ pagerPreviousIcon }}"></i>
90
+ </a>
91
+ </li>
92
+ <li [class.disabled]="!canPrevious()">
93
+ <a role="button" aria-label="go to previous page" href="javascript:void(0)" (click)="prevPage()">
94
+ <i class="{{ pagerLeftArrowIcon }}"></i>
95
+ </a>
96
+ </li>
97
+ <li
98
+ role="button"
99
+ [attr.aria-label]="'page ' + pg.number"
100
+ class="pages"
101
+ *ngFor="let pg of pages"
102
+ [class.active]="pg.number === page"
103
+ >
104
+ <a href="javascript:void(0)" (click)="selectPage(pg.number)">
105
+ {{ pg.text }}
106
+ </a>
107
+ </li>
108
+ <li [class.disabled]="!canNext()">
109
+ <a role="button" aria-label="go to next page" href="javascript:void(0)" (click)="nextPage()">
110
+ <i class="{{ pagerRightArrowIcon }}"></i>
111
+ </a>
112
+ </li>
113
+ <li [class.disabled]="!canNext()">
114
+ <a role="button" aria-label="go to last page" href="javascript:void(0)" (click)="selectPage(totalPages)">
115
+ <i class="{{ pagerNextIcon }}"></i>
116
+ </a>
117
+ </li>
118
+ </ul>
119
+ `, isInline: true, directives: [{ type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
120
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DataTablePagerComponent, decorators: [{
121
+ type: Component,
122
+ args: [{
123
+ selector: 'datatable-pager',
124
+ template: `
125
+ <ul class="pager">
126
+ <li [class.disabled]="!canPrevious()">
127
+ <a role="button" aria-label="go to first page" href="javascript:void(0)" (click)="selectPage(1)">
128
+ <i class="{{ pagerPreviousIcon }}"></i>
129
+ </a>
130
+ </li>
131
+ <li [class.disabled]="!canPrevious()">
132
+ <a role="button" aria-label="go to previous page" href="javascript:void(0)" (click)="prevPage()">
133
+ <i class="{{ pagerLeftArrowIcon }}"></i>
134
+ </a>
135
+ </li>
136
+ <li
137
+ role="button"
138
+ [attr.aria-label]="'page ' + pg.number"
139
+ class="pages"
140
+ *ngFor="let pg of pages"
141
+ [class.active]="pg.number === page"
142
+ >
143
+ <a href="javascript:void(0)" (click)="selectPage(pg.number)">
144
+ {{ pg.text }}
145
+ </a>
146
+ </li>
147
+ <li [class.disabled]="!canNext()">
148
+ <a role="button" aria-label="go to next page" href="javascript:void(0)" (click)="nextPage()">
149
+ <i class="{{ pagerRightArrowIcon }}"></i>
150
+ </a>
151
+ </li>
152
+ <li [class.disabled]="!canNext()">
153
+ <a role="button" aria-label="go to last page" href="javascript:void(0)" (click)="selectPage(totalPages)">
154
+ <i class="{{ pagerNextIcon }}"></i>
155
+ </a>
156
+ </li>
157
+ </ul>
158
+ `,
159
+ host: {
160
+ class: 'datatable-pager'
161
+ },
162
+ changeDetection: ChangeDetectionStrategy.OnPush
163
+ }]
164
+ }], propDecorators: { pagerLeftArrowIcon: [{
165
+ type: Input
166
+ }], pagerRightArrowIcon: [{
167
+ type: Input
168
+ }], pagerPreviousIcon: [{
169
+ type: Input
170
+ }], pagerNextIcon: [{
171
+ type: Input
172
+ }], size: [{
173
+ type: Input
174
+ }], count: [{
175
+ type: Input
176
+ }], page: [{
177
+ type: Input
178
+ }], change: [{
179
+ type: Output
180
+ }] } });
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3dpbWxhbmUvbmd4LWRhdGF0YWJsZS9zcmMvbGliL2NvbXBvbmVudHMvZm9vdGVyL3BhZ2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUE0Q2hHLE1BQU0sT0FBTyx1QkFBdUI7SUExQ3BDO1FBbUZZLFdBQU0sR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUV6RCxXQUFNLEdBQVcsQ0FBQyxDQUFDO1FBQ25CLFVBQUssR0FBVyxDQUFDLENBQUM7UUFDbEIsVUFBSyxHQUFXLENBQUMsQ0FBQztLQTREbkI7SUFuR0MsSUFDSSxJQUFJLENBQUMsR0FBVztRQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxJQUNJLEtBQUssQ0FBQyxHQUFXO1FBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELElBQ0ksSUFBSSxDQUFDLEdBQVc7UUFDbEIsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0NUOzJGQU1VLHVCQUF1QjtrQkExQ25DLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0NUO29CQUNELElBQUksRUFBRTt3QkFDSixLQUFLLEVBQUUsaUJBQWlCO3FCQUN6QjtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQ7OEJBRVUsa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFHRixJQUFJO3NCQURQLEtBQUs7Z0JBV0YsS0FBSztzQkFEUixLQUFLO2dCQVdGLElBQUk7c0JBRFAsS0FBSztnQkFlSSxNQUFNO3NCQUFmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGF0YXRhYmxlLXBhZ2VyJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8dWwgY2xhc3M9XCJwYWdlclwiPlxuICAgICAgPGxpIFtjbGFzcy5kaXNhYmxlZF09XCIhY2FuUHJldmlvdXMoKVwiPlxuICAgICAgICA8YSByb2xlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cImdvIHRvIGZpcnN0IHBhZ2VcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgKGNsaWNrKT1cInNlbGVjdFBhZ2UoMSlcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cInt7IHBhZ2VyUHJldmlvdXNJY29uIH19XCI+PC9pPlxuICAgICAgICA8L2E+XG4gICAgICA8L2xpPlxuICAgICAgPGxpIFtjbGFzcy5kaXNhYmxlZF09XCIhY2FuUHJldmlvdXMoKVwiPlxuICAgICAgICA8YSByb2xlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cImdvIHRvIHByZXZpb3VzIHBhZ2VcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgKGNsaWNrKT1cInByZXZQYWdlKClcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cInt7IHBhZ2VyTGVmdEFycm93SWNvbiB9fVwiPjwvaT5cbiAgICAgICAgPC9hPlxuICAgICAgPC9saT5cbiAgICAgIDxsaVxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIncGFnZSAnICsgcGcubnVtYmVyXCJcbiAgICAgICAgY2xhc3M9XCJwYWdlc1wiXG4gICAgICAgICpuZ0Zvcj1cImxldCBwZyBvZiBwYWdlc1wiXG4gICAgICAgIFtjbGFzcy5hY3RpdmVdPVwicGcubnVtYmVyID09PSBwYWdlXCJcbiAgICAgID5cbiAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIChjbGljayk9XCJzZWxlY3RQYWdlKHBnLm51bWJlcilcIj5cbiAgICAgICAgICB7eyBwZy50ZXh0IH19XG4gICAgICAgIDwvYT5cbiAgICAgIDwvbGk+XG4gICAgICA8bGkgW2NsYXNzLmRpc2FibGVkXT1cIiFjYW5OZXh0KClcIj5cbiAgICAgICAgPGEgcm9sZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJnbyB0byBuZXh0IHBhZ2VcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgKGNsaWNrKT1cIm5leHRQYWdlKClcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cInt7IHBhZ2VyUmlnaHRBcnJvd0ljb24gfX1cIj48L2k+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvbGk+XG4gICAgICA8bGkgW2NsYXNzLmRpc2FibGVkXT1cIiFjYW5OZXh0KClcIj5cbiAgICAgICAgPGEgcm9sZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJnbyB0byBsYXN0IHBhZ2VcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgKGNsaWNrKT1cInNlbGVjdFBhZ2UodG90YWxQYWdlcylcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cInt7IHBhZ2VyTmV4dEljb24gfX1cIj48L2k+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgYCxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnZGF0YXRhYmxlLXBhZ2VyJ1xuICB9LFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBEYXRhVGFibGVQYWdlckNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHBhZ2VyTGVmdEFycm93SWNvbjogc3RyaW5nO1xuICBASW5wdXQoKSBwYWdlclJpZ2h0QXJyb3dJY29uOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBhZ2VyUHJldmlvdXNJY29uOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBhZ2VyTmV4dEljb246IHN0cmluZztcblxuICBASW5wdXQoKVxuICBzZXQgc2l6ZSh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuX3NpemUgPSB2YWw7XG4gICAgdGhpcy5wYWdlcyA9IHRoaXMuY2FsY1BhZ2VzKCk7XG4gIH1cblxuICBnZXQgc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9zaXplO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGNvdW50KHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5fY291bnQgPSB2YWw7XG4gICAgdGhpcy5wYWdlcyA9IHRoaXMuY2FsY1BhZ2VzKCk7XG4gIH1cblxuICBnZXQgY291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY291bnQ7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgcGFnZSh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuX3BhZ2UgPSB2YWw7XG4gICAgdGhpcy5wYWdlcyA9IHRoaXMuY2FsY1BhZ2VzKCk7XG4gIH1cblxuICBnZXQgcGFnZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9wYWdlO1xuICB9XG5cbiAgZ2V0IHRvdGFsUGFnZXMoKTogbnVtYmVyIHtcbiAgICBjb25zdCBjb3VudCA9IHRoaXMuc2l6ZSA8IDEgPyAxIDogTWF0aC5jZWlsKHRoaXMuY291bnQgLyB0aGlzLnNpemUpO1xuICAgIHJldHVybiBNYXRoLm1heChjb3VudCB8fCAwLCAxKTtcbiAgfVxuXG4gIEBPdXRwdXQoKSBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIF9jb3VudDogbnVtYmVyID0gMDtcbiAgX3BhZ2U6IG51bWJlciA9IDE7XG4gIF9zaXplOiBudW1iZXIgPSAwO1xuICBwYWdlczogYW55O1xuXG4gIGNhblByZXZpb3VzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBhZ2UgPiAxO1xuICB9XG5cbiAgY2FuTmV4dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlIDwgdGhpcy50b3RhbFBhZ2VzO1xuICB9XG5cbiAgcHJldlBhZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RQYWdlKHRoaXMucGFnZSAtIDEpO1xuICB9XG5cbiAgbmV4dFBhZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RQYWdlKHRoaXMucGFnZSArIDEpO1xuICB9XG5cbiAgc2VsZWN0UGFnZShwYWdlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAocGFnZSA+IDAgJiYgcGFnZSA8PSB0aGlzLnRvdGFsUGFnZXMgJiYgcGFnZSAhPT0gdGhpcy5wYWdlKSB7XG4gICAgICB0aGlzLnBhZ2UgPSBwYWdlO1xuXG4gICAgICB0aGlzLmNoYW5nZS5lbWl0KHtcbiAgICAgICAgcGFnZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2FsY1BhZ2VzKHBhZ2U/OiBudW1iZXIpOiBhbnlbXSB7XG4gICAgY29uc3QgcGFnZXMgPSBbXTtcbiAgICBsZXQgc3RhcnRQYWdlID0gMTtcbiAgICBsZXQgZW5kUGFnZSA9IHRoaXMudG90YWxQYWdlcztcbiAgICBjb25zdCBtYXhTaXplID0gNTtcbiAgICBjb25zdCBpc01heFNpemVkID0gbWF4U2l6ZSA8IHRoaXMudG90YWxQYWdlcztcblxuICAgIHBhZ2UgPSBwYWdlIHx8IHRoaXMucGFnZTtcblxuICAgIGlmIChpc01heFNpemVkKSB7XG4gICAgICBzdGFydFBhZ2UgPSBwYWdlIC0gTWF0aC5mbG9vcihtYXhTaXplIC8gMik7XG4gICAgICBlbmRQYWdlID0gcGFnZSArIE1hdGguZmxvb3IobWF4U2l6ZSAvIDIpO1xuXG4gICAgICBpZiAoc3RhcnRQYWdlIDwgMSkge1xuICAgICAgICBzdGFydFBhZ2UgPSAxO1xuICAgICAgICBlbmRQYWdlID0gTWF0aC5taW4oc3RhcnRQYWdlICsgbWF4U2l6ZSAtIDEsIHRoaXMudG90YWxQYWdlcyk7XG4gICAgICB9IGVsc2UgaWYgKGVuZFBhZ2UgPiB0aGlzLnRvdGFsUGFnZXMpIHtcbiAgICAgICAgc3RhcnRQYWdlID0gTWF0aC5tYXgodGhpcy50b3RhbFBhZ2VzIC0gbWF4U2l6ZSArIDEsIDEpO1xuICAgICAgICBlbmRQYWdlID0gdGhpcy50b3RhbFBhZ2VzO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IG51bSA9IHN0YXJ0UGFnZTsgbnVtIDw9IGVuZFBhZ2U7IG51bSsrKSB7XG4gICAgICBwYWdlcy5wdXNoKHtcbiAgICAgICAgbnVtYmVyOiBudW0sXG4gICAgICAgIHRleHQ6IDxzdHJpbmc+KDxhbnk+bnVtKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhZ2VzO1xuICB9XG59XG4iXX0=