geonetwork-ui 2.2.0-dev.34bd9854 → 2.2.0-dev.37255b6f

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 (147) hide show
  1. package/esm2022/libs/api/repository/src/lib/gn4/selection/selection.service.mjs +13 -26
  2. package/esm2022/libs/common/domain/src/lib/model/search/aggregation.model.mjs +1 -1
  3. package/esm2022/libs/common/domain/src/lib/model/search/field.model.mjs +2 -0
  4. package/esm2022/libs/common/domain/src/lib/model/search/filter.model.mjs +1 -1
  5. package/esm2022/libs/common/domain/src/lib/model/search/index.mjs +2 -1
  6. package/esm2022/libs/common/domain/src/lib/model/search/search.model.mjs +1 -1
  7. package/esm2022/libs/feature/catalog/src/lib/my-org/my-org.service.mjs +4 -10
  8. package/esm2022/libs/feature/record/src/lib/state/mdview.reducer.mjs +2 -2
  9. package/esm2022/libs/feature/search/src/index.mjs +4 -1
  10. package/esm2022/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.mjs +1 -1
  11. package/esm2022/libs/feature/search/src/lib/feature-search.module.mjs +2 -6
  12. package/esm2022/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.mjs +1 -1
  13. package/esm2022/libs/feature/search/src/lib/filter-geometry.token.mjs +4 -0
  14. package/esm2022/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.mjs +7 -3
  15. package/esm2022/libs/feature/search/src/lib/record-url.token.mjs +4 -0
  16. package/esm2022/libs/feature/search/src/lib/results-list/results-list.container.component.mjs +2 -2
  17. package/esm2022/libs/feature/search/src/lib/results-table/results-table.component.mjs +128 -0
  18. package/esm2022/libs/feature/search/src/lib/state/effects.mjs +2 -2
  19. package/esm2022/libs/feature/search/src/lib/state/search.facade.mjs +3 -2
  20. package/esm2022/libs/ui/inputs/src/index.mjs +2 -1
  21. package/esm2022/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.mjs +3 -3
  22. package/esm2022/libs/ui/inputs/src/lib/checkbox/checkbox.component.mjs +3 -3
  23. package/esm2022/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.mjs +3 -3
  24. package/esm2022/libs/ui/layout/src/index.mjs +3 -1
  25. package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.mjs +36 -0
  26. package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table.component.mjs +37 -0
  27. package/esm2022/libs/ui/search/src/index.mjs +1 -2
  28. package/esm2022/libs/ui/search/src/lib/ui-search.module.mjs +9 -10
  29. package/esm2022/libs/util/i18n/src/index.mjs +1 -2
  30. package/esm2022/translations/de.json +4 -3
  31. package/esm2022/translations/en.json +5 -4
  32. package/esm2022/translations/es.json +4 -3
  33. package/esm2022/translations/fr.json +4 -3
  34. package/esm2022/translations/it.json +4 -3
  35. package/esm2022/translations/nl.json +4 -3
  36. package/esm2022/translations/pt.json +4 -3
  37. package/fesm2022/geonetwork-ui.mjs +242 -343
  38. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  39. package/libs/api/repository/src/lib/gn4/selection/selection.service.d.ts +4 -5
  40. package/libs/api/repository/src/lib/gn4/selection/selection.service.d.ts.map +1 -1
  41. package/libs/common/domain/src/lib/model/search/aggregation.model.d.ts +1 -1
  42. package/libs/common/domain/src/lib/model/search/aggregation.model.d.ts.map +1 -1
  43. package/libs/common/domain/src/lib/model/search/field.model.d.ts +2 -0
  44. package/libs/common/domain/src/lib/model/search/field.model.d.ts.map +1 -0
  45. package/libs/common/domain/src/lib/model/search/filter.model.d.ts +1 -1
  46. package/libs/common/domain/src/lib/model/search/filter.model.d.ts.map +1 -1
  47. package/libs/common/domain/src/lib/model/search/index.d.ts +1 -0
  48. package/libs/common/domain/src/lib/model/search/index.d.ts.map +1 -1
  49. package/libs/common/domain/src/lib/model/search/search.model.d.ts +2 -3
  50. package/libs/common/domain/src/lib/model/search/search.model.d.ts.map +1 -1
  51. package/libs/feature/catalog/src/lib/my-org/my-org.service.d.ts +0 -1
  52. package/libs/feature/catalog/src/lib/my-org/my-org.service.d.ts.map +1 -1
  53. package/libs/feature/search/src/index.d.ts +3 -0
  54. package/libs/feature/search/src/index.d.ts.map +1 -1
  55. package/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.d.ts +3 -3
  56. package/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.d.ts.map +1 -1
  57. package/libs/feature/search/src/lib/feature-search.module.d.ts +0 -4
  58. package/libs/feature/search/src/lib/feature-search.module.d.ts.map +1 -1
  59. package/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.d.ts +3 -2
  60. package/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.d.ts.map +1 -1
  61. package/libs/feature/search/src/lib/filter-geometry.token.d.ts +4 -0
  62. package/libs/feature/search/src/lib/filter-geometry.token.d.ts.map +1 -0
  63. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts +1 -1
  64. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts.map +1 -1
  65. package/libs/feature/search/src/lib/record-url.token.d.ts +3 -0
  66. package/libs/feature/search/src/lib/record-url.token.d.ts.map +1 -0
  67. package/libs/feature/search/src/lib/results-table/results-table.component.d.ts +33 -0
  68. package/libs/feature/search/src/lib/results-table/results-table.component.d.ts.map +1 -0
  69. package/libs/feature/search/src/lib/state/search.facade.d.ts +1 -1
  70. package/libs/feature/search/src/lib/state/search.facade.d.ts.map +1 -1
  71. package/libs/ui/inputs/src/index.d.ts +1 -0
  72. package/libs/ui/inputs/src/index.d.ts.map +1 -1
  73. package/libs/ui/layout/src/index.d.ts +2 -0
  74. package/libs/ui/layout/src/index.d.ts.map +1 -1
  75. package/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.d.ts +14 -0
  76. package/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.d.ts.map +1 -0
  77. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts +15 -0
  78. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts.map +1 -0
  79. package/libs/ui/search/src/index.d.ts +0 -1
  80. package/libs/ui/search/src/index.d.ts.map +1 -1
  81. package/libs/ui/search/src/lib/ui-search.module.d.ts +15 -15
  82. package/libs/ui/search/src/lib/ui-search.module.d.ts.map +1 -1
  83. package/libs/util/i18n/src/index.d.ts +0 -1
  84. package/libs/util/i18n/src/index.d.ts.map +1 -1
  85. package/package.json +2 -2
  86. package/src/libs/api/repository/src/lib/gn4/selection/selection.service.ts +14 -38
  87. package/src/libs/common/domain/src/lib/model/search/aggregation.model.ts +1 -1
  88. package/src/libs/common/domain/src/lib/model/search/field.model.ts +1 -0
  89. package/src/libs/common/domain/src/lib/model/search/filter.model.ts +1 -1
  90. package/src/libs/common/domain/src/lib/model/search/index.ts +1 -0
  91. package/src/libs/common/domain/src/lib/model/search/search.model.ts +2 -2
  92. package/src/libs/common/domain/src/lib/model/user/index.ts +1 -0
  93. package/src/libs/feature/catalog/src/lib/my-org/my-org.service.ts +4 -16
  94. package/src/libs/feature/record/src/lib/state/mdview.reducer.ts +1 -1
  95. package/src/libs/feature/search/src/index.ts +3 -0
  96. package/src/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.ts +1 -1
  97. package/src/libs/feature/search/src/lib/feature-search.module.ts +1 -10
  98. package/src/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.ts +4 -4
  99. package/src/libs/feature/search/src/lib/filter-geometry.token.ts +7 -0
  100. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.ts +9 -3
  101. package/src/libs/feature/search/src/lib/record-url.token.ts +4 -0
  102. package/src/libs/feature/search/src/lib/results-list/results-list.container.component.ts +1 -1
  103. package/src/libs/feature/search/src/lib/results-table/results-table.component.css +0 -0
  104. package/src/libs/feature/search/src/lib/results-table/results-table.component.html +112 -0
  105. package/src/libs/feature/search/src/lib/results-table/results-table.component.ts +164 -0
  106. package/src/libs/feature/search/src/lib/state/effects.ts +1 -1
  107. package/src/libs/feature/search/src/lib/state/search.facade.ts +2 -1
  108. package/src/libs/ui/inputs/src/index.ts +1 -0
  109. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.html +1 -1
  110. package/src/libs/ui/inputs/src/lib/checkbox/checkbox.component.html +0 -1
  111. package/src/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.html +1 -1
  112. package/src/libs/ui/layout/src/index.ts +2 -0
  113. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.css +0 -0
  114. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.html +1 -0
  115. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.ts +33 -0
  116. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.css +15 -0
  117. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.html +54 -0
  118. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.ts +42 -0
  119. package/src/libs/ui/search/src/index.ts +0 -1
  120. package/src/libs/ui/search/src/lib/ui-search.module.ts +2 -3
  121. package/src/libs/util/i18n/src/index.ts +0 -1
  122. package/translations/de.json +4 -3
  123. package/translations/en.json +5 -4
  124. package/translations/es.json +4 -3
  125. package/translations/fr.json +4 -3
  126. package/translations/it.json +4 -3
  127. package/translations/nl.json +4 -3
  128. package/translations/pt.json +4 -3
  129. package/translations/sk.json +4 -3
  130. package/esm2022/libs/ui/search/src/lib/record-table/record-table.component.mjs +0 -145
  131. package/esm2022/libs/util/i18n/src/lib/testing/test.translate.loader.mjs +0 -24
  132. package/esm2022/libs/util/i18n/src/lib/testing/test.translate.module.mjs +0 -109
  133. package/esm2022/libs/util/i18n/src/lib/testing/translations.model.mjs +0 -6
  134. package/libs/ui/search/src/lib/record-table/record-table.component.d.ts +0 -31
  135. package/libs/ui/search/src/lib/record-table/record-table.component.d.ts.map +0 -1
  136. package/libs/util/i18n/src/lib/testing/test.translate.loader.d.ts +0 -17
  137. package/libs/util/i18n/src/lib/testing/test.translate.loader.d.ts.map +0 -1
  138. package/libs/util/i18n/src/lib/testing/test.translate.module.d.ts +0 -131
  139. package/libs/util/i18n/src/lib/testing/test.translate.module.d.ts.map +0 -1
  140. package/libs/util/i18n/src/lib/testing/translations.model.d.ts +0 -21
  141. package/libs/util/i18n/src/lib/testing/translations.model.d.ts.map +0 -1
  142. package/src/libs/ui/search/src/lib/record-table/record-table.component.css +0 -7
  143. package/src/libs/ui/search/src/lib/record-table/record-table.component.html +0 -215
  144. package/src/libs/ui/search/src/lib/record-table/record-table.component.ts +0 -149
  145. package/src/libs/util/i18n/src/lib/testing/test.translate.loader.ts +0 -26
  146. package/src/libs/util/i18n/src/lib/testing/test.translate.module.ts +0 -235
  147. package/src/libs/util/i18n/src/lib/testing/translations.model.ts +0 -28
