@acorex/modules 21.0.0-next.56 → 21.0.0-next.59
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.
- package/fesm2022/acorex-modules-application-management.mjs +1 -1
- package/fesm2022/acorex-modules-application-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-DcPnI9fZ.mjs → acorex-modules-assessment-management-acorex-modules-assessment-management-o8aFazwA.mjs} +72 -78
- package/fesm2022/acorex-modules-assessment-management-acorex-modules-assessment-management-o8aFazwA.mjs.map +1 -0
- package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-D880d_qz.mjs → acorex-modules-assessment-management-assessment-case.entity-yrc_Yybq.mjs} +67 -71
- package/fesm2022/acorex-modules-assessment-management-assessment-case.entity-yrc_Yybq.mjs.map +1 -0
- package/fesm2022/acorex-modules-assessment-management-assessment-session-answers-view.util-BUQa_TSY.mjs +47 -0
- package/fesm2022/acorex-modules-assessment-management-assessment-session-answers-view.util-BUQa_TSY.mjs.map +1 -0
- package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-DvbocIN1.mjs → acorex-modules-assessment-management-assessment-session.entity-Cwf30iuu.mjs} +5 -41
- package/fesm2022/acorex-modules-assessment-management-assessment-session.entity-Cwf30iuu.mjs.map +1 -0
- package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-BMJ54EPO.mjs → acorex-modules-assessment-management-fill-assessment-session.command-CJieLR5g.mjs} +32 -7
- package/fesm2022/acorex-modules-assessment-management-fill-assessment-session.command-CJieLR5g.mjs.map +1 -0
- package/fesm2022/{acorex-modules-assessment-management-index-XdJCIYG3.mjs → acorex-modules-assessment-management-index-D8KjfHAH.mjs} +4 -4
- package/fesm2022/{acorex-modules-assessment-management-index-XdJCIYG3.mjs.map → acorex-modules-assessment-management-index-D8KjfHAH.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-preview-question.command-CO8NfjEb.mjs → acorex-modules-assessment-management-preview-question.command-D0-FB1HH.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-preview-question.command-CO8NfjEb.mjs.map → acorex-modules-assessment-management-preview-question.command-D0-FB1HH.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-DSzbtU0e.mjs → acorex-modules-assessment-management-preview-questionnaire.command-wqPNgv7q.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-DSzbtU0e.mjs.map → acorex-modules-assessment-management-preview-questionnaire.command-wqPNgv7q.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-DbvxAUgb.mjs → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-DYyUhSWd.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-DbvxAUgb.mjs.map → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-DYyUhSWd.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-DBfQhSKR.mjs → acorex-modules-assessment-management-question-bank-item.entity-DUf2ceKY.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-DBfQhSKR.mjs.map → acorex-modules-assessment-management-question-bank-item.entity-DUf2ceKY.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-calculation.entity-CL9s20qR.mjs → acorex-modules-assessment-management-questionnaire-calculation.entity-CYF0k42_.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-calculation.entity-CL9s20qR.mjs.map → acorex-modules-assessment-management-questionnaire-calculation.entity-CYF0k42_.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-CH_cJlSf.mjs → acorex-modules-assessment-management-questionnaire-viewer-popup.component-Cy5ElBmU.mjs} +111 -28
- package/fesm2022/acorex-modules-assessment-management-questionnaire-viewer-popup.component-Cy5ElBmU.mjs.map +1 -0
- package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-CrryBMC2.mjs → acorex-modules-assessment-management-questionnaire.entity-RWSkzNbA.mjs} +3 -3
- package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-CrryBMC2.mjs.map → acorex-modules-assessment-management-questionnaire.entity-RWSkzNbA.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-save-questionnaire-questions.command-Dq5VComh.mjs → acorex-modules-assessment-management-save-questionnaire-questions.command-koGmUbNE.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-save-questionnaire-questions.command-Dq5VComh.mjs.map → acorex-modules-assessment-management-save-questionnaire-questions.command-koGmUbNE.mjs.map} +1 -1
- package/fesm2022/acorex-modules-assessment-management-view-case-last-session-answers.command-NTuDdoYk.mjs +157 -0
- package/fesm2022/acorex-modules-assessment-management-view-case-last-session-answers.command-NTuDdoYk.mjs.map +1 -0
- package/fesm2022/acorex-modules-assessment-management-view-session-answers.command-0btGV66_.mjs +172 -0
- package/fesm2022/acorex-modules-assessment-management-view-session-answers.command-0btGV66_.mjs.map +1 -0
- package/fesm2022/acorex-modules-assessment-management.mjs +1 -1
- package/fesm2022/{acorex-modules-auth-acorex-modules-auth-NPUjHz-F.mjs → acorex-modules-auth-acorex-modules-auth-D4IBi_VD.mjs} +42 -33
- package/fesm2022/acorex-modules-auth-acorex-modules-auth-D4IBi_VD.mjs.map +1 -0
- package/fesm2022/{acorex-modules-auth-app-chooser.component-h61xNtRT.mjs → acorex-modules-auth-app-chooser.component-BEktaBWD.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-app-chooser.component-h61xNtRT.mjs.map → acorex-modules-auth-app-chooser.component-BEktaBWD.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-login.module-DF5AHqYe.mjs → acorex-modules-auth-login.module-aAwHzXPj.mjs} +4 -4
- package/fesm2022/{acorex-modules-auth-login.module-DF5AHqYe.mjs.map → acorex-modules-auth-login.module-aAwHzXPj.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-master.layout-00ZTMhc3.mjs → acorex-modules-auth-master.layout-BapDYFZ_.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-master.layout-00ZTMhc3.mjs.map → acorex-modules-auth-master.layout-BapDYFZ_.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-oauth-callback.component-Ce5Fw8Qd.mjs → acorex-modules-auth-oauth-callback.component-Cyu2vqyK.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-oauth-callback.component-Ce5Fw8Qd.mjs.map → acorex-modules-auth-oauth-callback.component-Cyu2vqyK.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-password.component-DQYCm8wg.mjs → acorex-modules-auth-password.component-DB-ac0Rn.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-password.component-DQYCm8wg.mjs.map → acorex-modules-auth-password.component-DB-ac0Rn.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-password.component-CU0AY-Ia.mjs → acorex-modules-auth-password.component-cPmwNpuq.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-password.component-CU0AY-Ia.mjs.map → acorex-modules-auth-password.component-cPmwNpuq.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-routes-CM4fRaWb.mjs → acorex-modules-auth-routes-r72zIRTa.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-routes-CM4fRaWb.mjs.map → acorex-modules-auth-routes-r72zIRTa.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-tenant-chooser.component-BBztdcvq.mjs → acorex-modules-auth-tenant-chooser.component-AQA2o6Ty.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-tenant-chooser.component-BBztdcvq.mjs.map → acorex-modules-auth-tenant-chooser.component-AQA2o6Ty.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-two-factor.module-C9AafF86.mjs → acorex-modules-auth-two-factor.module-Dx0CC5ic.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-two-factor.module-C9AafF86.mjs.map → acorex-modules-auth-two-factor.module-Dx0CC5ic.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-user-sessions.component-Qw2sgsEe.mjs → acorex-modules-auth-user-sessions.component-3Wr7DUDQ.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-user-sessions.component-Qw2sgsEe.mjs.map → acorex-modules-auth-user-sessions.component-3Wr7DUDQ.mjs.map} +1 -1
- package/fesm2022/acorex-modules-auth.mjs +1 -1
- package/fesm2022/{acorex-modules-common-audit-info-column.component-SiqKcBMQ.mjs → acorex-modules-common-audit-info-column.component-MSYPMPZJ.mjs} +2 -2
- package/fesm2022/{acorex-modules-common-audit-info-column.component-SiqKcBMQ.mjs.map → acorex-modules-common-audit-info-column.component-MSYPMPZJ.mjs.map} +1 -1
- package/fesm2022/acorex-modules-common.mjs +8 -4
- package/fesm2022/acorex-modules-common.mjs.map +1 -1
- package/fesm2022/{acorex-modules-conversation-acorex-modules-conversation-UNhA-qi5.mjs → acorex-modules-conversation-acorex-modules-conversation-DkdNLMKa.mjs} +344 -1008
- package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-DkdNLMKa.mjs.map +1 -0
- package/fesm2022/{acorex-modules-conversation-assist-delegated-agent-detail-popup.component-Be58gcns.mjs → acorex-modules-conversation-assist-delegated-agent-detail-popup.component-VKPbkRqI.mjs} +2 -2
- package/fesm2022/{acorex-modules-conversation-assist-delegated-agent-detail-popup.component-Be58gcns.mjs.map → acorex-modules-conversation-assist-delegated-agent-detail-popup.component-VKPbkRqI.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-conversation-comments-page.component-3XBLeMW8.mjs → acorex-modules-conversation-comments-page.component-ehUCjoFD.mjs} +2 -2
- package/fesm2022/{acorex-modules-conversation-comments-page.component-3XBLeMW8.mjs.map → acorex-modules-conversation-comments-page.component-ehUCjoFD.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-conversation-send-assist-chat-message.command-CSu-lJuu.mjs → acorex-modules-conversation-send-assist-chat-message.command-ZNcVi54N.mjs} +2 -2
- package/fesm2022/{acorex-modules-conversation-send-assist-chat-message.command-CSu-lJuu.mjs.map → acorex-modules-conversation-send-assist-chat-message.command-ZNcVi54N.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-conversation-start-assist-chat.command-CyoncQB1.mjs → acorex-modules-conversation-start-assist-chat.command-CX6lm1lG.mjs} +2 -2
- package/fesm2022/{acorex-modules-conversation-start-assist-chat.command-CyoncQB1.mjs.map → acorex-modules-conversation-start-assist-chat.command-CX6lm1lG.mjs.map} +1 -1
- package/fesm2022/acorex-modules-conversation.mjs +1 -1
- package/fesm2022/acorex-modules-customer-management.mjs +2 -0
- package/fesm2022/acorex-modules-customer-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-data-management.mjs +6 -5
- package/fesm2022/acorex-modules-data-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-help-desk-acorex-modules-help-desk-Bfjo-ENr.mjs → acorex-modules-help-desk-acorex-modules-help-desk-DVlO9JZw.mjs} +3 -2
- package/fesm2022/acorex-modules-help-desk-acorex-modules-help-desk-DVlO9JZw.mjs.map +1 -0
- package/fesm2022/{acorex-modules-help-desk-capture-screen.component-CsACFkPq.mjs → acorex-modules-help-desk-capture-screen.component-rNPehEf8.mjs} +2 -2
- package/fesm2022/{acorex-modules-help-desk-capture-screen.component-CsACFkPq.mjs.map → acorex-modules-help-desk-capture-screen.component-rNPehEf8.mjs.map} +1 -1
- package/fesm2022/acorex-modules-help-desk.mjs +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-acorex-modules-human-capital-management-XhV2JQXs.mjs → acorex-modules-human-capital-management-acorex-modules-human-capital-management-BWezAea1.mjs} +131 -112
- package/fesm2022/acorex-modules-human-capital-management-acorex-modules-human-capital-management-BWezAea1.mjs.map +1 -0
- package/fesm2022/{acorex-modules-human-capital-management-approve-leave-request.command-Cre30Kp7.mjs → acorex-modules-human-capital-management-approve-leave-request.command-Bh_Bbq5-.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-approve-leave-request.command-Cre30Kp7.mjs.map → acorex-modules-human-capital-management-approve-leave-request.command-Bh_Bbq5-.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-assign-position-assignment.command-NYgddiaD.mjs → acorex-modules-human-capital-management-assign-position-assignment.command-BpDdDG9i.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-assign-position-assignment.command-NYgddiaD.mjs.map → acorex-modules-human-capital-management-assign-position-assignment.command-BpDdDG9i.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-cancel-leave-request.command-DPh-KQgN.mjs → acorex-modules-human-capital-management-cancel-leave-request.command-CjtKaKFw.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-cancel-leave-request.command-DPh-KQgN.mjs.map → acorex-modules-human-capital-management-cancel-leave-request.command-CjtKaKFw.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-employee.entity-znCbbQUd.mjs → acorex-modules-human-capital-management-employee.entity-Cx_oY2aK.mjs} +8 -8
- package/fesm2022/acorex-modules-human-capital-management-employee.entity-Cx_oY2aK.mjs.map +1 -0
- package/fesm2022/{acorex-modules-human-capital-management-employment-type.entity-DUNB3zAB.mjs → acorex-modules-human-capital-management-employment-type.entity-B20Taa5x.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-employment-type.entity-DUNB3zAB.mjs.map → acorex-modules-human-capital-management-employment-type.entity-B20Taa5x.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-leave-request.entity-JyFrrCGE.mjs → acorex-modules-human-capital-management-leave-request.entity-BO8QXpZE.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-leave-request.entity-JyFrrCGE.mjs.map → acorex-modules-human-capital-management-leave-request.entity-BO8QXpZE.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-leave-type.entity-B61MiEPu.mjs → acorex-modules-human-capital-management-leave-type.entity-CQwSWqSh.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-leave-type.entity-B61MiEPu.mjs.map → acorex-modules-human-capital-management-leave-type.entity-CQwSWqSh.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-lifecycle-process-type.entity-DJqo2kTG.mjs → acorex-modules-human-capital-management-lifecycle-event-type.entity-BPWJrvbN.mjs} +13 -13
- package/fesm2022/acorex-modules-human-capital-management-lifecycle-event-type.entity-BPWJrvbN.mjs.map +1 -0
- package/fesm2022/{acorex-modules-human-capital-management-employee-lifecycle-process.entity-LX68KORg.mjs → acorex-modules-human-capital-management-lifecycle-event.entity-ZZuPu9KQ.mjs} +45 -56
- package/fesm2022/acorex-modules-human-capital-management-lifecycle-event.entity-ZZuPu9KQ.mjs.map +1 -0
- package/fesm2022/{acorex-modules-human-capital-management-position-assignment.entity-CKCC6bKg.mjs → acorex-modules-human-capital-management-position-assignment.entity-BN1y0qhi.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-position-assignment.entity-CKCC6bKg.mjs.map → acorex-modules-human-capital-management-position-assignment.entity-BN1y0qhi.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-reject-leave-request.command-Blv08UQZ.mjs → acorex-modules-human-capital-management-reject-leave-request.command-LczqOHP-.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-reject-leave-request.command-Blv08UQZ.mjs.map → acorex-modules-human-capital-management-reject-leave-request.command-LczqOHP-.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-revoke-position-assignment.command-lgEAbxYH.mjs → acorex-modules-human-capital-management-revoke-position-assignment.command-Dm8YacDI.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-revoke-position-assignment.command-lgEAbxYH.mjs.map → acorex-modules-human-capital-management-revoke-position-assignment.command-Dm8YacDI.mjs.map} +1 -1
- package/fesm2022/acorex-modules-human-capital-management-start-lifecycle-event-flow.command-DPwuyFz2.mjs +237 -0
- package/fesm2022/acorex-modules-human-capital-management-start-lifecycle-event-flow.command-DPwuyFz2.mjs.map +1 -0
- package/fesm2022/acorex-modules-human-capital-management.mjs +1 -1
- package/fesm2022/{acorex-modules-learning-management-enrollment.entity-B53AQq_9.mjs → acorex-modules-learning-management-enrollment.entity-CdJafrUh.mjs} +4 -22
- package/fesm2022/acorex-modules-learning-management-enrollment.entity-CdJafrUh.mjs.map +1 -0
- package/fesm2022/acorex-modules-learning-management.mjs +1 -1
- package/fesm2022/acorex-modules-learning-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-locale-management.mjs +27 -22
- package/fesm2022/acorex-modules-locale-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-location-management.mjs +1 -0
- package/fesm2022/acorex-modules-location-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-notification-management.mjs +1 -1
- package/fesm2022/acorex-modules-notification-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-platform-dev-tools.mjs +2 -2
- package/fesm2022/acorex-modules-platform-dev-tools.mjs.map +1 -1
- package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-5DJoQkx2.mjs → acorex-modules-platform-management-acorex-modules-platform-management-Cbf1rlEK.mjs} +4 -4
- package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-5DJoQkx2.mjs.map → acorex-modules-platform-management-acorex-modules-platform-management-Cbf1rlEK.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-platform-management-menu-list.component-C3WBYbOt.mjs → acorex-modules-platform-management-menu-list.component-DIf_-oaM.mjs} +2 -2
- package/fesm2022/{acorex-modules-platform-management-menu-list.component-C3WBYbOt.mjs.map → acorex-modules-platform-management-menu-list.component-DIf_-oaM.mjs.map} +1 -1
- package/fesm2022/acorex-modules-platform-management.mjs +1 -1
- package/fesm2022/acorex-modules-report-management.mjs +1 -1
- package/fesm2022/acorex-modules-report-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-security-management.mjs +3 -0
- package/fesm2022/acorex-modules-security-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-settings-management-acorex-modules-settings-management-Di6Sxtq3.mjs → acorex-modules-settings-management-acorex-modules-settings-management-B4Ee8USF.mjs} +6 -6
- package/fesm2022/{acorex-modules-settings-management-acorex-modules-settings-management-Di6Sxtq3.mjs.map → acorex-modules-settings-management-acorex-modules-settings-management-B4Ee8USF.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-settings-management-permission-definition.provider-Bml5VZUT.mjs → acorex-modules-settings-management-permission-definition.provider-nNhEFyc-.mjs} +2 -2
- package/fesm2022/{acorex-modules-settings-management-permission-definition.provider-Bml5VZUT.mjs.map → acorex-modules-settings-management-permission-definition.provider-nNhEFyc-.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-settings-management-setting-page.component-lN-7sTpD.mjs → acorex-modules-settings-management-setting-page.component-CEvWwS_a.mjs} +2 -2
- package/fesm2022/{acorex-modules-settings-management-setting-page.component-lN-7sTpD.mjs.map → acorex-modules-settings-management-setting-page.component-CEvWwS_a.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-settings-management-setting-view.component-D17G4RNQ.mjs → acorex-modules-settings-management-setting-view.component-C6ftmjuK.mjs} +2 -2
- package/fesm2022/{acorex-modules-settings-management-setting-view.component-D17G4RNQ.mjs.map → acorex-modules-settings-management-setting-view.component-C6ftmjuK.mjs.map} +1 -1
- package/fesm2022/acorex-modules-settings-management.mjs +1 -1
- package/fesm2022/acorex-modules-supplier-management.mjs +1 -0
- package/fesm2022/acorex-modules-supplier-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-task-management-acorex-modules-task-management-LQn5gZ6p.mjs → acorex-modules-task-management-acorex-modules-task-management--mdNdYIs.mjs} +32 -2
- package/fesm2022/acorex-modules-task-management-acorex-modules-task-management--mdNdYIs.mjs.map +1 -0
- package/fesm2022/{acorex-modules-task-management-task-board.page-BokG-G6Z.mjs → acorex-modules-task-management-task-board.page-BIZ1qH7m.mjs} +35 -5
- package/fesm2022/acorex-modules-task-management-task-board.page-BIZ1qH7m.mjs.map +1 -0
- package/fesm2022/acorex-modules-task-management.mjs +1 -1
- package/fesm2022/{acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-OLbCD-7P.mjs → acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-B4DLmioy.mjs} +3 -3
- package/fesm2022/{acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-OLbCD-7P.mjs.map → acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-B4DLmioy.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-workflow-management-index-BxqOP8AA.mjs → acorex-modules-workflow-management-index-BhVZ1Bcw.mjs} +104 -23
- package/fesm2022/acorex-modules-workflow-management-index-BhVZ1Bcw.mjs.map +1 -0
- package/fesm2022/{acorex-modules-workflow-management-index-Eh5DDK-V.mjs → acorex-modules-workflow-management-index-DC_9M9dk.mjs} +3 -3
- package/fesm2022/{acorex-modules-workflow-management-index-Eh5DDK-V.mjs.map → acorex-modules-workflow-management-index-DC_9M9dk.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-workflow-management-workflow-instance.entity-B_V3uMSI.mjs → acorex-modules-workflow-management-workflow-instance.entity-BnKT3Wgh.mjs} +2 -2
- package/fesm2022/{acorex-modules-workflow-management-workflow-instance.entity-B_V3uMSI.mjs.map → acorex-modules-workflow-management-workflow-instance.entity-BnKT3Wgh.mjs.map} +1 -1
- package/fesm2022/acorex-modules-workflow-management-workflow-task-popover.component-DjYDwHWU.mjs +255 -0
- package/fesm2022/acorex-modules-workflow-management-workflow-task-popover.component-DjYDwHWU.mjs.map +1 -0
- package/fesm2022/acorex-modules-workflow-management.mjs +1819 -745
- package/fesm2022/acorex-modules-workflow-management.mjs.map +1 -1
- package/package.json +2 -2
- package/types/acorex-modules-assessment-management.d.ts +4 -7
- package/types/acorex-modules-common.d.ts +1 -0
- package/types/acorex-modules-conversation.d.ts +35 -198
- package/types/acorex-modules-human-capital-management.d.ts +31 -30
- package/types/acorex-modules-learning-management.d.ts +0 -1
- package/types/acorex-modules-task-management.d.ts +41 -2
- package/types/acorex-modules-workflow-management.d.ts +280 -34
- package/fesm2022/acorex-modules-assessment-management-acorex-modules-assessment-management-DcPnI9fZ.mjs.map +0 -1
- package/fesm2022/acorex-modules-assessment-management-assessment-case.entity-D880d_qz.mjs.map +0 -1
- package/fesm2022/acorex-modules-assessment-management-assessment-session.entity-DvbocIN1.mjs.map +0 -1
- package/fesm2022/acorex-modules-assessment-management-fill-assessment-session.command-BMJ54EPO.mjs.map +0 -1
- package/fesm2022/acorex-modules-assessment-management-questionnaire-viewer-popup.component-CH_cJlSf.mjs.map +0 -1
- package/fesm2022/acorex-modules-assessment-management-view-session-answers.command-DpppXekm.mjs +0 -112
- package/fesm2022/acorex-modules-assessment-management-view-session-answers.command-DpppXekm.mjs.map +0 -1
- package/fesm2022/acorex-modules-auth-acorex-modules-auth-NPUjHz-F.mjs.map +0 -1
- package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-UNhA-qi5.mjs.map +0 -1
- package/fesm2022/acorex-modules-help-desk-acorex-modules-help-desk-Bfjo-ENr.mjs.map +0 -1
- package/fesm2022/acorex-modules-human-capital-management-acorex-modules-human-capital-management-XhV2JQXs.mjs.map +0 -1
- package/fesm2022/acorex-modules-human-capital-management-employee-lifecycle-process.entity-LX68KORg.mjs.map +0 -1
- package/fesm2022/acorex-modules-human-capital-management-employee.entity-znCbbQUd.mjs.map +0 -1
- package/fesm2022/acorex-modules-human-capital-management-lifecycle-process-type.entity-DJqo2kTG.mjs.map +0 -1
- package/fesm2022/acorex-modules-learning-management-enrollment.entity-B53AQq_9.mjs.map +0 -1
- package/fesm2022/acorex-modules-task-management-acorex-modules-task-management-LQn5gZ6p.mjs.map +0 -1
- package/fesm2022/acorex-modules-task-management-task-board.page-BokG-G6Z.mjs.map +0 -1
- package/fesm2022/acorex-modules-workflow-management-index-BxqOP8AA.mjs.map +0 -1
- package/fesm2022/acorex-modules-workflow-management-workflow-task-popover.component-DMszilef.mjs +0 -356
- package/fesm2022/acorex-modules-workflow-management-workflow-task-popover.component-DMszilef.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-modules-conversation-acorex-modules-conversation-UNhA-qi5.mjs","sources":["../../../../libs/modules/conversation/src/lib/const.ts","../../../../libs/modules/conversation/src/lib/features/commands/conversation-command.keys.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/utils/chat-ai-target.util.ts","../../../../libs/modules/conversation/src/lib/features/chat/services/assist-chat-launcher.service.ts","../../../../libs/modules/conversation/src/lib/features/search/assist-search.provider.ts","../../../../libs/modules/conversation/src/lib/features/search/assist-search-definition.provider.ts","../../../../libs/modules/conversation/src/lib/entities/tab/tab.service.ts","../../../../libs/modules/conversation/src/lib/entities/tab/tab.entity.ts","../../../../libs/modules/conversation/src/lib/entities/room/room.service.ts","../../../../libs/modules/conversation/src/lib/entities/room/room.entity.ts","../../../../libs/modules/conversation/src/lib/entities/message/message.service.ts","../../../../libs/modules/conversation/src/lib/entities/message/message.entity.ts","../../../../libs/modules/conversation/src/lib/entities/message/message.types.ts","../../../../libs/modules/conversation/src/lib/entities/tab/tab.module.ts","../../../../libs/modules/conversation/src/lib/entities/room/room.module.ts","../../../../libs/modules/conversation/src/lib/entities/message/message.module.ts","../../../../libs/modules/conversation/src/lib/entities/index.ts","../../../../libs/modules/conversation/src/lib/entity.provider.ts","../../../../libs/modules/conversation/src/lib/manifest.ts","../../../../libs/modules/conversation/src/lib/menu.keys.ts","../../../../libs/modules/conversation/src/lib/permission.keys.ts","../../../../libs/modules/conversation/src/lib/menu.provider.ts","../../../../libs/modules/conversation/src/lib/permission-definition.provider.ts","../../../../libs/modules/conversation/src/lib/features/chat/chat-notification.helper.ts","../../../../libs/modules/conversation/src/lib/features/chat/chat-realtime.service.ts","../../../../libs/modules/conversation/src/lib/features/chat/chat.service.ts","../../../../libs/modules/conversation/src/lib/features/chat/chat-management.service.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/actions/assist-chat-debug-mode.service.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/utils/assist-suggestion-chips.util.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/shared/assist-suggestion-chips.component.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/empty-state/chat-message-list-empty-fallback.component.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/services/chat-conversation-apis.abstract.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/composer/chat-assist-composer-starter-prompts.component.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/empty-state/chat-empty-assist-composer.component.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/side-bar/chat-with-assist-dialog.component.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/side-bar/chat-sidebar-new-actions.component.ts","../../../../libs/modules/conversation/src/lib/features/chat/chat.component.ts","../../../../libs/modules/conversation/src/lib/features/chat/chat.component.html","../../../../libs/modules/conversation/src/lib/features/chat/plugins/utils/assist-bot-transcript.util.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/utils/assist-peer-participant.util.ts","../../../../libs/modules/conversation/src/lib/features/comment/comment-realtime.service.ts","../../../../libs/modules/conversation/src/lib/features/comment/comment.service.ts","../../../../libs/modules/conversation/src/lib/features/comment/comment-management.service.ts","../../../../libs/modules/conversation/src/lib/features/comment/comment-notification.helper.ts","../../../../libs/modules/conversation/src/lib/features/comment/comment.component.ts","../../../../libs/modules/conversation/src/lib/features/comment/comment.component.html","../../../../libs/modules/conversation/src/lib/features/comment/comments.plugin.ts","../../../../libs/modules/conversation/src/lib/features/comment/popup/comment-popup.component.ts","../../../../libs/modules/conversation/src/lib/features/comment/popup/comment-popup.component.html","../../../../libs/modules/conversation/src/lib/features/comment/widget/comment-widget-view.component.ts","../../../../libs/modules/conversation/src/lib/features/comment/widget/comment-widget.config.ts","../../../../libs/modules/conversation/src/lib/features/comment/workflow/comment.workflow.ts","../../../../libs/modules/conversation/src/lib/badge.provider.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/utils/assist-debug-information.util.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/actions/copy-debug-information.actions.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/tabs/chat-conversation-tabs.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/actions/rename-assist-conversation.action.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/composer/chat-voice-recorder.component.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/composer/chat-voice-recording-composer.action.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/info-bar-actions/chat-info-bar-assist-model-action.component.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/info-bar-actions/chat-info-bar-actions.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/utils/assist-segment-direction.util.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/message-renderers/assist-bot-image-line.component.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/message-renderers/node-message-renderer.component.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/message-renderers/assist-transcript-user-line.component.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/message-renderers/assist-transcript-user-line.component.html","../../../../libs/modules/conversation/src/lib/features/chat/plugins/utils/assist-delegated-agent-detail.dialog.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/message-renderers/assist-message-renderer.component.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/message-renderers/assist-message-renderer.component.html","../../../../libs/modules/conversation/src/lib/features/chat/plugins/message-renderers/assist-message-renderer.plugin.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/message-renderers/node-message-renderer.plugin.ts","../../../../libs/modules/conversation/src/lib/features/chat/chat-conversation2.providers.ts","../../../../libs/modules/conversation/src/lib/features/chat/chat-notification-content.component.ts","../../../../libs/modules/conversation/src/lib/features/chat/chat-notification.provider.ts","../../../../libs/modules/conversation/src/lib/features/comment/comment-notification.provider.ts","../../../../libs/modules/conversation/src/lib/features/comment/comments-page/comments-page-component.provider.ts","../../../../libs/modules/conversation/src/lib/widget-definition.provider.ts","../../../../libs/modules/conversation/src/lib/conversation.module.ts","../../../../libs/modules/conversation/src/acorex-modules-conversation.ts"],"sourcesContent":["const config = {\n i18n: 'conversation',\n module: 'Conversation',\n route: 'chat',\n};\n\nexport const RootConfig = {\n config,\n module: {\n route: 'conversation',\n name: config.module,\n title: `@${config.i18n}:module.title`,\n icon: 'fa-light fa-comments',\n },\n entities: {\n room: {\n name: 'room',\n title: `t(\"room.plural-title\", { scope: \"${config.i18n}\" })`,\n source: `${config.module}.Room`,\n icon: 'fa-light fa-comments',\n },\n message: {\n name: 'message',\n title: `t(\"message.plural-title\", { scope: \"${config.i18n}\" })`,\n source: `${config.module}.Message`,\n icon: 'fa-light fa-message',\n },\n tab: {\n name: 'tab',\n title: `t(\"tab.plural-title\", { scope: \"${config.i18n}\" })`,\n source: `${config.module}.Tab`,\n icon: 'fa-light fa-folder',\n },\n },\n};\n","/** Starts a new bot conversation with the given AI assist model. */\nexport const CONVERSATION_START_ASSIST_CHAT_COMMAND = 'Conversation:StartAssistChat';\n\n/** Sends a user text message in the active assist chat, or starts a chat when {@code assistId} is provided. */\nexport const CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND = 'Conversation:SendAssistChatMessage';\n","//#region ---- Imports ----\n\nimport { RootConfig } from '@acorex/modules/ai-management';\nimport type { AXPMultiLanguageString } from '@acorex/platform/core';\nimport type { AXPEntityDefinitionRegistryService } from '@acorex/platform/layout/entity';\n\n//#endregion\n\n//#region ---- Types ----\n\n/** Row shown in Conversation “Chat with AI” pickers (catalog assist). */\nexport interface AXMChatAiTargetRow {\n id: string;\n name: string;\n title: AXPMultiLanguageString | string;\n description?: AXPMultiLanguageString | string;\n professionImageUrl?: string;\n}\n\n//#endregion\n\n//#region ---- Participant & metadata ----\n\n/** Synthetic bot participant id for assist chats. */\nexport function axmChatAiPeerParticipantId(catalogId: string): string {\n return `assist-${catalogId.trim()}`;\n}\n\n/** Conversation metadata for starting an AI chat from a picker row. */\nexport function axmBuildAiChatConversationMetadata(row: AXMChatAiTargetRow): Record<string, unknown> {\n return { assistId: row.id };\n}\n\n/** True when conversation metadata targets an assist row. */\nexport function axmConversationHasAiChat(\n conversation: { metadata?: Record<string, unknown> } | null | undefined,\n): boolean {\n const assistId = conversation?.metadata?.['assistId'];\n return typeof assistId === 'string' && assistId.trim().length > 0;\n}\n\n//#endregion\n\n//#region ---- Catalog load ----\n\ntype EntityListExecute = (req: {\n skip?: number;\n take?: number;\n sort?: { name: string; dir: string }[];\n}) => Promise<{ items: Record<string, unknown>[]; total: number }>;\n\n/** Loads assist rows for Conversation AI chat pickers. */\nexport async function axmLoadChatAiTargets(\n entityRegistry: AXPEntityDefinitionRegistryService,\n): Promise<AXMChatAiTargetRow[]> {\n const assists = await axmQueryEntityList(entityRegistry, RootConfig.entities.assist.name);\n\n return assists\n .map((raw) => ({\n id: String(raw['id'] ?? ''),\n name: String(raw['name'] ?? ''),\n title: raw['title'] as AXPMultiLanguageString | string,\n description: raw['description'] as AXPMultiLanguageString | string | undefined,\n professionImageUrl: typeof raw['professionImageUrl'] === 'string' ? raw['professionImageUrl'] : undefined,\n }))\n .filter((row) => row.id.trim().length > 0)\n .sort((a, b) => a.name.localeCompare(b.name, undefined, { sensitivity: 'base' }));\n}\n\n//#endregion\n\n//#region ---- Display & filter (dialog + global search) ----\n\n/** Resolves ML or plain string for search/display. */\nexport function axmResolveChatAiTargetText(\n resolveMl: (value: AXPMultiLanguageString) => string | undefined,\n value: AXPMultiLanguageString | string | undefined,\n): string {\n if (!value) {\n return '';\n }\n if (typeof value === 'string') {\n return value;\n }\n return resolveMl(value) ?? '';\n}\n\nexport function axmChatAiTargetDisplayName(\n resolveMl: (value: AXPMultiLanguageString) => string | undefined,\n row: AXMChatAiTargetRow,\n): string {\n return axmResolveChatAiTargetText(resolveMl, row.title).trim() || row.name.trim() || row.id;\n}\n\nexport function axmChatAiTargetDisplayDescription(\n resolveMl: (value: AXPMultiLanguageString) => string | undefined,\n row: AXMChatAiTargetRow,\n): string | undefined {\n if (!row.description) {\n return undefined;\n }\n const text = axmResolveChatAiTargetText(resolveMl, row.description).trim();\n return text || undefined;\n}\n\nexport function axmChatAiTargetAvatarUrl(row: AXMChatAiTargetRow): string | null {\n const url = row.professionImageUrl?.trim();\n return url ? url : null;\n}\n\n/** Fallback i18n key for rows with no catalog description. */\nexport function axmChatAiTargetShortcutDescriptionKey(): string {\n return '@conversation:search.assist.shortcut-description';\n}\n\n/** Same filter as {@link AXMChatWithAssistDialogComponent} target list search. */\nexport function axmFilterChatAiTargets(\n resolveMl: (value: AXPMultiLanguageString) => string | undefined,\n rows: AXMChatAiTargetRow[],\n query: string,\n): AXMChatAiTargetRow[] {\n const q = query.trim().toLowerCase();\n if (!q) {\n return rows;\n }\n return rows.filter((r) => {\n const titleText = axmResolveChatAiTargetText(resolveMl, r.title).toLowerCase();\n return (\n r.name.toLowerCase().includes(q) ||\n titleText.includes(q) ||\n axmResolveChatAiTargetText(resolveMl, r.description).toLowerCase().includes(q)\n );\n });\n}\n\n//#endregion\n\n//#region ---- Entity list query ----\n\nasync function axmQueryEntityList(\n entityRegistry: AXPEntityDefinitionRegistryService,\n entityName: string,\n): Promise<Record<string, unknown>[]> {\n const entity = await entityRegistry.resolve(RootConfig.module.name, entityName);\n const execute = entity.queries?.list?.execute as EntityListExecute | undefined;\n if (!execute) {\n throw new Error(`${entityName} entity has no list query.`);\n }\n const res = await execute({\n skip: 0,\n take: 500,\n sort: [{ name: 'name', dir: 'asc' }],\n });\n return res.items ?? [];\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXConversation, AXConversationService } from '@acorex/components/conversation2';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPMultiLanguageString } from '@acorex/platform/core';\nimport { AXPEntityDefinitionRegistryService } from '@acorex/platform/layout/entity';\nimport { Injectable, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport {\n axmBuildAiChatConversationMetadata,\n axmChatAiPeerParticipantId,\n axmChatAiTargetAvatarUrl,\n axmChatAiTargetDisplayDescription,\n axmChatAiTargetDisplayName,\n axmFilterChatAiTargets,\n axmLoadChatAiTargets,\n type AXMChatAiTargetRow,\n} from '../plugins/utils/chat-ai-target.util';\nimport type { AXMStartAssistChatOptions, AXMStartAssistChatResult } from './assist-chat-launcher.types';\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * Starts bot conversations from catalog assist rows,\n * shared by global search shortcuts and {@link AXMConversationStartAssistChatCommand}.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMChatAssistLauncherService {\n private readonly conversationService = inject(AXConversationService);\n private readonly entityRegistry = inject(AXPEntityDefinitionRegistryService);\n private readonly translationService = inject(AXTranslationService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly router = inject(Router);\n private readonly toastService = inject(AXToastService);\n\n private targetsCache: AXMChatAiTargetRow[] | null = null;\n private loadPromise: Promise<AXMChatAiTargetRow[]> | null = null;\n\n async loadTargets(force = false): Promise<AXMChatAiTargetRow[]> {\n if (!force && this.targetsCache) {\n return this.targetsCache;\n }\n if (!force && this.loadPromise) {\n return this.loadPromise;\n }\n\n this.loadPromise = axmLoadChatAiTargets(this.entityRegistry);\n try {\n this.targetsCache = await this.loadPromise;\n return this.targetsCache;\n } finally {\n this.loadPromise = null;\n }\n }\n\n displayName(row: AXMChatAiTargetRow): string {\n return axmChatAiTargetDisplayName(this.#resolveMl.bind(this), row);\n }\n\n displayDescription(row: AXMChatAiTargetRow): string | undefined {\n return axmChatAiTargetDisplayDescription(this.#resolveMl.bind(this), row);\n }\n\n targetAvatarUrl(row: AXMChatAiTargetRow): string | null {\n return axmChatAiTargetAvatarUrl(row);\n }\n\n filterTargets(rows: AXMChatAiTargetRow[], query: string): AXMChatAiTargetRow[] {\n return axmFilterChatAiTargets(this.#resolveMl.bind(this), rows, query);\n }\n\n async startAssistChat(options: AXMStartAssistChatOptions): Promise<AXMStartAssistChatResult | null> {\n const targetId = (options.targetId ?? options.assistId)?.trim();\n if (!targetId) {\n return null;\n }\n\n const rows = await this.loadTargets();\n const row = rows.find((r) => r.id === targetId);\n if (!row) {\n const message = await this.translationService.translateAsync(\n '@conversation:chat.assist-dialog.errors.start-chat',\n );\n this.toastService.danger(message);\n return null;\n }\n\n try {\n const conversation = await this.#createTargetConversation(row);\n await this.conversationService.selectConversation(conversation.id);\n\n if (options.navigate !== false) {\n await this.router.navigate([this.#applicationRouteSegment(), 'chat', conversation.id]);\n }\n\n return { conversation };\n } catch (error: unknown) {\n console.error('Failed to start AI chat:', error);\n const message = await this.translationService.translateAsync(\n '@conversation:chat.assist-dialog.errors.start-chat',\n );\n this.toastService.danger(message);\n return null;\n }\n }\n\n async #createTargetConversation(row: AXMChatAiTargetRow): Promise<AXConversation> {\n const participantId = axmChatAiPeerParticipantId(row.id);\n const title = this.displayName(row);\n const avatar = this.targetAvatarUrl(row);\n\n return this.conversationService.createConversation([participantId], 'bot', {\n title,\n ...(avatar ? { avatar } : {}),\n icon: 'fa-solid fa-robot',\n metadata: axmBuildAiChatConversationMetadata(row),\n });\n }\n\n #resolveMl(value: AXPMultiLanguageString): string | undefined {\n return this.translationService.resolve(value);\n }\n\n #applicationRouteSegment(): string {\n return this.sessionService.application?.name ?? 'platform';\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPSearchProvider, AXPSearchResult } from '@acorex/platform/common';\nimport { inject, Injectable } from '@angular/core';\nimport { sortBy } from 'lodash-es';\nimport {\n axmChatAiTargetShortcutDescriptionKey,\n type AXMChatAiTargetRow,\n} from '../chat/plugins/utils/chat-ai-target.util';\nimport { AXMChatAssistLauncherService } from '../chat/services/assist-chat-launcher.service';\nimport { CONVERSATION_START_ASSIST_CHAT_COMMAND } from '../commands/conversation-command.keys';\n\n/** Search group key — AI chat targets (assists), not conversation history. */\nexport const AXM_CONVERSATION_ASSIST_SEARCH_GROUP = 'conversation-assist';\n\n//#endregion\n\n//#region ---- Provider ----\n\n/**\n * Global search entries to start a new AI chat — same catalog as\n * {@link AXMChatWithAssistDialogComponent} / {@link AXMChatSidebarNewActionsComponent}.\n *\n * Note: the shared global search popup only queries when the text length is > 2.\n */\n@Injectable()\nexport class AXMConversationAssistSearchProvider implements AXPSearchProvider {\n private readonly launcher = inject(AXMChatAssistLauncherService);\n\n async search(text: string): Promise<AXPSearchResult[]> {\n let rows: AXMChatAiTargetRow[];\n try {\n rows = await this.launcher.loadTargets();\n } catch (error: unknown) {\n console.error('Failed to load AI chat targets for shortcut search:', error);\n return [];\n }\n\n const filtered = this.launcher.filterTargets(rows, text);\n\n const sorted = sortBy(filtered, (row) => this.launcher.displayName(row).toLowerCase());\n\n return sorted.map<AXPSearchResult>((row) => ({\n id: row.id,\n group: AXM_CONVERSATION_ASSIST_SEARCH_GROUP,\n title: row.title,\n description: row.description ?? axmChatAiTargetShortcutDescriptionKey(),\n icon: 'fa-solid fa-robot',\n data: { id: row.id, name: row.name },\n command: {\n name: CONVERSATION_START_ASSIST_CHAT_COMMAND,\n options: {\n targetId: row.id,\n },\n },\n }));\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPSearchDefinitionProvider, AXPSearchDefinitionProviderContext } from '@acorex/platform/common';\nimport { AXPSystemActionType } from '@acorex/platform/core';\nimport { Injectable } from '@angular/core';\nimport { AXM_CONVERSATION_ASSIST_SEARCH_GROUP } from './assist-search.provider';\n\n//#endregion\n\n//#region ---- Provider ----\n\n/** Search group for AI assist shortcut picker (not chat/conversation history). */\n@Injectable()\nexport class AXMConversationAssistSearchDefinitionProvider implements AXPSearchDefinitionProvider {\n async provide(context: AXPSearchDefinitionProviderContext): Promise<void> {\n context.addDefinition(\n AXM_CONVERSATION_ASSIST_SEARCH_GROUP,\n '@conversation:search.assist.group-title',\n AXM_CONVERSATION_ASSIST_SEARCH_GROUP,\n 'fa-solid fa-robot',\n 4,\n {\n format: {\n id: '{{id}}',\n },\n actions: [\n {\n name: 'start-assist-chat',\n type: AXPSystemActionType.View,\n priority: 'primary',\n },\n ],\n },\n );\n }\n}\n\n//#endregion\n","import { AXMEntityCrudServiceImpl } from '@acorex/platform/layout/entity';\nimport { Injectable } from '@angular/core';\nimport { RootConfig } from '../../const';\nimport { AXMConversationTab } from './tab.types';\n\nexport abstract class AXMConversationTabService extends AXMEntityCrudServiceImpl<string, AXMConversationTab> {}\n\n@Injectable()\nexport class AXMConversationTabServiceImpl extends AXMConversationTabService {\n constructor() {\n super(`${RootConfig.module.name}.${RootConfig.entities.tab.name}`);\n }\n}\n","import { AXPEntity, AXPEntityCommandScope, AXPEntityQueryType, createAllQueryView } from '@acorex/platform/common';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { entityMasterCrudActions, entityMasterRecordActions } from '@acorex/platform/layout/entity';\nimport { Injector } from '@angular/core';\nimport { RootConfig } from '../../const';\nimport { AXMConversationTabService } from './tab.service';\n\nexport async function tabFactory(injector: Injector): Promise<AXPEntity | null> {\n const dataService = injector.get(AXMConversationTabService);\n const i18n = RootConfig.config.i18n;\n\n const entityDef: AXPEntity = {\n module: RootConfig.module.name,\n name: RootConfig.entities.tab.name,\n title: RootConfig.entities.tab.title,\n icon: RootConfig.entities.tab.icon,\n formats: {\n individual: `t(\"tab.individual-title\", { scope: \"${i18n}\" })`,\n plural: RootConfig.entities.tab.title,\n searchResult: {\n title: '{{ title }}',\n description: RootConfig.module.title,\n },\n },\n plugins: [{ name: 'color' }],\n relatedEntities: [],\n groups: [\n {\n id: 'section',\n title: `t(\"tab.basic-info\", { scope: \"${i18n}\" })`,\n },\n ],\n properties: [\n {\n name: 'name',\n title: `t(\"tab.props.name\", { scope: \"${i18n}\" })`,\n groupId: 'section',\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [{ rule: 'required' }],\n },\n {\n name: 'title',\n title: `t(\"tab.props.title\", { scope: \"${i18n}\" })`,\n groupId: 'section',\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [{ rule: 'required' }],\n },\n {\n name: 'rooms',\n title: `t(\"tab.props.rooms\", { scope: \"${i18n}\" })`,\n groupId: 'section',\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.lookup,\n options: {\n entity: `${RootConfig.module.name}.${RootConfig.entities.room.name}`,\n multiple: true,\n },\n },\n },\n },\n {\n name: 'excludeRooms',\n title: `t(\"tab.props.excludeRooms\", { scope: \"${i18n}\" })`,\n groupId: 'section',\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.lookup,\n options: {\n entity: `${RootConfig.module.name}.${RootConfig.entities.room.name}`,\n multiple: true,\n },\n },\n },\n },\n {\n name: 'includeRooms',\n title: `t(\"tab.props.includeRooms\", { scope: \"${i18n}\" })`,\n groupId: 'section',\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.lookup,\n options: {\n entity: `${RootConfig.module.name}.${RootConfig.entities.room.name}`,\n multiple: true,\n },\n },\n },\n },\n ],\n columns: [{ name: 'name' }, { name: 'title' }],\n commands: {\n create: {\n execute: async (data: any) => {\n const res = await dataService.insertOne(data);\n return { id: res };\n },\n },\n delete: {\n execute: async (id: any) => {\n return await dataService.deleteOne(id);\n },\n },\n update: {\n execute: async (data: any) => {\n return await dataService.updateOne(data.id, data);\n },\n },\n },\n queries: {\n byKey: {\n execute: async (id: string) => {\n return await dataService.getOne(id);\n },\n type: AXPEntityQueryType.Single,\n },\n list: {\n execute: async (e: any) => {\n return await dataService.query(e);\n },\n type: AXPEntityQueryType.List,\n },\n },\n interfaces: {\n master: {\n create: {\n sections: [{ id: 'section' }],\n properties: [\n { name: 'name', layout: { positions: { lg: { colSpan: 6 } } } },\n { name: 'title', layout: { positions: { lg: { colSpan: 6 } } } },\n { name: 'rooms', layout: { positions: { lg: { colSpan: 12 } } } },\n { name: 'excludeRooms', layout: { positions: { lg: { colSpan: 12 } } } },\n { name: 'includeRooms', layout: { positions: { lg: { colSpan: 12 } } } },\n ],\n },\n update: {\n sections: [{ id: 'section' }],\n properties: [\n { name: 'name', layout: { positions: { lg: { colSpan: 6 } } } },\n { name: 'title', layout: { positions: { lg: { colSpan: 6 } } } },\n { name: 'rooms', layout: { positions: { lg: { colSpan: 12 } } } },\n { name: 'excludeRooms', layout: { positions: { lg: { colSpan: 12 } } } },\n { name: 'includeRooms', layout: { positions: { lg: { colSpan: 12 } } } },\n ],\n },\n single: {\n title: '{{title}}',\n sections: [{ id: 'section' }],\n properties: [\n { name: 'name', layout: { positions: { lg: { colSpan: 6 } } } },\n { name: 'title', layout: { positions: { lg: { colSpan: 6 } } } },\n ],\n actions: [...entityMasterRecordActions()],\n },\n list: {\n actions: [...entityMasterCrudActions()],\n views: [\n createAllQueryView({\n columns: ['name', 'title'],\n sorts: [{ name: 'name', dir: 'asc' }],\n }),\n ],\n },\n },\n },\n };\n\n return entityDef;\n}\n","import { AXMEntityCrudServiceImpl } from '@acorex/platform/layout/entity';\nimport { Injectable } from '@angular/core';\nimport { RootConfig } from '../../const';\nimport { AXMConversationRoom } from './room.types';\n\nexport abstract class AXMRoomService extends AXMEntityCrudServiceImpl<string, AXMConversationRoom> {}\n\n@Injectable()\nexport class AXMRoomServiceImpl extends AXMRoomService {\n constructor() {\n super(`${RootConfig.module.name}.${RootConfig.entities.room.name}`);\n }\n}\n","import { AXPEntity, AXPEntityCommandScope, AXPEntityQueryType, createAllQueryView } from '@acorex/platform/common';\nimport { entityMasterCrudActions, entityMasterRecordActions } from '@acorex/platform/layout/entity';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { Injector } from '@angular/core';\nimport { RootConfig } from '../../const';\nimport { AXMRoomService } from './room.service';\n\nexport async function roomFactory(injector: Injector): Promise<AXPEntity | null> {\n const dataService = injector.get(AXMRoomService);\n const i18n = RootConfig.config.i18n;\n\n const entityDef: AXPEntity = {\n module: RootConfig.module.name,\n name: RootConfig.entities.room.name,\n title: RootConfig.entities.room.title,\n icon: RootConfig.entities.room.icon,\n formats: {\n individual: RootConfig.entities.room.title,\n plural: RootConfig.entities.room.title,\n searchResult: {\n title: '{{ title }}',\n description: RootConfig.module.title,\n },\n },\n relatedEntities: [],\n groups: [\n {\n id: 'section',\n title: RootConfig.entities.room.title,\n },\n ],\n properties: [\n {\n name: 'name',\n title: '@general:terms.common.name',\n groupId: 'section',\n options: {\n sort: {\n enabled: true,\n },\n filter: {\n advance: {\n enabled: true,\n },\n inline: {\n enabled: false,\n },\n },\n },\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [\n {\n rule: 'required',\n },\n ],\n },\n\n {\n name: 'title',\n title: '@general:terms.common.title',\n groupId: 'section',\n options: {\n sort: {\n enabled: true,\n },\n filter: {\n advance: {\n enabled: true,\n },\n inline: {\n enabled: false,\n },\n },\n },\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [\n {\n rule: 'required',\n },\n ],\n },\n ],\n columns: [{ name: 'name' }, { name: 'title' }],\n commands: {\n create: {\n execute: async (data: any) => {\n const res = await dataService.insertOne(data);\n return { id: res };\n },\n },\n delete: {\n execute: async (id: any) => {\n return await dataService.deleteOne(id);\n },\n },\n update: {\n execute: async (data: any) => {\n return await dataService.updateOne(data.id, data);\n },\n },\n },\n queries: {\n byKey: {\n execute: async (id: string) => {\n return await dataService.getOne(id);\n },\n type: AXPEntityQueryType.Single,\n },\n list: {\n execute: async (e: any) => {\n return await dataService.query(e);\n },\n type: AXPEntityQueryType.List,\n },\n },\n interfaces: {\n master: {\n create: {\n sections: [\n {\n id: 'section',\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n ],\n },\n update: {\n sections: [\n {\n id: 'section',\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n ],\n },\n single: {\n title: '{{title}}',\n sections: [\n {\n id: 'section',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n },\n },\n },\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n ],\n actions: [...entityMasterRecordActions()],\n },\n list: {\n actions: [...entityMasterCrudActions()],\n views: [\n createAllQueryView({\n sorts: [{ name: 'name', dir: 'asc' }],\n }),\n ],\n },\n },\n },\n };\n\n return entityDef;\n}\n","import { AXMEntityCrudServiceImpl } from '@acorex/platform/layout/entity';\nimport { Injectable } from '@angular/core';\nimport { RootConfig } from '../../const';\nimport { AXMConversationMessage } from './message.types';\n\nexport abstract class AXMMessageService extends AXMEntityCrudServiceImpl<string, AXMConversationMessage> {}\n\n@Injectable()\nexport class AXMMessageServiceImpl extends AXMMessageService {\n constructor() {\n super(`${RootConfig.module.name}.${RootConfig.entities.message.name}`);\n }\n}\n","import { AXPEntity, AXPEntityCommandScope, AXPEntityQueryType, createAllQueryView } from '@acorex/platform/common';\nimport { entityMasterCrudActions, entityMasterRecordActions } from '@acorex/platform/layout/entity';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { Injector } from '@angular/core';\nimport { RootConfig } from '../../const';\nimport { AXMMessageService } from './message.service';\n\nexport async function messageFactory(injector: Injector): Promise<AXPEntity | null> {\n const dataService = injector.get(AXMMessageService);\n const i18n = RootConfig.config.i18n;\n\n const entityDef: AXPEntity = {\n module: RootConfig.module.name,\n name: RootConfig.entities.message.name,\n title: RootConfig.entities.message.title,\n icon: RootConfig.entities.message.icon,\n formats: {\n individual: RootConfig.entities.message.title,\n plural: RootConfig.entities.message.title,\n searchResult: {\n title: '{{ title }}',\n description: RootConfig.module.title,\n },\n },\n relatedEntities: [],\n groups: [\n {\n id: 'section',\n title: RootConfig.entities.message.title,\n },\n ],\n properties: [\n {\n name: 'name',\n title: '@general:terms.common.name',\n groupId: 'section',\n options: {\n sort: {\n enabled: true,\n },\n filter: {\n advance: {\n enabled: true,\n },\n inline: {\n enabled: false,\n },\n },\n },\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [\n {\n rule: 'required',\n },\n {\n rule: 'maxLength',\n options: { value: 1000 },\n },\n ],\n },\n\n {\n name: 'title',\n title: '@general:terms.common.title',\n groupId: 'section',\n options: {\n sort: {\n enabled: true,\n },\n filter: {\n advance: {\n enabled: true,\n },\n inline: {\n enabled: false,\n },\n },\n },\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [\n {\n rule: 'required',\n },\n {\n rule: 'maxLength',\n options: { value: 1000 },\n },\n ],\n },\n ],\n columns: [{ name: 'name' }, { name: 'title' }],\n commands: {\n create: {\n execute: async (data: any) => {\n const res = await dataService.insertOne(data);\n return { id: res };\n },\n },\n delete: {\n execute: async (id: any) => {\n return await dataService.deleteOne(id);\n },\n },\n update: {\n execute: async (data: any) => {\n return await dataService.updateOne(data.id, data);\n },\n },\n },\n queries: {\n byKey: {\n execute: async (id: string) => {\n return await dataService.getOne(id);\n },\n type: AXPEntityQueryType.Single,\n },\n list: {\n execute: async (e: any) => {\n return await dataService.query(e);\n },\n type: AXPEntityQueryType.List,\n },\n },\n interfaces: {\n master: {\n create: {\n sections: [\n {\n id: 'section',\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n ],\n },\n update: {\n sections: [\n {\n id: 'section',\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n ],\n },\n single: {\n title: '{{title}}',\n sections: [\n {\n id: 'section',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n },\n },\n },\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n ],\n actions: [...entityMasterRecordActions()],\n },\n list: {\n actions: [...entityMasterCrudActions()],\n views: [\n createAllQueryView({\n sorts: [{ name: 'name', dir: 'asc' }],\n }),\n ],\n },\n },\n },\n };\n\n return entityDef;\n}\n","// === Shared Types ===\n\nimport { AXPContent, AXPUserReference } from '@acorex/platform/core';\nimport { AXPEntityModel } from '@acorex/platform/layout/entity';\n\nexport type AXMSeenType = 'delivered' | 'read';\nexport type AXMReactionType = 'like' | 'love' | 'laugh' | 'angry' | 'sad' | string;\n\nexport interface AXMConversationReaction {\n author: AXPUserReference;\n type: AXMReactionType;\n}\n\nexport interface AXMConversationSeen {\n author: AXPUserReference;\n type: AXMSeenType;\n}\n\n// === Core Models ===\n\nexport interface AXMConversationMessage extends AXPEntityModel<string> {\n name?: string;\n title?: string;\n roomId: string;\n message: AXPContent;\n author: AXPUserReference;\n replyId?: string | null;\n reactions: AXMConversationReaction[];\n seen: AXMConversationSeen[];\n isPinned?: boolean;\n}\n","import { NgModule } from '@angular/core';\nimport { AXMConversationTabService, AXMConversationTabServiceImpl } from './tab.service';\n\n@NgModule({\n imports: [],\n exports: [],\n declarations: [],\n providers: [\n {\n provide: AXMConversationTabService,\n useClass: AXMConversationTabServiceImpl,\n },\n ],\n})\nexport class AXMConversationTabEntityModule { }\n","import { NgModule } from '@angular/core';\nimport { AXMRoomService, AXMRoomServiceImpl } from './room.service';\n\n@NgModule({\n imports: [],\n exports: [],\n declarations: [],\n providers: [\n {\n provide: AXMRoomService,\n useClass: AXMRoomServiceImpl,\n },\n ],\n})\nexport class AXMRoomEntityModule { }\n","import { NgModule } from '@angular/core';\nimport { AXMMessageService, AXMMessageServiceImpl } from './message.service';\n\n@NgModule({\n imports: [],\n exports: [],\n declarations: [],\n providers: [\n {\n provide: AXMMessageService,\n useClass: AXMMessageServiceImpl,\n },\n ],\n})\nexport class AXMMessageEntityModule { }\n","// Entity Services\nexport * from './tab';\nexport * from './room';\nexport * from './message';\n\n// Entity Modules\nexport * from './tab/tab.module';\nexport * from './room/room.module';\nexport * from './message/message.module';\n","import { AXPEntity } from '@acorex/platform/common';\nimport { AXPEntityDefinitionLoader, AXPEntityPreloadEntity } from '@acorex/platform/layout/entity';\nimport { Injectable, Injector } from '@angular/core';\nimport { RootConfig } from './const';\nimport { messageFactory, roomFactory, tabFactory } from './entities';\n\n@Injectable()\nexport class AXMConversationModuleEntityProvider implements AXPEntityDefinitionLoader {\n constructor(private injector: Injector) { }\n\n public preload(): AXPEntityPreloadEntity[] {\n const module = RootConfig.module.name;\n return Array.from(Object.values(RootConfig.entities)).map((entity: any) => ({\n module: module,\n entity: entity.name,\n }));\n }\n\n public async get(moduleName: string, entityName: string): Promise<AXPEntity | null> {\n switch (entityName) {\n case 'room':\n return roomFactory(this.injector);\n case 'message':\n return messageFactory(this.injector);\n case 'tab':\n return tabFactory(this.injector);\n default:\n return null;\n }\n }\n\n async list(): Promise<{ name: string; module: string }[]> {\n const m = RootConfig.module.name;\n return Promise.resolve(\n Object.values(RootConfig.entities).map((e) => ({ name: e.name, module: m }))\n );\n }\n}\n","//#region ---- Imports ----\n\nimport { AXPModuleManifest } from '@acorex/platform/core';\nimport { RootConfig } from './const';\n\n//#endregion\n\n//#region ---- Manifest Definition ----\n\n/**\n * Conversation Module Manifest.\n * Defines module metadata, features, and provider references.\n */\nexport const ConversationManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n\n // Module dependencies\n dependencies: ['NotificationManagement'],\n};\n\n//#endregion\n\n","export const AXPConversationMenuKeys = {\n Conversations: 'Conversation:Menu:Conversations',\n} as const;\n\n","export const AXMPermissionsKeys = {\n Conversation: {\n Management: 'Conversation:Permission:Management',\n },\n};\n","import { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex/platform/common';\nimport { Injectable, inject } from '@angular/core';\nimport { RootConfig } from './const';\nimport { AXPConversationMenuKeys } from './menu.keys';\nimport { AXMPermissionsKeys } from './permission.keys';\n\n@Injectable()\nexport class AXMMenuProvider implements AXPMenuProvider {\n private sessionService = inject(AXPSessionService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const module = RootConfig;\n const scope = RootConfig.config.i18n;\n\n context.addItems([\n {\n name: AXPConversationMenuKeys.Conversations,\n text: `@conversation:module.menus.conversations.title`,\n path: `${this.sessionService.application?.name}/${module.config.route}`,\n priority: 30,\n icon: RootConfig.entities.room.icon,\n badgeKey: 'badge-chat',\n policy: {\n permissions: [AXMPermissionsKeys.Conversation.Management],\n },\n },\n ]);\n }\n}\n","//#region ---- Imports ----\n\nimport { AXPPermissionDefinitionProvider, AXPPermissionDefinitionProviderContext } from '@acorex/platform/auth';\nimport { Injectable } from '@angular/core';\nimport { AXMPermissionsKeys } from './permission.keys';\nimport { RootConfig } from './const';\n\n//#endregion\n\n//#region ---- Permission Definition Provider ----\n\n@Injectable()\nexport class AXMPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXMPermissionsKeys.Conversation;\n const modulePermissions = '@conversation:module.permissions';\n\n context\n .addGroup(\n RootConfig.module.name,\n `${modulePermissions}.title`,\n `${modulePermissions}.description`,\n )\n .addPermission(\n keys.Management,\n `${modulePermissions}.manage.title`,\n `${modulePermissions}.manage.description`,\n )\n .endPermission()\n .endGroup();\n }\n}\n\n//#endregion\n\n","import { AXMNotificationItem } from '@acorex/modules/notification-management';\nimport { AXPUserReference } from '@acorex/platform/core';\nimport { AXMChatMessage, AXMChatRoom } from './chat.type';\n\nexport function convertChatMessageToNotification(\n room: Pick<AXMChatRoom, 'id' | 'title'>,\n message: AXMChatMessage,\n currentUser: AXPUserReference,\n): Omit<AXMNotificationItem, 'id' | 'entityName' | 'createAt'> {\n return {\n channel: 'InApp',\n template: {\n category: 'Inbox',\n prority: 'Notice',\n icon: 'fa-light fa-comment',\n isPinned: false,\n },\n title: room.title || '@conversation:chat.notification.new-message-title',\n body: message.message.content,\n sender: message.author,\n receiver: currentUser,\n content: message.message,\n readAt: null,\n type: 'Chat',\n data: {\n roomId: room.id,\n },\n };\n}\n","import { AXPUserReference } from '@acorex/platform/core';\nimport { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { AXMChatMessageEvent, AXMChatRoomEvent, AXMChatTabEvent } from './chat.type';\n\nexport abstract class AXMChatRealtimeService {\n abstract readonly room$: Observable<AXMChatRoomEvent>;\n abstract readonly message$: Observable<AXMChatMessageEvent>;\n abstract readonly tab$: Observable<AXMChatTabEvent>;\n abstract readonly typingStatus$: Observable<{ roomId: string; user: AXPUserReference; isTyping: boolean }>;\n\n abstract notifyRoom(event: AXMChatRoomEvent): void;\n abstract notifyMessage(event: AXMChatMessageEvent): void;\n abstract notifyTab(event: AXMChatTabEvent): void;\n abstract startTyping(user: AXPUserReference, roomId: string): void;\n abstract stopTyping(user: AXPUserReference, roomId: string): void;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXMChatRealtimeServiceImpl extends AXMChatRealtimeService {\n private readonly _room$ = new Subject<AXMChatRoomEvent>();\n readonly room$ = this._room$.asObservable();\n\n private readonly _message$ = new Subject<AXMChatMessageEvent>();\n readonly message$ = this._message$.asObservable();\n\n private readonly _tab$ = new Subject<AXMChatTabEvent>();\n readonly tab$ = this._tab$.asObservable();\n\n private readonly _typingStatus$ = new Subject<{ roomId: string; user: AXPUserReference; isTyping: boolean }>();\n readonly typingStatus$ = this._typingStatus$.asObservable();\n\n notifyRoom(event: AXMChatRoomEvent): void {\n this._room$.next(event);\n }\n\n notifyMessage(event: AXMChatMessageEvent): void {\n this._message$.next(event);\n }\n\n notifyTab(event: AXMChatTabEvent): void {\n this._tab$.next(event);\n }\n\n startTyping(user: AXPUserReference, roomId: string): void {\n this._typingStatus$.next({ roomId, user, isTyping: true });\n }\n\n stopTyping(user: AXPUserReference, roomId: string): void {\n this._typingStatus$.next({ roomId, user, isTyping: false });\n }\n}\n","import { AXPContent, AXPContentType, AXPDataGenerator, AXPUserReference } from '@acorex/platform/core';\nimport { inject, Injectable } from '@angular/core';\nimport { AXMMessageService } from '../../entities/message/message.service';\nimport {\n AXMConversationMessage,\n AXMConversationReaction,\n AXMConversationSeen,\n} from '../../entities/message/message.types';\nimport { AXMRoomService } from '../../entities/room/room.service';\nimport { AXMConversationRoom } from '../../entities/room/room.types';\nimport { AXMConversationTabService } from '../../entities/tab/tab.service';\nimport { AXMConversationTab } from '../../entities/tab/tab.types';\n\nexport abstract class AXMChatService {\n // ChatRoomService Methods\n abstract createRoom(\n members: AXPUserReference[],\n title: string | undefined,\n currentUser: AXPUserReference,\n avatar?: string,\n ): Promise<AXMConversationRoom>;\n abstract getRoom(roomId: string): Promise<AXMConversationRoom>;\n abstract listRooms(skip?: number, take?: number): Promise<{ items: AXMConversationRoom[]; total: number }>;\n abstract updateRoom(\n roomId: string,\n data: Partial<AXMConversationRoom>,\n currentUser: AXPUserReference,\n ): Promise<AXMConversationRoom>;\n abstract deleteRoom(roomId: string): Promise<boolean>;\n\n // ChatTabService Methods\n abstract createTab(data: Omit<AXMConversationTab, 'id'>): Promise<AXMConversationTab>;\n abstract getTab(tabId: string): Promise<AXMConversationTab>;\n abstract listTabs(skip?: number, take?: number): Promise<{ items: AXMConversationTab[]; total: number }>;\n abstract updateTab(tabId: string, data: Partial<AXMConversationTab>): Promise<AXMConversationTab>;\n abstract deleteTab(tabId: string): Promise<boolean>;\n\n // ChatMessageService Methods\n abstract sendMessage(\n roomId: string,\n content: string,\n author: AXPUserReference,\n contentType?: AXPContentType,\n replyId?: string,\n ): Promise<AXMConversationMessage>;\n abstract getMessages(\n roomId: string,\n skip?: number,\n take?: number,\n ): Promise<{ items: AXMConversationMessage[]; total: number }>;\n abstract getMessage(messageId: string): Promise<AXMConversationMessage>;\n abstract editMessage(\n messageId: string,\n content: string,\n currentUser: AXPUserReference,\n contentType?: AXPContentType,\n ): Promise<AXMConversationMessage>;\n abstract deleteMessage(messageId: string): Promise<boolean>;\n abstract pinMessage(\n messageId: string,\n isPinned: boolean,\n currentUser: AXPUserReference,\n ): Promise<AXMConversationMessage>;\n\n // ChatReactionService Methods\n abstract updateReactions(\n messageId: string,\n reactions: AXMConversationReaction[],\n currentUser: AXPUserReference,\n ): Promise<AXMConversationMessage>;\n abstract getReactions(messageId: string): Promise<AXMConversationReaction[]>;\n\n // ChatSeenService Methods\n abstract updateSeen(\n messageId: string,\n seen: AXMConversationSeen[],\n currentUser: AXPUserReference,\n ): Promise<AXMConversationMessage>;\n abstract getSeenBy(messageId: string): Promise<AXMConversationSeen[]>;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXMChatServiceImpl extends AXMChatService {\n private readonly roomService = inject(AXMRoomService);\n private readonly messageService = inject(AXMMessageService);\n private readonly tabService = inject(AXMConversationTabService);\n\n createRoom(\n members: AXPUserReference[],\n title: string | undefined,\n currentUser: AXPUserReference,\n avatar?: string,\n ): Promise<AXMConversationRoom> {\n const resolvedTitle = title?.trim() || 'Chat';\n const room: Omit<AXMConversationRoom, 'id'> = {\n members,\n /** Required by `Conversation.Room` entity validation; stable programmatic key (UI uses {@link title}). */\n name: `room-${AXPDataGenerator.uuid()}`,\n title: resolvedTitle,\n topic: members.length > 2 ? 'group' : 'personal',\n auditInfo: {\n created: { at: new Date(), by: currentUser },\n updated: { at: new Date(), by: currentUser },\n },\n type: 'chat',\n avatar: avatar ?? null,\n };\n return this.roomService.insertOne(room).then((id) => this.roomService.getOne(id));\n }\n\n getRoom(roomId: string): Promise<AXMConversationRoom> {\n return this.roomService.getOne(roomId);\n }\n\n async listRooms(skip = 0, take = 100): Promise<{ items: AXMConversationRoom[]; total: number }> {\n return this.roomService.query({\n skip,\n take,\n filter: { field: 'type', value: 'chat', operator: { type: 'equal' } },\n });\n }\n\n updateRoom(\n roomId: string,\n data: Partial<AXMConversationRoom>,\n currentUser: AXPUserReference,\n ): Promise<AXMConversationRoom> {\n const update = { ...data, auditInfo: { updated: { at: new Date(), by: currentUser } } };\n return this.roomService.updateOne(roomId, update);\n }\n\n async deleteRoom(roomId: string): Promise<boolean> {\n await this.roomService.deleteOne(roomId);\n return true;\n }\n\n createTab(data: Omit<AXMConversationTab, 'id'>): Promise<AXMConversationTab> {\n return this.tabService.insertOne(data).then((id) => this.tabService.getOne(id));\n }\n\n getTab(tabId: string): Promise<AXMConversationTab> {\n return this.tabService.getOne(tabId);\n }\n\n listTabs(skip = 0, take = 100): Promise<{ items: AXMConversationTab[]; total: number }> {\n return this.tabService.query({ skip, take });\n }\n\n updateTab(tabId: string, data: Partial<AXMConversationTab>): Promise<AXMConversationTab> {\n return this.tabService.updateOne(tabId, data);\n }\n\n async deleteTab(tabId: string): Promise<boolean> {\n await this.tabService.deleteOne(tabId);\n return true;\n }\n\n sendMessage(\n roomId: string,\n content: string,\n author: AXPUserReference,\n contentType: AXPContentType = 'text',\n replyId?: string,\n ): Promise<AXMConversationMessage> {\n const messageContent: AXPContent = { content, contentType };\n const message: Omit<AXMConversationMessage, 'id'> = {\n roomId,\n message: messageContent,\n author,\n replyId,\n auditInfo: {\n created: { at: new Date(), by: author },\n updated: { at: new Date(), by: author },\n },\n reactions: [],\n seen: [],\n };\n return this.messageService.insertOne({ ...message }).then((id) => this.messageService.getOne(id));\n }\n\n async getMessages(roomId: string, skip = 0, take = 99): Promise<{ items: AXMConversationMessage[]; total: number }> {\n return this.messageService.query({\n skip,\n take,\n filter: { field: 'roomId', value: roomId, operator: { type: 'equal' } },\n sort: [{ field: 'created.at', dir: 'desc' } as any],\n });\n }\n\n getMessage(messageId: string): Promise<AXMConversationMessage> {\n return this.messageService.getOne(messageId);\n }\n\n editMessage(\n messageId: string,\n content: string,\n currentUser: AXPUserReference,\n contentType: AXPContentType = 'text',\n ): Promise<AXMConversationMessage> {\n const messageContent: AXPContent = { content, contentType };\n return this.messageService.updateOne(messageId, {\n message: messageContent,\n auditInfo: {\n updated: { at: new Date(), by: currentUser },\n },\n });\n }\n\n async deleteMessage(messageId: string): Promise<boolean> {\n await this.messageService.deleteOne(messageId);\n return true;\n }\n\n pinMessage(messageId: string, isPinned: boolean, currentUser: AXPUserReference): Promise<AXMConversationMessage> {\n return this.messageService.updateOne(messageId, {\n isPinned,\n auditInfo: {\n updated: { at: new Date(), by: currentUser },\n },\n });\n }\n\n updateReactions(\n messageId: string,\n reactions: AXMConversationReaction[],\n currentUser: AXPUserReference,\n ): Promise<AXMConversationMessage> {\n return this.messageService.updateOne(messageId, {\n reactions,\n auditInfo: {\n updated: { at: new Date(), by: currentUser },\n },\n });\n }\n\n getReactions(messageId: string): Promise<AXMConversationReaction[]> {\n return this.messageService.getOne(messageId).then((m) => m.reactions || []);\n }\n\n updateSeen(\n messageId: string,\n seen: AXMConversationSeen[],\n currentUser: AXPUserReference,\n ): Promise<AXMConversationMessage> {\n return this.messageService.updateOne(messageId, {\n seen,\n auditInfo: {\n updated: { at: new Date(), by: currentUser },\n },\n });\n }\n\n getSeenBy(messageId: string): Promise<AXMConversationSeen[]> {\n return this.messageService.getOne(messageId).then((m) => m.seen || []);\n }\n}\n","import { AXMNotificationConnectorService } from '@acorex/modules/notification-management';\nimport { AXMUsersEntityService } from '@acorex/modules/security-management';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPContentType, AXPUserReference } from '@acorex/platform/core';\nimport { inject, Injectable } from '@angular/core';\nimport {\n AXMConversationMessage,\n AXMConversationReaction,\n AXMConversationSeen,\n AXMReactionType,\n AXMSeenType,\n} from '../../entities/message/message.types';\nimport { AXMConversationRoom } from '../../entities/room/room.types';\nimport { AXMConversationTab } from '../../entities/tab/tab.types';\nimport { convertChatMessageToNotification } from './chat-notification.helper';\nimport { AXMChatRealtimeService } from './chat-realtime.service';\nimport { AXMChatService } from './chat.service';\nimport { AXMChatMessage, AXMChatRoom } from './chat.type';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXMChatManagementService {\n private readonly chatService = inject(AXMChatService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly usersService = inject(AXMUsersEntityService);\n private readonly realtimeService = inject(AXMChatRealtimeService);\n private readonly notificationConnectorService = inject(AXMNotificationConnectorService);\n private readonly userCache = new Map<string, AXPUserReference>();\n private readonly messagePageSize = 99;\n\n private getCurrentUser(): AXPUserReference {\n const user = this.sessionService.user;\n if (!user) {\n throw new Error('No authenticated user found.');\n }\n return {\n id: user.id,\n type: 'user',\n fullName: user.title?.trim(),\n username: user.name?.trim(),\n };\n }\n\n private async getUserInfo(userId: string): Promise<AXPUserReference> {\n const cached = this.userCache.get(userId);\n if (cached) {\n return cached;\n }\n try {\n const user = await this.usersService.getOne(userId);\n const ref: AXPUserReference = {\n id: user.id,\n type: 'user',\n fullName: `${user.displayName}`.trim(),\n username: user.username?.trim(),\n };\n this.userCache.set(userId, ref);\n return ref;\n } catch (error) {\n console.error(`Failed to get user info for ID: ${userId}`, error);\n const fallback: AXPUserReference = {\n id: userId,\n type: 'user',\n fullName: 'Unknown User',\n username: 'Unknown User',\n };\n this.userCache.set(userId, fallback);\n return fallback;\n }\n }\n\n private async formatMessage(message: AXMConversationMessage): Promise<AXMChatMessage> {\n if (message.author && !message.author.fullName) {\n const authorInfo = await this.getUserInfo(message.author.id);\n return {\n ...message,\n author: authorInfo,\n };\n }\n return message;\n }\n\n private async formatRoom(room: AXMConversationRoom): Promise<AXMChatRoom> {\n const { items } = await this.getMessages(room.id, 0, this.messagePageSize);\n const lastMessage = items.length > 0 ? items[0] : undefined;\n const currentUserId = this.getCurrentUser().id;\n\n const unreadCount = items.filter((message) => {\n const isFromCurrentUser = message.author.id === currentUserId;\n const isReadByCurrentUser = (message.seen || []).some((seen) => seen.author.id === currentUserId);\n return !isFromCurrentUser && !isReadByCurrentUser;\n }).length;\n\n const members = await Promise.all(\n room.members.map(async (member) => {\n if (member.fullName) {\n return member;\n }\n return this.getUserInfo(member.id);\n }),\n );\n\n return {\n ...room,\n lastMessage,\n unreadCount,\n members: members.filter((m) => m.id !== currentUserId),\n };\n }\n\n private async mapWithConcurrency<T, R>(items: T[], limit: number, fn: (t: T) => Promise<R>): Promise<R[]> {\n const results: (R | undefined)[] = new Array(items.length);\n let i = 0;\n const worker = async () => {\n while (true) {\n const idx = i++;\n if (idx >= items.length) break;\n try {\n results[idx] = await fn(items[idx]);\n } catch (err) {\n console.error('AXMChatManagementService: item processing failed', err);\n results[idx] = undefined;\n }\n }\n };\n const workers = Array(Math.min(limit, items.length))\n .fill(0)\n .map(() => worker());\n await Promise.all(workers);\n return results.filter((r): r is R => r !== undefined);\n }\n\n async createRoom(memberIds: string[], title?: string, avatar?: string | null): Promise<AXMChatRoom> {\n if (memberIds.length === 0) {\n throw new Error('At least one member is required to create a room');\n }\n\n const currentUser = this.getCurrentUser();\n const allMemberIds = [...new Set([...memberIds, currentUser.id])];\n\n const memberReferences = await Promise.all(\n allMemberIds.map((id) => (id === currentUser.id ? Promise.resolve(currentUser) : this.getUserInfo(id))),\n );\n const newRoom = await this.chatService.createRoom(memberReferences, title, currentUser, avatar || undefined);\n const newChatRoom = await this.formatRoom(newRoom);\n this.realtimeService.notifyRoom({ type: 'add', payload: newChatRoom });\n return newChatRoom;\n }\n\n async getRoom(roomId: string): Promise<AXMChatRoom> {\n const room = await this.chatService.getRoom(roomId);\n if (!room) {\n throw new Error(`Chat room with ID ${roomId} not found.`);\n }\n return this.formatRoom(room);\n }\n\n async listRooms(skip = 0, take = 100): Promise<{ items: AXMChatRoom[]; total: number }> {\n const { items, total } = await this.chatService.listRooms(skip, take);\n const chatRooms = await this.mapWithConcurrency(items, 6, (room) => this.formatRoom(room));\n const sorted = [...chatRooms].sort((a, b) => {\n const ad = a.lastMessage?.auditInfo?.created?.at ? new Date(a.lastMessage.auditInfo.created.at).getTime() : 0;\n const bd = b.lastMessage?.auditInfo?.created?.at ? new Date(b.lastMessage.auditInfo.created.at).getTime() : 0;\n return bd - ad;\n });\n return { items: sorted, total };\n }\n\n async updateRoom(roomId: string, data: Partial<AXMConversationRoom>): Promise<AXMConversationRoom> {\n const currentUser = this.getCurrentUser();\n const updated = await this.chatService.updateRoom(roomId, data, currentUser);\n try {\n const formatted = await this.formatRoom(updated);\n this.realtimeService.notifyRoom({ type: 'update', payload: formatted });\n } catch (err) {\n console.error('Failed to notify room update', err);\n }\n return updated;\n }\n\n async deleteRoom(roomId: string): Promise<boolean> {\n const result = await this.chatService.deleteRoom(roomId);\n if (result) {\n this.realtimeService.notifyRoom({ type: 'remove', payload: roomId });\n }\n return result;\n }\n\n async addParticipant(roomId: string, userId: string): Promise<AXMConversationRoom> {\n const room = await this.chatService.getRoom(roomId);\n if (room.members.some((m) => m.id === userId)) return room;\n const userRef = await this.getUserInfo(userId);\n const updatedMembers = [...room.members, userRef];\n const currentUser = this.getCurrentUser();\n const updated = await this.chatService.updateRoom(roomId, { members: updatedMembers }, currentUser);\n try {\n const formatted = await this.formatRoom(updated);\n this.realtimeService.notifyRoom({ type: 'update', payload: formatted });\n } catch (err) {\n console.error('Failed to notify add participant', err);\n }\n return updated;\n }\n\n async removeParticipant(roomId: string, userId: string): Promise<AXMConversationRoom> {\n const room = await this.chatService.getRoom(roomId);\n const updatedMembers = room.members.filter((member) => member.id !== userId);\n const currentUser = this.getCurrentUser();\n const updated = await this.chatService.updateRoom(roomId, { members: updatedMembers }, currentUser);\n try {\n const formatted = await this.formatRoom(updated);\n this.realtimeService.notifyRoom({ type: 'update', payload: formatted });\n } catch (err) {\n console.error('Failed to notify remove participant', err);\n }\n return updated;\n }\n\n async createTab(data: Omit<AXMConversationTab, 'id'>): Promise<AXMConversationTab> {\n const newTab = await this.chatService.createTab(data);\n this.realtimeService.notifyTab({ type: 'add', payload: newTab });\n return newTab;\n }\n\n getTab(tabId: string): Promise<AXMConversationTab> {\n return this.chatService.getTab(tabId);\n }\n\n listTabs(skip?: number, take?: number): Promise<{ items: AXMConversationTab[]; total: number }> {\n return this.chatService.listTabs(skip, take);\n }\n\n async updateTab(tabId: string, data: Partial<AXMConversationTab>): Promise<AXMConversationTab> {\n const updated = await this.chatService.updateTab(tabId, data);\n try {\n this.realtimeService.notifyTab({ type: 'update', payload: updated });\n } catch (err) {\n console.error('Failed to notify tab update', err);\n }\n return updated;\n }\n\n async deleteTab(tabId: string): Promise<boolean> {\n const result = await this.chatService.deleteTab(tabId);\n if (result) {\n this.realtimeService.notifyTab({ type: 'remove', payload: tabId });\n }\n return result;\n }\n\n async addIncludeRoomToTab(tabId: string, roomId: string): Promise<AXMConversationTab> {\n const tab = await this.getTab(tabId);\n const room = await this.chatService.getRoom(roomId);\n\n if (tab && room) {\n if (tab.includeRooms.some((r) => r.id === roomId)) {\n return tab;\n }\n const includeRooms = [...tab.includeRooms, room];\n const excludeRooms = tab.excludeRooms.filter((r) => r.id !== roomId);\n return this.updateTab(tabId, { includeRooms, excludeRooms });\n } else {\n throw new Error(`Tab with ID ${tabId} or room with ID ${roomId} not found.`);\n }\n }\n\n async removeIncludeRoomFromTab(tabId: string, roomId: string): Promise<AXMConversationTab> {\n const tab = await this.getTab(tabId);\n\n if (tab) {\n if (tab.includeRooms.some((r) => r.id === roomId)) {\n const updatedRooms = tab.includeRooms.filter((r) => r.id !== roomId);\n return this.updateTab(tabId, { includeRooms: updatedRooms });\n } else {\n throw new Error(`${tabId} tab does not include room with ID ${roomId}.`);\n }\n } else {\n throw new Error(`Tab with ID ${tabId} not found.`);\n }\n }\n\n async addExcludeRoomToTab(tabId: string, roomId: string): Promise<AXMConversationTab> {\n const tab = await this.getTab(tabId);\n const room = await this.chatService.getRoom(roomId);\n\n if (tab && room) {\n if (tab.excludeRooms.some((r) => r.id === roomId)) {\n return tab;\n }\n const excludeRooms = [...tab.excludeRooms, room];\n const includeRooms = tab.includeRooms.filter((r) => r.id !== roomId);\n return this.updateTab(tabId, { excludeRooms, includeRooms });\n } else {\n throw new Error(`Tab with ID ${tabId} or room with ID ${roomId} not found.`);\n }\n }\n\n async removeExcludeRoomFromTab(tabId: string, roomId: string): Promise<AXMConversationTab> {\n const tab = await this.getTab(tabId);\n\n if (tab) {\n if (tab.excludeRooms.some((r) => r.id === roomId)) {\n const updatedRooms = tab.excludeRooms.filter((r) => r.id !== roomId);\n return this.updateTab(tabId, { excludeRooms: updatedRooms });\n } else {\n throw new Error(`${tabId} tab does not exclude room with ID ${roomId}.`);\n }\n } else {\n throw new Error(`Tab with ID ${tabId} not found.`);\n }\n }\n\n async sendMessage(\n roomId: string,\n content: string,\n contentType: AXPContentType = 'text',\n replyId?: string,\n userId?: string,\n ): Promise<AXMChatMessage> {\n const author = userId ? await this.getUserInfo(userId) : this.getCurrentUser();\n const newMessage = await this.chatService.sendMessage(roomId, content, author, contentType, replyId);\n const formattedMessage = await this.formatMessage(newMessage);\n this.realtimeService.notifyMessage({ type: 'add', payload: formattedMessage });\n\n // Create a notification when a new message is sent by someone else\n try {\n const currentUser = this.getCurrentUser();\n if (formattedMessage.author.id !== currentUser.id) {\n const baseRoom = await this.chatService.getRoom(formattedMessage.roomId);\n const notification = convertChatMessageToNotification(\n { id: baseRoom.id, title: baseRoom.title },\n formattedMessage,\n currentUser,\n );\n await this.notificationConnectorService.create({\n ...notification,\n id: formattedMessage.id,\n entityName: 'notifications',\n createAt: new Date(),\n });\n }\n } catch (error) {\n // Non-blocking: log and continue\n console.error('Failed to create notification for new message', error);\n }\n return formattedMessage;\n }\n\n async getMessages(roomId: string, skip?: number, take?: number): Promise<{ items: AXMChatMessage[]; total: number }> {\n const result = await this.chatService.getMessages(roomId, skip, take);\n const formattedMessages = await Promise.all(result.items.map((m) => this.formatMessage(m)));\n return { items: formattedMessages, total: result.total };\n }\n\n async getMessage(messageId: string): Promise<AXMChatMessage> {\n const message = await this.chatService.getMessage(messageId);\n return this.formatMessage(message);\n }\n\n async editMessage(\n messageId: string,\n content: string,\n contentType: AXPContentType = 'text',\n ): Promise<AXMConversationMessage> {\n const currentUser = this.getCurrentUser();\n const updatedMessage = await this.chatService.editMessage(messageId, content, currentUser, contentType);\n this.realtimeService.notifyMessage({ type: 'update', payload: await this.formatMessage(updatedMessage) });\n return updatedMessage;\n }\n\n async deleteMessage(messageId: string): Promise<boolean> {\n const result = await this.chatService.deleteMessage(messageId);\n if (result) {\n this.realtimeService.notifyMessage({ type: 'remove', payload: messageId });\n }\n return result;\n }\n\n async replyMessage(\n replyToMessageId: string,\n content: string,\n contentType: AXPContentType = 'text',\n ): Promise<AXMConversationMessage> {\n const originalMessage = await this.chatService.getMessage(replyToMessageId);\n return this.sendMessage(originalMessage.roomId, content, contentType, replyToMessageId);\n }\n\n async pinMessage(messageId: string): Promise<AXMConversationMessage> {\n const currentUser = this.getCurrentUser();\n return this.chatService.pinMessage(messageId, true, currentUser);\n }\n\n async unpinMessage(messageId: string): Promise<AXMConversationMessage> {\n const currentUser = this.getCurrentUser();\n return this.chatService.pinMessage(messageId, false, currentUser);\n }\n\n async addReaction(messageId: string, type: AXMReactionType): Promise<AXMConversationMessage> {\n const author = this.getCurrentUser();\n const message = await this.chatService.getMessage(messageId);\n const reactions = message.reactions || [];\n if (reactions.some((r) => r.author.id === author.id && r.type === type)) {\n return message;\n }\n const updatedReactions: AXMConversationReaction[] = [...reactions, { author, type }];\n const res = await this.chatService.updateReactions(messageId, updatedReactions, author);\n this.realtimeService.notifyMessage({ type: 'update', payload: await this.formatMessage(res) });\n return res;\n }\n\n async removeReaction(messageId: string, type: AXMReactionType): Promise<AXMConversationMessage> {\n const author = this.getCurrentUser();\n const message = await this.chatService.getMessage(messageId);\n const updatedReactions = (message.reactions || []).filter((r) => !(r.author.id === author.id && r.type === type));\n const res = await this.chatService.updateReactions(messageId, updatedReactions, author);\n this.realtimeService.notifyMessage({ type: 'update', payload: await this.formatMessage(res) });\n return res;\n }\n\n async getReactions(messageId: string): Promise<AXMConversationReaction[]> {\n return this.chatService.getReactions(messageId);\n }\n\n async markSeen(messageId: string, notify = true): Promise<AXMConversationMessage> {\n const author = this.getCurrentUser();\n const message = await this.chatService.getMessage(messageId);\n const seen = message.seen || [];\n if (seen.some((s) => s.author.id === author.id)) {\n return message;\n }\n const updatedSeen: AXMConversationSeen[] = [...seen, { author, type: 'read' as AXMSeenType }];\n const updatedMessage = await this.chatService.updateSeen(messageId, updatedSeen, author);\n if (notify) {\n this.realtimeService.notifyRoom({ type: 'seen', payload: updatedMessage.roomId });\n }\n return updatedMessage;\n }\n\n async getSeenBy(messageId: string): Promise<AXMConversationSeen[]> {\n return this.chatService.getSeenBy(messageId);\n }\n\n async markRoomSeen(roomId: string): Promise<boolean> {\n try {\n if (!roomId) {\n return true;\n }\n const currentUserId = this.getCurrentUser().id;\n const take = this.messagePageSize;\n let skip = 0;\n let pageCount = 0;\n let processedAny = false;\n const maxPages = 10; // safety guard\n while (pageCount < maxPages) {\n const { items } = await this.getMessages(roomId, skip, take);\n if (items.length === 0) {\n break;\n }\n const unreadMessages = items.filter(\n (message) =>\n message.author.id !== currentUserId && !message.seen?.some((s) => s.author.id === currentUserId),\n );\n if (unreadMessages.length > 0) {\n await Promise.all(unreadMessages.map((message) => this.markSeen(message.id, false)));\n processedAny = true;\n }\n if (items.length < take) {\n break;\n }\n skip += take;\n pageCount++;\n }\n if (processedAny) {\n this.realtimeService.notifyRoom({ type: 'seen', payload: roomId });\n }\n return true;\n } catch (error) {\n console.error(`Error marking room ${roomId} as seen:`, error);\n return false;\n }\n }\n\n async startTyping(roomId: string, userId?: string): Promise<void> {\n const user = userId ? await this.getUserInfo(userId) : this.getCurrentUser();\n this.realtimeService.startTyping(user, roomId);\n }\n\n async stopTyping(roomId: string, userId?: string): Promise<void> {\n const user = userId ? await this.getUserInfo(userId) : this.getCurrentUser();\n this.realtimeService.stopTyping(user, roomId);\n }\n}\n","//#region ---- Imports ----\n\nimport { AXPCommonSettings, AXPSettingsService } from '@acorex/platform/common';\nimport { AXPPlatformScope } from '@acorex/platform/core';\nimport { inject, Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ---- Module cache (sync reads for action visibility) ----\n\n/** Updated by {@link AXMAssistChatDebugModeService}; read from action `visible` without injection context. */\nexport const axmAssistChatDebugModeState = {\n enabled: false,\n resolved: false,\n};\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * Resolves tenant debug mode once and mirrors it to {@link axmAssistChatDebugModeState}\n * so conversation2 action `visible` callbacks can stay synchronous.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMAssistChatDebugModeService {\n //#region ---- Services & Dependencies ----\n\n private readonly settingsService = inject(AXPSettingsService);\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n void this.refresh();\n }\n\n //#endregion\n\n //#region ---- API ----\n\n /** Re-reads tenant debug mode and updates the module cache. */\n async refresh(): Promise<void> {\n try {\n const debugMode = await this.settingsService\n .scope(AXPPlatformScope.Tenant)\n .get<boolean>(AXPCommonSettings.DebugMode);\n axmAssistChatDebugModeState.enabled = !!debugMode;\n } catch {\n axmAssistChatDebugModeState.enabled = false;\n } finally {\n axmAssistChatDebugModeState.resolved = true;\n }\n }\n\n isDebugModeActive(): boolean {\n return axmAssistChatDebugModeState.resolved && axmAssistChatDebugModeState.enabled;\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport {\n axpAiAssistStarterPromptLabels,\n type AXMAiManagementAssistEntityModel,\n type AXPAiChatFollowUpItem,\n type AXPAiEffectiveAssistRow,\n} from '@acorex/modules/ai-management';\nimport { CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND } from '../../../commands/conversation-command.keys';\n\n//#endregion\n\n//#region ---- Types ----\n\ntype AssistStarterPromptsSource =\n | Pick<AXMAiManagementAssistEntityModel, 'starterPrompts'>\n | Pick<AXPAiEffectiveAssistRow, 'starterPrompts'>\n | null\n | undefined;\n\nexport interface AXMAssistStarterPromptChipOptions {\n assistId?: string;\n conversationId?: string;\n}\n\n//#endregion\n\n//#region ---- Command resolution ----\n\n/**\n * Resolves a follow-up chip command for Conversation assist.\n * AI follow-up output may use invalid `Registry:*` placeholders; those map to\n * {@link CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND} so the chip text is sent as the next user message.\n */\nexport function axmAssistResolveFollowUpCommandName(\n rawName: string,\n commandExists: (name: string) => boolean,\n): string {\n const name = rawName.trim();\n if (name && commandExists(name)) {\n return name;\n }\n\n const withoutRegistryPrefix = name.startsWith('Registry:') ? name.slice('Registry:'.length).trim() : '';\n if (withoutRegistryPrefix && commandExists(withoutRegistryPrefix)) {\n return withoutRegistryPrefix;\n }\n\n return CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND;\n}\n\n/** Rewrites invalid follow-up commands (e.g. hallucinated `Registry:*` keys) before rendering chips. */\nexport function axmAssistNormalizeFollowUpItemForConversation(item: AXPAiChatFollowUpItem): AXPAiChatFollowUpItem {\n const name = item.command.name.trim();\n if (!name || name.startsWith('Registry:')) {\n return {\n ...item,\n command: {\n name: CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND,\n options: item.command.options,\n },\n };\n }\n return item;\n}\n\nexport function axmAssistNormalizeFollowUpItemsForConversation(\n items: AXPAiChatFollowUpItem[],\n): AXPAiChatFollowUpItem[] {\n return items.map(axmAssistNormalizeFollowUpItemForConversation);\n}\n\n//#endregion\n\n//#region ---- Mapping ----\n\n/**\n * Maps assist starter prompts to follow-up chip items that run {@link CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND}.\n */\nexport function axmAssistStarterPromptChipItems(\n source: AssistStarterPromptsSource,\n options?: AXMAssistStarterPromptChipOptions,\n): AXPAiChatFollowUpItem[] {\n return axpAiAssistStarterPromptLabels(source).map((text) => ({\n text,\n command: {\n name: CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND,\n options: {\n ...(options?.assistId ? { assistId: options.assistId } : {}),\n ...(options?.conversationId ? { conversationId: options.conversationId } : {}),\n },\n },\n }));\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport type { AXPAiChatFollowUpItem } from '@acorex/modules/ai-management';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport {\n axmAssistNormalizeFollowUpItemsForConversation,\n axmAssistResolveFollowUpCommandName,\n} from '../utils/assist-suggestion-chips.util';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Assist suggestion chips (starter prompts and engine {@code followUp} segments).\n * Each item runs its platform command via {@link AXPCommandService}.\n */\n@Component({\n selector: 'axm-assist-suggestion-chips',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AsyncPipe, AXButtonModule, AXTranslationModule],\n template: `\n @if (normalizedItems().length > 0) {\n <div\n class=\"ax-flex ax-gap-3 ax-justify-center ax-p-8 ax-flex-wrap\"\n role=\"list\"\n [attr.aria-label]=\"('@conversation:chat.starter-prompts.list-aria' | translate | async) ?? ''\"\n >\n @for (item of normalizedItems(); track $index) {\n <ax-button\n class=\"ax-rounded-full\"\n [look]=\"'twotone'\"\n [text]=\"(item.text | translate | async)!\"\n (onClick)=\"onChipClick(item)\"\n ></ax-button>\n }\n </div>\n }\n `,\n})\nexport class AXMAssistSuggestionChipsComponent {\n readonly items = input<AXPAiChatFollowUpItem[]>([]);\n\n protected readonly normalizedItems = computed(() =>\n axmAssistNormalizeFollowUpItemsForConversation(this.items()),\n );\n\n private readonly commandService = inject(AXPCommandService);\n private readonly translationService = inject(AXTranslationService);\n\n protected async onChipClick(item: AXPAiChatFollowUpItem): Promise<void> {\n const rawName = item.command.name.trim();\n if (!rawName) {\n return;\n }\n\n const name = axmAssistResolveFollowUpCommandName(rawName, (key) => this.commandService.exists(key));\n if (!this.commandService.exists(name)) {\n console.warn('[AXMAssistSuggestionChips] Command is not registered:', rawName);\n return;\n }\n\n const text = this.resolveItemText(item);\n await this.commandService.execute(name, {\n ...(item.command.options ?? {}),\n ...(text ? { text } : {}),\n });\n }\n\n private resolveItemText(item: AXPAiChatFollowUpItem): string {\n const label = item.text;\n if (typeof label === 'string') {\n return label.trim();\n }\n return (this.translationService.resolve(label) ?? '').trim();\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport type { AXConversation, AXConversationType } from '@acorex/components/conversation2';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Mirrors conversation2 default empty state when assist welcome content is not configured.\n */\n@Component({\n selector: 'axm-chat-message-list-empty-fallback',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AsyncPipe, AXTranslationModule],\n host: {\n class: 'ax-message-empty-host',\n },\n template: `\n <div class=\"ax-message-empty\" role=\"status\" [attr.aria-label]=\"('@acorex:chat.status.no-messages' | translate | async) ?? ''\">\n <div class=\"ax-message-empty__ambient\" aria-hidden=\"true\">\n <span class=\"ax-message-empty__grid\"></span>\n </div>\n\n <div class=\"ax-message-empty__card\">\n <div class=\"ax-message-empty__icon-stack\">\n <span class=\"ax-message-empty__pulse\" aria-hidden=\"true\"></span>\n <div class=\"ax-message-empty__icon-bg\">\n <i [class]=\"iconClass()\" aria-hidden=\"true\"></i>\n </div>\n </div>\n\n <p class=\"ax-message-empty__eyebrow\">{{ eyebrowLabel() }}</p>\n <h3 class=\"ax-message-empty__title\">{{ ('@acorex:chat.empty.no-messages-yet' | translate | async) ?? '' }}</h3>\n <p class=\"ax-message-empty__desc\">\n {{ descriptionPrefix() }}\n <span class=\"ax-message-empty__name\">{{ conversation().title }}</span>.\n </p>\n </div>\n </div>\n `,\n styles: `\n :host.ax-message-empty-host {\n display: block;\n width: 100%;\n max-width: min(24rem, 100%);\n margin-inline: auto;\n }\n\n .ax-message-empty {\n position: relative;\n isolation: isolate;\n padding: 0.25rem;\n }\n\n .ax-message-empty__ambient {\n position: absolute;\n top: -2rem;\n right: -1rem;\n bottom: -1rem;\n left: -1rem;\n z-index: 0;\n pointer-events: none;\n overflow: hidden;\n border-radius: 2rem;\n }\n\n .ax-message-empty__grid {\n position: absolute;\n inset: 0;\n background-image:\n linear-gradient(rgba(var(--ax-sys-color-on-surface), 0.04) 1px, transparent 1px),\n linear-gradient(90deg, rgba(var(--ax-sys-color-on-surface), 0.04) 1px, transparent 1px);\n background-size: 24px 24px;\n mask-image: radial-gradient(ellipse 80% 70% at 50% 45%, black 20%, transparent 75%);\n opacity: 0.5;\n }\n\n .ax-message-empty__card {\n position: relative;\n z-index: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n padding: 2rem 1.75rem 2.125rem;\n border-radius: 1.25rem;\n border: 1px solid rgba(var(--ax-sys-color-border-light-surface), 0.85);\n background: linear-gradient(\n 165deg,\n rgba(var(--ax-sys-color-lightest-surface), 0.72),\n rgba(var(--ax-sys-color-surface), 0.55)\n );\n }\n\n .ax-message-empty__icon-stack {\n position: relative;\n display: grid;\n place-items: center;\n margin-bottom: 1.25rem;\n }\n\n .ax-message-empty__pulse {\n position: absolute;\n width: 5.5rem;\n height: 5.5rem;\n border-radius: 50%;\n background: radial-gradient(circle, rgba(var(--ax-sys-color-primary-500), 0.22), transparent 70%);\n animation: axm-empty-pulse 3.2s ease-in-out infinite;\n }\n\n .ax-message-empty__icon-bg {\n position: relative;\n display: grid;\n place-items: center;\n width: 4.25rem;\n height: 4.25rem;\n border-radius: 1.125rem;\n background: linear-gradient(\n 145deg,\n rgba(var(--ax-sys-color-primary-500), 0.16),\n rgba(var(--ax-sys-color-primary-600), 0.06)\n );\n border: 1px solid rgba(var(--ax-sys-color-primary-500), 0.22);\n box-shadow:\n 0 1px rgba(var(--ax-sys-color-on-primary-surface), 0.06) inset,\n 0 12px 28px -16px rgba(var(--ax-sys-color-primary-600), 0.45);\n }\n\n .ax-message-empty__icon-bg i {\n font-size: 1.875rem;\n line-height: 1;\n color: rgb(var(--ax-sys-color-primary-600));\n opacity: 0.92;\n }\n\n .ax-message-empty__eyebrow {\n margin: 0 0 0.35rem;\n font-size: 0.6875rem;\n font-weight: 600;\n letter-spacing: 0.14em;\n text-transform: uppercase;\n color: rgb(var(--ax-sys-color-primary-600));\n opacity: 0.85;\n }\n\n .ax-message-empty__title {\n margin: 0 0 0.65rem;\n font-size: 1.375rem;\n font-weight: 600;\n letter-spacing: -0.03em;\n line-height: 1.25;\n color: rgb(var(--ax-sys-color-on-surface));\n }\n\n .ax-message-empty__desc {\n margin: 0;\n font-size: 0.9375rem;\n line-height: 1.65;\n color: rgb(var(--ax-sys-color-on-surface));\n opacity: 0.62;\n max-width: 20rem;\n }\n\n .ax-message-empty__name {\n font-weight: 600;\n color: rgb(var(--ax-sys-color-on-surface));\n opacity: 0.88;\n }\n\n @keyframes axm-empty-pulse {\n 0%,\n 100% {\n transform: scale(0.92);\n opacity: 0.55;\n }\n 50% {\n transform: scale(1.06);\n opacity: 0.85;\n }\n }\n\n @media (prefers-reduced-motion: reduce) {\n .ax-message-empty__pulse {\n animation: none;\n }\n }\n `,\n})\nexport class AXMChatMessageListEmptyFallbackComponent {\n //#region ---- Inputs ----\n\n readonly conversation = input.required<AXConversation>();\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n readonly iconClass = computed(() => iconClassForType(this.conversation().type));\n\n readonly eyebrowLabel = computed(() => eyebrowForType(this.conversation().type, this.translationService));\n\n readonly descriptionPrefix = computed(() => descriptionPrefixForType(this.conversation().type, this.translationService));\n\n //#endregion\n}\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction iconClassForType(type: AXConversationType): string {\n switch (type) {\n case 'private':\n return 'fa-light fa-comment-dots';\n case 'group':\n return 'fa-light fa-users';\n case 'channel':\n return 'fa-light fa-hashtag';\n case 'bot':\n return 'fa-light fa-robot';\n default:\n return 'fa-light fa-comments';\n }\n}\n\nfunction eyebrowForType(type: AXConversationType, translation: AXTranslationService): string {\n switch (type) {\n case 'private':\n return translation.translateSync('@acorex:chat.empty.eyebrow.direct-message');\n case 'group':\n return translation.translateSync('@acorex:chat.empty.eyebrow.group-chat');\n case 'channel':\n return translation.translateSync('@acorex:chat.empty.eyebrow.channel');\n case 'bot':\n return translation.translateSync('@acorex:chat.empty.eyebrow.assistant');\n default:\n return translation.translateSync('@acorex:chat.empty.eyebrow.conversation');\n }\n}\n\nfunction descriptionPrefixForType(type: AXConversationType, translation: AXTranslationService): string {\n switch (type) {\n case 'private':\n return translation.translateSync('@acorex:chat.empty.description.private-prefix');\n case 'group':\n return translation.translateSync('@acorex:chat.empty.description.group-prefix');\n case 'channel':\n return translation.translateSync('@acorex:chat.empty.description.channel-prefix');\n case 'bot':\n return translation.translateSync('@acorex:chat.empty.description.bot-prefix');\n default:\n return translation.translateSync('@acorex:chat.empty.description.conversation-prefix');\n }\n}\n\n//#endregion\n","import { AXConversationApi, AXMessageApi, AXRealtimeApi, AXUserApi } from '@acorex/components/conversation2';\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport abstract class AXMChatUserApi extends AXUserApi {}\n\n@Injectable()\nexport abstract class AXMChatConversationApi extends AXConversationApi {}\n\n@Injectable()\nexport abstract class AXMChatMessageApi extends AXMessageApi {}\n\n@Injectable()\nexport abstract class AXMChatRealtimeApi extends AXRealtimeApi {}\n","//#region ---- Imports ----\n\nimport {\n AXConversationService,\n AXMessageApi,\n conversationSharedStorage,\n type AXConversation,\n type AXMessage,\n type AXPagination,\n} from '@acorex/components/conversation2';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n axpAiAssistInitialMessagesToTranscript,\n axpAiChatMessageGetText,\n RootConfig,\n type AXPAiChatFollowUpItem,\n type AXPAiEffectiveAssistRow,\n} from '@acorex/modules/ai-management';\nimport { AXPMarkdownViewerComponent } from '@acorex/platform/layout/components';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal, untracked } from '@angular/core';\nimport { AXMAssistSuggestionChipsComponent } from '../shared/assist-suggestion-chips.component';\nimport { axmAssistStarterPromptChipItems } from '../utils/assist-suggestion-chips.util';\nimport { AXMChatMessageListEmptyFallbackComponent } from '../empty-state/chat-message-list-empty-fallback.component';\nimport { axmConversationHasAiChat } from '../utils/chat-ai-target.util';\nimport { AXMChatUserApi } from '../services/chat-conversation-apis.abstract';\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction extractAssistId(conversation: AXConversation): string | null {\n const raw = conversation.metadata?.['assistId'];\n if (typeof raw === 'string' && raw.trim()) {\n return raw.trim();\n }\n\n for (const participant of conversation.participants ?? []) {\n const participantAssistId = participant.metadata?.['assistId'];\n if (typeof participantAssistId === 'string' && participantAssistId.trim()) {\n return participantAssistId.trim();\n }\n }\n\n return null;\n}\n\nfunction isStreamingPlaceholder(message: AXMessage): boolean {\n const meta = message.metadata as Record<string, unknown> | undefined;\n return !!(meta?.['isAssistResponse'] && meta?.['isStreaming']);\n}\n\nasync function conversationHasUserMessage(\n messageApi: AXMessageApi,\n currentUserId: string,\n conversationId: string,\n): Promise<boolean> {\n const pagination: AXPagination = { page: 0, pageSize: 50 };\n const result = await messageApi.getMessages(conversationId, pagination);\n return result.items.some(\n (message) => !isStreamingPlaceholder(message) && message.senderId === currentUserId,\n );\n}\n\nfunction initialMessageMarkdown(raw: string | null | undefined): string {\n return axpAiAssistInitialMessagesToTranscript(raw)\n .map((line) => axpAiChatMessageGetText(line).trim())\n .filter((text) => text.length > 0)\n .join('\\n\\n');\n}\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axm-chat-assist-composer-starter-prompts',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AXMAssistSuggestionChipsComponent,\n AXMChatMessageListEmptyFallbackComponent,\n AXPMarkdownViewerComponent,\n ],\n template: `\n @if (showWelcome()) {\n <div class=\"axm-chat-assist-welcome-empty\">\n @if (initialMessageMarkdown().length > 0) {\n <div class=\"axm-chat-assist-welcome-empty__message\">\n <axp-markdown-viewer [markdown]=\"initialMessageMarkdown()\" />\n </div>\n }\n @if (starterPromptItems().length > 0) {\n <axm-assist-suggestion-chips [items]=\"starterPromptItems()\" />\n }\n </div>\n } @else if (activeConversation(); as conversation) {\n <axm-chat-message-list-empty-fallback [conversation]=\"conversation\" />\n }\n `,\n styles: `\n .axm-chat-assist-welcome-empty {\n width: min(100%, 48rem);\n margin-inline: auto;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: 0.5rem;\n padding: 0.5rem 0 1rem;\n }\n\n .axm-chat-assist-welcome-empty__message {\n padding: 1rem 1.25rem;\n border-radius: 1rem;\n border: 1px solid rgba(var(--ax-sys-color-border-light-surface), 0.85);\n background: rgba(var(--ax-sys-color-lightest-surface), 0.72);\n text-align: start;\n line-height: 1.6;\n }\n `,\n})\nexport class AXMChatAssistComposerStarterPromptsComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly conversationService = inject(AXConversationService);\n private readonly messageApi = inject(AXMessageApi);\n private readonly userApi = inject(AXMChatUserApi);\n private readonly entityService = inject(AXPEntityService);\n private readonly translationService = inject(AXTranslationService);\n private readonly assistData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assist.name)\n .data<string, AXPAiEffectiveAssistRow, AXPAiEffectiveAssistRow, AXPAiEffectiveAssistRow, AXPAiEffectiveAssistRow>();\n\n //#endregion\n\n //#region ---- State ----\n\n readonly starterPromptItems = signal<AXPAiChatFollowUpItem[]>([]);\n readonly initialMessageMarkdown = signal('');\n readonly showWelcome = signal(false);\n\n readonly activeConversation = computed(() => {\n const id = this.conversationService.activeConversationId();\n if (!id) {\n return null;\n }\n return conversationSharedStorage.conversations.get(id) ?? null;\n });\n\n private loadGeneration = 0;\n\n //#endregion\n\n //#region ---- Effects ----\n\n constructor() {\n effect(() => {\n const conversationId = this.conversationService.activeConversationId();\n void this.syncForConversation(conversationId);\n });\n\n effect((onCleanup) => {\n const conversationId = untracked(() => this.conversationService.activeConversationId());\n if (!conversationId) {\n return;\n }\n\n const sub = conversationSharedStorage.messageStream$.subscribe((message) => {\n if (message.conversationId !== conversationId) {\n return;\n }\n void this.syncForConversation(conversationId);\n });\n\n onCleanup(() => sub.unsubscribe());\n });\n }\n\n //#endregion\n\n //#region ---- Sync ----\n\n private async syncForConversation(conversationId: string | null | undefined): Promise<void> {\n const generation = ++this.loadGeneration;\n\n if (!conversationId) {\n this.starterPromptItems.set([]);\n this.initialMessageMarkdown.set('');\n this.showWelcome.set(false);\n return;\n }\n\n const conversation = conversationSharedStorage.conversations.get(conversationId);\n if (!conversation) {\n this.starterPromptItems.set([]);\n this.initialMessageMarkdown.set('');\n this.showWelcome.set(false);\n return;\n }\n\n if (!axmConversationHasAiChat(conversation)) {\n this.starterPromptItems.set([]);\n this.initialMessageMarkdown.set('');\n this.showWelcome.set(false);\n return;\n }\n\n const assistId = extractAssistId(conversation);\n if (!assistId) {\n this.starterPromptItems.set([]);\n this.initialMessageMarkdown.set('');\n this.showWelcome.set(false);\n return;\n }\n\n try {\n const currentUser = await this.userApi.getCurrentUser();\n const hasUserMessage = await conversationHasUserMessage(\n this.messageApi,\n currentUser.id,\n conversationId,\n );\n if (generation !== this.loadGeneration) {\n return;\n }\n\n if (hasUserMessage) {\n this.starterPromptItems.set([]);\n this.initialMessageMarkdown.set('');\n this.showWelcome.set(false);\n return;\n }\n\n const assist = await this.assistData.byKey(assistId);\n if (generation !== this.loadGeneration) {\n return;\n }\n\n const items = axmAssistStarterPromptChipItems(assist, {\n conversationId: conversationId ?? undefined,\n });\n const welcomeMarkdown = initialMessageMarkdown(assist?.initialMessages);\n this.starterPromptItems.set(items);\n this.initialMessageMarkdown.set(welcomeMarkdown);\n this.showWelcome.set(welcomeMarkdown.length > 0 || items.length > 0);\n } catch (error: unknown) {\n console.error('Failed to load assist welcome interaction:', error);\n if (generation === this.loadGeneration) {\n this.starterPromptItems.set([]);\n this.initialMessageMarkdown.set('');\n this.showWelcome.set(false);\n }\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXConversationService, type AXMessagePayload } from '@acorex/components/conversation2';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { RootConfig, AXPAiManagerService, type AXPAiChatFollowUpItem, type AXPAiEffectiveAssistRow } from '@acorex/modules/ai-management';\nimport { AXPMultiLanguageString } from '@acorex/platform/core';\nimport { AXPEntityDefinitionRegistryService, AXPEntityService } from '@acorex/platform/layout/entity';\nimport {\n axmBuildAiChatConversationMetadata,\n axmChatAiPeerParticipantId,\n axmLoadChatAiTargets,\n type AXMChatAiTargetRow,\n} from '../utils/chat-ai-target.util';\nimport { AXMAssistSuggestionChipsComponent } from '../shared/assist-suggestion-chips.component';\nimport { axmAssistStarterPromptChipItems } from '../utils/assist-suggestion-chips.util';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n effect,\n inject,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'axm-chat-empty-assist-composer',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n FormsModule,\n AXButtonModule,\n AXDropdownModule,\n AXTextBoxModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXMAssistSuggestionChipsComponent,\n ],\n template: `\n <div class=\"axm-chat-empty-assist-composer\">\n <div class=\"axm-chat-empty-assist-composer__caption\">\n {{ '@conversation:chat.empty-assist.caption' | translate | async }}\n </div>\n \n <div class=\"axm-chat-empty-assist-composer__composer-row\">\n <ax-button color=\"default\" look=\"blank\" class=\"ax-rounded-full\">\n <ax-icon icon=\"fa-regular fa-sparkles\"></ax-icon>\n <span class=\"axm-chat-empty-assist-composer__assist-text\">\n @if (selectedAssistLabel(); as assistLabel) {\n {{ assistLabel | translate | async }}\n } @else {\n {{ '@conversation:chat.empty-assist.assist-default' | translate | async }}\n }\n </span>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for (row of rows(); track row.id) {\n <ax-button-item\n [text]=\"(row.title | translate | async)!\"\n [selected]=\"row.id === selectedAssistId()\"\n (onClick)=\"onAssistIdChange(row.id)\"\n ></ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n @let assistTitle = (selectedAssistLabel() | translate | async) ?? '';\n\n <textarea\n #draftInput\n rows=\"1\"\n class=\"axm-chat-empty-assist-composer__textarea ax-border-none ax-outline-none ax-w-full ax-flex-1\"\n [ngModel]=\"draftText()\"\n (ngModelChange)=\"draftText.set($event ?? '')\"\n (input)=\"resizeDraftInput()\"\n (keydown)=\"onDraftKeydown($event)\"\n [placeholder]=\"\n ('@conversation:chat.empty-assist.placeholder'\n | translate: { params: { assist: assistTitle } }\n | async) ?? ''\n \"\n ></textarea>\n <ax-button\n color=\"default\"\n class=\"ax-rounded-full\"\n [disabled]=\"!canSend()\"\n [text]=\"sending() ? '…' : ''\"\n [attr.aria-label]=\"('@conversation:comments.actions.send.title' | translate | async) ?? ''\"\n (onClick)=\"send()\"\n >\n @if (!sending()) {\n <ax-icon icon=\"fa-light fa-arrow-up\"></ax-icon>\n }\n </ax-button>\n </div>\n <axm-assist-suggestion-chips [items]=\"starterPromptItems()\" />\n </div>\n `,\n styles: `\n .axm-chat-empty-assist-composer {\n width: min(100%, 64rem);\n margin-inline: auto;\n }\n\n .axm-chat-empty-assist-composer__caption {\n margin-bottom: 3rem;\n text-align: center;\n font-size: clamp(1.9rem, 3.4vw, 2.7rem);\n line-height: 1.15;\n font-weight: 700;\n letter-spacing: -0.02em;\n }\n\n .axm-chat-empty-assist-composer__composer-row {\n display: flex;\n gap: 0.375rem;\n align-items: end;\n padding: 0.5rem;\n border-radius: 2em;\n border: 1px solid;\n border-color: rgba(var(--ax-sys-color-border-lighter-surface));\n }\n\n .axm-chat-empty-assist-composer__assist-text {\n display: inline-block;\n max-width: 12rem;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .axm-chat-empty-assist-composer__textarea {\n resize: none;\n overflow: hidden;\n background: transparent;\n min-height: 2.25rem;\n max-height: 14rem;\n line-height: 1.5;\n padding-block: 0.25rem;\n }\n `,\n})\nexport class AXMChatEmptyAssistComposerComponent {\n private readonly conversationService = inject(AXConversationService);\n private readonly toastService = inject(AXToastService);\n private readonly translationService = inject(AXTranslationService);\n private readonly entityRegistry = inject(AXPEntityDefinitionRegistryService);\n private readonly entityService = inject(AXPEntityService);\n private readonly aiManager = inject(AXPAiManagerService, { optional: true });\n\n private readonly assistData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assist.name)\n .data<string, AXPAiEffectiveAssistRow, AXPAiEffectiveAssistRow, AXPAiEffectiveAssistRow, AXPAiEffectiveAssistRow>();\n\n readonly conversationCreated = output<string>();\n\n readonly rows = signal<AXMChatAiTargetRow[]>([]);\n readonly loading = signal(true);\n readonly selectedAssistId = signal<string | undefined>(undefined);\n readonly starterPromptItems = signal<AXPAiChatFollowUpItem[]>([]);\n readonly draftText = signal('');\n readonly sending = signal(false);\n private readonly draftInput = viewChild<ElementRef<HTMLTextAreaElement>>('draftInput');\n readonly selectedAssistLabel = computed((): AXPMultiLanguageString | string | undefined => {\n const selected = this.rows().find((row) => row.id === this.selectedAssistId());\n return selected?.title;\n });\n\n private assistsLoadPromise: Promise<void> | null = null;\n private starterPromptsLoadGeneration = 0;\n\n constructor() {\n void this.ensureAssistsLoaded();\n\n effect(() => {\n const assistId = this.selectedAssistId();\n void this.loadStarterPromptsForAssist(assistId);\n });\n\n effect(() => {\n this.draftText();\n queueMicrotask(() => this.resizeDraftInput());\n });\n }\n\n onAssistIdChange(value: string | undefined | null): void {\n this.selectedAssistId.set(value?.trim() || undefined);\n }\n\n canSend(): boolean {\n const id = this.selectedAssistId();\n const text = this.draftText().trim();\n return Boolean(id && text.length > 0 && !this.sending() && !this.loading());\n }\n\n resizeDraftInput(): void {\n const textarea = this.draftInput()?.nativeElement;\n if (!textarea) {\n return;\n }\n textarea.style.height = '0px';\n textarea.style.height = `${Math.min(textarea.scrollHeight, 224)}px`;\n }\n\n onDraftKeydown(event: KeyboardEvent): void {\n if (event.key !== 'Enter' || event.shiftKey || event.isComposing) {\n return;\n }\n event.preventDefault();\n if (this.canSend()) {\n void this.send();\n }\n }\n\n async send(): Promise<void> {\n const assistId = this.selectedAssistId();\n const text = this.draftText().trim();\n if (!assistId || !text || this.sending()) {\n return;\n }\n const row = this.rows().find((r) => r.id === assistId);\n if (!row) {\n return;\n }\n\n this.sending.set(true);\n try {\n const participantId = axmChatAiPeerParticipantId(row.id);\n const avatar = this.targetAvatarUrl(row);\n\n const conversation = await this.conversationService.createConversation([participantId], 'bot', {\n title: this.translationService.resolve(row.title as AXPMultiLanguageString) ?? row.name,\n ...(avatar ? { avatar } : {}),\n icon: 'fa-solid fa-robot',\n metadata: axmBuildAiChatConversationMetadata(row),\n });\n\n await this.conversationService.selectConversation(conversation.id);\n\n const payload: AXMessagePayload = { type: 'text', text };\n await this.conversationService.sendMessage({\n conversationId: conversation.id,\n type: 'text',\n payload,\n });\n\n this.draftText.set('');\n this.conversationCreated.emit(conversation.id);\n } catch (error: unknown) {\n console.error('Failed to start assist chat from empty state:', error);\n const message = await this.translationService.translateAsync('@conversation:chat.empty-assist.errors.send');\n this.toastService.danger(message);\n } finally {\n this.sending.set(false);\n }\n }\n\n private async ensureAssistsLoaded(): Promise<void> {\n if (!this.assistsLoadPromise) {\n this.assistsLoadPromise = this.loadAssistsFromApi();\n }\n await this.assistsLoadPromise;\n }\n\n private async loadAssistsFromApi(): Promise<void> {\n this.loading.set(true);\n try {\n const rows = await axmLoadChatAiTargets(this.entityRegistry);\n this.rows.set(rows);\n this.selectedAssistId.set(await this.resolveInitialAssistId(rows));\n } catch (error: unknown) {\n console.error('Failed to load AI chat targets (empty composer):', error);\n const message = await this.translationService.translateAsync(\n '@conversation:chat.empty-assist.errors.load-assists',\n );\n this.toastService.danger(message);\n this.rows.set([]);\n this.selectedAssistId.set(undefined);\n } finally {\n this.loading.set(false);\n }\n }\n\n /** Prefers the tenant default assist from AI Settings, then the first catalog row. */\n private async resolveInitialAssistId(rows: AXMChatAiTargetRow[]): Promise<string | undefined> {\n if (!rows.length) {\n return undefined;\n }\n\n const defaultAssistId = await this.resolveDefaultAssistId();\n if (defaultAssistId && rows.some((row) => row.id === defaultAssistId)) {\n return defaultAssistId;\n }\n\n return rows[0]?.id;\n }\n\n private async resolveDefaultAssistId(): Promise<string | undefined> {\n if (!this.aiManager) {\n return undefined;\n }\n\n try {\n const assist = await this.aiManager.getEffectiveAssist();\n return assist.id?.trim() || undefined;\n } catch (error: unknown) {\n console.warn('Failed to resolve default assist for empty chat composer:', error);\n return undefined;\n }\n }\n\n targetAvatarUrl(row: AXMChatAiTargetRow): string | null {\n const avatarUrl = row.professionImageUrl?.trim();\n return avatarUrl ? avatarUrl : null;\n }\n\n private async loadStarterPromptsForAssist(assistId: string | undefined): Promise<void> {\n const generation = ++this.starterPromptsLoadGeneration;\n const id = assistId?.trim();\n if (!id) {\n this.starterPromptItems.set([]);\n return;\n }\n\n try {\n const assist = await this.assistData.byKey(id);\n if (generation !== this.starterPromptsLoadGeneration) {\n return;\n }\n this.starterPromptItems.set(\n axmAssistStarterPromptChipItems(assist, { assistId: id }),\n );\n } catch (error: unknown) {\n console.error('Failed to load assist starter prompts (empty composer):', error);\n if (generation === this.starterPromptsLoadGeneration) {\n this.starterPromptItems.set([]);\n }\n }\n }\n}\n","import { AXClosableComponent, AXComponentCloseEvent, AXDataSource } from '@acorex/cdk/common';\nimport { AXAvatarComponent } from '@acorex/components/avatar';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXConversation, AXConversationService } from '@acorex/components/conversation2';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXImageComponent } from '@acorex/components/image';\nimport { AXListComponent } from '@acorex/components/list';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport type { AXPopupRef } from '@acorex/components/popup';\nimport { AXSearchBoxComponent } from '@acorex/components/search-box';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\n\nimport {\n ChangeDetectionStrategy,\n Component,\n TemplateRef,\n effect,\n inject,\n input,\n signal,\n viewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXPEntityDefinitionRegistryService } from '@acorex/platform/layout/entity';\nimport {\n axmBuildAiChatConversationMetadata,\n axmChatAiPeerParticipantId,\n axmChatAiTargetAvatarUrl,\n axmChatAiTargetDisplayName,\n axmFilterChatAiTargets,\n axmLoadChatAiTargets,\n type AXMChatAiTargetRow,\n} from '../utils/chat-ai-target.util';\n\n@Component({\n selector: 'axm-chat-with-assist-dialog',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n FormsModule,\n AXButtonComponent,\n AXListComponent,\n AXSearchBoxComponent,\n AXAvatarComponent,\n AXImageComponent,\n AXDecoratorModule,\n AXTranslationModule,\n AsyncPipe,\n ],\n providers: [{ provide: AXClosableComponent, useExisting: AXMChatWithAssistDialogComponent }],\n template: `\n <div class=\"new-conversation-panel\">\n <div class=\"new-conversation-dialog-content\">\n <div class=\"form-field form-field--grow\">\n <div class=\"users-list-wrap\">\n <ax-list\n #assistsList\n class=\"users-list\"\n [dataSource]=\"assistListDataSource\"\n [multiple]=\"true\"\n [checkbox]=\"false\"\n [valueField]=\"'id'\"\n [textField]=\"'name'\"\n [itemHeight]=\"'auto'\"\n [ngModel]=\"selectedTargetIds()\"\n (ngModelChange)=\"onSelectedTargetsChange($event ?? [])\"\n [emptyTemplate]=\"assistsListEmptyTpl()\"\n [itemTemplate]=\"assistItemTpl\"\n >\n <ax-header class=\"users-list-header\">\n <div class=\"users-list-header-inner\">\n <ax-search-box\n [value]=\"searchQuery()\"\n (valueChange)=\"onSearchChange($event)\"\n [placeholder]=\"('@conversation:chat.assist-dialog.search.placeholder' | translate | async) ?? ''\"\n ></ax-search-box>\n </div>\n </ax-header>\n </ax-list>\n </div>\n </div>\n </div>\n <ax-footer class=\"dialog-footer\">\n <ax-suffix>\n <ax-button\n [text]=\"('@conversation:comments.actions.cancel.title' | translate | async) ?? ''\"\n [look]=\"'solid'\"\n (onClick)=\"onCancel()\"\n ></ax-button>\n <ax-button\n [text]=\"('@conversation:chat.assist-dialog.actions.start-chat' | translate | async) ?? ''\"\n [look]=\"'solid'\"\n [color]=\"'primary'\"\n [disabled]=\"!selectedTargetIds().length || loading()\"\n (onClick)=\"onStartChat()\"\n ></ax-button>\n </ax-suffix>\n </ax-footer>\n </div>\n\n <ng-template #assistsListEmpty>\n <div class=\"users-list-empty\">\n @if (loading()) {\n {{ '@conversation:chat.assist-dialog.states.loading' | translate | async }}\n } @else if (searchQuery()) {\n {{ '@conversation:chat.assist-dialog.states.no-search-result' | translate | async }}\n } @else {\n {{ '@conversation:chat.assist-dialog.states.no-assists' | translate | async }}\n }\n </div>\n </ng-template>\n\n <ng-template #assistItemTpl let-item>\n @if (targetFromItem(item); as row) {\n <div class=\"user-item-content\">\n <ax-avatar [size]=\"54\">\n @if (targetAvatarUrl(row); as avatarUrl) {\n <ax-image [src]=\"avatarUrl\" [alt]=\"row.title | translate | async\"></ax-image>\n } @else {\n <ax-icon\n ><i\n class=\"fa-solid fa-robot\"\n style=\"font-size: 1.35rem;\n line-height: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\"\n ></i\n ></ax-icon>\n }\n </ax-avatar>\n <div class=\"user-item-text\">\n <span class=\"ax-truncated user-name-text\">{{ row.title | translate | async }}</span>\n @if (row.description) {\n <span class=\"user-description-text ax-truncated\">{{ row.description | translate | async }}</span>\n }\n </div>\n </div>\n }\n </ng-template>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n\n .new-conversation-panel {\n display: flex;\n flex-direction: column;\n width: 100%;\n overflow: hidden;\n }\n\n .new-conversation-dialog-content {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n }\n\n .form-field--grow {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n }\n\n .form-field {\n display: flex;\n flex-direction: column;\n gap: 0.35rem;\n }\n\n .users-list-wrap {\n height: min(50vh, 36rem);\n overflow: hidden;\n }\n\n .users-list {\n display: block;\n height: 100%;\n }\n\n .users-list-header {\n display: block;\n position: sticky;\n top: 0;\n z-index: 1;\n border-bottom: 1px solid rgb(var(--ax-sys-color-border-light-surface));\n }\n\n .users-list-header-inner {\n padding: 0.5rem 0.75rem;\n }\n\n .user-item-content {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n height: 100%;\n padding: 0.5rem 0.75rem;\n min-width: 0;\n }\n\n .user-item-text {\n display: flex;\n flex-direction: column;\n justify-content: center;\n min-width: 0;\n flex: 1;\n gap: 0.1rem;\n }\n\n .user-name-text {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n }\n\n .user-description-text {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 0.875rem;\n line-height: 1.25rem;\n font-weight: 400;\n opacity: 0.72;\n color: rgb(var(--ax-sys-color-on-surface));\n }\n\n .users-list-empty {\n padding: 1rem;\n text-align: center;\n font-size: 0.85rem;\n opacity: 0.7;\n }\n\n .dialog-footer {\n flex-shrink: 0;\n padding: 1rem;\n border-top: 1px solid var(--ax-border-color, #e5e7eb);\n display: flex;\n justify-content: flex-end;\n }\n\n .dialog-footer > ax-suffix {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n gap: 0.75rem;\n }\n `,\n ],\n})\nexport class AXMChatWithAssistDialogComponent extends AXBasePageComponent {\n /** Set by {@link AXPopupService} from `data`. */\n conversationService!: AXConversationService;\n\n private readonly toastService = inject(AXToastService);\n private readonly translationService = inject(AXTranslationService);\n private readonly entityRegistry = inject(AXPEntityDefinitionRegistryService);\n\n readonly __popup__ = input<AXPopupRef | undefined>(undefined);\n\n /** When hosted in a tabbed shell, the parent owns the popup title. */\n readonly embeddedInTabs = input(false);\n\n readonly rows = signal<AXMChatAiTargetRow[]>([]);\n readonly loading = signal(true);\n readonly searchQuery = signal('');\n readonly selectedTargetIds = signal<string[]>([]);\n\n private targetsLoadPromise: Promise<void> | null = null;\n\n readonly assistListDataSource = new AXDataSource<unknown>({\n pageSize: 100,\n key: 'id',\n load: async (e) => {\n await this.ensureTargetsLoaded();\n const filtered = this.filteredTargetRows() as unknown[];\n return {\n items: filtered.slice(e.skip, e.skip + e.take),\n total: filtered.length,\n };\n },\n byKey: (key) => Promise.resolve(this.rows().find((r) => r.id === key) ?? null),\n });\n\n readonly assistsListEmptyTpl = viewChild.required<TemplateRef<unknown>>('assistsListEmpty');\n readonly assistsList = viewChild<AXListComponent>('assistsList');\n\n private readonly syncPopupTitle = effect(() => {\n if (this.embeddedInTabs()) {\n return;\n }\n const popupRef = this.__popup__();\n if (popupRef) {\n this.setTitle = (t: string) => popupRef.setTitle(t);\n void this.#updatePopupTitle(popupRef);\n }\n });\n\n targetFromItem(item: unknown): AXMChatAiTargetRow | null {\n if (!item || typeof item !== 'object') {\n return null;\n }\n const o = item as Record<string, unknown>;\n if ('data' in o && o['data'] && typeof o['data'] === 'object') {\n return o['data'] as AXMChatAiTargetRow;\n }\n if (typeof o['id'] === 'string' && typeof o['name'] === 'string') {\n return o as unknown as AXMChatAiTargetRow;\n }\n return null;\n }\n\n onSelectedTargetsChange(ids: string[]): void {\n const deduped = [...new Set(ids)];\n const next = deduped.length ? [deduped[deduped.length - 1]] : [];\n this.selectedTargetIds.set(next);\n if (deduped.length > 1) {\n queueMicrotask(() => this.assistsList()?.refresh(false));\n }\n }\n\n onSearchChange(value: string): void {\n this.searchQuery.set(value ?? '');\n this.assistsList()?.refresh(false);\n }\n\n private async ensureTargetsLoaded(): Promise<void> {\n if (!this.targetsLoadPromise) {\n this.targetsLoadPromise = this.loadTargetsFromApi();\n }\n await this.targetsLoadPromise;\n }\n\n private async loadTargetsFromApi(): Promise<void> {\n this.loading.set(true);\n try {\n this.rows.set(await axmLoadChatAiTargets(this.entityRegistry));\n } catch (error: unknown) {\n console.error('Failed to load AI chat targets:', error);\n const message = await this.translationService.translateAsync(\n '@conversation:chat.assist-dialog.errors.load-assists',\n );\n this.toastService.danger(message);\n this.rows.set([]);\n } finally {\n this.loading.set(false);\n }\n }\n\n private filteredTargetRows(): AXMChatAiTargetRow[] {\n return axmFilterChatAiTargets(\n (value) => this.translationService.resolve(value),\n this.rows(),\n this.searchQuery(),\n );\n }\n\n displayName(row: AXMChatAiTargetRow): string {\n return axmChatAiTargetDisplayName((value) => this.translationService.resolve(value), row);\n }\n\n targetAvatarUrl(row: AXMChatAiTargetRow): string | null {\n return axmChatAiTargetAvatarUrl(row);\n }\n\n onCancel(): void {\n const event = new AXComponentCloseEvent();\n event.component = this;\n event.data = null;\n this.onClosed.emit(event);\n }\n\n async onStartChat(): Promise<void> {\n const targetId = this.selectedTargetIds()[0];\n if (!targetId || !this.conversationService) {\n return;\n }\n\n const row = this.rows().find((r) => r.id === targetId);\n if (!row) {\n return;\n }\n\n const participantId = axmChatAiPeerParticipantId(row.id);\n const title = this.displayName(row);\n const avatar = this.targetAvatarUrl(row);\n\n try {\n const conversation = await this.conversationService.createConversation([participantId], 'bot', {\n title,\n ...(avatar ? { avatar } : {}),\n icon: 'fa-solid fa-robot',\n metadata: axmBuildAiChatConversationMetadata(row),\n });\n\n const event = new AXComponentCloseEvent();\n event.component = this;\n event.data = conversation as AXConversation;\n this.onClosed.emit(event);\n } catch (error: unknown) {\n console.error('Failed to start assist chat:', error);\n const message = await this.translationService.translateAsync(\n '@conversation:chat.assist-dialog.errors.start-chat',\n );\n this.toastService.danger(message);\n }\n }\n\n async #updatePopupTitle(popupRef: AXPopupRef): Promise<void> {\n const title = await this.translationService.translateAsync('@conversation:new-conversation.actions.chat-with-ai');\n popupRef.setTitle(title);\n }\n}\n","import { AXClickEvent } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport {\n AXConversation,\n AXConversationService,\n AXNewConversationDialogComponent,\n} from '@acorex/components/conversation2';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFabComponent, AXFabItemComponent } from '@acorex/components/fab';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\n\nimport { ChangeDetectionStrategy, Component, inject, output } from '@angular/core';\nimport { AXMChatWithAssistDialogComponent } from './chat-with-assist-dialog.component';\n\n/**\n * Replaces the default sidebar \"New conversation\" control with a split-style dropdown:\n * - New chat: {@link AXNewConversationDialogComponent} (human peers only; assist peers are excluded from user discovery).\n * - Chat with AI: {@link AXMChatWithAssistDialogComponent} (pick an Assist as the peer).\n */\n@Component({\n selector: 'axm-chat-sidebar-new-actions',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXButtonModule, AXFabComponent, AXFabItemComponent, AXDecoratorModule, AXTranslationModule, AsyncPipe],\n template: `\n <div class=\"new-conversation-button-container-inner\">\n <ax-fab class=\"new-conversation-fab\" [popupStyle]=\"'box'\" #fab>\n <ax-icon icon=\"fa-light fa-plus\"></ax-icon>\n <ax-fab-item\n [label]=\"('@conversation:new-conversation.actions.new-chat' | translate | async) ?? ''\"\n (onClick)=\"openNewConversation($event); fab.close()\"\n >\n <ax-icon icon=\"fa-light fa-comment\"></ax-icon>\n </ax-fab-item>\n <ax-fab-item\n [label]=\"('@conversation:new-conversation.actions.chat-with-ai' | translate | async) ?? ''\"\n (onClick)=\"openAssistChat($event); fab.close()\"\n >\n <ax-icon icon=\"fa-light fa-robot\"></ax-icon>\n </ax-fab-item>\n </ax-fab>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n\n .new-conversation-button-container-inner {\n display: flex;\n justify-content: end;\n align-items: center;\n padding-inline-end: 0.25rem;\n }\n\n .new-conversation-fab {\n z-index: 1;\n }\n `,\n ],\n})\nexport class AXMChatSidebarNewActionsComponent {\n private readonly popupService = inject(AXPopupService);\n private readonly conversationService = inject(AXConversationService);\n private readonly translationService = inject(AXTranslationService);\n\n /** Fires with the new conversation id after create + select (parent typically navigates). */\n readonly conversationCreated = output<string>();\n\n async openNewConversation(event?: AXClickEvent): Promise<void> {\n event?.nativeEvent?.stopPropagation();\n const title = await this.translationService.translateAsync('@conversation:new-conversation.header');\n const result = await this.popupService.open(AXNewConversationDialogComponent, {\n title,\n size: 'sm',\n closeButton: true,\n data: {\n conversationService: this.conversationService,\n },\n });\n if (result?.data) {\n await this.finishWithConversation(result.data as AXConversation);\n }\n }\n\n async openAssistChat(event?: AXClickEvent): Promise<void> {\n event?.nativeEvent?.stopPropagation();\n const title = await this.translationService.translateAsync('@conversation:new-conversation.actions.chat-with-ai');\n const result = await this.popupService.open(AXMChatWithAssistDialogComponent, {\n title,\n size: 'sm',\n closeButton: true,\n data: {\n conversationService: this.conversationService,\n },\n });\n if (result?.data) {\n await this.finishWithConversation(result.data as AXConversation);\n }\n }\n\n private async finishWithConversation(conversation: AXConversation): Promise<void> {\n await this.conversationService.selectConversation(conversation.id);\n this.conversationCreated.emit(conversation.id);\n }\n}\n","import { AXButtonComponent } from '@acorex/components/button';\n\nimport {\n AXComposerComponent,\n AXComposerService,\n AXConversationContainerDirective,\n AXConversationService,\n AXInfoBarComponent,\n AXInfoBarService,\n AXMessageListComponent,\n AXSidebarComponent,\n} from '@acorex/components/conversation2';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPDeviceService } from '@acorex/platform/core';\nimport { AXPThemeLayoutBlockComponent, AXPThemeLayoutStartSideComponent } from '@acorex/platform/layout/components';\nimport { AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\n\nimport { afterNextRender, ChangeDetectionStrategy, Component, computed, effect, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { map } from 'rxjs';\nimport { AXMAssistChatDebugModeService } from './plugins/actions/assist-chat-debug-mode.service';\nimport { AXMChatAssistComposerStarterPromptsComponent } from './plugins/composer/chat-assist-composer-starter-prompts.component';\nimport { AXMChatEmptyAssistComposerComponent } from './plugins/empty-state/chat-empty-assist-composer.component';\nimport { AXMChatSidebarNewActionsComponent } from './plugins/side-bar/chat-sidebar-new-actions.component';\n\n@Component({\n selector: 'axm-chat',\n templateUrl: './chat.component.html',\n styleUrls: ['./chat.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AXConversationContainerDirective,\n AXSidebarComponent,\n AXInfoBarComponent,\n AXMessageListComponent,\n AXComposerComponent,\n AXButtonComponent,\n AXDecoratorModule,\n AXTranslationModule,\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutStartSideComponent,\n AXMChatSidebarNewActionsComponent,\n AXMChatEmptyAssistComposerComponent,\n AXMChatAssistComposerStarterPromptsComponent,\n ],\n host: {\n '(keydown.escape)': 'onContainerEscape()',\n '[tabindex]': '\"-1\"',\n },\n})\nexport class AXMChatComponent extends AXPPageLayoutBaseComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly conversationService = inject(AXConversationService);\n private readonly composerService = inject(AXComposerService);\n private readonly infoBarService = inject(AXInfoBarService);\n /** Eagerly resolves tenant debug mode for assist debug download action visibility. */\n private readonly _assistChatDebugModeInit = inject(AXMAssistChatDebugModeService);\n private readonly router = inject(Router);\n private readonly activatedRoute = inject(ActivatedRoute);\n private readonly dialogService = inject(AXDialogService);\n protected readonly deviceService = inject(AXPDeviceService);\n private readonly routeConversationId = toSignal(\n this.activatedRoute.paramMap.pipe(map((params) => params.get('id'))),\n { initialValue: this.activatedRoute.snapshot.paramMap.get('id') },\n );\n\n /**\n * Keeps conversation state aligned with the current route id.\n * This handles deep links, browser back/forward, and route reuse.\n */\n #syncConversationWithRoute = effect(() => {\n const conversationId = this.routeConversationId();\n const activeConversationId = this.conversationService.activeConversationId();\n\n if (conversationId === activeConversationId) {\n return;\n }\n\n if (conversationId) {\n void this.#trySelectConversationFromRoute(conversationId);\n return;\n }\n\n void this.conversationService.selectConversation(null as never);\n this.infoBarService.hideComponent();\n this.composerService.hideComponent();\n this.composerService.draftText.set('');\n });\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n }\n\n /**\n * Selects the conversation for a deep-linked route; on failure shows an alert and returns to chat root.\n */\n async #trySelectConversationFromRoute(conversationId: string): Promise<void> {\n try {\n await this.conversationService.selectConversation(conversationId);\n } catch {\n const title = await this.translateService.translateAsync('@conversation:chat.route.error-title');\n const message = await this.translateService.translateAsync('@conversation:chat.route.conversation-not-found');\n await this.dialogService.alert(title, message, 'danger');\n this.conversationService.closeActiveConversation();\n this.#navigateToChatRoot();\n }\n }\n\n //#endregion\n\n //#region ---- Properties ----\n\n /**\n * Computed signal to check if there is an active conversation selected.\n */\n readonly hasActiveConversation = computed(() => {\n return this.conversationService.activeConversationId() !== null;\n });\n\n readonly showChatList = computed(() => {\n return this.deviceService.isMobileDevice() && !this.hasActiveConversation();\n });\n\n //#endregion\n\n //#region ---- Lifecycle Methods ----\n\n /** Mobile list route: open sidebar after layout exists (no `:id`). */\n #afterRenderInit = afterNextRender(() => {\n if (!this.activatedRoute.snapshot.paramMap.get('id') && this.deviceService.isMobileDevice()) {\n this.toggleStartSide();\n }\n });\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n /**\n * Handles conversation selection from the sidebar.\n * Navigates to the selected conversation route.\n * On mobile, closes the sidebar after selection.\n * @param conversationId - The ID of the selected conversation.\n */\n onConversationSelected(conversationId: string): void {\n if (this.conversationService.activeConversationId() !== conversationId) {\n void this.conversationService.selectConversation(conversationId);\n }\n\n if (this.routeConversationId() !== conversationId) {\n void this.router.navigate([this.#getAppRouteSegment(), 'chat', conversationId]);\n }\n\n // On mobile, close the sidebar when a conversation is selected\n if (this.deviceService.isMobileDevice()) {\n this.toggleStartSide();\n }\n\n this.infoBarService.hideComponent();\n this.composerService.hideComponent();\n //optional\n // this.composerService.draftText.set('');\n }\n\n /**\n * Navigates back to the conversation list (mobile view).\n * Removes the route param and clears the active conversation.\n * Opens the sidebar to show the conversation list.\n */\n openChatList(): void {\n this.#navigateToChatRoot();\n\n // On mobile, open the sidebar to show conversation list\n if (this.deviceService.isMobileDevice()) {\n this.toggleStartSide();\n }\n }\n\n /**\n * Handles Escape key from chat container.\n * Replicates conversation2 source behavior by closing active conversation here.\n * Also keeps URL and chat state in sync.\n */\n onContainerEscape(): void {\n if (this.hasActiveConversation()) {\n this.conversationService.closeActiveConversation();\n }\n\n if (this.routeConversationId()) {\n this.#navigateToChatRoot();\n }\n }\n\n /**\n * Toggles the start side (sidebar) visibility.\n */\n protected override toggleStartSide(): void {\n this.layout()?.toggleStartSide();\n }\n\n /**\n * Navigates to chat root route and removes `:id` when it exists.\n */\n #navigateToChatRoot(): void {\n if (!this.routeConversationId()) {\n return;\n }\n\n void this.router.navigate([this.#getAppRouteSegment(), 'chat']);\n }\n\n /**\n * Returns current app segment used in chat routes.\n */\n #getAppRouteSegment(): string {\n return this.activatedRoute.snapshot.parent?.paramMap.get('app') || 'platform';\n }\n\n //#endregion\n}\n","<axp-page-layout #container axConversationContainer>\n <!-- Sidebar: Always visible on desktop, visible on mobile only when no conversation is selected -->\n\n <axp-layout-start-side class=\"ax-border-e ax-lightest-surface ax-h-full\">\n <axp-layout-content class=\"ax-flex ax-flex-col ax-min-h-0 ax-max-w-80\">\n <div class=\"ax-h-full ax-flex ax-flex-col ax-shrink-0\">\n <ax-conversation-sidebar (conversationSelected)=\"onConversationSelected($event.id)\" class=\"ax-group\">\n <ax-suffix>\n <div class=\"ax-flex ax-h-14 ax-shrink-0 ax-items-center ax-justify-end ax-overflow-hidden\">\n <axm-chat-sidebar-new-actions\n class=\"group-hover:!ax-translate-y-0 !ax-translate-y-36 ax-transition-transform ax-duration-200\"\n (conversationCreated)=\"onConversationSelected($event)\" />\n </div>\n </ax-suffix>\n </ax-conversation-sidebar>\n </div>\n </axp-layout-content>\n </axp-layout-start-side>\n\n <!-- Chat content: Always visible on desktop, visible on mobile only when a conversation is selected -->\n\n <axp-page-content class=\"ax-h-full ax-overflow-hidden !ax-p-0 ax-flex ax-min-h-0 ax-flex-col\">\n @if (showChatList()) {\n <ax-conversation-sidebar (conversationSelected)=\"onConversationSelected($event.id)\" class=\"ax-group\">\n <ax-suffix>\n <div class=\"ax-flex ax-h-14 ax-shrink-0 ax-items-center ax-justify-end ax-overflow-hidden\">\n <axm-chat-sidebar-new-actions\n class=\"group-hover:!ax-translate-y-0 !ax-translate-y-36 ax-transition-transform ax-duration-200\"\n (conversationCreated)=\"onConversationSelected($event)\" />\n </div>\n </ax-suffix>\n </ax-conversation-sidebar>\n } @else {\n <div class=\"ax-flex ax-h-full ax-min-h-0 ax-flex-1 ax-flex-col\">\n <ax-conversation-info-bar class=\"ax-shadow-md\">\n <ax-prefix>\n <!-- Back button visible only on mobile -->\n @if (deviceService.isMobileDevice()) {\n <ax-button look=\"blank\" (onClick)=\"openChatList()\">\n <ax-icon icon=\"fa-light fa-bars\"></ax-icon>\n </ax-button>\n } @else {\n <ax-button class=\"ax-rounded-full\" look=\"blank\" (onClick)=\"onContainerEscape()\" aria-label=\"Close Chat\">\n <ax-icon icon=\"fa-light fa-xmark ax-text-xl\"></ax-icon>\n </ax-button>\n }\n </ax-prefix>\n </ax-conversation-info-bar>\n <ax-conversation-message-list class=\"ax-min-h-0 ax-flex-1 ax-overflow-hidden\">\n <div ax-conversation-message-list-no-active class=\"ax-block\" style=\"width: min(95%, 50rem)\">\n <axm-chat-empty-assist-composer (conversationCreated)=\"onConversationSelected($event)\" />\n </div>\n <axm-chat-assist-composer-starter-prompts ax-conversation-message-list-empty />\n </ax-conversation-message-list>\n </div>\n }\n </axp-page-content>\n\n <axp-page-footer class=\"ax-block\">\n <ax-conversation-composer></ax-conversation-composer>\n </axp-page-footer>\n</axp-page-layout>","//#region ---- Imports ----\n\nimport type { AXMessage } from '@acorex/components/conversation2';\nimport {\n axpAiChatMessageIsDelegatedReflectionExcluded,\n axpAiDelegatedAgentResultSegments,\n type AXPAiChatFollowUpItem,\n type AXPAiChatMessage,\n type AXPAiChatResponse,\n type AXPAiDelegatedAgentResultSegment,\n} from '@acorex/modules/ai-management';\nimport type { AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { axmAssistNormalizeFollowUpItemsForConversation } from './assist-suggestion-chips.util';\n\n//#endregion\n\n//#region ---- Transcript read ----\n\n/**\n * Reorders assist transcript for debug UI: think first, tool/agent + tool results, then text blocks.\n */\nexport function axmNormalizeAssistTranscriptForChatUi(input: AXPAiChatMessage[]): AXPAiChatMessage[] {\n if (input.length === 0) {\n return input;\n }\n\n const thinkParts: string[] = [];\n const textParts: string[] = [];\n const middle: AXPAiChatMessage[] = [];\n\n for (const m of input) {\n if (m.role === 'tool' || m.role === 'user' || m.role === 'system') {\n middle.push(m);\n continue;\n }\n if (m.role !== 'assistant') {\n middle.push(m);\n continue;\n }\n for (const r of m.responses) {\n if (r.type === 'think') {\n thinkParts.push(r.content);\n } else if (r.type === 'text') {\n textParts.push(r.content);\n } else {\n middle.push({ role: 'assistant', responses: [r] } as AXPAiChatMessage);\n }\n }\n }\n\n const out: AXPAiChatMessage[] = [];\n if (thinkParts.length > 0) {\n out.push({\n role: 'assistant',\n responses: [{ type: 'think', content: thinkParts.join('\\n\\n') }],\n });\n }\n out.push(...middle);\n if (textParts.length > 0) {\n out.push({\n role: 'assistant',\n responses: [{ type: 'text', content: textParts.join('\\n\\n') }],\n });\n }\n return out;\n}\n\n/** Debug transcript from {@code metadata.transcripts} or streaming {@code metadata.transcriptDraft}. */\nexport function axmReadAssistAiTranscript(metadata: unknown): AXPAiChatMessage[] | null {\n if (typeof metadata !== 'object' || metadata == null) {\n return null;\n }\n const m = metadata as Record<string, unknown>;\n const final = m['transcripts'];\n const draft = m['transcriptDraft'];\n if (Array.isArray(final) && final.length > 0) {\n return axmNormalizeAssistTranscriptForChatUi(final as AXPAiChatMessage[]);\n }\n if (Array.isArray(draft) && draft.length > 0) {\n return axmNormalizeAssistTranscriptForChatUi(draft as AXPAiChatMessage[]);\n }\n return null;\n}\n\n/** Raw engine transcript (chronological), without debug UI reordering. */\nexport function axmReadAssistAiTranscriptRaw(metadata: unknown): AXPAiChatMessage[] {\n if (typeof metadata !== 'object' || metadata == null) {\n return [];\n }\n const m = metadata as Record<string, unknown>;\n const final = m['transcripts'];\n const draft = m['transcriptDraft'];\n if (Array.isArray(final) && final.length > 0) {\n return final as AXPAiChatMessage[];\n }\n if (Array.isArray(draft) && draft.length > 0) {\n return draft as AXPAiChatMessage[];\n }\n return [];\n}\n\n//#endregion\n\n//#region ---- Layout / synthetic helpers ----\n\nconst AXM_ASSIST_TRANSCRIPT_NON_WIDGET_TYPES = new Set<string>([\n 'text',\n 'think',\n 'image',\n 'audio',\n 'file',\n 'followUp',\n 'tool',\n 'agent',\n 'tool_result',\n 'agent_result',\n]);\n\nconst AXM_ASSIST_NODE_ENVELOPE_UNWRAP_MAX_DEPTH = 6;\n\nexport function axmAssistWidgetNodeFromUnknown(content: unknown, depth = 0): AXPWidgetNode | null {\n if (depth > AXM_ASSIST_NODE_ENVELOPE_UNWRAP_MAX_DEPTH) {\n return null;\n }\n if (content == null || typeof content !== 'object' || Array.isArray(content)) {\n return null;\n }\n const rec = content as Record<string, unknown>;\n const t = rec['type'];\n if (typeof t !== 'string') {\n return null;\n }\n if (t === 'node' && 'content' in rec) {\n return axmAssistWidgetNodeFromUnknown(rec['content'], depth + 1);\n }\n if (AXM_ASSIST_TRANSCRIPT_NON_WIDGET_TYPES.has(t)) {\n return null;\n }\n return content as AXPWidgetNode;\n}\n\nexport function axmSyntheticEmbedMessage(\n parent: AXMessage,\n suffix: string,\n partial: Pick<AXMessage, 'type' | 'payload'>,\n): AXMessage {\n return {\n ...parent,\n id: `${parent.id}::${suffix}`,\n type: partial.type,\n payload: partial.payload,\n metadata: {\n ...(typeof parent.metadata === 'object' && parent.metadata != null ? parent.metadata : {}),\n assistEmbed: true,\n },\n replyTo: undefined,\n };\n}\n\n//#endregion\n\n//#region ---- Payload (last transcript line) ----\n\nexport const AXM_ASSIST_TRANSCRIPT_LINE_PAYLOAD_TYPE = 'assist-transcript-line' as const;\n\nexport interface AxmAssistTranscriptLinePayload {\n type: typeof AXM_ASSIST_TRANSCRIPT_LINE_PAYLOAD_TYPE;\n line: AXPAiChatMessage;\n}\n\nexport function axmNormalizeAssistTranscriptLineResponses(line: AXPAiChatMessage): AXPAiChatMessage {\n return line;\n}\n\n/** Last {@link AXPAiChatMessage} in the engine turn (index {@code length - 1}). */\nexport function axmAssistLastTranscriptLine(transcript: AXPAiChatMessage[]): AXPAiChatMessage | null {\n if (transcript.length === 0) {\n return null;\n }\n return axmNormalizeAssistTranscriptLineResponses(transcript[transcript.length - 1]!);\n}\n\n/**\n * User-facing payload line for the assist bubble: merges visible assistant segments in the current turn,\n * including {@code followUp} from tool {@code agent_result} after auto-invoked specialists.\n */\nexport function axmAssistUserFacingPayloadLine(transcript: AXPAiChatMessage[]): AXPAiChatMessage | null {\n if (transcript.length === 0) {\n return null;\n }\n\n let lastUserIdx = -1;\n for (let i = transcript.length - 1; i >= 0; i--) {\n if (transcript[i].role === 'user') {\n lastUserIdx = i;\n break;\n }\n }\n const tail = lastUserIdx >= 0 ? transcript.slice(lastUserIdx) : transcript;\n\n const responses: AXPAiChatResponse[] = [];\n let followUpItems: AXPAiChatFollowUpItem[] | null = null;\n\n for (const m of tail) {\n if (m.role === 'assistant' && !axpAiChatMessageIsDelegatedReflectionExcluded(m)) {\n for (const r of m.responses) {\n if (r.type === 'text' || r.type === 'node' || r.type === 'file') {\n responses.push(r);\n } else if (r.type === 'followUp') {\n followUpItems = r.content;\n }\n }\n continue;\n }\n if (m.role !== 'tool') {\n continue;\n }\n for (const r of m.responses) {\n if (r.type !== 'agent_result') {\n continue;\n }\n const payload = r.content;\n if (payload.success !== true || payload.data?.responses == null) {\n continue;\n }\n for (const seg of payload.data.responses) {\n if (seg.type === 'followUp' && followUpItems == null) {\n followUpItems = seg.content;\n } else if (seg.type === 'text' || seg.type === 'node' || seg.type === 'file') {\n responses.push(seg);\n }\n }\n }\n }\n\n if (followUpItems != null && followUpItems.length > 0) {\n responses.push({ type: 'followUp', content: followUpItems });\n }\n if (responses.length === 0) {\n return null;\n }\n return axmNormalizeAssistTranscriptLineResponses({ role: 'assistant', responses });\n}\n\nexport function axmBuildAssistTranscriptLinePayload(line: AXPAiChatMessage): AxmAssistTranscriptLinePayload {\n return {\n type: AXM_ASSIST_TRANSCRIPT_LINE_PAYLOAD_TYPE,\n line: axmNormalizeAssistTranscriptLineResponses(line),\n };\n}\n\nexport function axmParseAssistTranscriptLinePayload(payload: unknown): AXPAiChatMessage | null {\n if (payload == null || typeof payload !== 'object' || Array.isArray(payload)) {\n return null;\n }\n const rec = payload as Record<string, unknown>;\n if (rec['type'] !== AXM_ASSIST_TRANSCRIPT_LINE_PAYLOAD_TYPE) {\n return null;\n }\n const line = rec['line'];\n if (line == null || typeof line !== 'object' || Array.isArray(line)) {\n return null;\n }\n const lm = line as AXPAiChatMessage;\n if (!Array.isArray(lm.responses)) {\n return null;\n }\n return axmNormalizeAssistTranscriptLineResponses(lm);\n}\n\n//#endregion\n\n//#region ---- Text envelope ----\n\nexport function axmParseAssistTranscriptTextEnvelope(raw: string): { thinking: string | null; body: string } {\n if (!raw) {\n return { thinking: null, body: '' };\n }\n\n const normalized = raw.replace(/<(\\/?redacted_thinking)>/gi, '<$1>');\n const parts: string[] = [];\n const body = normalized\n .replace(/<think>([\\s\\S]*?)<\\/redacted_thinking>/gi, (_m, inner: string) => {\n const t = inner.trim();\n if (t) {\n parts.push(t);\n }\n return '';\n })\n .trim();\n\n return { thinking: parts.length ? parts.join('\\n\\n') : null, body };\n}\n\n//#endregion\n\n//#region ---- User-mode visible segments (non-debug bubble) ----\n\nfunction axmUserVisibleDelegatedSegment(seg: AXPAiDelegatedAgentResultSegment): boolean {\n if (seg.type === 'think') {\n return false;\n }\n if (seg.type === 'node') {\n return axmAssistWidgetNodeFromUnknown(seg.content) != null;\n }\n if (seg.type === 'file') {\n return true;\n }\n if (seg.type === 'text') {\n const body = axmParseAssistTranscriptTextEnvelope(seg.content).body.trim();\n return body.length > 0 && body !== '```' && body !== '```json';\n }\n if (seg.type === 'followUp') {\n return seg.content.length > 0;\n }\n return false;\n}\n\nfunction axmUserVisibleChatResponse(line: AXPAiChatMessage, seg: AXPAiChatResponse): boolean {\n if (line.role === 'assistant') {\n if (seg.type === 'think') {\n return false;\n }\n if (seg.type === 'node') {\n return axmAssistWidgetNodeFromUnknown(seg.content) != null;\n }\n if (seg.type === 'file') {\n return true;\n }\n if (seg.type === 'text') {\n const body = axmParseAssistTranscriptTextEnvelope(seg.content).body.trim();\n return body.length > 0 && body !== '```' && body !== '```json';\n }\n if (seg.type === 'followUp') {\n return seg.content.length > 0;\n }\n return false;\n }\n if (line.role === 'tool' && seg.type === 'agent_result') {\n const c = seg.content as { success?: unknown; data?: unknown };\n if (c.success !== true || c.data == null || typeof c.data !== 'object' || Array.isArray(c.data)) {\n return false;\n }\n const responses = (c.data as Record<string, unknown>)['responses'];\n return axpAiDelegatedAgentResultSegments({ success: true, data: { responses: responses as AXPAiDelegatedAgentResultSegment[] } }).some(\n axmUserVisibleDelegatedSegment,\n );\n }\n return false;\n}\n\n/** Flattened user-visible items for one transcript line (payload bubble). */\nexport type AxmAssistUserVisibleItem =\n | { kind: 'text'; content: string }\n | { kind: 'node'; content: unknown }\n | { kind: 'file'; fileId: string; mimeType: string; name?: string }\n | { kind: 'followUp'; items: AXPAiChatFollowUpItem[] };\n\nexport function axmAssistUserVisibleItemsForLine(line: AXPAiChatMessage): AxmAssistUserVisibleItem[] {\n const out: AxmAssistUserVisibleItem[] = [];\n let followUpPushed = false;\n\n for (const seg of line.responses) {\n if (line.role === 'assistant') {\n if (seg.type === 'text' && axmUserVisibleChatResponse(line, seg)) {\n out.push({ kind: 'text', content: seg.content });\n } else if (seg.type === 'node' && axmUserVisibleChatResponse(line, seg)) {\n out.push({ kind: 'node', content: seg.content });\n } else if (seg.type === 'file') {\n out.push({\n kind: 'file',\n fileId: seg.content.fileId,\n mimeType: seg.content.mimeType,\n name: seg.content.name,\n });\n } else if (seg.type === 'followUp' && !followUpPushed && axmUserVisibleChatResponse(line, seg)) {\n out.push({ kind: 'followUp', items: seg.content });\n followUpPushed = true;\n }\n continue;\n }\n if (line.role === 'tool' && seg.type === 'agent_result') {\n const c = seg.content as { success?: unknown; data?: unknown };\n if (c.success !== true || c.data == null || typeof c.data !== 'object' || Array.isArray(c.data)) {\n continue;\n }\n const responses = (c.data as Record<string, unknown>)['responses'];\n for (const ds of axpAiDelegatedAgentResultSegments({\n success: true,\n data: { responses: responses as AXPAiDelegatedAgentResultSegment[] },\n })) {\n if (!axmUserVisibleDelegatedSegment(ds)) {\n continue;\n }\n if (ds.type === 'text') {\n out.push({ kind: 'text', content: ds.content });\n } else if (ds.type === 'node') {\n out.push({ kind: 'node', content: ds.content });\n } else if (ds.type === 'file') {\n out.push({\n kind: 'file',\n fileId: ds.content.fileId,\n mimeType: ds.content.mimeType,\n name: ds.content.name,\n });\n } else if (ds.type === 'followUp' && !followUpPushed) {\n out.push({ kind: 'followUp', items: ds.content });\n followUpPushed = true;\n }\n }\n }\n }\n\n return out;\n}\n\n/** Parses a raw {@code followUp} segment for UI (normalizes chip commands). */\nexport function axmAssistFollowUpItemsFromUnknown(raw: unknown): AXPAiChatFollowUpItem[] {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {\n return [];\n }\n const rec = raw as Record<string, unknown>;\n if (rec['type'] !== 'followUp') {\n return [];\n }\n const content = rec['content'];\n if (!Array.isArray(content)) {\n return [];\n }\n return axmAssistNormalizeFollowUpItemsForConversation(content as AXPAiChatFollowUpItem[]);\n}\n\n//#endregion\n\n","import type { AXParticipant } from '@acorex/components/conversation2';\n\n/**\n * True when the participant is an AI Assist peer (synthetic `assist-*` id or assist metadata).\n * Such entries should not appear in human-only pickers (e.g. regular \"New chat\").\n */\nexport function axmIsAssistPeerParticipant(participant: AXParticipant): boolean {\n if (typeof participant.id === 'string' && participant.id.startsWith('assist-')) {\n return true;\n }\n const meta = participant.metadata as Record<string, unknown> | undefined;\n if (!meta) {\n return false;\n }\n if (meta['kind'] === 'assist') {\n return true;\n }\n const assistId = meta['assistId'];\n return typeof assistId === 'string' && assistId.trim().length > 0;\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { AXMCommentEvent, AXMThreadEvent } from './comment.type';\n\nexport abstract class AXMCommentRealtimeService {\n abstract readonly comment$: Observable<AXMCommentEvent>;\n abstract readonly thread$: Observable<AXMThreadEvent>;\n\n abstract notifyComment(event: AXMCommentEvent): void;\n abstract notifyThread(event: AXMThreadEvent): void;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXMCommentRealtimeServiceImpl extends AXMCommentRealtimeService {\n private readonly _comment$ = new Subject<AXMCommentEvent>();\n readonly comment$ = this._comment$.asObservable();\n\n private readonly _thread$ = new Subject<AXMThreadEvent>();\n readonly thread$ = this._thread$.asObservable();\n\n notifyComment(event: AXMCommentEvent): void {\n this._comment$.next(event);\n }\n\n notifyThread(event: AXMThreadEvent): void {\n this._thread$.next(event);\n }\n}\n","import { AXPFilterOperatorMiddlewareService } from '@acorex/platform/common';\nimport { AXPContent, AXPContentType, AXPUserReference } from '@acorex/platform/core';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { inject, Injectable } from '@angular/core';\nimport { AXMMessageService } from '../../entities/message/message.service';\nimport { AXMConversationMessage, AXMConversationReaction, AXMReactionType } from '../../entities/message/message.types';\nimport { AXMRoomService } from '../../entities/room/room.service';\nimport { AXMConversationRoom } from '../../entities/room/room.types';\nimport { AXMComment, AXMCommentEntityData, AXMCommentThread } from './comment.type';\n\n//#region ---- Abstract Comment Service ----\n\nexport abstract class AXMCommentService {\n //#region ---- Comment Thread Service ----\n\n abstract createThread(entityRef: AXMCommentEntityData, topic: string, title?: string): Promise<AXMCommentThread>;\n abstract getThread(entityRef: AXMCommentEntityData, topic: string): Promise<AXMCommentThread | null>;\n abstract listThreads(entityRef: AXMCommentEntityData, topic: string): Promise<AXMCommentThread[]>;\n abstract updateThread(\n entityRef: AXMCommentEntityData,\n topic: string,\n data: Partial<{ title: string }>,\n ): Promise<AXMCommentThread>;\n abstract deleteThread(entityRef: AXMCommentEntityData, topic: string): Promise<boolean>;\n\n //#endregion\n\n //#region ---- Comment Service ----\n\n abstract addComment(\n threadId: string,\n content: string,\n parentCommentId?: string,\n contentType?: AXPContentType,\n userId?: string,\n ): Promise<AXMComment>;\n abstract getComments(threadId: string, nested: boolean): Promise<AXMComment[]>;\n abstract getComment(commentId: string): Promise<AXMComment>;\n abstract editComment(commentId: string, content: string, contentType?: AXPContentType): Promise<AXMComment>;\n abstract deleteComment(commentId: string): Promise<boolean>;\n\n //#endregion\n\n //#region ---- Comment Reaction Service ----\n\n abstract addReaction(commentId: string, type: AXMReactionType): Promise<AXMComment>;\n abstract removeReaction(commentId: string, type: AXMReactionType): Promise<AXMComment>;\n abstract getReactions(commentId: string): Promise<AXMConversationReaction[]>;\n abstract likeComment(commentId: string): Promise<AXMComment>;\n abstract unlikeComment(commentId: string): Promise<AXMComment>;\n\n //#endregion\n\n //#region ---- Comment Pin Service ----\n\n abstract pinComment(commentId: string): Promise<AXMComment>;\n abstract unpinComment(commentId: string): Promise<AXMComment>;\n\n //#endregion\n}\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXMCommentServiceImpl {\n private readonly roomService = inject(AXMRoomService);\n private readonly messageService = inject(AXMMessageService);\n private readonly filterService = inject(AXPFilterOperatorMiddlewareService);\n private readonly translationService = inject(AXTranslationService);\n\n async createThread(\n creatorUser: AXPUserReference,\n entityRef: AXMCommentEntityData,\n topic: string,\n title?: string,\n ): Promise<AXMConversationRoom> {\n const displayName = title || topic || `${entityRef.entityTypeId}#${entityRef.entityId}`;\n const room: Omit<AXMConversationRoom, 'id'> = {\n name: displayName,\n type: 'comment',\n topic: topic,\n title: title || `Comments for ${entityRef.entityTypeId}#${entityRef.entityId}`,\n members: [creatorUser],\n entityRef: {\n ...entityRef,\n },\n auditInfo: {\n created: { at: new Date(), by: creatorUser },\n },\n };\n const newRoomId = await this.roomService.insertOne(room);\n return this.roomService.getOne(newRoomId);\n }\n\n async getThread(entityRef: AXMCommentEntityData, topic: string): Promise<AXMConversationRoom | null> {\n const { items } = await this.roomService.query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [\n {\n field: 'entityRef.entityId',\n value: entityRef.entityId,\n operator: this.filterService.getOperator('equal') as any,\n },\n {\n field: 'entityRef.entityTypeId',\n value: entityRef.entityTypeId,\n operator: this.filterService.getOperator('equal') as any,\n },\n {\n field: 'topic',\n value: topic,\n operator: this.filterService.getOperator('equal') as any,\n },\n ],\n },\n });\n\n return items[0] || null;\n }\n\n async listThreads(entityRef: AXMCommentEntityData, topic: string): Promise<AXMConversationRoom[]> {\n const { items } = await this.roomService.query({\n skip: 0,\n take: 100,\n filter: {\n logic: 'and',\n filters: [\n {\n field: 'entityRef.id',\n value: entityRef.entityId,\n operator: this.filterService.getOperator('equal') as any,\n },\n {\n field: 'entityRef.type',\n value: entityRef.entityTypeId,\n operator: this.filterService.getOperator('equal') as any,\n },\n {\n field: 'topic',\n value: topic,\n operator: this.filterService.getOperator('equal') as any,\n },\n ],\n },\n });\n\n return items;\n }\n\n async updateThread(threadId: string, data: Partial<{ title: string }>): Promise<AXMConversationRoom> {\n await this.roomService.updateOne(threadId, data);\n return this.roomService.getOne(threadId);\n }\n\n async deleteThread(threadId: string): Promise<boolean> {\n await this.roomService.deleteOne(threadId);\n return true;\n }\n\n async addComment(\n threadId: string,\n content: string,\n author: AXPUserReference,\n parentCommentId?: string,\n contentType: AXPContentType = 'text',\n ): Promise<AXMConversationMessage> {\n const messageContent: AXPContent = { content, contentType };\n const plainTitle =\n content.replace(/<[^>]+>/g, '').trim() ||\n (await this.translationService.translateAsync('@conversation:terms.common.comment'));\n const message: Omit<AXMConversationMessage, 'id'> = {\n name: plainTitle,\n title: plainTitle,\n roomId: threadId,\n message: messageContent,\n author,\n replyId: parentCommentId,\n reactions: [],\n seen: [],\n auditInfo: {\n created: { at: new Date(), by: author },\n },\n };\n const messageId = await this.messageService.insertOne(message);\n return this.messageService.getOne(messageId);\n }\n\n async getComments(threadId: string): Promise<AXMConversationMessage[]> {\n const { items } = await this.messageService.query({\n skip: 0,\n filter: { field: 'roomId', value: threadId, operator: this.filterService.getOperator('equal') as any },\n sort: [{ field: 'created.at', dir: 'asc' } as any],\n take: 500,\n });\n return items;\n }\n\n async getComment(commentId: string): Promise<AXMConversationMessage> {\n return this.messageService.getOne(commentId);\n }\n\n async editComment(\n commentId: string,\n content: string,\n editor: AXPUserReference,\n contentType: AXPContentType = 'text',\n ): Promise<AXMConversationMessage> {\n const messageContent: AXPContent = { content, contentType };\n const plainTitle =\n content.replace(/<[^>]+>/g, '').trim() ||\n (await this.translationService.translateAsync('@conversation:terms.common.comment'));\n await this.messageService.updateOne(commentId, {\n name: plainTitle,\n title: plainTitle,\n message: messageContent,\n auditInfo: {\n updated: { at: new Date(), by: editor },\n },\n });\n return this.messageService.getOne(commentId);\n }\n\n async deleteComment(commentId: string): Promise<boolean> {\n await this.messageService.deleteOne(commentId);\n return true;\n }\n\n async updateReactions(commentId: string, reactions: AXMConversationReaction[]): Promise<AXMConversationMessage> {\n await this.messageService.updateOne(commentId, { reactions });\n return this.messageService.getOne(commentId);\n }\n\n async getReactions(commentId: string): Promise<AXMConversationReaction[]> {\n const comment = await this.messageService.getOne(commentId);\n return comment.reactions || [];\n }\n\n async pinComment(commentId: string, isPinned: boolean): Promise<AXMConversationMessage> {\n await this.messageService.updateOne(commentId, { isPinned });\n return this.messageService.getOne(commentId);\n }\n}\n","import { AXMUsersEntityService } from '@acorex/modules/security-management';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPContentType, AXPUserReference } from '@acorex/platform/core';\nimport { inject, Injectable } from '@angular/core';\nimport { AXMConversationMessage, AXMConversationReaction, AXMReactionType } from '../../entities/message/message.types';\nimport { AXMConversationRoom } from '../../entities/room/room.types';\nimport { AXMCommentRealtimeService } from './comment-realtime.service';\nimport { AXMCommentServiceImpl } from './comment.service';\nimport { AXMComment, AXMCommentEntityData, AXMCommentThread } from './comment.type';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXMCommentManagementService {\n private readonly commentImplService = inject(AXMCommentServiceImpl);\n private readonly sessionService = inject(AXPSessionService);\n private readonly usersService = inject(AXMUsersEntityService);\n private readonly realtimeService = inject(AXMCommentRealtimeService);\n\n private getCurrentUser(): AXPUserReference {\n const user = this.sessionService.user;\n if (!user) {\n throw new Error('No authenticated user found.');\n }\n return {\n id: user.id,\n type: 'user',\n fullName: user.title,\n username: user.name,\n };\n }\n\n private async getUserInfo(userId: string): Promise<AXPUserReference> {\n try {\n const user = await this.usersService.getOne(userId);\n return { id: userId, type: 'user', fullName: user.displayName, username: user.username };\n } catch {\n throw new Error(`User with ID ${userId} not found`);\n }\n }\n\n private formatComment(message: AXMConversationMessage, depth = 0): AXMComment {\n return {\n ...message,\n depth,\n replies: [],\n replyCount: 0,\n };\n }\n\n private buildCommentTree(comments: AXMComment[]): AXMComment[] {\n const commentMap = new Map<string, AXMComment>(comments.map((c) => [c.id, c]));\n const tree: AXMComment[] = [];\n\n comments.forEach((comment) => {\n if (comment.replyId && commentMap.has(comment.replyId)) {\n const parent = commentMap.get(comment.replyId)!;\n parent.replies.push(comment);\n comment.depth = (parent.depth ?? 0) + 1;\n } else {\n tree.push(comment);\n }\n });\n\n commentMap.forEach((comment) => {\n comment.replyCount = comment.replies.length;\n });\n\n return tree;\n }\n\n private async formatThread(room: AXMConversationRoom): Promise<AXMCommentThread> {\n const comments = await this.getComments(room.id, true);\n return {\n ...room,\n comments,\n commentCount: comments.length,\n };\n }\n\n async createThread(entityRef: AXMCommentEntityData, topic: string, title?: string): Promise<AXMCommentThread> {\n const currentUser = this.getCurrentUser();\n const newRoom = await this.commentImplService.createThread(currentUser, entityRef, topic, title);\n const newThread = await this.formatThread(newRoom);\n this.realtimeService.notifyThread({ type: 'add', payload: newThread });\n return newThread;\n }\n\n async getThread(entityRef: AXMCommentEntityData, topic: string): Promise<AXMCommentThread | null> {\n const room = await this.commentImplService.getThread(entityRef, topic);\n if (!room) {\n return null;\n }\n return this.formatThread(room);\n }\n\n async listThreads(entityRef: AXMCommentEntityData, topic: string): Promise<AXMCommentThread[]> {\n const rooms = await this.commentImplService.listThreads(entityRef, topic);\n return Promise.all(rooms.map((room) => this.formatThread(room)));\n }\n\n async updateThread(\n entityRef: AXMCommentEntityData,\n topic: string,\n data: Partial<{ title: string }>,\n ): Promise<AXMCommentThread> {\n const thread = await this.getThread(entityRef, topic);\n if (!thread) {\n throw new Error(`Thread for entity ${entityRef.entityTypeId}#${entityRef.entityId} not found.`);\n }\n const updatedRoom = await this.commentImplService.updateThread(thread.id, data);\n const updatedThread = await this.formatThread(updatedRoom);\n this.realtimeService.notifyThread({ type: 'update', payload: updatedThread });\n return updatedThread;\n }\n\n async deleteThread(entityRef: AXMCommentEntityData, topic: string): Promise<boolean> {\n const thread = await this.getThread(entityRef, topic);\n if (thread) {\n await this.commentImplService.deleteThread(thread.id);\n this.realtimeService.notifyThread({ type: 'remove', payload: thread.id });\n return true;\n }\n return false;\n }\n\n async addComment(\n threadId: string,\n content: string,\n parentCommentId?: string,\n contentType: AXPContentType = 'text',\n userId?: string,\n ): Promise<AXMComment> {\n const author = userId ? await this.getUserInfo(userId) : this.getCurrentUser();\n const rawComment = await this.commentImplService.addComment(\n threadId,\n content,\n author,\n parentCommentId,\n contentType,\n );\n const formattedComment = this.formatComment(rawComment);\n this.realtimeService.notifyComment({ type: 'add', payload: formattedComment });\n return formattedComment;\n }\n\n async getComments(threadId: string, nested: boolean): Promise<AXMComment[]> {\n const rawComments = await this.commentImplService.getComments(threadId);\n const formattedComments = rawComments.map((c) => this.formatComment(c));\n if (nested) {\n return this.buildCommentTree(formattedComments);\n }\n return formattedComments;\n }\n\n async getComment(commentId: string): Promise<AXMComment> {\n const rawComment = await this.commentImplService.getComment(commentId);\n return this.formatComment(rawComment);\n }\n\n async editComment(commentId: string, content: string, contentType: AXPContentType = 'text'): Promise<AXMComment> {\n const editor = this.getCurrentUser();\n const rawComment = await this.commentImplService.editComment(commentId, content, editor, contentType);\n const formattedComment = this.formatComment(rawComment);\n this.realtimeService.notifyComment({ type: 'update', payload: formattedComment });\n return formattedComment;\n }\n\n async deleteComment(commentId: string): Promise<boolean> {\n const result = await this.commentImplService.deleteComment(commentId);\n if (result) {\n this.realtimeService.notifyComment({ type: 'remove', payload: commentId });\n }\n return result;\n }\n\n async addReaction(commentId: string, type: AXMReactionType): Promise<AXMComment> {\n const author = this.getCurrentUser();\n const comment = await this.commentImplService.getComment(commentId);\n const reactions = comment.reactions || [];\n\n if (reactions.some((r) => r.author.id === author.id && r.type === type)) {\n return this.formatComment(comment);\n }\n\n const updatedReactions = [...reactions, { author, type }];\n const rawComment = await this.commentImplService.updateReactions(commentId, updatedReactions);\n const formattedComment = this.formatComment(rawComment);\n this.realtimeService.notifyComment({ type: 'update', payload: formattedComment });\n return formattedComment;\n }\n\n async removeReaction(commentId: string, type: AXMReactionType): Promise<AXMComment> {\n const author = this.getCurrentUser();\n const comment = await this.commentImplService.getComment(commentId);\n const updatedReactions = (comment.reactions || []).filter((r) => !(r.author.id === author.id && r.type === type));\n\n const rawComment = await this.commentImplService.updateReactions(commentId, updatedReactions);\n const formattedComment = this.formatComment(rawComment);\n this.realtimeService.notifyComment({ type: 'update', payload: formattedComment });\n return formattedComment;\n }\n\n getReactions(commentId: string): Promise<AXMConversationReaction[]> {\n return this.commentImplService.getReactions(commentId);\n }\n\n likeComment(commentId: string): Promise<AXMComment> {\n return this.addReaction(commentId, 'like');\n }\n\n unlikeComment(commentId: string): Promise<AXMComment> {\n return this.removeReaction(commentId, 'like');\n }\n\n async pinComment(commentId: string): Promise<AXMComment> {\n const rawComment = await this.commentImplService.pinComment(commentId, true);\n const formattedComment = this.formatComment(rawComment);\n this.realtimeService.notifyComment({ type: 'update', payload: formattedComment });\n return formattedComment;\n }\n\n async unpinComment(commentId: string): Promise<AXMComment> {\n const rawComment = await this.commentImplService.pinComment(commentId, false);\n const formattedComment = this.formatComment(rawComment);\n this.realtimeService.notifyComment({ type: 'update', payload: formattedComment });\n return formattedComment;\n }\n}\n","import { AXMNotificationItem } from '@acorex/modules/notification-management';\nimport { AXPUserReference } from '@acorex/platform/core';\nimport { AXMComment, AXMCommentThread } from './comment.type';\n\nexport function convertCommentToNotification(\n thread: AXMCommentThread,\n comment: AXMComment,\n currentUser: AXPUserReference,\n): Omit<AXMNotificationItem, 'id' | 'entityName' | 'createAt'> {\n return {\n channel: 'InApp',\n template: {\n category: 'Inbox',\n prority: 'Notice',\n icon: 'fa-light fa-comment',\n isPinned: false,\n },\n title: thread.title || '@conversation:comments.notification.new-comment',\n body: comment.message.content,\n sender: comment.author,\n receiver: currentUser,\n content: comment.message,\n readAt: null,\n type: 'Comment',\n data: {\n threadId: thread.id,\n entityTypeId: thread.entityRef?.entityTypeId,\n entityId: thread.entityRef?.entityId,\n moduleName: thread.entityRef?.moduleName,\n entityName: thread.entityRef?.entityName,\n },\n };\n}\n","import { AXWysiwygContainerComponent, AXWysiwygModule } from '@acorex/components/wysiwyg';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n inject,\n input,\n OnInit,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { AXStyleLookType } from '@acorex/cdk/common';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXPUserReference } from '@acorex/platform/core';\nimport { animate, style, transition, trigger } from '@angular/animations';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { AXMComment, AXMCommentThread } from './comment.type';\n\nimport { AXAvatarModule } from '@acorex/components/avatar';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCommentModule } from '@acorex/components/comment';\nimport { AXConversationModule } from '@acorex/components/conversation';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXImageModule } from '@acorex/components/image';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXToolBarModule } from '@acorex/components/toolbar';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXMNotificationConnectorService } from '@acorex/modules/notification-management';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPUserAvatarComponent } from '@acorex/platform/layout/components';\nimport { AsyncPipe } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { filter } from 'rxjs';\nimport { AXMCommentManagementService } from './comment-management.service';\nimport { convertCommentToNotification } from './comment-notification.helper';\nimport { AXMCommentRealtimeService } from './comment-realtime.service';\n\nconst HIGHLIGHT_DURATION_MS = 2500;\nconst SUBMIT_COOLDOWN_MS = 100;\n\n@Component({\n templateUrl: './comment.component.html',\n selector: 'axm-comment',\n encapsulation: ViewEncapsulation.None,\n animations: [\n trigger('fadeIn', [\n transition(':enter', [\n style({ opacity: 0, transform: 'translateY(10px)' }),\n animate('300ms ease-out', style({ opacity: 1, transform: 'translateY(0)' })),\n ]),\n ]),\n ],\n imports: [\n AXWysiwygModule,\n AXConversationModule,\n AXSkeletonModule,\n AXDecoratorModule,\n AXCommentModule,\n AXButtonModule,\n AXAvatarModule,\n AXImageModule,\n AXLoadingModule,\n AXDropdownModule,\n AXFormatModule,\n AXTranslationModule,\n AsyncPipe,\n AXFormModule,\n AXToolBarModule,\n FormsModule,\n AXDropdownButtonModule,\n AXPUserAvatarComponent,\n ],\n styles: `\n :host {\n display: block;\n width: 100%;\n height: 100%;\n }\n\n ax-wysiwyg-container {\n .ax-editor-container {\n border-top-left-radius: 0 !important;\n border-top-right-radius: 0 !important;\n }\n .ax-error-message {\n padding-left: 0.5rem;\n }\n }\n\n ax-comment-item.highlighted {\n animation: comment-highlight-pulse 2.5s cubic-bezier(0.4, 0, 0.2, 1) forwards;\n }\n\n @keyframes comment-highlight-pulse {\n 0% {\n background-color: transparent;\n box-shadow: inset 3px 0 0 0 transparent;\n }\n 10% {\n background-color: rgba(var(--ax-sys-color-primary-lightest-surface), 0.5);\n box-shadow: inset 3px 0 0 0 rgb(var(--ax-sys-color-primary-surface));\n }\n 35% {\n background-color: rgba(var(--ax-sys-color-primary-lightest-surface), 0.3);\n box-shadow: inset 3px 0 0 0 rgba(var(--ax-sys-color-primary-lighter-surface), 0.8);\n }\n 60% {\n background-color: rgba(var(--ax-sys-color-primary-lightest-surface), 0.4);\n box-shadow: inset 3px 0 0 0 rgba(var(--ax-sys-color-primary-lightest-surface), 0.6);\n }\n 100% {\n background-color: transparent;\n box-shadow: inset 3px 0 0 0 transparent;\n }\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXMCommentComponent implements OnInit {\n //#region ---- Inputs ----\n\n refrenceType = input.required<string>();\n refrenceId = input.required<string>();\n subject = input.required<string>();\n\n //#endregion\n\n //#region ---- State Signals ----\n\n moduleName = signal<string | undefined>(undefined);\n entityName = signal<string | undefined>(undefined);\n\n protected hasCooldown = signal(false);\n protected commentContent = signal('');\n protected isSubmitting = signal(false);\n protected isReplyingMode = signal(false);\n protected isEditingMode = signal(false);\n protected isLoading = signal(true);\n protected activeReplyComment = signal<(AXMComment & { userName: string }) | undefined>(undefined);\n protected activeEditComment = signal<(AXMComment & { userName: string }) | undefined>(undefined);\n protected highlightedCommentId = signal<string | null>(null);\n protected expandedCommentIds = signal(new Set<string>());\n protected comments = signal<AXMComment[]>([]);\n protected thread = signal<AXMCommentThread | undefined>(undefined);\n protected wysiwygOptions = signal<{ look: AXStyleLookType }>({ look: 'solid' });\n\n //#endregion\n\n //#region ---- View Children ----\n\n protected wysiwygEditor = viewChild.required<AXWysiwygContainerComponent>('w');\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private readonly commentService = inject(AXMCommentManagementService);\n private readonly realtimeService = inject(AXMCommentRealtimeService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly toastService = inject(AXToastService);\n private readonly dialogService = inject(AXDialogService);\n private readonly notificationConnectorService = inject(AXMNotificationConnectorService);\n private readonly router = inject(Router);\n private readonly activatedRoute = inject(ActivatedRoute);\n private readonly sanitizer = inject(DomSanitizer);\n private readonly translationService = inject(AXTranslationService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly elementRef = inject(ElementRef);\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n ngOnInit(): void {\n this.moduleName.set(this.activatedRoute.snapshot.params['module'] || null);\n this.entityName.set(this.activatedRoute.snapshot.params['entity'] || null);\n this.loadComments().finally(() => {\n setTimeout(() => this.isLoading.set(false), 250);\n });\n\n this.realtimeService.comment$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n filter((event) => !!event),\n )\n .subscribe((event) => {\n switch (event.type) {\n case 'add':\n this.handleAddComment(event.payload as AXMComment);\n break;\n case 'update':\n this.handleUpdateComment(event.payload as AXMComment);\n break;\n case 'remove':\n this.removeMessageById(event.payload as string);\n break;\n }\n });\n }\n\n //#endregion\n\n //#region ---- Data Loading ----\n\n async loadComments(): Promise<void> {\n try {\n const entityRef = {\n entityTypeId: this.refrenceType(),\n entityId: this.refrenceId(),\n moduleName: this.moduleName(),\n entityName: this.entityName(),\n };\n const thread = await this.commentService.getThread(entityRef, this.subject());\n\n if (thread) {\n this.thread.set(thread);\n this.comments.set(thread.comments || []);\n } else {\n const newThread = await this.commentService.createThread(entityRef, this.subject());\n this.thread.set(newThread);\n this.comments.set(newThread.comments || []);\n }\n } catch (error) {\n console.error('Failed to load comments:', error);\n this.showTranslatedToast('messages.error.load-comments', 'danger');\n this.comments.set([]);\n }\n }\n\n //#endregion\n\n //#region ---- Comment Actions ----\n\n /** Opens edit mode for the target comment (or its reply). */\n protected editMessage(comment: AXMComment, reply?: AXMComment, userName?: string): void {\n const target = reply || comment;\n this.isReplyingMode.set(false);\n this.activeReplyComment.set(undefined);\n this.isEditingMode.set(true);\n this.activeEditComment.set({ ...target, userName: userName || '' });\n this.commentContent.set(target.message?.content || '');\n this.wysiwygEditor().getHostElement().scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n\n /** Opens reply mode, optionally mentioning a specific reply author. */\n protected replyMessage(comment: AXMComment, reply?: AXMComment, userName?: string): void {\n this.isEditingMode.set(false);\n this.activeEditComment.set(undefined);\n this.isReplyingMode.set(true);\n this.activeReplyComment.set({ ...comment, userName: userName || '' });\n\n if (reply) {\n const author = (reply.author as any).fullName || reply.author.id;\n const mention = `<strong><a data-id=\"${reply.author.username}\">@${userName || author}</a></strong> `;\n this.commentContent.set(mention);\n this.setEditorContent(mention);\n this.wysiwygEditor()?.focus();\n }\n this.wysiwygEditor().getHostElement().scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n\n protected async deleteComment(commentId: string): Promise<void> {\n const [dialogTitle, dialogMessage, deleteText, deletingText, cancelText] = await Promise.all([\n this.t('confirmations.delete-comment.title'),\n this.t('confirmations.delete-comment.message'),\n this.t('actions.delete.title'),\n this.t('confirmations.delete-comment.deleting'),\n this.t('actions.cancel.title'),\n ]);\n\n const dialog = this.dialogService.open({\n icon: 'fa-regular fa-warning',\n content: dialogMessage,\n title: dialogTitle,\n type: 'danger',\n orientation: 'horizontal',\n buttons: [\n {\n text: deleteText,\n color: 'danger',\n onClick: async (e: any) => {\n e.handled = true;\n e.source.text = deletingText;\n e.source.disabled = true;\n e.source.loading = true;\n try {\n await this.commentService.deleteComment(commentId);\n this.removeMessageById(commentId);\n this.showTranslatedToast('messages.success.comment-deleted', 'success');\n if (this.isEditingMode() && this.activeEditComment()?.id === commentId) {\n this.resetReplyEditState();\n }\n dialog.close();\n } catch (error) {\n if (typeof error === 'string') {\n this.showToast(error, 'danger');\n } else {\n this.showTranslatedToast('messages.error.delete-comment', 'danger');\n }\n }\n },\n },\n {\n text: cancelText,\n color: 'default',\n autofocus: true,\n onClick: () => dialog.close(),\n },\n ],\n closeButton: false,\n });\n }\n\n protected resetReplyEditState(): void {\n this.isEditingMode.set(false);\n this.activeEditComment.set(undefined);\n this.isReplyingMode.set(false);\n this.activeReplyComment.set(undefined);\n this.commentContent.set('');\n this.clearEditorContent();\n }\n\n protected async submitComment(): Promise<void> {\n this.isSubmitting.set(true);\n try {\n const currentThread = this.thread();\n if (!currentThread) return;\n\n if (this.isEditingMode() && this.activeEditComment()?.id) {\n await this.commentService.editComment(this.activeEditComment()!.id, this.commentContent());\n this.hasCooldown.set(true);\n this.isEditingMode.set(false);\n this.activeEditComment.set(undefined);\n } else {\n const parentCommentId = this.activeReplyComment()?.id;\n const newComment = await this.commentService.addComment(\n currentThread.id,\n this.commentContent(),\n parentCommentId,\n );\n this.hasCooldown.set(true);\n if (parentCommentId) {\n this.expandReplies(parentCommentId);\n }\n this.isReplyingMode.set(false);\n this.activeReplyComment.set(undefined);\n\n if (newComment?.id) {\n this.scrollToAndHighlight(newComment.id);\n }\n }\n\n this.commentContent.set('');\n this.clearEditorContent();\n setTimeout(() => this.hasCooldown.set(false), SUBMIT_COOLDOWN_MS);\n } catch (error) {\n console.error('Error submitting comment:', error);\n if (typeof error === 'string') {\n this.showToast(error, 'danger');\n } else {\n this.showTranslatedToast('messages.error.submit-comment', 'danger');\n }\n } finally {\n this.isSubmitting.set(false);\n }\n }\n\n //#endregion\n\n //#region ---- Reactions ----\n\n protected async toggleLike(comment: AXMComment): Promise<void> {\n const isLiked = this.isLikedByUser(comment);\n this.updateLikeStatus(comment.id, !isLiked);\n try {\n if (isLiked) {\n await this.commentService.unlikeComment(comment.id);\n } else {\n await this.commentService.likeComment(comment.id);\n }\n } catch (error) {\n console.error('Failed to toggle like:', error);\n this.updateLikeStatus(comment.id, isLiked);\n }\n }\n\n protected isLikedByUser(comment: AXMComment): boolean {\n const user = this.getCurrentUser();\n if (!user) return false;\n return (comment.reactions || []).some((r) => r.author.id === user.id && r.type === 'like');\n }\n\n protected getReactionsCount(comment: AXMComment): number {\n return (comment.reactions || []).filter((r) => r.type === 'like').length;\n }\n\n //#endregion\n\n //#region ---- Replies Expansion ----\n\n protected isRepliesExpanded(commentId: string): boolean {\n return this.expandedCommentIds().has(commentId);\n }\n\n protected onRepliesExpandedChange(commentId: string, expanded: boolean): void {\n this.expandedCommentIds.update((ids) => {\n const next = new Set(ids);\n if (expanded) {\n next.add(commentId);\n } else {\n next.delete(commentId);\n }\n return next;\n });\n }\n\n private expandReplies(commentId: string): void {\n this.expandedCommentIds.update((ids) => {\n const next = new Set(ids);\n next.add(commentId);\n return next;\n });\n }\n\n //#endregion\n\n //#region ---- Scroll & Highlight ----\n\n /**\n * Scrolls to the referenced comment and triggers a highlight pulse animation.\n * Expands parent replies if needed to ensure the target is in the DOM.\n */\n protected scrollMain(): void {\n const comment = this.isReplyingMode() ? this.activeReplyComment() : this.activeEditComment();\n if (!comment?.id) return;\n\n if (comment.replyId) {\n this.expandReplies(comment.replyId);\n }\n\n this.scrollToAndHighlight(comment.id);\n }\n\n /**\n * Scrolls to a comment element and applies a highlight pulse animation.\n * Uses setTimeout to wait for Angular to render after signal updates.\n */\n private scrollToAndHighlight(commentId: string): void {\n this.highlightedCommentId.set(null);\n\n setTimeout(() => {\n const el = this.elementRef.nativeElement.querySelector(`ax-comment-item[id=\"${commentId}\"]`);\n if (!el) return;\n\n el.scrollIntoView({ behavior: 'smooth', block: 'center' });\n this.highlightedCommentId.set(commentId);\n setTimeout(() => this.highlightedCommentId.set(null), HIGHLIGHT_DURATION_MS);\n });\n }\n\n //#endregion\n\n //#region ---- HTML Sanitization ----\n\n protected sanitizeHtml(htmlContent: string | undefined) {\n if (!htmlContent) return this.sanitizer.bypassSecurityTrustHtml('');\n return this.sanitizer.bypassSecurityTrustHtml(htmlContent);\n }\n\n //#endregion\n\n //#region ---- Realtime Event Handlers ----\n\n private handleAddComment(comment: AXMComment): void {\n if (comment.author.id !== this.getCurrentUser()?.id) {\n const notification = convertCommentToNotification(\n this.thread()!,\n comment,\n this.sessionService.user as unknown as AXPUserReference,\n );\n this.notificationConnectorService.create(\n {\n ...notification,\n id: comment.id,\n entityName: 'notifications',\n createAt: new Date(),\n },\n {\n onClick: () => {\n this.router.navigate([this.refrenceType(), 't', this.refrenceType(), 'i', this.refrenceId()]);\n },\n activeWindow: true,\n },\n );\n }\n if (comment.replyId) {\n this.expandReplies(comment.replyId);\n this.comments.update((comments) =>\n comments.map((c) => {\n if (c.id === comment.replyId) {\n const newReplies = c.replies ? [...c.replies, comment] : [comment];\n return { ...c, replies: newReplies, replyCount: newReplies.length };\n }\n return c;\n }),\n );\n } else {\n this.comments.update((comments) => [...comments, comment]);\n }\n }\n\n private handleUpdateComment(updatedComment: AXMComment): void {\n const update = (list: AXMComment[]): AXMComment[] =>\n list.map((c) => {\n if (c.id === updatedComment.id) {\n return { ...c, ...updatedComment, replies: updatedComment.replies || c.replies };\n }\n if (c.replies?.length) {\n return { ...c, replies: update(c.replies) };\n }\n return c;\n });\n this.comments.update((comments) => update(comments));\n }\n\n //#endregion\n\n //#region ---- Private Helpers ----\n\n private getCurrentUser(): AXPUserReference | null {\n const user = this.sessionService.user;\n return user ? { id: user.id, type: 'user' } : null;\n }\n\n private updateLikeStatus(commentId: string, willBeLiked: boolean): void {\n const findAndToggle = (comments: AXMComment[]): AXMComment[] =>\n comments.map((c) => {\n if (c.id === commentId) {\n const user = this.getCurrentUser();\n if (!user) return c;\n const reactions = willBeLiked\n ? [...(c.reactions || []), { author: user, type: 'like' as const }]\n : (c.reactions || []).filter((r) => r.author.id !== user.id || r.type !== 'like');\n return { ...c, reactions };\n }\n if (c.replies?.length) {\n return { ...c, replies: findAndToggle(c.replies) };\n }\n return c;\n });\n this.comments.update((comments) => findAndToggle(comments));\n }\n\n private removeMessageById(commentId: string): void {\n const filterOut = (comments: AXMComment[]): AXMComment[] =>\n comments\n .filter((c) => c.id !== commentId)\n .map((c) => {\n if (c.replies?.length) {\n return { ...c, replies: filterOut(c.replies) };\n }\n return c;\n });\n this.comments.update((comments) => filterOut(comments));\n }\n\n /** Workaround: Quill editor may not sync immediately with ngModel on clear */\n private clearEditorContent(): void {\n const editor = this.elementRef.nativeElement.querySelector('.ql-editor');\n if (editor) editor.innerHTML = '';\n }\n\n /** Workaround: Quill editor may not sync immediately with ngModel on set */\n private setEditorContent(html: string): void {\n const editor = this.elementRef.nativeElement.querySelector('.ql-editor');\n if (editor) editor.innerHTML = html;\n }\n\n /** Shorthand translator scoped to the comments feature */\n private t(key: string): Promise<string> {\n return this.translationService.translateAsync(`@conversation:comments.${key}`);\n }\n\n private showToast(content: string, color: 'success' | 'danger'): void {\n this.toastService.show({\n content,\n color,\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n }\n\n private async showTranslatedToast(key: string, color: 'success' | 'danger'): Promise<void> {\n const content = await this.t(key);\n this.showToast(content, color);\n }\n\n //#endregion\n}\n","<div class=\"ax-size-full ax-flex ax-flex-col ax-justify-between ax-overflow-hidden\">\n <ax-comment-container class=\"ax-overflow-auto\">\n @if (isLoading()) {\n <div class=\"ax-flex ax-items-center ax-py-12 ax-bg-lightest ax-px-5\">\n <ax-skeleton class=\"ax-min-w-16 ax-h-16 ax-rounded-full ax-me-4\"></ax-skeleton>\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-w-full\">\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-2 ax-rounded-full\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-2 ax-rounded-full\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-8/12 ax-h-2 ax-rounded-full\"></ax-skeleton>\n </div>\n </div>\n } @else if (comments().length > 0) {\n <ax-comment-view class=\"ax-bg-lightest\">\n @for (comment of comments(); track comment.id) {\n <ax-comment-item\n [id]=\"comment.id!\"\n [replyCount]=\"comment.replyCount\"\n [repliesExpanded]=\"isRepliesExpanded(comment.id!)\"\n (repliesExpandedChange)=\"onRepliesExpandedChange(comment.id!, $event)\"\n [class.highlighted]=\"highlightedCommentId() === comment.id\"\n [@fadeIn]\n >\n <axp-user-avatar #user [size]=\"40\" [userId]=\"comment.author.id\" ngProjectAs=\"'ax-avatar'\"></axp-user-avatar>\n <ax-title>{{ user.firstName() + ' ' + user.lastName() }}</ax-title>\n <ax-comment-date>{{ comment.auditInfo?.created?.at! | format: 'timeleft' | async }} </ax-comment-date>\n <ax-comment-menu-options>\n <ax-button class=\"ax-sm\" look=\"blank\" color=\"neutral\">\n <ax-icon icon=\"ax-icon ax-icon-solid ax-icon-more-horizontal\"></ax-icon>\n </ax-button>\n\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item\n [text]=\"('@conversation:comments.actions.edit.title' | translate | async) ?? ''\"\n color=\"neutral\"\n (click)=\"editMessage(comment, undefined, user.firstName() + ' ' + user.lastName())\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-edit\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n\n <ax-button-item\n [text]=\"('@conversation:comments.actions.delete.title' | translate | async) ?? ''\"\n color=\"danger\"\n (click)=\"deleteComment(comment.id!)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-comment-menu-options>\n <ax-content [innerHTML]=\"sanitizeHtml(comment.message.content)\"></ax-content>\n <ax-comment-like (click)=\"toggleLike(comment)\" [like]=\"isLikedByUser(comment)\">\n {{ getReactionsCount(comment) }}\n </ax-comment-like>\n <ax-comment-reply-text\n (click)=\"replyMessage(comment, undefined, user.firstName() + ' ' + user.lastName())\"\n ></ax-comment-reply-text>\n @for (reply of comment.replies; track reply.id) {\n <ax-comment-item [id]=\"reply.id\" [class.highlighted]=\"highlightedCommentId() === reply.id\" [@fadeIn]>\n <axp-user-avatar\n #user2\n [size]=\"40\"\n [userId]=\"reply.author.id\"\n ngProjectAs=\"'ax-avatar'\"\n ></axp-user-avatar>\n <ax-title>{{ user2.firstName() + ' ' + user2.lastName() }}</ax-title>\n <ax-comment-date>{{ reply.auditInfo?.created?.at! | format: 'timeleft' | async }} </ax-comment-date>\n <ax-comment-menu-options>\n <ax-button class=\"ax-sm\" look=\"blank\" color=\"neutral\">\n <ax-icon icon=\"ax-icon ax-icon-solid ax-icon-more-horizontal\"></ax-icon>\n </ax-button>\n\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item\n [text]=\"('@conversation:comments.actions.edit.title' | translate | async) ?? ''\"\n color=\"neutral\"\n (click)=\"editMessage(comment, reply, user2.firstName() + ' ' + user2.lastName())\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-edit\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item\n [text]=\"('@conversation:comments.actions.delete.title' | translate | async) ?? ''\"\n color=\"danger\"\n (click)=\"deleteComment(reply.id!)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-comment-menu-options>\n <ax-content [innerHTML]=\"sanitizeHtml(reply.message.content)\"></ax-content>\n <ax-comment-like (click)=\"toggleLike(reply)\" [like]=\"isLikedByUser(reply)\">\n {{ getReactionsCount(reply) }}\n </ax-comment-like>\n <ax-comment-reply-text\n (click)=\"replyMessage(comment, reply, user2.firstName() + ' ' + user2.lastName())\"\n ></ax-comment-reply-text>\n </ax-comment-item>\n }\n </ax-comment-item>\n }\n </ax-comment-view>\n } @else {\n <div>\n <div class=\"ax-flex ax-flex-col ax-gap-4 ax-justify-center ax-items-center ax-p-10\">\n <svg\n class=\"ax-mx-auto\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"154\"\n height=\"161\"\n viewBox=\"0 0 154 161\"\n fill=\"none\"\n >\n <path\n d=\"M0.0616455 84.4268C0.0616455 42.0213 34.435 7.83765 76.6507 7.83765C118.803 7.83765 153.224 42.0055 153.224 84.4268C153.224 102.42 147.026 118.974 136.622 132.034C122.282 150.138 100.367 161 76.6507 161C52.7759 161 30.9882 150.059 16.6633 132.034C6.25961 118.974 0.0616455 102.42 0.0616455 84.4268Z\"\n fill=\"#EEF2FF\"\n />\n <path\n d=\"M96.8189 0.632498L96.8189 0.632384L96.8083 0.630954C96.2034 0.549581 95.5931 0.5 94.9787 0.5H29.338C22.7112 0.5 17.3394 5.84455 17.3394 12.4473V142.715C17.3394 149.318 22.7112 154.662 29.338 154.662H123.948C130.591 154.662 135.946 149.317 135.946 142.715V38.9309C135.946 38.0244 135.847 37.1334 135.648 36.2586L135.648 36.2584C135.117 33.9309 133.874 31.7686 132.066 30.1333C132.066 30.1331 132.065 30.1329 132.065 30.1327L103.068 3.65203C103.068 3.6519 103.067 3.65177 103.067 3.65164C101.311 2.03526 99.1396 0.995552 96.8189 0.632498Z\"\n fill=\"white\"\n stroke=\"#E5E7EB\"\n />\n <ellipse cx=\"80.0618\" cy=\"81\" rx=\"28.0342\" ry=\"28.0342\" fill=\"#EEF2FF\" />\n <path\n d=\"M99.2393 61.3061L99.2391 61.3058C88.498 50.5808 71.1092 50.5804 60.3835 61.3061C49.6423 72.0316 49.6422 89.4361 60.3832 100.162C71.109 110.903 88.4982 110.903 99.2393 100.162C109.965 89.4363 109.965 72.0317 99.2393 61.3061ZM105.863 54.6832C120.249 69.0695 120.249 92.3985 105.863 106.785C91.4605 121.171 68.1468 121.171 53.7446 106.785C39.3582 92.3987 39.3582 69.0693 53.7446 54.683C68.1468 40.2965 91.4605 40.2966 105.863 54.6832Z\"\n stroke=\"#E5E7EB\"\n />\n <path\n d=\"M110.782 119.267L102.016 110.492C104.888 108.267 107.476 105.651 109.564 102.955L118.329 111.729L110.782 119.267Z\"\n stroke=\"#E5E7EB\"\n />\n <path\n d=\"M139.122 125.781L139.122 125.78L123.313 109.988C123.313 109.987 123.313 109.987 123.312 109.986C121.996 108.653 119.849 108.657 118.521 109.985L118.871 110.335L118.521 109.985L109.047 119.459C107.731 120.775 107.735 122.918 109.044 124.247L109.047 124.249L124.858 140.06C128.789 143.992 135.191 143.992 139.122 140.06C143.069 136.113 143.069 129.728 139.122 125.781Z\"\n fill=\"#A5B4FC\"\n stroke=\"#818CF8\"\n />\n <path\n d=\"M83.185 87.2285C82.5387 87.2285 82.0027 86.6926 82.0027 86.0305C82.0027 83.3821 77.9987 83.3821 77.9987 86.0305C77.9987 86.6926 77.4627 87.2285 76.8006 87.2285C76.1543 87.2285 75.6183 86.6926 75.6183 86.0305C75.6183 80.2294 84.3831 80.2451 84.3831 86.0305C84.3831 86.6926 83.8471 87.2285 83.185 87.2285Z\"\n fill=\"#4F46E5\"\n />\n <path\n d=\"M93.3528 77.0926H88.403C87.7409 77.0926 87.2049 76.5567 87.2049 75.8946C87.2049 75.2483 87.7409 74.7123 88.403 74.7123H93.3528C94.0149 74.7123 94.5509 75.2483 94.5509 75.8946C94.5509 76.5567 94.0149 77.0926 93.3528 77.0926Z\"\n fill=\"#4F46E5\"\n />\n <path\n d=\"M71.5987 77.0925H66.6488C65.9867 77.0925 65.4507 76.5565 65.4507 75.8945C65.4507 75.2481 65.9867 74.7122 66.6488 74.7122H71.5987C72.245 74.7122 72.781 75.2481 72.781 75.8945C72.781 76.5565 72.245 77.0925 71.5987 77.0925Z\"\n fill=\"#4F46E5\"\n />\n <rect x=\"38.3522\" y=\"21.5128\" width=\"41.0256\" height=\"2.73504\" rx=\"1.36752\" fill=\"#4F46E5\" />\n <rect x=\"38.3522\" y=\"133.65\" width=\"54.7009\" height=\"5.47009\" rx=\"2.73504\" fill=\"#A5B4FC\" />\n <rect x=\"38.3522\" y=\"29.7179\" width=\"13.6752\" height=\"2.73504\" rx=\"1.36752\" fill=\"#4F46E5\" />\n <circle cx=\"56.13\" cy=\"31.0854\" r=\"1.36752\" fill=\"#4F46E5\" />\n <circle cx=\"61.6001\" cy=\"31.0854\" r=\"1.36752\" fill=\"#4F46E5\" />\n <circle cx=\"67.0702\" cy=\"31.0854\" r=\"1.36752\" fill=\"#4F46E5\" />\n </svg>\n <div>\n <h2 class=\"ax-text-center ax-text-neutral-600 ax-font-semibold ax-leading-loose ax-pb-2\">\n {{ '@conversation:comments.components.comment.empty-states.no-comments.title' | translate | async }}\n </h2>\n </div>\n </div>\n </div>\n }\n </ax-comment-container>\n <div class=\"ax-flex ax-flex-col\">\n @if (isReplyingMode() || isEditingMode()) {\n <div\n class=\"ax-flex ax-justify-between ax-rounded-b-none ax-border ax-border-surface ax-border-b-0 ax-rounded-lg ax-px-6 ax-py-3 ax-w-full ax-items-center ax-overflow-hidden ax-text-sm ax-leading-none\"\n >\n <div (click)=\"scrollMain()\" class=\"ax-flex ax-justify-start ax-items-center ax-cursor-pointer\">\n <i\n [class]=\"isReplyingMode() ? 'fa-reply' : 'fa-pen'\"\n class=\"fa-light ax-text-primary-500 dark:ax-text-primary-300 ax-text-2xl ax-me-4\"\n ></i>\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-justify-between ax-align-middle ax-leading-4 ax-overflow-hidden\">\n <p class=\"ax-text-primary-500 dark:ax-text-primary-300\">\n @if (isReplyingMode()) {\n {{ '@conversation:comments.actions.reply-to' | translate | async }}\n <span class=\"ax-font-bold\">{{ activeReplyComment()?.userName }}</span>\n } @else {\n {{ '@conversation:comments.actions.edit-message' | translate | async }}\n }\n </p>\n <div\n class=\"ax-truncate\"\n [innerHTML]=\"\n isReplyingMode()\n ? sanitizeHtml(activeReplyComment()?.message?.content ?? '')\n : sanitizeHtml(activeEditComment()?.message?.content ?? '')\n \"\n ></div>\n </div>\n </div>\n <div><i (click)=\"resetReplyEditState()\" class=\"fa-light ax-text-2xl fa-xmark ax-cursor-pointer\"></i></div>\n </div>\n }\n <ax-wysiwyg-container #w [look]=\"wysiwygOptions().look\" [(ngModel)]=\"commentContent\">\n <ax-wysiwyg-view class=\"ax-min-h-28\"></ax-wysiwyg-view>\n <ax-wysiwyg-toolbar>\n <ax-prefix>\n <ax-wysiwyg-history></ax-wysiwyg-history>\n <ax-wysiwyg-font-style></ax-wysiwyg-font-style>\n <ax-wysiwyg-colors></ax-wysiwyg-colors>\n <ax-wysiwyg-list></ax-wysiwyg-list>\n <ax-wysiwyg-alignment></ax-wysiwyg-alignment>\n </ax-prefix>\n <ax-suffix>\n <ax-button\n [disabled]=\"hasCooldown() || !commentContent()\"\n (click)=\"submitComment()\"\n [text]=\"'@conversation:comments.actions.send.title' | translate | async\"\n >\n @if (isSubmitting()) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n </ax-suffix>\n </ax-wysiwyg-toolbar>\n </ax-wysiwyg-container>\n </div>\n</div>\n","import { AXPEntityAction, AXPEntityCommandScope, AXPEntityMasterSingleLayoutView } from '@acorex/platform/common';\nimport {\n AXPEntityActionPlugin,\n cloneLayoutArrays,\n ensureLayoutPropertyView,\n ensureLayoutSection,\n ensureListActions,\n actionExists,\n resolveEntityPluginDetailPageOrder,\n} from '@acorex/platform/layout/entity';\n\n/** How to show comments in entity single view: as a section (default) or as a separate page. */\nexport type CommentsDisplayMode = 'section' | 'page';\n\n/** Component key used when display is 'page'. Register a page component with this key via AXP_PAGE_COMPONENT_PROVIDER. */\nexport const COMMENTS_PAGE_COMPONENT_KEY = 'entity-comments-page';\n\nexport type CommentsPluginOptions = {\n /** Where to show comments: section (inline) or page (separate tab). Default 'section' */\n display?: CommentsDisplayMode;\n /** Icon for the comments page (when display is 'page'). Default 'fa-light fa-comments' */\n icon?: string;\n /** Title override for comments section/page. Default '@conversation:terms.common.comments' */\n title?: string;\n};\n\n/**\n * Comments plugin.\n * - When display is 'section' (default), adds a section to the single layout with the comment widget.\n * - When display is 'page', adds a page to entity.pages with COMMENTS_PAGE_COMPONENT_KEY.\n * - Always adds a list action to open the comment popup.\n */\nexport const commentsPlugin: AXPEntityActionPlugin = {\n name: 'comments',\n order: 50,\n apply: (ctx, options?: CommentsPluginOptions) => {\n const opts = options ?? {};\n const displayMode: CommentsDisplayMode = opts.display ?? 'section';\n const displayTitle = opts.title?.trim() || '@conversation:terms.common.comments';\n\n //#region ---- Group & Property ----\n\n const groups = ctx.groups.list() ?? [];\n if (!groups.some((g: any) => g.id === 'comments')) {\n ctx.groups.add({ id: 'comments', title: displayTitle } as any);\n }\n\n const props = ctx.properties.list();\n if (!props.some((p: any) => p.name === 'comments')) {\n ctx.properties.add({\n name: 'comments',\n title: displayTitle,\n groupId: 'comments',\n schema: {\n dataType: 'object',\n interface: {\n type: 'comment',\n options: {\n refrenceType: `${ctx.entity.module}.${ctx.entity.name}`,\n refrenceId: '{{ context.eval(\"id\") }}',\n subject: '{{ context.eval(\"title\") }}',\n },\n },\n },\n } as any);\n }\n\n //#endregion\n\n //#region ---- Display Mode ----\n\n if (displayMode === 'section') {\n ctx.interfaces.master.single.update((single) => {\n const next: any = cloneLayoutArrays(\n (single ?? { title: ctx.entity.title, sections: [], properties: [] }) as AXPEntityMasterSingleLayoutView,\n );\n ensureLayoutSection(next, { id: 'comments', title: displayTitle, order: 100 } as any);\n ensureLayoutPropertyView(next, {\n name: 'comments',\n layout: {\n label: { visible: false },\n positions: { lg: { colSpan: 12, order: 7 } },\n },\n } as any);\n return next;\n });\n } else {\n ctx.entity.pages ??= [];\n const pageExists = ctx.entity.pages.some((p: any) => p.componentKey === COMMENTS_PAGE_COMPONENT_KEY);\n const pageOrder = resolveEntityPluginDetailPageOrder(\n { relatedEntities: ctx.entity.relatedEntities, pages: ctx.entity.pages },\n 'comments',\n {\n componentKey: COMMENTS_PAGE_COMPONENT_KEY,\n skipPage: pageExists ? { componentKey: COMMENTS_PAGE_COMPONENT_KEY } : undefined,\n },\n );\n const page = {\n componentKey: COMMENTS_PAGE_COMPONENT_KEY,\n title: displayTitle,\n icon: opts.icon ?? 'fa-light fa-comments',\n layout: { order: pageOrder },\n } as any;\n if (!pageExists) {\n ctx.entity.pages.push(page);\n } else {\n const pages = ctx.entity.pages as any[];\n const index = pages.findIndex((p) => p.componentKey === COMMENTS_PAGE_COMPONENT_KEY);\n if (index >= 0) {\n pages[index] = { ...pages[index], ...page };\n }\n }\n }\n\n //#endregion\n\n //#region ---- List Actions ----\n\n ensureListActions(ctx);\n ctx.interfaces.update((i) => {\n const actions = (i as any).master.list.actions as AXPEntityAction[];\n const cmdName = 'show-comment-popup';\n if (!actionExists(actions, cmdName)) {\n actions.push({\n title: '@conversation:actions.show-comment-popup',\n command: {\n name: cmdName,\n options: {\n refId: '{{ context.eval(\"id\") }}',\n refType: `${ctx.entity.module}.${ctx.entity.name}`,\n subject: '{{ context.eval(\"title\") }}',\n },\n },\n priority: 'secondary',\n type: 'comments',\n separated: true,\n scope: AXPEntityCommandScope.Individual,\n });\n }\n return i as any;\n });\n\n //#endregion\n },\n};\n","import { CommonModule } from '@angular/common';\nimport { Component, ViewEncapsulation, input } from '@angular/core';\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXMCommentComponent } from '../comment.component';\n\n@Component({\n selector: 'axm-comment-popup',\n standalone: true,\n imports: [\n // Angular\n CommonModule,\n // ACoreX\n AXDecoratorModule,\n AXButtonModule,\n AXTranslationModule,\n // Comment\n AXMCommentComponent,\n ],\n templateUrl: './comment-popup.component.html',\n encapsulation: ViewEncapsulation.None,\n providers: [],\n})\nexport class AXMCommentPopupComponent extends AXBasePageComponent {\n refrenceType = input.required<string>();\n refrenceId = input.required<string>();\n subject = input.required<string>();\n}\n","<ax-content>\n <div class=\"ax-p-6 ax-min-h-[30vh] ax-overflow-y-auto\">\n <axm-comment [refrenceType]=\"refrenceType()\" [refrenceId]=\"refrenceId()\" [subject]=\"subject()\"></axm-comment>\n </div>\n</ax-content>\n<ax-footer>\n <ax-prefix></ax-prefix>\n <ax-suffix>\n <ax-button\n [text]=\"'@general:actions.close.title' | translate | async\"\n look=\"solid\"\n color=\"primary\"\n (onClick)=\"close()\"\n >\n </ax-button>\n </ax-suffix>\n</ax-footer>\n","import { AXPEntityReference } from '@acorex/platform/core';\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed } from '@angular/core';\nimport { AXMCommentComponent } from '..';\n\n@Component({\n template: `\n <axm-comment [refrenceId]=\"refrenceId()\" [refrenceType]=\"refrenceType()\" [subject]=\"subject()\"></axm-comment>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXMCommentComponent],\n})\nexport class AXMCommentWidgetViewComponent extends AXPValueWidgetComponent<AXPEntityReference & { subject: string }> {\n protected refrenceType = computed(() => this.options()?.['refrenceType']);\n protected refrenceId = computed(() => this.options()?.['refrenceId']);\n protected subject = computed(() => this.options()?.['subject']);\n}\n","import { AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex/platform/layout/widget-core';\n\nexport const AXPCommentWidget: AXPWidgetConfig = {\n name: 'comment',\n title: '@conversation:comments.widget.title',\n description: '@conversation:comments.widget.description',\n type: 'view',\n categories: [],\n groups: [AXPWidgetGroupEnum.EntityWidget],\n icon: 'fa-light fa-comments',\n properties: [],\n components: {\n view: {\n component: () => import('./comment-widget-view.component').then((c) => c.AXMCommentWidgetViewComponent),\n },\n edit: {\n component: () => import('./comment-widget-view.component').then((c) => c.AXMCommentWidgetViewComponent),\n },\n },\n};\n","import { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPWorkflow, AXPWorkflowAction, AXPWorkflowContext } from '@acorex/platform/workflow';\nimport { inject, Injectable, signal } from '@angular/core';\n\n@Injectable()\nexport class AXMCommentPopupStartAction extends AXPWorkflowAction {\n private popupService = inject(AXPopupService);\n private translate = inject(AXTranslationService);\n\n override async execute(context: AXPWorkflowContext): Promise<void> {\n const comp = (await import('../popup/comment-popup.component')).AXMCommentPopupComponent;\n\n this.popupService.open(comp, {\n title: await this.translate.translateAsync('@conversation:comments.feature.title'),\n size: 'lg',\n data: {\n refrenceType: signal(context.getVariable('options.refType')),\n refrenceId: signal(context.getVariable('options.refId')),\n subject: signal(context.getVariable('options.subject')),\n },\n });\n }\n}\n\nexport const AXMCommentPopupWorkflow: AXPWorkflow = {\n startStepId: 'start',\n steps: {\n start: {\n action: 'show-comment-popup-action',\n },\n },\n};\n","import { AXPTaskBadgeProvider } from '@acorex/platform/layout/components';\nimport { Injectable, inject, signal, effect } from '@angular/core';\nimport { AXMChatManagementService, AXMChatRealtimeService } from './features';\nimport { merge, auditTime } from 'rxjs';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\n@Injectable()\nexport class AXMChatBadgeProviderSimple implements AXPTaskBadgeProvider {\n private readonly chatService = inject(AXMChatManagementService);\n private readonly realtime = inject(AXMChatRealtimeService);\n\n readonly key = 'badge-chat';\n readonly count = signal(0);\n\n private readonly _events = toSignal(\n merge(this.realtime.room$, this.realtime.message$).pipe(auditTime(150)),\n {\n initialValue: null,\n },\n );\n\n constructor() {\n // Initial load\n this.refresh();\n // Refresh on any room/message event\n effect(async () => {\n // track events\n this._events();\n try {\n await this.refresh();\n } catch (err) {\n console.error('AXMChatBadgeProviderSimple: refresh failed', err);\n }\n });\n }\n\n private async refresh(): Promise<void> {\n const response = await this.chatService.listRooms();\n this.count.set(response.items.filter((i) => i.unreadCount > 0).length);\n }\n}\n","//#region ---- Imports ----\n\nimport type { AXConversation, AXMessage } from '@acorex/components/conversation2';\nimport type {\n AXPAiChatMessage,\n AXPAiDelegatedAgentTranscriptEntry,\n AXPAiEngineLastProviderPayload,\n AXPAiEngineRunResult,\n AXPAiEngineUsageTotals,\n} from '@acorex/modules/ai-management';\nimport { axpAiChatTextMessage } from '@acorex/modules/ai-management';\n\nimport { axmReadAssistAiTranscript, axmReadAssistAiTranscriptRaw } from './assist-bot-transcript.util';\n\n//#endregion\n\n//#region ---- Types ----\n\n/** One conversation turn exported as an engine run result (user or assist). */\nexport interface AXMAssistConversationDebugTurn {\n messageId: string;\n timestamp: string;\n result: AXPAiEngineRunResult;\n}\n\n/** Full assist conversation debug export (chronological turns). */\nexport interface AXMAssistConversationDebugExport {\n exportedAt: string;\n conversation: {\n id: string;\n title?: string;\n type?: string;\n metadata?: unknown;\n participants?: unknown;\n };\n turns: AXMAssistConversationDebugTurn[];\n}\n\n//#endregion\n\n//#region ---- Message classification ----\n\n/** True when the message carries assist / AI debug payload worth exporting. */\nexport function axmIsAssistDebugMessage(message: AXMessage | null | undefined): boolean {\n if (!message) {\n return false;\n }\n if (message.type === 'assist-response') {\n return true;\n }\n const meta = message.metadata as Record<string, unknown> | undefined;\n if (meta?.['isAssistResponse'] === true) {\n return true;\n }\n const transcript = axmReadAssistAiTranscript(meta);\n return transcript != null && transcript.length > 0;\n}\n\n//#endregion\n\n//#region ---- Serialization ----\n\nfunction toIsoTimestamp(value: AXMessage['timestamp']): string {\n if (value instanceof Date) {\n return value.toISOString();\n }\n if (typeof value === 'string' || typeof value === 'number') {\n const parsed = new Date(value);\n if (!Number.isNaN(parsed.getTime())) {\n return parsed.toISOString();\n }\n }\n return String(value ?? '');\n}\n\nfunction readRecord(meta: Record<string, unknown> | undefined, key: string): unknown {\n return meta?.[key];\n}\n\n/**\n * Reconstructs {@link AXPAiEngineRunResult} from assist message metadata\n * (same shape returned by {@link AXPAiEngine.run}).\n */\nexport function axmBuildAssistEngineRunResult(message: AXMessage): AXPAiEngineRunResult {\n const meta =\n typeof message.metadata === 'object' && message.metadata != null\n ? (message.metadata as Record<string, unknown>)\n : undefined;\n\n const result: AXPAiEngineRunResult = {\n messages: axmReadAssistAiTranscriptRaw(meta),\n };\n\n const usage = readRecord(meta, 'assistRunUsageTotals');\n if (usage != null && typeof usage === 'object') {\n result.usageTotals = usage as AXPAiEngineUsageTotals;\n }\n\n const lastProvider = readRecord(meta, 'assistRunLastProviderResult');\n if (lastProvider != null && typeof lastProvider === 'object') {\n result.lastProviderResult = lastProvider as AXPAiEngineLastProviderPayload;\n }\n\n const delegated = readRecord(meta, 'assistRunDelegatedTranscriptsByCallId');\n if (delegated != null && typeof delegated === 'object' && !Array.isArray(delegated)) {\n result.delegatedTranscriptsByCallId = delegated as Record<string, AXPAiDelegatedAgentTranscriptEntry>;\n }\n\n return result;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction extractUserChatText(message: AXMessage): string {\n const payload = message.payload;\n if (!isRecord(payload)) {\n return '';\n }\n const text = payload['text'];\n return typeof text === 'string' ? text.trim() : '';\n}\n\n/** User chat line as a minimal engine run result (`messages` only). */\nexport function axmBuildUserTurnEngineRunResult(message: AXMessage): AXPAiEngineRunResult {\n const text = extractUserChatText(message);\n return {\n messages: text ? [axpAiChatTextMessage('user', text)] : [],\n };\n}\n\n/**\n * Pretty-printed JSON for clipboard export (single assist run — {@link AXPAiEngineRunResult}).\n */\nexport function axmFormatAssistMessageDebugText(message: AXMessage): string {\n const run = axmIsAssistDebugMessage(message)\n ? axmBuildAssistEngineRunResult(message)\n : axmBuildUserTurnEngineRunResult(message);\n return JSON.stringify(run, null, 2);\n}\n\n/**\n * Pretty-printed JSON for clipboard export (conversation turns as engine run results).\n */\nexport function axmFormatAssistConversationDebugText(\n conversation: AXConversation | { id?: string; title?: string; type?: string; metadata?: unknown; participants?: unknown },\n messages: AXMessage[],\n): string {\n const chronological = [...messages].sort(\n (a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime(),\n );\n\n const turns: AXMAssistConversationDebugTurn[] = chronological.map((message) => ({\n messageId: message.id,\n timestamp: toIsoTimestamp(message.timestamp),\n result: axmIsAssistDebugMessage(message)\n ? axmBuildAssistEngineRunResult(message)\n : axmBuildUserTurnEngineRunResult(message),\n }));\n\n const snapshot: AXMAssistConversationDebugExport = {\n exportedAt: new Date().toISOString(),\n conversation: {\n id: conversation.id ?? '',\n title: conversation.title,\n type: conversation.type,\n metadata: conversation.metadata,\n participants: conversation.participants,\n },\n turns,\n };\n\n return JSON.stringify(snapshot, null, 2);\n}\n\n/** Safe fragment for debug export filenames. */\nexport function axmSanitizeDebugFilenamePart(id: string): string {\n const sanitized = id.replace(/[^\\w.-]+/g, '_').slice(0, 80).trim();\n return sanitized.length > 0 ? sanitized : 'debug';\n}\n\n/** Triggers a browser download of pretty-printed JSON debug export. */\nexport function axmDownloadDebugJson(filename: string, text: string): void {\n if (!text.trim() || typeof document === 'undefined') {\n return;\n }\n const blob = new Blob([text], { type: 'application/json;charset=utf-8' });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = filename.endsWith('.json') ? filename : `${filename}.json`;\n anchor.rel = 'noopener';\n anchor.click();\n URL.revokeObjectURL(url);\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport {\n AXMessageApi,\n type AXConversation,\n type AXConversationItemAction,\n type AXMessage,\n type AXMessageAction,\n type AXPagination,\n} from '@acorex/components/conversation2';\nimport { inject } from '@angular/core';\n\nimport {\n axmAssistChatDebugModeState,\n AXMAssistChatDebugModeService,\n} from './assist-chat-debug-mode.service';\nimport {\n axmDownloadDebugJson,\n axmFormatAssistConversationDebugText,\n axmFormatAssistMessageDebugText,\n axmIsAssistDebugMessage,\n axmSanitizeDebugFilenamePart,\n} from '../utils/assist-debug-information.util';\nimport { axmConversationHasAiChat } from '../utils/chat-ai-target.util';\n\n//#endregion\n\n//#region ---- Constants ----\n\nconst DOWNLOAD_DEBUG_ACTION_ID = 'download-debug-information';\n\nconst DOWNLOAD_DEBUG_LABEL = '@conversation:chat.actions.download-debug-information';\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction isAssistConversation(conversation: { metadata?: Record<string, unknown> } | null | undefined): boolean {\n return axmConversationHasAiChat(conversation ?? undefined);\n}\n\nfunction isDebugExportVisible(): boolean {\n return axmAssistChatDebugModeState.resolved && axmAssistChatDebugModeState.enabled;\n}\n\nfunction isAssistMessageDebugExportVisible(message: AXMessage): boolean {\n return isDebugExportVisible() && axmIsAssistDebugMessage(message);\n}\n\nfunction isAssistConversationDebugExportVisible(context: {\n conversation?: { id?: string; metadata?: Record<string, unknown> };\n}): boolean {\n return (\n isDebugExportVisible() &&\n isAssistConversation(context?.conversation) &&\n !!context?.conversation?.id?.trim()\n );\n}\n\nasync function loadAllConversationMessages(messageApi: AXMessageApi, conversationId: string): Promise<AXMessage[]> {\n const pageSize = 100;\n let page = 0;\n const collected: AXMessage[] = [];\n\n while (true) {\n const pagination: AXPagination = { page, pageSize };\n const result = await messageApi.getMessages(conversationId, pagination);\n collected.push(...result.items);\n if (!result.hasMore) {\n break;\n }\n page += 1;\n }\n\n return collected;\n}\n\n//#endregion\n\n//#region ---- Message action ----\n\nexport const AXM_DOWNLOAD_ASSIST_MESSAGE_DEBUG_ACTION: AXMessageAction = {\n id: DOWNLOAD_DEBUG_ACTION_ID,\n label: DOWNLOAD_DEBUG_LABEL,\n icon: 'fa-light fa-download',\n priority: 94,\n visible: (message: AXMessage) => isAssistMessageDebugExportVisible(message),\n enabled: (message: AXMessage) => isAssistMessageDebugExportVisible(message),\n handler: async (context: { message: AXMessage }) => {\n const debugMode = inject(AXMAssistChatDebugModeService);\n if (!debugMode.isDebugModeActive()) {\n return;\n }\n const text = axmFormatAssistMessageDebugText(context.message);\n const filename = `assist-debug-message-${axmSanitizeDebugFilenamePart(context.message.id)}.json`;\n axmDownloadDebugJson(filename, text);\n },\n};\n\n//#endregion\n\n//#region ---- Conversation item action ----\n\nexport const AXM_DOWNLOAD_ASSIST_CONVERSATION_DEBUG_ACTION: AXConversationItemAction = {\n id: DOWNLOAD_DEBUG_ACTION_ID,\n label: DOWNLOAD_DEBUG_LABEL,\n icon: 'fa-light fa-download',\n priority: 105,\n visible: (context) => isAssistConversationDebugExportVisible(context),\n enabled: true,\n handler: async (context: {\n conversation?: AXConversation;\n messageApi?: AXMessageApi;\n }) => {\n const debugMode = inject(AXMAssistChatDebugModeService);\n const messageApi = context.messageApi ?? inject(AXMessageApi);\n const conversation = context.conversation;\n const conversationId = conversation?.id?.trim();\n\n if (!debugMode.isDebugModeActive() || !conversationId || !conversation) {\n return;\n }\n\n const messages = await loadAllConversationMessages(messageApi, conversationId);\n const text = axmFormatAssistConversationDebugText(conversation, messages);\n const filename = `assist-debug-conversation-${axmSanitizeDebugFilenamePart(conversationId)}.json`;\n axmDownloadDebugJson(filename, text);\n },\n};\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXConversation, AXConversationTab } from '@acorex/components/conversation2';\n\n//#endregion\n\n//#region ---- Helpers ----\n\n/** True when the conversation is an assist / AI bot chat. */\nexport function axmIsAssistBotConversation(conversation: AXConversation): boolean {\n if (conversation.type === 'bot') {\n return true;\n }\n const fromMeta = conversation.metadata?.['assistId'];\n if (typeof fromMeta === 'string' && fromMeta.trim().length > 0) {\n return true;\n }\n for (const participant of conversation.participants ?? []) {\n if (typeof participant.id === 'string' && participant.id.startsWith('assist-')) {\n return true;\n }\n const fromParticipant = participant.metadata?.['assistId'];\n if (typeof fromParticipant === 'string' && fromParticipant.trim().length > 0) {\n return true;\n }\n }\n return false;\n}\n\n//#endregion\n\n//#region ---- Bot tab ----\n\n/** Sidebar tab for AI assist conversations (`type: 'bot'` or assist metadata). */\nexport const AXM_CONVERSATION_TAB_BOT: AXConversationTab = {\n id: 'bot',\n label: '@conversation:chat.tabs.bot',\n icon: 'fa-light fa-robot',\n priority: 30,\n filter: (conversations: AXConversation[]) =>\n conversations.filter((conversation) => axmIsAssistBotConversation(conversation)),\n};\n\n//#endregion\n","//#region ---- Imports ----\n\nimport {\n AXConversationService,\n type AXConversation,\n type AXConversationItemAction,\n} from '@acorex/components/conversation2';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n type AXPDialogRef,\n AXPLayoutBuilderService,\n type IDialogBuilder,\n type IFlexContainerBuilder,\n type IFormFieldBuilder,\n type IActionBuilder,\n} from '@acorex/platform/layout/builder';\nimport { inject } from '@angular/core';\n\nimport { axmIsAssistBotConversation } from '../tabs/chat-conversation-tabs';\n\n//#endregion\n\n//#region ---- Rename handler ----\n\nasync function renameAssistConversation(\n conversation: AXConversation,\n services: {\n layoutBuilder: AXPLayoutBuilderService;\n conversationService: AXConversationService;\n translationService: AXTranslationService;\n },\n): Promise<void> {\n const conversationId = conversation.id?.trim();\n if (!conversationId) {\n return;\n }\n\n const [dialogTitle, cancelLabel, saveLabel, placeholder] = await Promise.all([\n services.translationService.translateAsync('@conversation:chat.assist-conversation.rename.title'),\n services.translationService.translateAsync('@conversation:comments.actions.cancel.title'),\n services.translationService.translateAsync('@conversation:chat.assist-conversation.rename.actions.save'),\n services.translationService.translateAsync('@conversation:chat.assist-conversation.rename.placeholder'),\n ]);\n\n const nextTitle = await services.layoutBuilder\n .create()\n .dialog<string | false>((dialog: IDialogBuilder<string | false>) => {\n dialog\n .setTitle(dialogTitle ?? 'Rename Chat')\n .setSize('sm')\n .setCloseButton(true)\n .setContext({ title: conversation.title ?? '' })\n .content((flex: IFlexContainerBuilder) => {\n flex.setDirection('column').setGap('10px');\n flex.formField('', (field: IFormFieldBuilder) => {\n field.path('title');\n field.textBox({ placeholder: placeholder ?? '' });\n });\n })\n .setActions((actions: IActionBuilder) => {\n actions.cancel(cancelLabel ?? 'Cancel').submit(saveLabel ?? 'Save');\n })\n .onAction(async (dialogRef: AXPDialogRef) => {\n if (dialogRef.action() === 'cancel') {\n return false;\n }\n const title = String((dialogRef.context() as { title?: string }).title ?? '').trim();\n if (!title) {\n return false;\n }\n return title;\n });\n })\n .show();\n\n if (typeof nextTitle !== 'string' || !nextTitle || nextTitle === (conversation.title ?? '').trim()) {\n return;\n }\n\n await services.conversationService.updateConversation(conversationId, {\n title: nextTitle,\n metadata: {\n ...(conversation.metadata ?? {}),\n isTitleCustomized: true,\n isTitleAutoGenerated: false,\n },\n });\n}\n\n//#endregion\n\n//#region ---- Action ----\n\nexport const AXM_RENAME_ASSIST_CONVERSATION_ACTION: AXConversationItemAction = {\n id: 'rename-assist-conversation',\n label: '@conversation:chat.assist-conversation.rename.action',\n icon: 'fa-light fa-pen',\n priority: 110,\n visible: (context) => axmIsAssistBotConversation(context.conversation),\n enabled: true,\n handler: async (context: { conversation?: AXConversation }) => {\n const conversation = context.conversation;\n if (!conversation) {\n return;\n }\n\n await renameAssistConversation(conversation, {\n layoutBuilder: inject(AXPLayoutBuilderService),\n conversationService: inject(AXConversationService),\n translationService: inject(AXTranslationService),\n });\n },\n};\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport {\n AXComposerService,\n AXConversationService,\n AXMessageApi,\n type AXComposerActionComponent,\n type AXConversation,\n type AXSendMessageCommand,\n} from '@acorex/components/conversation2';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport {\n AIMANAGEMENT_CHAT_TRANSCRIBE_SPEECH_COMMAND_KEY,\n AIMANAGEMENT_STRUCTURED_TEXT_COMPLETION_COMMAND_KEY,\n AXPAiChatToolRunContextService,\n AXPAiManagerService,\n AXPAiPlatformRuntimeContextBuilder,\n axpAiChatTextMessage,\n persistAiChatAttachmentImage,\n type AXPAiPlatformRuntimeContext,\n} from '@acorex/modules/ai-management';\nimport { AXPFileStorageService } from '@acorex/platform/common';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { CommonModule, isPlatformBrowser } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n PLATFORM_ID,\n computed,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\n\n//#endregion\n\n//#region ---- Constants ----\n\n/** Platform AiAgent catalog id for the speech-to-text specialist (see connectivity agent mock seed). */\nconst AXM_SPEECH_TO_TEXT_AGENT_ID = 'c0000001-0000-4000-8000-000000000006';\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axm-chat-voice-recorder',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, AXButtonModule, AXDecoratorModule, AXLabelModule, AXLoadingModule, AXTranslationModule],\n template: `\n <div class=\"voice-recorder\">\n <div class=\"recorder-header\">\n <h3 class=\"recorder-title\">{{ '@acorex:chat.voice-recorder.title' | translate | async }}</h3>\n <button\n type=\"button\"\n class=\"close-button\"\n (click)=\"cancel()\"\n [attr.aria-label]=\"'@acorex:chat.actions.close' | translate | async\"\n >\n <i class=\"fa-light fa-xmark\"></i>\n </button>\n </div>\n\n <div class=\"recorder-content\">\n @if (isTranscribing()) {\n <div class=\"recorder-transcribing\">\n <ax-loading></ax-loading>\n <span class=\"recorder-transcribing-text\">{{\n '@acorex:chat.voice-recorder.transcribing' | translate | async\n }}</span>\n </div>\n } @else if (!isRecording()) {\n <div class=\"recorder-idle\">\n <button type=\"button\" class=\"record-button\" (click)=\"startRecording()\">\n <i class=\"fa-light fa-microphone\"></i>\n </button>\n <!-- <button\n type=\"button\"\n class=\"speech-to-text-button\"\n [disabled]=\"isTranscribing()\"\n (click)=\"applySpeechToText()\"\n [attr.aria-label]=\"'@conversation:chat.speech-to-text.action' | translate | async\"\n >\n <i class=\"fa-light fa-waveform-lines\"></i>\n </button> -->\n <span class=\"recorder-hint\">{{ '@acorex:chat.voice-recorder.tap-to-start' | translate | async }}</span>\n </div>\n } @else {\n <div class=\"recorder-active\">\n <div class=\"recorder-info\">\n <div class=\"recording-indicator\">\n <span class=\"pulse-dot\"></span>\n <span class=\"recording-text\">{{ '@acorex:chat.voice-recorder.recording' | translate | async }}</span>\n </div>\n <div class=\"recording-time\">{{ formattedTime() }}</div>\n </div>\n\n <div class=\"recorder-actions\">\n <ax-button\n [text]=\"translation.translateSync('@acorex:chat.actions.cancel')\"\n [look]=\"'ghost'\"\n (onClick)=\"cancelRecording()\"\n >\n <ax-prefix>\n <ax-icon><i class=\"fa-light fa-xmark\"></i></ax-icon>\n </ax-prefix>\n </ax-button>\n\n <ax-button\n [text]=\"translation.translateSync('@acorex:chat.actions.send')\"\n color=\"'primary'\"\n (onClick)=\"stopRecording()\"\n >\n <ax-prefix>\n <ax-icon><i class=\"fa-light fa-paper-plane\"></i></ax-icon>\n </ax-prefix>\n </ax-button>\n\n <ax-button\n [text]=\"translation.translateSync('@acorex:chat.actions.speach-to-text')\"\n color=\"secondary\"\n [disabled]=\"isTranscribing()\"\n (onClick)=\"applySpeechToText()\"\n >\n <ax-prefix>\n <ax-icon><i class=\"fa-light fa-paper-plane\"></i></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </div>\n }\n </div>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n\n .voice-recorder {\n display: flex;\n flex-direction: column;\n width: 100%;\n background: rgb(var(--ax-sys-color-lightest-surface));\n }\n\n .recorder-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n border-bottom: 1px solid rgb(var(--ax-sys-color-border-light-surface));\n }\n\n .recorder-title {\n margin: 0;\n font-size: 0.875rem;\n font-weight: 600;\n }\n\n .close-button {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: none;\n background: transparent;\n border-radius: 50%;\n font-size: 1rem;\n cursor: pointer;\n transition: all 0.2s;\n opacity: 0.7;\n }\n\n .close-button:hover {\n background: rgb(var(--ax-sys-color-light-surface));\n opacity: 1;\n }\n\n .recorder-content {\n display: flex;\n align-items: center;\n width: 100%;\n padding: 1rem;\n }\n\n .recorder-idle {\n display: flex;\n align-items: center;\n gap: 1rem;\n width: 100%;\n }\n\n .record-button,\n .speech-to-text-button {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 56px;\n height: 56px;\n border: none;\n border-radius: 50%;\n font-size: 1.5rem;\n cursor: pointer;\n transition: all 0.2s;\n }\n\n .record-button {\n background: rgb(var(--ax-sys-color-primary-500));\n color: rgb(var(--ax-sys-color-on-primary-surface));\n box-shadow: 0 2px 8px rgba(var(--ax-sys-color-primary-500), 0.3);\n }\n\n .record-button:hover {\n background: rgb(var(--ax-sys-color-primary-600));\n }\n\n .speech-to-text-button {\n background: rgb(var(--ax-sys-color-secondary-surface));\n color: rgb(var(--ax-sys-color-on-secondary-surface));\n box-shadow: 0 2px 8px rgba(var(--ax-sys-color-secondary-500), 0.2);\n }\n\n .speech-to-text-button:hover:not(:disabled) {\n background: rgb(var(--ax-sys-color-secondary-600));\n }\n\n .speech-to-text-button:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n .recorder-hint {\n font-size: 0.875rem;\n opacity: 0.7;\n }\n\n .recorder-transcribing {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 0.75rem;\n width: 100%;\n padding: 0.5rem 0;\n }\n\n .recorder-transcribing-text {\n font-size: 0.875rem;\n font-weight: 500;\n color: rgb(var(--ax-sys-color-on-light-surface));\n }\n\n .recorder-active {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n gap: 1rem;\n }\n\n .recorder-info {\n display: flex;\n align-items: center;\n gap: 1.5rem;\n flex: 1;\n }\n\n .recording-indicator {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n }\n\n .pulse-dot {\n width: 12px;\n height: 12px;\n background: rgb(var(--ax-sys-color-danger-500));\n border-radius: 50%;\n animation: pulse 1.5s ease-in-out infinite;\n }\n\n @keyframes pulse {\n 0%,\n 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n }\n\n .recording-text {\n font-size: 0.875rem;\n font-weight: 600;\n color: rgb(var(--ax-sys-color-danger-500));\n }\n\n .recording-time {\n font-size: 1.25rem;\n font-weight: 600;\n font-variant-numeric: tabular-nums;\n min-width: 80px;\n }\n\n .recorder-actions {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n }\n\n @media (max-width: 768px) {\n .voice-recorder {\n padding: 0.75rem;\n }\n\n .record-button,\n .speech-to-text-button {\n width: 48px;\n height: 48px;\n font-size: 1.25rem;\n }\n\n .recorder-info {\n gap: 1rem;\n }\n\n .recording-time {\n font-size: 1.125rem;\n font-variant-numeric: tabular-nums;\n }\n\n .recorder-actions {\n gap: 0.5rem;\n }\n }\n\n @media (max-width: 480px) {\n .recorder-hint {\n font-size: 0.8125rem;\n }\n\n .recording-text {\n display: none;\n }\n\n .recording-time {\n font-size: 1rem;\n min-width: 60px;\n font-variant-numeric: tabular-nums;\n }\n }\n `,\n ],\n})\nexport class AXMChatVoiceRecorderComponent implements AXComposerActionComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly platformId = inject(PLATFORM_ID);\n private readonly destroyRef = inject(DestroyRef);\n private readonly composerService = inject(AXComposerService);\n private readonly conversationService = inject(AXConversationService);\n private readonly messageApi = inject(AXMessageApi);\n private readonly commandService = inject(AXPCommandService);\n private readonly chatToolRunContext = inject(AXPAiChatToolRunContextService);\n private readonly aiManager = inject(AXPAiManagerService, { optional: true });\n private readonly runtimeContextBuilder = inject(AXPAiPlatformRuntimeContextBuilder);\n private readonly fileStorage = inject(AXPFileStorageService);\n private readonly toastService = inject(AXToastService);\n readonly translation = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Inputs & Outputs ----\n\n readonly conversation = input.required<AXConversation>();\n readonly service = input<AXComposerService>();\n readonly recordingComplete = output<Blob>();\n readonly recordingCancelled = output<void>();\n\n //#endregion\n\n //#region ---- State ----\n\n readonly isRecording = signal(false);\n readonly isTranscribing = signal(false);\n readonly recordingDuration = signal(0);\n\n private recordingStartTime = 0;\n private timerInterval?: number;\n private mediaRecorder?: MediaRecorder;\n private audioChunks: Blob[] = [];\n private activeStream?: MediaStream;\n private cancelled = false;\n private suppressVoiceMessageSend = false;\n private pendingBlobResolve?: (blob: Blob | null) => void;\n\n //#endregion\n\n //#region ---- Computed ----\n\n readonly formattedTime = computed(() => {\n const duration = this.recordingDuration();\n const minutes = Math.floor(duration / 60);\n const seconds = duration % 60;\n return `${minutes}:${seconds.toString().padStart(2, '0')}`;\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n this.destroyRef.onDestroy(() => this.stopAndCleanup());\n }\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n async applySpeechToText(): Promise<void> {\n if (this.isTranscribing() || !this.isRecording()) {\n return;\n }\n\n try {\n const audioBlob = await this.waitForRecordingBlob();\n if (!audioBlob) {\n return;\n }\n\n this.isTranscribing.set(true);\n const text = await this.transcribeVoiceBlob(audioBlob);\n if (!text) {\n return;\n }\n\n this.composerService.draftText.set(text);\n this.composerService.hideComponent();\n setTimeout(() => {\n (document.querySelector('.composer-input-wrapper textarea') as HTMLTextAreaElement)?.focus();\n }, 100);\n } catch (error) {\n console.error('Speech-to-text failed:', error);\n this.composerService.hideComponent();\n const errTitle = await this.translation.translateAsync('@general:messages.error.title');\n const fallback = await this.translation.translateAsync(\n '@conversation:chat.speech-to-text.errors.transcription-failed',\n );\n const content = error instanceof Error ? error.message : fallback;\n await this.toastService.show({ color: 'danger', title: errTitle, content });\n } finally {\n this.isTranscribing.set(false);\n }\n }\n\n async startRecording(): Promise<void> {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n\n try {\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n this.activeStream = stream;\n this.mediaRecorder = new MediaRecorder(stream);\n this.audioChunks = [];\n this.cancelled = false;\n\n this.mediaRecorder.ondataavailable = (event) => {\n if (event.data.size > 0) {\n this.audioChunks.push(event.data);\n }\n };\n\n this.mediaRecorder.onstop = async () => {\n stream.getTracks().forEach((track) => track.stop());\n this.activeStream = undefined;\n\n const pendingResolve = this.pendingBlobResolve;\n this.pendingBlobResolve = undefined;\n\n if (this.cancelled) {\n this.cancelled = false;\n pendingResolve?.(null);\n return;\n }\n\n const audioBlob = new Blob(this.audioChunks, {\n type: this.mediaRecorder?.mimeType?.trim() || this.audioChunks[0]?.type?.trim() || 'audio/webm',\n });\n pendingResolve?.(audioBlob.size > 0 ? audioBlob : null);\n\n if (this.suppressVoiceMessageSend) {\n this.suppressVoiceMessageSend = false;\n return;\n }\n\n this.recordingComplete.emit(audioBlob);\n\n const conv = this.conversation();\n if (conv && this.audioChunks.length > 0) {\n await this.sendVoiceMessage(audioBlob, conv);\n }\n };\n\n this.mediaRecorder.start(250);\n this.isRecording.set(true);\n this.recordingStartTime = Date.now();\n this.recordingDuration.set(0);\n\n this.timerInterval = window.setInterval(() => {\n const elapsed = Math.floor((Date.now() - this.recordingStartTime) / 1000);\n this.recordingDuration.set(elapsed);\n }, 1000);\n } catch (error) {\n console.error('Failed to start recording:', error);\n }\n }\n\n stopRecording(): void {\n if (this.mediaRecorder && this.isRecording()) {\n this.mediaRecorder.stop();\n this.isRecording.set(false);\n this.clearTimer();\n this.composerService.hideComponent();\n }\n }\n\n cancelRecording(): void {\n if (this.mediaRecorder && this.isRecording()) {\n this.cancelled = true;\n this.mediaRecorder.stop();\n this.isRecording.set(false);\n this.clearTimer();\n this.audioChunks = [];\n this.recordingCancelled.emit();\n this.composerService.hideComponent();\n }\n }\n\n cancel(): void {\n if (this.isRecording()) {\n this.cancelRecording();\n } else {\n this.composerService.hideComponent();\n }\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private clearTimer(): void {\n if (this.timerInterval) {\n clearInterval(this.timerInterval);\n this.timerInterval = undefined;\n }\n }\n\n private waitForRecordingBlob(): Promise<Blob | null> {\n if (!this.mediaRecorder || !this.isRecording()) {\n return Promise.resolve(null);\n }\n\n return new Promise((resolve) => {\n this.pendingBlobResolve = resolve;\n this.suppressVoiceMessageSend = true;\n if (this.mediaRecorder!.state === 'recording') {\n this.mediaRecorder!.requestData();\n }\n this.mediaRecorder!.stop();\n this.isRecording.set(false);\n this.clearTimer();\n });\n }\n\n private extractAssistIdFromConversation(conversation: AXConversation): string | undefined {\n const raw = conversation.metadata?.['assistId'];\n if (typeof raw === 'string' && raw.trim()) {\n return raw.trim();\n }\n\n for (const participant of conversation.participants ?? []) {\n const participantAssistId = participant.metadata?.['assistId'];\n if (typeof participantAssistId === 'string' && participantAssistId.trim()) {\n return participantAssistId.trim();\n }\n }\n\n return undefined;\n }\n\n private async resolveAssistIdForTranscription(): Promise<string> {\n if (!this.aiManager) {\n throw new Error('AI manager service is not available.');\n }\n\n const conversationAssistId = this.extractAssistIdFromConversation(this.conversation());\n const assist = await this.aiManager.getAssistForChat(conversationAssistId);\n const assistId = assist.id?.trim();\n if (!assistId) {\n throw new Error('No AI assist is configured for speech transcription.');\n }\n\n return assistId;\n }\n\n private buildTranscriptCorrectionPrompt(\n rawText: string,\n platformRuntimeContext: AXPAiPlatformRuntimeContext,\n ): string {\n const locale = platformRuntimeContext.locale?.trim() || 'the UI locale from platform context';\n return [\n 'Correct obvious misrecognized words and minor lexical or spelling errors in the transcript below.',\n `Keep the language aligned with UI locale (${locale}) and preserve the speaker's meaning.`,\n 'Return ONLY the corrected plain text — no markdown, labels, quotes, or commentary.',\n '',\n rawText,\n ].join('\\n');\n }\n\n private localeToTranscriptionLanguage(locale: string | undefined): string | undefined {\n const trimmed = locale?.trim();\n if (!trimmed) {\n return undefined;\n }\n const primary = trimmed.split('-')[0]?.toLowerCase();\n return primary || undefined;\n }\n\n private async correctTranscriptText(\n assistId: string,\n rawText: string,\n platformRuntimeContext: AXPAiPlatformRuntimeContext,\n ): Promise<string> {\n const result = await this.commandService.execute(AIMANAGEMENT_STRUCTURED_TEXT_COMPLETION_COMMAND_KEY, {\n assistId,\n messages: [axpAiChatTextMessage('user', this.buildTranscriptCorrectionPrompt(rawText, platformRuntimeContext))],\n maxTokens: 2048,\n temperature: 0.2,\n });\n\n if (result?.success && typeof result.data?.text === 'string' && result.data.text.trim()) {\n return result.data.text.trim();\n }\n\n return rawText;\n }\n\n private async persistVoiceRecordingForAi(\n audioBlob: Blob,\n conversationId: string,\n ): Promise<{ fileId: string; mimeType: string; name: string }> {\n const mimeType = audioBlob.type?.trim() || 'audio/webm';\n const fileName = `voice-${Date.now()}.webm`;\n const file = new File([audioBlob], fileName, { type: mimeType });\n const refId = conversationId.trim() || globalThis.crypto.randomUUID();\n const { fileId } = await persistAiChatAttachmentImage(this.fileStorage, file, refId);\n return { fileId, mimeType, name: fileName };\n }\n\n private async transcribeVoiceBlob(audioBlob: Blob): Promise<string> {\n const aiManager = this.aiManager;\n if (!aiManager) {\n throw new Error('AI manager service is not available.');\n }\n\n const assistId = await this.resolveAssistIdForTranscription();\n const chatTransport = (await aiManager.getAssistPrimaryChatTransport(assistId)) ?? 'openai';\n const platformRuntimeContext = await this.runtimeContextBuilder.build();\n const conversationId = this.conversation().id;\n const attachment = await this.persistVoiceRecordingForAi(audioBlob, conversationId);\n const language = this.localeToTranscriptionLanguage(platformRuntimeContext.locale);\n\n this.chatToolRunContext.setContext({\n assistId,\n chatTransport,\n agentId: AXM_SPEECH_TO_TEXT_AGENT_ID,\n });\n\n try {\n const result = await this.commandService.execute(AIMANAGEMENT_CHAT_TRANSCRIBE_SPEECH_COMMAND_KEY, {\n fileId: attachment.fileId,\n ...(language ? { language } : {}),\n });\n\n if (result == null || !result.success || typeof result.data?.text !== 'string' || !result.data.text.trim()) {\n const detail =\n result != null && typeof result.message?.text === 'string' && result.message.text.trim()\n ? result.message.text\n : 'Speech transcription returned no text.';\n throw new Error(detail);\n }\n\n const rawText = result.data.text.trim();\n // Demisco speech-to-text is final; do not call agent chat (`/core/agent/chat/`, needs agent_uuid).\n if (chatTransport === 'demis') {\n return rawText;\n }\n\n return this.correctTranscriptText(assistId, rawText, platformRuntimeContext);\n } finally {\n this.chatToolRunContext.setContext(null);\n }\n }\n\n private async sendVoiceMessage(audioBlob: Blob, conversation: AXConversation): Promise<void> {\n try {\n const audioFile = new File([audioBlob], `voice-${Date.now()}.webm`, { type: 'audio/webm' });\n const uploadResult = await this.messageApi.uploadFile(audioFile, conversation.id);\n\n const command: AXSendMessageCommand = {\n conversationId: conversation.id,\n type: 'voice',\n payload: {\n type: 'voice',\n url: uploadResult.url,\n duration: this.recordingDuration(),\n size: uploadResult.size,\n mimeType: uploadResult.mimeType,\n },\n };\n\n await this.conversationService.sendMessage(command);\n } catch (error) {\n console.error('Failed to send voice message:', error);\n }\n }\n\n private stopAndCleanup(): void {\n this.clearTimer();\n if (this.mediaRecorder?.state === 'recording') {\n this.cancelled = true;\n this.mediaRecorder.stop();\n }\n this.activeStream?.getTracks().forEach((track) => track.stop());\n this.activeStream = undefined;\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXComposerAction } from '@acorex/components/conversation2';\nimport { AXMChatVoiceRecorderComponent } from './chat-voice-recorder.component';\n\n//#endregion\n\n//#region ---- Action ----\n\nexport const AXM_CHAT_COMPOSER_VOICE_RECORDING_ACTION: AXComposerAction = {\n id: 'voice-recording',\n label: '@acorex:chat.voice',\n icon: 'fa-light fa-microphone',\n position: 'right',\n priority: 30,\n component: AXMChatVoiceRecorderComponent,\n toggleable: true,\n visible: (context) => {\n return !context.draftText?.trim() && !context.isEditing;\n },\n tooltip: '@acorex:chat.tooltips.record-voice-message',\n};\n\n//#endregion\n","import {\n AXConversation,\n AXInfoBarService,\n axConversationIndexedDbStorage,\n conversationSharedStorage,\n} from '@acorex/components/conversation2';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport type { AXPAiEffectiveAssistRow } from '@acorex/modules/ai-management';\nimport { AXPAiAssistChatModelCatalogService, RootConfig } from '@acorex/modules/ai-management';\nimport { AXPCommonSettings, AXPSettingsService } from '@acorex/platform/common';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, input, signal } from '@angular/core';\n\nimport { axmConversationHasAiChat } from '../utils/chat-ai-target.util';\n\n@Component({\n selector: 'axm-chat-info-bar-assist-model-action',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, AXTranslationModule],\n template: `\n @if (isAssistConversation() && debugModeEnabled()) {\n <div\n class=\"axm-chat-assist-model-action ax-text-sm\"\n [class.ax-text-danger]=\"error()\"\n [class.ax-text-default/80]=\"!error()\"\n [attr.aria-label]=\"ariaLabel()\"\n >\n @if (error()) {\n <span>{{ '@ai-management:chat.model-unavailable' | translate | async }}</span>\n } @else if (resolvedModelTitle()) {\n <span>{{ resolvedModelTitle() }}</span>\n }\n </div>\n }\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n\n .axm-chat-assist-model-action {\n width: min(100%, 24rem);\n }\n `,\n ],\n})\nexport class AXMChatInfoBarAssistModelActionComponent {\n //#region ---- Inputs ----\n\n readonly conversation = input.required<AXConversation>();\n readonly service = input<AXInfoBarService | undefined>(undefined);\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private readonly modelCatalog = inject(AXPAiAssistChatModelCatalogService);\n private readonly entityService = inject(AXPEntityService);\n private readonly settingsService = inject(AXPSettingsService);\n readonly debugModeEnabled = signal<boolean>(false);\n private readonly assistData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assist.name)\n .data<string, AXPAiEffectiveAssistRow, AXPAiEffectiveAssistRow, AXPAiEffectiveAssistRow, AXPAiEffectiveAssistRow>();\n\n //#endregion\n\n //#region ---- State ----\n\n readonly error = signal(false);\n readonly resolvedModelTitle = signal<string | undefined>(undefined);\n readonly isAssistConversation = signal(false);\n\n readonly ariaLabel = computed(() => this.resolvedModelTitle() ?? '');\n\n private currentConversationId: string | null = null;\n\n private readonly loadDebugMode = effect(() => {\n void this.syncDebugMode();\n });\n\n private async syncDebugMode(): Promise<void> {\n try {\n const debugMode = await this.settingsService.get<boolean>(AXPCommonSettings.DebugMode);\n this.debugModeEnabled.set(!!debugMode);\n } catch {\n this.debugModeEnabled.set(false);\n }\n }\n\n //#endregion\n\n //#region ---- Effects ----\n\n private readonly loadOnConversationChange = effect(() => {\n const conversation = this.conversation();\n void this.syncModels(conversation);\n });\n\n //#endregion\n\n //#region ---- Utilities ----\n\n private async syncModels(conversation: AXConversation | null): Promise<void> {\n if (!conversation) {\n this.reset();\n return;\n }\n\n if (!axmConversationHasAiChat(conversation)) {\n this.reset();\n return;\n }\n\n const assistId = this.getAssistId(conversation);\n if (!assistId) {\n this.reset();\n return;\n }\n\n if (conversation.id === this.currentConversationId) {\n return;\n }\n\n this.currentConversationId = conversation.id;\n this.isAssistConversation.set(true);\n this.error.set(false);\n\n try {\n const assist = await this.assistData.byKey(assistId);\n const modelEntityId = assist?.modelId?.trim();\n\n if (!modelEntityId) {\n this.error.set(true);\n this.resolvedModelTitle.set(undefined);\n return;\n }\n\n this.persistModelToMetadata(conversation.id, modelEntityId);\n\n const rows = await this.modelCatalog.listModels({ assistId });\n const title = rows.find((r) => r.id === modelEntityId)?.title?.trim();\n this.resolvedModelTitle.set(title ?? modelEntityId);\n } catch {\n this.error.set(true);\n this.resolvedModelTitle.set(undefined);\n }\n }\n\n /** Writes modelEntityId into conversation metadata (in-memory store + IndexedDB). */\n private persistModelToMetadata(conversationId: string, modelEntityId: string): void {\n const stored = conversationSharedStorage.conversations.get(conversationId);\n if (stored) {\n stored.metadata = { ...(stored.metadata ?? {}), modelEntityId };\n conversationSharedStorage.conversations.set(conversationId, stored);\n void axConversationIndexedDbStorage.putConversation(stored);\n }\n }\n\n private reset(): void {\n this.currentConversationId = null;\n this.isAssistConversation.set(false);\n this.error.set(false);\n this.resolvedModelTitle.set(undefined);\n }\n\n private getAssistId(conversation: AXConversation): string | null {\n const raw = conversation.metadata?.['assistId'];\n if (typeof raw === 'string' && raw.trim()) {\n return raw.trim();\n }\n\n for (const participant of conversation.participants ?? []) {\n const participantAssistId = participant.metadata?.['assistId'];\n if (typeof participantAssistId === 'string' && participantAssistId.trim()) {\n return participantAssistId.trim();\n }\n }\n return null;\n }\n\n //#endregion\n}\n","import type { AXConversation, AXInfoBarAction } from '@acorex/components/conversation2';\nimport { axmConversationHasAiChat } from '../utils/chat-ai-target.util';\nimport { AXMChatInfoBarAssistModelActionComponent } from './chat-info-bar-assist-model-action.component';\n\n/** True when the conversation is an assist chat. */\nfunction conversationHasAssistContext(conversation: AXConversation): boolean {\n if (axmConversationHasAiChat(conversation)) {\n return true;\n }\n for (const participant of conversation.participants ?? []) {\n if (typeof participant.id === 'string' && participant.id.startsWith('assist-')) {\n return true;\n }\n }\n return false;\n}\n\nexport const AXM_CHAT_INFO_BAR_ASSIST_MODEL_ACTION: AXInfoBarAction = {\n id: 'assist-model',\n label: '@conversation:support.model',\n icon: 'fa-light fa-sparkles',\n location: 'inline',\n fullWidthComponent: false,\n priority: 210,\n toggleable: true,\n component: AXMChatInfoBarAssistModelActionComponent,\n visible: (context) => conversationHasAssistContext(context.conversation),\n};\n","/**\n * Detects strong RTL scripts (Arabic / Persian / Hebrew and related blocks) in a string\n * so each assist transcript segment can set `dir` independently of the app locale.\n */\nconst ASSIST_SEGMENT_STRONG_RTL =\n /[\\u0591-\\u08FF\\uFB1D-\\uFDFF\\uFE70-\\uFEFC]/u;\n\n/**\n * Returns `rtl` when the segment contains any character from RTL scripts (e.g. Persian/Farsi),\n * otherwise `ltr`. Empty or whitespace-only strings are `ltr`.\n */\nexport function axmAssistSegmentDirection(text: string | null | undefined): 'rtl' | 'ltr' {\n if (text == null) return 'ltr';\n const s = String(text);\n if (!s.trim()) return 'ltr';\n return ASSIST_SEGMENT_STRONG_RTL.test(s) ? 'rtl' : 'ltr';\n}\n","//#region ---- Imports ----\n\nimport type { AXMessage } from '@acorex/components/conversation2';\nimport { AXImageRendererComponent } from '@acorex/components/conversation2';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPFileStorageService } from '@acorex/platform/common';\nimport { AsyncPipe } from '@angular/common';\n\nimport { ChangeDetectionStrategy, Component, DestroyRef, computed, effect, inject, input, signal } from '@angular/core';\n\nimport { axmSyntheticEmbedMessage } from '../utils/assist-bot-transcript.util';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Resolves an AI {@link AXPAiChatImageContent} fileId via {@link AXPFileStorageService} and renders\n * {@link AXImageRendererComponent} with a synthetic {@link AXMessage}.\n */\n@Component({\n selector: 'axm-assist-bot-image-line',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXImageRendererComponent, AXTranslationModule, AsyncPipe],\n template: `\n @if (syntheticMessage(); as sm) {\n <ax-conversation-image-renderer [message]=\"sm\" />\n } @else if (errorText()) {\n <p class=\"axm-assist-bot-image-line__err\">{{ ((errorText() ?? '') | translate | async) ?? '' }}</p>\n }\n `,\n styles: [\n `\n :host {\n display: block;\n max-inline-size: min(100%, 40rem);\n }\n\n .axm-assist-bot-image-line__err {\n margin: 0;\n font-size: 0.8125rem;\n color: rgb(var(--ax-sys-color-danger-600, 220 38 38));\n }\n `,\n ],\n})\nexport class AXMAssistBotImageLineComponent {\n //#region ---- Inputs ----\n\n readonly parentMessage = input.required<AXMessage>();\n readonly fileId = input.required<string>();\n readonly mimeType = input<string>('application/octet-stream');\n readonly name = input<string | undefined>(undefined);\n\n //#endregion\n\n //#region ---- Services ----\n\n private readonly fileStorage = inject(AXPFileStorageService);\n private readonly destroyRef = inject(DestroyRef);\n\n //#endregion\n\n //#region ---- State ----\n\n private readonly resolvedUrl = signal<string | null>(null);\n readonly errorText = signal<string | null>(null);\n private objectUrlToRevoke: string | null = null;\n private loadGeneration = 0;\n\n //#endregion\n\n //#region ---- Synthetic message ----\n\n readonly syntheticMessage = computed(() => {\n const url = this.resolvedUrl();\n const parent = this.parentMessage();\n if (!url?.trim()) {\n return null;\n }\n return axmSyntheticEmbedMessage(parent, `img-${this.fileId()}`, {\n type: 'image',\n payload: {\n type: 'image',\n url,\n thumbnailUrl: url,\n width: 400,\n height: 300,\n caption: this.name()?.trim() || undefined,\n mimeType: this.mimeType(),\n },\n });\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n effect(() => {\n const id = this.fileId()?.trim() ?? '';\n const parent = this.parentMessage();\n const gen = ++this.loadGeneration;\n this.revokeObjectUrl();\n this.resolvedUrl.set(null);\n this.errorText.set(null);\n if (!id) {\n return;\n }\n\n void this.fileStorage\n .getInfo(id)\n .then((info) => {\n if (gen !== this.loadGeneration) {\n return;\n }\n const url = info.url?.trim();\n if (url) {\n this.resolvedUrl.set(url);\n return;\n }\n const bin = info.binary;\n if (bin instanceof Blob) {\n const ou = URL.createObjectURL(bin);\n this.objectUrlToRevoke = ou;\n this.resolvedUrl.set(ou);\n return;\n }\n this.errorText.set('@conversation:chat.assist-renderer.errors.image-load');\n })\n .catch(() => {\n if (gen !== this.loadGeneration) {\n return;\n }\n this.errorText.set('@conversation:chat.assist-renderer.errors.image-load');\n });\n });\n\n this.destroyRef.onDestroy(() => this.revokeObjectUrl());\n }\n\n private revokeObjectUrl(): void {\n if (this.objectUrlToRevoke) {\n URL.revokeObjectURL(this.objectUrlToRevoke);\n this.objectUrlToRevoke = null;\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXButtonModule } from '@acorex/components/button';\nimport type {\n AXMessage as AXConversationMessage,\n AXMessage,\n AXMessagePayload,\n AXMessageRendererComponent,\n AXMessageRendererContentState,\n AXMessageRendererState,\n} from '@acorex/components/conversation2';\nimport { axConversationIndexedDbStorage, conversationSharedStorage } from '@acorex/components/conversation2';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPContextChangeEvent } from '@acorex/platform/core';\nimport { AXPLayoutRendererComponent } from '@acorex/platform/layout/builder';\nimport { AXPWidgetCoreModule, AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { AsyncPipe } from '@angular/common';\n\nimport { ChangeDetectionStrategy, Component, computed, input, output, signal } from '@angular/core';\n\nimport { axmAssistWidgetNodeFromUnknown } from '../utils/assist-bot-transcript.util';\n\ninterface AXMUserFormPayload {\n type: 'user-form';\n node: AXPWidgetNode;\n value?: Record<string, unknown>;\n}\n\ninterface AXMUserFormMessageMetadata {\n submitted?: boolean;\n context?: Record<string, unknown>;\n}\n\n@Component({\n selector: 'axm-chat-user-form-renderer',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXPWidgetCoreModule, AXButtonModule, AXTranslationModule, AXPLayoutRendererComponent, AsyncPipe],\n template: `\n <div class=\"axm-user-form-renderer\" [class.axm-user-form-renderer--assist-embed]=\"isAssistEmbed()\">\n @if (isAssistEmbed()) {\n <axp-layout-renderer [layout]=\"resolvedNode()\" mode=\"view\" [context]=\"{}\" />\n } @else if (!isSubmitted()) {\n <axp-widgets-container\n class=\"ax-flex ax-flex-col ax-gap-3\"\n [context]=\"formContext()\"\n (onContextChanged)=\"onContextChanged($event)\"\n >\n <ng-container\n axp-widget-renderer\n [node]=\"resolvedNode()\"\n [mode]=\"resolvedNode().mode ?? 'edit'\"\n ></ng-container>\n </axp-widgets-container>\n\n <div class=\"ax-flex ax-justify-end ax-mt-2\">\n <ax-button [text]=\"('@conversation:chat.user-form.actions.submit' | translate | async) ?? ''\" (onClick)=\"submit()\"></ax-button>\n </div>\n } @else {\n <div\n class=\"ax-mt-1 ax-rounded-xl ax-border ax-border-success-500/25 ax-bg-success-500/10 ax-px-3 ax-py-2 ax-shadow-sm\"\n >\n <div class=\"ax-text-[0.7rem] ax-font-bold ax-uppercase ax-tracking-wide ax-text-success-700\">\n {{ '@conversation:chat.user-form.states.submitted' | translate | async }}\n </div>\n <div class=\"ax-mt-1 ax-text-sm ax-font-medium ax-text-on-surface\">\n {{ (submittedMessage() | translate | async) ?? '' }}\n </div>\n </div>\n }\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n inline-size: min(100%, 28rem);\n }\n\n :host:has(.axm-user-form-renderer--assist-embed) {\n inline-size: 100%;\n max-inline-size: none;\n }\n `,\n ],\n})\nexport class AXMNodeMessageRendererComponent implements AXMessageRendererComponent {\n //#region ---- Inputs & Outputs ----\n\n readonly message = input.required<AXMessage>();\n readonly node = input<AXPWidgetNode | undefined>(undefined);\n readonly formSubmitted = output<Record<string, unknown>>();\n\n //#endregion\n\n //#region ---- State ----\n\n private readonly contentState = signal<AXMessageRendererContentState>('none');\n readonly formContext = signal<Record<string, unknown>>({});\n readonly isSubmitted = computed(() => this.readSubmittedState(this.message()));\n readonly isAssistEmbed = computed(() => this.readAssistEmbedFlag(this.message().metadata));\n\n readonly rendererState = computed<AXMessageRendererState>(() => ({\n deliveryStatus: this.message().status,\n contentState: this.contentState(),\n }));\n\n readonly resolvedNode = computed<AXPWidgetNode>(() => {\n const message = this.message();\n const payload = message.payload as unknown;\n\n if (this.isUserFormPayload(payload)) {\n return payload.node;\n }\n\n // Only treat `{ type: 'node', content }` when the chat message itself is a `node` message.\n if (message.type === 'node' && this.isNodeContentPayload(payload)) {\n const parsed = axmAssistWidgetNodeFromUnknown(payload.content);\n if (parsed) {\n return parsed;\n }\n if (this.readAssistEmbedFlag(message.metadata)) {\n // Assist embed: do not fall back to a synthetic name field (avoids a duplicate/spurious form).\n return {\n type: 'flex-layout',\n name: 'assist-node-empty',\n visible: false,\n children: [],\n };\n }\n }\n\n return this.node() ?? this.createFallbackNode();\n });\n\n readonly submittedMessage = computed(() => {\n return '@conversation:chat.user-form.states.submitted-success';\n });\n\n //#endregion\n\n //#region ---- Handlers ----\n\n onContextChanged(event: AXPContextChangeEvent): void {\n this.formContext.set((event.data ?? {}) as Record<string, unknown>);\n }\n\n submit(): void {\n const context = this.formContext();\n this.formSubmitted.emit(context);\n void this.persistSubmittedState(context);\n }\n\n //#endregion\n\n //#region ---- Utilities ----\n\n private isUserFormPayload(payload: unknown): payload is AXMUserFormPayload {\n return (\n typeof payload === 'object' &&\n payload != null &&\n 'type' in payload &&\n payload.type === 'user-form' &&\n 'node' in payload\n );\n }\n\n private isNodeContentPayload(payload: unknown): payload is { type: 'node'; content: unknown } {\n return (\n typeof payload === 'object' &&\n payload != null &&\n 'type' in payload &&\n (payload as { type: unknown }).type === 'node' &&\n 'content' in payload\n );\n }\n\n private readAssistEmbedFlag(metadata: unknown): boolean {\n if (typeof metadata !== 'object' || metadata == null) {\n return false;\n }\n return (metadata as Record<string, unknown>)['assistEmbed'] === true;\n }\n\n private createFallbackNode(): AXPWidgetNode {\n return {\n type: 'text-editor',\n path: 'form.name',\n name: 'name',\n options: { placeholder: '@conversation:chat.user-form.fields.name.placeholder' },\n };\n }\n\n private readSubmittedState(message: AXMessage): boolean {\n const metadata = this.readUserFormMetadata(message.metadata);\n return metadata?.submitted === true;\n }\n\n private readPersistedContext(message: AXMessage): Record<string, unknown> | null {\n const metadata = this.readUserFormMetadata(message.metadata);\n if (!metadata?.context || typeof metadata.context !== 'object') {\n return null;\n }\n return metadata.context;\n }\n\n private readUserFormMetadata(metadata: unknown): AXMUserFormMessageMetadata | null {\n if (typeof metadata !== 'object' || metadata == null) {\n return null;\n }\n const candidate = (metadata as Record<string, unknown>)['userForm'];\n if (typeof candidate !== 'object' || candidate == null) {\n return null;\n }\n return candidate as AXMUserFormMessageMetadata;\n }\n\n private async persistSubmittedState(context: Record<string, unknown>): Promise<void> {\n const message = this.message();\n const payload = this.message().payload as unknown;\n const payloadWithValue = this.isUserFormPayload(payload)\n ? ({ ...payload, value: context } as unknown as AXMessagePayload)\n : (this.message().payload as AXMessagePayload);\n\n const updatedMessage: AXConversationMessage = {\n ...message,\n payload: payloadWithValue,\n metadata: {\n ...(message.metadata ?? {}),\n userForm: {\n submitted: true,\n context,\n },\n },\n };\n\n conversationSharedStorage.messages.set(updatedMessage.id, updatedMessage);\n await axConversationIndexedDbStorage.putMessage(updatedMessage);\n conversationSharedStorage.messageUpdates$.next(updatedMessage);\n }\n\n //#endregion\n}\n","//#region ---- Imports ----\n\nimport { AXCodeEditorDefaultLanguage, AXCodeEditorModule } from '@acorex/components/code-editor';\nimport type { AXMessage, AXMessagePayload } from '@acorex/components/conversation2';\nimport { AXPMarkdownTemplateDirective, AXPMarkdownViewerComponent } from '@acorex/platform/layout/components';\nimport { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport type { AXPAiChatMessage } from '@acorex/modules/ai-management';\nimport {\n axmAssistUserVisibleItemsForLine,\n axmAssistWidgetNodeFromUnknown,\n axmParseAssistTranscriptTextEnvelope,\n axmSyntheticEmbedMessage,\n} from '../utils/assist-bot-transcript.util';\nimport { axmAssistSegmentDirection } from '../utils/assist-segment-direction.util';\nimport { AXMAssistBotImageLineComponent } from './assist-bot-image-line.component';\nimport { AXMAssistSuggestionChipsComponent } from '../shared/assist-suggestion-chips.component';\nimport { AXMNodeMessageRendererComponent } from './node-message-renderer.component';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Renders the user-facing assist answer: ordered segments from the payload line\n * ({@link axmAssistUserVisibleItemsForLine}).\n */\n@Component({\n selector: 'axm-assist-transcript-user-line',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXMNodeMessageRendererComponent,\n AXMAssistBotImageLineComponent,\n AXMAssistSuggestionChipsComponent,\n AXCodeEditorModule,\n AXPMarkdownViewerComponent,\n AXPMarkdownTemplateDirective,\n FormsModule,\n ],\n templateUrl: './assist-transcript-user-line.component.html',\n styleUrls: ['./assist-message-renderer.component.scss'],\n})\nexport class AXMAssistTranscriptUserLineComponent {\n readonly line = input.required<AXPAiChatMessage>();\n readonly parentMessage = input.required<AXMessage>();\n\n protected readonly segmentDir = axmAssistSegmentDirection;\n protected readonly parseAssistLineText = axmParseAssistTranscriptTextEnvelope;\n protected readonly axmAssistWidgetNodeFromUnknown = axmAssistWidgetNodeFromUnknown;\n\n readonly items = computed(() => axmAssistUserVisibleItemsForLine(this.line()));\n\n protected syntheticNodeMessage(segIndex: number, content: unknown): AXMessage {\n return axmSyntheticEmbedMessage(this.parentMessage(), `user-node-${segIndex}`, {\n type: 'node',\n payload: { type: 'node', content } as unknown as AXMessagePayload,\n });\n }\n\n protected markdownCodeLanguage(segment: unknown): AXCodeEditorDefaultLanguage {\n if (this.isMarkdownCodeSegment(segment) && segment.language.trim()) {\n return segment.language as AXCodeEditorDefaultLanguage;\n }\n return 'javascript';\n }\n\n protected markdownCodeValue(segment: unknown): string {\n return this.isMarkdownCodeSegment(segment) ? segment.code : '';\n }\n\n private isMarkdownCodeSegment(segment: unknown): segment is { type: 'code'; language: string; code: string } {\n if (!segment || typeof segment !== 'object') {\n return false;\n }\n const c = segment as { type?: unknown; language?: unknown; code?: unknown };\n return c.type === 'code' && typeof c.language === 'string' && typeof c.code === 'string';\n }\n}\n\n//#endregion\n","<div class=\"axm-assist-bot axm-assist-bot__final-line\">\n @for (item of items(); track $index; let itemIndex = $index) {\n @switch (item.kind) {\n @case ('text') {\n @let parsed = parseAssistLineText(item.content);\n @if (parsed.body.trim()) {\n <div class=\"axm-assist-bot__segment axm-assist-renderer__markdown\" [attr.dir]=\"segmentDir(parsed.body)\">\n <axp-markdown-viewer [markdown]=\"parsed.body\">\n <ng-template axpMarkdownTemplate=\"code\" let-segment>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"markdownCodeValue(segment)\"\n [readonly]=\"true\"\n [language]=\"markdownCodeLanguage(segment)\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n </ng-template>\n </axp-markdown-viewer>\n </div>\n }\n }\n @case ('node') {\n @if (axmAssistWidgetNodeFromUnknown(item.content)) {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-chat-user-form-renderer [message]=\"syntheticNodeMessage(itemIndex, item.content)\" />\n </div>\n }\n }\n @case ('file') {\n <axm-assist-bot-image-line\n [parentMessage]=\"parentMessage()\"\n [fileId]=\"item.fileId\"\n [mimeType]=\"item.mimeType\"\n [name]=\"item.name\"\n />\n }\n @case ('followUp') {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-assist-suggestion-chips [items]=\"item.items\" />\n </div>\n }\n }\n }\n</div>\n","//#region ---- Imports ----\n\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n axpAiParseSupervisorAgentToolName,\n type AXPAiDelegatedAgentTranscriptEntry,\n} from '@acorex/modules/ai-management';\nimport type { AXMAssistDelegatedAgentDetailPopupData } from '../message-renderers/assist-delegated-agent-detail-popup.component';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXMOpenAssistDelegatedAgentDetailOptions {\n callId: string;\n toolName: string;\n delegatedTranscriptsByCallId: Record<string, AXPAiDelegatedAgentTranscriptEntry>;\n resolvedAgentLabel?: string;\n resolveCatalogTitle?: (agentCatalogId: string) => string | undefined;\n agentTitleById?: Record<string, string>;\n translationService: AXTranslationService;\n popupService: AXPopupService;\n}\n\n//#endregion\n\n//#region ---- Dialog ----\n\n/**\n * Opens a read-only specialist sub-run transcript for one delegated {@code agent:*} tool call.\n * Renders {@link AXPAiChatMessage} lines (role + responses[]) in conversation-owned UI.\n */\nexport async function axmOpenAssistDelegatedAgentDetailDialog(\n options: AXMOpenAssistDelegatedAgentDetailOptions,\n): Promise<void> {\n const callId = options.callId?.trim() ?? '';\n if (!callId) {\n return;\n }\n\n const entry = options.delegatedTranscriptsByCallId[callId];\n const catalogId = axpAiParseSupervisorAgentToolName(options.toolName);\n const catalogTitle =\n catalogId != null ? options.resolveCatalogTitle?.(catalogId)?.trim() : undefined;\n const titleBase =\n options.resolvedAgentLabel?.trim() ||\n entry?.agentName?.trim() ||\n catalogTitle ||\n options.toolName.trim() ||\n callId;\n\n const [titleSuffix, missingHint] = await Promise.all([\n options.translationService.translateAsync(\n '@conversation:chat.assist-renderer.delegated-agent.dialog-title-suffix',\n ),\n options.translationService.translateAsync(\n '@conversation:chat.assist-renderer.delegated-agent.transcript-missing',\n ),\n ]);\n\n const comp = (await import('../message-renderers/assist-delegated-agent-detail-popup.component'))\n .AXMAssistDelegatedAgentDetailPopupComponent;\n\n const data: AXMAssistDelegatedAgentDetailPopupData = {\n messages: entry?.messages ?? [],\n emptyHint: entry?.messages?.length ? undefined : missingHint,\n agentTitleById: options.agentTitleById ?? (catalogId && catalogTitle ? { [catalogId]: catalogTitle } : {}),\n };\n\n await options.popupService.open(comp, {\n title: `${titleBase} — ${titleSuffix ?? 'Full Specialist Run'}`,\n size: 'lg',\n data,\n });\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXAccordionCdkModule } from '@acorex/cdk/accordion';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCodeEditorDefaultLanguage, AXCodeEditorModule } from '@acorex/components/code-editor';\nimport type {\n AXMessage,\n AXMessagePayload,\n AXMessageRendererComponent,\n AXMessageRendererContentState,\n AXMessageRendererState,\n} from '@acorex/components/conversation2';\nimport {\n axConversationIndexedDbStorage,\n AXTextRendererComponent,\n conversationSharedStorage,\n} from '@acorex/components/conversation2';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport type {\n AXPAiChatFollowUpItem,\n AXPAiChatMessage,\n AXPAiChatResponse,\n AXPAiDelegatedAgentResultSegment,\n AXPAiDelegatedAgentTranscriptEntry,\n AXPAiEngineUsageTotals,\n} from '@acorex/modules/ai-management';\nimport {\n RootConfig as AiManagementRootConfig,\n axpAiChatMessageGetText,\n axpAiChatMessageIsDelegatedReflectionExcluded,\n axpAiChatToolOrAgentResultBodyJson,\n axpAiDelegatedAgentOutcomeResponsesPlainText,\n axpAiDelegatedAgentResultSegments,\n axpAiDelegatedAgentPromptPreview,\n axpAiParseSupervisorAgentToolName,\n} from '@acorex/modules/ai-management';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXPCommonSettings, AXPSettingsService } from '@acorex/platform/common';\nimport { AXPMarkdownTemplateDirective, AXPMarkdownViewerComponent } from '@acorex/platform/layout/components';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\n\nimport { AsyncPipe, DecimalPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n type Signal,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { AXPMultiLanguageString, AXPPlatformScope } from '@acorex/platform/core';\nimport {\n axmAssistUserFacingPayloadLine,\n axmAssistUserVisibleItemsForLine,\n axmAssistWidgetNodeFromUnknown,\n axmParseAssistTranscriptLinePayload,\n axmParseAssistTranscriptTextEnvelope,\n axmReadAssistAiTranscript,\n axmReadAssistAiTranscriptRaw,\n axmSyntheticEmbedMessage,\n} from '../utils/assist-bot-transcript.util';\nimport { AXMAssistSuggestionChipsComponent } from '../shared/assist-suggestion-chips.component';\nimport { AXMAssistTranscriptUserLineComponent } from './assist-transcript-user-line.component';\nimport { axmOpenAssistDelegatedAgentDetailDialog } from '../utils/assist-delegated-agent-detail.dialog';\nimport { axmAssistSegmentDirection } from '../utils/assist-segment-direction.util';\nimport { AXMAssistBotImageLineComponent } from './assist-bot-image-line.component';\nimport { AXMNodeMessageRendererComponent } from './node-message-renderer.component';\n\n//#endregion\n\n//#region ---- Types ----\n\n/** Shape of a single tool call stored in message metadata (legacy). */\ninterface AssistToolCallEntry {\n id: string;\n name: string;\n arguments: unknown;\n output?: string;\n state: 'running' | 'done';\n /** Streamed specialist text during a delegated agent sub-run (conversation placeholder metadata). */\n nestedStreamText?: string;\n nestedTools?: AssistToolCallEntry[];\n}\n\n/** User toggles for assist accordions (thinking, agent, tool); persisted on the message. */\ninterface AssistMessageUiMetadata {\n openByKey?: Record<string, boolean>;\n}\n\n/** Parsed thinking + body from assistant content (legacy). */\ntype ParsedAssistContent = ReturnType<typeof axmParseAssistTranscriptTextEnvelope>;\n\ninterface AXMAiAgentLookupRow {\n id: string;\n title?: string;\n name?: string;\n}\n\n/** Debug strip: persisted assist run metadata (see mock {@code assistRun*} keys). */\ninterface AssistRunDebugView {\n usage?: AXPAiEngineUsageTotals;\n durationMs?: number;\n modelEntityId?: string;\n modelTitle?: string;\n}\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axm-assist-message-renderer',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXTextRendererComponent,\n AXMNodeMessageRendererComponent,\n AXMAssistTranscriptUserLineComponent,\n AXMAssistBotImageLineComponent,\n AXMAssistSuggestionChipsComponent,\n AXAccordionCdkModule,\n AXButtonModule,\n AXCodeEditorModule,\n AXPMarkdownViewerComponent,\n AXPMarkdownTemplateDirective,\n FormsModule,\n AXTranslationModule,\n AsyncPipe,\n DecimalPipe,\n ],\n templateUrl: './assist-message-renderer.component.html',\n styleUrls: ['./assist-message-renderer.component.scss'],\n})\nexport class AXMAssistMessageRendererComponent implements AXMessageRendererComponent {\n //#region ---- Inputs ----\n\n readonly message = input.required<AXMessage>();\n\n //#endregion\n\n //#region ---- Template helpers (exposed for template) ----\n\n protected readonly axpAiChatMessageGetText = axpAiChatMessageGetText;\n\n protected readonly axmAssistWidgetNodeFromUnknown = axmAssistWidgetNodeFromUnknown;\n\n protected readonly parseAssistLineText = axmParseAssistTranscriptTextEnvelope;\n\n protected readonly segmentDir = axmAssistSegmentDirection;\n\n /**\n * Assistant text shown in the transcript: hides delegated sub-run reflection lines from the main markdown stream\n * unless debug mode is on.\n */\n protected assistTranscriptAssistantTextBodyForDisplay(line: AXPAiChatMessage, body: string): string {\n if (axpAiChatMessageIsDelegatedReflectionExcluded(line) && !this.showDebugUi()) {\n return '';\n }\n return body ?? '';\n }\n\n //#endregion\n\n //#region ---- State ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly settingsService = inject(AXPSettingsService);\n private readonly translation = inject(AXTranslationService);\n private readonly popupService = inject(AXPopupService);\n private readonly agentData = this.entityService\n .withEntity(AiManagementRootConfig.module.name, AiManagementRootConfig.entities.agent.name)\n .data<string, AXMAiAgentLookupRow, AXMAiAgentLookupRow, AXMAiAgentLookupRow, AXMAiAgentLookupRow>();\n\n private readonly loadingAgentIds = new Set<string>();\n\n private readonly agentTitleById = signal<Record<string, string>>({});\n\n private readonly contentState = signal<AXMessageRendererContentState>('ready');\n readonly debugModeEnabled = signal<boolean>(false);\n\n /** False until tenant debug setting has been read; avoids flashing debug UI before resolve. */\n readonly debugModeResolved = signal<boolean>(false);\n\n /** Debug transcript/tools UI — only after settings resolve and debug is on. */\n readonly showDebugUi = computed(() => this.debugModeResolved() && this.debugModeEnabled());\n\n /** User-facing UI (no tools/thinking accordions); used while unresolved and when debug is off. */\n readonly showNonDebugUi = computed(() => !this.showDebugUi());\n\n /** Persisted assist run metadata (mock writes {@code assistRun*} keys on finalize). */\n readonly assistRunDebug = computed((): AssistRunDebugView | null => {\n const meta = this.message().metadata as Record<string, unknown> | undefined;\n if (!meta) {\n return null;\n }\n const usage = meta['assistRunUsageTotals'] as AXPAiEngineUsageTotals | undefined;\n const durationRaw = meta['assistRunDurationMs'];\n const modelEntityId = meta['assistRunModelEntityId'];\n const modelTitle = meta['assistRunModelTitle'];\n const durationMs = typeof durationRaw === 'number' && Number.isFinite(durationRaw) ? durationRaw : undefined;\n const id = typeof modelEntityId === 'string' && modelEntityId.trim() ? modelEntityId.trim() : undefined;\n const title = typeof modelTitle === 'string' && modelTitle.trim() ? modelTitle.trim() : undefined;\n if (!usage && durationMs == null && !id && !title) {\n return null;\n }\n return { usage, durationMs, modelEntityId: id, modelTitle: title };\n });\n\n readonly rendererState: Signal<AXMessageRendererState> = computed(() => ({\n deliveryStatus: this.message().status,\n contentState: this.contentState(),\n }));\n\n //#endregion\n\n //#region ---- Transcript UI ----\n\n readonly transcriptLines = computed((): AXPAiChatMessage[] => {\n return axmReadAssistAiTranscript(this.message().metadata) ?? [];\n });\n\n readonly delegatedTranscriptsByCallId = computed((): Record<string, AXPAiDelegatedAgentTranscriptEntry> => {\n const meta = this.message().metadata;\n if (typeof meta !== 'object' || meta == null) {\n return {};\n }\n const delegated = (meta as Record<string, unknown>)['assistRunDelegatedTranscriptsByCallId'];\n if (typeof delegated !== 'object' || delegated == null || Array.isArray(delegated)) {\n return {};\n }\n return delegated as Record<string, AXPAiDelegatedAgentTranscriptEntry>;\n });\n\n readonly toolResultByCallId = computed(() => {\n const map = new Map<string, AXPAiChatMessage>();\n for (const line of this.transcriptLines()) {\n if (line.role !== 'tool') {\n continue;\n }\n for (const seg of line.responses) {\n if (seg.type === 'tool_result' || seg.type === 'agent_result') {\n const callId = seg.callId;\n if (typeof callId === 'string' && callId.trim()) {\n map.set(callId.trim(), line);\n }\n }\n }\n }\n return map;\n });\n\n readonly useTranscriptUi = computed(() => this.transcriptLines().length > 0);\n\n /** Last transcript line for the non-debug bubble ({@link axmParseAssistTranscriptLinePayload} or engine transcript). */\n readonly assistPayloadLine = computed((): AXPAiChatMessage | null => {\n const fromPayload = axmParseAssistTranscriptLinePayload(this.message().payload);\n if (fromPayload) {\n return fromPayload;\n }\n const raw = axmReadAssistAiTranscriptRaw(this.message().metadata);\n if (raw.length > 0) {\n return axmAssistUserFacingPayloadLine(raw);\n }\n return null;\n });\n\n /**\n * Follow-up chips for debug UI — always taken from {@link assistPayloadLine} so chips stay after the answer\n * (same order as non-debug), not inline on earlier transcript segments (e.g. delegated agent tool results).\n */\n readonly assistDebugFollowUpItems = computed((): AXPAiChatFollowUpItem[] => {\n if (!this.showDebugUi() || this.isStreaming()) {\n return [];\n }\n const line = this.assistPayloadLine();\n if (!line) {\n return [];\n }\n for (const item of axmAssistUserVisibleItemsForLine(line)) {\n if (item.kind === 'followUp') {\n return item.items;\n }\n }\n return [];\n });\n\n /**\n * Transcript lines that render at least one visible segment. Skips e.g. {@code tool} role lines\n * whose results are merged into assistant tool UI (would otherwise produce empty {@code axm-assist-bot__line}).\n */\n readonly visibleTranscriptLines = computed((): { line: AXPAiChatMessage; lineIndex: number }[] => {\n const lines = this.transcriptLines();\n const out: { line: AXPAiChatMessage; lineIndex: number }[] = [];\n for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {\n const line = lines[lineIndex];\n if (this.transcriptLineHasVisibleUi(line)) {\n out.push({ line, lineIndex });\n }\n }\n return out;\n });\n\n private transcriptLineHasVisibleUi(line: AXPAiChatMessage): boolean {\n const debug = this.showDebugUi();\n for (const seg of line.responses) {\n if (this.transcriptSegmentHasVisibleUi(line, seg, debug)) {\n return true;\n }\n }\n return false;\n }\n\n private transcriptSegmentHasVisibleUi(line: AXPAiChatMessage, seg: AXPAiChatResponse, debug: boolean): boolean {\n if (line.role === 'user' && seg.type === 'file') {\n return true;\n }\n if (line.role === 'user' && seg.type === 'text') {\n return true;\n }\n if (line.role === 'assistant' && seg.type === 'think' && debug) {\n return true;\n }\n if (line.role === 'assistant' && seg.type === 'text') {\n const parsed = this.parseAssistLineText(seg.content);\n if (debug && parsed.thinking) {\n return true;\n }\n return parsed.body.trim().length > 0;\n }\n if (\n line.role === 'assistant' &&\n (seg.type === 'agent' || seg.type === 'tool') &&\n this.isDelegatedAgentCommand(seg.content.command)\n ) {\n if (debug) {\n return true;\n }\n const res = this.toolResultForCallId(seg.callId);\n const outcomeSegs = this.delegatedAgentOutcomeSegmentsForCall(res);\n const hasRenderableOutcome = outcomeSegs.some((s) => {\n if (s.type === 'file' || s.type === 'node') {\n return true;\n }\n if (s.type === 'text' || s.type === 'think') {\n return s.content.trim().length > 0;\n }\n if (s.type === 'followUp') {\n return s.content.length > 0;\n }\n return false;\n });\n if (hasRenderableOutcome) {\n return true;\n }\n return this.delegatedAgentAnswerForCall(res).trim().length > 0;\n }\n if (line.role === 'assistant' && seg.type === 'tool' && debug) {\n return true;\n }\n if (line.role === 'assistant' && seg.type === 'node') {\n return axmAssistWidgetNodeFromUnknown(seg.content) != null;\n }\n if (line.role === 'assistant' && seg.type === 'file') {\n return true;\n }\n if (line.role === 'assistant' && seg.type === 'followUp') {\n if (debug) {\n return false;\n }\n return seg.content.length > 0;\n }\n if (line.role === 'tool' && (seg.type === 'tool_result' || seg.type === 'agent_result')) {\n return false;\n }\n if (line.role === 'system' && seg.type === 'text' && debug) {\n return true;\n }\n return debug || line.role !== 'assistant';\n }\n\n private readonly syncAgentTitles = effect(() => {\n const ids = new Set<string>();\n\n for (const line of this.transcriptLines()) {\n if (line.role !== 'assistant') {\n continue;\n }\n for (const seg of line.responses) {\n if (seg.type !== 'tool' && seg.type !== 'agent') {\n continue;\n }\n const agentId = this.extractAgentIdFromCommand(seg.content.command);\n if (agentId) {\n ids.add(agentId);\n }\n }\n }\n\n for (const tc of this.toolCalls()) {\n const agentId = this.extractAgentIdFromCommand(tc.name);\n if (agentId) {\n ids.add(agentId);\n }\n }\n\n for (const id of ids) {\n this.ensureAgentTitleLoaded(id);\n }\n });\n\n private readonly loadDebugMode = effect(() => {\n void this.syncDebugMode();\n });\n\n syntheticTextMessage(lineIndex: number, segIndex: number, text: string): AXMessage {\n return axmSyntheticEmbedMessage(this.message(), `ut-${lineIndex}-${segIndex}`, {\n type: 'text',\n payload: { type: 'text', text },\n });\n }\n\n syntheticNodeEmbedMessage(lineIndex: number, segIndex: number, content: unknown): AXMessage {\n return axmSyntheticEmbedMessage(this.message(), `node-${lineIndex}-${segIndex}`, {\n type: 'node',\n payload: { type: 'node', content } as unknown as AXMessagePayload,\n });\n }\n\n protected markdownCodeLanguage(segment: unknown): AXCodeEditorDefaultLanguage {\n if (this.isMarkdownCodeSegment(segment) && segment.language.trim()) {\n return segment.language as AXCodeEditorDefaultLanguage;\n }\n return 'javascript';\n }\n\n protected markdownCodeValue(segment: unknown): string {\n if (this.isMarkdownCodeSegment(segment)) {\n return segment.code;\n }\n return '';\n }\n\n resolveToolDisplayTitle(command: string): string {\n const agentId = this.extractAgentIdFromCommand(command);\n if (!agentId) {\n return command?.trim() || 'Tool';\n }\n const title = this.agentTitleById()[agentId];\n if (title) {\n return title;\n }\n return agentId;\n }\n\n resolveToolBadge(command: string, fallback: string): string {\n return this.extractAgentIdFromCommand(command) ? '@conversation:chat.assist-renderer.badges.agent' : fallback;\n }\n\n toolResultForCallId(callId: string | undefined): AXPAiChatMessage | null {\n if (!callId || !callId.trim()) {\n return null;\n }\n return this.toolResultByCallId().get(callId.trim()) ?? null;\n }\n\n protected toolCallEntryFor(callId: string | undefined): AssistToolCallEntry | undefined {\n if (!callId?.trim()) {\n return undefined;\n }\n return this.toolCalls().find((t) => t.id === callId.trim());\n }\n\n protected delegatedPromptPreview(argumentsValue: unknown): string {\n return axpAiDelegatedAgentPromptPreview(argumentsValue);\n }\n\n protected isDelegatedAgentCommand(command: string): boolean {\n return axpAiParseSupervisorAgentToolName(command) != null;\n }\n\n protected delegatedAgentOutcomeSegmentsForCall(res: AXPAiChatMessage | null): AXPAiDelegatedAgentResultSegment[] {\n if (!res) {\n return [];\n }\n const raw = axpAiChatToolOrAgentResultBodyJson(res);\n if (!raw.trim()) {\n return [];\n }\n try {\n const o = JSON.parse(raw) as Record<string, unknown>;\n if (o['success'] === false) {\n return [];\n }\n return axpAiDelegatedAgentResultSegments(o as { success?: boolean; data?: { responses?: AXPAiDelegatedAgentResultSegment[] } });\n } catch {\n return [];\n }\n }\n\n protected delegatedAnswerFromToolResult(resultLine: AXPAiChatMessage | null): string {\n if (!resultLine) {\n return '';\n }\n const raw = axpAiChatToolOrAgentResultBodyJson(resultLine);\n try {\n const o = JSON.parse(raw) as Record<string, unknown>;\n if (o['success'] === false) {\n const err = o['error'];\n return typeof err === 'string' && err.trim() ? err.trim() : 'Request failed.';\n }\n const segs = axpAiDelegatedAgentResultSegments(o as { success?: boolean; data?: { responses?: AXPAiDelegatedAgentResultSegment[] } });\n return axpAiDelegatedAgentOutcomeResponsesPlainText(segs);\n } catch {\n return raw.trim();\n }\n }\n\n private isMarkdownCodeSegment(segment: unknown): segment is { type: 'code'; language: string; code: string } {\n if (!segment || typeof segment !== 'object') {\n return false;\n }\n\n const candidate = segment as { type?: unknown; language?: unknown; code?: unknown };\n return candidate.type === 'code' && typeof candidate.language === 'string' && typeof candidate.code === 'string';\n }\n\n /**\n * Parses the same agent JSON body shape as {@link delegatedAnswerFromToolResult} from raw tool `output` stored in metadata.\n */\n protected delegatedAnswerFromToolOutputString(output: string | undefined): string {\n if (!output?.trim()) {\n return '';\n }\n const raw = output.trim();\n try {\n const o = JSON.parse(raw) as Record<string, unknown>;\n if (o['success'] === false) {\n const err = o['error'];\n return typeof err === 'string' && err.trim() ? err.trim() : 'Request failed.';\n }\n const segs = axpAiDelegatedAgentResultSegments(o as { success?: boolean; data?: { responses?: AXPAiDelegatedAgentResultSegment[] } });\n return axpAiDelegatedAgentOutcomeResponsesPlainText(segs);\n } catch {\n return raw;\n }\n }\n\n protected delegatedAgentAnswerForCall(res: AXPAiChatMessage | null): string {\n return this.delegatedAnswerFromToolResult(res);\n }\n\n protected delegatedAgentLabelForCall(callId: string | undefined): string | undefined {\n const resultLine = this.toolResultForCallId(callId);\n if (!resultLine) {\n return undefined;\n }\n return this.parseDelegatedAgentToolResult(axpAiChatToolOrAgentResultBodyJson(resultLine)).agentName;\n }\n\n protected async openDelegatedAgentTranscriptDialog(\n callId: string | undefined,\n toolName: string,\n resolvedAgentLabel?: string,\n ): Promise<void> {\n await axmOpenAssistDelegatedAgentDetailDialog({\n callId: callId ?? '',\n toolName,\n delegatedTranscriptsByCallId: this.delegatedTranscriptsByCallId(),\n resolvedAgentLabel: resolvedAgentLabel ?? this.delegatedAgentLabelForCall(callId),\n resolveCatalogTitle: (agentId) => this.agentTitleById()[agentId],\n agentTitleById: this.agentTitleById(),\n popupService: this.popupService,\n translationService: this.translation,\n });\n }\n\n private parseDelegatedAgentToolResult(content: string): { agentName?: string } {\n const trimmed = content?.trim() ?? '';\n if (!trimmed) {\n return {};\n }\n try {\n const o = JSON.parse(trimmed) as Record<string, unknown>;\n if (o['success'] === false || o['success'] !== true) {\n return {};\n }\n const data = o['data'];\n if (data == null || typeof data !== 'object' || Array.isArray(data)) {\n return {};\n }\n const agentName = (data as Record<string, unknown>)['agentName'];\n return typeof agentName === 'string' && agentName.trim() ? { agentName: agentName.trim() } : {};\n } catch {\n return {};\n }\n }\n\n /**\n * Human-readable wall time for the assist API run (mock stores {@code assistRunDurationMs}).\n */\n formatAssistRunDuration(ms: number): string {\n if (!Number.isFinite(ms) || ms < 0) {\n return '—';\n }\n if (ms < 1000) {\n return `${Math.round(ms)} ms`;\n }\n return `${(ms / 1000).toFixed(1)} s`;\n }\n\n formatFallbackSegment(seg: AXPAiChatMessage['responses'][number]): string {\n try {\n return JSON.stringify(seg, null, 2);\n } catch {\n return String(seg);\n }\n }\n\n formatToolResultBody(line: AXPAiChatMessage): string {\n return this.formatJson(axpAiChatToolOrAgentResultBodyJson(line));\n }\n\n protected assistThinkKey(lineIndex: number, segIndex: number): string {\n return `think:${lineIndex}-${segIndex}`;\n }\n\n protected assistThinkStreamKey(): string {\n return 'think:stream';\n }\n\n protected assistThinkFinalKey(): string {\n return 'think:final';\n }\n\n protected assistRunMetaKey(): string {\n return 'run-meta';\n }\n\n protected assistAgentKey(callId: string | undefined): string {\n return `agent:${(callId ?? '').trim() || 'unknown'}`;\n }\n\n protected assistToolKey(callId: string | undefined): string {\n return `tool:${(callId ?? '').trim() || 'unknown'}`;\n }\n\n protected assistLegacyToolAccordionKey(tc: AssistToolCallEntry): string {\n return this.isDelegatedAgentCommand(tc.name) ? this.assistAgentKey(tc.id) : this.assistToolKey(tc.id);\n }\n\n protected onAssistLegacyAccordionClick(event: unknown, tc: AssistToolCallEntry): void {\n this.onAssistAccordionClick(event, this.assistLegacyToolAccordionKey(tc));\n }\n\n /**\n * Accordion is collapsed by default; open only when the user has persisted `open: true` for this key.\n */\n protected assistSectionIsCollapsed(key: string): boolean {\n return !this.isAssistSectionOpen(key);\n }\n\n private isAssistSectionOpen(key: string): boolean {\n const m = this.message().metadata;\n if (typeof m !== 'object' || m == null) {\n return false;\n }\n const assistUi = (m as Record<string, unknown>)['assistUi'] as AssistMessageUiMetadata | undefined;\n return assistUi?.openByKey?.[key] === true;\n }\n\n protected onAssistAccordionClick(event: unknown, key: string): void {\n const c = (event as { component?: { isCollapsed: () => boolean } } | null)?.component;\n if (!c) {\n return;\n }\n const open = !c.isCollapsed();\n void this.persistAssistUiOpenKey(key, open);\n }\n\n private async persistAssistUiOpenKey(key: string, open: boolean): Promise<void> {\n const message = this.message();\n const prev = (message.metadata ?? {}) as Record<string, unknown>;\n const prevUi = (prev['assistUi'] as AssistMessageUiMetadata | undefined) ?? {};\n const openByKey: Record<string, boolean> = { ...(prevUi.openByKey ?? {}) };\n if (open) {\n openByKey[key] = true;\n } else {\n delete openByKey[key];\n }\n const nextMeta: Record<string, unknown> = { ...prev, assistUi: { ...prevUi, openByKey } };\n const updated: AXMessage = { ...message, metadata: nextMeta };\n conversationSharedStorage.messages.set(updated.id, updated);\n await axConversationIndexedDbStorage.putMessage(updated);\n conversationSharedStorage.messageUpdates$.next(updated);\n }\n\n //#endregion\n\n //#region ---- Legacy computed ----\n\n readonly isStreaming = computed(() => !!this.readMeta('isStreaming'));\n\n /** Phase label for the streaming activity strip (translation key suffix via {@link assistActivityMessageKey}). */\n readonly assistStreamingPhase = computed((): 'starting' | 'planning' | 'using-tools' | 'responding' => {\n if (!this.isStreaming()) {\n return 'starting';\n }\n const tools = this.toolCalls();\n if (tools.some((t) => t.state === 'running')) {\n return 'using-tools';\n }\n const think = this.streamThink().trim();\n const text = this.streamText().trim();\n if (think && !text) {\n return 'planning';\n }\n if (text) {\n return 'responding';\n }\n return 'starting';\n });\n\n readonly assistActivityMessageKey = computed(() => {\n const phase = this.assistStreamingPhase();\n return `@conversation:chat.assist-renderer.activity.${phase}`;\n });\n\n readonly streamThink = computed(() => {\n const v = this.readMeta('streamDraftThink');\n return typeof v === 'string' ? v : '';\n });\n\n readonly streamText = computed(() => {\n const d = this.readMeta('streamDraftText');\n return typeof d === 'string' ? d : '';\n });\n\n readonly toolCalls = computed<AssistToolCallEntry[]>(() => {\n const raw = this.readMeta('toolCalls');\n return Array.isArray(raw) ? raw : [];\n });\n\n readonly parsed = computed<ParsedAssistContent>(() => {\n if (this.isStreaming()) {\n return { thinking: null, body: '' };\n }\n const line = this.assistPayloadLine();\n if (line) {\n const textParts = axmAssistUserVisibleItemsForLine(line)\n .filter((i): i is { kind: 'text'; content: string } => i.kind === 'text')\n .map((i) => axmParseAssistTranscriptTextEnvelope(i.content).body.trim())\n .filter((t) => t.length > 0);\n return { thinking: null, body: textParts.join('\\n\\n') };\n }\n return { thinking: null, body: '' };\n });\n\n /** Non-debug finalized UI already shows {@link assistPayloadLine}; debug fallback must not duplicate it. */\n readonly assistNonDebugPayloadFinalShown = computed(() => {\n if (this.showDebugUi() || this.isStreaming()) {\n return false;\n }\n const line = this.assistPayloadLine();\n return line != null && axmAssistUserVisibleItemsForLine(line).length > 0;\n });\n\n //#endregion\n\n //#region ---- Formatters ----\n\n formatArgs(args: unknown): string {\n if (args == null) return '';\n if (typeof args === 'string') return this.tryPrettyJson(args);\n try {\n return JSON.stringify(args, null, 2);\n } catch {\n return String(args);\n }\n }\n\n formatJson(raw: string): string {\n return this.tryPrettyJson(raw);\n }\n\n //#endregion\n\n //#region ---- Utilities ----\n\n private readMeta(key: string): unknown {\n const meta = this.message().metadata;\n if (typeof meta !== 'object' || meta == null) return undefined;\n return (meta as Record<string, unknown>)[key];\n }\n\n private tryPrettyJson(raw: string): string {\n const trimmed = raw.trim();\n if (!trimmed) return '';\n try {\n return JSON.stringify(JSON.parse(trimmed), null, 2);\n } catch {\n return raw;\n }\n }\n\n private extractAgentIdFromCommand(command: unknown): string | null {\n if (typeof command !== 'string') {\n return null;\n }\n const [prefix, id] = command.split(':');\n if (prefix?.trim().toLowerCase() !== 'agent') {\n return null;\n }\n const resolvedId = id?.trim();\n return resolvedId ? resolvedId : null;\n }\n\n private ensureAgentTitleLoaded(agentId: string): void {\n if (!agentId || this.agentTitleById()[agentId] || this.loadingAgentIds.has(agentId)) {\n return;\n }\n this.loadingAgentIds.add(agentId);\n void this.agentData\n .byKey(agentId)\n .then((agent) => {\n const title = (\n this.translation.resolve(agent?.title as AXPMultiLanguageString)?.trim() ||\n agent?.name?.trim() ||\n agent?.id ||\n agentId\n ).trim();\n this.agentTitleById.update((current) => ({ ...current, [agentId]: title }));\n })\n .catch(() => {\n this.agentTitleById.update((current) => ({ ...current, [agentId]: agentId }));\n })\n .finally(() => {\n this.loadingAgentIds.delete(agentId);\n });\n }\n\n private async syncDebugMode(): Promise<void> {\n try {\n const debugMode = await this.settingsService\n .scope(AXPPlatformScope.Tenant)\n .get<boolean>(AXPCommonSettings.DebugMode);\n this.debugModeEnabled.set(!!debugMode);\n } catch {\n this.debugModeEnabled.set(false);\n } finally {\n this.debugModeResolved.set(true);\n }\n }\n\n //#endregion\n}\n\n//#endregion","<div class=\"axm-assist-renderer\">\n @if (showDebugUi() && useTranscriptUi()) {\n <div\n class=\"axm-assist-bot\"\n role=\"region\"\n [attr.aria-label]=\"('@conversation:chat.assist-renderer.aria.assistant-response' | translate | async) ?? ''\"\n >\n @for (item of visibleTranscriptLines(); track item.lineIndex) {\n @let line = item.line;\n @let lineIndex = item.lineIndex;\n <div\n class=\"axm-assist-bot__line\"\n [class.axm-assist-bot__line--user]=\"line.role === 'user'\"\n [class.axm-assist-bot__line--tool-role]=\"line.role === 'tool'\"\n >\n @for (seg of line.responses; track segIndex; let segIndex = $index) {\n @if (line.role === 'user' && seg.type === 'file') {\n <axm-assist-bot-image-line\n [parentMessage]=\"message()\"\n [fileId]=\"seg.content.fileId\"\n [mimeType]=\"seg.content.mimeType\"\n [name]=\"seg.content.name\"\n />\n } @else if (line.role === 'user' && seg.type === 'text') {\n <div class=\"axm-assist-bot__segment\" [attr.dir]=\"segmentDir(seg.content)\">\n <ax-conversation-text-renderer [message]=\"syntheticTextMessage(lineIndex, segIndex, seg.content)\" />\n </div>\n } @else if (line.role === 'assistant' && seg.type === 'think' && showDebugUi()) {\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__thinking-accordion axm-assist-renderer__collapse-shell !ax-mb-0\"\n axAccordionItem\n #thinkAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistThinkKey(lineIndex, segIndex))\"\n (onClick)=\"onAssistAccordionClick($event, assistThinkKey(lineIndex, segIndex))\"\n >\n <div\n class=\"axm-assist-renderer__accordion-header\"\n axAccordionItemHeader\n role=\"button\"\n [attr.aria-expanded]=\"!thinkAcc.isCollapsed()\"\n >\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!thinkAcc.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n <i class=\"fa-light fa-brain axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n {{ '@conversation:chat.assist-renderer.sections.thinking' | translate | async }}\n </span>\n </div>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div\n class=\"axm-assist-renderer__thinking-body axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(seg.content)\"\n >\n {{ seg.content }}\n </div>\n </div>\n </div>\n </div>\n </div>\n } @else if (line.role === 'assistant' && seg.type === 'text') {\n @let parsedLine = parseAssistLineText(seg.content);\n @let displayBody = assistTranscriptAssistantTextBodyForDisplay(line, parsedLine.body);\n @if (showDebugUi() && parsedLine.thinking) {\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__thinking-accordion axm-assist-renderer__collapse-shell !ax-mb-0\"\n axAccordionItem\n #thinkAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistThinkKey(lineIndex, segIndex))\"\n (onClick)=\"onAssistAccordionClick($event, assistThinkKey(lineIndex, segIndex))\"\n >\n <div\n class=\"axm-assist-renderer__accordion-header\"\n axAccordionItemHeader\n role=\"button\"\n [attr.aria-expanded]=\"!thinkAcc.isCollapsed()\"\n >\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!thinkAcc.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n <i class=\"fa-light fa-brain axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n {{ '@conversation:chat.assist-renderer.sections.thinking' | translate | async }}\n </span>\n </div>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div\n class=\"axm-assist-renderer__thinking-body axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(parsedLine.thinking)\"\n >\n {{ parsedLine.thinking }}\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n @if (displayBody.trim()) {\n <div class=\"axm-assist-bot__segment axm-assist-renderer__markdown\" [attr.dir]=\"segmentDir(displayBody)\">\n <axp-markdown-viewer [markdown]=\"displayBody\">\n <ng-template axpMarkdownTemplate=\"code\" let-segment>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"markdownCodeValue(segment)\"\n [readonly]=\"true\"\n [language]=\"markdownCodeLanguage(segment)\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n </ng-template>\n </axp-markdown-viewer>\n </div>\n }\n } @else if (\n line.role === 'assistant' &&\n (seg.type === 'agent' || seg.type === 'tool') &&\n isDelegatedAgentCommand(seg.content.command)\n ) {\n @if (showDebugUi()) {\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__tool-card axm-assist-renderer__collapse-shell !ax-mb-0\"\n axAccordionItem\n #agentDebugAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistAgentKey(seg.callId))\"\n (onClick)=\"onAssistAccordionClick($event, assistAgentKey(seg.callId))\"\n >\n <div class=\"axm-assist-renderer__accordion-header\" axAccordionItemHeader>\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!agentDebugAcc.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n <i class=\"fa-light fa-screwdriver-wrench axm-assist-renderer__tool-title-icon\"></i>\n {{ resolveToolDisplayTitle(seg.content.command) }}\n </span>\n </div>\n <div class=\"axm-assist-renderer__header-trailing\">\n <span class=\"axm-assist-renderer__badge axm-assist-renderer__badge--primary\">{{\n (resolveToolBadge(seg.content.command, '@conversation:chat.assist-renderer.badges.agent')\n | translate\n | async) ?? ''\n }}</span>\n </div>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div class=\"axm-assist-renderer__tool-body\">\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.input' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatArgs(seg.content.arguments)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n @if (toolResultForCallId(seg.callId); as resultLine) {\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.output' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatToolResultBody(resultLine)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n }\n </div>\n <div class=\"axm-assist-renderer__delegated-agent-detail-link\">\n <ax-button\n look=\"link\"\n color=\"primary\"\n class=\"ax-sm\"\n [text]=\"('@conversation:chat.assist-renderer.delegated-agent.detail' | translate | async) ?? ''\"\n [attr.aria-label]=\"\n ('@conversation:chat.assist-renderer.delegated-agent.detail-aria' | translate | async) ??\n ''\n \"\n (onClick)=\"\n openDelegatedAgentTranscriptDialog(\n seg.callId,\n seg.content.command,\n delegatedAgentLabelForCall(seg.callId)\n )\n \"\n ></ax-button>\n </div>\n </div>\n </div>\n </div>\n </div>\n } @else {\n @let res = toolResultForCallId(seg.callId);\n @let outcomeSegs = delegatedAgentOutcomeSegmentsForCall(res);\n @if (outcomeSegs.length > 0) {\n @for (outSeg of outcomeSegs; track $index) {\n @switch (outSeg.type) {\n @case ('text') {\n @let parsedOut = parseAssistLineText(outSeg.content);\n @if (parsedOut.body.trim()) {\n <div\n class=\"axm-assist-bot__segment axm-assist-renderer__markdown\"\n [attr.dir]=\"segmentDir(parsedOut.body)\"\n >\n <axp-markdown-viewer [markdown]=\"parsedOut.body\">\n <ng-template axpMarkdownTemplate=\"code\" let-segment>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"markdownCodeValue(segment)\"\n [readonly]=\"true\"\n [language]=\"markdownCodeLanguage(segment)\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n </ng-template>\n </axp-markdown-viewer>\n </div>\n }\n }\n @case ('think') {\n @if (showDebugUi()) {\n <div class=\"axm-assist-bot__segment\" [attr.dir]=\"segmentDir(outSeg.content)\">\n {{ outSeg.content }}\n </div>\n }\n }\n @case ('file') {\n <axm-assist-bot-image-line\n [parentMessage]=\"message()\"\n [fileId]=\"outSeg.content.fileId\"\n [mimeType]=\"outSeg.content.mimeType\"\n [name]=\"outSeg.content.name\"\n />\n }\n @case ('node') {\n @let assistNodeWidget = axmAssistWidgetNodeFromUnknown(outSeg.content);\n @if (assistNodeWidget) {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-chat-user-form-renderer\n [message]=\"syntheticNodeEmbedMessage(lineIndex, segIndex * 1000 + $index, outSeg.content)\"\n />\n </div>\n }\n }\n }\n }\n } @else if (delegatedAgentAnswerForCall(res).trim()) {\n @let agentFallbackText = delegatedAgentAnswerForCall(res);\n <div\n class=\"axm-assist-bot__segment axm-assist-renderer__markdown\"\n [attr.dir]=\"segmentDir(agentFallbackText)\"\n >\n <axp-markdown-viewer [markdown]=\"agentFallbackText\">\n <ng-template axpMarkdownTemplate=\"code\" let-segment>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"markdownCodeValue(segment)\"\n [readonly]=\"true\"\n [language]=\"markdownCodeLanguage(segment)\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n </ng-template>\n </axp-markdown-viewer>\n </div>\n }\n <div class=\"axm-assist-renderer__delegated-agent-detail-link\">\n <ax-button\n look=\"link\"\n color=\"primary\"\n class=\"ax-sm\"\n [text]=\"('@conversation:chat.assist-renderer.delegated-agent.detail' | translate | async) ?? ''\"\n [attr.aria-label]=\"\n ('@conversation:chat.assist-renderer.delegated-agent.detail-aria' | translate | async) ?? ''\n \"\n (onClick)=\"\n openDelegatedAgentTranscriptDialog(\n seg.callId,\n seg.content.command,\n delegatedAgentLabelForCall(seg.callId)\n )\n \"\n ></ax-button>\n </div>\n }\n } @else if (line.role === 'assistant' && seg.type === 'tool' && showDebugUi()) {\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__tool-card axm-assist-renderer__collapse-shell !ax-mb-0\"\n axAccordionItem\n #toolDebugAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistToolKey(seg.callId))\"\n (onClick)=\"onAssistAccordionClick($event, assistToolKey(seg.callId))\"\n >\n <div class=\"axm-assist-renderer__accordion-header\" axAccordionItemHeader>\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!toolDebugAcc.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n <i class=\"fa-light fa-screwdriver-wrench axm-assist-renderer__tool-title-icon\"></i>\n {{ resolveToolDisplayTitle(seg.content.command) }}\n </span>\n </div>\n <span class=\"axm-assist-renderer__badge axm-assist-renderer__badge--primary\">{{\n (resolveToolBadge(seg.content.command, '@conversation:chat.assist-renderer.badges.tool')\n | translate\n | async) ?? ''\n }}</span>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div class=\"axm-assist-renderer__tool-body\">\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.input' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatArgs(seg.content.arguments)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n @if (toolResultForCallId(seg.callId); as resultLine) {\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.output' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatToolResultBody(resultLine)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n } @else if (line.role === 'assistant' && seg.type === 'node') {\n @let assistNodeWidget = axmAssistWidgetNodeFromUnknown(seg.content);\n @if (assistNodeWidget) {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-chat-user-form-renderer\n [message]=\"syntheticNodeEmbedMessage(lineIndex, segIndex, seg.content)\"\n />\n </div>\n }\n } @else if (line.role === 'assistant' && seg.type === 'file') {\n <axm-assist-bot-image-line\n [parentMessage]=\"message()\"\n [fileId]=\"seg.content.fileId\"\n [mimeType]=\"seg.content.mimeType\"\n [name]=\"seg.content.name\"\n />\n } @else if (line.role === 'tool' && (seg.type === 'tool_result' || seg.type === 'agent_result')) {\n <!-- merged into the corresponding tool/agent accordion -->\n } @else if (line.role === 'system' && seg.type === 'text' && showDebugUi()) {\n <div class=\"axm-assist-bot__segment\" [attr.dir]=\"segmentDir(seg.content)\">\n <ax-conversation-text-renderer [message]=\"syntheticTextMessage(lineIndex, segIndex, seg.content)\" />\n </div>\n } @else {\n @if (showDebugUi() || line.role !== 'assistant') {\n <div\n class=\"axm-assist-bot__fallback axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(formatFallbackSegment(seg))\"\n >\n {{ formatFallbackSegment(seg) }}\n </div>\n }\n }\n }\n </div>\n }\n @if (isStreaming()) {\n <div class=\"axm-assist-renderer__streaming-activity\" role=\"status\" aria-live=\"polite\">\n <span\n class=\"axm-assist-renderer__activity-spin ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent fa-spin ax-shrink-0\"\n aria-hidden=\"true\"\n ></span>\n <span class=\"axm-assist-renderer__activity-label ax-text-xs ax-text-muted ax-italic\">{{\n assistActivityMessageKey() | translate | async\n }}</span>\n </div>\n }\n <!-- @if (isStreaming() && streamText().trim()) {\n <span class=\"axm-assist-renderer__cursor\" aria-hidden=\"true\"></span>\n } -->\n </div>\n } @else if (!showDebugUi() && !isStreaming()) {\n @if (assistPayloadLine(); as line) {\n <div\n role=\"region\"\n [attr.aria-label]=\"('@conversation:chat.assist-renderer.aria.assistant-response' | translate | async) ?? ''\"\n >\n <axm-assist-transcript-user-line [line]=\"line\" [parentMessage]=\"message()\" />\n </div>\n }\n } @else if (!showDebugUi() && isStreaming()) {\n <div class=\"axm-assist-renderer__stream-content axm-assist-renderer__stream-content--non-debug\">\n <div class=\"axm-assist-renderer__streaming-activity\" role=\"status\" aria-live=\"polite\">\n <span\n class=\"axm-assist-renderer__activity-spin ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent fa-spin ax-shrink-0\"\n aria-hidden=\"true\"\n ></span>\n <span class=\"axm-assist-renderer__activity-label ax-text-xs ax-text-muted ax-italic\">{{\n assistActivityMessageKey() | translate | async\n }}</span>\n </div>\n </div>\n } @else if (showDebugUi()) {\n @if (isStreaming()) {\n <div class=\"axm-assist-renderer__stream-content\">\n <div class=\"axm-assist-renderer__streaming-activity\" role=\"status\" aria-live=\"polite\">\n <span\n class=\"axm-assist-renderer__activity-spin ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent fa-spin ax-shrink-0\"\n aria-hidden=\"true\"\n ></span>\n <span class=\"axm-assist-renderer__activity-label ax-text-xs ax-text-muted ax-italic\">{{\n assistActivityMessageKey() | translate | async\n }}</span>\n </div>\n @if (streamThink().trim()) {\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__thinking-accordion axm-assist-renderer__collapse-shell !ax-mb-0\"\n axAccordionItem\n #thinkAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistThinkStreamKey())\"\n (onClick)=\"onAssistAccordionClick($event, assistThinkStreamKey())\"\n >\n <div\n class=\"axm-assist-renderer__accordion-header\"\n axAccordionItemHeader\n role=\"button\"\n [attr.aria-expanded]=\"!thinkAcc.isCollapsed()\"\n >\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!thinkAcc.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n <i class=\"fa-light fa-brain axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n {{ '@conversation:chat.assist-renderer.sections.thinking' | translate | async }}\n </span>\n </div>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div\n class=\"axm-assist-renderer__thinking-body axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(streamThink())\"\n >\n {{ streamThink() }}\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n @if (streamText()) {\n <div class=\"axm-assist-renderer__text axm-assist-bot__segment\" [attr.dir]=\"segmentDir(streamText())\">\n {{ streamText() }}\n </div>\n }\n @if (toolCalls().length) {\n <div class=\"axm-assist-renderer__tools\">\n @for (tc of toolCalls(); track tc.id) {\n @if (isDelegatedAgentCommand(tc.name)) {\n @let legacyAgentAns = delegatedAnswerFromToolOutputString(tc.output);\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__tool-card axm-assist-renderer__agent-accordion axm-assist-renderer__collapse-shell\"\n axAccordionItem\n #legacyAgentAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistAgentKey(tc.id))\"\n (onClick)=\"onAssistAccordionClick($event, assistAgentKey(tc.id))\"\n >\n <div\n class=\"axm-assist-renderer__accordion-header\"\n axAccordionItemHeader\n role=\"button\"\n [attr.aria-expanded]=\"!legacyAgentAcc.isCollapsed()\"\n >\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span\n class=\"axm-assist-renderer__accordion-header-title ax-inline-flex ax-items-center ax-gap-2 ax-flex-wrap\"\n >\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!legacyAgentAcc.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n @if (tc.state === 'running') {\n <span\n class=\"axm-assist-renderer__agent-live-spin ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent fa-spin ax-shrink-0\"\n aria-hidden=\"true\"\n ></span>\n } @else {\n <span\n class=\"ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-bg-success-500 ax-shrink-0\"\n aria-hidden=\"true\"\n ></span>\n }\n <i class=\"fa-light fa-people-group ax-text-primary-500\" aria-hidden=\"true\"></i>\n <span class=\"axm-assist-renderer__agent-live-title\">{{\n resolveToolDisplayTitle(tc.name)\n }}</span>\n </span>\n </div>\n <div class=\"axm-assist-renderer__header-trailing\">\n <span\n class=\"axm-assist-renderer__badge\"\n [class.axm-assist-renderer__badge--primary]=\"tc.state === 'running'\"\n [class.axm-assist-renderer__badge--success]=\"tc.state !== 'running'\"\n >\n {{\n (resolveToolBadge(\n tc.name,\n tc.state === 'running'\n ? '@conversation:chat.assist-renderer.badges.running'\n : '@conversation:chat.assist-renderer.badges.agent'\n )\n | translate\n | async) ?? ''\n }}\n </span>\n </div>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div\n class=\"axm-assist-renderer__agent-live-block axm-assist-renderer__agent-live-block--in-accordion\"\n role=\"region\"\n >\n <div\n class=\"axm-assist-renderer__agent-live-prompt\"\n [attr.dir]=\"segmentDir(delegatedPromptPreview(tc.arguments))\"\n >\n {{ delegatedPromptPreview(tc.arguments) }}\n </div>\n @if (tc.nestedStreamText?.trim()) {\n <div\n class=\"axm-assist-renderer__agent-live-stream\"\n [attr.dir]=\"segmentDir(tc.nestedStreamText ?? '')\"\n >\n {{ tc.nestedStreamText }}\n </div>\n }\n @if (tc.nestedTools?.length) {\n <div class=\"axm-assist-renderer__agent-live-nested-tools\">\n @for (nt of tc.nestedTools; track nt.id) {\n <div class=\"axm-assist-renderer__agent-live-nested-row\">\n @if (nt.state === 'running') {\n <span\n class=\"ax-inline-block ax-w-2.5 ax-h-2.5 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent fa-spin ax-shrink-0\"\n aria-hidden=\"true\"\n ></span>\n } @else {\n <span\n class=\"ax-inline-block ax-w-2.5 ax-h-2.5 ax-rounded-full ax-bg-success-500 ax-shrink-0\"\n aria-hidden=\"true\"\n ></span>\n }\n <code class=\"axm-assist-renderer__agent-live-nested-name\">{{ nt.name }}</code>\n <span class=\"axm-assist-renderer__agent-live-nested-status\">{{\n nt.state === 'running' ? '…' : '✓'\n }}</span>\n </div>\n }\n </div>\n }\n @if (legacyAgentAns) {\n <div class=\"axm-assist-renderer__agent-live-nested-tools\">\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.agent-answer' | translate | async }}\n </div>\n <div\n class=\"axm-assist-renderer__agent-live-stream\"\n [attr.dir]=\"segmentDir(legacyAgentAns)\"\n >\n {{ legacyAgentAns }}\n </div>\n </div>\n }\n </div>\n @if (tc.state !== 'running') {\n <div class=\"axm-assist-renderer__delegated-agent-detail-link\">\n <ax-button\n look=\"link\"\n color=\"primary\"\n class=\"ax-sm\"\n [text]=\"('@conversation:chat.assist-renderer.delegated-agent.detail' | translate | async) ?? ''\"\n [attr.aria-label]=\"\n ('@conversation:chat.assist-renderer.delegated-agent.detail-aria' | translate | async) ??\n ''\n \"\n (onClick)=\"\n openDelegatedAgentTranscriptDialog(tc.id, tc.name, delegatedAgentLabelForCall(tc.id))\n \"\n ></ax-button>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n } @else {\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__tool-card axm-assist-renderer__collapse-shell\"\n axAccordionItem\n #legacyStreamDbgAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistLegacyToolAccordionKey(tc))\"\n (onClick)=\"onAssistLegacyAccordionClick($event, tc)\"\n >\n <div class=\"axm-assist-renderer__accordion-header\" axAccordionItemHeader>\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!legacyStreamDbgAcc.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n <i class=\"fa-light fa-screwdriver-wrench axm-assist-renderer__tool-title-icon\"></i>\n {{ resolveToolDisplayTitle(tc.name) }}\n </span>\n </div>\n <span\n class=\"axm-assist-renderer__badge\"\n [class.axm-assist-renderer__badge--primary]=\"tc.state === 'running'\"\n [class.axm-assist-renderer__badge--success]=\"tc.state === 'done'\"\n >\n {{\n (resolveToolBadge(\n tc.name,\n tc.state === 'running'\n ? '@conversation:chat.assist-renderer.badges.running'\n : '@conversation:chat.assist-renderer.badges.done'\n )\n | translate\n | async) ?? ''\n }}\n </span>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div class=\"axm-assist-renderer__tool-body\">\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.input' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatArgs(tc.arguments)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n @if (tc.output) {\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.output' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatJson(tc.output)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n }\n </div>\n }\n @if (isStreaming() && streamText().trim()) {\n <span class=\"axm-assist-renderer__cursor\"></span>\n } @else if (isStreaming() && !streamText().trim() && !streamThink().trim() && !toolCalls().length) {\n <div class=\"axm-assist-renderer__waiting\">\n <span class=\"axm-assist-renderer__dot\"></span>\n <span class=\"axm-assist-renderer__dot\"></span>\n <span class=\"axm-assist-renderer__dot\"></span>\n </div>\n }\n </div>\n } @else {\n @if (parsed().thinking) {\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__thinking-accordion axm-assist-renderer__collapse-shell !ax-mb-0\"\n axAccordionItem\n #thinkAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistThinkFinalKey())\"\n (onClick)=\"onAssistAccordionClick($event, assistThinkFinalKey())\"\n >\n <div\n class=\"axm-assist-renderer__accordion-header\"\n axAccordionItemHeader\n role=\"button\"\n [attr.aria-expanded]=\"!thinkAcc.isCollapsed()\"\n >\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!thinkAcc.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n <i class=\"fa-light fa-brain axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n {{ '@conversation:chat.assist-renderer.sections.thinking' | translate | async }}\n </span>\n </div>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div\n class=\"axm-assist-renderer__thinking-body axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(parsed().thinking)\"\n >\n {{ parsed().thinking }}\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n @if (toolCalls().length) {\n <div class=\"axm-assist-renderer__tools\">\n @for (tc of toolCalls(); track tc.id) {\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__tool-card axm-assist-renderer__collapse-shell\"\n axAccordionItem\n #legacyDoneDbgAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistLegacyToolAccordionKey(tc))\"\n (onClick)=\"onAssistLegacyAccordionClick($event, tc)\"\n >\n <div class=\"axm-assist-renderer__accordion-header\" axAccordionItemHeader>\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!legacyDoneDbgAcc.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n <i class=\"fa-light fa-screwdriver-wrench axm-assist-renderer__tool-title-icon\"></i>\n {{ resolveToolDisplayTitle(tc.name) }}\n </span>\n </div>\n <span class=\"axm-assist-renderer__badge axm-assist-renderer__badge--success\">{{\n (resolveToolBadge(tc.name, '@conversation:chat.assist-renderer.badges.done') | translate | async) ??\n ''\n }}</span>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div class=\"axm-assist-renderer__tool-body\">\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.input' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatArgs(tc.arguments)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n @if (tc.nestedStreamText?.trim()) {\n <div\n class=\"axm-assist-renderer__text axm-assist-bot__segment ax-pt-1\"\n [attr.dir]=\"segmentDir(tc.nestedStreamText ?? '')\"\n >\n {{ tc.nestedStreamText }}\n </div>\n }\n @if (tc.output) {\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.output' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatJson(tc.output)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n }\n @if (parsed().body && !assistNonDebugPayloadFinalShown()) {\n <div\n class=\"axm-assist-renderer__text axm-assist-bot__segment axm-assist-renderer__markdown\"\n [attr.dir]=\"segmentDir(parsed().body)\"\n >\n <axp-markdown-viewer [markdown]=\"parsed().body\">\n <ng-template axpMarkdownTemplate=\"code\" let-segment>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"markdownCodeValue(segment)\"\n [readonly]=\"true\"\n [language]=\"markdownCodeLanguage(segment)\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n </ng-template>\n </axp-markdown-viewer>\n </div>\n }\n }\n }\n @if (showDebugUi() && !isStreaming() && assistDebugFollowUpItems().length > 0) {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-assist-suggestion-chips [items]=\"assistDebugFollowUpItems()\" />\n </div>\n }\n @if (showDebugUi() && assistRunDebug(); as dbg) {\n <footer\n class=\"axm-assist-renderer__run-meta-wrap\"\n role=\"region\"\n [attr.aria-label]=\"('@conversation:chat.assist-renderer.aria.run-usage' | translate | async) ?? ''\"\n >\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__thinking-accordion axm-assist-renderer__collapse-shell axm-assist-renderer__run-meta-accordion !ax-mb-0\"\n axAccordionItem\n #runMetaAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistRunMetaKey())\"\n (onClick)=\"onAssistAccordionClick($event, assistRunMetaKey())\"\n >\n <div\n class=\"axm-assist-renderer__accordion-header\"\n axAccordionItemHeader\n role=\"button\"\n [attr.aria-expanded]=\"!runMetaAcc.isCollapsed()\"\n >\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!runMetaAcc.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n <i class=\"fa-light fa-chart-line axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n {{ '@conversation:chat.assist-renderer.run-meta.title' | translate | async }}\n </span>\n <!-- @if (dbg.modelTitle || dbg.modelEntityId) {\n <span class=\"axm-assist-renderer__run-meta-header-sub\">{{ dbg.modelTitle || dbg.modelEntityId }}</span>\n } -->\n </div>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div class=\"axm-assist-renderer__run-meta axm-assist-renderer__run-meta--panel\">\n <div class=\"axm-assist-renderer__run-meta-grid\">\n @if (dbg.modelTitle || dbg.modelEntityId) {\n <div class=\"axm-assist-renderer__meta-tile axm-assist-renderer__meta-tile--wide\">\n <div class=\"axm-assist-renderer__meta-tile-label\">\n {{ '@conversation:chat.assist-renderer.run-meta.model' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__meta-tile-value\">{{ dbg.modelTitle || dbg.modelEntityId }}</div>\n <!-- @if (dbg.modelTitle && dbg.modelEntityId) {\n <div class=\"axm-assist-renderer__meta-tile-sub\">{{ dbg.modelEntityId }}</div>\n } -->\n </div>\n }\n @if (dbg.durationMs != null) {\n <div class=\"axm-assist-renderer__meta-tile\">\n <div class=\"axm-assist-renderer__meta-tile-label\">\n {{ '@conversation:chat.assist-renderer.run-meta.duration' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__meta-tile-value axm-assist-renderer__meta-tile-value--mono\">\n {{ formatAssistRunDuration(dbg.durationMs) }}\n </div>\n </div>\n }\n @if (dbg.usage; as totals) {\n <div class=\"axm-assist-renderer__meta-tile\">\n <div class=\"axm-assist-renderer__meta-tile-label\">\n {{ '@ai-management:chat.usage-prompt' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__meta-tile-value axm-assist-renderer__meta-tile-value--mono\">\n {{ totals.promptTokens | number }}\n @if (totals.cachedPromptTokens) {\n <span class=\"axm-assist-renderer__meta-tile-note\">\n (+{{ totals.cachedPromptTokens | number }}\n {{ '@ai-management:chat.usage-cached' | translate | async }})\n </span>\n }\n </div>\n </div>\n <div class=\"axm-assist-renderer__meta-tile\">\n <div class=\"axm-assist-renderer__meta-tile-label\">\n {{ '@ai-management:chat.usage-completion' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__meta-tile-value axm-assist-renderer__meta-tile-value--mono\">\n {{ totals.completionTokens | number }}\n </div>\n </div>\n <div class=\"axm-assist-renderer__meta-tile axm-assist-renderer__meta-tile--accent\">\n <div class=\"axm-assist-renderer__meta-tile-label\">\n {{ '@conversation:chat.assist-renderer.run-meta.total-tokens' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__meta-tile-value axm-assist-renderer__meta-tile-value--mono\">\n {{ totals.totalTokens | number }}\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </footer>\n }\n</div>\n","import type { AXMessageRenderer } from '@acorex/components/conversation2';\nimport { AXMAssistMessageRendererComponent } from './assist-message-renderer.component';\n\n/**\n * Renderer for AI assist (bot) responses.\n *\n * When `metadata.transcripts` / `metadata.transcriptDraft` contains\n * `AXPAiChatMessage` lines, the UI maps each line by `role` and\n * segment `type` inside `responses` to the same building blocks as the AI chat page (text,\n * image, tool cards, tool results, layout nodes). Otherwise it falls back\n * to the legacy assist layout (streaming dots, `toolCalls` metadata).\n * Text segments set `dir=\"rtl\"` per block when the content includes Arabic script (e.g. Persian).\n */\nexport const AXM_CONVERSATION_BOT_RENDERER: AXMessageRenderer = {\n type: 'assist-response',\n component: AXMAssistMessageRendererComponent,\n canHandle: (message) =>\n message.type === 'assist-response' || !!(message.metadata as Record<string, unknown>)?.['isAssistResponse'],\n capabilities: {\n supportsReactions: false,\n supportsReplies: false,\n supportsEdit: false,\n supportsForward: false,\n supportsSelection: true,\n },\n displayName: 'AI Assist (transcript)',\n icon: 'fa-light fa-sparkles',\n};\n","import type { AXMessageRenderer } from '@acorex/components/conversation2';\nimport { AXMNodeMessageRendererComponent } from './node-message-renderer.component';\n\n// const AXM_USER_FORM_NODE: AXPWidgetNode = {\n// type: 'flex-layout',\n// name: 'node-layout',\n// options: {\n// gap: '12px',\n// flexWrap: 'wrap',\n// justifyContent: 'start',\n// alignItems: 'start',\n// },\n// children: [\n// {\n// type: 'flex-item-layout',\n// name: 'name-field-layout',\n// children: [\n// {\n// type: 'text-editor',\n// name: 'name',\n// path: 'form.name',\n// options: { placeholder: 'Name', readonly: false, disabled: false },\n// },\n// ],\n// },\n// {\n// type: 'flex-item-layout',\n// name: 'family-field-layout',\n// children: [\n// {\n// type: 'text-editor',\n// name: 'family',\n// path: 'form.family',\n// options: { placeholder: 'Family', readonly: false, disabled: false },\n// },\n// ],\n// },\n// ],\n// };\n\n// export const AXM_CONVERSATION_COMPOSER_USER_FORM_ACTION: AXComposerAction = {\n// id: 'node',\n// label: 'User Form',\n// icon: 'fa-light fa-rectangle-list',\n// position: 'right',\n// location: 'menu',\n// priority: 35,\n// visible: (context) => !context.isEditing,\n// handler: async (context) => {\n// if (!context.conversationService || !context.conversationId) {\n// return;\n// }\n// const payload: AXMUserFormPayload = {\n// type: 'node',\n// node: AXM_USER_FORM_NODE,\n// value: { form: { name: '', family: '' } },\n// };\n// await context.conversationService.sendMessage({\n// conversationId: context.conversationId,\n// type: 'node',\n// payload: payload as unknown as AXMessagePayload,\n// });\n// },\n// tooltip: 'Send user form',\n// };\n\nexport const AXM_CONVERSATION_NODE_RENDERER: AXMessageRenderer = {\n type: 'node',\n component: AXMNodeMessageRendererComponent,\n canHandle: (message) => message.type === 'node',\n capabilities: {\n supportsReactions: false,\n supportsReplies: true,\n supportsEdit: false,\n supportsForward: false,\n supportsSelection: true,\n },\n displayName: 'User Form',\n icon: 'fa-light fa-rectangle-list',\n};\n","//#region ---- Imports ----\n\nimport {\n AX_CONVERSATION_AUDIO_RENDERER,\n AX_CONVERSATION_COMPOSER_AUDIO_ACTION,\n AX_CONVERSATION_COMPOSER_EMOJI_ACTION,\n AX_CONVERSATION_COMPOSER_EMOJI_TAB,\n AX_CONVERSATION_COMPOSER_FILE_ACTION,\n AX_CONVERSATION_COMPOSER_IMAGE_ACTION,\n AX_CONVERSATION_COMPOSER_LOCATION_ACTION,\n AX_CONVERSATION_COMPOSER_STICKER_TAB,\n AX_CONVERSATION_COMPOSER_VIDEO_ACTION,\n AX_CONVERSATION_FILE_RENDERER,\n AX_CONVERSATION_IMAGE_RENDERER,\n AX_CONVERSATION_INFO_BAR_BLOCK_ACTION,\n AX_CONVERSATION_INFO_BAR_DELETE_ACTION,\n AX_CONVERSATION_INFO_BAR_DIVIDER,\n AX_CONVERSATION_INFO_BAR_INFO_ACTION,\n AX_CONVERSATION_INFO_BAR_MUTE_ACTION,\n AX_CONVERSATION_INFO_BAR_SEARCH_ACTION,\n AX_CONVERSATION_ITEM_BLOCK_ACTION,\n AX_CONVERSATION_ITEM_DELETE_ACTION,\n AX_CONVERSATION_ITEM_DIVIDER,\n AX_CONVERSATION_ITEM_MARK_READ_ACTION,\n AX_CONVERSATION_ITEM_MUTE_ACTION,\n AX_CONVERSATION_ITEM_PIN_ACTION,\n AX_CONVERSATION_LOCATION_RENDERER,\n AX_CONVERSATION_MESSAGE_DELETE_ACTION,\n AX_CONVERSATION_MESSAGE_EDIT_ACTION,\n AX_CONVERSATION_MESSAGE_FORWARD_ACTION,\n AX_CONVERSATION_MESSAGE_REPLY_ACTION,\n AX_CONVERSATION_STICKER_RENDERER,\n AX_CONVERSATION_TAB_ALL,\n AX_CONVERSATION_TAB_GROUPS,\n AX_CONVERSATION_TAB_PRIVATE,\n AX_CONVERSATION_TEXT_RENDERER,\n AX_CONVERSATION_VIDEO_RENDERER,\n AX_CONVERSATION_VOICE_RENDERER,\n AXComposerService,\n AXConversationApi,\n AXMessage,\n AXMessageApi,\n AXRealtimeApi,\n AXUserApi,\n provideConversation,\n} from '@acorex/components/conversation2';\nimport { inject, Type } from '@angular/core';\nimport {\n AXM_DOWNLOAD_ASSIST_CONVERSATION_DEBUG_ACTION,\n AXM_DOWNLOAD_ASSIST_MESSAGE_DEBUG_ACTION,\n} from './plugins/actions/copy-debug-information.actions';\nimport { AXM_RENAME_ASSIST_CONVERSATION_ACTION } from './plugins/actions/rename-assist-conversation.action';\nimport { AXM_CHAT_COMPOSER_VOICE_RECORDING_ACTION } from './plugins/composer/chat-voice-recording-composer.action';\nimport { AXM_CHAT_INFO_BAR_ASSIST_MODEL_ACTION } from './plugins/info-bar-actions/chat-info-bar-actions';\nimport { AXM_CONVERSATION_BOT_RENDERER } from './plugins/message-renderers/assist-message-renderer.plugin';\nimport { AXM_CONVERSATION_NODE_RENDERER } from './plugins/message-renderers/node-message-renderer.plugin';\nimport {\n AXMChatConversationApi,\n AXMChatMessageApi,\n AXMChatRealtimeApi,\n AXMChatUserApi,\n} from './plugins/services/chat-conversation-apis.abstract';\nimport { AXM_CONVERSATION_TAB_BOT } from './plugins/tabs/chat-conversation-tabs';\n\n//#endregion\n\n//#region ---- Assist conversation helpers ----\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction extractMessageCopyText(message: AXMessage | null | undefined): string {\n if (!message) {\n return '';\n }\n\n if (!isRecord(message.payload)) {\n return '';\n }\n\n const payloadText = message.payload['text'];\n if (typeof payloadText === 'string') {\n return payloadText.trim();\n }\n\n const payloadContent = message.payload['content'];\n if (typeof payloadContent === 'string') {\n return payloadContent.trim();\n }\n\n const payloadResponses = message.payload['responses'];\n if (Array.isArray(payloadResponses)) {\n const collected = payloadResponses\n .map((response) => {\n if (!isRecord(response)) {\n return '';\n }\n const content = response['content'];\n return typeof content === 'string' ? content.trim() : '';\n })\n .filter((part) => part.length > 0)\n .join('\\n\\n')\n .trim();\n if (collected.length > 0) {\n return collected;\n }\n }\n\n return '';\n}\n\nasync function copyMessageText(message: AXMessage): Promise<void> {\n const copyText = extractMessageCopyText(message);\n if (!copyText) {\n return;\n }\n await globalThis.navigator?.clipboard?.writeText?.(copyText);\n}\n\n//#region ---- Providers ----\n\n/**\n * Registers `@acorex/components/conversation2` for the whole conversation module so\n * {@link AXConversationService} is available outside {@link AXMChatComponent} (e.g. org chart contributions).\n */\nexport const AXM_CHAT_CONVERSATION2_PROVIDERS = [\n ...provideConversation({\n userApi: AXMChatUserApi as unknown as Type<AXUserApi>,\n conversationApi: AXMChatConversationApi as unknown as Type<AXConversationApi>,\n messageApi: AXMChatMessageApi as unknown as Type<AXMessageApi>,\n realtimeApi: AXMChatRealtimeApi as unknown as Type<AXRealtimeApi>,\n config: {},\n registry: {\n messageRenderers: [\n AXM_CONVERSATION_BOT_RENDERER,\n AXM_CONVERSATION_NODE_RENDERER,\n AX_CONVERSATION_TEXT_RENDERER,\n AX_CONVERSATION_IMAGE_RENDERER,\n AX_CONVERSATION_VIDEO_RENDERER,\n AX_CONVERSATION_AUDIO_RENDERER,\n { ...AX_CONVERSATION_VOICE_RENDERER, composerActions: [AXM_CHAT_COMPOSER_VOICE_RECORDING_ACTION] },\n AX_CONVERSATION_FILE_RENDERER,\n AX_CONVERSATION_LOCATION_RENDERER,\n AX_CONVERSATION_STICKER_RENDERER,\n ],\n messageActions: [\n AXM_DOWNLOAD_ASSIST_MESSAGE_DEBUG_ACTION,\n {\n id: 'copy-message',\n label: '@conversation:chat.actions.copy',\n icon: 'fa-light fa-copy',\n priority: 95,\n visible: (message: AXMessage) => extractMessageCopyText(message).length > 0,\n enabled: (message: AXMessage) => extractMessageCopyText(message).length > 0,\n handler: async (context: { message: AXMessage }) => {\n await copyMessageText(context.message);\n },\n },\n {\n ...AX_CONVERSATION_MESSAGE_REPLY_ACTION,\n visible: (arg: AXMessage) => arg.metadata?.['isAssistResponse'] !== true,\n handler: async (context: { message: AXMessage }) => {\n const composer = inject(AXComposerService);\n composer.startReply(context.message);\n },\n },\n AX_CONVERSATION_MESSAGE_FORWARD_ACTION,\n AX_CONVERSATION_MESSAGE_EDIT_ACTION,\n AX_CONVERSATION_MESSAGE_DELETE_ACTION,\n ],\n composerActions: [\n AX_CONVERSATION_COMPOSER_EMOJI_ACTION,\n AX_CONVERSATION_COMPOSER_IMAGE_ACTION,\n AX_CONVERSATION_COMPOSER_VIDEO_ACTION,\n AX_CONVERSATION_COMPOSER_FILE_ACTION,\n AX_CONVERSATION_COMPOSER_AUDIO_ACTION,\n AX_CONVERSATION_COMPOSER_LOCATION_ACTION,\n ],\n composerTabs: [AX_CONVERSATION_COMPOSER_EMOJI_TAB, AX_CONVERSATION_COMPOSER_STICKER_TAB],\n conversationTabs: [\n AX_CONVERSATION_TAB_ALL,\n AX_CONVERSATION_TAB_PRIVATE,\n AX_CONVERSATION_TAB_GROUPS,\n AXM_CONVERSATION_TAB_BOT,\n ],\n infoBarActions: [\n AXM_CHAT_INFO_BAR_ASSIST_MODEL_ACTION,\n AX_CONVERSATION_INFO_BAR_SEARCH_ACTION,\n AX_CONVERSATION_INFO_BAR_INFO_ACTION,\n AX_CONVERSATION_INFO_BAR_MUTE_ACTION,\n AX_CONVERSATION_INFO_BAR_DIVIDER,\n AX_CONVERSATION_INFO_BAR_DELETE_ACTION,\n AX_CONVERSATION_INFO_BAR_BLOCK_ACTION,\n ],\n conversationItemActions: [\n AXM_DOWNLOAD_ASSIST_CONVERSATION_DEBUG_ACTION,\n AXM_RENAME_ASSIST_CONVERSATION_ACTION,\n AX_CONVERSATION_ITEM_MUTE_ACTION,\n AX_CONVERSATION_ITEM_PIN_ACTION,\n AX_CONVERSATION_ITEM_MARK_READ_ACTION,\n AX_CONVERSATION_ITEM_DIVIDER,\n AX_CONVERSATION_ITEM_DELETE_ACTION,\n AX_CONVERSATION_ITEM_BLOCK_ACTION,\n ],\n },\n }),\n { provide: AXUserApi, useExisting: AXMChatUserApi },\n { provide: AXConversationApi, useExisting: AXMChatConversationApi },\n { provide: AXMessageApi, useExisting: AXMChatMessageApi },\n { provide: AXRealtimeApi, useExisting: AXMChatRealtimeApi },\n];\n\n//#endregion\n","import { AXClickEvent } from '@acorex/cdk/common';\nimport { AXMNotificationItem, AXPNotificationContent } from '@acorex/modules/notification-management';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPExecuteCommand } from '@acorex/platform/core';\nimport { AsyncPipe } from '@angular/common';\n\nimport { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\n\n@Component({\n selector: 'axm-chat-notification-content',\n template: `\n <div class=\"ax-text-sm ax-mt-1 ax-line-clamp-2\">\n <p>{{ item()?.body || (('@conversation:chat.notification.new-message' | translate | async) ?? '') }}</p>\n <div class=\"ax-flex ax-gap-2 ax-pt-2\">\n <!-- <ax-button (onClick)=\"onMarkAsSeen($event)\" [text]=\"'Mark as Seen'\"></ax-button>\n <ax-button (onClick)=\"goToChat($event)\" [text]=\"'Go to Chat'\"></ax-button> -->\n </div>\n </div>\n `,\n imports: [AXTranslationModule, AsyncPipe],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXMChatNotificationContentComponent implements AXPNotificationContent {\n item = input<AXMNotificationItem>();\n execute = output<AXPExecuteCommand>();\n\n onMarkAsSeen(e: AXClickEvent) {\n e.nativeEvent.stopPropagation();\n this.execute.emit({ name: 'mark-as-seen' });\n }\n\n goToChat(e: AXClickEvent) {\n e.nativeEvent.stopPropagation();\n this.execute.emit({ name: 'go-to-chat' });\n }\n}\n","//#region ---- Imports ----\n\nimport {\n AXMNotificationItem,\n AXP_NOTIFICATION_DEFINITION_PROVIDER,\n AXPNotificationDefinitionProvider,\n} from '@acorex/modules/notification-management';\nimport { AXPExecuteCommand } from '@acorex/platform/core';\nimport { Injector, Provider } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AXMChatManagementService } from './chat-management.service';\nimport { AXMChatNotificationContentComponent } from './chat-notification-content.component';\n\n//#endregion\n\n//#region ---- Chat Notification Provider ----\n\n/**\n * Provides notification handling and content for Chat.\n */\nexport class AXMChatNotificationProvider implements AXPNotificationDefinitionProvider {\n name = 'Chat' as const;\n title = '@conversation:chat.notification.title';\n icon = 'fa-solid fa-comment-sms';\n\n constructor(private injector: Injector) {}\n\n content() {\n return Promise.resolve(AXMChatNotificationContentComponent);\n }\n\n async execute(command: AXPExecuteCommand, item: AXMNotificationItem): Promise<void> {\n const router = this.injector.get(Router);\n const chatService = this.injector.get(AXMChatManagementService);\n const activatedRoute = this.injector.get(ActivatedRoute);\n const roomId = item.data?.['roomId'] as string;\n\n if (!roomId) {\n console.error('Room ID is missing from notification item.');\n return;\n }\n\n const app = activatedRoute.snapshot.firstChild?.paramMap.get('app') || 'platform';\n\n switch (command.name) {\n case 'mark-as-seen':\n await chatService.markRoomSeen(roomId);\n break;\n case 'go-to-chat':\n await chatService.markRoomSeen(roomId);\n router.navigate([app, 'chat', roomId]);\n break;\n case 'click':\n await chatService.markRoomSeen(roomId);\n router.navigate([app, 'chat', roomId]);\n break;\n default:\n break;\n }\n }\n}\n\n//#endregion\n\n//#region ---- Providers ----\n\n/**\n * Providers for chat notification definition registration.\n */\nexport const AXM_CHAT_NOTIFICATION_PROVIDERS: Provider[] = [\n {\n provide: AXP_NOTIFICATION_DEFINITION_PROVIDER,\n useFactory: (injector: Injector) => new AXMChatNotificationProvider(injector),\n deps: [Injector],\n multi: true,\n },\n];\n\n//#endregion\n","//#region ---- Imports ----\n\nimport {\n AXMNotificationItem,\n AXP_NOTIFICATION_DEFINITION_PROVIDER,\n AXPNotificationDefinitionProvider,\n} from '@acorex/modules/notification-management';\nimport { AXPExecuteCommand } from '@acorex/platform/core';\nimport { Injector, Provider } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\n\n//#endregion\n\n//#region ---- Comment Notification Provider ----\n\n/**\n * Provides notification handling for Comment feature.\n */\nexport class AXMCommentNotificationProvider implements AXPNotificationDefinitionProvider {\n name = 'Comment' as const;\n title = '@conversation:comments.notification.title';\n icon = 'fa-solid fa-comment';\n\n constructor(private injector: Injector) {}\n\n async execute(command: AXPExecuteCommand, item: AXMNotificationItem): Promise<void> {\n const router = this.injector.get(Router);\n const activatedRoute = this.injector.get(ActivatedRoute);\n\n const app = activatedRoute.snapshot.firstChild?.paramMap.get('app') || 'platform';\n\n switch (command.name) {\n case 'click':\n if (item.data?.['moduleName'] && item.data?.['entityName'] && item.data?.['entityId']) {\n router.navigate([\n app,\n 'm',\n item.data?.['moduleName'],\n 'e',\n item.data?.['entityName'],\n item.data?.['entityId'],\n ]);\n }\n break;\n default:\n break;\n }\n }\n}\n\n//#endregion\n\n//#region ---- Providers ----\n\n/**\n * Providers for comment notification definition registration.\n */\nexport const AXM_COMMENT_NOTIFICATION_PROVIDERS: Provider[] = [\n {\n provide: AXP_NOTIFICATION_DEFINITION_PROVIDER,\n useFactory: (injector: Injector) => new AXMCommentNotificationProvider(injector),\n deps: [Injector],\n multi: true,\n },\n];\n\n//#endregion\n","import {\n AXPPageComponentDefinition,\n AXPPageComponentProvider,\n} from '@acorex/platform/layout/components';\nimport { Injectable } from '@angular/core';\nimport { COMMENTS_PAGE_COMPONENT_KEY } from '../comments.plugin';\n\n//#region ---- Comments Page Component Provider ----\n\n@Injectable()\nexport class AXMCommentsPageComponentProvider implements AXPPageComponentProvider {\n async components(): Promise<AXPPageComponentDefinition[]> {\n return [\n {\n key: COMMENTS_PAGE_COMPONENT_KEY,\n loader: () =>\n import('./comments-page.component').then((m) => m.AXMCommentsPageComponent),\n },\n ];\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPWidgetDefinitionProvider } from '@acorex/platform/layout/widget-core';\nimport { Injectable } from '@angular/core';\nimport { AXPCommentWidget } from './features';\n\n//#endregion\n\n//#region ---- Conversation Widgets Provider ----\n\n@Injectable()\nexport class AXMConversationWidgetsProvider implements AXPWidgetDefinitionProvider {\n getWidgets() {\n return [AXPCommentWidget];\n }\n}\n\n//#endregion\n","import { AXConversationModule } from '@acorex/components/conversation';\nimport { AXP_PERMISSION_DEFINITION_PROVIDER, AXPAuthGuard } from '@acorex/platform/auth';\nimport { AXP_MENU_PROVIDER, AXP_SEARCH_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER } from '@acorex/platform/common';\nimport { AXP_MODULE_MANIFEST_PROVIDER } from '@acorex/platform/core';\nimport { AXP_PAGE_COMPONENT_PROVIDER, AXP_TASK_BADGE_PROVIDERS } from '@acorex/platform/layout/components';\nimport { AXP_ENTITY_ACTION_PLUGIN, AXP_ENTITY_DEFINITION_LOADER } from '@acorex/platform/layout/entity';\nimport { AXPRootLayoutComponent } from '@acorex/platform/themes/default';\nimport { DatePipe } from '@angular/common';\nimport { provideCommandSetups } from '@acorex/platform/runtime';\nimport { importProvidersFrom, NgModule } from '@angular/core';\nimport { RouterModule, Routes, ROUTES } from '@angular/router';\nimport {\n CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND,\n CONVERSATION_START_ASSIST_CHAT_COMMAND,\n} from './features/commands/conversation-command.keys';\nimport { AXMConversationAssistSearchDefinitionProvider } from './features/search/assist-search-definition.provider';\nimport { AXMConversationAssistSearchProvider } from './features/search/assist-search.provider';\nimport { AXMConversationModuleEntityProvider } from './entity.provider';\nimport { ConversationManifest } from './manifest';\nimport { AXMMenuProvider } from './menu.provider';\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\n\n// Entity Modules\nimport { AXP_WIDGET_DEFINITION_PROVIDER, AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXPWorkflowModule } from '@acorex/platform/workflow';\nimport { AXMChatBadgeProviderSimple } from './badge.provider';\nimport { AXMConversationTabEntityModule, AXMMessageEntityModule, AXMRoomEntityModule } from './entities';\nimport {\n AXMChatService,\n AXMChatServiceImpl,\n AXMCommentPopupStartAction,\n AXMCommentPopupWorkflow,\n AXMCommentRealtimeService,\n AXMCommentRealtimeServiceImpl,\n AXMCommentService,\n AXMCommentServiceImpl,\n} from './features';\nimport { AXM_CHAT_CONVERSATION2_PROVIDERS } from './features/chat/chat-conversation2.providers';\nimport { AXM_CHAT_NOTIFICATION_PROVIDERS } from './features/chat/chat-notification.provider';\nimport { AXMChatRealtimeService, AXMChatRealtimeServiceImpl } from './features/chat/chat-realtime.service';\nimport { AXM_COMMENT_NOTIFICATION_PROVIDERS } from './features/comment/comment-notification.provider';\nimport { AXMCommentsPageComponentProvider } from './features/comment/comments-page/comments-page-component.provider';\nimport { commentsPlugin } from './features/comment/comments.plugin';\nimport { AXMConversationWidgetsProvider } from './widget-definition.provider';\n\nfunction routesFactory(): Routes {\n const routes: Routes = [\n {\n path: ':app/chat',\n canActivate: [AXPAuthGuard],\n loadComponent: () => {\n return AXPRootLayoutComponent;\n },\n children: [\n {\n path: '',\n loadComponent: () => import('./features/chat/chat.component').then((c) => c.AXMChatComponent),\n data: { reuse: true },\n },\n {\n path: ':id',\n loadComponent: () => import('./features/chat/chat.component').then((c) => c.AXMChatComponent),\n // Do not use `reuse: true` here: same route path with a different `:id` must recreate the chat\n // shell so conversation2 reloads messages (see AXPEntityReuseStrategy `queryParamsChange` branch).\n data: { reuse: 'queryParamsChange' },\n },\n ],\n },\n {\n path: ':app/comments/t/:refrenceType/i/:refrenceId/s/:subject',\n title: '@conversation:comments.feature.title',\n canActivate: [AXPAuthGuard],\n loadComponent: () => AXPRootLayoutComponent,\n // resolve: {\n // refrenceType: {\n // resolve: refrenceTypeResolver,\n // },\n // refrenceId: {\n // resolve: refrenceIdResolver,\n // },\n // subject: {\n // resolve: subjectResolver,\n // },\n // },\n children: [\n {\n path: '',\n loadComponent: () => import('./features/comment/comment.component').then((c) => c.AXMCommentComponent),\n },\n ],\n },\n {\n path: ':app/comments/',\n title: '@conversation:comments.feature.title',\n canActivate: [AXPAuthGuard],\n loadComponent: () => AXPRootLayoutComponent,\n children: [\n {\n path: '',\n loadComponent: () => import('./features/comment/comment.component').then((c) => c.AXMCommentComponent),\n },\n ],\n },\n ];\n return routes;\n}\n\n@NgModule({\n declarations: [],\n imports: [\n AXPWidgetCoreModule,\n AXPWorkflowModule.forChild({\n actions: {\n 'show-comment-popup-action': AXMCommentPopupStartAction,\n },\n workflows: {\n 'show-comment-popup': AXMCommentPopupWorkflow,\n },\n }),\n // Entity Modules\n AXMConversationTabEntityModule,\n AXMRoomEntityModule,\n AXMMessageEntityModule,\n ],\n exports: [\n // Modules\n RouterModule,\n ],\n providers: [\n // Chat and Comment Services\n {\n provide: AXMChatService,\n useClass: AXMChatServiceImpl,\n },\n {\n provide: AXMChatRealtimeService,\n useClass: AXMChatRealtimeServiceImpl,\n },\n {\n provide: AXMCommentService,\n useClass: AXMCommentServiceImpl,\n },\n {\n provide: AXMCommentRealtimeService,\n useClass: AXMCommentRealtimeServiceImpl,\n },\n ...AXM_CHAT_CONVERSATION2_PROVIDERS,\n // Module-specific providers (not part of manifest system)\n {\n provide: AXP_ENTITY_ACTION_PLUGIN,\n useValue: commentsPlugin,\n multi: true,\n },\n {\n provide: AXP_PAGE_COMPONENT_PROVIDER,\n useClass: AXMCommentsPageComponentProvider,\n multi: true,\n },\n {\n provide: AXP_TASK_BADGE_PROVIDERS,\n useClass: AXMChatBadgeProviderSimple,\n multi: true,\n },\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFactory,\n },\n // Conversation Module\n importProvidersFrom(AXConversationModule.forRoot()),\n DatePipe,\n ...AXM_CHAT_NOTIFICATION_PROVIDERS,\n ...AXM_COMMENT_NOTIFICATION_PROVIDERS,\n // Module Manifest Provider\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: ConversationManifest,\n multi: true,\n },\n // Provider references (now using tokens)\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMPermissionDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMMenuProvider,\n multi: true,\n },\n {\n provide: AXP_ENTITY_DEFINITION_LOADER,\n useClass: AXMConversationModuleEntityProvider,\n multi: true,\n },\n {\n provide: AXP_WIDGET_DEFINITION_PROVIDER,\n useClass: AXMConversationWidgetsProvider,\n multi: true,\n },\n {\n provide: AXP_SEARCH_PROVIDER,\n useClass: AXMConversationAssistSearchProvider,\n multi: true,\n },\n {\n provide: AXP_SEARCH_DEFINITION_PROVIDER,\n useClass: AXMConversationAssistSearchDefinitionProvider,\n multi: true,\n },\n provideCommandSetups([\n {\n key: CONVERSATION_START_ASSIST_CHAT_COMMAND,\n command: () =>\n import('./features/commands/start-assist-chat.command').then((m) => m.AXMConversationStartAssistChatCommand),\n },\n {\n key: CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND,\n command: () =>\n import('./features/commands/send-assist-chat-message.command').then(\n (m) => m.AXMConversationSendAssistChatMessageCommand,\n ),\n },\n ]),\n ],\n})\nexport class AXMConversationModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["RootConfig","i1","i2","i3","i4","i6","i5","i7","i8","i10","isRecord","AiManagementRootConfig"],"mappings":"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"}
|