@acorex/modules 21.0.0-next.88 → 21.0.0-next.89

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 (289) hide show
  1. package/fesm2022/{acorex-modules-application-management-features-widget-view.component-uc8eGA-k.mjs → acorex-modules-application-management-features-widget-view.component-BNTT58PB.mjs} +2 -2
  2. package/fesm2022/{acorex-modules-application-management-features-widget-view.component-uc8eGA-k.mjs.map → acorex-modules-application-management-features-widget-view.component-BNTT58PB.mjs.map} +1 -1
  3. package/fesm2022/acorex-modules-application-management.mjs +1 -1
  4. package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-WGRBHMmQ.mjs → acorex-modules-assessment-management-acorex-modules-assessment-management-BDU2DZEq.mjs} +108 -53
  5. package/fesm2022/acorex-modules-assessment-management-acorex-modules-assessment-management-BDU2DZEq.mjs.map +1 -0
  6. package/fesm2022/{acorex-modules-assessment-management-assessment-session-answers-view.util-BWG9hI3t.mjs → acorex-modules-assessment-management-assessment-session-answers-view.util-CzgivU3s.mjs} +2 -2
  7. package/fesm2022/{acorex-modules-assessment-management-assessment-session-answers-view.util-BWG9hI3t.mjs.map → acorex-modules-assessment-management-assessment-session-answers-view.util-CzgivU3s.mjs.map} +1 -1
  8. package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-BtZ68Wt5.mjs → acorex-modules-assessment-management-fill-assessment-session.command-D6i0YZ3k.mjs} +2 -2
  9. package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-BtZ68Wt5.mjs.map → acorex-modules-assessment-management-fill-assessment-session.command-D6i0YZ3k.mjs.map} +1 -1
  10. package/fesm2022/{acorex-modules-assessment-management-index-_rWx2Vje.mjs → acorex-modules-assessment-management-index-BPQ9AiD6.mjs} +3 -3
  11. package/fesm2022/{acorex-modules-assessment-management-index-_rWx2Vje.mjs.map → acorex-modules-assessment-management-index-BPQ9AiD6.mjs.map} +1 -1
  12. package/fesm2022/{acorex-modules-assessment-management-index-CL6OmKwh.mjs → acorex-modules-assessment-management-index-BaMs2R6k.mjs} +3 -3
  13. package/fesm2022/{acorex-modules-assessment-management-index-CL6OmKwh.mjs.map → acorex-modules-assessment-management-index-BaMs2R6k.mjs.map} +1 -1
  14. package/fesm2022/{acorex-modules-assessment-management-index-BDqMpgdu.mjs → acorex-modules-assessment-management-index-YVENsZN4.mjs} +2 -2
  15. package/fesm2022/{acorex-modules-assessment-management-index-BDqMpgdu.mjs.map → acorex-modules-assessment-management-index-YVENsZN4.mjs.map} +1 -1
  16. package/fesm2022/{acorex-modules-assessment-management-index-BwZPHD1o.mjs → acorex-modules-assessment-management-index-oXkGQDat.mjs} +2 -2
  17. package/fesm2022/{acorex-modules-assessment-management-index-BwZPHD1o.mjs.map → acorex-modules-assessment-management-index-oXkGQDat.mjs.map} +1 -1
  18. package/fesm2022/{acorex-modules-assessment-management-preview-question.command-DMeQF_J0.mjs → acorex-modules-assessment-management-preview-question.command-B6rHNI4x.mjs} +2 -2
  19. package/fesm2022/{acorex-modules-assessment-management-preview-question.command-DMeQF_J0.mjs.map → acorex-modules-assessment-management-preview-question.command-B6rHNI4x.mjs.map} +1 -1
  20. package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-CKmY95wj.mjs → acorex-modules-assessment-management-preview-questionnaire.command-DXB1Y7hz.mjs} +2 -2
  21. package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-CKmY95wj.mjs.map → acorex-modules-assessment-management-preview-questionnaire.command-DXB1Y7hz.mjs.map} +1 -1
  22. package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-CXf2p-tS.mjs → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-D2CNfj8T.mjs} +2 -2
  23. package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-CXf2p-tS.mjs.map → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-D2CNfj8T.mjs.map} +1 -1
  24. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-CLZuPzUo.mjs → acorex-modules-assessment-management-questionnaire-viewer-popup.component-CF_tV-2p.mjs} +2 -2
  25. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-CLZuPzUo.mjs.map → acorex-modules-assessment-management-questionnaire-viewer-popup.component-CF_tV-2p.mjs.map} +1 -1
  26. package/fesm2022/{acorex-modules-assessment-management-review-assessment-session.command-CcGyOKUI.mjs → acorex-modules-assessment-management-review-assessment-session.command-CtEvoUxA.mjs} +3 -3
  27. package/fesm2022/{acorex-modules-assessment-management-review-assessment-session.command-CcGyOKUI.mjs.map → acorex-modules-assessment-management-review-assessment-session.command-CtEvoUxA.mjs.map} +1 -1
  28. package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-CmieuVjM.mjs → acorex-modules-assessment-management-view-session-answers.command-CkyBkiXC.mjs} +3 -3
  29. package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-CmieuVjM.mjs.map → acorex-modules-assessment-management-view-session-answers.command-CkyBkiXC.mjs.map} +1 -1
  30. package/fesm2022/acorex-modules-assessment-management.mjs +1 -1
  31. package/fesm2022/acorex-modules-asset-management.mjs +37 -23
  32. package/fesm2022/acorex-modules-asset-management.mjs.map +1 -1
  33. package/fesm2022/{acorex-modules-auth-acorex-modules-auth-CMRT9dQC.mjs → acorex-modules-auth-acorex-modules-auth-Nw701LHa.mjs} +30 -30
  34. package/fesm2022/{acorex-modules-auth-acorex-modules-auth-CMRT9dQC.mjs.map → acorex-modules-auth-acorex-modules-auth-Nw701LHa.mjs.map} +1 -1
  35. package/fesm2022/{acorex-modules-auth-app-chooser.component-mOPBXcQc.mjs → acorex-modules-auth-app-chooser.component-FqCIt_8E.mjs} +2 -2
  36. package/fesm2022/{acorex-modules-auth-app-chooser.component-mOPBXcQc.mjs.map → acorex-modules-auth-app-chooser.component-FqCIt_8E.mjs.map} +1 -1
  37. package/fesm2022/{acorex-modules-auth-change-password.command-CceYk6DE.mjs → acorex-modules-auth-change-password.command-DND9Oka4.mjs} +2 -2
  38. package/fesm2022/{acorex-modules-auth-change-password.command-CceYk6DE.mjs.map → acorex-modules-auth-change-password.command-DND9Oka4.mjs.map} +1 -1
  39. package/fesm2022/{acorex-modules-auth-edit-account-info.command-jF8A_Jsy.mjs → acorex-modules-auth-edit-account-info.command-bmdkZzYt.mjs} +2 -2
  40. package/fesm2022/{acorex-modules-auth-edit-account-info.command-jF8A_Jsy.mjs.map → acorex-modules-auth-edit-account-info.command-bmdkZzYt.mjs.map} +1 -1
  41. package/fesm2022/{acorex-modules-auth-lock-screen.command-BvruxuiF.mjs → acorex-modules-auth-lock-screen.command-DSGXqDVD.mjs} +2 -2
  42. package/fesm2022/{acorex-modules-auth-lock-screen.command-BvruxuiF.mjs.map → acorex-modules-auth-lock-screen.command-DSGXqDVD.mjs.map} +1 -1
  43. package/fesm2022/{acorex-modules-auth-login.module-CmBClJv2.mjs → acorex-modules-auth-login.module-DC3dzDf0.mjs} +4 -4
  44. package/fesm2022/{acorex-modules-auth-login.module-CmBClJv2.mjs.map → acorex-modules-auth-login.module-DC3dzDf0.mjs.map} +1 -1
  45. package/fesm2022/{acorex-modules-auth-master.layout-CLGmgSqo.mjs → acorex-modules-auth-master.layout-iMOvevEv.mjs} +2 -2
  46. package/fesm2022/{acorex-modules-auth-master.layout-CLGmgSqo.mjs.map → acorex-modules-auth-master.layout-iMOvevEv.mjs.map} +1 -1
  47. package/fesm2022/{acorex-modules-auth-oauth-callback.component-yxfNoBS-.mjs → acorex-modules-auth-oauth-callback.component-s9WMG92M.mjs} +3 -3
  48. package/fesm2022/{acorex-modules-auth-oauth-callback.component-yxfNoBS-.mjs.map → acorex-modules-auth-oauth-callback.component-s9WMG92M.mjs.map} +1 -1
  49. package/fesm2022/{acorex-modules-auth-open-sessions.command-DsWueHa3.mjs → acorex-modules-auth-open-sessions.command-CLL8rgjE.mjs} +2 -2
  50. package/fesm2022/{acorex-modules-auth-open-sessions.command-DsWueHa3.mjs.map → acorex-modules-auth-open-sessions.command-CLL8rgjE.mjs.map} +1 -1
  51. package/fesm2022/{acorex-modules-auth-password.component-C3_tAt8j.mjs → acorex-modules-auth-password.component-BOEi91f7.mjs} +2 -2
  52. package/fesm2022/{acorex-modules-auth-password.component-C3_tAt8j.mjs.map → acorex-modules-auth-password.component-BOEi91f7.mjs.map} +1 -1
  53. package/fesm2022/{acorex-modules-auth-password.component-BrTEuc51.mjs → acorex-modules-auth-password.component-eA_3LtcO.mjs} +2 -2
  54. package/fesm2022/{acorex-modules-auth-password.component-BrTEuc51.mjs.map → acorex-modules-auth-password.component-eA_3LtcO.mjs.map} +1 -1
  55. package/fesm2022/{acorex-modules-auth-profile-activity-chart.component-C6_0oeCC.mjs → acorex-modules-auth-profile-activity-chart.component-BK1k4Lrh.mjs} +2 -2
  56. package/fesm2022/{acorex-modules-auth-profile-activity-chart.component-C6_0oeCC.mjs.map → acorex-modules-auth-profile-activity-chart.component-BK1k4Lrh.mjs.map} +1 -1
  57. package/fesm2022/{acorex-modules-auth-profile-delete-account-danger-zone.component-EhmuT88j.mjs → acorex-modules-auth-profile-delete-account-danger-zone.component-CHru1be-.mjs} +2 -2
  58. package/fesm2022/{acorex-modules-auth-profile-delete-account-danger-zone.component-EhmuT88j.mjs.map → acorex-modules-auth-profile-delete-account-danger-zone.component-CHru1be-.mjs.map} +1 -1
  59. package/fesm2022/{acorex-modules-auth-profile-page-component.provider-BHEdqBbF.mjs → acorex-modules-auth-profile-page-component.provider-MCsUPTrt.mjs} +4 -4
  60. package/fesm2022/{acorex-modules-auth-profile-page-component.provider-BHEdqBbF.mjs.map → acorex-modules-auth-profile-page-component.provider-MCsUPTrt.mjs.map} +1 -1
  61. package/fesm2022/{acorex-modules-auth-profile-page.component-Q0ixAWtC.mjs → acorex-modules-auth-profile-page.component-DOj2GhFJ.mjs} +2 -2
  62. package/fesm2022/{acorex-modules-auth-profile-page.component-Q0ixAWtC.mjs.map → acorex-modules-auth-profile-page.component-DOj2GhFJ.mjs.map} +1 -1
  63. package/fesm2022/{acorex-modules-auth-remove-pin-code.command-j5iobHAs.mjs → acorex-modules-auth-remove-pin-code.command-CqRxKR4Y.mjs} +2 -2
  64. package/fesm2022/{acorex-modules-auth-remove-pin-code.command-j5iobHAs.mjs.map → acorex-modules-auth-remove-pin-code.command-CqRxKR4Y.mjs.map} +1 -1
  65. package/fesm2022/{acorex-modules-auth-routes-BFACBfAG.mjs → acorex-modules-auth-routes-FZRnzT9V.mjs} +2 -2
  66. package/fesm2022/{acorex-modules-auth-routes-BFACBfAG.mjs.map → acorex-modules-auth-routes-FZRnzT9V.mjs.map} +1 -1
  67. package/fesm2022/{acorex-modules-auth-session-lock-overlay.component-flpWlR8p.mjs → acorex-modules-auth-session-lock-overlay.component-6o2uU9U5.mjs} +2 -2
  68. package/fesm2022/{acorex-modules-auth-session-lock-overlay.component-flpWlR8p.mjs.map → acorex-modules-auth-session-lock-overlay.component-6o2uU9U5.mjs.map} +1 -1
  69. package/fesm2022/{acorex-modules-auth-set-pin-code.command-B0sXGsok.mjs → acorex-modules-auth-set-pin-code.command-CsXJ30Fs.mjs} +2 -2
  70. package/fesm2022/{acorex-modules-auth-set-pin-code.command-B0sXGsok.mjs.map → acorex-modules-auth-set-pin-code.command-CsXJ30Fs.mjs.map} +1 -1
  71. package/fesm2022/{acorex-modules-auth-set-pin-code.component-D95Hn8R-.mjs → acorex-modules-auth-set-pin-code.component-DJhqru7e.mjs} +2 -2
  72. package/fesm2022/{acorex-modules-auth-set-pin-code.component-D95Hn8R-.mjs.map → acorex-modules-auth-set-pin-code.component-DJhqru7e.mjs.map} +1 -1
  73. package/fesm2022/{acorex-modules-auth-settings.provider-D0-hEHd2.mjs → acorex-modules-auth-settings.provider-BJ7lDjbr.mjs} +2 -2
  74. package/fesm2022/{acorex-modules-auth-settings.provider-D0-hEHd2.mjs.map → acorex-modules-auth-settings.provider-BJ7lDjbr.mjs.map} +1 -1
  75. package/fesm2022/{acorex-modules-auth-tenant-chooser.component-DBIVSBaM.mjs → acorex-modules-auth-tenant-chooser.component-DR7rH0m1.mjs} +2 -2
  76. package/fesm2022/{acorex-modules-auth-tenant-chooser.component-DBIVSBaM.mjs.map → acorex-modules-auth-tenant-chooser.component-DR7rH0m1.mjs.map} +1 -1
  77. package/fesm2022/{acorex-modules-auth-two-factor.module-DwXsAUlJ.mjs → acorex-modules-auth-two-factor.module-BvvDIlqe.mjs} +2 -2
  78. package/fesm2022/{acorex-modules-auth-two-factor.module-DwXsAUlJ.mjs.map → acorex-modules-auth-two-factor.module-BvvDIlqe.mjs.map} +1 -1
  79. package/fesm2022/{acorex-modules-auth-view-login-history.command-BpCog3dx.mjs → acorex-modules-auth-view-login-history.command-BUiXUbjA.mjs} +2 -2
  80. package/fesm2022/{acorex-modules-auth-view-login-history.command-BpCog3dx.mjs.map → acorex-modules-auth-view-login-history.command-BUiXUbjA.mjs.map} +1 -1
  81. package/fesm2022/acorex-modules-auth.mjs +1 -1
  82. package/fesm2022/acorex-modules-business-core.mjs +0 -6
  83. package/fesm2022/acorex-modules-business-core.mjs.map +1 -1
  84. package/fesm2022/{acorex-modules-common-search-popup.component-6_qrYkc2.mjs → acorex-modules-common-search-popup.component-BhItO3Sr.mjs} +2 -2
  85. package/fesm2022/{acorex-modules-common-search-popup.component-6_qrYkc2.mjs.map → acorex-modules-common-search-popup.component-BhItO3Sr.mjs.map} +1 -1
  86. package/fesm2022/acorex-modules-common.mjs +30 -43
  87. package/fesm2022/acorex-modules-common.mjs.map +1 -1
  88. package/fesm2022/{acorex-modules-contact-core-acorex-modules-contact-core-CBMdv1GN.mjs → acorex-modules-contact-core-acorex-modules-contact-core-CELmV51p.mjs} +8 -7
  89. package/fesm2022/acorex-modules-contact-core-acorex-modules-contact-core-CELmV51p.mjs.map +1 -0
  90. package/fesm2022/{acorex-modules-contact-core-entity.provider-B8__CVGP.mjs → acorex-modules-contact-core-entity.provider-AH-gvpLJ.mjs} +3 -3
  91. package/fesm2022/{acorex-modules-contact-core-entity.provider-B8__CVGP.mjs.map → acorex-modules-contact-core-entity.provider-AH-gvpLJ.mjs.map} +1 -1
  92. package/fesm2022/{acorex-modules-contact-core-menu.provider-C-iEIPGe.mjs → acorex-modules-contact-core-menu.provider-T9IuzSBf.mjs} +11 -5
  93. package/fesm2022/acorex-modules-contact-core-menu.provider-T9IuzSBf.mjs.map +1 -0
  94. package/fesm2022/{acorex-modules-contact-core-permission-definition.provider-DXjdp846.mjs → acorex-modules-contact-core-permission-definition.provider-CnxI1ujq.mjs} +2 -2
  95. package/fesm2022/{acorex-modules-contact-core-permission-definition.provider-DXjdp846.mjs.map → acorex-modules-contact-core-permission-definition.provider-CnxI1ujq.mjs.map} +1 -1
  96. package/fesm2022/acorex-modules-contact-core.mjs +1 -1
  97. package/fesm2022/{acorex-modules-conversation-acorex-modules-conversation-CUjTT3M7.mjs → acorex-modules-conversation-acorex-modules-conversation-B_JcAHvL.mjs} +6394 -3666
  98. package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-B_JcAHvL.mjs.map +1 -0
  99. package/fesm2022/acorex-modules-conversation-after-message-sent.command-DcrS7_vV.mjs +34 -0
  100. package/fesm2022/acorex-modules-conversation-after-message-sent.command-DcrS7_vV.mjs.map +1 -0
  101. package/fesm2022/{acorex-modules-conversation-assist-delegated-agent-detail-popup.component-CGcngwdA.mjs → acorex-modules-conversation-assist-delegated-agent-detail-popup.component-BCkJEAmX.mjs} +5 -5
  102. package/fesm2022/{acorex-modules-conversation-assist-delegated-agent-detail-popup.component-CGcngwdA.mjs.map → acorex-modules-conversation-assist-delegated-agent-detail-popup.component-BCkJEAmX.mjs.map} +1 -1
  103. package/fesm2022/{acorex-modules-conversation-comments-page.component-hopaF6xW.mjs → acorex-modules-conversation-comments-page.component-B6TJhe4T.mjs} +2 -2
  104. package/fesm2022/{acorex-modules-conversation-comments-page.component-hopaF6xW.mjs.map → acorex-modules-conversation-comments-page.component-B6TJhe4T.mjs.map} +1 -1
  105. package/fesm2022/acorex-modules-conversation-emit-typing-indicator.command-CWRdPl-S.mjs +30 -0
  106. package/fesm2022/acorex-modules-conversation-emit-typing-indicator.command-CWRdPl-S.mjs.map +1 -0
  107. package/fesm2022/acorex-modules-conversation-mark-conversation-unread.command-CZlsLAsb.mjs +30 -0
  108. package/fesm2022/acorex-modules-conversation-mark-conversation-unread.command-CZlsLAsb.mjs.map +1 -0
  109. package/fesm2022/acorex-modules-conversation-retry-assist-response.command-Cly1-RKt.mjs +34 -0
  110. package/fesm2022/acorex-modules-conversation-retry-assist-response.command-Cly1-RKt.mjs.map +1 -0
  111. package/fesm2022/{acorex-modules-conversation-send-assist-chat-message.command-CqDrZKFK.mjs → acorex-modules-conversation-send-assist-chat-message.command-D5QWTKqh.mjs} +19 -9
  112. package/fesm2022/acorex-modules-conversation-send-assist-chat-message.command-D5QWTKqh.mjs.map +1 -0
  113. package/fesm2022/{acorex-modules-conversation-start-assist-chat.command-DiDAz-Is.mjs → acorex-modules-conversation-start-assist-chat.command-DkSZj8fj.mjs} +2 -2
  114. package/fesm2022/{acorex-modules-conversation-start-assist-chat.command-DiDAz-Is.mjs.map → acorex-modules-conversation-start-assist-chat.command-DkSZj8fj.mjs.map} +1 -1
  115. package/fesm2022/acorex-modules-conversation-sync-read-state.command-jiEsdxUB.mjs +62 -0
  116. package/fesm2022/acorex-modules-conversation-sync-read-state.command-jiEsdxUB.mjs.map +1 -0
  117. package/fesm2022/acorex-modules-conversation.mjs +1 -1
  118. package/fesm2022/acorex-modules-customer-management.mjs +2 -2
  119. package/fesm2022/acorex-modules-customer-management.mjs.map +1 -1
  120. package/fesm2022/{acorex-modules-dashboard-management-acorex-modules-dashboard-management-Lx3VuIg6.mjs → acorex-modules-dashboard-management-acorex-modules-dashboard-management-DLuhOPFz.mjs} +1034 -395
  121. package/fesm2022/acorex-modules-dashboard-management-acorex-modules-dashboard-management-DLuhOPFz.mjs.map +1 -0
  122. package/fesm2022/{acorex-modules-dashboard-management-index-DvY9N8FF.mjs → acorex-modules-dashboard-management-index-gjCiELmH.mjs} +2 -2
  123. package/fesm2022/{acorex-modules-dashboard-management-index-DvY9N8FF.mjs.map → acorex-modules-dashboard-management-index-gjCiELmH.mjs.map} +1 -1
  124. package/fesm2022/acorex-modules-dashboard-management.mjs +1 -1
  125. package/fesm2022/{acorex-modules-data-management-index-CxVSgxTM.mjs → acorex-modules-data-management-index-BYQncZ6e.mjs} +28 -6
  126. package/fesm2022/acorex-modules-data-management-index-BYQncZ6e.mjs.map +1 -0
  127. package/fesm2022/acorex-modules-data-management.mjs +6 -6
  128. package/fesm2022/acorex-modules-data-management.mjs.map +1 -1
  129. package/fesm2022/acorex-modules-document-management.mjs +4 -4
  130. package/fesm2022/acorex-modules-document-management.mjs.map +1 -1
  131. package/fesm2022/{acorex-modules-form-template-management-template-picker.component-cLToc9fP.mjs → acorex-modules-form-template-management-template-picker.component-BGf98ooQ.mjs} +2 -2
  132. package/fesm2022/{acorex-modules-form-template-management-template-picker.component-cLToc9fP.mjs.map → acorex-modules-form-template-management-template-picker.component-BGf98ooQ.mjs.map} +1 -1
  133. package/fesm2022/acorex-modules-form-template-management.mjs +1 -1
  134. package/fesm2022/{acorex-modules-human-capital-management-acorex-modules-human-capital-management-DpVAfk3i.mjs → acorex-modules-human-capital-management-acorex-modules-human-capital-management-VJ2NUSm1.mjs} +20 -20
  135. package/fesm2022/{acorex-modules-human-capital-management-acorex-modules-human-capital-management-DpVAfk3i.mjs.map → acorex-modules-human-capital-management-acorex-modules-human-capital-management-VJ2NUSm1.mjs.map} +1 -1
  136. package/fesm2022/{acorex-modules-human-capital-management-approve-leave-request.command-BDv_eotn.mjs → acorex-modules-human-capital-management-approve-leave-request.command-FgXkyZR_.mjs} +2 -2
  137. package/fesm2022/{acorex-modules-human-capital-management-approve-leave-request.command-BDv_eotn.mjs.map → acorex-modules-human-capital-management-approve-leave-request.command-FgXkyZR_.mjs.map} +1 -1
  138. package/fesm2022/{acorex-modules-human-capital-management-assign-position-assignment.command-CT49oS39.mjs → acorex-modules-human-capital-management-assign-position-assignment.command-D2yCvifI.mjs} +2 -2
  139. package/fesm2022/{acorex-modules-human-capital-management-assign-position-assignment.command-CT49oS39.mjs.map → acorex-modules-human-capital-management-assign-position-assignment.command-D2yCvifI.mjs.map} +1 -1
  140. package/fesm2022/{acorex-modules-human-capital-management-cancel-leave-request.command-zAunbLbf.mjs → acorex-modules-human-capital-management-cancel-leave-request.command-DnmsVNwU.mjs} +2 -2
  141. package/fesm2022/{acorex-modules-human-capital-management-cancel-leave-request.command-zAunbLbf.mjs.map → acorex-modules-human-capital-management-cancel-leave-request.command-DnmsVNwU.mjs.map} +1 -1
  142. package/fesm2022/{acorex-modules-human-capital-management-edit-personal-info.command-8LKMNm4Z.mjs → acorex-modules-human-capital-management-edit-personal-info.command-B0ZUfbqn.mjs} +2 -6
  143. package/fesm2022/acorex-modules-human-capital-management-edit-personal-info.command-B0ZUfbqn.mjs.map +1 -0
  144. package/fesm2022/{acorex-modules-human-capital-management-edit-signature.command-BQ6Ysh-A.mjs → acorex-modules-human-capital-management-edit-signature.command-h2kTqSg0.mjs} +2 -2
  145. package/fesm2022/{acorex-modules-human-capital-management-edit-signature.command-BQ6Ysh-A.mjs.map → acorex-modules-human-capital-management-edit-signature.command-h2kTqSg0.mjs.map} +1 -1
  146. package/fesm2022/{acorex-modules-human-capital-management-reject-leave-request.command-CEAUhv0o.mjs → acorex-modules-human-capital-management-reject-leave-request.command-BdrdgvbN.mjs} +2 -2
  147. package/fesm2022/{acorex-modules-human-capital-management-reject-leave-request.command-CEAUhv0o.mjs.map → acorex-modules-human-capital-management-reject-leave-request.command-BdrdgvbN.mjs.map} +1 -1
  148. package/fesm2022/{acorex-modules-human-capital-management-revoke-position-assignment.command-DakWOslg.mjs → acorex-modules-human-capital-management-revoke-position-assignment.command-S7Px6Y4B.mjs} +2 -2
  149. package/fesm2022/{acorex-modules-human-capital-management-revoke-position-assignment.command-DakWOslg.mjs.map → acorex-modules-human-capital-management-revoke-position-assignment.command-S7Px6Y4B.mjs.map} +1 -1
  150. package/fesm2022/{acorex-modules-human-capital-management-start-leave-request-flow.command-BXMGzUuM.mjs → acorex-modules-human-capital-management-start-leave-request-flow.command-C_tE-D_Y.mjs} +2 -2
  151. package/fesm2022/{acorex-modules-human-capital-management-start-leave-request-flow.command-BXMGzUuM.mjs.map → acorex-modules-human-capital-management-start-leave-request-flow.command-C_tE-D_Y.mjs.map} +1 -1
  152. package/fesm2022/{acorex-modules-human-capital-management-start-lifecycle-event-flow.command-B1s_i8U3.mjs → acorex-modules-human-capital-management-start-lifecycle-event-flow.command-mMP3Yy01.mjs} +2 -2
  153. package/fesm2022/{acorex-modules-human-capital-management-start-lifecycle-event-flow.command-B1s_i8U3.mjs.map → acorex-modules-human-capital-management-start-lifecycle-event-flow.command-mMP3Yy01.mjs.map} +1 -1
  154. package/fesm2022/acorex-modules-human-capital-management.mjs +1 -1
  155. package/fesm2022/acorex-modules-learning-management.mjs +1 -1
  156. package/fesm2022/acorex-modules-learning-management.mjs.map +1 -1
  157. package/fesm2022/acorex-modules-location-management.mjs +2 -2
  158. package/fesm2022/acorex-modules-location-management.mjs.map +1 -1
  159. package/fesm2022/acorex-modules-meeting-management.mjs +1 -1
  160. package/fesm2022/acorex-modules-meeting-management.mjs.map +1 -1
  161. package/fesm2022/{acorex-modules-notification-management-acorex-modules-notification-management-DZSXFNgo.mjs → acorex-modules-notification-management-acorex-modules-notification-management-DZWUyu54.mjs} +4 -4
  162. package/fesm2022/{acorex-modules-notification-management-acorex-modules-notification-management-DZSXFNgo.mjs.map → acorex-modules-notification-management-acorex-modules-notification-management-DZWUyu54.mjs.map} +1 -1
  163. package/fesm2022/{acorex-modules-notification-management-notification-page.component-swzDjJUP.mjs → acorex-modules-notification-management-notification-page.component-BNxTMY-C.mjs} +3 -3
  164. package/fesm2022/{acorex-modules-notification-management-notification-page.component-swzDjJUP.mjs.map → acorex-modules-notification-management-notification-page.component-BNxTMY-C.mjs.map} +1 -1
  165. package/fesm2022/acorex-modules-notification-management.mjs +1 -1
  166. package/fesm2022/{acorex-modules-organization-management-acorex-modules-organization-management-B6zOrUAS.mjs → acorex-modules-organization-management-acorex-modules-organization-management-BjKrMO_L.mjs} +37 -37
  167. package/fesm2022/{acorex-modules-organization-management-acorex-modules-organization-management-B6zOrUAS.mjs.map → acorex-modules-organization-management-acorex-modules-organization-management-BjKrMO_L.mjs.map} +1 -1
  168. package/fesm2022/{acorex-modules-organization-management-add-business-unit-to-business-unit.command-BG6AQs-j.mjs → acorex-modules-organization-management-add-business-unit-to-business-unit.command-CgqydSZh.mjs} +2 -2
  169. package/fesm2022/{acorex-modules-organization-management-add-business-unit-to-business-unit.command-BG6AQs-j.mjs.map → acorex-modules-organization-management-add-business-unit-to-business-unit.command-CgqydSZh.mjs.map} +1 -1
  170. package/fesm2022/{acorex-modules-organization-management-add-position-to-business-unit.command-DzA0h9ED.mjs → acorex-modules-organization-management-add-position-to-business-unit.command-B_BIg-aF.mjs} +2 -2
  171. package/fesm2022/{acorex-modules-organization-management-add-position-to-business-unit.command-DzA0h9ED.mjs.map → acorex-modules-organization-management-add-position-to-business-unit.command-B_BIg-aF.mjs.map} +1 -1
  172. package/fesm2022/{acorex-modules-organization-management-add-team-to-business-unit.command-5ZGzmp95.mjs → acorex-modules-organization-management-add-team-to-business-unit.command-zFql0VH1.mjs} +2 -2
  173. package/fesm2022/{acorex-modules-organization-management-add-team-to-business-unit.command-5ZGzmp95.mjs.map → acorex-modules-organization-management-add-team-to-business-unit.command-zFql0VH1.mjs.map} +1 -1
  174. package/fesm2022/{acorex-modules-organization-management-entity.provider-DKhXlL2j.mjs → acorex-modules-organization-management-entity.provider-Buchg68Q.mjs} +15 -15
  175. package/fesm2022/{acorex-modules-organization-management-entity.provider-DKhXlL2j.mjs.map → acorex-modules-organization-management-entity.provider-Buchg68Q.mjs.map} +1 -1
  176. package/fesm2022/{acorex-modules-organization-management-feature-definition.provider-DhCn97pE.mjs → acorex-modules-organization-management-feature-definition.provider-CulEun4H.mjs} +2 -2
  177. package/fesm2022/{acorex-modules-organization-management-feature-definition.provider-DhCn97pE.mjs.map → acorex-modules-organization-management-feature-definition.provider-CulEun4H.mjs.map} +1 -1
  178. package/fesm2022/{acorex-modules-organization-management-job-definition-pages-component.provider-C1WFmQ2x.mjs → acorex-modules-organization-management-job-definition-pages-component.provider-D3k2BNKU.mjs} +4 -4
  179. package/fesm2022/{acorex-modules-organization-management-job-definition-pages-component.provider-C1WFmQ2x.mjs.map → acorex-modules-organization-management-job-definition-pages-component.provider-D3k2BNKU.mjs.map} +1 -1
  180. package/fesm2022/{acorex-modules-organization-management-job-definition-responsibilities-page.component-Bs28OWW8.mjs → acorex-modules-organization-management-job-definition-responsibilities-page.component-CSwHAkh5.mjs} +3 -3
  181. package/fesm2022/{acorex-modules-organization-management-job-definition-responsibilities-page.component-Bs28OWW8.mjs.map → acorex-modules-organization-management-job-definition-responsibilities-page.component-CSwHAkh5.mjs.map} +1 -1
  182. package/fesm2022/{acorex-modules-organization-management-job-definition-skills-page.component-C66FEcxc.mjs → acorex-modules-organization-management-job-definition-skills-page.component-CVo37Mx0.mjs} +2 -2
  183. package/fesm2022/{acorex-modules-organization-management-job-definition-skills-page.component-C66FEcxc.mjs.map → acorex-modules-organization-management-job-definition-skills-page.component-CVo37Mx0.mjs.map} +1 -1
  184. package/fesm2022/{acorex-modules-organization-management-job-level.datasource-DcOVF99r.mjs → acorex-modules-organization-management-job-level.datasource-CMxMInko.mjs} +2 -2
  185. package/fesm2022/{acorex-modules-organization-management-job-level.datasource-DcOVF99r.mjs.map → acorex-modules-organization-management-job-level.datasource-CMxMInko.mjs.map} +1 -1
  186. package/fesm2022/{acorex-modules-organization-management-menu.provider-B0v8w3eH.mjs → acorex-modules-organization-management-menu.provider-BL99vlod.mjs} +3 -3
  187. package/fesm2022/{acorex-modules-organization-management-menu.provider-B0v8w3eH.mjs.map → acorex-modules-organization-management-menu.provider-BL99vlod.mjs.map} +1 -1
  188. package/fesm2022/{acorex-modules-organization-management-org-chart-default-node-contribution.provider-B07M8tKi.mjs → acorex-modules-organization-management-org-chart-default-node-contribution.provider-CfvmOwYD.mjs} +2 -2
  189. package/fesm2022/{acorex-modules-organization-management-org-chart-default-node-contribution.provider-B07M8tKi.mjs.map → acorex-modules-organization-management-org-chart-default-node-contribution.provider-CfvmOwYD.mjs.map} +1 -1
  190. package/fesm2022/{acorex-modules-organization-management-org-chart-employee-flyout-contribution.provider-DSvij02R.mjs → acorex-modules-organization-management-org-chart-employee-flyout-contribution.provider-CsvhhcoW.mjs} +2 -2
  191. package/fesm2022/{acorex-modules-organization-management-org-chart-employee-flyout-contribution.provider-DSvij02R.mjs.map → acorex-modules-organization-management-org-chart-employee-flyout-contribution.provider-CsvhhcoW.mjs.map} +1 -1
  192. package/fesm2022/{acorex-modules-organization-management-org-chart-position-employee-node-contribution.provider-BYWq-Aco.mjs → acorex-modules-organization-management-org-chart-position-employee-node-contribution.provider-Dvo2XEHn.mjs} +2 -2
  193. package/fesm2022/{acorex-modules-organization-management-org-chart-position-employee-node-contribution.provider-BYWq-Aco.mjs.map → acorex-modules-organization-management-org-chart-position-employee-node-contribution.provider-Dvo2XEHn.mjs.map} +1 -1
  194. package/fesm2022/{acorex-modules-organization-management-org-chart-ux-node-contribution.provider-DiMvAEbk.mjs → acorex-modules-organization-management-org-chart-ux-node-contribution.provider-BsBsdoII.mjs} +2 -2
  195. package/fesm2022/{acorex-modules-organization-management-org-chart-ux-node-contribution.provider-DiMvAEbk.mjs.map → acorex-modules-organization-management-org-chart-ux-node-contribution.provider-BsBsdoII.mjs.map} +1 -1
  196. package/fesm2022/{acorex-modules-organization-management-org-chart.page-DwHB4ZGl.mjs → acorex-modules-organization-management-org-chart.page-DJNfsp4z.mjs} +2 -2
  197. package/fesm2022/{acorex-modules-organization-management-org-chart.page-DwHB4ZGl.mjs.map → acorex-modules-organization-management-org-chart.page-DJNfsp4z.mjs.map} +1 -1
  198. package/fesm2022/{acorex-modules-organization-management-permission-definition.provider-CynLhaYz.mjs → acorex-modules-organization-management-permission-definition.provider-CuReVYo1.mjs} +2 -2
  199. package/fesm2022/{acorex-modules-organization-management-permission-definition.provider-CynLhaYz.mjs.map → acorex-modules-organization-management-permission-definition.provider-CuReVYo1.mjs.map} +1 -1
  200. package/fesm2022/{acorex-modules-organization-management-remove-position-from-business-unit.command-DUgDxwtI.mjs → acorex-modules-organization-management-remove-position-from-business-unit.command-mPTX8Vpc.mjs} +2 -2
  201. package/fesm2022/{acorex-modules-organization-management-remove-position-from-business-unit.command-DUgDxwtI.mjs.map → acorex-modules-organization-management-remove-position-from-business-unit.command-mPTX8Vpc.mjs.map} +1 -1
  202. package/fesm2022/{acorex-modules-organization-management-replace-position-assignee.command-BTAwsZNP.mjs → acorex-modules-organization-management-replace-position-assignee.command-DibpVA88.mjs} +2 -2
  203. package/fesm2022/{acorex-modules-organization-management-replace-position-assignee.command-BTAwsZNP.mjs.map → acorex-modules-organization-management-replace-position-assignee.command-DibpVA88.mjs.map} +1 -1
  204. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-D904V181.mjs → acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-zN1Vz3Om.mjs} +2 -2
  205. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-D904V181.mjs.map → acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-zN1Vz3Om.mjs.map} +1 -1
  206. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-view.component-BMFws_6Y.mjs → acorex-modules-organization-management-responsibilities-matrix-widget-view.component-BYOs9nrw.mjs} +2 -2
  207. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-view.component-BMFws_6Y.mjs.map → acorex-modules-organization-management-responsibilities-matrix-widget-view.component-BYOs9nrw.mjs.map} +1 -1
  208. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix.component-DXmsR1qV.mjs → acorex-modules-organization-management-responsibilities-matrix.component-DVlThT1h.mjs} +2 -2
  209. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix.component-DXmsR1qV.mjs.map → acorex-modules-organization-management-responsibilities-matrix.component-DVlThT1h.mjs.map} +1 -1
  210. package/fesm2022/{acorex-modules-organization-management-settings.provider-UFqps4Zg.mjs → acorex-modules-organization-management-settings.provider-BxoCS3w7.mjs} +2 -2
  211. package/fesm2022/{acorex-modules-organization-management-settings.provider-UFqps4Zg.mjs.map → acorex-modules-organization-management-settings.provider-BxoCS3w7.mjs.map} +1 -1
  212. package/fesm2022/acorex-modules-organization-management.mjs +1 -1
  213. package/fesm2022/acorex-modules-person-core.mjs +0 -6
  214. package/fesm2022/acorex-modules-person-core.mjs.map +1 -1
  215. package/fesm2022/acorex-modules-platform-dev-tools.mjs +2 -2
  216. package/fesm2022/acorex-modules-platform-dev-tools.mjs.map +1 -1
  217. package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-DsKPOWpy.mjs → acorex-modules-platform-management-acorex-modules-platform-management-B5hMhQp-.mjs} +2 -2
  218. package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-DsKPOWpy.mjs.map → acorex-modules-platform-management-acorex-modules-platform-management-B5hMhQp-.mjs.map} +1 -1
  219. package/fesm2022/{acorex-modules-platform-management-menu-list.component-Br4nL9zq.mjs → acorex-modules-platform-management-menu-list.component-DcOr1v-f.mjs} +3 -3
  220. package/fesm2022/{acorex-modules-platform-management-menu-list.component-Br4nL9zq.mjs.map → acorex-modules-platform-management-menu-list.component-DcOr1v-f.mjs.map} +1 -1
  221. package/fesm2022/acorex-modules-platform-management.mjs +1 -1
  222. package/fesm2022/acorex-modules-product-catalog.mjs +7 -6
  223. package/fesm2022/acorex-modules-product-catalog.mjs.map +1 -1
  224. package/fesm2022/acorex-modules-project-management.mjs +1 -1
  225. package/fesm2022/acorex-modules-project-management.mjs.map +1 -1
  226. package/fesm2022/{acorex-modules-report-management-report-runner-root-page.component-DaPEmTm9.mjs → acorex-modules-report-management-report-runner-root-page.component-CgrBAgqq.mjs} +2 -2
  227. package/fesm2022/{acorex-modules-report-management-report-runner-root-page.component-DaPEmTm9.mjs.map → acorex-modules-report-management-report-runner-root-page.component-CgrBAgqq.mjs.map} +1 -1
  228. package/fesm2022/acorex-modules-report-management.mjs +7 -7
  229. package/fesm2022/acorex-modules-report-management.mjs.map +1 -1
  230. package/fesm2022/acorex-modules-risk-management-preview-risk-matrix-cell.command-CWG3zUBo.mjs +120 -0
  231. package/fesm2022/acorex-modules-risk-management-preview-risk-matrix-cell.command-CWG3zUBo.mjs.map +1 -0
  232. package/fesm2022/acorex-modules-risk-management.mjs +13 -0
  233. package/fesm2022/acorex-modules-risk-management.mjs.map +1 -1
  234. package/fesm2022/acorex-modules-security-management.mjs +1 -1
  235. package/fesm2022/acorex-modules-security-management.mjs.map +1 -1
  236. package/fesm2022/{acorex-modules-settings-management-setting-view.component-CG-GW2yS.mjs → acorex-modules-settings-management-setting-view.component-BRhZR1br.mjs} +109 -15
  237. package/fesm2022/acorex-modules-settings-management-setting-view.component-BRhZR1br.mjs.map +1 -0
  238. package/fesm2022/acorex-modules-settings-management.mjs +1 -1
  239. package/fesm2022/acorex-modules-supplier-management.mjs +1 -1
  240. package/fesm2022/acorex-modules-supplier-management.mjs.map +1 -1
  241. package/fesm2022/{acorex-modules-task-management-task-board.page-FFhsAyHF.mjs → acorex-modules-task-management-task-board.page-DTWxd_vG.mjs} +41 -32
  242. package/fesm2022/acorex-modules-task-management-task-board.page-DTWxd_vG.mjs.map +1 -0
  243. package/fesm2022/acorex-modules-task-management.mjs +55 -23
  244. package/fesm2022/acorex-modules-task-management.mjs.map +1 -1
  245. package/fesm2022/{acorex-modules-workflow-management-acorex-modules-workflow-management-DJeUheQT.mjs → acorex-modules-workflow-management-acorex-modules-workflow-management-D04WU8wX.mjs} +32 -25
  246. package/fesm2022/acorex-modules-workflow-management-acorex-modules-workflow-management-D04WU8wX.mjs.map +1 -0
  247. package/fesm2022/{acorex-modules-workflow-management-index--6gz3uRb.mjs → acorex-modules-workflow-management-index-Bfzsu6VL.mjs} +2 -2
  248. package/fesm2022/{acorex-modules-workflow-management-index--6gz3uRb.mjs.map → acorex-modules-workflow-management-index-Bfzsu6VL.mjs.map} +1 -1
  249. package/fesm2022/{acorex-modules-workflow-management-index-DV7Uf5hP.mjs → acorex-modules-workflow-management-index-CG1-u2Va.mjs} +3 -3
  250. package/fesm2022/{acorex-modules-workflow-management-index-DV7Uf5hP.mjs.map → acorex-modules-workflow-management-index-CG1-u2Va.mjs.map} +1 -1
  251. package/fesm2022/{acorex-modules-workflow-management-index-C702Snjg.mjs → acorex-modules-workflow-management-index-DtKZARCI.mjs} +3 -3
  252. package/fesm2022/{acorex-modules-workflow-management-index-C702Snjg.mjs.map → acorex-modules-workflow-management-index-DtKZARCI.mjs.map} +1 -1
  253. package/fesm2022/{acorex-modules-workflow-management-save-workflow-definition-activities.command-C60ABOUE.mjs → acorex-modules-workflow-management-save-workflow-definition-activities.command-80PIS1oE.mjs} +2 -2
  254. package/fesm2022/{acorex-modules-workflow-management-save-workflow-definition-activities.command-C60ABOUE.mjs.map → acorex-modules-workflow-management-save-workflow-definition-activities.command-80PIS1oE.mjs.map} +1 -1
  255. package/fesm2022/{acorex-modules-workflow-management-workflow-configurator-widget-column.component-ChnPuG_J.mjs → acorex-modules-workflow-management-workflow-configurator-widget-column.component-CXhrrqa_.mjs} +2 -2
  256. package/fesm2022/{acorex-modules-workflow-management-workflow-configurator-widget-column.component-ChnPuG_J.mjs.map → acorex-modules-workflow-management-workflow-configurator-widget-column.component-CXhrrqa_.mjs.map} +1 -1
  257. package/fesm2022/{acorex-modules-workflow-management-workflow-configurator-widget-edit.component-BqydSkbP.mjs → acorex-modules-workflow-management-workflow-configurator-widget-edit.component-CzPQUA9m.mjs} +47 -25
  258. package/fesm2022/acorex-modules-workflow-management-workflow-configurator-widget-edit.component-CzPQUA9m.mjs.map +1 -0
  259. package/fesm2022/{acorex-modules-workflow-management-workflow-run-history-popup.component-D_yi-Ccp.mjs → acorex-modules-workflow-management-workflow-run-history-popup.component-CTs6Sdm2.mjs} +2 -2
  260. package/fesm2022/{acorex-modules-workflow-management-workflow-run-history-popup.component-D_yi-Ccp.mjs.map → acorex-modules-workflow-management-workflow-run-history-popup.component-CTs6Sdm2.mjs.map} +1 -1
  261. package/fesm2022/{acorex-modules-workflow-management-workflow-task-popover.component-CdvuOzXH.mjs → acorex-modules-workflow-management-workflow-task-popover.component-CaIIzv1r.mjs} +2 -2
  262. package/fesm2022/{acorex-modules-workflow-management-workflow-task-popover.component-CdvuOzXH.mjs.map → acorex-modules-workflow-management-workflow-task-popover.component-CaIIzv1r.mjs.map} +1 -1
  263. package/fesm2022/acorex-modules-workflow-management.mjs +1 -1
  264. package/fesm2022/acorex-modules-workplacesafety-management-hazard-risk-ppe-rule-status.provider-BsRNRZ6z.mjs +42 -0
  265. package/fesm2022/acorex-modules-workplacesafety-management-hazard-risk-ppe-rule-status.provider-BsRNRZ6z.mjs.map +1 -0
  266. package/fesm2022/acorex-modules-workplacesafety-management.mjs +494 -294
  267. package/fesm2022/acorex-modules-workplacesafety-management.mjs.map +1 -1
  268. package/package.json +2 -2
  269. package/types/acorex-modules-asset-management.d.ts +7 -3
  270. package/types/acorex-modules-contact-core.d.ts +1 -0
  271. package/types/acorex-modules-conversation.d.ts +898 -161
  272. package/types/acorex-modules-dashboard-management.d.ts +56 -10
  273. package/types/acorex-modules-document-management.d.ts +4 -0
  274. package/types/acorex-modules-report-management.d.ts +2 -0
  275. package/types/acorex-modules-task-management.d.ts +21 -5
  276. package/types/acorex-modules-workflow-management.d.ts +9 -4
  277. package/types/acorex-modules-workplacesafety-management.d.ts +55 -32
  278. package/fesm2022/acorex-modules-assessment-management-acorex-modules-assessment-management-WGRBHMmQ.mjs.map +0 -1
  279. package/fesm2022/acorex-modules-contact-core-acorex-modules-contact-core-CBMdv1GN.mjs.map +0 -1
  280. package/fesm2022/acorex-modules-contact-core-menu.provider-C-iEIPGe.mjs.map +0 -1
  281. package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-CUjTT3M7.mjs.map +0 -1
  282. package/fesm2022/acorex-modules-conversation-send-assist-chat-message.command-CqDrZKFK.mjs.map +0 -1
  283. package/fesm2022/acorex-modules-dashboard-management-acorex-modules-dashboard-management-Lx3VuIg6.mjs.map +0 -1
  284. package/fesm2022/acorex-modules-data-management-index-CxVSgxTM.mjs.map +0 -1
  285. package/fesm2022/acorex-modules-human-capital-management-edit-personal-info.command-8LKMNm4Z.mjs.map +0 -1
  286. package/fesm2022/acorex-modules-settings-management-setting-view.component-CG-GW2yS.mjs.map +0 -1
  287. package/fesm2022/acorex-modules-task-management-task-board.page-FFhsAyHF.mjs.map +0 -1
  288. package/fesm2022/acorex-modules-workflow-management-acorex-modules-workflow-management-DJeUheQT.mjs.map +0 -1
  289. package/fesm2022/acorex-modules-workflow-management-workflow-configurator-widget-edit.component-BqydSkbP.mjs.map +0 -1
