@acorex/platform 18.2.3 → 19.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (838) hide show
  1. package/common/lib/app/app-startup.service.d.ts +1 -2
  2. package/common/lib/app/application.types.d.ts +3 -3
  3. package/common/lib/schema/entity/entity.class.d.ts +1 -1
  4. package/core/index.d.ts +1 -0
  5. package/core/utils/highlighter.d.ts +43 -0
  6. package/fesm2022/acorex-platform-auth.mjs +27 -29
  7. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  8. package/fesm2022/{acorex-platform-common-avatar-widget-edit.component-DtC2IaE8.mjs → acorex-platform-common-avatar-widget-edit.component-syRKKn21.mjs} +6 -26
  9. package/fesm2022/acorex-platform-common-avatar-widget-edit.component-syRKKn21.mjs.map +1 -0
  10. package/fesm2022/{acorex-platform-common-avatar-widget-view.component-BOIV0Be1.mjs → acorex-platform-common-avatar-widget-view.component-DSju_bgg.mjs} +6 -28
  11. package/fesm2022/acorex-platform-common-avatar-widget-view.component-DSju_bgg.mjs.map +1 -0
  12. package/fesm2022/{acorex-platform-common-boolean-widget-filter.component-S4-3SmKA.mjs → acorex-platform-common-boolean-widget-filter.component-aaKT0FyC.mjs} +6 -26
  13. package/fesm2022/acorex-platform-common-boolean-widget-filter.component-aaKT0FyC.mjs.map +1 -0
  14. package/fesm2022/{acorex-platform-common-change-password.component-g_GEw3IZ.mjs → acorex-platform-common-change-password.component-DFoC5nP2.mjs} +7 -8
  15. package/fesm2022/acorex-platform-common-change-password.component-DFoC5nP2.mjs.map +1 -0
  16. package/fesm2022/{acorex-platform-common-checkbox-widget-column.component-DOoneR7g.mjs → acorex-platform-common-checkbox-widget-column.component-DZxykkVr.mjs} +6 -28
  17. package/fesm2022/acorex-platform-common-checkbox-widget-column.component-DZxykkVr.mjs.map +1 -0
  18. package/fesm2022/{acorex-platform-common-checkbox-widget-edit.component-PFRq-XS-.mjs → acorex-platform-common-checkbox-widget-edit.component-CNmYVpMu.mjs} +6 -29
  19. package/fesm2022/acorex-platform-common-checkbox-widget-edit.component-CNmYVpMu.mjs.map +1 -0
  20. package/fesm2022/{acorex-platform-common-checkbox-widget-view.component-CKz8XnjT.mjs → acorex-platform-common-checkbox-widget-view.component-3XLnJx9A.mjs} +6 -28
  21. package/fesm2022/acorex-platform-common-checkbox-widget-view.component-3XLnJx9A.mjs.map +1 -0
  22. package/fesm2022/{acorex-platform-common-dateTime-widget-column.component-DG0leXAo.mjs → acorex-platform-common-dateTime-widget-column.component-CKaMC189.mjs} +6 -27
  23. package/fesm2022/acorex-platform-common-dateTime-widget-column.component-CKaMC189.mjs.map +1 -0
  24. package/fesm2022/{acorex-platform-common-dateTime-widget-edit.component-D8W-XEcx.mjs → acorex-platform-common-dateTime-widget-edit.component-B50J-bwp.mjs} +6 -26
  25. package/fesm2022/acorex-platform-common-dateTime-widget-edit.component-B50J-bwp.mjs.map +1 -0
  26. package/fesm2022/{acorex-platform-common-dateTime-widget-filter.component-DngCKwFY.mjs → acorex-platform-common-dateTime-widget-filter.component-CTV2a3c0.mjs} +6 -24
  27. package/fesm2022/acorex-platform-common-dateTime-widget-filter.component-CTV2a3c0.mjs.map +1 -0
  28. package/fesm2022/{acorex-platform-common-dateTime-widget-view.component-KGgJkiKB.mjs → acorex-platform-common-dateTime-widget-view.component-C7hmUXLz.mjs} +6 -27
  29. package/fesm2022/acorex-platform-common-dateTime-widget-view.component-C7hmUXLz.mjs.map +1 -0
  30. package/fesm2022/{acorex-platform-common-email-widget-column.component-CLNqSuB7.mjs → acorex-platform-common-email-widget-column.component-BPoSZTqM.mjs} +6 -29
  31. package/fesm2022/acorex-platform-common-email-widget-column.component-BPoSZTqM.mjs.map +1 -0
  32. package/fesm2022/{acorex-platform-common-email-widget-edit.component--0gaRm4s.mjs → acorex-platform-common-email-widget-edit.component-aLPGOG3r.mjs} +6 -27
  33. package/fesm2022/acorex-platform-common-email-widget-edit.component-aLPGOG3r.mjs.map +1 -0
  34. package/fesm2022/{acorex-platform-common-email-widget-view.component-C3AUr1HO.mjs → acorex-platform-common-email-widget-view.component-dMByK5bc.mjs} +5 -27
  35. package/fesm2022/acorex-platform-common-email-widget-view.component-dMByK5bc.mjs.map +1 -0
  36. package/fesm2022/{acorex-platform-common-file-widget-column.component-C9AHk2UP.mjs → acorex-platform-common-file-widget-column.component-Dafc2zLc.mjs} +6 -27
  37. package/fesm2022/acorex-platform-common-file-widget-column.component-Dafc2zLc.mjs.map +1 -0
  38. package/fesm2022/{acorex-platform-common-file-widget-edit.component-L7bln9k0.mjs → acorex-platform-common-file-widget-edit.component-C31kfJSw.mjs} +6 -27
  39. package/fesm2022/acorex-platform-common-file-widget-edit.component-C31kfJSw.mjs.map +1 -0
  40. package/fesm2022/{acorex-platform-common-file-widget-filter.component-Ce35mqny.mjs → acorex-platform-common-file-widget-filter.component-BNCcBun4.mjs} +6 -29
  41. package/fesm2022/acorex-platform-common-file-widget-filter.component-BNCcBun4.mjs.map +1 -0
  42. package/fesm2022/{acorex-platform-common-file-widget-view.component-BvMzrs5C.mjs → acorex-platform-common-file-widget-view.component-T3r6musY.mjs} +6 -27
  43. package/fesm2022/acorex-platform-common-file-widget-view.component-T3r6musY.mjs.map +1 -0
  44. package/fesm2022/{acorex-platform-common-gallery-widget-edit.component-BVuV2Ib8.mjs → acorex-platform-common-gallery-widget-edit.component-zBsaBkzu.mjs} +6 -26
  45. package/fesm2022/acorex-platform-common-gallery-widget-edit.component-zBsaBkzu.mjs.map +1 -0
  46. package/fesm2022/{acorex-platform-common-gallery-widget-filter.component-C8tdM6PX.mjs → acorex-platform-common-gallery-widget-filter.component-BhLYuB6p.mjs} +6 -28
  47. package/fesm2022/acorex-platform-common-gallery-widget-filter.component-BhLYuB6p.mjs.map +1 -0
  48. package/fesm2022/{acorex-platform-common-gallery-widget-view.component-D8YmSi9C.mjs → acorex-platform-common-gallery-widget-view.component-Dxf4Oj1E.mjs} +6 -26
  49. package/fesm2022/acorex-platform-common-gallery-widget-view.component-Dxf4Oj1E.mjs.map +1 -0
  50. package/fesm2022/{acorex-platform-common-largetext-widget-edit.component-DGMxpnsr.mjs → acorex-platform-common-largetext-widget-edit.component-BYMIaLCI.mjs} +5 -27
  51. package/fesm2022/acorex-platform-common-largetext-widget-edit.component-BYMIaLCI.mjs.map +1 -0
  52. package/fesm2022/{acorex-platform-common-lookup-widget-column.component-B-cEaNjv.mjs → acorex-platform-common-lookup-widget-column.component-BB0Mdx2u.mjs} +6 -28
  53. package/fesm2022/acorex-platform-common-lookup-widget-column.component-BB0Mdx2u.mjs.map +1 -0
  54. package/fesm2022/{acorex-platform-common-lookup-widget-edit.component-DqB_g9Zz.mjs → acorex-platform-common-lookup-widget-edit.component-DUPsS_ZW.mjs} +6 -28
  55. package/fesm2022/acorex-platform-common-lookup-widget-edit.component-DUPsS_ZW.mjs.map +1 -0
  56. package/fesm2022/{acorex-platform-common-lookup-widget-filter.component-0TPWNWSd.mjs → acorex-platform-common-lookup-widget-filter.component-CLyl94AJ.mjs} +6 -26
  57. package/fesm2022/acorex-platform-common-lookup-widget-filter.component-CLyl94AJ.mjs.map +1 -0
  58. package/fesm2022/{acorex-platform-common-lookup-widget-view.component-DYAg76YH.mjs → acorex-platform-common-lookup-widget-view.component-CJijszjn.mjs} +6 -28
  59. package/fesm2022/acorex-platform-common-lookup-widget-view.component-CJijszjn.mjs.map +1 -0
  60. package/fesm2022/{acorex-platform-common-map-widget-edit.component-C3cpsXD5.mjs → acorex-platform-common-map-widget-edit.component-BTHORlG5.mjs} +6 -27
  61. package/fesm2022/acorex-platform-common-map-widget-edit.component-BTHORlG5.mjs.map +1 -0
  62. package/fesm2022/{acorex-platform-common-map-widget-view.component-C-DCNaJi.mjs → acorex-platform-common-map-widget-view.component-CQzW1ZeD.mjs} +6 -27
  63. package/fesm2022/acorex-platform-common-map-widget-view.component-CQzW1ZeD.mjs.map +1 -0
  64. package/fesm2022/{acorex-platform-common-messenger-widget-column.component-B2A7ZBEP.mjs → acorex-platform-common-messenger-widget-column.component-Brm4vLGA.mjs} +6 -29
  65. package/fesm2022/acorex-platform-common-messenger-widget-column.component-Brm4vLGA.mjs.map +1 -0
  66. package/fesm2022/{acorex-platform-common-messenger-widget-edit.component-DC8vQDo0.mjs → acorex-platform-common-messenger-widget-edit.component-CJHvut2C.mjs} +6 -27
  67. package/fesm2022/acorex-platform-common-messenger-widget-edit.component-CJHvut2C.mjs.map +1 -0
  68. package/fesm2022/{acorex-platform-common-messenger-widget-view.component-B6FavkmG.mjs → acorex-platform-common-messenger-widget-view.component-DVylp_2t.mjs} +6 -28
  69. package/fesm2022/acorex-platform-common-messenger-widget-view.component-DVylp_2t.mjs.map +1 -0
  70. package/fesm2022/{acorex-platform-common-number-widget-edit.component-Bc5-ZUw4.mjs → acorex-platform-common-number-widget-edit.component-DZf-n-yr.mjs} +6 -27
  71. package/fesm2022/acorex-platform-common-number-widget-edit.component-DZf-n-yr.mjs.map +1 -0
  72. package/fesm2022/{acorex-platform-common-number-widget-filter.component-DxfJ90n4.mjs → acorex-platform-common-number-widget-filter.component-womVAhSr.mjs} +6 -28
  73. package/fesm2022/acorex-platform-common-number-widget-filter.component-womVAhSr.mjs.map +1 -0
  74. package/fesm2022/{acorex-platform-common-number-widget-view.component-DGfLSGw1.mjs → acorex-platform-common-number-widget-view.component-L2pxAqqz.mjs} +5 -27
  75. package/fesm2022/acorex-platform-common-number-widget-view.component-L2pxAqqz.mjs.map +1 -0
  76. package/fesm2022/{acorex-platform-common-password-widget-column.component-DEHaVLGK.mjs → acorex-platform-common-password-widget-column.component-3ubqJk-d.mjs} +6 -28
  77. package/fesm2022/acorex-platform-common-password-widget-column.component-3ubqJk-d.mjs.map +1 -0
  78. package/fesm2022/{acorex-platform-common-password-widget-edit.component-DrYyu5v-.mjs → acorex-platform-common-password-widget-edit.component-BokyEDfK.mjs} +6 -28
  79. package/fesm2022/acorex-platform-common-password-widget-edit.component-BokyEDfK.mjs.map +1 -0
  80. package/fesm2022/{acorex-platform-common-password-widget-view.component-B_HU-3J1.mjs → acorex-platform-common-password-widget-view.component-BuFoE2fz.mjs} +7 -28
  81. package/fesm2022/acorex-platform-common-password-widget-view.component-BuFoE2fz.mjs.map +1 -0
  82. package/fesm2022/{acorex-platform-common-phone-widget-column.component-D99ncxxJ.mjs → acorex-platform-common-phone-widget-column.component-79Me_VNP.mjs} +6 -29
  83. package/fesm2022/acorex-platform-common-phone-widget-column.component-79Me_VNP.mjs.map +1 -0
  84. package/fesm2022/{acorex-platform-common-phone-widget-edit.component-a5EAI9FK.mjs → acorex-platform-common-phone-widget-edit.component-CIayMoT1.mjs} +6 -26
  85. package/fesm2022/acorex-platform-common-phone-widget-edit.component-CIayMoT1.mjs.map +1 -0
  86. package/fesm2022/{acorex-platform-common-phone-widget-view.component-BlFVuoNN.mjs → acorex-platform-common-phone-widget-view.component-B1Xu_rxC.mjs} +6 -28
  87. package/fesm2022/acorex-platform-common-phone-widget-view.component-B1Xu_rxC.mjs.map +1 -0
  88. package/fesm2022/{acorex-platform-common-rich-text-widget-column.component-DOdv5I2s.mjs → acorex-platform-common-rich-text-widget-column.component-Dbn3JMOu.mjs} +6 -29
  89. package/fesm2022/acorex-platform-common-rich-text-widget-column.component-Dbn3JMOu.mjs.map +1 -0
  90. package/fesm2022/{acorex-platform-common-rich-text-widget-edit.component-DL5UyAqe.mjs → acorex-platform-common-rich-text-widget-edit.component-CHT12edE.mjs} +6 -27
  91. package/fesm2022/acorex-platform-common-rich-text-widget-edit.component-CHT12edE.mjs.map +1 -0
  92. package/fesm2022/{acorex-platform-common-rich-text-widget-view.component-B9WB-mx9.mjs → acorex-platform-common-rich-text-widget-view.component-qvUpx39D.mjs} +5 -27
  93. package/fesm2022/acorex-platform-common-rich-text-widget-view.component-qvUpx39D.mjs.map +1 -0
  94. package/fesm2022/{acorex-platform-common-selection-list-widget-column.component-CkOuYy0Z.mjs → acorex-platform-common-selection-list-widget-column.component-E7yRTViz.mjs} +6 -29
  95. package/fesm2022/acorex-platform-common-selection-list-widget-column.component-E7yRTViz.mjs.map +1 -0
  96. package/fesm2022/{acorex-platform-common-selection-list-widget-edit.component-BmbDQ1LH.mjs → acorex-platform-common-selection-list-widget-edit.component-B8dmJ_jJ.mjs} +6 -28
  97. package/fesm2022/acorex-platform-common-selection-list-widget-edit.component-B8dmJ_jJ.mjs.map +1 -0
  98. package/fesm2022/{acorex-platform-common-selection-list-widget-filter.component-Dm_1-7eT.mjs → acorex-platform-common-selection-list-widget-filter.component-i4syx0Bj.mjs} +6 -27
  99. package/fesm2022/acorex-platform-common-selection-list-widget-filter.component-i4syx0Bj.mjs.map +1 -0
  100. package/fesm2022/{acorex-platform-common-selection-list-widget-view.component-3hinF85C.mjs → acorex-platform-common-selection-list-widget-view.component-B7disiIF.mjs} +6 -29
  101. package/fesm2022/acorex-platform-common-selection-list-widget-view.component-B7disiIF.mjs.map +1 -0
  102. package/fesm2022/{acorex-platform-common-signature-pad-widget-edit.component-DmmPbw-A.mjs → acorex-platform-common-signature-pad-widget-edit.component-CMoiIhgJ.mjs} +6 -26
  103. package/fesm2022/acorex-platform-common-signature-pad-widget-edit.component-CMoiIhgJ.mjs.map +1 -0
  104. package/fesm2022/{acorex-platform-common-signature-pad-widget-view.component-DkFaMNk8.mjs → acorex-platform-common-signature-pad-widget-view.component-HfArY6VQ.mjs} +6 -27
  105. package/fesm2022/acorex-platform-common-signature-pad-widget-view.component-HfArY6VQ.mjs.map +1 -0
  106. package/fesm2022/{acorex-platform-common-string-widget-filter.component-DAqR2PUN.mjs → acorex-platform-common-string-widget-filter.component-CDssxMLR.mjs} +6 -28
  107. package/fesm2022/acorex-platform-common-string-widget-filter.component-CDssxMLR.mjs.map +1 -0
  108. package/fesm2022/{acorex-platform-common-text-widget-column.component-DVczwvKA.mjs → acorex-platform-common-text-widget-column.component-7yp4qqIb.mjs} +5 -27
  109. package/fesm2022/acorex-platform-common-text-widget-column.component-7yp4qqIb.mjs.map +1 -0
  110. package/fesm2022/{acorex-platform-common-text-widget-edit.component-DC_GnFhe.mjs → acorex-platform-common-text-widget-edit.component-5koh5Aws.mjs} +6 -27
  111. package/fesm2022/acorex-platform-common-text-widget-edit.component-5koh5Aws.mjs.map +1 -0
  112. package/fesm2022/{acorex-platform-common-text-widget-view.component-BK3HZGgb.mjs → acorex-platform-common-text-widget-view.component-BH0LTD80.mjs} +5 -27
  113. package/fesm2022/{acorex-platform-common-text-widget-view.component-BK3HZGgb.mjs.map → acorex-platform-common-text-widget-view.component-BH0LTD80.mjs.map} +1 -1
  114. package/fesm2022/{acorex-platform-common-toggle-widget-column.component-Bp1d7SAE.mjs → acorex-platform-common-toggle-widget-column.component-C5dMjerm.mjs} +6 -28
  115. package/fesm2022/acorex-platform-common-toggle-widget-column.component-C5dMjerm.mjs.map +1 -0
  116. package/fesm2022/{acorex-platform-common-toggle-widget-edit.component-D64m4agx.mjs → acorex-platform-common-toggle-widget-edit.component-JOnGMn-9.mjs} +6 -27
  117. package/fesm2022/acorex-platform-common-toggle-widget-edit.component-JOnGMn-9.mjs.map +1 -0
  118. package/fesm2022/{acorex-platform-common-toggle-widget-view.component-BTaXXZ88.mjs → acorex-platform-common-toggle-widget-view.component-DguoIz_c.mjs} +6 -28
  119. package/fesm2022/acorex-platform-common-toggle-widget-view.component-DguoIz_c.mjs.map +1 -0
  120. package/fesm2022/acorex-platform-common.mjs +197 -190
  121. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  122. package/fesm2022/acorex-platform-core.mjs +114 -7
  123. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  124. package/fesm2022/acorex-platform-layout-builder.mjs +72 -61
  125. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  126. package/fesm2022/acorex-platform-layout-designer.mjs +374 -234
  127. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  128. package/fesm2022/acorex-platform-layout-entity.mjs +916 -897
  129. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  130. package/fesm2022/acorex-platform-layout-setting.mjs +247 -44
  131. package/fesm2022/acorex-platform-layout-setting.mjs.map +1 -1
  132. package/fesm2022/{acorex-platform-layouts-entity-create-view.component-JsGlDx_S.mjs → acorex-platform-layouts-entity-create-view.component-1Yw4H3CW.mjs} +6 -6
  133. package/fesm2022/acorex-platform-layouts-entity-create-view.component-1Yw4H3CW.mjs.map +1 -0
  134. package/fesm2022/{acorex-platform-layouts-entity-import-view.component-9FK_Iro9.mjs → acorex-platform-layouts-entity-import-view.component-BIHTWoXR.mjs} +7 -9
  135. package/fesm2022/acorex-platform-layouts-entity-import-view.component-BIHTWoXR.mjs.map +1 -0
  136. package/fesm2022/{acorex-platform-layouts-entity-modify-view.component-CNbc8ewu.mjs → acorex-platform-layouts-entity-modify-view.component-Cb2Yvtav.mjs} +7 -9
  137. package/fesm2022/acorex-platform-layouts-entity-modify-view.component-Cb2Yvtav.mjs.map +1 -0
  138. package/fesm2022/acorex-platform-layouts.mjs +99 -88
  139. package/fesm2022/acorex-platform-layouts.mjs.map +1 -1
  140. package/fesm2022/acorex-platform-native.mjs +7 -7
  141. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Bw-rbKbL.mjs +108 -0
  142. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Bw-rbKbL.mjs.map +1 -0
  143. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DJYTC375.mjs +305 -0
  144. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DJYTC375.mjs.map +1 -0
  145. package/fesm2022/{acorex-platform-themes-default-entity-master-modify-view.component-wPZPhMgy.mjs → acorex-platform-themes-default-entity-master-modify-view.component-DoeGBemE.mjs} +17 -18
  146. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-DoeGBemE.mjs.map +1 -0
  147. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-D8UjpvuI.mjs +130 -0
  148. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-D8UjpvuI.mjs.map +1 -0
  149. package/fesm2022/{acorex-platform-themes-default-error-401.component-D5QQ2HAv.mjs → acorex-platform-themes-default-error-401.component-CRMYVnTw.mjs} +5 -5
  150. package/fesm2022/acorex-platform-themes-default-error-401.component-CRMYVnTw.mjs.map +1 -0
  151. package/fesm2022/{acorex-platform-themes-default-error-404.component-DSY_D3Iq.mjs → acorex-platform-themes-default-error-404.component-Dc_IGKXu.mjs} +5 -5
  152. package/fesm2022/acorex-platform-themes-default-error-404.component-Dc_IGKXu.mjs.map +1 -0
  153. package/fesm2022/{acorex-platform-themes-default-error-offline.component-B6wSkMdd.mjs → acorex-platform-themes-default-error-offline.component-C6raiMLq.mjs} +5 -5
  154. package/fesm2022/acorex-platform-themes-default-error-offline.component-C6raiMLq.mjs.map +1 -0
  155. package/fesm2022/acorex-platform-themes-default.mjs +182 -286
  156. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  157. package/fesm2022/acorex-platform-themes-shared.mjs +8 -9
  158. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  159. package/fesm2022/{acorex-platform-widgets-button-widget-designer.component-CPFA79Gx.mjs → acorex-platform-widgets-button-widget-designer.component-BQe1zP7P.mjs} +6 -7
  160. package/fesm2022/acorex-platform-widgets-button-widget-designer.component-BQe1zP7P.mjs.map +1 -0
  161. package/fesm2022/{acorex-platform-widgets-checkbox-widget-column.component-MInF2GVN.mjs → acorex-platform-widgets-checkbox-widget-column.component-05nKV-UV.mjs} +6 -7
  162. package/fesm2022/acorex-platform-widgets-checkbox-widget-column.component-05nKV-UV.mjs.map +1 -0
  163. package/fesm2022/{acorex-platform-widgets-checkbox-widget-designer.component-B7Qv2aYx.mjs → acorex-platform-widgets-checkbox-widget-designer.component-RCi5IJOR.mjs} +6 -7
  164. package/fesm2022/acorex-platform-widgets-checkbox-widget-designer.component-RCi5IJOR.mjs.map +1 -0
  165. package/fesm2022/{acorex-platform-widgets-checkbox-widget-view.component-DP4kITs-.mjs → acorex-platform-widgets-checkbox-widget-view.component-BkWcZ4K9.mjs} +6 -7
  166. package/fesm2022/acorex-platform-widgets-checkbox-widget-view.component-BkWcZ4K9.mjs.map +1 -0
  167. package/fesm2022/{acorex-platform-widgets-color-box-widget-designer.component-uQBHAspe.mjs → acorex-platform-widgets-color-box-widget-designer.component-CWhbgmDV.mjs} +6 -7
  168. package/fesm2022/acorex-platform-widgets-color-box-widget-designer.component-CWhbgmDV.mjs.map +1 -0
  169. package/fesm2022/{acorex-platform-widgets-contact-widget-filter.component-DnQZon-E.mjs → acorex-platform-widgets-contact-widget-filter.component-B1HiCGC6.mjs} +5 -6
  170. package/fesm2022/acorex-platform-widgets-contact-widget-filter.component-B1HiCGC6.mjs.map +1 -0
  171. package/fesm2022/{acorex-platform-widgets-page-widget-designer.component-DOulAanE.mjs → acorex-platform-widgets-page-widget-designer.component-DGNcuRbs.mjs} +21 -11
  172. package/fesm2022/acorex-platform-widgets-page-widget-designer.component-DGNcuRbs.mjs.map +1 -0
  173. package/fesm2022/{acorex-platform-widgets-rich-text-popup.component-C8KmObPV.mjs → acorex-platform-widgets-rich-text-popup.component-D7LZqQIO.mjs} +6 -7
  174. package/fesm2022/acorex-platform-widgets-rich-text-popup.component-D7LZqQIO.mjs.map +1 -0
  175. package/fesm2022/{acorex-platform-widgets-text-block-widget-designer.component-BE6goaZc.mjs → acorex-platform-widgets-text-block-widget-designer.component-BToPbMjj.mjs} +6 -7
  176. package/fesm2022/acorex-platform-widgets-text-block-widget-designer.component-BToPbMjj.mjs.map +1 -0
  177. package/fesm2022/acorex-platform-widgets.mjs +576 -876
  178. package/fesm2022/acorex-platform-widgets.mjs.map +1 -1
  179. package/fesm2022/acorex-platform-workflow.mjs +23 -23
  180. package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
  181. package/layout/builder/lib/builder/widget-column-renderer.d.ts +1 -1
  182. package/layout/builder/lib/builder/widget.types.d.ts +21 -5
  183. package/layout/designer/lib/designer/components/add-widget-button/add-widget-mini-button.component.d.ts +3 -1
  184. package/layout/designer/lib/designer/components/board/board.component.d.ts +4 -3
  185. package/layout/designer/lib/designer/designer.component.d.ts +1 -1
  186. package/layout/designer/lib/designer/shared/designer-connector.service.d.ts +2 -2
  187. package/layout/designer/lib/designer/shared/designer.service.d.ts +10 -4
  188. package/layout/designer/lib/designer/shared/designer.types.d.ts +11 -0
  189. package/layout/designer/lib/designer/shared/generic-commands.types.d.ts +1 -0
  190. package/layout/designer/lib/designer/shared/widget-designer-renderer.directive.d.ts +7 -5
  191. package/layout/designer/lib/property-viewer/widget-property-viewer.component.d.ts +1 -1
  192. package/layout/entity/lib/entity-master-create.viewmodel.d.ts +10 -5
  193. package/layout/entity/lib/entity-master-list.viewmodel.d.ts +11 -4
  194. package/layout/entity/lib/index.d.ts +4 -3
  195. package/layout/entity/lib/workflows/create-entity.workflow.d.ts +2 -0
  196. package/layout/setting/README.md +2 -3
  197. package/{themes/default/lib/layouts/setting-layout → layout/setting/lib}/convert-setting-data.d.ts +7 -6
  198. package/layout/setting/lib/setting.viewmodel.d.ts +38 -9
  199. package/layouts/lib/admin/entity-layout/entity-list-view/entity-list-view.component.d.ts +12 -0
  200. package/layouts/lib/admin/entity-layout/workflows/create-entity.workflow.d.ts +2 -0
  201. package/package.json +8 -36
  202. package/themes/default/lib/default.module.d.ts +3 -4
  203. package/themes/default/lib/layouts/entity-layouts/entity-master-list-view/entity-master-list-view.component.d.ts +1 -4
  204. package/themes/default/lib/layouts/entity-layouts/entity-master-list-view/list-view-option-columns/list-view-option-columns.component.d.ts +3 -0
  205. package/themes/default/lib/layouts/entity-layouts/entity-master-modify-view/entity-master-modify-view.component.d.ts +1 -1
  206. package/themes/default/lib/layouts/setting-layout/index.d.ts +2 -2
  207. package/themes/default/lib/layouts/setting-layout/setting-menu/setting-menu.component.d.ts +12 -0
  208. package/themes/default/lib/layouts/setting-layout/setting-view/setting-view.component.d.ts +7 -0
  209. package/widgets/lib/properties/editors.props.d.ts +1 -0
  210. package/widgets/lib/widgets/advance/cron-job/cron-job-widget-edit.component.d.ts +1 -2
  211. package/widgets/lib/widgets/advance/file/file-box-widget-view.component.d.ts +1 -1
  212. package/widgets/lib/widgets/editors/select/select-box-widget-edit.component.d.ts +1 -0
  213. package/widgets/lib/widgets/index.d.ts +0 -1
  214. package/widgets/lib/widgets/layout/block/block-widget.config.d.ts +4 -6
  215. package/workflow/lib/workflow.service.d.ts +1 -1
  216. package/esm2022/acorex-platform.mjs +0 -5
  217. package/esm2022/auth/acorex-platform-auth.mjs +0 -5
  218. package/esm2022/auth/index.mjs +0 -14
  219. package/esm2022/auth/lib/application/application.loader.mjs +0 -23
  220. package/esm2022/auth/lib/application/application.types.mjs +0 -2
  221. package/esm2022/auth/lib/auth-registry.service.mjs +0 -29
  222. package/esm2022/auth/lib/auth.guard.mjs +0 -16
  223. package/esm2022/auth/lib/auth.module.mjs +0 -90
  224. package/esm2022/auth/lib/auth.strategy.mjs +0 -2
  225. package/esm2022/auth/lib/errors.types.mjs +0 -15
  226. package/esm2022/auth/lib/feature/feature.directive.mjs +0 -55
  227. package/esm2022/auth/lib/feature/feature.guard.mjs +0 -19
  228. package/esm2022/auth/lib/feature/feature.loader.mjs +0 -14
  229. package/esm2022/auth/lib/feature/feature.types.mjs +0 -2
  230. package/esm2022/auth/lib/feature/index.mjs +0 -5
  231. package/esm2022/auth/lib/permission/index.mjs +0 -5
  232. package/esm2022/auth/lib/permission/permission.directive.mjs +0 -54
  233. package/esm2022/auth/lib/permission/permission.guard.mjs +0 -19
  234. package/esm2022/auth/lib/permission/permission.loader.mjs +0 -14
  235. package/esm2022/auth/lib/permission/permission.types.mjs +0 -2
  236. package/esm2022/auth/lib/session.service.mjs +0 -265
  237. package/esm2022/auth/lib/session.types.mjs +0 -29
  238. package/esm2022/auth/lib/tenant/tenant.loader.mjs +0 -20
  239. package/esm2022/auth/lib/tenant/tenant.types.mjs +0 -2
  240. package/esm2022/auth/lib/user/user.types.mjs +0 -2
  241. package/esm2022/common/acorex-platform-common.mjs +0 -5
  242. package/esm2022/common/index.mjs +0 -13
  243. package/esm2022/common/lib/app/app-startup.service.mjs +0 -40
  244. package/esm2022/common/lib/app/application.types.mjs +0 -55
  245. package/esm2022/common/lib/app/index.mjs +0 -4
  246. package/esm2022/common/lib/app/operators.mjs +0 -65
  247. package/esm2022/common/lib/common.module.mjs +0 -155
  248. package/esm2022/common/lib/configs/app.config.mjs +0 -27
  249. package/esm2022/common/lib/configs/config.types.mjs +0 -3
  250. package/esm2022/common/lib/data/data-provider.types.mjs +0 -3
  251. package/esm2022/common/lib/data/data.types.mjs +0 -2
  252. package/esm2022/common/lib/data/dexie-storage.service.mjs +0 -130
  253. package/esm2022/common/lib/data/entity-data-seeder.mjs +0 -25
  254. package/esm2022/common/lib/data/entity-storage-service.mjs +0 -63
  255. package/esm2022/common/lib/data/filter-middleware.service.mjs +0 -53
  256. package/esm2022/common/lib/data/index.mjs +0 -8
  257. package/esm2022/common/lib/data/operators.service.mjs +0 -15
  258. package/esm2022/common/lib/errors/error-handler-registry.service.mjs +0 -29
  259. package/esm2022/common/lib/errors/error-handler.types.mjs +0 -2
  260. package/esm2022/common/lib/errors/global-error-handler.mjs +0 -36
  261. package/esm2022/common/lib/errors/index.mjs +0 -4
  262. package/esm2022/common/lib/layout/beardcrumb.type.mjs +0 -2
  263. package/esm2022/common/lib/layout/component-slot/component-slot-loader.service.mjs +0 -57
  264. package/esm2022/common/lib/layout/component-slot/component-slot-registery.service.mjs +0 -28
  265. package/esm2022/common/lib/layout/component-slot/component-slot.directive.mjs +0 -24
  266. package/esm2022/common/lib/layout/component-slot/component-slot.module.mjs +0 -72
  267. package/esm2022/common/lib/layout/component-slot/component-slot.types.mjs +0 -2
  268. package/esm2022/common/lib/layout/component-slot/index.mjs +0 -6
  269. package/esm2022/common/lib/layout/grid-layout/grid-layout.directive.mjs +0 -61
  270. package/esm2022/common/lib/layout/grid-layout/grid-layout.types.mjs +0 -2
  271. package/esm2022/common/lib/layout/grid-layout/index.mjs +0 -3
  272. package/esm2022/common/lib/layout/index.mjs +0 -8
  273. package/esm2022/common/lib/layout/logo/index.mjs +0 -3
  274. package/esm2022/common/lib/layout/logo/logo.component.mjs +0 -38
  275. package/esm2022/common/lib/layout/logo/logo.types.mjs +0 -21
  276. package/esm2022/common/lib/layout/menu/index.mjs +0 -4
  277. package/esm2022/common/lib/layout/menu/menu.provider.mjs +0 -137
  278. package/esm2022/common/lib/layout/menu/menu.service.mjs +0 -105
  279. package/esm2022/common/lib/layout/menu/menu.types.mjs +0 -2
  280. package/esm2022/common/lib/layout/sticky.directive.mjs +0 -78
  281. package/esm2022/common/lib/layout/theme/components/slots/footer-text-slot.component.mjs +0 -20
  282. package/esm2022/common/lib/layout/theme/components/slots/index.mjs +0 -3
  283. package/esm2022/common/lib/layout/theme/components/slots/navbar-slot.component.mjs +0 -36
  284. package/esm2022/common/lib/schema/component-loader.mjs +0 -2
  285. package/esm2022/common/lib/schema/entity/entity-registery.service.mjs +0 -70
  286. package/esm2022/common/lib/schema/entity/entity.class.mjs +0 -32
  287. package/esm2022/common/lib/schema/entity/entity.loader.mjs +0 -13
  288. package/esm2022/common/lib/schema/entity/index.mjs +0 -4
  289. package/esm2022/common/lib/schema/formats.mjs +0 -2
  290. package/esm2022/common/lib/schema/index.mjs +0 -9
  291. package/esm2022/common/lib/schema/schema-registery.service.mjs +0 -33
  292. package/esm2022/common/lib/schema/schema.module.mjs +0 -23
  293. package/esm2022/common/lib/schema/schema.types.mjs +0 -2
  294. package/esm2022/common/lib/schema/widget/index.mjs +0 -6
  295. package/esm2022/common/lib/schema/widget/widget-base.mjs +0 -113
  296. package/esm2022/common/lib/schema/widget/widget-column-renderer.mjs +0 -118
  297. package/esm2022/common/lib/schema/widget/widget-filter-renderer.mjs +0 -133
  298. package/esm2022/common/lib/schema/widget/widget-renderer.mjs +0 -148
  299. package/esm2022/common/lib/schema/widget/widget-token.mjs +0 -3
  300. package/esm2022/common/lib/schema/widgets/avatar/avatar-widget-edit.component.mjs +0 -166
  301. package/esm2022/common/lib/schema/widgets/avatar/avatar-widget-view.component.mjs +0 -63
  302. package/esm2022/common/lib/schema/widgets/checkbox/checkbox-widget-column.component.mjs +0 -53
  303. package/esm2022/common/lib/schema/widgets/checkbox/checkbox-widget-edit.component.mjs +0 -22
  304. package/esm2022/common/lib/schema/widgets/checkbox/checkbox-widget-view.component.mjs +0 -47
  305. package/esm2022/common/lib/schema/widgets/common-widget-filter/boolean-widget-filter.component.mjs +0 -153
  306. package/esm2022/common/lib/schema/widgets/common-widget-filter/number-widget-filter.component.mjs +0 -135
  307. package/esm2022/common/lib/schema/widgets/common-widget-filter/string-widget-filter.component.mjs +0 -125
  308. package/esm2022/common/lib/schema/widgets/common-widgets.module.mjs +0 -505
  309. package/esm2022/common/lib/schema/widgets/dateTime/dateTime-widget-column.component.mjs +0 -44
  310. package/esm2022/common/lib/schema/widgets/dateTime/dateTime-widget-edit.component.mjs +0 -177
  311. package/esm2022/common/lib/schema/widgets/dateTime/dateTime-widget-filter.component.mjs +0 -284
  312. package/esm2022/common/lib/schema/widgets/dateTime/dateTime-widget-view.component.mjs +0 -71
  313. package/esm2022/common/lib/schema/widgets/email/email-widget-column.component.mjs +0 -73
  314. package/esm2022/common/lib/schema/widgets/email/email-widget-edit.component.mjs +0 -248
  315. package/esm2022/common/lib/schema/widgets/email/email-widget-view.component.mjs +0 -108
  316. package/esm2022/common/lib/schema/widgets/file/file-widget-column.component.mjs +0 -27
  317. package/esm2022/common/lib/schema/widgets/file/file-widget-edit.component.mjs +0 -200
  318. package/esm2022/common/lib/schema/widgets/file/file-widget-filter.component.mjs +0 -27
  319. package/esm2022/common/lib/schema/widgets/file/file-widget-view.component.mjs +0 -153
  320. package/esm2022/common/lib/schema/widgets/gallery/gallery-widget-edit.component.mjs +0 -189
  321. package/esm2022/common/lib/schema/widgets/gallery/gallery-widget-filter.component.mjs +0 -27
  322. package/esm2022/common/lib/schema/widgets/gallery/gallery-widget-types.mjs +0 -2
  323. package/esm2022/common/lib/schema/widgets/gallery/gallery-widget-view.component.mjs +0 -173
  324. package/esm2022/common/lib/schema/widgets/index.mjs +0 -2
  325. package/esm2022/common/lib/schema/widgets/lookup/lookup-widget-column.component.mjs +0 -43
  326. package/esm2022/common/lib/schema/widgets/lookup/lookup-widget-edit.component.mjs +0 -95
  327. package/esm2022/common/lib/schema/widgets/lookup/lookup-widget-filter.component.mjs +0 -160
  328. package/esm2022/common/lib/schema/widgets/lookup/lookup-widget-view.component.mjs +0 -54
  329. package/esm2022/common/lib/schema/widgets/map/map-widget-edit.component.mjs +0 -91
  330. package/esm2022/common/lib/schema/widgets/map/map-widget-view.component.mjs +0 -63
  331. package/esm2022/common/lib/schema/widgets/messenger/messenger-widget-column.component.mjs +0 -71
  332. package/esm2022/common/lib/schema/widgets/messenger/messenger-widget-edit.component.mjs +0 -136
  333. package/esm2022/common/lib/schema/widgets/messenger/messenger-widget-view.component.mjs +0 -132
  334. package/esm2022/common/lib/schema/widgets/number/number-widget-edit.component.mjs +0 -46
  335. package/esm2022/common/lib/schema/widgets/number/number-widget-view.component.mjs +0 -30
  336. package/esm2022/common/lib/schema/widgets/password/change-password.component.mjs +0 -174
  337. package/esm2022/common/lib/schema/widgets/password/password-widget-column.component.mjs +0 -67
  338. package/esm2022/common/lib/schema/widgets/password/password-widget-edit.component.mjs +0 -41
  339. package/esm2022/common/lib/schema/widgets/password/password-widget-view.component.mjs +0 -109
  340. package/esm2022/common/lib/schema/widgets/phone/phone-widget-column.component.mjs +0 -91
  341. package/esm2022/common/lib/schema/widgets/phone/phone-widget-edit.component.mjs +0 -248
  342. package/esm2022/common/lib/schema/widgets/phone/phone-widget-view.component.mjs +0 -123
  343. package/esm2022/common/lib/schema/widgets/rich-text/rich-text-widget-column.component.mjs +0 -61
  344. package/esm2022/common/lib/schema/widgets/rich-text/rich-text-widget-edit.component.mjs +0 -66
  345. package/esm2022/common/lib/schema/widgets/rich-text/rich-text-widget-view.component.mjs +0 -34
  346. package/esm2022/common/lib/schema/widgets/selection-list/selection-list-widget-column.component.mjs +0 -45
  347. package/esm2022/common/lib/schema/widgets/selection-list/selection-list-widget-edit.component.mjs +0 -53
  348. package/esm2022/common/lib/schema/widgets/selection-list/selection-list-widget-filter.component.mjs +0 -45
  349. package/esm2022/common/lib/schema/widgets/selection-list/selection-list-widget-view.component.mjs +0 -45
  350. package/esm2022/common/lib/schema/widgets/signature-pad/signature-pad-widget-edit.component.mjs +0 -128
  351. package/esm2022/common/lib/schema/widgets/signature-pad/signature-pad-widget-view.component.mjs +0 -41
  352. package/esm2022/common/lib/schema/widgets/text/largetext-widget-edit.component.mjs +0 -36
  353. package/esm2022/common/lib/schema/widgets/text/text-widget-column.component.mjs +0 -46
  354. package/esm2022/common/lib/schema/widgets/text/text-widget-edit.component.mjs +0 -161
  355. package/esm2022/common/lib/schema/widgets/text/text-widget-view.component.mjs +0 -66
  356. package/esm2022/common/lib/schema/widgets/toggle/toggle-widget-column.component.mjs +0 -57
  357. package/esm2022/common/lib/schema/widgets/toggle/toggle-widget-edit.component.mjs +0 -25
  358. package/esm2022/common/lib/schema/widgets/toggle/toggle-widget-view.component.mjs +0 -49
  359. package/esm2022/common/lib/settings/index.mjs +0 -5
  360. package/esm2022/common/lib/settings/setting-definition.provider.mjs +0 -183
  361. package/esm2022/common/lib/settings/settings.provider.mjs +0 -35
  362. package/esm2022/common/lib/settings/settings.service.mjs +0 -53
  363. package/esm2022/common/lib/settings/settings.types.mjs +0 -2
  364. package/esm2022/common/lib/store/common.actions.mjs +0 -5
  365. package/esm2022/common/lib/store/common.effects.mjs +0 -34
  366. package/esm2022/common/lib/store/index.mjs +0 -3
  367. package/esm2022/common/lib/utils/clipboard-service.mjs +0 -26
  368. package/esm2022/common/lib/utils/data-generator.mjs +0 -133
  369. package/esm2022/common/lib/utils/index.mjs +0 -4
  370. package/esm2022/common/lib/utils/pdf.service.mjs +0 -85
  371. package/esm2022/common/lib/workflows/common.workflow.mjs +0 -73
  372. package/esm2022/common/lib/workflows/error-handler.mjs +0 -24
  373. package/esm2022/common/lib/workflows/index.mjs +0 -3
  374. package/esm2022/core/acorex-platform-core.mjs +0 -5
  375. package/esm2022/core/index.mjs +0 -5
  376. package/esm2022/core/lib/types.mjs +0 -13
  377. package/esm2022/core/utils/countdown-timer.mjs +0 -49
  378. package/esm2022/core/utils/data-conditioner.mjs +0 -138
  379. package/esm2022/core/utils/html-utils.mjs +0 -27
  380. package/esm2022/index.mjs +0 -2
  381. package/esm2022/layout/builder/acorex-platform-layout-builder.mjs +0 -5
  382. package/esm2022/layout/builder/index.mjs +0 -2
  383. package/esm2022/layout/builder/lib/builder/builder.module.mjs +0 -68
  384. package/esm2022/layout/builder/lib/builder/builder.service.mjs +0 -105
  385. package/esm2022/layout/builder/lib/builder/datasource-provider.service.mjs +0 -27
  386. package/esm2022/layout/builder/lib/builder/index.mjs +0 -12
  387. package/esm2022/layout/builder/lib/builder/widget-catalog.mjs +0 -39
  388. package/esm2022/layout/builder/lib/builder/widget-column-renderer.mjs +0 -117
  389. package/esm2022/layout/builder/lib/builder/widget-container.component.mjs +0 -46
  390. package/esm2022/layout/builder/lib/builder/widget-groups.mjs +0 -27
  391. package/esm2022/layout/builder/lib/builder/widget-registery.service.mjs +0 -36
  392. package/esm2022/layout/builder/lib/builder/widget-renderer.component.directive.mjs +0 -313
  393. package/esm2022/layout/builder/lib/builder/widget-renderer.component.mjs +0 -320
  394. package/esm2022/layout/builder/lib/builder/widget.types.mjs +0 -264
  395. package/esm2022/layout/designer/acorex-platform-layout-designer.mjs +0 -5
  396. package/esm2022/layout/designer/index.mjs +0 -5
  397. package/esm2022/layout/designer/lib/designer/components/add-widget-button/add-widget-button.component.mjs +0 -37
  398. package/esm2022/layout/designer/lib/designer/components/add-widget-button/add-widget-line-button.component.mjs +0 -49
  399. package/esm2022/layout/designer/lib/designer/components/add-widget-button/add-widget-mini-button.component.mjs +0 -53
  400. package/esm2022/layout/designer/lib/designer/components/add-widget-button/index.mjs +0 -4
  401. package/esm2022/layout/designer/lib/designer/components/board/board.component.mjs +0 -139
  402. package/esm2022/layout/designer/lib/designer/components/breadcrumbs/breadcrumbs.component.mjs +0 -59
  403. package/esm2022/layout/designer/lib/designer/components/drawers/data-sources/data-sources.component.mjs +0 -33
  404. package/esm2022/layout/designer/lib/designer/components/drawers/history/history.component.mjs +0 -30
  405. package/esm2022/layout/designer/lib/designer/components/drawers/outline/outline.component.mjs +0 -61
  406. package/esm2022/layout/designer/lib/designer/components/drawers/pages/pages.component.mjs +0 -28
  407. package/esm2022/layout/designer/lib/designer/components/grid-drawer/grid-drawer.component.mjs +0 -82
  408. package/esm2022/layout/designer/lib/designer/components/header-menu/header-menu.component.mjs +0 -105
  409. package/esm2022/layout/designer/lib/designer/components/size-mode/view-size-toolbar.component.mjs +0 -54
  410. package/esm2022/layout/designer/lib/designer/components/widget-picker/widget-picker.component.mjs +0 -121
  411. package/esm2022/layout/designer/lib/designer/designer.component.mjs +0 -81
  412. package/esm2022/layout/designer/lib/designer/index.mjs +0 -10
  413. package/esm2022/layout/designer/lib/designer/shared/command.mjs +0 -185
  414. package/esm2022/layout/designer/lib/designer/shared/designer-connector.service.mjs +0 -10
  415. package/esm2022/layout/designer/lib/designer/shared/designer.service.mjs +0 -603
  416. package/esm2022/layout/designer/lib/designer/shared/designer.types.mjs +0 -6
  417. package/esm2022/layout/designer/lib/designer/shared/drawer-content/drawer-content.component.mjs +0 -16
  418. package/esm2022/layout/designer/lib/designer/shared/generic-commands.types.mjs +0 -52
  419. package/esm2022/layout/designer/lib/designer/shared/widget-designer-renderer.directive.mjs +0 -220
  420. package/esm2022/layout/designer/lib/preview/preview-frame.component.mjs +0 -75
  421. package/esm2022/layout/designer/lib/preview/preview-viewer.component.mjs +0 -67
  422. package/esm2022/layout/designer/lib/preview/preview.component.mjs +0 -79
  423. package/esm2022/layout/designer/lib/property-viewer/widget-property-viewer.component.mjs +0 -119
  424. package/esm2022/layout/entity/acorex-platform-layout-entity.mjs +0 -5
  425. package/esm2022/layout/entity/index.mjs +0 -2
  426. package/esm2022/layout/entity/lib/entity-detail-list.viewmodel.mjs +0 -182
  427. package/esm2022/layout/entity/lib/entity-master-create.viewmodel.mjs +0 -143
  428. package/esm2022/layout/entity/lib/entity-master-list.viewmodel.mjs +0 -325
  429. package/esm2022/layout/entity/lib/entity-master-single.viewmodel.mjs +0 -227
  430. package/esm2022/layout/entity/lib/entity-master-update.viewmodel.mjs +0 -103
  431. package/esm2022/layout/entity/lib/entity-registery.service.mjs +0 -69
  432. package/esm2022/layout/entity/lib/entity.config.mjs +0 -30
  433. package/esm2022/layout/entity/lib/entity.module.mjs +0 -154
  434. package/esm2022/layout/entity/lib/entity.service.mjs +0 -18
  435. package/esm2022/layout/entity/lib/entity.viewmodel.mjs +0 -34
  436. package/esm2022/layout/entity/lib/index.mjs +0 -10
  437. package/esm2022/layout/entity/lib/widgets/lookup-widget/index.mjs +0 -7
  438. package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget-column.component.mjs +0 -25
  439. package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget-edit.component.mjs +0 -267
  440. package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget-filter.component.mjs +0 -20
  441. package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget-print.component.mjs +0 -19
  442. package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget-selector.component.mjs +0 -208
  443. package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget-selector.viewmodel.mjs +0 -109
  444. package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget-view.component.mjs +0 -110
  445. package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget.config.mjs +0 -62
  446. package/esm2022/layout/entity/lib/widgets/widget-selector/index.mjs +0 -4
  447. package/esm2022/layout/entity/lib/widgets/widget-selector/widget-selector-widget-edit.component.mjs +0 -130
  448. package/esm2022/layout/entity/lib/widgets/widget-selector/widget-selector-widget-view.component.mjs +0 -18
  449. package/esm2022/layout/entity/lib/widgets/widget-selector/widget-selector-widget.config.mjs +0 -20
  450. package/esm2022/layout/entity/lib/workflows/create-entity.workflow.mjs +0 -92
  451. package/esm2022/layout/entity/lib/workflows/delete-entity.workflow.mjs +0 -130
  452. package/esm2022/layout/entity/lib/workflows/modify-section.workflow.mjs +0 -94
  453. package/esm2022/layout/entity/lib/workflows/show-details.workflow.mjs +0 -35
  454. package/esm2022/layout/entity/lib/workflows/show-list.workflow.mjs +0 -35
  455. package/esm2022/layout/setting/acorex-platform-layout-setting.mjs +0 -5
  456. package/esm2022/layout/setting/index.mjs +0 -2
  457. package/esm2022/layout/setting/lib/setting.viewmodel.mjs +0 -50
  458. package/esm2022/layouts/acorex-platform-layouts.mjs +0 -5
  459. package/esm2022/layouts/index.mjs +0 -3
  460. package/esm2022/layouts/lib/admin/admin.module.mjs +0 -94
  461. package/esm2022/layouts/lib/admin/admin.routes.mjs +0 -48
  462. package/esm2022/layouts/lib/admin/custom-reuse.strategy.mjs +0 -20
  463. package/esm2022/layouts/lib/admin/entity-layout/entity-create-view/entity-create-view.component.mjs +0 -119
  464. package/esm2022/layouts/lib/admin/entity-layout/entity-create-view/entity-create-view.config.mjs +0 -138
  465. package/esm2022/layouts/lib/admin/entity-layout/entity-details-view/detail-view.config.mjs +0 -126
  466. package/esm2022/layouts/lib/admin/entity-layout/entity-details-view/entity-details-view.component.mjs +0 -164
  467. package/esm2022/layouts/lib/admin/entity-layout/entity-details-view/index.mjs +0 -3
  468. package/esm2022/layouts/lib/admin/entity-layout/entity-import-view/entity-import-view.component.mjs +0 -91
  469. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/components/entity-custom-view/entity-custom-view.component.mjs +0 -201
  470. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/components/index.mjs +0 -6
  471. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/components/list-view-option-columns/list-view-option-columns.component.mjs +0 -53
  472. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/components/list-view-option-conditions/list-view-option-conditions.component.mjs +0 -105
  473. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/components/list-view-option-conditions/list-view-option-filter-operator.component.mjs +0 -76
  474. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/components/list-view-option-sorting/list-view-option-sorting.component.mjs +0 -56
  475. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/entity-list-view.component.mjs +0 -295
  476. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/index.mjs +0 -5
  477. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/list-view.config.mjs +0 -341
  478. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/list-view.module.mjs +0 -163
  479. package/esm2022/layouts/lib/admin/entity-layout/entity-modify-view/entity-modify-view.component.mjs +0 -95
  480. package/esm2022/layouts/lib/admin/entity-layout/entity-modify-view/entity-modify-view.config.mjs +0 -67
  481. package/esm2022/layouts/lib/admin/entity-layout/entity-quick-view/entity-quick-view.component.mjs +0 -77
  482. package/esm2022/layouts/lib/admin/entity-layout/entity-quick-view/index.mjs +0 -2
  483. package/esm2022/layouts/lib/admin/entity-layout/index.mjs +0 -5
  484. package/esm2022/layouts/lib/admin/entity-layout/workflows/create-entity.workflow.mjs +0 -93
  485. package/esm2022/layouts/lib/admin/entity-layout/workflows/delete-entity.workflow.mjs +0 -139
  486. package/esm2022/layouts/lib/admin/entity-layout/workflows/import-entity.workflow.mjs +0 -77
  487. package/esm2022/layouts/lib/admin/entity-layout/workflows/index.mjs +0 -7
  488. package/esm2022/layouts/lib/admin/entity-layout/workflows/modify-entity.workflow.mjs +0 -100
  489. package/esm2022/layouts/lib/admin/entity-layout/workflows/modify-section.workflow.mjs +0 -85
  490. package/esm2022/layouts/lib/admin/entity-layout/workflows/show-details.workflow.mjs +0 -36
  491. package/esm2022/layouts/lib/admin/entity-layout/workflows/show-list.workflow.mjs +0 -35
  492. package/esm2022/layouts/lib/admin/entity-layout/workflows/show-quick-view.workflow.mjs +0 -50
  493. package/esm2022/layouts/lib/admin/entity.resolver.mjs +0 -17
  494. package/esm2022/layouts/lib/admin/index.mjs +0 -6
  495. package/esm2022/layouts/lib/layout.module.mjs +0 -43
  496. package/esm2022/native/acorex-platform-native.mjs +0 -5
  497. package/esm2022/native/index.mjs +0 -3
  498. package/esm2022/native/lib/native.module.mjs +0 -16
  499. package/esm2022/native/lib/native.service.mjs +0 -133
  500. package/esm2022/themes/default/acorex-platform-themes-default.mjs +0 -5
  501. package/esm2022/themes/default/index.mjs +0 -5
  502. package/esm2022/themes/default/lib/default.module.mjs +0 -78
  503. package/esm2022/themes/default/lib/entity-reuse.strategy.mjs +0 -19
  504. package/esm2022/themes/default/lib/layout.routes.mjs +0 -20
  505. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-detail-list-view/entity-detail-list-view.component.mjs +0 -160
  506. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-create-view/entity-master-create-view.component.mjs +0 -106
  507. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-list-view/entity-master-list-view.component.mjs +0 -190
  508. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-list-view/list-view-option-columns/list-view-option-columns.component.mjs +0 -64
  509. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-list-view/list-view-option-sorting/list-view-option-sorting.component.mjs +0 -72
  510. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-modify-view/entity-master-modify-view.component.mjs +0 -85
  511. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-single-view/entity-master-single-view.component.mjs +0 -84
  512. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-single-view/overview/entity-single-overview.component.mjs +0 -70
  513. package/esm2022/themes/default/lib/layouts/entity-layouts/index.mjs +0 -2
  514. package/esm2022/themes/default/lib/layouts/root-layout/components/footer/footer.component.mjs +0 -14
  515. package/esm2022/themes/default/lib/layouts/root-layout/components/header/header.component.mjs +0 -27
  516. package/esm2022/themes/default/lib/layouts/root-layout/components/menu/root-menu.component.mjs +0 -40
  517. package/esm2022/themes/default/lib/layouts/root-layout/index.mjs +0 -6
  518. package/esm2022/themes/default/lib/layouts/root-layout/root-layout.component.mjs +0 -36
  519. package/esm2022/themes/default/lib/layouts/root-layout/root-layout.module.mjs +0 -99
  520. package/esm2022/themes/default/lib/layouts/setting-layout/convert-setting-data.mjs +0 -49
  521. package/esm2022/themes/default/lib/layouts/setting-layout/index.mjs +0 -3
  522. package/esm2022/themes/default/lib/layouts/setting-layout/setting-preview/setting-preview.component.mjs +0 -104
  523. package/esm2022/themes/default/lib/layouts/setting-layout/setting-view/setting-menu.component.mjs +0 -44
  524. package/esm2022/themes/default/lib/pages/errors/error-401/error-401.component.mjs +0 -28
  525. package/esm2022/themes/default/lib/pages/errors/error-404/error-404.component.mjs +0 -22
  526. package/esm2022/themes/default/lib/pages/errors/error-offline/error-offline.component.mjs +0 -16
  527. package/esm2022/themes/shared/acorex-platform-themes-shared.mjs +0 -5
  528. package/esm2022/themes/shared/index.mjs +0 -4
  529. package/esm2022/themes/shared/lib/components/theme-slot.component.mjs +0 -116
  530. package/esm2022/themes/shared/lib/services/theme.service.mjs +0 -250
  531. package/esm2022/themes/shared/lib/shared.module.mjs +0 -39
  532. package/esm2022/widgets/acorex-platform-widgets.mjs +0 -5
  533. package/esm2022/widgets/index.mjs +0 -4
  534. package/esm2022/widgets/lib/properties/data-source.props.mjs +0 -21
  535. package/esm2022/widgets/lib/properties/editors.props.mjs +0 -252
  536. package/esm2022/widgets/lib/properties/general.props.mjs +0 -115
  537. package/esm2022/widgets/lib/properties/groups.mjs +0 -21
  538. package/esm2022/widgets/lib/properties/index.mjs +0 -7
  539. package/esm2022/widgets/lib/properties/layout.props.mjs +0 -270
  540. package/esm2022/widgets/lib/properties/table-column.props.mjs +0 -33
  541. package/esm2022/widgets/lib/widgets/actions/button/button-widget-designer.component.mjs +0 -69
  542. package/esm2022/widgets/lib/widgets/actions/button/button-widget-view.component.mjs +0 -68
  543. package/esm2022/widgets/lib/widgets/actions/button/button-widget.config.mjs +0 -31
  544. package/esm2022/widgets/lib/widgets/actions/button/index.mjs +0 -3
  545. package/esm2022/widgets/lib/widgets/advance/cron-job/cron-job-widget-column.component.mjs +0 -20
  546. package/esm2022/widgets/lib/widgets/advance/cron-job/cron-job-widget-designer.component.mjs +0 -18
  547. package/esm2022/widgets/lib/widgets/advance/cron-job/cron-job-widget-edit.component.mjs +0 -24
  548. package/esm2022/widgets/lib/widgets/advance/cron-job/cron-job-widget-filter.component.mjs +0 -20
  549. package/esm2022/widgets/lib/widgets/advance/cron-job/cron-job-widget-print.component.mjs +0 -19
  550. package/esm2022/widgets/lib/widgets/advance/cron-job/cron-job-widget-view.component.mjs +0 -22
  551. package/esm2022/widgets/lib/widgets/advance/cron-job/cron-job-widget.config.mjs +0 -31
  552. package/esm2022/widgets/lib/widgets/advance/cron-job/index.mjs +0 -8
  553. package/esm2022/widgets/lib/widgets/advance/file/file-box-widget-column.component.mjs +0 -19
  554. package/esm2022/widgets/lib/widgets/advance/file/file-box-widget-edit.component.mjs +0 -131
  555. package/esm2022/widgets/lib/widgets/advance/file/file-box-widget-filter.component.mjs +0 -20
  556. package/esm2022/widgets/lib/widgets/advance/file/file-box-widget-print.component.mjs +0 -19
  557. package/esm2022/widgets/lib/widgets/advance/file/file-box-widget-view.component.mjs +0 -215
  558. package/esm2022/widgets/lib/widgets/advance/file/file-box-widget.config.mjs +0 -53
  559. package/esm2022/widgets/lib/widgets/advance/file/file-box-widget.service.mjs +0 -3
  560. package/esm2022/widgets/lib/widgets/advance/file/index.mjs +0 -8
  561. package/esm2022/widgets/lib/widgets/advance/gallery/gallery-widget-column.component.mjs +0 -19
  562. package/esm2022/widgets/lib/widgets/advance/gallery/gallery-widget-edit.component.mjs +0 -182
  563. package/esm2022/widgets/lib/widgets/advance/gallery/gallery-widget-filter.component.mjs +0 -20
  564. package/esm2022/widgets/lib/widgets/advance/gallery/gallery-widget-print.component.mjs +0 -19
  565. package/esm2022/widgets/lib/widgets/advance/gallery/gallery-widget-types.mjs +0 -2
  566. package/esm2022/widgets/lib/widgets/advance/gallery/gallery-widget-view.component.mjs +0 -160
  567. package/esm2022/widgets/lib/widgets/advance/gallery/gallery-widget.config.mjs +0 -30
  568. package/esm2022/widgets/lib/widgets/advance/gallery/index.mjs +0 -7
  569. package/esm2022/widgets/lib/widgets/advance/map/index.mjs +0 -4
  570. package/esm2022/widgets/lib/widgets/advance/map/map-box-widget-edit.component.mjs +0 -77
  571. package/esm2022/widgets/lib/widgets/advance/map/map-box-widget-view.component.mjs +0 -52
  572. package/esm2022/widgets/lib/widgets/advance/map/map-box-widget.config.mjs +0 -120
  573. package/esm2022/widgets/lib/widgets/advance/qrcode/index.mjs +0 -3
  574. package/esm2022/widgets/lib/widgets/advance/qrcode/qrcode-widget-view.component.mjs +0 -60
  575. package/esm2022/widgets/lib/widgets/advance/qrcode/qrcode-widget.config.mjs +0 -64
  576. package/esm2022/widgets/lib/widgets/advance/signature/index.mjs +0 -7
  577. package/esm2022/widgets/lib/widgets/advance/signature/signature-pad-widget-column.component.mjs +0 -19
  578. package/esm2022/widgets/lib/widgets/advance/signature/signature-pad-widget-edit.component.mjs +0 -151
  579. package/esm2022/widgets/lib/widgets/advance/signature/signature-pad-widget-filter.component.mjs +0 -20
  580. package/esm2022/widgets/lib/widgets/advance/signature/signature-pad-widget-print.component.mjs +0 -19
  581. package/esm2022/widgets/lib/widgets/advance/signature/signature-pad-widget-view.component.mjs +0 -43
  582. package/esm2022/widgets/lib/widgets/advance/signature/signature-pad-widget.config.mjs +0 -30
  583. package/esm2022/widgets/lib/widgets/editors/checkbox/checkbox-widget-column.component.mjs +0 -51
  584. package/esm2022/widgets/lib/widgets/editors/checkbox/checkbox-widget-designer.component.mjs +0 -54
  585. package/esm2022/widgets/lib/widgets/editors/checkbox/checkbox-widget-edit.component.mjs +0 -72
  586. package/esm2022/widgets/lib/widgets/editors/checkbox/checkbox-widget-view.component.mjs +0 -70
  587. package/esm2022/widgets/lib/widgets/editors/checkbox/checkbox-widget.config.mjs +0 -41
  588. package/esm2022/widgets/lib/widgets/editors/checkbox/index.mjs +0 -3
  589. package/esm2022/widgets/lib/widgets/editors/color/color-box-widget-column.component.mjs +0 -40
  590. package/esm2022/widgets/lib/widgets/editors/color/color-box-widget-designer.component.mjs +0 -54
  591. package/esm2022/widgets/lib/widgets/editors/color/color-box-widget-edit.component.mjs +0 -61
  592. package/esm2022/widgets/lib/widgets/editors/color/color-box-widget-filter.component.mjs +0 -20
  593. package/esm2022/widgets/lib/widgets/editors/color/color-box-widget-print.component.mjs +0 -19
  594. package/esm2022/widgets/lib/widgets/editors/color/color-box-widget-view.component.mjs +0 -41
  595. package/esm2022/widgets/lib/widgets/editors/color/color-box-widget.config.mjs +0 -40
  596. package/esm2022/widgets/lib/widgets/editors/color/index.mjs +0 -7
  597. package/esm2022/widgets/lib/widgets/editors/contact/contact-widget-column.component.mjs +0 -50
  598. package/esm2022/widgets/lib/widgets/editors/contact/contact-widget-edit.component.mjs +0 -322
  599. package/esm2022/widgets/lib/widgets/editors/contact/contact-widget-filter.component.mjs +0 -20
  600. package/esm2022/widgets/lib/widgets/editors/contact/contact-widget-print.component.mjs +0 -19
  601. package/esm2022/widgets/lib/widgets/editors/contact/contact-widget-view.component.mjs +0 -122
  602. package/esm2022/widgets/lib/widgets/editors/contact/contact-widget.config.mjs +0 -59
  603. package/esm2022/widgets/lib/widgets/editors/contact/contact.type.mjs +0 -2
  604. package/esm2022/widgets/lib/widgets/editors/contact/index.mjs +0 -6
  605. package/esm2022/widgets/lib/widgets/editors/contact/popup-component.mjs +0 -78
  606. package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget-column.component.mjs +0 -64
  607. package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget-edit.component.mjs +0 -172
  608. package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget-filter.component.mjs +0 -20
  609. package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget-print.component.mjs +0 -19
  610. package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget-view.component.mjs +0 -63
  611. package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget.config.mjs +0 -43
  612. package/esm2022/widgets/lib/widgets/editors/date-time/index.mjs +0 -7
  613. package/esm2022/widgets/lib/widgets/editors/email/email-box-widget-column.component.mjs +0 -66
  614. package/esm2022/widgets/lib/widgets/editors/email/email-box-widget-edit.component.mjs +0 -258
  615. package/esm2022/widgets/lib/widgets/editors/email/email-box-widget-filter.component.mjs +0 -20
  616. package/esm2022/widgets/lib/widgets/editors/email/email-box-widget-print.component.mjs +0 -19
  617. package/esm2022/widgets/lib/widgets/editors/email/email-box-widget-view.component.mjs +0 -115
  618. package/esm2022/widgets/lib/widgets/editors/email/email-box-widget.config.mjs +0 -41
  619. package/esm2022/widgets/lib/widgets/editors/email/index.mjs +0 -7
  620. package/esm2022/widgets/lib/widgets/editors/large-text/index.mjs +0 -7
  621. package/esm2022/widgets/lib/widgets/editors/large-text/large-text-widget-column.component.mjs +0 -23
  622. package/esm2022/widgets/lib/widgets/editors/large-text/large-text-widget-edit.component.mjs +0 -79
  623. package/esm2022/widgets/lib/widgets/editors/large-text/large-text-widget-filter.component.mjs +0 -20
  624. package/esm2022/widgets/lib/widgets/editors/large-text/large-text-widget-print.component.mjs +0 -19
  625. package/esm2022/widgets/lib/widgets/editors/large-text/large-text-widget-view.component.mjs +0 -31
  626. package/esm2022/widgets/lib/widgets/editors/large-text/large-text-widget.config.mjs +0 -42
  627. package/esm2022/widgets/lib/widgets/editors/link/index.mjs +0 -7
  628. package/esm2022/widgets/lib/widgets/editors/link/link-widget-column.component.mjs +0 -19
  629. package/esm2022/widgets/lib/widgets/editors/link/link-widget-edit.component.mjs +0 -399
  630. package/esm2022/widgets/lib/widgets/editors/link/link-widget-filter.component.mjs +0 -20
  631. package/esm2022/widgets/lib/widgets/editors/link/link-widget-print.component.mjs +0 -19
  632. package/esm2022/widgets/lib/widgets/editors/link/link-widget-view.component.mjs +0 -120
  633. package/esm2022/widgets/lib/widgets/editors/link/link-widget.config.mjs +0 -30
  634. package/esm2022/widgets/lib/widgets/editors/number/index.mjs +0 -7
  635. package/esm2022/widgets/lib/widgets/editors/number/number-box-widget-column.component.mjs +0 -38
  636. package/esm2022/widgets/lib/widgets/editors/number/number-box-widget-edit.component.mjs +0 -159
  637. package/esm2022/widgets/lib/widgets/editors/number/number-box-widget-filter.component.mjs +0 -20
  638. package/esm2022/widgets/lib/widgets/editors/number/number-box-widget-print.component.mjs +0 -19
  639. package/esm2022/widgets/lib/widgets/editors/number/number-box-widget-view.component.mjs +0 -50
  640. package/esm2022/widgets/lib/widgets/editors/number/number-box-widget.config.mjs +0 -42
  641. package/esm2022/widgets/lib/widgets/editors/password/index.mjs +0 -7
  642. package/esm2022/widgets/lib/widgets/editors/password/password-box-widget-column.component.mjs +0 -56
  643. package/esm2022/widgets/lib/widgets/editors/password/password-box-widget-edit.component.mjs +0 -56
  644. package/esm2022/widgets/lib/widgets/editors/password/password-box-widget-filter.component.mjs +0 -20
  645. package/esm2022/widgets/lib/widgets/editors/password/password-box-widget-print.component.mjs +0 -19
  646. package/esm2022/widgets/lib/widgets/editors/password/password-box-widget-view.component.mjs +0 -82
  647. package/esm2022/widgets/lib/widgets/editors/password/password-box-widget.config.mjs +0 -40
  648. package/esm2022/widgets/lib/widgets/editors/phone/index.mjs +0 -7
  649. package/esm2022/widgets/lib/widgets/editors/phone/phone-box-widget-column.component.mjs +0 -66
  650. package/esm2022/widgets/lib/widgets/editors/phone/phone-box-widget-edit.component.mjs +0 -230
  651. package/esm2022/widgets/lib/widgets/editors/phone/phone-box-widget-filter.component.mjs +0 -20
  652. package/esm2022/widgets/lib/widgets/editors/phone/phone-box-widget-print.component.mjs +0 -19
  653. package/esm2022/widgets/lib/widgets/editors/phone/phone-box-widget-view.component.mjs +0 -115
  654. package/esm2022/widgets/lib/widgets/editors/phone/phone-box-widget.config.mjs +0 -33
  655. package/esm2022/widgets/lib/widgets/editors/rich-text/index.mjs +0 -7
  656. package/esm2022/widgets/lib/widgets/editors/rich-text/rich-text-popup.component.mjs +0 -38
  657. package/esm2022/widgets/lib/widgets/editors/rich-text/rich-text-widget-column.component.mjs +0 -46
  658. package/esm2022/widgets/lib/widgets/editors/rich-text/rich-text-widget-edit.component.mjs +0 -92
  659. package/esm2022/widgets/lib/widgets/editors/rich-text/rich-text-widget-filter.component.mjs +0 -20
  660. package/esm2022/widgets/lib/widgets/editors/rich-text/rich-text-widget-print.component.mjs +0 -19
  661. package/esm2022/widgets/lib/widgets/editors/rich-text/rich-text-widget-view.component.mjs +0 -47
  662. package/esm2022/widgets/lib/widgets/editors/rich-text/rich-text-widget.config.mjs +0 -41
  663. package/esm2022/widgets/lib/widgets/editors/select/index.mjs +0 -7
  664. package/esm2022/widgets/lib/widgets/editors/select/select-box-widget-column.component.mjs +0 -49
  665. package/esm2022/widgets/lib/widgets/editors/select/select-box-widget-edit.component.mjs +0 -108
  666. package/esm2022/widgets/lib/widgets/editors/select/select-box-widget-filter.component.mjs +0 -19
  667. package/esm2022/widgets/lib/widgets/editors/select/select-box-widget-print.component.mjs +0 -19
  668. package/esm2022/widgets/lib/widgets/editors/select/select-box-widget-view.component.mjs +0 -60
  669. package/esm2022/widgets/lib/widgets/editors/select/select-box-widget.config.mjs +0 -41
  670. package/esm2022/widgets/lib/widgets/editors/selection-list/index.mjs +0 -8
  671. package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget-column.component.mjs +0 -56
  672. package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget-designer.component.mjs +0 -88
  673. package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget-edit.component.mjs +0 -99
  674. package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget-filter.component.mjs +0 -20
  675. package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget-print.component.mjs +0 -19
  676. package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget-view.component.mjs +0 -52
  677. package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget.config.mjs +0 -44
  678. package/esm2022/widgets/lib/widgets/editors/text/index.mjs +0 -7
  679. package/esm2022/widgets/lib/widgets/editors/text/text-box-widget-column.component.mjs +0 -20
  680. package/esm2022/widgets/lib/widgets/editors/text/text-box-widget-edit.component.mjs +0 -130
  681. package/esm2022/widgets/lib/widgets/editors/text/text-box-widget-filter.component.mjs +0 -20
  682. package/esm2022/widgets/lib/widgets/editors/text/text-box-widget-print.component.mjs +0 -19
  683. package/esm2022/widgets/lib/widgets/editors/text/text-box-widget-view.component.mjs +0 -47
  684. package/esm2022/widgets/lib/widgets/editors/text/text-box-widget.config.mjs +0 -43
  685. package/esm2022/widgets/lib/widgets/editors/toggle/index.mjs +0 -7
  686. package/esm2022/widgets/lib/widgets/editors/toggle/toggle-widget-column.component.mjs +0 -53
  687. package/esm2022/widgets/lib/widgets/editors/toggle/toggle-widget-edit.component.mjs +0 -48
  688. package/esm2022/widgets/lib/widgets/editors/toggle/toggle-widget-filter.component.mjs +0 -20
  689. package/esm2022/widgets/lib/widgets/editors/toggle/toggle-widget-print.component.mjs +0 -20
  690. package/esm2022/widgets/lib/widgets/editors/toggle/toggle-widget-view.component.mjs +0 -55
  691. package/esm2022/widgets/lib/widgets/editors/toggle/toggle-widget.config.mjs +0 -42
  692. package/esm2022/widgets/lib/widgets/index.mjs +0 -27
  693. package/esm2022/widgets/lib/widgets/layout/block/block-widget-designer.component.mjs +0 -98
  694. package/esm2022/widgets/lib/widgets/layout/block/block-widget-view.component.mjs +0 -83
  695. package/esm2022/widgets/lib/widgets/layout/block/block-widget.config.mjs +0 -31
  696. package/esm2022/widgets/lib/widgets/layout/block/index.mjs +0 -4
  697. package/esm2022/widgets/lib/widgets/layout/document/document-widget.config.mjs +0 -13
  698. package/esm2022/widgets/lib/widgets/layout/form-field/form-field-widget-designer.component.mjs +0 -67
  699. package/esm2022/widgets/lib/widgets/layout/form-field/form-field-widget-view.component.mjs +0 -51
  700. package/esm2022/widgets/lib/widgets/layout/form-field/form-field-widget.config.mjs +0 -30
  701. package/esm2022/widgets/lib/widgets/layout/form-field/index.mjs +0 -4
  702. package/esm2022/widgets/lib/widgets/layout/grid/grid-widget-designer.component.mjs +0 -91
  703. package/esm2022/widgets/lib/widgets/layout/grid/grid-widget-print.component.mjs +0 -19
  704. package/esm2022/widgets/lib/widgets/layout/grid/grid-widget-view.component.mjs +0 -38
  705. package/esm2022/widgets/lib/widgets/layout/grid/grid-widget.config.mjs +0 -29
  706. package/esm2022/widgets/lib/widgets/layout/grid/index.mjs +0 -5
  707. package/esm2022/widgets/lib/widgets/layout/grid-item/grid-item-widget-designer.component.mjs +0 -100
  708. package/esm2022/widgets/lib/widgets/layout/grid-item/grid-item-widget-print.component.mjs +0 -19
  709. package/esm2022/widgets/lib/widgets/layout/grid-item/grid-item-widget-view.component.mjs +0 -89
  710. package/esm2022/widgets/lib/widgets/layout/grid-item/grid-item-widget.config.mjs +0 -31
  711. package/esm2022/widgets/lib/widgets/layout/grid-item/index.mjs +0 -5
  712. package/esm2022/widgets/lib/widgets/layout/grid-row/grid-row-widget-designer.component.mjs +0 -85
  713. package/esm2022/widgets/lib/widgets/layout/grid-row/grid-row-widget-print.component.mjs +0 -19
  714. package/esm2022/widgets/lib/widgets/layout/grid-row/grid-row-widget-view.component.mjs +0 -38
  715. package/esm2022/widgets/lib/widgets/layout/grid-row/grid-row-widget.config.mjs +0 -28
  716. package/esm2022/widgets/lib/widgets/layout/grid-row/index.mjs +0 -5
  717. package/esm2022/widgets/lib/widgets/layout/page/index.mjs +0 -3
  718. package/esm2022/widgets/lib/widgets/layout/page/page-widget-designer.component.mjs +0 -148
  719. package/esm2022/widgets/lib/widgets/layout/page/page-widget-view.component.mjs +0 -41
  720. package/esm2022/widgets/lib/widgets/layout/page/page-widget.config.mjs +0 -46
  721. package/esm2022/widgets/lib/widgets/layout/repeater/index.mjs +0 -6
  722. package/esm2022/widgets/lib/widgets/layout/repeater/repeater-widget-designer.component.mjs +0 -125
  723. package/esm2022/widgets/lib/widgets/layout/repeater/repeater-widget-edit.component.mjs +0 -170
  724. package/esm2022/widgets/lib/widgets/layout/repeater/repeater-widget-print.component.mjs +0 -20
  725. package/esm2022/widgets/lib/widgets/layout/repeater/repeater-widget-view.component.mjs +0 -44
  726. package/esm2022/widgets/lib/widgets/layout/repeater/repeater-widget.config.mjs +0 -37
  727. package/esm2022/widgets/lib/widgets/layout/template/index.mjs +0 -5
  728. package/esm2022/widgets/lib/widgets/layout/template/template-picker/template-picker.component.mjs +0 -120
  729. package/esm2022/widgets/lib/widgets/layout/template/template-widget-designer.component.mjs +0 -70
  730. package/esm2022/widgets/lib/widgets/layout/template/template-widget-edit.component.mjs +0 -96
  731. package/esm2022/widgets/lib/widgets/layout/template/template-widget-view.component.mjs +0 -62
  732. package/esm2022/widgets/lib/widgets/layout/template/template-widget.config.mjs +0 -30
  733. package/esm2022/widgets/lib/widgets/layout/template/template.provider.mjs +0 -58
  734. package/esm2022/widgets/lib/widgets/layout/text-block/index.mjs +0 -3
  735. package/esm2022/widgets/lib/widgets/layout/text-block/text-block-widget-designer.component.mjs +0 -38
  736. package/esm2022/widgets/lib/widgets/layout/text-block/text-block-widget-view.component.mjs +0 -30
  737. package/esm2022/widgets/lib/widgets/layout/text-block/text-block-widget.config.mjs +0 -43
  738. package/esm2022/widgets/lib/widgets.module.mjs +0 -113
  739. package/esm2022/workflow/acorex-platform-workflow.mjs +0 -5
  740. package/esm2022/workflow/index.mjs +0 -7
  741. package/esm2022/workflow/lib/actions/start-workflow.action.mjs +0 -32
  742. package/esm2022/workflow/lib/errors.types.mjs +0 -8
  743. package/esm2022/workflow/lib/workflow-event-dispatcher.service.mjs +0 -23
  744. package/esm2022/workflow/lib/workflow-registery.service.mjs +0 -39
  745. package/esm2022/workflow/lib/workflow.module.mjs +0 -101
  746. package/esm2022/workflow/lib/workflow.service.mjs +0 -188
  747. package/esm2022/workflow/lib/workflow.types.mjs +0 -59
  748. package/fesm2022/acorex-platform-common-avatar-widget-edit.component-DtC2IaE8.mjs.map +0 -1
  749. package/fesm2022/acorex-platform-common-avatar-widget-view.component-BOIV0Be1.mjs.map +0 -1
  750. package/fesm2022/acorex-platform-common-boolean-widget-filter.component-S4-3SmKA.mjs.map +0 -1
  751. package/fesm2022/acorex-platform-common-change-password.component-g_GEw3IZ.mjs.map +0 -1
  752. package/fesm2022/acorex-platform-common-checkbox-widget-column.component-DOoneR7g.mjs.map +0 -1
  753. package/fesm2022/acorex-platform-common-checkbox-widget-edit.component-PFRq-XS-.mjs.map +0 -1
  754. package/fesm2022/acorex-platform-common-checkbox-widget-view.component-CKz8XnjT.mjs.map +0 -1
  755. package/fesm2022/acorex-platform-common-dateTime-widget-column.component-DG0leXAo.mjs.map +0 -1
  756. package/fesm2022/acorex-platform-common-dateTime-widget-edit.component-D8W-XEcx.mjs.map +0 -1
  757. package/fesm2022/acorex-platform-common-dateTime-widget-filter.component-DngCKwFY.mjs.map +0 -1
  758. package/fesm2022/acorex-platform-common-dateTime-widget-view.component-KGgJkiKB.mjs.map +0 -1
  759. package/fesm2022/acorex-platform-common-email-widget-column.component-CLNqSuB7.mjs.map +0 -1
  760. package/fesm2022/acorex-platform-common-email-widget-edit.component--0gaRm4s.mjs.map +0 -1
  761. package/fesm2022/acorex-platform-common-email-widget-view.component-C3AUr1HO.mjs.map +0 -1
  762. package/fesm2022/acorex-platform-common-file-widget-column.component-C9AHk2UP.mjs.map +0 -1
  763. package/fesm2022/acorex-platform-common-file-widget-edit.component-L7bln9k0.mjs.map +0 -1
  764. package/fesm2022/acorex-platform-common-file-widget-filter.component-Ce35mqny.mjs.map +0 -1
  765. package/fesm2022/acorex-platform-common-file-widget-view.component-BvMzrs5C.mjs.map +0 -1
  766. package/fesm2022/acorex-platform-common-gallery-widget-edit.component-BVuV2Ib8.mjs.map +0 -1
  767. package/fesm2022/acorex-platform-common-gallery-widget-filter.component-C8tdM6PX.mjs.map +0 -1
  768. package/fesm2022/acorex-platform-common-gallery-widget-view.component-D8YmSi9C.mjs.map +0 -1
  769. package/fesm2022/acorex-platform-common-largetext-widget-edit.component-DGMxpnsr.mjs.map +0 -1
  770. package/fesm2022/acorex-platform-common-lookup-widget-column.component-B-cEaNjv.mjs.map +0 -1
  771. package/fesm2022/acorex-platform-common-lookup-widget-edit.component-DqB_g9Zz.mjs.map +0 -1
  772. package/fesm2022/acorex-platform-common-lookup-widget-filter.component-0TPWNWSd.mjs.map +0 -1
  773. package/fesm2022/acorex-platform-common-lookup-widget-view.component-DYAg76YH.mjs.map +0 -1
  774. package/fesm2022/acorex-platform-common-map-widget-edit.component-C3cpsXD5.mjs.map +0 -1
  775. package/fesm2022/acorex-platform-common-map-widget-view.component-C-DCNaJi.mjs.map +0 -1
  776. package/fesm2022/acorex-platform-common-messenger-widget-column.component-B2A7ZBEP.mjs.map +0 -1
  777. package/fesm2022/acorex-platform-common-messenger-widget-edit.component-DC8vQDo0.mjs.map +0 -1
  778. package/fesm2022/acorex-platform-common-messenger-widget-view.component-B6FavkmG.mjs.map +0 -1
  779. package/fesm2022/acorex-platform-common-number-widget-edit.component-Bc5-ZUw4.mjs.map +0 -1
  780. package/fesm2022/acorex-platform-common-number-widget-filter.component-DxfJ90n4.mjs.map +0 -1
  781. package/fesm2022/acorex-platform-common-number-widget-view.component-DGfLSGw1.mjs.map +0 -1
  782. package/fesm2022/acorex-platform-common-password-widget-column.component-DEHaVLGK.mjs.map +0 -1
  783. package/fesm2022/acorex-platform-common-password-widget-edit.component-DrYyu5v-.mjs.map +0 -1
  784. package/fesm2022/acorex-platform-common-password-widget-view.component-B_HU-3J1.mjs.map +0 -1
  785. package/fesm2022/acorex-platform-common-phone-widget-column.component-D99ncxxJ.mjs.map +0 -1
  786. package/fesm2022/acorex-platform-common-phone-widget-edit.component-a5EAI9FK.mjs.map +0 -1
  787. package/fesm2022/acorex-platform-common-phone-widget-view.component-BlFVuoNN.mjs.map +0 -1
  788. package/fesm2022/acorex-platform-common-rich-text-widget-column.component-DOdv5I2s.mjs.map +0 -1
  789. package/fesm2022/acorex-platform-common-rich-text-widget-edit.component-DL5UyAqe.mjs.map +0 -1
  790. package/fesm2022/acorex-platform-common-rich-text-widget-view.component-B9WB-mx9.mjs.map +0 -1
  791. package/fesm2022/acorex-platform-common-selection-list-widget-column.component-CkOuYy0Z.mjs.map +0 -1
  792. package/fesm2022/acorex-platform-common-selection-list-widget-edit.component-BmbDQ1LH.mjs.map +0 -1
  793. package/fesm2022/acorex-platform-common-selection-list-widget-filter.component-Dm_1-7eT.mjs.map +0 -1
  794. package/fesm2022/acorex-platform-common-selection-list-widget-view.component-3hinF85C.mjs.map +0 -1
  795. package/fesm2022/acorex-platform-common-signature-pad-widget-edit.component-DmmPbw-A.mjs.map +0 -1
  796. package/fesm2022/acorex-platform-common-signature-pad-widget-view.component-DkFaMNk8.mjs.map +0 -1
  797. package/fesm2022/acorex-platform-common-string-widget-filter.component-DAqR2PUN.mjs.map +0 -1
  798. package/fesm2022/acorex-platform-common-text-widget-column.component-DVczwvKA.mjs.map +0 -1
  799. package/fesm2022/acorex-platform-common-text-widget-edit.component-DC_GnFhe.mjs.map +0 -1
  800. package/fesm2022/acorex-platform-common-toggle-widget-column.component-Bp1d7SAE.mjs.map +0 -1
  801. package/fesm2022/acorex-platform-common-toggle-widget-edit.component-D64m4agx.mjs.map +0 -1
  802. package/fesm2022/acorex-platform-common-toggle-widget-view.component-BTaXXZ88.mjs.map +0 -1
  803. package/fesm2022/acorex-platform-layouts-entity-create-view.component-JsGlDx_S.mjs.map +0 -1
  804. package/fesm2022/acorex-platform-layouts-entity-import-view.component-9FK_Iro9.mjs.map +0 -1
  805. package/fesm2022/acorex-platform-layouts-entity-modify-view.component-CNbc8ewu.mjs.map +0 -1
  806. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-CJY8R3sa.mjs +0 -109
  807. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-CJY8R3sa.mjs.map +0 -1
  808. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-C6zgLyry.mjs +0 -301
  809. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-C6zgLyry.mjs.map +0 -1
  810. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-wPZPhMgy.mjs.map +0 -1
  811. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-DNXWb6ij.mjs +0 -148
  812. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-DNXWb6ij.mjs.map +0 -1
  813. package/fesm2022/acorex-platform-themes-default-error-401.component-D5QQ2HAv.mjs.map +0 -1
  814. package/fesm2022/acorex-platform-themes-default-error-404.component-DSY_D3Iq.mjs.map +0 -1
  815. package/fesm2022/acorex-platform-themes-default-error-offline.component-B6wSkMdd.mjs.map +0 -1
  816. package/fesm2022/acorex-platform-widgets-button-widget-designer.component-CPFA79Gx.mjs.map +0 -1
  817. package/fesm2022/acorex-platform-widgets-checkbox-widget-column.component-MInF2GVN.mjs.map +0 -1
  818. package/fesm2022/acorex-platform-widgets-checkbox-widget-designer.component-B7Qv2aYx.mjs.map +0 -1
  819. package/fesm2022/acorex-platform-widgets-checkbox-widget-view.component-DP4kITs-.mjs.map +0 -1
  820. package/fesm2022/acorex-platform-widgets-color-box-widget-designer.component-uQBHAspe.mjs.map +0 -1
  821. package/fesm2022/acorex-platform-widgets-contact-widget-filter.component-DnQZon-E.mjs.map +0 -1
  822. package/fesm2022/acorex-platform-widgets-page-widget-designer.component-DOulAanE.mjs.map +0 -1
  823. package/fesm2022/acorex-platform-widgets-rich-text-popup.component-C8KmObPV.mjs.map +0 -1
  824. package/fesm2022/acorex-platform-widgets-template-picker.component-DPlvwgbu.mjs +0 -123
  825. package/fesm2022/acorex-platform-widgets-template-picker.component-DPlvwgbu.mjs.map +0 -1
  826. package/fesm2022/acorex-platform-widgets-template-widget-edit.component-DwPYeF0y.mjs +0 -136
  827. package/fesm2022/acorex-platform-widgets-template-widget-edit.component-DwPYeF0y.mjs.map +0 -1
  828. package/fesm2022/acorex-platform-widgets-text-block-widget-designer.component-BE6goaZc.mjs.map +0 -1
  829. package/themes/default/lib/layout.routes.d.ts +0 -2
  830. package/themes/default/lib/layouts/setting-layout/setting-preview/setting-preview.component.d.ts +0 -24
  831. package/themes/default/lib/layouts/setting-layout/setting-view/setting-menu.component.d.ts +0 -20
  832. package/widgets/lib/widgets/layout/template/index.d.ts +0 -4
  833. package/widgets/lib/widgets/layout/template/template-picker/template-picker.component.d.ts +0 -30
  834. package/widgets/lib/widgets/layout/template/template-widget-designer.component.d.ts +0 -11
  835. package/widgets/lib/widgets/layout/template/template-widget-edit.component.d.ts +0 -13
  836. package/widgets/lib/widgets/layout/template/template-widget-view.component.d.ts +0 -11
  837. package/widgets/lib/widgets/layout/template/template-widget.config.d.ts +0 -7
  838. package/widgets/lib/widgets/layout/template/template.provider.d.ts +0 -24
