@acorex/modules 21.0.0-next.43 → 21.0.0-next.44

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 (114) hide show
  1. package/fesm2022/acorex-modules-ai-management.mjs +31 -225
  2. package/fesm2022/acorex-modules-ai-management.mjs.map +1 -1
  3. package/fesm2022/{acorex-modules-human-capital-management-acorex-modules-human-capital-management-Bwk3-2wy.mjs → acorex-modules-human-capital-management-acorex-modules-human-capital-management-hImDhzkB.mjs} +16 -19
  4. package/fesm2022/acorex-modules-human-capital-management-acorex-modules-human-capital-management-hImDhzkB.mjs.map +1 -0
  5. package/fesm2022/{acorex-modules-human-capital-management-approve-leave-request.command-B5aSubCY.mjs → acorex-modules-human-capital-management-approve-leave-request.command-DujyJOvo.mjs} +2 -2
  6. package/fesm2022/{acorex-modules-human-capital-management-approve-leave-request.command-B5aSubCY.mjs.map → acorex-modules-human-capital-management-approve-leave-request.command-DujyJOvo.mjs.map} +1 -1
  7. package/fesm2022/{acorex-modules-human-capital-management-assign-position-assignment.command-l8dGe3kg.mjs → acorex-modules-human-capital-management-assign-position-assignment.command-BPB9vaCn.mjs} +2 -2
  8. package/fesm2022/{acorex-modules-human-capital-management-assign-position-assignment.command-l8dGe3kg.mjs.map → acorex-modules-human-capital-management-assign-position-assignment.command-BPB9vaCn.mjs.map} +1 -1
  9. package/fesm2022/{acorex-modules-human-capital-management-cancel-leave-request.command-CeV-5Y5n.mjs → acorex-modules-human-capital-management-cancel-leave-request.command-BdPUdhbU.mjs} +2 -2
  10. package/fesm2022/{acorex-modules-human-capital-management-cancel-leave-request.command-CeV-5Y5n.mjs.map → acorex-modules-human-capital-management-cancel-leave-request.command-BdPUdhbU.mjs.map} +1 -1
  11. package/fesm2022/{acorex-modules-human-capital-management-employee.entity-DNgt9yQm.mjs → acorex-modules-human-capital-management-employee.entity-CgmF-WPf.mjs} +2 -2
  12. package/fesm2022/{acorex-modules-human-capital-management-employee.entity-DNgt9yQm.mjs.map → acorex-modules-human-capital-management-employee.entity-CgmF-WPf.mjs.map} +1 -1
  13. package/fesm2022/{acorex-modules-human-capital-management-employment-type.entity-rq8-Bauc.mjs → acorex-modules-human-capital-management-employment-type.entity-Chio_E9S.mjs} +2 -2
  14. package/fesm2022/{acorex-modules-human-capital-management-employment-type.entity-rq8-Bauc.mjs.map → acorex-modules-human-capital-management-employment-type.entity-Chio_E9S.mjs.map} +1 -1
  15. package/fesm2022/{acorex-modules-human-capital-management-leave-request.entity-DlQJw4F6.mjs → acorex-modules-human-capital-management-leave-request.entity--9iGu0H7.mjs} +2 -2
  16. package/fesm2022/{acorex-modules-human-capital-management-leave-request.entity-DlQJw4F6.mjs.map → acorex-modules-human-capital-management-leave-request.entity--9iGu0H7.mjs.map} +1 -1
  17. package/fesm2022/{acorex-modules-human-capital-management-leave-type.entity-D5J2oOuY.mjs → acorex-modules-human-capital-management-leave-type.entity-O0j4P2oU.mjs} +2 -2
  18. package/fesm2022/{acorex-modules-human-capital-management-leave-type.entity-D5J2oOuY.mjs.map → acorex-modules-human-capital-management-leave-type.entity-O0j4P2oU.mjs.map} +1 -1
  19. package/fesm2022/{acorex-modules-human-capital-management-position-assignment.entity-D7mKhxYp.mjs → acorex-modules-human-capital-management-position-assignment.entity-Bg6omEy_.mjs} +2 -2
  20. package/fesm2022/{acorex-modules-human-capital-management-position-assignment.entity-D7mKhxYp.mjs.map → acorex-modules-human-capital-management-position-assignment.entity-Bg6omEy_.mjs.map} +1 -1
  21. package/fesm2022/{acorex-modules-human-capital-management-reject-leave-request.command-C4AWFOmG.mjs → acorex-modules-human-capital-management-reject-leave-request.command-ZNGufyB1.mjs} +2 -2
  22. package/fesm2022/{acorex-modules-human-capital-management-reject-leave-request.command-C4AWFOmG.mjs.map → acorex-modules-human-capital-management-reject-leave-request.command-ZNGufyB1.mjs.map} +1 -1
  23. package/fesm2022/{acorex-modules-human-capital-management-revoke-position-assignment.command-BSJhBW3p.mjs → acorex-modules-human-capital-management-revoke-position-assignment.command-C8pwJExa.mjs} +2 -2
  24. package/fesm2022/{acorex-modules-human-capital-management-revoke-position-assignment.command-BSJhBW3p.mjs.map → acorex-modules-human-capital-management-revoke-position-assignment.command-C8pwJExa.mjs.map} +1 -1
  25. package/fesm2022/acorex-modules-human-capital-management.mjs +1 -1
  26. package/fesm2022/{acorex-modules-organization-management-acorex-modules-organization-management-Dqhk5reQ.mjs → acorex-modules-organization-management-acorex-modules-organization-management-CGzZcKEy.mjs} +141 -578
  27. package/fesm2022/acorex-modules-organization-management-acorex-modules-organization-management-CGzZcKEy.mjs.map +1 -0
  28. package/fesm2022/{acorex-modules-organization-management-add-business-unit-to-business-unit.command-pnxqURIQ.mjs → acorex-modules-organization-management-add-business-unit-to-business-unit.command-BEJyfR3P.mjs} +2 -2
  29. package/fesm2022/{acorex-modules-organization-management-add-business-unit-to-business-unit.command-pnxqURIQ.mjs.map → acorex-modules-organization-management-add-business-unit-to-business-unit.command-BEJyfR3P.mjs.map} +1 -1
  30. package/fesm2022/{acorex-modules-organization-management-add-position-to-business-unit.command-DbHKd1Nd.mjs → acorex-modules-organization-management-add-position-to-business-unit.command-DKgxg9q5.mjs} +2 -2
  31. package/fesm2022/{acorex-modules-organization-management-add-position-to-business-unit.command-DbHKd1Nd.mjs.map → acorex-modules-organization-management-add-position-to-business-unit.command-DKgxg9q5.mjs.map} +1 -1
  32. package/fesm2022/acorex-modules-organization-management-add-team-to-business-unit.command-DJJT7BXT.mjs +130 -0
  33. package/fesm2022/acorex-modules-organization-management-add-team-to-business-unit.command-DJJT7BXT.mjs.map +1 -0
  34. package/fesm2022/{acorex-modules-organization-management-business-unit.entity-FsF290Im.mjs → acorex-modules-organization-management-business-unit.entity-BAp38sib.mjs} +2 -2
  35. package/fesm2022/{acorex-modules-organization-management-business-unit.entity-FsF290Im.mjs.map → acorex-modules-organization-management-business-unit.entity-BAp38sib.mjs.map} +1 -1
  36. package/fesm2022/{acorex-modules-organization-management-chart.entity-_OJkO2zX.mjs → acorex-modules-organization-management-chart.entity-WfmpWj8R.mjs} +2 -2
  37. package/fesm2022/{acorex-modules-organization-management-chart.entity-_OJkO2zX.mjs.map → acorex-modules-organization-management-chart.entity-WfmpWj8R.mjs.map} +1 -1
  38. package/fesm2022/{acorex-modules-organization-management-company.entity-Dw7_BvxV.mjs → acorex-modules-organization-management-company.entity-BUVLrwjq.mjs} +2 -2
  39. package/fesm2022/{acorex-modules-organization-management-company.entity-Dw7_BvxV.mjs.map → acorex-modules-organization-management-company.entity-BUVLrwjq.mjs.map} +1 -1
  40. package/fesm2022/{acorex-modules-organization-management-entity.provider-BWw2RN_V.mjs → acorex-modules-organization-management-entity.provider-DH3eUGTu.mjs} +15 -15
  41. package/fesm2022/{acorex-modules-organization-management-entity.provider-BWw2RN_V.mjs.map → acorex-modules-organization-management-entity.provider-DH3eUGTu.mjs.map} +1 -1
  42. package/fesm2022/{acorex-modules-organization-management-feature-definition.provider-D3WYwpy0.mjs → acorex-modules-organization-management-feature-definition.provider-DuScrBze.mjs} +2 -2
  43. package/fesm2022/{acorex-modules-organization-management-feature-definition.provider-D3WYwpy0.mjs.map → acorex-modules-organization-management-feature-definition.provider-DuScrBze.mjs.map} +1 -1
  44. package/fesm2022/{acorex-modules-organization-management-job-definition-pages-component.provider-CnS_nu1v.mjs → acorex-modules-organization-management-job-definition-pages-component.provider-D-J9JCsU.mjs} +3 -3
  45. package/fesm2022/{acorex-modules-organization-management-job-definition-pages-component.provider-CnS_nu1v.mjs.map → acorex-modules-organization-management-job-definition-pages-component.provider-D-J9JCsU.mjs.map} +1 -1
  46. package/fesm2022/{acorex-modules-organization-management-job-definition-responsibilities-page.component-ZTopEh2M.mjs → acorex-modules-organization-management-job-definition-responsibilities-page.component-Dsy5rFGw.mjs} +3 -3
  47. package/fesm2022/{acorex-modules-organization-management-job-definition-responsibilities-page.component-ZTopEh2M.mjs.map → acorex-modules-organization-management-job-definition-responsibilities-page.component-Dsy5rFGw.mjs.map} +1 -1
  48. package/fesm2022/{acorex-modules-organization-management-job-definition-skills-page.component-Yyzwqg0v.mjs → acorex-modules-organization-management-job-definition-skills-page.component-B73wLPby.mjs} +2 -2
  49. package/fesm2022/{acorex-modules-organization-management-job-definition-skills-page.component-Yyzwqg0v.mjs.map → acorex-modules-organization-management-job-definition-skills-page.component-B73wLPby.mjs.map} +1 -1
  50. package/fesm2022/{acorex-modules-organization-management-job-definition.entity-DJjmv1hf.mjs → acorex-modules-organization-management-job-definition.entity-B7mWKYqb.mjs} +2 -2
  51. package/fesm2022/{acorex-modules-organization-management-job-definition.entity-DJjmv1hf.mjs.map → acorex-modules-organization-management-job-definition.entity-B7mWKYqb.mjs.map} +1 -1
  52. package/fesm2022/{acorex-modules-organization-management-job-level.datasource-DJH3zaNN.mjs → acorex-modules-organization-management-job-level.datasource-DibRoKXR.mjs} +2 -2
  53. package/fesm2022/{acorex-modules-organization-management-job-level.datasource-DJH3zaNN.mjs.map → acorex-modules-organization-management-job-level.datasource-DibRoKXR.mjs.map} +1 -1
  54. package/fesm2022/{acorex-modules-organization-management-job-level.entity-DBEFEBzu.mjs → acorex-modules-organization-management-job-level.entity-C_MzeTw5.mjs} +2 -2
  55. package/fesm2022/{acorex-modules-organization-management-job-level.entity-DBEFEBzu.mjs.map → acorex-modules-organization-management-job-level.entity-C_MzeTw5.mjs.map} +1 -1
  56. package/fesm2022/{acorex-modules-organization-management-menu.provider-yGn338K1.mjs → acorex-modules-organization-management-menu.provider-CQeJINzl.mjs} +3 -2
  57. package/fesm2022/{acorex-modules-organization-management-menu.provider-yGn338K1.mjs.map → acorex-modules-organization-management-menu.provider-CQeJINzl.mjs.map} +1 -1
  58. package/fesm2022/acorex-modules-organization-management-org-chart-default-node-contribution.provider-D3hCHSr_.mjs +228 -0
  59. package/fesm2022/acorex-modules-organization-management-org-chart-default-node-contribution.provider-D3hCHSr_.mjs.map +1 -0
  60. package/fesm2022/acorex-modules-organization-management-org-chart-employee-flyout-contribution.provider-Bv0I-45L.mjs +182 -0
  61. package/fesm2022/acorex-modules-organization-management-org-chart-employee-flyout-contribution.provider-Bv0I-45L.mjs.map +1 -0
  62. package/fesm2022/acorex-modules-organization-management-org-chart-position-employee-node-contribution.provider-DbfYza8q.mjs +170 -0
  63. package/fesm2022/acorex-modules-organization-management-org-chart-position-employee-node-contribution.provider-DbfYza8q.mjs.map +1 -0
  64. package/fesm2022/acorex-modules-organization-management-org-chart-ux-node-contribution.provider-C9APxguL.mjs +334 -0
  65. package/fesm2022/acorex-modules-organization-management-org-chart-ux-node-contribution.provider-C9APxguL.mjs.map +1 -0
  66. package/fesm2022/{acorex-modules-organization-management-org-chart.page-C1J123cl.mjs → acorex-modules-organization-management-org-chart.page-BcHO5kKP.mjs} +104 -19
  67. package/fesm2022/acorex-modules-organization-management-org-chart.page-BcHO5kKP.mjs.map +1 -0
  68. package/fesm2022/{acorex-modules-organization-management-permission-definition.provider-B1f668X4.mjs → acorex-modules-organization-management-permission-definition.provider-BcIRJpBt.mjs} +3 -2
  69. package/fesm2022/{acorex-modules-organization-management-permission-definition.provider-B1f668X4.mjs.map → acorex-modules-organization-management-permission-definition.provider-BcIRJpBt.mjs.map} +1 -1
  70. package/fesm2022/acorex-modules-organization-management-permission.keys-DwZNBc12.mjs +56 -0
  71. package/fesm2022/acorex-modules-organization-management-permission.keys-DwZNBc12.mjs.map +1 -0
  72. package/fesm2022/{acorex-modules-organization-management-position.entity-BvSjM5Hs.mjs → acorex-modules-organization-management-position.entity-DBOpLtSI.mjs} +2 -2
  73. package/fesm2022/{acorex-modules-organization-management-position.entity-BvSjM5Hs.mjs.map → acorex-modules-organization-management-position.entity-DBOpLtSI.mjs.map} +1 -1
  74. package/fesm2022/{acorex-modules-organization-management-remove-position-from-business-unit.command-CPdbVSno.mjs → acorex-modules-organization-management-remove-position-from-business-unit.command-TqYgfnsy.mjs} +2 -2
  75. package/fesm2022/{acorex-modules-organization-management-remove-position-from-business-unit.command-CPdbVSno.mjs.map → acorex-modules-organization-management-remove-position-from-business-unit.command-TqYgfnsy.mjs.map} +1 -1
  76. package/fesm2022/{acorex-modules-organization-management-replace-position-assignee.command-CQRcVN6R.mjs → acorex-modules-organization-management-replace-position-assignee.command-BJ2gn0-A.mjs} +2 -2
  77. package/fesm2022/{acorex-modules-organization-management-replace-position-assignee.command-CQRcVN6R.mjs.map → acorex-modules-organization-management-replace-position-assignee.command-BJ2gn0-A.mjs.map} +1 -1
  78. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-Ce3T04Qb.mjs → acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-CZdMLIL-.mjs} +2 -2
  79. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-Ce3T04Qb.mjs.map → acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-CZdMLIL-.mjs.map} +1 -1
  80. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-view.component-CIr7JDX-.mjs → acorex-modules-organization-management-responsibilities-matrix-widget-view.component-BBo97rDN.mjs} +2 -2
  81. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-view.component-CIr7JDX-.mjs.map → acorex-modules-organization-management-responsibilities-matrix-widget-view.component-BBo97rDN.mjs.map} +1 -1
  82. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix.component-BXWso7Ga.mjs → acorex-modules-organization-management-responsibilities-matrix.component-D9oH_Fbb.mjs} +2 -2
  83. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix.component-BXWso7Ga.mjs.map → acorex-modules-organization-management-responsibilities-matrix.component-D9oH_Fbb.mjs.map} +1 -1
  84. package/fesm2022/{acorex-modules-organization-management-responsibility-level.entity-DB04XTJ8.mjs → acorex-modules-organization-management-responsibility-level.entity-D6IG9Zc7.mjs} +2 -2
  85. package/fesm2022/{acorex-modules-organization-management-responsibility-level.entity-DB04XTJ8.mjs.map → acorex-modules-organization-management-responsibility-level.entity-D6IG9Zc7.mjs.map} +1 -1
  86. package/fesm2022/{acorex-modules-organization-management-responsibility.entity-BMqhYqJS.mjs → acorex-modules-organization-management-responsibility.entity-BosNxYjW.mjs} +2 -2
  87. package/fesm2022/{acorex-modules-organization-management-responsibility.entity-BMqhYqJS.mjs.map → acorex-modules-organization-management-responsibility.entity-BosNxYjW.mjs.map} +1 -1
  88. package/fesm2022/{acorex-modules-organization-management-settings.provider-BhIJkbq_.mjs → acorex-modules-organization-management-settings.provider-CL9C9UXA.mjs} +2 -2
  89. package/fesm2022/{acorex-modules-organization-management-settings.provider-BhIJkbq_.mjs.map → acorex-modules-organization-management-settings.provider-CL9C9UXA.mjs.map} +1 -1
  90. package/fesm2022/{acorex-modules-organization-management-team-business-unit.entity-DkTtZv7y.mjs → acorex-modules-organization-management-team-business-unit.entity-CYFGTcHe.mjs} +2 -2
  91. package/fesm2022/{acorex-modules-organization-management-team-business-unit.entity-DkTtZv7y.mjs.map → acorex-modules-organization-management-team-business-unit.entity-CYFGTcHe.mjs.map} +1 -1
  92. package/fesm2022/{acorex-modules-organization-management-team-member-role.entity-DPqEPpkP.mjs → acorex-modules-organization-management-team-member-role.entity-B5vNDne0.mjs} +2 -2
  93. package/fesm2022/{acorex-modules-organization-management-team-member-role.entity-DPqEPpkP.mjs.map → acorex-modules-organization-management-team-member-role.entity-B5vNDne0.mjs.map} +1 -1
  94. package/fesm2022/{acorex-modules-organization-management-team-member.entity-IN-CPv5W.mjs → acorex-modules-organization-management-team-member.entity-DsKuxCRB.mjs} +14 -2
  95. package/fesm2022/acorex-modules-organization-management-team-member.entity-DsKuxCRB.mjs.map +1 -0
  96. package/fesm2022/{acorex-modules-organization-management-team.entity-D7B8ulFX.mjs → acorex-modules-organization-management-team.entity-Cg30cho_.mjs} +2 -2
  97. package/fesm2022/{acorex-modules-organization-management-team.entity-D7B8ulFX.mjs.map → acorex-modules-organization-management-team.entity-Cg30cho_.mjs.map} +1 -1
  98. package/fesm2022/acorex-modules-organization-management.mjs +1 -1
  99. package/fesm2022/{acorex-modules-task-management-acorex-modules-task-management-CWlgXg_u.mjs → acorex-modules-task-management-acorex-modules-task-management-DDUq9FpA.mjs} +178 -14
  100. package/fesm2022/acorex-modules-task-management-acorex-modules-task-management-DDUq9FpA.mjs.map +1 -0
  101. package/fesm2022/{acorex-modules-task-management-task-board.page-Bxpga0DN.mjs → acorex-modules-task-management-task-board.page-C6j-_aSD.mjs} +106 -68
  102. package/fesm2022/acorex-modules-task-management-task-board.page-C6j-_aSD.mjs.map +1 -0
  103. package/fesm2022/acorex-modules-task-management.mjs +1 -1
  104. package/organization-management/README.md +1 -1
  105. package/package.json +2 -2
  106. package/types/acorex-modules-ai-management.d.ts +25 -67
  107. package/types/acorex-modules-organization-management.d.ts +128 -69
  108. package/types/acorex-modules-task-management.d.ts +12 -1
  109. package/fesm2022/acorex-modules-human-capital-management-acorex-modules-human-capital-management-Bwk3-2wy.mjs.map +0 -1
  110. package/fesm2022/acorex-modules-organization-management-acorex-modules-organization-management-Dqhk5reQ.mjs.map +0 -1
  111. package/fesm2022/acorex-modules-organization-management-org-chart.page-C1J123cl.mjs.map +0 -1
  112. package/fesm2022/acorex-modules-organization-management-team-member.entity-IN-CPv5W.mjs.map +0 -1
  113. package/fesm2022/acorex-modules-task-management-acorex-modules-task-management-CWlgXg_u.mjs.map +0 -1
  114. package/fesm2022/acorex-modules-task-management-task-board.page-Bxpga0DN.mjs.map +0 -1
@@ -31,9 +31,6 @@ import * as i1 from '@angular/forms';
31
31
  import { FormsModule } from '@angular/forms';
32
32
  import { AXOverlayService } from '@acorex/cdk/overlay';
33
33
  import { defineCommand, AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS } from '@acorex/platform/runtime';
34
- import { AXBasePageComponent } from '@acorex/components/page';
35
- import * as i3$1 from '@acorex/components/form';
36
- import { AXFormModule } from '@acorex/components/form';
37
34
 
38
35
  //#region ---- Module Config ----
39
36
  const config = {
@@ -1854,9 +1851,9 @@ function axmMimeTypeForChatAttachment(file) {
1854
1851
  //#endregion
1855
1852
  //#region ---- Component ----
1856
1853
  /**
1857
- * Floating prompt UI for AI assist: gradient chrome, inner composer, and image/audio/document attachments. Uses initial assist/agent ids when the target picker is not shown.
1854
+ * Floating prompt UI for AI assist: gradient chrome, inner composer, and image/audio/document attachments. Target assist/agent comes from optional initial ids on open.
1858
1855
  */
1859
- class AXMAiAssistPromptBottomPanelComponent {
1856
+ class AXMAiAssistPromptBoxComponent {
1860
1857
  constructor() {
1861
1858
  //#region ---- Services & Dependencies ----
1862
1859
  this.toastService = inject(AXToastService);
@@ -1870,8 +1867,6 @@ class AXMAiAssistPromptBottomPanelComponent {
1870
1867
  this.placeholder = input('', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
1871
1868
  this.initialPrompt = input('', ...(ngDevMode ? [{ debugName: "initialPrompt" }] : /* istanbul ignore next */ []));
1872
1869
  this.contentMaxWidthPx = input(680, ...(ngDevMode ? [{ debugName: "contentMaxWidthPx" }] : /* istanbul ignore next */ []));
1873
- this.assistPickerRows = input([], ...(ngDevMode ? [{ debugName: "assistPickerRows" }] : /* istanbul ignore next */ []));
1874
- this.agentPickerRows = input([], ...(ngDevMode ? [{ debugName: "agentPickerRows" }] : /* istanbul ignore next */ []));
1875
1870
  this.initialAssistId = input(undefined, ...(ngDevMode ? [{ debugName: "initialAssistId" }] : /* istanbul ignore next */ []));
1876
1871
  this.initialDirectAgentId = input(undefined, ...(ngDevMode ? [{ debugName: "initialDirectAgentId" }] : /* istanbul ignore next */ []));
1877
1872
  this.runPrompt = input.required(...(ngDevMode ? [{ debugName: "runPrompt" }] : /* istanbul ignore next */ []));
@@ -1934,6 +1929,16 @@ class AXMAiAssistPromptBottomPanelComponent {
1934
1929
  onPromptDraftChange(value) {
1935
1930
  this.promptDraft.set((value ?? '').toString());
1936
1931
  }
1932
+ /**
1933
+ * Enter sends; Shift+Enter inserts a newline. IME composition Enter is left unchanged.
1934
+ */
1935
+ onPromptKeydown(event) {
1936
+ if (event.key !== 'Enter' || event.shiftKey || event.isComposing) {
1937
+ return;
1938
+ }
1939
+ event.preventDefault();
1940
+ void this.onSend();
1941
+ }
1937
1942
  onCancel() {
1938
1943
  this.requestClose()(null);
1939
1944
  }
@@ -1945,7 +1950,7 @@ class AXMAiAssistPromptBottomPanelComponent {
1945
1950
  this.onCancel();
1946
1951
  }
1947
1952
  /**
1948
- * Dismisses the panel like Cancel (disabled while a run is in flight, same as footer Cancel).
1953
+ * Dismisses the prompt box like Cancel (disabled while a run is in flight, same as footer Cancel).
1949
1954
  */
1950
1955
  onDocumentEscape() {
1951
1956
  if (!isPlatformBrowser(this.platformId) || this.busy()) {
@@ -2380,12 +2385,12 @@ class AXMAiAssistPromptBottomPanelComponent {
2380
2385
  const content = await this.translation.translateAsync(translationKey);
2381
2386
  await this.toastService.show({ color: 'warning', title: errTitle, content });
2382
2387
  }
2383
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAiAssistPromptBottomPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2384
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMAiAssistPromptBottomPanelComponent, isStandalone: true, selector: "axm-ai-assist-prompt-bottom-panel", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, initialPrompt: { classPropertyName: "initialPrompt", publicName: "initialPrompt", isSignal: true, isRequired: false, transformFunction: null }, contentMaxWidthPx: { classPropertyName: "contentMaxWidthPx", publicName: "contentMaxWidthPx", isSignal: true, isRequired: false, transformFunction: null }, assistPickerRows: { classPropertyName: "assistPickerRows", publicName: "assistPickerRows", isSignal: true, isRequired: false, transformFunction: null }, agentPickerRows: { classPropertyName: "agentPickerRows", publicName: "agentPickerRows", isSignal: true, isRequired: false, transformFunction: null }, initialAssistId: { classPropertyName: "initialAssistId", publicName: "initialAssistId", isSignal: true, isRequired: false, transformFunction: null }, initialDirectAgentId: { classPropertyName: "initialDirectAgentId", publicName: "initialDirectAgentId", isSignal: true, isRequired: false, transformFunction: null }, runPrompt: { classPropertyName: "runPrompt", publicName: "runPrompt", isSignal: true, isRequired: true, transformFunction: null }, requestClose: { classPropertyName: "requestClose", publicName: "requestClose", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "document:keydown.escape": "onDocumentEscape()" } }, ngImport: i0, template: "<div class=\"axm-ai-assist-prompt-bottom-panel ax-flex ax-flex-col ax-gap-2.5 ax-min-h-0 ax-w-full\"\n [style.max-width.px]=\"contentMaxWidthPx()\">\n <div\n class=\"axm-ai-assist-prompt-bottom-panel__eyebrow ax-flex ax-items-center ax-justify-between ax-gap-3 ax-shrink-0 ax-px-0.5\">\n <div class=\"axm-ai-assist-prompt-bottom-panel__brand ax-inline-flex ax-min-w-0 ax-items-center ax-gap-2\">\n <span class=\"axm-ai-assist-prompt-bottom-panel__brand-mark\" aria-hidden=\"true\">\n <i class=\"fa-light fa-sparkles\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"axm-ai-assist-prompt-bottom-panel__brand-title ax-truncate\">{{ title() }}</span>\n </div>\n <ax-button class=\"ax-shrink-0 ax-xs\" look=\"blank\" color=\"default\" type=\"button\" [iconOnly]=\"true\"\n [disabled]=\"busy()\" [attr.aria-label]=\"('@general:actions.close.title' | translate | async) ?? ''\"\n (onClick)=\"onCancel()\">\n <ax-prefix>\n <i class=\"fa-light fa-xmark\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button>\n </div>\n\n <div class=\"axm-ai-assist-prompt-bottom-panel__sheet ax-flex ax-min-h-0 ax-flex-col ax-gap-2\">\n @if (\n draftComposerImages().length > 0 ||\n draftComposerAudios().length > 0 ||\n draftComposerFiles().length > 0 ||\n isComposerSaving()\n ) {\n <div\n class=\"ax-shrink-0 ax-rounded-xl ax-border ax-border-default/45 dark:ax-border-darker ax-bg-lightest/90 ax-p-1.5 ax-flex ax-flex-col ax-gap-1.5\"\n [attr.aria-label]=\"('@ai-management:chat.composer-attachments-region' | translate | async) ?? ''\">\n <div class=\"ax-flex ax-flex-wrap ax-items-center ax-justify-between ax-gap-1.5 ax-text-[0.65rem] ax-text-muted\">\n <span>\n @if (isComposerSaving()) {\n {{ '@ai-management:chat.composer-uploading' | translate | async }}\n } @else {\n @if (draftComposerImages().length > 0) {\n <span>{{ draftComposerImages().length }}\n {{ '@ai-management:chat.composer-images-count' | translate | async }}</span>\n }\n @if (draftComposerImages().length > 0 && draftComposerAudios().length > 0) {\n <span class=\"ax-mx-1\">\u00B7</span>\n }\n @if (draftComposerAudios().length > 0) {\n <span>{{ draftComposerAudios().length }}\n {{ '@ai-management:chat.composer-audio-count' | translate | async }}</span>\n }\n @if (draftComposerFiles().length > 0) {\n @if (draftComposerImages().length > 0 || draftComposerAudios().length > 0) {\n <span class=\"ax-mx-1\">\u00B7</span>\n }\n <span>{{ draftComposerFiles().length }}\n {{ '@ai-management:chat.composer-documents-count' | translate | async }}</span>\n }\n }\n </span>\n </div>\n @if (draftComposerImages().length > 0) {\n <div class=\"ax-flex ax-flex-wrap ax-gap-1.5\">\n @for (slot of draftComposerImages(); track slot.clientId) {\n <div\n class=\"ax-relative ax-h-12 ax-w-12 ax-shrink-0 ax-overflow-hidden ax-rounded-md ax-border ax-border-default/60 dark:ax-border-darker ax-bg-lightest\">\n <img [src]=\"slot.previewUrl\" [alt]=\"slot.name ?? ''\" class=\"ax-h-full ax-w-full ax-object-cover\" />\n @if (!slot.fileId) {\n <span\n class=\"ax-absolute ax-inset-0 ax-flex ax-items-center ax-justify-center ax-bg-default/40 ax-text-[0.6rem] ax-font-medium ax-text-on-lightest\">\u2026</span>\n }\n <button type=\"button\"\n class=\"ax-absolute ax-end-0.5 ax-top-0.5 ax-flex ax-h-4 ax-w-4 ax-items-center ax-justify-center ax-rounded ax-bg-default/80 ax-text-[0.65rem] ax-leading-none ax-text-on-lightest hover:ax-bg-default focus-visible:ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-400\"\n [disabled]=\"busy() || isComposerSaving()\"\n [attr.aria-label]=\"('@ai-management:chat.remove-draft-image' | translate | async) ?? ''\"\n (click)=\"removeDraftImage(slot.clientId)\">\n \u00D7\n </button>\n </div>\n }\n </div>\n }\n @if (draftComposerAudios().length > 0) {\n <div class=\"ax-flex ax-flex-col ax-gap-1\">\n @for (slot of draftComposerAudios(); track slot.clientId) {\n <div\n class=\"ax-flex ax-items-center ax-justify-between ax-gap-1.5 ax-rounded ax-border ax-border-default/60 dark:ax-border-darker ax-bg-lightest ax-px-1.5 ax-py-1 ax-text-[0.65rem] ax-min-w-0\">\n <span class=\"ax-truncate ax-text-on-lightest\" [attr.title]=\"slot.name ?? ''\">\n {{ '@ai-management:chat.attached-audio-label' | translate | async }}:\n {{ slot.name?.trim() || ('@ai-management:chat.audio-untitled' | translate | async) }}\n </span>\n @if (!slot.fileId) {\n <span class=\"ax-text-muted ax-shrink-0\">\u2026</span>\n }\n <button type=\"button\"\n class=\"ax-shrink-0 ax-flex ax-h-5 ax-w-5 ax-items-center ax-justify-center ax-rounded ax-bg-default/80 ax-text-[0.75rem] ax-leading-none ax-text-on-lightest hover:ax-bg-default focus-visible:ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-400\"\n [disabled]=\"busy() || isComposerSaving()\"\n [attr.aria-label]=\"('@ai-management:chat.remove-draft-audio' | translate | async) ?? ''\"\n (click)=\"removeDraftAudio(slot.clientId)\">\n \u00D7\n </button>\n </div>\n }\n </div>\n }\n @if (draftComposerFiles().length > 0) {\n <div class=\"ax-flex ax-flex-col ax-gap-1\">\n @for (slot of draftComposerFiles(); track slot.clientId) {\n <div\n class=\"ax-flex ax-items-center ax-justify-between ax-gap-1.5 ax-rounded ax-border ax-border-default/60 dark:ax-border-darker ax-bg-lightest ax-px-1.5 ax-py-1 ax-text-[0.65rem] ax-min-w-0\">\n <span class=\"ax-truncate ax-text-on-lightest\" [attr.title]=\"slot.name ?? ''\">\n {{ '@ai-management:chat.attached-document-label' | translate | async }}:\n {{ slot.name?.trim() || ('@ai-management:chat.document-untitled' | translate | async) }}\n </span>\n @if (!slot.fileId) {\n <span class=\"ax-text-muted ax-shrink-0\">\u2026</span>\n }\n <button type=\"button\"\n class=\"ax-shrink-0 ax-flex ax-h-5 ax-w-5 ax-items-center ax-justify-center ax-rounded ax-bg-default/80 ax-text-[0.75rem] ax-leading-none ax-text-on-lightest hover:ax-bg-default focus-visible:ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-400\"\n [disabled]=\"busy() || isComposerSaving()\"\n [attr.aria-label]=\"('@ai-management:chat.remove-draft-document' | translate | async) ?? ''\"\n (click)=\"removeDraftFile(slot.clientId)\">\n \u00D7\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <div class=\"axm-ai-assist-prompt-bottom-panel__body ax-flex ax-min-h-0 ax-flex-col\">\n <ax-text-area class=\"axm-ai-assist-prompt-bottom-panel__prompt-input ax-w-full ax-min-h-0\" [rows]=\"3\"\n [disabled]=\"busy()\" [ngModel]=\"promptDraft()\" (ngModelChange)=\"onPromptDraftChange($event)\" [placeholder]=\"\n placeholder().trim().length > 0\n ? placeholder()\n : ((('@ai-management:assist-popup.placeholder' | translate | async) ?? ''))\n \"></ax-text-area>\n </div>\n\n <div\n class=\"axm-ai-assist-prompt-bottom-panel__footer ax-flex ax-shrink-0 ax-items-center ax-justify-between ax-gap-2\">\n <ax-button class=\"axm-ai-assist-prompt-bottom-panel__menu-trigger\" look=\"solid\" color=\"primary\" type=\"button\"\n [iconOnly]=\"true\" [disabled]=\"busy()\"\n [attr.aria-label]=\"('@ai-management:assist-popup.composer-menu-aria' | translate | async) ?? ''\">\n <ax-prefix>\n <i class=\"fa-light fa-plus ax-text-sm\" aria-hidden=\"true\"></i>\n </ax-prefix>\n <ax-dropdown-panel #composerMenu>\n <ax-button-item-list class=\"ax-min-w-56\">\n <ax-button-item [text]=\"('@ai-management:chat.upload-images' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@ai-management:chat.upload-images-aria' | translate | async) ?? ''\"\n (onClick)=\"openImagePicker(); composerMenu.close()\">\n <ax-prefix>\n <i class=\"fa-light fa-image ax-size-4 ax-text-center\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item [text]=\"('@ai-management:chat.upload-audio' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@ai-management:chat.upload-audio-aria' | translate | async) ?? ''\"\n (onClick)=\"openAudioPicker(); composerMenu.close()\">\n <ax-prefix>\n <i class=\"fa-light fa-microphone ax-size-4 ax-text-center\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item [text]=\"('@ai-management:chat.upload-documents' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@ai-management:chat.upload-documents-aria' | translate | async) ?? ''\"\n (onClick)=\"openDocumentPicker(); composerMenu.close()\">\n <ax-prefix>\n <i class=\"fa-light fa-paperclip ax-size-4 ax-text-center\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n <ax-button class=\"axm-ai-assist-prompt-bottom-panel__send axm-ai-assist-prompt-bottom-panel__send-gradient\"\n color=\"primary\" type=\"button\" [disabled]=\"busy() || !canSend()\" [text]=\"\n busy()\n ? (('@ai-management:assist-popup.generating' | translate | async) ?? '')\n : (('@ai-management:assist-popup.generate' | translate | async) ?? '')\n \" (onClick)=\"onSend()\"></ax-button>\n </div>\n </div>\n</div>", styles: [".axm-ai-assist-prompt-bottom-panel-shell{pointer-events:none;box-sizing:border-box;inset:0;width:100%;max-height:100%;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;padding-left:max(.75rem,env(safe-area-inset-left,0px));padding-right:max(.75rem,env(safe-area-inset-right,0px));padding-bottom:max(.75rem,env(safe-area-inset-bottom,0px));padding-top:max(.5rem,env(safe-area-inset-top,0px))}.axm-ai-assist-prompt-bottom-panel-shell .ax-overlay-pane{pointer-events:auto;border-style:none;background-color:transparent;flex:0 0 auto;width:auto!important;max-width:calc(100vw - 1.5rem);min-width:min(480px,100vw - 1.5rem)}.axm-ai-assist-prompt-bottom-panel{--axm-ai-assist-prompt-chrome-gradient: linear-gradient(125deg, rgb(var(--ax-sys-color-primary-200)) 0%, rgb(var(--ax-sys-color-primary-400)) 48%, rgb(var(--ax-sys-color-primary-300)) 100%);--axm-ai-assist-prompt-send-gradient: linear-gradient(90deg, rgb(var(--ax-sys-color-primary-500)), rgb(var(--ax-sys-color-primary-700)));box-sizing:border-box;margin:0;max-height:min(78vh,620px);overflow:hidden;padding:.65rem .7rem .7rem;border-radius:1.35rem;background:var(--axm-ai-assist-prompt-chrome-gradient);box-shadow:0 18px 50px -12px rgba(var(--ax-sys-color-on-surface),.12),0 8px 20px -8px rgba(var(--ax-sys-color-primary-400),.2)}.ax-dark .axm-ai-assist-prompt-bottom-panel,.dark .axm-ai-assist-prompt-bottom-panel{--axm-ai-assist-prompt-chrome-gradient: linear-gradient(125deg, rgb(var(--ax-sys-color-primary-600)) 0%, rgb(var(--ax-sys-color-primary-500)) 48%, rgb(var(--ax-sys-color-primary-400)) 100%);box-shadow:0 20px 55px -14px rgba(var(--ax-sys-color-dark),.48),0 8px 24px -8px rgba(var(--ax-sys-color-primary-400),.26)}.axm-ai-assist-prompt-bottom-panel__brand-title{font-size:.72rem;line-height:1.25;font-weight:600;letter-spacing:.01em;color:rgb(var(--ax-sys-color-on-surface))}.ax-dark .axm-ai-assist-prompt-bottom-panel__brand-title{color:rgb(var(--ax-sys-color-on-lightest-surface))}.axm-ai-assist-prompt-bottom-panel__brand-mark{display:inline-flex;width:1.65rem;height:1.65rem;flex-shrink:0;align-items:center;justify-content:center;border-radius:9999px;font-size:.75rem;line-height:1;color:rgb(var(--ax-sys-color-on-primary-surface));background:linear-gradient(145deg,rgb(var(--ax-sys-color-primary-500)),rgb(var(--ax-sys-color-primary-700)));box-shadow:0 2px 8px rgba(var(--ax-sys-color-primary-500),.35)}.axm-ai-assist-prompt-bottom-panel__sheet{flex:1 1 auto;min-height:0;padding:.65rem .65rem .55rem;border-radius:1rem;background:rgb(var(--ax-sys-color-lightest-surface));border:1px solid rgba(var(--ax-sys-color-neutral-300),.35);box-shadow:inset 0 1px rgba(var(--ax-sys-color-lightest-surface),.95)}.ax-dark .axm-ai-assist-prompt-bottom-panel__sheet{background:rgb(var(--ax-sys-color-neutral-800));border-color:rgba(var(--ax-sys-color-neutral-500),.4);box-shadow:inset 0 1px rgba(var(--ax-sys-color-lightest-surface),.06)}.axm-ai-assist-prompt-bottom-panel__body{overflow-y:auto;min-height:0;flex:1 1 auto}.axm-ai-assist-prompt-bottom-panel__prompt-input{display:block;width:100%;min-height:0;border:none!important;box-shadow:none!important;background:transparent!important}.axm-ai-assist-prompt-bottom-panel__prompt-input:focus-within{outline:none!important;border:none!important;box-shadow:none!important}.axm-ai-assist-prompt-bottom-panel__prompt-input:focus-within>*{border:none!important;box-shadow:none!important;outline:none!important}.axm-ai-assist-prompt-bottom-panel__prompt-input textarea{min-height:4.5rem;max-height:min(30vh,240px);font-size:.8125rem;line-height:1.45;padding-block:.55rem;padding-inline:.65rem;border-radius:.65rem;border:none!important;box-shadow:none!important;background:transparent!important}.axm-ai-assist-prompt-bottom-panel__prompt-input textarea:focus,.axm-ai-assist-prompt-bottom-panel__prompt-input textarea:focus-visible,.axm-ai-assist-prompt-bottom-panel__prompt-input textarea:active{outline:none!important;outline-offset:0!important;border:none!important;box-shadow:none!important}.ax-dark .axm-ai-assist-prompt-bottom-panel__prompt-input textarea{color:rgb(var(--ax-sys-color-on-lightest-surface));background:rgb(var(--ax-sys-color-neutral-900))!important}.axm-ai-assist-prompt-bottom-panel__footer{min-height:0}ax-button.axm-ai-assist-prompt-bottom-panel__menu-trigger{--ax-comp-button-normal-bg-color: 0, 0, 0, 0 !important;--ax-comp-button-hover-bg-color: 0, 0, 0, 0 !important;--ax-comp-button-pressed-bg-color: 0, 0, 0, 0 !important;--ax-comp-button-border-width: 0 !important;border-radius:9999px!important;overflow:hidden;background:transparent!important;border-color:transparent!important}ax-button.axm-ai-assist-prompt-bottom-panel__menu-trigger:hover:not(.ax-state-disabled,.ax-state-loading,.ax-state-selected),ax-button.axm-ai-assist-prompt-bottom-panel__menu-trigger:active:not(.ax-state-disabled,.ax-state-loading,.ax-state-selected){background:transparent!important;background-color:transparent!important;border-color:transparent!important}ax-button.axm-ai-assist-prompt-bottom-panel__menu-trigger>button{width:2.25rem;height:2.25rem;min-width:2.25rem;min-height:2.25rem;padding:0!important;border-radius:9999px!important;border:none!important;color:rgb(var(--ax-sys-color-on-primary-surface))!important;background:linear-gradient(145deg,rgb(var(--ax-sys-color-primary-500)),rgb(var(--ax-sys-color-primary-700)))!important;box-shadow:0 2px 8px rgba(var(--ax-sys-color-primary-500),.35)}ax-button.axm-ai-assist-prompt-bottom-panel__menu-trigger.ax-state-disabled>button,ax-button.axm-ai-assist-prompt-bottom-panel__menu-trigger.ax-state-loading>button,ax-button.axm-ai-assist-prompt-bottom-panel__menu-trigger>button:disabled{opacity:.55;box-shadow:none}ax-button.axm-ai-assist-prompt-bottom-panel__send-gradient{--ax-comp-button-normal-bg-color: 0, 0, 0, 0 !important;--ax-comp-button-hover-bg-color: 0, 0, 0, 0 !important;--ax-comp-button-pressed-bg-color: 0, 0, 0, 0 !important;--ax-comp-button-border-width: 0 !important;border-radius:9999px!important;overflow:hidden;background:transparent!important;border-color:transparent!important}ax-button.axm-ai-assist-prompt-bottom-panel__send-gradient:hover:not(.ax-state-disabled,.ax-state-loading,.ax-state-selected),ax-button.axm-ai-assist-prompt-bottom-panel__send-gradient:active:not(.ax-state-disabled,.ax-state-loading,.ax-state-selected){background:transparent!important;background-color:transparent!important;border-color:transparent!important}ax-button.axm-ai-assist-prompt-bottom-panel__send-gradient>button{min-height:2.25rem;padding-inline:1rem!important;font-size:.8rem;font-weight:600;letter-spacing:.01em;border-radius:9999px!important;border:none!important;color:rgb(var(--ax-sys-color-on-primary-surface))!important;background:var(--axm-ai-assist-prompt-send-gradient)!important;box-shadow:0 3px 12px rgba(var(--ax-sys-color-secondary-400),.35)}ax-button.axm-ai-assist-prompt-bottom-panel__send-gradient.ax-state-disabled>button,ax-button.axm-ai-assist-prompt-bottom-panel__send-gradient.ax-state-loading>button,ax-button.axm-ai-assist-prompt-bottom-panel__send-gradient>button:disabled{opacity:.55;box-shadow:none}ax-button.axm-ai-assist-prompt-bottom-panel__menu-trigger:hover:not(.ax-state-disabled,.ax-state-loading,.ax-state-selected)>button{filter:brightness(.94)}ax-button.axm-ai-assist-prompt-bottom-panel__menu-trigger:active:not(.ax-state-disabled,.ax-state-loading,.ax-state-selected)>button{filter:brightness(.88)}ax-button.axm-ai-assist-prompt-bottom-panel__send-gradient:hover:not(.ax-state-disabled,.ax-state-loading,.ax-state-selected)>button{filter:brightness(.96)}ax-button.axm-ai-assist-prompt-bottom-panel__send-gradient:active:not(.ax-state-disabled,.ax-state-loading,.ax-state-selected)>button{filter:brightness(.9)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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: 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: AXDecoratorModule }, { kind: "component", type: i3.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: AXDropdownModule }, { kind: "component", type: i4.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "ngmodule", type: AXTextAreaModule }, { kind: "component", type: i5.AXTextAreaComponent, selector: "ax-text-area", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "placeholder", "maxLength", "look", "rows", "allowResize", "showCounter", "class"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
2388
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAiAssistPromptBoxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2389
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMAiAssistPromptBoxComponent, isStandalone: true, selector: "axm-ai-assist-prompt-box", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, initialPrompt: { classPropertyName: "initialPrompt", publicName: "initialPrompt", isSignal: true, isRequired: false, transformFunction: null }, contentMaxWidthPx: { classPropertyName: "contentMaxWidthPx", publicName: "contentMaxWidthPx", isSignal: true, isRequired: false, transformFunction: null }, initialAssistId: { classPropertyName: "initialAssistId", publicName: "initialAssistId", isSignal: true, isRequired: false, transformFunction: null }, initialDirectAgentId: { classPropertyName: "initialDirectAgentId", publicName: "initialDirectAgentId", isSignal: true, isRequired: false, transformFunction: null }, runPrompt: { classPropertyName: "runPrompt", publicName: "runPrompt", isSignal: true, isRequired: true, transformFunction: null }, requestClose: { classPropertyName: "requestClose", publicName: "requestClose", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "document:keydown.escape": "onDocumentEscape()" } }, ngImport: i0, template: "<div class=\"axm-ai-assist-prompt-box ax-flex ax-flex-col ax-gap-2.5 ax-min-h-0 ax-w-full\"\n [style.max-width.px]=\"contentMaxWidthPx()\">\n <div\n class=\"axm-ai-assist-prompt-box__eyebrow ax-flex ax-items-center ax-justify-between ax-gap-3 ax-shrink-0 ax-px-0.5\">\n <div class=\"axm-ai-assist-prompt-box__brand ax-inline-flex ax-min-w-0 ax-items-center ax-gap-2\">\n <span class=\"axm-ai-assist-prompt-box__brand-mark\" aria-hidden=\"true\">\n <i class=\"fa-light fa-sparkles\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"axm-ai-assist-prompt-box__brand-title ax-truncate\">{{ title() }}</span>\n </div>\n <ax-button class=\"ax-shrink-0 ax-xs\" look=\"blank\" color=\"default\" type=\"button\" [iconOnly]=\"true\"\n [disabled]=\"busy()\" [attr.aria-label]=\"('@general:actions.close.title' | translate | async) ?? ''\"\n (onClick)=\"onCancel()\">\n <ax-prefix>\n <i class=\"fa-light fa-xmark\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button>\n </div>\n\n <div class=\"axm-ai-assist-prompt-box__sheet ax-flex ax-min-h-0 ax-flex-col ax-gap-2\">\n @if (\n draftComposerImages().length > 0 ||\n draftComposerAudios().length > 0 ||\n draftComposerFiles().length > 0 ||\n isComposerSaving()\n ) {\n <div\n class=\"ax-shrink-0 ax-rounded-xl ax-border ax-border-default/45 dark:ax-border-darker ax-bg-lightest/90 ax-p-1.5 ax-flex ax-flex-col ax-gap-1.5\"\n [attr.aria-label]=\"('@ai-management:chat.composer-attachments-region' | translate | async) ?? ''\">\n <div class=\"ax-flex ax-flex-wrap ax-items-center ax-justify-between ax-gap-1.5 ax-text-[0.65rem] ax-text-muted\">\n <span>\n @if (isComposerSaving()) {\n {{ '@ai-management:chat.composer-uploading' | translate | async }}\n } @else {\n @if (draftComposerImages().length > 0) {\n <span>{{ draftComposerImages().length }}\n {{ '@ai-management:chat.composer-images-count' | translate | async }}</span>\n }\n @if (draftComposerImages().length > 0 && draftComposerAudios().length > 0) {\n <span class=\"ax-mx-1\">\u00B7</span>\n }\n @if (draftComposerAudios().length > 0) {\n <span>{{ draftComposerAudios().length }}\n {{ '@ai-management:chat.composer-audio-count' | translate | async }}</span>\n }\n @if (draftComposerFiles().length > 0) {\n @if (draftComposerImages().length > 0 || draftComposerAudios().length > 0) {\n <span class=\"ax-mx-1\">\u00B7</span>\n }\n <span>{{ draftComposerFiles().length }}\n {{ '@ai-management:chat.composer-documents-count' | translate | async }}</span>\n }\n }\n </span>\n </div>\n @if (draftComposerImages().length > 0) {\n <div class=\"ax-flex ax-flex-wrap ax-gap-1.5\">\n @for (slot of draftComposerImages(); track slot.clientId) {\n <div\n class=\"ax-relative ax-h-12 ax-w-12 ax-shrink-0 ax-overflow-hidden ax-rounded-md ax-border ax-border-default/60 dark:ax-border-darker ax-bg-lightest\">\n <img [src]=\"slot.previewUrl\" [alt]=\"slot.name ?? ''\" class=\"ax-h-full ax-w-full ax-object-cover\" />\n @if (!slot.fileId) {\n <span\n class=\"ax-absolute ax-inset-0 ax-flex ax-items-center ax-justify-center ax-bg-default/40 ax-text-[0.6rem] ax-font-medium ax-text-on-lightest\">\u2026</span>\n }\n <button type=\"button\"\n class=\"ax-absolute ax-end-0.5 ax-top-0.5 ax-flex ax-h-4 ax-w-4 ax-items-center ax-justify-center ax-rounded ax-bg-default/80 ax-text-[0.65rem] ax-leading-none ax-text-on-lightest hover:ax-bg-default focus-visible:ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-400\"\n [disabled]=\"busy() || isComposerSaving()\"\n [attr.aria-label]=\"('@ai-management:chat.remove-draft-image' | translate | async) ?? ''\"\n (click)=\"removeDraftImage(slot.clientId)\">\n \u00D7\n </button>\n </div>\n }\n </div>\n }\n @if (draftComposerAudios().length > 0) {\n <div class=\"ax-flex ax-flex-col ax-gap-1\">\n @for (slot of draftComposerAudios(); track slot.clientId) {\n <div\n class=\"ax-flex ax-items-center ax-justify-between ax-gap-1.5 ax-rounded ax-border ax-border-default/60 dark:ax-border-darker ax-bg-lightest ax-px-1.5 ax-py-1 ax-text-[0.65rem] ax-min-w-0\">\n <span class=\"ax-truncate ax-text-on-lightest\" [attr.title]=\"slot.name ?? ''\">\n {{ '@ai-management:chat.attached-audio-label' | translate | async }}:\n {{ slot.name?.trim() || ('@ai-management:chat.audio-untitled' | translate | async) }}\n </span>\n @if (!slot.fileId) {\n <span class=\"ax-text-muted ax-shrink-0\">\u2026</span>\n }\n <button type=\"button\"\n class=\"ax-shrink-0 ax-flex ax-h-5 ax-w-5 ax-items-center ax-justify-center ax-rounded ax-bg-default/80 ax-text-[0.75rem] ax-leading-none ax-text-on-lightest hover:ax-bg-default focus-visible:ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-400\"\n [disabled]=\"busy() || isComposerSaving()\"\n [attr.aria-label]=\"('@ai-management:chat.remove-draft-audio' | translate | async) ?? ''\"\n (click)=\"removeDraftAudio(slot.clientId)\">\n \u00D7\n </button>\n </div>\n }\n </div>\n }\n @if (draftComposerFiles().length > 0) {\n <div class=\"ax-flex ax-flex-col ax-gap-1\">\n @for (slot of draftComposerFiles(); track slot.clientId) {\n <div\n class=\"ax-flex ax-items-center ax-justify-between ax-gap-1.5 ax-rounded ax-border ax-border-default/60 dark:ax-border-darker ax-bg-lightest ax-px-1.5 ax-py-1 ax-text-[0.65rem] ax-min-w-0\">\n <span class=\"ax-truncate ax-text-on-lightest\" [attr.title]=\"slot.name ?? ''\">\n {{ '@ai-management:chat.attached-document-label' | translate | async }}:\n {{ slot.name?.trim() || ('@ai-management:chat.document-untitled' | translate | async) }}\n </span>\n @if (!slot.fileId) {\n <span class=\"ax-text-muted ax-shrink-0\">\u2026</span>\n }\n <button type=\"button\"\n class=\"ax-shrink-0 ax-flex ax-h-5 ax-w-5 ax-items-center ax-justify-center ax-rounded ax-bg-default/80 ax-text-[0.75rem] ax-leading-none ax-text-on-lightest hover:ax-bg-default focus-visible:ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-400\"\n [disabled]=\"busy() || isComposerSaving()\"\n [attr.aria-label]=\"('@ai-management:chat.remove-draft-document' | translate | async) ?? ''\"\n (click)=\"removeDraftFile(slot.clientId)\">\n \u00D7\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <div class=\"axm-ai-assist-prompt-box__body ax-flex ax-min-h-0 ax-flex-col\">\n <ax-text-area class=\"axm-ai-assist-prompt-box__prompt-input ax-w-full ax-min-h-0\" [rows]=\"3\"\n [disabled]=\"busy()\" [ngModel]=\"promptDraft()\" (ngModelChange)=\"onPromptDraftChange($event)\"\n (keydown)=\"onPromptKeydown($event)\" [placeholder]=\"\n placeholder().trim().length > 0\n ? placeholder()\n : ((('@ai-management:assist-popup.placeholder' | translate | async) ?? ''))\n \"></ax-text-area>\n </div>\n\n <div\n class=\"axm-ai-assist-prompt-box__footer ax-flex ax-shrink-0 ax-items-center ax-justify-between ax-gap-2\">\n <ax-button class=\"axm-ai-assist-prompt-box__menu-trigger\" look=\"solid\" color=\"primary\" type=\"button\"\n [iconOnly]=\"true\" [disabled]=\"busy()\"\n [attr.aria-label]=\"('@ai-management:assist-popup.composer-menu-aria' | translate | async) ?? ''\">\n <ax-prefix>\n <i class=\"fa-light fa-plus ax-text-sm\" aria-hidden=\"true\"></i>\n </ax-prefix>\n <ax-dropdown-panel #composerMenu>\n <ax-button-item-list class=\"ax-min-w-56\">\n <ax-button-item [text]=\"('@ai-management:chat.upload-images' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@ai-management:chat.upload-images-aria' | translate | async) ?? ''\"\n (onClick)=\"openImagePicker(); composerMenu.close()\">\n <ax-prefix>\n <i class=\"fa-light fa-image ax-size-4 ax-text-center\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item [text]=\"('@ai-management:chat.upload-audio' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@ai-management:chat.upload-audio-aria' | translate | async) ?? ''\"\n (onClick)=\"openAudioPicker(); composerMenu.close()\">\n <ax-prefix>\n <i class=\"fa-light fa-microphone ax-size-4 ax-text-center\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item [text]=\"('@ai-management:chat.upload-documents' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@ai-management:chat.upload-documents-aria' | translate | async) ?? ''\"\n (onClick)=\"openDocumentPicker(); composerMenu.close()\">\n <ax-prefix>\n <i class=\"fa-light fa-paperclip ax-size-4 ax-text-center\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n <ax-button class=\"axm-ai-assist-prompt-box__send axm-ai-assist-prompt-box__send-gradient\"\n color=\"primary\" type=\"button\" [disabled]=\"busy() || !canSend()\" [text]=\"\n busy()\n ? (('@ai-management:assist-popup.generating' | translate | async) ?? '')\n : (('@ai-management:assist-popup.generate' | translate | async) ?? '')\n \" (onClick)=\"onSend()\"></ax-button>\n </div>\n </div>\n</div>", styles: [".axm-ai-assist-prompt-box-shell{pointer-events:none;box-sizing:border-box;inset:0;width:100%;max-height:100%;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;padding-left:max(.75rem,env(safe-area-inset-left,0px));padding-right:max(.75rem,env(safe-area-inset-right,0px));padding-bottom:max(.75rem,env(safe-area-inset-bottom,0px));padding-top:max(.5rem,env(safe-area-inset-top,0px))}.axm-ai-assist-prompt-box-shell .ax-overlay-pane{pointer-events:auto;border-style:none;background-color:transparent;flex:0 0 auto;width:auto!important;max-width:calc(100vw - 1.5rem);min-width:min(480px,100vw - 1.5rem)}.axm-ai-assist-prompt-box{--axm-ai-assist-prompt-chrome-gradient: linear-gradient(125deg, rgb(var(--ax-sys-color-primary-200)) 0%, rgb(var(--ax-sys-color-primary-400)) 48%, rgb(var(--ax-sys-color-primary-300)) 100%);--axm-ai-assist-prompt-send-gradient: linear-gradient(90deg, rgb(var(--ax-sys-color-primary-500)), rgb(var(--ax-sys-color-primary-700)));box-sizing:border-box;margin:0;max-height:min(78vh,620px);overflow:hidden;padding:.65rem .7rem .7rem;border-radius:1.35rem;background:var(--axm-ai-assist-prompt-chrome-gradient);box-shadow:0 18px 50px -12px rgba(var(--ax-sys-color-on-surface),.12),0 8px 20px -8px rgba(var(--ax-sys-color-primary-400),.2)}.ax-dark .axm-ai-assist-prompt-box,.dark .axm-ai-assist-prompt-box{--axm-ai-assist-prompt-chrome-gradient: linear-gradient(125deg, rgb(var(--ax-sys-color-primary-600)) 0%, rgb(var(--ax-sys-color-primary-500)) 48%, rgb(var(--ax-sys-color-primary-400)) 100%);box-shadow:0 20px 55px -14px rgba(var(--ax-sys-color-dark),.48),0 8px 24px -8px rgba(var(--ax-sys-color-primary-400),.26)}.axm-ai-assist-prompt-box__brand-title{font-size:.72rem;line-height:1.25;font-weight:600;letter-spacing:.01em;color:rgb(var(--ax-sys-color-on-surface))}.ax-dark .axm-ai-assist-prompt-box__brand-title{color:rgb(var(--ax-sys-color-on-lightest-surface))}.axm-ai-assist-prompt-box__brand-mark{display:inline-flex;width:1.65rem;height:1.65rem;flex-shrink:0;align-items:center;justify-content:center;border-radius:9999px;font-size:.75rem;line-height:1;color:rgb(var(--ax-sys-color-on-primary-surface));background:linear-gradient(145deg,rgb(var(--ax-sys-color-primary-500)),rgb(var(--ax-sys-color-primary-700)));box-shadow:0 2px 8px rgba(var(--ax-sys-color-primary-500),.35)}.axm-ai-assist-prompt-box__sheet{flex:1 1 auto;min-height:0;padding:.65rem .65rem .55rem;border-radius:1rem;background:rgb(var(--ax-sys-color-lightest-surface));border:1px solid rgba(var(--ax-sys-color-neutral-300),.35);box-shadow:inset 0 1px rgba(var(--ax-sys-color-lightest-surface),.95)}.ax-dark .axm-ai-assist-prompt-box__sheet{background:rgb(var(--ax-sys-color-neutral-800));border-color:rgba(var(--ax-sys-color-neutral-500),.4);box-shadow:inset 0 1px rgba(var(--ax-sys-color-lightest-surface),.06)}.axm-ai-assist-prompt-box__body{overflow-y:auto;min-height:0;flex:1 1 auto}.axm-ai-assist-prompt-box__prompt-input{display:block;width:100%;min-height:0;border:none!important;box-shadow:none!important;background:transparent!important}.axm-ai-assist-prompt-box__prompt-input:focus-within{outline:none!important;border:none!important;box-shadow:none!important}.axm-ai-assist-prompt-box__prompt-input:focus-within>*{border:none!important;box-shadow:none!important;outline:none!important}.axm-ai-assist-prompt-box__prompt-input textarea{min-height:4.5rem;max-height:min(30vh,240px);font-size:.8125rem;line-height:1.45;padding-block:.55rem;padding-inline:.65rem;border-radius:.65rem;border:none!important;box-shadow:none!important;background:transparent!important}.axm-ai-assist-prompt-box__prompt-input textarea:focus,.axm-ai-assist-prompt-box__prompt-input textarea:focus-visible,.axm-ai-assist-prompt-box__prompt-input textarea:active{outline:none!important;outline-offset:0!important;border:none!important;box-shadow:none!important}.ax-dark .axm-ai-assist-prompt-box__prompt-input textarea{color:rgb(var(--ax-sys-color-on-lightest-surface));background:rgb(var(--ax-sys-color-neutral-900))!important}.axm-ai-assist-prompt-box__footer{min-height:0}ax-button.axm-ai-assist-prompt-box__menu-trigger{--ax-comp-button-normal-bg-color: 0, 0, 0, 0 !important;--ax-comp-button-hover-bg-color: 0, 0, 0, 0 !important;--ax-comp-button-pressed-bg-color: 0, 0, 0, 0 !important;--ax-comp-button-border-width: 0 !important;border-radius:9999px!important;overflow:hidden;background:transparent!important;border-color:transparent!important}ax-button.axm-ai-assist-prompt-box__menu-trigger:hover:not(.ax-state-disabled,.ax-state-loading,.ax-state-selected),ax-button.axm-ai-assist-prompt-box__menu-trigger:active:not(.ax-state-disabled,.ax-state-loading,.ax-state-selected){background:transparent!important;background-color:transparent!important;border-color:transparent!important}ax-button.axm-ai-assist-prompt-box__menu-trigger>button{width:2.25rem;height:2.25rem;min-width:2.25rem;min-height:2.25rem;padding:0!important;border-radius:9999px!important;border:none!important;color:rgb(var(--ax-sys-color-on-primary-surface))!important;background:linear-gradient(145deg,rgb(var(--ax-sys-color-primary-500)),rgb(var(--ax-sys-color-primary-700)))!important;box-shadow:0 2px 8px rgba(var(--ax-sys-color-primary-500),.35)}ax-button.axm-ai-assist-prompt-box__menu-trigger.ax-state-disabled>button,ax-button.axm-ai-assist-prompt-box__menu-trigger.ax-state-loading>button,ax-button.axm-ai-assist-prompt-box__menu-trigger>button:disabled{opacity:.55;box-shadow:none}ax-button.axm-ai-assist-prompt-box__send-gradient{--ax-comp-button-normal-bg-color: 0, 0, 0, 0 !important;--ax-comp-button-hover-bg-color: 0, 0, 0, 0 !important;--ax-comp-button-pressed-bg-color: 0, 0, 0, 0 !important;--ax-comp-button-border-width: 0 !important;border-radius:9999px!important;overflow:hidden;background:transparent!important;border-color:transparent!important}ax-button.axm-ai-assist-prompt-box__send-gradient:hover:not(.ax-state-disabled,.ax-state-loading,.ax-state-selected),ax-button.axm-ai-assist-prompt-box__send-gradient:active:not(.ax-state-disabled,.ax-state-loading,.ax-state-selected){background:transparent!important;background-color:transparent!important;border-color:transparent!important}ax-button.axm-ai-assist-prompt-box__send-gradient>button{min-height:2.25rem;padding-inline:1rem!important;font-size:.8rem;font-weight:600;letter-spacing:.01em;border-radius:9999px!important;border:none!important;color:rgb(var(--ax-sys-color-on-primary-surface))!important;background:var(--axm-ai-assist-prompt-send-gradient)!important;box-shadow:0 3px 12px rgba(var(--ax-sys-color-secondary-400),.35)}ax-button.axm-ai-assist-prompt-box__send-gradient.ax-state-disabled>button,ax-button.axm-ai-assist-prompt-box__send-gradient.ax-state-loading>button,ax-button.axm-ai-assist-prompt-box__send-gradient>button:disabled{opacity:.55;box-shadow:none}ax-button.axm-ai-assist-prompt-box__menu-trigger:hover:not(.ax-state-disabled,.ax-state-loading,.ax-state-selected)>button{filter:brightness(.94)}ax-button.axm-ai-assist-prompt-box__menu-trigger:active:not(.ax-state-disabled,.ax-state-loading,.ax-state-selected)>button{filter:brightness(.88)}ax-button.axm-ai-assist-prompt-box__send-gradient:hover:not(.ax-state-disabled,.ax-state-loading,.ax-state-selected)>button{filter:brightness(.96)}ax-button.axm-ai-assist-prompt-box__send-gradient:active:not(.ax-state-disabled,.ax-state-loading,.ax-state-selected)>button{filter:brightness(.9)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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: 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: AXDecoratorModule }, { kind: "component", type: i3.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: AXDropdownModule }, { kind: "component", type: i4.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "ngmodule", type: AXTextAreaModule }, { kind: "component", type: i5.AXTextAreaComponent, selector: "ax-text-area", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "placeholder", "maxLength", "look", "rows", "allowResize", "showCounter", "class"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
2385
2390
  }
2386
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAiAssistPromptBottomPanelComponent, decorators: [{
2391
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAiAssistPromptBoxComponent, decorators: [{
2387
2392
  type: Component,
2388
- args: [{ selector: 'axm-ai-assist-prompt-bottom-panel', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
2393
+ args: [{ selector: 'axm-ai-assist-prompt-box', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
2389
2394
  '(document:keydown.escape)': 'onDocumentEscape()',
2390
2395
  }, imports: [
2391
2396
  CommonModule,
@@ -2396,15 +2401,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
2396
2401
  AXDropdownButtonModule,
2397
2402
  AXTextAreaModule,
2398
2403
  AXTranslationModule,
2399
- ], template: "<div class=\"axm-ai-assist-prompt-bottom-panel ax-flex ax-flex-col ax-gap-2.5 ax-min-h-0 ax-w-full\"\n [style.max-width.px]=\"contentMaxWidthPx()\">\n <div\n class=\"axm-ai-assist-prompt-bottom-panel__eyebrow ax-flex ax-items-center ax-justify-between ax-gap-3 ax-shrink-0 ax-px-0.5\">\n <div class=\"axm-ai-assist-prompt-bottom-panel__brand ax-inline-flex ax-min-w-0 ax-items-center ax-gap-2\">\n <span class=\"axm-ai-assist-prompt-bottom-panel__brand-mark\" aria-hidden=\"true\">\n <i class=\"fa-light fa-sparkles\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"axm-ai-assist-prompt-bottom-panel__brand-title ax-truncate\">{{ title() }}</span>\n </div>\n <ax-button class=\"ax-shrink-0 ax-xs\" look=\"blank\" color=\"default\" type=\"button\" [iconOnly]=\"true\"\n [disabled]=\"busy()\" [attr.aria-label]=\"('@general:actions.close.title' | translate | async) ?? ''\"\n (onClick)=\"onCancel()\">\n <ax-prefix>\n <i class=\"fa-light fa-xmark\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button>\n </div>\n\n <div class=\"axm-ai-assist-prompt-bottom-panel__sheet ax-flex ax-min-h-0 ax-flex-col ax-gap-2\">\n @if (\n draftComposerImages().length > 0 ||\n draftComposerAudios().length > 0 ||\n draftComposerFiles().length > 0 ||\n isComposerSaving()\n ) {\n <div\n class=\"ax-shrink-0 ax-rounded-xl ax-border ax-border-default/45 dark:ax-border-darker ax-bg-lightest/90 ax-p-1.5 ax-flex ax-flex-col ax-gap-1.5\"\n [attr.aria-label]=\"('@ai-management:chat.composer-attachments-region' | translate | async) ?? ''\">\n <div class=\"ax-flex ax-flex-wrap ax-items-center ax-justify-between ax-gap-1.5 ax-text-[0.65rem] ax-text-muted\">\n <span>\n @if (isComposerSaving()) {\n {{ '@ai-management:chat.composer-uploading' | translate | async }}\n } @else {\n @if (draftComposerImages().length > 0) {\n <span>{{ draftComposerImages().length }}\n {{ '@ai-management:chat.composer-images-count' | translate | async }}</span>\n }\n @if (draftComposerImages().length > 0 && draftComposerAudios().length > 0) {\n <span class=\"ax-mx-1\">\u00B7</span>\n }\n @if (draftComposerAudios().length > 0) {\n <span>{{ draftComposerAudios().length }}\n {{ '@ai-management:chat.composer-audio-count' | translate | async }}</span>\n }\n @if (draftComposerFiles().length > 0) {\n @if (draftComposerImages().length > 0 || draftComposerAudios().length > 0) {\n <span class=\"ax-mx-1\">\u00B7</span>\n }\n <span>{{ draftComposerFiles().length }}\n {{ '@ai-management:chat.composer-documents-count' | translate | async }}</span>\n }\n }\n </span>\n </div>\n @if (draftComposerImages().length > 0) {\n <div class=\"ax-flex ax-flex-wrap ax-gap-1.5\">\n @for (slot of draftComposerImages(); track slot.clientId) {\n <div\n class=\"ax-relative ax-h-12 ax-w-12 ax-shrink-0 ax-overflow-hidden ax-rounded-md ax-border ax-border-default/60 dark:ax-border-darker ax-bg-lightest\">\n <img [src]=\"slot.previewUrl\" [alt]=\"slot.name ?? ''\" class=\"ax-h-full ax-w-full ax-object-cover\" />\n @if (!slot.fileId) {\n <span\n class=\"ax-absolute ax-inset-0 ax-flex ax-items-center ax-justify-center ax-bg-default/40 ax-text-[0.6rem] ax-font-medium ax-text-on-lightest\">\u2026</span>\n }\n <button type=\"button\"\n class=\"ax-absolute ax-end-0.5 ax-top-0.5 ax-flex ax-h-4 ax-w-4 ax-items-center ax-justify-center ax-rounded ax-bg-default/80 ax-text-[0.65rem] ax-leading-none ax-text-on-lightest hover:ax-bg-default focus-visible:ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-400\"\n [disabled]=\"busy() || isComposerSaving()\"\n [attr.aria-label]=\"('@ai-management:chat.remove-draft-image' | translate | async) ?? ''\"\n (click)=\"removeDraftImage(slot.clientId)\">\n \u00D7\n </button>\n </div>\n }\n </div>\n }\n @if (draftComposerAudios().length > 0) {\n <div class=\"ax-flex ax-flex-col ax-gap-1\">\n @for (slot of draftComposerAudios(); track slot.clientId) {\n <div\n class=\"ax-flex ax-items-center ax-justify-between ax-gap-1.5 ax-rounded ax-border ax-border-default/60 dark:ax-border-darker ax-bg-lightest ax-px-1.5 ax-py-1 ax-text-[0.65rem] ax-min-w-0\">\n <span class=\"ax-truncate ax-text-on-lightest\" [attr.title]=\"slot.name ?? ''\">\n {{ '@ai-management:chat.attached-audio-label' | translate | async }}:\n {{ slot.name?.trim() || ('@ai-management:chat.audio-untitled' | translate | async) }}\n </span>\n @if (!slot.fileId) {\n <span class=\"ax-text-muted ax-shrink-0\">\u2026</span>\n }\n <button type=\"button\"\n class=\"ax-shrink-0 ax-flex ax-h-5 ax-w-5 ax-items-center ax-justify-center ax-rounded ax-bg-default/80 ax-text-[0.75rem] ax-leading-none ax-text-on-lightest hover:ax-bg-default focus-visible:ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-400\"\n [disabled]=\"busy() || isComposerSaving()\"\n [attr.aria-label]=\"('@ai-management:chat.remove-draft-audio' | translate | async) ?? ''\"\n (click)=\"removeDraftAudio(slot.clientId)\">\n \u00D7\n </button>\n </div>\n }\n </div>\n }\n @if (draftComposerFiles().length > 0) {\n <div class=\"ax-flex ax-flex-col ax-gap-1\">\n @for (slot of draftComposerFiles(); track slot.clientId) {\n <div\n class=\"ax-flex ax-items-center ax-justify-between ax-gap-1.5 ax-rounded ax-border ax-border-default/60 dark:ax-border-darker ax-bg-lightest ax-px-1.5 ax-py-1 ax-text-[0.65rem] ax-min-w-0\">\n <span class=\"ax-truncate ax-text-on-lightest\" [attr.title]=\"slot.name ?? ''\">\n {{ '@ai-management:chat.attached-document-label' | translate | async }}:\n {{ slot.name?.trim() || ('@ai-management:chat.document-untitled' | translate | async) }}\n </span>\n @if (!slot.fileId) {\n <span class=\"ax-text-muted ax-shrink-0\">\u2026</span>\n }\n <button type=\"button\"\n class=\"ax-shrink-0 ax-flex ax-h-5 ax-w-5 ax-items-center ax-justify-center ax-rounded ax-bg-default/80 ax-text-[0.75rem] ax-leading-none ax-text-on-lightest hover:ax-bg-default focus-visible:ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-400\"\n [disabled]=\"busy() || isComposerSaving()\"\n [attr.aria-label]=\"('@ai-management:chat.remove-draft-document' | translate | async) ?? ''\"\n (click)=\"removeDraftFile(slot.clientId)\">\n \u00D7\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <div class=\"axm-ai-assist-prompt-bottom-panel__body ax-flex ax-min-h-0 ax-flex-col\">\n <ax-text-area class=\"axm-ai-assist-prompt-bottom-panel__prompt-input ax-w-full ax-min-h-0\" [rows]=\"3\"\n [disabled]=\"busy()\" [ngModel]=\"promptDraft()\" (ngModelChange)=\"onPromptDraftChange($event)\" [placeholder]=\"\n placeholder().trim().length > 0\n ? placeholder()\n : ((('@ai-management:assist-popup.placeholder' | translate | async) ?? ''))\n \"></ax-text-area>\n </div>\n\n <div\n class=\"axm-ai-assist-prompt-bottom-panel__footer ax-flex ax-shrink-0 ax-items-center ax-justify-between ax-gap-2\">\n <ax-button class=\"axm-ai-assist-prompt-bottom-panel__menu-trigger\" look=\"solid\" color=\"primary\" type=\"button\"\n [iconOnly]=\"true\" [disabled]=\"busy()\"\n [attr.aria-label]=\"('@ai-management:assist-popup.composer-menu-aria' | translate | async) ?? ''\">\n <ax-prefix>\n <i class=\"fa-light fa-plus ax-text-sm\" aria-hidden=\"true\"></i>\n </ax-prefix>\n <ax-dropdown-panel #composerMenu>\n <ax-button-item-list class=\"ax-min-w-56\">\n <ax-button-item [text]=\"('@ai-management:chat.upload-images' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@ai-management:chat.upload-images-aria' | translate | async) ?? ''\"\n (onClick)=\"openImagePicker(); composerMenu.close()\">\n <ax-prefix>\n <i class=\"fa-light fa-image ax-size-4 ax-text-center\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item [text]=\"('@ai-management:chat.upload-audio' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@ai-management:chat.upload-audio-aria' | translate | async) ?? ''\"\n (onClick)=\"openAudioPicker(); composerMenu.close()\">\n <ax-prefix>\n <i class=\"fa-light fa-microphone ax-size-4 ax-text-center\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item [text]=\"('@ai-management:chat.upload-documents' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@ai-management:chat.upload-documents-aria' | translate | async) ?? ''\"\n (onClick)=\"openDocumentPicker(); composerMenu.close()\">\n <ax-prefix>\n <i class=\"fa-light fa-paperclip ax-size-4 ax-text-center\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n <ax-button class=\"axm-ai-assist-prompt-bottom-panel__send axm-ai-assist-prompt-bottom-panel__send-gradient\"\n color=\"primary\" type=\"button\" [disabled]=\"busy() || !canSend()\" [text]=\"\n busy()\n ? (('@ai-management:assist-popup.generating' | translate | async) ?? '')\n : (('@ai-management:assist-popup.generate' | translate | async) ?? '')\n \" (onClick)=\"onSend()\"></ax-button>\n </div>\n </div>\n</div>", styles: [".axm-ai-assist-prompt-bottom-panel-shell{pointer-events:none;box-sizing:border-box;inset:0;width:100%;max-height:100%;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;padding-left:max(.75rem,env(safe-area-inset-left,0px));padding-right:max(.75rem,env(safe-area-inset-right,0px));padding-bottom:max(.75rem,env(safe-area-inset-bottom,0px));padding-top:max(.5rem,env(safe-area-inset-top,0px))}.axm-ai-assist-prompt-bottom-panel-shell .ax-overlay-pane{pointer-events:auto;border-style:none;background-color:transparent;flex:0 0 auto;width:auto!important;max-width:calc(100vw - 1.5rem);min-width:min(480px,100vw - 1.5rem)}.axm-ai-assist-prompt-bottom-panel{--axm-ai-assist-prompt-chrome-gradient: linear-gradient(125deg, rgb(var(--ax-sys-color-primary-200)) 0%, rgb(var(--ax-sys-color-primary-400)) 48%, rgb(var(--ax-sys-color-primary-300)) 100%);--axm-ai-assist-prompt-send-gradient: linear-gradient(90deg, rgb(var(--ax-sys-color-primary-500)), rgb(var(--ax-sys-color-primary-700)));box-sizing:border-box;margin:0;max-height:min(78vh,620px);overflow:hidden;padding:.65rem .7rem .7rem;border-radius:1.35rem;background:var(--axm-ai-assist-prompt-chrome-gradient);box-shadow:0 18px 50px -12px rgba(var(--ax-sys-color-on-surface),.12),0 8px 20px -8px rgba(var(--ax-sys-color-primary-400),.2)}.ax-dark .axm-ai-assist-prompt-bottom-panel,.dark .axm-ai-assist-prompt-bottom-panel{--axm-ai-assist-prompt-chrome-gradient: linear-gradient(125deg, rgb(var(--ax-sys-color-primary-600)) 0%, rgb(var(--ax-sys-color-primary-500)) 48%, rgb(var(--ax-sys-color-primary-400)) 100%);box-shadow:0 20px 55px -14px rgba(var(--ax-sys-color-dark),.48),0 8px 24px -8px rgba(var(--ax-sys-color-primary-400),.26)}.axm-ai-assist-prompt-bottom-panel__brand-title{font-size:.72rem;line-height:1.25;font-weight:600;letter-spacing:.01em;color:rgb(var(--ax-sys-color-on-surface))}.ax-dark .axm-ai-assist-prompt-bottom-panel__brand-title{color:rgb(var(--ax-sys-color-on-lightest-surface))}.axm-ai-assist-prompt-bottom-panel__brand-mark{display:inline-flex;width:1.65rem;height:1.65rem;flex-shrink:0;align-items:center;justify-content:center;border-radius:9999px;font-size:.75rem;line-height:1;color:rgb(var(--ax-sys-color-on-primary-surface));background:linear-gradient(145deg,rgb(var(--ax-sys-color-primary-500)),rgb(var(--ax-sys-color-primary-700)));box-shadow:0 2px 8px rgba(var(--ax-sys-color-primary-500),.35)}.axm-ai-assist-prompt-bottom-panel__sheet{flex:1 1 auto;min-height:0;padding:.65rem .65rem .55rem;border-radius:1rem;background:rgb(var(--ax-sys-color-lightest-surface));border:1px solid rgba(var(--ax-sys-color-neutral-300),.35);box-shadow:inset 0 1px rgba(var(--ax-sys-color-lightest-surface),.95)}.ax-dark .axm-ai-assist-prompt-bottom-panel__sheet{background:rgb(var(--ax-sys-color-neutral-800));border-color:rgba(var(--ax-sys-color-neutral-500),.4);box-shadow:inset 0 1px rgba(var(--ax-sys-color-lightest-surface),.06)}.axm-ai-assist-prompt-bottom-panel__body{overflow-y:auto;min-height:0;flex:1 1 auto}.axm-ai-assist-prompt-bottom-panel__prompt-input{display:block;width:100%;min-height:0;border:none!important;box-shadow:none!important;background:transparent!important}.axm-ai-assist-prompt-bottom-panel__prompt-input:focus-within{outline:none!important;border:none!important;box-shadow:none!important}.axm-ai-assist-prompt-bottom-panel__prompt-input:focus-within>*{border:none!important;box-shadow:none!important;outline:none!important}.axm-ai-assist-prompt-bottom-panel__prompt-input textarea{min-height:4.5rem;max-height:min(30vh,240px);font-size:.8125rem;line-height:1.45;padding-block:.55rem;padding-inline:.65rem;border-radius:.65rem;border:none!important;box-shadow:none!important;background:transparent!important}.axm-ai-assist-prompt-bottom-panel__prompt-input textarea:focus,.axm-ai-assist-prompt-bottom-panel__prompt-input textarea:focus-visible,.axm-ai-assist-prompt-bottom-panel__prompt-input textarea:active{outline:none!important;outline-offset:0!important;border:none!important;box-shadow:none!important}.ax-dark .axm-ai-assist-prompt-bottom-panel__prompt-input textarea{color:rgb(var(--ax-sys-color-on-lightest-surface));background:rgb(var(--ax-sys-color-neutral-900))!important}.axm-ai-assist-prompt-bottom-panel__footer{min-height:0}ax-button.axm-ai-assist-prompt-bottom-panel__menu-trigger{--ax-comp-button-normal-bg-color: 0, 0, 0, 0 !important;--ax-comp-button-hover-bg-color: 0, 0, 0, 0 !important;--ax-comp-button-pressed-bg-color: 0, 0, 0, 0 !important;--ax-comp-button-border-width: 0 !important;border-radius:9999px!important;overflow:hidden;background:transparent!important;border-color:transparent!important}ax-button.axm-ai-assist-prompt-bottom-panel__menu-trigger:hover:not(.ax-state-disabled,.ax-state-loading,.ax-state-selected),ax-button.axm-ai-assist-prompt-bottom-panel__menu-trigger:active:not(.ax-state-disabled,.ax-state-loading,.ax-state-selected){background:transparent!important;background-color:transparent!important;border-color:transparent!important}ax-button.axm-ai-assist-prompt-bottom-panel__menu-trigger>button{width:2.25rem;height:2.25rem;min-width:2.25rem;min-height:2.25rem;padding:0!important;border-radius:9999px!important;border:none!important;color:rgb(var(--ax-sys-color-on-primary-surface))!important;background:linear-gradient(145deg,rgb(var(--ax-sys-color-primary-500)),rgb(var(--ax-sys-color-primary-700)))!important;box-shadow:0 2px 8px rgba(var(--ax-sys-color-primary-500),.35)}ax-button.axm-ai-assist-prompt-bottom-panel__menu-trigger.ax-state-disabled>button,ax-button.axm-ai-assist-prompt-bottom-panel__menu-trigger.ax-state-loading>button,ax-button.axm-ai-assist-prompt-bottom-panel__menu-trigger>button:disabled{opacity:.55;box-shadow:none}ax-button.axm-ai-assist-prompt-bottom-panel__send-gradient{--ax-comp-button-normal-bg-color: 0, 0, 0, 0 !important;--ax-comp-button-hover-bg-color: 0, 0, 0, 0 !important;--ax-comp-button-pressed-bg-color: 0, 0, 0, 0 !important;--ax-comp-button-border-width: 0 !important;border-radius:9999px!important;overflow:hidden;background:transparent!important;border-color:transparent!important}ax-button.axm-ai-assist-prompt-bottom-panel__send-gradient:hover:not(.ax-state-disabled,.ax-state-loading,.ax-state-selected),ax-button.axm-ai-assist-prompt-bottom-panel__send-gradient:active:not(.ax-state-disabled,.ax-state-loading,.ax-state-selected){background:transparent!important;background-color:transparent!important;border-color:transparent!important}ax-button.axm-ai-assist-prompt-bottom-panel__send-gradient>button{min-height:2.25rem;padding-inline:1rem!important;font-size:.8rem;font-weight:600;letter-spacing:.01em;border-radius:9999px!important;border:none!important;color:rgb(var(--ax-sys-color-on-primary-surface))!important;background:var(--axm-ai-assist-prompt-send-gradient)!important;box-shadow:0 3px 12px rgba(var(--ax-sys-color-secondary-400),.35)}ax-button.axm-ai-assist-prompt-bottom-panel__send-gradient.ax-state-disabled>button,ax-button.axm-ai-assist-prompt-bottom-panel__send-gradient.ax-state-loading>button,ax-button.axm-ai-assist-prompt-bottom-panel__send-gradient>button:disabled{opacity:.55;box-shadow:none}ax-button.axm-ai-assist-prompt-bottom-panel__menu-trigger:hover:not(.ax-state-disabled,.ax-state-loading,.ax-state-selected)>button{filter:brightness(.94)}ax-button.axm-ai-assist-prompt-bottom-panel__menu-trigger:active:not(.ax-state-disabled,.ax-state-loading,.ax-state-selected)>button{filter:brightness(.88)}ax-button.axm-ai-assist-prompt-bottom-panel__send-gradient:hover:not(.ax-state-disabled,.ax-state-loading,.ax-state-selected)>button{filter:brightness(.96)}ax-button.axm-ai-assist-prompt-bottom-panel__send-gradient:active:not(.ax-state-disabled,.ax-state-loading,.ax-state-selected)>button{filter:brightness(.9)}\n"] }]
2400
- }], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: true }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], initialPrompt: [{ type: i0.Input, args: [{ isSignal: true, alias: "initialPrompt", required: false }] }], contentMaxWidthPx: [{ type: i0.Input, args: [{ isSignal: true, alias: "contentMaxWidthPx", required: false }] }], assistPickerRows: [{ type: i0.Input, args: [{ isSignal: true, alias: "assistPickerRows", required: false }] }], agentPickerRows: [{ type: i0.Input, args: [{ isSignal: true, alias: "agentPickerRows", required: false }] }], initialAssistId: [{ type: i0.Input, args: [{ isSignal: true, alias: "initialAssistId", required: false }] }], initialDirectAgentId: [{ type: i0.Input, args: [{ isSignal: true, alias: "initialDirectAgentId", required: false }] }], runPrompt: [{ type: i0.Input, args: [{ isSignal: true, alias: "runPrompt", required: true }] }], requestClose: [{ type: i0.Input, args: [{ isSignal: true, alias: "requestClose", required: true }] }] } });
2404
+ ], template: "<div class=\"axm-ai-assist-prompt-box ax-flex ax-flex-col ax-gap-2.5 ax-min-h-0 ax-w-full\"\n [style.max-width.px]=\"contentMaxWidthPx()\">\n <div\n class=\"axm-ai-assist-prompt-box__eyebrow ax-flex ax-items-center ax-justify-between ax-gap-3 ax-shrink-0 ax-px-0.5\">\n <div class=\"axm-ai-assist-prompt-box__brand ax-inline-flex ax-min-w-0 ax-items-center ax-gap-2\">\n <span class=\"axm-ai-assist-prompt-box__brand-mark\" aria-hidden=\"true\">\n <i class=\"fa-light fa-sparkles\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"axm-ai-assist-prompt-box__brand-title ax-truncate\">{{ title() }}</span>\n </div>\n <ax-button class=\"ax-shrink-0 ax-xs\" look=\"blank\" color=\"default\" type=\"button\" [iconOnly]=\"true\"\n [disabled]=\"busy()\" [attr.aria-label]=\"('@general:actions.close.title' | translate | async) ?? ''\"\n (onClick)=\"onCancel()\">\n <ax-prefix>\n <i class=\"fa-light fa-xmark\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button>\n </div>\n\n <div class=\"axm-ai-assist-prompt-box__sheet ax-flex ax-min-h-0 ax-flex-col ax-gap-2\">\n @if (\n draftComposerImages().length > 0 ||\n draftComposerAudios().length > 0 ||\n draftComposerFiles().length > 0 ||\n isComposerSaving()\n ) {\n <div\n class=\"ax-shrink-0 ax-rounded-xl ax-border ax-border-default/45 dark:ax-border-darker ax-bg-lightest/90 ax-p-1.5 ax-flex ax-flex-col ax-gap-1.5\"\n [attr.aria-label]=\"('@ai-management:chat.composer-attachments-region' | translate | async) ?? ''\">\n <div class=\"ax-flex ax-flex-wrap ax-items-center ax-justify-between ax-gap-1.5 ax-text-[0.65rem] ax-text-muted\">\n <span>\n @if (isComposerSaving()) {\n {{ '@ai-management:chat.composer-uploading' | translate | async }}\n } @else {\n @if (draftComposerImages().length > 0) {\n <span>{{ draftComposerImages().length }}\n {{ '@ai-management:chat.composer-images-count' | translate | async }}</span>\n }\n @if (draftComposerImages().length > 0 && draftComposerAudios().length > 0) {\n <span class=\"ax-mx-1\">\u00B7</span>\n }\n @if (draftComposerAudios().length > 0) {\n <span>{{ draftComposerAudios().length }}\n {{ '@ai-management:chat.composer-audio-count' | translate | async }}</span>\n }\n @if (draftComposerFiles().length > 0) {\n @if (draftComposerImages().length > 0 || draftComposerAudios().length > 0) {\n <span class=\"ax-mx-1\">\u00B7</span>\n }\n <span>{{ draftComposerFiles().length }}\n {{ '@ai-management:chat.composer-documents-count' | translate | async }}</span>\n }\n }\n </span>\n </div>\n @if (draftComposerImages().length > 0) {\n <div class=\"ax-flex ax-flex-wrap ax-gap-1.5\">\n @for (slot of draftComposerImages(); track slot.clientId) {\n <div\n class=\"ax-relative ax-h-12 ax-w-12 ax-shrink-0 ax-overflow-hidden ax-rounded-md ax-border ax-border-default/60 dark:ax-border-darker ax-bg-lightest\">\n <img [src]=\"slot.previewUrl\" [alt]=\"slot.name ?? ''\" class=\"ax-h-full ax-w-full ax-object-cover\" />\n @if (!slot.fileId) {\n <span\n class=\"ax-absolute ax-inset-0 ax-flex ax-items-center ax-justify-center ax-bg-default/40 ax-text-[0.6rem] ax-font-medium ax-text-on-lightest\">\u2026</span>\n }\n <button type=\"button\"\n class=\"ax-absolute ax-end-0.5 ax-top-0.5 ax-flex ax-h-4 ax-w-4 ax-items-center ax-justify-center ax-rounded ax-bg-default/80 ax-text-[0.65rem] ax-leading-none ax-text-on-lightest hover:ax-bg-default focus-visible:ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-400\"\n [disabled]=\"busy() || isComposerSaving()\"\n [attr.aria-label]=\"('@ai-management:chat.remove-draft-image' | translate | async) ?? ''\"\n (click)=\"removeDraftImage(slot.clientId)\">\n \u00D7\n </button>\n </div>\n }\n </div>\n }\n @if (draftComposerAudios().length > 0) {\n <div class=\"ax-flex ax-flex-col ax-gap-1\">\n @for (slot of draftComposerAudios(); track slot.clientId) {\n <div\n class=\"ax-flex ax-items-center ax-justify-between ax-gap-1.5 ax-rounded ax-border ax-border-default/60 dark:ax-border-darker ax-bg-lightest ax-px-1.5 ax-py-1 ax-text-[0.65rem] ax-min-w-0\">\n <span class=\"ax-truncate ax-text-on-lightest\" [attr.title]=\"slot.name ?? ''\">\n {{ '@ai-management:chat.attached-audio-label' | translate | async }}:\n {{ slot.name?.trim() || ('@ai-management:chat.audio-untitled' | translate | async) }}\n </span>\n @if (!slot.fileId) {\n <span class=\"ax-text-muted ax-shrink-0\">\u2026</span>\n }\n <button type=\"button\"\n class=\"ax-shrink-0 ax-flex ax-h-5 ax-w-5 ax-items-center ax-justify-center ax-rounded ax-bg-default/80 ax-text-[0.75rem] ax-leading-none ax-text-on-lightest hover:ax-bg-default focus-visible:ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-400\"\n [disabled]=\"busy() || isComposerSaving()\"\n [attr.aria-label]=\"('@ai-management:chat.remove-draft-audio' | translate | async) ?? ''\"\n (click)=\"removeDraftAudio(slot.clientId)\">\n \u00D7\n </button>\n </div>\n }\n </div>\n }\n @if (draftComposerFiles().length > 0) {\n <div class=\"ax-flex ax-flex-col ax-gap-1\">\n @for (slot of draftComposerFiles(); track slot.clientId) {\n <div\n class=\"ax-flex ax-items-center ax-justify-between ax-gap-1.5 ax-rounded ax-border ax-border-default/60 dark:ax-border-darker ax-bg-lightest ax-px-1.5 ax-py-1 ax-text-[0.65rem] ax-min-w-0\">\n <span class=\"ax-truncate ax-text-on-lightest\" [attr.title]=\"slot.name ?? ''\">\n {{ '@ai-management:chat.attached-document-label' | translate | async }}:\n {{ slot.name?.trim() || ('@ai-management:chat.document-untitled' | translate | async) }}\n </span>\n @if (!slot.fileId) {\n <span class=\"ax-text-muted ax-shrink-0\">\u2026</span>\n }\n <button type=\"button\"\n class=\"ax-shrink-0 ax-flex ax-h-5 ax-w-5 ax-items-center ax-justify-center ax-rounded ax-bg-default/80 ax-text-[0.75rem] ax-leading-none ax-text-on-lightest hover:ax-bg-default focus-visible:ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-400\"\n [disabled]=\"busy() || isComposerSaving()\"\n [attr.aria-label]=\"('@ai-management:chat.remove-draft-document' | translate | async) ?? ''\"\n (click)=\"removeDraftFile(slot.clientId)\">\n \u00D7\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <div class=\"axm-ai-assist-prompt-box__body ax-flex ax-min-h-0 ax-flex-col\">\n <ax-text-area class=\"axm-ai-assist-prompt-box__prompt-input ax-w-full ax-min-h-0\" [rows]=\"3\"\n [disabled]=\"busy()\" [ngModel]=\"promptDraft()\" (ngModelChange)=\"onPromptDraftChange($event)\"\n (keydown)=\"onPromptKeydown($event)\" [placeholder]=\"\n placeholder().trim().length > 0\n ? placeholder()\n : ((('@ai-management:assist-popup.placeholder' | translate | async) ?? ''))\n \"></ax-text-area>\n </div>\n\n <div\n class=\"axm-ai-assist-prompt-box__footer ax-flex ax-shrink-0 ax-items-center ax-justify-between ax-gap-2\">\n <ax-button class=\"axm-ai-assist-prompt-box__menu-trigger\" look=\"solid\" color=\"primary\" type=\"button\"\n [iconOnly]=\"true\" [disabled]=\"busy()\"\n [attr.aria-label]=\"('@ai-management:assist-popup.composer-menu-aria' | translate | async) ?? ''\">\n <ax-prefix>\n <i class=\"fa-light fa-plus ax-text-sm\" aria-hidden=\"true\"></i>\n </ax-prefix>\n <ax-dropdown-panel #composerMenu>\n <ax-button-item-list class=\"ax-min-w-56\">\n <ax-button-item [text]=\"('@ai-management:chat.upload-images' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@ai-management:chat.upload-images-aria' | translate | async) ?? ''\"\n (onClick)=\"openImagePicker(); composerMenu.close()\">\n <ax-prefix>\n <i class=\"fa-light fa-image ax-size-4 ax-text-center\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item [text]=\"('@ai-management:chat.upload-audio' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@ai-management:chat.upload-audio-aria' | translate | async) ?? ''\"\n (onClick)=\"openAudioPicker(); composerMenu.close()\">\n <ax-prefix>\n <i class=\"fa-light fa-microphone ax-size-4 ax-text-center\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item [text]=\"('@ai-management:chat.upload-documents' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@ai-management:chat.upload-documents-aria' | translate | async) ?? ''\"\n (onClick)=\"openDocumentPicker(); composerMenu.close()\">\n <ax-prefix>\n <i class=\"fa-light fa-paperclip ax-size-4 ax-text-center\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n <ax-button class=\"axm-ai-assist-prompt-box__send axm-ai-assist-prompt-box__send-gradient\"\n color=\"primary\" type=\"button\" [disabled]=\"busy() || !canSend()\" [text]=\"\n busy()\n ? (('@ai-management:assist-popup.generating' | translate | async) ?? '')\n : (('@ai-management:assist-popup.generate' | translate | async) ?? '')\n \" (onClick)=\"onSend()\"></ax-button>\n </div>\n </div>\n</div>", styles: [".axm-ai-assist-prompt-box-shell{pointer-events:none;box-sizing:border-box;inset:0;width:100%;max-height:100%;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;padding-left:max(.75rem,env(safe-area-inset-left,0px));padding-right:max(.75rem,env(safe-area-inset-right,0px));padding-bottom:max(.75rem,env(safe-area-inset-bottom,0px));padding-top:max(.5rem,env(safe-area-inset-top,0px))}.axm-ai-assist-prompt-box-shell .ax-overlay-pane{pointer-events:auto;border-style:none;background-color:transparent;flex:0 0 auto;width:auto!important;max-width:calc(100vw - 1.5rem);min-width:min(480px,100vw - 1.5rem)}.axm-ai-assist-prompt-box{--axm-ai-assist-prompt-chrome-gradient: linear-gradient(125deg, rgb(var(--ax-sys-color-primary-200)) 0%, rgb(var(--ax-sys-color-primary-400)) 48%, rgb(var(--ax-sys-color-primary-300)) 100%);--axm-ai-assist-prompt-send-gradient: linear-gradient(90deg, rgb(var(--ax-sys-color-primary-500)), rgb(var(--ax-sys-color-primary-700)));box-sizing:border-box;margin:0;max-height:min(78vh,620px);overflow:hidden;padding:.65rem .7rem .7rem;border-radius:1.35rem;background:var(--axm-ai-assist-prompt-chrome-gradient);box-shadow:0 18px 50px -12px rgba(var(--ax-sys-color-on-surface),.12),0 8px 20px -8px rgba(var(--ax-sys-color-primary-400),.2)}.ax-dark .axm-ai-assist-prompt-box,.dark .axm-ai-assist-prompt-box{--axm-ai-assist-prompt-chrome-gradient: linear-gradient(125deg, rgb(var(--ax-sys-color-primary-600)) 0%, rgb(var(--ax-sys-color-primary-500)) 48%, rgb(var(--ax-sys-color-primary-400)) 100%);box-shadow:0 20px 55px -14px rgba(var(--ax-sys-color-dark),.48),0 8px 24px -8px rgba(var(--ax-sys-color-primary-400),.26)}.axm-ai-assist-prompt-box__brand-title{font-size:.72rem;line-height:1.25;font-weight:600;letter-spacing:.01em;color:rgb(var(--ax-sys-color-on-surface))}.ax-dark .axm-ai-assist-prompt-box__brand-title{color:rgb(var(--ax-sys-color-on-lightest-surface))}.axm-ai-assist-prompt-box__brand-mark{display:inline-flex;width:1.65rem;height:1.65rem;flex-shrink:0;align-items:center;justify-content:center;border-radius:9999px;font-size:.75rem;line-height:1;color:rgb(var(--ax-sys-color-on-primary-surface));background:linear-gradient(145deg,rgb(var(--ax-sys-color-primary-500)),rgb(var(--ax-sys-color-primary-700)));box-shadow:0 2px 8px rgba(var(--ax-sys-color-primary-500),.35)}.axm-ai-assist-prompt-box__sheet{flex:1 1 auto;min-height:0;padding:.65rem .65rem .55rem;border-radius:1rem;background:rgb(var(--ax-sys-color-lightest-surface));border:1px solid rgba(var(--ax-sys-color-neutral-300),.35);box-shadow:inset 0 1px rgba(var(--ax-sys-color-lightest-surface),.95)}.ax-dark .axm-ai-assist-prompt-box__sheet{background:rgb(var(--ax-sys-color-neutral-800));border-color:rgba(var(--ax-sys-color-neutral-500),.4);box-shadow:inset 0 1px rgba(var(--ax-sys-color-lightest-surface),.06)}.axm-ai-assist-prompt-box__body{overflow-y:auto;min-height:0;flex:1 1 auto}.axm-ai-assist-prompt-box__prompt-input{display:block;width:100%;min-height:0;border:none!important;box-shadow:none!important;background:transparent!important}.axm-ai-assist-prompt-box__prompt-input:focus-within{outline:none!important;border:none!important;box-shadow:none!important}.axm-ai-assist-prompt-box__prompt-input:focus-within>*{border:none!important;box-shadow:none!important;outline:none!important}.axm-ai-assist-prompt-box__prompt-input textarea{min-height:4.5rem;max-height:min(30vh,240px);font-size:.8125rem;line-height:1.45;padding-block:.55rem;padding-inline:.65rem;border-radius:.65rem;border:none!important;box-shadow:none!important;background:transparent!important}.axm-ai-assist-prompt-box__prompt-input textarea:focus,.axm-ai-assist-prompt-box__prompt-input textarea:focus-visible,.axm-ai-assist-prompt-box__prompt-input textarea:active{outline:none!important;outline-offset:0!important;border:none!important;box-shadow:none!important}.ax-dark .axm-ai-assist-prompt-box__prompt-input textarea{color:rgb(var(--ax-sys-color-on-lightest-surface));background:rgb(var(--ax-sys-color-neutral-900))!important}.axm-ai-assist-prompt-box__footer{min-height:0}ax-button.axm-ai-assist-prompt-box__menu-trigger{--ax-comp-button-normal-bg-color: 0, 0, 0, 0 !important;--ax-comp-button-hover-bg-color: 0, 0, 0, 0 !important;--ax-comp-button-pressed-bg-color: 0, 0, 0, 0 !important;--ax-comp-button-border-width: 0 !important;border-radius:9999px!important;overflow:hidden;background:transparent!important;border-color:transparent!important}ax-button.axm-ai-assist-prompt-box__menu-trigger:hover:not(.ax-state-disabled,.ax-state-loading,.ax-state-selected),ax-button.axm-ai-assist-prompt-box__menu-trigger:active:not(.ax-state-disabled,.ax-state-loading,.ax-state-selected){background:transparent!important;background-color:transparent!important;border-color:transparent!important}ax-button.axm-ai-assist-prompt-box__menu-trigger>button{width:2.25rem;height:2.25rem;min-width:2.25rem;min-height:2.25rem;padding:0!important;border-radius:9999px!important;border:none!important;color:rgb(var(--ax-sys-color-on-primary-surface))!important;background:linear-gradient(145deg,rgb(var(--ax-sys-color-primary-500)),rgb(var(--ax-sys-color-primary-700)))!important;box-shadow:0 2px 8px rgba(var(--ax-sys-color-primary-500),.35)}ax-button.axm-ai-assist-prompt-box__menu-trigger.ax-state-disabled>button,ax-button.axm-ai-assist-prompt-box__menu-trigger.ax-state-loading>button,ax-button.axm-ai-assist-prompt-box__menu-trigger>button:disabled{opacity:.55;box-shadow:none}ax-button.axm-ai-assist-prompt-box__send-gradient{--ax-comp-button-normal-bg-color: 0, 0, 0, 0 !important;--ax-comp-button-hover-bg-color: 0, 0, 0, 0 !important;--ax-comp-button-pressed-bg-color: 0, 0, 0, 0 !important;--ax-comp-button-border-width: 0 !important;border-radius:9999px!important;overflow:hidden;background:transparent!important;border-color:transparent!important}ax-button.axm-ai-assist-prompt-box__send-gradient:hover:not(.ax-state-disabled,.ax-state-loading,.ax-state-selected),ax-button.axm-ai-assist-prompt-box__send-gradient:active:not(.ax-state-disabled,.ax-state-loading,.ax-state-selected){background:transparent!important;background-color:transparent!important;border-color:transparent!important}ax-button.axm-ai-assist-prompt-box__send-gradient>button{min-height:2.25rem;padding-inline:1rem!important;font-size:.8rem;font-weight:600;letter-spacing:.01em;border-radius:9999px!important;border:none!important;color:rgb(var(--ax-sys-color-on-primary-surface))!important;background:var(--axm-ai-assist-prompt-send-gradient)!important;box-shadow:0 3px 12px rgba(var(--ax-sys-color-secondary-400),.35)}ax-button.axm-ai-assist-prompt-box__send-gradient.ax-state-disabled>button,ax-button.axm-ai-assist-prompt-box__send-gradient.ax-state-loading>button,ax-button.axm-ai-assist-prompt-box__send-gradient>button:disabled{opacity:.55;box-shadow:none}ax-button.axm-ai-assist-prompt-box__menu-trigger:hover:not(.ax-state-disabled,.ax-state-loading,.ax-state-selected)>button{filter:brightness(.94)}ax-button.axm-ai-assist-prompt-box__menu-trigger:active:not(.ax-state-disabled,.ax-state-loading,.ax-state-selected)>button{filter:brightness(.88)}ax-button.axm-ai-assist-prompt-box__send-gradient:hover:not(.ax-state-disabled,.ax-state-loading,.ax-state-selected)>button{filter:brightness(.96)}ax-button.axm-ai-assist-prompt-box__send-gradient:active:not(.ax-state-disabled,.ax-state-loading,.ax-state-selected)>button{filter:brightness(.9)}\n"] }]
2405
+ }], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: true }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], initialPrompt: [{ type: i0.Input, args: [{ isSignal: true, alias: "initialPrompt", required: false }] }], contentMaxWidthPx: [{ type: i0.Input, args: [{ isSignal: true, alias: "contentMaxWidthPx", required: false }] }], initialAssistId: [{ type: i0.Input, args: [{ isSignal: true, alias: "initialAssistId", required: false }] }], initialDirectAgentId: [{ type: i0.Input, args: [{ isSignal: true, alias: "initialDirectAgentId", required: false }] }], runPrompt: [{ type: i0.Input, args: [{ isSignal: true, alias: "runPrompt", required: true }] }], requestClose: [{ type: i0.Input, args: [{ isSignal: true, alias: "requestClose", required: true }] }] } });
2401
2406
 
2402
2407
  //#endregion
2403
2408
  //#region ---- Service ----
2404
2409
  /**
2405
- * Opens the AI assist prompt in a bottom overlay using {@link AXOverlayService} (`centered: false`, panel CSS).
2410
+ * Opens the AI assist prompt box in a bottom overlay using {@link AXOverlayService} (`centered: false`, panel CSS).
2406
2411
  */
2407
- class AXMAiAssistPromptBottomPanelService {
2412
+ class AXMAiAssistPromptBoxService {
2408
2413
  constructor() {
2409
2414
  //#region ---- Services & Dependencies ----
2410
2415
  this.overlayService = inject(AXOverlayService);
@@ -2417,9 +2422,9 @@ class AXMAiAssistPromptBottomPanelService {
2417
2422
  //#endregion
2418
2423
  //#region ---- Public Methods ----
2419
2424
  /**
2420
- * Presents the assist prompt bottom panel and resolves when the user submits, cancels, or dismisses the overlay.
2425
+ * Presents the assist prompt box and resolves when the user submits, cancels, or dismisses the overlay.
2421
2426
  */
2422
- open(options, picker, executeRun) {
2427
+ open(options, executeRun) {
2423
2428
  if (this.pendingResolve) {
2424
2429
  const superseded = this.pendingResolve;
2425
2430
  this.pendingResolve = null;
@@ -2434,11 +2439,11 @@ class AXMAiAssistPromptBottomPanelService {
2434
2439
  this.overlayRef?.dispose();
2435
2440
  };
2436
2441
  void this.overlayService
2437
- .create(AXMAiAssistPromptBottomPanelComponent, {
2442
+ .create(AXMAiAssistPromptBoxComponent, {
2438
2443
  centered: false,
2439
2444
  width: 'auto',
2440
2445
  actionSheetStyle: false,
2441
- panelClass: ['axm-ai-assist-prompt-bottom-panel-shell'],
2446
+ panelClass: ['axm-ai-assist-prompt-box-shell'],
2442
2447
  backdrop: {
2443
2448
  enabled: false,
2444
2449
  background: false,
@@ -2450,8 +2455,6 @@ class AXMAiAssistPromptBottomPanelService {
2450
2455
  title: options.title,
2451
2456
  placeholder: options.placeholder ?? '',
2452
2457
  initialPrompt: options.initialPrompt ?? '',
2453
- assistPickerRows: picker.assistPickerRows,
2454
- agentPickerRows: picker.agentPickerRows,
2455
2458
  initialAssistId: options.assistId,
2456
2459
  initialDirectAgentId: options.directAgentId,
2457
2460
  runPrompt: executeRun,
@@ -2492,10 +2495,10 @@ class AXMAiAssistPromptBottomPanelService {
2492
2495
  this.overlayRef = null;
2493
2496
  }
2494
2497
  }
2495
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAiAssistPromptBottomPanelService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2496
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAiAssistPromptBottomPanelService, providedIn: 'root' }); }
2498
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAiAssistPromptBoxService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2499
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAiAssistPromptBoxService, providedIn: 'root' }); }
2497
2500
  }
2498
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAiAssistPromptBottomPanelService, decorators: [{
2501
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAiAssistPromptBoxService, decorators: [{
2499
2502
  type: Injectable,
2500
2503
  args: [{ providedIn: 'root' }]
2501
2504
  }] });
@@ -3149,18 +3152,12 @@ class AXPAiManagerService extends AXPAiAssistService {
3149
3152
  this.entityService = inject(AXPEntityService);
3150
3153
  this.settings = inject(AXPSettingsService);
3151
3154
  this.runtimeContextBuilder = inject(AXPAiPlatformRuntimeContextBuilder);
3152
- this.assistPromptBottomPanel = inject(AXMAiAssistPromptBottomPanelService);
3155
+ this.assistPromptBox = inject(AXMAiAssistPromptBoxService);
3153
3156
  this.localeId = inject(LOCALE_ID);
3154
3157
  this.loadingDialog = inject(AXLoadingDialogService);
3155
3158
  this.assistData = this.entityService
3156
3159
  .withEntity(RootConfig.module.name, RootConfig.entities.assist.name)
3157
3160
  .data();
3158
- this.assistListData = this.entityService
3159
- .withEntity(RootConfig.module.name, RootConfig.entities.assist.name)
3160
- .data();
3161
- this.agentListData = this.entityService
3162
- .withEntity(RootConfig.module.name, RootConfig.entities.agent.name)
3163
- .data();
3164
3161
  this.modelEntityData = this.entityService
3165
3162
  .withEntity(RootConfig.module.name, RootConfig.entities.model.name)
3166
3163
  .data();
@@ -3170,53 +3167,6 @@ class AXPAiManagerService extends AXPAiAssistService {
3170
3167
  }
3171
3168
  //#endregion
3172
3169
  //#region ---- Assist catalog (frontend) ----
3173
- /**
3174
- * Maps catalog `title` (multi-language or plain string) to a single-line picker label.
3175
- */
3176
- toAssistPickerRow(row) {
3177
- const id = row.id?.trim() ?? '';
3178
- const raw = row.title ?? row.name ?? id;
3179
- const title = raw == null || raw === ''
3180
- ? id
3181
- : typeof raw === 'string'
3182
- ? raw.trim() || id
3183
- : resolveMultiLanguageString(raw, this.localeId).trim() || id;
3184
- return { id, name: row.name, title };
3185
- }
3186
- /**
3187
- * Loads assist rows for UI pickers (e.g. header menu).
3188
- */
3189
- async listAssistPickerRows() {
3190
- try {
3191
- const result = await this.assistListData.query({
3192
- skip: 0,
3193
- take: 500,
3194
- sort: [{ field: 'title', dir: 'asc' }],
3195
- });
3196
- const items = (result?.items ?? []);
3197
- return items.filter((r) => r.id?.trim()).map((r) => this.toAssistPickerRow(r));
3198
- }
3199
- catch {
3200
- return [];
3201
- }
3202
- }
3203
- /**
3204
- * Loads AiAgent catalog rows for direct specialist chat (header picker).
3205
- */
3206
- async listAgentPickerRows() {
3207
- try {
3208
- const result = await this.agentListData.query({
3209
- skip: 0,
3210
- take: 500,
3211
- sort: [{ field: 'title', dir: 'asc' }],
3212
- });
3213
- const items = (result?.items ?? []);
3214
- return items.filter((r) => r.id?.trim()).map((r) => this.toAssistPickerRow(r));
3215
- }
3216
- catch {
3217
- return [];
3218
- }
3219
- }
3220
3170
  /**
3221
3171
  * Loads the effective assist from `DefaultAssistId` (tenant setting), or the assist named `platform-assistant`.
3222
3172
  */
@@ -3356,12 +3306,8 @@ class AXPAiManagerService extends AXPAiAssistService {
3356
3306
  }
3357
3307
  /** @inheritdoc */
3358
3308
  async show(options) {
3359
- const [assistPickerRows, agentPickerRows] = await Promise.all([
3360
- this.listAssistPickerRows(),
3361
- this.listAgentPickerRows(),
3362
- ]);
3363
3309
  const runLoadingSpec = options.runLoadingDialog;
3364
- const data = await this.assistPromptBottomPanel.open(options, { assistPickerRows, agentPickerRows }, async (payload) => {
3310
+ const data = await this.assistPromptBox.open(options, async (payload) => {
3365
3311
  let progressDialog;
3366
3312
  if (runLoadingSpec) {
3367
3313
  progressDialog = this.loadingDialog.show({
@@ -4489,149 +4435,9 @@ function modelItemSupportsChatCatalogPurpose(m, purpose) {
4489
4435
  return p.includes('chat');
4490
4436
  }
4491
4437
 
4492
- //#region ---- Imports ----
4493
- //#endregion
4494
- //#region ---- Component ----
4495
- class AXMAiAssistPromptPopupComponent extends AXBasePageComponent {
4496
- constructor() {
4497
- super(...arguments);
4498
- //#region ---- Services & Dependencies ----
4499
- this.toastService = inject(AXToastService);
4500
- this.translation = inject(AXTranslationService);
4501
- //#endregion
4502
- //#region ---- State ----
4503
- this.promptDraft = signal('', ...(ngDevMode ? [{ debugName: "promptDraft" }] : /* istanbul ignore next */ []));
4504
- this.busy = signal(false, ...(ngDevMode ? [{ debugName: "busy" }] : /* istanbul ignore next */ []));
4505
- }
4506
- //#endregion
4507
- //#region ---- Lifecycle ----
4508
- ngOnInit() {
4509
- super.ngOnInit();
4510
- this.promptDraft.set(this.initialPrompt?.trim() ?? '');
4511
- }
4512
- //#endregion
4513
- //#region ---- UI Handlers ----
4514
- onPromptDraftChange(value) {
4515
- this.promptDraft.set((value ?? '').toString());
4516
- }
4517
- canSend() {
4518
- return this.promptDraft().trim().length > 0;
4519
- }
4520
- onCancel() {
4521
- this.close(null);
4522
- }
4523
- async onSend() {
4524
- const text = this.promptDraft().trim();
4525
- if (!text || !this.onSubmit) {
4526
- return;
4527
- }
4528
- this.busy.set(true);
4529
- try {
4530
- const result = await this.onSubmit(text);
4531
- this.close(result);
4532
- }
4533
- catch (err) {
4534
- const title = await this.translation.translateAsync('@general:messages.error.title');
4535
- const fallback = await this.translation.translateAsync('@ai-management:assist-popup.run-error');
4536
- const content = err instanceof Error ? err.message : fallback;
4537
- await this.toastService.show({ color: 'danger', title, content });
4538
- }
4539
- finally {
4540
- this.busy.set(false);
4541
- }
4542
- }
4543
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAiAssistPromptPopupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
4544
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: AXMAiAssistPromptPopupComponent, isStandalone: true, selector: "axm-ai-assist-prompt-popup", usesInheritance: true, ngImport: i0, template: `
4545
- <div class="ax-flex ax-flex-col ax-gap-4 ax-min-h-0">
4546
- <ax-form-field>
4547
- <ax-text-area
4548
- [rows]="6"
4549
- [disabled]="busy()"
4550
- [ngModel]="promptDraft()"
4551
- (ngModelChange)="onPromptDraftChange($event)"
4552
- [placeholder]="
4553
- placeholder && placeholder.trim().length > 0
4554
- ? placeholder
4555
- : ((('@ai-management:assist-popup.placeholder' | translate | async) ?? ''))
4556
- "
4557
- ></ax-text-area>
4558
- </ax-form-field>
4559
-
4560
- <div class="ax-flex ax-flex-wrap ax-items-center ax-justify-end ax-gap-2">
4561
- <ax-button
4562
- look="outline"
4563
- color="secondary"
4564
- type="button"
4565
- [disabled]="busy()"
4566
- [text]="('@ai-management:assist-popup.cancel' | translate | async) ?? ''"
4567
- (onClick)="onCancel()"
4568
- ></ax-button>
4569
- <ax-button
4570
- color="primary"
4571
- type="button"
4572
- [disabled]="busy() || !canSend()"
4573
- [text]="
4574
- busy()
4575
- ? (('@ai-management:assist-popup.sending' | translate | async) ?? '')
4576
- : (('@ai-management:assist-popup.send' | translate | async) ?? '')
4577
- "
4578
- (onClick)="onSend()"
4579
- ></ax-button>
4580
- </div>
4581
- </div>
4582
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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: 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: AXFormModule }, { kind: "component", type: i3$1.AXFormFieldComponent, selector: "ax-form-field", inputs: ["labelMode"] }, { kind: "ngmodule", type: AXTextAreaModule }, { kind: "component", type: i5.AXTextAreaComponent, selector: "ax-text-area", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "placeholder", "maxLength", "look", "rows", "allowResize", "showCounter", "class"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4583
- }
4584
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAiAssistPromptPopupComponent, decorators: [{
4585
- type: Component,
4586
- args: [{
4587
- selector: 'axm-ai-assist-prompt-popup',
4588
- changeDetection: ChangeDetectionStrategy.OnPush,
4589
- imports: [CommonModule, FormsModule, AXButtonModule, AXFormModule, AXTextAreaModule, AXTranslationModule],
4590
- template: `
4591
- <div class="ax-flex ax-flex-col ax-gap-4 ax-min-h-0">
4592
- <ax-form-field>
4593
- <ax-text-area
4594
- [rows]="6"
4595
- [disabled]="busy()"
4596
- [ngModel]="promptDraft()"
4597
- (ngModelChange)="onPromptDraftChange($event)"
4598
- [placeholder]="
4599
- placeholder && placeholder.trim().length > 0
4600
- ? placeholder
4601
- : ((('@ai-management:assist-popup.placeholder' | translate | async) ?? ''))
4602
- "
4603
- ></ax-text-area>
4604
- </ax-form-field>
4605
-
4606
- <div class="ax-flex ax-flex-wrap ax-items-center ax-justify-end ax-gap-2">
4607
- <ax-button
4608
- look="outline"
4609
- color="secondary"
4610
- type="button"
4611
- [disabled]="busy()"
4612
- [text]="('@ai-management:assist-popup.cancel' | translate | async) ?? ''"
4613
- (onClick)="onCancel()"
4614
- ></ax-button>
4615
- <ax-button
4616
- color="primary"
4617
- type="button"
4618
- [disabled]="busy() || !canSend()"
4619
- [text]="
4620
- busy()
4621
- ? (('@ai-management:assist-popup.sending' | translate | async) ?? '')
4622
- : (('@ai-management:assist-popup.send' | translate | async) ?? '')
4623
- "
4624
- (onClick)="onSend()"
4625
- ></ax-button>
4626
- </div>
4627
- </div>
4628
- `,
4629
- }]
4630
- }] });
4631
-
4632
4438
  /**
4633
4439
  * Generated bundle index. Do not edit.
4634
4440
  */
4635
4441
 
4636
- export { AIMANAGEMENT_CHAT_GENERATE_IMAGE_COMMAND_KEY, AIMANAGEMENT_CHAT_SYNTHESIZE_SPEECH_COMMAND_KEY, AIMANAGEMENT_CHAT_TRANSCRIBE_SPEECH_COMMAND_KEY, AIMANAGEMENT_EXTRACT_DOCUMENT_TEXT_COMMAND_KEY, AIMANAGEMENT_STRUCTURED_TEXT_COMPLETION_COMMAND_KEY, AI_AGENT_CATALOG_DATASOURCE_NAME, AI_CHAT_ATTACHMENT_CATEGORY, AI_CHAT_ATTACHMENT_REF_TYPE, AI_CHAT_GENERATED_IMAGE_REF_TYPE, AI_CHAT_GENERATED_SPEECH_REF_TYPE, AI_COMMAND_REGISTRY_CATALOG_DATASOURCE_NAME, AI_GENERATED_IMAGE_MAX_REMOTE_URL_IN_TOOL, AI_MODEL_CATALOG_DATASOURCE_NAME, AI_MODEL_IMAGE_CATALOG_DATASOURCE_NAME, AI_MODEL_SPEECH_CATALOG_DATASOURCE_NAME, AI_MODEL_TTS_CATALOG_DATASOURCE_NAME, AI_QUERY_REGISTRY_CATALOG_DATASOURCE_NAME, AXMAiAgentCatalogDataSourceDefinition, AXMAiAssistPromptBottomPanelComponent, AXMAiAssistPromptBottomPanelService, AXMAiAssistPromptPopupComponent, AXMAiCommandRegistryCatalogDataSourceDefinition, AXMAiManagementEntityProvider, AXMAiManagementMenuProvider, AXMAiManagementModule, AXMAiModelCatalogDataSourceDefinition, AXMAiQueryRegistryCatalogDataSourceDefinition, AXPAI_DELEGATED_AGENT_DEFAULT_MAX_STEPS, AXPAI_DOCUMENT_VISION_DEFAULT_USER_INSTRUCTION, AXPAI_DOCUMENT_VISION_EXTRACTION_SYSTEM, AXPAI_ENGINE_DEFAULT_MAX_STEPS, AXPAI_SUPERVISOR_AGENT_TOOL_PREFIX, AXPAiAssistChatModelCatalogService, AXPAiAssistDefaultMaxStructuredRetries, AXPAiAssistDefaultStructuredMaxTokens, AXPAiAssistService, AXPAiChatToolRunContextService, AXPAiDefaultModelPickerService, AXPAiEngine, AXPAiManagementMenuKeys, AXPAiManagementSettings, AXPAiManagerService, AXPAiPlatformRuntimeContextBuilder, AXPAiStructuredOutputError, AiManagementManifest, RootConfig, axpAiAssistInitialMessagesToTranscript, axpAiChatAgentResultMessage, axpAiChatDelegatedReflectionAssistantMessage, axpAiChatMessageGetText, axpAiChatMessageIsDelegatedReflectionExcluded, axpAiChatMessagesFromProviderAssistant, axpAiChatTextMessage, axpAiChatToolOrAgentResultBodyJson, axpAiChatToolResultBodyJson, axpAiChatToolResultMessage, axpAiChatUserMessage, axpAiCoercePlanningAssistantTextToThink, axpAiCollectDelegatedAgentOutcomeResponses, axpAiDelegatedAgentOutcomeResponsesPlainText, axpAiDelegatedAgentPromptPreview, axpAiDelegatedSubTranscriptAppendFileArtifactFromToolResults, axpAiExtractLastStoredFileArtifactFromChatMessages, axpAiExtractStoredFileArtifactFromUnknown, axpAiMergePlainAssistantTextTurn, axpAiNormalizeHandlerResultToToolBody, axpAiParseDelegatedAgentResultSegmentsFromUnknown, axpAiParseSupervisorAgentToolName, axpAiPruneAssistantPiecesToFirstToolOnly, axpAiStripAssistInitialHtmlToPlain, axpAiSupervisorAgentToolName, axpAiToolCallFromAssistantToolMessage, blobOrFileFromImageResult, getAiChatCommandLlmParametersOverride, isChatPurposeModelRow, isImagePurposeModelRow, isSpeechPurposeModelRow, isTtsPurposeModelRow, modelRowHasPurpose, normalizeAiToolCommandArgs, normalizeModelPurposes, persistAiChatAttachmentImage, persistAiGeneratedImage, persistAiGeneratedSpeech };
4442
+ export { AIMANAGEMENT_CHAT_GENERATE_IMAGE_COMMAND_KEY, AIMANAGEMENT_CHAT_SYNTHESIZE_SPEECH_COMMAND_KEY, AIMANAGEMENT_CHAT_TRANSCRIBE_SPEECH_COMMAND_KEY, AIMANAGEMENT_EXTRACT_DOCUMENT_TEXT_COMMAND_KEY, AIMANAGEMENT_STRUCTURED_TEXT_COMPLETION_COMMAND_KEY, AI_AGENT_CATALOG_DATASOURCE_NAME, AI_CHAT_ATTACHMENT_CATEGORY, AI_CHAT_ATTACHMENT_REF_TYPE, AI_CHAT_GENERATED_IMAGE_REF_TYPE, AI_CHAT_GENERATED_SPEECH_REF_TYPE, AI_COMMAND_REGISTRY_CATALOG_DATASOURCE_NAME, AI_GENERATED_IMAGE_MAX_REMOTE_URL_IN_TOOL, AI_MODEL_CATALOG_DATASOURCE_NAME, AI_MODEL_IMAGE_CATALOG_DATASOURCE_NAME, AI_MODEL_SPEECH_CATALOG_DATASOURCE_NAME, AI_MODEL_TTS_CATALOG_DATASOURCE_NAME, AI_QUERY_REGISTRY_CATALOG_DATASOURCE_NAME, AXMAiAgentCatalogDataSourceDefinition, AXMAiAssistPromptBoxComponent, AXMAiAssistPromptBoxService, AXMAiCommandRegistryCatalogDataSourceDefinition, AXMAiManagementEntityProvider, AXMAiManagementMenuProvider, AXMAiManagementModule, AXMAiModelCatalogDataSourceDefinition, AXMAiQueryRegistryCatalogDataSourceDefinition, AXPAI_DELEGATED_AGENT_DEFAULT_MAX_STEPS, AXPAI_DOCUMENT_VISION_DEFAULT_USER_INSTRUCTION, AXPAI_DOCUMENT_VISION_EXTRACTION_SYSTEM, AXPAI_ENGINE_DEFAULT_MAX_STEPS, AXPAI_SUPERVISOR_AGENT_TOOL_PREFIX, AXPAiAssistChatModelCatalogService, AXPAiAssistDefaultMaxStructuredRetries, AXPAiAssistDefaultStructuredMaxTokens, AXPAiAssistService, AXPAiChatToolRunContextService, AXPAiDefaultModelPickerService, AXPAiEngine, AXPAiManagementMenuKeys, AXPAiManagementSettings, AXPAiManagerService, AXPAiPlatformRuntimeContextBuilder, AXPAiStructuredOutputError, AiManagementManifest, RootConfig, axpAiAssistInitialMessagesToTranscript, axpAiChatAgentResultMessage, axpAiChatDelegatedReflectionAssistantMessage, axpAiChatMessageGetText, axpAiChatMessageIsDelegatedReflectionExcluded, axpAiChatMessagesFromProviderAssistant, axpAiChatTextMessage, axpAiChatToolOrAgentResultBodyJson, axpAiChatToolResultBodyJson, axpAiChatToolResultMessage, axpAiChatUserMessage, axpAiCoercePlanningAssistantTextToThink, axpAiCollectDelegatedAgentOutcomeResponses, axpAiDelegatedAgentOutcomeResponsesPlainText, axpAiDelegatedAgentPromptPreview, axpAiDelegatedSubTranscriptAppendFileArtifactFromToolResults, axpAiExtractLastStoredFileArtifactFromChatMessages, axpAiExtractStoredFileArtifactFromUnknown, axpAiMergePlainAssistantTextTurn, axpAiNormalizeHandlerResultToToolBody, axpAiParseDelegatedAgentResultSegmentsFromUnknown, axpAiParseSupervisorAgentToolName, axpAiPruneAssistantPiecesToFirstToolOnly, axpAiStripAssistInitialHtmlToPlain, axpAiSupervisorAgentToolName, axpAiToolCallFromAssistantToolMessage, blobOrFileFromImageResult, getAiChatCommandLlmParametersOverride, isChatPurposeModelRow, isImagePurposeModelRow, isSpeechPurposeModelRow, isTtsPurposeModelRow, modelRowHasPurpose, normalizeAiToolCommandArgs, normalizeModelPurposes, persistAiChatAttachmentImage, persistAiGeneratedImage, persistAiGeneratedSpeech };
4637
4443
  //# sourceMappingURL=acorex-modules-ai-management.mjs.map