@wavemaker/app-ng-runtime 11.14.1-rc.6310 → 11.14.2-1.245

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 (412) hide show
  1. package/components/advanced/carousel/bundles/index.umd.js +15 -1
  2. package/components/advanced/carousel/carousel.directive.d.ts +1 -0
  3. package/components/advanced/carousel/esm2022/carousel.directive.mjs +16 -2
  4. package/components/advanced/carousel/fesm2022/index.mjs +15 -1
  5. package/components/advanced/carousel/fesm2022/index.mjs.map +1 -1
  6. package/components/advanced/login/bundles/index.umd.js +24 -3
  7. package/components/advanced/login/esm2022/login.component.mjs +25 -4
  8. package/components/advanced/login/fesm2022/index.mjs +24 -3
  9. package/components/advanced/login/fesm2022/index.mjs.map +1 -1
  10. package/components/advanced/login/login.component.d.ts +5 -2
  11. package/components/base/bundles/index.umd.js +331 -36
  12. package/components/base/directives/show-in-device.directive.d.ts +2 -1
  13. package/components/base/esm2022/directives/show-in-device.directive.mjs +22 -4
  14. package/components/base/esm2022/pipes/custom-pipes.mjs +10 -10
  15. package/components/base/esm2022/utils/widget-utils.mjs +3 -3
  16. package/components/base/esm2022/widgets/common/base/base-container.component.mjs +27 -1
  17. package/components/base/esm2022/widgets/common/base/base-field-validations.mjs +18 -1
  18. package/components/base/esm2022/widgets/common/base/base.component.mjs +68 -7
  19. package/components/base/esm2022/widgets/common/base/custom-widget-container.directive.mjs +9 -1
  20. package/components/base/esm2022/widgets/common/base/dataset-aware-nav.component.mjs +44 -11
  21. package/components/base/esm2022/widgets/common/base/partial-container.directive.mjs +20 -1
  22. package/components/base/esm2022/widgets/common/item-template/item-template.directive.mjs +26 -1
  23. package/components/base/esm2022/widgets/common/lazy-load/lazy-load.directive.mjs +44 -4
  24. package/components/base/esm2022/widgets/common/partial-param/partial-param.directive.mjs +16 -1
  25. package/components/base/esm2022/widgets/common/pull-to-refresh/pull-to-refresh.mjs +22 -1
  26. package/components/base/esm2022/widgets/framework/property-change-handler.mjs +7 -2
  27. package/components/base/esm2022/widgets/framework/widget-proxy-provider.mjs +5 -3
  28. package/components/base/esm2022/widgets/framework/widget-registry.mjs +6 -3
  29. package/components/base/fesm2022/index.mjs +327 -34
  30. package/components/base/fesm2022/index.mjs.map +1 -1
  31. package/components/base/pipes/custom-pipes.d.ts +5 -5
  32. package/components/base/widgets/common/base/base-container.component.d.ts +3 -2
  33. package/components/base/widgets/common/base/base-field-validations.d.ts +1 -0
  34. package/components/base/widgets/common/base/custom-widget-container.directive.d.ts +3 -2
  35. package/components/base/widgets/common/base/dataset-aware-nav.component.d.ts +6 -2
  36. package/components/base/widgets/common/base/partial-container.directive.d.ts +3 -2
  37. package/components/base/widgets/common/item-template/item-template.directive.d.ts +3 -2
  38. package/components/base/widgets/common/lazy-load/lazy-load.directive.d.ts +1 -1
  39. package/components/base/widgets/common/partial-param/partial-param.directive.d.ts +3 -2
  40. package/components/base/widgets/common/pull-to-refresh/pull-to-refresh.d.ts +3 -2
  41. package/components/basic/anchor/bundles/index.umd.js +13 -1
  42. package/components/basic/anchor/esm2022/anchor.component.mjs +14 -2
  43. package/components/basic/anchor/fesm2022/index.mjs +13 -1
  44. package/components/basic/anchor/fesm2022/index.mjs.map +1 -1
  45. package/components/basic/html/bundles/index.umd.js +13 -1
  46. package/components/basic/html/esm2022/html.directive.mjs +14 -2
  47. package/components/basic/html/fesm2022/index.mjs +13 -1
  48. package/components/basic/html/fesm2022/index.mjs.map +1 -1
  49. package/components/basic/label/bundles/index.umd.js +17 -1
  50. package/components/basic/label/esm2022/label.directive.mjs +18 -2
  51. package/components/basic/label/fesm2022/index.mjs +17 -1
  52. package/components/basic/label/fesm2022/index.mjs.map +1 -1
  53. package/components/basic/label/label.directive.d.ts +3 -2
  54. package/components/basic/progress/progress-circle/bundles/index.umd.js +10 -0
  55. package/components/basic/progress/progress-circle/esm2022/progress-circle.component.mjs +11 -1
  56. package/components/basic/progress/progress-circle/fesm2022/index.mjs +10 -0
  57. package/components/basic/progress/progress-circle/fesm2022/index.mjs.map +1 -1
  58. package/components/basic/progress/progress-circle/progress-circle.component.d.ts +3 -2
  59. package/components/basic/search/bundles/index.umd.js +42 -14
  60. package/components/basic/search/esm2022/scrollable.directive.mjs +13 -4
  61. package/components/basic/search/esm2022/search.component.mjs +31 -12
  62. package/components/basic/search/fesm2022/index.mjs +42 -14
  63. package/components/basic/search/fesm2022/index.mjs.map +1 -1
  64. package/components/basic/search/scrollable.directive.d.ts +5 -3
  65. package/components/basic/search/search.component.d.ts +3 -2
  66. package/components/basic/spinner/bundles/index.umd.js +9 -1
  67. package/components/basic/spinner/esm2022/spinner.component.mjs +10 -2
  68. package/components/basic/spinner/fesm2022/index.mjs +9 -1
  69. package/components/basic/spinner/fesm2022/index.mjs.map +1 -1
  70. package/components/basic/spinner/spinner.component.d.ts +4 -2
  71. package/components/chart/bundles/index.umd.js +21 -3
  72. package/components/chart/esm2022/chart.component.mjs +22 -4
  73. package/components/chart/fesm2022/index.mjs +21 -3
  74. package/components/chart/fesm2022/index.mjs.map +1 -1
  75. package/components/containers/accordion/accordion-pane/accordion-pane.component.d.ts +3 -2
  76. package/components/containers/accordion/accordion.directive.d.ts +5 -2
  77. package/components/containers/accordion/bundles/index.umd.js +49 -2
  78. package/components/containers/accordion/esm2022/accordion-pane/accordion-pane.component.mjs +10 -1
  79. package/components/containers/accordion/esm2022/accordion.directive.mjs +41 -3
  80. package/components/containers/accordion/fesm2022/index.mjs +49 -2
  81. package/components/containers/accordion/fesm2022/index.mjs.map +1 -1
  82. package/components/containers/panel/bundles/index.umd.js +13 -0
  83. package/components/containers/panel/esm2022/panel.component.mjs +14 -1
  84. package/components/containers/panel/fesm2022/index.mjs +13 -0
  85. package/components/containers/panel/fesm2022/index.mjs.map +1 -1
  86. package/components/containers/panel/panel.component.d.ts +3 -2
  87. package/components/containers/tabs/bundles/index.umd.js +54 -2
  88. package/components/containers/tabs/esm2022/tab-pane/tab-pane.component.mjs +10 -1
  89. package/components/containers/tabs/esm2022/tabs.component.mjs +46 -3
  90. package/components/containers/tabs/fesm2022/index.mjs +54 -2
  91. package/components/containers/tabs/fesm2022/index.mjs.map +1 -1
  92. package/components/containers/tabs/tab-pane/tab-pane.component.d.ts +3 -2
  93. package/components/containers/tabs/tabs.component.d.ts +5 -2
  94. package/components/containers/wizard/bundles/index.umd.js +47 -3
  95. package/components/containers/wizard/esm2022/wizard-step/wizard-step.component.mjs +16 -3
  96. package/components/containers/wizard/esm2022/wizard.component.mjs +33 -2
  97. package/components/containers/wizard/fesm2022/index.mjs +47 -3
  98. package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
  99. package/components/containers/wizard/wizard-step/wizard-step.component.d.ts +3 -2
  100. package/components/containers/wizard/wizard.component.d.ts +4 -2
  101. package/components/data/card/bundles/index.umd.js +17 -1
  102. package/components/data/card/card-content/card-content.component.d.ts +3 -2
  103. package/components/data/card/card.component.d.ts +4 -2
  104. package/components/data/card/esm2022/card-content/card-content.component.mjs +6 -1
  105. package/components/data/card/esm2022/card.component.mjs +13 -2
  106. package/components/data/card/fesm2022/index.mjs +17 -1
  107. package/components/data/card/fesm2022/index.mjs.map +1 -1
  108. package/components/data/form/bundles/index.umd.js +92 -0
  109. package/components/data/form/esm2022/form-action/form-action.directive.mjs +7 -1
  110. package/components/data/form/esm2022/form-field/form-field.directive.mjs +28 -1
  111. package/components/data/form/esm2022/form-widget.directive.mjs +8 -1
  112. package/components/data/form/esm2022/form.component.mjs +27 -1
  113. package/components/data/form/esm2022/live-actions/live-actions.directive.mjs +7 -1
  114. package/components/data/form/esm2022/live-filter/live-filter.directive.mjs +12 -1
  115. package/components/data/form/esm2022/live-form/live-form.directive.mjs +10 -1
  116. package/components/data/form/fesm2022/index.mjs +92 -0
  117. package/components/data/form/fesm2022/index.mjs.map +1 -1
  118. package/components/data/form/form-action/form-action.directive.d.ts +3 -2
  119. package/components/data/form/form-field/form-field.directive.d.ts +3 -2
  120. package/components/data/form/form-widget.directive.d.ts +3 -2
  121. package/components/data/form/live-actions/live-actions.directive.d.ts +3 -1
  122. package/components/data/form/live-filter/live-filter.directive.d.ts +3 -1
  123. package/components/data/form/live-form/live-form.directive.d.ts +3 -1
  124. package/components/data/list/bundles/index.umd.js +213 -19
  125. package/components/data/list/esm2022/list-item.directive.mjs +95 -11
  126. package/components/data/list/esm2022/list.component.mjs +120 -10
  127. package/components/data/list/fesm2022/index.mjs +213 -19
  128. package/components/data/list/fesm2022/index.mjs.map +1 -1
  129. package/components/data/list/list-item.directive.d.ts +7 -2
  130. package/components/data/list/list.component.d.ts +7 -0
  131. package/components/data/live-table/bundles/index.umd.js +13 -1
  132. package/components/data/live-table/esm2022/live-table.component.mjs +14 -2
  133. package/components/data/live-table/fesm2022/index.mjs +13 -1
  134. package/components/data/live-table/fesm2022/index.mjs.map +1 -1
  135. package/components/data/live-table/live-table.component.d.ts +4 -2
  136. package/components/data/pagination/bundles/index.umd.js +57 -4
  137. package/components/data/pagination/esm2022/pagination.component.mjs +58 -5
  138. package/components/data/pagination/fesm2022/index.mjs +57 -4
  139. package/components/data/pagination/fesm2022/index.mjs.map +1 -1
  140. package/components/data/pagination/pagination.component.d.ts +4 -2
  141. package/components/data/table/bundles/index.umd.js +345 -15
  142. package/components/data/table/esm2022/table-action/table-action.directive.mjs +8 -1
  143. package/components/data/table/esm2022/table-column/table-column.directive.mjs +107 -3
  144. package/components/data/table/esm2022/table-column-group/table-column-group.directive.mjs +9 -1
  145. package/components/data/table/esm2022/table-cud.directive.mjs +8 -2
  146. package/components/data/table/esm2022/table-filter.directive.mjs +12 -2
  147. package/components/data/table/esm2022/table-row/table-row.directive.mjs +8 -1
  148. package/components/data/table/esm2022/table-row-action/table-row-action.directive.mjs +8 -1
  149. package/components/data/table/esm2022/table.component.mjs +193 -12
  150. package/components/data/table/fesm2022/index.mjs +345 -15
  151. package/components/data/table/fesm2022/index.mjs.map +1 -1
  152. package/components/data/table/table-action/table-action.directive.d.ts +3 -2
  153. package/components/data/table/table-column/table-column.directive.d.ts +3 -2
  154. package/components/data/table/table-column-group/table-column-group.directive.d.ts +3 -2
  155. package/components/data/table/table-cud.directive.d.ts +3 -1
  156. package/components/data/table/table-filter.directive.d.ts +3 -1
  157. package/components/data/table/table-row/table-row.directive.d.ts +3 -2
  158. package/components/data/table/table-row-action/table-row-action.directive.d.ts +3 -2
  159. package/components/data/table/table.component.d.ts +6 -2
  160. package/components/dialogs/alert-dialog/alert-dialog.component.d.ts +3 -2
  161. package/components/dialogs/alert-dialog/bundles/index.umd.js +5 -0
  162. package/components/dialogs/alert-dialog/esm2022/alert-dialog.component.mjs +6 -1
  163. package/components/dialogs/alert-dialog/fesm2022/index.mjs +5 -0
  164. package/components/dialogs/alert-dialog/fesm2022/index.mjs.map +1 -1
  165. package/components/dialogs/confirm-dialog/bundles/index.umd.js +5 -0
  166. package/components/dialogs/confirm-dialog/confirm-dialog.component.d.ts +3 -2
  167. package/components/dialogs/confirm-dialog/esm2022/confirm-dialog.component.mjs +6 -1
  168. package/components/dialogs/confirm-dialog/fesm2022/index.mjs +5 -0
  169. package/components/dialogs/confirm-dialog/fesm2022/index.mjs.map +1 -1
  170. package/components/dialogs/default/bundles/index.umd.js +15 -2
  171. package/components/dialogs/default/dialog-body/dialog-body.directive.d.ts +4 -2
  172. package/components/dialogs/default/esm2022/dialog-body/dialog-body.directive.mjs +16 -3
  173. package/components/dialogs/default/fesm2022/index.mjs +15 -2
  174. package/components/dialogs/default/fesm2022/index.mjs.map +1 -1
  175. package/components/dialogs/design-dialog/bundles/index.umd.js +7 -0
  176. package/components/dialogs/design-dialog/dialog.component.d.ts +3 -2
  177. package/components/dialogs/design-dialog/esm2022/dialog.component.mjs +8 -1
  178. package/components/dialogs/design-dialog/fesm2022/index.mjs +7 -0
  179. package/components/dialogs/design-dialog/fesm2022/index.mjs.map +1 -1
  180. package/components/dialogs/iframe-dialog/bundles/index.umd.js +5 -0
  181. package/components/dialogs/iframe-dialog/esm2022/iframe-dialog.component.mjs +6 -1
  182. package/components/dialogs/iframe-dialog/fesm2022/index.mjs +5 -0
  183. package/components/dialogs/iframe-dialog/fesm2022/index.mjs.map +1 -1
  184. package/components/dialogs/iframe-dialog/iframe-dialog.component.d.ts +3 -2
  185. package/components/dialogs/partial-dialog/bundles/index.umd.js +23 -3
  186. package/components/dialogs/partial-dialog/esm2022/partial-dialog.component.mjs +24 -4
  187. package/components/dialogs/partial-dialog/fesm2022/index.mjs +23 -3
  188. package/components/dialogs/partial-dialog/fesm2022/index.mjs.map +1 -1
  189. package/components/dialogs/partial-dialog/partial-dialog.component.d.ts +4 -2
  190. package/components/input/base-form/base-form.component.d.ts +4 -2
  191. package/components/input/base-form/bundles/index.umd.js +16 -2
  192. package/components/input/base-form/esm2022/base-form.component.mjs +17 -3
  193. package/components/input/base-form/fesm2022/index.mjs +16 -2
  194. package/components/input/base-form/fesm2022/index.mjs.map +1 -1
  195. package/components/input/base-form-custom/base-form-custom.component.d.ts +3 -2
  196. package/components/input/base-form-custom/bundles/index.umd.js +13 -2
  197. package/components/input/base-form-custom/esm2022/base-form-custom.component.mjs +14 -3
  198. package/components/input/base-form-custom/fesm2022/index.mjs +13 -2
  199. package/components/input/base-form-custom/fesm2022/index.mjs.map +1 -1
  200. package/components/input/checkbox/bundles/index.umd.js +7 -0
  201. package/components/input/checkbox/checkbox.component.d.ts +3 -2
  202. package/components/input/checkbox/esm2022/checkbox.component.mjs +8 -1
  203. package/components/input/checkbox/fesm2022/index.mjs +7 -0
  204. package/components/input/checkbox/fesm2022/index.mjs.map +1 -1
  205. package/components/input/checkboxset/bundles/index.umd.js +18 -2
  206. package/components/input/checkboxset/checkboxset.component.d.ts +4 -2
  207. package/components/input/checkboxset/esm2022/checkboxset.component.mjs +19 -3
  208. package/components/input/checkboxset/fesm2022/index.mjs +18 -2
  209. package/components/input/checkboxset/fesm2022/index.mjs.map +1 -1
  210. package/components/input/chips/bundles/index.umd.js +45 -5
  211. package/components/input/chips/chips.component.d.ts +3 -2
  212. package/components/input/chips/esm2022/chips.component.mjs +46 -6
  213. package/components/input/chips/fesm2022/index.mjs +45 -5
  214. package/components/input/chips/fesm2022/index.mjs.map +1 -1
  215. package/components/input/color-picker/bundles/index.umd.js +8 -0
  216. package/components/input/color-picker/color-picker.component.d.ts +3 -2
  217. package/components/input/color-picker/esm2022/color-picker.component.mjs +9 -1
  218. package/components/input/color-picker/fesm2022/index.mjs +8 -0
  219. package/components/input/color-picker/fesm2022/index.mjs.map +1 -1
  220. package/components/input/composite/bundles/index.umd.js +10 -1
  221. package/components/input/composite/composite.directive.d.ts +3 -2
  222. package/components/input/composite/esm2022/composite.directive.mjs +11 -2
  223. package/components/input/composite/fesm2022/index.mjs +10 -1
  224. package/components/input/composite/fesm2022/index.mjs.map +1 -1
  225. package/components/input/currency/bundles/index.umd.js +7 -0
  226. package/components/input/currency/currency.component.d.ts +3 -2
  227. package/components/input/currency/esm2022/currency.component.mjs +8 -1
  228. package/components/input/currency/fesm2022/index.mjs +7 -0
  229. package/components/input/currency/fesm2022/index.mjs.map +1 -1
  230. package/components/input/dataset-aware-form/bundles/index.umd.js +26 -2
  231. package/components/input/dataset-aware-form/esm2022/dataset-aware-form.component.mjs +27 -3
  232. package/components/input/dataset-aware-form/fesm2022/index.mjs +26 -2
  233. package/components/input/dataset-aware-form/fesm2022/index.mjs.map +1 -1
  234. package/components/input/epoch/date/bundles/index.umd.js +22 -0
  235. package/components/input/epoch/date/date.component.d.ts +1 -0
  236. package/components/input/epoch/date/esm2022/date.component.mjs +23 -1
  237. package/components/input/epoch/date/fesm2022/index.mjs +22 -0
  238. package/components/input/epoch/date/fesm2022/index.mjs.map +1 -1
  239. package/components/input/file-upload/bundles/index.umd.js +25 -8
  240. package/components/input/file-upload/esm2022/file-upload.component.mjs +26 -9
  241. package/components/input/file-upload/fesm2022/index.mjs +25 -8
  242. package/components/input/file-upload/fesm2022/index.mjs.map +1 -1
  243. package/components/input/file-upload/file-upload.component.d.ts +3 -0
  244. package/components/input/number/bundles/index.umd.js +8 -0
  245. package/components/input/number/esm2022/number.component.mjs +9 -1
  246. package/components/input/number/fesm2022/index.mjs +8 -0
  247. package/components/input/number/fesm2022/index.mjs.map +1 -1
  248. package/components/input/number/number.component.d.ts +3 -2
  249. package/components/input/radioset/bundles/index.umd.js +18 -2
  250. package/components/input/radioset/esm2022/radioset.component.mjs +19 -3
  251. package/components/input/radioset/fesm2022/index.mjs +18 -2
  252. package/components/input/radioset/fesm2022/index.mjs.map +1 -1
  253. package/components/input/radioset/radioset.component.d.ts +4 -2
  254. package/components/input/rating/bundles/index.umd.js +10 -0
  255. package/components/input/rating/esm2022/rating.component.mjs +11 -1
  256. package/components/input/rating/fesm2022/index.mjs +10 -0
  257. package/components/input/rating/fesm2022/index.mjs.map +1 -1
  258. package/components/input/rating/rating.component.d.ts +3 -2
  259. package/components/input/select/bundles/index.umd.js +6 -0
  260. package/components/input/select/esm2022/select.component.mjs +7 -1
  261. package/components/input/select/fesm2022/index.mjs +6 -0
  262. package/components/input/select/fesm2022/index.mjs.map +1 -1
  263. package/components/input/select/select.component.d.ts +3 -2
  264. package/components/input/slider/bundles/index.umd.js +10 -0
  265. package/components/input/slider/esm2022/slider.component.mjs +11 -1
  266. package/components/input/slider/fesm2022/index.mjs +10 -0
  267. package/components/input/slider/fesm2022/index.mjs.map +1 -1
  268. package/components/input/slider/slider.component.d.ts +3 -2
  269. package/components/input/switch/bundles/index.umd.js +22 -2
  270. package/components/input/switch/esm2022/switch.component.mjs +23 -3
  271. package/components/input/switch/fesm2022/index.mjs +22 -2
  272. package/components/input/switch/fesm2022/index.mjs.map +1 -1
  273. package/components/input/switch/switch.component.d.ts +3 -2
  274. package/components/input/text/bundles/index.umd.js +36 -0
  275. package/components/input/text/esm2022/input-calendar/input-calendar.component.mjs +8 -1
  276. package/components/input/text/esm2022/input-color/input-color.component.mjs +8 -1
  277. package/components/input/text/esm2022/input-email/input-email.component.mjs +8 -1
  278. package/components/input/text/esm2022/input-number/input-number.component.mjs +8 -1
  279. package/components/input/text/esm2022/input-text/input-text.component.mjs +9 -1
  280. package/components/input/text/fesm2022/index.mjs +36 -0
  281. package/components/input/text/fesm2022/index.mjs.map +1 -1
  282. package/components/input/text/input-calendar/input-calendar.component.d.ts +3 -2
  283. package/components/input/text/input-color/input-color.component.d.ts +3 -2
  284. package/components/input/text/input-email/input-email.component.d.ts +3 -2
  285. package/components/input/text/input-number/input-number.component.d.ts +3 -2
  286. package/components/input/text/input-text/input-text.component.d.ts +3 -2
  287. package/components/input/textarea/bundles/index.umd.js +7 -0
  288. package/components/input/textarea/esm2022/textarea.component.mjs +8 -1
  289. package/components/input/textarea/fesm2022/index.mjs +7 -0
  290. package/components/input/textarea/fesm2022/index.mjs.map +1 -1
  291. package/components/input/textarea/textarea.component.d.ts +3 -2
  292. package/components/navigation/menu/bundles/index.umd.js +55 -6
  293. package/components/navigation/menu/esm2022/menu-adapator.component.mjs +17 -3
  294. package/components/navigation/menu/esm2022/menu.component.mjs +10 -3
  295. package/components/navigation/menu/esm2022/nav/nav-item/nav-item.directive.mjs +6 -1
  296. package/components/navigation/menu/esm2022/nav/nav.component.mjs +11 -1
  297. package/components/navigation/menu/esm2022/nav/navigation-control.directive.mjs +16 -3
  298. package/components/navigation/menu/fesm2022/index.mjs +55 -6
  299. package/components/navigation/menu/fesm2022/index.mjs.map +1 -1
  300. package/components/navigation/menu/menu-adapator.component.d.ts +4 -2
  301. package/components/navigation/menu/nav/nav-item/nav-item.directive.d.ts +3 -2
  302. package/components/navigation/menu/nav/nav.component.d.ts +3 -2
  303. package/components/navigation/menu/nav/navigation-control.directive.d.ts +4 -2
  304. package/components/navigation/navbar/bundles/index.umd.js +5 -0
  305. package/components/navigation/navbar/esm2022/navbar.component.mjs +6 -1
  306. package/components/navigation/navbar/fesm2022/index.mjs +5 -0
  307. package/components/navigation/navbar/fesm2022/index.mjs.map +1 -1
  308. package/components/navigation/navbar/navbar.component.d.ts +3 -2
  309. package/components/navigation/popover/bundles/index.umd.js +65 -13
  310. package/components/navigation/popover/esm2022/popover.component.mjs +63 -11
  311. package/components/navigation/popover/fesm2022/index.mjs +62 -10
  312. package/components/navigation/popover/fesm2022/index.mjs.map +1 -1
  313. package/components/navigation/popover/popover.component.d.ts +11 -3
  314. package/components/page/default/bundles/index.umd.js +30 -6
  315. package/components/page/default/esm2022/layout.directive.mjs +9 -1
  316. package/components/page/default/esm2022/page-content/page-content.component.mjs +13 -3
  317. package/components/page/default/esm2022/router-outlet.directive.mjs +13 -6
  318. package/components/page/default/fesm2022/index.mjs +30 -6
  319. package/components/page/default/fesm2022/index.mjs.map +1 -1
  320. package/components/page/default/layout.directive.d.ts +3 -2
  321. package/components/page/default/page-content/page-content.component.d.ts +3 -2
  322. package/components/page/default/router-outlet.directive.d.ts +5 -2
  323. package/components/page/left-panel/bundles/index.umd.js +16 -0
  324. package/components/page/left-panel/esm2022/left-panel.directive.mjs +17 -1
  325. package/components/page/left-panel/fesm2022/index.mjs +16 -0
  326. package/components/page/left-panel/fesm2022/index.mjs.map +1 -1
  327. package/components/page/left-panel/left-panel.directive.d.ts +3 -2
  328. package/components/page/top-nav/bundles/index.umd.js +2 -1
  329. package/components/page/top-nav/esm2022/top-nav.props.mjs +3 -2
  330. package/components/page/top-nav/fesm2022/index.mjs +2 -1
  331. package/components/page/top-nav/fesm2022/index.mjs.map +1 -1
  332. package/components/prefab/bundles/index.umd.js +4 -0
  333. package/components/prefab/esm2022/prefab.directive.mjs +5 -1
  334. package/components/prefab/fesm2022/index.mjs +4 -0
  335. package/components/prefab/fesm2022/index.mjs.map +1 -1
  336. package/core/bundles/index.umd.js +391 -94
  337. package/core/esm2022/public_api.mjs +3 -3
  338. package/core/esm2022/services/viewport.service.mjs +24 -10
  339. package/core/esm2022/types/types.mjs +1 -1
  340. package/core/esm2022/utils/dom.mjs +18 -2
  341. package/core/esm2022/utils/event-notifier.mjs +5 -2
  342. package/core/esm2022/utils/lru-cache.mjs +16 -2
  343. package/core/esm2022/utils/utils.mjs +6 -2
  344. package/core/esm2022/utils/watcher.mjs +323 -81
  345. package/core/fesm2022/index.mjs +390 -96
  346. package/core/fesm2022/index.mjs.map +1 -1
  347. package/core/public_api.d.ts +2 -2
  348. package/core/services/viewport.service.d.ts +5 -2
  349. package/core/types/types.d.ts +1 -0
  350. package/core/utils/lru-cache.d.ts +6 -0
  351. package/core/utils/utils.d.ts +1 -0
  352. package/core/utils/watcher.d.ts +26 -5
  353. package/http/bundles/index.umd.js +31 -1
  354. package/http/esm2022/http.service.mjs +32 -2
  355. package/http/fesm2022/index.mjs +31 -1
  356. package/http/fesm2022/index.mjs.map +1 -1
  357. package/http/http.service.d.ts +6 -2
  358. package/npm-shrinkwrap.json +2 -2
  359. package/oAuth/bundles/index.umd.js +9 -0
  360. package/oAuth/esm2022/oAuth.service.mjs +10 -1
  361. package/oAuth/fesm2022/index.mjs +9 -0
  362. package/oAuth/fesm2022/index.mjs.map +1 -1
  363. package/oAuth/oAuth.service.d.ts +3 -1
  364. package/package-lock.json +2 -2
  365. package/package.json +1 -1
  366. package/runtime/base/bundles/index.umd.js +367 -32
  367. package/runtime/base/components/app-component/app.component.d.ts +4 -0
  368. package/runtime/base/components/prefab-preview.component.d.ts +5 -2
  369. package/runtime/base/directives/accessroles.directive.d.ts +4 -3
  370. package/runtime/base/directives/prefab.directive.d.ts +3 -2
  371. package/runtime/base/esm2022/components/app-component/app.component.mjs +40 -9
  372. package/runtime/base/esm2022/components/base-custom-widget.component.mjs +33 -2
  373. package/runtime/base/esm2022/components/base-layout.component.mjs +7 -1
  374. package/runtime/base/esm2022/components/base-page.component.mjs +36 -3
  375. package/runtime/base/esm2022/components/base-partial.component.mjs +37 -3
  376. package/runtime/base/esm2022/components/base-prefab.component.mjs +32 -3
  377. package/runtime/base/esm2022/components/base-spa-page.component.mjs +37 -3
  378. package/runtime/base/esm2022/components/prefab-preview.component.mjs +23 -4
  379. package/runtime/base/esm2022/directives/accessroles.directive.mjs +11 -2
  380. package/runtime/base/esm2022/directives/prefab.directive.mjs +9 -1
  381. package/runtime/base/esm2022/services/app.manager.service.mjs +40 -12
  382. package/runtime/base/esm2022/services/app.service.mjs +34 -2
  383. package/runtime/base/esm2022/services/dynamic-component-ref-provider.service.mjs +4 -1
  384. package/runtime/base/esm2022/services/pipe-provider.service.mjs +7 -4
  385. package/runtime/base/esm2022/services/spinner.service.mjs +15 -1
  386. package/runtime/base/esm2022/util/fragment-monitor.mjs +23 -2
  387. package/runtime/base/fesm2022/index.mjs +368 -33
  388. package/runtime/base/fesm2022/index.mjs.map +1 -1
  389. package/runtime/base/runtime-base.module.d.ts +2 -2
  390. package/runtime/base/services/app.manager.service.d.ts +6 -1
  391. package/runtime/base/services/app.service.d.ts +12 -2
  392. package/runtime/base/services/dynamic-component-ref-provider.service.d.ts +2 -1
  393. package/runtime/base/services/spinner.service.d.ts +3 -1
  394. package/runtime/base/util/fragment-monitor.d.ts +6 -0
  395. package/runtime/dynamic/bundles/index.umd.js +5 -0
  396. package/runtime/dynamic/esm2022/app/components/page-wrapper.component.mjs +6 -1
  397. package/runtime/dynamic/fesm2022/index.mjs +5 -0
  398. package/runtime/dynamic/fesm2022/index.mjs.map +1 -1
  399. package/scripts/@wavemaker/nvd3/build/nv.d3.min.js +1 -1
  400. package/scripts/datatable/datatable.js +100 -14
  401. package/security/bundles/index.umd.js +41 -2
  402. package/security/esm2022/security.service.mjs +42 -3
  403. package/security/fesm2022/index.mjs +41 -2
  404. package/security/fesm2022/index.mjs.map +1 -1
  405. package/security/security.service.d.ts +5 -2
  406. package/variables/bundles/index.umd.js +50 -6
  407. package/variables/esm2022/manager/action/notification-action.manager.mjs +18 -3
  408. package/variables/esm2022/manager/variable/base-variable.manager.mjs +15 -2
  409. package/variables/esm2022/manager/variable/web-socket-variable.manager.mjs +13 -3
  410. package/variables/esm2022/service/variables.service.mjs +8 -2
  411. package/variables/fesm2022/index.mjs +50 -6
  412. package/variables/fesm2022/index.mjs.map +1 -1
