@deeksha2309/sunbird-collection-editor 8.0.7

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 (204) hide show
  1. package/README.md +24 -0
  2. package/esm2022/lib/collection-editor-cursor.service.mjs +3 -0
  3. package/esm2022/lib/collection-editor-library.component.mjs +16 -0
  4. package/esm2022/lib/collection-editor-library.module.mjs +137 -0
  5. package/esm2022/lib/components/answer/answer.component.mjs +43 -0
  6. package/esm2022/lib/components/asset-browser/asset-browser.component.mjs +325 -0
  7. package/esm2022/lib/components/asset-browser/asset-browser.data.mjs +53 -0
  8. package/esm2022/lib/components/assign-page-number/assign-page-number.component.mjs +191 -0
  9. package/esm2022/lib/components/ckeditor-tool/ckeditor-tool.component.mjs +895 -0
  10. package/esm2022/lib/components/collection-icon/collection-icon.component.mjs +43 -0
  11. package/esm2022/lib/components/contentplayer-page/contentplayer-page.component.mjs +351 -0
  12. package/esm2022/lib/components/csv-upload/csv-upload.component.mjs +178 -0
  13. package/esm2022/lib/components/dialcode/dialcode.component.mjs +182 -0
  14. package/esm2022/lib/components/editor/editor.component.mjs +1125 -0
  15. package/esm2022/lib/components/fancy-tree/fancy-tree.component.mjs +529 -0
  16. package/esm2022/lib/components/header/header.component.mjs +123 -0
  17. package/esm2022/lib/components/library/library.component.mjs +242 -0
  18. package/esm2022/lib/components/library-filter/library-filter.component.mjs +149 -0
  19. package/esm2022/lib/components/library-list/library-list.component.mjs +92 -0
  20. package/esm2022/lib/components/library-player/library-player.component.mjs +62 -0
  21. package/esm2022/lib/components/manage-collaborator/manage-collaborator.component.mjs +256 -0
  22. package/esm2022/lib/components/meta-form/meta-form.component.mjs +377 -0
  23. package/esm2022/lib/components/options/options.component.mjs +144 -0
  24. package/esm2022/lib/components/plain-tree/plain-tree.component.mjs +125 -0
  25. package/esm2022/lib/components/progress-status/progress-status.component.mjs +46 -0
  26. package/esm2022/lib/components/publish-checklist/publish-checklist.component.mjs +67 -0
  27. package/esm2022/lib/components/quality-params-modal/quality-params-modal.component.mjs +52 -0
  28. package/esm2022/lib/components/question/question.component.mjs +1360 -0
  29. package/esm2022/lib/components/quml-player/quml-player.component.mjs +73 -0
  30. package/esm2022/lib/components/qumlplayer-page/qumlplayer-page.component.mjs +84 -0
  31. package/esm2022/lib/components/resource-reorder/resource-reorder.component.mjs +143 -0
  32. package/esm2022/lib/components/skeleton-loader/skeleton-loader.component.mjs +26 -0
  33. package/esm2022/lib/components/template/template.component.mjs +42 -0
  34. package/esm2022/lib/components/term-and-condition/term-and-condition.component.mjs +68 -0
  35. package/esm2022/lib/directives/telemetry-interact/telemetry-interact.directive.mjs +33 -0
  36. package/esm2022/lib/interfaces/McqForm.mjs +29 -0
  37. package/esm2022/lib/interfaces/editor.mjs +2 -0
  38. package/esm2022/lib/interfaces/framework.mjs +2 -0
  39. package/esm2022/lib/interfaces/httpOptions.mjs +2 -0
  40. package/esm2022/lib/interfaces/requestParam.mjs +2 -0
  41. package/esm2022/lib/interfaces/serverResponse.mjs +2 -0
  42. package/esm2022/lib/pipes/sanitize-html.pipe.mjs +20 -0
  43. package/esm2022/lib/services/config/category.config.json +8 -0
  44. package/esm2022/lib/services/config/config.service.mjs +27 -0
  45. package/esm2022/lib/services/config/editor.config.json +31 -0
  46. package/esm2022/lib/services/config/label.config.json +314 -0
  47. package/esm2022/lib/services/config/player.config.json +96 -0
  48. package/esm2022/lib/services/config/url.config.json +69 -0
  49. package/esm2022/lib/services/data/data.service.mjs +192 -0
  50. package/esm2022/lib/services/dialcode/dialcode.service.mjs +309 -0
  51. package/esm2022/lib/services/editor/editor.service.mjs +682 -0
  52. package/esm2022/lib/services/framework/framework.service.mjs +106 -0
  53. package/esm2022/lib/services/helper/helper.service.mjs +160 -0
  54. package/esm2022/lib/services/player/player.service.mjs +99 -0
  55. package/esm2022/lib/services/public-data/public-data.service.mjs +21 -0
  56. package/esm2022/lib/services/question/question.service.mjs +167 -0
  57. package/esm2022/lib/services/telemetry/telemetry.service.mjs +120 -0
  58. package/esm2022/lib/services/toaster/toaster.service.mjs +105 -0
  59. package/esm2022/lib/services/tree/tree.service.mjs +284 -0
  60. package/esm2022/project-sunbird-sunbird-collection-editor.mjs +5 -0
  61. package/esm2022/public-api.mjs +4 -0
  62. package/fesm2022/project-sunbird-sunbird-collection-editor.mjs +10138 -0
  63. package/fesm2022/project-sunbird-sunbird-collection-editor.mjs.map +1 -0
  64. package/index.d.ts +6 -0
  65. package/lib/assets/.gitkeep +0 -0
  66. package/lib/assets/images/MCQ.png +0 -0
  67. package/lib/assets/images/Spin.gif +0 -0
  68. package/lib/assets/images/bulkuploadfile.png +0 -0
  69. package/lib/assets/images/cancel-sign copy.png +0 -0
  70. package/lib/assets/images/cancel-sign.png +0 -0
  71. package/lib/assets/images/emptyResult.svg +1 -0
  72. package/lib/assets/images/icons-rtl.gif +0 -0
  73. package/lib/assets/images/icons.gif +0 -0
  74. package/lib/assets/images/imageicon.svg +16 -0
  75. package/lib/assets/images/imageicon_blue.svg +16 -0
  76. package/lib/assets/images/layoutoneicon.svg +16 -0
  77. package/lib/assets/images/layoutoneicon_blue.svg +16 -0
  78. package/lib/assets/images/layoutthreeicon.svg +18 -0
  79. package/lib/assets/images/layoutthreeicon_blue.svg +18 -0
  80. package/lib/assets/images/layouttwoicon.svg +18 -0
  81. package/lib/assets/images/layouttwoicon_blue.svg +18 -0
  82. package/lib/assets/images/leftalignicon.svg +17 -0
  83. package/lib/assets/images/leftalignicon_blue.svg +17 -0
  84. package/lib/assets/images/loader.gif +0 -0
  85. package/lib/assets/images/loader.svg +1 -0
  86. package/lib/assets/images/loading.gif +0 -0
  87. package/lib/assets/images/middlealignicon.svg +17 -0
  88. package/lib/assets/images/middlealignicon_blue.svg +17 -0
  89. package/lib/assets/images/question_collection.svg +18 -0
  90. package/lib/assets/images/rightalignicon.svg +17 -0
  91. package/lib/assets/images/rightalignicon_blue.svg +17 -0
  92. package/lib/assets/images/vline-rtl.gif +0 -0
  93. package/lib/assets/images/vline.gif +0 -0
  94. package/lib/assets/images/writing.png +0 -0
  95. package/lib/collection-editor-cursor.service.d.ts +5 -0
  96. package/lib/collection-editor-cursor.service.d.ts.map +1 -0
  97. package/lib/collection-editor-library.component.d.ts +9 -0
  98. package/lib/collection-editor-library.component.d.ts.map +1 -0
  99. package/lib/collection-editor-library.module.d.ts +50 -0
  100. package/lib/collection-editor-library.module.d.ts.map +1 -0
  101. package/lib/components/answer/answer.component.d.ts +24 -0
  102. package/lib/components/answer/answer.component.d.ts.map +1 -0
  103. package/lib/components/asset-browser/asset-browser.component.d.ts +81 -0
  104. package/lib/components/asset-browser/asset-browser.component.d.ts.map +1 -0
  105. package/lib/components/asset-browser/asset-browser.data.d.ts +52 -0
  106. package/lib/components/asset-browser/asset-browser.data.d.ts.map +1 -0
  107. package/lib/components/assign-page-number/assign-page-number.component.d.ts +38 -0
  108. package/lib/components/assign-page-number/assign-page-number.component.d.ts.map +1 -0
  109. package/lib/components/ckeditor-tool/ckeditor-tool.component.d.ts +161 -0
  110. package/lib/components/ckeditor-tool/ckeditor-tool.component.d.ts.map +1 -0
  111. package/lib/components/collection-icon/collection-icon.component.d.ts +18 -0
  112. package/lib/components/collection-icon/collection-icon.component.d.ts.map +1 -0
  113. package/lib/components/contentplayer-page/contentplayer-page.component.d.ts +54 -0
  114. package/lib/components/contentplayer-page/contentplayer-page.component.d.ts.map +1 -0
  115. package/lib/components/csv-upload/csv-upload.component.d.ts +42 -0
  116. package/lib/components/csv-upload/csv-upload.component.d.ts.map +1 -0
  117. package/lib/components/dialcode/dialcode.component.d.ts +48 -0
  118. package/lib/components/dialcode/dialcode.component.d.ts.map +1 -0
  119. package/lib/components/editor/editor.component.d.ts +146 -0
  120. package/lib/components/editor/editor.component.d.ts.map +1 -0
  121. package/lib/components/fancy-tree/fancy-tree.component.d.ts +77 -0
  122. package/lib/components/fancy-tree/fancy-tree.component.d.ts.map +1 -0
  123. package/lib/components/header/header.component.d.ts +46 -0
  124. package/lib/components/header/header.component.d.ts.map +1 -0
  125. package/lib/components/library/library.component.d.ts +69 -0
  126. package/lib/components/library/library.component.d.ts.map +1 -0
  127. package/lib/components/library-filter/library-filter.component.d.ts +47 -0
  128. package/lib/components/library-filter/library-filter.component.d.ts.map +1 -0
  129. package/lib/components/library-list/library-list.component.d.ts +32 -0
  130. package/lib/components/library-list/library-list.component.d.ts.map +1 -0
  131. package/lib/components/library-player/library-player.component.d.ts +24 -0
  132. package/lib/components/library-player/library-player.component.d.ts.map +1 -0
  133. package/lib/components/manage-collaborator/manage-collaborator.component.d.ts +75 -0
  134. package/lib/components/manage-collaborator/manage-collaborator.component.d.ts.map +1 -0
  135. package/lib/components/meta-form/meta-form.component.d.ts +51 -0
  136. package/lib/components/meta-form/meta-form.component.d.ts.map +1 -0
  137. package/lib/components/options/options.component.d.ts +53 -0
  138. package/lib/components/options/options.component.d.ts.map +1 -0
  139. package/lib/components/plain-tree/plain-tree.component.d.ts +20 -0
  140. package/lib/components/plain-tree/plain-tree.component.d.ts.map +1 -0
  141. package/lib/components/progress-status/progress-status.component.d.ts +25 -0
  142. package/lib/components/progress-status/progress-status.component.d.ts.map +1 -0
  143. package/lib/components/publish-checklist/publish-checklist.component.d.ts +23 -0
  144. package/lib/components/publish-checklist/publish-checklist.component.d.ts.map +1 -0
  145. package/lib/components/quality-params-modal/quality-params-modal.component.d.ts +24 -0
  146. package/lib/components/quality-params-modal/quality-params-modal.component.d.ts.map +1 -0
  147. package/lib/components/question/question.component.d.ts +215 -0
  148. package/lib/components/question/question.component.d.ts.map +1 -0
  149. package/lib/components/quml-player/quml-player.component.d.ts +26 -0
  150. package/lib/components/quml-player/quml-player.component.d.ts.map +1 -0
  151. package/lib/components/qumlplayer-page/qumlplayer-page.component.d.ts +31 -0
  152. package/lib/components/qumlplayer-page/qumlplayer-page.component.d.ts.map +1 -0
  153. package/lib/components/resource-reorder/resource-reorder.component.d.ts +45 -0
  154. package/lib/components/resource-reorder/resource-reorder.component.d.ts.map +1 -0
  155. package/lib/components/skeleton-loader/skeleton-loader.component.d.ts +13 -0
  156. package/lib/components/skeleton-loader/skeleton-loader.component.d.ts.map +1 -0
  157. package/lib/components/template/template.component.d.ts +21 -0
  158. package/lib/components/template/template.component.d.ts.map +1 -0
  159. package/lib/components/term-and-condition/term-and-condition.component.d.ts +26 -0
  160. package/lib/components/term-and-condition/term-and-condition.component.d.ts.map +1 -0
  161. package/lib/directives/telemetry-interact/telemetry-interact.directive.d.ts +27 -0
  162. package/lib/directives/telemetry-interact/telemetry-interact.directive.d.ts.map +1 -0
  163. package/lib/interfaces/McqForm.d.ts +32 -0
  164. package/lib/interfaces/McqForm.d.ts.map +1 -0
  165. package/lib/interfaces/editor.d.ts +78 -0
  166. package/lib/interfaces/editor.d.ts.map +1 -0
  167. package/lib/interfaces/framework.d.ts +46 -0
  168. package/lib/interfaces/framework.d.ts.map +1 -0
  169. package/lib/interfaces/httpOptions.d.ts +35 -0
  170. package/lib/interfaces/httpOptions.d.ts.map +1 -0
  171. package/lib/interfaces/requestParam.d.ts +24 -0
  172. package/lib/interfaces/requestParam.d.ts.map +1 -0
  173. package/lib/interfaces/serverResponse.d.ts +38 -0
  174. package/lib/interfaces/serverResponse.d.ts.map +1 -0
  175. package/lib/pipes/sanitize-html.pipe.d.ts +11 -0
  176. package/lib/pipes/sanitize-html.pipe.d.ts.map +1 -0
  177. package/lib/services/config/config.service.d.ts +13 -0
  178. package/lib/services/config/config.service.d.ts.map +1 -0
  179. package/lib/services/data/data.service.d.ts +85 -0
  180. package/lib/services/data/data.service.d.ts.map +1 -0
  181. package/lib/services/dialcode/dialcode.service.d.ts +36 -0
  182. package/lib/services/dialcode/dialcode.service.d.ts.map +1 -0
  183. package/lib/services/editor/editor.service.d.ts +150 -0
  184. package/lib/services/editor/editor.service.d.ts.map +1 -0
  185. package/lib/services/framework/framework.service.d.ts +35 -0
  186. package/lib/services/framework/framework.service.d.ts.map +1 -0
  187. package/lib/services/helper/helper.service.d.ts +41 -0
  188. package/lib/services/helper/helper.service.d.ts.map +1 -0
  189. package/lib/services/player/player.service.d.ts +33 -0
  190. package/lib/services/player/player.service.d.ts.map +1 -0
  191. package/lib/services/public-data/public-data.service.d.ts +15 -0
  192. package/lib/services/public-data/public-data.service.d.ts.map +1 -0
  193. package/lib/services/question/question.service.d.ts +30 -0
  194. package/lib/services/question/question.service.d.ts.map +1 -0
  195. package/lib/services/telemetry/telemetry.service.d.ts +45 -0
  196. package/lib/services/telemetry/telemetry.service.d.ts.map +1 -0
  197. package/lib/services/toaster/toaster.service.d.ts +50 -0
  198. package/lib/services/toaster/toaster.service.d.ts.map +1 -0
  199. package/lib/services/tree/tree.service.d.ts +51 -0
  200. package/lib/services/tree/tree.service.d.ts.map +1 -0
  201. package/package.json +32 -0
  202. package/project-sunbird-sunbird-collection-editor.d.ts.map +1 -0
  203. package/public-api.d.ts +4 -0
  204. package/public-api.d.ts.map +1 -0
