@qbs-origin/origin-form 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/README.md +24 -0
  2. package/esm2022/lib/action-step-handler.mjs +163 -0
  3. package/esm2022/lib/auth-client.service.mjs +69 -0
  4. package/esm2022/lib/enums/label.keys.mjs +721 -0
  5. package/esm2022/lib/form-css.helper.mjs +367 -0
  6. package/esm2022/lib/formly/baseFormlyControlComponent.mjs +52 -0
  7. package/esm2022/lib/formly/baseFormlyStepComponent.mjs +59 -0
  8. package/esm2022/lib/formly/custom-section-separator.component.mjs +32 -0
  9. package/esm2022/lib/formly/form-section-separator.component.mjs +36 -0
  10. package/esm2022/lib/formly/formly-action.mjs +56 -0
  11. package/esm2022/lib/formly/formly-checkbox/formly-checkbox.component.mjs +52 -0
  12. package/esm2022/lib/formly/formly-dictionary-dropdown-tree/formly-dictionary-dropdown-tree.component.mjs +261 -0
  13. package/esm2022/lib/formly/formly-download-documents/formly-download-documents.component.mjs +126 -0
  14. package/esm2022/lib/formly/formly-enrol-card/formly-enrol-card.component.mjs +120 -0
  15. package/esm2022/lib/formly/formly-field-stepper/formly-field-stepper.component.mjs +762 -0
  16. package/esm2022/lib/formly/formly-generate-documents/formly-generate-documents.component.mjs +57 -0
  17. package/esm2022/lib/formly/formly-identification.component.mjs +84 -0
  18. package/esm2022/lib/formly/formly-open-banking/formly-open-banking.component.mjs +590 -0
  19. package/esm2022/lib/formly/formly-paragraph/formly-paragraph.component.mjs +35 -0
  20. package/esm2022/lib/formly/formly-radio/formly-radio-component.mjs +49 -0
  21. package/esm2022/lib/formly/formly-row-fille.mjs +12 -0
  22. package/esm2022/lib/formly/formly-scan-id/formly-scan-id.component.mjs +284 -0
  23. package/esm2022/lib/formly/formly-sign/formly-sign.component.mjs +173 -0
  24. package/esm2022/lib/formly/formly-upload-documents/formly-upload-documents.component.mjs +198 -0
  25. package/esm2022/lib/formly/formly-validate-contact-info/formly-validate-contact-info.component.mjs +124 -0
  26. package/esm2022/lib/formly/formly-view-documents/formly-view-documents.component.mjs +245 -0
  27. package/esm2022/lib/formly/formly-view-offers/formly-view-offers.component.mjs +160 -0
  28. package/esm2022/lib/model-population.helper.mjs +265 -0
  29. package/esm2022/lib/models/application-type.model.mjs +12 -0
  30. package/esm2022/lib/models/application.model.mjs +30 -0
  31. package/esm2022/lib/models/auth/users.model.mjs +2 -0
  32. package/esm2022/lib/models/dictionary.model.mjs +20 -0
  33. package/esm2022/lib/models/flux.model.mjs +105 -0
  34. package/esm2022/lib/models/forms.model.mjs +572 -0
  35. package/esm2022/lib/models/label-info.model.mjs +2 -0
  36. package/esm2022/lib/models/label.model.mjs +2 -0
  37. package/esm2022/lib/models/language.model.mjs +3 -0
  38. package/esm2022/lib/models/list.model.mjs +2 -0
  39. package/esm2022/lib/models/partner.model.mjs +3 -0
  40. package/esm2022/lib/models/treeview.model.mjs +15 -0
  41. package/esm2022/lib/origin-form-auth.service.mjs +40 -0
  42. package/esm2022/lib/origin-form-config.model.mjs +2 -0
  43. package/esm2022/lib/origin-form-token.interceptor.mjs +35 -0
  44. package/esm2022/lib/origin-form.component.mjs +2391 -0
  45. package/esm2022/lib/origin-form.module.mjs +479 -0
  46. package/esm2022/lib/origin-form.service.mjs +14 -0
  47. package/esm2022/lib/others/check-list.database.mjs +55 -0
  48. package/esm2022/lib/others/config-service.mjs +42 -0
  49. package/esm2022/lib/others/dictionary-label-info.mjs +3 -0
  50. package/esm2022/lib/others/environment-type.mjs +21 -0
  51. package/esm2022/lib/others/external-link.directive.mjs +49 -0
  52. package/esm2022/lib/others/flux-helper.mjs +1397 -0
  53. package/esm2022/lib/others/picker.component.mjs +119 -0
  54. package/esm2022/lib/others/translation.pipe.mjs +21 -0
  55. package/esm2022/lib/others/translations-helper.mjs +258 -0
  56. package/esm2022/lib/others/utils.mjs +272 -0
  57. package/esm2022/lib/services/applicationData.service.mjs +145 -0
  58. package/esm2022/lib/services/auth-http.service.mjs +80 -0
  59. package/esm2022/lib/services/dialog.service.mjs +56 -0
  60. package/esm2022/lib/services/dictionary.service.mjs +198 -0
  61. package/esm2022/lib/services/forms.service.mjs +47 -0
  62. package/esm2022/lib/services/labels.service.mjs +29 -0
  63. package/esm2022/lib/services/language.service.mjs +24 -0
  64. package/esm2022/lib/services/open-banking.service.mjs +194 -0
  65. package/esm2022/lib/services/origin-form-signalr-handler.service.mjs +107 -0
  66. package/esm2022/lib/services/origin-form-signalr.service.mjs +105 -0
  67. package/esm2022/lib/services/otp.service.mjs +28 -0
  68. package/esm2022/lib/services/proxy.service.mjs +79 -0
  69. package/esm2022/lib/services/scroll-to-error.service.mjs +369 -0
  70. package/esm2022/lib/services/translation.service.mjs +27 -0
  71. package/esm2022/lib/shared-components/confirmation.component.mjs +34 -0
  72. package/esm2022/lib/shared-components/dictionaries-tree.component.mjs +301 -0
  73. package/esm2022/lib/shared-components/grid.component.mjs +241 -0
  74. package/esm2022/lib/shared-components/treeview/treeview.component.mjs +224 -0
  75. package/esm2022/lib/theme-css.mjs +2254 -0
  76. package/esm2022/lib/theme-injector.service.mjs +26 -0
  77. package/esm2022/public-api.mjs +4 -0
  78. package/esm2022/qbs-origin-origin-form.mjs +5 -0
  79. package/fesm2022/qbs-origin-origin-form.mjs +15215 -0
  80. package/fesm2022/qbs-origin-origin-form.mjs.map +1 -0
  81. package/index.d.ts +5 -0
  82. package/lib/action-step-handler.d.ts +49 -0
  83. package/lib/auth-client.service.d.ts +17 -0
  84. package/lib/enums/label.keys.d.ts +720 -0
  85. package/lib/form-css.helper.d.ts +28 -0
  86. package/lib/formly/baseFormlyControlComponent.d.ts +25 -0
  87. package/lib/formly/baseFormlyStepComponent.d.ts +29 -0
  88. package/lib/formly/custom-section-separator.component.d.ts +6 -0
  89. package/lib/formly/form-section-separator.component.d.ts +10 -0
  90. package/lib/formly/formly-action.d.ts +13 -0
  91. package/lib/formly/formly-checkbox/formly-checkbox.component.d.ts +15 -0
  92. package/lib/formly/formly-dictionary-dropdown-tree/formly-dictionary-dropdown-tree.component.d.ts +45 -0
  93. package/lib/formly/formly-download-documents/formly-download-documents.component.d.ts +22 -0
  94. package/lib/formly/formly-enrol-card/formly-enrol-card.component.d.ts +114 -0
  95. package/lib/formly/formly-field-stepper/formly-field-stepper.component.d.ts +79 -0
  96. package/lib/formly/formly-generate-documents/formly-generate-documents.component.d.ts +17 -0
  97. package/lib/formly/formly-identification.component.d.ts +19 -0
  98. package/lib/formly/formly-open-banking/formly-open-banking.component.d.ts +119 -0
  99. package/lib/formly/formly-paragraph/formly-paragraph.component.d.ts +10 -0
  100. package/lib/formly/formly-radio/formly-radio-component.d.ts +15 -0
  101. package/lib/formly/formly-row-fille.d.ts +6 -0
  102. package/lib/formly/formly-scan-id/formly-scan-id.component.d.ts +41 -0
  103. package/lib/formly/formly-sign/formly-sign.component.d.ts +36 -0
  104. package/lib/formly/formly-upload-documents/formly-upload-documents.component.d.ts +25 -0
  105. package/lib/formly/formly-validate-contact-info/formly-validate-contact-info.component.d.ts +79 -0
  106. package/lib/formly/formly-view-documents/formly-view-documents.component.d.ts +33 -0
  107. package/lib/formly/formly-view-offers/formly-view-offers.component.d.ts +23 -0
  108. package/lib/model-population.helper.d.ts +8 -0
  109. package/lib/models/application-type.model.d.ts +27 -0
  110. package/lib/models/application.model.d.ts +107 -0
  111. package/lib/models/auth/users.model.d.ts +20 -0
  112. package/lib/models/dictionary.model.d.ts +77 -0
  113. package/lib/models/flux.model.d.ts +101 -0
  114. package/lib/models/forms.model.d.ts +504 -0
  115. package/lib/models/label-info.model.d.ts +10 -0
  116. package/lib/models/label.model.d.ts +4 -0
  117. package/lib/models/language.model.d.ts +5 -0
  118. package/lib/models/list.model.d.ts +8 -0
  119. package/lib/models/partner.model.d.ts +12 -0
  120. package/lib/models/treeview.model.d.ts +17 -0
  121. package/lib/origin-form-auth.service.d.ts +15 -0
  122. package/lib/origin-form-config.model.d.ts +12 -0
  123. package/lib/origin-form-token.interceptor.d.ts +12 -0
  124. package/lib/origin-form.component.d.ts +231 -0
  125. package/lib/origin-form.module.d.ts +84 -0
  126. package/lib/origin-form.service.d.ts +6 -0
  127. package/lib/others/check-list.database.d.ts +16 -0
  128. package/lib/others/config-service.d.ts +22 -0
  129. package/lib/others/dictionary-label-info.d.ts +6 -0
  130. package/lib/others/environment-type.d.ts +8 -0
  131. package/lib/others/external-link.directive.d.ts +12 -0
  132. package/lib/others/flux-helper.d.ts +115 -0
  133. package/lib/others/picker.component.d.ts +36 -0
  134. package/lib/others/translation.pipe.d.ts +10 -0
  135. package/lib/others/translations-helper.d.ts +31 -0
  136. package/lib/others/utils.d.ts +37 -0
  137. package/lib/services/applicationData.service.d.ts +35 -0
  138. package/lib/services/auth-http.service.d.ts +21 -0
  139. package/lib/services/dialog.service.d.ts +20 -0
  140. package/lib/services/dictionary.service.d.ts +89 -0
  141. package/lib/services/forms.service.d.ts +17 -0
  142. package/lib/services/labels.service.d.ts +13 -0
  143. package/lib/services/language.service.d.ts +14 -0
  144. package/lib/services/open-banking.service.d.ts +137 -0
  145. package/lib/services/origin-form-signalr-handler.service.d.ts +29 -0
  146. package/lib/services/origin-form-signalr.service.d.ts +24 -0
  147. package/lib/services/otp.service.d.ts +22 -0
  148. package/lib/services/proxy.service.d.ts +29 -0
  149. package/lib/services/scroll-to-error.service.d.ts +54 -0
  150. package/lib/services/translation.service.d.ts +10 -0
  151. package/lib/shared-components/confirmation.component.d.ts +77 -0
  152. package/lib/shared-components/dictionaries-tree.component.d.ts +51 -0
  153. package/lib/shared-components/grid.component.d.ts +138 -0
  154. package/lib/shared-components/treeview/treeview.component.d.ts +121 -0
  155. package/lib/theme-css.d.ts +2 -0
  156. package/lib/theme-injector.service.d.ts +8 -0
  157. package/package.json +42 -0
  158. package/public-api.d.ts +3 -0
  159. package/schematics-compiled/collection.json +10 -0
  160. package/schematics-compiled/ng-add/index.d.ts +2 -0
  161. package/schematics-compiled/ng-add/index.js +67 -0
  162. package/schematics-compiled/ng-add/index.js.map +1 -0
  163. package/schematics-compiled/ng-add/schema.json +8 -0
  164. package/src/lib/assets/fonts/Figtree-Bold.ttf +0 -0
  165. package/src/lib/assets/fonts/Figtree-Light.ttf +0 -0
  166. package/src/lib/assets/fonts/Figtree-Regular.ttf +0 -0
  167. package/src/lib/assets/fonts/Sora-ExtraBold.ttf +0 -0
  168. package/src/lib/assets/fonts/Sora-Light.ttf +0 -0
  169. package/src/lib/assets/fonts/Sora-Regular.ttf +0 -0
  170. package/src/lib/assets/fonts/ttrounds-bold-webfont.woff +0 -0
  171. package/src/lib/assets/fonts/ttrounds-bold-webfont.woff2 +0 -0
  172. package/src/lib/assets/fonts/ttrounds-regular-webfont.woff +0 -0
  173. package/src/lib/assets/fonts/ttrounds-regular-webfont.woff2 +0 -0
  174. package/src/lib/assets/fonts/ttrounds-thin-webfont.woff +0 -0
  175. package/src/lib/assets/fonts/ttrounds-thin-webfont.woff2 +0 -0
  176. package/src/lib/assets/images/flag/icon-flag-de.svg +10 -0
  177. package/src/lib/assets/images/flag/icon-flag-en.svg +1 -0
  178. package/src/lib/assets/images/flag/icon-flag-es.svg +11 -0
  179. package/src/lib/assets/images/flag/icon-flag-fr.svg +1 -0
  180. package/src/lib/assets/images/flag/icon-flag-ro.svg +11 -0
  181. package/src/lib/assets/images/flag/origin-form/new-id-card.png +0 -0
  182. package/src/lib/assets/images/flag/origin-form/old-id-card.png +0 -0