@@ -1,8 +1,8 @@
1
- import { Injector, OnInit } from '@angular/core';
1
+ import { Injector, OnDestroy, OnInit } from '@angular/core';
2
2
  import { BaseComponent } from '@wm/components/base';
3
3
  import { FormComponent } from '../form.component';
4
4
  import * as i0 from "@angular/core";
5
- export declare class FormActionDirective extends BaseComponent implements OnInit {
5
+ export declare class FormActionDirective extends BaseComponent implements OnInit, OnDestroy {
6
6
  form: FormComponent;
7
7
  static initializeProps: void;
8
8
  accessroles: any;
@@ -29,6 +29,7 @@ export declare class FormActionDirective extends BaseComponent implements OnInit
29
29
  populateAction(): void;
30
30
  ngOnInit(): void;
31
31
  onPropertyChange(key: any, nv: any, ov: any): void;
32
+ ngOnDestroy(): void;
32
33
  static ɵfac: i0.ɵɵFactoryDeclaration<FormActionDirective, [null, { optional: true; }, { optional: true; }]>;
33
34
  static ɵdir: i0.ɵɵDirectiveDeclaration<FormActionDirective, "[wmFormAction]", never, {}, {}, never, never, true, never>;
34
35
  }
@@ -1,11 +1,11 @@
1
- import { AfterContentInit, Injector, OnInit } from '@angular/core';
1
+ import { AfterContentInit, Injector, OnDestroy, OnInit } from '@angular/core';
2
2
  import { FormBuilder, FormGroup } from '@angular/forms';
3
3
  import { App, Viewport } from '@wm/core';
4
4
  import { StylableComponent } from '@wm/components/base';
5
5
  import { ListComponent } from '@wm/components/data/list';
6
6
  import { FormComponent } from '../form.component';
7
7
  import * as i0 from "@angular/core";
8
- export declare class FormFieldDirective extends StylableComponent implements OnInit, AfterContentInit {
8
+ export declare class FormFieldDirective extends StylableComponent implements OnInit, AfterContentInit, OnDestroy {
9
9
  static initializeProps: void;
10
10
  formWidget: any;
11
11
  formWidgetMax: any;
@@ -110,6 +110,7 @@ export declare class FormFieldDirective extends StylableComponent implements OnI
110
110
  ngOnInit(): void;
111
111
  prepareFormWidget(): void;
112
112
  ngAfterContentInit(): void;
113
+ ngOnDestroy(): void;
113
114
  static ɵfac: i0.ɵɵFactoryDeclaration<FormFieldDirective, [null, null, null, null, null, { optional: true; }, { attribute: "chipclass.bind"; }, { attribute: "dataset.bind"; }, { attribute: "displayexpression.bind"; }, { attribute: "displaylabel.bind"; }, { attribute: "widgettype"; }, { attribute: "name"; }, { attribute: "displayimagesrc.bind"; }, { attribute: "key"; }, { attribute: "is-range"; }, { attribute: "pc-display"; }, { attribute: "mobile-display"; }, { attribute: "tablet-display"; }, { self: true; }, { optional: true; }]>;
114
115
  static ɵdir: i0.ɵɵDirectiveDeclaration<FormFieldDirective, "[wmFormField]", ["wmFormField"], {}, {}, ["formWidget", "formWidgetMax"], never, true, never>;
115
116
  }
@@ -1,7 +1,7 @@
1
- import { OnInit } from '@angular/core';
1
+ import { OnDestroy, OnInit } from '@angular/core';
2
2
  import { FormBuilder, FormGroup } from '@angular/forms';
3
3
  import * as i0 from "@angular/core";
4
- export declare class FormWidgetDirective implements OnInit {
4
+ export declare class FormWidgetDirective implements OnInit, OnDestroy {
5
5
  componentInstance: any;
6
6
  name: any;
7
7
  key: any;
@@ -13,6 +13,7 @@ export declare class FormWidgetDirective implements OnInit {
13
13
  addControl(fieldName: any): void;
14
14
  createControl(): any;
15
15
  ngOnInit(): void;
16
+ ngOnDestroy(): void;
16
17
  static ɵfac: i0.ɵɵFactoryDeclaration<FormWidgetDirective, [{ optional: true; }, { optional: true; }, { self: true; }, null, { attribute: "name"; }, { attribute: "key"; }]>;
17
18
  static ɵdir: i0.ɵɵDirectiveDeclaration<FormWidgetDirective, "[wmFormWidget]", never, {}, {}, never, never, true, never>;
18
19
  }
@@ -1,6 +1,7 @@
1
+ import { OnDestroy } from '@angular/core';
1
2
  import { AbstractDialogService, App } from '@wm/core';
2
3
  import * as i0 from "@angular/core";
3
- export declare class LiveActionsDirective {
4
+ export declare class LiveActionsDirective implements OnDestroy {
4
5
  private subscribedWidget;
5
6
  private app;
6
7
  private dialogService;
@@ -17,6 +18,7 @@ export declare class LiveActionsDirective {
17
18
  private deleteRecord;
18
19
  private performOperation;
19
20
  call(operation: any, options: any, success?: any, error?: any): void;
21
+ ngOnDestroy(): void;
20
22
  static ɵfac: i0.ɵɵFactoryDeclaration<LiveActionsDirective, [{ self: true; }, null, null]>;
21
23
  static ɵdir: i0.ɵɵDirectiveDeclaration<LiveActionsDirective, "[wmLiveActions]", never, {}, {}, never, never, true, never>;
22
24
  }
@@ -1,5 +1,6 @@
1
+ import { OnDestroy } from '@angular/core';
1
2
  import * as i0 from "@angular/core";
2
- export declare class LiveFilterDirective {
3
+ export declare class LiveFilterDirective implements OnDestroy {
3
4
  private form;
4
5
  static initializeProps: void;
5
6
  private _options;
@@ -17,6 +18,7 @@ export declare class LiveFilterDirective {
17
18
  filter(options?: any): any;
18
19
  filterOnDefault(): void;
19
20
  registerFormWidget(widget: any): void;
21
+ ngOnDestroy(): void;
20
22
  static ɵfac: i0.ɵɵFactoryDeclaration<LiveFilterDirective, [{ self: true; }]>;
21
23
  static ɵdir: i0.ɵɵDirectiveDeclaration<LiveFilterDirective, "[wmLiveFilter]", never, {}, {}, never, never, true, never>;
22
24
  }
@@ -1,8 +1,9 @@
1
+ import { OnDestroy } from '@angular/core';
1
2
  import { AbstractDialogService } from '@wm/core';
2
3
  import { ToDatePipe } from '@wm/components/base';
3
4
  import { LiveTableComponent } from '@wm/components/data/live-table';
4
5
  import * as i0 from "@angular/core";
5
- export declare class LiveFormDirective {
6
+ export declare class LiveFormDirective implements OnDestroy {
6
7
  private form;
7
8
  datePipe: ToDatePipe;
8
9
  private dialogService;
@@ -37,6 +38,7 @@ export declare class LiveFormDirective {
37
38
  saveAndView(): void;
38
39
  submitForm($event: any): void;
39
40
  save(event?: any, updateMode?: any, newForm?: any): void;
41
+ ngOnDestroy(): void;
40
42
  static ɵfac: i0.ɵɵFactoryDeclaration<LiveFormDirective, [{ self: true; }, { optional: true; }, null, null, { attribute: "formlayout"; }]>;
41
43
  static ɵdir: i0.ɵɵDirectiveDeclaration<LiveFormDirective, "[wmLiveForm]", never, {}, {}, never, never, true, never>;
42
44
  }
@@ -152,28 +152,36 @@
152
152
  const $editItem = this.nativeElement.querySelector('.edit-list-item');
153
153
  const $deleteItem = this.nativeElement.querySelector('.delete-list-item');
154
154
  if ($editItem) {
155
- // Triggered on click of edit action
156
- $editItem.addEventListener('click', evt => {
155
+ // MEMORY LEAK FIX: Store bound handler for cleanup
156
+ this.boundEditHandler = (evt) => {
157
157
  this.listComponent.update();
158
- });
158
+ };
159
+ // Triggered on click of edit action
160
+ $editItem.addEventListener('click', this.boundEditHandler);
159
161
  }
160
162
  if ($deleteItem) {
161
- // Triggered on click of delete action
162
- $deleteItem.addEventListener('click', evt => {
163
+ // MEMORY LEAK FIX: Store bound handler for cleanup
164
+ this.boundDeleteHandler = (evt) => {
163
165
  this.listComponent.delete();
164
- });
166
+ };
167
+ // Triggered on click of delete action
168
+ $deleteItem.addEventListener('click', this.boundDeleteHandler);
165
169
  }
166
170
  }
167
171
  ngOnInit() {
168
172
  if (this.listComponent.mouseEnterCB) {
169
- this.nativeElement.addEventListener('mouseenter', ($event) => {
173
+ // MEMORY LEAK FIX: Store bound handler for cleanup
174
+ this.boundMouseEnterHandler = ($event) => {
170
175
  this.listComponent.invokeEventCallback('mouseenter', { widget: this, $event });
171
- });
176
+ };
177
+ this.nativeElement.addEventListener('mouseenter', this.boundMouseEnterHandler);
172
178
  }
173
179
  if (this.listComponent.mouseLeaveCB) {
174
- this.nativeElement.addEventListener('mouseleave', ($event) => {
180
+ // MEMORY LEAK FIX: Store bound handler for cleanup
181
+ this.boundMouseLeaveHandler = ($event) => {
175
182
  this.listComponent.invokeEventCallback('mouseleave', { widget: this, $event });
176
- });
183
+ };
184
+ this.nativeElement.addEventListener('mouseleave', this.boundMouseLeaveHandler);
177
185
  }
178
186
  // adding item attribute on every list item
179
187
  $(this.nativeElement).attr('listitemindex', this.$index);
@@ -189,6 +197,82 @@
189
197
  }
190
198
  });
191
199
  }
200
+ ngOnDestroy() {
201
+ // MEMORY LEAK FIX: Remove event listeners
202
+ if (this.boundMouseEnterHandler && this.nativeElement) {
203
+ try {
204
+ this.nativeElement.removeEventListener('mouseenter', this.boundMouseEnterHandler);
205
+ }
206
+ catch (e) {
207
+ // Silently handle cleanup errors
208
+ }
209
+ this.boundMouseEnterHandler = null;
210
+ }
211
+ if (this.boundMouseLeaveHandler && this.nativeElement) {
212
+ try {
213
+ this.nativeElement.removeEventListener('mouseleave', this.boundMouseLeaveHandler);
214
+ }
215
+ catch (e) {
216
+ // Silently handle cleanup errors
217
+ }
218
+ this.boundMouseLeaveHandler = null;
219
+ }
220
+ if (this.nativeElement) {
221
+ const $editItem = this.nativeElement.querySelector('.edit-list-item');
222
+ if ($editItem && this.boundEditHandler) {
223
+ try {
224
+ $editItem.removeEventListener('click', this.boundEditHandler);
225
+ }
226
+ catch (e) {
227
+ // Silently handle cleanup errors
228
+ }
229
+ this.boundEditHandler = null;
230
+ }
231
+ const $deleteItem = this.nativeElement.querySelector('.delete-list-item');
232
+ if ($deleteItem && this.boundDeleteHandler) {
233
+ try {
234
+ $deleteItem.removeEventListener('click', this.boundDeleteHandler);
235
+ }
236
+ catch (e) {
237
+ // Silently handle cleanup errors
238
+ }
239
+ this.boundDeleteHandler = null;
240
+ }
241
+ }
242
+ // MEMORY LEAK FIX: Clear currentItemWidgets cache
243
+ // The _currentItemWidgets object accumulates references to all child widgets
244
+ // which prevents them from being garbage collected
245
+ if (this._currentItemWidgets) {
246
+ Object.keys(this._currentItemWidgets).forEach(key => {
247
+ delete this._currentItemWidgets[key];
248
+ });
249
+ this._currentItemWidgets = null;
250
+ }
251
+ // MEMORY LEAK FIX: Clear context to release references
252
+ if (this.context) {
253
+ Object.keys(this.context).forEach(key => {
254
+ delete this.context[key];
255
+ });
256
+ this.context = null;
257
+ }
258
+ // MEMORY LEAK FIX: Clear ViewContainerRef reference
259
+ if (this.viewContainerRef) {
260
+ this.viewContainerRef = null;
261
+ }
262
+ // MEMORY LEAK FIX: Complete the destroy subject
263
+ if (this.destroy) {
264
+ try {
265
+ if (!this.destroy.closed) {
266
+ this.destroy.next(null);
267
+ this.destroy.complete();
268
+ }
269
+ }
270
+ catch (e) {
271
+ // Silently handle cleanup errors
272
+ }
273
+ this.destroy = null;
274
+ }
275
+ }
192
276
  static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: ListItemDirective, deps: [{ token: i0__namespace.Injector }, { token: i0__namespace.ElementRef }, { token: i2__namespace.App }], target: i0__namespace.ɵɵFactoryTarget.Directive }); }
193
277
  static { this.ɵdir = i0__namespace.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: ListItemDirective, isStandalone: true, selector: "[wmListItem]", inputs: { wmListItem: "wmListItem" }, host: { listeners: { "focus": "onFocus()" }, properties: { "class.active": "this.isActive", "class.disable-item": "this.disableItem" } }, exportAs: ["listItemRef"], ngImport: i0__namespace }); }
194
278
  }
