@wavemaker/app-ng-runtime 11.14.1-rc.6311 → 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 (407) 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 +323 -28
  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 +1 -1
  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 +319 -26
  30. package/components/base/fesm2022/index.mjs.map +1 -1
  31. package/components/base/widgets/common/base/base-container.component.d.ts +3 -2
  32. package/components/base/widgets/common/base/base-field-validations.d.ts +1 -0
  33. package/components/base/widgets/common/base/custom-widget-container.directive.d.ts +3 -2
  34. package/components/base/widgets/common/base/dataset-aware-nav.component.d.ts +6 -2
  35. package/components/base/widgets/common/base/partial-container.directive.d.ts +3 -2
  36. package/components/base/widgets/common/item-template/item-template.directive.d.ts +3 -2
  37. package/components/base/widgets/common/lazy-load/lazy-load.directive.d.ts +1 -1
  38. package/components/base/widgets/common/partial-param/partial-param.directive.d.ts +3 -2
  39. package/components/base/widgets/common/pull-to-refresh/pull-to-refresh.d.ts +3 -2
  40. package/components/basic/anchor/bundles/index.umd.js +13 -1
  41. package/components/basic/anchor/esm2022/anchor.component.mjs +14 -2
  42. package/components/basic/anchor/fesm2022/index.mjs +13 -1
  43. package/components/basic/anchor/fesm2022/index.mjs.map +1 -1
  44. package/components/basic/html/bundles/index.umd.js +13 -1
  45. package/components/basic/html/esm2022/html.directive.mjs +14 -2
  46. package/components/basic/html/fesm2022/index.mjs +13 -1
  47. package/components/basic/html/fesm2022/index.mjs.map +1 -1
  48. package/components/basic/label/bundles/index.umd.js +17 -1
  49. package/components/basic/label/esm2022/label.directive.mjs +18 -2
  50. package/components/basic/label/fesm2022/index.mjs +17 -1
  51. package/components/basic/label/fesm2022/index.mjs.map +1 -1
  52. package/components/basic/label/label.directive.d.ts +3 -2
  53. package/components/basic/progress/progress-circle/bundles/index.umd.js +10 -0
  54. package/components/basic/progress/progress-circle/esm2022/progress-circle.component.mjs +11 -1
  55. package/components/basic/progress/progress-circle/fesm2022/index.mjs +10 -0
  56. package/components/basic/progress/progress-circle/fesm2022/index.mjs.map +1 -1
  57. package/components/basic/progress/progress-circle/progress-circle.component.d.ts +3 -2
  58. package/components/basic/search/bundles/index.umd.js +40 -12
  59. package/components/basic/search/esm2022/scrollable.directive.mjs +11 -2
  60. package/components/basic/search/esm2022/search.component.mjs +31 -12
  61. package/components/basic/search/fesm2022/index.mjs +40 -12
  62. package/components/basic/search/fesm2022/index.mjs.map +1 -1
  63. package/components/basic/search/scrollable.directive.d.ts +4 -2
  64. package/components/basic/search/search.component.d.ts +3 -2
  65. package/components/basic/spinner/bundles/index.umd.js +9 -1
  66. package/components/basic/spinner/esm2022/spinner.component.mjs +10 -2
  67. package/components/basic/spinner/fesm2022/index.mjs +9 -1
  68. package/components/basic/spinner/fesm2022/index.mjs.map +1 -1
  69. package/components/basic/spinner/spinner.component.d.ts +4 -2
  70. package/components/chart/bundles/index.umd.js +21 -3
  71. package/components/chart/esm2022/chart.component.mjs +22 -4
  72. package/components/chart/fesm2022/index.mjs +21 -3
  73. package/components/chart/fesm2022/index.mjs.map +1 -1
  74. package/components/containers/accordion/accordion-pane/accordion-pane.component.d.ts +3 -2
  75. package/components/containers/accordion/accordion.directive.d.ts +5 -2
  76. package/components/containers/accordion/bundles/index.umd.js +49 -2
  77. package/components/containers/accordion/esm2022/accordion-pane/accordion-pane.component.mjs +10 -1
  78. package/components/containers/accordion/esm2022/accordion.directive.mjs +41 -3
  79. package/components/containers/accordion/fesm2022/index.mjs +49 -2
  80. package/components/containers/accordion/fesm2022/index.mjs.map +1 -1
  81. package/components/containers/panel/bundles/index.umd.js +13 -0
  82. package/components/containers/panel/esm2022/panel.component.mjs +14 -1
  83. package/components/containers/panel/fesm2022/index.mjs +13 -0
  84. package/components/containers/panel/fesm2022/index.mjs.map +1 -1
  85. package/components/containers/panel/panel.component.d.ts +3 -2
  86. package/components/containers/tabs/bundles/index.umd.js +54 -2
  87. package/components/containers/tabs/esm2022/tab-pane/tab-pane.component.mjs +10 -1
  88. package/components/containers/tabs/esm2022/tabs.component.mjs +46 -3
  89. package/components/containers/tabs/fesm2022/index.mjs +54 -2
  90. package/components/containers/tabs/fesm2022/index.mjs.map +1 -1
  91. package/components/containers/tabs/tab-pane/tab-pane.component.d.ts +3 -2
  92. package/components/containers/tabs/tabs.component.d.ts +5 -2
  93. package/components/containers/wizard/bundles/index.umd.js +47 -3
  94. package/components/containers/wizard/esm2022/wizard-step/wizard-step.component.mjs +16 -3
  95. package/components/containers/wizard/esm2022/wizard.component.mjs +33 -2
  96. package/components/containers/wizard/fesm2022/index.mjs +47 -3
  97. package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
  98. package/components/containers/wizard/wizard-step/wizard-step.component.d.ts +3 -2
  99. package/components/containers/wizard/wizard.component.d.ts +4 -2
  100. package/components/data/card/bundles/index.umd.js +17 -1
  101. package/components/data/card/card-content/card-content.component.d.ts +3 -2
  102. package/components/data/card/card.component.d.ts +4 -2
  103. package/components/data/card/esm2022/card-content/card-content.component.mjs +6 -1
  104. package/components/data/card/esm2022/card.component.mjs +13 -2
  105. package/components/data/card/fesm2022/index.mjs +17 -1
  106. package/components/data/card/fesm2022/index.mjs.map +1 -1
  107. package/components/data/form/bundles/index.umd.js +92 -0
  108. package/components/data/form/esm2022/form-action/form-action.directive.mjs +7 -1
  109. package/components/data/form/esm2022/form-field/form-field.directive.mjs +28 -1
  110. package/components/data/form/esm2022/form-widget.directive.mjs +8 -1
  111. package/components/data/form/esm2022/form.component.mjs +27 -1
  112. package/components/data/form/esm2022/live-actions/live-actions.directive.mjs +7 -1
  113. package/components/data/form/esm2022/live-filter/live-filter.directive.mjs +12 -1
  114. package/components/data/form/esm2022/live-form/live-form.directive.mjs +10 -1
  115. package/components/data/form/fesm2022/index.mjs +92 -0
  116. package/components/data/form/fesm2022/index.mjs.map +1 -1
  117. package/components/data/form/form-action/form-action.directive.d.ts +3 -2
  118. package/components/data/form/form-field/form-field.directive.d.ts +3 -2
  119. package/components/data/form/form-widget.directive.d.ts +3 -2
  120. package/components/data/form/live-actions/live-actions.directive.d.ts +3 -1
  121. package/components/data/form/live-filter/live-filter.directive.d.ts +3 -1
  122. package/components/data/form/live-form/live-form.directive.d.ts +3 -1
  123. package/components/data/list/bundles/index.umd.js +180 -17
  124. package/components/data/list/esm2022/list-item.directive.mjs +95 -11
  125. package/components/data/list/esm2022/list.component.mjs +87 -8
  126. package/components/data/list/fesm2022/index.mjs +180 -17
  127. package/components/data/list/fesm2022/index.mjs.map +1 -1
  128. package/components/data/list/list-item.directive.d.ts +7 -2
  129. package/components/data/list/list.component.d.ts +3 -0
  130. package/components/data/live-table/bundles/index.umd.js +13 -1
  131. package/components/data/live-table/esm2022/live-table.component.mjs +14 -2
  132. package/components/data/live-table/fesm2022/index.mjs +13 -1
  133. package/components/data/live-table/fesm2022/index.mjs.map +1 -1
  134. package/components/data/live-table/live-table.component.d.ts +4 -2
  135. package/components/data/pagination/bundles/index.umd.js +57 -4
  136. package/components/data/pagination/esm2022/pagination.component.mjs +58 -5
  137. package/components/data/pagination/fesm2022/index.mjs +57 -4
  138. package/components/data/pagination/fesm2022/index.mjs.map +1 -1
  139. package/components/data/pagination/pagination.component.d.ts +4 -2
  140. package/components/data/table/bundles/index.umd.js +311 -12
  141. package/components/data/table/esm2022/table-action/table-action.directive.mjs +8 -1
  142. package/components/data/table/esm2022/table-column/table-column.directive.mjs +107 -3
  143. package/components/data/table/esm2022/table-column-group/table-column-group.directive.mjs +9 -1
  144. package/components/data/table/esm2022/table-cud.directive.mjs +8 -2
  145. package/components/data/table/esm2022/table-filter.directive.mjs +12 -2
  146. package/components/data/table/esm2022/table-row/table-row.directive.mjs +8 -1
  147. package/components/data/table/esm2022/table-row-action/table-row-action.directive.mjs +8 -1
  148. package/components/data/table/esm2022/table.component.mjs +159 -9
  149. package/components/data/table/fesm2022/index.mjs +311 -12
  150. package/components/data/table/fesm2022/index.mjs.map +1 -1
  151. package/components/data/table/table-action/table-action.directive.d.ts +3 -2
  152. package/components/data/table/table-column/table-column.directive.d.ts +3 -2
  153. package/components/data/table/table-column-group/table-column-group.directive.d.ts +3 -2
  154. package/components/data/table/table-cud.directive.d.ts +3 -1
  155. package/components/data/table/table-filter.directive.d.ts +3 -1
  156. package/components/data/table/table-row/table-row.directive.d.ts +3 -2
  157. package/components/data/table/table-row-action/table-row-action.directive.d.ts +3 -2
  158. package/components/data/table/table.component.d.ts +2 -2
  159. package/components/dialogs/alert-dialog/alert-dialog.component.d.ts +3 -2
  160. package/components/dialogs/alert-dialog/bundles/index.umd.js +5 -0
  161. package/components/dialogs/alert-dialog/esm2022/alert-dialog.component.mjs +6 -1
  162. package/components/dialogs/alert-dialog/fesm2022/index.mjs +5 -0
  163. package/components/dialogs/alert-dialog/fesm2022/index.mjs.map +1 -1
  164. package/components/dialogs/confirm-dialog/bundles/index.umd.js +5 -0
  165. package/components/dialogs/confirm-dialog/confirm-dialog.component.d.ts +3 -2
  166. package/components/dialogs/confirm-dialog/esm2022/confirm-dialog.component.mjs +6 -1
  167. package/components/dialogs/confirm-dialog/fesm2022/index.mjs +5 -0
  168. package/components/dialogs/confirm-dialog/fesm2022/index.mjs.map +1 -1
  169. package/components/dialogs/default/bundles/index.umd.js +15 -2
  170. package/components/dialogs/default/dialog-body/dialog-body.directive.d.ts +4 -2
  171. package/components/dialogs/default/esm2022/dialog-body/dialog-body.directive.mjs +16 -3
  172. package/components/dialogs/default/fesm2022/index.mjs +15 -2
  173. package/components/dialogs/default/fesm2022/index.mjs.map +1 -1
  174. package/components/dialogs/design-dialog/bundles/index.umd.js +7 -0
  175. package/components/dialogs/design-dialog/dialog.component.d.ts +3 -2
  176. package/components/dialogs/design-dialog/esm2022/dialog.component.mjs +8 -1
  177. package/components/dialogs/design-dialog/fesm2022/index.mjs +7 -0
  178. package/components/dialogs/design-dialog/fesm2022/index.mjs.map +1 -1
  179. package/components/dialogs/iframe-dialog/bundles/index.umd.js +5 -0
  180. package/components/dialogs/iframe-dialog/esm2022/iframe-dialog.component.mjs +6 -1
  181. package/components/dialogs/iframe-dialog/fesm2022/index.mjs +5 -0
  182. package/components/dialogs/iframe-dialog/fesm2022/index.mjs.map +1 -1
  183. package/components/dialogs/iframe-dialog/iframe-dialog.component.d.ts +3 -2
  184. package/components/dialogs/partial-dialog/bundles/index.umd.js +23 -3
  185. package/components/dialogs/partial-dialog/esm2022/partial-dialog.component.mjs +24 -4
  186. package/components/dialogs/partial-dialog/fesm2022/index.mjs +23 -3
  187. package/components/dialogs/partial-dialog/fesm2022/index.mjs.map +1 -1
  188. package/components/dialogs/partial-dialog/partial-dialog.component.d.ts +4 -2
  189. package/components/input/base-form/base-form.component.d.ts +4 -2
  190. package/components/input/base-form/bundles/index.umd.js +16 -2
  191. package/components/input/base-form/esm2022/base-form.component.mjs +17 -3
  192. package/components/input/base-form/fesm2022/index.mjs +16 -2
  193. package/components/input/base-form/fesm2022/index.mjs.map +1 -1
  194. package/components/input/base-form-custom/base-form-custom.component.d.ts +3 -2
  195. package/components/input/base-form-custom/bundles/index.umd.js +13 -2
  196. package/components/input/base-form-custom/esm2022/base-form-custom.component.mjs +14 -3
  197. package/components/input/base-form-custom/fesm2022/index.mjs +13 -2
  198. package/components/input/base-form-custom/fesm2022/index.mjs.map +1 -1
  199. package/components/input/checkbox/bundles/index.umd.js +7 -0
  200. package/components/input/checkbox/checkbox.component.d.ts +3 -2
  201. package/components/input/checkbox/esm2022/checkbox.component.mjs +8 -1
  202. package/components/input/checkbox/fesm2022/index.mjs +7 -0
  203. package/components/input/checkbox/fesm2022/index.mjs.map +1 -1
  204. package/components/input/checkboxset/bundles/index.umd.js +18 -2
  205. package/components/input/checkboxset/checkboxset.component.d.ts +4 -2
  206. package/components/input/checkboxset/esm2022/checkboxset.component.mjs +19 -3
  207. package/components/input/checkboxset/fesm2022/index.mjs +18 -2
  208. package/components/input/checkboxset/fesm2022/index.mjs.map +1 -1
  209. package/components/input/chips/bundles/index.umd.js +45 -5
  210. package/components/input/chips/chips.component.d.ts +3 -2
  211. package/components/input/chips/esm2022/chips.component.mjs +46 -6
  212. package/components/input/chips/fesm2022/index.mjs +45 -5
  213. package/components/input/chips/fesm2022/index.mjs.map +1 -1
  214. package/components/input/color-picker/bundles/index.umd.js +8 -0
  215. package/components/input/color-picker/color-picker.component.d.ts +3 -2
  216. package/components/input/color-picker/esm2022/color-picker.component.mjs +9 -1
  217. package/components/input/color-picker/fesm2022/index.mjs +8 -0
  218. package/components/input/color-picker/fesm2022/index.mjs.map +1 -1
  219. package/components/input/composite/bundles/index.umd.js +10 -1
  220. package/components/input/composite/composite.directive.d.ts +3 -2
  221. package/components/input/composite/esm2022/composite.directive.mjs +11 -2
  222. package/components/input/composite/fesm2022/index.mjs +10 -1
  223. package/components/input/composite/fesm2022/index.mjs.map +1 -1
  224. package/components/input/currency/bundles/index.umd.js +7 -0
  225. package/components/input/currency/currency.component.d.ts +3 -2
  226. package/components/input/currency/esm2022/currency.component.mjs +8 -1
  227. package/components/input/currency/fesm2022/index.mjs +7 -0
  228. package/components/input/currency/fesm2022/index.mjs.map +1 -1
  229. package/components/input/dataset-aware-form/bundles/index.umd.js +26 -2
  230. package/components/input/dataset-aware-form/esm2022/dataset-aware-form.component.mjs +27 -3
  231. package/components/input/dataset-aware-form/fesm2022/index.mjs +26 -2
  232. package/components/input/dataset-aware-form/fesm2022/index.mjs.map +1 -1
  233. package/components/input/epoch/date/bundles/index.umd.js +22 -0
  234. package/components/input/epoch/date/date.component.d.ts +1 -0
  235. package/components/input/epoch/date/esm2022/date.component.mjs +23 -1
  236. package/components/input/epoch/date/fesm2022/index.mjs +22 -0
  237. package/components/input/epoch/date/fesm2022/index.mjs.map +1 -1
  238. package/components/input/file-upload/bundles/index.umd.js +25 -8
  239. package/components/input/file-upload/esm2022/file-upload.component.mjs +26 -9
  240. package/components/input/file-upload/fesm2022/index.mjs +25 -8
  241. package/components/input/file-upload/fesm2022/index.mjs.map +1 -1
  242. package/components/input/file-upload/file-upload.component.d.ts +3 -0
  243. package/components/input/number/bundles/index.umd.js +8 -0
  244. package/components/input/number/esm2022/number.component.mjs +9 -1
  245. package/components/input/number/fesm2022/index.mjs +8 -0
  246. package/components/input/number/fesm2022/index.mjs.map +1 -1
  247. package/components/input/number/number.component.d.ts +3 -2
  248. package/components/input/radioset/bundles/index.umd.js +18 -2
  249. package/components/input/radioset/esm2022/radioset.component.mjs +19 -3
  250. package/components/input/radioset/fesm2022/index.mjs +18 -2
  251. package/components/input/radioset/fesm2022/index.mjs.map +1 -1
  252. package/components/input/radioset/radioset.component.d.ts +4 -2
  253. package/components/input/rating/bundles/index.umd.js +10 -0
  254. package/components/input/rating/esm2022/rating.component.mjs +11 -1
  255. package/components/input/rating/fesm2022/index.mjs +10 -0
  256. package/components/input/rating/fesm2022/index.mjs.map +1 -1
  257. package/components/input/rating/rating.component.d.ts +3 -2
  258. package/components/input/select/bundles/index.umd.js +6 -0
  259. package/components/input/select/esm2022/select.component.mjs +7 -1
  260. package/components/input/select/fesm2022/index.mjs +6 -0
  261. package/components/input/select/fesm2022/index.mjs.map +1 -1
  262. package/components/input/select/select.component.d.ts +3 -2
  263. package/components/input/slider/bundles/index.umd.js +10 -0
  264. package/components/input/slider/esm2022/slider.component.mjs +11 -1
  265. package/components/input/slider/fesm2022/index.mjs +10 -0
  266. package/components/input/slider/fesm2022/index.mjs.map +1 -1
  267. package/components/input/slider/slider.component.d.ts +3 -2
  268. package/components/input/switch/bundles/index.umd.js +22 -2
  269. package/components/input/switch/esm2022/switch.component.mjs +23 -3
  270. package/components/input/switch/fesm2022/index.mjs +22 -2
  271. package/components/input/switch/fesm2022/index.mjs.map +1 -1
  272. package/components/input/switch/switch.component.d.ts +3 -2
  273. package/components/input/text/bundles/index.umd.js +36 -0
  274. package/components/input/text/esm2022/input-calendar/input-calendar.component.mjs +8 -1
  275. package/components/input/text/esm2022/input-color/input-color.component.mjs +8 -1
  276. package/components/input/text/esm2022/input-email/input-email.component.mjs +8 -1
  277. package/components/input/text/esm2022/input-number/input-number.component.mjs +8 -1
  278. package/components/input/text/esm2022/input-text/input-text.component.mjs +9 -1
  279. package/components/input/text/fesm2022/index.mjs +36 -0
  280. package/components/input/text/fesm2022/index.mjs.map +1 -1
  281. package/components/input/text/input-calendar/input-calendar.component.d.ts +3 -2
  282. package/components/input/text/input-color/input-color.component.d.ts +3 -2
  283. package/components/input/text/input-email/input-email.component.d.ts +3 -2
  284. package/components/input/text/input-number/input-number.component.d.ts +3 -2
  285. package/components/input/text/input-text/input-text.component.d.ts +3 -2
  286. package/components/input/textarea/bundles/index.umd.js +7 -0
  287. package/components/input/textarea/esm2022/textarea.component.mjs +8 -1
  288. package/components/input/textarea/fesm2022/index.mjs +7 -0
  289. package/components/input/textarea/fesm2022/index.mjs.map +1 -1
  290. package/components/input/textarea/textarea.component.d.ts +3 -2
  291. package/components/navigation/menu/bundles/index.umd.js +55 -6
  292. package/components/navigation/menu/esm2022/menu-adapator.component.mjs +17 -3
  293. package/components/navigation/menu/esm2022/menu.component.mjs +10 -3
  294. package/components/navigation/menu/esm2022/nav/nav-item/nav-item.directive.mjs +6 -1
  295. package/components/navigation/menu/esm2022/nav/nav.component.mjs +11 -1
  296. package/components/navigation/menu/esm2022/nav/navigation-control.directive.mjs +16 -3
  297. package/components/navigation/menu/fesm2022/index.mjs +55 -6
  298. package/components/navigation/menu/fesm2022/index.mjs.map +1 -1
  299. package/components/navigation/menu/menu-adapator.component.d.ts +4 -2
  300. package/components/navigation/menu/nav/nav-item/nav-item.directive.d.ts +3 -2
  301. package/components/navigation/menu/nav/nav.component.d.ts +3 -2
  302. package/components/navigation/menu/nav/navigation-control.directive.d.ts +4 -2
  303. package/components/navigation/navbar/bundles/index.umd.js +5 -0
  304. package/components/navigation/navbar/esm2022/navbar.component.mjs +6 -1
  305. package/components/navigation/navbar/fesm2022/index.mjs +5 -0
  306. package/components/navigation/navbar/fesm2022/index.mjs.map +1 -1
  307. package/components/navigation/navbar/navbar.component.d.ts +3 -2
  308. package/components/navigation/popover/bundles/index.umd.js +65 -13
  309. package/components/navigation/popover/esm2022/popover.component.mjs +63 -11
  310. package/components/navigation/popover/fesm2022/index.mjs +62 -10
  311. package/components/navigation/popover/fesm2022/index.mjs.map +1 -1
  312. package/components/navigation/popover/popover.component.d.ts +11 -3
  313. package/components/page/default/bundles/index.umd.js +20 -2
  314. package/components/page/default/esm2022/layout.directive.mjs +9 -1
  315. package/components/page/default/esm2022/page-content/page-content.component.mjs +13 -3
  316. package/components/page/default/fesm2022/index.mjs +20 -2
  317. package/components/page/default/fesm2022/index.mjs.map +1 -1
  318. package/components/page/default/layout.directive.d.ts +3 -2
  319. package/components/page/default/page-content/page-content.component.d.ts +3 -2
  320. package/components/page/left-panel/bundles/index.umd.js +16 -0
  321. package/components/page/left-panel/esm2022/left-panel.directive.mjs +17 -1
  322. package/components/page/left-panel/fesm2022/index.mjs +16 -0
  323. package/components/page/left-panel/fesm2022/index.mjs.map +1 -1
  324. package/components/page/left-panel/left-panel.directive.d.ts +3 -2
  325. package/components/page/top-nav/bundles/index.umd.js +2 -1
  326. package/components/page/top-nav/esm2022/top-nav.props.mjs +3 -2
  327. package/components/page/top-nav/fesm2022/index.mjs +2 -1
  328. package/components/page/top-nav/fesm2022/index.mjs.map +1 -1
  329. package/components/prefab/bundles/index.umd.js +4 -0
  330. package/components/prefab/esm2022/prefab.directive.mjs +5 -1
  331. package/components/prefab/fesm2022/index.mjs +4 -0
  332. package/components/prefab/fesm2022/index.mjs.map +1 -1
  333. package/core/bundles/index.umd.js +391 -94
  334. package/core/esm2022/public_api.mjs +3 -3
  335. package/core/esm2022/services/viewport.service.mjs +24 -10
  336. package/core/esm2022/types/types.mjs +1 -1
  337. package/core/esm2022/utils/dom.mjs +18 -2
  338. package/core/esm2022/utils/event-notifier.mjs +5 -2
  339. package/core/esm2022/utils/lru-cache.mjs +16 -2
  340. package/core/esm2022/utils/utils.mjs +6 -2
  341. package/core/esm2022/utils/watcher.mjs +323 -81
  342. package/core/fesm2022/index.mjs +390 -96
  343. package/core/fesm2022/index.mjs.map +1 -1
  344. package/core/public_api.d.ts +2 -2
  345. package/core/services/viewport.service.d.ts +5 -2
  346. package/core/types/types.d.ts +1 -0
  347. package/core/utils/lru-cache.d.ts +6 -0
  348. package/core/utils/utils.d.ts +1 -0
  349. package/core/utils/watcher.d.ts +26 -5
  350. package/http/bundles/index.umd.js +31 -1
  351. package/http/esm2022/http.service.mjs +32 -2
  352. package/http/fesm2022/index.mjs +31 -1
  353. package/http/fesm2022/index.mjs.map +1 -1
  354. package/http/http.service.d.ts +6 -2
  355. package/npm-shrinkwrap.json +2 -2
  356. package/oAuth/bundles/index.umd.js +9 -0
  357. package/oAuth/esm2022/oAuth.service.mjs +10 -1
  358. package/oAuth/fesm2022/index.mjs +9 -0
  359. package/oAuth/fesm2022/index.mjs.map +1 -1
  360. package/oAuth/oAuth.service.d.ts +3 -1
  361. package/package-lock.json +2 -2
  362. package/package.json +1 -1
  363. package/runtime/base/bundles/index.umd.js +364 -30
  364. package/runtime/base/components/app-component/app.component.d.ts +4 -0
  365. package/runtime/base/components/prefab-preview.component.d.ts +5 -2
  366. package/runtime/base/directives/accessroles.directive.d.ts +4 -3
  367. package/runtime/base/directives/prefab.directive.d.ts +3 -2
  368. package/runtime/base/esm2022/components/app-component/app.component.mjs +40 -9
  369. package/runtime/base/esm2022/components/base-custom-widget.component.mjs +33 -2
  370. package/runtime/base/esm2022/components/base-layout.component.mjs +7 -1
  371. package/runtime/base/esm2022/components/base-page.component.mjs +36 -3
  372. package/runtime/base/esm2022/components/base-partial.component.mjs +37 -3
  373. package/runtime/base/esm2022/components/base-prefab.component.mjs +32 -3
  374. package/runtime/base/esm2022/components/base-spa-page.component.mjs +37 -3
  375. package/runtime/base/esm2022/components/prefab-preview.component.mjs +23 -4
  376. package/runtime/base/esm2022/directives/accessroles.directive.mjs +11 -2
  377. package/runtime/base/esm2022/directives/prefab.directive.mjs +9 -1
  378. package/runtime/base/esm2022/services/app.manager.service.mjs +37 -10
  379. package/runtime/base/esm2022/services/app.service.mjs +34 -2
  380. package/runtime/base/esm2022/services/dynamic-component-ref-provider.service.mjs +4 -1
  381. package/runtime/base/esm2022/services/pipe-provider.service.mjs +7 -4
  382. package/runtime/base/esm2022/services/spinner.service.mjs +15 -1
  383. package/runtime/base/esm2022/util/fragment-monitor.mjs +23 -2
  384. package/runtime/base/fesm2022/index.mjs +365 -31
  385. package/runtime/base/fesm2022/index.mjs.map +1 -1
  386. package/runtime/base/services/app.manager.service.d.ts +6 -1
  387. package/runtime/base/services/app.service.d.ts +12 -2
  388. package/runtime/base/services/dynamic-component-ref-provider.service.d.ts +2 -1
  389. package/runtime/base/services/spinner.service.d.ts +3 -1
  390. package/runtime/base/util/fragment-monitor.d.ts +6 -0
  391. package/runtime/dynamic/bundles/index.umd.js +5 -0
  392. package/runtime/dynamic/esm2022/app/components/page-wrapper.component.mjs +6 -1
  393. package/runtime/dynamic/fesm2022/index.mjs +5 -0
  394. package/runtime/dynamic/fesm2022/index.mjs.map +1 -1
  395. package/scripts/datatable/datatable.js +100 -14
  396. package/security/bundles/index.umd.js +41 -2
  397. package/security/esm2022/security.service.mjs +42 -3
  398. package/security/fesm2022/index.mjs +41 -2
  399. package/security/fesm2022/index.mjs.map +1 -1
  400. package/security/security.service.d.ts +5 -2
  401. package/variables/bundles/index.umd.js +50 -6
  402. package/variables/esm2022/manager/action/notification-action.manager.mjs +18 -3
  403. package/variables/esm2022/manager/variable/base-variable.manager.mjs +15 -2
  404. package/variables/esm2022/manager/variable/web-socket-variable.manager.mjs +13 -3
  405. package/variables/esm2022/service/variables.service.mjs +8 -2
  406. package/variables/fesm2022/index.mjs +50 -6
  407. package/variables/fesm2022/index.mjs.map +1 -1
