@eo-sdk/client 10.0.0-beta.4 → 10.0.0-beta.5

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 (254) hide show
  1. package/app/eo-client/about-state/about-state.component.d.ts.map +1 -1
  2. package/app/eo-client/dashboard/dashboard.component.d.ts +6 -7
  3. package/app/eo-client/dashboard/dashboard.component.d.ts.map +1 -1
  4. package/app/eo-client/favorite-state/favorite-state.component.d.ts +7 -8
  5. package/app/eo-client/favorite-state/favorite-state.component.d.ts.map +1 -1
  6. package/app/eo-client/inbox-state/inbox-state/inbox-state.component.d.ts +8 -10
  7. package/app/eo-client/inbox-state/inbox-state/inbox-state.component.d.ts.map +1 -1
  8. package/app/eo-client/login/login.component.d.ts +4 -2
  9. package/app/eo-client/login/login.component.d.ts.map +1 -1
  10. package/app/eo-client/notifications-state/notifications-state.component.d.ts +9 -11
  11. package/app/eo-client/notifications-state/notifications-state.component.d.ts.map +1 -1
  12. package/app/eo-client/object-state/object-state/object-state.component.d.ts +10 -11
  13. package/app/eo-client/object-state/object-state/object-state.component.d.ts.map +1 -1
  14. package/app/eo-client/prepare-state/prepare-state/prepare-state.component.d.ts +8 -9
  15. package/app/eo-client/prepare-state/prepare-state/prepare-state.component.d.ts.map +1 -1
  16. package/app/eo-client/process-state/process-state.component.d.ts +8 -10
  17. package/app/eo-client/process-state/process-state.component.d.ts.map +1 -1
  18. package/app/eo-client/recyclebin-state/recyclebin-state.component.d.ts +5 -6
  19. package/app/eo-client/recyclebin-state/recyclebin-state.component.d.ts.map +1 -1
  20. package/app/eo-client/result-state/result-state.component.d.ts +3 -5
  21. package/app/eo-client/result-state/result-state.component.d.ts.map +1 -1
  22. package/app/eo-client/settings/settings.component.d.ts +6 -7
  23. package/app/eo-client/settings/settings.component.d.ts.map +1 -1
  24. package/app/eo-client/stored-queries-state/stored-queries-state.component.d.ts +8 -10
  25. package/app/eo-client/stored-queries-state/stored-queries-state.component.d.ts.map +1 -1
  26. package/app/eo-client/version-state/version-state.component.d.ts +5 -7
  27. package/app/eo-client/version-state/version-state.component.d.ts.map +1 -1
  28. package/app/eo-framework/accordion/accordion.module.d.ts +1 -2
  29. package/app/eo-framework/accordion/accordion.module.d.ts.map +1 -1
  30. package/app/eo-framework/actions/action-menu/action-menu.component.d.ts +4 -5
  31. package/app/eo-framework/actions/action-menu/action-menu.component.d.ts.map +1 -1
  32. package/app/eo-framework/actions/action.module.d.ts +11 -10
  33. package/app/eo-framework/actions/action.module.d.ts.map +1 -1
  34. package/app/eo-framework/actions/actions/add-resubmission-action/add-resubmission/add-resubmission.component.d.ts +3 -2
  35. package/app/eo-framework/actions/actions/add-resubmission-action/add-resubmission/add-resubmission.component.d.ts.map +1 -1
  36. package/app/eo-framework/actions/actions/share-object-action/share-object/share-object.component.d.ts +9 -13
  37. package/app/eo-framework/actions/actions/share-object-action/share-object/share-object.component.d.ts.map +1 -1
  38. package/app/eo-framework/app-shell/app-bar/app-bar.component.d.ts +3 -4
  39. package/app/eo-framework/app-shell/app-bar/app-bar.component.d.ts.map +1 -1
  40. package/app/eo-framework/app-shell/app-bar/app-search/app-search.component.d.ts.map +1 -1
  41. package/app/eo-framework/app-shell/app-bar/side-bar/side-bar.component.d.ts +1 -2
  42. package/app/eo-framework/app-shell/app-bar/side-bar/side-bar.component.d.ts.map +1 -1
  43. package/app/eo-framework/app-shell/app-shell.module.d.ts +18 -20
  44. package/app/eo-framework/app-shell/app-shell.module.d.ts.map +1 -1
  45. package/app/eo-framework/app-shell/index.d.ts +0 -1
  46. package/app/eo-framework/app-shell/index.d.ts.map +1 -1
  47. package/app/eo-framework/eo-framework.module.d.ts +37 -38
  48. package/app/eo-framework/eo-framework.module.d.ts.map +1 -1
  49. package/app/eo-framework/form-elements/date/date.component.d.ts +0 -2
  50. package/app/eo-framework/form-elements/date/date.component.d.ts.map +1 -1
  51. package/app/eo-framework/form-elements/form-elements.module.d.ts +9 -18
  52. package/app/eo-framework/form-elements/form-elements.module.d.ts.map +1 -1
  53. package/app/eo-framework/form-elements/id-reference/reference-finder/reference-finder.component.d.ts +1 -0
  54. package/app/eo-framework/form-elements/id-reference/reference-finder/reference-finder.component.d.ts.map +1 -1
  55. package/app/eo-framework/grid/filters/datetime-filter.component.d.ts +0 -2
  56. package/app/eo-framework/grid/filters/datetime-filter.component.d.ts.map +1 -1
  57. package/app/eo-framework/grid/grid.component.d.ts +7 -8
  58. package/app/eo-framework/grid/grid.component.d.ts.map +1 -1
  59. package/app/eo-framework/grid/grid.module.d.ts +7 -8
  60. package/app/eo-framework/grid/grid.module.d.ts.map +1 -1
  61. package/app/eo-framework/inbox-details/inbox-details.component.d.ts +1 -2
  62. package/app/eo-framework/inbox-details/inbox-details.component.d.ts.map +1 -1
  63. package/app/eo-framework/index.d.ts +0 -4
  64. package/app/eo-framework/index.d.ts.map +1 -1
  65. package/app/eo-framework/media/media.component.d.ts +4 -3
  66. package/app/eo-framework/media/media.component.d.ts.map +1 -1
  67. package/app/eo-framework/object-details/favorite-icon/favorite-icon.component.d.ts +2 -3
  68. package/app/eo-framework/object-details/favorite-icon/favorite-icon.component.d.ts.map +1 -1
  69. package/app/eo-framework/object-details/object-details.component.d.ts +5 -4
  70. package/app/eo-framework/object-details/object-details.component.d.ts.map +1 -1
  71. package/app/eo-framework/object-details/object-details.module.d.ts +2 -1
  72. package/app/eo-framework/object-details/object-details.module.d.ts.map +1 -1
  73. package/app/eo-framework/object-details/object-history/object-history.component.d.ts +2 -3
  74. package/app/eo-framework/object-details/object-history/object-history.component.d.ts.map +1 -1
  75. package/app/eo-framework/object-form/object-form/form-element/form-element-template.directive.d.ts +10 -0
  76. package/app/eo-framework/object-form/object-form/form-element/form-element-template.directive.d.ts.map +1 -0
  77. package/app/eo-framework/object-form/object-form/form-element/form-element.component.d.ts +8 -3
  78. package/app/eo-framework/object-form/object-form/form-element/form-element.component.d.ts.map +1 -1
  79. package/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.d.ts +1 -2
  80. package/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.d.ts.map +1 -1
  81. package/app/eo-framework/object-form/object-form/form-element-table/form-element.interface.d.ts +7 -2
  82. package/app/eo-framework/object-form/object-form/form-element-table/form-element.interface.d.ts.map +1 -1
  83. package/app/eo-framework/object-form/object-form/form-element-table/row-edit/row-edit.component.d.ts +28 -11
  84. package/app/eo-framework/object-form/object-form/form-element-table/row-edit/row-edit.component.d.ts.map +1 -1
  85. package/app/eo-framework/object-form/object-form/object-form-script/object-form-script.service.d.ts.map +1 -1
  86. package/app/eo-framework/object-form/object-form/object-form.component.d.ts +1 -2
  87. package/app/eo-framework/object-form/object-form/object-form.component.d.ts.map +1 -1
  88. package/app/eo-framework/object-form/object-form-helper.service.d.ts.map +1 -1
  89. package/app/eo-framework/object-form/object-form.module.d.ts +9 -9
  90. package/app/eo-framework/object-state-details/object-state-details.component.d.ts +1 -2
  91. package/app/eo-framework/object-state-details/object-state-details.component.d.ts.map +1 -1
  92. package/app/eo-framework/prepare-details/prepare-details.component.d.ts +8 -9
  93. package/app/eo-framework/prepare-details/prepare-details.component.d.ts.map +1 -1
  94. package/app/eo-framework/process/details/process-details.component.d.ts +7 -8
  95. package/app/eo-framework/process/details/process-details.component.d.ts.map +1 -1
  96. package/app/eo-framework/recyclebin-details/recyclebin-details.component.d.ts +9 -11
  97. package/app/eo-framework/recyclebin-details/recyclebin-details.component.d.ts.map +1 -1
  98. package/app/eo-framework/result-list/result-list.component.d.ts +5 -6
  99. package/app/eo-framework/result-list/result-list.component.d.ts.map +1 -1
  100. package/app/eo-framework/settings/settings.module.d.ts +3 -4
  101. package/app/eo-framework/settings/settings.module.d.ts.map +1 -1
  102. package/app/eo-framework/stored-query/stored-query-details/stored-query-details.component.d.ts +4 -5
  103. package/app/eo-framework/stored-query/stored-query-details/stored-query-details.component.d.ts.map +1 -1
  104. package/app/eo-framework/ui/eo-dialog/eo-dialog.component.d.ts +2 -3
  105. package/app/eo-framework/ui/eo-dialog/eo-dialog.component.d.ts.map +1 -1
  106. package/app/eo-framework/ui/outside-click/outside-click.directive.d.ts +1 -2
  107. package/app/eo-framework/ui/outside-click/outside-click.directive.d.ts.map +1 -1
  108. package/app/eo-framework/ui/signature-tab/signature-tab.component.d.ts +0 -1
  109. package/app/eo-framework/ui/signature-tab/signature-tab.component.d.ts.map +1 -1
  110. package/app/eo-framework/util/index.d.ts +0 -1
  111. package/app/eo-framework/util/index.d.ts.map +1 -1
  112. package/app/eo-framework/util/util.module.d.ts +0 -1
  113. package/app/eo-framework/util/util.module.d.ts.map +1 -1
  114. package/app/eo-framework-core/layout/layout.service.d.ts +2 -26
  115. package/app/eo-framework-core/layout/layout.service.d.ts.map +1 -1
  116. package/app/eo-framework-core/pipes/locale-number.pipe.d.ts +2 -3
  117. package/app/eo-framework-core/pipes/locale-number.pipe.d.ts.map +1 -1
  118. package/assets/_default/i18n/de.json +2 -1
  119. package/assets/_default/i18n/en.json +7 -6
  120. package/assets/_default/svg/ic_add_document_file_as_new_version.svg +1 -0
  121. package/assets/_default/svg/ic_create_document.svg +1 -0
  122. package/assets/_default/svg/ic_create_document_in_folder.svg +1 -0
  123. package/esm2020/app/eo-client/about-state/about-state.component.mjs +5 -5
  124. package/esm2020/app/eo-client/dashboard/dashboard.component.mjs +17 -14
  125. package/esm2020/app/eo-client/favorite-state/favorite-state.component.mjs +15 -14
  126. package/esm2020/app/eo-client/inbox-state/inbox-state/inbox-state.component.mjs +14 -11
  127. package/esm2020/app/eo-client/login/login.component.mjs +3 -3
  128. package/esm2020/app/eo-client/notifications-state/notifications-state.component.mjs +16 -12
  129. package/esm2020/app/eo-client/object-state/object-state/object-state.component.mjs +27 -23
  130. package/esm2020/app/eo-client/prepare-state/prepare-state/prepare-state.component.mjs +12 -9
  131. package/esm2020/app/eo-client/process-state/process-state.component.mjs +6 -9
  132. package/esm2020/app/eo-client/recyclebin-state/recyclebin-state.component.mjs +14 -11
  133. package/esm2020/app/eo-client/result-state/result-state.component.mjs +11 -8
  134. package/esm2020/app/eo-client/settings/settings.component.mjs +16 -12
  135. package/esm2020/app/eo-client/stored-queries-state/stored-queries-state.component.mjs +16 -13
  136. package/esm2020/app/eo-client/version-state/version-state.component.mjs +13 -10
  137. package/esm2020/app/eo-framework/accordion/accordion.module.mjs +3 -7
  138. package/esm2020/app/eo-framework/accordion/simple-accordion/simple-accordion.component.mjs +3 -3
  139. package/esm2020/app/eo-framework/actions/action-menu/action-menu.component.mjs +15 -11
  140. package/esm2020/app/eo-framework/actions/action.module.mjs +5 -2
  141. package/esm2020/app/eo-framework/actions/actions/add-resubmission-action/add-resubmission/add-resubmission.component.mjs +5 -7
  142. package/esm2020/app/eo-framework/actions/actions/add-subscription-action/add-subscription/add-subscription.component.mjs +3 -3
  143. package/esm2020/app/eo-framework/actions/actions/custom-actions/custom-actions.component.mjs +2 -2
  144. package/esm2020/app/eo-framework/actions/actions/share-object-action/share-object/share-object.component.mjs +43 -48
  145. package/esm2020/app/eo-framework/actions/actions/signature-action/signature/signature.component.mjs +2 -2
  146. package/esm2020/app/eo-framework/actions/actions/workflow-action/workflow/workflow.component.mjs +2 -2
  147. package/esm2020/app/eo-framework/app-shell/app-bar/app-bar.component.mjs +16 -14
  148. package/esm2020/app/eo-framework/app-shell/app-bar/app-search/app-search.component.mjs +7 -3
  149. package/esm2020/app/eo-framework/app-shell/app-bar/side-bar/side-bar.component.mjs +3 -5
  150. package/esm2020/app/eo-framework/app-shell/app-shell.module.mjs +1 -8
  151. package/esm2020/app/eo-framework/app-shell/index.mjs +1 -2
  152. package/esm2020/app/eo-framework/eo-framework.module.mjs +35 -43
  153. package/esm2020/app/eo-framework/form-elements/date/date.component.mjs +2 -12
  154. package/esm2020/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.mjs +3 -3
  155. package/esm2020/app/eo-framework/form-elements/form-elements.module.mjs +28 -37
  156. package/esm2020/app/eo-framework/form-elements/id-reference/reference-finder/reference-finder.component.mjs +10 -6
  157. package/esm2020/app/eo-framework/form-elements/organization/organization.component.mjs +3 -3
  158. package/esm2020/app/eo-framework/form-elements/reference/reference.component.mjs +4 -5
  159. package/esm2020/app/eo-framework/grid/filters/datetime-filter.component.mjs +2 -6
  160. package/esm2020/app/eo-framework/grid/filters/dynamic-list-filter.component.mjs +3 -3
  161. package/esm2020/app/eo-framework/grid/filters/organization-filter.component.mjs +3 -3
  162. package/esm2020/app/eo-framework/grid/grid.component.mjs +16 -12
  163. package/esm2020/app/eo-framework/grid/grid.module.mjs +1 -5
  164. package/esm2020/app/eo-framework/inbox-details/inbox-details.component.mjs +16 -11
  165. package/esm2020/app/eo-framework/index.mjs +1 -5
  166. package/esm2020/app/eo-framework/media/media.component.mjs +31 -12
  167. package/esm2020/app/eo-framework/object-details/favorite-icon/favorite-icon.component.mjs +13 -10
  168. package/esm2020/app/eo-framework/object-details/object-details.component.mjs +42 -30
  169. package/esm2020/app/eo-framework/object-details/object-details.module.mjs +7 -3
  170. package/esm2020/app/eo-framework/object-details/object-history/object-history.component.mjs +13 -9
  171. package/esm2020/app/eo-framework/object-form/object-form/form-element/form-element-template.directive.mjs +18 -0
  172. package/esm2020/app/eo-framework/object-form/object-form/form-element/form-element.component.mjs +20 -6
  173. package/esm2020/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.mjs +21 -22
  174. package/esm2020/app/eo-framework/object-form/object-form/form-element-table/form-element.interface.mjs +1 -1
  175. package/esm2020/app/eo-framework/object-form/object-form/form-element-table/row-edit/row-edit.component.mjs +94 -32
  176. package/esm2020/app/eo-framework/object-form/object-form/object-form-group/object-form-group.component.mjs +6 -4
  177. package/esm2020/app/eo-framework/object-form/object-form/object-form-script/object-form-script.service.mjs +2 -3
  178. package/esm2020/app/eo-framework/object-form/object-form/object-form.component.mjs +3 -5
  179. package/esm2020/app/eo-framework/object-form/object-form-helper.service.mjs +2 -2
  180. package/esm2020/app/eo-framework/object-form/object-form.module.mjs +9 -10
  181. package/esm2020/app/eo-framework/object-state-details/object-state-details.component.mjs +15 -13
  182. package/esm2020/app/eo-framework/prepare-details/prepare-details.component.mjs +16 -14
  183. package/esm2020/app/eo-framework/process/details/process-details.component.mjs +16 -12
  184. package/esm2020/app/eo-framework/process-form/process-form.component.mjs +2 -2
  185. package/esm2020/app/eo-framework/recyclebin-details/recyclebin-details.component.mjs +25 -17
  186. package/esm2020/app/eo-framework/result-list/result-list.component.mjs +18 -14
  187. package/esm2020/app/eo-framework/settings/settings.module.mjs +1 -5
  188. package/esm2020/app/eo-framework/stored-query/stored-query-details/stored-query-details.component.mjs +17 -13
  189. package/esm2020/app/eo-framework/ui/eo-dialog/eo-dialog.component.mjs +12 -8
  190. package/esm2020/app/eo-framework/ui/eo-icon/eo-icon.component.mjs +2 -2
  191. package/esm2020/app/eo-framework/ui/outside-click/outside-click.directive.mjs +11 -8
  192. package/esm2020/app/eo-framework/ui/signature-tab/signature-tab.component.mjs +3 -6
  193. package/esm2020/app/eo-framework/upload-overlay/upload-overlay.component.mjs +3 -3
  194. package/esm2020/app/eo-framework/util/index.mjs +1 -2
  195. package/esm2020/app/eo-framework/util/util.module.mjs +2 -3
  196. package/esm2020/app/eo-framework-core/layout/layout.service.mjs +61 -63
  197. package/esm2020/app/eo-framework-core/pipes/locale-number.pipe.mjs +11 -8
  198. package/esm2020/projects/eo-sdk/core/lib/eo-core.module.mjs +8 -8
  199. package/esm2020/projects/eo-sdk/core/lib/model/inbox-item.model.mjs +2 -6
  200. package/esm2020/projects/eo-sdk/core/lib/service/dms/dms.service.mjs +14 -16
  201. package/esm2020/projects/eo-sdk/core/lib/service/prepare/prepare.service.mjs +15 -12
  202. package/esm2020/projects/eo-sdk/core/lib/service/system/system.service.mjs +2 -6
  203. package/esm2020/projects/eo-sdk/core/lib/util/utils.mjs +3 -3
  204. package/fesm2015/eo-sdk-client-projects-eo-sdk-core.mjs +157 -165
  205. package/fesm2015/eo-sdk-client-projects-eo-sdk-core.mjs.map +1 -1
  206. package/fesm2015/eo-sdk-client.mjs +15791 -16532
  207. package/fesm2015/eo-sdk-client.mjs.map +1 -1
  208. package/fesm2020/eo-sdk-client-projects-eo-sdk-core.mjs +157 -165
  209. package/fesm2020/eo-sdk-client-projects-eo-sdk-core.mjs.map +1 -1
  210. package/fesm2020/eo-sdk-client.mjs +15665 -16407
  211. package/fesm2020/eo-sdk-client.mjs.map +1 -1
  212. package/package.json +4 -5
  213. package/projects/eo-sdk/core/lib/eo-core.module.d.ts.map +1 -1
  214. package/projects/eo-sdk/core/lib/model/inbox-item.model.d.ts.map +1 -1
  215. package/projects/eo-sdk/core/lib/service/dms/dms.service.d.ts +10 -8
  216. package/projects/eo-sdk/core/lib/service/dms/dms.service.d.ts.map +1 -1
  217. package/projects/eo-sdk/core/lib/service/prepare/prepare.service.d.ts +1 -0
  218. package/projects/eo-sdk/core/lib/service/prepare/prepare.service.d.ts.map +1 -1
  219. package/projects/eo-sdk/core/lib/service/system/system.service.d.ts.map +1 -1
  220. package/projects/eo-sdk/core/lib/util/utils.d.ts +3 -4
  221. package/projects/eo-sdk/core/lib/util/utils.d.ts.map +1 -1
  222. package/scss/_main.scss +1 -1
  223. package/scss/_mixins.scss +6 -6
  224. package/styles.css +1 -1
  225. package/app/eo-framework/app-shell/app-bar/app-layout/app-layout.component.d.ts +0 -24
  226. package/app/eo-framework/app-shell/app-bar/app-layout/app-layout.component.d.ts.map +0 -1
  227. package/app/eo-framework/split/index.d.ts +0 -5
  228. package/app/eo-framework/split/index.d.ts.map +0 -1
  229. package/app/eo-framework/split/split/split.component.d.ts +0 -83
  230. package/app/eo-framework/split/split/split.component.d.ts.map +0 -1
  231. package/app/eo-framework/split/split-area/split-area.component.d.ts +0 -37
  232. package/app/eo-framework/split/split-area/split-area.component.d.ts.map +0 -1
  233. package/app/eo-framework/split/split-gutter/split-gutter.directive.d.ts +0 -21
  234. package/app/eo-framework/split/split-gutter/split-gutter.directive.d.ts.map +0 -1
  235. package/app/eo-framework/split/split.module.d.ts +0 -12
  236. package/app/eo-framework/split/split.module.d.ts.map +0 -1
  237. package/app/eo-framework/undock-split/undock-split.component.d.ts +0 -28
  238. package/app/eo-framework/undock-split/undock-split.component.d.ts.map +0 -1
  239. package/app/eo-framework/undock-split/undock-split.service.d.ts +0 -43
  240. package/app/eo-framework/undock-split/undock-split.service.d.ts.map +0 -1
  241. package/app/eo-framework/undock-split/undock-state.interface.d.ts +0 -6
  242. package/app/eo-framework/undock-split/undock-state.interface.d.ts.map +0 -1
  243. package/app/eo-framework/util/unsubscribe/unsubscribe.component.d.ts +0 -11
  244. package/app/eo-framework/util/unsubscribe/unsubscribe.component.d.ts.map +0 -1
  245. package/esm2020/app/eo-framework/app-shell/app-bar/app-layout/app-layout.component.mjs +0 -67
  246. package/esm2020/app/eo-framework/split/index.mjs +0 -5
  247. package/esm2020/app/eo-framework/split/split/split.component.mjs +0 -373
  248. package/esm2020/app/eo-framework/split/split-area/split-area.component.mjs +0 -131
  249. package/esm2020/app/eo-framework/split/split-gutter/split-gutter.directive.mjs +0 -73
  250. package/esm2020/app/eo-framework/split/split.module.mjs +0 -28
  251. package/esm2020/app/eo-framework/undock-split/undock-split.component.mjs +0 -89
  252. package/esm2020/app/eo-framework/undock-split/undock-split.service.mjs +0 -135
  253. package/esm2020/app/eo-framework/undock-split/undock-state.interface.mjs +0 -2
  254. package/esm2020/app/eo-framework/util/unsubscribe/unsubscribe.component.mjs +0 -23