@@ -575,8 +659,10 @@
575
659
  this.allowpagesizechange = nv;
576
660
  }
577
661
  else if (key === 'pagesizeoptions') {
578
- this.pagesizeoptions = nv;
579
- this.setDefaultPageSize(nv);
662
+ this.prevPagesizeoptions = this.sanitizeCommaSeparatedIntegers(ov);
663
+ this.pagesizeoptions = this.sanitizeCommaSeparatedIntegers(nv);
664
+ if (this.allowpagesizechange)
665
+ this.setDefaultPageSize(nv);
580
666
  }
581
667
  else {
582
668
  super.onPropertyChange(key, nv, ov);
@@ -593,6 +679,10 @@
593
679
  nv = this.pagesizeoptions?.split(',').map(Number).sort((a, b) => a - b)[0];
594
680
  this.pagesize = nv;
595
681
  }
682
+ if (this.isPageSizeOptionsChanged()) {
683
+ this.dataNavigator.defaultPageSizeOptions = this.pagesizeoptions?.split(',').map(Number).sort((a, b) => a - b) || [];
684
+ this.dataNavigator.pageSizeOptions = [...this.dataNavigator.defaultPageSizeOptions];
685
+ }
596
686
  }
597
687
  this.updatedPageSize = nv;
598
688
  this.dataNavigator.updatedPageSize = nv;