@@ -1,14 +1,14 @@
1
1
  import { AXPSessionService, AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex/platform/auth';
2
- import { AXP_PROTECTED_ROUTE_GUARDS, AXP_HOME_PAGES, AXP_HOME_PAGE_DEFAULT_KEY, AXP_MENU_PROVIDER, AXPSettingsService } from '@acorex/platform/common';
3
- import { AXPDataSourceDefinitionProviderService, AXP_MODULE_MANIFEST_PROVIDER, provideLazyProvider, AXPDeviceService } from '@acorex/platform/core';
4
- import { AXPStateMessageComponent, AXP_PAGE_COMPONENT_PROVIDER, AXPWidgetPropertyViewerComponent, AXPThemeLayoutBlockComponent } from '@acorex/platform/layout/components';
5
- import { AXPEntityService, AXP_ENTITY_CONFIG_TOKEN, AXP_ENTITY_DEFINITION_LOADER } from '@acorex/platform/layout/entity';
2
+ import { AXPEntityCommandScope, AXPSettingsService, AXP_PROTECTED_ROUTE_GUARDS, AXP_HOME_PAGES, AXP_HOME_PAGE_DEFAULT_KEY, AXP_MENU_PROVIDER } from '@acorex/platform/common';
3
+ import { AXPDataSourceDefinitionProviderService, AXPDeviceService, AXP_MODULE_MANIFEST_PROVIDER, provideLazyProvider } from '@acorex/platform/core';
4
+ import { AXPStateMessageComponent, AXPWidgetPropertyViewerComponent, AXP_PAGE_COMPONENT_PROVIDER, AXPThemeLayoutBlockComponent } from '@acorex/platform/layout/components';
5
+ import { AXPEntityService, cloneLayoutArrays, ensureLayoutSection, ensureLayoutPropertyView, resolveEntityPluginDetailPageOrder, ensureListActions, actionExists, AXP_ENTITY_CONFIG_TOKEN, AXP_ENTITY_DEFINITION_LOADER, AXP_ENTITY_ACTION_PLUGIN, AXP_ENTITY_STORAGE_MIDDLEWARE } from '@acorex/platform/layout/entity';
6
6
  import * as i3$2 from '@acorex/platform/layout/widget-core';
7
- import { AXPBaseWidgetComponent, cloneProperty, AXPWidgetGroupEnum, AXPValueWidgetComponent, createStringProperty, AXPWidgetCoreModule, AXP_WIDGET_DEFINITION_PROVIDER, AXPWidgetRendererDirective } from '@acorex/platform/layout/widget-core';
7
+ import { AXPBaseWidgetComponent, cloneProperty, AXPWidgetGroupEnum, AXPValueWidgetComponent, createStringProperty, AXPWidgetRendererDirective, AXPWidgetCoreModule, AXP_WIDGET_DEFINITION_PROVIDER } from '@acorex/platform/layout/widget-core';
8
8
  import { AXP_DATA_SOURCE_OPTIONS_PROPERTY, AXP_APPEARANCE_PROPERTY_GROUP, AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DATA_PROPERTY_GROUP, AXP_BEHAVIOR_PROPERTY_GROUP, AXP_COLOR_PROPERTY, AXP_BG_COLOR_PROPERTY, AXPWidgetsModule } from '@acorex/platform/layout/widgets';
9
9
  import * as i0 from '@angular/core';
10
- import { Injectable, inject, DestroyRef, afterNextRender, signal, effect, computed, ChangeDetectionStrategy, Component, InjectionToken, viewChild, input, ElementRef, ChangeDetectorRef, HostBinding, linkedSignal, HostListener, NgModule, output, contentChild, ViewEncapsulation, untracked, model } from '@angular/core';
11
- import { AXPSystemActionType, AXPWidgetsCatalog, AXPDataGenerator, AXPWidgetsList, AXPPlatformScope } from '@acorex/platform/contracts';
10
+ import { Injectable, inject, DestroyRef, afterNextRender, signal, effect, computed, ChangeDetectionStrategy, Component, InjectionToken, viewChild, input, ElementRef, ChangeDetectorRef, HostBinding, linkedSignal, HostListener, output, contentChild, ViewEncapsulation, NgModule, untracked, model } from '@angular/core';
11
+ import { AXPSystemActionType, AXPWidgetsCatalog, AXPDataGenerator, createMultiLanguageString, AXPPlatformScope, AXPWidgetsList } from '@acorex/platform/contracts';
12
12
  import { AXPCommonMenuKeys, AXP_GLOBAL_SEARCH_CONFIG_TOKEN } from '@acorex/modules/common';
13
13
  import { firstValueFrom, Subject, map, Observable, catchError, throwError, of, finalize, interval, switchMap, fromEvent } from 'rxjs';
14
14
  import * as i4 from '@acorex/core/translation';
@@ -50,21 +50,23 @@ import * as i1$3 from '@acorex/components/wysiwyg';
50
50
  import { AXWysiwygModule } from '@acorex/components/wysiwyg';
51
51
  import * as i2$1 from '@angular/forms';
52
52
  import { FormsModule } from '@angular/forms';
53
- import { createQueryView, entityMasterCrudActions, entityMasterRecordActions } from '@acorex/platform/layout/entity-contracts';
53
+ import { get, isString, isArray, castArray, set } from 'lodash-es';
54
+ import { AXP_WIDGET_PICKER_TAB_CONTEXT, AXPWidgetPickerService, AXPDesignerService } from '@acorex/platform/layout/designer';
54
55
  import { RootConfig as RootConfig$1 } from '@acorex/modules/security-management';
55
56
  import { AXDialogService } from '@acorex/components/dialog';
56
- import { AXP_WIDGET_PICKER_TAB_CONTEXT, AXPWidgetPickerService, AXPDesignerService } from '@acorex/platform/layout/designer';
57
57
  import { signalStore, withState, withComputed, withMethods, patchState, withHooks } from '@ngrx/signals';
58
58
  import { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';
59
59
  import { AXBasePageComponent } from '@acorex/components/page';
60
- import { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';
61
- import { AXButtonGroupModule } from '@acorex/components/button-group';
60
+ import * as i1$4 from '@acorex/components/loading';
61
+ import { AXLoadingModule } from '@acorex/components/loading';
62
62
  import * as i3$1 from '@acorex/components/dropdown';
63
63
  import { AXDropdownModule } from '@acorex/components/dropdown';
64
+ import { ActivatedRoute } from '@angular/router';
65
+ import { createQueryView, entityMasterCrudActions, entityMasterRecordActions } from '@acorex/platform/layout/entity-contracts';
66
+ import { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';
67
+ import { AXButtonGroupModule } from '@acorex/components/button-group';
64
68
  import { AXDropdownButtonModule } from '@acorex/components/dropdown-button';
65
69
  import { AXPLayoutThemeService } from '@acorex/platform/themes/shared';
66
- import * as i1$4 from '@acorex/components/loading';
67
- import { AXLoadingModule } from '@acorex/components/loading';
68
70
  import { AXLabelModule } from '@acorex/components/label';
69
71
  import * as i5 from '@acorex/components/select-box';
70
72
  import { AXSelectBoxModule } from '@acorex/components/select-box';
@@ -5040,7 +5042,7 @@ class AXPWeatherWidgetViewComponent extends AXPDashboardWidgetComponent {
5040
5042
  provide: AXPWeatherApiAbstract,
5041
5043
  useClass: AXPWeatherApiService,
5042
5044
  },
5043
- ], viewQueries: [{ propertyName: "containerEl", first: true, predicate: ["containerElement"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<!-- Weather Widget Component Template -->\n<div class=\"axp-weather-container\" #containerElement>\n <!-- Loading indicator -->\n @if (isLoading()) {\n <div class=\"axp-weather-loading-overlay\">\n <div class=\"axp-weather-loading-spinner\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>{{ '@dashboard:weather.loading' | translate | async }}</span>\n </div>\n </div>\n }\n\n <!-- Error message -->\n @if (hasError()) {\n <axp-state-message\n mode=\"error\"\n icon=\"fa-solid fa-exclamation-triangle\"\n [title]=\"'@dashboard:weather.error.title'\"\n [description]=\"errorMessage()\"\n >\n <button slot=\"actions\" class=\"axp-weather-retry-button\" (click)=\"refreshWeather()\">\n <i class=\"fa-solid fa-sync-alt\"></i>\n <span>{{ '@dashboard:weather.retry' | translate | async }}</span>\n </button>\n </axp-state-message>\n }\n\n <!-- Weather content - only show when we have data -->\n @if (weatherData()) {\n <!-- Background decorations based on weather condition -->\n <div class=\"axp-weather-background-decorations\">\n <div class=\"axp-weather-decoration\" [ngClass]=\"weatherData()?.current?.condition?.toLowerCase()\"></div>\n <div class=\"axp-weather-gradient-overlay\"></div>\n </div>\n\n <div class=\"axp-weather-inner\">\n <!-- Location information section -->\n <div class=\"axp-weather-location-info\">\n <div class=\"axp-weather-location-icon\">\n <i class=\"fa-solid fa-location-dot\"></i>\n </div>\n <div class=\"axp-weather-location-text\">\n <h2 class=\"axp-weather-location-name\">{{ city() }}</h2>\n </div>\n </div>\n\n <!-- Current weather conditions section -->\n <div class=\"axp-weather-current-weather\">\n <!-- Weather icon and condition name -->\n @if (showCurrentCondition()) {\n <div class=\"axp-weather-condition\">\n <div class=\"axp-weather-icon-wrapper\">\n <div class=\"axp-weather-icon\">\n <img [src]=\"getConditionIcon(weatherData()?.current?.condition || '')\" />\n </div>\n <div\n class=\"axp-weather-icon-glow\"\n [style.background-color]=\"getConditionColor(weatherData()?.current?.condition || '')\"\n ></div>\n </div>\n <div class=\"axp-weather-condition-name\">\n {{ getCurrentCondition() | translate | async }}\n </div>\n </div>\n }\n\n <!-- Temperature display -->\n @if (showTemperature()) {\n <div class=\"axp-weather-temperature\">\n <span class=\"axp-weather-temperature-value\">{{ getCurrentTemperature() }}</span>\n <span class=\"axp-weather-temperature-unit\">{{ getTemperatureUnit() | translate | async }}</span>\n </div>\n }\n </div>\n\n <!-- Weather details section (humidity and wind) -->\n @if (showHumidity() || showWind()) {\n <div class=\"axp-weather-details\">\n <!-- Humidity information -->\n @if (showHumidity()) {\n <div class=\"axp-weather-detail-item\">\n <div class=\"axp-weather-detail-icon\">\n <i class=\"fa-solid fa-droplet\"></i>\n </div>\n <div class=\"axp-weather-detail-info\">\n <div class=\"axp-weather-detail-label\">\n {{ '@dashboard:weather.humidity' | translate | async }}\n </div>\n <div class=\"axp-weather-detail-value\">{{ getHumidity() }}%</div>\n </div>\n </div>\n }\n\n <!-- Wind speed information -->\n @if (showWind()) {\n <div class=\"axp-weather-detail-item\">\n <div class=\"axp-weather-detail-icon\">\n <i class=\"fa-solid fa-wind\"></i>\n </div>\n <div class=\"axp-weather-detail-info\">\n <div class=\"axp-weather-detail-label\">\n {{ '@dashboard:weather.wind' | translate | async }}\n </div>\n <div class=\"axp-weather-detail-value\">\n {{ getWindSpeed() }} {{ getWindSpeedUnit() | translate | async }}\n </div>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Weather forecast section -->\n @if (showForecast() && weatherData()?.forecast) {\n <div class=\"axp-weather-forecast\">\n <div class=\"axp-weather-forecast-header\">\n <h3 class=\"axp-weather-forecast-title\">\n <i class=\"fa-solid fa-calendar-days\"></i>\n <span class=\"ax-px-1\">{{ '@dashboard:weather.forecast' | translate | async }}</span>\n </h3>\n </div>\n <!-- Loading indicator for forecast -->\n <!-- @if (isForecastLoading()) {\n <div class=\"axp-weather-forecast-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>{{ '@dashboard:weather.loading-forecast' | translate | async }}</span>\n </div>\n } -->\n <!-- Scrollable forecast days display -->\n <div class=\"axp-weather-forecast-items\">\n @for (day of displayedForecast(); track day.day) {\n <div class=\"axp-weather-forecast-day\">\n <div class=\"axp-weather-forecast-day-name\">\n {{ getDayName(parseDate(day.date)) | translate | async }}\n </div>\n <div class=\"axp-weather-forecast-icon\" [title]=\"getConditionName(day.condition) | translate | async\">\n <img [src]=\"getConditionIcon(day.condition || '')\" />\n </div>\n <div class=\"axp-weather-forecast-temps\">\n <span class=\"axp-weather-forecast-low\">\n {{ temperatureUnit() === '\u00B0C' ? day.minTempC : day.minTempF\n }}{{ getTemperatureUnit() | translate | async }}\n </span>\n <span class=\"axp-weather-forecast-high\">\n {{ temperatureUnit() === '\u00B0C' ? day.maxTempC : day.maxTempF\n }}{{ getTemperatureUnit() | translate | async }}\n </span>\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Last updated timestamp -->\n <div class=\"axp-weather-last-updated\">\n <span>{{ '@dashboard:weather.last-updated' | translate | async }}: {{ getLastUpdated() }}</span>\n </div>\n\n <!-- Manual refresh button -->\n <div class=\"axp-weather-refresh-action\">\n <button\n class=\"axp-weather-refresh-button\"\n (click)=\"refreshWeather()\"\n [attr.aria-label]=\"'@dashboard:weather.refresh' | translate | async\"\n [title]=\"'@dashboard:weather.refresh' | translate | async\"\n >\n <i class=\"fa-solid fa-sync-alt\"></i>\n <span>{{ '@dashboard:weather.refresh' | translate | async }}</span>\n </button>\n </div>\n </div>\n } @else if (!isLoading() && !hasError()) {\n <!-- No data state (not loading, no error) -->\n <axp-state-message\n icon=\"fa-solid fa-cloud-sun\"\n [title]=\"'@dashboard:weather.no-data.title'\"\n [description]=\"'@dashboard:weather.no-data.description'\"\n >\n <button slot=\"actions\" class=\"axp-weather-refresh-button\" (click)=\"refreshWeather()\">\n <i class=\"fa-solid fa-sync-alt\"></i>\n <span>{{ '@dashboard:weather.load-data' | translate | async }}</span>\n </button>\n </axp-state-message>\n }\n</div>\n", styles: [":host{display:block;width:100%;height:100%;--primary-gradient-start: #2196f3;--primary-gradient-end: #1976d2;--shadow-color: rgba(0, 0, 0, .2);--glass-bg: rgba(255, 255, 255, .15);--glass-border: rgba(255, 255, 255, .2);--text-primary: rgba(255, 255, 255, .95);--text-secondary: rgba(255, 255, 255, .75);--transition-speed: .3s}.axp-weather-container{width:100%;height:100%;overflow:hidden;position:relative;box-shadow:0 4px 8px #0000001a;min-height:300px}.axp-weather-loading-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#2c3e50d9;display:flex;justify-content:center;align-items:center;z-index:100}.axp-weather-loading-spinner{text-align:center}.axp-weather-loading-spinner i{font-size:2.5rem;color:#fff;margin-bottom:.5rem}.axp-weather-loading-spinner span{display:block;color:#fff;font-size:1rem}.axp-weather-background-decorations{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1}.axp-weather-decoration{position:absolute;top:0;left:0;width:100%;height:100%;background-size:cover;background-position:center}.axp-weather-gradient-overlay{position:absolute;top:0;left:0;width:100%;height:100%}.axp-weather-inner{position:relative;z-index:2;height:100%;padding:1.5rem;display:flex;flex-direction:column;justify-content:space-between}.axp-weather-location-info{display:flex;align-items:center;margin-bottom:1.5rem}.axp-weather-location-icon{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background-color:#fff3;border-radius:50%;margin-right:.75rem}.axp-weather-location-icon i{color:#fff}.axp-weather-location-name{margin:0;font-size:1.5rem;font-weight:500;text-shadow:1px 1px 3px rgba(0,0,0,.2);text-transform:capitalize}.axp-weather-current-weather{display:flex;align-items:center;justify-content:space-between;margin-bottom:1.5rem;flex-wrap:wrap}.axp-weather-condition{display:flex;flex-direction:column;align-items:center}.axp-weather-icon-wrapper{position:relative;margin-bottom:.5rem}.axp-weather-icon{position:relative;z-index:2;scale:2}.axp-weather-icon i{font-size:2.75rem;filter:drop-shadow(0 0 8px rgba(0,0,0,.3))}.axp-weather-icon-glow{position:absolute;z-index:1;top:50%;left:50%;transform:translate(-50%,-50%);width:45px;height:45px;border-radius:50%;filter:blur(15px);opacity:.4}.axp-weather-condition-name{font-size:1.1rem;text-align:center;text-shadow:1px 1px 2px rgba(0,0,0,.2)}.axp-weather-temperature{display:flex;align-items:flex-start;text-shadow:1px 1px 3px rgba(0,0,0,.3)}.axp-weather-temperature-value{font-size:3.5rem;font-weight:500;line-height:1}.axp-weather-temperature-unit{font-size:1.5rem;margin-top:.25rem}.axp-weather-details{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-darker-surface),var(--tw-bg-opacity, 1));display:flex;flex-wrap:wrap;gap:1.5rem;margin-bottom:1rem;padding:1rem;border-radius:8px}.axp-weather-detail-item{display:flex;align-items:center;flex:1;min-width:120px}.axp-weather-detail-icon{width:40px;height:40px;border-radius:50%;background-color:#fff3;display:flex;align-items:center;justify-content:center;margin-right:.75rem}.axp-weather-detail-icon i{font-size:1.25rem}.axp-weather-detail-info{display:flex;padding-inline:.25rem;flex-direction:column}.axp-weather-detail-label{font-size:.875rem;margin-bottom:.25rem}.axp-weather-detail-value{font-size:1.125rem;font-weight:500}.axp-weather-forecast{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-darker-surface),var(--tw-bg-opacity, 1));margin-bottom:.5rem;border-radius:8px;padding:1rem}.axp-weather-forecast-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.75rem}.axp-weather-forecast-title{margin:0;font-size:1.125rem;font-weight:500;display:flex;align-items:center}.axp-weather-forecast-title i{margin-right:.5rem;opacity:.8}.axp-weather-scroll-indicator{color:#fff9}.axp-weather-forecast-items{display:flex;overflow-x:auto;gap:.75rem;padding-bottom:.5rem}.axp-weather-forecast-items::-webkit-scrollbar{height:4px}.axp-weather-forecast-items::-webkit-scrollbar-thumb{background-color:#ffffff4d;border-radius:4px}.axp-weather-forecast-items::-webkit-scrollbar-track{background-color:#0000001a;border-radius:4px}.axp-weather-forecast-day{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-surface),var(--tw-bg-opacity, 1));min-width:90px;display:flex;flex-direction:column;align-items:center;padding:.75rem .5rem;border-radius:6px;transition:all .3s ease}.axp-weather-forecast-day:hover{transform:translateY(-2px)}.axp-weather-forecast-day-name{font-size:.875rem;margin-bottom:.5rem;font-weight:500}.axp-weather-forecast-icon{font-size:1.5rem;margin-bottom:.5rem}.axp-weather-forecast-icon i{filter:drop-shadow(0 0 5px rgba(0,0,0,.2))}.axp-weather-forecast-temps{display:flex;flex-direction:row;gap:.75rem;align-items:center;font-size:.775rem}.axp-weather-last-updated{text-align:center;font-size:.75rem;opacity:.7;margin-bottom:.5rem}.axp-weather-refresh-action{text-align:center}.axp-weather-refresh-button{background-color:#fff3;color:#fff;border:none;border-radius:4px;padding:.5rem 1rem;font-size:.875rem;cursor:pointer;transition:all .3s ease;display:inline-flex;align-items:center;gap:.5rem}.axp-weather-refresh-button:hover{background-color:#ffffff4d;transform:translateY(-1px)}.axp-weather-refresh-button i{font-size:.875rem}@media(max-width:576px){.axp-weather-inner{padding:.8rem;gap:.4rem}.axp-weather-location-name{font-size:1.1rem;padding-inline:.25rem}.axp-weather-temperature{font-size:2.5rem}.axp-weather-temperature-unit{font-size:1.1rem}.axp-weather-weather-details{flex-direction:column;gap:.5rem}.axp-weather-forecast-items{flex-wrap:nowrap;overflow-x:auto;padding-bottom:.5rem;margin:0 -.4rem;scroll-behavior:smooth;-webkit-overflow-scrolling:touch;scrollbar-width:thin;mask-image:linear-gradient(to right,#000 95%,#0000);-webkit-mask-image:linear-gradient(to right,rgb(0,0,0) 95%,rgba(0,0,0,0))}.axp-weather-forecast-items::-webkit-scrollbar{height:4px}.axp-weather-forecast-items::-webkit-scrollbar-thumb{background-color:#fff3;border-radius:4px}.axp-weather-forecast-day{min-width:60px;flex:0 0 auto;padding:.4rem .6rem}.axp-weather-forecast-day-name{font-size:.7rem}.axp-weather-forecast-icon{padding:.3rem;height:1.6rem}.axp-weather-forecast-temps{font-size:.7rem}.axp-weather-scroll-indicator{display:block}}:host-context(.theme-dark){--glass-bg: rgba(0, 0, 0, .3);--glass-border: rgba(255, 255, 255, .1)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: AXDateTimeModule }, { kind: "ngmodule", type: AXFormatModule }, { kind: "ngmodule", type: HttpClientModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPStateMessageComponent, selector: "axp-state-message", inputs: ["mode", "icon", "title", "description", "look"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
5045
+ ], viewQueries: [{ propertyName: "containerEl", first: true, predicate: ["containerElement"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<!-- Weather Widget Component Template -->\n<div class=\"axp-weather-container\" #containerElement>\n <!-- Loading indicator -->\n @if (isLoading()) {\n <div class=\"axp-weather-loading-overlay\">\n <div class=\"axp-weather-loading-spinner\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>{{ '@dashboard:weather.loading' | translate | async }}</span>\n </div>\n </div>\n }\n\n <!-- Error message -->\n @if (hasError()) {\n <axp-state-message\n mode=\"error\"\n icon=\"fa-solid fa-exclamation-triangle\"\n [title]=\"'@dashboard:weather.error.title'\"\n [description]=\"errorMessage()\"\n >\n <button slot=\"actions\" class=\"axp-weather-retry-button\" (click)=\"refreshWeather()\">\n <i class=\"fa-solid fa-sync-alt\"></i>\n <span>{{ '@dashboard:weather.retry' | translate | async }}</span>\n </button>\n </axp-state-message>\n }\n\n <!-- Weather content - only show when we have data -->\n @if (weatherData()) {\n <!-- Background decorations based on weather condition -->\n <div class=\"axp-weather-background-decorations\">\n <div class=\"axp-weather-decoration\" [ngClass]=\"weatherData()?.current?.condition?.toLowerCase()\"></div>\n <div class=\"axp-weather-gradient-overlay\"></div>\n </div>\n\n <div class=\"axp-weather-inner\">\n <!-- Location information section -->\n <div class=\"axp-weather-location-info\">\n <div class=\"axp-weather-location-icon\">\n <i class=\"fa-solid fa-location-dot\"></i>\n </div>\n <div class=\"axp-weather-location-text\">\n <h2 class=\"axp-weather-location-name\">{{ city() }}</h2>\n </div>\n </div>\n\n <!-- Current weather conditions section -->\n <div class=\"axp-weather-current-weather\">\n <!-- Weather icon and condition name -->\n @if (showCurrentCondition()) {\n <div class=\"axp-weather-condition\">\n <div class=\"axp-weather-icon-wrapper\">\n <div class=\"axp-weather-icon\">\n <img [src]=\"getConditionIcon(weatherData()?.current?.condition || '')\" />\n </div>\n <div\n class=\"axp-weather-icon-glow\"\n [style.background-color]=\"getConditionColor(weatherData()?.current?.condition || '')\"\n ></div>\n </div>\n <div class=\"axp-weather-condition-name\">\n {{ getCurrentCondition() | translate | async }}\n </div>\n </div>\n }\n\n <!-- Temperature display -->\n @if (showTemperature()) {\n <div class=\"axp-weather-temperature\">\n <span class=\"axp-weather-temperature-value\">{{ getCurrentTemperature() }}</span>\n <span class=\"axp-weather-temperature-unit\">{{ getTemperatureUnit() | translate | async }}</span>\n </div>\n }\n </div>\n\n <!-- Weather details section (humidity and wind) -->\n @if (showHumidity() || showWind()) {\n <div class=\"axp-weather-details\">\n <!-- Humidity information -->\n @if (showHumidity()) {\n <div class=\"axp-weather-detail-item\">\n <div class=\"axp-weather-detail-icon\">\n <i class=\"fa-solid fa-droplet\"></i>\n </div>\n <div class=\"axp-weather-detail-info\">\n <div class=\"axp-weather-detail-label\">\n {{ '@dashboard:weather.humidity' | translate | async }}\n </div>\n <div class=\"axp-weather-detail-value\">{{ getHumidity() }}%</div>\n </div>\n </div>\n }\n\n <!-- Wind speed information -->\n @if (showWind()) {\n <div class=\"axp-weather-detail-item\">\n <div class=\"axp-weather-detail-icon\">\n <i class=\"fa-solid fa-wind\"></i>\n </div>\n <div class=\"axp-weather-detail-info\">\n <div class=\"axp-weather-detail-label\">\n {{ '@dashboard:weather.wind' | translate | async }}\n </div>\n <div class=\"axp-weather-detail-value\">\n {{ getWindSpeed() }} {{ getWindSpeedUnit() | translate | async }}\n </div>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Weather forecast section -->\n @if (showForecast() && weatherData()?.forecast) {\n <div class=\"axp-weather-forecast\">\n <div class=\"axp-weather-forecast-header\">\n <h3 class=\"axp-weather-forecast-title\">\n <i class=\"fa-solid fa-calendar-days\"></i>\n <span class=\"ax-px-1\">{{ '@dashboard:weather.forecast' | translate | async }}</span>\n </h3>\n </div>\n <!-- Loading indicator for forecast -->\n <!-- @if (isForecastLoading()) {\n <div class=\"axp-weather-forecast-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>{{ '@dashboard:weather.loading-forecast' | translate | async }}</span>\n </div>\n } -->\n <!-- Scrollable forecast days display -->\n <div class=\"axp-weather-forecast-items\">\n @for (day of displayedForecast(); track day.day) {\n <div class=\"axp-weather-forecast-day\">\n <div class=\"axp-weather-forecast-day-name\">\n {{ getDayName(parseDate(day.date)) | translate | async }}\n </div>\n <div class=\"axp-weather-forecast-icon\" [title]=\"getConditionName(day.condition) | translate | async\">\n <img [src]=\"getConditionIcon(day.condition || '')\" />\n </div>\n <div class=\"axp-weather-forecast-temps\">\n <span class=\"axp-weather-forecast-low\">\n {{ temperatureUnit() === '\u00B0C' ? day.minTempC : day.minTempF\n }}{{ getTemperatureUnit() | translate | async }}\n </span>\n <span class=\"axp-weather-forecast-high\">\n {{ temperatureUnit() === '\u00B0C' ? day.maxTempC : day.maxTempF\n }}{{ getTemperatureUnit() | translate | async }}\n </span>\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Last updated timestamp -->\n <div class=\"axp-weather-last-updated\">\n <span>{{ '@dashboard:weather.last-updated' | translate | async }}: {{ getLastUpdated() }}</span>\n </div>\n\n <!-- Manual refresh button -->\n <div class=\"axp-weather-refresh-action\">\n <button\n class=\"axp-weather-refresh-button\"\n (click)=\"refreshWeather()\"\n [attr.aria-label]=\"'@dashboard:weather.refresh' | translate | async\"\n [title]=\"'@dashboard:weather.refresh' | translate | async\"\n >\n <i class=\"fa-solid fa-sync-alt\"></i>\n <span>{{ '@dashboard:weather.refresh' | translate | async }}</span>\n </button>\n </div>\n </div>\n } @else if (!isLoading() && !hasError()) {\n <!-- No data state (not loading, no error) -->\n <axp-state-message\n icon=\"fa-solid fa-cloud-sun\"\n [title]=\"'@dashboard:weather.no-data.title'\"\n [description]=\"'@dashboard:weather.no-data.description'\"\n >\n <button slot=\"actions\" class=\"axp-weather-refresh-button\" (click)=\"refreshWeather()\">\n <i class=\"fa-solid fa-sync-alt\"></i>\n <span>{{ '@dashboard:weather.load-data' | translate | async }}</span>\n </button>\n </axp-state-message>\n }\n</div>\n", styles: [":host{display:block;width:100%;height:100%;--primary-gradient-start: #2196f3;--primary-gradient-end: #1976d2;--shadow-color: rgba(0, 0, 0, .2);--glass-bg: rgba(255, 255, 255, .15);--glass-border: rgba(255, 255, 255, .2);--text-primary: rgba(255, 255, 255, .95);--text-secondary: rgba(255, 255, 255, .75);--transition-speed: .3s}.axp-weather-container{width:100%;height:100%;overflow:hidden;position:relative;box-shadow:0 4px 8px #0000001a;min-height:300px}.axp-weather-loading-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#2c3e50d9;display:flex;justify-content:center;align-items:center;z-index:100}.axp-weather-loading-spinner{text-align:center}.axp-weather-loading-spinner i{font-size:2.5rem;color:#fff;margin-bottom:.5rem}.axp-weather-loading-spinner span{display:block;color:#fff;font-size:1rem}.axp-weather-background-decorations{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1}.axp-weather-decoration{position:absolute;top:0;left:0;width:100%;height:100%;background-size:cover;background-position:center}.axp-weather-gradient-overlay{position:absolute;top:0;left:0;width:100%;height:100%}.axp-weather-inner{position:relative;z-index:2;height:100%;padding:1.5rem;display:flex;flex-direction:column;justify-content:space-between}.axp-weather-location-info{display:flex;align-items:center;margin-bottom:1.5rem}.axp-weather-location-icon{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background-color:#fff3;border-radius:50%;margin-right:.75rem}.axp-weather-location-icon i{color:#fff}.axp-weather-location-name{margin:0;font-size:1.5rem;font-weight:500;text-shadow:1px 1px 3px rgba(0,0,0,.2);text-transform:capitalize}.axp-weather-current-weather{display:flex;align-items:center;justify-content:space-between;margin-bottom:1.5rem;flex-wrap:wrap}.axp-weather-condition{display:flex;flex-direction:column;align-items:center}.axp-weather-icon-wrapper{position:relative;margin-bottom:.5rem}.axp-weather-icon{position:relative;z-index:2;scale:2}.axp-weather-icon i{font-size:2.75rem;filter:drop-shadow(0 0 8px rgba(0,0,0,.3))}.axp-weather-icon-glow{position:absolute;z-index:1;top:50%;left:50%;transform:translate(-50%,-50%);width:45px;height:45px;border-radius:50%;filter:blur(15px);opacity:.4}.axp-weather-condition-name{font-size:1.1rem;text-align:center;text-shadow:1px 1px 2px rgba(0,0,0,.2)}.axp-weather-temperature{display:flex;align-items:flex-start;text-shadow:1px 1px 3px rgba(0,0,0,.3)}.axp-weather-temperature-value{font-size:3.5rem;font-weight:500;line-height:1}.axp-weather-temperature-unit{font-size:1.5rem;margin-top:.25rem}.axp-weather-details{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-darker-surface),var(--tw-bg-opacity, 1));display:flex;flex-wrap:wrap;gap:1.5rem;margin-bottom:1rem;padding:1rem;border-radius:8px}.axp-weather-detail-item{display:flex;align-items:center;flex:1;min-width:120px}.axp-weather-detail-icon{width:40px;height:40px;border-radius:50%;background-color:#fff3;display:flex;align-items:center;justify-content:center;margin-right:.75rem}.axp-weather-detail-icon i{font-size:1.25rem}.axp-weather-detail-info{display:flex;padding-inline:.25rem;flex-direction:column}.axp-weather-detail-label{font-size:.875rem;margin-bottom:.25rem}.axp-weather-detail-value{font-size:1.125rem;font-weight:500}.axp-weather-forecast{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-darker-surface),var(--tw-bg-opacity, 1));margin-bottom:.5rem;border-radius:8px;padding:1rem}.axp-weather-forecast-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.75rem}.axp-weather-forecast-title{margin:0;font-size:1.125rem;font-weight:500;display:flex;align-items:center}.axp-weather-forecast-title i{margin-right:.5rem;opacity:.8}.axp-weather-scroll-indicator{color:#fff9}.axp-weather-forecast-items{display:flex;overflow-x:auto;gap:.75rem;padding-bottom:.5rem}.axp-weather-forecast-items::-webkit-scrollbar{height:4px}.axp-weather-forecast-items::-webkit-scrollbar-thumb{background-color:#ffffff4d;border-radius:4px}.axp-weather-forecast-items::-webkit-scrollbar-track{background-color:#0000001a;border-radius:4px}.axp-weather-forecast-day{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-surface),var(--tw-bg-opacity, 1));min-width:90px;display:flex;flex-direction:column;align-items:center;padding:.75rem .5rem;border-radius:6px;transition:all .3s ease}.axp-weather-forecast-day:hover{transform:translateY(-2px)}.axp-weather-forecast-day-name{font-size:.875rem;margin-bottom:.5rem;font-weight:500}.axp-weather-forecast-icon{font-size:1.5rem;margin-bottom:.5rem}.axp-weather-forecast-icon i{filter:drop-shadow(0 0 5px rgba(0,0,0,.2))}.axp-weather-forecast-temps{display:flex;flex-direction:row;gap:.75rem;align-items:center;font-size:.775rem}.axp-weather-last-updated{text-align:center;font-size:.75rem;opacity:.7;margin-bottom:.5rem}.axp-weather-refresh-action{text-align:center}.axp-weather-refresh-button{background-color:#fff3;color:#fff;border:none;border-radius:4px;padding:.5rem 1rem;font-size:.875rem;cursor:pointer;transition:all .3s ease;display:inline-flex;align-items:center;gap:.5rem}.axp-weather-refresh-button:hover{background-color:#ffffff4d;transform:translateY(-1px)}.axp-weather-refresh-button i{font-size:.875rem}@media(max-width:576px){.axp-weather-inner{padding:.8rem;gap:.4rem}.axp-weather-location-name{font-size:1.1rem;padding-inline:.25rem}.axp-weather-temperature{font-size:2.5rem}.axp-weather-temperature-unit{font-size:1.1rem}.axp-weather-weather-details{flex-direction:column;gap:.5rem}.axp-weather-forecast-items{flex-wrap:nowrap;overflow-x:auto;padding-bottom:.5rem;margin:0 -.4rem;scroll-behavior:smooth;-webkit-overflow-scrolling:touch;scrollbar-width:thin;mask-image:linear-gradient(to right,#000 95%,#0000);-webkit-mask-image:linear-gradient(to right,rgb(0,0,0) 95%,rgba(0,0,0,0))}.axp-weather-forecast-items::-webkit-scrollbar{height:4px}.axp-weather-forecast-items::-webkit-scrollbar-thumb{background-color:#fff3;border-radius:4px}.axp-weather-forecast-day{min-width:60px;flex:0 0 auto;padding:.4rem .6rem}.axp-weather-forecast-day-name{font-size:.7rem}.axp-weather-forecast-icon{padding:.3rem;height:1.6rem}.axp-weather-forecast-temps{font-size:.7rem}.axp-weather-scroll-indicator{display:block}}:host-context(.theme-dark){--glass-bg: rgba(0, 0, 0, .3);--glass-border: rgba(255, 255, 255, .1)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: AXDateTimeModule }, { kind: "ngmodule", type: AXFormatModule }, { kind: "ngmodule", type: HttpClientModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPStateMessageComponent, selector: "axp-state-message", inputs: ["mode", "icon", "title", "description", "titleParams", "descriptionParams", "look"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
5044
5046
  }
5045
5047
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWeatherWidgetViewComponent, decorators: [{
5046
5048
  type: Component,
@@ -6253,363 +6255,272 @@ const AXPStickyNoteWidget = {
6253
6255
  },
6254
6256
  };
6255
6257
 
6258
+ //#region ---- Imports ----
6259
+ /** Component key used when display is `page`. Register via {@link AXP_PAGE_COMPONENT_PROVIDER}. */
6260
+ const ENTITY_DASHBOARD_PAGE_COMPONENT_KEY = 'entity-dashboard-page';
6261
+ //#endregion
6262
+ //#region ---- Plugin ----
6263
+ /**
6264
+ * Dashboard plugin.
6265
+ * - When display is `page` (default), adds a page tab with {@link ENTITY_DASHBOARD_PAGE_COMPONENT_KEY}.
6266
+ * - When display is `section`, embeds the dashboard grid in the single layout.
6267
+ * - Adds a list action to open the entity dashboard page.
6268
+ */
6269
+ const dashboardPlugin = {
6270
+ name: 'dashboard',
6271
+ order: 45,
6272
+ apply: (ctx, options) => {
6273
+ const opts = options ?? {};
6274
+ const displayMode = opts.display ?? 'page';
6275
+ const displayTitle = opts.title?.trim() || '@dashboard-management:dashboards.terms.dashboard';
6276
+ const entityType = `${ctx.entity.module}.${ctx.entity.name}`;
6277
+ //#region ---- Group & Property ----
6278
+ const groups = ctx.groups.list() ?? [];
6279
+ if (!groups.some((g) => g.id === 'dashboard')) {
6280
+ ctx.groups.add({ id: 'dashboard', title: displayTitle });
6281
+ }
6282
+ const props = ctx.properties.list();
6283
+ if (!props.some((p) => p.name === 'entityDashboard')) {
6284
+ ctx.properties.add({
6285
+ name: 'entityDashboard',
6286
+ title: displayTitle,
6287
+ groupId: 'dashboard',
6288
+ schema: {
6289
+ dataType: 'object',
6290
+ interface: {
6291
+ type: 'entity-dashboard',
6292
+ options: {
6293
+ entityType,
6294
+ entityId: '{{ context.eval("id") }}',
6295
+ subject: '{{ context.eval("title", { pipes: ["translate"] }) }}',
6296
+ },
6297
+ },
6298
+ },
6299
+ });
6300
+ }
6301
+ //#endregion
6302
+ //#region ---- Display Mode ----
6303
+ if (displayMode === 'section') {
6304
+ ctx.interfaces.master.single.update((single) => {
6305
+ const next = cloneLayoutArrays((single ?? { title: ctx.entity.title, sections: [], properties: [] }));
6306
+ ensureLayoutSection(next, { id: 'dashboard', title: displayTitle, order: 90 });
6307
+ ensureLayoutPropertyView(next, {
6308
+ name: 'entityDashboard',
6309
+ layout: {
6310
+ label: { visible: false },
6311
+ positions: { lg: { colSpan: 12, order: 6 } },
6312
+ },
6313
+ });
6314
+ return next;
6315
+ });
6316
+ }
6317
+ else {
6318
+ ctx.entity.pages ??= [];
6319
+ const pageExists = ctx.entity.pages.some((p) => p.componentKey === ENTITY_DASHBOARD_PAGE_COMPONENT_KEY);
6320
+ const pageOrder = resolveEntityPluginDetailPageOrder({ relatedEntities: ctx.entity.relatedEntities, pages: ctx.entity.pages }, 'dashboard', {
6321
+ componentKey: ENTITY_DASHBOARD_PAGE_COMPONENT_KEY,
6322
+ skipPage: pageExists ? { componentKey: ENTITY_DASHBOARD_PAGE_COMPONENT_KEY } : undefined,
6323
+ });
6324
+ const page = {
6325
+ componentKey: ENTITY_DASHBOARD_PAGE_COMPONENT_KEY,
6326
+ title: displayTitle,
6327
+ icon: opts.icon ?? 'fa-light fa-gauge-high',
6328
+ layout: { order: pageOrder },
6329
+ };
6330
+ if (!pageExists) {
6331
+ ctx.entity.pages.push(page);
6332
+ }
6333
+ else {
6334
+ const pages = ctx.entity.pages;
6335
+ const index = pages.findIndex((p) => p.componentKey === ENTITY_DASHBOARD_PAGE_COMPONENT_KEY);
6336
+ if (index >= 0) {
6337
+ pages[index] = { ...pages[index], ...page };
6338
+ }
6339
+ }
6340
+ }
6341
+ //#endregion
6342
+ //#region ---- List Actions ----
6343
+ ensureListActions(ctx);
6344
+ ctx.interfaces.update((i) => {
6345
+ const actions = i.master.list.actions;
6346
+ const cmdName = 'open-entity-dashboard';
6347
+ if (!actionExists(actions, cmdName)) {
6348
+ actions.push({
6349
+ title: '@dashboard-management:dashboards.actions.open-entity-dashboard',
6350
+ command: {
6351
+ name: cmdName,
6352
+ options: {
6353
+ entityId: '{{ context.eval("id") }}',
6354
+ entityType,
6355
+ },
6356
+ },
6357
+ priority: 'secondary',
6358
+ type: 'dashboard',
6359
+ separated: true,
6360
+ scope: AXPEntityCommandScope.Individual,
6361
+ });
6362
+ }
6363
+ return i;
6364
+ });
6365
+ //#endregion
6366
+ ctx.entity.extensions ??= {};
6367
+ ctx.entity.extensions.dashboard = {
6368
+ entityType,
6369
+ display: displayMode,
6370
+ };
6371
+ },
6372
+ };
6256
6373
  //#endregion
6257
- //#region ---- Dashboard Management Widgets Provider ----
6258
- const DASHBOARD_WIDGETS = [
6259
- AXPShortcutWidget,
6260
- AXPDonutChartWidget,
6261
- AXPBarChartWidget,
6262
- AXPLineChartWidget,
6263
- AXPFunnelChartWidget,
6264
- AXPHeatmapChartWidget,
6265
- AXPKpiProgressWidget,
6266
- AXPKpiSegmentedWidget,
6267
- AXPKpiDetailsWidget,
6268
- AXPKpiStatCardWidget,
6269
- AXPGaugeChartWidget,
6270
- AXPStickyNoteWidget,
6271
- AXPMinimalWeatherWidget,
6272
- AXPAdvancedWeatherWidget,
6273
- AXPAnalogClockWidget,
6274
- ];
6275
- class AXMDashboardManagementWidgetsProvider {
6276
- getWidgets() {
6277
- return DASHBOARD_WIDGETS;
6278
- }
6279
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMDashboardManagementWidgetsProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
6280
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMDashboardManagementWidgetsProvider }); }
6281
- }
6282
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMDashboardManagementWidgetsProvider, decorators: [{
6283
- type: Injectable
6284
- }] });
6285
6374
 
6286
- // Entity Modules
6287
- function createAppRoute() {
6288
- const config = inject(AXP_ENTITY_CONFIG_TOKEN);
6375
+ //#region ---- Imports ----
6376
+ //#endregion
6377
+ //#region ---- Builders ----
6378
+ function buildUserScopeRef(userId) {
6379
+ return { userId: userId.trim() };
6380
+ }
6381
+ function buildTenantScopeRef(tenantId, roleIds) {
6289
6382
  return {
6290
- path: ':app',
6291
- canActivate: [...AXP_PROTECTED_ROUTE_GUARDS],
6292
- data: { rootLayout: true },
6293
- loadComponent: () => {
6294
- return config.viewers.root();
6295
- },
6296
- children: [
6297
- {
6298
- path: 'dashboard',
6299
- loadComponent: () => Promise.resolve().then(function () { return homeDashboard; }).then((c) => c.AXMDashboardHomeComponent),
6300
- },
6301
- ],
6383
+ tenantId: tenantId.trim(),
6384
+ roleIds: [...new Set(roleIds.map((id) => id.trim()).filter(Boolean))],
6302
6385
  };
6303
6386
  }
6304
- class AXMDashboardManagementModule {
6305
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMDashboardManagementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
6306
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: AXMDashboardManagementModule, imports: [AXPWidgetCoreModule] }); }
6307
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMDashboardManagementModule, providers: [
6308
- { provide: AXP_WIDGET_DEFINITION_PROVIDER, useClass: AXMDashboardManagementWidgetsProvider, multi: true },
6309
- {
6310
- provide: AXP_HOME_PAGES,
6311
- multi: true,
6312
- useFactory: () => [
6313
- {
6314
- key: 'dashboard',
6315
- title: 'Dashboard',
6316
- route: createAppRoute(),
6317
- },
6387
+ function buildEntityScopeRef(entityType, entityId) {
6388
+ return {
6389
+ entityType: entityType.trim(),
6390
+ entityId: entityId.trim(),
6391
+ };
6392
+ }
6393
+ //#endregion
6394
+ //#region ---- Readers ----
6395
+ function readScopeUserId(scopeRef) {
6396
+ const userId = get(scopeRef, 'userId');
6397
+ return isString(userId) && userId.trim() ? userId.trim() : undefined;
6398
+ }
6399
+ function readScopeTenantId(scopeRef) {
6400
+ const tenantId = get(scopeRef, 'tenantId');
6401
+ return isString(tenantId) && tenantId.trim() ? tenantId.trim() : undefined;
6402
+ }
6403
+ function readScopeRoleIds(scopeRef) {
6404
+ const roleIds = get(scopeRef, 'roleIds');
6405
+ if (!isArray(roleIds)) {
6406
+ return [];
6407
+ }
6408
+ return roleIds.filter((id) => isString(id) && id.trim().length > 0);
6409
+ }
6410
+ function readScopeEntityRef(scopeRef) {
6411
+ const entityId = get(scopeRef, 'entityId');
6412
+ const entityType = get(scopeRef, 'entityType');
6413
+ if (!isString(entityId) || !entityId.trim() || !isString(entityType) || !entityType.trim()) {
6414
+ return undefined;
6415
+ }
6416
+ return { entityId: entityId.trim(), entityType: entityType.trim() };
6417
+ }
6418
+ //#endregion
6419
+ //#region ---- Normalization ----
6420
+ /**
6421
+ * Ensures {@link scopeRef} matches {@link scope} and strips incompatible keys.
6422
+ */
6423
+ function normalizeDashboardScopeRef(scope, scopeRef, fallback) {
6424
+ switch (scope) {
6425
+ case 'U':
6426
+ return buildUserScopeRef(readScopeUserId(scopeRef) ?? fallback?.userId ?? '');
6427
+ case 'T':
6428
+ return buildTenantScopeRef(readScopeTenantId(scopeRef) ?? fallback?.tenantId ?? '', readScopeRoleIds(scopeRef).length > 0
6429
+ ? readScopeRoleIds(scopeRef)
6430
+ : castArray(fallback?.roleIds ?? []));
6431
+ case 'E':
6432
+ return buildEntityScopeRef(readScopeEntityRef(scopeRef)?.entityType ?? fallback?.entityType ?? '', readScopeEntityRef(scopeRef)?.entityId ?? fallback?.entityId ?? '');
6433
+ default:
6434
+ return buildUserScopeRef(fallback?.userId ?? '');
6435
+ }
6436
+ }
6437
+ //#endregion
6438
+
6439
+ //#region ---- Imports ----
6440
+ //#endregion
6441
+ //#region ---- Service ----
6442
+ /**
6443
+ * Resolves or creates entity-scoped dashboards (`scope: E`).
6444
+ */
6445
+ class AXMEntityDashboardService {
6446
+ constructor() {
6447
+ //#region ---- Services & Dependencies ----
6448
+ this.entityService = inject(AXPEntityService);
6449
+ this.dashboardData = this.entityService
6450
+ .withEntity(RootConfig.module.name, RootConfig.entities.dashboard.name)
6451
+ .data();
6452
+ }
6453
+ //#endregion
6454
+ //#region ---- Public Methods ----
6455
+ /**
6456
+ * Finds the dashboard bound to an entity record, if one exists.
6457
+ */
6458
+ async findEntityDashboard(entityType, entityId) {
6459
+ const result = await this.dashboardData.query({
6460
+ skip: 0,
6461
+ take: 1,
6462
+ filter: {
6463
+ logic: 'and',
6464
+ filters: [
6465
+ { field: 'scope', operator: { type: 'equal' }, value: 'E' },
6466
+ { field: 'scopeRef.entityType', operator: { type: 'equal' }, value: entityType },
6467
+ { field: 'scopeRef.entityId', operator: { type: 'equal' }, value: entityId },
6318
6468
  ],
6319
6469
  },
6320
- // Module-specific providers (not part of manifest system)
6321
- AXPWidgetsModule,
6322
- {
6323
- provide: AXP_HOME_PAGE_DEFAULT_KEY,
6324
- useValue: 'dashboard',
6325
- },
6326
- // Module Manifest Provider
6327
- {
6328
- provide: AXP_MODULE_MANIFEST_PROVIDER,
6329
- useValue: DashboardManagementManifest,
6330
- multi: true,
6331
- },
6332
- // Provider references (now using tokens)
6333
- {
6334
- provide: AXP_PERMISSION_DEFINITION_PROVIDER,
6335
- useClass: AXMPermissionDefinitionProvider,
6336
- multi: true,
6337
- },
6338
- {
6339
- provide: AXP_MENU_PROVIDER,
6340
- useClass: AXMMenuProvider,
6341
- multi: true,
6342
- },
6343
- {
6344
- provide: AXP_ENTITY_DEFINITION_LOADER,
6345
- useClass: AXMEntityProvider,
6346
- multi: true,
6347
- },
6348
- provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => import('./acorex-modules-dashboard-management-index-DvY9N8FF.mjs').then((m) => m.AXMDashboardLayoutPageComponentProvider)),
6349
- ], imports: [AXPWidgetCoreModule] }); }
6470
+ });
6471
+ return result.items?.[0] ?? null;
6472
+ }
6473
+ /**
6474
+ * Returns the entity dashboard, creating an empty one when missing.
6475
+ */
6476
+ async ensureEntityDashboard(entityType, entityId, title) {
6477
+ const existing = await this.findEntityDashboard(entityType, entityId);
6478
+ if (existing) {
6479
+ return existing;
6480
+ }
6481
+ const dashboardTitle = title ?? createMultiLanguageString('Dashboard');
6482
+ const createdId = await this.dashboardData.create({
6483
+ title: dashboardTitle,
6484
+ description: '',
6485
+ widgets: [],
6486
+ scope: 'E',
6487
+ scopeRef: buildEntityScopeRef(entityType, entityId),
6488
+ locked: false,
6489
+ isArchived: false,
6490
+ });
6491
+ const created = await this.dashboardData.byKey(createdId);
6492
+ if (!created) {
6493
+ throw new Error('Failed to create entity dashboard');
6494
+ }
6495
+ return created;
6496
+ }
6497
+ /**
6498
+ * Resolves entity type/id from a host entity detail context.
6499
+ */
6500
+ resolveEntityRefFromContext(moduleName, entityName, context) {
6501
+ const entityId = get(context, 'id');
6502
+ if (!moduleName || !entityName || typeof entityId !== 'string' || !entityId.trim()) {
6503
+ return null;
6504
+ }
6505
+ return {
6506
+ entityType: `${moduleName}.${entityName}`,
6507
+ entityId: entityId.trim(),
6508
+ };
6509
+ }
6510
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMEntityDashboardService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
6511
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMEntityDashboardService, providedIn: 'root' }); }
6350
6512
  }
