@smartbit4all/ng-client 2.2.2 → 3.0.1

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 (422) hide show
  1. package/esm2020/lib/component-factory-service/component-factory-service.module.mjs +17 -0
  2. package/esm2020/lib/component-factory-service/component-factory-service.service.mjs +35 -0
  3. package/esm2020/lib/component-factory-service/projects.mjs +6 -0
  4. package/esm2020/lib/session/dev-tool/smart-dev-tool-dialog/smart-dev-tool-dialog.component.mjs +1 -1
  5. package/esm2020/lib/session/dev-tool/smart-dev-tool-dialog/smart-dev-tool-dialog.service.mjs +5 -5
  6. package/esm2020/lib/session/dev-tool/smart-dev-tool-floating-button/smart-dev-tool-floating-button.component.mjs +1 -1
  7. package/esm2020/lib/session/dev-tool/smart-dev-tool.service.mjs +2 -2
  8. package/esm2020/lib/session/smart-session.module.mjs +18 -18
  9. package/esm2020/lib/session/smart-session.service.mjs +2 -2
  10. package/esm2020/lib/session/smart-timer/smart-session-timer.service.mjs +2 -2
  11. package/esm2020/lib/smart-client/smart-authentication.service.mjs +2 -2
  12. package/esm2020/lib/smart-client/smart-component-api-client.mjs +2 -3
  13. package/esm2020/lib/smart-client/smart-file-uploader/smart-file-uploader.component.mjs +2 -2
  14. package/esm2020/lib/smart-component-layout/api/api/api.mjs +4 -0
  15. package/esm2020/lib/smart-component-layout/api/api/default.service.mjs +133 -0
  16. package/esm2020/lib/smart-component-layout/api/api.module.mjs +40 -0
  17. package/esm2020/lib/smart-component-layout/api/configuration.mjs +91 -0
  18. package/esm2020/lib/smart-component-layout/api/encoder.mjs +19 -0
  19. package/esm2020/lib/smart-component-layout/api/index.mjs +7 -0
  20. package/esm2020/lib/smart-component-layout/api/model/componentType.mjs +17 -0
  21. package/esm2020/lib/smart-component-layout/api/model/componentWidgetType.mjs +17 -0
  22. package/esm2020/lib/smart-component-layout/api/model/layoutDirection.mjs +16 -0
  23. package/esm2020/lib/smart-component-layout/api/model/models.mjs +6 -0
  24. package/esm2020/lib/smart-component-layout/api/model/smartComponentLayoutDefinition.mjs +2 -0
  25. package/esm2020/lib/smart-component-layout/api/model/smartComponentWidgetDefinition.mjs +2 -0
  26. package/esm2020/lib/smart-component-layout/api/param.mjs +2 -0
  27. package/esm2020/lib/smart-component-layout/api/variables.mjs +9 -0
  28. package/esm2020/lib/smart-component-layout/projects.mjs +8 -0
  29. package/esm2020/lib/smart-component-layout/smart-component-layout-utility.mjs +7 -0
  30. package/esm2020/lib/smart-component-layout/smart-component-layout.component.mjs +123 -0
  31. package/esm2020/lib/smart-component-layout/smart-component-layout.module.mjs +43 -0
  32. package/esm2020/lib/smart-dialog/projects.mjs +8 -0
  33. package/esm2020/lib/smart-dialog/smartdialog.component.mjs +54 -0
  34. package/esm2020/lib/smart-dialog/smartdialog.model.mjs +16 -0
  35. package/esm2020/lib/smart-dialog/smartdialog.module.mjs +49 -0
  36. package/esm2020/lib/smart-dialog/smartdialog.service.mjs +60 -0
  37. package/esm2020/lib/smart-expandable-section/expandable-section.component.mjs +82 -0
  38. package/esm2020/lib/smart-expandable-section/expandable-section.model.mjs +12 -0
  39. package/esm2020/lib/smart-expandable-section/projects.mjs +8 -0
  40. package/esm2020/lib/smart-expandable-section/smart-expandable-section.module.mjs +51 -0
  41. package/esm2020/lib/smart-expandable-section/smart-expandable-section.service.mjs +14 -0
  42. package/esm2020/lib/smart-filter/api/filter/model/filterExpressionBoolOperator.mjs +16 -0
  43. package/esm2020/lib/smart-filter/api/filter/model/filterExpressionBuilderField.mjs +2 -0
  44. package/esm2020/lib/smart-filter/api/filter/model/filterExpressionBuilderGroup.mjs +9 -0
  45. package/esm2020/lib/smart-filter/api/filter/model/filterExpressionBuilderModel.mjs +2 -0
  46. package/esm2020/lib/smart-filter/api/filter/model/filterExpressionData.mjs +2 -0
  47. package/esm2020/lib/smart-filter/api/filter/model/filterExpressionDataType.mjs +19 -0
  48. package/esm2020/lib/smart-filter/api/filter/model/filterExpressionField.mjs +2 -0
  49. package/esm2020/lib/smart-filter/api/filter/model/filterExpressionFieldList.mjs +2 -0
  50. package/esm2020/lib/smart-filter/api/filter/model/filterExpressionFieldWidgetType.mjs +25 -0
  51. package/esm2020/lib/smart-filter/api/filter/model/filterExpressionList.mjs +2 -0
  52. package/esm2020/lib/smart-filter/api/filter/model/filterExpressionOperandData.mjs +2 -0
  53. package/esm2020/lib/smart-filter/api/filter/model/filterExpressionOperation.mjs +31 -0
  54. package/esm2020/lib/smart-filter/api/filter/model/filterExpressionOrderBy.mjs +19 -0
  55. package/esm2020/lib/smart-filter/api/filter/model/model.mjs +16 -0
  56. package/esm2020/lib/smart-filter/api/filter/model/searchIndexObjectDefinitionData.mjs +2 -0
  57. package/esm2020/lib/smart-filter/api/filter/model/searchIndexPropertyDefinitionData.mjs +13 -0
  58. package/esm2020/lib/smart-filter/api/value/model/value.mjs +13 -0
  59. package/esm2020/lib/smart-filter/projects.mjs +9 -0
  60. package/esm2020/lib/smart-filter/smart-filter/components/smart-filter-expression-field/smart-filter-expression-field.component.mjs +14 -0
  61. package/esm2020/lib/smart-filter/smart-filter/components/smart-filter-simple/components/smart-filter-simple-field/smart-filter-simple-field.component.mjs +159 -0
  62. package/esm2020/lib/smart-filter/smart-filter/components/smart-filter-simple/smart-filter-simple.component.mjs +45 -0
  63. package/esm2020/lib/smart-filter/smart-filter/smart-filter.component.mjs +36 -0
  64. package/esm2020/lib/smart-filter/smart-filter/smart-filter.service.mjs +31 -0
  65. package/esm2020/lib/smart-filter/smart-filter.model.mjs +13 -0
  66. package/esm2020/lib/smart-filter/smart-filter.module.mjs +33 -0
  67. package/esm2020/lib/smart-form/api/api/api.mjs +4 -0
  68. package/esm2020/lib/smart-form/api/api/default.service.mjs +133 -0
  69. package/esm2020/lib/smart-form/api/api.module.mjs +40 -0
  70. package/esm2020/lib/smart-form/api/configuration.mjs +91 -0
  71. package/esm2020/lib/smart-form/api/encoder.mjs +19 -0
  72. package/esm2020/lib/smart-form/api/index.mjs +7 -0
  73. package/esm2020/lib/smart-form/api/model/models.mjs +8 -0
  74. package/esm2020/lib/smart-form/api/model/propertyMapping.mjs +13 -0
  75. package/esm2020/lib/smart-form/api/model/selectionDefinition.mjs +8 -0
  76. package/esm2020/lib/smart-form/api/model/smartFormWidgetDirection.mjs +16 -0
  77. package/esm2020/lib/smart-form/api/model/smartFormWidgetType.mjs +44 -0
  78. package/esm2020/lib/smart-form/api/model/smartLayoutDefinition.mjs +2 -0
  79. package/esm2020/lib/smart-form/api/model/smartMatrixModel.mjs +2 -0
  80. package/esm2020/lib/smart-form/api/model/smartWidgetDefinition.mjs +2 -0
  81. package/esm2020/lib/smart-form/api/param.mjs +2 -0
  82. package/esm2020/lib/smart-form/api/variables.mjs +9 -0
  83. package/esm2020/lib/smart-form/projects.mjs +13 -0
  84. package/esm2020/lib/smart-form/services/smartform.layout-definition.service.mjs +397 -0
  85. package/esm2020/lib/smart-form/services/smartform.service.mjs +483 -0
  86. package/esm2020/lib/smart-form/smartfileuploader/large-file-snack-bar/large-file-snack-bar.component.mjs +14 -0
  87. package/esm2020/lib/smart-form/smartfileuploader/smartfileuploader.component.mjs +78 -0
  88. package/esm2020/lib/smart-form/smartfileuploader/smartfileuploader.model.mjs +2 -0
  89. package/esm2020/lib/smart-form/smartform.component.mjs +117 -0
  90. package/esm2020/lib/smart-form/smartform.form-model.mjs +2 -0
  91. package/esm2020/lib/smart-form/smartform.model.mjs +38 -0
  92. package/esm2020/lib/smart-form/smartform.module.mjs +146 -0
  93. package/esm2020/lib/smart-form/widgets/components/smart-month-picker/smart-month-picker.component.mjs +76 -0
  94. package/esm2020/lib/smart-form/widgets/smartformwidget/smartformwidget.component.mjs +589 -0
  95. package/esm2020/lib/smart-form/widgets/smartformwidget/sortable-widget/sortable-widget.component.mjs +59 -0
  96. package/esm2020/lib/smart-form/widgets/smartformwidget/trackCaps.directive.mjs +31 -0
  97. package/esm2020/lib/smart-grid/api/grid-api/api/api.mjs +4 -0
  98. package/esm2020/lib/smart-grid/api/grid-api/api/grid.service.mjs +372 -0
  99. package/esm2020/lib/smart-grid/api/grid-api/api.module.mjs +40 -0
  100. package/esm2020/lib/smart-grid/api/grid-api/configuration.mjs +72 -0
  101. package/esm2020/lib/smart-grid/api/grid-api/encoder.mjs +19 -0
  102. package/esm2020/lib/smart-grid/api/grid-api/index.mjs +6 -0
  103. package/esm2020/lib/smart-grid/api/grid-api/model/gridColumnMeta.mjs +13 -0
  104. package/esm2020/lib/smart-grid/api/grid-api/model/gridDataAccessConfig.mjs +21 -0
  105. package/esm2020/lib/smart-grid/api/grid-api/model/gridModel.mjs +2 -0
  106. package/esm2020/lib/smart-grid/api/grid-api/model/gridPage.mjs +2 -0
  107. package/esm2020/lib/smart-grid/api/grid-api/model/gridRow.mjs +2 -0
  108. package/esm2020/lib/smart-grid/api/grid-api/model/gridSelectionMode.mjs +17 -0
  109. package/esm2020/lib/smart-grid/api/grid-api/model/gridSelectionType.mjs +16 -0
  110. package/esm2020/lib/smart-grid/api/grid-api/model/gridServerModel.mjs +2 -0
  111. package/esm2020/lib/smart-grid/api/grid-api/model/gridUpdateData.mjs +2 -0
  112. package/esm2020/lib/smart-grid/api/grid-api/model/gridView.mjs +2 -0
  113. package/esm2020/lib/smart-grid/api/grid-api/model/gridViewDescriptor.mjs +8 -0
  114. package/esm2020/lib/smart-grid/api/grid-api/model/models.mjs +12 -0
  115. package/esm2020/lib/smart-grid/api/grid-api/variables.mjs +9 -0
  116. package/esm2020/lib/smart-grid/components/expandable-grid/expandable-grid.component.mjs +20 -0
  117. package/esm2020/lib/smart-grid/components/smart-grid-card/smart-grid-card.component.mjs +56 -0
  118. package/esm2020/lib/smart-grid/components/table-layout-definer/table-layout-definer.component.mjs +166 -0
  119. package/esm2020/lib/smart-grid/models/model.mjs +28 -0
  120. package/esm2020/lib/smart-grid/projects.mjs +9 -0
  121. package/esm2020/lib/smart-grid/smart-grid.component.mjs +452 -0
  122. package/esm2020/lib/smart-grid/smart-grid.module.mjs +69 -0
  123. package/esm2020/lib/smart-grid/smart-grid.service.mjs +71 -0
  124. package/esm2020/lib/smart-icon/projects.mjs +7 -0
  125. package/esm2020/lib/smart-icon/smart-icon/smart-icon.component.mjs +48 -0
  126. package/esm2020/lib/smart-icon/smart-icon.module.mjs +22 -0
  127. package/esm2020/lib/smart-icon/smart-icon.service.mjs +45 -0
  128. package/esm2020/lib/smart-navbar/projects.mjs +8 -0
  129. package/esm2020/lib/smart-navbar/smart-navbar.component.mjs +61 -0
  130. package/esm2020/lib/smart-navbar/smart-navbar.model.mjs +6 -0
  131. package/esm2020/lib/smart-navbar/smart-navbar.module.mjs +65 -0
  132. package/esm2020/lib/smart-navbar/smart-navbar.service.mjs +14 -0
  133. package/esm2020/lib/smart-navigation/projects.mjs +6 -0
  134. package/esm2020/lib/smart-navigation/smart-navigation.interface.mjs +2 -0
  135. package/esm2020/lib/smart-navigation/smart-navigation.module.mjs +18 -0
  136. package/esm2020/lib/smart-navigation/smart-navigation.service.mjs +56 -0
  137. package/esm2020/lib/smart-ng-client.module.mjs +16 -4
  138. package/esm2020/lib/smart-subject/projects.mjs +5 -0
  139. package/esm2020/lib/smart-subject/smart-subject.mjs +21 -0
  140. package/esm2020/lib/smart-tab-group/projects.mjs +8 -0
  141. package/esm2020/lib/smart-tab-group/smart-tab-group.component.mjs +43 -0
  142. package/esm2020/lib/smart-tab-group/smart-tab-group.module.mjs +25 -0
  143. package/esm2020/lib/smart-tab-group/smart-tab-group.service.mjs +14 -0
  144. package/esm2020/lib/smart-tab-group/tab-content/tab-content.component.mjs +31 -0
  145. package/esm2020/lib/smart-tab-group/tab-group-simplified/tab-group.component.mjs +66 -0
  146. package/esm2020/lib/smart-tab-group/tabTile.model.mjs +2 -0
  147. package/esm2020/lib/smart-table/components/loading/loading.component.mjs +15 -0
  148. package/esm2020/lib/smart-table/projects.mjs +9 -0
  149. package/esm2020/lib/smart-table/smarttable.component.mjs +98 -0
  150. package/esm2020/lib/smart-table/smarttable.date-pipe.mjs +43 -0
  151. package/esm2020/lib/smart-table/smarttable.model.mjs +167 -0
  152. package/esm2020/lib/smart-table/smarttable.module.mjs +89 -0
  153. package/esm2020/lib/smart-table/smarttable.service.mjs +14 -0
  154. package/esm2020/lib/smart-table/tables/material-table/material-table.component.mjs +36 -0
  155. package/esm2020/lib/smart-table/tables/mobile-table/mobile-table.component.mjs +22 -0
  156. package/esm2020/lib/smart-table/tables/table.mjs +411 -0
  157. package/esm2020/lib/smart-tree/smarttree.component.mjs +2 -2
  158. package/esm2020/lib/smart-tree/smarttree.model.mjs +1 -1
  159. package/esm2020/lib/smart-tree/smarttree.module.mjs +2 -2
  160. package/esm2020/lib/smart-tree/smarttree.service.interface.mjs +1 -1
  161. package/esm2020/lib/smart-tree/smarttree.service.mjs +1 -1
  162. package/esm2020/lib/view-context/api/api/api.mjs +1 -1
  163. package/esm2020/lib/view-context/api/api/view.service.mjs +1 -1
  164. package/esm2020/lib/view-context/api/api.module.mjs +1 -1
  165. package/esm2020/lib/view-context/api/configuration.mjs +1 -1
  166. package/esm2020/lib/view-context/api/encoder.mjs +1 -1
  167. package/esm2020/lib/view-context/api/index.mjs +1 -1
  168. package/esm2020/lib/view-context/api/model/closeResult.mjs +1 -1
  169. package/esm2020/lib/view-context/api/model/componentConstraint.mjs +1 -1
  170. package/esm2020/lib/view-context/api/model/componentModel.mjs +1 -1
  171. package/esm2020/lib/view-context/api/model/componentModelChange.mjs +1 -1
  172. package/esm2020/lib/view-context/api/model/dataChange.mjs +1 -1
  173. package/esm2020/lib/view-context/api/model/dataChangeEvent.mjs +1 -1
  174. package/esm2020/lib/view-context/api/model/dataChangeKind.mjs +1 -1
  175. package/esm2020/lib/view-context/api/model/messageData.mjs +1 -1
  176. package/esm2020/lib/view-context/api/model/messageOption.mjs +1 -1
  177. package/esm2020/lib/view-context/api/model/messageOptionType.mjs +1 -1
  178. package/esm2020/lib/view-context/api/model/messageResult.mjs +1 -1
  179. package/esm2020/lib/view-context/api/model/messageType.mjs +1 -1
  180. package/esm2020/lib/view-context/api/model/models.mjs +1 -1
  181. package/esm2020/lib/view-context/api/model/openPendingData.mjs +1 -1
  182. package/esm2020/lib/view-context/api/model/smartLinkData.mjs +1 -1
  183. package/esm2020/lib/view-context/api/model/uiAction.mjs +1 -1
  184. package/esm2020/lib/view-context/api/model/uiActionButtonDescriptor.mjs +1 -1
  185. package/esm2020/lib/view-context/api/model/uiActionButtonIconPos.mjs +1 -1
  186. package/esm2020/lib/view-context/api/model/uiActionButtonType.mjs +1 -1
  187. package/esm2020/lib/view-context/api/model/uiActionConstraint.mjs +1 -1
  188. package/esm2020/lib/view-context/api/model/uiActionDescriptor.mjs +1 -1
  189. package/esm2020/lib/view-context/api/model/uiActionDialogDescriptor.mjs +1 -1
  190. package/esm2020/lib/view-context/api/model/uiActionFeedbackType.mjs +1 -1
  191. package/esm2020/lib/view-context/api/model/uiActionInputType.mjs +1 -1
  192. package/esm2020/lib/view-context/api/model/uiActionRequest.mjs +1 -1
  193. package/esm2020/lib/view-context/api/model/uiActionUploadDescriptor.mjs +1 -1
  194. package/esm2020/lib/view-context/api/model/valueSet.mjs +1 -1
  195. package/esm2020/lib/view-context/api/model/view.mjs +1 -1
  196. package/esm2020/lib/view-context/api/model/viewApiError.mjs +1 -1
  197. package/esm2020/lib/view-context/api/model/viewConstraint.mjs +1 -1
  198. package/esm2020/lib/view-context/api/model/viewContext.mjs +1 -1
  199. package/esm2020/lib/view-context/api/model/viewContextChange.mjs +1 -1
  200. package/esm2020/lib/view-context/api/model/viewContextData.mjs +1 -1
  201. package/esm2020/lib/view-context/api/model/viewContextUpdate.mjs +1 -1
  202. package/esm2020/lib/view-context/api/model/viewData.mjs +1 -1
  203. package/esm2020/lib/view-context/api/model/viewState.mjs +1 -1
  204. package/esm2020/lib/view-context/api/model/viewStateUpdate.mjs +1 -1
  205. package/esm2020/lib/view-context/api/model/viewType.mjs +1 -1
  206. package/esm2020/lib/view-context/api/param.mjs +1 -1
  207. package/esm2020/lib/view-context/api/variables.mjs +1 -1
  208. package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.component.mjs +1 -1
  209. package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.service.mjs +3 -3
  210. package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.mjs +3 -3
  211. package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.service.mjs +3 -3
  212. package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.mjs +8 -7
  213. package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.service.mjs +3 -3
  214. package/esm2020/lib/view-context/smart-ui-action/ui-action-toolbar.component.mjs +4 -3
  215. package/esm2020/lib/view-context/smart-ui-action/ui-action.descriptor.service.mjs +2 -2
  216. package/esm2020/lib/view-context/smart-ui-action/ui-action.model.mjs +1 -1
  217. package/esm2020/lib/view-context/smart-ui-action/ui-action.service.mjs +2 -2
  218. package/esm2020/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.mjs +2 -2
  219. package/esm2020/lib/view-context/smart-view-context.module.mjs +3 -3
  220. package/esm2020/lib/view-context/smart-view-context.service.mjs +4 -4
  221. package/esm2020/lib/view-context/smart-view-redirect/smart-view-redirect.mjs +9 -9
  222. package/esm2020/lib/view-context/value-api/model/valueSetData.mjs +1 -1
  223. package/esm2020/projects.mjs +15 -3
  224. package/fesm2015/smartbit4all-ng-client.mjs +9465 -3578
  225. package/fesm2015/smartbit4all-ng-client.mjs.map +1 -1
  226. package/fesm2020/smartbit4all-ng-client.mjs +9275 -3460
  227. package/fesm2020/smartbit4all-ng-client.mjs.map +1 -1
  228. package/lib/component-factory-service/component-factory-service.module.d.ts +6 -0
  229. package/lib/component-factory-service/component-factory-service.service.d.ts +13 -0
  230. package/lib/component-factory-service/projects.d.ts +2 -0
  231. package/lib/session/dev-tool/smart-dev-tool-dialog/smart-dev-tool-dialog.service.d.ts +1 -1
  232. package/lib/session/smart-session.module.d.ts +1 -1
  233. package/lib/smart-client/smart-component-api-client.d.ts +3 -4
  234. package/lib/smart-client/smart-file-uploader/smart-file-uploader.component.d.ts +3 -3
  235. package/lib/smart-component-layout/api/api/api.d.ts +3 -0
  236. package/lib/smart-component-layout/api/api/default.service.d.ts +33 -0
  237. package/lib/smart-component-layout/api/api.module.d.ts +11 -0
  238. package/lib/smart-component-layout/api/configuration.d.ts +104 -0
  239. package/lib/smart-component-layout/api/encoder.d.ts +11 -0
  240. package/lib/smart-component-layout/api/index.d.ts +6 -0
  241. package/lib/smart-component-layout/api/model/componentType.d.ts +17 -0
  242. package/lib/smart-component-layout/api/model/componentWidgetType.d.ts +17 -0
  243. package/lib/smart-component-layout/api/model/layoutDirection.d.ts +16 -0
  244. package/lib/smart-component-layout/api/model/models.d.ts +5 -0
  245. package/lib/smart-component-layout/api/model/smartComponentLayoutDefinition.d.ts +29 -0
  246. package/lib/smart-component-layout/api/model/smartComponentWidgetDefinition.d.ts +21 -0
  247. package/lib/smart-component-layout/api/param.d.ts +37 -0
  248. package/lib/smart-component-layout/api/variables.d.ts +8 -0
  249. package/lib/smart-component-layout/projects.d.ts +4 -0
  250. package/lib/smart-component-layout/smart-component-layout-utility.d.ts +4 -0
  251. package/lib/smart-component-layout/smart-component-layout.component.d.ts +35 -0
  252. package/lib/smart-component-layout/smart-component-layout.module.d.ts +13 -0
  253. package/lib/smart-dialog/projects.d.ts +4 -0
  254. package/lib/smart-dialog/smartdialog.component.d.ts +19 -0
  255. package/lib/smart-dialog/smartdialog.model.d.ts +67 -0
  256. package/lib/smart-dialog/smartdialog.module.d.ts +14 -0
  257. package/lib/smart-dialog/smartdialog.service.d.ts +20 -0
  258. package/lib/smart-expandable-section/expandable-section.component.d.ts +25 -0
  259. package/lib/smart-expandable-section/expandable-section.model.d.ts +40 -0
  260. package/lib/smart-expandable-section/projects.d.ts +4 -0
  261. package/lib/smart-expandable-section/smart-expandable-section.module.d.ts +15 -0
  262. package/lib/smart-expandable-section/smart-expandable-section.service.d.ts +6 -0
  263. package/lib/smart-filter/api/filter/model/filterExpressionBoolOperator.d.ts +16 -0
  264. package/lib/smart-filter/api/filter/model/filterExpressionBuilderField.d.ts +27 -0
  265. package/lib/smart-filter/api/filter/model/filterExpressionBuilderGroup.d.ts +39 -0
  266. package/lib/smart-filter/api/filter/model/filterExpressionBuilderModel.d.ts +21 -0
  267. package/lib/smart-filter/api/filter/model/filterExpressionData.d.ts +27 -0
  268. package/lib/smart-filter/api/filter/model/filterExpressionDataType.d.ts +19 -0
  269. package/lib/smart-filter/api/filter/model/filterExpressionField.d.ts +37 -0
  270. package/lib/smart-filter/api/filter/model/filterExpressionFieldList.d.ts +21 -0
  271. package/lib/smart-filter/api/filter/model/filterExpressionFieldWidgetType.d.ts +25 -0
  272. package/lib/smart-filter/api/filter/model/filterExpressionList.d.ts +18 -0
  273. package/lib/smart-filter/api/filter/model/filterExpressionOperandData.d.ts +24 -0
  274. package/lib/smart-filter/api/filter/model/filterExpressionOperation.d.ts +31 -0
  275. package/lib/smart-filter/api/filter/model/filterExpressionOrderBy.d.ts +28 -0
  276. package/lib/smart-filter/api/filter/model/model.d.ts +15 -0
  277. package/lib/smart-filter/api/filter/model/searchIndexObjectDefinitionData.d.ts +19 -0
  278. package/lib/smart-filter/api/filter/model/searchIndexPropertyDefinitionData.d.ts +18 -0
  279. package/lib/smart-filter/api/value/model/value.d.ts +29 -0
  280. package/lib/smart-filter/projects.d.ts +5 -0
  281. package/lib/smart-filter/smart-filter/components/smart-filter-expression-field/smart-filter-expression-field.component.d.ts +8 -0
  282. package/lib/smart-filter/smart-filter/components/smart-filter-simple/components/smart-filter-simple-field/smart-filter-simple-field.component.d.ts +31 -0
  283. package/lib/smart-filter/smart-filter/components/smart-filter-simple/smart-filter-simple.component.d.ts +18 -0
  284. package/lib/smart-filter/smart-filter/smart-filter.component.d.ts +15 -0
  285. package/lib/smart-filter/smart-filter/smart-filter.service.d.ts +16 -0
  286. package/lib/smart-filter/smart-filter.model.d.ts +25 -0
  287. package/lib/smart-filter/smart-filter.module.d.ts +15 -0
  288. package/lib/smart-form/api/api/api.d.ts +3 -0
  289. package/lib/smart-form/api/api/default.service.d.ts +33 -0
  290. package/lib/smart-form/api/api.module.d.ts +11 -0
  291. package/lib/smart-form/api/configuration.d.ts +104 -0
  292. package/lib/smart-form/api/encoder.d.ts +11 -0
  293. package/lib/smart-form/api/index.d.ts +6 -0
  294. package/lib/smart-form/api/model/models.d.ts +7 -0
  295. package/lib/smart-form/api/model/propertyMapping.d.ts +24 -0
  296. package/lib/smart-form/api/model/selectionDefinition.d.ts +40 -0
  297. package/lib/smart-form/api/model/smartFormWidgetDirection.d.ts +16 -0
  298. package/lib/smart-form/api/model/smartFormWidgetType.d.ts +42 -0
  299. package/lib/smart-form/api/model/smartLayoutDefinition.d.ts +15 -0
  300. package/lib/smart-form/api/model/smartMatrixModel.d.ts +28 -0
  301. package/lib/smart-form/api/model/smartWidgetDefinition.d.ts +77 -0
  302. package/lib/smart-form/api/param.d.ts +37 -0
  303. package/lib/smart-form/api/variables.d.ts +8 -0
  304. package/lib/smart-form/projects.d.ts +9 -0
  305. package/lib/smart-form/services/smartform.layout-definition.service.d.ts +40 -0
  306. package/lib/smart-form/services/smartform.service.d.ts +29 -0
  307. package/lib/smart-form/smartfileuploader/large-file-snack-bar/large-file-snack-bar.component.d.ts +8 -0
  308. package/lib/smart-form/smartfileuploader/smartfileuploader.component.d.ts +22 -0
  309. package/lib/smart-form/smartfileuploader/smartfileuploader.model.d.ts +7 -0
  310. package/lib/smart-form/smartform.component.d.ts +33 -0
  311. package/lib/smart-form/smartform.form-model.d.ts +521 -0
  312. package/lib/smart-form/smartform.model.d.ts +120 -0
  313. package/lib/smart-form/smartform.module.d.ts +34 -0
  314. package/lib/smart-form/widgets/components/smart-month-picker/smart-month-picker.component.d.ts +29 -0
  315. package/lib/smart-form/widgets/smartformwidget/smartformwidget.component.d.ts +84 -0
  316. package/lib/smart-form/widgets/smartformwidget/sortable-widget/sortable-widget.component.d.ts +20 -0
  317. package/lib/smart-form/widgets/smartformwidget/trackCaps.directive.d.ts +9 -0
  318. package/lib/smart-grid/api/grid-api/api/api.d.ts +3 -0
  319. package/lib/smart-grid/api/grid-api/api/grid.service.d.ts +140 -0
  320. package/lib/smart-grid/api/grid-api/api.module.d.ts +11 -0
  321. package/lib/smart-grid/api/grid-api/configuration.d.ts +80 -0
  322. package/lib/smart-grid/api/grid-api/encoder.d.ts +11 -0
  323. package/lib/smart-grid/api/grid-api/index.d.ts +5 -0
  324. package/lib/smart-grid/api/grid-api/model/gridColumnMeta.d.ts +18 -0
  325. package/lib/smart-grid/api/grid-api/model/gridDataAccessConfig.d.ts +35 -0
  326. package/lib/smart-grid/api/grid-api/model/gridModel.d.ts +30 -0
  327. package/lib/smart-grid/api/grid-api/model/gridPage.d.ts +26 -0
  328. package/lib/smart-grid/api/grid-api/model/gridRow.d.ts +22 -0
  329. package/lib/smart-grid/api/grid-api/model/gridSelectionMode.d.ts +17 -0
  330. package/lib/smart-grid/api/grid-api/model/gridSelectionType.d.ts +16 -0
  331. package/lib/smart-grid/api/grid-api/model/gridServerModel.d.ts +20 -0
  332. package/lib/smart-grid/api/grid-api/model/gridUpdateData.d.ts +19 -0
  333. package/lib/smart-grid/api/grid-api/model/gridView.d.ts +21 -0
  334. package/lib/smart-grid/api/grid-api/model/gridViewDescriptor.d.ts +33 -0
  335. package/lib/smart-grid/api/grid-api/model/models.d.ts +11 -0
  336. package/lib/smart-grid/api/grid-api/variables.d.ts +8 -0
  337. package/lib/smart-grid/components/expandable-grid/expandable-grid.component.d.ts +10 -0
  338. package/lib/smart-grid/components/smart-grid-card/smart-grid-card.component.d.ts +21 -0
  339. package/lib/smart-grid/components/table-layout-definer/table-layout-definer.component.d.ts +40 -0
  340. package/lib/smart-grid/models/model.d.ts +70 -0
  341. package/lib/smart-grid/projects.d.ts +5 -0
  342. package/lib/smart-grid/smart-grid.component.d.ts +67 -0
  343. package/lib/smart-grid/smart-grid.module.d.ts +20 -0
  344. package/lib/smart-grid/smart-grid.service.d.ts +26 -0
  345. package/lib/smart-icon/projects.d.ts +3 -0
  346. package/lib/smart-icon/smart-icon/smart-icon.component.d.ts +17 -0
  347. package/lib/smart-icon/smart-icon.module.d.ts +10 -0
  348. package/lib/smart-icon/smart-icon.service.d.ts +21 -0
  349. package/lib/smart-navbar/projects.d.ts +4 -0
  350. package/lib/smart-navbar/smart-navbar.component.d.ts +20 -0
  351. package/lib/smart-navbar/smart-navbar.model.d.ts +48 -0
  352. package/lib/smart-navbar/smart-navbar.module.d.ts +18 -0
  353. package/lib/smart-navbar/smart-navbar.service.d.ts +6 -0
  354. package/lib/smart-navigation/projects.d.ts +2 -0
  355. package/lib/smart-navigation/smart-navigation.interface.d.ts +11 -0
  356. package/lib/smart-navigation/smart-navigation.module.d.ts +6 -0
  357. package/lib/smart-navigation/smart-navigation.service.d.ts +18 -0
  358. package/lib/smart-ng-client.module.d.ts +9 -6
  359. package/lib/smart-subject/projects.d.ts +1 -0
  360. package/lib/smart-subject/smart-subject.d.ts +6 -0
  361. package/lib/smart-tab-group/projects.d.ts +4 -0
  362. package/lib/smart-tab-group/smart-tab-group.component.d.ts +21 -0
  363. package/lib/smart-tab-group/smart-tab-group.module.d.ts +13 -0
  364. package/lib/smart-tab-group/smart-tab-group.service.d.ts +6 -0
  365. package/lib/smart-tab-group/tab-content/tab-content.component.d.ts +14 -0
  366. package/lib/smart-tab-group/tab-group-simplified/tab-group.component.d.ts +29 -0
  367. package/lib/smart-tab-group/tabTile.model.d.ts +8 -0
  368. package/lib/smart-table/components/loading/loading.component.d.ts +8 -0
  369. package/lib/smart-table/projects.d.ts +5 -0
  370. package/lib/smart-table/smarttable.component.d.ts +34 -0
  371. package/lib/smart-table/smarttable.date-pipe.d.ts +18 -0
  372. package/lib/smart-table/smarttable.model.d.ts +183 -0
  373. package/lib/smart-table/smarttable.module.d.ts +23 -0
  374. package/lib/smart-table/smarttable.service.d.ts +6 -0
  375. package/lib/smart-table/tables/material-table/material-table.component.d.ts +8 -0
  376. package/lib/smart-table/tables/mobile-table/mobile-table.component.d.ts +8 -0
  377. package/lib/smart-table/tables/table.d.ts +59 -0
  378. package/lib/smart-tree/smarttree.component.d.ts +1 -1
  379. package/lib/smart-tree/smarttree.model.d.ts +1 -1
  380. package/lib/smart-tree/smarttree.module.d.ts +1 -1
  381. package/lib/smart-tree/smarttree.service.d.ts +1 -1
  382. package/lib/smart-tree/smarttree.service.interface.d.ts +1 -1
  383. package/lib/view-context/api/model/componentModel.d.ts +3 -2
  384. package/lib/view-context/api/model/view.d.ts +1 -1
  385. package/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.service.d.ts +1 -1
  386. package/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.d.ts +1 -1
  387. package/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.service.d.ts +1 -1
  388. package/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.d.ts +1 -1
  389. package/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.service.d.ts +1 -1
  390. package/lib/view-context/smart-ui-action/ui-action-toolbar.component.d.ts +1 -1
  391. package/lib/view-context/smart-ui-action/ui-action.model.d.ts +3 -1
  392. package/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.d.ts +1 -1
  393. package/lib/view-context/smart-view-context.module.d.ts +2 -2
  394. package/lib/view-context/smart-view-context.service.d.ts +3 -3
  395. package/lib/view-context/smart-view-redirect/smart-view-redirect.d.ts +3 -3
  396. package/lib/view-context/value-api/model/valueSetData.d.ts +1 -1
  397. package/package.json +1 -4
  398. package/projects.d.ts +14 -2
  399. package/smartbit4all-ng-client-3.0.1.tgz +0 -0
  400. package/src/lib/component-factory-service/README.md +99 -0
  401. package/src/lib/smart-component-layout/README.md +31 -0
  402. package/src/lib/smart-component-layout/api/README.md +226 -0
  403. package/src/lib/smart-dialog/README.md +197 -0
  404. package/src/lib/smart-expandable-section/README.md +249 -0
  405. package/src/lib/smart-filter/README.md +101 -0
  406. package/src/lib/smart-form/README.md +1178 -0
  407. package/src/lib/smart-form/api/README.md +226 -0
  408. package/src/lib/smart-grid/README.md +24 -0
  409. package/src/lib/smart-grid/api/grid-api/README.md +203 -0
  410. package/src/lib/smart-icon/README.md +116 -0
  411. package/src/lib/smart-navbar/README.md +119 -0
  412. package/src/lib/smart-navigation/README.md +141 -0
  413. package/src/lib/smart-tab-group/README.md +155 -0
  414. package/src/lib/smart-table/README.md +667 -0
  415. package/src/lib/view-context/api/README.md +226 -226
  416. package/esm2020/lib/smart-client/projects.mjs +0 -5
  417. package/esm2020/lib/smart-client/smart.component.mjs +0 -30
  418. package/esm2020/lib/smart-client/smart.service.mjs +0 -30
  419. package/lib/smart-client/projects.d.ts +0 -4
  420. package/lib/smart-client/smart.component.d.ts +0 -11
  421. package/lib/smart-client/smart.service.d.ts +0 -11
  422. package/smartbit4all-ng-client-2.2.2.tgz +0 -0