@@ -601,6 +691,31 @@
601
691
  };
602
692
  this.dataNavigator.widget.maxResults = nv;
603
693
  this.dataNavigator.maxResults = nv;
694
+ if (this.datasource) {
695
+ this.datasource.maxResults = this.pagesize || this.datasource.maxResults;
696
+ }
697
+ }
698
+ isPageSizeOptionsChanged() {
699
+ return !lodashEs.isEqual(this.prevPagesizeoptions, this.pagesizeoptions);
700
+ }
701
+ selectPageSize(pagesize) {
702
+ if (!this.allowpagesizechange && !pagesize)
703
+ return;
704
+ if (pagesize < this.dataNavigator.pageSizeOptions[0] || pagesize > this.dataNavigator.pageSizeOptions[this.dataNavigator.pageSizeOptions.length - 1]
705
+ || !this.dataNavigator.pageSizeOptions.includes(Number(pagesize))) {
706
+ pagesize = this.dataNavigator.pageSizeOptions[0];
707
+ }
708
+ this.dataNavigator.onPageSizeChange(undefined, pagesize);
709
+ }
710
+ sanitizeCommaSeparatedIntegers(input) {
711
+ if (!input)
712
+ return "";
713
+ const uniqueNumbers = Array.from(new Set(input
714
+ .split(",")
715
+ .map(v => v.trim())
716
+ .filter(v => /^-?\d+$/.test(v))
717
+ .map(v => Math.abs(parseInt(v, 10)))));
718
+ return uniqueNumbers.join(",");
604
719
  }
