@mediusinc/mng-commons 0.0.1-rc.2 → 0.2.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 (436) hide show
  1. package/README.md +97 -2
  2. package/assets/i18n/en.json +156 -0
  3. package/assets/i18n/sl.json +156 -0
  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/assets/templates/tableview-route.component.html +5 -0
  15. package/esm2020/lib/api/models/builders/query-param.builder.mjs +9 -10
  16. package/esm2020/lib/api/models/filter-match-type.model.mjs +14 -12
  17. package/esm2020/lib/api/models/filter-param.model.mjs +6 -6
  18. package/esm2020/lib/api/models/mappers.mjs +12 -12
  19. package/esm2020/lib/api/models/query-mode.model.mjs +7 -7
  20. package/esm2020/lib/api/models/query-param.model.mjs +5 -5
  21. package/esm2020/lib/api/models/query-result.model.mjs +15 -15
  22. package/esm2020/lib/api/services/{abstract-crud-api.service.mjs → crud-api.abstract.service.mjs} +2 -2
  23. package/esm2020/lib/api/services/index.mjs +2 -2
  24. package/esm2020/lib/api/utils/medius-rest.util.mjs +99 -47
  25. package/esm2020/lib/api/utils/object-serializer.util.mjs +1 -1
  26. package/esm2020/lib/components/action/action.component.mjs +10 -8
  27. package/esm2020/lib/components/action/dialog/action-dialog.component.mjs +24 -24
  28. package/esm2020/lib/components/action/models/action-confirmation-service.model.mjs +2 -0
  29. package/esm2020/lib/components/action/models/action-execution.model.mjs +58 -0
  30. package/esm2020/lib/components/action/models/index.mjs +3 -0
  31. package/esm2020/lib/components/action/route/action-route.component.mjs +9 -9
  32. package/esm2020/lib/components/form/autocomplete/autocomplete.component.mjs +114 -0
  33. package/esm2020/lib/components/form/dropdown/dropdown.component.mjs +113 -0
  34. package/esm2020/lib/components/form/editor/form-editor.component.mjs +24 -23
  35. package/esm2020/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +9 -48
  36. package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +9 -41
  37. package/esm2020/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +5 -5
  38. package/esm2020/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +5 -5
  39. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +33 -18
  40. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +11 -13
  41. package/esm2020/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +5 -5
  42. package/esm2020/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +5 -5
  43. package/esm2020/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.mjs +5 -5
  44. package/esm2020/lib/components/form/index.mjs +3 -1
  45. package/esm2020/lib/components/form/models/form-editor.event.mjs +7 -0
  46. package/esm2020/lib/components/form/models/index.mjs +2 -0
  47. package/esm2020/lib/components/layout/breadcrumb.component.mjs +17 -0
  48. package/esm2020/lib/components/layout/footer.component.mjs +17 -0
  49. package/esm2020/lib/components/layout/index.mjs +7 -7
  50. package/esm2020/lib/components/layout/main-layout.component.mjs +54 -0
  51. package/esm2020/lib/components/layout/menu-item.component.mjs +173 -0
  52. package/esm2020/lib/components/layout/menu.component.mjs +20 -0
  53. package/esm2020/lib/components/layout/services/index.mjs +2 -0
  54. package/esm2020/lib/components/layout/services/main-layout.component.service.mjs +190 -0
  55. package/esm2020/lib/components/layout/topbar.component.mjs +59 -0
  56. package/esm2020/lib/components/tableview/index.mjs +3 -1
  57. package/esm2020/lib/components/tableview/models/index.mjs +2 -0
  58. package/esm2020/lib/components/tableview/models/table.event.mjs +16 -0
  59. package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +2 -9
  60. package/esm2020/lib/components/tableview/services/index.mjs +2 -0
  61. package/esm2020/lib/components/tableview/services/tableview.component.service.mjs +17 -0
  62. package/esm2020/lib/components/tableview/table/column-filter/column-filter.component.mjs +74 -0
  63. package/esm2020/lib/components/tableview/table/column-value/column-value.component.mjs +25 -0
  64. package/esm2020/lib/components/tableview/table/table.component.mjs +180 -46
  65. package/esm2020/lib/components/tableview/tableview.component.mjs +13 -13
  66. package/esm2020/lib/config/formly.config.mjs +35 -64
  67. package/esm2020/lib/{models/config → config/models}/index.mjs +1 -1
  68. package/esm2020/lib/config/models/mng-config.model.mjs +2 -0
  69. package/esm2020/lib/data-providers/base.data-provider.mjs +24 -0
  70. package/esm2020/lib/data-providers/editor.data-provider.mjs +37 -0
  71. package/esm2020/lib/data-providers/index.mjs +6 -0
  72. package/esm2020/lib/data-providers/lookup.data-provider.mjs +16 -0
  73. package/esm2020/lib/data-providers/table.data-provider.mjs +2 -0
  74. package/esm2020/lib/data-providers/tableview.data-provider.mjs +17 -0
  75. package/esm2020/lib/descriptors/action.descriptor.mjs +332 -0
  76. package/esm2020/lib/descriptors/editor.descriptor.mjs +670 -0
  77. package/esm2020/lib/descriptors/field.validator.mjs +21 -0
  78. package/esm2020/lib/descriptors/index.mjs +8 -0
  79. package/esm2020/lib/descriptors/lookup.descriptor.mjs +2 -0
  80. package/esm2020/lib/descriptors/model.descriptor.mjs +34 -0
  81. package/esm2020/lib/descriptors/table.descriptor.mjs +401 -0
  82. package/esm2020/lib/descriptors/tableview.descriptor.mjs +131 -0
  83. package/esm2020/lib/directives/component.directive.mjs +23 -0
  84. package/esm2020/lib/directives/index.mjs +2 -1
  85. package/esm2020/lib/directives/template.directive.mjs +11 -7
  86. package/esm2020/lib/mng-commons.module.mjs +201 -129
  87. package/esm2020/lib/models/index.mjs +3 -0
  88. package/esm2020/lib/models/router.model.mjs +2 -0
  89. package/esm2020/lib/models/user.model.mjs +2 -0
  90. package/esm2020/lib/pipes/boolean.pipe.mjs +22 -0
  91. package/esm2020/lib/pipes/index.mjs +2 -1
  92. package/esm2020/lib/pipes/property-path.pipe.mjs +5 -5
  93. package/esm2020/lib/services/action.service.mjs +55 -25
  94. package/esm2020/lib/services/commons.service.mjs +353 -0
  95. package/esm2020/lib/services/configuration.service.mjs +8 -7
  96. package/esm2020/lib/services/index.mjs +2 -4
  97. package/esm2020/lib/services/navigation.service.mjs +5 -6
  98. package/esm2020/lib/services/providers/commons-init.provider.mjs +4 -0
  99. package/esm2020/lib/services/providers/config-service.provider.mjs +14 -6
  100. package/esm2020/lib/services/providers/formly-config.provider.mjs +2 -2
  101. package/esm2020/lib/services/providers/index.mjs +2 -1
  102. package/esm2020/lib/services/tokens/browser-storage.token.mjs +6 -0
  103. package/esm2020/lib/services/tokens/index.mjs +3 -0
  104. package/esm2020/lib/services/tokens/module-config.token.mjs +3 -0
  105. package/esm2020/lib/types/index.mjs +3 -0
  106. package/esm2020/lib/types/type.decorator.mjs +7 -0
  107. package/esm2020/lib/types/type.model.mjs +2 -0
  108. package/esm2020/lib/utils/editor-formly.util.mjs +23 -12
  109. package/esm2020/lib/utils/i18n.util.mjs +63 -13
  110. package/esm2020/lib/utils/index.mjs +2 -1
  111. package/esm2020/lib/utils/model.util.mjs +20 -1
  112. package/esm2020/lib/utils/toast.util.mjs +39 -0
  113. package/esm2020/lib/utils/type.util.mjs +2 -6
  114. package/esm2020/public-api.mjs +12 -9
  115. package/fesm2015/mediusinc-mng-commons.mjs +4552 -3358
  116. package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
  117. package/fesm2020/mediusinc-mng-commons.mjs +4520 -3356
  118. package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
  119. package/lib/api/models/builders/query-param.builder.d.ts +9 -9
  120. package/lib/api/models/filter-match-type.model.d.ts +7 -5
  121. package/lib/api/models/filter-param.model.d.ts +3 -3
  122. package/lib/api/models/query-mode.model.d.ts +1 -1
  123. package/lib/api/models/query-param.model.d.ts +5 -5
  124. package/lib/api/models/query-result.model.d.ts +5 -5
  125. package/lib/api/services/{abstract-crud-api.service.d.ts → crud-api.abstract.service.d.ts} +4 -4
  126. package/lib/api/services/index.d.ts +1 -1
  127. package/lib/api/utils/medius-rest.util.d.ts +9 -3
  128. package/lib/api/utils/object-serializer.util.d.ts +1 -1
  129. package/lib/components/action/action.component.d.ts +10 -10
  130. package/lib/components/action/dialog/action-dialog.component.d.ts +13 -15
  131. package/lib/{models/interfaces/confirmation-service.model.d.ts → components/action/models/action-confirmation-service.model.d.ts} +2 -2
  132. package/lib/{models/action/action.model.d.ts → components/action/models/action-execution.model.d.ts} +3 -3
  133. package/lib/components/action/models/index.d.ts +2 -0
  134. package/lib/components/action/route/action-route.component.d.ts +8 -8
  135. package/lib/components/form/autocomplete/autocomplete.component.d.ts +36 -0
  136. package/lib/components/form/dropdown/dropdown.component.d.ts +34 -0
  137. package/lib/components/form/editor/form-editor.component.d.ts +9 -7
  138. package/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +4 -14
  139. package/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +4 -12
  140. package/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +3 -3
  141. package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +4 -4
  142. package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +4 -4
  143. package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +7 -7
  144. package/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +3 -3
  145. package/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +3 -3
  146. package/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.d.ts +3 -3
  147. package/lib/components/form/index.d.ts +2 -0
  148. package/lib/components/form/models/form-editor.event.d.ts +5 -0
  149. package/lib/components/form/models/index.d.ts +1 -0
  150. package/lib/components/layout/breadcrumb.component.d.ts +8 -0
  151. package/lib/components/layout/footer.component.d.ts +9 -0
  152. package/lib/components/layout/index.d.ts +6 -6
  153. package/lib/components/layout/main-layout.component.d.ts +21 -0
  154. package/lib/components/layout/menu-item.component.d.ts +29 -0
  155. package/lib/components/layout/menu.component.d.ts +10 -0
  156. package/lib/components/layout/services/index.d.ts +1 -0
  157. package/lib/components/layout/services/main-layout.component.service.d.ts +65 -0
  158. package/lib/components/layout/topbar.component.d.ts +25 -0
  159. package/lib/components/tableview/index.d.ts +2 -0
  160. package/lib/components/tableview/models/index.d.ts +1 -0
  161. package/lib/{models/events/table-event.model.d.ts → components/tableview/models/table.event.d.ts} +5 -5
  162. package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +2 -3
  163. package/lib/components/tableview/services/index.d.ts +1 -0
  164. package/lib/components/tableview/{tableview.component.service.d.ts → services/tableview.component.service.d.ts} +4 -2
  165. package/lib/components/tableview/table/column-filter/column-filter.component.d.ts +22 -0
  166. package/lib/components/tableview/table/column-value/column-value.component.d.ts +12 -0
  167. package/lib/components/tableview/table/table.component.d.ts +45 -13
  168. package/lib/components/tableview/tableview.component.d.ts +11 -12
  169. package/lib/config/formly.config.d.ts +8 -2
  170. package/lib/{models/config → config/models}/index.d.ts +0 -0
  171. package/lib/config/models/mng-config.model.d.ts +34 -0
  172. package/lib/data-providers/base.data-provider.d.ts +17 -0
  173. package/lib/data-providers/editor.data-provider.d.ts +25 -0
  174. package/lib/data-providers/index.d.ts +5 -0
  175. package/lib/data-providers/lookup.data-provider.d.ts +14 -0
  176. package/lib/data-providers/table.data-provider.d.ts +6 -0
  177. package/lib/data-providers/tableview.data-provider.d.ts +15 -0
  178. package/lib/{models/descriptors/action-descriptor.model.d.ts → descriptors/action.descriptor.d.ts} +27 -3
  179. package/lib/{models/descriptors/editor-descriptor.model.d.ts → descriptors/editor.descriptor.d.ts} +18 -11
  180. package/lib/{models/validators → descriptors}/field.validator.d.ts +0 -0
  181. package/lib/descriptors/index.d.ts +7 -0
  182. package/lib/descriptors/lookup.descriptor.d.ts +17 -0
  183. package/lib/{models/descriptors/model-descriptor.model.d.ts → descriptors/model.descriptor.d.ts} +0 -0
  184. package/lib/descriptors/table.descriptor.d.ts +164 -0
  185. package/lib/{models/descriptors/tableview-descriptor.model.d.ts → descriptors/tableview.descriptor.d.ts} +7 -6
  186. package/lib/directives/component.directive.d.ts +11 -0
  187. package/lib/directives/index.d.ts +1 -0
  188. package/lib/directives/template.directive.d.ts +7 -5
  189. package/lib/mng-commons.module.d.ts +70 -65
  190. package/lib/models/index.d.ts +2 -0
  191. package/lib/models/router.model.d.ts +14 -0
  192. package/lib/models/user.model.d.ts +8 -0
  193. package/lib/pipes/boolean.pipe.d.ts +7 -0
  194. package/lib/pipes/index.d.ts +1 -0
  195. package/lib/pipes/property-path.pipe.d.ts +3 -3
  196. package/lib/services/action.service.d.ts +10 -10
  197. package/lib/services/commons.service.d.ts +72 -0
  198. package/lib/services/configuration.service.d.ts +3 -3
  199. package/lib/services/index.d.ts +1 -3
  200. package/lib/services/navigation.service.d.ts +3 -3
  201. package/lib/services/providers/commons-init.provider.d.ts +2 -0
  202. package/lib/services/providers/config-service.provider.d.ts +4 -4
  203. package/lib/services/providers/formly-config.provider.d.ts +2 -2
  204. package/lib/services/providers/index.d.ts +1 -0
  205. package/lib/services/tokens/browser-storage.token.d.ts +2 -0
  206. package/lib/services/tokens/index.d.ts +2 -0
  207. package/lib/services/tokens/module-config.token.d.ts +3 -0
  208. package/lib/{models/types → types}/index.d.ts +0 -0
  209. package/lib/{models/types → types}/type.decorator.d.ts +0 -0
  210. package/lib/{models/types → types}/type.model.d.ts +0 -0
  211. package/lib/utils/editor-formly.util.d.ts +1 -1
  212. package/lib/utils/i18n.util.d.ts +8 -4
  213. package/lib/utils/index.d.ts +1 -0
  214. package/lib/utils/model.util.d.ts +3 -1
  215. package/lib/utils/toast.util.d.ts +13 -0
  216. package/lib/utils/type.util.d.ts +1 -1
  217. package/mediusinc-mng-commons-0.2.0.tgz +0 -0
  218. package/package.json +4 -4
  219. package/public-api.d.ts +10 -7
  220. package/scss/common/layout/_breadcrumb.scss +96 -0
  221. package/scss/common/layout/_config.scss +101 -0
  222. package/scss/common/layout/_dashboard.scss +16 -0
  223. package/scss/common/layout/_exception.scss +131 -0
  224. package/scss/common/layout/_footer.scss +29 -0
  225. package/scss/common/layout/_help.scss +157 -0
  226. package/scss/common/layout/_inlinemenu.scss +55 -0
  227. package/scss/common/layout/_invoice.scss +176 -0
  228. package/scss/common/layout/_landing.scss +639 -0
  229. package/scss/common/layout/_layout_dark.scss +23 -0
  230. package/scss/common/layout/_layout_light.scss +23 -0
  231. package/scss/common/layout/_loader.scss +18 -0
  232. package/scss/common/layout/_login.scss +106 -0
  233. package/scss/common/layout/_main.scss +45 -0
  234. package/scss/common/layout/_mixins.scss +214 -0
  235. package/scss/common/layout/_rightmenu.scss +125 -0
  236. package/scss/common/layout/_topbar.scss +189 -0
  237. package/scss/common/layout/_typography.scss +63 -0
  238. package/scss/common/layout/_utils.scss +96 -0
  239. package/scss/common/layout/_widgets.scss +391 -0
  240. package/scss/common/layout/menu/_menu.scss +7 -0
  241. package/scss/common/layout/menu/_menu_common.scss +183 -0
  242. package/scss/common/layout/menu/_menu_overlay.scss +52 -0
  243. package/scss/common/layout/menu/_menu_sidebar.scss +232 -0
  244. package/scss/common/layout/menu/_menu_slim.scss +138 -0
  245. package/scss/common/layout/menu/_menu_static.scss +70 -0
  246. package/scss/common/layout/menu/_menu_theme.scss +365 -0
  247. package/scss/common/theme/_theme_dark.scss +5 -0
  248. package/scss/common/theme/_theme_light.scss +5 -0
  249. package/scss/common/theme/designer/_colors.scss +18 -0
  250. package/scss/common/theme/designer/_common.scss +40 -0
  251. package/scss/common/theme/designer/_components.scss +101 -0
  252. package/scss/common/theme/designer/_mixins.scss +174 -0
  253. package/scss/common/theme/designer/components/button/_button.scss +560 -0
  254. package/scss/common/theme/designer/components/button/_speeddial.scss +79 -0
  255. package/scss/common/theme/designer/components/button/_splitbutton.scss +1 -0
  256. package/scss/common/theme/designer/components/data/_carousel.scss +37 -0
  257. package/scss/common/theme/designer/components/data/_datatable.scss +266 -0
  258. package/scss/common/theme/designer/components/data/_dataview.scss +55 -0
  259. package/scss/common/theme/designer/components/data/_filter.scss +138 -0
  260. package/scss/common/theme/designer/components/data/_fullcalendar.scss +324 -0
  261. package/scss/common/theme/designer/components/data/_orderlist.scss +91 -0
  262. package/scss/common/theme/designer/components/data/_organizationchart.scss +50 -0
  263. package/scss/common/theme/designer/components/data/_paginator.scss +83 -0
  264. package/scss/common/theme/designer/components/data/_picklist.scss +91 -0
  265. package/scss/common/theme/designer/components/data/_timeline.scss +38 -0
  266. package/scss/common/theme/designer/components/data/_tree.scss +144 -0
  267. package/scss/common/theme/designer/components/data/_treetable.scss +242 -0
  268. package/scss/common/theme/designer/components/data/_virtualscroller.scss +28 -0
  269. package/scss/common/theme/designer/components/file/_fileupload.scss +58 -0
  270. package/scss/common/theme/designer/components/input/_autocomplete.scss +103 -0
  271. package/scss/common/theme/designer/components/input/_calendar.scss +212 -0
  272. package/scss/common/theme/designer/components/input/_cascadeselect.scss +98 -0
  273. package/scss/common/theme/designer/components/input/_checkbox.scss +85 -0
  274. package/scss/common/theme/designer/components/input/_chips.scss +41 -0
  275. package/scss/common/theme/designer/components/input/_colorpicker.scss +19 -0
  276. package/scss/common/theme/designer/components/input/_dropdown.scss +136 -0
  277. package/scss/common/theme/designer/components/input/_editor.scss +122 -0
  278. package/scss/common/theme/designer/components/input/_inputgroup.scss +69 -0
  279. package/scss/common/theme/designer/components/input/_inputmask.scss +3 -0
  280. package/scss/common/theme/designer/components/input/_inputnumber.scss +3 -0
  281. package/scss/common/theme/designer/components/input/_inputswitch.scss +58 -0
  282. package/scss/common/theme/designer/components/input/_inputtext.scss +97 -0
  283. package/scss/common/theme/designer/components/input/_listbox.scss +82 -0
  284. package/scss/common/theme/designer/components/input/_multiselect.scss +164 -0
  285. package/scss/common/theme/designer/components/input/_password.scss +33 -0
  286. package/scss/common/theme/designer/components/input/_radiobutton.scss +78 -0
  287. package/scss/common/theme/designer/components/input/_rating.scss +48 -0
  288. package/scss/common/theme/designer/components/input/_selectbutton.scss +50 -0
  289. package/scss/common/theme/designer/components/input/_slider.scss +69 -0
  290. package/scss/common/theme/designer/components/input/_togglebutton.scss +48 -0
  291. package/scss/common/theme/designer/components/input/_treeselect.scss +89 -0
  292. package/scss/common/theme/designer/components/menu/_breadcrumb.scss +42 -0
  293. package/scss/common/theme/designer/components/menu/_contextmenu.scss +50 -0
  294. package/scss/common/theme/designer/components/menu/_dock.scss +51 -0
  295. package/scss/common/theme/designer/components/menu/_megamenu.scss +102 -0
  296. package/scss/common/theme/designer/components/menu/_menu.scss +41 -0
  297. package/scss/common/theme/designer/components/menu/_menubar.scss +179 -0
  298. package/scss/common/theme/designer/components/menu/_panelmenu.scss +137 -0
  299. package/scss/common/theme/designer/components/menu/_slidemenu.scss +55 -0
  300. package/scss/common/theme/designer/components/menu/_steps.scss +55 -0
  301. package/scss/common/theme/designer/components/menu/_tabmenu.scss +49 -0
  302. package/scss/common/theme/designer/components/menu/_tieredmenu.scss +56 -0
  303. package/scss/common/theme/designer/components/messages/_inlinemessage.scss +64 -0
  304. package/scss/common/theme/designer/components/messages/_message.scss +102 -0
  305. package/scss/common/theme/designer/components/messages/_toast.scss +95 -0
  306. package/scss/common/theme/designer/components/misc/_avatar.scss +30 -0
  307. package/scss/common/theme/designer/components/misc/_badge.scss +48 -0
  308. package/scss/common/theme/designer/components/misc/_blockui.scss +3 -0
  309. package/scss/common/theme/designer/components/misc/_chip.scss +36 -0
  310. package/scss/common/theme/designer/components/misc/_inplace.scss +17 -0
  311. package/scss/common/theme/designer/components/misc/_progressbar.scss +17 -0
  312. package/scss/common/theme/designer/components/misc/_scrolltop.scss +20 -0
  313. package/scss/common/theme/designer/components/misc/_skeleton.scss +8 -0
  314. package/scss/common/theme/designer/components/misc/_tag.scss +33 -0
  315. package/scss/common/theme/designer/components/misc/_terminal.scss +11 -0
  316. package/scss/common/theme/designer/components/multimedia/_galleria.scss +141 -0
  317. package/scss/common/theme/designer/components/overlay/_confirmpopup.scss +67 -0
  318. package/scss/common/theme/designer/components/overlay/_dialog.scss +63 -0
  319. package/scss/common/theme/designer/components/overlay/_overlaypanel.scss +62 -0
  320. package/scss/common/theme/designer/components/overlay/_sidebar.scss +27 -0
  321. package/scss/common/theme/designer/components/overlay/_tooltip.scss +33 -0
  322. package/scss/common/theme/designer/components/panel/_accordion.scss +119 -0
  323. package/scss/common/theme/designer/components/panel/_card.scss +30 -0
  324. package/scss/common/theme/designer/components/panel/_divider.scss +31 -0
  325. package/scss/common/theme/designer/components/panel/_fieldset.scss +47 -0
  326. package/scss/common/theme/designer/components/panel/_panel.scss +42 -0
  327. package/scss/common/theme/designer/components/panel/_scrollpanel.scss +6 -0
  328. package/scss/common/theme/designer/components/panel/_splitter.scss +19 -0
  329. package/scss/common/theme/designer/components/panel/_tabview.scss +66 -0
  330. package/scss/common/theme/designer/components/panel/_toolbar.scss +10 -0
  331. package/scss/common/theme/extensions/_button.scss +99 -0
  332. package/scss/common/theme/extensions/_calendar.scss +18 -0
  333. package/scss/common/theme/extensions/_card.scss +6 -0
  334. package/scss/common/theme/extensions/_carousel.scss +13 -0
  335. package/scss/common/theme/extensions/_checkbox.scss +10 -0
  336. package/scss/common/theme/extensions/_contextmenu.scss +16 -0
  337. package/scss/common/theme/extensions/_datatable.scss +83 -0
  338. package/scss/common/theme/extensions/_dialog.scss +14 -0
  339. package/scss/common/theme/extensions/_fieldset.scss +6 -0
  340. package/scss/common/theme/extensions/_galleria.scss +25 -0
  341. package/scss/common/theme/extensions/_megamenu.scss +18 -0
  342. package/scss/common/theme/extensions/_menu.scss +14 -0
  343. package/scss/common/theme/extensions/_menubar.scss +14 -0
  344. package/scss/common/theme/extensions/_orderlist.scss +38 -0
  345. package/scss/common/theme/extensions/_paginator.scss +19 -0
  346. package/scss/common/theme/extensions/_panelmenu.scss +20 -0
  347. package/scss/common/theme/extensions/_password.scss +5 -0
  348. package/scss/common/theme/extensions/_picklist.scss +38 -0
  349. package/scss/common/theme/extensions/_radiobutton.scss +8 -0
  350. package/scss/common/theme/extensions/_sidebar.scss +19 -0
  351. package/scss/common/theme/extensions/_slidemenu.scss +10 -0
  352. package/scss/common/theme/extensions/_slider.scss +6 -0
  353. package/scss/common/theme/extensions/_steps.scss +50 -0
  354. package/scss/common/theme/extensions/_tieredmenu.scss +14 -0
  355. package/scss/common/theme/extensions/_toast.scss +6 -0
  356. package/scss/common/theme/extensions/_tree.scss +36 -0
  357. package/scss/common/theme/extensions/_treetable.scss +35 -0
  358. package/scss/common/theme/extensions/_vendor_extensions.scss +27 -0
  359. package/scss/common/variables/layout/_common.scss +12 -0
  360. package/scss/common/variables/layout/_layout_dark.scss +71 -0
  361. package/scss/common/variables/layout/_layout_light.scss +71 -0
  362. package/scss/common/variables/theme/_theme_dark.scss +897 -0
  363. package/scss/common/variables/theme/_theme_light.scss +885 -0
  364. package/scss/layout/default/_mng-variables-layout-dark.scss +2 -0
  365. package/scss/layout/default/_mng-variables-layout-light.scss +2 -0
  366. package/scss/layout/default/layout-dark.scss +2 -0
  367. package/scss/layout/default/layout-light.scss +2 -0
  368. package/scss/mng-commons-dark.scss +5 -0
  369. package/scss/mng-commons-light.scss +5 -0
  370. package/scss/mng-overrides/_layout_action.scss +3 -0
  371. package/scss/mng-overrides/_layout_dialog.scss +34 -0
  372. package/scss/mng-overrides/_layout_forms.scss +31 -0
  373. package/scss/mng-overrides/_layout_radio.scss +3 -0
  374. package/scss/mng-overrides/_layout_styles.scss +4 -0
  375. package/scss/mng-overrides/_theme_datatable.scss +9 -0
  376. package/scss/mng-overrides/_theme_dialog.scss +9 -0
  377. package/scss/mng-overrides/_theme_dropdown.scss +6 -0
  378. package/scss/mng-overrides/_theme_styles.scss +9 -0
  379. package/scss/mng-overrides/_theme_tableview.scss +94 -0
  380. package/scss/theme/default/_mng-variables-theme-dark.scss +8 -0
  381. package/scss/theme/default/_mng-variables-theme-light.scss +8 -0
  382. package/scss/theme/default/theme-dark.scss +2 -0
  383. package/scss/theme/default/theme-light.scss +2 -0
  384. package/esm2020/lib/components/layout/app.breadcrumb.component.mjs +0 -27
  385. package/esm2020/lib/components/layout/app.footer.component.mjs +0 -35
  386. package/esm2020/lib/components/layout/app.main.component.mjs +0 -25
  387. package/esm2020/lib/components/layout/app.main.component.service.mjs +0 -133
  388. package/esm2020/lib/components/layout/app.menu.component.mjs +0 -38
  389. package/esm2020/lib/components/layout/app.menuitem.component.mjs +0 -243
  390. package/esm2020/lib/components/layout/app.topbar.component.mjs +0 -135
  391. package/esm2020/lib/components/tableview/tableview.component.service.mjs +0 -18
  392. package/esm2020/lib/models/action/action.model.mjs +0 -58
  393. package/esm2020/lib/models/action/index.mjs +0 -2
  394. package/esm2020/lib/models/config/mng-config.model.mjs +0 -3
  395. package/esm2020/lib/models/descriptors/action-descriptor.model.mjs +0 -283
  396. package/esm2020/lib/models/descriptors/editor-descriptor.model.mjs +0 -647
  397. package/esm2020/lib/models/descriptors/index.mjs +0 -6
  398. package/esm2020/lib/models/descriptors/model-descriptor.model.mjs +0 -34
  399. package/esm2020/lib/models/descriptors/table-descriptor.model.mjs +0 -123
  400. package/esm2020/lib/models/descriptors/tableview-descriptor.model.mjs +0 -124
  401. package/esm2020/lib/models/events/editor-event.model.mjs +0 -14
  402. package/esm2020/lib/models/events/index.mjs +0 -3
  403. package/esm2020/lib/models/events/table-event.model.mjs +0 -16
  404. package/esm2020/lib/models/interfaces/confirmation-service.model.mjs +0 -2
  405. package/esm2020/lib/models/interfaces/index.mjs +0 -2
  406. package/esm2020/lib/models/providers/data-provider.model.mjs +0 -86
  407. package/esm2020/lib/models/providers/index.mjs +0 -2
  408. package/esm2020/lib/models/types/index.mjs +0 -3
  409. package/esm2020/lib/models/types/type.decorator.mjs +0 -8
  410. package/esm2020/lib/models/types/type.model.mjs +0 -2
  411. package/esm2020/lib/models/validators/field.validator.mjs +0 -21
  412. package/esm2020/lib/models/validators/index.mjs +0 -2
  413. package/esm2020/lib/services/breadcrumb.service.mjs +0 -21
  414. package/esm2020/lib/services/menu.service.mjs +0 -26
  415. package/esm2020/lib/services/settings.service.mjs +0 -40
  416. package/lib/components/layout/app.breadcrumb.component.d.ts +0 -16
  417. package/lib/components/layout/app.footer.component.d.ts +0 -8
  418. package/lib/components/layout/app.main.component.d.ts +0 -12
  419. package/lib/components/layout/app.main.component.service.d.ts +0 -40
  420. package/lib/components/layout/app.menu.component.d.ts +0 -14
  421. package/lib/components/layout/app.menuitem.component.d.ts +0 -31
  422. package/lib/components/layout/app.topbar.component.d.ts +0 -16
  423. package/lib/models/action/index.d.ts +0 -1
  424. package/lib/models/config/mng-config.model.d.ts +0 -19
  425. package/lib/models/descriptors/index.d.ts +0 -5
  426. package/lib/models/descriptors/table-descriptor.model.d.ts +0 -45
  427. package/lib/models/events/editor-event.model.d.ts +0 -11
  428. package/lib/models/events/index.d.ts +0 -2
  429. package/lib/models/interfaces/index.d.ts +0 -1
  430. package/lib/models/providers/data-provider.model.d.ts +0 -62
  431. package/lib/models/providers/index.d.ts +0 -1
  432. package/lib/models/validators/index.d.ts +0 -1
  433. package/lib/services/breadcrumb.service.d.ts +0 -9
  434. package/lib/services/menu.service.d.ts +0 -11
  435. package/lib/services/settings.service.d.ts +0 -18
  436. package/mediusinc-mng-commons-0.0.1-rc.2.tgz +0 -0