@@ -0,0 +1,483 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { FormControl, FormGroup, Validators } from '@angular/forms';
3
+ import { SelectionDefinition, SmartFormWidgetType } from '../api';
4
+ import * as i0 from "@angular/core";
5
+ export class SmartFormService {
6
+ constructor() {
7
+ this.group = {};
8
+ }
9
+ getSmartFormWidgetByKey(key) {
10
+ return this.findSmartFormWidgetByKey(this.smartForm?.widgets, key);
11
+ }
12
+ collectKeysFromSmartForm(widgets, keys) {
13
+ widgets.forEach((w) => {
14
+ if (w.type !== SmartFormWidgetType.CONTAINER &&
15
+ w.type !== SmartFormWidgetType.LABEL &&
16
+ w.type !== SmartFormWidgetType.CHECK_BOX_2 &&
17
+ w.type !== SmartFormWidgetType.YOUTUBE_PLAYER) {
18
+ keys.push(w.key);
19
+ }
20
+ if (w.type === SmartFormWidgetType.TEXT_FIELD_CHIPS ||
21
+ w.type === SmartFormWidgetType.SELECT ||
22
+ w.type === SmartFormWidgetType.SELECT_MULTIPLE ||
23
+ w.type === SmartFormWidgetType.CHECK_BOX ||
24
+ w.type === SmartFormWidgetType.RADIO_BUTTON ||
25
+ w.type === SmartFormWidgetType.CONTAINER) {
26
+ if (w.valueList?.length) {
27
+ keys = this.collectKeysFromSmartForm(w.valueList, keys);
28
+ }
29
+ }
30
+ else if (w.type === SmartFormWidgetType.CHECK_BOX_2) {
31
+ if (w.valueList?.length) {
32
+ let childrenKeys = this.collectKeysFromSmartForm(w.valueList, []);
33
+ childrenKeys = childrenKeys
34
+ .filter((key) => key !== w.key)
35
+ .flatMap((key) => `${w.key}.${key}`);
36
+ keys.push(...childrenKeys);
37
+ }
38
+ }
39
+ });
40
+ return keys;
41
+ }
42
+ findSmartFormWidgetByKey(widgets, key) {
43
+ let widgetFoundByKey;
44
+ for (let w of widgets) {
45
+ if (w.key === key) {
46
+ return w;
47
+ }
48
+ else if (w.type === SmartFormWidgetType.CONTAINER && w.valueList?.length) {
49
+ widgetFoundByKey = this.findSmartFormWidgetByKey(w.valueList, key);
50
+ if (widgetFoundByKey) {
51
+ return widgetFoundByKey;
52
+ }
53
+ }
54
+ }
55
+ return widgetFoundByKey;
56
+ }
57
+ getValueDeeply(model, key) {
58
+ let splittedKey = key.split('.');
59
+ let value;
60
+ splittedKey.forEach((k) => {
61
+ if (!value) {
62
+ value = model[k];
63
+ }
64
+ else {
65
+ if (value[k] === undefined ||
66
+ value[k] === null ||
67
+ (!value && typeof value[k] !== 'boolean')) {
68
+ value = '';
69
+ return value;
70
+ }
71
+ else {
72
+ value = value[k];
73
+ }
74
+ }
75
+ });
76
+ return value;
77
+ }
78
+ setValueDeeply(model, key, value) {
79
+ let splittedKeys = key.split('.');
80
+ let deepModel = [model];
81
+ let tempModel;
82
+ for (let index = 0; index < splittedKeys.length; index++) {
83
+ tempModel = deepModel[index];
84
+ if (typeof tempModel[splittedKeys[index]] !== 'string' &&
85
+ typeof tempModel[splittedKeys[index]] !== 'boolean' &&
86
+ typeof tempModel[splittedKeys[index]] !== 'number' &&
87
+ tempModel[splittedKeys[index]] !== undefined) {
88
+ deepModel.push(tempModel[splittedKeys[index]]);
89
+ }
90
+ if (index === splittedKeys.length - 1) {
91
+ tempModel[splittedKeys[index]] = value;
92
+ break;
93
+ }
94
+ }
95
+ }
96
+ getPropertyNamesDeeply(element) {
97
+ let properties = Object.keys(element);
98
+ properties.forEach((property) => {
99
+ if (typeof element[property] === 'string' ||
100
+ typeof element[property] === 'boolean' ||
101
+ typeof element[property] === 'number' ||
102
+ element[property] === undefined ||
103
+ element[property] === null ||
104
+ !element[property] ||
105
+ !element) {
106
+ return;
107
+ }
108
+ let innerProperties = this.getPropertyNamesDeeply(element[property]);
109
+ innerProperties = innerProperties.map((innerProperty) => `${property}.${innerProperty}`);
110
+ properties.push(...innerProperties);
111
+ });
112
+ return properties;
113
+ }
114
+ setValuesFromModel() {
115
+ const smartForm = this.smartForm;
116
+ const data = this.smartForm?.componentModel?.data;
117
+ if (!data) {
118
+ return;
119
+ }
120
+ const keys = this.collectKeysFromSmartForm(smartForm.widgets, []);
121
+ let widget;
122
+ for (const key of this.getPropertyNamesDeeply(data)) {
123
+ if (keys.includes(key)) {
124
+ widget = this.findSmartFormWidgetByKey(smartForm.widgets, key);
125
+ if (widget) {
126
+ let value = this.getValueDeeply(data, key);
127
+ if (typeof value === 'boolean' && widget.type !== SmartFormWidgetType.TOGGLE) {
128
+ value = `${value}`;
129
+ }
130
+ if (widget.type !== SmartFormWidgetType.INDICATOR &&
131
+ widget.type !== SmartFormWidgetType.LABEL &&
132
+ widget.type !== SmartFormWidgetType.CONTAINER &&
133
+ widget.type !== SmartFormWidgetType.FILE_UPLOADER &&
134
+ widget.type !== SmartFormWidgetType.DIVIDER &&
135
+ widget.type !== SmartFormWidgetType.BUTTON &&
136
+ widget.type !== SmartFormWidgetType.COMPONENT &&
137
+ widget.type !== SmartFormWidgetType.YOUTUBE_PLAYER) {
138
+ widget.value = value;
139
+ if (widget.showLabel === undefined && smartForm.showLabel) {
140
+ widget.showLabel = true;
141
+ }
142
+ }
143
+ if (widget.type === SmartFormWidgetType.SELECT ||
144
+ widget.type === SmartFormWidgetType.TEXT_FIELD) {
145
+ if (widget.selection && smartForm.componentModel.valueSets) {
146
+ if (widget.selection.type === SelectionDefinition.TypeEnum.Property &&
147
+ !widget.selection.mapping.length) {
148
+ let valueSetData = smartForm.componentModel.valueSets[widget.selection.valueSetName].valueSetData;
149
+ widget.valueList = valueSetData.values.map((value) => {
150
+ return {
151
+ key: value[valueSetData.keyProperty],
152
+ label: value[widget.selection?.displayProperty ?? 'displayValue'],
153
+ type: SmartFormWidgetType.ITEM,
154
+ value: value[valueSetData.keyProperty],
155
+ };
156
+ });
157
+ }
158
+ else if (widget.selection.type === SelectionDefinition.TypeEnum.Object &&
159
+ !widget.selection.mapping.length) {
160
+ let valueSetData = smartForm.componentModel.valueSets[widget.selection.valueSetName].valueSetData;
161
+ widget.valueList = valueSetData.values.map((value, index) => {
162
+ return {
163
+ key: `${index}`,
164
+ label: value[widget.selection?.displayProperty ?? 'displayValue'],
165
+ type: SmartFormWidgetType.ITEM,
166
+ value: value,
167
+ };
168
+ });
169
+ }
170
+ }
171
+ }
172
+ if (widget &&
173
+ widget.type === SmartFormWidgetType.CHECK_BOX &&
174
+ widget.valueList.length === 1) {
175
+ widget.valueList = widget.valueList.map((item) => {
176
+ let value = this.getValueDeeply(data, key);
177
+ item.value = value;
178
+ return item;
179
+ });
180
+ }
181
+ }
182
+ else {
183
+ // In case of CheckBox2
184
+ let splittedKeys = key.split('.');
185
+ splittedKeys.splice(splittedKeys.length - 1, 1);
186
+ widget = this.findSmartFormWidgetByKey(smartForm.widgets, splittedKeys.join('.'));
187
+ if (widget && widget.type === SmartFormWidgetType.CHECK_BOX_2 && widget.valueList) {
188
+ widget.valueList = widget.valueList.map((item) => {
189
+ let value = this.getValueDeeply(data, `${widget?.key}.${item.key}`);
190
+ item.value = value;
191
+ return item;
192
+ });
193
+ }
194
+ }
195
+ }
196
+ }
197
+ }
198
+ toFormGroup() {
199
+ this.createFormControls(this.smartForm.widgets);
200
+ let formGroup = new FormGroup(this.group);
201
+ if (this.smartForm.validators && this.smartForm.validators.length) {
202
+ formGroup.setValidators(this.smartForm.validators.map((validator) => {
203
+ return validator.validator;
204
+ }));
205
+ }
206
+ return formGroup;
207
+ }
208
+ createFormControls(widgets, parentKey) {
209
+ widgets.map((widget) => {
210
+ if (widget.type !== SmartFormWidgetType.INDICATOR &&
211
+ widget.type !== SmartFormWidgetType.LABEL &&
212
+ widget.type !== SmartFormWidgetType.CONTAINER &&
213
+ widget.type !== SmartFormWidgetType.FILE_UPLOADER &&
214
+ widget.type !== SmartFormWidgetType.IMAGE &&
215
+ widget.type !== SmartFormWidgetType.DIVIDER &&
216
+ widget.type !== SmartFormWidgetType.BUTTON &&
217
+ widget.type !== SmartFormWidgetType.CHECK_BOX_2 &&
218
+ widget.type !== SmartFormWidgetType.ITEM &&
219
+ widget.type !== SmartFormWidgetType.COMPONENT &&
220
+ widget.type !== SmartFormWidgetType.MATRIX &&
221
+ widget.type !== SmartFormWidgetType.YOUTUBE_PLAYER) {
222
+ let formControl = new FormControl(widget.value || '', widget.validators?.map((validator) => {
223
+ return validator.validator;
224
+ }));
225
+ if (widget.isDisabled) {
226
+ formControl.disable();
227
+ }
228
+ this.group[`${widget.key}`] = formControl;
229
+ }
230
+ if (widget.type === SmartFormWidgetType.MATRIX) {
231
+ if (widget.isMultiple) {
232
+ let dataKeys = Object.keys(widget.value.data);
233
+ let itemKeys = widget.value.columns.map((value) => value.code);
234
+ dataKeys.forEach((key) => {
235
+ itemKeys.forEach((item) => {
236
+ let formControl = new FormControl(widget.value.data[key][item], widget.validators?.map((validator) => {
237
+ return validator.validator;
238
+ }));
239
+ this.group[`${widget.key}.data.${key}.${item}`] = formControl;
240
+ });
241
+ });
242
+ }
243
+ else {
244
+ Object.keys(widget.value.data).map((key) => {
245
+ let formControl = new FormControl(widget.isMultiple ? widget.value.data[key] : widget.value.data[key][0] || '', widget.validators?.map((validator) => {
246
+ return validator.validator;
247
+ }));
248
+ if (widget.isDisabled) {
249
+ formControl.disable();
250
+ }
251
+ this.group[`${widget.key}.${key}`] = formControl;
252
+ });
253
+ }
254
+ }
255
+ if (widget.type === SmartFormWidgetType.ITEM && parentKey) {
256
+ let formControl = new FormControl(widget.value);
257
+ if (widget.isDisabled) {
258
+ formControl.disable();
259
+ }
260
+ this.group[`${parentKey}.${widget.key}`] = formControl;
261
+ }
262
+ if (widget.type === SmartFormWidgetType.CONTAINER && widget.valueList?.length) {
263
+ this.createFormControls(widget.valueList);
264
+ }
265
+ if (widget.type === SmartFormWidgetType.CHECK_BOX_2 && widget.valueList?.length) {
266
+ this.createFormControls(widget.valueList, widget.key);
267
+ }
268
+ });
269
+ }
270
+ isValidatorInList(validator, list) {
271
+ return list !== undefined && list.length > 0 && list.some((v) => v === validator);
272
+ }
273
+ copyValueFromFormToWidgetBeans(widgets, group) {
274
+ widgets.forEach((widget) => {
275
+ if (widget.type === SmartFormWidgetType.CONTAINER && widget.valueList?.length) {
276
+ this.copyValueFromFormToWidgetBeans(widget.valueList, group);
277
+ }
278
+ else if (widget.type === SmartFormWidgetType.MATRIX) {
279
+ if (widget.isMultiple) {
280
+ let dataKeys = Object.keys(widget.value.data);
281
+ let itemKeys = widget.value.columns.map((value) => value.code);
282
+ dataKeys.forEach((key) => {
283
+ itemKeys.forEach((item) => {
284
+ widget.value.data[key][item] = [
285
+ group.controls[`${widget.key}.data.${key}.${item}`].value,
286
+ ];
287
+ });
288
+ });
289
+ let datakeys = Object.keys(widget.value.data);
290
+ //Map checkbox key - boolean value to string key array
291
+ let valueKeys = widget.value.columns.map((value) => value.code);
292
+ datakeys.forEach((key) => {
293
+ let newData = [];
294
+ valueKeys.forEach((valueKey) => {
295
+ let value = widget.value.data[key][valueKey];
296
+ if (value[0]) {
297
+ newData.push(valueKey);
298
+ }
299
+ });
300
+ widget.value.data[key] = newData;
301
+ });
302
+ }
303
+ else {
304
+ Object.keys(widget.value.data).map((key) => {
305
+ widget.value.data[key] = [group.controls[`${widget.key}.${key}`].value];
306
+ });
307
+ }
308
+ }
309
+ else if (widget.type !== SmartFormWidgetType.INDICATOR &&
310
+ widget.type !== SmartFormWidgetType.LABEL &&
311
+ widget.type !== SmartFormWidgetType.CONTAINER &&
312
+ widget.type !== SmartFormWidgetType.IMAGE &&
313
+ widget.type !== SmartFormWidgetType.FILE_UPLOADER &&
314
+ widget.type !== SmartFormWidgetType.BUTTON &&
315
+ widget.type !== SmartFormWidgetType.DIVIDER &&
316
+ widget.type !== SmartFormWidgetType.CHECK_BOX_2 &&
317
+ widget.type !== SmartFormWidgetType.COMPONENT &&
318
+ widget.type !== SmartFormWidgetType.YOUTUBE_PLAYER) {
319
+ widget.value = group.controls[widget.key].value;
320
+ }
321
+ });
322
+ }
323
+ toSmartForm(group) {
324
+ this.copyValueFromFormToWidgetBeans(this.smartForm.widgets, group);
325
+ const data = this.smartForm?.componentModel?.data;
326
+ if (data) {
327
+ for (const key of this.getPropertyNamesDeeply(data)) {
328
+ if (group.controls[key]) {
329
+ this.setValueDeeply(data, key, group.controls[key].value);
330
+ }
331
+ }
332
+ }
333
+ return this.smartForm;
334
+ }
335
+ getModel(group) {
336
+ if (!this.smartForm?.componentModel) {
337
+ return {};
338
+ }
339
+ let originalModel = this.smartForm.componentModel.data;
340
+ let copyOfModel = { ...originalModel };
341
+ // copyOfModel should be the current model
342
+ this.smartForm.componentModel.data = copyOfModel;
343
+ // copy value from FormGroup into model
344
+ this.toSmartForm(group);
345
+ let newModel = this.smartForm.componentModel.data;
346
+ this.smartForm.componentModel.data = originalModel;
347
+ return newModel;
348
+ }
349
+ applyComponentConstraints(widgets, constraints) {
350
+ widgets.forEach((widget) => {
351
+ let constraint = constraints?.filter((constraint) => constraint.dataName === widget.key);
352
+ if (constraint && constraint.length) {
353
+ widget.isVisible = constraint[0].visible === undefined ? true : constraint[0].visible;
354
+ if (constraint[0].mandatory !== undefined && constraint[0].mandatory) {
355
+ if (widget.type !== SmartFormWidgetType.INDICATOR &&
356
+ widget.type !== SmartFormWidgetType.LABEL &&
357
+ widget.type !== SmartFormWidgetType.CONTAINER &&
358
+ widget.type !== SmartFormWidgetType.IMAGE &&
359
+ widget.type !== SmartFormWidgetType.FILE_UPLOADER &&
360
+ widget.type !== SmartFormWidgetType.DIVIDER &&
361
+ widget.type !== SmartFormWidgetType.BUTTON &&
362
+ widget.type !== SmartFormWidgetType.COMPONENT &&
363
+ widget.type !== SmartFormWidgetType.YOUTUBE_PLAYER) {
364
+ widget.validators = [
365
+ ...(widget.validators ?? []),
366
+ {
367
+ validator: Validators.required,
368
+ isCustom: false,
369
+ errorMessage: '',
370
+ name: 'required',
371
+ },
372
+ ];
373
+ }
374
+ }
375
+ if (widget.type !== SmartFormWidgetType.INDICATOR &&
376
+ widget.type !== SmartFormWidgetType.LABEL &&
377
+ widget.type !== SmartFormWidgetType.CONTAINER &&
378
+ widget.type !== SmartFormWidgetType.IMAGE &&
379
+ widget.type !== SmartFormWidgetType.FILE_UPLOADER &&
380
+ widget.type !== SmartFormWidgetType.DIVIDER &&
381
+ widget.type !== SmartFormWidgetType.BUTTON &&
382
+ widget.type !== SmartFormWidgetType.COMPONENT &&
383
+ widget.type !== SmartFormWidgetType.YOUTUBE_PLAYER) {
384
+ widget.isDisabled = constraint[0].enabled === undefined ? false : !constraint[0].enabled;
385
+ }
386
+ }
387
+ if (widget.type === SmartFormWidgetType.CONTAINER &&
388
+ widget.valueList &&
389
+ widget.valueList.length) {
390
+ this.applyComponentConstraints(widget.valueList, constraints);
391
+ }
392
+ });
393
+ }
394
+ applyConstraints() {
395
+ if (this.smartForm.componentModel?.constraints &&
396
+ this.smartForm.componentModel?.constraints.length) {
397
+ this.applyComponentConstraints(this.smartForm.widgets, this.smartForm.componentModel?.constraints);
398
+ }
399
+ }
400
+ filterWidgetsByVisibility(widgets) {
401
+ return widgets.filter((widget) => widget.isVisible === undefined ? true : widget.isVisible);
402
+ }
403
+ async getTranslationOfKey(key) {
404
+ return await this.smartForm.translateService.get(key).toPromise();
405
+ }
406
+ async translateWidgets(widgets) {
407
+ Promise.all(widgets.map(async (widget) => {
408
+ if (widget.type === SmartFormWidgetType.YOUTUBE_PLAYER)
409
+ return;
410
+ if (widget.type !== SmartFormWidgetType.CONTAINER) {
411
+ if (!widget.originalLabel) {
412
+ widget.originalLabel = `${widget.label}`;
413
+ }
414
+ // Label
415
+ widget.label = await this.getTranslationOfKey(widget.originalLabel);
416
+ // Placeholder
417
+ if ((widget.type === SmartFormWidgetType.TEXT_FIELD ||
418
+ widget.type === SmartFormWidgetType.TEXT_FIELD_NUMBER ||
419
+ widget.type === SmartFormWidgetType.TEXT_FIELD_CHIPS ||
420
+ widget.type === SmartFormWidgetType.RICH_TEXT ||
421
+ widget.type === SmartFormWidgetType.TEXT_BOX) &&
422
+ widget.placeholder) {
423
+ if (!widget.originalPlaceholder) {
424
+ widget.originalPlaceholder = `${widget.placeholder}`;
425
+ }
426
+ widget.placeholder = await this.getTranslationOfKey(widget.originalPlaceholder);
427
+ }
428
+ // Validators
429
+ if (widget.type !== SmartFormWidgetType.INDICATOR &&
430
+ widget.type !== SmartFormWidgetType.LABEL &&
431
+ widget.type !== SmartFormWidgetType.IMAGE &&
432
+ widget.type !== SmartFormWidgetType.FILE_UPLOADER &&
433
+ widget.type !== SmartFormWidgetType.DIVIDER &&
434
+ widget.type !== SmartFormWidgetType.BUTTON &&
435
+ widget.type !== SmartFormWidgetType.COMPONENT &&
436
+ widget.validators) {
437
+ widget.validators = await Promise.all(widget.validators.map(async (validator) => {
438
+ if (!validator.originalErrorMessage) {
439
+ validator.originalErrorMessage = `${validator.errorMessage}`;
440
+ }
441
+ validator.errorMessage = await this.getTranslationOfKey(validator.originalErrorMessage);
442
+ return validator;
443
+ }));
444
+ }
445
+ // Indicator
446
+ if (widget.type === SmartFormWidgetType.INDICATOR && widget.indicator) {
447
+ if (!widget.indicator.originalIndicatorStatusLabels) {
448
+ widget.indicator.originalIndicatorStatusLabels =
449
+ widget.indicator.indicatorStatusLabels.map((label) => label);
450
+ }
451
+ widget.indicator.indicatorStatusLabels = await Promise.all(widget.indicator.indicatorStatusLabels.map(async (label, index) => await this.getTranslationOfKey(widget.indicator.originalIndicatorStatusLabels[index])));
452
+ }
453
+ if ((widget.type === SmartFormWidgetType.TEXT_FIELD_CHIPS ||
454
+ widget.type === SmartFormWidgetType.SELECT ||
455
+ widget.type === SmartFormWidgetType.SELECT_MULTIPLE ||
456
+ widget.type === SmartFormWidgetType.CHECK_BOX ||
457
+ widget.type === SmartFormWidgetType.CHECK_BOX_2 ||
458
+ widget.type === SmartFormWidgetType.RADIO_BUTTON) &&
459
+ widget.valueList) {
460
+ this.translateWidgetItems(widget.valueList);
461
+ }
462
+ }
463
+ else {
464
+ this.translateWidgets(widget.valueList);
465
+ }
466
+ }));
467
+ }
468
+ async translateWidgetItems(widgets) {
469
+ Promise.all(widgets.map(async (widget) => {
470
+ if (!widget.originalLabel) {
471
+ widget.originalLabel = `${widget.label}`;
472
+ }
473
+ // Label
474
+ widget.label = await this.getTranslationOfKey(widget.originalLabel);
475
+ }));
476
+ }
477
+ }
478
+ SmartFormService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartFormService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
479
+ SmartFormService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartFormService });
480
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartFormService, decorators: [{
481
+ type: Injectable
482
+ }] });
483
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRmb3JtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1mb3JtL3NlcnZpY2VzL3NtYXJ0Zm9ybS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sUUFBUSxDQUFDOztBQUtsRSxNQUFNLE9BQU8sZ0JBQWdCO0lBRDdCO1FBRUUsVUFBSyxHQUFRLEVBQUUsQ0FBQztLQXVsQmpCO0lBbmxCQyx1QkFBdUIsQ0FBQyxHQUFXO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFTyx3QkFBd0IsQ0FDOUIsT0FBbUQsRUFDbkQsSUFBYztRQUVkLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNwQixJQUNFLENBQUMsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsU0FBUztnQkFDeEMsQ0FBQyxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxLQUFLO2dCQUNwQyxDQUFDLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLFdBQVc7Z0JBQzFDLENBQUMsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsY0FBYyxFQUM3QztnQkFDQSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNsQjtZQUNELElBQ0UsQ0FBQyxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxnQkFBZ0I7Z0JBQy9D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LENBQUMsQ0FBQzthQUMxQztRQUNILENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLG9CQUFvQixDQUFDLE9BQTBCO1FBQ25ELE9BQU8sQ0FBQyxHQUFHLENBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBdUIsRUFBRSxFQUFFO1lBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFO2dCQUN6QixNQUFNLENBQUMsYUFBYSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQzFDO1lBQ0QsU0FBUztZQUNULE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3RFLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDOzs2R0F2bEJVLGdCQUFnQjtpSEFBaEIsZ0JBQWdCOzJGQUFoQixnQkFBZ0I7a0JBRDVCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFNlbGVjdGlvbkRlZmluaXRpb24sIFNtYXJ0Rm9ybVdpZGdldFR5cGUgfSBmcm9tICcuLi9hcGknO1xyXG5pbXBvcnQgeyBTbWFydEZvcm1XaWRnZXQsIFNtYXJ0SXRlbSwgU21hcnRJdGVtcywgU21hcnRTZWxlY3QgfSBmcm9tICcuLi9zbWFydGZvcm0uZm9ybS1tb2RlbCc7XHJcbmltcG9ydCB7IFNtYXJ0Rm9ybSwgU21hcnRGb3JtQ29tcG9uZW50Q29uc3RyYWludCwgU21hcnRWYWxpZGF0b3IsIFZhbHVlIH0gZnJvbSAnLi4vc21hcnRmb3JtLm1vZGVsJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFNtYXJ0Rm9ybVNlcnZpY2Uge1xyXG4gIGdyb3VwOiBhbnkgPSB7fTtcclxuXHJcbiAgc21hcnRGb3JtPzogU21hcnRGb3JtO1xyXG5cclxuICBnZXRTbWFydEZvcm1XaWRnZXRCeUtleShrZXk6IHN0cmluZyk6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+IHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmZpbmRTbWFydEZvcm1XaWRnZXRCeUtleSh0aGlzLnNtYXJ0Rm9ybT8ud2lkZ2V0cyEsIGtleSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbGxlY3RLZXlzRnJvbVNtYXJ0Rm9ybShcclxuICAgIHdpZGdldHM6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+W10gfCBTbWFydEl0ZW1zPGFueT5bXSxcclxuICAgIGtleXM6IHN0cmluZ1tdXHJcbiAgKTogc3RyaW5nW10ge1xyXG4gICAgd2lkZ2V0cy5mb3JFYWNoKCh3KSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB3LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmXHJcbiAgICAgICAgdy50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkxBQkVMICYmXHJcbiAgICAgICAgdy50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNIRUNLX0JPWF8yICYmXHJcbiAgICAgICAgdy50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLllPVVRVQkVfUExBWUVSXHJcbiAgICAgICkge1xyXG4gICAgICAgIGtleXMucHVzaCh3LmtleSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHcudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5URVhUX0ZJRUxEX0NISVBTIHx8XHJcbiAgICAgICAgdy50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlNFTEVDVCB8fFxyXG4gICAgICAgIHcudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TRUxFQ1RfTVVMVElQTEUgfHxcclxuICAgICAgICB3LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ0hFQ0tfQk9YIHx8XHJcbiAgICAgICAgdy50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlJBRElPX0JVVFRPTiB8fFxyXG4gICAgICAgIHcudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVJcclxuICAgICAgKSB7XHJcbiAgICAgICAgaWYgKHcudmFsdWVMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICAgIGtleXMgPSB0aGlzLmNvbGxlY3RLZXlzRnJvbVNtYXJ0Rm9ybSh3LnZhbHVlTGlzdCwga2V5cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHcudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DSEVDS19CT1hfMikge1xyXG4gICAgICAgIGlmICh3LnZhbHVlTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBsZXQgY2hpbGRyZW5LZXlzID0gdGhpcy5jb2xsZWN0S2V5c0Zyb21TbWFydEZvcm0ody52YWx1ZUxpc3QsIFtdKTtcclxuICAgICAgICAgIGNoaWxkcmVuS2V5cyA9IGNoaWxkcmVuS2V5c1xyXG4gICAgICAgICAgICAuZmlsdGVyKChrZXk6IHN0cmluZykgPT4ga2V5ICE9PSB3LmtleSlcclxuICAgICAgICAgICAgLmZsYXRNYXAoKGtleTogc3RyaW5nKSA9PiBgJHt3LmtleX0uJHtrZXl9YCk7XHJcblxyXG4gICAgICAgICAga2V5cy5wdXNoKC4uLmNoaWxkcmVuS2V5cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4ga2V5cztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZFNtYXJ0Rm9ybVdpZGdldEJ5S2V5KFxyXG4gICAgd2lkZ2V0czogU21hcnRGb3JtV2lkZ2V0PGFueT5bXSxcclxuICAgIGtleTogc3RyaW5nXHJcbiAgKTogU21hcnRGb3JtV2lkZ2V0PGFueT4gfCB1bmRlZmluZWQge1xyXG4gICAgbGV0IHdpZGdldEZvdW5kQnlLZXk6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+IHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIGZvciAobGV0IHcgb2Ygd2lkZ2V0cykge1xyXG4gICAgICBpZiAody5rZXkgPT09IGtleSkge1xyXG4gICAgICAgIHJldHVybiB3O1xyXG4gICAgICB9IGVsc2UgaWYgKHcudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVIgJiYgdy52YWx1ZUxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgIHdpZGdldEZvdW5kQnlLZXkgPSB0aGlzLmZpbmRTbWFydEZvcm1XaWRnZXRCeUtleSh3LnZhbHVlTGlzdCwga2V5KTtcclxuICAgICAgICBpZiAod2lkZ2V0Rm91bmRCeUtleSkge1xyXG4gICAgICAgICAgcmV0dXJuIHdpZGdldEZvdW5kQnlLZXk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gd2lkZ2V0Rm91bmRCeUtleTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VmFsdWVEZWVwbHkobW9kZWw6IGFueSwga2V5OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgbGV0IHNwbGl0dGVkS2V5ID0ga2V5LnNwbGl0KCcuJyk7XHJcbiAgICBsZXQgdmFsdWU6IGFueTtcclxuXHJcbiAgICBzcGxpdHRlZEtleS5mb3JFYWNoKChrOiBzdHJpbmcpID0+IHtcclxuICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgIHZhbHVlID0gbW9kZWxba107XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdmFsdWVba10gPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgICAgdmFsdWVba10gPT09IG51bGwgfHxcclxuICAgICAgICAgICghdmFsdWUgJiYgdHlwZW9mIHZhbHVlW2tdICE9PSAnYm9vbGVhbicpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB2YWx1ZSA9ICcnO1xyXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlW2tdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgc2V0VmFsdWVEZWVwbHkobW9kZWw6IGFueSwga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIGxldCBzcGxpdHRlZEtleXMgPSBrZXkuc3BsaXQoJy4nKTtcclxuXHJcbiAgICBsZXQgZGVlcE1vZGVsOiBhbnlbXSA9IFttb2RlbF07XHJcbiAgICBsZXQgdGVtcE1vZGVsOiBhbnk7XHJcblxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHNwbGl0dGVkS2V5cy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgdGVtcE1vZGVsID0gZGVlcE1vZGVsW2luZGV4XTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0eXBlb2YgdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dICE9PSAnc3RyaW5nJyAmJlxyXG4gICAgICAgIHR5cGVvZiB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gIT09ICdib29sZWFuJyAmJlxyXG4gICAgICAgIHR5cGVvZiB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gIT09ICdudW1iZXInICYmXHJcbiAgICAgICAgdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dICE9PSB1bmRlZmluZWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgZGVlcE1vZGVsLnB1c2godGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGluZGV4ID09PSBzcGxpdHRlZEtleXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgIHRlbXBNb2RlbFtzcGxpdHRlZEtleXNbaW5kZXhdXSA9IHZhbHVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRQcm9wZXJ0eU5hbWVzRGVlcGx5KGVsZW1lbnQ6IGFueSk6IHN0cmluZ1tdIHtcclxuICAgIGxldCBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoZWxlbWVudCk7XHJcbiAgICBwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0eXBlb2YgZWxlbWVudFtwcm9wZXJ0eV0gPT09ICdzdHJpbmcnIHx8XHJcbiAgICAgICAgdHlwZW9mIGVsZW1lbnRbcHJvcGVydHldID09PSAnYm9vbGVhbicgfHxcclxuICAgICAgICB0eXBlb2YgZWxlbWVudFtwcm9wZXJ0eV0gPT09ICdudW1iZXInIHx8XHJcbiAgICAgICAgZWxlbWVudFtwcm9wZXJ0eV0gPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgIGVsZW1lbnRbcHJvcGVydHldID09PSBudWxsIHx8XHJcbiAgICAgICAgIWVsZW1lbnRbcHJvcGVydHldIHx8XHJcbiAgICAgICAgIWVsZW1lbnRcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBpbm5lclByb3BlcnRpZXMgPSB0aGlzLmdldFByb3BlcnR5TmFtZXNEZWVwbHkoZWxlbWVudFtwcm9wZXJ0eV0pO1xyXG4gICAgICBpbm5lclByb3BlcnRpZXMgPSBpbm5lclByb3BlcnRpZXMubWFwKFxyXG4gICAgICAgIChpbm5lclByb3BlcnR5OiBzdHJpbmcpID0+IGAke3Byb3BlcnR5fS4ke2lubmVyUHJvcGVydHl9YFxyXG4gICAgICApO1xyXG5cclxuICAgICAgcHJvcGVydGllcy5wdXNoKC4uLmlubmVyUHJvcGVydGllcyk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xyXG4gIH1cclxuXHJcbiAgc2V0VmFsdWVzRnJvbU1vZGVsKCk6IHZvaWQge1xyXG4gICAgY29uc3Qgc21hcnRGb3JtID0gdGhpcy5zbWFydEZvcm0hO1xyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuc21hcnRGb3JtPy5jb21wb25lbnRNb2RlbD8uZGF0YTtcclxuICAgIGlmICghZGF0YSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qga2V5czogc3RyaW5nW10gPSB0aGlzLmNvbGxlY3RLZXlzRnJvbVNtYXJ0Rm9ybShzbWFydEZvcm0ud2lkZ2V0cywgW10pO1xyXG5cclxuICAgIGxldCB3aWRnZXQ6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+IHwgdW5kZWZpbmVkO1xyXG4gICAgZm9yIChjb25zdCBrZXkgb2YgdGhpcy5nZXRQcm9wZXJ0eU5hbWVzRGVlcGx5KGRhdGEpKSB7XHJcbiAgICAgIGlmIChrZXlzLmluY2x1ZGVzKGtleSkpIHtcclxuICAgICAgICB3aWRnZXQgPSB0aGlzLmZpbmRTbWFydEZvcm1XaWRnZXRCeUtleShzbWFydEZvcm0ud2lkZ2V0cywga2V5KTtcclxuICAgICAgICBpZiAod2lkZ2V0KSB7XHJcbiAgICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLmdldFZhbHVlRGVlcGx5KGRhdGEsIGtleSk7XHJcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgJiYgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVE9HR0xFKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gYCR7dmFsdWV9YDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU5ESUNBVE9SICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkxBQkVMICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTlRBSU5FUiAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5GSUxFX1VQTE9BREVSICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRJVklERVIgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQlVUVE9OICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTVBPTkVOVCAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ZT1VUVUJFX1BMQVlFUlxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHdpZGdldC52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAod2lkZ2V0LnNob3dMYWJlbCA9PT0gdW5kZWZpbmVkICYmIHNtYXJ0Rm9ybS5zaG93TGFiZWwpIHtcclxuICAgICAgICAgICAgICB3aWRnZXQuc2hvd0xhYmVsID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuU0VMRUNUIHx8XHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlRFWFRfRklFTERcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBpZiAod2lkZ2V0LnNlbGVjdGlvbiAmJiBzbWFydEZvcm0uY29tcG9uZW50TW9kZWwudmFsdWVTZXRzKSB7XHJcbiAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgd2lkZ2V0LnNlbGVjdGlvbi50eXBlID09PSBTZWxlY3Rpb25EZWZpbml0aW9uLlR5cGVFbnVtLlByb3BlcnR5ICYmXHJcbiAgICAgICAgICAgICAgICAhd2lkZ2V0LnNlbGVjdGlvbi5tYXBwaW5nLmxlbmd0aFxyXG4gICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlU2V0RGF0YSA9XHJcbiAgICAgICAgICAgICAgICAgIHNtYXJ0Rm9ybS5jb21wb25lbnRNb2RlbC52YWx1ZVNldHNbd2lkZ2V0LnNlbGVjdGlvbi52YWx1ZVNldE5hbWVdLnZhbHVlU2V0RGF0YTtcclxuICAgICAgICAgICAgICAgIHdpZGdldC52YWx1ZUxpc3QgPSB2YWx1ZVNldERhdGEudmFsdWVzLm1hcCgodmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleTogdmFsdWVbdmFsdWVTZXREYXRhLmtleVByb3BlcnR5XSxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDpcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAod2lkZ2V0IGFzIFNtYXJ0U2VsZWN0PGFueT4pLnNlbGVjdGlvbj8uZGlzcGxheVByb3BlcnR5ID8/ICdkaXNwbGF5VmFsdWUnXHJcbiAgICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSVRFTSxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVbdmFsdWVTZXREYXRhLmtleVByb3BlcnR5XSxcclxuICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgICB3aWRnZXQuc2VsZWN0aW9uLnR5cGUgPT09IFNlbGVjdGlvbkRlZmluaXRpb24uVHlwZUVudW0uT2JqZWN0ICYmXHJcbiAgICAgICAgICAgICAgICAhd2lkZ2V0LnNlbGVjdGlvbi5tYXBwaW5nLmxlbmd0aFxyXG4gICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlU2V0RGF0YSA9XHJcbiAgICAgICAgICAgICAgICAgIHNtYXJ0Rm9ybS5jb21wb25lbnRNb2RlbC52YWx1ZVNldHNbd2lkZ2V0LnNlbGVjdGlvbi52YWx1ZVNldE5hbWVdLnZhbHVlU2V0RGF0YTtcclxuICAgICAgICAgICAgICAgIHdpZGdldC52YWx1ZUxpc3QgPSB2YWx1ZVNldERhdGEudmFsdWVzLm1hcCgodmFsdWU6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleTogYCR7aW5kZXh9YCxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDpcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAod2lkZ2V0IGFzIFNtYXJ0U2VsZWN0PGFueT4pLnNlbGVjdGlvbj8uZGlzcGxheVByb3BlcnR5ID8/ICdkaXNwbGF5VmFsdWUnXHJcbiAgICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSVRFTSxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHdpZGdldCAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DSEVDS19CT1ggJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnZhbHVlTGlzdC5sZW5ndGggPT09IDFcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB3aWRnZXQudmFsdWVMaXN0ID0gd2lkZ2V0LnZhbHVlTGlzdC5tYXAoKGl0ZW06IFNtYXJ0SXRlbTxhbnk+KSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZURlZXBseShkYXRhLCBrZXkpO1xyXG4gICAgICAgICAgICAgIGl0ZW0udmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIEluIGNhc2Ugb2YgQ2hlY2tCb3gyXHJcbiAgICAgICAgICBsZXQgc3BsaXR0ZWRLZXlzID0ga2V5LnNwbGl0KCcuJyk7XHJcbiAgICAgICAgICBzcGxpdHRlZEtleXMuc3BsaWNlKHNwbGl0dGVkS2V5cy5sZW5ndGggLSAxLCAxKTtcclxuICAgICAgICAgIHdpZGdldCA9IHRoaXMuZmluZFNtYXJ0Rm9ybVdpZGdldEJ5S2V5KHNtYXJ0Rm9ybS53aWRnZXRzLCBzcGxpdHRlZEtleXMuam9pbignLicpKTtcclxuICAgICAgICAgIGlmICh3aWRnZXQgJiYgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ0hFQ0tfQk9YXzIgJiYgd2lkZ2V0LnZhbHVlTGlzdCkge1xyXG4gICAgICAgICAgICB3aWRnZXQudmFsdWVMaXN0ID0gd2lkZ2V0LnZhbHVlTGlzdC5tYXAoKGl0ZW06IFNtYXJ0SXRlbTxhbnk+KSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZURlZXBseShkYXRhLCBgJHt3aWRnZXQ/LmtleX0uJHtpdGVtLmtleX1gKTtcclxuICAgICAgICAgICAgICBpdGVtLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9Gb3JtR3JvdXAoKTogRm9ybUdyb3VwIHtcclxuICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2xzKHRoaXMuc21hcnRGb3JtIS53aWRnZXRzKTtcclxuXHJcbiAgICBsZXQgZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh0aGlzLmdyb3VwKTtcclxuXHJcbiAgICBpZiAodGhpcy5zbWFydEZvcm0hLnZhbGlkYXRvcnMgJiYgdGhpcy5zbWFydEZvcm0hLnZhbGlkYXRvcnMubGVuZ3RoKSB7XHJcbiAgICAgIGZvcm1Hcm91cC5zZXRWYWxpZGF0b3JzKFxyXG4gICAgICAgIHRoaXMuc21hcnRGb3JtIS52YWxpZGF0b3JzLm1hcCgodmFsaWRhdG9yOiBTbWFydFZhbGlkYXRvcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0b3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZm9ybUdyb3VwO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlRm9ybUNvbnRyb2xzKHdpZGdldHM6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+W10gfCBTbWFydEl0ZW08YW55PltdLCBwYXJlbnRLZXk/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHdpZGdldHMubWFwKCh3aWRnZXQpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklORElDQVRPUiAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkxBQkVMICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuRklMRV9VUExPQURFUiAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklNQUdFICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuRElWSURFUiAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkJVVFRPTiAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNIRUNLX0JPWF8yICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSVRFTSAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTVBPTkVOVCAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLk1BVFJJWCAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLllPVVRVQkVfUExBWUVSXHJcbiAgICAgICkge1xyXG4gICAgICAgIGxldCBmb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbChcclxuICAgICAgICAgIHdpZGdldC52YWx1ZSB8fCAnJyxcclxuICAgICAgICAgIHdpZGdldC52YWxpZGF0b3JzPy5tYXAoKHZhbGlkYXRvcjogU21hcnRWYWxpZGF0b3IpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0b3I7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGlmICh3aWRnZXQuaXNEaXNhYmxlZCkge1xyXG4gICAgICAgICAgZm9ybUNvbnRyb2wuZGlzYWJsZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5ncm91cFtgJHt3aWRnZXQua2V5fWBdID0gZm9ybUNvbnRyb2w7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLk1BVFJJWCkge1xyXG4gICAgICAgIGlmICh3aWRnZXQuaXNNdWx0aXBsZSkge1xyXG4gICAgICAgICAgbGV0IGRhdGFLZXlzID0gT2JqZWN0LmtleXMod2lkZ2V0LnZhbHVlLmRhdGEpO1xyXG4gICAgICAgICAgbGV0IGl0ZW1LZXlzID0gd2lkZ2V0LnZhbHVlLmNvbHVtbnMubWFwKCh2YWx1ZTogVmFsdWUpID0+IHZhbHVlLmNvZGUpO1xyXG4gICAgICAgICAgZGF0YUtleXMuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgaXRlbUtleXMuZm9yRWFjaCgoaXRlbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IGZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAgICAgd2lkZ2V0LnZhbHVlLmRhdGFba2V5XVtpdGVtXSxcclxuICAgICAgICAgICAgICAgIHdpZGdldC52YWxpZGF0b3JzPy5tYXAoKHZhbGlkYXRvcjogU21hcnRWYWxpZGF0b3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0b3I7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cFtgJHt3aWRnZXQua2V5fS5kYXRhLiR7a2V5fS4ke2l0ZW19YF0gPSBmb3JtQ29udHJvbDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgT2JqZWN0LmtleXMod2lkZ2V0LnZhbHVlLmRhdGEpLm1hcCgoa2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgbGV0IGZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAgIHdpZGdldC5pc011bHRpcGxlID8gd2lkZ2V0LnZhbHVlLmRhdGFba2V5XSA6IHdpZGdldC52YWx1ZS5kYXRhW2tleV1bMF0gfHwgJycsXHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnZhbGlkYXRvcnM/Lm1hcCgodmFsaWRhdG9yOiBTbWFydFZhbGlkYXRvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0b3I7XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh3aWRnZXQuaXNEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sLmRpc2FibGUoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5ncm91cFtgJHt3aWRnZXQua2V5fS4ke2tleX1gXSA9IGZvcm1Db250cm9sO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JVEVNICYmIHBhcmVudEtleSkge1xyXG4gICAgICAgIGxldCBmb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCh3aWRnZXQudmFsdWUpO1xyXG5cclxuICAgICAgICBpZiAod2lkZ2V0LmlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgIGZvcm1Db250cm9sLmRpc2FibGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZ3JvdXBbYCR7cGFyZW50S2V5fS4ke3dpZGdldC5rZXl9YF0gPSBmb3JtQ29udHJvbDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTlRBSU5FUiAmJiB3aWRnZXQudmFsdWVMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9scyh3aWRnZXQudmFsdWVMaXN0KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAod2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ0hFQ0tfQk9YXzIgJiYgd2lkZ2V0LnZhbHVlTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVGb3JtQ29udHJvbHMod2lkZ2V0LnZhbHVlTGlzdCwgd2lkZ2V0LmtleSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaXNWYWxpZGF0b3JJbkxpc3QodmFsaWRhdG9yOiBTbWFydFZhbGlkYXRvciwgbGlzdD86IFNtYXJ0VmFsaWRhdG9yW10pOiBib29sZWFuIHtcclxuICAgIHJldHVybiBsaXN0ICE9PSB1bmRlZmluZWQgJiYgbGlzdC5sZW5ndGggPiAwICYmIGxpc3Quc29tZSgodikgPT4gdiA9PT0gdmFsaWRhdG9yKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29weVZhbHVlRnJvbUZvcm1Ub1dpZGdldEJlYW5zKHdpZGdldHM6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+W10sIGdyb3VwOiBGb3JtR3JvdXApOiB2b2lkIHtcclxuICAgIHdpZGdldHMuZm9yRWFjaCgod2lkZ2V0KSA9PiB7XHJcbiAgICAgIGlmICh3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVIgJiYgd2lkZ2V0LnZhbHVlTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5jb3B5VmFsdWVGcm9tRm9ybVRvV2lkZ2V0QmVhbnMod2lkZ2V0LnZhbHVlTGlzdCwgZ3JvdXApO1xyXG4gICAgICB9IGVsc2UgaWYgKHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLk1BVFJJWCkge1xyXG4gICAgICAgIGlmICh3aWRnZXQuaXNNdWx0aXBsZSkge1xyXG4gICAgICAgICAgbGV0IGRhdGFLZXlzID0gT2JqZWN0LmtleXMod2lkZ2V0LnZhbHVlLmRhdGEpO1xyXG4gICAgICAgICAgbGV0IGl0ZW1LZXlzID0gd2lkZ2V0LnZhbHVlLmNvbHVtbnMubWFwKCh2YWx1ZTogVmFsdWUpID0+IHZhbHVlLmNvZGUpO1xyXG4gICAgICAgICAgZGF0YUtleXMuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgaXRlbUtleXMuZm9yRWFjaCgoaXRlbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnZhbHVlLmRhdGFba2V5XVtpdGVtXSA9IFtcclxuICAgICAgICAgICAgICAgIGdyb3VwLmNvbnRyb2xzW2Ake3dpZGdldC5rZXl9LmRhdGEuJHtrZXl9LiR7aXRlbX1gXS52YWx1ZSxcclxuICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGxldCBkYXRha2V5cyA9IE9iamVjdC5rZXlzKHdpZGdldC52YWx1ZS5kYXRhKTtcclxuICAgICAgICAgIC8vTWFwIGNoZWNrYm94IGtleSAtIGJvb2xlYW4gdmFsdWUgdG8gc3RyaW5nIGtleSBhcnJheVxyXG4gICAgICAgICAgbGV0IHZhbHVlS2V5cyA9IHdpZGdldC52YWx1ZS5jb2x1bW5zLm1hcCgodmFsdWU6IFZhbHVlKSA9PiB2YWx1ZS5jb2RlKTtcclxuICAgICAgICAgIGRhdGFrZXlzLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBuZXdEYXRhOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgICAgICB2YWx1ZUtleXMuZm9yRWFjaCgodmFsdWVLZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCB2YWx1ZSA9IHdpZGdldC52YWx1ZS5kYXRhW2tleV1bdmFsdWVLZXldO1xyXG4gICAgICAgICAgICAgIGlmICh2YWx1ZVswXSkge1xyXG4gICAgICAgICAgICAgICAgbmV3RGF0YS5wdXNoKHZhbHVlS2V5KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB3aWRnZXQudmFsdWUuZGF0YVtrZXldID0gbmV3RGF0YTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBPYmplY3Qua2V5cyh3aWRnZXQudmFsdWUuZGF0YSkubWFwKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICB3aWRnZXQudmFsdWUuZGF0YVtrZXldID0gW2dyb3VwLmNvbnRyb2xzW2Ake3dpZGdldC5rZXl9LiR7a2V5fWBdLnZhbHVlXTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JTkRJQ0FUT1IgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5MQUJFTCAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTlRBSU5FUiAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklNQUdFICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuRklMRV9VUExPQURFUiAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkJVVFRPTiAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRJVklERVIgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DSEVDS19CT1hfMiAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTVBPTkVOVCAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLllPVVRVQkVfUExBWUVSXHJcbiAgICAgICkge1xyXG4gICAgICAgIHdpZGdldC52YWx1ZSA9IGdyb3VwLmNvbnRyb2xzW3dpZGdldC5rZXldLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRvU21hcnRGb3JtKGdyb3VwOiBGb3JtR3JvdXApOiBTbWFydEZvcm0ge1xyXG4gICAgdGhpcy5jb3B5VmFsdWVGcm9tRm9ybVRvV2lkZ2V0QmVhbnModGhpcy5zbWFydEZvcm0hLndpZGdldHMsIGdyb3VwKTtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnNtYXJ0Rm9ybT8uY29tcG9uZW50TW9kZWw/LmRhdGE7XHJcbiAgICBpZiAoZGF0YSkge1xyXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiB0aGlzLmdldFByb3BlcnR5TmFtZXNEZWVwbHkoZGF0YSkpIHtcclxuICAgICAgICBpZiAoZ3JvdXAuY29udHJvbHNba2V5XSkge1xyXG4gICAgICAgICAgdGhpcy5zZXRWYWx1ZURlZXBseShkYXRhLCBrZXksIGdyb3VwLmNvbnRyb2xzW2tleV0udmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnNtYXJ0Rm9ybSE7XHJcbiAgfVxyXG5cclxuICBnZXRNb2RlbChncm91cDogRm9ybUdyb3VwKTogYW55IHtcclxuICAgIGlmICghdGhpcy5zbWFydEZvcm0/LmNvbXBvbmVudE1vZGVsKSB7XHJcbiAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuICAgIGxldCBvcmlnaW5hbE1vZGVsID0gdGhpcy5zbWFydEZvcm0uY29tcG9uZW50TW9kZWwuZGF0YTtcclxuICAgIGxldCBjb3B5T2ZNb2RlbCA9IHsgLi4ub3JpZ2luYWxNb2RlbCB9O1xyXG5cclxuICAgIC8vIGNvcHlPZk1vZGVsIHNob3VsZCBiZSB0aGUgY3VycmVudCBtb2RlbFxyXG4gICAgdGhpcy5zbWFydEZvcm0uY29tcG9uZW50TW9kZWwuZGF0YSA9IGNvcHlPZk1vZGVsO1xyXG4gICAgLy8gY29weSB2YWx1ZSBmcm9tIEZvcm1Hcm91cCBpbnRvIG1vZGVsXHJcbiAgICB0aGlzLnRvU21hcnRGb3JtKGdyb3VwKTtcclxuXHJcbiAgICBsZXQgbmV3TW9kZWwgPSB0aGlzLnNtYXJ0Rm9ybS5jb21wb25lbnRNb2RlbC5kYXRhO1xyXG4gICAgdGhpcy5zbWFydEZvcm0uY29tcG9uZW50TW9kZWwuZGF0YSA9IG9yaWdpbmFsTW9kZWw7XHJcblxyXG4gICAgcmV0dXJuIG5ld01vZGVsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUNvbXBvbmVudENvbnN0cmFpbnRzKFxyXG4gICAgd2lkZ2V0czogU21hcnRGb3JtV2lkZ2V0PGFueT5bXSxcclxuICAgIGNvbnN0cmFpbnRzOiBTbWFydEZvcm1Db21wb25lbnRDb25zdHJhaW50W11cclxuICApIHtcclxuICAgIHdpZGdldHMuZm9yRWFjaCgod2lkZ2V0OiBTbWFydEZvcm1XaWRnZXQ8YW55PikgPT4ge1xyXG4gICAgICBsZXQgY29uc3RyYWludCA9IGNvbnN0cmFpbnRzPy5maWx0ZXIoXHJcbiAgICAgICAgKGNvbnN0cmFpbnQ6IFNtYXJ0Rm9ybUNvbXBvbmVudENvbnN0cmFpbnQpID0+IGNvbnN0cmFpbnQuZGF0YU5hbWUgPT09IHdpZGdldC5rZXlcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmIChjb25zdHJhaW50ICYmIGNvbnN0cmFpbnQubGVuZ3RoKSB7XHJcbiAgICAgICAgd2lkZ2V0LmlzVmlzaWJsZSA9IGNvbnN0cmFpbnRbMF0udmlzaWJsZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGNvbnN0cmFpbnRbMF0udmlzaWJsZTtcclxuICAgICAgICBpZiAoY29uc3RyYWludFswXS5tYW5kYXRvcnkgIT09IHVuZGVmaW5lZCAmJiBjb25zdHJhaW50WzBdLm1hbmRhdG9yeSkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JTkRJQ0FUT1IgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTEFCRUwgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklNQUdFICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkZJTEVfVVBMT0FERVIgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuRElWSURFUiAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5CVVRUT04gJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09NUE9ORU5UICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLllPVVRVQkVfUExBWUVSXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgd2lkZ2V0LnZhbGlkYXRvcnMgPSBbXHJcbiAgICAgICAgICAgICAgLi4uKHdpZGdldC52YWxpZGF0b3JzID8/IFtdKSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3I6IFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgICBpc0N1c3RvbTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2U6ICcnLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogJ3JlcXVpcmVkJyxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JTkRJQ0FUT1IgJiZcclxuICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkxBQkVMICYmXHJcbiAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVIgJiZcclxuICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklNQUdFICYmXHJcbiAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5GSUxFX1VQTE9BREVSICYmXHJcbiAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ESVZJREVSICYmXHJcbiAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5CVVRUT04gJiZcclxuICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTVBPTkVOVCAmJlxyXG4gICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuWU9VVFVCRV9QTEFZRVJcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHdpZGdldC5pc0Rpc2FibGVkID0gY29uc3RyYWludFswXS5lbmFibGVkID09PSB1bmRlZmluZWQgPyBmYWxzZSA6ICFjb25zdHJhaW50WzBdLmVuYWJsZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVIgJiZcclxuICAgICAgICB3aWRnZXQudmFsdWVMaXN0ICYmXHJcbiAgICAgICAgd2lkZ2V0LnZhbHVlTGlzdC5sZW5ndGhcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5hcHBseUNvbXBvbmVudENvbnN0cmFpbnRzKHdpZGdldC52YWx1ZUxpc3QsIGNvbnN0cmFpbnRzKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhcHBseUNvbnN0cmFpbnRzKCk6IHZvaWQge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNtYXJ0Rm9ybSEuY29tcG9uZW50TW9kZWw/LmNvbnN0cmFpbnRzICYmXHJcbiAgICAgIHRoaXMuc21hcnRGb3JtIS5jb21wb25lbnRNb2RlbD8uY29uc3RyYWludHMubGVuZ3RoXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5hcHBseUNvbXBvbmVudENvbnN0cmFpbnRzKFxyXG4gICAgICAgIHRoaXMuc21hcnRGb3JtIS53aWRnZXRzLFxyXG4gICAgICAgIHRoaXMuc21hcnRGb3JtIS5jb21wb25lbnRNb2RlbD8uY29uc3RyYWludHNcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZpbHRlcldpZGdldHNCeVZpc2liaWxpdHkod2lkZ2V0czogU21hcnRGb3JtV2lkZ2V0PGFueT5bXSk6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+W10ge1xyXG4gICAgcmV0dXJuIHdpZGdldHMuZmlsdGVyKCh3aWRnZXQ6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+KSA9PlxyXG4gICAgICB3aWRnZXQuaXNWaXNpYmxlID09PSB1bmRlZmluZWQgPyB0cnVlIDogd2lkZ2V0LmlzVmlzaWJsZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZ2V0VHJhbnNsYXRpb25PZktleShrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5zbWFydEZvcm0hLnRyYW5zbGF0ZVNlcnZpY2UhLmdldChrZXkpLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdHJhbnNsYXRlV2lkZ2V0cyh3aWRnZXRzOiBTbWFydEZvcm1XaWRnZXQ8YW55PltdKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBQcm9taXNlLmFsbChcclxuICAgICAgd2lkZ2V0cy5tYXAoYXN5bmMgKHdpZGdldDogU21hcnRGb3JtV2lkZ2V0PGFueT4pID0+IHtcclxuICAgICAgICBpZiAod2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuWU9VVFVCRV9QTEFZRVIpIHJldHVybjtcclxuICAgICAgICBpZiAod2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSKSB7XHJcbiAgICAgICAgICBpZiAoIXdpZGdldC5vcmlnaW5hbExhYmVsKSB7XHJcbiAgICAgICAgICAgIHdpZGdldC5vcmlnaW5hbExhYmVsID0gYCR7d2lkZ2V0LmxhYmVsfWA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyAgTGFiZWxcclxuICAgICAgICAgIHdpZGdldC5sYWJlbCA9IGF3YWl0IHRoaXMuZ2V0VHJhbnNsYXRpb25PZktleSh3aWRnZXQub3JpZ2luYWxMYWJlbCk7XHJcblxyXG4gICAgICAgICAgLy8gUGxhY2Vob2xkZXJcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgKHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlRFWFRfRklFTEQgfHxcclxuICAgICAgICAgICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5URVhUX0ZJRUxEX05VTUJFUiB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlRFWFRfRklFTERfQ0hJUFMgfHxcclxuICAgICAgICAgICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5SSUNIX1RFWFQgfHxcclxuICAgICAgICAgICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5URVhUX0JPWCkgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnBsYWNlaG9sZGVyXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgaWYgKCF3aWRnZXQub3JpZ2luYWxQbGFjZWhvbGRlcikge1xyXG4gICAgICAgICAgICAgIHdpZGdldC5vcmlnaW5hbFBsYWNlaG9sZGVyID0gYCR7d2lkZ2V0LnBsYWNlaG9sZGVyfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd2lkZ2V0LnBsYWNlaG9sZGVyID0gYXdhaXQgdGhpcy5nZXRUcmFuc2xhdGlvbk9mS2V5KHdpZGdldC5vcmlnaW5hbFBsYWNlaG9sZGVyKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBWYWxpZGF0b3JzXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklORElDQVRPUiAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5MQUJFTCAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JTUFHRSAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5GSUxFX1VQTE9BREVSICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRJVklERVIgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQlVUVE9OICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTVBPTkVOVCAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudmFsaWRhdG9yc1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHdpZGdldC52YWxpZGF0b3JzID0gYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnZhbGlkYXRvcnMubWFwKGFzeW5jICh2YWxpZGF0b3I6IFNtYXJ0VmFsaWRhdG9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRvci5vcmlnaW5hbEVycm9yTWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgICB2YWxpZGF0b3Iub3JpZ2luYWxFcnJvck1lc3NhZ2UgPSBgJHt2YWxpZGF0b3IuZXJyb3JNZXNzYWdlfWA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3IuZXJyb3JNZXNzYWdlID0gYXdhaXQgdGhpcy5nZXRUcmFuc2xhdGlvbk9mS2V5KFxyXG4gICAgICAgICAgICAgICAgICB2YWxpZGF0b3Iub3JpZ2luYWxFcnJvck1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdG9yO1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBJbmRpY2F0b3JcclxuICAgICAgICAgIGlmICh3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JTkRJQ0FUT1IgJiYgd2lkZ2V0LmluZGljYXRvcikge1xyXG4gICAgICAgICAgICBpZiAoIXdpZGdldC5pbmRpY2F0b3Iub3JpZ2luYWxJbmRpY2F0b3JTdGF0dXNMYWJlbHMpIHtcclxuICAgICAgICAgICAgICB3aWRnZXQuaW5kaWNhdG9yLm9yaWdpbmFsSW5kaWNhdG9yU3RhdHVzTGFiZWxzID1cclxuICAgICAgICAgICAgICAgIHdpZGdldC5pbmRpY2F0b3IuaW5kaWNhdG9yU3RhdHVzTGFiZWxzLm1hcCgobGFiZWw6IHN0cmluZykgPT4gbGFiZWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdpZGdldC5pbmRpY2F0b3IuaW5kaWNhdG9yU3RhdHVzTGFiZWxzID0gYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgICAgd2lkZ2V0LmluZGljYXRvci5pbmRpY2F0b3JTdGF0dXNMYWJlbHMubWFwKFxyXG4gICAgICAgICAgICAgICAgYXN5bmMgKGxhYmVsOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+XHJcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0VHJhbnNsYXRpb25PZktleShcclxuICAgICAgICAgICAgICAgICAgICB3aWRnZXQuaW5kaWNhdG9yIS5vcmlnaW5hbEluZGljYXRvclN0YXR1c0xhYmVscyFbaW5kZXhdXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAod2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRF9DSElQUyB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlNFTEVDVCB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlNFTEVDVF9NVUxUSVBMRSB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNIRUNLX0JPWCB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNIRUNLX0JPWF8yIHx8XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuUkFESU9fQlVUVE9OKSAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudmFsdWVMaXN0XHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVXaWRnZXRJdGVtcyh3aWRnZXQudmFsdWVMaXN0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVXaWRnZXRzKHdpZGdldC52YWx1ZUxpc3QhKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdHJhbnNsYXRlV2lkZ2V0SXRlbXMod2lkZ2V0czogU21hcnRJdGVtczxhbnk+W10pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIFByb21pc2UuYWxsKFxyXG4gICAgICB3aWRnZXRzLm1hcChhc3luYyAod2lkZ2V0OiBTbWFydEl0ZW1zPGFueT4pID0+IHtcclxuICAgICAgICBpZiAoIXdpZGdldC5vcmlnaW5hbExhYmVsKSB7XHJcbiAgICAgICAgICB3aWRnZXQub3JpZ2luYWxMYWJlbCA9IGAke3dpZGdldC5sYWJlbH1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyAgTGFiZWxcclxuICAgICAgICB3aWRnZXQubGFiZWwgPSBhd2FpdCB0aGlzLmdldFRyYW5zbGF0aW9uT2ZLZXkod2lkZ2V0Lm9yaWdpbmFsTGFiZWwpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,14 @@
1
+ import { Component } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class LargeFileSnackBarComponent {
4
+ constructor() { }
5
+ ngOnInit() {
6
+ }
7
+ }
8
+ LargeFileSnackBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: LargeFileSnackBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9
+ LargeFileSnackBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: LargeFileSnackBarComponent, selector: "lib-large-file-snack-bar", ngImport: i0, template: "<span class=\"largeFileSnakBarContainer\" matSnackBarLabel\r\n >A kiv\u00E1lasztott f\u00E1jl(ok) m\u00E9rete t\u00FAl nagy.</span\r\n>\r\n", styles: ["::ng-deep .mat-snack-bar-container{background-color:var(--warn-color)!important;text-align:center;border-radius:2rem}.largeFileSnakBarContainer{color:#fff}\n"] });
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: LargeFileSnackBarComponent, decorators: [{
11
+ type: Component,
12
+ args: [{ selector: 'lib-large-file-snack-bar', template: "<span class=\"largeFileSnakBarContainer\" matSnackBarLabel\r\n >A kiv\u00E1lasztott f\u00E1jl(ok) m\u00E9rete t\u00FAl nagy.</span\r\n>\r\n", styles: ["::ng-deep .mat-snack-bar-container{background-color:var(--warn-color)!important;text-align:center;border-radius:2rem}.largeFileSnakBarContainer{color:#fff}\n"] }]
13
+ }], ctorParameters: function () { return []; } });
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFyZ2UtZmlsZS1zbmFjay1iYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtZm9ybS9zbWFydGZpbGV1cGxvYWRlci9sYXJnZS1maWxlLXNuYWNrLWJhci9sYXJnZS1maWxlLXNuYWNrLWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1mb3JtL3NtYXJ0ZmlsZXVwbG9hZGVyL2xhcmdlLWZpbGUtc25hY2stYmFyL2xhcmdlLWZpbGUtc25hY2stYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7O0FBT2xELE1BQU0sT0FBTywwQkFBMEI7SUFFckMsZ0JBQWdCLENBQUM7SUFFakIsUUFBUTtJQUNSLENBQUM7O3VIQUxVLDBCQUEwQjsyR0FBMUIsMEJBQTBCLGdFQ1B2QyxnSkFHQTsyRkRJYSwwQkFBMEI7a0JBTHRDLFNBQVM7K0JBQ0UsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWxhcmdlLWZpbGUtc25hY2stYmFyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbGFyZ2UtZmlsZS1zbmFjay1iYXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2xhcmdlLWZpbGUtc25hY2stYmFyLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTGFyZ2VGaWxlU25hY2tCYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG59XHJcbiIsIjxzcGFuIGNsYXNzPVwibGFyZ2VGaWxlU25ha0JhckNvbnRhaW5lclwiIG1hdFNuYWNrQmFyTGFiZWxcclxuICAgID5BIGtpdsOhbGFzenRvdHQgZsOhamwob2spIG3DqXJldGUgdMO6bCBuYWd5Ljwvc3BhblxyXG4+XHJcbiJdfQ==