@mediusinc/mng-commons 0.0.1-rc.4 → 0.2.4

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 (453) hide show
  1. package/README.md +95 -0
  2. package/assets/i18n/en.json +54 -3
  3. package/assets/i18n/sl.json +54 -8
  4. package/assets/images/effect-ondark.png +0 -0
  5. package/assets/images/effect-ondark.svg +38 -0
  6. package/assets/images/effect-ondark@2x.png +0 -0
  7. package/assets/images/effect-onlight.png +0 -0
  8. package/assets/images/effect-onlight.svg +38 -0
  9. package/assets/images/effect-onlight@2x.png +0 -0
  10. package/assets/images/pages/exception-ondark.png +0 -0
  11. package/assets/images/pages/exception-onlight.png +0 -0
  12. package/assets/images/pages/login-ondark.png +0 -0
  13. package/assets/images/pages/login-onlight.png +0 -0
  14. package/esm2020/lib/api/models/builders/query-param.builder.mjs +48 -48
  15. package/esm2020/lib/api/models/filter-match-type.model.mjs +26 -24
  16. package/esm2020/lib/api/models/filter-param.model.mjs +46 -46
  17. package/esm2020/lib/api/models/index.mjs +9 -9
  18. package/esm2020/lib/api/models/mappers.mjs +17 -17
  19. package/esm2020/lib/api/models/query-mode.model.mjs +19 -19
  20. package/esm2020/lib/api/models/query-param.model.mjs +69 -69
  21. package/esm2020/lib/api/models/query-result.model.mjs +45 -45
  22. package/esm2020/lib/api/models/serialization.model.mjs +2 -2
  23. package/esm2020/lib/api/services/crud-api.abstract.service.mjs +72 -0
  24. package/esm2020/lib/api/services/index.mjs +2 -2
  25. package/esm2020/lib/api/utils/index.mjs +3 -3
  26. package/esm2020/lib/api/utils/medius-rest.util.mjs +122 -70
  27. package/esm2020/lib/api/utils/object-serializer.util.mjs +226 -226
  28. package/esm2020/lib/components/action/action.component.mjs +65 -63
  29. package/esm2020/lib/components/action/dialog/action-dialog.component.mjs +148 -157
  30. package/esm2020/lib/components/action/index.mjs +4 -4
  31. package/esm2020/lib/components/action/models/action-confirmation-service.model.mjs +2 -0
  32. package/esm2020/lib/components/action/models/action-execution.model.mjs +58 -0
  33. package/esm2020/lib/components/action/models/index.mjs +3 -0
  34. package/esm2020/lib/components/action/route/action-route.component.mjs +144 -144
  35. package/esm2020/lib/components/form/autocomplete/autocomplete.component.mjs +114 -0
  36. package/esm2020/lib/components/form/dropdown/dropdown.component.mjs +113 -0
  37. package/esm2020/lib/components/form/editor/form-editor.component.mjs +141 -142
  38. package/esm2020/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +19 -58
  39. package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +19 -51
  40. package/esm2020/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +16 -16
  41. package/esm2020/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +26 -26
  42. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +109 -109
  43. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +122 -122
  44. package/esm2020/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +17 -17
  45. package/esm2020/lib/components/form/formly/fields/index.mjs +8 -8
  46. package/esm2020/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +17 -17
  47. package/esm2020/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.mjs +16 -16
  48. package/esm2020/lib/components/form/formly/wrappers/index.mjs +3 -3
  49. package/esm2020/lib/components/form/index.mjs +4 -2
  50. package/esm2020/lib/components/form/models/form-editor.event.mjs +7 -0
  51. package/esm2020/lib/components/form/models/index.mjs +2 -0
  52. package/esm2020/lib/components/layout/breadcrumb.component.mjs +17 -0
  53. package/esm2020/lib/components/layout/footer.component.mjs +17 -0
  54. package/esm2020/lib/components/layout/index.mjs +7 -7
  55. package/esm2020/lib/components/layout/main-layout.component.mjs +54 -0
  56. package/esm2020/lib/components/layout/menu-item.component.mjs +173 -0
  57. package/esm2020/lib/components/layout/menu.component.mjs +20 -0
  58. package/esm2020/lib/components/layout/services/index.mjs +2 -0
  59. package/esm2020/lib/components/layout/services/main-layout.component.service.mjs +190 -0
  60. package/esm2020/lib/components/layout/topbar.component.mjs +59 -0
  61. package/esm2020/lib/components/tableview/index.mjs +6 -4
  62. package/esm2020/lib/components/tableview/models/index.mjs +2 -0
  63. package/esm2020/lib/components/tableview/models/table.event.mjs +16 -0
  64. package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +24 -24
  65. package/esm2020/lib/components/tableview/services/index.mjs +2 -0
  66. package/esm2020/lib/components/tableview/services/tableview.component.service.mjs +17 -0
  67. package/esm2020/lib/components/tableview/table/column-filter/column-filter.component.mjs +74 -0
  68. package/esm2020/lib/components/tableview/table/column-value/column-value.component.mjs +25 -0
  69. package/esm2020/lib/components/tableview/table/table.component.mjs +307 -173
  70. package/esm2020/lib/components/tableview/tableview.component.mjs +82 -83
  71. package/esm2020/lib/config/formly.config.mjs +136 -136
  72. package/esm2020/lib/config/index.mjs +2 -2
  73. package/esm2020/lib/config/models/index.mjs +2 -0
  74. package/esm2020/lib/config/models/mng-config.model.mjs +2 -0
  75. package/esm2020/lib/data-providers/base.data-provider.mjs +24 -0
  76. package/esm2020/lib/data-providers/editor.data-provider.mjs +37 -0
  77. package/esm2020/lib/data-providers/index.mjs +6 -0
  78. package/esm2020/lib/data-providers/lookup.data-provider.mjs +16 -0
  79. package/esm2020/lib/data-providers/table.data-provider.mjs +2 -0
  80. package/esm2020/lib/data-providers/tableview.data-provider.mjs +17 -0
  81. package/esm2020/lib/descriptors/action.descriptor.mjs +332 -0
  82. package/esm2020/lib/descriptors/editor.descriptor.mjs +670 -0
  83. package/esm2020/lib/descriptors/field.validator.mjs +21 -0
  84. package/esm2020/lib/descriptors/index.mjs +8 -0
  85. package/esm2020/lib/descriptors/lookup.descriptor.mjs +2 -0
  86. package/esm2020/lib/descriptors/model.descriptor.mjs +34 -0
  87. package/esm2020/lib/descriptors/table.descriptor.mjs +401 -0
  88. package/esm2020/lib/descriptors/tableview.descriptor.mjs +131 -0
  89. package/esm2020/lib/directives/component.directive.mjs +23 -0
  90. package/esm2020/lib/directives/index.mjs +3 -2
  91. package/esm2020/lib/directives/template.directive.mjs +29 -25
  92. package/esm2020/lib/mng-commons.module.mjs +410 -313
  93. package/esm2020/lib/models/index.mjs +3 -0
  94. package/esm2020/lib/models/router.model.mjs +2 -0
  95. package/esm2020/lib/models/user.model.mjs +2 -0
  96. package/esm2020/lib/pipes/boolean.pipe.mjs +22 -0
  97. package/esm2020/lib/pipes/index.mjs +3 -2
  98. package/esm2020/lib/pipes/property-path.pipe.mjs +36 -36
  99. package/esm2020/lib/services/action.service.mjs +269 -269
  100. package/esm2020/lib/services/commons.service.mjs +354 -0
  101. package/esm2020/lib/services/configuration.service.mjs +78 -77
  102. package/esm2020/lib/services/index.mjs +5 -7
  103. package/esm2020/lib/services/navigation.service.mjs +48 -49
  104. package/esm2020/lib/services/providers/commons-init.provider.mjs +4 -0
  105. package/esm2020/lib/services/providers/config-service.provider.mjs +20 -12
  106. package/esm2020/lib/services/providers/formly-config.provider.mjs +31 -31
  107. package/esm2020/lib/services/providers/index.mjs +4 -3
  108. package/esm2020/lib/services/tokens/browser-storage.token.mjs +6 -0
  109. package/esm2020/lib/services/tokens/index.mjs +3 -0
  110. package/esm2020/lib/services/tokens/module-config.token.mjs +3 -0
  111. package/esm2020/lib/types/index.mjs +3 -0
  112. package/esm2020/lib/types/type.decorator.mjs +7 -0
  113. package/esm2020/lib/types/type.model.mjs +2 -0
  114. package/esm2020/lib/utils/editor-formly.util.mjs +176 -176
  115. package/esm2020/lib/utils/i18n.util.mjs +125 -91
  116. package/esm2020/lib/utils/index.mjs +6 -5
  117. package/esm2020/lib/utils/model.util.mjs +57 -38
  118. package/esm2020/lib/utils/toast.util.mjs +39 -26
  119. package/esm2020/lib/utils/type.util.mjs +39 -39
  120. package/esm2020/mediusinc-mng-commons.mjs +5 -5
  121. package/esm2020/public-api.mjs +36 -33
  122. package/fesm2015/mediusinc-mng-commons.mjs +6093 -5081
  123. package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
  124. package/fesm2020/mediusinc-mng-commons.mjs +6018 -5030
  125. package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
  126. package/lib/api/models/builders/query-param.builder.d.ts +11 -11
  127. package/lib/api/models/filter-match-type.model.d.ts +23 -21
  128. package/lib/api/models/filter-param.model.d.ts +23 -23
  129. package/lib/api/models/index.d.ts +8 -8
  130. package/lib/api/models/mappers.d.ts +6 -6
  131. package/lib/api/models/query-mode.model.d.ts +16 -16
  132. package/lib/api/models/query-param.model.d.ts +31 -31
  133. package/lib/api/models/query-result.model.d.ts +36 -36
  134. package/lib/api/models/serialization.model.d.ts +8 -8
  135. package/lib/api/services/{abstract-crud-api.service.d.ts → crud-api.abstract.service.d.ts} +23 -23
  136. package/lib/api/services/index.d.ts +1 -1
  137. package/lib/api/utils/index.d.ts +2 -2
  138. package/lib/api/utils/medius-rest.util.d.ts +12 -6
  139. package/lib/api/utils/object-serializer.util.d.ts +30 -30
  140. package/lib/components/action/action.component.d.ts +36 -36
  141. package/lib/components/action/dialog/action-dialog.component.d.ts +46 -48
  142. package/lib/components/action/index.d.ts +3 -3
  143. package/lib/{models/interfaces/confirmation-service.model.d.ts → components/action/models/action-confirmation-service.model.d.ts} +6 -6
  144. package/lib/{models/action/action.model.d.ts → components/action/models/action-execution.model.d.ts} +53 -53
  145. package/lib/components/action/models/index.d.ts +2 -0
  146. package/lib/components/action/route/action-route.component.d.ts +32 -32
  147. package/lib/components/form/autocomplete/autocomplete.component.d.ts +36 -0
  148. package/lib/components/form/dropdown/dropdown.component.d.ts +34 -0
  149. package/lib/components/form/editor/form-editor.component.d.ts +39 -39
  150. package/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +11 -21
  151. package/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +11 -19
  152. package/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +6 -6
  153. package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +12 -12
  154. package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +17 -17
  155. package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +36 -36
  156. package/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +6 -6
  157. package/lib/components/form/formly/fields/index.d.ts +7 -7
  158. package/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +8 -8
  159. package/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.d.ts +8 -8
  160. package/lib/components/form/formly/wrappers/index.d.ts +2 -2
  161. package/lib/components/form/index.d.ts +3 -1
  162. package/lib/components/form/models/form-editor.event.d.ts +5 -0
  163. package/lib/components/form/models/index.d.ts +1 -0
  164. package/lib/components/layout/breadcrumb.component.d.ts +8 -0
  165. package/lib/components/layout/footer.component.d.ts +9 -0
  166. package/lib/components/layout/index.d.ts +6 -6
  167. package/lib/components/layout/main-layout.component.d.ts +21 -0
  168. package/lib/components/layout/menu-item.component.d.ts +29 -0
  169. package/lib/components/layout/menu.component.d.ts +10 -0
  170. package/lib/components/layout/services/index.d.ts +1 -0
  171. package/lib/components/layout/services/main-layout.component.service.d.ts +65 -0
  172. package/lib/components/layout/topbar.component.d.ts +25 -0
  173. package/lib/components/tableview/index.d.ts +5 -3
  174. package/lib/components/tableview/models/index.d.ts +1 -0
  175. package/lib/{models/events/table-event.model.d.ts → components/tableview/models/table.event.d.ts} +17 -17
  176. package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +14 -14
  177. package/lib/components/tableview/services/index.d.ts +1 -0
  178. package/lib/components/tableview/{tableview.component.service.d.ts → services/tableview.component.service.d.ts} +13 -13
  179. package/lib/components/tableview/table/column-filter/column-filter.component.d.ts +22 -0
  180. package/lib/components/tableview/table/column-value/column-value.component.d.ts +12 -0
  181. package/lib/components/tableview/table/table.component.d.ts +79 -47
  182. package/lib/components/tableview/tableview.component.d.ts +35 -36
  183. package/lib/config/formly.config.d.ts +14 -14
  184. package/lib/config/index.d.ts +1 -1
  185. package/lib/{models/config → config/models}/index.d.ts +1 -1
  186. package/lib/config/models/mng-config.model.d.ts +34 -0
  187. package/lib/data-providers/base.data-provider.d.ts +17 -0
  188. package/lib/data-providers/editor.data-provider.d.ts +25 -0
  189. package/lib/data-providers/index.d.ts +5 -0
  190. package/lib/data-providers/lookup.data-provider.d.ts +14 -0
  191. package/lib/data-providers/table.data-provider.d.ts +6 -0
  192. package/lib/data-providers/tableview.data-provider.d.ts +15 -0
  193. package/lib/{models/descriptors/action-descriptor.model.d.ts → descriptors/action.descriptor.d.ts} +148 -145
  194. package/lib/{models/descriptors/editor-descriptor.model.d.ts → descriptors/editor.descriptor.d.ts} +255 -255
  195. package/lib/{models/validators → descriptors}/field.validator.d.ts +18 -18
  196. package/lib/descriptors/index.d.ts +7 -0
  197. package/lib/descriptors/lookup.descriptor.d.ts +17 -0
  198. package/lib/{models/descriptors/model-descriptor.model.d.ts → descriptors/model.descriptor.d.ts} +15 -15
  199. package/lib/descriptors/table.descriptor.d.ts +164 -0
  200. package/lib/{models/descriptors/tableview-descriptor.model.d.ts → descriptors/tableview.descriptor.d.ts} +39 -38
  201. package/lib/directives/component.directive.d.ts +11 -0
  202. package/lib/directives/index.d.ts +2 -1
  203. package/lib/directives/template.directive.d.ts +13 -11
  204. package/lib/mng-commons.module.d.ts +79 -71
  205. package/lib/models/index.d.ts +2 -0
  206. package/lib/models/router.model.d.ts +14 -0
  207. package/lib/models/user.model.d.ts +8 -0
  208. package/lib/pipes/boolean.pipe.d.ts +7 -0
  209. package/lib/pipes/index.d.ts +2 -1
  210. package/lib/pipes/property-path.pipe.d.ts +7 -7
  211. package/lib/services/action.service.d.ts +92 -92
  212. package/lib/services/commons.service.d.ts +72 -0
  213. package/lib/services/configuration.service.d.ts +35 -35
  214. package/lib/services/index.d.ts +4 -6
  215. package/lib/services/navigation.service.d.ts +14 -14
  216. package/lib/services/providers/commons-init.provider.d.ts +2 -0
  217. package/lib/services/providers/config-service.provider.d.ts +5 -5
  218. package/lib/services/providers/formly-config.provider.d.ts +4 -4
  219. package/lib/services/providers/index.d.ts +3 -2
  220. package/lib/services/tokens/browser-storage.token.d.ts +2 -0
  221. package/lib/services/tokens/index.d.ts +2 -0
  222. package/lib/services/tokens/module-config.token.d.ts +3 -0
  223. package/lib/{models/types → types}/index.d.ts +2 -2
  224. package/lib/{models/types → types}/type.decorator.d.ts +2 -2
  225. package/lib/{models/types → types}/type.model.d.ts +10 -10
  226. package/lib/utils/editor-formly.util.d.ts +9 -9
  227. package/lib/utils/i18n.util.d.ts +18 -15
  228. package/lib/utils/index.d.ts +5 -4
  229. package/lib/utils/model.util.d.ts +7 -5
  230. package/lib/utils/toast.util.d.ts +13 -12
  231. package/lib/utils/type.util.d.ts +15 -15
  232. package/mediusinc-mng-commons.d.ts +5 -5
  233. package/package.json +37 -36
  234. package/public-api.d.ts +25 -22
  235. package/scss/common/layout/_breadcrumb.scss +96 -0
  236. package/scss/common/layout/_config.scss +101 -0
  237. package/scss/common/layout/_dashboard.scss +16 -0
  238. package/scss/common/layout/_exception.scss +131 -0
  239. package/scss/common/layout/_footer.scss +29 -0
  240. package/scss/common/layout/_help.scss +157 -0
  241. package/scss/common/layout/_inlinemenu.scss +55 -0
  242. package/scss/common/layout/_invoice.scss +176 -0
  243. package/scss/common/layout/_landing.scss +639 -0
  244. package/scss/common/layout/_layout_dark.scss +23 -0
  245. package/scss/common/layout/_layout_light.scss +23 -0
  246. package/scss/common/layout/_loader.scss +18 -0
  247. package/scss/common/layout/_login.scss +106 -0
  248. package/scss/common/layout/_main.scss +45 -0
  249. package/scss/common/layout/_mixins.scss +214 -0
  250. package/scss/common/layout/_rightmenu.scss +125 -0
  251. package/scss/common/layout/_topbar.scss +189 -0
  252. package/scss/common/layout/_typography.scss +63 -0
  253. package/scss/common/layout/_utils.scss +96 -0
  254. package/scss/common/layout/_widgets.scss +391 -0
  255. package/scss/common/layout/menu/_menu.scss +7 -0
  256. package/scss/common/layout/menu/_menu_common.scss +183 -0
  257. package/scss/common/layout/menu/_menu_overlay.scss +52 -0
  258. package/scss/common/layout/menu/_menu_sidebar.scss +232 -0
  259. package/scss/common/layout/menu/_menu_slim.scss +138 -0
  260. package/scss/common/layout/menu/_menu_static.scss +70 -0
  261. package/scss/common/layout/menu/_menu_theme.scss +365 -0
  262. package/scss/common/theme/_theme_dark.scss +5 -0
  263. package/scss/common/theme/_theme_light.scss +5 -0
  264. package/scss/common/theme/designer/_colors.scss +18 -0
  265. package/scss/common/theme/designer/_common.scss +40 -0
  266. package/scss/common/theme/designer/_components.scss +101 -0
  267. package/scss/common/theme/designer/_mixins.scss +174 -0
  268. package/scss/common/theme/designer/components/button/_button.scss +560 -0
  269. package/scss/common/theme/designer/components/button/_speeddial.scss +79 -0
  270. package/scss/common/theme/designer/components/button/_splitbutton.scss +1 -0
  271. package/scss/common/theme/designer/components/data/_carousel.scss +37 -0
  272. package/scss/common/theme/designer/components/data/_datatable.scss +266 -0
  273. package/scss/common/theme/designer/components/data/_dataview.scss +55 -0
  274. package/scss/common/theme/designer/components/data/_filter.scss +138 -0
  275. package/scss/common/theme/designer/components/data/_fullcalendar.scss +324 -0
  276. package/scss/common/theme/designer/components/data/_orderlist.scss +91 -0
  277. package/scss/common/theme/designer/components/data/_organizationchart.scss +50 -0
  278. package/scss/common/theme/designer/components/data/_paginator.scss +83 -0
  279. package/scss/common/theme/designer/components/data/_picklist.scss +91 -0
  280. package/scss/common/theme/designer/components/data/_timeline.scss +38 -0
  281. package/scss/common/theme/designer/components/data/_tree.scss +144 -0
  282. package/scss/common/theme/designer/components/data/_treetable.scss +242 -0
  283. package/scss/common/theme/designer/components/data/_virtualscroller.scss +28 -0
  284. package/scss/common/theme/designer/components/file/_fileupload.scss +58 -0
  285. package/scss/common/theme/designer/components/input/_autocomplete.scss +103 -0
  286. package/scss/common/theme/designer/components/input/_calendar.scss +212 -0
  287. package/scss/common/theme/designer/components/input/_cascadeselect.scss +98 -0
  288. package/scss/common/theme/designer/components/input/_checkbox.scss +85 -0
  289. package/scss/common/theme/designer/components/input/_chips.scss +41 -0
  290. package/scss/common/theme/designer/components/input/_colorpicker.scss +19 -0
  291. package/scss/common/theme/designer/components/input/_dropdown.scss +136 -0
  292. package/scss/common/theme/designer/components/input/_editor.scss +122 -0
  293. package/scss/common/theme/designer/components/input/_inputgroup.scss +69 -0
  294. package/scss/common/theme/designer/components/input/_inputmask.scss +3 -0
  295. package/scss/common/theme/designer/components/input/_inputnumber.scss +3 -0
  296. package/scss/common/theme/designer/components/input/_inputswitch.scss +58 -0
  297. package/scss/common/theme/designer/components/input/_inputtext.scss +97 -0
  298. package/scss/common/theme/designer/components/input/_listbox.scss +82 -0
  299. package/scss/common/theme/designer/components/input/_multiselect.scss +164 -0
  300. package/scss/common/theme/designer/components/input/_password.scss +33 -0
  301. package/scss/common/theme/designer/components/input/_radiobutton.scss +78 -0
  302. package/scss/common/theme/designer/components/input/_rating.scss +48 -0
  303. package/scss/common/theme/designer/components/input/_selectbutton.scss +50 -0
  304. package/scss/common/theme/designer/components/input/_slider.scss +69 -0
  305. package/scss/common/theme/designer/components/input/_togglebutton.scss +48 -0
  306. package/scss/common/theme/designer/components/input/_treeselect.scss +89 -0
  307. package/scss/common/theme/designer/components/menu/_breadcrumb.scss +42 -0
  308. package/scss/common/theme/designer/components/menu/_contextmenu.scss +50 -0
  309. package/scss/common/theme/designer/components/menu/_dock.scss +51 -0
  310. package/scss/common/theme/designer/components/menu/_megamenu.scss +102 -0
  311. package/scss/common/theme/designer/components/menu/_menu.scss +41 -0
  312. package/scss/common/theme/designer/components/menu/_menubar.scss +179 -0
  313. package/scss/common/theme/designer/components/menu/_panelmenu.scss +137 -0
  314. package/scss/common/theme/designer/components/menu/_slidemenu.scss +55 -0
  315. package/scss/common/theme/designer/components/menu/_steps.scss +55 -0
  316. package/scss/common/theme/designer/components/menu/_tabmenu.scss +49 -0
  317. package/scss/common/theme/designer/components/menu/_tieredmenu.scss +56 -0
  318. package/scss/common/theme/designer/components/messages/_inlinemessage.scss +64 -0
  319. package/scss/common/theme/designer/components/messages/_message.scss +102 -0
  320. package/scss/common/theme/designer/components/messages/_toast.scss +95 -0
  321. package/scss/common/theme/designer/components/misc/_avatar.scss +30 -0
  322. package/scss/common/theme/designer/components/misc/_badge.scss +48 -0
  323. package/scss/common/theme/designer/components/misc/_blockui.scss +3 -0
  324. package/scss/common/theme/designer/components/misc/_chip.scss +36 -0
  325. package/scss/common/theme/designer/components/misc/_inplace.scss +17 -0
  326. package/scss/common/theme/designer/components/misc/_progressbar.scss +17 -0
  327. package/scss/common/theme/designer/components/misc/_scrolltop.scss +20 -0
  328. package/scss/common/theme/designer/components/misc/_skeleton.scss +8 -0
  329. package/scss/common/theme/designer/components/misc/_tag.scss +33 -0
  330. package/scss/common/theme/designer/components/misc/_terminal.scss +11 -0
  331. package/scss/common/theme/designer/components/multimedia/_galleria.scss +141 -0
  332. package/scss/common/theme/designer/components/overlay/_confirmpopup.scss +67 -0
  333. package/scss/common/theme/designer/components/overlay/_dialog.scss +63 -0
  334. package/scss/common/theme/designer/components/overlay/_overlaypanel.scss +62 -0
  335. package/scss/common/theme/designer/components/overlay/_sidebar.scss +27 -0
  336. package/scss/common/theme/designer/components/overlay/_tooltip.scss +33 -0
  337. package/scss/common/theme/designer/components/panel/_accordion.scss +119 -0
  338. package/scss/common/theme/designer/components/panel/_card.scss +30 -0
  339. package/scss/common/theme/designer/components/panel/_divider.scss +31 -0
  340. package/scss/common/theme/designer/components/panel/_fieldset.scss +47 -0
  341. package/scss/common/theme/designer/components/panel/_panel.scss +42 -0
  342. package/scss/common/theme/designer/components/panel/_scrollpanel.scss +6 -0
  343. package/scss/common/theme/designer/components/panel/_splitter.scss +19 -0
  344. package/scss/common/theme/designer/components/panel/_tabview.scss +66 -0
  345. package/scss/common/theme/designer/components/panel/_toolbar.scss +10 -0
  346. package/scss/common/theme/extensions/_button.scss +99 -0
  347. package/scss/common/theme/extensions/_calendar.scss +18 -0
  348. package/scss/common/theme/extensions/_card.scss +6 -0
  349. package/scss/common/theme/extensions/_carousel.scss +13 -0
  350. package/scss/common/theme/extensions/_checkbox.scss +10 -0
  351. package/scss/common/theme/extensions/_contextmenu.scss +16 -0
  352. package/scss/common/theme/extensions/_datatable.scss +83 -0
  353. package/scss/common/theme/extensions/_dialog.scss +14 -0
  354. package/scss/common/theme/extensions/_fieldset.scss +6 -0
  355. package/scss/common/theme/extensions/_galleria.scss +25 -0
  356. package/scss/common/theme/extensions/_megamenu.scss +18 -0
  357. package/scss/common/theme/extensions/_menu.scss +14 -0
  358. package/scss/common/theme/extensions/_menubar.scss +14 -0
  359. package/scss/common/theme/extensions/_orderlist.scss +38 -0
  360. package/scss/common/theme/extensions/_paginator.scss +19 -0
  361. package/scss/common/theme/extensions/_panelmenu.scss +20 -0
  362. package/scss/common/theme/extensions/_password.scss +5 -0
  363. package/scss/common/theme/extensions/_picklist.scss +38 -0
  364. package/scss/common/theme/extensions/_radiobutton.scss +8 -0
  365. package/scss/common/theme/extensions/_sidebar.scss +19 -0
  366. package/scss/common/theme/extensions/_slidemenu.scss +10 -0
  367. package/scss/common/theme/extensions/_slider.scss +6 -0
  368. package/scss/common/theme/extensions/_steps.scss +50 -0
  369. package/scss/common/theme/extensions/_tieredmenu.scss +14 -0
  370. package/scss/common/theme/extensions/_toast.scss +6 -0
  371. package/scss/common/theme/extensions/_tree.scss +36 -0
  372. package/scss/common/theme/extensions/_treetable.scss +35 -0
  373. package/scss/common/theme/extensions/_vendor_extensions.scss +27 -0
  374. package/scss/common/variables/layout/_common.scss +12 -0
  375. package/scss/common/variables/layout/_layout_dark.scss +71 -0
  376. package/scss/common/variables/layout/_layout_light.scss +71 -0
  377. package/scss/common/variables/theme/_theme_dark.scss +897 -0
  378. package/scss/common/variables/theme/_theme_light.scss +885 -0
  379. package/scss/layout/default/_mng-variables-layout-dark.scss +2 -0
  380. package/scss/layout/default/_mng-variables-layout-light.scss +2 -0
  381. package/scss/layout/default/layout-dark.scss +2 -0
  382. package/scss/layout/default/layout-light.scss +2 -0
  383. package/scss/mng-commons-dark.scss +5 -0
  384. package/scss/mng-commons-light.scss +5 -0
  385. package/scss/mng-overrides/_layout_action.scss +3 -0
  386. package/scss/mng-overrides/_layout_dialog.scss +34 -0
  387. package/scss/mng-overrides/_layout_forms.scss +31 -0
  388. package/scss/mng-overrides/_layout_radio.scss +3 -0
  389. package/scss/mng-overrides/_layout_styles.scss +4 -0
  390. package/scss/mng-overrides/_theme_datatable.scss +9 -0
  391. package/scss/mng-overrides/_theme_dialog.scss +9 -0
  392. package/scss/mng-overrides/_theme_dropdown.scss +6 -0
  393. package/scss/mng-overrides/_theme_styles.scss +9 -0
  394. package/scss/mng-overrides/_theme_tableview.scss +94 -0
  395. package/scss/theme/default/_mng-variables-theme-dark.scss +8 -0
  396. package/scss/theme/default/_mng-variables-theme-light.scss +8 -0
  397. package/scss/theme/default/theme-dark.scss +2 -0
  398. package/scss/theme/default/theme-light.scss +2 -0
  399. package/esm2020/lib/api/services/abstract-crud-api.service.mjs +0 -72
  400. package/esm2020/lib/components/layout/app.breadcrumb.component.mjs +0 -26
  401. package/esm2020/lib/components/layout/app.footer.component.mjs +0 -35
  402. package/esm2020/lib/components/layout/app.main.component.mjs +0 -25
  403. package/esm2020/lib/components/layout/app.main.component.service.mjs +0 -133
  404. package/esm2020/lib/components/layout/app.menu.component.mjs +0 -24
  405. package/esm2020/lib/components/layout/app.menuitem.component.mjs +0 -241
  406. package/esm2020/lib/components/layout/app.topbar.component.mjs +0 -135
  407. package/esm2020/lib/components/tableview/tableview.component.service.mjs +0 -18
  408. package/esm2020/lib/models/action/action.model.mjs +0 -58
  409. package/esm2020/lib/models/action/index.mjs +0 -2
  410. package/esm2020/lib/models/config/index.mjs +0 -2
  411. package/esm2020/lib/models/config/mng-config.model.mjs +0 -3
  412. package/esm2020/lib/models/descriptors/action-descriptor.model.mjs +0 -325
  413. package/esm2020/lib/models/descriptors/editor-descriptor.model.mjs +0 -666
  414. package/esm2020/lib/models/descriptors/index.mjs +0 -6
  415. package/esm2020/lib/models/descriptors/model-descriptor.model.mjs +0 -34
  416. package/esm2020/lib/models/descriptors/table-descriptor.model.mjs +0 -123
  417. package/esm2020/lib/models/descriptors/tableview-descriptor.model.mjs +0 -124
  418. package/esm2020/lib/models/events/editor-event.model.mjs +0 -14
  419. package/esm2020/lib/models/events/index.mjs +0 -3
  420. package/esm2020/lib/models/events/table-event.model.mjs +0 -16
  421. package/esm2020/lib/models/interfaces/confirmation-service.model.mjs +0 -2
  422. package/esm2020/lib/models/interfaces/index.mjs +0 -2
  423. package/esm2020/lib/models/providers/data-provider.model.mjs +0 -86
  424. package/esm2020/lib/models/providers/index.mjs +0 -2
  425. package/esm2020/lib/models/types/index.mjs +0 -3
  426. package/esm2020/lib/models/types/type.decorator.mjs +0 -7
  427. package/esm2020/lib/models/types/type.model.mjs +0 -2
  428. package/esm2020/lib/models/validators/field.validator.mjs +0 -21
  429. package/esm2020/lib/models/validators/index.mjs +0 -2
  430. package/esm2020/lib/services/breadcrumb.service.mjs +0 -74
  431. package/esm2020/lib/services/menu.service.mjs +0 -37
  432. package/esm2020/lib/services/settings.service.mjs +0 -81
  433. package/lib/components/layout/app.breadcrumb.component.d.ts +0 -14
  434. package/lib/components/layout/app.footer.component.d.ts +0 -8
  435. package/lib/components/layout/app.main.component.d.ts +0 -12
  436. package/lib/components/layout/app.main.component.service.d.ts +0 -40
  437. package/lib/components/layout/app.menu.component.d.ts +0 -15
  438. package/lib/components/layout/app.menuitem.component.d.ts +0 -31
  439. package/lib/components/layout/app.topbar.component.d.ts +0 -15
  440. package/lib/models/action/index.d.ts +0 -1
  441. package/lib/models/config/mng-config.model.d.ts +0 -20
  442. package/lib/models/descriptors/index.d.ts +0 -5
  443. package/lib/models/descriptors/table-descriptor.model.d.ts +0 -45
  444. package/lib/models/events/editor-event.model.d.ts +0 -11
  445. package/lib/models/events/index.d.ts +0 -2
  446. package/lib/models/interfaces/index.d.ts +0 -1
  447. package/lib/models/providers/data-provider.model.d.ts +0 -62
  448. package/lib/models/providers/index.d.ts +0 -1
  449. package/lib/models/validators/index.d.ts +0 -1
  450. package/lib/services/breadcrumb.service.d.ts +0 -15
  451. package/lib/services/menu.service.d.ts +0 -16
  452. package/lib/services/settings.service.d.ts +0 -30
  453. package/mediusinc-mng-commons-0.0.1-rc.4.tgz +0 -0
