@valtimo/dossier-management 11.3.2 → 12.1.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 (169) hide show
  1. package/esm2022/lib/components/dossier-management-assignee/dossier-management-assignee.component.mjs +7 -7
  2. package/esm2022/lib/components/dossier-management-connect-modal/dossier-management-connect-modal.component.mjs +7 -7
  3. package/esm2022/lib/components/dossier-management-create/dossier-management-create.component.mjs +119 -0
  4. package/esm2022/lib/components/dossier-management-detail/dossier-management-detail.component.mjs +34 -12
  5. package/esm2022/lib/components/dossier-management-detail-container/dossier-management-detail-container.component.mjs +114 -36
  6. package/esm2022/lib/components/dossier-management-detail-container-actions/dossier-management-detail-container-actions.component.mjs +159 -0
  7. package/esm2022/lib/components/dossier-management-document-definition/dossier-management-document-definition.component.mjs +147 -0
  8. package/esm2022/lib/components/dossier-management-list/dossier-management-list.component.mjs +33 -16
  9. package/esm2022/lib/components/dossier-management-list-columns/dossier-management-list-columns.component.mjs +12 -11
  10. package/esm2022/lib/components/dossier-management-processes/dossier-management-processes.component.mjs +7 -7
  11. package/esm2022/lib/components/dossier-management-remove-modal/dossier-management-remove-modal.component.mjs +7 -7
  12. package/esm2022/lib/components/dossier-management-search-fields/dossier-management-search-fields.component.mjs +56 -38
  13. package/esm2022/lib/components/dossier-management-statuses/dossier-management-status-modal/dossier-management-status-modal.component.mjs +285 -0
  14. package/esm2022/lib/components/dossier-management-statuses/dossier-management-statuses.component.mjs +154 -0
  15. package/esm2022/lib/components/dossier-management-tabs/dossier-management-add-tab-modal/dossier-management-add-tab-modal.component.mjs +41 -18
  16. package/esm2022/lib/components/dossier-management-tabs/dossier-management-edit-tab-modal/dossier-management-edit-tab-modal.component.mjs +13 -11
  17. package/esm2022/lib/components/dossier-management-tabs/dossier-management-tabs.component.mjs +59 -29
  18. package/esm2022/lib/components/dossier-management-tabs/tab-form/tab-form.component.mjs +49 -16
  19. package/esm2022/lib/components/dossier-management-upload/dossier-management-upload.component.mjs +14 -17
  20. package/esm2022/lib/components/dossier-management-upload/dossier-management-upload.constants.mjs +16 -1
  21. package/esm2022/lib/components/dossier-management-upload/step/dossier-management-upload-step.component.mjs +20 -5
  22. package/esm2022/lib/components/dossier-management-widget-configurators/collection/dossier-management-widget-collection.component.mjs +218 -0
  23. package/esm2022/lib/components/dossier-management-widget-configurators/custom/dossier-management-widget-custom.component.mjs +104 -0
  24. package/esm2022/lib/components/dossier-management-widget-configurators/fields/column/dossier-management-widget-fields-column.component.mjs +194 -0
  25. package/esm2022/lib/components/dossier-management-widget-configurators/fields/dossier-management-widget-fields.component.mjs +133 -0
  26. package/esm2022/lib/components/dossier-management-widget-configurators/formio/dossier-management-widget-formio.component.mjs +107 -0
  27. package/esm2022/lib/components/dossier-management-widget-configurators/index.mjs +21 -0
  28. package/esm2022/lib/components/dossier-management-widget-configurators/table/dossier-management-widget-table.component.mjs +96 -0
  29. package/esm2022/lib/components/dossier-management-widget-tab/dossier-management-widget-tab.component.mjs +160 -0
  30. package/esm2022/lib/components/dossier-management-widget-tab/editor/dossier-management-widgets-editor.component.mjs +208 -0
  31. package/esm2022/lib/components/dossier-management-widget-tab/json-editor/dossier-management-widgets-json-editor.component.mjs +190 -0
  32. package/esm2022/lib/components/dossier-management-widget-tab-edit-modal/dossier-management-widget-tab-edit-modal.mjs +110 -0
  33. package/esm2022/lib/components/dossier-management-widget-wizard/dossier-management-widget-wizard.component.mjs +160 -0
  34. package/esm2022/lib/components/dossier-management-widget-wizard/steps/index.mjs +26 -0
  35. package/esm2022/lib/components/dossier-management-widget-wizard/steps/widget-wizard-content-step/widget-wizard-content-step.component.mjs +52 -0
  36. package/esm2022/lib/components/dossier-management-widget-wizard/steps/widget-wizard-style-step/widget-wizard-style-step.component.mjs +41 -0
  37. package/esm2022/lib/components/dossier-management-widget-wizard/steps/widget-wizard-type-step/widget-wizard-type-step.component.mjs +45 -0
  38. package/esm2022/lib/components/dossier-management-widget-wizard/steps/widget-wizard-width-step/widget-wizard-width-step.component.mjs +43 -0
  39. package/esm2022/lib/dossier-management-routing.module.mjs +23 -8
  40. package/esm2022/lib/dossier-management.module.mjs +37 -18
  41. package/esm2022/lib/models/index.mjs +6 -2
  42. package/esm2022/lib/models/list-column.model.mjs +2 -2
  43. package/esm2022/lib/models/status.model.mjs +17 -0
  44. package/esm2022/lib/models/tab.enum.mjs +3 -2
  45. package/esm2022/lib/models/widget-content.model.mjs +17 -0
  46. package/esm2022/lib/models/widget-editor.model.mjs +30 -0
  47. package/esm2022/lib/models/widget-wizard.model.mjs +78 -0
  48. package/esm2022/lib/services/dossier-detail.service.mjs +18 -11
  49. package/esm2022/lib/services/dossier-export.service.mjs +7 -7
  50. package/esm2022/lib/services/dossier-management.service.mjs +38 -0
  51. package/esm2022/lib/services/index.mjs +9 -5
  52. package/esm2022/lib/services/tab-management.service.mjs +16 -10
  53. package/esm2022/lib/services/tab.service.mjs +26 -8
  54. package/esm2022/lib/services/widget-fields.service.mjs +104 -0
  55. package/esm2022/lib/services/widget-json-editor.service.mjs +31 -0
  56. package/esm2022/lib/services/widget-tab-management.service.mjs +26 -0
  57. package/esm2022/lib/services/widget-wizard.service.mjs +41 -0
  58. package/esm2022/public-api.mjs +2 -2
  59. package/fesm2022/valtimo-dossier-management.mjs +4668 -1796
  60. package/fesm2022/valtimo-dossier-management.mjs.map +1 -1
  61. package/lib/components/dossier-management-create/dossier-management-create.component.d.ts +26 -0
  62. package/lib/components/dossier-management-create/dossier-management-create.component.d.ts.map +1 -0
  63. package/lib/components/dossier-management-detail/dossier-management-detail.component.d.ts +9 -3
  64. package/lib/components/dossier-management-detail/dossier-management-detail.component.d.ts.map +1 -1
  65. package/lib/components/dossier-management-detail-container/dossier-management-detail-container.component.d.ts +27 -14
  66. package/lib/components/dossier-management-detail-container/dossier-management-detail-container.component.d.ts.map +1 -1
  67. package/lib/components/dossier-management-detail-container-actions/{dossier-management-detail-container-actions.d.ts → dossier-management-detail-container-actions.component.d.ts} +9 -3
  68. package/lib/components/dossier-management-detail-container-actions/dossier-management-detail-container-actions.component.d.ts.map +1 -0
  69. package/lib/components/dossier-management-document-definition/dossier-management-document-definition.component.d.ts +48 -0
  70. package/lib/components/dossier-management-document-definition/dossier-management-document-definition.component.d.ts.map +1 -0
  71. package/lib/components/dossier-management-list/dossier-management-list.component.d.ts +7 -4
  72. package/lib/components/dossier-management-list/dossier-management-list.component.d.ts.map +1 -1
  73. package/lib/components/dossier-management-list-columns/dossier-management-list-columns.component.d.ts +2 -2
  74. package/lib/components/dossier-management-list-columns/dossier-management-list-columns.component.d.ts.map +1 -1
  75. package/lib/components/dossier-management-search-fields/dossier-management-search-fields.component.d.ts +10 -4
  76. package/lib/components/dossier-management-search-fields/dossier-management-search-fields.component.d.ts.map +1 -1
  77. package/lib/components/dossier-management-statuses/dossier-management-status-modal/dossier-management-status-modal.component.d.ts +78 -0
  78. package/lib/components/dossier-management-statuses/dossier-management-status-modal/dossier-management-status-modal.component.d.ts.map +1 -0
  79. package/lib/components/dossier-management-statuses/dossier-management-statuses.component.d.ts +47 -0
  80. package/lib/components/dossier-management-statuses/dossier-management-statuses.component.d.ts.map +1 -0
  81. package/lib/components/dossier-management-tabs/dossier-management-add-tab-modal/dossier-management-add-tab-modal.component.d.ts +7 -9
  82. package/lib/components/dossier-management-tabs/dossier-management-add-tab-modal/dossier-management-add-tab-modal.component.d.ts.map +1 -1
  83. package/lib/components/dossier-management-tabs/dossier-management-edit-tab-modal/dossier-management-edit-tab-modal.component.d.ts.map +1 -1
  84. package/lib/components/dossier-management-tabs/dossier-management-tabs.component.d.ts +10 -5
  85. package/lib/components/dossier-management-tabs/dossier-management-tabs.component.d.ts.map +1 -1
  86. package/lib/components/dossier-management-tabs/tab-form/tab-form.component.d.ts +13 -4
  87. package/lib/components/dossier-management-tabs/tab-form/tab-form.component.d.ts.map +1 -1
  88. package/lib/components/dossier-management-upload/dossier-management-upload.component.d.ts +3 -5
  89. package/lib/components/dossier-management-upload/dossier-management-upload.component.d.ts.map +1 -1
  90. package/lib/components/dossier-management-upload/dossier-management-upload.constants.d.ts.map +1 -1
  91. package/lib/components/dossier-management-upload/step/dossier-management-upload-step.component.d.ts.map +1 -1
  92. package/lib/components/dossier-management-widget-configurators/collection/dossier-management-widget-collection.component.d.ts +57 -0
  93. package/lib/components/dossier-management-widget-configurators/collection/dossier-management-widget-collection.component.d.ts.map +1 -0
  94. package/lib/components/dossier-management-widget-configurators/custom/dossier-management-widget-custom.component.d.ts +40 -0
  95. package/lib/components/dossier-management-widget-configurators/custom/dossier-management-widget-custom.component.d.ts.map +1 -0
  96. package/lib/components/dossier-management-widget-configurators/fields/column/dossier-management-widget-fields-column.component.d.ts +50 -0
  97. package/lib/components/dossier-management-widget-configurators/fields/column/dossier-management-widget-fields-column.component.d.ts.map +1 -0
  98. package/lib/components/dossier-management-widget-configurators/fields/dossier-management-widget-fields.component.d.ts +38 -0
  99. package/lib/components/dossier-management-widget-configurators/fields/dossier-management-widget-fields.component.d.ts.map +1 -0
  100. package/lib/components/dossier-management-widget-configurators/formio/dossier-management-widget-formio.component.d.ts +41 -0
  101. package/lib/components/dossier-management-widget-configurators/formio/dossier-management-widget-formio.component.d.ts.map +1 -0
  102. package/lib/components/dossier-management-widget-configurators/index.d.ts +6 -0
  103. package/lib/components/dossier-management-widget-configurators/index.d.ts.map +1 -0
  104. package/lib/components/dossier-management-widget-configurators/table/dossier-management-widget-table.component.d.ts +32 -0
  105. package/lib/components/dossier-management-widget-configurators/table/dossier-management-widget-table.component.d.ts.map +1 -0
  106. package/lib/components/dossier-management-widget-tab/dossier-management-widget-tab.component.d.ts +50 -0
  107. package/lib/components/dossier-management-widget-tab/dossier-management-widget-tab.component.d.ts.map +1 -0
  108. package/lib/components/dossier-management-widget-tab/editor/dossier-management-widgets-editor.component.d.ts +40 -0
  109. package/lib/components/dossier-management-widget-tab/editor/dossier-management-widgets-editor.component.d.ts.map +1 -0
  110. package/lib/components/dossier-management-widget-tab/json-editor/dossier-management-widgets-json-editor.component.d.ts +47 -0
  111. package/lib/components/dossier-management-widget-tab/json-editor/dossier-management-widgets-json-editor.component.d.ts.map +1 -0
  112. package/lib/components/dossier-management-widget-tab-edit-modal/dossier-management-widget-tab-edit-modal.d.ts +32 -0
  113. package/lib/components/dossier-management-widget-tab-edit-modal/dossier-management-widget-tab-edit-modal.d.ts.map +1 -0
  114. package/lib/components/dossier-management-widget-wizard/dossier-management-widget-wizard.component.d.ts +34 -0
  115. package/lib/components/dossier-management-widget-wizard/dossier-management-widget-wizard.component.d.ts.map +1 -0
  116. package/lib/components/dossier-management-widget-wizard/steps/index.d.ts +6 -0
  117. package/lib/components/dossier-management-widget-wizard/steps/index.d.ts.map +1 -0
  118. package/lib/components/dossier-management-widget-wizard/steps/widget-wizard-content-step/widget-wizard-content-step.component.d.ts +15 -0
  119. package/lib/components/dossier-management-widget-wizard/steps/widget-wizard-content-step/widget-wizard-content-step.component.d.ts.map +1 -0
  120. package/lib/components/dossier-management-widget-wizard/steps/widget-wizard-style-step/widget-wizard-style-step.component.d.ts +15 -0
  121. package/lib/components/dossier-management-widget-wizard/steps/widget-wizard-style-step/widget-wizard-style-step.component.d.ts.map +1 -0
  122. package/lib/components/dossier-management-widget-wizard/steps/widget-wizard-type-step/widget-wizard-type-step.component.d.ts +15 -0
  123. package/lib/components/dossier-management-widget-wizard/steps/widget-wizard-type-step/widget-wizard-type-step.component.d.ts.map +1 -0
  124. package/lib/components/dossier-management-widget-wizard/steps/widget-wizard-width-step/widget-wizard-width-step.component.d.ts +16 -0
  125. package/lib/components/dossier-management-widget-wizard/steps/widget-wizard-width-step/widget-wizard-width-step.component.d.ts.map +1 -0
  126. package/lib/dossier-management-routing.module.d.ts.map +1 -1
  127. package/lib/dossier-management.module.d.ts +25 -22
  128. package/lib/dossier-management.module.d.ts.map +1 -1
  129. package/lib/models/index.d.ts +4 -0
  130. package/lib/models/index.d.ts.map +1 -1
  131. package/lib/models/status.model.d.ts +4 -0
  132. package/lib/models/status.model.d.ts.map +1 -0
  133. package/lib/models/tab.enum.d.ts +2 -1
  134. package/lib/models/tab.enum.d.ts.map +1 -1
  135. package/lib/models/widget-content.model.d.ts +5 -0
  136. package/lib/models/widget-content.model.d.ts.map +1 -0
  137. package/lib/models/widget-editor.model.d.ts +10 -0
  138. package/lib/models/widget-editor.model.d.ts.map +1 -0
  139. package/lib/models/widget-wizard.model.d.ts +29 -0
  140. package/lib/models/widget-wizard.model.d.ts.map +1 -0
  141. package/lib/services/dossier-detail.service.d.ts +4 -1
  142. package/lib/services/dossier-detail.service.d.ts.map +1 -1
  143. package/lib/services/{dossier-import.service.d.ts → dossier-management.service.d.ts} +4 -4
  144. package/lib/services/dossier-management.service.d.ts.map +1 -0
  145. package/lib/services/index.d.ts +7 -3
  146. package/lib/services/index.d.ts.map +1 -1
  147. package/lib/services/tab-management.service.d.ts +3 -1
  148. package/lib/services/tab-management.service.d.ts.map +1 -1
  149. package/lib/services/tab.service.d.ts +10 -4
  150. package/lib/services/tab.service.d.ts.map +1 -1
  151. package/lib/services/widget-fields.service.d.ts +17 -0
  152. package/lib/services/widget-fields.service.d.ts.map +1 -0
  153. package/lib/services/widget-json-editor.service.d.ts +7 -0
  154. package/lib/services/widget-json-editor.service.d.ts.map +1 -0
  155. package/lib/services/widget-tab-management.service.d.ts +16 -0
  156. package/lib/services/widget-tab-management.service.d.ts.map +1 -0
  157. package/lib/services/widget-wizard.service.d.ts +18 -0
  158. package/lib/services/widget-wizard.service.d.ts.map +1 -0
  159. package/package.json +3 -3
  160. package/esm2022/lib/components/dossier-management-detail-container-actions/dossier-management-detail-container-actions.mjs +0 -152
  161. package/esm2022/lib/components/dossier-management-document-definition/dossier-management-document-definition.mjs +0 -48
  162. package/esm2022/lib/components/dossier-management-link-process/dossier-management-link-process.component.mjs +0 -84
  163. package/esm2022/lib/services/dossier-import.service.mjs +0 -38
  164. package/lib/components/dossier-management-detail-container-actions/dossier-management-detail-container-actions.d.ts.map +0 -1
  165. package/lib/components/dossier-management-document-definition/dossier-management-document-definition.d.ts +0 -15
  166. package/lib/components/dossier-management-document-definition/dossier-management-document-definition.d.ts.map +0 -1
  167. package/lib/components/dossier-management-link-process/dossier-management-link-process.component.d.ts +0 -27
  168. package/lib/components/dossier-management-link-process/dossier-management-link-process.component.d.ts.map +0 -1
  169. package/lib/services/dossier-import.service.d.ts.map +0 -1