@@ -81,10 +81,13 @@
81
81
  this.appVariablesLoaded = false;
82
82
  this.appVariablesFired = false;
83
83
  this._noRedirect = false;
84
+ this.appSubscriptions = []; // MEMORY LEAK FIX: Track subscriptions
84
85
  // register method to invoke on session timeout
85
- this.$http.registerOnSessionTimeout(this.handle401.bind(this));
86
+ // MEMORY LEAK FIX: Store unsubscribe function for cleanup
87
+ this.sessionTimeoutUnsubscribe = this.$http.registerOnSessionTimeout(this.handle401.bind(this));
86
88
  this.$variables.registerDependency('appManager', this);
87
- this.$app.subscribe('toggle-variable-state', (data) => {
89
+ // MEMORY LEAK FIX: Store subscription unsubscribe functions
90
+ this.appSubscriptions.push(this.$app.subscribe('toggle-variable-state', (data) => {
88
91
  const variable = data.variable, active = data.active;
89
92
  if (!lodashEs.isEmpty(lodashEs.trim(variable.spinnerContext))) {
90
93
  if (active) {
@@ -109,8 +112,8 @@
109
112
  this.$spinner.hide(variable._spinnerId.shift());
110
113
  }
111
114
  }
112
- });
113
- this.$app.subscribe('userLoggedIn', () => {
115
+ }));
116
+ this.appSubscriptions.push(this.$app.subscribe('userLoggedIn', () => {
114
117
  this.setLandingPage();
115
118
  if (this.lastLoggedUserId) {
116
119
  this.$security.getConfig(config => {
@@ -119,11 +122,11 @@
119
122
  }
120
123
  }, null);
121
124
  }
122
- });
123
- this.$app.subscribe('userLoggedOut', () => this.setLandingPage().then(() => {
124
- this.$app.clearPageCache();
125
125
  }));
126
- this.$app.subscribe('http401', (d = {}) => this.handle401(d.page, d.options));
126
+ this.appSubscriptions.push(this.$app.subscribe('userLoggedOut', () => this.setLandingPage().then(() => {
127
+ this.$app.clearPageCache();
128
+ })));
129
+ this.appSubscriptions.push(this.$app.subscribe('http401', (d = {}) => this.handle401(d.page, d.options)));
127
130
  }
128
131
  /**
129
132
  * On session timeout, if the session timeout config is set to a dialog, then open login dialog
@@ -523,12 +526,36 @@
523
526
  // Apply restored modes
524
527
  this.$app.setMode(storedModes);
525
528
  // Listener for postMessage-based mode changes
526
- window.addEventListener('message', (event) => {
529
+ // MEMORY LEAK FIX: Store bound function reference for cleanup
530
+ this.windowMessageListener = (event) => {
527
531
  const { key, modes, shouldPersist } = event.data || {};
528
532
  if (key === 'switch-mode' && modes) {
529
533
  this.$app.setMode(modes, !shouldPersist);
530
534
  }
535
+ };
536
+ window.addEventListener('message', this.windowMessageListener);
537
+ }
538
+ ngOnDestroy() {
539
+ // MEMORY LEAK FIX: Unsubscribe from all app subscriptions
540
+ this.appSubscriptions.forEach(unsubscribe => {
541
+ if (unsubscribe) {
542
+ unsubscribe();
543
+ }
531
544
  });
545
+ this.appSubscriptions = [];
546
+ // MEMORY LEAK FIX: Unsubscribe from session timeout
547
+ if (this.sessionTimeoutUnsubscribe) {
548
+ this.sessionTimeoutUnsubscribe();
549
+ this.sessionTimeoutUnsubscribe = null;
550
+ }
551
+ // MEMORY LEAK FIX: Remove window message listener
552
+ if (this.windowMessageListener) {
553
+ window.removeEventListener('message', this.windowMessageListener);
554
+ this.windowMessageListener = null;
555
+ }
556
+ // MEMORY LEAK FIX: Clear references
557
+ this.templates = null;
558
+ this.lastLoggedUserId = null;
532
559
  }
533
560
  static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: AppManagerService, deps: [{ token: i1__namespace.AbstractHttpService }, { token: i2__namespace.SecurityService }, { token: i1__namespace.AbstractDialogService }, { token: i1$1__namespace.Router }, { token: i1__namespace.App }, { token: i4__namespace.VariablesService }, { token: i4__namespace.MetadataService }, { token: i1__namespace.AbstractSpinnerService }, { token: i1__namespace.AbstractI18nService }, { token: i5__namespace.DatePipe }], target: i0__namespace.ɵɵFactoryTarget.Injectable }); }
534
561
  static { this.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: AppManagerService }); }
@@ -654,11 +681,32 @@
654
681
  }
655
682
  init() {
656
683
  // console.log(`inside fragmentMonitor: Page-${(this as any).pageName}, Partial-${(this as any).partialName}`);
657
- this.viewInit$.subscribe(i1.noop, i1.noop, () => {
684
+ // MEMORY LEAK FIX: Store subscription reference for cleanup
685
+ this.viewInitSubscription = this.viewInit$.subscribe(i1.noop, i1.noop, () => {
658
686
  this.isViewInitialized = true;
659
687
  this.isReady();
660
688
  });
661
689
  }
690
+ /**
691
+ * MEMORY LEAK FIX: Clean up FragmentMonitor resources
692
+ * Should be called from implementing class's ngOnDestroy
693
+ */
694
+ cleanupFragmentMonitor() {
695
+ // MEMORY LEAK FIX: Unsubscribe from viewInit$ subscription
696
+ if (this.viewInitSubscription) {
697
+ this.viewInitSubscription.unsubscribe();
698
+ this.viewInitSubscription = null;
699
+ }
700
+ // MEMORY LEAK FIX: Complete Subjects to release subscriptions (if not already completed)
701
+ if (this.viewInit$ && !this.viewInit$.closed) {
702
+ this.viewInit$.complete();
703
+ }
704
+ this.viewInit$ = null;
705
+ if (this.fragmentsLoaded$ && !this.fragmentsLoaded$.closed) {
706
+ this.fragmentsLoaded$.complete();
707
+ }
708
+ this.fragmentsLoaded$ = null;
709
+ }
662
710
  registerFragment() {
663
711
  this.fragments++;
664
712
  }
@@ -842,7 +890,41 @@
842
890
  });