@@ -1,603 +0,0 @@
1
- import { AXLoadingDialogService } from '@acorex/components/loading-dialog';
2
- import { AXPopupService } from '@acorex/components/popup';
3
- import { AXToastService } from '@acorex/components/toast';
4
- import { AXFileService } from '@acorex/core/file';
5
- import { AXPWidgetRegistryService, AXPWidgetsCatalog, } from '@acorex/platform/layout/builder';
6
- import { computed, effect, inject, Injectable, signal } from '@angular/core';
7
- import { cloneDeep, get, merge, set, sortBy } from 'lodash-es';
8
- import { Subject } from 'rxjs';
9
- import { AddWidgetCommand, CommandManager, RemoveWidgetCommand, UpdateWidgetCommand } from './command';
10
- import { AXPDesignerConnector } from './designer-connector.service';
11
- import { AXP_DESIGNER_ADD_WIDGET_MENU, AXP_DESIGNER_CLONE_MENU, AXP_DESIGNER_COPY_MENU, AXP_DESIGNER_CUT_MENU, AXP_DESIGNER_DELETE_WIDGET_MENU as AXP_DESIGNER_DELETE_WIDGET_MENU, AXP_DESIGNER_PASTE_MENU, AXP_DESIGNER_SAVE_AS_WIDGET_MENU, cloneWidgetMenu, } from './generic-commands.types';
12
- import * as i0 from "@angular/core";
13
- export class AXPDesignerService {
14
- #ef;
15
- constructor() {
16
- this.popupService = inject(AXPopupService);
17
- this.toastService = inject(AXToastService);
18
- this.fileService = inject(AXFileService);
19
- this.loadingService = inject(AXLoadingDialogService);
20
- this.widgetRegisteryService = inject(AXPWidgetRegistryService);
21
- this.connector = inject(AXPDesignerConnector);
22
- this.channel = new BroadcastChannel('livePreviewChannel');
23
- this.document = signal(this.createDoc());
24
- this.currentPageIndex = signal(0);
25
- this.currentPage = signal(this.document().children?.[0]);
26
- this.commandManager = inject(CommandManager);
27
- this.clipboard = signal(null);
28
- //
29
- this.canCutCopy = computed(() => this.selectedNode() != null && this.selectedNode()?.type != 'page-layout');
30
- this.canDelete = computed(() => this.selectedNode() != null && this.selectedNode()?.type != 'page-layout');
31
- this.canInsert = computed(() => this.selectedNode() != null && this.selectedNodeConfig().type == 'container');
32
- this.canPaste = computed(() => this.clipboard() != null);
33
- //
34
- this.history = computed(() => this.commandManager.history());
35
- this.canUndo = computed(() => this.commandManager.canUndo());
36
- this.canRedo = computed(() => this.commandManager.canRedo());
37
- //
38
- this.canSave = computed(() => this.templateId() != null);
39
- this.breadcrumbs = computed(() => {
40
- return this.selectedNode() ? this.findBreadcrumbs(this.currentPage(), this.selectedNode()) ?? [] : [];
41
- });
42
- this.selectedNode = signal(null);
43
- this.selectedNodeConfig = computed(() => get(this.selectedNode(), '__meta__.config'));
44
- this._focusedNode = null;
45
- this.focusedNode = () => this._focusedNode;
46
- this.size = signal('xl');
47
- this.onSelected = new Subject();
48
- this.onRefresh = new Subject();
49
- this.onUpdate = new Subject();
50
- this.onFocused = new Subject();
51
- this.templateId = signal(null);
52
- this.#ef = effect(() => {
53
- this.refresh({ widget: this.currentPage() });
54
- }, { allowSignalWrites: true });
55
- this.channelCallback = (message) => {
56
- if (message.data.action == 'designer-preview-loaded') {
57
- this.updatePreview();
58
- }
59
- if (message.data.action == 'open-preview-window') {
60
- this.openPreviewWindow();
61
- }
62
- };
63
- this.channel.addEventListener('message', this.channelCallback);
64
- }
65
- register(command) {
66
- this.select({ widget: command.widget });
67
- }
68
- select(command) {
69
- this.selectedNode.set(command.widget);
70
- this.onSelected.next(command);
71
- }
72
- update(command) {
73
- const node = command.widget ?? this.selectedNode();
74
- if (command.mode == 'update' && node) {
75
- this.commandManager.executeCommand(new UpdateWidgetCommand(node, command.values, node));
76
- }
77
- this.selectedNode.update((c) => merge(node, command.values));
78
- this.onUpdate.next({ widget: node, values: command.values });
79
- this.updatePreview();
80
- }
81
- focus(command) {
82
- if (this._focusedNode != command.widget) {
83
- this._focusedNode = command.widget;
84
- this.onFocused.next({ widget: this._focusedNode });
85
- }
86
- }
87
- refresh(command) {
88
- this.onRefresh.next({ widget: command.widget });
89
- this.updatePreview();
90
- }
91
- findBreadcrumbs(node, targetNode, breadcrumb = []) {
92
- // Add the current node to the breadcrumb path
93
- const currentBreadcrumb = [...breadcrumb, node];
94
- // Check if the current node is the target node
95
- if (node === targetNode) {
96
- return currentBreadcrumb;
97
- }
98
- // If the node has children, recursively search them
99
- if (node.children) {
100
- for (const child of node.children) {
101
- const result = this.findBreadcrumbs(child, targetNode, currentBreadcrumb);
102
- if (result) {
103
- return result;
104
- }
105
- }
106
- }
107
- // Return undefined if no match is found
108
- return undefined;
109
- }
110
- async showPicker(currentNode = this.selectedNode()) {
111
- const com = await import('../components/widget-picker/widget-picker.component').then((c) => c.AXPDesignerWidgetPickerComponent);
112
- const result = await this.popupService.open(com, {
113
- title: 'Widget Gallery',
114
- size: 'md',
115
- closeButton: true,
116
- data: {
117
- widgets: sortBy(this.widgetRegisteryService.all().filter((c) => c.visible != false), (c) => c.title),
118
- },
119
- });
120
- const widgets = [];
121
- if ((result.data?.widgets ?? []).length) {
122
- const selected = result.data?.widgets;
123
- selected.forEach((c) => {
124
- widgets.push(this.addWidget(currentNode, { type: c.name }));
125
- });
126
- }
127
- return widgets;
128
- }
129
- new() {
130
- this.commandManager.clear();
131
- this.document.set(this.createDoc());
132
- this.currentPage.set(this.document().children?.[0]);
133
- this.reRenderPage();
134
- }
135
- createDoc() {
136
- const doc = {
137
- type: AXPWidgetsCatalog.document,
138
- children: [this.createPage()],
139
- name: 'document',
140
- };
141
- set(doc, '__meta__.id', this.generateUniqueId());
142
- return doc;
143
- }
144
- createPage() {
145
- const config = this.widgetRegisteryService.resolve('page-layout');
146
- const page = {
147
- type: 'page-layout',
148
- children: [],
149
- name: 'page-layout1',
150
- };
151
- set(page, '__meta__.id', this.generateUniqueId());
152
- set(page, '__meta__.config', config);
153
- return page;
154
- }
155
- addNewPage() {
156
- this.addWidget(this.document(), this.createPage());
157
- this.goToPage(this.currentPageIndex() + 1);
158
- }
159
- removePage(index) {
160
- const page = this.document().children?.[index];
161
- this.removeWidget(page);
162
- this.goToPage(index - 1);
163
- }
164
- clonePage(index) {
165
- const page = this.document().children?.[index];
166
- this.clone(page);
167
- this.goToPage((this.document().children?.length ?? 1) - 1);
168
- }
169
- goToPage(index) {
170
- this.currentPageIndex.set(index);
171
- //setTimeout(() => {
172
- this.currentPage.set(this.document().children?.[this.currentPageIndex()]);
173
- this.select({ widget: this.currentPage() });
174
- //this.updatePreview();
175
- //});
176
- }
177
- reRenderPage() {
178
- this.currentPage.set({ ...this.currentPage() });
179
- setTimeout(() => {
180
- this.refresh({ widget: this.currentPage() });
181
- });
182
- }
183
- findWidgetById(root, id) {
184
- if (get(root, '__meta__.id') === id) {
185
- return root; // Return the root if it matches the ID
186
- }
187
- if (!root.children)
188
- return null;
189
- for (const child of root.children) {
190
- const found = this.findWidgetById(child, id);
191
- if (found) {
192
- return found; // Return the found child
193
- }
194
- }
195
- return null; // Node not found
196
- }
197
- findParent(id, parent = this.currentPage()) {
198
- if (!parent.children)
199
- return null;
200
- if (parent.children.some((child) => get(child, '__meta__.id') === id)) {
201
- return parent; // Return this node as it's the parent of the node with the given ID
202
- }
203
- for (const child of parent.children) {
204
- const foundParent = this.findParent(id, child);
205
- if (foundParent)
206
- return foundParent;
207
- }
208
- return null; // No parent found
209
- }
210
- findNearestContainer(node, searchUpward = true) {
211
- if (searchUpward) {
212
- let current = node;
213
- while (current) {
214
- const config = this.widgetRegisteryService.resolve(current.type);
215
- if (config && config.type == 'container') {
216
- return current;
217
- }
218
- current = this.findParent(get(current, '__meta__.id')); // Use findParent to navigate upwards
219
- }
220
- }
221
- else {
222
- // Recursive search to find the first container among children
223
- if (node.children) {
224
- for (const child of node.children) {
225
- const config = this.widgetRegisteryService.resolve(child.type);
226
- if (config && config.type == 'container') {
227
- return child;
228
- }
229
- const foundContainer = this.findNearestContainer(child, false); // Continue searching downwards
230
- if (foundContainer)
231
- return foundContainer;
232
- }
233
- }
234
- }
235
- return null; // Return null if no container found
236
- }
237
- addWidget(currentNode, node) {
238
- //
239
- const cloned = cloneDeep(node);
240
- const config = this.widgetRegisteryService.resolve(node.type);
241
- //
242
- this.commandManager.executeCommand(new AddWidgetCommand(cloned, currentNode, currentNode));
243
- //
244
- cloned.name = this.generateUniqueName(node.type);
245
- set(cloned, '__meta__.id', this.generateUniqueId());
246
- set(cloned, '__meta__.config', config);
247
- //
248
- this.reRenderPage();
249
- //
250
- this.refresh({ widget: currentNode });
251
- this.select({ widget: cloned });
252
- return cloned;
253
- }
254
- removeWidget(node = this.selectedNode()) {
255
- if (node.type === 'document-layout' ||
256
- (node.type === 'page-layout' && (this.document().children?.length ?? 1) == 1)) {
257
- console.error('Cannot remove the page node.');
258
- return; // Prevent removing the root page node or document
259
- }
260
- const nodeIdToRemove = get(node, '__meta__.id');
261
- if (!nodeIdToRemove) {
262
- throw new Error('Node does not have a valid __meta__.id to identify it for removal.');
263
- }
264
- // Find the parent of the node to remove it
265
- const parent = this.findParent(nodeIdToRemove, this.document());
266
- if (!parent) {
267
- throw new Error('Parent node not found. The node might be the root node or does not exist.');
268
- }
269
- const previousSelection = this.selectedNode(); // Capture the currently selected node before removal
270
- const command = new RemoveWidgetCommand(node, parent, previousSelection);
271
- this.commandManager.executeCommand(command);
272
- this.refresh({ widget: parent }); // Refresh the UI to reflect changes
273
- this.select({ widget: parent }); // Select the parent node after removal
274
- }
275
- navigateTo(index) {
276
- this.commandManager.goToCommand(index);
277
- this.reRenderPage();
278
- const currentSelection = this.commandManager.selectedNode();
279
- this.refresh({ widget: this.currentPage() });
280
- this.select({ widget: currentSelection });
281
- }
282
- redo() {
283
- this.commandManager.redo();
284
- this.reRenderPage();
285
- const currentSelection = this.commandManager.selectedNode();
286
- this.refresh({ widget: this.currentPage() });
287
- this.select({ widget: currentSelection });
288
- }
289
- undo() {
290
- this.commandManager.undo();
291
- this.reRenderPage();
292
- const currentSelection = this.commandManager.selectedNode();
293
- this.refresh({ widget: this.currentPage() });
294
- this.select({ widget: currentSelection });
295
- }
296
- clearHistory() {
297
- this.commandManager.clear();
298
- }
299
- removeMetaProp(obj) {
300
- const nodeName = '__meta__';
301
- // Check if the object is an array
302
- if (Array.isArray(obj)) {
303
- return obj.map((item) => this.removeMetaProp(item));
304
- }
305
- else if (typeof obj === 'object' && obj !== null) {
306
- // Create a new object to store the result
307
- let newObj = {};
308
- for (let key in obj) {
309
- // Only add the key if it's not the nodeName we want to remove
310
- if (key !== nodeName) {
311
- newObj[key] = this.removeMetaProp(obj[key]);
312
- }
313
- }
314
- return newObj;
315
- }
316
- // If the value is not an object or array, return it as is
317
- return obj;
318
- }
319
- async addMetaToNodes(node, processedNodes, progressCallback) {
320
- // Apply your meta logic here
321
- const config = this.widgetRegisteryService.resolve(node.type);
322
- //
323
- set(node, '__meta__.id', this.generateUniqueId());
324
- set(node, '__meta__.config', config);
325
- //
326
- // Increment the processed node count and update the progress dialog
327
- processedNodes.count++;
328
- progressCallback(processedNodes.count);
329
- // Recursively process child nodes using Promise.all
330
- if (node.children && node.children.length > 0) {
331
- node.children = await Promise.all(node.children.map(async (child) => await this.addMetaToNodes(child, processedNodes, progressCallback)));
332
- }
333
- return node;
334
- }
335
- copy(widget = this.selectedNode()) {
336
- if (this.canCutCopy()) {
337
- this.clipboard.set(cloneDeep(widget)); // Use lodash's cloneDeep to ensure a deep copy
338
- }
339
- }
340
- cut(widget = this.selectedNode()) {
341
- if (this.canCutCopy()) {
342
- this.copy(widget); // Copy the widget to the clipboard
343
- this.removeWidget(widget); // Reuse the removeWidget method which should handle undo internally
344
- }
345
- }
346
- clone(widget = this.selectedNode()) {
347
- if (!widget)
348
- return;
349
- this.copy(widget); // Copy the widget to the clipboard
350
- if (widget.type == 'page-layout') {
351
- this.paste(this.document());
352
- }
353
- else {
354
- this.paste(widget);
355
- }
356
- }
357
- paste(parentNode = this.selectedNode() ?? this.currentPage()) {
358
- if (!this.clipboard() || !this.selectedNode()) {
359
- console.error('Clipboard is empty or no node is selected.');
360
- return;
361
- }
362
- const newNode = cloneDeep(this.clipboard());
363
- const nearestContainer = this.findNearestContainer(parentNode, true);
364
- if (!nearestContainer) {
365
- console.error('No suitable container found.');
366
- return;
367
- }
368
- //
369
- if (!nearestContainer.children) {
370
- nearestContainer.children = [];
371
- }
372
- //
373
- const setNameId = (node) => {
374
- set(node, 'name', this.generateUniqueName(node.type));
375
- set(node, '__meta__.id', this.generateUniqueId());
376
- node.children?.forEach((n) => {
377
- setNameId(n);
378
- });
379
- };
380
- setNameId(newNode);
381
- //
382
- this.commandManager.executeCommand(new AddWidgetCommand(newNode, nearestContainer, nearestContainer));
383
- //
384
- setTimeout(() => {
385
- this.refresh({ widget: nearestContainer }); // Refresh the UI
386
- this.select({ widget: newNode }); // Select the newly pasted node
387
- });
388
- }
389
- async save() {
390
- if (this.templateId()) {
391
- const content = this.export();
392
- await this.connector.save(this.templateId(), { json: content });
393
- this.toastService.success('Your changes saved successfully');
394
- }
395
- else {
396
- this.downloadJson();
397
- }
398
- }
399
- async saveAs(node = this.document()) {
400
- const content = this.export(node);
401
- await this.connector.saveAs({ json: content });
402
- this.toastService.success('Your changes saved successfully');
403
- }
404
- export(node = this.document()) {
405
- const json = this.removeMetaProp(node);
406
- return JSON.stringify(json);
407
- }
408
- downloadJson() {
409
- // Convert the object to a JSON string
410
- const jsonStr = this.export();
411
- // Create a blob object from the JSON string
412
- const blob = new Blob([jsonStr], { type: 'application/json' });
413
- // Create a URL for the blob object
414
- const url = URL.createObjectURL(blob);
415
- // Create a temporary <a> element to trigger the download
416
- const a = document.createElement('a');
417
- a.href = url;
418
- a.download = 'export.json';
419
- // Append the <a> element to the document body (necessary for some browsers)
420
- document.body.appendChild(a);
421
- // Trigger the download by clicking the <a> element
422
- a.click();
423
- // Clean up by revoking the object URL and removing the <a> element
424
- URL.revokeObjectURL(url);
425
- document.body.removeChild(a);
426
- }
427
- async loadById(id) {
428
- try {
429
- const content = await this.connector.load(id);
430
- this.templateId.set(id);
431
- if (content) {
432
- await this.loadByContent(content);
433
- }
434
- }
435
- catch (error) {
436
- this.toastService.danger(error.message);
437
- }
438
- }
439
- async importJSon() {
440
- const files = await this.fileService.choose({ multiple: false, accept: 'application/json' });
441
- if (files && files.length) {
442
- const file = files[0];
443
- const content = await file.text();
444
- await this.loadByContent(content);
445
- }
446
- }
447
- async loadByContent(content) {
448
- const rootNode = JSON.parse(content);
449
- const totalNode = this.countTotalNodes(rootNode);
450
- const processedNodes = { count: 0 };
451
- const button = {
452
- text: 'Cancel',
453
- autofocus: true,
454
- color: 'primary',
455
- onClick: (e) => {
456
- dialog.close();
457
- },
458
- };
459
- const dialog = this.loadingService.show({
460
- mode: 'determinate',
461
- title: 'Loading Content',
462
- progressColor: 'primary',
463
- text: 'Processing content',
464
- status: `0 of ${totalNode}`,
465
- buttons: [button],
466
- });
467
- try {
468
- const root = await this.addMetaToNodes(rootNode, processedNodes, (count) => {
469
- dialog.setProgressValue(Math.ceil((count / totalNode) * 100));
470
- dialog.setProgressStatus(`${count} of ${totalNode}`);
471
- });
472
- const page = root.children?.[0];
473
- this.document.set(root);
474
- this.currentPage.set(page);
475
- dialog.setProgressColor('success');
476
- dialog.setProgressText('Content loaded successfully');
477
- button.text = 'Okay';
478
- button.color = 'success';
479
- dialog.setProgressValue(100);
480
- setTimeout(() => {
481
- this.reRenderPage();
482
- dialog.close();
483
- }, 500);
484
- }
485
- catch (error) {
486
- dialog.setProgressColor('danger');
487
- dialog.setProgressText(error instanceof Error ? error.message : 'Cannot load content');
488
- button.text = 'Close';
489
- button.color = 'danger';
490
- }
491
- }
492
- countTotalNodes(node) {
493
- let count = 1; // Count the current node
494
- if (node.children && node.children.length > 0) {
495
- count += node.children.reduce((sum, child) => sum + this.countTotalNodes(child), 0);
496
- }
497
- return count;
498
- }
499
- generateUniqueName(type) {
500
- // Normalize the type to follow camelCase convention
501
- const baseName = type.charAt(0).toLowerCase() + type.slice(1);
502
- let index = 1;
503
- let uniqueName = `${baseName}${index}`;
504
- // Gather all existing names to check against
505
- const existingNames = new Set();
506
- this.collectAllNames(this.document(), existingNames);
507
- // Increment the index until a unique name is found
508
- while (existingNames.has(uniqueName)) {
509
- index++;
510
- uniqueName = `${baseName}${index}`;
511
- }
512
- return uniqueName;
513
- }
514
- generateUniqueId() {
515
- return Math.random() * Math.pow(10, 18);
516
- }
517
- collectAllNames(node, names) {
518
- if (node.name) {
519
- names.add(node.name);
520
- }
521
- if (node.children) {
522
- for (const child of node.children) {
523
- this.collectAllNames(child, names);
524
- }
525
- }
526
- }
527
- updatePreview() {
528
- this.channel.postMessage({
529
- action: 'designer-preview',
530
- document: this.removeMetaProp(this.document()),
531
- });
532
- }
533
- async openPreviewDialog() {
534
- const com = await import('../../preview/preview.component').then((c) => c.AXPLayoutDesignerPreviewComponent);
535
- await this.popupService.open(com, {
536
- header: false,
537
- size: 'full',
538
- data: {
539
- initialSize: this.size(),
540
- isDialogWindow: true,
541
- },
542
- });
543
- }
544
- openPreviewWindow() {
545
- window.open('/forms/preview', '_blank');
546
- }
547
- getContextMenuItems() {
548
- const items = [];
549
- //
550
- if (this.canInsert()) {
551
- items.push(cloneWidgetMenu(AXP_DESIGNER_ADD_WIDGET_MENU, {
552
- disabled: !this.canInsert(), break: true
553
- }));
554
- }
555
- //
556
- items.push(cloneWidgetMenu(AXP_DESIGNER_CLONE_MENU, { disabled: !this.canCutCopy() }));
557
- items.push(cloneWidgetMenu(AXP_DESIGNER_CUT_MENU, { disabled: !this.canCutCopy() }));
558
- items.push(cloneWidgetMenu(AXP_DESIGNER_COPY_MENU, { disabled: !this.canCutCopy() }));
559
- items.push(cloneWidgetMenu(AXP_DESIGNER_PASTE_MENU, { disabled: !this.canPaste(), break: true }));
560
- //
561
- items.push(cloneWidgetMenu(AXP_DESIGNER_DELETE_WIDGET_MENU, { disabled: !this.canDelete(), break: true }));
562
- //
563
- items.push(cloneWidgetMenu(AXP_DESIGNER_SAVE_AS_WIDGET_MENU));
564
- return items;
565
- }
566
- executeCommand(name, data) {
567
- switch (name) {
568
- case AXP_DESIGNER_ADD_WIDGET_MENU.name: {
569
- this.showPicker();
570
- break;
571
- }
572
- //
573
- case AXP_DESIGNER_DELETE_WIDGET_MENU.name: {
574
- this.removeWidget();
575
- break;
576
- }
577
- //
578
- case AXP_DESIGNER_CLONE_MENU.name: {
579
- this.clone();
580
- break;
581
- }
582
- case AXP_DESIGNER_CUT_MENU.name: {
583
- this.cut();
584
- break;
585
- }
586
- case AXP_DESIGNER_COPY_MENU.name: {
587
- this.copy();
588
- break;
589
- }
590
- case AXP_DESIGNER_PASTE_MENU.name: {
591
- this.paste();
592
- break;
593
- }
594
- //
595
- }
596
- }
597
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
598
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerService }); }
599
- }
600
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerService, decorators: [{
601
- type: Injectable
602
- }], ctorParameters: () => [] });
603
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vbGF5b3V0L2Rlc2lnbmVyL3NyYy9saWIvZGVzaWduZXIvc2hhcmVkL2Rlc2lnbmVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE2QixzQkFBc0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXRHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFJTCx3QkFBd0IsRUFDeEIsaUJBQWlCLEdBQ2xCLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3BFLE9BQU8sRUFDTCw0QkFBNEIsRUFDNUIsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsK0JBQStCLElBQUksK0JBQStCLEVBQ2xFLHVCQUF1QixFQUN2QixnQ0FBZ0MsRUFDaEMsZUFBZSxHQUNoQixNQUFNLDBCQUEwQixDQUFD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Q0FBQztZQUNELEtBQUssdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNiLE1BQUs7WUFDUCxDQUFDO1lBQ0QsRUFBRTtRQUNKLENBQUM7SUFDSCxDQUFDOzhHQTNxQlUsa0JBQWtCO2tIQUFsQixrQkFBa0I7OzJGQUFsQixrQkFBa0I7a0JBRDlCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWExvYWRpbmdEaWFsb2dCdXR0b25JdGVtLCBBWExvYWRpbmdEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2xvYWRpbmctZGlhbG9nJztcbmltcG9ydCB7IEFYTWVudUl0ZW0gfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvbWVudSc7XG5pbXBvcnQgeyBBWFBvcHVwU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9wb3B1cCc7XG5pbXBvcnQgeyBBWFRvYXN0U2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90b2FzdCc7XG5pbXBvcnQgeyBBWEZpbGVTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2ZpbGUnO1xuaW1wb3J0IHtcbiAgQVhQV2lkZ2V0Q29tcG9uZW50LFxuICBBWFBXaWRnZXRDb25maWcsXG4gIEFYUFdpZGdldE5vZGUsXG4gIEFYUFdpZGdldFJlZ2lzdHJ5U2VydmljZSxcbiAgQVhQV2lkZ2V0c0NhdGFsb2csXG59IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2J1aWxkZXInO1xuaW1wb3J0IHsgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBJbmplY3RhYmxlLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNsb25lRGVlcCwgZ2V0LCBtZXJnZSwgc2V0LCBzb3J0QnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQWRkV2lkZ2V0Q29tbWFuZCwgQ29tbWFuZE1hbmFnZXIsIFJlbW92ZVdpZGdldENvbW1hbmQsIFVwZGF0ZVdpZGdldENvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmQnO1xuaW1wb3J0IHsgQVhQRGVzaWduZXJDb25uZWN0b3IgfSBmcm9tICcuL2Rlc2lnbmVyLWNvbm5lY3Rvci5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEFYUF9ERVNJR05FUl9BRERfV0lER0VUX01FTlUsXG4gIEFYUF9ERVNJR05FUl9DTE9ORV9NRU5VLFxuICBBWFBfREVTSUdORVJfQ09QWV9NRU5VLFxuICBBWFBfREVTSUdORVJfQ1VUX01FTlUsXG4gIEFYUF9ERVNJR05FUl9ERUxFVEVfV0lER0VUX01FTlUgYXMgQVhQX0RFU0lHTkVSX0RFTEVURV9XSURHRVRfTUVOVSxcbiAgQVhQX0RFU0lHTkVSX1BBU1RFX01FTlUsXG4gIEFYUF9ERVNJR05FUl9TQVZFX0FTX1dJREdFVF9NRU5VLFxuICBjbG9uZVdpZGdldE1lbnUsXG59IGZyb20gJy4vZ2VuZXJpYy1jb21tYW5kcy50eXBlcyc7XG5cbmV4cG9ydCB0eXBlIEFYUERlc2lnbmVyUHJldmlld1NpemUgPSAnc20nIHwgJ21kJyB8ICdsZycgfCAneGwnIHwgJ3h4bCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQRGVzaWduZXJGb2N1c0NvbW1hbmQge1xuICB3aWRnZXQ6IEFYUFdpZGdldE5vZGUgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYUERlc2lnbmVyVXBkYXRlQ29tbWFuZCB7XG4gIHZhbHVlczogYW55O1xuICB3aWRnZXQ/OiBBWFBXaWRnZXROb2RlIHwgbnVsbDtcbiAgbW9kZTogJ2luaXQnIHwgJ3VwZGF0ZSc7XG59XG5leHBvcnQgaW50ZXJmYWNlIEFYUERlc2lnbmVyVXBkYXRlRXZlbnQge1xuICB2YWx1ZXM6IGFueTtcbiAgd2lkZ2V0OiBBWFBXaWRnZXROb2RlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYUERlc2lnbmVyU2VsZWN0Q29tbWFuZCB7XG4gIHdpZGdldDogQVhQV2lkZ2V0Tm9kZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBEZXNpZ25lclJlZ2lzdGVyQ29tbWFuZCB7XG4gIGlkOiBudW1iZXI7XG4gIHdpZGdldDogQVhQV2lkZ2V0Tm9kZTtcbiAgY29uZmlnOiBBWFBXaWRnZXRDb25maWc7XG4gIGluc3RhbmNlOiBBWFBXaWRnZXRDb21wb25lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQRGVzaWduZXJTZWxlY3RFdmVudCB7XG4gIHdpZGdldDogQVhQV2lkZ2V0Tm9kZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBEZXNpZ25lclJlZnJlc2hDb21tYW5kIHtcbiAgd2lkZ2V0OiBBWFBXaWRnZXROb2RlO1xufVxuZXhwb3J0IGludGVyZmFjZSBBWFBEZXNpZ25lclJlZnJlc2hFdmVudCB7XG4gIHdpZGdldDogQVhQV2lkZ2V0Tm9kZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBEZXNpZ25lckFkZE5vZGVDb21tYW5kIHtcbiAgd2lkZ2V0OiBBWFBXaWRnZXROb2RlO1xufVxuZXhwb3J0IGludGVyZmFjZSBBWFBEZXNpZ25lckFkZE5vZGVFdmVudCB7XG4gIHdpZGdldDogQVhQV2lkZ2V0Tm9kZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBEZXNpZ25lckZvY3VzRXZlbnQge1xuICB3aWRnZXQ6IEFYUFdpZGdldE5vZGUgfCBudWxsO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhQRGVzaWduZXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBwb3B1cFNlcnZpY2UgPSBpbmplY3QoQVhQb3B1cFNlcnZpY2UpO1xuICBwcml2YXRlIHRvYXN0U2VydmljZSA9IGluamVjdChBWFRvYXN0U2VydmljZSk7XG4gIHByaXZhdGUgZmlsZVNlcnZpY2UgPSBpbmplY3QoQVhGaWxlU2VydmljZSk7XG4gIHByaXZhdGUgbG9hZGluZ1NlcnZpY2UgPSBpbmplY3QoQVhMb2FkaW5nRGlhbG9nU2VydmljZSk7XG4gIHByaXZhdGUgd2lkZ2V0UmVnaXN0ZXJ5U2VydmljZSA9IGluamVjdChBWFBXaWRnZXRSZWdpc3RyeVNlcnZpY2UpO1xuICBwcml2YXRlIGNvbm5lY3RvciA9IGluamVjdChBWFBEZXNpZ25lckNvbm5lY3Rvcik7XG5cbiAgcHJpdmF0ZSBjaGFubmVsID0gbmV3IEJyb2FkY2FzdENoYW5uZWwoJ2xpdmVQcmV2aWV3Q2hhbm5lbCcpO1xuXG4gIHB1YmxpYyByZWFkb25seSBkb2N1bWVudCA9IHNpZ25hbCh0aGlzLmNyZWF0ZURvYygpKTtcbiAgcHVibGljIHJlYWRvbmx5IGN1cnJlbnRQYWdlSW5kZXggPSBzaWduYWwoMCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGN1cnJlbnRQYWdlID0gc2lnbmFsKHRoaXMuZG9jdW1lbnQoKS5jaGlsZHJlbj8uWzBdISk7XG5cbiAgcHJpdmF0ZSBjb21tYW5kTWFuYWdlciA9IGluamVjdChDb21tYW5kTWFuYWdlcik7XG5cbiAgcHJpdmF0ZSBjbGlwYm9hcmQgPSBzaWduYWw8QVhQV2lkZ2V0Tm9kZSB8IG51bGw+KG51bGwpO1xuXG4gIC8vXG4gIHB1YmxpYyBjYW5DdXRDb3B5ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWxlY3RlZE5vZGUoKSAhPSBudWxsICYmIHRoaXMuc2VsZWN0ZWROb2RlKCk/LnR5cGUgIT0gJ3BhZ2UtbGF5b3V0Jyk7XG4gIHB1YmxpYyBjYW5EZWxldGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnNlbGVjdGVkTm9kZSgpICE9IG51bGwgJiYgdGhpcy5zZWxlY3RlZE5vZGUoKT8udHlwZSAhPSAncGFnZS1sYXlvdXQnKTtcbiAgcHVibGljIGNhbkluc2VydCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0ZWROb2RlKCkgIT0gbnVsbCAmJiB0aGlzLnNlbGVjdGVkTm9kZUNvbmZpZygpLnR5cGUgPT0gJ2NvbnRhaW5lcicpO1xuICBwdWJsaWMgY2FuUGFzdGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNsaXBib2FyZCgpICE9IG51bGwpO1xuICAvL1xuICBwdWJsaWMgcmVhZG9ubHkgaGlzdG9yeSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29tbWFuZE1hbmFnZXIuaGlzdG9yeSgpKTtcbiAgcHVibGljIHJlYWRvbmx5IGNhblVuZG8gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbW1hbmRNYW5hZ2VyLmNhblVuZG8oKSk7XG4gIHB1YmxpYyByZWFkb25seSBjYW5SZWRvID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb21tYW5kTWFuYWdlci5jYW5SZWRvKCkpO1xuICAvL1xuICBwdWJsaWMgcmVhZG9ubHkgY2FuU2F2ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMudGVtcGxhdGVJZCgpICE9IG51bGwpO1xuXG4gIHB1YmxpYyBicmVhZGNydW1icyA9IGNvbXB1dGVkPEFYUFdpZGdldE5vZGVbXT4oKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkTm9kZSgpID8gdGhpcy5maW5kQnJlYWRjcnVtYnModGhpcy5jdXJyZW50UGFnZSgpLCB0aGlzLnNlbGVjdGVkTm9kZSgpISkgPz8gW10gOiBbXTtcbiAgfSk7XG5cbiAgcHVibGljIHNlbGVjdGVkTm9kZSA9IHNpZ25hbDxBWFBXaWRnZXROb2RlIHwgbnVsbD4obnVsbCk7XG5cbiAgcHVibGljIHNlbGVjdGVkTm9kZUNvbmZpZyA9IGNvbXB1dGVkKCgpID0+IGdldCh0aGlzLnNlbGVjdGVkTm9kZSgpLCAnX19tZXRhX18uY29uZmlnJykgYXMgYW55IGFzIEFYUFdpZGdldENvbmZpZyk7XG5cbiAgcHJpdmF0ZSBfZm9jdXNlZE5vZGU6IEFYUFdpZGdldE5vZGUgfCBudWxsID0gbnVsbDtcbiAgcHVibGljIGZvY3VzZWROb2RlID0gKCkgPT4gdGhpcy5fZm9jdXNlZE5vZGU7XG5cbiAgcHVibGljIHJlYWRvbmx5IHNpemUgPSBzaWduYWw8QVhQRGVzaWduZXJQcmV2aWV3U2l6ZT4oJ3hsJyk7XG5cbiAgcHVibGljIHJlYWRvbmx5IG9uU2VsZWN0ZWQgPSBuZXcgU3ViamVjdDxBWFBEZXNpZ25lclNlbGVjdEV2ZW50PigpO1xuICBwdWJsaWMgcmVhZG9ubHkgb25SZWZyZXNoID0gbmV3IFN1YmplY3Q8QVhQRGVzaWduZXJSZWZyZXNoRXZlbnQ+KCk7XG4gIHB1YmxpYyByZWFkb25seSBvblVwZGF0ZSA9IG5ldyBTdWJqZWN0PEFYUERlc2lnbmVyVXBkYXRlRXZlbnQ+KCk7XG4gIHB1YmxpYyByZWFkb25seSBvbkZvY3VzZWQgPSBuZXcgU3ViamVjdDxBWFBEZXNpZ25lckZvY3VzRXZlbnQ+KCk7XG5cbiAgcHJpdmF0ZSB0ZW1wbGF0ZUlkID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gICNlZiA9IGVmZmVjdChcbiAgICAoKSA9PiB7XG4gICAgICB0aGlzLnJlZnJlc2goeyB3aWRnZXQ6IHRoaXMuY3VycmVudFBhZ2UoKSB9KTtcbiAgICB9LFxuICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICApO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY2hhbm5lbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy5jaGFubmVsQ2FsbGJhY2spO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyKGNvbW1hbmQ6IEFYUERlc2lnbmVyUmVnaXN0ZXJDb21tYW5kKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3QoeyB3aWRnZXQ6IGNvbW1hbmQud2lkZ2V0IH0pO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdChjb21tYW5kOiBBWFBEZXNpZ25lclNlbGVjdENvbW1hbmQpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkTm9kZS5zZXQoY29tbWFuZC53aWRnZXQpO1xuICAgIHRoaXMub25TZWxlY3RlZC5uZXh0KGNvbW1hbmQpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZShjb21tYW5kOiBBWFBEZXNpZ25lclVwZGF0ZUNvbW1hbmQpOiB2b2lkIHtcbiAgICBjb25zdCBub2RlID0gY29tbWFuZC53aWRnZXQgPz8gdGhpcy5zZWxlY3RlZE5vZGUoKTtcblxuICAgIGlmIChjb21tYW5kLm1vZGUgPT0gJ3VwZGF0ZScgJiYgbm9kZSkge1xuICAgICAgdGhpcy5jb21tYW5kTWFuYWdlci5leGVjdXRlQ29tbWFuZChuZXcgVXBkYXRlV2lkZ2V0Q29tbWFuZChub2RlISwgY29tbWFuZC52YWx1ZXMsIG5vZGUhKSk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWROb2RlLnVwZGF0ZSgoYykgPT4gbWVyZ2Uobm9kZSwgY29tbWFuZC52YWx1ZXMpKTtcbiAgICB0aGlzLm9uVXBkYXRlLm5leHQoeyB3aWRnZXQ6IG5vZGUhLCB2YWx1ZXM6IGNvbW1hbmQudmFsdWVzIH0pO1xuICAgIHRoaXMudXBkYXRlUHJldmlldygpO1xuICB9XG5cbiAgcHVibGljIGZvY3VzKGNvbW1hbmQ6IEFYUERlc2lnbmVyRm9jdXNDb21tYW5kKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2ZvY3VzZWROb2RlICE9IGNvbW1hbmQud2lkZ2V0KSB7XG4gICAgICB0aGlzLl9mb2N1c2VkTm9kZSA9IGNvbW1hbmQud2lkZ2V0O1xuICAgICAgdGhpcy5vbkZvY3VzZWQubmV4dCh7IHdpZGdldDogdGhpcy5fZm9jdXNlZE5vZGUgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlZnJlc2goY29tbWFuZDogQVhQRGVzaWduZXJSZWZyZXNoQ29tbWFuZCkge1xuICAgIHRoaXMub25SZWZyZXNoLm5leHQoeyB3aWRnZXQ6IGNvbW1hbmQud2lkZ2V0IH0pO1xuICAgIHRoaXMudXBkYXRlUHJldmlldygpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kQnJlYWRjcnVtYnMoXG4gICAgbm9kZTogQVhQV2lkZ2V0Tm9kZSxcbiAgICB0YXJnZXROb2RlOiBBWFBXaWRnZXROb2RlLFxuICAgIGJyZWFkY3J1bWI6IEFYUFdpZGdldE5vZGVbXSA9IFtdXG4gICk6IEFYUFdpZGdldE5vZGVbXSB8IHVuZGVmaW5lZCB7XG4gICAgLy8gQWRkIHRoZSBjdXJyZW50IG5vZGUgdG8gdGhlIGJyZWFkY3J1bWIgcGF0aFxuICAgIGNvbnN0IGN1cnJlbnRCcmVhZGNydW1iID0gWy4uLmJyZWFkY3J1bWIsIG5vZGVdO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgbm9kZSBpcyB0aGUgdGFyZ2V0IG5vZGVcbiAgICBpZiAobm9kZSA9PT0gdGFyZ2V0Tm9kZSkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRCcmVhZGNydW1iO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBub2RlIGhhcyBjaGlsZHJlbiwgcmVjdXJzaXZlbHkgc2VhcmNoIHRoZW1cbiAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmluZEJyZWFkY3J1bWJzKGNoaWxkLCB0YXJnZXROb2RlLCBjdXJyZW50QnJlYWRjcnVtYik7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHVuZGVmaW5lZCBpZiBubyBtYXRjaCBpcyBmb3VuZFxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBhc3luYyBzaG93UGlja2VyKGN1cnJlbnROb2RlOiBBWFBXaWRnZXROb2RlID0gdGhpcy5zZWxlY3RlZE5vZGUoKSEpOiBQcm9taXNlPEFYUFdpZGdldE5vZGVbXT4ge1xuICAgIGNvbnN0IGNvbSA9IGF3YWl0IGltcG9ydCgnLi4vY29tcG9uZW50cy93aWRnZXQtcGlja2VyL3dpZGdldC1waWNrZXIuY29tcG9uZW50JykudGhlbihcbiAgICAgIChjKSA9PiBjLkFYUERlc2lnbmVyV2lkZ2V0UGlja2VyQ29tcG9uZW50XG4gICAgKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnBvcHVwU2VydmljZS5vcGVuKGNvbSwge1xuICAgICAgdGl0bGU6ICdXaWRnZXQgR2FsbGVyeScsXG4gICAgICBzaXplOiAnbWQnLFxuICAgICAgY2xvc2VCdXR0b246IHRydWUsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHdpZGdldHM6IHNvcnRCeShcbiAgICAgICAgICB0aGlzLndpZGdldFJlZ2lzdGVyeVNlcnZpY2UuYWxsKCkuZmlsdGVyKChjKSA9PiBjLnZpc2libGUgIT0gZmFsc2UpLFxuICAgICAgICAgIChjKSA9PiBjLnRpdGxlXG4gICAgICAgICksXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IHdpZGdldHM6IEFYUFdpZGdldE5vZGVbXSA9IFtdO1xuICAgIGlmICgocmVzdWx0LmRhdGE/LndpZGdldHMgPz8gW10pLmxlbmd0aCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSByZXN1bHQuZGF0YT8ud2lkZ2V0cyBhcyBBWFBXaWRnZXRDb25maWdbXTtcbiAgICAgIHNlbGVjdGVkLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgd2lkZ2V0cy5wdXNoKHRoaXMuYWRkV2lkZ2V0KGN1cnJlbnROb2RlLCB7IHR5cGU6IGMubmFtZSB9KSEpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB3aWRnZXRzO1xuICB9XG5cbiAgcHVibGljIG5ldygpIHtcbiAgICB0aGlzLmNvbW1hbmRNYW5hZ2VyLmNsZWFyKCk7XG4gICAgdGhpcy5kb2N1bWVudC5zZXQodGhpcy5jcmVhdGVEb2MoKSk7XG4gICAgdGhpcy5jdXJyZW50UGFnZS5zZXQodGhpcy5kb2N1bWVudCgpLmNoaWxkcmVuPy5bMF0hKTtcbiAgICB0aGlzLnJlUmVuZGVyUGFnZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEb2MoKTogQVhQV2lkZ2V0Tm9kZSB7XG4gICAgY29uc3QgZG9jOiBBWFBXaWRnZXROb2RlID0ge1xuICAgICAgdHlwZTogQVhQV2lkZ2V0c0NhdGFsb2cuZG9jdW1lbnQsXG4gICAgICBjaGlsZHJlbjogW3RoaXMuY3JlYXRlUGFnZSgpXSxcbiAgICAgIG5hbWU6ICdkb2N1bWVudCcsXG4gICAgfTtcbiAgICBzZXQoZG9jLCAnX19tZXRhX18uaWQnLCB0aGlzLmdlbmVyYXRlVW5pcXVlSWQoKSk7XG4gICAgcmV0dXJuIGRvYztcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUGFnZSgpOiBBWFBXaWRnZXROb2RlIHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLndpZGdldFJlZ2lzdGVyeVNlcnZpY2UucmVzb2x2ZSgncGFnZS1sYXlvdXQnKTtcblxuICAgIGNvbnN0IHBhZ2U6IEFYUFdpZGdldE5vZGUgPSB7XG4gICAgICB0eXBlOiAncGFnZS1sYXlvdXQnLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgbmFtZTogJ3BhZ2UtbGF5b3V0MScsXG4gICAgfTtcblxuICAgIHNldChwYWdlLCAnX19tZXRhX18uaWQnLCB0aGlzLmdlbmVyYXRlVW5pcXVlSWQoKSk7XG4gICAgc2V0KHBhZ2UsICdfX21ldGFfXy5jb25maWcnLCBjb25maWcpO1xuICAgIHJldHVybiBwYWdlO1xuICB9XG5cbiAgcHVibGljIGFkZE5ld1BhZ2UoKSB7XG4gICAgdGhpcy5hZGRXaWRnZXQodGhpcy5kb2N1bWVudCgpLCB0aGlzLmNyZWF0ZVBhZ2UoKSk7XG4gICAgdGhpcy5nb1RvUGFnZSh0aGlzLmN1cnJlbnRQYWdlSW5kZXgoKSArIDEpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZVBhZ2UoaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHBhZ2UgPSB0aGlzLmRvY3VtZW50KCkuY2hpbGRyZW4/LltpbmRleF0hO1xuICAgIHRoaXMucmVtb3ZlV2lkZ2V0KHBhZ2UpO1xuICAgIHRoaXMuZ29Ub1BhZ2UoaW5kZXggLSAxKTtcbiAgfVxuXG4gIHB1YmxpYyBjbG9uZVBhZ2UoaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHBhZ2UgPSB0aGlzLmRvY3VtZW50KCkuY2hpbGRyZW4/LltpbmRleF0hO1xuICAgIHRoaXMuY2xvbmUocGFnZSk7XG4gICAgdGhpcy5nb1RvUGFnZSgodGhpcy5kb2N1bWVudCgpLmNoaWxkcmVuPy5sZW5ndGggPz8gMSkgLSAxKTtcbiAgfVxuXG4gIHB1YmxpYyBnb1RvUGFnZShpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5jdXJyZW50UGFnZUluZGV4LnNldChpbmRleCk7XG4gICAgLy9zZXRUaW1lb3V0KCgpID0+IHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlLnNldCh0aGlzLmRvY3VtZW50KCkuY2hpbGRyZW4/Llt0aGlzLmN1cnJlbnRQYWdlSW5kZXgoKV0hKTtcbiAgICB0aGlzLnNlbGVjdCh7IHdpZGdldDogdGhpcy5jdXJyZW50UGFnZSgpIH0pO1xuICAgIC8vdGhpcy51cGRhdGVQcmV2aWV3KCk7XG4gICAgLy99KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVSZW5kZXJQYWdlKCkge1xuICAgIHRoaXMuY3VycmVudFBhZ2Uuc2V0KHsgLi4udGhpcy5jdXJyZW50UGFnZSgpIH0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5yZWZyZXNoKHsgd2lkZ2V0OiB0aGlzLmN1cnJlbnRQYWdlKCkgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZmluZFdpZGdldEJ5SWQocm9vdDogQVhQV2lkZ2V0Tm9kZSwgaWQ6IHN0cmluZyk6IEFYUFdpZGdldE5vZGUgfCBudWxsIHtcbiAgICBpZiAoZ2V0KHJvb3QsICdfX21ldGFfXy5pZCcpID09PSBpZCkge1xuICAgICAgcmV0dXJuIHJvb3Q7IC8vIFJldHVybiB0aGUgcm9vdCBpZiBpdCBtYXRjaGVzIHRoZSBJRFxuICAgIH1cbiAgICBpZiAoIXJvb3QuY2hpbGRyZW4pIHJldHVybiBudWxsO1xuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiByb290LmNoaWxkcmVuKSB7XG4gICAgICBjb25zdCBmb3VuZCA9IHRoaXMuZmluZFdpZGdldEJ5SWQoY2hpbGQsIGlkKTtcbiAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICByZXR1cm4gZm91bmQ7IC8vIFJldHVybiB0aGUgZm91bmQgY2hpbGRcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDsgLy8gTm9kZSBub3QgZm91bmRcbiAgfVxuXG4gIHByaXZhdGUgZmluZFBhcmVudChpZDogc3RyaW5nLCBwYXJlbnQ6IEFYUFdpZGdldE5vZGUgPSB0aGlzLmN1cnJlbnRQYWdlKCkpOiBBWFBXaWRnZXROb2RlIHwgbnVsbCB7XG4gICAgaWYgKCFwYXJlbnQuY2hpbGRyZW4pIHJldHVybiBudWxsO1xuXG4gICAgaWYgKHBhcmVudC5jaGlsZHJlbi5zb21lKChjaGlsZCkgPT4gZ2V0KGNoaWxkLCAnX19tZXRhX18uaWQnKSA9PT0gaWQpKSB7XG4gICAgICByZXR1cm4gcGFyZW50OyAvLyBSZXR1cm4gdGhpcyBub2RlIGFzIGl0J3MgdGhlIHBhcmVudCBvZiB0aGUgbm9kZSB3aXRoIHRoZSBnaXZlbiBJRFxuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgcGFyZW50LmNoaWxkcmVuKSB7XG4gICAgICBjb25zdCBmb3VuZFBhcmVudCA9IHRoaXMuZmluZFBhcmVudChpZCwgY2hpbGQpO1xuICAgICAgaWYgKGZvdW5kUGFyZW50KSByZXR1cm4gZm91bmRQYXJlbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7IC8vIE5vIHBhcmVudCBmb3VuZFxuICB9XG5cbiAgcHJpdmF0ZSBmaW5kTmVhcmVzdENvbnRhaW5lcihub2RlOiBBWFBXaWRnZXROb2RlLCBzZWFyY2hVcHdhcmQ6IGJvb2xlYW4gPSB0cnVlKTogQVhQV2lkZ2V0Tm9kZSB8IG51bGwge1xuICAgIGlmIChzZWFyY2hVcHdhcmQpIHtcbiAgICAgIGxldCBjdXJyZW50OiBBWFBXaWRnZXROb2RlIHwgbnVsbCA9IG5vZGU7XG4gICAgICB3aGlsZSAoY3VycmVudCkge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLndpZGdldFJlZ2lzdGVyeVNlcnZpY2UucmVzb2x2ZShjdXJyZW50LnR5cGUpO1xuICAgICAgICBpZiAoY29uZmlnICYmIGNvbmZpZy50eXBlID09ICdjb250YWluZXInKSB7XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudCA9IHRoaXMuZmluZFBhcmVudChnZXQoY3VycmVudCwgJ19fbWV0YV9fLmlkJykhKTsgLy8gVXNlIGZpbmRQYXJlbnQgdG8gbmF2aWdhdGUgdXB3YXJkc1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZWN1cnNpdmUgc2VhcmNoIHRvIGZpbmQgdGhlIGZpcnN0IGNvbnRhaW5lciBhbW9uZyBjaGlsZHJlblxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy53aWRnZXRSZWdpc3RlcnlTZXJ2aWNlLnJlc29sdmUoY2hpbGQudHlwZSk7XG4gICAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcudHlwZSA9PSAnY29udGFpbmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBmb3VuZENvbnRhaW5lciA9IHRoaXMuZmluZE5lYXJlc3RDb250YWluZXIoY2hpbGQsIGZhbHNlKTsgLy8gQ29udGludWUgc2VhcmNoaW5nIGRvd253YXJkc1xuICAgICAgICAgIGlmIChmb3VuZENvbnRhaW5lcikgcmV0dXJuIGZvdW5kQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsOyAvLyBSZXR1cm4gbnVsbCBpZiBubyBjb250YWluZXIgZm91bmRcbiAgfVxuXG4gIGFkZFdpZGdldChjdXJyZW50Tm9kZTogQVhQV2lkZ2V0Tm9kZSwgbm9kZTogQVhQV2lkZ2V0Tm9kZSk6IEFYUFdpZGdldE5vZGUge1xuICAgIC8vXG4gICAgY29uc3QgY2xvbmVkID0gY2xvbmVEZWVwKG5vZGUpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMud2lkZ2V0UmVnaXN0ZXJ5U2VydmljZS5yZXNvbHZlKG5vZGUudHlwZSk7XG5cbiAgICAvL1xuICAgIHRoaXMuY29tbWFuZE1hbmFnZXIuZXhlY3V0ZUNvbW1hbmQobmV3IEFkZFdpZGdldENvbW1hbmQoY2xvbmVkLCBjdXJyZW50Tm9kZSwgY3VycmVudE5vZGUpKTtcbiAgICAvL1xuICAgIGNsb25lZC5uYW1lID0gdGhpcy5nZW5lcmF0ZVVuaXF1ZU5hbWUobm9kZS50eXBlKTtcbiAgICBzZXQoY2xvbmVkLCAnX19tZXRhX18uaWQnLCB0aGlzLmdlbmVyYXRlVW5pcXVlSWQoKSk7XG4gICAgc2V0KGNsb25lZCwgJ19fbWV0YV9fLmNvbmZpZycsIGNvbmZpZyk7XG4gICAgLy9cbiAgICB0aGlzLnJlUmVuZGVyUGFnZSgpO1xuICAgIC8vXG4gICAgdGhpcy5yZWZyZXNoKHsgd2lkZ2V0OiBjdXJyZW50Tm9kZSB9KTtcbiAgICB0aGlzLnNlbGVjdCh7IHdpZGdldDogY2xvbmVkIH0pO1xuICAgIHJldHVybiBjbG9uZWQ7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlV2lkZ2V0KG5vZGU6IEFYUFdpZGdldE5vZGUgPSB0aGlzLnNlbGVjdGVkTm9kZSgpISk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIG5vZGUudHlwZSA9PT0gJ2RvY3VtZW50LWxheW91dCcgfHxcbiAgICAgIChub2RlLnR5cGUgPT09ICdwYWdlLWxheW91dCcgJiYgKHRoaXMuZG9jdW1lbnQoKS5jaGlsZHJlbj8ubGVuZ3RoID8/IDEpID09IDEpXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdDYW5ub3QgcmVtb3ZlIHRoZSBwYWdlIG5vZGUuJyk7XG4gICAgICByZXR1cm47IC8vIFByZXZlbnQgcmVtb3ZpbmcgdGhlIHJvb3QgcGFnZSBub2RlIG9yIGRvY3VtZW50XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZUlkVG9SZW1vdmUgPSBnZXQobm9kZSwgJ19fbWV0YV9fLmlkJyk7XG4gICAgaWYgKCFub2RlSWRUb1JlbW92ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb2RlIGRvZXMgbm90IGhhdmUgYSB2YWxpZCBfX21ldGFfXy5pZCB0byBpZGVudGlmeSBpdCBmb3IgcmVtb3ZhbC4nKTtcbiAgICB9XG5cbiAgICAvLyBGaW5kIHRoZSBwYXJlbnQgb2YgdGhlIG5vZGUgdG8gcmVtb3ZlIGl0XG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5maW5kUGFyZW50KG5vZGVJZFRvUmVtb3ZlLCB0aGlzLmRvY3VtZW50KCkpO1xuICAgIGlmICghcGFyZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmVudCBub2RlIG5vdCBmb3VuZC4gVGhlIG5vZGUgbWlnaHQgYmUgdGhlIHJvb3Qgbm9kZSBvciBkb2VzIG5vdCBleGlzdC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcmV2aW91c1NlbGVjdGlvbiA9IHRoaXMuc2VsZWN0ZWROb2RlKCk7IC8vIENhcHR1cmUgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBub2RlIGJlZm9yZSByZW1vdmFsXG4gICAgY29uc3QgY29tbWFuZCA9IG5ldyBSZW1vdmVXaWRnZXRDb21tYW5kKG5vZGUsIHBhcmVudCwgcHJldmlvdXNTZWxlY3Rpb24hKTtcbiAgICB0aGlzLmNvbW1hbmRNYW5hZ2VyLmV4ZWN1dGVDb21tYW5kKGNvbW1hbmQpO1xuXG4gICAgdGhpcy5yZWZyZXNoKHsgd2lkZ2V0OiBwYXJlbnQgfSk7IC8vIFJlZnJlc2ggdGhlIFVJIHRvIHJlZmxlY3QgY2hhbmdlc1xuICAgIHRoaXMuc2VsZWN0KHsgd2lkZ2V0OiBwYXJlbnQgfSk7IC8vIFNlbGVjdCB0aGUgcGFyZW50IG5vZGUgYWZ0ZXIgcmVtb3ZhbFxuICB9XG5cbiAgbmF2aWdhdGVUbyhpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5jb21tYW5kTWFuYWdlci5nb1RvQ29tbWFuZChpbmRleCk7XG4gICAgdGhpcy5yZVJlbmRlclBhZ2UoKTtcbiAgICBjb25zdCBjdXJyZW50U2VsZWN0aW9uID0gdGhpcy5jb21tYW5kTWFuYWdlci5zZWxlY3RlZE5vZGUoKTtcbiAgICB0aGlzLnJlZnJlc2goeyB3aWRnZXQ6IHRoaXMuY3VycmVudFBhZ2UoKSB9KTtcbiAgICB0aGlzLnNlbGVjdCh7IHdpZGdldDogY3VycmVudFNlbGVjdGlvbiEgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVkbygpIHtcbiAgICB0aGlzLmNvbW1hbmRNYW5hZ2VyLnJlZG8oKTtcbiAgICB0aGlzLnJlUmVuZGVyUGFnZSgpO1xuICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb24gPSB0aGlzLmNvbW1hbmRNYW5hZ2VyLnNlbGVjdGVkTm9kZSgpO1xuICAgIHRoaXMucmVmcmVzaCh7IHdpZGdldDogdGhpcy5jdXJyZW50UGFnZSgpIH0pO1xuICAgIHRoaXMuc2VsZWN0KHsgd2lkZ2V0OiBjdXJyZW50U2VsZWN0aW9uISB9KTtcbiAgfVxuXG4gIHB1YmxpYyB1bmRvKCkge1xuICAgIHRoaXMuY29tbWFuZE1hbmFnZXIudW5kbygpO1xuICAgIHRoaXMucmVSZW5kZXJQYWdlKCk7XG4gICAgY29uc3QgY3VycmVudFNlbGVjdGlvbiA9IHRoaXMuY29tbWFuZE1hbmFnZXIuc2VsZWN0ZWROb2RlKCk7XG4gICAgdGhpcy5yZWZyZXNoKHsgd2lkZ2V0OiB0aGlzLmN1cnJlbnRQYWdlKCkgfSk7XG4gICAgdGhpcy5zZWxlY3QoeyB3aWRnZXQ6IGN1cnJlbnRTZWxlY3Rpb24hIH0pO1xuICB9XG5cbiAgcHVibGljIGNsZWFySGlzdG9yeSgpIHtcbiAgICB0aGlzLmNvbW1hbmRNYW5hZ2VyLmNsZWFyKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZU1ldGFQcm9wKG9iajogYW55KTogYW55IHtcbiAgICBjb25zdCBub2RlTmFtZSA9ICdfX21ldGFfXyc7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIG9iamVjdCBpcyBhbiBhcnJheVxuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgIHJldHVybiBvYmoubWFwKChpdGVtKSA9PiB0aGlzLnJlbW92ZU1ldGFQcm9wKGl0ZW0pKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCkge1xuICAgICAgLy8gQ3JlYXRlIGEgbmV3IG9iamVjdCB0byBzdG9yZSB0aGUgcmVzdWx0XG4gICAgICBsZXQgbmV3T2JqOiBhbnkgPSB7fTtcbiAgICAgIGZvciAobGV0IGtleSBpbiBvYmopIHtcbiAgICAgICAgLy8gT25seSBhZGQgdGhlIGtleSBpZiBpdCdzIG5vdCB0aGUgbm9kZU5hbWUgd2Ugd2FudCB0byByZW1vdmVcbiAgICAgICAgaWYgKGtleSAhPT0gbm9kZU5hbWUpIHtcbiAgICAgICAgICBuZXdPYmpba2V5XSA9IHRoaXMucmVtb3ZlTWV0YVByb3Aob2JqW2tleV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3T2JqO1xuICAgIH1cbiAgICAvLyBJZiB0aGUgdmFsdWUgaXMgbm90IGFuIG9iamVjdCBvciBhcnJheSwgcmV0dXJuIGl0IGFzIGlzXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYWRkTWV0YVRvTm9kZXMoXG4gICAgbm9kZTogQVhQV2lkZ2V0Tm9kZSxcbiAgICBwcm9jZXNzZWROb2RlczogeyBjb3VudDogbnVtYmVyIH0sXG4gICAgcHJvZ3Jlc3NDYWxsYmFjazogKHByb2Nlc3NlZDogbnVtYmVyKSA9PiB2b2lkXG4gICk6IFByb21pc2U8QVhQV2lkZ2V0Tm9kZT4ge1xuICAgIC8vIEFwcGx5IHlvdXIgbWV0YSBsb2dpYyBoZXJlXG4gICAgY29uc3QgY29uZmlnID0gdGhpcy53aWRnZXRSZWdpc3RlcnlTZXJ2aWNlLnJlc29sdmUobm9kZS50eXBlKTtcbiAgICAvL1xuICAgIHNldChub2RlLCAnX19tZXRhX18uaWQnLCB0aGlzLmdlbmVyYXRlVW5pcXVlSWQoKSk7XG4gICAgc2V0KG5vZGUsICdfX21ldGFfXy5jb25maWcnLCBjb25maWcpO1xuICAgIC8vXG4gICAgLy8gSW5jcmVtZW50IHRoZSBwcm9jZXNzZWQgbm9kZSBjb3VudCBhbmQgdXBkYXRlIHRoZSBwcm9ncmVzcyBkaWFsb2dcbiAgICBwcm9jZXNzZWROb2Rlcy5jb3VudCsrO1xuICAgIHByb2dyZXNzQ2FsbGJhY2socHJvY2Vzc2VkTm9kZXMuY291bnQpO1xuICAgIC8vIFJlY3Vyc2l2ZWx5IHByb2Nlc3MgY2hpbGQgbm9kZXMgdXNpbmcgUHJvbWlzZS5hbGxcbiAgICBpZiAobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgIG5vZGUuY2hpbGRyZW4gPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgbm9kZS5jaGlsZHJlbi5tYXAoYXN5bmMgKGNoaWxkKSA9PiBhd2FpdCB0aGlzLmFkZE1ldGFUb05vZGVzKGNoaWxkLCBwcm9jZXNzZWROb2RlcywgcHJvZ3Jlc3NDYWxsYmFjaykpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHB1YmxpYyBjb3B5KHdpZGdldDogQVhQV2lkZ2V0Tm9kZSB8IG51bGwgPSB0aGlzLnNlbGVjdGVkTm9kZSgpKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2FuQ3V0Q29weSgpKSB7XG4gICAgICB0aGlzLmNsaXBib2FyZC5zZXQoY2xvbmVEZWVwKHdpZGdldCkpOyAvLyBVc2UgbG9kYXNoJ3MgY2xvbmVEZWVwIHRvIGVuc3VyZSBhIGRlZXAgY29weVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjdXQod2lkZ2V0OiBBWFBXaWRnZXROb2RlIHwgbnVsbCA9IHRoaXMuc2VsZWN0ZWROb2RlKCkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jYW5DdXRDb3B5KCkpIHtcbiAgICAgIHRoaXMuY29weSh3aWRnZXQpOyAvLyBDb3B5IHRoZSB3aWRnZXQgdG8gdGhlIGNsaXBib2FyZFxuICAgICAgdGhpcy5yZW1vdmVXaWRnZXQod2lkZ2V0ISk7IC8vIFJldXNlIHRoZSByZW1vdmVXaWRnZXQgbWV0aG9kIHdoaWNoIHNob3VsZCBoYW5kbGUgdW5kbyBpbnRlcm5hbGx5XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNsb25lKHdpZGdldDogQVhQV2lkZ2V0Tm9kZSB8IG51bGwgPSB0aGlzLnNlbGVjdGVkTm9kZSgpKTogdm9pZCB7XG4gICAgaWYgKCF3aWRnZXQpIHJldHVybjtcbiAgICB0aGlzLmNvcHkod2lkZ2V0KTsgLy8gQ29weSB0aGUgd2lkZ2V0IHRvIHRoZSBjbGlwYm9hcmRcbiAgICBpZiAod2lkZ2V0LnR5cGUgPT0gJ3BhZ2UtbGF5b3V0Jykge1xuICAgICAgdGhpcy5wYXN0ZSh0aGlzLmRvY3VtZW50KCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhc3RlKHdpZGdldCEpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBwYXN0ZShwYXJlbnROb2RlOiBBWFBXaWRnZXROb2RlID0gdGhpcy5zZWxlY3RlZE5vZGUoKSA/PyB0aGlzLmN1cnJlbnRQYWdlKCkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2xpcGJvYXJkKCkgfHwgIXRoaXMuc2VsZWN0ZWROb2RlKCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0NsaXBib2FyZCBpcyBlbXB0eSBvciBubyBub2RlIGlzIHNlbGVjdGVkLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXdOb2RlID0gY2xvbmVEZWVwKHRoaXMuY2xpcGJvYXJkKCkpITtcbiAgICBjb25zdCBuZWFyZXN0Q29udGFpbmVyID0gdGhpcy5maW5kTmVhcmVzdENvbnRhaW5lcihwYXJlbnROb2RlLCB0cnVlKTtcbiAgICBpZiAoIW5lYXJlc3RDb250YWluZXIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHN1aXRhYmxlIGNvbnRhaW5lciBmb3VuZC4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy9cbiAgICBpZiAoIW5lYXJlc3RDb250YWluZXIuY2hpbGRyZW4pIHtcbiAgICAgIG5lYXJlc3RDb250YWluZXIuY2hpbGRyZW4gPSBbXTtcbiAgICB9XG4gICAgLy9cbiAgICBjb25zdCBzZXROYW1lSWQgPSAobm9kZTogQVhQV2lkZ2V0Tm9kZSkgPT4ge1xuICAgICAgc2V0KG5vZGUsICduYW1lJywgdGhpcy5nZW5lcmF0ZVVuaXF1ZU5hbWUobm9kZS50eXBlKSk7XG4gICAgICBzZXQobm9kZSwgJ19fbWV0YV9fLmlkJywgdGhpcy5nZW5lcmF0ZVVuaXF1ZUlkKCkpO1xuICAgICAgbm9kZS5jaGlsZHJlbj8uZm9yRWFjaCgobikgPT4ge1xuICAgICAgICBzZXROYW1lSWQobik7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHNldE5hbWVJZChuZXdOb2RlKTtcbiAgICAvL1xuICAgIHRoaXMuY29tbWFuZE1hbmFnZXIuZXhlY3V0ZUNvbW1hbmQobmV3IEFkZFdpZGdldENvbW1hbmQobmV3Tm9kZSwgbmVhcmVzdENvbnRhaW5lciwgbmVhcmVzdENvbnRhaW5lcikpO1xuICAgIC8vXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJlZnJlc2goeyB3aWRnZXQ6IG5lYXJlc3RDb250YWluZXIgfSk7IC8vIFJlZnJlc2ggdGhlIFVJXG4gICAgICB0aGlzLnNlbGVjdCh7IHdpZGdldDogbmV3Tm9kZSB9KTsgLy8gU2VsZWN0IHRoZSBuZXdseSBwYXN0ZWQgbm9kZVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2F2ZSgpIHtcbiAgICBpZiAodGhpcy50ZW1wbGF0ZUlkKCkpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmV4cG9ydCgpO1xuICAgICAgYXdhaXQgdGhpcy5jb25uZWN0b3Iuc2F2ZSh0aGlzLnRlbXBsYXRlSWQoKSEsIHsganNvbjogY29udGVudCB9KTtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnN1Y2Nlc3MoJ1lvdXIgY2hhbmdlcyBzYXZlZCBzdWNjZXNzZnVsbHknKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kb3dubG9hZEpzb24oKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzYXZlQXMobm9kZTogQVhQV2lkZ2V0Tm9kZSA9IHRoaXMuZG9jdW1lbnQoKSkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmV4cG9ydChub2RlKTtcbiAgICBhd2FpdCB0aGlzLmNvbm5lY3Rvci5zYXZlQXMoeyBqc29uOiBjb250ZW50IH0pO1xuICAgIHRoaXMudG9hc3RTZXJ2aWNlLnN1Y2Nlc3MoJ1lvdXIgY2hhbmdlcyBzYXZlZCBzdWNjZXNzZnVsbHknKTtcbiAgfVxuXG4gIGV4cG9ydChub2RlOiBBWFBXaWRnZXROb2RlID0gdGhpcy5kb2N1bWVudCgpKTogc3RyaW5nIHtcbiAgICBjb25zdCBqc29uID0gdGhpcy5yZW1vdmVNZXRhUHJvcChub2RlKTtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoanNvbik7XG4gIH1cblxuICBkb3dubG9hZEpzb24oKSB7XG4gICAgLy8gQ29udmVydCB0aGUgb2JqZWN0IHRvIGEgSlNPTiBzdHJpbmdcbiAgICBjb25zdCBqc29uU3RyID0gdGhpcy5leHBvcnQoKTtcblxuICAgIC8vIENyZWF0ZSBhIGJsb2Igb2JqZWN0IGZyb20gdGhlIEpTT04gc3RyaW5nXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtqc29uU3RyXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vanNvbicgfSk7XG5cbiAgICAvLyBDcmVhdGUgYSBVUkwgZm9yIHRoZSBibG9iIG9iamVjdFxuICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG5cbiAgICAvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgPGE+IGVsZW1lbnQgdG8gdHJpZ2dlciB0aGUgZG93bmxvYWRcbiAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGEuaHJlZiA9IHVybDtcbiAgICBhLmRvd25sb2FkID0gJ2V4cG9ydC5qc29uJztcblxuICAgIC8vIEFwcGVuZCB0aGUgPGE+IGVsZW1lbnQgdG8gdGhlIGRvY3VtZW50IGJvZHkgKG5lY2Vzc2FyeSBmb3Igc29tZSBicm93c2VycylcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpO1xuXG4gICAgLy8gVHJpZ2dlciB0aGUgZG93bmxvYWQgYnkgY2xpY2tpbmcgdGhlIDxhPiBlbGVtZW50XG4gICAgYS5jbGljaygpO1xuICAgIC8vIENsZWFuIHVwIGJ5IHJldm9raW5nIHRoZSBvYmplY3QgVVJMIGFuZCByZW1vdmluZyB0aGUgPGE+IGVsZW1lbnRcbiAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKTtcbiAgfVxuXG4gIGFzeW5jIGxvYWRCeUlkKGlkOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmxvYWQoaWQpO1xuICAgICAgdGhpcy50ZW1wbGF0ZUlkLnNldChpZCk7XG4gICAgICBpZiAoY29udGVudCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRCeUNvbnRlbnQoY29udGVudCEpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmRhbmdlcihlcnJvci5tZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpbXBvcnRKU29uKCkge1xuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgdGhpcy5maWxlU2VydmljZS5jaG9vc2UoeyBtdWx0aXBsZTogZmFsc2UsIGFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nIH0pO1xuICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc1swXTtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmaWxlLnRleHQoKTtcbiAgICAgIGF3YWl0IHRoaXMubG9hZEJ5Q29udGVudChjb250ZW50KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsb2FkQnlDb250ZW50KGNvbnRlbnQ6IHN0cmluZykge1xuICAgIGNvbnN0IHJvb3ROb2RlID0gSlNPTi5wYXJzZShjb250ZW50KSBhcyBBWFBXaWRnZXROb2RlO1xuICAgIGNvbnN0IHRvdGFsTm9kZSA9IHRoaXMuY291bnRUb3RhbE5vZGVzKHJvb3ROb2RlKTtcbiAgICBjb25zdCBwcm9jZXNzZWROb2RlcyA9IHsgY291bnQ6IDAgfTtcblxuICAgIGNvbnN0IGJ1dHRvbjogQVhMb2FkaW5nRGlhbG9nQnV0dG9uSXRlbSA9IHtcbiAgICAgIHRleHQ6ICdDYW5jZWwnLFxuICAgICAgYXV0b2ZvY3VzOiB0cnVlLFxuICAgICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICAgIG9uQ2xpY2s6IChlKSA9PiB7XG4gICAgICAgIGRpYWxvZy5jbG9zZSgpO1xuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgZGlhbG9nID0gdGhpcy5sb2FkaW5nU2VydmljZS5zaG93KHtcbiAgICAgIG1vZGU6ICdkZXRlcm1pbmF0ZScsXG4gICAgICB0aXRsZTogJ0xvYWRpbmcgQ29udGVudCcsXG4gICAgICBwcm9ncmVzc0NvbG9yOiAncHJpbWFyeScsXG4gICAgICB0ZXh0OiAnUHJvY2Vzc2luZyBjb250ZW50JyxcbiAgICAgIHN0YXR1czogYDAgb2YgJHt0b3RhbE5vZGV9YCxcbiAgICAgIGJ1dHRvbnM6IFtidXR0b25dLFxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJvb3QgPSBhd2FpdCB0aGlzLmFkZE1ldGFUb05vZGVzKHJvb3ROb2RlLCBwcm9jZXNzZWROb2RlcywgKGNvdW50KSA9PiB7XG4gICAgICAgIGRpYWxvZy5zZXRQcm9ncmVzc1ZhbHVlKE1hdGguY2VpbCgoY291bnQgLyB0b3RhbE5vZGUpICogMTAwKSk7XG4gICAgICAgIGRpYWxvZy5zZXRQcm9ncmVzc1N0YXR1cyhgJHtjb3VudH0gb2YgJHt0b3RhbE5vZGV9YCk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcGFnZSA9IHJvb3QuY2hpbGRyZW4/LlswXSE7XG4gICAgICB0aGlzLmRvY3VtZW50LnNldChyb290KTtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2Uuc2V0KHBhZ2UpO1xuXG4gICAgICBkaWFsb2cuc2V0UHJvZ3Jlc3NDb2xvcignc3VjY2VzcycpO1xuICAgICAgZGlhbG9nLnNldFByb2dyZXNzVGV4dCgnQ29udGVudCBsb2FkZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICBidXR0b24udGV4dCA9ICdPa2F5JztcbiAgICAgIGJ1dHRvbi5jb2xvciA9ICdzdWNjZXNzJztcbiAgICAgIGRpYWxvZy5zZXRQcm9ncmVzc1ZhbHVlKDEwMCk7XG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlUmVuZGVyUGFnZSgpO1xuICAgICAgICBkaWFsb2cuY2xvc2UoKTtcbiAgICAgIH0sIDUwMCk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgZGlhbG9nLnNldFByb2dyZXNzQ29sb3IoJ2RhbmdlcicpO1xuICAgICAgZGlhbG9nLnNldFByb2dyZXNzVGV4dChlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdDYW5ub3QgbG9hZCBjb250ZW50Jyk7XG4gICAgICBidXR0b24udGV4dCA9ICdDbG9zZSc7XG4gICAgICBidXR0b24uY29sb3IgPSAnZGFuZ2VyJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvdW50VG90YWxOb2Rlcyhub2RlOiBBWFBXaWRnZXROb2RlKTogbnVtYmVyIHtcbiAgICBsZXQgY291bnQgPSAxOyAvLyBDb3VudCB0aGUgY3VycmVudCBub2RlXG4gICAgaWYgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICBjb3VudCArPSBub2RlLmNoaWxkcmVuLnJlZHVjZSgoc3VtLCBjaGlsZCkgPT4gc3VtICsgdGhpcy5jb3VudFRvdGFsTm9kZXMoY2hpbGQpLCAwKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvdW50O1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZVVuaXF1ZU5hbWUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBOb3JtYWxpemUgdGhlIHR5cGUgdG8gZm9sbG93IGNhbWVsQ2FzZSBjb252ZW50aW9uXG4gICAgY29uc3QgYmFzZU5hbWUgPSB0eXBlLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgdHlwZS5zbGljZSgxKTtcbiAgICBsZXQgaW5kZXggPSAxO1xuICAgIGxldCB1bmlxdWVOYW1lID0gYCR7YmFzZU5hbWV9JHtpbmRleH1gO1xuXG4gICAgLy8gR2F0aGVyIGFsbCBleGlzdGluZyBuYW1lcyB0byBjaGVjayBhZ2FpbnN0XG4gICAgY29uc3QgZXhpc3RpbmdOYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIHRoaXMuY29sbGVjdEFsbE5hbWVzKHRoaXMuZG9jdW1lbnQoKSwgZXhpc3RpbmdOYW1lcyk7XG5cbiAgICAvLyBJbmNyZW1lbnQgdGhlIGluZGV4IHVudGlsIGEgdW5pcXVlIG5hbWUgaXMgZm91bmRcbiAgICB3aGlsZSAoZXhpc3RpbmdOYW1lcy5oYXModW5pcXVlTmFtZSkpIHtcbiAgICAgIGluZGV4Kys7XG4gICAgICB1bmlxdWVOYW1lID0gYCR7YmFzZU5hbWV9JHtpbmRleH1gO1xuICAgIH1cblxuICAgIHJldHVybiB1bmlxdWVOYW1lO1xuICB9XG5cbiAgZ2VuZXJhdGVVbmlxdWVJZCgpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLnJhbmRvbSgpICogTWF0aC5wb3coMTAsIDE4KTtcbiAgfVxuXG4gIHByaXZhdGUgY29sbGVjdEFsbE5hbWVzKG5vZGU6IEFYUFdpZGdldE5vZGUsIG5hbWVzOiBTZXQ8c3RyaW5nPik6IHZvaWQge1xuICAgIGlmIChub2RlLm5hbWUpIHtcbiAgICAgIG5hbWVzLmFkZChub2RlLm5hbWUpO1xuICAgIH1cbiAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMuY29sbGVjdEFsbE5hbWVzKGNoaWxkLCBuYW1lcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwZGF0ZVByZXZpZXcoKSB7XG4gICAgdGhpcy5jaGFubmVsLnBvc3RNZXNzYWdlKHtcbiAgICAgIGFjdGlvbjogJ2Rlc2lnbmVyLXByZXZpZXcnLFxuICAgICAgZG9jdW1lbnQ6IHRoaXMucmVtb3ZlTWV0YVByb3AodGhpcy5kb2N1bWVudCgpKSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBvcGVuUHJldmlld0RpYWxvZygpIHtcbiAgICBjb25zdCBjb20gPSBhd2FpdCBpbXBvcnQoJy4uLy4uL3ByZXZpZXcvcHJldmlldy5jb21wb25lbnQnKS50aGVuKChjKSA9PiBjLkFYUExheW91dERlc2lnbmVyUHJldmlld0NvbXBvbmVudCk7XG4gICAgYXdhaXQgdGhpcy5wb3B1cFNlcnZpY2Uub3Blbihjb20sIHtcbiAgICAgIGhlYWRlcjogZmFsc2UsXG4gICAgICBzaXplOiAnZnVsbCcsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGluaXRpYWxTaXplOiB0aGlzLnNpemUoKSxcbiAgICAgICAgaXNEaWFsb2dXaW5kb3c6IHRydWUsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9wZW5QcmV2aWV3V2luZG93KCkge1xuICAgIHdpbmRvdy5vcGVuKCcvZm9ybXMvcHJldmlldycsICdfYmxhbmsnKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hhbm5lbENhbGxiYWNrID0gKG1lc3NhZ2U6IE1lc3NhZ2VFdmVudDxhbnk+KSA9PiB7XG4gICAgaWYgKG1lc3NhZ2UuZGF0YS5hY3Rpb24gPT0gJ2Rlc2lnbmVyLXByZXZpZXctbG9hZGVkJykge1xuICAgICAgdGhpcy51cGRhdGVQcmV2aWV3KCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmRhdGEuYWN0aW9uID09ICdvcGVuLXByZXZpZXctd2luZG93Jykge1xuICAgICAgdGhpcy5vcGVuUHJldmlld1dpbmRvdygpO1xuICAgIH1cbiAgfTtcblxuICBnZXRDb250ZXh0TWVudUl0ZW1zKCk6IEFYTWVudUl0ZW1bXSB7XG4gICAgY29uc3QgaXRlbXM6IEFYTWVudUl0ZW1bXSA9IFtdO1xuICAgIC8vICAgICAgIFxuICAgIGlmICh0aGlzLmNhbkluc2VydCgpKSB7XG4gICAgICBpdGVtcy5wdXNoKGNsb25lV2lkZ2V0TWVudShBWFBfREVTSUdORVJfQUREX1dJREdFVF9NRU5VLCB7XG4gICAgICAgIGRpc2FibGVkOiAhdGhpcy5jYW5JbnNlcnQoKSwgYnJlYWs6IHRydWVcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgLy9cbiAgICBpdGVtcy5wdXNoKGNsb25lV2lkZ2V0TWVudShBWFBfREVTSUdORVJfQ0xPTkVfTUVOVSwgeyBkaXNhYmxlZDogIXRoaXMuY2FuQ3V0Q29weSgpIH0pKTtcbiAgICBpdGVtcy5wdXNoKGNsb25lV2lkZ2V0TWVudShBWFBfREVTSUdORVJfQ1VUX01FTlUsIHsgZGlzYWJsZWQ6ICF0aGlzLmNhbkN1dENvcHkoKSB9KSk7XG4gICAgaXRlbXMucHVzaChjbG9uZVdpZGdldE1lbnUoQVhQX0RFU0lHTkVSX0NPUFlfTUVOVSwgeyBkaXNhYmxlZDogIXRoaXMuY2FuQ3V0Q29weSgpIH0pKTtcbiAgICBpdGVtcy5wdXNoKGNsb25lV2lkZ2V0TWVudShBWFBfREVTSUdORVJfUEFTVEVfTUVOVSwgeyBkaXNhYmxlZDogIXRoaXMuY2FuUGFzdGUoKSwgYnJlYWs6IHRydWUgfSkpO1xuICAgIC8vXG4gICAgaXRlbXMucHVzaChjbG9uZVdpZGdldE1lbnUoQVhQX0RFU0lHTkVSX0RFTEVURV9XSURHRVRfTUVOVSwgeyBkaXNhYmxlZDogIXRoaXMuY2FuRGVsZXRlKCksIGJyZWFrOiB0cnVlIH0pKTtcbiAgICAvL1xuICAgIGl0ZW1zLnB1c2goY2xvbmVXaWRnZXRNZW51KEFYUF9ERVNJR05FUl9TQVZFX0FTX1dJREdFVF9NRU5VKSk7XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG5cbiAgZXhlY3V0ZUNvbW1hbmQobmFtZTogc3RyaW5nLCBkYXRhPzogYW55KSB7XG4gICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICBjYXNlIEFYUF9ERVNJR05FUl9BRERfV0lER0VUX01FTlUubmFtZToge1xuICAgICAgICB0aGlzLnNob3dQaWNrZXIoKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIC8vXG4gICAgICBjYXNlIEFYUF9ERVNJR05FUl9ERUxFVEVfV0lER0VUX01FTlUubmFtZToge1xuICAgICAgICB0aGlzLnJlbW92ZVdpZGdldCgpO1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgLy9cbiAgICAgIGNhc2UgQVhQX0RFU0lHTkVSX0NMT05FX01FTlUubmFtZToge1xuICAgICAgICB0aGlzLmNsb25lKCk7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlIEFYUF9ERVNJR05FUl9DVVRfTUVOVS5uYW1lOiB7XG4gICAgICAgIHRoaXMuY3V0KCk7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlIEFYUF9ERVNJR05FUl9DT1BZX01FTlUubmFtZToge1xuICAgICAgICB0aGlzLmNvcHkoKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgQVhQX0RFU0lHTkVSX1BBU1RFX01FTlUubmFtZToge1xuICAgICAgICB0aGlzLnBhc3RlKCk7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICAvL1xuICAgIH1cbiAgfVxufVxuIl19