@@ -0,0 +1,208 @@
1
+ /*
2
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
3
+ *
4
+ * Licensed under EUPL, Version 1.2 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" basis,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { CommonModule } from '@angular/common';
17
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, signal, } from '@angular/core';
18
+ import { TranslateModule } from '@ngx-translate/core';
19
+ import { CarbonListModule, ConfirmationModalModule, ViewType, } from '@valtimo/components';
20
+ import { ButtonModule, IconModule, TabsModule } from 'carbon-components-angular';
21
+ import { BehaviorSubject, combineLatest, map, Subject, take } from 'rxjs';
22
+ import { AVAILABLE_WIDGETS, WidgetStyle, WidgetTypeTags } from '../../../models';
23
+ import { DossierManagementWidgetWizardComponent } from '../../dossier-management-widget-wizard/dossier-management-widget-wizard.component';
24
+ import * as i0 from "@angular/core";
25
+ import * as i1 from "@valtimo/components";
26
+ import * as i2 from "@ngx-translate/core";
27
+ import * as i3 from "../../../services";
28
+ import * as i4 from "@angular/common";
29
+ import * as i5 from "carbon-components-angular";
30
+ export class DossierManagementWidgetsEditorComponent {
31
+ set currentWidgetTab(value) {
32
+ if (!value)
33
+ return;
34
+ this._currentWidgetTab = value;
35
+ this._items$.next(value?.widgets);
36
+ this._usedKeys = value?.widgets.map(widget => widget.key);
37
+ this.dragAndDropDisabled.set(false);
38
+ }
39
+ get currentWidgetTab() {
40
+ return this._currentWidgetTab;
41
+ }
42
+ constructor(keyGeneratorService, translateService, widgetTabManagementService, widgetWizardService) {
43
+ this.keyGeneratorService = keyGeneratorService;
44
+ this.translateService = translateService;
45
+ this.widgetTabManagementService = widgetTabManagementService;
46
+ this.widgetWizardService = widgetWizardService;
47
+ this.changeSaved = new EventEmitter();
48
+ this.FIELDS = [
49
+ {
50
+ key: 'title',
51
+ label: 'interface.title',
52
+ viewType: ViewType.TEXT,
53
+ },
54
+ {
55
+ key: 'tags',
56
+ label: 'widgetTabManagement.columns.type',
57
+ viewType: ViewType.TAGS,
58
+ },
59
+ {
60
+ key: 'key',
61
+ label: 'interface.key',
62
+ viewType: ViewType.TEXT,
63
+ },
64
+ {
65
+ key: 'widthTranslation',
66
+ label: 'widgetTabManagement.columns.width',
67
+ viewType: ViewType.TEXT,
68
+ },
69
+ {
70
+ key: 'highContrast',
71
+ label: 'widgetTabManagement.columns.highContrast',
72
+ viewType: ViewType.BOOLEAN,
73
+ },
74
+ ];
75
+ this.ACTION_ITEMS = [
76
+ {
77
+ label: 'interface.edit',
78
+ callback: this.editWidget.bind(this),
79
+ },
80
+ {
81
+ label: 'interface.delete',
82
+ callback: this.deleteWidget.bind(this),
83
+ type: 'danger',
84
+ },
85
+ ];
86
+ this._items$ = new BehaviorSubject([]);
87
+ this.items$ = combineLatest([
88
+ this._items$,
89
+ this.translateService.stream('key'),
90
+ ]).pipe(map(([items]) => items.map(item => ({
91
+ ...item,
92
+ widthTranslation: this.translateService.instant(this.getWidthTranslationKey(item.width)),
93
+ tags: [
94
+ {
95
+ content: this.translateService.instant(`widgetTabManagement.types.${item.type}.title`),
96
+ type: WidgetTypeTags[item.type],
97
+ },
98
+ ],
99
+ }))));
100
+ this.isWizardOpen$ = new BehaviorSubject(false);
101
+ this.isEditMode = this.widgetWizardService.editMode;
102
+ this.deleteModalOpen$ = new BehaviorSubject(false);
103
+ this.deleteRowKey$ = new Subject();
104
+ this.dragAndDropDisabled = signal(false);
105
+ }
106
+ editWidget(tabWidget) {
107
+ this.widgetWizardService.widgetTitle.set(tabWidget.title);
108
+ this.widgetWizardService.widgetStyle.set(tabWidget.highContrast ? WidgetStyle.HIGH_CONTRAST : WidgetStyle.DEFAULT);
109
+ this.widgetWizardService.widgetWidth.set(tabWidget.width);
110
+ this.widgetWizardService.selectedWidget.set(AVAILABLE_WIDGETS.find(available => available.type === tabWidget.type) ?? null);
111
+ this.widgetWizardService.widgetContent.set(tabWidget.properties);
112
+ this.widgetWizardService.editMode.set(true);
113
+ this.widgetWizardService.widgetKey.set(tabWidget.key);
114
+ this.isWizardOpen$.next(true);
115
+ }
116
+ openAddModal() {
117
+ this.isWizardOpen$.next(true);
118
+ }
119
+ onDeleteConfirm(widgetKey) {
120
+ this.widgetTabManagementService
121
+ .updateWidgets({
122
+ ...this.currentWidgetTab,
123
+ widgets: this.currentWidgetTab.widgets.filter(widget => widget.key !== widgetKey),
124
+ })
125
+ .pipe(take(1))
126
+ .subscribe(() => {
127
+ this.changeSaved.emit();
128
+ });
129
+ }
130
+ onCloseEvent(widgetResult, existingWidgets) {
131
+ this.isWizardOpen$.next(false);
132
+ this.widgetWizardService.resetWizard();
133
+ if (!widgetResult)
134
+ return;
135
+ this.widgetTabManagementService
136
+ .updateWidgets({
137
+ caseDefinitionName: this.documentDefinitionName,
138
+ key: this.tabWidgetKey,
139
+ widgets: !!widgetResult.key
140
+ ? existingWidgets.map((widget) => widget.key === widgetResult.key ? widgetResult : widget)
141
+ : [
142
+ ...existingWidgets,
143
+ {
144
+ ...widgetResult,
145
+ key: this.keyGeneratorService.getUniqueKey(widgetResult.title, this._usedKeys),
146
+ },
147
+ ],
148
+ })
149
+ .pipe(take(1))
150
+ .subscribe(() => {
151
+ this.changeSaved.emit();
152
+ });
153
+ }
154
+ onItemsReordered(widgets) {
155
+ this.dragAndDropDisabled.set(true);
156
+ this.widgetTabManagementService
157
+ .updateWidgets({
158
+ ...this.currentWidgetTab,
159
+ widgets,
160
+ })
161
+ .pipe(take(1))
162
+ .subscribe(() => {
163
+ this.changeSaved.emit();
164
+ });
165
+ }
166
+ deleteWidget(tabWidget) {
167
+ this.deleteRowKey$.next(tabWidget.key);
168
+ this.deleteModalOpen$.next(true);
169
+ }
170
+ getWidthTranslationKey(width) {
171
+ switch (width) {
172
+ case 1:
173
+ return 'widgetTabManagement.width.quarter.title';
174
+ case 2:
175
+ return 'widgetTabManagement.width.half.title';
176
+ case 3:
177
+ return 'widgetTabManagement.width.threeQuarters.title';
178
+ case 4:
179
+ return 'widgetTabManagement.width.fullWidth.title';
180
+ default:
181
+ return '-';
182
+ }
183
+ }
184
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DossierManagementWidgetsEditorComponent, deps: [{ token: i1.KeyGeneratorService }, { token: i2.TranslateService }, { token: i3.WidgetTabManagementService }, { token: i3.WidgetWizardService }], target: i0.ɵɵFactoryTarget.Component }); }
185
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: DossierManagementWidgetsEditorComponent, isStandalone: true, selector: "valtimo-dossier-management-widgets-editor", inputs: { documentDefinitionName: "documentDefinitionName", tabWidgetKey: "tabWidgetKey", currentWidgetTab: "currentWidgetTab" }, outputs: { changeSaved: "changeSaved" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"{\n isWizardOpen: isWizardOpen$ | async,\n items: items$ | async\n } as obs\"\n>\n <valtimo-carbon-list\n [actionItems]=\"ACTION_ITEMS\"\n [fields]=\"FIELDS\"\n [header]=\"false\"\n [items]=\"obs.items\"\n [dragAndDrop]=\"true\"\n [dragAndDropDisabled]=\"dragAndDropDisabled()\"\n (itemsReordered)=\"onItemsReordered($event)\"\n (rowClicked)=\"editWidget($event)\"\n >\n <ng-container carbonToolbarContent>\n <ng-container *ngTemplateOutlet=\"addWidgetButton\"></ng-container>\n </ng-container>\n\n <valtimo-no-results\n [action]=\"addWidgetButton\"\n [description]=\"'widgetTabManagement.list.noResults.description' | translate\"\n [title]=\"'widgetTabManagement.list.noResults.title' | translate\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n\n <ng-template #addWidgetButton>\n <button cdsButton=\"primary\" (click)=\"openAddModal()\">\n {{ 'widgetTabManagement.list.add' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </ng-template>\n\n <valtimo-dossier-management-widget-wizard\n [editMode]=\"isEditMode()\"\n [open]=\"obs.isWizardOpen\"\n (closeEvent)=\"onCloseEvent($event, obs.items)\"\n ></valtimo-dossier-management-widget-wizard>\n\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"Are you sure you want to delete this widget?\"\n [outputOnConfirm]=\"deleteRowKey$ | async\"\n [showModalSubject$]=\"deleteModalOpen$\"\n titleTranslationKey=\"interface.delete\"\n (confirmEvent)=\"onDeleteConfirm($event)\"\n ></valtimo-confirmation-modal>\n</ng-container>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: CarbonListModule }, { kind: "component", type: i1.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "actions", "actionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i1.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i5.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i5.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: TabsModule }, { kind: "component", type: DossierManagementWidgetWizardComponent, selector: "valtimo-dossier-management-widget-wizard", inputs: ["open", "editMode"], outputs: ["closeEvent"] }, { kind: "ngmodule", type: ConfirmationModalModule }, { kind: "component", type: i1.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
186
+ }
187
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DossierManagementWidgetsEditorComponent, decorators: [{
188
+ type: Component,
189
+ args: [{ selector: 'valtimo-dossier-management-widgets-editor', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
190
+ CommonModule,
191
+ TranslateModule,
192
+ CarbonListModule,
193
+ ButtonModule,
194
+ IconModule,
195
+ TabsModule,
196
+ DossierManagementWidgetWizardComponent,
197
+ ConfirmationModalModule,
198
+ ], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"{\n isWizardOpen: isWizardOpen$ | async,\n items: items$ | async\n } as obs\"\n>\n <valtimo-carbon-list\n [actionItems]=\"ACTION_ITEMS\"\n [fields]=\"FIELDS\"\n [header]=\"false\"\n [items]=\"obs.items\"\n [dragAndDrop]=\"true\"\n [dragAndDropDisabled]=\"dragAndDropDisabled()\"\n (itemsReordered)=\"onItemsReordered($event)\"\n (rowClicked)=\"editWidget($event)\"\n >\n <ng-container carbonToolbarContent>\n <ng-container *ngTemplateOutlet=\"addWidgetButton\"></ng-container>\n </ng-container>\n\n <valtimo-no-results\n [action]=\"addWidgetButton\"\n [description]=\"'widgetTabManagement.list.noResults.description' | translate\"\n [title]=\"'widgetTabManagement.list.noResults.title' | translate\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n\n <ng-template #addWidgetButton>\n <button cdsButton=\"primary\" (click)=\"openAddModal()\">\n {{ 'widgetTabManagement.list.add' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </ng-template>\n\n <valtimo-dossier-management-widget-wizard\n [editMode]=\"isEditMode()\"\n [open]=\"obs.isWizardOpen\"\n (closeEvent)=\"onCloseEvent($event, obs.items)\"\n ></valtimo-dossier-management-widget-wizard>\n\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"Are you sure you want to delete this widget?\"\n [outputOnConfirm]=\"deleteRowKey$ | async\"\n [showModalSubject$]=\"deleteModalOpen$\"\n titleTranslationKey=\"interface.delete\"\n (confirmEvent)=\"onDeleteConfirm($event)\"\n ></valtimo-confirmation-modal>\n</ng-container>\n" }]
199
+ }], ctorParameters: () => [{ type: i1.KeyGeneratorService }, { type: i2.TranslateService }, { type: i3.WidgetTabManagementService }, { type: i3.WidgetWizardService }], propDecorators: { documentDefinitionName: [{
200
+ type: Input
201
+ }], tabWidgetKey: [{
202
+ type: Input
203
+ }], currentWidgetTab: [{
204
+ type: Input
205
+ }], changeSaved: [{
206
+ type: Output
207
+ }] } });
208
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1tYW5hZ2VtZW50LXdpZGdldHMtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci1tYW5hZ2VtZW50L3NyYy9saWIvY29tcG9uZW50cy9kb3NzaWVyLW1hbmFnZW1lbnQtd2lkZ2V0LXRhYi9lZGl0b3IvZG9zc2llci1tYW5hZ2VtZW50LXdpZGdldHMtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci1tYW5hZ2VtZW50L3NyYy9saWIvY29tcG9uZW50cy9kb3NzaWVyLW1hbmFnZW1lbnQtd2lkZ2V0LXRhYi9lZGl0b3IvZG9zc2llci1tYW5hZ2VtZW50LXdpZGdldHMtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsZUFBZSxFQUFtQixNQUFNLHFCQUFxQixDQUFDO0FBQ3RFLE9BQU8sRUFHTCxnQkFBZ0IsRUFFaEIsdUJBQXVCLEVBRXZCLFFBQVEsR0FDVCxNQUFNLHFCQUFxQixDQUFDO0FBRTdCLE9BQU8sRUFBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQy9FLE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBYyxPQUFPLEVBQUUsSUFBSSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3BGLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxXQUFX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LElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRU8sc0JBQXNCLENBQUMsS0FBYTtRQUMxQyxRQUFRLEtBQUssRUFBRSxDQUFDO1lBQ2QsS0FBSyxDQUFDO2dCQUNKLE9BQU8seUNBQXlDLENBQUM7WUFDbkQsS0FBSyxDQUFDO2dCQUNKLE9BQU8sc0NBQXNDLENBQUM7WUFDaEQsS0FBSyxDQUFDO2dCQUNKLE9BQU8sK0NBQStDLENBQUM7WUFDekQsS0FBSyxDQUFDO2dCQUNKLE9BQU8sMkNBQTJDLENBQUM7WUFDckQ7Z0JBQ0UsT0FBTyxHQUFHLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQzs4R0F4TFUsdUNBQXVDO2tHQUF2Qyx1Q0FBdUMsZ1JDMURwRCxrM0VBbUVBLDJDRG5CSSxZQUFZLDhWQUNaLGVBQWUsMkZBQ2YsZ0JBQWdCLHcxQkFDaEIsWUFBWSxnTUFDWixVQUFVLDROQUNWLFVBQVUsK0JBQ1Ysc0NBQXNDLDJJQUN0Qyx1QkFBdUI7OzJGQUdkLHVDQUF1QztrQkFoQm5ELFNBQVM7K0JBQ0UsMkNBQTJDLG1CQUVwQyx1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixZQUFZO3dCQUNaLFVBQVU7d0JBQ1YsVUFBVTt3QkFDVixzQ0FBc0M7d0JBQ3RDLHVCQUF1QjtxQkFDeEI7a01BR2Usc0JBQXNCO3NCQUFyQyxLQUFLO2dCQUNVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBRWMsZ0JBQWdCO3NCQUFuQyxLQUFLO2dCQVlvQixXQUFXO3NCQUFwQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1RyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1xuICBBY3Rpb25JdGVtLFxuICBDYXJib25MaXN0SXRlbSxcbiAgQ2FyYm9uTGlzdE1vZHVsZSxcbiAgQ29sdW1uQ29uZmlnLFxuICBDb25maXJtYXRpb25Nb2RhbE1vZHVsZSxcbiAgS2V5R2VuZXJhdG9yU2VydmljZSxcbiAgVmlld1R5cGUsXG59IGZyb20gJ0B2YWx0aW1vL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtCYXNpY0Nhc2VXaWRnZXQsIENhc2VXaWRnZXQsIENhc2VXaWRnZXRzUmVzfSBmcm9tICdAdmFsdGltby9kb3NzaWVyJztcbmltcG9ydCB7QnV0dG9uTW9kdWxlLCBJY29uTW9kdWxlLCBUYWJzTW9kdWxlfSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBtYXAsIE9ic2VydmFibGUsIFN1YmplY3QsIHRha2V9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtBVkFJTEFCTEVfV0lER0VUUywgV2lkZ2V0U3R5bGUsIFdpZGdldFR5cGVUYWdzfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtXaWRnZXRUYWJNYW5hZ2VtZW50U2VydmljZSwgV2lkZ2V0V2l6YXJkU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtEb3NzaWVyTWFuYWdlbWVudFdpZGdldFdpemFyZENvbXBvbmVudH0gZnJvbSAnLi4vLi4vZG9zc2llci1tYW5hZ2VtZW50LXdpZGdldC13aXphcmQvZG9zc2llci1tYW5hZ2VtZW50LXdpZGdldC13aXphcmQuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1kb3NzaWVyLW1hbmFnZW1lbnQtd2lkZ2V0cy1lZGl0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vZG9zc2llci1tYW5hZ2VtZW50LXdpZGdldHMtZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIENhcmJvbkxpc3RNb2R1bGUsXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIEljb25Nb2R1bGUsXG4gICAgVGFic01vZHVsZSxcbiAgICBEb3NzaWVyTWFuYWdlbWVudFdpZGdldFdpemFyZENvbXBvbmVudCxcbiAgICBDb25maXJtYXRpb25Nb2RhbE1vZHVsZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRG9zc2llck1hbmFnZW1lbnRXaWRnZXRzRWRpdG9yQ29tcG9uZW50IHtcbiAgQElucHV0KCkgcHVibGljIGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZztcbiAgQElucHV0KCkgcHVibGljIHRhYldpZGdldEtleTogc3RyaW5nO1xuICBwcml2YXRlIF9jdXJyZW50V2lkZ2V0VGFiOiBDYXNlV2lkZ2V0c1JlcztcbiAgQElucHV0KCkgcHVibGljIHNldCBjdXJyZW50V2lkZ2V0VGFiKHZhbHVlOiBDYXNlV2lkZ2V0c1Jlcykge1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcblxuICAgIHRoaXMuX2N1cnJlbnRXaWRnZXRUYWIgPSB2YWx1ZTtcbiAgICB0aGlzLl9pdGVtcyQubmV4dCh2YWx1ZT8ud2lkZ2V0cyk7XG4gICAgdGhpcy5fdXNlZEtleXMgPSB2YWx1ZT8ud2lkZ2V0cy5tYXAod2lkZ2V0ID0+IHdpZGdldC5rZXkpO1xuICAgIHRoaXMuZHJhZ0FuZERyb3BEaXNhYmxlZC5zZXQoZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBnZXQgY3VycmVudFdpZGdldFRhYigpOiBDYXNlV2lkZ2V0c1JlcyB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRXaWRnZXRUYWI7XG4gIH1cblxuICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IGNoYW5nZVNhdmVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHB1YmxpYyByZWFkb25seSBGSUVMRFM6IENvbHVtbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIGtleTogJ3RpdGxlJyxcbiAgICAgIGxhYmVsOiAnaW50ZXJmYWNlLnRpdGxlJyxcbiAgICAgIHZpZXdUeXBlOiBWaWV3VHlwZS5URVhULFxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAndGFncycsXG4gICAgICBsYWJlbDogJ3dpZGdldFRhYk1hbmFnZW1lbnQuY29sdW1ucy50eXBlJyxcbiAgICAgIHZpZXdUeXBlOiBWaWV3VHlwZS5UQUdTLFxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAna2V5JyxcbiAgICAgIGxhYmVsOiAnaW50ZXJmYWNlLmtleScsXG4gICAgICB2aWV3VHlwZTogVmlld1R5cGUuVEVYVCxcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ3dpZHRoVHJhbnNsYXRpb24nLFxuICAgICAgbGFiZWw6ICd3aWRnZXRUYWJNYW5hZ2VtZW50LmNvbHVtbnMud2lkdGgnLFxuICAgICAgdmlld1R5cGU6IFZpZXdUeXBlLlRFWFQsXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICdoaWdoQ29udHJhc3QnLFxuICAgICAgbGFiZWw6ICd3aWRnZXRUYWJNYW5hZ2VtZW50LmNvbHVtbnMuaGlnaENvbnRyYXN0JyxcbiAgICAgIHZpZXdUeXBlOiBWaWV3VHlwZS5CT09MRUFOLFxuICAgIH0sXG4gIF07XG5cbiAgcHVibGljIHJlYWRvbmx5IEFDVElPTl9JVEVNUzogQWN0aW9uSXRlbVtdID0gW1xuICAgIHtcbiAgICAgIGxhYmVsOiAnaW50ZXJmYWNlLmVkaXQnLFxuICAgICAgY2FsbGJhY2s6IHRoaXMuZWRpdFdpZGdldC5iaW5kKHRoaXMpLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6ICdpbnRlcmZhY2UuZGVsZXRlJyxcbiAgICAgIGNhbGxiYWNrOiB0aGlzLmRlbGV0ZVdpZGdldC5iaW5kKHRoaXMpLFxuICAgICAgdHlwZTogJ2RhbmdlcicsXG4gICAgfSxcbiAgXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9pdGVtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENhcmJvbkxpc3RJdGVtW10+KFtdKTtcbiAgcHVibGljIHJlYWRvbmx5IGl0ZW1zJDogT2JzZXJ2YWJsZTxDYXJib25MaXN0SXRlbVtdPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuX2l0ZW1zJCxcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKSxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtpdGVtc10pID0+XG4gICAgICBpdGVtcy5tYXAoaXRlbSA9PiAoe1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICB3aWR0aFRyYW5zbGF0aW9uOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLmdldFdpZHRoVHJhbnNsYXRpb25LZXkoaXRlbS53aWR0aCkpLFxuICAgICAgICB0YWdzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29udGVudDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHdpZGdldFRhYk1hbmFnZW1lbnQudHlwZXMuJHtpdGVtLnR5cGV9LnRpdGxlYCksXG4gICAgICAgICAgICB0eXBlOiBXaWRnZXRUeXBlVGFnc1tpdGVtLnR5cGVdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KSlcbiAgICApXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGlzV2l6YXJkT3BlbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIHJlYWRvbmx5IGlzRWRpdE1vZGUgPSB0aGlzLndpZGdldFdpemFyZFNlcnZpY2UuZWRpdE1vZGU7XG4gIHB1YmxpYyByZWFkb25seSBkZWxldGVNb2RhbE9wZW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSBkZWxldGVSb3dLZXkkID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xuXG4gIHB1YmxpYyByZWFkb25seSBkcmFnQW5kRHJvcERpc2FibGVkID0gc2lnbmFsKGZhbHNlKTtcblxuICBwcml2YXRlIF91c2VkS2V5czogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBrZXlHZW5lcmF0b3JTZXJ2aWNlOiBLZXlHZW5lcmF0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdpZGdldFRhYk1hbmFnZW1lbnRTZXJ2aWNlOiBXaWRnZXRUYWJNYW5hZ2VtZW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdpZGdldFdpemFyZFNlcnZpY2U6IFdpZGdldFdpemFyZFNlcnZpY2VcbiAgKSB7fVxuXG4gIHB1YmxpYyBlZGl0V2lkZ2V0KHRhYldpZGdldDogQ2FzZVdpZGdldCk6IHZvaWQge1xuICAgIHRoaXMud2lkZ2V0V2l6YXJkU2VydmljZS53aWRnZXRUaXRsZS5zZXQodGFiV2lkZ2V0LnRpdGxlKTtcbiAgICB0aGlzLndpZGdldFdpemFyZFNlcnZpY2Uud2lkZ2V0U3R5bGUuc2V0KFxuICAgICAgdGFiV2lkZ2V0LmhpZ2hDb250cmFzdCA/IFdpZGdldFN0eWxlLkhJR0hfQ09OVFJBU1QgOiBXaWRnZXRTdHlsZS5ERUZBVUxUXG4gICAgKTtcbiAgICB0aGlzLndpZGdldFdpemFyZFNlcnZpY2Uud2lkZ2V0V2lkdGguc2V0KHRhYldpZGdldC53aWR0aCk7XG4gICAgdGhpcy53aWRnZXRXaXphcmRTZXJ2aWNlLnNlbGVjdGVkV2lkZ2V0LnNldChcbiAgICAgIEFWQUlMQUJMRV9XSURHRVRTLmZpbmQoYXZhaWxhYmxlID0+IGF2YWlsYWJsZS50eXBlID09PSB0YWJXaWRnZXQudHlwZSkgPz8gbnVsbFxuICAgICk7XG4gICAgdGhpcy53aWRnZXRXaXphcmRTZXJ2aWNlLndpZGdldENvbnRlbnQuc2V0KHRhYldpZGdldC5wcm9wZXJ0aWVzKTtcbiAgICB0aGlzLndpZGdldFdpemFyZFNlcnZpY2UuZWRpdE1vZGUuc2V0KHRydWUpO1xuICAgIHRoaXMud2lkZ2V0V2l6YXJkU2VydmljZS53aWRnZXRLZXkuc2V0KHRhYldpZGdldC5rZXkpO1xuICAgIHRoaXMuaXNXaXphcmRPcGVuJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgcHVibGljIG9wZW5BZGRNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzV2l6YXJkT3BlbiQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkRlbGV0ZUNvbmZpcm0od2lkZ2V0S2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLndpZGdldFRhYk1hbmFnZW1lbnRTZXJ2aWNlXG4gICAgICAudXBkYXRlV2lkZ2V0cyh7XG4gICAgICAgIC4uLnRoaXMuY3VycmVudFdpZGdldFRhYixcbiAgICAgICAgd2lkZ2V0czogdGhpcy5jdXJyZW50V2lkZ2V0VGFiLndpZGdldHMuZmlsdGVyKHdpZGdldCA9PiB3aWRnZXQua2V5ICE9PSB3aWRnZXRLZXkpLFxuICAgICAgfSlcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5jaGFuZ2VTYXZlZC5lbWl0KCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNsb3NlRXZlbnQod2lkZ2V0UmVzdWx0OiBCYXNpY0Nhc2VXaWRnZXQsIGV4aXN0aW5nV2lkZ2V0czogQ2FzZVdpZGdldFtdKTogdm9pZCB7XG4gICAgdGhpcy5pc1dpemFyZE9wZW4kLm5leHQoZmFsc2UpO1xuICAgIHRoaXMud2lkZ2V0V2l6YXJkU2VydmljZS5yZXNldFdpemFyZCgpO1xuXG4gICAgaWYgKCF3aWRnZXRSZXN1bHQpIHJldHVybjtcblxuICAgIHRoaXMud2lkZ2V0VGFiTWFuYWdlbWVudFNlcnZpY2VcbiAgICAgIC51cGRhdGVXaWRnZXRzKHtcbiAgICAgICAgY2FzZURlZmluaXRpb25OYW1lOiB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUsXG4gICAgICAgIGtleTogdGhpcy50YWJXaWRnZXRLZXksXG4gICAgICAgIHdpZGdldHM6ICEhd2lkZ2V0UmVzdWx0LmtleVxuICAgICAgICAgID8gZXhpc3RpbmdXaWRnZXRzLm1hcCgod2lkZ2V0OiBCYXNpY0Nhc2VXaWRnZXQpID0+XG4gICAgICAgICAgICAgIHdpZGdldC5rZXkgPT09IHdpZGdldFJlc3VsdC5rZXkgPyB3aWRnZXRSZXN1bHQgOiB3aWRnZXRcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgLi4uZXhpc3RpbmdXaWRnZXRzLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4ud2lkZ2V0UmVzdWx0LFxuICAgICAgICAgICAgICAgIGtleTogdGhpcy5rZXlHZW5lcmF0b3JTZXJ2aWNlLmdldFVuaXF1ZUtleSh3aWRnZXRSZXN1bHQudGl0bGUsIHRoaXMuX3VzZWRLZXlzKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICB9KVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNoYW5nZVNhdmVkLmVtaXQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uSXRlbXNSZW9yZGVyZWQod2lkZ2V0czogQ2FzZVdpZGdldFtdKTogdm9pZCB7XG4gICAgdGhpcy5kcmFnQW5kRHJvcERpc2FibGVkLnNldCh0cnVlKTtcblxuICAgIHRoaXMud2lkZ2V0VGFiTWFuYWdlbWVudFNlcnZpY2VcbiAgICAgIC51cGRhdGVXaWRnZXRzKHtcbiAgICAgICAgLi4udGhpcy5jdXJyZW50V2lkZ2V0VGFiLFxuICAgICAgICB3aWRnZXRzLFxuICAgICAgfSlcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5jaGFuZ2VTYXZlZC5lbWl0KCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlV2lkZ2V0KHRhYldpZGdldDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5kZWxldGVSb3dLZXkkLm5leHQodGFiV2lkZ2V0LmtleSk7XG4gICAgdGhpcy5kZWxldGVNb2RhbE9wZW4kLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIGdldFdpZHRoVHJhbnNsYXRpb25LZXkod2lkdGg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgc3dpdGNoICh3aWR0aCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gJ3dpZGdldFRhYk1hbmFnZW1lbnQud2lkdGgucXVhcnRlci50aXRsZSc7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiAnd2lkZ2V0VGFiTWFuYWdlbWVudC53aWR0aC5oYWxmLnRpdGxlJztcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgcmV0dXJuICd3aWRnZXRUYWJNYW5hZ2VtZW50LndpZHRoLnRocmVlUXVhcnRlcnMudGl0bGUnO1xuICAgICAgY2FzZSA0OlxuICAgICAgICByZXR1cm4gJ3dpZGdldFRhYk1hbmFnZW1lbnQud2lkdGguZnVsbFdpZHRoLnRpdGxlJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxuZy1jb250YWluZXJcbiAgKm5nSWY9XCJ7XG4gICAgaXNXaXphcmRPcGVuOiBpc1dpemFyZE9wZW4kIHwgYXN5bmMsXG4gICAgaXRlbXM6IGl0ZW1zJCB8IGFzeW5jXG4gIH0gYXMgb2JzXCJcbj5cbiAgPHZhbHRpbW8tY2FyYm9uLWxpc3RcbiAgICBbYWN0aW9uSXRlbXNdPVwiQUNUSU9OX0lURU1TXCJcbiAgICBbZmllbGRzXT1cIkZJRUxEU1wiXG4gICAgW2hlYWRlcl09XCJmYWxzZVwiXG4gICAgW2l0ZW1zXT1cIm9icy5pdGVtc1wiXG4gICAgW2RyYWdBbmREcm9wXT1cInRydWVcIlxuICAgIFtkcmFnQW5kRHJvcERpc2FibGVkXT1cImRyYWdBbmREcm9wRGlzYWJsZWQoKVwiXG4gICAgKGl0ZW1zUmVvcmRlcmVkKT1cIm9uSXRlbXNSZW9yZGVyZWQoJGV2ZW50KVwiXG4gICAgKHJvd0NsaWNrZWQpPVwiZWRpdFdpZGdldCgkZXZlbnQpXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgY2FyYm9uVG9vbGJhckNvbnRlbnQ+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYWRkV2lkZ2V0QnV0dG9uXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8dmFsdGltby1uby1yZXN1bHRzXG4gICAgICBbYWN0aW9uXT1cImFkZFdpZGdldEJ1dHRvblwiXG4gICAgICBbZGVzY3JpcHRpb25dPVwiJ3dpZGdldFRhYk1hbmFnZW1lbnQubGlzdC5ub1Jlc3VsdHMuZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlXCJcbiAgICAgIFt0aXRsZV09XCInd2lkZ2V0VGFiTWFuYWdlbWVudC5saXN0Lm5vUmVzdWx0cy50aXRsZScgfCB0cmFuc2xhdGVcIlxuICAgID48L3ZhbHRpbW8tbm8tcmVzdWx0cz5cbiAgPC92YWx0aW1vLWNhcmJvbi1saXN0PlxuXG4gIDxuZy10ZW1wbGF0ZSAjYWRkV2lkZ2V0QnV0dG9uPlxuICAgIDxidXR0b24gY2RzQnV0dG9uPVwicHJpbWFyeVwiIChjbGljayk9XCJvcGVuQWRkTW9kYWwoKVwiPlxuICAgICAge3sgJ3dpZGdldFRhYk1hbmFnZW1lbnQubGlzdC5hZGQnIHwgdHJhbnNsYXRlIH19XG5cbiAgICAgIDxzdmcgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiIGNkc0ljb249XCJhZGRcIiBzaXplPVwiMTZcIj48L3N2Zz5cbiAgICA8L2J1dHRvbj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8dmFsdGltby1kb3NzaWVyLW1hbmFnZW1lbnQtd2lkZ2V0LXdpemFyZFxuICAgIFtlZGl0TW9kZV09XCJpc0VkaXRNb2RlKClcIlxuICAgIFtvcGVuXT1cIm9icy5pc1dpemFyZE9wZW5cIlxuICAgIChjbG9zZUV2ZW50KT1cIm9uQ2xvc2VFdmVudCgkZXZlbnQsIG9icy5pdGVtcylcIlxuICA+PC92YWx0aW1vLWRvc3NpZXItbWFuYWdlbWVudC13aWRnZXQtd2l6YXJkPlxuXG4gIDx2YWx0aW1vLWNvbmZpcm1hdGlvbi1tb2RhbFxuICAgIGNvbmZpcm1CdXR0b25UZXh0VHJhbnNsYXRpb25LZXk9XCJpbnRlcmZhY2UuZGVsZXRlXCJcbiAgICBjb25maXJtQnV0dG9uVHlwZT1cImRhbmdlclwiXG4gICAgY29udGVudFRyYW5zbGF0aW9uS2V5PVwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHdpZGdldD9cIlxuICAgIFtvdXRwdXRPbkNvbmZpcm1dPVwiZGVsZXRlUm93S2V5JCB8IGFzeW5jXCJcbiAgICBbc2hvd01vZGFsU3ViamVjdCRdPVwiZGVsZXRlTW9kYWxPcGVuJFwiXG4gICAgdGl0bGVUcmFuc2xhdGlvbktleT1cImludGVyZmFjZS5kZWxldGVcIlxuICAgIChjb25maXJtRXZlbnQpPVwib25EZWxldGVDb25maXJtKCRldmVudClcIlxuICA+PC92YWx0aW1vLWNvbmZpcm1hdGlvbi1tb2RhbD5cbjwvbmctY29udGFpbmVyPlxuIl19
@@ -0,0 +1,190 @@
1
+ /*
2
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
3
+ *
4
+ * Licensed under EUPL, Version 1.2 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" basis,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { CommonModule } from '@angular/common';
17
+ import { ChangeDetectionStrategy, Component, computed, EventEmitter, Input, Output, signal, ViewChild, } from '@angular/core';
18
+ import { toObservable } from '@angular/core/rxjs-interop';
19
+ import { Edit16, Save16 } from '@carbon/icons';
20
+ import { TranslateModule } from '@ngx-translate/core';
21
+ import { CARBON_CONSTANTS, ConfirmationModalModule, EditorModule, } from '@valtimo/components';
22
+ import { ButtonModule, IconModule, NotificationService, } from 'carbon-components-angular';
23
+ import { BehaviorSubject, take } from 'rxjs';
24
+ import * as i0 from "@angular/core";
25
+ import * as i1 from "carbon-components-angular";
26
+ import * as i2 from "@ngx-translate/core";
27
+ import * as i3 from "../../../services";
28
+ import * as i4 from "@angular/common";
29
+ import * as i5 from "@valtimo/components";
30
+ export class DossierManagementWidgetsJsonEditorComponent {
31
+ set currentWidgetTab(value) {
32
+ if (!value)
33
+ return;
34
+ this._currentWidgetTab = value;
35
+ this.jsonModel.set({
36
+ value: JSON.stringify(value),
37
+ language: 'json',
38
+ });
39
+ }
40
+ constructor(iconService, notificationService, translateService, widgetJsonEditorService, widgetTabManagementService) {
41
+ this.iconService = iconService;
42
+ this.notificationService = notificationService;
43
+ this.translateService = translateService;
44
+ this.widgetJsonEditorService = widgetJsonEditorService;
45
+ this.widgetTabManagementService = widgetTabManagementService;
46
+ this.customModalLoaded = new EventEmitter();
47
+ this.canDeactivate = new EventEmitter();
48
+ this.pendingChangesUpdate = new EventEmitter();
49
+ this.changeSaved = new EventEmitter();
50
+ this.jsonModel = signal(null);
51
+ this.editActive = signal(false);
52
+ this.showPendingModal$ = toObservable(this.widgetJsonEditorService.showPendingModal);
53
+ this.showSaveConfirmation$ = new BehaviorSubject(false);
54
+ this._widgetConfig = signal(null);
55
+ this._editorInit = false;
56
+ this._pendingChanges = false;
57
+ this._jsonValid = signal(false);
58
+ this._jsonSchemaInvalid = signal(false);
59
+ this.saveButtonDisabled = computed(() => !this._jsonValid() || this._jsonSchemaInvalid() || !this._widgetConfig());
60
+ this.iconService.registerAll([Edit16, Save16]);
61
+ }
62
+ ngAfterViewInit() {
63
+ this.customModalLoaded.emit(this.pendingChangesModal);
64
+ }
65
+ downloadConfig() {
66
+ const dataString = 'data:text/json;charset=utf-8,' +
67
+ encodeURIComponent(JSON.stringify(this._currentWidgetTab, null, 2));
68
+ const downloadAnchorElement = document.getElementById('downloadAnchorElement');
69
+ if (!downloadAnchorElement) {
70
+ return;
71
+ }
72
+ downloadAnchorElement.setAttribute('href', dataString);
73
+ downloadAnchorElement.setAttribute('download', `${this._currentWidgetTab.caseDefinitionName}-widgets.json`);
74
+ downloadAnchorElement.click();
75
+ }
76
+ keepEditing() {
77
+ this.widgetJsonEditorService.showPendingModal.set(false);
78
+ this.showSaveConfirmation$.next(false);
79
+ this.canDeactivate.emit(false);
80
+ }
81
+ discardChanges() {
82
+ this.editActive.set(false);
83
+ this.jsonModel.update((model) => ({
84
+ ...model,
85
+ value: JSON.stringify(this._currentWidgetTab),
86
+ }));
87
+ this.widgetJsonEditorService.showPendingModal.set(false);
88
+ this.setPendingChanges(false);
89
+ this.canDeactivate.emit(true);
90
+ }
91
+ save() {
92
+ const config = this._widgetConfig();
93
+ if (!config)
94
+ return;
95
+ this.widgetTabManagementService
96
+ .updateWidgets(config)
97
+ .pipe(take(1))
98
+ .subscribe({
99
+ next: () => {
100
+ this.notificationService.showNotification({
101
+ type: 'success',
102
+ title: this.translateService.instant('interface.success'),
103
+ message: this.translateService.instant('widgetTabManagement.notification.success'),
104
+ showClose: true,
105
+ duration: CARBON_CONSTANTS.notificationDuration,
106
+ });
107
+ this.widgetJsonEditorService.showPendingModal.set(false);
108
+ this.editActive.set(false);
109
+ this.setPendingChanges(false);
110
+ this.changeSaved.emit();
111
+ this.canDeactivate.emit(true);
112
+ },
113
+ error: () => {
114
+ this.notificationService.showNotification({
115
+ type: 'error',
116
+ title: this.translateService.instant('interface.error'),
117
+ message: this.translateService.instant('widgetTabManagement.notification.error'),
118
+ showClose: true,
119
+ duration: CARBON_CONSTANTS.notificationDuration,
120
+ });
121
+ },
122
+ });
123
+ }
124
+ onCancelClick() {
125
+ if (!this._widgetConfig() || !this._pendingChanges) {
126
+ this.editActive.set(false);
127
+ return;
128
+ }
129
+ this.widgetJsonEditorService.showPendingModal.set(true);
130
+ }
131
+ onEditClick() {
132
+ this.editActive.set(true);
133
+ }
134
+ onSaveClick() {
135
+ this.showSaveConfirmation$.next(true);
136
+ }
137
+ onValidEvent(valid) {
138
+ this._jsonValid.set(valid);
139
+ }
140
+ onValueChangeEvent(value) {
141
+ if (!this._editorInit) {
142
+ this._editorInit = true;
143
+ return;
144
+ }
145
+ this.setPendingChanges(true);
146
+ const widgetConfig = JSON.parse(value);
147
+ const editedWidgetKeys = widgetConfig.widgets.map((widget) => widget.key);
148
+ this._jsonSchemaInvalid.set(widgetConfig.key !== this._currentWidgetTab.key ||
149
+ widgetConfig.caseDefinitionName !== this._currentWidgetTab.caseDefinitionName ||
150
+ new Set(editedWidgetKeys).size !== editedWidgetKeys.length);
151
+ if (!this._jsonValid() || !this.editActive())
152
+ return;
153
+ this._widgetConfig.set(JSON.parse(value));
154
+ }
155
+ setPendingChanges(changes) {
156
+ this._pendingChanges = changes;
157
+ this.pendingChangesUpdate.emit(changes);
158
+ if (changes)
159
+ return;
160
+ this._widgetConfig.set(null);
161
+ this._editorInit = false;
162
+ }
163
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DossierManagementWidgetsJsonEditorComponent, deps: [{ token: i1.IconService }, { token: i1.NotificationService }, { token: i2.TranslateService }, { token: i3.WidgetJsonEditorService }, { token: i3.WidgetTabManagementService }], target: i0.ɵɵFactoryTarget.Component }); }
164
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.3", type: DossierManagementWidgetsJsonEditorComponent, isStandalone: true, selector: "valtimo-dossier-management-widgets-json-editor", inputs: { currentWidgetTab: "currentWidgetTab" }, outputs: { customModalLoaded: "customModalLoaded", canDeactivate: "canDeactivate", pendingChangesUpdate: "pendingChangesUpdate", changeSaved: "changeSaved" }, providers: [NotificationService], viewQueries: [{ propertyName: "pendingChangesModal", first: true, predicate: ["pendingChangesModal"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"cds--toolbar-content\">\n @if (!editActive()) {\n <button cdsButton=\"ghost\" (click)=\"downloadConfig()\">\n {{ 'interface.download' | translate }}\n\n <svg cdsIcon=\"download\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n\n <button cdsButton=\"primary\" (click)=\"onEditClick()\">\n {{ 'interface.edit' | translate }}\n\n <svg cdsIcon=\"edit\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n } @else {\n <button cdsButton=\"secondary\" (click)=\"onCancelClick()\">\n {{ 'interface.cancel' | translate }}\n\n <svg cdsIcon=\"close\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n\n <button cdsButton=\"primary\" [disabled]=\"saveButtonDisabled()\" (click)=\"onSaveClick()\">\n {{ 'interface.save' | translate }}\n\n <svg cdsIcon=\"save\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n }\n</div>\n\n<valtimo-editor\n *ngIf=\"jsonModel()\"\n [model]=\"jsonModel()\"\n [disabled]=\"!editActive()\"\n [fitPage]=\"true\"\n [fitPageExtraSpace]=\"96\"\n (validEvent)=\"onValidEvent($event)\"\n (valueChangeEvent)=\"onValueChangeEvent($event)\"\n></valtimo-editor>\n\n<a id=\"downloadAnchorElement\" style=\"display: none\"></a>\n\n<valtimo-confirmation-modal\n [showModalSubject$]=\"showSaveConfirmation$\"\n cancelButtonTextTranslationKey=\"interface.cancel\"\n confirmButtonTextTranslationKey=\"interface.save\"\n contentTranslationKey=\"widgetTabManagement.saveModalContent\"\n titleTranslationKey=\"interface.save\"\n (cancelEvent)=\"keepEditing()\"\n (confirmEvent)=\"save()\"\n></valtimo-confirmation-modal>\n\n<valtimo-confirmation-modal\n #pendingChangesModal\n [showModalSubject$]=\"showPendingModal$\"\n cancelButtonTextTranslationKey=\"interface.pendingChanges.keepEditing\"\n cancelButtonType=\"ghost\"\n confirmButtonTextTranslationKey=\"interface.discard\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"widgetTabManagement.cancelModal.content\"\n optionalButtonTextTranslationKey=\"interface.save\"\n optionalButtonType=\"secondary\"\n titleTranslationKey=\"widgetTabManagement.cancelModal.title\"\n showOptionalButton=\"true\"\n spacerAfterCancelButton=\"true\"\n (cancelEvent)=\"keepEditing()\"\n (confirmEvent)=\"discardChanges()\"\n (optionalEvent)=\"save()\"\n></valtimo-confirmation-modal>\n", styles: [".cds--toolbar-content{background:var(--cds-layer)}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: EditorModule }, { kind: "component", type: i5.EditorComponent, selector: "valtimo-editor", inputs: ["editorOptions", "model", "disabled", "formatOnLoad", "widthPx", "heightPx", "heightStyle", "jsonSchema", "fitPage", "fitPageExtraSpace"], outputs: ["validEvent", "valueChangeEvent"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i1.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: ConfirmationModalModule }, { kind: "component", type: i5.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
165
+ }
166
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DossierManagementWidgetsJsonEditorComponent, decorators: [{
167
+ type: Component,
168
+ args: [{ selector: 'valtimo-dossier-management-widgets-json-editor', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
169
+ CommonModule,
170
+ TranslateModule,
171
+ EditorModule,
172
+ ButtonModule,
173
+ IconModule,
174
+ ConfirmationModalModule,
175
+ ], providers: [NotificationService], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"cds--toolbar-content\">\n @if (!editActive()) {\n <button cdsButton=\"ghost\" (click)=\"downloadConfig()\">\n {{ 'interface.download' | translate }}\n\n <svg cdsIcon=\"download\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n\n <button cdsButton=\"primary\" (click)=\"onEditClick()\">\n {{ 'interface.edit' | translate }}\n\n <svg cdsIcon=\"edit\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n } @else {\n <button cdsButton=\"secondary\" (click)=\"onCancelClick()\">\n {{ 'interface.cancel' | translate }}\n\n <svg cdsIcon=\"close\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n\n <button cdsButton=\"primary\" [disabled]=\"saveButtonDisabled()\" (click)=\"onSaveClick()\">\n {{ 'interface.save' | translate }}\n\n <svg cdsIcon=\"save\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n }\n</div>\n\n<valtimo-editor\n *ngIf=\"jsonModel()\"\n [model]=\"jsonModel()\"\n [disabled]=\"!editActive()\"\n [fitPage]=\"true\"\n [fitPageExtraSpace]=\"96\"\n (validEvent)=\"onValidEvent($event)\"\n (valueChangeEvent)=\"onValueChangeEvent($event)\"\n></valtimo-editor>\n\n<a id=\"downloadAnchorElement\" style=\"display: none\"></a>\n\n<valtimo-confirmation-modal\n [showModalSubject$]=\"showSaveConfirmation$\"\n cancelButtonTextTranslationKey=\"interface.cancel\"\n confirmButtonTextTranslationKey=\"interface.save\"\n contentTranslationKey=\"widgetTabManagement.saveModalContent\"\n titleTranslationKey=\"interface.save\"\n (cancelEvent)=\"keepEditing()\"\n (confirmEvent)=\"save()\"\n></valtimo-confirmation-modal>\n\n<valtimo-confirmation-modal\n #pendingChangesModal\n [showModalSubject$]=\"showPendingModal$\"\n cancelButtonTextTranslationKey=\"interface.pendingChanges.keepEditing\"\n cancelButtonType=\"ghost\"\n confirmButtonTextTranslationKey=\"interface.discard\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"widgetTabManagement.cancelModal.content\"\n optionalButtonTextTranslationKey=\"interface.save\"\n optionalButtonType=\"secondary\"\n titleTranslationKey=\"widgetTabManagement.cancelModal.title\"\n showOptionalButton=\"true\"\n spacerAfterCancelButton=\"true\"\n (cancelEvent)=\"keepEditing()\"\n (confirmEvent)=\"discardChanges()\"\n (optionalEvent)=\"save()\"\n></valtimo-confirmation-modal>\n", styles: [".cds--toolbar-content{background:var(--cds-layer)}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
176
+ }], ctorParameters: () => [{ type: i1.IconService }, { type: i1.NotificationService }, { type: i2.TranslateService }, { type: i3.WidgetJsonEditorService }, { type: i3.WidgetTabManagementService }], propDecorators: { pendingChangesModal: [{
177
+ type: ViewChild,
178
+ args: ['pendingChangesModal']
179
+ }], currentWidgetTab: [{
180
+ type: Input
181
+ }], customModalLoaded: [{
182
+ type: Output
183
+ }], canDeactivate: [{
184
+ type: Output
185
+ }], pendingChangesUpdate: [{
186
+ type: Output
187
+ }], changeSaved: [{
188
+ type: Output
189
+ }] } });
190
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1tYW5hZ2VtZW50LXdpZGdldHMtanNvbi1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyLW1hbmFnZW1lbnQvc3JjL2xpYi9jb21wb25lbnRzL2Rvc3NpZXItbWFuYWdlbWVudC13aWRnZXQtdGFiL2pzb24tZWRpdG9yL2Rvc3NpZXItbWFuYWdlbWVudC13aWRnZXRzLWpzb24tZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci1tYW5hZ2VtZW50L3NyYy9saWIvY29tcG9uZW50cy9kb3NzaWVyLW1hbmFnZW1lbnQtd2lkZ2V0LXRhYi9qc29uLWVkaXRvci9kb3NzaWVyLW1hbmFnZW1lbnQtd2lkZ2V0cy1qc29uLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBRU4sTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDeEQsT0FBTyxFQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDN0MsT0FBTyxFQUFDLGVBQWUsRUFBbUIsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQ0wsZ0JBQWdCLEVBRWhCLHVCQUF1QixFQUV2QixZQUFZLEdBQ2IsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQ0wsWUFBWSxFQUNaLFVBQVUsRUFFVixt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ZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFNpZ25hbCxcbiAgc2lnbmFsLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0b09ic2VydmFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7RWRpdDE2LCBTYXZlMTZ9IGZyb20gJ0BjYXJib24vaWNvbnMnO1xuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ0FSQk9OX0NPTlNUQU5UUyxcbiAgQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQsXG4gIENvbmZpcm1hdGlvbk1vZGFsTW9kdWxlLFxuICBFZGl0b3JNb2RlbCxcbiAgRWRpdG9yTW9kdWxlLFxufSBmcm9tICdAdmFsdGltby9jb21wb25lbnRzJztcbmltcG9ydCB7QmFzaWNDYXNlV2lkZ2V0LCBDYXNlV2lkZ2V0c1Jlc30gZnJvbSAnQHZhbHRpbW8vZG9zc2llcic7XG5pbXBvcnQge1xuICBCdXR0b25Nb2R1bGUsXG4gIEljb25Nb2R1bGUsXG4gIEljb25TZXJ2aWNlLFxuICBOb3RpZmljYXRpb25TZXJ2aWNlLFxufSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCB0YWtlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7V2lkZ2V0SnNvbkVkaXRvclNlcnZpY2UsIFdpZGdldFRhYk1hbmFnZW1lbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZG9zc2llci1tYW5hZ2VtZW50LXdpZGdldHMtanNvbi1lZGl0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vZG9zc2llci1tYW5hZ2VtZW50LXdpZGdldHMtanNvbi1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZG9zc2llci1tYW5hZ2VtZW50LXdpZGdldHMtanNvbi1lZGl0b3IuY29tcG9uZW50LnNjc3MnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgRWRpdG9yTW9kdWxlLFxuICAgIEJ1dHRvbk1vZHVsZSxcbiAgICBJY29uTW9kdWxlLFxuICAgIENvbmZpcm1hdGlvbk1vZGFsTW9kdWxlLFxuICBdLFxuICBwcm92aWRlcnM6IFtOb3RpZmljYXRpb25TZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgRG9zc2llck1hbmFnZW1lbnRXaWRnZXRzSnNvbkVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBAVmlld0NoaWxkKCdwZW5kaW5nQ2hhbmdlc01vZGFsJykgcHVibGljIHBlbmRpbmdDaGFuZ2VzTW9kYWw6IENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50O1xuXG4gIHByaXZhdGUgX2N1cnJlbnRXaWRnZXRUYWI6IENhc2VXaWRnZXRzUmVzO1xuICBASW5wdXQoKSBwdWJsaWMgc2V0IGN1cnJlbnRXaWRnZXRUYWIodmFsdWU6IENhc2VXaWRnZXRzUmVzKSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuICAgIHRoaXMuX2N1cnJlbnRXaWRnZXRUYWIgPSB2YWx1ZTtcbiAgICB0aGlzLmpzb25Nb2RlbC5zZXQoe1xuICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHZhbHVlKSxcbiAgICAgIGxhbmd1YWdlOiAnanNvbicsXG4gICAgfSk7XG4gIH1cblxuICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IGN1c3RvbU1vZGFsTG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudD4oKTtcbiAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBjYW5EZWFjdGl2YXRlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IHBlbmRpbmdDaGFuZ2VzVXBkYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IGNoYW5nZVNhdmVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHB1YmxpYyByZWFkb25seSBqc29uTW9kZWwgPSBzaWduYWw8RWRpdG9yTW9kZWwgfCBudWxsPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IGVkaXRBY3RpdmUgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHB1YmxpYyByZWFkb25seSBzaG93UGVuZGluZ01vZGFsJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRvT2JzZXJ2YWJsZShcbiAgICB0aGlzLndpZGdldEpzb25FZGl0b3JTZXJ2aWNlLnNob3dQZW5kaW5nTW9kYWxcbiAgKTtcbiAgcHVibGljIHJlYWRvbmx5IHNob3dTYXZlQ29uZmlybWF0aW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3dpZGdldENvbmZpZyA9IHNpZ25hbDxDYXNlV2lkZ2V0c1JlcyB8IG51bGw+KG51bGwpO1xuXG4gIHByaXZhdGUgX2VkaXRvckluaXQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfcGVuZGluZ0NoYW5nZXMgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfanNvblZhbGlkID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfanNvblNjaGVtYUludmFsaWQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgc2F2ZUJ1dHRvbkRpc2FibGVkOiBTaWduYWw8Ym9vbGVhbj4gPSBjb21wdXRlZChcbiAgICAoKSA9PiAhdGhpcy5fanNvblZhbGlkKCkgfHwgdGhpcy5fanNvblNjaGVtYUludmFsaWQoKSB8fCAhdGhpcy5fd2lkZ2V0Q29uZmlnKClcbiAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGljb25TZXJ2aWNlOiBJY29uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgd2lkZ2V0SnNvbkVkaXRvclNlcnZpY2U6IFdpZGdldEpzb25FZGl0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgd2lkZ2V0VGFiTWFuYWdlbWVudFNlcnZpY2U6IFdpZGdldFRhYk1hbmFnZW1lbnRTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuaWNvblNlcnZpY2UucmVnaXN0ZXJBbGwoW0VkaXQxNiwgU2F2ZTE2XSk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY3VzdG9tTW9kYWxMb2FkZWQuZW1pdCh0aGlzLnBlbmRpbmdDaGFuZ2VzTW9kYWwpO1xuICB9XG5cbiAgcHVibGljIGRvd25sb2FkQ29uZmlnKCk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGFTdHJpbmcgPVxuICAgICAgJ2RhdGE6dGV4dC9qc29uO2NoYXJzZXQ9dXRmLTgsJyArXG4gICAgICBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkodGhpcy5fY3VycmVudFdpZGdldFRhYiwgbnVsbCwgMikpO1xuICAgIGNvbnN0IGRvd25sb2FkQW5jaG9yRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb3dubG9hZEFuY2hvckVsZW1lbnQnKTtcbiAgICBpZiAoIWRvd25sb2FkQW5jaG9yRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRvd25sb2FkQW5jaG9yRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBkYXRhU3RyaW5nKTtcbiAgICBkb3dubG9hZEFuY2hvckVsZW1lbnQuc2V0QXR0cmlidXRlKFxuICAgICAgJ2Rvd25sb2FkJyxcbiAgICAgIGAke3RoaXMuX2N1cnJlbnRXaWRnZXRUYWIuY2FzZURlZmluaXRpb25OYW1lfS13aWRnZXRzLmpzb25gXG4gICAgKTtcbiAgICBkb3dubG9hZEFuY2hvckVsZW1lbnQuY2xpY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBrZWVwRWRpdGluZygpOiB2b2lkIHtcbiAgICB0aGlzLndpZGdldEpzb25FZGl0b3JTZXJ2aWNlLnNob3dQZW5kaW5nTW9kYWwuc2V0KGZhbHNlKTtcbiAgICB0aGlzLnNob3dTYXZlQ29uZmlybWF0aW9uJC5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLmNhbkRlYWN0aXZhdGUuZW1pdChmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgZGlzY2FyZENoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0QWN0aXZlLnNldChmYWxzZSk7XG4gICAgdGhpcy5qc29uTW9kZWwudXBkYXRlKChtb2RlbDogRWRpdG9yTW9kZWwgfCBudWxsKSA9PiAoe1xuICAgICAgLi4ubW9kZWwsXG4gICAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkodGhpcy5fY3VycmVudFdpZGdldFRhYiksXG4gICAgfSkpO1xuICAgIHRoaXMud2lkZ2V0SnNvbkVkaXRvclNlcnZpY2Uuc2hvd1BlbmRpbmdNb2RhbC5zZXQoZmFsc2UpO1xuICAgIHRoaXMuc2V0UGVuZGluZ0NoYW5nZXMoZmFsc2UpO1xuICAgIHRoaXMuY2FuRGVhY3RpdmF0ZS5lbWl0KHRydWUpO1xuICB9XG5cbiAgcHVibGljIHNhdmUoKTogdm9pZCB7XG4gICAgY29uc3QgY29uZmlnOiBDYXNlV2lkZ2V0c1JlcyB8IG51bGwgPSB0aGlzLl93aWRnZXRDb25maWcoKTtcblxuICAgIGlmICghY29uZmlnKSByZXR1cm47XG5cbiAgICB0aGlzLndpZGdldFRhYk1hbmFnZW1lbnRTZXJ2aWNlXG4gICAgICAudXBkYXRlV2lkZ2V0cyhjb25maWcpXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvd05vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgICAgICB0aXRsZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2ludGVyZmFjZS5zdWNjZXNzJyksXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnd2lkZ2V0VGFiTWFuYWdlbWVudC5ub3RpZmljYXRpb24uc3VjY2VzcycpLFxuICAgICAgICAgICAgc2hvd0Nsb3NlOiB0cnVlLFxuICAgICAgICAgICAgZHVyYXRpb246IENBUkJPTl9DT05TVEFOVFMubm90aWZpY2F0aW9uRHVyYXRpb24sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy53aWRnZXRKc29uRWRpdG9yU2VydmljZS5zaG93UGVuZGluZ01vZGFsLnNldChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5lZGl0QWN0aXZlLnNldChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5zZXRQZW5kaW5nQ2hhbmdlcyhmYWxzZSk7XG4gICAgICAgICAgdGhpcy5jaGFuZ2VTYXZlZC5lbWl0KCk7XG4gICAgICAgICAgdGhpcy5jYW5EZWFjdGl2YXRlLmVtaXQodHJ1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnNob3dOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnaW50ZXJmYWNlLmVycm9yJyksXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnd2lkZ2V0VGFiTWFuYWdlbWVudC5ub3RpZmljYXRpb24uZXJyb3InKSxcbiAgICAgICAgICAgIHNob3dDbG9zZTogdHJ1ZSxcbiAgICAgICAgICAgIGR1cmF0aW9uOiBDQVJCT05fQ09OU1RBTlRTLm5vdGlmaWNhdGlvbkR1cmF0aW9uLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25DYW5jZWxDbGljaygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3dpZGdldENvbmZpZygpIHx8ICF0aGlzLl9wZW5kaW5nQ2hhbmdlcykge1xuICAgICAgdGhpcy5lZGl0QWN0aXZlLnNldChmYWxzZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy53aWRnZXRKc29uRWRpdG9yU2VydmljZS5zaG93UGVuZGluZ01vZGFsLnNldCh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkVkaXRDbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRBY3RpdmUuc2V0KHRydWUpO1xuICB9XG5cbiAgcHVibGljIG9uU2F2ZUNsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd1NhdmVDb25maXJtYXRpb24kLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgb25WYWxpZEV2ZW50KHZhbGlkOiBib29sZWFuKSB7XG4gICAgdGhpcy5fanNvblZhbGlkLnNldCh2YWxpZCk7XG4gIH1cblxuICBwdWJsaWMgb25WYWx1ZUNoYW5nZUV2ZW50KHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuX2VkaXRvckluaXQpIHtcbiAgICAgIHRoaXMuX2VkaXRvckluaXQgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0UGVuZGluZ0NoYW5nZXModHJ1ZSk7XG5cbiAgICBjb25zdCB3aWRnZXRDb25maWc6IENhc2VXaWRnZXRzUmVzID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG4gICAgY29uc3QgZWRpdGVkV2lkZ2V0S2V5czogc3RyaW5nW10gPSB3aWRnZXRDb25maWcud2lkZ2V0cy5tYXAoXG4gICAgICAod2lkZ2V0OiBCYXNpY0Nhc2VXaWRnZXQpID0+IHdpZGdldC5rZXlcbiAgICApO1xuXG4gICAgdGhpcy5fanNvblNjaGVtYUludmFsaWQuc2V0KFxuICAgICAgd2lkZ2V0Q29uZmlnLmtleSAhPT0gdGhpcy5fY3VycmVudFdpZGdldFRhYi5rZXkgfHxcbiAgICAgICAgd2lkZ2V0Q29uZmlnLmNhc2VEZWZpbml0aW9uTmFtZSAhPT0gdGhpcy5fY3VycmVudFdpZGdldFRhYi5jYXNlRGVmaW5pdGlvbk5hbWUgfHxcbiAgICAgICAgbmV3IFNldChlZGl0ZWRXaWRnZXRLZXlzKS5zaXplICE9PSBlZGl0ZWRXaWRnZXRLZXlzLmxlbmd0aFxuICAgICk7XG5cbiAgICBpZiAoIXRoaXMuX2pzb25WYWxpZCgpIHx8ICF0aGlzLmVkaXRBY3RpdmUoKSkgcmV0dXJuO1xuXG4gICAgdGhpcy5fd2lkZ2V0Q29uZmlnLnNldChKU09OLnBhcnNlKHZhbHVlKSk7XG4gIH1cblxuICBwcml2YXRlIHNldFBlbmRpbmdDaGFuZ2VzKGNoYW5nZXM6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl9wZW5kaW5nQ2hhbmdlcyA9IGNoYW5nZXM7XG4gICAgdGhpcy5wZW5kaW5nQ2hhbmdlc1VwZGF0ZS5lbWl0KGNoYW5nZXMpO1xuXG4gICAgaWYgKGNoYW5nZXMpIHJldHVybjtcblxuICAgIHRoaXMuX3dpZGdldENvbmZpZy5zZXQobnVsbCk7XG4gICAgdGhpcy5fZWRpdG9ySW5pdCA9IGZhbHNlO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxkaXYgY2xhc3M9XCJjZHMtLXRvb2xiYXItY29udGVudFwiPlxuICBAaWYgKCFlZGl0QWN0aXZlKCkpIHtcbiAgICA8YnV0dG9uIGNkc0J1dHRvbj1cImdob3N0XCIgKGNsaWNrKT1cImRvd25sb2FkQ29uZmlnKClcIj5cbiAgICAgIHt7ICdpbnRlcmZhY2UuZG93bmxvYWQnIHwgdHJhbnNsYXRlIH19XG5cbiAgICAgIDxzdmcgY2RzSWNvbj1cImRvd25sb2FkXCIgc2l6ZT1cIjE2XCIgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiPjwvc3ZnPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvbiBjZHNCdXR0b249XCJwcmltYXJ5XCIgKGNsaWNrKT1cIm9uRWRpdENsaWNrKClcIj5cbiAgICAgIHt7ICdpbnRlcmZhY2UuZWRpdCcgfCB0cmFuc2xhdGUgfX1cblxuICAgICAgPHN2ZyBjZHNJY29uPVwiZWRpdFwiIHNpemU9XCIxNlwiIGNsYXNzPVwiY2RzLS1idG5fX2ljb25cIj48L3N2Zz5cbiAgICA8L2J1dHRvbj5cbiAgfSBAZWxzZSB7XG4gICAgPGJ1dHRvbiBjZHNCdXR0b249XCJzZWNvbmRhcnlcIiAoY2xpY2spPVwib25DYW5jZWxDbGljaygpXCI+XG4gICAgICB7eyAnaW50ZXJmYWNlLmNhbmNlbCcgfCB0cmFuc2xhdGUgfX1cblxuICAgICAgPHN2ZyBjZHNJY29uPVwiY2xvc2VcIiBzaXplPVwiMTZcIiBjbGFzcz1cImNkcy0tYnRuX19pY29uXCI+PC9zdmc+XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uIGNkc0J1dHRvbj1cInByaW1hcnlcIiBbZGlzYWJsZWRdPVwic2F2ZUJ1dHRvbkRpc2FibGVkKClcIiAoY2xpY2spPVwib25TYXZlQ2xpY2soKVwiPlxuICAgICAge3sgJ2ludGVyZmFjZS5zYXZlJyB8IHRyYW5zbGF0ZSB9fVxuXG4gICAgICA8c3ZnIGNkc0ljb249XCJzYXZlXCIgc2l6ZT1cIjE2XCIgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiPjwvc3ZnPlxuICAgIDwvYnV0dG9uPlxuICB9XG48L2Rpdj5cblxuPHZhbHRpbW8tZWRpdG9yXG4gICpuZ0lmPVwianNvbk1vZGVsKClcIlxuICBbbW9kZWxdPVwianNvbk1vZGVsKClcIlxuICBbZGlzYWJsZWRdPVwiIWVkaXRBY3RpdmUoKVwiXG4gIFtmaXRQYWdlXT1cInRydWVcIlxuICBbZml0UGFnZUV4dHJhU3BhY2VdPVwiOTZcIlxuICAodmFsaWRFdmVudCk9XCJvblZhbGlkRXZlbnQoJGV2ZW50KVwiXG4gICh2YWx1ZUNoYW5nZUV2ZW50KT1cIm9uVmFsdWVDaGFuZ2VFdmVudCgkZXZlbnQpXCJcbj48L3ZhbHRpbW8tZWRpdG9yPlxuXG48YSBpZD1cImRvd25sb2FkQW5jaG9yRWxlbWVudFwiIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiPjwvYT5cblxuPHZhbHRpbW8tY29uZmlybWF0aW9uLW1vZGFsXG4gIFtzaG93TW9kYWxTdWJqZWN0JF09XCJzaG93U2F2ZUNvbmZpcm1hdGlvbiRcIlxuICBjYW5jZWxCdXR0b25UZXh0VHJhbnNsYXRpb25LZXk9XCJpbnRlcmZhY2UuY2FuY2VsXCJcbiAgY29uZmlybUJ1dHRvblRleHRUcmFuc2xhdGlvbktleT1cImludGVyZmFjZS5zYXZlXCJcbiAgY29udGVudFRyYW5zbGF0aW9uS2V5PVwid2lkZ2V0VGFiTWFuYWdlbWVudC5zYXZlTW9kYWxDb250ZW50XCJcbiAgdGl0bGVUcmFuc2xhdGlvbktleT1cImludGVyZmFjZS5zYXZlXCJcbiAgKGNhbmNlbEV2ZW50KT1cImtlZXBFZGl0aW5nKClcIlxuICAoY29uZmlybUV2ZW50KT1cInNhdmUoKVwiXG4+PC92YWx0aW1vLWNvbmZpcm1hdGlvbi1tb2RhbD5cblxuPHZhbHRpbW8tY29uZmlybWF0aW9uLW1vZGFsXG4gICNwZW5kaW5nQ2hhbmdlc01vZGFsXG4gIFtzaG93TW9kYWxTdWJqZWN0JF09XCJzaG93UGVuZGluZ01vZGFsJFwiXG4gIGNhbmNlbEJ1dHRvblRleHRUcmFuc2xhdGlvbktleT1cImludGVyZmFjZS5wZW5kaW5nQ2hhbmdlcy5rZWVwRWRpdGluZ1wiXG4gIGNhbmNlbEJ1dHRvblR5cGU9XCJnaG9zdFwiXG4gIGNvbmZpcm1CdXR0b25UZXh0VHJhbnNsYXRpb25LZXk9XCJpbnRlcmZhY2UuZGlzY2FyZFwiXG4gIGNvbmZpcm1CdXR0b25UeXBlPVwiZGFuZ2VyXCJcbiAgY29udGVudFRyYW5zbGF0aW9uS2V5PVwid2lkZ2V0VGFiTWFuYWdlbWVudC5jYW5jZWxNb2RhbC5jb250ZW50XCJcbiAgb3B0aW9uYWxCdXR0b25UZXh0VHJhbnNsYXRpb25LZXk9XCJpbnRlcmZhY2Uuc2F2ZVwiXG4gIG9wdGlvbmFsQnV0dG9uVHlwZT1cInNlY29uZGFyeVwiXG4gIHRpdGxlVHJhbnNsYXRpb25LZXk9XCJ3aWRnZXRUYWJNYW5hZ2VtZW50LmNhbmNlbE1vZGFsLnRpdGxlXCJcbiAgc2hvd09wdGlvbmFsQnV0dG9uPVwidHJ1ZVwiXG4gIHNwYWNlckFmdGVyQ2FuY2VsQnV0dG9uPVwidHJ1ZVwiXG4gIChjYW5jZWxFdmVudCk9XCJrZWVwRWRpdGluZygpXCJcbiAgKGNvbmZpcm1FdmVudCk9XCJkaXNjYXJkQ2hhbmdlcygpXCJcbiAgKG9wdGlvbmFsRXZlbnQpPVwic2F2ZSgpXCJcbj48L3ZhbHRpbW8tY29uZmlybWF0aW9uLW1vZGFsPlxuIl19