@@ -0,0 +1,325 @@
1
+ import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
+ import * as _ from 'lodash-es';
3
+ import { catchError } from 'rxjs/operators';
4
+ import { throwError, Observable } from 'rxjs';
5
+ import { config } from './asset-browser.data';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "../../services/editor/editor.service";
8
+ import * as i2 from "../../services/config/config.service";
9
+ import * as i3 from "../../services/question/question.service";
10
+ import * as i4 from "@angular/common";
11
+ import * as i5 from "@angular/forms";
12
+ import * as i6 from "@project-sunbird/ng2-semantic-ui";
13
+ import * as i7 from "@project-sunbird/common-form-elements-full";
14
+ import * as i8 from "ngx-infinite-scroll";
15
+ export class AssetBrowserComponent {
16
+ constructor(editorService, configService, questionService) {
17
+ this.editorService = editorService;
18
+ this.configService = configService;
19
+ this.questionService = questionService;
20
+ this.assetBrowserEmitter = new EventEmitter();
21
+ this.modalDismissEmitter = new EventEmitter();
22
+ this.assetConfig = {};
23
+ this.myAssets = [];
24
+ this.allImages = [];
25
+ this.imageUploadLoader = false;
26
+ this.isClosable = true;
27
+ this.loading = false;
28
+ this.assetProxyUrl = '/assets/public/';
29
+ this.searchMyInput = '';
30
+ this.assestData = {};
31
+ }
32
+ ngOnInit() {
33
+ this.initialFormConfig = _.get(config, 'uploadIconFormConfig');
34
+ this.formConfig = _.get(config, 'uploadIconFormConfig');
35
+ this.assetConfig = this.editorService.editorConfig.config.assetConfig;
36
+ this.termsAndCondition = _.get(this.configService.labelConfig, 'termsAndConditions.001');
37
+ this.emptySearchMessage = _.get(this.configService.labelConfig, 'messages.error.016');
38
+ this.acceptImageType = this.getAcceptType(this.assetConfig.image.accepted, 'image');
39
+ }
40
+ getAcceptType(typeList, type) {
41
+ const acceptTypeList = typeList.split(', ');
42
+ const result = [];
43
+ _.forEach(acceptTypeList, (content) => {
44
+ result.push(`${type}/${content}`);
45
+ });
46
+ return result.toString();
47
+ }
48
+ initializeImagePicker() {
49
+ this.showImagePicker = true;
50
+ }
51
+ outputEventHandler(event) {
52
+ console.log(JSON.stringify(event));
53
+ }
54
+ getMyImages(offset, query, search) {
55
+ this.assetsCount = 0;
56
+ if (!search) {
57
+ this.searchMyInput = '';
58
+ }
59
+ if (offset === 0) {
60
+ this.myAssets.length = 0;
61
+ }
62
+ const req = {
63
+ filters: {
64
+ mediaType: ['image'],
65
+ createdBy: _.get(this.editorService.editorConfig, 'context.user.id')
66
+ },
67
+ offset
68
+ };
69
+ if (query) {
70
+ req['query'] = query;
71
+ }
72
+ this.questionService.getAssetMedia(req).pipe(catchError(err => {
73
+ const errInfo = { errorMsg: _.get(this.configService.labelConfig, 'messages.error.022') };
74
+ return throwError(this.editorService.apiErrorHandling(err, errInfo));
75
+ })).subscribe((res) => {
76
+ this.assetsCount = res.result.count;
77
+ _.map(res.result.content, (item) => {
78
+ if (item.downloadUrl) {
79
+ this.myAssets.push(item);
80
+ }
81
+ });
82
+ });
83
+ }
84
+ addImageInEditor(imageUrl, imageId) {
85
+ this.appIcon = imageUrl;
86
+ this.showImagePicker = false;
87
+ this.assetBrowserEmitter.emit({ type: 'image', url: this.appIcon });
88
+ }
89
+ getAllImages(offset, query, search) {
90
+ this.assetsCount = 0;
91
+ if (!search) {
92
+ this.searchAllInput = '';
93
+ }
94
+ if (offset === 0) {
95
+ this.allImages.length = 0;
96
+ }
97
+ const req = {
98
+ filters: {
99
+ mediaType: ['image']
100
+ },
101
+ offset
102
+ };
103
+ if (query) {
104
+ req['query'] = query;
105
+ }
106
+ this.questionService.getAssetMedia(req).pipe(catchError(err => {
107
+ const errInfo = { errorMsg: _.get(this.configService.labelConfig, 'messages.error.022') };
108
+ return throwError(this.editorService.apiErrorHandling(err, errInfo));
109
+ }))
110
+ .subscribe((res) => {
111
+ this.assetsCount = res.result.count;
112
+ _.map(res.result.content, (item) => {
113
+ if (item.downloadUrl) {
114
+ this.allImages.push(item);
115
+ }
116
+ });
117
+ });
118
+ }
119
+ lazyloadMyImages() {
120
+ const offset = this.myAssets.length;
121
+ this.getMyImages(offset, this.query, true);
122
+ }
123
+ /**
124
+ * function to lazy load all images
125
+ */
126
+ lazyloadAllImages() {
127
+ const offset = this.allImages.length;
128
+ this.getAllImages(offset, this.query, true);
129
+ }
130
+ uploadImage(event) {
131
+ const file = event.target.files[0];
132
+ const reader = new FileReader();
133
+ this.formData = new FormData();
134
+ this.formData.append('file', file);
135
+ this.assetName = file.name;
136
+ const fileType = file.type;
137
+ const fileName = file.name.split('.').slice(0, -1).join('.');
138
+ const fileSize = file.size / 1024 / 1024;
139
+ if (fileType.split('/')[0] === 'image') {
140
+ this.showErrorMsg = false;
141
+ if (fileSize > this.assetConfig.image.size) {
142
+ this.showErrorMsg = true;
143
+ this.errorMsg = _.get(this.configService.labelConfig, 'messages.error.021') +
144
+ this.assetConfig.image.size + this.assetConfig.image.sizeType;
145
+ this.resetFormData();
146
+ }
147
+ else {
148
+ this.errorMsg = '';
149
+ this.showErrorMsg = false;
150
+ reader.readAsDataURL(file);
151
+ }
152
+ }
153
+ else {
154
+ this.showErrorMsg = true;
155
+ this.errorMsg = _.get(this.configService.labelConfig, 'messages.error.020');
156
+ }
157
+ if (!this.showErrorMsg) {
158
+ this.imageFile = file;
159
+ this.imageUploadLoader = true;
160
+ this.imageFormValid = true;
161
+ this.assestData = this.generateAssetCreateRequest(fileName, fileType, 'image');
162
+ this.populateFormData(this.assestData);
163
+ }
164
+ }
165
+ resetFormData() {
166
+ this.imageUploadLoader = false;
167
+ this.imageFormValid = false;
168
+ this.formConfig = this.initialFormConfig;
169
+ }
170
+ populateFormData(formData) {
171
+ const formvalue = _.cloneDeep(this.formConfig);
172
+ this.formConfig = null;
173
+ _.forEach(formvalue, (formFieldCategory) => {
174
+ formFieldCategory.default = formData[formFieldCategory.code];
175
+ formFieldCategory.editable = true;
176
+ });
177
+ this.formConfig = formvalue;
178
+ }
179
+ uploadAndUseImage(modal) {
180
+ this.questionService.createMediaAsset({ content: this.assestData }).pipe(catchError(err => {
181
+ const errInfo = { errorMsg: _.get(this.configService.labelConfig, 'messages.error.019') };
182
+ return throwError(this.editorService.apiErrorHandling(err, errInfo));
183
+ })).subscribe((res) => {
184
+ const imgId = res.result.node_id;
185
+ const request = {
186
+ data: this.formData
187
+ };
188
+ this.questionService.uploadMedia(request, imgId).pipe(catchError(err => {
189
+ const errInfo = { errorMsg: _.get(this.configService.labelConfig, 'messages.error.019') };
190
+ return throwError(this.editorService.apiErrorHandling(err, errInfo));
191
+ })).subscribe((response) => {
192
+ const signedURL = response.result.pre_signed_url;
193
+ let blobConfig = {
194
+ processData: false,
195
+ contentType: 'Asset'
196
+ };
197
+ blobConfig = this.editorService.appendCloudStorageHeaders(blobConfig);
198
+ this.uploadToBlob(signedURL, this.imageFile, blobConfig).subscribe(() => {
199
+ const fileURL = signedURL.split('?')[0];
200
+ const data = new FormData();
201
+ data.append('fileUrl', fileURL);
202
+ data.append('mimeType', _.get(this.imageFile, 'type'));
203
+ const config1 = {
204
+ enctype: 'multipart/form-data',
205
+ processData: false,
206
+ contentType: false,
207
+ cache: false
208
+ };
209
+ const uploadMediaConfig = {
210
+ data,
211
+ param: config1
212
+ };
213
+ this.questionService.uploadMedia(uploadMediaConfig, imgId).pipe(catchError(err => {
214
+ const errInfo = { errorMsg: _.get(this.configService.labelConfig, 'messages.error.019') };
215
+ this.isClosable = true;
216
+ this.loading = false;
217
+ this.imageFormValid = true;
218
+ return throwError(this.editorService.apiErrorHandling(err, errInfo));
219
+ })).subscribe((response1) => {
220
+ this.addImageInEditor(response1.result.content_url, response1.result.node_id);
221
+ this.showImageUploadModal = false;
222
+ this.dismissPops(modal);
223
+ });
224
+ });
225
+ });
226
+ });
227
+ }
228
+ generateAssetCreateRequest(fileName, fileType, mediaType) {
229
+ return {
230
+ name: fileName,
231
+ mediaType,
232
+ mimeType: fileType,
233
+ createdBy: _.get(this.editorService.editorConfig, 'context.user.id'),
234
+ creator: _.get(this.editorService.editorConfig, 'context.user.fullName'),
235
+ channel: _.get(this.editorService.editorConfig, 'context.channel')
236
+ };
237
+ }
238
+ uploadToBlob(signedURL, file, config) {
239
+ const csp = _.get(this.editorService.editorConfig, 'context.cloudStorage.provider', 'azure');
240
+ return new Observable((observer) => {
241
+ const uploaderLib = new SunbirdFileUploadLib.FileUploader();
242
+ uploaderLib.upload({ url: signedURL, file, csp })
243
+ .on("error", (error) => {
244
+ const errInfo = { errorMsg: _.get(this.configService.labelConfig, 'messages.error.018') };
245
+ this.isClosable = true;
246
+ this.loading = false;
247
+ observer.error(this.editorService.apiErrorHandling(error, errInfo));
248
+ }).on("completed", (completed) => {
249
+ observer.next(completed);
250
+ observer.complete();
251
+ });
252
+ });
253
+ }
254
+ dismissImageUploadModal() {
255
+ this.showImagePicker = true;
256
+ this.showImageUploadModal = false;
257
+ }
258
+ openImageUploadModal() {
259
+ this.showImageUploadModal = true;
260
+ this.formData = null;
261
+ this.formConfig = this.initialFormConfig;
262
+ this.imageUploadLoader = false;
263
+ this.imageFormValid = false;
264
+ this.showErrorMsg = false;
265
+ }
266
+ dismissPops(modal) {
267
+ this.dismissImagePicker();
268
+ modal.deny();
269
+ }
270
+ dismissImagePicker() {
271
+ this.showImagePicker = false;
272
+ this.modalDismissEmitter.emit({});
273
+ }
274
+ searchImages(event, type) {
275
+ if (event === 'clearInput' && type === 'myImages') {
276
+ this.query = '';
277
+ this.searchMyInput = '';
278
+ }
279
+ else if (event === 'clearInput' && type === 'allImages') {
280
+ this.query = '';
281
+ this.searchAllInput = '';
282
+ }
283
+ else {
284
+ this.query = event.target.value;
285
+ }
286
+ if (type === 'myImages') {
287
+ this.getMyImages(0, this.query, true);
288
+ }
289
+ else {
290
+ this.getAllImages(0, this.query, true);
291
+ }
292
+ }
293
+ onStatusChanges(event) {
294
+ if (event.isValid && this.imageUploadLoader) {
295
+ this.imageFormValid = true;
296
+ }
297
+ else {
298
+ this.imageFormValid = false;
299
+ }
300
+ }
301
+ valueChanges(event) {
302
+ this.assestData = _.merge({}, this.assestData, event);
303
+ }
304
+ ngOnDestroy() {
305
+ if (this.modal && this.modal.deny) {
306
+ this.modal.deny();
307
+ }
308
+ }
309
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AssetBrowserComponent, deps: [{ token: i1.EditorService }, { token: i2.ConfigService }, { token: i3.QuestionService }], target: i0.ɵɵFactoryTarget.Component }); }
310
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AssetBrowserComponent, selector: "lib-asset-browser", inputs: { showImagePicker: "showImagePicker" }, outputs: { assetBrowserEmitter: "assetBrowserEmitter", modalDismissEmitter: "modalDismissEmitter" }, viewQueries: [{ propertyName: "modal", first: true, predicate: ["modal"], descendants: true }], ngImport: i0, template: "<sui-modal [isClosable]=\"true\" class=\"sb-modal overflow-modal\" [isInverted]=\"false\" (dismissed)=\"dismissImagePicker()\"\n *ngIf=\"showImagePicker\" [size]=\"'normal'\" [isFullScreen]=\"false\" [mustScroll]=\"true\" #modal>\n <div class=\"sb-modal-header\">{{configService.labelConfig?.lbl?.selectImage}}</div>\n <div class=\"sb-modal-content p-0\">\n <sui-tabset>\n <div class=\"sb-tabset-menu\">\n <a class=\"sb-item\" (activate)=\"getMyImages(0)\" suiTabHeader=\"1\">{{configService.labelConfig?.lbl?.myImages}}</a>\n <a class=\"sb-item\" (activate)=\"getAllImages(0)\" suiTabHeader=\"2\">{{configService.labelConfig?.lbl?.allImage}}</a>\n </div>\n <div class=\"ui segment sb-tabset-segment m-0 pt-15\" infiniteScroll [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"500\" [scrollWindow]=\"false\" (scrolled)=\"lazyloadMyImages()\" suiTabContent=\"1\">\n <div class=\"ui pb-16 d-flex pl-0\">\n <div class=\"sb-search-box small no-btn\">\n <div class=\"input-div relative\">\n <i class=\"search icon\" aria-hidden=\"true\"></i>\n <input (change)=\"searchImages($event, 'myImages')\" class=\"sb-search-input\" [(ngModel)]=\"searchMyInput\"\n type=\"text\" placeholder={{configService.labelConfig?.lbl?.searchPlaceholder}} />\n <i class=\"close icon\" aria-hidden=\"true\" (click)=\"searchImages('clearInput', 'myImages')\"></i>\n </div>\n <button class=\"sb-btn sb-btn-normal\">{{configService.labelConfig?.button_labels?.search_btn_label}}</button>\n </div>\n <p class=\"fs-0-986 ml-auto sb-color-grey\" >{{assetsCount}}</p>\n </div>\n <div *ngIf=\"!myAssets?.length && searchMyInput\" class=\"fs-0785 my-10\"> {{emptySearchMessage}} </div>\n <div class=\"sb-grid-layout image\">\n <div class=\"sb-video-content\" *ngFor=\"let data of myAssets\">\n <div class=\"sb-image-section relative position\">\n <img (click)=\"addImageInEditor(data.downloadUrl, data.identifier)\" alt=\"\" [src]=\"data.downloadUrl\">\n </div>\n </div>\n </div>\n </div>\n <div class=\"ui segment sb-tabset-segment m-0 pt-15\" infiniteScroll [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"500\" [scrollWindow]=\"false\" (scrolled)=\"lazyloadAllImages()\" suiTabContent=\"2\">\n <div class=\"ui pb-16 d-flex pl-0\">\n <div class=\"sb-search-box small no-btn\">\n <div class=\"input-div relative\">\n <i class=\"search icon\" aria-hidden=\"true\"></i>\n <input (change)=\"searchImages($event, 'allImages')\" class=\"sb-search-input\" [(ngModel)]=\"searchAllInput\"\n type=\"text\" placeholder={{configService.labelConfig?.lbl?.searchPlaceholder}} />\n <i class=\"close icon\" aria-hidden=\"true\" (click)=\"searchImages('clearInput', 'allImages')\"></i>\n </div>\n <button class=\"sb-btn sb-btn-normal\">{{configService.labelConfig?.button_labels?.search_btn_label}}</button>\n </div>\n <p class=\"fs-0-986 ml-auto sb-color-grey\" >{{assetsCount}}</p>\n </div>\n <div *ngIf=\"!allImages?.length && searchAllInput\" class=\"fs-0785\"> {{emptySearchMessage}} </div>\n <div class=\"sb-grid-layout image\">\n <div class=\"sb-video-content\" *ngFor=\"let data of allImages\">\n <div class=\"sb-image-section\">\n <img (click)=\"addImageInEditor(data.downloadUrl, data.identifier)\" alt=\"\" [src]=\"data.downloadUrl\">\n </div>\n </div>\n </div>\n </div>\n </sui-tabset>\n </div>\n <div class=\"sb-modal-actions flex-jc-space-end\">\n <button (click)=\"openImageUploadModal();\" class=\"sb-btn sb-btn-primary sb-btn-normal\">{{configService.labelConfig?.lbl?.uploadAndUse}}</button>\n </div>\n</sui-modal>\n<sui-modal class=\"sb-modal overflow-modal\" [isClosable]=\"true\" [isInverted]=\"false\"\n (dismissed)=\"dismissImageUploadModal()\" *ngIf=\"showImageUploadModal\" [size]=\"'large'\" [isFullScreen]=\"false\"\n [mustScroll]=\"true\" appBodyScroll #modal>\n <div class=\"sb-modal-header\">{{configService.labelConfig?.lbl?.uploadAndUse}}</div>\n <div class=\"p-10 sb-bg-white\">\n <div class=\"d-flex\">\n <div class=\"w-50\">\n <div class=\"content\">\n <h6 class=\"mb-8 fs-normal\"> {{configService.labelConfig?.lbl?.chooseOrDragImage}}<span class=\"red\">*</span></h6>\n <div class=\"upload-image-modal-section d-flex flex-ai-center flex-jc-center flex-dc\">\n <ng-container>\n <button class=\"upload-input-button sb-btn sb-btn-success sb-btn-normal\">\n {{configService.labelConfig?.lbl?.uploadFromComputer}} \n <input (change)=\"uploadImage($event)\" type=\"file\" [accept]=\"acceptImageType\" name=\"assetfile\">\n </button>\n <div class=\"py-10 fs-0-785 sb-color-primary\" *ngIf=\"imageUploadLoader\"> {{assetName}} </div>\n <span class=\"fsmall mt-8\">{{configService.labelConfig?.lbl?.upload}} {{assetConfig.image.accepted}} \n ({{configService.labelConfig?.lbl?.maxFileSize}} {{assetConfig.image.size}}{{assetConfig.image.sizeType}})</span>\n <div *ngIf=\"showErrorMsg\" class=\"sb-color-error fsmall mt-8\">\n <p>{{errorMsg}}</p>\n </div>\n </ng-container>\n </div>\n <div class=\"ui info message sb-info-bx\">\n <ul class=\"list\">\n <li class=\"fs-0785\"> {{configService.labelConfig?.lbl?.allowedFileTypes}} {{assetConfig.image.accepted}}</li>\n <li class=\"fs-0785\"> {{configService.labelConfig?.lbl?.maximumAllowedFileSize}} {{assetConfig.image.size}}{{assetConfig.image.sizeType}}</li>\n </ul>\n </div>\n <h6 class=\"fs-0785\">{{configService.labelConfig?.lbl?.copyRightsAndLicense}}<span class=\"red\">*</span></h6>\n <p class=\"fsmall mt-8 terms-and-condition\">{{termsAndCondition}}</p>\n </div>\n </div>\n <div class=\"w-50 pl-10 ml-10 b-bl\">\n <div class=\"ui info message sb-info-bx mb-0\">\n <ul class=\"list\">\n <li class=\"fs-0785 font-weight-bold\">\n <i class=\"icon info circle\" aria-hidden=\"true\"></i>\n {{configService.labelConfig?.lbl?.dropChooseFile}} </li>\n </ul>\n </div>\n <div class=\"sb-form-fields\">\n <div class=\"form-container upload-form\">\n <sb-dynamic-form [config]=\"formConfig\" \n (statusChanges)=\"onStatusChanges($event)\" (valueChanges)=\"valueChanges($event)\"></sb-dynamic-form>\n </div>\n </div>\n </div>\n </div>\n <div class=\"sb-modal-actions flex-jc-space-between p-0\">\n <div>\n <button (click)=\"dismissPops(modal);\" class=\"mr-10 sb-btn sb-btn-primary sb-btn-normal\">{{configService.labelConfig?.button_labels?.cancel_btn_label}}</button>\n\n <button (click)=\"uploadAndUseImage(modal);\" [disabled]=\"!imageFormValid\" \n [ngClass]=\"{'sb-btn-primary': imageFormValid, 'sb-btn-disabled': !imageFormValid}\"\n class=\"sb-btn sb-btn-normal text-left\">{{configService.labelConfig?.button_labels?.upload_use_btn_label}}\n </button>\n </div>\n <div>\n <button (click)=\"dismissImageUploadModal();\" class=\" sb-btn sb-btn-primary sb-btn-normal\">{{configService.labelConfig?.button_labels?.back_btn_label}}</button>\n </div>\n </div>\n </div>\n</sui-modal>", styles: [".editorWrapper{border:0px solid white}.editorWrapper.hasError{border:0px solid red}.characterCount{text-align:right;border-top:0;padding-right:7px;font-size:11px;font-weight:700;margin-top:-16px;position:relative}.custom-image img{border:1px dotted;padding:7px;margin:6px;cursor:pointer}.resource-image{height:180px!important}.asset_container{overflow-y:auto;overflow-x:hidden;min-height:300px!important;max-height:300px!important;padding:5px}.insert-image-btn{position:absolute;z-index:1;left:315px;background-color:transparent;padding:12px 14px!important;margin-left:6px}.insert-image-btn>.icon{opacity:1}.insert-image-btn:active{background-color:transparent}.upload-file-description p{color:#999}.upload-file-description ul{margin:0;list-style:disc}.upload-file-description ul li{margin-bottom:8px}.upload-file-description ul li a{cursor:pointer;font-size:12px}.sb-grid-layout{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));grid-gap:16px}.sb-grid-layout.image{grid-template-columns:repeat(auto-fill,minmax(96px,1fr))}.sb-grid-layout.video{grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}.sb-grid-layout .sb-video-content .sb-image-section{height:96px;overflow:hidden;border-radius:4px;box-shadow:inset 0 1px 3px #00000080}.sb-image-section .selected-video{display:none}.sb-image-section.active .selected-video{position:absolute;right:4px;top:4px;color:#07bc81;font-size:20px;display:block}.sb-grid-layout .sb-video-content .sb-image-section img{width:100%;height:100%;cursor:pointer}.overlay-image{width:100%;height:100%;background:#0000004d;position:absolute;left:0;right:0;cursor:pointer}.overlay-image .play.icon{position:absolute;transform:translate(-50%,-50%);top:50%;left:50%;color:#fff9;font-size:32px;cursor:pointer}::ng-deep .ck-rounded-corners .ck.ck-editor__top .ck-sticky-panel .ck-toolbar,::ng-deep .ck.ck-editor__top .ck-sticky-panel .ck-toolbar.ck-rounded-corners{border-left:none;border-right:none;border-bottom:1px solid #c4c4c4;border-radius:0}::ng-deep .ck-rounded-corners .ck.ck-editor__main>.ck-editor__editable,::ng-deep .ck.ck-editor__main>.ck-editor__editable.ck-rounded-corners{border:none}.upload-image-modal-section{border-radius:4px;width:100%;min-height:140px;background:#f5f9fc;border:1px dashed #024f9d}.upload-input-button input[type=file]{position:absolute;right:0;top:0;font-size:118px;margin:0;padding:0;cursor:pointer;opacity:0;height:100%}.upload-file-section{display:flex;height:240px;width:100%;max-width:800px;align-items:center;justify-content:center;flex-direction:column;margin:0 auto;background-color:#f5f9fc;border:1px dashed #80a7ce}.qq-uploader.qq-uploader-selector.custom-qq-uploader{background:inherit;border-color:none;border:none;max-height:inherit;min-height:inherit;overflow-y:inherit;width:688px;height:240px;display:flex;justify-content:center;align-items:center}.terms-and-condition{line-height:14px}.sb-info-bx{padding:.4rem!important}.sb-info-bx li{margin:0!important;padding:0!important}.sb-info-bx li:before{content:\"\"!important}.red{color:red}.b-bl{border-left:solid 1px #e4e1e1}.sb-form-fields .sb-field-group{margin:1rem 0}.sb-form-fields .sb-field{position:relative;margin-bottom:.5rem}.sb-form-fields .sb-field .sb-form-control{border:1px solid rgba(34,36,38,.15);width:100%;border-radius:.28571429rem;box-shadow:0 0 0 0 transparent inset;padding:.25rem .5rem!important}.sb-color-grey{color:#666}.flex-jc-space-end{justify-content:flex-end!important}.fs-0785{font-size:.785rem!important}.ui.info.message{color:#276f86!important}.sb-textbox[disabled=true]{opacity:.3!important;font-weight:500!important}.sb-tabset-segment{min-height:288px;max-height:288px;overflow-y:auto}input:focus-visible{border:none!important}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.SuiModal, selector: "sui-modal", inputs: ["isClosable", "closeResult", "size", "isCentered", "isFullScreen", "isBasic", "mustScroll", "isInverted", "transition", "transitionDuration"], outputs: ["approved", "denied", "dismissed"] }, { kind: "component", type: i6.SuiTabset, selector: "sui-tabset" }, { kind: "directive", type: i6.SuiTabHeader, selector: "[suiTabHeader]", inputs: ["suiTabHeader", "isActive", "isDisabled"], outputs: ["isActiveChange", "activate", "deactivate"] }, { kind: "directive", type: i6.SuiTabContent, selector: "[suiTabContent]", inputs: ["suiTabContent"] }, { kind: "component", type: i7.DynamicFormComponent, selector: "sb-dynamic-form", inputs: ["config", "dataLoadStatusDelegate"], outputs: ["initialize", "finalize", "valueChanges", "statusChanges"] }, { kind: "directive", type: i8.InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }] }); }
311
+ }
312
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AssetBrowserComponent, decorators: [{
313
+ type: Component,
314
+ args: [{ selector: 'lib-asset-browser', template: "<sui-modal [isClosable]=\"true\" class=\"sb-modal overflow-modal\" [isInverted]=\"false\" (dismissed)=\"dismissImagePicker()\"\n *ngIf=\"showImagePicker\" [size]=\"'normal'\" [isFullScreen]=\"false\" [mustScroll]=\"true\" #modal>\n <div class=\"sb-modal-header\">{{configService.labelConfig?.lbl?.selectImage}}</div>\n <div class=\"sb-modal-content p-0\">\n <sui-tabset>\n <div class=\"sb-tabset-menu\">\n <a class=\"sb-item\" (activate)=\"getMyImages(0)\" suiTabHeader=\"1\">{{configService.labelConfig?.lbl?.myImages}}</a>\n <a class=\"sb-item\" (activate)=\"getAllImages(0)\" suiTabHeader=\"2\">{{configService.labelConfig?.lbl?.allImage}}</a>\n </div>\n <div class=\"ui segment sb-tabset-segment m-0 pt-15\" infiniteScroll [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"500\" [scrollWindow]=\"false\" (scrolled)=\"lazyloadMyImages()\" suiTabContent=\"1\">\n <div class=\"ui pb-16 d-flex pl-0\">\n <div class=\"sb-search-box small no-btn\">\n <div class=\"input-div relative\">\n <i class=\"search icon\" aria-hidden=\"true\"></i>\n <input (change)=\"searchImages($event, 'myImages')\" class=\"sb-search-input\" [(ngModel)]=\"searchMyInput\"\n type=\"text\" placeholder={{configService.labelConfig?.lbl?.searchPlaceholder}} />\n <i class=\"close icon\" aria-hidden=\"true\" (click)=\"searchImages('clearInput', 'myImages')\"></i>\n </div>\n <button class=\"sb-btn sb-btn-normal\">{{configService.labelConfig?.button_labels?.search_btn_label}}</button>\n </div>\n <p class=\"fs-0-986 ml-auto sb-color-grey\" >{{assetsCount}}</p>\n </div>\n <div *ngIf=\"!myAssets?.length && searchMyInput\" class=\"fs-0785 my-10\"> {{emptySearchMessage}} </div>\n <div class=\"sb-grid-layout image\">\n <div class=\"sb-video-content\" *ngFor=\"let data of myAssets\">\n <div class=\"sb-image-section relative position\">\n <img (click)=\"addImageInEditor(data.downloadUrl, data.identifier)\" alt=\"\" [src]=\"data.downloadUrl\">\n </div>\n </div>\n </div>\n </div>\n <div class=\"ui segment sb-tabset-segment m-0 pt-15\" infiniteScroll [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"500\" [scrollWindow]=\"false\" (scrolled)=\"lazyloadAllImages()\" suiTabContent=\"2\">\n <div class=\"ui pb-16 d-flex pl-0\">\n <div class=\"sb-search-box small no-btn\">\n <div class=\"input-div relative\">\n <i class=\"search icon\" aria-hidden=\"true\"></i>\n <input (change)=\"searchImages($event, 'allImages')\" class=\"sb-search-input\" [(ngModel)]=\"searchAllInput\"\n type=\"text\" placeholder={{configService.labelConfig?.lbl?.searchPlaceholder}} />\n <i class=\"close icon\" aria-hidden=\"true\" (click)=\"searchImages('clearInput', 'allImages')\"></i>\n </div>\n <button class=\"sb-btn sb-btn-normal\">{{configService.labelConfig?.button_labels?.search_btn_label}}</button>\n </div>\n <p class=\"fs-0-986 ml-auto sb-color-grey\" >{{assetsCount}}</p>\n </div>\n <div *ngIf=\"!allImages?.length && searchAllInput\" class=\"fs-0785\"> {{emptySearchMessage}} </div>\n <div class=\"sb-grid-layout image\">\n <div class=\"sb-video-content\" *ngFor=\"let data of allImages\">\n <div class=\"sb-image-section\">\n <img (click)=\"addImageInEditor(data.downloadUrl, data.identifier)\" alt=\"\" [src]=\"data.downloadUrl\">\n </div>\n </div>\n </div>\n </div>\n </sui-tabset>\n </div>\n <div class=\"sb-modal-actions flex-jc-space-end\">\n <button (click)=\"openImageUploadModal();\" class=\"sb-btn sb-btn-primary sb-btn-normal\">{{configService.labelConfig?.lbl?.uploadAndUse}}</button>\n </div>\n</sui-modal>\n<sui-modal class=\"sb-modal overflow-modal\" [isClosable]=\"true\" [isInverted]=\"false\"\n (dismissed)=\"dismissImageUploadModal()\" *ngIf=\"showImageUploadModal\" [size]=\"'large'\" [isFullScreen]=\"false\"\n [mustScroll]=\"true\" appBodyScroll #modal>\n <div class=\"sb-modal-header\">{{configService.labelConfig?.lbl?.uploadAndUse}}</div>\n <div class=\"p-10 sb-bg-white\">\n <div class=\"d-flex\">\n <div class=\"w-50\">\n <div class=\"content\">\n <h6 class=\"mb-8 fs-normal\"> {{configService.labelConfig?.lbl?.chooseOrDragImage}}<span class=\"red\">*</span></h6>\n <div class=\"upload-image-modal-section d-flex flex-ai-center flex-jc-center flex-dc\">\n <ng-container>\n <button class=\"upload-input-button sb-btn sb-btn-success sb-btn-normal\">\n {{configService.labelConfig?.lbl?.uploadFromComputer}} \n <input (change)=\"uploadImage($event)\" type=\"file\" [accept]=\"acceptImageType\" name=\"assetfile\">\n </button>\n <div class=\"py-10 fs-0-785 sb-color-primary\" *ngIf=\"imageUploadLoader\"> {{assetName}} </div>\n <span class=\"fsmall mt-8\">{{configService.labelConfig?.lbl?.upload}} {{assetConfig.image.accepted}} \n ({{configService.labelConfig?.lbl?.maxFileSize}} {{assetConfig.image.size}}{{assetConfig.image.sizeType}})</span>\n <div *ngIf=\"showErrorMsg\" class=\"sb-color-error fsmall mt-8\">\n <p>{{errorMsg}}</p>\n </div>\n </ng-container>\n </div>\n <div class=\"ui info message sb-info-bx\">\n <ul class=\"list\">\n <li class=\"fs-0785\"> {{configService.labelConfig?.lbl?.allowedFileTypes}} {{assetConfig.image.accepted}}</li>\n <li class=\"fs-0785\"> {{configService.labelConfig?.lbl?.maximumAllowedFileSize}} {{assetConfig.image.size}}{{assetConfig.image.sizeType}}</li>\n </ul>\n </div>\n <h6 class=\"fs-0785\">{{configService.labelConfig?.lbl?.copyRightsAndLicense}}<span class=\"red\">*</span></h6>\n <p class=\"fsmall mt-8 terms-and-condition\">{{termsAndCondition}}</p>\n </div>\n </div>\n <div class=\"w-50 pl-10 ml-10 b-bl\">\n <div class=\"ui info message sb-info-bx mb-0\">\n <ul class=\"list\">\n <li class=\"fs-0785 font-weight-bold\">\n <i class=\"icon info circle\" aria-hidden=\"true\"></i>\n {{configService.labelConfig?.lbl?.dropChooseFile}} </li>\n </ul>\n </div>\n <div class=\"sb-form-fields\">\n <div class=\"form-container upload-form\">\n <sb-dynamic-form [config]=\"formConfig\" \n (statusChanges)=\"onStatusChanges($event)\" (valueChanges)=\"valueChanges($event)\"></sb-dynamic-form>\n </div>\n </div>\n </div>\n </div>\n <div class=\"sb-modal-actions flex-jc-space-between p-0\">\n <div>\n <button (click)=\"dismissPops(modal);\" class=\"mr-10 sb-btn sb-btn-primary sb-btn-normal\">{{configService.labelConfig?.button_labels?.cancel_btn_label}}</button>\n\n <button (click)=\"uploadAndUseImage(modal);\" [disabled]=\"!imageFormValid\" \n [ngClass]=\"{'sb-btn-primary': imageFormValid, 'sb-btn-disabled': !imageFormValid}\"\n class=\"sb-btn sb-btn-normal text-left\">{{configService.labelConfig?.button_labels?.upload_use_btn_label}}\n </button>\n </div>\n <div>\n <button (click)=\"dismissImageUploadModal();\" class=\" sb-btn sb-btn-primary sb-btn-normal\">{{configService.labelConfig?.button_labels?.back_btn_label}}</button>\n </div>\n </div>\n </div>\n</sui-modal>", styles: [".editorWrapper{border:0px solid white}.editorWrapper.hasError{border:0px solid red}.characterCount{text-align:right;border-top:0;padding-right:7px;font-size:11px;font-weight:700;margin-top:-16px;position:relative}.custom-image img{border:1px dotted;padding:7px;margin:6px;cursor:pointer}.resource-image{height:180px!important}.asset_container{overflow-y:auto;overflow-x:hidden;min-height:300px!important;max-height:300px!important;padding:5px}.insert-image-btn{position:absolute;z-index:1;left:315px;background-color:transparent;padding:12px 14px!important;margin-left:6px}.insert-image-btn>.icon{opacity:1}.insert-image-btn:active{background-color:transparent}.upload-file-description p{color:#999}.upload-file-description ul{margin:0;list-style:disc}.upload-file-description ul li{margin-bottom:8px}.upload-file-description ul li a{cursor:pointer;font-size:12px}.sb-grid-layout{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));grid-gap:16px}.sb-grid-layout.image{grid-template-columns:repeat(auto-fill,minmax(96px,1fr))}.sb-grid-layout.video{grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}.sb-grid-layout .sb-video-content .sb-image-section{height:96px;overflow:hidden;border-radius:4px;box-shadow:inset 0 1px 3px #00000080}.sb-image-section .selected-video{display:none}.sb-image-section.active .selected-video{position:absolute;right:4px;top:4px;color:#07bc81;font-size:20px;display:block}.sb-grid-layout .sb-video-content .sb-image-section img{width:100%;height:100%;cursor:pointer}.overlay-image{width:100%;height:100%;background:#0000004d;position:absolute;left:0;right:0;cursor:pointer}.overlay-image .play.icon{position:absolute;transform:translate(-50%,-50%);top:50%;left:50%;color:#fff9;font-size:32px;cursor:pointer}::ng-deep .ck-rounded-corners .ck.ck-editor__top .ck-sticky-panel .ck-toolbar,::ng-deep .ck.ck-editor__top .ck-sticky-panel .ck-toolbar.ck-rounded-corners{border-left:none;border-right:none;border-bottom:1px solid #c4c4c4;border-radius:0}::ng-deep .ck-rounded-corners .ck.ck-editor__main>.ck-editor__editable,::ng-deep .ck.ck-editor__main>.ck-editor__editable.ck-rounded-corners{border:none}.upload-image-modal-section{border-radius:4px;width:100%;min-height:140px;background:#f5f9fc;border:1px dashed #024f9d}.upload-input-button input[type=file]{position:absolute;right:0;top:0;font-size:118px;margin:0;padding:0;cursor:pointer;opacity:0;height:100%}.upload-file-section{display:flex;height:240px;width:100%;max-width:800px;align-items:center;justify-content:center;flex-direction:column;margin:0 auto;background-color:#f5f9fc;border:1px dashed #80a7ce}.qq-uploader.qq-uploader-selector.custom-qq-uploader{background:inherit;border-color:none;border:none;max-height:inherit;min-height:inherit;overflow-y:inherit;width:688px;height:240px;display:flex;justify-content:center;align-items:center}.terms-and-condition{line-height:14px}.sb-info-bx{padding:.4rem!important}.sb-info-bx li{margin:0!important;padding:0!important}.sb-info-bx li:before{content:\"\"!important}.red{color:red}.b-bl{border-left:solid 1px #e4e1e1}.sb-form-fields .sb-field-group{margin:1rem 0}.sb-form-fields .sb-field{position:relative;margin-bottom:.5rem}.sb-form-fields .sb-field .sb-form-control{border:1px solid rgba(34,36,38,.15);width:100%;border-radius:.28571429rem;box-shadow:0 0 0 0 transparent inset;padding:.25rem .5rem!important}.sb-color-grey{color:#666}.flex-jc-space-end{justify-content:flex-end!important}.fs-0785{font-size:.785rem!important}.ui.info.message{color:#276f86!important}.sb-textbox[disabled=true]{opacity:.3!important;font-weight:500!important}.sb-tabset-segment{min-height:288px;max-height:288px;overflow-y:auto}input:focus-visible{border:none!important}\n"] }]
315
+ }], ctorParameters: function () { return [{ type: i1.EditorService }, { type: i2.ConfigService }, { type: i3.QuestionService }]; }, propDecorators: { showImagePicker: [{
316
+ type: Input
317
+ }], assetBrowserEmitter: [{
318
+ type: Output
319
+ }], modalDismissEmitter: [{
320
+ type: Output
321
+ }], modal: [{
322
+ type: ViewChild,
323
+ args: ['modal']
324
+ }] } });
325
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtYnJvd3Nlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2xsZWN0aW9uLWVkaXRvci1saWJyYXJ5L3NyYy9saWIvY29tcG9uZW50cy9hc3NldC1icm93c2VyL2Fzc2V0LWJyb3dzZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29sbGVjdGlvbi1lZGl0b3ItbGlicmFyeS9zcmMvbGliL2NvbXBvbmVudHMvYXNzZXQtYnJvd3Nlci9hc3NldC1icm93c2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRyxPQUFPLEtBQUssQ0FBQyxNQUFNLFdBQVcsQ0FBQztBQUMvQixPQUFPLEVBQUUsVUFBVSxFQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7O0FBUzlDLE1BQU0sT0FBTyxxQkFBcUI7SUFLaEMsWUFBb0IsYUFBNEIsRUFBUyxhQUE0QixFQUMzRSxlQUFnQztRQUR0QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUFTLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzNFLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUpoQyx3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQzlDLHdCQUFtQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFJeEQsZ0JBQVcsR0FBUSxFQUFFLENBQUM7UUFDdEIsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNkLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDUixz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TGpDLFNBQVM7K0JBQ0UsbUJBQW1COzhKQUtwQixlQUFlO3NCQUF2QixLQUFLO2dCQUNJLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ3FCLEtBQUs7c0JBQWhDLFNBQVM7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyB0aHJvd0Vycm9yLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZWRpdG9yL2VkaXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IFF1ZXN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3F1ZXN0aW9uL3F1ZXN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnLi9hc3NldC1icm93c2VyLmRhdGEnO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbmZpZy9jb25maWcuc2VydmljZSc7XG5kZWNsYXJlIGNvbnN0IFN1bmJpcmRGaWxlVXBsb2FkTGliOiBhbnk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1hc3NldC1icm93c2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Fzc2V0LWJyb3dzZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hc3NldC1icm93c2VyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQXNzZXRCcm93c2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBzaG93SW1hZ2VQaWNrZXI7XG4gIEBPdXRwdXQoKSBhc3NldEJyb3dzZXJFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBtb2RhbERpc21pc3NFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBWaWV3Q2hpbGQoJ21vZGFsJykgcHJpdmF0ZSBtb2RhbDtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlZGl0b3JTZXJ2aWNlOiBFZGl0b3JTZXJ2aWNlLCBwdWJsaWMgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIHF1ZXN0aW9uU2VydmljZTogUXVlc3Rpb25TZXJ2aWNlKSB7IH1cbiAgYXNzZXRDb25maWc6IGFueSA9IHt9O1xuICBteUFzc2V0cyA9IFtdO1xuICBhbGxJbWFnZXMgPSBbXTtcbiAgcHVibGljIGltYWdlVXBsb2FkTG9hZGVyID0gZmFsc2U7XG4gIHNob3dJbWFnZVVwbG9hZE1vZGFsOiBib29sZWFuO1xuICBhY2NlcHRJbWFnZVR5cGU6IGFueTtcbiAgc2hvd0Vycm9yTXNnOiBib29sZWFuO1xuICBlcnJvck1zZzogc3RyaW5nO1xuICBxdWVyeTogc3RyaW5nO1xuICB1cGxvYWRlcjtcbiAgaXNDbG9zYWJsZSA9IHRydWU7XG4gIGxvYWRpbmcgPSBmYWxzZTtcbiAgcHVibGljIG1lZGlhb2JqO1xuICBwdWJsaWMgYXNzZXRQcm94eVVybCA9ICcvYXNzZXRzL3B1YmxpYy8nO1xuICBwdWJsaWMgZWRpdG9ySW5zdGFuY2U6IGFueTtcbiAgcHVibGljIGFzc2V0c0NvdW50OiBhbnk7XG4gIHB1YmxpYyBzZWFyY2hNeUlucHV0ID0gJyc7XG4gIHB1YmxpYyBzZWFyY2hBbGxJbnB1dDogYW55O1xuICBzaG93QWRkQnV0dG9uOiBib29sZWFuO1xuICBhcHBJY29uO1xuICBwdWJsaWMgZm9ybURhdGE6IGFueTtcbiAgcHVibGljIGFzc2VzdERhdGEgPSB7fTtcbiAgcHVibGljIGZvcm1Db25maWc6IGFueTtcbiAgcHVibGljIGluaXRpYWxGb3JtQ29uZmlnOiBhbnk7XG4gIHB1YmxpYyBpbWFnZUZvcm1WYWxpZDogYW55O1xuICBwdWJsaWMgdGVybXNBbmRDb25kaXRpb246IGFueTtcbiAgcHVibGljIGFzc2V0TmFtZTogYW55O1xuICBwdWJsaWMgZW1wdHlTZWFyY2hNZXNzYWdlOiBhbnk7XG4gIHB1YmxpYyBpbWFnZUZpbGU6IGFueTtcbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pbml0aWFsRm9ybUNvbmZpZyA9IF8uZ2V0KGNvbmZpZywgJ3VwbG9hZEljb25Gb3JtQ29uZmlnJyk7XG4gICAgdGhpcy5mb3JtQ29uZmlnID0gXy5nZXQoY29uZmlnLCAndXBsb2FkSWNvbkZvcm1Db25maWcnKTtcbiAgICB0aGlzLmFzc2V0Q29uZmlnID0gdGhpcy5lZGl0b3JTZXJ2aWNlLmVkaXRvckNvbmZpZy5jb25maWcuYXNzZXRDb25maWc7XG4gICAgdGhpcy50ZXJtc0FuZENvbmRpdGlvbiA9IF8uZ2V0KHRoaXMuY29uZmlnU2VydmljZS5sYWJlbENvbmZpZywgJ3Rlcm1zQW5kQ29uZGl0aW9ucy4wMDEnKTtcbiAgICB0aGlzLmVtcHR5U2VhcmNoTWVzc2FnZSA9IF8uZ2V0KHRoaXMuY29uZmlnU2VydmljZS5sYWJlbENvbmZpZywgJ21lc3NhZ2VzLmVycm9yLjAxNicpO1xuICAgIHRoaXMuYWNjZXB0SW1hZ2VUeXBlID0gdGhpcy5nZXRBY2NlcHRUeXBlKHRoaXMuYXNzZXRDb25maWcuaW1hZ2UuYWNjZXB0ZWQsICdpbWFnZScpO1xuICB9XG5cbiAgZ2V0QWNjZXB0VHlwZSh0eXBlTGlzdCwgdHlwZSkge1xuICAgIGNvbnN0IGFjY2VwdFR5cGVMaXN0ID0gdHlwZUxpc3Quc3BsaXQoJywgJyk7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgXy5mb3JFYWNoKGFjY2VwdFR5cGVMaXN0LCAoY29udGVudCkgPT4ge1xuICAgICAgcmVzdWx0LnB1c2goYCR7dHlwZX0vJHtjb250ZW50fWApO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGluaXRpYWxpemVJbWFnZVBpY2tlcigpIHtcbiAgICB0aGlzLnNob3dJbWFnZVBpY2tlciA9IHRydWU7XG4gIH1cblxuICBvdXRwdXRFdmVudEhhbmRsZXIoZXZlbnQpIHtcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShldmVudCkpO1xuICB9XG5cbiAgZ2V0TXlJbWFnZXMob2Zmc2V0LCBxdWVyeT8sIHNlYXJjaD8pIHtcbiAgICB0aGlzLmFzc2V0c0NvdW50ID0gMDtcbiAgICBpZiAoIXNlYXJjaCkge1xuICAgICAgdGhpcy5zZWFyY2hNeUlucHV0ID0gJyc7XG4gICAgfVxuICAgIGlmIChvZmZzZXQgPT09IDApIHtcbiAgICAgIHRoaXMubXlBc3NldHMubGVuZ3RoID0gMDtcbiAgICB9XG4gICAgY29uc3QgcmVxID0ge1xuICAgICAgZmlsdGVyczoge1xuICAgICAgICBtZWRpYVR5cGU6IFsnaW1hZ2UnXSxcbiAgICAgICAgY3JlYXRlZEJ5OiBfLmdldCh0aGlzLmVkaXRvclNlcnZpY2UuZWRpdG9yQ29uZmlnLCAnY29udGV4dC51c2VyLmlkJylcbiAgICAgIH0sXG4gICAgICBvZmZzZXRcbiAgICB9O1xuICAgIGlmIChxdWVyeSkge1xuICAgICAgcmVxWydxdWVyeSddID0gcXVlcnk7XG4gICAgfVxuICAgIHRoaXMucXVlc3Rpb25TZXJ2aWNlLmdldEFzc2V0TWVkaWEocmVxKS5waXBlKGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgIGNvbnN0IGVyckluZm8gPSB7IGVycm9yTXNnOiBfLmdldCh0aGlzLmNvbmZpZ1NlcnZpY2UubGFiZWxDb25maWcsICdtZXNzYWdlcy5lcnJvci4wMjInKSB9O1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IodGhpcy5lZGl0b3JTZXJ2aWNlLmFwaUVycm9ySGFuZGxpbmcoZXJyLCBlcnJJbmZvKSk7XG4gICAgfSkpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICB0aGlzLmFzc2V0c0NvdW50ID0gcmVzLnJlc3VsdC5jb3VudDtcbiAgICAgIF8ubWFwKHJlcy5yZXN1bHQuY29udGVudCwgKGl0ZW0pID0+IHtcbiAgICAgICAgaWYgKGl0ZW0uZG93bmxvYWRVcmwpIHtcbiAgICAgICAgICB0aGlzLm15QXNzZXRzLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkSW1hZ2VJbkVkaXRvcihpbWFnZVVybCwgaW1hZ2VJZCkge1xuICAgIHRoaXMuYXBwSWNvbiA9IGltYWdlVXJsO1xuICAgIHRoaXMuc2hvd0ltYWdlUGlja2VyID0gZmFsc2U7XG4gICAgdGhpcy5hc3NldEJyb3dzZXJFbWl0dGVyLmVtaXQoeyB0eXBlOiAnaW1hZ2UnLCB1cmw6IHRoaXMuYXBwSWNvbiB9KTtcbiAgfVxuXG4gIGdldEFsbEltYWdlcyhvZmZzZXQsIHF1ZXJ5Pywgc2VhcmNoPykge1xuICAgIHRoaXMuYXNzZXRzQ291bnQgPSAwO1xuICAgIGlmICghc2VhcmNoKSB7XG4gICAgICB0aGlzLnNlYXJjaEFsbElucHV0ID0gJyc7XG4gICAgfVxuICAgIGlmIChvZmZzZXQgPT09IDApIHtcbiAgICAgIHRoaXMuYWxsSW1hZ2VzLmxlbmd0aCA9IDA7XG4gICAgfVxuICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgbWVkaWFUeXBlOiBbJ2ltYWdlJ11cbiAgICAgIH0sXG4gICAgICBvZmZzZXRcbiAgICB9O1xuICAgIGlmIChxdWVyeSkge1xuICAgICAgcmVxWydxdWVyeSddID0gcXVlcnk7XG4gICAgfVxuICAgIHRoaXMucXVlc3Rpb25TZXJ2aWNlLmdldEFzc2V0TWVkaWEocmVxKS5waXBlKGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgIGNvbnN0IGVyckluZm8gPSB7IGVycm9yTXNnOiBfLmdldCh0aGlzLmNvbmZpZ1NlcnZpY2UubGFiZWxDb25maWcsICdtZXNzYWdlcy5lcnJvci4wMjInKSB9O1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IodGhpcy5lZGl0b3JTZXJ2aWNlLmFwaUVycm9ySGFuZGxpbmcoZXJyLCBlcnJJbmZvKSk7XG4gICAgfSkpXG4gICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5hc3NldHNDb3VudCA9IHJlcy5yZXN1bHQuY291bnQ7XG4gICAgICAgIF8ubWFwKHJlcy5yZXN1bHQuY29udGVudCwgKGl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoaXRlbS5kb3dubG9hZFVybCkge1xuICAgICAgICAgICAgdGhpcy5hbGxJbWFnZXMucHVzaChpdGVtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBsYXp5bG9hZE15SW1hZ2VzKCkge1xuICAgIGNvbnN0IG9mZnNldCA9IHRoaXMubXlBc3NldHMubGVuZ3RoO1xuICAgIHRoaXMuZ2V0TXlJbWFnZXMob2Zmc2V0LCB0aGlzLnF1ZXJ5LCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBmdW5jdGlvbiB0byBsYXp5IGxvYWQgYWxsIGltYWdlc1xuICAgKi9cbiAgbGF6eWxvYWRBbGxJbWFnZXMoKSB7XG4gICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5hbGxJbWFnZXMubGVuZ3RoO1xuICAgIHRoaXMuZ2V0QWxsSW1hZ2VzKG9mZnNldCwgdGhpcy5xdWVyeSwgdHJ1ZSk7XG4gIH1cbiAgdXBsb2FkSW1hZ2UoZXZlbnQpIHtcbiAgICBjb25zdCBmaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgdGhpcy5mb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIHRoaXMuZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZmlsZSk7XG4gICAgdGhpcy5hc3NldE5hbWUgPSBmaWxlLm5hbWU7XG4gICAgY29uc3QgZmlsZVR5cGUgPSBmaWxlLnR5cGU7XG4gICAgY29uc3QgZmlsZU5hbWUgPSBmaWxlLm5hbWUuc3BsaXQoJy4nKS5zbGljZSgwLCAtMSkuam9pbignLicpO1xuICAgIGNvbnN0IGZpbGVTaXplID0gZmlsZS5zaXplIC8gMTAyNCAvIDEwMjQ7XG4gICAgaWYgKGZpbGVUeXBlLnNwbGl0KCcvJylbMF0gPT09ICdpbWFnZScpIHtcbiAgICAgIHRoaXMuc2hvd0Vycm9yTXNnID0gZmFsc2U7XG4gICAgICBpZiAoZmlsZVNpemUgPiB0aGlzLmFzc2V0Q29uZmlnLmltYWdlLnNpemUpIHtcbiAgICAgICAgdGhpcy5zaG93RXJyb3JNc2cgPSB0cnVlO1xuICAgICAgICB0aGlzLmVycm9yTXNnID0gXy5nZXQodGhpcy5jb25maWdTZXJ2aWNlLmxhYmVsQ29uZmlnLCAnbWVzc2FnZXMuZXJyb3IuMDIxJykgK1xuICAgICAgICAgIHRoaXMuYXNzZXRDb25maWcuaW1hZ2Uuc2l6ZSArIHRoaXMuYXNzZXRDb25maWcuaW1hZ2Uuc2l6ZVR5cGU7XG4gICAgICAgIHRoaXMucmVzZXRGb3JtRGF0YSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lcnJvck1zZyA9ICcnO1xuICAgICAgICB0aGlzLnNob3dFcnJvck1zZyA9IGZhbHNlO1xuICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93RXJyb3JNc2cgPSB0cnVlO1xuICAgICAgdGhpcy5lcnJvck1zZyA9IF8uZ2V0KHRoaXMuY29uZmlnU2VydmljZS5sYWJlbENvbmZpZywgJ21lc3NhZ2VzLmVycm9yLjAyMCcpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc2hvd0Vycm9yTXNnKSB7XG4gICAgICB0aGlzLmltYWdlRmlsZSA9IGZpbGU7XG4gICAgICB0aGlzLmltYWdlVXBsb2FkTG9hZGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMuaW1hZ2VGb3JtVmFsaWQgPSB0cnVlO1xuICAgICAgdGhpcy5hc3Nlc3REYXRhID0gdGhpcy5nZW5lcmF0ZUFzc2V0Q3JlYXRlUmVxdWVzdChmaWxlTmFtZSwgZmlsZVR5cGUsICdpbWFnZScpO1xuICAgICAgdGhpcy5wb3B1bGF0ZUZvcm1EYXRhKHRoaXMuYXNzZXN0RGF0YSk7XG4gICAgfVxuICB9XG4gIHJlc2V0Rm9ybURhdGEoKSB7XG4gICAgdGhpcy5pbWFnZVVwbG9hZExvYWRlciA9IGZhbHNlO1xuICAgIHRoaXMuaW1hZ2VGb3JtVmFsaWQgPSBmYWxzZTtcbiAgICB0aGlzLmZvcm1Db25maWcgPSB0aGlzLmluaXRpYWxGb3JtQ29uZmlnO1xuICB9XG4gIHBvcHVsYXRlRm9ybURhdGEoZm9ybURhdGEpIHtcbiAgICBjb25zdCBmb3JtdmFsdWUgPSBfLmNsb25lRGVlcCh0aGlzLmZvcm1Db25maWcpO1xuICAgIHRoaXMuZm9ybUNvbmZpZyA9IG51bGw7XG4gICAgXy5mb3JFYWNoKGZvcm12YWx1ZSwgKGZvcm1GaWVsZENhdGVnb3J5KSA9PiB7XG4gICAgICBmb3JtRmllbGRDYXRlZ29yeS5kZWZhdWx0ID0gZm9ybURhdGFbZm9ybUZpZWxkQ2F0ZWdvcnkuY29kZV07XG4gICAgICBmb3JtRmllbGRDYXRlZ29yeS5lZGl0YWJsZSA9IHRydWU7XG4gICAgfSk7XG4gICAgdGhpcy5mb3JtQ29uZmlnID0gZm9ybXZhbHVlO1xuICB9XG4gIHVwbG9hZEFuZFVzZUltYWdlKG1vZGFsKSB7XG4gICAgdGhpcy5xdWVzdGlvblNlcnZpY2UuY3JlYXRlTWVkaWFBc3NldCh7IGNvbnRlbnQ6IHRoaXMuYXNzZXN0RGF0YSB9KS5waXBlKGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgIGNvbnN0IGVyckluZm8gPSB7IGVycm9yTXNnOiBfLmdldCh0aGlzLmNvbmZpZ1NlcnZpY2UubGFiZWxDb25maWcsICdtZXNzYWdlcy5lcnJvci4wMTknKSB9O1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IodGhpcy5lZGl0b3JTZXJ2aWNlLmFwaUVycm9ySGFuZGxpbmcoZXJyLCBlcnJJbmZvKSk7XG4gICAgfSkpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICBjb25zdCBpbWdJZCA9IHJlcy5yZXN1bHQubm9kZV9pZDtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICAgIGRhdGE6IHRoaXMuZm9ybURhdGFcbiAgICAgIH07XG4gICAgICB0aGlzLnF1ZXN0aW9uU2VydmljZS51cGxvYWRNZWRpYShyZXF1ZXN0LCBpbWdJZCkucGlwZShjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICAgIGNvbnN0IGVyckluZm8gPSB7IGVycm9yTXNnOiBfLmdldCh0aGlzLmNvbmZpZ1NlcnZpY2UubGFiZWxDb25maWcsICdtZXNzYWdlcy5lcnJvci4wMTknKSB9O1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcih0aGlzLmVkaXRvclNlcnZpY2UuYXBpRXJyb3JIYW5kbGluZyhlcnIsIGVyckluZm8pKTtcbiAgICAgIH0pKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGNvbnN0IHNpZ25lZFVSTCA9IHJlc3BvbnNlLnJlc3VsdC5wcmVfc2lnbmVkX3VybDtcbiAgICAgICAgbGV0IGJsb2JDb25maWcgPSB7XG4gICAgICAgICAgcHJvY2Vzc0RhdGE6IGZhbHNlLFxuICAgICAgICAgIGNvbnRlbnRUeXBlOiAnQXNzZXQnXG4gICAgICAgIH07XG4gICAgICAgIGJsb2JDb25maWcgPSB0aGlzLmVkaXRvclNlcnZpY2UuYXBwZW5kQ2xvdWRTdG9yYWdlSGVhZGVycyhibG9iQ29uZmlnKTtcbiAgICAgICAgdGhpcy51cGxvYWRUb0Jsb2Ioc2lnbmVkVVJMLCB0aGlzLmltYWdlRmlsZSwgYmxvYkNvbmZpZykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBmaWxlVVJMID0gc2lnbmVkVVJMLnNwbGl0KCc/JylbMF07XG4gICAgICAgICAgY29uc3QgZGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICAgIGRhdGEuYXBwZW5kKCdmaWxlVXJsJywgZmlsZVVSTCk7XG4gICAgICAgICAgZGF0YS5hcHBlbmQoJ21pbWVUeXBlJywgXy5nZXQodGhpcy5pbWFnZUZpbGUsICd0eXBlJykpO1xuICAgICAgICAgIGNvbnN0IGNvbmZpZzEgPSB7XG4gICAgICAgICAgICBlbmN0eXBlOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXG4gICAgICAgICAgICBwcm9jZXNzRGF0YTogZmFsc2UsXG4gICAgICAgICAgICBjb250ZW50VHlwZTogZmFsc2UsXG4gICAgICAgICAgICBjYWNoZTogZmFsc2VcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IHVwbG9hZE1lZGlhQ29uZmlnID0ge1xuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHBhcmFtOiBjb25maWcxXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uU2VydmljZS51cGxvYWRNZWRpYSh1cGxvYWRNZWRpYUNvbmZpZywgaW1nSWQpLnBpcGUoY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXJySW5mbyA9IHsgZXJyb3JNc2c6IF8uZ2V0KHRoaXMuY29uZmlnU2VydmljZS5sYWJlbENvbmZpZywgJ21lc3NhZ2VzLmVycm9yLjAxOScpIH07XG4gICAgICAgICAgICB0aGlzLmlzQ2xvc2FibGUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmltYWdlRm9ybVZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKHRoaXMuZWRpdG9yU2VydmljZS5hcGlFcnJvckhhbmRsaW5nKGVyciwgZXJySW5mbykpO1xuICAgICAgICAgIH0pKS5zdWJzY3JpYmUoKHJlc3BvbnNlMSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hZGRJbWFnZUluRWRpdG9yKHJlc3BvbnNlMS5yZXN1bHQuY29udGVudF91cmwsIHJlc3BvbnNlMS5yZXN1bHQubm9kZV9pZCk7XG4gICAgICAgICAgICB0aGlzLnNob3dJbWFnZVVwbG9hZE1vZGFsID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc21pc3NQb3BzKG1vZGFsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBnZW5lcmF0ZUFzc2V0Q3JlYXRlUmVxdWVzdChmaWxlTmFtZSwgZmlsZVR5cGUsIG1lZGlhVHlwZSkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBmaWxlTmFtZSxcbiAgICAgIG1lZGlhVHlwZSxcbiAgICAgIG1pbWVUeXBlOiBmaWxlVHlwZSxcbiAgICAgIGNyZWF0ZWRCeTogXy5nZXQodGhpcy5lZGl0b3JTZXJ2aWNlLmVkaXRvckNvbmZpZywgJ2NvbnRleHQudXNlci5pZCcpLFxuICAgICAgY3JlYXRvcjogXy5nZXQodGhpcy5lZGl0b3JTZXJ2aWNlLmVkaXRvckNvbmZpZywgJ2NvbnRleHQudXNlci5mdWxsTmFtZScpLFxuICAgICAgY2hhbm5lbDogXy5nZXQodGhpcy5lZGl0b3JTZXJ2aWNlLmVkaXRvckNvbmZpZywgJ2NvbnRleHQuY2hhbm5lbCcpXG4gICAgfTtcbiAgfVxuXG4gIHVwbG9hZFRvQmxvYihzaWduZWRVUkwsIGZpbGUsIGNvbmZpZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgY3NwID0gXy5nZXQodGhpcy5lZGl0b3JTZXJ2aWNlLmVkaXRvckNvbmZpZywgJ2NvbnRleHQuY2xvdWRTdG9yYWdlLnByb3ZpZGVyJywgJ2F6dXJlJyk7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xuICAgICAgY29uc3QgdXBsb2FkZXJMaWIgPSBuZXcgU3VuYmlyZEZpbGVVcGxvYWRMaWIuRmlsZVVwbG9hZGVyKCk7XG4gICAgICB1cGxvYWRlckxpYi51cGxvYWQoeyB1cmw6IHNpZ25lZFVSTCwgZmlsZSwgY3NwIH0pXG4gICAgICAgIC5vbihcImVycm9yXCIsIChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnN0IGVyckluZm8gPSB7IGVycm9yTXNnOiBfLmdldCh0aGlzLmNvbmZpZ1NlcnZpY2UubGFiZWxDb25maWcsICdtZXNzYWdlcy5lcnJvci4wMTgnKSB9O1xuICAgICAgICAgIHRoaXMuaXNDbG9zYWJsZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IodGhpcy5lZGl0b3JTZXJ2aWNlLmFwaUVycm9ySGFuZGxpbmcoZXJyb3IsIGVyckluZm8pKTtcbiAgICAgICAgfSkub24oXCJjb21wbGV0ZWRcIiwgKGNvbXBsZXRlZCkgPT4ge1xuICAgICAgICAgIG9ic2VydmVyLm5leHQoY29tcGxldGVkKTtcbiAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICB9KVxuICAgIH0pO1xuICB9XG5cblxuICBkaXNtaXNzSW1hZ2VVcGxvYWRNb2RhbCgpIHtcbiAgICB0aGlzLnNob3dJbWFnZVBpY2tlciA9IHRydWU7XG4gICAgdGhpcy5zaG93SW1hZ2VVcGxvYWRNb2RhbCA9IGZhbHNlO1xuICB9XG4gIG9wZW5JbWFnZVVwbG9hZE1vZGFsKCkge1xuICAgIHRoaXMuc2hvd0ltYWdlVXBsb2FkTW9kYWwgPSB0cnVlO1xuICAgIHRoaXMuZm9ybURhdGEgPSBudWxsO1xuICAgIHRoaXMuZm9ybUNvbmZpZyA9IHRoaXMuaW5pdGlhbEZvcm1Db25maWc7XG4gICAgdGhpcy5pbWFnZVVwbG9hZExvYWRlciA9IGZhbHNlO1xuICAgIHRoaXMuaW1hZ2VGb3JtVmFsaWQgPSBmYWxzZTtcbiAgICB0aGlzLnNob3dFcnJvck1zZyA9IGZhbHNlO1xuICB9XG4gIGRpc21pc3NQb3BzKG1vZGFsKSB7XG4gICAgdGhpcy5kaXNtaXNzSW1hZ2VQaWNrZXIoKTtcbiAgICBtb2RhbC5kZW55KCk7XG4gIH1cbiAgZGlzbWlzc0ltYWdlUGlja2VyKCkge1xuICAgIHRoaXMuc2hvd0ltYWdlUGlja2VyID0gZmFsc2U7XG4gICAgdGhpcy5tb2RhbERpc21pc3NFbWl0dGVyLmVtaXQoe30pXG4gIH1cbiAgc2VhcmNoSW1hZ2VzKGV2ZW50LCB0eXBlKSB7XG4gICAgaWYgKGV2ZW50ID09PSAnY2xlYXJJbnB1dCcgJiYgdHlwZSA9PT0gJ215SW1hZ2VzJykge1xuICAgICAgdGhpcy5xdWVyeSA9ICcnO1xuICAgICAgdGhpcy5zZWFyY2hNeUlucHV0ID0gJyc7XG4gICAgfSBlbHNlIGlmIChldmVudCA9PT0gJ2NsZWFySW5wdXQnICYmIHR5cGUgPT09ICdhbGxJbWFnZXMnKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gJyc7XG4gICAgICB0aGlzLnNlYXJjaEFsbElucHV0ID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucXVlcnkgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSAnbXlJbWFnZXMnKSB7XG4gICAgICB0aGlzLmdldE15SW1hZ2VzKDAsIHRoaXMucXVlcnksIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdldEFsbEltYWdlcygwLCB0aGlzLnF1ZXJ5LCB0cnVlKTtcbiAgICB9XG4gIH1cbiAgb25TdGF0dXNDaGFuZ2VzKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmlzVmFsaWQgJiYgdGhpcy5pbWFnZVVwbG9hZExvYWRlcikge1xuICAgICAgdGhpcy5pbWFnZUZvcm1WYWxpZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW1hZ2VGb3JtVmFsaWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgdmFsdWVDaGFuZ2VzKGV2ZW50KSB7XG4gICAgdGhpcy5hc3Nlc3REYXRhID0gXy5tZXJnZSh7fSwgdGhpcy5hc3Nlc3REYXRhLCBldmVudCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5tb2RhbCAmJiB0aGlzLm1vZGFsLmRlbnkpIHtcbiAgICAgIHRoaXMubW9kYWwuZGVueSgpO1xuICAgIH1cbiAgfVxuXG59XG4iLCI8c3VpLW1vZGFsIFtpc0Nsb3NhYmxlXT1cInRydWVcIiBjbGFzcz1cInNiLW1vZGFsIG92ZXJmbG93LW1vZGFsXCIgW2lzSW52ZXJ0ZWRdPVwiZmFsc2VcIiAoZGlzbWlzc2VkKT1cImRpc21pc3NJbWFnZVBpY2tlcigpXCJcbiAgKm5nSWY9XCJzaG93SW1hZ2VQaWNrZXJcIiBbc2l6ZV09XCInbm9ybWFsJ1wiIFtpc0Z1bGxTY3JlZW5dPVwiZmFsc2VcIiBbbXVzdFNjcm9sbF09XCJ0cnVlXCIgI21vZGFsPlxuICA8ZGl2IGNsYXNzPVwic2ItbW9kYWwtaGVhZGVyXCI+e3tjb25maWdTZXJ2aWNlLmxhYmVsQ29uZmlnPy5sYmw/LnNlbGVjdEltYWdlfX08L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInNiLW1vZGFsLWNvbnRlbnQgcC0wXCI+XG4gICAgPHN1aS10YWJzZXQ+XG4gICAgICA8ZGl2IGNsYXNzPVwic2ItdGFic2V0LW1lbnVcIj5cbiAgICAgICAgPGEgY2xhc3M9XCJzYi1pdGVtXCIgKGFjdGl2YXRlKT1cImdldE15SW1hZ2VzKDApXCIgc3VpVGFiSGVhZGVyPVwiMVwiPnt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8ubGJsPy5teUltYWdlc319PC9hPlxuICAgICAgICA8YSBjbGFzcz1cInNiLWl0ZW1cIiAoYWN0aXZhdGUpPVwiZ2V0QWxsSW1hZ2VzKDApXCIgc3VpVGFiSGVhZGVyPVwiMlwiPnt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8ubGJsPy5hbGxJbWFnZX19PC9hPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwidWkgc2VnbWVudCBzYi10YWJzZXQtc2VnbWVudCBtLTAgcHQtMTVcIiBpbmZpbml0ZVNjcm9sbCBbaW5maW5pdGVTY3JvbGxEaXN0YW5jZV09XCIyXCJcbiAgICAgICAgW2luZmluaXRlU2Nyb2xsVGhyb3R0bGVdPVwiNTAwXCIgW3Njcm9sbFdpbmRvd109XCJmYWxzZVwiIChzY3JvbGxlZCk9XCJsYXp5bG9hZE15SW1hZ2VzKClcIiBzdWlUYWJDb250ZW50PVwiMVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidWkgIHBiLTE2IGQtZmxleCBwbC0wXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNiLXNlYXJjaC1ib3ggc21hbGwgbm8tYnRuXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZGl2IHJlbGF0aXZlXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwic2VhcmNoIGljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgIDxpbnB1dCAoY2hhbmdlKT1cInNlYXJjaEltYWdlcygkZXZlbnQsICdteUltYWdlcycpXCIgY2xhc3M9XCJzYi1zZWFyY2gtaW5wdXRcIiBbKG5nTW9kZWwpXT1cInNlYXJjaE15SW5wdXRcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9e3tjb25maWdTZXJ2aWNlLmxhYmVsQ29uZmlnPy5sYmw/LnNlYXJjaFBsYWNlaG9sZGVyfX0gLz5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJjbG9zZSBpY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgKGNsaWNrKT1cInNlYXJjaEltYWdlcygnY2xlYXJJbnB1dCcsICdteUltYWdlcycpXCI+PC9pPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2ItYnRuIHNiLWJ0bi1ub3JtYWxcIj57e2NvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmJ1dHRvbl9sYWJlbHM/LnNlYXJjaF9idG5fbGFiZWx9fTwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxwIGNsYXNzPVwiZnMtMC05ODYgbWwtYXV0byBzYi1jb2xvci1ncmV5XCIgPnt7YXNzZXRzQ291bnR9fTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhbXlBc3NldHM/Lmxlbmd0aCAmJiBzZWFyY2hNeUlucHV0XCIgY2xhc3M9XCJmcy0wNzg1IG15LTEwXCI+IHt7ZW1wdHlTZWFyY2hNZXNzYWdlfX0gIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2ItZ3JpZC1sYXlvdXQgaW1hZ2VcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2ItdmlkZW8tY29udGVudFwiICpuZ0Zvcj1cImxldCBkYXRhIG9mIG15QXNzZXRzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2ItaW1hZ2Utc2VjdGlvbiByZWxhdGl2ZSBwb3NpdGlvblwiPlxuICAgICAgICAgICAgICA8aW1nIChjbGljayk9XCJhZGRJbWFnZUluRWRpdG9yKGRhdGEuZG93bmxvYWRVcmwsIGRhdGEuaWRlbnRpZmllcilcIiBhbHQ9XCJcIiBbc3JjXT1cImRhdGEuZG93bmxvYWRVcmxcIj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInVpIHNlZ21lbnQgc2ItdGFic2V0LXNlZ21lbnQgbS0wIHB0LTE1XCIgaW5maW5pdGVTY3JvbGwgW2luZmluaXRlU2Nyb2xsRGlzdGFuY2VdPVwiMlwiXG4gICAgICAgIFtpbmZpbml0ZVNjcm9sbFRocm90dGxlXT1cIjUwMFwiIFtzY3JvbGxXaW5kb3ddPVwiZmFsc2VcIiAoc2Nyb2xsZWQpPVwibGF6eWxvYWRBbGxJbWFnZXMoKVwiIHN1aVRhYkNvbnRlbnQ9XCIyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1aSAgcGItMTYgZC1mbGV4IHBsLTBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Itc2VhcmNoLWJveCBzbWFsbCBuby1idG5cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1kaXYgcmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJzZWFyY2ggaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgPGlucHV0IChjaGFuZ2UpPVwic2VhcmNoSW1hZ2VzKCRldmVudCwgJ2FsbEltYWdlcycpXCIgY2xhc3M9XCJzYi1zZWFyY2gtaW5wdXRcIiBbKG5nTW9kZWwpXT1cInNlYXJjaEFsbElucHV0XCJcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPXt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8ubGJsPy5zZWFyY2hQbGFjZWhvbGRlcn19IC8+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiY2xvc2UgaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIChjbGljayk9XCJzZWFyY2hJbWFnZXMoJ2NsZWFySW5wdXQnLCAnYWxsSW1hZ2VzJylcIj48L2k+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzYi1idG4gc2ItYnRuLW5vcm1hbFwiPnt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8uYnV0dG9uX2xhYmVscz8uc2VhcmNoX2J0bl9sYWJlbH19PC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHAgY2xhc3M9XCJmcy0wLTk4NiBtbC1hdXRvIHNiLWNvbG9yLWdyZXlcIiA+e3thc3NldHNDb3VudH19PC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFhbGxJbWFnZXM/Lmxlbmd0aCAmJiBzZWFyY2hBbGxJbnB1dFwiIGNsYXNzPVwiZnMtMDc4NVwiPiB7e2VtcHR5U2VhcmNoTWVzc2FnZX19IDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2ItZ3JpZC1sYXlvdXQgaW1hZ2VcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2ItdmlkZW8tY29udGVudFwiICpuZ0Zvcj1cImxldCBkYXRhIG9mIGFsbEltYWdlc1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNiLWltYWdlLXNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgPGltZyAoY2xpY2spPVwiYWRkSW1hZ2VJbkVkaXRvcihkYXRhLmRvd25sb2FkVXJsLCBkYXRhLmlkZW50aWZpZXIpXCIgYWx0PVwiXCIgW3NyY109XCJkYXRhLmRvd25sb2FkVXJsXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L3N1aS10YWJzZXQ+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwic2ItbW9kYWwtYWN0aW9ucyBmbGV4LWpjLXNwYWNlLWVuZFwiPlxuICAgIDxidXR0b24gKGNsaWNrKT1cIm9wZW5JbWFnZVVwbG9hZE1vZGFsKCk7XCIgY2xhc3M9XCJzYi1idG4gc2ItYnRuLXByaW1hcnkgc2ItYnRuLW5vcm1hbFwiPnt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8ubGJsPy51cGxvYWRBbmRVc2V9fTwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvc3VpLW1vZGFsPlxuPHN1aS1tb2RhbCBjbGFzcz1cInNiLW1vZGFsIG92ZXJmbG93LW1vZGFsXCIgW2lzQ2xvc2FibGVdPVwidHJ1ZVwiIFtpc0ludmVydGVkXT1cImZhbHNlXCJcbiAgKGRpc21pc3NlZCk9XCJkaXNtaXNzSW1hZ2VVcGxvYWRNb2RhbCgpXCIgKm5nSWY9XCJzaG93SW1hZ2VVcGxvYWRNb2RhbFwiIFtzaXplXT1cIidsYXJnZSdcIiBbaXNGdWxsU2NyZWVuXT1cImZhbHNlXCJcbiAgW211c3RTY3JvbGxdPVwidHJ1ZVwiIGFwcEJvZHlTY3JvbGwgI21vZGFsPlxuICA8ZGl2IGNsYXNzPVwic2ItbW9kYWwtaGVhZGVyXCI+e3tjb25maWdTZXJ2aWNlLmxhYmVsQ29uZmlnPy5sYmw/LnVwbG9hZEFuZFVzZX19PC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJwLTEwIHNiLWJnLXdoaXRlXCI+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInctNTBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICAgICAgICA8aDYgY2xhc3M9XCJtYi04IGZzLW5vcm1hbFwiPiB7e2NvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmxibD8uY2hvb3NlT3JEcmFnSW1hZ2V9fTxzcGFuIGNsYXNzPVwicmVkXCI+Kjwvc3Bhbj48L2g2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtaW1hZ2UtbW9kYWwtc2VjdGlvbiBkLWZsZXggZmxleC1haS1jZW50ZXIgZmxleC1qYy1jZW50ZXIgZmxleC1kY1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInVwbG9hZC1pbnB1dC1idXR0b24gc2ItYnRuIHNiLWJ0bi1zdWNjZXNzIHNiLWJ0bi1ub3JtYWxcIj5cbiAgICAgICAgICAgICAgICB7e2NvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmxibD8udXBsb2FkRnJvbUNvbXB1dGVyfX0gIFxuICAgICAgICAgICAgICAgIDxpbnB1dCAoY2hhbmdlKT1cInVwbG9hZEltYWdlKCRldmVudClcIiB0eXBlPVwiZmlsZVwiIFthY2NlcHRdPVwiYWNjZXB0SW1hZ2VUeXBlXCIgbmFtZT1cImFzc2V0ZmlsZVwiPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTEwIGZzLTAtNzg1IHNiLWNvbG9yLXByaW1hcnlcIiAqbmdJZj1cImltYWdlVXBsb2FkTG9hZGVyXCI+IHt7YXNzZXROYW1lfX0gPC9kaXY+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnNtYWxsIG10LThcIj57e2NvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmxibD8udXBsb2FkfX0gIHt7YXNzZXRDb25maWcuaW1hZ2UuYWNjZXB0ZWR9fSBcbiAgICAgICAgICAgICAgICAoe3tjb25maWdTZXJ2aWNlLmxhYmVsQ29uZmlnPy5sYmw/Lm1heEZpbGVTaXplfX0ge3thc3NldENvbmZpZy5pbWFnZS5zaXplfX17e2Fzc2V0Q29uZmlnLmltYWdlLnNpemVUeXBlfX0pPC9zcGFuPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0Vycm9yTXNnXCIgY2xhc3M9XCJzYi1jb2xvci1lcnJvciBmc21hbGwgbXQtOFwiPlxuICAgICAgICAgICAgICAgIDxwPnt7ZXJyb3JNc2d9fTwvcD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidWkgaW5mbyBtZXNzYWdlIHNiLWluZm8tYnhcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3RcIj5cbiAgICAgICAgICAgICAgPGxpIGNsYXNzPVwiZnMtMDc4NVwiPiB7e2NvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmxibD8uYWxsb3dlZEZpbGVUeXBlc319IHt7YXNzZXRDb25maWcuaW1hZ2UuYWNjZXB0ZWR9fTwvbGk+XG4gICAgICAgICAgICAgIDxsaSBjbGFzcz1cImZzLTA3ODVcIj4ge3tjb25maWdTZXJ2aWNlLmxhYmVsQ29uZmlnPy5sYmw/Lm1heGltdW1BbGxvd2VkRmlsZVNpemV9fSB7e2Fzc2V0Q29uZmlnLmltYWdlLnNpemV9fXt7YXNzZXRDb25maWcuaW1hZ2Uuc2l6ZVR5cGV9fTwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxoNiBjbGFzcz1cImZzLTA3ODVcIj57e2NvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmxibD8uY29weVJpZ2h0c0FuZExpY2Vuc2V9fTxzcGFuIGNsYXNzPVwicmVkXCI+Kjwvc3Bhbj48L2g2PlxuICAgICAgICAgIDxwIGNsYXNzPVwiZnNtYWxsIG10LTggdGVybXMtYW5kLWNvbmRpdGlvblwiPnt7dGVybXNBbmRDb25kaXRpb259fTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ3LTUwIHBsLTEwIG1sLTEwIGItYmxcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInVpIGluZm8gbWVzc2FnZSBzYi1pbmZvLWJ4IG1iLTBcIj5cbiAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0XCI+XG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJmcy0wNzg1IGZvbnQtd2VpZ2h0LWJvbGRcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uIGluZm8gY2lyY2xlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICB7e2NvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmxibD8uZHJvcENob29zZUZpbGV9fSA8L2xpPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2ItZm9ybS1maWVsZHNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jb250YWluZXIgdXBsb2FkLWZvcm1cIj5cbiAgICAgICAgICAgIDxzYi1keW5hbWljLWZvcm0gW2NvbmZpZ109XCJmb3JtQ29uZmlnXCIgXG4gICAgICAgICAgICAgIChzdGF0dXNDaGFuZ2VzKT1cIm9uU3RhdHVzQ2hhbmdlcygkZXZlbnQpXCIgKHZhbHVlQ2hhbmdlcyk9XCJ2YWx1ZUNoYW5nZXMoJGV2ZW50KVwiPjwvc2ItZHluYW1pYy1mb3JtPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJzYi1tb2RhbC1hY3Rpb25zIGZsZXgtamMtc3BhY2UtYmV0d2VlbiBwLTBcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxidXR0b24gKGNsaWNrKT1cImRpc21pc3NQb3BzKG1vZGFsKTtcIiBjbGFzcz1cIm1yLTEwIHNiLWJ0biBzYi1idG4tcHJpbWFyeSBzYi1idG4tbm9ybWFsXCI+e3tjb25maWdTZXJ2aWNlLmxhYmVsQ29uZmlnPy5idXR0b25fbGFiZWxzPy5jYW5jZWxfYnRuX2xhYmVsfX08L2J1dHRvbj5cblxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJ1cGxvYWRBbmRVc2VJbWFnZShtb2RhbCk7XCIgW2Rpc2FibGVkXT1cIiFpbWFnZUZvcm1WYWxpZFwiIFxuICAgICAgICBbbmdDbGFzc109XCJ7J3NiLWJ0bi1wcmltYXJ5JzogaW1hZ2VGb3JtVmFsaWQsICdzYi1idG4tZGlzYWJsZWQnOiAhaW1hZ2VGb3JtVmFsaWR9XCJcbiAgICAgICAgY2xhc3M9XCJzYi1idG4gIHNiLWJ0bi1ub3JtYWwgdGV4dC1sZWZ0XCI+e3tjb25maWdTZXJ2aWNlLmxhYmVsQ29uZmlnPy5idXR0b25fbGFiZWxzPy51cGxvYWRfdXNlX2J0bl9sYWJlbH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxidXR0b24gKGNsaWNrKT1cImRpc21pc3NJbWFnZVVwbG9hZE1vZGFsKCk7XCIgY2xhc3M9XCIgc2ItYnRuIHNiLWJ0bi1wcmltYXJ5IHNiLWJ0bi1ub3JtYWxcIj57e2NvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmJ1dHRvbl9sYWJlbHM/LmJhY2tfYnRuX2xhYmVsfX08L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvc3VpLW1vZGFsPiJdfQ==
@@ -0,0 +1,53 @@
1
+ export const config = {
2
+ uploadIconFormConfig: [{
3
+ 'code': 'name',
4
+ 'dataType': 'text',
5
+ 'editable': false,
6
+ 'inputType': 'text',
7
+ 'label': 'Asset Caption',
8
+ 'name': 'Asset Caption',
9
+ 'placeholder': 'Enter asset caption',
10
+ 'renderingHints': {
11
+ 'class': 'sb-g-col-lg-2 required'
12
+ },
13
+ 'required': true,
14
+ 'visible': true,
15
+ 'validations': [
16
+ {
17
+ 'type': 'required',
18
+ 'message': 'Please enter asset caption'
19
+ }
20
+ ]
21
+ },
22
+ {
23
+ 'code': 'keywords',
24
+ 'visible': true,
25
+ 'editable': false,
26
+ 'dataType': 'list',
27
+ 'name': 'Tags',
28
+ 'placeholder': 'Add tag',
29
+ 'renderingHints': {
30
+ 'class': 'sb-g-col-lg-2'
31
+ },
32
+ 'description': '',
33
+ 'inputType': 'keywords',
34
+ 'label': 'Tags',
35
+ 'required': true,
36
+ 'validations': []
37
+ },
38
+ {
39
+ 'code': 'creator',
40
+ 'dataType': 'text',
41
+ 'editable': false,
42
+ 'inputType': 'text',
43
+ 'label': 'Creator',
44
+ 'name': 'Creator',
45
+ 'placeholder': 'Enter name',
46
+ 'renderingHints': {
47
+ 'class': 'sb-g-col-lg-2'
48
+ },
49
+ 'required': true,
50
+ 'visible': true
51
+ }]
52
+ };
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtYnJvd3Nlci5kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29sbGVjdGlvbi1lZGl0b3ItbGlicmFyeS9zcmMvbGliL2NvbXBvbmVudHMvYXNzZXQtYnJvd3Nlci9hc3NldC1icm93c2VyLmRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHO0lBQ2xCLG9CQUFvQixFQUNoQixDQUFDO1lBQ0csTUFBTSxFQUFFLE1BQU07WUFDZCxVQUFVLEVBQUUsTUFBTTtZQUNsQixVQUFVLEVBQUUsS0FBSztZQUNqQixXQUFXLEVBQUUsTUFBTTtZQUNuQixPQUFPLEVBQUUsZUFBZTtZQUN4QixNQUFNLEVBQUUsZUFBZTtZQUN2QixhQUFhLEVBQUUscUJBQXFCO1lBQ3BDLGdCQUFnQixFQUFFO2dCQUNkLE9BQU8sRUFBRSx3QkFBd0I7YUFDcEM7WUFDRCxVQUFVLEVBQUUsSUFBSTtZQUNoQixTQUFTLEVBQUUsSUFBSTtZQUNmLGFBQWEsRUFBRTtnQkFDWDtvQkFDSSxNQUFNLEVBQUUsVUFBVTtvQkFDbEIsU0FBUyxFQUFFLDRCQUE0QjtpQkFDMUM7YUFDSjtTQUNKO1FBQ0Q7WUFDSSxNQUFNLEVBQUUsVUFBVTtZQUNsQixTQUFTLEVBQUUsSUFBSTtZQUNmLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLE1BQU0sRUFBRSxNQUFNO1lBQ2QsYUFBYSxFQUFFLFNBQVM7WUFDeEIsZ0JBQWdCLEVBQUU7Z0JBQ2QsT0FBTyxFQUFFLGVBQWU7YUFDM0I7WUFDRCxhQUFhLEVBQUUsRUFBRTtZQUNqQixXQUFXLEVBQUUsVUFBVTtZQUN2QixPQUFPLEVBQUUsTUFBTTtZQUNmLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLGFBQWEsRUFBRSxFQUFFO1NBQ3BCO1FBQ0Q7WUFDSSxNQUFNLEVBQUUsU0FBUztZQUNqQixVQUFVLEVBQUUsTUFBTTtZQUNsQixVQUFVLEVBQUUsS0FBSztZQUNqQixXQUFXLEVBQUUsTUFBTTtZQUNuQixPQUFPLEVBQUUsU0FBUztZQUNsQixNQUFNLEVBQUUsU0FBUztZQUNqQixhQUFhLEVBQUUsWUFBWTtZQUMzQixnQkFBZ0IsRUFBRTtnQkFDZCxPQUFPLEVBQUUsZUFBZTthQUMzQjtZQUNELFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFNBQVMsRUFBRSxJQUFJO1NBQ2xCLENBQUM7Q0FDVCxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGNvbmZpZyA9IHtcbiAgICB1cGxvYWRJY29uRm9ybUNvbmZpZzpcbiAgICAgICAgW3tcbiAgICAgICAgICAgICdjb2RlJzogJ25hbWUnLFxuICAgICAgICAgICAgJ2RhdGFUeXBlJzogJ3RleHQnLFxuICAgICAgICAgICAgJ2VkaXRhYmxlJzogZmFsc2UsXG4gICAgICAgICAgICAnaW5wdXRUeXBlJzogJ3RleHQnLFxuICAgICAgICAgICAgJ2xhYmVsJzogJ0Fzc2V0IENhcHRpb24nLFxuICAgICAgICAgICAgJ25hbWUnOiAnQXNzZXQgQ2FwdGlvbicsXG4gICAgICAgICAgICAncGxhY2Vob2xkZXInOiAnRW50ZXIgYXNzZXQgY2FwdGlvbicsXG4gICAgICAgICAgICAncmVuZGVyaW5nSGludHMnOiB7XG4gICAgICAgICAgICAgICAgJ2NsYXNzJzogJ3NiLWctY29sLWxnLTIgcmVxdWlyZWQnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ3JlcXVpcmVkJzogdHJ1ZSxcbiAgICAgICAgICAgICd2aXNpYmxlJzogdHJ1ZSxcbiAgICAgICAgICAgICd2YWxpZGF0aW9ucyc6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICd0eXBlJzogJ3JlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiAnUGxlYXNlIGVudGVyIGFzc2V0IGNhcHRpb24nXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICAnY29kZSc6ICdrZXl3b3JkcycsXG4gICAgICAgICAgICAndmlzaWJsZSc6IHRydWUsXG4gICAgICAgICAgICAnZWRpdGFibGUnOiBmYWxzZSxcbiAgICAgICAgICAgICdkYXRhVHlwZSc6ICdsaXN0JyxcbiAgICAgICAgICAgICduYW1lJzogJ1RhZ3MnLFxuICAgICAgICAgICAgJ3BsYWNlaG9sZGVyJzogJ0FkZCB0YWcnLFxuICAgICAgICAgICAgJ3JlbmRlcmluZ0hpbnRzJzoge1xuICAgICAgICAgICAgICAgICdjbGFzcyc6ICdzYi1nLWNvbC1sZy0yJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICcnLFxuICAgICAgICAgICAgJ2lucHV0VHlwZSc6ICdrZXl3b3JkcycsXG4gICAgICAgICAgICAnbGFiZWwnOiAnVGFncycsXG4gICAgICAgICAgICAncmVxdWlyZWQnOiB0cnVlLFxuICAgICAgICAgICAgJ3ZhbGlkYXRpb25zJzogW11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgJ2NvZGUnOiAnY3JlYXRvcicsXG4gICAgICAgICAgICAnZGF0YVR5cGUnOiAndGV4dCcsXG4gICAgICAgICAgICAnZWRpdGFibGUnOiBmYWxzZSxcbiAgICAgICAgICAgICdpbnB1dFR5cGUnOiAndGV4dCcsXG4gICAgICAgICAgICAnbGFiZWwnOiAnQ3JlYXRvcicsXG4gICAgICAgICAgICAnbmFtZSc6ICdDcmVhdG9yJyxcbiAgICAgICAgICAgICdwbGFjZWhvbGRlcic6ICdFbnRlciBuYW1lJyxcbiAgICAgICAgICAgICdyZW5kZXJpbmdIaW50cyc6IHtcbiAgICAgICAgICAgICAgICAnY2xhc3MnOiAnc2ItZy1jb2wtbGctMidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAncmVxdWlyZWQnOiB0cnVlLFxuICAgICAgICAgICAgJ3Zpc2libGUnOiB0cnVlXG4gICAgICAgIH1dXG59Il19