@@ -1,67 +0,0 @@
1
- import { debounceTime, takeUntil } from 'rxjs/operators';
2
- import { Component, Input, ChangeDetectionStrategy } from '@angular/core';
3
- import { UnsubscribeOnDestroy } from '../../../util/unsubscribe/unsubscribe.component';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "../../../../eo-framework-core/layout/layout.service";
6
- import * as i2 from "../../../../eo-framework-core/pending-changes/pending-changes.service";
7
- import * as i3 from "@angular/common";
8
- import * as i4 from "@angular/forms";
9
- import * as i5 from "../../../ui/eo-icon/eo-icon.component";
10
- import * as i6 from "../../../ui/overlay/overlay.component";
11
- import * as i7 from "../../../form-elements/form-input/form-input.component";
12
- import * as i8 from "../../../form-elements/checkbox/checkbox.component";
13
- import * as i9 from "@ngx-translate/core";
14
- export class AppLayoutComponent extends UnsubscribeOnDestroy {
15
- get disableCache() {
16
- return this.layoutService.disableCache;
17
- }
18
- constructor(cd, layoutService, pendingChanges) {
19
- super();
20
- this.cd = cd;
21
- this.layoutService = layoutService;
22
- this.pendingChanges = pendingChanges;
23
- this.areas = [];
24
- }
25
- updateAreas(areas = []) {
26
- this.areas = areas || [];
27
- this.undockArea = this.layoutService.getUndockArea();
28
- this.countLayout = this.areas.filter(a => !a.visible).length;
29
- this.showLayout = (this.undockArea && !this.undockArea.dock) || this.areas.filter(a => !a.hidden).length > 1;
30
- }
31
- toggle(area) {
32
- // if ((area.visible && this.countLayout === 0) || (!area.visible && this.countLayout === 1)) {
33
- // if (!area.visible) {
34
- // this.layoutService.clearHistory();
35
- // }
36
- // this.toggleCache(area.visible);
37
- // }
38
- if (!this.pendingChanges.check()) {
39
- this.layoutService.toggleArea(area);
40
- }
41
- }
42
- undock() {
43
- this.layoutService.undockArea();
44
- }
45
- toggleCache(cache) {
46
- this.layoutService.disableCache = cache;
47
- }
48
- ngOnInit() {
49
- this.layoutService.areas$
50
- .pipe(takeUntil(this.componentDestroyed$), debounceTime(300))
51
- .subscribe(areas => {
52
- this.updateAreas(areas);
53
- this.cd.markForCheck();
54
- });
55
- }
56
- }
57
- AppLayoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: AppLayoutComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.LayoutService }, { token: i2.PendingChangesService }], target: i0.ɵɵFactoryTarget.Component });
58
- AppLayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: AppLayoutComponent, selector: "eo-app-layout", inputs: { areas: "areas", undockArea: "undockArea" }, usesInheritance: true, ngImport: i0, template: "<eo-overlay #oLayout [iconSrc]=\"'assets/_default/svg/ic_view_column.svg'\" *ngIf=\"showLayout\"\n [iconClass]=\"'white'\" [iconTitle]=\"'eo.bar.button.layout.title' | translate\" [badge]=\"countLayout\">\n <div class=\"container\">\n <eo-icon class=\"button white\"\n *ngFor=\"let area of areas\"\n [ngClass]=\"{visible: area.visible, hidden: area.hidden}\"\n [iconSrc]=\"'assets/_default/svg/ic_crop_portrait.svg'\"\n (click)=\"toggle(area)\">\n </eo-icon>\n <eo-icon class=\"button white undock-button\"\n *ngIf=\"undockArea\"\n [ngClass]=\"{visible: undockArea.dock}\"\n [iconSrc]=\"'assets/_default/svg/ic_undock.svg'\"\n (click)=\"undock()\">\n </eo-icon>\n </div>\n <div class=\"container dark\" *ngIf=\"undockArea && undockArea.dock\">\n <eo-form-input [label]=\"'eo.bar.button.layout.remember'|translate\" class=\"checkbox\">\n <eo-checkbox (ngModelChange)=\"toggleCache(!$event)\" [ngModel]=\"!disableCache\" [tristate]=\"false\" ></eo-checkbox>\n </eo-form-input>\n </div>\n</eo-overlay>\n", styles: [":host .undock-button{display:none}:host .container{display:flex;flex:1;flex-direction:row;min-height:0;min-width:0;padding:calc(var(--app-pane-padding) / 2)}:host eo-icon{color:rgba(var(--color-white-rgb),.4)}:host eo-icon.visible{color:var(--color-white)}:host eo-icon.hidden{display:none}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.EoIconComponent, selector: "eo-icon", inputs: ["objectType", "iconId", "iconSrc", "badge", "iconTitle"] }, { kind: "component", type: i6.OverlayComponent, selector: "eo-overlay", inputs: ["iconSrc", "badge", "iconClass", "styleClass", "active", "iconTitle"] }, { kind: "component", type: i7.FormInputComponent, selector: "eo-form-input", inputs: ["label", "tag", "description", "skipToggle", "isNull", "invalid", "disabled", "required"], outputs: ["onToggleLabel"] }, { kind: "component", type: i8.CheckboxComponent, selector: "eo-checkbox", inputs: ["tristate", "readonly"] }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
59
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: AppLayoutComponent, decorators: [{
60
- type: Component,
61
- args: [{ selector: 'eo-app-layout', changeDetection: ChangeDetectionStrategy.OnPush, template: "<eo-overlay #oLayout [iconSrc]=\"'assets/_default/svg/ic_view_column.svg'\" *ngIf=\"showLayout\"\n [iconClass]=\"'white'\" [iconTitle]=\"'eo.bar.button.layout.title' | translate\" [badge]=\"countLayout\">\n <div class=\"container\">\n <eo-icon class=\"button white\"\n *ngFor=\"let area of areas\"\n [ngClass]=\"{visible: area.visible, hidden: area.hidden}\"\n [iconSrc]=\"'assets/_default/svg/ic_crop_portrait.svg'\"\n (click)=\"toggle(area)\">\n </eo-icon>\n <eo-icon class=\"button white undock-button\"\n *ngIf=\"undockArea\"\n [ngClass]=\"{visible: undockArea.dock}\"\n [iconSrc]=\"'assets/_default/svg/ic_undock.svg'\"\n (click)=\"undock()\">\n </eo-icon>\n </div>\n <div class=\"container dark\" *ngIf=\"undockArea && undockArea.dock\">\n <eo-form-input [label]=\"'eo.bar.button.layout.remember'|translate\" class=\"checkbox\">\n <eo-checkbox (ngModelChange)=\"toggleCache(!$event)\" [ngModel]=\"!disableCache\" [tristate]=\"false\" ></eo-checkbox>\n </eo-form-input>\n </div>\n</eo-overlay>\n", styles: [":host .undock-button{display:none}:host .container{display:flex;flex:1;flex-direction:row;min-height:0;min-width:0;padding:calc(var(--app-pane-padding) / 2)}:host eo-icon{color:rgba(var(--color-white-rgb),.4)}:host eo-icon.visible{color:var(--color-white)}:host eo-icon.hidden{display:none}\n"] }]
62
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.LayoutService }, { type: i2.PendingChangesService }]; }, propDecorators: { areas: [{
63
- type: Input
64
- }], undockArea: [{
65
- type: Input
66
- }] } });
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWxheW91dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWZyYW1ld29yay9hcHAtc2hlbGwvYXBwLWJhci9hcHAtbGF5b3V0L2FwcC1sYXlvdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvYXBwLXNoZWxsL2FwcC1iYXIvYXBwLWxheW91dC9hcHAtbGF5b3V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxZQUFZLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFNBQVMsRUFBVSxLQUFLLEVBQUUsdUJBQXVCLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBRW5HLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLGlEQUFpRCxDQUFDOzs7Ozs7Ozs7OztBQVNyRixNQUFNLE9BQU8sa0JBQW1CLFNBQVEsb0JBQW9CO0lBSTFELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUM7SUFDekMsQ0FBQztJQU1ELFlBQW9CLEVBQXFCLEVBQ3JCLGFBQTRCLEVBQzVCLGNBQXFDO1FBQ3ZELEtBQUssRUFBRSxDQUFDO1FBSFUsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFDckIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsbUJBQWMsR0FBZCxjQUFjLENBQXVCO1FBTmhELFVBQUssR0FBZ0IsRUFBRSxDQUFDO0lBUWpDLENBQUM7SUFFRCxXQUFXLENBQUMsUUFBcUIsRUFBRTtRQUNqQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDN0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUMvRyxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQWU7UUFDcEIsZ0dBQWdHO1FBQzlGLHVCQUF1QjtRQUN2Qix1Q0FBdUM7UUFDdkMsSUFBSTtRQUNKLGtDQUFrQztRQUNwQyxJQUFJO1FBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFjO1FBQ3hCLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUMxQyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTTthQUN0QixJQUFJLENBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUNuQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQ2xCO2FBQ0EsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7OytHQXZEVSxrQkFBa0I7bUdBQWxCLGtCQUFrQixrSUNaL0IsZ25DQXNCQTsyRkRWYSxrQkFBa0I7a0JBTjlCLFNBQVM7K0JBQ0UsZUFBZSxtQkFHUix1QkFBdUIsQ0FBQyxNQUFNO3dLQVV0QyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZGVib3VuY2VUaW1lLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Q29tcG9uZW50LCBPbkluaXQsIElucHV0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBcmVhU3RhdGUsIExheW91dFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL2VvLWZyYW1ld29yay1jb3JlL2xheW91dC9sYXlvdXQuc2VydmljZSc7XG5pbXBvcnQge1Vuc3Vic2NyaWJlT25EZXN0cm95fSBmcm9tICcuLi8uLi8uLi91dGlsL3Vuc3Vic2NyaWJlL3Vuc3Vic2NyaWJlLmNvbXBvbmVudCc7XG5pbXBvcnQge1BlbmRpbmdDaGFuZ2VzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vZW8tZnJhbWV3b3JrLWNvcmUvcGVuZGluZy1jaGFuZ2VzL3BlbmRpbmctY2hhbmdlcy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW8tYXBwLWxheW91dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hcHAtbGF5b3V0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXBwLWxheW91dC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBBcHBMYXlvdXRDb21wb25lbnQgZXh0ZW5kcyBVbnN1YnNjcmliZU9uRGVzdHJveSBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgc2hvd0xheW91dDogYm9vbGVhbjtcbiAgY291bnRMYXlvdXQ6IG51bWJlcjtcbiAgZ2V0IGRpc2FibGVDYWNoZSgpIHtcbiAgICByZXR1cm4gdGhpcy5sYXlvdXRTZXJ2aWNlLmRpc2FibGVDYWNoZTtcbiAgfVxuXG4gIEBJbnB1dCgpIGFyZWFzOiBBcmVhU3RhdGVbXSA9IFtdO1xuICBASW5wdXQoKSB1bmRvY2tBcmVhOiBBcmVhU3RhdGU7XG5cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBsYXlvdXRTZXJ2aWNlOiBMYXlvdXRTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIHBlbmRpbmdDaGFuZ2VzOiBQZW5kaW5nQ2hhbmdlc1NlcnZpY2UpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgdXBkYXRlQXJlYXMoYXJlYXM6IEFyZWFTdGF0ZVtdID0gW10pIHtcbiAgICB0aGlzLmFyZWFzID0gYXJlYXMgfHwgW107XG4gICAgdGhpcy51bmRvY2tBcmVhID0gdGhpcy5sYXlvdXRTZXJ2aWNlLmdldFVuZG9ja0FyZWEoKTtcbiAgICB0aGlzLmNvdW50TGF5b3V0ID0gdGhpcy5hcmVhcy5maWx0ZXIoYSA9PiAhYS52aXNpYmxlKS5sZW5ndGg7XG4gICAgdGhpcy5zaG93TGF5b3V0ID0gKHRoaXMudW5kb2NrQXJlYSAmJiAhdGhpcy51bmRvY2tBcmVhLmRvY2spIHx8IHRoaXMuYXJlYXMuZmlsdGVyKGEgPT4gIWEuaGlkZGVuKS5sZW5ndGggPiAxO1xuICB9XG5cbiAgdG9nZ2xlKGFyZWE6IEFyZWFTdGF0ZSkge1xuICAgIC8vIGlmICgoYXJlYS52aXNpYmxlICYmIHRoaXMuY291bnRMYXlvdXQgPT09IDApIHx8ICAoIWFyZWEudmlzaWJsZSAmJiB0aGlzLmNvdW50TGF5b3V0ID09PSAxKSkge1xuICAgICAgLy8gaWYgKCFhcmVhLnZpc2libGUpIHtcbiAgICAgIC8vICAgdGhpcy5sYXlvdXRTZXJ2aWNlLmNsZWFySGlzdG9yeSgpO1xuICAgICAgLy8gfVxuICAgICAgLy8gdGhpcy50b2dnbGVDYWNoZShhcmVhLnZpc2libGUpO1xuICAgIC8vIH1cbiAgICBpZiAoIXRoaXMucGVuZGluZ0NoYW5nZXMuY2hlY2soKSkge1xuICAgICAgdGhpcy5sYXlvdXRTZXJ2aWNlLnRvZ2dsZUFyZWEoYXJlYSk7XG4gICAgfVxuICB9XG5cbiAgdW5kb2NrKCkge1xuICAgIHRoaXMubGF5b3V0U2VydmljZS51bmRvY2tBcmVhKCk7XG4gIH1cblxuICB0b2dnbGVDYWNoZShjYWNoZTogYm9vbGVhbikge1xuICAgIHRoaXMubGF5b3V0U2VydmljZS5kaXNhYmxlQ2FjaGUgPSBjYWNoZTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMubGF5b3V0U2VydmljZS5hcmVhcyRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5jb21wb25lbnREZXN0cm95ZWQkKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKDMwMClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoYXJlYXMgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUFyZWFzKGFyZWFzKTtcbiAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbn1cbiIsIjxlby1vdmVybGF5ICNvTGF5b3V0IFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX3ZpZXdfY29sdW1uLnN2ZydcIiAqbmdJZj1cInNob3dMYXlvdXRcIlxuICAgICAgICAgICAgW2ljb25DbGFzc109XCInd2hpdGUnXCIgW2ljb25UaXRsZV09XCInZW8uYmFyLmJ1dHRvbi5sYXlvdXQudGl0bGUnIHwgdHJhbnNsYXRlXCIgW2JhZGdlXT1cImNvdW50TGF5b3V0XCI+XG4gIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICA8ZW8taWNvbiBjbGFzcz1cImJ1dHRvbiB3aGl0ZVwiXG4gICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFyZWEgb2YgYXJlYXNcIlxuICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInt2aXNpYmxlOiBhcmVhLnZpc2libGUsIGhpZGRlbjogYXJlYS5oaWRkZW59XCJcbiAgICAgICAgICAgICBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19jcm9wX3BvcnRyYWl0LnN2ZydcIlxuICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGUoYXJlYSlcIj5cbiAgICA8L2VvLWljb24+XG4gICAgPGVvLWljb24gY2xhc3M9XCJidXR0b24gd2hpdGUgdW5kb2NrLWJ1dHRvblwiXG4gICAgICAgICAgICAgKm5nSWY9XCJ1bmRvY2tBcmVhXCJcbiAgICAgICAgICAgICBbbmdDbGFzc109XCJ7dmlzaWJsZTogdW5kb2NrQXJlYS5kb2NrfVwiXG4gICAgICAgICAgICAgW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfdW5kb2NrLnN2ZydcIlxuICAgICAgICAgICAgIChjbGljayk9XCJ1bmRvY2soKVwiPlxuICAgIDwvZW8taWNvbj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjb250YWluZXIgZGFya1wiICpuZ0lmPVwidW5kb2NrQXJlYSAmJiB1bmRvY2tBcmVhLmRvY2tcIj5cbiAgICA8ZW8tZm9ybS1pbnB1dCBbbGFiZWxdPVwiJ2VvLmJhci5idXR0b24ubGF5b3V0LnJlbWVtYmVyJ3x0cmFuc2xhdGVcIiBjbGFzcz1cImNoZWNrYm94XCI+XG4gICAgICA8ZW8tY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwidG9nZ2xlQ2FjaGUoISRldmVudClcIiBbbmdNb2RlbF09XCIhZGlzYWJsZUNhY2hlXCIgW3RyaXN0YXRlXT1cImZhbHNlXCIgPjwvZW8tY2hlY2tib3g+XG4gICAgPC9lby1mb3JtLWlucHV0PlxuICA8L2Rpdj5cbjwvZW8tb3ZlcmxheT5cbiJdfQ==
@@ -1,5 +0,0 @@
1
- export * from './split.module';
2
- export * from './split/split.component';
3
- export * from './split-area/split-area.component';
4
- export * from './split-gutter/split-gutter.directive';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWZyYW1ld29yay9zcGxpdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLHVDQUF1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zcGxpdC5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcGxpdC9zcGxpdC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcGxpdC1hcmVhL3NwbGl0LWFyZWEuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3BsaXQtZ3V0dGVyL3NwbGl0LWd1dHRlci5kaXJlY3RpdmUnO1xuIl19
@@ -1,373 +0,0 @@
1
- import { takeUntil, debounceTime } from 'rxjs/operators';
2
- import { Component, ChangeDetectionStrategy, HostBinding, Input, Output, EventEmitter } from '@angular/core';
3
- import { Subject, of as observableOf } from 'rxjs';
4
- import { UnsubscribeOnDestroy } from '../../util/unsubscribe/unsubscribe.component';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "../../../eo-framework-core/layout/layout.service";
7
- import * as i2 from "@eo-sdk/core";
8
- import * as i3 from "@angular/common";
9
- import * as i4 from "../split-gutter/split-gutter.directive";
10
- export class SplitComponent extends UnsubscribeOnDestroy {
11
- get styleFlexDirection() {
12
- return this.direction === 'vertical';
13
- }
14
- get styleFlexDirectionStyle() {
15
- return this.direction === 'horizontal' ? 'row' : 'column';
16
- }
17
- get dragging() {
18
- // prevent animation of areas when visibleTransition is false, or resizing
19
- return !this.visibleTransition || this.isDragging;
20
- }
21
- get styleWidth() {
22
- return (this.width && !isNaN(this.width) && this.width > 0) ? this.width + 'px' : '100%';
23
- }
24
- get styleHeight() {
25
- return (this.height && !isNaN(this.height) && this.height > 0) ? this.height + 'px' : '100%';
26
- }
27
- get visibleAreas() {
28
- return this.areas.filter(a => a.component.visible);
29
- }
30
- get nbGutters() {
31
- return this.visibleAreas.length - 1;
32
- }
33
- set cacheLayout(val) {
34
- if (this.applyCacheLayout) {
35
- (val && val.subscribe ? val : observableOf(val))
36
- .subscribe(cacheLayout => {
37
- this._cacheLayout = cacheLayout;
38
- this.updateLayout();
39
- });
40
- }
41
- }
42
- get cacheLayout() {
43
- return this._cacheLayout;
44
- }
45
- constructor(cdRef, elementRef, renderer, _ngZone, layoutService, userService) {
46
- super();
47
- this.cdRef = cdRef;
48
- this.elementRef = elementRef;
49
- this.renderer = renderer;
50
- this._ngZone = _ngZone;
51
- this.layoutService = layoutService;
52
- this.userService = userService;
53
- this.direction = 'horizontal';
54
- this.switchable = false;
55
- this.gutterSize = 10;
56
- this.disabled = false;
57
- this.visibleTransition = false;
58
- this.dragStart = new EventEmitter(false);
59
- this.dragProgress = new EventEmitter(false);
60
- this.dragEnd = new EventEmitter(false);
61
- this.visibleTransitionEndInternal = new Subject();
62
- this.visibleTransitionEnd = this.visibleTransitionEndInternal.asObservable().pipe(debounceTime(20));
63
- this.areas = [];
64
- this.minPercent = 5;
65
- this.isDragging = false;
66
- this.containerSize = 0;
67
- this.areaASize = 0;
68
- this.areaBSize = 0;
69
- this.directionIndex = 1;
70
- this.eventsDragFct = [];
71
- this._cacheLayout = false;
72
- this._afterViewInit = false;
73
- this.applyCacheLayout = true;
74
- this.userService.user$.pipe(takeUntil(this.componentDestroyed$)).subscribe((user) => {
75
- this.directionIndex = (user.uiDirection === 'rtl') ? -1 : 1;
76
- });
77
- }
78
- toggleDirection() {
79
- if (this.switchable) {
80
- this.direction = this.direction === 'horizontal' ? 'vertical' : 'horizontal';
81
- }
82
- }
83
- updateLayout() {
84
- if (this._afterViewInit && this.cacheLayout) {
85
- this.layoutService.getLayout(`eo.split.layout.${this.cacheLayout}`)
86
- .subscribe(layout => {
87
- (layout || []).forEach((area) => {
88
- if (area && this.areas.length > area.index) {
89
- this.areas[area.index].size = area.size;
90
- this.areas[area.index].sizeUser = area.size;
91
- this.areas[area.index].component.visible = area.visible;
92
- }
93
- });
94
- this.layoutService.visibilityUpdate();
95
- this.refreshStyleSizes();
96
- });
97
- }
98
- }
99
- ngAfterViewInit() {
100
- this._afterViewInit = true;
101
- this.updateLayout();
102
- }
103
- ngOnChanges(changes) {
104
- if (changes['gutterSize'] || changes['disabled']) {
105
- this.refresh();
106
- }
107
- }
108
- addArea(component, orderUser, sizeUser, minPixel) {
109
- this.areas.push({
110
- component,
111
- orderUser,
112
- order: -1,
113
- sizeUser,
114
- size: -1,
115
- minPixel
116
- });
117
- this.refresh();
118
- }
119
- updateArea(component, orderUser, sizeUser, minPixel) {
120
- const item = this.areas.find(a => a.component === component);
121
- if (item) {
122
- item.orderUser = orderUser;
123
- item.sizeUser = sizeUser;
124
- item.minPixel = minPixel;
125
- this.refresh();
126
- }
127
- }
128
- removeArea(area) {
129
- const item = this.areas.find(a => a.component === area);
130
- if (item) {
131
- const index = this.areas.indexOf(item);
132
- this.areas.splice(index, 1);
133
- this.areas.forEach((a, i) => a.order = i * 2);
134
- this.refresh();
135
- }
136
- }
137
- hideArea(area) {
138
- const item = this.areas.find(a => a.component === area);
139
- if (item) {
140
- this.refresh();
141
- this.updateLayoutCache();
142
- }
143
- }
144
- showArea(area) {
145
- const item = this.areas.find(a => a.component === area);
146
- if (item) {
147
- this.refresh();
148
- this.updateLayoutCache();
149
- }
150
- }
151
- isLastVisibleArea(area) {
152
- const visibleAreas = this.visibleAreas;
153
- return visibleAreas.length > 0 ? area === visibleAreas[visibleAreas.length - 1] : false;
154
- }
155
- refresh() {
156
- this.stopDragging();
157
- const visibleAreas = this.visibleAreas;
158
- // ORDERS: Set css 'order' property depending on user input or added order
159
- const nbCorrectOrder = this.areas.filter(a => a.orderUser !== null && !isNaN(a.orderUser)).length;
160
- if (nbCorrectOrder === this.areas.length) {
161
- this.areas.sort((a, b) => +a.orderUser - +b.orderUser);
162
- }
163
- this.areas.forEach((a, i) => {
164
- a.order = i * 2;
165
- a.component.setStyle('order', a.order);
166
- });
167
- // SIZES: Set css 'flex-basis' property depending on user input or equal sizes
168
- const nbCorrectSize = s => s !== null && !isNaN(s) && s >= this.minPercent ? Number(s) : Number((100 / visibleAreas.length).toFixed(3));
169
- const totalSize = visibleAreas.map(a => a.sizeUser).reduce((acc, s) => acc + nbCorrectSize(s), 0);
170
- visibleAreas.forEach(a => a.size = nbCorrectSize(a.sizeUser));
171
- if (Math.round(totalSize) !== 100 && visibleAreas.length) {
172
- const last = visibleAreas[visibleAreas.length - 1];
173
- last.size = last.size - totalSize + 100;
174
- }
175
- this.refreshStyleSizes();
176
- this.cdRef.markForCheck();
177
- }
178
- refreshStyleSizes() {
179
- //this._ngZone.run(() => {
180
- const visibleAreas = this.visibleAreas;
181
- const f = this.gutterSize * this.nbGutters / visibleAreas.length;
182
- visibleAreas.forEach(a => a.component.setStyle('flex-basis', `calc( ${a.size}% - ${f}px )`));
183
- //});
184
- //});
185
- }
186
- startDragging(startEvent, gutterOrder) {
187
- startEvent.preventDefault();
188
- if (this.disabled) {
189
- return;
190
- }
191
- const areaA = this.visibleAreas.filter(a => a.order < gutterOrder).pop();
192
- const areaB = this.visibleAreas.filter(a => a.order > gutterOrder)[0];
193
- if (!areaA || !areaB) {
194
- return;
195
- }
196
- const prop = (this.direction === 'horizontal') ? 'offsetWidth' : 'offsetHeight';
197
- this.containerSize = this.elementRef.nativeElement[prop];
198
- this.areaASize = this.containerSize * areaA.size / 100;
199
- this.areaBSize = this.containerSize * areaB.size / 100;
200
- let start;
201
- if (startEvent instanceof MouseEvent) {
202
- start = {
203
- x: startEvent.screenX,
204
- y: startEvent.screenY
205
- };
206
- }
207
- else if (startEvent instanceof TouchEvent) {
208
- start = {
209
- x: startEvent.touches[0].screenX,
210
- y: startEvent.touches[0].screenY
211
- };
212
- }
213
- else {
214
- return;
215
- }
216
- this._ngZone.runOutsideAngular(_ => {
217
- this.eventsDragFct.push(this.renderer.listen('document', 'mousemove', e => this.dragEvent(e, start, areaA, areaB)));
218
- this.eventsDragFct.push(this.renderer.listen('document', 'touchmove', e => this.dragEvent(e, start, areaA, areaB)));
219
- this.eventsDragFct.push(this.renderer.listen('document', 'mouseup', e => this.stopDragging()));
220
- this.eventsDragFct.push(this.renderer.listen('document', 'touchend', e => this.stopDragging()));
221
- this.eventsDragFct.push(this.renderer.listen('document', 'touchcancel', e => this.stopDragging()));
222
- });
223
- areaA.component.lockEvents();
224
- areaB.component.lockEvents();
225
- this.isDragging = true;
226
- this.notify('start');
227
- }
228
- dragEvent(event, start, areaA, areaB) {
229
- if (!this.isDragging) {
230
- return;
231
- }
232
- let end;
233
- if (event instanceof MouseEvent) {
234
- end = {
235
- x: event.screenX,
236
- y: event.screenY
237
- };
238
- }
239
- else if (event instanceof TouchEvent) {
240
- end = {
241
- x: event.touches[0].screenX,
242
- y: event.touches[0].screenY
243
- };
244
- }
245
- else {
246
- return;
247
- }
248
- this.drag(start, end, areaA, areaB);
249
- }
250
- drag(start, end, areaA, areaB) {
251
- const offsetPixel = (this.direction === 'horizontal') ? (start.x - end.x) : (start.y - end.y);
252
- const newSizePixelA = this.areaASize - offsetPixel * this.directionIndex;
253
- const newSizePixelB = this.areaBSize + offsetPixel * this.directionIndex;
254
- if (newSizePixelA <= areaA.minPixel || newSizePixelB < areaB.minPixel) {
255
- return;
256
- }
257
- let newSizePercentA = newSizePixelA / this.containerSize * 100;
258
- let newSizePercentB = newSizePixelB / this.containerSize * 100;
259
- if (newSizePercentA <= this.minPercent) {
260
- newSizePercentA = this.minPercent;
261
- newSizePercentB = areaA.size + areaB.size - this.minPercent;
262
- }
263
- else if (newSizePercentB <= this.minPercent) {
264
- newSizePercentB = this.minPercent;
265
- newSizePercentA = areaA.size + areaB.size - this.minPercent;
266
- }
267
- else {
268
- newSizePercentA = Number(newSizePercentA.toFixed(3));
269
- newSizePercentB = Number((areaA.size + areaB.size - newSizePercentA).toFixed(3));
270
- }
271
- areaA.size = newSizePercentA;
272
- areaB.size = newSizePercentB;
273
- if (this.areas.length === this.visibleAreas.length) {
274
- areaA.sizeUser = newSizePercentA;
275
- areaB.sizeUser = newSizePercentB;
276
- }
277
- this.refreshStyleSizes();
278
- this.notify('progress');
279
- }
280
- stopDragging() {
281
- if (!this.isDragging) {
282
- return;
283
- }
284
- this.areas.forEach(a => a.component.unlockEvents());
285
- while (this.eventsDragFct.length > 0) {
286
- const fct = this.eventsDragFct.pop();
287
- if (fct) {
288
- fct();
289
- }
290
- }
291
- this.containerSize = 0;
292
- this.areaASize = 0;
293
- this.areaBSize = 0;
294
- this.updateLayoutCache();
295
- this.isDragging = false;
296
- this.notify('end');
297
- }
298
- notify(type) {
299
- const data = this.visibleAreas.map(a => a.size);
300
- switch (type) {
301
- case 'start':
302
- return this.dragStart.emit(data);
303
- case 'progress':
304
- return this.dragProgress.emit(data);
305
- case 'end':
306
- return this.dragEnd.emit(data);
307
- case 'visibleTransitionEnd':
308
- return this.visibleTransitionEndInternal.next(data);
309
- }
310
- }
311
- updateLayoutCache() {
312
- if (this.cacheLayout) {
313
- let layout = this.areas.map((a, i) => ({ index: i, size: a.size, visible: a.component.visible }));
314
- this.layoutService.cacheLayout(`eo.split.layout.${this.cacheLayout}`, layout);
315
- }
316
- }
317
- ngOnDestroy() {
318
- this.stopDragging();
319
- }
320
- }
321
- SplitComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: SplitComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i1.LayoutService }, { token: i2.UserService }], target: i0.ɵɵFactoryTarget.Component });
322
- SplitComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: SplitComponent, selector: "eo-split", inputs: { direction: "direction", switchable: "switchable", width: "width", height: "height", gutterSize: "gutterSize", gutterColor: "gutterColor", disabled: "disabled", visibleTransition: "visibleTransition", applyCacheLayout: "applyCacheLayout", cacheLayout: "cacheLayout" }, outputs: { dragStart: "dragStart", dragProgress: "dragProgress", dragEnd: "dragEnd", visibleTransitionEnd: "visibleTransitionEnd" }, host: { properties: { "class.vertical": "this.styleFlexDirection", "style.flex-direction": "this.styleFlexDirectionStyle", "class.notransition": "this.dragging", "style.width": "this.styleWidth", "style.height": "this.styleHeight", "class.dragging": "this.isDragging" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-content></ng-content>\n<ng-template ngFor let-area [ngForOf]=\"areas\" let-index=\"index\" let-last=\"last\">\n <div eoSplitGutter *ngIf=\"last === false && area.component.visible === true && !isLastVisibleArea(area)\"\n [order]=\"index*2+1\"\n [style.background-color]=\"gutterColor ? gutterColor : 'transparent'\"\n [direction]=\"direction\"\n [size]=\"gutterSize\"\n [disabled]=\"disabled\"\n (mousedown)=\"startDragging($event, index*2+1)\"\n (dblclick)=\"toggleDirection()\"\n (touchstart)=\"startDragging($event, index*2+1)\"></div>\n</ng-template>\n", styles: [":host{display:flex;flex-wrap:nowrap;justify-content:flex-start;align-items:stretch;flex-direction:row}:host.vertical{flex-direction:column}:host.vertical div[eosplitgutter]{width:100%}div[eosplitgutter]{flex-grow:0;flex-shrink:0;background-position:center center;background-repeat:no-repeat}:host ::ng-deep eo-split-area{transition:flex-basis .3s;position:relative;min-width:0}:host ::ng-deep eo-split-area:not(.visible){flex-basis:0!important;flex-grow:0!important;overflow:hidden!important}:host.dragging ::ng-deep eo-split-area:before{content:\"\";z-index:5;position:absolute;inset:0}:host.notransition ::ng-deep eo-split-area{transition:none!important}:host.vertical ::ng-deep eo-split-area:not(.visible){max-width:0}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.SplitGutterDirective, selector: "[eoSplitGutter]", inputs: ["order", "direction", "size", "disabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
323
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: SplitComponent, decorators: [{
324
- type: Component,
325
- args: [{ selector: 'eo-split', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content></ng-content>\n<ng-template ngFor let-area [ngForOf]=\"areas\" let-index=\"index\" let-last=\"last\">\n <div eoSplitGutter *ngIf=\"last === false && area.component.visible === true && !isLastVisibleArea(area)\"\n [order]=\"index*2+1\"\n [style.background-color]=\"gutterColor ? gutterColor : 'transparent'\"\n [direction]=\"direction\"\n [size]=\"gutterSize\"\n [disabled]=\"disabled\"\n (mousedown)=\"startDragging($event, index*2+1)\"\n (dblclick)=\"toggleDirection()\"\n (touchstart)=\"startDragging($event, index*2+1)\"></div>\n</ng-template>\n", styles: [":host{display:flex;flex-wrap:nowrap;justify-content:flex-start;align-items:stretch;flex-direction:row}:host.vertical{flex-direction:column}:host.vertical div[eosplitgutter]{width:100%}div[eosplitgutter]{flex-grow:0;flex-shrink:0;background-position:center center;background-repeat:no-repeat}:host ::ng-deep eo-split-area{transition:flex-basis .3s;position:relative;min-width:0}:host ::ng-deep eo-split-area:not(.visible){flex-basis:0!important;flex-grow:0!important;overflow:hidden!important}:host.dragging ::ng-deep eo-split-area:before{content:\"\";z-index:5;position:absolute;inset:0}:host.notransition ::ng-deep eo-split-area{transition:none!important}:host.vertical ::ng-deep eo-split-area:not(.visible){max-width:0}\n"] }]
326
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i1.LayoutService }, { type: i2.UserService }]; }, propDecorators: { direction: [{
327
- type: Input
328
- }], switchable: [{
329
- type: Input
330
- }], width: [{
331
- type: Input
332
- }], height: [{
333
- type: Input
334
- }], gutterSize: [{
335
- type: Input
336
- }], gutterColor: [{
337
- type: Input
338
- }], disabled: [{
339
- type: Input
340
- }], visibleTransition: [{
341
- type: Input
342
- }], dragStart: [{
343
- type: Output
344
- }], dragProgress: [{
345
- type: Output
346
- }], dragEnd: [{
347
- type: Output
348
- }], visibleTransitionEnd: [{
349
- type: Output
350
- }], styleFlexDirection: [{
351
- type: HostBinding,
352
- args: ['class.vertical']
353
- }], styleFlexDirectionStyle: [{
354
- type: HostBinding,
355
- args: ['style.flex-direction']
356
- }], dragging: [{
357
- type: HostBinding,
358
- args: ['class.notransition']
359
- }], styleWidth: [{
360
- type: HostBinding,
361
- args: ['style.width']
362
- }], styleHeight: [{
363
- type: HostBinding,
364
- args: ['style.height']
365
- }], isDragging: [{
366
- type: HostBinding,
367
- args: ['class.dragging']
368
- }], applyCacheLayout: [{
369
- type: Input
370
- }], cacheLayout: [{
371
- type: Input
372
- }] } });
373
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvc3BsaXQvc3BsaXQvc3BsaXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvc3BsaXQvc3BsaXQvc3BsaXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxPQUFPLEVBQ0wsU0FBUyxFQUF3Qix1QkFBdUIsRUFDbEIsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUMvRSxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsT0FBTyxFQUFjLEVBQUUsSUFBSSxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFJN0QsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sOENBQThDLENBQUM7Ozs7OztBQXVCbEYsTUFBTSxPQUFPLGNBQWUsU0FBUSxvQkFBb0I7SUFpQnRELElBQW1DLGtCQUFrQjtRQUNuRCxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssVUFBVSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxJQUF5Qyx1QkFBdUI7UUFDOUQsT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDNUQsQ0FBQztJQUVELElBQXVDLFFBQVE7UUFDN0MsMEVBQTBFO1FBQzFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUNwRCxDQUFDO0lBRUQsSUFBZ0MsVUFBVTtRQUN4QyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMs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Z0JBV3BCLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFTyxXQUFXO3NCQUF2QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHt0YWtlVW50aWwsIGRlYm91bmNlVGltZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLFxuICBFbGVtZW50UmVmLCBSZW5kZXJlcjIsIFNpbXBsZUNoYW5nZXMsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEFmdGVyVmlld0luaXQsIE5nWm9uZSwgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtTdWJqZWN0LCBPYnNlcnZhYmxlLCBvZiBhcyBvYnNlcnZhYmxlT2Z9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1VzZXJTZXJ2aWNlLCBFb1VzZXIsIEFwcENhY2hlU2VydmljZX0gZnJvbSAnQGVvLXNkay9jb3JlJztcbmltcG9ydCB7U3BsaXRBcmVhQ29tcG9uZW50fSBmcm9tICcuLi9zcGxpdC1hcmVhL3NwbGl0LWFyZWEuY29tcG9uZW50JztcbmltcG9ydCB7VW5zdWJzY3JpYmVPbkRlc3Ryb3l9IGZyb20gJy4uLy4uL3V0aWwvdW5zdWJzY3JpYmUvdW5zdWJzY3JpYmUuY29tcG9uZW50JztcbmltcG9ydCB7TGF5b3V0U2VydmljZX0gZnJvbSAnLi4vLi4vLi4vZW8tZnJhbWV3b3JrLWNvcmUvbGF5b3V0L2xheW91dC5zZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBJQXJlYURhdGEge1xuICBjb21wb25lbnQ6IFNwbGl0QXJlYUNvbXBvbmVudDtcbiAgc2l6ZVVzZXI6IG51bWJlciB8IG51bGw7XG4gIHNpemU6IG51bWJlcjtcbiAgb3JkZXJVc2VyOiBudW1iZXIgfCBudWxsO1xuICBvcmRlcjogbnVtYmVyO1xuICBtaW5QaXhlbDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBvaW50IHtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VvLXNwbGl0JyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlVXJsOiAnLi9zcGxpdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NwbGl0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU3BsaXRDb21wb25lbnQgZXh0ZW5kcyBVbnN1YnNjcmliZU9uRGVzdHJveSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcblxuICBASW5wdXQoKSBkaXJlY3Rpb24gPSAnaG9yaXpvbnRhbCc7XG4gIEBJbnB1dCgpIHN3aXRjaGFibGUgPSBmYWxzZTtcbiAgQElucHV0KCkgd2lkdGg6IG51bWJlcjtcbiAgQElucHV0KCkgaGVpZ2h0OiBudW1iZXI7XG4gIEBJbnB1dCgpIGd1dHRlclNpemUgPSAxMDtcbiAgQElucHV0KCkgZ3V0dGVyQ29sb3I6IHN0cmluZztcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgdmlzaWJsZVRyYW5zaXRpb24gPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgZHJhZ1N0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxudW1iZXI+PihmYWxzZSk7XG4gIEBPdXRwdXQoKSBkcmFnUHJvZ3Jlc3MgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PG51bWJlcj4+KGZhbHNlKTtcbiAgQE91dHB1dCgpIGRyYWdFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PG51bWJlcj4+KGZhbHNlKTtcbiAgdmlzaWJsZVRyYW5zaXRpb25FbmRJbnRlcm5hbCA9IG5ldyBTdWJqZWN0PEFycmF5PG51bWJlcj4+KCk7XG4gIEBPdXRwdXQoKSB2aXNpYmxlVHJhbnNpdGlvbkVuZDogT2JzZXJ2YWJsZTxBcnJheTxudW1iZXI+PiA9IHRoaXMudmlzaWJsZVRyYW5zaXRpb25FbmRJbnRlcm5hbC5hc09ic2VydmFibGUoKS5waXBlKGRlYm91bmNlVGltZSgyMCkpO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MudmVydGljYWwnKSBnZXQgc3R5bGVGbGV4RGlyZWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJztcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnc3R5bGUuZmxleC1kaXJlY3Rpb24nKSBnZXQgc3R5bGVGbGV4RGlyZWN0aW9uU3R5bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAncm93JyA6ICdjb2x1bW4nO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5ub3RyYW5zaXRpb24nKSBnZXQgZHJhZ2dpbmcoKSB7XG4gICAgLy8gcHJldmVudCBhbmltYXRpb24gb2YgYXJlYXMgd2hlbiB2aXNpYmxlVHJhbnNpdGlvbiBpcyBmYWxzZSwgb3IgcmVzaXppbmdcbiAgICByZXR1cm4gIXRoaXMudmlzaWJsZVRyYW5zaXRpb24gfHwgdGhpcy5pc0RyYWdnaW5nO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS53aWR0aCcpIGdldCBzdHlsZVdpZHRoKCkge1xuICAgIHJldHVybiAodGhpcy53aWR0aCAmJiAhaXNOYU4odGhpcy53aWR0aCkgJiYgdGhpcy53aWR0aCA+IDApID8gdGhpcy53aWR0aCArICdweCcgOiAnMTAwJSc7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLmhlaWdodCcpIGdldCBzdHlsZUhlaWdodCgpIHtcbiAgICByZXR1cm4gKHRoaXMuaGVpZ2h0ICYmICFpc05hTih0aGlzLmhlaWdodCkgJiYgdGhpcy5oZWlnaHQgPiAwKSA/IHRoaXMuaGVpZ2h0ICsgJ3B4JyA6ICcxMDAlJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHZpc2libGVBcmVhcygpOiBJQXJlYURhdGFbXSB7XG4gICAgcmV0dXJuIHRoaXMuYXJlYXMuZmlsdGVyKGEgPT4gYS5jb21wb25lbnQudmlzaWJsZSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBuYkd1dHRlcnMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlQXJlYXMubGVuZ3RoIC0gMTtcbiAgfVxuXG4gIHB1YmxpYyBhcmVhczogQXJyYXk8SUFyZWFEYXRhPiA9IFtdO1xuICBwcml2YXRlIG1pblBlcmNlbnQgPSA1O1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRyYWdnaW5nJylcbiAgaXNEcmFnZ2luZyA9IGZhbHNlO1xuICBwcml2YXRlIGNvbnRhaW5lclNpemUgPSAwO1xuICBwcml2YXRlIGFyZWFBU2l6ZSA9IDA7XG4gIHByaXZhdGUgYXJlYUJTaXplID0gMDtcbiAgcHJpdmF0ZSBkaXJlY3Rpb25JbmRleCA9IDE7XG4gIHByaXZhdGUgZXZlbnRzRHJhZ0ZjdDogQXJyYXk8RnVuY3Rpb24+ID0gW107XG5cbiAgcHJpdmF0ZSBfY2FjaGVMYXlvdXQ6IGFueSA9IGZhbHNlO1xuICBwcml2YXRlIF9hZnRlclZpZXdJbml0ID0gZmFsc2U7XG5cbiAgQElucHV0KCkgYXBwbHlDYWNoZUxheW91dCA9IHRydWU7XG5cbiAgQElucHV0KCkgc2V0IGNhY2hlTGF5b3V0KHZhbDogYW55KSB7XG4gICAgaWYgKHRoaXMuYXBwbHlDYWNoZUxheW91dCkge1xuICAgICAgKHZhbCAmJiB2YWwuc3Vic2NyaWJlID8gdmFsIDogb2JzZXJ2YWJsZU9mKHZhbCkpXG4gICAgICAgIC5zdWJzY3JpYmUoY2FjaGVMYXlvdXQgPT4ge1xuICAgICAgICAgIHRoaXMuX2NhY2hlTGF5b3V0ID0gY2FjaGVMYXlvdXQ7XG4gICAgICAgICAgdGhpcy51cGRhdGVMYXlvdXQoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGNhY2hlTGF5b3V0KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlTGF5b3V0O1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICAgICAgICBwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBsYXlvdXRTZXJ2aWNlOiBMYXlvdXRTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLnVzZXJTZXJ2aWNlLnVzZXIkLnBpcGUodGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveWVkJCkpLnN1YnNjcmliZSgodXNlcjogRW9Vc2VyKSA9PiB7XG4gICAgICB0aGlzLmRpcmVjdGlvbkluZGV4ID0gKHVzZXIudWlEaXJlY3Rpb24gPT09ICdydGwnKSA/IC0xIDogMTtcbiAgICB9KTtcbiAgfVxuXG4gIHRvZ2dsZURpcmVjdGlvbigpe1xuICAgIGlmKHRoaXMuc3dpdGNoYWJsZSl7XG4gICAgICB0aGlzLmRpcmVjdGlvbiA9IHRoaXMuZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAndmVydGljYWwnIDogJ2hvcml6b250YWwnXG4gICAgfVxuICB9XG5cbiAgdXBkYXRlTGF5b3V0KCkge1xuICAgIGlmICh0aGlzLl9hZnRlclZpZXdJbml0ICYmIHRoaXMuY2FjaGVMYXlvdXQpIHtcbiAgICAgIHRoaXMubGF5b3V0U2VydmljZS5nZXRMYXlvdXQoYGVvLnNwbGl0LmxheW91dC4ke3RoaXMuY2FjaGVMYXlvdXR9YClcbiAgICAgICAgLnN1YnNjcmliZShsYXlvdXQgPT4ge1xuICAgICAgICAgIChsYXlvdXQgfHwgW10pLmZvckVhY2goKGFyZWEpID0+IHtcbiAgICAgICAgICAgIGlmIChhcmVhICYmIHRoaXMuYXJlYXMubGVuZ3RoID4gYXJlYS5pbmRleCkge1xuICAgICAgICAgICAgICB0aGlzLmFyZWFzW2FyZWEuaW5kZXhdLnNpemUgPSBhcmVhLnNpemU7XG4gICAgICAgICAgICAgIHRoaXMuYXJlYXNbYXJlYS5pbmRleF0uc2l6ZVVzZXIgPSBhcmVhLnNpemU7XG4gICAgICAgICAgICAgIHRoaXMuYXJlYXNbYXJlYS5pbmRleF0uY29tcG9uZW50LnZpc2libGUgPSBhcmVhLnZpc2libGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5sYXlvdXRTZXJ2aWNlLnZpc2liaWxpdHlVcGRhdGUoKTtcbiAgICAgICAgICB0aGlzLnJlZnJlc2hTdHlsZVNpemVzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLl9hZnRlclZpZXdJbml0ID0gdHJ1ZTtcbiAgICB0aGlzLnVwZGF0ZUxheW91dCgpO1xuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snZ3V0dGVyU2l6ZSddIHx8IGNoYW5nZXNbJ2Rpc2FibGVkJ10pIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhZGRBcmVhKGNvbXBvbmVudDogU3BsaXRBcmVhQ29tcG9uZW50LCBvcmRlclVzZXI6IG51bWJlciB8IG51bGwsIHNpemVVc2VyOiBudW1iZXIgfCBudWxsLCBtaW5QaXhlbDogbnVtYmVyKSB7XG4gICAgdGhpcy5hcmVhcy5wdXNoKHtcbiAgICAgIGNvbXBvbmVudCxcbiAgICAgIG9yZGVyVXNlcixcbiAgICAgIG9yZGVyOiAtMSxcbiAgICAgIHNpemVVc2VyLFxuICAgICAgc2l6ZTogLTEsXG4gICAgICBtaW5QaXhlbFxuICAgIH0pO1xuXG4gICAgdGhpcy5yZWZyZXNoKCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlQXJlYShjb21wb25lbnQ6IFNwbGl0QXJlYUNvbXBvbmVudCwgb3JkZXJVc2VyOiBudW1iZXIgfCBudWxsLCBzaXplVXNlcjogbnVtYmVyIHwgbnVsbCwgbWluUGl4ZWw6IG51bWJlcikge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmFyZWFzLmZpbmQoYSA9PiBhLmNvbXBvbmVudCA9PT0gY29tcG9uZW50KTtcblxuICAgIGlmIChpdGVtKSB7XG4gICAgICBpdGVtLm9yZGVyVXNlciA9IG9yZGVyVXNlcjtcbiAgICAgIGl0ZW0uc2l6ZVVzZXIgPSBzaXplVXNlcjtcbiAgICAgIGl0ZW0ubWluUGl4ZWwgPSBtaW5QaXhlbDtcblxuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlbW92ZUFyZWEoYXJlYTogU3BsaXRBcmVhQ29tcG9uZW50KSB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuYXJlYXMuZmluZChhID0+IGEuY29tcG9uZW50ID09PSBhcmVhKTtcblxuICAgIGlmIChpdGVtKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuYXJlYXMuaW5kZXhPZihpdGVtKTtcbiAgICAgIHRoaXMuYXJlYXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHRoaXMuYXJlYXMuZm9yRWFjaCgoYSwgaSkgPT4gYS5vcmRlciA9IGkgKiAyKTtcblxuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGhpZGVBcmVhKGFyZWE6IFNwbGl0QXJlYUNvbXBvbmVudCkge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmFyZWFzLmZpbmQoYSA9PiBhLmNvbXBvbmVudCA9PT0gYXJlYSk7XG5cbiAgICBpZiAoaXRlbSkge1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICB0aGlzLnVwZGF0ZUxheW91dENhY2hlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNob3dBcmVhKGFyZWE6IFNwbGl0QXJlYUNvbXBvbmVudCkge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmFyZWFzLmZpbmQoYSA9PiBhLmNvbXBvbmVudCA9PT0gYXJlYSk7XG5cbiAgICBpZiAoaXRlbSkge1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICB0aGlzLnVwZGF0ZUxheW91dENhY2hlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzTGFzdFZpc2libGVBcmVhKGFyZWE6IElBcmVhRGF0YSkge1xuICAgIGNvbnN0IHZpc2libGVBcmVhcyA9IHRoaXMudmlzaWJsZUFyZWFzO1xuICAgIHJldHVybiB2aXNpYmxlQXJlYXMubGVuZ3RoID4gMCA/IGFyZWEgPT09IHZpc2libGVBcmVhc1t2aXNpYmxlQXJlYXMubGVuZ3RoIC0gMV0gOiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgcmVmcmVzaCgpIHtcbiAgICB0aGlzLnN0b3BEcmFnZ2luZygpO1xuXG4gICAgY29uc3QgdmlzaWJsZUFyZWFzID0gdGhpcy52aXNpYmxlQXJlYXM7XG5cbiAgICAvLyBPUkRFUlM6IFNldCBjc3MgJ29yZGVyJyBwcm9wZXJ0eSBkZXBlbmRpbmcgb24gdXNlciBpbnB1dCBvciBhZGRlZCBvcmRlclxuICAgIGNvbnN0IG5iQ29ycmVjdE9yZGVyID0gdGhpcy5hcmVhcy5maWx0ZXIoYSA9PiBhLm9yZGVyVXNlciAhPT0gbnVsbCAmJiAhaXNOYU4oYS5vcmRlclVzZXIpKS5sZW5ndGg7XG4gICAgaWYgKG5iQ29ycmVjdE9yZGVyID09PSB0aGlzLmFyZWFzLmxlbmd0aCkge1xuICAgICAgdGhpcy5hcmVhcy5zb3J0KChhLCBiKSA9PiArYS5vcmRlclVzZXIgLSArYi5vcmRlclVzZXIpO1xuICAgIH1cblxuICAgIHRoaXMuYXJlYXMuZm9yRWFjaCgoYSwgaSkgPT4ge1xuICAgICAgYS5vcmRlciA9IGkgKiAyO1xuICAgICAgYS5jb21wb25lbnQuc2V0U3R5bGUoJ29yZGVyJywgYS5vcmRlcik7XG4gICAgfSk7XG5cbiAgICAvLyBTSVpFUzogU2V0IGNzcyAnZmxleC1iYXNpcycgcHJvcGVydHkgZGVwZW5kaW5nIG9uIHVzZXIgaW5wdXQgb3IgZXF1YWwgc2l6ZXNcbiAgICBjb25zdCBuYkNvcnJlY3RTaXplID0gcyA9PiBzICE9PSBudWxsICYmICFpc05hTihzKSAmJiBzID49IHRoaXMubWluUGVyY2VudCA/IE51bWJlcihzKSA6IE51bWJlcigoMTAwIC8gdmlzaWJsZUFyZWFzLmxlbmd0aCkudG9GaXhlZCgzKSk7XG4gICAgY29uc3QgdG90YWxTaXplID0gdmlzaWJsZUFyZWFzLm1hcChhID0+IGEuc2l6ZVVzZXIpLnJlZHVjZSgoYWNjLCBzKSA9PiBhY2MgKyBuYkNvcnJlY3RTaXplKHMpLCAwKTtcblxuICAgIHZpc2libGVBcmVhcy5mb3JFYWNoKGEgPT4gYS5zaXplID0gbmJDb3JyZWN0U2l6ZShhLnNpemVVc2VyKSk7XG5cbiAgICBpZiAoTWF0aC5yb3VuZCh0b3RhbFNpemUpICE9PSAxMDAgJiYgdmlzaWJsZUFyZWFzLmxlbmd0aCkge1xuICAgICAgY29uc3QgbGFzdCA9IHZpc2libGVBcmVhc1t2aXNpYmxlQXJlYXMubGVuZ3RoIC0gMV07XG4gICAgICBsYXN0LnNpemUgPSBsYXN0LnNpemUgLSB0b3RhbFNpemUgKyAxMDA7XG4gICAgfVxuXG4gICAgdGhpcy5yZWZyZXNoU3R5bGVTaXplcygpO1xuICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIHJlZnJlc2hTdHlsZVNpemVzKCkge1xuICAgIC8vdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XG4gICAgY29uc3QgdmlzaWJsZUFyZWFzID0gdGhpcy52aXNpYmxlQXJlYXM7XG5cbiAgICBjb25zdCBmID0gdGhpcy5ndXR0ZXJTaXplICogdGhpcy5uYkd1dHRlcnMgLyB2aXNpYmxlQXJlYXMubGVuZ3RoO1xuICAgIHZpc2libGVBcmVhcy5mb3JFYWNoKGEgPT4gYS5jb21wb25lbnQuc2V0U3R5bGUoJ2ZsZXgtYmFzaXMnLCBgY2FsYyggJHthLnNpemV9JSAtICR7Zn1weCApYCkpO1xuICAgIC8vfSk7XG4gICAgLy99KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGFydERyYWdnaW5nKHN0YXJ0RXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50LCBndXR0ZXJPcmRlcjogbnVtYmVyKSB7XG4gICAgc3RhcnRFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhcmVhQSA9IHRoaXMudmlzaWJsZUFyZWFzLmZpbHRlcihhID0+IGEub3JkZXIgPCBndXR0ZXJPcmRlcikucG9wKCk7XG4gICAgY29uc3QgYXJlYUIgPSB0aGlzLnZpc2libGVBcmVhcy5maWx0ZXIoYSA9PiBhLm9yZGVyID4gZ3V0dGVyT3JkZXIpWzBdO1xuICAgIGlmICghYXJlYUEgfHwgIWFyZWFCKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcHJvcCA9ICh0aGlzLmRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnKSA/ICdvZmZzZXRXaWR0aCcgOiAnb2Zmc2V0SGVpZ2h0JztcbiAgICB0aGlzLmNvbnRhaW5lclNpemUgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudFtwcm9wXTtcbiAgICB0aGlzLmFyZWFBU2l6ZSA9IHRoaXMuY29udGFpbmVyU2l6ZSAqIGFyZWFBLnNpemUgLyAxMDA7XG4gICAgdGhpcy5hcmVhQlNpemUgPSB0aGlzLmNvbnRhaW5lclNpemUgKiBhcmVhQi5zaXplIC8gMTAwO1xuXG4gICAgbGV0IHN0YXJ0OiBQb2ludDtcbiAgICBpZiAoc3RhcnRFdmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQpIHtcbiAgICAgIHN0YXJ0ID0ge1xuICAgICAgICB4OiBzdGFydEV2ZW50LnNjcmVlblgsXG4gICAgICAgIHk6IHN0YXJ0RXZlbnQuc2NyZWVuWVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHN0YXJ0RXZlbnQgaW5zdGFuY2VvZiBUb3VjaEV2ZW50KSB7XG4gICAgICBzdGFydCA9IHtcbiAgICAgICAgeDogc3RhcnRFdmVudC50b3VjaGVzWzBdLnNjcmVlblgsXG4gICAgICAgIHk6IHN0YXJ0RXZlbnQudG91Y2hlc1swXS5zY3JlZW5ZXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoXyA9PiB7XG4gICAgICB0aGlzLmV2ZW50c0RyYWdGY3QucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAnbW91c2Vtb3ZlJywgZSA9PiB0aGlzLmRyYWdFdmVudChlLCBzdGFydCwgYXJlYUEsIGFyZWFCKSkpO1xuICAgICAgdGhpcy5ldmVudHNEcmFnRmN0LnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oJ2RvY3VtZW50JywgJ3RvdWNobW92ZScsIGUgPT4gdGhpcy5kcmFnRXZlbnQoZSwgc3RhcnQsIGFyZWFBLCBhcmVhQikpKTtcbiAgICAgIHRoaXMuZXZlbnRzRHJhZ0ZjdC5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdtb3VzZXVwJywgZSA9PiB0aGlzLnN0b3BEcmFnZ2luZygpKSk7XG4gICAgICB0aGlzLmV2ZW50c0RyYWdGY3QucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAndG91Y2hlbmQnLCBlID0+IHRoaXMuc3RvcERyYWdnaW5nKCkpKTtcbiAgICAgIHRoaXMuZXZlbnRzRHJhZ0ZjdC5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICd0b3VjaGNhbmNlbCcsIGUgPT4gdGhpcy5zdG9wRHJhZ2dpbmcoKSkpO1xuICAgIH0pO1xuXG4gICAgYXJlYUEuY29tcG9uZW50LmxvY2tFdmVudHMoKTtcbiAgICBhcmVhQi5jb21wb25lbnQubG9ja0V2ZW50cygpO1xuXG4gICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZTtcbiAgICB0aGlzLm5vdGlmeSgnc3RhcnQnKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhZ0V2ZW50KGV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCwgc3RhcnQ6IFBvaW50LCBhcmVhQTogSUFyZWFEYXRhLCBhcmVhQjogSUFyZWFEYXRhKSB7XG4gICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZW5kOiBQb2ludDtcbiAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50KSB7XG4gICAgICBlbmQgPSB7XG4gICAgICAgIHg6IGV2ZW50LnNjcmVlblgsXG4gICAgICAgIHk6IGV2ZW50LnNjcmVlbllcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIFRvdWNoRXZlbnQpIHtcbiAgICAgIGVuZCA9IHtcbiAgICAgICAgeDogZXZlbnQudG91Y2hlc1swXS5zY3JlZW5YLFxuICAgICAgICB5OiBldmVudC50b3VjaGVzWzBdLnNjcmVlbllcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRyYWcoc3RhcnQsIGVuZCwgYXJlYUEsIGFyZWFCKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhZyhzdGFydDogUG9pbnQsIGVuZDogUG9pbnQsIGFyZWFBOiBJQXJlYURhdGEsIGFyZWFCOiBJQXJlYURhdGEpIHtcbiAgICBjb25zdCBvZmZzZXRQaXhlbCA9ICh0aGlzLmRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnKSA/IChzdGFydC54IC0gZW5kLngpIDogKHN0YXJ0LnkgLSBlbmQueSk7XG5cbiAgICBjb25zdCBuZXdTaXplUGl4ZWxBID0gdGhpcy5hcmVhQVNpemUgLSBvZmZzZXRQaXhlbCAqIHRoaXMuZGlyZWN0aW9uSW5kZXg7XG4gICAgY29uc3QgbmV3U2l6ZVBpeGVsQiA9IHRoaXMuYXJlYUJTaXplICsgb2Zmc2V0UGl4ZWwgKiB0aGlzLmRpcmVjdGlvbkluZGV4O1xuXG4gICAgaWYgKG5ld1NpemVQaXhlbEEgPD0gYXJlYUEubWluUGl4ZWwgfHwgbmV3U2l6ZVBpeGVsQiA8IGFyZWFCLm1pblBpeGVsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IG5ld1NpemVQZXJjZW50QSA9IG5ld1NpemVQaXhlbEEgLyB0aGlzLmNvbnRhaW5lclNpemUgKiAxMDA7XG4gICAgbGV0IG5ld1NpemVQZXJjZW50QiA9IG5ld1NpemVQaXhlbEIgLyB0aGlzLmNvbnRhaW5lclNpemUgKiAxMDA7XG5cbiAgICBpZiAobmV3U2l6ZVBlcmNlbnRBIDw9IHRoaXMubWluUGVyY2VudCkge1xuICAgICAgbmV3U2l6ZVBlcmNlbnRBID0gdGhpcy5taW5QZXJjZW50O1xuICAgICAgbmV3U2l6ZVBlcmNlbnRCID0gYXJlYUEuc2l6ZSArIGFyZWFCLnNpemUgLSB0aGlzLm1pblBlcmNlbnQ7XG4gICAgfSBlbHNlIGlmIChuZXdTaXplUGVyY2VudEIgPD0gdGhpcy5taW5QZXJjZW50KSB7XG4gICAgICBuZXdTaXplUGVyY2VudEIgPSB0aGlzLm1pblBlcmNlbnQ7XG4gICAgICBuZXdTaXplUGVyY2VudEEgPSBhcmVhQS5zaXplICsgYXJlYUIuc2l6ZSAtIHRoaXMubWluUGVyY2VudDtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3U2l6ZVBlcmNlbnRBID0gTnVtYmVyKG5ld1NpemVQZXJjZW50QS50b0ZpeGVkKDMpKTtcbiAgICAgIG5ld1NpemVQZXJjZW50QiA9IE51bWJlcigoYXJlYUEuc2l6ZSArIGFyZWFCLnNpemUgLSBuZXdTaXplUGVyY2VudEEpLnRvRml4ZWQoMykpO1xuICAgIH1cblxuICAgIGFyZWFBLnNpemUgPSBuZXdTaXplUGVyY2VudEE7XG4gICAgYXJlYUIuc2l6ZSA9IG5ld1NpemVQZXJjZW50QjtcbiAgICBpZiAodGhpcy5hcmVhcy5sZW5ndGggPT09IHRoaXMudmlzaWJsZUFyZWFzLmxlbmd0aCkge1xuICAgICAgYXJlYUEuc2l6ZVVzZXIgPSBuZXdTaXplUGVyY2VudEE7XG4gICAgICBhcmVhQi5zaXplVXNlciA9IG5ld1NpemVQZXJjZW50QjtcbiAgICB9XG5cbiAgICB0aGlzLnJlZnJlc2hTdHlsZVNpemVzKCk7XG4gICAgdGhpcy5ub3RpZnkoJ3Byb2dyZXNzJyk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BEcmFnZ2luZygpIHtcbiAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYXJlYXMuZm9yRWFjaChhID0+IGEuY29tcG9uZW50LnVubG9ja0V2ZW50cygpKTtcblxuICAgIHdoaWxlICh0aGlzLmV2ZW50c0RyYWdGY3QubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmN0ID0gdGhpcy5ldmVudHNEcmFnRmN0LnBvcCgpO1xuICAgICAgaWYgKGZjdCkge1xuICAgICAgICBmY3QoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNvbnRhaW5lclNpemUgPSAwO1xuICAgIHRoaXMuYXJlYUFTaXplID0gMDtcbiAgICB0aGlzLmFyZWFCU2l6ZSA9IDA7XG5cbiAgICB0aGlzLnVwZGF0ZUxheW91dENhY2hlKCk7XG5cbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB0aGlzLm5vdGlmeSgnZW5kJyk7XG4gIH1cblxuICBub3RpZnkodHlwZTogc3RyaW5nKSB7XG4gICAgY29uc3QgZGF0YTogQXJyYXk8bnVtYmVyPiA9IHRoaXMudmlzaWJsZUFyZWFzLm1hcChhID0+IGEuc2l6ZSk7XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJhZ1N0YXJ0LmVtaXQoZGF0YSk7XG5cbiAgICAgIGNhc2UgJ3Byb2dyZXNzJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJhZ1Byb2dyZXNzLmVtaXQoZGF0YSk7XG5cbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiB0aGlzLmRyYWdFbmQuZW1pdChkYXRhKTtcblxuICAgICAgY2FzZSAndmlzaWJsZVRyYW5zaXRpb25FbmQnOlxuICAgICAgICByZXR1cm4gdGhpcy52aXNpYmxlVHJhbnNpdGlvbkVuZEludGVybmFsLm5leHQoZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlTGF5b3V0Q2FjaGUoKSB7ICAgIFxuICAgIGlmICh0aGlzLmNhY2hlTGF5b3V0KSB7XG4gICAgICBsZXQgbGF5b3V0ID0gdGhpcy5hcmVhcy5tYXAoKGEsIGkpID0+ICh7aW5kZXg6IGksIHNpemU6IGEuc2l6ZSwgdmlzaWJsZTogYS5jb21wb25lbnQudmlzaWJsZX0pKTtcbiAgICAgIHRoaXMubGF5b3V0U2VydmljZS5jYWNoZUxheW91dChgZW8uc3BsaXQubGF5b3V0LiR7dGhpcy5jYWNoZUxheW91dH1gLCBsYXlvdXQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN0b3BEcmFnZ2luZygpO1xuICB9XG5cbn1cbiIsIjxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtYXJlYSBbbmdGb3JPZl09XCJhcmVhc1wiIGxldC1pbmRleD1cImluZGV4XCIgbGV0LWxhc3Q9XCJsYXN0XCI+XG4gIDxkaXYgZW9TcGxpdEd1dHRlciAqbmdJZj1cImxhc3QgPT09IGZhbHNlICYmIGFyZWEuY29tcG9uZW50LnZpc2libGUgPT09IHRydWUgJiYgIWlzTGFzdFZpc2libGVBcmVhKGFyZWEpXCJcbiAgICAgICAgICAgICAgICBbb3JkZXJdPVwiaW5kZXgqMisxXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJndXR0ZXJDb2xvciA/IGd1dHRlckNvbG9yIDogJ3RyYW5zcGFyZW50J1wiXG4gICAgICAgICAgICAgICAgW2RpcmVjdGlvbl09XCJkaXJlY3Rpb25cIlxuICAgICAgICAgICAgICAgIFtzaXplXT1cImd1dHRlclNpemVcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJzdGFydERyYWdnaW5nKCRldmVudCwgaW5kZXgqMisxKVwiXG4gICAgICAgICAgICAgICAgKGRibGNsaWNrKT1cInRvZ2dsZURpcmVjdGlvbigpXCJcbiAgICAgICAgICAgICAgICAodG91Y2hzdGFydCk9XCJzdGFydERyYWdnaW5nKCRldmVudCwgaW5kZXgqMisxKVwiPjwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==