@@ -1,145 +0,0 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import { getBadgeColor, getFileFormat, getFormatPriority, } from '../../../../../../libs/util/shared/src';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common";
5
- import * as i2 from "@ngx-translate/core";
6
- import * as i3 from "../../../../inputs/src/lib/button/button.component";
7
- import * as i4 from "../../../../inputs/src/lib/checkbox/checkbox.component";
8
- import * as i5 from "@angular/material/icon";
9
- export class RecordTableComponent {
10
- constructor() {
11
- this.selectedRecords = [];
12
- this.records = [];
13
- this.recordClick = new EventEmitter();
14
- this.recordsSelect = new EventEmitter();
15
- this.recordsDeselect = new EventEmitter();
16
- this.sortByChange = new EventEmitter();
17
- }
18
- dateToString(date) {
19
- return date?.toLocaleDateString(undefined, {
20
- year: 'numeric',
21
- month: 'long',
22
- day: 'numeric',
23
- timeZone: 'UTC',
24
- });
25
- }
26
- getStatus(isPublishedToAll) {
27
- return isPublishedToAll ? 'published' : 'not published';
28
- }
29
- formatUserInfo(userInfo) {
30
- const infos = (typeof userInfo === 'string' ? userInfo : '').split('|');
31
- if (infos && infos.length === 4) {
32
- return `${infos[2]} ${infos[1]}`;
33
- }
34
- return undefined;
35
- }
36
- getRecordFormats(record) {
37
- if (record.kind === 'service' || !('distributions' in record)) {
38
- return [];
39
- }
40
- const formats = Array.from(new Set(record.distributions.map((distribution) => getFileFormat(distribution)))).filter((format) => !!format);
41
- formats.sort((a, b) => getFormatPriority(b) - getFormatPriority(a));
42
- return formats;
43
- }
44
- getBadgeColor(format) {
45
- return getBadgeColor(format);
46
- }
47
- getOrderForColumn(col) {
48
- if (!this.sortBy) {
49
- return null;
50
- }
51
- let order = null;
52
- const sortedArray = Array.isArray(this.sortBy[0])
53
- ? this.sortBy
54
- : [this.sortBy];
55
- sortedArray.forEach((sortedCol) => {
56
- if (sortedCol[1] === col) {
57
- order = sortedCol[0];
58
- }
59
- });
60
- return order;
61
- }
62
- setSortBy(col) {
63
- const sortOrder = this.getOrderForColumn(col);
64
- let newOrder;
65
- if (sortOrder) {
66
- newOrder = sortOrder === 'asc' ? 'desc' : 'asc';
67
- }
68
- else {
69
- newOrder = 'asc';
70
- }
71
- this.sortByChange.emit([newOrder, col]);
72
- this.sortBy = [newOrder, col];
73
- }
74
- isSortedBy(col, order) {
75
- const sortOrder = this.getOrderForColumn(col);
76
- return sortOrder === order;
77
- }
78
- isChecked(record) {
79
- if (this.selectedRecords.includes(record.uniqueIdentifier)) {
80
- return true;
81
- }
82
- return false;
83
- }
84
- handleRecordSelectedChange(selected, record) {
85
- if (!selected) {
86
- this.recordsDeselect.emit([record]);
87
- this.selectedRecords = this.selectedRecords.filter((val) => val !== record.uniqueIdentifier);
88
- }
89
- else {
90
- this.recordsSelect.emit([record]);
91
- this.selectedRecords.push(record.uniqueIdentifier);
92
- }
93
- }
94
- selectAll() {
95
- if (this.isAllSelected()) {
96
- this.recordsDeselect.emit(this.records);
97
- this.selectedRecords = [];
98
- }
99
- else {
100
- this.recordsSelect.emit(this.records);
101
- this.selectedRecords = this.records.map((record) => {
102
- return record.uniqueIdentifier;
103
- });
104
- }
105
- }
106
- isAllSelected() {
107
- if (this.selectedRecords.length === this.records.length) {
108
- const allRecords = this.records.filter((record) => this.selectedRecords.includes(record.uniqueIdentifier));
109
- if (allRecords.length === this.records.length) {
110
- return true;
111
- }
112
- }
113
- return false;
114
- }
115
- isSomeSelected() {
116
- if (this.selectedRecords.length > 0 &&
117
- this.selectedRecords.length < this.records.length) {
118
- return true;
119
- }
120
- return false;
121
- }
122
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
123
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordTableComponent, selector: "gn-ui-record-table", inputs: { selectedRecords: "selectedRecords", records: "records", totalHits: "totalHits", sortBy: "sortBy" }, outputs: { recordClick: "recordClick", recordsSelect: "recordsSelect", recordsDeselect: "recordsDeselect", sortByChange: "sortByChange" }, ngImport: i0, template: "<div>\n <div *ngIf=\"totalHits\" class=\"\">\n <div class=\"flex records-information\">\n <div\n translate\n class=\"my-8 ml-4 block text-gray-800\"\n [translateParams]=\"{\n displayed: records.length,\n hits: totalHits\n }\"\n >\n results.records.hits.displayedOn\n </div>\n <div\n *ngIf=\"selectedRecords.length > 0\"\n class=\"my-8 ml-6 block text-gray-400 selected-records\"\n translate\n [translateParams]=\"{ amount: selectedRecords.length }\"\n >\n results.records.hits.selected\n </div>\n </div>\n\n <div\n class=\"grid grid-cols-[repeat(3,minmax(0,max-content))] gap-x-4 gap-y-1\"\n *ngIf=\"records[0].name\"\n >\n <div class=\"contents text-sm\">\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.userDetail</span>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.username</span>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.userEmail</span>\n </div>\n </div>\n <div\n class=\"contents hover:text-gray-900 text-gray-800 cursor-pointer\"\n (click)=\"recordsSelect.emit([record])\"\n *ngFor=\"let record of records\"\n >\n <div class=\"record-table-col text-16\">\n {{ record.name }}\n </div>\n <div class=\"record-table-col text-16\">\n {{ record.username }}\n </div>\n <div class=\"record-table-col text-16\">\n {{ record.emailAddresses[0] }}\n </div>\n </div>\n </div>\n\n <div\n class=\"grid grid-cols-[repeat(6,minmax(0,max-content))] gap-x-4 gap-y-1\"\n *ngIf=\"!records[0].name\"\n >\n <div class=\"contents text-sm\">\n <div class=\"flex justify-center items-center\">\n <gn-ui-checkbox\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isSomeSelected()\"\n (changed)=\"selectAll()\"\n type=\"default\"\n >\n </gn-ui-checkbox>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1 text-left\"\n (buttonClick)=\"setSortBy('resourceTitleObject.default.keyword')\"\n >\n <span translate>record.metadata.title</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('resourceTitleObject.default.keyword', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('resourceTitleObject.default.keyword', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div translate=\"\" class=\"record-table-header text-gray-400 flex gap-1\">\n record.metadata.formats\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('recordOwner')\"\n >\n <span translate>record.metadata.author</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('recordOwner', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('recordOwner', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('changeDate')\"\n >\n <span translate>record.metadata.updatedOn</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('changeDate', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('changeDate', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('createDate')\"\n >\n <span translate>record.metadata.createdOn</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('createDate', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('createDate', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n </div>\n <div\n class=\"contents hover:text-gray-900 text-gray-800 cursor-pointer\"\n (click)=\"recordsSelect.emit([record])\"\n *ngFor=\"let record of records\"\n >\n <div class=\"record-table-col\">\n <gn-ui-checkbox\n [checked]=\"isChecked(record)\"\n (changed)=\"handleRecordSelectedChange($event, record)\"\n type=\"default\"\n ></gn-ui-checkbox>\n </div>\n <div\n [title]=\"record.title\"\n class=\"record-table-col text-16 self-center\"\n >\n {{ record.title }}\n </div>\n <div\n class=\"record-table-col flex justify-start items-center gap-2 text-16\"\n [title]=\"formats.join(', ')\"\n *ngIf=\"getRecordFormats(record) as formats\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div\n class=\"flex-shrink-0\"\n *ngIf=\"!record.name && formats.slice(2).length > 0\"\n >\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div class=\"record-table-col flex items-center gap-2 text-16\">\n <mat-icon class=\"material-symbols-outlined\"> person </mat-icon>\n <span class=\"\">{{ formatUserInfo(record.extras?.ownerInfo) }}</span>\n </div>\n <div class=\"record-table-col text-16 self-center\">\n {{ dateToString(record.recordUpdated) }}\n </div>\n <div class=\"record-table-col text-16 self-center\">\n {{ dateToString(record.recordCreated) }}\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".record-table-col{@apply px-5 py-3 items-center truncate;}.record-table-header{@apply record-table-col capitalize;}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i3.ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: i4.CheckboxComponent, selector: "gn-ui-checkbox", inputs: ["type", "checked", "indeterminate"], outputs: ["changed"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
124
- }
125
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordTableComponent, decorators: [{
126
- type: Component,
127
- args: [{ selector: 'gn-ui-record-table', template: "<div>\n <div *ngIf=\"totalHits\" class=\"\">\n <div class=\"flex records-information\">\n <div\n translate\n class=\"my-8 ml-4 block text-gray-800\"\n [translateParams]=\"{\n displayed: records.length,\n hits: totalHits\n }\"\n >\n results.records.hits.displayedOn\n </div>\n <div\n *ngIf=\"selectedRecords.length > 0\"\n class=\"my-8 ml-6 block text-gray-400 selected-records\"\n translate\n [translateParams]=\"{ amount: selectedRecords.length }\"\n >\n results.records.hits.selected\n </div>\n </div>\n\n <div\n class=\"grid grid-cols-[repeat(3,minmax(0,max-content))] gap-x-4 gap-y-1\"\n *ngIf=\"records[0].name\"\n >\n <div class=\"contents text-sm\">\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.userDetail</span>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.username</span>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.userEmail</span>\n </div>\n </div>\n <div\n class=\"contents hover:text-gray-900 text-gray-800 cursor-pointer\"\n (click)=\"recordsSelect.emit([record])\"\n *ngFor=\"let record of records\"\n >\n <div class=\"record-table-col text-16\">\n {{ record.name }}\n </div>\n <div class=\"record-table-col text-16\">\n {{ record.username }}\n </div>\n <div class=\"record-table-col text-16\">\n {{ record.emailAddresses[0] }}\n </div>\n </div>\n </div>\n\n <div\n class=\"grid grid-cols-[repeat(6,minmax(0,max-content))] gap-x-4 gap-y-1\"\n *ngIf=\"!records[0].name\"\n >\n <div class=\"contents text-sm\">\n <div class=\"flex justify-center items-center\">\n <gn-ui-checkbox\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isSomeSelected()\"\n (changed)=\"selectAll()\"\n type=\"default\"\n >\n </gn-ui-checkbox>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1 text-left\"\n (buttonClick)=\"setSortBy('resourceTitleObject.default.keyword')\"\n >\n <span translate>record.metadata.title</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('resourceTitleObject.default.keyword', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('resourceTitleObject.default.keyword', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div translate=\"\" class=\"record-table-header text-gray-400 flex gap-1\">\n record.metadata.formats\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('recordOwner')\"\n >\n <span translate>record.metadata.author</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('recordOwner', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('recordOwner', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('changeDate')\"\n >\n <span translate>record.metadata.updatedOn</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('changeDate', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('changeDate', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('createDate')\"\n >\n <span translate>record.metadata.createdOn</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('createDate', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('createDate', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n </div>\n <div\n class=\"contents hover:text-gray-900 text-gray-800 cursor-pointer\"\n (click)=\"recordsSelect.emit([record])\"\n *ngFor=\"let record of records\"\n >\n <div class=\"record-table-col\">\n <gn-ui-checkbox\n [checked]=\"isChecked(record)\"\n (changed)=\"handleRecordSelectedChange($event, record)\"\n type=\"default\"\n ></gn-ui-checkbox>\n </div>\n <div\n [title]=\"record.title\"\n class=\"record-table-col text-16 self-center\"\n >\n {{ record.title }}\n </div>\n <div\n class=\"record-table-col flex justify-start items-center gap-2 text-16\"\n [title]=\"formats.join(', ')\"\n *ngIf=\"getRecordFormats(record) as formats\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div\n class=\"flex-shrink-0\"\n *ngIf=\"!record.name && formats.slice(2).length > 0\"\n >\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div class=\"record-table-col flex items-center gap-2 text-16\">\n <mat-icon class=\"material-symbols-outlined\"> person </mat-icon>\n <span class=\"\">{{ formatUserInfo(record.extras?.ownerInfo) }}</span>\n </div>\n <div class=\"record-table-col text-16 self-center\">\n {{ dateToString(record.recordUpdated) }}\n </div>\n <div class=\"record-table-col text-16 self-center\">\n {{ dateToString(record.recordCreated) }}\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".record-table-col{@apply px-5 py-3 items-center truncate;}.record-table-header{@apply record-table-col capitalize;}\n"] }]
128
- }], propDecorators: { selectedRecords: [{
129
- type: Input
130
- }], records: [{
131
- type: Input
132
- }], totalHits: [{
133
- type: Input
134
- }], sortBy: [{
135
- type: Input
136
- }], recordClick: [{
137
- type: Output
138
- }], recordsSelect: [{
139
- type: Output
140
- }], recordsDeselect: [{
141
- type: Output
142
- }], sortByChange: [{
143
- type: Output
144
- }] } });
145
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvc2VhcmNoL3NyYy9saWIvcmVjb3JkLXRhYmxlL3JlY29yZC10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3VpL3NlYXJjaC9zcmMvbGliL3JlY29yZC10YWJsZS9yZWNvcmQtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUV0RSxPQUFPLEVBRUwsYUFBYSxFQUNiLGFBQWEsRUFDYixpQkFBaUIsR0FDbEIsTUFBTSx3Q0FBd0MsQ0FBQTs7Ozs7OztBQVEvQyxNQUFNLE9BQU8sb0JBQW9CO0lBTGpDO1FBTVcsb0JBQWUsR0FBYSxFQUFFLENBQUE7UUFDOUIsWUFBTyxHQUFVLEVBQUUsQ0FBQTtRQUdsQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFBO1FBQy9DLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUE7UUFDbkQsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQTtRQUNyRCxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFlLENBQUE7S0E2SHpEO0lBM0hDLFlBQVksQ0FBQyxJQUFVO1FBQ3JCLE9BQU8sSUFBSSxFQUFFLGtCQUFrQixDQUFDLFNBQVMsRUFBRTtZQUN6QyxJQUFJLEVBQUUsU0FBUztZQUNmLEtBQUssRUFBRSxNQUFNO1lBQ2IsR0FBRyxFQUFFLFNBQVM7WUFDZCxRQUFRLEVBQUUsS0FBSztTQUNoQixDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsU0FBUyxDQUFDLGdCQUFtQztRQUMzQyxPQUFPLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxD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O1lBQ2hDLENBQUMsQ0FBQyxDQUFBO1NBQ0g7SUFDSCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDdkQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNoRCxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FDdkQsQ0FBQTtZQUNELElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtnQkFDN0MsT0FBTyxJQUFJLENBQUE7YUFDWjtTQUNGO1FBQ0QsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQsY0FBYztRQUNaLElBQ0UsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUMvQixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFDakQ7WUFDQSxPQUFPLElBQUksQ0FBQTtTQUNaO1FBQ0QsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDOzhHQXBJVSxvQkFBb0I7a0dBQXBCLG9CQUFvQixtVENmakMsbTZPQXVOQTs7MkZEeE1hLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxvQkFBb0I7OEJBS3JCLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBDYXRhbG9nUmVjb3JkIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvcmVjb3JkJ1xuaW1wb3J0IHtcbiAgRmlsZUZvcm1hdCxcbiAgZ2V0QmFkZ2VDb2xvcixcbiAgZ2V0RmlsZUZvcm1hdCxcbiAgZ2V0Rm9ybWF0UHJpb3JpdHksXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdXRpbC9zaGFyZWQvc3JjJ1xuaW1wb3J0IHsgU29ydEJ5RmllbGQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC9zZWFyY2gnXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2duLXVpLXJlY29yZC10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZWNvcmQtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZWNvcmQtdGFibGUuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBSZWNvcmRUYWJsZUNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHNlbGVjdGVkUmVjb3Jkczogc3RyaW5nW10gPSBbXVxuICBASW5wdXQoKSByZWNvcmRzOiBhbnlbXSA9IFtdXG4gIEBJbnB1dCgpIHRvdGFsSGl0cz86IG51bWJlclxuICBASW5wdXQoKSBzb3J0Qnk/OiBTb3J0QnlGaWVsZFxuICBAT3V0cHV0KCkgcmVjb3JkQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPENhdGFsb2dSZWNvcmQ+KClcbiAgQE91dHB1dCgpIHJlY29yZHNTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPENhdGFsb2dSZWNvcmRbXT4oKVxuICBAT3V0cHV0KCkgcmVjb3Jkc0Rlc2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxDYXRhbG9nUmVjb3JkW10+KClcbiAgQE91dHB1dCgpIHNvcnRCeUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8U29ydEJ5RmllbGQ+KClcblxuICBkYXRlVG9TdHJpbmcoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRhdGU/LnRvTG9jYWxlRGF0ZVN0cmluZyh1bmRlZmluZWQsIHtcbiAgICAgIHllYXI6ICdudW1lcmljJyxcbiAgICAgIG1vbnRoOiAnbG9uZycsXG4gICAgICBkYXk6ICdudW1lcmljJyxcbiAgICAgIHRpbWVab25lOiAnVVRDJyxcbiAgICB9KVxuICB9XG5cbiAgZ2V0U3RhdHVzKGlzUHVibGlzaGVkVG9BbGw6IGJvb2xlYW4gfCB1bmtub3duKSB7XG4gICAgcmV0dXJuIGlzUHVibGlzaGVkVG9BbGwgPyAncHVibGlzaGVkJyA6ICdub3QgcHVibGlzaGVkJ1xuICB9XG5cbiAgZm9ybWF0VXNlckluZm8odXNlckluZm86IHN0cmluZyB8IHVua25vd24pOiBzdHJpbmcge1xuICAgIGNvbnN0IGluZm9zID0gKHR5cGVvZiB1c2VySW5mbyA9PT0gJ3N0cmluZycgPyB1c2VySW5mbyA6ICcnKS5zcGxpdCgnfCcpXG4gICAgaWYgKGluZm9zICYmIGluZm9zLmxlbmd0aCA9PT0gNCkge1xuICAgICAgcmV0dXJuIGAke2luZm9zWzJdfSAke2luZm9zWzFdfWBcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgZ2V0UmVjb3JkRm9ybWF0cyhyZWNvcmQ6IENhdGFsb2dSZWNvcmQpOiBGaWxlRm9ybWF0W10ge1xuICAgIGlmIChyZWNvcmQua2luZCA9PT0gJ3NlcnZpY2UnIHx8ICEoJ2Rpc3RyaWJ1dGlvbnMnIGluIHJlY29yZCkpIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cbiAgICBjb25zdCBmb3JtYXRzID0gQXJyYXkuZnJvbShcbiAgICAgIG5ldyBTZXQoXG4gICAgICAgIHJlY29yZC5kaXN0cmlidXRpb25zLm1hcCgoZGlzdHJpYnV0aW9uKSA9PiBnZXRGaWxlRm9ybWF0KGRpc3RyaWJ1dGlvbikpXG4gICAgICApXG4gICAgKS5maWx0ZXIoKGZvcm1hdCkgPT4gISFmb3JtYXQpXG4gICAgZm9ybWF0cy5zb3J0KChhLCBiKSA9PiBnZXRGb3JtYXRQcmlvcml0eShiKSAtIGdldEZvcm1hdFByaW9yaXR5KGEpKVxuICAgIHJldHVybiBmb3JtYXRzXG4gIH1cblxuICBnZXRCYWRnZUNvbG9yKGZvcm1hdDogRmlsZUZvcm1hdCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldEJhZGdlQ29sb3IoZm9ybWF0KVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcmRlckZvckNvbHVtbihjb2w6IHN0cmluZyk6ICdhc2MnIHwgJ2Rlc2MnIHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLnNvcnRCeSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgbGV0IG9yZGVyOiAnYXNjJyB8ICdkZXNjJyB8IG51bGwgPSBudWxsXG4gICAgY29uc3Qgc29ydGVkQXJyYXkgPSBBcnJheS5pc0FycmF5KHRoaXMuc29ydEJ5WzBdKVxuICAgICAgPyB0aGlzLnNvcnRCeVxuICAgICAgOiBbdGhpcy5zb3J0QnldXG4gICAgc29ydGVkQXJyYXkuZm9yRWFjaCgoc29ydGVkQ29sKSA9PiB7XG4gICAgICBpZiAoc29ydGVkQ29sWzFdID09PSBjb2wpIHtcbiAgICAgICAgb3JkZXIgPSBzb3J0ZWRDb2xbMF1cbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBvcmRlclxuICB9XG5cbiAgc2V0U29ydEJ5KGNvbDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgc29ydE9yZGVyID0gdGhpcy5nZXRPcmRlckZvckNvbHVtbihjb2wpXG4gICAgbGV0IG5ld09yZGVyXG4gICAgaWYgKHNvcnRPcmRlcikge1xuICAgICAgbmV3T3JkZXIgPSBzb3J0T3JkZXIgPT09ICdhc2MnID8gJ2Rlc2MnIDogJ2FzYydcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3T3JkZXIgPSAnYXNjJ1xuICAgIH1cbiAgICB0aGlzLnNvcnRCeUNoYW5nZS5lbWl0KFtuZXdPcmRlciwgY29sXSlcbiAgICB0aGlzLnNvcnRCeSA9IFtuZXdPcmRlciwgY29sXVxuICB9XG5cbiAgaXNTb3J0ZWRCeShjb2w6IHN0cmluZywgb3JkZXI6ICdhc2MnIHwgJ2Rlc2MnKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc29ydE9yZGVyID0gdGhpcy5nZXRPcmRlckZvckNvbHVtbihjb2wpXG4gICAgcmV0dXJuIHNvcnRPcmRlciA9PT0gb3JkZXJcbiAgfVxuXG4gIGlzQ2hlY2tlZChyZWNvcmQ6IENhdGFsb2dSZWNvcmQpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFJlY29yZHMuaW5jbHVkZXMocmVjb3JkLnVuaXF1ZUlkZW50aWZpZXIpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGhhbmRsZVJlY29yZFNlbGVjdGVkQ2hhbmdlKHNlbGVjdGVkOiBib29sZWFuLCByZWNvcmQ6IENhdGFsb2dSZWNvcmQpIHtcbiAgICBpZiAoIXNlbGVjdGVkKSB7XG4gICAgICB0aGlzLnJlY29yZHNEZXNlbGVjdC5lbWl0KFtyZWNvcmRdKVxuICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZHMgPSB0aGlzLnNlbGVjdGVkUmVjb3Jkcy5maWx0ZXIoXG4gICAgICAgICh2YWwpID0+IHZhbCAhPT0gcmVjb3JkLnVuaXF1ZUlkZW50aWZpZXJcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZWNvcmRzU2VsZWN0LmVtaXQoW3JlY29yZF0pXG4gICAgICB0aGlzLnNlbGVjdGVkUmVjb3Jkcy5wdXNoKHJlY29yZC51bmlxdWVJZGVudGlmaWVyKVxuICAgIH1cbiAgfVxuXG4gIHNlbGVjdEFsbCgpIHtcbiAgICBpZiAodGhpcy5pc0FsbFNlbGVjdGVkKCkpIHtcbiAgICAgIHRoaXMucmVjb3Jkc0Rlc2VsZWN0LmVtaXQodGhpcy5yZWNvcmRzKVxuICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZHMgPSBbXVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlY29yZHNTZWxlY3QuZW1pdCh0aGlzLnJlY29yZHMpXG4gICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkcyA9IHRoaXMucmVjb3Jkcy5tYXAoKHJlY29yZCkgPT4ge1xuICAgICAgICByZXR1cm4gcmVjb3JkLnVuaXF1ZUlkZW50aWZpZXJcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgaXNBbGxTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFJlY29yZHMubGVuZ3RoID09PSB0aGlzLnJlY29yZHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBhbGxSZWNvcmRzID0gdGhpcy5yZWNvcmRzLmZpbHRlcigocmVjb3JkKSA9PlxuICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3Jkcy5pbmNsdWRlcyhyZWNvcmQudW5pcXVlSWRlbnRpZmllcilcbiAgICAgIClcbiAgICAgIGlmIChhbGxSZWNvcmRzLmxlbmd0aCA9PT0gdGhpcy5yZWNvcmRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlzU29tZVNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmRzLmxlbmd0aCA+IDAgJiZcbiAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmRzLmxlbmd0aCA8IHRoaXMucmVjb3Jkcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iLCI8ZGl2PlxuICA8ZGl2ICpuZ0lmPVwidG90YWxIaXRzXCIgY2xhc3M9XCJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCByZWNvcmRzLWluZm9ybWF0aW9uXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICBjbGFzcz1cIm15LTggbWwtNCBibG9jayB0ZXh0LWdyYXktODAwXCJcbiAgICAgICAgW3RyYW5zbGF0ZVBhcmFtc109XCJ7XG4gICAgICAgICAgZGlzcGxheWVkOiByZWNvcmRzLmxlbmd0aCxcbiAgICAgICAgICBoaXRzOiB0b3RhbEhpdHNcbiAgICAgICAgfVwiXG4gICAgICA+XG4gICAgICAgIHJlc3VsdHMucmVjb3Jkcy5oaXRzLmRpc3BsYXllZE9uXG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJzZWxlY3RlZFJlY29yZHMubGVuZ3RoID4gMFwiXG4gICAgICAgIGNsYXNzPVwibXktOCBtbC02IGJsb2NrIHRleHQtZ3JheS00MDAgc2VsZWN0ZWQtcmVjb3Jkc1wiXG4gICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICBbdHJhbnNsYXRlUGFyYW1zXT1cInsgYW1vdW50OiBzZWxlY3RlZFJlY29yZHMubGVuZ3RoIH1cIlxuICAgICAgPlxuICAgICAgICByZXN1bHRzLnJlY29yZHMuaGl0cy5zZWxlY3RlZFxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImdyaWQgZ3JpZC1jb2xzLVtyZXBlYXQoMyxtaW5tYXgoMCxtYXgtY29udGVudCkpXSBnYXAteC00IGdhcC15LTFcIlxuICAgICAgKm5nSWY9XCJyZWNvcmRzWzBdLm5hbWVcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50cyB0ZXh0LXNtXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtdGFibGUtaGVhZGVyIHRleHQtZ3JheS00MDAgZmxleCBnYXAtMVwiPlxuICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5kYXNoYm9hcmQucmVjb3Jkcy51c2VyRGV0YWlsPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC10YWJsZS1oZWFkZXIgdGV4dC1ncmF5LTQwMCBmbGV4IGdhcC0xXCI+XG4gICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPmRhc2hib2FyZC5yZWNvcmRzLnVzZXJuYW1lPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC10YWJsZS1oZWFkZXIgdGV4dC1ncmF5LTQwMCBmbGV4IGdhcC0xXCI+XG4gICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPmRhc2hib2FyZC5yZWNvcmRzLnVzZXJFbWFpbDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjb250ZW50cyBob3Zlcjp0ZXh0LWdyYXktOTAwIHRleHQtZ3JheS04MDAgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAoY2xpY2spPVwicmVjb3Jkc1NlbGVjdC5lbWl0KFtyZWNvcmRdKVwiXG4gICAgICAgICpuZ0Zvcj1cImxldCByZWNvcmQgb2YgcmVjb3Jkc1wiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtdGFibGUtY29sIHRleHQtMTZcIj5cbiAgICAgICAgICB7eyByZWNvcmQubmFtZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC10YWJsZS1jb2wgdGV4dC0xNlwiPlxuICAgICAgICAgIHt7IHJlY29yZC51c2VybmFtZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC10YWJsZS1jb2wgdGV4dC0xNlwiPlxuICAgICAgICAgIHt7IHJlY29yZC5lbWFpbEFkZHJlc3Nlc1swXSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJncmlkIGdyaWQtY29scy1bcmVwZWF0KDYsbWlubWF4KDAsbWF4LWNvbnRlbnQpKV0gZ2FwLXgtNCBnYXAteS0xXCJcbiAgICAgICpuZ0lmPVwiIXJlY29yZHNbMF0ubmFtZVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRzIHRleHQtc21cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgPGduLXVpLWNoZWNrYm94XG4gICAgICAgICAgICBbY2hlY2tlZF09XCJpc0FsbFNlbGVjdGVkKClcIlxuICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiaXNTb21lU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAoY2hhbmdlZCk9XCJzZWxlY3RBbGwoKVwiXG4gICAgICAgICAgICB0eXBlPVwiZGVmYXVsdFwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvZ24tdWktY2hlY2tib3g+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVjb3JkLXRhYmxlLWhlYWRlciB0ZXh0LWdyYXktNDAwIGZsZXggZ2FwLTFcIj5cbiAgICAgICAgICA8Z24tdWktYnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwibGlnaHRcIlxuICAgICAgICAgICAgZXh0cmFDbGFzcz1cInB4LTMgcGwtMCBzcGFjZS14LTEgdGV4dC1sZWZ0XCJcbiAgICAgICAgICAgIChidXR0b25DbGljayk9XCJzZXRTb3J0QnkoJ3Jlc291cmNlVGl0bGVPYmplY3QuZGVmYXVsdC5rZXl3b3JkJylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5yZWNvcmQubWV0YWRhdGEudGl0bGU8L3NwYW4+XG4gICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJpc1NvcnRlZEJ5KCdyZXNvdXJjZVRpdGxlT2JqZWN0LmRlZmF1bHQua2V5d29yZCcsICdkZXNjJylcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBleHBhbmRfbW9yZTwvbWF0LWljb25cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtaWNvblxuICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIlxuICAgICAgICAgICAgICAqbmdJZj1cImlzU29ydGVkQnkoJ3Jlc291cmNlVGl0bGVPYmplY3QuZGVmYXVsdC5rZXl3b3JkJywgJ2FzYycpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgZXhwYW5kX2xlc3M8L21hdC1pY29uXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9nbi11aS1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IHRyYW5zbGF0ZT1cIlwiIGNsYXNzPVwicmVjb3JkLXRhYmxlLWhlYWRlciB0ZXh0LWdyYXktNDAwIGZsZXggZ2FwLTFcIj5cbiAgICAgICAgICByZWNvcmQubWV0YWRhdGEuZm9ybWF0c1xuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC10YWJsZS1oZWFkZXIgdGV4dC1ncmF5LTQwMCBmbGV4IGdhcC0xXCI+XG4gICAgICAgICAgPGduLXVpLWJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImxpZ2h0XCJcbiAgICAgICAgICAgIGV4dHJhQ2xhc3M9XCJweC0zIHBsLTAgc3BhY2UteC0xXCJcbiAgICAgICAgICAgIChidXR0b25DbGljayk9XCJzZXRTb3J0QnkoJ3JlY29yZE93bmVyJylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5yZWNvcmQubWV0YWRhdGEuYXV0aG9yPC9zcGFuPlxuICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiaXNTb3J0ZWRCeSgncmVjb3JkT3duZXInLCAnZGVzYycpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgZXhwYW5kX21vcmU8L21hdC1pY29uXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJpc1NvcnRlZEJ5KCdyZWNvcmRPd25lcicsICdhc2MnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIGV4cGFuZF9sZXNzPC9tYXQtaWNvblxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvZ24tdWktYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC10YWJsZS1oZWFkZXIgdGV4dC1ncmF5LTQwMCBmbGV4IGdhcC0xXCI+XG4gICAgICAgICAgPGduLXVpLWJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImxpZ2h0XCJcbiAgICAgICAgICAgIGV4dHJhQ2xhc3M9XCJweC0zIHBsLTAgc3BhY2UteC0xXCJcbiAgICAgICAgICAgIChidXR0b25DbGljayk9XCJzZXRTb3J0QnkoJ2NoYW5nZURhdGUnKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPnJlY29yZC5tZXRhZGF0YS51cGRhdGVkT248L3NwYW4+XG4gICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJpc1NvcnRlZEJ5KCdjaGFuZ2VEYXRlJywgJ2Rlc2MnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIGV4cGFuZF9tb3JlPC9tYXQtaWNvblxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiaXNTb3J0ZWRCeSgnY2hhbmdlRGF0ZScsICdhc2MnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIGV4cGFuZF9sZXNzPC9tYXQtaWNvblxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvZ24tdWktYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC10YWJsZS1oZWFkZXIgdGV4dC1ncmF5LTQwMCBmbGV4IGdhcC0xXCI+XG4gICAgICAgICAgPGduLXVpLWJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImxpZ2h0XCJcbiAgICAgICAgICAgIGV4dHJhQ2xhc3M9XCJweC0zIHBsLTAgc3BhY2UteC0xXCJcbiAgICAgICAgICAgIChidXR0b25DbGljayk9XCJzZXRTb3J0QnkoJ2NyZWF0ZURhdGUnKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPnJlY29yZC5tZXRhZGF0YS5jcmVhdGVkT248L3NwYW4+XG4gICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJpc1NvcnRlZEJ5KCdjcmVhdGVEYXRlJywgJ2Rlc2MnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIGV4cGFuZF9tb3JlPC9tYXQtaWNvblxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiaXNTb3J0ZWRCeSgnY3JlYXRlRGF0ZScsICdhc2MnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIGV4cGFuZF9sZXNzPC9tYXQtaWNvblxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvZ24tdWktYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNvbnRlbnRzIGhvdmVyOnRleHQtZ3JheS05MDAgdGV4dC1ncmF5LTgwMCBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgIChjbGljayk9XCJyZWNvcmRzU2VsZWN0LmVtaXQoW3JlY29yZF0pXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IHJlY29yZCBvZiByZWNvcmRzXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC10YWJsZS1jb2xcIj5cbiAgICAgICAgICA8Z24tdWktY2hlY2tib3hcbiAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQ2hlY2tlZChyZWNvcmQpXCJcbiAgICAgICAgICAgIChjaGFuZ2VkKT1cImhhbmRsZVJlY29yZFNlbGVjdGVkQ2hhbmdlKCRldmVudCwgcmVjb3JkKVwiXG4gICAgICAgICAgICB0eXBlPVwiZGVmYXVsdFwiXG4gICAgICAgICAgPjwvZ24tdWktY2hlY2tib3g+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgW3RpdGxlXT1cInJlY29yZC50aXRsZVwiXG4gICAgICAgICAgY2xhc3M9XCJyZWNvcmQtdGFibGUtY29sIHRleHQtMTYgc2VsZi1jZW50ZXJcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgcmVjb3JkLnRpdGxlIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJyZWNvcmQtdGFibGUtY29sIGZsZXgganVzdGlmeS1zdGFydCBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC0xNlwiXG4gICAgICAgICAgW3RpdGxlXT1cImZvcm1hdHMuam9pbignLCAnKVwiXG4gICAgICAgICAgKm5nSWY9XCJnZXRSZWNvcmRGb3JtYXRzKHJlY29yZCkgYXMgZm9ybWF0c1wiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJiYWRnZS1idG4gbWluLXctWzQ1cHhdIHRleHQtc20gdGV4dC13aGl0ZSBweC0yIGZsZXgtc2hyaW5rLTBcIlxuICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiZ2V0QmFkZ2VDb2xvcihmb3JtYXRzWzBdKVwiXG4gICAgICAgICAgICAqbmdJZj1cImZvcm1hdHNbMF1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGZvcm1hdHNbMF0gfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2UtYnRuIG1pbi13LVs0NXB4XSB0ZXh0LXNtIHRleHQtd2hpdGUgcHgtMiBmbGV4LXNocmluay0wXCJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImdldEJhZGdlQ29sb3IoZm9ybWF0c1sxXSlcIlxuICAgICAgICAgICAgKm5nSWY9XCJmb3JtYXRzWzFdXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBmb3JtYXRzWzFdIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleC1zaHJpbmstMFwiXG4gICAgICAgICAgICAqbmdJZj1cIiFyZWNvcmQubmFtZSAmJiBmb3JtYXRzLnNsaWNlKDIpLmxlbmd0aCA+IDBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuPit7eyBmb3JtYXRzLnNsaWNlKDIpLmxlbmd0aCB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtdGFibGUtY29sIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtMTZcIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IHBlcnNvbiA8L21hdC1pY29uPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiXCI+e3sgZm9ybWF0VXNlckluZm8ocmVjb3JkLmV4dHJhcz8ub3duZXJJbmZvKSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtdGFibGUtY29sIHRleHQtMTYgc2VsZi1jZW50ZXJcIj5cbiAgICAgICAgICB7eyBkYXRlVG9TdHJpbmcocmVjb3JkLnJlY29yZFVwZGF0ZWQpIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVjb3JkLXRhYmxlLWNvbCB0ZXh0LTE2IHNlbGYtY2VudGVyXCI+XG4gICAgICAgICAge3sgZGF0ZVRvU3RyaW5nKHJlY29yZC5yZWNvcmRDcmVhdGVkKSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -1,24 +0,0 @@
1
- import { TranslateLoader } from '@ngx-translate/core';
2
- import { of as observableOf } from 'rxjs';
3
- // IMPORTANT:
4
- // This was copy-pasted from https://github.com/mwootendev/ngx-translate-plugins/blob/7c6c73c7d16c9519a7bafff939d29fd8ea5e574a/projects/testing/src/lib/test-translate-loader.service.ts
5
- // because the original package was expecting rxjs 7+ as a peer dep and that was conflicting with many other dependencies
6
- // FIXME: when rxjs 7 can be used in the project, remove this and do `npm install ngx-translate-testing --save-dev`
7
- export class TestTranslateLoader extends TranslateLoader {
8
- constructor(_translations = {}) {
9
- super();
10
- this._translations = _translations;
11
- }
12
- /**
13
- * Returns an {Observable} of translations for the specified language. If the
14
- * language is not recognized, an empty translations object will be returned.
15
- *
16
- * @param language the language for which the translations should be retrieved.
17
- * @returns the translations for the specified
18
- * language or an empty set of translations if the language is not recognized.
19
- */
20
- getTranslation(language) {
21
- return observableOf(this._translations[language] || {});
22
- }
23
- }
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC50cmFuc2xhdGUubG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91dGlsL2kxOG4vc3JjL2xpYi90ZXN0aW5nL3Rlc3QudHJhbnNsYXRlLmxvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDckQsT0FBTyxFQUFjLEVBQUUsSUFBSSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFHckQsYUFBYTtBQUNiLHdMQUF3TDtBQUN4TCx5SEFBeUg7QUFDekgsbUhBQW1IO0FBRW5ILE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxlQUFlO0lBQ3RELFlBQW9CLGdCQUE4QixFQUFFO1FBQ2xELEtBQUssRUFBRSxDQUFBO1FBRFcsa0JBQWEsR0FBYixhQUFhLENBQW1CO0lBRXBELENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksY0FBYyxDQUFDLFFBQWdCO1FBQ3BDLE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUE7SUFDekQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHJhbnNsYXRlTG9hZGVyIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSdcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIGFzIG9ic2VydmFibGVPZiB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBUcmFuc2xhdGlvbnMsIExhbmd1YWdlVHJhbnNsYXRpb25zIH0gZnJvbSAnLi90cmFuc2xhdGlvbnMubW9kZWwnXG5cbi8vIElNUE9SVEFOVDpcbi8vIFRoaXMgd2FzIGNvcHktcGFzdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL213b290ZW5kZXYvbmd4LXRyYW5zbGF0ZS1wbHVnaW5zL2Jsb2IvN2M2YzczYzdkMTZjOTUxOWE3YmFmZmY5MzlkMjlmZDhlYTVlNTc0YS9wcm9qZWN0cy90ZXN0aW5nL3NyYy9saWIvdGVzdC10cmFuc2xhdGUtbG9hZGVyLnNlcnZpY2UudHNcbi8vIGJlY2F1c2UgdGhlIG9yaWdpbmFsIHBhY2thZ2Ugd2FzIGV4cGVjdGluZyByeGpzIDcrIGFzIGEgcGVlciBkZXAgYW5kIHRoYXQgd2FzIGNvbmZsaWN0aW5nIHdpdGggbWFueSBvdGhlciBkZXBlbmRlbmNpZXNcbi8vIEZJWE1FOiB3aGVuIHJ4anMgNyBjYW4gYmUgdXNlZCBpbiB0aGUgcHJvamVjdCwgcmVtb3ZlIHRoaXMgYW5kIGRvIGBucG0gaW5zdGFsbCBuZ3gtdHJhbnNsYXRlLXRlc3RpbmcgLS1zYXZlLWRldmBcblxuZXhwb3J0IGNsYXNzIFRlc3RUcmFuc2xhdGVMb2FkZXIgZXh0ZW5kcyBUcmFuc2xhdGVMb2FkZXIge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF90cmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIoKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4ge09ic2VydmFibGV9IG9mIHRyYW5zbGF0aW9ucyBmb3IgdGhlIHNwZWNpZmllZCBsYW5ndWFnZS4gSWYgdGhlXG4gICAqIGxhbmd1YWdlIGlzIG5vdCByZWNvZ25pemVkLCBhbiBlbXB0eSB0cmFuc2xhdGlvbnMgb2JqZWN0IHdpbGwgYmUgcmV0dXJuZWQuXG4gICAqXG4gICAqIEBwYXJhbSBsYW5ndWFnZSB0aGUgbGFuZ3VhZ2UgZm9yIHdoaWNoIHRoZSB0cmFuc2xhdGlvbnMgc2hvdWxkIGJlIHJldHJpZXZlZC5cbiAgICogQHJldHVybnMgdGhlIHRyYW5zbGF0aW9ucyBmb3IgdGhlIHNwZWNpZmllZFxuICAgKiAgICAgICAgICBsYW5ndWFnZSBvciBhbiBlbXB0eSBzZXQgb2YgdHJhbnNsYXRpb25zIGlmIHRoZSBsYW5ndWFnZSBpcyBub3QgcmVjb2duaXplZC5cbiAgICovXG4gIHB1YmxpYyBnZXRUcmFuc2xhdGlvbihsYW5ndWFnZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxMYW5ndWFnZVRyYW5zbGF0aW9ucz4ge1xuICAgIHJldHVybiBvYnNlcnZhYmxlT2YodGhpcy5fdHJhbnNsYXRpb25zW2xhbmd1YWdlXSB8fCB7fSlcbiAgfVxufVxuIl19
@@ -1,109 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { FakeMissingTranslationHandler, TranslateDefaultParser, TranslateFakeCompiler, TranslateModule, TranslateService, } from '@ngx-translate/core';
3
- import { TestTranslateLoader } from './test.translate.loader';
4
- import * as i0 from "@angular/core";
5
- // IMPORTANT:
6
- // This was copy-pasted from https://github.com/mwootendev/ngx-translate-plugins/blob/7c6c73c7d16c9519a7bafff939d29fd8ea5e574a/projects/testing/src/lib/testing.module.ts
7
- // because the original package was expecting rxjs 7+ as a peer dep and that was conflicting with many other dependencies
8
- // FIXME: when rxjs 7 can be used in the project, remove this and do `npm install ngx-translate-testing --save-dev`
9
- /**
10
- * The TranslateTestingModule provides the {TranslateModule} as well as a
11
- * {TranslateService} configured to return translations specific for the
12
- * test environment.
13
- *
14
- * @export
15
- */
16
- export class TranslateTestingModule {
17
- constructor() {
18
- this._translations = {};
19
- }
20
- static withTranslations(languageOrTranslations, translations) {
21
- const translateTestingModule = new TranslateTestingModule();
22
- if (typeof languageOrTranslations === 'string') {
23
- return translateTestingModule.withTranslations(languageOrTranslations, translations);
24
- }
25
- return translateTestingModule.withTranslations(languageOrTranslations);
26
- }
27
- get ngModule() {
28
- return TranslateTestingModule;
29
- }
30
- get providers() {
31
- const translateService = new TranslateService(null, new TestTranslateLoader(this._translations), this._compiler || new TranslateFakeCompiler(), new TranslateDefaultParser(), new FakeMissingTranslationHandler(), true, true, false, this._defaultLanguage);
32
- return [
33
- {
34
- provide: TranslateService,
35
- useValue: translateService,
36
- },
37
- ];
38
- }
39
- withTranslations(languageOrTranslations, translations) {
40
- if (typeof languageOrTranslations === 'string' && translations) {
41
- this.addTranslations(languageOrTranslations, translations);
42
- this._defaultLanguage = languageOrTranslations;
43
- }
44
- else if (languageOrTranslations) {
45
- Object.keys(languageOrTranslations).forEach((language) => this.addTranslations(language, languageOrTranslations[language]));
46
- }
47
- return this;
48
- }
49
- /**
50
- * Updates the {TranslationTestingModule} to provide a {TranslateService} that will
51
- * use the provided {TranslateCompiler} to translate the test translations.
52
- *
53
- * @example
54
- *
55
- * TranslateTestingModule.withTranslations('en', {people: '{gender, select, male{He is} female{She is} other{They are}} {how})'})
56
- * .withCompiler(new TranslateMessageFormatCompiler());
57
- *
58
- * @param compiler the compiler to use to compile the test translations.
59
- * @returns the instance that can be used to chain additional configuration.
60
- * @memberof TranslateTestingModule
61
- */
62
- withCompiler(compiler) {
63
- this._compiler = compiler;
64
- return this;
65
- }
66
- /**
67
- * Updates the {TranslateTestingModule} to use the provided language as the default language.
68
- * By default, the default language will be set to the first language provided.
69
- *
70
- * @example
71
- *
72
- * TranslateTestingModule.withTranslations('es', SPANISH_TRANSLATIONS)
73
- * .withTranslations('en', ENGLISH_TRANSLATIONS)
74
- * .withDefaultLanguage('en');
75
- *
76
- * @param language the new default language for translations.
77
- * @returns the instance that can be used to chain additional configuration.
78
- * @memberof TranslateTestingModule
79
- */
80
- withDefaultLanguage(language) {
81
- this._defaultLanguage = language || this._defaultLanguage;
82
- return this;
83
- }
84
- addTranslations(language, translations) {
85
- if (!this._defaultLanguage) {
86
- this._defaultLanguage = language;
87
- }
88
- if (this._translations[language]) {
89
- this._translations[language] = {
90
- ...this._translations[language],
91
- ...translations,
92
- };
93
- }
94
- else {
95
- this._translations[language] = translations;
96
- }
97
- }
98
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TranslateTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
99
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: TranslateTestingModule, imports: [TranslateModule], exports: [TranslateModule] }); }
100
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TranslateTestingModule, imports: [TranslateModule, TranslateModule] }); }
101
- }
102
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TranslateTestingModule, decorators: [{
103
- type: NgModule,
104
- args: [{
105
- imports: [TranslateModule],
106
- exports: [TranslateModule],
107
- }]
108
- }] });
109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC50cmFuc2xhdGUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91dGlsL2kxOG4vc3JjL2xpYi90ZXN0aW5nL3Rlc3QudHJhbnNsYXRlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUM3RCxPQUFPLEVBQ0wsNkJBQTZCLEVBQzdCLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsZUFBZSxFQUNmLGdCQUFnQixHQUVqQixNQUFNLHFCQUFxQixDQUFBO0FBQzVCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFBOztBQUc3RCxhQUFhO0FBQ2IseUtBQXlLO0FBQ3pLLHlIQUF5SDtBQUN6SCxtSEFBbUg7QUFFbkg7Ozs7OztHQU1HO0FBS0gsTUFBTSxPQUFPLHNCQUFzQjtJQUpuQztRQU9VLGtCQUFhLEdBQWlCLEVBQUUsQ0FBQTtLQTJNekM7SUF6SlEsTUFBTSxDQUFDLGdCQUFnQixDQUM1QixzQkFBNkMsRUFDN0MsWUFBbUM7UUFFbkMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLHNCQUFzQixFQUFFLENBQUE7UUFFM0QsSUFBSSxPQUFPLHNCQUFzQixLQUFLLFFBQVEsRUFBRTtZQUM5QyxPQUFPLHNCQUFzQixDQUFDLGdCQUFnQixDQUNwQyxzQkFBc0IsRUFDOUIsWUFBWSxDQUNiLENBQUE7U0FDRjtRQUVELE9BQU8sc0JBQXNCLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtJQUN4RSxDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sc0JBQXNCLENBQUE7SUFDL0IsQ0FBQztJQUVELElBQVcsU0FBUztRQUNsQixNQUFNLGdCQUFnQixHQUFHLElBQUksZ0JBQWdCLENBQzNDLElBQUksRUFDSixJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDM0MsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLHFCQUFxQixFQUFFLEVBQzdDLElBQUksc0JBQXNCLEVBQUUsRUFDNUIsSUFBSSw2QkFBNkIsRUFBRSxFQUNuQyxJQUFJLEVBQ0osSUFBSSxFQUNKLEtBQUssRUFDTCxJQUFJLENBQUMsZ0JBQWdCLENBQ3RCLENBQUE7UUFFRCxPQUFPO1lBQ0w7Z0JBQ0UsT0FBTyxFQUFFLGdCQUFnQjtnQkFDekIsUUFBUSxFQUFFLGdCQUFnQjthQUMzQjtTQUNGLENBQUE7SUFDSCxDQUFDO0lBNkNNLGdCQUFnQixDQUNyQixzQkFBNkMsRUFDN0MsWUFBbUM7UUFFbkMsSUFBSSxPQUFPLHNCQUFzQixLQUFLLFFBQVEsSUFBSSxZQUFZLEVBQUU7WUFDOUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsRUFBRSxZQUFZLENBQUMsQ0FBQTtZQUMxRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsc0JBQXNCLENBQUE7U0FDL0M7YUFBTSxJQUFJLHNCQUFzQixFQUFFO1lBQ2pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUN2RCxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUNqRSxDQUFBO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSSxZQUFZLENBQUMsUUFBMkI7UUFDN0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUE7UUFDekIsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNJLG1CQUFtQixDQUFDLFFBQWdCO1FBQ3pDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFBO1FBQ3pELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVPLGVBQWUsQ0FDckIsUUFBZ0IsRUFDaEIsWUFBa0M7UUFFbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUMxQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxDQUFBO1NBQ2pDO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUc7Z0JBQzdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUM7Z0JBQy9CLEdBQUcsWUFBWTthQUNoQixDQUFBO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsWUFBWSxDQUFBO1NBQzVDO0lBQ0gsQ0FBQzs4R0E3TVUsc0JBQXNCOytHQUF0QixzQkFBc0IsWUFIdkIsZUFBZSxhQUNmLGVBQWU7K0dBRWQsc0JBQXNCLFlBSHZCLGVBQWUsRUFDZixlQUFlOzsyRkFFZCxzQkFBc0I7a0JBSmxDLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsZUFBZSxDQUFDO29CQUMxQixPQUFPLEVBQUUsQ0FBQyxlQUFlLENBQUM7aUJBQzNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHtcbiAgRmFrZU1pc3NpbmdUcmFuc2xhdGlvbkhhbmRsZXIsXG4gIFRyYW5zbGF0ZURlZmF1bHRQYXJzZXIsXG4gIFRyYW5zbGF0ZUZha2VDb21waWxlcixcbiAgVHJhbnNsYXRlTW9kdWxlLFxuICBUcmFuc2xhdGVTZXJ2aWNlLFxuICBUcmFuc2xhdGVDb21waWxlcixcbn0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSdcbmltcG9ydCB7IFRlc3RUcmFuc2xhdGVMb2FkZXIgfSBmcm9tICcuL3Rlc3QudHJhbnNsYXRlLmxvYWRlcidcbmltcG9ydCB7IExhbmd1YWdlVHJhbnNsYXRpb25zLCBUcmFuc2xhdGlvbnMgfSBmcm9tICcuL3RyYW5zbGF0aW9ucy5tb2RlbCdcblxuLy8gSU1QT1JUQU5UOlxuLy8gVGhpcyB3YXMgY29weS1wYXN0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbXdvb3RlbmRldi9uZ3gtdHJhbnNsYXRlLXBsdWdpbnMvYmxvYi83YzZjNzNjN2QxNmM5NTE5YTdiYWZmZjkzOWQyOWZkOGVhNWU1NzRhL3Byb2plY3RzL3Rlc3Rpbmcvc3JjL2xpYi90ZXN0aW5nLm1vZHVsZS50c1xuLy8gYmVjYXVzZSB0aGUgb3JpZ2luYWwgcGFja2FnZSB3YXMgZXhwZWN0aW5nIHJ4anMgNysgYXMgYSBwZWVyIGRlcCBhbmQgdGhhdCB3YXMgY29uZmxpY3Rpbmcgd2l0aCBtYW55IG90aGVyIGRlcGVuZGVuY2llc1xuLy8gRklYTUU6IHdoZW4gcnhqcyA3IGNhbiBiZSB1c2VkIGluIHRoZSBwcm9qZWN0LCByZW1vdmUgdGhpcyBhbmQgZG8gYG5wbSBpbnN0YWxsIG5neC10cmFuc2xhdGUtdGVzdGluZyAtLXNhdmUtZGV2YFxuXG4vKipcbiAqIFRoZSBUcmFuc2xhdGVUZXN0aW5nTW9kdWxlIHByb3ZpZGVzIHRoZSB7VHJhbnNsYXRlTW9kdWxlfSBhcyB3ZWxsIGFzIGFcbiAqIHtUcmFuc2xhdGVTZXJ2aWNlfSBjb25maWd1cmVkIHRvIHJldHVybiB0cmFuc2xhdGlvbnMgc3BlY2lmaWMgZm9yIHRoZVxuICogdGVzdCBlbnZpcm9ubWVudC5cbiAqXG4gKiBAZXhwb3J0XG4gKi9cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtUcmFuc2xhdGVNb2R1bGVdLFxuICBleHBvcnRzOiBbVHJhbnNsYXRlTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgVHJhbnNsYXRlVGVzdGluZ01vZHVsZVxuICBpbXBsZW1lbnRzIE1vZHVsZVdpdGhQcm92aWRlcnM8VHJhbnNsYXRlVGVzdGluZ01vZHVsZT5cbntcbiAgcHJpdmF0ZSBfdHJhbnNsYXRpb25zOiBUcmFuc2xhdGlvbnMgPSB7fVxuXG4gIHByaXZhdGUgX2RlZmF1bHRMYW5ndWFnZTogc3RyaW5nXG5cbiAgcHJpdmF0ZSBfY29tcGlsZXI6IFRyYW5zbGF0ZUNvbXBpbGVyXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIHtUcmFuc2xhdGVUZXN0aW5nTW9kdWxlfSB3aXRoIHRyYW5zbGF0aW9ucyBmb3IgdGhlIHNwZWNpZmllZCBsYW5ndWFnZS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogY29uc3QgRU5HTElTSF9UUkFOU0xBVElPTlMgPSB7IGdyZWV0aW5nOiAnSGVsbG8nIH07XG4gICAqIGNvbnN0IHRyYW5zbGF0ZU1vZHVsZSA9IFRyYW5zbGF0ZVRlc3RpbmdNb2R1bGUud2l0aFRyYW5zbGF0aW9ucygnZW4nLCBFTkdMSVNIX1RSQU5TTEFUSU9OUyk7XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIFRyYW5zbGF0ZVRlc3RpbmdNb2R1bGUud2l0aFRyYW5zbGF0aW9ucygnZW4nLCByZXF1aXJlKCcuLi8uLi9hc3NldHMvaTE4bi9lbi5qc29uJykpO1xuICAgKlxuICAgKiBAc3RhdGljXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZSB0aGUgbGFuZ3VhZ2UgZm9yIHRoZSB0cmFuc2xhdGlvbnMuXG4gICAqIEBwYXJhbSB7VHJhbnNsYXRpb25zfSB0cmFuc2xhdGlvbnMgdGhlIHRyYW5zbGF0aW9ucyB0byBiZSB1c2VkIGluIHRoZSB0ZXN0cy5cbiAgICogQHJldHVybnMgdGhlIG5ldyBpbnN0YW5jZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGNoYWluIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbi5cbiAgICogQG1lbWJlcm9mIFRyYW5zbGF0ZVRlc3RpbmdNb2R1bGVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgd2l0aFRyYW5zbGF0aW9ucyhcbiAgICBsYW5ndWFnZTogc3RyaW5nLFxuICAgIHRyYW5zbGF0aW9uczogTGFuZ3VhZ2VUcmFuc2xhdGlvbnNcbiAgKTogVHJhbnNsYXRlVGVzdGluZ01vZHVsZVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSB7VHJhbnNsYXRlVGVzdGluZ01vZHVsZX0gd2l0aCB0aGUgcHJvdmlkZWQgdHJhbnNsYXRpb25zLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBjb25zdCBUUkFOU0xBVElPTlMgPSB7IGVuOiB7IGdyZWV0aW5nOiAnSGVsbG8nIH0sIGVzOiB7IGdyZWV0aW5nOiAnSG9sYScgfSB9O1xuICAgKiBjb25zdCB0cmFuc2xhdGVNb2R1bGUgPSBUcmFuc2xhdGVUZXN0aW5nTW9kdWxlLndpdGhUcmFuc2xhdGlvbnMoVFJBTlNMQVRJT05TKTtcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogVHJhbnNsYXRlVGVzdGluZ01vZHVsZS53aXRoVHJhbnNsYXRpb25zKHJlcXVpcmUoJy4vdGVzdC5pMThuLmpzb24nKSk7XG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICogQHBhcmFtIHtUcmFuc2xhdGlvbnN9IHRoZSBsYW5ndWFnZSB0cmFuc2xhdGlvbnMgdGhlIHRyYW5zbGF0aW9ucyB0byBiZSB1c2VkIGluIHRoZSB0ZXN0cy5cbiAgICogQHJldHVybnMgdGhlIG5ldyBpbnN0YW5jZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGNoYWluIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbi5cbiAgICogQG1lbWJlcm9mIFRyYW5zbGF0ZVRlc3RpbmdNb2R1bGVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgd2l0aFRyYW5zbGF0aW9ucyhcbiAgICB0cmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9uc1xuICApOiBUcmFuc2xhdGVUZXN0aW5nTW9kdWxlXG5cbiAgcHVibGljIHN0YXRpYyB3aXRoVHJhbnNsYXRpb25zKFxuICAgIGxhbmd1YWdlT3JUcmFuc2xhdGlvbnM6IHN0cmluZyB8IFRyYW5zbGF0aW9ucyxcbiAgICB0cmFuc2xhdGlvbnM/OiBMYW5ndWFnZVRyYW5zbGF0aW9uc1xuICApOiBUcmFuc2xhdGVUZXN0aW5nTW9kdWxlIHtcbiAgICBjb25zdCB0cmFuc2xhdGVUZXN0aW5nTW9kdWxlID0gbmV3IFRyYW5zbGF0ZVRlc3RpbmdNb2R1bGUoKVxuXG4gICAgaWYgKHR5cGVvZiBsYW5ndWFnZU9yVHJhbnNsYXRpb25zID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHRyYW5zbGF0ZVRlc3RpbmdNb2R1bGUud2l0aFRyYW5zbGF0aW9ucyhcbiAgICAgICAgPHN0cmluZz5sYW5ndWFnZU9yVHJhbnNsYXRpb25zLFxuICAgICAgICB0cmFuc2xhdGlvbnNcbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gdHJhbnNsYXRlVGVzdGluZ01vZHVsZS53aXRoVHJhbnNsYXRpb25zKGxhbmd1YWdlT3JUcmFuc2xhdGlvbnMpXG4gIH1cblxuICBwdWJsaWMgZ2V0IG5nTW9kdWxlKCkge1xuICAgIHJldHVybiBUcmFuc2xhdGVUZXN0aW5nTW9kdWxlXG4gIH1cblxuICBwdWJsaWMgZ2V0IHByb3ZpZGVycygpIHtcbiAgICBjb25zdCB0cmFuc2xhdGVTZXJ2aWNlID0gbmV3IFRyYW5zbGF0ZVNlcnZpY2UoXG4gICAgICBudWxsLFxuICAgICAgbmV3IFRlc3RUcmFuc2xhdGVMb2FkZXIodGhpcy5fdHJhbnNsYXRpb25zKSxcbiAgICAgIHRoaXMuX2NvbXBpbGVyIHx8IG5ldyBUcmFuc2xhdGVGYWtlQ29tcGlsZXIoKSxcbiAgICAgIG5ldyBUcmFuc2xhdGVEZWZhdWx0UGFyc2VyKCksXG4gICAgICBuZXcgRmFrZU1pc3NpbmdUcmFuc2xhdGlvbkhhbmRsZXIoKSxcbiAgICAgIHRydWUsXG4gICAgICB0cnVlLFxuICAgICAgZmFsc2UsXG4gICAgICB0aGlzLl9kZWZhdWx0TGFuZ3VhZ2VcbiAgICApXG5cbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBwcm92aWRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICB1c2VWYWx1ZTogdHJhbnNsYXRlU2VydmljZSxcbiAgICAgIH0sXG4gICAgXVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHtUcmFuc2xhdGVUZXN0aW5nTW9kdWxlfSBpbnN0YW5jZSB3aXRoIGFkZGl0aW9uYWwgdHJhbnNsYXRpb25zLiBUaGVcbiAgICogdHJhbnNsYXRpb25zIHdpbGwgYmUgc2hhbGxvd2x5IG1lcmdlZCB3aXRoIGFueSBleGlzdGluZyB0cmFuc2xhdGlvbnMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIGNvbnN0IEVOR0xJU0hfVFJBTlNMQVRJT05TID0geyBlbjogeyBncmVldGluZzogJ0hlbGxvJyB9IH07XG4gICAqIGNvbnN0IFNQQU5JU0hfVFJBTlNMQVRJT05TID0geyBlbjogeyBncmVldGluZzogJ0hvbGEnIH0gfTtcbiAgICogY29uc3QgdHJhbnNsYXRlTW9kdWxlID0gVHJhbnNsYXRlVGVzdGluZ01vZHVsZS53aXRoVHJhbnNsYXRpb25zKEVOR0xJU0hfVFJBTlNMQVRJT05TKVxuICAgKiAgIC53aXRoVHJhbnNsYXRpb25zKFNQQU5JU0hfVFJBTlNMQVRJT05TKTtcbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2xhdGlvbnN9IHRyYW5zbGF0aW9ucyB0aGUgYWRkaXRpb25hbCB0cmFuc2xhdGlvbnMgdG8gYWRkIHRvIHRoZSB0ZXN0aW5nIHNlcnZpY2UuXG4gICAqIEByZXR1cm5zIHRoZSBpbnN0YW5jZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGNoYWluIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbi5cbiAgICogQG1lbWJlcm9mIFRyYW5zbGF0ZVRlc3RpbmdNb2R1bGVcbiAgICovXG4gIHB1YmxpYyB3aXRoVHJhbnNsYXRpb25zKHRyYW5zbGF0aW9uczogVHJhbnNsYXRpb25zKTogVHJhbnNsYXRlVGVzdGluZ01vZHVsZVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB7VHJhbnNsYXRlVGVzdGluZ01vZHVsZX0gaW5zdGFuY2Ugd2l0aCBhZGRpdGlvbmFsIHRyYW5zbGF0aW9ucyBmb3IgYVxuICAgKiBzcGVjaWZpZWQgbGFuZ3VhZ2UuIFRoZSB0cmFuc2xhdGlvbnMgd2lsbCBiZSBzaGFsbG93bHkgbWVyZ2VkIHdpdGggYW55IGV4aXN0aW5nIHRyYW5zbGF0aW9ucy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogY29uc3QgRU5HTElTSF9UUkFOU0xBVElPTlMgPSB7IGdyZWV0aW5nOiAnSGVsbG8nIH07XG4gICAqIGNvbnN0IFNQQU5JU0hfVFJBTlNMQVRJT05TID0geyBncmVldGluZzogJ0hvbGEnIH07XG4gICAqIGNvbnN0IHRyYW5zbGF0ZU1vZHVsZSA9IFRyYW5zbGF0ZVRlc3RpbmdNb2R1bGUud2l0aFRyYW5zbGF0aW9ucygnZW4nLCBFTkdMSVNIX1RSQU5TTEFUSU9OUylcbiAgICogICAud2l0aFRyYW5zbGF0aW9ucygnZXMnLCBTUEFOSVNIX1RSQU5TTEFUSU9OUyk7XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIFRyYW5zbGF0ZVRlc3RpbmdNb2R1bGUud2l0aFRyYW5zbGF0aW9ucygnZW4nLCByZXF1aXJlKCcuLi8uLi9hc3NldHMvaTE4bi9lbi5qc29uJykpXG4gICAqICAgLndpdGhUcmFuc2xhdGlvbnMoJ2VzJywgcmVxdWlyZSgnLi4vLi4vYXNzZXRzL2kxOG4vZXMuanNvbicpKTtcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlIHRoZSBsYW5ndWFnZSBmb3Igd2hpY2ggdGhlIG5ldyB0cmFuc2xhdGlvbnMgYXJlIGJlaW5nIGFkZGVkLlxuICAgKiBAcGFyYW0ge0xhbmd1YWdlVHJhbnNsYXRpb25zfSB0cmFuc2xhdGlvbnMgdGhlIHRyYW5zbGF0aW9ucyBmb3IgdGhlIHNwZWNpZmllZCBsYW5ndWFnZS5cbiAgICogQHJldHVybnMgdGhlIGluc3RhbmNlIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hhaW4gYWRkaXRpb25hbCBjb25maWd1cmF0aW9uLlxuICAgKiBAbWVtYmVyb2YgVHJhbnNsYXRlVGVzdGluZ01vZHVsZVxuICAgKi9cbiAgcHVibGljIHdpdGhUcmFuc2xhdGlvbnMoXG4gICAgbGFuZ3VhZ2U6IHN0cmluZyxcbiAgICB0cmFuc2xhdGlvbnM6IExhbmd1YWdlVHJhbnNsYXRpb25zXG4gICk6IFRyYW5zbGF0ZVRlc3RpbmdNb2R1bGVcblxuICBwdWJsaWMgd2l0aFRyYW5zbGF0aW9ucyhcbiAgICBsYW5ndWFnZU9yVHJhbnNsYXRpb25zOiBzdHJpbmcgfCBUcmFuc2xhdGlvbnMsXG4gICAgdHJhbnNsYXRpb25zPzogTGFuZ3VhZ2VUcmFuc2xhdGlvbnNcbiAgKTogVHJhbnNsYXRlVGVzdGluZ01vZHVsZSB7XG4gICAgaWYgKHR5cGVvZiBsYW5ndWFnZU9yVHJhbnNsYXRpb25zID09PSAnc3RyaW5nJyAmJiB0cmFuc2xhdGlvbnMpIHtcbiAgICAgIHRoaXMuYWRkVHJhbnNsYXRpb25zKGxhbmd1YWdlT3JUcmFuc2xhdGlvbnMsIHRyYW5zbGF0aW9ucylcbiAgICAgIHRoaXMuX2RlZmF1bHRMYW5ndWFnZSA9IGxhbmd1YWdlT3JUcmFuc2xhdGlvbnNcbiAgICB9IGVsc2UgaWYgKGxhbmd1YWdlT3JUcmFuc2xhdGlvbnMpIHtcbiAgICAgIE9iamVjdC5rZXlzKGxhbmd1YWdlT3JUcmFuc2xhdGlvbnMpLmZvckVhY2goKGxhbmd1YWdlKSA9PlxuICAgICAgICB0aGlzLmFkZFRyYW5zbGF0aW9ucyhsYW5ndWFnZSwgbGFuZ3VhZ2VPclRyYW5zbGF0aW9uc1tsYW5ndWFnZV0pXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUge1RyYW5zbGF0aW9uVGVzdGluZ01vZHVsZX0gdG8gcHJvdmlkZSBhIHtUcmFuc2xhdGVTZXJ2aWNlfSB0aGF0IHdpbGxcbiAgICogdXNlIHRoZSBwcm92aWRlZCB7VHJhbnNsYXRlQ29tcGlsZXJ9IHRvIHRyYW5zbGF0ZSB0aGUgdGVzdCB0cmFuc2xhdGlvbnMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIFRyYW5zbGF0ZVRlc3RpbmdNb2R1bGUud2l0aFRyYW5zbGF0aW9ucygnZW4nLCB7cGVvcGxlOiAne2dlbmRlciwgc2VsZWN0LCBtYWxle0hlIGlzfSBmZW1hbGV7U2hlIGlzfSBvdGhlcntUaGV5IGFyZX19IHtob3d9KSd9KVxuICAgKiAgIC53aXRoQ29tcGlsZXIobmV3IFRyYW5zbGF0ZU1lc3NhZ2VGb3JtYXRDb21waWxlcigpKTtcbiAgICpcbiAgICogQHBhcmFtIGNvbXBpbGVyIHRoZSBjb21waWxlciB0byB1c2UgdG8gY29tcGlsZSB0aGUgdGVzdCB0cmFuc2xhdGlvbnMuXG4gICAqIEByZXR1cm5zIHRoZSBpbnN0YW5jZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGNoYWluIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbi5cbiAgICogQG1lbWJlcm9mIFRyYW5zbGF0ZVRlc3RpbmdNb2R1bGVcbiAgICovXG4gIHB1YmxpYyB3aXRoQ29tcGlsZXIoY29tcGlsZXI6IFRyYW5zbGF0ZUNvbXBpbGVyKTogVHJhbnNsYXRlVGVzdGluZ01vZHVsZSB7XG4gICAgdGhpcy5fY29tcGlsZXIgPSBjb21waWxlclxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUge1RyYW5zbGF0ZVRlc3RpbmdNb2R1bGV9IHRvIHVzZSB0aGUgcHJvdmlkZWQgbGFuZ3VhZ2UgYXMgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UuXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBkZWZhdWx0IGxhbmd1YWdlIHdpbGwgYmUgc2V0IHRvIHRoZSBmaXJzdCBsYW5ndWFnZSBwcm92aWRlZC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogVHJhbnNsYXRlVGVzdGluZ01vZHVsZS53aXRoVHJhbnNsYXRpb25zKCdlcycsIFNQQU5JU0hfVFJBTlNMQVRJT05TKVxuICAgKiAgIC53aXRoVHJhbnNsYXRpb25zKCdlbicsIEVOR0xJU0hfVFJBTlNMQVRJT05TKVxuICAgKiAgIC53aXRoRGVmYXVsdExhbmd1YWdlKCdlbicpO1xuICAgKlxuICAgKiBAcGFyYW0gbGFuZ3VhZ2UgdGhlIG5ldyBkZWZhdWx0IGxhbmd1YWdlIGZvciB0cmFuc2xhdGlvbnMuXG4gICAqIEByZXR1cm5zIHRoZSBpbnN0YW5jZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGNoYWluIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbi5cbiAgICogQG1lbWJlcm9mIFRyYW5zbGF0ZVRlc3RpbmdNb2R1bGVcbiAgICovXG4gIHB1YmxpYyB3aXRoRGVmYXVsdExhbmd1YWdlKGxhbmd1YWdlOiBzdHJpbmcpOiBUcmFuc2xhdGVUZXN0aW5nTW9kdWxlIHtcbiAgICB0aGlzLl9kZWZhdWx0TGFuZ3VhZ2UgPSBsYW5ndWFnZSB8fCB0aGlzLl9kZWZhdWx0TGFuZ3VhZ2VcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRUcmFuc2xhdGlvbnMoXG4gICAgbGFuZ3VhZ2U6IHN0cmluZyxcbiAgICB0cmFuc2xhdGlvbnM6IExhbmd1YWdlVHJhbnNsYXRpb25zXG4gICkge1xuICAgIGlmICghdGhpcy5fZGVmYXVsdExhbmd1YWdlKSB7XG4gICAgICB0aGlzLl9kZWZhdWx0TGFuZ3VhZ2UgPSBsYW5ndWFnZVxuICAgIH1cblxuICAgIGlmICh0aGlzLl90cmFuc2xhdGlvbnNbbGFuZ3VhZ2VdKSB7XG4gICAgICB0aGlzLl90cmFuc2xhdGlvbnNbbGFuZ3VhZ2VdID0ge1xuICAgICAgICAuLi50aGlzLl90cmFuc2xhdGlvbnNbbGFuZ3VhZ2VdLFxuICAgICAgICAuLi50cmFuc2xhdGlvbnMsXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3RyYW5zbGF0aW9uc1tsYW5ndWFnZV0gPSB0cmFuc2xhdGlvbnNcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,6 +0,0 @@
1
- // IMPORTANT:
2
- // This was copy-pasted from https://github.com/mwootendev/ngx-translate-plugins/blob/7c6c73c7d16c9519a7bafff939d29fd8ea5e574a/projects/testing/src/lib/translations.model.ts
3
- // because the original package was expecting rxjs 7+ as a peer dep and that was conflicting with many other dependencies
4
- // FIXME: when rxjs 7 can be used in the project, remove this and do `npm install ngx-translate-testing --save-dev`
5
- export {};
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb25zLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91dGlsL2kxOG4vc3JjL2xpYi90ZXN0aW5nL3RyYW5zbGF0aW9ucy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxhQUFhO0FBQ2IsNktBQTZLO0FBQzdLLHlIQUF5SDtBQUN6SCxtSEFBbUgiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJTVBPUlRBTlQ6XG4vLyBUaGlzIHdhcyBjb3B5LXBhc3RlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9td29vdGVuZGV2L25neC10cmFuc2xhdGUtcGx1Z2lucy9ibG9iLzdjNmM3M2M3ZDE2Yzk1MTlhN2JhZmZmOTM5ZDI5ZmQ4ZWE1ZTU3NGEvcHJvamVjdHMvdGVzdGluZy9zcmMvbGliL3RyYW5zbGF0aW9ucy5tb2RlbC50c1xuLy8gYmVjYXVzZSB0aGUgb3JpZ2luYWwgcGFja2FnZSB3YXMgZXhwZWN0aW5nIHJ4anMgNysgYXMgYSBwZWVyIGRlcCBhbmQgdGhhdCB3YXMgY29uZmxpY3Rpbmcgd2l0aCBtYW55IG90aGVyIGRlcGVuZGVuY2llc1xuLy8gRklYTUU6IHdoZW4gcnhqcyA3IGNhbiBiZSB1c2VkIGluIHRoZSBwcm9qZWN0LCByZW1vdmUgdGhpcyBhbmQgZG8gYG5wbSBpbnN0YWxsIG5neC10cmFuc2xhdGUtdGVzdGluZyAtLXNhdmUtZGV2YFxuXG5leHBvcnQgZGVjbGFyZSB0eXBlIExhbmd1YWdlVHJhbnNsYXRpb24gPVxuICB8IHN0cmluZ1xuICB8IHN0cmluZ1tdXG4gIHwgeyBbdHJhbnNsYXRpb25LZXk6IHN0cmluZ106IExhbmd1YWdlVHJhbnNsYXRpb24gfVxuXG4vKipcbiAqIExhbmd1YWdlVHJhbnNsYXRpb25zIHJlcHJlc2VudHMgYSBtYXBwaW5nIGJldHdlZW4gYSB0cmFuc2xhdGlvbiBrZXkgYW5kIHRoZSB0cmFuc2xhdGlvbiBmb3IgdGhhdCBrZXlcbiAqIG9yIHRvIG5lc3RlZCB0cmFuc2xhdGlvbiBrZXlzLlxuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYW5ndWFnZVRyYW5zbGF0aW9ucyB7XG4gIFt0cmFuc2xhdGlvbktleTogc3RyaW5nXTogTGFuZ3VhZ2VUcmFuc2xhdGlvblxufVxuXG4vKipcbiAqIFRyYW5zbGF0aW9ucyByZXByZXNlbnRzIGEgbWFwcGluZyBiZXR3ZWVuIGEgbGFuZ3VhZ2UgYW5kIHRoZSB0cmFuc2xhdGlvbnMgZm9yIHRoYXQgbGFuZ3VhZ2UuXG4gKlxuICogQGV4cG9ydFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zbGF0aW9ucyB7XG4gIFtsYW5ndWFnZTogc3RyaW5nXTogTGFuZ3VhZ2VUcmFuc2xhdGlvbnNcbn1cbiJdfQ==
@@ -1,31 +0,0 @@
1
- import { EventEmitter } from '@angular/core';
2
- import { CatalogRecord } from '../../../../../../libs/common/domain/src/lib/model/record';
3
- import { FileFormat } from '../../../../../../libs/util/shared/src';
4
- import { SortByField } from '../../../../../../libs/common/domain/src/lib/model/search';
5
- import * as i0 from "@angular/core";
6
- export declare class RecordTableComponent {
7
- selectedRecords: string[];
8
- records: any[];
9
- totalHits?: number;
10
- sortBy?: SortByField;
11
- recordClick: EventEmitter<CatalogRecord>;
12
- recordsSelect: EventEmitter<CatalogRecord[]>;
13
- recordsDeselect: EventEmitter<CatalogRecord[]>;
14
- sortByChange: EventEmitter<SortByField>;
15
- dateToString(date: Date): string;
16
- getStatus(isPublishedToAll: boolean | unknown): "published" | "not published";
17
- formatUserInfo(userInfo: string | unknown): string;
18
- getRecordFormats(record: CatalogRecord): FileFormat[];
19
- getBadgeColor(format: FileFormat): string;
20
- private getOrderForColumn;
21
- setSortBy(col: string): void;
22
- isSortedBy(col: string, order: 'asc' | 'desc'): boolean;
23
- isChecked(record: CatalogRecord): boolean;
24
- handleRecordSelectedChange(selected: boolean, record: CatalogRecord): void;
25
- selectAll(): void;
26
- isAllSelected(): boolean;
27
- isSomeSelected(): boolean;
28
- static ɵfac: i0.ɵɵFactoryDeclaration<RecordTableComponent, never>;
29
- static ɵcmp: i0.ɵɵComponentDeclaration<RecordTableComponent, "gn-ui-record-table", never, { "selectedRecords": { "alias": "selectedRecords"; "required": false; }; "records": { "alias": "records"; "required": false; }; "totalHits": { "alias": "totalHits"; "required": false; }; "sortBy": { "alias": "sortBy"; "required": false; }; }, { "recordClick": "recordClick"; "recordsSelect": "recordsSelect"; "recordsDeselect": "recordsDeselect"; "sortByChange": "sortByChange"; }, never, never, false, never>;
30
- }
31
- //# sourceMappingURL=record-table.component.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"record-table.component.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/ui/search/src/lib/record-table/record-table.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAiB,MAAM,eAAe,CAAA;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,2DAA2D,CAAA;AACzF,OAAO,EACL,UAAU,EAIX,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,2DAA2D,CAAA;;AAEvF,qBAKa,oBAAoB;IACtB,eAAe,EAAE,MAAM,EAAE,CAAK;IAC9B,OAAO,EAAE,GAAG,EAAE,CAAK;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,WAAW,CAAA;IACnB,WAAW,8BAAoC;IAC/C,aAAa,gCAAsC;IACnD,eAAe,gCAAsC;IACrD,YAAY,4BAAkC;IAExD,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAShC,SAAS,CAAC,gBAAgB,EAAE,OAAO,GAAG,OAAO;IAI7C,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM;IAQlD,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,UAAU,EAAE;IAarD,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAIzC,OAAO,CAAC,iBAAiB;IAgBzB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAY5B,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO;IAKvD,SAAS,CAAC,MAAM,EAAE,aAAa;IAO/B,0BAA0B,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa;IAYnE,SAAS;IAYT,aAAa,IAAI,OAAO;IAYxB,cAAc,IAAI,OAAO;yCA5Hd,oBAAoB;2CAApB,oBAAoB;CAqIhC"}
@@ -1,17 +0,0 @@
1
- import { TranslateLoader } from '@ngx-translate/core';
2
- import { Observable } from 'rxjs';
3
- import { Translations, LanguageTranslations } from './translations.model';
4
- export declare class TestTranslateLoader extends TranslateLoader {
5
- private _translations;
6
- constructor(_translations?: Translations);
7
- /**
8
- * Returns an {Observable} of translations for the specified language. If the
9
- * language is not recognized, an empty translations object will be returned.
10
- *
11
- * @param language the language for which the translations should be retrieved.
12
- * @returns the translations for the specified
13
- * language or an empty set of translations if the language is not recognized.
14
- */
15
- getTranslation(language: string): Observable<LanguageTranslations>;
16
- }
17
- //# sourceMappingURL=test.translate.loader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test.translate.loader.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/util/i18n/src/lib/testing/test.translate.loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAsB,MAAM,MAAM,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAOzE,qBAAa,mBAAoB,SAAQ,eAAe;IAC1C,OAAO,CAAC,aAAa;gBAAb,aAAa,GAAE,YAAiB;IAIpD;;;;;;;OAOG;IACI,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAC,oBAAoB,CAAC;CAG1E"}
@@ -1,131 +0,0 @@
1
- import { ModuleWithProviders } from '@angular/core';
2
- import { TranslateService, TranslateCompiler } from '@ngx-translate/core';
3
- import { LanguageTranslations, Translations } from './translations.model';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@ngx-translate/core";
6
- /**
7
- * The TranslateTestingModule provides the {TranslateModule} as well as a
8
- * {TranslateService} configured to return translations specific for the
9
- * test environment.
10
- *
11
- * @export
12
- */
13
- export declare class TranslateTestingModule implements ModuleWithProviders<TranslateTestingModule> {
14
- private _translations;
15
- private _defaultLanguage;
16
- private _compiler;
17
- /**
18
- * Creates a new instance of the {TranslateTestingModule} with translations for the specified language.
19
- *
20
- * @example
21
- *
22
- * const ENGLISH_TRANSLATIONS = { greeting: 'Hello' };
23
- * const translateModule = TranslateTestingModule.withTranslations('en', ENGLISH_TRANSLATIONS);
24
- *
25
- * @example
26
- *
27
- * TranslateTestingModule.withTranslations('en', require('../../assets/i18n/en.json'));
28
- *
29
- * @static
30
- * @param {string} language the language for the translations.
31
- * @param {Translations} translations the translations to be used in the tests.
32
- * @returns the new instance that can be used to chain additional configuration.
33
- * @memberof TranslateTestingModule
34
- */
35
- static withTranslations(language: string, translations: LanguageTranslations): TranslateTestingModule;
36
- /**
37
- * Creates a new instance of the {TranslateTestingModule} with the provided translations.
38
- *
39
- * @example
40
- *
41
- * const TRANSLATIONS = { en: { greeting: 'Hello' }, es: { greeting: 'Hola' } };
42
- * const translateModule = TranslateTestingModule.withTranslations(TRANSLATIONS);
43
- *
44
- * @example
45
- *
46
- * TranslateTestingModule.withTranslations(require('./test.i18n.json'));
47
- *
48
- * @static
49
- * @param {Translations} the language translations the translations to be used in the tests.
50
- * @returns the new instance that can be used to chain additional configuration.
51
- * @memberof TranslateTestingModule
52
- */
53
- static withTranslations(translations: Translations): TranslateTestingModule;
54
- get ngModule(): typeof TranslateTestingModule;
55
- get providers(): {
56
- provide: typeof TranslateService;
57
- useValue: TranslateService;
58
- }[];
59
- /**
60
- * Updates the {TranslateTestingModule} instance with additional translations. The
61
- * translations will be shallowly merged with any existing translations.
62
- *
63
- * @example
64
- *
65
- * const ENGLISH_TRANSLATIONS = { en: { greeting: 'Hello' } };
66
- * const SPANISH_TRANSLATIONS = { en: { greeting: 'Hola' } };
67
- * const translateModule = TranslateTestingModule.withTranslations(ENGLISH_TRANSLATIONS)
68
- * .withTranslations(SPANISH_TRANSLATIONS);
69
- *
70
- * @param {Translations} translations the additional translations to add to the testing service.
71
- * @returns the instance that can be used to chain additional configuration.
72
- * @memberof TranslateTestingModule
73
- */
74
- withTranslations(translations: Translations): TranslateTestingModule;
75
- /**
76
- * Updates the {TranslateTestingModule} instance with additional translations for a
77
- * specified language. The translations will be shallowly merged with any existing translations.
78
- *
79
- * @example
80
- *
81
- * const ENGLISH_TRANSLATIONS = { greeting: 'Hello' };
82
- * const SPANISH_TRANSLATIONS = { greeting: 'Hola' };
83
- * const translateModule = TranslateTestingModule.withTranslations('en', ENGLISH_TRANSLATIONS)
84
- * .withTranslations('es', SPANISH_TRANSLATIONS);
85
- *
86
- * @example
87
- *
88
- * TranslateTestingModule.withTranslations('en', require('../../assets/i18n/en.json'))
89
- * .withTranslations('es', require('../../assets/i18n/es.json'));
90
- *
91
- * @param {string} language the language for which the new translations are being added.
92
- * @param {LanguageTranslations} translations the translations for the specified language.
93
- * @returns the instance that can be used to chain additional configuration.
94
- * @memberof TranslateTestingModule
95
- */
96
- withTranslations(language: string, translations: LanguageTranslations): TranslateTestingModule;
97
- /**
98
- * Updates the {TranslationTestingModule} to provide a {TranslateService} that will
99
- * use the provided {TranslateCompiler} to translate the test translations.
100
- *
101
- * @example
102
- *
103
- * TranslateTestingModule.withTranslations('en', {people: '{gender, select, male{He is} female{She is} other{They are}} {how})'})
104
- * .withCompiler(new TranslateMessageFormatCompiler());
105
- *
106
- * @param compiler the compiler to use to compile the test translations.
107
- * @returns the instance that can be used to chain additional configuration.
108
- * @memberof TranslateTestingModule
109
- */
110
- withCompiler(compiler: TranslateCompiler): TranslateTestingModule;
111
- /**
112
- * Updates the {TranslateTestingModule} to use the provided language as the default language.
113
- * By default, the default language will be set to the first language provided.
114
- *
115
- * @example
116
- *
117
- * TranslateTestingModule.withTranslations('es', SPANISH_TRANSLATIONS)
118
- * .withTranslations('en', ENGLISH_TRANSLATIONS)
119
- * .withDefaultLanguage('en');
120
- *
121
- * @param language the new default language for translations.
122
- * @returns the instance that can be used to chain additional configuration.
123
- * @memberof TranslateTestingModule
124
- */
125
- withDefaultLanguage(language: string): TranslateTestingModule;
126
- private addTranslations;
127
- static ɵfac: i0.ɵɵFactoryDeclaration<TranslateTestingModule, never>;
128
- static ɵmod: i0.ɵɵNgModuleDeclaration<TranslateTestingModule, never, [typeof i1.TranslateModule], [typeof i1.TranslateModule]>;
129
- static ɵinj: i0.ɵɵInjectorDeclaration<TranslateTestingModule>;
130
- }
131
- //# sourceMappingURL=test.translate.module.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test.translate.module.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/util/i18n/src/lib/testing/test.translate.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAY,MAAM,eAAe,CAAA;AAC7D,OAAO,EAKL,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;;;AAOzE;;;;;;GAMG;AACH,qBAIa,sBACX,YAAW,mBAAmB,CAAC,sBAAsB,CAAC;IAEtD,OAAO,CAAC,aAAa,CAAmB;IAExC,OAAO,CAAC,gBAAgB,CAAQ;IAEhC,OAAO,CAAC,SAAS,CAAmB;IAEpC;;;;;;;;;;;;;;;;;OAiBG;WACW,gBAAgB,CAC5B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,oBAAoB,GACjC,sBAAsB;IAEzB;;;;;;;;;;;;;;;;OAgBG;WACW,gBAAgB,CAC5B,YAAY,EAAE,YAAY,GACzB,sBAAsB;IAkBzB,IAAW,QAAQ,kCAElB;IAED,IAAW,SAAS;;;QAmBnB;IAED;;;;;;;;;;;;;;OAcG;IACI,gBAAgB,CAAC,YAAY,EAAE,YAAY,GAAG,sBAAsB;IAE3E;;;;;;;;;;;;;;;;;;;;OAoBG;IACI,gBAAgB,CACrB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,oBAAoB,GACjC,sBAAsB;IAiBzB;;;;;;;;;;;;OAYG;IACI,YAAY,CAAC,QAAQ,EAAE,iBAAiB,GAAG,sBAAsB;IAKxE;;;;;;;;;;;;;OAaG;IACI,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,sBAAsB;IAKpE,OAAO,CAAC,eAAe;yCA7LZ,sBAAsB;0CAAtB,sBAAsB;0CAAtB,sBAAsB;CA8MlC"}
@@ -1,21 +0,0 @@
1
- export declare type LanguageTranslation = string | string[] | {
2
- [translationKey: string]: LanguageTranslation;
3
- };
4
- /**
5
- * LanguageTranslations represents a mapping between a translation key and the translation for that key
6
- * or to nested translation keys.
7
- *
8
- * @export
9
- */
10
- export interface LanguageTranslations {
11
- [translationKey: string]: LanguageTranslation;
12
- }
13
- /**
14
- * Translations represents a mapping between a language and the translations for that language.
15
- *
16
- * @export
17
- */
18
- export interface Translations {
19
- [language: string]: LanguageTranslations;
20
- }
21
- //# sourceMappingURL=translations.model.d.ts.map