6351
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMDashboardManagementModule, decorators: [{
6352
- type: NgModule,
6353
- args: [{
6354
- imports: [
6355
- AXPWidgetCoreModule,
6356
- // Entity Modules
6357
- ],
6358
- providers: [
6359
- { provide: AXP_WIDGET_DEFINITION_PROVIDER, useClass: AXMDashboardManagementWidgetsProvider, multi: true },
6360
- {
6361
- provide: AXP_HOME_PAGES,
6362
- multi: true,
6363
- useFactory: () => [
6364
- {
6365
- key: 'dashboard',
6366
- title: 'Dashboard',
6367
- route: createAppRoute(),
6368
- },
6369
- ],
6370
- },
6371
- // Module-specific providers (not part of manifest system)
6372
- AXPWidgetsModule,
6373
- {
6374
- provide: AXP_HOME_PAGE_DEFAULT_KEY,
6375
- useValue: 'dashboard',
6376
- },
6377
- // Module Manifest Provider
6378
- {
6379
- provide: AXP_MODULE_MANIFEST_PROVIDER,
6380
- useValue: DashboardManagementManifest,
6381
- multi: true,
6382
- },
6383
- // Provider references (now using tokens)
6384
- {
6385
- provide: AXP_PERMISSION_DEFINITION_PROVIDER,
6386
- useClass: AXMPermissionDefinitionProvider,
6387
- multi: true,
6388
- },
6389
- {
6390
- provide: AXP_MENU_PROVIDER,
6391
- useClass: AXMMenuProvider,
6392
- multi: true,
6393
- },
6394
- {
6395
- provide: AXP_ENTITY_DEFINITION_LOADER,
6396
- useClass: AXMEntityProvider,
6397
- multi: true,
6398
- },
6399
- provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => import('./acorex-modules-dashboard-management-index-DvY9N8FF.mjs').then((m) => m.AXMDashboardLayoutPageComponentProvider)),
6400
- ],
6401
- }]
6513
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMEntityDashboardService, decorators: [{
6514
+ type: Injectable,
6515
+ args: [{ providedIn: 'root' }]
6402
6516
  }] });