@@ -1,283 +0,0 @@
1
- import { of, throwError } from 'rxjs';
2
- import { TypeUtil } from '../../utils';
3
- export class ActionDescriptor {
4
- // TODO: messages on end
5
- // TODO: on action finish
6
- constructor(model, actionName, parentType, parentProperty) {
7
- this._type = ActionTypeEnum.Direct;
8
- this._activationTrigger = ActionActivationTriggerEnum.OnClick;
9
- this._position = ActionPositionEnum.ToolbarRight;
10
- this._level = ActionLevelEnum.Default;
11
- this._routeUrl = null;
12
- this._className = '';
13
- this._hasRunConfirmation = false;
14
- this._model = model;
15
- this._actionName = actionName;
16
- if ((parentType && !parentProperty) || (!parentProperty && parentProperty)) {
17
- throw new Error(`Provide both the parent type and parent property or none: ${parentType}, ${parentProperty}.`);
18
- }
19
- this._parentType = parentType;
20
- this._parentTypeName = parentType ? TypeUtil.findTypeName(parentType) : undefined;
21
- this._parentProperty = parentProperty;
22
- this._i18nModelActionBaseKey = this._parentTypeName
23
- ? `${this._parentTypeName}.actions.${this._parentProperty}_${actionName}`
24
- : `${this._model.typeName}.actions.${actionName}`;
25
- }
26
- get model() {
27
- return this._model;
28
- }
29
- get parentTypeName() {
30
- return this._parentTypeName;
31
- }
32
- get parentProperty() {
33
- return this._parentProperty;
34
- }
35
- get i18nModelActionBaseKey() {
36
- return this._i18nModelActionBaseKey;
37
- }
38
- get type() {
39
- return this._type;
40
- }
41
- get activationTrigger() {
42
- return this._activationTrigger;
43
- }
44
- get position() {
45
- return this._position;
46
- }
47
- get level() {
48
- return this._level;
49
- }
50
- get routeUrl() {
51
- return this._routeUrl;
52
- }
53
- get title() {
54
- return this._title;
55
- }
56
- get icon() {
57
- return this._icon;
58
- }
59
- get runFunction() {
60
- if (!this._runFunction) {
61
- throw new Error('Run function is not defined and cannot be invoked');
62
- }
63
- return this._runFunction;
64
- }
65
- get isVisibleFunction() {
66
- return this._isVisibleFunction;
67
- }
68
- get isEnabledFunction() {
69
- return this._isEnabledFunction;
70
- }
71
- get actionName() {
72
- return this._actionName;
73
- }
74
- get className() {
75
- return this._className;
76
- }
77
- get hasRunConfirmation() {
78
- return this._hasRunConfirmation;
79
- }
80
- get runConfirmationIcon() {
81
- return this._runConfirmationIcon;
82
- }
83
- get runConfirmationTitle() {
84
- return this._runConfirmationTitle;
85
- }
86
- get runConfirmationMessage() {
87
- return this._runConfirmationMessage;
88
- }
89
- get runConfirmationAcceptTitle() {
90
- return this._runConfirmationAcceptTitle;
91
- }
92
- get runConfirmationRejectTitle() {
93
- return this._runConfirmationRejectTitle;
94
- }
95
- withRunFunction(fn) {
96
- this._runFunction = fn;
97
- return this;
98
- }
99
- withIsVisibleFunction(fn) {
100
- this._isVisibleFunction = fn;
101
- return this;
102
- }
103
- withIsEnabledFunction(fn) {
104
- this._isEnabledFunction = fn;
105
- return this;
106
- }
107
- withRouteTrigger(routeUrl) {
108
- this._activationTrigger = ActionActivationTriggerEnum.OnRoute;
109
- this._routeUrl = routeUrl;
110
- return this;
111
- }
112
- withLevel(level) {
113
- this._level = level;
114
- return this;
115
- }
116
- /**
117
- * Overrides default title key with model action key (${model.typeName}.actions.${actionName}). Not relevant if parentType name is provided.
118
- */
119
- withModelTitle() {
120
- this._title = `${this._i18nModelActionBaseKey}.title`;
121
- return this;
122
- }
123
- /**
124
- * Overrides default title key (${actionName}.title). If null, no title will be shown.
125
- * @param title Title i18n key or title.
126
- */
127
- withTitle(title) {
128
- this._title = title;
129
- return this;
130
- }
131
- withIcon(icon) {
132
- this._icon = icon;
133
- return this;
134
- }
135
- withClassName(className) {
136
- this._className = className;
137
- return this;
138
- }
139
- withPosition(position) {
140
- this._position = position;
141
- return this;
142
- }
143
- withRunConfirmation(icon = 'pi pi-exclamation-triangle', title, message, acceptTitle, rejectTitle) {
144
- this._hasRunConfirmation = true;
145
- this._runConfirmationIcon = icon;
146
- this._runConfirmationTitle = title;
147
- this._runConfirmationMessage = message;
148
- this._runConfirmationAcceptTitle = acceptTitle;
149
- this._runConfirmationRejectTitle = rejectTitle;
150
- return this;
151
- }
152
- }
153
- export class ActionEditorDescriptor extends ActionDescriptor {
154
- constructor(editorDescriptor, actionName, parentType, parentProperty) {
155
- super(editorDescriptor.model, actionName, parentType, parentProperty);
156
- this._editorTitle = undefined;
157
- this._type = ActionTypeEnum.Editor;
158
- this._editorDescriptor = editorDescriptor;
159
- }
160
- get editorTitle() {
161
- return this._editorTitle;
162
- }
163
- get editorDescriptor() {
164
- return this._editorDescriptor;
165
- }
166
- get runFunction() {
167
- throw new Error('Run function cannot be used in editor action. Use submit function instead!');
168
- }
169
- get fetchFunction() {
170
- if (!this._fetchFunction) {
171
- return (ctx) => {
172
- console.warn(`Fetch function is not provided for function ${this._actionName}, using default and returning context item`, ctx.data?.item);
173
- return of(ctx.data?.item ? ctx.data.item : {});
174
- };
175
- }
176
- return this._fetchFunction;
177
- }
178
- get submitFunction() {
179
- return this._submitFunction;
180
- }
181
- withEditorTitle(title) {
182
- this._editorTitle = title;
183
- return this;
184
- }
185
- withRunFunction(fn) {
186
- return this.withSubmitFunction(fn);
187
- return this;
188
- }
189
- withFetchFunction(fn) {
190
- this._fetchFunction = fn;
191
- return this;
192
- }
193
- withSubmitFunction(fn) {
194
- this._submitFunction = fn;
195
- return this;
196
- }
197
- }
198
- export class ActionEditorDetailsDescriptor extends ActionEditorDescriptor {
199
- constructor(editorDescriptor) {
200
- super(editorDescriptor, 'details');
201
- this.withPosition(ActionPositionEnum.RowClick);
202
- this.withRouteTrigger(':itemId');
203
- this.withFetchFunction(ctx => ctx.dataProvider?.fetch && ctx.data?.itemId
204
- ? ctx.dataProvider.fetch(ctx.data?.itemId, ctx.serviceInstance)
205
- : throwError(new Error(`Data provider fetch function or item id ${ctx.data?.itemId} is missing.`)));
206
- this.withClassName('mng-details-dynamic-dialog');
207
- }
208
- }
209
- export class ActionEditorAddDescriptor extends ActionEditorDescriptor {
210
- constructor(editorDescriptor) {
211
- super(editorDescriptor, 'add');
212
- this.withPosition(ActionPositionEnum.ToolbarLeft);
213
- this.withRouteTrigger('add');
214
- this.withSubmitFunction(ctx => ctx.dataProvider?.create
215
- ? ctx.dataProvider.create(ctx.data?.item, ctx.serviceInstance)
216
- : throwError(new Error(`Data provider create function is missing.`)));
217
- this.withLevel(ActionLevelEnum.Success);
218
- this.withIcon('pi pi-plus');
219
- this.withClassName('mng-details-dynamic-dialog');
220
- }
221
- }
222
- export class ActionEditorEditDescriptor extends ActionEditorDescriptor {
223
- constructor(editorDescriptor) {
224
- super(editorDescriptor, 'edit');
225
- this.withPosition(ActionPositionEnum.RowInline);
226
- this.withTitle(null);
227
- this.withRouteTrigger(':itemId/edit');
228
- this.withFetchFunction(ctx => ctx.dataProvider?.fetch && ctx.data?.itemId
229
- ? ctx.dataProvider.fetch(ctx.data.itemId, ctx.serviceInstance)
230
- : throwError(new Error(`Data provider fetch function or item id ${ctx.data?.itemId} is missing.`)));
231
- this.withSubmitFunction(ctx => ctx.dataProvider?.update && ctx.data?.itemId
232
- ? ctx.dataProvider.update(ctx.data.itemId, ctx.data?.item, ctx.serviceInstance)
233
- : throwError(new Error(`Data provider update function or item id ${ctx.data?.itemId} is missing.`)));
234
- this.withIcon('pi pi-pencil');
235
- this.withClassName('mng-details-dynamic-dialog');
236
- }
237
- }
238
- export class ActionDeleteDescriptor extends ActionDescriptor {
239
- constructor(model) {
240
- super(model, 'delete');
241
- this.withPosition(ActionPositionEnum.RowInline);
242
- this.withTitle(null);
243
- this.withRunFunction(ctx => {
244
- const editorDataProvider = ctx.dataProvider;
245
- return editorDataProvider?.delete && ctx.data?.itemId
246
- ? editorDataProvider.delete(ctx.data.itemId, ctx.data.item, ctx.serviceInstance)
247
- : throwError(new Error(`Data provider delete function or item id ${ctx.data?.itemId} is missing.`));
248
- });
249
- this.withLevel(ActionLevelEnum.Danger);
250
- this.withIcon('pi pi-trash');
251
- this.withRunConfirmation(undefined);
252
- }
253
- }
254
- export var ActionPositionEnum;
255
- (function (ActionPositionEnum) {
256
- ActionPositionEnum[ActionPositionEnum["ToolbarLeft"] = 0] = "ToolbarLeft";
257
- ActionPositionEnum[ActionPositionEnum["ToolbarRight"] = 1] = "ToolbarRight";
258
- ActionPositionEnum[ActionPositionEnum["TableHeader"] = 2] = "TableHeader";
259
- ActionPositionEnum[ActionPositionEnum["RowInline"] = 3] = "RowInline";
260
- ActionPositionEnum[ActionPositionEnum["RowClick"] = 4] = "RowClick";
261
- })(ActionPositionEnum || (ActionPositionEnum = {}));
262
- export var ActionActivationTriggerEnum;
263
- (function (ActionActivationTriggerEnum) {
264
- ActionActivationTriggerEnum[ActionActivationTriggerEnum["OnClick"] = 0] = "OnClick";
265
- ActionActivationTriggerEnum[ActionActivationTriggerEnum["OnRoute"] = 1] = "OnRoute"; // action is triggered for activation by route url
266
- })(ActionActivationTriggerEnum || (ActionActivationTriggerEnum = {}));
267
- export var ActionTypeEnum;
268
- (function (ActionTypeEnum) {
269
- ActionTypeEnum[ActionTypeEnum["Direct"] = 0] = "Direct";
270
- ActionTypeEnum[ActionTypeEnum["Editor"] = 1] = "Editor"; // editor providing middle step for activation
271
- })(ActionTypeEnum || (ActionTypeEnum = {}));
272
- export var ActionLevelEnum;
273
- (function (ActionLevelEnum) {
274
- ActionLevelEnum[ActionLevelEnum["Default"] = 0] = "Default";
275
- ActionLevelEnum[ActionLevelEnum["Primary"] = 1] = "Primary";
276
- ActionLevelEnum[ActionLevelEnum["Secondary"] = 2] = "Secondary";
277
- ActionLevelEnum[ActionLevelEnum["Info"] = 3] = "Info";
278
- ActionLevelEnum[ActionLevelEnum["Help"] = 4] = "Help";
279
- ActionLevelEnum[ActionLevelEnum["Success"] = 5] = "Success";
280
- ActionLevelEnum[ActionLevelEnum["Warning"] = 6] = "Warning";
281
- ActionLevelEnum[ActionLevelEnum["Danger"] = 7] = "Danger";
282
- })(ActionLevelEnum || (ActionLevelEnum = {}));
283
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWRlc2NyaXB0b3IubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbmctY29tbW9ucy9zcmMvbGliL21vZGVscy9kZXNjcmlwdG9ycy9hY3Rpb24tZGVzY3JpcHRvci5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWEsRUFBRSxFQUFFLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQU1oRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRXJDLE1BQU0sT0FBTyxnQkFBZ0I7SUE4QnpCLHdCQUF3QjtJQUN4Qix5QkFBeUI7SUFFekIsWUFBWSxLQUF5QixFQUFFLFVBQWtCLEVBQUUsVUFBMkIsRUFBRSxjQUF1QjtRQXpCckcsVUFBSyxHQUFtQixjQUFjLENBQUMsTUFBTSxDQUFDO1FBQzlDLHVCQUFrQixHQUFnQywyQkFBMkIsQ0FBQyxPQUFPLENBQUM7UUFDdEYsY0FBUyxHQUF1QixrQkFBa0IsQ0FBQyxZQUFZLENBQUM7UUFDaEUsV0FBTSxHQUFvQixlQUFlLENBQUMsT0FBTyxDQUFDO1FBRWxELGNBQVMsR0FBZ0IsSUFBSSxDQUFDO1FBSzlCLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFLMUIsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBV3pDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBRTlCLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsY0FBYyxJQUFJLGNBQWMsQ0FBQyxFQUFFO1lBQ3hFLE1BQU0sSUFBSSxLQUFLLENBQUMsNkRBQTZELFVBQVUsS0FBSyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1NBQ2xIO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFDOUIsSUFBSSxDQUFDLGVBQWUs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QUFsQixrQkFBa0IsUUFNN0I7QUFFRCxNQUFNLENBQU4sSUFBWSwyQkFHWDtBQUhELFdBQVksMkJBQTJCO0lBQ25DLG1GQUFPLENBQUE7SUFDUCxtRkFBTyxDQUFBLENBQUMsa0RBQWtEO0FBQzlELENBQUMsRUFIVywyQkFBMkIsS0FBM0IsMkJBQTJCLFFBR3RDO0FBRUQsTUFBTSxDQUFOLElBQVksY0FHWDtBQUhELFdBQVksY0FBYztJQUN0Qix1REFBTSxDQUFBO0lBQ04sdURBQU0sQ0FBQSxDQUFDLDhDQUE4QztBQUN6RCxDQUFDLEVBSFcsY0FBYyxLQUFkLGNBQWMsUUFHekI7QUFFRCxNQUFNLENBQU4sSUFBWSxlQVNYO0FBVEQsV0FBWSxlQUFlO0lBQ3ZCLDJEQUFPLENBQUE7SUFDUCwyREFBTyxDQUFBO0lBQ1AsK0RBQVMsQ0FBQTtJQUNULHFEQUFJLENBQUE7SUFDSixxREFBSSxDQUFBO0lBQ0osMkRBQU8sQ0FBQTtJQUNQLDJEQUFPLENBQUE7SUFDUCx5REFBTSxDQUFBO0FBQ1YsQ0FBQyxFQVRXLGVBQWUsS0FBZixlQUFlLFFBUzFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvcn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7Q2xhc3NUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge0VkaXRvckRlc2NyaXB0b3IsIE1vZGVsRGVzY3JpcHRvcn0gZnJvbSAnLi4vZGVzY3JpcHRvcnMnO1xuaW1wb3J0IHtJRGF0YVByb3ZpZGVyLCBJRWRpdG9yRGF0YVByb3ZpZGVyfSBmcm9tICcuLi9wcm92aWRlcnMnO1xuaW1wb3J0IHtBY3Rpb25FeGVjQ29udGV4dH0gZnJvbSAnLi4vYWN0aW9uJztcbmltcG9ydCB7VHlwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuZXhwb3J0IGNsYXNzIEFjdGlvbkRlc2NyaXB0b3I8VD4ge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfbW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxUPjtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2FjdGlvbk5hbWU6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3BhcmVudFR5cGU/OiBDbGFzc1R5cGU8YW55PjtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3BhcmVudFR5cGVOYW1lPzogc3RyaW5nO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfcGFyZW50UHJvcGVydHk/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9pMThuTW9kZWxBY3Rpb25CYXNlS2V5OiBzdHJpbmc7XG5cbiAgICBwcm90ZWN0ZWQgX3R5cGU6IEFjdGlvblR5cGVFbnVtID0gQWN0aW9uVHlwZUVudW0uRGlyZWN0O1xuICAgIHByb3RlY3RlZCBfYWN0aXZhdGlvblRyaWdnZXI6IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bSA9IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PbkNsaWNrO1xuICAgIHByb3RlY3RlZCBfcG9zaXRpb246IEFjdGlvblBvc2l0aW9uRW51bSA9IEFjdGlvblBvc2l0aW9uRW51bS5Ub29sYmFyUmlnaHQ7XG4gICAgcHJvdGVjdGVkIF9sZXZlbDogQWN0aW9uTGV2ZWxFbnVtID0gQWN0aW9uTGV2ZWxFbnVtLkRlZmF1bHQ7XG5cbiAgICBwcm90ZWN0ZWQgX3JvdXRlVXJsOiBzdHJpbmd8bnVsbCA9IG51bGw7XG5cbiAgICBwcm90ZWN0ZWQgX3RpdGxlPzogc3RyaW5nfG51bGw7XG4gICAgcHJvdGVjdGVkIF9pY29uPzogc3RyaW5nO1xuXG4gICAgcHJvdGVjdGVkIF9jbGFzc05hbWU6IHN0cmluZyA9ICcnO1xuICAgIHByb3RlY3RlZCBfcnVuRnVuY3Rpb24/OiAoY3R4OiBBY3Rpb25FeGVjQ29udGV4dDxULCBhbnksIElEYXRhUHJvdmlkZXI8VCwgYW55Pj4pID0+IE9ic2VydmFibGU8VD47XG4gICAgcHJvdGVjdGVkIF9pc1Zpc2libGVGdW5jdGlvbj86IChjdHg6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIGFueSwgSURhdGFQcm92aWRlcjxULCBhbnk+PikgPT4gT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBwcm90ZWN0ZWQgX2lzRW5hYmxlZEZ1bmN0aW9uPzogKGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgYW55LCBJRGF0YVByb3ZpZGVyPFQsIGFueT4+KSA9PiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gICAgcHJpdmF0ZSBfaGFzUnVuQ29uZmlybWF0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfcnVuQ29uZmlybWF0aW9uSWNvbj86IHN0cmluZztcbiAgICBwcml2YXRlIF9ydW5Db25maXJtYXRpb25UaXRsZT86IHN0cmluZztcbiAgICBwcml2YXRlIF9ydW5Db25maXJtYXRpb25NZXNzYWdlPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX3J1bkNvbmZpcm1hdGlvbkFjY2VwdFRpdGxlPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX3J1bkNvbmZpcm1hdGlvblJlamVjdFRpdGxlPzogc3RyaW5nO1xuXG4gICAgLy8gVE9ETzogbWVzc2FnZXMgb24gZW5kXG4gICAgLy8gVE9ETzogb24gYWN0aW9uIGZpbmlzaFxuXG4gICAgY29uc3RydWN0b3IobW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxUPiwgYWN0aW9uTmFtZTogc3RyaW5nLCBwYXJlbnRUeXBlPzogQ2xhc3NUeXBlPGFueT4sIHBhcmVudFByb3BlcnR5Pzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21vZGVsID0gbW9kZWw7XG4gICAgICAgIHRoaXMuX2FjdGlvbk5hbWUgPSBhY3Rpb25OYW1lO1xuXG4gICAgICAgIGlmICgocGFyZW50VHlwZSAmJiAhcGFyZW50UHJvcGVydHkpIHx8ICghcGFyZW50UHJvcGVydHkgJiYgcGFyZW50UHJvcGVydHkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGUgYm90aCB0aGUgcGFyZW50IHR5cGUgYW5kIHBhcmVudCBwcm9wZXJ0eSBvciBub25lOiAke3BhcmVudFR5cGV9LCAke3BhcmVudFByb3BlcnR5fS5gKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9wYXJlbnRUeXBlID0gcGFyZW50VHlwZTtcbiAgICAgICAgdGhpcy5fcGFyZW50VHlwZU5hbWUgPSBwYXJlbnRUeXBlID8gVHlwZVV0aWwuZmluZFR5cGVOYW1lKHBhcmVudFR5cGUpIDogdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9wYXJlbnRQcm9wZXJ0eSA9IHBhcmVudFByb3BlcnR5O1xuXG4gICAgICAgIHRoaXMuX2kxOG5Nb2RlbEFjdGlvbkJhc2VLZXkgPSB0aGlzLl9wYXJlbnRUeXBlTmFtZVxuICAgICAgICAgICAgPyBgJHt0aGlzLl9wYXJlbnRUeXBlTmFtZX0uYWN0aW9ucy4ke3RoaXMuX3BhcmVudFByb3BlcnR5fV8ke2FjdGlvbk5hbWV9YFxuICAgICAgICAgICAgOiBgJHt0aGlzLl9tb2RlbC50eXBlTmFtZX0uYWN0aW9ucy4ke2FjdGlvbk5hbWV9YDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1vZGVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9kZWw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwYXJlbnRUeXBlTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudFR5cGVOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGFyZW50UHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXJlbnRQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGkxOG5Nb2RlbEFjdGlvbkJhc2VLZXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pMThuTW9kZWxBY3Rpb25CYXNlS2V5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhY3RpdmF0aW9uVHJpZ2dlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2YXRpb25UcmlnZ2VyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcG9zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxldmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGV2ZWw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3V0ZVVybCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JvdXRlVXJsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aXRsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGljb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pY29uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcnVuRnVuY3Rpb24oKTogKGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgYW55LCBJRGF0YVByb3ZpZGVyPFQsIGFueT4+KSA9PiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9ydW5GdW5jdGlvbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSdW4gZnVuY3Rpb24gaXMgbm90IGRlZmluZWQgYW5kIGNhbm5vdCBiZSBpbnZva2VkJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkZ1bmN0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNWaXNpYmxlRnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1Zpc2libGVGdW5jdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzRW5hYmxlZEZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNFbmFibGVkRnVuY3Rpb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhY3Rpb25OYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aW9uTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBnZXQgaGFzUnVuQ29uZmlybWF0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzUnVuQ29uZmlybWF0aW9uO1xuICAgIH1cblxuICAgIGdldCBydW5Db25maXJtYXRpb25JY29uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuQ29uZmlybWF0aW9uSWNvbjtcbiAgICB9XG5cbiAgICBnZXQgcnVuQ29uZmlybWF0aW9uVGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydW5Db25maXJtYXRpb25UaXRsZTtcbiAgICB9XG5cbiAgICBnZXQgcnVuQ29uZmlybWF0aW9uTWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkNvbmZpcm1hdGlvbk1lc3NhZ2U7XG4gICAgfVxuXG4gICAgZ2V0IHJ1bkNvbmZpcm1hdGlvbkFjY2VwdFRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuQ29uZmlybWF0aW9uQWNjZXB0VGl0bGU7XG4gICAgfVxuXG4gICAgZ2V0IHJ1bkNvbmZpcm1hdGlvblJlamVjdFRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuQ29uZmlybWF0aW9uUmVqZWN0VGl0bGU7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSdW5GdW5jdGlvbjxTPihmbjogKGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4pID0+IE9ic2VydmFibGU8VD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcnVuRnVuY3Rpb24gPSBmbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhJc1Zpc2libGVGdW5jdGlvbjxTPihmbjogKGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4pID0+IE9ic2VydmFibGU8Ym9vbGVhbj4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNWaXNpYmxlRnVuY3Rpb24gPSBmbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhJc0VuYWJsZWRGdW5jdGlvbjxTPihmbjogKGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4pID0+IE9ic2VydmFibGU8Ym9vbGVhbj4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNFbmFibGVkRnVuY3Rpb24gPSBmbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSb3V0ZVRyaWdnZXIocm91dGVVcmw6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9hY3RpdmF0aW9uVHJpZ2dlciA9IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlO1xuICAgICAgICB0aGlzLl9yb3V0ZVVybCA9IHJvdXRlVXJsO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExldmVsKGxldmVsOiBBY3Rpb25MZXZlbEVudW0pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fbGV2ZWwgPSBsZXZlbDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3ZlcnJpZGVzIGRlZmF1bHQgdGl0bGUga2V5IHdpdGggbW9kZWwgYWN0aW9uIGtleSAoJHttb2RlbC50eXBlTmFtZX0uYWN0aW9ucy4ke2FjdGlvbk5hbWV9KS4gTm90IHJlbGV2YW50IGlmIHBhcmVudFR5cGUgbmFtZSBpcyBwcm92aWRlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aE1vZGVsVGl0bGUoKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RpdGxlID0gYCR7dGhpcy5faTE4bk1vZGVsQWN0aW9uQmFzZUtleX0udGl0bGVgO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPdmVycmlkZXMgZGVmYXVsdCB0aXRsZSBrZXkgKCR7YWN0aW9uTmFtZX0udGl0bGUpLiBJZiBudWxsLCBubyB0aXRsZSB3aWxsIGJlIHNob3duLlxuICAgICAqIEBwYXJhbSB0aXRsZSBUaXRsZSBpMThuIGtleSBvciB0aXRsZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFRpdGxlKHRpdGxlOiBzdHJpbmd8bnVsbCk6IHRoaXMge1xuICAgICAgICB0aGlzLl90aXRsZSA9IHRpdGxlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEljb24oaWNvbjogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ljb24gPSBpY29uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUG9zaXRpb24ocG9zaXRpb246IEFjdGlvblBvc2l0aW9uRW51bSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFJ1bkNvbmZpcm1hdGlvbihpY29uOiBzdHJpbmcgPSAncGkgcGktZXhjbGFtYXRpb24tdHJpYW5nbGUnLCB0aXRsZT86IHN0cmluZywgbWVzc2FnZT86IHN0cmluZywgYWNjZXB0VGl0bGU/OiBzdHJpbmcsIHJlamVjdFRpdGxlPzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hhc1J1bkNvbmZpcm1hdGlvbiA9IHRydWU7XG4gICAgICAgIHRoaXMuX3J1bkNvbmZpcm1hdGlvbkljb24gPSBpY29uO1xuICAgICAgICB0aGlzLl9ydW5Db25maXJtYXRpb25UaXRsZSA9IHRpdGxlO1xuICAgICAgICB0aGlzLl9ydW5Db25maXJtYXRpb25NZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgdGhpcy5fcnVuQ29uZmlybWF0aW9uQWNjZXB0VGl0bGUgPSBhY2NlcHRUaXRsZTtcbiAgICAgICAgdGhpcy5fcnVuQ29uZmlybWF0aW9uUmVqZWN0VGl0bGUgPSByZWplY3RUaXRsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPiBleHRlbmRzIEFjdGlvbkRlc2NyaXB0b3I8VD4ge1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZWRpdG9yRGVzY3JpcHRvcjogRWRpdG9yRGVzY3JpcHRvcjxUPjtcblxuICAgIHByb3RlY3RlZCBfZWRpdG9yVGl0bGU/OiBzdHJpbmcgPSB1bmRlZmluZWQ7XG5cbiAgICBwcm90ZWN0ZWQgX2ZldGNoRnVuY3Rpb24/OiAoY3R4OiBBY3Rpb25FeGVjQ29udGV4dDxULCBhbnksIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgYW55Pj4pID0+IE9ic2VydmFibGU8VD47XG4gICAgcHJvdGVjdGVkIF9zdWJtaXRGdW5jdGlvbj86IChjdHg6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIGFueSwgSUVkaXRvckRhdGFQcm92aWRlcjxULCBhbnk+PikgPT4gT2JzZXJ2YWJsZTxUPjtcblxuICAgIGNvbnN0cnVjdG9yKGVkaXRvckRlc2NyaXB0b3I6IEVkaXRvckRlc2NyaXB0b3I8VD4sIGFjdGlvbk5hbWU6IHN0cmluZywgcGFyZW50VHlwZT86IENsYXNzVHlwZTxhbnk+LCBwYXJlbnRQcm9wZXJ0eT86IHN0cmluZykge1xuICAgICAgICBzdXBlcihlZGl0b3JEZXNjcmlwdG9yLm1vZGVsLCBhY3Rpb25OYW1lLCBwYXJlbnRUeXBlLCBwYXJlbnRQcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX3R5cGUgPSBBY3Rpb25UeXBlRW51bS5FZGl0b3I7XG4gICAgICAgIHRoaXMuX2VkaXRvckRlc2NyaXB0b3IgPSBlZGl0b3JEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZWRpdG9yVGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0b3JUaXRsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVkaXRvckRlc2NyaXB0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0b3JEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgcnVuRnVuY3Rpb24oKTogKGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgYW55LCBJRGF0YVByb3ZpZGVyPFQsIGFueT4+KSA9PiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSdW4gZnVuY3Rpb24gY2Fubm90IGJlIHVzZWQgaW4gZWRpdG9yIGFjdGlvbi4gVXNlIHN1Ym1pdCBmdW5jdGlvbiBpbnN0ZWFkIScpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmV0Y2hGdW5jdGlvbigpOiAoY3R4OiBBY3Rpb25FeGVjQ29udGV4dDxULCBhbnksIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgYW55Pj4pID0+IE9ic2VydmFibGU8VD4ge1xuICAgICAgICBpZiAoIXRoaXMuX2ZldGNoRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiAoY3R4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBGZXRjaCBmdW5jdGlvbiBpcyBub3QgcHJvdmlkZWQgZm9yIGZ1bmN0aW9uICR7dGhpcy5fYWN0aW9uTmFtZX0sIHVzaW5nIGRlZmF1bHQgYW5kIHJldHVybmluZyBjb250ZXh0IGl0ZW1gLCBjdHguZGF0YT8uaXRlbSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKGN0eC5kYXRhPy5pdGVtID8gY3R4LmRhdGEuaXRlbSA6IHt9IGFzIFQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9mZXRjaEZ1bmN0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc3VibWl0RnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdWJtaXRGdW5jdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEVkaXRvclRpdGxlKHRpdGxlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZWRpdG9yVGl0bGUgPSB0aXRsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHdpdGhSdW5GdW5jdGlvbjxTPihmbjogKGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4pID0+IE9ic2VydmFibGU8VD4pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aFN1Ym1pdEZ1bmN0aW9uKGZuIGFzIChjdHg6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIFMsIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz4+KSA9PiBPYnNlcnZhYmxlPFQ+KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGZXRjaEZ1bmN0aW9uPFM+KGZuOiAoY3R4OiBBY3Rpb25FeGVjQ29udGV4dDxULCBTLCBJRWRpdG9yRGF0YVByb3ZpZGVyPFQsIFM+PikgPT4gT2JzZXJ2YWJsZTxUPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9mZXRjaEZ1bmN0aW9uID0gZm47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU3VibWl0RnVuY3Rpb248Uz4oZm46IChjdHg6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIFMsIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz4+KSA9PiBPYnNlcnZhYmxlPFQ+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3N1Ym1pdEZ1bmN0aW9uID0gZm47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkVkaXRvckRldGFpbHNEZXNjcmlwdG9yPFQ+IGV4dGVuZHMgQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPiB7XG4gICAgY29uc3RydWN0b3IoZWRpdG9yRGVzY3JpcHRvcjogRWRpdG9yRGVzY3JpcHRvcjxUPikge1xuICAgICAgICBzdXBlcihlZGl0b3JEZXNjcmlwdG9yLCAnZGV0YWlscycpO1xuICAgICAgICB0aGlzLndpdGhQb3NpdGlvbihBY3Rpb25Qb3NpdGlvbkVudW0uUm93Q2xpY2spO1xuICAgICAgICB0aGlzLndpdGhSb3V0ZVRyaWdnZXIoJzppdGVtSWQnKTtcbiAgICAgICAgdGhpcy53aXRoRmV0Y2hGdW5jdGlvbihjdHggPT4gY3R4LmRhdGFQcm92aWRlcj8uZmV0Y2ggJiYgY3R4LmRhdGE/Lml0ZW1JZFxuICAgICAgICAgICAgPyBjdHguZGF0YVByb3ZpZGVyLmZldGNoKGN0eC5kYXRhPy5pdGVtSWQsIGN0eC5zZXJ2aWNlSW5zdGFuY2UpXG4gICAgICAgICAgICA6IHRocm93RXJyb3IobmV3IEVycm9yKGBEYXRhIHByb3ZpZGVyIGZldGNoIGZ1bmN0aW9uIG9yIGl0ZW0gaWQgJHtjdHguZGF0YT8uaXRlbUlkfSBpcyBtaXNzaW5nLmApKSk7XG4gICAgICAgIHRoaXMud2l0aENsYXNzTmFtZSgnbW5nLWRldGFpbHMtZHluYW1pYy1kaWFsb2cnKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25FZGl0b3JBZGREZXNjcmlwdG9yPFQ+IGV4dGVuZHMgQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPiB7XG4gICAgY29uc3RydWN0b3IoZWRpdG9yRGVzY3JpcHRvcjogRWRpdG9yRGVzY3JpcHRvcjxUPikge1xuICAgICAgICBzdXBlcihlZGl0b3JEZXNjcmlwdG9yLCAnYWRkJyk7XG4gICAgICAgIHRoaXMud2l0aFBvc2l0aW9uKEFjdGlvblBvc2l0aW9uRW51bS5Ub29sYmFyTGVmdCk7XG4gICAgICAgIHRoaXMud2l0aFJvdXRlVHJpZ2dlcignYWRkJyk7XG4gICAgICAgIHRoaXMud2l0aFN1Ym1pdEZ1bmN0aW9uKGN0eCA9PiBjdHguZGF0YVByb3ZpZGVyPy5jcmVhdGVcbiAgICAgICAgICAgID8gY3R4LmRhdGFQcm92aWRlci5jcmVhdGUoY3R4LmRhdGE/Lml0ZW0sIGN0eC5zZXJ2aWNlSW5zdGFuY2UpXG4gICAgICAgICAgICA6IHRocm93RXJyb3IobmV3IEVycm9yKGBEYXRhIHByb3ZpZGVyIGNyZWF0ZSBmdW5jdGlvbiBpcyBtaXNzaW5nLmApKSk7XG4gICAgICAgIHRoaXMud2l0aExldmVsKEFjdGlvbkxldmVsRW51bS5TdWNjZXNzKTtcbiAgICAgICAgdGhpcy53aXRoSWNvbigncGkgcGktcGx1cycpO1xuICAgICAgICB0aGlzLndpdGhDbGFzc05hbWUoJ21uZy1kZXRhaWxzLWR5bmFtaWMtZGlhbG9nJyk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uRWRpdG9yRWRpdERlc2NyaXB0b3I8VD4gZXh0ZW5kcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+IHtcbiAgICBjb25zdHJ1Y3RvcihlZGl0b3JEZXNjcmlwdG9yOiBFZGl0b3JEZXNjcmlwdG9yPFQ+KSB7XG4gICAgICAgIHN1cGVyKGVkaXRvckRlc2NyaXB0b3IsICdlZGl0Jyk7XG4gICAgICAgIHRoaXMud2l0aFBvc2l0aW9uKEFjdGlvblBvc2l0aW9uRW51bS5Sb3dJbmxpbmUpO1xuICAgICAgICB0aGlzLndpdGhUaXRsZShudWxsKTtcbiAgICAgICAgdGhpcy53aXRoUm91dGVUcmlnZ2VyKCc6aXRlbUlkL2VkaXQnKTtcbiAgICAgICAgdGhpcy53aXRoRmV0Y2hGdW5jdGlvbihjdHggPT4gY3R4LmRhdGFQcm92aWRlcj8uZmV0Y2ggJiYgY3R4LmRhdGE/Lml0ZW1JZFxuICAgICAgICAgICAgPyBjdHguZGF0YVByb3ZpZGVyLmZldGNoKGN0eC5kYXRhLml0ZW1JZCwgY3R4LnNlcnZpY2VJbnN0YW5jZSlcbiAgICAgICAgICAgIDogdGhyb3dFcnJvcihuZXcgRXJyb3IoYERhdGEgcHJvdmlkZXIgZmV0Y2ggZnVuY3Rpb24gb3IgaXRlbSBpZCAke2N0eC5kYXRhPy5pdGVtSWR9IGlzIG1pc3NpbmcuYCkpKTtcbiAgICAgICAgdGhpcy53aXRoU3VibWl0RnVuY3Rpb24oY3R4ID0+IGN0eC5kYXRhUHJvdmlkZXI/LnVwZGF0ZSAmJiBjdHguZGF0YT8uaXRlbUlkXG4gICAgICAgICAgICA/IGN0eC5kYXRhUHJvdmlkZXIudXBkYXRlKGN0eC5kYXRhLml0ZW1JZCwgY3R4LmRhdGE/Lml0ZW0sIGN0eC5zZXJ2aWNlSW5zdGFuY2UpXG4gICAgICAgICAgICA6IHRocm93RXJyb3IobmV3IEVycm9yKGBEYXRhIHByb3ZpZGVyIHVwZGF0ZSBmdW5jdGlvbiBvciBpdGVtIGlkICR7Y3R4LmRhdGE/Lml0ZW1JZH0gaXMgbWlzc2luZy5gKSkpO1xuICAgICAgICB0aGlzLndpdGhJY29uKCdwaSBwaS1wZW5jaWwnKTtcbiAgICAgICAgdGhpcy53aXRoQ2xhc3NOYW1lKCdtbmctZGV0YWlscy1keW5hbWljLWRpYWxvZycpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkRlbGV0ZURlc2NyaXB0b3I8VD4gZXh0ZW5kcyBBY3Rpb25EZXNjcmlwdG9yPFQ+IHtcbiAgICBjb25zdHJ1Y3Rvcihtb2RlbDogTW9kZWxEZXNjcmlwdG9yPFQ+KSB7XG4gICAgICAgIHN1cGVyKG1vZGVsLCAnZGVsZXRlJyk7XG4gICAgICAgIHRoaXMud2l0aFBvc2l0aW9uKEFjdGlvblBvc2l0aW9uRW51bS5Sb3dJbmxpbmUpO1xuICAgICAgICB0aGlzLndpdGhUaXRsZShudWxsKTtcbiAgICAgICAgdGhpcy53aXRoUnVuRnVuY3Rpb24oY3R4ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVkaXRvckRhdGFQcm92aWRlciA9IGN0eC5kYXRhUHJvdmlkZXIgYXMgSUVkaXRvckRhdGFQcm92aWRlcjxULCBhbnk+O1xuICAgICAgICAgICAgcmV0dXJuIGVkaXRvckRhdGFQcm92aWRlcj8uZGVsZXRlICYmIGN0eC5kYXRhPy5pdGVtSWRcbiAgICAgICAgICAgICAgICA/IGVkaXRvckRhdGFQcm92aWRlci5kZWxldGUoY3R4LmRhdGEuaXRlbUlkLCBjdHguZGF0YS5pdGVtLCBjdHguc2VydmljZUluc3RhbmNlKVxuICAgICAgICAgICAgICAgIDogdGhyb3dFcnJvcihuZXcgRXJyb3IoYERhdGEgcHJvdmlkZXIgZGVsZXRlIGZ1bmN0aW9uIG9yIGl0ZW0gaWQgJHtjdHguZGF0YT8uaXRlbUlkfSBpcyBtaXNzaW5nLmApKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy53aXRoTGV2ZWwoQWN0aW9uTGV2ZWxFbnVtLkRhbmdlcik7XG4gICAgICAgIHRoaXMud2l0aEljb24oJ3BpIHBpLXRyYXNoJyk7XG4gICAgICAgIHRoaXMud2l0aFJ1bkNvbmZpcm1hdGlvbih1bmRlZmluZWQpO1xuICAgIH1cbn1cblxuZXhwb3J0IGVudW0gQWN0aW9uUG9zaXRpb25FbnVtIHtcbiAgICBUb29sYmFyTGVmdCxcbiAgICBUb29sYmFyUmlnaHQsXG4gICAgVGFibGVIZWFkZXIsXG4gICAgUm93SW5saW5lLFxuICAgIFJvd0NsaWNrXG59XG5cbmV4cG9ydCBlbnVtIEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bSB7XG4gICAgT25DbGljaywgLy8gYWN0aW9uIGlzIHRyaWdnZXJlZCBmb3IgYWN0aXZhdGlvbiBvbiBjbGlja1xuICAgIE9uUm91dGUgLy8gYWN0aW9uIGlzIHRyaWdnZXJlZCBmb3IgYWN0aXZhdGlvbiBieSByb3V0ZSB1cmxcbn1cblxuZXhwb3J0IGVudW0gQWN0aW9uVHlwZUVudW0ge1xuICAgIERpcmVjdCwgLy8gYWN0aW9uIGlzIGRpcmVjdGx5IGFjdGl2YXRlZCBhbmQgZXhlY3V0ZWRcbiAgICBFZGl0b3IgLy8gZWRpdG9yIHByb3ZpZGluZyBtaWRkbGUgc3RlcCBmb3IgYWN0aXZhdGlvblxufVxuXG5leHBvcnQgZW51bSBBY3Rpb25MZXZlbEVudW0ge1xuICAgIERlZmF1bHQsXG4gICAgUHJpbWFyeSxcbiAgICBTZWNvbmRhcnksXG4gICAgSW5mbyxcbiAgICBIZWxwLFxuICAgIFN1Y2Nlc3MsXG4gICAgV2FybmluZyxcbiAgICBEYW5nZXJcbn1cbiJdfQ==