605
720
  onItemClick(evt, $listItem) {
606
721
  let selectCount;
@@ -740,8 +855,81 @@
740
855
  ngOnDestroy() {
741
856
  if (this._listAnimator && this._listAnimator.$btnSubscription) {
742
857
  this._listAnimator.$btnSubscription.unsubscribe();
858
+ this._listAnimator = null;
859
+ }
860
+ // MEMORY LEAK FIX: Unsubscribe from all app subscriptions
861
+ if (this._listenerDestroyers) {
862
+ this._listenerDestroyers.forEach(d => d && d());
863
+ this._listenerDestroyers = [];
743
864
  }
744
- this._listenerDestroyers.forEach(d => d && d());
865
+ // MEMORY LEAK FIX: Unsubscribe from navigator watches
866
+ if (this.navigatorResultWatch) {
867
+ this.navigatorResultWatch.unsubscribe();
868
+ this.navigatorResultWatch = null;
869
+ }
870
+ if (this.navigatorMaxResultWatch) {
871
+ this.navigatorMaxResultWatch.unsubscribe();
872
+ this.navigatorMaxResultWatch = null;
873
+ }
874
+ // MEMORY LEAK FIX: Unsubscribe from listItems changes
875
+ if (this.listItemsChangesSubscription) {
876
+ this.listItemsChangesSubscription.unsubscribe();
877
+ this.listItemsChangesSubscription = null;
878
+ }
879
+ // MEMORY LEAK FIX: Remove native event listener
880
+ const ulElement = this.nativeElement?.querySelector('ul.app-livelist-container');
881
+ if (ulElement && this.boundClickHandler) {
882
+ try {
883
+ ulElement.removeEventListener('click', this.boundClickHandler, true);
884
+ }
885
+ catch (e) {
886
+ // Silently handle cleanup errors
887
+ }
888
+ this.boundClickHandler = null;
889
+ }
890
+ // MEMORY LEAK FIX: Destroy jQuery sortable widget
891
+ if (this.$ulEle && this.$ulEle.sortable) {
892
+ try {
893
+ this.$ulEle.sortable('destroy');
894
+ }
895
+ catch (e) {
896
+ // Ignore errors during destroy
897
+ }
898
+ this.$ulEle = null;
899
+ }
900
+ // MEMORY LEAK FIX: Clear QueryList references
901
+ if (this.listItems) {
902
+ this.listItems = null;
903
+ }
904
+ if (this.btnComponents) {
905
+ this.btnComponents = null;
906
+ }
907
+ // MEMORY LEAK FIX: Clear ViewChild and ContentChild references
908
+ this.dataNavigator = null;
909
+ this.listTemplate = null;
910
+ this.listLeftActionTemplate = null;
911
+ this.listRightActionTemplate = null;
912
+ // MEMORY LEAK FIX: Clear all data arrays and objects
913
+ this.fieldDefs = [];
914
+ this._items = [];
915
+ this.groupedData = null;
916
+ if (Array.isArray(this.selectedItemWidgets)) {
917
+ this.selectedItemWidgets = [];
918
+ }
919
+ else {
920
+ this.selectedItemWidgets = {};
921
+ }
922
+ // MEMORY LEAK FIX: Remove add item event listener
923
+ const $addItem = document.getElementsByClassName("add-list-item")[0];
924
+ if ($addItem && this.boundAddItemHandler) {
925
+ $addItem.removeEventListener('click', this.boundAddItemHandler);
926
+ this.boundAddItemHandler = null;
927
+ }
928
+ // MEMORY LEAK FIX: Nullify closures and references
929
+ this.debouncedFetchNextDatasetOnScroll = null;
930
+ this.firstSelectedItem = null;
931
+ this.lastSelectedItem = null;
932
+ this.reorderProps = null;
745
933
  super.ngOnDestroy();
746
934
  }
747
935
  ngOnDetach() {
@@ -1155,19 +1343,23 @@
1155
1343
  this.isDataChanged = false;
1156
1344
  }
1157
1345
  setupHandlers() {
1158
- this.listItems.changes.subscribe(listItems => {
1346
+ this.listItemsChangesSubscription = this.listItems.changes.subscribe(listItems => {
1159
1347
  this.onListRender(listItems);
1160
1348
  this.cdRef.detectChanges();
1161
1349
  });
1162
1350
  // handle click event in capturing phase.
1163
- this.nativeElement.querySelector('ul.app-livelist-container').addEventListener('click', ($event) => {
1351
+ this.boundClickHandler = ($event) => {
1164
1352
  let target = $($event.target).closest('.app-list-item');
1165
1353
  // Recursively find the current list item
1166
1354
  while (target.get(0) && (target.closest('ul.app-livelist-container').get(0) !== $event.currentTarget)) {
1167
1355
  target = target.parent().closest('.app-list-item');
1168
1356
  }
1169
1357
  this.triggerListItemSelection(target, $event);
1170
- }, true);
1358
+ };
1359
+ const ulElement = this.nativeElement.querySelector('ul.app-livelist-container');
1360
+ if (ulElement) {
1361
+ ulElement.addEventListener('click', this.boundClickHandler, true);
1362
+ }
1171
1363
  }
1172
1364
  // Triggers on drag start while reordering.
1173
1365
  onReorderStart(evt, ui) {
@@ -1283,10 +1475,12 @@
1283
1475
  setUpCUDHandlers() {
1284
1476
  const $addItem = document.getElementsByClassName("add-list-item")[0];
1285
1477
  if ($addItem) {
1286
- // Triggered on click of add action
1287
- $addItem.addEventListener('click', evt => {
1478
+ // MEMORY LEAK FIX: Store bound handler for cleanup
1479
+ this.boundAddItemHandler = (evt) => {
1288
1480
  this.create();
1289
- });
1481
+ };
1482
+ // Triggered on click of add action
1483
+ $addItem.addEventListener('click', this.boundAddItemHandler);
1290
1484
  }
1291
1485
  }
1292
1486
  static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: ListComponent, deps: [{ token: i0__namespace.Injector }, { token: i0__namespace.ChangeDetectorRef }, { token: i1__namespace.ToDatePipe }, { token: i2__namespace.App }, { token: i2__namespace.AppDefaults }, { token: i0__namespace.NgZone }, { token: 'itemclass.bind', attribute: true }, { token: 'disableitem.bind', attribute: true }, { token: 'dataset.bind', attribute: true }, { token: 'datasource.bind', attribute: true }, { token: 'mouseenter.event', attribute: true }, { token: 'mouseleave.event', attribute: true }, { token: i2__namespace.StatePersistence }, { token: i2__namespace.PaginationService }, { token: 'EXPLICIT_CONTEXT', optional: true }], target: i0__namespace.ɵɵFactoryTarget.Component }); }
@@ -86,28 +86,36 @@ export class ListItemDirective {
86
86
  const $editItem = this.nativeElement.querySelector('.edit-list-item');
87
87
  const $deleteItem = this.nativeElement.querySelector('.delete-list-item');
88
88
  if ($editItem) {
89
- // Triggered on click of edit action
90
- $editItem.addEventListener('click', evt => {
89
+ // MEMORY LEAK FIX: Store bound handler for cleanup
90
+ this.boundEditHandler = (evt) => {
91
91
  this.listComponent.update();
92
- });
92
+ };
93
+ // Triggered on click of edit action
94
+ $editItem.addEventListener('click', this.boundEditHandler);
93
95
  }
94
96
  if ($deleteItem) {
95
- // Triggered on click of delete action
96
- $deleteItem.addEventListener('click', evt => {
97
+ // MEMORY LEAK FIX: Store bound handler for cleanup
98
+ this.boundDeleteHandler = (evt) => {
97
99
  this.listComponent.delete();
98
- });
100
+ };
101
+ // Triggered on click of delete action
102
+ $deleteItem.addEventListener('click', this.boundDeleteHandler);
99
103
  }
100
104
  }
101
105
  ngOnInit() {
102
106
  if (this.listComponent.mouseEnterCB) {
103
- this.nativeElement.addEventListener('mouseenter', ($event) => {
107
+ // MEMORY LEAK FIX: Store bound handler for cleanup
108
+ this.boundMouseEnterHandler = ($event) => {
104
109
  this.listComponent.invokeEventCallback('mouseenter', { widget: this, $event });
105
- });
110
+ };
111
+ this.nativeElement.addEventListener('mouseenter', this.boundMouseEnterHandler);
106
112
  }
107
113
  if (this.listComponent.mouseLeaveCB) {
108
- this.nativeElement.addEventListener('mouseleave', ($event) => {
114
+ // MEMORY LEAK FIX: Store bound handler for cleanup
115
+ this.boundMouseLeaveHandler = ($event) => {
109
116
  this.listComponent.invokeEventCallback('mouseleave', { widget: this, $event });
110
- });
117
+ };
118
+ this.nativeElement.addEventListener('mouseleave', this.boundMouseLeaveHandler);
111
119
  }
112
120
  // adding item attribute on every list item
113
121
  $(this.nativeElement).attr('listitemindex', this.$index);
@@ -123,6 +131,82 @@ export class ListItemDirective {
123
131
  }
124
132
  });