6403
6517
 
6404
- async function dashboardFactory() {
6405
- const entityDef = {
6406
- module: RootConfig.module.name,
6407
- name: RootConfig.entities.dashboard.name,
6408
- title: RootConfig.entities.dashboard.title,
6409
- icon: RootConfig.entities.dashboard.icon,
6410
- plugins: [{ name: 'category' }, { name: 'archive' }],
6411
- pages: [
6412
- {
6413
- componentKey: DASHBOARD_LAYOUT_PAGE_COMPONENT_KEY,
6414
- title: '@dashboard-management:dashboards.entities.dashboard.pages.layout.title',
6415
- description: '@dashboard-management:dashboards.entities.dashboard.pages.layout.description',
6416
- icon: 'fa-light fa-table-layout',
6417
- layout: { order: 1, position: 'after' },
6418
- },
6419
- ],
6420
- formats: {
6421
- individual: RootConfig.entities.dashboard.title,
6422
- plural: RootConfig.entities.dashboard.titlePlural,
6423
- displayName: '@general:terms.interface.configuration',
6424
- searchResult: {
6425
- title: '{{ title }}',
6426
- description: RootConfig.module.title,
6427
- },
6428
- },
6429
- relatedEntities: [],
6430
- groups: [
6431
- {
6432
- id: 'section',
6433
- title: RootConfig.entities.dashboard.title,
6434
- },
6435
- {
6436
- id: 'access',
6437
- title: '@dashboard-management:dashboards.entities.dashboard.groups.access.title',
6438
- },
6439
- ],
6440
- properties: [
6441
- {
6442
- name: 'id',
6443
- title: 'ID',
6444
- groupId: 'section',
6445
- schema: { dataType: 'uuid', visible: false, nullable: false, readonly: true, unique: { enabled: true } },
6446
- },
6447
- {
6448
- name: 'title',
6449
- title: '@general:terms.common.title',
6450
- groupId: 'section',
6451
- options: {
6452
- sort: {
6453
- enabled: true,
6454
- },
6455
- filter: {
6456
- advance: {
6457
- enabled: true,
6458
- },
6459
- inline: {
6460
- enabled: true,
6461
- },
6462
- },
6463
- },
6464
- schema: {
6465
- dataType: 'string',
6466
- interface: {
6467
- type: AXPWidgetsList.Editors.TextBox,
6468
- options: {
6469
- multiLanguage: true,
6470
- placeholder: '@general:terms.common.title',
6471
- },
6472
- },
6473
- },
6474
- validations: [
6475
- {
6476
- rule: 'required',
6477
- },
6478
- ],
6479
- },
6480
- {
6481
- name: 'description',
6482
- title: '@dashboard-management:dashboards.entities.dashboard.fields.description.title',
6483
- groupId: 'section',
6484
- options: {
6485
- sort: {
6486
- enabled: false,
6487
- },
6488
- filter: {
6489
- advance: {
6490
- enabled: false,
6491
- },
6492
- inline: {
6493
- enabled: false,
6494
- },
6495
- },
6496
- },
6497
- schema: {
6498
- dataType: 'string',
6499
- interface: {
6500
- type: AXPWidgetsList.Editors.LargeTextBox,
6501
- options: {
6502
- rows: 3,
6503
- multiLanguage: true,
6504
- placeholder: '@general:terms.common.description',
6505
- },
6506
- },
6507
- },
6508
- },
6509
- {
6510
- name: 'scope',
6511
- title: '@dashboard-management:dashboards.entities.dashboard.fields.scope.title',
6512
- groupId: 'access',
6513
- options: {
6514
- sort: { enabled: true },
6515
- filter: { advance: { enabled: true }, inline: { enabled: true } },
6516
- },
6517
- schema: {
6518
- dataType: 'string',
6519
- visible: false,
6520
- interface: {
6521
- type: AXPWidgetsList.Editors.SelectBox,
6522
- options: {
6523
- valueField: 'id',
6524
- dataSource: [
6525
- {
6526
- id: 'T',
6527
- title: '@dashboard-management:dashboards.entities.dashboard.fields.scope.options.tenant',
6528
- },
6529
- {
6530
- id: 'U',
6531
- title: '@dashboard-management:dashboards.entities.dashboard.fields.scope.options.personal',
6532
- },
6533
- ],
6534
- },
6535
- },
6536
- },
6537
- },
6538
- {
6539
- name: 'roleIds',
6540
- title: '@dashboard:roles',
6541
- groupId: 'access',
6542
- schema: {
6543
- dataType: 'object',
6544
- visible: `{{ !context.eval("scope") || context.eval("scope") === "T" }}`,
6545
- interface: {
6546
- type: AXPWidgetsList.Editors.LookupBox,
6547
- options: {
6548
- entity: 'SecurityManagement.Role',
6549
- multiple: true,
6550
- look: 'select',
6551
- },
6552
- },
6553
- },
6554
- },
6555
- ],
6556
- columns: [{ name: 'title' }, { name: 'description' }],
6557
- interfaces: {
6558
- master: {
6559
- create: {
6560
- sections: [{ id: 'section' }, { id: 'access' }],
6561
- properties: [
6562
- { name: 'title', layout: { positions: { lg: { colSpan: 6, order: 1 } } } },
6563
- { name: 'description', layout: { positions: { lg: { colSpan: 12, order: 2 } } } },
6564
- { name: 'roleIds', layout: { positions: { lg: { colSpan: 12, order: 3 } } } },
6565
- ],
6566
- },
6567
- update: {
6568
- sections: [{ id: 'section' }, { id: 'access' }],
6569
- properties: [
6570
- { name: 'title', layout: { positions: { lg: { colSpan: 6, order: 1 } } } },
6571
- { name: 'description', layout: { positions: { lg: { colSpan: 12, order: 2 } } } },
6572
- { name: 'roleIds', layout: { positions: { lg: { colSpan: 12, order: 3 } } } },
6573
- ],
6574
- },
6575
- single: {
6576
- title: '{{title}}',
6577
- sections: [{ id: 'section', layout: { positions: { lg: { colSpan: 12 } } } }, { id: 'access' }],
6578
- properties: [
6579
- { name: 'title', layout: { positions: { lg: { colSpan: 6, order: 1 } } } },
6580
- { name: 'description', layout: { positions: { lg: { colSpan: 12, order: 2 } } } },
6581
- { name: 'roleIds', layout: { positions: { lg: { colSpan: 12, order: 3 } } } },
6582
- ],
6583
- actions: [...entityMasterRecordActions()],
6584
- },
6585
- list: {
6586
- actions: [...entityMasterCrudActions()],
6587
- views: [
6588
- createQueryView('tenant', '@dashboard-management:dashboards.entities.dashboard.views.tenant', true, {
6589
- sorts: [{ name: 'title', dir: 'asc' }],
6590
- conditions: [{ name: 'scope', operator: { type: 'equal' }, value: 'T' }],
6591
- }),
6592
- ],
6593
- },
6594
- },
6595
- },
6596
- };
6597
- return entityDef;
6598
- }
6599
-
6600
- //#endregion
6601
-
6602
- var index = /*#__PURE__*/Object.freeze({
6603
- __proto__: null,
6604
- dashboardFactory: dashboardFactory
6605
- });
6606
-
6607
- // Entity Services
6608
- // Entity Modules
6609
-
6610
6518
  /** When true (provided on the dashboard layout entity tab), the store skips the default list query effect. */
