barsa-novin-ray-core 0.0.2

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 (270) hide show
  1. package/README.md +25 -0
  2. package/esm2020/barsa-novin-ray-core.mjs +5 -0
  3. package/esm2020/lib/abstract-classes/application-base.mjs +24 -0
  4. package/esm2020/lib/abstract-classes/barsa-api.mjs +40 -0
  5. package/esm2020/lib/abstract-classes/field-base.mjs +167 -0
  6. package/esm2020/lib/abstract-classes/files-validation-helper.mjs +71 -0
  7. package/esm2020/lib/abstract-classes/form-base.mjs +101 -0
  8. package/esm2020/lib/abstract-classes/form-props.base.mjs +79 -0
  9. package/esm2020/lib/abstract-classes/form-toolbar-base.mjs +45 -0
  10. package/esm2020/lib/abstract-classes/index.mjs +21 -0
  11. package/esm2020/lib/abstract-classes/layout-item-base.mjs +33 -0
  12. package/esm2020/lib/abstract-classes/layout-panel-base.mjs +80 -0
  13. package/esm2020/lib/abstract-classes/models.mjs +172 -0
  14. package/esm2020/lib/abstract-classes/module-with-dynamic-components.mjs +2 -0
  15. package/esm2020/lib/abstract-classes/number-base.mjs +117 -0
  16. package/esm2020/lib/abstract-classes/page-base.mjs +97 -0
  17. package/esm2020/lib/abstract-classes/report-base.mjs +231 -0
  18. package/esm2020/lib/abstract-classes/report-item-base.mjs +53 -0
  19. package/esm2020/lib/abstract-classes/report-view-base.component.mjs +262 -0
  20. package/esm2020/lib/abstract-classes/system-base.mjs +24 -0
  21. package/esm2020/lib/auth-guard.mjs +37 -0
  22. package/esm2020/lib/barsa-novin-ray-core-routing.module.mjs +18 -0
  23. package/esm2020/lib/barsa-novin-ray-core.module.mjs +271 -0
  24. package/esm2020/lib/base-ulv-setting.component.mjs +37 -0
  25. package/esm2020/lib/base.component.mjs +59 -0
  26. package/esm2020/lib/base.module.mjs +28 -0
  27. package/esm2020/lib/constants.mjs +441 -0
  28. package/esm2020/lib/container.component.mjs +76 -0
  29. package/esm2020/lib/custom-route-reuse-strategy.mjs +32 -0
  30. package/esm2020/lib/date-services/date-hijri.service.mjs +127 -0
  31. package/esm2020/lib/date-services/date-info.mjs +2 -0
  32. package/esm2020/lib/date-services/date-miladi.service.mjs +124 -0
  33. package/esm2020/lib/date-services/date-shamsi.service.mjs +129 -0
  34. package/esm2020/lib/date-services/date.service.mjs +139 -0
  35. package/esm2020/lib/date-services/index.mjs +6 -0
  36. package/esm2020/lib/device.mjs +663 -0
  37. package/esm2020/lib/directives/anchor-scroll.directive.mjs +24 -0
  38. package/esm2020/lib/directives/attr-rtl.directive.mjs +35 -0
  39. package/esm2020/lib/directives/base.directive.mjs +51 -0
  40. package/esm2020/lib/directives/column-resizer.directive.mjs +39 -0
  41. package/esm2020/lib/directives/dynamic-command.directive.mjs +43 -0
  42. package/esm2020/lib/directives/ellipsify.directive.mjs +72 -0
  43. package/esm2020/lib/directives/field-binding.directive.mjs +17 -0
  44. package/esm2020/lib/directives/img-lazy.directive.mjs +75 -0
  45. package/esm2020/lib/directives/index.mjs +19 -0
  46. package/esm2020/lib/directives/intersection-observer.directive.mjs +49 -0
  47. package/esm2020/lib/directives/items-renderer.directive.mjs +59 -0
  48. package/esm2020/lib/directives/numbers-only-input.directive.mjs +26 -0
  49. package/esm2020/lib/directives/placeHolder.directive.mjs +15 -0
  50. package/esm2020/lib/directives/render-ulv-paging.directive.mjs +58 -0
  51. package/esm2020/lib/directives/render-ulv-viewer.directive.mjs +60 -0
  52. package/esm2020/lib/directives/table-resizer.directive.mjs +235 -0
  53. package/esm2020/lib/directives/ulv-command.directive.mjs +41 -0
  54. package/esm2020/lib/directives/until-inview.directive.mjs +51 -0
  55. package/esm2020/lib/dynamic-component/base-dynamic.component.mjs +89 -0
  56. package/esm2020/lib/dynamic-component/base-form-toolbaritem-props.mjs +50 -0
  57. package/esm2020/lib/dynamic-component/base-item-content-props.mjs +70 -0
  58. package/esm2020/lib/dynamic-component/base-view-content-props.mjs +26 -0
  59. package/esm2020/lib/dynamic-component/base-view-item-props.mjs +374 -0
  60. package/esm2020/lib/dynamic-component/base-view-props.mjs +127 -0
  61. package/esm2020/lib/dynamic-component/dynamic-form-toolbar-item.component.mjs +36 -0
  62. package/esm2020/lib/dynamic-component/dynamic-form.component.mjs +62 -0
  63. package/esm2020/lib/dynamic-component/dynamic-item.component.mjs +60 -0
  64. package/esm2020/lib/dynamic-component/index.mjs +10 -0
  65. package/esm2020/lib/empty-page-with-router-and-router-outlet/empty-page-with-router-and-router-outlet.component.mjs +16 -0
  66. package/esm2020/lib/field-ui/field-ui.component.mjs +116 -0
  67. package/esm2020/lib/form/form.component.mjs +151 -0
  68. package/esm2020/lib/form-new/form-new.component.mjs +30 -0
  69. package/esm2020/lib/from-intersection-observer.mjs +53 -0
  70. package/esm2020/lib/global-error-handler.mjs +26 -0
  71. package/esm2020/lib/modal-root.component.mjs +31 -0
  72. package/esm2020/lib/not-found/not-found.component.mjs +16 -0
  73. package/esm2020/lib/pipes/barsa-icon-dict.pipe.mjs +18 -0
  74. package/esm2020/lib/pipes/bbb-translate.pipe.mjs +29 -0
  75. package/esm2020/lib/pipes/can-upload.pipe.mjs +30 -0
  76. package/esm2020/lib/pipes/context-menu.pipe.mjs +40 -0
  77. package/esm2020/lib/pipes/control-ui.pipe.mjs +31 -0
  78. package/esm2020/lib/pipes/convert-to-style.pipe.mjs +32 -0
  79. package/esm2020/lib/pipes/date-time-to-caption.pipe.mjs +34 -0
  80. package/esm2020/lib/pipes/fileinfo-count.pipe.mjs +20 -0
  81. package/esm2020/lib/pipes/filter-columns-by-details.pipe.mjs +20 -0
  82. package/esm2020/lib/pipes/filter-string.pipe.mjs +44 -0
  83. package/esm2020/lib/pipes/filter-tab.pipe.mjs +19 -0
  84. package/esm2020/lib/pipes/filter-toolbar-control.pipe.mjs +16 -0
  85. package/esm2020/lib/pipes/filter.pipe.mjs +33 -0
  86. package/esm2020/lib/pipes/find-column-by-db-name.pipe.mjs +17 -0
  87. package/esm2020/lib/pipes/fiori-icon.pipe.mjs +42 -0
  88. package/esm2020/lib/pipes/groupby.pipe.mjs +48 -0
  89. package/esm2020/lib/pipes/header-facet-value.pipe.mjs +22 -0
  90. package/esm2020/lib/pipes/index.mjs +33 -0
  91. package/esm2020/lib/pipes/list-count.pipe.mjs +17 -0
  92. package/esm2020/lib/pipes/merge-fields-to-columns.pipe.mjs +42 -0
  93. package/esm2020/lib/pipes/mo-info-ulv-data.pipe.mjs +24 -0
  94. package/esm2020/lib/pipes/mo-report-value-concat.pipe.mjs +35 -0
  95. package/esm2020/lib/pipes/mo-report-value.pipe.mjs +28 -0
  96. package/esm2020/lib/pipes/mo-value.pipe.mjs +31 -0
  97. package/esm2020/lib/pipes/multiple-groupby.pipe.mjs +97 -0
  98. package/esm2020/lib/pipes/numeral.pipe.mjs +40 -0
  99. package/esm2020/lib/pipes/picture-field-source.pipe.mjs +22 -0
  100. package/esm2020/lib/pipes/remove-newline.pipe.mjs +20 -0
  101. package/esm2020/lib/pipes/seperator-fix.pipe.mjs +23 -0
  102. package/esm2020/lib/pipes/sort.pipe.mjs +48 -0
  103. package/esm2020/lib/pipes/tlbButtons.pipe.mjs +58 -0
  104. package/esm2020/lib/pipes/total-summary.pipe.mjs +16 -0
  105. package/esm2020/lib/pipes/visible-value.pipe.mjs +24 -0
  106. package/esm2020/lib/portal-page/portal-page.component.mjs +13 -0
  107. package/esm2020/lib/redirect-home-guard.mjs +28 -0
  108. package/esm2020/lib/redirect-report-navigator-command/redirect-report-navigator-command.component.mjs +33 -0
  109. package/esm2020/lib/report-container/report-container.component.mjs +52 -0
  110. package/esm2020/lib/resolvers/index.mjs +5 -0
  111. package/esm2020/lib/resolvers/portal-dynamic-page.resolver.mjs +49 -0
  112. package/esm2020/lib/resolvers/portal-form-page.resolver.mjs +18 -0
  113. package/esm2020/lib/resolvers/portal-page.resolver.mjs +30 -0
  114. package/esm2020/lib/resolvers/portal-report-page.resolver.mjs +37 -0
  115. package/esm2020/lib/root-page/root-page.component.mjs +21 -0
  116. package/esm2020/lib/root-portal/root-portal.component.mjs +51 -0
  117. package/esm2020/lib/services/api.service.mjs +60 -0
  118. package/esm2020/lib/services/barsa-dialog.service.mjs +80 -0
  119. package/esm2020/lib/services/breadcrumb.service.mjs +60 -0
  120. package/esm2020/lib/services/container.service.mjs +36 -0
  121. package/esm2020/lib/services/dynamic-component.service.mjs +55 -0
  122. package/esm2020/lib/services/form-panel.service.mjs +235 -0
  123. package/esm2020/lib/services/form.service.mjs +14 -0
  124. package/esm2020/lib/services/horizontal-layout.service.mjs +16 -0
  125. package/esm2020/lib/services/index.mjs +16 -0
  126. package/esm2020/lib/services/layout.service.mjs +42 -0
  127. package/esm2020/lib/services/log.service.mjs +50 -0
  128. package/esm2020/lib/services/network-status.service.mjs +15 -0
  129. package/esm2020/lib/services/portal.service.mjs +638 -0
  130. package/esm2020/lib/services/ui.service.mjs +23 -0
  131. package/esm2020/lib/services/ulvmain.service.mjs +594 -0
  132. package/esm2020/lib/services/upload.service.mjs +75 -0
  133. package/esm2020/public-api.mjs +33 -0
  134. package/fesm2015/barsa-novin-ray-core.mjs +9047 -0
  135. package/fesm2015/barsa-novin-ray-core.mjs.map +1 -0
  136. package/fesm2020/barsa-novin-ray-core.mjs +8945 -0
  137. package/fesm2020/barsa-novin-ray-core.mjs.map +1 -0
  138. package/index.d.ts +5 -0
  139. package/lib/abstract-classes/application-base.d.ts +53 -0
  140. package/lib/abstract-classes/barsa-api.d.ts +28 -0
  141. package/lib/abstract-classes/field-base.d.ts +81 -0
  142. package/lib/abstract-classes/files-validation-helper.d.ts +15 -0
  143. package/lib/abstract-classes/form-base.d.ts +59 -0
  144. package/lib/abstract-classes/form-props.base.d.ts +45 -0
  145. package/lib/abstract-classes/form-toolbar-base.d.ts +17 -0
  146. package/lib/abstract-classes/index.d.ts +20 -0
  147. package/lib/abstract-classes/layout-item-base.d.ts +15 -0
  148. package/lib/abstract-classes/layout-panel-base.d.ts +24 -0
  149. package/lib/abstract-classes/models.d.ts +660 -0
  150. package/lib/abstract-classes/module-with-dynamic-components.d.ts +4 -0
  151. package/lib/abstract-classes/number-base.d.ts +20 -0
  152. package/lib/abstract-classes/page-base.d.ts +31 -0
  153. package/lib/abstract-classes/report-base.d.ts +97 -0
  154. package/lib/abstract-classes/report-item-base.d.ts +33 -0
  155. package/lib/abstract-classes/report-view-base.component.d.ts +130 -0
  156. package/lib/abstract-classes/system-base.d.ts +45 -0
  157. package/lib/auth-guard.d.ts +12 -0
  158. package/lib/barsa-novin-ray-core-routing.module.d.ts +7 -0
  159. package/lib/barsa-novin-ray-core.module.d.ts +88 -0
  160. package/lib/base-ulv-setting.component.d.ts +18 -0
  161. package/lib/base.component.d.ts +15 -0
  162. package/lib/base.module.d.ts +13 -0
  163. package/lib/constants.d.ts +89 -0
  164. package/lib/container.component.d.ts +33 -0
  165. package/lib/custom-route-reuse-strategy.d.ts +11 -0
  166. package/lib/date-services/date-hijri.service.d.ts +40 -0
  167. package/lib/date-services/date-info.d.ts +15 -0
  168. package/lib/date-services/date-miladi.service.d.ts +39 -0
  169. package/lib/date-services/date-shamsi.service.d.ts +40 -0
  170. package/lib/date-services/date.service.d.ts +54 -0
  171. package/lib/date-services/index.d.ts +5 -0
  172. package/lib/device.d.ts +15 -0
  173. package/lib/directives/anchor-scroll.directive.d.ts +7 -0
  174. package/lib/directives/attr-rtl.directive.d.ts +13 -0
  175. package/lib/directives/base.directive.d.ts +13 -0
  176. package/lib/directives/column-resizer.directive.d.ts +13 -0
  177. package/lib/directives/dynamic-command.directive.d.ts +12 -0
  178. package/lib/directives/ellipsify.directive.d.ts +17 -0
  179. package/lib/directives/field-binding.directive.d.ts +7 -0
  180. package/lib/directives/img-lazy.directive.d.ts +20 -0
  181. package/lib/directives/index.d.ts +18 -0
  182. package/lib/directives/intersection-observer.directive.d.ts +17 -0
  183. package/lib/directives/items-renderer.directive.d.ts +17 -0
  184. package/lib/directives/numbers-only-input.directive.d.ts +9 -0
  185. package/lib/directives/placeHolder.directive.d.ts +6 -0
  186. package/lib/directives/render-ulv-paging.directive.d.ts +19 -0
  187. package/lib/directives/render-ulv-viewer.directive.d.ts +19 -0
  188. package/lib/directives/table-resizer.directive.d.ts +47 -0
  189. package/lib/directives/ulv-command.directive.d.ts +11 -0
  190. package/lib/directives/until-inview.directive.d.ts +17 -0
  191. package/lib/dynamic-component/base-dynamic.component.d.ts +26 -0
  192. package/lib/dynamic-component/base-form-toolbaritem-props.d.ts +28 -0
  193. package/lib/dynamic-component/base-item-content-props.d.ts +40 -0
  194. package/lib/dynamic-component/base-view-content-props.d.ts +11 -0
  195. package/lib/dynamic-component/base-view-item-props.d.ts +95 -0
  196. package/lib/dynamic-component/base-view-props.d.ts +65 -0
  197. package/lib/dynamic-component/dynamic-form-toolbar-item.component.d.ts +18 -0
  198. package/lib/dynamic-component/dynamic-form.component.d.ts +33 -0
  199. package/lib/dynamic-component/dynamic-item.component.d.ts +30 -0
  200. package/lib/dynamic-component/index.d.ts +9 -0
  201. package/lib/empty-page-with-router-and-router-outlet/empty-page-with-router-and-router-outlet.component.d.ts +7 -0
  202. package/lib/field-ui/field-ui.component.d.ts +27 -0
  203. package/lib/form/form.component.d.ts +36 -0
  204. package/lib/form-new/form-new.component.d.ts +23 -0
  205. package/lib/from-intersection-observer.d.ts +7 -0
  206. package/lib/global-error-handler.d.ts +8 -0
  207. package/lib/modal-root.component.d.ts +15 -0
  208. package/lib/not-found/not-found.component.d.ts +8 -0
  209. package/lib/pipes/barsa-icon-dict.pipe.d.ts +9 -0
  210. package/lib/pipes/bbb-translate.pipe.d.ts +7 -0
  211. package/lib/pipes/can-upload.pipe.d.ts +8 -0
  212. package/lib/pipes/context-menu.pipe.d.ts +11 -0
  213. package/lib/pipes/control-ui.pipe.d.ts +9 -0
  214. package/lib/pipes/convert-to-style.pipe.d.ts +8 -0
  215. package/lib/pipes/date-time-to-caption.pipe.d.ts +9 -0
  216. package/lib/pipes/fileinfo-count.pipe.d.ts +10 -0
  217. package/lib/pipes/filter-columns-by-details.pipe.d.ts +8 -0
  218. package/lib/pipes/filter-string.pipe.d.ts +11 -0
  219. package/lib/pipes/filter-tab.pipe.d.ts +7 -0
  220. package/lib/pipes/filter-toolbar-control.pipe.d.ts +8 -0
  221. package/lib/pipes/filter.pipe.d.ts +10 -0
  222. package/lib/pipes/find-column-by-db-name.pipe.d.ts +8 -0
  223. package/lib/pipes/fiori-icon.pipe.d.ts +7 -0
  224. package/lib/pipes/groupby.pipe.d.ts +7 -0
  225. package/lib/pipes/header-facet-value.pipe.d.ts +8 -0
  226. package/lib/pipes/index.d.ts +32 -0
  227. package/lib/pipes/list-count.pipe.d.ts +8 -0
  228. package/lib/pipes/merge-fields-to-columns.pipe.d.ts +10 -0
  229. package/lib/pipes/mo-info-ulv-data.pipe.d.ts +7 -0
  230. package/lib/pipes/mo-report-value-concat.pipe.d.ts +9 -0
  231. package/lib/pipes/mo-report-value.pipe.d.ts +12 -0
  232. package/lib/pipes/mo-value.pipe.d.ts +9 -0
  233. package/lib/pipes/multiple-groupby.pipe.d.ts +23 -0
  234. package/lib/pipes/numeral.pipe.d.ts +9 -0
  235. package/lib/pipes/picture-field-source.pipe.d.ts +8 -0
  236. package/lib/pipes/remove-newline.pipe.d.ts +8 -0
  237. package/lib/pipes/seperator-fix.pipe.d.ts +7 -0
  238. package/lib/pipes/sort.pipe.d.ts +9 -0
  239. package/lib/pipes/tlbButtons.pipe.d.ts +9 -0
  240. package/lib/pipes/total-summary.pipe.d.ts +8 -0
  241. package/lib/pipes/visible-value.pipe.d.ts +8 -0
  242. package/lib/portal-page/portal-page.component.d.ts +6 -0
  243. package/lib/redirect-home-guard.d.ts +13 -0
  244. package/lib/redirect-report-navigator-command/redirect-report-navigator-command.component.d.ts +14 -0
  245. package/lib/report-container/report-container.component.d.ts +24 -0
  246. package/lib/resolvers/index.d.ts +4 -0
  247. package/lib/resolvers/portal-dynamic-page.resolver.d.ts +12 -0
  248. package/lib/resolvers/portal-form-page.resolver.d.ts +8 -0
  249. package/lib/resolvers/portal-page.resolver.d.ts +12 -0
  250. package/lib/resolvers/portal-report-page.resolver.d.ts +12 -0
  251. package/lib/root-page/root-page.component.d.ts +10 -0
  252. package/lib/root-portal/root-portal.component.d.ts +14 -0
  253. package/lib/services/api.service.d.ts +18 -0
  254. package/lib/services/barsa-dialog.service.d.ts +31 -0
  255. package/lib/services/breadcrumb.service.d.ts +14 -0
  256. package/lib/services/container.service.d.ts +14 -0
  257. package/lib/services/dynamic-component.service.d.ts +13 -0
  258. package/lib/services/form-panel.service.d.ts +83 -0
  259. package/lib/services/form.service.d.ts +8 -0
  260. package/lib/services/horizontal-layout.service.d.ts +7 -0
  261. package/lib/services/index.d.ts +15 -0
  262. package/lib/services/layout.service.d.ts +23 -0
  263. package/lib/services/log.service.d.ts +17 -0
  264. package/lib/services/network-status.service.d.ts +7 -0
  265. package/lib/services/portal.service.d.ts +130 -0
  266. package/lib/services/ui.service.d.ts +14 -0
  267. package/lib/services/ulvmain.service.d.ts +178 -0
  268. package/lib/services/upload.service.d.ts +18 -0
  269. package/package.json +38 -0
  270. package/public-api.d.ts +29 -0