@@ -0,0 +1,21 @@
1
+ export class FieldValidator {
2
+ constructor(name, expression, message, options) {
3
+ this._name = name;
4
+ this._expression = expression;
5
+ this._message = message;
6
+ this._options = options;
7
+ }
8
+ get name() {
9
+ return this._name;
10
+ }
11
+ get expression() {
12
+ return this._expression;
13
+ }
14
+ get message() {
15
+ return this._message;
16
+ }
17
+ get options() {
18
+ return this._options;
19
+ }
20
+ }
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQudmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9kZXNjcmlwdG9ycy9maWVsZC52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsTUFBTSxPQUFPLGNBQWM7SUFNdkIsWUFBWSxJQUFZLEVBQUUsVUFBa0QsRUFDaEUsT0FBNkUsRUFBRSxPQUErQjtRQUN0SCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztRQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4QixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBVyxJQUFJO1FBQ1gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDZCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekIsQ0FBQztJQUVELElBQVcsT0FBTztRQUNkLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Fic3RyYWN0Q29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtGb3JtbHlGaWVsZENvbmZpZ30gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5cbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBjbGFzcyBGaWVsZFZhbGlkYXRvciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfbmFtZTogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2V4cHJlc3Npb24/OiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX21lc3NhZ2U/OiAoZXJyOiBhbnksIGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykgPT4gc3RyaW5nIHwgT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM/OiB7IGVycm9yUGF0aDogc3RyaW5nIH07XG5cbiAgICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIGV4cHJlc3Npb24/OiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiBib29sZWFuLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U/OiAoZXJyOiBhbnksIGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykgPT4gc3RyaW5nIHwgT2JzZXJ2YWJsZTxzdHJpbmc+LCBvcHRpb25zPzogeyBlcnJvclBhdGg6IHN0cmluZyB9KSB7XG4gICAgICAgIHRoaXMuX25hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLl9leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbiAgICAgICAgdGhpcy5fbWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGV4cHJlc3Npb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leHByZXNzaW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lc3NhZ2U7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBvcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,8 @@
1
+ export * from './action.descriptor';
2
+ export * from './editor.descriptor';
3
+ export * from './field.validator';
4
+ export * from './lookup.descriptor';
5
+ export * from './model.descriptor';
6
+ export * from './table.descriptor';
7
+ export * from './tableview.descriptor';
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2Rlc2NyaXB0b3JzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2FjdGlvbi5kZXNjcmlwdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vZWRpdG9yLmRlc2NyaXB0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9maWVsZC52YWxpZGF0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9sb29rdXAuZGVzY3JpcHRvcic7XG5leHBvcnQgKiBmcm9tICcuL21vZGVsLmRlc2NyaXB0b3InO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5kZXNjcmlwdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGV2aWV3LmRlc2NyaXB0b3InO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9va3VwLmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2Rlc2NyaXB0b3JzL2xvb2t1cC5kZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1R5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge0lMb29rdXBEYXRhUHJvdmlkZXJ9IGZyb20gJy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7Q2xhc3NUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge01lZGl1c1F1ZXJ5UGFyYW19IGZyb20gJy4uL2FwaS9tb2RlbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElMb29rdXBEZXNjcmlwdG9yPFQ+IHtcbiAgICBtb2RlbFR5cGU6IENsYXNzVHlwZTxUPnxudWxsO1xuICAgIGl0ZW1zTGFiZWxQcm9wZXJ0eT86IHN0cmluZztcbiAgICBpdGVtc1ZhbHVlUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgZGF0YUtleVByb3BlcnR5Pzogc3RyaW5nO1xuICAgIGRhdGFQcm92aWRlcj86IElMb29rdXBEYXRhUHJvdmlkZXI8VCwgYW55PjtcbiAgICB3aXRoSXRlbXNMYWJlbFByb3BlcnR5KGl0ZW1zTGFiZWxQcm9wZXJ0eTogc3RyaW5nKTogdGhpcztcbiAgICB3aXRoSXRlbXNWYWx1ZVByb3BlcnR5KGl0ZW1zTGFiZWxQcm9wZXJ0eTogc3RyaW5nKTogdGhpcztcbiAgICB3aXRoRGF0YUtleVByb3BlcnR5KGRhdGFLZXlQcm9wZXJ0eTogc3RyaW5nKTogdGhpcztcbiAgICB3aXRoTG9va3VwPFM+KGxvb2t1cDogKHF1ZXJ5UGFyYW0/OiBNZWRpdXNRdWVyeVBhcmFtLCBzZXJ2aWNlPzogUywgc2VhcmNoPzogc3RyaW5nKSA9PiBPYnNlcnZhYmxlPEFycmF5PFQ+Piwgc2VydmljZVR5cGU/OiBUeXBlPFM+KTogdGhpcztcbiAgICB3aXRoTG9va3VwRGF0YVByb3ZpZGVyKGRhdGFQcm92aWRlcjogSUxvb2t1cERhdGFQcm92aWRlcjxULCBhbnk+KTogdGhpcztcbn1cbiJdfQ==
@@ -0,0 +1,34 @@
1
+ import { ModelUtil, TypeUtil } from '../utils';
2
+ export class ModelDescriptor {
3
+ constructor(modelType, idProperty, titleProperty) {
4
+ this._type = modelType;
5
+ this._idPropertyName = idProperty ?? (ModelUtil.findIdAttribute(modelType) ?? undefined);
6
+ this._titlePropertyName = titleProperty ?? (ModelUtil.findTitleAttribute(modelType) ?? undefined);
7
+ this._typeName = TypeUtil.findTypeName(this._type);
8
+ }
9
+ get type() {
10
+ return this._type;
11
+ }
12
+ get typeName() {
13
+ return this._typeName;
14
+ }
15
+ get idPropertyName() {
16
+ return this._idPropertyName;
17
+ }
18
+ get titlePropertyName() {
19
+ return this._titlePropertyName;
20
+ }
21
+ withIdPropertyName(idProperty) {
22
+ this._idPropertyName = idProperty;
23
+ return this;
24
+ }
25
+ withTitlePropertyName(titleProperty) {
26
+ this._titlePropertyName = titleProperty;
27
+ return this;
28
+ }
29
+ copy() {
30
+ const model = new ModelDescriptor(this._type, this._idPropertyName, this._titlePropertyName);
31
+ return model;
32
+ }
33
+ }
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZGVzY3JpcHRvcnMvbW9kZWwuZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFFBQVEsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUU3QyxNQUFNLE9BQU8sZUFBZTtJQU14QixZQUFZLFNBQXVCLEVBQUUsVUFBbUIsRUFBRSxhQUFzQjtRQUM1RSxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztRQUN2QixJQUFJLENBQUMsZUFBZSxHQUFHLFVBQVUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUM7UUFDekYsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGFBQWEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQztRQUNsRyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxJQUFXLElBQUk7UUFDWCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBVyxjQUFjO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBVyxpQkFBaUI7UUFDeEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDbkMsQ0FBQztJQUVNLGtCQUFrQixDQUFDLFVBQWtCO1FBQ3hDLElBQUksQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFDO1FBQ2xDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxhQUFxQjtRQUM5QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsYUFBYSxDQUFDO1FBQ3hDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxJQUFJO1FBQ1AsTUFBTSxLQUFLLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzdGLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2xhc3NUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge01vZGVsVXRpbCwgVHlwZVV0aWx9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGNsYXNzIE1vZGVsRGVzY3JpcHRvcjxUPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfdHlwZTogQ2xhc3NUeXBlPFQ+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3R5cGVOYW1lOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfaWRQcm9wZXJ0eU5hbWU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfdGl0bGVQcm9wZXJ0eU5hbWU/OiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3Rvcihtb2RlbFR5cGU6IENsYXNzVHlwZTxUPiwgaWRQcm9wZXJ0eT86IHN0cmluZywgdGl0bGVQcm9wZXJ0eT86IHN0cmluZykge1xuICAgICAgICB0aGlzLl90eXBlID0gbW9kZWxUeXBlO1xuICAgICAgICB0aGlzLl9pZFByb3BlcnR5TmFtZSA9IGlkUHJvcGVydHkgPz8gKE1vZGVsVXRpbC5maW5kSWRBdHRyaWJ1dGUobW9kZWxUeXBlKSA/PyB1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLl90aXRsZVByb3BlcnR5TmFtZSA9IHRpdGxlUHJvcGVydHkgPz8gKE1vZGVsVXRpbC5maW5kVGl0bGVBdHRyaWJ1dGUobW9kZWxUeXBlKSA/PyB1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLl90eXBlTmFtZSA9IFR5cGVVdGlsLmZpbmRUeXBlTmFtZSh0aGlzLl90eXBlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdHlwZU5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlkUHJvcGVydHlOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faWRQcm9wZXJ0eU5hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0aXRsZVByb3BlcnR5TmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RpdGxlUHJvcGVydHlOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSWRQcm9wZXJ0eU5hbWUoaWRQcm9wZXJ0eTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2lkUHJvcGVydHlOYW1lID0gaWRQcm9wZXJ0eTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhUaXRsZVByb3BlcnR5TmFtZSh0aXRsZVByb3BlcnR5OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdGl0bGVQcm9wZXJ0eU5hbWUgPSB0aXRsZVByb3BlcnR5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weSgpOiBNb2RlbERlc2NyaXB0b3I8VD4ge1xuICAgICAgICBjb25zdCBtb2RlbCA9IG5ldyBNb2RlbERlc2NyaXB0b3IodGhpcy5fdHlwZSwgdGhpcy5faWRQcm9wZXJ0eU5hbWUsIHRoaXMuX3RpdGxlUHJvcGVydHlOYW1lKTtcbiAgICAgICAgcmV0dXJuIG1vZGVsO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,401 @@
1
+ import { ModelDescriptor } from './model.descriptor';
2
+ import { LookupDataProvider } from '../data-providers';
3
+ import { ModelUtil } from '../utils';
4
+ export class TableDescriptor {
5
+ constructor(modelType, idProperty, titleProperty) {
6
+ this._filterDisplay = TableDescriptor.FilterDisplayEnum.Menu;
7
+ this._paginationMode = TableDescriptor.PaginationModeEnum.Pagination;
8
+ this._columns = [];
9
+ this._hasDefaultSort = false;
10
+ this._defaultSortProperty = [];
11
+ this._defaultSortAsc = [];
12
+ this._rowHeight = 45;
13
+ this._tableFullHeightOffset = 315;
14
+ this._model = new ModelDescriptor(modelType, idProperty, titleProperty);
15
+ }
16
+ get model() {
17
+ return this._model;
18
+ }
19
+ get filterDisplay() {
20
+ return this._filterDisplay;
21
+ }
22
+ get paginationMode() {
23
+ return this._paginationMode;
24
+ }
25
+ get columns() {
26
+ return this._columns;
27
+ }
28
+ get title() {
29
+ return this._title;
30
+ }
31
+ get dataKeyProperty() {
32
+ return this._dataKeyProperty;
33
+ }
34
+ get hasDefaultSort() {
35
+ return this._hasDefaultSort;
36
+ }
37
+ get defaultSortProperty() {
38
+ return this._defaultSortProperty;
39
+ }
40
+ get defaultSortAsc() {
41
+ return this._defaultSortAsc;
42
+ }
43
+ get rowHeight() {
44
+ return this._rowHeight;
45
+ }
46
+ get tableFullHeightOffset() {
47
+ return this._tableFullHeightOffset;
48
+ }
49
+ addColumnDescriptor(column) {
50
+ this._columns.push(column);
51
+ this.setDataKeyFromColumn();
52
+ return this;
53
+ }
54
+ addColumn(property) {
55
+ const column = new ColumnDescriptor(this, property);
56
+ this._columns.push(column);
57
+ this.setDataKeyFromColumn();
58
+ return column;
59
+ }
60
+ addColumnNumber(property, displayFormat) {
61
+ const column = new ColumnDescriptor(this, property);
62
+ column.asNumber(displayFormat);
63
+ this._columns.push(column);
64
+ this.setDataKeyFromColumn();
65
+ return column;
66
+ }
67
+ addColumnDate(property, displayFormat) {
68
+ const column = new ColumnDescriptor(this, property);
69
+ column.asDate(displayFormat);
70
+ this._columns.push(column);
71
+ this.setDataKeyFromColumn();
72
+ return column;
73
+ }
74
+ addColumnBoolean(property) {
75
+ const column = new ColumnDescriptor(this, property);
76
+ column.asBoolean();
77
+ this._columns.push(column);
78
+ this.setDataKeyFromColumn();
79
+ return column;
80
+ }
81
+ addColumnObject(property, modelType, displayProperty) {
82
+ const column = new ColumnDescriptor(this, property);
83
+ column.withModelType(modelType);
84
+ column.withDisplayPropertyPath(displayProperty);
85
+ this._columns.push(column);
86
+ this.setDataKeyFromColumn();
87
+ return column;
88
+ }
89
+ withFilterDisplay(filterDisplayType) {
90
+ this._filterDisplay = filterDisplayType;
91
+ return this;
92
+ }
93
+ withPaginationMode(paginationMode) {
94
+ this._paginationMode = paginationMode;
95
+ return this;
96
+ }
97
+ withTitle(title) {
98
+ this._title = title;
99
+ return this;
100
+ }
101
+ withDataKeyProperty(property) {
102
+ this._dataKeyProperty = property;
103
+ return this;
104
+ }
105
+ withDefaultSort(property, asc = true) {
106
+ this._hasDefaultSort = true;
107
+ this._defaultSortProperty.push(property);
108
+ this._defaultSortAsc.push(asc);
109
+ return this;
110
+ }
111
+ withRowHeight(rowHeight) {
112
+ this._rowHeight = rowHeight;
113
+ return this;
114
+ }
115
+ withTableFullHeightOffset(tableFullHeightOffset) {
116
+ this._tableFullHeightOffset = tableFullHeightOffset;
117
+ return this;
118
+ }
119
+ setDataKeyFromColumn() {
120
+ if (!this._dataKeyProperty && this._columns.length === 1) {
121
+ this._dataKeyProperty = this._columns[0].property;
122
+ }
123
+ }
124
+ copy() {
125
+ const descriptor = new TableDescriptor(this.model.type, this.model.idPropertyName, this.model.titlePropertyName);
126
+ descriptor._columns = this.columns.map(c => c.copy());
127
+ descriptor._title = this._title;
128
+ descriptor._dataKeyProperty = this._dataKeyProperty;
129
+ descriptor._defaultSortProperty = this._defaultSortProperty.map(p => p);
130
+ descriptor._defaultSortAsc = this._defaultSortAsc.map(p => p);
131
+ descriptor._filterDisplay = this._filterDisplay;
132
+ return descriptor;
133
+ }
134
+ }
135
+ (function (TableDescriptor) {
136
+ let PaginationModeEnum;
137
+ (function (PaginationModeEnum) {
138
+ PaginationModeEnum[PaginationModeEnum["Pagination"] = 0] = "Pagination";
139
+ PaginationModeEnum[PaginationModeEnum["InfiniteScroll"] = 1] = "InfiniteScroll";
140
+ })(PaginationModeEnum = TableDescriptor.PaginationModeEnum || (TableDescriptor.PaginationModeEnum = {}));
141
+ let FilterDisplayEnum;
142
+ (function (FilterDisplayEnum) {
143
+ FilterDisplayEnum[FilterDisplayEnum["Row"] = 0] = "Row";
144
+ FilterDisplayEnum[FilterDisplayEnum["Menu"] = 1] = "Menu";
145
+ })(FilterDisplayEnum = TableDescriptor.FilterDisplayEnum || (TableDescriptor.FilterDisplayEnum = {}));
146
+ })(TableDescriptor || (TableDescriptor = {}));
147
+ export class ColumnDescriptor {
148
+ constructor(table, property) {
149
+ this._modelType = null;
150
+ this._columnType = ColumnDescriptor.TypeEnum.String;
151
+ this._isSortEnabled = false;
152
+ this._table = table;
153
+ this._property = property;
154
+ }
155
+ get table() {
156
+ return this._table;
157
+ }
158
+ get property() {
159
+ return this._property;
160
+ }
161
+ get modelType() {
162
+ return this._modelType;
163
+ }
164
+ get displayPropertyPath() {
165
+ return this._displayPropertyPath;
166
+ }
167
+ get title() {
168
+ return this._title;
169
+ }
170
+ get isSortEnabled() {
171
+ return this._isSortEnabled;
172
+ }
173
+ get columnType() {
174
+ return this._columnType;
175
+ }
176
+ get filterDescriptor() {
177
+ return this._filterDescriptor;
178
+ }
179
+ get displayFormat() {
180
+ return this._displayFormat;
181
+ }
182
+ asType(type = ColumnDescriptor.TypeEnum.String) {
183
+ this._columnType = type;
184
+ return this;
185
+ }
186
+ asNumber(displayFormat = '1.0-0') {
187
+ this._columnType = ColumnDescriptor.TypeEnum.Number;
188
+ this._displayFormat = displayFormat;
189
+ return this;
190
+ }
191
+ asDate(displayFormat = 'dd.MM.yyyy') {
192
+ this._columnType = ColumnDescriptor.TypeEnum.Date;
193
+ this._displayFormat = displayFormat;
194
+ return this;
195
+ }
196
+ asBoolean() {
197
+ this._columnType = ColumnDescriptor.TypeEnum.Boolean;
198
+ return this;
199
+ }
200
+ withModelType(modelType) {
201
+ this._modelType = modelType;
202
+ return this;
203
+ }
204
+ withTitle(title) {
205
+ this._title = title;
206
+ return this;
207
+ }
208
+ withDisplayPropertyPath(displayPropertyPath) {
209
+ this._displayPropertyPath = displayPropertyPath;
210
+ return this;
211
+ }
212
+ withFilter() {
213
+ this._filterDescriptor = new FilterDescriptor(this._property);
214
+ this._filterDescriptor.asFilterType(this._columnType);
215
+ return this._filterDescriptor;
216
+ }
217
+ withFilterLookup() {
218
+ const filterDescriptor = new FilterLookupDescriptor(this._property, this._modelType);
219
+ this._filterDescriptor = filterDescriptor;
220
+ return filterDescriptor;
221
+ }
222
+ withSort(isEnabled = true) {
223
+ this._isSortEnabled = isEnabled;
224
+ return this;
225
+ }
226
+ copy() {
227
+ const descriptor = new ColumnDescriptor(this._table, this._property);
228
+ descriptor._displayPropertyPath = this._displayPropertyPath;
229
+ descriptor._title = this._title;
230
+ descriptor._isSortEnabled = this._isSortEnabled;
231
+ descriptor._columnType = this._columnType;
232
+ descriptor._filterDescriptor = this._filterDescriptor?.copy();
233
+ return descriptor;
234
+ }
235
+ }
236
+ (function (ColumnDescriptor) {
237
+ let TypeEnum;
238
+ (function (TypeEnum) {
239
+ TypeEnum[TypeEnum["String"] = 0] = "String";
240
+ TypeEnum[TypeEnum["Number"] = 1] = "Number";
241
+ TypeEnum[TypeEnum["Boolean"] = 2] = "Boolean";
242
+ TypeEnum[TypeEnum["Date"] = 3] = "Date";
243
+ })(TypeEnum = ColumnDescriptor.TypeEnum || (ColumnDescriptor.TypeEnum = {}));
244
+ })(ColumnDescriptor || (ColumnDescriptor = {}));
245
+ export class FilterDescriptor {
246
+ constructor(property) {
247
+ this._filterType = FilterDescriptor.TypeEnum.String;
248
+ this._className = '';
249
+ this._property = property;
250
+ }
251
+ get property() {
252
+ return this._property;
253
+ }
254
+ get filterType() {
255
+ return this._filterType;
256
+ }
257
+ get filterProperty() {
258
+ return this._filterProperty;
259
+ }
260
+ get placeholder() {
261
+ return this._placeholder;
262
+ }
263
+ get className() {
264
+ return this._className;
265
+ }
266
+ asFilterType(filterType) {
267
+ this._filterType = filterType;
268
+ return this;
269
+ }
270
+ /**
271
+ * Sets different filter property name instead of default property. Use this if API requires different property provided to perform correct filter.
272
+ * @param filterProperty
273
+ */
274
+ withFilterProperty(filterProperty) {
275
+ this._filterProperty = filterProperty;
276
+ return this;
277
+ }
278
+ withPlaceholder(placeholder) {
279
+ this._placeholder = placeholder;
280
+ return this;
281
+ }
282
+ withClassName(className) {
283
+ this._className = className;
284
+ return this;
285
+ }
286
+ copyFieldsTo(descriptor) {
287
+ descriptor._filterType = this._filterType;
288
+ descriptor._filterProperty = this._filterProperty;
289
+ descriptor._placeholder = this._placeholder;
290
+ descriptor._className = this._className;
291
+ }
292
+ copy() {
293
+ const descriptor = new FilterDescriptor(this._property);
294
+ this.copyFieldsTo(descriptor);
295
+ return descriptor;
296
+ }
297
+ }
298
+ (function (FilterDescriptor) {
299
+ let TypeEnum;
300
+ (function (TypeEnum) {
301
+ TypeEnum[TypeEnum["String"] = 0] = "String";
302
+ TypeEnum[TypeEnum["Number"] = 1] = "Number";
303
+ TypeEnum[TypeEnum["Boolean"] = 2] = "Boolean";
304
+ TypeEnum[TypeEnum["Date"] = 3] = "Date";
305
+ TypeEnum[TypeEnum["Lookup"] = 4] = "Lookup";
306
+ })(TypeEnum = FilterDescriptor.TypeEnum || (FilterDescriptor.TypeEnum = {}));
307
+ })(FilterDescriptor || (FilterDescriptor = {}));
308
+ export class FilterLookupDescriptor extends FilterDescriptor {
309
+ constructor(property, modelType) {
310
+ super(property);
311
+ this._modelType = null;
312
+ this._lookupType = FilterLookupDescriptor.LookupTypeEnum.Dropdown;
313
+ this._multiselect = false;
314
+ this._dropdownClassName = 'mng-filter-lookup-dropdown';
315
+ this._modelType = modelType;
316
+ this._filterType = FilterDescriptor.TypeEnum.Lookup;
317
+ ModelUtil.trySetLookupItemsProperties(this);
318
+ }
319
+ get modelType() {
320
+ return this._modelType;
321
+ }
322
+ get lookupType() {
323
+ return this._lookupType;
324
+ }
325
+ get itemsLabelProperty() {
326
+ return this._itemsLabelProperty;
327
+ }
328
+ get itemsValueProperty() {
329
+ return this._itemsValueProperty;
330
+ }
331
+ get dataKeyProperty() {
332
+ return this._dataKeyProperty;
333
+ }
334
+ get dataProvider() {
335
+ return this._dataProvider;
336
+ }
337
+ get multiselect() {
338
+ return this._multiselect;
339
+ }
340
+ withItemsLabelProperty(itemsLabelProperty) {
341
+ this._itemsLabelProperty = itemsLabelProperty;
342
+ return this;
343
+ }
344
+ withItemsValueProperty(itemsValueProperty) {
345
+ this._itemsValueProperty = itemsValueProperty;
346
+ return this;
347
+ }
348
+ withDataKeyProperty(dataKeyProperty) {
349
+ this._dataKeyProperty = dataKeyProperty;
350
+ return this;
351
+ }
352
+ get dropdownClassName() {
353
+ return this._dropdownClassName;
354
+ }
355
+ withLookup(lookup, serviceType) {
356
+ const dataProvider = new LookupDataProvider(this._modelType);
357
+ if (serviceType) {
358
+ dataProvider.withServiceType(serviceType);
359
+ }
360
+ dataProvider.withLookup(lookup);
361
+ this._dataProvider = dataProvider;
362
+ return this;
363
+ }
364
+ withLookupDataProvider(dataProvider) {
365
+ this._dataProvider = dataProvider;
366
+ return this;
367
+ }
368
+ withMultiselect(multiselect = true) {
369
+ this._multiselect = multiselect;
370
+ return this;
371
+ }
372
+ withDropdownClassName(dropdownClassName) {
373
+ this._dropdownClassName = dropdownClassName;
374
+ return this;
375
+ }
376
+ asAutocomplete() {
377
+ this._lookupType = FilterLookupDescriptor.LookupTypeEnum.Autocomplete;
378
+ return this;
379
+ }
380
+ copyFieldsTo(descriptor) {
381
+ super.copyFieldsTo(descriptor);
382
+ descriptor._dataProvider = this._dataProvider;
383
+ descriptor._lookupType = this._lookupType;
384
+ descriptor._itemsLabelProperty = this._itemsLabelProperty;
385
+ descriptor._itemsValueProperty = this._itemsValueProperty;
386
+ descriptor._dataKeyProperty = this._dataKeyProperty;
387
+ }
388
+ copy() {
389
+ const descriptor = new FilterLookupDescriptor(this._property, this._modelType);
390
+ this.copyFieldsTo(descriptor);
391
+ return descriptor;
392
+ }
393
+ }
394
+ (function (FilterLookupDescriptor) {
395
+ let LookupTypeEnum;
396
+ (function (LookupTypeEnum) {
397
+ LookupTypeEnum[LookupTypeEnum["Dropdown"] = 0] = "Dropdown";
398
+ LookupTypeEnum[LookupTypeEnum["Autocomplete"] = 1] = "Autocomplete";
399
+ })(LookupTypeEnum = FilterLookupDescriptor.LookupTypeEnum || (FilterLookupDescriptor.LookupTypeEnum = {}));
400
+ })(FilterLookupDescriptor || (FilterLookupDescriptor = {}));
401
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZGVzY3JpcHRvcnMvdGFibGUuZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFzQixrQkFBa0IsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzFFLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFHbkMsTUFBTSxPQUFPLGVBQWU7SUFleEIsWUFBWSxTQUF1QixFQUFFLFVBQW1CLEVBQUUsYUFBc0I7UUFaeEUsbUJBQWMsR0FBc0MsZUFBZSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQztRQUMzRixvQkFBZSxHQUF1QyxlQUFlLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDO1FBQ3BHLGFBQVEsR0FBb0MsRUFBRSxDQUFDO1FBRy9DLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLHlCQUFvQixHQUFhLEVBQUUsQ0FBQztRQUNwQyxvQkFBZSxHQUFjLEVBQUUsQ0FBQztRQUVoQyxlQUFVLEdBQVcsRUFBRSxDQUFDO1FBQ3hCLDJCQUFzQixHQUFXLEdBQUcsQ0FBQztRQUd6QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksZUFBZSxDQUFJLFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBVyxhQUFhO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBVyxjQUFjO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFD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O0NBQ0o7QUFFRCxXQUFpQixzQkFBc0I7SUFDbkMsSUFBWSxjQUdYO0lBSEQsV0FBWSxjQUFjO1FBQ3RCLDJEQUFRLENBQUE7UUFDUixtRUFBWSxDQUFBO0lBQ2hCLENBQUMsRUFIVyxjQUFjLEdBQWQscUNBQWMsS0FBZCxxQ0FBYyxRQUd6QjtBQUNMLENBQUMsRUFMZ0Isc0JBQXNCLEtBQXRCLHNCQUFzQixRQUt0QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VHlwZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7TW9kZWxEZXNjcmlwdG9yfSBmcm9tICcuL21vZGVsLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtJTG9va3VwRGVzY3JpcHRvcn0gZnJvbSAnLi9sb29rdXAuZGVzY3JpcHRvcic7XG5pbXBvcnQge0NsYXNzVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtJTG9va3VwRGF0YVByb3ZpZGVyLCBMb29rdXBEYXRhUHJvdmlkZXJ9IGZyb20gJy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7TW9kZWxVdGlsfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge01lZGl1c1F1ZXJ5UGFyYW19IGZyb20gJy4uL2FwaS9tb2RlbHMnO1xuXG5leHBvcnQgY2xhc3MgVGFibGVEZXNjcmlwdG9yPFQ+IHtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgX21vZGVsOiBNb2RlbERlc2NyaXB0b3I8VD47XG4gICAgcHJpdmF0ZSBfZmlsdGVyRGlzcGxheTogVGFibGVEZXNjcmlwdG9yLkZpbHRlckRpc3BsYXlFbnVtID0gVGFibGVEZXNjcmlwdG9yLkZpbHRlckRpc3BsYXlFbnVtLk1lbnU7XG4gICAgcHJpdmF0ZSBfcGFnaW5hdGlvbk1vZGU6IFRhYmxlRGVzY3JpcHRvci5QYWdpbmF0aW9uTW9kZUVudW0gPSBUYWJsZURlc2NyaXB0b3IuUGFnaW5hdGlvbk1vZGVFbnVtLlBhZ2luYXRpb247XG4gICAgcHJpdmF0ZSBfY29sdW1uczogQXJyYXk8Q29sdW1uRGVzY3JpcHRvcjxhbnksIFQ+PiA9IFtdO1xuICAgIHByaXZhdGUgX3RpdGxlPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX2RhdGFLZXlQcm9wZXJ0eT86IHN0cmluZztcbiAgICBwcml2YXRlIF9oYXNEZWZhdWx0U29ydDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2RlZmF1bHRTb3J0UHJvcGVydHk6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBfZGVmYXVsdFNvcnRBc2M6IGJvb2xlYW5bXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBfcm93SGVpZ2h0OiBudW1iZXIgPSA0NTtcbiAgICBwcml2YXRlIF90YWJsZUZ1bGxIZWlnaHRPZmZzZXQ6IG51bWJlciA9IDMxNTtcblxuICAgIGNvbnN0cnVjdG9yKG1vZGVsVHlwZTogQ2xhc3NUeXBlPFQ+LCBpZFByb3BlcnR5Pzogc3RyaW5nLCB0aXRsZVByb3BlcnR5Pzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21vZGVsID0gbmV3IE1vZGVsRGVzY3JpcHRvcjxUPihtb2RlbFR5cGUsIGlkUHJvcGVydHksIHRpdGxlUHJvcGVydHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbW9kZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb2RlbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpbHRlckRpc3BsYXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJEaXNwbGF5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGFnaW5hdGlvbk1vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYWdpbmF0aW9uTW9kZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aXRsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGFLZXlQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFLZXlQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc0RlZmF1bHRTb3J0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzRGVmYXVsdFNvcnQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkZWZhdWx0U29ydFByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFNvcnRQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRlZmF1bHRTb3J0QXNjKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFNvcnRBc2M7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dIZWlnaHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dIZWlnaHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0YWJsZUZ1bGxIZWlnaHRPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZUZ1bGxIZWlnaHRPZmZzZXQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENvbHVtbkRlc2NyaXB0b3I8Q1Q+KGNvbHVtbjogQ29sdW1uRGVzY3JpcHRvcjxDVCwgVD4pOiBUYWJsZURlc2NyaXB0b3I8VD4ge1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgdGhpcy5zZXREYXRhS2V5RnJvbUNvbHVtbigpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ29sdW1uKHByb3BlcnR5OiBzdHJpbmcpOiBDb2x1bW5EZXNjcmlwdG9yPHN0cmluZywgVD4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxzdHJpbmcsIFQ+KHRoaXMsIHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIHRoaXMuc2V0RGF0YUtleUZyb21Db2x1bW4oKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ29sdW1uTnVtYmVyKHByb3BlcnR5OiBzdHJpbmcsIGRpc3BsYXlGb3JtYXQ/OiBzdHJpbmcpOiBDb2x1bW5EZXNjcmlwdG9yPG51bWJlciwgVD4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxudW1iZXIsIFQ+KHRoaXMsIHByb3BlcnR5KTtcbiAgICAgICAgY29sdW1uLmFzTnVtYmVyKGRpc3BsYXlGb3JtYXQpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgdGhpcy5zZXREYXRhS2V5RnJvbUNvbHVtbigpO1xuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRDb2x1bW5EYXRlKHByb3BlcnR5OiBzdHJpbmcsIGRpc3BsYXlGb3JtYXQ/OiBzdHJpbmcpOiBDb2x1bW5EZXNjcmlwdG9yPERhdGUsIFQ+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbmV3IENvbHVtbkRlc2NyaXB0b3I8RGF0ZSwgVD4odGhpcywgcHJvcGVydHkpO1xuICAgICAgICBjb2x1bW4uYXNEYXRlKGRpc3BsYXlGb3JtYXQpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgdGhpcy5zZXREYXRhS2V5RnJvbUNvbHVtbigpO1xuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRDb2x1bW5Cb29sZWFuKHByb3BlcnR5OiBzdHJpbmcpOiBDb2x1bW5EZXNjcmlwdG9yPGJvb2xlYW4sIFQ+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbmV3IENvbHVtbkRlc2NyaXB0b3I8Ym9vbGVhbiwgVD4odGhpcywgcHJvcGVydHkpO1xuICAgICAgICBjb2x1bW4uYXNCb29sZWFuKCk7XG4gICAgICAgIHRoaXMuX2NvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICB0aGlzLnNldERhdGFLZXlGcm9tQ29sdW1uKCk7XG4gICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENvbHVtbk9iamVjdDxDVD4ocHJvcGVydHk6IHN0cmluZywgbW9kZWxUeXBlOiBDbGFzc1R5cGU8Q1Q+LCBkaXNwbGF5UHJvcGVydHk6IHN0cmluZyk6IENvbHVtbkRlc2NyaXB0b3I8Q1QsIFQ+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbmV3IENvbHVtbkRlc2NyaXB0b3I8Q1QsIFQ+KHRoaXMsIHByb3BlcnR5KTtcbiAgICAgICAgY29sdW1uLndpdGhNb2RlbFR5cGUobW9kZWxUeXBlKTtcbiAgICAgICAgY29sdW1uLndpdGhEaXNwbGF5UHJvcGVydHlQYXRoKGRpc3BsYXlQcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX2NvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICB0aGlzLnNldERhdGFLZXlGcm9tQ29sdW1uKCk7XG4gICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGaWx0ZXJEaXNwbGF5KGZpbHRlckRpc3BsYXlUeXBlOiBUYWJsZURlc2NyaXB0b3IuRmlsdGVyRGlzcGxheUVudW0pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmlsdGVyRGlzcGxheSA9IGZpbHRlckRpc3BsYXlUeXBlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFBhZ2luYXRpb25Nb2RlKHBhZ2luYXRpb25Nb2RlOiBUYWJsZURlc2NyaXB0b3IuUGFnaW5hdGlvbk1vZGVFbnVtKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3BhZ2luYXRpb25Nb2RlID0gcGFnaW5hdGlvbk1vZGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVGl0bGUodGl0bGU6IHN0cmluZyk6IFRhYmxlRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIHRoaXMuX3RpdGxlID0gdGl0bGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGF0YUtleVByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiBUYWJsZURlc2NyaXB0b3I8VD4ge1xuICAgICAgICB0aGlzLl9kYXRhS2V5UHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhEZWZhdWx0U29ydChwcm9wZXJ0eTogc3RyaW5nLCBhc2M6IGJvb2xlYW4gPSB0cnVlKTogVGFibGVEZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgdGhpcy5faGFzRGVmYXVsdFNvcnQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9kZWZhdWx0U29ydFByb3BlcnR5LnB1c2gocHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9kZWZhdWx0U29ydEFzYy5wdXNoKGFzYyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUm93SGVpZ2h0KHJvd0hlaWdodDogbnVtYmVyKTogVGFibGVEZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgdGhpcy5fcm93SGVpZ2h0ID0gcm93SGVpZ2h0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFRhYmxlRnVsbEhlaWdodE9mZnNldCh0YWJsZUZ1bGxIZWlnaHRPZmZzZXQ6IG51bWJlcik6IFRhYmxlRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIHRoaXMuX3RhYmxlRnVsbEhlaWdodE9mZnNldCA9IHRhYmxlRnVsbEhlaWdodE9mZnNldDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREYXRhS2V5RnJvbUNvbHVtbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9kYXRhS2V5UHJvcGVydHkgJiYgdGhpcy5fY29sdW1ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGFLZXlQcm9wZXJ0eSA9IHRoaXMuX2NvbHVtbnNbMF0ucHJvcGVydHk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY29weSgpOiBUYWJsZURlc2NyaXB0b3I8VD4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IFRhYmxlRGVzY3JpcHRvcih0aGlzLm1vZGVsLnR5cGUsIHRoaXMubW9kZWwuaWRQcm9wZXJ0eU5hbWUsIHRoaXMubW9kZWwudGl0bGVQcm9wZXJ0eU5hbWUpO1xuICAgICAgICBkZXNjcmlwdG9yLl9jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChjID0+IGMuY29weSgpKTtcbiAgICAgICAgZGVzY3JpcHRvci5fdGl0bGUgPSB0aGlzLl90aXRsZTtcbiAgICAgICAgZGVzY3JpcHRvci5fZGF0YUtleVByb3BlcnR5ID0gdGhpcy5fZGF0YUtleVByb3BlcnR5O1xuICAgICAgICBkZXNjcmlwdG9yLl9kZWZhdWx0U29ydFByb3BlcnR5ID0gdGhpcy5fZGVmYXVsdFNvcnRQcm9wZXJ0eS5tYXAocCA9PiBwKTtcbiAgICAgICAgZGVzY3JpcHRvci5fZGVmYXVsdFNvcnRBc2MgPSB0aGlzLl9kZWZhdWx0U29ydEFzYy5tYXAocCA9PiBwKTtcbiAgICAgICAgZGVzY3JpcHRvci5fZmlsdGVyRGlzcGxheSA9IHRoaXMuX2ZpbHRlckRpc3BsYXk7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBUYWJsZURlc2NyaXB0b3Ige1xuICAgIGV4cG9ydCBlbnVtIFBhZ2luYXRpb25Nb2RlRW51bSB7XG4gICAgICAgIFBhZ2luYXRpb24sXG4gICAgICAgIEluZmluaXRlU2Nyb2xsXG4gICAgfVxuXG4gICAgZXhwb3J0IGVudW0gRmlsdGVyRGlzcGxheUVudW0ge1xuICAgICAgICBSb3csXG4gICAgICAgIE1lbnVcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5EZXNjcmlwdG9yPFQsIFRUPiB7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF90YWJsZTogVGFibGVEZXNjcmlwdG9yPFRUPjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9wcm9wZXJ0eTogc3RyaW5nO1xuICAgIHByaXZhdGUgX21vZGVsVHlwZTogQ2xhc3NUeXBlPFQ+fG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX2NvbHVtblR5cGU6IENvbHVtbkRlc2NyaXB0b3IuVHlwZUVudW0gPSBDb2x1bW5EZXNjcmlwdG9yLlR5cGVFbnVtLlN0cmluZztcbiAgICBwcml2YXRlIF90aXRsZT86IHN0cmluZztcbiAgICBwcml2YXRlIF9kaXNwbGF5UHJvcGVydHlQYXRoPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX2lzU29ydEVuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwcml2YXRlIF9maWx0ZXJEZXNjcmlwdG9yPzogRmlsdGVyRGVzY3JpcHRvcjxUPjtcbiAgICBwcml2YXRlIF9kaXNwbGF5Rm9ybWF0Pzogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IodGFibGU6IFRhYmxlRGVzY3JpcHRvcjxUVD4sIHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fdGFibGUgPSB0YWJsZTtcbiAgICAgICAgdGhpcy5fcHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbW9kZWxUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9kZWxUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGlzcGxheVByb3BlcnR5UGF0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlQcm9wZXJ0eVBhdGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0aXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RpdGxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNTb3J0RW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzU29ydEVuYWJsZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb2x1bW5UeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1uVHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpbHRlckRlc2NyaXB0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGlzcGxheUZvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlGb3JtYXQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzVHlwZSh0eXBlOiBDb2x1bW5EZXNjcmlwdG9yLlR5cGVFbnVtID0gQ29sdW1uRGVzY3JpcHRvci5UeXBlRW51bS5TdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY29sdW1uVHlwZSA9IHR5cGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc051bWJlcihkaXNwbGF5Rm9ybWF0OiBzdHJpbmcgPSAnMS4wLTAnKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NvbHVtblR5cGUgPSBDb2x1bW5EZXNjcmlwdG9yLlR5cGVFbnVtLk51bWJlcjtcbiAgICAgICAgdGhpcy5fZGlzcGxheUZvcm1hdCA9IGRpc3BsYXlGb3JtYXQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0RhdGUoZGlzcGxheUZvcm1hdDogc3RyaW5nID0gJ2RkLk1NLnl5eXknKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NvbHVtblR5cGUgPSBDb2x1bW5EZXNjcmlwdG9yLlR5cGVFbnVtLkRhdGU7XG4gICAgICAgIHRoaXMuX2Rpc3BsYXlGb3JtYXQgPSBkaXNwbGF5Rm9ybWF0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNCb29sZWFuKCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb2x1bW5UeXBlID0gQ29sdW1uRGVzY3JpcHRvci5UeXBlRW51bS5Cb29sZWFuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aE1vZGVsVHlwZShtb2RlbFR5cGU6IENsYXNzVHlwZTxUPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9tb2RlbFR5cGUgPSBtb2RlbFR5cGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVGl0bGUodGl0bGU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl90aXRsZSA9IHRpdGxlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERpc3BsYXlQcm9wZXJ0eVBhdGgoZGlzcGxheVByb3BlcnR5UGF0aDogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2Rpc3BsYXlQcm9wZXJ0eVBhdGggPSBkaXNwbGF5UHJvcGVydHlQYXRoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEZpbHRlcigpOiBGaWx0ZXJEZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgdGhpcy5fZmlsdGVyRGVzY3JpcHRvciA9IG5ldyBGaWx0ZXJEZXNjcmlwdG9yPGFueT4odGhpcy5fcHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9maWx0ZXJEZXNjcmlwdG9yLmFzRmlsdGVyVHlwZSh0aGlzLl9jb2x1bW5UeXBlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlckRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGaWx0ZXJMb29rdXAoKTogRmlsdGVyTG9va3VwRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIGNvbnN0IGZpbHRlckRlc2NyaXB0b3IgPSBuZXcgRmlsdGVyTG9va3VwRGVzY3JpcHRvcjxhbnk+KHRoaXMuX3Byb3BlcnR5LCB0aGlzLl9tb2RlbFR5cGUpO1xuICAgICAgICB0aGlzLl9maWx0ZXJEZXNjcmlwdG9yID0gZmlsdGVyRGVzY3JpcHRvcjtcbiAgICAgICAgcmV0dXJuIGZpbHRlckRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTb3J0KGlzRW5hYmxlZDogYm9vbGVhbiA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNTb3J0RW5hYmxlZCA9IGlzRW5hYmxlZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHkoKTogQ29sdW1uRGVzY3JpcHRvcjxULCBUVD4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IENvbHVtbkRlc2NyaXB0b3I8VCwgVFQ+KHRoaXMuX3RhYmxlLCB0aGlzLl9wcm9wZXJ0eSk7XG4gICAgICAgIGRlc2NyaXB0b3IuX2Rpc3BsYXlQcm9wZXJ0eVBhdGggPSB0aGlzLl9kaXNwbGF5UHJvcGVydHlQYXRoO1xuICAgICAgICBkZXNjcmlwdG9yLl90aXRsZSA9IHRoaXMuX3RpdGxlO1xuICAgICAgICBkZXNjcmlwdG9yLl9pc1NvcnRFbmFibGVkID0gdGhpcy5faXNTb3J0RW5hYmxlZDtcbiAgICAgICAgZGVzY3JpcHRvci5fY29sdW1uVHlwZSA9IHRoaXMuX2NvbHVtblR5cGU7XG4gICAgICAgIGRlc2NyaXB0b3IuX2ZpbHRlckRlc2NyaXB0b3IgPSB0aGlzLl9maWx0ZXJEZXNjcmlwdG9yPy5jb3B5KCk7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBDb2x1bW5EZXNjcmlwdG9yIHtcbiAgICBleHBvcnQgZW51bSBUeXBlRW51bSB7XG4gICAgICAgIFN0cmluZyxcbiAgICAgICAgTnVtYmVyLFxuICAgICAgICBCb29sZWFuLFxuICAgICAgICBEYXRlXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmlsdGVyRGVzY3JpcHRvcjxUPiB7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3Byb3BlcnR5OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9maWx0ZXJUeXBlID0gRmlsdGVyRGVzY3JpcHRvci5UeXBlRW51bS5TdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9maWx0ZXJQcm9wZXJ0eT86IHN0cmluZztcblxuICAgIHByb3RlY3RlZCBfcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9jbGFzc05hbWU6IHN0cmluZyA9ICcnO1xuXG4gICAgY29uc3RydWN0b3IocHJvcGVydHk6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9wcm9wZXJ0eSA9IHByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpbHRlclR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmlsdGVyUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBsYWNlaG9sZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGFzRmlsdGVyVHlwZShmaWx0ZXJUeXBlOiBDb2x1bW5EZXNjcmlwdG9yLlR5cGVFbnVtKSB7XG4gICAgICAgIHRoaXMuX2ZpbHRlclR5cGUgPSBmaWx0ZXJUeXBlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGRpZmZlcmVudCBmaWx0ZXIgcHJvcGVydHkgbmFtZSBpbnN0ZWFkIG9mIGRlZmF1bHQgcHJvcGVydHkuIFVzZSB0aGlzIGlmIEFQSSByZXF1aXJlcyBkaWZmZXJlbnQgcHJvcGVydHkgcHJvdmlkZWQgdG8gcGVyZm9ybSBjb3JyZWN0IGZpbHRlci5cbiAgICAgKiBAcGFyYW0gZmlsdGVyUHJvcGVydHlcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEZpbHRlclByb3BlcnR5KGZpbHRlclByb3BlcnR5OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmlsdGVyUHJvcGVydHkgPSBmaWx0ZXJQcm9wZXJ0eTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhQbGFjZWhvbGRlcihwbGFjZWhvbGRlcjogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQ2xhc3NOYW1lKGNsYXNzTmFtZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yOiBGaWx0ZXJEZXNjcmlwdG9yPFQ+KSB7XG4gICAgICAgIGRlc2NyaXB0b3IuX2ZpbHRlclR5cGUgPSB0aGlzLl9maWx0ZXJUeXBlO1xuICAgICAgICBkZXNjcmlwdG9yLl9maWx0ZXJQcm9wZXJ0eSA9IHRoaXMuX2ZpbHRlclByb3BlcnR5O1xuICAgICAgICBkZXNjcmlwdG9yLl9wbGFjZWhvbGRlciA9IHRoaXMuX3BsYWNlaG9sZGVyO1xuICAgICAgICBkZXNjcmlwdG9yLl9jbGFzc05hbWUgPSB0aGlzLl9jbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHkoKTogRmlsdGVyRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBuZXcgRmlsdGVyRGVzY3JpcHRvcjxUPih0aGlzLl9wcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuY29weUZpZWxkc1RvKGRlc2NyaXB0b3IpO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgRmlsdGVyRGVzY3JpcHRvciB7XG4gICAgZXhwb3J0IGVudW0gVHlwZUVudW0ge1xuICAgICAgICBTdHJpbmcsXG4gICAgICAgIE51bWJlcixcbiAgICAgICAgQm9vbGVhbixcbiAgICAgICAgRGF0ZSxcbiAgICAgICAgTG9va3VwXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmlsdGVyTG9va3VwRGVzY3JpcHRvcjxUPiBleHRlbmRzIEZpbHRlckRlc2NyaXB0b3I8VD4gaW1wbGVtZW50cyBJTG9va3VwRGVzY3JpcHRvcjxUPiB7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9tb2RlbFR5cGU6IENsYXNzVHlwZTxUPnxudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIF9sb29rdXBUeXBlPzogRmlsdGVyTG9va3VwRGVzY3JpcHRvci5Mb29rdXBUeXBlRW51bSA9IEZpbHRlckxvb2t1cERlc2NyaXB0b3IuTG9va3VwVHlwZUVudW0uRHJvcGRvd247XG5cbiAgICBwcml2YXRlIF9kYXRhUHJvdmlkZXI/OiBJTG9va3VwRGF0YVByb3ZpZGVyPFQsIGFueT47XG4gICAgcHJpdmF0ZSBfaXRlbXNMYWJlbFByb3BlcnR5Pzogc3RyaW5nO1xuICAgIHByaXZhdGUgX2l0ZW1zVmFsdWVQcm9wZXJ0eT86IHN0cmluZztcbiAgICBwcml2YXRlIF9kYXRhS2V5UHJvcGVydHk/IDogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBfbXVsdGlzZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgX2Ryb3Bkb3duQ2xhc3NOYW1lOiBzdHJpbmcgPSAnbW5nLWZpbHRlci1sb29rdXAtZHJvcGRvd24nO1xuXG4gICAgY29uc3RydWN0b3IocHJvcGVydHk6IHN0cmluZywgbW9kZWxUeXBlOiBDbGFzc1R5cGU8VD58bnVsbCkge1xuICAgICAgICBzdXBlcihwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX21vZGVsVHlwZSA9IG1vZGVsVHlwZTtcbiAgICAgICAgdGhpcy5fZmlsdGVyVHlwZSA9IEZpbHRlckRlc2NyaXB0b3IuVHlwZUVudW0uTG9va3VwO1xuICAgICAgICBNb2RlbFV0aWwudHJ5U2V0TG9va3VwSXRlbXNQcm9wZXJ0aWVzKHRoaXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbW9kZWxUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9kZWxUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9va3VwVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvb2t1cFR5cGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpdGVtc0xhYmVsUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtc0xhYmVsUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpdGVtc1ZhbHVlUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtc1ZhbHVlUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRhS2V5UHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhS2V5UHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRhUHJvdmlkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtdWx0aXNlbGVjdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX211bHRpc2VsZWN0O1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSXRlbXNMYWJlbFByb3BlcnR5KGl0ZW1zTGFiZWxQcm9wZXJ0eTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2l0ZW1zTGFiZWxQcm9wZXJ0eSA9IGl0ZW1zTGFiZWxQcm9wZXJ0eTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhJdGVtc1ZhbHVlUHJvcGVydHkoaXRlbXNWYWx1ZVByb3BlcnR5OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXRlbXNWYWx1ZVByb3BlcnR5ID0gaXRlbXNWYWx1ZVByb3BlcnR5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERhdGFLZXlQcm9wZXJ0eShkYXRhS2V5UHJvcGVydHk6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9kYXRhS2V5UHJvcGVydHkgPSBkYXRhS2V5UHJvcGVydHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZHJvcGRvd25DbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kcm9wZG93bkNsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExvb2t1cDxTPihsb29rdXA6IChxdWVyeVBhcmFtPzogTWVkaXVzUXVlcnlQYXJhbSwgc2VydmljZT86IFMsIHNlYXJjaD86IHN0cmluZykgPT4gT2JzZXJ2YWJsZTxBcnJheTxUPj4sIHNlcnZpY2VUeXBlPzogVHlwZTxTPik6IHRoaXMge1xuICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXIgPSBuZXcgTG9va3VwRGF0YVByb3ZpZGVyPFQsIFM+KHRoaXMuX21vZGVsVHlwZSk7XG4gICAgICAgIGlmIChzZXJ2aWNlVHlwZSkge1xuICAgICAgICAgICAgZGF0YVByb3ZpZGVyLndpdGhTZXJ2aWNlVHlwZShzZXJ2aWNlVHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVByb3ZpZGVyLndpdGhMb29rdXAobG9va3VwKTtcbiAgICAgICAgdGhpcy5fZGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExvb2t1cERhdGFQcm92aWRlcihkYXRhUHJvdmlkZXI6IElMb29rdXBEYXRhUHJvdmlkZXI8VCwgYW55Pik6IHRoaXMge1xuICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoTXVsdGlzZWxlY3QobXVsdGlzZWxlY3QgPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuX211bHRpc2VsZWN0ID0gbXVsdGlzZWxlY3Q7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRHJvcGRvd25DbGFzc05hbWUoZHJvcGRvd25DbGFzc05hbWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9kcm9wZG93bkNsYXNzTmFtZSA9IGRyb3Bkb3duQ2xhc3NOYW1lO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNBdXRvY29tcGxldGUoKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2xvb2t1cFR5cGUgPSBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yLkxvb2t1cFR5cGVFbnVtLkF1dG9jb21wbGV0ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yOiBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yPFQ+KSB7XG4gICAgICAgIHN1cGVyLmNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yKTtcbiAgICAgICAgZGVzY3JpcHRvci5fZGF0YVByb3ZpZGVyID0gdGhpcy5fZGF0YVByb3ZpZGVyO1xuICAgICAgICBkZXNjcmlwdG9yLl9sb29rdXBUeXBlID0gdGhpcy5fbG9va3VwVHlwZTtcbiAgICAgICAgZGVzY3JpcHRvci5faXRlbXNMYWJlbFByb3BlcnR5ID0gdGhpcy5faXRlbXNMYWJlbFByb3BlcnR5O1xuICAgICAgICBkZXNjcmlwdG9yLl9pdGVtc1ZhbHVlUHJvcGVydHkgPSB0aGlzLl9pdGVtc1ZhbHVlUHJvcGVydHk7XG4gICAgICAgIGRlc2NyaXB0b3IuX2RhdGFLZXlQcm9wZXJ0eSA9IHRoaXMuX2RhdGFLZXlQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29weSgpOiBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IG5ldyBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yPFQ+KHRoaXMuX3Byb3BlcnR5LCB0aGlzLl9tb2RlbFR5cGUpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yKTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIEZpbHRlckxvb2t1cERlc2NyaXB0b3Ige1xuICAgIGV4cG9ydCBlbnVtIExvb2t1cFR5cGVFbnVtIHtcbiAgICAgICAgRHJvcGRvd24sXG4gICAgICAgIEF1dG9jb21wbGV0ZVxuICAgIH1cbn1cbiJdfQ==