@mediusinc/mng-commons 4.2.0 → 5.0.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1373) hide show
  1. package/README.md +1 -0
  2. package/core/README.md +8 -0
  3. package/core/action/action-data.model.d.ts +3 -0
  4. package/core/action/action-parameters.model.d.ts +17 -0
  5. package/core/components/pages/error/error.page.component.d.ts +8 -0
  6. package/core/components/pages/not-found/not-found.page.component.d.ts +8 -0
  7. package/core/data-list/data-list-params.util.d.ts +84 -0
  8. package/core/data-list/data-list.model.d.ts +27 -0
  9. package/core/data-list/filter-match.model.d.ts +36 -0
  10. package/core/data-providers/base.data-provider.d.ts +32 -0
  11. package/core/data-providers/lookup.data-provider.d.ts +10 -0
  12. package/core/descriptors/action.descriptor.d.ts +12 -0
  13. package/core/descriptors/column.descriptor.d.ts +3 -0
  14. package/core/descriptors/editor.descriptor.d.ts +11 -0
  15. package/core/descriptors/filter.descriptor.d.ts +3 -0
  16. package/core/descriptors/lookup.descriptor.d.ts +12 -0
  17. package/core/descriptors/model.descriptor.d.ts +8 -0
  18. package/core/descriptors/table.descriptor.d.ts +9 -0
  19. package/core/descriptors/tableview.descriptor.d.ts +11 -0
  20. package/core/directives/component.directive.d.ts +20 -0
  21. package/core/directives/dialog-keydown-handler.directive.d.ts +12 -0
  22. package/core/directives/template.directive.d.ts +12 -0
  23. package/core/enum/enum.model.d.ts +8 -0
  24. package/core/enum/enum.util.d.ts +51 -0
  25. package/core/error/error-handler.d.ts +6 -0
  26. package/core/error/error.model.d.ts +47 -0
  27. package/core/error/error.util.d.ts +116 -0
  28. package/core/helpers/coercion.d.ts +9 -0
  29. package/core/helpers/notification.d.ts +2 -0
  30. package/core/helpers/type-helpers.d.ts +16 -0
  31. package/core/index.d.ts +77 -0
  32. package/core/log/log-publisher-console.service.d.ts +4 -0
  33. package/core/log/log.model.d.ts +40 -0
  34. package/core/log/logger.service.d.ts +33 -0
  35. package/core/models/class-service.model.d.ts +7 -0
  36. package/core/models/getter.model.d.ts +2 -0
  37. package/core/models/i18n.model.d.ts +1 -0
  38. package/core/models/menu.model.d.ts +32 -0
  39. package/core/models/user.model.d.ts +8 -0
  40. package/core/pipes/boolean.pipe.d.ts +7 -0
  41. package/core/pipes/class-map.pipe.d.ts +7 -0
  42. package/core/pipes/enumerate-async.pipe.d.ts +9 -0
  43. package/core/pipes/enumerate.pipe.d.ts +16 -0
  44. package/core/pipes/getter.pipe.d.ts +8 -0
  45. package/core/pipes/json-path.pipe.d.ts +13 -0
  46. package/core/pipes/parametrize.pipe.d.ts +12 -0
  47. package/core/pipes/template.pipe.d.ts +10 -0
  48. package/core/provide.d.ts +12 -0
  49. package/core/reflect/type-enum-metadata.d.ts +32 -0
  50. package/core/registry/registry.model.d.ts +8 -0
  51. package/core/registry/type-registry.d.ts +27 -0
  52. package/core/router/route-builder.d.ts +67 -0
  53. package/core/router/router.model.d.ts +13 -0
  54. package/core/router/routes-builder.d.ts +19 -0
  55. package/core/rxjs/map-data-list-result-operator.d.ts +9 -0
  56. package/core/security/permission.guard.d.ts +2 -0
  57. package/core/security/permission.service.d.ts +16 -0
  58. package/core/security/permission.util.d.ts +5 -0
  59. package/core/security/permissions.model.d.ts +55 -0
  60. package/core/services/commons-configuration.service.d.ts +69 -0
  61. package/core/services/commons-init.service.d.ts +30 -0
  62. package/core/services/commons-router.service.d.ts +37 -0
  63. package/core/services/commons.service.d.ts +66 -0
  64. package/core/services/local-storage-config.service.d.ts +11 -0
  65. package/core/services/providers/commons-init.provider.d.ts +4 -0
  66. package/core/services/tokens/browser-storage.token.d.ts +2 -0
  67. package/core/services/tokens/commons-init.token.d.ts +3 -0
  68. package/core/services/tokens/log-publisher.token.d.ts +3 -0
  69. package/core/services/tokens/module-config.token.d.ts +34 -0
  70. package/core/styles/style-constants.d.ts +10 -0
  71. package/core/styles/style.model.d.ts +17 -0
  72. package/core/utils/date.util.d.ts +20 -0
  73. package/core/utils/i18n.util.d.ts +36 -0
  74. package/core/utils/object.util.d.ts +31 -0
  75. package/core/utils/route.util.d.ts +37 -0
  76. package/dev-scripts/version-info.js +1 -1
  77. package/esm2022/core/action/action-data.model.mjs +2 -0
  78. package/esm2022/core/action/action-parameters.model.mjs +2 -0
  79. package/esm2022/core/components/notification/notification-wrapper.component.mjs +50 -0
  80. package/esm2022/core/components/pages/error/error.page.component.mjs +21 -0
  81. package/esm2022/core/components/pages/not-found/not-found.page.component.mjs +21 -0
  82. package/esm2022/core/data-list/data-list-params.util.mjs +417 -0
  83. package/esm2022/core/data-list/data-list.model.mjs +2 -0
  84. package/esm2022/core/data-list/filter-match.model.mjs +105 -0
  85. package/esm2022/core/data-providers/base.data-provider.mjs +48 -0
  86. package/esm2022/core/data-providers/lookup.data-provider.mjs +2 -0
  87. package/esm2022/core/descriptors/action.descriptor.mjs +2 -0
  88. package/esm2022/core/descriptors/column.descriptor.mjs +2 -0
  89. package/esm2022/core/descriptors/editor.descriptor.mjs +2 -0
  90. package/esm2022/core/descriptors/filter.descriptor.mjs +2 -0
  91. package/esm2022/core/descriptors/lookup.descriptor.mjs +2 -0
  92. package/esm2022/core/descriptors/model.descriptor.mjs +2 -0
  93. package/esm2022/core/descriptors/table.descriptor.mjs +2 -0
  94. package/esm2022/core/descriptors/tableview.descriptor.mjs +2 -0
  95. package/esm2022/core/directives/component.directive.mjs +72 -0
  96. package/esm2022/core/directives/dialog-keydown-handler.directive.mjs +49 -0
  97. package/esm2022/core/directives/template.directive.mjs +29 -0
  98. package/esm2022/core/enum/enum.model.mjs +2 -0
  99. package/esm2022/core/enum/enum.util.mjs +83 -0
  100. package/esm2022/core/error/error-handler.mjs +20 -0
  101. package/esm2022/core/error/error.model.mjs +32 -0
  102. package/esm2022/core/error/error.util.mjs +249 -0
  103. package/esm2022/core/helpers/coercion.mjs +52 -0
  104. package/esm2022/core/helpers/notification.mjs +6 -0
  105. package/esm2022/core/helpers/type-helpers.mjs +2 -0
  106. package/esm2022/core/index.mjs +99 -0
  107. package/esm2022/core/log/log-publisher-console.service.mjs +40 -0
  108. package/esm2022/core/log/log.model.mjs +10 -0
  109. package/esm2022/core/log/logger.service.mjs +131 -0
  110. package/esm2022/core/mediusinc-mng-commons-core.mjs +5 -0
  111. package/esm2022/core/models/class-attribute.model.mjs +2 -0
  112. package/esm2022/core/models/class-service.model.mjs +2 -0
  113. package/esm2022/core/models/getter.model.mjs +2 -0
  114. package/esm2022/core/models/i18n.model.mjs +2 -0
  115. package/esm2022/core/models/menu.model.mjs +2 -0
  116. package/esm2022/core/models/user.model.mjs +2 -0
  117. package/esm2022/core/models/version.model.mjs +2 -0
  118. package/esm2022/core/pipes/boolean.pipe.mjs +28 -0
  119. package/esm2022/core/pipes/class-map.pipe.mjs +23 -0
  120. package/esm2022/core/pipes/enumerate-async.pipe.mjs +36 -0
  121. package/esm2022/core/pipes/enumerate.pipe.mjs +49 -0
  122. package/esm2022/core/pipes/getter.pipe.mjs +21 -0
  123. package/esm2022/core/pipes/json-path.pipe.mjs +25 -0
  124. package/esm2022/core/pipes/parametrize.pipe.mjs +86 -0
  125. package/esm2022/core/pipes/template.pipe.mjs +26 -0
  126. package/esm2022/core/provide.mjs +98 -0
  127. package/esm2022/core/reflect/type-enum-decorator.mjs +12 -0
  128. package/esm2022/core/reflect/type-enum-metadata.mjs +62 -0
  129. package/esm2022/core/registry/registry.model.mjs +2 -0
  130. package/esm2022/core/registry/type-registry.mjs +106 -0
  131. package/esm2022/core/router/route-builder.mjs +336 -0
  132. package/esm2022/core/router/router.model.mjs +2 -0
  133. package/esm2022/core/router/routes-builder.mjs +53 -0
  134. package/esm2022/core/rxjs/map-data-list-result-operator.mjs +19 -0
  135. package/esm2022/core/security/permission.guard.mjs +15 -0
  136. package/esm2022/core/security/permission.service.mjs +49 -0
  137. package/esm2022/core/security/permission.util.mjs +16 -0
  138. package/esm2022/core/security/permissions.model.mjs +93 -0
  139. package/esm2022/core/services/commons-configuration.service.mjs +174 -0
  140. package/esm2022/core/services/commons-init.service.mjs +111 -0
  141. package/esm2022/core/services/commons-router.service.mjs +180 -0
  142. package/esm2022/core/services/commons.service.mjs +390 -0
  143. package/esm2022/core/services/local-storage-config.service.mjs +29 -0
  144. package/esm2022/core/services/providers/commons-init.provider.mjs +4 -0
  145. package/esm2022/core/services/tokens/browser-storage.token.mjs +3 -0
  146. package/esm2022/core/services/tokens/commons-init.token.mjs +3 -0
  147. package/esm2022/core/services/tokens/log-publisher.token.mjs +3 -0
  148. package/esm2022/core/services/tokens/module-config.token.mjs +3 -0
  149. package/esm2022/core/styles/style-constants.mjs +11 -0
  150. package/esm2022/core/styles/style.model.mjs +20 -0
  151. package/esm2022/core/utils/date.util.mjs +136 -0
  152. package/esm2022/core/utils/i18n.util.mjs +137 -0
  153. package/esm2022/core/utils/object.util.mjs +147 -0
  154. package/esm2022/core/utils/route.util.mjs +60 -0
  155. package/esm2022/core/utils/string.util.mjs +59 -0
  156. package/esm2022/filter/descriptors/filter-lookup.descriptor.mjs +186 -0
  157. package/esm2022/filter/descriptors/filter.descriptor.mjs +197 -0
  158. package/esm2022/filter/index.mjs +6 -0
  159. package/esm2022/filter/mediusinc-mng-commons-filter.mjs +5 -0
  160. package/esm2022/filter/models/filter.model.mjs +15 -0
  161. package/esm2022/form/api/data-providers/lookup.data-provider.mjs +45 -0
  162. package/esm2022/form/api/descriptors/action-button.descriptor.mjs +68 -0
  163. package/esm2022/form/api/descriptors/button-style.builder.mjs +174 -0
  164. package/esm2022/form/api/index.mjs +8 -0
  165. package/esm2022/form/api/mediusinc-mng-commons-form-api.mjs +5 -0
  166. package/esm2022/form/api/models/trim.model.mjs +2 -0
  167. package/esm2022/form/components/autocomplete/autocomplete.component.mjs +404 -0
  168. package/esm2022/form/components/date-range/date-range.component.mjs +110 -0
  169. package/esm2022/form/components/dropdown/dropdown.component.mjs +213 -0
  170. package/esm2022/form/directives/input-trim.directive.mjs +55 -0
  171. package/esm2022/form/index.mjs +7 -0
  172. package/esm2022/form/mediusinc-mng-commons-form.mjs +5 -0
  173. package/esm2022/index.mjs +2 -77
  174. package/esm2022/model/descriptors/enum.descriptor.mjs +31 -0
  175. package/esm2022/model/descriptors/model.descriptor.mjs +78 -0
  176. package/esm2022/model/descriptors/type.descriptor.mjs +21 -0
  177. package/esm2022/model/index.mjs +11 -0
  178. package/esm2022/model/mediusinc-mng-commons-model.mjs +5 -0
  179. package/esm2022/model/pipes/enum.pipe.mjs +26 -0
  180. package/esm2022/model/pipes/i18n-property.pipe.mjs +19 -0
  181. package/esm2022/model/utils/i18n.util.mjs +51 -0
  182. package/esm2022/model/utils/model.util.mjs +73 -0
  183. package/esm2022/provide.mjs +6 -0
  184. package/esm2022/table/api/data-providers/table.data-provider.mjs +63 -0
  185. package/esm2022/table/api/descriptors/column.descriptor.mjs +359 -0
  186. package/esm2022/table/api/descriptors/sort.descriptor.mjs +45 -0
  187. package/esm2022/table/api/descriptors/table.descriptor.mjs +750 -0
  188. package/esm2022/table/api/helpers/class-attribute-converter.mjs +104 -0
  189. package/esm2022/table/api/index.mjs +16 -0
  190. package/esm2022/table/api/mediusinc-mng-commons-table-api.mjs +5 -0
  191. package/esm2022/table/api/models/class-table-attribute.model.mjs +2 -0
  192. package/esm2022/table/api/models/column-value.model.mjs +2 -0
  193. package/esm2022/table/api/models/column.model.mjs +21 -0
  194. package/esm2022/table/api/models/table-columns.model.mjs +2 -0
  195. package/esm2022/table/api/models/table-event.model.mjs +2 -0
  196. package/esm2022/table/api/models/table.model.mjs +22 -0
  197. package/esm2022/table/components/column-filter-full/column-filter-full.component.mjs +594 -0
  198. package/esm2022/table/components/column-value/column-value.component.mjs +88 -0
  199. package/esm2022/table/components/table/table.component.mjs +647 -0
  200. package/esm2022/table/helpers/notification.mjs +15 -0
  201. package/esm2022/table/helpers/table-layout-prefs.mjs +10 -0
  202. package/esm2022/table/index.mjs +13 -0
  203. package/esm2022/table/mediusinc-mng-commons-table.mjs +5 -0
  204. package/esm2022/table/models/column-preferences.model.mjs +2 -0
  205. package/esm2022/table/pipes/locale-default-row-class.pipe.mjs +27 -0
  206. package/esm2022/table/pipes/table-column-filter-class.pipe.mjs +25 -0
  207. package/esm2022/table/services/data-list.service.mjs +23 -0
  208. package/esm2022/tableview/action/components/action/action.component.mjs +323 -0
  209. package/esm2022/tableview/action/components/editor/action-editor.component.mjs +97 -0
  210. package/esm2022/tableview/action/components/editor/injector-context/action-editor-injector-context.component.mjs +398 -0
  211. package/esm2022/tableview/action/components/localization/data-language-dropdown.component.mjs +53 -0
  212. package/esm2022/tableview/action/components/route/action-route.component.mjs +152 -0
  213. package/esm2022/tableview/action/components/table/action-table.component.mjs +158 -0
  214. package/esm2022/tableview/action/guards/unsaved-changes.guard.mjs +4 -0
  215. package/esm2022/tableview/action/helpers/notification.mjs +17 -0
  216. package/esm2022/tableview/action/helpers/styles.mjs +32 -0
  217. package/esm2022/tableview/action/models/action-editor-dialog-data.model.mjs +2 -0
  218. package/esm2022/tableview/action/models/can-component-deactivate.model.mjs +2 -0
  219. package/esm2022/tableview/action/models/execution/action-context.model.mjs +56 -0
  220. package/esm2022/tableview/action/models/execution/action-instance-state.model.mjs +32 -0
  221. package/esm2022/tableview/action/models/execution/action-instance.model.mjs +170 -0
  222. package/esm2022/tableview/action/services/action-error-mapper.service.mjs +20 -0
  223. package/esm2022/tableview/action/services/action-executor.service.mjs +766 -0
  224. package/esm2022/tableview/action/services/component-action-executor.service.mjs +19 -0
  225. package/esm2022/tableview/action/services/data-provider-executor.service.mjs +26 -0
  226. package/esm2022/tableview/action/services/navigation.service.mjs +52 -0
  227. package/esm2022/tableview/action/services/providers/provide-action-executor.mjs +9 -0
  228. package/esm2022/tableview/action/services/providers/provide-view-container.mjs +17 -0
  229. package/esm2022/tableview/action/services/root-action-executor.service.mjs +18 -0
  230. package/esm2022/tableview/action/services/tokens/action-editor.token.mjs +3 -0
  231. package/esm2022/tableview/action/services/view-container.service.mjs +56 -0
  232. package/esm2022/tableview/action/utils/i18n.util.mjs +126 -0
  233. package/esm2022/tableview/api/action/descriptors/action-confirmation.descriptor.mjs +76 -0
  234. package/esm2022/tableview/api/action/descriptors/action-editor.descriptor.mjs +264 -0
  235. package/esm2022/tableview/api/action/descriptors/action-link.descriptor.mjs +89 -0
  236. package/esm2022/tableview/api/action/descriptors/action.descriptor.mjs +385 -0
  237. package/esm2022/tableview/api/action/helpers/data-provider-executors.mjs +80 -0
  238. package/esm2022/tableview/api/action/models/action-component.model.mjs +2 -0
  239. package/esm2022/tableview/api/action/models/action-descriptor.types.mjs +2 -0
  240. package/esm2022/tableview/api/action/models/action-editor.model.mjs +2 -0
  241. package/esm2022/tableview/api/action/models/action-error.model.mjs +14 -0
  242. package/esm2022/tableview/api/action/models/action.type.mjs +26 -0
  243. package/esm2022/tableview/api/action/models/execution/action-context-validation.model.mjs +2 -0
  244. package/esm2022/tableview/api/action/models/execution/action-context.model.mjs +2 -0
  245. package/esm2022/tableview/api/action/models/execution/action-execution-error.model.mjs +2 -0
  246. package/esm2022/tableview/api/action/models/execution/action-instance-state.model.mjs +32 -0
  247. package/esm2022/tableview/api/action/models/execution/action-instance.model.mjs +2 -0
  248. package/esm2022/tableview/api/action/models/execution/view-container.model.mjs +2 -0
  249. package/esm2022/tableview/api/action/models/tableview-action-default-categories.model.mjs +11 -0
  250. package/esm2022/tableview/api/action/services/data-provider-executor.service.mjs +28 -0
  251. package/esm2022/tableview/api/action/services/tokens/data-language-dropdown.token.mjs +3 -0
  252. package/esm2022/tableview/api/editor/data-providers/editor.data-provider.mjs +104 -0
  253. package/esm2022/tableview/api/editor/descriptors/editor.descriptor.mjs +626 -0
  254. package/esm2022/tableview/api/editor/descriptors/field-action.descriptor.mjs +49 -0
  255. package/esm2022/tableview/api/editor/descriptors/field-base.descriptor.mjs +288 -0
  256. package/esm2022/tableview/api/editor/descriptors/field-group.descriptor.mjs +97 -0
  257. package/esm2022/tableview/api/editor/descriptors/field-lookup.descriptor.mjs +213 -0
  258. package/esm2022/tableview/api/editor/descriptors/field-many.descriptor.mjs +153 -0
  259. package/esm2022/tableview/api/editor/descriptors/field-validation.descriptor.mjs +25 -0
  260. package/esm2022/tableview/api/editor/descriptors/field.descriptor.mjs +343 -0
  261. package/esm2022/tableview/api/editor/helpers/class-attribute-converter.mjs +85 -0
  262. package/esm2022/tableview/api/editor/helpers/field-validators.mjs +33 -0
  263. package/esm2022/tableview/api/editor/models/class-tableview-attribute.model.mjs +2 -0
  264. package/esm2022/tableview/api/editor/models/editor-fields.model.mjs +2 -0
  265. package/esm2022/tableview/api/editor/models/editor.model.mjs +9 -0
  266. package/esm2022/tableview/api/editor/models/field-action-context.model.mjs +2 -0
  267. package/esm2022/tableview/api/editor/models/field.model.mjs +56 -0
  268. package/esm2022/tableview/api/editor/models/form-editor.event.mjs +27 -0
  269. package/esm2022/tableview/api/editor/models/form-editor.interface.mjs +2 -0
  270. package/esm2022/tableview/api/editor/models/formly-custom-field.model.mjs +69 -0
  271. package/esm2022/tableview/api/editor/models/formly-field.model.mjs +2 -0
  272. package/esm2022/tableview/api/editor/models/radio.model.mjs +2 -0
  273. package/esm2022/tableview/api/index.mjs +64 -0
  274. package/esm2022/tableview/api/mediusinc-mng-commons-tableview-api.mjs +5 -0
  275. package/esm2022/tableview/api/tableview/data-providers/tableview.data-provider.mjs +105 -0
  276. package/esm2022/tableview/api/tableview/descriptors/tableview.descriptor.mjs +672 -0
  277. package/esm2022/tableview/api/tableview/helpers/class-attribute-converter.mjs +34 -0
  278. package/esm2022/tableview/api/tableview/helpers/files-export.mjs +34 -0
  279. package/esm2022/tableview/api/tableview/helpers/tableview-create.mjs +24 -0
  280. package/esm2022/tableview/api/tableview/helpers/tableview-default-actions.mjs +240 -0
  281. package/esm2022/tableview/api/tableview/helpers/tableview-input-builder.mjs +162 -0
  282. package/esm2022/tableview/api/tableview/models/class-tableview-attribute.model.mjs +2 -0
  283. package/esm2022/tableview/api/tableview/models/tableview-input.model.mjs +2 -0
  284. package/esm2022/tableview/api/tableview/models/tableview-route.model.mjs +2 -0
  285. package/esm2022/tableview/editor/components/editor/form-editor.component.mjs +285 -0
  286. package/esm2022/tableview/editor/components/formly/fields/formly-field-action/formly-field-action.component.mjs +61 -0
  287. package/esm2022/tableview/editor/components/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +54 -0
  288. package/esm2022/tableview/editor/components/formly/fields/formly-field-custom/formly-field-custom.component.mjs +39 -0
  289. package/esm2022/tableview/editor/components/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +49 -0
  290. package/esm2022/tableview/editor/components/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +27 -0
  291. package/esm2022/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.mjs +220 -0
  292. package/esm2022/tableview/editor/components/formly/fields/formly-field-label/formly-field-label.component.mjs +24 -0
  293. package/esm2022/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +215 -0
  294. package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +217 -0
  295. package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +196 -0
  296. package/esm2022/tableview/editor/components/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +18 -0
  297. package/esm2022/tableview/editor/components/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +33 -0
  298. package/esm2022/tableview/editor/components/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +30 -0
  299. package/esm2022/tableview/editor/helpers/formly-config.mjs +260 -0
  300. package/esm2022/tableview/editor/helpers/notification.mjs +11 -0
  301. package/esm2022/tableview/editor/models/formly-config.model.mjs +2 -0
  302. package/esm2022/tableview/editor/services/formly-config.provider.mjs +31 -0
  303. package/esm2022/tableview/editor/utils/editor-formly.util.mjs +337 -0
  304. package/esm2022/tableview/index.mjs +64 -0
  305. package/esm2022/tableview/mediusinc-mng-commons-tableview.mjs +5 -0
  306. package/esm2022/tableview/provide.mjs +61 -0
  307. package/esm2022/tableview/tableview/components/route/tableview-route.component.mjs +15 -0
  308. package/esm2022/tableview/tableview/components/tableview/tableview.component.mjs +84 -0
  309. package/esm2022/tableview/tableview/router/tableview-route-builder.mjs +201 -0
  310. package/esm2022/tableview/tableview/services/tableview-feature-config.token.mjs +3 -0
  311. package/fesm2022/mediusinc-mng-commons-core.mjs +3904 -0
  312. package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -0
  313. package/fesm2022/mediusinc-mng-commons-filter.mjs +403 -0
  314. package/fesm2022/mediusinc-mng-commons-filter.mjs.map +1 -0
  315. package/fesm2022/mediusinc-mng-commons-form-api.mjs +294 -0
  316. package/fesm2022/mediusinc-mng-commons-form-api.mjs.map +1 -0
  317. package/fesm2022/mediusinc-mng-commons-form.mjs +770 -0
  318. package/fesm2022/mediusinc-mng-commons-form.mjs.map +1 -0
  319. package/fesm2022/mediusinc-mng-commons-model.mjs +300 -0
  320. package/fesm2022/mediusinc-mng-commons-model.mjs.map +1 -0
  321. package/fesm2022/mediusinc-mng-commons-table-api.mjs +1363 -0
  322. package/fesm2022/mediusinc-mng-commons-table-api.mjs.map +1 -0
  323. package/fesm2022/mediusinc-mng-commons-table.mjs +1393 -0
  324. package/fesm2022/mediusinc-mng-commons-table.mjs.map +1 -0
  325. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +4372 -0
  326. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -0
  327. package/fesm2022/mediusinc-mng-commons-tableview.mjs +4756 -0
  328. package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -0
  329. package/fesm2022/mediusinc-mng-commons.mjs +5 -18545
  330. package/fesm2022/mediusinc-mng-commons.mjs.map +1 -1
  331. package/filter/README.md +9 -0
  332. package/filter/descriptors/filter-lookup.descriptor.d.ts +67 -0
  333. package/filter/descriptors/filter.descriptor.d.ts +67 -0
  334. package/filter/index.d.ts +3 -0
  335. package/filter/models/filter.model.d.ts +12 -0
  336. package/form/README.md +8 -0
  337. package/form/api/README.md +7 -0
  338. package/form/api/data-providers/lookup.data-provider.d.ts +19 -0
  339. package/form/api/descriptors/action-button.descriptor.d.ts +25 -0
  340. package/form/api/descriptors/button-style.builder.d.ts +68 -0
  341. package/form/api/index.d.ts +4 -0
  342. package/form/components/autocomplete/autocomplete.component.d.ts +82 -0
  343. package/form/components/date-range/date-range.component.d.ts +28 -0
  344. package/form/components/dropdown/dropdown.component.d.ts +55 -0
  345. package/form/directives/input-trim.directive.d.ts +14 -0
  346. package/form/index.d.ts +4 -0
  347. package/i18n/en.json +234 -0
  348. package/i18n/sl.json +231 -0
  349. package/index.d.ts +1 -52
  350. package/model/README.md +7 -0
  351. package/model/descriptors/enum.descriptor.d.ts +14 -0
  352. package/model/descriptors/model.descriptor.d.ts +31 -0
  353. package/model/descriptors/type.descriptor.d.ts +10 -0
  354. package/model/index.d.ts +7 -0
  355. package/model/pipes/enum.pipe.d.ts +8 -0
  356. package/model/pipes/i18n-property.pipe.d.ts +8 -0
  357. package/model/utils/i18n.util.d.ts +15 -0
  358. package/model/utils/model.util.d.ts +8 -0
  359. package/package.json +56 -2
  360. package/provide.d.ts +7 -0
  361. package/table/README.md +11 -0
  362. package/table/api/README.md +9 -0
  363. package/table/api/data-providers/table.data-provider.d.ts +38 -0
  364. package/table/api/descriptors/column.descriptor.d.ts +148 -0
  365. package/table/api/descriptors/sort.descriptor.d.ts +17 -0
  366. package/table/api/descriptors/table.descriptor.d.ts +271 -0
  367. package/table/api/helpers/class-attribute-converter.d.ts +22 -0
  368. package/table/api/index.d.ts +11 -0
  369. package/table/api/models/class-table-attribute.model.d.ts +8 -0
  370. package/table/api/models/column-value.model.d.ts +7 -0
  371. package/table/api/models/table-columns.model.d.ts +42 -0
  372. package/table/api/models/table-event.model.d.ts +17 -0
  373. package/table/api/models/table.model.d.ts +35 -0
  374. package/table/components/column-filter-full/column-filter-full.component.d.ts +100 -0
  375. package/table/components/column-value/column-value.component.d.ts +33 -0
  376. package/table/components/table/table.component.d.ts +114 -0
  377. package/table/helpers/notification.d.ts +4 -0
  378. package/table/helpers/table-layout-prefs.d.ts +7 -0
  379. package/table/index.d.ts +8 -0
  380. package/table/models/column-preferences.model.d.ts +12 -0
  381. package/table/pipes/locale-default-row-class.pipe.d.ts +10 -0
  382. package/table/pipes/table-column-filter-class.pipe.d.ts +8 -0
  383. package/table/services/data-list.service.d.ts +16 -0
  384. package/tableview/README.md +13 -0
  385. package/tableview/action/components/action/action.component.d.ts +73 -0
  386. package/tableview/action/components/editor/action-editor.component.d.ts +31 -0
  387. package/tableview/action/components/editor/injector-context/action-editor-injector-context.component.d.ts +76 -0
  388. package/tableview/action/components/localization/data-language-dropdown.component.d.ts +22 -0
  389. package/tableview/action/components/route/action-route.component.d.ts +31 -0
  390. package/tableview/action/components/table/action-table.component.d.ts +48 -0
  391. package/tableview/action/guards/unsaved-changes.guard.d.ts +3 -0
  392. package/tableview/action/helpers/notification.d.ts +6 -0
  393. package/tableview/action/helpers/styles.d.ts +5 -0
  394. package/tableview/action/models/action-editor-dialog-data.model.d.ts +11 -0
  395. package/tableview/action/models/execution/action-context.model.d.ts +36 -0
  396. package/tableview/action/models/execution/action-instance-state.model.d.ts +30 -0
  397. package/tableview/action/models/execution/action-instance.model.d.ts +56 -0
  398. package/tableview/action/services/action-error-mapper.service.d.ts +18 -0
  399. package/tableview/action/services/action-executor.service.d.ts +175 -0
  400. package/tableview/action/services/component-action-executor.service.d.ts +9 -0
  401. package/tableview/action/services/data-provider-executor.service.d.ts +23 -0
  402. package/tableview/action/services/navigation.service.d.ts +15 -0
  403. package/tableview/action/services/root-action-executor.service.d.ts +9 -0
  404. package/tableview/action/services/tokens/action-editor.token.d.ts +2 -0
  405. package/tableview/action/services/view-container.service.d.ts +30 -0
  406. package/tableview/action/utils/i18n.util.d.ts +48 -0
  407. package/tableview/api/README.md +11 -0
  408. package/tableview/api/action/descriptors/action-confirmation.descriptor.d.ts +36 -0
  409. package/tableview/api/action/descriptors/action-editor.descriptor.d.ts +117 -0
  410. package/tableview/api/action/descriptors/action-link.descriptor.d.ts +34 -0
  411. package/tableview/api/action/descriptors/action.descriptor.d.ts +151 -0
  412. package/tableview/api/action/helpers/data-provider-executors.d.ts +18 -0
  413. package/tableview/api/action/models/action-component.model.d.ts +12 -0
  414. package/tableview/api/action/models/action-descriptor.types.d.ts +5 -0
  415. package/tableview/api/action/models/action-editor.model.d.ts +4 -0
  416. package/tableview/api/action/models/action-error.model.d.ts +14 -0
  417. package/tableview/api/action/models/execution/action-context-validation.model.d.ts +11 -0
  418. package/tableview/api/action/models/execution/action-context.model.d.ts +24 -0
  419. package/tableview/api/action/models/execution/action-execution-error.model.d.ts +4 -0
  420. package/tableview/api/action/models/execution/action-instance-state.model.d.ts +30 -0
  421. package/tableview/api/action/models/execution/action-instance.model.d.ts +31 -0
  422. package/tableview/api/action/models/execution/view-container.model.d.ts +38 -0
  423. package/tableview/api/action/services/data-provider-executor.service.d.ts +38 -0
  424. package/tableview/api/action/services/tokens/data-language-dropdown.token.d.ts +2 -0
  425. package/tableview/api/editor/data-providers/editor.data-provider.d.ts +87 -0
  426. package/tableview/api/editor/descriptors/editor.descriptor.d.ts +366 -0
  427. package/tableview/api/editor/descriptors/field-action.descriptor.d.ts +22 -0
  428. package/tableview/api/editor/descriptors/field-base.descriptor.d.ts +120 -0
  429. package/tableview/api/editor/descriptors/field-group.descriptor.d.ts +41 -0
  430. package/tableview/api/editor/descriptors/field-lookup.descriptor.d.ts +80 -0
  431. package/tableview/api/editor/descriptors/field-many.descriptor.d.ts +61 -0
  432. package/tableview/api/editor/descriptors/field-validation.descriptor.d.ts +19 -0
  433. package/tableview/api/editor/descriptors/field.descriptor.d.ts +168 -0
  434. package/tableview/api/editor/helpers/class-attribute-converter.d.ts +21 -0
  435. package/tableview/api/editor/helpers/field-validators.d.ts +3 -0
  436. package/tableview/api/editor/models/class-tableview-attribute.model.d.ts +7 -0
  437. package/tableview/api/editor/models/editor-fields.model.d.ts +34 -0
  438. package/tableview/api/editor/models/editor.model.d.ts +7 -0
  439. package/tableview/api/editor/models/field-action-context.model.d.ts +24 -0
  440. package/tableview/api/editor/models/field.model.d.ts +66 -0
  441. package/tableview/api/editor/models/form-editor.event.d.ts +55 -0
  442. package/tableview/api/editor/models/formly-custom-field.model.d.ts +27 -0
  443. package/tableview/api/editor/models/formly-field.model.d.ts +18 -0
  444. package/tableview/api/index.d.ts +50 -0
  445. package/tableview/api/tableview/data-providers/tableview.data-provider.d.ts +43 -0
  446. package/tableview/api/tableview/descriptors/tableview.descriptor.d.ts +296 -0
  447. package/tableview/api/tableview/helpers/class-attribute-converter.d.ts +8 -0
  448. package/tableview/api/tableview/helpers/files-export.d.ts +4 -0
  449. package/tableview/api/tableview/helpers/tableview-create.d.ts +16 -0
  450. package/tableview/api/tableview/helpers/tableview-default-actions.d.ts +38 -0
  451. package/tableview/api/tableview/helpers/tableview-input-builder.d.ts +114 -0
  452. package/tableview/api/tableview/models/class-tableview-attribute.model.d.ts +3 -0
  453. package/tableview/api/tableview/models/tableview-input.model.d.ts +8 -0
  454. package/tableview/api/tableview/models/tableview-route.model.d.ts +20 -0
  455. package/tableview/editor/components/editor/form-editor.component.d.ts +50 -0
  456. package/tableview/editor/components/formly/fields/formly-field-action/formly-field-action.component.d.ts +14 -0
  457. package/tableview/editor/components/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +15 -0
  458. package/tableview/editor/components/formly/fields/formly-field-custom/formly-field-custom.component.d.ts +11 -0
  459. package/tableview/editor/components/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +14 -0
  460. package/tableview/editor/components/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +12 -0
  461. package/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.d.ts +37 -0
  462. package/tableview/editor/components/formly/fields/formly-field-label/formly-field-label.component.d.ts +11 -0
  463. package/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +43 -0
  464. package/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +23 -0
  465. package/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +41 -0
  466. package/tableview/editor/components/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +7 -0
  467. package/tableview/editor/components/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.d.ts +11 -0
  468. package/tableview/editor/components/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +9 -0
  469. package/tableview/editor/helpers/formly-config.d.ts +18 -0
  470. package/tableview/editor/helpers/notification.d.ts +4 -0
  471. package/tableview/editor/models/formly-config.model.d.ts +5 -0
  472. package/tableview/editor/services/formly-config.provider.d.ts +5 -0
  473. package/tableview/editor/utils/editor-formly.util.d.ts +12 -0
  474. package/tableview/index.d.ts +48 -0
  475. package/tableview/provide.d.ts +8 -0
  476. package/tableview/tableview/components/route/tableview-route.component.d.ts +7 -0
  477. package/tableview/tableview/components/tableview/tableview.component.d.ts +26 -0
  478. package/tableview/tableview/router/tableview-route-builder.d.ts +42 -0
  479. package/tableview/tableview/services/tableview-feature-config.token.d.ts +18 -0
  480. package/assets/fonts/poppins-v20-latin-500.woff +0 -0
  481. package/assets/fonts/poppins-v20-latin-500.woff2 +0 -0
  482. package/assets/fonts/poppins-v20-latin-600.woff +0 -0
  483. package/assets/fonts/poppins-v20-latin-600.woff2 +0 -0
  484. package/assets/fonts/poppins-v20-latin-700.woff +0 -0
  485. package/assets/fonts/poppins-v20-latin-700.woff2 +0 -0
  486. package/assets/fonts/poppins-v20-latin-regular.woff +0 -0
  487. package/assets/fonts/poppins-v20-latin-regular.woff2 +0 -0
  488. package/assets/i18n/en.json +0 -287
  489. package/assets/i18n/sl.json +0 -286
  490. package/assets/images/effect-ondark.png +0 -0
  491. package/assets/images/effect-ondark.svg +0 -38
  492. package/assets/images/effect-ondark@2x.png +0 -0
  493. package/assets/images/effect-onlight.png +0 -0
  494. package/assets/images/effect-onlight.svg +0 -38
  495. package/assets/images/effect-onlight@2x.png +0 -0
  496. package/assets/images/pages/exception-ondark.png +0 -0
  497. package/assets/images/pages/exception-onlight.png +0 -0
  498. package/assets/images/pages/login-ondark.png +0 -0
  499. package/assets/images/pages/login-onlight.png +0 -0
  500. package/esm2022/lib/api/models/builders/query-param.builder.mjs +0 -59
  501. package/esm2022/lib/api/models/filter-match-type.model.mjs +0 -27
  502. package/esm2022/lib/api/models/filter-param.model.mjs +0 -33
  503. package/esm2022/lib/api/models/index.mjs +0 -7
  504. package/esm2022/lib/api/models/query-mode.model.mjs +0 -18
  505. package/esm2022/lib/api/models/query-param.model.mjs +0 -68
  506. package/esm2022/lib/api/models/query-result.model.mjs +0 -35
  507. package/esm2022/lib/api/services/api.abstract.service.mjs +0 -58
  508. package/esm2022/lib/api/services/crud-api.abstract.service.mjs +0 -75
  509. package/esm2022/lib/api/services/get-all-api.abstract.service.mjs +0 -30
  510. package/esm2022/lib/api/services/index.mjs +0 -4
  511. package/esm2022/lib/api/utils/index.mjs +0 -3
  512. package/esm2022/lib/api/utils/medius-rest.util.mjs +0 -293
  513. package/esm2022/lib/api/utils/object-serializer.util.mjs +0 -185
  514. package/esm2022/lib/components/action/action.component.mjs +0 -315
  515. package/esm2022/lib/components/action/editor/action-editor.component.mjs +0 -98
  516. package/esm2022/lib/components/action/editor/injector-context/action-editor-injector-context.component.mjs +0 -394
  517. package/esm2022/lib/components/action/index.mjs +0 -6
  518. package/esm2022/lib/components/action/localization/data-language-dropdown.component.mjs +0 -53
  519. package/esm2022/lib/components/action/models/action-component.model.mjs +0 -2
  520. package/esm2022/lib/components/action/models/action-execution.model.mjs +0 -322
  521. package/esm2022/lib/components/action/models/index.mjs +0 -4
  522. package/esm2022/lib/components/action/models/tableview-action-default-categories.model.mjs +0 -11
  523. package/esm2022/lib/components/action/route/action-route.component.mjs +0 -142
  524. package/esm2022/lib/components/action/table/action-table.component.mjs +0 -154
  525. package/esm2022/lib/components/form/autocomplete/autocomplete.component.mjs +0 -396
  526. package/esm2022/lib/components/form/date-range/date-range.component.mjs +0 -110
  527. package/esm2022/lib/components/form/dropdown/dropdown.component.mjs +0 -221
  528. package/esm2022/lib/components/form/editor/form-editor.component.mjs +0 -281
  529. package/esm2022/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.mjs +0 -61
  530. package/esm2022/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +0 -54
  531. package/esm2022/lib/components/form/formly/fields/formly-field-custom/formly-custom-field-base.model.mjs +0 -69
  532. package/esm2022/lib/components/form/formly/fields/formly-field-custom/formly-field-custom.component.mjs +0 -39
  533. package/esm2022/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +0 -49
  534. package/esm2022/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +0 -27
  535. package/esm2022/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +0 -220
  536. package/esm2022/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.mjs +0 -24
  537. package/esm2022/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +0 -217
  538. package/esm2022/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +0 -221
  539. package/esm2022/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +0 -201
  540. package/esm2022/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +0 -18
  541. package/esm2022/lib/components/form/formly/fields/index.mjs +0 -13
  542. package/esm2022/lib/components/form/formly/formly.config.mjs +0 -250
  543. package/esm2022/lib/components/form/formly/index.mjs +0 -2
  544. package/esm2022/lib/components/form/formly/models/formly-config.model.mjs +0 -2
  545. package/esm2022/lib/components/form/formly/models/formly-field.model.mjs +0 -2
  546. package/esm2022/lib/components/form/formly/models/index.mjs +0 -3
  547. package/esm2022/lib/components/form/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +0 -33
  548. package/esm2022/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +0 -31
  549. package/esm2022/lib/components/form/formly/wrappers/index.mjs +0 -3
  550. package/esm2022/lib/components/form/index.mjs +0 -5
  551. package/esm2022/lib/components/form/models/field-action-context.model.mjs +0 -2
  552. package/esm2022/lib/components/form/models/form-editor.event.mjs +0 -49
  553. package/esm2022/lib/components/form/models/form-editor.interface.mjs +0 -2
  554. package/esm2022/lib/components/form/models/index.mjs +0 -4
  555. package/esm2022/lib/components/layout/breadcrumb.component.mjs +0 -34
  556. package/esm2022/lib/components/layout/footer.component.mjs +0 -19
  557. package/esm2022/lib/components/layout/index.mjs +0 -9
  558. package/esm2022/lib/components/layout/main-layout.component.mjs +0 -53
  559. package/esm2022/lib/components/layout/menu-item.component.mjs +0 -296
  560. package/esm2022/lib/components/layout/menu.component.mjs +0 -34
  561. package/esm2022/lib/components/layout/services/index.mjs +0 -2
  562. package/esm2022/lib/components/layout/services/main-layout.component.service.mjs +0 -196
  563. package/esm2022/lib/components/layout/topbar-user.component.mjs +0 -46
  564. package/esm2022/lib/components/layout/topbar.component.mjs +0 -66
  565. package/esm2022/lib/components/layout/version.component.mjs +0 -60
  566. package/esm2022/lib/components/layoutV2/breadcrumb.component.mjs +0 -30
  567. package/esm2022/lib/components/layoutV2/footer.component.mjs +0 -29
  568. package/esm2022/lib/components/layoutV2/index.mjs +0 -8
  569. package/esm2022/lib/components/layoutV2/main-layout.component.mjs +0 -95
  570. package/esm2022/lib/components/layoutV2/menu-item.component.mjs +0 -275
  571. package/esm2022/lib/components/layoutV2/menu.component.mjs +0 -39
  572. package/esm2022/lib/components/layoutV2/model/index.mjs +0 -3
  573. package/esm2022/lib/components/layoutV2/model/layout-state.model.mjs +0 -2
  574. package/esm2022/lib/components/layoutV2/model/menu.model.mjs +0 -2
  575. package/esm2022/lib/components/layoutV2/services/index.mjs +0 -3
  576. package/esm2022/lib/components/layoutV2/services/main-layout.component.service.mjs +0 -71
  577. package/esm2022/lib/components/layoutV2/services/menu.service.mjs +0 -122
  578. package/esm2022/lib/components/layoutV2/sidebar.component.mjs +0 -62
  579. package/esm2022/lib/components/layoutV2/topbar-user.component.mjs +0 -40
  580. package/esm2022/lib/components/layoutV2/topbar.component.mjs +0 -69
  581. package/esm2022/lib/components/layoutV2/version.component.mjs +0 -63
  582. package/esm2022/lib/components/notification/notification-wrapper.component.mjs +0 -50
  583. package/esm2022/lib/components/pages/error/error.page.component.mjs +0 -21
  584. package/esm2022/lib/components/pages/index.mjs +0 -3
  585. package/esm2022/lib/components/pages/not-found/not-found.page.component.mjs +0 -21
  586. package/esm2022/lib/components/table/column-filter-full/column-filter-full.component.mjs +0 -468
  587. package/esm2022/lib/components/table/column-value/column-value.component.mjs +0 -90
  588. package/esm2022/lib/components/table/models/table.event.mjs +0 -16
  589. package/esm2022/lib/components/table/models/table.interface.mjs +0 -2
  590. package/esm2022/lib/components/table/table-column-filter-class/table-column-filter-class.pipe.mjs +0 -25
  591. package/esm2022/lib/components/table/table.component.mjs +0 -735
  592. package/esm2022/lib/components/tableview/index.mjs +0 -4
  593. package/esm2022/lib/components/tableview/route/tableview-route.abstract.component.mjs +0 -158
  594. package/esm2022/lib/components/tableview/route/tableview-route.component.mjs +0 -47
  595. package/esm2022/lib/components/tableview/tableview.component.mjs +0 -82
  596. package/esm2022/lib/data-providers/base.data-provider.mjs +0 -48
  597. package/esm2022/lib/data-providers/editor.data-provider.mjs +0 -105
  598. package/esm2022/lib/data-providers/index.mjs +0 -7
  599. package/esm2022/lib/data-providers/lookup.data-provider.mjs +0 -45
  600. package/esm2022/lib/data-providers/table.data-provider.mjs +0 -65
  601. package/esm2022/lib/data-providers/tableview-crud.data-provider.mjs +0 -32
  602. package/esm2022/lib/data-providers/tableview.data-provider.mjs +0 -105
  603. package/esm2022/lib/descriptors/action/action-button.descriptor.mjs +0 -68
  604. package/esm2022/lib/descriptors/action/action-confirmation.descriptor.mjs +0 -77
  605. package/esm2022/lib/descriptors/action/action-editor.descriptor.mjs +0 -262
  606. package/esm2022/lib/descriptors/action/action-link.descriptor.mjs +0 -89
  607. package/esm2022/lib/descriptors/action/action.descriptor.mjs +0 -384
  608. package/esm2022/lib/descriptors/action/index.mjs +0 -6
  609. package/esm2022/lib/descriptors/editor/editor.descriptor.mjs +0 -514
  610. package/esm2022/lib/descriptors/editor/field-action.descriptor.mjs +0 -50
  611. package/esm2022/lib/descriptors/editor/field-base.descriptor.mjs +0 -285
  612. package/esm2022/lib/descriptors/editor/field-group.descriptor.mjs +0 -97
  613. package/esm2022/lib/descriptors/editor/field-lookup.descriptor.mjs +0 -217
  614. package/esm2022/lib/descriptors/editor/field-many.descriptor.mjs +0 -153
  615. package/esm2022/lib/descriptors/editor/field-validation.descriptor.mjs +0 -25
  616. package/esm2022/lib/descriptors/editor/field.descriptor.mjs +0 -346
  617. package/esm2022/lib/descriptors/editor/index.mjs +0 -9
  618. package/esm2022/lib/descriptors/editor/internal/editor-fields.model.mjs +0 -2
  619. package/esm2022/lib/descriptors/editor/internal/editor.model.mjs +0 -2
  620. package/esm2022/lib/descriptors/filter/filter-lookup.descriptor.mjs +0 -210
  621. package/esm2022/lib/descriptors/filter/filter.descriptor.mjs +0 -181
  622. package/esm2022/lib/descriptors/filter/index.mjs +0 -3
  623. package/esm2022/lib/descriptors/interfaces/field-config.interface.mjs +0 -2
  624. package/esm2022/lib/descriptors/interfaces/index.mjs +0 -3
  625. package/esm2022/lib/descriptors/interfaces/lookup-descriptor.interface.mjs +0 -2
  626. package/esm2022/lib/descriptors/model/index.mjs +0 -2
  627. package/esm2022/lib/descriptors/model/model.descriptor.mjs +0 -70
  628. package/esm2022/lib/descriptors/table/column.descriptor.mjs +0 -454
  629. package/esm2022/lib/descriptors/table/index.mjs +0 -3
  630. package/esm2022/lib/descriptors/table/internal/table-columns.model.mjs +0 -2
  631. package/esm2022/lib/descriptors/table/internal/table.model.mjs +0 -2
  632. package/esm2022/lib/descriptors/table/table.descriptor.mjs +0 -600
  633. package/esm2022/lib/descriptors/tableview/index.mjs +0 -2
  634. package/esm2022/lib/descriptors/tableview/internal/tableview.model.mjs +0 -2
  635. package/esm2022/lib/descriptors/tableview/tableview.descriptor.mjs +0 -461
  636. package/esm2022/lib/descriptors/types/action.type.mjs +0 -26
  637. package/esm2022/lib/descriptors/types/column.type.mjs +0 -21
  638. package/esm2022/lib/descriptors/types/editor.type.mjs +0 -8
  639. package/esm2022/lib/descriptors/types/field.type.mjs +0 -56
  640. package/esm2022/lib/descriptors/types/filter.type.mjs +0 -33
  641. package/esm2022/lib/descriptors/types/index.mjs +0 -8
  642. package/esm2022/lib/descriptors/types/table.type.mjs +0 -26
  643. package/esm2022/lib/descriptors/types/trim.type.mjs +0 -2
  644. package/esm2022/lib/directives/component.directive.mjs +0 -66
  645. package/esm2022/lib/directives/dialog-keydown-handler.directive.mjs +0 -49
  646. package/esm2022/lib/directives/index.mjs +0 -5
  647. package/esm2022/lib/directives/input-trim.directive.mjs +0 -55
  648. package/esm2022/lib/directives/template.directive.mjs +0 -29
  649. package/esm2022/lib/error/error.handler.mjs +0 -20
  650. package/esm2022/lib/error/index.mjs +0 -2
  651. package/esm2022/lib/guards/index.mjs +0 -2
  652. package/esm2022/lib/guards/unsaved-changes.guard.mjs +0 -4
  653. package/esm2022/lib/helpers/coercion.mjs +0 -52
  654. package/esm2022/lib/models/action-editor.model.mjs +0 -2
  655. package/esm2022/lib/models/can-component-deactivate.model.mjs +0 -2
  656. package/esm2022/lib/models/class.model.mjs +0 -2
  657. package/esm2022/lib/models/column-value.model.mjs +0 -2
  658. package/esm2022/lib/models/common-init-event-enum.model.mjs +0 -11
  659. package/esm2022/lib/models/config.model.mjs +0 -2
  660. package/esm2022/lib/models/enum.model.mjs +0 -2
  661. package/esm2022/lib/models/error.model.mjs +0 -44
  662. package/esm2022/lib/models/index.mjs +0 -18
  663. package/esm2022/lib/models/layout-config.model.mjs +0 -2
  664. package/esm2022/lib/models/log.model.mjs +0 -10
  665. package/esm2022/lib/models/menu.model.mjs +0 -2
  666. package/esm2022/lib/models/radio.model.mjs +0 -2
  667. package/esm2022/lib/models/tableview-attr.model.mjs +0 -2
  668. package/esm2022/lib/models/type-registry.model.mjs +0 -2
  669. package/esm2022/lib/models/user.model.mjs +0 -2
  670. package/esm2022/lib/models/version.model.mjs +0 -2
  671. package/esm2022/lib/models/view-container.model.mjs +0 -2
  672. package/esm2022/lib/pipes/boolean.pipe.mjs +0 -28
  673. package/esm2022/lib/pipes/class-map.pipe.mjs +0 -23
  674. package/esm2022/lib/pipes/enum.pipe.mjs +0 -26
  675. package/esm2022/lib/pipes/enumerate-async.pipe.mjs +0 -41
  676. package/esm2022/lib/pipes/enumerate.pipe.mjs +0 -58
  677. package/esm2022/lib/pipes/getter.pipe.mjs +0 -21
  678. package/esm2022/lib/pipes/i18n-property.pipe.mjs +0 -19
  679. package/esm2022/lib/pipes/index.mjs +0 -12
  680. package/esm2022/lib/pipes/json-path.pipe.mjs +0 -25
  681. package/esm2022/lib/pipes/locale-default-row-class.pipe.mjs +0 -27
  682. package/esm2022/lib/pipes/models/internal/enumrate-pipe-i18n.model.mjs +0 -2
  683. package/esm2022/lib/pipes/models/internal/index.mjs +0 -2
  684. package/esm2022/lib/pipes/parametrize.pipe.mjs +0 -86
  685. package/esm2022/lib/pipes/template.pipe.mjs +0 -26
  686. package/esm2022/lib/provide-commons.mjs +0 -88
  687. package/esm2022/lib/registry/type.registry.mjs +0 -113
  688. package/esm2022/lib/router/index.mjs +0 -4
  689. package/esm2022/lib/router/models/index.mjs +0 -2
  690. package/esm2022/lib/router/models/router.model.mjs +0 -2
  691. package/esm2022/lib/router/route-builder.mjs +0 -347
  692. package/esm2022/lib/router/routes-builder.mjs +0 -69
  693. package/esm2022/lib/router/tableview-route-builder.mjs +0 -201
  694. package/esm2022/lib/security/authorization.guard.mjs +0 -15
  695. package/esm2022/lib/security/authorization.service.mjs +0 -51
  696. package/esm2022/lib/security/authorization.util.mjs +0 -16
  697. package/esm2022/lib/security/index.mjs +0 -4
  698. package/esm2022/lib/security/model/authorization.type.mjs +0 -8
  699. package/esm2022/lib/security/model/index.mjs +0 -4
  700. package/esm2022/lib/security/model/permission-service.interface.mjs +0 -2
  701. package/esm2022/lib/security/model/permissions.model.mjs +0 -87
  702. package/esm2022/lib/services/action/action-executor.service.mjs +0 -725
  703. package/esm2022/lib/services/action/component-action-executor.service.mjs +0 -19
  704. package/esm2022/lib/services/action/index.mjs +0 -5
  705. package/esm2022/lib/services/action/provide-action-executor.mjs +0 -9
  706. package/esm2022/lib/services/action/root-action-executor.service.mjs +0 -18
  707. package/esm2022/lib/services/action-error-mapper.service.mjs +0 -20
  708. package/esm2022/lib/services/commons-init.service.mjs +0 -100
  709. package/esm2022/lib/services/commons.service.mjs +0 -495
  710. package/esm2022/lib/services/configuration.service.mjs +0 -174
  711. package/esm2022/lib/services/index.mjs +0 -11
  712. package/esm2022/lib/services/internal/commons-init.provider.mjs +0 -4
  713. package/esm2022/lib/services/internal/index.mjs +0 -2
  714. package/esm2022/lib/services/log-publisher-console.service.mjs +0 -40
  715. package/esm2022/lib/services/logger.service.mjs +0 -130
  716. package/esm2022/lib/services/mng-localstorage-config.service.mjs +0 -30
  717. package/esm2022/lib/services/navigation.service.mjs +0 -55
  718. package/esm2022/lib/services/providers/formly-config.provider.mjs +0 -31
  719. package/esm2022/lib/services/providers/index.mjs +0 -2
  720. package/esm2022/lib/services/router.service.mjs +0 -183
  721. package/esm2022/lib/services/tokens/browser-storage.token.mjs +0 -6
  722. package/esm2022/lib/services/tokens/commons-init.token.mjs +0 -3
  723. package/esm2022/lib/services/tokens/default-setting.token.mjs +0 -3
  724. package/esm2022/lib/services/tokens/index.mjs +0 -6
  725. package/esm2022/lib/services/tokens/log-publisher.token.mjs +0 -3
  726. package/esm2022/lib/services/tokens/module-config.token.mjs +0 -3
  727. package/esm2022/lib/services/version.service.mjs +0 -49
  728. package/esm2022/lib/services/view/index.mjs +0 -3
  729. package/esm2022/lib/services/view/provide-view-container.mjs +0 -17
  730. package/esm2022/lib/services/view/view-container.service.mjs +0 -59
  731. package/esm2022/lib/styles/button-style.builder.mjs +0 -174
  732. package/esm2022/lib/styles/index.mjs +0 -3
  733. package/esm2022/lib/styles/models/index.mjs +0 -3
  734. package/esm2022/lib/styles/models/style-level.enum.mjs +0 -12
  735. package/esm2022/lib/styles/models/style-size.enum.mjs +0 -9
  736. package/esm2022/lib/styles/styles.util.mjs +0 -42
  737. package/esm2022/lib/types/action-descriptor.types.mjs +0 -2
  738. package/esm2022/lib/types/data-provider.types.mjs +0 -2
  739. package/esm2022/lib/types/getter.type.mjs +0 -2
  740. package/esm2022/lib/types/i18n.type.mjs +0 -2
  741. package/esm2022/lib/types/index.mjs +0 -8
  742. package/esm2022/lib/types/localstorage-config-value.type.mjs +0 -2
  743. package/esm2022/lib/types/type.decorator.mjs +0 -12
  744. package/esm2022/lib/types/type.model.mjs +0 -2
  745. package/esm2022/lib/utils/action-data-provider.util.mjs +0 -171
  746. package/esm2022/lib/utils/date.util.mjs +0 -130
  747. package/esm2022/lib/utils/decorator-metadata.util.mjs +0 -61
  748. package/esm2022/lib/utils/editor-formly.util.mjs +0 -339
  749. package/esm2022/lib/utils/enum.util.mjs +0 -82
  750. package/esm2022/lib/utils/error.util.mjs +0 -247
  751. package/esm2022/lib/utils/export.util.mjs +0 -21
  752. package/esm2022/lib/utils/file.util.mjs +0 -18
  753. package/esm2022/lib/utils/i18n.util.mjs +0 -274
  754. package/esm2022/lib/utils/index.mjs +0 -14
  755. package/esm2022/lib/utils/model.util.mjs +0 -73
  756. package/esm2022/lib/utils/notification.util.mjs +0 -45
  757. package/esm2022/lib/utils/object.util.mjs +0 -135
  758. package/esm2022/lib/utils/route.util.mjs +0 -61
  759. package/esm2022/lib/utils/string.util.mjs +0 -59
  760. package/esm2022/lib/utils/tableview.util.mjs +0 -193
  761. package/esm2022/lib/validators/field.validator.mjs +0 -33
  762. package/esm2022/lib/validators/index.mjs +0 -2
  763. package/lib/api/models/builders/query-param.builder.d.ts +0 -13
  764. package/lib/api/models/filter-match-type.model.d.ts +0 -25
  765. package/lib/api/models/filter-param.model.d.ts +0 -23
  766. package/lib/api/models/index.d.ts +0 -6
  767. package/lib/api/models/query-mode.model.d.ts +0 -16
  768. package/lib/api/models/query-param.model.d.ts +0 -31
  769. package/lib/api/models/query-result.model.d.ts +0 -24
  770. package/lib/api/services/api.abstract.service.d.ts +0 -24
  771. package/lib/api/services/crud-api.abstract.service.d.ts +0 -22
  772. package/lib/api/services/get-all-api.abstract.service.d.ts +0 -14
  773. package/lib/api/services/index.d.ts +0 -3
  774. package/lib/api/utils/index.d.ts +0 -2
  775. package/lib/api/utils/medius-rest.util.d.ts +0 -32
  776. package/lib/api/utils/object-serializer.util.d.ts +0 -26
  777. package/lib/components/action/action.component.d.ts +0 -76
  778. package/lib/components/action/editor/action-editor.component.d.ts +0 -33
  779. package/lib/components/action/editor/injector-context/action-editor-injector-context.component.d.ts +0 -80
  780. package/lib/components/action/index.d.ts +0 -5
  781. package/lib/components/action/localization/data-language-dropdown.component.d.ts +0 -24
  782. package/lib/components/action/models/action-component.model.d.ts +0 -13
  783. package/lib/components/action/models/action-execution.model.d.ts +0 -168
  784. package/lib/components/action/models/index.d.ts +0 -3
  785. package/lib/components/action/route/action-route.component.d.ts +0 -31
  786. package/lib/components/action/table/action-table.component.d.ts +0 -50
  787. package/lib/components/form/autocomplete/autocomplete.component.d.ts +0 -83
  788. package/lib/components/form/date-range/date-range.component.d.ts +0 -28
  789. package/lib/components/form/dropdown/dropdown.component.d.ts +0 -56
  790. package/lib/components/form/editor/form-editor.component.d.ts +0 -51
  791. package/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.d.ts +0 -16
  792. package/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +0 -16
  793. package/lib/components/form/formly/fields/formly-field-custom/formly-custom-field-base.model.d.ts +0 -27
  794. package/lib/components/form/formly/fields/formly-field-custom/formly-field-custom.component.d.ts +0 -12
  795. package/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +0 -15
  796. package/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +0 -14
  797. package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +0 -39
  798. package/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.d.ts +0 -11
  799. package/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +0 -47
  800. package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +0 -25
  801. package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +0 -42
  802. package/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +0 -7
  803. package/lib/components/form/formly/fields/index.d.ts +0 -12
  804. package/lib/components/form/formly/formly.config.d.ts +0 -17
  805. package/lib/components/form/formly/index.d.ts +0 -1
  806. package/lib/components/form/formly/models/formly-config.model.d.ts +0 -11
  807. package/lib/components/form/formly/models/formly-field.model.d.ts +0 -17
  808. package/lib/components/form/formly/models/index.d.ts +0 -2
  809. package/lib/components/form/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.d.ts +0 -11
  810. package/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +0 -11
  811. package/lib/components/form/formly/wrappers/index.d.ts +0 -2
  812. package/lib/components/form/index.d.ts +0 -4
  813. package/lib/components/form/models/field-action-context.model.d.ts +0 -24
  814. package/lib/components/form/models/form-editor.event.d.ts +0 -58
  815. package/lib/components/form/models/index.d.ts +0 -3
  816. package/lib/components/layout/breadcrumb.component.d.ts +0 -13
  817. package/lib/components/layout/footer.component.d.ts +0 -9
  818. package/lib/components/layout/index.d.ts +0 -8
  819. package/lib/components/layout/main-layout.component.d.ts +0 -19
  820. package/lib/components/layout/menu-item.component.d.ts +0 -55
  821. package/lib/components/layout/menu.component.d.ts +0 -16
  822. package/lib/components/layout/services/index.d.ts +0 -1
  823. package/lib/components/layout/services/main-layout.component.service.d.ts +0 -65
  824. package/lib/components/layout/topbar-user.component.d.ts +0 -22
  825. package/lib/components/layout/topbar.component.d.ts +0 -26
  826. package/lib/components/layout/version.component.d.ts +0 -19
  827. package/lib/components/layoutV2/breadcrumb.component.d.ts +0 -10
  828. package/lib/components/layoutV2/footer.component.d.ts +0 -12
  829. package/lib/components/layoutV2/index.d.ts +0 -7
  830. package/lib/components/layoutV2/main-layout.component.d.ts +0 -24
  831. package/lib/components/layoutV2/menu-item.component.d.ts +0 -42
  832. package/lib/components/layoutV2/menu.component.d.ts +0 -14
  833. package/lib/components/layoutV2/model/index.d.ts +0 -2
  834. package/lib/components/layoutV2/model/layout-state.model.d.ts +0 -10
  835. package/lib/components/layoutV2/model/menu.model.d.ts +0 -4
  836. package/lib/components/layoutV2/services/index.d.ts +0 -2
  837. package/lib/components/layoutV2/services/main-layout.component.service.d.ts +0 -17
  838. package/lib/components/layoutV2/services/menu.service.d.ts +0 -22
  839. package/lib/components/layoutV2/sidebar.component.d.ts +0 -19
  840. package/lib/components/layoutV2/topbar-user.component.d.ts +0 -16
  841. package/lib/components/layoutV2/topbar.component.d.ts +0 -22
  842. package/lib/components/layoutV2/version.component.d.ts +0 -19
  843. package/lib/components/pages/error/error.page.component.d.ts +0 -8
  844. package/lib/components/pages/index.d.ts +0 -2
  845. package/lib/components/pages/not-found/not-found.page.component.d.ts +0 -8
  846. package/lib/components/table/column-filter-full/column-filter-full.component.d.ts +0 -85
  847. package/lib/components/table/column-value/column-value.component.d.ts +0 -35
  848. package/lib/components/table/models/table.event.d.ts +0 -17
  849. package/lib/components/table/models/table.interface.d.ts +0 -14
  850. package/lib/components/table/table-column-filter-class/table-column-filter-class.pipe.d.ts +0 -8
  851. package/lib/components/table/table.component.d.ts +0 -126
  852. package/lib/components/tableview/index.d.ts +0 -3
  853. package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +0 -35
  854. package/lib/components/tableview/route/tableview-route.component.d.ts +0 -16
  855. package/lib/components/tableview/tableview.component.d.ts +0 -29
  856. package/lib/data-providers/base.data-provider.d.ts +0 -32
  857. package/lib/data-providers/editor.data-provider.d.ts +0 -88
  858. package/lib/data-providers/index.d.ts +0 -6
  859. package/lib/data-providers/lookup.data-provider.d.ts +0 -27
  860. package/lib/data-providers/table.data-provider.d.ts +0 -40
  861. package/lib/data-providers/tableview-crud.data-provider.d.ts +0 -12
  862. package/lib/data-providers/tableview.data-provider.d.ts +0 -45
  863. package/lib/descriptors/action/action-button.descriptor.d.ts +0 -25
  864. package/lib/descriptors/action/action-confirmation.descriptor.d.ts +0 -36
  865. package/lib/descriptors/action/action-editor.descriptor.d.ts +0 -115
  866. package/lib/descriptors/action/action-link.descriptor.d.ts +0 -34
  867. package/lib/descriptors/action/action.descriptor.d.ts +0 -149
  868. package/lib/descriptors/action/index.d.ts +0 -5
  869. package/lib/descriptors/editor/editor.descriptor.d.ts +0 -274
  870. package/lib/descriptors/editor/field-action.descriptor.d.ts +0 -23
  871. package/lib/descriptors/editor/field-base.descriptor.d.ts +0 -122
  872. package/lib/descriptors/editor/field-group.descriptor.d.ts +0 -42
  873. package/lib/descriptors/editor/field-lookup.descriptor.d.ts +0 -83
  874. package/lib/descriptors/editor/field-many.descriptor.d.ts +0 -63
  875. package/lib/descriptors/editor/field-validation.descriptor.d.ts +0 -19
  876. package/lib/descriptors/editor/field.descriptor.d.ts +0 -167
  877. package/lib/descriptors/editor/index.d.ts +0 -8
  878. package/lib/descriptors/editor/internal/editor-fields.model.d.ts +0 -32
  879. package/lib/descriptors/editor/internal/editor.model.d.ts +0 -15
  880. package/lib/descriptors/filter/filter-lookup.descriptor.d.ts +0 -69
  881. package/lib/descriptors/filter/filter.descriptor.d.ts +0 -67
  882. package/lib/descriptors/filter/index.d.ts +0 -2
  883. package/lib/descriptors/interfaces/field-config.interface.d.ts +0 -9
  884. package/lib/descriptors/interfaces/index.d.ts +0 -2
  885. package/lib/descriptors/interfaces/lookup-descriptor.interface.d.ts +0 -12
  886. package/lib/descriptors/model/index.d.ts +0 -1
  887. package/lib/descriptors/model/model.descriptor.d.ts +0 -22
  888. package/lib/descriptors/table/column.descriptor.d.ts +0 -162
  889. package/lib/descriptors/table/index.d.ts +0 -2
  890. package/lib/descriptors/table/internal/table-columns.model.d.ts +0 -11
  891. package/lib/descriptors/table/internal/table.model.d.ts +0 -9
  892. package/lib/descriptors/table/table.descriptor.d.ts +0 -248
  893. package/lib/descriptors/tableview/index.d.ts +0 -1
  894. package/lib/descriptors/tableview/internal/tableview.model.d.ts +0 -11
  895. package/lib/descriptors/tableview/tableview.descriptor.d.ts +0 -163
  896. package/lib/descriptors/types/editor.type.d.ts +0 -6
  897. package/lib/descriptors/types/field.type.d.ts +0 -47
  898. package/lib/descriptors/types/filter.type.d.ts +0 -29
  899. package/lib/descriptors/types/index.d.ts +0 -7
  900. package/lib/descriptors/types/table.type.d.ts +0 -21
  901. package/lib/directives/component.directive.d.ts +0 -20
  902. package/lib/directives/dialog-keydown-handler.directive.d.ts +0 -12
  903. package/lib/directives/index.d.ts +0 -4
  904. package/lib/directives/input-trim.directive.d.ts +0 -14
  905. package/lib/directives/template.directive.d.ts +0 -12
  906. package/lib/error/error.handler.d.ts +0 -6
  907. package/lib/error/index.d.ts +0 -1
  908. package/lib/guards/index.d.ts +0 -1
  909. package/lib/guards/unsaved-changes.guard.d.ts +0 -3
  910. package/lib/helpers/coercion.d.ts +0 -9
  911. package/lib/models/action-editor.model.d.ts +0 -15
  912. package/lib/models/column-value.model.d.ts +0 -4
  913. package/lib/models/common-init-event-enum.model.d.ts +0 -9
  914. package/lib/models/config.model.d.ts +0 -53
  915. package/lib/models/enum.model.d.ts +0 -7
  916. package/lib/models/error.model.d.ts +0 -50
  917. package/lib/models/index.d.ts +0 -17
  918. package/lib/models/layout-config.model.d.ts +0 -34
  919. package/lib/models/log.model.d.ts +0 -40
  920. package/lib/models/menu.model.d.ts +0 -32
  921. package/lib/models/tableview-attr.model.d.ts +0 -10
  922. package/lib/models/type-registry.model.d.ts +0 -7
  923. package/lib/models/user.model.d.ts +0 -8
  924. package/lib/models/view-container.model.d.ts +0 -24
  925. package/lib/pipes/boolean.pipe.d.ts +0 -7
  926. package/lib/pipes/class-map.pipe.d.ts +0 -7
  927. package/lib/pipes/enum.pipe.d.ts +0 -8
  928. package/lib/pipes/enumerate-async.pipe.d.ts +0 -14
  929. package/lib/pipes/enumerate.pipe.d.ts +0 -21
  930. package/lib/pipes/getter.pipe.d.ts +0 -8
  931. package/lib/pipes/i18n-property.pipe.d.ts +0 -8
  932. package/lib/pipes/index.d.ts +0 -11
  933. package/lib/pipes/json-path.pipe.d.ts +0 -13
  934. package/lib/pipes/locale-default-row-class.pipe.d.ts +0 -10
  935. package/lib/pipes/models/internal/enumrate-pipe-i18n.model.d.ts +0 -5
  936. package/lib/pipes/models/internal/index.d.ts +0 -1
  937. package/lib/pipes/parametrize.pipe.d.ts +0 -13
  938. package/lib/pipes/template.pipe.d.ts +0 -10
  939. package/lib/provide-commons.d.ts +0 -3
  940. package/lib/registry/type.registry.d.ts +0 -25
  941. package/lib/router/index.d.ts +0 -3
  942. package/lib/router/models/index.d.ts +0 -1
  943. package/lib/router/models/router.model.d.ts +0 -31
  944. package/lib/router/route-builder.d.ts +0 -75
  945. package/lib/router/routes-builder.d.ts +0 -28
  946. package/lib/router/tableview-route-builder.d.ts +0 -45
  947. package/lib/security/authorization.guard.d.ts +0 -2
  948. package/lib/security/authorization.service.d.ts +0 -17
  949. package/lib/security/authorization.util.d.ts +0 -5
  950. package/lib/security/index.d.ts +0 -3
  951. package/lib/security/model/authorization.type.d.ts +0 -6
  952. package/lib/security/model/index.d.ts +0 -3
  953. package/lib/security/model/permission-service.interface.d.ts +0 -6
  954. package/lib/security/model/permissions.model.d.ts +0 -37
  955. package/lib/services/action/action-executor.service.d.ts +0 -175
  956. package/lib/services/action/component-action-executor.service.d.ts +0 -9
  957. package/lib/services/action/index.d.ts +0 -4
  958. package/lib/services/action/root-action-executor.service.d.ts +0 -9
  959. package/lib/services/action-error-mapper.service.d.ts +0 -18
  960. package/lib/services/commons-init.service.d.ts +0 -22
  961. package/lib/services/commons.service.d.ts +0 -90
  962. package/lib/services/configuration.service.d.ts +0 -68
  963. package/lib/services/index.d.ts +0 -10
  964. package/lib/services/internal/commons-init.provider.d.ts +0 -4
  965. package/lib/services/internal/index.d.ts +0 -1
  966. package/lib/services/log-publisher-console.service.d.ts +0 -4
  967. package/lib/services/logger.service.d.ts +0 -33
  968. package/lib/services/mng-localstorage-config.service.d.ts +0 -11
  969. package/lib/services/navigation.service.d.ts +0 -15
  970. package/lib/services/providers/formly-config.provider.d.ts +0 -5
  971. package/lib/services/providers/index.d.ts +0 -1
  972. package/lib/services/router.service.d.ts +0 -37
  973. package/lib/services/tokens/browser-storage.token.d.ts +0 -2
  974. package/lib/services/tokens/commons-init.token.d.ts +0 -3
  975. package/lib/services/tokens/default-setting.token.d.ts +0 -2
  976. package/lib/services/tokens/index.d.ts +0 -5
  977. package/lib/services/tokens/log-publisher.token.d.ts +0 -3
  978. package/lib/services/tokens/module-config.token.d.ts +0 -3
  979. package/lib/services/version.service.d.ts +0 -14
  980. package/lib/services/view/index.d.ts +0 -2
  981. package/lib/services/view/view-container.service.d.ts +0 -32
  982. package/lib/styles/button-style.builder.d.ts +0 -68
  983. package/lib/styles/index.d.ts +0 -2
  984. package/lib/styles/models/index.d.ts +0 -2
  985. package/lib/styles/models/style-level.enum.d.ts +0 -10
  986. package/lib/styles/models/style-size.enum.d.ts +0 -7
  987. package/lib/styles/styles.util.d.ts +0 -15
  988. package/lib/types/action-descriptor.types.d.ts +0 -4
  989. package/lib/types/data-provider.types.d.ts +0 -3
  990. package/lib/types/getter.type.d.ts +0 -2
  991. package/lib/types/i18n.type.d.ts +0 -1
  992. package/lib/types/index.d.ts +0 -7
  993. package/lib/types/localstorage-config-value.type.d.ts +0 -1
  994. package/lib/types/type.model.d.ts +0 -33
  995. package/lib/utils/action-data-provider.util.d.ts +0 -35
  996. package/lib/utils/date.util.d.ts +0 -18
  997. package/lib/utils/decorator-metadata.util.d.ts +0 -33
  998. package/lib/utils/editor-formly.util.d.ts +0 -13
  999. package/lib/utils/enum.util.d.ts +0 -50
  1000. package/lib/utils/error.util.d.ts +0 -116
  1001. package/lib/utils/export.util.d.ts +0 -5
  1002. package/lib/utils/file.util.d.ts +0 -3
  1003. package/lib/utils/i18n.util.d.ts +0 -85
  1004. package/lib/utils/index.d.ts +0 -13
  1005. package/lib/utils/model.util.d.ts +0 -10
  1006. package/lib/utils/notification.util.d.ts +0 -13
  1007. package/lib/utils/object.util.d.ts +0 -30
  1008. package/lib/utils/route.util.d.ts +0 -37
  1009. package/lib/utils/tableview.util.d.ts +0 -53
  1010. package/lib/validators/field.validator.d.ts +0 -3
  1011. package/lib/validators/index.d.ts +0 -1
  1012. package/openapi/angular/README.mustache +0 -226
  1013. package/openapi/angular/api.module.mustache +0 -39
  1014. package/openapi/angular/api.service.mustache +0 -253
  1015. package/openapi/angular/apiInterface.mustache +0 -47
  1016. package/openapi/angular/apis.mustache +0 -12
  1017. package/openapi/angular/config.yaml +0 -23
  1018. package/openapi/angular/configuration.mustache +0 -128
  1019. package/openapi/angular/custom/base-api.service.mustache +0 -14
  1020. package/openapi/angular/custom/helpers.mustache +0 -71
  1021. package/openapi/angular/custom/modelSchema.mustache +0 -46
  1022. package/openapi/angular/custom/schema.mustache +0 -18
  1023. package/openapi/angular/encoder.mustache +0 -20
  1024. package/openapi/angular/git_push.sh.mustache +0 -57
  1025. package/openapi/angular/index.mustache +0 -0
  1026. package/openapi/angular/licenseInfo.mustache +0 -11
  1027. package/openapi/angular/model.mustache +0 -16
  1028. package/openapi/angular/modelAlias.mustache +0 -1
  1029. package/openapi/angular/modelEnum.mustache +0 -24
  1030. package/openapi/angular/modelGeneric.mustache +0 -14
  1031. package/openapi/angular/modelGenericAdditionalProperties.mustache +0 -5
  1032. package/openapi/angular/modelGenericEnums.mustache +0 -30
  1033. package/openapi/angular/modelOneOf.mustache +0 -14
  1034. package/openapi/angular/modelTaggedUnion.mustache +0 -21
  1035. package/openapi/angular/models.mustache +0 -5
  1036. package/openapi/angular/ng-package.mustache +0 -6
  1037. package/openapi/angular/package.mustache +0 -39
  1038. package/openapi/angular/param.mustache +0 -69
  1039. package/openapi/angular/tsconfig.mustache +0 -28
  1040. package/openapi/angular/variables.mustache +0 -9
  1041. package/openapi/node/model.mustache +0 -83
  1042. package/openapi/node/models.mustache +0 -6
  1043. package/scss/common/layout/_breadcrumb.scss +0 -99
  1044. package/scss/common/layout/_config.scss +0 -100
  1045. package/scss/common/layout/_dashboard.scss +0 -16
  1046. package/scss/common/layout/_exception.scss +0 -133
  1047. package/scss/common/layout/_footer.scss +0 -29
  1048. package/scss/common/layout/_help.scss +0 -156
  1049. package/scss/common/layout/_inlinemenu.scss +0 -68
  1050. package/scss/common/layout/_invoice.scss +0 -176
  1051. package/scss/common/layout/_landing.scss +0 -636
  1052. package/scss/common/layout/_layout_dark.scss +0 -23
  1053. package/scss/common/layout/_layout_light.scss +0 -23
  1054. package/scss/common/layout/_loader.scss +0 -17
  1055. package/scss/common/layout/_login.scss +0 -106
  1056. package/scss/common/layout/_main.scss +0 -45
  1057. package/scss/common/layout/_mixins.scss +0 -222
  1058. package/scss/common/layout/_rightmenu.scss +0 -130
  1059. package/scss/common/layout/_topbar.scss +0 -191
  1060. package/scss/common/layout/_typography.scss +0 -68
  1061. package/scss/common/layout/_utils.scss +0 -96
  1062. package/scss/common/layout/_widgets.scss +0 -392
  1063. package/scss/common/layout/menu/_menu.scss +0 -7
  1064. package/scss/common/layout/menu/_menu_common.scss +0 -183
  1065. package/scss/common/layout/menu/_menu_overlay.scss +0 -52
  1066. package/scss/common/layout/menu/_menu_sidebar.scss +0 -233
  1067. package/scss/common/layout/menu/_menu_slim.scss +0 -137
  1068. package/scss/common/layout/menu/_menu_static.scss +0 -70
  1069. package/scss/common/layout/menu/_menu_theme.scss +0 -364
  1070. package/scss/common/theme/_theme_dark.scss +0 -5
  1071. package/scss/common/theme/_theme_light.scss +0 -5
  1072. package/scss/common/theme/designer/_colors.scss +0 -17
  1073. package/scss/common/theme/designer/_common.scss +0 -41
  1074. package/scss/common/theme/designer/_components.scss +0 -102
  1075. package/scss/common/theme/designer/_mixins.scss +0 -203
  1076. package/scss/common/theme/designer/components/button/_button.scss +0 -572
  1077. package/scss/common/theme/designer/components/button/_speeddial.scss +0 -81
  1078. package/scss/common/theme/designer/components/button/_splitbutton.scss +0 -2
  1079. package/scss/common/theme/designer/components/data/_carousel.scss +0 -37
  1080. package/scss/common/theme/designer/components/data/_datatable.scss +0 -266
  1081. package/scss/common/theme/designer/components/data/_dataview.scss +0 -55
  1082. package/scss/common/theme/designer/components/data/_filter.scss +0 -137
  1083. package/scss/common/theme/designer/components/data/_fullcalendar.scss +0 -324
  1084. package/scss/common/theme/designer/components/data/_orderlist.scss +0 -91
  1085. package/scss/common/theme/designer/components/data/_organizationchart.scss +0 -50
  1086. package/scss/common/theme/designer/components/data/_paginator.scss +0 -83
  1087. package/scss/common/theme/designer/components/data/_picklist.scss +0 -91
  1088. package/scss/common/theme/designer/components/data/_timeline.scss +0 -35
  1089. package/scss/common/theme/designer/components/data/_tree.scss +0 -144
  1090. package/scss/common/theme/designer/components/data/_treetable.scss +0 -241
  1091. package/scss/common/theme/designer/components/data/_virtualscroller.scss +0 -28
  1092. package/scss/common/theme/designer/components/file/_fileupload.scss +0 -58
  1093. package/scss/common/theme/designer/components/input/_autocomplete.scss +0 -105
  1094. package/scss/common/theme/designer/components/input/_calendar.scss +0 -212
  1095. package/scss/common/theme/designer/components/input/_cascadeselect.scss +0 -98
  1096. package/scss/common/theme/designer/components/input/_checkbox.scss +0 -85
  1097. package/scss/common/theme/designer/components/input/_chips.scss +0 -43
  1098. package/scss/common/theme/designer/components/input/_colorpicker.scss +0 -19
  1099. package/scss/common/theme/designer/components/input/_dropdown.scss +0 -136
  1100. package/scss/common/theme/designer/components/input/_editor.scss +0 -122
  1101. package/scss/common/theme/designer/components/input/_inputgroup.scss +0 -69
  1102. package/scss/common/theme/designer/components/input/_inputmask.scss +0 -3
  1103. package/scss/common/theme/designer/components/input/_inputnumber.scss +0 -3
  1104. package/scss/common/theme/designer/components/input/_inputswitch.scss +0 -60
  1105. package/scss/common/theme/designer/components/input/_inputtext.scss +0 -97
  1106. package/scss/common/theme/designer/components/input/_listbox.scss +0 -82
  1107. package/scss/common/theme/designer/components/input/_multiselect.scss +0 -165
  1108. package/scss/common/theme/designer/components/input/_password.scss +0 -33
  1109. package/scss/common/theme/designer/components/input/_radiobutton.scss +0 -78
  1110. package/scss/common/theme/designer/components/input/_rating.scss +0 -48
  1111. package/scss/common/theme/designer/components/input/_selectbutton.scss +0 -50
  1112. package/scss/common/theme/designer/components/input/_slider.scss +0 -71
  1113. package/scss/common/theme/designer/components/input/_togglebutton.scss +0 -48
  1114. package/scss/common/theme/designer/components/input/_treeselect.scss +0 -91
  1115. package/scss/common/theme/designer/components/menu/_breadcrumb.scss +0 -42
  1116. package/scss/common/theme/designer/components/menu/_contextmenu.scss +0 -51
  1117. package/scss/common/theme/designer/components/menu/_dock.scss +0 -51
  1118. package/scss/common/theme/designer/components/menu/_megamenu.scss +0 -103
  1119. package/scss/common/theme/designer/components/menu/_menu.scss +0 -41
  1120. package/scss/common/theme/designer/components/menu/_menubar.scss +0 -180
  1121. package/scss/common/theme/designer/components/menu/_panelmenu.scss +0 -136
  1122. package/scss/common/theme/designer/components/menu/_slidemenu.scss +0 -56
  1123. package/scss/common/theme/designer/components/menu/_steps.scss +0 -56
  1124. package/scss/common/theme/designer/components/menu/_tabmenu.scss +0 -49
  1125. package/scss/common/theme/designer/components/menu/_tieredmenu.scss +0 -57
  1126. package/scss/common/theme/designer/components/messages/_inlinemessage.scss +0 -64
  1127. package/scss/common/theme/designer/components/messages/_message.scss +0 -102
  1128. package/scss/common/theme/designer/components/messages/_toast.scss +0 -94
  1129. package/scss/common/theme/designer/components/misc/_avatar.scss +0 -30
  1130. package/scss/common/theme/designer/components/misc/_badge.scss +0 -48
  1131. package/scss/common/theme/designer/components/misc/_blockui.scss +0 -3
  1132. package/scss/common/theme/designer/components/misc/_chip.scss +0 -38
  1133. package/scss/common/theme/designer/components/misc/_inplace.scss +0 -16
  1134. package/scss/common/theme/designer/components/misc/_progressbar.scss +0 -17
  1135. package/scss/common/theme/designer/components/misc/_scrolltop.scss +0 -20
  1136. package/scss/common/theme/designer/components/misc/_skeleton.scss +0 -8
  1137. package/scss/common/theme/designer/components/misc/_tag.scss +0 -35
  1138. package/scss/common/theme/designer/components/misc/_terminal.scss +0 -11
  1139. package/scss/common/theme/designer/components/multimedia/_galleria.scss +0 -141
  1140. package/scss/common/theme/designer/components/multimedia/_image.scss +0 -44
  1141. package/scss/common/theme/designer/components/overlay/_confirmpopup.scss +0 -65
  1142. package/scss/common/theme/designer/components/overlay/_dialog.scss +0 -63
  1143. package/scss/common/theme/designer/components/overlay/_overlaypanel.scss +0 -62
  1144. package/scss/common/theme/designer/components/overlay/_sidebar.scss +0 -27
  1145. package/scss/common/theme/designer/components/overlay/_tooltip.scss +0 -33
  1146. package/scss/common/theme/designer/components/panel/_accordion.scss +0 -119
  1147. package/scss/common/theme/designer/components/panel/_card.scss +0 -30
  1148. package/scss/common/theme/designer/components/panel/_divider.scss +0 -31
  1149. package/scss/common/theme/designer/components/panel/_fieldset.scss +0 -47
  1150. package/scss/common/theme/designer/components/panel/_panel.scss +0 -42
  1151. package/scss/common/theme/designer/components/panel/_scrollpanel.scss +0 -6
  1152. package/scss/common/theme/designer/components/panel/_splitter.scss +0 -19
  1153. package/scss/common/theme/designer/components/panel/_tabview.scss +0 -66
  1154. package/scss/common/theme/designer/components/panel/_toolbar.scss +0 -10
  1155. package/scss/common/theme/extensions/_button.scss +0 -111
  1156. package/scss/common/theme/extensions/_calendar.scss +0 -18
  1157. package/scss/common/theme/extensions/_card.scss +0 -6
  1158. package/scss/common/theme/extensions/_carousel.scss +0 -13
  1159. package/scss/common/theme/extensions/_checkbox.scss +0 -10
  1160. package/scss/common/theme/extensions/_contextmenu.scss +0 -16
  1161. package/scss/common/theme/extensions/_datatable.scss +0 -83
  1162. package/scss/common/theme/extensions/_dialog.scss +0 -14
  1163. package/scss/common/theme/extensions/_fieldset.scss +0 -6
  1164. package/scss/common/theme/extensions/_galleria.scss +0 -25
  1165. package/scss/common/theme/extensions/_megamenu.scss +0 -18
  1166. package/scss/common/theme/extensions/_menu.scss +0 -14
  1167. package/scss/common/theme/extensions/_menubar.scss +0 -14
  1168. package/scss/common/theme/extensions/_orderlist.scss +0 -37
  1169. package/scss/common/theme/extensions/_paginator.scss +0 -19
  1170. package/scss/common/theme/extensions/_panelmenu.scss +0 -20
  1171. package/scss/common/theme/extensions/_password.scss +0 -5
  1172. package/scss/common/theme/extensions/_picklist.scss +0 -37
  1173. package/scss/common/theme/extensions/_radiobutton.scss +0 -8
  1174. package/scss/common/theme/extensions/_sidebar.scss +0 -19
  1175. package/scss/common/theme/extensions/_slidemenu.scss +0 -10
  1176. package/scss/common/theme/extensions/_slider.scss +0 -6
  1177. package/scss/common/theme/extensions/_steps.scss +0 -50
  1178. package/scss/common/theme/extensions/_tieredmenu.scss +0 -14
  1179. package/scss/common/theme/extensions/_toast.scss +0 -6
  1180. package/scss/common/theme/extensions/_tree.scss +0 -35
  1181. package/scss/common/theme/extensions/_treetable.scss +0 -35
  1182. package/scss/common/theme/extensions/_vendor_extensions.scss +0 -27
  1183. package/scss/common/variables/layout/_common.scss +0 -12
  1184. package/scss/common/variables/layout/_layout_dark.scss +0 -70
  1185. package/scss/common/variables/layout/_layout_light.scss +0 -70
  1186. package/scss/common/variables/theme/_theme_dark.scss +0 -937
  1187. package/scss/common/variables/theme/_theme_light.scss +0 -936
  1188. package/scss/layout/default/_mng-variables-layout-dark.scss +0 -2
  1189. package/scss/layout/default/_mng-variables-layout-light.scss +0 -2
  1190. package/scss/layout/default/layout-dark.scss +0 -2
  1191. package/scss/layout/default/layout-light.scss +0 -2
  1192. package/scss/mng-commons-dark-v2.scss +0 -9
  1193. package/scss/mng-commons-dark.scss +0 -5
  1194. package/scss/mng-commons-light-v2.scss +0 -9
  1195. package/scss/mng-commons-light.scss +0 -8
  1196. package/scss/mng-overrides/_layout_action.scss +0 -10
  1197. package/scss/mng-overrides/_layout_dialog.scss +0 -91
  1198. package/scss/mng-overrides/_layout_forms.scss +0 -38
  1199. package/scss/mng-overrides/_layout_menu.scss +0 -10
  1200. package/scss/mng-overrides/_layout_radio.scss +0 -3
  1201. package/scss/mng-overrides/_layout_styles.scss +0 -35
  1202. package/scss/mng-overrides/_layout_topbar.scss +0 -21
  1203. package/scss/mng-overrides/_mixins.scss +0 -69
  1204. package/scss/mng-overrides/_theme_autocomplete.scss +0 -29
  1205. package/scss/mng-overrides/_theme_button.scss +0 -61
  1206. package/scss/mng-overrides/_theme_datatable.scss +0 -160
  1207. package/scss/mng-overrides/_theme_datepicker.scss +0 -21
  1208. package/scss/mng-overrides/_theme_dialog.scss +0 -108
  1209. package/scss/mng-overrides/_theme_dropdown.scss +0 -22
  1210. package/scss/mng-overrides/_theme_fileupload.scss +0 -24
  1211. package/scss/mng-overrides/_theme_forms.scss +0 -29
  1212. package/scss/mng-overrides/_theme_image.scss +0 -27
  1213. package/scss/mng-overrides/_theme_input.scss +0 -27
  1214. package/scss/mng-overrides/_theme_menu.scss +0 -5
  1215. package/scss/mng-overrides/_theme_multiselect.scss +0 -20
  1216. package/scss/mng-overrides/_theme_styles.scss +0 -17
  1217. package/scss/mng-overrides/_theme_tableview.scss +0 -79
  1218. package/scss/mng-overrides/_theme_tabview.scss +0 -11
  1219. package/scss/mng-overrides/_theme_toast.scss +0 -3
  1220. package/scss/mng-overrides/_theme_toolbar.scss +0 -5
  1221. package/scss/mng-overrides/_variables.scss +0 -15
  1222. package/scss/theme/default/_mng-variables-theme-dark.scss +0 -11
  1223. package/scss/theme/default/_mng-variables-theme-light.scss +0 -13
  1224. package/scss/theme/default/theme-dark.scss +0 -2
  1225. package/scss/theme/default/theme-light.scss +0 -2
  1226. package/scss/v2/layout/_animation.scss +0 -53
  1227. package/scss/v2/layout/_breadcrumb.scss +0 -97
  1228. package/scss/v2/layout/_config.scss +0 -42
  1229. package/scss/v2/layout/_content.scss +0 -3
  1230. package/scss/v2/layout/_fonts.scss +0 -32
  1231. package/scss/v2/layout/_layout_dark.scss +0 -12
  1232. package/scss/v2/layout/_layout_light.scss +0 -12
  1233. package/scss/v2/layout/_main.scss +0 -54
  1234. package/scss/v2/layout/_profile.scss +0 -10
  1235. package/scss/v2/layout/_responsive.scss +0 -131
  1236. package/scss/v2/layout/_sidebar_drawer.scss +0 -283
  1237. package/scss/v2/layout/_sidebar_horizontal.scss +0 -168
  1238. package/scss/v2/layout/_sidebar_reveal.scss +0 -201
  1239. package/scss/v2/layout/_sidebar_slim.scss +0 -157
  1240. package/scss/v2/layout/_sidebar_slim_plus.scss +0 -167
  1241. package/scss/v2/layout/_sidebar_vertical.scss +0 -176
  1242. package/scss/v2/layout/_topbar.scss +0 -174
  1243. package/scss/v2/layout/_typography.scss +0 -62
  1244. package/scss/v2/layout/_utils.scss +0 -33
  1245. package/scss/v2/layout/layout.scss +0 -24
  1246. package/scss/v2/layout/mng/_mng_layout_footer.scss +0 -39
  1247. package/scss/v2/layout/mng/_mng_layout_menu.scss +0 -10
  1248. package/scss/v2/layout/mng/_mng_layout_styles.scss +0 -3
  1249. package/scss/v2/layout/mng/_mng_layout_topbar.scss +0 -18
  1250. package/scss/v2/layout/preloading.scss +0 -84
  1251. package/scss/v2/theme/extensions/_fullcalendar.scss +0 -328
  1252. package/scss/v2/theme/theme-base/_colors.scss +0 -17
  1253. package/scss/v2/theme/theme-base/_common.scss +0 -76
  1254. package/scss/v2/theme/theme-base/_components.scss +0 -110
  1255. package/scss/v2/theme/theme-base/_mixins.scss +0 -337
  1256. package/scss/v2/theme/theme-base/components/button/_button.scss +0 -576
  1257. package/scss/v2/theme/theme-base/components/button/_speeddial.scss +0 -96
  1258. package/scss/v2/theme/theme-base/components/button/_splitbutton.scss +0 -348
  1259. package/scss/v2/theme/theme-base/components/data/_carousel.scss +0 -37
  1260. package/scss/v2/theme/theme-base/components/data/_datatable.scss +0 -338
  1261. package/scss/v2/theme/theme-base/components/data/_dataview.scss +0 -46
  1262. package/scss/v2/theme/theme-base/components/data/_filter.scss +0 -137
  1263. package/scss/v2/theme/theme-base/components/data/_orderlist.scss +0 -114
  1264. package/scss/v2/theme/theme-base/components/data/_organizationchart.scss +0 -50
  1265. package/scss/v2/theme/theme-base/components/data/_paginator.scss +0 -92
  1266. package/scss/v2/theme/theme-base/components/data/_picklist.scss +0 -114
  1267. package/scss/v2/theme/theme-base/components/data/_timeline.scss +0 -35
  1268. package/scss/v2/theme/theme-base/components/data/_tree.scss +0 -150
  1269. package/scss/v2/theme/theme-base/components/data/_treetable.scss +0 -255
  1270. package/scss/v2/theme/theme-base/components/data/_virtualscroller.scss +0 -28
  1271. package/scss/v2/theme/theme-base/components/file/_fileupload.scss +0 -64
  1272. package/scss/v2/theme/theme-base/components/input/_autocomplete.scss +0 -136
  1273. package/scss/v2/theme/theme-base/components/input/_calendar.scss +0 -267
  1274. package/scss/v2/theme/theme-base/components/input/_cascadeselect.scss +0 -135
  1275. package/scss/v2/theme/theme-base/components/input/_checkbox.scss +0 -94
  1276. package/scss/v2/theme/theme-base/components/input/_chips.scss +0 -65
  1277. package/scss/v2/theme/theme-base/components/input/_colorpicker.scss +0 -19
  1278. package/scss/v2/theme/theme-base/components/input/_dropdown.scss +0 -151
  1279. package/scss/v2/theme/theme-base/components/input/_editor.scss +0 -122
  1280. package/scss/v2/theme/theme-base/components/input/_inputgroup.scss +0 -74
  1281. package/scss/v2/theme/theme-base/components/input/_inputmask.scss +0 -16
  1282. package/scss/v2/theme/theme-base/components/input/_inputnumber.scss +0 -28
  1283. package/scss/v2/theme/theme-base/components/input/_inputswitch.scss +0 -60
  1284. package/scss/v2/theme/theme-base/components/input/_inputtext.scss +0 -100
  1285. package/scss/v2/theme/theme-base/components/input/_listbox.scss +0 -97
  1286. package/scss/v2/theme/theme-base/components/input/_multiselect.scss +0 -177
  1287. package/scss/v2/theme/theme-base/components/input/_password.scss +0 -52
  1288. package/scss/v2/theme/theme-base/components/input/_radiobutton.scss +0 -78
  1289. package/scss/v2/theme/theme-base/components/input/_rating.scss +0 -60
  1290. package/scss/v2/theme/theme-base/components/input/_selectbutton.scss +0 -50
  1291. package/scss/v2/theme/theme-base/components/input/_slider.scss +0 -71
  1292. package/scss/v2/theme/theme-base/components/input/_togglebutton.scss +0 -48
  1293. package/scss/v2/theme/theme-base/components/input/_treeselect.scss +0 -139
  1294. package/scss/v2/theme/theme-base/components/menu/_breadcrumb.scss +0 -42
  1295. package/scss/v2/theme/theme-base/components/menu/_contextmenu.scss +0 -39
  1296. package/scss/v2/theme/theme-base/components/menu/_dock.scss +0 -95
  1297. package/scss/v2/theme/theme-base/components/menu/_megamenu.scss +0 -55
  1298. package/scss/v2/theme/theme-base/components/menu/_menu.scss +0 -37
  1299. package/scss/v2/theme/theme-base/components/menu/_menubar.scss +0 -140
  1300. package/scss/v2/theme/theme-base/components/menu/_panelmenu.scss +0 -153
  1301. package/scss/v2/theme/theme-base/components/menu/_slidemenu.scss +0 -59
  1302. package/scss/v2/theme/theme-base/components/menu/_steps.scss +0 -56
  1303. package/scss/v2/theme/theme-base/components/menu/_tabmenu.scss +0 -73
  1304. package/scss/v2/theme/theme-base/components/menu/_tieredmenu.scss +0 -43
  1305. package/scss/v2/theme/theme-base/components/messages/_inlinemessage.scss +0 -69
  1306. package/scss/v2/theme/theme-base/components/messages/_message.scss +0 -107
  1307. package/scss/v2/theme/theme-base/components/messages/_toast.scss +0 -99
  1308. package/scss/v2/theme/theme-base/components/misc/_avatar.scss +0 -30
  1309. package/scss/v2/theme/theme-base/components/misc/_badge.scss +0 -48
  1310. package/scss/v2/theme/theme-base/components/misc/_blockui.scss +0 -0
  1311. package/scss/v2/theme/theme-base/components/misc/_chip.scss +0 -42
  1312. package/scss/v2/theme/theme-base/components/misc/_inplace.scss +0 -16
  1313. package/scss/v2/theme/theme-base/components/misc/_progressbar.scss +0 -17
  1314. package/scss/v2/theme/theme-base/components/misc/_scrolltop.scss +0 -25
  1315. package/scss/v2/theme/theme-base/components/misc/_skeleton.scss +0 -8
  1316. package/scss/v2/theme/theme-base/components/misc/_tag.scss +0 -40
  1317. package/scss/v2/theme/theme-base/components/misc/_terminal.scss +0 -12
  1318. package/scss/v2/theme/theme-base/components/multimedia/_galleria.scss +0 -155
  1319. package/scss/v2/theme/theme-base/components/multimedia/_image.scss +0 -49
  1320. package/scss/v2/theme/theme-base/components/overlay/_confirmpopup.scss +0 -70
  1321. package/scss/v2/theme/theme-base/components/overlay/_dialog.scss +0 -69
  1322. package/scss/v2/theme/theme-base/components/overlay/_overlaypanel.scss +0 -64
  1323. package/scss/v2/theme/theme-base/components/overlay/_sidebar.scss +0 -27
  1324. package/scss/v2/theme/theme-base/components/overlay/_tooltip.scss +0 -33
  1325. package/scss/v2/theme/theme-base/components/panel/_accordion.scss +0 -119
  1326. package/scss/v2/theme/theme-base/components/panel/_card.scss +0 -30
  1327. package/scss/v2/theme/theme-base/components/panel/_divider.scss +0 -31
  1328. package/scss/v2/theme/theme-base/components/panel/_fieldset.scss +0 -47
  1329. package/scss/v2/theme/theme-base/components/panel/_panel.scss +0 -63
  1330. package/scss/v2/theme/theme-base/components/panel/_scrollpanel.scss +0 -6
  1331. package/scss/v2/theme/theme-base/components/panel/_splitter.scss +0 -19
  1332. package/scss/v2/theme/theme-base/components/panel/_tabview.scss +0 -82
  1333. package/scss/v2/theme/theme-base/components/panel/_toolbar.scss +0 -11
  1334. package/scss/v2/theme/theme-base/mng/_mng_mixins.scss +0 -69
  1335. package/scss/v2/theme/theme-base/mng/_mng_theme_autocomplete.scss +0 -34
  1336. package/scss/v2/theme/theme-base/mng/_mng_theme_button.scss +0 -68
  1337. package/scss/v2/theme/theme-base/mng/_mng_theme_datatable.scss +0 -153
  1338. package/scss/v2/theme/theme-base/mng/_mng_theme_datepicker.scss +0 -21
  1339. package/scss/v2/theme/theme-base/mng/_mng_theme_dialog.scss +0 -206
  1340. package/scss/v2/theme/theme-base/mng/_mng_theme_dropdown.scss +0 -32
  1341. package/scss/v2/theme/theme-base/mng/_mng_theme_fileupload.scss +0 -24
  1342. package/scss/v2/theme/theme-base/mng/_mng_theme_forms.scss +0 -66
  1343. package/scss/v2/theme/theme-base/mng/_mng_theme_image.scss +0 -27
  1344. package/scss/v2/theme/theme-base/mng/_mng_theme_input.scss +0 -31
  1345. package/scss/v2/theme/theme-base/mng/_mng_theme_menu.scss +0 -5
  1346. package/scss/v2/theme/theme-base/mng/_mng_theme_multiselect.scss +0 -20
  1347. package/scss/v2/theme/theme-base/mng/_mng_theme_styles.scss +0 -17
  1348. package/scss/v2/theme/theme-base/mng/_mng_theme_tableview.scss +0 -97
  1349. package/scss/v2/theme/theme-base/mng/_mng_theme_tabview.scss +0 -11
  1350. package/scss/v2/theme/theme-base/mng/_mng_theme_toast.scss +0 -3
  1351. package/scss/v2/theme/theme-base/mng/_mng_theme_toolbar.scss +0 -5
  1352. package/scss/v2/theme/theme-base/mng/_mng_variables.scss +0 -15
  1353. package/scss/v2/theme/theme-dark/_extensions.scss +0 -100
  1354. package/scss/v2/theme/theme-dark/_variables.scss +0 -940
  1355. package/scss/v2/theme/theme-dark/blue/theme.scss +0 -14
  1356. package/scss/v2/theme/theme-light/_extensions.scss +0 -100
  1357. package/scss/v2/theme/theme-light/_variables.scss +0 -936
  1358. package/scss/v2/theme/theme-light/blue/theme.scss +0 -14
  1359. package/templates/tableview-route.component.html +0 -5
  1360. /package/{lib → core}/components/notification/notification-wrapper.component.d.ts +0 -0
  1361. /package/{lib/models/class.model.d.ts → core/models/class-attribute.model.d.ts} +0 -0
  1362. /package/{lib → core}/models/version.model.d.ts +0 -0
  1363. /package/{lib/types/type.decorator.d.ts → core/reflect/type-enum-decorator.d.ts} +0 -0
  1364. /package/{lib → core}/utils/string.util.d.ts +0 -0
  1365. /package/{lib/descriptors/types/trim.type.d.ts → form/api/models/trim.model.d.ts} +0 -0
  1366. /package/{lib/descriptors/types/column.type.d.ts → table/api/models/column.model.d.ts} +0 -0
  1367. /package/{lib → tableview/action}/models/can-component-deactivate.model.d.ts +0 -0
  1368. /package/{lib/services/action → tableview/action/services/providers}/provide-action-executor.d.ts +0 -0
  1369. /package/{lib/services/view → tableview/action/services/providers}/provide-view-container.d.ts +0 -0
  1370. /package/{lib/descriptors/types → tableview/api/action/models}/action.type.d.ts +0 -0
  1371. /package/{lib/components → tableview/api}/action/models/tableview-action-default-categories.model.d.ts +0 -0
  1372. /package/{lib/components/form → tableview/api/editor}/models/form-editor.interface.d.ts +0 -0
  1373. /package/{lib → tableview/api/editor}/models/radio.model.d.ts +0 -0