@@ -0,0 +1,441 @@
1
+ /* eslint-disable */
2
+ import { _isNumberValue } from '@angular/cdk/coercion';
3
+ import { BarsaApi } from './abstract-classes/barsa-api';
4
+ import { DateHijriService, DateMiladiService, DateShamsiService } from './date-services';
5
+ import * as Device from './device';
6
+ export function throwIfAlreadyLoaded(parentModule, moduleName) {
7
+ if (parentModule) {
8
+ throw new Error(`${moduleName} has already been loaded. Import ${moduleName} in the AppModule only.`);
9
+ }
10
+ }
11
+ export function genrateInlineMoId() {
12
+ return (BarsaApi.idGenerator--).toString();
13
+ }
14
+ export function enumValueToStringSize(value, defaultValue) {
15
+ switch (value) {
16
+ case '1':
17
+ return 's';
18
+ case '2':
19
+ return 'm';
20
+ case '3':
21
+ return 'l';
22
+ default:
23
+ return defaultValue;
24
+ }
25
+ }
26
+ export function getUniqueId(parts) {
27
+ const stringArr = [];
28
+ for (let i = 0; i < parts; i++) {
29
+ // eslint-disable-next-line no-bitwise
30
+ const S4 = (((1 + Math.random()) * 0x10000) | 0).toString(16);
31
+ const S4_ = S4.length > 0 ? S4.substring(1) : '';
32
+ stringArr.push(S4_);
33
+ }
34
+ return stringArr.join('-');
35
+ }
36
+ export function getDateService(logService, culture) {
37
+ const defaultCulture = culture ?? BarsaApi.LoginFormData.Culture;
38
+ switch (defaultCulture) {
39
+ case 'fa-IR':
40
+ return new DateShamsiService(logService);
41
+ case 'ar-AE':
42
+ return new DateHijriService(logService);
43
+ default:
44
+ return new DateMiladiService(logService);
45
+ }
46
+ }
47
+ export function getImagePath(type, moId, fileId, fieldDefId, size, sizeH) {
48
+ moId = moId == null ? '' : encodeURIComponent(moId);
49
+ fileId = fileId == null ? '' : encodeURIComponent(fileId);
50
+ fieldDefId = fieldDefId == null ? '' : encodeURIComponent(fieldDefId);
51
+ size = size == null ? 128 : size;
52
+ sizeH = sizeH == null ? size : sizeH;
53
+ const url = `/IH.ashx?ty=${type}&moId=${moId}&id=${fileId}&fdId=${fieldDefId}&si=${size}&siH=${sizeH}`;
54
+ return url;
55
+ }
56
+ export function isFunction(functionToCheck) {
57
+ return functionToCheck && {}.toString.call(functionToCheck) === '[object Function]';
58
+ }
59
+ export function DeviceWidth() {
60
+ return window.innerWidth > 0 ? window.innerWidth : screen.width;
61
+ }
62
+ export function getHeaderValue(fieldValue) {
63
+ if (typeof fieldValue !== 'object') {
64
+ return fieldValue;
65
+ }
66
+ const value = fieldValue.Value;
67
+ const valueCaption = fieldValue.Value$Caption;
68
+ let valueObjectCaption = null;
69
+ if (typeof value === 'object') {
70
+ valueObjectCaption = fieldValue.Value.$Caption;
71
+ }
72
+ if (valueObjectCaption) {
73
+ return valueObjectCaption;
74
+ }
75
+ if (valueCaption && !valueCaption.startsWith('tmp')) {
76
+ return valueCaption;
77
+ }
78
+ return value;
79
+ }
80
+ export function elementInViewport2(el) {
81
+ let top = el.offsetTop;
82
+ let left = el.offsetLeft;
83
+ const width = el.offsetWidth;
84
+ const height = el.offsetHeight;
85
+ while (el.offsetParent) {
86
+ el = el.offsetParent;
87
+ top += el.offsetTop;
88
+ left += el.offsetLeft;
89
+ }
90
+ return (top < window.pageYOffset + window.innerHeight &&
91
+ left < window.pageXOffset + window.innerWidth &&
92
+ top + height > window.pageYOffset &&
93
+ left + width > window.pageXOffset);
94
+ }
95
+ export function PreventDefaulEvent(e) {
96
+ e.stopPropagation();
97
+ e.preventDefault();
98
+ }
99
+ export function getComponentDefined(controlUi, customUiSetting) {
100
+ let moduleName = BarsaApi.LoginFormData.DefaultUiModule;
101
+ let moduleKebabName = BarsaApi.Common.Util.GetKebabCase(moduleName);
102
+ let componentName = controlUi.originalXtype.replace('.', '').replace('_', '');
103
+ let selector = BarsaApi.Common.Util.GetKebabCase(componentName);
104
+ selector = selector.substring(1, selector.length);
105
+ selector = BarsaApi.LoginFormData.CustomUiPrefix + '-' + selector;
106
+ if (customUiSetting && customUiSetting.Module) {
107
+ moduleName = customUiSetting.Module;
108
+ moduleKebabName = BarsaApi.Common.Util.GetKebabCase(moduleName);
109
+ componentName = customUiSetting.Name;
110
+ selector = customUiSetting.Selector;
111
+ }
112
+ const modulePath = moduleKebabName.slice(1, moduleKebabName.length);
113
+ return { moduleName, modulePath, componentName, selector };
114
+ }
115
+ export function getDeviceIsPhone() {
116
+ return Device.isPhone();
117
+ }
118
+ export function getDeviceIsDesktop() {
119
+ return Device.isTablet();
120
+ }
121
+ export function getDeviceIsTablet() {
122
+ return Device.isTablet();
123
+ }
124
+ export function getDeviceIsMobile() {
125
+ return navigator.userAgent.indexOf('mobi') > 0;
126
+ }
127
+ export function getControlSizeMode(el, deviceSize = 'l') {
128
+ const containerWidth = el.offsetWidth;
129
+ if (containerWidth === 0) {
130
+ return deviceSize;
131
+ }
132
+ if (deviceSize === 's' || containerWidth < 600) {
133
+ deviceSize = 's';
134
+ }
135
+ else if (deviceSize === 'm' || (containerWidth > 600 && containerWidth < 1200)) {
136
+ deviceSize = 'm';
137
+ }
138
+ return deviceSize;
139
+ }
140
+ export function formatBytes(bytes, decimals = 2, size) {
141
+ if (bytes === 0) {
142
+ return '0 Bytes';
143
+ }
144
+ const k = 1024;
145
+ const dm = decimals < 0 ? 0 : decimals;
146
+ const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
147
+ const i = sizes.findIndex((c) => c === size);
148
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
149
+ }
150
+ export function getValidExtension(validExtensions) {
151
+ let _validExtensions = '';
152
+ if (Array.isArray(validExtensions)) {
153
+ _validExtensions = validExtensions.map((c) => '.' + c.Extension).join(',');
154
+ }
155
+ return _validExtensions;
156
+ }
157
+ export function getIcon(type) {
158
+ return BarsaApi.Common.File.FileIconDict128[type];
159
+ }
160
+ export function isImage(type) {
161
+ if (!type) {
162
+ return false;
163
+ }
164
+ type = type.toLowerCase();
165
+ return ['img', 'png', 'jpeg', 'jpg', 'gif', 'bmp', 'tiff', 'image'].indexOf(type) > -1;
166
+ }
167
+ export function GetAllColumnsSorted(context) {
168
+ const allColumns = BarsaApi.Common.Util.TryGetValue(context, 'Setting.View.Columns', []).filter((c) => c.Name !== 'Id' && c.Name !== '$StyleIndex' && !c.Hidden);
169
+ const colList = BarsaApi.Common.Util.TryGetValue(context, 'Setting.View.GridSetting.ColSettingList', []);
170
+ const columns = new Array();
171
+ colList.forEach((colS) => {
172
+ const column = allColumns.find((c) => c.Name === colS.Name);
173
+ if (column) {
174
+ columns.push({ ...column, Hidden: colS.IsHidden, Width: colS.Width });
175
+ }
176
+ });
177
+ allColumns.forEach((column, index) => {
178
+ const colSetting = colList.find((c) => c.Name === column.Name);
179
+ if (!colSetting) {
180
+ columns.splice(index, 0, { ...column, Hidden: colList.length > 0 ? true : false });
181
+ }
182
+ });
183
+ return columns;
184
+ }
185
+ export function getGridSettings(context) {
186
+ const gridSetting = BarsaApi.Common.Util.TryGetValue(context, 'Setting.View.GridSetting', null);
187
+ return {
188
+ ColSettingList: gridSetting?.ColSettingList ?? null,
189
+ SortSettingList: gridSetting?.SortSettingList ?? [],
190
+ AutoSizeColumns: gridSetting?.AutoSizeColumns ?? false
191
+ };
192
+ }
193
+ export function GetDefaultMoObjectInfo(typeDefId) {
194
+ return {
195
+ Id: '0',
196
+ $Caption: '',
197
+ $TypeDefId: typeDefId,
198
+ $State: 'New',
199
+ $Type: 'Common.MetaObjectWeb',
200
+ $FieldDict: {}
201
+ };
202
+ }
203
+ export function getLayout94ObjectInfo() {
204
+ return {
205
+ Type: 'Root',
206
+ ControlId: 'ریشه',
207
+ xtype: 'Ly.LayoutContainer',
208
+ Bounds: { x: 0, y: 0, width: 432, height: 24 },
209
+ items: [
210
+ {
211
+ Type: 'VerticalJoin',
212
+ xtype: 'Ly.LayoutJoin',
213
+ IsVertical: true,
214
+ Bounds: { x: 0, y: 0, width: 432, height: 82 },
215
+ items: []
216
+ }
217
+ ]
218
+ };
219
+ }
220
+ export function getFormSettings(typeDefId) {
221
+ const mo = GetDefaultMoObjectInfo(typeDefId);
222
+ const formPanelSettings = {
223
+ View: {
224
+ Layout94: getLayout94ObjectInfo,
225
+ ControlInfo: [],
226
+ TypeDefId: typeDefId
227
+ },
228
+ IsSearchPanel: true,
229
+ Data: {
230
+ Mo: mo
231
+ }
232
+ };
233
+ return formPanelSettings;
234
+ }
235
+ export function createFormPanelMetaConditions(typeDefId, controlsInfo, controlName, value) {
236
+ const formSettings = getFormSettings(typeDefId);
237
+ formSettings.View.ControlInfo = JSON.parse(JSON.stringify(controlsInfo));
238
+ formSettings.View.Layout94.items[0].items.push(...controlsInfo.map((c) => getLayoutControl(c.ControlName)));
239
+ formSettings.Data.Mo[controlName] = value;
240
+ const formPanelCtrlr = new BarsaApi.Ul.FormPanelCtrlr({
241
+ Setting: formSettings,
242
+ Features: {
243
+ Workflow: false,
244
+ Toolbar: false,
245
+ InfoBar: false
246
+ }
247
+ });
248
+ return formPanelCtrlr;
249
+ }
250
+ export function getNewMoGridEditor(formSettings, typedefId) {
251
+ const newFormSettings = JSON.parse(JSON.stringify(formSettings));
252
+ return { ...newFormSettings.Data.Mo, $TypeDefId: typedefId };
253
+ }
254
+ export function createGridEditorFormPanel(formSettings, mo, typedef, relation, rewriteLayout = true) {
255
+ const newFormSettings = JSON.parse(JSON.stringify(formSettings));
256
+ newFormSettings.Data.Mo = { ...mo, $TypeDefId: typedef };
257
+ if (rewriteLayout) {
258
+ newFormSettings.View.Layout94 = getLayout94ObjectInfo();
259
+ newFormSettings.View.Layout94.items[0].items.push(...newFormSettings.View.ControlInfo.map((c) => getLayoutControl(c.ControlName, c.ControlFieldCaptionTranslated, false)));
260
+ }
261
+ const formPanelCtrlr = new BarsaApi.Ul.FormPanelCtrlr({
262
+ Setting: newFormSettings,
263
+ Relation: relation,
264
+ Features: {
265
+ Workflow: false,
266
+ Toolbar: false,
267
+ InfoBar: false
268
+ }
269
+ });
270
+ return formPanelCtrlr;
271
+ }
272
+ export function getLayoutControl(controlName, controlCaption = '', hide = true) {
273
+ return {
274
+ xtype: 'Ly.LayoutControl',
275
+ Type: 'LayoutControlItem',
276
+ ControlId: controlName,
277
+ IsVertical: false,
278
+ TextLocation: 'Right',
279
+ TextVisible: false,
280
+ Visible: !hide,
281
+ hide,
282
+ UseLayoutItemTextForControl: false,
283
+ Caption: controlCaption,
284
+ AccessibleName: '',
285
+ Bounds: { x: 0, y: 0, width: 432, height: 24 },
286
+ MinSize: { width: 89, height: 24 },
287
+ MaxSize: { width: 0, height: 24 },
288
+ ControlBounds: { width: 388, height: 20 },
289
+ ControlMinSize: { width: 45, height: 20 },
290
+ ControlMaxSize: { width: 0, height: 20 },
291
+ Padding: [2, 2, 2, 2],
292
+ LabelSize: { width: 35, height: 13 },
293
+ originalXtype: ''
294
+ };
295
+ }
296
+ export function getControlList(mo, controlDbNames, isSearchPanel, isGridEditor) {
297
+ return new Promise((resolve, reject) => {
298
+ BarsaApi.Common.Ajax.GetServerData('Form94.GetControlInfos', {
299
+ controlInfoParameter: {
300
+ FieldDbNames: controlDbNames,
301
+ Mo: new BarsaApi.Common.MetaObjectWeb(mo),
302
+ IsSearchPanel: isSearchPanel,
303
+ IsGridEditor: isGridEditor
304
+ }
305
+ }, (m) => {
306
+ resolve(m);
307
+ }, (err) => {
308
+ reject(err);
309
+ });
310
+ });
311
+ }
312
+ export function shallowEqual(objA, objB) {
313
+ if (objA === objB) {
314
+ return true;
315
+ }
316
+ if (typeof objA !== 'object' || !objA || typeof objB !== 'object' || !objB) {
317
+ return false;
318
+ }
319
+ const keysA = Object.keys(objA);
320
+ const keysB = Object.keys(objB);
321
+ if (keysA.length !== keysB.length) {
322
+ return false;
323
+ }
324
+ const bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB);
325
+ // eslint-disable-next-line @typescript-eslint/prefer-for-of
326
+ for (let idx = 0; idx < keysA.length; idx++) {
327
+ const key = keysA[idx];
328
+ if (!bHasOwnProperty(key)) {
329
+ return false;
330
+ }
331
+ if (objA[key] !== objB[key]) {
332
+ return false;
333
+ }
334
+ }
335
+ return true;
336
+ }
337
+ export function toNumber(value, fallbackValue = 0) {
338
+ return _isNumberValue(value) ? Number(value) : fallbackValue;
339
+ }
340
+ function propDecoratorFactory(name, fallback) {
341
+ function propDecorator(target, propName, originalDescriptor) {
342
+ const privatePropName = `$$__zorroPropDecorator__${propName}`;
343
+ if (Object.prototype.hasOwnProperty.call(target, privatePropName)) {
344
+ // warn(`The prop "${privatePropName}" is already exist, it will be overrided by ${name} decorator.`);
345
+ }
346
+ Object.defineProperty(target, privatePropName, {
347
+ configurable: true,
348
+ writable: true
349
+ });
350
+ return {
351
+ get() {
352
+ return originalDescriptor && originalDescriptor.get
353
+ ? originalDescriptor.get.bind(this)()
354
+ : this[privatePropName];
355
+ },
356
+ set(value) {
357
+ if (originalDescriptor && originalDescriptor.set) {
358
+ originalDescriptor.set.bind(this)(fallback(value));
359
+ }
360
+ this[privatePropName] = fallback(value);
361
+ }
362
+ };
363
+ }
364
+ return propDecorator;
365
+ }
366
+ export function InputNumber(fallbackValue) {
367
+ return propDecoratorFactory('InputNumber', (value) => toNumber(value, fallbackValue));
368
+ }
369
+ export var AffixRespondEvents;
370
+ (function (AffixRespondEvents) {
371
+ AffixRespondEvents["resize"] = "resize";
372
+ AffixRespondEvents["scroll"] = "scroll";
373
+ AffixRespondEvents["touchstart"] = "touchstart";
374
+ AffixRespondEvents["touchmove"] = "touchmove";
375
+ AffixRespondEvents["touchend"] = "touchend";
376
+ AffixRespondEvents["pageshow"] = "pageshow";
377
+ AffixRespondEvents["load"] = "LOAD";
378
+ })(AffixRespondEvents || (AffixRespondEvents = {}));
379
+ export function isTargetWindow(target) {
380
+ return typeof window !== 'undefined' && target === window;
381
+ }
382
+ export function getTargetRect(target) {
383
+ return !isTargetWindow(target)
384
+ ? target.getBoundingClientRect()
385
+ : {
386
+ top: 0,
387
+ left: 0,
388
+ bottom: 0
389
+ };
390
+ }
391
+ /* eslint-disable no-invalid-this */
392
+ export const availablePrefixes = ['moz', 'ms', 'webkit'];
393
+ export function requestAnimationFramePolyfill() {
394
+ let lastTime = 0;
395
+ return function (callback) {
396
+ const currTime = new Date().getTime();
397
+ const timeToCall = Math.max(0, 16 - (currTime - lastTime));
398
+ const id = setTimeout(() => {
399
+ callback(currTime + timeToCall);
400
+ }, timeToCall);
401
+ lastTime = currTime + timeToCall;
402
+ return id;
403
+ };
404
+ }
405
+ export function getRequestAnimationFrame() {
406
+ if (typeof window === 'undefined') {
407
+ return () => 0;
408
+ }
409
+ if (window.requestAnimationFrame) {
410
+ // https://github.com/vuejs/vue/issues/4465
411
+ return window.requestAnimationFrame.bind(window);
412
+ }
413
+ const prefix = availablePrefixes.filter((key) => `${key}RequestAnimationFrame` in window)[0];
414
+ return prefix ? window[`${prefix}RequestAnimationFrame`] : requestAnimationFramePolyfill();
415
+ }
416
+ export function cancelRequestAnimationFrame(id) {
417
+ if (typeof window === 'undefined') {
418
+ return null;
419
+ }
420
+ if (window.cancelAnimationFrame) {
421
+ return window.cancelAnimationFrame(id);
422
+ }
423
+ const prefix = availablePrefixes.filter((key) => `${key}CancelAnimationFrame` in window || `${key}CancelRequestAnimationFrame` in window)[0];
424
+ return prefix
425
+ ? (window[`${prefix}CancelAnimationFrame`] ||
426
+ window[`${prefix}CancelRequestAnimationFrame`])
427
+ // @ts-ignore
428
+ .call(this, id)
429
+ : clearTimeout(id);
430
+ }
431
+ export function easeInOutCubic(t, b, c, d) {
432
+ const cc = c - b;
433
+ let tt = t / (d / 2);
434
+ if (tt < 1) {
435
+ return (cc / 2) * tt * tt * tt + b;
436
+ }
437
+ else {
438
+ return (cc / 2) * ((tt -= 2) * tt * tt + 2) + b;
439
+ }
440
+ }
441
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etbm92aW4tcmF5LWNvcmUvc3JjL2xpYi9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFXeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFlLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEcsT0FBTyxLQUFLLE1BQU0sTUFBTSxVQUFVLENBQUM7QUFHbkMsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFlBQWlCLEVBQUUsVUFBa0I7SUFDdEUsSUFBSSxZQUFZLEVBQUU7UUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsVUFBVSxvQ0FBb0MsVUFBVSx5QkFBeUIsQ0FBQyxDQUFDO0tBQ3pHO0FBQ0wsQ0FBQztBQUNELE1BQU0sVUFBVSxpQkFBaUI7SUFDN0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQy9DLENBQUM7QUFDRCxNQUFNLFVBQVUscUJBQXFCLENBQUMsS0FBYSxFQUFFLFlBQW9CO0lBQ3JFLFFBQVEsS0FBSyxFQUFFO1FBQ1gsS0FBSyxHQUFHO1lBQ0osT0FBTyxHQUFHLENBQUM7UUFDZixLQUFLLEdBQUc7WUFDSixPQUFPLEdBQUcsQ0FBQztRQUNmLEtBQUssR0FBRztZQUNKLE9BQU8sR0FBRyxDQUFDO1FBQ2Y7WUFDSSxPQUFPLFlBQVksQ0FBQztLQUMzQjtBQUNMLENBQUM7QUFDRCxNQUFNLFVBQVUsV0FBVyxDQUFDLEtBQWE7SUFDckMsTUFBTSxTQUFTLEdBQWEsRUFBRSxDQUFDO0lBQy9CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFF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QUNELE1BQU0sTUFBTSxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FDbkMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxzQkFBc0IsSUFBSSxNQUFNLElBQUksR0FBRyxHQUFHLDZCQUE2QixJQUFJLE1BQU0sQ0FDbkcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVMLE9BQU8sTUFBTTtRQUNULENBQUMsQ0FBQyxDQUNLLE1BQW9CLENBQUMsR0FBRyxNQUFNLHNCQUFzQixDQUFDO1lBQ3JELE1BQW9CLENBQUMsR0FBRyxNQUFNLDZCQUE2QixDQUFDLENBQ2hFO1lBQ0csYUFBYTthQUNaLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUlELE1BQU0sVUFBVSxjQUFjLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUztJQUNyRSxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyQixJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUU7UUFDUixPQUFPLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztLQUN0QztTQUFNO1FBQ0gsT0FBTyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ25EO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyBfaXNOdW1iZXJWYWx1ZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBCYXJzYUFwaSB9IGZyb20gJy4vYWJzdHJhY3QtY2xhc3Nlcy9iYXJzYS1hcGknO1xuaW1wb3J0IHtcbiAgICBBYmJyZXZhdGlvbkRldmljZVNpemUsXG4gICAgQ29sU2V0dGluZyxcbiAgICBGb3JtU2V0dGluZyxcbiAgICBHZW5lcmFsQ29udHJvbEluZm9Nb2RlbCxcbiAgICBHcmlkU2V0dGluZyxcbiAgICBMYXlvdXRTZXR0aW5nLFxuICAgIE1ldGFvYmplY3REYXRhTW9kZWwsXG4gICAgUmVwb3J0Vmlld0NvbHVtblxufSBmcm9tICcuL2Fic3RyYWN0LWNsYXNzZXMvbW9kZWxzJztcbmltcG9ydCB7IERhdGVIaWpyaVNlcnZpY2UsIERhdGVNaWxhZGlTZXJ2aWNlLCBEYXRlU2VydmljZSwgRGF0ZVNoYW1zaVNlcnZpY2UgfSBmcm9tICcuL2RhdGUtc2VydmljZXMnO1xuaW1wb3J0ICogYXMgRGV2aWNlIGZyb20gJy4vZGV2aWNlJztcbmltcG9ydCB7IExvZ1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2xvZy5zZXJ2aWNlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHRocm93SWZBbHJlYWR5TG9hZGVkKHBhcmVudE1vZHVsZTogYW55LCBtb2R1bGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAocGFyZW50TW9kdWxlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHttb2R1bGVOYW1lfSBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZC4gSW1wb3J0ICR7bW9kdWxlTmFtZX0gaW4gdGhlIEFwcE1vZHVsZSBvbmx5LmApO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBnZW5yYXRlSW5saW5lTW9JZCgpIHtcbiAgICByZXR1cm4gKEJhcnNhQXBpLmlkR2VuZXJhdG9yLS0pLnRvU3RyaW5nKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZW51bVZhbHVlVG9TdHJpbmdTaXplKHZhbHVlOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICAgIGNhc2UgJzEnOlxuICAgICAgICAgICAgcmV0dXJuICdzJztcbiAgICAgICAgY2FzZSAnMic6XG4gICAgICAgICAgICByZXR1cm4gJ20nO1xuICAgICAgICBjYXNlICczJzpcbiAgICAgICAgICAgIHJldHVybiAnbCc7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRVbmlxdWVJZChwYXJ0czogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdHJpbmdBcnI6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0czsgaSsrKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgICAgIGNvbnN0IFM0ID0gKCgoMSArIE1hdGgucmFuZG9tKCkpICogMHgxMDAwMCkgfCAwKS50b1N0cmluZygxNik7XG4gICAgICAgIGNvbnN0IFM0Xzogc3RyaW5nID0gUzQubGVuZ3RoID4gMCA/IFM0LnN1YnN0cmluZygxKSA6ICcnO1xuICAgICAgICBzdHJpbmdBcnIucHVzaChTNF8pO1xuICAgIH1cbiAgICByZXR1cm4gc3RyaW5nQXJyLmpvaW4oJy0nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVTZXJ2aWNlKGxvZ1NlcnZpY2U6IExvZ1NlcnZpY2UsIGN1bHR1cmU/KTogRGF0ZVNlcnZpY2Uge1xuICAgIGNvbnN0IGRlZmF1bHRDdWx0dXJlID0gY3VsdHVyZSA/PyBCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLkN1bHR1cmU7XG4gICAgc3dpdGNoIChkZWZhdWx0Q3VsdHVyZSkge1xuICAgICAgICBjYXNlICdmYS1JUic6XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGVTaGFtc2lTZXJ2aWNlKGxvZ1NlcnZpY2UpO1xuICAgICAgICBjYXNlICdhci1BRSc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGVIaWpyaVNlcnZpY2UobG9nU2VydmljZSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGVNaWxhZGlTZXJ2aWNlKGxvZ1NlcnZpY2UpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEltYWdlUGF0aChcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgbW9JZDogc3RyaW5nIHwgbnVsbCxcbiAgICBmaWxlSWQ6IHN0cmluZyxcbiAgICBmaWVsZERlZklkPzogc3RyaW5nLFxuICAgIHNpemU/OiBudW1iZXIsXG4gICAgc2l6ZUg/OiBudW1iZXJcbik6IHN0cmluZyB7XG4gICAgbW9JZCA9IG1vSWQgPT0gbnVsbCA/ICcnIDogZW5jb2RlVVJJQ29tcG9uZW50KG1vSWQpO1xuICAgIGZpbGVJZCA9IGZpbGVJZCA9PSBudWxsID8gJycgOiBlbmNvZGVVUklDb21wb25lbnQoZmlsZUlkKTtcbiAgICBmaWVsZERlZklkID0gZmllbGREZWZJZCA9PSBudWxsID8gJycgOiBlbmNvZGVVUklDb21wb25lbnQoZmllbGREZWZJZCk7XG4gICAgc2l6ZSA9IHNpemUgPT0gbnVsbCA/IDEyOCA6IHNpemU7XG4gICAgc2l6ZUggPSBzaXplSCA9PSBudWxsID8gc2l6ZSA6IHNpemVIO1xuICAgIGNvbnN0IHVybCA9IGAvSUguYXNoeD90eT0ke3R5cGV9Jm1vSWQ9JHttb0lkfSZpZD0ke2ZpbGVJZH0mZmRJZD0ke2ZpZWxkRGVmSWR9JnNpPSR7c2l6ZX0mc2lIPSR7c2l6ZUh9YDtcbiAgICByZXR1cm4gdXJsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbihmdW5jdGlvblRvQ2hlY2spOiBib29sZWFuIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub0NoZWNrICYmIHt9LnRvU3RyaW5nLmNhbGwoZnVuY3Rpb25Ub0NoZWNrKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn1cbmV4cG9ydCBmdW5jdGlvbiBEZXZpY2VXaWR0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aCA+IDAgPyB3aW5kb3cuaW5uZXJXaWR0aCA6IHNjcmVlbi53aWR0aDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRIZWFkZXJWYWx1ZShmaWVsZFZhbHVlKTogYW55IHtcbiAgICBpZiAodHlwZW9mIGZpZWxkVmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmaWVsZFZhbHVlO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IGZpZWxkVmFsdWUuVmFsdWU7XG4gICAgY29uc3QgdmFsdWVDYXB0aW9uOiBzdHJpbmcgPSBmaWVsZFZhbHVlLlZhbHVlJENhcHRpb247XG4gICAgbGV0IHZhbHVlT2JqZWN0Q2FwdGlvbiA9IG51bGw7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgdmFsdWVPYmplY3RDYXB0aW9uID0gZmllbGRWYWx1ZS5WYWx1ZS4kQ2FwdGlvbjtcbiAgICB9XG4gICAgaWYgKHZhbHVlT2JqZWN0Q2FwdGlvbikge1xuICAgICAgICByZXR1cm4gdmFsdWVPYmplY3RDYXB0aW9uO1xuICAgIH1cbiAgICBpZiAodmFsdWVDYXB0aW9uICYmICF2YWx1ZUNhcHRpb24uc3RhcnRzV2l0aCgndG1wJykpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlQ2FwdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGVsZW1lbnRJblZpZXdwb3J0MihlbDogYW55KTogYm9vbGVhbiB7XG4gICAgbGV0IHRvcCA9IGVsLm9mZnNldFRvcDtcbiAgICBsZXQgbGVmdCA9IGVsLm9mZnNldExlZnQ7XG4gICAgY29uc3Qgd2lkdGggPSBlbC5vZmZzZXRXaWR0aDtcbiAgICBjb25zdCBoZWlnaHQgPSBlbC5vZmZzZXRIZWlnaHQ7XG5cbiAgICB3aGlsZSAoZWwub2Zmc2V0UGFyZW50KSB7XG4gICAgICAgIGVsID0gZWwub2Zmc2V0UGFyZW50O1xuICAgICAgICB0b3AgKz0gZWwub2Zmc2V0VG9wO1xuICAgICAgICBsZWZ0ICs9IGVsLm9mZnNldExlZnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgdG9wIDwgd2luZG93LnBhZ2VZT2Zmc2V0ICsgd2luZG93LmlubmVySGVpZ2h0ICYmXG4gICAgICAgIGxlZnQgPCB3aW5kb3cucGFnZVhPZmZzZXQgKyB3aW5kb3cuaW5uZXJXaWR0aCAmJlxuICAgICAgICB0b3AgKyBoZWlnaHQgPiB3aW5kb3cucGFnZVlPZmZzZXQgJiZcbiAgICAgICAgbGVmdCArIHdpZHRoID4gd2luZG93LnBhZ2VYT2Zmc2V0XG4gICAgKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBQcmV2ZW50RGVmYXVsRXZlbnQoZSk6IHZvaWQge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tcG9uZW50RGVmaW5lZChcbiAgICBjb250cm9sVWk6IHsgb3JpZ2luYWxYdHlwZTogc3RyaW5nIH0sXG4gICAgY3VzdG9tVWlTZXR0aW5nOiB7IE1vZHVsZTogc3RyaW5nOyBOYW1lOiBzdHJpbmc7IFNlbGVjdG9yOiBzdHJpbmcgfVxuKToge1xuICAgIG1vZHVsZU5hbWU6IHN0cmluZztcbiAgICBtb2R1bGVQYXRoOiBzdHJpbmc7XG4gICAgY29tcG9uZW50TmFtZTogc3RyaW5nO1xuICAgIHNlbGVjdG9yOiBzdHJpbmc7XG59IHtcbiAgICBsZXQgbW9kdWxlTmFtZSA9IEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuRGVmYXVsdFVpTW9kdWxlO1xuICAgIGxldCBtb2R1bGVLZWJhYk5hbWUgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5HZXRLZWJhYkNhc2UobW9kdWxlTmFtZSk7XG4gICAgbGV0IGNvbXBvbmVudE5hbWUgPSBjb250cm9sVWkub3JpZ2luYWxYdHlwZS5yZXBsYWNlKCcuJywgJycpLnJlcGxhY2UoJ18nLCAnJyk7XG4gICAgbGV0IHNlbGVjdG9yOiBzdHJpbmcgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5HZXRLZWJhYkNhc2UoY29tcG9uZW50TmFtZSk7XG4gICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5zdWJzdHJpbmcoMSwgc2VsZWN0b3IubGVuZ3RoKTtcbiAgICBzZWxlY3RvciA9IEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuQ3VzdG9tVWlQcmVmaXggKyAnLScgKyBzZWxlY3RvcjtcbiAgICBpZiAoY3VzdG9tVWlTZXR0aW5nICYmIGN1c3RvbVVpU2V0dGluZy5Nb2R1bGUpIHtcbiAgICAgICAgbW9kdWxlTmFtZSA9IGN1c3RvbVVpU2V0dGluZy5Nb2R1bGU7XG4gICAgICAgIG1vZHVsZUtlYmFiTmFtZSA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLkdldEtlYmFiQ2FzZShtb2R1bGVOYW1lKTtcbiAgICAgICAgY29tcG9uZW50TmFtZSA9IGN1c3RvbVVpU2V0dGluZy5OYW1lO1xuICAgICAgICBzZWxlY3RvciA9IGN1c3RvbVVpU2V0dGluZy5TZWxlY3RvcjtcbiAgICB9XG4gICAgY29uc3QgbW9kdWxlUGF0aCA9IG1vZHVsZUtlYmFiTmFtZS5zbGljZSgxLCBtb2R1bGVLZWJhYk5hbWUubGVuZ3RoKTtcbiAgICByZXR1cm4geyBtb2R1bGVOYW1lLCBtb2R1bGVQYXRoLCBjb21wb25lbnROYW1lLCBzZWxlY3RvciB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGV2aWNlSXNQaG9uZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gRGV2aWNlLmlzUGhvbmUoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXZpY2VJc0Rlc2t0b3AoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIERldmljZS5pc1RhYmxldCgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldERldmljZUlzVGFibGV0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBEZXZpY2UuaXNUYWJsZXQoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXZpY2VJc01vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdtb2JpJykgPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udHJvbFNpemVNb2RlKGVsOiBIVE1MRWxlbWVudCwgZGV2aWNlU2l6ZTogJ3MnIHwgJ20nIHwgJ2wnIHwgJ3hsJyA9ICdsJyk6IEFiYnJldmF0aW9uRGV2aWNlU2l6ZSB7XG4gICAgY29uc3QgY29udGFpbmVyV2lkdGggPSBlbC5vZmZzZXRXaWR0aDtcbiAgICBpZiAoY29udGFpbmVyV2lkdGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGRldmljZVNpemU7XG4gICAgfVxuICAgIGlmIChkZXZpY2VTaXplID09PSAncycgfHwgY29udGFpbmVyV2lkdGggPCA2MDApIHtcbiAgICAgICAgZGV2aWNlU2l6ZSA9ICdzJztcbiAgICB9IGVsc2UgaWYgKGRldmljZVNpemUgPT09ICdtJyB8fCAoY29udGFpbmVyV2lkdGggPiA2MDAgJiYgY29udGFpbmVyV2lkdGggPCAxMjAwKSkge1xuICAgICAgICBkZXZpY2VTaXplID0gJ20nO1xuICAgIH1cbiAgICByZXR1cm4gZGV2aWNlU2l6ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEJ5dGVzKFxuICAgIGJ5dGVzLFxuICAgIGRlY2ltYWxzID0gMixcbiAgICBzaXplOiAnQnl0ZXMnIHwgJ0tCJyB8ICdNQicgfCAnR0InIHwgJ1RCJyB8ICdQQicgfCAnRUInIHwgJ1pCJyB8ICdZQidcbik6IHN0cmluZyB7XG4gICAgaWYgKGJ5dGVzID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnMCBCeXRlcyc7XG4gICAgfVxuXG4gICAgY29uc3QgayA9IDEwMjQ7XG4gICAgY29uc3QgZG0gPSBkZWNpbWFscyA8IDAgPyAwIDogZGVjaW1hbHM7XG4gICAgY29uc3Qgc2l6ZXMgPSBbJ0J5dGVzJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJywgJ1BCJywgJ0VCJywgJ1pCJywgJ1lCJ107XG4gICAgY29uc3QgaSA9IHNpemVzLmZpbmRJbmRleCgoYykgPT4gYyA9PT0gc2l6ZSk7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQoKGJ5dGVzIC8gTWF0aC5wb3coaywgaSkpLnRvRml4ZWQoZG0pKSArICcgJyArIHNpemVzW2ldO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbGlkRXh0ZW5zaW9uKHZhbGlkRXh0ZW5zaW9ucyk6IHN0cmluZyB7XG4gICAgbGV0IF92YWxpZEV4dGVuc2lvbnMgPSAnJztcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWxpZEV4dGVuc2lvbnMpKSB7XG4gICAgICAgIF92YWxpZEV4dGVuc2lvbnMgPSB2YWxpZEV4dGVuc2lvbnMubWFwKChjKSA9PiAnLicgKyBjLkV4dGVuc2lvbikuam9pbignLCcpO1xuICAgIH1cbiAgICByZXR1cm4gX3ZhbGlkRXh0ZW5zaW9ucztcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRJY29uKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEJhcnNhQXBpLkNvbW1vbi5GaWxlLkZpbGVJY29uRGljdDEyOFt0eXBlXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0ltYWdlKHR5cGUpOiBib29sZWFuIHtcbiAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBbJ2ltZycsICdwbmcnLCAnanBlZycsICdqcGcnLCAnZ2lmJywgJ2JtcCcsICd0aWZmJywgJ2ltYWdlJ10uaW5kZXhPZih0eXBlKSA+IC0xO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gR2V0QWxsQ29sdW1uc1NvcnRlZChjb250ZXh0KTogQXJyYXk8UmVwb3J0Vmlld0NvbHVtbj4ge1xuICAgIGNvbnN0IGFsbENvbHVtbnMgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShjb250ZXh0LCAnU2V0dGluZy5WaWV3LkNvbHVtbnMnLCBbXSkuZmlsdGVyKFxuICAgICAgICAoYykgPT4gYy5OYW1lICE9PSAnSWQnICYmIGMuTmFtZSAhPT0gJyRTdHlsZUluZGV4JyAmJiAhYy5IaWRkZW5cbiAgICApO1xuXG4gICAgY29uc3QgY29sTGlzdDogQ29sU2V0dGluZ1tdID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgICdTZXR0aW5nLlZpZXcuR3JpZFNldHRpbmcuQ29sU2V0dGluZ0xpc3QnLFxuICAgICAgICBbXVxuICAgICk7XG4gICAgY29uc3QgY29sdW1ucyA9IG5ldyBBcnJheTxSZXBvcnRWaWV3Q29sdW1uPigpO1xuICAgIGNvbExpc3QuZm9yRWFjaCgoY29sUykgPT4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBhbGxDb2x1bW5zLmZpbmQoKGMpID0+IGMuTmFtZSA9PT0gY29sUy5OYW1lKTtcbiAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgICAgY29sdW1ucy5wdXNoKHsgLi4uY29sdW1uLCBIaWRkZW46IGNvbFMuSXNIaWRkZW4sIFdpZHRoOiBjb2xTLldpZHRoIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgYWxsQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4sIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbFNldHRpbmcgPSBjb2xMaXN0LmZpbmQoKGMpID0+IGMuTmFtZSA9PT0gY29sdW1uLk5hbWUpO1xuICAgICAgICBpZiAoIWNvbFNldHRpbmcpIHtcbiAgICAgICAgICAgIGNvbHVtbnMuc3BsaWNlKGluZGV4LCAwLCB7IC4uLmNvbHVtbiwgSGlkZGVuOiBjb2xMaXN0Lmxlbmd0aCA+IDAgPyB0cnVlIDogZmFsc2UgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY29sdW1ucztcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRHcmlkU2V0dGluZ3MoY29udGV4dCk6IEdyaWRTZXR0aW5nIHtcbiAgICBjb25zdCBncmlkU2V0dGluZyA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKGNvbnRleHQsICdTZXR0aW5nLlZpZXcuR3JpZFNldHRpbmcnLCBudWxsKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBDb2xTZXR0aW5nTGlzdDogZ3JpZFNldHRpbmc/LkNvbFNldHRpbmdMaXN0ID8/IG51bGwsXG4gICAgICAgIFNvcnRTZXR0aW5nTGlzdDogZ3JpZFNldHRpbmc/LlNvcnRTZXR0aW5nTGlzdCA/PyBbXSxcbiAgICAgICAgQXV0b1NpemVDb2x1bW5zOiBncmlkU2V0dGluZz8uQXV0b1NpemVDb2x1bW5zID8/IGZhbHNlXG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBHZXREZWZhdWx0TW9PYmplY3RJbmZvKHR5cGVEZWZJZDogc3RyaW5nKTogTWV0YW9iamVjdERhdGFNb2RlbCB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgSWQ6ICcwJyxcbiAgICAgICAgJENhcHRpb246ICcnLFxuICAgICAgICAkVHlwZURlZklkOiB0eXBlRGVmSWQsXG4gICAgICAgICRTdGF0ZTogJ05ldycsXG4gICAgICAgICRUeXBlOiAnQ29tbW9uLk1ldGFPYmplY3RXZWInLFxuICAgICAgICAkRmllbGREaWN0OiB7fVxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TGF5b3V0OTRPYmplY3RJbmZvKCk6IExheW91dFNldHRpbmcge1xuICAgIHJldHVybiB7XG4gICAgICAgIFR5cGU6ICdSb290JyxcbiAgICAgICAgQ29udHJvbElkOiAn2LHbjNi02YcnLFxuICAgICAgICB4dHlwZTogJ0x5LkxheW91dENvbnRhaW5lcicsXG4gICAgICAgIEJvdW5kczogeyB4OiAwLCB5OiAwLCB3aWR0aDogNDMyLCBoZWlnaHQ6IDI0IH0sXG4gICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgVHlwZTogJ1ZlcnRpY2FsSm9pbicsXG4gICAgICAgICAgICAgICAgeHR5cGU6ICdMeS5MYXlvdXRKb2luJyxcbiAgICAgICAgICAgICAgICBJc1ZlcnRpY2FsOiB0cnVlLFxuICAgICAgICAgICAgICAgIEJvdW5kczogeyB4OiAwLCB5OiAwLCB3aWR0aDogNDMyLCBoZWlnaHQ6IDgyIH0sXG4gICAgICAgICAgICAgICAgaXRlbXM6IFtdXG4gICAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1TZXR0aW5ncyh0eXBlRGVmSWQ6IHN0cmluZyk6IEZvcm1TZXR0aW5nIHtcbiAgICBjb25zdCBtbyA9IEdldERlZmF1bHRNb09iamVjdEluZm8odHlwZURlZklkKTtcblxuICAgIGNvbnN0IGZvcm1QYW5lbFNldHRpbmdzOiBGb3JtU2V0dGluZyA9IHtcbiAgICAgICAgVmlldzoge1xuICAgICAgICAgICAgTGF5b3V0OTQ6IGdldExheW91dDk0T2JqZWN0SW5mbyxcbiAgICAgICAgICAgIENvbnRyb2xJbmZvOiBbXSxcbiAgICAgICAgICAgIFR5cGVEZWZJZDogdHlwZURlZklkXG4gICAgICAgIH0sXG4gICAgICAgIElzU2VhcmNoUGFuZWw6IHRydWUsXG4gICAgICAgIERhdGE6IHtcbiAgICAgICAgICAgIE1vOiBtb1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gZm9ybVBhbmVsU2V0dGluZ3M7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRm9ybVBhbmVsTWV0YUNvbmRpdGlvbnMoXG4gICAgdHlwZURlZklkOiBzdHJpbmcsXG4gICAgY29udHJvbHNJbmZvOiBHZW5lcmFsQ29udHJvbEluZm9Nb2RlbFtdLFxuICAgIGNvbnRyb2xOYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IGFueVxuKTogYW55IHtcbiAgICBjb25zdCBmb3JtU2V0dGluZ3MgPSBnZXRGb3JtU2V0dGluZ3ModHlwZURlZklkKTtcbiAgICBmb3JtU2V0dGluZ3MuVmlldy5Db250cm9sSW5mbyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29udHJvbHNJbmZvKSk7XG5cbiAgICBmb3JtU2V0dGluZ3MuVmlldy5MYXlvdXQ5NC5pdGVtc1swXS5pdGVtcy5wdXNoKC4uLmNvbnRyb2xzSW5mby5tYXAoKGMpID0+IGdldExheW91dENvbnRyb2woYy5Db250cm9sTmFtZSkpKTtcbiAgICBmb3JtU2V0dGluZ3MuRGF0YS5Nb1tjb250cm9sTmFtZV0gPSB2YWx1ZTtcbiAgICBjb25zdCBmb3JtUGFuZWxDdHJsciA9IG5ldyBCYXJzYUFwaS5VbC5Gb3JtUGFuZWxDdHJscih7XG4gICAgICAgIFNldHRpbmc6IGZvcm1TZXR0aW5ncyxcbiAgICAgICAgRmVhdHVyZXM6IHtcbiAgICAgICAgICAgIFdvcmtmbG93OiBmYWxzZSxcbiAgICAgICAgICAgIFRvb2xiYXI6IGZhbHNlLFxuICAgICAgICAgICAgSW5mb0JhcjogZmFsc2VcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBmb3JtUGFuZWxDdHJscjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXdNb0dyaWRFZGl0b3IoZm9ybVNldHRpbmdzOiBGb3JtU2V0dGluZywgdHlwZWRlZklkOiBzdHJpbmcpOiBQYXJ0aWFsPEZvcm1TZXR0aW5nPiB7XG4gICAgY29uc3QgbmV3Rm9ybVNldHRpbmdzOiBGb3JtU2V0dGluZyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZm9ybVNldHRpbmdzKSk7XG4gICAgcmV0dXJuIHsgLi4ubmV3Rm9ybVNldHRpbmdzLkRhdGEuTW8sICRUeXBlRGVmSWQ6IHR5cGVkZWZJZCB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUdyaWRFZGl0b3JGb3JtUGFuZWwoXG4gICAgZm9ybVNldHRpbmdzOiBGb3JtU2V0dGluZyxcbiAgICBtbzogTWV0YW9iamVjdERhdGFNb2RlbCxcbiAgICB0eXBlZGVmOiBzdHJpbmcsXG4gICAgcmVsYXRpb246IGFueSxcbiAgICByZXdyaXRlTGF5b3V0OiBib29sZWFuID0gdHJ1ZVxuKTogYW55IHtcbiAgICBjb25zdCBuZXdGb3JtU2V0dGluZ3M6IEZvcm1TZXR0aW5nID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmb3JtU2V0dGluZ3MpKTtcbiAgICBuZXdGb3JtU2V0dGluZ3MuRGF0YS5NbyA9IHsgLi4ubW8sICRUeXBlRGVmSWQ6IHR5cGVkZWYgfTtcbiAgICBpZiAocmV3cml0ZUxheW91dCkge1xuICAgICAgICBuZXdGb3JtU2V0dGluZ3MuVmlldy5MYXlvdXQ5NCA9IGdldExheW91dDk0T2JqZWN0SW5mbygpO1xuICAgICAgICBuZXdGb3JtU2V0dGluZ3MuVmlldy5MYXlvdXQ5NC5pdGVtc1swXS5pdGVtcy5wdXNoKFxuICAgICAgICAgICAgLi4ubmV3Rm9ybVNldHRpbmdzLlZpZXcuQ29udHJvbEluZm8ubWFwKChjKSA9PlxuICAgICAgICAgICAgICAgIGdldExheW91dENvbnRyb2woYy5Db250cm9sTmFtZSwgYy5Db250cm9sRmllbGRDYXB0aW9uVHJhbnNsYXRlZCwgZmFsc2UpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGZvcm1QYW5lbEN0cmxyID0gbmV3IEJhcnNhQXBpLlVsLkZvcm1QYW5lbEN0cmxyKHtcbiAgICAgICAgU2V0dGluZzogbmV3Rm9ybVNldHRpbmdzLFxuICAgICAgICBSZWxhdGlvbjogcmVsYXRpb24sXG4gICAgICAgIEZlYXR1cmVzOiB7XG4gICAgICAgICAgICBXb3JrZmxvdzogZmFsc2UsXG4gICAgICAgICAgICBUb29sYmFyOiBmYWxzZSxcbiAgICAgICAgICAgIEluZm9CYXI6IGZhbHNlXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZm9ybVBhbmVsQ3RybHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXlvdXRDb250cm9sKFxuICAgIGNvbnRyb2xOYW1lOiBzdHJpbmcsXG4gICAgY29udHJvbENhcHRpb246IHN0cmluZyA9ICcnLFxuICAgIGhpZGU6IGJvb2xlYW4gPSB0cnVlXG4pOiBQYXJ0aWFsPEdlbmVyYWxDb250cm9sSW5mb01vZGVsPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeHR5cGU6ICdMeS5MYXlvdXRDb250cm9sJyxcbiAgICAgICAgVHlwZTogJ0xheW91dENvbnRyb2xJdGVtJyxcbiAgICAgICAgQ29udHJvbElkOiBjb250cm9sTmFtZSxcbiAgICAgICAgSXNWZXJ0aWNhbDogZmFsc2UsXG4gICAgICAgIFRleHRMb2NhdGlvbjogJ1JpZ2h0JyxcbiAgICAgICAgVGV4dFZpc2libGU6IGZhbHNlLFxuICAgICAgICBWaXNpYmxlOiAhaGlkZSxcbiAgICAgICAgaGlkZSxcbiAgICAgICAgVXNlTGF5b3V0SXRlbVRleHRGb3JDb250cm9sOiBmYWxzZSxcbiAgICAgICAgQ2FwdGlvbjogY29udHJvbENhcHRpb24sXG4gICAgICAgIEFjY2Vzc2libGVOYW1lOiAnJyxcbiAgICAgICAgQm91bmRzOiB7IHg6IDAsIHk6IDAsIHdpZHRoOiA0MzIsIGhlaWdodDogMjQgfSxcbiAgICAgICAgTWluU2l6ZTogeyB3aWR0aDogODksIGhlaWdodDogMjQgfSxcbiAgICAgICAgTWF4U2l6ZTogeyB3aWR0aDogMCwgaGVpZ2h0OiAyNCB9LFxuICAgICAgICBDb250cm9sQm91bmRzOiB7IHdpZHRoOiAzODgsIGhlaWdodDogMjAgfSxcbiAgICAgICAgQ29udHJvbE1pblNpemU6IHsgd2lkdGg6IDQ1LCBoZWlnaHQ6IDIwIH0sXG4gICAgICAgIENvbnRyb2xNYXhTaXplOiB7IHdpZHRoOiAwLCBoZWlnaHQ6IDIwIH0sXG4gICAgICAgIFBhZGRpbmc6IFsyLCAyLCAyLCAyXSxcbiAgICAgICAgTGFiZWxTaXplOiB7IHdpZHRoOiAzNSwgaGVpZ2h0OiAxMyB9LFxuICAgICAgICBvcmlnaW5hbFh0eXBlOiAnJ1xuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250cm9sTGlzdChcbiAgICBtbzogTWV0YW9iamVjdERhdGFNb2RlbCxcbiAgICBjb250cm9sRGJOYW1lczogc3RyaW5nW10sXG4gICAgaXNTZWFyY2hQYW5lbDogYm9vbGVhbixcbiAgICBpc0dyaWRFZGl0b3I6IGJvb2xlYW5cbik6IFByb21pc2U8R2VuZXJhbENvbnRyb2xJbmZvTW9kZWxbXT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxHZW5lcmFsQ29udHJvbEluZm9Nb2RlbFtdPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIEJhcnNhQXBpLkNvbW1vbi5BamF4LkdldFNlcnZlckRhdGEoXG4gICAgICAgICAgICAnRm9ybTk0LkdldENvbnRyb2xJbmZvcycsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udHJvbEluZm9QYXJhbWV0ZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgRmllbGREYk5hbWVzOiBjb250cm9sRGJOYW1lcyxcbiAgICAgICAgICAgICAgICAgICAgTW86IG5ldyBCYXJzYUFwaS5Db21tb24uTWV0YU9iamVjdFdlYihtbyksXG4gICAgICAgICAgICAgICAgICAgIElzU2VhcmNoUGFuZWw6IGlzU2VhcmNoUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgIElzR3JpZEVkaXRvcjogaXNHcmlkRWRpdG9yXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChtKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShtKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCB0eXBlIE56U2FmZUFueSA9IGFueTtcbmV4cG9ydCB0eXBlIE51bWJlcklucHV0ID0gbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbDtcbmV4cG9ydCBpbnRlcmZhY2UgTmdTdHlsZUludGVyZmFjZSB7XG4gICAgW2tsYXNzOiBzdHJpbmddOiBOelNhZmVBbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXhhYmxlT2JqZWN0IHtcbiAgICBba2V5OiBzdHJpbmddOiBOelNhZmVBbnk7XG59XG5leHBvcnQgZnVuY3Rpb24gc2hhbGxvd0VxdWFsKG9iakE/OiBJbmRleGFibGVPYmplY3QsIG9iakI/OiBJbmRleGFibGVPYmplY3QpOiBib29sZWFuIHtcbiAgICBpZiAob2JqQSA9PT0gb2JqQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iakEgIT09ICdvYmplY3QnIHx8ICFvYmpBIHx8IHR5cGVvZiBvYmpCICE9PSAnb2JqZWN0JyB8fCAhb2JqQikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3Qga2V5c0EgPSBPYmplY3Qua2V5cyhvYmpBKTtcbiAgICBjb25zdCBrZXlzQiA9IE9iamVjdC5rZXlzKG9iakIpO1xuXG4gICAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBiSGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmJpbmQob2JqQik7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3ByZWZlci1mb3Itb2ZcbiAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBrZXlzQS5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNBW2lkeF07XG4gICAgICAgIGlmICghYkhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob2JqQVtrZXldICE9PSBvYmpCW2tleV0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlOiBudW1iZXIgfCBzdHJpbmcpOiBudW1iZXI7XG5leHBvcnQgZnVuY3Rpb24gdG9OdW1iZXI8RD4odmFsdWU6IG51bWJlciB8IHN0cmluZywgZmFsbGJhY2s6IEQpOiBudW1iZXIgfCBEO1xuZXhwb3J0IGZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlOiBudW1iZXIgfCBzdHJpbmcsIGZhbGxiYWNrVmFsdWU6IG51bWJlciA9IDApOiBudW1iZXIge1xuICAgIHJldHVybiBfaXNOdW1iZXJWYWx1ZSh2YWx1ZSkgPyBOdW1iZXIodmFsdWUpIDogZmFsbGJhY2tWYWx1ZTtcbn1cbmZ1bmN0aW9uIHByb3BEZWNvcmF0b3JGYWN0b3J5PFQsIEQ+KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBmYWxsYmFjazogKHY6IFQpID0+IERcbik6ICh0YXJnZXQ6IE56U2FmZUFueSwgcHJvcE5hbWU6IHN0cmluZykgPT4gdm9pZCB7XG4gICAgZnVuY3Rpb24gcHJvcERlY29yYXRvcihcbiAgICAgICAgdGFyZ2V0OiBOelNhZmVBbnksXG4gICAgICAgIHByb3BOYW1lOiBzdHJpbmcsXG4gICAgICAgIG9yaWdpbmFsRGVzY3JpcHRvcj86IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPE56U2FmZUFueT5cbiAgICApOiBOelNhZmVBbnkge1xuICAgICAgICBjb25zdCBwcml2YXRlUHJvcE5hbWUgPSBgJCRfX3pvcnJvUHJvcERlY29yYXRvcl9fJHtwcm9wTmFtZX1gO1xuXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCBwcml2YXRlUHJvcE5hbWUpKSB7XG4gICAgICAgICAgICAvLyB3YXJuKGBUaGUgcHJvcCBcIiR7cHJpdmF0ZVByb3BOYW1lfVwiIGlzIGFscmVhZHkgZXhpc3QsIGl0IHdpbGwgYmUgb3ZlcnJpZGVkIGJ5ICR7bmFtZX0gZGVjb3JhdG9yLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJpdmF0ZVByb3BOYW1lLCB7XG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZ2V0KCk6IHN0cmluZyB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsRGVzY3JpcHRvciAmJiBvcmlnaW5hbERlc2NyaXB0b3IuZ2V0XG4gICAgICAgICAgICAgICAgICAgID8gb3JpZ2luYWxEZXNjcmlwdG9yLmdldC5iaW5kKHRoaXMpKClcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzW3ByaXZhdGVQcm9wTmFtZV07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0KHZhbHVlOiBUKTogdm9pZCB7XG4gICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsRGVzY3JpcHRvciAmJiBvcmlnaW5hbERlc2NyaXB0b3Iuc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRGVzY3JpcHRvci5zZXQuYmluZCh0aGlzKShmYWxsYmFjayh2YWx1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzW3ByaXZhdGVQcm9wTmFtZV0gPSBmYWxsYmFjayh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BEZWNvcmF0b3I7XG59XG5leHBvcnQgZnVuY3Rpb24gSW5wdXROdW1iZXIoZmFsbGJhY2tWYWx1ZT86IE56U2FmZUFueSk6IE56U2FmZUFueSB7XG4gICAgcmV0dXJuIHByb3BEZWNvcmF0b3JGYWN0b3J5KCdJbnB1dE51bWJlcicsICh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiB0b051bWJlcih2YWx1ZSwgZmFsbGJhY2tWYWx1ZSkpO1xufVxuZXhwb3J0IGVudW0gQWZmaXhSZXNwb25kRXZlbnRzIHtcbiAgICByZXNpemUgPSAncmVzaXplJyxcbiAgICBzY3JvbGwgPSAnc2Nyb2xsJyxcbiAgICB0b3VjaHN0YXJ0ID0gJ3RvdWNoc3RhcnQnLFxuICAgIHRvdWNobW92ZSA9ICd0b3VjaG1vdmUnLFxuICAgIHRvdWNoZW5kID0gJ3RvdWNoZW5kJyxcbiAgICBwYWdlc2hvdyA9ICdwYWdlc2hvdycsXG4gICAgbG9hZCA9ICdMT0FEJ1xufVxuZXhwb3J0IGludGVyZmFjZSBTaW1wbGVSZWN0IHtcbiAgICB0b3A6IG51bWJlcjtcbiAgICBsZWZ0OiBudW1iZXI7XG4gICAgd2lkdGg/OiBudW1iZXI7XG4gICAgaGVpZ2h0PzogbnVtYmVyO1xuICAgIGJvdHRvbT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGFyZ2V0V2luZG93KHRhcmdldDogRWxlbWVudCB8IFdpbmRvdyk6IHRhcmdldCBpcyBXaW5kb3cge1xuICAgIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0YXJnZXQgPT09IHdpbmRvdztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhcmdldFJlY3QodGFyZ2V0OiBFbGVtZW50IHwgV2luZG93KTogU2ltcGxlUmVjdCB7XG4gICAgcmV0dXJuICFpc1RhcmdldFdpbmRvdyh0YXJnZXQpXG4gICAgICAgID8gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgIDoge1xuICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgIGJvdHRvbTogMFxuICAgICAgICAgIH07XG59XG4vKiBlc2xpbnQtZGlzYWJsZSBuby1pbnZhbGlkLXRoaXMgKi9cbmV4cG9ydCBjb25zdCBhdmFpbGFibGVQcmVmaXhlcyA9IFsnbW96JywgJ21zJywgJ3dlYmtpdCddO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVxdWVzdEFuaW1hdGlvbkZyYW1lUG9seWZpbGwoKTogdHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSB7XG4gICAgbGV0IGxhc3RUaW1lID0gMDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrOiBGcmFtZVJlcXVlc3RDYWxsYmFjayk6IGFueSB7XG4gICAgICAgIGNvbnN0IGN1cnJUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIGNvbnN0IHRpbWVUb0NhbGwgPSBNYXRoLm1heCgwLCAxNiAtIChjdXJyVGltZSAtIGxhc3RUaW1lKSk7XG4gICAgICAgIGNvbnN0IGlkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjayhjdXJyVGltZSArIHRpbWVUb0NhbGwpO1xuICAgICAgICB9LCB0aW1lVG9DYWxsKTtcbiAgICAgICAgbGFzdFRpbWUgPSBjdXJyVGltZSArIHRpbWVUb0NhbGw7XG4gICAgICAgIHJldHVybiBpZDtcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKCk6IHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gKCkgPT4gMDtcbiAgICB9XG4gICAgaWYgKHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNDQ2NVxuICAgICAgICByZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJlZml4ID0gYXZhaWxhYmxlUHJlZml4ZXMuZmlsdGVyKChrZXkpID0+IGAke2tleX1SZXF1ZXN0QW5pbWF0aW9uRnJhbWVgIGluIHdpbmRvdylbMF07XG5cbiAgICByZXR1cm4gcHJlZml4ID8gKHdpbmRvdyBhcyBOelNhZmVBbnkpW2Ake3ByZWZpeH1SZXF1ZXN0QW5pbWF0aW9uRnJhbWVgXSA6IHJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gY2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lKGlkOiBudW1iZXIpOiBOelNhZmVBbnkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSkge1xuICAgICAgICByZXR1cm4gd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKTtcbiAgICB9XG4gICAgY29uc3QgcHJlZml4ID0gYXZhaWxhYmxlUHJlZml4ZXMuZmlsdGVyKFxuICAgICAgICAoa2V5KSA9PiBgJHtrZXl9Q2FuY2VsQW5pbWF0aW9uRnJhbWVgIGluIHdpbmRvdyB8fCBgJHtrZXl9Q2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lYCBpbiB3aW5kb3dcbiAgICApWzBdO1xuXG4gICAgcmV0dXJuIHByZWZpeFxuICAgICAgICA/IChcbiAgICAgICAgICAgICAgKHdpbmRvdyBhcyBOelNhZmVBbnkpW2Ake3ByZWZpeH1DYW5jZWxBbmltYXRpb25GcmFtZWBdIHx8XG4gICAgICAgICAgICAgICh3aW5kb3cgYXMgTnpTYWZlQW55KVtgJHtwcmVmaXh9Q2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lYF1cbiAgICAgICAgICApXG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgLmNhbGwodGhpcywgaWQpXG4gICAgICAgIDogY2xlYXJUaW1lb3V0KGlkKTtcbn1cblxuZXhwb3J0IHR5cGUgRWFzeWluZ0ZuID0gKHQ6IG51bWJlciwgYjogbnVtYmVyLCBjOiBudW1iZXIsIGQ6IG51bWJlcikgPT4gbnVtYmVyO1xuXG5leHBvcnQgZnVuY3Rpb24gZWFzZUluT3V0Q3ViaWModDogbnVtYmVyLCBiOiBudW1iZXIsIGM6IG51bWJlciwgZDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBjYyA9IGMgLSBiO1xuICAgIGxldCB0dCA9IHQgLyAoZCAvIDIpO1xuICAgIGlmICh0dCA8IDEpIHtcbiAgICAgICAgcmV0dXJuIChjYyAvIDIpICogdHQgKiB0dCAqIHR0ICsgYjtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKGNjIC8gMikgKiAoKHR0IC09IDIpICogdHQgKiB0dCArIDIpICsgYjtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTnpTY3JvbGxUb09wdGlvbnMge1xuICAgIC8qKiBBbmltYXRpb24gZHVyYXRpb24sIGRlZmF1bHQgYXMgNDUwICovXG4gICAgZHVyYXRpb24/OiBudW1iZXI7XG4gICAgLyoqIFNjcm9sbCBjb250YWluZXIsIGRlZmF1bHQgYXMgd2luZG93ICovXG4gICAgZWFzaW5nPzogRWFzeWluZ0ZuO1xuICAgIC8qKiBTY3JvbGwgZW5kIGNhbGxiYWNrICovXG4gICAgY2FsbGJhY2s/KCk6IHZvaWQ7XG59XG4iXX0=
@@ -0,0 +1,76 @@
1
+ import { ChangeDetectionStrategy, Component, Optional, Self, ViewChild, ViewContainerRef } from '@angular/core';
2
+ import { BarsaApi } from './abstract-classes/barsa-api';
3
+ import { BaseComponent } from './base.component';
4
+ import { getUniqueId } from './constants';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/router";
7
+ import * as i2 from "./services/portal.service";
8
+ import * as i3 from "./services/barsa-dialog.service";
9
+ import * as i4 from "./services/container.service";
10
+ export class ContainerComponent extends BaseComponent {
11
+ constructor(_el, _activatedRoute, _portalService, _vcr, _dialogService, _injector, _router, _cdr, _containerService) {
12
+ super();
13
+ this._el = _el;
14
+ this._activatedRoute = _activatedRoute;
15
+ this._portalService = _portalService;
16
+ this._vcr = _vcr;
17
+ this._dialogService = _dialogService;
18
+ this._injector = _injector;
19
+ this._router = _router;
20
+ this._cdr = _cdr;
21
+ this._containerService = _containerService;
22
+ this.id = getUniqueId(6);
23
+ this.oldContainerContainer = this._dialogService.containerComponent;
24
+ this._dialogService.containerComponent = this;
25
+ }
26
+ get injector() {
27
+ return this._injector;
28
+ }
29
+ get cdr() {
30
+ return this._cdr;
31
+ }
32
+ get vcr() {
33
+ return this.containerRef;
34
+ }
35
+ ngOnInit() {
36
+ this.parentContainer = BarsaApi.Ul.ApplicationCtrlr.CurrentSystemAdapter;
37
+ BarsaApi.Ul.ApplicationCtrlr.CurrentSystemAdapter = this;
38
+ super.ngOnInit();
39
+ if (this._containerService) {
40
+ this._containerService.setViewContainerRef(this.containerRef);
41
+ }
42
+ }
43
+ ngOnDestroy() {
44
+ BarsaApi.Ul.ApplicationCtrlr.CurrentSystemAdapter = this.parentContainer;
45
+ super.ngOnDestroy();
46
+ this._dialogService.containerComponent = this.oldContainerContainer;
47
+ }
48
+ detach() {
49
+ this._viewRef = this.containerRef.detach();
50
+ this._cdr.detectChanges();
51
+ }
52
+ reAttach() {
53
+ if (this._viewRef) {
54
+ this.containerRef.insert(this._viewRef);
55
+ this._cdr.detectChanges();
56
+ }
57
+ }
58
+ }
59
+ ContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ContainerComponent, deps: [{ token: i0.ElementRef }, { token: i1.ActivatedRoute }, { token: i2.PortalService }, { token: i0.ViewContainerRef }, { token: i3.BarsaDialogService }, { token: i0.Injector }, { token: i1.Router }, { token: i0.ChangeDetectorRef }, { token: i4.ContainerService, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
60
+ ContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: ContainerComponent, selector: "bnrc-container", viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["containerRef"], descendants: true, read: ViewContainerRef, static: true }], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
61
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ContainerComponent, decorators: [{
62
+ type: Component,
63
+ args: [{
64
+ selector: 'bnrc-container',
65
+ template: '',
66
+ changeDetection: ChangeDetectionStrategy.OnPush
67
+ }]
68
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.ActivatedRoute }, { type: i2.PortalService }, { type: i0.ViewContainerRef }, { type: i3.BarsaDialogService }, { type: i0.Injector }, { type: i1.Router }, { type: i0.ChangeDetectorRef }, { type: i4.ContainerService, decorators: [{
69
+ type: Self
70
+ }, {
71
+ type: Optional
72
+ }] }]; }, propDecorators: { containerRef: [{
73
+ type: ViewChild,
74
+ args: ['containerRef', { static: true, read: ViewContainerRef }]
75
+ }] } });
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLW5vdmluLXJheS1jb3JlL3NyYy9saWIvY29udGFpbmVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBRXZCLFNBQVMsRUFLVCxRQUFRLEVBQ1IsSUFBSSxFQUNKLFNBQVMsRUFDVCxnQkFBZ0IsRUFFbkIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDOzs7Ozs7QUFTMUMsTUFBTSxPQUFnQixrQkFBbUIsU0FBUSxhQUFhO0lBUTFELFlBQ2MsR0FBZSxFQUNmLGVBQStCLEVBQy9CLGNBQTZCLEVBQzdCLElBQXNCLEVBQ3RCLGNBQWtDLEVBQ2xDLFNBQW1CLEVBQ25CLE9BQWUsRUFDZixJQUF1QixFQUNILGlCQUFtQztRQUVqRSxLQUFLLEVBQUUsQ0FBQztRQVZFLFFBQUcsR0FBSCxHQUFHLENBQVk7UUFDZixvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFDL0IsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDN0IsU0FBSSxHQUFKLElBQUksQ0FBa0I7UUFDdEIsbUJBQWMsR0FBZCxjQUFjLENBQW9CO1FBQ2xDLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFDbkIsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLFNBQUksR0FBSixJQUFJLENBQW1CO1FBQ0gsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQVo5RCxPQUFFLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBZXZCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDO1FBQ3BFLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO0lBQ2xELENBQUM7SUFDRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUNELElBQUksR0FBRztRQUNILE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNyQixDQUFDO0lBQ0QsSUFBSSxHQUFHO1FBQ0gsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzdCLENBQUM7SUFDRCxRQUFRO1FBQ0osSUFBSSxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDO1FBQ3pFLFFBQVEsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1FBQ3pELEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ2pFO0lBQ0wsQ0FBQztJQUNELFdBQVc7UUFDUCxRQUFRLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDekUsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO0lBQ3hFLENBQUM7SUFDRCxNQUFNO1FBQ0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUNELFFBQVE7UUFDSixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUM3QjtJQUNMLENBQUM7OytHQXREaUIsa0JBQWtCO21HQUFsQixrQkFBa0IsK0lBQ2EsZ0JBQWdCLGtFQUp2RCxFQUFFOzJGQUdNLGtCQUFrQjtrQkFMdkMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixRQUFRLEVBQUUsRUFBRTtvQkFDWixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDbEQ7OzBCQWtCUSxJQUFJOzswQkFBSSxRQUFROzRDQWZyQixZQUFZO3NCQURYLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5qZWN0b3IsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBTZWxmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIFZpZXdSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEJhcnNhQXBpIH0gZnJvbSAnLi9hYnN0cmFjdC1jbGFzc2VzL2JhcnNhLWFwaSc7XG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBnZXRVbmlxdWVJZCB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IEJhcnNhRGlhbG9nU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvYmFyc2EtZGlhbG9nLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29udGFpbmVyU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvY29udGFpbmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9ydGFsU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvcG9ydGFsLnNlcnZpY2UnO1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdibnJjLWNvbnRhaW5lcicsXG4gICAgdGVtcGxhdGU6ICcnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbnRhaW5lckNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgQFZpZXdDaGlsZCgnY29udGFpbmVyUmVmJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSlcbiAgICBjb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWY7XG4gICAgb2xkQ29udGFpbmVyQ29udGFpbmVyOiBDb250YWluZXJDb21wb25lbnQ7XG4gICAgcGFyZW50Q29udGFpbmVyOiBhbnk7XG4gICAgcHVibGljIGlkID0gZ2V0VW5pcXVlSWQoNik7XG4gICAgcHJpdmF0ZSBfdmlld1JlZjogVmlld1JlZiB8IG51bGw7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIF9lbDogRWxlbWVudFJlZixcbiAgICAgICAgcHJvdGVjdGVkIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHByb3RlY3RlZCBfcG9ydGFsU2VydmljZTogUG9ydGFsU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIF92Y3I6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIHByb3RlY3RlZCBfZGlhbG9nU2VydmljZTogQmFyc2FEaWFsb2dTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJvdGVjdGVkIF9yb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJvdGVjdGVkIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBAU2VsZigpIEBPcHRpb25hbCgpIHByb3RlY3RlZCBfY29udGFpbmVyU2VydmljZTogQ29udGFpbmVyU2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLm9sZENvbnRhaW5lckNvbnRhaW5lciA9IHRoaXMuX2RpYWxvZ1NlcnZpY2UuY29udGFpbmVyQ29tcG9uZW50O1xuICAgICAgICB0aGlzLl9kaWFsb2dTZXJ2aWNlLmNvbnRhaW5lckNvbXBvbmVudCA9IHRoaXM7XG4gICAgfVxuICAgIGdldCBpbmplY3RvcigpOiBJbmplY3RvciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmplY3RvcjtcbiAgICB9XG4gICAgZ2V0IGNkcigpOiBDaGFuZ2VEZXRlY3RvclJlZiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jZHI7XG4gICAgfVxuICAgIGdldCB2Y3IoKTogVmlld0NvbnRhaW5lclJlZiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lclJlZjtcbiAgICB9XG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGFyZW50Q29udGFpbmVyID0gQmFyc2FBcGkuVWwuQXBwbGljYXRpb25DdHJsci5DdXJyZW50U3lzdGVtQWRhcHRlcjtcbiAgICAgICAgQmFyc2FBcGkuVWwuQXBwbGljYXRpb25DdHJsci5DdXJyZW50U3lzdGVtQWRhcHRlciA9IHRoaXM7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIGlmICh0aGlzLl9jb250YWluZXJTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXJTZXJ2aWNlLnNldFZpZXdDb250YWluZXJSZWYodGhpcy5jb250YWluZXJSZWYpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBCYXJzYUFwaS5VbC5BcHBsaWNhdGlvbkN0cmxyLkN1cnJlbnRTeXN0ZW1BZGFwdGVyID0gdGhpcy5wYXJlbnRDb250YWluZXI7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgICAgIHRoaXMuX2RpYWxvZ1NlcnZpY2UuY29udGFpbmVyQ29tcG9uZW50ID0gdGhpcy5vbGRDb250YWluZXJDb250YWluZXI7XG4gICAgfVxuICAgIGRldGFjaCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdmlld1JlZiA9IHRoaXMuY29udGFpbmVyUmVmLmRldGFjaCgpO1xuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgICByZUF0dGFjaCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX3ZpZXdSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyUmVmLmluc2VydCh0aGlzLl92aWV3UmVmKTtcbiAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=