@acorex-platform/module-ai-management-client 0.0.30 → 0.0.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/acorex-platform-module-ai-management-client-contracts-entities-agent.mjs +474 -0
- package/fesm2022/acorex-platform-module-ai-management-client-contracts-entities-agent.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-ai-management-client-contracts-entities-assist.mjs +583 -0
- package/fesm2022/acorex-platform-module-ai-management-client-contracts-entities-assist.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-ai-management-client-contracts-entities-mcp-server.mjs +238 -0
- package/fesm2022/acorex-platform-module-ai-management-client-contracts-entities-mcp-server.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-ai-management-client-contracts-entities-model.mjs +349 -0
- package/fesm2022/acorex-platform-module-ai-management-client-contracts-entities-model.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-ai-management-client-contracts-entities-open-ai-endpoint.mjs +203 -0
- package/fesm2022/acorex-platform-module-ai-management-client-contracts-entities-open-ai-endpoint.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-ai-management-client-contracts-entities-rule.mjs +189 -0
- package/fesm2022/acorex-platform-module-ai-management-client-contracts-entities-rule.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-ai-management-client-contracts-entities-skill.mjs +190 -0
- package/fesm2022/acorex-platform-module-ai-management-client-contracts-entities-skill.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-ai-management-client-contracts-entity-catalog-acorex-platform-module-ai-management-client-contracts-entity-catalog-DRh7A6uE.mjs +96 -0
- package/fesm2022/acorex-platform-module-ai-management-client-contracts-entity-catalog-acorex-platform-module-ai-management-client-contracts-entity-catalog-DRh7A6uE.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-ai-management-client-contracts-entity-catalog-agent.entity-Cn8yH9Eb.mjs +403 -0
- package/fesm2022/acorex-platform-module-ai-management-client-contracts-entity-catalog-agent.entity-Cn8yH9Eb.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-ai-management-client-contracts-entity-catalog-assist.entity-C5V2T4T5.mjs +512 -0
- package/fesm2022/acorex-platform-module-ai-management-client-contracts-entity-catalog-assist.entity-C5V2T4T5.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-ai-management-client-contracts-entity-catalog-mcp-server.entity-D3Q6AWZ4.mjs +167 -0
- package/fesm2022/acorex-platform-module-ai-management-client-contracts-entity-catalog-mcp-server.entity-D3Q6AWZ4.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-ai-management-client-contracts-entity-catalog-model.entity-BMAZ-ZMl.mjs +278 -0
- package/fesm2022/acorex-platform-module-ai-management-client-contracts-entity-catalog-model.entity-BMAZ-ZMl.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-ai-management-client-contracts-entity-catalog-open-ai-endpoint.entity-BcxddrrU.mjs +132 -0
- package/fesm2022/acorex-platform-module-ai-management-client-contracts-entity-catalog-open-ai-endpoint.entity-BcxddrrU.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-ai-management-client-contracts-entity-catalog-rule.entity-D_iNgAEh.mjs +118 -0
- package/fesm2022/acorex-platform-module-ai-management-client-contracts-entity-catalog-rule.entity-D_iNgAEh.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-ai-management-client-contracts-entity-catalog-skill.entity-6Ykv67zV.mjs +119 -0
- package/fesm2022/acorex-platform-module-ai-management-client-contracts-entity-catalog-skill.entity-6Ykv67zV.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-ai-management-client-contracts-entity-catalog.mjs +2 -0
- package/fesm2022/acorex-platform-module-ai-management-client-contracts-entity-catalog.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-ai-management-client-contracts.mjs +10 -1
- package/fesm2022/acorex-platform-module-ai-management-client-contracts.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-ai-management-client-local-entities.mjs +35 -0
- package/fesm2022/acorex-platform-module-ai-management-client-local-entities.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-ai-management-client.mjs +24 -49
- package/fesm2022/acorex-platform-module-ai-management-client.mjs.map +1 -1
- package/package.json +37 -1
- package/types/acorex-platform-module-ai-management-client-contracts-entities-agent.d.ts +5 -0
- package/types/acorex-platform-module-ai-management-client-contracts-entities-assist.d.ts +5 -0
- package/types/acorex-platform-module-ai-management-client-contracts-entities-mcp-server.d.ts +5 -0
- package/types/acorex-platform-module-ai-management-client-contracts-entities-model.d.ts +5 -0
- package/types/acorex-platform-module-ai-management-client-contracts-entities-open-ai-endpoint.d.ts +5 -0
- package/types/acorex-platform-module-ai-management-client-contracts-entities-rule.d.ts +5 -0
- package/types/acorex-platform-module-ai-management-client-contracts-entities-skill.d.ts +5 -0
- package/types/acorex-platform-module-ai-management-client-contracts-entity-catalog.d.ts +10 -0
- package/types/acorex-platform-module-ai-management-client-contracts.d.ts +36 -4
- package/types/acorex-platform-module-ai-management-client-local-entities.d.ts +12 -0
- package/types/acorex-platform-module-ai-management-client.d.ts +4 -9
|
@@ -13,7 +13,7 @@ import { AXPEntityService } from '@acorex-platform/framework-client/layout/entit
|
|
|
13
13
|
import { AXPCommonPermissionGroupKeys } from '@acorex-platform/module-common-client/contracts';
|
|
14
14
|
import * as i7 from '@acorex/core/translation';
|
|
15
15
|
import { resolveMultiLanguageString, AXTranslationService, AXTranslationModule } from '@acorex/core/translation';
|
|
16
|
-
import { AXPWidgetsList, AXPPlatformScope, AXPRegionalSetting, AXPFileStorageStatus } from '@acorex-platform/framework-shared/core';
|
|
16
|
+
import { AXPWidgetsList, AXPPlatformScope, AXPRegionalSetting, AXPFileStorageStatus, createRandomUuid } from '@acorex-platform/framework-shared/core';
|
|
17
17
|
import { AXLoadingDialogService } from '@acorex/components/loading-dialog';
|
|
18
18
|
import { assembleAxpAiPlatformRuntimeContext, parseAgentOutputContract, axpAiChatMessageGetText, axpAiAgentOutputContractUsesStructuredFinalize, axpAiAgentOutputContractStructuredRetryCap, axpAiChatTextMessage, resolveAgentOutputContract, AXM_AI_PLATFORM_RUNTIME_CONTEXT_DEFINITIONS, AIMANAGEMENT_CHAT_SYNTHESIZE_SPEECH_COMMAND_KEY, AIMANAGEMENT_CHAT_TRANSCRIBE_SPEECH_COMMAND_KEY, AIMANAGEMENT_CHAT_GENERATE_IMAGE_COMMAND_KEY } from '@acorex-platform/module-ai-management-client/contracts';
|
|
19
19
|
export * from '@acorex-platform/module-ai-management-client/contracts';
|
|
@@ -143,6 +143,14 @@ class AXMAiManagementMenuProvider {
|
|
|
143
143
|
priority: 3,
|
|
144
144
|
policy: aiMenuPolicy,
|
|
145
145
|
},
|
|
146
|
+
{
|
|
147
|
+
name: AXPAiManagementMenuKeys.Skills,
|
|
148
|
+
text: '@ai-management:module.menus.skills.title',
|
|
149
|
+
path: this.entityService.createPath(module.name, RootConfig.entities.skill.name),
|
|
150
|
+
icon: RootConfig.entities.skill.icon,
|
|
151
|
+
priority: 4,
|
|
152
|
+
policy: aiMenuPolicy,
|
|
153
|
+
},
|
|
146
154
|
]);
|
|
147
155
|
//#endregion
|
|
148
156
|
}
|
|
@@ -804,8 +812,6 @@ class AXMAiAssistPromptBoxComponent {
|
|
|
804
812
|
...(ngDevMode ? [{ debugName: "contentMaxWidthPx" }] : /* istanbul ignore next */ []));
|
|
805
813
|
this.initialAssistId = input(undefined, /* @ts-ignore */
|
|
806
814
|
...(ngDevMode ? [{ debugName: "initialAssistId" }] : /* istanbul ignore next */ []));
|
|
807
|
-
this.initialDirectAgentId = input(undefined, /* @ts-ignore */
|
|
808
|
-
...(ngDevMode ? [{ debugName: "initialDirectAgentId" }] : /* istanbul ignore next */ []));
|
|
809
815
|
this.runPrompt = input.required(/* @ts-ignore */
|
|
810
816
|
...(ngDevMode ? [{ debugName: "runPrompt" }] : /* istanbul ignore next */ []));
|
|
811
817
|
this.requestClose = input.required(/* @ts-ignore */
|
|
@@ -855,12 +861,8 @@ class AXMAiAssistPromptBoxComponent {
|
|
|
855
861
|
//#region ---- Lifecycle ----
|
|
856
862
|
async ngOnInit() {
|
|
857
863
|
this.promptDraft.set(this.initialPrompt().trim());
|
|
858
|
-
const d = this.initialDirectAgentId()?.trim();
|
|
859
864
|
const a = this.initialAssistId()?.trim();
|
|
860
|
-
if (
|
|
861
|
-
this.assistTargetKey.set(`agent:${d}`);
|
|
862
|
-
}
|
|
863
|
-
else if (a) {
|
|
865
|
+
if (a) {
|
|
864
866
|
this.assistTargetKey.set(`assist:${a}`);
|
|
865
867
|
}
|
|
866
868
|
else {
|
|
@@ -949,13 +951,9 @@ class AXMAiAssistPromptBoxComponent {
|
|
|
949
951
|
}
|
|
950
952
|
const key = this.assistTargetKey().trim();
|
|
951
953
|
let assistId;
|
|
952
|
-
let directAgentId;
|
|
953
954
|
if (key.startsWith('assist:')) {
|
|
954
955
|
assistId = key.slice('assist:'.length).trim() || undefined;
|
|
955
956
|
}
|
|
956
|
-
else if (key.startsWith('agent:')) {
|
|
957
|
-
directAgentId = key.slice('agent:'.length).trim() || undefined;
|
|
958
|
-
}
|
|
959
957
|
const userMediaAttachments = [
|
|
960
958
|
...draftImg.map((s) => ({
|
|
961
959
|
kind: 'image',
|
|
@@ -979,7 +977,6 @@ class AXMAiAssistPromptBoxComponent {
|
|
|
979
977
|
const payload = {
|
|
980
978
|
prompt: text,
|
|
981
979
|
assistId,
|
|
982
|
-
directAgentId,
|
|
983
980
|
userMediaAttachments,
|
|
984
981
|
};
|
|
985
982
|
this.busy.set(true);
|
|
@@ -1117,7 +1114,7 @@ class AXMAiAssistPromptBoxComponent {
|
|
|
1117
1114
|
}
|
|
1118
1115
|
let groupId = this.draftAttachmentGroupId();
|
|
1119
1116
|
if (!groupId?.trim()) {
|
|
1120
|
-
groupId =
|
|
1117
|
+
groupId = createRandomUuid();
|
|
1121
1118
|
this.draftAttachmentGroupId.set(groupId);
|
|
1122
1119
|
}
|
|
1123
1120
|
const gid = groupId.trim();
|
|
@@ -1142,7 +1139,7 @@ class AXMAiAssistPromptBoxComponent {
|
|
|
1142
1139
|
? file
|
|
1143
1140
|
: new File([file], file.name, { type: mimeType });
|
|
1144
1141
|
newSlots.push({
|
|
1145
|
-
clientId:
|
|
1142
|
+
clientId: createRandomUuid(),
|
|
1146
1143
|
previewUrl: URL.createObjectURL(file),
|
|
1147
1144
|
mimeType,
|
|
1148
1145
|
name: file.name,
|
|
@@ -1194,7 +1191,7 @@ class AXMAiAssistPromptBoxComponent {
|
|
|
1194
1191
|
}
|
|
1195
1192
|
let groupId = this.draftAttachmentGroupId();
|
|
1196
1193
|
if (!groupId?.trim()) {
|
|
1197
|
-
groupId =
|
|
1194
|
+
groupId = createRandomUuid();
|
|
1198
1195
|
this.draftAttachmentGroupId.set(groupId);
|
|
1199
1196
|
}
|
|
1200
1197
|
const gid = groupId.trim();
|
|
@@ -1219,7 +1216,7 @@ class AXMAiAssistPromptBoxComponent {
|
|
|
1219
1216
|
? file
|
|
1220
1217
|
: new File([file], file.name, { type: mimeType });
|
|
1221
1218
|
newSlots.push({
|
|
1222
|
-
clientId:
|
|
1219
|
+
clientId: createRandomUuid(),
|
|
1223
1220
|
mimeType,
|
|
1224
1221
|
name: file.name,
|
|
1225
1222
|
});
|
|
@@ -1264,7 +1261,7 @@ class AXMAiAssistPromptBoxComponent {
|
|
|
1264
1261
|
}
|
|
1265
1262
|
let groupId = this.draftAttachmentGroupId();
|
|
1266
1263
|
if (!groupId?.trim()) {
|
|
1267
|
-
groupId =
|
|
1264
|
+
groupId = createRandomUuid();
|
|
1268
1265
|
this.draftAttachmentGroupId.set(groupId);
|
|
1269
1266
|
}
|
|
1270
1267
|
const gid = groupId.trim();
|
|
@@ -1289,7 +1286,7 @@ class AXMAiAssistPromptBoxComponent {
|
|
|
1289
1286
|
? file
|
|
1290
1287
|
: new File([file], file.name, { type: mimeType });
|
|
1291
1288
|
newSlots.push({
|
|
1292
|
-
clientId:
|
|
1289
|
+
clientId: createRandomUuid(),
|
|
1293
1290
|
mimeType,
|
|
1294
1291
|
name: file.name,
|
|
1295
1292
|
});
|
|
@@ -1334,7 +1331,7 @@ class AXMAiAssistPromptBoxComponent {
|
|
|
1334
1331
|
await this.toastService.show({ color: 'warning', title: errTitle, content });
|
|
1335
1332
|
}
|
|
1336
1333
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMAiAssistPromptBoxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1337
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", 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\n class=\"axm-ai-assist-prompt-box flex flex-col gap-2.5 min-h-0 w-full\"\n [style.max-width.px]=\"contentMaxWidthPx()\"\n>\n <div\n class=\"axm-ai-assist-prompt-box__eyebrow flex items-center justify-between gap-3 shrink-0 px-0.5\"\n >\n <div\n class=\"axm-ai-assist-prompt-box__brand inline-flex min-w-0 items-center gap-2\"\n >\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 truncate\">{{\n title()\n }}</span>\n </div>\n <ax-button\n class=\"shrink-0 ax-sm\"\n look=\"blank\"\n color=\"default\"\n type=\"button\"\n [iconOnly]=\"true\"\n [disabled]=\"busy()\"\n [attr.aria-label]=\"\n ('@general:actions.close.title' | translate | async) ?? ''\n \"\n (onClick)=\"onCancel()\"\n >\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 flex min-h-0 flex-col gap-2\">\n @if (\n draftComposerImages().length > 0 ||\n draftComposerAudios().length > 0 ||\n draftComposerFiles().length > 0 ||\n isComposerSaving()\n ) {\n <div\n class=\"shrink-0 rounded-xl border border-default/45 dark:border-darker bg-lightest/90 p-1.5 flex flex-col gap-1.5\"\n [attr.aria-label]=\"\n ('@ai-management:chat.composer-attachments-region'\n | translate\n | async) ?? ''\n \"\n >\n <div\n class=\"flex flex-wrap items-center justify-between gap-1.5 text-[0.65rem] text-muted\"\n >\n <span>\n @if (isComposerSaving()) {\n {{ '@ai-management:chat.composer-uploading' | translate | async }}\n } @else {\n @if (draftComposerImages().length > 0) {\n <span\n >{{ draftComposerImages().length }}\n {{\n '@ai-management:chat.composer-images-count'\n | translate\n | async\n }}</span\n >\n }\n @if (\n draftComposerImages().length > 0 &&\n draftComposerAudios().length > 0\n ) {\n <span class=\"mx-1\">\u00B7</span>\n }\n @if (draftComposerAudios().length > 0) {\n <span\n >{{ draftComposerAudios().length }}\n {{\n '@ai-management:chat.composer-audio-count'\n | translate\n | async\n }}</span\n >\n }\n @if (draftComposerFiles().length > 0) {\n @if (\n draftComposerImages().length > 0 ||\n draftComposerAudios().length > 0\n ) {\n <span class=\"mx-1\">\u00B7</span>\n }\n <span\n >{{ draftComposerFiles().length }}\n {{\n '@ai-management:chat.composer-documents-count'\n | translate\n | async\n }}</span\n >\n }\n }\n </span>\n </div>\n @if (draftComposerImages().length > 0) {\n <div class=\"flex flex-wrap gap-1.5\">\n @for (slot of draftComposerImages(); track slot.clientId) {\n <div\n class=\"relative h-12 w-12 shrink-0 overflow-hidden rounded-md border border-default/60 dark:border-darker bg-lightest\"\n >\n <img\n [src]=\"slot.previewUrl\"\n [alt]=\"slot.name ?? ''\"\n class=\"h-full w-full object-cover\"\n />\n @if (!slot.fileId) {\n <span\n class=\"absolute inset-0 flex items-center justify-center bg-default/40 text-[0.6rem] font-medium text-on-lightest\"\n >\u2026</span\n >\n }\n <button\n type=\"button\"\n class=\"absolute end-0.5 top-0.5 flex h-4 w-4 items-center justify-center rounded bg-default/80 text-[0.65rem] leading-none text-on-lightest hover:bg-default focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-400\"\n [disabled]=\"busy() || isComposerSaving()\"\n [attr.aria-label]=\"\n ('@ai-management:chat.remove-draft-image'\n | translate\n | async) ?? ''\n \"\n (click)=\"removeDraftImage(slot.clientId)\"\n >\n \u00D7\n </button>\n </div>\n }\n </div>\n }\n @if (draftComposerAudios().length > 0) {\n <div class=\"flex flex-col gap-1\">\n @for (slot of draftComposerAudios(); track slot.clientId) {\n <div\n class=\"flex items-center justify-between gap-1.5 rounded border border-default/60 dark:border-darker bg-lightest px-1.5 py-1 text-[0.65rem] min-w-0\"\n >\n <span\n class=\"truncate text-on-lightest\"\n [attr.title]=\"slot.name ?? ''\"\n >\n {{\n '@ai-management:chat.attached-audio-label'\n | translate\n | async\n }}:\n {{\n slot.name?.trim() ||\n ('@ai-management:chat.audio-untitled' | translate | async)\n }}\n </span>\n @if (!slot.fileId) {\n <span class=\"text-muted shrink-0\">\u2026</span>\n }\n <button\n type=\"button\"\n class=\"shrink-0 flex h-5 w-5 items-center justify-center rounded bg-default/80 text-[0.75rem] leading-none text-on-lightest hover:bg-default focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-400\"\n [disabled]=\"busy() || isComposerSaving()\"\n [attr.aria-label]=\"\n ('@ai-management:chat.remove-draft-audio'\n | translate\n | async) ?? ''\n \"\n (click)=\"removeDraftAudio(slot.clientId)\"\n >\n \u00D7\n </button>\n </div>\n }\n </div>\n }\n @if (draftComposerFiles().length > 0) {\n <div class=\"flex flex-col gap-1\">\n @for (slot of draftComposerFiles(); track slot.clientId) {\n <div\n class=\"flex items-center justify-between gap-1.5 rounded border border-default/60 dark:border-darker bg-lightest px-1.5 py-1 text-[0.65rem] min-w-0\"\n >\n <span\n class=\"truncate text-on-lightest\"\n [attr.title]=\"slot.name ?? ''\"\n >\n {{\n '@ai-management:chat.attached-document-label'\n | translate\n | async\n }}:\n {{\n slot.name?.trim() ||\n ('@ai-management:chat.document-untitled'\n | translate\n | async)\n }}\n </span>\n @if (!slot.fileId) {\n <span class=\"text-muted shrink-0\">\u2026</span>\n }\n <button\n type=\"button\"\n class=\"shrink-0 flex h-5 w-5 items-center justify-center rounded bg-default/80 text-[0.75rem] leading-none text-on-lightest hover:bg-default focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-400\"\n [disabled]=\"busy() || isComposerSaving()\"\n [attr.aria-label]=\"\n ('@ai-management:chat.remove-draft-document'\n | translate\n | async) ?? ''\n \"\n (click)=\"removeDraftFile(slot.clientId)\"\n >\n \u00D7\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <div class=\"axm-ai-assist-prompt-box__body flex min-h-0 flex-col\">\n <ax-text-area\n class=\"axm-ai-assist-prompt-box__prompt-input w-full min-h-0\"\n [rows]=\"3\"\n [disabled]=\"busy()\"\n [ngModel]=\"promptDraft()\"\n (ngModelChange)=\"onPromptDraftChange($event)\"\n (keydown)=\"onPromptKeydown($event)\"\n [placeholder]=\"\n placeholder().trim().length > 0\n ? placeholder()\n : (('@ai-management:assist-popup.placeholder'\n | translate\n | async) ?? '')\n \"\n ></ax-text-area>\n </div>\n\n <div\n class=\"axm-ai-assist-prompt-box__footer flex shrink-0 items-center justify-between gap-2\"\n >\n <ax-button\n class=\"axm-ai-assist-prompt-box__menu-trigger\"\n look=\"solid\"\n color=\"primary\"\n type=\"button\"\n [iconOnly]=\"true\"\n [disabled]=\"busy()\"\n [attr.aria-label]=\"\n ('@ai-management:assist-popup.composer-menu-aria'\n | translate\n | async) ?? ''\n \"\n >\n <ax-prefix>\n <i class=\"fa-light fa-plus text-sm\" aria-hidden=\"true\"></i>\n </ax-prefix>\n <ax-dropdown-panel #composerMenu>\n <ax-button-item-list class=\"min-w-56\">\n <ax-button-item\n [text]=\"\n ('@ai-management:chat.upload-images' | translate | async) ?? ''\n \"\n [attr.aria-label]=\"\n ('@ai-management:chat.upload-images-aria'\n | translate\n | async) ?? ''\n \"\n (onClick)=\"openImagePicker(); composerMenu.close()\"\n >\n <ax-prefix>\n <i\n class=\"fa-light fa-image size-4 text-center\"\n aria-hidden=\"true\"\n ></i>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item\n [text]=\"\n ('@ai-management:chat.upload-audio' | translate | async) ?? ''\n \"\n [attr.aria-label]=\"\n ('@ai-management:chat.upload-audio-aria' | translate | async) ??\n ''\n \"\n (onClick)=\"openAudioPicker(); composerMenu.close()\"\n >\n <ax-prefix>\n <i\n class=\"fa-light fa-microphone size-4 text-center\"\n aria-hidden=\"true\"\n ></i>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item\n [text]=\"\n ('@ai-management:chat.upload-documents' | translate | async) ??\n ''\n \"\n [attr.aria-label]=\"\n ('@ai-management:chat.upload-documents-aria'\n | translate\n | async) ?? ''\n \"\n (onClick)=\"openDocumentPicker(); composerMenu.close()\"\n >\n <ax-prefix>\n <i\n class=\"fa-light fa-paperclip size-4 text-center\"\n aria-hidden=\"true\"\n ></i>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n <ax-button\n class=\"axm-ai-assist-prompt-box__send axm-ai-assist-prompt-box__send-gradient\"\n color=\"primary\"\n type=\"button\"\n [disabled]=\"busy() || !canSend()\"\n [text]=\"\n busy()\n ? (('@ai-management:assist-popup.generating' | translate | async) ??\n '')\n : (('@ai-management:assist-popup.generate' | translate | async) ??\n '')\n \"\n (onClick)=\"onSend()\"\n ></ax-button>\n </div>\n </div>\n</div>\n", styles: ["@layer properties;.axm-ai-assist-prompt-box-shell{pointer-events:none;box-sizing:border-box;inset:0;display:flex;max-height:100%;width:100%;flex-direction:column;align-items:center;justify-content:flex-end;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 .overlay-pane{pointer-events:auto;--tw-border-style: none;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-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-axm-ai-assist-prompt-send-gradient: linear-gradient( 90deg, rgb(var(--ax-sys-color-primary-500)), rgb(var(--ax-sys-color-primary-700)) );margin:0;box-sizing:border-box;overflow:hidden;padding:0;max-height:min(78vh,620px);padding:.65rem .7rem .7rem;border-radius:1.35rem;background:var(--axm-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)}.dark .axm-ai-assist-prompt-box{--axm-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 .axm-ai-assist-prompt-box__brand-title{--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);font-size:.72rem;line-height:1.25;letter-spacing:.01em;color:rgb(var(--ax-sys-color-on-surface))}.dark :is(.axm-ai-assist-prompt-box .axm-ai-assist-prompt-box__brand-title){color:rgb(var(--ax-sys-color-on-lightest-surface))}.axm-ai-assist-prompt-box .axm-ai-assist-prompt-box__brand-mark{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;border-radius:calc(infinity * 1px);width:1.65rem;height:1.65rem;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 .axm-ai-assist-prompt-box__sheet{min-height:0px;flex:auto;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)}.dark :is(.axm-ai-assist-prompt-box .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 .axm-ai-assist-prompt-box__body{min-height:0px;flex:auto;overflow-y:auto}.axm-ai-assist-prompt-box .axm-ai-assist-prompt-box__prompt-input{display:block;min-height:0px;width:100%;--tw-border-style: none !important;border-style:none!important;background-color:transparent!important;--tw-shadow: 0 0 #0000 !important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.axm-ai-assist-prompt-box .axm-ai-assist-prompt-box__prompt-input:focus-within{--tw-border-style: none !important;border-style:none!important;--tw-shadow: 0 0 #0000 !important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important;--tw-outline-style: none !important;outline-style:none!important}.axm-ai-assist-prompt-box .axm-ai-assist-prompt-box__prompt-input:focus-within>*{--tw-border-style: none !important;border-style:none!important;--tw-shadow: 0 0 #0000 !important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important;--tw-outline-style: none !important;outline-style:none!important}.axm-ai-assist-prompt-box .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;--tw-border-style: none !important;border-style:none!important;background-color:transparent!important;--tw-shadow: 0 0 #0000 !important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.axm-ai-assist-prompt-box .axm-ai-assist-prompt-box__prompt-input textarea:focus,.axm-ai-assist-prompt-box .axm-ai-assist-prompt-box__prompt-input textarea:focus-visible,.axm-ai-assist-prompt-box .axm-ai-assist-prompt-box__prompt-input textarea:active{--tw-border-style: none !important;border-style:none!important;--tw-shadow: 0 0 #0000 !important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important;--tw-outline-style: none !important;outline-style:none!important;outline-offset:0!important}.dark :is(.axm-ai-assist-prompt-box .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 .axm-ai-assist-prompt-box__footer{min-height:0}.axm-ai-assist-prompt-box 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;overflow:hidden;border-radius:calc(infinity * 1px)!important;border-color:transparent!important;background-color:transparent!important;background:transparent!important}.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__menu-trigger:hover:not(.state-disabled,.state-loading,.state-selected),.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__menu-trigger:active:not(.state-disabled,.state-loading,.state-selected){border-color:transparent!important;background-color:transparent!important}.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__menu-trigger>button{border-radius:calc(infinity * 1px)!important;--tw-border-style: none !important;border-style:none!important;padding:0!important;width:2.25rem;height:2.25rem;min-width:2.25rem;min-height:2.25rem;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)}.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__menu-trigger.ax-state-disabled>button,.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__menu-trigger.ax-state-loading>button,.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__menu-trigger>button:disabled{opacity:.55;box-shadow:none}.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__menu-trigger:hover:not(.state-disabled,.state-loading,.state-selected)>button{filter:brightness(.94)}.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__menu-trigger:active:not(.state-disabled,.state-loading,.state-selected)>button{filter:brightness(.88)}.axm-ai-assist-prompt-box 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;overflow:hidden;border-radius:calc(infinity * 1px)!important;border-color:transparent!important;background-color:transparent!important;background:transparent!important}.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__send-gradient:hover:not(.state-disabled,.state-loading,.state-selected),.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__send-gradient:active:not(.state-disabled,.state-loading,.state-selected){border-color:transparent!important;background-color:transparent!important}.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__send-gradient>button{border-radius:calc(infinity * 1px)!important;--tw-border-style: none !important;border-style:none!important;--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);min-height:2.25rem;padding-inline:1rem!important;font-size:.8rem;letter-spacing:.01em;color:rgb(var(--ax-sys-color-on-primary-surface))!important;background:var(--axm-axm-ai-assist-prompt-send-gradient)!important;box-shadow:0 3px 12px rgba(var(--ax-sys-color-secondary-400),.35)}.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__send-gradient.ax-state-disabled>button,.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__send-gradient.ax-state-loading>button,.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__send-gradient>button:disabled{opacity:.55;box-shadow:none}.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__send-gradient:hover:not(.state-disabled,.state-loading,.state-selected)>button{filter:brightness(.96)}.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__send-gradient:active:not(.state-disabled,.state-loading,.state-selected)>button{filter:brightness(.9)}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight: initial;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\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 }); }
|
|
1334
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", 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 }, 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\n class=\"axm-ai-assist-prompt-box flex flex-col gap-2.5 min-h-0 w-full\"\n [style.max-width.px]=\"contentMaxWidthPx()\"\n>\n <div\n class=\"axm-ai-assist-prompt-box__eyebrow flex items-center justify-between gap-3 shrink-0 px-0.5\"\n >\n <div\n class=\"axm-ai-assist-prompt-box__brand inline-flex min-w-0 items-center gap-2\"\n >\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 truncate\">{{\n title()\n }}</span>\n </div>\n <ax-button\n class=\"shrink-0 ax-sm\"\n look=\"blank\"\n color=\"default\"\n type=\"button\"\n [iconOnly]=\"true\"\n [disabled]=\"busy()\"\n [attr.aria-label]=\"\n ('@general:actions.close.title' | translate | async) ?? ''\n \"\n (onClick)=\"onCancel()\"\n >\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 flex min-h-0 flex-col gap-2\">\n @if (\n draftComposerImages().length > 0 ||\n draftComposerAudios().length > 0 ||\n draftComposerFiles().length > 0 ||\n isComposerSaving()\n ) {\n <div\n class=\"shrink-0 rounded-xl border border-default/45 dark:border-darker bg-lightest/90 p-1.5 flex flex-col gap-1.5\"\n [attr.aria-label]=\"\n ('@ai-management:chat.composer-attachments-region'\n | translate\n | async) ?? ''\n \"\n >\n <div\n class=\"flex flex-wrap items-center justify-between gap-1.5 text-[0.65rem] text-muted\"\n >\n <span>\n @if (isComposerSaving()) {\n {{ '@ai-management:chat.composer-uploading' | translate | async }}\n } @else {\n @if (draftComposerImages().length > 0) {\n <span\n >{{ draftComposerImages().length }}\n {{\n '@ai-management:chat.composer-images-count'\n | translate\n | async\n }}</span\n >\n }\n @if (\n draftComposerImages().length > 0 &&\n draftComposerAudios().length > 0\n ) {\n <span class=\"mx-1\">\u00B7</span>\n }\n @if (draftComposerAudios().length > 0) {\n <span\n >{{ draftComposerAudios().length }}\n {{\n '@ai-management:chat.composer-audio-count'\n | translate\n | async\n }}</span\n >\n }\n @if (draftComposerFiles().length > 0) {\n @if (\n draftComposerImages().length > 0 ||\n draftComposerAudios().length > 0\n ) {\n <span class=\"mx-1\">\u00B7</span>\n }\n <span\n >{{ draftComposerFiles().length }}\n {{\n '@ai-management:chat.composer-documents-count'\n | translate\n | async\n }}</span\n >\n }\n }\n </span>\n </div>\n @if (draftComposerImages().length > 0) {\n <div class=\"flex flex-wrap gap-1.5\">\n @for (slot of draftComposerImages(); track slot.clientId) {\n <div\n class=\"relative h-12 w-12 shrink-0 overflow-hidden rounded-md border border-default/60 dark:border-darker bg-lightest\"\n >\n <img\n [src]=\"slot.previewUrl\"\n [alt]=\"slot.name ?? ''\"\n class=\"h-full w-full object-cover\"\n />\n @if (!slot.fileId) {\n <span\n class=\"absolute inset-0 flex items-center justify-center bg-default/40 text-[0.6rem] font-medium text-on-lightest\"\n >\u2026</span\n >\n }\n <button\n type=\"button\"\n class=\"absolute end-0.5 top-0.5 flex h-4 w-4 items-center justify-center rounded bg-default/80 text-[0.65rem] leading-none text-on-lightest hover:bg-default focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-400\"\n [disabled]=\"busy() || isComposerSaving()\"\n [attr.aria-label]=\"\n ('@ai-management:chat.remove-draft-image'\n | translate\n | async) ?? ''\n \"\n (click)=\"removeDraftImage(slot.clientId)\"\n >\n \u00D7\n </button>\n </div>\n }\n </div>\n }\n @if (draftComposerAudios().length > 0) {\n <div class=\"flex flex-col gap-1\">\n @for (slot of draftComposerAudios(); track slot.clientId) {\n <div\n class=\"flex items-center justify-between gap-1.5 rounded border border-default/60 dark:border-darker bg-lightest px-1.5 py-1 text-[0.65rem] min-w-0\"\n >\n <span\n class=\"truncate text-on-lightest\"\n [attr.title]=\"slot.name ?? ''\"\n >\n {{\n '@ai-management:chat.attached-audio-label'\n | translate\n | async\n }}:\n {{\n slot.name?.trim() ||\n ('@ai-management:chat.audio-untitled' | translate | async)\n }}\n </span>\n @if (!slot.fileId) {\n <span class=\"text-muted shrink-0\">\u2026</span>\n }\n <button\n type=\"button\"\n class=\"shrink-0 flex h-5 w-5 items-center justify-center rounded bg-default/80 text-[0.75rem] leading-none text-on-lightest hover:bg-default focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-400\"\n [disabled]=\"busy() || isComposerSaving()\"\n [attr.aria-label]=\"\n ('@ai-management:chat.remove-draft-audio'\n | translate\n | async) ?? ''\n \"\n (click)=\"removeDraftAudio(slot.clientId)\"\n >\n \u00D7\n </button>\n </div>\n }\n </div>\n }\n @if (draftComposerFiles().length > 0) {\n <div class=\"flex flex-col gap-1\">\n @for (slot of draftComposerFiles(); track slot.clientId) {\n <div\n class=\"flex items-center justify-between gap-1.5 rounded border border-default/60 dark:border-darker bg-lightest px-1.5 py-1 text-[0.65rem] min-w-0\"\n >\n <span\n class=\"truncate text-on-lightest\"\n [attr.title]=\"slot.name ?? ''\"\n >\n {{\n '@ai-management:chat.attached-document-label'\n | translate\n | async\n }}:\n {{\n slot.name?.trim() ||\n ('@ai-management:chat.document-untitled'\n | translate\n | async)\n }}\n </span>\n @if (!slot.fileId) {\n <span class=\"text-muted shrink-0\">\u2026</span>\n }\n <button\n type=\"button\"\n class=\"shrink-0 flex h-5 w-5 items-center justify-center rounded bg-default/80 text-[0.75rem] leading-none text-on-lightest hover:bg-default focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-400\"\n [disabled]=\"busy() || isComposerSaving()\"\n [attr.aria-label]=\"\n ('@ai-management:chat.remove-draft-document'\n | translate\n | async) ?? ''\n \"\n (click)=\"removeDraftFile(slot.clientId)\"\n >\n \u00D7\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <div class=\"axm-ai-assist-prompt-box__body flex min-h-0 flex-col\">\n <ax-text-area\n class=\"axm-ai-assist-prompt-box__prompt-input w-full min-h-0\"\n [rows]=\"3\"\n [disabled]=\"busy()\"\n [ngModel]=\"promptDraft()\"\n (ngModelChange)=\"onPromptDraftChange($event)\"\n (keydown)=\"onPromptKeydown($event)\"\n [placeholder]=\"\n placeholder().trim().length > 0\n ? placeholder()\n : (('@ai-management:assist-popup.placeholder'\n | translate\n | async) ?? '')\n \"\n ></ax-text-area>\n </div>\n\n <div\n class=\"axm-ai-assist-prompt-box__footer flex shrink-0 items-center justify-between gap-2\"\n >\n <ax-button\n class=\"axm-ai-assist-prompt-box__menu-trigger\"\n look=\"solid\"\n color=\"primary\"\n type=\"button\"\n [iconOnly]=\"true\"\n [disabled]=\"busy()\"\n [attr.aria-label]=\"\n ('@ai-management:assist-popup.composer-menu-aria'\n | translate\n | async) ?? ''\n \"\n >\n <ax-prefix>\n <i class=\"fa-light fa-plus text-sm\" aria-hidden=\"true\"></i>\n </ax-prefix>\n <ax-dropdown-panel #composerMenu>\n <ax-button-item-list class=\"min-w-56\">\n <ax-button-item\n [text]=\"\n ('@ai-management:chat.upload-images' | translate | async) ?? ''\n \"\n [attr.aria-label]=\"\n ('@ai-management:chat.upload-images-aria'\n | translate\n | async) ?? ''\n \"\n (onClick)=\"openImagePicker(); composerMenu.close()\"\n >\n <ax-prefix>\n <i\n class=\"fa-light fa-image size-4 text-center\"\n aria-hidden=\"true\"\n ></i>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item\n [text]=\"\n ('@ai-management:chat.upload-audio' | translate | async) ?? ''\n \"\n [attr.aria-label]=\"\n ('@ai-management:chat.upload-audio-aria' | translate | async) ??\n ''\n \"\n (onClick)=\"openAudioPicker(); composerMenu.close()\"\n >\n <ax-prefix>\n <i\n class=\"fa-light fa-microphone size-4 text-center\"\n aria-hidden=\"true\"\n ></i>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item\n [text]=\"\n ('@ai-management:chat.upload-documents' | translate | async) ??\n ''\n \"\n [attr.aria-label]=\"\n ('@ai-management:chat.upload-documents-aria'\n | translate\n | async) ?? ''\n \"\n (onClick)=\"openDocumentPicker(); composerMenu.close()\"\n >\n <ax-prefix>\n <i\n class=\"fa-light fa-paperclip size-4 text-center\"\n aria-hidden=\"true\"\n ></i>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n <ax-button\n class=\"axm-ai-assist-prompt-box__send axm-ai-assist-prompt-box__send-gradient\"\n color=\"primary\"\n type=\"button\"\n [disabled]=\"busy() || !canSend()\"\n [text]=\"\n busy()\n ? (('@ai-management:assist-popup.generating' | translate | async) ??\n '')\n : (('@ai-management:assist-popup.generate' | translate | async) ??\n '')\n \"\n (onClick)=\"onSend()\"\n ></ax-button>\n </div>\n </div>\n</div>\n", styles: ["@layer properties;.axm-ai-assist-prompt-box-shell{pointer-events:none;box-sizing:border-box;inset:0;display:flex;max-height:100%;width:100%;flex-direction:column;align-items:center;justify-content:flex-end;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 .overlay-pane{pointer-events:auto;--tw-border-style: none;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-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-axm-ai-assist-prompt-send-gradient: linear-gradient( 90deg, rgb(var(--ax-sys-color-primary-500)), rgb(var(--ax-sys-color-primary-700)) );margin:0;box-sizing:border-box;overflow:hidden;padding:0;max-height:min(78vh,620px);padding:.65rem .7rem .7rem;border-radius:1.35rem;background:var(--axm-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)}.dark .axm-ai-assist-prompt-box{--axm-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 .axm-ai-assist-prompt-box__brand-title{--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);font-size:.72rem;line-height:1.25;letter-spacing:.01em;color:rgb(var(--ax-sys-color-on-surface))}.dark :is(.axm-ai-assist-prompt-box .axm-ai-assist-prompt-box__brand-title){color:rgb(var(--ax-sys-color-on-lightest-surface))}.axm-ai-assist-prompt-box .axm-ai-assist-prompt-box__brand-mark{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;border-radius:calc(infinity * 1px);width:1.65rem;height:1.65rem;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 .axm-ai-assist-prompt-box__sheet{min-height:0px;flex:auto;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)}.dark :is(.axm-ai-assist-prompt-box .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 .axm-ai-assist-prompt-box__body{min-height:0px;flex:auto;overflow-y:auto}.axm-ai-assist-prompt-box .axm-ai-assist-prompt-box__prompt-input{display:block;min-height:0px;width:100%;--tw-border-style: none !important;border-style:none!important;background-color:transparent!important;--tw-shadow: 0 0 #0000 !important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.axm-ai-assist-prompt-box .axm-ai-assist-prompt-box__prompt-input:focus-within{--tw-border-style: none !important;border-style:none!important;--tw-shadow: 0 0 #0000 !important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important;--tw-outline-style: none !important;outline-style:none!important}.axm-ai-assist-prompt-box .axm-ai-assist-prompt-box__prompt-input:focus-within>*{--tw-border-style: none !important;border-style:none!important;--tw-shadow: 0 0 #0000 !important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important;--tw-outline-style: none !important;outline-style:none!important}.axm-ai-assist-prompt-box .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;--tw-border-style: none !important;border-style:none!important;background-color:transparent!important;--tw-shadow: 0 0 #0000 !important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.axm-ai-assist-prompt-box .axm-ai-assist-prompt-box__prompt-input textarea:focus,.axm-ai-assist-prompt-box .axm-ai-assist-prompt-box__prompt-input textarea:focus-visible,.axm-ai-assist-prompt-box .axm-ai-assist-prompt-box__prompt-input textarea:active{--tw-border-style: none !important;border-style:none!important;--tw-shadow: 0 0 #0000 !important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important;--tw-outline-style: none !important;outline-style:none!important;outline-offset:0!important}.dark :is(.axm-ai-assist-prompt-box .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 .axm-ai-assist-prompt-box__footer{min-height:0}.axm-ai-assist-prompt-box 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;overflow:hidden;border-radius:calc(infinity * 1px)!important;border-color:transparent!important;background-color:transparent!important;background:transparent!important}.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__menu-trigger:hover:not(.state-disabled,.state-loading,.state-selected),.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__menu-trigger:active:not(.state-disabled,.state-loading,.state-selected){border-color:transparent!important;background-color:transparent!important}.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__menu-trigger>button{border-radius:calc(infinity * 1px)!important;--tw-border-style: none !important;border-style:none!important;padding:0!important;width:2.25rem;height:2.25rem;min-width:2.25rem;min-height:2.25rem;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)}.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__menu-trigger.ax-state-disabled>button,.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__menu-trigger.ax-state-loading>button,.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__menu-trigger>button:disabled{opacity:.55;box-shadow:none}.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__menu-trigger:hover:not(.state-disabled,.state-loading,.state-selected)>button{filter:brightness(.94)}.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__menu-trigger:active:not(.state-disabled,.state-loading,.state-selected)>button{filter:brightness(.88)}.axm-ai-assist-prompt-box 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;overflow:hidden;border-radius:calc(infinity * 1px)!important;border-color:transparent!important;background-color:transparent!important;background:transparent!important}.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__send-gradient:hover:not(.state-disabled,.state-loading,.state-selected),.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__send-gradient:active:not(.state-disabled,.state-loading,.state-selected){border-color:transparent!important;background-color:transparent!important}.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__send-gradient>button{border-radius:calc(infinity * 1px)!important;--tw-border-style: none !important;border-style:none!important;--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);min-height:2.25rem;padding-inline:1rem!important;font-size:.8rem;letter-spacing:.01em;color:rgb(var(--ax-sys-color-on-primary-surface))!important;background:var(--axm-axm-ai-assist-prompt-send-gradient)!important;box-shadow:0 3px 12px rgba(var(--ax-sys-color-secondary-400),.35)}.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__send-gradient.ax-state-disabled>button,.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__send-gradient.ax-state-loading>button,.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__send-gradient>button:disabled{opacity:.55;box-shadow:none}.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__send-gradient:hover:not(.state-disabled,.state-loading,.state-selected)>button{filter:brightness(.96)}.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__send-gradient:active:not(.state-disabled,.state-loading,.state-selected)>button{filter:brightness(.9)}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight: initial;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\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 }); }
|
|
1338
1335
|
}
|
|
1339
1336
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMAiAssistPromptBoxComponent, decorators: [{
|
|
1340
1337
|
type: Component,
|
|
@@ -1350,7 +1347,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1350
1347
|
AXTextAreaModule,
|
|
1351
1348
|
AXTranslationModule,
|
|
1352
1349
|
], template: "<div\n class=\"axm-ai-assist-prompt-box flex flex-col gap-2.5 min-h-0 w-full\"\n [style.max-width.px]=\"contentMaxWidthPx()\"\n>\n <div\n class=\"axm-ai-assist-prompt-box__eyebrow flex items-center justify-between gap-3 shrink-0 px-0.5\"\n >\n <div\n class=\"axm-ai-assist-prompt-box__brand inline-flex min-w-0 items-center gap-2\"\n >\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 truncate\">{{\n title()\n }}</span>\n </div>\n <ax-button\n class=\"shrink-0 ax-sm\"\n look=\"blank\"\n color=\"default\"\n type=\"button\"\n [iconOnly]=\"true\"\n [disabled]=\"busy()\"\n [attr.aria-label]=\"\n ('@general:actions.close.title' | translate | async) ?? ''\n \"\n (onClick)=\"onCancel()\"\n >\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 flex min-h-0 flex-col gap-2\">\n @if (\n draftComposerImages().length > 0 ||\n draftComposerAudios().length > 0 ||\n draftComposerFiles().length > 0 ||\n isComposerSaving()\n ) {\n <div\n class=\"shrink-0 rounded-xl border border-default/45 dark:border-darker bg-lightest/90 p-1.5 flex flex-col gap-1.5\"\n [attr.aria-label]=\"\n ('@ai-management:chat.composer-attachments-region'\n | translate\n | async) ?? ''\n \"\n >\n <div\n class=\"flex flex-wrap items-center justify-between gap-1.5 text-[0.65rem] text-muted\"\n >\n <span>\n @if (isComposerSaving()) {\n {{ '@ai-management:chat.composer-uploading' | translate | async }}\n } @else {\n @if (draftComposerImages().length > 0) {\n <span\n >{{ draftComposerImages().length }}\n {{\n '@ai-management:chat.composer-images-count'\n | translate\n | async\n }}</span\n >\n }\n @if (\n draftComposerImages().length > 0 &&\n draftComposerAudios().length > 0\n ) {\n <span class=\"mx-1\">\u00B7</span>\n }\n @if (draftComposerAudios().length > 0) {\n <span\n >{{ draftComposerAudios().length }}\n {{\n '@ai-management:chat.composer-audio-count'\n | translate\n | async\n }}</span\n >\n }\n @if (draftComposerFiles().length > 0) {\n @if (\n draftComposerImages().length > 0 ||\n draftComposerAudios().length > 0\n ) {\n <span class=\"mx-1\">\u00B7</span>\n }\n <span\n >{{ draftComposerFiles().length }}\n {{\n '@ai-management:chat.composer-documents-count'\n | translate\n | async\n }}</span\n >\n }\n }\n </span>\n </div>\n @if (draftComposerImages().length > 0) {\n <div class=\"flex flex-wrap gap-1.5\">\n @for (slot of draftComposerImages(); track slot.clientId) {\n <div\n class=\"relative h-12 w-12 shrink-0 overflow-hidden rounded-md border border-default/60 dark:border-darker bg-lightest\"\n >\n <img\n [src]=\"slot.previewUrl\"\n [alt]=\"slot.name ?? ''\"\n class=\"h-full w-full object-cover\"\n />\n @if (!slot.fileId) {\n <span\n class=\"absolute inset-0 flex items-center justify-center bg-default/40 text-[0.6rem] font-medium text-on-lightest\"\n >\u2026</span\n >\n }\n <button\n type=\"button\"\n class=\"absolute end-0.5 top-0.5 flex h-4 w-4 items-center justify-center rounded bg-default/80 text-[0.65rem] leading-none text-on-lightest hover:bg-default focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-400\"\n [disabled]=\"busy() || isComposerSaving()\"\n [attr.aria-label]=\"\n ('@ai-management:chat.remove-draft-image'\n | translate\n | async) ?? ''\n \"\n (click)=\"removeDraftImage(slot.clientId)\"\n >\n \u00D7\n </button>\n </div>\n }\n </div>\n }\n @if (draftComposerAudios().length > 0) {\n <div class=\"flex flex-col gap-1\">\n @for (slot of draftComposerAudios(); track slot.clientId) {\n <div\n class=\"flex items-center justify-between gap-1.5 rounded border border-default/60 dark:border-darker bg-lightest px-1.5 py-1 text-[0.65rem] min-w-0\"\n >\n <span\n class=\"truncate text-on-lightest\"\n [attr.title]=\"slot.name ?? ''\"\n >\n {{\n '@ai-management:chat.attached-audio-label'\n | translate\n | async\n }}:\n {{\n slot.name?.trim() ||\n ('@ai-management:chat.audio-untitled' | translate | async)\n }}\n </span>\n @if (!slot.fileId) {\n <span class=\"text-muted shrink-0\">\u2026</span>\n }\n <button\n type=\"button\"\n class=\"shrink-0 flex h-5 w-5 items-center justify-center rounded bg-default/80 text-[0.75rem] leading-none text-on-lightest hover:bg-default focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-400\"\n [disabled]=\"busy() || isComposerSaving()\"\n [attr.aria-label]=\"\n ('@ai-management:chat.remove-draft-audio'\n | translate\n | async) ?? ''\n \"\n (click)=\"removeDraftAudio(slot.clientId)\"\n >\n \u00D7\n </button>\n </div>\n }\n </div>\n }\n @if (draftComposerFiles().length > 0) {\n <div class=\"flex flex-col gap-1\">\n @for (slot of draftComposerFiles(); track slot.clientId) {\n <div\n class=\"flex items-center justify-between gap-1.5 rounded border border-default/60 dark:border-darker bg-lightest px-1.5 py-1 text-[0.65rem] min-w-0\"\n >\n <span\n class=\"truncate text-on-lightest\"\n [attr.title]=\"slot.name ?? ''\"\n >\n {{\n '@ai-management:chat.attached-document-label'\n | translate\n | async\n }}:\n {{\n slot.name?.trim() ||\n ('@ai-management:chat.document-untitled'\n | translate\n | async)\n }}\n </span>\n @if (!slot.fileId) {\n <span class=\"text-muted shrink-0\">\u2026</span>\n }\n <button\n type=\"button\"\n class=\"shrink-0 flex h-5 w-5 items-center justify-center rounded bg-default/80 text-[0.75rem] leading-none text-on-lightest hover:bg-default focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-400\"\n [disabled]=\"busy() || isComposerSaving()\"\n [attr.aria-label]=\"\n ('@ai-management:chat.remove-draft-document'\n | translate\n | async) ?? ''\n \"\n (click)=\"removeDraftFile(slot.clientId)\"\n >\n \u00D7\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <div class=\"axm-ai-assist-prompt-box__body flex min-h-0 flex-col\">\n <ax-text-area\n class=\"axm-ai-assist-prompt-box__prompt-input w-full min-h-0\"\n [rows]=\"3\"\n [disabled]=\"busy()\"\n [ngModel]=\"promptDraft()\"\n (ngModelChange)=\"onPromptDraftChange($event)\"\n (keydown)=\"onPromptKeydown($event)\"\n [placeholder]=\"\n placeholder().trim().length > 0\n ? placeholder()\n : (('@ai-management:assist-popup.placeholder'\n | translate\n | async) ?? '')\n \"\n ></ax-text-area>\n </div>\n\n <div\n class=\"axm-ai-assist-prompt-box__footer flex shrink-0 items-center justify-between gap-2\"\n >\n <ax-button\n class=\"axm-ai-assist-prompt-box__menu-trigger\"\n look=\"solid\"\n color=\"primary\"\n type=\"button\"\n [iconOnly]=\"true\"\n [disabled]=\"busy()\"\n [attr.aria-label]=\"\n ('@ai-management:assist-popup.composer-menu-aria'\n | translate\n | async) ?? ''\n \"\n >\n <ax-prefix>\n <i class=\"fa-light fa-plus text-sm\" aria-hidden=\"true\"></i>\n </ax-prefix>\n <ax-dropdown-panel #composerMenu>\n <ax-button-item-list class=\"min-w-56\">\n <ax-button-item\n [text]=\"\n ('@ai-management:chat.upload-images' | translate | async) ?? ''\n \"\n [attr.aria-label]=\"\n ('@ai-management:chat.upload-images-aria'\n | translate\n | async) ?? ''\n \"\n (onClick)=\"openImagePicker(); composerMenu.close()\"\n >\n <ax-prefix>\n <i\n class=\"fa-light fa-image size-4 text-center\"\n aria-hidden=\"true\"\n ></i>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item\n [text]=\"\n ('@ai-management:chat.upload-audio' | translate | async) ?? ''\n \"\n [attr.aria-label]=\"\n ('@ai-management:chat.upload-audio-aria' | translate | async) ??\n ''\n \"\n (onClick)=\"openAudioPicker(); composerMenu.close()\"\n >\n <ax-prefix>\n <i\n class=\"fa-light fa-microphone size-4 text-center\"\n aria-hidden=\"true\"\n ></i>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item\n [text]=\"\n ('@ai-management:chat.upload-documents' | translate | async) ??\n ''\n \"\n [attr.aria-label]=\"\n ('@ai-management:chat.upload-documents-aria'\n | translate\n | async) ?? ''\n \"\n (onClick)=\"openDocumentPicker(); composerMenu.close()\"\n >\n <ax-prefix>\n <i\n class=\"fa-light fa-paperclip size-4 text-center\"\n aria-hidden=\"true\"\n ></i>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n <ax-button\n class=\"axm-ai-assist-prompt-box__send axm-ai-assist-prompt-box__send-gradient\"\n color=\"primary\"\n type=\"button\"\n [disabled]=\"busy() || !canSend()\"\n [text]=\"\n busy()\n ? (('@ai-management:assist-popup.generating' | translate | async) ??\n '')\n : (('@ai-management:assist-popup.generate' | translate | async) ??\n '')\n \"\n (onClick)=\"onSend()\"\n ></ax-button>\n </div>\n </div>\n</div>\n", styles: ["@layer properties;.axm-ai-assist-prompt-box-shell{pointer-events:none;box-sizing:border-box;inset:0;display:flex;max-height:100%;width:100%;flex-direction:column;align-items:center;justify-content:flex-end;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 .overlay-pane{pointer-events:auto;--tw-border-style: none;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-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-axm-ai-assist-prompt-send-gradient: linear-gradient( 90deg, rgb(var(--ax-sys-color-primary-500)), rgb(var(--ax-sys-color-primary-700)) );margin:0;box-sizing:border-box;overflow:hidden;padding:0;max-height:min(78vh,620px);padding:.65rem .7rem .7rem;border-radius:1.35rem;background:var(--axm-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)}.dark .axm-ai-assist-prompt-box{--axm-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 .axm-ai-assist-prompt-box__brand-title{--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);font-size:.72rem;line-height:1.25;letter-spacing:.01em;color:rgb(var(--ax-sys-color-on-surface))}.dark :is(.axm-ai-assist-prompt-box .axm-ai-assist-prompt-box__brand-title){color:rgb(var(--ax-sys-color-on-lightest-surface))}.axm-ai-assist-prompt-box .axm-ai-assist-prompt-box__brand-mark{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;border-radius:calc(infinity * 1px);width:1.65rem;height:1.65rem;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 .axm-ai-assist-prompt-box__sheet{min-height:0px;flex:auto;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)}.dark :is(.axm-ai-assist-prompt-box .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 .axm-ai-assist-prompt-box__body{min-height:0px;flex:auto;overflow-y:auto}.axm-ai-assist-prompt-box .axm-ai-assist-prompt-box__prompt-input{display:block;min-height:0px;width:100%;--tw-border-style: none !important;border-style:none!important;background-color:transparent!important;--tw-shadow: 0 0 #0000 !important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.axm-ai-assist-prompt-box .axm-ai-assist-prompt-box__prompt-input:focus-within{--tw-border-style: none !important;border-style:none!important;--tw-shadow: 0 0 #0000 !important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important;--tw-outline-style: none !important;outline-style:none!important}.axm-ai-assist-prompt-box .axm-ai-assist-prompt-box__prompt-input:focus-within>*{--tw-border-style: none !important;border-style:none!important;--tw-shadow: 0 0 #0000 !important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important;--tw-outline-style: none !important;outline-style:none!important}.axm-ai-assist-prompt-box .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;--tw-border-style: none !important;border-style:none!important;background-color:transparent!important;--tw-shadow: 0 0 #0000 !important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.axm-ai-assist-prompt-box .axm-ai-assist-prompt-box__prompt-input textarea:focus,.axm-ai-assist-prompt-box .axm-ai-assist-prompt-box__prompt-input textarea:focus-visible,.axm-ai-assist-prompt-box .axm-ai-assist-prompt-box__prompt-input textarea:active{--tw-border-style: none !important;border-style:none!important;--tw-shadow: 0 0 #0000 !important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important;--tw-outline-style: none !important;outline-style:none!important;outline-offset:0!important}.dark :is(.axm-ai-assist-prompt-box .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 .axm-ai-assist-prompt-box__footer{min-height:0}.axm-ai-assist-prompt-box 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;overflow:hidden;border-radius:calc(infinity * 1px)!important;border-color:transparent!important;background-color:transparent!important;background:transparent!important}.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__menu-trigger:hover:not(.state-disabled,.state-loading,.state-selected),.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__menu-trigger:active:not(.state-disabled,.state-loading,.state-selected){border-color:transparent!important;background-color:transparent!important}.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__menu-trigger>button{border-radius:calc(infinity * 1px)!important;--tw-border-style: none !important;border-style:none!important;padding:0!important;width:2.25rem;height:2.25rem;min-width:2.25rem;min-height:2.25rem;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)}.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__menu-trigger.ax-state-disabled>button,.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__menu-trigger.ax-state-loading>button,.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__menu-trigger>button:disabled{opacity:.55;box-shadow:none}.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__menu-trigger:hover:not(.state-disabled,.state-loading,.state-selected)>button{filter:brightness(.94)}.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__menu-trigger:active:not(.state-disabled,.state-loading,.state-selected)>button{filter:brightness(.88)}.axm-ai-assist-prompt-box 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;overflow:hidden;border-radius:calc(infinity * 1px)!important;border-color:transparent!important;background-color:transparent!important;background:transparent!important}.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__send-gradient:hover:not(.state-disabled,.state-loading,.state-selected),.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__send-gradient:active:not(.state-disabled,.state-loading,.state-selected){border-color:transparent!important;background-color:transparent!important}.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__send-gradient>button{border-radius:calc(infinity * 1px)!important;--tw-border-style: none !important;border-style:none!important;--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);min-height:2.25rem;padding-inline:1rem!important;font-size:.8rem;letter-spacing:.01em;color:rgb(var(--ax-sys-color-on-primary-surface))!important;background:var(--axm-axm-ai-assist-prompt-send-gradient)!important;box-shadow:0 3px 12px rgba(var(--ax-sys-color-secondary-400),.35)}.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__send-gradient.ax-state-disabled>button,.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__send-gradient.ax-state-loading>button,.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__send-gradient>button:disabled{opacity:.55;box-shadow:none}.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__send-gradient:hover:not(.state-disabled,.state-loading,.state-selected)>button{filter:brightness(.96)}.axm-ai-assist-prompt-box ax-button.axm-ai-assist-prompt-box__send-gradient:active:not(.state-disabled,.state-loading,.state-selected)>button{filter:brightness(.9)}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight: initial;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
|
|
1353
|
-
}], 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 }] }],
|
|
1350
|
+
}], 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 }] }], runPrompt: [{ type: i0.Input, args: [{ isSignal: true, alias: "runPrompt", required: true }] }], requestClose: [{ type: i0.Input, args: [{ isSignal: true, alias: "requestClose", required: true }] }] } });
|
|
1354
1351
|
|
|
1355
1352
|
//#endregion
|
|
1356
1353
|
//#region ---- Service ----
|
|
@@ -1404,7 +1401,6 @@ class AXMAiAssistPromptBoxService {
|
|
|
1404
1401
|
placeholder: options.placeholder ?? '',
|
|
1405
1402
|
initialPrompt: options.initialPrompt ?? '',
|
|
1406
1403
|
initialAssistId: options.assistId,
|
|
1407
|
-
initialDirectAgentId: options.directAgentId,
|
|
1408
1404
|
runPrompt: executeRun,
|
|
1409
1405
|
requestClose,
|
|
1410
1406
|
},
|
|
@@ -2385,9 +2381,6 @@ class AXPAiManagerService extends AXPAiAssistService {
|
|
|
2385
2381
|
this.modelEntityData = this.entityService
|
|
2386
2382
|
.withEntity(RootConfig.module.name, RootConfig.entities.model.name)
|
|
2387
2383
|
.data();
|
|
2388
|
-
this.agentEntityData = this.entityService
|
|
2389
|
-
.withEntity(RootConfig.module.name, RootConfig.entities.agent.name)
|
|
2390
|
-
.data();
|
|
2391
2384
|
}
|
|
2392
2385
|
//#endregion
|
|
2393
2386
|
//#region ---- Assist catalog (frontend) ----
|
|
@@ -2484,19 +2477,10 @@ class AXPAiManagerService extends AXPAiAssistService {
|
|
|
2484
2477
|
return Math.floor(value);
|
|
2485
2478
|
}
|
|
2486
2479
|
/**
|
|
2487
|
-
* Reads {@link AXMAiModelMaxTokensRow.maxOutputTokens} for the model bound to the assist
|
|
2480
|
+
* Reads {@link AXMAiModelMaxTokensRow.maxOutputTokens} for the model bound to the assist.
|
|
2488
2481
|
*/
|
|
2489
|
-
async resolveCatalogMaxOutputTokens(assistId
|
|
2482
|
+
async resolveCatalogMaxOutputTokens(assistId) {
|
|
2490
2483
|
try {
|
|
2491
|
-
if (directAgentId) {
|
|
2492
|
-
const agent = await this.agentEntityData.byKey(directAgentId);
|
|
2493
|
-
const modelEntityId = agent?.modelEntityId?.trim();
|
|
2494
|
-
if (!modelEntityId) {
|
|
2495
|
-
return undefined;
|
|
2496
|
-
}
|
|
2497
|
-
const model = await this.modelEntityData.byKey(modelEntityId);
|
|
2498
|
-
return this.normalizeMaxOutputTokens(model?.maxOutputTokens);
|
|
2499
|
-
}
|
|
2500
2484
|
const assist = await this.getAssistForChat(assistId);
|
|
2501
2485
|
const modelEntityId = assist.modelId?.trim();
|
|
2502
2486
|
if (!modelEntityId) {
|
|
@@ -2513,30 +2497,22 @@ class AXPAiManagerService extends AXPAiAssistService {
|
|
|
2513
2497
|
async run(input) {
|
|
2514
2498
|
const baseCtx = await this.runtimeContextBuilder.build();
|
|
2515
2499
|
const platformRuntimeContext = mergePlatformRuntimeContext(baseCtx, input.platformRuntimeNotes ?? null);
|
|
2516
|
-
const
|
|
2517
|
-
|
|
2518
|
-
const assistRow = !directAgentId && !assistId
|
|
2519
|
-
? await this.getEffectiveAssist()
|
|
2520
|
-
: await this.getAssistForChat(assistId);
|
|
2521
|
-
if (!directAgentId && !assistId) {
|
|
2522
|
-
assistId = assistRow.id;
|
|
2523
|
-
}
|
|
2524
|
-
const agentRow = directAgentId ? await this.agentEntityData.byKey(directAgentId) : null;
|
|
2500
|
+
const assistId = input.assistId?.trim();
|
|
2501
|
+
const assistRow = await this.getAssistForChat(assistId);
|
|
2525
2502
|
const inputContract = outputContractFromAssistRunInput(input);
|
|
2526
2503
|
const effectiveOutputContract = await this.outputContractResolve.resolveEffective({
|
|
2527
2504
|
input: inputContract,
|
|
2528
2505
|
assist: assistRow.outputContract,
|
|
2529
|
-
agent: agentRow?.outputContract,
|
|
2530
2506
|
});
|
|
2531
2507
|
const usesStructuredPipeline = input.expectStructuredOutput === true ||
|
|
2532
2508
|
axpAiAgentOutputContractUsesStructuredFinalize(effectiveOutputContract);
|
|
2533
2509
|
const messages = buildChatMessages(input);
|
|
2534
|
-
const catalogMax = await this.resolveCatalogMaxOutputTokens(assistId
|
|
2510
|
+
const catalogMax = await this.resolveCatalogMaxOutputTokens(assistId);
|
|
2535
2511
|
const effectiveMaxTokens = input.maxTokens ?? catalogMax ?? AXPAiAssistDefaultStructuredMaxTokens;
|
|
2536
2512
|
const runOptions = {
|
|
2537
2513
|
platformRuntimeContext,
|
|
2538
2514
|
outputContract: effectiveOutputContract,
|
|
2539
|
-
...(
|
|
2515
|
+
...(assistId ? { assistId } : {}),
|
|
2540
2516
|
...(input.maxSteps !== undefined ? { maxSteps: input.maxSteps } : {}),
|
|
2541
2517
|
...(input.temperature !== undefined ? { temperature: input.temperature } : {}),
|
|
2542
2518
|
maxTokens: effectiveMaxTokens,
|
|
@@ -2592,7 +2568,6 @@ class AXPAiManagerService extends AXPAiAssistService {
|
|
|
2592
2568
|
userMediaAttachments: payload.userMediaAttachments.length > 0 ? payload.userMediaAttachments : undefined,
|
|
2593
2569
|
context: options.context,
|
|
2594
2570
|
assistId: payload.assistId,
|
|
2595
|
-
directAgentId: payload.directAgentId,
|
|
2596
2571
|
maxSteps: options.maxSteps,
|
|
2597
2572
|
temperature: options.temperature,
|
|
2598
2573
|
maxTokens: options.maxTokens,
|