@stemy/ngx-utils 12.1.3 → 12.1.6

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 (119) hide show
  1. package/bundles/stemy-ngx-utils.umd.js +32 -1
  2. package/bundles/stemy-ngx-utils.umd.js.map +1 -1
  3. package/esm2015/ngx-utils/components/unordered-list/unordered-list.component.js +2 -2
  4. package/esm2015/ngx-utils/services/acl.service.js +3 -1
  5. package/esm2015/ngx-utils/utils/array.utils.js +8 -1
  6. package/esm2015/ngx-utils/utils/file-system.js +20 -0
  7. package/esm2015/public_api.js +2 -1
  8. package/esm2020/ngx-utils/common-types.mjs +117 -0
  9. package/esm2020/ngx-utils/components/dynamic-table/dynamic-table.component.mjs +178 -0
  10. package/esm2020/ngx-utils/components/pagination-menu/pagination-menu.component.mjs +101 -0
  11. package/esm2020/ngx-utils/components/unordered-list/unordered-list.component.mjs +65 -0
  12. package/esm2020/ngx-utils/directives/async-method.base.mjs +78 -0
  13. package/esm2020/ngx-utils/directives/async-method.directive.mjs +21 -0
  14. package/esm2020/ngx-utils/directives/background.directive.mjs +51 -0
  15. package/esm2020/ngx-utils/directives/dynamic-table-template.directive.mjs +20 -0
  16. package/esm2020/ngx-utils/directives/global-template.directive.mjs +30 -0
  17. package/esm2020/ngx-utils/directives/icon.directive.mjs +67 -0
  18. package/esm2020/ngx-utils/directives/ngx-template-outlet.directive.mjs +90 -0
  19. package/esm2020/ngx-utils/directives/pagination-item.directive.mjs +33 -0
  20. package/esm2020/ngx-utils/directives/pagination.directive.mjs +83 -0
  21. package/esm2020/ngx-utils/directives/resource-if.directive.mjs +50 -0
  22. package/esm2020/ngx-utils/directives/sticky-class.directive.mjs +34 -0
  23. package/esm2020/ngx-utils/directives/sticky.directive.mjs +55 -0
  24. package/esm2020/ngx-utils/directives/unordered-list-item.directive.mjs +77 -0
  25. package/esm2020/ngx-utils/directives/unordered-list-template.directive.mjs +26 -0
  26. package/esm2020/ngx-utils/ngx-utils.imports.mjs +165 -0
  27. package/esm2020/ngx-utils/ngx-utils.module.mjs +178 -0
  28. package/esm2020/ngx-utils/pipes/chunk.pipe.mjs +25 -0
  29. package/esm2020/ngx-utils/pipes/entries.pipe.mjs +28 -0
  30. package/esm2020/ngx-utils/pipes/extra-item-properties.pipe.mjs +31 -0
  31. package/esm2020/ngx-utils/pipes/filter.pipe.mjs +42 -0
  32. package/esm2020/ngx-utils/pipes/find.pipe.mjs +29 -0
  33. package/esm2020/ngx-utils/pipes/format-number.pipe.mjs +21 -0
  34. package/esm2020/ngx-utils/pipes/get-offset.pipe.mjs +17 -0
  35. package/esm2020/ngx-utils/pipes/get-type.pipe.mjs +16 -0
  36. package/esm2020/ngx-utils/pipes/global-template.pipe.mjs +41 -0
  37. package/esm2020/ngx-utils/pipes/group-by.pipe.mjs +27 -0
  38. package/esm2020/ngx-utils/pipes/is-type.pipe.mjs +16 -0
  39. package/esm2020/ngx-utils/pipes/join.pipe.mjs +19 -0
  40. package/esm2020/ngx-utils/pipes/keys.pipe.mjs +22 -0
  41. package/esm2020/ngx-utils/pipes/map.pipe.mjs +29 -0
  42. package/esm2020/ngx-utils/pipes/max.pipe.mjs +26 -0
  43. package/esm2020/ngx-utils/pipes/min.pipe.mjs +26 -0
  44. package/esm2020/ngx-utils/pipes/reduce.pipe.mjs +30 -0
  45. package/esm2020/ngx-utils/pipes/remap.pipe.mjs +32 -0
  46. package/esm2020/ngx-utils/pipes/replace.pipe.mjs +16 -0
  47. package/esm2020/ngx-utils/pipes/reverse.pipe.mjs +24 -0
  48. package/esm2020/ngx-utils/pipes/round.pipe.mjs +21 -0
  49. package/esm2020/ngx-utils/pipes/safe-html.pipe.mjs +34 -0
  50. package/esm2020/ngx-utils/pipes/translate.pipe.mjs +86 -0
  51. package/esm2020/ngx-utils/pipes/values.pipe.mjs +22 -0
  52. package/esm2020/ngx-utils/plugins/resize-event.plugin.mjs +59 -0
  53. package/esm2020/ngx-utils/plugins/scroll-event.plugin.mjs +39 -0
  54. package/esm2020/ngx-utils/services/acl.service.mjs +83 -0
  55. package/esm2020/ngx-utils/services/api.service.mjs +38 -0
  56. package/esm2020/ngx-utils/services/auth.service.mjs +14 -0
  57. package/esm2020/ngx-utils/services/base-http.client.mjs +47 -0
  58. package/esm2020/ngx-utils/services/base-http.service.mjs +298 -0
  59. package/esm2020/ngx-utils/services/config.service.mjs +116 -0
  60. package/esm2020/ngx-utils/services/error-handler.service.mjs +49 -0
  61. package/esm2020/ngx-utils/services/events.service.mjs +26 -0
  62. package/esm2020/ngx-utils/services/formatter.service.mjs +47 -0
  63. package/esm2020/ngx-utils/services/global-template.service.mjs +37 -0
  64. package/esm2020/ngx-utils/services/icon.service.mjs +26 -0
  65. package/esm2020/ngx-utils/services/language.service.mjs +113 -0
  66. package/esm2020/ngx-utils/services/open-api.service.mjs +40 -0
  67. package/esm2020/ngx-utils/services/promise.service.mjs +55 -0
  68. package/esm2020/ngx-utils/services/state.service.mjs +173 -0
  69. package/esm2020/ngx-utils/services/static-language.service.mjs +166 -0
  70. package/esm2020/ngx-utils/services/storage.service.mjs +49 -0
  71. package/esm2020/ngx-utils/services/toaster.service.mjs +32 -0
  72. package/esm2020/ngx-utils/services/translated-url.serializer.mjs +73 -0
  73. package/esm2020/ngx-utils/services/universal.service.mjs +78 -0
  74. package/esm2020/ngx-utils/utils/ajax-request-handler.mjs +40 -0
  75. package/esm2020/ngx-utils/utils/array.utils.mjs +100 -0
  76. package/esm2020/ngx-utils/utils/auth.guard.mjs +181 -0
  77. package/esm2020/ngx-utils/utils/canvas.utils.mjs +388 -0
  78. package/esm2020/ngx-utils/utils/date.utils.mjs +28 -0
  79. package/esm2020/ngx-utils/utils/file-system.mjs +20 -0
  80. package/esm2020/ngx-utils/utils/file.utils.mjs +90 -0
  81. package/esm2020/ngx-utils/utils/generic-value.mjs +20 -0
  82. package/esm2020/ngx-utils/utils/geometry.mjs +132 -0
  83. package/esm2020/ngx-utils/utils/initializer.mjs +20 -0
  84. package/esm2020/ngx-utils/utils/loader.utils.mjs +55 -0
  85. package/esm2020/ngx-utils/utils/math.utils.mjs +15 -0
  86. package/esm2020/ngx-utils/utils/object.utils.mjs +261 -0
  87. package/esm2020/ngx-utils/utils/observable.utils.mjs +63 -0
  88. package/esm2020/ngx-utils/utils/reflect.utils.mjs +33 -0
  89. package/esm2020/ngx-utils/utils/set.utils.mjs +20 -0
  90. package/esm2020/ngx-utils/utils/string.utils.mjs +41 -0
  91. package/esm2020/ngx-utils/utils/timer.utils.mjs +52 -0
  92. package/esm2020/ngx-utils/utils/unique.utils.mjs +24 -0
  93. package/esm2020/ngx-utils/utils/vector.mjs +77 -0
  94. package/esm2020/public_api.mjs +86 -0
  95. package/esm2020/stemy-ngx-utils.mjs +5 -0
  96. package/esm2020/tools/config.mjs +71 -0
  97. package/esm2020/tools/public_api.mjs +2 -0
  98. package/esm2020/tools/stemy-ngx-utils-tools.mjs +5 -0
  99. package/fesm2015/stemy-ngx-utils-tools.mjs +77 -0
  100. package/fesm2015/stemy-ngx-utils-tools.mjs.map +1 -0
  101. package/fesm2015/stemy-ngx-utils.js +31 -2
  102. package/fesm2015/stemy-ngx-utils.js.map +1 -1
  103. package/fesm2015/stemy-ngx-utils.mjs +5190 -0
  104. package/fesm2015/stemy-ngx-utils.mjs.map +1 -0
  105. package/fesm2020/stemy-ngx-utils-tools.mjs +77 -0
  106. package/fesm2020/stemy-ngx-utils-tools.mjs.map +1 -0
  107. package/fesm2020/stemy-ngx-utils.mjs +5121 -0
  108. package/fesm2020/stemy-ngx-utils.mjs.map +1 -0
  109. package/ngx-utils/utils/array.utils.d.ts +1 -0
  110. package/ngx-utils/utils/file-system.d.ts +16 -0
  111. package/package.json +1 -1
  112. package/public_api.d.ts +1 -0
  113. package/stemy-ngx-utils.metadata.json +1 -1
  114. package/tools/config.d.ts +7 -0
  115. package/tools/package.json +10 -0
  116. package/tools/public_api.d.ts +1 -0
  117. package/tools/stemy-ngx-utils-tools.d.ts +5 -0
  118. package/bundles/stemy-ngx-utils.umd.min.js +0 -16
  119. package/bundles/stemy-ngx-utils.umd.min.js.map +0 -1