@@ -0,0 +1,301 @@
1
+ import { Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
2
+ import { EnvironmentType } from '../others/environment-type';
3
+ import { Utils } from '../others/utils';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../services/dictionary.service";
6
+ import * as i2 from "@angular/common";
7
+ import * as i3 from "@angular/material/progress-spinner";
8
+ import * as i4 from "./treeview/treeview.component";
9
+ export class DictionariesTreeComponent {
10
+ constructor(dictService) {
11
+ this.dictService = dictService;
12
+ this.allowCheckItems = true;
13
+ this.allowFilter = false;
14
+ this.drawReferenceDictionariesAsSeparateNode = true;
15
+ this.drawChildDictionariesAsSeparateNode = true;
16
+ this.drawRootNode = true;
17
+ this.allowSelectNonLeafNodes = false;
18
+ this.hideParentArrow = false;
19
+ // NEW: Accept preloaded dictionary data
20
+ this.preloadedDictionary = null;
21
+ this.preloadedDictionaries = null;
22
+ this.usePreloadedData = false;
23
+ this.selectedDictionaryValuesChanged = new EventEmitter();
24
+ }
25
+ ngOnInit() {
26
+ // Only initialize if not already set
27
+ if (!this.allDictionaries) {
28
+ this.allDictionaries = [];
29
+ }
30
+ }
31
+ ngOnChanges(changes) {
32
+ if (changes['dictionaryId']) {
33
+ const changed = changes['dictionaryId'];
34
+ if (changed.currentValue !== changed.previousValue) {
35
+ this.loadDictionary();
36
+ }
37
+ }
38
+ // NEW: Handle preloaded data changes
39
+ if (changes['preloadedDictionary'] ||
40
+ changes['preloadedDictionaries'] ||
41
+ changes['usePreloadedData']) {
42
+ if (this.usePreloadedData && this.preloadedDictionary) {
43
+ this.loadFromPreloadedData();
44
+ }
45
+ else if (this.dictionaryId) {
46
+ this.loadDictionary();
47
+ }
48
+ }
49
+ if (changes['filterText'] && this.treeViewControl) {
50
+ let text = changes['filterText'].currentValue;
51
+ this.treeViewControl.filterText(text);
52
+ }
53
+ }
54
+ ngAfterViewInit() {
55
+ // If we have a main dictionary but haven't built the tree yet, build it now
56
+ if (this.mainDictionary && this.treeViewControl) {
57
+ this.rebuildTree();
58
+ }
59
+ // If we have a dictionaryId but haven't loaded the dictionary yet, load it now
60
+ // This handles the case where the component is initialized with a pre-populated dictionaryId
61
+ if (this.dictionaryId && !this.mainDictionary && !this.isLoading) {
62
+ if (this.usePreloadedData && this.preloadedDictionary) {
63
+ this.loadFromPreloadedData();
64
+ }
65
+ else {
66
+ this.loadDictionary();
67
+ }
68
+ }
69
+ }
70
+ loadDictionary() {
71
+ if (this.dictionaryId) {
72
+ this.isLoading = true;
73
+ const params = {
74
+ env: EnvironmentType.Config, // TODO: retrieve correct environment
75
+ languageId: this.languageId > 0 ? this.languageId : undefined,
76
+ valueIdsToShow: this.valuesIdsToShow?.length > 0 ? this.valuesIdsToShow : undefined,
77
+ };
78
+ this.dictService.getDictionaryTree(this.dictionaryId, params).subscribe({
79
+ next: (response) => {
80
+ this.mainDictionary = response.mainDictionary;
81
+ this.allDictionaries = response.allDictionaries;
82
+ this.rebuildTree();
83
+ this.isLoading = false;
84
+ },
85
+ error: (error) => {
86
+ console.error('Failed to load dictionary tree:', error);
87
+ this.isLoading = false;
88
+ },
89
+ });
90
+ }
91
+ else {
92
+ this.clearTree();
93
+ }
94
+ }
95
+ /**
96
+ * NEW: Load dictionary from preloaded data instead of API calls
97
+ */
98
+ loadFromPreloadedData() {
99
+ if (!this.preloadedDictionary) {
100
+ console.warn('No preloaded dictionary data available, falling back to API');
101
+ this.loadDictionary();
102
+ return;
103
+ }
104
+ this.isLoading = true;
105
+ this.mainDictionary = { ...this.preloadedDictionary }; // Create a copy
106
+ // Apply value filtering if needed
107
+ if (this.valuesIdsToShow?.length > 0) {
108
+ this.mainDictionary.values =
109
+ this.mainDictionary.values?.filter((v) => this.valuesIdsToShow.some((c) => c == v.id)) || [];
110
+ }
111
+ // Use preloaded dictionaries for dependencies
112
+ this.loadAllNeededDictionariesFromPreloaded(this.mainDictionary);
113
+ this.isLoading = false;
114
+ }
115
+ /**
116
+ * NEW: Load needed dictionaries from preloaded data instead of API calls
117
+ */
118
+ loadAllNeededDictionariesFromPreloaded(dictionary) {
119
+ if (!this.preloadedDictionaries) {
120
+ console.warn('No preloaded dictionaries map available');
121
+ return;
122
+ }
123
+ // Initialize with all preloaded dictionaries - this ensures child dictionaries are available
124
+ this.allDictionaries = Array.from(this.preloadedDictionaries.values());
125
+ // Build the tree
126
+ this.rebuildTree();
127
+ }
128
+ rebuildTree() {
129
+ // Check if treeViewControl is available (ViewChild might not be initialized yet)
130
+ if (!this.treeViewControl) {
131
+ return;
132
+ }
133
+ let node = this.buildDictionaryTree(this.mainDictionary);
134
+ if (this.drawRootNode) {
135
+ this.treeViewControl.initialize([node]);
136
+ }
137
+ else {
138
+ this.treeViewControl.initialize(node.children);
139
+ }
140
+ if (this.allowCheckItems) {
141
+ if (this.selectedValueIds && this.selectedValueIds.length > 0) {
142
+ this.treeViewControl.expandAll();
143
+ }
144
+ else {
145
+ this.treeViewControl.expandNode(0);
146
+ }
147
+ }
148
+ }
149
+ clearTree() {
150
+ // Check if treeViewControl is available
151
+ if (!this.treeViewControl) {
152
+ return;
153
+ }
154
+ let node = {};
155
+ this.treeViewControl.initialize([node]);
156
+ }
157
+ buildDictionaryTree(dictionary) {
158
+ let node = {
159
+ name: dictionary.name,
160
+ children: [],
161
+ data: null,
162
+ canSelect: false,
163
+ hideArrow: false,
164
+ };
165
+ // Build the tree recursively
166
+ this.buildTreeChildren(dictionary, node);
167
+ // Set canSelect for root node based on whether it has children
168
+ if (!this.hideParentArrow) {
169
+ node.canSelect = this.getCanSelect(node);
170
+ }
171
+ else {
172
+ node.canSelect = false;
173
+ node.hideArrow = true;
174
+ }
175
+ return node;
176
+ }
177
+ buildTreeChildren(dictionary, node) {
178
+ if (dictionary.values) {
179
+ dictionary.values.forEach((v) => {
180
+ let childrenNode = {
181
+ name: v.name,
182
+ children: [],
183
+ data: v,
184
+ isSelected: false,
185
+ canSelect: false,
186
+ hideArrow: false,
187
+ };
188
+ if (this.languageId > 0) {
189
+ const val = Utils.findValueTranslation(v.valueTranslations, this.languageId);
190
+ if (val) {
191
+ childrenNode.name = val;
192
+ }
193
+ }
194
+ if (this.selectedValueIds && this.selectedValueIds.indexOf(v.id) >= 0) {
195
+ childrenNode.isSelected = true;
196
+ }
197
+ // Recursively build child dictionaries if any
198
+ if (v.childDictionaryId || v.childDictionaryUUID) {
199
+ let dict;
200
+ // Try UUID-based lookup first (for preloaded data)
201
+ if (v.childDictionaryUUID) {
202
+ dict = this.allDictionaries.find((d) => d.uuid === v.childDictionaryUUID);
203
+ }
204
+ // Fallback to ID-based lookup (for API-loaded data)
205
+ if (!dict && v.childDictionaryId) {
206
+ dict = this.allDictionaries.find((d) => d.id === v.childDictionaryId);
207
+ }
208
+ if (dict) {
209
+ this.buildTreeChildren(dict, childrenNode);
210
+ }
211
+ }
212
+ // Handle reference values
213
+ if (v.referenceValues?.length > 0 &&
214
+ this.drawReferenceDictionariesAsSeparateNode === true) {
215
+ // Try to find reference dictionary by UUID first, then by ID
216
+ let refDict = this.allDictionaries.find((d) => dictionary.referredInDictionariesUUIds?.includes(d.uuid || ''));
217
+ if (!refDict) {
218
+ refDict = this.allDictionaries.find((d) => d.id === dictionary.referenceId);
219
+ }
220
+ v.referenceValues.forEach((rv) => {
221
+ let referenceNode = {
222
+ name: rv.name + ` (${refDict?.name})`,
223
+ children: [],
224
+ data: rv,
225
+ isSelected: false,
226
+ canSelect: true, // Reference values are leaf nodes and can be selected
227
+ hideArrow: false,
228
+ };
229
+ if (this.selectedValueIds &&
230
+ this.selectedValueIds.indexOf(rv.id) >= 0) {
231
+ referenceNode.isSelected = true;
232
+ }
233
+ childrenNode.children.push(referenceNode);
234
+ });
235
+ }
236
+ // Determine if the current node can be selected
237
+ childrenNode.canSelect = this.getCanSelect(childrenNode);
238
+ // Add the child node to the current node's children
239
+ node.children.push(childrenNode);
240
+ });
241
+ }
242
+ }
243
+ // Helper method to determine if a node can be selected
244
+ getCanSelect(node) {
245
+ const isLeaf = node.children.length === 0;
246
+ return isLeaf || this.allowSelectNonLeafNodes;
247
+ }
248
+ onTreeSelectionChanged(node) {
249
+ var selectedNodes = this.treeViewControl.getSelectedNodes();
250
+ var values = selectedNodes.map((n) => n.data);
251
+ let dvs = this.createCopy(values);
252
+ this.selectedDictionaryValuesChanged.next(dvs);
253
+ }
254
+ createCopy(objectToCopy) {
255
+ var s = JSON.stringify(objectToCopy);
256
+ var news = s.replace(/"valueTranslations":/g, '"translations":');
257
+ return JSON.parse(news);
258
+ }
259
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DictionariesTreeComponent, deps: [{ token: i1.DictionaryService }], target: i0.ɵɵFactoryTarget.Component }); }
260
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DictionariesTreeComponent, selector: "app-dictionaries-tree", inputs: { dictionaryId: "dictionaryId", selectedValueIds: "selectedValueIds", allowCheckItems: "allowCheckItems", allowFilter: "allowFilter", drawReferenceDictionariesAsSeparateNode: "drawReferenceDictionariesAsSeparateNode", drawChildDictionariesAsSeparateNode: "drawChildDictionariesAsSeparateNode", drawRootNode: "drawRootNode", filterText: "filterText", allowSelectNonLeafNodes: "allowSelectNonLeafNodes", languageId: "languageId", valuesIdsToShow: "valuesIdsToShow", hideParentArrow: "hideParentArrow", preloadedDictionary: "preloadedDictionary", preloadedDictionaries: "preloadedDictionaries", usePreloadedData: "usePreloadedData" }, outputs: { selectedDictionaryValuesChanged: "selectedDictionaryValuesChanged" }, viewQueries: [{ propertyName: "treeViewControl", first: true, predicate: ["treeView"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<mat-spinner *ngIf=\"isLoading === true\" class=\"m-x-auto\"></mat-spinner>\n<app-treeview #treeView [autoSelectDescendants]=\"false\"\n [allowCheckItems]=\"allowCheckItems\"\n [allowFilter]=\"allowFilter\"\n (selectionChanged)=\"onTreeSelectionChanged($event)\">\n\n</app-treeview>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i4.AppTreeviewComponent, selector: "app-treeview", inputs: ["allowAddItems", "autoSelectDescendants", "allowCheckItems", "allowFilter"], outputs: ["selectionChanged"] }] }); }
261
+ }
262
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DictionariesTreeComponent, decorators: [{
263
+ type: Component,
264
+ args: [{ selector: 'app-dictionaries-tree', template: "<mat-spinner *ngIf=\"isLoading === true\" class=\"m-x-auto\"></mat-spinner>\n<app-treeview #treeView [autoSelectDescendants]=\"false\"\n [allowCheckItems]=\"allowCheckItems\"\n [allowFilter]=\"allowFilter\"\n (selectionChanged)=\"onTreeSelectionChanged($event)\">\n\n</app-treeview>\n" }]
265
+ }], ctorParameters: () => [{ type: i1.DictionaryService }], propDecorators: { treeViewControl: [{
266
+ type: ViewChild,
267
+ args: ['treeView']
268
+ }], dictionaryId: [{
269
+ type: Input
270
+ }], selectedValueIds: [{
271
+ type: Input
272
+ }], allowCheckItems: [{
273
+ type: Input
274
+ }], allowFilter: [{
275
+ type: Input
276
+ }], drawReferenceDictionariesAsSeparateNode: [{
277
+ type: Input
278
+ }], drawChildDictionariesAsSeparateNode: [{
279
+ type: Input
280
+ }], drawRootNode: [{
281
+ type: Input
282
+ }], filterText: [{
283
+ type: Input
284
+ }], allowSelectNonLeafNodes: [{
285
+ type: Input
286
+ }], languageId: [{
287
+ type: Input
288
+ }], valuesIdsToShow: [{
289
+ type: Input
290
+ }], hideParentArrow: [{
291
+ type: Input
292
+ }], preloadedDictionary: [{
293
+ type: Input
294
+ }], preloadedDictionaries: [{
295
+ type: Input
296
+ }], usePreloadedData: [{
297
+ type: Input
298
+ }], selectedDictionaryValuesChanged: [{
299
+ type: Output
300
+ }] } });
301
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGljdGlvbmFyaWVzLXRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9zaGFyZWQtY29tcG9uZW50cy9kaWN0aW9uYXJpZXMtdHJlZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vcmlnaW4tZm9ybS9zcmMvbGliL3NoYXJlZC1jb21wb25lbnRzL2RpY3Rpb25hcmllcy10cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7OztBQVd4QyxNQUFNLE9BQU8seUJBQXlCO0lBNkJwQyxZQUFvQixXQUE4QjtRQUE5QixnQkFBVyxHQUFYLFdBQVcsQ0FBbUI7UUF2QnpDLG9CQUFlLEdBQVksSUFBSSxDQUFDO1FBQ2hDLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzdCLDRDQUF1QyxHQUFZLElBQUksQ0FBQztRQUN4RCx3Q0FBbUMsR0FBWSxJQUFJLENBQUM7UUFDcEQsaUJBQVksR0FBWSxJQUFJLENBQUM7UUFFN0IsNEJBQXVCLEdBQVksS0FBSyxDQUFDO1FBR3pDLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBRTFDLHdDQUF3QztRQUMvQix3QkFBbUIsR0FBeUIsSUFBSSxDQUFDO1FBQ2pELDBCQUFxQixHQUFzQyxJQUFJLENBQUM7UUFDaEUscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBRWpDLG9DQUErQixHQUN2QyxJQUFJLFlBQVksRUFBcUIsQ0FBQztJQU1hLENBQUM7SUFFdEQsUUFBUTtRQUNOLHFDQUFx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UyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3JDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUNqRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFzQixDQUFDO0lBQy9DLENBQUM7K0dBaFVVLHlCQUF5QjttR0FBekIseUJBQXlCLGc1QkN4QnRDLHFVQU9BOzs0RkRpQmEseUJBQXlCO2tCQUxyQyxTQUFTOytCQUNFLHVCQUF1QjtzRkFPVixlQUFlO3NCQUFyQyxTQUFTO3VCQUFDLFVBQVU7Z0JBQ1osWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLHVDQUF1QztzQkFBL0MsS0FBSztnQkFDRyxtQ0FBbUM7c0JBQTNDLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFHRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFSSwrQkFBK0I7c0JBQXhDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEaWN0aW9uYXJ5VmFsdWUsIERpY3Rpb25hcnlEdG8sIERpY3Rpb25hcnlWYWx1ZUR0byB9IGZyb20gJy4uL21vZGVscy9kaWN0aW9uYXJ5Lm1vZGVsJztcbmltcG9ydCB7IEVudmlyb25tZW50VHlwZSB9IGZyb20gJy4uL290aGVycy9lbnZpcm9ubWVudC10eXBlJztcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSAnLi4vb3RoZXJzL3V0aWxzJztcbmltcG9ydCB7IERpY3Rpb25hcnlTZXJ2aWNlLCBEaWN0aW9uYXJ5VHJlZVJlc3BvbnNlRHRvIH0gZnJvbSAnLi4vc2VydmljZXMvZGljdGlvbmFyeS5zZXJ2aWNlJztcbmltcG9ydCB7IEl0ZW1Ob2RlLCBJdGVtRmxhdE5vZGUgfSBmcm9tICcuLi9tb2RlbHMvdHJlZXZpZXcubW9kZWwnO1xuaW1wb3J0IHsgQXBwVHJlZXZpZXdDb21wb25lbnQgfSBmcm9tICcuL3RyZWV2aWV3L3RyZWV2aWV3LmNvbXBvbmVudCc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWRpY3Rpb25hcmllcy10cmVlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RpY3Rpb25hcmllcy10cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2RpY3Rpb25hcmllcy10cmVlLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgRGljdGlvbmFyaWVzVHJlZUNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0XG57XG4gIEBWaWV3Q2hpbGQoJ3RyZWVWaWV3JykgdHJlZVZpZXdDb250cm9sOiBBcHBUcmVldmlld0NvbXBvbmVudDtcbiAgQElucHV0KCkgZGljdGlvbmFyeUlkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNlbGVjdGVkVmFsdWVJZHM6IG51bWJlcltdO1xuICBASW5wdXQoKSBhbGxvd0NoZWNrSXRlbXM6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBhbGxvd0ZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBkcmF3UmVmZXJlbmNlRGljdGlvbmFyaWVzQXNTZXBhcmF0ZU5vZGU6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBkcmF3Q2hpbGREaWN0aW9uYXJpZXNBc1NlcGFyYXRlTm9kZTogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGRyYXdSb290Tm9kZTogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGZpbHRlclRleHQ6IHN0cmluZztcbiAgQElucHV0KCkgYWxsb3dTZWxlY3ROb25MZWFmTm9kZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgbGFuZ3VhZ2VJZDogbnVtYmVyO1xuICBASW5wdXQoKSB2YWx1ZXNJZHNUb1Nob3c6IG51bWJlcltdO1xuICBASW5wdXQoKSBoaWRlUGFyZW50QXJyb3c6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBORVc6IEFjY2VwdCBwcmVsb2FkZWQgZGljdGlvbmFyeSBkYXRhXG4gIEBJbnB1dCgpIHByZWxvYWRlZERpY3Rpb25hcnk6IERpY3Rpb25hcnlEdG8gfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgcHJlbG9hZGVkRGljdGlvbmFyaWVzOiBNYXA8c3RyaW5nLCBEaWN0aW9uYXJ5RHRvPiB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSB1c2VQcmVsb2FkZWREYXRhOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIHNlbGVjdGVkRGljdGlvbmFyeVZhbHVlc0NoYW5nZWQ6IEV2ZW50RW1pdHRlcjxEaWN0aW9uYXJ5VmFsdWVbXT4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8RGljdGlvbmFyeVZhbHVlW10+KCk7XG5cbiAgYWxsRGljdGlvbmFyaWVzOiBEaWN0aW9uYXJ5RHRvW107XG4gIG1haW5EaWN0aW9uYXJ5OiBEaWN0aW9uYXJ5RHRvO1xuICBpc0xvYWRpbmc6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkaWN0U2VydmljZTogRGljdGlvbmFyeVNlcnZpY2UpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gT25seSBpbml0aWFsaXplIGlmIG5vdCBhbHJlYWR5IHNldFxuICAgIGlmICghdGhpcy5hbGxEaWN0aW9uYXJpZXMpIHtcbiAgICAgIHRoaXMuYWxsRGljdGlvbmFyaWVzID0gW107XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydkaWN0aW9uYXJ5SWQnXSkge1xuICAgICAgY29uc3QgY2hhbmdlZCA9IGNoYW5nZXNbJ2RpY3Rpb25hcnlJZCddO1xuICAgICAgaWYgKGNoYW5nZWQuY3VycmVudFZhbHVlICE9PSBjaGFuZ2VkLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgdGhpcy5sb2FkRGljdGlvbmFyeSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE5FVzogSGFuZGxlIHByZWxvYWRlZCBkYXRhIGNoYW5nZXNcbiAgICBpZiAoXG4gICAgICBjaGFuZ2VzWydwcmVsb2FkZWREaWN0aW9uYXJ5J10gfHxcbiAgICAgIGNoYW5nZXNbJ3ByZWxvYWRlZERpY3Rpb25hcmllcyddIHx8XG4gICAgICBjaGFuZ2VzWyd1c2VQcmVsb2FkZWREYXRhJ11cbiAgICApIHtcbiAgICAgIGlmICh0aGlzLnVzZVByZWxvYWRlZERhdGEgJiYgdGhpcy5wcmVsb2FkZWREaWN0aW9uYXJ5KSB7XG4gICAgICAgIHRoaXMubG9hZEZyb21QcmVsb2FkZWREYXRhKCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZGljdGlvbmFyeUlkKSB7XG4gICAgICAgIHRoaXMubG9hZERpY3Rpb25hcnkoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snZmlsdGVyVGV4dCddICYmIHRoaXMudHJlZVZpZXdDb250cm9sKSB7XG4gICAgICBsZXQgdGV4dCA9IGNoYW5nZXNbJ2ZpbHRlclRleHQnXS5jdXJyZW50VmFsdWUgYXMgc3RyaW5nO1xuICAgICAgdGhpcy50cmVlVmlld0NvbnRyb2wuZmlsdGVyVGV4dCh0ZXh0KTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgLy8gSWYgd2UgaGF2ZSBhIG1haW4gZGljdGlvbmFyeSBidXQgaGF2ZW4ndCBidWlsdCB0aGUgdHJlZSB5ZXQsIGJ1aWxkIGl0IG5vd1xuICAgIGlmICh0aGlzLm1haW5EaWN0aW9uYXJ5ICYmIHRoaXMudHJlZVZpZXdDb250cm9sKSB7XG4gICAgICB0aGlzLnJlYnVpbGRUcmVlKCk7XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgaGF2ZSBhIGRpY3Rpb25hcnlJZCBidXQgaGF2ZW4ndCBsb2FkZWQgdGhlIGRpY3Rpb25hcnkgeWV0LCBsb2FkIGl0IG5vd1xuICAgIC8vIFRoaXMgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSB0aGUgY29tcG9uZW50IGlzIGluaXRpYWxpemVkIHdpdGggYSBwcmUtcG9wdWxhdGVkIGRpY3Rpb25hcnlJZFxuICAgIGlmICh0aGlzLmRpY3Rpb25hcnlJZCAmJiAhdGhpcy5tYWluRGljdGlvbmFyeSAmJiAhdGhpcy5pc0xvYWRpbmcpIHtcbiAgICAgIGlmICh0aGlzLnVzZVByZWxvYWRlZERhdGEgJiYgdGhpcy5wcmVsb2FkZWREaWN0aW9uYXJ5KSB7XG4gICAgICAgIHRoaXMubG9hZEZyb21QcmVsb2FkZWREYXRhKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvYWREaWN0aW9uYXJ5KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbG9hZERpY3Rpb25hcnkoKSB7XG4gICAgaWYgKHRoaXMuZGljdGlvbmFyeUlkKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG5cbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgZW52OiBFbnZpcm9ubWVudFR5cGUuQ29uZmlnLCAvLyBUT0RPOiByZXRyaWV2ZSBjb3JyZWN0IGVudmlyb25tZW50XG4gICAgICAgIGxhbmd1YWdlSWQ6IHRoaXMubGFuZ3VhZ2VJZCA+IDAgPyB0aGlzLmxhbmd1YWdlSWQgOiB1bmRlZmluZWQsXG4gICAgICAgIHZhbHVlSWRzVG9TaG93OlxuICAgICAgICAgIHRoaXMudmFsdWVzSWRzVG9TaG93Py5sZW5ndGggPiAwID8gdGhpcy52YWx1ZXNJZHNUb1Nob3cgOiB1bmRlZmluZWQsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmRpY3RTZXJ2aWNlLmdldERpY3Rpb25hcnlUcmVlKHRoaXMuZGljdGlvbmFyeUlkLCBwYXJhbXMpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXNwb25zZTogRGljdGlvbmFyeVRyZWVSZXNwb25zZUR0bykgPT4ge1xuICAgICAgICAgIHRoaXMubWFpbkRpY3Rpb25hcnkgPSByZXNwb25zZS5tYWluRGljdGlvbmFyeTtcbiAgICAgICAgICB0aGlzLmFsbERpY3Rpb25hcmllcyA9IHJlc3BvbnNlLmFsbERpY3Rpb25hcmllcztcbiAgICAgICAgICB0aGlzLnJlYnVpbGRUcmVlKCk7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIGRpY3Rpb25hcnkgdHJlZTonLCBlcnJvcik7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsZWFyVHJlZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBORVc6IExvYWQgZGljdGlvbmFyeSBmcm9tIHByZWxvYWRlZCBkYXRhIGluc3RlYWQgb2YgQVBJIGNhbGxzXG4gICAqL1xuICBsb2FkRnJvbVByZWxvYWRlZERhdGEoKSB7XG4gICAgaWYgKCF0aGlzLnByZWxvYWRlZERpY3Rpb25hcnkpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ05vIHByZWxvYWRlZCBkaWN0aW9uYXJ5IGRhdGEgYXZhaWxhYmxlLCBmYWxsaW5nIGJhY2sgdG8gQVBJJ1xuICAgICAgKTtcbiAgICAgIHRoaXMubG9hZERpY3Rpb25hcnkoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5tYWluRGljdGlvbmFyeSA9IHsgLi4udGhpcy5wcmVsb2FkZWREaWN0aW9uYXJ5IH07IC8vIENyZWF0ZSBhIGNvcHlcblxuICAgIC8vIEFwcGx5IHZhbHVlIGZpbHRlcmluZyBpZiBuZWVkZWRcbiAgICBpZiAodGhpcy52YWx1ZXNJZHNUb1Nob3c/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMubWFpbkRpY3Rpb25hcnkudmFsdWVzID1cbiAgICAgICAgdGhpcy5tYWluRGljdGlvbmFyeS52YWx1ZXM/LmZpbHRlcigodikgPT5cbiAgICAgICAgICB0aGlzLnZhbHVlc0lkc1RvU2hvdy5zb21lKChjKSA9PiBjID09IHYuaWQpXG4gICAgICAgICkgfHwgW107XG4gICAgfVxuXG4gICAgLy8gVXNlIHByZWxvYWRlZCBkaWN0aW9uYXJpZXMgZm9yIGRlcGVuZGVuY2llc1xuICAgIHRoaXMubG9hZEFsbE5lZWRlZERpY3Rpb25hcmllc0Zyb21QcmVsb2FkZWQodGhpcy5tYWluRGljdGlvbmFyeSk7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBORVc6IExvYWQgbmVlZGVkIGRpY3Rpb25hcmllcyBmcm9tIHByZWxvYWRlZCBkYXRhIGluc3RlYWQgb2YgQVBJIGNhbGxzXG4gICAqL1xuICBsb2FkQWxsTmVlZGVkRGljdGlvbmFyaWVzRnJvbVByZWxvYWRlZChkaWN0aW9uYXJ5OiBEaWN0aW9uYXJ5RHRvKSB7XG4gICAgaWYgKCF0aGlzLnByZWxvYWRlZERpY3Rpb25hcmllcykge1xuICAgICAgY29uc29sZS53YXJuKCdObyBwcmVsb2FkZWQgZGljdGlvbmFyaWVzIG1hcCBhdmFpbGFibGUnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIHdpdGggYWxsIHByZWxvYWRlZCBkaWN0aW9uYXJpZXMgLSB0aGlzIGVuc3VyZXMgY2hpbGQgZGljdGlvbmFyaWVzIGFyZSBhdmFpbGFibGVcbiAgICB0aGlzLmFsbERpY3Rpb25hcmllcyA9IEFycmF5LmZyb20odGhpcy5wcmVsb2FkZWREaWN0aW9uYXJpZXMudmFsdWVzKCkpO1xuXG4gICAgLy8gQnVpbGQgdGhlIHRyZWVcbiAgICB0aGlzLnJlYnVpbGRUcmVlKCk7XG4gIH1cblxuICByZWJ1aWxkVHJlZSgpIHtcbiAgICAvLyBDaGVjayBpZiB0cmVlVmlld0NvbnRyb2wgaXMgYXZhaWxhYmxlIChWaWV3Q2hpbGQgbWlnaHQgbm90IGJlIGluaXRpYWxpemVkIHlldClcbiAgICBpZiAoIXRoaXMudHJlZVZpZXdDb250cm9sKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IG5vZGUgPSB0aGlzLmJ1aWxkRGljdGlvbmFyeVRyZWUodGhpcy5tYWluRGljdGlvbmFyeSk7XG4gICAgaWYgKHRoaXMuZHJhd1Jvb3ROb2RlKSB7XG4gICAgICB0aGlzLnRyZWVWaWV3Q29udHJvbC5pbml0aWFsaXplKFtub2RlXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHJlZVZpZXdDb250cm9sLmluaXRpYWxpemUobm9kZS5jaGlsZHJlbik7XG4gICAgfVxuICAgIGlmICh0aGlzLmFsbG93Q2hlY2tJdGVtcykge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZUlkcyAmJiB0aGlzLnNlbGVjdGVkVmFsdWVJZHMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnRyZWVWaWV3Q29udHJvbC5leHBhbmRBbGwoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudHJlZVZpZXdDb250cm9sLmV4cGFuZE5vZGUoMCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2xlYXJUcmVlKCkge1xuICAgIC8vIENoZWNrIGlmIHRyZWVWaWV3Q29udHJvbCBpcyBhdmFpbGFibGVcbiAgICBpZiAoIXRoaXMudHJlZVZpZXdDb250cm9sKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IG5vZGUgPSB7fSBhcyBJdGVtTm9kZTtcbiAgICB0aGlzLnRyZWVWaWV3Q29udHJvbC5pbml0aWFsaXplKFtub2RlXSk7XG4gIH1cblxuICBidWlsZERpY3Rpb25hcnlUcmVlKGRpY3Rpb25hcnk6IERpY3Rpb25hcnlEdG8pOiBJdGVtTm9kZSB7XG4gICAgbGV0IG5vZGUgPSB7XG4gICAgICBuYW1lOiBkaWN0aW9uYXJ5Lm5hbWUsXG4gICAgICBjaGlsZHJlbjogW10sXG4gICAgICBkYXRhOiBudWxsLFxuICAgICAgY2FuU2VsZWN0OiBmYWxzZSxcbiAgICAgIGhpZGVBcnJvdzogZmFsc2UsXG4gICAgfSBhcyBJdGVtTm9kZTtcblxuICAgIC8vIEJ1aWxkIHRoZSB0cmVlIHJlY3Vyc2l2ZWx5XG4gICAgdGhpcy5idWlsZFRyZWVDaGlsZHJlbihkaWN0aW9uYXJ5LCBub2RlKTtcblxuICAgIC8vIFNldCBjYW5TZWxlY3QgZm9yIHJvb3Qgbm9kZSBiYXNlZCBvbiB3aGV0aGVyIGl0IGhhcyBjaGlsZHJlblxuICAgIGlmICghdGhpcy5oaWRlUGFyZW50QXJyb3cpIHtcbiAgICAgIG5vZGUuY2FuU2VsZWN0ID0gdGhpcy5nZXRDYW5TZWxlY3Qobm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUuY2FuU2VsZWN0ID0gZmFsc2U7XG4gICAgICBub2RlLmhpZGVBcnJvdyA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICBidWlsZFRyZWVDaGlsZHJlbihkaWN0aW9uYXJ5OiBEaWN0aW9uYXJ5RHRvLCBub2RlOiBJdGVtTm9kZSk6IHZvaWQge1xuICAgIGlmIChkaWN0aW9uYXJ5LnZhbHVlcykge1xuICAgICAgZGljdGlvbmFyeS52YWx1ZXMuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICBsZXQgY2hpbGRyZW5Ob2RlID0ge1xuICAgICAgICAgIG5hbWU6IHYubmFtZSxcbiAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgZGF0YTogdixcbiAgICAgICAgICBpc1NlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICBjYW5TZWxlY3Q6IGZhbHNlLFxuICAgICAgICAgIGhpZGVBcnJvdzogZmFsc2UsXG4gICAgICAgIH0gYXMgSXRlbU5vZGU7XG4gICAgICAgIGlmICh0aGlzLmxhbmd1YWdlSWQgPiAwKSB7XG4gICAgICAgICAgY29uc3QgdmFsID0gVXRpbHMuZmluZFZhbHVlVHJhbnNsYXRpb24oXG4gICAgICAgICAgICB2LnZhbHVlVHJhbnNsYXRpb25zLFxuICAgICAgICAgICAgdGhpcy5sYW5ndWFnZUlkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodmFsKSB7XG4gICAgICAgICAgICBjaGlsZHJlbk5vZGUubmFtZSA9IHZhbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlSWRzICYmIHRoaXMuc2VsZWN0ZWRWYWx1ZUlkcy5pbmRleE9mKHYuaWQpID49IDApIHtcbiAgICAgICAgICBjaGlsZHJlbk5vZGUuaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZWN1cnNpdmVseSBidWlsZCBjaGlsZCBkaWN0aW9uYXJpZXMgaWYgYW55XG4gICAgICAgIGlmICh2LmNoaWxkRGljdGlvbmFyeUlkIHx8IHYuY2hpbGREaWN0aW9uYXJ5VVVJRCkge1xuICAgICAgICAgIGxldCBkaWN0OiBEaWN0aW9uYXJ5RHRvIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgICAgLy8gVHJ5IFVVSUQtYmFzZWQgbG9va3VwIGZpcnN0IChmb3IgcHJlbG9hZGVkIGRhdGEpXG4gICAgICAgICAgaWYgKHYuY2hpbGREaWN0aW9uYXJ5VVVJRCkge1xuICAgICAgICAgICAgZGljdCA9IHRoaXMuYWxsRGljdGlvbmFyaWVzLmZpbmQoXG4gICAgICAgICAgICAgIChkKSA9PiBkLnV1aWQgPT09IHYuY2hpbGREaWN0aW9uYXJ5VVVJRFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBGYWxsYmFjayB0byBJRC1iYXNlZCBsb29rdXAgKGZvciBBUEktbG9hZGVkIGRhdGEpXG4gICAgICAgICAgaWYgKCFkaWN0ICYmIHYuY2hpbGREaWN0aW9uYXJ5SWQpIHtcbiAgICAgICAgICAgIGRpY3QgPSB0aGlzLmFsbERpY3Rpb25hcmllcy5maW5kKFxuICAgICAgICAgICAgICAoZCkgPT4gZC5pZCA9PT0gdi5jaGlsZERpY3Rpb25hcnlJZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZGljdCkge1xuICAgICAgICAgICAgdGhpcy5idWlsZFRyZWVDaGlsZHJlbihkaWN0LCBjaGlsZHJlbk5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhbmRsZSByZWZlcmVuY2UgdmFsdWVzXG4gICAgICAgIGlmIChcbiAgICAgICAgICB2LnJlZmVyZW5jZVZhbHVlcz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgIHRoaXMuZHJhd1JlZmVyZW5jZURpY3Rpb25hcmllc0FzU2VwYXJhdGVOb2RlID09PSB0cnVlXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIFRyeSB0byBmaW5kIHJlZmVyZW5jZSBkaWN0aW9uYXJ5IGJ5IFVVSUQgZmlyc3QsIHRoZW4gYnkgSURcbiAgICAgICAgICBsZXQgcmVmRGljdCA9IHRoaXMuYWxsRGljdGlvbmFyaWVzLmZpbmQoKGQpID0+XG4gICAgICAgICAgICBkaWN0aW9uYXJ5LnJlZmVycmVkSW5EaWN0aW9uYXJpZXNVVUlkcz8uaW5jbHVkZXMoZC51dWlkIHx8ICcnKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoIXJlZkRpY3QpIHtcbiAgICAgICAgICAgIHJlZkRpY3QgPSB0aGlzLmFsbERpY3Rpb25hcmllcy5maW5kKFxuICAgICAgICAgICAgICAoZCkgPT4gZC5pZCA9PT0gZGljdGlvbmFyeS5yZWZlcmVuY2VJZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2LnJlZmVyZW5jZVZhbHVlcy5mb3JFYWNoKChydikgPT4ge1xuICAgICAgICAgICAgbGV0IHJlZmVyZW5jZU5vZGUgPSB7XG4gICAgICAgICAgICAgIG5hbWU6IHJ2Lm5hbWUgKyBgICgke3JlZkRpY3Q/Lm5hbWV9KWAsXG4gICAgICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgICAgICAgZGF0YTogcnYsXG4gICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICBjYW5TZWxlY3Q6IHRydWUsIC8vIFJlZmVyZW5jZSB2YWx1ZXMgYXJlIGxlYWYgbm9kZXMgYW5kIGNhbiBiZSBzZWxlY3RlZFxuICAgICAgICAgICAgICBoaWRlQXJyb3c6IGZhbHNlLFxuICAgICAgICAgICAgfSBhcyBJdGVtTm9kZTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVJZHMgJiZcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlSWRzLmluZGV4T2YocnYuaWQpID49IDBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZWZlcmVuY2VOb2RlLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZHJlbk5vZGUuY2hpbGRyZW4ucHVzaChyZWZlcmVuY2VOb2RlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERldGVybWluZSBpZiB0aGUgY3VycmVudCBub2RlIGNhbiBiZSBzZWxlY3RlZFxuICAgICAgICBjaGlsZHJlbk5vZGUuY2FuU2VsZWN0ID0gdGhpcy5nZXRDYW5TZWxlY3QoY2hpbGRyZW5Ob2RlKTtcblxuICAgICAgICAvLyBBZGQgdGhlIGNoaWxkIG5vZGUgdG8gdGhlIGN1cnJlbnQgbm9kZSdzIGNoaWxkcmVuXG4gICAgICAgIG5vZGUuY2hpbGRyZW4ucHVzaChjaGlsZHJlbk5vZGUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBkZXRlcm1pbmUgaWYgYSBub2RlIGNhbiBiZSBzZWxlY3RlZFxuICBnZXRDYW5TZWxlY3Qobm9kZTogSXRlbU5vZGUpOiBib29sZWFuIHtcbiAgICBjb25zdCBpc0xlYWYgPSBub2RlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMDtcbiAgICByZXR1cm4gaXNMZWFmIHx8IHRoaXMuYWxsb3dTZWxlY3ROb25MZWFmTm9kZXM7XG4gIH1cblxuICBvblRyZWVTZWxlY3Rpb25DaGFuZ2VkKG5vZGU6IEl0ZW1GbGF0Tm9kZSkge1xuICAgIHZhciBzZWxlY3RlZE5vZGVzID0gdGhpcy50cmVlVmlld0NvbnRyb2wuZ2V0U2VsZWN0ZWROb2RlcygpO1xuICAgIHZhciB2YWx1ZXMgPSBzZWxlY3RlZE5vZGVzLm1hcCgobikgPT4gbi5kYXRhKSBhcyBEaWN0aW9uYXJ5VmFsdWVEdG9bXTtcbiAgICBsZXQgZHZzID0gdGhpcy5jcmVhdGVDb3B5KHZhbHVlcyk7XG5cbiAgICB0aGlzLnNlbGVjdGVkRGljdGlvbmFyeVZhbHVlc0NoYW5nZWQubmV4dChkdnMpO1xuICB9XG5cbiAgY3JlYXRlQ29weShvYmplY3RUb0NvcHk6IERpY3Rpb25hcnlWYWx1ZUR0b1tdKTogRGljdGlvbmFyeVZhbHVlW10ge1xuICAgIHZhciBzID0gSlNPTi5zdHJpbmdpZnkob2JqZWN0VG9Db3B5KTtcbiAgICB2YXIgbmV3cyA9IHMucmVwbGFjZSgvXCJ2YWx1ZVRyYW5zbGF0aW9uc1wiOi9nLCAnXCJ0cmFuc2xhdGlvbnNcIjonKTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShuZXdzKSBhcyBEaWN0aW9uYXJ5VmFsdWVbXTtcbiAgfVxufVxuIiwiPG1hdC1zcGlubmVyICpuZ0lmPVwiaXNMb2FkaW5nID09PSB0cnVlXCIgY2xhc3M9XCJtLXgtYXV0b1wiPjwvbWF0LXNwaW5uZXI+XG48YXBwLXRyZWV2aWV3ICN0cmVlVmlldyBbYXV0b1NlbGVjdERlc2NlbmRhbnRzXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2FsbG93Q2hlY2tJdGVtc109XCJhbGxvd0NoZWNrSXRlbXNcIlxuICAgICAgICAgICAgICBbYWxsb3dGaWx0ZXJdPVwiYWxsb3dGaWx0ZXJcIlxuICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlZCk9XCJvblRyZWVTZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIj5cblxuPC9hcHAtdHJlZXZpZXc+XG4iXX0=