843
891
  }
844
892
  ngOnDestroy() {
845
- this.destroy$.complete();
893
+ // MEMORY LEAK FIX: Unwatch all Partial-scoped watchers for THIS specific partial when partial is destroyed
894
+ // Only unwatch watchers for this partial, not all partials (other partials may still be on the page)
895
+ if (this.partialName) {
896
+ i1.$unwatchAllByScope('Partial', this.partialName);
897
+ }
898
+ // MEMORY LEAK FIX: Complete Subjects to release subscriptions
899
+ if (this.destroy$) {
900
+ this.destroy$.complete();
901
+ this.destroy$ = null;
902
+ }
903
+ if (this.viewInit$) {
904
+ this.viewInit$.complete();
905
+ this.viewInit$ = null;
906
+ }
907
+ // MEMORY LEAK FIX: Clear references to prevent memory leaks
908
+ this.Widgets = null;
909
+ this.Variables = null;
910
+ this.Actions = null;
911
+ this.App = null;
912
+ this.containerWidget = null;
913
+ this.i18nService = null;
914
+ this.appLocale = null;
915
+ this.partialDirective = null;
916
+ this.pageDirective = null;
917
+ this.Prefab = null;
918
+ this.scriptLoaderService = null;
919
+ this.Viewport = null;
920
+ this.route = null;
921
+ this.appManager = null;
922
+ this.navigationService = null;
923
+ this.router = null;
924
+ this.pageParams = null;
925
+ this.viewParent = null;
926
+ // MEMORY LEAK FIX: Cleanup FragmentMonitor resources
927
+ this.cleanupFragmentMonitor();
846
928
  }