@@ -0,0 +1,178 @@
1
+ import { Component, ContentChild, ContentChildren, Input, QueryList, TemplateRef, ViewChild } from "@angular/core";
2
+ import { PaginationItemContext } from "../../common-types";
3
+ import { ObjectUtils } from "../../utils/object.utils";
4
+ import { DynamicTableTemplateDirective } from "../../directives/dynamic-table-template.directive";
5
+ import { PaginationDirective } from "../../directives/pagination.directive";
6
+ import { UniqueUtils } from "../../utils/unique.utils";
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../pagination-menu/pagination-menu.component";
9
+ import * as i2 from "../../directives/pagination.directive";
10
+ import * as i3 from "@angular/common";
11
+ import * as i4 from "@angular/forms";
12
+ import * as i5 from "../../directives/ngx-template-outlet.directive";
13
+ import * as i6 from "../../directives/icon.directive";
14
+ import * as i7 from "../../directives/pagination-item.directive";
15
+ import * as i8 from "../../pipes/translate.pipe";
16
+ export class DynamicTableComponent {
17
+ constructor() {
18
+ this.loadData = (page, itemsPerPage) => {
19
+ const orderBy = this.orders[this.orderBy];
20
+ return this.dataLoader(page, itemsPerPage, orderBy, this.orderDescending, this.filter);
21
+ };
22
+ this.dataLoader = this.loadLocalData;
23
+ this.placeholder = "";
24
+ this.tableId = UniqueUtils.uuid();
25
+ this.templates = {};
26
+ this.filter = "";
27
+ this.orders = {};
28
+ }
29
+ get items() {
30
+ return !this.pagination ? [] : this.pagination.items;
31
+ }
32
+ static compare(orderBy, a, b) {
33
+ a = a.item ? a.item[orderBy] : null;
34
+ b = b.item ? b.item[orderBy] : null;
35
+ return ObjectUtils.compare(a, b);
36
+ }
37
+ ngAfterContentInit() {
38
+ this.templates = this.templateDirectives.reduce((result, directive) => {
39
+ if (ObjectUtils.isArray(directive.column)) {
40
+ directive.column.forEach(column => {
41
+ result[column] = directive;
42
+ });
43
+ return result;
44
+ }
45
+ if (!ObjectUtils.isString(directive.column) || directive.column.length == 0)
46
+ return result;
47
+ result[directive.column] = directive;
48
+ return result;
49
+ }, {});
50
+ }
51
+ ngAfterViewInit() {
52
+ this.rowTemplate = this.rowTemplate || this.defaultRowTemplate;
53
+ this.filterTemplate = this.filterTemplate || this.defaultFilterTemplate;
54
+ }
55
+ ngOnChanges(changes) {
56
+ if (changes.columns) {
57
+ const columns = changes.columns.currentValue || [];
58
+ this.orders = ObjectUtils.isArray(columns) ? columns.reduce((result, column) => {
59
+ result[column] = column;
60
+ return result;
61
+ }, {}) : columns;
62
+ this.cols = Object.keys(this.orders);
63
+ this.orderBy = this.orderBy in this.orders ? this.orderBy : this.columns[0];
64
+ }
65
+ if (changes.orderBy && this.orders) {
66
+ this.orderBy = this.orderBy in this.orders ? this.orderBy : this.columns[0];
67
+ }
68
+ if (!changes.data && !changes.parallelData && !changes.itemsPerPage && !changes.orderBy && !changes.orderDescending)
69
+ return;
70
+ this.refresh();
71
+ }
72
+ refresh() {
73
+ if (!this.pagination)
74
+ return;
75
+ this.pagination.refresh();
76
+ }
77
+ setFilter(filter) {
78
+ this.filter = filter;
79
+ this.refresh();
80
+ }
81
+ setOrder(column) {
82
+ this.orderDescending = column == this.orderBy && !this.orderDescending;
83
+ this.orderBy = column;
84
+ this.refresh();
85
+ }
86
+ loadLocalData(page, rowsPerPage, orderBy, orderDescending, filter) {
87
+ if (!this.data) {
88
+ return Promise.resolve({
89
+ total: 0,
90
+ items: []
91
+ });
92
+ }
93
+ const compare = orderDescending
94
+ ? (a, b) => DynamicTableComponent.compare(orderBy, b, a)
95
+ : (a, b) => DynamicTableComponent.compare(orderBy, a, b);
96
+ const from = (page - 1) * rowsPerPage;
97
+ const dataLength = this.data.length;
98
+ const length = Math.min(rowsPerPage, dataLength - from);
99
+ const parallelData = this.parallelData || [];
100
+ let data = this.data.map((item, ix) => {
101
+ return new PaginationItemContext(item, parallelData[ix] || {}, dataLength, ix, ix);
102
+ });
103
+ if (ObjectUtils.isString(filter) && filter.length > 0) {
104
+ const filterRx = new RegExp(filter, "gi");
105
+ data = data.filter(c => c.filter(filterRx));
106
+ }
107
+ const items = orderBy ? data.sort(compare).splice(from, length) : data.splice(from, length);
108
+ items.forEach((context, ix) => {
109
+ context.index = from + ix;
110
+ });
111
+ return Promise.resolve({
112
+ total: dataLength,
113
+ items: items
114
+ });
115
+ }
116
+ }
117
+ DynamicTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: DynamicTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
118
+ DynamicTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: DynamicTableComponent, selector: "dynamic-table", inputs: { label: "label", placeholder: "placeholder", dataLoader: "dataLoader", data: "data", parallelData: "parallelData", columns: "columns", showFilter: "showFilter", itemsPerPage: "itemsPerPage", updateTime: "updateTime", maxPages: "maxPages", directionLinks: "directionLinks", boundaryLinks: "boundaryLinks", orderBy: "orderBy", orderDescending: "orderDescending" }, queries: [{ propertyName: "rowTemplate", first: true, predicate: ["rowTemplate"], descendants: true, static: true }, { propertyName: "wrapperTemplate", first: true, predicate: ["wrapperTemplate"], descendants: true, static: true }, { propertyName: "filterTemplate", first: true, predicate: ["filterTemplate"], descendants: true, static: true }, { propertyName: "templateDirectives", predicate: DynamicTableTemplateDirective }], viewQueries: [{ propertyName: "columnsTemplate", first: true, predicate: ["columnsTemplate"], descendants: true, static: true }, { propertyName: "defaultRowTemplate", first: true, predicate: ["defaultRowTemplate"], descendants: true, static: true }, { propertyName: "defaultWrapperTemplate", first: true, predicate: ["defaultWrapperTemplate"], descendants: true, static: true }, { propertyName: "defaultFilterTemplate", first: true, predicate: ["defaultFilterTemplate"], descendants: true, static: true }, { propertyName: "pagination", first: true, predicate: ["pagination"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"dynamic-table\" #pagination=\"pagination\" [pagination]=\"loadData\" [itemsPerPage]=\"itemsPerPage\" [updateTime]=\"updateTime\">\r\n <ng-template #defaultFilterTemplate let-table>\r\n <div class=\"table-search\" *ngIf=\"table.showFilter\">\r\n <label *ngIf=\"label\" [attr.for]=\"tableId\">{{ label | translate }}</label>\r\n <input type=\"text\"\r\n class=\"form-control\"\r\n [attr.id]=\"tableId\"\r\n [placeholder]=\"placeholder | translate\"\r\n [ngModel]=\"table.filter\"\r\n (ngModelChange)=\"table.setFilter($event)\"/>\r\n </div>\r\n </ng-template>\r\n <ng-container [ngxTemplateOutlet]=\"filterTemplate || defaultFilterTemplate\" [context]=\"this\"></ng-container>\r\n <pagination-menu [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n <div class=\"table-responsive\">\r\n\r\n <ng-template #columnTemplate let-context let-column=\"column\" let-template=\"template\">\r\n <ng-template #defaultTemplate let-column=\"column\" let-item=\"item\">\r\n <span>{{ item[column] == undefined || item[column] == null ? '-' : item[column] }}</span>\r\n </ng-template>\r\n <ng-template #pureTemplate>\r\n <ng-container [ngxTemplateOutlet]=\"template.ref\" [context]=\"context\"></ng-container>\r\n </ng-template>\r\n <td [ngClass]=\"'column-' + column\" *ngIf=\"!template || !template.pure; else pureTemplate\">\r\n <ng-container [ngxTemplateOutlet]=\"!template ? defaultTemplate : template.ref\" [context]=\"context\"></ng-container>\r\n </td>\r\n </ng-template>\r\n\r\n <ng-template #columnsTemplate let-context>\r\n <ng-container *ngFor=\"let column of cols\"\r\n [ngxTemplateOutlet]=\"columnTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"{\r\n template: templates[column],\r\n column: column\r\n }\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template #defaultRowTemplate let-context>\r\n <tr>\r\n <ng-container [ngxTemplateOutlet]=\"columnsTemplate\" [context]=\"context\"></ng-container>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template #defaultWrapperTemplate>\r\n <table class=\"table table-striped\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of cols\" [ngClass]=\"'column-' + column\">\r\n <a *ngIf=\"orders[column]\" (click)=\"setOrder(column)\">\r\n <span>{{ 'label.' + column | translate }}</span>\r\n <i *ngIf=\"orderBy == column\"\r\n [icon]=\"orderDescending ? 'sort-desc' : 'sort-asc'\"\r\n [ngClass]=\"orderBy == column ? (orderDescending ? 'sort-desc': 'sort-asc') : ''\"></i>\r\n </a>\r\n <span *ngIf=\"!orders[column]\">{{ 'label.' + column | translate }}</span>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *paginationItem=\"let context\"\r\n [ngxTemplateOutlet]=\"rowTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"this\"></ng-container>\r\n </tbody>\r\n </table>\r\n </ng-template>\r\n\r\n <ng-container [ngxTemplateOutlet]=\"wrapperTemplate || defaultWrapperTemplate\"\r\n [context]=\"this\"></ng-container>\r\n </div>\r\n <pagination-menu [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n</div>\r\n", components: [{ type: i1.PaginationMenuComponent, selector: "pagination-menu", inputs: ["maxSize", "urlParam", "directionLinks", "boundaryLinks"] }], directives: [{ type: i2.PaginationDirective, selector: "[pagination]", inputs: ["pagination", "page", "itemsPerPage", "updateTime", "waitFor"], outputs: ["pageChange", "onRefresh"], exportAs: ["pagination"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i5.NgxTemplateOutletDirective, selector: "[ngxTemplateOutlet]", inputs: ["context", "additionalContext", "ngxTemplateOutlet"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.IconDirective, selector: "[icon]", inputs: ["icon", "activeIcon", "active"], outputs: ["activeChange"] }, { type: i7.PaginationItemDirective, selector: "[paginationItem]" }], pipes: { "translate": i8.TranslatePipe } });
119
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: DynamicTableComponent, decorators: [{
120
+ type: Component,
121
+ args: [{ selector: "dynamic-table", template: "<div class=\"dynamic-table\" #pagination=\"pagination\" [pagination]=\"loadData\" [itemsPerPage]=\"itemsPerPage\" [updateTime]=\"updateTime\">\r\n <ng-template #defaultFilterTemplate let-table>\r\n <div class=\"table-search\" *ngIf=\"table.showFilter\">\r\n <label *ngIf=\"label\" [attr.for]=\"tableId\">{{ label | translate }}</label>\r\n <input type=\"text\"\r\n class=\"form-control\"\r\n [attr.id]=\"tableId\"\r\n [placeholder]=\"placeholder | translate\"\r\n [ngModel]=\"table.filter\"\r\n (ngModelChange)=\"table.setFilter($event)\"/>\r\n </div>\r\n </ng-template>\r\n <ng-container [ngxTemplateOutlet]=\"filterTemplate || defaultFilterTemplate\" [context]=\"this\"></ng-container>\r\n <pagination-menu [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n <div class=\"table-responsive\">\r\n\r\n <ng-template #columnTemplate let-context let-column=\"column\" let-template=\"template\">\r\n <ng-template #defaultTemplate let-column=\"column\" let-item=\"item\">\r\n <span>{{ item[column] == undefined || item[column] == null ? '-' : item[column] }}</span>\r\n </ng-template>\r\n <ng-template #pureTemplate>\r\n <ng-container [ngxTemplateOutlet]=\"template.ref\" [context]=\"context\"></ng-container>\r\n </ng-template>\r\n <td [ngClass]=\"'column-' + column\" *ngIf=\"!template || !template.pure; else pureTemplate\">\r\n <ng-container [ngxTemplateOutlet]=\"!template ? defaultTemplate : template.ref\" [context]=\"context\"></ng-container>\r\n </td>\r\n </ng-template>\r\n\r\n <ng-template #columnsTemplate let-context>\r\n <ng-container *ngFor=\"let column of cols\"\r\n [ngxTemplateOutlet]=\"columnTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"{\r\n template: templates[column],\r\n column: column\r\n }\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template #defaultRowTemplate let-context>\r\n <tr>\r\n <ng-container [ngxTemplateOutlet]=\"columnsTemplate\" [context]=\"context\"></ng-container>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template #defaultWrapperTemplate>\r\n <table class=\"table table-striped\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of cols\" [ngClass]=\"'column-' + column\">\r\n <a *ngIf=\"orders[column]\" (click)=\"setOrder(column)\">\r\n <span>{{ 'label.' + column | translate }}</span>\r\n <i *ngIf=\"orderBy == column\"\r\n [icon]=\"orderDescending ? 'sort-desc' : 'sort-asc'\"\r\n [ngClass]=\"orderBy == column ? (orderDescending ? 'sort-desc': 'sort-asc') : ''\"></i>\r\n </a>\r\n <span *ngIf=\"!orders[column]\">{{ 'label.' + column | translate }}</span>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *paginationItem=\"let context\"\r\n [ngxTemplateOutlet]=\"rowTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"this\"></ng-container>\r\n </tbody>\r\n </table>\r\n </ng-template>\r\n\r\n <ng-container [ngxTemplateOutlet]=\"wrapperTemplate || defaultWrapperTemplate\"\r\n [context]=\"this\"></ng-container>\r\n </div>\r\n <pagination-menu [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n</div>\r\n" }]
122
+ }], ctorParameters: function () { return []; }, propDecorators: { label: [{
123
+ type: Input
124
+ }], placeholder: [{
125
+ type: Input
126
+ }], dataLoader: [{
127
+ type: Input
128
+ }], data: [{
129
+ type: Input
130
+ }], parallelData: [{
131
+ type: Input
132
+ }], columns: [{
133
+ type: Input
134
+ }], showFilter: [{
135
+ type: Input
136
+ }], itemsPerPage: [{
137
+ type: Input
138
+ }], updateTime: [{
139
+ type: Input
140
+ }], maxPages: [{
141
+ type: Input
142
+ }], directionLinks: [{
143
+ type: Input
144
+ }], boundaryLinks: [{
145
+ type: Input
146
+ }], orderBy: [{
147
+ type: Input
148
+ }], orderDescending: [{
149
+ type: Input
150
+ }], rowTemplate: [{
151
+ type: ContentChild,
152
+ args: ["rowTemplate", { static: true }]
153
+ }], wrapperTemplate: [{
154
+ type: ContentChild,
155
+ args: ["wrapperTemplate", { static: true }]
156
+ }], filterTemplate: [{
157
+ type: ContentChild,
158
+ args: ["filterTemplate", { static: true }]
159
+ }], columnsTemplate: [{
160
+ type: ViewChild,
161
+ args: ["columnsTemplate", { static: true }]
162
+ }], defaultRowTemplate: [{
163
+ type: ViewChild,
164
+ args: ["defaultRowTemplate", { static: true }]
165
+ }], defaultWrapperTemplate: [{
166
+ type: ViewChild,
167
+ args: ["defaultWrapperTemplate", { static: true }]
168
+ }], defaultFilterTemplate: [{
169
+ type: ViewChild,
170
+ args: ["defaultFilterTemplate", { static: true }]
171
+ }], pagination: [{
172
+ type: ViewChild,
173
+ args: ["pagination"]
174
+ }], templateDirectives: [{
175
+ type: ContentChildren,
176
+ args: [DynamicTableTemplateDirective]
177
+ }] } });
178
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbmd4LXV0aWxzL2NvbXBvbmVudHMvZHluYW1pYy10YWJsZS9keW5hbWljLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9uZ3gtdXRpbHMvY29tcG9uZW50cy9keW5hbWljLXRhYmxlL2R5bmFtaWMtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLEtBQUssRUFFTCxTQUFTLEVBRVQsV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBSUgscUJBQXFCLEVBRXhCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBQ2hHLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBQzFFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7OztBQU1yRCxNQUFNLE9BQU8scUJBQXFCO0lBNEQ5QjtRQTZEQSxhQUFRLEdBQUcsQ0FBQyxJQUFZLEVBQUUsWUFBb0IsRUFBNEIsRUFBRTtZQUN4RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0YsQ0FBQyxDQUFDO1FBL0RFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFD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LGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFhTixXQUFXO3NCQURWLFlBQVk7dUJBQUMsYUFBYSxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFJM0MsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGlCQUFpQixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFJL0MsY0FBYztzQkFEYixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFJOUMsZUFBZTtzQkFEZCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFJNUMsa0JBQWtCO3NCQURqQixTQUFTO3VCQUFDLG9CQUFvQixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFJL0Msc0JBQXNCO3NCQURyQixTQUFTO3VCQUFDLHdCQUF3QixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFJbkQscUJBQXFCO3NCQURwQixTQUFTO3VCQUFDLHVCQUF1QixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFJMUMsVUFBVTtzQkFEakIsU0FBUzt1QkFBQyxZQUFZO2dCQUlmLGtCQUFrQjtzQkFEekIsZUFBZTt1QkFBQyw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCxcclxuICAgIENvbXBvbmVudCxcclxuICAgIENvbnRlbnRDaGlsZCxcclxuICAgIENvbnRlbnRDaGlsZHJlbixcclxuICAgIElucHV0LFxyXG4gICAgT25DaGFuZ2VzLFxyXG4gICAgUXVlcnlMaXN0LFxyXG4gICAgU2ltcGxlQ2hhbmdlcyxcclxuICAgIFRlbXBsYXRlUmVmLFxyXG4gICAgVmlld0NoaWxkXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtcclxuICAgIElQYWdpbmF0aW9uRGF0YSxcclxuICAgIElUYWJsZUNvbHVtbnMsXHJcbiAgICBJVGFibGVUZW1wbGF0ZXMsXHJcbiAgICBQYWdpbmF0aW9uSXRlbUNvbnRleHQsXHJcbiAgICBUYWJsZURhdGFMb2FkZXJcclxufSBmcm9tIFwiLi4vLi4vY29tbW9uLXR5cGVzXCI7XHJcbmltcG9ydCB7T2JqZWN0VXRpbHN9IGZyb20gXCIuLi8uLi91dGlscy9vYmplY3QudXRpbHNcIjtcclxuaW1wb3J0IHtEeW5hbWljVGFibGVUZW1wbGF0ZURpcmVjdGl2ZX0gZnJvbSBcIi4uLy4uL2RpcmVjdGl2ZXMvZHluYW1pYy10YWJsZS10ZW1wbGF0ZS5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtQYWdpbmF0aW9uRGlyZWN0aXZlfSBmcm9tIFwiLi4vLi4vZGlyZWN0aXZlcy9wYWdpbmF0aW9uLmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1VuaXF1ZVV0aWxzfSBmcm9tIFwiLi4vLi4vdXRpbHMvdW5pcXVlLnV0aWxzXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcImR5bmFtaWMtdGFibGVcIixcclxuICAgIHRlbXBsYXRlVXJsOiBcIi4vZHluYW1pYy10YWJsZS5jb21wb25lbnQuaHRtbFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHluYW1pY1RhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgICBASW5wdXQoKSBsYWJlbDogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIGRhdGFMb2FkZXI6IFRhYmxlRGF0YUxvYWRlcjtcclxuICAgIEBJbnB1dCgpIGRhdGE6IGFueVtdO1xyXG4gICAgQElucHV0KCkgcGFyYWxsZWxEYXRhOiBhbnlbXTtcclxuICAgIEBJbnB1dCgpIGNvbHVtbnM6IElUYWJsZUNvbHVtbnMgfCBzdHJpbmdbXTtcclxuICAgIEBJbnB1dCgpIHNob3dGaWx0ZXI6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBpdGVtc1BlclBhZ2U6IG51bWJlcjtcclxuICAgIEBJbnB1dCgpIHVwZGF0ZVRpbWU6IG51bWJlcjtcclxuICAgIEBJbnB1dCgpIG1heFBhZ2VzOiBudW1iZXI7XHJcbiAgICBASW5wdXQoKSBkaXJlY3Rpb25MaW5rczogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGJvdW5kYXJ5TGlua3M6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBvcmRlckJ5OiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBvcmRlckRlc2NlbmRpbmc6IGJvb2xlYW47XHJcblxyXG4gICAgdGFibGVJZDogc3RyaW5nO1xyXG4gICAgdGVtcGxhdGVzOiBJVGFibGVUZW1wbGF0ZXM7XHJcbiAgICBmaWx0ZXI6IHN0cmluZztcclxuICAgIG9yZGVyczogSVRhYmxlQ29sdW1ucztcclxuICAgIGNvbHM6IHN0cmluZ1tdO1xyXG5cclxuICAgIGdldCBpdGVtcygpOiBhbnlbXSB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLnBhZ2luYXRpb24gPyBbXSA6IHRoaXMucGFnaW5hdGlvbi5pdGVtcztcclxuICAgIH1cclxuXHJcbiAgICBAQ29udGVudENoaWxkKFwicm93VGVtcGxhdGVcIiwge3N0YXRpYzogdHJ1ZX0pXHJcbiAgICByb3dUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgICBAQ29udGVudENoaWxkKFwid3JhcHBlclRlbXBsYXRlXCIsIHtzdGF0aWM6IHRydWV9KVxyXG4gICAgd3JhcHBlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIEBDb250ZW50Q2hpbGQoXCJmaWx0ZXJUZW1wbGF0ZVwiLCB7c3RhdGljOiB0cnVlfSlcclxuICAgIGZpbHRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoXCJjb2x1bW5zVGVtcGxhdGVcIiwge3N0YXRpYzogdHJ1ZX0pXHJcbiAgICBjb2x1bW5zVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gICAgQFZpZXdDaGlsZChcImRlZmF1bHRSb3dUZW1wbGF0ZVwiLCB7c3RhdGljOiB0cnVlfSlcclxuICAgIGRlZmF1bHRSb3dUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgICBAVmlld0NoaWxkKFwiZGVmYXVsdFdyYXBwZXJUZW1wbGF0ZVwiLCB7c3RhdGljOiB0cnVlfSlcclxuICAgIGRlZmF1bHRXcmFwcGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gICAgQFZpZXdDaGlsZChcImRlZmF1bHRGaWx0ZXJUZW1wbGF0ZVwiLCB7c3RhdGljOiB0cnVlfSlcclxuICAgIGRlZmF1bHRGaWx0ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgICBAVmlld0NoaWxkKFwicGFnaW5hdGlvblwiKVxyXG4gICAgcHJpdmF0ZSBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uRGlyZWN0aXZlO1xyXG5cclxuICAgIEBDb250ZW50Q2hpbGRyZW4oRHluYW1pY1RhYmxlVGVtcGxhdGVEaXJlY3RpdmUpXHJcbiAgICBwcml2YXRlIHRlbXBsYXRlRGlyZWN0aXZlczogUXVlcnlMaXN0PER5bmFtaWNUYWJsZVRlbXBsYXRlRGlyZWN0aXZlPjtcclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBjb21wYXJlKG9yZGVyQnk6IHN0cmluZywgYTogUGFnaW5hdGlvbkl0ZW1Db250ZXh0LCBiOiBQYWdpbmF0aW9uSXRlbUNvbnRleHQpOiBudW1iZXIge1xyXG4gICAgICAgIGEgPSBhLml0ZW0gPyBhLml0ZW1bb3JkZXJCeV0gOiBudWxsO1xyXG4gICAgICAgIGIgPSBiLml0ZW0gPyBiLml0ZW1bb3JkZXJCeV0gOiBudWxsO1xyXG4gICAgICAgIHJldHVybiBPYmplY3RVdGlscy5jb21wYXJlKGEsIGIpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuZGF0YUxvYWRlciA9IHRoaXMubG9hZExvY2FsRGF0YTtcclxuICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gXCJcIjtcclxuICAgICAgICB0aGlzLnRhYmxlSWQgPSBVbmlxdWVVdGlscy51dWlkKCk7XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXMgPSB7fTtcclxuICAgICAgICB0aGlzLmZpbHRlciA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5vcmRlcnMgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXMgPSB0aGlzLnRlbXBsYXRlRGlyZWN0aXZlcy5yZWR1Y2UoKHJlc3VsdCwgZGlyZWN0aXZlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3RVdGlscy5pc0FycmF5KGRpcmVjdGl2ZS5jb2x1bW4pKSB7XHJcbiAgICAgICAgICAgICAgICBkaXJlY3RpdmUuY29sdW1uLmZvckVhY2goY29sdW1uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRbY29sdW1uXSA9IGRpcmVjdGl2ZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIU9iamVjdFV0aWxzLmlzU3RyaW5nKGRpcmVjdGl2ZS5jb2x1bW4pIHx8IGRpcmVjdGl2ZS5jb2x1bW4ubGVuZ3RoID09IDApIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIHJlc3VsdFtkaXJlY3RpdmUuY29sdW1uXSA9IGRpcmVjdGl2ZTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9LCB7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucm93VGVtcGxhdGUgPSB0aGlzLnJvd1RlbXBsYXRlIHx8IHRoaXMuZGVmYXVsdFJvd1RlbXBsYXRlO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyVGVtcGxhdGUgPSB0aGlzLmZpbHRlclRlbXBsYXRlIHx8IHRoaXMuZGVmYXVsdEZpbHRlclRlbXBsYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICBpZiAoY2hhbmdlcy5jb2x1bW5zKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSBjaGFuZ2VzLmNvbHVtbnMuY3VycmVudFZhbHVlIHx8IFtdO1xyXG4gICAgICAgICAgICB0aGlzLm9yZGVycyA9IE9iamVjdFV0aWxzLmlzQXJyYXkoY29sdW1ucykgPyBjb2x1bW5zLnJlZHVjZSgocmVzdWx0LCBjb2x1bW4pID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdFtjb2x1bW5dID0gY29sdW1uO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfSwge30pIDogY29sdW1ucztcclxuICAgICAgICAgICAgdGhpcy5jb2xzID0gT2JqZWN0LmtleXModGhpcy5vcmRlcnMpO1xyXG4gICAgICAgICAgICB0aGlzLm9yZGVyQnkgPSB0aGlzLm9yZGVyQnkgaW4gdGhpcy5vcmRlcnMgPyB0aGlzLm9yZGVyQnkgOiB0aGlzLmNvbHVtbnNbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjaGFuZ2VzLm9yZGVyQnkgJiYgdGhpcy5vcmRlcnMpIHtcclxuICAgICAgICAgICAgdGhpcy5vcmRlckJ5ID0gdGhpcy5vcmRlckJ5IGluIHRoaXMub3JkZXJzID8gdGhpcy5vcmRlckJ5IDogdGhpcy5jb2x1bW5zWzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWNoYW5nZXMuZGF0YSAmJiAhY2hhbmdlcy5wYXJhbGxlbERhdGEgJiYgIWNoYW5nZXMuaXRlbXNQZXJQYWdlICYmICFjaGFuZ2VzLm9yZGVyQnkgJiYgIWNoYW5nZXMub3JkZXJEZXNjZW5kaW5nKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVmcmVzaCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMucGFnaW5hdGlvbikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucGFnaW5hdGlvbi5yZWZyZXNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RmlsdGVyKGZpbHRlcjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXIgPSBmaWx0ZXI7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0T3JkZXIoY29sdW1uOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9yZGVyRGVzY2VuZGluZyA9IGNvbHVtbiA9PSB0aGlzLm9yZGVyQnkgJiYgIXRoaXMub3JkZXJEZXNjZW5kaW5nO1xyXG4gICAgICAgIHRoaXMub3JkZXJCeSA9IGNvbHVtbjtcclxuICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkRGF0YSA9IChwYWdlOiBudW1iZXIsIGl0ZW1zUGVyUGFnZTogbnVtYmVyKTogUHJvbWlzZTxJUGFnaW5hdGlvbkRhdGE+ID0+IHtcclxuICAgICAgICBjb25zdCBvcmRlckJ5ID0gdGhpcy5vcmRlcnNbdGhpcy5vcmRlckJ5XTtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhTG9hZGVyKHBhZ2UsIGl0ZW1zUGVyUGFnZSwgb3JkZXJCeSwgdGhpcy5vcmRlckRlc2NlbmRpbmcsIHRoaXMuZmlsdGVyKTtcclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkTG9jYWxEYXRhKHBhZ2U6IG51bWJlciwgcm93c1BlclBhZ2U6IG51bWJlciwgb3JkZXJCeTogc3RyaW5nLCBvcmRlckRlc2NlbmRpbmc6IGJvb2xlYW4sIGZpbHRlcjogc3RyaW5nKTogUHJvbWlzZTxJUGFnaW5hdGlvbkRhdGE+IHtcclxuICAgICAgICBpZiAoIXRoaXMuZGF0YSkge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcclxuICAgICAgICAgICAgICAgIHRvdGFsOiAwLFxyXG4gICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjb21wYXJlOiAoYTogYW55LCBiOiBhbnkpID0+IG51bWJlciA9IG9yZGVyRGVzY2VuZGluZ1xyXG4gICAgICAgICAgICA/IChhLCBiKSA9PiBEeW5hbWljVGFibGVDb21wb25lbnQuY29tcGFyZShvcmRlckJ5LCBiLCBhKVxyXG4gICAgICAgICAgICA6IChhLCBiKSA9PiBEeW5hbWljVGFibGVDb21wb25lbnQuY29tcGFyZShvcmRlckJ5LCBhLCBiKTtcclxuICAgICAgICBjb25zdCBmcm9tID0gKHBhZ2UgLSAxKSAqIHJvd3NQZXJQYWdlO1xyXG4gICAgICAgIGNvbnN0IGRhdGFMZW5ndGggPSB0aGlzLmRhdGEubGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWluKHJvd3NQZXJQYWdlLCBkYXRhTGVuZ3RoIC0gZnJvbSk7XHJcbiAgICAgICAgY29uc3QgcGFyYWxsZWxEYXRhID0gdGhpcy5wYXJhbGxlbERhdGEgfHwgW107XHJcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLmRhdGEubWFwKChpdGVtLCBpeCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFBhZ2luYXRpb25JdGVtQ29udGV4dChpdGVtLCBwYXJhbGxlbERhdGFbaXhdIHx8IHt9LCBkYXRhTGVuZ3RoLCBpeCwgaXgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChPYmplY3RVdGlscy5pc1N0cmluZyhmaWx0ZXIpICYmIGZpbHRlci5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlclJ4ID0gbmV3IFJlZ0V4cChmaWx0ZXIsIFwiZ2lcIik7XHJcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhLmZpbHRlcihjID0+IGMuZmlsdGVyKGZpbHRlclJ4KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gb3JkZXJCeSA/IGRhdGEuc29ydChjb21wYXJlKS5zcGxpY2UoZnJvbSwgbGVuZ3RoKSA6IGRhdGEuc3BsaWNlKGZyb20sIGxlbmd0aCk7XHJcbiAgICAgICAgaXRlbXMuZm9yRWFjaCgoY29udGV4dCwgaXgpID0+IHtcclxuICAgICAgICAgICAgY29udGV4dC5pbmRleCA9IGZyb20gKyBpeDtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcclxuICAgICAgICAgICAgdG90YWw6IGRhdGFMZW5ndGgsXHJcbiAgICAgICAgICAgIGl0ZW1zOiBpdGVtc1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJkeW5hbWljLXRhYmxlXCIgI3BhZ2luYXRpb249XCJwYWdpbmF0aW9uXCIgW3BhZ2luYXRpb25dPVwibG9hZERhdGFcIiBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZVwiIFt1cGRhdGVUaW1lXT1cInVwZGF0ZVRpbWVcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEZpbHRlclRlbXBsYXRlIGxldC10YWJsZT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtc2VhcmNoXCIgKm5nSWY9XCJ0YWJsZS5zaG93RmlsdGVyXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cImxhYmVsXCIgW2F0dHIuZm9yXT1cInRhYmxlSWRcIj57eyBsYWJlbCB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJ0YWJsZUlkXCJcclxuICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJ0YWJsZS5maWx0ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidGFibGUuc2V0RmlsdGVyKCRldmVudClcIi8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLWNvbnRhaW5lciBbbmd4VGVtcGxhdGVPdXRsZXRdPVwiZmlsdGVyVGVtcGxhdGUgfHwgZGVmYXVsdEZpbHRlclRlbXBsYXRlXCIgW2NvbnRleHRdPVwidGhpc1wiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPHBhZ2luYXRpb24tbWVudSBbbWF4U2l6ZV09XCJtYXhQYWdlc1wiIFtkaXJlY3Rpb25MaW5rc109XCJkaXJlY3Rpb25MaW5rc1wiIFtib3VuZGFyeUxpbmtzXT1cImJvdW5kYXJ5TGlua3NcIj48L3BhZ2luYXRpb24tbWVudT5cclxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcblxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjY29sdW1uVGVtcGxhdGUgbGV0LWNvbnRleHQgbGV0LWNvbHVtbj1cImNvbHVtblwiIGxldC10ZW1wbGF0ZT1cInRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFRlbXBsYXRlIGxldC1jb2x1bW49XCJjb2x1bW5cIiBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGl0ZW1bY29sdW1uXSA9PSB1bmRlZmluZWQgfHwgaXRlbVtjb2x1bW5dID09IG51bGwgPyAnLScgOiBpdGVtW2NvbHVtbl0gfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcHVyZVRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmd4VGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGUucmVmXCIgW2NvbnRleHRdPVwiY29udGV4dFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8dGQgW25nQ2xhc3NdPVwiJ2NvbHVtbi0nICsgY29sdW1uXCIgKm5nSWY9XCIhdGVtcGxhdGUgfHwgIXRlbXBsYXRlLnB1cmU7IGVsc2UgcHVyZVRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ3hUZW1wbGF0ZU91dGxldF09XCIhdGVtcGxhdGUgPyBkZWZhdWx0VGVtcGxhdGUgOiB0ZW1wbGF0ZS5yZWZcIiBbY29udGV4dF09XCJjb250ZXh0XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNjb2x1bW5zVGVtcGxhdGUgbGV0LWNvbnRleHQ+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2xzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmd4VGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZXh0XT1cImNvbnRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFthZGRpdGlvbmFsQ29udGV4dF09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGVtcGxhdGVzW2NvbHVtbl0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGNvbHVtblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRSb3dUZW1wbGF0ZSBsZXQtY29udGV4dD5cclxuICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmd4VGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uc1RlbXBsYXRlXCIgW2NvbnRleHRdPVwiY29udGV4dFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFdyYXBwZXJUZW1wbGF0ZT5cclxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZFwiPlxyXG4gICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHNcIiBbbmdDbGFzc109XCInY29sdW1uLScgKyBjb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCJvcmRlcnNbY29sdW1uXVwiIChjbGljayk9XCJzZXRPcmRlcihjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyAnbGFiZWwuJyArIGNvbHVtbiB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwib3JkZXJCeSA9PSBjb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwib3JkZXJEZXNjZW5kaW5nID8gJ3NvcnQtZGVzYycgOiAnc29ydC1hc2MnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIm9yZGVyQnkgPT0gY29sdW1uID8gKG9yZGVyRGVzY2VuZGluZyA/ICdzb3J0LWRlc2MnOiAnc29ydC1hc2MnKSA6ICcnXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIW9yZGVyc1tjb2x1bW5dXCI+e3sgJ2xhYmVsLicgKyBjb2x1bW4gfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqcGFnaW5hdGlvbkl0ZW09XCJsZXQgY29udGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ3hUZW1wbGF0ZU91dGxldF09XCJyb3dUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZXh0XT1cImNvbnRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWRkaXRpb25hbENvbnRleHRdPVwidGhpc1wiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ3hUZW1wbGF0ZU91dGxldF09XCJ3cmFwcGVyVGVtcGxhdGUgfHwgZGVmYXVsdFdyYXBwZXJUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY29udGV4dF09XCJ0aGlzXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxwYWdpbmF0aW9uLW1lbnUgW21heFNpemVdPVwibWF4UGFnZXNcIiBbZGlyZWN0aW9uTGlua3NdPVwiZGlyZWN0aW9uTGlua3NcIiBbYm91bmRhcnlMaW5rc109XCJib3VuZGFyeUxpbmtzXCI+PC9wYWdpbmF0aW9uLW1lbnU+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -0,0 +1,101 @@
1
+ import { Component, Inject, Input } from "@angular/core";
2
+ import { ObjectUtils } from "../../utils/object.utils";
3
+ import { StateService } from "../../services/state.service";
4
+ import { PaginationDirective } from "../../directives/pagination.directive";
5
+ import { ICON_SERVICE } from "../../common-types";
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "../../services/state.service";
8
+ import * as i2 from "../../directives/pagination.directive";
9
+ import * as i3 from "@angular/common";
10
+ import * as i4 from "../../pipes/safe-html.pipe";
11
+ export class PaginationMenuComponent {
12
+ constructor(state, pagination, icons) {
13
+ this.state = state;
14
+ this.pagination = pagination;
15
+ this.icons = icons;
16
+ this.maxSize = 5;
17
+ this.directionLinks = true;
18
+ this.boundaryLinks = true;
19
+ this.firstLabel = `<<`;
20
+ this.prevLabel = `<`;
21
+ this.nextLabel = `>`;
22
+ this.lastLabel = `>>`;
23
+ }
24
+ get hasPrev() {
25
+ return this.pagination.page > 1;
26
+ }
27
+ get hasNext() {
28
+ return this.pagination.page < this.pagination.maxPage;
29
+ }
30
+ ngOnInit() {
31
+ this.onRefresh = this.pagination.onRefresh.subscribe(() => this.setPages());
32
+ this.setIcon("firstLabel", "first-page");
33
+ this.setIcon("prevLabel", "prev-page");
34
+ this.setIcon("nextLabel", "next-page");
35
+ this.setIcon("lastLabel", "last-page");
36
+ }
37
+ ngOnDestroy() {
38
+ if (!this.onRefresh)
39
+ return;
40
+ this.onRefresh.unsubscribe();
41
+ }
42
+ ngOnChanges(changes) {
43
+ this.maxSize = isNaN(this.maxSize) || this.maxSize <= 0 ? 5 : this.maxSize;
44
+ this.directionLinks = ObjectUtils.isBoolean(this.directionLinks) ? this.directionLinks : true;
45
+ this.boundaryLinks = ObjectUtils.isBoolean(this.boundaryLinks) ? this.boundaryLinks : true;
46
+ this.setPages();
47
+ }
48
+ paginate(page) {
49
+ if (this.pagination.page == page || this.pagination.maxPage < page || page < 1)
50
+ return;
51
+ if (!this.urlParam) {
52
+ this.pagination.paginate(page);
53
+ return;
54
+ }
55
+ const params = Object.assign({}, this.state.params);
56
+ params[this.urlParam] = page.toString();
57
+ const path = StateService.toPath(this.state.route, params);
58
+ this.state.navigateByUrl(path);
59
+ }
60
+ setIcon(labelName, icon) {
61
+ this.icons.getIcon(icon, icon, false).then(i => {
62
+ if (i == icon)
63
+ return;
64
+ this[labelName] = i;
65
+ });
66
+ }
67
+ setPages() {
68
+ if (!this.pagination)
69
+ return;
70
+ const totalPages = this.pagination.maxPage;
71
+ let startPage = Math.max(this.pagination.page - Math.floor(this.maxSize / 2), 1);
72
+ let endPage = startPage + this.maxSize - 1;
73
+ if (endPage > totalPages) {
74
+ endPage = totalPages;
75
+ startPage = Math.max(endPage - this.maxSize + 1, 1);
76
+ }
77
+ const pages = [];
78
+ for (let num = startPage; num <= endPage; num++) {
79
+ pages.push(num);
80
+ }
81
+ this.pages = pages;
82
+ }
83
+ }
84
+ PaginationMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: PaginationMenuComponent, deps: [{ token: i1.StateService }, { token: i2.PaginationDirective }, { token: ICON_SERVICE }], target: i0.ɵɵFactoryTarget.Component });
85
+ PaginationMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: PaginationMenuComponent, selector: "pagination-menu", inputs: { maxSize: "maxSize", urlParam: "urlParam", directionLinks: "directionLinks", boundaryLinks: "boundaryLinks" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"pagination-menu\" *ngIf=\"pagination.total > pagination.itemsPerPage\">\r\n <ul class=\"pagination\">\r\n <li class=\"page-item\" [ngClass]=\"{disabled: !hasPrev}\" *ngIf=\"boundaryLinks\">\r\n <a class=\"page-link\" (click)=\"paginate(1)\" [innerHTML]=\"firstLabel | safe\"></a>\r\n </li>\r\n <li class=\"page-item\" [ngClass]=\"{disabled: !hasPrev}\" *ngIf=\"directionLinks\">\r\n <a class=\"page-link\" (click)=\"paginate(pagination.page - 1)\" [innerHTML]=\"prevLabel | safe\"></a>\r\n </li>\r\n <li class=\"page-item\" [ngClass]=\"{active: pagination.page == page}\" *ngFor=\"let page of pages\">\r\n <a class=\"page-link\" [ngClass]=\"{active: pagination.page == page}\" (click)=\"paginate(page)\">{{ page }}</a>\r\n </li>\r\n <li class=\"page-item\" [ngClass]=\"{disabled: !hasNext}\" *ngIf=\"directionLinks\">\r\n <a class=\"page-link\" (click)=\"paginate(pagination.page + 1)\" [innerHTML]=\"nextLabel | safe\"></a>\r\n </li>\r\n <li class=\"page-item\" [ngClass]=\"{disabled: !hasNext}\" *ngIf=\"boundaryLinks\">\r\n <a class=\"page-link\" (click)=\"paginate(pagination.maxPage)\" [innerHTML]=\"lastLabel | safe\"></a>\r\n </li>\r\n </ul>\r\n</div>\r\n", directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "safe": i4.SafeHtmlPipe } });
86
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: PaginationMenuComponent, decorators: [{
87
+ type: Component,
88
+ args: [{ selector: "pagination-menu", template: "<div class=\"pagination-menu\" *ngIf=\"pagination.total > pagination.itemsPerPage\">\r\n <ul class=\"pagination\">\r\n <li class=\"page-item\" [ngClass]=\"{disabled: !hasPrev}\" *ngIf=\"boundaryLinks\">\r\n <a class=\"page-link\" (click)=\"paginate(1)\" [innerHTML]=\"firstLabel | safe\"></a>\r\n </li>\r\n <li class=\"page-item\" [ngClass]=\"{disabled: !hasPrev}\" *ngIf=\"directionLinks\">\r\n <a class=\"page-link\" (click)=\"paginate(pagination.page - 1)\" [innerHTML]=\"prevLabel | safe\"></a>\r\n </li>\r\n <li class=\"page-item\" [ngClass]=\"{active: pagination.page == page}\" *ngFor=\"let page of pages\">\r\n <a class=\"page-link\" [ngClass]=\"{active: pagination.page == page}\" (click)=\"paginate(page)\">{{ page }}</a>\r\n </li>\r\n <li class=\"page-item\" [ngClass]=\"{disabled: !hasNext}\" *ngIf=\"directionLinks\">\r\n <a class=\"page-link\" (click)=\"paginate(pagination.page + 1)\" [innerHTML]=\"nextLabel | safe\"></a>\r\n </li>\r\n <li class=\"page-item\" [ngClass]=\"{disabled: !hasNext}\" *ngIf=\"boundaryLinks\">\r\n <a class=\"page-link\" (click)=\"paginate(pagination.maxPage)\" [innerHTML]=\"lastLabel | safe\"></a>\r\n </li>\r\n </ul>\r\n</div>\r\n" }]
89
+ }], ctorParameters: function () { return [{ type: i1.StateService }, { type: i2.PaginationDirective }, { type: undefined, decorators: [{
90
+ type: Inject,
91
+ args: [ICON_SERVICE]
92
+ }] }]; }, propDecorators: { maxSize: [{
93
+ type: Input
94
+ }], urlParam: [{
95
+ type: Input
96
+ }], directionLinks: [{
97
+ type: Input
98
+ }], boundaryLinks: [{
99
+ type: Input
100
+ }] } });
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uZ3gtdXRpbHMvY29tcG9uZW50cy9wYWdpbmF0aW9uLW1lbnUvcGFnaW5hdGlvbi1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9uZ3gtdXRpbHMvY29tcG9uZW50cy9wYWdpbmF0aW9uLW1lbnUvcGFnaW5hdGlvbi1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBOEMsTUFBTSxlQUFlLENBQUM7QUFFcEcsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUMxRSxPQUFPLEVBQUMsWUFBWSxFQUFlLE1BQU0sb0JBQW9CLENBQUM7Ozs7OztBQU05RCxNQUFNLE9BQU8sdUJBQXVCO0lBdUJoQyxZQUFtQixLQUFtQixFQUFTLFVBQStCLEVBQStCLEtBQW1CO1FBQTdHLFVBQUssR0FBTCxLQUFLLENBQWM7UUFBUyxlQUFVLEdBQVYsVUFBVSxDQUFxQjtRQUErQixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQzVILElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdB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RyxhQUFhO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIFNpbXBsZUNoYW5nZXN9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge09iamVjdFV0aWxzfSBmcm9tIFwiLi4vLi4vdXRpbHMvb2JqZWN0LnV0aWxzXCI7XHJcbmltcG9ydCB7U3RhdGVTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc3RhdGUuc2VydmljZVwiO1xyXG5pbXBvcnQge1BhZ2luYXRpb25EaXJlY3RpdmV9IGZyb20gXCIuLi8uLi9kaXJlY3RpdmVzL3BhZ2luYXRpb24uZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7SUNPTl9TRVJWSUNFLCBJSWNvblNlcnZpY2V9IGZyb20gXCIuLi8uLi9jb21tb24tdHlwZXNcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6IFwicGFnaW5hdGlvbi1tZW51XCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCIuL3BhZ2luYXRpb24tbWVudS5jb21wb25lbnQuaHRtbFwiXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQYWdpbmF0aW9uTWVudUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xyXG5cclxuICAgIEBJbnB1dCgpIG1heFNpemU6IG51bWJlcjtcclxuICAgIEBJbnB1dCgpIHVybFBhcmFtOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBkaXJlY3Rpb25MaW5rczogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGJvdW5kYXJ5TGlua3M6IGJvb2xlYW47XHJcblxyXG4gICAgcGFnZXM6IG51bWJlcltdO1xyXG4gICAgZmlyc3RMYWJlbDogc3RyaW5nO1xyXG4gICAgcHJldkxhYmVsOiBzdHJpbmc7XHJcbiAgICBuZXh0TGFiZWw6IHN0cmluZztcclxuICAgIGxhc3RMYWJlbDogc3RyaW5nO1xyXG5cclxuICAgIGdldCBoYXNQcmV2KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRpb24ucGFnZSA+IDE7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGhhc05leHQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdGlvbi5wYWdlIDwgdGhpcy5wYWdpbmF0aW9uLm1heFBhZ2VcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uUmVmcmVzaDogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBzdGF0ZTogU3RhdGVTZXJ2aWNlLCBwdWJsaWMgcGFnaW5hdGlvbjogUGFnaW5hdGlvbkRpcmVjdGl2ZSwgQEluamVjdChJQ09OX1NFUlZJQ0UpIHB1YmxpYyBpY29uczogSUljb25TZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5tYXhTaXplID0gNTtcclxuICAgICAgICB0aGlzLmRpcmVjdGlvbkxpbmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmJvdW5kYXJ5TGlua3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZmlyc3RMYWJlbCA9IGA8PGA7XHJcbiAgICAgICAgdGhpcy5wcmV2TGFiZWwgPSBgPGA7XHJcbiAgICAgICAgdGhpcy5uZXh0TGFiZWwgPSBgPmA7XHJcbiAgICAgICAgdGhpcy5sYXN0TGFiZWwgPSBgPj5gO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25SZWZyZXNoID0gdGhpcy5wYWdpbmF0aW9uLm9uUmVmcmVzaC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zZXRQYWdlcygpKTtcclxuICAgICAgICB0aGlzLnNldEljb24oXCJmaXJzdExhYmVsXCIsIFwiZmlyc3QtcGFnZVwiKTtcclxuICAgICAgICB0aGlzLnNldEljb24oXCJwcmV2TGFiZWxcIiwgXCJwcmV2LXBhZ2VcIik7XHJcbiAgICAgICAgdGhpcy5zZXRJY29uKFwibmV4dExhYmVsXCIsIFwibmV4dC1wYWdlXCIpO1xyXG4gICAgICAgIHRoaXMuc2V0SWNvbihcImxhc3RMYWJlbFwiLCBcImxhc3QtcGFnZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMub25SZWZyZXNoKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5vblJlZnJlc2gudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5tYXhTaXplID0gaXNOYU4odGhpcy5tYXhTaXplKSB8fCB0aGlzLm1heFNpemUgPD0gMCA/IDUgOiB0aGlzLm1heFNpemU7XHJcbiAgICAgICAgdGhpcy5kaXJlY3Rpb25MaW5rcyA9IE9iamVjdFV0aWxzLmlzQm9vbGVhbih0aGlzLmRpcmVjdGlvbkxpbmtzKSA/IHRoaXMuZGlyZWN0aW9uTGlua3MgOiB0cnVlO1xyXG4gICAgICAgIHRoaXMuYm91bmRhcnlMaW5rcyA9IE9iamVjdFV0aWxzLmlzQm9vbGVhbih0aGlzLmJvdW5kYXJ5TGlua3MpID8gdGhpcy5ib3VuZGFyeUxpbmtzIDogdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldFBhZ2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcGFnaW5hdGUocGFnZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMucGFnaW5hdGlvbi5wYWdlID09IHBhZ2UgfHwgdGhpcy5wYWdpbmF0aW9uLm1heFBhZ2UgPCBwYWdlIHx8IHBhZ2UgPCAxKSByZXR1cm47XHJcbiAgICAgICAgaWYgKCF0aGlzLnVybFBhcmFtKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvbi5wYWdpbmF0ZShwYWdlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBwYXJhbXMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnN0YXRlLnBhcmFtcyk7XHJcbiAgICAgICAgcGFyYW1zW3RoaXMudXJsUGFyYW1dID0gcGFnZS50b1N0cmluZygpO1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSBTdGF0ZVNlcnZpY2UudG9QYXRoKHRoaXMuc3RhdGUucm91dGUsIHBhcmFtcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZS5uYXZpZ2F0ZUJ5VXJsKHBhdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzZXRJY29uKGxhYmVsTmFtZTogc3RyaW5nLCBpY29uOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmljb25zLmdldEljb24oaWNvbiwgaWNvbiwgZmFsc2UpLnRoZW4oaSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpID09IGljb24pIHJldHVybjtcclxuICAgICAgICAgICAgdGhpc1tsYWJlbE5hbWVdID0gaTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc2V0UGFnZXMoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAoIXRoaXMucGFnaW5hdGlvbikgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IHRvdGFsUGFnZXMgPSB0aGlzLnBhZ2luYXRpb24ubWF4UGFnZTtcclxuICAgICAgICBsZXQgc3RhcnRQYWdlID0gTWF0aC5tYXgodGhpcy5wYWdpbmF0aW9uLnBhZ2UgLSBNYXRoLmZsb29yKHRoaXMubWF4U2l6ZSAvIDIpLCAxKTtcclxuICAgICAgICBsZXQgZW5kUGFnZSA9IHN0YXJ0UGFnZSArIHRoaXMubWF4U2l6ZSAtIDE7XHJcbiAgICAgICAgaWYgKGVuZFBhZ2UgPiB0b3RhbFBhZ2VzKSB7XHJcbiAgICAgICAgICAgIGVuZFBhZ2UgPSB0b3RhbFBhZ2VzO1xyXG4gICAgICAgICAgICBzdGFydFBhZ2UgPSBNYXRoLm1heChlbmRQYWdlIC0gdGhpcy5tYXhTaXplICsgMSwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBhZ2VzOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IG51bSA9IHN0YXJ0UGFnZTsgbnVtIDw9IGVuZFBhZ2U7IG51bSsrKSB7XHJcbiAgICAgICAgICAgIHBhZ2VzLnB1c2gobnVtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wYWdlcyA9IHBhZ2VzO1xyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJwYWdpbmF0aW9uLW1lbnVcIiAqbmdJZj1cInBhZ2luYXRpb24udG90YWwgPiBwYWdpbmF0aW9uLml0ZW1zUGVyUGFnZVwiPlxyXG4gICAgPHVsIGNsYXNzPVwicGFnaW5hdGlvblwiPlxyXG4gICAgICAgIDxsaSBjbGFzcz1cInBhZ2UtaXRlbVwiIFtuZ0NsYXNzXT1cIntkaXNhYmxlZDogIWhhc1ByZXZ9XCIgKm5nSWY9XCJib3VuZGFyeUxpbmtzXCI+XHJcbiAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgKGNsaWNrKT1cInBhZ2luYXRlKDEpXCIgW2lubmVySFRNTF09XCJmaXJzdExhYmVsIHwgc2FmZVwiPjwvYT5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaSBjbGFzcz1cInBhZ2UtaXRlbVwiIFtuZ0NsYXNzXT1cIntkaXNhYmxlZDogIWhhc1ByZXZ9XCIgKm5nSWY9XCJkaXJlY3Rpb25MaW5rc1wiPlxyXG4gICAgICAgICAgICA8YSBjbGFzcz1cInBhZ2UtbGlua1wiIChjbGljayk9XCJwYWdpbmF0ZShwYWdpbmF0aW9uLnBhZ2UgLSAxKVwiIFtpbm5lckhUTUxdPVwicHJldkxhYmVsIHwgc2FmZVwiPjwvYT5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaSBjbGFzcz1cInBhZ2UtaXRlbVwiIFtuZ0NsYXNzXT1cInthY3RpdmU6IHBhZ2luYXRpb24ucGFnZSA9PSBwYWdlfVwiICpuZ0Zvcj1cImxldCBwYWdlIG9mIHBhZ2VzXCI+XHJcbiAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgW25nQ2xhc3NdPVwie2FjdGl2ZTogcGFnaW5hdGlvbi5wYWdlID09IHBhZ2V9XCIgKGNsaWNrKT1cInBhZ2luYXRlKHBhZ2UpXCI+e3sgcGFnZSB9fTwvYT5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaSBjbGFzcz1cInBhZ2UtaXRlbVwiIFtuZ0NsYXNzXT1cIntkaXNhYmxlZDogIWhhc05leHR9XCIgKm5nSWY9XCJkaXJlY3Rpb25MaW5rc1wiPlxyXG4gICAgICAgICAgICA8YSBjbGFzcz1cInBhZ2UtbGlua1wiIChjbGljayk9XCJwYWdpbmF0ZShwYWdpbmF0aW9uLnBhZ2UgKyAxKVwiIFtpbm5lckhUTUxdPVwibmV4dExhYmVsIHwgc2FmZVwiPjwvYT5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaSBjbGFzcz1cInBhZ2UtaXRlbVwiIFtuZ0NsYXNzXT1cIntkaXNhYmxlZDogIWhhc05leHR9XCIgKm5nSWY9XCJib3VuZGFyeUxpbmtzXCI+XHJcbiAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgKGNsaWNrKT1cInBhZ2luYXRlKHBhZ2luYXRpb24ubWF4UGFnZSlcIiBbaW5uZXJIVE1MXT1cImxhc3RMYWJlbCB8IHNhZmVcIj48L2E+XHJcbiAgICAgICAgPC9saT5cclxuICAgIDwvdWw+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -0,0 +1,65 @@
1
+ import { ChangeDetectorRef, Component, ContentChildren, Input, QueryList, TemplateRef, ViewChild } from "@angular/core";
2
+ import { ObjectUtils } from "../../utils/object.utils";
3
+ import { UnorderedListTemplateDirective } from "../../directives/unordered-list-template.directive";
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ import * as i2 from "../../directives/unordered-list-item.directive";
7
+ import * as i3 from "../../pipes/translate.pipe";
8
+ import * as i4 from "../../pipes/entries.pipe";
9
+ export class UnorderedListComponent {
10
+ constructor(cdr) {
11
+ this.cdr = cdr;
12
+ this.keyPrefix = "";
13
+ this.listStyle = "table";
14
+ this.path = "";
15
+ this.level = 0;
16
+ }
17
+ ngOnChanges(changes) {
18
+ this.isArray = ObjectUtils.isArray(this.data);
19
+ this.isObject = ObjectUtils.isObject(this.data);
20
+ }
21
+ ngAfterContentInit() {
22
+ const templates = this.templateDirectives.toArray();
23
+ this.templates = this.templates ? this.templates.concat(templates) : templates;
24
+ this.cdr.detectChanges();
25
+ }
26
+ ngAfterViewInit() {
27
+ this.defaultTemplates = {
28
+ key: this.defaultKeyTemplate,
29
+ value: this.defaultValueTemplate,
30
+ item: this.defaultItemTemplate
31
+ };
32
+ this.cdr.detectChanges();
33
+ }
34
+ }
35
+ UnorderedListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: UnorderedListComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
36
+ UnorderedListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: UnorderedListComponent, selector: "unordered-list", inputs: { data: "data", keyPrefix: "keyPrefix", listStyle: "listStyle", path: "path", level: "level", templates: "templates" }, queries: [{ propertyName: "templateDirectives", predicate: UnorderedListTemplateDirective }], viewQueries: [{ propertyName: "defaultKeyTemplate", first: true, predicate: ["defaultKeyTemplate"], descendants: true }, { propertyName: "defaultValueTemplate", first: true, predicate: ["defaultValueTemplate"], descendants: true }, { propertyName: "defaultItemTemplate", first: true, predicate: ["defaultItemTemplate"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-template let-keyPrefix=\"keyPrefix\" let-key=\"item.key\" let-isArray=\"isArray\" #defaultKeyTemplate>\r\n {{ (keyPrefix ? keyPrefix + key : key) | translate }}:\r\n</ng-template>\r\n<ng-template let-keyPrefix=\"keyPrefix\" let-listStyle=\"listStyle\" let-val=\"item.value\" let-path=\"path\"\r\n let-templates=\"templates\" let-isObject=\"valueIsObject\" let-isArray=\"valueIsArray\" #defaultValueTemplate>\r\n <ng-template #value>{{ val }}</ng-template>\r\n <unordered-list [data]=\"val\"\r\n [keyPrefix]=\"keyPrefix\"\r\n [listStyle]=\"listStyle\"\r\n [path]=\"path\"\r\n [level]=\"level + 1\"\r\n [templates]=\"templates\"\r\n *ngIf=\"(isObject || isArray); else value\"></unordered-list>\r\n</ng-template>\r\n<ng-template let-item=\"item\" let-data=\"data\" let-keyPrefix=\"keyPrefix\" let-listStyle=\"listStyle\" let-path=\"path\" let-level=\"level\" let-templates=\"templates\" #defaultItemTemplate>\r\n <ng-template #itemKey>\r\n <ng-container [unorderedListItem]=\"item\"\r\n type=\"key\"\r\n [data]=\"data\"\r\n [keyPrefix]=\"keyPrefix\"\r\n [listStyle]=\"listStyle\"\r\n [path]=\"path\"\r\n [level]=\"level\"\r\n [templates]=\"templates\"\r\n [defaultTemplates]=\"defaultTemplates\"></ng-container>\r\n </ng-template>\r\n <ng-template #itemValue>\r\n <ng-container [unorderedListItem]=\"item\"\r\n type=\"value\"\r\n [data]=\"data\"\r\n [keyPrefix]=\"keyPrefix\"\r\n [listStyle]=\"listStyle\"\r\n [path]=\"path\"\r\n [level]=\"level\"\r\n [templates]=\"templates\"\r\n [defaultTemplates]=\"defaultTemplates\"></ng-container>\r\n </ng-template>\r\n <ng-container *ngIf=\"!isArray\">\r\n <th *ngIf=\"listStyle == 'table'; else itemKey\">\r\n <ng-container [ngTemplateOutlet]=\"itemKey\"></ng-container>\r\n </th>\r\n </ng-container>\r\n <td *ngIf=\"listStyle == 'table'; else itemValue\">\r\n <ng-container [ngTemplateOutlet]=\"itemValue\"></ng-container>\r\n </td>\r\n</ng-template>\r\n<ng-template #value>\r\n {{ data }}\r\n</ng-template>\r\n<ng-container *ngIf=\"(isObject || isArray); else value\" [ngSwitch]=\"listStyle\">\r\n <ul [ngClass]=\"'level-' + level\" *ngSwitchCase=\"'list'\">\r\n <li *ngFor=\"let item of data | entries\" [ngClass]=\"item.classList\">\r\n <ng-container [unorderedListItem]=\"item\"\r\n type=\"item\"\r\n [data]=\"data\"\r\n [keyPrefix]=\"keyPrefix\"\r\n [listStyle]=\"listStyle\"\r\n [path]=\"path ? path + '.' + item.key : item.key\"\r\n [level]=\"level\"\r\n [templates]=\"templates\"\r\n [defaultTemplates]=\"defaultTemplates\"></ng-container>\r\n </li>\r\n </ul>\r\n <table [ngClass]=\"'level-' + level\" *ngSwitchDefault>\r\n <tr *ngFor=\"let item of data | entries\" [ngClass]=\"item.classList\">\r\n <ng-container [unorderedListItem]=\"item\"\r\n type=\"item\"\r\n [data]=\"data\"\r\n [keyPrefix]=\"keyPrefix\"\r\n [listStyle]=\"listStyle\"\r\n [path]=\"path ? path + '.' + item.key : item.key\"\r\n [level]=\"level\"\r\n [templates]=\"templates\"\r\n [defaultTemplates]=\"defaultTemplates\"></ng-container>\r\n </tr>\r\n </table>\r\n</ng-container>\r\n", components: [{ type: UnorderedListComponent, selector: "unordered-list", inputs: ["data", "keyPrefix", "listStyle", "path", "level", "templates"] }], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.UnorderedListItemDirective, selector: "[unorderedListItem]", inputs: ["unorderedListItem", "type", "data", "keyPrefix", "listStyle", "path", "level", "templates", "defaultTemplates"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }], pipes: { "translate": i3.TranslatePipe, "entries": i4.EntriesPipe } });
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: UnorderedListComponent, decorators: [{
38
+ type: Component,
39
+ args: [{ selector: "unordered-list", template: "<ng-template let-keyPrefix=\"keyPrefix\" let-key=\"item.key\" let-isArray=\"isArray\" #defaultKeyTemplate>\r\n {{ (keyPrefix ? keyPrefix + key : key) | translate }}:\r\n</ng-template>\r\n<ng-template let-keyPrefix=\"keyPrefix\" let-listStyle=\"listStyle\" let-val=\"item.value\" let-path=\"path\"\r\n let-templates=\"templates\" let-isObject=\"valueIsObject\" let-isArray=\"valueIsArray\" #defaultValueTemplate>\r\n <ng-template #value>{{ val }}</ng-template>\r\n <unordered-list [data]=\"val\"\r\n [keyPrefix]=\"keyPrefix\"\r\n [listStyle]=\"listStyle\"\r\n [path]=\"path\"\r\n [level]=\"level + 1\"\r\n [templates]=\"templates\"\r\n *ngIf=\"(isObject || isArray); else value\"></unordered-list>\r\n</ng-template>\r\n<ng-template let-item=\"item\" let-data=\"data\" let-keyPrefix=\"keyPrefix\" let-listStyle=\"listStyle\" let-path=\"path\" let-level=\"level\" let-templates=\"templates\" #defaultItemTemplate>\r\n <ng-template #itemKey>\r\n <ng-container [unorderedListItem]=\"item\"\r\n type=\"key\"\r\n [data]=\"data\"\r\n [keyPrefix]=\"keyPrefix\"\r\n [listStyle]=\"listStyle\"\r\n [path]=\"path\"\r\n [level]=\"level\"\r\n [templates]=\"templates\"\r\n [defaultTemplates]=\"defaultTemplates\"></ng-container>\r\n </ng-template>\r\n <ng-template #itemValue>\r\n <ng-container [unorderedListItem]=\"item\"\r\n type=\"value\"\r\n [data]=\"data\"\r\n [keyPrefix]=\"keyPrefix\"\r\n [listStyle]=\"listStyle\"\r\n [path]=\"path\"\r\n [level]=\"level\"\r\n [templates]=\"templates\"\r\n [defaultTemplates]=\"defaultTemplates\"></ng-container>\r\n </ng-template>\r\n <ng-container *ngIf=\"!isArray\">\r\n <th *ngIf=\"listStyle == 'table'; else itemKey\">\r\n <ng-container [ngTemplateOutlet]=\"itemKey\"></ng-container>\r\n </th>\r\n </ng-container>\r\n <td *ngIf=\"listStyle == 'table'; else itemValue\">\r\n <ng-container [ngTemplateOutlet]=\"itemValue\"></ng-container>\r\n </td>\r\n</ng-template>\r\n<ng-template #value>\r\n {{ data }}\r\n</ng-template>\r\n<ng-container *ngIf=\"(isObject || isArray); else value\" [ngSwitch]=\"listStyle\">\r\n <ul [ngClass]=\"'level-' + level\" *ngSwitchCase=\"'list'\">\r\n <li *ngFor=\"let item of data | entries\" [ngClass]=\"item.classList\">\r\n <ng-container [unorderedListItem]=\"item\"\r\n type=\"item\"\r\n [data]=\"data\"\r\n [keyPrefix]=\"keyPrefix\"\r\n [listStyle]=\"listStyle\"\r\n [path]=\"path ? path + '.' + item.key : item.key\"\r\n [level]=\"level\"\r\n [templates]=\"templates\"\r\n [defaultTemplates]=\"defaultTemplates\"></ng-container>\r\n </li>\r\n </ul>\r\n <table [ngClass]=\"'level-' + level\" *ngSwitchDefault>\r\n <tr *ngFor=\"let item of data | entries\" [ngClass]=\"item.classList\">\r\n <ng-container [unorderedListItem]=\"item\"\r\n type=\"item\"\r\n [data]=\"data\"\r\n [keyPrefix]=\"keyPrefix\"\r\n [listStyle]=\"listStyle\"\r\n [path]=\"path ? path + '.' + item.key : item.key\"\r\n [level]=\"level\"\r\n [templates]=\"templates\"\r\n [defaultTemplates]=\"defaultTemplates\"></ng-container>\r\n </tr>\r\n </table>\r\n</ng-container>\r\n" }]
40
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { data: [{
41
+ type: Input
42
+ }], keyPrefix: [{
43
+ type: Input
44
+ }], listStyle: [{
45
+ type: Input
46
+ }], path: [{
47
+ type: Input
48
+ }], level: [{
49
+ type: Input
50
+ }], templates: [{
51
+ type: Input
52
+ }], templateDirectives: [{
53
+ type: ContentChildren,
54
+ args: [UnorderedListTemplateDirective]
55
+ }], defaultKeyTemplate: [{
56
+ type: ViewChild,
57
+ args: ["defaultKeyTemplate"]
58
+ }], defaultValueTemplate: [{
59
+ type: ViewChild,
60
+ args: ["defaultValueTemplate"]
61
+ }], defaultItemTemplate: [{
62
+ type: ViewChild,
63
+ args: ["defaultItemTemplate"]
64
+ }] } });
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5vcmRlcmVkLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL25neC11dGlscy9jb21wb25lbnRzL3Vub3JkZXJlZC1saXN0L3Vub3JkZXJlZC1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9uZ3gtdXRpbHMvY29tcG9uZW50cy91bm9yZGVyZWQtbGlzdC91bm9yZGVyZWQtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0gsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsS0FBSyxFQUVMLFNBQVMsRUFDTSxXQUFXLEVBQUUsU0FBUyxFQUN4QyxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFDLDhCQUE4QixFQUFDLE1BQU0sb0RBQW9ELENBQUM7Ozs7OztBQU1sRyxNQUFNLE9BQU8sc0JBQXNCO0lBdUIvQixZQUFvQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxrQkFBa0I7UUFDZCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQy9FLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLENBQUMsZ0JBQWdCLEdBQUc7WUFDcEIsR0FBRyxFQUFFLElBQUksQ0FBQyxrQkFBa0I7WUFDNUIsS0FBSyxFQUFFLElBQUksQ0FBQyxvQkFBb0I7WUFDaEMsSUFBSSxFQUFFLElBQUksQ0FBQyxtQkFBbUI7U0FDakMsQ0FBQztRQUNGLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDN0IsQ0FBQzs7bUhBaERRLHNCQUFzQjt1R0FBdEIsc0JBQXNCLHlOQWFkLDhCQUE4Qix3WUNoQ25ELCs2SEE2RUEsdUJEMURhLHNCQUFzQjsyRkFBdEIsc0JBQXNCO2tCQUpsQyxTQUFTOytCQUNJLGdCQUFnQjt3R0FLakIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBT0Usa0JBQWtCO3NCQUR6QixlQUFlO3VCQUFDLDhCQUE4QjtnQkFJdkMsa0JBQWtCO3NCQUR6QixTQUFTO3VCQUFDLG9CQUFvQjtnQkFHdkIsb0JBQW9CO3NCQUQzQixTQUFTO3VCQUFDLHNCQUFzQjtnQkFHekIsbUJBQW1CO3NCQUQxQixTQUFTO3VCQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBBZnRlckNvbnRlbnRJbml0LFxyXG4gICAgQWZ0ZXJWaWV3SW5pdCxcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgQ29udGVudENoaWxkcmVuLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkNoYW5nZXMsXHJcbiAgICBRdWVyeUxpc3QsXHJcbiAgICBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtVbm9yZGVyZWRMaXN0U3R5bGUsIFVub3JkZXJlZExpc3RUZW1wbGF0ZXMsIFVub3JlZGVyZWRMaXN0VGVtcGxhdGV9IGZyb20gXCIuLi8uLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtPYmplY3RVdGlsc30gZnJvbSBcIi4uLy4uL3V0aWxzL29iamVjdC51dGlsc1wiO1xyXG5pbXBvcnQge1Vub3JkZXJlZExpc3RUZW1wbGF0ZURpcmVjdGl2ZX0gZnJvbSBcIi4uLy4uL2RpcmVjdGl2ZXMvdW5vcmRlcmVkLWxpc3QtdGVtcGxhdGUuZGlyZWN0aXZlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcInVub3JkZXJlZC1saXN0XCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCIuL3Vub3JkZXJlZC1saXN0LmNvbXBvbmVudC5odG1sXCJcclxufSlcclxuZXhwb3J0IGNsYXNzIFVub3JkZXJlZExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQge1xyXG5cclxuICAgIEBJbnB1dCgpIGRhdGE6IGFueTtcclxuICAgIEBJbnB1dCgpIGtleVByZWZpeDogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgbGlzdFN0eWxlOiBVbm9yZGVyZWRMaXN0U3R5bGU7XHJcbiAgICBASW5wdXQoKSBwYXRoOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBsZXZlbDogbnVtYmVyO1xyXG4gICAgQElucHV0KCkgdGVtcGxhdGVzOiBVbm9yZWRlcmVkTGlzdFRlbXBsYXRlW107XHJcblxyXG4gICAgaXNBcnJheTogYm9vbGVhbjtcclxuICAgIGlzT2JqZWN0OiBib29sZWFuO1xyXG4gICAgZGVmYXVsdFRlbXBsYXRlczogVW5vcmRlcmVkTGlzdFRlbXBsYXRlcztcclxuXHJcbiAgICBAQ29udGVudENoaWxkcmVuKFVub3JkZXJlZExpc3RUZW1wbGF0ZURpcmVjdGl2ZSlcclxuICAgIHByaXZhdGUgdGVtcGxhdGVEaXJlY3RpdmVzOiBRdWVyeUxpc3Q8VW5vcmRlcmVkTGlzdFRlbXBsYXRlRGlyZWN0aXZlPjtcclxuXHJcbiAgICBAVmlld0NoaWxkKFwiZGVmYXVsdEtleVRlbXBsYXRlXCIpXHJcbiAgICBwcml2YXRlIGRlZmF1bHRLZXlUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBWaWV3Q2hpbGQoXCJkZWZhdWx0VmFsdWVUZW1wbGF0ZVwiKVxyXG4gICAgcHJpdmF0ZSBkZWZhdWx0VmFsdWVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBWaWV3Q2hpbGQoXCJkZWZhdWx0SXRlbVRlbXBsYXRlXCIpXHJcbiAgICBwcml2YXRlIGRlZmF1bHRJdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgICAgICAgdGhpcy5rZXlQcmVmaXggPSBcIlwiO1xyXG4gICAgICAgIHRoaXMubGlzdFN0eWxlID0gXCJ0YWJsZVwiO1xyXG4gICAgICAgIHRoaXMucGF0aCA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5sZXZlbCA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNBcnJheSA9IE9iamVjdFV0aWxzLmlzQXJyYXkodGhpcy5kYXRhKTtcclxuICAgICAgICB0aGlzLmlzT2JqZWN0ID0gT2JqZWN0VXRpbHMuaXNPYmplY3QodGhpcy5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVzID0gdGhpcy50ZW1wbGF0ZURpcmVjdGl2ZXMudG9BcnJheSgpO1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVzID0gdGhpcy50ZW1wbGF0ZXMgPyB0aGlzLnRlbXBsYXRlcy5jb25jYXQodGVtcGxhdGVzKSA6IHRlbXBsYXRlcztcclxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdFRlbXBsYXRlcyA9IHtcclxuICAgICAgICAgICAga2V5OiB0aGlzLmRlZmF1bHRLZXlUZW1wbGF0ZSxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuZGVmYXVsdFZhbHVlVGVtcGxhdGUsXHJcbiAgICAgICAgICAgIGl0ZW06IHRoaXMuZGVmYXVsdEl0ZW1UZW1wbGF0ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG59XHJcbiIsIjxuZy10ZW1wbGF0ZSBsZXQta2V5UHJlZml4PVwia2V5UHJlZml4XCIgbGV0LWtleT1cIml0ZW0ua2V5XCIgbGV0LWlzQXJyYXk9XCJpc0FycmF5XCIgI2RlZmF1bHRLZXlUZW1wbGF0ZT5cclxuICAgIHt7IChrZXlQcmVmaXggPyBrZXlQcmVmaXggKyBrZXkgOiBrZXkpIHwgdHJhbnNsYXRlIH19OlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgbGV0LWtleVByZWZpeD1cImtleVByZWZpeFwiIGxldC1saXN0U3R5bGU9XCJsaXN0U3R5bGVcIiBsZXQtdmFsPVwiaXRlbS52YWx1ZVwiIGxldC1wYXRoPVwicGF0aFwiXHJcbiAgICAgICAgICAgICBsZXQtdGVtcGxhdGVzPVwidGVtcGxhdGVzXCIgbGV0LWlzT2JqZWN0PVwidmFsdWVJc09iamVjdFwiIGxldC1pc0FycmF5PVwidmFsdWVJc0FycmF5XCIgI2RlZmF1bHRWYWx1ZVRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICN2YWx1ZT57eyB2YWwgfX08L25nLXRlbXBsYXRlPlxyXG4gICAgPHVub3JkZXJlZC1saXN0IFtkYXRhXT1cInZhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2tleVByZWZpeF09XCJrZXlQcmVmaXhcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtsaXN0U3R5bGVdPVwibGlzdFN0eWxlXCJcclxuICAgICAgICAgICAgICAgICAgICBbcGF0aF09XCJwYXRoXCJcclxuICAgICAgICAgICAgICAgICAgICBbbGV2ZWxdPVwibGV2ZWwgKyAxXCJcclxuICAgICAgICAgICAgICAgICAgICBbdGVtcGxhdGVzXT1cInRlbXBsYXRlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIoaXNPYmplY3QgfHwgaXNBcnJheSk7IGVsc2UgdmFsdWVcIj48L3Vub3JkZXJlZC1saXN0PlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWRhdGE9XCJkYXRhXCIgbGV0LWtleVByZWZpeD1cImtleVByZWZpeFwiIGxldC1saXN0U3R5bGU9XCJsaXN0U3R5bGVcIiBsZXQtcGF0aD1cInBhdGhcIiBsZXQtbGV2ZWw9XCJsZXZlbFwiIGxldC10ZW1wbGF0ZXM9XCJ0ZW1wbGF0ZXNcIiAjZGVmYXVsdEl0ZW1UZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjaXRlbUtleT5cclxuICAgICAgICA8bmctY29udGFpbmVyIFt1bm9yZGVyZWRMaXN0SXRlbV09XCJpdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJrZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBba2V5UHJlZml4XT1cImtleVByZWZpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbGlzdFN0eWxlXT1cImxpc3RTdHlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbcGF0aF09XCJwYXRoXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtsZXZlbF09XCJsZXZlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbdGVtcGxhdGVzXT1cInRlbXBsYXRlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZGVmYXVsdFRlbXBsYXRlc109XCJkZWZhdWx0VGVtcGxhdGVzXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICNpdGVtVmFsdWU+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciBbdW5vcmRlcmVkTGlzdEl0ZW1dPVwiaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBba2V5UHJlZml4XT1cImtleVByZWZpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbGlzdFN0eWxlXT1cImxpc3RTdHlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbcGF0aF09XCJwYXRoXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtsZXZlbF09XCJsZXZlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbdGVtcGxhdGVzXT1cInRlbXBsYXRlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZGVmYXVsdFRlbXBsYXRlc109XCJkZWZhdWx0VGVtcGxhdGVzXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0FycmF5XCI+XHJcbiAgICAgICAgPHRoICpuZ0lmPVwibGlzdFN0eWxlID09ICd0YWJsZSc7IGVsc2UgaXRlbUtleVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1LZXlcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L3RoPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8dGQgKm5nSWY9XCJsaXN0U3R5bGUgPT0gJ3RhYmxlJzsgZWxzZSBpdGVtVmFsdWVcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1WYWx1ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC90ZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICN2YWx1ZT5cclxuICAgIHt7IGRhdGEgfX1cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIihpc09iamVjdCB8fCBpc0FycmF5KTsgZWxzZSB2YWx1ZVwiIFtuZ1N3aXRjaF09XCJsaXN0U3R5bGVcIj5cclxuICAgIDx1bCBbbmdDbGFzc109XCInbGV2ZWwtJyArIGxldmVsXCIgKm5nU3dpdGNoQ2FzZT1cIidsaXN0J1wiPlxyXG4gICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkYXRhIHwgZW50cmllc1wiIFtuZ0NsYXNzXT1cIml0ZW0uY2xhc3NMaXN0XCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW3Vub3JkZXJlZExpc3RJdGVtXT1cIml0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJpdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJkYXRhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBba2V5UHJlZml4XT1cImtleVByZWZpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RTdHlsZV09XCJsaXN0U3R5bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtwYXRoXT1cInBhdGggPyBwYXRoICsgJy4nICsgaXRlbS5rZXkgOiBpdGVtLmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2xldmVsXT1cImxldmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdGVtcGxhdGVzXT1cInRlbXBsYXRlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2RlZmF1bHRUZW1wbGF0ZXNdPVwiZGVmYXVsdFRlbXBsYXRlc1wiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICA8L3VsPlxyXG4gICAgPHRhYmxlIFtuZ0NsYXNzXT1cIidsZXZlbC0nICsgbGV2ZWxcIiAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkYXRhIHwgZW50cmllc1wiIFtuZ0NsYXNzXT1cIml0ZW0uY2xhc3NMaXN0XCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW3Vub3JkZXJlZExpc3RJdGVtXT1cIml0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJpdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJkYXRhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBba2V5UHJlZml4XT1cImtleVByZWZpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RTdHlsZV09XCJsaXN0U3R5bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtwYXRoXT1cInBhdGggPyBwYXRoICsgJy4nICsgaXRlbS5rZXkgOiBpdGVtLmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2xldmVsXT1cImxldmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdGVtcGxhdGVzXT1cInRlbXBsYXRlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2RlZmF1bHRUZW1wbGF0ZXNdPVwiZGVmYXVsdFRlbXBsYXRlc1wiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICA8L3RhYmxlPlxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19
@@ -0,0 +1,78 @@
1
+ import { Directive, EventEmitter, HostBinding, HostListener, Inject, Input, Output } from "@angular/core";
2
+ import { TOASTER_SERVICE } from "../common-types";
3
+ import * as i0 from "@angular/core";
4
+ export class AsyncMethodBase {
5
+ constructor(toaster) {
6
+ this.toaster = toaster;
7
+ this.onSuccess = new EventEmitter();
8
+ this.onError = new EventEmitter();
9
+ }
10
+ get isDisabled() {
11
+ return this.disabled;
12
+ }
13
+ get isLoading() {
14
+ return this.loading;
15
+ }
16
+ getMethod() {
17
+ return async () => null;
18
+ }
19
+ click() {
20
+ if (this.disabled)
21
+ return;
22
+ this.callMethod();
23
+ }
24
+ callMethod() {
25
+ if (this.loading)
26
+ return true;
27
+ this.loading = true;
28
+ const method = this.getMethod();
29
+ const result = !method ? null : method(this.context);
30
+ if (!(result instanceof Promise)) {
31
+ this.loading = false;
32
+ return false;
33
+ }
34
+ result.then(result => {
35
+ this.loading = false;
36
+ if (result) {
37
+ this.onSuccess.emit(result);
38
+ this.toaster.success(result.message, result.context);
39
+ }
40
+ }, reason => {
41
+ if (!reason || !reason.message)
42
+ throw new Error("Reason must implement IAsyncMessage interface");
43
+ this.loading = false;
44
+ this.onError.emit(reason);
45
+ this.toaster.error(reason.message, reason.context);
46
+ });
47
+ return true;
48
+ }
49
+ }
50
+ AsyncMethodBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: AsyncMethodBase, deps: [{ token: TOASTER_SERVICE }], target: i0.ɵɵFactoryTarget.Directive });
51
+ AsyncMethodBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.8", type: AsyncMethodBase, selector: "[__asmb__]", inputs: { disabled: "disabled", context: "context" }, outputs: { onSuccess: "onSuccess", onError: "onError" }, host: { listeners: { "click": "click()" }, properties: { "class.disabled": "this.isDisabled", "class.loading": "this.isLoading" } }, ngImport: i0 });
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: AsyncMethodBase, decorators: [{
53
+ type: Directive,
54
+ args: [{
55
+ selector: "[__asmb__]"
56
+ }]
57
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
58
+ type: Inject,
59
+ args: [TOASTER_SERVICE]
60
+ }] }]; }, propDecorators: { disabled: [{
61
+ type: Input
62
+ }], context: [{
63
+ type: Input
64
+ }], onSuccess: [{
65
+ type: Output
66
+ }], onError: [{
67
+ type: Output
68
+ }], isDisabled: [{
69
+ type: HostBinding,
70
+ args: ["class.disabled"]
71
+ }], isLoading: [{
72
+ type: HostBinding,
73
+ args: ["class.loading"]
74
+ }], click: [{
75
+ type: HostListener,
76
+ args: ["click"]
77
+ }] } });
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtbWV0aG9kLmJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmd4LXV0aWxzL2RpcmVjdGl2ZXMvYXN5bmMtbWV0aG9kLmJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN4RyxPQUFPLEVBQThDLGVBQWUsRUFBQyxNQUFNLGlCQUFpQixDQUFDOztBQUs3RixNQUFNLE9BQU8sZUFBZTtJQW9CeEIsWUFBK0MsT0FBd0I7UUFBeEIsWUFBTyxHQUFQLE9BQU8sQ0FBaUI7UUFDbkUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUNuRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO0lBQ3JELENBQUM7SUFiRCxJQUNJLFVBQVU7UUFDVixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekIsQ0FBQztJQUVELElBQ0ksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBT1MsU0FBUztRQUNmLE9BQU8sS0FBSyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDNUIsQ0FBQztJQUdELEtBQUs7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUMxQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELFVBQVU7UUFDTixJQUFJLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLENBQUMsTUFBTSxZQUFZLE9BQU8sQ0FBQyxFQUFFO1lBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixJQUFJLE1BQU0sRUFBRTtnQkFDUixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDeEQ7UUFDTCxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUU7WUFDUixJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87Z0JBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztZQUNyRSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7OzRHQTFEUSxlQUFlLGtCQW9CSixlQUFlO2dHQXBCMUIsZUFBZTsyRkFBZixlQUFlO2tCQUgzQixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxZQUFZO2lCQUN6Qjs7MEJBcUJnQixNQUFNOzJCQUFDLGVBQWU7NENBbEIxQixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFFSSxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBS0gsVUFBVTtzQkFEYixXQUFXO3VCQUFDLGdCQUFnQjtnQkFNekIsU0FBUztzQkFEWixXQUFXO3VCQUFDLGVBQWU7Z0JBZTVCLEtBQUs7c0JBREosWUFBWTt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBJbnB1dCwgT3V0cHV0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge0FzeW5jTWV0aG9kLCBJQXN5bmNNZXNzYWdlLCBJVG9hc3RlclNlcnZpY2UsIFRPQVNURVJfU0VSVklDRX0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogXCJbX19hc21iX19dXCJcclxufSlcclxuZXhwb3J0IGNsYXNzIEFzeW5jTWV0aG9kQmFzZSB7XHJcblxyXG4gICAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBjb250ZXh0OiBhbnk7XHJcblxyXG4gICAgQE91dHB1dCgpIG9uU3VjY2VzczogRXZlbnRFbWl0dGVyPElBc3luY01lc3NhZ2U+O1xyXG4gICAgQE91dHB1dCgpIG9uRXJyb3I6IEV2ZW50RW1pdHRlcjxJQXN5bmNNZXNzYWdlPjtcclxuXHJcbiAgICBwcm90ZWN0ZWQgbG9hZGluZzogYm9vbGVhbjtcclxuXHJcbiAgICBASG9zdEJpbmRpbmcoXCJjbGFzcy5kaXNhYmxlZFwiKVxyXG4gICAgZ2V0IGlzRGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKFwiY2xhc3MubG9hZGluZ1wiKVxyXG4gICAgZ2V0IGlzTG9hZGluZygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoVE9BU1RFUl9TRVJWSUNFKSBwcm90ZWN0ZWQgdG9hc3RlcjogSVRvYXN0ZXJTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5vblN1Y2Nlc3MgPSBuZXcgRXZlbnRFbWl0dGVyPElBc3luY01lc3NhZ2U+KCk7XHJcbiAgICAgICAgdGhpcy5vbkVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjxJQXN5bmNNZXNzYWdlPigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXRNZXRob2QoKTogQXN5bmNNZXRob2Qge1xyXG4gICAgICAgIHJldHVybiBhc3luYyAoKSA9PiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoXCJjbGlja1wiKVxyXG4gICAgY2xpY2soKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcclxuICAgICAgICB0aGlzLmNhbGxNZXRob2QoKTtcclxuICAgIH1cclxuXHJcbiAgICBjYWxsTWV0aG9kKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmxvYWRpbmcpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgbWV0aG9kID0gdGhpcy5nZXRNZXRob2QoKTtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSAhbWV0aG9kID8gbnVsbCA6IG1ldGhvZCh0aGlzLmNvbnRleHQpO1xyXG4gICAgICAgIGlmICghKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3VsdC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uU3VjY2Vzcy5lbWl0KHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXIuc3VjY2VzcyhyZXN1bHQubWVzc2FnZSwgcmVzdWx0LmNvbnRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgcmVhc29uID0+IHtcclxuICAgICAgICAgICAgaWYgKCFyZWFzb24gfHwgIXJlYXNvbi5tZXNzYWdlKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVhc29uIG11c3QgaW1wbGVtZW50IElBc3luY01lc3NhZ2UgaW50ZXJmYWNlXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5vbkVycm9yLmVtaXQocmVhc29uKTtcclxuICAgICAgICAgICAgdGhpcy50b2FzdGVyLmVycm9yKHJlYXNvbi5tZXNzYWdlLCByZWFzb24uY29udGV4dCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,21 @@
1
+ import { Directive, Input } from "@angular/core";
2
+ import { AsyncMethodBase } from "./async-method.base";
3
+ import * as i0 from "@angular/core";
4
+ export class AsyncMethodDirective extends AsyncMethodBase {
5
+ getMethod() {
6
+ return this.method;
7
+ }
8
+ }
9
+ AsyncMethodDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: AsyncMethodDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
10
+ AsyncMethodDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.8", type: AsyncMethodDirective, selector: "[async-method]", inputs: { method: ["async-method", "method"] }, exportAs: ["async-method"], usesInheritance: true, ngImport: i0 });
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: AsyncMethodDirective, decorators: [{
12
+ type: Directive,
13
+ args: [{
14
+ selector: "[async-method]",
15
+ exportAs: "async-method"
16
+ }]
17
+ }], propDecorators: { method: [{
18
+ type: Input,
19
+ args: ["async-method"]
20
+ }] } });
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtbWV0aG9kLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uZ3gtdXRpbHMvZGlyZWN0aXZlcy9hc3luYy1tZXRob2QuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRS9DLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQzs7QUFNcEQsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGVBQWU7SUFJM0MsU0FBUztRQUNmLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDOztpSEFOUSxvQkFBb0I7cUdBQXBCLG9CQUFvQjsyRkFBcEIsb0JBQW9CO2tCQUpoQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFFBQVEsRUFBRSxjQUFjO2lCQUMzQjs4QkFHMEIsTUFBTTtzQkFBNUIsS0FBSzt1QkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIElucHV0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge0FzeW5jTWV0aG9kfSBmcm9tIFwiLi4vY29tbW9uLXR5cGVzXCI7XHJcbmltcG9ydCB7QXN5bmNNZXRob2RCYXNlfSBmcm9tIFwiLi9hc3luYy1tZXRob2QuYmFzZVwiO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogXCJbYXN5bmMtbWV0aG9kXVwiLFxyXG4gICAgZXhwb3J0QXM6IFwiYXN5bmMtbWV0aG9kXCJcclxufSlcclxuZXhwb3J0IGNsYXNzIEFzeW5jTWV0aG9kRGlyZWN0aXZlIGV4dGVuZHMgQXN5bmNNZXRob2RCYXNlIHtcclxuXHJcbiAgICBASW5wdXQoXCJhc3luYy1tZXRob2RcIikgbWV0aG9kOiBBc3luY01ldGhvZDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0TWV0aG9kKCk6IEFzeW5jTWV0aG9kIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tZXRob2Q7XHJcbiAgICB9XHJcbn1cclxuIl19