6611
6519
  const DASHBOARD_LAYOUT_ENTITY_MODE = new InjectionToken('DASHBOARD_LAYOUT_ENTITY_MODE');
6612
6520
 
6521
+ /** When true (entity dashboard plugin), layout and widgets are view-only. */
6522
+ const DASHBOARD_READONLY_MODE = new InjectionToken('DASHBOARD_READONLY_MODE');
6523
+
6613
6524
  class AXMConfigurationPopup extends AXBasePageComponent {
6614
6525
  constructor() {
6615
6526
  super(...arguments);
@@ -6676,7 +6587,9 @@ class AXMDashboardPopupService {
6676
6587
  this.translateService = inject(AXTranslationService);
6677
6588
  this.layoutBuilder = inject(AXPLayoutBuilderService);
6678
6589
  this.entityService = inject(AXPEntityService);
6679
- this.roleService = this.entityService.withEntity(RootConfig$1.module.name, RootConfig$1.entities.roles.name).data();
6590
+ this.roleService = this.entityService
6591
+ .withEntity(RootConfig$1.module.name, RootConfig$1.entities.roles.name)
6592
+ .data();
6680
6593
  this.sessionService = inject(AXPSessionService);
6681
6594
  }
6682
6595
  async generateDashboardLayout(data, isAdmin, dialogOptions) {
@@ -6696,7 +6609,7 @@ class AXMDashboardPopupService {
6696
6609
  .setContext({
6697
6610
  title: this.normalizeTitleForFormContext(data?.title),
6698
6611
  description: this.normalizeDescriptionForFormContext(data?.description),
6699
- selectedRoleIds: data?.roleIds ?? [],
6612
+ selectedRoleIds: readScopeRoleIds(data?.scopeRef),
6700
6613
  locked: data?.locked ?? false,
6701
6614
  isAdmin,
6702
6615
  })
@@ -6749,14 +6662,19 @@ class AXMDashboardPopupService {
6749
6662
  }
6750
6663
  const formData = context;
6751
6664
  const now = new Date();
6752
- const userId = this.sessionService.user?.id;
6665
+ const userId = this.sessionService.user?.id ?? '';
6666
+ const tenantId = this.sessionService.tenant?.id ?? '';
6667
+ const scope = (data?.scope ?? (isAdmin ? 'T' : 'U'));
6668
+ const roleIds = showRoleField
6669
+ ? (formData['selectedRoleIds'] ?? [])
6670
+ : readScopeRoleIds(data?.scopeRef);
6753
6671
  return {
6754
6672
  ...data,
6755
6673
  title: this.normalizeTitleFromFormSubmit(formData['title']),
6756
6674
  description: this.normalizeDescriptionFromFormSubmit(formData['description']),
6757
- roleIds: showRoleField ? (formData['selectedRoleIds'] ?? []) : data?.roleIds,
6675
+ scopeRef: scope === 'T' ? buildTenantScopeRef(tenantId, roleIds) : buildUserScopeRef(userId),
6758
6676
  locked: this.normalizeBooleanInput(formData['locked'], data?.locked ?? false),
6759
- scope: (data?.scope ?? (isAdmin ? 'T' : 'U')),
6677
+ scope,
6760
6678
  createdBy: userId,
6761
6679
  createdAt: now,
6762
6680
  updatedBy: userId,
@@ -6852,6 +6770,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
6852
6770
  }] });
6853
6771
 
6854
6772
  //#region ---- Imports ----
6773
+ const readTenantId = (sessionService) => {
6774
+ const tenantId = sessionService.tenant?.id;
6775
+ return typeof tenantId === 'string' && tenantId.trim() ? tenantId.trim() : undefined;
6776
+ };
6855
6777
  //#endregion
6856
6778
  //#region ---- Utility Functions ----
6857
6779
  /** Width threshold for switching between lg (12 col) and md (6 col) breakpoints */
@@ -6912,6 +6834,7 @@ const createInitialState = () => ({
6912
6834
  currentBreakpoint: getBreakpointFromWidth(),
6913
6835
  isBreakpointTransitioning: false,
6914
6836
  entityDetailLayoutLock: false,
6837
+ readonly: false,
6915
6838
  });
6916
6839
  /**
6917
6840
  * Migrates a widget config from the old flat format to the new per-breakpoint format.
@@ -6946,8 +6869,7 @@ const modelToDashboardLayout = (model) => ({
6946
6869
  title: model.title,
6947
6870
  description: model.description,
6948
6871
  widgets: (model.widgets || []).map((widget) => migrateWidgetConfig(widget)),
6949
- createdBy: model.userId ?? model.auditInfo?.created?.by?.id,
6950
- roleIds: model.roleIds,
6872
+ createdBy: readScopeUserId(model.scopeRef) ?? model.auditInfo?.created?.by?.id,
6951
6873
  isArchived: model.isArchived,
6952
6874
  archivedAt: model.archivedAt,
6953
6875
  locked: model.locked,
@@ -6955,6 +6877,10 @@ const modelToDashboardLayout = (model) => ({
6955
6877
  updatedAt: model.auditInfo?.updated?.at,
6956
6878
  updatedBy: model.auditInfo?.updated?.by?.id,
6957
6879
  scope: model.scope,
6880
+ scopeRef: normalizeDashboardScopeRef(model.scope, model.scopeRef, {
6881
+ userId: readScopeUserId(model.scopeRef) ?? model.auditInfo?.created?.by?.id,
6882
+ roleIds: readScopeRoleIds(model.scopeRef),
6883
+ }),
6958
6884
  categoryIds: model.categoryIds,
6959
6885
  });
6960
6886
  /**
@@ -6965,12 +6891,15 @@ const dashboardLayoutToModel = (layout) => ({
6965
6891
  title: layout.title,
6966
6892
  description: layout.description ?? '',
6967
6893
  widgets: layout.widgets,
6968
- userId: layout.createdBy,
6969
- roleIds: layout.roleIds,
6970
6894
  isArchived: layout.isArchived,
6971
6895
  archivedAt: layout.archivedAt,
6972
6896
  locked: layout.locked,
6973
6897
  categoryIds: layout.categoryIds,
6898
+ scope: layout.scope,
6899
+ scopeRef: normalizeDashboardScopeRef(layout.scope, layout.scopeRef, {
6900
+ userId: layout.createdBy,
6901
+ roleIds: readScopeRoleIds(layout.scopeRef),
6902
+ }),
6974
6903
  auditInfo: {
6975
6904
  created: layout.createdAt
6976
6905
  ? { at: layout.createdAt, by: layout.createdBy ? { id: layout.createdBy, type: 'user' } : undefined }
@@ -6979,7 +6908,6 @@ const dashboardLayoutToModel = (layout) => ({
6979
6908
  ? { at: layout.updatedAt, by: layout.updatedBy ? { id: layout.updatedBy, type: 'user' } : undefined }
6980
6909
  : undefined,
6981
6910
  },
6982
- scope: layout.scope,
6983
6911
  });
6984
6912
  /**
6985
6913
  * Safely reads the current user id from the session service.
@@ -7016,8 +6944,8 @@ const extractUserRoleIds = (user) => {
7016
6944
  const hasMatchingRole = (dashboard, userRoleIds) => {
7017
6945
  if (userRoleIds.length === 0)
7018
6946
  return false;
7019
- const roleIds = dashboard.roleIds;
7020
- return Array.isArray(roleIds) && roleIds.length > 0 && userRoleIds.some((id) => roleIds.includes(id));
6947
+ const roleIds = readScopeRoleIds(dashboard.scopeRef);
6948
+ return roleIds.length > 0 && userRoleIds.some((id) => roleIds.includes(id));
7021
6949
  };
7022
6950
  /**
7023
6951
  * Determines whether a personal dashboard belongs to the signed-in user.
@@ -7038,10 +6966,12 @@ const isTenantDashboardVisibleForUser = (dashboard, userRoleIds) => {
7038
6966
  * Computes effective layout options based on device, lock, admin and role restrictions.
7039
6967
  * Always derives drag/resize state from the dashboard model — never from base options.
7040
6968
  */
7041
- const deriveLayoutOptions = (baseOptions, dashboard, isAdmin, isDesktop) => {
6969
+ const deriveLayoutOptions = (baseOptions, dashboard, isAdmin, isDesktop, readonly) => {
7042
6970
  const { disableDrag: _dd, disableResize: _dr, ...cleanBase } = baseOptions;
7043
6971
  if (!dashboard)
7044
6972
  return cleanBase;
6973
+ if (readonly)
6974
+ return { ...cleanBase, disableDrag: true, disableResize: true };
7045
6975
  if (isAdmin)
7046
6976
  return cleanBase;
7047
6977
  if (dashboard.locked === true || dashboard.scope === 'T') {
@@ -7052,9 +6982,11 @@ const deriveLayoutOptions = (baseOptions, dashboard, isAdmin, isDesktop) => {
7052
6982
  /**
7053
6983
  * Checks if a widget is locked for the current user based on dashboard and role context.
7054
6984
  */
7055
- const isWidgetLockedForUser = (dashboard, isAdmin, userRoleIds) => {
6985
+ const isWidgetLockedForUser = (dashboard, isAdmin, userRoleIds, readonly) => {
7056
6986
  if (!dashboard)
7057
6987
  return false;
6988
+ if (readonly)
6989
+ return true;
7058
6990
  if (isAdmin)
7059
6991
  return false;
7060
6992
  if (dashboard.locked === true)
@@ -7064,9 +6996,11 @@ const isWidgetLockedForUser = (dashboard, isAdmin, userRoleIds) => {
7064
6996
  /**
7065
6997
  * Determines if a widget can be configured by the current user.
7066
6998
  */
7067
- const canConfigureWidgetForUser = (dashboard, isAdmin, userRoleIds, widgetHasConfiguration) => {
6999
+ const canConfigureWidgetForUser = (dashboard, isAdmin, userRoleIds, widgetHasConfiguration, readonly) => {
7068
7000
  if (!dashboard)
7069
7001
  return true;
7002
+ if (readonly)
7003
+ return false;
7070
7004
  if (isAdmin)
7071
7005
  return widgetHasConfiguration;
7072
7006
  if (dashboard.locked === true)
@@ -7086,6 +7020,9 @@ const filterDashboardsForUser = (dashboards, isAdmin, userId, userRoleIds) => {
7086
7020
  return [];
7087
7021
  }
7088
7022
  return dashboards.filter((d) => {
7023
+ if (d.scope === 'E') {
7024
+ return false;
7025
+ }
7089
7026
  const isOwnedPersonalDashboard = isPersonalDashboardOwnedByUser(d, userId);
7090
7027
  const isRoleMatchedTenantDashboard = isTenantDashboardVisibleForUser(d, userRoleIds);
7091
7028
  return isOwnedPersonalDashboard || isRoleMatchedTenantDashboard;
@@ -7112,7 +7049,7 @@ withComputed((state, deviceService = inject(AXPDeviceService)) => ({
7112
7049
  // Dynamically set column count based on the current breakpoint
7113
7050
  const bp = state.currentBreakpoint();
7114
7051
  const optionsWithColumn = { ...baseOptions, column: getColumnsForBreakpoint(bp) };
7115
- return deriveLayoutOptions(optionsWithColumn, currentDashboard || undefined, state.isAdmin(), isDesktop);
7052
+ return deriveLayoutOptions(optionsWithColumn, currentDashboard || undefined, state.isAdmin(), isDesktop, state.readonly());
7116
7053
  }),
7117
7054
  /**
7118
7055
  * Returns the current dashboard's widgets with their resolved breakpoint options.
@@ -7132,11 +7069,11 @@ withComputed((state, deviceService = inject(AXPDeviceService)) => ({
7132
7069
  canConfigureWidget: computed(() => (widget) => {
7133
7070
  const currentDashboard = state.dashboards().find((dashboard) => dashboard.id === state.currentDashboardId());
7134
7071
  const widgetHasConfiguration = widget.node?.options?.['hasConfiguration'] ?? true;
7135
- return canConfigureWidgetForUser(currentDashboard || undefined, state.isAdmin(), state.userRoleIds(), widgetHasConfiguration);
7072
+ return canConfigureWidgetForUser(currentDashboard || undefined, state.isAdmin(), state.userRoleIds(), widgetHasConfiguration, state.readonly());
7136
7073
  }),
7137
7074
  isWidgetLocked: computed(() => (widget) => {
7138
7075
  const currentDashboard = state.dashboards().find((dashboard) => dashboard.id === state.currentDashboardId());
7139
- return isWidgetLockedForUser(currentDashboard || undefined, state.isAdmin(), state.userRoleIds());
7076
+ return isWidgetLockedForUser(currentDashboard || undefined, state.isAdmin(), state.userRoleIds(), state.readonly());
7140
7077
  }),
7141
7078
  })),
7142
7079
  //#endregion
@@ -7238,13 +7175,13 @@ withMethods((store, dashboardPopup = inject(AXMDashboardPopupService), dialogSer
7238
7175
  operator: null,
7239
7176
  filters: [
7240
7177
  { field: 'scope', operator: { type: 'equal' }, value: 'U' },
7241
- { field: 'userId', operator: { type: 'equal' }, value: userId },
7178
+ { field: 'scopeRef.userId', operator: { type: 'equal' }, value: userId },
7242
7179
  ],
7243
7180
  });
7244
7181
  }
7245
7182
  if (userRoleIds.length > 0) {
7246
7183
  const roleMatchFilters = userRoleIds.map((roleId) => ({
7247
- field: 'roleIds',
7184
+ field: 'scopeRef.roleIds',
7248
7185
  operator: { type: 'contains' },
7249
7186
  value: roleId,
7250
7187
  }));
@@ -7321,14 +7258,19 @@ withMethods((store, dashboardPopup = inject(AXMDashboardPopupService), dialogSer
7321
7258
  if (!newDashboard)
7322
7259
  return;
7323
7260
  const userId = readUserId(sessionService);
7261
+ const tenantId = readTenantId(sessionService);
7324
7262
  const now = new Date();
7263
+ const scope = store.isUserAdmin() ? 'T' : 'U';
7325
7264
  const dashboardWithMetadata = {
7326
7265
  ...newDashboard,
7327
7266
  createdBy: userId,
7328
7267
  createdAt: now,
7329
7268
  updatedBy: userId,
7330
7269
  updatedAt: now,
7331
- scope: store.isUserAdmin() ? 'T' : 'U',
7270
+ scope,
7271
+ scopeRef: scope === 'T'
7272
+ ? buildTenantScopeRef(tenantId ?? '', readScopeRoleIds(newDashboard.scopeRef))
7273
+ : buildUserScopeRef(userId ?? ''),
7332
7274
  widgets: [],
7333
7275
  };
7334
7276
  const dashboardModel = dashboardLayoutToModel(dashboardWithMetadata);
@@ -7364,7 +7306,7 @@ withMethods((store, dashboardPopup = inject(AXMDashboardPopupService), dialogSer
7364
7306
  const editedDashboard = await dashboardPopup.generateDashboardLayout({
7365
7307
  title: currentDashboard.title,
7366
7308
  description: currentDashboard.description,
7367
- roleIds: currentDashboard.roleIds,
7309
+ scopeRef: currentDashboard.scopeRef,
7368
7310
  scope: currentDashboard.scope,
7369
7311
  isArchived: currentDashboard.isArchived,
7370
7312
  locked: currentDashboard.locked,
@@ -7405,6 +7347,7 @@ withMethods((store, dashboardPopup = inject(AXMDashboardPopupService), dialogSer
7405
7347
  return false;
7406
7348
  try {
7407
7349
  const userId = readUserId(sessionService);
7350
+ const tenantId = readTenantId(sessionService);
7408
7351
  const now = new Date();
7409
7352
  const updatedDashboard = {
7410
7353
  ...currentDashboard,
@@ -7418,7 +7361,9 @@ withMethods((store, dashboardPopup = inject(AXMDashboardPopupService), dialogSer
7418
7361
  : typeof form.description === 'object'
7419
7362
  ? form.description
7420
7363
  : form.description.toString().trim(),
7421
- roleIds: form.roleIds ?? [],
7364
+ scopeRef: currentDashboard.scope === 'T'
7365
+ ? buildTenantScopeRef(tenantId ?? readScopeTenantId(currentDashboard.scopeRef) ?? '', form.roleIds ?? [])
7366
+ : currentDashboard.scopeRef,
7422
7367
  isArchived: Boolean(form.isArchived),
7423
7368
  locked: Boolean(form.locked),
7424
7369
  scope: currentDashboard.scope,
@@ -7447,6 +7392,8 @@ withMethods((store, dashboardPopup = inject(AXMDashboardPopupService), dialogSer
7447
7392
  * Adds selected widgets to the current dashboard and saves layout.
7448
7393
  */
7449
7394
  async addWidget() {
7395
+ if (store.readonly())
7396
+ return;
7450
7397
  if (!store.selectedDashboard()) {
7451
7398
  console.warn('No current dashboard selected');
7452
7399
  return;
@@ -7567,6 +7514,8 @@ withMethods((store, dashboardPopup = inject(AXMDashboardPopupService), dialogSer
7567
7514
  * Removes a widget from the specified dashboard and persists the change.
7568
7515
  */
7569
7516
  async removeWidget(dashboardId, widgetId) {
7517
+ if (store.readonly())
7518
+ return;
7570
7519
  const currentDashboard = store.dashboards().find((d) => d.id === dashboardId);
7571
7520
  if (!currentDashboard)
7572
7521
  return;
@@ -7601,6 +7550,8 @@ withMethods((store, dashboardPopup = inject(AXMDashboardPopupService), dialogSer
7601
7550
  * Persists immediately with queued writes to prevent concurrent save conflicts.
7602
7551
  */
7603
7552
  onGridChange(event) {
7553
+ if (store.readonly())
7554
+ return;
7604
7555
  if (!store.selectedDashboard())
7605
7556
  return;
7606
7557
  // Skip saves during breakpoint transitions to avoid persisting auto-reflowed layouts
@@ -7656,6 +7607,8 @@ withMethods((store, dashboardPopup = inject(AXMDashboardPopupService), dialogSer
7656
7607
  * Applies widget configuration changes returned from popup.
7657
7608
  */
7658
7609
  async handlePopupConfiguration(widgetNode) {
7610
+ if (store.readonly())
7611
+ return;
7659
7612
  if (!store.selectedDashboard())
7660
7613
  return;
7661
7614
  try {
@@ -7687,6 +7640,8 @@ withMethods((store, dashboardPopup = inject(AXMDashboardPopupService), dialogSer
7687
7640
  * Updates widget value (defaultValue) and persists changes.
7688
7641
  */
7689
7642
  async handleValueChanged(widgetNode, data) {
7643
+ if (store.readonly())
7644
+ return;
7690
7645
  if (!store.selectedDashboard())
7691
7646
  return;
7692
7647
  if (!deviceService.isDesktopDevice()) {
@@ -7718,6 +7673,8 @@ withMethods((store, dashboardPopup = inject(AXMDashboardPopupService), dialogSer
7718
7673
  * Merges widget options with provided data and persists changes.
7719
7674
  */
7720
7675
  async handleOptionsChanged(widgetNode, data) {
7676
+ if (store.readonly())
7677
+ return;
7721
7678
  if (!store.selectedDashboard())
7722
7679
  return;
7723
7680
  try {
@@ -7775,7 +7732,7 @@ withMethods((store, dashboardPopup = inject(AXMDashboardPopupService), dialogSer
7775
7732
  }
7776
7733
  : layout;
7777
7734
  patchState(store, {
7778
- isAdmin: true,
7735
+ isAdmin: !store.readonly(),
7779
7736
  isLoading: false,
7780
7737
  allDashboards: [hydratedLayout],
7781
7738
  dashboards: [hydratedLayout],
@@ -7827,17 +7784,18 @@ withMethods((store, dashboardPopup = inject(AXMDashboardPopupService), dialogSer
7827
7784
  }),
7828
7785
  //#endregion
7829
7786
  //#region ---- Hooks ----
7830
- withHooks((store, entityLayoutTab = inject(DASHBOARD_LAYOUT_ENTITY_MODE, { optional: true })) => ({
7787
+ withHooks((store, entityLayoutTab = inject(DASHBOARD_LAYOUT_ENTITY_MODE, { optional: true }), readonlyMode = inject(DASHBOARD_READONLY_MODE, { optional: true })) => ({
7831
7788
  onInit() {
7832
7789
  if (entityLayoutTab === true) {
7833
7790
  patchState(store, { entityDetailLayoutLock: true });
7834
7791
  }
7792
+ if (readonlyMode === true) {
7793
+ patchState(store, { readonly: true });
7794
+ }
7835
7795
  },
7836
7796
  })));
7837
7797
  //#endregion
7838
7798
 
7839
- //#endregion
7840
-
7841
7799
  class AXMDashboardWidgetWrapperComponent {
7842
7800
  constructor() {
7843
7801
  this.title = input(null, ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
@@ -7919,7 +7877,7 @@ class AXMDashboardGridLayoutSectionComponent {
7919
7877
  }
7920
7878
  }
7921
7879
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMDashboardGridLayoutSectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7922
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMDashboardGridLayoutSectionComponent, isStandalone: true, selector: "axm-dashboard-grid-layout-section", inputs: { widgetsContext: { classPropertyName: "widgetsContext", publicName: "widgetsContext", isSignal: true, isRequired: false, transformFunction: null }, loadingVariant: { classPropertyName: "loadingVariant", publicName: "loadingVariant", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { addWidget: "addWidget" }, ngImport: i0, template: "<div class=\"axm-dashboard-grid-layout-section ax-flex ax-flex-col ax-h-full ax-min-h-0 ax-w-full\">\n @if (store.isLoading()) {\n @if (loadingVariant() === 'overlay') {\n <div\n class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-full ax-w-full ax-absolute ax-z-10 ax-bg-white/80\"\n >\n <ax-loading></ax-loading>\n <p class=\"ax-mt-3 ax-text-gray-600\">{{ '@dashboard:loading' | translate | async }}</p>\n </div>\n } @else {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-full ax-w-full ax-flex-1\">\n <ax-loading></ax-loading>\n <p class=\"ax-mt-3 ax-text-gray-600\">{{ '@dashboard:loading' | translate | async }}</p>\n </div>\n }\n } @else if (!store.selectedDashboard()?.widgets?.length) {\n <axp-state-message\n icon=\"fa-light fa-shapes\"\n [title]=\"'@dashboard:no-widgets.title'\"\n [description]=\"'@dashboard:no-widgets.description'\"\n >\n <div slot=\"actions\">\n <button type=\"button\" (click)=\"addWidget.emit()\" class=\"ax-underline\">\n {{ '@dashboard:add-widget' | translate | async }}\n </button>\n </div>\n </axp-state-message>\n } @else {\n <axp-widgets-container [context]=\"widgetsContext()\">\n <ax-grid-layout-container\n class=\"ax-w-full dark:[--ax-comp-grid-layout-stack-item-content-bg-color:var(--ax-sys-color-lighter-surface)] [--ax-comp-grid-layout-stack-item-content-bg-color:var(--ax-sys-color-lightest-surface)]\"\n [options]=\"store.currentLayoutOptions()\"\n (onChange)=\"store.onGridChange($event)\"\n >\n @for (widget of store.currentWidgets(); track widget.config.id) {\n <ax-grid-layout-widget [options]=\"widget.resolvedOptions\">\n @let title = (widget.node?.options?.['title'] ?? widget.config.title) | translate | async;\n @let isHeaderTitleVisible = widget.node?.meta?.['title']?.['visible'] ?? true;\n\n <axm-dashboard-widget-wrapper\n [title]=\"isHeaderTitleVisible ? title! : null\"\n [hasConfiguration]=\"store.canConfigureWidget()(widget)\"\n [isLocked]=\"store.isWidgetLocked()(widget)\"\n (onDelete)=\"confirmWidgetDelete(store.selectedDashboard()!.id, widget.config.id!)\"\n (onConfiguration)=\"store.handlePopupConfiguration(widget.node!)\"\n (onValueChanged)=\"store.handleValueChanged(widget?.node!, $event)\"\n (onOptionsChanged)=\"store.handleOptionsChanged(widget?.node!, $event)\"\n >\n @if (widget.node) {\n <ng-container axp-widget-renderer [node]=\"widget.node\" [mode]=\"'view'\"></ng-container>\n }\n </axm-dashboard-widget-wrapper>\n </ax-grid-layout-widget>\n }\n </ax-grid-layout-container>\n </axp-widgets-container>\n }\n</div>\n", styles: ["axm-dashboard-grid-layout-section ax-grid-layout-widget .grid-stack-item-content{border-radius:.5rem!important;border-width:1px!important;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05) !important;--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important;background-color:rgb(var(--ax-sys-color-lightest-surface))!important;color:rgb(var(--ax-sys-color-on-lightest-surface))!important;border-color:rgb(var(--ax-sys-color-border-lightest-surface))!important}axm-dashboard-grid-layout-section ax-grid-layout-widget .grid-stack-item-content:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-lighter-surface))!important;color:rgb(var(--ax-sys-color-on-lighter-surface))!important;border-color:rgb(var(--ax-sys-color-border-lighter-surface))!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i1$4.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXGridLayoutBuilderModule }, { kind: "component", type: i2$3.AXGridLayoutContainerComponent, selector: "ax-grid-layout-container", inputs: ["options", "isEmpty"], outputs: ["onAdded", "onRemoved", "onWidgetChange", "onChange", "onRender", "isEmptyChange"] }, { kind: "component", type: i2$3.AXGridLayoutWidgetComponent, selector: "ax-grid-layout-widget", inputs: ["options"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "component", type: i3$2.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "functions"], outputs: ["onContextChanged"] }, { kind: "directive", type: i3$2.AXPWidgetRendererDirective, selector: "[axp-widget-renderer]", inputs: ["parentNode", "index", "mode", "node"], outputs: ["onOptionsChanged", "onValueChanged", "onLoad"], exportAs: ["widgetRenderer"] }, { kind: "component", type: AXPStateMessageComponent, selector: "axp-state-message", inputs: ["mode", "icon", "title", "description", "look"] }, { kind: "component", type: AXMDashboardWidgetWrapperComponent, selector: "axm-dashboard-widget-wrapper", inputs: ["title", "hasConfiguration", "isLocked"], outputs: ["onDelete", "onConfiguration", "onValueChanged", "onOptionsChanged"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
7880
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMDashboardGridLayoutSectionComponent, isStandalone: true, selector: "axm-dashboard-grid-layout-section", inputs: { widgetsContext: { classPropertyName: "widgetsContext", publicName: "widgetsContext", isSignal: true, isRequired: false, transformFunction: null }, loadingVariant: { classPropertyName: "loadingVariant", publicName: "loadingVariant", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { addWidget: "addWidget" }, ngImport: i0, template: "<div class=\"axm-dashboard-grid-layout-section ax-flex ax-flex-col ax-h-full ax-min-h-0 ax-w-full\">\n @if (store.isLoading()) {\n @if (loadingVariant() === 'overlay') {\n <div\n class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-full ax-w-full ax-absolute ax-z-10 ax-bg-white/80\"\n >\n <ax-loading></ax-loading>\n <p class=\"ax-mt-3 ax-text-gray-600\">{{ '@dashboard:loading' | translate | async }}</p>\n </div>\n } @else {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-full ax-w-full ax-flex-1\">\n <ax-loading></ax-loading>\n <p class=\"ax-mt-3 ax-text-gray-600\">{{ '@dashboard:loading' | translate | async }}</p>\n </div>\n }\n } @else if (!store.selectedDashboard()?.widgets?.length) {\n <axp-state-message\n icon=\"fa-light fa-shapes\"\n [title]=\"'@dashboard:no-widgets.title'\"\n [description]=\"'@dashboard:no-widgets.description'\"\n >\n @if (!store.readonly()) {\n <div slot=\"actions\">\n <button type=\"button\" (click)=\"addWidget.emit()\" class=\"ax-underline\">\n {{ '@dashboard:add-widget' | translate | async }}\n </button>\n </div>\n }\n </axp-state-message>\n } @else {\n <axp-widgets-container [context]=\"widgetsContext()\">\n <ax-grid-layout-container\n class=\"ax-w-full dark:[--ax-comp-grid-layout-stack-item-content-bg-color:var(--ax-sys-color-lighter-surface)] [--ax-comp-grid-layout-stack-item-content-bg-color:var(--ax-sys-color-lightest-surface)]\"\n [options]=\"store.currentLayoutOptions()\"\n (onChange)=\"store.onGridChange($event)\"\n >\n @for (widget of store.currentWidgets(); track widget.config.id) {\n <ax-grid-layout-widget [options]=\"widget.resolvedOptions\">\n @let title = (widget.node?.options?.['title'] ?? widget.config.title) | translate | async;\n @let isHeaderTitleVisible = widget.node?.meta?.['title']?.['visible'] ?? true;\n\n <axm-dashboard-widget-wrapper\n [title]=\"isHeaderTitleVisible ? title! : null\"\n [hasConfiguration]=\"store.canConfigureWidget()(widget)\"\n [isLocked]=\"store.isWidgetLocked()(widget)\"\n (onDelete)=\"confirmWidgetDelete(store.selectedDashboard()!.id, widget.config.id!)\"\n (onConfiguration)=\"store.handlePopupConfiguration(widget.node!)\"\n (onValueChanged)=\"store.handleValueChanged(widget?.node!, $event)\"\n (onOptionsChanged)=\"store.handleOptionsChanged(widget?.node!, $event)\"\n >\n @if (widget.node) {\n <ng-container axp-widget-renderer [node]=\"widget.node\" [mode]=\"'view'\"></ng-container>\n }\n </axm-dashboard-widget-wrapper>\n </ax-grid-layout-widget>\n }\n </ax-grid-layout-container>\n </axp-widgets-container>\n }\n</div>\n", styles: ["axm-dashboard-grid-layout-section ax-grid-layout-widget .grid-stack-item-content{border-radius:.5rem!important;border-width:1px!important;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05) !important;--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important;background-color:rgb(var(--ax-sys-color-lightest-surface))!important;color:rgb(var(--ax-sys-color-on-lightest-surface))!important;border-color:rgb(var(--ax-sys-color-border-lightest-surface))!important}axm-dashboard-grid-layout-section ax-grid-layout-widget .grid-stack-item-content:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-lighter-surface))!important;color:rgb(var(--ax-sys-color-on-lighter-surface))!important;border-color:rgb(var(--ax-sys-color-border-lighter-surface))!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i1$4.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXGridLayoutBuilderModule }, { kind: "component", type: i2$3.AXGridLayoutContainerComponent, selector: "ax-grid-layout-container", inputs: ["options", "isEmpty"], outputs: ["onAdded", "onRemoved", "onWidgetChange", "onChange", "onRender", "isEmptyChange"] }, { kind: "component", type: i2$3.AXGridLayoutWidgetComponent, selector: "ax-grid-layout-widget", inputs: ["options"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "component", type: i3$2.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "functions"], outputs: ["onContextChanged"] }, { kind: "directive", type: i3$2.AXPWidgetRendererDirective, selector: "[axp-widget-renderer]", inputs: ["parentNode", "index", "mode", "node"], outputs: ["onOptionsChanged", "onValueChanged", "onLoad"], exportAs: ["widgetRenderer"] }, { kind: "component", type: AXPStateMessageComponent, selector: "axp-state-message", inputs: ["mode", "icon", "title", "description", "titleParams", "descriptionParams", "look"] }, { kind: "component", type: AXMDashboardWidgetWrapperComponent, selector: "axm-dashboard-widget-wrapper", inputs: ["title", "hasConfiguration", "isLocked"], outputs: ["onDelete", "onConfiguration", "onValueChanged", "onOptionsChanged"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
7923
7881
  }
7924
7882
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMDashboardGridLayoutSectionComponent, decorators: [{
7925
7883
  type: Component,
@@ -7932,9 +7890,687 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
7932
7890
  AXPWidgetCoreModule,
7933
7891
  AXPStateMessageComponent,
7934
7892
  AXMDashboardWidgetWrapperComponent,
7935
- ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div class=\"axm-dashboard-grid-layout-section ax-flex ax-flex-col ax-h-full ax-min-h-0 ax-w-full\">\n @if (store.isLoading()) {\n @if (loadingVariant() === 'overlay') {\n <div\n class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-full ax-w-full ax-absolute ax-z-10 ax-bg-white/80\"\n >\n <ax-loading></ax-loading>\n <p class=\"ax-mt-3 ax-text-gray-600\">{{ '@dashboard:loading' | translate | async }}</p>\n </div>\n } @else {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-full ax-w-full ax-flex-1\">\n <ax-loading></ax-loading>\n <p class=\"ax-mt-3 ax-text-gray-600\">{{ '@dashboard:loading' | translate | async }}</p>\n </div>\n }\n } @else if (!store.selectedDashboard()?.widgets?.length) {\n <axp-state-message\n icon=\"fa-light fa-shapes\"\n [title]=\"'@dashboard:no-widgets.title'\"\n [description]=\"'@dashboard:no-widgets.description'\"\n >\n <div slot=\"actions\">\n <button type=\"button\" (click)=\"addWidget.emit()\" class=\"ax-underline\">\n {{ '@dashboard:add-widget' | translate | async }}\n </button>\n </div>\n </axp-state-message>\n } @else {\n <axp-widgets-container [context]=\"widgetsContext()\">\n <ax-grid-layout-container\n class=\"ax-w-full dark:[--ax-comp-grid-layout-stack-item-content-bg-color:var(--ax-sys-color-lighter-surface)] [--ax-comp-grid-layout-stack-item-content-bg-color:var(--ax-sys-color-lightest-surface)]\"\n [options]=\"store.currentLayoutOptions()\"\n (onChange)=\"store.onGridChange($event)\"\n >\n @for (widget of store.currentWidgets(); track widget.config.id) {\n <ax-grid-layout-widget [options]=\"widget.resolvedOptions\">\n @let title = (widget.node?.options?.['title'] ?? widget.config.title) | translate | async;\n @let isHeaderTitleVisible = widget.node?.meta?.['title']?.['visible'] ?? true;\n\n <axm-dashboard-widget-wrapper\n [title]=\"isHeaderTitleVisible ? title! : null\"\n [hasConfiguration]=\"store.canConfigureWidget()(widget)\"\n [isLocked]=\"store.isWidgetLocked()(widget)\"\n (onDelete)=\"confirmWidgetDelete(store.selectedDashboard()!.id, widget.config.id!)\"\n (onConfiguration)=\"store.handlePopupConfiguration(widget.node!)\"\n (onValueChanged)=\"store.handleValueChanged(widget?.node!, $event)\"\n (onOptionsChanged)=\"store.handleOptionsChanged(widget?.node!, $event)\"\n >\n @if (widget.node) {\n <ng-container axp-widget-renderer [node]=\"widget.node\" [mode]=\"'view'\"></ng-container>\n }\n </axm-dashboard-widget-wrapper>\n </ax-grid-layout-widget>\n }\n </ax-grid-layout-container>\n </axp-widgets-container>\n }\n</div>\n", styles: ["axm-dashboard-grid-layout-section ax-grid-layout-widget .grid-stack-item-content{border-radius:.5rem!important;border-width:1px!important;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05) !important;--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important;background-color:rgb(var(--ax-sys-color-lightest-surface))!important;color:rgb(var(--ax-sys-color-on-lightest-surface))!important;border-color:rgb(var(--ax-sys-color-border-lightest-surface))!important}axm-dashboard-grid-layout-section ax-grid-layout-widget .grid-stack-item-content:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-lighter-surface))!important;color:rgb(var(--ax-sys-color-on-lighter-surface))!important;border-color:rgb(var(--ax-sys-color-border-lighter-surface))!important}\n"] }]
7893
+ ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div class=\"axm-dashboard-grid-layout-section ax-flex ax-flex-col ax-h-full ax-min-h-0 ax-w-full\">\n @if (store.isLoading()) {\n @if (loadingVariant() === 'overlay') {\n <div\n class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-full ax-w-full ax-absolute ax-z-10 ax-bg-white/80\"\n >\n <ax-loading></ax-loading>\n <p class=\"ax-mt-3 ax-text-gray-600\">{{ '@dashboard:loading' | translate | async }}</p>\n </div>\n } @else {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-full ax-w-full ax-flex-1\">\n <ax-loading></ax-loading>\n <p class=\"ax-mt-3 ax-text-gray-600\">{{ '@dashboard:loading' | translate | async }}</p>\n </div>\n }\n } @else if (!store.selectedDashboard()?.widgets?.length) {\n <axp-state-message\n icon=\"fa-light fa-shapes\"\n [title]=\"'@dashboard:no-widgets.title'\"\n [description]=\"'@dashboard:no-widgets.description'\"\n >\n @if (!store.readonly()) {\n <div slot=\"actions\">\n <button type=\"button\" (click)=\"addWidget.emit()\" class=\"ax-underline\">\n {{ '@dashboard:add-widget' | translate | async }}\n </button>\n </div>\n }\n </axp-state-message>\n } @else {\n <axp-widgets-container [context]=\"widgetsContext()\">\n <ax-grid-layout-container\n class=\"ax-w-full dark:[--ax-comp-grid-layout-stack-item-content-bg-color:var(--ax-sys-color-lighter-surface)] [--ax-comp-grid-layout-stack-item-content-bg-color:var(--ax-sys-color-lightest-surface)]\"\n [options]=\"store.currentLayoutOptions()\"\n (onChange)=\"store.onGridChange($event)\"\n >\n @for (widget of store.currentWidgets(); track widget.config.id) {\n <ax-grid-layout-widget [options]=\"widget.resolvedOptions\">\n @let title = (widget.node?.options?.['title'] ?? widget.config.title) | translate | async;\n @let isHeaderTitleVisible = widget.node?.meta?.['title']?.['visible'] ?? true;\n\n <axm-dashboard-widget-wrapper\n [title]=\"isHeaderTitleVisible ? title! : null\"\n [hasConfiguration]=\"store.canConfigureWidget()(widget)\"\n [isLocked]=\"store.isWidgetLocked()(widget)\"\n (onDelete)=\"confirmWidgetDelete(store.selectedDashboard()!.id, widget.config.id!)\"\n (onConfiguration)=\"store.handlePopupConfiguration(widget.node!)\"\n (onValueChanged)=\"store.handleValueChanged(widget?.node!, $event)\"\n (onOptionsChanged)=\"store.handleOptionsChanged(widget?.node!, $event)\"\n >\n @if (widget.node) {\n <ng-container axp-widget-renderer [node]=\"widget.node\" [mode]=\"'view'\"></ng-container>\n }\n </axm-dashboard-widget-wrapper>\n </ax-grid-layout-widget>\n }\n </ax-grid-layout-container>\n </axp-widgets-container>\n }\n</div>\n", styles: ["axm-dashboard-grid-layout-section ax-grid-layout-widget .grid-stack-item-content{border-radius:.5rem!important;border-width:1px!important;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05) !important;--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important;background-color:rgb(var(--ax-sys-color-lightest-surface))!important;color:rgb(var(--ax-sys-color-on-lightest-surface))!important;border-color:rgb(var(--ax-sys-color-border-lightest-surface))!important}axm-dashboard-grid-layout-section ax-grid-layout-widget .grid-stack-item-content:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-lighter-surface))!important;color:rgb(var(--ax-sys-color-on-lighter-surface))!important;border-color:rgb(var(--ax-sys-color-border-lighter-surface))!important}\n"] }]
7936
7894
  }], propDecorators: { widgetsContext: [{ type: i0.Input, args: [{ isSignal: true, alias: "widgetsContext", required: false }] }], loadingVariant: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingVariant", required: false }] }], addWidget: [{ type: i0.Output, args: ["addWidget"] }] } });
7937
7895
 
7896
+ //#region ---- Imports ----
7897
+ //#endregion
7898
+ //#region ---- Component ----
7899
+ /**
7900
+ * Shared host that loads an entity-scoped dashboard and renders the grid layout section.
7901
+ */
7902
+ class AXMEntityDashboardHostComponent {
7903
+ constructor() {
7904
+ //#region ---- Services & Dependencies ----
7905
+ this.store = inject(AXMDashboardStore);
7906
+ this.entityDashboardService = inject(AXMEntityDashboardService);
7907
+ //#endregion
7908
+ //#region ---- Inputs ----
7909
+ this.entityType = input.required(...(ngDevMode ? [{ debugName: "entityType" }] : /* istanbul ignore next */ []));
7910
+ this.entityId = input.required(...(ngDevMode ? [{ debugName: "entityId" }] : /* istanbul ignore next */ []));
7911
+ this.entityTitle = input(...(ngDevMode ? [undefined, { debugName: "entityTitle" }] : /* istanbul ignore next */ []));
7912
+ //#endregion
7913
+ //#region ---- Local State ----
7914
+ this.context = signal({}, ...(ngDevMode ? [{ debugName: "context" }] : /* istanbul ignore next */ []));
7915
+ this.isReady = signal(false, ...(ngDevMode ? [{ debugName: "isReady" }] : /* istanbul ignore next */ []));
7916
+ //#endregion
7917
+ //#region ---- Effects ----
7918
+ this.#loadEntityDashboard = effect(() => {
7919
+ const entityType = this.entityType();
7920
+ const entityId = this.entityId();
7921
+ const entityTitle = this.entityTitle();
7922
+ if (!entityType || !entityId) {
7923
+ return;
7924
+ }
7925
+ void this.entityDashboardService
7926
+ .ensureEntityDashboard(entityType, entityId, entityTitle)
7927
+ .then((model) => {
7928
+ this.store.hydrateFromEntityDetailModel(model);
7929
+ this.context.set({ ...model });
7930
+ this.isReady.set(true);
7931
+ });
7932
+ }, ...(ngDevMode ? [{ debugName: "#loadEntityDashboard" }] : /* istanbul ignore next */ []));
7933
+ }
7934
+ //#endregion
7935
+ //#region ---- Effects ----
7936
+ #loadEntityDashboard;
7937
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMEntityDashboardHostComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7938
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMEntityDashboardHostComponent, isStandalone: true, selector: "axm-entity-dashboard-host", inputs: { entityType: { classPropertyName: "entityType", publicName: "entityType", isSignal: true, isRequired: true, transformFunction: null }, entityId: { classPropertyName: "entityId", publicName: "entityId", isSignal: true, isRequired: true, transformFunction: null }, entityTitle: { classPropertyName: "entityTitle", publicName: "entityTitle", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
7939
+ AXPDesignerService,
7940
+ { provide: DASHBOARD_LAYOUT_ENTITY_MODE, useValue: true },
7941
+ { provide: DASHBOARD_READONLY_MODE, useValue: true },
7942
+ AXMDashboardStore,
7943
+ ], ngImport: i0, template: `
7944
+ @if (isReady()) {
7945
+ <axm-dashboard-grid-layout-section [widgetsContext]="context()"></axm-dashboard-grid-layout-section>
7946
+ }
7947
+ `, isInline: true, dependencies: [{ kind: "component", type: AXMDashboardGridLayoutSectionComponent, selector: "axm-dashboard-grid-layout-section", inputs: ["widgetsContext", "loadingVariant"], outputs: ["addWidget"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
7948
+ }
7949
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMEntityDashboardHostComponent, decorators: [{
7950
+ type: Component,
7951
+ args: [{
7952
+ selector: 'axm-entity-dashboard-host',
7953
+ imports: [AXMDashboardGridLayoutSectionComponent],
7954
+ template: `
7955
+ @if (isReady()) {
7956
+ <axm-dashboard-grid-layout-section [widgetsContext]="context()"></axm-dashboard-grid-layout-section>
7957
+ }
7958
+ `,
7959
+ changeDetection: ChangeDetectionStrategy.OnPush,
7960
+ encapsulation: ViewEncapsulation.None,
7961
+ providers: [
7962
+ AXPDesignerService,
7963
+ { provide: DASHBOARD_LAYOUT_ENTITY_MODE, useValue: true },
7964
+ { provide: DASHBOARD_READONLY_MODE, useValue: true },
7965
+ AXMDashboardStore,
7966
+ ],
7967
+ }]
7968
+ }], propDecorators: { entityType: [{ type: i0.Input, args: [{ isSignal: true, alias: "entityType", required: true }] }], entityId: [{ type: i0.Input, args: [{ isSignal: true, alias: "entityId", required: true }] }], entityTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "entityTitle", required: false }] }] } });
7969
+
7970
+ //#region ---- Imports ----
7971
+ //#endregion
7972
+ //#region ---- Widget View ----
7973
+ class AXMEntityDashboardWidgetViewComponent extends AXPValueWidgetComponent {
7974
+ constructor() {
7975
+ super(...arguments);
7976
+ this.entityType = computed(() => {
7977
+ const fromOptions = this.options()?.['entityType'];
7978
+ return typeof fromOptions === 'string' && fromOptions.trim() ? fromOptions.trim() : undefined;
7979
+ }, ...(ngDevMode ? [{ debugName: "entityType" }] : /* istanbul ignore next */ []));
7980
+ this.entityId = computed(() => {
7981
+ const fromOptions = this.options()?.['entityId'];
7982
+ return typeof fromOptions === 'string' && fromOptions.trim() ? fromOptions.trim() : undefined;
7983
+ }, ...(ngDevMode ? [{ debugName: "entityId" }] : /* istanbul ignore next */ []));
7984
+ this.entityTitle = computed(() => {
7985
+ const subject = this.options()?.['subject'];
7986
+ return typeof subject === 'string' ? subject : undefined;
7987
+ }, ...(ngDevMode ? [{ debugName: "entityTitle" }] : /* istanbul ignore next */ []));
7988
+ }
7989
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMEntityDashboardWidgetViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
7990
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMEntityDashboardWidgetViewComponent, isStandalone: true, selector: "axm-entity-dashboard-widget-view", usesInheritance: true, ngImport: i0, template: `
7991
+ @if (entityType() && entityId()) {
7992
+ <axm-entity-dashboard-host
7993
+ [entityType]="entityType()!"
7994
+ [entityId]="entityId()!"
7995
+ [entityTitle]="entityTitle()"
7996
+ ></axm-entity-dashboard-host>
7997
+ }
7998
+ `, isInline: true, dependencies: [{ kind: "component", type: AXMEntityDashboardHostComponent, selector: "axm-entity-dashboard-host", inputs: ["entityType", "entityId", "entityTitle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
7999
+ }
8000
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMEntityDashboardWidgetViewComponent, decorators: [{
8001
+ type: Component,
8002
+ args: [{
8003
+ selector: 'axm-entity-dashboard-widget-view',
8004
+ imports: [AXMEntityDashboardHostComponent],
8005
+ template: `
8006
+ @if (entityType() && entityId()) {
8007
+ <axm-entity-dashboard-host
8008
+ [entityType]="entityType()!"
8009
+ [entityId]="entityId()!"
8010
+ [entityTitle]="entityTitle()"
8011
+ ></axm-entity-dashboard-host>
8012
+ }
8013
+ `,
8014
+ changeDetection: ChangeDetectionStrategy.OnPush,
8015
+ }]
8016
+ }] });
8017
+ //#endregion
8018
+ //#region ---- Page Component ----
8019
+ class AXMEntityDashboardPageComponent extends AXPPageLayoutBaseComponent {
8020
+ constructor() {
8021
+ super(...arguments);
8022
+ //#region ---- Inputs ----
8023
+ this.rootContext = input.required(...(ngDevMode ? [{ debugName: "rootContext" }] : /* istanbul ignore next */ []));
8024
+ this.pageConfig = input(...(ngDevMode ? [undefined, { debugName: "pageConfig" }] : /* istanbul ignore next */ []));
8025
+ //#endregion
8026
+ //#region ---- Services & Dependencies ----
8027
+ this.route = inject(ActivatedRoute);
8028
+ this.entityDashboardService = inject(AXMEntityDashboardService);
8029
+ //#endregion
8030
+ //#region ---- Computed Properties ----
8031
+ this.entityRef = computed(() => {
8032
+ const moduleName = this.route.snapshot.parent?.paramMap.get('module');
8033
+ const entityName = this.route.snapshot.paramMap.get('entity');
8034
+ return this.entityDashboardService.resolveEntityRefFromContext(moduleName, entityName, this.rootContext());
8035
+ }, ...(ngDevMode ? [{ debugName: "entityRef" }] : /* istanbul ignore next */ []));
8036
+ this.entityTitle = computed(() => {
8037
+ const title = get(this.rootContext(), 'title');
8038
+ return typeof title === 'string' ? title : undefined;
8039
+ }, ...(ngDevMode ? [{ debugName: "entityTitle" }] : /* istanbul ignore next */ []));
8040
+ }
8041
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMEntityDashboardPageComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
8042
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMEntityDashboardPageComponent, isStandalone: true, selector: "axm-entity-dashboard-page", inputs: { rootContext: { classPropertyName: "rootContext", publicName: "rootContext", isSignal: true, isRequired: true, transformFunction: null }, pageConfig: { classPropertyName: "pageConfig", publicName: "pageConfig", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
8043
+ {
8044
+ provide: AXPPageLayoutBase,
8045
+ useExisting: AXMEntityDashboardPageComponent,
8046
+ },
8047
+ ], usesInheritance: true, ngImport: i0, template: `
8048
+ @if (entityRef(); as ref) {
8049
+ <axm-entity-dashboard-host
8050
+ [entityType]="ref.entityType"
8051
+ [entityId]="ref.entityId"
8052
+ [entityTitle]="entityTitle()"
8053
+ ></axm-entity-dashboard-host>
8054
+ }
8055
+ `, isInline: true, styles: [":host{display:block;width:100%;height:100%}\n"], dependencies: [{ kind: "component", type: AXMEntityDashboardHostComponent, selector: "axm-entity-dashboard-host", inputs: ["entityType", "entityId", "entityTitle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
8056
+ }
8057
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMEntityDashboardPageComponent, decorators: [{
8058
+ type: Component,
8059
+ args: [{ selector: 'axm-entity-dashboard-page', imports: [AXMEntityDashboardHostComponent], template: `
8060
+ @if (entityRef(); as ref) {
8061
+ <axm-entity-dashboard-host
8062
+ [entityType]="ref.entityType"
8063
+ [entityId]="ref.entityId"
8064
+ [entityTitle]="entityTitle()"
8065
+ ></axm-entity-dashboard-host>
8066
+ }
8067
+ `, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
8068
+ {
8069
+ provide: AXPPageLayoutBase,
8070
+ useExisting: AXMEntityDashboardPageComponent,
8071
+ },
8072
+ ], styles: [":host{display:block;width:100%;height:100%}\n"] }]
8073
+ }], propDecorators: { rootContext: [{ type: i0.Input, args: [{ isSignal: true, alias: "rootContext", required: true }] }], pageConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageConfig", required: false }] }] } });
8074
+
8075
+ var entityDashboardPage_component = /*#__PURE__*/Object.freeze({
8076
+ __proto__: null,
8077
+ AXMEntityDashboardPageComponent: AXMEntityDashboardPageComponent,
8078
+ AXMEntityDashboardWidgetViewComponent: AXMEntityDashboardWidgetViewComponent
8079
+ });
8080
+
8081
+ //#region ---- Entity Dashboard Page Provider ----
8082
+ class AXMEntityDashboardPageComponentProvider {
8083
+ async components() {
8084
+ return [
8085
+ {
8086
+ key: ENTITY_DASHBOARD_PAGE_COMPONENT_KEY,
8087
+ loader: () => Promise.resolve().then(function () { return entityDashboardPage_component; }).then((c) => c.AXMEntityDashboardPageComponent),
8088
+ },
8089
+ ];
8090
+ }
8091
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMEntityDashboardPageComponentProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
8092
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMEntityDashboardPageComponentProvider }); }
8093
+ }
8094
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMEntityDashboardPageComponentProvider, decorators: [{
8095
+ type: Injectable
8096
+ }] });
8097
+
8098
+ var entityDashboardPageComponent_provider = /*#__PURE__*/Object.freeze({
8099
+ __proto__: null,
8100
+ AXMEntityDashboardPageComponentProvider: AXMEntityDashboardPageComponentProvider
8101
+ });
8102
+
8103
+ const AXPEntityDashboardWidget = {
8104
+ name: 'entity-dashboard',
8105
+ title: '@dashboard-management:dashboards.widget.entity-dashboard.title',
8106
+ description: '@dashboard-management:dashboards.widget.entity-dashboard.description',
8107
+ type: 'view',
8108
+ categories: [],
8109
+ groups: [AXPWidgetGroupEnum.EntityWidget],
8110
+ icon: 'fa-light fa-gauge-high',
8111
+ properties: [],
8112
+ components: {
8113
+ view: {
8114
+ component: () => Promise.resolve().then(function () { return entityDashboardPage_component; }).then((c) => c.AXMEntityDashboardWidgetViewComponent),
8115
+ },
8116
+ edit: {
8117
+ component: () => Promise.resolve().then(function () { return entityDashboardPage_component; }).then((c) => c.AXMEntityDashboardWidgetViewComponent),
8118
+ },
8119
+ },
8120
+ };
8121
+
8122
+ //#endregion
8123
+ //#region ---- Dashboard Management Widgets Provider ----
8124
+ const DASHBOARD_WIDGETS = [
8125
+ AXPEntityDashboardWidget,
8126
+ AXPShortcutWidget,
8127
+ AXPDonutChartWidget,
8128
+ AXPBarChartWidget,
8129
+ AXPLineChartWidget,
8130
+ AXPFunnelChartWidget,
8131
+ AXPHeatmapChartWidget,
8132
+ AXPKpiProgressWidget,
8133
+ AXPKpiSegmentedWidget,
8134
+ AXPKpiDetailsWidget,
8135
+ AXPKpiStatCardWidget,
8136
+ AXPGaugeChartWidget,
8137
+ AXPStickyNoteWidget,
8138
+ AXPMinimalWeatherWidget,
8139
+ AXPAdvancedWeatherWidget,
8140
+ AXPAnalogClockWidget,
8141
+ ];
8142
+ class AXMDashboardManagementWidgetsProvider {
8143
+ getWidgets() {
8144
+ return DASHBOARD_WIDGETS;
8145
+ }
8146
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMDashboardManagementWidgetsProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
8147
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMDashboardManagementWidgetsProvider }); }
8148
+ }
8149
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMDashboardManagementWidgetsProvider, decorators: [{
8150
+ type: Injectable
8151
+ }] });
8152
+
8153
+ //#region ---- Imports ----
8154
+ //#endregion
8155
+ //#region ---- Constants ----
8156
+ const DASHBOARD_ENTITY_KEY = `${RootConfig.module.name}.${RootConfig.entities.dashboard.name}`;
8157
+ //#endregion
8158
+ //#region ---- Middleware ----
8159
+ /**
8160
+ * Normalizes dashboard scope/scopeRef on create/update and applies tenant lock defaults.
8161
+ */
8162
+ const dashboardScopeMiddleware = {
8163
+ target: { ops: ['create', 'update'], order: 4 },
8164
+ execute: async (ctx, next) => {
8165
+ if (ctx.entityName !== DASHBOARD_ENTITY_KEY || ctx.data == null || typeof ctx.data !== 'object') {
8166
+ await next();
8167
+ return;
8168
+ }
8169
+ const payload = ctx.data;
8170
+ let scope = payload['scope'];
8171
+ if (!scope) {
8172
+ scope = 'T';
8173
+ payload['scope'] = scope;
8174
+ }
8175
+ const legacyUserId = get(payload, 'userId');
8176
+ const legacyRoleIds = get(payload, 'roleIds');
8177
+ const legacyEntityId = get(payload, 'entityId');
8178
+ const legacyEntityType = get(payload, 'entityType');
8179
+ const legacyTenantId = get(payload, 'tenantId');
8180
+ const scopeRef = normalizeDashboardScopeRef(scope, payload['scopeRef'], {
8181
+ userId: isString(legacyUserId) ? legacyUserId : undefined,
8182
+ tenantId: isString(legacyTenantId) ? legacyTenantId : undefined,
8183
+ roleIds: Array.isArray(legacyRoleIds) ? legacyRoleIds : readScopeRoleIds(payload['scopeRef']),
8184
+ entityId: isString(legacyEntityId) ? legacyEntityId : undefined,
8185
+ entityType: isString(legacyEntityType) ? legacyEntityType : undefined,
8186
+ });
8187
+ set(payload, 'scopeRef', scopeRef);
8188
+ delete payload['userId'];
8189
+ delete payload['roleIds'];
8190
+ delete payload['entityId'];
8191
+ delete payload['entityType'];
8192
+ delete payload['tenantId'];
8193
+ if (scope === 'T') {
8194
+ payload['locked'] = true;
8195
+ }
8196
+ if (scope === 'E') {
8197
+ const entityRef = buildEntityScopeRef(get(scopeRef, 'entityType'), get(scopeRef, 'entityId'));
8198
+ set(payload, 'scopeRef', entityRef);
8199
+ }
8200
+ if (scope === 'U') {
8201
+ set(payload, 'scopeRef', buildUserScopeRef(get(scopeRef, 'userId')));
8202
+ }
8203
+ if (scope === 'T') {
8204
+ set(payload, 'scopeRef', buildTenantScopeRef(get(scopeRef, 'tenantId'), readScopeRoleIds(scopeRef)));
8205
+ }
8206
+ await next();
8207
+ },
8208
+ };
8209
+ //#endregion
8210
+
8211
+ // Entity Modules
8212
+ function createAppRoute() {
8213
+ const config = inject(AXP_ENTITY_CONFIG_TOKEN);
8214
+ return {
8215
+ path: ':app',
8216
+ canActivate: [...AXP_PROTECTED_ROUTE_GUARDS],
8217
+ data: { rootLayout: true },
8218
+ loadComponent: () => {
8219
+ return config.viewers.root();
8220
+ },
8221
+ children: [
8222
+ {
8223
+ path: 'dashboard',
8224
+ loadComponent: () => Promise.resolve().then(function () { return homeDashboard; }).then((c) => c.AXMDashboardHomeComponent),
8225
+ },
8226
+ ],
8227
+ };
8228
+ }
8229
+ class AXMDashboardManagementModule {
8230
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMDashboardManagementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
8231
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: AXMDashboardManagementModule, imports: [AXPWidgetCoreModule] }); }
8232
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMDashboardManagementModule, providers: [
8233
+ { provide: AXP_WIDGET_DEFINITION_PROVIDER, useClass: AXMDashboardManagementWidgetsProvider, multi: true },
8234
+ {
8235
+ provide: AXP_HOME_PAGES,
8236
+ multi: true,
8237
+ useFactory: () => [
8238
+ {
8239
+ key: 'dashboard',
8240
+ title: 'Dashboard',
8241
+ route: createAppRoute(),
8242
+ },
8243
+ ],
8244
+ },
8245
+ // Module-specific providers (not part of manifest system)
8246
+ AXPWidgetsModule,
8247
+ {
8248
+ provide: AXP_HOME_PAGE_DEFAULT_KEY,
8249
+ useValue: 'dashboard',
8250
+ },
8251
+ // Module Manifest Provider
8252
+ {
8253
+ provide: AXP_MODULE_MANIFEST_PROVIDER,
8254
+ useValue: DashboardManagementManifest,
8255
+ multi: true,
8256
+ },
8257
+ // Provider references (now using tokens)
8258
+ {
8259
+ provide: AXP_PERMISSION_DEFINITION_PROVIDER,
8260
+ useClass: AXMPermissionDefinitionProvider,
8261
+ multi: true,
8262
+ },
8263
+ {
8264
+ provide: AXP_MENU_PROVIDER,
8265
+ useClass: AXMMenuProvider,
8266
+ multi: true,
8267
+ },
8268
+ {
8269
+ provide: AXP_ENTITY_DEFINITION_LOADER,
8270
+ useClass: AXMEntityProvider,
8271
+ multi: true,
8272
+ },
8273
+ {
8274
+ provide: AXP_ENTITY_ACTION_PLUGIN,
8275
+ useValue: dashboardPlugin,
8276
+ multi: true,
8277
+ },
8278
+ {
8279
+ provide: AXP_ENTITY_STORAGE_MIDDLEWARE,
8280
+ useValue: dashboardScopeMiddleware,
8281
+ multi: true,
8282
+ },
8283
+ provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => import('./acorex-modules-dashboard-management-index-gjCiELmH.mjs').then((m) => m.AXMDashboardLayoutPageComponentProvider)),
8284
+ provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => Promise.resolve().then(function () { return entityDashboardPageComponent_provider; }).then((m) => m.AXMEntityDashboardPageComponentProvider)),
8285
+ ], imports: [AXPWidgetCoreModule] }); }
8286
+ }
8287
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMDashboardManagementModule, decorators: [{
8288
+ type: NgModule,
8289
+ args: [{
8290
+ imports: [
8291
+ AXPWidgetCoreModule,
8292
+ // Entity Modules
8293
+ ],
8294
+ providers: [
8295
+ { provide: AXP_WIDGET_DEFINITION_PROVIDER, useClass: AXMDashboardManagementWidgetsProvider, multi: true },
8296
+ {
8297
+ provide: AXP_HOME_PAGES,
8298
+ multi: true,
8299
+ useFactory: () => [
8300
+ {
8301
+ key: 'dashboard',
8302
+ title: 'Dashboard',
8303
+ route: createAppRoute(),
8304
+ },
8305
+ ],
8306
+ },
8307
+ // Module-specific providers (not part of manifest system)
8308
+ AXPWidgetsModule,
8309
+ {
8310
+ provide: AXP_HOME_PAGE_DEFAULT_KEY,
8311
+ useValue: 'dashboard',
8312
+ },
8313
+ // Module Manifest Provider
8314
+ {
8315
+ provide: AXP_MODULE_MANIFEST_PROVIDER,
8316
+ useValue: DashboardManagementManifest,
8317
+ multi: true,
8318
+ },
8319
+ // Provider references (now using tokens)
8320
+ {
8321
+ provide: AXP_PERMISSION_DEFINITION_PROVIDER,
8322
+ useClass: AXMPermissionDefinitionProvider,
8323
+ multi: true,
8324
+ },
8325
+ {
8326
+ provide: AXP_MENU_PROVIDER,
8327
+ useClass: AXMMenuProvider,
8328
+ multi: true,
8329
+ },
8330
+ {
8331
+ provide: AXP_ENTITY_DEFINITION_LOADER,
8332
+ useClass: AXMEntityProvider,
8333
+ multi: true,
8334
+ },
8335
+ {
8336
+ provide: AXP_ENTITY_ACTION_PLUGIN,
8337
+ useValue: dashboardPlugin,
8338
+ multi: true,
8339
+ },
8340
+ {
8341
+ provide: AXP_ENTITY_STORAGE_MIDDLEWARE,
8342
+ useValue: dashboardScopeMiddleware,
8343
+ multi: true,
8344
+ },
8345
+ provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => import('./acorex-modules-dashboard-management-index-gjCiELmH.mjs').then((m) => m.AXMDashboardLayoutPageComponentProvider)),
8346
+ provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => Promise.resolve().then(function () { return entityDashboardPageComponent_provider; }).then((m) => m.AXMEntityDashboardPageComponentProvider)),
8347
+ ],
8348
+ }]
8349
+ }] });
8350
+
8351
+ async function dashboardFactory() {
8352
+ const entityDef = {
8353
+ module: RootConfig.module.name,
8354
+ name: RootConfig.entities.dashboard.name,
8355
+ title: RootConfig.entities.dashboard.title,
8356
+ icon: RootConfig.entities.dashboard.icon,
8357
+ plugins: [{ name: 'category' }, { name: 'archive' }],
8358
+ pages: [
8359
+ {
8360
+ componentKey: DASHBOARD_LAYOUT_PAGE_COMPONENT_KEY,
8361
+ title: '@dashboard-management:dashboards.entities.dashboard.pages.layout.title',
8362
+ description: '@dashboard-management:dashboards.entities.dashboard.pages.layout.description',
8363
+ icon: 'fa-light fa-table-layout',
8364
+ layout: { order: 1, position: 'after' },
8365
+ },
8366
+ ],
8367
+ formats: {
8368
+ individual: RootConfig.entities.dashboard.title,
8369
+ plural: RootConfig.entities.dashboard.titlePlural,
8370
+ displayName: '@general:terms.interface.configuration',
8371
+ searchResult: {
8372
+ title: '{{ title }}',
8373
+ description: RootConfig.module.title,
8374
+ },
8375
+ },
8376
+ relatedEntities: [],
8377
+ groups: [
8378
+ {
8379
+ id: 'section',
8380
+ title: RootConfig.entities.dashboard.title,
8381
+ },
8382
+ {
8383
+ id: 'access',
8384
+ title: '@dashboard-management:dashboards.entities.dashboard.groups.access.title',
8385
+ },
8386
+ ],
8387
+ properties: [
8388
+ {
8389
+ name: 'id',
8390
+ title: 'ID',
8391
+ groupId: 'section',
8392
+ schema: { dataType: 'uuid', visible: false, nullable: false, readonly: true, unique: { enabled: true } },
8393
+ },
8394
+ {
8395
+ name: 'title',
8396
+ title: '@general:terms.common.title',
8397
+ groupId: 'section',
8398
+ options: {
8399
+ sort: {
8400
+ enabled: true,
8401
+ },
8402
+ filter: {
8403
+ advance: {
8404
+ enabled: true,
8405
+ },
8406
+ inline: {
8407
+ enabled: true,
8408
+ },
8409
+ },
8410
+ },
8411
+ schema: {
8412
+ dataType: 'string',
8413
+ interface: {
8414
+ type: AXPWidgetsList.Editors.TextBox,
8415
+ options: {
8416
+ multiLanguage: true,
8417
+ placeholder: '@general:terms.common.title',
8418
+ },
8419
+ },
8420
+ },
8421
+ validations: [
8422
+ {
8423
+ rule: 'required',
8424
+ },
8425
+ ],
8426
+ },
8427
+ {
8428
+ name: 'description',
8429
+ title: '@dashboard-management:dashboards.entities.dashboard.fields.description.title',
8430
+ groupId: 'section',
8431
+ options: {
8432
+ sort: {
8433
+ enabled: false,
8434
+ },
8435
+ filter: {
8436
+ advance: {
8437
+ enabled: false,
8438
+ },
8439
+ inline: {
8440
+ enabled: false,
8441
+ },
8442
+ },
8443
+ },
8444
+ schema: {
8445
+ dataType: 'string',
8446
+ interface: {
8447
+ type: AXPWidgetsList.Editors.LargeTextBox,
8448
+ options: {
8449
+ rows: 3,
8450
+ multiLanguage: true,
8451
+ placeholder: '@general:terms.common.description',
8452
+ },
8453
+ },
8454
+ },
8455
+ },
8456
+ {
8457
+ name: 'scope',
8458
+ title: '@dashboard-management:dashboards.entities.dashboard.fields.scope.title',
8459
+ groupId: 'access',
8460
+ options: {
8461
+ sort: { enabled: true },
8462
+ filter: { advance: { enabled: true }, inline: { enabled: true } },
8463
+ },
8464
+ schema: {
8465
+ dataType: 'string',
8466
+ visible: false,
8467
+ interface: {
8468
+ type: AXPWidgetsList.Editors.SelectBox,
8469
+ options: {
8470
+ valueField: 'id',
8471
+ dataSource: [
8472
+ {
8473
+ id: 'T',
8474
+ title: '@dashboard-management:dashboards.entities.dashboard.fields.scope.options.tenant',
8475
+ },
8476
+ {
8477
+ id: 'U',
8478
+ title: '@dashboard-management:dashboards.entities.dashboard.fields.scope.options.personal',
8479
+ },
8480
+ {
8481
+ id: 'E',
8482
+ title: '@dashboard-management:dashboards.entities.dashboard.fields.scope.options.entity',
8483
+ },
8484
+ ],
8485
+ },
8486
+ },
8487
+ },
8488
+ },
8489
+ {
8490
+ name: 'scopeRef.roleIds',
8491
+ title: '@dashboard:roles',
8492
+ groupId: 'access',
8493
+ schema: {
8494
+ dataType: 'object',
8495
+ visible: `{{ !context.eval("scope") || context.eval("scope") === "T" }}`,
8496
+ interface: {
8497
+ type: AXPWidgetsList.Editors.LookupBox,
8498
+ options: {
8499
+ entity: 'SecurityManagement.Role',
8500
+ multiple: true,
8501
+ look: 'select',
8502
+ },
8503
+ },
8504
+ },
8505
+ },
8506
+ ],
8507
+ columns: [{ name: 'title' }, { name: 'description' }],
8508
+ interfaces: {
8509
+ master: {
8510
+ create: {
8511
+ sections: [{ id: 'section' }, { id: 'access' }],
8512
+ properties: [
8513
+ { name: 'title', layout: { positions: { lg: { colSpan: 6, order: 1 } } } },
8514
+ { name: 'description', layout: { positions: { lg: { colSpan: 12, order: 2 } } } },
8515
+ { name: 'scopeRef.roleIds', layout: { positions: { lg: { colSpan: 12, order: 3 } } } },
8516
+ ],
8517
+ },
8518
+ update: {
8519
+ sections: [{ id: 'section' }, { id: 'access' }],
8520
+ properties: [
8521
+ { name: 'title', layout: { positions: { lg: { colSpan: 6, order: 1 } } } },
8522
+ { name: 'description', layout: { positions: { lg: { colSpan: 12, order: 2 } } } },
8523
+ { name: 'scopeRef.roleIds', layout: { positions: { lg: { colSpan: 12, order: 3 } } } },
8524
+ ],
8525
+ },
8526
+ single: {
8527
+ title: '{{title}}',
8528
+ sections: [{ id: 'section', layout: { positions: { lg: { colSpan: 12 } } } }, { id: 'access' }],
8529
+ properties: [
8530
+ { name: 'title', layout: { positions: { lg: { colSpan: 6, order: 1 } } } },
8531
+ { name: 'description', layout: { positions: { lg: { colSpan: 12, order: 2 } } } },
8532
+ { name: 'scopeRef.roleIds', layout: { positions: { lg: { colSpan: 12, order: 3 } } } },
8533
+ ],
8534
+ actions: [...entityMasterRecordActions()],
8535
+ },
8536
+ list: {
8537
+ actions: [...entityMasterCrudActions()],
8538
+ views: [
8539
+ createQueryView('tenant', '@dashboard-management:dashboards.entities.dashboard.views.tenant', true, {
8540
+ sorts: [{ name: 'title', dir: 'asc' }],
8541
+ conditions: [{ name: 'scope', operator: { type: 'equal' }, value: 'T' }],
8542
+ }),
8543
+ ],
8544
+ },
8545
+ },
8546
+ },
8547
+ };
8548
+ return entityDef;
8549
+ }
8550
+
8551
+ //#endregion
8552
+
8553
+ //#region ---- Dashboard Scope Types ----
8554
+ //#endregion
8555
+
8556
+ var index = /*#__PURE__*/Object.freeze({
8557
+ __proto__: null,
8558
+ buildEntityScopeRef: buildEntityScopeRef,
8559
+ buildTenantScopeRef: buildTenantScopeRef,
8560
+ buildUserScopeRef: buildUserScopeRef,
8561
+ dashboardFactory: dashboardFactory,
8562
+ normalizeDashboardScopeRef: normalizeDashboardScopeRef,
8563
+ readScopeEntityRef: readScopeEntityRef,
8564
+ readScopeRoleIds: readScopeRoleIds,
8565
+ readScopeTenantId: readScopeTenantId,
8566
+ readScopeUserId: readScopeUserId
8567
+ });
8568
+
8569
+ // Entity Services
8570
+ // Entity Modules
8571
+
8572
+ //#endregion
8573
+
7938
8574
  class AXMDashboardHomeComponent extends AXPPageLayoutBaseComponent {
7939
8575
  constructor() {
7940
8576
  super(...arguments);
@@ -8112,7 +8748,7 @@ class AXMDashboardHomeComponent extends AXPPageLayoutBaseComponent {
8112
8748
  provide: AXPPageLayoutBase,
8113
8749
  useExisting: AXMDashboardHomeComponent,
8114
8750
  },
8115
- ], usesInheritance: true, ngImport: i0, template: "<axp-page-layout *translate=\"let t\">\n <axp-page-content class=\"ax-relative\">\n @if (store.isLoading()) {\n <div class=\"axm-dashboard-home__skeleton ax-w-full ax-min-h-full\" aria-busy=\"true\" aria-live=\"polite\">\n <div class=\"axm-dashboard-home__skeleton-grid\">\n @for (widget of skeletonWidgets; track widget.id) {\n <article\n class=\"axm-dashboard-home__skeleton-widget\"\n [style.grid-area]=\"widget.area\"\n >\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-title\"></ax-skeleton>\n\n <div class=\"axm-dashboard-home__skeleton-body\">\n @switch (widget.variant) {\n @case ('list') {\n @for (row of skeletonListRows; track row) {\n <div class=\"axm-dashboard-home__skeleton-list-row\">\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-avatar\"></ax-skeleton>\n <div class=\"axm-dashboard-home__skeleton-list-text\">\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-line axm-dashboard-home__skeleton-line--wide\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-line axm-dashboard-home__skeleton-line--narrow\"></ax-skeleton>\n </div>\n </div>\n }\n }\n @case ('compact') {\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-circle\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-line axm-dashboard-home__skeleton-line--medium\"></ax-skeleton>\n }\n @case ('action') {\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-action\"></ax-skeleton>\n }\n }\n </div>\n </article>\n }\n </div>\n </div>\n } @else if (!store.dashboards().length) {\n <axp-state-message\n icon=\"fa-light fa-shapes\"\n [title]=\"'@dashboard:empty-state.title'\"\n [description]=\"'@dashboard:empty-state.description'\"\n >\n <div slot=\"actions\">\n <button type=\"button\" (click)=\"execute({ name: 'new-dashboard' })\" class=\"ax-underline\">\n {{ '@dashboard:add-first-dashboard' | translate | async }}\n </button>\n </div>\n </axp-state-message>\n } @else {\n <axm-dashboard-grid-layout-section\n [widgetsContext]=\"context()\"\n [loadingVariant]=\"'overlay'\"\n (addWidget)=\"execute({ name: 'new-widget' })\"\n ></axm-dashboard-grid-layout-section>\n }\n </axp-page-content>\n</axp-page-layout>\n", styles: ["axm-dashboard-home{background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}axm-dashboard-home .placeholder-content{border-radius:.5rem!important;border-width:1px!important;border-style:dashed!important;--tw-border-opacity: 1 !important;border-color:rgba(var(--ax-sys-color-primary-500),var(--tw-border-opacity, 1))!important;background-color:rgba(var(--ax-sys-color-primary-lightest-surface),.5)!important}axm-dashboard-home ax-grid-layout-widget .grid-stack-item-content{border-radius:.5rem!important;border-width:1px!important;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05) !important;--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important;background-color:rgb(var(--ax-sys-color-lightest-surface))!important;color:rgb(var(--ax-sys-color-on-lightest-surface))!important;border-color:rgb(var(--ax-sys-color-border-lightest-surface))!important}axm-dashboard-home ax-grid-layout-widget .grid-stack-item-content:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-lighter-surface))!important;color:rgb(var(--ax-sys-color-on-lighter-surface))!important;border-color:rgb(var(--ax-sys-color-border-lighter-surface))!important}axm-dashboard-home .axm-dashboard-home__skeleton-grid{display:grid;gap:1rem;padding:1rem;grid-template-columns:repeat(12,minmax(0,1fr));grid-template-rows:repeat(5,minmax(72px,auto));grid-template-areas:\"clock clock clock tasks tasks tasks tasks tasks notifications notifications notifications notifications\" \"clock clock clock tasks tasks tasks tasks tasks notifications notifications notifications notifications\" \"action action action tasks tasks tasks tasks tasks notifications notifications notifications notifications\" \"notes notes notes tasks tasks tasks tasks tasks notifications notifications notifications notifications\" \"notes notes notes tasks tasks tasks tasks tasks notifications notifications notifications notifications\"}axm-dashboard-home .axm-dashboard-home__skeleton-widget{display:flex;min-height:0px;flex-direction:column;gap:.75rem;border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lightest-surface),var(--tw-bg-opacity, 1));padding:1rem;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}axm-dashboard-home .axm-dashboard-home__skeleton-title{height:1rem;width:8rem;max-width:100%;border-radius:.25rem}axm-dashboard-home .axm-dashboard-home__skeleton-body{display:flex;min-height:0px;flex:1 1 0%;flex-direction:column;gap:.75rem}axm-dashboard-home .axm-dashboard-home__skeleton-list-row{display:flex;align-items:center;gap:.75rem}axm-dashboard-home .axm-dashboard-home__skeleton-avatar{height:2.5rem;width:2.5rem;flex-shrink:0;border-radius:9999px}axm-dashboard-home .axm-dashboard-home__skeleton-list-text{display:flex;min-width:0px;flex:1 1 0%;flex-direction:column;gap:.5rem}axm-dashboard-home .axm-dashboard-home__skeleton-line{height:.75rem;border-radius:.25rem}axm-dashboard-home .axm-dashboard-home__skeleton-line--wide{width:100%}axm-dashboard-home .axm-dashboard-home__skeleton-line--medium{width:66.666667%}axm-dashboard-home .axm-dashboard-home__skeleton-line--narrow{width:60%}axm-dashboard-home .axm-dashboard-home__skeleton-circle{height:4rem;width:4rem;border-radius:9999px}axm-dashboard-home .axm-dashboard-home__skeleton-action{height:2.5rem;width:100%;border-radius:.5rem}@media(max-width:768px){axm-dashboard-home .axm-dashboard-home__skeleton-grid{grid-template-columns:repeat(6,minmax(0,1fr));grid-template-rows:auto;grid-template-areas:\"clock clock clock notes notes notes\" \"action action action notes notes notes\" \"tasks tasks tasks tasks tasks tasks\" \"notifications notifications notifications notifications notifications notifications\"}}@media(max-width:480px){axm-dashboard-home .axm-dashboard-home__skeleton-grid{grid-template-columns:minmax(0,1fr);grid-template-areas:\"clock\" \"action\" \"tasks\" \"notifications\" \"notes\"}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i1.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXButtonGroupModule }, { kind: "component", type: AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i4.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "component", type: AXMDashboardGridLayoutSectionComponent, selector: "axm-dashboard-grid-layout-section", inputs: ["widgetsContext", "loadingVariant"], outputs: ["addWidget"] }, { kind: "component", type: AXPStateMessageComponent, selector: "axp-state-message", inputs: ["mode", "icon", "title", "description", "look"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
8751
+ ], usesInheritance: true, ngImport: i0, template: "<axp-page-layout *translate=\"let t\">\n <axp-page-content class=\"ax-relative\">\n @if (store.isLoading()) {\n <div class=\"axm-dashboard-home__skeleton ax-w-full ax-min-h-full\" aria-busy=\"true\" aria-live=\"polite\">\n <div class=\"axm-dashboard-home__skeleton-grid\">\n @for (widget of skeletonWidgets; track widget.id) {\n <article\n class=\"axm-dashboard-home__skeleton-widget\"\n [style.grid-area]=\"widget.area\"\n >\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-title\"></ax-skeleton>\n\n <div class=\"axm-dashboard-home__skeleton-body\">\n @switch (widget.variant) {\n @case ('list') {\n @for (row of skeletonListRows; track row) {\n <div class=\"axm-dashboard-home__skeleton-list-row\">\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-avatar\"></ax-skeleton>\n <div class=\"axm-dashboard-home__skeleton-list-text\">\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-line axm-dashboard-home__skeleton-line--wide\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-line axm-dashboard-home__skeleton-line--narrow\"></ax-skeleton>\n </div>\n </div>\n }\n }\n @case ('compact') {\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-circle\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-line axm-dashboard-home__skeleton-line--medium\"></ax-skeleton>\n }\n @case ('action') {\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-action\"></ax-skeleton>\n }\n }\n </div>\n </article>\n }\n </div>\n </div>\n } @else if (!store.dashboards().length) {\n <axp-state-message\n icon=\"fa-light fa-shapes\"\n [title]=\"'@dashboard:empty-state.title'\"\n [description]=\"'@dashboard:empty-state.description'\"\n >\n <div slot=\"actions\">\n <button type=\"button\" (click)=\"execute({ name: 'new-dashboard' })\" class=\"ax-underline\">\n {{ '@dashboard:add-first-dashboard' | translate | async }}\n </button>\n </div>\n </axp-state-message>\n } @else {\n <axm-dashboard-grid-layout-section\n [widgetsContext]=\"context()\"\n [loadingVariant]=\"'overlay'\"\n (addWidget)=\"execute({ name: 'new-widget' })\"\n ></axm-dashboard-grid-layout-section>\n }\n </axp-page-content>\n</axp-page-layout>\n", styles: ["axm-dashboard-home{background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}axm-dashboard-home .placeholder-content{border-radius:.5rem!important;border-width:1px!important;border-style:dashed!important;--tw-border-opacity: 1 !important;border-color:rgba(var(--ax-sys-color-primary-500),var(--tw-border-opacity, 1))!important;background-color:rgba(var(--ax-sys-color-primary-lightest-surface),.5)!important}axm-dashboard-home ax-grid-layout-widget .grid-stack-item-content{border-radius:.5rem!important;border-width:1px!important;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05) !important;--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important;background-color:rgb(var(--ax-sys-color-lightest-surface))!important;color:rgb(var(--ax-sys-color-on-lightest-surface))!important;border-color:rgb(var(--ax-sys-color-border-lightest-surface))!important}axm-dashboard-home ax-grid-layout-widget .grid-stack-item-content:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-lighter-surface))!important;color:rgb(var(--ax-sys-color-on-lighter-surface))!important;border-color:rgb(var(--ax-sys-color-border-lighter-surface))!important}axm-dashboard-home .axm-dashboard-home__skeleton-grid{display:grid;gap:1rem;padding:1rem;grid-template-columns:repeat(12,minmax(0,1fr));grid-template-rows:repeat(5,minmax(72px,auto));grid-template-areas:\"clock clock clock tasks tasks tasks tasks tasks notifications notifications notifications notifications\" \"clock clock clock tasks tasks tasks tasks tasks notifications notifications notifications notifications\" \"action action action tasks tasks tasks tasks tasks notifications notifications notifications notifications\" \"notes notes notes tasks tasks tasks tasks tasks notifications notifications notifications notifications\" \"notes notes notes tasks tasks tasks tasks tasks notifications notifications notifications notifications\"}axm-dashboard-home .axm-dashboard-home__skeleton-widget{display:flex;min-height:0px;flex-direction:column;gap:.75rem;border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lightest-surface),var(--tw-bg-opacity, 1));padding:1rem;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}axm-dashboard-home .axm-dashboard-home__skeleton-title{height:1rem;width:8rem;max-width:100%;border-radius:.25rem}axm-dashboard-home .axm-dashboard-home__skeleton-body{display:flex;min-height:0px;flex:1 1 0%;flex-direction:column;gap:.75rem}axm-dashboard-home .axm-dashboard-home__skeleton-list-row{display:flex;align-items:center;gap:.75rem}axm-dashboard-home .axm-dashboard-home__skeleton-avatar{height:2.5rem;width:2.5rem;flex-shrink:0;border-radius:9999px}axm-dashboard-home .axm-dashboard-home__skeleton-list-text{display:flex;min-width:0px;flex:1 1 0%;flex-direction:column;gap:.5rem}axm-dashboard-home .axm-dashboard-home__skeleton-line{height:.75rem;border-radius:.25rem}axm-dashboard-home .axm-dashboard-home__skeleton-line--wide{width:100%}axm-dashboard-home .axm-dashboard-home__skeleton-line--medium{width:66.666667%}axm-dashboard-home .axm-dashboard-home__skeleton-line--narrow{width:60%}axm-dashboard-home .axm-dashboard-home__skeleton-circle{height:4rem;width:4rem;border-radius:9999px}axm-dashboard-home .axm-dashboard-home__skeleton-action{height:2.5rem;width:100%;border-radius:.5rem}@media(max-width:768px){axm-dashboard-home .axm-dashboard-home__skeleton-grid{grid-template-columns:repeat(6,minmax(0,1fr));grid-template-rows:auto;grid-template-areas:\"clock clock clock notes notes notes\" \"action action action notes notes notes\" \"tasks tasks tasks tasks tasks tasks\" \"notifications notifications notifications notifications notifications notifications\"}}@media(max-width:480px){axm-dashboard-home .axm-dashboard-home__skeleton-grid{grid-template-columns:minmax(0,1fr);grid-template-areas:\"clock\" \"action\" \"tasks\" \"notifications\" \"notes\"}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i1.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXButtonGroupModule }, { kind: "component", type: AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i4.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "component", type: AXMDashboardGridLayoutSectionComponent, selector: "axm-dashboard-grid-layout-section", inputs: ["widgetsContext", "loadingVariant"], outputs: ["addWidget"] }, { kind: "component", type: AXPStateMessageComponent, selector: "axp-state-message", inputs: ["mode", "icon", "title", "description", "titleParams", "descriptionParams", "look"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
8116
8752
  }
8117
8753
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMDashboardHomeComponent, decorators: [{
8118
8754
  type: Component,
@@ -8213,7 +8849,7 @@ class AXMAddDashboardPopup extends AXBasePageComponent {
8213
8849
  title: this.multiLanguageResolver.resolve(i.title),
8214
8850
  }));
8215
8851
  }
8216
- this.selectedRoleIds.set(this.roles.filter((i) => this.data?.roleIds?.includes(i.id)).map((i) => i.id));
8852
+ this.selectedRoleIds.set(this.roles.filter((i) => readScopeRoleIds(this.data?.scopeRef).includes(i.id)).map((i) => i.id));
8217
8853
  }
8218
8854
  catch (error) {
8219
8855
  console.error('Error loading roles:', error);
@@ -8222,16 +8858,19 @@ class AXMAddDashboardPopup extends AXBasePageComponent {
8222
8858
  }
8223
8859
  }
8224
8860
  async handleClose(isCanceled = false) {
8861
+ const userId = this.sessionService.user?.id ?? '';
8862
+ const tenantId = this.sessionService.tenant?.id ?? '';
8863
+ const scope = this.showAdminFields() ? 'T' : 'U';
8225
8864
  this.close({
8226
8865
  title: this.title()?.trim(),
8227
8866
  description: this.description()?.trim(),
8228
- roleIds: this.showAdminFields() ? this.selectedRoleIds() : undefined,
8867
+ scopeRef: scope === 'T' ? buildTenantScopeRef(tenantId, this.selectedRoleIds()) : buildUserScopeRef(userId),
8229
8868
  isArchived: this.showAdminFields() ? this.isArchived() : undefined,
8230
8869
  locked: this.showAdminFields() ? this.isLocked() : undefined,
8231
- scope: this.showAdminFields() ? 'T' : 'U',
8232
- createdBy: this.sessionService.user?.id,
8870
+ scope,
8871
+ createdBy: userId,
8233
8872
  createdAt: new Date(),
8234
- updatedBy: this.sessionService.user?.id,
8873
+ updatedBy: userId,
8235
8874
  updatedAt: new Date(),
8236
8875
  isCanceled,
8237
8876
  });
@@ -8408,5 +9047,5 @@ var AXPHomeDashboardSetting;
8408
9047
  * Generated bundle index. Do not edit.
8409
9048
  */
8410
9049
 
8411
- export { AXP_DASHBOARD_SHARED_SUB_CHART_SPECIALIZED as $, AXMDashboardStore as A, AXPHeatmapChartWidgetViewComponent as B, AXPHomeDashboardSetting as C, DASHBOARD_LAYOUT_PAGE_COMPONENT_KEY as D, AXPKpiDetailsWidget as E, AXPKpiDetailsWidgetViewComponent as F, AXPKpiProgressWidget as G, AXPKpiProgressWidgetViewComponent as H, AXPKpiSegmentedWidget as I, AXPKpiSegmentedWidgetViewComponent as J, AXPKpiStatCardWidget as K, AXPKpiStatCardWidgetViewComponent as L, AXPLineChartWidget as M, AXPLineChartWidgetViewComponent as N, AXPMinimalWeatherWidget as O, AXPShortcutWidget as P, AXPShortcutWidgetViewComponent as Q, AXPStickyNoteWidget as R, AXPStickyNoteWidgetViewComponent as S, AXPWeatherApiAbstract as T, AXPWeatherApiMockService as U, AXPWeatherApiService as V, AXPWeatherWidget as W, AXPWeatherWidgetViewComponent as X, AXP_DASHBOARD_SHARED_SUB_CHART_CARTESIAN as Y, AXP_DASHBOARD_SHARED_SUB_CHART_KPI as Z, AXP_DASHBOARD_SHARED_SUB_CHART_RADIAL as _, AXMDashboardGridLayoutSectionComponent as a, AXP_DASHBOARD_SHARED_SUB_UTILITY_NOTES as a0, AXP_DASHBOARD_SHARED_SUB_UTILITY_SHORTCUT as a1, AXP_DASHBOARD_SHARED_SUB_UTILITY_TIME as a2, AXP_DASHBOARD_SHARED_SUB_UTILITY_WEATHER as a3, AXP_DATE_FORMAT_OPTIONS as a4, AXP_TIMEZONE_OPTIONS as a5, AXP_WIDGETS_CHART_CATEGORY as a6, AXP_WIDGETS_UTILITY_CATEGORY as a7, RootConfig as a8, dashboardFactory as a9, DASHBOARD_LAYOUT_ENTITY_MODE as b, AXMAddDashboardPopup as c, AXMAdvancedWeatherViewComponent as d, AXMAnalogClockComponent as e, AXMClockWidgetViewComponent as f, AXMConfigurationPopup as g, AXMDashboardHomeComponent as h, AXMDashboardManagementModule as i, AXMDashboardPopupService as j, AXMDashboardWidgetWrapperComponent as k, AXMMinimalWeatherViewComponent as l, AXPAdvancedWeatherWidget as m, AXPAnalogClockWidget as n, AXPBarChartWidget as o, AXPBarChartWidgetViewComponent as p, AXPClockCalendarWidget as q, AXPClockCalendarWidgetViewComponent as r, AXPDashboardWidgetComponent as s, AXPDonutChartWidget as t, AXPDonutChartWidgetViewComponent as u, AXPFunnelChartWidget as v, AXPFunnelChartWidgetViewComponent as w, AXPGaugeChartWidget as x, AXPGaugeChartWidgetViewComponent as y, AXPHeatmapChartWidget as z };
8412
- //# sourceMappingURL=acorex-modules-dashboard-management-acorex-modules-dashboard-management-Lx3VuIg6.mjs.map
9050
+ export { AXP_DASHBOARD_SHARED_SUB_CHART_SPECIALIZED as $, AXMDashboardStore as A, AXPHeatmapChartWidgetViewComponent as B, AXPHomeDashboardSetting as C, DASHBOARD_LAYOUT_PAGE_COMPONENT_KEY as D, AXPKpiDetailsWidget as E, AXPKpiDetailsWidgetViewComponent as F, AXPKpiProgressWidget as G, AXPKpiProgressWidgetViewComponent as H, AXPKpiSegmentedWidget as I, AXPKpiSegmentedWidgetViewComponent as J, AXPKpiStatCardWidget as K, AXPKpiStatCardWidgetViewComponent as L, AXPLineChartWidget as M, AXPLineChartWidgetViewComponent as N, AXPMinimalWeatherWidget as O, AXPShortcutWidget as P, AXPShortcutWidgetViewComponent as Q, AXPStickyNoteWidget as R, AXPStickyNoteWidgetViewComponent as S, AXPWeatherApiAbstract as T, AXPWeatherApiMockService as U, AXPWeatherApiService as V, AXPWeatherWidget as W, AXPWeatherWidgetViewComponent as X, AXP_DASHBOARD_SHARED_SUB_CHART_CARTESIAN as Y, AXP_DASHBOARD_SHARED_SUB_CHART_KPI as Z, AXP_DASHBOARD_SHARED_SUB_CHART_RADIAL as _, AXMDashboardGridLayoutSectionComponent as a, AXP_DASHBOARD_SHARED_SUB_UTILITY_NOTES as a0, AXP_DASHBOARD_SHARED_SUB_UTILITY_SHORTCUT as a1, AXP_DASHBOARD_SHARED_SUB_UTILITY_TIME as a2, AXP_DASHBOARD_SHARED_SUB_UTILITY_WEATHER as a3, AXP_DATE_FORMAT_OPTIONS as a4, AXP_TIMEZONE_OPTIONS as a5, AXP_WIDGETS_CHART_CATEGORY as a6, AXP_WIDGETS_UTILITY_CATEGORY as a7, RootConfig as a8, buildEntityScopeRef as a9, buildTenantScopeRef as aa, buildUserScopeRef as ab, dashboardFactory as ac, normalizeDashboardScopeRef as ad, readScopeEntityRef as ae, readScopeRoleIds as af, readScopeTenantId as ag, readScopeUserId as ah, DASHBOARD_LAYOUT_ENTITY_MODE as b, AXMAddDashboardPopup as c, AXMAdvancedWeatherViewComponent as d, AXMAnalogClockComponent as e, AXMClockWidgetViewComponent as f, AXMConfigurationPopup as g, AXMDashboardHomeComponent as h, AXMDashboardManagementModule as i, AXMDashboardPopupService as j, AXMDashboardWidgetWrapperComponent as k, AXMMinimalWeatherViewComponent as l, AXPAdvancedWeatherWidget as m, AXPAnalogClockWidget as n, AXPBarChartWidget as o, AXPBarChartWidgetViewComponent as p, AXPClockCalendarWidget as q, AXPClockCalendarWidgetViewComponent as r, AXPDashboardWidgetComponent as s, AXPDonutChartWidget as t, AXPDonutChartWidgetViewComponent as u, AXPFunnelChartWidget as v, AXPFunnelChartWidgetViewComponent as w, AXPGaugeChartWidget as x, AXPGaugeChartWidgetViewComponent as y, AXPHeatmapChartWidget as z };
9051
+ //# sourceMappingURL=acorex-modules-dashboard-management-acorex-modules-dashboard-management-DLuhOPFz.mjs.map