847
929
  ngOnAttach(refreshData) {
848
930
  this.unmute();
@@ -1287,9 +1369,42 @@
1287
1369
  });
1288
1370
  }
1289
1371
  ngOnDestroy() {
1372
+ // MEMORY LEAK FIX: Unwatch all Page-scoped watchers for THIS specific page when page is destroyed
1373
+ if (this.pageName) {
1374
+ const removedCount = i1.$unwatchAllByScope('Page', this.pageName);
1375
+ if (removedCount > 0) {
1376
+ console.log(`🧹 Cleaned up ${removedCount} Page-scoped watcher(s) for page ${this.pageName}`);
1377
+ }
1378
+ }
1290
1379
  //this.captureApplicationThumbnail();
1291
1380
  this.savePageSnapShot();
1292
- this.destroy$.complete();
1381
+ // MEMORY LEAK FIX: Complete Subjects to release subscriptions
1382
+ if (this.destroy$) {
1383
+ this.destroy$.complete();
1384
+ this.destroy$ = null;
1385
+ }
1386
+ if (this.viewInit$) {
1387
+ this.viewInit$.complete();
1388
+ this.viewInit$ = null;
1389
+ }
1390
+ // MEMORY LEAK FIX: Clear references to prevent memory leaks
1391
+ this.Widgets = null;
1392
+ this.Variables = null;
1393
+ this.Actions = null;
1394
+ this.App = null;
1395
+ this.route = null;
1396
+ this.appManager = null;
1397
+ this.navigationService = null;
1398
+ this.router = null;
1399
+ this.pageParams = null;
1400
+ this.i18nService = null;
1401
+ this.appLocale = null;
1402
+ this.pageDirective = null;
1403
+ this.$page = null;
1404
+ this.scriptLoaderService = null;
1405
+ this.Viewport = null;
1406
+ // MEMORY LEAK FIX: Cleanup FragmentMonitor resources
1407
+ this.cleanupFragmentMonitor();
1293
1408
  }