@@ -0,0 +1,626 @@
1
+ import { Subject } from 'rxjs';
2
+ import { CommonsInternalError, I18nUtils, TypeRegistry } from '@mediusinc/mng-commons/core';
3
+ import { ModelDescriptor, enumModelGeneric } from '@mediusinc/mng-commons/model';
4
+ import { getColumnDisplayTypeFromColumnType, getColumnTypeFromClassAttributeDefType } from '@mediusinc/mng-commons/table/api';
5
+ import { getEditorClassAttributeDef, getFieldInputTypeFromColumnType } from '../helpers/class-attribute-converter';
6
+ import { EDITOR_DEFAULT_GROUP_NAME, TableviewEditorTypeEnum } from '../models/editor.model';
7
+ import { FieldInputTypeEnum } from '../models/field.model';
8
+ import { FieldActionDescriptor } from './field-action.descriptor';
9
+ import { AFieldDescriptor } from './field-base.descriptor';
10
+ import { FieldGroupDescriptor, FieldTabGroupDescriptor } from './field-group.descriptor';
11
+ import { FieldLookupDescriptor, FieldLookupEnumDescriptor, fieldLookupGetProviderCfgObj } from './field-lookup.descriptor';
12
+ import { FieldManyEditorDescriptor, FieldManyToManyEditorDescriptor, fieldManyToManyGetProviderCfgObj } from './field-many.descriptor';
13
+ import { FieldInputDescriptor } from './field.descriptor';
14
+ export class EditorDescriptorInst {
15
+ static { this.defaultGroupName = EDITOR_DEFAULT_GROUP_NAME; }
16
+ /**
17
+ * Creates new instance of editor descriptor.
18
+ * @param model Model descriptor.
19
+ * @param tableviewEditorType Type of editor in tableview (add, edit, view or none).
20
+ */
21
+ constructor(model, tableviewEditorType = TableviewEditorTypeEnum.None) {
22
+ /** @ignore */ this._tabs = [];
23
+ /** @ignore */ this._groups = [];
24
+ /** @ignore */ this._fields = [];
25
+ /** @ignore */ this._disabled = false;
26
+ /** @ignore */ this._isLocalized = false;
27
+ /** @ignore */ this._eventsSubject = new Subject();
28
+ this._model = model;
29
+ this._tableviewEditorType = tableviewEditorType;
30
+ }
31
+ /**
32
+ * Model descriptor for editor.
33
+ */
34
+ get model() {
35
+ return this._model;
36
+ }
37
+ /**
38
+ * Editor's tabs.
39
+ */
40
+ get tabs() {
41
+ return this._tabs;
42
+ }
43
+ /**
44
+ * Editor's fields.
45
+ */
46
+ get fields() {
47
+ return this._fields;
48
+ }
49
+ /**
50
+ * Type of editor for tableview.
51
+ */
52
+ get tableviewEditorType() {
53
+ return this._tableviewEditorType;
54
+ }
55
+ /**
56
+ * If editor is disabled.
57
+ */
58
+ get disabled() {
59
+ return this._disabled;
60
+ }
61
+ get isLocalized() {
62
+ return this._isLocalized;
63
+ }
64
+ get localizationLocaleProperty() {
65
+ return this._localizationLocaleProperty;
66
+ }
67
+ get localizationLocalizationProperty() {
68
+ return this._localizationLocalizationProperty;
69
+ }
70
+ get localizationModel() {
71
+ return this._localizationModel;
72
+ }
73
+ /**
74
+ * Creates new tab group. Next added fields are added to newly created tab group.
75
+ * @param name Name of the group.
76
+ * @param title Title key for the tab.
77
+ */
78
+ createTabGroup(name, title) {
79
+ const tabGroup = new FieldTabGroupDescriptor(this, name);
80
+ if (!title) {
81
+ title = I18nUtils.Type.getTabKey(this.model.i18nBaseKey, name);
82
+ }
83
+ tabGroup.withTitle(title);
84
+ this.createTabGroupDescriptor(tabGroup);
85
+ return tabGroup;
86
+ }
87
+ /**
88
+ * Creates new field group. Next added fields are added to newly created field group.
89
+ * @param name Name of the group.
90
+ * @param title Title key for the group.
91
+ */
92
+ createFieldGroup(name, title) {
93
+ const fieldGroup = new FieldGroupDescriptor(this, name);
94
+ if (title !== null) {
95
+ if (!title) {
96
+ title = I18nUtils.Type.getGroupKey(this.model.i18nBaseKey, name);
97
+ }
98
+ fieldGroup.withTitle(title);
99
+ }
100
+ this.createFieldGroupDescriptor(fieldGroup);
101
+ return fieldGroup;
102
+ }
103
+ /**
104
+ * Gets field by the model property name.
105
+ * @param property Model property name.
106
+ */
107
+ getField(property) {
108
+ return this.getFieldUnsafe(property);
109
+ }
110
+ /**
111
+ * Gets field by the model property name (UNSAFE).
112
+ * @param property Model property name.
113
+ */
114
+ getFieldUnsafe(property) {
115
+ return this._fields.find(f => f.property === property) ?? null;
116
+ }
117
+ /**
118
+ * Removes field by the model property name.
119
+ * @param property Model property name.
120
+ */
121
+ removeField(property) {
122
+ return this.removeFieldUnsafe(property);
123
+ }
124
+ /**
125
+ * Removes field by the model property name (UNSAFE).
126
+ * @param property Model property name.
127
+ */
128
+ removeFieldUnsafe(property) {
129
+ const fieldIdx = this._fields.findIndex(f => f.property === property);
130
+ if (fieldIdx < 0) {
131
+ throw new CommonsInternalError(`Field ${property} does not exist.`, { name: 'EditorDescriptorError' });
132
+ }
133
+ for (const group of this._groups) {
134
+ const groupFieldIdx = group.fields.findIndex(f => f instanceof AFieldDescriptor && f.property === property);
135
+ if (groupFieldIdx >= 0) {
136
+ group.fields.splice(groupFieldIdx, 1);
137
+ break;
138
+ }
139
+ }
140
+ this._fields.splice(fieldIdx, 1);
141
+ }
142
+ /**
143
+ * Adds field by the descriptor.
144
+ * @param field Field descriptor.
145
+ */
146
+ addFieldDescriptor(field) {
147
+ this.createDefaultGroup();
148
+ this._fields.push(field);
149
+ this._currentGroup?.addField(field);
150
+ return this;
151
+ }
152
+ /**
153
+ * Adds field by the model property name.
154
+ * @param property Model property name.
155
+ */
156
+ addField(property) {
157
+ const field = new FieldInputDescriptor(this, property);
158
+ this.addFieldDescriptor(field);
159
+ return field;
160
+ }
161
+ /**
162
+ * Adds field by the model property name (UNSAFE). Property is not checked on editor model.
163
+ * Use {addField} for safe usage.
164
+ * @param property Model property name.
165
+ */
166
+ addFieldUnsafe(property) {
167
+ const field = new FieldInputDescriptor(this, property);
168
+ this.addFieldDescriptor(field);
169
+ return field;
170
+ }
171
+ addFields(...properties) {
172
+ properties.forEach(p => this.addField(p));
173
+ return this;
174
+ }
175
+ addFieldAction(actionName) {
176
+ const field = new FieldActionDescriptor(this, actionName);
177
+ this.addFieldDescriptor(field);
178
+ return field;
179
+ }
180
+ /**
181
+ * Adds lookup field.
182
+ *
183
+ * @param {Property} property - The property key of the editor.
184
+ * @param {TypeDescriptor<FieldModel>} type - The type descriptor for the lookup model.
185
+ * @typeparam Property - The property key of the EditorModel.
186
+ * @typeparam LookupModel - The field model type, defaults to the non-nullable type of the editor's property.
187
+ * @typeparam FieldValue - The value type of field on editor.
188
+ *
189
+ * @returns {FieldLookupDescriptor<LookupModel, EditorModel, undefined, FieldValue>} - The field lookup descriptor.
190
+ */
191
+ addFieldLookup(property, type) {
192
+ return this.addFieldLookupUnsafe(property, type);
193
+ }
194
+ /**
195
+ * [UNSAFE] Adds lookup field.
196
+ * This method is UNSAFE because property is not type-checked.
197
+ *
198
+ * @param {string} property Model property name.
199
+ * @param {TypeDescriptor<FieldModel>} type - The type descriptor for the lookup model (defines 2nd generic).
200
+ * @typeparam LookupModel - The field model type, defaults to the non-nullable type of the editor's property.
201
+ * @typeparam FieldValue - The value type of field on editor.
202
+ *
203
+ * @returns {FieldLookupDescriptor<LookupModel, EditorModel, undefined, FieldValue>} - The field lookup descriptor.
204
+ */
205
+ addFieldLookupUnsafe(property, type) {
206
+ const field = new FieldLookupDescriptor(this, property, {
207
+ type: type?.classType
208
+ });
209
+ this.addFieldDescriptor(field);
210
+ return field;
211
+ }
212
+ /**
213
+ * Adds a field lookup with options value property for lookup model.
214
+ *
215
+ * @param {Property} property - The property key of the editor.
216
+ * @param {TypeDescriptor<FieldModel>} type - The type descriptor for the lookup model.
217
+ * @param {LookupValueProperty} lookupOptionsValueProperty - The value property used as value in the lookup options.
218
+ * @typeparam Property - The property key of the EditorModel.
219
+ * @typeparam LookupModel - The field model type, defaults to the non-nullable type of the editor's property.
220
+ * @typeparam LookupValueProperty - The property of lookup model type.
221
+ * @typeparam FieldValue - The value type of field on editor.
222
+ *
223
+ * @returns {FieldLookupDescriptor<LookupModel, EditorModel, undefined, FieldValue>} - The field lookup descriptor.
224
+ */
225
+ addFieldLookupWithOptionsValueProperty(property, type, lookupOptionsValueProperty) {
226
+ return this.addFieldLookupWithOptionsValuePropertyUnsafe(property, type, lookupOptionsValueProperty);
227
+ }
228
+ /**
229
+ * [UNSAFE] Adds a field lookup with options value property for lookup model.
230
+ * This method is UNSAFE because property is not type-checked.
231
+ *
232
+ * @param {Property} property - The property key of the editor.
233
+ * @param {TypeDescriptor<FieldModel>} type - The type descriptor for the lookup model.
234
+ * @param {LookupValueProperty} lookupOptionsValueProperty - The value property used as value in the lookup options.
235
+ * @typeparam Property - The property key of the EditorModel.
236
+ * @typeparam LookupModel - The field model type, defaults to the non-nullable type of the editor's property.
237
+ * @typeparam LookupValueProperty - The property of lookup model type.
238
+ * @typeparam FieldValue - The value type of field on editor.
239
+ *
240
+ * @returns {FieldLookupDescriptor<LookupModel, EditorModel, undefined, FieldValue>} - The field lookup descriptor.
241
+ */
242
+ addFieldLookupWithOptionsValuePropertyUnsafe(property, type, lookupOptionsValueProperty) {
243
+ const field = new FieldLookupDescriptor(this, property, {
244
+ type: type?.classType,
245
+ optionsValueProperty: lookupOptionsValueProperty
246
+ });
247
+ this.addFieldDescriptor(field);
248
+ return field;
249
+ }
250
+ /**
251
+ * Adds a field lookup with a data provider or service to the editor model.
252
+ *
253
+ * @param {Property} property - The property key of the editor.
254
+ * @param {FieldLookupProviderType<LookupModel, Service>} provider - The field lookup data provider or service.
255
+ * @param {TypeDescriptor<LookupModel>} [type] - The type of lookup - if data provider is passed as previous parameter, type can be omitted. If service is provider, type parameter is proposed in favour of correct typing.
256
+ * @typeparam Property - The property key of the EditorModel.
257
+ * @typeparam Service - The lookup service type.
258
+ * @typeparam LookupModel - The field model type, defaults to the non-nullable type of the editor's property.
259
+ * @typeparam FieldValue - The field value type, defaults to the editor's property type.
260
+ *
261
+ * @returns {FieldLookupDescriptor<LookupModel, EditorModel, Service, FieldValue>} Created field lookup descriptor.
262
+ */
263
+ addFieldLookupWithProvider(property, provider, type) {
264
+ return this.addFieldLookupWithProviderUnsafe(property, provider, type);
265
+ }
266
+ /**
267
+ * [UNSAFE] Adds a field lookup with a data provider or service to the editor model.
268
+ * This method is UNSAFE because property is not type-checked.
269
+ *
270
+ * @param {string} property - The property key of the editor.
271
+ * @param {FieldLookupProviderType<LookupModel, Service>} provider - The lookup provider or service for the field lookup.
272
+ * @param {TypeDescriptor<LookupModel>?} type - Optional type descriptor for the field lookup.
273
+ * @typeparam LookupModel - The field lookup model type.
274
+ * @typeparam Service - The lookup service type.
275
+ * @typeparam FieldValue - The value type of field on editor.
276
+ *
277
+ * @returns {FieldLookupDescriptor<LookupModel, EditorModel, Service, FieldValue>} - The field lookup descriptor added to the instance.
278
+ */
279
+ addFieldLookupWithProviderUnsafe(property, provider, type) {
280
+ const cfg = fieldLookupGetProviderCfgObj(provider);
281
+ const field = new FieldLookupDescriptor(this, property, {
282
+ type: type?.classType,
283
+ ...cfg
284
+ });
285
+ this.addFieldDescriptor(field);
286
+ return field;
287
+ }
288
+ /**
289
+ * Adds a field lookup with data provider or service and options value property for lookup model.
290
+ *
291
+ * @param {Property} property - The property key of the editor.
292
+ * @param {FieldLookupProviderType<FieldModel, Service>} provider - The lookup provider.
293
+ * @param {TypeDescriptor<FieldModel>} type - The type descriptor for the lookup model.
294
+ * @param {LookupValueProperty} lookupOptionsValueProperty - The value property used as value in the lookup options.
295
+ * @typeparam Property - The property key of the EditorModel.
296
+ * @typeparam Service - The lookup service type.
297
+ * @typeparam LookupModel - The field model type, defaults to the non-nullable type of the editor's property.
298
+ * @typeparam LookupValueProperty - The property of lookup model type.
299
+ * @typeparam FieldValue - The value type of field on editor.
300
+ *
301
+ * @returns {FieldLookupDescriptor<LookupModel, EditorModel, Service, FieldValue>} - The field lookup descriptor.
302
+ */
303
+ addFieldLookupWithProviderAndOptionsValueProperty(property, provider, type, lookupOptionsValueProperty) {
304
+ return this.addFieldLookupWithProviderAndOptionsValuePropertyUnsafe(property, provider, type, lookupOptionsValueProperty);
305
+ }
306
+ /**
307
+ * [UNSAFE] Adds a field lookup with data provider or service and options value property for lookup model.
308
+ * This method is UNSAFE because property is not type-checked.
309
+ *
310
+ * @param {string} property - The property key of the editor.
311
+ * @param {FieldLookupProviderType<FieldModel, Service>} provider - The lookup provider.
312
+ * @param {TypeDescriptor<FieldModel>} type - The type descriptor for the lookup model.
313
+ * @param {string} lookupOptionsValueProperty - The value property used in the lookup options.
314
+ * @typeparam Service - The service type.
315
+ * @typeparam LookupModel - The field model type, defaults to the non-nullable type of the editor's property.
316
+ * @typeparam FieldValue - The value type of field on editor.
317
+ *
318
+ * @returns {FieldLookupDescriptor<LookupModel, EditorModel, Service, FieldValue>} - The field lookup descriptor.
319
+ */
320
+ addFieldLookupWithProviderAndOptionsValuePropertyUnsafe(property, provider, type, lookupOptionsValueProperty) {
321
+ const cfg = fieldLookupGetProviderCfgObj(provider);
322
+ const field = new FieldLookupDescriptor(this, property, {
323
+ type: type?.classType,
324
+ optionsValueProperty: lookupOptionsValueProperty,
325
+ ...cfg
326
+ });
327
+ this.addFieldDescriptor(field);
328
+ return field;
329
+ }
330
+ addFieldLookupEnum(property, enumDesc, options) {
331
+ return this.addFieldLookupEnumUnsafe(property, enumDesc, options);
332
+ }
333
+ /**
334
+ * Adds enum lookup field.
335
+ * @param property Model's property name.
336
+ * @param enumDesc Type of enum or enum descriptor.
337
+ * @param options Provides subset of enum's available constants.
338
+ */
339
+ addFieldLookupEnumUnsafe(property, enumDesc, options) {
340
+ const field = new FieldLookupEnumDescriptor(this, property, enumDesc, options);
341
+ this.addFieldDescriptor(field);
342
+ return field;
343
+ }
344
+ /**
345
+ * Adds table/details/add/edit field for one-to-many (1:n) relations.
346
+ * @param property Model's property name.
347
+ * @param tableviewDescriptor Tableview descriptor for related model.
348
+ */
349
+ addFieldManyEditor(property, tableviewDescriptor) {
350
+ return this.addFieldManyEditorUnsafe(property, tableviewDescriptor);
351
+ }
352
+ /**
353
+ * Adds table/details/add/edit field for one-to-many (1:n) relations (UNSAFE).
354
+ * @param property Model's property name.
355
+ * @param tableviewDescriptor Tableview descriptor for related model.
356
+ */
357
+ addFieldManyEditorUnsafe(property, tableviewDescriptor) {
358
+ const field = new FieldManyEditorDescriptor(this, property, tableviewDescriptor);
359
+ this.addFieldDescriptor(field);
360
+ return field;
361
+ }
362
+ /**
363
+ * Adds tables for many-to-many (m:n) relations.
364
+ * @param property Model's property name.
365
+ * @param mainTableDescriptor Main table descriptor for displaying items added to main model's property.
366
+ * @param lookupTableDescriptor Lookup table descriptor for displaying items to be added to main model's property.
367
+ */
368
+ addFieldManyToManyEditor(property, mainTableDescriptor, lookupTableDescriptor) {
369
+ return this.addFieldManyToManyEditorUnsafe(property, mainTableDescriptor, lookupTableDescriptor);
370
+ }
371
+ /**
372
+ * Adds tables for many-to-many (m:n) relations (UNSAFE).
373
+ * @param property Model's property name.
374
+ * @param mainTableDescriptor Main table descriptor for displaying items added to main model's property.
375
+ * @param lookupTableDescriptor Lookup table descriptor for displaying items to be added to main model's property.
376
+ */
377
+ addFieldManyToManyEditorUnsafe(property, mainTableDescriptor, lookupTableDescriptor) {
378
+ const field = new FieldManyToManyEditorDescriptor(this, property, mainTableDescriptor, lookupTableDescriptor);
379
+ this.addFieldDescriptor(field);
380
+ return field;
381
+ }
382
+ addFieldManyToManyEditorWithProvider(property, mainTableDescriptor, lookupTableDescriptor, lookupDataProvider) {
383
+ return this.addFieldManyToManyEditorWithProviderUnsafe(property, mainTableDescriptor, lookupTableDescriptor, lookupDataProvider);
384
+ }
385
+ addFieldManyToManyEditorWithProviderUnsafe(property, mainTableDescriptor, lookupTableDescriptor, lookupDataProvider) {
386
+ const cfg = fieldManyToManyGetProviderCfgObj(lookupDataProvider);
387
+ const field = new FieldManyToManyEditorDescriptor(this, property, mainTableDescriptor, lookupTableDescriptor, {
388
+ ...cfg
389
+ });
390
+ this.addFieldDescriptor(field);
391
+ return field;
392
+ }
393
+ /**
394
+ * Disables field on editor.
395
+ * @param disabled
396
+ */
397
+ withDisabled(disabled = true) {
398
+ this._disabled = disabled;
399
+ return this;
400
+ }
401
+ /**
402
+ * Adds group validator to editor.
403
+ * @param name Name of the validation.
404
+ * @param validator Field validator function.
405
+ * @param message Field validation message.
406
+ */
407
+ addValidation(name, validator, message) {
408
+ if (this._currentGroup) {
409
+ this._currentGroup.withValidation(name, validator, message);
410
+ }
411
+ }
412
+ /**
413
+ * Creates a copy of editor descriptor object.
414
+ */
415
+ copy() {
416
+ const editor = new EditorDescriptorInst(this.model.copy(), this.tableviewEditorType);
417
+ for (const tabGroup of this._tabs) {
418
+ editor.createTabGroupDescriptor(tabGroup.copy());
419
+ }
420
+ for (const tabGroup of editor._tabs) {
421
+ for (const fieldGroup of tabGroup.fields) {
422
+ editor._fields.push(...fieldGroup.fields);
423
+ }
424
+ editor._groups.push(...tabGroup.fields);
425
+ }
426
+ editor._currentTabGroup = editor._tabs[editor._tabs.length - 1];
427
+ editor._currentGroup = editor._currentTabGroup.fields[editor._currentTabGroup.fields.length - 1];
428
+ editor._disabled = this._disabled;
429
+ return editor;
430
+ }
431
+ /**
432
+ * Created group from field group descriptor.
433
+ * @param fieldGroup Field group descriptor.
434
+ * @internal
435
+ */
436
+ createFieldGroupDescriptor(fieldGroup) {
437
+ this.createDefaultTabGroup();
438
+ this._currentGroup = fieldGroup;
439
+ this._groups.push(fieldGroup);
440
+ this._currentTabGroup?.addField(fieldGroup);
441
+ return this;
442
+ }
443
+ /**
444
+ * Creates tab group from tab group descriptor.
445
+ * @param tabGroup Tab group descriptor.
446
+ * @internal
447
+ */
448
+ createTabGroupDescriptor(tabGroup) {
449
+ this._currentTabGroup = tabGroup;
450
+ this._tabs.push(tabGroup);
451
+ return this;
452
+ }
453
+ /**
454
+ * Creates default field group.
455
+ * @internal
456
+ */
457
+ createDefaultGroup() {
458
+ this.createDefaultTabGroup();
459
+ if (this._currentTabGroup?.fields.length === 0) {
460
+ this.createFieldGroup(EditorDescriptorInst.defaultGroupName, null);
461
+ }
462
+ }
463
+ /**
464
+ * Creates default tab group.
465
+ * @internal
466
+ */
467
+ createDefaultTabGroup() {
468
+ if (this._tabs.length === 0) {
469
+ this.createTabGroup(EditorDescriptorInst.defaultGroupName, 'general.general');
470
+ }
471
+ }
472
+ /**
473
+ * Modifies selected field by field property. For enums use {withFieldModifiedEnum} instead.
474
+ * @param property Model's property name.
475
+ * @param fieldType new field type for selected field
476
+ * @param args additional parameters for field
477
+ */
478
+ withFieldModifiedType(property, fieldType, ...args) {
479
+ return this.withFieldModifiedTypeUnsafe(property, fieldType, ...args);
480
+ }
481
+ withFieldModifiedTypeUnsafe(property, fieldType, ...args) {
482
+ if (!this.model.type) {
483
+ throw new CommonsInternalError(`withFieldModifiedType cannot be executed for property ${property}: Model type is not defined.`);
484
+ }
485
+ const attribute = getEditorClassAttributeDef(this.model.type).find(attribute => attribute.name === property);
486
+ if (attribute) {
487
+ attribute.fieldType = fieldType;
488
+ EditorDescriptorInst.upsertFieldFromAttributeDef(this, attribute, this.fields.find(fi => fi.property === property), ...args);
489
+ }
490
+ return this;
491
+ }
492
+ /**
493
+ * Modifies selected field with enum type.
494
+ * @param property Model's property name.
495
+ * @param enumModel Enum descriptor.
496
+ * @param values
497
+ */
498
+ withFieldModifiedEnum(property, enumModel, values) {
499
+ return this.withFieldModifiedEnumUnsafe(property, enumModel, values);
500
+ }
501
+ withFieldModifiedEnumUnsafe(property, enumDesc, values) {
502
+ if (!this.model.type) {
503
+ throw new CommonsInternalError(`withFieldModifiedEnum cannot be executed for property ${property}: Model type is not defined.`);
504
+ }
505
+ const attribute = getEditorClassAttributeDef(this.model.type).find(a => a.name === property);
506
+ if (attribute) {
507
+ attribute.fieldType = FieldInputTypeEnum.Radio;
508
+ const field = this.fields.find(f => f.property === property);
509
+ if (field && field instanceof FieldInputDescriptor) {
510
+ field.asRadioFromEnum(enumDesc ?? enumModelGeneric(TypeRegistry.get().findEnum(attribute.type)), values);
511
+ }
512
+ }
513
+ return this;
514
+ }
515
+ /**
516
+ * Modifies selected field with lookup field.
517
+ * @param property Model's property name.
518
+ * @param lookupProvider provider to be added to field
519
+ * @param titleProperty
520
+ */
521
+ withFieldModifiedLookupWithProvider(property, lookupProvider, titleProperty) {
522
+ return this.withFieldModifiedLookupWithProviderUnsafe(property, lookupProvider, titleProperty);
523
+ }
524
+ withFieldModifiedLookupWithProviderUnsafe(property, lookupProvider, titleProperty) {
525
+ this.removeFieldUnsafe(property);
526
+ const field = this.addFieldLookupWithProviderUnsafe(property, lookupProvider).asAutocomplete();
527
+ if (titleProperty) {
528
+ field.withOptionsLabelProperty(titleProperty);
529
+ }
530
+ return this;
531
+ }
532
+ /**
533
+ * This method takes care of displaying correct/localized data in the editor
534
+ * @param property property that tells us where on the model are localizations accessible
535
+ * @param model Model for localizations
536
+ * @param localeProperty property by which we find the locale
537
+ */
538
+ localized(property, model, localeProperty) {
539
+ return this.localizedUnsafe(property, model, localeProperty);
540
+ }
541
+ localizedUnsafe(property, model, localeProperty) {
542
+ this._localizationLocalizationProperty = property;
543
+ this._localizationModel = model;
544
+ this._localizationLocaleProperty = localeProperty;
545
+ this._isLocalized = true;
546
+ return this;
547
+ }
548
+ nextEvent(type, cmpType, cmpInstance, data) {
549
+ this._eventsSubject.next({
550
+ type: type,
551
+ componentType: cmpType,
552
+ componentInstance: cmpInstance,
553
+ data: data
554
+ });
555
+ }
556
+ completeEvents() {
557
+ this._eventsSubject.complete();
558
+ }
559
+ get events$() {
560
+ return this._eventsSubject.asObservable();
561
+ }
562
+ /**
563
+ * Generates field based on attribute definition, used for auto model
564
+ * @param descriptor Editor descriptor instance.
565
+ * @param attribute Attribute definition.
566
+ * @param field Optional, if defined will be replaced, otherwise new will be generated.
567
+ * @param args Optional additional arguments mapped to filed type. Arguments depend on possible arguments on fields.
568
+ * @internal
569
+ */
570
+ static upsertFieldFromAttributeDef(descriptor, attribute, field, ...args) {
571
+ if (field == null) {
572
+ field = descriptor.addFieldUnsafe(attribute.name);
573
+ }
574
+ if (field instanceof FieldInputDescriptor) {
575
+ if (attribute.enumType) {
576
+ return field.asRadioFromEnum(enumModelGeneric(attribute.enumType));
577
+ }
578
+ else {
579
+ const tableColumnType = getColumnTypeFromClassAttributeDefType(attribute.type);
580
+ const tableColumnDisplayType = getColumnDisplayTypeFromColumnType(tableColumnType, attribute.type);
581
+ return field.asType(attribute.fieldType ?? getFieldInputTypeFromColumnType(tableColumnType, tableColumnDisplayType), ...args);
582
+ }
583
+ }
584
+ return field;
585
+ }
586
+ }
587
+ export class EditorDescriptor extends EditorDescriptorInst {
588
+ constructor() {
589
+ super(ModelDescriptor.create());
590
+ }
591
+ static create(idProperty, titleProperty, i18nBaseKey, tableviewEditorType = TableviewEditorTypeEnum.None) {
592
+ return new EditorDescriptorInst(ModelDescriptor.create(idProperty, titleProperty, i18nBaseKey), tableviewEditorType);
593
+ }
594
+ static fromClass(type, idProperty, titleProperty, i18nBaseKey, tableviewEditorType = TableviewEditorTypeEnum.None) {
595
+ return new EditorDescriptorInst(ModelDescriptor.fromClass(type, idProperty, titleProperty, i18nBaseKey), tableviewEditorType);
596
+ }
597
+ static fromModel(model, tableviewEditorType = TableviewEditorTypeEnum.None) {
598
+ return new EditorDescriptorInst(model, tableviewEditorType);
599
+ }
600
+ /**
601
+ * Creates editor descriptor automatically based on openapi model's attributes definition which is automatically extracted. All fields will be included.
602
+ * @param type Model's class.
603
+ * @param idProperty Id property representing model (optional).
604
+ * @param titleProperty Title property representing model (optional). If not provided, it will be automatically chosen.
605
+ * @param tableEditorType Type of editor in tableview (add, edit, view or none).
606
+ */
607
+ static fromClassWithAutoAttrsDef(type, idProperty, titleProperty, tableEditorType = TableviewEditorTypeEnum.None) {
608
+ return EditorDescriptor.fromClassWithCustomAttrsDef(type, getEditorClassAttributeDef(type), idProperty, titleProperty, tableEditorType);
609
+ }
610
+ /**
611
+ * Creates editor descriptor automatically based on openapi model's attributes definition provided in parameters. Only fields for provided attributes will be included.
612
+ * @param type Model's class.
613
+ * @param attributes List of attribute definitions from which fields should be created.
614
+ * @param idProperty Id property representing model (optional).
615
+ * @param titleProperty Title property representing model (optional). If not provided, it will be automatically chosen.
616
+ * @param tableEditorType Type of editor in tableview (add, edit, view or none).
617
+ */
618
+ static fromClassWithCustomAttrsDef(type, attributes, idProperty, titleProperty, tableEditorType = TableviewEditorTypeEnum.None) {
619
+ const descriptor = EditorDescriptor.fromClass(type, idProperty, titleProperty, undefined, tableEditorType);
620
+ attributes
621
+ .filter(attr => !attr.type.includes('Set') && !attr.type.includes('Array'))
622
+ .forEach(attr => EditorDescriptorInst.upsertFieldFromAttributeDef(descriptor, attr, descriptor.fields.find(col => col.property === attr.name)));
623
+ return descriptor;
624
+ }
625
+ }
626
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90YWJsZXZpZXcvYXBpL3NyYy9lZGl0b3IvZGVzY3JpcHRvcnMvZWRpdG9yLmRlc2NyaXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU3QixPQUFPLEVBR0gsb0JBQW9CLEVBR3BCLFNBQVMsRUFNVCxZQUFZLEVBQ2YsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQWlCLGVBQWUsRUFBa0IsZ0JBQWdCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRyxPQUFPLEVBQTBDLGtDQUFrQyxFQUFFLHNDQUFzQyxFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFHckssT0FBTyxFQUFDLDBCQUEwQixFQUFFLCtCQUErQixFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFHakgsT0FBTyxFQUFDLHlCQUF5QixFQUFFLHVCQUF1QixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDMUYsT0FBTyxFQUFDLGtCQUFrQixFQUF5QyxNQUFNLHVCQUF1QixDQUFDO0FBRWpHLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ2hFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBQyxvQkFBb0IsRUFBRSx1QkFBdUIsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZGLE9BQU8sRUFBQyxxQkFBcUIsRUFBRSx5QkFBeUIsRUFBMkIsNEJBQTRCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNsSixPQUFPLEVBQUMseUJBQXlCLEVBQUUsK0JBQStCLEVBQUUsZ0NBQWdDLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNySSxPQUFPLEVBQUMsb0JBQW9CLEVBQTJCLE1BQU0sb0JBQW9CLENBQUM7QUFFbEYsTUFBTSxPQUFP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QUFlLEdBQUcsdUJBQXVCLENBQUMsSUFBSTtRQUU5QyxPQUFPLGdCQUFnQixDQUFDLDJCQUEyQixDQUFDLElBQUksRUFBRSwwQkFBMEIsQ0FBQyxJQUFJLENBQUMsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzVJLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksTUFBTSxDQUFDLDJCQUEyQixDQUNyQyxJQUE0QixFQUM1QixVQUFxQyxFQUNyQyxVQUE4QixFQUM5QixhQUFpQyxFQUNqQyxlQUFlLEdBQUcsdUJBQXVCLENBQUMsSUFBSTtRQUU5QyxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBRTNHLFVBQVU7YUFDTCxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDMUUsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ1osb0JBQW9CLENBQUMsMkJBQTJCLENBQzVDLFVBQVUsRUFDVixJQUFJLEVBQ0osVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDNUQsQ0FDSixDQUFDO1FBQ04sT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUeXBlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgICBBcnJheUl0ZW1UeXBlLFxuICAgIENsYXNzVHlwZSxcbiAgICBDb21tb25zSW50ZXJuYWxFcnJvcixcbiAgICBFbnVtQ29uc3RhbnRUeXBlLFxuICAgIEVudW1UeXBlLFxuICAgIEkxOG5VdGlscyxcbiAgICBJRWRpdG9yRGVzY3JpcHRvckludGVybmFsLFxuICAgIElMb29rdXBEYXRhUHJvdmlkZXIsXG4gICAgSWRUeXBlLFxuICAgIEtleW9mQW5kT2ZUeXBlLFxuICAgIE51bGxhYmxlLFxuICAgIFR5cGVSZWdpc3RyeVxufSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtFbnVtRGVzY3JpcHRvciwgTW9kZWxEZXNjcmlwdG9yLCBUeXBlRGVzY3JpcHRvciwgZW51bU1vZGVsR2VuZXJpY30gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9tb2RlbCc7XG5pbXBvcnQge0lUYWJsZURhdGFQcm92aWRlciwgVGFibGVEZXNjcmlwdG9ySW5zdCwgZ2V0Q29sdW1uRGlzcGxheVR5cGVGcm9tQ29sdW1uVHlwZSwgZ2V0Q29sdW1uVHlwZUZyb21DbGFzc0F0dHJpYnV0ZURlZlR5cGV9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvdGFibGUvYXBpJztcblxuaW1wb3J0IHtUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdH0gZnJvbSAnLi4vLi4vdGFibGV2aWV3L2Rlc2NyaXB0b3JzL3RhYmxldmlldy5kZXNjcmlwdG9yJztcbmltcG9ydCB7Z2V0RWRpdG9yQ2xhc3NBdHRyaWJ1dGVEZWYsIGdldEZpZWxkSW5wdXRUeXBlRnJvbUNvbHVtblR5cGV9IGZyb20gJy4uL2hlbHBlcnMvY2xhc3MtYXR0cmlidXRlLWNvbnZlcnRlcic7XG5pbXBvcnQge0VkaXRvckNsYXNzQXR0cmlidXRlRGVmfSBmcm9tICcuLi9tb2RlbHMvY2xhc3MtdGFibGV2aWV3LWF0dHJpYnV0ZS5tb2RlbCc7XG5pbXBvcnQge0lGaWVsZHNNYW5hZ2VJbnRlcmZhY2V9IGZyb20gJy4uL21vZGVscy9lZGl0b3ItZmllbGRzLm1vZGVsJztcbmltcG9ydCB7RURJVE9SX0RFRkFVTFRfR1JPVVBfTkFNRSwgVGFibGV2aWV3RWRpdG9yVHlwZUVudW19IGZyb20gJy4uL21vZGVscy9lZGl0b3IubW9kZWwnO1xuaW1wb3J0IHtGaWVsZElucHV0VHlwZUVudW0sIEZpZWxkVmFsaWRhdGlvbk1lc3NhZ2UsIEZpZWxkVmFsaWRhdG9yfSBmcm9tICcuLi9tb2RlbHMvZmllbGQubW9kZWwnO1xuaW1wb3J0IHtGaWVsZEV2ZW50RGF0YSwgRm9ybUV2ZW50LCBGb3JtRXZlbnRUeXBlRW51bX0gZnJvbSAnLi4vbW9kZWxzL2Zvcm0tZWRpdG9yLmV2ZW50JztcbmltcG9ydCB7RmllbGRBY3Rpb25EZXNjcmlwdG9yfSBmcm9tICcuL2ZpZWxkLWFjdGlvbi5kZXNjcmlwdG9yJztcbmltcG9ydCB7QUZpZWxkRGVzY3JpcHRvcn0gZnJvbSAnLi9maWVsZC1iYXNlLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtGaWVsZEdyb3VwRGVzY3JpcHRvciwgRmllbGRUYWJHcm91cERlc2NyaXB0b3J9IGZyb20gJy4vZmllbGQtZ3JvdXAuZGVzY3JpcHRvcic7XG5pbXBvcnQge0ZpZWxkTG9va3VwRGVzY3JpcHRvciwgRmllbGRMb29rdXBFbnVtRGVzY3JpcHRvciwgRmllbGRMb29rdXBQcm92aWRlclR5cGUsIGZpZWxkTG9va3VwR2V0UHJvdmlkZXJDZmdPYmp9IGZyb20gJy4vZmllbGQtbG9va3VwLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yLCBGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yLCBmaWVsZE1hbnlUb01hbnlHZXRQcm92aWRlckNmZ09ian0gZnJvbSAnLi9maWVsZC1tYW55LmRlc2NyaXB0b3InO1xuaW1wb3J0IHtGaWVsZElucHV0RGVzY3JpcHRvciwgRmllbGRJbnB1dERlc2NyaXB0b3JUeXBlfSBmcm9tICcuL2ZpZWxkLmRlc2NyaXB0b3InO1xuXG5leHBvcnQgY2xhc3MgRWRpdG9yRGVzY3JpcHRvckluc3Q8RWRpdG9yTW9kZWw+IGltcGxlbWVudHMgSUVkaXRvckRlc2NyaXB0b3JJbnRlcm5hbDxFZGl0b3JNb2RlbD4sIElGaWVsZHNNYW5hZ2VJbnRlcmZhY2U8RWRpdG9yTW9kZWw+IHtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGRlZmF1bHRHcm91cE5hbWUgPSBFRElUT1JfREVGQVVMVF9HUk9VUF9OQU1FO1xuXG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIHJlYWRvbmx5IF9tb2RlbDogTW9kZWxEZXNjcmlwdG9yPEVkaXRvck1vZGVsPjtcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgcmVhZG9ubHkgX3RhYmxldmlld0VkaXRvclR5cGU6IFRhYmxldmlld0VkaXRvclR5cGVFbnVtO1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCByZWFkb25seSBfdGFiczogQXJyYXk8RmllbGRUYWJHcm91cERlc2NyaXB0b3I8RWRpdG9yTW9kZWw+PiA9IFtdO1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCByZWFkb25seSBfZ3JvdXBzOiBBcnJheTxGaWVsZEdyb3VwRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4+ID0gW107XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9maWVsZHM6IEFycmF5PEFGaWVsZERlc2NyaXB0b3I8YW55LCBFZGl0b3JNb2RlbD4+ID0gW107XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9jdXJyZW50VGFiR3JvdXA/OiBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD47XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9jdXJyZW50R3JvdXA/OiBGaWVsZEdyb3VwRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD47XG5cbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX2lzTG9jYWxpemVkID0gZmFsc2U7XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9sb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eT86IHN0cmluZztcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX2xvY2FsaXphdGlvbk1vZGVsPzogTW9kZWxEZXNjcmlwdG9yPGFueT47XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9sb2NhbGl6YXRpb25Mb2NhbGl6YXRpb25Qcm9wZXJ0eT86IHN0cmluZztcblxuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCByZWFkb25seSBfZXZlbnRzU3ViamVjdCA9IG5ldyBTdWJqZWN0PEZvcm1FdmVudDxFZGl0b3JNb2RlbD4+KCk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIG5ldyBpbnN0YW5jZSBvZiBlZGl0b3IgZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gbW9kZWwgTW9kZWwgZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gdGFibGV2aWV3RWRpdG9yVHlwZSBUeXBlIG9mIGVkaXRvciBpbiB0YWJsZXZpZXcgKGFkZCwgZWRpdCwgdmlldyBvciBub25lKS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IobW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4sIHRhYmxldmlld0VkaXRvclR5cGUgPSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5Ob25lKSB7XG4gICAgICAgIHRoaXMuX21vZGVsID0gbW9kZWw7XG4gICAgICAgIHRoaXMuX3RhYmxldmlld0VkaXRvclR5cGUgPSB0YWJsZXZpZXdFZGl0b3JUeXBlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1vZGVsIGRlc2NyaXB0b3IgZm9yIGVkaXRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IG1vZGVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9kZWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRWRpdG9yJ3MgdGFicy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHRhYnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVkaXRvcidzIGZpZWxkcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUeXBlIG9mIGVkaXRvciBmb3IgdGFibGV2aWV3LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdGFibGV2aWV3RWRpdG9yVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxldmlld0VkaXRvclR5cGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSWYgZWRpdG9yIGlzIGRpc2FibGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzTG9jYWxpemVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNMb2NhbGl6ZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9jYWxpemF0aW9uTG9jYWxpemF0aW9uUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGl6YXRpb25Mb2NhbGl6YXRpb25Qcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvY2FsaXphdGlvbk1vZGVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxpemF0aW9uTW9kZWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBuZXcgdGFiIGdyb3VwLiBOZXh0IGFkZGVkIGZpZWxkcyBhcmUgYWRkZWQgdG8gbmV3bHkgY3JlYXRlZCB0YWIgZ3JvdXAuXG4gICAgICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgZ3JvdXAuXG4gICAgICogQHBhcmFtIHRpdGxlIFRpdGxlIGtleSBmb3IgdGhlIHRhYi5cbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlVGFiR3JvdXAobmFtZTogc3RyaW5nLCB0aXRsZT86IHN0cmluZyk6IEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yPEVkaXRvck1vZGVsPiB7XG4gICAgICAgIGNvbnN0IHRhYkdyb3VwID0gbmV3IEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yPEVkaXRvck1vZGVsPih0aGlzLCBuYW1lKTtcbiAgICAgICAgaWYgKCF0aXRsZSkge1xuICAgICAgICAgICAgdGl0bGUgPSBJMThuVXRpbHMuVHlwZS5nZXRUYWJLZXkodGhpcy5tb2RlbC5pMThuQmFzZUtleSwgbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGFiR3JvdXAud2l0aFRpdGxlKHRpdGxlKTtcbiAgICAgICAgdGhpcy5jcmVhdGVUYWJHcm91cERlc2NyaXB0b3IodGFiR3JvdXApO1xuICAgICAgICByZXR1cm4gdGFiR3JvdXA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBuZXcgZmllbGQgZ3JvdXAuIE5leHQgYWRkZWQgZmllbGRzIGFyZSBhZGRlZCB0byBuZXdseSBjcmVhdGVkIGZpZWxkIGdyb3VwLlxuICAgICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIGdyb3VwLlxuICAgICAqIEBwYXJhbSB0aXRsZSBUaXRsZSBrZXkgZm9yIHRoZSBncm91cC5cbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlRmllbGRHcm91cChuYW1lOiBzdHJpbmcsIHRpdGxlPzogc3RyaW5nIHwgbnVsbCk6IEZpZWxkR3JvdXBEZXNjcmlwdG9yPEVkaXRvck1vZGVsPiB7XG4gICAgICAgIGNvbnN0IGZpZWxkR3JvdXAgPSBuZXcgRmllbGRHcm91cERlc2NyaXB0b3I8RWRpdG9yTW9kZWw+KHRoaXMsIG5hbWUpO1xuICAgICAgICBpZiAodGl0bGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghdGl0bGUpIHtcbiAgICAgICAgICAgICAgICB0aXRsZSA9IEkxOG5VdGlscy5UeXBlLmdldEdyb3VwS2V5KHRoaXMubW9kZWwuaTE4bkJhc2VLZXksIG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmllbGRHcm91cC53aXRoVGl0bGUodGl0bGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3JlYXRlRmllbGRHcm91cERlc2NyaXB0b3IoZmllbGRHcm91cCk7XG4gICAgICAgIHJldHVybiBmaWVsZEdyb3VwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgZmllbGQgYnkgdGhlIG1vZGVsIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHByb3BlcnR5IE1vZGVsIHByb3BlcnR5IG5hbWUuXG4gICAgICovXG4gICAgcHVibGljIGdldEZpZWxkKHByb3BlcnR5OiBrZXlvZiBFZGl0b3JNb2RlbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRGaWVsZFVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgZmllbGQgYnkgdGhlIG1vZGVsIHByb3BlcnR5IG5hbWUgKFVOU0FGRSkuXG4gICAgICogQHBhcmFtIHByb3BlcnR5IE1vZGVsIHByb3BlcnR5IG5hbWUuXG4gICAgICovXG4gICAgcHVibGljIGdldEZpZWxkVW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpOiBBRmllbGREZXNjcmlwdG9yPGFueSwgRWRpdG9yTW9kZWw+IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZHMuZmluZChmID0+IGYucHJvcGVydHkgPT09IHByb3BlcnR5KSA/PyBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgZmllbGQgYnkgdGhlIG1vZGVsIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHByb3BlcnR5IE1vZGVsIHByb3BlcnR5IG5hbWUuXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZUZpZWxkKHByb3BlcnR5OiBrZXlvZiBFZGl0b3JNb2RlbCk6IHZvaWQge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVGaWVsZFVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgZmllbGQgYnkgdGhlIG1vZGVsIHByb3BlcnR5IG5hbWUgKFVOU0FGRSkuXG4gICAgICogQHBhcmFtIHByb3BlcnR5IE1vZGVsIHByb3BlcnR5IG5hbWUuXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZUZpZWxkVW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmllbGRJZHggPSB0aGlzLl9maWVsZHMuZmluZEluZGV4KGYgPT4gZi5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpO1xuICAgICAgICBpZiAoZmllbGRJZHggPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYEZpZWxkICR7cHJvcGVydHl9IGRvZXMgbm90IGV4aXN0LmAsIHtuYW1lOiAnRWRpdG9yRGVzY3JpcHRvckVycm9yJ30pO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgdGhpcy5fZ3JvdXBzKSB7XG4gICAgICAgICAgICBjb25zdCBncm91cEZpZWxkSWR4ID0gZ3JvdXAuZmllbGRzLmZpbmRJbmRleChmID0+IGYgaW5zdGFuY2VvZiBBRmllbGREZXNjcmlwdG9yICYmIGYucHJvcGVydHkgPT09IHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChncm91cEZpZWxkSWR4ID49IDApIHtcbiAgICAgICAgICAgICAgICBncm91cC5maWVsZHMuc3BsaWNlKGdyb3VwRmllbGRJZHgsIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ZpZWxkcy5zcGxpY2UoZmllbGRJZHgsIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgZmllbGQgYnkgdGhlIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIGZpZWxkIEZpZWxkIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpZWxkRGVzY3JpcHRvcjxGaWVsZE1vZGVsLCBGaWVsZFZhbHVlID0gRmllbGRNb2RlbD4oZmllbGQ6IEFGaWVsZERlc2NyaXB0b3I8RmllbGRNb2RlbCwgRWRpdG9yTW9kZWwsIEZpZWxkVmFsdWU+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuY3JlYXRlRGVmYXVsdEdyb3VwKCk7XG4gICAgICAgIHRoaXMuX2ZpZWxkcy5wdXNoKGZpZWxkKTtcbiAgICAgICAgdGhpcy5fY3VycmVudEdyb3VwPy5hZGRGaWVsZChmaWVsZCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgZmllbGQgYnkgdGhlIG1vZGVsIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHByb3BlcnR5IE1vZGVsIHByb3BlcnR5IG5hbWUuXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpZWxkPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgRWRpdG9yTW9kZWwsIEZpZWxkTW9kZWwgPSBOb25OdWxsYWJsZTxFZGl0b3JNb2RlbFtQcm9wZXJ0eV0+LCBGaWVsZFZhbHVlID0gRWRpdG9yTW9kZWxbUHJvcGVydHldPihwcm9wZXJ0eTogUHJvcGVydHkpIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRJbnB1dERlc2NyaXB0b3I8RWRpdG9yTW9kZWwsIEZpZWxkTW9kZWwsIEZpZWxkVmFsdWU+KHRoaXMsIHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgICAgIHRoaXMuYWRkRmllbGREZXNjcmlwdG9yPEZpZWxkTW9kZWwsIEZpZWxkVmFsdWU+KGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgZmllbGQgYnkgdGhlIG1vZGVsIHByb3BlcnR5IG5hbWUgKFVOU0FGRSkuIFByb3BlcnR5IGlzIG5vdCBjaGVja2VkIG9uIGVkaXRvciBtb2RlbC5cbiAgICAgKiBVc2Uge2FkZEZpZWxkfSBmb3Igc2FmZSB1c2FnZS5cbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgTW9kZWwgcHJvcGVydHkgbmFtZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmllbGRVbnNhZmU8RmllbGRNb2RlbCA9IEZpZWxkSW5wdXREZXNjcmlwdG9yVHlwZSwgRmllbGRWYWx1ZSA9IEZpZWxkTW9kZWw+KHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRJbnB1dERlc2NyaXB0b3I8RWRpdG9yTW9kZWwsIEZpZWxkTW9kZWwsIEZpZWxkVmFsdWU+KHRoaXMsIHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZERlc2NyaXB0b3I8RmllbGRNb2RlbCwgRmllbGRWYWx1ZT4oZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkcyguLi5wcm9wZXJ0aWVzOiAoa2V5b2YgRWRpdG9yTW9kZWwpW10pOiB0aGlzIHtcbiAgICAgICAgcHJvcGVydGllcy5mb3JFYWNoKHAgPT4gdGhpcy5hZGRGaWVsZChwKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZEFjdGlvbihhY3Rpb25OYW1lOiBzdHJpbmcpOiBGaWVsZEFjdGlvbkRlc2NyaXB0b3I8RWRpdG9yTW9kZWw+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRBY3Rpb25EZXNjcmlwdG9yKHRoaXMsIGFjdGlvbk5hbWUpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkRGVzY3JpcHRvcihmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGxvb2t1cCBmaWVsZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UHJvcGVydHl9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgZWRpdG9yLlxuICAgICAqIEBwYXJhbSB7VHlwZURlc2NyaXB0b3I8RmllbGRNb2RlbD59IHR5cGUgLSBUaGUgdHlwZSBkZXNjcmlwdG9yIGZvciB0aGUgbG9va3VwIG1vZGVsLlxuICAgICAqIEB0eXBlcGFyYW0gUHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSBFZGl0b3JNb2RlbC5cbiAgICAgKiBAdHlwZXBhcmFtIExvb2t1cE1vZGVsIC0gVGhlIGZpZWxkIG1vZGVsIHR5cGUsIGRlZmF1bHRzIHRvIHRoZSBub24tbnVsbGFibGUgdHlwZSBvZiB0aGUgZWRpdG9yJ3MgcHJvcGVydHkuXG4gICAgICogQHR5cGVwYXJhbSBGaWVsZFZhbHVlIC0gVGhlIHZhbHVlIHR5cGUgb2YgZmllbGQgb24gZWRpdG9yLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0ZpZWxkTG9va3VwRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgRWRpdG9yTW9kZWwsIHVuZGVmaW5lZCwgRmllbGRWYWx1ZT59IC0gVGhlIGZpZWxkIGxvb2t1cCBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGaWVsZExvb2t1cDxLIGV4dGVuZHMga2V5b2YgRWRpdG9yTW9kZWwsIExvb2t1cE1vZGVsID0gTm9uTnVsbGFibGU8RWRpdG9yTW9kZWxbS10+LCBGaWVsZFZhbHVlID0gRWRpdG9yTW9kZWxbS10+KHByb3BlcnR5OiBLLCB0eXBlPzogVHlwZURlc2NyaXB0b3I8TG9va3VwTW9kZWw+KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEZpZWxkTG9va3VwVW5zYWZlPExvb2t1cE1vZGVsLCBGaWVsZFZhbHVlPihwcm9wZXJ0eSBhcyBzdHJpbmcsIHR5cGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFtVTlNBRkVdIEFkZHMgbG9va3VwIGZpZWxkLlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIFVOU0FGRSBiZWNhdXNlIHByb3BlcnR5IGlzIG5vdCB0eXBlLWNoZWNrZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgTW9kZWwgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0ge1R5cGVEZXNjcmlwdG9yPEZpZWxkTW9kZWw+fSB0eXBlIC0gVGhlIHR5cGUgZGVzY3JpcHRvciBmb3IgdGhlIGxvb2t1cCBtb2RlbCAoZGVmaW5lcyAybmQgZ2VuZXJpYykuXG4gICAgICogQHR5cGVwYXJhbSBMb29rdXBNb2RlbCAtIFRoZSBmaWVsZCBtb2RlbCB0eXBlLCBkZWZhdWx0cyB0byB0aGUgbm9uLW51bGxhYmxlIHR5cGUgb2YgdGhlIGVkaXRvcidzIHByb3BlcnR5LlxuICAgICAqIEB0eXBlcGFyYW0gRmllbGRWYWx1ZSAtIFRoZSB2YWx1ZSB0eXBlIG9mIGZpZWxkIG9uIGVkaXRvci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtGaWVsZExvb2t1cERlc2NyaXB0b3I8TG9va3VwTW9kZWwsIEVkaXRvck1vZGVsLCB1bmRlZmluZWQsIEZpZWxkVmFsdWU+fSAtIFRoZSBmaWVsZCBsb29rdXAgZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmllbGRMb29rdXBVbnNhZmU8TG9va3VwTW9kZWwsIEZpZWxkVmFsdWUgPSBMb29rdXBNb2RlbD4ocHJvcGVydHk6IHN0cmluZywgdHlwZT86IFR5cGVEZXNjcmlwdG9yPExvb2t1cE1vZGVsPikge1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZExvb2t1cERlc2NyaXB0b3I8TG9va3VwTW9kZWwsIEVkaXRvck1vZGVsLCB1bmRlZmluZWQsIEZpZWxkVmFsdWU+KHRoaXMsIHByb3BlcnR5LCB7XG4gICAgICAgICAgICB0eXBlOiB0eXBlPy5jbGFzc1R5cGVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBmaWVsZCBsb29rdXAgd2l0aCBvcHRpb25zIHZhbHVlIHByb3BlcnR5IGZvciBsb29rdXAgbW9kZWwuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1Byb3BlcnR5fSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIGVkaXRvci5cbiAgICAgKiBAcGFyYW0ge1R5cGVEZXNjcmlwdG9yPEZpZWxkTW9kZWw+fSB0eXBlIC0gVGhlIHR5cGUgZGVzY3JpcHRvciBmb3IgdGhlIGxvb2t1cCBtb2RlbC5cbiAgICAgKiBAcGFyYW0ge0xvb2t1cFZhbHVlUHJvcGVydHl9IGxvb2t1cE9wdGlvbnNWYWx1ZVByb3BlcnR5IC0gVGhlIHZhbHVlIHByb3BlcnR5IHVzZWQgYXMgdmFsdWUgaW4gdGhlIGxvb2t1cCBvcHRpb25zLlxuICAgICAqIEB0eXBlcGFyYW0gUHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSBFZGl0b3JNb2RlbC5cbiAgICAgKiBAdHlwZXBhcmFtIExvb2t1cE1vZGVsIC0gVGhlIGZpZWxkIG1vZGVsIHR5cGUsIGRlZmF1bHRzIHRvIHRoZSBub24tbnVsbGFibGUgdHlwZSBvZiB0aGUgZWRpdG9yJ3MgcHJvcGVydHkuXG4gICAgICogQHR5cGVwYXJhbSBMb29rdXBWYWx1ZVByb3BlcnR5IC0gVGhlIHByb3BlcnR5IG9mIGxvb2t1cCBtb2RlbCB0eXBlLlxuICAgICAqIEB0eXBlcGFyYW0gRmllbGRWYWx1ZSAtIFRoZSB2YWx1ZSB0eXBlIG9mIGZpZWxkIG9uIGVkaXRvci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtGaWVsZExvb2t1cERlc2NyaXB0b3I8TG9va3VwTW9kZWwsIEVkaXRvck1vZGVsLCB1bmRlZmluZWQsIEZpZWxkVmFsdWU+fSAtIFRoZSBmaWVsZCBsb29rdXAgZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmllbGRMb29rdXBXaXRoT3B0aW9uc1ZhbHVlUHJvcGVydHk8XG4gICAgICAgIFByb3BlcnR5IGV4dGVuZHMga2V5b2YgRWRpdG9yTW9kZWwsXG4gICAgICAgIExvb2t1cE1vZGVsLFxuICAgICAgICBMb29rdXBWYWx1ZVByb3BlcnR5IGV4dGVuZHMgS2V5b2ZBbmRPZlR5cGU8TG9va3VwTW9kZWwsIEVkaXRvck1vZGVsW1Byb3BlcnR5XT4sXG4gICAgICAgIEZpZWxkVmFsdWUgPSBFZGl0b3JNb2RlbFtQcm9wZXJ0eV1cbiAgICA+KHByb3BlcnR5OiBQcm9wZXJ0eSwgdHlwZTogVHlwZURlc2NyaXB0b3I8TG9va3VwTW9kZWw+LCBsb29rdXBPcHRpb25zVmFsdWVQcm9wZXJ0eTogTG9va3VwVmFsdWVQcm9wZXJ0eSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRGaWVsZExvb2t1cFdpdGhPcHRpb25zVmFsdWVQcm9wZXJ0eVVuc2FmZTxMb29rdXBNb2RlbCwgRmllbGRWYWx1ZT4ocHJvcGVydHkgYXMgc3RyaW5nLCB0eXBlLCBsb29rdXBPcHRpb25zVmFsdWVQcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFtVTlNBRkVdIEFkZHMgYSBmaWVsZCBsb29rdXAgd2l0aCBvcHRpb25zIHZhbHVlIHByb3BlcnR5IGZvciBsb29rdXAgbW9kZWwuXG4gICAgICogVGhpcyBtZXRob2QgaXMgVU5TQUZFIGJlY2F1c2UgcHJvcGVydHkgaXMgbm90IHR5cGUtY2hlY2tlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UHJvcGVydHl9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgZWRpdG9yLlxuICAgICAqIEBwYXJhbSB7VHlwZURlc2NyaXB0b3I8RmllbGRNb2RlbD59IHR5cGUgLSBUaGUgdHlwZSBkZXNjcmlwdG9yIGZvciB0aGUgbG9va3VwIG1vZGVsLlxuICAgICAqIEBwYXJhbSB7TG9va3VwVmFsdWVQcm9wZXJ0eX0gbG9va3VwT3B0aW9uc1ZhbHVlUHJvcGVydHkgLSBUaGUgdmFsdWUgcHJvcGVydHkgdXNlZCBhcyB2YWx1ZSBpbiB0aGUgbG9va3VwIG9wdGlvbnMuXG4gICAgICogQHR5cGVwYXJhbSBQcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIEVkaXRvck1vZGVsLlxuICAgICAqIEB0eXBlcGFyYW0gTG9va3VwTW9kZWwgLSBUaGUgZmllbGQgbW9kZWwgdHlwZSwgZGVmYXVsdHMgdG8gdGhlIG5vbi1udWxsYWJsZSB0eXBlIG9mIHRoZSBlZGl0b3IncyBwcm9wZXJ0eS5cbiAgICAgKiBAdHlwZXBhcmFtIExvb2t1cFZhbHVlUHJvcGVydHkgLSBUaGUgcHJvcGVydHkgb2YgbG9va3VwIG1vZGVsIHR5cGUuXG4gICAgICogQHR5cGVwYXJhbSBGaWVsZFZhbHVlIC0gVGhlIHZhbHVlIHR5cGUgb2YgZmllbGQgb24gZWRpdG9yLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0ZpZWxkTG9va3VwRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgRWRpdG9yTW9kZWwsIHVuZGVmaW5lZCwgRmllbGRWYWx1ZT59IC0gVGhlIGZpZWxkIGxvb2t1cCBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGaWVsZExvb2t1cFdpdGhPcHRpb25zVmFsdWVQcm9wZXJ0eVVuc2FmZTxMb29rdXBNb2RlbCwgRmllbGRWYWx1ZSA9IE51bGxhYmxlPElkVHlwZT4+KFxuICAgICAgICBwcm9wZXJ0eTogc3RyaW5nLFxuICAgICAgICB0eXBlOiBUeXBlRGVzY3JpcHRvcjxMb29rdXBNb2RlbD4sXG4gICAgICAgIGxvb2t1cE9wdGlvbnNWYWx1ZVByb3BlcnR5OiBzdHJpbmdcbiAgICApIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRMb29rdXBEZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBFZGl0b3JNb2RlbCwgdW5kZWZpbmVkLCBGaWVsZFZhbHVlPih0aGlzLCBwcm9wZXJ0eSwge1xuICAgICAgICAgICAgdHlwZTogdHlwZT8uY2xhc3NUeXBlLFxuICAgICAgICAgICAgb3B0aW9uc1ZhbHVlUHJvcGVydHk6IGxvb2t1cE9wdGlvbnNWYWx1ZVByb3BlcnR5XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZEZpZWxkRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgRmllbGRWYWx1ZT4oZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGZpZWxkIGxvb2t1cCB3aXRoIGEgZGF0YSBwcm92aWRlciBvciBzZXJ2aWNlIHRvIHRoZSBlZGl0b3IgbW9kZWwuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1Byb3BlcnR5fSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIGVkaXRvci5cbiAgICAgKiBAcGFyYW0ge0ZpZWxkTG9va3VwUHJvdmlkZXJUeXBlPExvb2t1cE1vZGVsLCBTZXJ2aWNlPn0gcHJvdmlkZXIgLSBUaGUgZmllbGQgbG9va3VwIGRhdGEgcHJvdmlkZXIgb3Igc2VydmljZS5cbiAgICAgKiBAcGFyYW0ge1R5cGVEZXNjcmlwdG9yPExvb2t1cE1vZGVsPn0gW3R5cGVdIC0gVGhlIHR5cGUgb2YgbG9va3VwIC0gaWYgZGF0YSBwcm92aWRlciBpcyBwYXNzZWQgYXMgcHJldmlvdXMgcGFyYW1ldGVyLCB0eXBlIGNhbiBiZSBvbWl0dGVkLiBJZiBzZXJ2aWNlIGlzIHByb3ZpZGVyLCB0eXBlIHBhcmFtZXRlciBpcyBwcm9wb3NlZCBpbiBmYXZvdXIgb2YgY29ycmVjdCB0eXBpbmcuXG4gICAgICogQHR5cGVwYXJhbSBQcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIEVkaXRvck1vZGVsLlxuICAgICAqIEB0eXBlcGFyYW0gU2VydmljZSAtIFRoZSBsb29rdXAgc2VydmljZSB0eXBlLlxuICAgICAqIEB0eXBlcGFyYW0gTG9va3VwTW9kZWwgLSBUaGUgZmllbGQgbW9kZWwgdHlwZSwgZGVmYXVsdHMgdG8gdGhlIG5vbi1udWxsYWJsZSB0eXBlIG9mIHRoZSBlZGl0b3IncyBwcm9wZXJ0eS5cbiAgICAgKiBAdHlwZXBhcmFtIEZpZWxkVmFsdWUgLSBUaGUgZmllbGQgdmFsdWUgdHlwZSwgZGVmYXVsdHMgdG8gdGhlIGVkaXRvcidzIHByb3BlcnR5IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7RmllbGRMb29rdXBEZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBFZGl0b3JNb2RlbCwgU2VydmljZSwgRmllbGRWYWx1ZT59IENyZWF0ZWQgZmllbGQgbG9va3VwIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpZWxkTG9va3VwV2l0aFByb3ZpZGVyPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgRWRpdG9yTW9kZWwsIFNlcnZpY2UsIExvb2t1cE1vZGVsID0gTm9uTnVsbGFibGU8RWRpdG9yTW9kZWxbUHJvcGVydHldPiwgRmllbGRWYWx1ZSA9IEVkaXRvck1vZGVsW1Byb3BlcnR5XT4oXG4gICAgICAgIHByb3BlcnR5OiBQcm9wZXJ0eSxcbiAgICAgICAgcHJvdmlkZXI6IEZpZWxkTG9va3VwUHJvdmlkZXJUeXBlPExvb2t1cE1vZGVsLCBTZXJ2aWNlPixcbiAgICAgICAgdHlwZT86IFR5cGVEZXNjcmlwdG9yPExvb2t1cE1vZGVsPlxuICAgICkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRGaWVsZExvb2t1cFdpdGhQcm92aWRlclVuc2FmZTxMb29rdXBNb2RlbCwgU2VydmljZSwgRmllbGRWYWx1ZT4ocHJvcGVydHkgYXMgc3RyaW5nLCBwcm92aWRlciwgdHlwZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogW1VOU0FGRV0gQWRkcyBhIGZpZWxkIGxvb2t1cCB3aXRoIGEgZGF0YSBwcm92aWRlciBvciBzZXJ2aWNlIHRvIHRoZSBlZGl0b3IgbW9kZWwuXG4gICAgICogVGhpcyBtZXRob2QgaXMgVU5TQUZFIGJlY2F1c2UgcHJvcGVydHkgaXMgbm90IHR5cGUtY2hlY2tlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIGVkaXRvci5cbiAgICAgKiBAcGFyYW0ge0ZpZWxkTG9va3VwUHJvdmlkZXJUeXBlPExvb2t1cE1vZGVsLCBTZXJ2aWNlPn0gcHJvdmlkZXIgLSBUaGUgbG9va3VwIHByb3ZpZGVyIG9yIHNlcnZpY2UgZm9yIHRoZSBmaWVsZCBsb29rdXAuXG4gICAgICogQHBhcmFtIHtUeXBlRGVzY3JpcHRvcjxMb29rdXBNb2RlbD4/fSB0eXBlIC0gT3B0aW9uYWwgdHlwZSBkZXNjcmlwdG9yIGZvciB0aGUgZmllbGQgbG9va3VwLlxuICAgICAqIEB0eXBlcGFyYW0gTG9va3VwTW9kZWwgLSBUaGUgZmllbGQgbG9va3VwIG1vZGVsIHR5cGUuXG4gICAgICogQHR5cGVwYXJhbSBTZXJ2aWNlIC0gVGhlIGxvb2t1cCBzZXJ2aWNlIHR5cGUuXG4gICAgICogQHR5cGVwYXJhbSBGaWVsZFZhbHVlIC0gVGhlIHZhbHVlIHR5cGUgb2YgZmllbGQgb24gZWRpdG9yLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0ZpZWxkTG9va3VwRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgRWRpdG9yTW9kZWwsIFNlcnZpY2UsIEZpZWxkVmFsdWU+fSAtIFRoZSBmaWVsZCBsb29rdXAgZGVzY3JpcHRvciBhZGRlZCB0byB0aGUgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpZWxkTG9va3VwV2l0aFByb3ZpZGVyVW5zYWZlPExvb2t1cE1vZGVsLCBTZXJ2aWNlLCBGaWVsZFZhbHVlID0gTG9va3VwTW9kZWw+KFxuICAgICAgICBwcm9wZXJ0eTogc3RyaW5nLFxuICAgICAgICBwcm92aWRlcjogRmllbGRMb29rdXBQcm92aWRlclR5cGU8TG9va3VwTW9kZWwsIFNlcnZpY2U+LFxuICAgICAgICB0eXBlPzogVHlwZURlc2NyaXB0b3I8TG9va3VwTW9kZWw+XG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGNmZyA9IGZpZWxkTG9va3VwR2V0UHJvdmlkZXJDZmdPYmoocHJvdmlkZXIpO1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZExvb2t1cERlc2NyaXB0b3I8TG9va3VwTW9kZWwsIEVkaXRvck1vZGVsLCBTZXJ2aWNlLCBGaWVsZFZhbHVlPih0aGlzLCBwcm9wZXJ0eSwge1xuICAgICAgICAgICAgdHlwZTogdHlwZT8uY2xhc3NUeXBlLFxuICAgICAgICAgICAgLi4uY2ZnXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZEZpZWxkRGVzY3JpcHRvcihmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgZmllbGQgbG9va3VwIHdpdGggZGF0YSBwcm92aWRlciBvciBzZXJ2aWNlIGFuZCBvcHRpb25zIHZhbHVlIHByb3BlcnR5IGZvciBsb29rdXAgbW9kZWwuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1Byb3BlcnR5fSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIGVkaXRvci5cbiAgICAgKiBAcGFyYW0ge0ZpZWxkTG9va3VwUHJvdmlkZXJUeXBlPEZpZWxkTW9kZWwsIFNlcnZpY2U+fSBwcm92aWRlciAtIFRoZSBsb29rdXAgcHJvdmlkZXIuXG4gICAgICogQHBhcmFtIHtUeXBlRGVzY3JpcHRvcjxGaWVsZE1vZGVsPn0gdHlwZSAtIFRoZSB0eXBlIGRlc2NyaXB0b3IgZm9yIHRoZSBsb29rdXAgbW9kZWwuXG4gICAgICogQHBhcmFtIHtMb29rdXBWYWx1ZVByb3BlcnR5fSBsb29rdXBPcHRpb25zVmFsdWVQcm9wZXJ0eSAtIFRoZSB2YWx1ZSBwcm9wZXJ0eSB1c2VkIGFzIHZhbHVlIGluIHRoZSBsb29rdXAgb3B0aW9ucy5cbiAgICAgKiBAdHlwZXBhcmFtIFByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgRWRpdG9yTW9kZWwuXG4gICAgICogQHR5cGVwYXJhbSBTZXJ2aWNlIC0gVGhlIGxvb2t1cCBzZXJ2aWNlIHR5cGUuXG4gICAgICogQHR5cGVwYXJhbSBMb29rdXBNb2RlbCAtIFRoZSBmaWVsZCBtb2RlbCB0eXBlLCBkZWZhdWx0cyB0byB0aGUgbm9uLW51bGxhYmxlIHR5cGUgb2YgdGhlIGVkaXRvcidzIHByb3BlcnR5LlxuICAgICAqIEB0eXBlcGFyYW0gTG9va3VwVmFsdWVQcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBvZiBsb29rdXAgbW9kZWwgdHlwZS5cbiAgICAgKiBAdHlwZXBhcmFtIEZpZWxkVmFsdWUgLSBUaGUgdmFsdWUgdHlwZSBvZiBmaWVsZCBvbiBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7RmllbGRMb29rdXBEZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBFZGl0b3JNb2RlbCwgU2VydmljZSwgRmllbGRWYWx1ZT59IC0gVGhlIGZpZWxkIGxvb2t1cCBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIGFkZEZpZWxkTG9va3VwV2l0aFByb3ZpZGVyQW5kT3B0aW9uc1ZhbHVlUHJvcGVydHk8XG4gICAgICAgIFByb3BlcnR5IGV4dGVuZHMga2V5b2YgRWRpdG9yTW9kZWwsXG4gICAgICAgIFNlcnZpY2UsXG4gICAgICAgIExvb2t1cE1vZGVsLFxuICAgICAgICBMb29rdXBWYWx1ZVByb3BlcnR5IGV4dGVuZHMgS2V5b2ZBbmRPZlR5cGU8TG9va3VwTW9kZWwsIEVkaXRvck1vZGVsW1Byb3BlcnR5XT4sXG4gICAgICAgIEZpZWxkVmFsdWUgPSBFZGl0b3JNb2RlbFtQcm9wZXJ0eV1cbiAgICA+KFxuICAgICAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgICAgIHByb3ZpZGVyOiBGaWVsZExvb2t1cFByb3ZpZGVyVHlwZTxMb29rdXBNb2RlbCwgU2VydmljZT4sXG4gICAgICAgIHR5cGU6IFR5cGVEZXNjcmlwdG9yPExvb2t1cE1vZGVsPixcbiAgICAgICAgbG9va3VwT3B0aW9uc1ZhbHVlUHJvcGVydHk6IExvb2t1cFZhbHVlUHJvcGVydHlcbiAgICApOiBGaWVsZExvb2t1cERlc2NyaXB0b3I8TG9va3VwTW9kZWwsIEVkaXRvck1vZGVsLCBTZXJ2aWNlLCBGaWVsZFZhbHVlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEZpZWxkTG9va3VwV2l0aFByb3ZpZGVyQW5kT3B0aW9uc1ZhbHVlUHJvcGVydHlVbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nLCBwcm92aWRlciwgdHlwZSwgbG9va3VwT3B0aW9uc1ZhbHVlUHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBbVU5TQUZFXSBBZGRzIGEgZmllbGQgbG9va3VwIHdpdGggZGF0YSBwcm92aWRlciBvciBzZXJ2aWNlIGFuZCBvcHRpb25zIHZhbHVlIHByb3BlcnR5IGZvciBsb29rdXAgbW9kZWwuXG4gICAgICogVGhpcyBtZXRob2QgaXMgVU5TQUZFIGJlY2F1c2UgcHJvcGVydHkgaXMgbm90IHR5cGUtY2hlY2tlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIGVkaXRvci5cbiAgICAgKiBAcGFyYW0ge0ZpZWxkTG9va3VwUHJvdmlkZXJUeXBlPEZpZWxkTW9kZWwsIFNlcnZpY2U+fSBwcm92aWRlciAtIFRoZSBsb29rdXAgcHJvdmlkZXIuXG4gICAgICogQHBhcmFtIHtUeXBlRGVzY3JpcHRvcjxGaWVsZE1vZGVsPn0gdHlwZSAtIFRoZSB0eXBlIGRlc2NyaXB0b3IgZm9yIHRoZSBsb29rdXAgbW9kZWwuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxvb2t1cE9wdGlvbnNWYWx1ZVByb3BlcnR5IC0gVGhlIHZhbHVlIHByb3BlcnR5IHVzZWQgaW4gdGhlIGxvb2t1cCBvcHRpb25zLlxuICAgICAqIEB0eXBlcGFyYW0gU2VydmljZSAtIFRoZSBzZXJ2aWNlIHR5cGUuXG4gICAgICogQHR5cGVwYXJhbSBMb29rdXBNb2RlbCAtIFRoZSBmaWVsZCBtb2RlbCB0eXBlLCBkZWZhdWx0cyB0byB0aGUgbm9uLW51bGxhYmxlIHR5cGUgb2YgdGhlIGVkaXRvcidzIHByb3BlcnR5LlxuICAgICAqIEB0eXBlcGFyYW0gRmllbGRWYWx1ZSAtIFRoZSB2YWx1ZSB0eXBlIG9mIGZpZWxkIG9uIGVkaXRvci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtGaWVsZExvb2t1cERlc2NyaXB0b3I8TG9va3VwTW9kZWwsIEVkaXRvck1vZGVsLCBTZXJ2aWNlLCBGaWVsZFZhbHVlPn0gLSBUaGUgZmllbGQgbG9va3VwIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgYWRkRmllbGRMb29rdXBXaXRoUHJvdmlkZXJBbmRPcHRpb25zVmFsdWVQcm9wZXJ0eVVuc2FmZTxTZXJ2aWNlLCBMb29rdXBNb2RlbCwgRmllbGRWYWx1ZSA9IExvb2t1cE1vZGVsPihcbiAgICAgICAgcHJvcGVydHk6IHN0cmluZyxcbiAgICAgICAgcHJvdmlkZXI6IEZpZWxkTG9va3VwUHJvdmlkZXJUeXBlPExvb2t1cE1vZGVsLCBTZXJ2aWNlPixcbiAgICAgICAgdHlwZTogVHlwZURlc2NyaXB0b3I8TG9va3VwTW9kZWw+LFxuICAgICAgICBsb29rdXBPcHRpb25zVmFsdWVQcm9wZXJ0eTogc3RyaW5nXG4gICAgKTogRmllbGRMb29rdXBEZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBFZGl0b3JNb2RlbCwgU2VydmljZSwgRmllbGRWYWx1ZT4ge1xuICAgICAgICBjb25zdCBjZmcgPSBmaWVsZExvb2t1cEdldFByb3ZpZGVyQ2ZnT2JqKHByb3ZpZGVyKTtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRMb29rdXBEZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBFZGl0b3JNb2RlbCwgU2VydmljZSwgRmllbGRWYWx1ZT4odGhpcywgcHJvcGVydHksIHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGU/LmNsYXNzVHlwZSxcbiAgICAgICAgICAgIG9wdGlvbnNWYWx1ZVByb3BlcnR5OiBsb29rdXBPcHRpb25zVmFsdWVQcm9wZXJ0eSxcbiAgICAgICAgICAgIC4uLmNmZ1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZERlc2NyaXB0b3IoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkTG9va3VwRW51bTxQcm9wZXJ0eSBleHRlbmRzIGtleW9mIEVkaXRvck1vZGVsLCBFbnVtIGV4dGVuZHMgTm9uTnVsbGFibGU8RWRpdG9yTW9kZWxbUHJvcGVydHldPj4oXG4gICAgICAgIHByb3BlcnR5OiBrZXlvZiBFZGl0b3JNb2RlbCxcbiAgICAgICAgZW51bURlc2M6IEVudW1EZXNjcmlwdG9yPEVudW0+LFxuICAgICAgICBvcHRpb25zPzogQXJyYXk8RW51bT5cbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRmllbGRMb29rdXBFbnVtVW5zYWZlPEVudW0+KHByb3BlcnR5IGFzIHN0cmluZywgZW51bURlc2MsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgZW51bSBsb29rdXAgZmllbGQuXG4gICAgICogQHBhcmFtIHByb3BlcnR5IE1vZGVsJ3MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gZW51bURlc2MgVHlwZSBvZiBlbnVtIG9yIGVudW0gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBQcm92aWRlcyBzdWJzZXQgb2YgZW51bSdzIGF2YWlsYWJsZSBjb25zdGFudHMuXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpZWxkTG9va3VwRW51bVVuc2FmZTxFbnVtID0gRW51bUNvbnN0YW50VHlwZT4ocHJvcGVydHk6IHN0cmluZywgZW51bURlc2M6IEVudW1EZXNjcmlwdG9yPEVudW0+LCBvcHRpb25zPzogQXJyYXk8RW51bT4pIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRMb29rdXBFbnVtRGVzY3JpcHRvcjxFbnVtLCBFZGl0b3JNb2RlbD4odGhpcywgcHJvcGVydHksIGVudW1EZXNjLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZERlc2NyaXB0b3IoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyB0YWJsZS9kZXRhaWxzL2FkZC9lZGl0IGZpZWxkIGZvciBvbmUtdG8tbWFueSAoMTpuKSByZWxhdGlvbnMuXG4gICAgICogQHBhcmFtIHByb3BlcnR5IE1vZGVsJ3MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdGFibGV2aWV3RGVzY3JpcHRvciBUYWJsZXZpZXcgZGVzY3JpcHRvciBmb3IgcmVsYXRlZCBtb2RlbC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmllbGRNYW55RWRpdG9yPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgRWRpdG9yTW9kZWwsIEZpZWxkTW9kZWwgPSBBcnJheUl0ZW1UeXBlPEVkaXRvck1vZGVsW1Byb3BlcnR5XT4sIEZpZWxkVmFsdWUgPSBFZGl0b3JNb2RlbFtQcm9wZXJ0eV0+KFxuICAgICAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgICAgIHRhYmxldmlld0Rlc2NyaXB0b3I6IFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PEZpZWxkTW9kZWw+XG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEZpZWxkTWFueUVkaXRvclVuc2FmZTxGaWVsZE1vZGVsLCBGaWVsZFZhbHVlPihwcm9wZXJ0eSBhcyBzdHJpbmcsIHRhYmxldmlld0Rlc2NyaXB0b3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgdGFibGUvZGV0YWlscy9hZGQvZWRpdCBmaWVsZCBmb3Igb25lLXRvLW1hbnkgKDE6bikgcmVsYXRpb25zIChVTlNBRkUpLlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBNb2RlbCdzIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHRhYmxldmlld0Rlc2NyaXB0b3IgVGFibGV2aWV3IGRlc2NyaXB0b3IgZm9yIHJlbGF0ZWQgbW9kZWwuXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpZWxkTWFueUVkaXRvclVuc2FmZTxGaWVsZE1vZGVsLCBGaWVsZFZhbHVlID0gRmllbGRNb2RlbFtdPihwcm9wZXJ0eTogc3RyaW5nLCB0YWJsZXZpZXdEZXNjcmlwdG9yOiBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxGaWVsZE1vZGVsPikge1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yPEZpZWxkTW9kZWwsIEVkaXRvck1vZGVsLCBGaWVsZFZhbHVlPih0aGlzLCBwcm9wZXJ0eSwgdGFibGV2aWV3RGVzY3JpcHRvcik7XG4gICAgICAgIHRoaXMuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgdGFibGVzIGZvciBtYW55LXRvLW1hbnkgKG06bikgcmVsYXRpb25zLlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBNb2RlbCdzIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIG1haW5UYWJsZURlc2NyaXB0b3IgTWFpbiB0YWJsZSBkZXNjcmlwdG9yIGZvciBkaXNwbGF5aW5nIGl0ZW1zIGFkZGVkIHRvIG1haW4gbW9kZWwncyBwcm9wZXJ0eS5cbiAgICAgKiBAcGFyYW0gbG9va3VwVGFibGVEZXNjcmlwdG9yIExvb2t1cCB0YWJsZSBkZXNjcmlwdG9yIGZvciBkaXNwbGF5aW5nIGl0ZW1zIHRvIGJlIGFkZGVkIHRvIG1haW4gbW9kZWwncyBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmllbGRNYW55VG9NYW55RWRpdG9yPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgRWRpdG9yTW9kZWwsIEZpZWxkTW9kZWwgPSBBcnJheUl0ZW1UeXBlPEVkaXRvck1vZGVsW1Byb3BlcnR5XT4sIEZpZWxkVmFsdWUgPSBFZGl0b3JNb2RlbFtQcm9wZXJ0eV0+KFxuICAgICAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgICAgIG1haW5UYWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvckluc3Q8RmllbGRNb2RlbD4sXG4gICAgICAgIGxvb2t1cFRhYmxlRGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9ySW5zdDxGaWVsZE1vZGVsPlxuICAgICkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRGaWVsZE1hbnlUb01hbnlFZGl0b3JVbnNhZmU8RmllbGRNb2RlbCwgRmllbGRWYWx1ZT4ocHJvcGVydHkgYXMgc3RyaW5nLCBtYWluVGFibGVEZXNjcmlwdG9yLCBsb29rdXBUYWJsZURlc2NyaXB0b3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgdGFibGVzIGZvciBtYW55LXRvLW1hbnkgKG06bikgcmVsYXRpb25zIChVTlNBRkUpLlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBNb2RlbCdzIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIG1haW5UYWJsZURlc2NyaXB0b3IgTWFpbiB0YWJsZSBkZXNjcmlwdG9yIGZvciBkaXNwbGF5aW5nIGl0ZW1zIGFkZGVkIHRvIG1haW4gbW9kZWwncyBwcm9wZXJ0eS5cbiAgICAgKiBAcGFyYW0gbG9va3VwVGFibGVEZXNjcmlwdG9yIExvb2t1cCB0YWJsZSBkZXNjcmlwdG9yIGZvciBkaXNwbGF5aW5nIGl0ZW1zIHRvIGJlIGFkZGVkIHRvIG1haW4gbW9kZWwncyBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmllbGRNYW55VG9NYW55RWRpdG9yVW5zYWZlPEZpZWxkTW9kZWwsIEZpZWxkVmFsdWUgPSBGaWVsZE1vZGVsW10+KFxuICAgICAgICBwcm9wZXJ0eTogc3RyaW5nLFxuICAgICAgICBtYWluVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3JJbnN0PEZpZWxkTW9kZWw+LFxuICAgICAgICBsb29rdXBUYWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvckluc3Q8RmllbGRNb2RlbD5cbiAgICApIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRNYW55VG9NYW55RWRpdG9yRGVzY3JpcHRvcjxGaWVsZE1vZGVsLCBFZGl0b3JNb2RlbCwgdW5kZWZpbmVkLCBGaWVsZFZhbHVlPih0aGlzLCBwcm9wZXJ0eSwgbWFpblRhYmxlRGVzY3JpcHRvciwgbG9va3VwVGFibGVEZXNjcmlwdG9yKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZERlc2NyaXB0b3IoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkTWFueVRvTWFueUVkaXRvcldpdGhQcm92aWRlcjxcbiAgICAgICAgUHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBFZGl0b3JNb2RlbCxcbiAgICAgICAgU2VydmljZVR5cGUsXG4gICAgICAgIEZpZWxkTW9kZWwgPSBBcnJheUl0ZW1UeXBlPEVkaXRvck1vZGVsW1Byb3BlcnR5XT4sXG4gICAgICAgIEZpZWxkVmFsdWUgPSBFZGl0b3JNb2RlbFtQcm9wZXJ0eV1cbiAgICA+KFxuICAgICAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgICAgIG1haW5UYWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvckluc3Q8RmllbGRNb2RlbD4sXG4gICAgICAgIGxvb2t1cFRhYmxlRGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9ySW5zdDxGaWVsZE1vZGVsPixcbiAgICAgICAgbG9va3VwRGF0YVByb3ZpZGVyOiBJVGFibGVEYXRhUHJvdmlkZXI8RmllbGRNb2RlbCwgU2VydmljZVR5cGU+XG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEZpZWxkTWFueVRvTWFueUVkaXRvcldpdGhQcm92aWRlclVuc2FmZTxGaWVsZE1vZGVsLCBTZXJ2aWNlVHlwZSwgRmllbGRWYWx1ZT4oXG4gICAgICAgICAgICBwcm9wZXJ0eSBhcyBzdHJpbmcsXG4gICAgICAgICAgICBtYWluVGFibGVEZXNjcmlwdG9yLFxuICAgICAgICAgICAgbG9va3VwVGFibGVEZXNjcmlwdG9yLFxuICAgICAgICAgICAgbG9va3VwRGF0YVByb3ZpZGVyXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkTWFueVRvTWFueUVkaXRvcldpdGhQcm92aWRlclVuc2FmZTxGaWVsZE1vZGVsLCBTZXJ2aWNlVHlwZSwgRmllbGRWYWx1ZSA9IEZpZWxkTW9kZWxbXT4oXG4gICAgICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgICAgIG1haW5UYWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvckluc3Q8RmllbGRNb2RlbD4sXG4gICAgICAgIGxvb2t1cFRhYmxlRGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9ySW5zdDxGaWVsZE1vZGVsPixcbiAgICAgICAgbG9va3VwRGF0YVByb3ZpZGVyOiBJVGFibGVEYXRhUHJvdmlkZXI8RmllbGRNb2RlbCwgU2VydmljZVR5cGU+XG4gICAgKTogRmllbGRNYW55VG9NYW55RWRpdG9yRGVzY3JpcHRvcjxGaWVsZE1vZGVsLCBFZGl0b3JNb2RlbCwgU2VydmljZVR5cGUsIEZpZWxkVmFsdWU+IHtcbiAgICAgICAgY29uc3QgY2ZnID0gZmllbGRNYW55VG9NYW55R2V0UHJvdmlkZXJDZmdPYmoobG9va3VwRGF0YVByb3ZpZGVyKTtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRNYW55VG9NYW55RWRpdG9yRGVzY3JpcHRvcjxGaWVsZE1vZGVsLCBFZGl0b3JNb2RlbCwgU2VydmljZVR5cGUsIEZpZWxkVmFsdWU+KHRoaXMsIHByb3BlcnR5LCBtYWluVGFibGVEZXNjcmlwdG9yLCBsb29rdXBUYWJsZURlc2NyaXB0b3IsIHtcbiAgICAgICAgICAgIC4uLmNmZ1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZERlc2NyaXB0b3IoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgZmllbGQgb24gZWRpdG9yLlxuICAgICAqIEBwYXJhbSBkaXNhYmxlZFxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRGlzYWJsZWQoZGlzYWJsZWQgPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgZ3JvdXAgdmFsaWRhdG9yIHRvIGVkaXRvci5cbiAgICAgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSB2YWxpZGF0aW9uLlxuICAgICAqIEBwYXJhbSB2YWxpZGF0b3IgRmllbGQgdmFsaWRhdG9yIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSBtZXNzYWdlIEZpZWxkIHZhbGlkYXRpb24gbWVzc2FnZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkVmFsaWRhdGlvbihuYW1lOiBzdHJpbmcsIHZhbGlkYXRvcj86IEZpZWxkVmFsaWRhdG9yLCBtZXNzYWdlPzogRmllbGRWYWxpZGF0aW9uTWVzc2FnZSkge1xuICAgICAgICBpZiAodGhpcy5fY3VycmVudEdyb3VwKSB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50R3JvdXAud2l0aFZhbGlkYXRpb24obmFtZSwgdmFsaWRhdG9yLCBtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjb3B5IG9mIGVkaXRvciBkZXNjcmlwdG9yIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29weSgpOiBFZGl0b3JEZXNjcmlwdG9ySW5zdDxFZGl0b3JNb2RlbD4ge1xuICAgICAgICBjb25zdCBlZGl0b3IgPSBuZXcgRWRpdG9yRGVzY3JpcHRvckluc3Q8RWRpdG9yTW9kZWw+KHRoaXMubW9kZWwuY29weSgpLCB0aGlzLnRhYmxldmlld0VkaXRvclR5cGUpO1xuICAgICAgICBmb3IgKGNvbnN0IHRhYkdyb3VwIG9mIHRoaXMuX3RhYnMpIHtcbiAgICAgICAgICAgIGVkaXRvci5jcmVhdGVUYWJHcm91cERlc2NyaXB0b3IodGFiR3JvdXAuY29weSgpKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHRhYkdyb3VwIG9mIGVkaXRvci5fdGFicykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZEdyb3VwIG9mIHRhYkdyb3VwLmZpZWxkcykge1xuICAgICAgICAgICAgICAgIGVkaXRvci5fZmllbGRzLnB1c2goLi4uZmllbGRHcm91cC5maWVsZHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWRpdG9yLl9ncm91cHMucHVzaCguLi50YWJHcm91cC5maWVsZHMpO1xuICAgICAgICB9XG4gICAgICAgIGVkaXRvci5fY3VycmVudFRhYkdyb3VwID0gZWRpdG9yLl90YWJzW2VkaXRvci5fdGFicy5sZW5ndGggLSAxXTtcbiAgICAgICAgZWRpdG9yLl9jdXJyZW50R3JvdXAgPSBlZGl0b3IuX2N1cnJlbnRUYWJHcm91cC5maWVsZHNbZWRpdG9yLl9jdXJyZW50VGFiR3JvdXAuZmllbGRzLmxlbmd0aCAtIDFdO1xuICAgICAgICBlZGl0b3IuX2Rpc2FibGVkID0gdGhpcy5fZGlzYWJsZWQ7XG4gICAgICAgIHJldHVybiBlZGl0b3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlZCBncm91cCBmcm9tIGZpZWxkIGdyb3VwIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIGZpZWxkR3JvdXAgRmllbGQgZ3JvdXAgZGVzY3JpcHRvci5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlRmllbGRHcm91cERlc2NyaXB0b3IoZmllbGRHcm91cDogRmllbGRHcm91cERlc2NyaXB0b3I8RWRpdG9yTW9kZWw+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuY3JlYXRlRGVmYXVsdFRhYkdyb3VwKCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRHcm91cCA9IGZpZWxkR3JvdXA7XG4gICAgICAgIHRoaXMuX2dyb3Vwcy5wdXNoKGZpZWxkR3JvdXApO1xuICAgICAgICB0aGlzLl9jdXJyZW50VGFiR3JvdXA/LmFkZEZpZWxkKGZpZWxkR3JvdXApO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIHRhYiBncm91cCBmcm9tIHRhYiBncm91cCBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSB0YWJHcm91cCBUYWIgZ3JvdXAgZGVzY3JpcHRvci5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY3JlYXRlVGFiR3JvdXBEZXNjcmlwdG9yKHRhYkdyb3VwOiBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFRhYkdyb3VwID0gdGFiR3JvdXA7XG4gICAgICAgIHRoaXMuX3RhYnMucHVzaCh0YWJHcm91cCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgZGVmYXVsdCBmaWVsZCBncm91cC5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZURlZmF1bHRHcm91cCgpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVEZWZhdWx0VGFiR3JvdXAoKTtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRUYWJHcm91cD8uZmllbGRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVGaWVsZEdyb3VwKEVkaXRvckRlc2NyaXB0b3JJbnN0LmRlZmF1bHRHcm91cE5hbWUsIG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBkZWZhdWx0IHRhYiBncm91cC5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZURlZmF1bHRUYWJHcm91cCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RhYnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVRhYkdyb3VwKEVkaXRvckRlc2NyaXB0b3JJbnN0LmRlZmF1bHRHcm91cE5hbWUsICdnZW5lcmFsLmdlbmVyYWwnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1vZGlmaWVzIHNlbGVjdGVkIGZpZWxkIGJ5IGZpZWxkIHByb3BlcnR5LiBGb3IgZW51bXMgdXNlIHt3aXRoRmllbGRNb2RpZmllZEVudW19IGluc3RlYWQuXG4gICAgICogQHBhcmFtIHByb3BlcnR5IE1vZGVsJ3MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gZmllbGRUeXBlIG5ldyBmaWVsZCB0eXBlIGZvciBzZWxlY3RlZCBmaWVsZFxuICAgICAqIEBwYXJhbSBhcmdzIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmb3IgZmllbGRcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEZpZWxkTW9kaWZpZWRUeXBlKHByb3BlcnR5OiBrZXlvZiBFZGl0b3JNb2RlbCwgZmllbGRUeXBlOiBGaWVsZElucHV0VHlwZUVudW0sIC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhGaWVsZE1vZGlmaWVkVHlwZVVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIGZpZWxkVHlwZSwgLi4uYXJncyk7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGaWVsZE1vZGlmaWVkVHlwZVVuc2FmZShwcm9wZXJ0eTogc3RyaW5nLCBmaWVsZFR5cGU6IEZpZWxkSW5wdXRUeXBlRW51bSwgLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICAgICAgaWYgKCF0aGlzLm1vZGVsLnR5cGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgd2l0aEZpZWxkTW9kaWZpZWRUeXBlIGNhbm5vdCBiZSBleGVjdXRlZCBmb3IgcHJvcGVydHkgJHtwcm9wZXJ0eX06IE1vZGVsIHR5cGUgaXMgbm90IGRlZmluZWQuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhdHRyaWJ1dGUgPSBnZXRFZGl0b3JDbGFzc0F0dHJpYnV0ZURlZih0aGlzLm1vZGVsLnR5cGUpLmZpbmQoYXR0cmlidXRlID0+IGF0dHJpYnV0ZS5uYW1lID09PSBwcm9wZXJ0eSk7XG4gICAgICAgIGlmIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZS5maWVsZFR5cGUgPSBmaWVsZFR5cGU7XG4gICAgICAgICAgICBFZGl0b3JEZXNjcmlwdG9ySW5zdC51cHNlcnRGaWVsZEZyb21BdHRyaWJ1dGVEZWYoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGUsXG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZHMuZmluZChmaSA9PiBmaS5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpLFxuICAgICAgICAgICAgICAgIC4uLmFyZ3NcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNb2RpZmllcyBzZWxlY3RlZCBmaWVsZCB3aXRoIGVudW0gdHlwZS5cbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgTW9kZWwncyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSBlbnVtTW9kZWwgRW51bSBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSB2YWx1ZXNcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEZpZWxkTW9kaWZpZWRFbnVtPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgRWRpdG9yTW9kZWwsIEVudW0gZXh0ZW5kcyBOb25OdWxsYWJsZTxFZGl0b3JNb2RlbFtQcm9wZXJ0eV0+PihcbiAgICAgICAgcHJvcGVydHk6IFByb3BlcnR5LFxuICAgICAgICBlbnVtTW9kZWw/OiBFbnVtRGVzY3JpcHRvcjxFbnVtPixcbiAgICAgICAgdmFsdWVzPzogQXJyYXk8RW51bT5cbiAgICApOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aEZpZWxkTW9kaWZpZWRFbnVtVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZywgZW51bU1vZGVsLCB2YWx1ZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRmllbGRNb2RpZmllZEVudW1VbnNhZmU8RW51bSA9IGFueT4ocHJvcGVydHk6IHN0cmluZywgZW51bURlc2M/OiBFbnVtRGVzY3JpcHRvcjxFbnVtPiwgdmFsdWVzPzogQXJyYXk8RW51bT4pOiB0aGlzIHtcbiAgICAgICAgaWYgKCF0aGlzLm1vZGVsLnR5cGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgd2l0aEZpZWxkTW9kaWZpZWRFbnVtIGNhbm5vdCBiZSBleGVjdXRlZCBmb3IgcHJvcGVydHkgJHtwcm9wZXJ0eX06IE1vZGVsIHR5cGUgaXMgbm90IGRlZmluZWQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXR0cmlidXRlID0gZ2V0RWRpdG9yQ2xhc3NBdHRyaWJ1dGVEZWYodGhpcy5tb2RlbC50eXBlKS5maW5kKGEgPT4gYS5uYW1lID09PSBwcm9wZXJ0eSk7XG4gICAgICAgIGlmIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZS5maWVsZFR5cGUgPSBGaWVsZElucHV0VHlwZUVudW0uUmFkaW87XG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuZmllbGRzLmZpbmQoZiA9PiBmLnByb3BlcnR5ID09PSBwcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoZmllbGQgJiYgZmllbGQgaW5zdGFuY2VvZiBGaWVsZElucHV0RGVzY3JpcHRvcikge1xuICAgICAgICAgICAgICAgIGZpZWxkLmFzUmFkaW9Gcm9tRW51bShlbnVtRGVzYyA/PyBlbnVtTW9kZWxHZW5lcmljKFR5cGVSZWdpc3RyeS5nZXQoKS5maW5kRW51bShhdHRyaWJ1dGUudHlwZSkgYXMgRW51bVR5cGUpLCB2YWx1ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTW9kaWZpZXMgc2VsZWN0ZWQgZmllbGQgd2l0aCBsb29rdXAgZmllbGQuXG4gICAgICogQHBhcmFtIHByb3BlcnR5IE1vZGVsJ3MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gbG9va3VwUHJvdmlkZXIgcHJvdmlkZXIgdG8gYmUgYWRkZWQgdG8gZmllbGRcbiAgICAgKiBAcGFyYW0gdGl0bGVQcm9wZXJ0eVxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRmllbGRNb2RpZmllZExvb2t1cFdpdGhQcm92aWRlcjxTZXJ2aWNlVHlwZSwgRmllbGRNb2RlbD4oXG4gICAgICAgIHByb3BlcnR5OiBrZXlvZiBFZGl0b3JNb2RlbCxcbiAgICAgICAgbG9va3VwUHJvdmlkZXI6IElMb29rdXBEYXRhUHJvdmlkZXI8RmllbGRNb2RlbCwgU2VydmljZVR5cGU+LFxuICAgICAgICB0aXRsZVByb3BlcnR5Pzoga2V5b2YgRmllbGRNb2RlbFxuICAgICk6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy53aXRoRmllbGRNb2RpZmllZExvb2t1cFdpdGhQcm92aWRlclVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIGxvb2t1cFByb3ZpZGVyLCB0aXRsZVByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGaWVsZE1vZGlmaWVkTG9va3VwV2l0aFByb3ZpZGVyVW5zYWZlPFNlcnZpY2UsIEZpZWxkTW9kZWw+KFxuICAgICAgICBwcm9wZXJ0eTogc3RyaW5nLFxuICAgICAgICBsb29rdXBQcm92aWRlcjogSUxvb2t1cERhdGFQcm92aWRlcjxGaWVsZE1vZGVsLCBTZXJ2aWNlPixcbiAgICAgICAgdGl0bGVQcm9wZXJ0eT86IHN0cmluZ1xuICAgICk6IHRoaXMge1xuICAgICAgICB0aGlzLnJlbW92ZUZpZWxkVW5zYWZlKHByb3BlcnR5KTtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmFkZEZpZWxkTG9va3VwV2l0aFByb3ZpZGVyVW5zYWZlPEZpZWxkTW9kZWwsIFNlcnZpY2U+KHByb3BlcnR5LCBsb29rdXBQcm92aWRlcikuYXNBdXRvY29tcGxldGUoKTtcblxuICAgICAgICBpZiAodGl0bGVQcm9wZXJ0eSkge1xuICAgICAgICAgICAgKGZpZWxkIGFzIEZpZWxkTG9va3VwRGVzY3JpcHRvcjxhbnksIGFueT4pLndpdGhPcHRpb25zTGFiZWxQcm9wZXJ0eSh0aXRsZVByb3BlcnR5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHRha2VzIGNhcmUgb2YgZGlzcGxheWluZyBjb3JyZWN0L2xvY2FsaXplZCBkYXRhIGluIHRoZSBlZGl0b3JcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgcHJvcGVydHkgdGhhdCB0ZWxscyB1cyB3aGVyZSBvbiB0aGUgbW9kZWwgYXJlIGxvY2FsaXphdGlvbnMgYWNjZXNzaWJsZVxuICAgICAqIEBwYXJhbSBtb2RlbCBNb2RlbCBmb3IgbG9jYWxpemF0aW9uc1xuICAgICAqIEBwYXJhbSBsb2NhbGVQcm9wZXJ0eSBwcm9wZXJ0eSBieSB3aGljaCB3ZSBmaW5kIHRoZSBsb2NhbGVcbiAgICAgKi9cbiAgICBwdWJsaWMgbG9jYWxpemVkPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgRWRpdG9yTW9kZWwsIExvY2FsaXphdGlvbk1vZGVsID0gQXJyYXlJdGVtVHlwZTxFZGl0b3JNb2RlbFtQcm9wZXJ0eV0+PihcbiAgICAgICAgcHJvcGVydHk6IFByb3BlcnR5LFxuICAgICAgICBtb2RlbDogTW9kZWxEZXNjcmlwdG9yPExvY2FsaXphdGlvbk1vZGVsPixcbiAgICAgICAgbG9jYWxlUHJvcGVydHk6IGtleW9mIExvY2FsaXphdGlvbk1vZGVsXG4gICAgKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsaXplZFVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIG1vZGVsLCBsb2NhbGVQcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2NhbGl6ZWRVbnNhZmU8TG9jYWxpemF0aW9uVHlwZT4ocHJvcGVydHk6IHN0cmluZywgbW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxMb2NhbGl6YXRpb25UeXBlPiwgbG9jYWxlUHJvcGVydHk6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9sb2NhbGl6YXRpb25Mb2NhbGl6YXRpb25Qcm9wZXJ0eSA9IHByb3BlcnR5IGFzIHN0cmluZztcbiAgICAgICAgdGhpcy5fbG9jYWxpemF0aW9uTW9kZWwgPSBtb2RlbDtcbiAgICAgICAgdGhpcy5fbG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHkgPSBsb2NhbGVQcm9wZXJ0eSBhcyBzdHJpbmc7XG4gICAgICAgIHRoaXMuX2lzTG9jYWxpemVkID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgbmV4dEV2ZW50KHR5cGU6IEZvcm1FdmVudFR5cGVFbnVtLCBjbXBUeXBlOiBUeXBlPGFueT4sIGNtcEluc3RhbmNlOiBhbnksIGRhdGE/OiBGaWVsZEV2ZW50RGF0YTxFZGl0b3JNb2RlbD4pIHtcbiAgICAgICAgdGhpcy5fZXZlbnRzU3ViamVjdC5uZXh0KHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICBjb21wb25lbnRUeXBlOiBjbXBUeXBlLFxuICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2U6IGNtcEluc3RhbmNlLFxuICAgICAgICAgICAgZGF0YTogZGF0YVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29tcGxldGVFdmVudHMoKSB7XG4gICAgICAgIHRoaXMuX2V2ZW50c1N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGV2ZW50cyQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ldmVudHNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBmaWVsZCBiYXNlZCBvbiBhdHRyaWJ1dGUgZGVmaW5pdGlvbiwgdXNlZCBmb3IgYXV0byBtb2RlbFxuICAgICAqIEBwYXJhbSBkZXNjcmlwdG9yIEVkaXRvciBkZXNjcmlwdG9yIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSBhdHRyaWJ1dGUgQXR0cmlidXRlIGRlZmluaXRpb24uXG4gICAgICogQHBhcmFtIGZpZWxkIE9wdGlvbmFsLCBpZiBkZWZpbmVkIHdpbGwgYmUgcmVwbGFjZWQsIG90aGVyd2lzZSBuZXcgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAgICogQHBhcmFtIGFyZ3MgT3B0aW9uYWwgYWRkaXRpb25hbCBhcmd1bWVudHMgbWFwcGVkIHRvIGZpbGVkIHR5cGUuIEFyZ3VtZW50cyBkZXBlbmQgb24gcG9zc2libGUgYXJndW1lbnRzIG9uIGZpZWxkcy5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc3RhdGljIHVwc2VydEZpZWxkRnJvbUF0dHJpYnV0ZURlZjxUPihcbiAgICAgICAgZGVzY3JpcHRvcjogRWRpdG9yRGVzY3JpcHRvckluc3Q8VD4sXG4gICAgICAgIGF0dHJpYnV0ZTogRWRpdG9yQ2xhc3NBdHRyaWJ1dGVEZWYsXG4gICAgICAgIGZpZWxkPzogQUZpZWxkRGVzY3JpcHRvcjxhbnksIFQ+LFxuICAgICAgICAuLi5hcmdzOiBhbnlbXVxuICAgICk6IEFGaWVsZERlc2NyaXB0b3I8YW55LCBUPiB7XG4gICAgICAgIGlmIChmaWVsZCA9PSBudWxsKSB7XG4gICAgICAgICAgICBmaWVsZCA9IGRlc2NyaXB0b3IuYWRkRmllbGRVbnNhZmUoYXR0cmlidXRlLm5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpZWxkIGluc3RhbmNlb2YgRmllbGRJbnB1dERlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUuZW51bVR5cGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmllbGQuYXNSYWRpb0Zyb21FbnVtKGVudW1Nb2RlbEdlbmVyaWMoYXR0cmlidXRlLmVudW1UeXBlKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlQ29sdW1uVHlwZSA9IGdldENvbHVtblR5cGVGcm9tQ2xhc3NBdHRyaWJ1dGVEZWZUeXBlKGF0dHJpYnV0ZS50eXBlKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0YWJsZUNvbHVtbkRpc3BsYXlUeXBlID0gZ2V0Q29sdW1uRGlzcGxheVR5cGVGcm9tQ29sdW1uVHlwZSh0YWJsZUNvbHVtblR5cGUsIGF0dHJpYnV0ZS50eXBlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmllbGQuYXNUeXBlKGF0dHJpYnV0ZS5maWVsZFR5cGUgPz8gZ2V0RmllbGRJbnB1dFR5cGVGcm9tQ29sdW1uVHlwZSh0YWJsZUNvbHVtblR5cGUsIHRhYmxlQ29sdW1uRGlzcGxheVR5cGUpLCAuLi5hcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFZGl0b3JEZXNjcmlwdG9yIGV4dGVuZHMgRWRpdG9yRGVzY3JpcHRvckluc3Q8YW55PiB7XG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihNb2RlbERlc2NyaXB0b3IuY3JlYXRlKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlPEVkaXRvck1vZGVsPihcbiAgICAgICAgaWRQcm9wZXJ0eT86IGtleW9mIEVkaXRvck1vZGVsLFxuICAgICAgICB0aXRsZVByb3BlcnR5Pzoga2V5b2YgRWRpdG9yTW9kZWwsXG4gICAgICAgIGkxOG5CYXNlS2V5Pzogc3RyaW5nIHwgQ2xhc3NUeXBlPHVua25vd24+LFxuICAgICAgICB0YWJsZXZpZXdFZGl0b3JUeXBlID0gVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uTm9uZVxuICAgICk6IEVkaXRvckRlc2NyaXB0b3JJbnN0PEVkaXRvck1vZGVsPiB7XG4gICAgICAgIHJldHVybiBuZXcgRWRpdG9yRGVzY3JpcHRvckluc3Q8RWRpdG9yTW9kZWw+KE1vZGVsRGVzY3JpcHRvci5jcmVhdGU8RWRpdG9yTW9kZWw+KGlkUHJvcGVydHksIHRpdGxlUHJvcGVydHksIGkxOG5CYXNlS2V5KSwgdGFibGV2aWV3RWRpdG9yVHlwZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBmcm9tQ2xhc3M8RWRpdG9yTW9kZWw+KFxuICAgICAgICB0eXBlOiBDbGFzc1R5cGU8RWRpdG9yTW9kZWw+LFxuICAgICAgICBpZFByb3BlcnR5Pzoga2V5b2YgRWRpdG9yTW9kZWwsXG4gICAgICAgIHRpdGxlUHJvcGVydHk/OiBrZXlvZiBFZGl0b3JNb2RlbCxcbiAgICAgICAgaTE4bkJhc2VLZXk/OiBDbGFzc1R5cGU8dW5rbm93bj4gfCBzdHJpbmcsXG4gICAgICAgIHRhYmxldmlld0VkaXRvclR5cGUgPSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5Ob25lXG4gICAgKTogRWRpdG9yRGVzY3JpcHRvckluc3Q8RWRpdG9yTW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBFZGl0b3JEZXNjcmlwdG9ySW5zdDxFZGl0b3JNb2RlbD4oTW9kZWxEZXNjcmlwdG9yLmZyb21DbGFzcyh0eXBlLCBpZFByb3BlcnR5LCB0aXRsZVByb3BlcnR5LCBpMThuQmFzZUtleSksIHRhYmxldmlld0VkaXRvclR5cGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbU1vZGVsPEVkaXRvck1vZGVsPihtb2RlbDogTW9kZWxEZXNjcmlwdG9yPEVkaXRvck1vZGVsPiwgdGFibGV2aWV3RWRpdG9yVHlwZSA9IFRhYmxldmlld0VkaXRvclR5cGVFbnVtLk5vbmUpOiBFZGl0b3JEZXNjcmlwdG9ySW5zdDxFZGl0b3JNb2RlbD4ge1xuICAgICAgICByZXR1cm4gbmV3IEVkaXRvckRlc2NyaXB0b3JJbnN0PEVkaXRvck1vZGVsPihtb2RlbCwgdGFibGV2aWV3RWRpdG9yVHlwZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBlZGl0b3IgZGVzY3JpcHRvciBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIG9wZW5hcGkgbW9kZWwncyBhdHRyaWJ1dGVzIGRlZmluaXRpb24gd2hpY2ggaXMgYXV0b21hdGljYWxseSBleHRyYWN0ZWQuIEFsbCBmaWVsZHMgd2lsbCBiZSBpbmNsdWRlZC5cbiAgICAgKiBAcGFyYW0gdHlwZSBNb2RlbCdzIGNsYXNzLlxuICAgICAqIEBwYXJhbSBpZFByb3BlcnR5IElkIHByb3BlcnR5IHJlcHJlc2VudGluZyBtb2RlbCAob3B0aW9uYWwpLlxuICAgICAqIEBwYXJhbSB0aXRsZVByb3BlcnR5IFRpdGxlIHByb3BlcnR5IHJlcHJlc2VudGluZyBtb2RlbCAob3B0aW9uYWwpLiBJZiBub3QgcHJvdmlkZWQsIGl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBjaG9zZW4uXG4gICAgICogQHBhcmFtIHRhYmxlRWRpdG9yVHlwZSBUeXBlIG9mIGVkaXRvciBpbiB0YWJsZXZpZXcgKGFkZCwgZWRpdCwgdmlldyBvciBub25lKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZyb21DbGFzc1dpdGhBdXRvQXR0cnNEZWY8RWRpdG9yTW9kZWw+KFxuICAgICAgICB0eXBlOiBDbGFzc1R5cGU8RWRpdG9yTW9kZWw+LFxuICAgICAgICBpZFByb3BlcnR5Pzoga2V5b2YgRWRpdG9yTW9kZWwsXG4gICAgICAgIHRpdGxlUHJvcGVydHk/OiBrZXlvZiBFZGl0b3JNb2RlbCxcbiAgICAgICAgdGFibGVFZGl0b3JUeXBlID0gVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uTm9uZVxuICAgICk6IEVkaXRvckRlc2NyaXB0b3JJbnN0PEVkaXRvck1vZGVsPiB7XG4gICAgICAgIHJldHVybiBFZGl0b3JEZXNjcmlwdG9yLmZyb21DbGFzc1dpdGhDdXN0b21BdHRyc0RlZih0eXBlLCBnZXRFZGl0b3JDbGFzc0F0dHJpYnV0ZURlZih0eXBlKSwgaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSwgdGFibGVFZGl0b3JUeXBlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGVkaXRvciBkZXNjcmlwdG9yIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gb3BlbmFwaSBtb2RlbCdzIGF0dHJpYnV0ZXMgZGVmaW5pdGlvbiBwcm92aWRlZCBpbiBwYXJhbWV0ZXJzLiBPbmx5IGZpZWxkcyBmb3IgcHJvdmlkZWQgYXR0cmlidXRlcyB3aWxsIGJlIGluY2x1ZGVkLlxuICAgICAqIEBwYXJhbSB0eXBlIE1vZGVsJ3MgY2xhc3MuXG4gICAgICogQHBhcmFtIGF0dHJpYnV0ZXMgTGlzdCBvZiBhdHRyaWJ1dGUgZGVmaW5pdGlvbnMgZnJvbSB3aGljaCBmaWVsZHMgc2hvdWxkIGJlIGNyZWF0ZWQuXG4gICAgICogQHBhcmFtIGlkUHJvcGVydHkgSWQgcHJvcGVydHkgcmVwcmVzZW50aW5nIG1vZGVsIChvcHRpb25hbCkuXG4gICAgICogQHBhcmFtIHRpdGxlUHJvcGVydHkgVGl0bGUgcHJvcGVydHkgcmVwcmVzZW50aW5nIG1vZGVsIChvcHRpb25hbCkuIElmIG5vdCBwcm92aWRlZCwgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNob3Nlbi5cbiAgICAgKiBAcGFyYW0gdGFibGVFZGl0b3JUeXBlIFR5cGUgb2YgZWRpdG9yIGluIHRhYmxldmlldyAoYWRkLCBlZGl0LCB2aWV3IG9yIG5vbmUpLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUNsYXNzV2l0aEN1c3RvbUF0dHJzRGVmPEVkaXRvck1vZGVsPihcbiAgICAgICAgdHlwZTogQ2xhc3NUeXBlPEVkaXRvck1vZGVsPixcbiAgICAgICAgYXR0cmlidXRlczogRWRpdG9yQ2xhc3NBdHRyaWJ1dGVEZWZbXSxcbiAgICAgICAgaWRQcm9wZXJ0eT86IGtleW9mIEVkaXRvck1vZGVsLFxuICAgICAgICB0aXRsZVByb3BlcnR5Pzoga2V5b2YgRWRpdG9yTW9kZWwsXG4gICAgICAgIHRhYmxlRWRpdG9yVHlwZSA9IFRhYmxldmlld0VkaXRvclR5cGVFbnVtLk5vbmVcbiAgICApOiBFZGl0b3JEZXNjcmlwdG9ySW5zdDxFZGl0b3JNb2RlbD4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gRWRpdG9yRGVzY3JpcHRvci5mcm9tQ2xhc3ModHlwZSwgaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSwgdW5kZWZpbmVkLCB0YWJsZUVkaXRvclR5cGUpO1xuXG4gICAgICAgIGF0dHJpYnV0ZXNcbiAgICAgICAgICAgIC5maWx0ZXIoYXR0ciA9PiAhYXR0ci50eXBlLmluY2x1ZGVzKCdTZXQnKSAmJiAhYXR0ci50eXBlLmluY2x1ZGVzKCdBcnJheScpKVxuICAgICAgICAgICAgLmZvckVhY2goYXR0ciA9PlxuICAgICAgICAgICAgICAgIEVkaXRvckRlc2NyaXB0b3JJbnN0LnVwc2VydEZpZWxkRnJvbUF0dHJpYnV0ZURlZihcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvcixcbiAgICAgICAgICAgICAgICAgICAgYXR0cixcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5maWVsZHMuZmluZChjb2wgPT4gY29sLnByb3BlcnR5ID09PSBhdHRyLm5hbWUpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxufVxuIl19