@acorex/modules 21.0.0-next.70 → 21.0.0-next.72

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 (448) hide show
  1. package/fesm2022/acorex-modules-ai-management.mjs +108 -16
  2. package/fesm2022/acorex-modules-ai-management.mjs.map +1 -1
  3. package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-IHgQ8RVH.mjs → acorex-modules-assessment-management-acorex-modules-assessment-management-D7bHX4-0.mjs} +665 -496
  4. package/fesm2022/acorex-modules-assessment-management-acorex-modules-assessment-management-D7bHX4-0.mjs.map +1 -0
  5. package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-B95yBXgi.mjs → acorex-modules-assessment-management-assessment-case.entity-Cpbj5sCP.mjs} +2 -2
  6. package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-B95yBXgi.mjs.map → acorex-modules-assessment-management-assessment-case.entity-Cpbj5sCP.mjs.map} +1 -1
  7. package/fesm2022/{acorex-modules-assessment-management-assessment-session-answers-view.util-Jhy94fgV.mjs → acorex-modules-assessment-management-assessment-session-answers-view.util-ALsxM0ww.mjs} +2 -2
  8. package/fesm2022/{acorex-modules-assessment-management-assessment-session-answers-view.util-Jhy94fgV.mjs.map → acorex-modules-assessment-management-assessment-session-answers-view.util-ALsxM0ww.mjs.map} +1 -1
  9. package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-DBhBxqh1.mjs → acorex-modules-assessment-management-assessment-session.entity-CMW7wsoN.mjs} +2 -2
  10. package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-DBhBxqh1.mjs.map → acorex-modules-assessment-management-assessment-session.entity-CMW7wsoN.mjs.map} +1 -1
  11. package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-nkFpnKE2.mjs → acorex-modules-assessment-management-fill-assessment-session.command-C-dGKO7p.mjs} +3 -3
  12. package/fesm2022/acorex-modules-assessment-management-fill-assessment-session.command-C-dGKO7p.mjs.map +1 -0
  13. package/fesm2022/{acorex-modules-assessment-management-preview-question.command-B29oj3WB.mjs → acorex-modules-assessment-management-preview-question.command-CBewUZSF.mjs} +2 -2
  14. package/fesm2022/{acorex-modules-assessment-management-preview-question.command-B29oj3WB.mjs.map → acorex-modules-assessment-management-preview-question.command-CBewUZSF.mjs.map} +1 -1
  15. package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-Sd4gRHo5.mjs → acorex-modules-assessment-management-preview-questionnaire.command-DlwBZ7mO.mjs} +18 -9
  16. package/fesm2022/acorex-modules-assessment-management-preview-questionnaire.command-DlwBZ7mO.mjs.map +1 -0
  17. package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-BCtQO_j7.mjs → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-BEhxeR8A.mjs} +2 -2
  18. package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-BCtQO_j7.mjs.map → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-BEhxeR8A.mjs.map} +1 -1
  19. package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-RLIfWCzq.mjs → acorex-modules-assessment-management-question-bank-item.entity-CfCWKqN5.mjs} +3 -2
  20. package/fesm2022/acorex-modules-assessment-management-question-bank-item.entity-CfCWKqN5.mjs.map +1 -0
  21. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-B8LMKqVO.mjs → acorex-modules-assessment-management-questionnaire-viewer-popup.component-C03wF6Oy.mjs} +19 -5
  22. package/fesm2022/acorex-modules-assessment-management-questionnaire-viewer-popup.component-C03wF6Oy.mjs.map +1 -0
  23. package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-CZBnfCYE.mjs → acorex-modules-assessment-management-questionnaire.entity-CPMGkhGu.mjs} +4 -2
  24. package/fesm2022/acorex-modules-assessment-management-questionnaire.entity-CPMGkhGu.mjs.map +1 -0
  25. package/fesm2022/{acorex-modules-assessment-management-review-assessment-session.command-hB_LFUSE.mjs → acorex-modules-assessment-management-review-assessment-session.command-XK3IK3MH.mjs} +3 -3
  26. package/fesm2022/{acorex-modules-assessment-management-review-assessment-session.command-hB_LFUSE.mjs.map → acorex-modules-assessment-management-review-assessment-session.command-XK3IK3MH.mjs.map} +1 -1
  27. package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-BN-nYHha.mjs → acorex-modules-assessment-management-view-session-answers.command-BPoF0v9C.mjs} +3 -3
  28. package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-BN-nYHha.mjs.map → acorex-modules-assessment-management-view-session-answers.command-BPoF0v9C.mjs.map} +1 -1
  29. package/fesm2022/acorex-modules-assessment-management.mjs +1 -1
  30. package/fesm2022/{acorex-modules-asset-management-acorex-modules-asset-management-BdiaXlkx.mjs → acorex-modules-asset-management-acorex-modules-asset-management-BCs0QS-r.mjs} +11 -8
  31. package/fesm2022/{acorex-modules-asset-management-acorex-modules-asset-management-BdiaXlkx.mjs.map → acorex-modules-asset-management-acorex-modules-asset-management-BCs0QS-r.mjs.map} +1 -1
  32. package/fesm2022/{acorex-modules-asset-management-asset-system-assignment.entity-Bf9nJTkD.mjs → acorex-modules-asset-management-asset-system-assignment.entity-B0sf4MzL.mjs} +2 -2
  33. package/fesm2022/{acorex-modules-asset-management-asset-system-assignment.entity-Bf9nJTkD.mjs.map → acorex-modules-asset-management-asset-system-assignment.entity-B0sf4MzL.mjs.map} +1 -1
  34. package/fesm2022/{acorex-modules-asset-management-asset-system-type.entity-Cbzu3bqC.mjs → acorex-modules-asset-management-asset-system-type.entity-Cpcgr3KS.mjs} +2 -2
  35. package/fesm2022/{acorex-modules-asset-management-asset-system-type.entity-Cbzu3bqC.mjs.map → acorex-modules-asset-management-asset-system-type.entity-Cpcgr3KS.mjs.map} +1 -1
  36. package/fesm2022/{acorex-modules-asset-management-asset-system.entity-DA7dO3eE.mjs → acorex-modules-asset-management-asset-system.entity-CEuEjyuQ.mjs} +2 -2
  37. package/fesm2022/{acorex-modules-asset-management-asset-system.entity-DA7dO3eE.mjs.map → acorex-modules-asset-management-asset-system.entity-CEuEjyuQ.mjs.map} +1 -1
  38. package/fesm2022/{acorex-modules-asset-management-asset-type-section-component.entity-C9B-TUQD.mjs → acorex-modules-asset-management-asset-type-section-component.entity-CwaPrUlk.mjs} +2 -2
  39. package/fesm2022/{acorex-modules-asset-management-asset-type-section-component.entity-C9B-TUQD.mjs.map → acorex-modules-asset-management-asset-type-section-component.entity-CwaPrUlk.mjs.map} +1 -1
  40. package/fesm2022/{acorex-modules-asset-management-asset-type-section.entity-BNz1Zfox.mjs → acorex-modules-asset-management-asset-type-section.entity-CK0dAIU4.mjs} +2 -2
  41. package/fesm2022/{acorex-modules-asset-management-asset-type-section.entity-BNz1Zfox.mjs.map → acorex-modules-asset-management-asset-type-section.entity-CK0dAIU4.mjs.map} +1 -1
  42. package/fesm2022/{acorex-modules-asset-management-asset-type.entity-D_bBxBKI.mjs → acorex-modules-asset-management-asset-type.entity-DexywYoA.mjs} +2 -2
  43. package/fesm2022/{acorex-modules-asset-management-asset-type.entity-D_bBxBKI.mjs.map → acorex-modules-asset-management-asset-type.entity-DexywYoA.mjs.map} +1 -1
  44. package/fesm2022/{acorex-modules-asset-management-asset.entity-Cf_H7edH.mjs → acorex-modules-asset-management-asset.entity-BNj3kuHC.mjs} +2 -2
  45. package/fesm2022/{acorex-modules-asset-management-asset.entity-Cf_H7edH.mjs.map → acorex-modules-asset-management-asset.entity-BNj3kuHC.mjs.map} +1 -1
  46. package/fesm2022/acorex-modules-asset-management.mjs +1 -1
  47. package/fesm2022/acorex-modules-auth-acorex-modules-auth-JEkso4J7.mjs +1580 -0
  48. package/fesm2022/acorex-modules-auth-acorex-modules-auth-JEkso4J7.mjs.map +1 -0
  49. package/fesm2022/{acorex-modules-auth-app-chooser.component-DnmLfX5x.mjs → acorex-modules-auth-app-chooser.component-MjGWaBI0.mjs} +5 -6
  50. package/fesm2022/acorex-modules-auth-app-chooser.component-MjGWaBI0.mjs.map +1 -0
  51. package/fesm2022/acorex-modules-auth-change-password.command-Ctyw3WfE.mjs +32 -0
  52. package/fesm2022/acorex-modules-auth-change-password.command-Ctyw3WfE.mjs.map +1 -0
  53. package/fesm2022/acorex-modules-auth-change-photo.command-_vxTFH0X.mjs +32 -0
  54. package/fesm2022/acorex-modules-auth-change-photo.command-_vxTFH0X.mjs.map +1 -0
  55. package/fesm2022/acorex-modules-auth-edit-signature.command-CcTJJwAX.mjs +32 -0
  56. package/fesm2022/acorex-modules-auth-edit-signature.command-CcTJJwAX.mjs.map +1 -0
  57. package/fesm2022/{acorex-modules-auth-login.module-D1-POhQk.mjs → acorex-modules-auth-login.module-FJxkiTeX.mjs} +4 -4
  58. package/fesm2022/{acorex-modules-auth-login.module-D1-POhQk.mjs.map → acorex-modules-auth-login.module-FJxkiTeX.mjs.map} +1 -1
  59. package/fesm2022/acorex-modules-auth-master.layout-B4Vpqg2F.mjs +25 -0
  60. package/fesm2022/acorex-modules-auth-master.layout-B4Vpqg2F.mjs.map +1 -0
  61. package/fesm2022/{acorex-modules-auth-oauth-callback.component-BhfFPeWT.mjs → acorex-modules-auth-oauth-callback.component-It5tkYuf.mjs} +2 -2
  62. package/fesm2022/{acorex-modules-auth-oauth-callback.component-BhfFPeWT.mjs.map → acorex-modules-auth-oauth-callback.component-It5tkYuf.mjs.map} +1 -1
  63. package/fesm2022/{acorex-modules-auth-user-sessions.component-gJSHI_eh.mjs → acorex-modules-auth-open-sessions.command-Qik0eKUR.mjs} +32 -7
  64. package/fesm2022/acorex-modules-auth-open-sessions.command-Qik0eKUR.mjs.map +1 -0
  65. package/fesm2022/{acorex-modules-auth-password.component-BMVSHYy7.mjs → acorex-modules-auth-password.component-B2BIaXZ_.mjs} +2 -2
  66. package/fesm2022/{acorex-modules-auth-password.component-BMVSHYy7.mjs.map → acorex-modules-auth-password.component-B2BIaXZ_.mjs.map} +1 -1
  67. package/fesm2022/{acorex-modules-auth-password.component-Cm8DsDvu.mjs → acorex-modules-auth-password.component-BRnlp4j1.mjs} +6 -6
  68. package/fesm2022/{acorex-modules-auth-password.component-Cm8DsDvu.mjs.map → acorex-modules-auth-password.component-BRnlp4j1.mjs.map} +1 -1
  69. package/fesm2022/acorex-modules-auth-profile-activity-chart.component-CmtkTEI5.mjs +177 -0
  70. package/fesm2022/acorex-modules-auth-profile-activity-chart.component-CmtkTEI5.mjs.map +1 -0
  71. package/fesm2022/acorex-modules-auth-profile-coming-soon.command-DBbFbzAx.mjs +31 -0
  72. package/fesm2022/acorex-modules-auth-profile-coming-soon.command-DBbFbzAx.mjs.map +1 -0
  73. package/fesm2022/acorex-modules-auth-profile-delete-account-danger-zone.component-62K4A_lM.mjs +78 -0
  74. package/fesm2022/acorex-modules-auth-profile-delete-account-danger-zone.component-62K4A_lM.mjs.map +1 -0
  75. package/fesm2022/acorex-modules-auth-profile-page-component.provider-Dz9yFSnA.mjs +27 -0
  76. package/fesm2022/acorex-modules-auth-profile-page-component.provider-Dz9yFSnA.mjs.map +1 -0
  77. package/fesm2022/acorex-modules-auth-profile-page.component-BGkPr1_o.mjs +370 -0
  78. package/fesm2022/acorex-modules-auth-profile-page.component-BGkPr1_o.mjs.map +1 -0
  79. package/fesm2022/{acorex-modules-auth-routes-B85OzgW1.mjs → acorex-modules-auth-routes-D6PLdcTC.mjs} +2 -2
  80. package/fesm2022/{acorex-modules-auth-routes-B85OzgW1.mjs.map → acorex-modules-auth-routes-D6PLdcTC.mjs.map} +1 -1
  81. package/fesm2022/acorex-modules-auth-signout-command-IUSkq50M.mjs +24 -0
  82. package/fesm2022/acorex-modules-auth-signout-command-IUSkq50M.mjs.map +1 -0
  83. package/fesm2022/{acorex-modules-auth-tenant-chooser.component-D6_rL2WP.mjs → acorex-modules-auth-tenant-chooser.component-qGfNSQ6H.mjs} +2 -2
  84. package/fesm2022/{acorex-modules-auth-tenant-chooser.component-D6_rL2WP.mjs.map → acorex-modules-auth-tenant-chooser.component-qGfNSQ6H.mjs.map} +1 -1
  85. package/fesm2022/{acorex-modules-auth-two-factor.module-DfyDQIw-.mjs → acorex-modules-auth-two-factor.module-DcvqZOIq.mjs} +2 -2
  86. package/fesm2022/{acorex-modules-auth-two-factor.module-DfyDQIw-.mjs.map → acorex-modules-auth-two-factor.module-DcvqZOIq.mjs.map} +1 -1
  87. package/fesm2022/acorex-modules-auth.mjs +1 -1
  88. package/fesm2022/acorex-modules-business-core.mjs +2 -2
  89. package/fesm2022/acorex-modules-business-core.mjs.map +1 -1
  90. package/fesm2022/acorex-modules-calendar-management-datasource.provider-CnxTy81J.mjs +225 -0
  91. package/fesm2022/acorex-modules-calendar-management-datasource.provider-CnxTy81J.mjs.map +1 -0
  92. package/fesm2022/acorex-modules-calendar-management.mjs +481 -392
  93. package/fesm2022/acorex-modules-calendar-management.mjs.map +1 -1
  94. package/fesm2022/acorex-modules-common.mjs +524 -30
  95. package/fesm2022/acorex-modules-common.mjs.map +1 -1
  96. package/fesm2022/{acorex-modules-content-management-acorex-modules-content-management-txpooXrE.mjs → acorex-modules-content-management-acorex-modules-content-management-Bc_tCoHa.mjs} +6 -6
  97. package/fesm2022/acorex-modules-content-management-acorex-modules-content-management-Bc_tCoHa.mjs.map +1 -0
  98. package/fesm2022/{acorex-modules-content-management-permission-definition.provider-D9woYm2m.mjs → acorex-modules-content-management-permission-definition.provider-2-_i1Kxd.mjs} +2 -2
  99. package/fesm2022/{acorex-modules-content-management-permission-definition.provider-D9woYm2m.mjs.map → acorex-modules-content-management-permission-definition.provider-2-_i1Kxd.mjs.map} +1 -1
  100. package/fesm2022/{acorex-modules-content-management-template-content-editor-widget-edit.component-CQa1h31v.mjs → acorex-modules-content-management-template-content-editor-widget-edit.component-BdNwhaJ8.mjs} +2 -2
  101. package/fesm2022/{acorex-modules-content-management-template-content-editor-widget-edit.component-CQa1h31v.mjs.map → acorex-modules-content-management-template-content-editor-widget-edit.component-BdNwhaJ8.mjs.map} +1 -1
  102. package/fesm2022/{acorex-modules-content-management-template-content-editor-widget-view.component-DzM4oMNV.mjs → acorex-modules-content-management-template-content-editor-widget-view.component-Cwnqyt0U.mjs} +2 -2
  103. package/fesm2022/{acorex-modules-content-management-template-content-editor-widget-view.component-DzM4oMNV.mjs.map → acorex-modules-content-management-template-content-editor-widget-view.component-Cwnqyt0U.mjs.map} +1 -1
  104. package/fesm2022/acorex-modules-content-management.mjs +1 -1
  105. package/fesm2022/{acorex-modules-conversation-acorex-modules-conversation-DYW31fEm.mjs → acorex-modules-conversation-acorex-modules-conversation-BX09r8Xj.mjs} +801 -237
  106. package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-BX09r8Xj.mjs.map +1 -0
  107. package/fesm2022/acorex-modules-conversation-assist-delegated-agent-detail-popup.component-hMiSfvL2.mjs +329 -0
  108. package/fesm2022/acorex-modules-conversation-assist-delegated-agent-detail-popup.component-hMiSfvL2.mjs.map +1 -0
  109. package/fesm2022/{acorex-modules-conversation-comments-page.component-CNqL-HdS.mjs → acorex-modules-conversation-comments-page.component-BJu6CoNR.mjs} +18 -6
  110. package/fesm2022/acorex-modules-conversation-comments-page.component-BJu6CoNR.mjs.map +1 -0
  111. package/fesm2022/{acorex-modules-conversation-send-assist-chat-message.command-CuYYEqhb.mjs → acorex-modules-conversation-send-assist-chat-message.command-B471NQRh.mjs} +2 -2
  112. package/fesm2022/{acorex-modules-conversation-send-assist-chat-message.command-CuYYEqhb.mjs.map → acorex-modules-conversation-send-assist-chat-message.command-B471NQRh.mjs.map} +1 -1
  113. package/fesm2022/{acorex-modules-conversation-start-assist-chat.command-BKwrZJDs.mjs → acorex-modules-conversation-start-assist-chat.command-CasClVbR.mjs} +2 -2
  114. package/fesm2022/{acorex-modules-conversation-start-assist-chat.command-BKwrZJDs.mjs.map → acorex-modules-conversation-start-assist-chat.command-CasClVbR.mjs.map} +1 -1
  115. package/fesm2022/acorex-modules-conversation.mjs +1 -1
  116. package/fesm2022/{acorex-modules-dashboard-management-acorex-modules-dashboard-management-kk0CINL1.mjs → acorex-modules-dashboard-management-acorex-modules-dashboard-management-9MoalNjW.mjs} +53 -21
  117. package/fesm2022/acorex-modules-dashboard-management-acorex-modules-dashboard-management-9MoalNjW.mjs.map +1 -0
  118. package/fesm2022/{acorex-modules-dashboard-management-index-Bhm8mAON.mjs → acorex-modules-dashboard-management-index-Dsu3Yw8O.mjs} +2 -2
  119. package/fesm2022/{acorex-modules-dashboard-management-index-Bhm8mAON.mjs.map → acorex-modules-dashboard-management-index-Dsu3Yw8O.mjs.map} +1 -1
  120. package/fesm2022/acorex-modules-dashboard-management.mjs +1 -1
  121. package/fesm2022/{acorex-modules-data-management-index-DEm_BsbE.mjs → acorex-modules-data-management-index-CxVSgxTM.mjs} +4 -1
  122. package/fesm2022/acorex-modules-data-management-index-CxVSgxTM.mjs.map +1 -0
  123. package/fesm2022/acorex-modules-data-management.mjs +2 -2
  124. package/fesm2022/acorex-modules-document-management.mjs +7 -4
  125. package/fesm2022/acorex-modules-document-management.mjs.map +1 -1
  126. package/fesm2022/acorex-modules-financial-core.mjs +7 -7
  127. package/fesm2022/acorex-modules-financial-core.mjs.map +1 -1
  128. package/fesm2022/{acorex-modules-human-capital-management-acorex-modules-human-capital-management-DrKulwY-.mjs → acorex-modules-human-capital-management-acorex-modules-human-capital-management-Cb7_mEJt.mjs} +237 -52
  129. package/fesm2022/acorex-modules-human-capital-management-acorex-modules-human-capital-management-Cb7_mEJt.mjs.map +1 -0
  130. package/fesm2022/{acorex-modules-human-capital-management-approve-leave-request.command-TavX6h7z.mjs → acorex-modules-human-capital-management-approve-leave-request.command-wO2u1IKg.mjs} +2 -2
  131. package/fesm2022/{acorex-modules-human-capital-management-approve-leave-request.command-TavX6h7z.mjs.map → acorex-modules-human-capital-management-approve-leave-request.command-wO2u1IKg.mjs.map} +1 -1
  132. package/fesm2022/{acorex-modules-human-capital-management-assign-position-assignment.command-ZEmi88vf.mjs → acorex-modules-human-capital-management-assign-position-assignment.command-BDesaehJ.mjs} +2 -2
  133. package/fesm2022/{acorex-modules-human-capital-management-assign-position-assignment.command-ZEmi88vf.mjs.map → acorex-modules-human-capital-management-assign-position-assignment.command-BDesaehJ.mjs.map} +1 -1
  134. package/fesm2022/{acorex-modules-human-capital-management-cancel-leave-request.command-DzIMYIhe.mjs → acorex-modules-human-capital-management-cancel-leave-request.command-D8u45bHk.mjs} +2 -2
  135. package/fesm2022/{acorex-modules-human-capital-management-cancel-leave-request.command-DzIMYIhe.mjs.map → acorex-modules-human-capital-management-cancel-leave-request.command-D8u45bHk.mjs.map} +1 -1
  136. package/fesm2022/{acorex-modules-human-capital-management-employee.entity-CrVU_3Jv.mjs → acorex-modules-human-capital-management-employee.entity-sq1G--OE.mjs} +22 -18
  137. package/fesm2022/acorex-modules-human-capital-management-employee.entity-sq1G--OE.mjs.map +1 -0
  138. package/fesm2022/{acorex-modules-human-capital-management-employment-type.entity-BeiaEsNZ.mjs → acorex-modules-human-capital-management-employment-type.entity-qgNm-AAZ.mjs} +2 -2
  139. package/fesm2022/{acorex-modules-human-capital-management-employment-type.entity-BeiaEsNZ.mjs.map → acorex-modules-human-capital-management-employment-type.entity-qgNm-AAZ.mjs.map} +1 -1
  140. package/fesm2022/{acorex-modules-human-capital-management-leave-request.entity-QeY6lcUY.mjs → acorex-modules-human-capital-management-leave-request.entity-DcdYnwyN.mjs} +19 -24
  141. package/fesm2022/acorex-modules-human-capital-management-leave-request.entity-DcdYnwyN.mjs.map +1 -0
  142. package/fesm2022/{acorex-modules-human-capital-management-leave-type.entity-D7B3adkZ.mjs → acorex-modules-human-capital-management-leave-type.entity-Dr5YHs8p.mjs} +10 -4
  143. package/fesm2022/acorex-modules-human-capital-management-leave-type.entity-Dr5YHs8p.mjs.map +1 -0
  144. package/fesm2022/{acorex-modules-human-capital-management-lifecycle-event-type.entity-Dim-8hT7.mjs → acorex-modules-human-capital-management-lifecycle-event-type.entity-Bni4vgt5.mjs} +19 -74
  145. package/fesm2022/acorex-modules-human-capital-management-lifecycle-event-type.entity-Bni4vgt5.mjs.map +1 -0
  146. package/fesm2022/{acorex-modules-human-capital-management-lifecycle-event.entity-3HtYOKrY.mjs → acorex-modules-human-capital-management-lifecycle-event.entity-ds4Iq82f.mjs} +6 -6
  147. package/fesm2022/acorex-modules-human-capital-management-lifecycle-event.entity-ds4Iq82f.mjs.map +1 -0
  148. package/fesm2022/{acorex-modules-human-capital-management-position-assignment.entity-Byxt921P.mjs → acorex-modules-human-capital-management-position-assignment.entity-CalDJQrD.mjs} +2 -2
  149. package/fesm2022/{acorex-modules-human-capital-management-position-assignment.entity-Byxt921P.mjs.map → acorex-modules-human-capital-management-position-assignment.entity-CalDJQrD.mjs.map} +1 -1
  150. package/fesm2022/{acorex-modules-human-capital-management-reject-leave-request.command-CAvjZTG9.mjs → acorex-modules-human-capital-management-reject-leave-request.command-CshyWVLH.mjs} +2 -2
  151. package/fesm2022/{acorex-modules-human-capital-management-reject-leave-request.command-CAvjZTG9.mjs.map → acorex-modules-human-capital-management-reject-leave-request.command-CshyWVLH.mjs.map} +1 -1
  152. package/fesm2022/{acorex-modules-human-capital-management-revoke-position-assignment.command-BeWrsQo8.mjs → acorex-modules-human-capital-management-revoke-position-assignment.command-BENxT4Qg.mjs} +2 -2
  153. package/fesm2022/{acorex-modules-human-capital-management-revoke-position-assignment.command-BeWrsQo8.mjs.map → acorex-modules-human-capital-management-revoke-position-assignment.command-BENxT4Qg.mjs.map} +1 -1
  154. package/fesm2022/acorex-modules-human-capital-management-start-leave-request-flow.command-DjkzwxHN.mjs +242 -0
  155. package/fesm2022/acorex-modules-human-capital-management-start-leave-request-flow.command-DjkzwxHN.mjs.map +1 -0
  156. package/fesm2022/{acorex-modules-human-capital-management-start-lifecycle-event-flow.command-Bz2SZcmm.mjs → acorex-modules-human-capital-management-start-lifecycle-event-flow.command-x8J2kneo.mjs} +9 -14
  157. package/fesm2022/acorex-modules-human-capital-management-start-lifecycle-event-flow.command-x8J2kneo.mjs.map +1 -0
  158. package/fesm2022/acorex-modules-human-capital-management.mjs +1 -1
  159. package/fesm2022/{acorex-modules-learning-management-course.entity-DUUgeikJ.mjs → acorex-modules-learning-management-course.entity-BG6TaQk4.mjs} +4 -4
  160. package/fesm2022/acorex-modules-learning-management-course.entity-BG6TaQk4.mjs.map +1 -0
  161. package/fesm2022/{acorex-modules-learning-management-enrollment.entity-CdJafrUh.mjs → acorex-modules-learning-management-enrollment.entity-DjpUDcLv.mjs} +5 -5
  162. package/fesm2022/acorex-modules-learning-management-enrollment.entity-DjpUDcLv.mjs.map +1 -0
  163. package/fesm2022/{acorex-modules-learning-management-learning-path.entity-Zo--bDto.mjs → acorex-modules-learning-management-learning-path.entity-C2S0VVeq.mjs} +2 -2
  164. package/fesm2022/acorex-modules-learning-management-learning-path.entity-C2S0VVeq.mjs.map +1 -0
  165. package/fesm2022/{acorex-modules-learning-management-skill.entity-VXkLbaD4.mjs → acorex-modules-learning-management-skill.entity-DAM-_nuT.mjs} +2 -2
  166. package/fesm2022/acorex-modules-learning-management-skill.entity-DAM-_nuT.mjs.map +1 -0
  167. package/fesm2022/{acorex-modules-learning-management-training.entity-C4KDv1uh.mjs → acorex-modules-learning-management-training.entity-THsY3DiM.mjs} +4 -4
  168. package/fesm2022/acorex-modules-learning-management-training.entity-THsY3DiM.mjs.map +1 -0
  169. package/fesm2022/acorex-modules-learning-management.mjs +5 -5
  170. package/fesm2022/{acorex-modules-locale-management-profiles-BOveGIcE.mjs → acorex-modules-locale-management-profiles-BYZa_Ti0.mjs} +23 -8
  171. package/fesm2022/acorex-modules-locale-management-profiles-BYZa_Ti0.mjs.map +1 -0
  172. package/fesm2022/acorex-modules-locale-management.mjs +31 -15
  173. package/fesm2022/acorex-modules-locale-management.mjs.map +1 -1
  174. package/fesm2022/acorex-modules-location-management.mjs +4 -4
  175. package/fesm2022/acorex-modules-location-management.mjs.map +1 -1
  176. package/fesm2022/{acorex-modules-maintenance-management-acorex-modules-maintenance-management-DiM2aFgg.mjs → acorex-modules-maintenance-management-acorex-modules-maintenance-management-Xyu3jpEh.mjs} +14 -14
  177. package/fesm2022/acorex-modules-maintenance-management-acorex-modules-maintenance-management-Xyu3jpEh.mjs.map +1 -0
  178. package/fesm2022/{acorex-modules-maintenance-management-failure-effect.entity-BCMeHmxS.mjs → acorex-modules-maintenance-management-failure-effect.entity-CYQ3ExC3.mjs} +2 -2
  179. package/fesm2022/{acorex-modules-maintenance-management-failure-effect.entity-BCMeHmxS.mjs.map → acorex-modules-maintenance-management-failure-effect.entity-CYQ3ExC3.mjs.map} +1 -1
  180. package/fesm2022/{acorex-modules-maintenance-management-failure-mode-asset-type.entity-ByBoVQ8D.mjs → acorex-modules-maintenance-management-failure-mode-asset-type.entity-Cz0tQkwZ.mjs} +2 -2
  181. package/fesm2022/{acorex-modules-maintenance-management-failure-mode-asset-type.entity-ByBoVQ8D.mjs.map → acorex-modules-maintenance-management-failure-mode-asset-type.entity-Cz0tQkwZ.mjs.map} +1 -1
  182. package/fesm2022/{acorex-modules-maintenance-management-failure-mode-mechanism.entity-BJs4KhkU.mjs → acorex-modules-maintenance-management-failure-mode-mechanism.entity-vqX88zIA.mjs} +2 -2
  183. package/fesm2022/{acorex-modules-maintenance-management-failure-mode-mechanism.entity-BJs4KhkU.mjs.map → acorex-modules-maintenance-management-failure-mode-mechanism.entity-vqX88zIA.mjs.map} +1 -1
  184. package/fesm2022/{acorex-modules-maintenance-management-failure-mode-solution.entity-rw24sQxb.mjs → acorex-modules-maintenance-management-failure-mode-solution.entity-CpefPKAY.mjs} +2 -2
  185. package/fesm2022/{acorex-modules-maintenance-management-failure-mode-solution.entity-rw24sQxb.mjs.map → acorex-modules-maintenance-management-failure-mode-solution.entity-CpefPKAY.mjs.map} +1 -1
  186. package/fesm2022/{acorex-modules-maintenance-management-failure-register-cause.entity-C_6sjW8z.mjs → acorex-modules-maintenance-management-failure-register-cause.entity-C1_4BQBR.mjs} +2 -2
  187. package/fesm2022/{acorex-modules-maintenance-management-failure-register-cause.entity-C_6sjW8z.mjs.map → acorex-modules-maintenance-management-failure-register-cause.entity-C1_4BQBR.mjs.map} +1 -1
  188. package/fesm2022/{acorex-modules-maintenance-management-failure-register-effect.entity-DCIAzSYQ.mjs → acorex-modules-maintenance-management-failure-register-effect.entity-BRssxEl6.mjs} +2 -2
  189. package/fesm2022/{acorex-modules-maintenance-management-failure-register-effect.entity-DCIAzSYQ.mjs.map → acorex-modules-maintenance-management-failure-register-effect.entity-BRssxEl6.mjs.map} +1 -1
  190. package/fesm2022/{acorex-modules-maintenance-management-failure-register-mechanism.entity-DlXr6A4i.mjs → acorex-modules-maintenance-management-failure-register-mechanism.entity-YyBWG00N.mjs} +2 -2
  191. package/fesm2022/{acorex-modules-maintenance-management-failure-register-mechanism.entity-DlXr6A4i.mjs.map → acorex-modules-maintenance-management-failure-register-mechanism.entity-YyBWG00N.mjs.map} +1 -1
  192. package/fesm2022/{acorex-modules-maintenance-management-failure-register.entity-C4J3um7j.mjs → acorex-modules-maintenance-management-failure-register.entity-CH-C6Q7m.mjs} +2 -2
  193. package/fesm2022/{acorex-modules-maintenance-management-failure-register.entity-C4J3um7j.mjs.map → acorex-modules-maintenance-management-failure-register.entity-CH-C6Q7m.mjs.map} +1 -1
  194. package/fesm2022/{acorex-modules-maintenance-management-failure-severity.entity-C-spQtYx.mjs → acorex-modules-maintenance-management-failure-severity.entity-BMoUEcVC.mjs} +2 -2
  195. package/fesm2022/{acorex-modules-maintenance-management-failure-severity.entity-C-spQtYx.mjs.map → acorex-modules-maintenance-management-failure-severity.entity-BMoUEcVC.mjs.map} +1 -1
  196. package/fesm2022/{acorex-modules-maintenance-management-maintenance-template.entity-Huahnjhd.mjs → acorex-modules-maintenance-management-maintenance-template.entity-CBayAtRD.mjs} +2 -2
  197. package/fesm2022/{acorex-modules-maintenance-management-maintenance-template.entity-Huahnjhd.mjs.map → acorex-modules-maintenance-management-maintenance-template.entity-CBayAtRD.mjs.map} +1 -1
  198. package/fesm2022/{acorex-modules-maintenance-management-work-order-list-command-1YsWctqu.mjs → acorex-modules-maintenance-management-work-order-list-command-mMZGiG3q.mjs} +2 -2
  199. package/fesm2022/{acorex-modules-maintenance-management-work-order-list-command-1YsWctqu.mjs.map → acorex-modules-maintenance-management-work-order-list-command-mMZGiG3q.mjs.map} +1 -1
  200. package/fesm2022/acorex-modules-maintenance-management.mjs +1 -1
  201. package/fesm2022/acorex-modules-measurement-core.mjs +4 -4
  202. package/fesm2022/acorex-modules-measurement-core.mjs.map +1 -1
  203. package/fesm2022/acorex-modules-notification-management-acorex-modules-notification-management-BSf1wd6j.mjs +3836 -0
  204. package/fesm2022/acorex-modules-notification-management-acorex-modules-notification-management-BSf1wd6j.mjs.map +1 -0
  205. package/fesm2022/acorex-modules-notification-management-notification-page.component-ATFOFL7C.mjs +548 -0
  206. package/fesm2022/acorex-modules-notification-management-notification-page.component-ATFOFL7C.mjs.map +1 -0
  207. package/fesm2022/acorex-modules-notification-management.mjs +1 -3590
  208. package/fesm2022/acorex-modules-notification-management.mjs.map +1 -1
  209. package/fesm2022/{acorex-modules-order-management-bulk-buy-order-item.entity-DGtHoqqj.mjs → acorex-modules-order-management-bulk-buy-order-item.entity-63BpszqL.mjs} +2 -2
  210. package/fesm2022/acorex-modules-order-management-bulk-buy-order-item.entity-63BpszqL.mjs.map +1 -0
  211. package/fesm2022/{acorex-modules-order-management-entity.provider-DVHBXOCD.mjs → acorex-modules-order-management-entity.provider-DGwVhM91.mjs} +3 -3
  212. package/fesm2022/{acorex-modules-order-management-entity.provider-DVHBXOCD.mjs.map → acorex-modules-order-management-entity.provider-DGwVhM91.mjs.map} +1 -1
  213. package/fesm2022/{acorex-modules-order-management-member-order-line.entity-DZJ90WHI.mjs → acorex-modules-order-management-member-order-line.entity-Czu7qE7i.mjs} +2 -2
  214. package/fesm2022/acorex-modules-order-management-member-order-line.entity-Czu7qE7i.mjs.map +1 -0
  215. package/fesm2022/acorex-modules-order-management.mjs +2 -2
  216. package/fesm2022/{acorex-modules-organization-management-acorex-modules-organization-management-Iopv_G-d.mjs → acorex-modules-organization-management-acorex-modules-organization-management-smWojO0l.mjs} +40 -40
  217. package/fesm2022/{acorex-modules-organization-management-acorex-modules-organization-management-Iopv_G-d.mjs.map → acorex-modules-organization-management-acorex-modules-organization-management-smWojO0l.mjs.map} +1 -1
  218. package/fesm2022/{acorex-modules-organization-management-add-business-unit-to-business-unit.command-D7NChP_A.mjs → acorex-modules-organization-management-add-business-unit-to-business-unit.command-BLifgeRF.mjs} +2 -2
  219. package/fesm2022/{acorex-modules-organization-management-add-business-unit-to-business-unit.command-D7NChP_A.mjs.map → acorex-modules-organization-management-add-business-unit-to-business-unit.command-BLifgeRF.mjs.map} +1 -1
  220. package/fesm2022/{acorex-modules-organization-management-add-position-to-business-unit.command-PkeqXFt1.mjs → acorex-modules-organization-management-add-position-to-business-unit.command-CKFqYBLD.mjs} +2 -2
  221. package/fesm2022/{acorex-modules-organization-management-add-position-to-business-unit.command-PkeqXFt1.mjs.map → acorex-modules-organization-management-add-position-to-business-unit.command-CKFqYBLD.mjs.map} +1 -1
  222. package/fesm2022/{acorex-modules-organization-management-add-team-to-business-unit.command-jalyX-F4.mjs → acorex-modules-organization-management-add-team-to-business-unit.command-DfaLXvTw.mjs} +2 -2
  223. package/fesm2022/{acorex-modules-organization-management-add-team-to-business-unit.command-jalyX-F4.mjs.map → acorex-modules-organization-management-add-team-to-business-unit.command-DfaLXvTw.mjs.map} +1 -1
  224. package/fesm2022/{acorex-modules-organization-management-business-unit.entity-CBjAC9Ip.mjs → acorex-modules-organization-management-business-unit.entity-BkeFPaIT.mjs} +2 -2
  225. package/fesm2022/{acorex-modules-organization-management-business-unit.entity-CBjAC9Ip.mjs.map → acorex-modules-organization-management-business-unit.entity-BkeFPaIT.mjs.map} +1 -1
  226. package/fesm2022/{acorex-modules-organization-management-chart.entity-CaY_5LGN.mjs → acorex-modules-organization-management-chart.entity-bWx4IFSv.mjs} +2 -2
  227. package/fesm2022/{acorex-modules-organization-management-chart.entity-CaY_5LGN.mjs.map → acorex-modules-organization-management-chart.entity-bWx4IFSv.mjs.map} +1 -1
  228. package/fesm2022/{acorex-modules-organization-management-company.entity-BUBhqyCn.mjs → acorex-modules-organization-management-company.entity-yPUVhIzy.mjs} +2 -2
  229. package/fesm2022/{acorex-modules-organization-management-company.entity-BUBhqyCn.mjs.map → acorex-modules-organization-management-company.entity-yPUVhIzy.mjs.map} +1 -1
  230. package/fesm2022/{acorex-modules-organization-management-entity.provider-BZsy_wi6.mjs → acorex-modules-organization-management-entity.provider-IhJwnzd-.mjs} +15 -15
  231. package/fesm2022/{acorex-modules-organization-management-entity.provider-BZsy_wi6.mjs.map → acorex-modules-organization-management-entity.provider-IhJwnzd-.mjs.map} +1 -1
  232. package/fesm2022/{acorex-modules-organization-management-feature-definition.provider-CEO1nSFP.mjs → acorex-modules-organization-management-feature-definition.provider-B5yqFa4Z.mjs} +2 -2
  233. package/fesm2022/{acorex-modules-organization-management-feature-definition.provider-CEO1nSFP.mjs.map → acorex-modules-organization-management-feature-definition.provider-B5yqFa4Z.mjs.map} +1 -1
  234. package/fesm2022/{acorex-modules-organization-management-job-definition-pages-component.provider-ChRGp5ZI.mjs → acorex-modules-organization-management-job-definition-pages-component.provider-C51sgWyG.mjs} +3 -3
  235. package/fesm2022/{acorex-modules-organization-management-job-definition-pages-component.provider-ChRGp5ZI.mjs.map → acorex-modules-organization-management-job-definition-pages-component.provider-C51sgWyG.mjs.map} +1 -1
  236. package/fesm2022/{acorex-modules-organization-management-job-definition-responsibilities-page.component-aWZO09Xw.mjs → acorex-modules-organization-management-job-definition-responsibilities-page.component-EEWB5VUq.mjs} +8 -3
  237. package/fesm2022/acorex-modules-organization-management-job-definition-responsibilities-page.component-EEWB5VUq.mjs.map +1 -0
  238. package/fesm2022/{acorex-modules-organization-management-job-definition-skills-page.component-DJcFhQM9.mjs → acorex-modules-organization-management-job-definition-skills-page.component-L2GmFRra.mjs} +7 -2
  239. package/fesm2022/acorex-modules-organization-management-job-definition-skills-page.component-L2GmFRra.mjs.map +1 -0
  240. package/fesm2022/{acorex-modules-organization-management-job-definition.entity-BoM49wYi.mjs → acorex-modules-organization-management-job-definition.entity-CDXsJADe.mjs} +2 -2
  241. package/fesm2022/{acorex-modules-organization-management-job-definition.entity-BoM49wYi.mjs.map → acorex-modules-organization-management-job-definition.entity-CDXsJADe.mjs.map} +1 -1
  242. package/fesm2022/{acorex-modules-organization-management-job-level.datasource-DbQG79uR.mjs → acorex-modules-organization-management-job-level.datasource-C84zFgVo.mjs} +2 -2
  243. package/fesm2022/{acorex-modules-organization-management-job-level.datasource-DbQG79uR.mjs.map → acorex-modules-organization-management-job-level.datasource-C84zFgVo.mjs.map} +1 -1
  244. package/fesm2022/{acorex-modules-organization-management-job-level.entity-XO-NsBG-.mjs → acorex-modules-organization-management-job-level.entity-BqjP04k-.mjs} +2 -2
  245. package/fesm2022/{acorex-modules-organization-management-job-level.entity-XO-NsBG-.mjs.map → acorex-modules-organization-management-job-level.entity-BqjP04k-.mjs.map} +1 -1
  246. package/fesm2022/{acorex-modules-organization-management-menu.provider-DXW6aUIX.mjs → acorex-modules-organization-management-menu.provider-ChR3Rh4W.mjs} +2 -2
  247. package/fesm2022/{acorex-modules-organization-management-menu.provider-DXW6aUIX.mjs.map → acorex-modules-organization-management-menu.provider-ChR3Rh4W.mjs.map} +1 -1
  248. package/fesm2022/{acorex-modules-organization-management-org-chart-default-node-contribution.provider-ClKr6K6Y.mjs → acorex-modules-organization-management-org-chart-default-node-contribution.provider-DFVts4Q2.mjs} +2 -2
  249. package/fesm2022/{acorex-modules-organization-management-org-chart-default-node-contribution.provider-ClKr6K6Y.mjs.map → acorex-modules-organization-management-org-chart-default-node-contribution.provider-DFVts4Q2.mjs.map} +1 -1
  250. package/fesm2022/{acorex-modules-organization-management-org-chart-employee-flyout-contribution.provider-BjIDzwXF.mjs → acorex-modules-organization-management-org-chart-employee-flyout-contribution.provider-D1r0YQbL.mjs} +2 -2
  251. package/fesm2022/{acorex-modules-organization-management-org-chart-employee-flyout-contribution.provider-BjIDzwXF.mjs.map → acorex-modules-organization-management-org-chart-employee-flyout-contribution.provider-D1r0YQbL.mjs.map} +1 -1
  252. package/fesm2022/{acorex-modules-organization-management-org-chart-position-employee-node-contribution.provider-DRAlUmIa.mjs → acorex-modules-organization-management-org-chart-position-employee-node-contribution.provider-Df1x_VF0.mjs} +2 -2
  253. package/fesm2022/{acorex-modules-organization-management-org-chart-position-employee-node-contribution.provider-DRAlUmIa.mjs.map → acorex-modules-organization-management-org-chart-position-employee-node-contribution.provider-Df1x_VF0.mjs.map} +1 -1
  254. package/fesm2022/{acorex-modules-organization-management-org-chart-ux-node-contribution.provider-DwSjov_Z.mjs → acorex-modules-organization-management-org-chart-ux-node-contribution.provider-BPWFJSx2.mjs} +2 -2
  255. package/fesm2022/{acorex-modules-organization-management-org-chart-ux-node-contribution.provider-DwSjov_Z.mjs.map → acorex-modules-organization-management-org-chart-ux-node-contribution.provider-BPWFJSx2.mjs.map} +1 -1
  256. package/fesm2022/{acorex-modules-organization-management-org-chart.page-CuPEM-_N.mjs → acorex-modules-organization-management-org-chart.page-BzKPjJwY.mjs} +2 -2
  257. package/fesm2022/{acorex-modules-organization-management-org-chart.page-CuPEM-_N.mjs.map → acorex-modules-organization-management-org-chart.page-BzKPjJwY.mjs.map} +1 -1
  258. package/fesm2022/{acorex-modules-organization-management-permission-definition.provider-BNthP0QV.mjs → acorex-modules-organization-management-permission-definition.provider-DShSa-Wp.mjs} +2 -2
  259. package/fesm2022/{acorex-modules-organization-management-permission-definition.provider-BNthP0QV.mjs.map → acorex-modules-organization-management-permission-definition.provider-DShSa-Wp.mjs.map} +1 -1
  260. package/fesm2022/{acorex-modules-organization-management-position.entity-Cja3CYmL.mjs → acorex-modules-organization-management-position.entity-DyF02saN.mjs} +2 -2
  261. package/fesm2022/{acorex-modules-organization-management-position.entity-Cja3CYmL.mjs.map → acorex-modules-organization-management-position.entity-DyF02saN.mjs.map} +1 -1
  262. package/fesm2022/{acorex-modules-organization-management-remove-position-from-business-unit.command-Dm1a6-uO.mjs → acorex-modules-organization-management-remove-position-from-business-unit.command-CGYBDMLJ.mjs} +2 -2
  263. package/fesm2022/{acorex-modules-organization-management-remove-position-from-business-unit.command-Dm1a6-uO.mjs.map → acorex-modules-organization-management-remove-position-from-business-unit.command-CGYBDMLJ.mjs.map} +1 -1
  264. package/fesm2022/{acorex-modules-organization-management-replace-position-assignee.command-BWtzQZyW.mjs → acorex-modules-organization-management-replace-position-assignee.command-DgR5-k3v.mjs} +2 -2
  265. package/fesm2022/{acorex-modules-organization-management-replace-position-assignee.command-BWtzQZyW.mjs.map → acorex-modules-organization-management-replace-position-assignee.command-DgR5-k3v.mjs.map} +1 -1
  266. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-C4W0VlL5.mjs → acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-oqrqfc2t.mjs} +2 -2
  267. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-C4W0VlL5.mjs.map → acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-oqrqfc2t.mjs.map} +1 -1
  268. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-view.component-CaPqjai7.mjs → acorex-modules-organization-management-responsibilities-matrix-widget-view.component-BEZm8HRq.mjs} +2 -2
  269. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-view.component-CaPqjai7.mjs.map → acorex-modules-organization-management-responsibilities-matrix-widget-view.component-BEZm8HRq.mjs.map} +1 -1
  270. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix.component-nJuP6fA0.mjs → acorex-modules-organization-management-responsibilities-matrix.component-CBfTsRx4.mjs} +2 -2
  271. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix.component-nJuP6fA0.mjs.map → acorex-modules-organization-management-responsibilities-matrix.component-CBfTsRx4.mjs.map} +1 -1
  272. package/fesm2022/{acorex-modules-organization-management-responsibility-level.entity-CvvzIjvE.mjs → acorex-modules-organization-management-responsibility-level.entity-BAm1en5A.mjs} +2 -2
  273. package/fesm2022/{acorex-modules-organization-management-responsibility-level.entity-CvvzIjvE.mjs.map → acorex-modules-organization-management-responsibility-level.entity-BAm1en5A.mjs.map} +1 -1
  274. package/fesm2022/{acorex-modules-organization-management-responsibility.entity-Cc0Ou-hc.mjs → acorex-modules-organization-management-responsibility.entity-DTCMbqNy.mjs} +2 -2
  275. package/fesm2022/{acorex-modules-organization-management-responsibility.entity-Cc0Ou-hc.mjs.map → acorex-modules-organization-management-responsibility.entity-DTCMbqNy.mjs.map} +1 -1
  276. package/fesm2022/{acorex-modules-organization-management-settings.provider-C33ZatCD.mjs → acorex-modules-organization-management-settings.provider-C6op-yff.mjs} +2 -2
  277. package/fesm2022/{acorex-modules-organization-management-settings.provider-C33ZatCD.mjs.map → acorex-modules-organization-management-settings.provider-C6op-yff.mjs.map} +1 -1
  278. package/fesm2022/{acorex-modules-organization-management-team-business-unit.entity-DGuF5ux1.mjs → acorex-modules-organization-management-team-business-unit.entity-B4Wra1YB.mjs} +3 -3
  279. package/fesm2022/acorex-modules-organization-management-team-business-unit.entity-B4Wra1YB.mjs.map +1 -0
  280. package/fesm2022/{acorex-modules-organization-management-team-member-role.entity-BMXkNavp.mjs → acorex-modules-organization-management-team-member-role.entity-CVH2m8uw.mjs} +2 -2
  281. package/fesm2022/{acorex-modules-organization-management-team-member-role.entity-BMXkNavp.mjs.map → acorex-modules-organization-management-team-member-role.entity-CVH2m8uw.mjs.map} +1 -1
  282. package/fesm2022/{acorex-modules-organization-management-team-member.entity-Deem7M3N.mjs → acorex-modules-organization-management-team-member.entity-By97LISn.mjs} +3 -3
  283. package/fesm2022/acorex-modules-organization-management-team-member.entity-By97LISn.mjs.map +1 -0
  284. package/fesm2022/{acorex-modules-organization-management-team.entity-CNmpaJ3F.mjs → acorex-modules-organization-management-team.entity-Cezsw5Vq.mjs} +2 -2
  285. package/fesm2022/{acorex-modules-organization-management-team.entity-CNmpaJ3F.mjs.map → acorex-modules-organization-management-team.entity-Cezsw5Vq.mjs.map} +1 -1
  286. package/fesm2022/acorex-modules-organization-management.mjs +1 -1
  287. package/fesm2022/acorex-modules-person-core.mjs +1 -1
  288. package/fesm2022/acorex-modules-person-core.mjs.map +1 -1
  289. package/fesm2022/acorex-modules-platform-dev-tools.mjs +3 -3
  290. package/fesm2022/acorex-modules-platform-dev-tools.mjs.map +1 -1
  291. package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-Cbf1rlEK.mjs → acorex-modules-platform-management-acorex-modules-platform-management-LJBIjN39.mjs} +5 -5
  292. package/fesm2022/acorex-modules-platform-management-acorex-modules-platform-management-LJBIjN39.mjs.map +1 -0
  293. package/fesm2022/{acorex-modules-platform-management-menu-list.component-DIf_-oaM.mjs → acorex-modules-platform-management-menu-list.component-SXuHsuj0.mjs} +3 -3
  294. package/fesm2022/{acorex-modules-platform-management-menu-list.component-DIf_-oaM.mjs.map → acorex-modules-platform-management-menu-list.component-SXuHsuj0.mjs.map} +1 -1
  295. package/fesm2022/acorex-modules-platform-management.mjs +1 -1
  296. package/fesm2022/acorex-modules-procurement-management.mjs +2 -2
  297. package/fesm2022/acorex-modules-procurement-management.mjs.map +1 -1
  298. package/fesm2022/{acorex-modules-product-catalog-product-sku.entity-C3ynevYI.mjs → acorex-modules-product-catalog-product-sku.entity-DNgCnDtL.mjs} +2 -2
  299. package/fesm2022/acorex-modules-product-catalog-product-sku.entity-DNgCnDtL.mjs.map +1 -0
  300. package/fesm2022/{acorex-modules-product-catalog-product.entity-BbB7GAg7.mjs → acorex-modules-product-catalog-product.entity-CBwSFTL2.mjs} +2 -2
  301. package/fesm2022/acorex-modules-product-catalog-product.entity-CBwSFTL2.mjs.map +1 -0
  302. package/fesm2022/acorex-modules-product-catalog.mjs +2 -2
  303. package/fesm2022/acorex-modules-report-management.mjs +7 -7
  304. package/fesm2022/acorex-modules-report-management.mjs.map +1 -1
  305. package/fesm2022/{acorex-modules-reservation-management-acorex-modules-reservation-management-BoUiTlmu.mjs → acorex-modules-reservation-management-acorex-modules-reservation-management-D7YtuAbZ.mjs} +7 -7
  306. package/fesm2022/{acorex-modules-reservation-management-acorex-modules-reservation-management-BoUiTlmu.mjs.map → acorex-modules-reservation-management-acorex-modules-reservation-management-D7YtuAbZ.mjs.map} +1 -1
  307. package/fesm2022/{acorex-modules-reservation-management-reservation-class-status.entity-D-ZdqKa8.mjs → acorex-modules-reservation-management-reservation-class-status.entity-D4insz8u.mjs} +2 -2
  308. package/fesm2022/{acorex-modules-reservation-management-reservation-class-status.entity-D-ZdqKa8.mjs.map → acorex-modules-reservation-management-reservation-class-status.entity-D4insz8u.mjs.map} +1 -1
  309. package/fesm2022/{acorex-modules-reservation-management-reservation-resource-type.entity-zPD-Psml.mjs → acorex-modules-reservation-management-reservation-resource-type.entity-Dn2CMqO9.mjs} +2 -2
  310. package/fesm2022/{acorex-modules-reservation-management-reservation-resource-type.entity-zPD-Psml.mjs.map → acorex-modules-reservation-management-reservation-resource-type.entity-Dn2CMqO9.mjs.map} +1 -1
  311. package/fesm2022/{acorex-modules-reservation-management-reservation-status-transition.entity-CQ85ZAGF.mjs → acorex-modules-reservation-management-reservation-status-transition.entity-CrwUrIrC.mjs} +2 -2
  312. package/fesm2022/{acorex-modules-reservation-management-reservation-status-transition.entity-CQ85ZAGF.mjs.map → acorex-modules-reservation-management-reservation-status-transition.entity-CrwUrIrC.mjs.map} +1 -1
  313. package/fesm2022/acorex-modules-reservation-management.mjs +1 -1
  314. package/fesm2022/acorex-modules-security-management.mjs +4 -4
  315. package/fesm2022/acorex-modules-security-management.mjs.map +1 -1
  316. package/fesm2022/{acorex-modules-settings-management-acorex-modules-settings-management-Dj9u0VEL.mjs → acorex-modules-settings-management-acorex-modules-settings-management-O8kBegUF.mjs} +136 -65
  317. package/fesm2022/acorex-modules-settings-management-acorex-modules-settings-management-O8kBegUF.mjs.map +1 -0
  318. package/fesm2022/{acorex-modules-settings-management-permission-definition.provider-DpRn1jAo.mjs → acorex-modules-settings-management-permission-definition.provider-CU7SEx6v.mjs} +2 -2
  319. package/fesm2022/{acorex-modules-settings-management-permission-definition.provider-DpRn1jAo.mjs.map → acorex-modules-settings-management-permission-definition.provider-CU7SEx6v.mjs.map} +1 -1
  320. package/fesm2022/{acorex-modules-settings-management-setting-page.component-C9wPgm_P.mjs → acorex-modules-settings-management-setting-page.component-D8_cjOzW.mjs} +181 -19
  321. package/fesm2022/acorex-modules-settings-management-setting-page.component-D8_cjOzW.mjs.map +1 -0
  322. package/fesm2022/{acorex-modules-settings-management-setting-view.component-BQ69Bx8C.mjs → acorex-modules-settings-management-setting-view.component-DIvERzMC.mjs} +65 -17
  323. package/fesm2022/acorex-modules-settings-management-setting-view.component-DIvERzMC.mjs.map +1 -0
  324. package/fesm2022/acorex-modules-settings-management.mjs +1 -1
  325. package/fesm2022/acorex-modules-subscription-management.mjs +2 -2
  326. package/fesm2022/acorex-modules-subscription-management.mjs.map +1 -1
  327. package/fesm2022/{acorex-modules-task-management-acorex-modules-task-management-BB7eeaYX.mjs → acorex-modules-task-management-acorex-modules-task-management-Bp-9vZdR.mjs} +939 -383
  328. package/fesm2022/acorex-modules-task-management-acorex-modules-task-management-Bp-9vZdR.mjs.map +1 -0
  329. package/fesm2022/acorex-modules-task-management-task-board.page-Brgg9wJa.mjs +3368 -0
  330. package/fesm2022/acorex-modules-task-management-task-board.page-Brgg9wJa.mjs.map +1 -0
  331. package/fesm2022/acorex-modules-task-management.mjs +1 -1
  332. package/fesm2022/acorex-modules-tenant-management.mjs +2 -2
  333. package/fesm2022/acorex-modules-tenant-management.mjs.map +1 -1
  334. package/fesm2022/acorex-modules-workflow-management-acorex-modules-workflow-management-gXP-srRO.mjs +5600 -0
  335. package/fesm2022/acorex-modules-workflow-management-acorex-modules-workflow-management-gXP-srRO.mjs.map +1 -0
  336. package/fesm2022/{acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-B4DLmioy.mjs → acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-BW6kK9Av.mjs} +3 -3
  337. package/fesm2022/{acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-B4DLmioy.mjs.map → acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-BW6kK9Av.mjs.map} +1 -1
  338. package/fesm2022/{acorex-modules-workflow-management-activity-definition.entity-B3DkgDQb.mjs → acorex-modules-workflow-management-activity-definition.entity-BlK-sL_3.mjs} +2 -2
  339. package/fesm2022/{acorex-modules-workflow-management-activity-definition.entity-B3DkgDQb.mjs.map → acorex-modules-workflow-management-activity-definition.entity-BlK-sL_3.mjs.map} +1 -1
  340. package/fesm2022/{acorex-modules-workflow-management-automation.entity-BigK8yE2.mjs → acorex-modules-workflow-management-automation.entity-C9q24TPu.mjs} +3 -3
  341. package/fesm2022/acorex-modules-workflow-management-automation.entity-C9q24TPu.mjs.map +1 -0
  342. package/fesm2022/{acorex-modules-workflow-management-index-1B7oRAKX.mjs → acorex-modules-workflow-management-index-BFdyFvcu.mjs} +8 -5
  343. package/fesm2022/acorex-modules-workflow-management-index-BFdyFvcu.mjs.map +1 -0
  344. package/fesm2022/{acorex-modules-workflow-management-index-DC_9M9dk.mjs → acorex-modules-workflow-management-index-BbVGViSE.mjs} +7 -163
  345. package/fesm2022/acorex-modules-workflow-management-index-BbVGViSE.mjs.map +1 -0
  346. package/fesm2022/{acorex-modules-workflow-management-index-34UZrsxw.mjs → acorex-modules-workflow-management-index-Bq5tBgif.mjs} +2 -2
  347. package/fesm2022/{acorex-modules-workflow-management-index-34UZrsxw.mjs.map → acorex-modules-workflow-management-index-Bq5tBgif.mjs.map} +1 -1
  348. package/fesm2022/{acorex-modules-workflow-management-index-CxheG2ry.mjs → acorex-modules-workflow-management-index-CIV7Abnc.mjs} +115 -7
  349. package/fesm2022/acorex-modules-workflow-management-index-CIV7Abnc.mjs.map +1 -0
  350. package/fesm2022/{acorex-modules-workflow-management-save-workflow-definition-activities.command-CGNwslcn.mjs → acorex-modules-workflow-management-save-workflow-definition-activities.command-B_tjSneV.mjs} +2 -2
  351. package/fesm2022/{acorex-modules-workflow-management-save-workflow-definition-activities.command-CGNwslcn.mjs.map → acorex-modules-workflow-management-save-workflow-definition-activities.command-B_tjSneV.mjs.map} +1 -1
  352. package/fesm2022/acorex-modules-workflow-management-workflow-activity-instance-rows.utils-L8W4ogSI.mjs +172 -0
  353. package/fesm2022/acorex-modules-workflow-management-workflow-activity-instance-rows.utils-L8W4ogSI.mjs.map +1 -0
  354. package/fesm2022/acorex-modules-workflow-management-workflow-configurator-widget-column.component-CPOQZxsq.mjs +79 -0
  355. package/fesm2022/acorex-modules-workflow-management-workflow-configurator-widget-column.component-CPOQZxsq.mjs.map +1 -0
  356. package/fesm2022/acorex-modules-workflow-management-workflow-configurator-widget-edit.component-CqF3z8Xq.mjs +466 -0
  357. package/fesm2022/acorex-modules-workflow-management-workflow-configurator-widget-edit.component-CqF3z8Xq.mjs.map +1 -0
  358. package/fesm2022/{acorex-modules-workflow-management-workflow-definition.entity-DISpkWE4.mjs → acorex-modules-workflow-management-workflow-definition.entity-BbnGGXZs.mjs} +3 -2
  359. package/fesm2022/acorex-modules-workflow-management-workflow-definition.entity-BbnGGXZs.mjs.map +1 -0
  360. package/fesm2022/{acorex-modules-workflow-management-workflow-instance.entity-BnKT3Wgh.mjs → acorex-modules-workflow-management-workflow-instance.entity-Ci6c4VoI.mjs} +3 -3
  361. package/fesm2022/{acorex-modules-workflow-management-workflow-instance.entity-BnKT3Wgh.mjs.map → acorex-modules-workflow-management-workflow-instance.entity-Ci6c4VoI.mjs.map} +1 -1
  362. package/fesm2022/acorex-modules-workflow-management-workflow-run-history-popup.component-CJ0cRwUE.mjs +579 -0
  363. package/fesm2022/acorex-modules-workflow-management-workflow-run-history-popup.component-CJ0cRwUE.mjs.map +1 -0
  364. package/fesm2022/acorex-modules-workflow-management-workflow-task-popover.component-CHv2_W75.mjs +285 -0
  365. package/fesm2022/acorex-modules-workflow-management-workflow-task-popover.component-CHv2_W75.mjs.map +1 -0
  366. package/fesm2022/acorex-modules-workflow-management.mjs +1 -5212
  367. package/fesm2022/acorex-modules-workflow-management.mjs.map +1 -1
  368. package/fesm2022/acorex-modules-workplacesafety-management-hazard-ppe-rule-status.provider-D1a0CBhs.mjs +42 -0
  369. package/fesm2022/acorex-modules-workplacesafety-management-hazard-ppe-rule-status.provider-D1a0CBhs.mjs.map +1 -0
  370. package/fesm2022/acorex-modules-workplacesafety-management-ppe-item-status.provider-VH_Bp0l5.mjs +70 -0
  371. package/fesm2022/acorex-modules-workplacesafety-management-ppe-item-status.provider-VH_Bp0l5.mjs.map +1 -0
  372. package/fesm2022/acorex-modules-workplacesafety-management.mjs +1229 -67
  373. package/fesm2022/acorex-modules-workplacesafety-management.mjs.map +1 -1
  374. package/package.json +2 -2
  375. package/types/acorex-modules-ai-management.d.ts +23 -4
  376. package/types/acorex-modules-assessment-management.d.ts +214 -188
  377. package/types/acorex-modules-asset-management.d.ts +1 -0
  378. package/types/acorex-modules-calendar-management.d.ts +61 -33
  379. package/types/acorex-modules-common.d.ts +14 -4
  380. package/types/acorex-modules-conversation.d.ts +59 -14
  381. package/types/acorex-modules-dashboard-management.d.ts +14 -2
  382. package/types/acorex-modules-document-management.d.ts +8 -0
  383. package/types/acorex-modules-human-capital-management.d.ts +28 -14
  384. package/types/acorex-modules-notification-management.d.ts +32 -3
  385. package/types/acorex-modules-report-management.d.ts +3 -0
  386. package/types/acorex-modules-settings-management.d.ts +12 -2
  387. package/types/acorex-modules-task-management.d.ts +196 -47
  388. package/types/acorex-modules-workflow-management.d.ts +41 -39
  389. package/types/acorex-modules-workplacesafety-management.d.ts +124 -4
  390. package/fesm2022/acorex-modules-assessment-management-acorex-modules-assessment-management-IHgQ8RVH.mjs.map +0 -1
  391. package/fesm2022/acorex-modules-assessment-management-fill-assessment-session.command-nkFpnKE2.mjs.map +0 -1
  392. package/fesm2022/acorex-modules-assessment-management-preview-questionnaire.command-Sd4gRHo5.mjs.map +0 -1
  393. package/fesm2022/acorex-modules-assessment-management-question-bank-item.entity-RLIfWCzq.mjs.map +0 -1
  394. package/fesm2022/acorex-modules-assessment-management-questionnaire-viewer-popup.component-B8LMKqVO.mjs.map +0 -1
  395. package/fesm2022/acorex-modules-assessment-management-questionnaire.entity-CZBnfCYE.mjs.map +0 -1
  396. package/fesm2022/acorex-modules-auth-acorex-modules-auth-BUuEzfsI.mjs +0 -803
  397. package/fesm2022/acorex-modules-auth-acorex-modules-auth-BUuEzfsI.mjs.map +0 -1
  398. package/fesm2022/acorex-modules-auth-app-chooser.component-DnmLfX5x.mjs.map +0 -1
  399. package/fesm2022/acorex-modules-auth-master.layout-DMP4RC6L.mjs +0 -25
  400. package/fesm2022/acorex-modules-auth-master.layout-DMP4RC6L.mjs.map +0 -1
  401. package/fesm2022/acorex-modules-auth-user-sessions.component-gJSHI_eh.mjs.map +0 -1
  402. package/fesm2022/acorex-modules-calendar-management-datasource.provider-C_iazC89.mjs +0 -95
  403. package/fesm2022/acorex-modules-calendar-management-datasource.provider-C_iazC89.mjs.map +0 -1
  404. package/fesm2022/acorex-modules-content-management-acorex-modules-content-management-txpooXrE.mjs.map +0 -1
  405. package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-DYW31fEm.mjs.map +0 -1
  406. package/fesm2022/acorex-modules-conversation-assist-delegated-agent-detail-popup.component-DQlE8l4c.mjs +0 -329
  407. package/fesm2022/acorex-modules-conversation-assist-delegated-agent-detail-popup.component-DQlE8l4c.mjs.map +0 -1
  408. package/fesm2022/acorex-modules-conversation-comments-page.component-CNqL-HdS.mjs.map +0 -1
  409. package/fesm2022/acorex-modules-dashboard-management-acorex-modules-dashboard-management-kk0CINL1.mjs.map +0 -1
  410. package/fesm2022/acorex-modules-data-management-index-DEm_BsbE.mjs.map +0 -1
  411. package/fesm2022/acorex-modules-human-capital-management-acorex-modules-human-capital-management-DrKulwY-.mjs.map +0 -1
  412. package/fesm2022/acorex-modules-human-capital-management-employee.entity-CrVU_3Jv.mjs.map +0 -1
  413. package/fesm2022/acorex-modules-human-capital-management-leave-request.entity-QeY6lcUY.mjs.map +0 -1
  414. package/fesm2022/acorex-modules-human-capital-management-leave-type.entity-D7B3adkZ.mjs.map +0 -1
  415. package/fesm2022/acorex-modules-human-capital-management-lifecycle-event-type.entity-Dim-8hT7.mjs.map +0 -1
  416. package/fesm2022/acorex-modules-human-capital-management-lifecycle-event.entity-3HtYOKrY.mjs.map +0 -1
  417. package/fesm2022/acorex-modules-human-capital-management-start-lifecycle-event-flow.command-Bz2SZcmm.mjs.map +0 -1
  418. package/fesm2022/acorex-modules-learning-management-course.entity-DUUgeikJ.mjs.map +0 -1
  419. package/fesm2022/acorex-modules-learning-management-enrollment.entity-CdJafrUh.mjs.map +0 -1
  420. package/fesm2022/acorex-modules-learning-management-learning-path.entity-Zo--bDto.mjs.map +0 -1
  421. package/fesm2022/acorex-modules-learning-management-skill.entity-VXkLbaD4.mjs.map +0 -1
  422. package/fesm2022/acorex-modules-learning-management-training.entity-C4KDv1uh.mjs.map +0 -1
  423. package/fesm2022/acorex-modules-locale-management-profiles-BOveGIcE.mjs.map +0 -1
  424. package/fesm2022/acorex-modules-maintenance-management-acorex-modules-maintenance-management-DiM2aFgg.mjs.map +0 -1
  425. package/fesm2022/acorex-modules-notification-management-notification-page.component-6YOiGgKm.mjs +0 -858
  426. package/fesm2022/acorex-modules-notification-management-notification-page.component-6YOiGgKm.mjs.map +0 -1
  427. package/fesm2022/acorex-modules-order-management-bulk-buy-order-item.entity-DGtHoqqj.mjs.map +0 -1
  428. package/fesm2022/acorex-modules-order-management-member-order-line.entity-DZJ90WHI.mjs.map +0 -1
  429. package/fesm2022/acorex-modules-organization-management-job-definition-responsibilities-page.component-aWZO09Xw.mjs.map +0 -1
  430. package/fesm2022/acorex-modules-organization-management-job-definition-skills-page.component-DJcFhQM9.mjs.map +0 -1
  431. package/fesm2022/acorex-modules-organization-management-team-business-unit.entity-DGuF5ux1.mjs.map +0 -1
  432. package/fesm2022/acorex-modules-organization-management-team-member.entity-Deem7M3N.mjs.map +0 -1
  433. package/fesm2022/acorex-modules-platform-management-acorex-modules-platform-management-Cbf1rlEK.mjs.map +0 -1
  434. package/fesm2022/acorex-modules-product-catalog-product-sku.entity-C3ynevYI.mjs.map +0 -1
  435. package/fesm2022/acorex-modules-product-catalog-product.entity-BbB7GAg7.mjs.map +0 -1
  436. package/fesm2022/acorex-modules-settings-management-acorex-modules-settings-management-Dj9u0VEL.mjs.map +0 -1
  437. package/fesm2022/acorex-modules-settings-management-setting-page.component-C9wPgm_P.mjs.map +0 -1
  438. package/fesm2022/acorex-modules-settings-management-setting-view.component-BQ69Bx8C.mjs.map +0 -1
  439. package/fesm2022/acorex-modules-task-management-acorex-modules-task-management-BB7eeaYX.mjs.map +0 -1
  440. package/fesm2022/acorex-modules-task-management-task-board.page-BmUIngWk.mjs +0 -2284
  441. package/fesm2022/acorex-modules-task-management-task-board.page-BmUIngWk.mjs.map +0 -1
  442. package/fesm2022/acorex-modules-workflow-management-automation.entity-BigK8yE2.mjs.map +0 -1
  443. package/fesm2022/acorex-modules-workflow-management-index-1B7oRAKX.mjs.map +0 -1
  444. package/fesm2022/acorex-modules-workflow-management-index-CxheG2ry.mjs.map +0 -1
  445. package/fesm2022/acorex-modules-workflow-management-index-DC_9M9dk.mjs.map +0 -1
  446. package/fesm2022/acorex-modules-workflow-management-workflow-definition.entity-DISpkWE4.mjs.map +0 -1
  447. package/fesm2022/acorex-modules-workflow-management-workflow-task-popover.component-B4hEv2-a.mjs +0 -255
  448. package/fesm2022/acorex-modules-workflow-management-workflow-task-popover.component-B4hEv2-a.mjs.map +0 -1
@@ -1,29 +1,29 @@
1
1
  import { AXConversationModule } from '@acorex/components/conversation';
2
- import { AXPSessionService, AXPAuthGuard, AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex/platform/auth';
3
- import { createAllQueryView, AXPEntityQueryType, AXPSettingsService, AXPCommonSettings, AXPFileStorageStatus, AXPFilterOperatorMiddlewareService, AXPEntityCommandScope, AXPFileStorageService, AXP_MENU_PROVIDER, AXP_SEARCH_PROVIDER, AXP_SEARCH_DEFINITION_PROVIDER } from '@acorex/platform/common';
2
+ import { AXPSessionService, AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex/platform/auth';
3
+ import { createAllQueryView, AXPEntityQueryType, AXPBackgroundOperationHandler, AXP_BACKGROUND_OPERATION_HANDLERS, AXPSettingsService, AXPCommonSettings, AXPFileStorageStatus, AXPFilterOperatorMiddlewareService, AXPEntityCommandScope, AXPFileStorageService, AXP_PROTECTED_ROUTE_GUARDS, AXP_MENU_PROVIDER, AXP_SEARCH_PROVIDER, AXP_SEARCH_DEFINITION_PROVIDER } from '@acorex/platform/common';
4
4
  import { AXPSystemActionType, AXPPlatformScope, AXPDeviceService, AXP_MODULE_MANIFEST_PROVIDER } from '@acorex/platform/core';
5
5
  import { AXPMarkdownViewerComponent, AXPThemeLayoutBlockComponent, AXPThemeLayoutStartSideComponent, AXPUserAvatarComponent, AXPMarkdownTemplateDirective, AXP_PAGE_COMPONENT_PROVIDER, AXP_TASK_BADGE_PROVIDERS } from '@acorex/platform/layout/components';
6
6
  import { AXMEntityCrudServiceImpl, entityMasterCrudActions, entityMasterRecordActions, AXPEntityDefinitionRegistryService, AXPEntityService, cloneLayoutArrays, ensureLayoutSection, ensureLayoutPropertyView, resolveEntityPluginDetailPageOrder, ensureListActions, actionExists, AXP_ENTITY_ACTION_PLUGIN, AXP_ENTITY_DEFINITION_LOADER } from '@acorex/platform/layout/entity';
7
7
  import { AXPCommandService, provideCommandSetups } from '@acorex/platform/runtime';
8
8
  import { AXPRootLayoutComponent } from '@acorex/platform/themes/default';
9
9
  import * as i5 from '@angular/common';
10
- import { AsyncPipe, CommonModule, isPlatformBrowser, DecimalPipe, DatePipe } from '@angular/common';
10
+ import { AsyncPipe, CommonModule, isPlatformBrowser, NgTemplateOutlet, DecimalPipe, DatePipe } from '@angular/common';
11
11
  import * as i0 from '@angular/core';
12
- import { Injectable, NgModule, inject, computed, input, ChangeDetectionStrategy, Component, signal, effect, untracked, output, viewChild, afterNextRender, DestroyRef, ElementRef, ViewEncapsulation, PLATFORM_ID, Injector, importProvidersFrom } from '@angular/core';
12
+ import { Injectable, NgModule, inject, computed, input, ChangeDetectionStrategy, Component, signal, effect, untracked, output, viewChild, afterNextRender, ViewEncapsulation, DestroyRef, ElementRef, PLATFORM_ID, Injector, importProvidersFrom } from '@angular/core';
13
13
  import { Router, ActivatedRoute, RouterModule, ROUTES } from '@angular/router';
14
- import * as i1$2 from '@acorex/platform/layout/widget-core';
14
+ import * as i1$3 from '@acorex/platform/layout/widget-core';
15
15
  import { AXPWidgetsCatalog, AXPValueWidgetComponent, AXPWidgetGroupEnum, AXPWidgetCoreModule, AXP_WIDGET_DEFINITION_PROVIDER } from '@acorex/platform/layout/widget-core';
16
- import { sortBy } from 'lodash-es';
17
- import { RootConfig as RootConfig$1, axpAiAssistStarterPromptLabels, axpAiAssistInitialMessagesToTranscript, axpAiChatMessageGetText, AXPAiManagerService, axpAiChatMessageIsDelegatedReflectionExcluded, axpAiDelegatedAgentResultSegments, axpSanitizeLastProviderPayloadForPersistence, axpAiChatTextMessage, AXPAiChatToolRunContextService, AXPAiPlatformRuntimeContextBuilder, AIMANAGEMENT_STRUCTURED_TEXT_COMPLETION_COMMAND_KEY, persistAiChatAttachmentImage, AIMANAGEMENT_CHAT_TRANSCRIBE_SPEECH_COMMAND_KEY, AXPAiAssistChatModelCatalogService, axpAiParseSupervisorAgentToolName, axpAiDelegatedAgentPromptPreview, axpAiChatToolOrAgentResultBodyJson, axpAiDelegatedAgentOutcomeResponsesPlainText } from '@acorex/modules/ai-management';
18
- import { AXConversationService, AXUserApi, AXConversationApi, AXMessageApi, AXUploaderApi, AXRealtimeApi, conversationSharedStorage, AXNewConversationDialogComponent, AXComposerService, AXInfoBarService, AXConversationContainerDirective, AXSidebarComponent, AXInfoBarComponent, AXMessageListComponent, AXComposerComponent, axConversationIndexedDbStorage, AXImageRendererComponent, AXTextRendererComponent, provideConversation, AX_CONVERSATION_ITEM_MUTE_ACTION, AX_CONVERSATION_ITEM_PIN_ACTION, AX_CONVERSATION_ITEM_MARK_READ_ACTION, AX_CONVERSATION_ITEM_DIVIDER, AX_CONVERSATION_ITEM_DELETE_ACTION, AX_CONVERSATION_ITEM_BLOCK_ACTION, AX_CONVERSATION_INFO_BAR_SEARCH_ACTION, AX_CONVERSATION_INFO_BAR_INFO_ACTION, AX_CONVERSATION_INFO_BAR_MUTE_ACTION, AX_CONVERSATION_INFO_BAR_DIVIDER, AX_CONVERSATION_INFO_BAR_DELETE_ACTION, AX_CONVERSATION_INFO_BAR_BLOCK_ACTION, AX_CONVERSATION_TAB_ALL, AX_CONVERSATION_TAB_PRIVATE, AX_CONVERSATION_TAB_GROUPS, AX_CONVERSATION_COMPOSER_EMOJI_TAB, AX_CONVERSATION_COMPOSER_STICKER_TAB, AX_CONVERSATION_COMPOSER_EMOJI_ACTION, AX_CONVERSATION_COMPOSER_IMAGE_ACTION, AX_CONVERSATION_COMPOSER_VIDEO_ACTION, AX_CONVERSATION_COMPOSER_FILE_ACTION, AX_CONVERSATION_COMPOSER_AUDIO_ACTION, AX_CONVERSATION_COMPOSER_LOCATION_ACTION, AX_CONVERSATION_MESSAGE_REPLY_ACTION, AX_CONVERSATION_MESSAGE_FORWARD_ACTION, AX_CONVERSATION_MESSAGE_EDIT_ACTION, AX_CONVERSATION_MESSAGE_DELETE_ACTION, AX_CONVERSATION_TEXT_RENDERER, AX_CONVERSATION_IMAGE_RENDERER, AX_CONVERSATION_VIDEO_RENDERER, AX_CONVERSATION_AUDIO_RENDERER, AX_CONVERSATION_VOICE_RENDERER, AX_CONVERSATION_FILE_RENDERER, AX_CONVERSATION_LOCATION_RENDERER, AX_CONVERSATION_STICKER_RENDERER } from '@acorex/components/conversation2';
16
+ import { sortBy, get } from 'lodash-es';
17
+ import { RootConfig as RootConfig$1, axpAiAssistStarterPromptLabels, axpAiAssistInitialMessagesToTranscript, axpAiChatMessageGetText, AXPAiManagerService, axpAiChatMessageIsDelegatedReflectionExcluded, axpAiDelegatedAgentResultSegments, axpSanitizeLastProviderPayloadForPersistence, axpAiChatTextMessage, AXPAiChatToolRunContextService, AXPAiPlatformRuntimeContextBuilder, AIMANAGEMENT_STRUCTURED_TEXT_COMPLETION_COMMAND_KEY, persistAiChatAttachmentImage, AIMANAGEMENT_CHAT_TRANSCRIBE_SPEECH_COMMAND_KEY, AXPAiAssistChatModelCatalogService, axpAiParseSupervisorAgentToolName, AI_CHAT_GENERATED_SPEECH_REF_TYPE, AI_CHAT_GENERATED_IMAGE_REF_TYPE, axpAiDelegatedAgentPromptPreview, axpAiChatToolOrAgentResultBodyJson, axpAiDelegatedAgentOutcomeResponsesPlainText } from '@acorex/modules/ai-management';
18
+ import { AXConversationService, AXUserApi, AXConversationApi, AXMessageApi, AXRealtimeApi, conversationSharedStorage, AXNewConversationDialogComponent, AXComposerService, AXInfoBarService, AXConversationContainerDirective, AXSidebarComponent, AXInfoBarComponent, AXMessageListComponent, AXComposerComponent, axConversationIndexedDbStorage, AXVoiceRendererComponent, AXImageRendererComponent, AXTextRendererComponent, ERROR_HANDLER_CONFIG, provideConversation, AX_CONVERSATION_ITEM_MUTE_ACTION, AX_CONVERSATION_ITEM_PIN_ACTION, AX_CONVERSATION_ITEM_MARK_READ_ACTION, AX_CONVERSATION_ITEM_DIVIDER, AX_CONVERSATION_ITEM_DELETE_ACTION, AX_CONVERSATION_ITEM_BLOCK_ACTION, AX_CONVERSATION_INFO_BAR_SEARCH_ACTION, AX_CONVERSATION_INFO_BAR_INFO_ACTION, AX_CONVERSATION_INFO_BAR_MUTE_ACTION, AX_CONVERSATION_INFO_BAR_DIVIDER, AX_CONVERSATION_INFO_BAR_DELETE_ACTION, AX_CONVERSATION_INFO_BAR_BLOCK_ACTION, AX_CONVERSATION_TAB_ALL, AX_CONVERSATION_TAB_PRIVATE, AX_CONVERSATION_TAB_GROUPS, AX_CONVERSATION_COMPOSER_EMOJI_TAB, AX_CONVERSATION_COMPOSER_STICKER_TAB, AX_CONVERSATION_MESSAGE_REPLY_ACTION, AX_CONVERSATION_MESSAGE_FORWARD_ACTION, AX_CONVERSATION_MESSAGE_EDIT_ACTION, AX_CONVERSATION_MESSAGE_DELETE_ACTION, AX_CONVERSATION_IMAGE_RENDERER, AX_CONVERSATION_VIDEO_RENDERER, AX_CONVERSATION_AUDIO_RENDERER, AX_CONVERSATION_VOICE_RENDERER, AX_CONVERSATION_FILE_RENDERER, AX_CONVERSATION_LOCATION_RENDERER, AX_CONVERSATION_STICKER_RENDERER } from '@acorex/components/conversation2';
19
19
  import { AXToastService } from '@acorex/components/toast';
20
- import * as i2$1 from '@acorex/core/translation';
20
+ import * as i1 from '@acorex/core/translation';
21
21
  import { AXTranslationService, AXTranslationModule } from '@acorex/core/translation';
22
22
  import * as i1$5 from '@acorex/platform/workflow';
23
23
  import { AXPWorkflowAction, AXPWorkflowModule } from '@acorex/platform/workflow';
24
24
  import * as i2 from '@acorex/components/button';
25
25
  import { AXButtonModule, AXButtonComponent } from '@acorex/components/button';
26
- import * as i2$2 from '@acorex/components/decorators';
26
+ import * as i2$1 from '@acorex/components/decorators';
27
27
  import { AXDecoratorModule } from '@acorex/components/decorators';
28
28
  import { AXDialogService } from '@acorex/components/dialog';
29
29
  import { AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';
@@ -32,7 +32,7 @@ import { map, Subject, filter } from 'rxjs';
32
32
  import * as i3 from '@acorex/components/dropdown';
33
33
  import { AXDropdownModule } from '@acorex/components/dropdown';
34
34
  import { AXTextBoxModule } from '@acorex/components/text-box';
35
- import * as i1 from '@angular/forms';
35
+ import * as i1$1 from '@angular/forms';
36
36
  import { FormsModule } from '@angular/forms';
37
37
  import { AXFabComponent, AXFabItemComponent } from '@acorex/components/fab';
38
38
  import { AXPopupService } from '@acorex/components/popup';
@@ -43,7 +43,7 @@ import { AXListComponent } from '@acorex/components/list';
43
43
  import { AXBasePageComponent } from '@acorex/components/page';
44
44
  import { AXSearchBoxComponent } from '@acorex/components/search-box';
45
45
  import { AXMUsersEntityService } from '@acorex/modules/security-management';
46
- import * as i1$1 from '@acorex/components/wysiwyg';
46
+ import * as i1$2 from '@acorex/components/wysiwyg';
47
47
  import { AXWysiwygModule } from '@acorex/components/wysiwyg';
48
48
  import { trigger, transition, style, animate } from '@angular/animations';
49
49
  import { DomSanitizer } from '@angular/platform-browser';
@@ -53,7 +53,7 @@ import { AXDropdownButtonModule } from '@acorex/components/dropdown-button';
53
53
  import { AXFormModule } from '@acorex/components/form';
54
54
  import * as i6 from '@acorex/components/loading';
55
55
  import { AXLoadingModule } from '@acorex/components/loading';
56
- import * as i2$3 from '@acorex/components/skeleton';
56
+ import * as i2$2 from '@acorex/components/skeleton';
57
57
  import { AXSkeletonModule } from '@acorex/components/skeleton';
58
58
  import { AXToolBarModule } from '@acorex/components/toolbar';
59
59
  import * as i9 from '@acorex/core/format';
@@ -63,7 +63,9 @@ import { AXPLayoutBuilderService, AXPLayoutRendererComponent } from '@acorex/pla
63
63
  import { AXLabelModule } from '@acorex/components/label';
64
64
  import * as i1$4 from '@acorex/cdk/accordion';
65
65
  import { AXAccordionCdkModule } from '@acorex/cdk/accordion';
66
- import * as i1$3 from '@acorex/components/code-editor';
66
+ import * as i2$3 from '@acorex/components/alert';
67
+ import { AXAlertModule } from '@acorex/components/alert';
68
+ import * as i5$1 from '@acorex/components/code-editor';
67
69
  import { AXCodeEditorModule } from '@acorex/components/code-editor';
68
70
 
69
71
  const config = {
@@ -1266,6 +1268,57 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
1266
1268
  type: Injectable
1267
1269
  }], ctorParameters: () => [] });
1268
1270
 
1271
+ //#region ---- Keys ----
1272
+ const AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_KEY = 'conversation-ai-assist';
1273
+ //#endregion
1274
+
1275
+ //#region ---- Imports ----
1276
+ //#endregion
1277
+ //#region ---- Handler ----
1278
+ class AXMConversationAssistBackgroundOperationHandler extends AXPBackgroundOperationHandler {
1279
+ constructor() {
1280
+ super(...arguments);
1281
+ this.providerKey = AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_KEY;
1282
+ this.router = inject(Router);
1283
+ this.chatService = inject(AXConversationService);
1284
+ this.sessionService = inject(AXPSessionService);
1285
+ this.activatedRoute = inject(ActivatedRoute);
1286
+ }
1287
+ async execute(command, operation) {
1288
+ const conversationId = get(operation.data, 'conversationId');
1289
+ if (typeof conversationId !== 'string' || !conversationId.trim()) {
1290
+ console.error('conversationId is missing from assist background operation data.');
1291
+ return;
1292
+ }
1293
+ const app = this.activatedRoute.snapshot.firstChild?.paramMap.get('app') ||
1294
+ this.sessionService.application?.name ||
1295
+ 'platform';
1296
+ switch (command.name) {
1297
+ case 'click':
1298
+ await this.chatService.markAsRead(conversationId);
1299
+ await this.router.navigate([app, 'chat', conversationId]);
1300
+ break;
1301
+ default:
1302
+ break;
1303
+ }
1304
+ }
1305
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMConversationAssistBackgroundOperationHandler, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1306
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMConversationAssistBackgroundOperationHandler }); }
1307
+ }
1308
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMConversationAssistBackgroundOperationHandler, decorators: [{
1309
+ type: Injectable
1310
+ }] });
1311
+ //#endregion
1312
+ //#region ---- Providers ----
1313
+ const AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_HANDLERS = [
1314
+ {
1315
+ provide: AXP_BACKGROUND_OPERATION_HANDLERS,
1316
+ useExisting: AXMConversationAssistBackgroundOperationHandler,
1317
+ multi: true,
1318
+ },
1319
+ AXMConversationAssistBackgroundOperationHandler,
1320
+ ];
1321
+
1269
1322
  //#region ---- Imports ----
1270
1323
  //#endregion
1271
1324
  //#region ---- Module cache (sync reads for action visibility) ----
@@ -1426,7 +1479,7 @@ class AXMAssistSuggestionChipsComponent {
1426
1479
  }
1427
1480
  </div>
1428
1481
  }
1429
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1482
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: i1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1430
1483
  }
1431
1484
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAssistSuggestionChipsComponent, decorators: [{
1432
1485
  type: Component,
@@ -1497,7 +1550,7 @@ class AXMChatMessageListEmptyFallbackComponent {
1497
1550
  </p>
1498
1551
  </div>
1499
1552
  </div>
1500
- `, isInline: true, styles: [":host.ax-message-empty-host{display:block;width:100%;max-width:min(24rem,100%);margin-inline:auto}.ax-message-empty{position:relative;isolation:isolate;padding:.25rem}.ax-message-empty__ambient{position:absolute;inset:-2rem -1rem -1rem;z-index:0;pointer-events:none;overflow:hidden;border-radius:2rem}.ax-message-empty__grid{position:absolute;inset:0;background-image:linear-gradient(rgba(var(--ax-sys-color-on-surface),.04) 1px,transparent 1px),linear-gradient(90deg,rgba(var(--ax-sys-color-on-surface),.04) 1px,transparent 1px);background-size:24px 24px;mask-image:radial-gradient(ellipse 80% 70% at 50% 45%,black 20%,transparent 75%);opacity:.5}.ax-message-empty__card{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;text-align:center;padding:2rem 1.75rem 2.125rem;border-radius:1.25rem;border:1px solid rgba(var(--ax-sys-color-border-light-surface),.85);background:linear-gradient(165deg,rgba(var(--ax-sys-color-lightest-surface),.72),rgba(var(--ax-sys-color-surface),.55))}.ax-message-empty__icon-stack{position:relative;display:grid;place-items:center;margin-bottom:1.25rem}.ax-message-empty__pulse{position:absolute;width:5.5rem;height:5.5rem;border-radius:50%;background:radial-gradient(circle,rgba(var(--ax-sys-color-primary-500),.22),transparent 70%);animation:axm-empty-pulse 3.2s ease-in-out infinite}.ax-message-empty__icon-bg{position:relative;display:grid;place-items:center;width:4.25rem;height:4.25rem;border-radius:1.125rem;background:linear-gradient(145deg,rgba(var(--ax-sys-color-primary-500),.16),rgba(var(--ax-sys-color-primary-600),.06));border:1px solid rgba(var(--ax-sys-color-primary-500),.22);box-shadow:0 1px rgba(var(--ax-sys-color-on-primary-surface),.06) inset,0 12px 28px -16px rgba(var(--ax-sys-color-primary-600),.45)}.ax-message-empty__icon-bg i{font-size:1.875rem;line-height:1;color:rgb(var(--ax-sys-color-primary-600));opacity:.92}.ax-message-empty__eyebrow{margin:0 0 .35rem;font-size:.6875rem;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:rgb(var(--ax-sys-color-primary-600));opacity:.85}.ax-message-empty__title{margin:0 0 .65rem;font-size:1.375rem;font-weight:600;letter-spacing:-.03em;line-height:1.25;color:rgb(var(--ax-sys-color-on-surface))}.ax-message-empty__desc{margin:0;font-size:.9375rem;line-height:1.65;color:rgb(var(--ax-sys-color-on-surface));opacity:.62;max-width:20rem}.ax-message-empty__name{font-weight:600;color:rgb(var(--ax-sys-color-on-surface));opacity:.88}@keyframes axm-empty-pulse{0%,to{transform:scale(.92);opacity:.55}50%{transform:scale(1.06);opacity:.85}}@media(prefers-reduced-motion:reduce){.ax-message-empty__pulse{animation:none}}\n"], dependencies: [{ kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1553
+ `, isInline: true, styles: [":host.ax-message-empty-host{display:block;width:100%;max-width:min(24rem,100%);margin-inline:auto}.ax-message-empty{position:relative;isolation:isolate;padding:.25rem}.ax-message-empty__ambient{position:absolute;inset:-2rem -1rem -1rem;z-index:0;pointer-events:none;overflow:hidden;border-radius:2rem}.ax-message-empty__grid{position:absolute;inset:0;background-image:linear-gradient(rgba(var(--ax-sys-color-on-surface),.04) 1px,transparent 1px),linear-gradient(90deg,rgba(var(--ax-sys-color-on-surface),.04) 1px,transparent 1px);background-size:24px 24px;mask-image:radial-gradient(ellipse 80% 70% at 50% 45%,black 20%,transparent 75%);opacity:.5}.ax-message-empty__card{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;text-align:center;padding:2rem 1.75rem 2.125rem;border-radius:1.25rem;border:1px solid rgba(var(--ax-sys-color-border-light-surface),.85);background:linear-gradient(165deg,rgba(var(--ax-sys-color-lightest-surface),.72),rgba(var(--ax-sys-color-surface),.55))}.ax-message-empty__icon-stack{position:relative;display:grid;place-items:center;margin-bottom:1.25rem}.ax-message-empty__pulse{position:absolute;width:5.5rem;height:5.5rem;border-radius:50%;background:radial-gradient(circle,rgba(var(--ax-sys-color-primary-500),.22),transparent 70%);animation:axm-empty-pulse 3.2s ease-in-out infinite}.ax-message-empty__icon-bg{position:relative;display:grid;place-items:center;width:4.25rem;height:4.25rem;border-radius:1.125rem;background:linear-gradient(145deg,rgba(var(--ax-sys-color-primary-500),.16),rgba(var(--ax-sys-color-primary-600),.06));border:1px solid rgba(var(--ax-sys-color-primary-500),.22);box-shadow:0 1px rgba(var(--ax-sys-color-on-primary-surface),.06) inset,0 12px 28px -16px rgba(var(--ax-sys-color-primary-600),.45)}.ax-message-empty__icon-bg i{font-size:1.875rem;line-height:1;color:rgb(var(--ax-sys-color-primary-600));opacity:.92}.ax-message-empty__eyebrow{margin:0 0 .35rem;font-size:.6875rem;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:rgb(var(--ax-sys-color-primary-600));opacity:.85}.ax-message-empty__title{margin:0 0 .65rem;font-size:1.375rem;font-weight:600;letter-spacing:-.03em;line-height:1.25;color:rgb(var(--ax-sys-color-on-surface))}.ax-message-empty__desc{margin:0;font-size:.9375rem;line-height:1.65;color:rgb(var(--ax-sys-color-on-surface));opacity:.62;max-width:20rem}.ax-message-empty__name{font-weight:600;color:rgb(var(--ax-sys-color-on-surface));opacity:.88}@keyframes axm-empty-pulse{0%,to{transform:scale(.92);opacity:.55}50%{transform:scale(1.06);opacity:.85}}@media(prefers-reduced-motion:reduce){.ax-message-empty__pulse{animation:none}}\n"], dependencies: [{ kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: i1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1501
1554
  }
1502
1555
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMChatMessageListEmptyFallbackComponent, decorators: [{
1503
1556
  type: Component,
@@ -1585,6 +1638,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
1585
1638
  }] });
1586
1639
  /** Conversation CRUD, participants, and inbox for conversation chat. */
1587
1640
  class AXMChatConversationApi extends AXConversationApi {
1641
+ /** Reports which conversation thread is open in chat UI (mock uses this for notifications). */
1642
+ reportFocusedConversation(_conversationId) {
1643
+ // Production connectivity: no-op unless overridden.
1644
+ }
1588
1645
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMChatConversationApi, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1589
1646
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMChatConversationApi }); }
1590
1647
  }
@@ -1599,14 +1656,6 @@ class AXMChatMessageApi extends AXMessageApi {
1599
1656
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMChatMessageApi, decorators: [{
1600
1657
  type: Injectable
1601
1658
  }] });
1602
- /** Media upload and URL resolution for conversation chat. */
1603
- class AXMChatUploaderApi extends AXUploaderApi {
1604
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMChatUploaderApi, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1605
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMChatUploaderApi }); }
1606
- }
1607
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMChatUploaderApi, decorators: [{
1608
- type: Injectable
1609
- }] });
1610
1659
  /** Realtime streams (messages, typing, presence) for conversation chat. */
1611
1660
  class AXMChatRealtimeApi extends AXRealtimeApi {
1612
1661
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMChatRealtimeApi, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
@@ -1634,7 +1683,7 @@ function extractAssistId(conversation) {
1634
1683
  }
1635
1684
  function isStreamingPlaceholder(message) {
1636
1685
  const meta = message.metadata;
1637
- return !!(meta?.['isAssistResponse'] && meta?.['isStreaming']);
1686
+ return meta?.['isAssistResponse'] === true && meta?.['isStreaming'] === true;
1638
1687
  }
1639
1688
  async function conversationHasUserMessage(messageApi, currentUserId, conversationId) {
1640
1689
  const pagination = { page: 0, pageSize: 50 };
@@ -2031,7 +2080,7 @@ class AXMChatEmptyAssistComposerComponent {
2031
2080
  </div>
2032
2081
  <axm-assist-suggestion-chips [items]="starterPromptItems()" />
2033
2082
  </div>
2034
- `, isInline: true, styles: [".axm-chat-empty-assist-composer{width:min(100%,64rem);margin-inline:auto}.axm-chat-empty-assist-composer__caption{margin-bottom:3rem;text-align:center;font-size:clamp(1.9rem,3.4vw,2.7rem);line-height:1.15;font-weight:700;letter-spacing:-.02em}.axm-chat-empty-assist-composer__composer-row{display:flex;gap:.375rem;align-items:end;padding:.5rem;border-radius:2em;border:1px solid;border-color:rgba(var(--ax-sys-color-border-lighter-surface))}.axm-chat-empty-assist-composer__assist-text{display:inline-block;max-width:12rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.axm-chat-empty-assist-composer__textarea{resize:none;overflow:hidden;background:transparent;min-height:2.25rem;max-height:14rem;line-height:1.5;padding-block:.25rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: i2.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i2.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items", "closeParentOnClick", "lockOnLoading"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i3.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXTextBoxModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXMAssistSuggestionChipsComponent, selector: "axm-assist-suggestion-chips", inputs: ["items"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2083
+ `, isInline: true, styles: [".axm-chat-empty-assist-composer{width:min(100%,64rem);margin-inline:auto}.axm-chat-empty-assist-composer__caption{margin-bottom:3rem;text-align:center;font-size:clamp(1.9rem,3.4vw,2.7rem);line-height:1.15;font-weight:700;letter-spacing:-.02em}.axm-chat-empty-assist-composer__composer-row{display:flex;gap:.375rem;align-items:end;padding:.5rem;border-radius:2em;border:1px solid;border-color:rgba(var(--ax-sys-color-border-lighter-surface))}.axm-chat-empty-assist-composer__assist-text{display:inline-block;max-width:12rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.axm-chat-empty-assist-composer__textarea{resize:none;overflow:hidden;background:transparent;min-height:2.25rem;max-height:14rem;line-height:1.5;padding-block:.25rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: i2.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i2.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items", "closeParentOnClick", "lockOnLoading"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i3.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXTextBoxModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXMAssistSuggestionChipsComponent, selector: "axm-assist-suggestion-chips", inputs: ["items"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2035
2084
  }
2036
2085
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMChatEmptyAssistComposerComponent, decorators: [{
2037
2086
  type: Component,
@@ -2335,7 +2384,7 @@ class AXMChatWithAssistDialogComponent extends AXBasePageComponent {
2335
2384
  </div>
2336
2385
  }
2337
2386
  </ng-template>
2338
- `, isInline: true, styles: [":host{display:block}.new-conversation-panel{display:flex;flex-direction:column;width:100%;overflow:hidden}.new-conversation-dialog-content{flex:1;min-height:0;overflow:hidden;display:flex;flex-direction:column;gap:.75rem}.form-field--grow{flex:1;min-height:0;display:flex;flex-direction:column}.form-field{display:flex;flex-direction:column;gap:.35rem}.users-list-wrap{height:min(50vh,36rem);overflow:hidden}.users-list{display:block;height:100%}.users-list-header{display:block;position:sticky;top:0;z-index:1;border-bottom:1px solid rgb(var(--ax-sys-color-border-light-surface))}.users-list-header-inner{padding:.5rem .75rem}.user-item-content{display:flex;align-items:center;gap:.5rem;height:100%;padding:.5rem .75rem;min-width:0}.user-item-text{display:flex;flex-direction:column;justify-content:center;min-width:0;flex:1;gap:.1rem}.user-name-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:1rem;line-height:1.5rem;font-weight:500}.user-description-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.875rem;line-height:1.25rem;font-weight:400;opacity:.72;color:rgb(var(--ax-sys-color-on-surface))}.users-list-empty{padding:1rem;text-align:center;font-size:.85rem;opacity:.7}.dialog-footer{flex-shrink:0;padding:1rem;border-top:1px solid var(--ax-border-color, #e5e7eb);display:flex;justify-content:flex-end}.dialog-footer>ax-suffix{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:.75rem}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: AXListComponent, selector: "ax-list", inputs: ["id", "name", "disabled", "readonly", "valueField", "textField", "textTemplate", "disabledField", "multiple", "selectionMode", "isItemTruncated", "showItemTooltip", "dataSource", "itemHeight", "itemTemplate", "emptyTemplate", "loadingTemplate", "checkbox"], outputs: ["onValueChanged", "disabledChange", "readonlyChange", "onBlur", "onFocus", "onItemClick", "onItemSelected", "onScrolledIndexChanged"] }, { kind: "component", type: AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type", "autoSearch"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "component", type: AXAvatarComponent, selector: "ax-avatar", inputs: ["color", "size", "shape", "look"], outputs: ["sizeChange"] }, { kind: "component", type: AXImageComponent, selector: "ax-image", inputs: ["width", "height", "overlayMode", "src", "alt", "priority", "lazy"], outputs: ["onLoad", "onError"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2$2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i2$1.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2387
+ `, isInline: true, styles: [":host{display:block}.new-conversation-panel{display:flex;flex-direction:column;width:100%;overflow:hidden}.new-conversation-dialog-content{flex:1;min-height:0;overflow:hidden;display:flex;flex-direction:column;gap:.75rem}.form-field--grow{flex:1;min-height:0;display:flex;flex-direction:column}.form-field{display:flex;flex-direction:column;gap:.35rem}.users-list-wrap{height:min(50vh,36rem);overflow:hidden}.users-list{display:block;height:100%}.users-list-header{display:block;position:sticky;top:0;z-index:1;border-bottom:1px solid rgb(var(--ax-sys-color-border-light-surface))}.users-list-header-inner{padding:.5rem .75rem}.user-item-content{display:flex;align-items:center;gap:.5rem;height:100%;padding:.5rem .75rem;min-width:0}.user-item-text{display:flex;flex-direction:column;justify-content:center;min-width:0;flex:1;gap:.1rem}.user-name-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:1rem;line-height:1.5rem;font-weight:500}.user-description-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.875rem;line-height:1.25rem;font-weight:400;opacity:.72;color:rgb(var(--ax-sys-color-on-surface))}.users-list-empty{padding:1rem;text-align:center;font-size:.85rem;opacity:.7}.dialog-footer{flex-shrink:0;padding:1rem;border-top:1px solid var(--ax-border-color, #e5e7eb);display:flex;justify-content:flex-end}.dialog-footer>ax-suffix{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:.75rem}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: AXListComponent, selector: "ax-list", inputs: ["id", "name", "disabled", "readonly", "valueField", "textField", "textTemplate", "disabledField", "multiple", "selectionMode", "isItemTruncated", "showItemTooltip", "dataSource", "itemHeight", "itemTemplate", "emptyTemplate", "loadingTemplate", "checkbox"], outputs: ["onValueChanged", "disabledChange", "readonlyChange", "onBlur", "onFocus", "onItemClick", "onItemSelected", "onScrolledIndexChanged"] }, { kind: "component", type: AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type", "autoSearch"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "component", type: AXAvatarComponent, selector: "ax-avatar", inputs: ["color", "size", "shape", "look"], outputs: ["sizeChange"] }, { kind: "component", type: AXImageComponent, selector: "ax-image", inputs: ["width", "height", "overlayMode", "src", "alt", "priority", "lazy"], outputs: ["onLoad", "onError"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2$1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2339
2388
  }
2340
2389
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMChatWithAssistDialogComponent, decorators: [{
2341
2390
  type: Component,
@@ -2510,7 +2559,7 @@ class AXMChatSidebarNewActionsComponent {
2510
2559
  </ax-fab-item>
2511
2560
  </ax-fab>
2512
2561
  </div>
2513
- `, isInline: true, styles: [":host{display:block}.new-conversation-button-container-inner{display:flex;justify-content:end;align-items:center;padding-inline-end:.25rem}.new-conversation-fab{z-index:1}\n"], dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: AXFabComponent, selector: "ax-fab", inputs: ["label", "popupStyle", "popupPlacement", "size"], outputs: ["popupPlacementChange", "onClick", "onOpened", "onClosed"] }, { kind: "component", type: AXFabItemComponent, selector: "ax-fab-item", inputs: ["label"], outputs: ["onClick"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i2$1.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2562
+ `, isInline: true, styles: [":host{display:block}.new-conversation-button-container-inner{display:flex;justify-content:end;align-items:center;padding-inline-end:.25rem}.new-conversation-fab{z-index:1}\n"], dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: AXFabComponent, selector: "ax-fab", inputs: ["label", "popupStyle", "popupPlacement", "size"], outputs: ["popupPlacementChange", "onClick", "onOpened", "onClosed"] }, { kind: "component", type: AXFabItemComponent, selector: "ax-fab-item", inputs: ["label"], outputs: ["onClick"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2514
2563
  }
2515
2564
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMChatSidebarNewActionsComponent, decorators: [{
2516
2565
  type: Component,
@@ -2540,6 +2589,7 @@ class AXMChatComponent extends AXPPageLayoutBaseComponent {
2540
2589
  super(...arguments);
2541
2590
  //#region ---- Services & Dependencies ----
2542
2591
  this.conversationService = inject(AXConversationService);
2592
+ this.chatConversationApi = inject(AXMChatConversationApi);
2543
2593
  this.composerService = inject(AXComposerService);
2544
2594
  this.infoBarService = inject(AXInfoBarService);
2545
2595
  /** Eagerly resolves tenant debug mode for assist debug download action visibility. */
@@ -2556,6 +2606,7 @@ class AXMChatComponent extends AXPPageLayoutBaseComponent {
2556
2606
  this.#syncConversationWithRoute = effect(() => {
2557
2607
  const conversationId = this.routeConversationId();
2558
2608
  const activeConversationId = this.conversationService.activeConversationId();
2609
+ this.chatConversationApi.reportFocusedConversation(conversationId);
2559
2610
  if (conversationId === activeConversationId) {
2560
2611
  return;
2561
2612
  }
@@ -2684,11 +2735,11 @@ class AXMChatComponent extends AXPPageLayoutBaseComponent {
2684
2735
  return this.activatedRoute.snapshot.parent?.paramMap.get('app') || 'platform';
2685
2736
  }
2686
2737
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMChatComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
2687
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMChatComponent, isStandalone: true, selector: "axm-chat", host: { listeners: { "keydown.escape": "onContainerEscape()" }, properties: { "tabindex": "\"-1\"" } }, usesInheritance: true, ngImport: i0, template: "<axp-page-layout #container axConversationContainer>\n <!-- Sidebar: Always visible on desktop, visible on mobile only when no conversation is selected -->\n\n <axp-layout-start-side class=\"ax-border-e ax-lightest-surface ax-h-full\">\n <axp-layout-content class=\"ax-flex ax-flex-col ax-min-h-0 ax-max-w-80\">\n <div class=\"ax-h-full ax-flex ax-flex-col ax-shrink-0\">\n <ax-conversation-sidebar (conversationSelected)=\"onConversationSelected($event.id)\" class=\"ax-group\">\n <ax-suffix>\n <div class=\"ax-flex ax-h-14 ax-shrink-0 ax-items-center ax-justify-end ax-overflow-hidden\">\n <axm-chat-sidebar-new-actions\n class=\"group-hover:!ax-translate-y-0 !ax-translate-y-36 ax-transition-transform ax-duration-200\"\n (conversationCreated)=\"onConversationSelected($event)\"\n />\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 />\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>\n", styles: [":host ::ng-deep #axp-page-footer-container{padding:0!important}:host ::ng-deep .date-separator{z-index:50!important}:host ::ng-deep axp-layout-header{padding:0!important}\n"], dependencies: [{ kind: "directive", type: AXConversationContainerDirective, selector: "[axConversationContainer]" }, { kind: "component", type: AXSidebarComponent, selector: "ax-conversation-sidebar", outputs: ["conversationSelected"] }, { kind: "component", type: AXInfoBarComponent, selector: "ax-conversation-info-bar", outputs: ["avatarClick", "searchClick", "searchQuery", "menuItemAction"] }, { kind: "component", type: AXMessageListComponent, selector: "ax-conversation-message-list", inputs: ["avatarTemplate"], outputs: ["messageAction"] }, { kind: "component", type: AXComposerComponent, selector: "ax-conversation-composer", outputs: ["messageSent", "emojiClick", "attachClick", "voiceClick"] }, { kind: "component", type: AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2$2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "component", type: AXPThemeLayoutStartSideComponent, selector: "axp-layout-page-start-side, axp-layout-start-side" }, { kind: "component", type: AXMChatSidebarNewActionsComponent, selector: "axm-chat-sidebar-new-actions", outputs: ["conversationCreated"] }, { kind: "component", type: AXMChatEmptyAssistComposerComponent, selector: "axm-chat-empty-assist-composer", outputs: ["conversationCreated"] }, { kind: "component", type: AXMChatAssistComposerStarterPromptsComponent, selector: "axm-chat-assist-composer-starter-prompts" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2738
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMChatComponent, isStandalone: true, selector: "axm-chat", host: { listeners: { "keydown.escape": "onContainerEscape()" }, properties: { "tabindex": "\"-1\"" } }, usesInheritance: true, ngImport: i0, template: "<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>", styles: ["axm-chat #axp-page-footer-container{padding:0!important}axm-chat .date-separator{z-index:50!important}axm-chat axp-layout-header{padding:0!important}axm-chat .message-bubble{padding:.75rem .75rem .25rem!important}\n"], dependencies: [{ kind: "directive", type: AXConversationContainerDirective, selector: "[axConversationContainer]" }, { kind: "component", type: AXSidebarComponent, selector: "ax-conversation-sidebar", outputs: ["conversationSelected"] }, { kind: "component", type: AXInfoBarComponent, selector: "ax-conversation-info-bar", outputs: ["avatarClick", "searchClick", "searchQuery", "menuItemAction"] }, { kind: "component", type: AXMessageListComponent, selector: "ax-conversation-message-list", inputs: ["avatarTemplate"], outputs: ["messageAction"] }, { kind: "component", type: AXComposerComponent, selector: "ax-conversation-composer", outputs: ["messageSent", "emojiClick", "attachClick", "voiceClick"] }, { kind: "component", type: AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2$1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "component", type: AXPThemeLayoutStartSideComponent, selector: "axp-layout-page-start-side, axp-layout-start-side" }, { kind: "component", type: AXMChatSidebarNewActionsComponent, selector: "axm-chat-sidebar-new-actions", outputs: ["conversationCreated"] }, { kind: "component", type: AXMChatEmptyAssistComposerComponent, selector: "axm-chat-empty-assist-composer", outputs: ["conversationCreated"] }, { kind: "component", type: AXMChatAssistComposerStarterPromptsComponent, selector: "axm-chat-assist-composer-starter-prompts" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
2688
2739
  }
2689
2740
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMChatComponent, decorators: [{
2690
2741
  type: Component,
2691
- args: [{ selector: 'axm-chat', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
2742
+ args: [{ selector: 'axm-chat', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [
2692
2743
  AXConversationContainerDirective,
2693
2744
  AXSidebarComponent,
2694
2745
  AXInfoBarComponent,
@@ -2706,7 +2757,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
2706
2757
  ], host: {
2707
2758
  '(keydown.escape)': 'onContainerEscape()',
2708
2759
  '[tabindex]': '"-1"',
2709
- }, template: "<axp-page-layout #container axConversationContainer>\n <!-- Sidebar: Always visible on desktop, visible on mobile only when no conversation is selected -->\n\n <axp-layout-start-side class=\"ax-border-e ax-lightest-surface ax-h-full\">\n <axp-layout-content class=\"ax-flex ax-flex-col ax-min-h-0 ax-max-w-80\">\n <div class=\"ax-h-full ax-flex ax-flex-col ax-shrink-0\">\n <ax-conversation-sidebar (conversationSelected)=\"onConversationSelected($event.id)\" class=\"ax-group\">\n <ax-suffix>\n <div class=\"ax-flex ax-h-14 ax-shrink-0 ax-items-center ax-justify-end ax-overflow-hidden\">\n <axm-chat-sidebar-new-actions\n class=\"group-hover:!ax-translate-y-0 !ax-translate-y-36 ax-transition-transform ax-duration-200\"\n (conversationCreated)=\"onConversationSelected($event)\"\n />\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 />\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>\n", styles: [":host ::ng-deep #axp-page-footer-container{padding:0!important}:host ::ng-deep .date-separator{z-index:50!important}:host ::ng-deep axp-layout-header{padding:0!important}\n"] }]
2760
+ }, template: "<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>", styles: ["axm-chat #axp-page-footer-container{padding:0!important}axm-chat .date-separator{z-index:50!important}axm-chat axp-layout-header{padding:0!important}axm-chat .message-bubble{padding:.75rem .75rem .25rem!important}\n"] }]
2710
2761
  }] });
2711
2762
 
2712
2763
  var chat_component = /*#__PURE__*/Object.freeze({
@@ -2891,9 +2942,271 @@ function axmAssistLastTranscriptLine(transcript) {
2891
2942
  }
2892
2943
  return axmNormalizeAssistTranscriptLineResponses(transcript[transcript.length - 1]);
2893
2944
  }
2945
+ const AXM_ASSIST_NON_MARKDOWN_JSON_TYPES = new Set(['node', 'followUp', 'tool', 'agent', 'file', 'error']);
2946
+ /**
2947
+ * Specialist / structured JSON relayed as {@code text} — not end-user markdown
2948
+ * ({@code node}, {@code followUp}, aggregates, widget layout, etc.).
2949
+ */
2950
+ function axmIsAssistInternalAgentJsonText(raw) {
2951
+ const body = axmParseAssistTranscriptTextEnvelope(raw).body.trim();
2952
+ if (!body.startsWith('{') && !body.startsWith('[')) {
2953
+ return false;
2954
+ }
2955
+ try {
2956
+ const parsed = JSON.parse(body);
2957
+ if (parsed == null) {
2958
+ return false;
2959
+ }
2960
+ if (Array.isArray(parsed)) {
2961
+ return true;
2962
+ }
2963
+ if (typeof parsed !== 'object') {
2964
+ return false;
2965
+ }
2966
+ const rec = parsed;
2967
+ if (typeof rec['resultType'] === 'string') {
2968
+ return true;
2969
+ }
2970
+ if (typeof rec['entityFullName'] === 'string' && ('data' in rec || 'aggregateRows' in rec)) {
2971
+ return true;
2972
+ }
2973
+ const type = rec['type'];
2974
+ if (typeof type === 'string') {
2975
+ if (AXM_ASSIST_NON_MARKDOWN_JSON_TYPES.has(type) || type.includes('Widget:')) {
2976
+ return true;
2977
+ }
2978
+ }
2979
+ return false;
2980
+ }
2981
+ catch {
2982
+ return axmLooksLikeInternalAssistJsonPrefix(body);
2983
+ }
2984
+ }
2985
+ function axmLooksLikeInternalAssistJsonPrefix(raw) {
2986
+ const trimmed = raw.trimStart();
2987
+ if (!trimmed.startsWith('{')) {
2988
+ return false;
2989
+ }
2990
+ return (/^\{\s*"type"\s*:\s*"(?:node|followUp|tool|agent|file|error)"/.test(trimmed) ||
2991
+ /^\{\s*"resultType"\s*:/.test(trimmed) ||
2992
+ /^\{\s*"type"\s*:\s*"[^"]*Widget:/.test(trimmed));
2993
+ }
2994
+ function axmTryExtractJsonObjectAt(source, start) {
2995
+ if (source[start] !== '{') {
2996
+ return null;
2997
+ }
2998
+ let depth = 0;
2999
+ let inString = false;
3000
+ let escape = false;
3001
+ for (let i = start; i < source.length; i++) {
3002
+ const ch = source[i];
3003
+ if (inString) {
3004
+ if (escape) {
3005
+ escape = false;
3006
+ }
3007
+ else if (ch === '\\') {
3008
+ escape = true;
3009
+ }
3010
+ else if (ch === '"') {
3011
+ inString = false;
3012
+ }
3013
+ continue;
3014
+ }
3015
+ if (ch === '"') {
3016
+ inString = true;
3017
+ continue;
3018
+ }
3019
+ if (ch === '{') {
3020
+ depth++;
3021
+ }
3022
+ else if (ch === '}') {
3023
+ depth--;
3024
+ if (depth === 0) {
3025
+ return { json: source.slice(start, i + 1), end: i + 1 };
3026
+ }
3027
+ }
3028
+ }
3029
+ return null;
3030
+ }
3031
+ function axmParseAssistRenderableResponseFromInternalJson(json) {
3032
+ if (!axmIsAssistInternalAgentJsonText(json)) {
3033
+ return null;
3034
+ }
3035
+ try {
3036
+ const parsed = JSON.parse(axmParseAssistTranscriptTextEnvelope(json).body.trim());
3037
+ if (parsed == null || typeof parsed !== 'object' || Array.isArray(parsed)) {
3038
+ return null;
3039
+ }
3040
+ const rec = parsed;
3041
+ const type = rec['type'];
3042
+ if (type === 'node' && 'content' in rec && axmAssistWidgetNodeFromUnknown(rec) != null) {
3043
+ return { type: 'node', content: rec['content'] };
3044
+ }
3045
+ if (type === 'followUp' && Array.isArray(rec['content'])) {
3046
+ const items = axmAssistNormalizeFollowUpItemsForConversation(rec['content']);
3047
+ return items.length > 0 ? { type: 'followUp', content: items } : null;
3048
+ }
3049
+ if (type === 'file' && rec['content'] != null && typeof rec['content'] === 'object' && !Array.isArray(rec['content'])) {
3050
+ const fileContent = rec['content'];
3051
+ const fileId = typeof fileContent.fileId === 'string' ? fileContent.fileId.trim() : '';
3052
+ if (fileId) {
3053
+ return {
3054
+ type: 'file',
3055
+ content: {
3056
+ fileId,
3057
+ ...(fileContent.isDownloadable ? { isDownloadable: true } : {}),
3058
+ },
3059
+ };
3060
+ }
3061
+ }
3062
+ }
3063
+ catch {
3064
+ return null;
3065
+ }
3066
+ return null;
3067
+ }
3068
+ /**
3069
+ * Splits user-facing markdown from embedded {@code node}/{@code followUp} JSON so widgets render after text.
3070
+ */
3071
+ function axmPartitionAssistAnswerText(raw) {
3072
+ if (!raw) {
3073
+ return { markdown: '', renderable: [] };
3074
+ }
3075
+ const textParts = [];
3076
+ const renderable = [];
3077
+ let i = 0;
3078
+ while (i < raw.length) {
3079
+ const braceAt = raw.indexOf('{', i);
3080
+ if (braceAt < 0) {
3081
+ textParts.push(raw.slice(i));
3082
+ break;
3083
+ }
3084
+ if (braceAt > i) {
3085
+ textParts.push(raw.slice(i, braceAt));
3086
+ }
3087
+ const extracted = axmTryExtractJsonObjectAt(raw, braceAt);
3088
+ if (extracted) {
3089
+ const structured = axmParseAssistRenderableResponseFromInternalJson(extracted.json);
3090
+ if (structured) {
3091
+ renderable.push(structured);
3092
+ }
3093
+ else if (!axmIsAssistInternalAgentJsonText(extracted.json)) {
3094
+ textParts.push(extracted.json);
3095
+ }
3096
+ i = extracted.end;
3097
+ continue;
3098
+ }
3099
+ if (axmLooksLikeInternalAssistJsonPrefix(raw.slice(braceAt))) {
3100
+ break;
3101
+ }
3102
+ textParts.push(raw[braceAt] ?? '');
3103
+ i = braceAt + 1;
3104
+ }
3105
+ return {
3106
+ markdown: textParts
3107
+ .join('')
3108
+ .replace(/\n{3,}/g, '\n\n')
3109
+ .trim(),
3110
+ renderable,
3111
+ };
3112
+ }
3113
+ /** Removes embedded {@code node}/{@code followUp}/aggregate JSON from answer markdown (stream + finalize). */
3114
+ function axmSanitizeAssistUserAnswerText(raw) {
3115
+ return axmPartitionAssistAnswerText(raw).markdown;
3116
+ }
3117
+ /** End-user markdown from the supervisor — excludes empty fences and internal JSON blobs. */
3118
+ function axmIsUserVisibleAssistTextContent(raw) {
3119
+ const body = axmParseAssistTranscriptTextEnvelope(raw).body.trim();
3120
+ if (!body || body === '```' || body === '```json') {
3121
+ return false;
3122
+ }
3123
+ return !axmIsAssistInternalAgentJsonText(raw);
3124
+ }
2894
3125
  /**
2895
- * User-facing payload line for the assist bubble: merges visible assistant segments in the current turn,
2896
- * including {@code followUp} from tool {@code agent_result} after auto-invoked specialists.
3126
+ * Merges streamed answer markdown with transcript-derived text so finalize does not drop interim narration.
3127
+ */
3128
+ function axmResolveAssistFinalAnswerText(streamDraft, transcriptAnswer) {
3129
+ const stream = axmSanitizeAssistUserAnswerText(streamDraft);
3130
+ const transcript = axmSanitizeAssistUserAnswerText(transcriptAnswer);
3131
+ if (!stream) {
3132
+ return transcript;
3133
+ }
3134
+ if (!transcript) {
3135
+ return stream;
3136
+ }
3137
+ if (stream.includes(transcript)) {
3138
+ return stream;
3139
+ }
3140
+ if (transcript.includes(stream)) {
3141
+ return transcript;
3142
+ }
3143
+ return axmSanitizeAssistUserAnswerText(`${stream}\n\n${transcript}`);
3144
+ }
3145
+ function axmMergeAssistPayloadResponses(line, partitioned) {
3146
+ const nodeKeys = new Set();
3147
+ const fileIds = new Set();
3148
+ const attachments = [];
3149
+ let followUp = null;
3150
+ const tryPush = (seg) => {
3151
+ if (seg.type === 'node') {
3152
+ const key = JSON.stringify(seg.content);
3153
+ if (nodeKeys.has(key)) {
3154
+ return;
3155
+ }
3156
+ nodeKeys.add(key);
3157
+ attachments.push(seg);
3158
+ return;
3159
+ }
3160
+ if (seg.type === 'file') {
3161
+ const fileId = seg.content.fileId?.trim() ?? '';
3162
+ if (fileId && fileIds.has(fileId)) {
3163
+ return;
3164
+ }
3165
+ if (fileId) {
3166
+ fileIds.add(fileId);
3167
+ }
3168
+ attachments.push(seg);
3169
+ return;
3170
+ }
3171
+ if (seg.type === 'followUp' && followUp == null && seg.content.length > 0) {
3172
+ followUp = seg;
3173
+ }
3174
+ };
3175
+ for (const seg of line.responses) {
3176
+ if (seg.type === 'node' || seg.type === 'file') {
3177
+ tryPush(seg);
3178
+ }
3179
+ else if (seg.type === 'followUp') {
3180
+ tryPush(seg);
3181
+ }
3182
+ }
3183
+ for (const seg of partitioned.renderable) {
3184
+ tryPush(seg);
3185
+ }
3186
+ const responses = [];
3187
+ if (partitioned.markdown) {
3188
+ responses.push({ type: 'text', content: partitioned.markdown });
3189
+ }
3190
+ responses.push(...attachments);
3191
+ if (followUp) {
3192
+ responses.push(followUp);
3193
+ }
3194
+ if (responses.length === 0) {
3195
+ return line;
3196
+ }
3197
+ return axmNormalizeAssistTranscriptLineResponses({ role: 'assistant', responses });
3198
+ }
3199
+ /** Replaces the payload line's text segment with the finalized answer markdown. */
3200
+ function axmApplyAnswerTextToAssistPayloadLine(line, answerText) {
3201
+ const partitioned = axmPartitionAssistAnswerText(answerText);
3202
+ if (!partitioned.markdown && partitioned.renderable.length === 0) {
3203
+ return line;
3204
+ }
3205
+ return axmMergeAssistPayloadResponses(line, partitioned);
3206
+ }
3207
+ /**
3208
+ * User-facing payload line for the assist bubble: supervisor markdown narration for the turn, plus
3209
+ * {@code node}/{@code file}/{@code followUp} from the turn (including specialist {@code agent_result}).
2897
3210
  */
2898
3211
  function axmAssistUserFacingPayloadLine(transcript) {
2899
3212
  if (transcript.length === 0) {
@@ -2907,11 +3220,12 @@ function axmAssistUserFacingPayloadLine(transcript) {
2907
3220
  }
2908
3221
  }
2909
3222
  const tail = lastUserIdx >= 0 ? transcript.slice(lastUserIdx) : transcript;
2910
- const responses = [];
3223
+ const attachmentResponses = [];
3224
+ const rawTextBodies = [];
2911
3225
  let followUpItems = null;
2912
3226
  const nodeKeys = new Set();
2913
3227
  const fileIds = new Set();
2914
- const tryPushVisible = (seg) => {
3228
+ const tryPushAttachment = (seg) => {
2915
3229
  if (seg.type === 'node') {
2916
3230
  const key = JSON.stringify(seg.content);
2917
3231
  if (nodeKeys.has(key)) {
@@ -2928,13 +3242,22 @@ function axmAssistUserFacingPayloadLine(transcript) {
2928
3242
  fileIds.add(fileId);
2929
3243
  }
2930
3244
  }
2931
- responses.push(seg);
3245
+ else {
3246
+ return;
3247
+ }
3248
+ attachmentResponses.push(seg);
2932
3249
  };
2933
3250
  for (const m of tail) {
2934
3251
  if (m.role === 'assistant' && !axpAiChatMessageIsDelegatedReflectionExcluded(m)) {
2935
3252
  for (const r of m.responses) {
2936
- if (r.type === 'text' || r.type === 'node' || r.type === 'file') {
2937
- tryPushVisible(r);
3253
+ if (r.type === 'text') {
3254
+ const body = axmParseAssistTranscriptTextEnvelope(r.content).body.trim();
3255
+ if (body) {
3256
+ rawTextBodies.push(body);
3257
+ }
3258
+ }
3259
+ else if (r.type === 'node' || r.type === 'file') {
3260
+ tryPushAttachment(r);
2938
3261
  }
2939
3262
  else if (r.type === 'followUp') {
2940
3263
  followUpItems = r.content;
@@ -2957,12 +3280,29 @@ function axmAssistUserFacingPayloadLine(transcript) {
2957
3280
  if (seg.type === 'followUp' && followUpItems == null) {
2958
3281
  followUpItems = seg.content;
2959
3282
  }
2960
- else if (seg.type === 'text' || seg.type === 'node' || seg.type === 'file') {
2961
- tryPushVisible(seg);
3283
+ else if (seg.type === 'node' || seg.type === 'file') {
3284
+ tryPushAttachment(seg);
2962
3285
  }
2963
3286
  }
2964
3287
  }
2965
3288
  }
3289
+ const partitioned = axmPartitionAssistAnswerText(rawTextBodies
3290
+ .map((body) => body.trim())
3291
+ .filter((body) => body.length > 0)
3292
+ .join('\n\n'));
3293
+ for (const seg of partitioned.renderable) {
3294
+ if (seg.type === 'node' || seg.type === 'file') {
3295
+ tryPushAttachment(seg);
3296
+ }
3297
+ else if (seg.type === 'followUp' && followUpItems == null) {
3298
+ followUpItems = seg.content;
3299
+ }
3300
+ }
3301
+ const responses = [];
3302
+ if (partitioned.markdown) {
3303
+ responses.push({ type: 'text', content: partitioned.markdown });
3304
+ }
3305
+ responses.push(...attachmentResponses);
2966
3306
  if (followUpItems != null && followUpItems.length > 0) {
2967
3307
  responses.push({ type: 'followUp', content: followUpItems });
2968
3308
  }
@@ -3027,8 +3367,7 @@ function axmUserVisibleDelegatedSegment(seg) {
3027
3367
  return true;
3028
3368
  }
3029
3369
  if (seg.type === 'text') {
3030
- const body = axmParseAssistTranscriptTextEnvelope(seg.content).body.trim();
3031
- return body.length > 0 && body !== '```' && body !== '```json';
3370
+ return axmIsUserVisibleAssistTextContent(seg.content);
3032
3371
  }
3033
3372
  if (seg.type === 'followUp') {
3034
3373
  return seg.content.length > 0;
@@ -3047,8 +3386,7 @@ function axmUserVisibleChatResponse(line, seg) {
3047
3386
  return true;
3048
3387
  }
3049
3388
  if (seg.type === 'text') {
3050
- const body = axmParseAssistTranscriptTextEnvelope(seg.content).body.trim();
3051
- return body.length > 0 && body !== '```' && body !== '```json';
3389
+ return axmIsUserVisibleAssistTextContent(seg.content);
3052
3390
  }
3053
3391
  if (seg.type === 'followUp') {
3054
3392
  return seg.content.length > 0;
@@ -3141,6 +3479,47 @@ function axmAssistFollowUpItemsFromUnknown(raw) {
3141
3479
  }
3142
3480
  //#endregion
3143
3481
 
3482
+ //#region ---- Types ----
3483
+ //#endregion
3484
+ //#region ---- Readers ----
3485
+ /**
3486
+ * Resolves assist response lifecycle from message metadata.
3487
+ * Falls back to legacy `isStreaming` when `assistResponseStatus` is absent.
3488
+ */
3489
+ function axmReadAssistResponseStatus(metadata) {
3490
+ const meta = metadata;
3491
+ if (!meta) {
3492
+ return 'complete';
3493
+ }
3494
+ const status = meta['assistResponseStatus'];
3495
+ if (status === 'streaming' ||
3496
+ status === 'complete' ||
3497
+ status === 'incomplete' ||
3498
+ status === 'failed') {
3499
+ return status;
3500
+ }
3501
+ if (meta['isStreaming'] === true) {
3502
+ return 'streaming';
3503
+ }
3504
+ return 'complete';
3505
+ }
3506
+ /** User-facing error stored when generation fails (`assistResponseError`). */
3507
+ function axmReadAssistResponseError(metadata) {
3508
+ const meta = metadata;
3509
+ if (!meta) {
3510
+ return undefined;
3511
+ }
3512
+ const err = meta['assistResponseError'];
3513
+ return typeof err === 'string' && err.trim() ? err.trim() : undefined;
3514
+ }
3515
+ function axmIsAssistRetryableStatus(status) {
3516
+ return status === 'incomplete' || status === 'failed';
3517
+ }
3518
+ function axmIsAssistStreamingStatus(status) {
3519
+ return status === 'streaming';
3520
+ }
3521
+ //#endregion
3522
+
3144
3523
  /**
3145
3524
  * True when the participant is an AI Assist peer (synthetic `assist-*` id or assist metadata).
3146
3525
  * Such entries should not appear in human-only pickers (e.g. regular "New chat").
@@ -3980,7 +4359,7 @@ class AXMCommentComponent {
3980
4359
  this.showToast(content, color);
3981
4360
  }
3982
4361
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMCommentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3983
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMCommentComponent, isStandalone: true, selector: "axm-comment", inputs: { refrenceType: { classPropertyName: "refrenceType", publicName: "refrenceType", isSignal: true, isRequired: true, transformFunction: null }, refrenceId: { classPropertyName: "refrenceId", publicName: "refrenceId", isSignal: true, isRequired: true, transformFunction: null }, subject: { classPropertyName: "subject", publicName: "subject", isSignal: true, isRequired: true, transformFunction: null } }, viewQueries: [{ propertyName: "wysiwygEditor", first: true, predicate: ["w"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"ax-size-full ax-flex ax-flex-col ax-justify-between ax-overflow-hidden\">\n <ax-comment-container class=\"ax-overflow-auto\">\n @if (isLoading()) {\n <div class=\"ax-flex ax-items-center ax-py-12 ax-bg-lightest ax-px-5\">\n <ax-skeleton class=\"ax-min-w-16 ax-h-16 ax-rounded-full ax-me-4\"></ax-skeleton>\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-w-full\">\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-2 ax-rounded-full\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-2 ax-rounded-full\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-8/12 ax-h-2 ax-rounded-full\"></ax-skeleton>\n </div>\n </div>\n } @else if (comments().length > 0) {\n <ax-comment-view class=\"ax-bg-lightest\">\n @for (comment of comments(); track comment.id) {\n <ax-comment-item\n [id]=\"comment.id!\"\n [replyCount]=\"comment.replyCount\"\n [repliesExpanded]=\"isRepliesExpanded(comment.id!)\"\n (repliesExpandedChange)=\"onRepliesExpandedChange(comment.id!, $event)\"\n [class.highlighted]=\"highlightedCommentId() === comment.id\"\n [@fadeIn]\n >\n <axp-user-avatar #user [size]=\"40\" [userId]=\"comment.author.id\" ngProjectAs=\"'ax-avatar'\"></axp-user-avatar>\n <ax-title>{{ user.firstName() + ' ' + user.lastName() }}</ax-title>\n <ax-comment-date>{{ comment.auditInfo?.created?.at! | format: 'timeleft' | async }} </ax-comment-date>\n <ax-comment-menu-options>\n <ax-button class=\"ax-sm\" look=\"blank\" color=\"neutral\">\n <ax-icon icon=\"ax-icon ax-icon-solid ax-icon-more-horizontal\"></ax-icon>\n </ax-button>\n\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item\n [text]=\"('@conversation:comments.actions.edit.title' | translate | async) ?? ''\"\n color=\"neutral\"\n (click)=\"editMessage(comment, undefined, user.firstName() + ' ' + user.lastName())\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-edit\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n\n <ax-button-item\n [text]=\"('@conversation:comments.actions.delete.title' | translate | async) ?? ''\"\n color=\"danger\"\n (click)=\"deleteComment(comment.id!)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-comment-menu-options>\n <ax-content [innerHTML]=\"sanitizeHtml(comment.message.content)\"></ax-content>\n <ax-comment-like (click)=\"toggleLike(comment)\" [like]=\"isLikedByUser(comment)\">\n {{ getReactionsCount(comment) }}\n </ax-comment-like>\n <ax-comment-reply-text\n (click)=\"replyMessage(comment, undefined, user.firstName() + ' ' + user.lastName())\"\n ></ax-comment-reply-text>\n @for (reply of comment.replies; track reply.id) {\n <ax-comment-item [id]=\"reply.id\" [class.highlighted]=\"highlightedCommentId() === reply.id\" [@fadeIn]>\n <axp-user-avatar\n #user2\n [size]=\"40\"\n [userId]=\"reply.author.id\"\n ngProjectAs=\"'ax-avatar'\"\n ></axp-user-avatar>\n <ax-title>{{ user2.firstName() + ' ' + user2.lastName() }}</ax-title>\n <ax-comment-date>{{ reply.auditInfo?.created?.at! | format: 'timeleft' | async }} </ax-comment-date>\n <ax-comment-menu-options>\n <ax-button class=\"ax-sm\" look=\"blank\" color=\"neutral\">\n <ax-icon icon=\"ax-icon ax-icon-solid ax-icon-more-horizontal\"></ax-icon>\n </ax-button>\n\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item\n [text]=\"('@conversation:comments.actions.edit.title' | translate | async) ?? ''\"\n color=\"neutral\"\n (click)=\"editMessage(comment, reply, user2.firstName() + ' ' + user2.lastName())\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-edit\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item\n [text]=\"('@conversation:comments.actions.delete.title' | translate | async) ?? ''\"\n color=\"danger\"\n (click)=\"deleteComment(reply.id!)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-comment-menu-options>\n <ax-content [innerHTML]=\"sanitizeHtml(reply.message.content)\"></ax-content>\n <ax-comment-like (click)=\"toggleLike(reply)\" [like]=\"isLikedByUser(reply)\">\n {{ getReactionsCount(reply) }}\n </ax-comment-like>\n <ax-comment-reply-text\n (click)=\"replyMessage(comment, reply, user2.firstName() + ' ' + user2.lastName())\"\n ></ax-comment-reply-text>\n </ax-comment-item>\n }\n </ax-comment-item>\n }\n </ax-comment-view>\n } @else {\n <div>\n <div class=\"ax-flex ax-flex-col ax-gap-4 ax-justify-center ax-items-center ax-p-10\">\n <svg\n class=\"ax-mx-auto\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"154\"\n height=\"161\"\n viewBox=\"0 0 154 161\"\n fill=\"none\"\n >\n <path\n d=\"M0.0616455 84.4268C0.0616455 42.0213 34.435 7.83765 76.6507 7.83765C118.803 7.83765 153.224 42.0055 153.224 84.4268C153.224 102.42 147.026 118.974 136.622 132.034C122.282 150.138 100.367 161 76.6507 161C52.7759 161 30.9882 150.059 16.6633 132.034C6.25961 118.974 0.0616455 102.42 0.0616455 84.4268Z\"\n fill=\"#EEF2FF\"\n />\n <path\n d=\"M96.8189 0.632498L96.8189 0.632384L96.8083 0.630954C96.2034 0.549581 95.5931 0.5 94.9787 0.5H29.338C22.7112 0.5 17.3394 5.84455 17.3394 12.4473V142.715C17.3394 149.318 22.7112 154.662 29.338 154.662H123.948C130.591 154.662 135.946 149.317 135.946 142.715V38.9309C135.946 38.0244 135.847 37.1334 135.648 36.2586L135.648 36.2584C135.117 33.9309 133.874 31.7686 132.066 30.1333C132.066 30.1331 132.065 30.1329 132.065 30.1327L103.068 3.65203C103.068 3.6519 103.067 3.65177 103.067 3.65164C101.311 2.03526 99.1396 0.995552 96.8189 0.632498Z\"\n fill=\"white\"\n stroke=\"#E5E7EB\"\n />\n <ellipse cx=\"80.0618\" cy=\"81\" rx=\"28.0342\" ry=\"28.0342\" fill=\"#EEF2FF\" />\n <path\n d=\"M99.2393 61.3061L99.2391 61.3058C88.498 50.5808 71.1092 50.5804 60.3835 61.3061C49.6423 72.0316 49.6422 89.4361 60.3832 100.162C71.109 110.903 88.4982 110.903 99.2393 100.162C109.965 89.4363 109.965 72.0317 99.2393 61.3061ZM105.863 54.6832C120.249 69.0695 120.249 92.3985 105.863 106.785C91.4605 121.171 68.1468 121.171 53.7446 106.785C39.3582 92.3987 39.3582 69.0693 53.7446 54.683C68.1468 40.2965 91.4605 40.2966 105.863 54.6832Z\"\n stroke=\"#E5E7EB\"\n />\n <path\n d=\"M110.782 119.267L102.016 110.492C104.888 108.267 107.476 105.651 109.564 102.955L118.329 111.729L110.782 119.267Z\"\n stroke=\"#E5E7EB\"\n />\n <path\n d=\"M139.122 125.781L139.122 125.78L123.313 109.988C123.313 109.987 123.313 109.987 123.312 109.986C121.996 108.653 119.849 108.657 118.521 109.985L118.871 110.335L118.521 109.985L109.047 119.459C107.731 120.775 107.735 122.918 109.044 124.247L109.047 124.249L124.858 140.06C128.789 143.992 135.191 143.992 139.122 140.06C143.069 136.113 143.069 129.728 139.122 125.781Z\"\n fill=\"#A5B4FC\"\n stroke=\"#818CF8\"\n />\n <path\n d=\"M83.185 87.2285C82.5387 87.2285 82.0027 86.6926 82.0027 86.0305C82.0027 83.3821 77.9987 83.3821 77.9987 86.0305C77.9987 86.6926 77.4627 87.2285 76.8006 87.2285C76.1543 87.2285 75.6183 86.6926 75.6183 86.0305C75.6183 80.2294 84.3831 80.2451 84.3831 86.0305C84.3831 86.6926 83.8471 87.2285 83.185 87.2285Z\"\n fill=\"#4F46E5\"\n />\n <path\n d=\"M93.3528 77.0926H88.403C87.7409 77.0926 87.2049 76.5567 87.2049 75.8946C87.2049 75.2483 87.7409 74.7123 88.403 74.7123H93.3528C94.0149 74.7123 94.5509 75.2483 94.5509 75.8946C94.5509 76.5567 94.0149 77.0926 93.3528 77.0926Z\"\n fill=\"#4F46E5\"\n />\n <path\n d=\"M71.5987 77.0925H66.6488C65.9867 77.0925 65.4507 76.5565 65.4507 75.8945C65.4507 75.2481 65.9867 74.7122 66.6488 74.7122H71.5987C72.245 74.7122 72.781 75.2481 72.781 75.8945C72.781 76.5565 72.245 77.0925 71.5987 77.0925Z\"\n fill=\"#4F46E5\"\n />\n <rect x=\"38.3522\" y=\"21.5128\" width=\"41.0256\" height=\"2.73504\" rx=\"1.36752\" fill=\"#4F46E5\" />\n <rect x=\"38.3522\" y=\"133.65\" width=\"54.7009\" height=\"5.47009\" rx=\"2.73504\" fill=\"#A5B4FC\" />\n <rect x=\"38.3522\" y=\"29.7179\" width=\"13.6752\" height=\"2.73504\" rx=\"1.36752\" fill=\"#4F46E5\" />\n <circle cx=\"56.13\" cy=\"31.0854\" r=\"1.36752\" fill=\"#4F46E5\" />\n <circle cx=\"61.6001\" cy=\"31.0854\" r=\"1.36752\" fill=\"#4F46E5\" />\n <circle cx=\"67.0702\" cy=\"31.0854\" r=\"1.36752\" fill=\"#4F46E5\" />\n </svg>\n <div>\n <h2 class=\"ax-text-center ax-text-neutral-600 ax-font-semibold ax-leading-loose ax-pb-2\">\n {{ '@conversation:comments.components.comment.empty-states.no-comments.title' | translate | async }}\n </h2>\n </div>\n </div>\n </div>\n }\n </ax-comment-container>\n <div class=\"ax-flex ax-flex-col\">\n @if (isReplyingMode() || isEditingMode()) {\n <div\n class=\"ax-flex ax-justify-between ax-rounded-b-none ax-border ax-border-surface ax-border-b-0 ax-rounded-lg ax-px-6 ax-py-3 ax-w-full ax-items-center ax-overflow-hidden ax-text-sm ax-leading-none\"\n >\n <div (click)=\"scrollMain()\" class=\"ax-flex ax-justify-start ax-items-center ax-cursor-pointer\">\n <i\n [class]=\"isReplyingMode() ? 'fa-reply' : 'fa-pen'\"\n class=\"fa-light ax-text-primary-500 dark:ax-text-primary-300 ax-text-2xl ax-me-4\"\n ></i>\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-justify-between ax-align-middle ax-leading-4 ax-overflow-hidden\">\n <p class=\"ax-text-primary-500 dark:ax-text-primary-300\">\n @if (isReplyingMode()) {\n {{ '@conversation:comments.actions.reply-to' | translate | async }}\n <span class=\"ax-font-bold\">{{ activeReplyComment()?.userName }}</span>\n } @else {\n {{ '@conversation:comments.actions.edit-message' | translate | async }}\n }\n </p>\n <div\n class=\"ax-truncate\"\n [innerHTML]=\"\n isReplyingMode()\n ? sanitizeHtml(activeReplyComment()?.message?.content ?? '')\n : sanitizeHtml(activeEditComment()?.message?.content ?? '')\n \"\n ></div>\n </div>\n </div>\n <div><i (click)=\"resetReplyEditState()\" class=\"fa-light ax-text-2xl fa-xmark ax-cursor-pointer\"></i></div>\n </div>\n }\n <ax-wysiwyg-container #w [look]=\"wysiwygOptions().look\" [(ngModel)]=\"commentContent\">\n <ax-wysiwyg-view class=\"ax-min-h-28\"></ax-wysiwyg-view>\n <ax-wysiwyg-toolbar>\n <ax-prefix>\n <ax-wysiwyg-history></ax-wysiwyg-history>\n <ax-wysiwyg-font-style></ax-wysiwyg-font-style>\n <ax-wysiwyg-colors></ax-wysiwyg-colors>\n <ax-wysiwyg-list></ax-wysiwyg-list>\n <ax-wysiwyg-alignment></ax-wysiwyg-alignment>\n </ax-prefix>\n <ax-suffix>\n <ax-button\n [disabled]=\"hasCooldown() || !commentContent()\"\n (click)=\"submitComment()\"\n [text]=\"'@conversation:comments.actions.send.title' | translate | async\"\n >\n @if (isSubmitting()) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n </ax-suffix>\n </ax-wysiwyg-toolbar>\n </ax-wysiwyg-container>\n </div>\n</div>\n", styles: [":host{display:block;width:100%;height:100%}ax-wysiwyg-container .ax-editor-container{border-top-left-radius:0!important;border-top-right-radius:0!important}ax-wysiwyg-container .ax-error-message{padding-left:.5rem}ax-comment-item.highlighted{animation:comment-highlight-pulse 2.5s cubic-bezier(.4,0,.2,1) forwards}@keyframes comment-highlight-pulse{0%{background-color:transparent;box-shadow:inset 3px 0 0 0 transparent}10%{background-color:rgba(var(--ax-sys-color-primary-lightest-surface),.5);box-shadow:inset 3px 0 rgb(var(--ax-sys-color-primary-surface))}35%{background-color:rgba(var(--ax-sys-color-primary-lightest-surface),.3);box-shadow:inset 3px 0 rgba(var(--ax-sys-color-primary-lighter-surface),.8)}60%{background-color:rgba(var(--ax-sys-color-primary-lightest-surface),.4);box-shadow:inset 3px 0 rgba(var(--ax-sys-color-primary-lightest-surface),.6)}to{background-color:transparent;box-shadow:inset 3px 0 0 0 transparent}}\n"], dependencies: [{ kind: "ngmodule", type: AXWysiwygModule }, { kind: "component", type: i1$1.AXWysiwygContainerComponent, selector: "ax-wysiwyg-container", inputs: ["look", "readonly", "disabled", "value", "placeHolder"], outputs: ["onValueChanged"] }, { kind: "component", type: i1$1.AXWysiwygViewComponent, selector: "ax-wysiwyg-view" }, { kind: "component", type: i1$1.AXWysiwygAlignmentComponent, selector: "ax-wysiwyg-alignment" }, { kind: "component", type: i1$1.AXWysiwygColorsComponent, selector: "ax-wysiwyg-colors" }, { kind: "component", type: i1$1.AXWysiwygFontStyleComponent, selector: "ax-wysiwyg-font-style" }, { kind: "component", type: i1$1.AXWysiwygHistoryComponent, selector: "ax-wysiwyg-history" }, { kind: "component", type: i1$1.AXWysiwygListComponent, selector: "ax-wysiwyg-list" }, { kind: "component", type: i1$1.AXWysiwygToolbarComponent, selector: "ax-wysiwyg-toolbar" }, { kind: "ngmodule", type: AXConversationModule }, { kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i2$3.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2$2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXCommentModule }, { kind: "component", type: i4.AXCommentViewComponent, selector: "ax-comment-view" }, { kind: "component", type: i4.AXCommentContainerComponent, selector: "ax-comment-container" }, { kind: "component", type: i4.AXCommentItemComponent, selector: "ax-comment-item", inputs: ["replyCount", "repliesExpanded"], outputs: ["repliesExpandedChange"] }, { kind: "component", type: i4.AXCommentLikeComponent, selector: "ax-comment-like", inputs: ["like"], outputs: ["likeChange"] }, { kind: "component", type: i4.AXMenuOptionsComponent, selector: "ax-comment-menu-options" }, { kind: "component", type: i4.AXCommentReplyTextComponent, selector: "ax-comment-reply-text" }, { kind: "component", type: i4.AXCommentDateComponent, selector: "ax-comment-date" }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: i2.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i2.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items", "closeParentOnClick", "lockOnLoading"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXAvatarModule }, { kind: "ngmodule", type: AXImageModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i6.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i3.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXFormatModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "ngmodule", type: AXToolBarModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "component", type: AXPUserAvatarComponent, selector: "axp-user-avatar", inputs: ["size", "userId"] }, { kind: "pipe", type: i9.AXFormatPipe, name: "format" }, { kind: "pipe", type: i2$1.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], animations: [
4362
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMCommentComponent, isStandalone: true, selector: "axm-comment", inputs: { refrenceType: { classPropertyName: "refrenceType", publicName: "refrenceType", isSignal: true, isRequired: true, transformFunction: null }, refrenceId: { classPropertyName: "refrenceId", publicName: "refrenceId", isSignal: true, isRequired: true, transformFunction: null }, subject: { classPropertyName: "subject", publicName: "subject", isSignal: true, isRequired: true, transformFunction: null } }, viewQueries: [{ propertyName: "wysiwygEditor", first: true, predicate: ["w"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"ax-size-full ax-flex ax-flex-col ax-justify-between ax-overflow-hidden\">\n <ax-comment-container class=\"ax-overflow-auto\">\n @if (isLoading()) {\n <div class=\"ax-flex ax-items-center ax-py-12 ax-bg-lightest ax-px-5\">\n <ax-skeleton class=\"ax-min-w-16 ax-h-16 ax-rounded-full ax-me-4\"></ax-skeleton>\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-w-full\">\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-2 ax-rounded-full\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-2 ax-rounded-full\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-8/12 ax-h-2 ax-rounded-full\"></ax-skeleton>\n </div>\n </div>\n } @else if (comments().length > 0) {\n <ax-comment-view class=\"ax-bg-lightest\">\n @for (comment of comments(); track comment.id) {\n <ax-comment-item\n [id]=\"comment.id!\"\n [replyCount]=\"comment.replyCount\"\n [repliesExpanded]=\"isRepliesExpanded(comment.id!)\"\n (repliesExpandedChange)=\"onRepliesExpandedChange(comment.id!, $event)\"\n [class.highlighted]=\"highlightedCommentId() === comment.id\"\n [@fadeIn]\n >\n <axp-user-avatar #user [size]=\"40\" [userId]=\"comment.author.id\" ngProjectAs=\"'ax-avatar'\"></axp-user-avatar>\n <ax-title>{{ user.firstName() + ' ' + user.lastName() }}</ax-title>\n <ax-comment-date>{{ comment.auditInfo?.created?.at! | format: 'timeleft' | async }} </ax-comment-date>\n <ax-comment-menu-options>\n <ax-button class=\"ax-sm\" look=\"blank\" color=\"neutral\">\n <ax-icon icon=\"ax-icon ax-icon-solid ax-icon-more-horizontal\"></ax-icon>\n </ax-button>\n\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item\n [text]=\"('@conversation:comments.actions.edit.title' | translate | async) ?? ''\"\n color=\"neutral\"\n (click)=\"editMessage(comment, undefined, user.firstName() + ' ' + user.lastName())\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-edit\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n\n <ax-button-item\n [text]=\"('@conversation:comments.actions.delete.title' | translate | async) ?? ''\"\n color=\"danger\"\n (click)=\"deleteComment(comment.id!)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-comment-menu-options>\n <ax-content [innerHTML]=\"sanitizeHtml(comment.message.content)\"></ax-content>\n <ax-comment-like (click)=\"toggleLike(comment)\" [like]=\"isLikedByUser(comment)\">\n {{ getReactionsCount(comment) }}\n </ax-comment-like>\n <ax-comment-reply-text\n (click)=\"replyMessage(comment, undefined, user.firstName() + ' ' + user.lastName())\"\n ></ax-comment-reply-text>\n @for (reply of comment.replies; track reply.id) {\n <ax-comment-item [id]=\"reply.id\" [class.highlighted]=\"highlightedCommentId() === reply.id\" [@fadeIn]>\n <axp-user-avatar\n #user2\n [size]=\"40\"\n [userId]=\"reply.author.id\"\n ngProjectAs=\"'ax-avatar'\"\n ></axp-user-avatar>\n <ax-title>{{ user2.firstName() + ' ' + user2.lastName() }}</ax-title>\n <ax-comment-date>{{ reply.auditInfo?.created?.at! | format: 'timeleft' | async }} </ax-comment-date>\n <ax-comment-menu-options>\n <ax-button class=\"ax-sm\" look=\"blank\" color=\"neutral\">\n <ax-icon icon=\"ax-icon ax-icon-solid ax-icon-more-horizontal\"></ax-icon>\n </ax-button>\n\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item\n [text]=\"('@conversation:comments.actions.edit.title' | translate | async) ?? ''\"\n color=\"neutral\"\n (click)=\"editMessage(comment, reply, user2.firstName() + ' ' + user2.lastName())\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-edit\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item\n [text]=\"('@conversation:comments.actions.delete.title' | translate | async) ?? ''\"\n color=\"danger\"\n (click)=\"deleteComment(reply.id!)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-comment-menu-options>\n <ax-content [innerHTML]=\"sanitizeHtml(reply.message.content)\"></ax-content>\n <ax-comment-like (click)=\"toggleLike(reply)\" [like]=\"isLikedByUser(reply)\">\n {{ getReactionsCount(reply) }}\n </ax-comment-like>\n <ax-comment-reply-text\n (click)=\"replyMessage(comment, reply, user2.firstName() + ' ' + user2.lastName())\"\n ></ax-comment-reply-text>\n </ax-comment-item>\n }\n </ax-comment-item>\n }\n </ax-comment-view>\n } @else {\n <div>\n <div class=\"ax-flex ax-flex-col ax-gap-4 ax-justify-center ax-items-center ax-p-10\">\n <svg\n class=\"ax-mx-auto\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"154\"\n height=\"161\"\n viewBox=\"0 0 154 161\"\n fill=\"none\"\n >\n <path\n d=\"M0.0616455 84.4268C0.0616455 42.0213 34.435 7.83765 76.6507 7.83765C118.803 7.83765 153.224 42.0055 153.224 84.4268C153.224 102.42 147.026 118.974 136.622 132.034C122.282 150.138 100.367 161 76.6507 161C52.7759 161 30.9882 150.059 16.6633 132.034C6.25961 118.974 0.0616455 102.42 0.0616455 84.4268Z\"\n fill=\"#EEF2FF\"\n />\n <path\n d=\"M96.8189 0.632498L96.8189 0.632384L96.8083 0.630954C96.2034 0.549581 95.5931 0.5 94.9787 0.5H29.338C22.7112 0.5 17.3394 5.84455 17.3394 12.4473V142.715C17.3394 149.318 22.7112 154.662 29.338 154.662H123.948C130.591 154.662 135.946 149.317 135.946 142.715V38.9309C135.946 38.0244 135.847 37.1334 135.648 36.2586L135.648 36.2584C135.117 33.9309 133.874 31.7686 132.066 30.1333C132.066 30.1331 132.065 30.1329 132.065 30.1327L103.068 3.65203C103.068 3.6519 103.067 3.65177 103.067 3.65164C101.311 2.03526 99.1396 0.995552 96.8189 0.632498Z\"\n fill=\"white\"\n stroke=\"#E5E7EB\"\n />\n <ellipse cx=\"80.0618\" cy=\"81\" rx=\"28.0342\" ry=\"28.0342\" fill=\"#EEF2FF\" />\n <path\n d=\"M99.2393 61.3061L99.2391 61.3058C88.498 50.5808 71.1092 50.5804 60.3835 61.3061C49.6423 72.0316 49.6422 89.4361 60.3832 100.162C71.109 110.903 88.4982 110.903 99.2393 100.162C109.965 89.4363 109.965 72.0317 99.2393 61.3061ZM105.863 54.6832C120.249 69.0695 120.249 92.3985 105.863 106.785C91.4605 121.171 68.1468 121.171 53.7446 106.785C39.3582 92.3987 39.3582 69.0693 53.7446 54.683C68.1468 40.2965 91.4605 40.2966 105.863 54.6832Z\"\n stroke=\"#E5E7EB\"\n />\n <path\n d=\"M110.782 119.267L102.016 110.492C104.888 108.267 107.476 105.651 109.564 102.955L118.329 111.729L110.782 119.267Z\"\n stroke=\"#E5E7EB\"\n />\n <path\n d=\"M139.122 125.781L139.122 125.78L123.313 109.988C123.313 109.987 123.313 109.987 123.312 109.986C121.996 108.653 119.849 108.657 118.521 109.985L118.871 110.335L118.521 109.985L109.047 119.459C107.731 120.775 107.735 122.918 109.044 124.247L109.047 124.249L124.858 140.06C128.789 143.992 135.191 143.992 139.122 140.06C143.069 136.113 143.069 129.728 139.122 125.781Z\"\n fill=\"#A5B4FC\"\n stroke=\"#818CF8\"\n />\n <path\n d=\"M83.185 87.2285C82.5387 87.2285 82.0027 86.6926 82.0027 86.0305C82.0027 83.3821 77.9987 83.3821 77.9987 86.0305C77.9987 86.6926 77.4627 87.2285 76.8006 87.2285C76.1543 87.2285 75.6183 86.6926 75.6183 86.0305C75.6183 80.2294 84.3831 80.2451 84.3831 86.0305C84.3831 86.6926 83.8471 87.2285 83.185 87.2285Z\"\n fill=\"#4F46E5\"\n />\n <path\n d=\"M93.3528 77.0926H88.403C87.7409 77.0926 87.2049 76.5567 87.2049 75.8946C87.2049 75.2483 87.7409 74.7123 88.403 74.7123H93.3528C94.0149 74.7123 94.5509 75.2483 94.5509 75.8946C94.5509 76.5567 94.0149 77.0926 93.3528 77.0926Z\"\n fill=\"#4F46E5\"\n />\n <path\n d=\"M71.5987 77.0925H66.6488C65.9867 77.0925 65.4507 76.5565 65.4507 75.8945C65.4507 75.2481 65.9867 74.7122 66.6488 74.7122H71.5987C72.245 74.7122 72.781 75.2481 72.781 75.8945C72.781 76.5565 72.245 77.0925 71.5987 77.0925Z\"\n fill=\"#4F46E5\"\n />\n <rect x=\"38.3522\" y=\"21.5128\" width=\"41.0256\" height=\"2.73504\" rx=\"1.36752\" fill=\"#4F46E5\" />\n <rect x=\"38.3522\" y=\"133.65\" width=\"54.7009\" height=\"5.47009\" rx=\"2.73504\" fill=\"#A5B4FC\" />\n <rect x=\"38.3522\" y=\"29.7179\" width=\"13.6752\" height=\"2.73504\" rx=\"1.36752\" fill=\"#4F46E5\" />\n <circle cx=\"56.13\" cy=\"31.0854\" r=\"1.36752\" fill=\"#4F46E5\" />\n <circle cx=\"61.6001\" cy=\"31.0854\" r=\"1.36752\" fill=\"#4F46E5\" />\n <circle cx=\"67.0702\" cy=\"31.0854\" r=\"1.36752\" fill=\"#4F46E5\" />\n </svg>\n <div>\n <h2 class=\"ax-text-center ax-text-neutral-600 ax-font-semibold ax-leading-loose ax-pb-2\">\n {{ '@conversation:comments.components.comment.empty-states.no-comments.title' | translate | async }}\n </h2>\n </div>\n </div>\n </div>\n }\n </ax-comment-container>\n <div class=\"ax-flex ax-flex-col\">\n @if (isReplyingMode() || isEditingMode()) {\n <div\n class=\"ax-flex ax-justify-between ax-rounded-b-none ax-border ax-border-surface ax-border-b-0 ax-rounded-lg ax-px-6 ax-py-3 ax-w-full ax-items-center ax-overflow-hidden ax-text-sm ax-leading-none\"\n >\n <div (click)=\"scrollMain()\" class=\"ax-flex ax-justify-start ax-items-center ax-cursor-pointer\">\n <i\n [class]=\"isReplyingMode() ? 'fa-reply' : 'fa-pen'\"\n class=\"fa-light ax-text-primary-500 dark:ax-text-primary-300 ax-text-2xl ax-me-4\"\n ></i>\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-justify-between ax-align-middle ax-leading-4 ax-overflow-hidden\">\n <p class=\"ax-text-primary-500 dark:ax-text-primary-300\">\n @if (isReplyingMode()) {\n {{ '@conversation:comments.actions.reply-to' | translate | async }}\n <span class=\"ax-font-bold\">{{ activeReplyComment()?.userName }}</span>\n } @else {\n {{ '@conversation:comments.actions.edit-message' | translate | async }}\n }\n </p>\n <div\n class=\"ax-truncate\"\n [innerHTML]=\"\n isReplyingMode()\n ? sanitizeHtml(activeReplyComment()?.message?.content ?? '')\n : sanitizeHtml(activeEditComment()?.message?.content ?? '')\n \"\n ></div>\n </div>\n </div>\n <div><i (click)=\"resetReplyEditState()\" class=\"fa-light ax-text-2xl fa-xmark ax-cursor-pointer\"></i></div>\n </div>\n }\n <ax-wysiwyg-container #w [look]=\"wysiwygOptions().look\" [(ngModel)]=\"commentContent\">\n <ax-wysiwyg-view class=\"ax-min-h-28\"></ax-wysiwyg-view>\n <ax-wysiwyg-toolbar>\n <ax-prefix>\n <ax-wysiwyg-history></ax-wysiwyg-history>\n <ax-wysiwyg-font-style></ax-wysiwyg-font-style>\n <ax-wysiwyg-colors></ax-wysiwyg-colors>\n <ax-wysiwyg-list></ax-wysiwyg-list>\n <ax-wysiwyg-alignment></ax-wysiwyg-alignment>\n </ax-prefix>\n <ax-suffix>\n <ax-button\n [disabled]=\"hasCooldown() || !commentContent()\"\n (click)=\"submitComment()\"\n [text]=\"'@conversation:comments.actions.send.title' | translate | async\"\n >\n @if (isSubmitting()) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n </ax-suffix>\n </ax-wysiwyg-toolbar>\n </ax-wysiwyg-container>\n </div>\n</div>\n", styles: [":host{display:block;width:100%;height:100%}ax-wysiwyg-container .ax-editor-container{border-top-left-radius:0!important;border-top-right-radius:0!important}ax-wysiwyg-container .ax-error-message{padding-left:.5rem}ax-comment-item.highlighted{animation:comment-highlight-pulse 2.5s cubic-bezier(.4,0,.2,1) forwards}@keyframes comment-highlight-pulse{0%{background-color:transparent;box-shadow:inset 3px 0 0 0 transparent}10%{background-color:rgba(var(--ax-sys-color-primary-lightest-surface),.5);box-shadow:inset 3px 0 rgb(var(--ax-sys-color-primary-surface))}35%{background-color:rgba(var(--ax-sys-color-primary-lightest-surface),.3);box-shadow:inset 3px 0 rgba(var(--ax-sys-color-primary-lighter-surface),.8)}60%{background-color:rgba(var(--ax-sys-color-primary-lightest-surface),.4);box-shadow:inset 3px 0 rgba(var(--ax-sys-color-primary-lightest-surface),.6)}to{background-color:transparent;box-shadow:inset 3px 0 0 0 transparent}}\n"], dependencies: [{ kind: "ngmodule", type: AXWysiwygModule }, { kind: "component", type: i1$2.AXWysiwygContainerComponent, selector: "ax-wysiwyg-container", inputs: ["look", "readonly", "disabled", "value", "placeHolder"], outputs: ["onValueChanged"] }, { kind: "component", type: i1$2.AXWysiwygViewComponent, selector: "ax-wysiwyg-view" }, { kind: "component", type: i1$2.AXWysiwygAlignmentComponent, selector: "ax-wysiwyg-alignment" }, { kind: "component", type: i1$2.AXWysiwygColorsComponent, selector: "ax-wysiwyg-colors" }, { kind: "component", type: i1$2.AXWysiwygFontStyleComponent, selector: "ax-wysiwyg-font-style" }, { kind: "component", type: i1$2.AXWysiwygHistoryComponent, selector: "ax-wysiwyg-history" }, { kind: "component", type: i1$2.AXWysiwygListComponent, selector: "ax-wysiwyg-list" }, { kind: "component", type: i1$2.AXWysiwygToolbarComponent, selector: "ax-wysiwyg-toolbar" }, { kind: "ngmodule", type: AXConversationModule }, { kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i2$2.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2$1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXCommentModule }, { kind: "component", type: i4.AXCommentViewComponent, selector: "ax-comment-view" }, { kind: "component", type: i4.AXCommentContainerComponent, selector: "ax-comment-container" }, { kind: "component", type: i4.AXCommentItemComponent, selector: "ax-comment-item", inputs: ["replyCount", "repliesExpanded"], outputs: ["repliesExpandedChange"] }, { kind: "component", type: i4.AXCommentLikeComponent, selector: "ax-comment-like", inputs: ["like"], outputs: ["likeChange"] }, { kind: "component", type: i4.AXMenuOptionsComponent, selector: "ax-comment-menu-options" }, { kind: "component", type: i4.AXCommentReplyTextComponent, selector: "ax-comment-reply-text" }, { kind: "component", type: i4.AXCommentDateComponent, selector: "ax-comment-date" }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: i2.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i2.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items", "closeParentOnClick", "lockOnLoading"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXAvatarModule }, { kind: "ngmodule", type: AXImageModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i6.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i3.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXFormatModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "ngmodule", type: AXToolBarModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "component", type: AXPUserAvatarComponent, selector: "axp-user-avatar", inputs: ["size", "userId"] }, { kind: "pipe", type: i9.AXFormatPipe, name: "format" }, { kind: "pipe", type: i1.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], animations: [
3984
4363
  trigger('fadeIn', [
3985
4364
  transition(':enter', [
3986
4365
  style({ opacity: 0, transform: 'translateY(10px)' }),
@@ -4145,9 +4524,9 @@ class AXMCommentPopupComponent extends AXBasePageComponent {
4145
4524
  // Angular
4146
4525
  CommonModule }, { kind: "ngmodule", type:
4147
4526
  // ACoreX
4148
- AXDecoratorModule }, { kind: "component", type: i2$2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type:
4527
+ AXDecoratorModule }, { kind: "component", type: i2$1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type:
4149
4528
  // Comment
4150
- AXMCommentComponent, selector: "axm-comment", inputs: ["refrenceType", "refrenceId", "subject"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.AXTranslatorPipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
4529
+ AXMCommentComponent, selector: "axm-comment", inputs: ["refrenceType", "refrenceId", "subject"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.AXTranslatorPipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
4151
4530
  }
4152
4531
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMCommentPopupComponent, decorators: [{
4153
4532
  type: Component,
@@ -4981,7 +5360,7 @@ class AXMChatVoiceRecorderComponent {
4981
5360
  }
4982
5361
  </div>
4983
5362
  </div>
4984
- `, isInline: true, styles: [":host{display:block;width:100%}.voice-recorder{display:flex;flex-direction:column;width:100%;background:rgb(var(--ax-sys-color-lightest-surface))}.recorder-header{display:flex;align-items:center;justify-content:space-between;padding:.75rem 1rem;border-bottom:1px solid rgb(var(--ax-sys-color-border-light-surface))}.recorder-title{margin:0;font-size:.875rem;font-weight:600}.close-button{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;background:transparent;border-radius:50%;font-size:1rem;cursor:pointer;transition:all .2s;opacity:.7}.close-button:hover{background:rgb(var(--ax-sys-color-light-surface));opacity:1}.recorder-content{display:flex;align-items:center;width:100%;padding:1rem}.recorder-idle{display:flex;align-items:center;gap:1rem;width:100%}.record-button,.speech-to-text-button{display:flex;align-items:center;justify-content:center;width:56px;height:56px;border:none;border-radius:50%;font-size:1.5rem;cursor:pointer;transition:all .2s}.record-button{background:rgb(var(--ax-sys-color-primary-500));color:rgb(var(--ax-sys-color-on-primary-surface));box-shadow:0 2px 8px rgba(var(--ax-sys-color-primary-500),.3)}.record-button:hover{background:rgb(var(--ax-sys-color-primary-600))}.speech-to-text-button{background:rgb(var(--ax-sys-color-secondary-surface));color:rgb(var(--ax-sys-color-on-secondary-surface));box-shadow:0 2px 8px rgba(var(--ax-sys-color-secondary-500),.2)}.speech-to-text-button:hover:not(:disabled){background:rgb(var(--ax-sys-color-secondary-600))}.speech-to-text-button:disabled{opacity:.6;cursor:not-allowed}.recorder-hint{font-size:.875rem;opacity:.7}.recorder-transcribing{display:flex;align-items:center;justify-content:center;gap:.75rem;width:100%;padding:.5rem 0}.recorder-transcribing-text{font-size:.875rem;font-weight:500;color:rgb(var(--ax-sys-color-on-light-surface))}.recorder-active{display:flex;align-items:center;justify-content:space-between;width:100%;gap:1rem}.recorder-info{display:flex;align-items:center;gap:1.5rem;flex:1}.recording-indicator{display:flex;align-items:center;gap:.5rem}.pulse-dot{width:12px;height:12px;background:rgb(var(--ax-sys-color-danger-500));border-radius:50%;animation:pulse 1.5s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.recording-text{font-size:.875rem;font-weight:600;color:rgb(var(--ax-sys-color-danger-500))}.recording-time{font-size:1.25rem;font-weight:600;font-variant-numeric:tabular-nums;min-width:80px}.recorder-actions{display:flex;align-items:center;gap:.75rem}@media(max-width:768px){.voice-recorder{padding:.75rem}.record-button,.speech-to-text-button{width:48px;height:48px;font-size:1.25rem}.recorder-info{gap:1rem}.recording-time{font-size:1.125rem;font-variant-numeric:tabular-nums}.recorder-actions{gap:.5rem}}@media(max-width:480px){.recorder-hint{font-size:.8125rem}.recording-text{display:none}.recording-time{font-size:1rem;min-width:60px;font-variant-numeric:tabular-nums}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2$2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXLabelModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i6.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
5363
+ `, isInline: true, styles: [":host{display:block;width:100%}.voice-recorder{display:flex;flex-direction:column;width:100%;background:rgb(var(--ax-sys-color-lightest-surface))}.recorder-header{display:flex;align-items:center;justify-content:space-between;padding:.75rem 1rem;border-bottom:1px solid rgb(var(--ax-sys-color-border-light-surface))}.recorder-title{margin:0;font-size:.875rem;font-weight:600}.close-button{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;background:transparent;border-radius:50%;font-size:1rem;cursor:pointer;transition:all .2s;opacity:.7}.close-button:hover{background:rgb(var(--ax-sys-color-light-surface));opacity:1}.recorder-content{display:flex;align-items:center;width:100%;padding:1rem}.recorder-idle{display:flex;align-items:center;gap:1rem;width:100%}.record-button,.speech-to-text-button{display:flex;align-items:center;justify-content:center;width:56px;height:56px;border:none;border-radius:50%;font-size:1.5rem;cursor:pointer;transition:all .2s}.record-button{background:rgb(var(--ax-sys-color-primary-500));color:rgb(var(--ax-sys-color-on-primary-surface));box-shadow:0 2px 8px rgba(var(--ax-sys-color-primary-500),.3)}.record-button:hover{background:rgb(var(--ax-sys-color-primary-600))}.speech-to-text-button{background:rgb(var(--ax-sys-color-secondary-surface));color:rgb(var(--ax-sys-color-on-secondary-surface));box-shadow:0 2px 8px rgba(var(--ax-sys-color-secondary-500),.2)}.speech-to-text-button:hover:not(:disabled){background:rgb(var(--ax-sys-color-secondary-600))}.speech-to-text-button:disabled{opacity:.6;cursor:not-allowed}.recorder-hint{font-size:.875rem;opacity:.7}.recorder-transcribing{display:flex;align-items:center;justify-content:center;gap:.75rem;width:100%;padding:.5rem 0}.recorder-transcribing-text{font-size:.875rem;font-weight:500;color:rgb(var(--ax-sys-color-on-light-surface))}.recorder-active{display:flex;align-items:center;justify-content:space-between;width:100%;gap:1rem}.recorder-info{display:flex;align-items:center;gap:1.5rem;flex:1}.recording-indicator{display:flex;align-items:center;gap:.5rem}.pulse-dot{width:12px;height:12px;background:rgb(var(--ax-sys-color-danger-500));border-radius:50%;animation:pulse 1.5s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.recording-text{font-size:.875rem;font-weight:600;color:rgb(var(--ax-sys-color-danger-500))}.recording-time{font-size:1.25rem;font-weight:600;font-variant-numeric:tabular-nums;min-width:80px}.recorder-actions{display:flex;align-items:center;gap:.75rem}@media(max-width:768px){.voice-recorder{padding:.75rem}.record-button,.speech-to-text-button{width:48px;height:48px;font-size:1.25rem}.recorder-info{gap:1rem}.recording-time{font-size:1.125rem;font-variant-numeric:tabular-nums}.recorder-actions{gap:.5rem}}@media(max-width:480px){.recorder-hint{font-size:.8125rem}.recording-text{display:none}.recording-time{font-size:1rem;min-width:60px;font-variant-numeric:tabular-nums}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2$1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXLabelModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i6.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4985
5364
  }
4986
5365
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMChatVoiceRecorderComponent, decorators: [{
4987
5366
  type: Component,
@@ -5214,7 +5593,7 @@ class AXMChatInfoBarAssistModelActionComponent {
5214
5593
  }
5215
5594
  </div>
5216
5595
  }
5217
- `, isInline: true, styles: [":host{display:block;width:100%}.axm-chat-assist-model-action{width:min(100%,24rem)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
5596
+ `, isInline: true, styles: [":host{display:block;width:100%}.axm-chat-assist-model-action{width:min(100%,24rem)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
5218
5597
  }
5219
5598
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMChatInfoBarAssistModelActionComponent, decorators: [{
5220
5599
  type: Component,
@@ -5260,6 +5639,48 @@ const AXM_CHAT_INFO_BAR_ASSIST_MODEL_ACTION = {
5260
5639
  visible: (context) => conversationHasAssistContext(context.conversation),
5261
5640
  };
5262
5641
 
5642
+ //#region ---- Imports ----
5643
+ //#endregion
5644
+ //#region ---- Dialog ----
5645
+ /**
5646
+ * Opens a read-only specialist sub-run transcript for one delegated {@code agent:*} tool call.
5647
+ * Renders {@link AXPAiChatMessage} lines (role + responses[]) in conversation-owned UI.
5648
+ */
5649
+ async function axmOpenAssistDelegatedAgentDetailDialog(options) {
5650
+ const callId = options.callId?.trim() ?? '';
5651
+ if (!callId) {
5652
+ return;
5653
+ }
5654
+ const entry = options.delegatedTranscriptsByCallId[callId];
5655
+ const catalogId = axpAiParseSupervisorAgentToolName(options.toolName);
5656
+ const catalogTitle = catalogId != null ? options.resolveCatalogTitle?.(catalogId)?.trim() : undefined;
5657
+ const titleBase = options.resolvedAgentLabel?.trim() ||
5658
+ entry?.agentName?.trim() ||
5659
+ catalogTitle ||
5660
+ options.toolName.trim() ||
5661
+ callId;
5662
+ const [titleSuffix, missingHint] = await Promise.all([
5663
+ options.translationService.translateAsync('@conversation:chat.assist-renderer.delegated-agent.dialog-title-suffix'),
5664
+ options.translationService.translateAsync('@conversation:chat.assist-renderer.delegated-agent.transcript-missing'),
5665
+ ]);
5666
+ const comp = (await import('./acorex-modules-conversation-assist-delegated-agent-detail-popup.component-hMiSfvL2.mjs'))
5667
+ .AXMAssistDelegatedAgentDetailPopupComponent;
5668
+ const data = {
5669
+ delegationCallId: callId,
5670
+ messages: entry?.messages ?? [],
5671
+ runInput: entry?.runInput,
5672
+ agentName: entry?.agentName?.trim() || titleBase,
5673
+ emptyHint: entry?.messages?.length ? undefined : missingHint,
5674
+ agentTitleById: options.agentTitleById ?? (catalogId && catalogTitle ? { [catalogId]: catalogTitle } : {}),
5675
+ };
5676
+ await options.popupService.open(comp, {
5677
+ title: `${titleBase} — ${titleSuffix ?? 'Full Specialist Run'}`,
5678
+ size: 'lg',
5679
+ data,
5680
+ });
5681
+ }
5682
+ //#endregion
5683
+
5263
5684
  /**
5264
5685
  * Detects strong RTL scripts (Arabic / Persian / Hebrew and related blocks) in a string
5265
5686
  * so each assist transcript segment can set `dir` independently of the app locale.
@@ -5281,8 +5702,101 @@ function axmAssistSegmentDirection(text) {
5281
5702
  //#endregion
5282
5703
  //#region ---- Component ----
5283
5704
  /**
5284
- * Resolves an AI {@link AXPAiChatImageContent} fileId via {@link AXPFileStorageService} and renders
5285
- * {@link AXImageRendererComponent} with a synthetic {@link AXMessage}.
5705
+ * Renders an assist {@code fileId} via {@link AXVoiceRendererComponent} using {@code mediaId} so
5706
+ * {@link AXUploaderService} resolves a playback URL (conversation2 rejects persisted {@code data:} URLs).
5707
+ */
5708
+ class AXMAssistBotAudioLineComponent {
5709
+ //#endregion
5710
+ //#region ---- Lifecycle ----
5711
+ constructor() {
5712
+ //#region ---- Inputs ----
5713
+ this.parentMessage = input.required(...(ngDevMode ? [{ debugName: "parentMessage" }] : /* istanbul ignore next */ []));
5714
+ this.fileId = input.required(...(ngDevMode ? [{ debugName: "fileId" }] : /* istanbul ignore next */ []));
5715
+ this.mimeType = input('audio/mpeg', ...(ngDevMode ? [{ debugName: "mimeType" }] : /* istanbul ignore next */ []));
5716
+ //#endregion
5717
+ //#region ---- Services ----
5718
+ this.fileStorage = inject(AXPFileStorageService);
5719
+ //#endregion
5720
+ //#region ---- State ----
5721
+ this.fileReady = signal(false, ...(ngDevMode ? [{ debugName: "fileReady" }] : /* istanbul ignore next */ []));
5722
+ this.resolvedMimeType = signal('audio/mpeg', ...(ngDevMode ? [{ debugName: "resolvedMimeType" }] : /* istanbul ignore next */ []));
5723
+ this.errorText = signal(null, ...(ngDevMode ? [{ debugName: "errorText" }] : /* istanbul ignore next */ []));
5724
+ this.loadGeneration = 0;
5725
+ //#endregion
5726
+ //#region ---- Synthetic message ----
5727
+ this.syntheticMessage = computed(() => {
5728
+ const fileId = this.fileId()?.trim() ?? '';
5729
+ const parent = this.parentMessage();
5730
+ if (!this.fileReady() || !fileId) {
5731
+ return null;
5732
+ }
5733
+ return axmSyntheticEmbedMessage(parent, `voice-${fileId}`, {
5734
+ type: 'voice',
5735
+ payload: {
5736
+ type: 'voice',
5737
+ url: '',
5738
+ mediaId: fileId,
5739
+ duration: 0,
5740
+ },
5741
+ });
5742
+ }, ...(ngDevMode ? [{ debugName: "syntheticMessage" }] : /* istanbul ignore next */ []));
5743
+ effect(() => {
5744
+ const id = this.fileId()?.trim() ?? '';
5745
+ const gen = ++this.loadGeneration;
5746
+ this.fileReady.set(false);
5747
+ this.errorText.set(null);
5748
+ if (!id) {
5749
+ return;
5750
+ }
5751
+ void this.fileStorage
5752
+ .getInfo(id)
5753
+ .then((info) => {
5754
+ if (gen !== this.loadGeneration) {
5755
+ return;
5756
+ }
5757
+ const storedMime = info.mimeType?.trim();
5758
+ const fallbackMime = this.mimeType().trim();
5759
+ const mimeType = storedMime && storedMime.startsWith('audio/')
5760
+ ? storedMime
5761
+ : fallbackMime.startsWith('audio/')
5762
+ ? fallbackMime
5763
+ : 'audio/mpeg';
5764
+ this.resolvedMimeType.set(mimeType);
5765
+ this.fileReady.set(true);
5766
+ })
5767
+ .catch(() => {
5768
+ if (gen !== this.loadGeneration) {
5769
+ return;
5770
+ }
5771
+ this.errorText.set('@conversation:chat.assist-renderer.errors.audio-load');
5772
+ });
5773
+ });
5774
+ }
5775
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAssistBotAudioLineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5776
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMAssistBotAudioLineComponent, isStandalone: true, selector: "axm-assist-bot-audio-line", inputs: { parentMessage: { classPropertyName: "parentMessage", publicName: "parentMessage", isSignal: true, isRequired: true, transformFunction: null }, fileId: { classPropertyName: "fileId", publicName: "fileId", isSignal: true, isRequired: true, transformFunction: null }, mimeType: { classPropertyName: "mimeType", publicName: "mimeType", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
5777
+ @if (syntheticMessage(); as sm) {
5778
+ <ax-conversation-voice-renderer [message]="sm" />
5779
+ } @else if (errorText()) {
5780
+ <p class="axm-assist-bot-audio-line__err">{{ (errorText() ?? '' | translate | async) ?? '' }}</p>
5781
+ }
5782
+ `, isInline: true, styles: [":host{display:block;max-inline-size:min(100%,28rem)}.axm-assist-bot-audio-line__err{margin:0;font-size:.8125rem;color:rgb(var(--ax-sys-color-danger-600, 220 38 38))}\n"], dependencies: [{ kind: "component", type: AXVoiceRendererComponent, selector: "ax-conversation-voice-renderer", inputs: ["message"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
5783
+ }
5784
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAssistBotAudioLineComponent, decorators: [{
5785
+ type: Component,
5786
+ args: [{ selector: 'axm-assist-bot-audio-line', changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXVoiceRendererComponent, AXTranslationModule, AsyncPipe], template: `
5787
+ @if (syntheticMessage(); as sm) {
5788
+ <ax-conversation-voice-renderer [message]="sm" />
5789
+ } @else if (errorText()) {
5790
+ <p class="axm-assist-bot-audio-line__err">{{ (errorText() ?? '' | translate | async) ?? '' }}</p>
5791
+ }
5792
+ `, styles: [":host{display:block;max-inline-size:min(100%,28rem)}.axm-assist-bot-audio-line__err{margin:0;font-size:.8125rem;color:rgb(var(--ax-sys-color-danger-600, 220 38 38))}\n"] }]
5793
+ }], ctorParameters: () => [], propDecorators: { parentMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "parentMessage", required: true }] }], fileId: [{ type: i0.Input, args: [{ isSignal: true, alias: "fileId", required: true }] }], mimeType: [{ type: i0.Input, args: [{ isSignal: true, alias: "mimeType", required: false }] }] } });
5794
+
5795
+ //#endregion
5796
+ //#region ---- Component ----
5797
+ /**
5798
+ * Renders an assist {@code fileId} via {@link AXImageRendererComponent} using {@code mediaId} so
5799
+ * {@link AXUploaderService} resolves a display URL (conversation2 rejects persisted {@code data:} URLs).
5286
5800
  */
5287
5801
  class AXMAssistBotImageLineComponent {
5288
5802
  //#endregion
@@ -5296,32 +5810,32 @@ class AXMAssistBotImageLineComponent {
5296
5810
  //#endregion
5297
5811
  //#region ---- Services ----
5298
5812
  this.fileStorage = inject(AXPFileStorageService);
5299
- this.destroyRef = inject(DestroyRef);
5300
5813
  //#endregion
5301
5814
  //#region ---- State ----
5302
- this.resolvedUrl = signal(null, ...(ngDevMode ? [{ debugName: "resolvedUrl" }] : /* istanbul ignore next */ []));
5815
+ this.fileReady = signal(false, ...(ngDevMode ? [{ debugName: "fileReady" }] : /* istanbul ignore next */ []));
5816
+ this.resolvedMimeType = signal('image/png', ...(ngDevMode ? [{ debugName: "resolvedMimeType" }] : /* istanbul ignore next */ []));
5303
5817
  this.errorText = signal(null, ...(ngDevMode ? [{ debugName: "errorText" }] : /* istanbul ignore next */ []));
5304
- this.objectUrlToRevoke = null;
5305
5818
  this.loadGeneration = 0;
5306
5819
  //#endregion
5307
5820
  //#region ---- Synthetic message ----
5308
5821
  this.syntheticMessage = computed(() => {
5309
- const url = this.resolvedUrl();
5822
+ const fileId = this.fileId()?.trim() ?? '';
5310
5823
  const parent = this.parentMessage();
5311
- if (!url?.trim()) {
5824
+ if (!this.fileReady() || !fileId) {
5312
5825
  return null;
5313
5826
  }
5314
- return axmSyntheticEmbedMessage(parent, `img-${this.fileId()}`, {
5827
+ return axmSyntheticEmbedMessage(parent, `img-${fileId}`, {
5315
5828
  type: 'image',
5316
5829
  payload: {
5317
5830
  type: 'image',
5318
5831
  images: [
5319
5832
  {
5320
- url,
5321
- thumbnailUrl: url,
5833
+ mediaId: fileId,
5834
+ url: '',
5835
+ thumbnailUrl: '',
5322
5836
  width: 400,
5323
5837
  height: 300,
5324
- mimeType: this.mimeType(),
5838
+ mimeType: this.resolvedMimeType(),
5325
5839
  },
5326
5840
  ],
5327
5841
  caption: undefined,
@@ -5330,10 +5844,8 @@ class AXMAssistBotImageLineComponent {
5330
5844
  }, ...(ngDevMode ? [{ debugName: "syntheticMessage" }] : /* istanbul ignore next */ []));
5331
5845
  effect(() => {
5332
5846
  const id = this.fileId()?.trim() ?? '';
5333
- const parent = this.parentMessage();
5334
5847
  const gen = ++this.loadGeneration;
5335
- this.revokeObjectUrl();
5336
- this.resolvedUrl.set(null);
5848
+ this.fileReady.set(false);
5337
5849
  this.errorText.set(null);
5338
5850
  if (!id) {
5339
5851
  return;
@@ -5344,19 +5856,15 @@ class AXMAssistBotImageLineComponent {
5344
5856
  if (gen !== this.loadGeneration) {
5345
5857
  return;
5346
5858
  }
5347
- const url = info.url?.trim();
5348
- if (url) {
5349
- this.resolvedUrl.set(url);
5350
- return;
5351
- }
5352
- const bin = info.binary;
5353
- if (bin instanceof Blob) {
5354
- const ou = URL.createObjectURL(bin);
5355
- this.objectUrlToRevoke = ou;
5356
- this.resolvedUrl.set(ou);
5357
- return;
5358
- }
5359
- this.errorText.set('@conversation:chat.assist-renderer.errors.image-load');
5859
+ const storedMime = info.mimeType?.trim();
5860
+ const fallbackMime = this.mimeType().trim();
5861
+ const mimeType = storedMime && storedMime.startsWith('image/')
5862
+ ? storedMime
5863
+ : fallbackMime.startsWith('image/')
5864
+ ? fallbackMime
5865
+ : 'image/png';
5866
+ this.resolvedMimeType.set(mimeType);
5867
+ this.fileReady.set(true);
5360
5868
  })
5361
5869
  .catch(() => {
5362
5870
  if (gen !== this.loadGeneration) {
@@ -5365,22 +5873,15 @@ class AXMAssistBotImageLineComponent {
5365
5873
  this.errorText.set('@conversation:chat.assist-renderer.errors.image-load');
5366
5874
  });
5367
5875
  });
5368
- this.destroyRef.onDestroy(() => this.revokeObjectUrl());
5369
- }
5370
- revokeObjectUrl() {
5371
- if (this.objectUrlToRevoke) {
5372
- URL.revokeObjectURL(this.objectUrlToRevoke);
5373
- this.objectUrlToRevoke = null;
5374
- }
5375
5876
  }
5376
5877
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAssistBotImageLineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5377
5878
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMAssistBotImageLineComponent, isStandalone: true, selector: "axm-assist-bot-image-line", inputs: { parentMessage: { classPropertyName: "parentMessage", publicName: "parentMessage", isSignal: true, isRequired: true, transformFunction: null }, fileId: { classPropertyName: "fileId", publicName: "fileId", isSignal: true, isRequired: true, transformFunction: null }, mimeType: { classPropertyName: "mimeType", publicName: "mimeType", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
5378
5879
  @if (syntheticMessage(); as sm) {
5379
5880
  <ax-conversation-image-renderer [message]="sm" />
5380
5881
  } @else if (errorText()) {
5381
- <p class="axm-assist-bot-image-line__err">{{ ((errorText() ?? '') | translate | async) ?? '' }}</p>
5882
+ <p class="axm-assist-bot-image-line__err">{{ (errorText() ?? '' | translate | async) ?? '' }}</p>
5382
5883
  }
5383
- `, isInline: true, styles: [":host{display:block;max-inline-size:min(100%,40rem)}.axm-assist-bot-image-line__err{margin:0;font-size:.8125rem;color:rgb(var(--ax-sys-color-danger-600, 220 38 38))}\n"], dependencies: [{ kind: "component", type: AXImageRendererComponent, selector: "ax-conversation-image-renderer", inputs: ["message"], outputs: ["imageClick"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i2$1.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
5884
+ `, isInline: true, styles: [":host{display:block;max-inline-size:min(100%,40rem)}.axm-assist-bot-image-line__err{margin:0;font-size:.8125rem;color:rgb(var(--ax-sys-color-danger-600, 220 38 38))}\n"], dependencies: [{ kind: "component", type: AXImageRendererComponent, selector: "ax-conversation-image-renderer", inputs: ["message"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
5384
5885
  }
5385
5886
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAssistBotImageLineComponent, decorators: [{
5386
5887
  type: Component,
@@ -5388,11 +5889,104 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
5388
5889
  @if (syntheticMessage(); as sm) {
5389
5890
  <ax-conversation-image-renderer [message]="sm" />
5390
5891
  } @else if (errorText()) {
5391
- <p class="axm-assist-bot-image-line__err">{{ ((errorText() ?? '') | translate | async) ?? '' }}</p>
5892
+ <p class="axm-assist-bot-image-line__err">{{ (errorText() ?? '' | translate | async) ?? '' }}</p>
5392
5893
  }
5393
5894
  `, styles: [":host{display:block;max-inline-size:min(100%,40rem)}.axm-assist-bot-image-line__err{margin:0;font-size:.8125rem;color:rgb(var(--ax-sys-color-danger-600, 220 38 38))}\n"] }]
5394
5895
  }], ctorParameters: () => [], propDecorators: { parentMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "parentMessage", required: true }] }], fileId: [{ type: i0.Input, args: [{ isSignal: true, alias: "fileId", required: true }] }], mimeType: [{ type: i0.Input, args: [{ isSignal: true, alias: "mimeType", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }] } });
5395
5896
 
5897
+ //#region ---- Imports ----
5898
+ //#endregion
5899
+ //#region ---- Component ----
5900
+ /** Routes assist {@code fileId} segments to image or voice renderers based on stored file metadata. */
5901
+ class AXMAssistBotFileLineComponent {
5902
+ //#endregion
5903
+ //#region ---- Lifecycle ----
5904
+ constructor() {
5905
+ //#region ---- Inputs ----
5906
+ this.parentMessage = input.required(...(ngDevMode ? [{ debugName: "parentMessage" }] : /* istanbul ignore next */ []));
5907
+ this.fileId = input.required(...(ngDevMode ? [{ debugName: "fileId" }] : /* istanbul ignore next */ []));
5908
+ //#endregion
5909
+ //#region ---- Services ----
5910
+ this.fileStorage = inject(AXPFileStorageService);
5911
+ //#endregion
5912
+ //#region ---- State ----
5913
+ this.mediaKind = signal('unknown', ...(ngDevMode ? [{ debugName: "mediaKind" }] : /* istanbul ignore next */ []));
5914
+ this.errorText = signal(null, ...(ngDevMode ? [{ debugName: "errorText" }] : /* istanbul ignore next */ []));
5915
+ this.loadGeneration = 0;
5916
+ effect(() => {
5917
+ const id = this.fileId()?.trim() ?? '';
5918
+ const gen = ++this.loadGeneration;
5919
+ this.mediaKind.set('unknown');
5920
+ this.errorText.set(null);
5921
+ if (!id) {
5922
+ return;
5923
+ }
5924
+ void this.fileStorage
5925
+ .getInfo(id)
5926
+ .then((info) => {
5927
+ if (gen !== this.loadGeneration) {
5928
+ return;
5929
+ }
5930
+ this.mediaKind.set(resolveAssistBotFileMediaKind(info.mimeType, info.category, info.refType));
5931
+ if (this.mediaKind() === 'unknown') {
5932
+ this.errorText.set('@conversation:chat.assist-renderer.errors.file-load');
5933
+ }
5934
+ })
5935
+ .catch(() => {
5936
+ if (gen !== this.loadGeneration) {
5937
+ return;
5938
+ }
5939
+ this.errorText.set('@conversation:chat.assist-renderer.errors.file-load');
5940
+ });
5941
+ });
5942
+ }
5943
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAssistBotFileLineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5944
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMAssistBotFileLineComponent, isStandalone: true, selector: "axm-assist-bot-file-line", inputs: { parentMessage: { classPropertyName: "parentMessage", publicName: "parentMessage", isSignal: true, isRequired: true, transformFunction: null }, fileId: { classPropertyName: "fileId", publicName: "fileId", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
5945
+ @switch (mediaKind()) {
5946
+ @case ('image') {
5947
+ <axm-assist-bot-image-line [parentMessage]="parentMessage()" [fileId]="fileId()" />
5948
+ }
5949
+ @case ('audio') {
5950
+ <axm-assist-bot-audio-line [parentMessage]="parentMessage()" [fileId]="fileId()" />
5951
+ }
5952
+ @default {
5953
+ @if (errorText()) {
5954
+ <p class="axm-assist-bot-file-line__err">{{ (errorText() ?? '' | translate | async) ?? '' }}</p>
5955
+ }
5956
+ }
5957
+ }
5958
+ `, isInline: true, styles: [":host{display:block}.axm-assist-bot-file-line__err{margin:0;font-size:.8125rem;color:rgb(var(--ax-sys-color-danger-600, 220 38 38))}\n"], dependencies: [{ kind: "component", type: AXMAssistBotAudioLineComponent, selector: "axm-assist-bot-audio-line", inputs: ["parentMessage", "fileId", "mimeType"] }, { kind: "component", type: AXMAssistBotImageLineComponent, selector: "axm-assist-bot-image-line", inputs: ["parentMessage", "fileId", "mimeType", "name"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
5959
+ }
5960
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAssistBotFileLineComponent, decorators: [{
5961
+ type: Component,
5962
+ args: [{ selector: 'axm-assist-bot-file-line', changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXMAssistBotAudioLineComponent, AXMAssistBotImageLineComponent, AXTranslationModule, AsyncPipe], template: `
5963
+ @switch (mediaKind()) {
5964
+ @case ('image') {
5965
+ <axm-assist-bot-image-line [parentMessage]="parentMessage()" [fileId]="fileId()" />
5966
+ }
5967
+ @case ('audio') {
5968
+ <axm-assist-bot-audio-line [parentMessage]="parentMessage()" [fileId]="fileId()" />
5969
+ }
5970
+ @default {
5971
+ @if (errorText()) {
5972
+ <p class="axm-assist-bot-file-line__err">{{ (errorText() ?? '' | translate | async) ?? '' }}</p>
5973
+ }
5974
+ }
5975
+ }
5976
+ `, styles: [":host{display:block}.axm-assist-bot-file-line__err{margin:0;font-size:.8125rem;color:rgb(var(--ax-sys-color-danger-600, 220 38 38))}\n"] }]
5977
+ }], ctorParameters: () => [], propDecorators: { parentMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "parentMessage", required: true }] }], fileId: [{ type: i0.Input, args: [{ isSignal: true, alias: "fileId", required: true }] }] } });
5978
+ //#region ---- Helpers ----
5979
+ function resolveAssistBotFileMediaKind(mimeType, category, refType) {
5980
+ const mime = mimeType?.trim().toLowerCase() ?? '';
5981
+ if (mime.startsWith('audio/') || category === 'ai-generated-speech' || refType === AI_CHAT_GENERATED_SPEECH_REF_TYPE) {
5982
+ return 'audio';
5983
+ }
5984
+ if (mime.startsWith('image/') || category === 'ai-generated-image' || refType === AI_CHAT_GENERATED_IMAGE_REF_TYPE) {
5985
+ return 'image';
5986
+ }
5987
+ return 'unknown';
5988
+ }
5989
+
5396
5990
  class AXMNodeMessageRendererComponent {
5397
5991
  constructor() {
5398
5992
  //#region ---- Inputs & Outputs ----
@@ -5553,7 +6147,7 @@ class AXMNodeMessageRendererComponent {
5553
6147
  </div>
5554
6148
  }
5555
6149
  </div>
5556
- `, isInline: true, styles: [":host{display:block;inline-size:min(100%,28rem)}:host:has(.axm-user-form-renderer--assist-embed){inline-size:100%;max-inline-size:none}\n"], dependencies: [{ kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "component", type: i1$2.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "functions"], outputs: ["onContextChanged"] }, { kind: "directive", type: i1$2.AXPWidgetRendererDirective, selector: "[axp-widget-renderer]", inputs: ["parentNode", "index", "mode", "node"], outputs: ["onOptionsChanged", "onValueChanged", "onLoad"], exportAs: ["widgetRenderer"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPLayoutRendererComponent, selector: "axp-layout-renderer", inputs: ["layout", "context", "look", "mode"], outputs: ["contextChange", "contextInitiated", "validityChange"] }, { kind: "pipe", type: i2$1.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6150
+ `, isInline: true, styles: [":host{display:block;inline-size:min(100%,28rem)}:host:has(.axm-user-form-renderer--assist-embed){inline-size:100%;max-inline-size:none}\n"], dependencies: [{ kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "component", type: i1$3.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "functions"], outputs: ["onContextChanged"] }, { kind: "directive", type: i1$3.AXPWidgetRendererDirective, selector: "[axp-widget-renderer]", inputs: ["parentNode", "index", "mode", "node"], outputs: ["onOptionsChanged", "onValueChanged", "onLoad"], exportAs: ["widgetRenderer"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPLayoutRendererComponent, selector: "axp-layout-renderer", inputs: ["layout", "context", "look", "mode"], outputs: ["contextChange", "contextInitiated", "validityChange"] }, { kind: "pipe", type: i1.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
5557
6151
  }
5558
6152
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNodeMessageRendererComponent, decorators: [{
5559
6153
  type: Component,
@@ -5593,102 +6187,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
5593
6187
  `, styles: [":host{display:block;inline-size:min(100%,28rem)}:host:has(.axm-user-form-renderer--assist-embed){inline-size:100%;max-inline-size:none}\n"] }]
5594
6188
  }], propDecorators: { message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: true }] }], node: [{ type: i0.Input, args: [{ isSignal: true, alias: "node", required: false }] }], formSubmitted: [{ type: i0.Output, args: ["formSubmitted"] }] } });
5595
6189
 
5596
- //#region ---- Imports ----
5597
- //#endregion
5598
- //#region ---- Component ----
5599
- /**
5600
- * Renders the user-facing assist answer: ordered segments from the payload line
5601
- * ({@link axmAssistUserVisibleItemsForLine}).
5602
- */
5603
- class AXMAssistTranscriptUserLineComponent {
5604
- constructor() {
5605
- this.line = input.required(...(ngDevMode ? [{ debugName: "line" }] : /* istanbul ignore next */ []));
5606
- this.parentMessage = input.required(...(ngDevMode ? [{ debugName: "parentMessage" }] : /* istanbul ignore next */ []));
5607
- this.segmentDir = axmAssistSegmentDirection;
5608
- this.parseAssistLineText = axmParseAssistTranscriptTextEnvelope;
5609
- this.axmAssistWidgetNodeFromUnknown = axmAssistWidgetNodeFromUnknown;
5610
- this.items = computed(() => axmAssistUserVisibleItemsForLine(this.line()), ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
5611
- }
5612
- syntheticNodeMessage(segIndex, content) {
5613
- return axmSyntheticEmbedMessage(this.parentMessage(), `user-node-${segIndex}`, {
5614
- type: 'node',
5615
- payload: { type: 'node', content },
5616
- });
5617
- }
5618
- markdownCodeLanguage(segment) {
5619
- if (this.isMarkdownCodeSegment(segment) && segment.language.trim()) {
5620
- return segment.language;
5621
- }
5622
- return 'javascript';
5623
- }
5624
- markdownCodeValue(segment) {
5625
- return this.isMarkdownCodeSegment(segment) ? segment.code : '';
5626
- }
5627
- isMarkdownCodeSegment(segment) {
5628
- if (!segment || typeof segment !== 'object') {
5629
- return false;
5630
- }
5631
- const c = segment;
5632
- return c.type === 'code' && typeof c.language === 'string' && typeof c.code === 'string';
5633
- }
5634
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAssistTranscriptUserLineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5635
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMAssistTranscriptUserLineComponent, isStandalone: true, selector: "axm-assist-transcript-user-line", inputs: { line: { classPropertyName: "line", publicName: "line", isSignal: true, isRequired: true, transformFunction: null }, parentMessage: { classPropertyName: "parentMessage", publicName: "parentMessage", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div class=\"axm-assist-bot axm-assist-bot__final-line\">\n @for (item of items(); track $index; let itemIndex = $index) {\n @switch (item.kind) {\n @case ('text') {\n @let parsed = parseAssistLineText(item.content);\n @if (parsed.body.trim()) {\n <div class=\"axm-assist-bot__segment axm-assist-renderer__markdown\" [attr.dir]=\"segmentDir(parsed.body)\">\n <axp-markdown-viewer [markdown]=\"parsed.body\">\n <ng-template axpMarkdownTemplate=\"code\" let-segment>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"markdownCodeValue(segment)\"\n [readonly]=\"true\"\n [language]=\"markdownCodeLanguage(segment)\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n </ng-template>\n </axp-markdown-viewer>\n </div>\n }\n }\n @case ('node') {\n @if (axmAssistWidgetNodeFromUnknown(item.content)) {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-chat-user-form-renderer [message]=\"syntheticNodeMessage(itemIndex, item.content)\" />\n </div>\n }\n }\n @case ('file') {\n <axm-assist-bot-image-line\n [parentMessage]=\"parentMessage()\"\n [fileId]=\"item.fileId\"\n />\n }\n @case ('followUp') {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-assist-suggestion-chips [items]=\"item.items\" />\n </div>\n }\n }\n }\n</div>\n", styles: [".axm-assist-renderer{display:flex;flex-direction:column;gap:.25rem}.axm-assist-renderer axm-assist-suggestion-chips>div{padding:0;padding-top:1rem}.axm-assist-bot,.axm-assist-bot__final-line{display:flex;flex-direction:column;gap:.75rem}.axm-assist-bot__segment{unicode-bidi:isolate;font-size:.95rem;line-height:1.8;letter-spacing:.002em;color:rgb(var(--ax-sys-color-on-surface));text-wrap:pretty}.axm-assist-bot__line--user{align-self:flex-end}.axm-assist-bot__line--tool-role{align-self:stretch}.axm-assist-bot__tool-result{border-radius:.5rem;background:rgb(var(--ax-sys-color-lighter-surface));padding:.5rem .75rem}.axm-assist-bot__fallback{font-size:.88rem;line-height:1.75;word-break:break-word;opacity:.9}.axm-assist-renderer__cursor{display:inline-block;inline-size:6px;block-size:1em;margin-inline-start:2px;background:rgb(var(--ax-sys-color-primary-500));border-radius:1px;animation:axm-blink .8s steps(2) infinite;vertical-align:text-bottom}@keyframes axm-blink{0%{opacity:1}50%{opacity:0}}.axm-assist-renderer__stream-content{display:flex;flex-direction:column;gap:.5rem}.axm-assist-renderer__streaming-activity{display:flex;align-items:center;gap:.5rem;padding-block:.15rem}.axm-assist-renderer__activity-label{line-height:1.45}.axm-assist-renderer__text{white-space:pre-line;word-break:break-word;line-height:1.85;font-size:.95rem;letter-spacing:.002em;text-wrap:pretty}.axm-assist-bot__segment ax-conversation-text-renderer{display:block}.axm-assist-bot__segment ax-conversation-text-renderer :is(p,ul,ol),.axm-assist-renderer__markdown .axp-markdown-viewer__content :is(p,ul,ol){margin-block:.45rem}.axm-assist-bot__segment ax-conversation-text-renderer li,.axm-assist-renderer__markdown .axp-markdown-viewer__content li{line-height:1.8}.axm-assist-renderer__accordion-group{width:100%}.axm-assist-renderer__collapse-shell{border-radius:.625rem;overflow:hidden;background:rgb(var(--ax-sys-color-lighter-surface))}.axm-assist-renderer__collapse-body{margin:0;padding:0;border-radius:0 0 .5rem .5rem;background:transparent}.axm-assist-renderer__collapse-body>.axm-assist-renderer__agent-live-block--in-accordion{padding-inline:.5rem;padding-block-end:.35rem}.axm-assist-renderer__accordion-header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.5rem .75rem;cursor:pointer;background:transparent;border:none;border-radius:.625rem .625rem 0 0;transition:background-color .15s ease}.axm-assist-renderer__collapse-shell>.axm-assist-renderer__accordion-header:hover{background:rgb(var(--ax-sys-color-light-surface))}.axm-assist-renderer__accordion-header-main{min-inline-size:0;display:flex;flex-direction:column;gap:.1rem}.axm-assist-renderer__accordion-header-title{font-size:.8125rem;line-height:1.25;font-weight:600;color:rgb(var(--ax-sys-color-on-surface));display:inline-flex;align-items:center;gap:.4rem}.axm-assist-renderer__header-trailing{flex-shrink:0;display:inline-flex;align-items:center;gap:.35rem}.axm-assist-renderer__delegated-agent-detail-link{padding:.25rem;text-decoration:underline;padding-top:0}.axm-assist-renderer__badge{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;max-width:min(100%,14rem);padding:.1875rem .65rem;border-radius:9999px;font-size:.6875rem;font-weight:600;line-height:1.3;letter-spacing:.03em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.axm-assist-renderer__badge--warning{background:rgb(var(--ax-sys-color-warning-100))}.axm-assist-renderer__badge--primary{background:rgb(var(--ax-sys-color-primary-100))}.axm-assist-renderer__badge--success{background:rgb(var(--ax-sys-color-success-100))}.axm-assist-renderer__thinking-chevron{display:inline-block;font-size:.65rem;opacity:.65;transition:transform .2s ease;line-height:1;flex-shrink:0}.axm-assist-renderer__thinking-chevron--expanded{transform:rotate(180deg)}.axm-assist-renderer__thinking-body{padding:.625rem .75rem .75rem;font-size:.78rem;color:rgb(var(--ax-sys-color-neutral-700));word-break:break-word;line-height:1.55}.axm-assist-renderer__tools{display:flex;flex-direction:column;gap:.5rem}.axm-assist-renderer__tool-card{border-radius:.625rem;overflow:hidden}.axm-assist-renderer__tool-body{padding:.625rem .75rem .75rem;display:flex;flex-direction:column;gap:.35rem}.axm-assist-renderer__tool-section-label{font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:rgb(var(--ax-sys-color-neutral-700))}.axm-assist-renderer__tool-pre{margin:0;max-block-size:10rem;overflow:auto;border-radius:.375rem;background:rgb(var(--ax-sys-color-light-surface));padding:.5rem;font-family:var(--ax-font-mono, monospace);font-size:.675rem;line-height:1.45;word-break:break-word}.axm-assist-renderer__run-meta-wrap{margin-block-start:.45rem}.axm-assist-renderer__run-meta-header-sub{font-size:.7rem;line-height:1.35;color:rgb(var(--ax-sys-color-neutral-700));white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.axm-assist-renderer__run-meta{margin-block-start:.45rem;padding:.55rem .65rem .6rem;border-radius:.625rem;background:rgb(var(--ax-sys-color-lighter-surface));display:flex;flex-direction:column;gap:.45rem}.axm-assist-renderer__run-meta--panel{margin-block-start:0;padding:.45rem .5rem .55rem;background:transparent;border-radius:0}.axm-assist-renderer__run-meta-grid{display:flex;gap:.4rem}.axm-assist-renderer__meta-tile{min-width:0;padding:.4rem .5rem .45rem;border-radius:.45rem;background:rgb(var(--ax-sys-color-light-surface))}.axm-assist-renderer__meta-tile--wide{grid-column:1/-1}.axm-assist-renderer__meta-tile--accent{background:rgb(var(--ax-sys-color-primary-50))}.axm-assist-renderer__meta-tile-label{font-size:.6rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:rgb(var(--ax-sys-color-neutral-700));margin-block-end:.2rem}.axm-assist-renderer__meta-tile-value{font-size:.78rem;font-weight:600;line-height:1.35;color:rgb(var(--ax-sys-color-on-surface));word-break:break-word}.axm-assist-renderer__meta-tile-value--mono{font-variant-numeric:tabular-nums;font-feature-settings:\"tnum\" 1}.axm-assist-renderer__meta-tile-sub{margin-block-start:.15rem;font-size:.65rem;line-height:1.3;color:rgb(var(--ax-sys-color-neutral-700));font-family:var(--ax-font-mono, ui-monospace, monospace);word-break:break-all}.axm-assist-renderer__meta-tile-note{display:inline;margin-inline-start:.2rem;font-size:.65rem;font-weight:500;color:rgb(var(--ax-sys-color-success-700))}.axm-assist-renderer__tool-editor-wrap{border-radius:.375rem;overflow:hidden;background:rgb(var(--ax-sys-color-light-surface))}.axm-assist-renderer__waiting{display:flex;gap:.25rem;padding:.25rem 0}.axm-assist-renderer__dot{inline-size:6px;block-size:6px;border-radius:50%;background:rgb(var(--ax-sys-color-neutral-500));animation:axm-blink 1.2s ease-in-out infinite}.axm-assist-renderer__dot:nth-child(2){animation-delay:.2s}.axm-assist-renderer__dot:nth-child(3){animation-delay:.4s}.axm-assist-renderer__agent-live-block{border-radius:.75rem;background:rgb(var(--ax-sys-color-lighter-surface));padding:.75rem .875rem;display:flex;flex-direction:column;gap:.65rem;max-inline-size:min(42rem,100%)}.axm-assist-renderer__agent-live-block--in-accordion{background:rgb(var(--ax-sys-color-light-surface));border-radius:.5rem;padding:.5rem .55rem .55rem;max-inline-size:none}.axm-assist-renderer__agent-live-header{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem}.axm-assist-renderer__agent-live-title{font-size:.8125rem;font-weight:600;color:rgb(var(--ax-sys-color-on-surface));flex:1;min-inline-size:0}.axm-assist-renderer__agent-live-prompt{font-size:.8125rem;line-height:1.55;word-break:break-word;padding:.5rem .75rem;border-radius:1.25rem;background:rgb(var(--ax-sys-color-lightest-surface));align-self:flex-end;max-inline-size:min(92%,36rem)}.axm-assist-renderer__agent-live-stream{font-size:.8125rem;line-height:1.55;white-space:pre-line;word-break:break-word;padding-block-start:.15rem}.axm-assist-renderer__agent-live-nested-tools{display:flex;flex-direction:column;gap:.35rem;padding-block-start:.35rem}.axm-assist-renderer__agent-live-nested-row{display:flex;align-items:center;gap:.45rem;font-size:.72rem}.axm-assist-renderer__agent-live-nested-name{font-family:var(--ax-font-mono, monospace);font-size:.7rem;flex:1;min-inline-size:0;overflow:hidden;text-overflow:ellipsis}.axm-assist-renderer__agent-live-nested-status{color:rgb(var(--ax-sys-color-neutral-600));flex-shrink:0}\n"], dependencies: [{ kind: "component", type: AXMNodeMessageRendererComponent, selector: "axm-chat-user-form-renderer", inputs: ["message", "node"], outputs: ["formSubmitted"] }, { kind: "component", type: AXMAssistBotImageLineComponent, selector: "axm-assist-bot-image-line", inputs: ["parentMessage", "fileId", "mimeType", "name"] }, { kind: "component", type: AXMAssistSuggestionChipsComponent, selector: "axm-assist-suggestion-chips", inputs: ["items"] }, { kind: "ngmodule", type: AXCodeEditorModule }, { kind: "component", type: i1$3.AXCodeEditorComponent, selector: "ax-code-editor", inputs: ["disabled", "value", "state", "name", "id", "language", "readonly", "placeholder", "lineNumbers", "lineWrapping", "tabSize", "indentWithTab", "theme", "extensions", "ariaLabel", "focusOnReady", "formatOnSave", "minRow", "customCompletions"], outputs: ["onValueChanged", "valueChange", "stateChange", "readonlyChange", "disabledChange", "ready", "save"] }, { kind: "component", type: AXPMarkdownViewerComponent, selector: "axp-markdown-viewer", inputs: ["markdown"] }, { kind: "directive", type: AXPMarkdownTemplateDirective, selector: "ng-template[axpMarkdownTemplate]", inputs: ["axpMarkdownTemplate"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
5636
- }
5637
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAssistTranscriptUserLineComponent, decorators: [{
5638
- type: Component,
5639
- args: [{ selector: 'axm-assist-transcript-user-line', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [
5640
- AXMNodeMessageRendererComponent,
5641
- AXMAssistBotImageLineComponent,
5642
- AXMAssistSuggestionChipsComponent,
5643
- AXCodeEditorModule,
5644
- AXPMarkdownViewerComponent,
5645
- AXPMarkdownTemplateDirective,
5646
- FormsModule,
5647
- ], template: "<div class=\"axm-assist-bot axm-assist-bot__final-line\">\n @for (item of items(); track $index; let itemIndex = $index) {\n @switch (item.kind) {\n @case ('text') {\n @let parsed = parseAssistLineText(item.content);\n @if (parsed.body.trim()) {\n <div class=\"axm-assist-bot__segment axm-assist-renderer__markdown\" [attr.dir]=\"segmentDir(parsed.body)\">\n <axp-markdown-viewer [markdown]=\"parsed.body\">\n <ng-template axpMarkdownTemplate=\"code\" let-segment>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"markdownCodeValue(segment)\"\n [readonly]=\"true\"\n [language]=\"markdownCodeLanguage(segment)\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n </ng-template>\n </axp-markdown-viewer>\n </div>\n }\n }\n @case ('node') {\n @if (axmAssistWidgetNodeFromUnknown(item.content)) {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-chat-user-form-renderer [message]=\"syntheticNodeMessage(itemIndex, item.content)\" />\n </div>\n }\n }\n @case ('file') {\n <axm-assist-bot-image-line\n [parentMessage]=\"parentMessage()\"\n [fileId]=\"item.fileId\"\n />\n }\n @case ('followUp') {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-assist-suggestion-chips [items]=\"item.items\" />\n </div>\n }\n }\n }\n</div>\n", styles: [".axm-assist-renderer{display:flex;flex-direction:column;gap:.25rem}.axm-assist-renderer axm-assist-suggestion-chips>div{padding:0;padding-top:1rem}.axm-assist-bot,.axm-assist-bot__final-line{display:flex;flex-direction:column;gap:.75rem}.axm-assist-bot__segment{unicode-bidi:isolate;font-size:.95rem;line-height:1.8;letter-spacing:.002em;color:rgb(var(--ax-sys-color-on-surface));text-wrap:pretty}.axm-assist-bot__line--user{align-self:flex-end}.axm-assist-bot__line--tool-role{align-self:stretch}.axm-assist-bot__tool-result{border-radius:.5rem;background:rgb(var(--ax-sys-color-lighter-surface));padding:.5rem .75rem}.axm-assist-bot__fallback{font-size:.88rem;line-height:1.75;word-break:break-word;opacity:.9}.axm-assist-renderer__cursor{display:inline-block;inline-size:6px;block-size:1em;margin-inline-start:2px;background:rgb(var(--ax-sys-color-primary-500));border-radius:1px;animation:axm-blink .8s steps(2) infinite;vertical-align:text-bottom}@keyframes axm-blink{0%{opacity:1}50%{opacity:0}}.axm-assist-renderer__stream-content{display:flex;flex-direction:column;gap:.5rem}.axm-assist-renderer__streaming-activity{display:flex;align-items:center;gap:.5rem;padding-block:.15rem}.axm-assist-renderer__activity-label{line-height:1.45}.axm-assist-renderer__text{white-space:pre-line;word-break:break-word;line-height:1.85;font-size:.95rem;letter-spacing:.002em;text-wrap:pretty}.axm-assist-bot__segment ax-conversation-text-renderer{display:block}.axm-assist-bot__segment ax-conversation-text-renderer :is(p,ul,ol),.axm-assist-renderer__markdown .axp-markdown-viewer__content :is(p,ul,ol){margin-block:.45rem}.axm-assist-bot__segment ax-conversation-text-renderer li,.axm-assist-renderer__markdown .axp-markdown-viewer__content li{line-height:1.8}.axm-assist-renderer__accordion-group{width:100%}.axm-assist-renderer__collapse-shell{border-radius:.625rem;overflow:hidden;background:rgb(var(--ax-sys-color-lighter-surface))}.axm-assist-renderer__collapse-body{margin:0;padding:0;border-radius:0 0 .5rem .5rem;background:transparent}.axm-assist-renderer__collapse-body>.axm-assist-renderer__agent-live-block--in-accordion{padding-inline:.5rem;padding-block-end:.35rem}.axm-assist-renderer__accordion-header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.5rem .75rem;cursor:pointer;background:transparent;border:none;border-radius:.625rem .625rem 0 0;transition:background-color .15s ease}.axm-assist-renderer__collapse-shell>.axm-assist-renderer__accordion-header:hover{background:rgb(var(--ax-sys-color-light-surface))}.axm-assist-renderer__accordion-header-main{min-inline-size:0;display:flex;flex-direction:column;gap:.1rem}.axm-assist-renderer__accordion-header-title{font-size:.8125rem;line-height:1.25;font-weight:600;color:rgb(var(--ax-sys-color-on-surface));display:inline-flex;align-items:center;gap:.4rem}.axm-assist-renderer__header-trailing{flex-shrink:0;display:inline-flex;align-items:center;gap:.35rem}.axm-assist-renderer__delegated-agent-detail-link{padding:.25rem;text-decoration:underline;padding-top:0}.axm-assist-renderer__badge{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;max-width:min(100%,14rem);padding:.1875rem .65rem;border-radius:9999px;font-size:.6875rem;font-weight:600;line-height:1.3;letter-spacing:.03em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.axm-assist-renderer__badge--warning{background:rgb(var(--ax-sys-color-warning-100))}.axm-assist-renderer__badge--primary{background:rgb(var(--ax-sys-color-primary-100))}.axm-assist-renderer__badge--success{background:rgb(var(--ax-sys-color-success-100))}.axm-assist-renderer__thinking-chevron{display:inline-block;font-size:.65rem;opacity:.65;transition:transform .2s ease;line-height:1;flex-shrink:0}.axm-assist-renderer__thinking-chevron--expanded{transform:rotate(180deg)}.axm-assist-renderer__thinking-body{padding:.625rem .75rem .75rem;font-size:.78rem;color:rgb(var(--ax-sys-color-neutral-700));word-break:break-word;line-height:1.55}.axm-assist-renderer__tools{display:flex;flex-direction:column;gap:.5rem}.axm-assist-renderer__tool-card{border-radius:.625rem;overflow:hidden}.axm-assist-renderer__tool-body{padding:.625rem .75rem .75rem;display:flex;flex-direction:column;gap:.35rem}.axm-assist-renderer__tool-section-label{font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:rgb(var(--ax-sys-color-neutral-700))}.axm-assist-renderer__tool-pre{margin:0;max-block-size:10rem;overflow:auto;border-radius:.375rem;background:rgb(var(--ax-sys-color-light-surface));padding:.5rem;font-family:var(--ax-font-mono, monospace);font-size:.675rem;line-height:1.45;word-break:break-word}.axm-assist-renderer__run-meta-wrap{margin-block-start:.45rem}.axm-assist-renderer__run-meta-header-sub{font-size:.7rem;line-height:1.35;color:rgb(var(--ax-sys-color-neutral-700));white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.axm-assist-renderer__run-meta{margin-block-start:.45rem;padding:.55rem .65rem .6rem;border-radius:.625rem;background:rgb(var(--ax-sys-color-lighter-surface));display:flex;flex-direction:column;gap:.45rem}.axm-assist-renderer__run-meta--panel{margin-block-start:0;padding:.45rem .5rem .55rem;background:transparent;border-radius:0}.axm-assist-renderer__run-meta-grid{display:flex;gap:.4rem}.axm-assist-renderer__meta-tile{min-width:0;padding:.4rem .5rem .45rem;border-radius:.45rem;background:rgb(var(--ax-sys-color-light-surface))}.axm-assist-renderer__meta-tile--wide{grid-column:1/-1}.axm-assist-renderer__meta-tile--accent{background:rgb(var(--ax-sys-color-primary-50))}.axm-assist-renderer__meta-tile-label{font-size:.6rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:rgb(var(--ax-sys-color-neutral-700));margin-block-end:.2rem}.axm-assist-renderer__meta-tile-value{font-size:.78rem;font-weight:600;line-height:1.35;color:rgb(var(--ax-sys-color-on-surface));word-break:break-word}.axm-assist-renderer__meta-tile-value--mono{font-variant-numeric:tabular-nums;font-feature-settings:\"tnum\" 1}.axm-assist-renderer__meta-tile-sub{margin-block-start:.15rem;font-size:.65rem;line-height:1.3;color:rgb(var(--ax-sys-color-neutral-700));font-family:var(--ax-font-mono, ui-monospace, monospace);word-break:break-all}.axm-assist-renderer__meta-tile-note{display:inline;margin-inline-start:.2rem;font-size:.65rem;font-weight:500;color:rgb(var(--ax-sys-color-success-700))}.axm-assist-renderer__tool-editor-wrap{border-radius:.375rem;overflow:hidden;background:rgb(var(--ax-sys-color-light-surface))}.axm-assist-renderer__waiting{display:flex;gap:.25rem;padding:.25rem 0}.axm-assist-renderer__dot{inline-size:6px;block-size:6px;border-radius:50%;background:rgb(var(--ax-sys-color-neutral-500));animation:axm-blink 1.2s ease-in-out infinite}.axm-assist-renderer__dot:nth-child(2){animation-delay:.2s}.axm-assist-renderer__dot:nth-child(3){animation-delay:.4s}.axm-assist-renderer__agent-live-block{border-radius:.75rem;background:rgb(var(--ax-sys-color-lighter-surface));padding:.75rem .875rem;display:flex;flex-direction:column;gap:.65rem;max-inline-size:min(42rem,100%)}.axm-assist-renderer__agent-live-block--in-accordion{background:rgb(var(--ax-sys-color-light-surface));border-radius:.5rem;padding:.5rem .55rem .55rem;max-inline-size:none}.axm-assist-renderer__agent-live-header{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem}.axm-assist-renderer__agent-live-title{font-size:.8125rem;font-weight:600;color:rgb(var(--ax-sys-color-on-surface));flex:1;min-inline-size:0}.axm-assist-renderer__agent-live-prompt{font-size:.8125rem;line-height:1.55;word-break:break-word;padding:.5rem .75rem;border-radius:1.25rem;background:rgb(var(--ax-sys-color-lightest-surface));align-self:flex-end;max-inline-size:min(92%,36rem)}.axm-assist-renderer__agent-live-stream{font-size:.8125rem;line-height:1.55;white-space:pre-line;word-break:break-word;padding-block-start:.15rem}.axm-assist-renderer__agent-live-nested-tools{display:flex;flex-direction:column;gap:.35rem;padding-block-start:.35rem}.axm-assist-renderer__agent-live-nested-row{display:flex;align-items:center;gap:.45rem;font-size:.72rem}.axm-assist-renderer__agent-live-nested-name{font-family:var(--ax-font-mono, monospace);font-size:.7rem;flex:1;min-inline-size:0;overflow:hidden;text-overflow:ellipsis}.axm-assist-renderer__agent-live-nested-status{color:rgb(var(--ax-sys-color-neutral-600));flex-shrink:0}\n"] }]
5648
- }], propDecorators: { line: [{ type: i0.Input, args: [{ isSignal: true, alias: "line", required: true }] }], parentMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "parentMessage", required: true }] }] } });
5649
-
5650
- //#region ---- Imports ----
5651
- //#endregion
5652
- //#region ---- Dialog ----
5653
- /**
5654
- * Opens a read-only specialist sub-run transcript for one delegated {@code agent:*} tool call.
5655
- * Renders {@link AXPAiChatMessage} lines (role + responses[]) in conversation-owned UI.
5656
- */
5657
- async function axmOpenAssistDelegatedAgentDetailDialog(options) {
5658
- const callId = options.callId?.trim() ?? '';
5659
- if (!callId) {
5660
- return;
5661
- }
5662
- const entry = options.delegatedTranscriptsByCallId[callId];
5663
- const catalogId = axpAiParseSupervisorAgentToolName(options.toolName);
5664
- const catalogTitle = catalogId != null ? options.resolveCatalogTitle?.(catalogId)?.trim() : undefined;
5665
- const titleBase = options.resolvedAgentLabel?.trim() ||
5666
- entry?.agentName?.trim() ||
5667
- catalogTitle ||
5668
- options.toolName.trim() ||
5669
- callId;
5670
- const [titleSuffix, missingHint] = await Promise.all([
5671
- options.translationService.translateAsync('@conversation:chat.assist-renderer.delegated-agent.dialog-title-suffix'),
5672
- options.translationService.translateAsync('@conversation:chat.assist-renderer.delegated-agent.transcript-missing'),
5673
- ]);
5674
- const comp = (await import('./acorex-modules-conversation-assist-delegated-agent-detail-popup.component-DQlE8l4c.mjs'))
5675
- .AXMAssistDelegatedAgentDetailPopupComponent;
5676
- const data = {
5677
- delegationCallId: callId,
5678
- messages: entry?.messages ?? [],
5679
- runInput: entry?.runInput,
5680
- agentName: entry?.agentName?.trim() || titleBase,
5681
- emptyHint: entry?.messages?.length ? undefined : missingHint,
5682
- agentTitleById: options.agentTitleById ?? (catalogId && catalogTitle ? { [catalogId]: catalogTitle } : {}),
5683
- };
5684
- await options.popupService.open(comp, {
5685
- title: `${titleBase} — ${titleSuffix ?? 'Full Specialist Run'}`,
5686
- size: 'lg',
5687
- data,
5688
- });
5689
- }
5690
- //#endregion
5691
-
5692
6190
  //#region ---- Imports ----
5693
6191
  //#endregion
5694
6192
  //#region ---- Component ----
@@ -5708,12 +6206,14 @@ class AXMAssistMessageRendererComponent {
5708
6206
  this.settingsService = inject(AXPSettingsService);
5709
6207
  this.translation = inject(AXTranslationService);
5710
6208
  this.popupService = inject(AXPopupService);
6209
+ this.messageApi = inject(AXMChatMessageApi);
5711
6210
  this.agentData = this.entityService
5712
6211
  .withEntity(RootConfig$1.module.name, RootConfig$1.entities.agent.name)
5713
6212
  .data();
5714
6213
  this.loadingAgentIds = new Set();
5715
6214
  this.agentTitleById = signal({}, ...(ngDevMode ? [{ debugName: "agentTitleById" }] : /* istanbul ignore next */ []));
5716
6215
  this.contentState = signal('ready', ...(ngDevMode ? [{ debugName: "contentState" }] : /* istanbul ignore next */ []));
6216
+ this.isRetrying = signal(false, ...(ngDevMode ? [{ debugName: "isRetrying" }] : /* istanbul ignore next */ []));
5717
6217
  this.debugModeEnabled = signal(false, ...(ngDevMode ? [{ debugName: "debugModeEnabled" }] : /* istanbul ignore next */ []));
5718
6218
  /** False until tenant debug setting has been read; avoids flashing debug UI before resolve. */
5719
6219
  this.debugModeResolved = signal(false, ...(ngDevMode ? [{ debugName: "debugModeResolved" }] : /* istanbul ignore next */ []));
@@ -5739,9 +6239,21 @@ class AXMAssistMessageRendererComponent {
5739
6239
  }
5740
6240
  return { usage, durationMs, modelEntityId: id, modelTitle: title };
5741
6241
  }, ...(ngDevMode ? [{ debugName: "assistRunDebug" }] : /* istanbul ignore next */ []));
6242
+ this.assistResponseStatus = computed(() => axmReadAssistResponseStatus(this.message().metadata), ...(ngDevMode ? [{ debugName: "assistResponseStatus" }] : /* istanbul ignore next */ []));
6243
+ this.showRetryScreen = computed(() => axmIsAssistRetryableStatus(this.assistResponseStatus()) && !this.isRetrying(), ...(ngDevMode ? [{ debugName: "showRetryScreen" }] : /* istanbul ignore next */ []));
6244
+ this.assistResponseError = computed(() => axmReadAssistResponseError(this.message().metadata), ...(ngDevMode ? [{ debugName: "assistResponseError" }] : /* istanbul ignore next */ []));
6245
+ this.assistRetryTitleKey = computed(() => this.assistResponseStatus() === 'failed'
6246
+ ? '@conversation:chat.assist-renderer.retry.failed.title'
6247
+ : '@conversation:chat.assist-renderer.retry.incomplete.title', ...(ngDevMode ? [{ debugName: "assistRetryTitleKey" }] : /* istanbul ignore next */ []));
6248
+ this.assistRetryDescriptionKey = computed(() => this.assistResponseStatus() === 'failed'
6249
+ ? '@conversation:chat.assist-renderer.retry.failed.description'
6250
+ : '@conversation:chat.assist-renderer.retry.incomplete.description', ...(ngDevMode ? [{ debugName: "assistRetryDescriptionKey" }] : /* istanbul ignore next */ []));
6251
+ this.assistRetryAlertIcon = computed(() => this.assistResponseStatus() === 'failed'
6252
+ ? 'fa-light fa-circle-exclamation'
6253
+ : 'fa-light fa-circle-pause', ...(ngDevMode ? [{ debugName: "assistRetryAlertIcon" }] : /* istanbul ignore next */ []));
5742
6254
  this.rendererState = computed(() => ({
5743
6255
  deliveryStatus: this.message().status,
5744
- contentState: this.contentState(),
6256
+ contentState: this.showRetryScreen() ? 'error' : this.contentState(),
5745
6257
  }), ...(ngDevMode ? [{ debugName: "rendererState" }] : /* istanbul ignore next */ []));
5746
6258
  //#endregion
5747
6259
  //#region ---- Transcript UI ----
@@ -5790,24 +6302,9 @@ class AXMAssistMessageRendererComponent {
5790
6302
  return null;
5791
6303
  }, ...(ngDevMode ? [{ debugName: "assistPayloadLine" }] : /* istanbul ignore next */ []));
5792
6304
  /**
5793
- * Follow-up chips for debug UI always taken from {@link assistPayloadLine} so chips stay after the answer
5794
- * (same order as non-debug), not inline on earlier transcript segments (e.g. delegated agent tool results).
6305
+ * Debug transcript hides user-facing answer segments when the unified payload bubble is shown.
5795
6306
  */
5796
- this.assistDebugFollowUpItems = computed(() => {
5797
- if (!this.showDebugUi() || this.isStreaming()) {
5798
- return [];
5799
- }
5800
- const line = this.assistPayloadLine();
5801
- if (!line) {
5802
- return [];
5803
- }
5804
- for (const item of axmAssistUserVisibleItemsForLine(line)) {
5805
- if (item.kind === 'followUp') {
5806
- return item.items;
5807
- }
5808
- }
5809
- return [];
5810
- }, ...(ngDevMode ? [{ debugName: "assistDebugFollowUpItems" }] : /* istanbul ignore next */ []));
6307
+ this.assistHideTranscriptAnswerSegments = computed(() => !this.isStreaming() && this.assistPayloadLine() != null, ...(ngDevMode ? [{ debugName: "assistHideTranscriptAnswerSegments" }] : /* istanbul ignore next */ []));
5811
6308
  /**
5812
6309
  * Transcript lines that render at least one visible segment. Skips e.g. {@code tool} role lines
5813
6310
  * whose results are merged into assistant tool UI (would otherwise produce empty {@code axm-assist-bot__line}).
@@ -5854,7 +6351,7 @@ class AXMAssistMessageRendererComponent {
5854
6351
  }, ...(ngDevMode ? [{ debugName: "loadDebugMode" }] : /* istanbul ignore next */ []));
5855
6352
  //#endregion
5856
6353
  //#region ---- Legacy computed ----
5857
- this.isStreaming = computed(() => !!this.readMeta('isStreaming'), ...(ngDevMode ? [{ debugName: "isStreaming" }] : /* istanbul ignore next */ []));
6354
+ this.isStreaming = computed(() => axmIsAssistStreamingStatus(this.assistResponseStatus()), ...(ngDevMode ? [{ debugName: "isStreaming" }] : /* istanbul ignore next */ []));
5858
6355
  /** Phase label for the streaming activity strip (translation key suffix via {@link assistActivityMessageKey}). */
5859
6356
  this.assistStreamingPhase = computed(() => {
5860
6357
  if (!this.isStreaming()) {
@@ -5886,6 +6383,41 @@ class AXMAssistMessageRendererComponent {
5886
6383
  const d = this.readMeta('streamDraftText');
5887
6384
  return typeof d === 'string' ? d : '';
5888
6385
  }, ...(ngDevMode ? [{ debugName: "streamText" }] : /* istanbul ignore next */ []));
6386
+ /** Answer markdown while streaming (draft) or after finalize (payload); shared by debug and non-debug. */
6387
+ this.assistAnswerMarkdown = computed(() => {
6388
+ const live = axmSanitizeAssistUserAnswerText(this.streamText());
6389
+ if (this.isStreaming()) {
6390
+ return live;
6391
+ }
6392
+ return axmSanitizeAssistUserAnswerText(this.parsed().body.trim() || live);
6393
+ }, ...(ngDevMode ? [{ debugName: "assistAnswerMarkdown" }] : /* istanbul ignore next */ []));
6394
+ /** Non-text payload segments shown below the answer after finalize. */
6395
+ this.assistPayloadAppendItems = computed(() => {
6396
+ if (this.isStreaming()) {
6397
+ return [];
6398
+ }
6399
+ const line = this.assistPayloadLine();
6400
+ if (!line) {
6401
+ return [];
6402
+ }
6403
+ return axmAssistUserVisibleItemsForLine(line)
6404
+ .filter((item) => item.kind !== 'text')
6405
+ .sort((a, b) => {
6406
+ if (a.kind === 'followUp') {
6407
+ return 1;
6408
+ }
6409
+ if (b.kind === 'followUp') {
6410
+ return -1;
6411
+ }
6412
+ return 0;
6413
+ });
6414
+ }, ...(ngDevMode ? [{ debugName: "assistPayloadAppendItems" }] : /* istanbul ignore next */ []));
6415
+ /**
6416
+ * Non-debug stream panel: skip the empty wrapper when there is no answer, append content, or live stream.
6417
+ */
6418
+ this.showNonDebugStreamPanel = computed(() => this.isStreaming() ||
6419
+ this.assistAnswerMarkdown().trim().length > 0 ||
6420
+ this.assistPayloadAppendItems().length > 0, ...(ngDevMode ? [{ debugName: "showNonDebugStreamPanel" }] : /* istanbul ignore next */ []));
5889
6421
  this.toolCalls = computed(() => {
5890
6422
  const raw = this.readMeta('toolCalls');
5891
6423
  return Array.isArray(raw) ? raw : [];
@@ -5900,24 +6432,19 @@ class AXMAssistMessageRendererComponent {
5900
6432
  .filter((i) => i.kind === 'text')
5901
6433
  .map((i) => axmParseAssistTranscriptTextEnvelope(i.content).body.trim())
5902
6434
  .filter((t) => t.length > 0);
5903
- return { thinking: null, body: textParts.join('\n\n') };
6435
+ return { thinking: null, body: axmSanitizeAssistUserAnswerText(textParts.join('\n\n')) };
5904
6436
  }
5905
6437
  return { thinking: null, body: '' };
5906
6438
  }, ...(ngDevMode ? [{ debugName: "parsed" }] : /* istanbul ignore next */ []));
5907
- /** Non-debug finalized UI already shows {@link assistPayloadLine}; debug fallback must not duplicate it. */
5908
- this.assistNonDebugPayloadFinalShown = computed(() => {
5909
- if (this.showDebugUi() || this.isStreaming()) {
5910
- return false;
5911
- }
5912
- const line = this.assistPayloadLine();
5913
- return line != null && axmAssistUserVisibleItemsForLine(line).length > 0;
5914
- }, ...(ngDevMode ? [{ debugName: "assistNonDebugPayloadFinalShown" }] : /* istanbul ignore next */ []));
5915
6439
  }
5916
6440
  /**
5917
6441
  * Assistant text shown in the transcript: hides delegated sub-run reflection lines from the main markdown stream
5918
6442
  * unless debug mode is on.
5919
6443
  */
5920
6444
  assistTranscriptAssistantTextBodyForDisplay(line, body) {
6445
+ if (this.assistHideTranscriptAnswerSegments()) {
6446
+ return '';
6447
+ }
5921
6448
  if (axpAiChatMessageIsDelegatedReflectionExcluded(line) && !this.showDebugUi()) {
5922
6449
  return '';
5923
6450
  }
@@ -5947,6 +6474,9 @@ class AXMAssistMessageRendererComponent {
5947
6474
  if (debug && parsed.thinking) {
5948
6475
  return true;
5949
6476
  }
6477
+ if (debug && this.assistHideTranscriptAnswerSegments()) {
6478
+ return false;
6479
+ }
5950
6480
  return parsed.body.trim().length > 0;
5951
6481
  }
5952
6482
  if (line.role === 'assistant' &&
@@ -5978,9 +6508,15 @@ class AXMAssistMessageRendererComponent {
5978
6508
  return true;
5979
6509
  }
5980
6510
  if (line.role === 'assistant' && seg.type === 'node') {
6511
+ if (debug && this.assistHideTranscriptAnswerSegments()) {
6512
+ return false;
6513
+ }
5981
6514
  return axmAssistWidgetNodeFromUnknown(seg.content) != null;
5982
6515
  }
5983
6516
  if (line.role === 'assistant' && seg.type === 'file') {
6517
+ if (debug && this.assistHideTranscriptAnswerSegments()) {
6518
+ return false;
6519
+ }
5984
6520
  return true;
5985
6521
  }
5986
6522
  if (line.role === 'assistant' && seg.type === 'followUp') {
@@ -6009,6 +6545,12 @@ class AXMAssistMessageRendererComponent {
6009
6545
  payload: { type: 'node', content },
6010
6546
  });
6011
6547
  }
6548
+ syntheticAppendNodeMessage(itemIndex, content) {
6549
+ return axmSyntheticEmbedMessage(this.message(), `append-node-${itemIndex}`, {
6550
+ type: 'node',
6551
+ payload: { type: 'node', content },
6552
+ });
6553
+ }
6012
6554
  markdownCodeLanguage(segment) {
6013
6555
  if (this.isMarkdownCodeSegment(segment) && segment.language.trim()) {
6014
6556
  return segment.language;
@@ -6248,6 +6790,24 @@ class AXMAssistMessageRendererComponent {
6248
6790
  conversationSharedStorage.messageUpdates$.next(updated);
6249
6791
  }
6250
6792
  //#endregion
6793
+ //#region ---- Retry ----
6794
+ async onRetryAssistResponse() {
6795
+ if (this.isRetrying() || !this.showRetryScreen()) {
6796
+ return;
6797
+ }
6798
+ const message = this.message();
6799
+ this.isRetrying.set(true);
6800
+ try {
6801
+ await this.messageApi.retryAssistResponse(message.conversationId, message.id);
6802
+ }
6803
+ catch (error) {
6804
+ console.error('Failed to retry assist response:', error);
6805
+ }
6806
+ finally {
6807
+ this.isRetrying.set(false);
6808
+ }
6809
+ }
6810
+ //#endregion
6251
6811
  //#region ---- Formatters ----
6252
6812
  formatArgs(args) {
6253
6813
  if (args == null)
@@ -6330,18 +6890,19 @@ class AXMAssistMessageRendererComponent {
6330
6890
  }
6331
6891
  }
6332
6892
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAssistMessageRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6333
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMAssistMessageRendererComponent, isStandalone: true, selector: "axm-assist-message-renderer", inputs: { message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div class=\"axm-assist-renderer\">\n @if (showDebugUi() && useTranscriptUi()) {\n <div\n class=\"axm-assist-bot\"\n role=\"region\"\n [attr.aria-label]=\"('@conversation:chat.assist-renderer.aria.assistant-response' | translate | async) ?? ''\"\n >\n @for (item of visibleTranscriptLines(); track item.lineIndex) {\n @let line = item.line;\n @let lineIndex = item.lineIndex;\n <div\n class=\"axm-assist-bot__line\"\n [class.axm-assist-bot__line--user]=\"line.role === 'user'\"\n [class.axm-assist-bot__line--tool-role]=\"line.role === 'tool'\"\n >\n @for (seg of line.responses; track segIndex; let segIndex = $index) {\n @if (line.role === 'user' && seg.type === 'file') {\n <axm-assist-bot-image-line\n [parentMessage]=\"message()\"\n [fileId]=\"seg.content.fileId\"\n />\n } @else if (line.role === 'user' && seg.type === 'text') {\n <div class=\"axm-assist-bot__segment\" [attr.dir]=\"segmentDir(seg.content)\">\n <ax-conversation-text-renderer [message]=\"syntheticTextMessage(lineIndex, segIndex, seg.content)\" />\n </div>\n } @else if (line.role === 'assistant' && seg.type === 'think' && showDebugUi()) {\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__thinking-accordion axm-assist-renderer__collapse-shell !ax-mb-0\"\n axAccordionItem\n #thinkAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistThinkKey(lineIndex, segIndex))\"\n (onClick)=\"onAssistAccordionClick($event, assistThinkKey(lineIndex, segIndex))\"\n >\n <div\n class=\"axm-assist-renderer__accordion-header\"\n axAccordionItemHeader\n role=\"button\"\n [attr.aria-expanded]=\"!thinkAcc.isCollapsed()\"\n >\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!thinkAcc.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n <i class=\"fa-light fa-brain axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n {{ '@conversation:chat.assist-renderer.sections.thinking' | translate | async }}\n </span>\n </div>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div\n class=\"axm-assist-renderer__thinking-body axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(seg.content)\"\n >\n {{ seg.content }}\n </div>\n </div>\n </div>\n </div>\n </div>\n } @else if (line.role === 'assistant' && seg.type === 'text') {\n @let parsedLine = parseAssistLineText(seg.content);\n @let displayBody = assistTranscriptAssistantTextBodyForDisplay(line, parsedLine.body);\n @if (showDebugUi() && parsedLine.thinking) {\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__thinking-accordion axm-assist-renderer__collapse-shell !ax-mb-0\"\n axAccordionItem\n #thinkAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistThinkKey(lineIndex, segIndex))\"\n (onClick)=\"onAssistAccordionClick($event, assistThinkKey(lineIndex, segIndex))\"\n >\n <div\n class=\"axm-assist-renderer__accordion-header\"\n axAccordionItemHeader\n role=\"button\"\n [attr.aria-expanded]=\"!thinkAcc.isCollapsed()\"\n >\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!thinkAcc.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n <i class=\"fa-light fa-brain axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n {{ '@conversation:chat.assist-renderer.sections.thinking' | translate | async }}\n </span>\n </div>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div\n class=\"axm-assist-renderer__thinking-body axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(parsedLine.thinking)\"\n >\n {{ parsedLine.thinking }}\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n @if (displayBody.trim()) {\n <div class=\"axm-assist-bot__segment axm-assist-renderer__markdown\" [attr.dir]=\"segmentDir(displayBody)\">\n <axp-markdown-viewer [markdown]=\"displayBody\">\n <ng-template axpMarkdownTemplate=\"code\" let-segment>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"markdownCodeValue(segment)\"\n [readonly]=\"true\"\n [language]=\"markdownCodeLanguage(segment)\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n </ng-template>\n </axp-markdown-viewer>\n </div>\n }\n } @else if (\n line.role === 'assistant' &&\n (seg.type === 'agent' || seg.type === 'tool') &&\n isDelegatedAgentCommand(seg.content.command)\n ) {\n @if (showDebugUi()) {\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__tool-card axm-assist-renderer__collapse-shell !ax-mb-0\"\n axAccordionItem\n #agentDebugAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistAgentKey(seg.callId))\"\n (onClick)=\"onAssistAccordionClick($event, assistAgentKey(seg.callId))\"\n >\n <div class=\"axm-assist-renderer__accordion-header\" axAccordionItemHeader>\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!agentDebugAcc.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n <i class=\"fa-light fa-screwdriver-wrench axm-assist-renderer__tool-title-icon\"></i>\n {{ resolveToolDisplayTitle(seg.content.command) }}\n </span>\n </div>\n <div class=\"axm-assist-renderer__header-trailing\">\n <span class=\"axm-assist-renderer__badge axm-assist-renderer__badge--primary\">{{\n (resolveToolBadge(seg.content.command, '@conversation:chat.assist-renderer.badges.agent')\n | translate\n | async) ?? ''\n }}</span>\n </div>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div class=\"axm-assist-renderer__tool-body\">\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.input' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatArgs(seg.content.arguments)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n @if (toolResultForCallId(seg.callId); as resultLine) {\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.output' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatToolResultBody(resultLine)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n }\n </div>\n <div class=\"axm-assist-renderer__delegated-agent-detail-link\">\n <ax-button\n look=\"link\"\n color=\"primary\"\n class=\"ax-sm\"\n [text]=\"('@conversation:chat.assist-renderer.delegated-agent.detail' | translate | async) ?? ''\"\n [attr.aria-label]=\"\n ('@conversation:chat.assist-renderer.delegated-agent.detail-aria' | translate | async) ??\n ''\n \"\n (onClick)=\"\n openDelegatedAgentTranscriptDialog(\n seg.callId,\n seg.content.command,\n delegatedAgentLabelForCall(seg.callId)\n )\n \"\n ></ax-button>\n </div>\n </div>\n </div>\n </div>\n </div>\n } @else {\n @let res = toolResultForCallId(seg.callId);\n @let outcomeSegs = delegatedAgentOutcomeSegmentsForCall(res);\n @if (outcomeSegs.length > 0) {\n @for (outSeg of outcomeSegs; track $index) {\n @switch (outSeg.type) {\n @case ('text') {\n @let parsedOut = parseAssistLineText(outSeg.content);\n @if (parsedOut.body.trim()) {\n <div\n class=\"axm-assist-bot__segment axm-assist-renderer__markdown\"\n [attr.dir]=\"segmentDir(parsedOut.body)\"\n >\n <axp-markdown-viewer [markdown]=\"parsedOut.body\">\n <ng-template axpMarkdownTemplate=\"code\" let-segment>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"markdownCodeValue(segment)\"\n [readonly]=\"true\"\n [language]=\"markdownCodeLanguage(segment)\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n </ng-template>\n </axp-markdown-viewer>\n </div>\n }\n }\n @case ('think') {\n @if (showDebugUi()) {\n <div class=\"axm-assist-bot__segment\" [attr.dir]=\"segmentDir(outSeg.content)\">\n {{ outSeg.content }}\n </div>\n }\n }\n @case ('file') {\n <axm-assist-bot-image-line\n [parentMessage]=\"message()\"\n [fileId]=\"outSeg.content.fileId\"\n />\n }\n @case ('node') {\n @let assistNodeWidget = axmAssistWidgetNodeFromUnknown(outSeg.content);\n @if (assistNodeWidget) {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-chat-user-form-renderer\n [message]=\"syntheticNodeEmbedMessage(lineIndex, segIndex * 1000 + $index, outSeg.content)\"\n />\n </div>\n }\n }\n }\n }\n } @else if (delegatedAgentAnswerForCall(res).trim()) {\n @let agentFallbackText = delegatedAgentAnswerForCall(res);\n <div\n class=\"axm-assist-bot__segment axm-assist-renderer__markdown\"\n [attr.dir]=\"segmentDir(agentFallbackText)\"\n >\n <axp-markdown-viewer [markdown]=\"agentFallbackText\">\n <ng-template axpMarkdownTemplate=\"code\" let-segment>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"markdownCodeValue(segment)\"\n [readonly]=\"true\"\n [language]=\"markdownCodeLanguage(segment)\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n </ng-template>\n </axp-markdown-viewer>\n </div>\n }\n <div class=\"axm-assist-renderer__delegated-agent-detail-link\">\n <ax-button\n look=\"link\"\n color=\"primary\"\n class=\"ax-sm\"\n [text]=\"('@conversation:chat.assist-renderer.delegated-agent.detail' | translate | async) ?? ''\"\n [attr.aria-label]=\"\n ('@conversation:chat.assist-renderer.delegated-agent.detail-aria' | translate | async) ?? ''\n \"\n (onClick)=\"\n openDelegatedAgentTranscriptDialog(\n seg.callId,\n seg.content.command,\n delegatedAgentLabelForCall(seg.callId)\n )\n \"\n ></ax-button>\n </div>\n }\n } @else if (line.role === 'assistant' && seg.type === 'tool' && showDebugUi()) {\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__tool-card axm-assist-renderer__collapse-shell !ax-mb-0\"\n axAccordionItem\n #toolDebugAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistToolKey(seg.callId))\"\n (onClick)=\"onAssistAccordionClick($event, assistToolKey(seg.callId))\"\n >\n <div class=\"axm-assist-renderer__accordion-header\" axAccordionItemHeader>\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!toolDebugAcc.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n <i class=\"fa-light fa-screwdriver-wrench axm-assist-renderer__tool-title-icon\"></i>\n {{ resolveToolDisplayTitle(seg.content.command) }}\n </span>\n </div>\n <span class=\"axm-assist-renderer__badge axm-assist-renderer__badge--primary\">{{\n (resolveToolBadge(seg.content.command, '@conversation:chat.assist-renderer.badges.tool')\n | translate\n | async) ?? ''\n }}</span>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div class=\"axm-assist-renderer__tool-body\">\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.input' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatArgs(seg.content.arguments)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n @if (toolResultForCallId(seg.callId); as resultLine) {\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.output' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatToolResultBody(resultLine)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n } @else if (line.role === 'assistant' && seg.type === 'node') {\n @let assistNodeWidget = axmAssistWidgetNodeFromUnknown(seg.content);\n @if (assistNodeWidget) {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-chat-user-form-renderer\n [message]=\"syntheticNodeEmbedMessage(lineIndex, segIndex, seg.content)\"\n />\n </div>\n }\n } @else if (line.role === 'assistant' && seg.type === 'file') {\n <axm-assist-bot-image-line\n [parentMessage]=\"message()\"\n [fileId]=\"seg.content.fileId\"\n />\n } @else if (line.role === 'tool' && (seg.type === 'tool_result' || seg.type === 'agent_result')) {\n <!-- merged into the corresponding tool/agent accordion -->\n } @else if (line.role === 'system' && seg.type === 'text' && showDebugUi()) {\n <div class=\"axm-assist-bot__segment\" [attr.dir]=\"segmentDir(seg.content)\">\n <ax-conversation-text-renderer [message]=\"syntheticTextMessage(lineIndex, segIndex, seg.content)\" />\n </div>\n } @else {\n @if (showDebugUi() || line.role !== 'assistant') {\n <div\n class=\"axm-assist-bot__fallback axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(formatFallbackSegment(seg))\"\n >\n {{ formatFallbackSegment(seg) }}\n </div>\n }\n }\n }\n </div>\n }\n @if (isStreaming()) {\n <div class=\"axm-assist-renderer__streaming-activity\" role=\"status\" aria-live=\"polite\">\n <span\n class=\"axm-assist-renderer__activity-spin ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent fa-spin ax-shrink-0\"\n aria-hidden=\"true\"\n ></span>\n <span class=\"axm-assist-renderer__activity-label ax-text-xs ax-text-muted ax-italic\">{{\n assistActivityMessageKey() | translate | async\n }}</span>\n </div>\n }\n <!-- @if (isStreaming() && streamText().trim()) {\n <span class=\"axm-assist-renderer__cursor\" aria-hidden=\"true\"></span>\n } -->\n </div>\n } @else if (!showDebugUi() && !isStreaming()) {\n @if (assistPayloadLine(); as line) {\n <div\n role=\"region\"\n [attr.aria-label]=\"('@conversation:chat.assist-renderer.aria.assistant-response' | translate | async) ?? ''\"\n >\n <axm-assist-transcript-user-line [line]=\"line\" [parentMessage]=\"message()\" />\n </div>\n }\n } @else if (!showDebugUi() && isStreaming()) {\n <div class=\"axm-assist-renderer__stream-content axm-assist-renderer__stream-content--non-debug\">\n <div class=\"axm-assist-renderer__streaming-activity\" role=\"status\" aria-live=\"polite\">\n <span\n class=\"axm-assist-renderer__activity-spin ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent fa-spin ax-shrink-0\"\n aria-hidden=\"true\"\n ></span>\n <span class=\"axm-assist-renderer__activity-label ax-text-xs ax-text-muted ax-italic\">{{\n assistActivityMessageKey() | translate | async\n }}</span>\n </div>\n </div>\n } @else if (showDebugUi()) {\n @if (isStreaming()) {\n <div class=\"axm-assist-renderer__stream-content\">\n <div class=\"axm-assist-renderer__streaming-activity\" role=\"status\" aria-live=\"polite\">\n <span\n class=\"axm-assist-renderer__activity-spin ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent fa-spin ax-shrink-0\"\n aria-hidden=\"true\"\n ></span>\n <span class=\"axm-assist-renderer__activity-label ax-text-xs ax-text-muted ax-italic\">{{\n assistActivityMessageKey() | translate | async\n }}</span>\n </div>\n @if (streamThink().trim()) {\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__thinking-accordion axm-assist-renderer__collapse-shell !ax-mb-0\"\n axAccordionItem\n #thinkAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistThinkStreamKey())\"\n (onClick)=\"onAssistAccordionClick($event, assistThinkStreamKey())\"\n >\n <div\n class=\"axm-assist-renderer__accordion-header\"\n axAccordionItemHeader\n role=\"button\"\n [attr.aria-expanded]=\"!thinkAcc.isCollapsed()\"\n >\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!thinkAcc.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n <i class=\"fa-light fa-brain axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n {{ '@conversation:chat.assist-renderer.sections.thinking' | translate | async }}\n </span>\n </div>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div\n class=\"axm-assist-renderer__thinking-body axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(streamThink())\"\n >\n {{ streamThink() }}\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n @if (streamText()) {\n <div class=\"axm-assist-renderer__text axm-assist-bot__segment\" [attr.dir]=\"segmentDir(streamText())\">\n {{ streamText() }}\n </div>\n }\n @if (toolCalls().length) {\n <div class=\"axm-assist-renderer__tools\">\n @for (tc of toolCalls(); track tc.id) {\n @if (isDelegatedAgentCommand(tc.name)) {\n @let legacyAgentAns = delegatedAnswerFromToolOutputString(tc.output);\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__tool-card axm-assist-renderer__agent-accordion axm-assist-renderer__collapse-shell\"\n axAccordionItem\n #legacyAgentAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistAgentKey(tc.id))\"\n (onClick)=\"onAssistAccordionClick($event, assistAgentKey(tc.id))\"\n >\n <div\n class=\"axm-assist-renderer__accordion-header\"\n axAccordionItemHeader\n role=\"button\"\n [attr.aria-expanded]=\"!legacyAgentAcc.isCollapsed()\"\n >\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span\n class=\"axm-assist-renderer__accordion-header-title ax-inline-flex ax-items-center ax-gap-2 ax-flex-wrap\"\n >\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!legacyAgentAcc.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n @if (tc.state === 'running') {\n <span\n class=\"axm-assist-renderer__agent-live-spin ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent fa-spin ax-shrink-0\"\n aria-hidden=\"true\"\n ></span>\n } @else {\n <span\n class=\"ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-bg-success-500 ax-shrink-0\"\n aria-hidden=\"true\"\n ></span>\n }\n <i class=\"fa-light fa-people-group ax-text-primary-500\" aria-hidden=\"true\"></i>\n <span class=\"axm-assist-renderer__agent-live-title\">{{\n resolveToolDisplayTitle(tc.name)\n }}</span>\n </span>\n </div>\n <div class=\"axm-assist-renderer__header-trailing\">\n <span\n class=\"axm-assist-renderer__badge\"\n [class.axm-assist-renderer__badge--primary]=\"tc.state === 'running'\"\n [class.axm-assist-renderer__badge--success]=\"tc.state !== 'running'\"\n >\n {{\n (resolveToolBadge(\n tc.name,\n tc.state === 'running'\n ? '@conversation:chat.assist-renderer.badges.running'\n : '@conversation:chat.assist-renderer.badges.agent'\n )\n | translate\n | async) ?? ''\n }}\n </span>\n </div>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div\n class=\"axm-assist-renderer__agent-live-block axm-assist-renderer__agent-live-block--in-accordion\"\n role=\"region\"\n >\n <div\n class=\"axm-assist-renderer__agent-live-prompt\"\n [attr.dir]=\"segmentDir(delegatedPromptPreview(tc.arguments))\"\n >\n {{ delegatedPromptPreview(tc.arguments) }}\n </div>\n @if (tc.nestedStreamText?.trim()) {\n <div\n class=\"axm-assist-renderer__agent-live-stream\"\n [attr.dir]=\"segmentDir(tc.nestedStreamText ?? '')\"\n >\n {{ tc.nestedStreamText }}\n </div>\n }\n @if (tc.nestedTools?.length) {\n <div class=\"axm-assist-renderer__agent-live-nested-tools\">\n @for (nt of tc.nestedTools; track nt.id) {\n <div class=\"axm-assist-renderer__agent-live-nested-row\">\n @if (nt.state === 'running') {\n <span\n class=\"ax-inline-block ax-w-2.5 ax-h-2.5 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent fa-spin ax-shrink-0\"\n aria-hidden=\"true\"\n ></span>\n } @else {\n <span\n class=\"ax-inline-block ax-w-2.5 ax-h-2.5 ax-rounded-full ax-bg-success-500 ax-shrink-0\"\n aria-hidden=\"true\"\n ></span>\n }\n <code class=\"axm-assist-renderer__agent-live-nested-name\">{{ nt.name }}</code>\n <span class=\"axm-assist-renderer__agent-live-nested-status\">{{\n nt.state === 'running' ? '\u2026' : '\u2713'\n }}</span>\n </div>\n }\n </div>\n }\n @if (legacyAgentAns) {\n <div class=\"axm-assist-renderer__agent-live-nested-tools\">\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.agent-answer' | translate | async }}\n </div>\n <div\n class=\"axm-assist-renderer__agent-live-stream\"\n [attr.dir]=\"segmentDir(legacyAgentAns)\"\n >\n {{ legacyAgentAns }}\n </div>\n </div>\n }\n </div>\n @if (tc.state !== 'running') {\n <div class=\"axm-assist-renderer__delegated-agent-detail-link\">\n <ax-button\n look=\"link\"\n color=\"primary\"\n class=\"ax-sm\"\n [text]=\"('@conversation:chat.assist-renderer.delegated-agent.detail' | translate | async) ?? ''\"\n [attr.aria-label]=\"\n ('@conversation:chat.assist-renderer.delegated-agent.detail-aria' | translate | async) ??\n ''\n \"\n (onClick)=\"\n openDelegatedAgentTranscriptDialog(tc.id, tc.name, delegatedAgentLabelForCall(tc.id))\n \"\n ></ax-button>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n } @else {\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__tool-card axm-assist-renderer__collapse-shell\"\n axAccordionItem\n #legacyStreamDbgAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistLegacyToolAccordionKey(tc))\"\n (onClick)=\"onAssistLegacyAccordionClick($event, tc)\"\n >\n <div class=\"axm-assist-renderer__accordion-header\" axAccordionItemHeader>\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!legacyStreamDbgAcc.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n <i class=\"fa-light fa-screwdriver-wrench axm-assist-renderer__tool-title-icon\"></i>\n {{ resolveToolDisplayTitle(tc.name) }}\n </span>\n </div>\n <span\n class=\"axm-assist-renderer__badge\"\n [class.axm-assist-renderer__badge--primary]=\"tc.state === 'running'\"\n [class.axm-assist-renderer__badge--success]=\"tc.state === 'done'\"\n >\n {{\n (resolveToolBadge(\n tc.name,\n tc.state === 'running'\n ? '@conversation:chat.assist-renderer.badges.running'\n : '@conversation:chat.assist-renderer.badges.done'\n )\n | translate\n | async) ?? ''\n }}\n </span>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div class=\"axm-assist-renderer__tool-body\">\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.input' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatArgs(tc.arguments)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n @if (tc.output) {\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.output' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatJson(tc.output)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n }\n </div>\n }\n @if (isStreaming() && streamText().trim()) {\n <span class=\"axm-assist-renderer__cursor\"></span>\n } @else if (isStreaming() && !streamText().trim() && !streamThink().trim() && !toolCalls().length) {\n <div class=\"axm-assist-renderer__waiting\">\n <span class=\"axm-assist-renderer__dot\"></span>\n <span class=\"axm-assist-renderer__dot\"></span>\n <span class=\"axm-assist-renderer__dot\"></span>\n </div>\n }\n </div>\n } @else {\n @if (parsed().thinking) {\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__thinking-accordion axm-assist-renderer__collapse-shell !ax-mb-0\"\n axAccordionItem\n #thinkAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistThinkFinalKey())\"\n (onClick)=\"onAssistAccordionClick($event, assistThinkFinalKey())\"\n >\n <div\n class=\"axm-assist-renderer__accordion-header\"\n axAccordionItemHeader\n role=\"button\"\n [attr.aria-expanded]=\"!thinkAcc.isCollapsed()\"\n >\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!thinkAcc.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n <i class=\"fa-light fa-brain axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n {{ '@conversation:chat.assist-renderer.sections.thinking' | translate | async }}\n </span>\n </div>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div\n class=\"axm-assist-renderer__thinking-body axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(parsed().thinking)\"\n >\n {{ parsed().thinking }}\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n @if (toolCalls().length) {\n <div class=\"axm-assist-renderer__tools\">\n @for (tc of toolCalls(); track tc.id) {\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__tool-card axm-assist-renderer__collapse-shell\"\n axAccordionItem\n #legacyDoneDbgAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistLegacyToolAccordionKey(tc))\"\n (onClick)=\"onAssistLegacyAccordionClick($event, tc)\"\n >\n <div class=\"axm-assist-renderer__accordion-header\" axAccordionItemHeader>\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!legacyDoneDbgAcc.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n <i class=\"fa-light fa-screwdriver-wrench axm-assist-renderer__tool-title-icon\"></i>\n {{ resolveToolDisplayTitle(tc.name) }}\n </span>\n </div>\n <span class=\"axm-assist-renderer__badge axm-assist-renderer__badge--success\">{{\n (resolveToolBadge(tc.name, '@conversation:chat.assist-renderer.badges.done') | translate | async) ??\n ''\n }}</span>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div class=\"axm-assist-renderer__tool-body\">\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.input' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatArgs(tc.arguments)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n @if (tc.nestedStreamText?.trim()) {\n <div\n class=\"axm-assist-renderer__text axm-assist-bot__segment ax-pt-1\"\n [attr.dir]=\"segmentDir(tc.nestedStreamText ?? '')\"\n >\n {{ tc.nestedStreamText }}\n </div>\n }\n @if (tc.output) {\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.output' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatJson(tc.output)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n }\n @if (parsed().body && !assistNonDebugPayloadFinalShown()) {\n <div\n class=\"axm-assist-renderer__text axm-assist-bot__segment axm-assist-renderer__markdown\"\n [attr.dir]=\"segmentDir(parsed().body)\"\n >\n <axp-markdown-viewer [markdown]=\"parsed().body\">\n <ng-template axpMarkdownTemplate=\"code\" let-segment>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"markdownCodeValue(segment)\"\n [readonly]=\"true\"\n [language]=\"markdownCodeLanguage(segment)\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n </ng-template>\n </axp-markdown-viewer>\n </div>\n }\n }\n }\n @if (showDebugUi() && !isStreaming() && assistDebugFollowUpItems().length > 0) {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-assist-suggestion-chips [items]=\"assistDebugFollowUpItems()\" />\n </div>\n }\n @if (showDebugUi() && assistRunDebug(); as dbg) {\n <footer\n class=\"axm-assist-renderer__run-meta-wrap\"\n role=\"region\"\n [attr.aria-label]=\"('@conversation:chat.assist-renderer.aria.run-usage' | translate | async) ?? ''\"\n >\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__thinking-accordion axm-assist-renderer__collapse-shell axm-assist-renderer__run-meta-accordion !ax-mb-0\"\n axAccordionItem\n #runMetaAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistRunMetaKey())\"\n (onClick)=\"onAssistAccordionClick($event, assistRunMetaKey())\"\n >\n <div\n class=\"axm-assist-renderer__accordion-header\"\n axAccordionItemHeader\n role=\"button\"\n [attr.aria-expanded]=\"!runMetaAcc.isCollapsed()\"\n >\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!runMetaAcc.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n <i class=\"fa-light fa-chart-line axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n {{ '@conversation:chat.assist-renderer.run-meta.title' | translate | async }}\n </span>\n <!-- @if (dbg.modelTitle || dbg.modelEntityId) {\n <span class=\"axm-assist-renderer__run-meta-header-sub\">{{ dbg.modelTitle || dbg.modelEntityId }}</span>\n } -->\n </div>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div class=\"axm-assist-renderer__run-meta axm-assist-renderer__run-meta--panel\">\n <div class=\"axm-assist-renderer__run-meta-grid\">\n @if (dbg.modelTitle || dbg.modelEntityId) {\n <div class=\"axm-assist-renderer__meta-tile axm-assist-renderer__meta-tile--wide\">\n <div class=\"axm-assist-renderer__meta-tile-label\">\n {{ '@conversation:chat.assist-renderer.run-meta.model' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__meta-tile-value\">{{ dbg.modelTitle || dbg.modelEntityId }}</div>\n <!-- @if (dbg.modelTitle && dbg.modelEntityId) {\n <div class=\"axm-assist-renderer__meta-tile-sub\">{{ dbg.modelEntityId }}</div>\n } -->\n </div>\n }\n @if (dbg.durationMs != null) {\n <div class=\"axm-assist-renderer__meta-tile\">\n <div class=\"axm-assist-renderer__meta-tile-label\">\n {{ '@conversation:chat.assist-renderer.run-meta.duration' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__meta-tile-value axm-assist-renderer__meta-tile-value--mono\">\n {{ formatAssistRunDuration(dbg.durationMs) }}\n </div>\n </div>\n }\n @if (dbg.usage; as totals) {\n <div class=\"axm-assist-renderer__meta-tile\">\n <div class=\"axm-assist-renderer__meta-tile-label\">\n {{ '@ai-management:chat.usage-prompt' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__meta-tile-value axm-assist-renderer__meta-tile-value--mono\">\n {{ totals.promptTokens | number }}\n @if (totals.cachedPromptTokens) {\n <span class=\"axm-assist-renderer__meta-tile-note\">\n (+{{ totals.cachedPromptTokens | number }}\n {{ '@ai-management:chat.usage-cached' | translate | async }})\n </span>\n }\n </div>\n </div>\n <div class=\"axm-assist-renderer__meta-tile\">\n <div class=\"axm-assist-renderer__meta-tile-label\">\n {{ '@ai-management:chat.usage-completion' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__meta-tile-value axm-assist-renderer__meta-tile-value--mono\">\n {{ totals.completionTokens | number }}\n </div>\n </div>\n <div class=\"axm-assist-renderer__meta-tile axm-assist-renderer__meta-tile--accent\">\n <div class=\"axm-assist-renderer__meta-tile-label\">\n {{ '@conversation:chat.assist-renderer.run-meta.total-tokens' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__meta-tile-value axm-assist-renderer__meta-tile-value--mono\">\n {{ totals.totalTokens | number }}\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </footer>\n }\n</div>\n", styles: [".axm-assist-renderer{display:flex;flex-direction:column;gap:.25rem}.axm-assist-renderer axm-assist-suggestion-chips>div{padding:0;padding-top:1rem}.axm-assist-bot,.axm-assist-bot__final-line{display:flex;flex-direction:column;gap:.75rem}.axm-assist-bot__segment{unicode-bidi:isolate;font-size:.95rem;line-height:1.8;letter-spacing:.002em;color:rgb(var(--ax-sys-color-on-surface));text-wrap:pretty}.axm-assist-bot__line--user{align-self:flex-end}.axm-assist-bot__line--tool-role{align-self:stretch}.axm-assist-bot__tool-result{border-radius:.5rem;background:rgb(var(--ax-sys-color-lighter-surface));padding:.5rem .75rem}.axm-assist-bot__fallback{font-size:.88rem;line-height:1.75;word-break:break-word;opacity:.9}.axm-assist-renderer__cursor{display:inline-block;inline-size:6px;block-size:1em;margin-inline-start:2px;background:rgb(var(--ax-sys-color-primary-500));border-radius:1px;animation:axm-blink .8s steps(2) infinite;vertical-align:text-bottom}@keyframes axm-blink{0%{opacity:1}50%{opacity:0}}.axm-assist-renderer__stream-content{display:flex;flex-direction:column;gap:.5rem}.axm-assist-renderer__streaming-activity{display:flex;align-items:center;gap:.5rem;padding-block:.15rem}.axm-assist-renderer__activity-label{line-height:1.45}.axm-assist-renderer__text{white-space:pre-line;word-break:break-word;line-height:1.85;font-size:.95rem;letter-spacing:.002em;text-wrap:pretty}.axm-assist-bot__segment ax-conversation-text-renderer{display:block}.axm-assist-bot__segment ax-conversation-text-renderer :is(p,ul,ol),.axm-assist-renderer__markdown .axp-markdown-viewer__content :is(p,ul,ol){margin-block:.45rem}.axm-assist-bot__segment ax-conversation-text-renderer li,.axm-assist-renderer__markdown .axp-markdown-viewer__content li{line-height:1.8}.axm-assist-renderer__accordion-group{width:100%}.axm-assist-renderer__collapse-shell{border-radius:.625rem;overflow:hidden;background:rgb(var(--ax-sys-color-lighter-surface))}.axm-assist-renderer__collapse-body{margin:0;padding:0;border-radius:0 0 .5rem .5rem;background:transparent}.axm-assist-renderer__collapse-body>.axm-assist-renderer__agent-live-block--in-accordion{padding-inline:.5rem;padding-block-end:.35rem}.axm-assist-renderer__accordion-header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.5rem .75rem;cursor:pointer;background:transparent;border:none;border-radius:.625rem .625rem 0 0;transition:background-color .15s ease}.axm-assist-renderer__collapse-shell>.axm-assist-renderer__accordion-header:hover{background:rgb(var(--ax-sys-color-light-surface))}.axm-assist-renderer__accordion-header-main{min-inline-size:0;display:flex;flex-direction:column;gap:.1rem}.axm-assist-renderer__accordion-header-title{font-size:.8125rem;line-height:1.25;font-weight:600;color:rgb(var(--ax-sys-color-on-surface));display:inline-flex;align-items:center;gap:.4rem}.axm-assist-renderer__header-trailing{flex-shrink:0;display:inline-flex;align-items:center;gap:.35rem}.axm-assist-renderer__delegated-agent-detail-link{padding:.25rem;text-decoration:underline;padding-top:0}.axm-assist-renderer__badge{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;max-width:min(100%,14rem);padding:.1875rem .65rem;border-radius:9999px;font-size:.6875rem;font-weight:600;line-height:1.3;letter-spacing:.03em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.axm-assist-renderer__badge--warning{background:rgb(var(--ax-sys-color-warning-100))}.axm-assist-renderer__badge--primary{background:rgb(var(--ax-sys-color-primary-100))}.axm-assist-renderer__badge--success{background:rgb(var(--ax-sys-color-success-100))}.axm-assist-renderer__thinking-chevron{display:inline-block;font-size:.65rem;opacity:.65;transition:transform .2s ease;line-height:1;flex-shrink:0}.axm-assist-renderer__thinking-chevron--expanded{transform:rotate(180deg)}.axm-assist-renderer__thinking-body{padding:.625rem .75rem .75rem;font-size:.78rem;color:rgb(var(--ax-sys-color-neutral-700));word-break:break-word;line-height:1.55}.axm-assist-renderer__tools{display:flex;flex-direction:column;gap:.5rem}.axm-assist-renderer__tool-card{border-radius:.625rem;overflow:hidden}.axm-assist-renderer__tool-body{padding:.625rem .75rem .75rem;display:flex;flex-direction:column;gap:.35rem}.axm-assist-renderer__tool-section-label{font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:rgb(var(--ax-sys-color-neutral-700))}.axm-assist-renderer__tool-pre{margin:0;max-block-size:10rem;overflow:auto;border-radius:.375rem;background:rgb(var(--ax-sys-color-light-surface));padding:.5rem;font-family:var(--ax-font-mono, monospace);font-size:.675rem;line-height:1.45;word-break:break-word}.axm-assist-renderer__run-meta-wrap{margin-block-start:.45rem}.axm-assist-renderer__run-meta-header-sub{font-size:.7rem;line-height:1.35;color:rgb(var(--ax-sys-color-neutral-700));white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.axm-assist-renderer__run-meta{margin-block-start:.45rem;padding:.55rem .65rem .6rem;border-radius:.625rem;background:rgb(var(--ax-sys-color-lighter-surface));display:flex;flex-direction:column;gap:.45rem}.axm-assist-renderer__run-meta--panel{margin-block-start:0;padding:.45rem .5rem .55rem;background:transparent;border-radius:0}.axm-assist-renderer__run-meta-grid{display:flex;gap:.4rem}.axm-assist-renderer__meta-tile{min-width:0;padding:.4rem .5rem .45rem;border-radius:.45rem;background:rgb(var(--ax-sys-color-light-surface))}.axm-assist-renderer__meta-tile--wide{grid-column:1/-1}.axm-assist-renderer__meta-tile--accent{background:rgb(var(--ax-sys-color-primary-50))}.axm-assist-renderer__meta-tile-label{font-size:.6rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:rgb(var(--ax-sys-color-neutral-700));margin-block-end:.2rem}.axm-assist-renderer__meta-tile-value{font-size:.78rem;font-weight:600;line-height:1.35;color:rgb(var(--ax-sys-color-on-surface));word-break:break-word}.axm-assist-renderer__meta-tile-value--mono{font-variant-numeric:tabular-nums;font-feature-settings:\"tnum\" 1}.axm-assist-renderer__meta-tile-sub{margin-block-start:.15rem;font-size:.65rem;line-height:1.3;color:rgb(var(--ax-sys-color-neutral-700));font-family:var(--ax-font-mono, ui-monospace, monospace);word-break:break-all}.axm-assist-renderer__meta-tile-note{display:inline;margin-inline-start:.2rem;font-size:.65rem;font-weight:500;color:rgb(var(--ax-sys-color-success-700))}.axm-assist-renderer__tool-editor-wrap{border-radius:.375rem;overflow:hidden;background:rgb(var(--ax-sys-color-light-surface))}.axm-assist-renderer__waiting{display:flex;gap:.25rem;padding:.25rem 0}.axm-assist-renderer__dot{inline-size:6px;block-size:6px;border-radius:50%;background:rgb(var(--ax-sys-color-neutral-500));animation:axm-blink 1.2s ease-in-out infinite}.axm-assist-renderer__dot:nth-child(2){animation-delay:.2s}.axm-assist-renderer__dot:nth-child(3){animation-delay:.4s}.axm-assist-renderer__agent-live-block{border-radius:.75rem;background:rgb(var(--ax-sys-color-lighter-surface));padding:.75rem .875rem;display:flex;flex-direction:column;gap:.65rem;max-inline-size:min(42rem,100%)}.axm-assist-renderer__agent-live-block--in-accordion{background:rgb(var(--ax-sys-color-light-surface));border-radius:.5rem;padding:.5rem .55rem .55rem;max-inline-size:none}.axm-assist-renderer__agent-live-header{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem}.axm-assist-renderer__agent-live-title{font-size:.8125rem;font-weight:600;color:rgb(var(--ax-sys-color-on-surface));flex:1;min-inline-size:0}.axm-assist-renderer__agent-live-prompt{font-size:.8125rem;line-height:1.55;word-break:break-word;padding:.5rem .75rem;border-radius:1.25rem;background:rgb(var(--ax-sys-color-lightest-surface));align-self:flex-end;max-inline-size:min(92%,36rem)}.axm-assist-renderer__agent-live-stream{font-size:.8125rem;line-height:1.55;white-space:pre-line;word-break:break-word;padding-block-start:.15rem}.axm-assist-renderer__agent-live-nested-tools{display:flex;flex-direction:column;gap:.35rem;padding-block-start:.35rem}.axm-assist-renderer__agent-live-nested-row{display:flex;align-items:center;gap:.45rem;font-size:.72rem}.axm-assist-renderer__agent-live-nested-name{font-family:var(--ax-font-mono, monospace);font-size:.7rem;flex:1;min-inline-size:0;overflow:hidden;text-overflow:ellipsis}.axm-assist-renderer__agent-live-nested-status{color:rgb(var(--ax-sys-color-neutral-600));flex-shrink:0}\n"], dependencies: [{ kind: "component", type: AXTextRendererComponent, selector: "ax-conversation-text-renderer", inputs: ["message"] }, { kind: "component", type: AXMNodeMessageRendererComponent, selector: "axm-chat-user-form-renderer", inputs: ["message", "node"], outputs: ["formSubmitted"] }, { kind: "component", type: AXMAssistTranscriptUserLineComponent, selector: "axm-assist-transcript-user-line", inputs: ["line", "parentMessage"] }, { kind: "component", type: AXMAssistBotImageLineComponent, selector: "axm-assist-bot-image-line", inputs: ["parentMessage", "fileId", "mimeType", "name"] }, { kind: "component", type: AXMAssistSuggestionChipsComponent, selector: "axm-assist-suggestion-chips", inputs: ["items"] }, { kind: "ngmodule", type: AXAccordionCdkModule }, { kind: "directive", type: i1$4.AXAccordionGroupDirective, selector: "[axAccordionGroup]", inputs: ["accordion", "activeIndex", "collapsedOnItemClick"], exportAs: ["axAccordionGroup"] }, { kind: "directive", type: i1$4.AXAccordionItemContentDirective, selector: "[axAccordionItemContent]", inputs: ["transition"], exportAs: ["axAccordionItemContent"] }, { kind: "directive", type: i1$4.AXAccordionItemHeaderDirective, selector: "[axAccordionItemHeader]", exportAs: ["axAccordionItemHeader"] }, { kind: "directive", type: i1$4.AXAccordionItemDirective, selector: "[axAccordionItem]", inputs: ["isCollapsed"], outputs: ["isCollapsedChange", "onClick"], exportAs: ["axAccordionItem"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXCodeEditorModule }, { kind: "component", type: i1$3.AXCodeEditorComponent, selector: "ax-code-editor", inputs: ["disabled", "value", "state", "name", "id", "language", "readonly", "placeholder", "lineNumbers", "lineWrapping", "tabSize", "indentWithTab", "theme", "extensions", "ariaLabel", "focusOnReady", "formatOnSave", "minRow", "customCompletions"], outputs: ["onValueChanged", "valueChange", "stateChange", "readonlyChange", "disabledChange", "ready", "save"] }, { kind: "component", type: AXPMarkdownViewerComponent, selector: "axp-markdown-viewer", inputs: ["markdown"] }, { kind: "directive", type: AXPMarkdownTemplateDirective, selector: "ng-template[axpMarkdownTemplate]", inputs: ["axpMarkdownTemplate"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i2$1.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: DecimalPipe, name: "number" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
6893
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMAssistMessageRendererComponent, isStandalone: true, selector: "axm-assist-message-renderer", inputs: { message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<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' ? '\u2026' : '\u2713'\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", styles: [".axm-assist-renderer{display:flex;flex-direction:column;gap:.25rem}.axm-assist-renderer axm-assist-suggestion-chips>div{padding:0;padding-top:1rem}.axm-assist-bot,.axm-assist-bot__final-line{display:flex;flex-direction:column;gap:.75rem}.axm-assist-bot__segment{unicode-bidi:isolate;font-size:.95rem;line-height:1.8;letter-spacing:.002em;color:rgb(var(--ax-sys-color-on-surface));text-wrap:pretty}.axm-assist-bot__line--user{align-self:flex-end}.axm-assist-bot__line--tool-role{align-self:stretch}.axm-assist-bot__tool-result{border-radius:.5rem;background:rgb(var(--ax-sys-color-lighter-surface));padding:.5rem .75rem}.axm-assist-bot__fallback{font-size:.88rem;line-height:1.75;word-break:break-word;opacity:.9}.axm-assist-renderer__cursor{display:inline-block;inline-size:6px;block-size:1em;margin-inline-start:2px;background:rgb(var(--ax-sys-color-primary-500));border-radius:1px;animation:axm-blink .8s steps(2) infinite;vertical-align:text-bottom}@keyframes axm-blink{0%{opacity:1}50%{opacity:0}}.axm-assist-renderer__stream-content{display:flex;flex-direction:column;gap:.5rem}.axm-assist-renderer__streaming-activity{display:flex;align-items:center;gap:.5rem;padding-block:.15rem}.axm-assist-renderer__activity-label{line-height:1.45}.axm-assist-renderer__text{white-space:pre-line;word-break:break-word;line-height:1.85;font-size:.95rem;letter-spacing:.002em;text-wrap:pretty}.axm-assist-bot__segment ax-conversation-text-renderer{display:block}.axm-assist-bot__segment ax-conversation-text-renderer :is(p,ul,ol),.axm-assist-renderer__markdown .axp-markdown-viewer__content :is(p,ul,ol){margin-block:.45rem}.axm-assist-bot__segment ax-conversation-text-renderer li,.axm-assist-renderer__markdown .axp-markdown-viewer__content li{line-height:1.8}.axm-assist-renderer__accordion-group{width:100%}.axm-assist-renderer__collapse-shell{border-radius:.625rem;overflow:hidden;background:rgb(var(--ax-sys-color-lighter-surface))}.axm-assist-renderer__collapse-body{margin:0;padding:0;border-radius:0 0 .5rem .5rem;background:transparent}.axm-assist-renderer__collapse-body>.axm-assist-renderer__agent-live-block--in-accordion{padding-inline:.5rem;padding-block-end:.35rem}.axm-assist-renderer__accordion-header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.5rem .75rem;cursor:pointer;background:transparent;border:none;border-radius:.625rem .625rem 0 0;transition:background-color .15s ease}.axm-assist-renderer__collapse-shell>.axm-assist-renderer__accordion-header:hover{background:rgb(var(--ax-sys-color-light-surface))}.axm-assist-renderer__accordion-header-main{min-inline-size:0;display:flex;flex-direction:column;gap:.1rem}.axm-assist-renderer__accordion-header-title{font-size:.8125rem;line-height:1.25;font-weight:600;color:rgb(var(--ax-sys-color-on-surface));display:inline-flex;align-items:center;gap:.4rem}.axm-assist-renderer__header-trailing{flex-shrink:0;display:inline-flex;align-items:center;gap:.35rem}.axm-assist-renderer__delegated-agent-detail-link{padding:.25rem;text-decoration:underline;padding-top:0}.axm-assist-renderer__badge{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;max-width:min(100%,14rem);padding:.1875rem .65rem;border-radius:9999px;font-size:.6875rem;font-weight:600;line-height:1.3;letter-spacing:.03em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.axm-assist-renderer__badge--warning{background:rgb(var(--ax-sys-color-warning-100))}.axm-assist-renderer__badge--primary{background:rgb(var(--ax-sys-color-primary-100))}.axm-assist-renderer__badge--success{background:rgb(var(--ax-sys-color-success-100))}.axm-assist-renderer__thinking-chevron{display:inline-block;font-size:.65rem;opacity:.65;transition:transform .2s ease;line-height:1;flex-shrink:0}.axm-assist-renderer__thinking-chevron--expanded{transform:rotate(180deg)}.axm-assist-renderer__thinking-body{padding:.625rem .75rem .75rem;font-size:.78rem;color:rgb(var(--ax-sys-color-neutral-700));word-break:break-word;line-height:1.55}.axm-assist-renderer__tools{display:flex;flex-direction:column;gap:.5rem}.axm-assist-renderer__tool-card{border-radius:.625rem;overflow:hidden}.axm-assist-renderer__tool-body{padding:.625rem .75rem .75rem;display:flex;flex-direction:column;gap:.35rem}.axm-assist-renderer__tool-section-label{font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:rgb(var(--ax-sys-color-neutral-700))}.axm-assist-renderer__tool-pre{margin:0;max-block-size:10rem;overflow:auto;border-radius:.375rem;background:rgb(var(--ax-sys-color-light-surface));padding:.5rem;font-family:var(--ax-font-mono, monospace);font-size:.675rem;line-height:1.45;word-break:break-word}.axm-assist-renderer__run-meta-wrap{margin-block-start:.45rem}.axm-assist-renderer__run-meta-header-sub{font-size:.7rem;line-height:1.35;color:rgb(var(--ax-sys-color-neutral-700));white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.axm-assist-renderer__run-meta{margin-block-start:.45rem;padding:.55rem .65rem .6rem;border-radius:.625rem;background:rgb(var(--ax-sys-color-lighter-surface));display:flex;flex-direction:column;gap:.45rem}.axm-assist-renderer__run-meta--panel{margin-block-start:0;padding:.45rem .5rem .55rem;background:transparent;border-radius:0}.axm-assist-renderer__run-meta-grid{display:flex;gap:.4rem}.axm-assist-renderer__meta-tile{min-width:0;padding:.4rem .5rem .45rem;border-radius:.45rem;background:rgb(var(--ax-sys-color-light-surface))}.axm-assist-renderer__meta-tile--wide{grid-column:1/-1}.axm-assist-renderer__meta-tile--accent{background:rgb(var(--ax-sys-color-primary-50))}.axm-assist-renderer__meta-tile-label{font-size:.6rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:rgb(var(--ax-sys-color-neutral-700));margin-block-end:.2rem}.axm-assist-renderer__meta-tile-value{font-size:.78rem;font-weight:600;line-height:1.35;color:rgb(var(--ax-sys-color-on-surface));word-break:break-word}.axm-assist-renderer__meta-tile-value--mono{font-variant-numeric:tabular-nums;font-feature-settings:\"tnum\" 1}.axm-assist-renderer__meta-tile-sub{margin-block-start:.15rem;font-size:.65rem;line-height:1.3;color:rgb(var(--ax-sys-color-neutral-700));font-family:var(--ax-font-mono, ui-monospace, monospace);word-break:break-all}.axm-assist-renderer__meta-tile-note{display:inline;margin-inline-start:.2rem;font-size:.65rem;font-weight:500;color:rgb(var(--ax-sys-color-success-700))}.axm-assist-renderer__tool-editor-wrap{border-radius:.375rem;overflow:hidden;background:rgb(var(--ax-sys-color-light-surface))}.axm-assist-renderer__waiting{display:flex;gap:.25rem;padding:.25rem 0}.axm-assist-renderer__dot{inline-size:6px;block-size:6px;border-radius:50%;background:rgb(var(--ax-sys-color-neutral-500));animation:axm-blink 1.2s ease-in-out infinite}.axm-assist-renderer__dot:nth-child(2){animation-delay:.2s}.axm-assist-renderer__dot:nth-child(3){animation-delay:.4s}.axm-assist-renderer__agent-live-block{border-radius:.75rem;background:rgb(var(--ax-sys-color-lighter-surface));padding:.75rem .875rem;display:flex;flex-direction:column;gap:.65rem;max-inline-size:min(42rem,100%)}.axm-assist-renderer__agent-live-block--in-accordion{background:rgb(var(--ax-sys-color-light-surface));border-radius:.5rem;padding:.5rem .55rem .55rem;max-inline-size:none}.axm-assist-renderer__agent-live-header{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem}.axm-assist-renderer__agent-live-title{font-size:.8125rem;font-weight:600;color:rgb(var(--ax-sys-color-on-surface));flex:1;min-inline-size:0}.axm-assist-renderer__agent-live-prompt{font-size:.8125rem;line-height:1.55;word-break:break-word;padding:.5rem .75rem;border-radius:1.25rem;background:rgb(var(--ax-sys-color-lightest-surface));align-self:flex-end;max-inline-size:min(92%,36rem)}.axm-assist-renderer__agent-live-stream{font-size:.8125rem;line-height:1.55;white-space:pre-line;word-break:break-word;padding-block-start:.15rem}.axm-assist-renderer__agent-live-nested-tools{display:flex;flex-direction:column;gap:.35rem;padding-block-start:.35rem}.axm-assist-renderer__agent-live-nested-row{display:flex;align-items:center;gap:.45rem;font-size:.72rem}.axm-assist-renderer__agent-live-nested-name{font-family:var(--ax-font-mono, monospace);font-size:.7rem;flex:1;min-inline-size:0;overflow:hidden;text-overflow:ellipsis}.axm-assist-renderer__agent-live-nested-status{color:rgb(var(--ax-sys-color-neutral-600));flex-shrink:0}.axm-assist-renderer__retry-alert-body{display:flex;align-items:flex-start;gap:.75rem}.axm-assist-renderer__retry-alert-text{flex:1;min-inline-size:0;display:flex;flex-direction:column;gap:.3rem}.axm-assist-renderer__retry-description{margin:0;font-size:.8125rem;line-height:1.5;opacity:.92}.axm-assist-renderer__retry-error-detail{margin:.15rem 0 0;font-size:.75rem;line-height:1.45;font-family:var(--ax-font-mono, ui-monospace, monospace);word-break:break-word;opacity:.88}.axm-assist-renderer__retry-action{flex-shrink:0;align-self:center}\n"], dependencies: [{ kind: "component", type: AXTextRendererComponent, selector: "ax-conversation-text-renderer", inputs: ["message"] }, { kind: "component", type: AXMNodeMessageRendererComponent, selector: "axm-chat-user-form-renderer", inputs: ["message", "node"], outputs: ["formSubmitted"] }, { kind: "component", type: AXMAssistBotFileLineComponent, selector: "axm-assist-bot-file-line", inputs: ["parentMessage", "fileId"] }, { kind: "component", type: AXMAssistSuggestionChipsComponent, selector: "axm-assist-suggestion-chips", inputs: ["items"] }, { kind: "ngmodule", type: AXAccordionCdkModule }, { kind: "directive", type: i1$4.AXAccordionGroupDirective, selector: "[axAccordionGroup]", inputs: ["accordion", "activeIndex", "collapsedOnItemClick"], exportAs: ["axAccordionGroup"] }, { kind: "directive", type: i1$4.AXAccordionItemContentDirective, selector: "[axAccordionItemContent]", inputs: ["transition"], exportAs: ["axAccordionItemContent"] }, { kind: "directive", type: i1$4.AXAccordionItemHeaderDirective, selector: "[axAccordionItemHeader]", exportAs: ["axAccordionItemHeader"] }, { kind: "directive", type: i1$4.AXAccordionItemDirective, selector: "[axAccordionItem]", inputs: ["isCollapsed"], outputs: ["isCollapsedChange", "onClick"], exportAs: ["axAccordionItem"] }, { kind: "ngmodule", type: AXAlertModule }, { kind: "component", type: i2$3.AXAlertComponent, selector: "ax-alert", inputs: ["color", "timeOut"], outputs: ["colorChange", "onClosed", "timeOutChange"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2$1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXCodeEditorModule }, { kind: "component", type: i5$1.AXCodeEditorComponent, selector: "ax-code-editor", inputs: ["disabled", "value", "state", "name", "id", "language", "readonly", "placeholder", "lineNumbers", "lineWrapping", "tabSize", "indentWithTab", "theme", "extensions", "ariaLabel", "focusOnReady", "formatOnSave", "minRow", "customCompletions"], outputs: ["onValueChanged", "valueChange", "stateChange", "readonlyChange", "disabledChange", "ready", "save"] }, { kind: "component", type: AXPMarkdownViewerComponent, selector: "axp-markdown-viewer", inputs: ["markdown"] }, { kind: "directive", type: AXPMarkdownTemplateDirective, selector: "ng-template[axpMarkdownTemplate]", inputs: ["axpMarkdownTemplate"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: DecimalPipe, name: "number" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
6334
6894
  }
6335
6895
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAssistMessageRendererComponent, decorators: [{
6336
6896
  type: Component,
6337
6897
  args: [{ selector: 'axm-assist-message-renderer', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [
6338
6898
  AXTextRendererComponent,
6339
6899
  AXMNodeMessageRendererComponent,
6340
- AXMAssistTranscriptUserLineComponent,
6341
- AXMAssistBotImageLineComponent,
6900
+ AXMAssistBotFileLineComponent,
6342
6901
  AXMAssistSuggestionChipsComponent,
6343
6902
  AXAccordionCdkModule,
6903
+ AXAlertModule,
6344
6904
  AXButtonModule,
6905
+ AXDecoratorModule,
6345
6906
  AXCodeEditorModule,
6346
6907
  AXPMarkdownViewerComponent,
6347
6908
  AXPMarkdownTemplateDirective,
@@ -6349,7 +6910,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
6349
6910
  AXTranslationModule,
6350
6911
  AsyncPipe,
6351
6912
  DecimalPipe,
6352
- ], template: "<div class=\"axm-assist-renderer\">\n @if (showDebugUi() && useTranscriptUi()) {\n <div\n class=\"axm-assist-bot\"\n role=\"region\"\n [attr.aria-label]=\"('@conversation:chat.assist-renderer.aria.assistant-response' | translate | async) ?? ''\"\n >\n @for (item of visibleTranscriptLines(); track item.lineIndex) {\n @let line = item.line;\n @let lineIndex = item.lineIndex;\n <div\n class=\"axm-assist-bot__line\"\n [class.axm-assist-bot__line--user]=\"line.role === 'user'\"\n [class.axm-assist-bot__line--tool-role]=\"line.role === 'tool'\"\n >\n @for (seg of line.responses; track segIndex; let segIndex = $index) {\n @if (line.role === 'user' && seg.type === 'file') {\n <axm-assist-bot-image-line\n [parentMessage]=\"message()\"\n [fileId]=\"seg.content.fileId\"\n />\n } @else if (line.role === 'user' && seg.type === 'text') {\n <div class=\"axm-assist-bot__segment\" [attr.dir]=\"segmentDir(seg.content)\">\n <ax-conversation-text-renderer [message]=\"syntheticTextMessage(lineIndex, segIndex, seg.content)\" />\n </div>\n } @else if (line.role === 'assistant' && seg.type === 'think' && showDebugUi()) {\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__thinking-accordion axm-assist-renderer__collapse-shell !ax-mb-0\"\n axAccordionItem\n #thinkAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistThinkKey(lineIndex, segIndex))\"\n (onClick)=\"onAssistAccordionClick($event, assistThinkKey(lineIndex, segIndex))\"\n >\n <div\n class=\"axm-assist-renderer__accordion-header\"\n axAccordionItemHeader\n role=\"button\"\n [attr.aria-expanded]=\"!thinkAcc.isCollapsed()\"\n >\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!thinkAcc.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n <i class=\"fa-light fa-brain axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n {{ '@conversation:chat.assist-renderer.sections.thinking' | translate | async }}\n </span>\n </div>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div\n class=\"axm-assist-renderer__thinking-body axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(seg.content)\"\n >\n {{ seg.content }}\n </div>\n </div>\n </div>\n </div>\n </div>\n } @else if (line.role === 'assistant' && seg.type === 'text') {\n @let parsedLine = parseAssistLineText(seg.content);\n @let displayBody = assistTranscriptAssistantTextBodyForDisplay(line, parsedLine.body);\n @if (showDebugUi() && parsedLine.thinking) {\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__thinking-accordion axm-assist-renderer__collapse-shell !ax-mb-0\"\n axAccordionItem\n #thinkAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistThinkKey(lineIndex, segIndex))\"\n (onClick)=\"onAssistAccordionClick($event, assistThinkKey(lineIndex, segIndex))\"\n >\n <div\n class=\"axm-assist-renderer__accordion-header\"\n axAccordionItemHeader\n role=\"button\"\n [attr.aria-expanded]=\"!thinkAcc.isCollapsed()\"\n >\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!thinkAcc.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n <i class=\"fa-light fa-brain axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n {{ '@conversation:chat.assist-renderer.sections.thinking' | translate | async }}\n </span>\n </div>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div\n class=\"axm-assist-renderer__thinking-body axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(parsedLine.thinking)\"\n >\n {{ parsedLine.thinking }}\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n @if (displayBody.trim()) {\n <div class=\"axm-assist-bot__segment axm-assist-renderer__markdown\" [attr.dir]=\"segmentDir(displayBody)\">\n <axp-markdown-viewer [markdown]=\"displayBody\">\n <ng-template axpMarkdownTemplate=\"code\" let-segment>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"markdownCodeValue(segment)\"\n [readonly]=\"true\"\n [language]=\"markdownCodeLanguage(segment)\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n </ng-template>\n </axp-markdown-viewer>\n </div>\n }\n } @else if (\n line.role === 'assistant' &&\n (seg.type === 'agent' || seg.type === 'tool') &&\n isDelegatedAgentCommand(seg.content.command)\n ) {\n @if (showDebugUi()) {\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__tool-card axm-assist-renderer__collapse-shell !ax-mb-0\"\n axAccordionItem\n #agentDebugAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistAgentKey(seg.callId))\"\n (onClick)=\"onAssistAccordionClick($event, assistAgentKey(seg.callId))\"\n >\n <div class=\"axm-assist-renderer__accordion-header\" axAccordionItemHeader>\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!agentDebugAcc.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n <i class=\"fa-light fa-screwdriver-wrench axm-assist-renderer__tool-title-icon\"></i>\n {{ resolveToolDisplayTitle(seg.content.command) }}\n </span>\n </div>\n <div class=\"axm-assist-renderer__header-trailing\">\n <span class=\"axm-assist-renderer__badge axm-assist-renderer__badge--primary\">{{\n (resolveToolBadge(seg.content.command, '@conversation:chat.assist-renderer.badges.agent')\n | translate\n | async) ?? ''\n }}</span>\n </div>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div class=\"axm-assist-renderer__tool-body\">\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.input' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatArgs(seg.content.arguments)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n @if (toolResultForCallId(seg.callId); as resultLine) {\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.output' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatToolResultBody(resultLine)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n }\n </div>\n <div class=\"axm-assist-renderer__delegated-agent-detail-link\">\n <ax-button\n look=\"link\"\n color=\"primary\"\n class=\"ax-sm\"\n [text]=\"('@conversation:chat.assist-renderer.delegated-agent.detail' | translate | async) ?? ''\"\n [attr.aria-label]=\"\n ('@conversation:chat.assist-renderer.delegated-agent.detail-aria' | translate | async) ??\n ''\n \"\n (onClick)=\"\n openDelegatedAgentTranscriptDialog(\n seg.callId,\n seg.content.command,\n delegatedAgentLabelForCall(seg.callId)\n )\n \"\n ></ax-button>\n </div>\n </div>\n </div>\n </div>\n </div>\n } @else {\n @let res = toolResultForCallId(seg.callId);\n @let outcomeSegs = delegatedAgentOutcomeSegmentsForCall(res);\n @if (outcomeSegs.length > 0) {\n @for (outSeg of outcomeSegs; track $index) {\n @switch (outSeg.type) {\n @case ('text') {\n @let parsedOut = parseAssistLineText(outSeg.content);\n @if (parsedOut.body.trim()) {\n <div\n class=\"axm-assist-bot__segment axm-assist-renderer__markdown\"\n [attr.dir]=\"segmentDir(parsedOut.body)\"\n >\n <axp-markdown-viewer [markdown]=\"parsedOut.body\">\n <ng-template axpMarkdownTemplate=\"code\" let-segment>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"markdownCodeValue(segment)\"\n [readonly]=\"true\"\n [language]=\"markdownCodeLanguage(segment)\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n </ng-template>\n </axp-markdown-viewer>\n </div>\n }\n }\n @case ('think') {\n @if (showDebugUi()) {\n <div class=\"axm-assist-bot__segment\" [attr.dir]=\"segmentDir(outSeg.content)\">\n {{ outSeg.content }}\n </div>\n }\n }\n @case ('file') {\n <axm-assist-bot-image-line\n [parentMessage]=\"message()\"\n [fileId]=\"outSeg.content.fileId\"\n />\n }\n @case ('node') {\n @let assistNodeWidget = axmAssistWidgetNodeFromUnknown(outSeg.content);\n @if (assistNodeWidget) {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-chat-user-form-renderer\n [message]=\"syntheticNodeEmbedMessage(lineIndex, segIndex * 1000 + $index, outSeg.content)\"\n />\n </div>\n }\n }\n }\n }\n } @else if (delegatedAgentAnswerForCall(res).trim()) {\n @let agentFallbackText = delegatedAgentAnswerForCall(res);\n <div\n class=\"axm-assist-bot__segment axm-assist-renderer__markdown\"\n [attr.dir]=\"segmentDir(agentFallbackText)\"\n >\n <axp-markdown-viewer [markdown]=\"agentFallbackText\">\n <ng-template axpMarkdownTemplate=\"code\" let-segment>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"markdownCodeValue(segment)\"\n [readonly]=\"true\"\n [language]=\"markdownCodeLanguage(segment)\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n </ng-template>\n </axp-markdown-viewer>\n </div>\n }\n <div class=\"axm-assist-renderer__delegated-agent-detail-link\">\n <ax-button\n look=\"link\"\n color=\"primary\"\n class=\"ax-sm\"\n [text]=\"('@conversation:chat.assist-renderer.delegated-agent.detail' | translate | async) ?? ''\"\n [attr.aria-label]=\"\n ('@conversation:chat.assist-renderer.delegated-agent.detail-aria' | translate | async) ?? ''\n \"\n (onClick)=\"\n openDelegatedAgentTranscriptDialog(\n seg.callId,\n seg.content.command,\n delegatedAgentLabelForCall(seg.callId)\n )\n \"\n ></ax-button>\n </div>\n }\n } @else if (line.role === 'assistant' && seg.type === 'tool' && showDebugUi()) {\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__tool-card axm-assist-renderer__collapse-shell !ax-mb-0\"\n axAccordionItem\n #toolDebugAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistToolKey(seg.callId))\"\n (onClick)=\"onAssistAccordionClick($event, assistToolKey(seg.callId))\"\n >\n <div class=\"axm-assist-renderer__accordion-header\" axAccordionItemHeader>\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!toolDebugAcc.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n <i class=\"fa-light fa-screwdriver-wrench axm-assist-renderer__tool-title-icon\"></i>\n {{ resolveToolDisplayTitle(seg.content.command) }}\n </span>\n </div>\n <span class=\"axm-assist-renderer__badge axm-assist-renderer__badge--primary\">{{\n (resolveToolBadge(seg.content.command, '@conversation:chat.assist-renderer.badges.tool')\n | translate\n | async) ?? ''\n }}</span>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div class=\"axm-assist-renderer__tool-body\">\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.input' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatArgs(seg.content.arguments)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n @if (toolResultForCallId(seg.callId); as resultLine) {\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.output' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatToolResultBody(resultLine)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n } @else if (line.role === 'assistant' && seg.type === 'node') {\n @let assistNodeWidget = axmAssistWidgetNodeFromUnknown(seg.content);\n @if (assistNodeWidget) {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-chat-user-form-renderer\n [message]=\"syntheticNodeEmbedMessage(lineIndex, segIndex, seg.content)\"\n />\n </div>\n }\n } @else if (line.role === 'assistant' && seg.type === 'file') {\n <axm-assist-bot-image-line\n [parentMessage]=\"message()\"\n [fileId]=\"seg.content.fileId\"\n />\n } @else if (line.role === 'tool' && (seg.type === 'tool_result' || seg.type === 'agent_result')) {\n <!-- merged into the corresponding tool/agent accordion -->\n } @else if (line.role === 'system' && seg.type === 'text' && showDebugUi()) {\n <div class=\"axm-assist-bot__segment\" [attr.dir]=\"segmentDir(seg.content)\">\n <ax-conversation-text-renderer [message]=\"syntheticTextMessage(lineIndex, segIndex, seg.content)\" />\n </div>\n } @else {\n @if (showDebugUi() || line.role !== 'assistant') {\n <div\n class=\"axm-assist-bot__fallback axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(formatFallbackSegment(seg))\"\n >\n {{ formatFallbackSegment(seg) }}\n </div>\n }\n }\n }\n </div>\n }\n @if (isStreaming()) {\n <div class=\"axm-assist-renderer__streaming-activity\" role=\"status\" aria-live=\"polite\">\n <span\n class=\"axm-assist-renderer__activity-spin ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent fa-spin ax-shrink-0\"\n aria-hidden=\"true\"\n ></span>\n <span class=\"axm-assist-renderer__activity-label ax-text-xs ax-text-muted ax-italic\">{{\n assistActivityMessageKey() | translate | async\n }}</span>\n </div>\n }\n <!-- @if (isStreaming() && streamText().trim()) {\n <span class=\"axm-assist-renderer__cursor\" aria-hidden=\"true\"></span>\n } -->\n </div>\n } @else if (!showDebugUi() && !isStreaming()) {\n @if (assistPayloadLine(); as line) {\n <div\n role=\"region\"\n [attr.aria-label]=\"('@conversation:chat.assist-renderer.aria.assistant-response' | translate | async) ?? ''\"\n >\n <axm-assist-transcript-user-line [line]=\"line\" [parentMessage]=\"message()\" />\n </div>\n }\n } @else if (!showDebugUi() && isStreaming()) {\n <div class=\"axm-assist-renderer__stream-content axm-assist-renderer__stream-content--non-debug\">\n <div class=\"axm-assist-renderer__streaming-activity\" role=\"status\" aria-live=\"polite\">\n <span\n class=\"axm-assist-renderer__activity-spin ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent fa-spin ax-shrink-0\"\n aria-hidden=\"true\"\n ></span>\n <span class=\"axm-assist-renderer__activity-label ax-text-xs ax-text-muted ax-italic\">{{\n assistActivityMessageKey() | translate | async\n }}</span>\n </div>\n </div>\n } @else if (showDebugUi()) {\n @if (isStreaming()) {\n <div class=\"axm-assist-renderer__stream-content\">\n <div class=\"axm-assist-renderer__streaming-activity\" role=\"status\" aria-live=\"polite\">\n <span\n class=\"axm-assist-renderer__activity-spin ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent fa-spin ax-shrink-0\"\n aria-hidden=\"true\"\n ></span>\n <span class=\"axm-assist-renderer__activity-label ax-text-xs ax-text-muted ax-italic\">{{\n assistActivityMessageKey() | translate | async\n }}</span>\n </div>\n @if (streamThink().trim()) {\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__thinking-accordion axm-assist-renderer__collapse-shell !ax-mb-0\"\n axAccordionItem\n #thinkAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistThinkStreamKey())\"\n (onClick)=\"onAssistAccordionClick($event, assistThinkStreamKey())\"\n >\n <div\n class=\"axm-assist-renderer__accordion-header\"\n axAccordionItemHeader\n role=\"button\"\n [attr.aria-expanded]=\"!thinkAcc.isCollapsed()\"\n >\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!thinkAcc.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n <i class=\"fa-light fa-brain axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n {{ '@conversation:chat.assist-renderer.sections.thinking' | translate | async }}\n </span>\n </div>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div\n class=\"axm-assist-renderer__thinking-body axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(streamThink())\"\n >\n {{ streamThink() }}\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n @if (streamText()) {\n <div class=\"axm-assist-renderer__text axm-assist-bot__segment\" [attr.dir]=\"segmentDir(streamText())\">\n {{ streamText() }}\n </div>\n }\n @if (toolCalls().length) {\n <div class=\"axm-assist-renderer__tools\">\n @for (tc of toolCalls(); track tc.id) {\n @if (isDelegatedAgentCommand(tc.name)) {\n @let legacyAgentAns = delegatedAnswerFromToolOutputString(tc.output);\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__tool-card axm-assist-renderer__agent-accordion axm-assist-renderer__collapse-shell\"\n axAccordionItem\n #legacyAgentAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistAgentKey(tc.id))\"\n (onClick)=\"onAssistAccordionClick($event, assistAgentKey(tc.id))\"\n >\n <div\n class=\"axm-assist-renderer__accordion-header\"\n axAccordionItemHeader\n role=\"button\"\n [attr.aria-expanded]=\"!legacyAgentAcc.isCollapsed()\"\n >\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span\n class=\"axm-assist-renderer__accordion-header-title ax-inline-flex ax-items-center ax-gap-2 ax-flex-wrap\"\n >\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!legacyAgentAcc.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n @if (tc.state === 'running') {\n <span\n class=\"axm-assist-renderer__agent-live-spin ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent fa-spin ax-shrink-0\"\n aria-hidden=\"true\"\n ></span>\n } @else {\n <span\n class=\"ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-bg-success-500 ax-shrink-0\"\n aria-hidden=\"true\"\n ></span>\n }\n <i class=\"fa-light fa-people-group ax-text-primary-500\" aria-hidden=\"true\"></i>\n <span class=\"axm-assist-renderer__agent-live-title\">{{\n resolveToolDisplayTitle(tc.name)\n }}</span>\n </span>\n </div>\n <div class=\"axm-assist-renderer__header-trailing\">\n <span\n class=\"axm-assist-renderer__badge\"\n [class.axm-assist-renderer__badge--primary]=\"tc.state === 'running'\"\n [class.axm-assist-renderer__badge--success]=\"tc.state !== 'running'\"\n >\n {{\n (resolveToolBadge(\n tc.name,\n tc.state === 'running'\n ? '@conversation:chat.assist-renderer.badges.running'\n : '@conversation:chat.assist-renderer.badges.agent'\n )\n | translate\n | async) ?? ''\n }}\n </span>\n </div>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div\n class=\"axm-assist-renderer__agent-live-block axm-assist-renderer__agent-live-block--in-accordion\"\n role=\"region\"\n >\n <div\n class=\"axm-assist-renderer__agent-live-prompt\"\n [attr.dir]=\"segmentDir(delegatedPromptPreview(tc.arguments))\"\n >\n {{ delegatedPromptPreview(tc.arguments) }}\n </div>\n @if (tc.nestedStreamText?.trim()) {\n <div\n class=\"axm-assist-renderer__agent-live-stream\"\n [attr.dir]=\"segmentDir(tc.nestedStreamText ?? '')\"\n >\n {{ tc.nestedStreamText }}\n </div>\n }\n @if (tc.nestedTools?.length) {\n <div class=\"axm-assist-renderer__agent-live-nested-tools\">\n @for (nt of tc.nestedTools; track nt.id) {\n <div class=\"axm-assist-renderer__agent-live-nested-row\">\n @if (nt.state === 'running') {\n <span\n class=\"ax-inline-block ax-w-2.5 ax-h-2.5 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent fa-spin ax-shrink-0\"\n aria-hidden=\"true\"\n ></span>\n } @else {\n <span\n class=\"ax-inline-block ax-w-2.5 ax-h-2.5 ax-rounded-full ax-bg-success-500 ax-shrink-0\"\n aria-hidden=\"true\"\n ></span>\n }\n <code class=\"axm-assist-renderer__agent-live-nested-name\">{{ nt.name }}</code>\n <span class=\"axm-assist-renderer__agent-live-nested-status\">{{\n nt.state === 'running' ? '\u2026' : '\u2713'\n }}</span>\n </div>\n }\n </div>\n }\n @if (legacyAgentAns) {\n <div class=\"axm-assist-renderer__agent-live-nested-tools\">\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.agent-answer' | translate | async }}\n </div>\n <div\n class=\"axm-assist-renderer__agent-live-stream\"\n [attr.dir]=\"segmentDir(legacyAgentAns)\"\n >\n {{ legacyAgentAns }}\n </div>\n </div>\n }\n </div>\n @if (tc.state !== 'running') {\n <div class=\"axm-assist-renderer__delegated-agent-detail-link\">\n <ax-button\n look=\"link\"\n color=\"primary\"\n class=\"ax-sm\"\n [text]=\"('@conversation:chat.assist-renderer.delegated-agent.detail' | translate | async) ?? ''\"\n [attr.aria-label]=\"\n ('@conversation:chat.assist-renderer.delegated-agent.detail-aria' | translate | async) ??\n ''\n \"\n (onClick)=\"\n openDelegatedAgentTranscriptDialog(tc.id, tc.name, delegatedAgentLabelForCall(tc.id))\n \"\n ></ax-button>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n } @else {\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__tool-card axm-assist-renderer__collapse-shell\"\n axAccordionItem\n #legacyStreamDbgAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistLegacyToolAccordionKey(tc))\"\n (onClick)=\"onAssistLegacyAccordionClick($event, tc)\"\n >\n <div class=\"axm-assist-renderer__accordion-header\" axAccordionItemHeader>\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!legacyStreamDbgAcc.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n <i class=\"fa-light fa-screwdriver-wrench axm-assist-renderer__tool-title-icon\"></i>\n {{ resolveToolDisplayTitle(tc.name) }}\n </span>\n </div>\n <span\n class=\"axm-assist-renderer__badge\"\n [class.axm-assist-renderer__badge--primary]=\"tc.state === 'running'\"\n [class.axm-assist-renderer__badge--success]=\"tc.state === 'done'\"\n >\n {{\n (resolveToolBadge(\n tc.name,\n tc.state === 'running'\n ? '@conversation:chat.assist-renderer.badges.running'\n : '@conversation:chat.assist-renderer.badges.done'\n )\n | translate\n | async) ?? ''\n }}\n </span>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div class=\"axm-assist-renderer__tool-body\">\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.input' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatArgs(tc.arguments)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n @if (tc.output) {\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.output' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatJson(tc.output)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n }\n </div>\n }\n @if (isStreaming() && streamText().trim()) {\n <span class=\"axm-assist-renderer__cursor\"></span>\n } @else if (isStreaming() && !streamText().trim() && !streamThink().trim() && !toolCalls().length) {\n <div class=\"axm-assist-renderer__waiting\">\n <span class=\"axm-assist-renderer__dot\"></span>\n <span class=\"axm-assist-renderer__dot\"></span>\n <span class=\"axm-assist-renderer__dot\"></span>\n </div>\n }\n </div>\n } @else {\n @if (parsed().thinking) {\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__thinking-accordion axm-assist-renderer__collapse-shell !ax-mb-0\"\n axAccordionItem\n #thinkAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistThinkFinalKey())\"\n (onClick)=\"onAssistAccordionClick($event, assistThinkFinalKey())\"\n >\n <div\n class=\"axm-assist-renderer__accordion-header\"\n axAccordionItemHeader\n role=\"button\"\n [attr.aria-expanded]=\"!thinkAcc.isCollapsed()\"\n >\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!thinkAcc.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n <i class=\"fa-light fa-brain axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n {{ '@conversation:chat.assist-renderer.sections.thinking' | translate | async }}\n </span>\n </div>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div\n class=\"axm-assist-renderer__thinking-body axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(parsed().thinking)\"\n >\n {{ parsed().thinking }}\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n @if (toolCalls().length) {\n <div class=\"axm-assist-renderer__tools\">\n @for (tc of toolCalls(); track tc.id) {\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__tool-card axm-assist-renderer__collapse-shell\"\n axAccordionItem\n #legacyDoneDbgAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistLegacyToolAccordionKey(tc))\"\n (onClick)=\"onAssistLegacyAccordionClick($event, tc)\"\n >\n <div class=\"axm-assist-renderer__accordion-header\" axAccordionItemHeader>\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!legacyDoneDbgAcc.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n <i class=\"fa-light fa-screwdriver-wrench axm-assist-renderer__tool-title-icon\"></i>\n {{ resolveToolDisplayTitle(tc.name) }}\n </span>\n </div>\n <span class=\"axm-assist-renderer__badge axm-assist-renderer__badge--success\">{{\n (resolveToolBadge(tc.name, '@conversation:chat.assist-renderer.badges.done') | translate | async) ??\n ''\n }}</span>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div class=\"axm-assist-renderer__tool-body\">\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.input' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatArgs(tc.arguments)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n @if (tc.nestedStreamText?.trim()) {\n <div\n class=\"axm-assist-renderer__text axm-assist-bot__segment ax-pt-1\"\n [attr.dir]=\"segmentDir(tc.nestedStreamText ?? '')\"\n >\n {{ tc.nestedStreamText }}\n </div>\n }\n @if (tc.output) {\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.output' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatJson(tc.output)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n }\n @if (parsed().body && !assistNonDebugPayloadFinalShown()) {\n <div\n class=\"axm-assist-renderer__text axm-assist-bot__segment axm-assist-renderer__markdown\"\n [attr.dir]=\"segmentDir(parsed().body)\"\n >\n <axp-markdown-viewer [markdown]=\"parsed().body\">\n <ng-template axpMarkdownTemplate=\"code\" let-segment>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"markdownCodeValue(segment)\"\n [readonly]=\"true\"\n [language]=\"markdownCodeLanguage(segment)\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n </ng-template>\n </axp-markdown-viewer>\n </div>\n }\n }\n }\n @if (showDebugUi() && !isStreaming() && assistDebugFollowUpItems().length > 0) {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-assist-suggestion-chips [items]=\"assistDebugFollowUpItems()\" />\n </div>\n }\n @if (showDebugUi() && assistRunDebug(); as dbg) {\n <footer\n class=\"axm-assist-renderer__run-meta-wrap\"\n role=\"region\"\n [attr.aria-label]=\"('@conversation:chat.assist-renderer.aria.run-usage' | translate | async) ?? ''\"\n >\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__thinking-accordion axm-assist-renderer__collapse-shell axm-assist-renderer__run-meta-accordion !ax-mb-0\"\n axAccordionItem\n #runMetaAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistRunMetaKey())\"\n (onClick)=\"onAssistAccordionClick($event, assistRunMetaKey())\"\n >\n <div\n class=\"axm-assist-renderer__accordion-header\"\n axAccordionItemHeader\n role=\"button\"\n [attr.aria-expanded]=\"!runMetaAcc.isCollapsed()\"\n >\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!runMetaAcc.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n <i class=\"fa-light fa-chart-line axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n {{ '@conversation:chat.assist-renderer.run-meta.title' | translate | async }}\n </span>\n <!-- @if (dbg.modelTitle || dbg.modelEntityId) {\n <span class=\"axm-assist-renderer__run-meta-header-sub\">{{ dbg.modelTitle || dbg.modelEntityId }}</span>\n } -->\n </div>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div class=\"axm-assist-renderer__run-meta axm-assist-renderer__run-meta--panel\">\n <div class=\"axm-assist-renderer__run-meta-grid\">\n @if (dbg.modelTitle || dbg.modelEntityId) {\n <div class=\"axm-assist-renderer__meta-tile axm-assist-renderer__meta-tile--wide\">\n <div class=\"axm-assist-renderer__meta-tile-label\">\n {{ '@conversation:chat.assist-renderer.run-meta.model' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__meta-tile-value\">{{ dbg.modelTitle || dbg.modelEntityId }}</div>\n <!-- @if (dbg.modelTitle && dbg.modelEntityId) {\n <div class=\"axm-assist-renderer__meta-tile-sub\">{{ dbg.modelEntityId }}</div>\n } -->\n </div>\n }\n @if (dbg.durationMs != null) {\n <div class=\"axm-assist-renderer__meta-tile\">\n <div class=\"axm-assist-renderer__meta-tile-label\">\n {{ '@conversation:chat.assist-renderer.run-meta.duration' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__meta-tile-value axm-assist-renderer__meta-tile-value--mono\">\n {{ formatAssistRunDuration(dbg.durationMs) }}\n </div>\n </div>\n }\n @if (dbg.usage; as totals) {\n <div class=\"axm-assist-renderer__meta-tile\">\n <div class=\"axm-assist-renderer__meta-tile-label\">\n {{ '@ai-management:chat.usage-prompt' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__meta-tile-value axm-assist-renderer__meta-tile-value--mono\">\n {{ totals.promptTokens | number }}\n @if (totals.cachedPromptTokens) {\n <span class=\"axm-assist-renderer__meta-tile-note\">\n (+{{ totals.cachedPromptTokens | number }}\n {{ '@ai-management:chat.usage-cached' | translate | async }})\n </span>\n }\n </div>\n </div>\n <div class=\"axm-assist-renderer__meta-tile\">\n <div class=\"axm-assist-renderer__meta-tile-label\">\n {{ '@ai-management:chat.usage-completion' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__meta-tile-value axm-assist-renderer__meta-tile-value--mono\">\n {{ totals.completionTokens | number }}\n </div>\n </div>\n <div class=\"axm-assist-renderer__meta-tile axm-assist-renderer__meta-tile--accent\">\n <div class=\"axm-assist-renderer__meta-tile-label\">\n {{ '@conversation:chat.assist-renderer.run-meta.total-tokens' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__meta-tile-value axm-assist-renderer__meta-tile-value--mono\">\n {{ totals.totalTokens | number }}\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </footer>\n }\n</div>\n", styles: [".axm-assist-renderer{display:flex;flex-direction:column;gap:.25rem}.axm-assist-renderer axm-assist-suggestion-chips>div{padding:0;padding-top:1rem}.axm-assist-bot,.axm-assist-bot__final-line{display:flex;flex-direction:column;gap:.75rem}.axm-assist-bot__segment{unicode-bidi:isolate;font-size:.95rem;line-height:1.8;letter-spacing:.002em;color:rgb(var(--ax-sys-color-on-surface));text-wrap:pretty}.axm-assist-bot__line--user{align-self:flex-end}.axm-assist-bot__line--tool-role{align-self:stretch}.axm-assist-bot__tool-result{border-radius:.5rem;background:rgb(var(--ax-sys-color-lighter-surface));padding:.5rem .75rem}.axm-assist-bot__fallback{font-size:.88rem;line-height:1.75;word-break:break-word;opacity:.9}.axm-assist-renderer__cursor{display:inline-block;inline-size:6px;block-size:1em;margin-inline-start:2px;background:rgb(var(--ax-sys-color-primary-500));border-radius:1px;animation:axm-blink .8s steps(2) infinite;vertical-align:text-bottom}@keyframes axm-blink{0%{opacity:1}50%{opacity:0}}.axm-assist-renderer__stream-content{display:flex;flex-direction:column;gap:.5rem}.axm-assist-renderer__streaming-activity{display:flex;align-items:center;gap:.5rem;padding-block:.15rem}.axm-assist-renderer__activity-label{line-height:1.45}.axm-assist-renderer__text{white-space:pre-line;word-break:break-word;line-height:1.85;font-size:.95rem;letter-spacing:.002em;text-wrap:pretty}.axm-assist-bot__segment ax-conversation-text-renderer{display:block}.axm-assist-bot__segment ax-conversation-text-renderer :is(p,ul,ol),.axm-assist-renderer__markdown .axp-markdown-viewer__content :is(p,ul,ol){margin-block:.45rem}.axm-assist-bot__segment ax-conversation-text-renderer li,.axm-assist-renderer__markdown .axp-markdown-viewer__content li{line-height:1.8}.axm-assist-renderer__accordion-group{width:100%}.axm-assist-renderer__collapse-shell{border-radius:.625rem;overflow:hidden;background:rgb(var(--ax-sys-color-lighter-surface))}.axm-assist-renderer__collapse-body{margin:0;padding:0;border-radius:0 0 .5rem .5rem;background:transparent}.axm-assist-renderer__collapse-body>.axm-assist-renderer__agent-live-block--in-accordion{padding-inline:.5rem;padding-block-end:.35rem}.axm-assist-renderer__accordion-header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.5rem .75rem;cursor:pointer;background:transparent;border:none;border-radius:.625rem .625rem 0 0;transition:background-color .15s ease}.axm-assist-renderer__collapse-shell>.axm-assist-renderer__accordion-header:hover{background:rgb(var(--ax-sys-color-light-surface))}.axm-assist-renderer__accordion-header-main{min-inline-size:0;display:flex;flex-direction:column;gap:.1rem}.axm-assist-renderer__accordion-header-title{font-size:.8125rem;line-height:1.25;font-weight:600;color:rgb(var(--ax-sys-color-on-surface));display:inline-flex;align-items:center;gap:.4rem}.axm-assist-renderer__header-trailing{flex-shrink:0;display:inline-flex;align-items:center;gap:.35rem}.axm-assist-renderer__delegated-agent-detail-link{padding:.25rem;text-decoration:underline;padding-top:0}.axm-assist-renderer__badge{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;max-width:min(100%,14rem);padding:.1875rem .65rem;border-radius:9999px;font-size:.6875rem;font-weight:600;line-height:1.3;letter-spacing:.03em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.axm-assist-renderer__badge--warning{background:rgb(var(--ax-sys-color-warning-100))}.axm-assist-renderer__badge--primary{background:rgb(var(--ax-sys-color-primary-100))}.axm-assist-renderer__badge--success{background:rgb(var(--ax-sys-color-success-100))}.axm-assist-renderer__thinking-chevron{display:inline-block;font-size:.65rem;opacity:.65;transition:transform .2s ease;line-height:1;flex-shrink:0}.axm-assist-renderer__thinking-chevron--expanded{transform:rotate(180deg)}.axm-assist-renderer__thinking-body{padding:.625rem .75rem .75rem;font-size:.78rem;color:rgb(var(--ax-sys-color-neutral-700));word-break:break-word;line-height:1.55}.axm-assist-renderer__tools{display:flex;flex-direction:column;gap:.5rem}.axm-assist-renderer__tool-card{border-radius:.625rem;overflow:hidden}.axm-assist-renderer__tool-body{padding:.625rem .75rem .75rem;display:flex;flex-direction:column;gap:.35rem}.axm-assist-renderer__tool-section-label{font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:rgb(var(--ax-sys-color-neutral-700))}.axm-assist-renderer__tool-pre{margin:0;max-block-size:10rem;overflow:auto;border-radius:.375rem;background:rgb(var(--ax-sys-color-light-surface));padding:.5rem;font-family:var(--ax-font-mono, monospace);font-size:.675rem;line-height:1.45;word-break:break-word}.axm-assist-renderer__run-meta-wrap{margin-block-start:.45rem}.axm-assist-renderer__run-meta-header-sub{font-size:.7rem;line-height:1.35;color:rgb(var(--ax-sys-color-neutral-700));white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.axm-assist-renderer__run-meta{margin-block-start:.45rem;padding:.55rem .65rem .6rem;border-radius:.625rem;background:rgb(var(--ax-sys-color-lighter-surface));display:flex;flex-direction:column;gap:.45rem}.axm-assist-renderer__run-meta--panel{margin-block-start:0;padding:.45rem .5rem .55rem;background:transparent;border-radius:0}.axm-assist-renderer__run-meta-grid{display:flex;gap:.4rem}.axm-assist-renderer__meta-tile{min-width:0;padding:.4rem .5rem .45rem;border-radius:.45rem;background:rgb(var(--ax-sys-color-light-surface))}.axm-assist-renderer__meta-tile--wide{grid-column:1/-1}.axm-assist-renderer__meta-tile--accent{background:rgb(var(--ax-sys-color-primary-50))}.axm-assist-renderer__meta-tile-label{font-size:.6rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:rgb(var(--ax-sys-color-neutral-700));margin-block-end:.2rem}.axm-assist-renderer__meta-tile-value{font-size:.78rem;font-weight:600;line-height:1.35;color:rgb(var(--ax-sys-color-on-surface));word-break:break-word}.axm-assist-renderer__meta-tile-value--mono{font-variant-numeric:tabular-nums;font-feature-settings:\"tnum\" 1}.axm-assist-renderer__meta-tile-sub{margin-block-start:.15rem;font-size:.65rem;line-height:1.3;color:rgb(var(--ax-sys-color-neutral-700));font-family:var(--ax-font-mono, ui-monospace, monospace);word-break:break-all}.axm-assist-renderer__meta-tile-note{display:inline;margin-inline-start:.2rem;font-size:.65rem;font-weight:500;color:rgb(var(--ax-sys-color-success-700))}.axm-assist-renderer__tool-editor-wrap{border-radius:.375rem;overflow:hidden;background:rgb(var(--ax-sys-color-light-surface))}.axm-assist-renderer__waiting{display:flex;gap:.25rem;padding:.25rem 0}.axm-assist-renderer__dot{inline-size:6px;block-size:6px;border-radius:50%;background:rgb(var(--ax-sys-color-neutral-500));animation:axm-blink 1.2s ease-in-out infinite}.axm-assist-renderer__dot:nth-child(2){animation-delay:.2s}.axm-assist-renderer__dot:nth-child(3){animation-delay:.4s}.axm-assist-renderer__agent-live-block{border-radius:.75rem;background:rgb(var(--ax-sys-color-lighter-surface));padding:.75rem .875rem;display:flex;flex-direction:column;gap:.65rem;max-inline-size:min(42rem,100%)}.axm-assist-renderer__agent-live-block--in-accordion{background:rgb(var(--ax-sys-color-light-surface));border-radius:.5rem;padding:.5rem .55rem .55rem;max-inline-size:none}.axm-assist-renderer__agent-live-header{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem}.axm-assist-renderer__agent-live-title{font-size:.8125rem;font-weight:600;color:rgb(var(--ax-sys-color-on-surface));flex:1;min-inline-size:0}.axm-assist-renderer__agent-live-prompt{font-size:.8125rem;line-height:1.55;word-break:break-word;padding:.5rem .75rem;border-radius:1.25rem;background:rgb(var(--ax-sys-color-lightest-surface));align-self:flex-end;max-inline-size:min(92%,36rem)}.axm-assist-renderer__agent-live-stream{font-size:.8125rem;line-height:1.55;white-space:pre-line;word-break:break-word;padding-block-start:.15rem}.axm-assist-renderer__agent-live-nested-tools{display:flex;flex-direction:column;gap:.35rem;padding-block-start:.35rem}.axm-assist-renderer__agent-live-nested-row{display:flex;align-items:center;gap:.45rem;font-size:.72rem}.axm-assist-renderer__agent-live-nested-name{font-family:var(--ax-font-mono, monospace);font-size:.7rem;flex:1;min-inline-size:0;overflow:hidden;text-overflow:ellipsis}.axm-assist-renderer__agent-live-nested-status{color:rgb(var(--ax-sys-color-neutral-600));flex-shrink:0}\n"] }]
6913
+ NgTemplateOutlet,
6914
+ ], template: "<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' ? '\u2026' : '\u2713'\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", styles: [".axm-assist-renderer{display:flex;flex-direction:column;gap:.25rem}.axm-assist-renderer axm-assist-suggestion-chips>div{padding:0;padding-top:1rem}.axm-assist-bot,.axm-assist-bot__final-line{display:flex;flex-direction:column;gap:.75rem}.axm-assist-bot__segment{unicode-bidi:isolate;font-size:.95rem;line-height:1.8;letter-spacing:.002em;color:rgb(var(--ax-sys-color-on-surface));text-wrap:pretty}.axm-assist-bot__line--user{align-self:flex-end}.axm-assist-bot__line--tool-role{align-self:stretch}.axm-assist-bot__tool-result{border-radius:.5rem;background:rgb(var(--ax-sys-color-lighter-surface));padding:.5rem .75rem}.axm-assist-bot__fallback{font-size:.88rem;line-height:1.75;word-break:break-word;opacity:.9}.axm-assist-renderer__cursor{display:inline-block;inline-size:6px;block-size:1em;margin-inline-start:2px;background:rgb(var(--ax-sys-color-primary-500));border-radius:1px;animation:axm-blink .8s steps(2) infinite;vertical-align:text-bottom}@keyframes axm-blink{0%{opacity:1}50%{opacity:0}}.axm-assist-renderer__stream-content{display:flex;flex-direction:column;gap:.5rem}.axm-assist-renderer__streaming-activity{display:flex;align-items:center;gap:.5rem;padding-block:.15rem}.axm-assist-renderer__activity-label{line-height:1.45}.axm-assist-renderer__text{white-space:pre-line;word-break:break-word;line-height:1.85;font-size:.95rem;letter-spacing:.002em;text-wrap:pretty}.axm-assist-bot__segment ax-conversation-text-renderer{display:block}.axm-assist-bot__segment ax-conversation-text-renderer :is(p,ul,ol),.axm-assist-renderer__markdown .axp-markdown-viewer__content :is(p,ul,ol){margin-block:.45rem}.axm-assist-bot__segment ax-conversation-text-renderer li,.axm-assist-renderer__markdown .axp-markdown-viewer__content li{line-height:1.8}.axm-assist-renderer__accordion-group{width:100%}.axm-assist-renderer__collapse-shell{border-radius:.625rem;overflow:hidden;background:rgb(var(--ax-sys-color-lighter-surface))}.axm-assist-renderer__collapse-body{margin:0;padding:0;border-radius:0 0 .5rem .5rem;background:transparent}.axm-assist-renderer__collapse-body>.axm-assist-renderer__agent-live-block--in-accordion{padding-inline:.5rem;padding-block-end:.35rem}.axm-assist-renderer__accordion-header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.5rem .75rem;cursor:pointer;background:transparent;border:none;border-radius:.625rem .625rem 0 0;transition:background-color .15s ease}.axm-assist-renderer__collapse-shell>.axm-assist-renderer__accordion-header:hover{background:rgb(var(--ax-sys-color-light-surface))}.axm-assist-renderer__accordion-header-main{min-inline-size:0;display:flex;flex-direction:column;gap:.1rem}.axm-assist-renderer__accordion-header-title{font-size:.8125rem;line-height:1.25;font-weight:600;color:rgb(var(--ax-sys-color-on-surface));display:inline-flex;align-items:center;gap:.4rem}.axm-assist-renderer__header-trailing{flex-shrink:0;display:inline-flex;align-items:center;gap:.35rem}.axm-assist-renderer__delegated-agent-detail-link{padding:.25rem;text-decoration:underline;padding-top:0}.axm-assist-renderer__badge{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;max-width:min(100%,14rem);padding:.1875rem .65rem;border-radius:9999px;font-size:.6875rem;font-weight:600;line-height:1.3;letter-spacing:.03em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.axm-assist-renderer__badge--warning{background:rgb(var(--ax-sys-color-warning-100))}.axm-assist-renderer__badge--primary{background:rgb(var(--ax-sys-color-primary-100))}.axm-assist-renderer__badge--success{background:rgb(var(--ax-sys-color-success-100))}.axm-assist-renderer__thinking-chevron{display:inline-block;font-size:.65rem;opacity:.65;transition:transform .2s ease;line-height:1;flex-shrink:0}.axm-assist-renderer__thinking-chevron--expanded{transform:rotate(180deg)}.axm-assist-renderer__thinking-body{padding:.625rem .75rem .75rem;font-size:.78rem;color:rgb(var(--ax-sys-color-neutral-700));word-break:break-word;line-height:1.55}.axm-assist-renderer__tools{display:flex;flex-direction:column;gap:.5rem}.axm-assist-renderer__tool-card{border-radius:.625rem;overflow:hidden}.axm-assist-renderer__tool-body{padding:.625rem .75rem .75rem;display:flex;flex-direction:column;gap:.35rem}.axm-assist-renderer__tool-section-label{font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:rgb(var(--ax-sys-color-neutral-700))}.axm-assist-renderer__tool-pre{margin:0;max-block-size:10rem;overflow:auto;border-radius:.375rem;background:rgb(var(--ax-sys-color-light-surface));padding:.5rem;font-family:var(--ax-font-mono, monospace);font-size:.675rem;line-height:1.45;word-break:break-word}.axm-assist-renderer__run-meta-wrap{margin-block-start:.45rem}.axm-assist-renderer__run-meta-header-sub{font-size:.7rem;line-height:1.35;color:rgb(var(--ax-sys-color-neutral-700));white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.axm-assist-renderer__run-meta{margin-block-start:.45rem;padding:.55rem .65rem .6rem;border-radius:.625rem;background:rgb(var(--ax-sys-color-lighter-surface));display:flex;flex-direction:column;gap:.45rem}.axm-assist-renderer__run-meta--panel{margin-block-start:0;padding:.45rem .5rem .55rem;background:transparent;border-radius:0}.axm-assist-renderer__run-meta-grid{display:flex;gap:.4rem}.axm-assist-renderer__meta-tile{min-width:0;padding:.4rem .5rem .45rem;border-radius:.45rem;background:rgb(var(--ax-sys-color-light-surface))}.axm-assist-renderer__meta-tile--wide{grid-column:1/-1}.axm-assist-renderer__meta-tile--accent{background:rgb(var(--ax-sys-color-primary-50))}.axm-assist-renderer__meta-tile-label{font-size:.6rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:rgb(var(--ax-sys-color-neutral-700));margin-block-end:.2rem}.axm-assist-renderer__meta-tile-value{font-size:.78rem;font-weight:600;line-height:1.35;color:rgb(var(--ax-sys-color-on-surface));word-break:break-word}.axm-assist-renderer__meta-tile-value--mono{font-variant-numeric:tabular-nums;font-feature-settings:\"tnum\" 1}.axm-assist-renderer__meta-tile-sub{margin-block-start:.15rem;font-size:.65rem;line-height:1.3;color:rgb(var(--ax-sys-color-neutral-700));font-family:var(--ax-font-mono, ui-monospace, monospace);word-break:break-all}.axm-assist-renderer__meta-tile-note{display:inline;margin-inline-start:.2rem;font-size:.65rem;font-weight:500;color:rgb(var(--ax-sys-color-success-700))}.axm-assist-renderer__tool-editor-wrap{border-radius:.375rem;overflow:hidden;background:rgb(var(--ax-sys-color-light-surface))}.axm-assist-renderer__waiting{display:flex;gap:.25rem;padding:.25rem 0}.axm-assist-renderer__dot{inline-size:6px;block-size:6px;border-radius:50%;background:rgb(var(--ax-sys-color-neutral-500));animation:axm-blink 1.2s ease-in-out infinite}.axm-assist-renderer__dot:nth-child(2){animation-delay:.2s}.axm-assist-renderer__dot:nth-child(3){animation-delay:.4s}.axm-assist-renderer__agent-live-block{border-radius:.75rem;background:rgb(var(--ax-sys-color-lighter-surface));padding:.75rem .875rem;display:flex;flex-direction:column;gap:.65rem;max-inline-size:min(42rem,100%)}.axm-assist-renderer__agent-live-block--in-accordion{background:rgb(var(--ax-sys-color-light-surface));border-radius:.5rem;padding:.5rem .55rem .55rem;max-inline-size:none}.axm-assist-renderer__agent-live-header{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem}.axm-assist-renderer__agent-live-title{font-size:.8125rem;font-weight:600;color:rgb(var(--ax-sys-color-on-surface));flex:1;min-inline-size:0}.axm-assist-renderer__agent-live-prompt{font-size:.8125rem;line-height:1.55;word-break:break-word;padding:.5rem .75rem;border-radius:1.25rem;background:rgb(var(--ax-sys-color-lightest-surface));align-self:flex-end;max-inline-size:min(92%,36rem)}.axm-assist-renderer__agent-live-stream{font-size:.8125rem;line-height:1.55;white-space:pre-line;word-break:break-word;padding-block-start:.15rem}.axm-assist-renderer__agent-live-nested-tools{display:flex;flex-direction:column;gap:.35rem;padding-block-start:.35rem}.axm-assist-renderer__agent-live-nested-row{display:flex;align-items:center;gap:.45rem;font-size:.72rem}.axm-assist-renderer__agent-live-nested-name{font-family:var(--ax-font-mono, monospace);font-size:.7rem;flex:1;min-inline-size:0;overflow:hidden;text-overflow:ellipsis}.axm-assist-renderer__agent-live-nested-status{color:rgb(var(--ax-sys-color-neutral-600));flex-shrink:0}.axm-assist-renderer__retry-alert-body{display:flex;align-items:flex-start;gap:.75rem}.axm-assist-renderer__retry-alert-text{flex:1;min-inline-size:0;display:flex;flex-direction:column;gap:.3rem}.axm-assist-renderer__retry-description{margin:0;font-size:.8125rem;line-height:1.5;opacity:.92}.axm-assist-renderer__retry-error-detail{margin:.15rem 0 0;font-size:.75rem;line-height:1.45;font-family:var(--ax-font-mono, ui-monospace, monospace);word-break:break-word;opacity:.88}.axm-assist-renderer__retry-action{flex-shrink:0;align-self:center}\n"] }]
6353
6915
  }], propDecorators: { message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: true }] }] } });
6354
6916
 
6355
6917
  /**
@@ -6511,22 +7073,19 @@ const AXM_CHAT_CONVERSATION2_PROVIDERS = [
6511
7073
  userApi: AXMChatUserApi,
6512
7074
  conversationApi: AXMChatConversationApi,
6513
7075
  messageApi: AXMChatMessageApi,
6514
- uploaderApi: AXMChatUploaderApi,
6515
7076
  realtimeApi: AXMChatRealtimeApi,
6516
7077
  config: {
6517
7078
  messagePageSize: 30,
6518
7079
  conversationPageSize: 20,
6519
7080
  infiniteScrollThreshold: 200,
6520
7081
  scrollThreshold: 100,
6521
- maxFileSize: 10 * 1024 * 1024,
6522
- allowedFileTypes: ['image/*', 'video/*', 'audio/*'],
6523
7082
  maxFilesPerMessage: 3,
6524
7083
  },
6525
7084
  registry: {
6526
7085
  messageRenderers: [
6527
7086
  AXM_CONVERSATION_BOT_RENDERER,
6528
7087
  AXM_CONVERSATION_NODE_RENDERER,
6529
- AX_CONVERSATION_TEXT_RENDERER,
7088
+ // AX_CONVERSATION_TEXT_RENDERER,
6530
7089
  AX_CONVERSATION_IMAGE_RENDERER,
6531
7090
  AX_CONVERSATION_VIDEO_RENDERER,
6532
7091
  AX_CONVERSATION_AUDIO_RENDERER,
@@ -6561,12 +7120,12 @@ const AXM_CHAT_CONVERSATION2_PROVIDERS = [
6561
7120
  AX_CONVERSATION_MESSAGE_DELETE_ACTION,
6562
7121
  ],
6563
7122
  composerActions: [
6564
- AX_CONVERSATION_COMPOSER_EMOJI_ACTION,
6565
- AX_CONVERSATION_COMPOSER_IMAGE_ACTION,
6566
- AX_CONVERSATION_COMPOSER_VIDEO_ACTION,
6567
- AX_CONVERSATION_COMPOSER_FILE_ACTION,
6568
- AX_CONVERSATION_COMPOSER_AUDIO_ACTION,
6569
- AX_CONVERSATION_COMPOSER_LOCATION_ACTION,
7123
+ // AX_CONVERSATION_COMPOSER_EMOJI_ACTION,
7124
+ // AX_CONVERSATION_COMPOSER_IMAGE_ACTION,
7125
+ // AX_CONVERSATION_COMPOSER_VIDEO_ACTION,
7126
+ // AX_CONVERSATION_COMPOSER_FILE_ACTION,
7127
+ // AX_CONVERSATION_COMPOSER_AUDIO_ACTION,
7128
+ // AX_CONVERSATION_COMPOSER_LOCATION_ACTION,
6570
7129
  ],
6571
7130
  composerTabs: [AX_CONVERSATION_COMPOSER_EMOJI_TAB, AX_CONVERSATION_COMPOSER_STICKER_TAB],
6572
7131
  conversationTabs: [
@@ -6599,8 +7158,11 @@ const AXM_CHAT_CONVERSATION2_PROVIDERS = [
6599
7158
  { provide: AXUserApi, useExisting: AXMChatUserApi },
6600
7159
  { provide: AXConversationApi, useExisting: AXMChatConversationApi },
6601
7160
  { provide: AXMessageApi, useExisting: AXMChatMessageApi },
6602
- { provide: AXUploaderApi, useExisting: AXMChatUploaderApi },
6603
7161
  { provide: AXRealtimeApi, useExisting: AXMChatRealtimeApi },
7162
+ {
7163
+ provide: ERROR_HANDLER_CONFIG,
7164
+ useValue: { logToConsole: false },
7165
+ },
6604
7166
  ];
6605
7167
  //#endregion
6606
7168
 
@@ -6626,7 +7188,7 @@ class AXMChatNotificationContentComponent {
6626
7188
  <ax-button (onClick)="goToChat($event)" [text]="'Go to Chat'"></ax-button> -->
6627
7189
  </div>
6628
7190
  </div>
6629
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i2$1.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
7191
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6630
7192
  }
6631
7193
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMChatNotificationContentComponent, decorators: [{
6632
7194
  type: Component,
@@ -6752,7 +7314,7 @@ class AXMCommentsPageComponentProvider {
6752
7314
  return [
6753
7315
  {
6754
7316
  key: COMMENTS_PAGE_COMPONENT_KEY,
6755
- loader: () => import('./acorex-modules-conversation-comments-page.component-CNqL-HdS.mjs').then((m) => m.AXMCommentsPageComponent),
7317
+ loader: () => import('./acorex-modules-conversation-comments-page.component-BJu6CoNR.mjs').then((m) => m.AXMCommentsPageComponent),
6756
7318
  },
6757
7319
  ];
6758
7320
  }
@@ -6780,7 +7342,7 @@ function routesFactory() {
6780
7342
  const routes = [
6781
7343
  {
6782
7344
  path: ':app/chat',
6783
- canActivate: [AXPAuthGuard],
7345
+ canActivate: [...AXP_PROTECTED_ROUTE_GUARDS],
6784
7346
  loadComponent: () => {
6785
7347
  return AXPRootLayoutComponent;
6786
7348
  },
@@ -6802,7 +7364,7 @@ function routesFactory() {
6802
7364
  {
6803
7365
  path: ':app/comments/t/:refrenceType/i/:refrenceId/s/:subject',
6804
7366
  title: '@conversation:comments.feature.title',
6805
- canActivate: [AXPAuthGuard],
7367
+ canActivate: [...AXP_PROTECTED_ROUTE_GUARDS],
6806
7368
  loadComponent: () => AXPRootLayoutComponent,
6807
7369
  // resolve: {
6808
7370
  // refrenceType: {
@@ -6825,7 +7387,7 @@ function routesFactory() {
6825
7387
  {
6826
7388
  path: ':app/comments/',
6827
7389
  title: '@conversation:comments.feature.title',
6828
- canActivate: [AXPAuthGuard],
7390
+ canActivate: [...AXP_PROTECTED_ROUTE_GUARDS],
6829
7391
  loadComponent: () => AXPRootLayoutComponent,
6830
7392
  children: [
6831
7393
  {
@@ -6881,6 +7443,7 @@ class AXMConversationModule {
6881
7443
  importProvidersFrom(AXConversationModule.forRoot()),
6882
7444
  DatePipe,
6883
7445
  ...AXM_CHAT_NOTIFICATION_PROVIDERS,
7446
+ ...AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_HANDLERS,
6884
7447
  ...AXM_COMMENT_NOTIFICATION_PROVIDERS,
6885
7448
  // Module Manifest Provider
6886
7449
  {
@@ -6922,11 +7485,11 @@ class AXMConversationModule {
6922
7485
  provideCommandSetups([
6923
7486
  {
6924
7487
  key: CONVERSATION_START_ASSIST_CHAT_COMMAND,
6925
- command: () => import('./acorex-modules-conversation-start-assist-chat.command-BKwrZJDs.mjs').then((m) => m.AXMConversationStartAssistChatCommand),
7488
+ command: () => import('./acorex-modules-conversation-start-assist-chat.command-CasClVbR.mjs').then((m) => m.AXMConversationStartAssistChatCommand),
6926
7489
  },
6927
7490
  {
6928
7491
  key: CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND,
6929
- command: () => import('./acorex-modules-conversation-send-assist-chat-message.command-CuYYEqhb.mjs').then((m) => m.AXMConversationSendAssistChatMessageCommand),
7492
+ command: () => import('./acorex-modules-conversation-send-assist-chat-message.command-B471NQRh.mjs').then((m) => m.AXMConversationSendAssistChatMessageCommand),
6930
7493
  },
6931
7494
  ]),
6932
7495
  ], imports: [AXPWidgetCoreModule,
@@ -7003,6 +7566,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
7003
7566
  importProvidersFrom(AXConversationModule.forRoot()),
7004
7567
  DatePipe,
7005
7568
  ...AXM_CHAT_NOTIFICATION_PROVIDERS,
7569
+ ...AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_HANDLERS,
7006
7570
  ...AXM_COMMENT_NOTIFICATION_PROVIDERS,
7007
7571
  // Module Manifest Provider
7008
7572
  {
@@ -7044,11 +7608,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
7044
7608
  provideCommandSetups([
7045
7609
  {
7046
7610
  key: CONVERSATION_START_ASSIST_CHAT_COMMAND,
7047
- command: () => import('./acorex-modules-conversation-start-assist-chat.command-BKwrZJDs.mjs').then((m) => m.AXMConversationStartAssistChatCommand),
7611
+ command: () => import('./acorex-modules-conversation-start-assist-chat.command-CasClVbR.mjs').then((m) => m.AXMConversationStartAssistChatCommand),
7048
7612
  },
7049
7613
  {
7050
7614
  key: CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND,
7051
- command: () => import('./acorex-modules-conversation-send-assist-chat-message.command-CuYYEqhb.mjs').then((m) => m.AXMConversationSendAssistChatMessageCommand),
7615
+ command: () => import('./acorex-modules-conversation-send-assist-chat-message.command-B471NQRh.mjs').then((m) => m.AXMConversationSendAssistChatMessageCommand),
7052
7616
  },
7053
7617
  ]),
7054
7618
  ],
@@ -7059,5 +7623,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
7059
7623
  * Generated bundle index. Do not edit.
7060
7624
  */
7061
7625
 
7062
- export { axmReadAssistAiTranscript as $, AXMChatAssistLauncherService as A, AXMConversationTabEntityModule as B, CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND as C, AXMConversationTabService as D, AXMConversationTabServiceImpl as E, AXMMessageEntityModule as F, AXMMessageService as G, AXMMessageServiceImpl as H, AXMPermissionsKeys as I, AXMRoomEntityModule as J, AXMRoomService as K, AXMRoomServiceImpl as L, AXM_ASSIST_TRANSCRIPT_LINE_PAYLOAD_TYPE as M, AXM_CONVERSATION_CHAT_ATTACHMENT_CATEGORY as N, AXM_CONVERSATION_CHAT_ATTACHMENT_REF_TYPE as O, AXPCommentWidget as P, COMMENTS_PAGE_COMPONENT_KEY as Q, RootConfig as R, axmAssistFollowUpItemsFromUnknown as S, axmAssistLastTranscriptLine as T, axmAssistUserFacingPayloadLine as U, axmAssistUserVisibleItemsForLine as V, axmBuildAssistTranscriptLinePayload as W, axmIsAssistPeerParticipant as X, axmNormalizeAssistTranscriptForChatUi as Y, axmNormalizeAssistTranscriptLineResponses as Z, axmParseAssistTranscriptLinePayload as _, AXMCommentComponent as a, axmReadAssistAiTranscriptRaw as a0, commentsPlugin as a1, messageFactory as a2, persistChatAttachment as a3, roomFactory as a4, tabFactory as a5, axmSanitizeDebugFilenamePart as b, axmDownloadDebugJson as c, axmAssistSegmentDirection as d, axmParseAssistTranscriptTextEnvelope as e, axmAssistWidgetNodeFromUnknown as f, axmSyntheticEmbedMessage as g, AXMNodeMessageRendererComponent as h, AXMAssistBotImageLineComponent as i, AXMAssistSuggestionChipsComponent as j, AXMChatComponent as k, AXMChatConversationApi as l, AXMChatMessageApi as m, AXMChatRealtimeApi as n, AXMChatUploaderApi as o, AXMChatUserApi as p, AXMCommentManagementService as q, AXMCommentPopupComponent as r, AXMCommentPopupStartAction as s, AXMCommentPopupWorkflow as t, AXMCommentRealtimeService as u, AXMCommentRealtimeServiceImpl as v, AXMCommentService as w, AXMCommentServiceImpl as x, AXMCommentWidgetViewComponent as y, AXMConversationModule as z };
7063
- //# sourceMappingURL=acorex-modules-conversation-acorex-modules-conversation-DYW31fEm.mjs.map
7626
+ export { axmIsAssistRetryableStatus as $, AXMChatAssistLauncherService as A, AXMConversationTabEntityModule as B, CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND as C, AXMConversationTabService as D, AXMConversationTabServiceImpl as E, AXMMessageEntityModule as F, AXMMessageService as G, AXMMessageServiceImpl as H, AXMPermissionsKeys as I, AXMRoomEntityModule as J, AXMRoomService as K, AXMRoomServiceImpl as L, AXM_ASSIST_TRANSCRIPT_LINE_PAYLOAD_TYPE as M, AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_HANDLERS as N, AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_KEY as O, AXM_CONVERSATION_CHAT_ATTACHMENT_CATEGORY as P, AXM_CONVERSATION_CHAT_ATTACHMENT_REF_TYPE as Q, AXPCommentWidget as R, COMMENTS_PAGE_COMPONENT_KEY as S, RootConfig as T, axmApplyAnswerTextToAssistPayloadLine as U, axmAssistFollowUpItemsFromUnknown as V, axmAssistLastTranscriptLine as W, axmAssistUserFacingPayloadLine as X, axmAssistUserVisibleItemsForLine as Y, axmBuildAssistTranscriptLinePayload as Z, axmIsAssistPeerParticipant as _, AXMCommentComponent as a, axmIsAssistStreamingStatus as a0, axmNormalizeAssistTranscriptForChatUi as a1, axmNormalizeAssistTranscriptLineResponses as a2, axmParseAssistTranscriptLinePayload as a3, axmPartitionAssistAnswerText as a4, axmReadAssistAiTranscript as a5, axmReadAssistAiTranscriptRaw as a6, axmReadAssistResponseError as a7, axmReadAssistResponseStatus as a8, axmResolveAssistFinalAnswerText as a9, axmSanitizeAssistUserAnswerText as aa, commentsPlugin as ab, messageFactory as ac, persistChatAttachment as ad, roomFactory as ae, tabFactory as af, axmSanitizeDebugFilenamePart as b, axmDownloadDebugJson as c, axmAssistSegmentDirection as d, axmParseAssistTranscriptTextEnvelope as e, axmAssistWidgetNodeFromUnknown as f, axmSyntheticEmbedMessage as g, AXMNodeMessageRendererComponent as h, AXMAssistBotFileLineComponent as i, AXMAssistSuggestionChipsComponent as j, AXMChatComponent as k, AXMChatConversationApi as l, AXMChatMessageApi as m, AXMChatRealtimeApi as n, AXMChatUserApi as o, AXMCommentManagementService as p, AXMCommentPopupComponent as q, AXMCommentPopupStartAction as r, AXMCommentPopupWorkflow as s, AXMCommentRealtimeService as t, AXMCommentRealtimeServiceImpl as u, AXMCommentService as v, AXMCommentServiceImpl as w, AXMCommentWidgetViewComponent as x, AXMConversationAssistBackgroundOperationHandler as y, AXMConversationModule as z };
7627
+ //# sourceMappingURL=acorex-modules-conversation-acorex-modules-conversation-BX09r8Xj.mjs.map