1294
1409
  captureApplicationThumbnail() {
1295
1410
  const root = this;
@@ -1654,7 +1769,38 @@
1654
1769
  }, 100);
1655
1770
  }
1656
1771
  ngOnDestroy() {
1657
- this.destroy$.complete();
1772
+ // MEMORY LEAK FIX: Complete Subjects to release subscriptions
1773
+ if (this.destroy$) {
1774
+ this.destroy$.complete();
1775
+ this.destroy$ = null;
1776
+ }
1777
+ if (this.viewInit$) {
1778
+ this.viewInit$.complete();
1779
+ this.viewInit$ = null;
1780
+ }
1781
+ // MEMORY LEAK FIX: Clear references to prevent memory leaks
1782
+ this.Widgets = null;
1783
+ this.BaseWidget = null;
1784
+ this.Variables = null;
1785
+ this.Actions = null;
1786
+ this.App = null;
1787
+ this.containerWidget = null;
1788
+ this.i18nService = null;
1789
+ this.appLocale = null;
1790
+ this.pageDirective = null;
1791
+ this.Prefab = null;
1792
+ this.scriptLoaderService = null;
1793
+ this.customwidgetConfigProvider = null;
1794
+ this.Viewport = null;
1795
+ this.route = null;
1796
+ this.appManager = null;
1797
+ this.navigationService = null;
1798
+ this.router = null;
1799
+ this.props = null;
1800
+ this.events = null;
1801
+ this.viewParent = null;
1802
+ // MEMORY LEAK FIX: Cleanup FragmentMonitor resources
1803
+ this.cleanupFragmentMonitor();
1658
1804
  }
1659
1805
  ngOnAttach(refreshData) {
1660
1806
  this.unmute();
@@ -1881,7 +2027,36 @@
1881
2027
  });
1882
2028
  }
1883
2029
  ngOnDestroy() {
1884
- this.destroy$.complete();
2030
+ // MEMORY LEAK FIX: Unwatch all Prefab-scoped watchers for THIS specific prefab when prefab is destroyed
2031
+ // Only unwatch watchers for this prefab, not all prefabs (other prefabs may still be on the page)
2032
+ if (this.prefabName) {
2033
+ i1.$unwatchAllByScope('Prefab', this.prefabName);
2034
+ }
2035
+ // MEMORY LEAK FIX: Complete Subjects to release subscriptions
2036
+ if (this.destroy$) {
2037
+ this.destroy$.complete();
2038
+ this.destroy$ = null;
2039
+ }
2040
+ if (this.viewInit$) {
2041
+ this.viewInit$.complete();
2042
+ this.viewInit$ = null;
2043
+ }
2044
+ // MEMORY LEAK FIX: Clear references to prevent memory leaks
2045
+ this.Widgets = null;
2046
+ this.Variables = null;
2047
+ this.Actions = null;
2048
+ this.App = null;
2049
+ this.containerWidget = null;
2050
+ this.prefabMngr = null;
2051
+ this.i18nService = null;
2052
+ this.appLocale = null;
2053
+ this.prefabContainerDirective = null;
2054
+ this.scriptLoaderService = null;
2055
+ this.pageDirective = null;
2056
+ this.Viewport = null;
2057
+ this.viewParent = null;
2058
+ // MEMORY LEAK FIX: Cleanup FragmentMonitor resources
2059
+ this.cleanupFragmentMonitor();
1885
2060
  }
1886
2061
  // user overrides this
1887
2062
  onPropertyChange() { }
@@ -1935,6 +2110,12 @@
1935
2110
  }
1936
2111
  //TODO: To work cache properly need to implement the below methods and WmRouteReuseStrategy
1937
2112
  ngOnDestroy() {
2113
+ // MEMORY LEAK FIX: Clear references to prevent memory leaks
2114
+ this.App = null;
2115
+ this.routerOutlet = null;
2116
+ this.pageDirective = null;
2117
+ this.layoutPages = null;
2118
+ this.layoutName = null;
1938
2119
  }
1939
2120
  canReuse() {
1940
2121
  }
@@ -2616,8 +2797,42 @@
2616
2797
  });
2617
2798
  }
2618
2799
  ngOnDestroy() {
2800
+ // MEMORY LEAK FIX: Unwatch all Page-scoped watchers for THIS specific page when page is destroyed
2801
+ if (this.pageName) {
2802
+ i1.$unwatchAllByScope('Page', this.pageName);
2803
+ // if (removedCount > 0) {
2804
+ // console.log(`🧹 Cleaned up ${removedCount} Page-scoped watcher(s) for page ${this.pageName}`);
2805
+ // }
2806
+ }
2619
2807
  this.savePageSnapShot();
2620
- this.destroy$.complete();
2808
+ // MEMORY LEAK FIX: Complete Subjects to release subscriptions
2809
+ if (this.destroy$) {
2810
+ this.destroy$.complete();
2811
+ this.destroy$ = null;
2812
+ }
2813
+ if (this.viewInit$) {
2814
+ this.viewInit$.complete();
2815
+ this.viewInit$ = null;
2816
+ }
2817
+ // MEMORY LEAK FIX: Clear references to prevent memory leaks
2818
+ this.Widgets = null;
2819
+ this.Variables = null;
2820
+ this.Actions = null;
2821
+ this.App = null;
2822
+ this.route = null;
2823
+ this.appManager = null;
2824
+ this.navigationService = null;
2825
+ this.router = null;
2826
+ this.pageParams = null;
2827
+ this.i18nService = null;
2828
+ this.appLocale = null;
2829
+ this.layoutDirective = null;
2830
+ this.spaPageDirective = null;
2831
+ this.$page = null;
2832
+ this.scriptLoaderService = null;
2833
+ this.Viewport = null;
2834
+ // MEMORY LEAK FIX: Cleanup FragmentMonitor resources
2835
+ this.cleanupFragmentMonitor();
2621
2836
  }
2622
2837
  onReady() { }
2623
2838
  onBeforePageReady() { }
@@ -2703,7 +2918,7 @@
2703
2918
  this.securityService = securityService;
2704
2919
  this.inj = inj;
2705
2920
  this.processed = false;
2706
- this.context = {};
2921
+ this.context = {}; // Changed from readonly to allow cleanup
2707
2922
  const securityConfig = this.securityService.get();
2708
2923
  this.securityEnabled = lodashEs.get(securityConfig, 'securityEnabled');
2709
2924
  this.isUserAuthenticated = lodashEs.get(securityConfig, 'authenticated');
@@ -2776,6 +2991,15 @@
2776
2991
  this.viewContainerRef.clear();
2777
2992
  }
2778
2993
  }
2994
+ ngOnDestroy() {
2995
+ // MEMORY LEAK FIX: Clear context to release references to parent scope data
2996
+ if (this.context) {
2997
+ Object.keys(this.context).forEach(key => {
2998
+ delete this.context[key];
2999
+ });
3000
+ this.context = null;
3001
+ }
3002
+ }
2779
3003
  static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: AccessrolesDirective, deps: [{ token: i0__namespace.TemplateRef }, { token: i0__namespace.ViewContainerRef }, { token: i2__namespace.SecurityService }, { token: i0__namespace.Injector }, { token: 'EXPLICIT_CONTEXT', optional: true }], target: i0__namespace.ɵɵFactoryTarget.Directive }); }
2780
3004
  static { this.ɵdir = i0__namespace.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: AccessrolesDirective, isStandalone: true, selector: "[accessroles]", inputs: { accessroles: "accessroles" }, ngImport: i0__namespace }); }
2781
3005
  }
@@ -3005,7 +3229,10 @@
3005
3229
  this.preparePipeMeta(i5.CurrencyPipe, 'currency', true, [this._locale]),
3006
3230
  this.preparePipeMeta(i5.DatePipe, 'date', true, [this._locale]),
3007
3231
  this.preparePipeMeta(base.ToDatePipe, 'toDate', true, [
3008
- new i5.DatePipe(this._locale), undefined, this.injector.get(i1.CustomPipeManager)
3232
+ new i5.DatePipe(this._locale),
3233
+ undefined,
3234
+ this.injector.get(i1.App),
3235
+ this.injector.get(i1.CustomPipeManager)
3009
3236
  ]),
3010
3237
  this.preparePipeMeta(base.ToNumberPipe, 'toNumber', true, [
3011
3238
  new i5.DecimalPipe(this._locale),
@@ -3022,7 +3249,7 @@
3022
3249
  new i5.DecimalPipe(this._locale)
3023
3250
  ]),
3024
3251
  this.preparePipeMeta(base.StringToNumberPipe, 'stringToNumber', true),
3025
- this.preparePipeMeta(base.CustomPipe, 'custom', true, [this.injector.get(i1.CustomPipeManager)]),
3252
+ this.preparePipeMeta(base.CustomPipe, 'custom', true, [this.injector.get(i1.App), this.injector.get(i1.CustomPipeManager)]),
3026
3253
  this.preparePipeMeta(base.TrustAsPipe, 'trustAs', true, [this.domSanitizer]),
3027
3254
  this.preparePipeMeta(base.SanitizePipe, 'sanitize', true, [this.domSanitizer]),
3028
3255
  this.preparePipeMeta(base.TemplateReplacePipe, 'templateReplace', true),
@@ -3185,7 +3412,8 @@
3185
3412
  this.isTemplateBundleType = wmProjectProperties.type === "TEMPLATEBUNDLE" /* PROJECT_TYPE.TEMPLATE_BUNDLE */;
3186
3413
  this.targetPlatform = wmProjectProperties.platformType;
3187
3414
  this.isPrism = wmProjectProperties.template === "PRISM";
3188
- this.httpService.registerOnSessionTimeout(this.on401.bind(this));
3415
+ // MEMORY LEAK FIX: Store unsubscribe function for cleanup
3416
+ this.sessionTimeoutUnsubscribe = this.httpService.registerOnSessionTimeout(this.on401.bind(this));
3189
3417
  this.appLocale = this.i18nService.getAppLocale();
3190
3418
  this.httpService.setLocale(this.appLocale);
3191
3419
  }
@@ -3272,6 +3500,19 @@
3272
3500
  i1.registerFnByExpr(expr, fn[0], fn[1]);
3273
3501
  });
3274
3502
  }
3503
+ /**
3504
+ * Utility method to check if an object has a property
3505
+ * This is commonly used in expressions to check object properties
3506
+ * @param obj The object to check
3507
+ * @param prop The property name to check
3508
+ * @returns true if the object has the property, false otherwise
3509
+ */
3510
+ hasOwnObjectProperty(obj, prop) {
3511
+ if (!obj || typeof obj !== 'object') {
3512
+ return false;
3513
+ }
3514
+ return Object.prototype.hasOwnProperty.call(obj, prop);
3515
+ }
3275
3516
  setMode(modes, shouldPersist = false) {
3276
3517
  const htmlEl = document.getElementsByTagName('html')[0];
3277
3518
  //html element sanity check
@@ -3300,6 +3541,24 @@
3300
3541
  localStorage.setItem('wm-app-modes', JSON.stringify(modes));
3301
3542
  }
3302
3543
  ;
3544
+ ngOnDestroy() {
3545
+ // MEMORY LEAK FIX: Destroy EventNotifier to release subscribers
3546
+ if (this._eventNotifier) {
3547
+ this._eventNotifier.destroy();
3548
+ this._eventNotifier = null;
3549
+ }
3550
+ // MEMORY LEAK FIX: Unsubscribe from session timeout
3551
+ if (this.sessionTimeoutUnsubscribe) {
3552
+ this.sessionTimeoutUnsubscribe();
3553
+ this.sessionTimeoutUnsubscribe = null;
3554
+ }
3555
+ // MEMORY LEAK FIX: Clear references
3556
+ this.Variables = null;
3557
+ this.Actions = null;
3558
+ this.appLocale = null;
3559
+ this.modes = null;
3560
+ this.dynamicComponentContainerRef = null;
3561
+ }
3303
3562
  static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: AppRef, deps: [{ token: i0__namespace.Injector }, { token: i1__namespace.AbstractI18nService }, { token: i1__namespace.StatePersistence }, { token: i1__namespace.AbstractHttpService }, { token: i2__namespace.SecurityService }, { token: i1$1__namespace.RouteReuseStrategy }], target: i0__namespace.ɵɵFactoryTarget.Injectable }); }
3304
3563
  static { this.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: AppRef }); }
3305
3564
  }
@@ -3802,6 +4061,20 @@
3802
4061
  this.messagesByContext[ctx] = {};
3803
4062
  }
3804
4063
  }
4064
+ ngOnDestroy() {
4065
+ // MEMORY LEAK FIX: Complete Subject to release subscriptions
4066
+ if (this.messageSource) {
4067
+ this.messageSource.complete();
4068
+ this.messageSource = null;
4069
+ }
4070
+ // MEMORY LEAK FIX: Clear messages by context
4071
+ if (this.messagesByContext) {
4072
+ Object.keys(this.messagesByContext).forEach(key => {
4073
+ delete this.messagesByContext[key];
4074
+ });
4075
+ this.messagesByContext = null;
4076
+ }
4077
+ }
3805
4078
  static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: SpinnerServiceImpl, deps: [], target: i0__namespace.ɵɵFactoryTarget.Injectable }); }
3806
4079
  static { this.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: SpinnerServiceImpl }); }
3807
4080
  }
@@ -4317,6 +4590,7 @@
4317
4590
  this.isApplicationType = false;
4318
4591
  this.enableSkipToMainContent = i1.getWmProjectProperties().enableSkipToMainContent === 'true' || i1.getWmProjectProperties().enableSkipToMainContent === true;
4319
4592
  this.retryCount = 0;
4593
+ this.appManagerSubscriptions = []; // MEMORY LEAK FIX: Track appManager subscriptions
4320
4594
  this.appLocale = {};
4321
4595
  this.spinner = { show: false, messages: [], arialabel: '' };
4322
4596
  this.isOAuthDialogOpen = false;
@@ -4329,7 +4603,8 @@
4329
4603
  this.customIconsLoaderService.load();
4330
4604
  }
4331
4605
  // subscribe to OAuth changes
4332
- oAuthService.getOAuthProvidersAsObservable().subscribe((providers) => {
4606
+ // MEMORY LEAK FIX: Store subscription reference for cleanup
4607
+ this.oAuthProvidersSubscription = oAuthService.getOAuthProvidersAsObservable().subscribe((providers) => {
4333
4608
  this.providersConfig = providers;
4334
4609
  if (providers.length) {
4335
4610
  this.showOAuthDialog();
@@ -4339,7 +4614,8 @@
4339
4614
  }
4340
4615
  });
4341
4616
  // Subscribe to the message source to show/hide app spinner
4342
- this.spinnerService.getMessageSource().asObservable().subscribe((data) => {
4617
+ // MEMORY LEAK FIX: Store subscription reference for cleanup
4618
+ this.spinnerMessageSubscription = this.spinnerService.getMessageSource().asObservable().subscribe((data) => {
4343
4619
  // setTimeout is to avoid 'ExpressionChangedAfterItHasBeenCheckedError'
4344
4620
  setTimeout(() => {
4345
4621
  this.spinner.show = data.show;
@@ -4351,7 +4627,8 @@
4351
4627
  utils.setTheme('bs3');
4352
4628
  let spinnerId;
4353
4629
  let onPageRendered = i1.noop;
4354
- this.router.events.subscribe(e => {
4630
+ // MEMORY LEAK FIX: Store subscription reference for cleanup
4631
+ this.routerEventsSubscription = this.router.events.subscribe(e => {
4355
4632
  if (e instanceof i1$1.NavigationStart) {
4356
4633
  let page = e.url.split('?')[0];
4357
4634
  page = page.substring(1);
@@ -4386,12 +4663,13 @@
4386
4663
  }, 1000);
4387
4664
  }
4388
4665
  });
4389
- this.appManager.subscribe('pageReady', () => {
4666
+ // MEMORY LEAK FIX: Store subscription unsubscribe functions
4667
+ this.appManagerSubscriptions.push(this.appManager.subscribe('pageReady', () => {
4390
4668
  onPageRendered();
4391
- });
4392
- this.appManager.subscribe('pageAttach', () => {
4669
+ }));
4670
+ this.appManagerSubscriptions.push(this.appManager.subscribe('pageAttach', () => {
4393
4671
  onPageRendered();
4394
- });
4672
+ }));
4395
4673
  }
4396
4674
  showOAuthDialog() {
4397
4675
  if (!this.isOAuthDialogOpen) {
@@ -4466,9 +4744,35 @@
4466
4744
  i1.$invokeWatchers();
4467
4745
  }
4468
4746
  ngOnDestroy() {
4747
+ // MEMORY LEAK FIX: Unwatch all App-scoped watchers when app is destroyed
4748
+ i1.$unwatchAllByScope('App');
4749
+ // MEMORY LEAK FIX: Unsubscribe from navigation end subscription
4469
4750
  if (this.navigationEndSubscription) {
4470
4751
  this.navigationEndSubscription.unsubscribe();
4471
- }
4752
+ this.navigationEndSubscription = null;
4753
+ }
4754
+ // MEMORY LEAK FIX: Unsubscribe from OAuth providers subscription
4755
+ if (this.oAuthProvidersSubscription) {
4756
+ this.oAuthProvidersSubscription.unsubscribe();
4757
+ this.oAuthProvidersSubscription = null;
4758
+ }
4759
+ // MEMORY LEAK FIX: Unsubscribe from spinner message subscription
4760
+ if (this.spinnerMessageSubscription) {
4761
+ this.spinnerMessageSubscription.unsubscribe();
4762
+ this.spinnerMessageSubscription = null;
4763
+ }
4764
+ // MEMORY LEAK FIX: Unsubscribe from router events subscription
4765
+ if (this.routerEventsSubscription) {
4766
+ this.routerEventsSubscription.unsubscribe();
4767
+ this.routerEventsSubscription = null;
4768
+ }
4769
+ // MEMORY LEAK FIX: Unsubscribe from appManager subscriptions
4770
+ this.appManagerSubscriptions.forEach(unsubscribe => {
4771
+ if (unsubscribe) {
4772
+ unsubscribe();
4773
+ }
4774
+ });
4775
+ this.appManagerSubscriptions = [];
4472
4776
  }
4473
4777
  static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: AppComponent, deps: [{ token: PipeProvider }, { token: i0__namespace.ApplicationRef }, { token: i0__namespace.ElementRef }, { token: i2$2__namespace.OAuthService }, { token: i1__namespace.AbstractDialogService }, { token: i1__namespace.AbstractSpinnerService }, { token: i0__namespace.NgZone }, { token: i1$1__namespace.Router }, { token: i1__namespace.App }, { token: AppManagerService }, { token: i1__namespace.CustomIconsLoaderService }], target: i0__namespace.ɵɵFactoryTarget.Component }); }
4474
4778
  static { this.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AppComponent, isStandalone: true, selector: "app-root", viewQueries: [{ propertyName: "routerOutlet", first: true, predicate: i1$1.RouterOutlet, descendants: true }, { propertyName: "dynamicComponentContainerRef", first: true, predicate: ["dynamicComponent"], descendants: true, read: i0.ViewContainerRef }], ngImport: i0__namespace, template: "@if (startApp) {\n @if(enableSkipToMainContent) {\n <div id=\"app-focus-start\" tabindex=\"-1\"></div>\n <a href=\"javascript:void(0);\" class=\"skip\" (click)=\"skipToAppContent($event)\">{{appLocale.LABEL_SKIP_TO_MAIN_CONTENT || 'Skip to main content'}}</a>\n }\n <router-outlet></router-outlet>\n @if (isApplicationType) {\n <div wmContainer partialContainer content=\"Common\" hidden class=\"ng-hide\"></div>\n }\n <app-spinner name=\"globalspinner\" classname=\"global-spinner\" role=\"alert\" aria-live=\"assertive\" [attr.aria-label]=\"spinner.arialabel || 'Loading'\" [show]=\"spinner.show\" [spinnermessages]=\"spinner.messages\"></app-spinner>\n <div wmDialog name=\"oAuthLoginDialog\" title=\"Application is requesting you to sign in with\"\n close.event=\"closeOAuthDialog()\">\n <ng-template #dialogBody>\n <ul class=\"list-items\">\n @for (provider of providersConfig; track provider) {\n <li class=\"list-item\">\n <button class=\"btn\" (click)=\"provider.invoke()\">{{provider.name}}</button>\n </li>\n }\n </ul>\n </ng-template>\n </div>\n <div wmConfirmDialog name=\"_app-confirm-dialog\" title.bind=\"title\" message.bind=\"message\" oktext.bind=\"oktext\"\n canceltext.bind=\"canceltext\" closable=\"false\" iconclass.bind=\"iconclass\"\n escape.event=\"onEscape()\" ok.event=\"onOk()\" cancel.event=\"onCancel()\" close.event=\"onClose()\" opened.event=\"onOpen()\"></div>\n @if (!isApplicationType) {\n <div wmConfirmDialog name=\"PrefabConfirmDialog\" title.bind=\"title\" message.bind=\"text\" oktext.bind=\"okButtonText\"\n canceltext.bind=\"cancelButtonText\" closable=\"false\" iconclass.bind=\"iconclass\"\n escape.event=\"onEscape()\" ok.event=\"onOk()\" cancel.event=\"onCancel()\" close.event=\"onClose()\" opened.event=\"onOpen()\"></div>\n }\n @if (!isApplicationType) {\n <div wmAlertDialog name=\"PrefabAlertDialog\" title.bind=\"title\" message.bind=\"text\" oktext.bind=\"okButtonText\"\n canceltext.bind=\"cancelButtonText\" closable=\"false\" iconclass.bind=\"iconclass\"\n escape.event=\"onEscape()\" ok.event=\"onOk()\" cancel.event=\"onCancel()\" close.event=\"onClose()\" opened.event=\"onOpen()\"></div>\n }\n <div wmAppExt></div>\n <i id=\"wm-mobile-display\"></i>\n}\n<!--Dummy container to create the component dynamically-->\n<ng-container #dynamicComponent></ng-container>\n", dependencies: [{ kind: "ngmodule", type: i5.CommonModule }, { kind: "directive", type: i1$1.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: alertDialog.AlertDialogComponent, selector: "div[wmAlertDialog]" }, { kind: "component", type: confirmDialog.ConfirmDialogComponent, selector: "div[wmConfirmDialog]" }, { kind: "component", type: designDialog.DialogComponent, selector: "div[wmDialog]" }, { kind: "component", type: AppSpinnerComponent, selector: "app-spinner", inputs: ["show", "spinnermessages", "classname", "arialabel"] }, { kind: "directive", type: base.ContainerDirective, selector: "[wmContainer]" }, { kind: "directive", type: base.PartialParamHandlerDirective, selector: "[partialContainer]" }, { kind: "directive", type: base.PartialContainerDirective, selector: "[partialContainer]" }], encapsulation: i0__namespace.ViewEncapsulation.None }); }
@@ -4577,6 +4881,14 @@
4577
4881
  }
4578
4882
  });
