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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/fesm2022/acorex-modules-common.mjs +9 -9
  2. package/fesm2022/acorex-modules-common.mjs.map +1 -1
  3. package/fesm2022/{acorex-modules-conversation-acorex-modules-conversation-B_JcAHvL.mjs → acorex-modules-conversation-acorex-modules-conversation-Dc8te-PO.mjs} +364 -237
  4. package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-Dc8te-PO.mjs.map +1 -0
  5. package/fesm2022/{acorex-modules-conversation-after-message-sent.command-DcrS7_vV.mjs → acorex-modules-conversation-after-message-sent.command-DxDe6o9N.mjs} +2 -2
  6. package/fesm2022/{acorex-modules-conversation-after-message-sent.command-DcrS7_vV.mjs.map → acorex-modules-conversation-after-message-sent.command-DxDe6o9N.mjs.map} +1 -1
  7. package/fesm2022/{acorex-modules-conversation-assist-delegated-agent-detail-popup.component-BCkJEAmX.mjs → acorex-modules-conversation-assist-delegated-agent-detail-popup.component-Dyx_n0bi.mjs} +3 -3
  8. package/fesm2022/{acorex-modules-conversation-assist-delegated-agent-detail-popup.component-BCkJEAmX.mjs.map → acorex-modules-conversation-assist-delegated-agent-detail-popup.component-Dyx_n0bi.mjs.map} +1 -1
  9. package/fesm2022/{acorex-modules-conversation-comments-page.component-B6TJhe4T.mjs → acorex-modules-conversation-comments-page.component--g4ugC_L.mjs} +2 -2
  10. package/fesm2022/{acorex-modules-conversation-comments-page.component-B6TJhe4T.mjs.map → acorex-modules-conversation-comments-page.component--g4ugC_L.mjs.map} +1 -1
  11. package/fesm2022/{acorex-modules-conversation-emit-typing-indicator.command-CWRdPl-S.mjs → acorex-modules-conversation-emit-typing-indicator.command-BOldPLQ0.mjs} +2 -2
  12. package/fesm2022/{acorex-modules-conversation-emit-typing-indicator.command-CWRdPl-S.mjs.map → acorex-modules-conversation-emit-typing-indicator.command-BOldPLQ0.mjs.map} +1 -1
  13. package/fesm2022/{acorex-modules-conversation-mark-conversation-unread.command-CZlsLAsb.mjs → acorex-modules-conversation-mark-conversation-unread.command-O_zPrBQ0.mjs} +2 -2
  14. package/fesm2022/{acorex-modules-conversation-mark-conversation-unread.command-CZlsLAsb.mjs.map → acorex-modules-conversation-mark-conversation-unread.command-O_zPrBQ0.mjs.map} +1 -1
  15. package/fesm2022/{acorex-modules-conversation-retry-assist-response.command-Cly1-RKt.mjs → acorex-modules-conversation-retry-assist-response.command-DsB-CP3R.mjs} +2 -2
  16. package/fesm2022/{acorex-modules-conversation-retry-assist-response.command-Cly1-RKt.mjs.map → acorex-modules-conversation-retry-assist-response.command-DsB-CP3R.mjs.map} +1 -1
  17. package/fesm2022/{acorex-modules-conversation-send-assist-chat-message.command-D5QWTKqh.mjs → acorex-modules-conversation-send-assist-chat-message.command-g_NgPuxP.mjs} +2 -2
  18. package/fesm2022/{acorex-modules-conversation-send-assist-chat-message.command-D5QWTKqh.mjs.map → acorex-modules-conversation-send-assist-chat-message.command-g_NgPuxP.mjs.map} +1 -1
  19. package/fesm2022/{acorex-modules-conversation-start-assist-chat.command-DkSZj8fj.mjs → acorex-modules-conversation-start-assist-chat.command-DeMmJdd6.mjs} +2 -2
  20. package/fesm2022/{acorex-modules-conversation-start-assist-chat.command-DkSZj8fj.mjs.map → acorex-modules-conversation-start-assist-chat.command-DeMmJdd6.mjs.map} +1 -1
  21. package/fesm2022/{acorex-modules-conversation-sync-read-state.command-jiEsdxUB.mjs → acorex-modules-conversation-sync-read-state.command-4YxdwLaE.mjs} +2 -2
  22. package/fesm2022/{acorex-modules-conversation-sync-read-state.command-jiEsdxUB.mjs.map → acorex-modules-conversation-sync-read-state.command-4YxdwLaE.mjs.map} +1 -1
  23. package/fesm2022/acorex-modules-conversation.mjs +1 -1
  24. package/fesm2022/{acorex-modules-dashboard-management-acorex-modules-dashboard-management-DLuhOPFz.mjs → acorex-modules-dashboard-management-acorex-modules-dashboard-management-kph3UxDu.mjs} +94 -41
  25. package/fesm2022/acorex-modules-dashboard-management-acorex-modules-dashboard-management-kph3UxDu.mjs.map +1 -0
  26. package/fesm2022/{acorex-modules-dashboard-management-index-gjCiELmH.mjs → acorex-modules-dashboard-management-index-rp9dgARq.mjs} +2 -2
  27. package/fesm2022/{acorex-modules-dashboard-management-index-gjCiELmH.mjs.map → acorex-modules-dashboard-management-index-rp9dgARq.mjs.map} +1 -1
  28. package/fesm2022/acorex-modules-dashboard-management.mjs +1 -1
  29. package/fesm2022/{acorex-modules-document-management-drive-choose.component-DyJoXajP.mjs → acorex-modules-document-management-drive-choose.component-Dx1slMSA.mjs} +3 -3
  30. package/fesm2022/{acorex-modules-document-management-drive-choose.component-DyJoXajP.mjs.map → acorex-modules-document-management-drive-choose.component-Dx1slMSA.mjs.map} +1 -1
  31. package/fesm2022/acorex-modules-document-management.mjs +268 -351
  32. package/fesm2022/acorex-modules-document-management.mjs.map +1 -1
  33. package/fesm2022/{acorex-modules-human-capital-management-acorex-modules-human-capital-management-VJ2NUSm1.mjs → acorex-modules-human-capital-management-acorex-modules-human-capital-management-BZwLfZkb.mjs} +42 -21
  34. package/fesm2022/acorex-modules-human-capital-management-acorex-modules-human-capital-management-BZwLfZkb.mjs.map +1 -0
  35. package/fesm2022/{acorex-modules-human-capital-management-approve-leave-request.command-FgXkyZR_.mjs → acorex-modules-human-capital-management-approve-leave-request.command-B_EBDijL.mjs} +2 -2
  36. package/fesm2022/{acorex-modules-human-capital-management-approve-leave-request.command-FgXkyZR_.mjs.map → acorex-modules-human-capital-management-approve-leave-request.command-B_EBDijL.mjs.map} +1 -1
  37. package/fesm2022/{acorex-modules-human-capital-management-assign-position-assignment.command-D2yCvifI.mjs → acorex-modules-human-capital-management-assign-position-assignment.command-ZzWBeTv1.mjs} +2 -2
  38. package/fesm2022/{acorex-modules-human-capital-management-assign-position-assignment.command-D2yCvifI.mjs.map → acorex-modules-human-capital-management-assign-position-assignment.command-ZzWBeTv1.mjs.map} +1 -1
  39. package/fesm2022/{acorex-modules-human-capital-management-cancel-leave-request.command-DnmsVNwU.mjs → acorex-modules-human-capital-management-cancel-leave-request.command-Bd3RvlNm.mjs} +2 -2
  40. package/fesm2022/{acorex-modules-human-capital-management-cancel-leave-request.command-DnmsVNwU.mjs.map → acorex-modules-human-capital-management-cancel-leave-request.command-Bd3RvlNm.mjs.map} +1 -1
  41. package/fesm2022/{acorex-modules-human-capital-management-edit-personal-info.command-B0ZUfbqn.mjs → acorex-modules-human-capital-management-edit-personal-info.command-Drbi1WMd.mjs} +2 -2
  42. package/fesm2022/{acorex-modules-human-capital-management-edit-personal-info.command-B0ZUfbqn.mjs.map → acorex-modules-human-capital-management-edit-personal-info.command-Drbi1WMd.mjs.map} +1 -1
  43. package/fesm2022/{acorex-modules-human-capital-management-edit-signature.command-h2kTqSg0.mjs → acorex-modules-human-capital-management-edit-signature.command-CRPqnXIj.mjs} +2 -2
  44. package/fesm2022/{acorex-modules-human-capital-management-edit-signature.command-h2kTqSg0.mjs.map → acorex-modules-human-capital-management-edit-signature.command-CRPqnXIj.mjs.map} +1 -1
  45. package/fesm2022/{acorex-modules-human-capital-management-reject-leave-request.command-BdrdgvbN.mjs → acorex-modules-human-capital-management-reject-leave-request.command-BC-1Kixd.mjs} +2 -2
  46. package/fesm2022/{acorex-modules-human-capital-management-reject-leave-request.command-BdrdgvbN.mjs.map → acorex-modules-human-capital-management-reject-leave-request.command-BC-1Kixd.mjs.map} +1 -1
  47. package/fesm2022/{acorex-modules-human-capital-management-revoke-position-assignment.command-S7Px6Y4B.mjs → acorex-modules-human-capital-management-revoke-position-assignment.command-Caylq9Rv.mjs} +2 -2
  48. package/fesm2022/{acorex-modules-human-capital-management-revoke-position-assignment.command-S7Px6Y4B.mjs.map → acorex-modules-human-capital-management-revoke-position-assignment.command-Caylq9Rv.mjs.map} +1 -1
  49. package/fesm2022/{acorex-modules-human-capital-management-start-leave-request-flow.command-C_tE-D_Y.mjs → acorex-modules-human-capital-management-start-leave-request-flow.command-BsEwA1VM.mjs} +2 -2
  50. package/fesm2022/{acorex-modules-human-capital-management-start-leave-request-flow.command-C_tE-D_Y.mjs.map → acorex-modules-human-capital-management-start-leave-request-flow.command-BsEwA1VM.mjs.map} +1 -1
  51. package/fesm2022/{acorex-modules-human-capital-management-start-lifecycle-event-flow.command-mMP3Yy01.mjs → acorex-modules-human-capital-management-start-lifecycle-event-flow.command-B8xK2iTn.mjs} +2 -2
  52. package/fesm2022/{acorex-modules-human-capital-management-start-lifecycle-event-flow.command-mMP3Yy01.mjs.map → acorex-modules-human-capital-management-start-lifecycle-event-flow.command-B8xK2iTn.mjs.map} +1 -1
  53. package/fesm2022/acorex-modules-human-capital-management.mjs +1 -1
  54. package/fesm2022/acorex-modules-platform-dev-tools.mjs +2 -2
  55. package/fesm2022/acorex-modules-platform-dev-tools.mjs.map +1 -1
  56. package/fesm2022/acorex-modules-project-management.mjs +707 -424
  57. package/fesm2022/acorex-modules-project-management.mjs.map +1 -1
  58. package/fesm2022/acorex-modules-report-management.mjs +1 -1
  59. package/fesm2022/acorex-modules-report-management.mjs.map +1 -1
  60. package/fesm2022/acorex-modules-task-management-start-task-flow.command-HYdQOWDe.mjs +115 -0
  61. package/fesm2022/acorex-modules-task-management-start-task-flow.command-HYdQOWDe.mjs.map +1 -0
  62. package/fesm2022/{acorex-modules-task-management-task-board.page-DTWxd_vG.mjs → acorex-modules-task-management-task-board.page-BMTjJlry.mjs} +3 -3
  63. package/fesm2022/{acorex-modules-task-management-task-board.page-DTWxd_vG.mjs.map → acorex-modules-task-management-task-board.page-BMTjJlry.mjs.map} +1 -1
  64. package/fesm2022/acorex-modules-task-management.mjs +433 -460
  65. package/fesm2022/acorex-modules-task-management.mjs.map +1 -1
  66. package/fesm2022/{acorex-modules-timesheet-management-report-hours-by-project.query-z38wZLKJ.mjs → acorex-modules-timesheet-management-report-hours-by-project.query-CGc1Q6aB.mjs} +2 -2
  67. package/fesm2022/acorex-modules-timesheet-management-report-hours-by-project.query-CGc1Q6aB.mjs.map +1 -0
  68. package/fesm2022/{acorex-modules-timesheet-management-resolve-work-item-from-jira-issue.command-BDfvz6fH.mjs → acorex-modules-timesheet-management-resolve-work-item-from-jira-issue.command-AIcAUd3s.mjs} +2 -2
  69. package/fesm2022/{acorex-modules-timesheet-management-resolve-work-item-from-jira-issue.command-BDfvz6fH.mjs.map → acorex-modules-timesheet-management-resolve-work-item-from-jira-issue.command-AIcAUd3s.mjs.map} +1 -1
  70. package/fesm2022/acorex-modules-timesheet-management.mjs +8 -8
  71. package/fesm2022/acorex-modules-timesheet-management.mjs.map +1 -1
  72. package/fesm2022/acorex-modules-workplacesafety-management-control-hierarchy-diagram-widget-edit.component-CFF7X1MO.mjs +70 -0
  73. package/fesm2022/acorex-modules-workplacesafety-management-control-hierarchy-diagram-widget-edit.component-CFF7X1MO.mjs.map +1 -0
  74. package/fesm2022/acorex-modules-workplacesafety-management-control-hierarchy-diagram-widget-view.component-DwC2aHVt.mjs +70 -0
  75. package/fesm2022/acorex-modules-workplacesafety-management-control-hierarchy-diagram-widget-view.component-DwC2aHVt.mjs.map +1 -0
  76. package/fesm2022/acorex-modules-workplacesafety-management-control-hierarchy-diagram.types-DmzV305e.mjs +195 -0
  77. package/fesm2022/acorex-modules-workplacesafety-management-control-hierarchy-diagram.types-DmzV305e.mjs.map +1 -0
  78. package/fesm2022/acorex-modules-workplacesafety-management.mjs +139 -16
  79. package/fesm2022/acorex-modules-workplacesafety-management.mjs.map +1 -1
  80. package/package.json +2 -2
  81. package/types/acorex-modules-dashboard-management.d.ts +30 -11
  82. package/types/acorex-modules-document-management.d.ts +21 -5
  83. package/types/acorex-modules-human-capital-management.d.ts +4 -0
  84. package/types/acorex-modules-project-management.d.ts +46 -23
  85. package/types/acorex-modules-task-management.d.ts +80 -11
  86. package/types/acorex-modules-timesheet-management.d.ts +2 -2
  87. package/types/acorex-modules-workplacesafety-management.d.ts +7 -2
  88. package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-B_JcAHvL.mjs.map +0 -1
  89. package/fesm2022/acorex-modules-dashboard-management-acorex-modules-dashboard-management-DLuhOPFz.mjs.map +0 -1
  90. package/fesm2022/acorex-modules-human-capital-management-acorex-modules-human-capital-management-VJ2NUSm1.mjs.map +0 -1
  91. package/fesm2022/acorex-modules-timesheet-management-report-hours-by-project.query-z38wZLKJ.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-modules-conversation-acorex-modules-conversation-Dc8te-PO.mjs","sources":["../../../../libs/modules/conversation/src/lib/contracts/root.config.ts","../../../../libs/modules/conversation/src/lib/contracts/comment-entity-data.ts","../../../../libs/modules/conversation/src/lib/contracts/menu.keys.ts","../../../../libs/modules/conversation/src/lib/contracts/permission.keys.ts","../../../../libs/modules/conversation/src/lib/contracts/index.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/room/room.entity.ts","../../../../libs/modules/conversation/src/lib/entities/room/room.types.ts","../../../../libs/modules/conversation/src/lib/entities/index.ts","../../../../libs/modules/conversation/src/lib/entity.provider.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/manifest.ts","../../../../libs/modules/conversation/src/lib/menu.provider.ts","../../../../libs/modules/conversation/src/lib/permission-definition.provider.ts","../../../../libs/modules/conversation/src/lib/badge.provider.ts","../../../../libs/modules/conversation/src/lib/features/background-operation/conversation-assist-background-operation.keys.ts","../../../../libs/modules/conversation/src/lib/features/background-operation/conversation-assist-background-operation.handler.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/actions/assist-chat-debug-mode.service.ts","../../../../libs/modules/conversation/src/lib/features/chat/services/conversation-realtime.bus.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/services/chat-conversation-apis.abstract.ts","../../../../libs/modules/conversation/src/lib/features/mini-chat/entity-chat.util.ts","../../../../libs/modules/conversation/src/lib/features/mini-chat/entity-chat.service.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/utils/assist-suggestion-chips.util.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/utils/assist-starter-prompt-send.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/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/plugins/utils/assist-bot-transcript.util.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/utils/conversation-time.util.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/services/entity/chat-entity-mapper.util.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/utils/assist-response-status.util.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/utils/conversation-unread.util.ts","../../../../libs/modules/conversation/src/lib/features/chat/services/conversation-entity-store.service.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-delegated-agent-detail.dialog.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-audio-line.component.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/assist-bot-file-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-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/services/conversation-focus.service.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/utils/assist-metadata.util.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/utils/assist-peer-participant.util.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/services/entity/chat-entity-user.api.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/utils/conversation-list-sort.util.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/services/entity/chat-entity-conversation.api.ts","../../../../libs/modules/conversation/src/lib/features/chat/services/conversation-assist-response.port.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/services/entity/chat-entity-message.api.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/services/entity/chat-entity-realtime.api.ts","../../../../libs/modules/conversation/src/lib/features/chat/chat-conversation.providers.ts","../../../../libs/modules/conversation/src/lib/features/mini-chat/mini-chat-history.component.ts","../../../../libs/modules/conversation/src/lib/features/mini-chat/mini-chat-inbox-history.component.ts","../../../../libs/modules/conversation/src/lib/features/mini-chat/mini-chat.component.ts","../../../../libs/modules/conversation/src/lib/features/mini-chat/mini-chat.component.html","../../../../libs/modules/conversation/src/lib/features/mini-chat/mini-chat-panel.component.ts","../../../../libs/modules/conversation/src/lib/features/mini-chat/mini-chat-panel.component.html","../../../../libs/modules/conversation/src/lib/features/mini-chat/mini-chat-inbox-panel-host.component.ts","../../../../libs/modules/conversation/src/lib/features/mini-chat/mini-chat-panel.types.ts","../../../../libs/modules/conversation/src/lib/features/mini-chat/mini-chat-panel.service.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/services/chat-attachment-persist.ts","../../../../libs/modules/conversation/src/lib/features/chat/services/conversation-regular-auto-reply.port.ts","../../../../libs/modules/conversation/src/lib/features/comment/comment-payload.util.ts","../../../../libs/modules/conversation/src/lib/features/comment/comment.service.ts","../../../../libs/modules/conversation/src/lib/features/comment/comment-realtime.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/features/mini-chat/mini-chat-header-slot.component.ts","../../../../libs/modules/conversation/src/lib/features/mini-chat/mini-chat-header-slot.component.html","../../../../libs/modules/conversation/src/lib/features/mini-chat/mini-chat-launcher.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 },\n};\n","//#region ---- Comment entity reference ----\n\nexport interface AXMCommentEntityData {\n entityId: string;\n entityTypeId: string;\n moduleName?: string;\n entityName?: string;\n}\n\n//#endregion\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","//#region ---- Contracts barrel ----\n\nexport * from './comment-entity-data';\n\nexport * from './menu.keys';\nexport * from './permission.keys';\n\nexport * from './root.config';\n\n//#endregion","//#region ---- Imports ----\n\nimport { AXPWidgetsCatalog } from '@acorex/platform/contracts';\nimport {\n AXPEntity,\n AXPEntityProperty,\n createAllQueryView,\n entityMasterCrudActions,\n entityMasterRecordActions,\n} from '@acorex/platform/layout/entity-contracts';\nimport { RootConfig } from '../../contracts';\n\n//#endregion\n\n//#region ---- Property helpers ----\n\nfunction messageProp(\n i18n: string,\n name: string,\n groupId: string,\n schema: AXPEntityProperty['schema'],\n options?: Partial<AXPEntityProperty>,\n): AXPEntityProperty {\n return {\n name,\n title: `t(\"message.props.${name}\", { scope: \"${i18n}\" })`,\n groupId,\n schema,\n ...options,\n };\n}\n\nfunction hiddenStorageProp(\n i18n: string,\n name: string,\n dataType: 'object' | 'array',\n groupId = 'runtime',\n): AXPEntityProperty {\n return messageProp(i18n, name, groupId, {\n dataType,\n visible: false,\n nullable: true,\n });\n}\n\nconst filterable = {\n sort: { enabled: true },\n filter: { advance: { enabled: true }, inline: { enabled: false } },\n};\n\n//#endregion\n\n//#region ---- Entity factory ----\n\nexport async function messageFactory(): Promise<AXPEntity | null> {\n const i18n = RootConfig.config.i18n;\n const roomEntity = `${RootConfig.module.name}.${RootConfig.entities.room.name}`;\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: '{{ conversationId }}',\n },\n },\n relatedEntities: [],\n groups: [\n { id: 'basic-info', title: '@general:terms.interface.basic-info' },\n { id: 'content', title: `t(\"message.groups.content\", { scope: \"${i18n}\" })` },\n { id: 'flags', title: `t(\"message.groups.flags\", { scope: \"${i18n}\" })` },\n { id: 'runtime', title: `t(\"message.groups.runtime\", { scope: \"${i18n}\" })` },\n ],\n properties: [\n messageProp(i18n, 'name', 'basic-info', {\n dataType: 'string',\n interface: { type: AXPWidgetsCatalog.text },\n }),\n messageProp(\n i18n,\n 'title',\n 'basic-info',\n {\n dataType: 'string',\n interface: { type: AXPWidgetsCatalog.text },\n },\n { options: filterable },\n ),\n messageProp(\n i18n,\n 'conversationId',\n 'basic-info',\n {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.lookup,\n options: {\n entity: roomEntity,\n textField: 'title',\n valueField: 'id',\n look: 'select',\n },\n },\n },\n { options: filterable, validations: [{ rule: 'required' }] },\n ),\n messageProp(\n i18n,\n 'senderId',\n 'basic-info',\n {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.lookup,\n options: {\n entity: 'SecurityManagement.User',\n textField: 'displayName',\n valueField: 'id',\n look: 'select',\n },\n },\n },\n { options: filterable, validations: [{ rule: 'required' }] },\n ),\n messageProp(\n i18n,\n 'type',\n 'basic-info',\n {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.select,\n options: {\n valueField: 'name',\n textField: 'title',\n multiple: false,\n dataSource: [\n { name: 'text', title: 'Text' },\n { name: 'image', title: 'Image' },\n { name: 'video', title: 'Video' },\n { name: 'audio', title: 'Audio' },\n { name: 'voice', title: 'Voice' },\n { name: 'file', title: 'File' },\n { name: 'location', title: 'Location' },\n { name: 'sticker', title: 'Sticker' },\n { name: 'node', title: 'Node' },\n { name: 'assist-response', title: 'Assist response' },\n ],\n },\n },\n },\n { options: filterable, validations: [{ rule: 'required' }] },\n ),\n messageProp(i18n, 'fileType', 'basic-info', {\n dataType: 'string',\n interface: { type: AXPWidgetsCatalog.text },\n }),\n messageProp(\n i18n,\n 'timestamp',\n 'basic-info',\n {\n dataType: 'date',\n interface: { type: AXPWidgetsCatalog.dateTime },\n },\n { options: filterable, validations: [{ rule: 'required' }] },\n ),\n messageProp(\n i18n,\n 'status',\n 'content',\n {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.select,\n options: {\n valueField: 'name',\n textField: 'title',\n multiple: false,\n dataSource: [\n { name: 'sending', title: 'Sending' },\n { name: 'sent', title: 'Sent' },\n { name: 'delivered', title: 'Delivered' },\n { name: 'read', title: 'Read' },\n { name: 'failed', title: 'Failed' },\n ],\n },\n },\n },\n { options: filterable, validations: [{ rule: 'required' }] },\n ),\n hiddenStorageProp(i18n, 'payload', 'object', 'content'),\n hiddenStorageProp(i18n, 'replyTo', 'object'),\n hiddenStorageProp(i18n, 'forwardedFrom', 'object'),\n hiddenStorageProp(i18n, 'reactions', 'array'),\n hiddenStorageProp(i18n, 'metadata', 'object'),\n messageProp(i18n, 'forwarded', 'flags', {\n dataType: 'boolean',\n interface: { type: AXPWidgetsCatalog.toggle },\n }),\n messageProp(i18n, 'pinned', 'flags', {\n dataType: 'boolean',\n interface: { type: AXPWidgetsCatalog.toggle },\n }),\n messageProp(i18n, 'deleted', 'flags', {\n dataType: 'boolean',\n interface: { type: AXPWidgetsCatalog.toggle },\n }),\n messageProp(i18n, 'isLocal', 'flags', {\n dataType: 'boolean',\n visible: false,\n interface: { type: AXPWidgetsCatalog.toggle },\n }),\n messageProp(i18n, 'editedAt', 'flags', {\n dataType: 'date',\n interface: { type: AXPWidgetsCatalog.dateTime },\n }),\n messageProp(i18n, 'deletedAt', 'flags', {\n dataType: 'date',\n interface: { type: AXPWidgetsCatalog.dateTime },\n }),\n ],\n columns: [\n { name: 'title' },\n { name: 'conversationId' },\n { name: 'senderId' },\n { name: 'type' },\n { name: 'timestamp' },\n { name: 'status' },\n ],\n interfaces: {\n master: {\n create: {\n sections: [{ id: 'basic-info' }, { id: 'content' }, { id: 'flags' }],\n properties: [\n { name: 'conversationId', layout: { positions: { lg: { colSpan: 6, order: 1 } } } },\n { name: 'senderId', layout: { positions: { lg: { colSpan: 6, order: 2 } } } },\n { name: 'type', layout: { positions: { lg: { colSpan: 6, order: 3 } } } },\n { name: 'timestamp', layout: { positions: { lg: { colSpan: 6, order: 4 } } } },\n { name: 'status', layout: { positions: { lg: { colSpan: 6, order: 5 } } } },\n { name: 'fileType', layout: { positions: { lg: { colSpan: 6, order: 6 } } } },\n { name: 'title', layout: { positions: { lg: { colSpan: 12, order: 7 } } } },\n { name: 'name', layout: { positions: { lg: { colSpan: 12, order: 8 } } } },\n { name: 'forwarded', layout: { positions: { lg: { colSpan: 4, order: 9 } } } },\n { name: 'pinned', layout: { positions: { lg: { colSpan: 4, order: 10 } } } },\n { name: 'deleted', layout: { positions: { lg: { colSpan: 4, order: 11 } } } },\n ],\n },\n update: {\n sections: [{ id: 'basic-info' }, { id: 'content' }, { id: 'flags' }],\n properties: [\n { name: 'conversationId', layout: { positions: { lg: { colSpan: 6, order: 1 } } } },\n { name: 'senderId', layout: { positions: { lg: { colSpan: 6, order: 2 } } } },\n { name: 'type', layout: { positions: { lg: { colSpan: 6, order: 3 } } } },\n { name: 'timestamp', layout: { positions: { lg: { colSpan: 6, order: 4 } } } },\n { name: 'status', layout: { positions: { lg: { colSpan: 6, order: 5 } } } },\n { name: 'fileType', layout: { positions: { lg: { colSpan: 6, order: 6 } } } },\n { name: 'title', layout: { positions: { lg: { colSpan: 12, order: 7 } } } },\n { name: 'name', layout: { positions: { lg: { colSpan: 12, order: 8 } } } },\n { name: 'forwarded', layout: { positions: { lg: { colSpan: 4, order: 9 } } } },\n { name: 'pinned', layout: { positions: { lg: { colSpan: 4, order: 10 } } } },\n { name: 'deleted', layout: { positions: { lg: { colSpan: 4, order: 11 } } } },\n { name: 'editedAt', layout: { positions: { lg: { colSpan: 6, order: 12 } } } },\n { name: 'deletedAt', layout: { positions: { lg: { colSpan: 6, order: 13 } } } },\n ],\n },\n single: {\n title: '{{title}}',\n sections: [{ id: 'basic-info' }, { id: 'content' }, { id: 'flags' }],\n properties: [\n { name: 'conversationId', layout: { positions: { lg: { colSpan: 6, order: 1 } } } },\n { name: 'senderId', layout: { positions: { lg: { colSpan: 6, order: 2 } } } },\n { name: 'type', layout: { positions: { lg: { colSpan: 6, order: 3 } } } },\n { name: 'timestamp', layout: { positions: { lg: { colSpan: 6, order: 4 } } } },\n { name: 'status', layout: { positions: { lg: { colSpan: 6, order: 5 } } } },\n { name: 'title', layout: { positions: { lg: { colSpan: 12, order: 6 } } } },\n ],\n actions: [...entityMasterRecordActions()],\n },\n list: {\n actions: [...entityMasterCrudActions()],\n views: [\n createAllQueryView({\n columns: ['title', 'conversationId', 'senderId', 'type', 'timestamp', 'status'],\n sorts: [{ name: 'timestamp', dir: 'desc' }],\n }),\n ],\n },\n },\n },\n };\n\n return entityDef;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type {\n AXMessagePayload,\n AXMessageStatus,\n AXMessageType,\n AXReaction,\n} from '@acorex/components/conversation2';\nimport { AXPEntityModel } from '@acorex/platform/layout/entity-contracts';\n\n//#endregion\n\n//#region ---- Re-exports ----\n\nexport type { AXMessagePayload, AXMessageStatus, AXMessageType, AXReaction };\n\n//#endregion\n\n//#region ---- Constants ----\n\n/** Emoji used for comment \"like\" reactions (maps to conversation2 AXReaction.emoji). */\nexport const AXM_COMMENT_LIKE_EMOJI = '👍';\n\n//#endregion\n\n//#region ---- Legacy aliases (comment feature) ----\n\n/** @deprecated Use emoji string with AXReaction instead. */\nexport type AXMReactionType = string;\n\n/** @deprecated Use AXReaction from conversation2 shape. */\nexport type AXMConversationReaction = AXReaction;\n\n//#endregion\n\n//#region ---- Entity model ----\n\n/**\n * Persisted message entity — conversation2 {@link AXMessage} shape plus platform entity base.\n */\nexport interface AXMConversationMessage extends AXPEntityModel<string> {\n /** Conversation (room) this message belongs to */\n conversationId: string;\n /** Sender user id */\n senderId: string;\n /** Message type */\n type: AXMessageType;\n /** File-type catalog name when this message uses a composer file type */\n fileType?: string;\n /** Message creation timestamp */\n timestamp: Date;\n /** Type-specific message payload */\n payload: AXMessagePayload;\n /** Message delivery/read status */\n status: AXMessageStatus;\n /** Replied message reference (for quote replies) */\n replyTo?: AXMConversationMessage;\n /** Whether this message was forwarded */\n forwarded?: boolean;\n /** Original sender information (if forwarded) */\n forwardedFrom?: {\n messageId: string;\n senderId: string;\n senderName?: string;\n conversationId: string;\n conversationTitle?: string;\n };\n /** Message reactions */\n reactions: AXReaction[];\n /** Whether message is pinned */\n pinned?: boolean;\n /** Edit timestamp (if edited) */\n editedAt?: Date;\n /** Whether message is deleted */\n deleted?: boolean;\n /** Deleted timestamp */\n deletedAt?: Date;\n /** Local-only flag (not synced to server yet) */\n isLocal?: boolean;\n /** Custom metadata */\n metadata?: Record<string, unknown>;\n /** Plain-text snippet for entity admin list column */\n title?: string;\n /** Programmatic name for entity admin */\n name?: string;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPWidgetsCatalog } from '@acorex/platform/contracts';\nimport {\n AXPEntity,\n AXPEntityProperty,\n createAllQueryView,\n entityMasterCrudActions,\n entityMasterRecordActions,\n} from '@acorex/platform/layout/entity-contracts';\nimport { RootConfig } from '../../contracts';\n\n//#endregion\n\n//#region ---- Property helpers ----\n\nfunction roomProp(\n i18n: string,\n name: string,\n groupId: string,\n schema: AXPEntityProperty['schema'],\n options?: Partial<AXPEntityProperty>,\n): AXPEntityProperty {\n return {\n name,\n title: `t(\"room.props.${name}\", { scope: \"${i18n}\" })`,\n groupId,\n schema,\n ...options,\n };\n}\n\nfunction hiddenStorageProp(\n i18n: string,\n name: string,\n dataType: 'object' | 'array',\n groupId = 'runtime',\n): AXPEntityProperty {\n return roomProp(i18n, name, groupId, {\n dataType,\n visible: false,\n nullable: true,\n });\n}\n\nconst filterable = {\n sort: { enabled: true },\n filter: { advance: { enabled: true }, inline: { enabled: false } },\n};\n\n//#endregion\n\n//#region ---- Entity factory ----\n\nexport async function roomFactory(): Promise<AXPEntity | null> {\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: '{{ kind }}',\n },\n },\n relatedEntities: [],\n groups: [\n { id: 'basic-info', title: '@general:terms.interface.basic-info' },\n { id: 'activity', title: `t(\"room.groups.activity\", { scope: \"${i18n}\" })` },\n { id: 'comment', title: `t(\"room.groups.comment\", { scope: \"${i18n}\" })` },\n { id: 'flags', title: `t(\"room.groups.flags\", { scope: \"${i18n}\" })` },\n { id: 'runtime', title: `t(\"room.groups.runtime\", { scope: \"${i18n}\" })` },\n ],\n properties: [\n roomProp(i18n, 'name', 'basic-info', {\n dataType: 'string',\n interface: { type: AXPWidgetsCatalog.text },\n }),\n roomProp(\n i18n,\n 'title',\n 'basic-info',\n {\n dataType: 'string',\n interface: { type: AXPWidgetsCatalog.text },\n },\n { options: filterable, validations: [{ rule: 'required' }] },\n ),\n roomProp(\n i18n,\n 'kind',\n 'basic-info',\n {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.select,\n options: {\n valueField: 'name',\n textField: 'title',\n multiple: false,\n dataSource: [\n { name: 'chat', title: 'Chat' },\n { name: 'comment', title: 'Comment' },\n ],\n },\n },\n },\n { options: filterable, validations: [{ rule: 'required' }] },\n ),\n roomProp(\n i18n,\n 'type',\n 'basic-info',\n {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.select,\n options: {\n valueField: 'name',\n textField: 'title',\n multiple: false,\n dataSource: [\n { name: 'private', title: 'Private' },\n { name: 'group', title: 'Group' },\n { name: 'channel', title: 'Channel' },\n { name: 'bot', title: 'Bot' },\n ],\n },\n },\n },\n { options: filterable, validations: [{ rule: 'required' }] },\n ),\n roomProp(i18n, 'avatar', 'basic-info', {\n dataType: 'string',\n interface: { type: AXPWidgetsCatalog.text },\n }),\n roomProp(i18n, 'icon', 'basic-info', {\n dataType: 'string',\n interface: { type: AXPWidgetsCatalog.text },\n }),\n roomProp(i18n, 'description', 'basic-info', {\n dataType: 'string',\n interface: { type: AXPWidgetsCatalog.largeText },\n }),\n roomProp(\n i18n,\n 'lastMessageAt',\n 'activity',\n {\n dataType: 'date',\n interface: { type: AXPWidgetsCatalog.dateTime },\n },\n { options: filterable, validations: [{ rule: 'required' }] },\n ),\n roomProp(\n i18n,\n 'unreadCount',\n 'activity',\n {\n dataType: 'number',\n interface: { type: AXPWidgetsCatalog.number },\n },\n { options: filterable, validations: [{ rule: 'required' }] },\n ),\n roomProp(i18n, 'unreadMentions', 'activity', {\n dataType: 'number',\n interface: { type: AXPWidgetsCatalog.number },\n }),\n roomProp(\n i18n,\n 'createdAt',\n 'activity',\n {\n dataType: 'date',\n interface: { type: AXPWidgetsCatalog.dateTime },\n },\n { validations: [{ rule: 'required' }] },\n ),\n roomProp(\n i18n,\n 'updatedAt',\n 'activity',\n {\n dataType: 'date',\n interface: { type: AXPWidgetsCatalog.dateTime },\n },\n { validations: [{ rule: 'required' }] },\n ),\n roomProp(i18n, 'draft', 'activity', {\n dataType: 'string',\n interface: { type: AXPWidgetsCatalog.largeText },\n }),\n hiddenStorageProp(i18n, 'participants', 'array'),\n hiddenStorageProp(i18n, 'lastMessage', 'object'),\n hiddenStorageProp(i18n, 'status', 'object'),\n hiddenStorageProp(i18n, 'settings', 'object'),\n hiddenStorageProp(i18n, 'pinnedMessageIds', 'array'),\n hiddenStorageProp(i18n, 'metadata', 'object'),\n hiddenStorageProp(i18n, 'entityRef', 'object', 'comment'),\n roomProp(i18n, 'topic', 'comment', {\n dataType: 'string',\n interface: { type: AXPWidgetsCatalog.text },\n }),\n roomProp(i18n, 'entityRef.entityId', 'comment', {\n dataType: 'string',\n visible: false,\n interface: { type: AXPWidgetsCatalog.text },\n }),\n roomProp(i18n, 'entityRef.entityTypeId', 'comment', {\n dataType: 'string',\n visible: false,\n interface: { type: AXPWidgetsCatalog.text },\n }),\n roomProp(i18n, 'entityRef.moduleName', 'comment', {\n dataType: 'string',\n visible: false,\n interface: { type: AXPWidgetsCatalog.text },\n }),\n roomProp(i18n, 'entityRef.entityName', 'comment', {\n dataType: 'string',\n visible: false,\n interface: { type: AXPWidgetsCatalog.text },\n }),\n roomProp(i18n, 'blocked', 'flags', {\n dataType: 'boolean',\n interface: { type: AXPWidgetsCatalog.toggle },\n }),\n roomProp(i18n, 'pinned', 'flags', {\n dataType: 'boolean',\n interface: { type: AXPWidgetsCatalog.toggle },\n }),\n roomProp(i18n, 'archived', 'flags', {\n dataType: 'boolean',\n interface: { type: AXPWidgetsCatalog.toggle },\n }),\n ],\n columns: [\n { name: 'title' },\n { name: 'kind' },\n { name: 'type' },\n { name: 'lastMessageAt' },\n { name: 'unreadCount' },\n { name: 'pinned' },\n { name: 'archived' },\n ],\n interfaces: {\n master: {\n create: {\n sections: [{ id: 'basic-info' }, { id: 'activity' }, { id: 'comment' }, { id: 'flags' }],\n properties: [\n { name: 'title', layout: { positions: { lg: { colSpan: 6, order: 1 } } } },\n { name: 'name', layout: { positions: { lg: { colSpan: 6, order: 2 } } } },\n { name: 'kind', layout: { positions: { lg: { colSpan: 6, order: 3 } } } },\n { name: 'type', layout: { positions: { lg: { colSpan: 6, order: 4 } } } },\n { name: 'description', layout: { positions: { lg: { colSpan: 12, order: 5 } } } },\n { name: 'avatar', layout: { positions: { lg: { colSpan: 6, order: 6 } } } },\n { name: 'icon', layout: { positions: { lg: { colSpan: 6, order: 7 } } } },\n { name: 'topic', layout: { positions: { lg: { colSpan: 12, order: 8 } } } },\n { name: 'lastMessageAt', layout: { positions: { lg: { colSpan: 6, order: 9 } } } },\n { name: 'unreadCount', layout: { positions: { lg: { colSpan: 6, order: 10 } } } },\n { name: 'pinned', layout: { positions: { lg: { colSpan: 4, order: 11 } } } },\n { name: 'archived', layout: { positions: { lg: { colSpan: 4, order: 12 } } } },\n { name: 'blocked', layout: { positions: { lg: { colSpan: 4, order: 13 } } } },\n ],\n },\n update: {\n sections: [{ id: 'basic-info' }, { id: 'activity' }, { id: 'comment' }, { id: 'flags' }],\n properties: [\n { name: 'title', layout: { positions: { lg: { colSpan: 6, order: 1 } } } },\n { name: 'name', layout: { positions: { lg: { colSpan: 6, order: 2 } } } },\n { name: 'kind', layout: { positions: { lg: { colSpan: 6, order: 3 } } } },\n { name: 'type', layout: { positions: { lg: { colSpan: 6, order: 4 } } } },\n { name: 'description', layout: { positions: { lg: { colSpan: 12, order: 5 } } } },\n { name: 'draft', layout: { positions: { lg: { colSpan: 12, order: 6 } } } },\n { name: 'lastMessageAt', layout: { positions: { lg: { colSpan: 6, order: 7 } } } },\n { name: 'unreadCount', layout: { positions: { lg: { colSpan: 6, order: 8 } } } },\n { name: 'unreadMentions', layout: { positions: { lg: { colSpan: 6, order: 9 } } } },\n { name: 'updatedAt', layout: { positions: { lg: { colSpan: 6, order: 10 } } } },\n { name: 'pinned', layout: { positions: { lg: { colSpan: 4, order: 11 } } } },\n { name: 'archived', layout: { positions: { lg: { colSpan: 4, order: 12 } } } },\n { name: 'blocked', layout: { positions: { lg: { colSpan: 4, order: 13 } } } },\n ],\n },\n single: {\n title: '{{title}}',\n sections: [{ id: 'basic-info' }, { id: 'activity' }, { id: 'flags' }],\n properties: [\n { name: 'title', layout: { positions: { lg: { colSpan: 6, order: 1 } } } },\n { name: 'kind', layout: { positions: { lg: { colSpan: 6, order: 2 } } } },\n { name: 'type', layout: { positions: { lg: { colSpan: 6, order: 3 } } } },\n { name: 'unreadCount', layout: { positions: { lg: { colSpan: 6, order: 4 } } } },\n { name: 'lastMessageAt', layout: { positions: { lg: { colSpan: 6, order: 5 } } } },\n { name: 'description', layout: { positions: { lg: { colSpan: 12, order: 6 } } } },\n ],\n actions: [...entityMasterRecordActions()],\n },\n list: {\n actions: [...entityMasterCrudActions()],\n views: [\n createAllQueryView({\n columns: ['title', 'kind', 'type', 'lastMessageAt', 'unreadCount', 'pinned', 'archived'],\n sorts: [{ name: 'lastMessageAt', dir: 'desc' }],\n }),\n ],\n },\n },\n },\n };\n\n return entityDef;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type {\n AXConversationMetadata,\n AXConversationSettings,\n AXConversationStatus,\n AXConversationType,\n AXMessage,\n AXParticipant,\n} from '@acorex/components/conversation2';\nimport { AXPEntityModel } from '@acorex/platform/layout/entity-contracts';\n\nimport { AXMCommentEntityData } from '../../contracts';\nimport { AXMConversationMessage } from '../message/message.types';\n\n//#endregion\n\n//#region ---- Re-exports ----\n\nexport type {\n AXConversationMetadata,\n AXConversationSettings,\n AXConversationStatus,\n AXConversationType,\n AXParticipant,\n};\n\n//#endregion\n\n//#region ---- Domain enums ----\n\n/** Distinguishes chat inbox rooms from entity comment threads in the unified store. */\nexport type AXMConversationRoomKind = 'chat' | 'comment';\n\n//#endregion\n\n//#region ---- Entity model ----\n\n/**\n * Persisted room entity — conversation2 {@link AXConversation} shape plus platform entity base.\n */\nexport interface AXMConversationRoom extends AXPEntityModel<string> {\n /** Chat vs comment thread discriminator */\n kind: AXMConversationRoomKind;\n /** Conversation type (private, group, channel, bot) */\n type: AXConversationType;\n /** Conversation title/name */\n title: string;\n /** Conversation avatar/image URL */\n avatar?: string;\n /** Font Awesome icon class(es) when no image avatar is used */\n icon?: string;\n /** Conversation description (for groups/channels) */\n description?: string;\n /** List of participants */\n participants: AXParticipant[];\n /** Last message in the conversation */\n lastMessage?: AXMConversationMessage | AXMessage;\n /** Timestamp of last message */\n lastMessageAt: Date;\n /** Number of unread messages */\n unreadCount: number;\n /** Number of unread mentions */\n unreadMentions?: number;\n /** Current status (typing, presence, etc.) */\n status: AXConversationStatus;\n /** User-specific settings */\n settings: AXConversationSettings;\n /** Pinned messages IDs */\n pinnedMessageIds?: string[];\n /** Conversation creation timestamp */\n createdAt: Date;\n /** Last update timestamp */\n updatedAt: Date;\n /** Whether conversation is blocked */\n blocked?: boolean;\n /** Whether conversation is pinned */\n pinned?: boolean;\n /** Whether conversation is archived */\n archived?: boolean;\n /** Draft message text */\n draft?: string;\n /** Custom metadata */\n metadata?: AXConversationMetadata;\n /** Programmatic name for entity admin */\n name?: string;\n /** Entity reference for comment threads */\n entityRef?: AXMCommentEntityData;\n /** Comment thread topic/subject */\n topic?: string;\n}\n\n//#endregion\n","// Entity Services\n// Entity Modules\n\nexport * from './message';\nexport * from './room';\n","import { AXPEntity } from '@acorex/platform/common';\nimport { AXPEntityDefinitionLoader, AXPEntityPreloadEntity } from '@acorex/platform/layout/entity';\nimport { Injectable } from '@angular/core';\nimport { RootConfig } from './contracts';\nimport { messageFactory, roomFactory } from './entities';\n\n@Injectable()\nexport class AXMConversationModuleEntityProvider implements AXPEntityDefinitionLoader {\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();\n case 'message':\n return messageFactory();\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","/** Fired after a user message is persisted — triggers assist, auto-reply, and realtime side effects. */\nexport const CONVERSATION_AFTER_MESSAGE_SENT_COMMAND = 'Conversation:AfterMessageSent';\n\n/** Re-runs AI generation for a failed/incomplete assist placeholder. */\nexport const CONVERSATION_RETRY_ASSIST_RESPONSE_COMMAND = 'Conversation:RetryAssistResponse';\n\n/** Marks conversation messages read and syncs chat notifications. */\nexport const CONVERSATION_SYNC_READ_STATE_COMMAND = 'Conversation:SyncReadState';\n\n/** Marks a conversation as having unread messages. */\nexport const CONVERSATION_MARK_CONVERSATION_UNREAD_COMMAND = 'Conversation:MarkConversationUnread';\n\n/** Sends or clears a typing indicator for the current user. */\nexport const CONVERSATION_EMIT_TYPING_INDICATOR_COMMAND = 'Conversation:EmitTypingIndicator';\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/contracts';\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/contracts';\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/contracts';\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","//#region ---- Imports ----\n\nimport { AXPModuleManifest } from '@acorex/platform/core';\nimport { RootConfig } from './contracts';\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","import { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex/platform/common';\nimport { Injectable, inject } from '@angular/core';\nimport { RootConfig } from './contracts';\nimport { AXPConversationMenuKeys } from './contracts/menu.keys';\nimport { AXMPermissionsKeys } from './contracts/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: 2,\n icon: RootConfig.entities.room.icon,\n badgeKey: 'badge-chat',\n policy: {\n features: [module.module.name],\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 './contracts/permission.keys';\nimport { RootConfig } from './contracts';\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","//#region ---- Imports ----\n\nimport { AXConversationService } from '@acorex/components/conversation2';\nimport { AXPTaskBadgeProvider } from '@acorex/platform/layout/components';\nimport { computed, inject, Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ---- Task Badge Provider ----\n\n/** Provides a live unread conversation count for header/task badges. */\n@Injectable()\nexport class AXMChatBadgeProviderSimple implements AXPTaskBadgeProvider {\n //#region ---- Services & Dependencies ----\n\n private readonly conversationService = inject(AXConversationService);\n\n //#endregion\n\n //#region ---- Signals & Properties ----\n\n readonly key = 'badge-chat';\n\n readonly count = computed(\n () => this.conversationService.conversations().filter((conversation) => conversation.unreadCount > 0).length,\n );\n\n //#endregion\n\n constructor() {\n void this.conversationService.loadConversations();\n }\n}\n\n//#endregion\n","//#region ---- Keys ----\n\nexport const AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_KEY = 'conversation-ai-assist';\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXConversationService } from '@acorex/components/conversation2';\nimport {\n AXP_BACKGROUND_OPERATION_HANDLERS,\n AXPBackgroundOperationHandler,\n type AXPBackgroundOperation,\n} from '@acorex/platform/common';\nimport { AXPExecuteCommand } from '@acorex/platform/contracts';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { Injectable, Provider, inject } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { get } from 'lodash-es';\nimport { AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_KEY } from './conversation-assist-background-operation.keys';\n\n//#endregion\n\n//#region ---- Handler ----\n\n@Injectable()\nexport class AXMConversationAssistBackgroundOperationHandler extends AXPBackgroundOperationHandler {\n readonly providerKey = AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_KEY;\n\n private readonly router = inject(Router);\n private readonly chatService = inject(AXConversationService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly activatedRoute = inject(ActivatedRoute);\n\n async execute(command: AXPExecuteCommand, operation: AXPBackgroundOperation): Promise<void> {\n const conversationId = get(operation.data, 'conversationId');\n if (typeof conversationId !== 'string' || !conversationId.trim()) {\n console.error('conversationId is missing from assist background operation data.');\n return;\n }\n\n const app =\n this.activatedRoute.snapshot.firstChild?.paramMap.get('app') ||\n this.sessionService.application?.name ||\n 'platform';\n\n switch (command.name) {\n case 'click':\n await this.chatService.markAsRead(conversationId);\n await this.router.navigate([app, 'chat', conversationId]);\n break;\n default:\n break;\n }\n }\n}\n\n//#endregion\n\n//#region ---- Providers ----\n\nexport const AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_HANDLERS: Provider[] = [\n {\n provide: AXP_BACKGROUND_OPERATION_HANDLERS,\n useExisting: AXMConversationAssistBackgroundOperationHandler,\n multi: true,\n },\n AXMConversationAssistBackgroundOperationHandler,\n];\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPCommonSettings, AXPSettingsService } from '@acorex/platform/common';\nimport { AXPPlatformScope } from '@acorex/platform/contracts';\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 type {\n AXConnectionStatus,\n AXConversation,\n AXMessage,\n AXPresenceUpdate,\n AXTypingIndicator,\n} from '@acorex/components/conversation2';\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject, filter, map, merge, Observable, pairwise, Subject } from 'rxjs';\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * In-memory event bus for entity-backed chat realtime updates.\n * Replaces {@link conversationSharedStorage} streams for the conversation module.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMConversationRealtimeBus {\n //#region ---- Connection state ----\n\n private readonly connectionStatusSubject = new BehaviorSubject<AXConnectionStatus>('connected');\n\n readonly connectionStatus$ = this.connectionStatusSubject.asObservable();\n\n //#endregion\n\n //#region ---- Message streams ----\n\n private readonly messageStreamSubject = new Subject<AXMessage>();\n private readonly messageUpdateSubject = new Subject<AXMessage>();\n private readonly messageDeletionSubject = new Subject<string>();\n\n readonly messageStream$ = this.messageStreamSubject.asObservable();\n readonly messageUpdates$ = this.messageUpdateSubject.asObservable();\n readonly messageDeletions$ = this.messageDeletionSubject.asObservable();\n\n //#endregion\n\n //#region ---- Conversation streams ----\n\n private readonly conversationUpdateSubject = new Subject<AXConversation>();\n private readonly conversationCreatedSubject = new Subject<AXConversation>();\n\n readonly conversationUpdates$ = this.conversationUpdateSubject.asObservable();\n readonly conversationCreated$ = this.conversationCreatedSubject.asObservable();\n\n //#endregion\n\n //#region ---- Presence & typing ----\n\n private readonly typingIndicatorSubject = new Subject<AXTypingIndicator>();\n private readonly presenceUpdateSubject = new Subject<AXPresenceUpdate>();\n\n readonly typingIndicators$ = this.typingIndicatorSubject.asObservable();\n readonly presenceUpdates$ = this.presenceUpdateSubject.asObservable();\n\n //#endregion\n\n //#region ---- Publishers ----\n\n setConnectionStatus(status: AXConnectionStatus): void {\n this.connectionStatusSubject.next(status);\n }\n\n publishMessage(message: AXMessage): void {\n this.messageStreamSubject.next(message);\n }\n\n publishMessageUpdate(message: AXMessage): void {\n this.messageUpdateSubject.next(message);\n }\n\n publishMessageDeletion(messageId: string): void {\n this.messageDeletionSubject.next(messageId);\n }\n\n publishConversationUpdate(conversation: AXConversation): void {\n this.conversationUpdateSubject.next(conversation);\n }\n\n publishConversationCreated(conversation: AXConversation): void {\n this.conversationCreatedSubject.next(conversation);\n this.conversationUpdateSubject.next(conversation);\n }\n\n publishTypingIndicator(indicator: AXTypingIndicator): void {\n this.typingIndicatorSubject.next(indicator);\n }\n\n publishPresenceUpdate(update: AXPresenceUpdate): void {\n this.presenceUpdateSubject.next(update);\n }\n\n //#endregion\n\n //#region ---- Scoped observables ----\n\n messagesForConversation(conversationId: string): Observable<AXMessage> {\n return this.messageStream$.pipe(filter((msg) => msg.conversationId === conversationId));\n }\n\n messageUpdatesForConversation(conversationId?: string): Observable<AXMessage> {\n if (!conversationId?.trim()) {\n return this.messageUpdates$;\n }\n return this.messageUpdates$.pipe(filter((msg) => msg.conversationId === conversationId));\n }\n\n typingIndicatorsForConversation(conversationId: string): Observable<AXTypingIndicator> {\n return this.typingIndicators$.pipe(filter((ind) => ind.conversationId === conversationId));\n }\n\n messageStatusChanges(conversationId?: string): Observable<{\n messageId: string;\n status: AXMessage['status'];\n timestamp: Date;\n }> {\n const scoped = conversationId?.trim();\n const belongs = (messageId: string): boolean => {\n if (!scoped) {\n return true;\n }\n // Status events carry messageId only; callers filter by conversation when needed.\n void messageId;\n return true;\n };\n\n const fromStream$ = this.messageStream$.pipe(\n filter((message) => !scoped || message.conversationId === scoped),\n map((message) => ({\n messageId: message.id,\n status: message.status,\n timestamp: message.timestamp instanceof Date ? message.timestamp : new Date(message.timestamp),\n })),\n filter((event) => belongs(event.messageId)),\n );\n\n const fromUpdates$ = this.messageUpdates$.pipe(\n pairwise(),\n filter(([previous, current]) => previous.id === current.id && previous.status !== current.status),\n filter(([, current]) => !scoped || current.conversationId === scoped),\n map(([, current]) => ({\n messageId: current.id,\n status: current.status,\n timestamp: current.timestamp instanceof Date ? current.timestamp : new Date(current.timestamp),\n })),\n );\n\n return merge(fromStream$, fromUpdates$);\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport {\n AXConversation,\n AXConversationApi,\n AXMessage,\n AXMessageApi,\n AXRealtimeApi,\n AXUserApi,\n} from '@acorex/components/conversation2';\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ---- Chat API tokens (mock or production implementations) ----\n\n/** User profile, discovery, and presence for conversation chat. */\n@Injectable()\nexport abstract class AXMChatUserApi extends AXUserApi {}\n\n/** Conversation CRUD, participants, and inbox for conversation chat. */\n@Injectable()\nexport abstract class AXMChatConversationApi extends AXConversationApi {\n /** Reports which conversation thread is open in chat UI (mock uses this for notifications). */\n reportFocusedConversation(_conversationId: string | null): void {\n // Production connectivity: no-op unless overridden.\n }\n\n /**\n * Returns every conversation bound to the given entity reference (entity-scoped mini chats).\n * Bypasses the regular inbox filtering so entity chats remain discoverable per entity.\n */\n abstract findEntityConversations(entityType: string, entityId: string): Promise<AXConversation[]>;\n}\n\n/** Message CRUD, reactions, and assist replies for conversation chat. */\n@Injectable()\nexport abstract class AXMChatMessageApi extends AXMessageApi {\n /**\n * Re-runs AI generation for an incomplete or failed assist placeholder.\n * Reuses the same message id so the conversation timeline stays ordered.\n */\n abstract retryAssistResponse(conversationId: string, messageId: string): Promise<AXMessage>;\n}\n\n/** Realtime streams (messages, typing, presence) for conversation chat. */\n@Injectable()\nexport abstract class AXMChatRealtimeApi extends AXRealtimeApi {}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { isNil, isString } from 'lodash-es';\n\n//#endregion\n\n//#region ---- Types ----\n\n/** Entity reference an entity-scoped chat is bound to (stored in conversation metadata). */\nexport interface AXMEntityChatRef {\n entityId: string;\n entityType: string;\n}\n\n//#endregion\n\n//#region ---- Metadata builder ----\n\n/**\n * Conversation metadata for an entity-scoped assist chat.\n * Keeps `assistId` so the existing assist reply pipeline still answers in entity chats.\n */\nexport function axmBuildEntityChatConversationMetadata(args: {\n entityId: string;\n entityType: string;\n assistId: string;\n}): Record<string, unknown> {\n return {\n assistId: args.assistId.trim(),\n entityId: args.entityId.trim(),\n entityType: args.entityType.trim(),\n };\n}\n\n//#endregion\n\n//#region ---- Metadata extractors ----\n\n/**\n * Resolves the entity reference from conversation metadata.\n * `AXConversationService.createConversation` may nest the UI object, so values\n * are also probed at `metadata.metadata.*`.\n */\nexport function axmExtractEntityRefFromMetadata(\n metadata: Record<string, unknown> | undefined,\n): AXMEntityChatRef | undefined {\n if (isNil(metadata)) {\n return undefined;\n }\n\n const entityId = readMetadataString(metadata, 'entityId');\n const entityType = readMetadataString(metadata, 'entityType');\n if (!entityId || !entityType) {\n return undefined;\n }\n\n return { entityId, entityType };\n}\n\n/** True when the conversation is bound to an entity (has both entity id and type). */\nexport function axmConversationIsEntityChat(metadata: Record<string, unknown> | undefined): boolean {\n return !isNil(axmExtractEntityRefFromMetadata(metadata));\n}\n\n/** True when conversation metadata targets the given entity reference. */\nexport function axmConversationMatchesEntity(\n metadata: Record<string, unknown> | undefined,\n ref: AXMEntityChatRef,\n): boolean {\n const resolved = axmExtractEntityRefFromMetadata(metadata);\n if (!resolved) {\n return false;\n }\n return resolved.entityId === ref.entityId.trim() && resolved.entityType === ref.entityType.trim();\n}\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction readMetadataString(metadata: Record<string, unknown>, key: string): string | undefined {\n const direct = metadata[key];\n if (isString(direct) && direct.trim()) {\n return direct.trim();\n }\n\n const nested = metadata['metadata'];\n if (!isNil(nested) && typeof nested === 'object') {\n const inner = (nested as Record<string, unknown>)[key];\n if (isString(inner) && inner.trim()) {\n return inner.trim();\n }\n }\n\n return undefined;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { type AXConversation, AXConversationService } from '@acorex/components/conversation2';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPAiManagerService } from '@acorex/modules/ai-management';\nimport { AXPEntityDefinitionRegistryService } from '@acorex/platform/layout/entity';\nimport { inject, Injectable } from '@angular/core';\nimport {\n axmChatAiPeerParticipantId,\n axmChatAiTargetAvatarUrl,\n axmLoadChatAiTargets,\n type AXMChatAiTargetRow,\n} from '../chat/plugins/utils/chat-ai-target.util';\nimport { AXMChatConversationApi } from '../chat/plugins/services/chat-conversation-apis.abstract';\nimport { axmBuildEntityChatConversationMetadata, type AXMEntityChatRef } from './entity-chat.util';\nimport { AXPMultiLanguageString } from '@acorex/platform/contracts';\n\n//#endregion\n\n//#region ---- Types ----\n\n/** Arguments accepted by `AXConversationService.createConversation`, prebuilt for an entity chat. */\nexport interface AXMEntityChatCreateData {\n participantIds: string[];\n type: 'bot';\n options: {\n title: string;\n avatar?: string;\n icon: string;\n metadata: Record<string, unknown>;\n };\n}\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * Backing service for the entity-scoped mini chat: finds the conversations bound to an entity\n * (an entity may have several) and prepares the create payload for a new entity assist chat.\n *\n * Conversation creation/selection is performed by the caller using its own\n * {@link AXConversationService} instance so the mini chat keeps its active-selection state\n * isolated from the main chat page.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMEntityChatService {\n //#region ---- Services & Dependencies ----\n\n private readonly conversationApi = inject(AXMChatConversationApi);\n private readonly conversationService = inject(AXConversationService);\n private readonly entityRegistry = inject(AXPEntityDefinitionRegistryService);\n private readonly translationService = inject(AXTranslationService);\n private readonly aiManager = inject(AXPAiManagerService, { optional: true });\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /** Returns every conversation bound to the given entity reference. */\n findEntityConversations(ref: AXMEntityChatRef): Promise<AXConversation[]> {\n return this.conversationApi.findEntityConversations(ref.entityType.trim(), ref.entityId.trim());\n }\n\n /** Creates a new entity-scoped assist conversation and selects it as the active conversation. */\n async createEntityChat(ref: AXMEntityChatRef, assistId?: string): Promise<AXConversation> {\n const createData = await this.buildEntityChatCreateData(ref, assistId);\n const conversation = await this.conversationService.createConversation(\n createData.participantIds,\n createData.type,\n createData.options,\n );\n await this.conversationService.selectConversation(conversation.id);\n return conversation;\n }\n\n /**\n * Builds the `createConversation` payload for a new entity assist chat.\n * Uses `assistId` when provided, otherwise the tenant default assist.\n */\n async buildEntityChatCreateData(ref: AXMEntityChatRef, assistId?: string): Promise<AXMEntityChatCreateData> {\n const row = await this.resolveAssistRow(assistId);\n const avatar = axmChatAiTargetAvatarUrl(row);\n\n return {\n participantIds: [axmChatAiPeerParticipantId(row.id)],\n type: 'bot',\n options: {\n title: this.resolveTitle(row),\n ...(avatar ? { avatar } : {}),\n icon: 'fa-solid fa-robot',\n metadata: axmBuildEntityChatConversationMetadata({\n entityId: ref.entityId,\n entityType: ref.entityType,\n assistId: row.id,\n }),\n },\n };\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n /** Resolves the assist catalog row to chat with (explicit id → tenant default → first row). */\n private async resolveAssistRow(assistId?: string): Promise<AXMChatAiTargetRow> {\n const rows = await axmLoadChatAiTargets(this.entityRegistry);\n if (!rows.length) {\n throw new Error('No assist targets are available to start an entity chat.');\n }\n\n const requestedId = assistId?.trim() || (await this.resolveDefaultAssistId());\n const match = requestedId ? rows.find((row) => row.id === requestedId) : undefined;\n return match ?? rows[0];\n }\n\n private async resolveDefaultAssistId(): Promise<string | undefined> {\n if (!this.aiManager) {\n return undefined;\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 entity mini chat:', error);\n return undefined;\n }\n }\n\n private resolveTitle(row: AXMChatAiTargetRow): string {\n return this.translationService.resolve(row.title as AXPMultiLanguageString) ?? row.name;\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 /** When `false`, the chip command sends the message without routing to the chat app (e.g. mini chat). */\n navigate?: boolean;\n /** Entity reference so a chip-created conversation stays bound to its entity (mini chat). */\n entityId?: string;\n entityType?: 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 ...(options?.navigate === false ? { navigate: false } : {}),\n ...(options?.entityId ? { entityId: options.entityId } : {}),\n ...(options?.entityType ? { entityType: options.entityType } : {}),\n },\n },\n }));\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport {\n AXConversationService,\n type AXConversation,\n type AXMessagePayload,\n} from '@acorex/components/conversation2';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPMultiLanguageString } from '@acorex/platform/contracts';\nimport { AXPEntityDefinitionRegistryService } from '@acorex/platform/layout/entity';\nimport { AXMEntityChatService } from '../../../mini-chat/entity-chat.service';\nimport {\n axmBuildAiChatConversationMetadata,\n axmChatAiPeerParticipantId,\n axmChatAiTargetAvatarUrl,\n axmLoadChatAiTargets,\n type AXMChatAiTargetRow,\n} from './chat-ai-target.util';\nimport type { AXMSendAssistChatMessageOptions } from '../../../commands/send-assist-chat-message.command';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXMAssistStarterPromptSendDeps {\n conversationService: AXConversationService;\n entityChatService: AXMEntityChatService;\n entityRegistry: AXPEntityDefinitionRegistryService;\n translationService: AXTranslationService;\n}\n\n//#endregion\n\n//#region ---- Send ----\n\n/**\n * Sends a starter-prompt chip message using the caller's {@link AXConversationService} instance\n * (e.g. inbox mini chat overlay) without routing to the full chat page.\n */\nexport async function axmSendAssistStarterPromptInPlace(\n deps: AXMAssistStarterPromptSendDeps,\n text: string,\n options: Partial<AXMSendAssistChatMessageOptions>,\n): Promise<{ conversationId: string } | null> {\n const trimmedText = text.trim();\n if (!trimmedText) {\n return null;\n }\n\n let conversationId =\n (typeof options.conversationId === 'string' ? options.conversationId.trim() : '') ||\n deps.conversationService.activeConversationId()?.trim() ||\n '';\n\n if (!conversationId) {\n const assistId =\n (typeof options.assistId === 'string' ? options.assistId.trim() : '') ||\n (typeof options.targetId === 'string' ? options.targetId.trim() : '');\n if (!assistId) {\n return null;\n }\n\n const entityId = typeof options.entityId === 'string' ? options.entityId.trim() : '';\n const entityType = typeof options.entityType === 'string' ? options.entityType.trim() : '';\n\n const conversation =\n entityId && entityType\n ? await createEntityConversation(deps, { entityId, entityType }, assistId)\n : await createAssistConversation(deps, assistId);\n\n if (!conversation?.id) {\n return null;\n }\n\n conversationId = conversation.id;\n await deps.conversationService.selectConversation(conversationId);\n }\n\n const payload: AXMessagePayload = { type: 'text', text: trimmedText };\n await deps.conversationService.sendMessage({\n conversationId,\n type: 'text',\n payload,\n });\n\n return { conversationId };\n}\n\n//#endregion\n\n//#region ---- Conversation creation ----\n\nasync function createEntityConversation(\n deps: AXMAssistStarterPromptSendDeps,\n ref: { entityId: string; entityType: string },\n assistId: string,\n): Promise<AXConversation> {\n const createData = await deps.entityChatService.buildEntityChatCreateData(ref, assistId);\n return deps.conversationService.createConversation(\n createData.participantIds,\n createData.type,\n createData.options,\n );\n}\n\nasync function createAssistConversation(\n deps: AXMAssistStarterPromptSendDeps,\n assistId: string,\n): Promise<AXConversation | null> {\n const rows = await axmLoadChatAiTargets(deps.entityRegistry);\n const row = rows.find((item) => item.id === assistId);\n if (!row) {\n return null;\n }\n\n const participantId = axmChatAiPeerParticipantId(row.id);\n const avatar = axmChatAiTargetAvatarUrl(row);\n\n return deps.conversationService.createConversation([participantId], 'bot', {\n title: resolveAssistTitle(deps.translationService, row),\n ...(avatar ? { avatar } : {}),\n icon: 'fa-solid fa-robot',\n metadata: axmBuildAiChatConversationMetadata(row),\n });\n}\n\nfunction resolveAssistTitle(translationService: AXTranslationService, row: AXMChatAiTargetRow): string {\n return translationService.resolve(row.title as AXPMultiLanguageString) ?? row.name;\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 { AXPEntityDefinitionRegistryService } from '@acorex/platform/layout/entity';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, output } from '@angular/core';\nimport { CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND } from '../../../commands/conversation-command.keys';\nimport type { AXMSendAssistChatMessageOptions } from '../../../commands/send-assist-chat-message.command';\nimport { AXMEntityChatService } from '../../../mini-chat/entity-chat.service';\nimport { AXConversationService } from '@acorex/components/conversation2';\nimport {\n axmAssistNormalizeFollowUpItemsForConversation,\n axmAssistResolveFollowUpCommandName,\n} from '../utils/assist-suggestion-chips.util';\nimport { axmSendAssistStarterPromptInPlace } from '../utils/assist-starter-prompt-send.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]=\"resolveChipLabel(item)\"\n (onClick)=\"onChipClick(item)\"\n ></ax-button>\n }\n </div>\n }\n `,\n})\nexport class AXMAssistSuggestionChipsComponent {\n readonly items = input<AXPAiChatFollowUpItem[]>([]);\n\n /** When true, sends starter prompts via the local {@link AXConversationService} instead of routing to chat. */\n readonly sendInPlace = input(false);\n\n /** Emits when an in-place send creates a new conversation (mini chat empty state). */\n readonly conversationCreated = output<string>();\n\n protected readonly normalizedItems = computed(() =>\n axmAssistNormalizeFollowUpItemsForConversation(this.items()),\n );\n\n private readonly commandService = inject(AXPCommandService);\n private readonly conversationService = inject(AXConversationService);\n private readonly entityChatService = inject(AXMEntityChatService);\n private readonly entityRegistry = inject(AXPEntityDefinitionRegistryService);\n private readonly translationService = inject(AXTranslationService);\n\n protected async onChipClick(item: AXPAiChatFollowUpItem): Promise<void> {\n const text = this.resolveItemText(item);\n if (!text) {\n return;\n }\n\n if (this.sendInPlace() && this.isSendAssistChatMessageCommand(item)) {\n const hadConversation = Boolean(this.conversationService.activeConversationId()?.trim());\n const result = await axmSendAssistStarterPromptInPlace(\n {\n conversationService: this.conversationService,\n entityChatService: this.entityChatService,\n entityRegistry: this.entityRegistry,\n translationService: this.translationService,\n },\n text,\n (item.command.options ?? {}) as Partial<AXMSendAssistChatMessageOptions>,\n );\n\n if (result && !hadConversation) {\n this.conversationCreated.emit(result.conversationId);\n }\n return;\n }\n\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 await this.commandService.execute(name, {\n ...(item.command.options ?? {}),\n text,\n });\n }\n\n protected resolveChipLabel(item: AXPAiChatFollowUpItem): string {\n return this.resolveItemText(item);\n }\n\n private isSendAssistChatMessageCommand(item: AXPAiChatFollowUpItem): boolean {\n const rawName = item.command.name.trim();\n if (!rawName) {\n return false;\n }\n\n const resolved = axmAssistResolveFollowUpCommandName(rawName, (key) => this.commandService.exists(key));\n return resolved === CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND;\n }\n\n private resolveItemText(item: AXPAiChatFollowUpItem): string {\n const label = item.text;\n if (typeof label === 'string') {\n const trimmed = label.trim();\n if (trimmed.startsWith('@')) {\n return (this.translationService.resolve(trimmed) ?? trimmed).trim();\n }\n return trimmed;\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","//#region ---- Imports ----\n\nimport {\n AXConversationService,\n AXMessageApi,\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, input, signal, untracked } from '@angular/core';\nimport { AXMConversationRealtimeBus } from '../../services/conversation-realtime.bus';\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 { AXMChatConversationApi, 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'] === true && meta?.['isStreaming'] === true;\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()\" [sendInPlace]=\"sendStarterPromptsInPlace()\" />\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 ---- Inputs ----\n\n /** Mini chat: send starter prompts in the overlay without routing to the chat app. */\n readonly sendStarterPromptsInPlace = input(false);\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private readonly conversationService = inject(AXConversationService);\n private readonly conversationApi = inject(AXMChatConversationApi);\n private readonly realtimeBus = inject(AXMConversationRealtimeBus);\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 = signal<AXConversation | null>(null);\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 = this.realtimeBus.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 = await this.conversationApi.getConversation(conversationId);\n this.activeConversation.set(conversation);\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 // Entity-bound conversations (mini chat) send in place and must not route to the chat app.\n const isEntityChat = Boolean(conversation.metadata?.['entityId'] && conversation.metadata?.['entityType']);\n const sendInPlace = this.sendStarterPromptsInPlace();\n const items = axmAssistStarterPromptChipItems(assist, {\n conversationId: conversationId ?? undefined,\n ...(isEntityChat\n ? {\n navigate: false,\n entityId: String(conversation.metadata?.['entityId'] ?? '').trim() || undefined,\n entityType: String(conversation.metadata?.['entityType'] ?? '').trim() || undefined,\n }\n : {}),\n ...(sendInPlace ? { navigate: false } : {}),\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/contracts';\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 input,\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\n [items]=\"starterPromptItems()\"\n [sendInPlace]=\"sendStarterPromptsInPlace()\"\n (conversationCreated)=\"conversationCreated.emit($event)\"\n />\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 /** Optional assist to preselect (e.g. when launched from an entity mini chat). */\n readonly initialAssistId = input<string | undefined>(undefined);\n\n /** When both are provided, the created conversation is tagged as an entity-scoped chat. */\n readonly entityId = input<string | undefined>(undefined);\n readonly entityType = input<string | undefined>(undefined);\n\n /** Mini chat: send starter prompts in the overlay without routing to the chat app. */\n readonly sendStarterPromptsInPlace = input(false);\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 entityId = this.entityId()?.trim();\n const entityType = this.entityType()?.trim();\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: {\n ...axmBuildAiChatConversationMetadata(row),\n ...(entityId && entityType ? { entityId, entityType } : {}),\n },\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 requestedId = this.initialAssistId()?.trim();\n if (requestedId && rows.some((row) => row.id === requestedId)) {\n return requestedId;\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 const entityId = this.entityId()?.trim();\n const entityType = this.entityType()?.trim();\n const isEntityChat = Boolean(entityId && entityType);\n const sendInPlace = this.sendStarterPromptsInPlace();\n this.starterPromptItems.set(\n axmAssistStarterPromptChipItems(assist, {\n assistId: id,\n ...(isEntityChat ? { entityId, entityType } : {}),\n ...(sendInPlace || isEntityChat ? { navigate: false } : {}),\n }),\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","//#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\nconst AXM_ASSIST_NON_MARKDOWN_JSON_TYPES = new Set(['node', 'followUp', 'tool', 'agent', 'file', 'error']);\n\n/**\n * Specialist / structured JSON relayed as {@code text} — not end-user markdown\n * ({@code node}, {@code followUp}, aggregates, widget layout, etc.).\n */\nfunction axmIsAssistInternalAgentJsonText(raw: string): boolean {\n const body = axmParseAssistTranscriptTextEnvelope(raw).body.trim();\n if (!body.startsWith('{') && !body.startsWith('[')) {\n return false;\n }\n try {\n const parsed = JSON.parse(body) as unknown;\n if (parsed == null) {\n return false;\n }\n if (Array.isArray(parsed)) {\n return true;\n }\n if (typeof parsed !== 'object') {\n return false;\n }\n const rec = parsed as Record<string, unknown>;\n if (typeof rec['resultType'] === 'string') {\n return true;\n }\n if (typeof rec['entityFullName'] === 'string' && ('data' in rec || 'aggregateRows' in rec)) {\n return true;\n }\n const type = rec['type'];\n if (typeof type === 'string') {\n if (AXM_ASSIST_NON_MARKDOWN_JSON_TYPES.has(type) || type.includes('Widget:')) {\n return true;\n }\n }\n return false;\n } catch {\n return axmLooksLikeInternalAssistJsonPrefix(body);\n }\n}\n\nfunction axmLooksLikeInternalAssistJsonPrefix(raw: string): boolean {\n const trimmed = raw.trimStart();\n if (!trimmed.startsWith('{')) {\n return false;\n }\n return (\n /^\\{\\s*\"type\"\\s*:\\s*\"(?:node|followUp|tool|agent|file|error)\"/.test(trimmed) ||\n /^\\{\\s*\"resultType\"\\s*:/.test(trimmed) ||\n /^\\{\\s*\"type\"\\s*:\\s*\"[^\"]*Widget:/.test(trimmed)\n );\n}\n\nfunction axmTryExtractJsonObjectAt(source: string, start: number): { json: string; end: number } | null {\n if (source[start] !== '{') {\n return null;\n }\n let depth = 0;\n let inString = false;\n let escape = false;\n for (let i = start; i < source.length; i++) {\n const ch = source[i];\n if (inString) {\n if (escape) {\n escape = false;\n } else if (ch === '\\\\') {\n escape = true;\n } else if (ch === '\"') {\n inString = false;\n }\n continue;\n }\n if (ch === '\"') {\n inString = true;\n continue;\n }\n if (ch === '{') {\n depth++;\n } else if (ch === '}') {\n depth--;\n if (depth === 0) {\n return { json: source.slice(start, i + 1), end: i + 1 };\n }\n }\n }\n return null;\n}\n\nfunction axmParseAssistRenderableResponseFromInternalJson(json: string): AXPAiChatResponse | null {\n if (!axmIsAssistInternalAgentJsonText(json)) {\n return null;\n }\n try {\n const parsed = JSON.parse(axmParseAssistTranscriptTextEnvelope(json).body.trim()) as unknown;\n if (parsed == null || typeof parsed !== 'object' || Array.isArray(parsed)) {\n return null;\n }\n const rec = parsed as Record<string, unknown>;\n const type = rec['type'];\n if (type === 'node' && 'content' in rec && axmAssistWidgetNodeFromUnknown(rec) != null) {\n return { type: 'node', content: rec['content'] };\n }\n if (type === 'followUp' && Array.isArray(rec['content'])) {\n const items = axmAssistNormalizeFollowUpItemsForConversation(rec['content'] as AXPAiChatFollowUpItem[]);\n return items.length > 0 ? { type: 'followUp', content: items } : null;\n }\n if (type === 'file' && rec['content'] != null && typeof rec['content'] === 'object' && !Array.isArray(rec['content'])) {\n const fileContent = rec['content'] as { fileId?: unknown; isDownloadable?: unknown };\n const fileId = typeof fileContent.fileId === 'string' ? fileContent.fileId.trim() : '';\n if (fileId) {\n return {\n type: 'file',\n content: {\n fileId,\n ...(fileContent.isDownloadable ? { isDownloadable: true } : {}),\n },\n };\n }\n }\n } catch {\n return null;\n }\n return null;\n}\n\nexport interface AxmAssistPartitionedAnswerText {\n markdown: string;\n renderable: AXPAiChatResponse[];\n}\n\n/**\n * Splits user-facing markdown from embedded {@code node}/{@code followUp} JSON so widgets render after text.\n */\nexport function axmPartitionAssistAnswerText(raw: string): AxmAssistPartitionedAnswerText {\n if (!raw) {\n return { markdown: '', renderable: [] };\n }\n const textParts: string[] = [];\n const renderable: AXPAiChatResponse[] = [];\n let i = 0;\n while (i < raw.length) {\n const braceAt = raw.indexOf('{', i);\n if (braceAt < 0) {\n textParts.push(raw.slice(i));\n break;\n }\n if (braceAt > i) {\n textParts.push(raw.slice(i, braceAt));\n }\n const extracted = axmTryExtractJsonObjectAt(raw, braceAt);\n if (extracted) {\n const structured = axmParseAssistRenderableResponseFromInternalJson(extracted.json);\n if (structured) {\n renderable.push(structured);\n } else if (!axmIsAssistInternalAgentJsonText(extracted.json)) {\n textParts.push(extracted.json);\n }\n i = extracted.end;\n continue;\n }\n if (axmLooksLikeInternalAssistJsonPrefix(raw.slice(braceAt))) {\n break;\n }\n textParts.push(raw[braceAt] ?? '');\n i = braceAt + 1;\n }\n return {\n markdown: textParts\n .join('')\n .replace(/\\n{3,}/g, '\\n\\n')\n .trim(),\n renderable,\n };\n}\n\n/** Removes embedded {@code node}/{@code followUp}/aggregate JSON from answer markdown (stream + finalize). */\nexport function axmSanitizeAssistUserAnswerText(raw: string): string {\n return axmPartitionAssistAnswerText(raw).markdown;\n}\n\n/** End-user markdown from the supervisor — excludes empty fences and internal JSON blobs. */\nfunction axmIsUserVisibleAssistTextContent(raw: string): boolean {\n const body = axmParseAssistTranscriptTextEnvelope(raw).body.trim();\n if (!body || body === '```' || body === '```json') {\n return false;\n }\n return !axmIsAssistInternalAgentJsonText(raw);\n}\n\n/**\n * Merges streamed answer markdown with transcript-derived text so finalize does not drop interim narration.\n */\nexport function axmResolveAssistFinalAnswerText(streamDraft: string, transcriptAnswer: string): string {\n const stream = axmSanitizeAssistUserAnswerText(streamDraft);\n const transcript = axmSanitizeAssistUserAnswerText(transcriptAnswer);\n if (!stream) {\n return transcript;\n }\n if (!transcript) {\n return stream;\n }\n if (stream.includes(transcript)) {\n return stream;\n }\n if (transcript.includes(stream)) {\n return transcript;\n }\n return axmSanitizeAssistUserAnswerText(`${stream}\\n\\n${transcript}`);\n}\n\nfunction axmMergeAssistPayloadResponses(\n line: AXPAiChatMessage,\n partitioned: AxmAssistPartitionedAnswerText,\n): AXPAiChatMessage {\n const nodeKeys = new Set<string>();\n const fileIds = new Set<string>();\n const attachments: AXPAiChatResponse[] = [];\n let followUp: Extract<AXPAiChatResponse, { type: 'followUp' }> | null = null;\n\n const tryPush = (seg: AXPAiChatResponse): void => {\n if (seg.type === 'node') {\n const key = JSON.stringify(seg.content);\n if (nodeKeys.has(key)) {\n return;\n }\n nodeKeys.add(key);\n attachments.push(seg);\n return;\n }\n if (seg.type === 'file') {\n const fileId = seg.content.fileId?.trim() ?? '';\n if (fileId && fileIds.has(fileId)) {\n return;\n }\n if (fileId) {\n fileIds.add(fileId);\n }\n attachments.push(seg);\n return;\n }\n if (seg.type === 'followUp' && followUp == null && seg.content.length > 0) {\n followUp = seg;\n }\n };\n\n for (const seg of line.responses) {\n if (seg.type === 'node' || seg.type === 'file') {\n tryPush(seg);\n } else if (seg.type === 'followUp') {\n tryPush(seg);\n }\n }\n for (const seg of partitioned.renderable) {\n tryPush(seg);\n }\n\n const responses: AXPAiChatResponse[] = [];\n if (partitioned.markdown) {\n responses.push({ type: 'text', content: partitioned.markdown });\n }\n responses.push(...attachments);\n if (followUp) {\n responses.push(followUp);\n }\n if (responses.length === 0) {\n return line;\n }\n return axmNormalizeAssistTranscriptLineResponses({ role: 'assistant', responses });\n}\n\n/** Replaces the payload line's text segment with the finalized answer markdown. */\nexport function axmApplyAnswerTextToAssistPayloadLine(line: AXPAiChatMessage, answerText: string): AXPAiChatMessage {\n const partitioned = axmPartitionAssistAnswerText(answerText);\n if (!partitioned.markdown && partitioned.renderable.length === 0) {\n return line;\n }\n return axmMergeAssistPayloadResponses(line, partitioned);\n}\n\n/**\n * User-facing payload line for the assist bubble: supervisor markdown narration for the turn, plus\n * {@code node}/{@code file}/{@code followUp} from the turn (including specialist {@code agent_result}).\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 attachmentResponses: AXPAiChatResponse[] = [];\n const rawTextBodies: string[] = [];\n let followUpItems: AXPAiChatFollowUpItem[] | null = null;\n const nodeKeys = new Set<string>();\n const fileIds = new Set<string>();\n\n const tryPushAttachment = (seg: AXPAiChatResponse): void => {\n if (seg.type === 'node') {\n const key = JSON.stringify(seg.content);\n if (nodeKeys.has(key)) {\n return;\n }\n nodeKeys.add(key);\n } else if (seg.type === 'file') {\n const fileId = seg.content.fileId?.trim() ?? '';\n if (fileId && fileIds.has(fileId)) {\n return;\n }\n if (fileId) {\n fileIds.add(fileId);\n }\n } else {\n return;\n }\n attachmentResponses.push(seg);\n };\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') {\n const body = axmParseAssistTranscriptTextEnvelope(r.content).body.trim();\n if (body) {\n rawTextBodies.push(body);\n }\n } else if (r.type === 'node' || r.type === 'file') {\n tryPushAttachment(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 === 'node' || seg.type === 'file') {\n tryPushAttachment(seg);\n }\n }\n }\n }\n\n const partitioned = axmPartitionAssistAnswerText(\n rawTextBodies\n .map((body) => body.trim())\n .filter((body) => body.length > 0)\n .join('\\n\\n'),\n );\n for (const seg of partitioned.renderable) {\n if (seg.type === 'node' || seg.type === 'file') {\n tryPushAttachment(seg);\n } else if (seg.type === 'followUp' && followUpItems == null) {\n followUpItems = seg.content;\n }\n }\n\n const responses: AXPAiChatResponse[] = [];\n if (partitioned.markdown) {\n responses.push({ type: 'text', content: partitioned.markdown });\n }\n responses.push(...attachmentResponses);\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(/&lt;(\\/?redacted_thinking)&gt;/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 return axmIsUserVisibleAssistTextContent(seg.content);\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 return axmIsUserVisibleAssistTextContent(seg.content);\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; isDownloadable?: boolean }\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 ...(seg.content.isDownloadable ? { isDownloadable: true } : {}),\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 ...(ds.content.isDownloadable ? { isDownloadable: true } : {}),\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","//#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, axpSanitizeLastProviderPayloadForPersistence } 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 = axpSanitizeLastProviderPayloadForPersistence(\n lastProvider as AXPAiEngineLastProviderPayload,\n );\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 type AXComposerActionComponent,\n type AXConversation,\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 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 localeRaw = platformRuntimeContext['locale'];\n const locale =\n typeof localeRaw === 'string' && localeRaw.trim()\n ? localeRaw.trim()\n : '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 localeForSpeech = platformRuntimeContext['locale'];\n const language = this.localeToTranscriptionLanguage(\n typeof localeForSpeech === 'string' ? localeForSpeech : undefined,\n );\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\n await this.conversationService.sendMessage(\n {\n conversationId: conversation.id,\n type: 'voice',\n payload: {\n type: 'voice',\n url: '',\n duration: this.recordingDuration(),\n },\n },\n {\n media: {\n source: audioFile,\n fileName: audioFile.name,\n mimeType: audioFile.type,\n },\n },\n );\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","//#region ---- Timestamp coercion ----\n\nimport type { AXMessage } from '@acorex/components/conversation2';\n\nexport function axmCoerceTimestampMs(value: unknown): number {\n if (value instanceof Date) {\n return value.getTime();\n }\n if (typeof value === 'string' || typeof value === 'number') {\n const ms = new Date(value).getTime();\n return Number.isFinite(ms) ? ms : 0;\n }\n return 0;\n}\n\n/** Coerces entity / IndexedDB values to {@link Date} for conversation2 UI sorting. */\nexport function axmCoerceDate(value: unknown): Date {\n if (value instanceof Date) {\n return value;\n }\n if (typeof value === 'string' || typeof value === 'number') {\n const ms = new Date(value).getTime();\n return Number.isFinite(ms) ? new Date(ms) : new Date(0);\n }\n return new Date(0);\n}\n\nexport function axmSortMessagesNewestFirst(messages: AXMessage[]): AXMessage[] {\n return [...messages].sort((a, b) => axmCoerceTimestampMs(b.timestamp) - axmCoerceTimestampMs(a.timestamp));\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXConversation, AXMessage, AXParticipant } from '@acorex/components/conversation2';\nimport { AXMConversationMessage, AXMConversationRoom } from '../../../../../entities';\nimport { axmCoerceDate } from '../../utils/conversation-time.util';\n\n//#endregion\n\n//#region ---- Room mapping ----\n\n/**\n * Maps a persisted room entity to the conversation2 {@link AXConversation} contract.\n */\nexport function axmRoomEntityToConversation(room: AXMConversationRoom): AXConversation {\n return {\n id: room.id,\n type: room.type,\n title: room.title,\n avatar: room.avatar,\n icon: room.icon,\n description: room.description,\n participants: room.participants,\n lastMessage: room.lastMessage ? axmMessageEntityToMessage(room.lastMessage as AXMConversationMessage) : undefined,\n lastMessageAt: axmCoerceDate(room.lastMessageAt),\n unreadCount: room.unreadCount,\n unreadMentions: room.unreadMentions,\n status: room.status,\n settings: room.settings,\n pinnedMessageIds: room.pinnedMessageIds,\n createdAt: axmCoerceDate(room.createdAt),\n updatedAt: axmCoerceDate(room.updatedAt),\n blocked: room.blocked,\n pinned: room.pinned ?? false,\n archived: room.archived ?? false,\n draft: room.draft,\n metadata: room.metadata,\n };\n}\n\n//#endregion\n\n//#region ---- Message mapping ----\n\n/**\n * Maps a persisted message entity to the conversation2 {@link AXMessage} contract.\n */\nexport function axmMessageEntityToMessage(message: AXMConversationMessage): AXMessage {\n return {\n id: message.id,\n conversationId: message.conversationId,\n senderId: message.senderId,\n type: message.type,\n fileType: message.fileType,\n timestamp: axmCoerceDate(message.timestamp),\n payload: message.payload,\n status: message.status,\n replyTo: message.replyTo ? axmMessageEntityToMessage(message.replyTo) : undefined,\n forwarded: message.forwarded,\n forwardedFrom: message.forwardedFrom,\n reactions: message.reactions ?? [],\n pinned: message.pinned,\n editedAt: message.editedAt ? axmCoerceDate(message.editedAt) : undefined,\n deleted: message.deleted,\n deletedAt: message.deletedAt ? axmCoerceDate(message.deletedAt) : undefined,\n isLocal: message.isLocal,\n metadata: message.metadata,\n };\n}\n\n//#endregion\n\n//#region ---- User mapping ----\n\n/**\n * Maps a security-management user row to {@link AXParticipant}.\n */\nexport function axmUserRowToParticipant(user: {\n id: string;\n displayName?: string;\n username?: string;\n}): AXParticipant {\n return {\n id: user.id,\n name: user.displayName ?? user.username ?? user.id,\n role: 'member',\n status: 'online',\n };\n}\n\n//#endregion\n","//#region ---- Types ----\n\n/** Persisted on assist message metadata (`assistResponseStatus`). */\nexport type AxmAssistResponseStatus = 'streaming' | 'complete' | 'incomplete' | 'failed';\n\n//#endregion\n\n//#region ---- Readers ----\n\n/**\n * Resolves assist response lifecycle from message metadata.\n * Falls back to legacy `isStreaming` when `assistResponseStatus` is absent.\n */\nexport function axmReadAssistResponseStatus(metadata: unknown): AxmAssistResponseStatus {\n const meta = metadata as Record<string, unknown> | undefined;\n if (!meta) {\n return 'complete';\n }\n\n const status = meta['assistResponseStatus'];\n if (\n status === 'streaming' ||\n status === 'complete' ||\n status === 'incomplete' ||\n status === 'failed'\n ) {\n return status;\n }\n\n if (meta['isStreaming'] === true) {\n return 'streaming';\n }\n\n return 'complete';\n}\n\n/** User-facing error stored when generation fails (`assistResponseError`). */\nexport function axmReadAssistResponseError(metadata: unknown): string | undefined {\n const meta = metadata as Record<string, unknown> | undefined;\n if (!meta) {\n return undefined;\n }\n const err = meta['assistResponseError'];\n return typeof err === 'string' && err.trim() ? err.trim() : undefined;\n}\n\nexport function axmIsAssistRetryableStatus(status: AxmAssistResponseStatus): boolean {\n return status === 'incomplete' || status === 'failed';\n}\n\nexport function axmIsAssistStreamingStatus(status: AxmAssistResponseStatus): boolean {\n return status === 'streaming';\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXMessage } from '@acorex/components/conversation2';\nimport { axmReadAssistResponseStatus } from './assist-response-status.util';\n\n//#endregion\n\n//#region ---- Unread rules ----\n\n/**\n * True while an assist placeholder is still generating (not yet a deliverable reply).\n */\nexport function axmIsAssistStreamingMessage(message: AXMessage): boolean {\n const meta = message.metadata as Record<string, unknown> | undefined;\n if (meta?.['isAssistResponse'] !== true && message.type !== 'assist-response') {\n return false;\n }\n const status = axmReadAssistResponseStatus(message.metadata);\n if (status === 'streaming') {\n return true;\n }\n return meta?.['isStreaming'] === true;\n}\n\n/**\n * Whether an incoming message should increase the conversation unread counter.\n */\nexport function axmMessageCountsTowardUnread(message: AXMessage, currentUserId: string): boolean {\n if (message.senderId === currentUserId) {\n return false;\n }\n if (message.status === 'read') {\n return false;\n }\n if (axmIsAssistStreamingMessage(message)) {\n return false;\n }\n return true;\n}\n\n/** Recomputes unread badge count from persisted messages. */\nexport function axmComputeConversationUnreadCount(messages: AXMessage[], currentUserId: string): number {\n return messages.filter((message) => axmMessageCountsTowardUnread(message, currentUserId)).length;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXConversation, AXMessage, AXMessagePayload, AXMessageType, AXSendMessageCommand } from '@acorex/components/conversation2';\nimport { AXPFilterOperatorMiddlewareService } from '@acorex/platform/common';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { inject, Injectable } from '@angular/core';\nimport { orderBy } from 'lodash-es';\n\nimport { RootConfig } from '../../../contracts';\nimport { AXMConversationMessage, AXMConversationRoom } from '../../../entities';\nimport {\n axmMessageEntityToMessage,\n axmRoomEntityToConversation,\n} from '../plugins/services/entity/chat-entity-mapper.util';\nimport { axmComputeConversationUnreadCount } from '../plugins/utils/conversation-unread.util';\nimport { axmReadAssistResponseStatus } from '../plugins/utils/assist-response-status.util';\nimport { axmCoerceTimestampMs } from '../plugins/utils/conversation-time.util';\nimport { AXMConversationRealtimeBus } from './conversation-realtime.bus';\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * Entity-backed read/write facade for chat rooms and messages.\n * Publishes mutations to {@link AXMConversationRealtimeBus}.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMConversationEntityStoreService {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly filterService = inject(AXPFilterOperatorMiddlewareService);\n private readonly bus = inject(AXMConversationRealtimeBus);\n\n private readonly messageData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.message.name)\n .data<string, AXMConversationMessage>();\n private readonly roomData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.room.name)\n .data<string, AXMConversationRoom>();\n\n /** Serializes entity writes per message id so streaming deltas persist in order. */\n private readonly persistChains = new Map<string, Promise<void>>();\n\n //#endregion\n\n //#region ---- Conversation reads ----\n\n async getConversation(conversationId: string): Promise<AXConversation | null> {\n const room = await this.roomData.byKey(conversationId);\n return room ? axmRoomEntityToConversation(room) : null;\n }\n\n //#endregion\n\n //#region ---- Message reads ----\n\n async getMessage(messageId: string): Promise<AXMessage | null> {\n const message = await this.messageData.byKey(messageId);\n return message ? axmMessageEntityToMessage(message) : null;\n }\n\n async loadConversationMessages(conversationId: string): Promise<AXMessage[]> {\n const { items } = await this.messageData.query({\n skip: 0,\n take: 1000,\n sort: [{ field: 'timestamp', dir: 'asc' } as never],\n filter: {\n field: 'conversationId',\n value: conversationId,\n operator: this.filterService.getOperator('equal') as never,\n },\n });\n return orderBy(\n items.filter((m) => !m.deleted),\n [(m) => axmCoerceTimestampMs(m.timestamp)],\n ['asc'],\n ).map((m) => axmMessageEntityToMessage(m));\n }\n\n /** Assist placeholders still marked `streaming` in entity storage (e.g. after page reload). */\n async loadStreamingAssistPlaceholderMessages(): Promise<AXMessage[]> {\n const { items } = await this.messageData.query({\n skip: 0,\n take: 5000,\n });\n return items\n .filter((message) => !message.deleted && this.isAssistResponseEntity(message))\n .filter((message) => axmReadAssistResponseStatus(message.metadata) === 'streaming')\n .map((message) => axmMessageEntityToMessage(message));\n }\n\n //#endregion\n\n //#region ---- Message writes ----\n\n async createMessageFromAxMessage(message: AXMessage): Promise<AXMessage> {\n const entity: Omit<AXMConversationMessage, 'id'> = {\n conversationId: message.conversationId,\n senderId: message.senderId,\n type: message.type,\n fileType: message.fileType,\n timestamp: message.timestamp instanceof Date ? message.timestamp : new Date(message.timestamp),\n payload: message.payload,\n status: message.status,\n reactions: message.reactions ?? [],\n forwarded: message.forwarded,\n forwardedFrom: message.forwardedFrom,\n metadata: message.metadata,\n isLocal: message.isLocal ?? false,\n ...(message.replyTo ? { replyTo: { id: message.replyTo.id } as AXMConversationMessage } : {}),\n ...(message.pinned != null ? { pinned: message.pinned } : {}),\n ...(message.editedAt ? { editedAt: message.editedAt } : {}),\n ...(message.deleted != null ? { deleted: message.deleted } : {}),\n ...(message.deletedAt ? { deletedAt: message.deletedAt } : {}),\n };\n\n const messageId = await this.messageData.create(entity);\n const stored = await this.messageData.byKey(messageId);\n if (!stored) {\n throw new Error('Failed to persist message');\n }\n const mapped = axmMessageEntityToMessage(stored);\n this.bus.publishMessage(mapped);\n return mapped;\n }\n\n async createMessageWithId(message: AXMessage): Promise<AXMessage> {\n const entity: AXMConversationMessage = {\n id: message.id,\n conversationId: message.conversationId,\n senderId: message.senderId,\n type: message.type,\n fileType: message.fileType,\n timestamp: message.timestamp instanceof Date ? message.timestamp : new Date(message.timestamp),\n payload: message.payload,\n status: message.status,\n reactions: message.reactions ?? [],\n forwarded: message.forwarded,\n forwardedFrom: message.forwardedFrom,\n metadata: message.metadata,\n isLocal: message.isLocal ?? false,\n ...(message.replyTo ? { replyTo: { id: message.replyTo.id } as AXMConversationMessage } : {}),\n ...(message.pinned != null ? { pinned: message.pinned } : {}),\n };\n\n const messageId = await this.messageData.create(entity);\n const stored = await this.messageData.byKey(messageId);\n if (!stored) {\n throw new Error('Failed to persist message');\n }\n const mapped = axmMessageEntityToMessage(stored);\n this.bus.publishMessage(mapped);\n return mapped;\n }\n\n async updateMessage(message: AXMessage, options?: { publish?: boolean }): Promise<AXMessage> {\n await this.messageData.update(message.id, {\n payload: message.payload,\n status: message.status,\n metadata: message.metadata,\n type: message.type,\n reactions: message.reactions ?? [],\n editedAt: message.editedAt,\n deleted: message.deleted,\n deletedAt: message.deletedAt,\n pinned: message.pinned,\n });\n const stored = await this.messageData.byKey(message.id);\n const mapped = stored ? axmMessageEntityToMessage(stored) : message;\n if (options?.publish !== false) {\n this.bus.publishMessageUpdate(mapped);\n }\n return mapped;\n }\n\n /**\n * Persists a message to entity storage without publishing realtime events.\n * Matches mock `putMessage` fire-and-forget used during assist streaming.\n */\n persistMessage(message: AXMessage): Promise<void> {\n const previous = this.persistChains.get(message.id) ?? Promise.resolve();\n const next = previous.then(() => this.persistMessageInternal(message));\n this.persistChains.set(message.id, next);\n return next;\n }\n\n private async persistMessageInternal(message: AXMessage): Promise<void> {\n const fields = this.messageToEntityFields(message);\n const existing = await this.messageData.byKey(message.id);\n if (existing) {\n await this.messageData.update(message.id, fields);\n return;\n }\n await this.messageData.create({\n id: message.id,\n ...fields,\n } as AXMConversationMessage);\n }\n\n async deleteMessage(messageId: string): Promise<void> {\n await this.messageData.update(messageId, { deleted: true, deletedAt: new Date() });\n this.bus.publishMessageDeletion(messageId);\n }\n\n async touchLastMessage(conversationId: string, message: AXMessage): Promise<void> {\n const entity = await this.messageData.byKey(message.id);\n if (!entity) {\n return;\n }\n await this.roomData.update(conversationId, {\n lastMessage: entity,\n lastMessageAt: entity.timestamp,\n updatedAt: new Date(),\n });\n const conversation = await this.getConversation(conversationId);\n if (conversation) {\n this.bus.publishConversationUpdate(conversation);\n }\n }\n\n //#endregion\n\n //#region ---- Conversation writes ----\n\n async updateConversation(conversation: AXConversation): Promise<AXConversation> {\n await this.roomData.update(conversation.id, {\n title: conversation.title,\n avatar: conversation.avatar,\n icon: conversation.icon,\n description: conversation.description,\n participants: conversation.participants,\n unreadCount: conversation.unreadCount,\n unreadMentions: conversation.unreadMentions,\n status: conversation.status,\n settings: conversation.settings,\n pinnedMessageIds: conversation.pinnedMessageIds,\n blocked: conversation.blocked,\n pinned: conversation.pinned,\n archived: conversation.archived,\n draft: conversation.draft,\n metadata: conversation.metadata,\n updatedAt: new Date(),\n });\n const updated = await this.getConversation(conversation.id);\n if (updated) {\n this.bus.publishConversationUpdate(updated);\n return updated;\n }\n this.bus.publishConversationUpdate(conversation);\n return conversation;\n }\n\n async updateConversationMetadata(conversationId: string, metadata: Record<string, unknown>): Promise<void> {\n const room = await this.roomData.byKey(conversationId);\n if (!room) {\n return;\n }\n await this.roomData.update(conversationId, {\n metadata: { ...room.metadata, ...metadata },\n updatedAt: new Date(),\n });\n const conversation = await this.getConversation(conversationId);\n if (conversation) {\n this.bus.publishConversationUpdate(conversation);\n }\n }\n\n async setUnreadCount(conversationId: string, unreadCount: number): Promise<void> {\n const room = await this.roomData.byKey(conversationId);\n if (!room || room.unreadCount === unreadCount) {\n return;\n }\n await this.roomData.update(conversationId, { unreadCount, updatedAt: new Date() });\n const conversation = await this.getConversation(conversationId);\n if (conversation) {\n this.bus.publishConversationUpdate(conversation);\n }\n }\n\n async syncConversationUnreadCount(conversationId: string, currentUserId: string): Promise<void> {\n const messages = await this.loadConversationMessages(conversationId);\n const unread = axmComputeConversationUnreadCount(messages, currentUserId);\n await this.setUnreadCount(conversationId, unread);\n }\n\n //#endregion\n\n //#region ---- Helpers ----\n\n private isAssistResponseEntity(message: AXMConversationMessage): boolean {\n const meta = message.metadata as Record<string, unknown> | undefined;\n return meta?.['isAssistResponse'] === true || message.type === 'assist-response';\n }\n\n messageToEntityFields(message: AXMessage): Partial<AXMConversationMessage> {\n return {\n conversationId: message.conversationId,\n senderId: message.senderId,\n type: message.type,\n fileType: message.fileType,\n timestamp: message.timestamp instanceof Date ? message.timestamp : new Date(message.timestamp),\n payload: message.payload,\n status: message.status,\n reactions: message.reactions ?? [],\n metadata: message.metadata,\n forwarded: message.forwarded,\n forwardedFrom: message.forwardedFrom,\n pinned: message.pinned,\n editedAt: message.editedAt,\n deleted: message.deleted,\n deletedAt: message.deletedAt,\n isLocal: message.isLocal,\n };\n }\n\n axMessageFromCommand(command: AXSendMessageCommand, senderId: string): AXMessage {\n return {\n id: `msg-${Date.now()}-${Math.floor(Math.random() * 10000)}`,\n conversationId: command.conversationId,\n senderId,\n type: command.type as AXMessageType,\n fileType: command.fileType,\n timestamp: new Date(),\n payload: command.payload,\n status: 'sent',\n reactions: [],\n forwarded: command.forwarded,\n forwardedFrom: command.forwardedFrom,\n metadata: command.metadata,\n isLocal: false,\n ...(command.replyToId ? { replyTo: { id: command.replyToId } as AXMessage } : {}),\n };\n }\n\n publishNewMessage(message: AXMessage): void {\n this.bus.publishMessage(message);\n }\n\n publishMessageUpdate(message: AXMessage): void {\n this.bus.publishMessageUpdate(message);\n }\n\n publishConversationUpdate(conversation: AXConversation): void {\n this.bus.publishConversationUpdate(conversation);\n }\n\n publishConversationCreated(conversation: AXConversation): void {\n this.bus.publishConversationCreated(conversation);\n }\n\n publishTypingIndicator(indicator: import('@acorex/components/conversation2').AXTypingIndicator): void {\n this.bus.publishTypingIndicator(indicator);\n }\n\n publishPresenceUpdate(update: import('@acorex/components/conversation2').AXPresenceUpdate): void {\n this.bus.publishPresenceUpdate(update);\n }\n\n //#endregion\n}\n\n//#endregion\n","import {\n AXConversation,\n AXInfoBarService,\n} from '@acorex/components/conversation2';\nimport { AXMConversationEntityStoreService } from '../../services/conversation-entity-store.service';\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 private readonly entityStore = inject(AXMConversationEntityStoreService);\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 void this.entityStore.updateConversationMetadata(conversationId, { modelEntityId });\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","//#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 delegationCallId: callId,\n messages: entry?.messages ?? [],\n runInput: entry?.runInput,\n agentName: entry?.agentName?.trim() || titleBase,\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","/**\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 { AXVoiceRendererComponent } 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, 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 * Renders an assist {@code fileId} via {@link AXVoiceRendererComponent} using {@code mediaId} so\n * {@link AXUploaderService} resolves a playback URL (conversation2 rejects persisted {@code data:} URLs).\n */\n@Component({\n selector: 'axm-assist-bot-audio-line',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXVoiceRendererComponent, AXTranslationModule, AsyncPipe],\n template: `\n @if (syntheticMessage(); as sm) {\n <ax-conversation-voice-renderer [message]=\"sm\" />\n } @else if (errorText()) {\n <p class=\"axm-assist-bot-audio-line__err\">{{ (errorText() ?? '' | translate | async) ?? '' }}</p>\n }\n `,\n styles: [\n `\n :host {\n display: block;\n max-inline-size: min(100%, 28rem);\n }\n\n .axm-assist-bot-audio-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 AXMAssistBotAudioLineComponent {\n //#region ---- Inputs ----\n\n readonly parentMessage = input.required<AXMessage>();\n readonly fileId = input.required<string>();\n readonly mimeType = input<string>('audio/mpeg');\n\n //#endregion\n\n //#region ---- Services ----\n\n private readonly fileStorage = inject(AXPFileStorageService);\n\n //#endregion\n\n //#region ---- State ----\n\n private readonly fileReady = signal(false);\n private readonly resolvedMimeType = signal<string>('audio/mpeg');\n readonly errorText = signal<string | null>(null);\n private loadGeneration = 0;\n\n //#endregion\n\n //#region ---- Synthetic message ----\n\n readonly syntheticMessage = computed(() => {\n const fileId = this.fileId()?.trim() ?? '';\n const parent = this.parentMessage();\n if (!this.fileReady() || !fileId) {\n return null;\n }\n return axmSyntheticEmbedMessage(parent, `voice-${fileId}`, {\n type: 'voice',\n payload: {\n type: 'voice',\n url: '',\n mediaId: fileId,\n duration: 0,\n },\n });\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n effect(() => {\n const id = this.fileId()?.trim() ?? '';\n const gen = ++this.loadGeneration;\n this.fileReady.set(false);\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 storedMime = info.mimeType?.trim();\n const fallbackMime = this.mimeType().trim();\n const mimeType =\n storedMime && storedMime.startsWith('audio/')\n ? storedMime\n : fallbackMime.startsWith('audio/')\n ? fallbackMime\n : 'audio/mpeg';\n this.resolvedMimeType.set(mimeType);\n this.fileReady.set(true);\n })\n .catch(() => {\n if (gen !== this.loadGeneration) {\n return;\n }\n this.errorText.set('@conversation:chat.assist-renderer.errors.audio-load');\n });\n });\n }\n\n //#endregion\n}\n\n//#endregion\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, 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 * Renders an assist {@code fileId} via {@link AXImageRendererComponent} using {@code mediaId} so\n * {@link AXUploaderService} resolves a display URL (conversation2 rejects persisted {@code data:} URLs).\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\n //#endregion\n\n //#region ---- State ----\n\n private readonly fileReady = signal(false);\n private readonly resolvedMimeType = signal<string>('image/png');\n readonly errorText = signal<string | null>(null);\n private loadGeneration = 0;\n\n //#endregion\n\n //#region ---- Synthetic message ----\n\n readonly syntheticMessage = computed(() => {\n const fileId = this.fileId()?.trim() ?? '';\n const parent = this.parentMessage();\n if (!this.fileReady() || !fileId) {\n return null;\n }\n return axmSyntheticEmbedMessage(parent, `img-${fileId}`, {\n type: 'image',\n payload: {\n type: 'image',\n images: [\n {\n mediaId: fileId,\n url: '',\n thumbnailUrl: '',\n width: 400,\n height: 300,\n mimeType: this.resolvedMimeType(),\n },\n ],\n caption: undefined,\n },\n });\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n effect(() => {\n const id = this.fileId()?.trim() ?? '';\n const gen = ++this.loadGeneration;\n this.fileReady.set(false);\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 storedMime = info.mimeType?.trim();\n const fallbackMime = this.mimeType().trim();\n const mimeType =\n storedMime && storedMime.startsWith('image/')\n ? storedMime\n : fallbackMime.startsWith('image/')\n ? fallbackMime\n : 'image/png';\n this.resolvedMimeType.set(mimeType);\n this.fileReady.set(true);\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\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AI_CHAT_GENERATED_IMAGE_REF_TYPE, AI_CHAT_GENERATED_SPEECH_REF_TYPE } from '@acorex/modules/ai-management';\nimport { AXPFileStorageService } from '@acorex/platform/common';\nimport type { AXMessage } from '@acorex/components/conversation2';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\n\nimport { ChangeDetectionStrategy, Component, effect, inject, input, signal } from '@angular/core';\n\nimport { AXMAssistBotAudioLineComponent } from './assist-bot-audio-line.component';\nimport { AXMAssistBotImageLineComponent } from './assist-bot-image-line.component';\n\n//#endregion\n\n//#region ---- Types ----\n\ntype AssistBotFileMediaKind = 'image' | 'audio' | 'unknown';\n\n//#endregion\n\n//#region ---- Component ----\n\n/** Routes assist {@code fileId} segments to image or voice renderers based on stored file metadata. */\n@Component({\n selector: 'axm-assist-bot-file-line',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXMAssistBotAudioLineComponent, AXMAssistBotImageLineComponent, AXTranslationModule, AsyncPipe],\n template: `\n @switch (mediaKind()) {\n @case ('image') {\n <axm-assist-bot-image-line [parentMessage]=\"parentMessage()\" [fileId]=\"fileId()\" />\n }\n @case ('audio') {\n <axm-assist-bot-audio-line [parentMessage]=\"parentMessage()\" [fileId]=\"fileId()\" />\n }\n @default {\n @if (errorText()) {\n <p class=\"axm-assist-bot-file-line__err\">{{ (errorText() ?? '' | translate | async) ?? '' }}</p>\n }\n }\n }\n `,\n styles: [\n `\n :host {\n display: block;\n }\n\n .axm-assist-bot-file-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 AXMAssistBotFileLineComponent {\n //#region ---- Inputs ----\n\n readonly parentMessage = input.required<AXMessage>();\n readonly fileId = input.required<string>();\n\n //#endregion\n\n //#region ---- Services ----\n\n private readonly fileStorage = inject(AXPFileStorageService);\n\n //#endregion\n\n //#region ---- State ----\n\n readonly mediaKind = signal<AssistBotFileMediaKind>('unknown');\n readonly errorText = signal<string | null>(null);\n private loadGeneration = 0;\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n effect(() => {\n const id = this.fileId()?.trim() ?? '';\n const gen = ++this.loadGeneration;\n this.mediaKind.set('unknown');\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 this.mediaKind.set(resolveAssistBotFileMediaKind(info.mimeType, info.category, info.refType));\n if (this.mediaKind() === 'unknown') {\n this.errorText.set('@conversation:chat.assist-renderer.errors.file-load');\n }\n })\n .catch(() => {\n if (gen !== this.loadGeneration) {\n return;\n }\n this.errorText.set('@conversation:chat.assist-renderer.errors.file-load');\n });\n });\n }\n\n //#endregion\n}\n\n//#region ---- Helpers ----\n\nfunction resolveAssistBotFileMediaKind(\n mimeType: string | undefined,\n category: string | undefined,\n refType: string | undefined,\n): AssistBotFileMediaKind {\n const mime = mimeType?.trim().toLowerCase() ?? '';\n if (mime.startsWith('audio/') || category === 'ai-generated-speech' || refType === AI_CHAT_GENERATED_SPEECH_REF_TYPE) {\n return 'audio';\n }\n if (mime.startsWith('image/') || category === 'ai-generated-image' || refType === AI_CHAT_GENERATED_IMAGE_REF_TYPE) {\n return 'image';\n }\n return 'unknown';\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 { 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, inject, input, output, signal } from '@angular/core';\n\nimport { AXMChatMessageApi } from '../services/chat-conversation-apis.abstract';\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 private readonly messageApi = inject(AXMChatMessageApi);\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 await this.messageApi.editMessage(message.id, payloadWithValue);\n await this.messageApi.updateMessageMetadata(message.id, {\n ...(message.metadata ?? {}),\n userForm: {\n submitted: true,\n context,\n },\n });\n }\n\n //#endregion\n}\n","//#region ---- Imports ----\n\nimport { AXAccordionCdkModule } from '@acorex/cdk/accordion';\nimport { AXAlertModule } from '@acorex/components/alert';\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 AXTextRendererComponent,\n} from '@acorex/components/conversation2';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\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 axpAiDelegatedAgentPromptPreview,\n axpAiDelegatedAgentResultSegments,\n axpAiParseSupervisorAgentToolName,\n} from '@acorex/modules/ai-management';\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, NgTemplateOutlet } 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/contracts';\nimport { AXMAssistSuggestionChipsComponent } from '../shared/assist-suggestion-chips.component';\nimport {\n axmAssistUserFacingPayloadLine,\n axmAssistUserVisibleItemsForLine,\n type AxmAssistUserVisibleItem,\n axmAssistWidgetNodeFromUnknown,\n axmParseAssistTranscriptLinePayload,\n axmParseAssistTranscriptTextEnvelope,\n axmSanitizeAssistUserAnswerText,\n axmReadAssistAiTranscript,\n axmReadAssistAiTranscriptRaw,\n axmSyntheticEmbedMessage,\n} from '../utils/assist-bot-transcript.util';\nimport { axmOpenAssistDelegatedAgentDetailDialog } from '../utils/assist-delegated-agent-detail.dialog';\nimport { axmAssistSegmentDirection } from '../utils/assist-segment-direction.util';\nimport {\n axmIsAssistRetryableStatus,\n axmIsAssistStreamingStatus,\n axmReadAssistResponseError,\n axmReadAssistResponseStatus,\n type AxmAssistResponseStatus,\n} from '../utils/assist-response-status.util';\nimport { AXMChatMessageApi } from '../services/chat-conversation-apis.abstract';\nimport { AXMAssistBotFileLineComponent } from './assist-bot-file-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 AXMAssistBotFileLineComponent,\n AXMAssistSuggestionChipsComponent,\n AXAccordionCdkModule,\n AXAlertModule,\n AXButtonModule,\n AXDecoratorModule,\n AXCodeEditorModule,\n AXPMarkdownViewerComponent,\n AXPMarkdownTemplateDirective,\n FormsModule,\n AXTranslationModule,\n AsyncPipe,\n DecimalPipe,\n NgTemplateOutlet,\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 (this.assistHideTranscriptAnswerSegments()) {\n return '';\n }\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 messageApi = inject(AXMChatMessageApi);\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 isRetrying = signal(false);\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 assistResponseStatus = computed((): AxmAssistResponseStatus =>\n axmReadAssistResponseStatus(this.message().metadata),\n );\n\n readonly showRetryScreen = computed(\n () => axmIsAssistRetryableStatus(this.assistResponseStatus()) && !this.isRetrying(),\n );\n\n readonly assistResponseError = computed(() => axmReadAssistResponseError(this.message().metadata));\n\n readonly assistRetryTitleKey = computed(() =>\n this.assistResponseStatus() === 'failed'\n ? '@conversation:chat.assist-renderer.retry.failed.title'\n : '@conversation:chat.assist-renderer.retry.incomplete.title',\n );\n\n readonly assistRetryDescriptionKey = computed(() =>\n this.assistResponseStatus() === 'failed'\n ? '@conversation:chat.assist-renderer.retry.failed.description'\n : '@conversation:chat.assist-renderer.retry.incomplete.description',\n );\n\n readonly assistRetryAlertIcon = computed(() =>\n this.assistResponseStatus() === 'failed'\n ? 'fa-light fa-circle-exclamation'\n : 'fa-light fa-circle-pause',\n );\n\n readonly rendererState: Signal<AXMessageRendererState> = computed(() => ({\n deliveryStatus: this.message().status,\n contentState: this.showRetryScreen() ? 'error' : 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 * Debug transcript hides user-facing answer segments when the unified payload bubble is shown.\n */\n readonly assistHideTranscriptAnswerSegments = computed(\n () => !this.isStreaming() && this.assistPayloadLine() != null,\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 if (debug && this.assistHideTranscriptAnswerSegments()) {\n return false;\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 if (debug && this.assistHideTranscriptAnswerSegments()) {\n return false;\n }\n return axmAssistWidgetNodeFromUnknown(seg.content) != null;\n }\n if (line.role === 'assistant' && seg.type === 'file') {\n if (debug && this.assistHideTranscriptAnswerSegments()) {\n return false;\n }\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 syntheticAppendNodeMessage(itemIndex: number, content: unknown): AXMessage {\n return axmSyntheticEmbedMessage(this.message(), `append-node-${itemIndex}`, {\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(\n o as { success?: boolean; data?: { responses?: AXPAiDelegatedAgentResultSegment[] } },\n );\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(\n o as { success?: boolean; data?: { responses?: AXPAiDelegatedAgentResultSegment[] } },\n );\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(\n o as { success?: boolean; data?: { responses?: AXPAiDelegatedAgentResultSegment[] } },\n );\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 await this.messageApi.updateMessageMetadata(message.id, nextMeta);\n }\n\n //#endregion\n\n //#region ---- Legacy computed ----\n\n readonly isStreaming = computed(() => axmIsAssistStreamingStatus(this.assistResponseStatus()));\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 /** Answer markdown while streaming (draft) or after finalize (payload); shared by debug and non-debug. */\n readonly assistAnswerMarkdown = computed(() => {\n const live = axmSanitizeAssistUserAnswerText(this.streamText());\n if (this.isStreaming()) {\n return live;\n }\n return axmSanitizeAssistUserAnswerText(this.parsed().body.trim() || live);\n });\n\n /** Non-text payload segments shown below the answer after finalize. */\n readonly assistPayloadAppendItems = computed((): AxmAssistUserVisibleItem[] => {\n if (this.isStreaming()) {\n return [];\n }\n const line = this.assistPayloadLine();\n if (!line) {\n return [];\n }\n return axmAssistUserVisibleItemsForLine(line)\n .filter((item) => item.kind !== 'text')\n .sort((a, b) => {\n if (a.kind === 'followUp') {\n return 1;\n }\n if (b.kind === 'followUp') {\n return -1;\n }\n return 0;\n });\n });\n\n /**\n * Non-debug stream panel: skip the empty wrapper when there is no answer, append content, or live stream.\n */\n readonly showNonDebugStreamPanel = computed(\n () =>\n this.isStreaming() ||\n this.assistAnswerMarkdown().trim().length > 0 ||\n this.assistPayloadAppendItems().length > 0,\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: axmSanitizeAssistUserAnswerText(textParts.join('\\n\\n')) };\n }\n return { thinking: null, body: '' };\n });\n\n //#endregion\n\n //#region ---- Retry ----\n\n protected async onRetryAssistResponse(): Promise<void> {\n if (this.isRetrying() || !this.showRetryScreen()) {\n return;\n }\n\n const message = this.message();\n this.isRetrying.set(true);\n try {\n await this.messageApi.retryAssistResponse(message.conversationId, message.id);\n } catch (error) {\n console.error('Failed to retry assist response:', error);\n } finally {\n this.isRetrying.set(false);\n }\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\n","<div class=\"axm-assist-renderer\">\n @if (showDebugUi() && useTranscriptUi() && !isStreaming()) {\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-file-line [parentMessage]=\"message()\" [fileId]=\"seg.content.fileId\" />\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]=\"\n ('@conversation:chat.assist-renderer.delegated-agent.detail' | translate | async) ?? ''\n \"\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-file-line [parentMessage]=\"message()\" [fileId]=\"outSeg.content.fileId\" />\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 (\n line.role === 'assistant' &&\n seg.type === 'file' &&\n !assistHideTranscriptAnswerSegments()\n ) {\n <axm-assist-bot-file-line [parentMessage]=\"message()\" [fileId]=\"seg.content.fileId\" />\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 </div>\n <ng-container *ngTemplateOutlet=\"assistUnifiedAnswerBlock\" />\n } @else if (!showDebugUi() && showNonDebugStreamPanel()) {\n <div\n class=\"axm-assist-renderer__stream-content axm-assist-renderer__stream-content--non-debug\"\n role=\"region\"\n [attr.aria-label]=\"('@conversation:chat.assist-renderer.aria.assistant-response' | translate | async) ?? ''\"\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 <ng-container *ngTemplateOutlet=\"assistUnifiedAnswerBlock\" />\n @if (isStreaming() && !assistAnswerMarkdown()) {\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 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 <ng-container *ngTemplateOutlet=\"assistUnifiedAnswerBlock\" />\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]=\"\n ('@conversation:chat.assist-renderer.delegated-agent.detail' | translate | async) ?? ''\n \"\n [attr.aria-label]=\"\n ('@conversation:chat.assist-renderer.delegated-agent.detail-aria'\n | translate\n | async) ?? ''\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() && !assistAnswerMarkdown() && !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 if (!useTranscriptUi()) {\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 <ng-container *ngTemplateOutlet=\"assistUnifiedAnswerBlock\" />\n }\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\n <ng-template #assistUnifiedAnswerBlock>\n @if (assistAnswerMarkdown()) {\n <div\n class=\"axm-assist-renderer__text axm-assist-bot__segment axm-assist-renderer__markdown\"\n [attr.dir]=\"segmentDir(assistAnswerMarkdown())\"\n >\n <axp-markdown-viewer [markdown]=\"assistAnswerMarkdown()\">\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 @if (isStreaming()) {\n <span class=\"axm-assist-renderer__cursor\"></span>\n }\n }\n @if (!isStreaming()) {\n @for (item of assistPayloadAppendItems(); track $index; let itemIndex = $index) {\n @switch (item.kind) {\n @case ('node') {\n @if (axmAssistWidgetNodeFromUnknown(item.content)) {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-chat-user-form-renderer [message]=\"syntheticAppendNodeMessage(itemIndex, item.content)\" />\n </div>\n }\n }\n @case ('file') {\n <axm-assist-bot-file-line [parentMessage]=\"message()\" [fileId]=\"item.fileId\" />\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 }\n </ng-template>\n\n @if (showRetryScreen()) {\n <ax-alert\n class=\"axm-assist-renderer__retry-alert\"\n color=\"danger\"\n role=\"alert\"\n [attr.aria-label]=\"('@conversation:chat.assist-renderer.retry.aria.panel' | translate | async) ?? ''\"\n >\n <ax-icon><i [class]=\"assistRetryAlertIcon()\"></i></ax-icon>\n <ax-title>{{ assistRetryTitleKey() | translate | async }}</ax-title>\n <ax-content>\n <div class=\"axm-assist-renderer__retry-alert-body\">\n <div class=\"axm-assist-renderer__retry-alert-text\">\n <p class=\"axm-assist-renderer__retry-description\">\n {{ assistRetryDescriptionKey() | translate | async }}\n </p>\n @if (assistResponseError()) {\n <p class=\"axm-assist-renderer__retry-error-detail\">\n {{ assistResponseError() }}\n </p>\n }\n </div>\n\n <ax-button\n class=\"axm-assist-renderer__retry-action ax-sm\"\n color=\"danger\"\n look=\"solid\"\n [disabled]=\"isRetrying()\"\n [text]=\"('@conversation:chat.assist-renderer.retry.action' | translate | async) ?? ''\"\n (onClick)=\"onRetryAssistResponse()\"\n >\n <i class=\"fa-light fa-arrows-rotate\" prefix></i>\n </ax-button>\n </div>\n </ax-content>\n </ax-alert>\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 type { AXMessage } from '@acorex/components/conversation2';\nimport { inject, Injectable } from '@angular/core';\n\nimport { AXMConversationEntityStoreService } from './conversation-entity-store.service';\nimport { axmIsAssistStreamingMessage } from '../plugins/utils/conversation-unread.util';\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * Tracks which conversation is focused in the chat UI and applies read-state updates.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMConversationFocusService {\n private readonly store = inject(AXMConversationEntityStoreService);\n\n private focusedConversationId: string | null = null;\n\n setFocusedConversation(conversationId: string | null): void {\n this.focusedConversationId = conversationId?.trim() || null;\n }\n\n isFocused(conversationId: string): boolean {\n return this.focusedConversationId === conversationId;\n }\n\n getFocusedConversationId(): string | null {\n return this.focusedConversationId;\n }\n\n /**\n * Marks incoming messages as read when the conversation is focused.\n * Returns ids that were transitioned to `read`.\n */\n async markMessagesRead(conversationId: string, messageIds: readonly string[], currentUserId: string): Promise<string[]> {\n const marked: string[] = [];\n for (const messageId of messageIds) {\n const message = await this.store.getMessage(messageId);\n if (!message || message.conversationId !== conversationId) {\n continue;\n }\n if (message.senderId === currentUserId) {\n continue;\n }\n if (message.status === 'read') {\n continue;\n }\n if (axmIsAssistStreamingMessage(message)) {\n continue;\n }\n const readMessage: AXMessage = { ...message, status: 'read' };\n await this.store.updateMessage(readMessage);\n marked.push(messageId);\n\n const conversation = await this.store.getConversation(conversationId);\n if (conversation?.lastMessage?.id === messageId) {\n await this.store.updateConversation({ ...conversation, lastMessage: readMessage });\n }\n }\n if (marked.length > 0) {\n await this.store.syncConversationUnreadCount(conversationId, currentUserId);\n }\n return marked;\n }\n}\n\n//#endregion\n","//#region ---- Assist metadata ----\n\n/**\n * Resolves assist id from conversation metadata.\n */\nexport function axmExtractAssistIdFromMetadata(metadata: Record<string, unknown> | undefined): string | undefined {\n if (!metadata) {\n return undefined;\n }\n const direct = metadata['assistId'];\n if (typeof direct === 'string' && direct.trim()) {\n return direct.trim();\n }\n const nested = metadata['metadata'];\n if (nested && typeof nested === 'object' && nested !== null) {\n const inner = (nested as Record<string, unknown>)['assistId'];\n if (typeof inner === 'string' && inner.trim()) {\n return inner.trim();\n }\n }\n return undefined;\n}\n\n/**\n * Resolves direct agent id from conversation metadata (agent-as-assist chat).\n */\nexport function axmExtractDirectAgentIdFromMetadata(\n metadata: Record<string, unknown> | undefined,\n): string | undefined {\n if (!metadata) {\n return undefined;\n }\n const direct = metadata['directAgentId'];\n if (typeof direct === 'string' && direct.trim()) {\n return direct.trim();\n }\n const nested = metadata['metadata'];\n if (nested && typeof nested === 'object' && nested !== null) {\n const inner = (nested as Record<string, unknown>)['directAgentId'];\n if (typeof inner === 'string' && inner.trim()) {\n return inner.trim();\n }\n }\n return undefined;\n}\n\n/** True when the conversation targets an assist catalog row or a direct agent-as-assist chat. */\nexport function axmConversationHasAiChat(metadata: Record<string, unknown> | undefined): boolean {\n return !!(axmExtractAssistIdFromMetadata(metadata) ?? axmExtractDirectAgentIdFromMetadata(metadata));\n}\n\n//#endregion\n","import type { AXConversationCreateData, AXParticipant } from '@acorex/components/conversation2';\n\nimport {\n axmExtractAssistIdFromMetadata,\n axmExtractDirectAgentIdFromMetadata,\n} from './assist-metadata.util';\nimport { axmChatAiPeerParticipantId } from './chat-ai-target.util';\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\n/**\n * Builds a synthetic assist peer for entity-backed room creation when the id is not a security user.\n */\nexport function axmBuildAssistPeerParticipantFromCreateData(\n participantId: string,\n data: AXConversationCreateData,\n): AXParticipant | null {\n const meta = (data.metadata ?? {}) as Record<string, unknown>;\n const assistId = axmExtractAssistIdFromMetadata(meta);\n const directAgentId = axmExtractDirectAgentIdFromMetadata(meta);\n const catalogPeerId = directAgentId ?? assistId;\n if (!catalogPeerId || (data.type !== 'private' && data.type !== 'bot')) {\n return null;\n }\n const expectedId = axmChatAiPeerParticipantId(catalogPeerId);\n if (participantId !== expectedId) {\n return null;\n }\n const name = typeof data.title === 'string' && data.title.trim() ? data.title.trim() : 'AI Assistant';\n return {\n id: participantId,\n name,\n avatar: data.avatar,\n status: 'online',\n role: 'member',\n metadata: directAgentId\n ? { directAgentId, kind: 'agent-assist' }\n : { assistId: catalogPeerId, kind: 'assist' },\n };\n}\n\n/**\n * Minimal assist peer for lookups by synthetic `assist-*` participant id.\n */\nexport function axmBuildAssistPeerParticipantFromId(participantId: string): AXParticipant | null {\n if (!participantId.startsWith('assist-')) {\n return null;\n }\n const catalogPeerId = participantId.slice('assist-'.length).trim();\n if (!catalogPeerId) {\n return null;\n }\n return {\n id: participantId,\n name: 'AI Assistant',\n status: 'online',\n role: 'member',\n metadata: { assistId: catalogPeerId, kind: 'assist' },\n };\n}\n","//#region ---- Imports ----\n\nimport type {\n AXBlockReportReason,\n AXParticipant,\n AXPresenceStatus,\n AXPresenceUpdate,\n AXUserProfileUpdate,\n AXUserSearchFilters,\n} from '@acorex/components/conversation2';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXMSecurityManagementUsersEntityModel } from '@acorex/modules/security-management';\nimport { inject, Injectable } from '@angular/core';\nimport { get, trim } from 'lodash-es';\n\nimport { AXMChatUserApi } from '../chat-conversation-apis.abstract';\nimport { axmBuildAssistPeerParticipantFromId } from '../../utils/assist-peer-participant.util';\nimport { axmUserRowToParticipant } from './chat-entity-mapper.util';\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * Entity-backed implementation of {@link AXMChatUserApi} using SecurityManagement.User.\n */\n@Injectable()\nexport class AXMChatEntityUserApi extends AXMChatUserApi {\n //#region ---- Services & Dependencies ----\n\n private readonly sessionService = inject(AXPSessionService);\n private readonly entityService = inject(AXPEntityService);\n private readonly usersData = this.entityService\n .withEntity('SecurityManagement', 'User')\n .data<string, AXMSecurityManagementUsersEntityModel>();\n\n //#endregion\n\n //#region ---- User Profile ----\n\n async getCurrentUser(): Promise<AXParticipant> {\n const user = this.sessionService.user;\n if (!user) {\n throw this.createError('USER_NOT_FOUND', 'Current user not found', 401);\n }\n return {\n id: user.id,\n name: user.title ?? user.name ?? user.id,\n role: 'admin',\n status: 'online',\n };\n }\n\n async updateProfile(updates: AXUserProfileUpdate): Promise<AXParticipant> {\n const current = await this.getCurrentUser();\n return { ...current, ...updates };\n }\n\n async uploadAvatar(_file: File): Promise<string> {\n // TODO Conversation:010: upload avatar via user entity / file service\n throw this.createError('NOT_IMPLEMENTED', 'Avatar upload is not implemented', 501);\n }\n\n //#endregion\n\n //#region ---- User Discovery ----\n\n async getUsers(filters?: AXUserSearchFilters): Promise<AXParticipant[]> {\n const { items } = await this.usersData.query({ skip: 0, take: filters?.limit ?? 50 });\n const currentId = this.sessionService.user?.id;\n let users = items\n .filter((u) => u.id !== currentId)\n .map((u) => axmUserRowToParticipant(u));\n\n const query = trim(filters?.query)?.toLowerCase();\n if (query) {\n users = users.filter((u) => {\n const name = u.name.toLowerCase();\n const description = String(get(u, 'description', '')).toLowerCase();\n return name.includes(query) || description.includes(query);\n });\n }\n\n return users;\n }\n\n async searchUsers(query: string): Promise<AXParticipant[]> {\n return this.getUsers({ query });\n }\n\n async getUserById(userId: string): Promise<AXParticipant> {\n const assistPeer = axmBuildAssistPeerParticipantFromId(userId);\n if (assistPeer) {\n return assistPeer;\n }\n\n const user = await this.usersData.byKey(userId);\n if (!user) {\n throw this.createError('USER_NOT_FOUND', `User ${userId} not found`, 404);\n }\n return axmUserRowToParticipant(user);\n }\n\n async getUsersByIds(userIds: string[]): Promise<AXParticipant[]> {\n const results = await Promise.all(\n userIds.map(async (id) => {\n const assistPeer = axmBuildAssistPeerParticipantFromId(id);\n if (assistPeer) {\n return assistPeer;\n }\n try {\n return await this.getUserById(id);\n } catch {\n return null;\n }\n }),\n );\n return results.filter((u): u is AXParticipant => u !== null);\n }\n\n //#endregion\n\n //#region ---- Presence Management ----\n\n async getUserPresence(userId: string): Promise<AXPresenceUpdate> {\n // TODO Conversation:011: resolve presence from realtime / user entity\n return { userId, status: 'online', lastSeen: new Date() };\n }\n\n async updatePresence(_status: AXPresenceStatus, _statusText?: string): Promise<void> {\n // TODO Conversation:012: persist presence update\n }\n\n //#endregion\n\n //#region ---- User Blocking & Reporting ----\n\n async blockUser(_userId: string, _reason?: AXBlockReportReason): Promise<void> {\n // TODO Conversation:013: block user\n }\n\n async unblockUser(_userId: string): Promise<void> {\n // TODO Conversation:014: unblock user\n }\n\n async getBlockedUsers(): Promise<string[]> {\n // TODO Conversation:015: list blocked users\n return [];\n }\n\n async reportUser(_userId: string, _reason: AXBlockReportReason): Promise<void> {\n // TODO Conversation:016: report user\n }\n\n //#endregion\n\n //#region ---- User Settings ----\n\n async getUserSettings(): Promise<Record<string, unknown>> {\n // TODO Conversation:017: load user chat settings\n return {};\n }\n\n async updateUserSettings(_settings: Record<string, unknown>): Promise<void> {\n // TODO Conversation:018: persist user chat settings\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Conversation list sort ----\n\nimport { axmCoerceTimestampMs } from './conversation-time.util';\n\ntype ConversationSortRow = {\n pinned?: boolean;\n metadata?: Record<string, unknown>;\n lastMessage?: { timestamp?: Date | string | number };\n lastMessageAt?: Date | string | number;\n};\n\n/** Pinned flag on room or legacy mock metadata (`metadata.isPinned`). */\nexport function axmIsConversationPinned(conversation: ConversationSortRow): boolean {\n return Boolean(conversation.pinned) || conversation.metadata?.['isPinned'] === true;\n}\n\n/** Latest activity time from embedded last message or `lastMessageAt`. */\nexport function axmConversationLastMessageMs(conversation: ConversationSortRow): number {\n const ts = conversation.lastMessage?.timestamp ?? conversation.lastMessageAt;\n return axmCoerceTimestampMs(ts);\n}\n\n/** Pinned conversations first, then most recent `lastMessageAt` (mock inbox parity). */\nexport function axmSortConversationsByPinAndRecency<T extends ConversationSortRow>(conversations: T[]): T[] {\n return [...conversations].sort((a, b) => {\n const aPinned = axmIsConversationPinned(a);\n const bPinned = axmIsConversationPinned(b);\n if (aPinned !== bPinned) {\n return aPinned ? -1 : 1;\n }\n return axmConversationLastMessageMs(b) - axmConversationLastMessageMs(a);\n });\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type {\n AXConversation,\n AXConversationCreateData,\n AXConversationFilters,\n AXConversationSettingsUpdate,\n AXConversationUpdateData,\n AXPaginatedResult,\n AXPagination,\n AXParticipant,\n AXParticipantRole,\n AXParticipantUpdate,\n} from '@acorex/components/conversation2';\nimport { AXPFilterOperatorMiddlewareService } from '@acorex/platform/common';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { inject, Injectable } from '@angular/core';\n\nimport { RootConfig } from '../../../../../contracts';\nimport { AXMConversationMessage, AXMConversationRoom } from '../../../../../entities';\nimport { CONVERSATION_SYNC_READ_STATE_COMMAND } from '../../../../commands/conversation-command.keys';\nimport { AXMConversationFocusService } from '../../../services/conversation-focus.service';\nimport { AXMConversationEntityStoreService } from '../../../services/conversation-entity-store.service';\nimport { AXMChatConversationApi } from '../chat-conversation-apis.abstract';\nimport { AXMChatEntityUserApi } from './chat-entity-user.api';\nimport { axmBuildAssistPeerParticipantFromCreateData } from '../../utils/assist-peer-participant.util';\nimport { axmSortConversationsByPinAndRecency } from '../../utils/conversation-list-sort.util';\nimport { axmMessageEntityToMessage, axmRoomEntityToConversation } from './chat-entity-mapper.util';\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * Entity-backed implementation of {@link AXMChatConversationApi} using Conversation.room.\n */\n@Injectable()\nexport class AXMChatEntityConversationApi extends AXMChatConversationApi {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly filterService = inject(AXPFilterOperatorMiddlewareService);\n private readonly userApi = inject(AXMChatEntityUserApi);\n private readonly commandService = inject(AXPCommandService);\n private readonly focusService = inject(AXMConversationFocusService);\n private readonly conversationStore = inject(AXMConversationEntityStoreService);\n private readonly roomData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.room.name)\n .data<string, AXMConversationRoom>();\n private readonly messageData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.message.name)\n .data<string, AXMConversationMessage>();\n\n //#region ---- Focus tracking ----\n\n override reportFocusedConversation(conversationId: string | null): void {\n this.focusService.setFocusedConversation(conversationId);\n const scoped = conversationId?.trim();\n if (!scoped) {\n return;\n }\n void this.userApi.getCurrentUser().then((user) => {\n void this.commandService.execute(CONVERSATION_SYNC_READ_STATE_COMMAND, {\n conversationId: scoped,\n currentUserId: user.id,\n });\n });\n }\n\n //#endregion\n\n //#region ---- Query helpers ----\n\n private async loadChatRooms(): Promise<AXMConversationRoom[]> {\n const { items } = await this.roomData.query({\n skip: 0,\n take: 500,\n filter: {\n field: 'kind',\n value: 'chat',\n operator: this.filterService.getOperator('equal') as never,\n },\n });\n return items;\n }\n\n private async enrichRoom(room: AXMConversationRoom): Promise<AXConversation> {\n if (!room.lastMessage) {\n const { items } = await this.messageData.query({\n skip: 0,\n take: 1,\n sort: [{ field: 'timestamp', dir: 'desc' } as never],\n filter: {\n logic: 'and',\n filters: [\n {\n field: 'conversationId',\n value: room.id,\n operator: this.filterService.getOperator('equal') as never,\n },\n ],\n },\n });\n if (items[0]) {\n room = { ...room, lastMessage: items[0], lastMessageAt: items[0].timestamp };\n }\n }\n return axmRoomEntityToConversation(room);\n }\n\n private paginate<T>(items: T[], pagination: AXPagination): AXPaginatedResult<T> {\n const start = pagination.page * pagination.pageSize;\n const end = start + pagination.pageSize;\n return {\n items: items.slice(start, end),\n total: items.length,\n hasMore: end < items.length,\n page: pagination.page,\n totalPages: Math.ceil(items.length / pagination.pageSize),\n };\n }\n\n private async resolveParticipantsForCreate(\n data: AXConversationCreateData,\n currentUser: AXParticipant,\n ): Promise<AXParticipant[]> {\n const resolved: AXParticipant[] = [];\n\n for (const participantId of data.participantIds) {\n const [user] = await this.userApi.getUsersByIds([participantId]);\n if (user) {\n resolved.push({\n ...user,\n role: user.id === currentUser.id ? 'admin' : (user.role ?? 'member'),\n });\n continue;\n }\n\n const assistPeer = axmBuildAssistPeerParticipantFromCreateData(participantId, data);\n if (assistPeer) {\n resolved.push(assistPeer);\n continue;\n }\n\n throw this.createError('PARTICIPANT_NOT_FOUND', `Participant ${participantId} not found`, 404);\n }\n\n return resolved;\n }\n\n private toParticipantRole(role?: AXParticipantUpdate['role']): AXParticipantRole | undefined {\n if (!role) {\n return undefined;\n }\n if (role === 'admin' || role === 'owner') {\n return 'admin';\n }\n return 'member';\n }\n\n //#endregion\n\n //#region ---- Conversation CRUD ----\n\n async createConversation(data: AXConversationCreateData): Promise<AXConversation> {\n const currentUser = await this.userApi.getCurrentUser();\n const participants = await this.resolveParticipantsForCreate(data, currentUser);\n const now = new Date();\n const room: Omit<AXMConversationRoom, 'id'> = {\n kind: 'chat',\n type: data.type,\n title: data.title ?? 'New Conversation',\n avatar: data.avatar,\n icon: data.icon,\n description: data.description,\n participants,\n lastMessageAt: now,\n unreadCount: 0,\n status: { isTyping: false, typingUsers: [] },\n settings: { notifications: true, showPreview: true },\n pinned: false,\n archived: false,\n createdAt: now,\n updatedAt: now,\n metadata: data.metadata,\n };\n const id = await this.roomData.create(room);\n const created = await this.roomData.byKey(id);\n if (!created) {\n throw this.createError('CREATE_FAILED', 'Failed to create conversation', 500);\n }\n const conversation = await this.enrichRoom(created);\n this.conversationStore.publishConversationCreated(conversation);\n return conversation;\n }\n\n async getConversation(conversationId: string): Promise<AXConversation> {\n const room = await this.roomData.byKey(conversationId);\n if (!room || room.kind !== 'chat') {\n throw this.createError('CONVERSATION_NOT_FOUND', 'Conversation not found', 404);\n }\n return this.enrichRoom(room);\n }\n\n async getConversations(\n pagination: AXPagination,\n filters?: AXConversationFilters,\n ): Promise<AXPaginatedResult<AXConversation>> {\n let rooms = await this.loadChatRooms();\n\n if (filters?.archived !== undefined) {\n rooms = rooms.filter((r) => Boolean(r.archived) === filters.archived);\n }\n if (filters?.pinned !== undefined) {\n rooms = rooms.filter((r) => Boolean(r.pinned) === filters.pinned);\n }\n if (filters?.type) {\n rooms = rooms.filter((r) => r.type === filters.type);\n }\n if (filters?.searchQuery) {\n const q = filters.searchQuery.toLowerCase();\n rooms = rooms.filter((r) => r.title.toLowerCase().includes(q));\n }\n\n const enriched = await Promise.all(rooms.map((r) => this.enrichRoom(r)));\n const sorted = axmSortConversationsByPinAndRecency(enriched);\n return this.paginate(sorted, pagination);\n }\n\n async updateConversation(conversationId: string, updates: AXConversationUpdateData): Promise<AXConversation> {\n await this.roomData.update(conversationId, { ...updates, updatedAt: new Date() });\n const conversation = await this.getConversation(conversationId);\n this.conversationStore.publishConversationUpdate(conversation);\n return conversation;\n }\n\n async deleteConversation(conversationId: string): Promise<boolean> {\n await this.roomData.delete(conversationId);\n return true;\n }\n\n //#endregion\n\n //#region ---- Conversation state ----\n\n private async publishConversationById(conversationId: string): Promise<void> {\n const conversation = await this.getConversation(conversationId);\n this.conversationStore.publishConversationUpdate(conversation);\n }\n\n async archiveConversation(conversationId: string): Promise<void> {\n await this.roomData.update(conversationId, { archived: true, updatedAt: new Date() });\n await this.publishConversationById(conversationId);\n }\n\n async unarchiveConversation(conversationId: string): Promise<void> {\n await this.roomData.update(conversationId, { archived: false, updatedAt: new Date() });\n await this.publishConversationById(conversationId);\n }\n\n async pinConversation(conversationId: string): Promise<void> {\n await this.roomData.update(conversationId, { pinned: true, updatedAt: new Date() });\n await this.publishConversationById(conversationId);\n }\n\n async unpinConversation(conversationId: string): Promise<void> {\n await this.roomData.update(conversationId, { pinned: false, updatedAt: new Date() });\n await this.publishConversationById(conversationId);\n }\n\n async markConversationAsRead(conversationId: string): Promise<void> {\n await this.roomData.update(conversationId, { unreadCount: 0, updatedAt: new Date() });\n await this.publishConversationById(conversationId);\n }\n\n async markConversationAsUnread(conversationId: string): Promise<void> {\n await this.roomData.update(conversationId, { unreadCount: 1, updatedAt: new Date() });\n await this.publishConversationById(conversationId);\n }\n\n async searchConversations(query: string): Promise<AXConversation[]> {\n const result = await this.getConversations({ page: 0, pageSize: 50 }, { searchQuery: query });\n return result.items;\n }\n\n async filterConversations(\n filters: AXConversationFilters,\n pagination?: AXPagination,\n ): Promise<AXPaginatedResult<AXConversation>> {\n return this.getConversations(pagination ?? { page: 0, pageSize: 20 }, filters);\n }\n\n //#endregion\n\n //#region ---- Entity-scoped conversations ----\n\n async findEntityConversations(entityType: string, entityId: string): Promise<AXConversation[]> {\n const { items } = await this.roomData.query({\n skip: 0,\n take: 100,\n filter: {\n logic: 'and',\n filters: [\n { field: 'kind', value: 'chat', operator: this.filterService.getOperator('equal') as never },\n {\n field: 'entityRef.entityTypeId',\n value: entityType,\n operator: this.filterService.getOperator('equal') as never,\n },\n {\n field: 'entityRef.entityId',\n value: entityId,\n operator: this.filterService.getOperator('equal') as never,\n },\n ],\n },\n });\n const enriched = await Promise.all(items.map((r) => this.enrichRoom(r)));\n return axmSortConversationsByPinAndRecency(enriched);\n }\n\n //#endregion\n\n //#region ---- Participants ----\n\n async getParticipants(conversationId: string): Promise<AXParticipant[]> {\n const room = await this.roomData.byKey(conversationId);\n return room?.participants ?? [];\n }\n\n async addParticipants(conversationId: string, userIds: string[]): Promise<AXConversation> {\n const room = await this.roomData.byKey(conversationId);\n if (!room) {\n throw this.createError('CONVERSATION_NOT_FOUND', 'Conversation not found', 404);\n }\n const newParticipants = await this.userApi.getUsersByIds(userIds);\n const existingIds = new Set(room.participants.map((p) => p.id));\n const merged = [\n ...room.participants,\n ...newParticipants.filter((p) => !existingIds.has(p.id)),\n ];\n await this.roomData.update(conversationId, { participants: merged, updatedAt: new Date() });\n return this.getConversation(conversationId);\n }\n\n async removeParticipant(conversationId: string, userId: string): Promise<AXConversation> {\n const room = await this.roomData.byKey(conversationId);\n if (!room) {\n throw this.createError('CONVERSATION_NOT_FOUND', 'Conversation not found', 404);\n }\n const participants = room.participants.filter((p) => p.id !== userId);\n await this.roomData.update(conversationId, { participants, updatedAt: new Date() });\n return this.getConversation(conversationId);\n }\n\n async leaveConversation(conversationId: string): Promise<void> {\n const currentUser = await this.userApi.getCurrentUser();\n await this.removeParticipant(conversationId, currentUser.id);\n }\n\n async updateParticipant(conversationId: string, update: AXParticipantUpdate): Promise<AXConversation> {\n const room = await this.roomData.byKey(conversationId);\n if (!room) {\n throw this.createError('CONVERSATION_NOT_FOUND', 'Conversation not found', 404);\n }\n const participants: AXParticipant[] = room.participants.map((p) =>\n p.id === update.userId ? { ...p, role: this.toParticipantRole(update.role) ?? p.role } : p,\n );\n await this.roomData.update(conversationId, { participants, updatedAt: new Date() });\n return this.getConversation(conversationId);\n }\n\n //#endregion\n\n //#region ---- Settings ----\n\n async getConversationSettings(conversationId: string): Promise<AXConversationSettingsUpdate> {\n const room = await this.roomData.byKey(conversationId);\n if (!room) {\n throw this.createError('CONVERSATION_NOT_FOUND', 'Conversation not found', 404);\n }\n return {\n mutedUntil: room.settings.mutedUntil,\n notifications: room.settings.notifications,\n notificationSound: room.settings.notificationSound,\n showPreview: room.settings.showPreview,\n custom: room.settings.custom,\n };\n }\n\n async updateConversationSettings(\n conversationId: string,\n settings: AXConversationSettingsUpdate,\n ): Promise<void> {\n const room = await this.roomData.byKey(conversationId);\n if (!room) {\n throw this.createError('CONVERSATION_NOT_FOUND', 'Conversation not found', 404);\n }\n await this.roomData.update(conversationId, {\n settings: { ...room.settings, ...settings },\n updatedAt: new Date(),\n });\n }\n\n async muteConversation(conversationId: string, duration?: number): Promise<void> {\n const mutedUntil = duration ? new Date(Date.now() + duration) : new Date(Date.now() + 86400000);\n await this.updateConversationSettings(conversationId, { mutedUntil });\n }\n\n async unmuteConversation(conversationId: string): Promise<void> {\n await this.updateConversationSettings(conversationId, { mutedUntil: undefined });\n }\n\n //#endregion\n\n //#region ---- Stubs ----\n\n async uploadConversationAvatar(_conversationId: string, _file: File): Promise<string> {\n // TODO Conversation:021: upload conversation avatar\n throw this.createError('NOT_IMPLEMENTED', 'Avatar upload is not implemented', 501);\n }\n\n async getConversationMedia(\n _conversationId: string,\n pagination?: AXPagination,\n ): Promise<AXPaginatedResult<unknown>> {\n // TODO Conversation:022: list conversation media\n return { items: [], hasMore: false, page: pagination?.page ?? 0 };\n }\n\n async addConversationTags(_conversationId: string, _tags: string[]): Promise<void> {\n // TODO Conversation:023: add conversation tags\n }\n\n async removeConversationTags(_conversationId: string, _tags: string[]): Promise<void> {\n // TODO Conversation:024: remove conversation tags\n }\n\n async getConversationTags(_conversationId: string): Promise<string[]> {\n // TODO Conversation:025: get conversation tags\n return [];\n }\n\n async saveDraft(conversationId: string, draft: string): Promise<void> {\n await this.roomData.update(conversationId, { draft, updatedAt: new Date() });\n }\n\n async getDraft(conversationId: string): Promise<string | null> {\n const room = await this.roomData.byKey(conversationId);\n return room?.draft ?? null;\n }\n\n async clearDraft(conversationId: string): Promise<void> {\n await this.roomData.update(conversationId, { draft: undefined, updatedAt: new Date() });\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXMessage, AXSendMessageCommand } from '@acorex/components/conversation2';\nimport { InjectionToken } from '@angular/core';\n\n//#endregion\n\n//#region ---- Port ----\n\nexport interface AXMConversationAssistResponsePort {\n handleAfterUserMessage(\n conversationId: string,\n userMessageId: string,\n command: AXSendMessageCommand,\n currentUserId: string,\n ): Promise<void>;\n\n retryAssistResponse(conversationId: string, messageId: string): Promise<AXMessage>;\n\n reconcileStaleAssistPlaceholders(conversationId?: string): Promise<void>;\n\n /** Latest in-memory assist row (streaming cache wins over entity reads). */\n getLiveMessage(messageId: string): AXMessage | null;\n\n /** Merges assist in-memory cache over persisted messages (mock `conversationSharedStorage.messages` parity). */\n mergeLiveConversationMessages(conversationId: string, persisted: AXMessage[]): AXMessage[];\n}\n\nexport const AXM_CONVERSATION_ASSIST_RESPONSE_PORT = new InjectionToken<AXMConversationAssistResponsePort>(\n 'AXM_CONVERSATION_ASSIST_RESPONSE_PORT',\n);\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type {\n AXMessage,\n AXMessageForwardData,\n AXMessagePayload,\n AXMessageSearchFilters,\n AXPaginatedResult,\n AXPagination,\n AXPinnedMessage,\n AXReadReceipt,\n AXSendMessageCommand,\n} from '@acorex/components/conversation2';\nimport { AXPFilterOperatorMiddlewareService } from '@acorex/platform/common';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { inject, Injectable } from '@angular/core';\nimport { orderBy } from 'lodash-es';\n\nimport { RootConfig } from '../../../../../contracts';\nimport { AXMConversationMessage, AXMConversationRoom } from '../../../../../entities';\nimport {\n CONVERSATION_AFTER_MESSAGE_SENT_COMMAND,\n CONVERSATION_EMIT_TYPING_INDICATOR_COMMAND,\n CONVERSATION_MARK_CONVERSATION_UNREAD_COMMAND,\n CONVERSATION_RETRY_ASSIST_RESPONSE_COMMAND,\n CONVERSATION_SYNC_READ_STATE_COMMAND,\n} from '../../../../commands/conversation-command.keys';\nimport { AXMConversationEntityStoreService } from '../../../services/conversation-entity-store.service';\nimport { AXM_CONVERSATION_ASSIST_RESPONSE_PORT } from '../../../services/conversation-assist-response.port';\nimport { AXMChatMessageApi } from '../chat-conversation-apis.abstract';\nimport { AXMChatEntityUserApi } from './chat-entity-user.api';\nimport { axmMessageEntityToMessage } from './chat-entity-mapper.util';\nimport { axmSortMessagesNewestFirst } from '../../utils/conversation-time.util';\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * Entity-backed implementation of {@link AXMChatMessageApi} using Conversation.message.\n */\n@Injectable()\nexport class AXMChatEntityMessageApi extends AXMChatMessageApi {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly filterService = inject(AXPFilterOperatorMiddlewareService);\n private readonly userApi = inject(AXMChatEntityUserApi);\n private readonly commandService = inject(AXPCommandService);\n private readonly assistResponse = inject(AXM_CONVERSATION_ASSIST_RESPONSE_PORT, { optional: true });\n private readonly conversationStore = inject(AXMConversationEntityStoreService);\n private readonly messageData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.message.name)\n .data<string, AXMConversationMessage>();\n private readonly roomData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.room.name)\n .data<string, AXMConversationRoom>();\n\n //#endregion\n\n //#region ---- Query helpers ----\n\n private async loadConversationMessages(conversationId: string): Promise<AXMConversationMessage[]> {\n const { items } = await this.messageData.query({\n skip: 0,\n take: 1000,\n sort: [{ field: 'timestamp', dir: 'asc' } as never],\n filter: {\n field: 'conversationId',\n value: conversationId,\n operator: this.filterService.getOperator('equal') as never,\n },\n });\n return items.filter((m) => !m.deleted);\n }\n\n private paginateMessages(\n messages: AXMConversationMessage[],\n pagination: AXPagination,\n ): AXPaginatedResult<AXMessage> {\n const mapped = this.mergePersistedMessages(\n messages[0]?.conversationId ?? '',\n messages,\n );\n return this.paginateAxMessages(mapped, pagination);\n }\n\n private paginateAxMessages(messages: AXMessage[], pagination: AXPagination): AXPaginatedResult<AXMessage> {\n const sorted = axmSortMessagesNewestFirst(messages);\n const start = pagination.page * pagination.pageSize;\n const end = start + pagination.pageSize;\n return {\n items: sorted.slice(start, end),\n total: sorted.length,\n hasMore: end < sorted.length,\n page: pagination.page,\n totalPages: Math.ceil(sorted.length / pagination.pageSize),\n };\n }\n\n private mergePersistedMessages(conversationId: string, entities: AXMConversationMessage[]): AXMessage[] {\n const persisted = entities.map((m) => axmMessageEntityToMessage(m));\n if (!conversationId) {\n return persisted;\n }\n return this.assistResponse?.mergeLiveConversationMessages(conversationId, persisted) ?? persisted;\n }\n\n private async touchConversationLastMessage(\n conversationId: string,\n message: AXMConversationMessage,\n ): Promise<void> {\n await this.conversationStore.touchLastMessage(conversationId, axmMessageEntityToMessage(message));\n }\n\n //#endregion\n\n //#region ---- Message CRUD ----\n\n async sendMessage(command: AXSendMessageCommand): Promise<AXMessage> {\n const currentUser = await this.userApi.getCurrentUser();\n const now = new Date();\n const entity: Omit<AXMConversationMessage, 'id'> = {\n conversationId: command.conversationId,\n senderId: currentUser.id,\n type: command.type,\n fileType: command.fileType,\n timestamp: now,\n payload: command.payload,\n status: 'sent',\n reactions: [],\n forwarded: command.forwarded,\n forwardedFrom: command.forwardedFrom,\n metadata: command.metadata,\n isLocal: false,\n ...(command.replyToId\n ? { replyTo: { id: command.replyToId } as AXMConversationMessage }\n : {}),\n };\n\n const messageId = await this.messageData.create(entity);\n const stored = await this.messageData.byKey(messageId);\n if (!stored) {\n throw this.createError('CREATE_FAILED', 'Failed to persist message', 500);\n }\n\n await this.touchConversationLastMessage(command.conversationId, stored);\n\n const message = axmMessageEntityToMessage(stored);\n this.conversationStore.publishNewMessage(message);\n\n void this.commandService.execute(CONVERSATION_AFTER_MESSAGE_SENT_COMMAND, {\n conversationId: command.conversationId,\n messageId: stored.id,\n command,\n currentUserId: currentUser.id,\n });\n\n return message;\n }\n\n async getMessage(messageId: string): Promise<AXMessage> {\n await this.assistResponse?.reconcileStaleAssistPlaceholders();\n const live = this.assistResponse?.getLiveMessage(messageId);\n if (live) {\n return live;\n }\n const message = await this.messageData.byKey(messageId);\n if (!message) {\n throw this.createError('MESSAGE_NOT_FOUND', 'Message not found', 404);\n }\n return axmMessageEntityToMessage(message);\n }\n\n async getMessages(conversationId: string, pagination: AXPagination): Promise<AXPaginatedResult<AXMessage>> {\n await this.assistResponse?.reconcileStaleAssistPlaceholders(conversationId);\n const entities = await this.loadConversationMessages(conversationId);\n const merged = this.mergePersistedMessages(conversationId, entities);\n return this.paginateAxMessages(merged, pagination);\n }\n\n async editMessage(messageId: string, payload: AXMessagePayload): Promise<AXMessage> {\n await this.messageData.update(messageId, { payload, editedAt: new Date() });\n return this.getMessage(messageId);\n }\n\n async deleteMessage(messageId: string, _forEveryone?: boolean): Promise<void> {\n await this.messageData.update(messageId, { deleted: true, deletedAt: new Date() });\n }\n\n async deleteMessages(messageIds: string[], forEveryone?: boolean): Promise<void> {\n await Promise.all(messageIds.map((id) => this.deleteMessage(id, forEveryone)));\n }\n\n //#endregion\n\n //#region ---- Assist ----\n\n async retryAssistResponse(conversationId: string, messageId: string): Promise<AXMessage> {\n const result = await this.commandService.execute(CONVERSATION_RETRY_ASSIST_RESPONSE_COMMAND, {\n conversationId,\n messageId,\n });\n if (!result?.success || !result.data?.message) {\n throw this.createError('ASSIST_RETRY_FAILED', 'Assist retry failed', 500);\n }\n return result.data.message;\n }\n\n //#endregion\n\n //#region ---- Search ----\n\n async searchMessages(\n conversationId: string,\n filters: AXMessageSearchFilters,\n pagination?: AXPagination,\n ): Promise<AXPaginatedResult<AXMessage>> {\n let messages = await this.loadConversationMessages(conversationId);\n const q = filters.query?.toLowerCase();\n if (q) {\n messages = messages.filter((m) => {\n if (m.payload.type === 'text') {\n return m.payload.text.toLowerCase().includes(q);\n }\n return false;\n });\n }\n if (filters.senderId) {\n messages = messages.filter((m) => m.senderId === filters.senderId);\n }\n return this.paginateMessages(messages, pagination ?? { page: 0, pageSize: 30 });\n }\n\n async searchAllMessages(\n filters: AXMessageSearchFilters,\n pagination?: AXPagination,\n ): Promise<AXPaginatedResult<AXMessage>> {\n const { items } = await this.messageData.query({ skip: 0, take: 500 });\n let messages = items.filter((m) => !m.deleted);\n const q = filters.query?.toLowerCase();\n if (q) {\n messages = messages.filter((m) => m.payload.type === 'text' && m.payload.text.toLowerCase().includes(q));\n }\n return this.paginateMessages(messages, pagination ?? { page: 0, pageSize: 30 });\n }\n\n //#endregion\n\n //#region ---- Reactions ----\n\n private async persistReactionsAndPublish(messageId: string, reactions: AXMConversationMessage['reactions']): Promise<void> {\n await this.messageData.update(messageId, { reactions });\n const stored = await this.messageData.byKey(messageId);\n if (!stored) {\n return;\n }\n const mapped = axmMessageEntityToMessage(stored);\n this.conversationStore.publishMessageUpdate(mapped);\n }\n\n async addReaction(messageId: string, emoji: string): Promise<void> {\n const message = await this.messageData.byKey(messageId);\n if (!message) {\n throw this.createError('MESSAGE_NOT_FOUND', 'Message not found', 404);\n }\n const currentUser = await this.userApi.getCurrentUser();\n const reactions = [...(message.reactions ?? [])];\n const existingIndex = reactions.findIndex((r) => r.userId === currentUser.id && r.emoji === emoji);\n if (existingIndex >= 0) {\n reactions.splice(existingIndex, 1);\n } else {\n reactions.push({ emoji, userId: currentUser.id, timestamp: new Date() });\n }\n await this.persistReactionsAndPublish(messageId, reactions);\n }\n\n async removeReaction(messageId: string, emoji: string): Promise<void> {\n const message = await this.messageData.byKey(messageId);\n if (!message) {\n throw this.createError('MESSAGE_NOT_FOUND', 'Message not found', 404);\n }\n const currentUser = await this.userApi.getCurrentUser();\n const reactions = (message.reactions ?? []).filter(\n (r) => !(r.userId === currentUser.id && r.emoji === emoji),\n );\n await this.persistReactionsAndPublish(messageId, reactions);\n }\n\n async getAvailableReactions(): Promise<string[]> {\n return ['👍', '❤️', '😂', '😮', '😢', '🙏'];\n }\n\n //#endregion\n\n //#region ---- Read state ----\n\n async markAsRead(conversationId: string, messageIds: string[]): Promise<void> {\n const currentUser = await this.userApi.getCurrentUser();\n await this.commandService.execute(CONVERSATION_SYNC_READ_STATE_COMMAND, {\n conversationId,\n messageIds,\n currentUserId: currentUser.id,\n });\n }\n\n async markAsUnread(conversationId: string): Promise<void> {\n await this.commandService.execute(CONVERSATION_MARK_CONVERSATION_UNREAD_COMMAND, { conversationId });\n }\n\n async getReadReceipts(_messageId: string): Promise<AXReadReceipt[]> {\n return [];\n }\n\n async markMessagesAsRead(messageIds: string[]): Promise<void> {\n if (messageIds.length === 0) {\n return;\n }\n const first = await this.messageData.byKey(messageIds[0]);\n if (!first) {\n return;\n }\n await this.markAsRead(first.conversationId, messageIds);\n }\n\n //#endregion\n\n //#region ---- Forward / pin ----\n\n async forwardMessage(_data: AXMessageForwardData): Promise<AXMessage[]> {\n throw this.createError('NOT_IMPLEMENTED', 'Forward is not implemented', 501);\n }\n\n async pinMessage(conversationId: string, messageId: string): Promise<void> {\n await this.messageData.update(messageId, { pinned: true });\n const room = await this.roomData.byKey(conversationId);\n const pinnedIds = [...(room?.pinnedMessageIds ?? []), messageId];\n await this.roomData.update(conversationId, { pinnedMessageIds: pinnedIds, updatedAt: new Date() });\n }\n\n async unpinMessage(conversationId: string, messageId: string): Promise<void> {\n await this.messageData.update(messageId, { pinned: false });\n const room = await this.roomData.byKey(conversationId);\n const pinnedIds = (room?.pinnedMessageIds ?? []).filter((id) => id !== messageId);\n await this.roomData.update(conversationId, { pinnedMessageIds: pinnedIds, updatedAt: new Date() });\n }\n\n async getPinnedMessages(conversationId: string): Promise<AXPinnedMessage[]> {\n const room = await this.roomData.byKey(conversationId);\n const ids = room?.pinnedMessageIds ?? [];\n const currentUser = await this.userApi.getCurrentUser();\n return ids.map((messageId) => ({\n messageId,\n pinnedBy: currentUser.id,\n pinnedAt: new Date(),\n }));\n }\n\n async getMessageReplies(\n messageId: string,\n pagination?: AXPagination,\n ): Promise<AXPaginatedResult<AXMessage>> {\n const { items } = await this.messageData.query({\n skip: 0,\n take: 500,\n filter: {\n field: 'replyTo.id',\n value: messageId,\n operator: this.filterService.getOperator('equal') as never,\n },\n });\n return this.paginateMessages(orderBy(items, [(m) => m.timestamp.getTime()], ['asc']), pagination ?? { page: 0, pageSize: 30 });\n }\n\n async getReplyCount(messageId: string): Promise<number> {\n const result = await this.getMessageReplies(messageId, { page: 0, pageSize: 1 });\n return result.total ?? result.items.length;\n }\n\n async getForwardCount(_messageId: string): Promise<number> {\n return 0;\n }\n\n //#endregion\n\n //#region ---- Typing / metadata / status ----\n\n async sendTypingIndicator(conversationId: string): Promise<void> {\n const currentUser = await this.userApi.getCurrentUser();\n await this.commandService.execute(CONVERSATION_EMIT_TYPING_INDICATOR_COMMAND, {\n conversationId,\n userId: currentUser.id,\n userName: currentUser.name,\n active: true,\n });\n }\n\n async stopTypingIndicator(conversationId: string): Promise<void> {\n const currentUser = await this.userApi.getCurrentUser();\n await this.commandService.execute(CONVERSATION_EMIT_TYPING_INDICATOR_COMMAND, {\n conversationId,\n userId: currentUser.id,\n userName: currentUser.name,\n active: false,\n });\n }\n\n async updateMessageMetadata(messageId: string, metadata: Record<string, unknown>): Promise<void> {\n const message = await this.messageData.byKey(messageId);\n await this.messageData.update(messageId, { metadata: { ...message?.metadata, ...metadata } });\n }\n\n async getMessageMetadata(messageId: string): Promise<Record<string, unknown>> {\n const message = await this.messageData.byKey(messageId);\n return message?.metadata ?? {};\n }\n\n async updateMessageStatus(\n messageId: string,\n status: 'sending' | 'sent' | 'delivered' | 'read' | 'failed',\n ): Promise<void> {\n await this.messageData.update(messageId, { status });\n }\n\n async getMessageDeliveryStatus(_messageId: string): Promise<{ delivered: number; read: number; total: number }> {\n return { delivered: 0, read: 0, total: 0 };\n }\n\n async bulkDeleteMessages(conversationId: string, messageIds: string[], forEveryone?: boolean): Promise<void> {\n await Promise.all(messageIds.map((id) => this.deleteMessage(id, forEveryone)));\n void conversationId;\n }\n\n async exportMessages(_conversationId: string, _format: 'json' | 'csv' | 'txt'): Promise<string | Blob> {\n throw this.createError('NOT_IMPLEMENTED', 'Export is not implemented', 501);\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type {\n AXCallEvent,\n AXConnectionEvent,\n AXConnectionOptions,\n AXConnectionStatus,\n AXConversation,\n AXMessage,\n AXNotificationEvent,\n AXTypingIndicator,\n} from '@acorex/components/conversation2';\nimport { inject, Injectable } from '@angular/core';\nimport { filter, map, merge, Observable, pairwise } from 'rxjs';\n\nimport { AXMChatRealtimeApi } from '../chat-conversation-apis.abstract';\nimport { AXMConversationRealtimeBus } from '../../../services/conversation-realtime.bus';\nimport { axmCoerceTimestampMs } from '../../utils/conversation-time.util';\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * Entity-backed realtime API that forwards {@link AXMConversationRealtimeBus} events to conversation2.\n */\n@Injectable()\nexport class AXMChatEntityRealtimeApi extends AXMChatRealtimeApi {\n //#region ---- Services & Dependencies ----\n\n private readonly bus = inject(AXMConversationRealtimeBus);\n\n //#endregion\n\n //#region ---- Connection state ----\n\n readonly connectionStatus$: Observable<AXConnectionStatus> = this.bus.connectionStatus$;\n\n async connect(_options?: AXConnectionOptions): Promise<void> {\n this.bus.setConnectionStatus('connecting');\n this.bus.setConnectionStatus('connected');\n }\n\n async disconnect(): Promise<void> {\n this.bus.setConnectionStatus('disconnected');\n }\n\n isConnected(): boolean {\n return true;\n }\n\n async reconnect(): Promise<void> {\n await this.disconnect();\n await this.connect();\n }\n\n subscribeToConnectionEvents(): Observable<AXConnectionEvent> {\n return new Observable((subscriber) => {\n subscriber.next({ type: 'connected', timestamp: new Date() });\n });\n }\n\n //#endregion\n\n //#region ---- Message streams ----\n\n subscribeToMessages(conversationId: string): Observable<AXMessage> {\n return this.bus.messagesForConversation(conversationId);\n }\n\n subscribeToMessageUpdates(conversationId?: string): Observable<AXMessage> {\n return this.bus.messageUpdatesForConversation(conversationId);\n }\n\n subscribeToMessageDeletions(_conversationId?: string): Observable<string> {\n return this.bus.messageDeletions$;\n }\n\n subscribeToMessageReactions(conversationId?: string): Observable<AXMessage> {\n return this.bus.messageUpdatesForConversation(conversationId);\n }\n\n //#endregion\n\n //#region ---- Conversation streams ----\n\n subscribeToConversationUpdates(): Observable<AXConversation> {\n return this.bus.conversationUpdates$;\n }\n\n subscribeToConversationCreated(): Observable<AXConversation> {\n return this.bus.conversationCreated$;\n }\n\n subscribeToConversationDeleted(): Observable<string> {\n return new Observable(() => undefined);\n }\n\n //#endregion\n\n //#region ---- Presence & typing ----\n\n subscribeToTypingIndicators(conversationId: string): Observable<AXTypingIndicator> {\n return this.bus.typingIndicatorsForConversation(conversationId);\n }\n\n subscribeToPresenceUpdates(_userIds?: string[]): Observable<import('@acorex/components/conversation2').AXPresenceUpdate> {\n return this.bus.presenceUpdates$;\n }\n\n subscribeToReadReceipts(conversationId?: string): Observable<{ messageId: string; userId: string; readAt: Date }> {\n const scoped = conversationId?.trim();\n return this.bus.messageUpdates$.pipe(\n pairwise(),\n filter(\n ([previous, current]) =>\n current.status === 'read' && (previous.id !== current.id || previous.status !== 'read'),\n ),\n filter(([, current]) => !scoped || current.conversationId === scoped),\n map(([, current]) => ({\n messageId: current.id,\n userId: current.senderId,\n readAt: new Date(),\n })),\n );\n }\n\n //#endregion\n\n //#region ---- Notifications & system ----\n\n subscribeToNotifications(): Observable<AXNotificationEvent> {\n return new Observable(() => undefined);\n }\n\n subscribeToCallEvents(): Observable<AXCallEvent> {\n return new Observable(() => undefined);\n }\n\n subscribeToUserBlockEvents(): Observable<{ userId: string; blocked: boolean }> {\n return new Observable(() => undefined);\n }\n\n subscribeToParticipantEvents(\n _conversationId?: string,\n ): Observable<{ conversationId: string; userId: string; action: 'added' | 'removed' }> {\n return new Observable(() => undefined);\n }\n\n subscribeToSystemEvents(): Observable<{ type: string; message: string; data?: unknown }> {\n return new Observable(() => undefined);\n }\n\n subscribeToMessageStatusChanges(conversationId?: string): Observable<{\n messageId: string;\n status: 'sending' | 'sent' | 'delivered' | 'read' | 'failed';\n timestamp: Date;\n }> {\n return this.bus.messageStatusChanges(conversationId).pipe(\n map((event) => ({\n ...event,\n timestamp: event.timestamp instanceof Date ? event.timestamp : new Date(axmCoerceTimestampMs(event.timestamp)),\n })),\n );\n }\n\n subscribeToConversationSettingsChanges(_conversationId?: string): Observable<{\n conversationId: string;\n settings: Record<string, unknown>;\n }> {\n return new Observable(() => undefined);\n }\n\n subscribeToDraftChanges(_conversationId?: string): Observable<{\n conversationId: string;\n draft: string | null;\n }> {\n return new Observable(() => undefined);\n }\n\n //#endregion\n}\n\n\n//#endregion\n","//#region ---- Imports ----\n\nimport {\n AX_CONVERSATION_AUDIO_RENDERER,\n AX_CONVERSATION_COMPOSER_EMOJI_TAB,\n AX_CONVERSATION_COMPOSER_STICKER_TAB,\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_VIDEO_RENDERER,\n AX_CONVERSATION_VOICE_RENDERER,\n AXComposerService,\n AXConversation,\n AXConversationApi,\n AXConversationService,\n ERROR_HANDLER_CONFIG,\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 {\n AXMChatEntityConversationApi,\n AXMChatEntityMessageApi,\n AXMChatEntityUserApi,\n AXMChatEntityRealtimeApi,\n} from './plugins/services/entity';\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//#endregion\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 AXMChatEntityUserApi,\n AXMChatEntityConversationApi,\n AXMChatEntityMessageApi,\n AXMChatEntityRealtimeApi,\n ...provideConversation({\n userApi: AXMChatEntityUserApi as unknown as Type<AXUserApi>,\n conversationApi: AXMChatEntityConversationApi as unknown as Type<AXConversationApi>,\n messageApi: AXMChatEntityMessageApi as unknown as Type<AXMessageApi>,\n realtimeApi: AXMChatEntityRealtimeApi as unknown as Type<AXRealtimeApi>,\n config: {\n messagePageSize: 30,\n conversationPageSize: 20,\n infiniteScrollThreshold: 200,\n scrollThreshold: 100,\n maxFilesPerMessage: 3,\n },\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 {\n ...AX_CONVERSATION_ITEM_PIN_ACTION,\n handler: async (context: { conversation: AXConversation }) => {\n const conversationService = inject(AXConversationService);\n if (context.conversation.pinned) {\n await conversationService.unpinConversation(context.conversation.id);\n return;\n }\n await conversationService.pinConversation(context.conversation.id);\n },\n },\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: AXMChatUserApi, useExisting: AXMChatEntityUserApi },\n { provide: AXMChatConversationApi, useExisting: AXMChatEntityConversationApi },\n { provide: AXMChatMessageApi, useExisting: AXMChatEntityMessageApi },\n { provide: AXMChatRealtimeApi, useExisting: AXMChatEntityRealtimeApi },\n { provide: AXUserApi, useExisting: AXMChatEntityUserApi },\n { provide: AXConversationApi, useExisting: AXMChatEntityConversationApi },\n { provide: AXMessageApi, useExisting: AXMChatEntityMessageApi },\n { provide: AXRealtimeApi, useExisting: AXMChatEntityRealtimeApi },\n {\n provide: ERROR_HANDLER_CONFIG,\n useValue: { logToConsole: false },\n },\n];\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { type AXConversation } from '@acorex/components/conversation2';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { ChangeDetectionStrategy, Component, inject, input, OnInit, output, signal } from '@angular/core';\nimport { AXMEntityChatService } from './entity-chat.service';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Scrollable list of entity-scoped conversations for the mini chat panel.\n * Loads chats via {@link AXMEntityChatService.findEntityConversations}.\n */\n@Component({\n selector: 'axm-mini-chat-history',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXDecoratorModule],\n template: `\n <div class=\"axm-mini-chat-history ax-flex ax-min-h-0 ax-flex-1 ax-flex-col\">\n <div class=\"ax-min-h-0 ax-flex-1 ax-overflow-auto ax-px-2 ax-py-2\">\n @if (loading()) {\n <div class=\"ax-p-4 ax-text-center ax-text-sm ax-text-muted\">Loading…</div>\n } @else if (conversations().length === 0) {\n <div class=\"ax-p-4 ax-text-center ax-text-sm ax-text-muted\">No chats yet for this entity.</div>\n } @else {\n @for (conversation of conversations(); track conversation.id) {\n <button\n type=\"button\"\n class=\"axm-mini-chat-history__item ax-flex ax-w-full ax-items-center ax-gap-2 ax-rounded-lg ax-px-3 ax-py-2 ax-text-start hover:ax-opacity-80\"\n (click)=\"onSelect(conversation.id)\"\n >\n <ax-icon [icon]=\"conversation.icon || 'fa-light fa-comment'\" class=\"ax-text-muted ax-shrink-0\"></ax-icon>\n <span class=\"ax-flex-1 ax-truncate ax-text-sm\">{{ conversation.title }}</span>\n </button>\n }\n }\n </div>\n </div>\n `,\n styles: `\n :host {\n display: flex;\n min-height: 0;\n flex: 1;\n flex-direction: column;\n }\n\n .axm-mini-chat-history__item {\n color: inherit;\n }\n `,\n})\nexport class AXMMiniChatHistoryComponent implements OnInit {\n //#region ---- Services & Dependencies ----\n\n private readonly entityChatService = inject(AXMEntityChatService);\n\n //#endregion\n\n //#region ---- Inputs / Outputs ----\n\n readonly entityId = input.required<string>();\n readonly entityType = input.required<string>();\n\n /** Emits when the user picks a conversation from the list. */\n readonly conversationSelected = output<string>();\n\n //#endregion\n\n //#region ---- State ----\n\n readonly conversations = signal<AXConversation[]>([]);\n readonly loading = signal(false);\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n ngOnInit(): void {\n void this.refresh();\n }\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /** Reloads the entity conversation list (call when the history panel becomes visible). */\n async refresh(): Promise<void> {\n this.loading.set(true);\n try {\n const items = await this.entityChatService.findEntityConversations({\n entityId: this.entityId(),\n entityType: this.entityType(),\n });\n this.conversations.set(items);\n } catch (error: unknown) {\n console.error('Failed to load entity mini chat history:', error);\n this.conversations.set([]);\n } finally {\n this.loading.set(false);\n }\n }\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n protected onSelect(conversationId: string): void {\n this.conversationSelected.emit(conversationId);\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { type AXConversation } from '@acorex/components/conversation2';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, OnInit, output, signal } from '@angular/core';\nimport { axmIsAssistBotConversation } from '../chat/plugins/tabs/chat-conversation-tabs';\nimport { AXMChatConversationApi } from '../chat/plugins/services/chat-conversation-apis.abstract';\nimport { axmConversationIsEntityChat } from './entity-chat.util';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Compact scrollable list of inbox AI-assist chats (non-entity bot / assist conversations).\n */\n@Component({\n selector: 'axm-mini-chat-inbox-history',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXDecoratorModule, AXTranslationModule, AsyncPipe],\n template: `\n <div class=\"axm-mini-chat-inbox-history ax-flex ax-min-h-0 ax-flex-1 ax-flex-col\">\n <div class=\"ax-min-h-0 ax-flex-1 ax-overflow-auto ax-px-2 ax-py-2\">\n @if (loading()) {\n <div class=\"ax-p-4 ax-text-center ax-text-sm ax-text-muted\">\n {{ '@conversation:mini-chat.loading' | translate | async }}\n </div>\n } @else if (conversations().length === 0) {\n <div class=\"ax-p-4 ax-text-center ax-text-sm ax-text-muted\">\n {{ '@conversation:mini-chat.inbox-empty' | translate | async }}\n </div>\n } @else {\n @for (conversation of conversations(); track conversation.id) {\n <button\n type=\"button\"\n class=\"axm-mini-chat-inbox-history__item ax-flex ax-w-full ax-items-center ax-gap-2 ax-rounded-lg ax-px-3 ax-py-2 ax-text-start hover:ax-opacity-80\"\n (click)=\"onSelect(conversation.id)\"\n >\n <ax-icon [icon]=\"conversation.icon || 'fa-light fa-robot'\" class=\"ax-text-muted ax-shrink-0\"></ax-icon>\n <span class=\"ax-flex-1 ax-truncate ax-text-sm\">{{ conversation.title }}</span>\n </button>\n }\n }\n </div>\n </div>\n `,\n styles: `\n :host {\n display: flex;\n min-height: 0;\n flex: 1;\n flex-direction: column;\n }\n\n .axm-mini-chat-inbox-history__item {\n color: inherit;\n }\n `,\n})\nexport class AXMMiniChatInboxHistoryComponent implements OnInit {\n //#region ---- Services & Dependencies ----\n\n private readonly conversationApi = inject(AXMChatConversationApi);\n\n //#endregion\n\n //#region ---- Outputs ----\n\n /** Emits when the user picks a conversation from the list. */\n readonly conversationSelected = output<string>();\n\n //#endregion\n\n //#region ---- State ----\n\n readonly conversations = signal<AXConversation[]>([]);\n readonly loading = signal(false);\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n ngOnInit(): void {\n void this.refresh();\n }\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /** Reloads AI-assist inbox conversations. */\n async refresh(): Promise<void> {\n this.loading.set(true);\n try {\n const result = await this.conversationApi.getConversations({ page: 0, pageSize: 100 });\n const items = (result.items ?? []).filter(\n (conversation) =>\n axmIsAssistBotConversation(conversation) && !axmConversationIsEntityChat(conversation.metadata),\n );\n this.conversations.set(items);\n } catch (error: unknown) {\n console.error('Failed to load inbox AI assist mini chat history:', error);\n this.conversations.set([]);\n } finally {\n this.loading.set(false);\n }\n }\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n protected onSelect(conversationId: string): void {\n this.conversationSelected.emit(conversationId);\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport {\n AXComposerComponent,\n AXConversationContainerDirective,\n AXConversationService,\n AXInfoBarComponent,\n AXMessageListComponent,\n} from '@acorex/components/conversation2';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, input, output, ViewEncapsulation } from '@angular/core';\nimport { AXMChatAssistComposerStarterPromptsComponent } from '../chat/plugins/composer/chat-assist-composer-starter-prompts.component';\nimport { AXMChatEmptyAssistComposerComponent } from '../chat/plugins/empty-state/chat-empty-assist-composer.component';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Compact, entity-scoped chat: renders a single conversation thread (message list) with an optional\n * info-bar and composer. Opens an existing chat by {@link chatId}, or starts a new entity assist chat\n * (created lazily on first send and tagged with `entityId` / `entityType` in conversation metadata).\n *\n * Uses the shared {@link AXConversationService} (same instance as the main chat page) so message\n * streams, realtime updates, and assist replies behave identically. Selecting a chat / starting a\n * new one is coordinated by the host through {@link chatId} and {@link AXConversationService}.\n */\n@Component({\n selector: 'axm-mini-chat',\n templateUrl: './mini-chat.component.html',\n styleUrls: ['./mini-chat.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXConversationContainerDirective,\n AXInfoBarComponent,\n AXMessageListComponent,\n AXComposerComponent,\n AXDecoratorModule,\n AXTranslationModule,\n AXMChatEmptyAssistComposerComponent,\n AXMChatAssistComposerStarterPromptsComponent,\n ],\n})\nexport class AXMMiniChatComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly conversationService = inject(AXConversationService);\n\n //#endregion\n\n //#region ---- Inputs / Outputs ----\n\n /** Existing conversation id to open. When omitted (and no conversation is active), the new-chat composer is shown. */\n readonly chatId = input<string | undefined>(undefined);\n\n /** Entity reference the chat is (or will be) bound to; omitted for inbox (regular) chats. */\n readonly entityId = input<string | undefined>(undefined);\n readonly entityType = input<string | undefined>(undefined);\n\n /** Assist used as the bot peer when creating a new entity chat (falls back to the tenant default). */\n readonly assistId = input<string | undefined>(undefined);\n\n readonly showInfoBar = input(true);\n readonly showComposer = input(true);\n\n /** Emits the active conversation id when one is opened or newly created. */\n readonly conversationOpened = output<string>();\n\n //#endregion\n\n //#region ---- Computed ----\n\n readonly hasActiveConversation = computed(() => this.conversationService.activeConversationId() !== null);\n\n //#endregion\n\n //#region ---- Effects ----\n\n /**\n * Selects the conversation requested via {@link chatId}. Deselection (showing the new-chat composer)\n * is left to the host so the lazily-created conversation isn't cleared right after it is selected.\n */\n #syncWithChatId = effect(() => {\n const chatId = this.chatId()?.trim();\n if (!chatId) {\n return;\n }\n\n if (chatId === this.conversationService.activeConversationId()) {\n return;\n }\n\n void this.conversationService.selectConversation(chatId).then(() => this.conversationOpened.emit(chatId));\n });\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n /** New-chat composer created and selected a conversation; surface it to the host. */\n onConversationCreated(conversationId: string): void {\n this.conversationOpened.emit(conversationId);\n }\n\n //#endregion\n}\n\n//#endregion\n","<div axConversationContainer class=\"axm-mini-chat ax-flex ax-h-full ax-min-h-0 ax-flex-col\">\n @if (showInfoBar() && hasActiveConversation()) {\n <ax-conversation-info-bar class=\"axm-mini-chat__info-bar ax-shrink-0 ax-shadow-sm\"></ax-conversation-info-bar>\n }\n\n <ax-conversation-message-list class=\"axm-mini-chat__messages ax-min-h-0 ax-flex-1 ax-overflow-hidden\" style=\"direction: ltr\">\n <div ax-conversation-message-list-no-active class=\"ax-block\" style=\"width: min(95%, 50rem)\">\n <axm-chat-empty-assist-composer\n [entityId]=\"entityId()\"\n [entityType]=\"entityType()\"\n [initialAssistId]=\"assistId()\"\n [sendStarterPromptsInPlace]=\"true\"\n (conversationCreated)=\"onConversationCreated($event)\"\n />\n </div>\n <axm-chat-assist-composer-starter-prompts\n ax-conversation-message-list-empty\n [sendStarterPromptsInPlace]=\"true\"\n />\n </ax-conversation-message-list>\n\n @if (showComposer() && hasActiveConversation()) {\n <ax-conversation-composer class=\"axm-mini-chat__composer ax-shrink-0\"></ax-conversation-composer>\n }\n</div>\n","//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXConversationService } from '@acorex/components/conversation2';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n inject,\n input,\n OnDestroy,\n OnInit,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { AXMConversationRealtimeBus } from '../chat/services/conversation-realtime.bus';\nimport { AXMChatConversationApi } from '../chat/plugins/services/chat-conversation-apis.abstract';\nimport { AXMMiniChatHistoryComponent } from './mini-chat-history.component';\nimport { AXMMiniChatInboxHistoryComponent } from './mini-chat-inbox-history.component';\nimport type { AXMMiniChatPanelScope, AXMMiniChatPanelSessionState } from './mini-chat-panel.types';\nimport { AXMMiniChatComponent } from './mini-chat.component';\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Mini chat panel overlay: header, thread view, and history (entity list or main inbox sidebar).\n */\n@Component({\n selector: 'axm-mini-chat-panel',\n templateUrl: './mini-chat-panel.component.html',\n styleUrls: ['./mini-chat-panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXButtonModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXMMiniChatComponent,\n AXMMiniChatHistoryComponent,\n AXMMiniChatInboxHistoryComponent,\n AsyncPipe,\n ],\n})\nexport class AXMMiniChatPanelComponent implements OnInit, OnDestroy {\n //#region ---- Services & Dependencies ----\n\n private readonly conversationService = inject(AXConversationService);\n private readonly conversationApi = inject(AXMChatConversationApi);\n private readonly realtimeBus = inject(AXMConversationRealtimeBus);\n private readonly destroyRef = inject(DestroyRef);\n\n //#endregion\n\n //#region ---- Inputs ----\n\n readonly scope = input<AXMMiniChatPanelScope>('entity');\n readonly entityId = input<string | undefined>(undefined);\n readonly entityType = input<string | undefined>(undefined);\n readonly assistId = input<string | undefined>(undefined);\n readonly title = input('Entity Chats');\n readonly showInfoBar = input(false);\n readonly showComposer = input(true);\n readonly requestClose = input.required<() => void>();\n readonly initialView = input<'thread' | 'history'>('thread');\n readonly initialConversationId = input<string | undefined>(undefined);\n readonly startWithNewChat = input(false);\n readonly onSessionChange = input<(state: Pick<AXMMiniChatPanelSessionState, 'view' | 'selectedChatId'>) => void>();\n\n //#endregion\n\n //#region ---- State ----\n\n protected readonly view = signal<'thread' | 'history'>('thread');\n protected readonly selectedChatId = signal<string | undefined>(undefined);\n\n protected readonly isInboxScope = computed(() => this.scope() === 'inbox');\n\n /** Bumps when shared conversation storage changes so the header title stays in sync. */\n private readonly storageRevision = signal(0);\n\n /** Active conversation title for the thread header; null when none is selected yet. */\n protected readonly headerTitle = computed(() => {\n this.storageRevision();\n return this.cachedHeaderTitle();\n });\n\n private readonly cachedHeaderTitle = signal<string | null>(null);\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n this.realtimeBus.conversationUpdates$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((conversation) => {\n const id = this.conversationService.activeConversationId() ?? this.selectedChatId();\n if (conversation.id === id) {\n this.cachedHeaderTitle.set(conversation.title?.trim() || null);\n }\n this.storageRevision.update((revision) => revision + 1);\n });\n }\n\n ngOnInit(): void {\n this.view.set(this.initialView());\n const conversationId = this.initialConversationId();\n\n if (this.startWithNewChat()) {\n void this.startNewChat();\n return;\n }\n\n this.selectedChatId.set(conversationId);\n if (!conversationId) {\n void this.startNewChat();\n return;\n }\n\n this.syncSession();\n }\n\n ngOnDestroy(): void {\n this.syncSession();\n }\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n protected closePanel(): void {\n this.syncSession();\n this.requestClose()();\n }\n\n protected openHistory(): void {\n this.view.set('history');\n this.syncSession();\n }\n\n protected selectChat(conversationId: string): void {\n this.selectedChatId.set(conversationId);\n this.view.set('thread');\n void this.conversationService.selectConversation(conversationId);\n void this.conversationApi.getConversation(conversationId).then((conversation) => {\n this.cachedHeaderTitle.set(conversation.title?.trim() || null);\n });\n this.syncSession();\n }\n\n protected onConversationOpened(conversationId: string): void {\n this.selectedChatId.set(conversationId);\n this.storageRevision.update((revision) => revision + 1);\n void this.conversationApi.getConversation(conversationId).then((conversation) => {\n this.cachedHeaderTitle.set(conversation.title?.trim() || null);\n });\n this.syncSession();\n }\n\n protected async startNewChat(): Promise<void> {\n this.selectedChatId.set(undefined);\n this.view.set('thread');\n await this.conversationService.selectConversation(null as never);\n this.syncSession();\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private syncSession(): void {\n this.onSessionChange()?.({\n view: this.view(),\n selectedChatId: this.selectedChatId(),\n });\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"axm-mini-chat-panel ax-flex ax-h-full ax-min-h-0 ax-flex-col\">\n <div class=\"axm-mini-chat-panel__header ax-flex ax-shrink-0 ax-items-center ax-justify-between ax-gap-2 ax-px-3 ax-py-2\">\n <div class=\"ax-flex ax-min-w-0 ax-flex-1 ax-flex-col\">\n @if (view() === 'history') {\n <span class=\"ax-text-sm ax-font-semibold ax-truncate\">\n {{ '@conversation:mini-chat.history-title' | translate | async }}\n </span>\n } @else if (headerTitle()) {\n <span class=\"ax-text-sm ax-font-semibold ax-truncate\">{{ headerTitle() }}</span>\n } @else {\n <span class=\"ax-text-sm ax-font-semibold ax-truncate\">\n {{ '@conversation:mini-chat.new-chat' | translate | async }}\n </span>\n }\n </div>\n <div class=\"ax-flex ax-shrink-0 ax-items-center ax-gap-1\">\n @if (view() === 'history') {\n <ax-button look=\"blank\" text=\"New chat\" (onClick)=\"startNewChat()\">\n <ax-prefix><ax-icon icon=\"fa-light fa-plus\"></ax-icon></ax-prefix>\n </ax-button>\n } @else {\n <ax-button look=\"blank\" [iconOnly]=\"true\" (onClick)=\"openHistory()\" aria-label=\"Chat history\">\n <ax-prefix><ax-icon icon=\"fa-light fa-clock-rotate-left\"></ax-icon></ax-prefix>\n </ax-button>\n }\n <ax-button look=\"blank\" [iconOnly]=\"true\" (onClick)=\"closePanel()\" aria-label=\"Close\">\n <ax-prefix><ax-icon icon=\"fa-light fa-xmark\"></ax-icon></ax-prefix>\n </ax-button>\n </div>\n </div>\n\n @if (view() === 'history') {\n @if (isInboxScope()) {\n <axm-mini-chat-inbox-history (conversationSelected)=\"selectChat($event)\" />\n } @else {\n <axm-mini-chat-history\n [entityId]=\"entityId()!\"\n [entityType]=\"entityType()!\"\n (conversationSelected)=\"selectChat($event)\"\n />\n }\n } @else {\n <div class=\"axm-mini-chat-panel__body ax-flex ax-min-h-0 ax-flex-1 ax-flex-col\">\n <axm-mini-chat\n class=\"ax-flex ax-min-h-0 ax-flex-1 ax-flex-col\"\n [chatId]=\"selectedChatId()\"\n [entityId]=\"entityId()\"\n [entityType]=\"entityType()\"\n [assistId]=\"assistId()\"\n [showInfoBar]=\"showInfoBar()\"\n [showComposer]=\"showComposer()\"\n (conversationOpened)=\"onConversationOpened($event)\"\n />\n </div>\n }\n</div>\n","//#region ---- Imports ----\n\nimport { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\nimport { AXM_CHAT_CONVERSATION2_PROVIDERS } from '../chat/chat-conversation.providers';\nimport { AXMConversationFocusService } from '../chat/services/conversation-focus.service';\nimport { AXMMiniChatPanelComponent } from './mini-chat-panel.component';\nimport type { AXMMiniChatPanelSessionState } from './mini-chat-panel.types';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Host for inbox mini chat with an isolated {@link AXConversationService} so the header\n * slot does not change the main chat page selection while the user is on the chat route.\n */\n@Component({\n selector: 'axm-mini-chat-inbox-panel-host',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [...AXM_CHAT_CONVERSATION2_PROVIDERS, AXMConversationFocusService],\n imports: [AXMMiniChatPanelComponent],\n template: `\n <axm-mini-chat-panel\n scope=\"inbox\"\n [title]=\"title()\"\n [showInfoBar]=\"showInfoBar()\"\n [showComposer]=\"showComposer()\"\n [requestClose]=\"requestClose()\"\n [initialView]=\"initialView()\"\n [initialConversationId]=\"initialConversationId()\"\n [startWithNewChat]=\"startWithNewChat()\"\n [onSessionChange]=\"onSessionChange()\"\n />\n `,\n})\nexport class AXMMiniChatInboxPanelHostComponent {\n //#region ---- Inputs ----\n\n readonly title = input('Chats');\n readonly showInfoBar = input(false);\n readonly showComposer = input(true);\n readonly requestClose = input.required<() => void>();\n readonly initialView = input<'thread' | 'history'>('thread');\n readonly initialConversationId = input<string | undefined>(undefined);\n readonly startWithNewChat = input(false);\n readonly onSessionChange =\n input<(state: Pick<AXMMiniChatPanelSessionState, 'view' | 'selectedChatId'>) => void>();\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Mini chat panel open options ----\n\nimport type { AXPlacement } from '@acorex/cdk/common';\nimport type { ElementRef } from '@angular/core';\n\n/** Anchor element for overlay positioning. */\nexport type AXMMiniChatPanelAnchor = Element | ElementRef<HTMLElement>;\n\n/**\n * Common placement aliases mapped to {@link AXPlacement}.\n * Examples: `top-right` → `top-end`, `bottom-left` → `bottom-start`.\n */\nexport type AXMMiniChatPanelSide =\n | AXPlacement\n | 'top-left'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-right'\n | 'left'\n | 'right';\n\n/** Fixed viewport coordinates (px). Ignored when `anchor` is set. */\nexport interface AXMMiniChatPanelPosition {\n x: number;\n y: number;\n}\n\n/** Mini chat panel scope: entity-bound threads or main inbox (non-entity chats). */\nexport type AXMMiniChatPanelScope = 'entity' | 'inbox';\n\n/** Session key used for the global inbox mini chat (non-entity conversations). */\nexport const AXM_MINI_CHAT_INBOX_SESSION_KEY = '__inbox__';\n\n/** Persisted panel state for a mini chat session. */\nexport interface AXMMiniChatPanelSessionState {\n view: 'thread' | 'history';\n selectedChatId?: string;\n hasOpened: boolean;\n}\n\n/** Options passed to {@link AXMMiniChatPanelService.open}. */\nexport interface AXMMiniChatPanelOpenOptions {\n /** Default: `entity`. Use `inbox` for regular (non-entity) chats shown in the main chat sidebar. */\n scope?: AXMMiniChatPanelScope;\n entityId?: string;\n entityType?: string;\n assistId?: string;\n title?: string;\n showInfoBar?: boolean;\n showComposer?: boolean;\n /** Fixed viewport position (px). Ignored when `anchor` is set. */\n position?: AXMMiniChatPanelPosition;\n /** Anchor element for popover placement. */\n anchor?: AXMMiniChatPanelAnchor;\n /** Placement relative to anchor. Default: `top-end` when anchored. */\n placement?: AXMMiniChatPanelSide;\n offsetX?: number;\n offsetY?: number;\n autoFlip?: boolean;\n /** When true, always opens a fresh conversation thread. */\n forceNewChat?: boolean;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPlacement } from '@acorex/cdk/common';\nimport { AXOverlayService, type AXOverlayRef } from '@acorex/cdk/overlay';\nimport { AXConversationService } from '@acorex/components/conversation2';\nimport { AXPDeviceService } from '@acorex/platform/core';\nimport { ElementRef, Injectable, inject, signal } from '@angular/core';\nimport { AXMMiniChatInboxPanelHostComponent } from './mini-chat-inbox-panel-host.component';\nimport { AXMMiniChatPanelComponent } from './mini-chat-panel.component';\nimport type {\n AXMMiniChatPanelAnchor,\n AXMMiniChatPanelOpenOptions,\n AXMMiniChatPanelSessionState,\n AXMMiniChatPanelSide,\n} from './mini-chat-panel.types';\nimport { AXM_MINI_CHAT_INBOX_SESSION_KEY } from './mini-chat-panel.types';\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * Opens the entity mini chat panel via {@link AXOverlayService}.\n * Restores the last conversation per entity on reopen; use {@link forceNewChat} for an explicit new thread.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMMiniChatPanelService {\n //#region ---- Services & Dependencies ----\n\n private readonly overlayService = inject(AXOverlayService);\n private readonly conversationService = inject(AXConversationService);\n private readonly deviceService = inject(AXPDeviceService);\n\n //#endregion\n\n //#region ---- Private Properties ----\n\n private overlayRef: AXOverlayRef<AXMMiniChatPanelComponent | AXMMiniChatInboxPanelHostComponent> | null = null;\n\n /** Active conversation before the panel took over selection (restored on close). */\n private savedActiveConversationId: string | null | undefined;\n\n /** Per-entity session (view, selected conversation) restored when the panel reopens. */\n private readonly sessions = new Map<string, AXMMiniChatPanelSessionState>();\n\n /** Reactive open state for launcher UI (FAB icon). */\n readonly panelOpen = signal(false);\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /** True while the mini chat overlay is mounted. */\n isOpen(): boolean {\n return this.panelOpen();\n }\n\n /** Closes the overlay when it is open. */\n close(): void {\n this.disposeOverlayOnly();\n }\n\n /** Toggles the inbox mini chat overlay (regular non-entity conversations). */\n toggleInbox(options: Omit<AXMMiniChatPanelOpenOptions, 'scope' | 'entityId' | 'entityType'> = {}): void {\n this.toggle({ ...options, scope: 'inbox' });\n }\n\n /** Toggles the overlay, restoring the last session when reopening. */\n toggle(options: AXMMiniChatPanelOpenOptions): void {\n if (this.isOpen()) {\n this.close();\n return;\n }\n void this.open(options);\n }\n\n /**\n * Opens the mini chat panel overlay (replaces any existing overlay).\n * Restores the last session for the entity unless {@link AXMMiniChatPanelOpenOptions.forceNewChat} is set.\n */\n async open(options: AXMMiniChatPanelOpenOptions): Promise<void> {\n this.disposeOverlayOnly();\n\n const scope = options.scope ?? 'entity';\n\n if (scope !== 'inbox') {\n this.captureActiveConversation();\n }\n\n const entityKey =\n scope === 'inbox'\n ? AXM_MINI_CHAT_INBOX_SESSION_KEY\n : this.buildEntityKey(options.entityType!.trim(), options.entityId!.trim());\n\n const session = this.sessions.get(entityKey);\n const restoreSession = Boolean(session?.hasOpened) && !options.forceNewChat;\n const startWithNewChat = !restoreSession || options.forceNewChat;\n\n const initialView = restoreSession ? session!.view : 'thread';\n const initialConversationId = restoreSession ? session!.selectedChatId : undefined;\n\n const requestClose = (): void => {\n this.disposeOverlayOnly();\n };\n\n const onSessionChange = (state: Pick<AXMMiniChatPanelSessionState, 'view' | 'selectedChatId'>): void => {\n this.sessions.set(entityKey, {\n view: state.view,\n selectedChatId: state.selectedChatId,\n hasOpened: true,\n });\n };\n\n const isMobile = this.deviceService.isMobileDevice();\n const panelClasses = ['axm-mini-chat-panel-shell'];\n const useAnchor = Boolean(options.anchor);\n const useFixedPosition = !useAnchor && Boolean(options.position);\n\n if (useAnchor) {\n panelClasses.push('axm-mini-chat-panel-shell--anchored');\n } else if (useFixedPosition) {\n panelClasses.push('axm-mini-chat-panel-shell--fixed');\n } else {\n panelClasses.push('axm-mini-chat-panel-shell--default');\n }\n\n try {\n const panelInputs = {\n title: options.title ?? (scope === 'inbox' ? 'Chats' : 'Entity Chats'),\n showInfoBar: options.showInfoBar ?? false,\n showComposer: options.showComposer ?? true,\n initialView,\n initialConversationId,\n startWithNewChat,\n requestClose,\n onSessionChange,\n };\n\n this.overlayRef = await this.overlayService.create(\n scope === 'inbox' ? AXMMiniChatInboxPanelHostComponent : AXMMiniChatPanelComponent,\n {\n centered: false,\n width: 'auto',\n actionSheetStyle: isMobile,\n panelClass: panelClasses,\n backdrop: {\n enabled: false,\n background: false,\n closeOnClick: false,\n },\n closeOnEscape: true,\n closeOnOutsideClick: true,\n ...(useAnchor\n ? {\n anchorOptions: {\n anchor: this.resolveAnchorElement(options.anchor!),\n placement: this.normalizePlacement(options.placement ?? 'top-end'),\n offsetX: options.offsetX ?? 8,\n offsetY: options.offsetY ?? 8,\n autoFlip: options.autoFlip ?? true,\n },\n }\n : {}),\n inputs:\n scope === 'inbox'\n ? panelInputs\n : {\n scope,\n entityId: options.entityId,\n entityType: options.entityType,\n assistId: options.assistId,\n ...panelInputs,\n },\n onDispose: () => {\n this.overlayRef = null;\n this.panelOpen.set(false);\n },\n },\n );\n\n if (useFixedPosition && options.position) {\n this.applyFixedPosition(this.overlayRef, options.position);\n }\n\n if (useAnchor) {\n setTimeout(() => {\n this.overlayRef?.updatePosition();\n }, 0);\n }\n\n this.panelOpen.set(true);\n } catch {\n this.overlayRef = null;\n }\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private buildEntityKey(entityType: string, entityId: string): string {\n return `${entityType}:${entityId}`;\n }\n\n private disposeOverlayOnly(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n this.panelOpen.set(false);\n if (this.savedActiveConversationId !== undefined) {\n this.restoreActiveConversation();\n }\n }\n\n private captureActiveConversation(): void {\n this.savedActiveConversationId = this.conversationService.activeConversationId();\n }\n\n private restoreActiveConversation(): void {\n if (this.savedActiveConversationId === undefined) {\n return;\n }\n\n const conversationId = this.savedActiveConversationId;\n this.savedActiveConversationId = undefined;\n void this.conversationService.selectConversation(conversationId as never);\n }\n\n private resolveAnchorElement(anchor: AXMMiniChatPanelAnchor): HTMLElement {\n if (anchor instanceof ElementRef) {\n return anchor.nativeElement;\n }\n\n if (anchor instanceof HTMLElement) {\n return anchor;\n }\n\n const hostCandidate = anchor as Element & { getHostElement?: () => HTMLElement };\n if (typeof hostCandidate.getHostElement === 'function') {\n return hostCandidate.getHostElement();\n }\n\n return anchor as HTMLElement;\n }\n\n private normalizePlacement(placement: AXMMiniChatPanelSide): AXPlacement {\n const aliases: Record<string, AXPlacement> = {\n 'top-left': 'top-start',\n 'top-right': 'top-end',\n 'bottom-left': 'bottom-start',\n 'bottom-right': 'bottom-end',\n left: 'start',\n right: 'end',\n };\n\n return aliases[placement] ?? (placement as AXPlacement);\n }\n\n private applyFixedPosition(\n overlayRef: AXOverlayRef<AXMMiniChatPanelComponent | AXMMiniChatInboxPanelHostComponent>,\n position: { x: number; y: number },\n ): void {\n const pane = overlayRef.overlayElement?.querySelector('.ax-overlay-pane') as HTMLElement | null;\n if (!pane) {\n return;\n }\n\n pane.style.position = 'fixed';\n pane.style.left = `${position.x}px`;\n pane.style.top = `${position.y}px`;\n pane.style.right = 'auto';\n pane.style.bottom = 'auto';\n pane.style.transform = 'none';\n }\n\n //#endregion\n}\n\n//#endregion\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, ViewEncapsulation } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute } 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';\nimport { AXMChatConversationApi } from './plugins/services/chat-conversation-apis.abstract';\nimport { AXMMiniChatPanelService } from '../mini-chat/mini-chat-panel.service';\n\n@Component({\n selector: 'axm-chat',\n templateUrl: './chat.component.html',\n styleUrls: ['./chat.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\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 chatConversationApi = inject(AXMChatConversationApi);\n private readonly miniChatPanelService = inject(AXMMiniChatPanelService);\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 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 if (this.miniChatPanelService.panelOpen()) {\n return;\n }\n\n const conversationId = this.routeConversationId();\n const activeConversationId = this.conversationService.activeConversationId();\n\n this.chatConversationApi.reportFocusedConversation(conversationId);\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 const routeConversationId = this.routeConversationId();\n\n if (routeConversationId !== conversationId) {\n // URL is the source of truth; #syncConversationWithRoute selects the conversation.\n void this.router.navigate([this.#getAppRouteSegment(), 'chat', conversationId]);\n } else if (this.conversationService.activeConversationId() !== conversationId) {\n void this.conversationService.selectConversation(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\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-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\" style=\"direction: ltr\">\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 { RootConfig } from '../../../../contracts';\nimport { AXPFileStorageStatus } from '@acorex/platform/contracts';\nimport { type AXPFileStorageService } from '@acorex/platform/common';\n\n//#endregion\n\n//#region ---- Constants ----\n\n/** refType for multimedia attachments sent from conversation chat. */\nexport const AXM_CONVERSATION_CHAT_ATTACHMENT_REF_TYPE = `${RootConfig.module.name}.ChatAttachment`;\n\n/** File storage category for conversation chat attachments. */\nexport const AXM_CONVERSATION_CHAT_ATTACHMENT_CATEGORY = 'chat-attachment';\n\n//#endregion\n\n//#region ---- Persistence ----\n\n/**\n * Persists a chat attachment; {@link refId} is typically the conversation id (batch grouping for multi-send).\n */\nexport async function persistChatAttachment(\n fileStorage: AXPFileStorageService,\n file: File,\n refId: string,\n): Promise<{ fileId: string }> {\n const trimmed = refId.trim();\n if (!trimmed) {\n throw new Error('refId is required for chat attachment persistence.');\n }\n\n const info = await fileStorage.save({\n file,\n name: file.name,\n refId: trimmed,\n refType: AXM_CONVERSATION_CHAT_ATTACHMENT_REF_TYPE,\n category: AXM_CONVERSATION_CHAT_ATTACHMENT_CATEGORY,\n status: AXPFileStorageStatus.Temporary,\n });\n\n const fileId = info.fileId?.trim();\n if (!fileId) {\n throw new Error('File storage did not return a fileId.');\n }\n\n await fileStorage.commit(fileId);\n return { fileId };\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { InjectionToken } from '@angular/core';\nimport type { AXSendMessageCommand } from '@acorex/components/conversation2';\n\n//#endregion\n\n//#region ---- Port ----\n\nexport interface AXMConversationRegularAutoReplyPort {\n maybeGenerate(command: AXSendMessageCommand, userMessageId: string, currentUserId: string): Promise<void>;\n}\n\nexport const AXM_CONVERSATION_REGULAR_AUTO_REPLY_PORT = new InjectionToken<AXMConversationRegularAutoReplyPort>(\n 'AXM_CONVERSATION_REGULAR_AUTO_REPLY_PORT',\n);\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXMessagePayload } from '@acorex/components/conversation2';\n\n//#endregion\n\n//#region ---- Payload helpers ----\n\n/**\n * Extracts display text from a message payload (text messages and captions).\n */\nexport function axmExtractTextFromPayload(payload: AXMessagePayload | undefined): string {\n if (!payload) {\n return '';\n }\n\n if (payload.type === 'text') {\n return payload.text;\n }\n\n const caption = (payload as { caption?: string }).caption;\n return typeof caption === 'string' ? caption : '';\n}\n\n//#endregion\n","import { RootConfig } from '../../contracts';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPFilterOperatorMiddlewareService } from '@acorex/platform/common';\nimport type { AXTextPayload } from '@acorex/components/conversation2';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPUserReference } from '@acorex/platform/contracts';\nimport {\n AXM_COMMENT_LIKE_EMOJI,\n AXMConversationMessage,\n AXReaction,\n} from '../../entities/message/message.types';\nimport { AXMConversationRoom } from '../../entities/room/room.types';\nimport { AXMCommentEntityData } from '../../contracts';\nimport { AXMComment, AXMCommentThread } from './comment.type';\nimport { axmExtractTextFromPayload } from './comment-payload.util';\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?: string,\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?: string): Promise<AXMComment>;\n abstract deleteComment(commentId: string): Promise<boolean>;\n\n //#endregion\n\n //#region ---- Comment Reaction Service ----\n\n abstract addReaction(commentId: string, emoji: string): Promise<AXMComment>;\n abstract removeReaction(commentId: string, emoji: string): Promise<AXMComment>;\n abstract getReactions(commentId: string): Promise<AXReaction[]>;\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 entityService = inject(AXPEntityService);\n private readonly roomService = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.room.name)\n .data<string, AXMConversationRoom>();\n private readonly messageService = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.message.name)\n .data<string, AXMConversationMessage>();\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 now = new Date();\n const room: Omit<AXMConversationRoom, 'id'> = {\n kind: 'comment',\n type: 'group',\n name: displayName,\n title: title || `Comments for ${entityRef.entityTypeId}#${entityRef.entityId}`,\n topic,\n entityRef: { ...entityRef },\n participants: [\n {\n id: creatorUser.id,\n name: creatorUser.fullName ?? creatorUser.username ?? creatorUser.id,\n role: 'admin',\n },\n ],\n lastMessageAt: now,\n unreadCount: 0,\n status: { isTyping: false, typingUsers: [] },\n settings: { notifications: true, showPreview: true },\n createdAt: now,\n updatedAt: now,\n };\n const newRoomId = await this.roomService.create(room);\n return this.requireRoom(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: 'kind',\n value: 'comment',\n operator: this.filterService.getOperator('equal') as never,\n },\n {\n field: 'entityRef.entityId',\n value: entityRef.entityId,\n operator: this.filterService.getOperator('equal') as never,\n },\n {\n field: 'entityRef.entityTypeId',\n value: entityRef.entityTypeId,\n operator: this.filterService.getOperator('equal') as never,\n },\n {\n field: 'topic',\n value: topic,\n operator: this.filterService.getOperator('equal') as never,\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: 'kind',\n value: 'comment',\n operator: this.filterService.getOperator('equal') as never,\n },\n {\n field: 'entityRef.entityId',\n value: entityRef.entityId,\n operator: this.filterService.getOperator('equal') as never,\n },\n {\n field: 'entityRef.entityTypeId',\n value: entityRef.entityTypeId,\n operator: this.filterService.getOperator('equal') as never,\n },\n {\n field: 'topic',\n value: topic,\n operator: this.filterService.getOperator('equal') as never,\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.update(threadId, { ...data, updatedAt: new Date() });\n return this.requireRoom(threadId);\n }\n\n async deleteThread(threadId: string): Promise<boolean> {\n await this.roomService.delete(threadId);\n return true;\n }\n\n async addComment(\n threadId: string,\n content: string,\n author: AXPUserReference,\n parentCommentId?: string,\n _contentType = 'text',\n ): Promise<AXMConversationMessage> {\n const plainTitle =\n content.replace(/<[^>]+>/g, '').trim() ||\n (await this.translationService.translateAsync('@conversation:terms.common.comment'));\n const payload: AXTextPayload = { type: 'text', text: content };\n const now = new Date();\n const message: Omit<AXMConversationMessage, 'id'> = {\n conversationId: threadId,\n senderId: author.id,\n type: 'text',\n timestamp: now,\n payload,\n status: 'sent',\n reactions: [],\n name: plainTitle,\n title: plainTitle,\n ...(parentCommentId ? { replyTo: { id: parentCommentId } as AXMConversationMessage } : {}),\n };\n const messageId = await this.messageService.create(message);\n return this.requireMessage(messageId);\n }\n\n async getComments(threadId: string): Promise<AXMConversationMessage[]> {\n const { items } = await this.messageService.query({\n skip: 0,\n filter: {\n field: 'conversationId',\n value: threadId,\n operator: this.filterService.getOperator('equal') as never,\n },\n sort: [{ field: 'timestamp', dir: 'asc' } as never],\n take: 500,\n });\n return items;\n }\n\n async getComment(commentId: string): Promise<AXMConversationMessage> {\n return this.requireMessage(commentId);\n }\n\n async editComment(\n commentId: string,\n content: string,\n _editor: AXPUserReference,\n _contentType = 'text',\n ): Promise<AXMConversationMessage> {\n const plainTitle =\n content.replace(/<[^>]+>/g, '').trim() ||\n (await this.translationService.translateAsync('@conversation:terms.common.comment'));\n const payload: AXTextPayload = { type: 'text', text: content };\n await this.messageService.update(commentId, {\n name: plainTitle,\n title: plainTitle,\n payload,\n editedAt: new Date(),\n });\n return this.requireMessage(commentId);\n }\n\n async deleteComment(commentId: string): Promise<boolean> {\n await this.messageService.delete(commentId);\n return true;\n }\n\n async updateReactions(commentId: string, reactions: AXReaction[]): Promise<AXMConversationMessage> {\n await this.messageService.update(commentId, { reactions });\n return this.requireMessage(commentId);\n }\n\n async getReactions(commentId: string): Promise<AXReaction[]> {\n const comment = await this.requireMessage(commentId);\n return comment.reactions || [];\n }\n\n async pinComment(commentId: string, pinned: boolean): Promise<AXMConversationMessage> {\n await this.messageService.update(commentId, { pinned });\n return this.requireMessage(commentId);\n }\n\n private async requireRoom(id: string): Promise<AXMConversationRoom> {\n const room = await this.roomService.byKey(id);\n if (!room) {\n throw new Error(`Room ${id} not found`);\n }\n return room;\n }\n\n private async requireMessage(id: string): Promise<AXMConversationMessage> {\n const message = await this.messageService.byKey(id);\n if (!message) {\n throw new Error(`Message ${id} not found`);\n }\n return message;\n }\n}\n\nexport { axmExtractTextFromPayload };\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 { AXMSecurityManagementUsersEntityModel } from '@acorex/modules/security-management';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\n\nimport { AXMCommentEntityData } from '../../contracts';\nimport { AXMComment, AXMCommentThread } from './comment.type';\nimport { AXMCommentServiceImpl } from './comment.service';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXMCommentRealtimeService } from './comment-realtime.service';\nimport { AXPUserReference } from '@acorex/platform/contracts';\nimport {\n AXM_COMMENT_LIKE_EMOJI,\n AXMConversationMessage,\n AXMConversationRoom,\n AXReaction,\n} from '../../entities';\n\n//#region ---- Comment Management Service ----\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXMCommentManagementService {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly commentImplService = inject(AXMCommentServiceImpl);\n private readonly sessionService = inject(AXPSessionService);\n private readonly usersService = this.entityService\n .withEntity('SecurityManagement', 'User')\n .data<string, AXMSecurityManagementUsersEntityModel>();\n private readonly realtimeService = inject(AXMCommentRealtimeService);\n\n //#endregion\n\n //#region ---- User helpers ----\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 const user = await this.usersService.byKey(userId);\n if (!user) {\n throw new Error(`User with ID ${userId} not found`);\n }\n return {\n id: userId,\n type: 'user',\n fullName: user.displayName,\n username: user.username,\n };\n }\n\n //#endregion\n\n //#region ---- Formatting ----\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 const parentId = comment.replyTo?.id;\n if (parentId && commentMap.has(parentId)) {\n const parent = commentMap.get(parentId)!;\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 //#endregion\n\n //#region ---- Thread operations ----\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 //#endregion\n\n //#region ---- Comment operations ----\n\n async addComment(\n threadId: string,\n content: string,\n parentCommentId?: string,\n contentType = '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 = '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 //#endregion\n\n //#region ---- Reactions ----\n\n async addReaction(commentId: string, emoji: string): 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.userId === author.id && r.emoji === emoji)) {\n return this.formatComment(comment);\n }\n\n const updatedReactions: AXReaction[] = [\n ...reactions,\n { emoji, userId: author.id, timestamp: new Date() },\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 async removeReaction(commentId: string, emoji: string): Promise<AXMComment> {\n const author = this.getCurrentUser();\n const comment = await this.commentImplService.getComment(commentId);\n const updatedReactions = (comment.reactions || []).filter(\n (r) => !(r.userId === author.id && r.emoji === emoji),\n );\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<AXReaction[]> {\n return this.commentImplService.getReactions(commentId);\n }\n\n likeComment(commentId: string): Promise<AXMComment> {\n return this.addReaction(commentId, AXM_COMMENT_LIKE_EMOJI);\n }\n\n unlikeComment(commentId: string): Promise<AXMComment> {\n return this.removeReaction(commentId, AXM_COMMENT_LIKE_EMOJI);\n }\n\n //#endregion\n\n //#region ---- Pin ----\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 //#endregion\n}\n\n//#endregion\n","import { AXMNotificationItem } from '@acorex/modules/notification-management';\nimport { AXPUserReference } from '@acorex/platform/contracts';\nimport { AXMComment, AXMCommentThread } from './comment.type';\nimport { axmExtractTextFromPayload } from './comment-payload.util';\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: axmExtractTextFromPayload(comment.payload),\n sender: { id: comment.senderId, type: 'user' },\n receiver: currentUser,\n content: { content: axmExtractTextFromPayload(comment.payload), contentType: 'text' },\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/contracts';\n\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 { AXM_COMMENT_LIKE_EMOJI } from '../../entities/message/message.types';\nimport { AXMCommentManagementService } from './comment-management.service';\nimport { axmExtractTextFromPayload } from './comment-payload.util';\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(axmExtractTextFromPayload(target.payload));\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 mention = `<strong><a data-id=\"${reply.senderId}\">@${userName || reply.senderId}</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.userId === user.id && r.emoji === AXM_COMMENT_LIKE_EMOJI);\n }\n\n protected getReactionsCount(comment: AXMComment): number {\n return (comment.reactions || []).filter((r) => r.emoji === AXM_COMMENT_LIKE_EMOJI).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.replyTo?.id) {\n this.expandReplies(comment.replyTo.id);\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.senderId !== 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 const parentId = comment.replyTo?.id;\n if (parentId) {\n this.expandReplies(parentId);\n this.comments.update((comments) =>\n comments.map((c) => {\n if (c.id === parentId) {\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 || []), { emoji: AXM_COMMENT_LIKE_EMOJI, userId: user.id, timestamp: new Date() }]\n : (c.reactions || []).filter((r) => r.userId !== user.id || r.emoji !== AXM_COMMENT_LIKE_EMOJI);\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 protected getCommentText(comment: AXMComment): string {\n return axmExtractTextFromPayload(comment.payload);\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.senderId\" ngProjectAs=\"'ax-avatar'\"></axp-user-avatar>\n <ax-title>{{ user.title() }}</ax-title>\n <ax-comment-date>{{ comment.timestamp | 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.title())\"\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(getCommentText(comment))\"></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.title())\"\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.senderId\"\n ngProjectAs=\"'ax-avatar'\"\n ></axp-user-avatar>\n <ax-title>{{ user2.title() }}</ax-title>\n <ax-comment-date>{{ reply.timestamp | 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.title())\"\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(getCommentText(reply))\"></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.title())\"\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(getCommentText(activeReplyComment()!))\n : sanitizeHtml(getCommentText(activeEditComment()!))\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\", { pipes: [\"translate\"] }) }}',\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\", { pipes: [\"translate\"] }) }}',\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/contracts';\n\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","//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { ChangeDetectionStrategy, Component, ElementRef, inject, viewChild, ViewEncapsulation } from '@angular/core';\nimport { AXMMiniChatPanelService } from './mini-chat-panel.service';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Root header slot that toggles the inbox mini chat overlay (AI-assist conversations only).\n */\n@Component({\n selector: 'axm-mini-chat-header-slot',\n templateUrl: './mini-chat-header-slot.component.html',\n styleUrls: ['./mini-chat-header-slot.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXButtonModule, AXDecoratorModule],\n})\nexport class AXMMiniChatHeaderSlotComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly panelService = inject(AXMMiniChatPanelService);\n\n //#endregion\n\n //#region ---- View References ----\n\n private readonly chatButtonRef = viewChild('chatButton', { read: ElementRef<HTMLElement> });\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n protected onToggleClick(): void {\n const anchor = this.chatButtonRef()?.nativeElement;\n\n this.panelService.toggleInbox({\n ...(anchor\n ? {\n anchor,\n placement: 'bottom-end' as const,\n offsetX: 0,\n offsetY: 8,\n autoFlip: true,\n }\n : {}),\n });\n }\n\n //#endregion\n}\n\n//#endregion\n","<ax-button class=\"ax-relative\" color=\"primary\" #chatButton (onClick)=\"onToggleClick()\">\n <ax-icon>\n <i class=\"fa-regular fa-robot\"></i>\n </ax-icon>\n</ax-button>\n","//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { ChangeDetectionStrategy, Component, computed, ElementRef, inject, input, viewChild } from '@angular/core';\nimport { AXMMiniChatPanelService } from './mini-chat-panel.service';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Fixed bottom-right FAB that toggles the entity mini chat overlay via {@link AXMMiniChatPanelService}.\n * Reopens the last conversation for the entity; pass {@link placement} to control popover side.\n */\n@Component({\n selector: 'axm-mini-chat-launcher',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXButtonModule, AXDecoratorModule],\n template: `\n <ax-button\n #fabButton\n class=\"axm-mini-chat-launcher ax-fixed ax-bottom-6 ax-end-6 ax-z-50 ax-rounded-full ax-shadow-lg\"\n color=\"primary\"\n [iconOnly]=\"true\"\n (onClick)=\"onFabClick()\"\n aria-label=\"Toggle entity chat\"\n >\n <ax-prefix>\n <ax-icon [icon]=\"isOpen() ? 'fa-light fa-xmark' : 'fa-light fa-comments'\"></ax-icon>\n </ax-prefix>\n </ax-button>\n `,\n styles: `\n :host {\n display: contents;\n }\n `,\n})\nexport class AXMMiniChatLauncherComponent {\n //#region ---- Services & Dependencies ----\n\n protected readonly panelService = inject(AXMMiniChatPanelService);\n\n protected readonly isOpen = computed(() => this.panelService.panelOpen());\n\n //#endregion\n\n //#region ---- Inputs ----\n\n readonly entityId = input.required<string>();\n readonly entityType = input.required<string>();\n readonly assistId = input<string | undefined>(undefined);\n readonly title = input<string | undefined>(undefined);\n /** Placement relative to the FAB when no custom {@link position} is set. Default: `top-end`. */\n readonly placement = input<'top-end' | 'top-start' | 'bottom-end' | 'bottom-start' | 'top' | 'bottom'>('top-end');\n readonly offsetX = input(8);\n readonly offsetY = input(0);\n\n //#endregion\n\n //#region ---- View References ----\n\n private readonly fabRef = viewChild('fabButton', { read: ElementRef<HTMLElement> });\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n protected onFabClick(): void {\n const anchor = this.fabRef()?.nativeElement;\n\n this.panelService.toggle({\n entityId: this.entityId(),\n entityType: this.entityType(),\n assistId: this.assistId(),\n title: this.title(),\n ...(anchor\n ? {\n anchor,\n placement: this.placement(),\n offsetX: this.offsetX(),\n offsetY: this.offsetY(),\n autoFlip: true,\n }\n : {}),\n });\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXClickEvent } from '@acorex/cdk/common';\nimport { AXConversationService } from '@acorex/components/conversation2';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport {\n AXMNotificationItem,\n AXP_NOTIFICATION_DEFINITION_PROVIDER,\n AXPNotificationContent,\n AXPNotificationDefinitionProvider,\n} from '@acorex/modules/notification-management';\nimport { AXPExecuteCommand } from '@acorex/platform/contracts';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Injector, input, output, Provider } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\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\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(AXConversationService);\n const activatedRoute = this.injector.get(ActivatedRoute);\n const conversationId = item.data?.['conversationId'] as string;\n\n if (!conversationId) {\n console.error('Conversation 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.markAsRead(conversationId);\n break;\n case 'go-to-chat':\n await chatService.markAsRead(conversationId);\n router.navigate([app, 'chat', conversationId]);\n break;\n case 'click':\n await chatService.markAsRead(conversationId);\n router.navigate([app, 'chat', conversationId]);\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/contracts';\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 } from '@acorex/platform/auth';\nimport { AXP_MENU_PROVIDER, AXP_PROTECTED_ROUTE_GUARDS, AXP_SEARCH_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER } from '@acorex/platform/common';\nimport { AXP_MODULE_MANIFEST_PROVIDER, AXPComponentSlotModule } 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 { provideCommandSetups } from '@acorex/platform/runtime';\nimport { AXPRootLayoutComponent } from '@acorex/platform/themes/default';\nimport { DatePipe } from '@angular/common';\nimport { importProvidersFrom, NgModule } from '@angular/core';\nimport { RouterModule, Routes, ROUTES } from '@angular/router';\nimport { AXMConversationModuleEntityProvider } from './entity.provider';\nimport {\n CONVERSATION_AFTER_MESSAGE_SENT_COMMAND,\n CONVERSATION_EMIT_TYPING_INDICATOR_COMMAND,\n CONVERSATION_MARK_CONVERSATION_UNREAD_COMMAND,\n CONVERSATION_RETRY_ASSIST_RESPONSE_COMMAND,\n CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND,\n CONVERSATION_START_ASSIST_CHAT_COMMAND,\n CONVERSATION_SYNC_READ_STATE_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 { ConversationManifest } from './manifest';\nimport { AXMMenuProvider } from './menu.provider';\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\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';\n\nimport { AXMCommentPopupStartAction, AXMCommentPopupWorkflow, AXMCommentRealtimeService, AXMCommentRealtimeServiceImpl, AXMCommentService, AXMCommentServiceImpl } from './features';\nimport { AXM_CHAT_CONVERSATION2_PROVIDERS } from './features/chat/chat-conversation.providers';\nimport { AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_HANDLERS } from './features/background-operation';\nimport { AXM_CHAT_NOTIFICATION_PROVIDERS } from './features/chat/chat-notification.provider';\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';\nimport { AXMMiniChatHeaderSlotComponent } from './features/mini-chat/mini-chat-header-slot.component';\nfunction routesFactory(): Routes {\n const routes: Routes = [\n {\n path: ':app/chat',\n canActivate: [...AXP_PROTECTED_ROUTE_GUARDS],\n data: { tab: true, rootLayout: true },\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 // Reuse the chat shell when switching `:id` so conversation2 can restore per-conversation composer\n // drafts without destroying AXMChatComponent (selectConversation reloads messages).\n data: { reuse: true },\n },\n ],\n },\n {\n path: ':app/comments/t/:refrenceType/i/:refrenceId/s/:subject',\n title: '@conversation:comments.feature.title',\n canActivate: [...AXP_PROTECTED_ROUTE_GUARDS],\n data: { rootLayout: true },\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: [...AXP_PROTECTED_ROUTE_GUARDS],\n data: { rootLayout: true },\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 AXPComponentSlotModule.forChild({\n 'root-header-end': [\n {\n priority: 55,\n name: 'conversation-mini-chat',\n component: AXMMiniChatHeaderSlotComponent,\n },\n ],\n }),\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 ],\n exports: [\n // Modules\n RouterModule,\n ],\n providers: [\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_CONVERSATION_ASSIST_BACKGROUND_OPERATION_HANDLERS,\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 key: CONVERSATION_AFTER_MESSAGE_SENT_COMMAND,\n command: () =>\n import('./features/commands/after-message-sent.command').then((m) => m.AXMConversationAfterMessageSentCommand),\n },\n {\n key: CONVERSATION_RETRY_ASSIST_RESPONSE_COMMAND,\n command: () =>\n import('./features/commands/retry-assist-response.command').then(\n (m) => m.AXMConversationRetryAssistResponseCommand,\n ),\n },\n {\n key: CONVERSATION_SYNC_READ_STATE_COMMAND,\n command: () =>\n import('./features/commands/sync-read-state.command').then((m) => m.AXMConversationSyncReadStateCommand),\n },\n {\n key: CONVERSATION_MARK_CONVERSATION_UNREAD_COMMAND,\n command: () =>\n import('./features/commands/mark-conversation-unread.command').then(\n (m) => m.AXMConversationMarkConversationUnreadCommand,\n ),\n },\n {\n key: CONVERSATION_EMIT_TYPING_INDICATOR_COMMAND,\n command: () =>\n import('./features/commands/emit-typing-indicator.command').then(\n (m) => m.AXMConversationEmitTypingIndicatorCommand,\n ),\n },\n ]),\n ],\n})\nexport class AXMConversationModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["hiddenStorageProp","filterable","axmConversationHasAiChat","RootConfig","i2","i1","i4","i6","isRecord","i3","i5","AiManagementRootConfig","i7","i8","i10"],"mappings":"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"}