125
133
  }
134
+ ngOnDestroy() {
135
+ // MEMORY LEAK FIX: Remove event listeners
136
+ if (this.boundMouseEnterHandler && this.nativeElement) {
137
+ try {
138
+ this.nativeElement.removeEventListener('mouseenter', this.boundMouseEnterHandler);
139
+ }
140
+ catch (e) {
141
+ // Silently handle cleanup errors
142
+ }
143
+ this.boundMouseEnterHandler = null;
144
+ }
145
+ if (this.boundMouseLeaveHandler && this.nativeElement) {
146
+ try {
147
+ this.nativeElement.removeEventListener('mouseleave', this.boundMouseLeaveHandler);
148
+ }
149
+ catch (e) {
150
+ // Silently handle cleanup errors
151
+ }
152
+ this.boundMouseLeaveHandler = null;
153
+ }
154
+ if (this.nativeElement) {
155
+ const $editItem = this.nativeElement.querySelector('.edit-list-item');
156
+ if ($editItem && this.boundEditHandler) {
157
+ try {
158
+ $editItem.removeEventListener('click', this.boundEditHandler);
159
+ }
160
+ catch (e) {
161
+ // Silently handle cleanup errors
162
+ }
163
+ this.boundEditHandler = null;
164
+ }
165
+ const $deleteItem = this.nativeElement.querySelector('.delete-list-item');
166
+ if ($deleteItem && this.boundDeleteHandler) {
167
+ try {
168
+ $deleteItem.removeEventListener('click', this.boundDeleteHandler);
169
+ }
170
+ catch (e) {
171
+ // Silently handle cleanup errors
172
+ }
173
+ this.boundDeleteHandler = null;
174
+ }
175
+ }
176
+ // MEMORY LEAK FIX: Clear currentItemWidgets cache
177
+ // The _currentItemWidgets object accumulates references to all child widgets
178
+ // which prevents them from being garbage collected
179
+ if (this._currentItemWidgets) {
180
+ Object.keys(this._currentItemWidgets).forEach(key => {
181
+ delete this._currentItemWidgets[key];
182
+ });
183
+ this._currentItemWidgets = null;
184
+ }
185
+ // MEMORY LEAK FIX: Clear context to release references
186
+ if (this.context) {
187
+ Object.keys(this.context).forEach(key => {
188
+ delete this.context[key];
189
+ });
190
+ this.context = null;
191
+ }
192
+ // MEMORY LEAK FIX: Clear ViewContainerRef reference
193
+ if (this.viewContainerRef) {
194
+ this.viewContainerRef = null;
195
+ }
196
+ // MEMORY LEAK FIX: Complete the destroy subject
197
+ if (this.destroy) {
198
+ try {
199
+ if (!this.destroy.closed) {
200
+ this.destroy.next(null);
201
+ this.destroy.complete();
202
+ }
203
+ }
204
+ catch (e) {
205
+ // Silently handle cleanup errors
206
+ }
207
+ this.destroy = null;
208
+ }
209
+ }
126
210
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ListItemDirective, deps: [{ token: i0.Injector }, { token: i0.ElementRef }, { token: i1.App }], target: i0.ɵɵFactoryTarget.Directive }); }
127
211
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: ListItemDirective, isStandalone: true, selector: "[wmListItem]", inputs: { wmListItem: "wmListItem" }, host: { listeners: { "focus": "onFocus()" }, properties: { "class.active": "this.isActive", "class.disable-item": "this.disableItem" } }, exportAs: ["listItemRef"], ngImport: i0 }); }
128
212
  }