4579
4883
  }
4884
+ ngOnDestroy() {
4885
+ // MEMORY LEAK FIX: Clear ViewContainerRef to destroy dynamically created components
4886
+ if (this.vcRef) {
4887
+ this.vcRef.clear();
4888
+ }
4889
+ // MEMORY LEAK FIX: Clear ElementRef reference
4890
+ this.elRef = null;
4891
+ }
4580
4892
  static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: PrefabDirective, deps: [{ token: base.WidgetRef, self: true }, { token: i0__namespace.ViewContainerRef }, { token: i0__namespace.ElementRef }, { token: PrefabManagerService }, { token: i0__namespace.ComponentFactoryResolver }, { token: i0__namespace.Injector }, { token: ComponentRefProvider }], target: i0__namespace.ɵɵFactoryTarget.Directive }); }
4581
4893
  static { this.ɵdir = i0__namespace.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: PrefabDirective, isStandalone: true, selector: "[wmPrefab][prefabname]", ngImport: i0__namespace }); }
4582
4894
  }
@@ -4597,7 +4909,8 @@
4597
4909
  class PrefabPreviewComponent {
4598
4910
  constructor(prefabManager) {
4599
4911
  this.prefabManager = prefabManager;
4600
- window.addEventListener('message', e => {
4912
+ // MEMORY LEAK FIX: Store bound function reference for cleanup
4913
+ this.windowMessageListener = (e) => {
4601
4914
  const context = e.data && e.data.context;
4602
4915
  if (context !== PREFAB) {
4603
4916
  return;
@@ -4616,7 +4929,8 @@
4616
4929
  else if (action === 'invoke-script') {
4617
4930
  this.invokeScript(payload);
4618
4931
  }
4619
- });
4932
+ };
4933
+ window.addEventListener('message', this.windowMessageListener);
4620
4934
  }
4621
4935
  postMessage(action, payload) {
4622
4936
  const data = {
@@ -4633,7 +4947,8 @@
4633
4947
  }
4634
4948
  init() {
4635
4949
  this.previewMode = true;
4636
- this.prefabInstance.readyState.subscribe(() => { }, () => { }, () => {
4950
+ // MEMORY LEAK FIX: Store subscription reference
4951
+ this.readyStateSubscription = this.prefabInstance.readyState.subscribe(() => { }, () => { }, () => {
4637
4952
  this.prefabManager.getConfig('__self__')
4638
4953
  .then(config => {
4639
4954
  this.config = config;
@@ -4667,6 +4982,22 @@
4667
4982
  this.setupEventListeners();
4668
4983
  this.postMessage('init');
4669
4984
  }
4985
+ ngOnDestroy() {
4986
+ // MEMORY LEAK FIX: Remove window message listener
4987
+ if (this.windowMessageListener) {
4988
+ window.removeEventListener('message', this.windowMessageListener);
4989
+ this.windowMessageListener = null;
4990
+ }
4991
+ // MEMORY LEAK FIX: Unsubscribe from readyState
4992
+ if (this.readyStateSubscription) {
4993
+ this.readyStateSubscription.unsubscribe();
4994
+ this.readyStateSubscription = null;
4995
+ }
4996
+ // MEMORY LEAK FIX: Clear ViewChild reference
4997
+ this.prefabInstance = null;
4998
+ // MEMORY LEAK FIX: Clear config
4999
+ this.config = null;
5000
+ }
4670
5001
  static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: PrefabPreviewComponent, deps: [{ token: PrefabManagerService }], target: i0__namespace.ɵɵFactoryTarget.Component }); }
4671
5002
  static { this.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PrefabPreviewComponent, isStandalone: true, selector: "wm-prefab-preview", viewQueries: [{ propertyName: "prefabInstance", first: true, predicate: prefab.PrefabDirective, descendants: true, static: true }], ngImport: i0__namespace, template: `
4672
5003
  <div class="prefab-preview row">
@@ -4747,6 +5078,7 @@
4747
5078
  selector: selector of the component
4748
5079
  transpile: flag for transpiling HTML. By default it is true
4749
5080
  nocache: flag for render it from cache or not. By default it is true
5081
+ * @returns ComponentRef - the created component reference for cleanup
4750
5082
  */
4751
5083
  async addComponent(target, markup, context = {}, options = {}) {
4752
5084
  options.transpile = i1.isDefined(options.transpile) ? options.transpile : true;
@@ -4756,6 +5088,8 @@
4756
5088
  const component = this.app.dynamicComponentContainerRef.createComponent(componentFactoryRef, 0, lodashEs.get(options, 'inj'));
4757
5089
  i1.extendProto(component.instance, context);
4758
5090
  target.appendChild(component.location.nativeElement);
5091
+ // MEMORY LEAK FIX: Return component reference so caller can destroy it
5092
+ return component;
4759
5093
  }
4760
5094
  static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: DynamicComponentRefProviderService, deps: [{ token: i1__namespace.App }, { token: AppManagerService }, { token: i0__namespace.Compiler }], target: i0__namespace.ɵɵFactoryTarget.Injectable }); }
4761
5095
  static { this.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: DynamicComponentRefProviderService }); }
@@ -24,6 +24,10 @@ export declare class AppComponent implements DoCheck, AfterViewInit, OnDestroy {
24
24
  enableSkipToMainContent: boolean;
25
25
  private retryCount;
26
26
  private navigationEndSubscription;
27
+ private oAuthProvidersSubscription;
28
+ private spinnerMessageSubscription;
29
+ private routerEventsSubscription;
30
+ private appManagerSubscriptions;
27
31
  appLocale: any;
28
32
  routerOutlet: RouterOutlet;
29
33
  dynamicComponentContainerRef: ViewContainerRef;
@@ -1,11 +1,13 @@
1
- import { AfterViewInit } from '@angular/core';
1
+ import { AfterViewInit, OnDestroy } from '@angular/core';
2
2
  import { PrefabManagerService } from '../services/prefab-manager.service';
3
3
  import * as i0 from "@angular/core";
4
- export declare class PrefabPreviewComponent implements AfterViewInit {
4
+ export declare class PrefabPreviewComponent implements AfterViewInit, OnDestroy {
5
5
  private prefabManager;
6
6
  private config;
7
7
  private previewMode;
8
8
  prefabInstance: any;
9
+ private windowMessageListener;
10
+ private readyStateSubscription;
9
11
  constructor(prefabManager: PrefabManagerService);
10
12
  postMessage(action: any, payload?: any): void;
11
13
  setupEventListeners(): void;
@@ -15,6 +17,7 @@ export declare class PrefabPreviewComponent implements AfterViewInit {
15
17
  getOutboundProps(): void;
16
18
  invokeScript(payload: any): void;
17
19
  ngAfterViewInit(): void;
20
+ ngOnDestroy(): void;
18
21
  static ɵfac: i0.ɵɵFactoryDeclaration<PrefabPreviewComponent, never>;
19
22
  static ɵcmp: i0.ɵɵComponentDeclaration<PrefabPreviewComponent, "wm-prefab-preview", never, {}, {}, never, never, true, never>;
20
23
  }