@@ -145,4 +229,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
145
229
  }], wmListItem: [{
146
230
  type: Input
147
231
  }] } });
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1pdGVtLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL2xpc3Qvc3JjL2xpc3QtaXRlbS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFHTCxnQkFBZ0IsRUFDbkIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFhLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUV6QyxPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUVyQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDL0MsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7OztBQVNqRSxNQUFNLE9BQU8saUJBQWlCO0lBcUIxQixPQUFPO1FBQ0gsNkRBQTZEO1FBQzdELElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0lBQy9DLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDTCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFJLEtB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LGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFMN0IsU0FBUzttQkFBQztvQkFDVCxVQUFVLEVBQUUsSUFBSTtvQkFDZCxRQUFRLEVBQUUsY0FBYztvQkFDeEIsUUFBUSxFQUFFLGFBQWE7aUJBQzFCO3dIQWtCZ0MsUUFBUTtzQkFBcEMsV0FBVzt1QkFBQyxjQUFjO2dCQUNRLFdBQVc7c0JBQTdDLFdBQVc7dUJBQUMsb0JBQW9CO2dCQUdqQyxPQUFPO3NCQUROLFlBQVk7dUJBQUMsT0FBTztnQkFrQ1IsVUFBVTtzQkFBdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgaW5qZWN0LFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge09ic2VydmFibGUsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyR3YXRjaCwgQXBwfSBmcm9tICdAd20vY29yZSc7XG5cbmltcG9ydCB7TGlzdENvbXBvbmVudH0gZnJvbSAnLi9saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQge3dpZGdldElkR2VuZXJhdG9yfSBmcm9tIFwiQHdtL2NvbXBvbmVudHMvYmFzZVwiO1xuaW1wb3J0IHtCYXNlRm9ybUNvbXBvbmVudH0gZnJvbSBcIkB3bS9jb21wb25lbnRzL2lucHV0L2Jhc2UtZm9ybVwiO1xuXG5kZWNsYXJlIGNvbnN0ICQ7XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnW3dtTGlzdEl0ZW1dJyxcbiAgICBleHBvcnRBczogJ2xpc3RJdGVtUmVmJ1xufSlcbmV4cG9ydCBjbGFzcyBMaXN0SXRlbURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgICBwdWJsaWMgaXRlbTtcbiAgICBwdWJsaWMgY29udGV4dDtcbiAgICBwdWJsaWMgZGVzdHJveTogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBwdWJsaWMgZGVzdHJveSQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuZGVzdHJveS5hc09ic2VydmFibGUoKTtcbiAgICBwdWJsaWMgbmF0aXZlRWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gICAgcHVibGljIHJlYWRvbmx5IGxpc3RDb21wb25lbnQ6IExpc3RDb21wb25lbnQ7XG5cbiAgICBwcml2YXRlIGl0ZW1DbGFzcyA9ICcnO1xuICAgIHByaXZhdGUgX2N1cnJlbnRJdGVtV2lkZ2V0cyA9IHt9O1xuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZjtcbiAgICAvKipcbiAgICAgKiBUbyBhdm9pZCByZS1yZW5kZXJpbmcgb2Ygd2lkZ2V0LCBwYXNzaW5nIHVuaXF1ZSBpZCBhcyBjb250ZXh0S2V5IHRvIGNyZWF0ZUN1c3RvbUluamVjdG9yXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHRyYWNrSWQgPSB3aWRnZXRJZEdlbmVyYXRvci5uZXh0VWlkKCk7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFjdGl2ZScpIGlzQWN0aXZlID0gZmFsc2U7XG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kaXNhYmxlLWl0ZW0nKSBkaXNhYmxlSXRlbSA9IGZhbHNlO1xuXG4gICAgQEhvc3RMaXN0ZW5lcignZm9jdXMnKVxuICAgIG9uRm9jdXMoKSB7XG4gICAgICAgIC8vIG1haW50YWlucyB3aGljaCBlbGVtZW50IGlzIGZvY3VzZWQvc2VsZWN0ZWQgbW9zdCByZWNlbnRseS5cbiAgICAgICAgdGhpcy5saXN0Q29tcG9uZW50Lmxhc3RTZWxlY3RlZEl0ZW0gPSB0aGlzO1xuICAgIH1cblxuICAgIGdldCAkaW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQuJGluZGV4O1xuICAgIH1cblxuICAgIGdldCAkZXZlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5ldmVuO1xuICAgIH1cblxuICAgIGdldCAkb2RkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0Lm9kZDtcbiAgICB9XG5cbiAgICBnZXQgJGZpcnN0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LmZpcnN0O1xuICAgIH1cblxuICAgIGdldCAkbGFzdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5sYXN0O1xuICAgIH1cblxuICAgIGdldCBjdXJyZW50SXRlbVdpZGdldHMgKCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRFbGVtZW50cyA9IEFycmF5LmZyb20odGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1t3aWRnZXQtaWRdJykpO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih0aGlzLl9jdXJyZW50SXRlbVdpZGdldHMsIGNvbXBvbmVudEVsZW1lbnRzLnJlZHVjZSgocmVzdWx0LCBjb21wOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJlc3VsdFtjb21wLndpZGdldC5uYW1lXSA9IGNvbXAud2lkZ2V0O1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSwge30pKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgd21MaXN0SXRlbSh2YWwpIHtcbiAgICAgICAgdGhpcy5pdGVtID0gdmFsO1xuICAgIH1cbiAgICBwcml2YXRlIF92aWV3UGFyZW50ID0gaW5qZWN0KExpc3RDb21wb25lbnQsIHtvcHRpb25hbDogdHJ1ZX0pO1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaW5qOiBJbmplY3RvciwgZWxSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgYXBwOiBBcHApIHtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmID0gaW5qLmdldChWaWV3Q29udGFpbmVyUmVmKTtcbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50ID0gZWxSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgdGhpcy5saXN0Q29tcG9uZW50ID0gdGhpcy5fdmlld1BhcmVudDtcbiAgICAgICAgLy8gdGhpcy5jb250ZXh0ID0gKDxOZ0Zvck9mQ29udGV4dDxMaXN0SXRlbURpcmVjdGl2ZT4+KDxhbnk+aW5qKS52aWV3LmNvbnRleHQpO1xuICAgICAgICB0aGlzLmNvbnRleHQgPSAodGhpcy5pbmogYXMgYW55KS5fbFZpZXdbOF07XG4gICAgICAgIC8vdGhpcy5jb250ZXh0ID0gKHRoaXMudmlld0NvbnRhaW5lclJlZiBhcyBhbnkpLl9ob3N0TFZpZXcuZmluZCh0ID0+IHQgJiYgISF0LiRpbXBsaWNpdCk7XG4gICAgICAgIHRoaXMuaXRlbUNsYXNzV2F0Y2hlcih0aGlzLmxpc3RDb21wb25lbnQpO1xuICAgICAgICB0aGlzLmRpc2FibGVJdGVtV2F0Y2hlcih0aGlzLmxpc3RDb21wb25lbnQpO1xuICAgICAgICAkKHRoaXMubmF0aXZlRWxlbWVudCkuZGF0YSgnbGlzdEl0ZW1Db250ZXh0JywgdGhpcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdpc3RlcldhdGNoKGV4cHJlc3Npb246IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG4gICAgICAgIC8vIFJlbW92aW5nIG5nRm9yIGNvbnRleHQgYXMgdGhlIHNhbWUgcHJvcGVydGllcyBhcmUgYXZhaWxibGUgb24gbGlzdGl0ZW0gc2NvcGUuXG4gICAgICAgIC8vIHBhc3Npbmcgdmlld3BhcmVudCBjb250ZXh0IGZvciBhY2Nlc3NpbmcgdmFyaWJhbGVzIGFuZCB3aWRnZXRzLlxuICAgICAgICAvL1tDU1BdOiBleHByZXNzaW9uIHdpbGwgYmUgZ2VuZXJhdGVkIGluIHRoZSBjb21wb25lbnQgYXMgZS5nLiAnaXRlbS5jbGFzc05hbWUnXG4gICAgICAgIHRoaXMuZGVzdHJveSQuc3Vic2NyaWJlKCR3YXRjaChleHByZXNzaW9uLCAodGhpcy5saXN0Q29tcG9uZW50IGFzIGFueSkudmlld1BhcmVudCwgdGhpcywgY2FsbGJhY2spKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGl0ZW1DbGFzc1dhdGNoZXIobGlzdENvbXBvbmVudDogTGlzdENvbXBvbmVudCkge1xuICAgICAgICBpZiAobGlzdENvbXBvbmVudC5iaW5kaXRlbWNsYXNzKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyV2F0Y2gobGlzdENvbXBvbmVudC5iaW5kaXRlbWNsYXNzLCBudiA9PiB0aGlzLml0ZW1DbGFzcyA9IG52IHx8ICcnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbUNsYXNzID0gbGlzdENvbXBvbmVudC5pdGVtY2xhc3M7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGRpc2FibGVJdGVtV2F0Y2hlcigkbGlzdDogTGlzdENvbXBvbmVudCkge1xuICAgICAgICBpZiAoJGxpc3QuYmluZGRpc2FibGVpdGVtKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyV2F0Y2goJGxpc3QuYmluZGRpc2FibGVpdGVtLCBudiA9PiB0aGlzLmRpc2FibGVJdGVtID0gbnYgfHwgZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlSXRlbSA9ICRsaXN0LmRpc2FibGVpdGVtIHx8IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRVcENVREhhbmRsZXJzKCkge1xuICAgICAgICBjb25zdCAkZWRpdEl0ZW0gPSB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmVkaXQtbGlzdC1pdGVtJyk7XG4gICAgICAgIGNvbnN0ICRkZWxldGVJdGVtID0gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kZWxldGUtbGlzdC1pdGVtJyk7XG5cbiAgICAgICAgaWYgKCRlZGl0SXRlbSkge1xuICAgICAgICAgICAgLy8gVHJpZ2dlcmVkIG9uIGNsaWNrIG9mIGVkaXQgYWN0aW9uXG4gICAgICAgICAgICAkZWRpdEl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldnQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdENvbXBvbmVudC51cGRhdGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCRkZWxldGVJdGVtKSB7XG4gICAgICAgICAgICAvLyBUcmlnZ2VyZWQgb24gY2xpY2sgb2YgZGVsZXRlIGFjdGlvblxuICAgICAgICAgICAgJGRlbGV0ZUl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldnQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdENvbXBvbmVudC5kZWxldGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAodGhpcy5saXN0Q29tcG9uZW50Lm1vdXNlRW50ZXJDQikge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCAoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0Q29tcG9uZW50Lmludm9rZUV2ZW50Q2FsbGJhY2soJ21vdXNlZW50ZXInLCB7d2lkZ2V0OiB0aGlzLCAkZXZlbnR9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmxpc3RDb21wb25lbnQubW91c2VMZWF2ZUNCKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsICgkZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RDb21wb25lbnQuaW52b2tlRXZlbnRDYWxsYmFjaygnbW91c2VsZWF2ZScsIHt3aWRnZXQ6IHRoaXMsICRldmVudH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYWRkaW5nIGl0ZW0gYXR0cmlidXRlIG9uIGV2ZXJ5IGxpc3QgaXRlbVxuICAgICAgICAkKHRoaXMubmF0aXZlRWxlbWVudCkuYXR0cignbGlzdGl0ZW1pbmRleCcsIHRoaXMuJGluZGV4KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuc2V0VXBDVURIYW5kbGVycygpO1xuICAgICAgICBjb25zdCBjb21wb25lbnRFbGVtZW50cyA9IEFycmF5LmZyb20odGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1t3aWRnZXQtaWRdJykpO1xuICAgICAgICBjb21wb25lbnRFbGVtZW50cy5mb3JFYWNoKChjb21wb25lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYoY29tcG9uZW50LndpZGdldCBpbnN0YW5jZW9mIEJhc2VGb3JtQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgaWYoIWNvbXBvbmVudC53aWRnZXQuJGF0dHJzLmdldCgnZGF0YXZhbHVlc291cmNlLmJpbmQnKSkge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQud2lkZ2V0LmRhdGF2YWx1ZXNvdXJjZSA9IHRoaXMubGlzdENvbXBvbmVudFsnZGF0YXNvdXJjZSddO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
232
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1pdGVtLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL2xpc3Qvc3JjL2xpc3QtaXRlbS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFHTCxnQkFBZ0IsRUFDbkIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFhLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUV6QyxPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUVyQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDL0MsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7OztBQVNqRSxNQUFNLE9BQU8saUJBQWlCO0lBcUIxQixPQUFPO1FBQ0gsNkRBQTZEO1FBQzdELElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0lBQy9DLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDTCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFJLEtB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RGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIGluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7JHdhdGNoLCBBcHB9IGZyb20gJ0B3bS9jb3JlJztcblxuaW1wb3J0IHtMaXN0Q29tcG9uZW50fSBmcm9tICcuL2xpc3QuY29tcG9uZW50JztcbmltcG9ydCB7d2lkZ2V0SWRHZW5lcmF0b3J9IGZyb20gXCJAd20vY29tcG9uZW50cy9iYXNlXCI7XG5pbXBvcnQge0Jhc2VGb3JtQ29tcG9uZW50fSBmcm9tIFwiQHdtL2NvbXBvbmVudHMvaW5wdXQvYmFzZS1mb3JtXCI7XG5cbmRlY2xhcmUgY29uc3QgJDtcblxuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdbd21MaXN0SXRlbV0nLFxuICAgIGV4cG9ydEFzOiAnbGlzdEl0ZW1SZWYnXG59KVxuZXhwb3J0IGNsYXNzIExpc3RJdGVtRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgcHVibGljIGl0ZW07XG4gICAgcHVibGljIGNvbnRleHQ7XG4gICAgcHVibGljIGRlc3Ryb3k6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgcHVibGljIGRlc3Ryb3kkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLmRlc3Ryb3kuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIG5hdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICAgIHB1YmxpYyByZWFkb25seSBsaXN0Q29tcG9uZW50OiBMaXN0Q29tcG9uZW50O1xuXG4gICAgcHJpdmF0ZSBpdGVtQ2xhc3MgPSAnJztcbiAgICBwcml2YXRlIF9jdXJyZW50SXRlbVdpZGdldHMgPSB7fTtcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWY7XG4gICAgLyoqXG4gICAgICogVG8gYXZvaWQgcmUtcmVuZGVyaW5nIG9mIHdpZGdldCwgcGFzc2luZyB1bmlxdWUgaWQgYXMgY29udGV4dEtleSB0byBjcmVhdGVDdXN0b21JbmplY3RvclxuICAgICAqL1xuICAgIHByb3RlY3RlZCB0cmFja0lkID0gd2lkZ2V0SWRHZW5lcmF0b3IubmV4dFVpZCgpO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hY3RpdmUnKSBpc0FjdGl2ZSA9IGZhbHNlO1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZGlzYWJsZS1pdGVtJykgZGlzYWJsZUl0ZW0gPSBmYWxzZTtcblxuICAgIEBIb3N0TGlzdGVuZXIoJ2ZvY3VzJylcbiAgICBvbkZvY3VzKCkge1xuICAgICAgICAvLyBtYWludGFpbnMgd2hpY2ggZWxlbWVudCBpcyBmb2N1c2VkL3NlbGVjdGVkIG1vc3QgcmVjZW50bHkuXG4gICAgICAgIHRoaXMubGlzdENvbXBvbmVudC5sYXN0U2VsZWN0ZWRJdGVtID0gdGhpcztcbiAgICB9XG5cbiAgICBnZXQgJGluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LiRpbmRleDtcbiAgICB9XG5cbiAgICBnZXQgJGV2ZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQuZXZlbjtcbiAgICB9XG5cbiAgICBnZXQgJG9kZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5vZGQ7XG4gICAgfVxuXG4gICAgZ2V0ICRmaXJzdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5maXJzdDtcbiAgICB9XG5cbiAgICBnZXQgJGxhc3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQubGFzdDtcbiAgICB9XG5cbiAgICBnZXQgY3VycmVudEl0ZW1XaWRnZXRzICgpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50RWxlbWVudHMgPSBBcnJheS5mcm9tKHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbd2lkZ2V0LWlkXScpKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24odGhpcy5fY3VycmVudEl0ZW1XaWRnZXRzLCBjb21wb25lbnRFbGVtZW50cy5yZWR1Y2UoKHJlc3VsdCwgY29tcDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXN1bHRbY29tcC53aWRnZXQubmFtZV0gPSBjb21wLndpZGdldDtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sIHt9KSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHdtTGlzdEl0ZW0odmFsKSB7XG4gICAgICAgIHRoaXMuaXRlbSA9IHZhbDtcbiAgICB9XG4gICAgcHJpdmF0ZSBfdmlld1BhcmVudCA9IGluamVjdChMaXN0Q29tcG9uZW50LCB7b3B0aW9uYWw6IHRydWV9KTtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGluajogSW5qZWN0b3IsIGVsUmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIGFwcDogQXBwKSB7XG4gICAgICAgIHRoaXMudmlld0NvbnRhaW5lclJlZiA9IGluai5nZXQoVmlld0NvbnRhaW5lclJlZik7XG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudCA9IGVsUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMubGlzdENvbXBvbmVudCA9IHRoaXMuX3ZpZXdQYXJlbnQ7XG4gICAgICAgIC8vIHRoaXMuY29udGV4dCA9ICg8TmdGb3JPZkNvbnRleHQ8TGlzdEl0ZW1EaXJlY3RpdmU+Pig8YW55Pmluaikudmlldy5jb250ZXh0KTtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gKHRoaXMuaW5qIGFzIGFueSkuX2xWaWV3WzhdO1xuICAgICAgICAvL3RoaXMuY29udGV4dCA9ICh0aGlzLnZpZXdDb250YWluZXJSZWYgYXMgYW55KS5faG9zdExWaWV3LmZpbmQodCA9PiB0ICYmICEhdC4kaW1wbGljaXQpO1xuICAgICAgICB0aGlzLml0ZW1DbGFzc1dhdGNoZXIodGhpcy5saXN0Q29tcG9uZW50KTtcbiAgICAgICAgdGhpcy5kaXNhYmxlSXRlbVdhdGNoZXIodGhpcy5saXN0Q29tcG9uZW50KTtcbiAgICAgICAgJCh0aGlzLm5hdGl2ZUVsZW1lbnQpLmRhdGEoJ2xpc3RJdGVtQ29udGV4dCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVnaXN0ZXJXYXRjaChleHByZXNzaW9uOiBzdHJpbmcsIGNhbGxiYWNrOiBGdW5jdGlvbikge1xuICAgICAgICAvLyBSZW1vdmluZyBuZ0ZvciBjb250ZXh0IGFzIHRoZSBzYW1lIHByb3BlcnRpZXMgYXJlIGF2YWlsYmxlIG9uIGxpc3RpdGVtIHNjb3BlLlxuICAgICAgICAvLyBwYXNzaW5nIHZpZXdwYXJlbnQgY29udGV4dCBmb3IgYWNjZXNzaW5nIHZhcmliYWxlcyBhbmQgd2lkZ2V0cy5cbiAgICAgICAgLy9bQ1NQXTogZXhwcmVzc2lvbiB3aWxsIGJlIGdlbmVyYXRlZCBpbiB0aGUgY29tcG9uZW50IGFzIGUuZy4gJ2l0ZW0uY2xhc3NOYW1lJ1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLnN1YnNjcmliZSgkd2F0Y2goZXhwcmVzc2lvbiwgKHRoaXMubGlzdENvbXBvbmVudCBhcyBhbnkpLnZpZXdQYXJlbnQsIHRoaXMsIGNhbGxiYWNrKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpdGVtQ2xhc3NXYXRjaGVyKGxpc3RDb21wb25lbnQ6IExpc3RDb21wb25lbnQpIHtcbiAgICAgICAgaWYgKGxpc3RDb21wb25lbnQuYmluZGl0ZW1jbGFzcykge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlcldhdGNoKGxpc3RDb21wb25lbnQuYmluZGl0ZW1jbGFzcywgbnYgPT4gdGhpcy5pdGVtQ2xhc3MgPSBudiB8fCAnJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1DbGFzcyA9IGxpc3RDb21wb25lbnQuaXRlbWNsYXNzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkaXNhYmxlSXRlbVdhdGNoZXIoJGxpc3Q6IExpc3RDb21wb25lbnQpIHtcbiAgICAgICAgaWYgKCRsaXN0LmJpbmRkaXNhYmxlaXRlbSkge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlcldhdGNoKCRsaXN0LmJpbmRkaXNhYmxlaXRlbSwgbnYgPT4gdGhpcy5kaXNhYmxlSXRlbSA9IG52IHx8IGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZUl0ZW0gPSAkbGlzdC5kaXNhYmxlaXRlbSB8fCBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYm91bmRFZGl0SGFuZGxlcjogKGV2ZW50OiBFdmVudCkgPT4gdm9pZDtcbiAgICBwcml2YXRlIGJvdW5kRGVsZXRlSGFuZGxlcjogKGV2ZW50OiBFdmVudCkgPT4gdm9pZDtcbiAgICBwcml2YXRlIGJvdW5kTW91c2VFbnRlckhhbmRsZXI6IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG4gICAgcHJpdmF0ZSBib3VuZE1vdXNlTGVhdmVIYW5kbGVyOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkO1xuXG4gICAgcHJpdmF0ZSBzZXRVcENVREhhbmRsZXJzKCkge1xuICAgICAgICBjb25zdCAkZWRpdEl0ZW0gPSB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmVkaXQtbGlzdC1pdGVtJyk7XG4gICAgICAgIGNvbnN0ICRkZWxldGVJdGVtID0gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kZWxldGUtbGlzdC1pdGVtJyk7XG5cbiAgICAgICAgaWYgKCRlZGl0SXRlbSkge1xuICAgICAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBTdG9yZSBib3VuZCBoYW5kbGVyIGZvciBjbGVhbnVwXG4gICAgICAgICAgICB0aGlzLmJvdW5kRWRpdEhhbmRsZXIgPSAoZXZ0OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdENvbXBvbmVudC51cGRhdGUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBUcmlnZ2VyZWQgb24gY2xpY2sgb2YgZWRpdCBhY3Rpb25cbiAgICAgICAgICAgICRlZGl0SXRlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuYm91bmRFZGl0SGFuZGxlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGRlbGV0ZUl0ZW0pIHtcbiAgICAgICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogU3RvcmUgYm91bmQgaGFuZGxlciBmb3IgY2xlYW51cFxuICAgICAgICAgICAgdGhpcy5ib3VuZERlbGV0ZUhhbmRsZXIgPSAoZXZ0OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdENvbXBvbmVudC5kZWxldGUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBUcmlnZ2VyZWQgb24gY2xpY2sgb2YgZGVsZXRlIGFjdGlvblxuICAgICAgICAgICAgJGRlbGV0ZUl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmJvdW5kRGVsZXRlSGFuZGxlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmxpc3RDb21wb25lbnQubW91c2VFbnRlckNCKSB7XG4gICAgICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IFN0b3JlIGJvdW5kIGhhbmRsZXIgZm9yIGNsZWFudXBcbiAgICAgICAgICAgIHRoaXMuYm91bmRNb3VzZUVudGVySGFuZGxlciA9ICgkZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0Q29tcG9uZW50Lmludm9rZUV2ZW50Q2FsbGJhY2soJ21vdXNlZW50ZXInLCB7d2lkZ2V0OiB0aGlzLCAkZXZlbnR9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIHRoaXMuYm91bmRNb3VzZUVudGVySGFuZGxlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubGlzdENvbXBvbmVudC5tb3VzZUxlYXZlQ0IpIHtcbiAgICAgICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogU3RvcmUgYm91bmQgaGFuZGxlciBmb3IgY2xlYW51cFxuICAgICAgICAgICAgdGhpcy5ib3VuZE1vdXNlTGVhdmVIYW5kbGVyID0gKCRldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RDb21wb25lbnQuaW52b2tlRXZlbnRDYWxsYmFjaygnbW91c2VsZWF2ZScsIHt3aWRnZXQ6IHRoaXMsICRldmVudH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgdGhpcy5ib3VuZE1vdXNlTGVhdmVIYW5kbGVyKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhZGRpbmcgaXRlbSBhdHRyaWJ1dGUgb24gZXZlcnkgbGlzdCBpdGVtXG4gICAgICAgICQodGhpcy5uYXRpdmVFbGVtZW50KS5hdHRyKCdsaXN0aXRlbWluZGV4JywgdGhpcy4kaW5kZXgpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5zZXRVcENVREhhbmRsZXJzKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudEVsZW1lbnRzID0gQXJyYXkuZnJvbSh0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW3dpZGdldC1pZF0nKSk7XG4gICAgICAgIGNvbXBvbmVudEVsZW1lbnRzLmZvckVhY2goKGNvbXBvbmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZihjb21wb25lbnQud2lkZ2V0IGluc3RhbmNlb2YgQmFzZUZvcm1Db21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICBpZighY29tcG9uZW50LndpZGdldC4kYXR0cnMuZ2V0KCdkYXRhdmFsdWVzb3VyY2UuYmluZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC53aWRnZXQuZGF0YXZhbHVlc291cmNlID0gdGhpcy5saXN0Q29tcG9uZW50WydkYXRhc291cmNlJ107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzXG4gICAgICAgIGlmICh0aGlzLmJvdW5kTW91c2VFbnRlckhhbmRsZXIgJiYgdGhpcy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgdGhpcy5ib3VuZE1vdXNlRW50ZXJIYW5kbGVyKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBTaWxlbnRseSBoYW5kbGUgY2xlYW51cCBlcnJvcnNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYm91bmRNb3VzZUVudGVySGFuZGxlciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYm91bmRNb3VzZUxlYXZlSGFuZGxlciAmJiB0aGlzLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCB0aGlzLmJvdW5kTW91c2VMZWF2ZUhhbmRsZXIpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIFNpbGVudGx5IGhhbmRsZSBjbGVhbnVwIGVycm9yc1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5ib3VuZE1vdXNlTGVhdmVIYW5kbGVyID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0ICRlZGl0SXRlbSA9IHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZWRpdC1saXN0LWl0ZW0nKTtcbiAgICAgICAgICAgIGlmICgkZWRpdEl0ZW0gJiYgdGhpcy5ib3VuZEVkaXRIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgJGVkaXRJdGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5ib3VuZEVkaXRIYW5kbGVyKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNpbGVudGx5IGhhbmRsZSBjbGVhbnVwIGVycm9yc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmJvdW5kRWRpdEhhbmRsZXIgPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCAkZGVsZXRlSXRlbSA9IHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZGVsZXRlLWxpc3QtaXRlbScpO1xuICAgICAgICAgICAgaWYgKCRkZWxldGVJdGVtICYmIHRoaXMuYm91bmREZWxldGVIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgJGRlbGV0ZUl0ZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmJvdW5kRGVsZXRlSGFuZGxlcik7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBTaWxlbnRseSBoYW5kbGUgY2xlYW51cCBlcnJvcnNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5ib3VuZERlbGV0ZUhhbmRsZXIgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDbGVhciBjdXJyZW50SXRlbVdpZGdldHMgY2FjaGVcbiAgICAgICAgLy8gVGhlIF9jdXJyZW50SXRlbVdpZGdldHMgb2JqZWN0IGFjY3VtdWxhdGVzIHJlZmVyZW5jZXMgdG8gYWxsIGNoaWxkIHdpZGdldHNcbiAgICAgICAgLy8gd2hpY2ggcHJldmVudHMgdGhlbSBmcm9tIGJlaW5nIGdhcmJhZ2UgY29sbGVjdGVkXG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50SXRlbVdpZGdldHMpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuX2N1cnJlbnRJdGVtV2lkZ2V0cykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jdXJyZW50SXRlbVdpZGdldHNba2V5XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudEl0ZW1XaWRnZXRzID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ2xlYXIgY29udGV4dCB0byByZWxlYXNlIHJlZmVyZW5jZXNcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dCkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5jb250ZXh0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuY29udGV4dFtrZXldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDbGVhciBWaWV3Q29udGFpbmVyUmVmIHJlZmVyZW5jZVxuICAgICAgICBpZiAodGhpcy52aWV3Q29udGFpbmVyUmVmKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDb21wbGV0ZSB0aGUgZGVzdHJveSBzdWJqZWN0XG4gICAgICAgIGlmICh0aGlzLmRlc3Ryb3kpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRlc3Ryb3kuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveS5uZXh0KG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gU2lsZW50bHkgaGFuZGxlIGNsZWFudXAgZXJyb3JzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3kgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19