@memberjunction/ng-core-entity-forms 6.2.0 → 6.3.0-edge.0
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/README.md +5 -6
- package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.d.ts.map +1 -1
- package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.js +3 -3
- package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.js.map +1 -1
- package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.d.ts +12 -0
- package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js +293 -230
- package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js +2 -2
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +2 -2
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +11 -0
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +862 -812
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +2 -2
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +2 -2
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +2 -2
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +2 -2
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +2 -2
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +2 -2
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +12 -0
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +821 -763
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +2 -2
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +10 -0
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +700 -605
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts +10 -0
- package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.js +223 -175
- package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.d.ts +10 -0
- package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.js +502 -453
- package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
- package/dist/lib/custom/Companies/company-header.panel.d.ts.map +1 -1
- package/dist/lib/custom/Companies/company-header.panel.js +3 -3
- package/dist/lib/custom/Companies/company-header.panel.js.map +1 -1
- package/dist/lib/custom/Conversations/conversation-header.panel.d.ts.map +1 -1
- package/dist/lib/custom/Conversations/conversation-header.panel.js +3 -3
- package/dist/lib/custom/Conversations/conversation-header.panel.js.map +1 -1
- package/dist/lib/custom/Employees/employee-header.panel.d.ts.map +1 -1
- package/dist/lib/custom/Employees/employee-header.panel.js +3 -3
- package/dist/lib/custom/Employees/employee-header.panel.js.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.d.ts +15 -0
- package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.js +836 -801
- package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.js +2 -2
- package/dist/lib/custom/Files/file-form.component.js +2 -2
- package/dist/lib/custom/Lists/list-form.component.d.ts +5 -0
- package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Lists/list-form.component.js +355 -338
- package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
- package/dist/lib/custom/MLModels/ml-model-form.component.js +3 -3
- package/dist/lib/custom/MLModels/ml-model-form.component.js.map +1 -1
- package/dist/lib/custom/MLModels/ml-model-view-models.d.ts +17 -35
- package/dist/lib/custom/MLModels/ml-model-view-models.d.ts.map +1 -1
- package/dist/lib/custom/MLModels/ml-model-view-models.js +55 -54
- package/dist/lib/custom/MLModels/ml-model-view-models.js.map +1 -1
- package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts +7 -99
- package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts.map +1 -1
- package/dist/lib/custom/MLModels/ps-model-detail.component.js +124 -303
- package/dist/lib/custom/MLModels/ps-model-detail.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.d.ts +9 -0
- package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.js +493 -444
- package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.js +2 -2
- package/dist/lib/custom/Templates/template-param-dialog.component.js +2 -2
- package/dist/lib/custom/Templates/templates-form.component.d.ts +9 -0
- package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.js +118 -74
- package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.d.ts +5 -0
- package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.js +471 -451
- package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-form.component.d.ts +5 -0
- package/dist/lib/custom/Tests/test-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-run-form.component.js +312 -289
- package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts +5 -0
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.js +697 -677
- package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts +5 -0
- package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-suite-run-form.component.js +453 -433
- package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
- package/dist/lib/custom/Users/user-header.panel.d.ts.map +1 -1
- package/dist/lib/custom/Users/user-header.panel.js +3 -3
- package/dist/lib/custom/Users/user-header.panel.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/agent-run-cost-split.d.ts +2 -2
- package/dist/lib/custom/ai-agent-run/agent-run-cost-split.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/agent-run-cost-split.js +30 -13
- package/dist/lib/custom/ai-agent-run/agent-run-cost-split.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +23 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +276 -216
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +7 -1
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +32 -14
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAction/mjaction.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js +119 -95
- package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.js +124 -0
- package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.js +99 -0
- package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js +2 -2
- package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.js +95 -0
- package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.js +60 -0
- package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +124 -106
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityFieldValue/mjentityfieldvalue.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntityFieldValue/mjentityfieldvalue.form.component.js +12 -4
- package/dist/lib/generated/Entities/MJEntityFieldValue/mjentityfieldvalue.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.js +19 -11
- package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.js +62 -0
- package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.js +26 -12
- package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.js +140 -0
- package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJFile/mjfile.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js +69 -15
- package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js +31 -13
- package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.js +205 -0
- package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.js +24 -6
- package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.js +173 -0
- package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.js +46 -24
- package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.js +22 -14
- package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.js +175 -0
- package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJQueryField/mjqueryfield.form.component.js +8 -6
- package/dist/lib/generated/Entities/MJQueryField/mjqueryfield.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js +44 -36
- package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJTask/mjtask.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js +54 -32
- package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js.map +1 -1
- package/dist/lib/generated/generated-forms.module.d.ts +452 -443
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +27 -0
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/dist/lib/panels/feature-values/feature-values.panel.js +1 -1
- package/dist/lib/panels/feature-values/feature-values.panel.js.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.logic.js.map +1 -1
- package/dist/lib/shared/components/template-editor.component.js +2 -2
- package/dist/lib/shared/phone-hero.d.ts +17 -0
- package/dist/lib/shared/phone-hero.d.ts.map +1 -0
- package/dist/lib/shared/phone-hero.js +30 -0
- package/dist/lib/shared/phone-hero.js.map +1 -0
- package/dist/lib/shared/phone-sections-state.d.ts +28 -0
- package/dist/lib/shared/phone-sections-state.d.ts.map +1 -0
- package/dist/lib/shared/phone-sections-state.js +38 -0
- package/dist/lib/shared/phone-sections-state.js.map +1 -0
- package/package.json +50 -50
|
@@ -15,6 +15,8 @@ import { AIEngineBase } from '@memberjunction/ai-engine-base';
|
|
|
15
15
|
import { AITestHarnessDialogService } from '@memberjunction/ng-ai-test-harness';
|
|
16
16
|
import { AIPromptManagementService } from './ai-prompt-management.service';
|
|
17
17
|
import { DedupePendingRecordsByEntity } from './pending-records';
|
|
18
|
+
import { JoinHeroSummary } from '../../shared/phone-hero';
|
|
19
|
+
import { PhoneSectionsState } from '../../shared/phone-sections-state';
|
|
18
20
|
import * as i0 from "@angular/core";
|
|
19
21
|
import * as i1 from "@angular/forms";
|
|
20
22
|
import * as i2 from "@memberjunction/ng-ui-components";
|
|
@@ -35,7 +37,7 @@ function _forTrack0($index, $item) { return this.getModelTrackId($item) || $inde
|
|
|
35
37
|
const _forTrack1 = ($index, $item) => $item.ID;
|
|
36
38
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
37
39
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
38
|
-
i0.ɵɵelementStart(0, "input",
|
|
40
|
+
i0.ɵɵelementStart(0, "input", 62);
|
|
39
41
|
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_9_Template_input_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Name, $event) || (ctx_r1.record.Name = $event); return i0.ɵɵresetView($event); });
|
|
40
42
|
i0.ɵɵelementEnd();
|
|
41
43
|
} if (rf & 2) {
|
|
@@ -43,10 +45,10 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_9_Template(rf
|
|
|
43
45
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.Name);
|
|
44
46
|
} }
|
|
45
47
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
46
|
-
i0.ɵɵelementStart(0, "h4",
|
|
48
|
+
i0.ɵɵelementStart(0, "h4", 63);
|
|
47
49
|
i0.ɵɵtext(1);
|
|
48
50
|
i0.ɵɵelementEnd();
|
|
49
|
-
i0.ɵɵelementStart(2, "span",
|
|
51
|
+
i0.ɵɵelementStart(2, "span", 64);
|
|
50
52
|
i0.ɵɵtext(3);
|
|
51
53
|
i0.ɵɵelementEnd();
|
|
52
54
|
} if (rf & 2) {
|
|
@@ -59,14 +61,14 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_10_Template(r
|
|
|
59
61
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Status, " ");
|
|
60
62
|
} }
|
|
61
63
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
62
|
-
i0.ɵɵelementStart(0, "div",
|
|
63
|
-
i0.ɵɵelement(1, "i",
|
|
64
|
+
i0.ɵɵelementStart(0, "div", 67);
|
|
65
|
+
i0.ɵɵelement(1, "i", 69);
|
|
64
66
|
i0.ɵɵtext(2, " Loading types... ");
|
|
65
67
|
i0.ɵɵelementEnd();
|
|
66
68
|
} }
|
|
67
69
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
68
70
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
69
|
-
i0.ɵɵelementStart(0, "mj-dropdown",
|
|
71
|
+
i0.ɵɵelementStart(0, "mj-dropdown", 70);
|
|
70
72
|
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Conditional_11_Template_mj_dropdown_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.TypeID, $event) || (ctx_r1.record.TypeID = $event); return i0.ɵɵresetView($event); });
|
|
71
73
|
i0.ɵɵelementEnd();
|
|
72
74
|
} if (rf & 2) {
|
|
@@ -76,18 +78,18 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Conditiona
|
|
|
76
78
|
} }
|
|
77
79
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
78
80
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
79
|
-
i0.ɵɵelementStart(0, "div", 13)(1, "div")(2, "label",
|
|
81
|
+
i0.ɵɵelementStart(0, "div", 13)(1, "div")(2, "label", 50);
|
|
80
82
|
i0.ɵɵtext(3, "Status");
|
|
81
83
|
i0.ɵɵelementEnd();
|
|
82
|
-
i0.ɵɵelementStart(4, "mj-dropdown",
|
|
84
|
+
i0.ɵɵelementStart(4, "mj-dropdown", 65);
|
|
83
85
|
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Template_mj_dropdown_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Status, $event) || (ctx_r1.record.Status = $event); return i0.ɵɵresetView($event); });
|
|
84
86
|
i0.ɵɵelementEnd()();
|
|
85
|
-
i0.ɵɵelementStart(5, "div")(6, "label",
|
|
87
|
+
i0.ɵɵelementStart(5, "div")(6, "label", 50);
|
|
86
88
|
i0.ɵɵtext(7, " Type ");
|
|
87
|
-
i0.ɵɵelementStart(8, "span",
|
|
89
|
+
i0.ɵɵelementStart(8, "span", 66);
|
|
88
90
|
i0.ɵɵtext(9, "*");
|
|
89
91
|
i0.ɵɵelementEnd()();
|
|
90
|
-
i0.ɵɵconditionalCreate(10, MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Conditional_10_Template, 3, 0, "div",
|
|
92
|
+
i0.ɵɵconditionalCreate(10, MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Conditional_10_Template, 3, 0, "div", 67)(11, MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Conditional_11_Template, 1, 4, "mj-dropdown", 68);
|
|
91
93
|
i0.ɵɵelementEnd()();
|
|
92
94
|
} if (rf & 2) {
|
|
93
95
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -99,7 +101,7 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Template(r
|
|
|
99
101
|
} }
|
|
100
102
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
101
103
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
102
|
-
i0.ɵɵelementStart(0, "textarea",
|
|
104
|
+
i0.ɵɵelementStart(0, "textarea", 71);
|
|
103
105
|
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_12_Template_textarea_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Description, $event) || (ctx_r1.record.Description = $event); return i0.ɵɵresetView($event); });
|
|
104
106
|
i0.ɵɵelementEnd();
|
|
105
107
|
} if (rf & 2) {
|
|
@@ -118,7 +120,7 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_13_Template(r
|
|
|
118
120
|
} }
|
|
119
121
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
120
122
|
i0.ɵɵelementStart(0, "div", 17);
|
|
121
|
-
i0.ɵɵelement(1, "i",
|
|
123
|
+
i0.ɵɵelement(1, "i", 72);
|
|
122
124
|
i0.ɵɵelementStart(2, "span", 19);
|
|
123
125
|
i0.ɵɵtext(3, "Type:");
|
|
124
126
|
i0.ɵɵelementEnd();
|
|
@@ -132,14 +134,14 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_15_Template(r
|
|
|
132
134
|
} }
|
|
133
135
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_28_Template(rf, ctx) { if (rf & 1) {
|
|
134
136
|
i0.ɵɵelementStart(0, "div", 17);
|
|
135
|
-
i0.ɵɵelement(1, "i",
|
|
136
|
-
i0.ɵɵelementStart(2, "span",
|
|
137
|
+
i0.ɵɵelement(1, "i", 73);
|
|
138
|
+
i0.ɵɵelementStart(2, "span", 74);
|
|
137
139
|
i0.ɵɵtext(3, "Caching Enabled");
|
|
138
140
|
i0.ɵɵelementEnd()();
|
|
139
141
|
} }
|
|
140
142
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
141
143
|
i0.ɵɵelementStart(0, "div", 17);
|
|
142
|
-
i0.ɵɵelement(1, "i",
|
|
144
|
+
i0.ɵɵelement(1, "i", 75);
|
|
143
145
|
i0.ɵɵelementStart(2, "span", 19);
|
|
144
146
|
i0.ɵɵtext(3, "Effort Level:");
|
|
145
147
|
i0.ɵɵelementEnd();
|
|
@@ -153,9 +155,9 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_29_Template(r
|
|
|
153
155
|
} }
|
|
154
156
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_32_Template(rf, ctx) { if (rf & 1) {
|
|
155
157
|
const _r7 = i0.ɵɵgetCurrentView();
|
|
156
|
-
i0.ɵɵelementStart(0, "button",
|
|
158
|
+
i0.ɵɵelementStart(0, "button", 76);
|
|
157
159
|
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_32_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openTestHarness()); });
|
|
158
|
-
i0.ɵɵelement(1, "i",
|
|
160
|
+
i0.ɵɵelement(1, "i", 77);
|
|
159
161
|
i0.ɵɵtext(2, " Run ");
|
|
160
162
|
i0.ɵɵelementEnd();
|
|
161
163
|
} }
|
|
@@ -186,8 +188,23 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_33_Template(r
|
|
|
186
188
|
i0.ɵɵadvance();
|
|
187
189
|
i0.ɵɵconditional(!ctx_r1.template && ctx_r1.record.TemplateID ? 3 : -1);
|
|
188
190
|
} }
|
|
189
|
-
function
|
|
190
|
-
i0.ɵɵ
|
|
191
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_34_Template(rf, ctx) { if (rf & 1) {
|
|
192
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
193
|
+
i0.ɵɵelementStart(0, "button", 78);
|
|
194
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_34_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ToggleHeroDetails()); });
|
|
195
|
+
i0.ɵɵelementStart(1, "span", 79);
|
|
196
|
+
i0.ɵɵtext(2);
|
|
197
|
+
i0.ɵɵelementEnd();
|
|
198
|
+
i0.ɵɵelement(3, "i", 80);
|
|
199
|
+
i0.ɵɵelementEnd();
|
|
200
|
+
} if (rf & 2) {
|
|
201
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
202
|
+
i0.ɵɵattribute("aria-expanded", ctx_r1.HeroDetailsOpen);
|
|
203
|
+
i0.ɵɵadvance(2);
|
|
204
|
+
i0.ɵɵtextInterpolate(ctx_r1.HeroSummary);
|
|
205
|
+
} }
|
|
206
|
+
function MJAIPromptFormComponentExtended_Conditional_1_ng_template_38_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
207
|
+
i0.ɵɵelementStart(0, "span", 82);
|
|
191
208
|
i0.ɵɵtext(1);
|
|
192
209
|
i0.ɵɵelementEnd();
|
|
193
210
|
} if (rf & 2) {
|
|
@@ -195,43 +212,43 @@ function MJAIPromptFormComponentExtended_Conditional_1_ng_template_36_Conditiona
|
|
|
195
212
|
i0.ɵɵadvance();
|
|
196
213
|
i0.ɵɵtextInterpolate1("\u2022 ", ctx_r1.template.Name);
|
|
197
214
|
} }
|
|
198
|
-
function
|
|
199
|
-
i0.ɵɵelementStart(0, "span",
|
|
215
|
+
function MJAIPromptFormComponentExtended_Conditional_1_ng_template_38_Template(rf, ctx) { if (rf & 1) {
|
|
216
|
+
i0.ɵɵelementStart(0, "span", 81);
|
|
200
217
|
i0.ɵɵelement(1, "i", 21);
|
|
201
218
|
i0.ɵɵtext(2, " Template Editor ");
|
|
202
|
-
i0.ɵɵconditionalCreate(3,
|
|
219
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_ng_template_38_Conditional_3_Template, 2, 1, "span", 82);
|
|
203
220
|
i0.ɵɵelementEnd();
|
|
204
221
|
} if (rf & 2) {
|
|
205
222
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
206
223
|
i0.ɵɵadvance(3);
|
|
207
224
|
i0.ɵɵconditional(ctx_r1.template ? 3 : -1);
|
|
208
225
|
} }
|
|
209
|
-
function
|
|
210
|
-
i0.ɵɵelementStart(0, "div",
|
|
211
|
-
i0.ɵɵelement(1, "i",
|
|
226
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_40_Template(rf, ctx) { if (rf & 1) {
|
|
227
|
+
i0.ɵɵelementStart(0, "div", 33);
|
|
228
|
+
i0.ɵɵelement(1, "i", 83);
|
|
212
229
|
i0.ɵɵtext(2, " Loading template... ");
|
|
213
230
|
i0.ɵɵelementEnd();
|
|
214
231
|
} }
|
|
215
|
-
function
|
|
216
|
-
const
|
|
217
|
-
i0.ɵɵelementStart(0, "button",
|
|
218
|
-
i0.ɵɵlistener("click", function
|
|
219
|
-
i0.ɵɵelement(1, "i",
|
|
232
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
233
|
+
const _r9 = i0.ɵɵgetCurrentView();
|
|
234
|
+
i0.ɵɵelementStart(0, "button", 87);
|
|
235
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.createNewTemplate()); });
|
|
236
|
+
i0.ɵɵelement(1, "i", 88);
|
|
220
237
|
i0.ɵɵtext(2, " Create New Template ");
|
|
221
238
|
i0.ɵɵelementEnd();
|
|
222
239
|
} }
|
|
223
|
-
function
|
|
224
|
-
const
|
|
225
|
-
i0.ɵɵelementStart(0, "button",
|
|
226
|
-
i0.ɵɵlistener("click", function
|
|
227
|
-
i0.ɵɵelement(1, "i",
|
|
240
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
241
|
+
const _r10 = i0.ɵɵgetCurrentView();
|
|
242
|
+
i0.ɵɵelementStart(0, "button", 89);
|
|
243
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.linkExistingTemplate()); });
|
|
244
|
+
i0.ɵɵelement(1, "i", 90);
|
|
228
245
|
i0.ɵɵtext(2, " Link Existing Template ");
|
|
229
246
|
i0.ɵɵelementEnd();
|
|
230
247
|
} }
|
|
231
|
-
function
|
|
232
|
-
i0.ɵɵelementStart(0, "mj-empty-state",
|
|
233
|
-
i0.ɵɵconditionalCreate(2,
|
|
234
|
-
i0.ɵɵconditionalCreate(3,
|
|
248
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Template(rf, ctx) { if (rf & 1) {
|
|
249
|
+
i0.ɵɵelementStart(0, "mj-empty-state", 34)(1, "div", 84);
|
|
250
|
+
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_2_Template, 3, 0, "button", 85);
|
|
251
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_3_Template, 3, 0, "button", 86);
|
|
235
252
|
i0.ɵɵelementEnd()();
|
|
236
253
|
} if (rf & 2) {
|
|
237
254
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -240,48 +257,48 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Template(r
|
|
|
240
257
|
i0.ɵɵadvance();
|
|
241
258
|
i0.ɵɵconditional(ctx_r1.UserCanReadTemplates ? 3 : -1);
|
|
242
259
|
} }
|
|
243
|
-
function
|
|
244
|
-
const
|
|
245
|
-
i0.ɵɵelementStart(0, "button",
|
|
246
|
-
i0.ɵɵlistener("click", function
|
|
247
|
-
i0.ɵɵelement(1, "i",
|
|
260
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
261
|
+
const _r12 = i0.ɵɵgetCurrentView();
|
|
262
|
+
i0.ɵɵelementStart(0, "button", 87);
|
|
263
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.createNewTemplate()); });
|
|
264
|
+
i0.ɵɵelement(1, "i", 88);
|
|
248
265
|
i0.ɵɵtext(2, " Create New Template ");
|
|
249
266
|
i0.ɵɵelementEnd();
|
|
250
267
|
} }
|
|
251
|
-
function
|
|
252
|
-
const
|
|
253
|
-
i0.ɵɵelementStart(0, "mj-empty-state",
|
|
254
|
-
i0.ɵɵlistener("click", function
|
|
255
|
-
i0.ɵɵelement(3, "i",
|
|
268
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Template(rf, ctx) { if (rf & 1) {
|
|
269
|
+
const _r11 = i0.ɵɵgetCurrentView();
|
|
270
|
+
i0.ɵɵelementStart(0, "mj-empty-state", 35)(1, "div", 84)(2, "button", 89);
|
|
271
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.loadTemplate()); });
|
|
272
|
+
i0.ɵɵelement(3, "i", 91);
|
|
256
273
|
i0.ɵɵtext(4, " Retry Loading ");
|
|
257
274
|
i0.ɵɵelementEnd();
|
|
258
|
-
i0.ɵɵconditionalCreate(5,
|
|
275
|
+
i0.ɵɵconditionalCreate(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Template, 3, 0, "button", 85);
|
|
259
276
|
i0.ɵɵelementEnd()();
|
|
260
277
|
} if (rf & 2) {
|
|
261
278
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
262
279
|
i0.ɵɵadvance(5);
|
|
263
280
|
i0.ɵɵconditional(ctx_r1.UserCanCreateTemplates ? 5 : -1);
|
|
264
281
|
} }
|
|
265
|
-
function
|
|
266
|
-
const
|
|
267
|
-
i0.ɵɵelementStart(0, "button",
|
|
268
|
-
i0.ɵɵlistener("click", function
|
|
269
|
-
i0.ɵɵelement(1, "i",
|
|
282
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_43_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
283
|
+
const _r14 = i0.ɵɵgetCurrentView();
|
|
284
|
+
i0.ɵɵelementStart(0, "button", 97);
|
|
285
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_43_Conditional_1_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.linkExistingTemplate()); });
|
|
286
|
+
i0.ɵɵelement(1, "i", 98);
|
|
270
287
|
i0.ɵɵtext(2, " Change Template ");
|
|
271
288
|
i0.ɵɵelementEnd();
|
|
272
289
|
} }
|
|
273
|
-
function
|
|
274
|
-
const
|
|
275
|
-
i0.ɵɵelementStart(0, "button",
|
|
276
|
-
i0.ɵɵlistener("click", function
|
|
277
|
-
i0.ɵɵelement(1, "i",
|
|
290
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_43_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
291
|
+
const _r15 = i0.ɵɵgetCurrentView();
|
|
292
|
+
i0.ɵɵelementStart(0, "button", 99);
|
|
293
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_43_Conditional_1_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.openTemplateInNewWindow()); });
|
|
294
|
+
i0.ɵɵelement(1, "i", 100);
|
|
278
295
|
i0.ɵɵtext(2, " Open in New Window ");
|
|
279
296
|
i0.ɵɵelementEnd();
|
|
280
297
|
} }
|
|
281
|
-
function
|
|
282
|
-
i0.ɵɵelementStart(0, "div",
|
|
283
|
-
i0.ɵɵconditionalCreate(1,
|
|
284
|
-
i0.ɵɵconditionalCreate(2,
|
|
298
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_43_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
299
|
+
i0.ɵɵelementStart(0, "div", 92);
|
|
300
|
+
i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_43_Conditional_1_Conditional_1_Template, 3, 0, "button", 95);
|
|
301
|
+
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_43_Conditional_1_Conditional_2_Template, 3, 0, "button", 96);
|
|
285
302
|
i0.ɵɵelementEnd();
|
|
286
303
|
} if (rf & 2) {
|
|
287
304
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -290,12 +307,12 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditiona
|
|
|
290
307
|
i0.ɵɵadvance();
|
|
291
308
|
i0.ɵɵconditional(ctx_r1.UserCanReadTemplates ? 2 : -1);
|
|
292
309
|
} }
|
|
293
|
-
function
|
|
294
|
-
const
|
|
295
|
-
i0.ɵɵelementStart(0, "div",
|
|
296
|
-
i0.ɵɵconditionalCreate(1,
|
|
297
|
-
i0.ɵɵelementStart(2, "div",
|
|
298
|
-
i0.ɵɵlistener("contentChange", function
|
|
310
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_43_Template(rf, ctx) { if (rf & 1) {
|
|
311
|
+
const _r13 = i0.ɵɵgetCurrentView();
|
|
312
|
+
i0.ɵɵelementStart(0, "div", 36);
|
|
313
|
+
i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_43_Conditional_1_Template, 3, 2, "div", 92);
|
|
314
|
+
i0.ɵɵelementStart(2, "div", 93)(3, "mj-template-editor", 94, 1);
|
|
315
|
+
i0.ɵɵlistener("contentChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_43_Template_mj_template_editor_contentChange_3_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onTemplateContentChange($event)); })("runTemplate", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_43_Template_mj_template_editor_runTemplate_3_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onTemplateRun($event)); });
|
|
299
316
|
i0.ɵɵelementEnd()()();
|
|
300
317
|
} if (rf & 2) {
|
|
301
318
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -304,8 +321,8 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Template(r
|
|
|
304
321
|
i0.ɵɵadvance(2);
|
|
305
322
|
i0.ɵɵproperty("template", ctx_r1.template)("config", ctx_r1.templateEditorConfig);
|
|
306
323
|
} }
|
|
307
|
-
function
|
|
308
|
-
i0.ɵɵelementStart(0, "span",
|
|
324
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
325
|
+
i0.ɵɵelementStart(0, "span", 104);
|
|
309
326
|
i0.ɵɵtext(1);
|
|
310
327
|
i0.ɵɵelementEnd();
|
|
311
328
|
} if (rf & 2) {
|
|
@@ -313,13 +330,13 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_ng_templat
|
|
|
313
330
|
i0.ɵɵadvance();
|
|
314
331
|
i0.ɵɵtextInterpolate(ctx_r1.promptModels.length);
|
|
315
332
|
} }
|
|
316
|
-
function
|
|
317
|
-
i0.ɵɵelementStart(0, "span",
|
|
318
|
-
i0.ɵɵelement(1, "i",
|
|
333
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
334
|
+
i0.ɵɵelementStart(0, "span", 81);
|
|
335
|
+
i0.ɵɵelement(1, "i", 103);
|
|
319
336
|
i0.ɵɵtext(2, " Models ");
|
|
320
|
-
i0.ɵɵconditionalCreate(3,
|
|
321
|
-
i0.ɵɵelementStart(4, "span",
|
|
322
|
-
i0.ɵɵelement(5, "i",
|
|
337
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_ng_template_1_Conditional_3_Template, 2, 1, "span", 104);
|
|
338
|
+
i0.ɵɵelementStart(4, "span", 105);
|
|
339
|
+
i0.ɵɵelement(5, "i", 106);
|
|
323
340
|
i0.ɵɵtext(6, " Priority order (first available model will be used) ");
|
|
324
341
|
i0.ɵɵelementEnd()();
|
|
325
342
|
} if (rf & 2) {
|
|
@@ -327,257 +344,257 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_ng_templat
|
|
|
327
344
|
i0.ɵɵadvance(3);
|
|
328
345
|
i0.ɵɵconditional(ctx_r1.promptModels.length > 0 ? 3 : -1);
|
|
329
346
|
} }
|
|
330
|
-
function
|
|
331
|
-
i0.ɵɵelementStart(0, "div",
|
|
332
|
-
i0.ɵɵelement(1, "i",
|
|
347
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
348
|
+
i0.ɵɵelementStart(0, "div", 102);
|
|
349
|
+
i0.ɵɵelement(1, "i", 69);
|
|
333
350
|
i0.ɵɵtext(2, " Loading models... ");
|
|
334
351
|
i0.ɵɵelementEnd();
|
|
335
352
|
} }
|
|
336
|
-
function
|
|
337
|
-
const
|
|
338
|
-
i0.ɵɵelementStart(0, "button",
|
|
339
|
-
i0.ɵɵlistener("click", function
|
|
340
|
-
i0.ɵɵelement(1, "i",
|
|
353
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
354
|
+
const _r16 = i0.ɵɵgetCurrentView();
|
|
355
|
+
i0.ɵɵelementStart(0, "button", 109);
|
|
356
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_0_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addNewModel()); });
|
|
357
|
+
i0.ɵɵelement(1, "i", 88);
|
|
341
358
|
i0.ɵɵtext(2, " Add Model ");
|
|
342
359
|
i0.ɵɵelementEnd();
|
|
343
360
|
} }
|
|
344
|
-
function
|
|
345
|
-
i0.ɵɵelementStart(0, "mj-empty-state",
|
|
346
|
-
i0.ɵɵconditionalCreate(1,
|
|
361
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
362
|
+
i0.ɵɵelementStart(0, "mj-empty-state", 107);
|
|
363
|
+
i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_0_Conditional_1_Template, 3, 0, "button", 108);
|
|
347
364
|
i0.ɵɵelementEnd();
|
|
348
365
|
} if (rf & 2) {
|
|
349
366
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
350
367
|
i0.ɵɵadvance();
|
|
351
368
|
i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.UserCanCreatePromptModels ? 1 : -1);
|
|
352
369
|
} }
|
|
353
|
-
function
|
|
354
|
-
i0.ɵɵelementStart(0, "div",
|
|
355
|
-
i0.ɵɵelement(1, "i",
|
|
370
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
371
|
+
i0.ɵɵelementStart(0, "div", 110);
|
|
372
|
+
i0.ɵɵelement(1, "i", 115);
|
|
356
373
|
i0.ɵɵtext(2, " Models are tried in priority order (highest priority first). The first available model that meets requirements will be used for execution. ");
|
|
357
374
|
i0.ɵɵelementEnd();
|
|
358
375
|
} }
|
|
359
|
-
function
|
|
360
|
-
i0.ɵɵelement(0, "i",
|
|
361
|
-
i0.ɵɵelementStart(1, "span",
|
|
376
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
377
|
+
i0.ɵɵelement(0, "i", 131);
|
|
378
|
+
i0.ɵɵelementStart(1, "span", 132);
|
|
362
379
|
i0.ɵɵtext(2);
|
|
363
380
|
i0.ɵɵelementEnd();
|
|
364
381
|
} if (rf & 2) {
|
|
365
|
-
const ɵ$
|
|
382
|
+
const ɵ$index_299_r18 = i0.ɵɵnextContext().$index;
|
|
366
383
|
i0.ɵɵadvance(2);
|
|
367
|
-
i0.ɵɵtextInterpolate1("#", ɵ$
|
|
384
|
+
i0.ɵɵtextInterpolate1("#", ɵ$index_299_r18 + 1);
|
|
368
385
|
} }
|
|
369
|
-
function
|
|
370
|
-
i0.ɵɵelementStart(0, "span",
|
|
386
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
387
|
+
i0.ɵɵelementStart(0, "span", 118);
|
|
371
388
|
i0.ɵɵtext(1);
|
|
372
389
|
i0.ɵɵelementEnd();
|
|
373
390
|
} if (rf & 2) {
|
|
374
|
-
const
|
|
375
|
-
const
|
|
376
|
-
const ɵ$
|
|
377
|
-
i0.ɵɵproperty("title", i0.ɵɵinterpolate1("Priority ",
|
|
391
|
+
const ctx_r18 = i0.ɵɵnextContext();
|
|
392
|
+
const model_r20 = ctx_r18.$implicit;
|
|
393
|
+
const ɵ$index_299_r18 = ctx_r18.$index;
|
|
394
|
+
i0.ɵɵproperty("title", i0.ɵɵinterpolate1("Priority ", model_r20.Priority, " - Higher priority numbers are tried first"));
|
|
378
395
|
i0.ɵɵadvance();
|
|
379
|
-
i0.ɵɵtextInterpolate1("#", ɵ$
|
|
396
|
+
i0.ɵɵtextInterpolate1("#", ɵ$index_299_r18 + 1);
|
|
380
397
|
} }
|
|
381
|
-
function
|
|
382
|
-
const
|
|
383
|
-
i0.ɵɵelementStart(0, "mj-dropdown",
|
|
384
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
385
|
-
i0.ɵɵlistener("ValueChange", function
|
|
398
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
399
|
+
const _r21 = i0.ɵɵgetCurrentView();
|
|
400
|
+
i0.ɵɵelementStart(0, "mj-dropdown", 133);
|
|
401
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_5_Template_mj_dropdown_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r21); const model_r20 = i0.ɵɵnextContext().$implicit; i0.ɵɵtwoWayBindingSet(model_r20.ModelID, $event) || (model_r20.ModelID = $event); return i0.ɵɵresetView($event); });
|
|
402
|
+
i0.ɵɵlistener("ValueChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_5_Template_mj_dropdown_ValueChange_0_listener($event) { i0.ɵɵrestoreView(_r21); const ɵ$index_299_r18 = i0.ɵɵnextContext().$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onModelChange($event, ɵ$index_299_r18)); });
|
|
386
403
|
i0.ɵɵelementEnd();
|
|
387
404
|
} if (rf & 2) {
|
|
388
|
-
const
|
|
405
|
+
const model_r20 = i0.ɵɵnextContext().$implicit;
|
|
389
406
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
390
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
391
|
-
i0.ɵɵproperty("name", "modelId_" + ctx_r1.getModelTrackId(
|
|
407
|
+
i0.ɵɵtwoWayProperty("ngModel", model_r20.ModelID);
|
|
408
|
+
i0.ɵɵproperty("name", "modelId_" + ctx_r1.getModelTrackId(model_r20))("Data", ctx_r1.availableModels)("ValuePrimitive", true)("Filterable", true);
|
|
392
409
|
} }
|
|
393
|
-
function
|
|
410
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
394
411
|
i0.ɵɵelementStart(0, "span", 22);
|
|
395
412
|
i0.ɵɵtext(1);
|
|
396
413
|
i0.ɵɵelementEnd();
|
|
397
414
|
} if (rf & 2) {
|
|
398
|
-
const
|
|
415
|
+
const model_r20 = i0.ɵɵnextContext().$implicit;
|
|
399
416
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
400
417
|
i0.ɵɵadvance();
|
|
401
|
-
i0.ɵɵtextInterpolate(ctx_r1.getModelDisplayName(
|
|
418
|
+
i0.ɵɵtextInterpolate(ctx_r1.getModelDisplayName(model_r20.ModelID));
|
|
402
419
|
} }
|
|
403
|
-
function
|
|
404
|
-
const
|
|
405
|
-
i0.ɵɵelementStart(0, "mj-dropdown",
|
|
406
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
420
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
421
|
+
const _r22 = i0.ɵɵgetCurrentView();
|
|
422
|
+
i0.ɵɵelementStart(0, "mj-dropdown", 136);
|
|
423
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_Template_mj_dropdown_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r22); const model_r20 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r20.VendorID, $event) || (model_r20.VendorID = $event); return i0.ɵɵresetView($event); });
|
|
407
424
|
i0.ɵɵelementEnd();
|
|
408
425
|
} if (rf & 2) {
|
|
409
|
-
const
|
|
426
|
+
const model_r20 = i0.ɵɵnextContext(3).$implicit;
|
|
410
427
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
411
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
412
|
-
i0.ɵɵproperty("name", "vendorId_" + ctx_r1.getModelTrackId(
|
|
428
|
+
i0.ɵɵtwoWayProperty("ngModel", model_r20.VendorID);
|
|
429
|
+
i0.ɵɵproperty("name", "vendorId_" + ctx_r1.getModelTrackId(model_r20))("Data", ctx_r1.getVendorsForModelSync(model_r20.ModelID))("ValuePrimitive", true)("Filterable", true);
|
|
413
430
|
} }
|
|
414
|
-
function
|
|
415
|
-
i0.ɵɵelementStart(0, "span",
|
|
431
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
432
|
+
i0.ɵɵelementStart(0, "span", 139);
|
|
416
433
|
i0.ɵɵtext(1);
|
|
417
434
|
i0.ɵɵelementEnd();
|
|
418
435
|
} if (rf & 2) {
|
|
419
|
-
const
|
|
436
|
+
const model_r20 = i0.ɵɵnextContext(5).$implicit;
|
|
420
437
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
421
438
|
i0.ɵɵadvance();
|
|
422
|
-
i0.ɵɵtextInterpolate1("(", ctx_r1.getModelVendorStatus(
|
|
439
|
+
i0.ɵɵtextInterpolate1("(", ctx_r1.getModelVendorStatus(model_r20.ModelID, ctx_r1.getVendorsForModelSync(model_r20.ModelID)[0].ID), ")");
|
|
423
440
|
} }
|
|
424
|
-
function
|
|
425
|
-
i0.ɵɵelementStart(0, "span",
|
|
441
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
442
|
+
i0.ɵɵelementStart(0, "span", 138);
|
|
426
443
|
i0.ɵɵtext(1);
|
|
427
|
-
i0.ɵɵconditionalCreate(2,
|
|
444
|
+
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Conditional_2_Template, 2, 1, "span", 139);
|
|
428
445
|
i0.ɵɵelementEnd();
|
|
429
446
|
} if (rf & 2) {
|
|
430
|
-
const
|
|
447
|
+
const model_r20 = i0.ɵɵnextContext(4).$implicit;
|
|
431
448
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
432
|
-
i0.ɵɵstyleProp("color", ctx_r1.getVendorStatusColor(
|
|
449
|
+
i0.ɵɵstyleProp("color", ctx_r1.getVendorStatusColor(model_r20.ModelID, ctx_r1.getVendorsForModelSync(model_r20.ModelID)[0].ID));
|
|
433
450
|
i0.ɵɵadvance();
|
|
434
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.getVendorsForModelSync(
|
|
451
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.getVendorsForModelSync(model_r20.ModelID)[0].Name, " ");
|
|
435
452
|
i0.ɵɵadvance();
|
|
436
|
-
i0.ɵɵconditional(ctx_r1.getModelVendorStatus(
|
|
453
|
+
i0.ɵɵconditional(ctx_r1.getModelVendorStatus(model_r20.ModelID, ctx_r1.getVendorsForModelSync(model_r20.ModelID)[0].ID) !== "Active" ? 2 : -1);
|
|
437
454
|
} }
|
|
438
|
-
function
|
|
439
|
-
i0.ɵɵelementStart(0, "span",
|
|
455
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
456
|
+
i0.ɵɵelementStart(0, "span", 134);
|
|
440
457
|
i0.ɵɵtext(1, "No vendors available");
|
|
441
458
|
i0.ɵɵelementEnd();
|
|
442
459
|
} }
|
|
443
|
-
function
|
|
444
|
-
i0.ɵɵconditionalCreate(0,
|
|
460
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
461
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Template, 3, 4, "span", 137)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_1_Template, 2, 0, "span", 134);
|
|
445
462
|
} if (rf & 2) {
|
|
446
|
-
const
|
|
463
|
+
const model_r20 = i0.ɵɵnextContext(3).$implicit;
|
|
447
464
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
448
|
-
i0.ɵɵconditional(ctx_r1.getVendorsForModelSync(
|
|
465
|
+
i0.ɵɵconditional(ctx_r1.getVendorsForModelSync(model_r20.ModelID).length === 1 ? 0 : 1);
|
|
449
466
|
} }
|
|
450
|
-
function
|
|
451
|
-
i0.ɵɵconditionalCreate(0,
|
|
467
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
468
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_Template, 1, 5, "mj-dropdown", 135)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Template, 2, 1);
|
|
452
469
|
} if (rf & 2) {
|
|
453
|
-
const
|
|
470
|
+
const model_r20 = i0.ɵɵnextContext(2).$implicit;
|
|
454
471
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
455
|
-
i0.ɵɵconditional(ctx_r1.shouldShowVendorDropdown(
|
|
472
|
+
i0.ɵɵconditional(ctx_r1.shouldShowVendorDropdown(model_r20.ModelID) ? 0 : 1);
|
|
456
473
|
} }
|
|
457
|
-
function
|
|
458
|
-
i0.ɵɵelementStart(0, "span",
|
|
474
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
475
|
+
i0.ɵɵelementStart(0, "span", 134);
|
|
459
476
|
i0.ɵɵtext(1, "Select model first");
|
|
460
477
|
i0.ɵɵelementEnd();
|
|
461
478
|
} }
|
|
462
|
-
function
|
|
463
|
-
i0.ɵɵconditionalCreate(0,
|
|
479
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
480
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Template, 2, 1)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_1_Template, 2, 0, "span", 134);
|
|
464
481
|
} if (rf & 2) {
|
|
465
|
-
const
|
|
466
|
-
i0.ɵɵconditional(
|
|
482
|
+
const model_r20 = i0.ɵɵnextContext().$implicit;
|
|
483
|
+
i0.ɵɵconditional(model_r20.ModelID ? 0 : 1);
|
|
467
484
|
} }
|
|
468
|
-
function
|
|
469
|
-
i0.ɵɵelementStart(0, "span",
|
|
485
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
486
|
+
i0.ɵɵelementStart(0, "span", 139);
|
|
470
487
|
i0.ɵɵtext(1);
|
|
471
488
|
i0.ɵɵelementEnd();
|
|
472
489
|
} if (rf & 2) {
|
|
473
|
-
const
|
|
490
|
+
const model_r20 = i0.ɵɵnextContext(3).$implicit;
|
|
474
491
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
475
492
|
i0.ɵɵadvance();
|
|
476
|
-
i0.ɵɵtextInterpolate1("(", ctx_r1.getModelVendorStatus(
|
|
493
|
+
i0.ɵɵtextInterpolate1("(", ctx_r1.getModelVendorStatus(model_r20.ModelID, model_r20.VendorID), ")");
|
|
477
494
|
} }
|
|
478
|
-
function
|
|
479
|
-
i0.ɵɵelementStart(0, "span",
|
|
495
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
496
|
+
i0.ɵɵelementStart(0, "span", 123);
|
|
480
497
|
i0.ɵɵtext(1);
|
|
481
|
-
i0.ɵɵconditionalCreate(2,
|
|
498
|
+
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Conditional_2_Template, 2, 1, "span", 139);
|
|
482
499
|
i0.ɵɵelementEnd();
|
|
483
500
|
} if (rf & 2) {
|
|
484
|
-
const
|
|
501
|
+
const model_r20 = i0.ɵɵnextContext(2).$implicit;
|
|
485
502
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
486
|
-
i0.ɵɵstyleProp("color", ctx_r1.getVendorStatusColor(
|
|
503
|
+
i0.ɵɵstyleProp("color", ctx_r1.getVendorStatusColor(model_r20.ModelID, model_r20.VendorID));
|
|
487
504
|
i0.ɵɵadvance();
|
|
488
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.getVendorDisplayName(
|
|
505
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.getVendorDisplayName(model_r20.VendorID), " ");
|
|
489
506
|
i0.ɵɵadvance();
|
|
490
|
-
i0.ɵɵconditional(ctx_r1.getModelVendorStatus(
|
|
507
|
+
i0.ɵɵconditional(ctx_r1.getModelVendorStatus(model_r20.ModelID, model_r20.VendorID) !== "Active" ? 2 : -1);
|
|
491
508
|
} }
|
|
492
|
-
function
|
|
493
|
-
i0.ɵɵelementStart(0, "span",
|
|
509
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
510
|
+
i0.ɵɵelementStart(0, "span", 141);
|
|
494
511
|
i0.ɵɵtext(1, "-");
|
|
495
512
|
i0.ɵɵelementEnd();
|
|
496
513
|
} }
|
|
497
|
-
function
|
|
498
|
-
i0.ɵɵconditionalCreate(0,
|
|
514
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
515
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Template, 3, 4, "span", 140)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_1_Template, 2, 0, "span", 141);
|
|
499
516
|
} if (rf & 2) {
|
|
500
|
-
const
|
|
501
|
-
i0.ɵɵconditional(
|
|
517
|
+
const model_r20 = i0.ɵɵnextContext().$implicit;
|
|
518
|
+
i0.ɵɵconditional(model_r20.VendorID && model_r20.ModelID ? 0 : 1);
|
|
502
519
|
} }
|
|
503
|
-
function
|
|
504
|
-
i0.ɵɵelementStart(0, "div",
|
|
505
|
-
i0.ɵɵelement(1, "i",
|
|
520
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
521
|
+
i0.ɵɵelementStart(0, "div", 142);
|
|
522
|
+
i0.ɵɵelement(1, "i", 69);
|
|
506
523
|
i0.ɵɵtext(2, " Loading... ");
|
|
507
524
|
i0.ɵɵelementEnd();
|
|
508
525
|
} }
|
|
509
|
-
function
|
|
510
|
-
const
|
|
511
|
-
i0.ɵɵelementStart(0, "mj-dropdown",
|
|
512
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
513
|
-
i0.ɵɵlistener("ValueChange", function
|
|
526
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
527
|
+
const _r23 = i0.ɵɵgetCurrentView();
|
|
528
|
+
i0.ɵɵelementStart(0, "mj-dropdown", 144);
|
|
529
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template_mj_dropdown_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r23); const model_r20 = i0.ɵɵnextContext(2).$implicit; i0.ɵɵtwoWayBindingSet(model_r20.ConfigurationID, $event) || (model_r20.ConfigurationID = $event); return i0.ɵɵresetView($event); });
|
|
530
|
+
i0.ɵɵlistener("ValueChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template_mj_dropdown_ValueChange_0_listener($event) { i0.ɵɵrestoreView(_r23); const ɵ$index_299_r18 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onConfigurationChange($event, ɵ$index_299_r18)); });
|
|
514
531
|
i0.ɵɵelementEnd();
|
|
515
532
|
} if (rf & 2) {
|
|
516
|
-
const
|
|
533
|
+
const model_r20 = i0.ɵɵnextContext(2).$implicit;
|
|
517
534
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
518
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
519
|
-
i0.ɵɵproperty("name", "configurationId_" + ctx_r1.getModelTrackId(
|
|
535
|
+
i0.ɵɵtwoWayProperty("ngModel", model_r20.ConfigurationID);
|
|
536
|
+
i0.ɵɵproperty("name", "configurationId_" + ctx_r1.getModelTrackId(model_r20))("Data", ctx_r1.availableConfigurations)("ValuePrimitive", true)("Filterable", true);
|
|
520
537
|
} }
|
|
521
|
-
function
|
|
522
|
-
i0.ɵɵconditionalCreate(0,
|
|
538
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
539
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_0_Template, 3, 0, "div", 142)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template, 1, 5, "mj-dropdown", 143);
|
|
523
540
|
} if (rf & 2) {
|
|
524
541
|
const ctx_r1 = i0.ɵɵnextContext(6);
|
|
525
542
|
i0.ɵɵconditional(ctx_r1.isLoadingConfigurations ? 0 : 1);
|
|
526
543
|
} }
|
|
527
|
-
function
|
|
528
|
-
i0.ɵɵelementStart(0, "span",
|
|
544
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
545
|
+
i0.ɵɵelementStart(0, "span", 123);
|
|
529
546
|
i0.ɵɵtext(1);
|
|
530
547
|
i0.ɵɵelementEnd();
|
|
531
548
|
} if (rf & 2) {
|
|
532
|
-
const
|
|
549
|
+
const model_r20 = i0.ɵɵnextContext().$implicit;
|
|
533
550
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
534
551
|
i0.ɵɵadvance();
|
|
535
|
-
i0.ɵɵtextInterpolate(ctx_r1.getConfigurationDisplayName(
|
|
552
|
+
i0.ɵɵtextInterpolate(ctx_r1.getConfigurationDisplayName(model_r20.ConfigurationID));
|
|
536
553
|
} }
|
|
537
|
-
function
|
|
538
|
-
i0.ɵɵelementStart(0, "span",
|
|
554
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
555
|
+
i0.ɵɵelementStart(0, "span", 125);
|
|
539
556
|
i0.ɵɵtext(1);
|
|
540
557
|
i0.ɵɵpipe(2, "date");
|
|
541
558
|
i0.ɵɵelementEnd();
|
|
542
559
|
} if (rf & 2) {
|
|
543
|
-
const
|
|
560
|
+
const model_r20 = i0.ɵɵnextContext().$implicit;
|
|
544
561
|
i0.ɵɵadvance();
|
|
545
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(2, 1,
|
|
562
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(2, 1, model_r20.__mj_CreatedAt, "short"));
|
|
546
563
|
} }
|
|
547
|
-
function
|
|
548
|
-
i0.ɵɵelementStart(0, "span",
|
|
564
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
565
|
+
i0.ɵɵelementStart(0, "span", 126);
|
|
549
566
|
i0.ɵɵtext(1, "New");
|
|
550
567
|
i0.ɵɵelementEnd();
|
|
551
568
|
} }
|
|
552
|
-
function
|
|
553
|
-
const
|
|
554
|
-
i0.ɵɵelementStart(0, "button",
|
|
555
|
-
i0.ɵɵlistener("click", function
|
|
556
|
-
i0.ɵɵelement(1, "i",
|
|
569
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
570
|
+
const _r24 = i0.ɵɵgetCurrentView();
|
|
571
|
+
i0.ɵɵelementStart(0, "button", 147);
|
|
572
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r24); const ɵ$index_299_r18 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.moveModelUp(ɵ$index_299_r18)); });
|
|
573
|
+
i0.ɵɵelement(1, "i", 148);
|
|
557
574
|
i0.ɵɵelementEnd();
|
|
558
|
-
i0.ɵɵelementStart(2, "button",
|
|
559
|
-
i0.ɵɵlistener("click", function
|
|
560
|
-
i0.ɵɵelement(3, "i",
|
|
575
|
+
i0.ɵɵelementStart(2, "button", 149);
|
|
576
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r24); const ɵ$index_299_r18 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.moveModelDown(ɵ$index_299_r18)); });
|
|
577
|
+
i0.ɵɵelement(3, "i", 150);
|
|
561
578
|
i0.ɵɵelementEnd();
|
|
562
579
|
} if (rf & 2) {
|
|
563
|
-
const ɵ$
|
|
580
|
+
const ɵ$index_299_r18 = i0.ɵɵnextContext(2).$index;
|
|
564
581
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
565
|
-
i0.ɵɵproperty("disabled", ɵ$
|
|
582
|
+
i0.ɵɵproperty("disabled", ɵ$index_299_r18 === 0);
|
|
566
583
|
i0.ɵɵadvance(2);
|
|
567
|
-
i0.ɵɵproperty("disabled", ɵ$
|
|
584
|
+
i0.ɵɵproperty("disabled", ɵ$index_299_r18 === ctx_r1.promptModels.length - 1);
|
|
568
585
|
} }
|
|
569
|
-
function
|
|
570
|
-
const
|
|
571
|
-
i0.ɵɵelementStart(0, "button",
|
|
572
|
-
i0.ɵɵlistener("click", function
|
|
573
|
-
i0.ɵɵelement(1, "i",
|
|
586
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
587
|
+
const _r25 = i0.ɵɵgetCurrentView();
|
|
588
|
+
i0.ɵɵelementStart(0, "button", 151);
|
|
589
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r25); const ɵ$index_299_r18 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.removePromptModel(ɵ$index_299_r18)); });
|
|
590
|
+
i0.ɵɵelement(1, "i", 152);
|
|
574
591
|
i0.ɵɵelementEnd();
|
|
575
592
|
} }
|
|
576
|
-
function
|
|
577
|
-
i0.ɵɵelementStart(0, "div",
|
|
578
|
-
i0.ɵɵconditionalCreate(1,
|
|
593
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
594
|
+
i0.ɵɵelementStart(0, "div", 145);
|
|
595
|
+
i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template, 4, 2);
|
|
579
596
|
i0.ɵɵelementEnd();
|
|
580
|
-
i0.ɵɵconditionalCreate(2,
|
|
597
|
+
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_2_Template, 2, 0, "button", 146);
|
|
581
598
|
} if (rf & 2) {
|
|
582
599
|
const ctx_r1 = i0.ɵɵnextContext(6);
|
|
583
600
|
i0.ɵɵadvance();
|
|
@@ -585,166 +602,166 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
585
602
|
i0.ɵɵadvance();
|
|
586
603
|
i0.ɵɵconditional(ctx_r1.UserCanDeletePromptModels ? 2 : -1);
|
|
587
604
|
} }
|
|
588
|
-
function
|
|
605
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
589
606
|
i0.ɵɵelementStart(0, "span")(1, "strong");
|
|
590
607
|
i0.ɵɵtext(2, "Status:");
|
|
591
608
|
i0.ɵɵelementEnd();
|
|
592
609
|
i0.ɵɵtext(3);
|
|
593
610
|
i0.ɵɵelementEnd();
|
|
594
611
|
} if (rf & 2) {
|
|
595
|
-
const
|
|
612
|
+
const model_r20 = i0.ɵɵnextContext().$implicit;
|
|
596
613
|
i0.ɵɵadvance(3);
|
|
597
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
614
|
+
i0.ɵɵtextInterpolate1(" ", model_r20.Status);
|
|
598
615
|
} }
|
|
599
|
-
function
|
|
600
|
-
const
|
|
601
|
-
i0.ɵɵelementStart(0, "div")(1, "label",
|
|
616
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
617
|
+
const _r27 = i0.ɵɵgetCurrentView();
|
|
618
|
+
i0.ɵɵelementStart(0, "div")(1, "label", 157);
|
|
602
619
|
i0.ɵɵtext(2, "Parallel Count");
|
|
603
620
|
i0.ɵɵelementEnd();
|
|
604
|
-
i0.ɵɵelementStart(3, "mj-numeric-input",
|
|
605
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
621
|
+
i0.ɵɵelementStart(3, "mj-numeric-input", 159);
|
|
622
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_5_Template_mj_numeric_input_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r27); const model_r20 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r20.ParallelCount, $event) || (model_r20.ParallelCount = $event); return i0.ɵɵresetView($event); });
|
|
606
623
|
i0.ɵɵelementEnd()();
|
|
607
624
|
} if (rf & 2) {
|
|
608
|
-
const
|
|
609
|
-
const
|
|
610
|
-
const ɵ$
|
|
625
|
+
const ctx_r18 = i0.ɵɵnextContext(3);
|
|
626
|
+
const model_r20 = ctx_r18.$implicit;
|
|
627
|
+
const ɵ$index_299_r18 = ctx_r18.$index;
|
|
611
628
|
i0.ɵɵadvance(3);
|
|
612
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
613
|
-
i0.ɵɵproperty("name", "parallelCount_" + ɵ$
|
|
629
|
+
i0.ɵɵtwoWayProperty("ngModel", model_r20.ParallelCount);
|
|
630
|
+
i0.ɵɵproperty("name", "parallelCount_" + ɵ$index_299_r18)("Min", 1)("Step", 1)("Format", "n0");
|
|
614
631
|
} }
|
|
615
|
-
function
|
|
616
|
-
const
|
|
617
|
-
i0.ɵɵelementStart(0, "div")(1, "label",
|
|
632
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
633
|
+
const _r28 = i0.ɵɵgetCurrentView();
|
|
634
|
+
i0.ɵɵelementStart(0, "div")(1, "label", 157);
|
|
618
635
|
i0.ɵɵtext(2, "Config Parameter");
|
|
619
636
|
i0.ɵɵelementEnd();
|
|
620
|
-
i0.ɵɵelementStart(3, "input",
|
|
621
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
637
|
+
i0.ɵɵelementStart(3, "input", 160);
|
|
638
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_6_Template_input_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r28); const model_r20 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r20.ParallelConfigParam, $event) || (model_r20.ParallelConfigParam = $event); return i0.ɵɵresetView($event); });
|
|
622
639
|
i0.ɵɵelementEnd()();
|
|
623
640
|
} if (rf & 2) {
|
|
624
|
-
const
|
|
625
|
-
const
|
|
626
|
-
const ɵ$
|
|
641
|
+
const ctx_r18 = i0.ɵɵnextContext(3);
|
|
642
|
+
const model_r20 = ctx_r18.$implicit;
|
|
643
|
+
const ɵ$index_299_r18 = ctx_r18.$index;
|
|
627
644
|
i0.ɵɵadvance(3);
|
|
628
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
629
|
-
i0.ɵɵproperty("name", "parallelConfigParam_" + ɵ$
|
|
645
|
+
i0.ɵɵtwoWayProperty("ngModel", model_r20.ParallelConfigParam);
|
|
646
|
+
i0.ɵɵproperty("name", "parallelConfigParam_" + ɵ$index_299_r18);
|
|
630
647
|
} }
|
|
631
|
-
function
|
|
632
|
-
const
|
|
633
|
-
i0.ɵɵelementStart(0, "div",
|
|
648
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
649
|
+
const _r26 = i0.ɵɵgetCurrentView();
|
|
650
|
+
i0.ɵɵelementStart(0, "div", 155)(1, "div")(2, "label", 157);
|
|
634
651
|
i0.ɵɵtext(3, "Parallel Mode");
|
|
635
652
|
i0.ɵɵelementEnd();
|
|
636
|
-
i0.ɵɵelementStart(4, "mj-dropdown",
|
|
637
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
653
|
+
i0.ɵɵelementStart(4, "mj-dropdown", 158);
|
|
654
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Template_mj_dropdown_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r26); const model_r20 = i0.ɵɵnextContext(2).$implicit; i0.ɵɵtwoWayBindingSet(model_r20.ParallelizationMode, $event) || (model_r20.ParallelizationMode = $event); return i0.ɵɵresetView($event); });
|
|
638
655
|
i0.ɵɵelementEnd()();
|
|
639
|
-
i0.ɵɵconditionalCreate(5,
|
|
640
|
-
i0.ɵɵconditionalCreate(6,
|
|
656
|
+
i0.ɵɵconditionalCreate(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_5_Template, 4, 5, "div");
|
|
657
|
+
i0.ɵɵconditionalCreate(6, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_6_Template, 4, 2, "div");
|
|
641
658
|
i0.ɵɵelementEnd();
|
|
642
659
|
} if (rf & 2) {
|
|
643
|
-
const
|
|
644
|
-
const
|
|
645
|
-
const ɵ$
|
|
660
|
+
const ctx_r18 = i0.ɵɵnextContext(2);
|
|
661
|
+
const model_r20 = ctx_r18.$implicit;
|
|
662
|
+
const ɵ$index_299_r18 = ctx_r18.$index;
|
|
646
663
|
i0.ɵɵadvance(4);
|
|
647
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
648
|
-
i0.ɵɵproperty("name", "parallelMode_" + ɵ$
|
|
664
|
+
i0.ɵɵtwoWayProperty("ngModel", model_r20.ParallelizationMode);
|
|
665
|
+
i0.ɵɵproperty("name", "parallelMode_" + ɵ$index_299_r18)("Data", i0.ɵɵpureFunction3(9, _c4, i0.ɵɵpureFunction0(6, _c5), i0.ɵɵpureFunction0(7, _c6), i0.ɵɵpureFunction0(8, _c7)))("ValuePrimitive", true);
|
|
649
666
|
i0.ɵɵadvance();
|
|
650
|
-
i0.ɵɵconditional(
|
|
667
|
+
i0.ɵɵconditional(model_r20.ParallelizationMode === "StaticCount" ? 5 : -1);
|
|
651
668
|
i0.ɵɵadvance();
|
|
652
|
-
i0.ɵɵconditional(
|
|
669
|
+
i0.ɵɵconditional(model_r20.ParallelizationMode === "ConfigParam" ? 6 : -1);
|
|
653
670
|
} }
|
|
654
|
-
function
|
|
671
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
655
672
|
i0.ɵɵelementStart(0, "span")(1, "strong");
|
|
656
673
|
i0.ɵɵtext(2, "Parallel Mode:");
|
|
657
674
|
i0.ɵɵelementEnd();
|
|
658
675
|
i0.ɵɵtext(3);
|
|
659
676
|
i0.ɵɵelementEnd();
|
|
660
677
|
} if (rf & 2) {
|
|
661
|
-
const
|
|
678
|
+
const model_r20 = i0.ɵɵnextContext(3).$implicit;
|
|
662
679
|
i0.ɵɵadvance(3);
|
|
663
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
680
|
+
i0.ɵɵtextInterpolate1(" ", model_r20.ParallelizationMode);
|
|
664
681
|
} }
|
|
665
|
-
function
|
|
682
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
666
683
|
i0.ɵɵelementStart(0, "span")(1, "strong");
|
|
667
684
|
i0.ɵɵtext(2, "Parallel Count:");
|
|
668
685
|
i0.ɵɵelementEnd();
|
|
669
686
|
i0.ɵɵtext(3);
|
|
670
687
|
i0.ɵɵelementEnd();
|
|
671
688
|
} if (rf & 2) {
|
|
672
|
-
const
|
|
689
|
+
const model_r20 = i0.ɵɵnextContext(3).$implicit;
|
|
673
690
|
i0.ɵɵadvance(3);
|
|
674
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
691
|
+
i0.ɵɵtextInterpolate1(" ", model_r20.ParallelCount);
|
|
675
692
|
} }
|
|
676
|
-
function
|
|
693
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
677
694
|
i0.ɵɵelementStart(0, "span")(1, "strong");
|
|
678
695
|
i0.ɵɵtext(2, "Config Param:");
|
|
679
696
|
i0.ɵɵelementEnd();
|
|
680
697
|
i0.ɵɵtext(3);
|
|
681
698
|
i0.ɵɵelementEnd();
|
|
682
699
|
} if (rf & 2) {
|
|
683
|
-
const
|
|
700
|
+
const model_r20 = i0.ɵɵnextContext(3).$implicit;
|
|
684
701
|
i0.ɵɵadvance(3);
|
|
685
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
702
|
+
i0.ɵɵtextInterpolate1(" ", model_r20.ParallelConfigParam);
|
|
686
703
|
} }
|
|
687
|
-
function
|
|
688
|
-
i0.ɵɵelementStart(0, "div",
|
|
689
|
-
i0.ɵɵconditionalCreate(1,
|
|
690
|
-
i0.ɵɵconditionalCreate(2,
|
|
691
|
-
i0.ɵɵconditionalCreate(3,
|
|
704
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
705
|
+
i0.ɵɵelementStart(0, "div", 156);
|
|
706
|
+
i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_1_Template, 4, 1, "span");
|
|
707
|
+
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_2_Template, 4, 1, "span");
|
|
708
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_3_Template, 4, 1, "span");
|
|
692
709
|
i0.ɵɵelementEnd();
|
|
693
710
|
} if (rf & 2) {
|
|
694
|
-
const
|
|
711
|
+
const model_r20 = i0.ɵɵnextContext(2).$implicit;
|
|
695
712
|
i0.ɵɵadvance();
|
|
696
|
-
i0.ɵɵconditional(
|
|
713
|
+
i0.ɵɵconditional(model_r20.ParallelizationMode ? 1 : -1);
|
|
697
714
|
i0.ɵɵadvance();
|
|
698
|
-
i0.ɵɵconditional(
|
|
715
|
+
i0.ɵɵconditional(model_r20.ParallelCount ? 2 : -1);
|
|
699
716
|
i0.ɵɵadvance();
|
|
700
|
-
i0.ɵɵconditional(
|
|
717
|
+
i0.ɵɵconditional(model_r20.ParallelConfigParam ? 3 : -1);
|
|
701
718
|
} }
|
|
702
|
-
function
|
|
703
|
-
i0.ɵɵelementStart(0, "div",
|
|
704
|
-
i0.ɵɵelement(2, "i",
|
|
719
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
720
|
+
i0.ɵɵelementStart(0, "div", 130)(1, "div", 153);
|
|
721
|
+
i0.ɵɵelement(2, "i", 154);
|
|
705
722
|
i0.ɵɵtext(3, " Model-Specific Parallel Execution ");
|
|
706
723
|
i0.ɵɵelementEnd();
|
|
707
|
-
i0.ɵɵconditionalCreate(4,
|
|
724
|
+
i0.ɵɵconditionalCreate(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Template, 7, 13, "div", 155)(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Template, 4, 3, "div", 156);
|
|
708
725
|
i0.ɵɵelementEnd();
|
|
709
726
|
} if (rf & 2) {
|
|
710
727
|
const ctx_r1 = i0.ɵɵnextContext(6);
|
|
711
728
|
i0.ɵɵadvance(4);
|
|
712
729
|
i0.ɵɵconditional(ctx_r1.EditMode ? 4 : 5);
|
|
713
730
|
} }
|
|
714
|
-
function
|
|
715
|
-
const
|
|
716
|
-
i0.ɵɵelementStart(0, "div",
|
|
717
|
-
i0.ɵɵlistener("dragstart", function
|
|
718
|
-
i0.ɵɵelementStart(1, "div",
|
|
719
|
-
i0.ɵɵconditionalCreate(2,
|
|
731
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Template(rf, ctx) { if (rf & 1) {
|
|
732
|
+
const _r17 = i0.ɵɵgetCurrentView();
|
|
733
|
+
i0.ɵɵelementStart(0, "div", 116);
|
|
734
|
+
i0.ɵɵlistener("dragstart", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Template_div_dragstart_0_listener($event) { const ɵ$index_299_r18 = i0.ɵɵrestoreView(_r17).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDragStart($event, ɵ$index_299_r18)); })("dragover", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Template_div_dragover_0_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDragOver($event)); })("drop", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Template_div_drop_0_listener($event) { const ɵ$index_299_r18 = i0.ɵɵrestoreView(_r17).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDrop($event, ɵ$index_299_r18)); })("dragend", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Template_div_dragend_0_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDragEnd($event)); });
|
|
735
|
+
i0.ɵɵelementStart(1, "div", 117);
|
|
736
|
+
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_2_Template, 3, 1)(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_3_Template, 2, 3, "span", 118);
|
|
720
737
|
i0.ɵɵelementEnd();
|
|
721
|
-
i0.ɵɵelementStart(4, "div",
|
|
722
|
-
i0.ɵɵconditionalCreate(5,
|
|
738
|
+
i0.ɵɵelementStart(4, "div", 119);
|
|
739
|
+
i0.ɵɵconditionalCreate(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_5_Template, 1, 5, "mj-dropdown", 120)(6, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_6_Template, 2, 1, "span", 22);
|
|
723
740
|
i0.ɵɵelementEnd();
|
|
724
|
-
i0.ɵɵelementStart(7, "div",
|
|
725
|
-
i0.ɵɵconditionalCreate(8,
|
|
741
|
+
i0.ɵɵelementStart(7, "div", 121);
|
|
742
|
+
i0.ɵɵconditionalCreate(8, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_8_Template, 2, 1)(9, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_9_Template, 2, 1);
|
|
726
743
|
i0.ɵɵelementEnd();
|
|
727
|
-
i0.ɵɵelementStart(10, "div",
|
|
728
|
-
i0.ɵɵconditionalCreate(11,
|
|
744
|
+
i0.ɵɵelementStart(10, "div", 122);
|
|
745
|
+
i0.ɵɵconditionalCreate(11, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_11_Template, 2, 1)(12, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_12_Template, 2, 1, "span", 123);
|
|
729
746
|
i0.ɵɵelementEnd();
|
|
730
|
-
i0.ɵɵelementStart(13, "div",
|
|
731
|
-
i0.ɵɵconditionalCreate(14,
|
|
747
|
+
i0.ɵɵelementStart(13, "div", 124);
|
|
748
|
+
i0.ɵɵconditionalCreate(14, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_14_Template, 3, 4, "span", 125)(15, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_15_Template, 2, 0, "span", 126);
|
|
732
749
|
i0.ɵɵelementEnd();
|
|
733
|
-
i0.ɵɵelementStart(16, "div",
|
|
734
|
-
i0.ɵɵconditionalCreate(17,
|
|
750
|
+
i0.ɵɵelementStart(16, "div", 127);
|
|
751
|
+
i0.ɵɵconditionalCreate(17, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_17_Template, 3, 2);
|
|
735
752
|
i0.ɵɵelementEnd()();
|
|
736
|
-
i0.ɵɵelementStart(18, "div",
|
|
753
|
+
i0.ɵɵelementStart(18, "div", 128);
|
|
737
754
|
i0.ɵɵelement(19, "div");
|
|
738
|
-
i0.ɵɵelementStart(20, "div")(21, "div",
|
|
739
|
-
i0.ɵɵconditionalCreate(22,
|
|
755
|
+
i0.ɵɵelementStart(20, "div")(21, "div", 129);
|
|
756
|
+
i0.ɵɵconditionalCreate(22, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_22_Template, 4, 1, "span");
|
|
740
757
|
i0.ɵɵelementEnd();
|
|
741
|
-
i0.ɵɵconditionalCreate(23,
|
|
758
|
+
i0.ɵɵconditionalCreate(23, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Conditional_23_Template, 6, 1, "div", 130);
|
|
742
759
|
i0.ɵɵelementEnd()();
|
|
743
760
|
} if (rf & 2) {
|
|
744
|
-
const
|
|
745
|
-
const ɵ$
|
|
761
|
+
const model_r20 = ctx.$implicit;
|
|
762
|
+
const ɵ$index_299_r18 = ctx.$index;
|
|
746
763
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
747
|
-
i0.ɵɵstyleProp("background", !
|
|
764
|
+
i0.ɵɵstyleProp("background", !model_r20.ModelID ? "#fff3cd" : ctx_r1.draggedIndex === ɵ$index_299_r18 ? "color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface))" : "var(--mj-bg-surface-card)")("border-left", !model_r20.ModelID ? "3px solid #ffc107" : "none")("opacity", ctx_r1.draggedIndex === ɵ$index_299_r18 ? "0.5" : "1");
|
|
748
765
|
i0.ɵɵproperty("draggable", ctx_r1.EditMode);
|
|
749
766
|
i0.ɵɵadvance(2);
|
|
750
767
|
i0.ɵɵconditional(ctx_r1.EditMode ? 2 : 3);
|
|
@@ -755,30 +772,30 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
755
772
|
i0.ɵɵadvance(3);
|
|
756
773
|
i0.ɵɵconditional(ctx_r1.EditMode ? 11 : 12);
|
|
757
774
|
i0.ɵɵadvance(3);
|
|
758
|
-
i0.ɵɵconditional(
|
|
775
|
+
i0.ɵɵconditional(model_r20.ID ? 14 : 15);
|
|
759
776
|
i0.ɵɵadvance(3);
|
|
760
777
|
i0.ɵɵconditional(ctx_r1.EditMode ? 17 : -1);
|
|
761
778
|
i0.ɵɵadvance(5);
|
|
762
|
-
i0.ɵɵconditional(
|
|
779
|
+
i0.ɵɵconditional(model_r20.Status ? 22 : -1);
|
|
763
780
|
i0.ɵɵadvance();
|
|
764
781
|
i0.ɵɵconditional(ctx_r1.record.ParallelizationMode === "ModelSpecific" ? 23 : -1);
|
|
765
782
|
} }
|
|
766
|
-
function
|
|
767
|
-
const
|
|
768
|
-
i0.ɵɵelementStart(0, "div",
|
|
769
|
-
i0.ɵɵlistener("click", function
|
|
770
|
-
i0.ɵɵelement(2, "i",
|
|
783
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
784
|
+
const _r29 = i0.ɵɵgetCurrentView();
|
|
785
|
+
i0.ɵɵelementStart(0, "div", 114)(1, "button", 161);
|
|
786
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_Conditional_18_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addNewModel()); });
|
|
787
|
+
i0.ɵɵelement(2, "i", 88);
|
|
771
788
|
i0.ɵɵtext(3, " Add Model ");
|
|
772
789
|
i0.ɵɵelementEnd()();
|
|
773
790
|
} }
|
|
774
|
-
function
|
|
775
|
-
i0.ɵɵconditionalCreate(0,
|
|
776
|
-
i0.ɵɵelementStart(1, "div",
|
|
777
|
-
i0.ɵɵelement(3, "i",
|
|
791
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
792
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_Conditional_0_Template, 3, 0, "div", 110);
|
|
793
|
+
i0.ɵɵelementStart(1, "div", 111)(2, "div", 112);
|
|
794
|
+
i0.ɵɵelement(3, "i", 113);
|
|
778
795
|
i0.ɵɵelementEnd();
|
|
779
796
|
i0.ɵɵelementStart(4, "div");
|
|
780
797
|
i0.ɵɵtext(5, "AI Model ");
|
|
781
|
-
i0.ɵɵelementStart(6, "span",
|
|
798
|
+
i0.ɵɵelementStart(6, "span", 66);
|
|
782
799
|
i0.ɵɵtext(7, "*");
|
|
783
800
|
i0.ɵɵelementEnd()();
|
|
784
801
|
i0.ɵɵelementStart(8, "div");
|
|
@@ -793,8 +810,8 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
793
810
|
i0.ɵɵelementStart(14, "div");
|
|
794
811
|
i0.ɵɵtext(15, "Actions");
|
|
795
812
|
i0.ɵɵelementEnd()();
|
|
796
|
-
i0.ɵɵrepeaterCreate(16,
|
|
797
|
-
i0.ɵɵconditionalCreate(18,
|
|
813
|
+
i0.ɵɵrepeaterCreate(16, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_For_17_Template, 24, 15, null, null, _forTrack0, true);
|
|
814
|
+
i0.ɵɵconditionalCreate(18, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_Conditional_18_Template, 4, 0, "div", 114);
|
|
798
815
|
} if (rf & 2) {
|
|
799
816
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
800
817
|
i0.ɵɵconditional(ctx_r1.promptModels.length > 1 ? 0 : -1);
|
|
@@ -803,67 +820,67 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
803
820
|
i0.ɵɵadvance(2);
|
|
804
821
|
i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.UserCanCreatePromptModels ? 18 : -1);
|
|
805
822
|
} }
|
|
806
|
-
function
|
|
807
|
-
i0.ɵɵconditionalCreate(0,
|
|
823
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
824
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_0_Template, 2, 1, "mj-empty-state", 107)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Conditional_1_Template, 19, 2);
|
|
808
825
|
} if (rf & 2) {
|
|
809
826
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
810
827
|
i0.ɵɵconditional(ctx_r1.promptModels.length === 0 ? 0 : 1);
|
|
811
828
|
} }
|
|
812
|
-
function
|
|
813
|
-
i0.ɵɵelementStart(0, "mj-accordion-panel",
|
|
814
|
-
i0.ɵɵtemplate(1,
|
|
815
|
-
i0.ɵɵelementStart(2, "div",
|
|
816
|
-
i0.ɵɵconditionalCreate(4,
|
|
829
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Template(rf, ctx) { if (rf & 1) {
|
|
830
|
+
i0.ɵɵelementStart(0, "mj-accordion-panel", 37);
|
|
831
|
+
i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_ng_template_1_Template, 7, 1, "ng-template", 31);
|
|
832
|
+
i0.ɵɵelementStart(2, "div", 39)(3, "div", 101);
|
|
833
|
+
i0.ɵɵconditionalCreate(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_4_Template, 3, 0, "div", 102)(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Conditional_5_Template, 2, 1);
|
|
817
834
|
i0.ɵɵelementEnd()()();
|
|
818
835
|
} if (rf & 2) {
|
|
819
836
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
820
|
-
i0.ɵɵproperty("Expanded", true);
|
|
837
|
+
i0.ɵɵproperty("SectionCount", ctx_r1.promptModels.length)("Expanded", true);
|
|
821
838
|
i0.ɵɵadvance(4);
|
|
822
839
|
i0.ɵɵconditional(ctx_r1.isLoadingModels ? 4 : 5);
|
|
823
840
|
} }
|
|
824
|
-
function
|
|
825
|
-
i0.ɵɵelementStart(0, "span",
|
|
826
|
-
i0.ɵɵelement(1, "i",
|
|
841
|
+
function MJAIPromptFormComponentExtended_Conditional_1_ng_template_46_Template(rf, ctx) { if (rf & 1) {
|
|
842
|
+
i0.ɵɵelementStart(0, "span", 81);
|
|
843
|
+
i0.ɵɵelement(1, "i", 162);
|
|
827
844
|
i0.ɵɵtext(2, " Advanced Configuration ");
|
|
828
845
|
i0.ɵɵelementEnd();
|
|
829
846
|
} }
|
|
830
|
-
function
|
|
831
|
-
i0.ɵɵelement(0, "mj-form-field",
|
|
847
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_51_Template(rf, ctx) { if (rf & 1) {
|
|
848
|
+
i0.ɵɵelement(0, "mj-form-field", 42);
|
|
832
849
|
} if (rf & 2) {
|
|
833
850
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
834
851
|
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
|
|
835
852
|
} }
|
|
836
|
-
function
|
|
837
|
-
i0.ɵɵelement(0, "mj-form-field",
|
|
853
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_52_Template(rf, ctx) { if (rf & 1) {
|
|
854
|
+
i0.ɵɵelement(0, "mj-form-field", 43);
|
|
838
855
|
} if (rf & 2) {
|
|
839
856
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
840
857
|
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
|
|
841
858
|
} }
|
|
842
|
-
function
|
|
843
|
-
i0.ɵɵelementStart(0, "div",
|
|
844
|
-
i0.ɵɵelement(1, "i",
|
|
859
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_62_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
860
|
+
i0.ɵɵelementStart(0, "div", 163);
|
|
861
|
+
i0.ɵɵelement(1, "i", 69);
|
|
845
862
|
i0.ɵɵtext(2, " Loading prompts... ");
|
|
846
863
|
i0.ɵɵelementEnd();
|
|
847
864
|
} }
|
|
848
|
-
function
|
|
849
|
-
const
|
|
850
|
-
i0.ɵɵelementStart(0, "mj-dropdown",
|
|
851
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
852
|
-
i0.ɵɵlistener("ValueChange", function
|
|
865
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_62_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
866
|
+
const _r30 = i0.ɵɵgetCurrentView();
|
|
867
|
+
i0.ɵɵelementStart(0, "mj-dropdown", 165);
|
|
868
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_62_Conditional_1_Template_mj_dropdown_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r30); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.ResultSelectorPromptID, $event) || (ctx_r1.record.ResultSelectorPromptID = $event); return i0.ɵɵresetView($event); });
|
|
869
|
+
i0.ɵɵlistener("ValueChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_62_Conditional_1_Template_mj_dropdown_ValueChange_0_listener($event) { i0.ɵɵrestoreView(_r30); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onResultSelectorChange($event)); });
|
|
853
870
|
i0.ɵɵelementEnd();
|
|
854
871
|
} if (rf & 2) {
|
|
855
872
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
856
873
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.ResultSelectorPromptID);
|
|
857
874
|
i0.ɵɵproperty("Data", ctx_r1.resultSelectorTreeData)("ValuePrimitive", true)("Filterable", true);
|
|
858
875
|
} }
|
|
859
|
-
function
|
|
860
|
-
i0.ɵɵconditionalCreate(0,
|
|
876
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_62_Template(rf, ctx) { if (rf & 1) {
|
|
877
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_62_Conditional_0_Template, 3, 0, "div", 163)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_62_Conditional_1_Template, 1, 4, "mj-dropdown", 164);
|
|
861
878
|
} if (rf & 2) {
|
|
862
879
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
863
880
|
i0.ɵɵconditional(ctx_r1.isLoadingResultSelectorData ? 0 : 1);
|
|
864
881
|
} }
|
|
865
|
-
function
|
|
866
|
-
i0.ɵɵelementStart(0, "span",
|
|
882
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_63_Template(rf, ctx) { if (rf & 1) {
|
|
883
|
+
i0.ɵɵelementStart(0, "span", 51);
|
|
867
884
|
i0.ɵɵtext(1);
|
|
868
885
|
i0.ɵɵelementEnd();
|
|
869
886
|
} if (rf & 2) {
|
|
@@ -871,21 +888,21 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_61_Template(r
|
|
|
871
888
|
i0.ɵɵadvance();
|
|
872
889
|
i0.ɵɵtextInterpolate(ctx_r1.getPromptDisplayName(ctx_r1.record.ResultSelectorPromptID || "") || "None selected");
|
|
873
890
|
} }
|
|
874
|
-
function
|
|
875
|
-
i0.ɵɵelementStart(0, "span",
|
|
876
|
-
i0.ɵɵelement(1, "i",
|
|
891
|
+
function MJAIPromptFormComponentExtended_Conditional_1_ng_template_65_Template(rf, ctx) { if (rf & 1) {
|
|
892
|
+
i0.ɵɵelementStart(0, "span", 81);
|
|
893
|
+
i0.ɵɵelement(1, "i", 166);
|
|
877
894
|
i0.ɵɵtext(2, " Prefill & Output Control ");
|
|
878
895
|
i0.ɵɵelementEnd();
|
|
879
896
|
} }
|
|
880
|
-
function
|
|
881
|
-
i0.ɵɵelementStart(0, "span",
|
|
882
|
-
i0.ɵɵelement(1, "i",
|
|
897
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
898
|
+
i0.ɵɵelementStart(0, "span", 81);
|
|
899
|
+
i0.ɵɵelement(1, "i", 168);
|
|
883
900
|
i0.ɵɵtext(2, " Template Parameters ");
|
|
884
|
-
i0.ɵɵelementStart(3, "span",
|
|
901
|
+
i0.ɵɵelementStart(3, "span", 104);
|
|
885
902
|
i0.ɵɵtext(4);
|
|
886
903
|
i0.ɵɵelementEnd();
|
|
887
|
-
i0.ɵɵelementStart(5, "span",
|
|
888
|
-
i0.ɵɵelement(6, "i",
|
|
904
|
+
i0.ɵɵelementStart(5, "span", 105);
|
|
905
|
+
i0.ɵɵelement(6, "i", 169);
|
|
889
906
|
i0.ɵɵtext(7, " Parameters defined in the template ");
|
|
890
907
|
i0.ɵɵelementEnd()();
|
|
891
908
|
} if (rf & 2) {
|
|
@@ -893,171 +910,171 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_ng_templat
|
|
|
893
910
|
i0.ɵɵadvance(4);
|
|
894
911
|
i0.ɵɵtextInterpolate(ctx_r1.templateParams.length);
|
|
895
912
|
} }
|
|
896
|
-
function
|
|
897
|
-
i0.ɵɵelementStart(0, "div",
|
|
898
|
-
i0.ɵɵelement(1, "i",
|
|
913
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
914
|
+
i0.ɵɵelementStart(0, "div", 102);
|
|
915
|
+
i0.ɵɵelement(1, "i", 69);
|
|
899
916
|
i0.ɵɵtext(2, " Loading template parameters... ");
|
|
900
917
|
i0.ɵɵelementEnd();
|
|
901
918
|
} }
|
|
902
|
-
function
|
|
903
|
-
i0.ɵɵelement(0, "mj-empty-state",
|
|
919
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
920
|
+
i0.ɵɵelement(0, "mj-empty-state", 167);
|
|
904
921
|
} }
|
|
905
|
-
function
|
|
906
|
-
i0.ɵɵelementStart(0, "span",
|
|
922
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
923
|
+
i0.ɵɵelementStart(0, "span", 181);
|
|
907
924
|
i0.ɵɵtext(1, "*");
|
|
908
925
|
i0.ɵɵelementEnd();
|
|
909
926
|
} }
|
|
910
|
-
function
|
|
911
|
-
i0.ɵɵelementStart(0, "span",
|
|
927
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
928
|
+
i0.ɵɵelementStart(0, "span", 183);
|
|
912
929
|
i0.ɵɵtext(1, "Required");
|
|
913
930
|
i0.ɵɵelementEnd();
|
|
914
931
|
} }
|
|
915
|
-
function
|
|
916
|
-
i0.ɵɵelementStart(0, "span",
|
|
932
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
933
|
+
i0.ɵɵelementStart(0, "span", 184);
|
|
917
934
|
i0.ɵɵtext(1, "Optional");
|
|
918
935
|
i0.ɵɵelementEnd();
|
|
919
936
|
} }
|
|
920
|
-
function
|
|
921
|
-
i0.ɵɵelementStart(0, "p",
|
|
937
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
938
|
+
i0.ɵɵelementStart(0, "p", 185);
|
|
922
939
|
i0.ɵɵtext(1);
|
|
923
940
|
i0.ɵɵelementEnd();
|
|
924
941
|
} if (rf & 2) {
|
|
925
|
-
const
|
|
942
|
+
const param_r31 = i0.ɵɵnextContext().$implicit;
|
|
926
943
|
i0.ɵɵadvance();
|
|
927
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
944
|
+
i0.ɵɵtextInterpolate1(" ", param_r31.Description, " ");
|
|
928
945
|
} }
|
|
929
|
-
function
|
|
930
|
-
i0.ɵɵelementStart(0, "div",
|
|
946
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
947
|
+
i0.ɵɵelementStart(0, "div", 190)(1, "label", 191);
|
|
931
948
|
i0.ɵɵtext(2, "Default Value");
|
|
932
949
|
i0.ɵɵelementEnd();
|
|
933
|
-
i0.ɵɵelementStart(3, "code",
|
|
950
|
+
i0.ɵɵelementStart(3, "code", 192);
|
|
934
951
|
i0.ɵɵtext(4);
|
|
935
952
|
i0.ɵɵelementEnd()();
|
|
936
953
|
} if (rf & 2) {
|
|
937
|
-
const
|
|
954
|
+
const param_r31 = i0.ɵɵnextContext().$implicit;
|
|
938
955
|
i0.ɵɵadvance(4);
|
|
939
|
-
i0.ɵɵtextInterpolate(
|
|
956
|
+
i0.ɵɵtextInterpolate(param_r31.DefaultValue);
|
|
940
957
|
} }
|
|
941
|
-
function
|
|
942
|
-
i0.ɵɵelementStart(0, "div",
|
|
958
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
959
|
+
i0.ɵɵelementStart(0, "div", 190)(1, "label", 191);
|
|
943
960
|
i0.ɵɵtext(2, "Entity");
|
|
944
961
|
i0.ɵɵelementEnd();
|
|
945
|
-
i0.ɵɵelementStart(3, "span",
|
|
962
|
+
i0.ɵɵelementStart(3, "span", 186);
|
|
946
963
|
i0.ɵɵtext(4);
|
|
947
964
|
i0.ɵɵelementEnd()();
|
|
948
965
|
} if (rf & 2) {
|
|
949
|
-
const
|
|
966
|
+
const param_r31 = i0.ɵɵnextContext().$implicit;
|
|
950
967
|
i0.ɵɵadvance(4);
|
|
951
|
-
i0.ɵɵtextInterpolate(
|
|
968
|
+
i0.ɵɵtextInterpolate(param_r31.Entity || "Entity ID: " + param_r31.EntityID);
|
|
952
969
|
} }
|
|
953
|
-
function
|
|
970
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_20_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
954
971
|
i0.ɵɵtext(0);
|
|
955
972
|
} if (rf & 2) {
|
|
956
|
-
const
|
|
957
|
-
i0.ɵɵtextInterpolate1(" (",
|
|
973
|
+
const param_r31 = i0.ɵɵnextContext(2).$implicit;
|
|
974
|
+
i0.ɵɵtextInterpolate1(" (", param_r31.LinkedParameterField, ") ");
|
|
958
975
|
} }
|
|
959
|
-
function
|
|
960
|
-
i0.ɵɵelementStart(0, "div",
|
|
976
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
977
|
+
i0.ɵɵelementStart(0, "div", 190)(1, "label", 191);
|
|
961
978
|
i0.ɵɵtext(2, "Linked To");
|
|
962
979
|
i0.ɵɵelementEnd();
|
|
963
|
-
i0.ɵɵelementStart(3, "span",
|
|
980
|
+
i0.ɵɵelementStart(3, "span", 186);
|
|
964
981
|
i0.ɵɵtext(4);
|
|
965
|
-
i0.ɵɵconditionalCreate(5,
|
|
982
|
+
i0.ɵɵconditionalCreate(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_20_Conditional_5_Template, 1, 1);
|
|
966
983
|
i0.ɵɵelementEnd()();
|
|
967
984
|
} if (rf & 2) {
|
|
968
|
-
const
|
|
985
|
+
const param_r31 = i0.ɵɵnextContext().$implicit;
|
|
969
986
|
i0.ɵɵadvance(4);
|
|
970
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
987
|
+
i0.ɵɵtextInterpolate1(" ", param_r31.LinkedParameterName, " ");
|
|
971
988
|
i0.ɵɵadvance();
|
|
972
|
-
i0.ɵɵconditional(
|
|
989
|
+
i0.ɵɵconditional(param_r31.LinkedParameterField ? 5 : -1);
|
|
973
990
|
} }
|
|
974
|
-
function
|
|
975
|
-
i0.ɵɵelementStart(0, "div",
|
|
991
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
992
|
+
i0.ɵɵelementStart(0, "div", 190)(1, "label", 191);
|
|
976
993
|
i0.ɵɵtext(2, "Filter");
|
|
977
994
|
i0.ɵɵelementEnd();
|
|
978
|
-
i0.ɵɵelementStart(3, "code",
|
|
995
|
+
i0.ɵɵelementStart(3, "code", 193);
|
|
979
996
|
i0.ɵɵtext(4);
|
|
980
997
|
i0.ɵɵelementEnd()();
|
|
981
998
|
} if (rf & 2) {
|
|
982
|
-
const
|
|
999
|
+
const param_r31 = i0.ɵɵnextContext().$implicit;
|
|
983
1000
|
i0.ɵɵadvance(4);
|
|
984
|
-
i0.ɵɵtextInterpolate(
|
|
1001
|
+
i0.ɵɵtextInterpolate(param_r31.ExtraFilter);
|
|
985
1002
|
} }
|
|
986
|
-
function
|
|
987
|
-
i0.ɵɵelementStart(0, "div",
|
|
1003
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
1004
|
+
i0.ɵɵelementStart(0, "div", 190)(1, "label", 191);
|
|
988
1005
|
i0.ɵɵtext(2, "Record ID");
|
|
989
1006
|
i0.ɵɵelementEnd();
|
|
990
|
-
i0.ɵɵelementStart(3, "code",
|
|
1007
|
+
i0.ɵɵelementStart(3, "code", 186);
|
|
991
1008
|
i0.ɵɵtext(4);
|
|
992
1009
|
i0.ɵɵelementEnd()();
|
|
993
1010
|
} if (rf & 2) {
|
|
994
|
-
const
|
|
1011
|
+
const param_r31 = i0.ɵɵnextContext().$implicit;
|
|
995
1012
|
i0.ɵɵadvance(4);
|
|
996
|
-
i0.ɵɵtextInterpolate(
|
|
1013
|
+
i0.ɵɵtextInterpolate(param_r31.RecordID);
|
|
997
1014
|
} }
|
|
998
|
-
function
|
|
999
|
-
i0.ɵɵelementStart(0, "div",
|
|
1000
|
-
i0.ɵɵelement(3, "i",
|
|
1001
|
-
i0.ɵɵelementStart(4, "h6",
|
|
1015
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
1016
|
+
i0.ɵɵelementStart(0, "div", 176)(1, "div", 177)(2, "div", 178);
|
|
1017
|
+
i0.ɵɵelement(3, "i", 179);
|
|
1018
|
+
i0.ɵɵelementStart(4, "h6", 180);
|
|
1002
1019
|
i0.ɵɵtext(5);
|
|
1003
|
-
i0.ɵɵconditionalCreate(6,
|
|
1020
|
+
i0.ɵɵconditionalCreate(6, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_6_Template, 2, 0, "span", 181);
|
|
1004
1021
|
i0.ɵɵelementEnd()();
|
|
1005
|
-
i0.ɵɵelementStart(7, "div",
|
|
1022
|
+
i0.ɵɵelementStart(7, "div", 178)(8, "span", 182);
|
|
1006
1023
|
i0.ɵɵtext(9);
|
|
1007
1024
|
i0.ɵɵelementEnd();
|
|
1008
|
-
i0.ɵɵconditionalCreate(10,
|
|
1025
|
+
i0.ɵɵconditionalCreate(10, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_10_Template, 2, 0, "span", 183)(11, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_11_Template, 2, 0, "span", 184);
|
|
1009
1026
|
i0.ɵɵelementEnd()();
|
|
1010
|
-
i0.ɵɵconditionalCreate(12,
|
|
1011
|
-
i0.ɵɵelementStart(13, "div",
|
|
1012
|
-
i0.ɵɵelement(15, "i",
|
|
1027
|
+
i0.ɵɵconditionalCreate(12, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_12_Template, 2, 1, "p", 185);
|
|
1028
|
+
i0.ɵɵelementStart(13, "div", 186)(14, "span", 187);
|
|
1029
|
+
i0.ɵɵelement(15, "i", 188);
|
|
1013
1030
|
i0.ɵɵtext(16);
|
|
1014
1031
|
i0.ɵɵelementEnd()();
|
|
1015
|
-
i0.ɵɵelementStart(17, "div",
|
|
1016
|
-
i0.ɵɵconditionalCreate(18,
|
|
1017
|
-
i0.ɵɵconditionalCreate(19,
|
|
1018
|
-
i0.ɵɵconditionalCreate(20,
|
|
1019
|
-
i0.ɵɵconditionalCreate(21,
|
|
1020
|
-
i0.ɵɵconditionalCreate(22,
|
|
1032
|
+
i0.ɵɵelementStart(17, "div", 189);
|
|
1033
|
+
i0.ɵɵconditionalCreate(18, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_18_Template, 5, 1, "div", 190);
|
|
1034
|
+
i0.ɵɵconditionalCreate(19, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_19_Template, 5, 1, "div", 190);
|
|
1035
|
+
i0.ɵɵconditionalCreate(20, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_20_Template, 6, 2, "div", 190);
|
|
1036
|
+
i0.ɵɵconditionalCreate(21, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_21_Template, 5, 1, "div", 190);
|
|
1037
|
+
i0.ɵɵconditionalCreate(22, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Conditional_22_Template, 5, 1, "div", 190);
|
|
1021
1038
|
i0.ɵɵelementEnd()();
|
|
1022
1039
|
} if (rf & 2) {
|
|
1023
|
-
const
|
|
1040
|
+
const param_r31 = ctx.$implicit;
|
|
1024
1041
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1025
|
-
i0.ɵɵstyleProp("border-left", "4px solid " + ctx_r1.getParamTypeColor(
|
|
1042
|
+
i0.ɵɵstyleProp("border-left", "4px solid " + ctx_r1.getParamTypeColor(param_r31.Type));
|
|
1026
1043
|
i0.ɵɵadvance(3);
|
|
1027
|
-
i0.ɵɵclassMap("fa-solid " + ctx_r1.getParamTypeIcon(
|
|
1028
|
-
i0.ɵɵstyleProp("color", ctx_r1.getParamTypeColor(
|
|
1044
|
+
i0.ɵɵclassMap("fa-solid " + ctx_r1.getParamTypeIcon(param_r31.Type));
|
|
1045
|
+
i0.ɵɵstyleProp("color", ctx_r1.getParamTypeColor(param_r31.Type));
|
|
1029
1046
|
i0.ɵɵadvance(2);
|
|
1030
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1047
|
+
i0.ɵɵtextInterpolate1(" ", param_r31.Name, " ");
|
|
1031
1048
|
i0.ɵɵadvance();
|
|
1032
|
-
i0.ɵɵconditional(
|
|
1049
|
+
i0.ɵɵconditional(param_r31.IsRequired ? 6 : -1);
|
|
1033
1050
|
i0.ɵɵadvance(2);
|
|
1034
|
-
i0.ɵɵstyleProp("background-color", ctx_r1.getParamTypeColor(
|
|
1051
|
+
i0.ɵɵstyleProp("background-color", ctx_r1.getParamTypeColor(param_r31.Type));
|
|
1035
1052
|
i0.ɵɵadvance();
|
|
1036
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1053
|
+
i0.ɵɵtextInterpolate1(" ", param_r31.Type, " ");
|
|
1037
1054
|
i0.ɵɵadvance();
|
|
1038
|
-
i0.ɵɵconditional(
|
|
1055
|
+
i0.ɵɵconditional(param_r31.IsRequired ? 10 : 11);
|
|
1039
1056
|
i0.ɵɵadvance(2);
|
|
1040
|
-
i0.ɵɵconditional(
|
|
1057
|
+
i0.ɵɵconditional(param_r31.Description ? 12 : -1);
|
|
1041
1058
|
i0.ɵɵadvance(4);
|
|
1042
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.getParamTypeDescription(
|
|
1059
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.getParamTypeDescription(param_r31), " ");
|
|
1043
1060
|
i0.ɵɵadvance(2);
|
|
1044
|
-
i0.ɵɵconditional(
|
|
1061
|
+
i0.ɵɵconditional(param_r31.DefaultValue ? 18 : -1);
|
|
1045
1062
|
i0.ɵɵadvance();
|
|
1046
|
-
i0.ɵɵconditional(
|
|
1063
|
+
i0.ɵɵconditional(param_r31.EntityID ? 19 : -1);
|
|
1047
1064
|
i0.ɵɵadvance();
|
|
1048
|
-
i0.ɵɵconditional(
|
|
1065
|
+
i0.ɵɵconditional(param_r31.LinkedParameterName ? 20 : -1);
|
|
1049
1066
|
i0.ɵɵadvance();
|
|
1050
|
-
i0.ɵɵconditional(
|
|
1067
|
+
i0.ɵɵconditional(param_r31.ExtraFilter ? 21 : -1);
|
|
1051
1068
|
i0.ɵɵadvance();
|
|
1052
|
-
i0.ɵɵconditional(
|
|
1069
|
+
i0.ɵɵconditional(param_r31.RecordID ? 22 : -1);
|
|
1053
1070
|
} }
|
|
1054
|
-
function
|
|
1055
|
-
i0.ɵɵelementStart(0, "div",
|
|
1056
|
-
i0.ɵɵrepeaterCreate(1,
|
|
1071
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1072
|
+
i0.ɵɵelementStart(0, "div", 170);
|
|
1073
|
+
i0.ɵɵrepeaterCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_2_Template, 23, 19, "div", 171, _forTrack1);
|
|
1057
1074
|
i0.ɵɵelementEnd();
|
|
1058
|
-
i0.ɵɵelementStart(3, "div",
|
|
1059
|
-
i0.ɵɵelement(5, "i",
|
|
1060
|
-
i0.ɵɵelementStart(6, "div",
|
|
1075
|
+
i0.ɵɵelementStart(3, "div", 172)(4, "div", 173);
|
|
1076
|
+
i0.ɵɵelement(5, "i", 174);
|
|
1077
|
+
i0.ɵɵelementStart(6, "div", 175)(7, "strong");
|
|
1061
1078
|
i0.ɵɵtext(8, "Using Template Parameters:");
|
|
1062
1079
|
i0.ɵɵelementEnd();
|
|
1063
1080
|
i0.ɵɵtext(9, " When executing this prompt, you'll be prompted to provide values for all required parameters. Parameters can be simple values (text, numbers) or complex data structures (JSON objects, database records, or entire entity collections). The template will use these parameters to generate dynamic content based on the values provided at execution time. ");
|
|
@@ -1067,11 +1084,11 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditiona
|
|
|
1067
1084
|
i0.ɵɵadvance();
|
|
1068
1085
|
i0.ɵɵrepeater(ctx_r1.templateParams);
|
|
1069
1086
|
} }
|
|
1070
|
-
function
|
|
1071
|
-
i0.ɵɵelementStart(0, "mj-accordion-panel",
|
|
1072
|
-
i0.ɵɵtemplate(1,
|
|
1073
|
-
i0.ɵɵelementStart(2, "div",
|
|
1074
|
-
i0.ɵɵconditionalCreate(3,
|
|
1087
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Template(rf, ctx) { if (rf & 1) {
|
|
1088
|
+
i0.ɵɵelementStart(0, "mj-accordion-panel", 57);
|
|
1089
|
+
i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_ng_template_1_Template, 8, 1, "ng-template", 31);
|
|
1090
|
+
i0.ɵɵelementStart(2, "div", 39);
|
|
1091
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_3_Template, 3, 0, "div", 102)(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_4_Template, 1, 0, "mj-empty-state", 167)(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_Template, 10, 0);
|
|
1075
1092
|
i0.ɵɵelementEnd()();
|
|
1076
1093
|
} if (rf & 2) {
|
|
1077
1094
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1079,29 +1096,29 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Template(r
|
|
|
1079
1096
|
i0.ɵɵadvance(3);
|
|
1080
1097
|
i0.ɵɵconditional(ctx_r1.isLoadingTemplateParams ? 3 : ctx_r1.templateParams.length === 0 ? 4 : 5);
|
|
1081
1098
|
} }
|
|
1082
|
-
function
|
|
1083
|
-
i0.ɵɵelementStart(0, "span",
|
|
1099
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
1100
|
+
i0.ɵɵelementStart(0, "span", 81);
|
|
1084
1101
|
i0.ɵɵelement(1, "i", 21);
|
|
1085
1102
|
i0.ɵɵtext(2, " Output Example (JSON) ");
|
|
1086
|
-
i0.ɵɵelementStart(3, "span",
|
|
1103
|
+
i0.ɵɵelementStart(3, "span", 197);
|
|
1087
1104
|
i0.ɵɵtext(4, "\u2022 Required for object output type");
|
|
1088
1105
|
i0.ɵɵelementEnd()();
|
|
1089
1106
|
} }
|
|
1090
|
-
function
|
|
1091
|
-
const
|
|
1092
|
-
i0.ɵɵelementStart(0, "mj-code-editor",
|
|
1093
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
1107
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1108
|
+
const _r32 = i0.ɵɵgetCurrentView();
|
|
1109
|
+
i0.ɵɵelementStart(0, "mj-code-editor", 198);
|
|
1110
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_Conditional_3_Template_mj_code_editor_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.OutputExample, $event) || (ctx_r1.record.OutputExample = $event); return i0.ɵɵresetView($event); });
|
|
1094
1111
|
i0.ɵɵelementEnd();
|
|
1095
|
-
i0.ɵɵelementStart(1, "div",
|
|
1096
|
-
i0.ɵɵelement(2, "i",
|
|
1112
|
+
i0.ɵɵelementStart(1, "div", 199);
|
|
1113
|
+
i0.ɵɵelement(2, "i", 200);
|
|
1097
1114
|
i0.ɵɵtext(3, " Provide a JSON example that defines the expected structure for object output validation. ");
|
|
1098
1115
|
i0.ɵɵelementEnd();
|
|
1099
1116
|
} if (rf & 2) {
|
|
1100
1117
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1101
1118
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.OutputExample);
|
|
1102
1119
|
} }
|
|
1103
|
-
function
|
|
1104
|
-
i0.ɵɵelementStart(0, "div",
|
|
1120
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
1121
|
+
i0.ɵɵelementStart(0, "div", 195);
|
|
1105
1122
|
i0.ɵɵtext(1);
|
|
1106
1123
|
i0.ɵɵelementEnd();
|
|
1107
1124
|
} if (rf & 2) {
|
|
@@ -1109,16 +1126,16 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditiona
|
|
|
1109
1126
|
i0.ɵɵadvance();
|
|
1110
1127
|
i0.ɵɵtextInterpolate(ctx_r1.record.OutputExample);
|
|
1111
1128
|
} }
|
|
1112
|
-
function
|
|
1113
|
-
i0.ɵɵelementStart(0, "mj-alert",
|
|
1129
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1130
|
+
i0.ɵɵelementStart(0, "mj-alert", 196);
|
|
1114
1131
|
i0.ɵɵtext(1, "Output example is required when output type is 'object'");
|
|
1115
1132
|
i0.ɵɵelementEnd();
|
|
1116
1133
|
} }
|
|
1117
|
-
function
|
|
1118
|
-
i0.ɵɵelementStart(0, "mj-accordion-panel",
|
|
1119
|
-
i0.ɵɵtemplate(1,
|
|
1120
|
-
i0.ɵɵelementStart(2, "div",
|
|
1121
|
-
i0.ɵɵconditionalCreate(3,
|
|
1134
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_Template(rf, ctx) { if (rf & 1) {
|
|
1135
|
+
i0.ɵɵelementStart(0, "mj-accordion-panel", 58);
|
|
1136
|
+
i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_ng_template_1_Template, 5, 0, "ng-template", 31);
|
|
1137
|
+
i0.ɵɵelementStart(2, "div", 194);
|
|
1138
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_Conditional_3_Template, 4, 1)(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_Conditional_4_Template, 2, 1, "div", 195)(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_Conditional_5_Template, 2, 0, "mj-alert", 196);
|
|
1122
1139
|
i0.ɵɵelementEnd()();
|
|
1123
1140
|
} if (rf & 2) {
|
|
1124
1141
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1126,8 +1143,8 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Template(r
|
|
|
1126
1143
|
i0.ɵɵadvance(3);
|
|
1127
1144
|
i0.ɵɵconditional(ctx_r1.EditMode ? 3 : ctx_r1.record.OutputExample ? 4 : 5);
|
|
1128
1145
|
} }
|
|
1129
|
-
function
|
|
1130
|
-
i0.ɵɵelementStart(0, "span",
|
|
1146
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1147
|
+
i0.ɵɵelementStart(0, "span", 204);
|
|
1131
1148
|
i0.ɵɵtext(1);
|
|
1132
1149
|
i0.ɵɵelementEnd();
|
|
1133
1150
|
} if (rf & 2) {
|
|
@@ -1135,171 +1152,214 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_ng_templat
|
|
|
1135
1152
|
i0.ɵɵadvance();
|
|
1136
1153
|
i0.ɵɵtextInterpolate1("(", ctx_r1.executionHistory.length, ")");
|
|
1137
1154
|
} }
|
|
1138
|
-
function
|
|
1139
|
-
i0.ɵɵelementStart(0, "span",
|
|
1140
|
-
i0.ɵɵelement(1, "i",
|
|
1155
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
1156
|
+
i0.ɵɵelementStart(0, "span", 81);
|
|
1157
|
+
i0.ɵɵelement(1, "i", 203);
|
|
1141
1158
|
i0.ɵɵtext(2, " Execution History ");
|
|
1142
|
-
i0.ɵɵconditionalCreate(3,
|
|
1159
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_ng_template_1_Conditional_3_Template, 2, 1, "span", 204);
|
|
1143
1160
|
i0.ɵɵelementEnd();
|
|
1144
1161
|
} if (rf & 2) {
|
|
1145
1162
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1146
1163
|
i0.ɵɵadvance(3);
|
|
1147
1164
|
i0.ɵɵconditional(ctx_r1.executionHistory.length > 0 ? 3 : -1);
|
|
1148
1165
|
} }
|
|
1149
|
-
function
|
|
1150
|
-
i0.ɵɵelementStart(0, "div",
|
|
1151
|
-
i0.ɵɵelement(1, "i",
|
|
1166
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1167
|
+
i0.ɵɵelementStart(0, "div", 201);
|
|
1168
|
+
i0.ɵɵelement(1, "i", 205);
|
|
1152
1169
|
i0.ɵɵelementStart(2, "p");
|
|
1153
1170
|
i0.ɵɵtext(3, "Loading execution history...");
|
|
1154
1171
|
i0.ɵɵelementEnd()();
|
|
1155
1172
|
} }
|
|
1156
|
-
function
|
|
1157
|
-
i0.ɵɵelement(0, "mj-empty-state",
|
|
1173
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
1174
|
+
i0.ɵɵelement(0, "mj-empty-state", 202);
|
|
1158
1175
|
} }
|
|
1159
|
-
function
|
|
1160
|
-
i0.ɵɵelement(0, "i",
|
|
1176
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
1177
|
+
i0.ɵɵelement(0, "i", 220);
|
|
1161
1178
|
} if (rf & 2) {
|
|
1162
1179
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1163
1180
|
i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
|
|
1164
1181
|
} }
|
|
1165
|
-
function
|
|
1166
|
-
i0.ɵɵelement(0, "i",
|
|
1182
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
1183
|
+
i0.ɵɵelement(0, "i", 220);
|
|
1167
1184
|
} if (rf & 2) {
|
|
1168
1185
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1169
1186
|
i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
|
|
1170
1187
|
} }
|
|
1171
|
-
function
|
|
1172
|
-
i0.ɵɵelement(0, "i",
|
|
1188
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
1189
|
+
i0.ɵɵelement(0, "i", 220);
|
|
1173
1190
|
} if (rf & 2) {
|
|
1174
1191
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1175
1192
|
i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
|
|
1176
1193
|
} }
|
|
1177
|
-
function
|
|
1178
|
-
i0.ɵɵelement(0, "i",
|
|
1194
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
1195
|
+
i0.ɵɵelement(0, "i", 220);
|
|
1179
1196
|
} if (rf & 2) {
|
|
1180
1197
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1181
1198
|
i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
|
|
1182
1199
|
} }
|
|
1183
|
-
function
|
|
1184
|
-
i0.ɵɵelementStart(0, "span",
|
|
1200
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_For_41_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
1201
|
+
i0.ɵɵelementStart(0, "span", 227);
|
|
1185
1202
|
i0.ɵɵtext(1);
|
|
1186
1203
|
i0.ɵɵelementEnd();
|
|
1187
1204
|
} if (rf & 2) {
|
|
1188
|
-
const
|
|
1205
|
+
const run_r35 = i0.ɵɵnextContext().$implicit;
|
|
1189
1206
|
i0.ɵɵadvance();
|
|
1190
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1207
|
+
i0.ɵɵtextInterpolate1(" ", run_r35.RunType, " ");
|
|
1191
1208
|
} }
|
|
1192
|
-
function
|
|
1193
|
-
const
|
|
1194
|
-
i0.ɵɵelementStart(0, "tr",
|
|
1209
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_For_41_Template(rf, ctx) { if (rf & 1) {
|
|
1210
|
+
const _r34 = i0.ɵɵgetCurrentView();
|
|
1211
|
+
i0.ɵɵelementStart(0, "tr", 221)(1, "td", 222)(2, "span", 223);
|
|
1195
1212
|
i0.ɵɵelement(3, "i");
|
|
1196
1213
|
i0.ɵɵelementStart(4, "span", 22);
|
|
1197
1214
|
i0.ɵɵtext(5);
|
|
1198
1215
|
i0.ɵɵelementEnd()()();
|
|
1199
|
-
i0.ɵɵelementStart(6, "td",
|
|
1216
|
+
i0.ɵɵelementStart(6, "td", 224);
|
|
1200
1217
|
i0.ɵɵtext(7);
|
|
1201
1218
|
i0.ɵɵpipe(8, "date");
|
|
1202
1219
|
i0.ɵɵelementEnd();
|
|
1203
|
-
i0.ɵɵelementStart(9, "td",
|
|
1204
|
-
i0.ɵɵelement(11, "i",
|
|
1220
|
+
i0.ɵɵelementStart(9, "td", 224)(10, "span", 223);
|
|
1221
|
+
i0.ɵɵelement(11, "i", 103);
|
|
1205
1222
|
i0.ɵɵtext(12);
|
|
1206
1223
|
i0.ɵɵelementEnd()();
|
|
1207
|
-
i0.ɵɵelementStart(13, "td",
|
|
1224
|
+
i0.ɵɵelementStart(13, "td", 224);
|
|
1208
1225
|
i0.ɵɵtext(14);
|
|
1209
1226
|
i0.ɵɵelementEnd();
|
|
1210
|
-
i0.ɵɵelementStart(15, "td",
|
|
1227
|
+
i0.ɵɵelementStart(15, "td", 225);
|
|
1211
1228
|
i0.ɵɵtext(16);
|
|
1212
1229
|
i0.ɵɵelementEnd();
|
|
1213
|
-
i0.ɵɵelementStart(17, "td",
|
|
1230
|
+
i0.ɵɵelementStart(17, "td", 225);
|
|
1214
1231
|
i0.ɵɵtext(18);
|
|
1215
1232
|
i0.ɵɵelementEnd();
|
|
1216
|
-
i0.ɵɵelementStart(19, "td",
|
|
1217
|
-
i0.ɵɵconditionalCreate(20,
|
|
1233
|
+
i0.ɵɵelementStart(19, "td", 226);
|
|
1234
|
+
i0.ɵɵconditionalCreate(20, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_For_41_Conditional_20_Template, 2, 1, "span", 227);
|
|
1218
1235
|
i0.ɵɵelementEnd();
|
|
1219
|
-
i0.ɵɵelementStart(21, "td",
|
|
1220
|
-
i0.ɵɵlistener("click", function
|
|
1221
|
-
i0.ɵɵelement(23, "i",
|
|
1236
|
+
i0.ɵɵelementStart(21, "td", 226)(22, "button", 228);
|
|
1237
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_For_41_Template_button_click_22_listener() { const run_r35 = i0.ɵɵrestoreView(_r34).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToPromptRun(run_r35.ID)); });
|
|
1238
|
+
i0.ɵɵelement(23, "i", 229);
|
|
1222
1239
|
i0.ɵɵelementEnd()()();
|
|
1223
1240
|
} if (rf & 2) {
|
|
1224
|
-
const
|
|
1225
|
-
const ɵ$
|
|
1241
|
+
const run_r35 = ctx.$implicit;
|
|
1242
|
+
const ɵ$index_829_r36 = ctx.$index;
|
|
1226
1243
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1227
|
-
i0.ɵɵclassProp("even-row", ɵ$
|
|
1244
|
+
i0.ɵɵclassProp("even-row", ɵ$index_829_r36 % 2 === 0);
|
|
1228
1245
|
i0.ɵɵadvance(3);
|
|
1229
|
-
i0.ɵɵclassMap("fa-solid " + ctx_r1.getExecutionStatusIcon(
|
|
1230
|
-
i0.ɵɵstyleProp("color", ctx_r1.getExecutionStatusColor(
|
|
1246
|
+
i0.ɵɵclassMap("fa-solid " + ctx_r1.getExecutionStatusIcon(run_r35.Success));
|
|
1247
|
+
i0.ɵɵstyleProp("color", ctx_r1.getExecutionStatusColor(run_r35.Success));
|
|
1231
1248
|
i0.ɵɵadvance();
|
|
1232
|
-
i0.ɵɵstyleProp("color", ctx_r1.getExecutionStatusColor(
|
|
1249
|
+
i0.ɵɵstyleProp("color", ctx_r1.getExecutionStatusColor(run_r35.Success));
|
|
1233
1250
|
i0.ɵɵadvance();
|
|
1234
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1251
|
+
i0.ɵɵtextInterpolate1(" ", run_r35.Success === true ? "Success" : run_r35.Success === false ? "Failed" : "Running", " ");
|
|
1235
1252
|
i0.ɵɵadvance(2);
|
|
1236
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(8, 15,
|
|
1253
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(8, 15, run_r35.RunAt, "short"), " ");
|
|
1237
1254
|
i0.ɵɵadvance(5);
|
|
1238
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1255
|
+
i0.ɵɵtextInterpolate1(" ", run_r35.Model || "Unknown", " ");
|
|
1239
1256
|
i0.ɵɵadvance(2);
|
|
1240
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(
|
|
1257
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(run_r35.ExecutionTimeMS), " ");
|
|
1241
1258
|
i0.ɵɵadvance(2);
|
|
1242
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatTokens(
|
|
1259
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatTokens(run_r35.TokensUsed), " ");
|
|
1243
1260
|
i0.ɵɵadvance(2);
|
|
1244
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatCost(
|
|
1261
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatCost(run_r35.TotalCost || run_r35.Cost), " ");
|
|
1245
1262
|
i0.ɵɵadvance(2);
|
|
1246
|
-
i0.ɵɵconditional(
|
|
1263
|
+
i0.ɵɵconditional(run_r35.RunType ? 20 : -1);
|
|
1247
1264
|
} }
|
|
1248
|
-
function
|
|
1249
|
-
|
|
1250
|
-
|
|
1265
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_For_44_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
1266
|
+
i0.ɵɵtext(0);
|
|
1267
|
+
} if (rf & 2) {
|
|
1268
|
+
const run_r38 = i0.ɵɵnextContext().$implicit;
|
|
1269
|
+
i0.ɵɵtextInterpolate1(" \u00B7 ", run_r38.RunType);
|
|
1270
|
+
} }
|
|
1271
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_For_44_Template(rf, ctx) { if (rf & 1) {
|
|
1272
|
+
const _r37 = i0.ɵɵgetCurrentView();
|
|
1273
|
+
i0.ɵɵelementStart(0, "button", 230);
|
|
1274
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_For_44_Template_button_click_0_listener() { const run_r38 = i0.ɵɵrestoreView(_r37).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToPromptRun(run_r38.ID)); });
|
|
1275
|
+
i0.ɵɵelementStart(1, "span", 231)(2, "span", 232);
|
|
1276
|
+
i0.ɵɵelement(3, "i", 233);
|
|
1277
|
+
i0.ɵɵtext(4);
|
|
1278
|
+
i0.ɵɵelementEnd();
|
|
1279
|
+
i0.ɵɵelementStart(5, "span", 234);
|
|
1280
|
+
i0.ɵɵtext(6);
|
|
1281
|
+
i0.ɵɵelementEnd()();
|
|
1282
|
+
i0.ɵɵelementStart(7, "span", 235);
|
|
1283
|
+
i0.ɵɵtext(8);
|
|
1284
|
+
i0.ɵɵpipe(9, "date");
|
|
1285
|
+
i0.ɵɵconditionalCreate(10, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_For_44_Conditional_10_Template, 1, 1);
|
|
1286
|
+
i0.ɵɵelementEnd();
|
|
1287
|
+
i0.ɵɵelement(11, "i", 236);
|
|
1288
|
+
i0.ɵɵelementEnd();
|
|
1289
|
+
} if (rf & 2) {
|
|
1290
|
+
const run_r38 = ctx.$implicit;
|
|
1291
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1292
|
+
i0.ɵɵadvance(2);
|
|
1293
|
+
i0.ɵɵstyleProp("color", ctx_r1.getExecutionStatusColor(run_r38.Success));
|
|
1294
|
+
i0.ɵɵadvance();
|
|
1295
|
+
i0.ɵɵclassMap("fa-solid " + ctx_r1.getExecutionStatusIcon(run_r38.Success));
|
|
1296
|
+
i0.ɵɵadvance();
|
|
1297
|
+
i0.ɵɵtextInterpolate1(" ", run_r38.Success === true ? "Success" : run_r38.Success === false ? "Failed" : "Running", " ");
|
|
1298
|
+
i0.ɵɵadvance(2);
|
|
1299
|
+
i0.ɵɵtextInterpolate(run_r38.Model || "Unknown");
|
|
1300
|
+
i0.ɵɵadvance(2);
|
|
1301
|
+
i0.ɵɵtextInterpolate4("", i0.ɵɵpipeBind2(9, 11, run_r38.RunAt, "short"), " \u00B7 ", ctx_r1.formatDuration(run_r38.ExecutionTimeMS), " \u00B7 ", ctx_r1.formatTokens(run_r38.TokensUsed), " tokens \u00B7 ", ctx_r1.formatCost(run_r38.TotalCost || run_r38.Cost));
|
|
1302
|
+
i0.ɵɵadvance(2);
|
|
1303
|
+
i0.ɵɵconditional(run_r38.RunType ? 10 : -1);
|
|
1304
|
+
} }
|
|
1305
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1306
|
+
const _r33 = i0.ɵɵgetCurrentView();
|
|
1307
|
+
i0.ɵɵelementStart(0, "div", 206)(1, "div", 141);
|
|
1251
1308
|
i0.ɵɵtext(2);
|
|
1252
1309
|
i0.ɵɵelementEnd();
|
|
1253
|
-
i0.ɵɵelementStart(3, "div",
|
|
1310
|
+
i0.ɵɵelementStart(3, "div", 207)(4, "span", 184);
|
|
1254
1311
|
i0.ɵɵtext(5, "Sort by:");
|
|
1255
1312
|
i0.ɵɵelementEnd();
|
|
1256
|
-
i0.ɵɵelementStart(6, "div",
|
|
1257
|
-
i0.ɵɵlistener("click", function
|
|
1313
|
+
i0.ɵɵelementStart(6, "div", 208)(7, "button", 209);
|
|
1314
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r33); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("runAt")); });
|
|
1258
1315
|
i0.ɵɵtext(8, " Date ");
|
|
1259
|
-
i0.ɵɵconditionalCreate(9,
|
|
1316
|
+
i0.ɵɵconditionalCreate(9, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_Conditional_9_Template, 1, 2, "i", 210);
|
|
1260
1317
|
i0.ɵɵelementEnd();
|
|
1261
|
-
i0.ɵɵelementStart(10, "button",
|
|
1262
|
-
i0.ɵɵlistener("click", function
|
|
1318
|
+
i0.ɵɵelementStart(10, "button", 209);
|
|
1319
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r33); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("executionTime")); });
|
|
1263
1320
|
i0.ɵɵtext(11, " Duration ");
|
|
1264
|
-
i0.ɵɵconditionalCreate(12,
|
|
1321
|
+
i0.ɵɵconditionalCreate(12, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_Conditional_12_Template, 1, 2, "i", 210);
|
|
1265
1322
|
i0.ɵɵelementEnd();
|
|
1266
|
-
i0.ɵɵelementStart(13, "button",
|
|
1267
|
-
i0.ɵɵlistener("click", function
|
|
1323
|
+
i0.ɵɵelementStart(13, "button", 209);
|
|
1324
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r33); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("tokens")); });
|
|
1268
1325
|
i0.ɵɵtext(14, " Tokens ");
|
|
1269
|
-
i0.ɵɵconditionalCreate(15,
|
|
1326
|
+
i0.ɵɵconditionalCreate(15, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_Conditional_15_Template, 1, 2, "i", 210);
|
|
1270
1327
|
i0.ɵɵelementEnd();
|
|
1271
|
-
i0.ɵɵelementStart(16, "button",
|
|
1272
|
-
i0.ɵɵlistener("click", function
|
|
1328
|
+
i0.ɵɵelementStart(16, "button", 209);
|
|
1329
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r33); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("cost")); });
|
|
1273
1330
|
i0.ɵɵtext(17, " Cost ");
|
|
1274
|
-
i0.ɵɵconditionalCreate(18,
|
|
1331
|
+
i0.ɵɵconditionalCreate(18, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_Conditional_18_Template, 1, 2, "i", 210);
|
|
1275
1332
|
i0.ɵɵelementEnd()()()();
|
|
1276
|
-
i0.ɵɵelementStart(19, "div",
|
|
1333
|
+
i0.ɵɵelementStart(19, "div", 211)(20, "table", 212)(21, "thead")(22, "tr", 213)(23, "th", 214);
|
|
1277
1334
|
i0.ɵɵtext(24, "Status");
|
|
1278
1335
|
i0.ɵɵelementEnd();
|
|
1279
|
-
i0.ɵɵelementStart(25, "th",
|
|
1336
|
+
i0.ɵɵelementStart(25, "th", 214);
|
|
1280
1337
|
i0.ɵɵtext(26, "Date & Time");
|
|
1281
1338
|
i0.ɵɵelementEnd();
|
|
1282
|
-
i0.ɵɵelementStart(27, "th",
|
|
1339
|
+
i0.ɵɵelementStart(27, "th", 214);
|
|
1283
1340
|
i0.ɵɵtext(28, "Model");
|
|
1284
1341
|
i0.ɵɵelementEnd();
|
|
1285
|
-
i0.ɵɵelementStart(29, "th",
|
|
1342
|
+
i0.ɵɵelementStart(29, "th", 214);
|
|
1286
1343
|
i0.ɵɵtext(30, "Duration");
|
|
1287
1344
|
i0.ɵɵelementEnd();
|
|
1288
|
-
i0.ɵɵelementStart(31, "th",
|
|
1345
|
+
i0.ɵɵelementStart(31, "th", 215);
|
|
1289
1346
|
i0.ɵɵtext(32, "Tokens");
|
|
1290
1347
|
i0.ɵɵelementEnd();
|
|
1291
|
-
i0.ɵɵelementStart(33, "th",
|
|
1348
|
+
i0.ɵɵelementStart(33, "th", 215);
|
|
1292
1349
|
i0.ɵɵtext(34, "Cost");
|
|
1293
1350
|
i0.ɵɵelementEnd();
|
|
1294
|
-
i0.ɵɵelementStart(35, "th",
|
|
1351
|
+
i0.ɵɵelementStart(35, "th", 216);
|
|
1295
1352
|
i0.ɵɵtext(36, "Type");
|
|
1296
1353
|
i0.ɵɵelementEnd();
|
|
1297
|
-
i0.ɵɵelementStart(37, "th",
|
|
1354
|
+
i0.ɵɵelementStart(37, "th", 216);
|
|
1298
1355
|
i0.ɵɵtext(38, "Actions");
|
|
1299
1356
|
i0.ɵɵelementEnd()()();
|
|
1300
1357
|
i0.ɵɵelementStart(39, "tbody");
|
|
1301
|
-
i0.ɵɵrepeaterCreate(40,
|
|
1358
|
+
i0.ɵɵrepeaterCreate(40, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_For_41_Template, 24, 18, "tr", 217, _forTrack1);
|
|
1302
1359
|
i0.ɵɵelementEnd()()();
|
|
1360
|
+
i0.ɵɵelementStart(42, "div", 218);
|
|
1361
|
+
i0.ɵɵrepeaterCreate(43, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_For_44_Template, 12, 14, "button", 219, _forTrack1);
|
|
1362
|
+
i0.ɵɵelementEnd();
|
|
1303
1363
|
} if (rf & 2) {
|
|
1304
1364
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1305
1365
|
i0.ɵɵadvance(2);
|
|
@@ -1322,30 +1382,32 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditiona
|
|
|
1322
1382
|
i0.ɵɵconditional(ctx_r1.historySortField === "cost" ? 18 : -1);
|
|
1323
1383
|
i0.ɵɵadvance(22);
|
|
1324
1384
|
i0.ɵɵrepeater(ctx_r1.executionHistory);
|
|
1385
|
+
i0.ɵɵadvance(3);
|
|
1386
|
+
i0.ɵɵrepeater(ctx_r1.executionHistory);
|
|
1325
1387
|
} }
|
|
1326
|
-
function
|
|
1327
|
-
i0.ɵɵelementStart(0, "mj-accordion-panel",
|
|
1328
|
-
i0.ɵɵtemplate(1,
|
|
1329
|
-
i0.ɵɵelementStart(2, "div",
|
|
1330
|
-
i0.ɵɵconditionalCreate(3,
|
|
1388
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Template(rf, ctx) { if (rf & 1) {
|
|
1389
|
+
i0.ɵɵelementStart(0, "mj-accordion-panel", 59);
|
|
1390
|
+
i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_ng_template_1_Template, 4, 1, "ng-template", 31);
|
|
1391
|
+
i0.ɵɵelementStart(2, "div", 194);
|
|
1392
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_3_Template, 4, 0, "div", 201)(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_4_Template, 1, 0, "mj-empty-state", 202)(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Conditional_5_Template, 45, 13);
|
|
1331
1393
|
i0.ɵɵelementEnd()();
|
|
1332
1394
|
} if (rf & 2) {
|
|
1333
1395
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1334
|
-
i0.ɵɵproperty("Expanded", false);
|
|
1396
|
+
i0.ɵɵproperty("SectionCount", ctx_r1.executionHistory.length)("Expanded", false);
|
|
1335
1397
|
i0.ɵɵadvance(3);
|
|
1336
1398
|
i0.ɵɵconditional(ctx_r1.isLoadingHistory ? 3 : ctx_r1.executionHistory.length === 0 ? 4 : 5);
|
|
1337
1399
|
} }
|
|
1338
|
-
function
|
|
1339
|
-
i0.ɵɵelementStart(0, "span",
|
|
1340
|
-
i0.ɵɵelement(1, "i",
|
|
1400
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_78_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
1401
|
+
i0.ɵɵelementStart(0, "span", 81);
|
|
1402
|
+
i0.ɵɵelement(1, "i", 238);
|
|
1341
1403
|
i0.ɵɵtext(2, " Result Cache ");
|
|
1342
1404
|
i0.ɵɵelementEnd();
|
|
1343
1405
|
} }
|
|
1344
|
-
function
|
|
1345
|
-
i0.ɵɵelementStart(0, "mj-accordion-panel",
|
|
1346
|
-
i0.ɵɵtemplate(1,
|
|
1347
|
-
i0.ɵɵelementStart(2, "div",
|
|
1348
|
-
i0.ɵɵelement(3, "mj-explorer-entity-data-grid",
|
|
1406
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_78_Template(rf, ctx) { if (rf & 1) {
|
|
1407
|
+
i0.ɵɵelementStart(0, "mj-accordion-panel", 60);
|
|
1408
|
+
i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_78_ng_template_1_Template, 3, 0, "ng-template", 31);
|
|
1409
|
+
i0.ɵɵelementStart(2, "div", 39);
|
|
1410
|
+
i0.ɵɵelement(3, "mj-explorer-entity-data-grid", 237);
|
|
1349
1411
|
i0.ɵɵelementEnd()();
|
|
1350
1412
|
} if (rf & 2) {
|
|
1351
1413
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1353,24 +1415,24 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_Template(r
|
|
|
1353
1415
|
i0.ɵɵadvance(3);
|
|
1354
1416
|
i0.ɵɵproperty("Params", ctx_r1.BuildRelationshipViewParamsByEntityName("MJ: AI Result Cache", "AIPromptID"))("NewRecordValues", ctx_r1.NewRecordValues("MJ: AI Result Cache"))("AllowLoad", true)("ShowToolbar", false);
|
|
1355
1417
|
} }
|
|
1356
|
-
function
|
|
1357
|
-
i0.ɵɵelementStart(0, "span",
|
|
1358
|
-
i0.ɵɵelement(1, "i",
|
|
1418
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_79_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
1419
|
+
i0.ɵɵelementStart(0, "span", 81);
|
|
1420
|
+
i0.ɵɵelement(1, "i", 240);
|
|
1359
1421
|
i0.ɵɵtext(2, " Related Items ");
|
|
1360
1422
|
i0.ɵɵelementEnd();
|
|
1361
1423
|
} }
|
|
1362
|
-
function
|
|
1363
|
-
i0.ɵɵelementStart(0, "mj-accordion-panel",
|
|
1364
|
-
i0.ɵɵtemplate(1,
|
|
1365
|
-
i0.ɵɵelementStart(2, "div",
|
|
1424
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_79_Template(rf, ctx) { if (rf & 1) {
|
|
1425
|
+
i0.ɵɵelementStart(0, "mj-accordion-panel", 61);
|
|
1426
|
+
i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_79_ng_template_1_Template, 3, 0, "ng-template", 31);
|
|
1427
|
+
i0.ɵɵelementStart(2, "div", 39)(3, "div", 40)(4, "div")(5, "h6", 239);
|
|
1366
1428
|
i0.ɵɵtext(6, "AI Agents Using This Prompt");
|
|
1367
1429
|
i0.ɵɵelementEnd();
|
|
1368
|
-
i0.ɵɵelement(7, "mj-explorer-entity-data-grid",
|
|
1430
|
+
i0.ɵɵelement(7, "mj-explorer-entity-data-grid", 237);
|
|
1369
1431
|
i0.ɵɵelementEnd();
|
|
1370
|
-
i0.ɵɵelementStart(8, "div")(9, "h6",
|
|
1432
|
+
i0.ɵɵelementStart(8, "div")(9, "h6", 239);
|
|
1371
1433
|
i0.ɵɵtext(10, "Prompts Using This as Result Selector");
|
|
1372
1434
|
i0.ɵɵelementEnd();
|
|
1373
|
-
i0.ɵɵelement(11, "mj-explorer-entity-data-grid",
|
|
1435
|
+
i0.ɵɵelement(11, "mj-explorer-entity-data-grid", 237);
|
|
1374
1436
|
i0.ɵɵelementEnd()()()();
|
|
1375
1437
|
} if (rf & 2) {
|
|
1376
1438
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1415,49 +1477,55 @@ function MJAIPromptFormComponentExtended_Conditional_1_Template(rf, ctx) { if (r
|
|
|
1415
1477
|
i0.ɵɵconditionalCreate(32, MJAIPromptFormComponentExtended_Conditional_1_Conditional_32_Template, 3, 0, "button", 25);
|
|
1416
1478
|
i0.ɵɵelementEnd();
|
|
1417
1479
|
i0.ɵɵconditionalCreate(33, MJAIPromptFormComponentExtended_Conditional_1_Conditional_33_Template, 4, 3, "div", 26);
|
|
1418
|
-
i0.ɵɵelementEnd()()();
|
|
1419
|
-
i0.ɵɵelementStart(34, "div", 27)(35, "mj-accordion-panel", 28);
|
|
1420
|
-
i0.ɵɵtemplate(36, MJAIPromptFormComponentExtended_Conditional_1_ng_template_36_Template, 4, 1, "ng-template", 29);
|
|
1421
|
-
i0.ɵɵelementStart(37, "div", 30);
|
|
1422
|
-
i0.ɵɵconditionalCreate(38, MJAIPromptFormComponentExtended_Conditional_1_Conditional_38_Template, 3, 0, "div", 31)(39, MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Template, 4, 2, "mj-empty-state", 32)(40, MJAIPromptFormComponentExtended_Conditional_1_Conditional_40_Template, 6, 1, "mj-empty-state", 33)(41, MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Template, 5, 3, "div", 34);
|
|
1423
1480
|
i0.ɵɵelementEnd()();
|
|
1424
|
-
i0.ɵɵconditionalCreate(
|
|
1425
|
-
i0.ɵɵ
|
|
1426
|
-
i0.ɵɵ
|
|
1427
|
-
i0.ɵɵ
|
|
1428
|
-
i0.ɵɵ
|
|
1429
|
-
i0.ɵɵ
|
|
1430
|
-
i0.ɵɵ
|
|
1431
|
-
i0.ɵɵ
|
|
1432
|
-
i0.ɵɵelementEnd();
|
|
1433
|
-
i0.ɵɵ
|
|
1434
|
-
i0.ɵɵ
|
|
1435
|
-
i0.ɵɵ
|
|
1436
|
-
i0.ɵɵ
|
|
1437
|
-
i0.ɵɵ
|
|
1438
|
-
i0.ɵɵconditionalCreate(
|
|
1481
|
+
i0.ɵɵconditionalCreate(34, MJAIPromptFormComponentExtended_Conditional_1_Conditional_34_Template, 4, 2, "button", 27);
|
|
1482
|
+
i0.ɵɵelementEnd();
|
|
1483
|
+
i0.ɵɵelementStart(35, "div", 28)(36, "mj-accordion-sections", 29);
|
|
1484
|
+
i0.ɵɵlistener("ActiveKeyChange", function MJAIPromptFormComponentExtended_Conditional_1_Template_mj_accordion_sections_ActiveKeyChange_36_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.Phone.Pick($event)); });
|
|
1485
|
+
i0.ɵɵelementStart(37, "mj-accordion-panel", 30);
|
|
1486
|
+
i0.ɵɵtemplate(38, MJAIPromptFormComponentExtended_Conditional_1_ng_template_38_Template, 4, 1, "ng-template", 31);
|
|
1487
|
+
i0.ɵɵelementStart(39, "div", 32);
|
|
1488
|
+
i0.ɵɵconditionalCreate(40, MJAIPromptFormComponentExtended_Conditional_1_Conditional_40_Template, 3, 0, "div", 33)(41, MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Template, 4, 2, "mj-empty-state", 34)(42, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Template, 6, 1, "mj-empty-state", 35)(43, MJAIPromptFormComponentExtended_Conditional_1_Conditional_43_Template, 5, 3, "div", 36);
|
|
1489
|
+
i0.ɵɵelementEnd()();
|
|
1490
|
+
i0.ɵɵconditionalCreate(44, MJAIPromptFormComponentExtended_Conditional_1_Conditional_44_Template, 6, 3, "mj-accordion-panel", 37);
|
|
1491
|
+
i0.ɵɵelementStart(45, "mj-accordion-panel", 38);
|
|
1492
|
+
i0.ɵɵtemplate(46, MJAIPromptFormComponentExtended_Conditional_1_ng_template_46_Template, 3, 0, "ng-template", 31);
|
|
1493
|
+
i0.ɵɵelementStart(47, "div", 39)(48, "div", 40)(49, "div");
|
|
1494
|
+
i0.ɵɵelement(50, "mj-form-field", 41);
|
|
1495
|
+
i0.ɵɵconditionalCreate(51, MJAIPromptFormComponentExtended_Conditional_1_Conditional_51_Template, 1, 3, "mj-form-field", 42);
|
|
1496
|
+
i0.ɵɵconditionalCreate(52, MJAIPromptFormComponentExtended_Conditional_1_Conditional_52_Template, 1, 3, "mj-form-field", 43);
|
|
1497
|
+
i0.ɵɵelement(53, "mj-form-field", 44)(54, "mj-form-field", 45);
|
|
1498
|
+
i0.ɵɵelementEnd();
|
|
1499
|
+
i0.ɵɵelementStart(55, "div");
|
|
1500
|
+
i0.ɵɵelement(56, "mj-form-field", 46)(57, "mj-form-field", 47)(58, "mj-form-field", 48);
|
|
1501
|
+
i0.ɵɵelementStart(59, "div", 49)(60, "label", 50);
|
|
1502
|
+
i0.ɵɵtext(61, " Result Selector Prompt ");
|
|
1503
|
+
i0.ɵɵelementEnd();
|
|
1504
|
+
i0.ɵɵconditionalCreate(62, MJAIPromptFormComponentExtended_Conditional_1_Conditional_62_Template, 2, 1)(63, MJAIPromptFormComponentExtended_Conditional_1_Conditional_63_Template, 2, 1, "span", 51);
|
|
1439
1505
|
i0.ɵɵelementEnd()()()()();
|
|
1440
|
-
i0.ɵɵelementStart(
|
|
1441
|
-
i0.ɵɵtemplate(
|
|
1442
|
-
i0.ɵɵelementStart(
|
|
1443
|
-
i0.ɵɵtext(
|
|
1506
|
+
i0.ɵɵelementStart(64, "mj-accordion-panel", 52);
|
|
1507
|
+
i0.ɵɵtemplate(65, MJAIPromptFormComponentExtended_Conditional_1_ng_template_65_Template, 3, 0, "ng-template", 31);
|
|
1508
|
+
i0.ɵɵelementStart(66, "div", 39)(67, "p", 53);
|
|
1509
|
+
i0.ɵɵtext(68, " Assistant prefill seeds the model's response with an initial string, guiding output format and content. Stop sequences terminate generation when encountered. ");
|
|
1444
1510
|
i0.ɵɵelementEnd();
|
|
1445
|
-
i0.ɵɵelementStart(
|
|
1446
|
-
i0.ɵɵelement(
|
|
1511
|
+
i0.ɵɵelementStart(69, "div", 40)(70, "div");
|
|
1512
|
+
i0.ɵɵelement(71, "mj-form-field", 54)(72, "mj-form-field", 55);
|
|
1447
1513
|
i0.ɵɵelementEnd();
|
|
1448
|
-
i0.ɵɵelementStart(
|
|
1449
|
-
i0.ɵɵelement(
|
|
1450
|
-
i0.ɵɵelementEnd()()()();
|
|
1451
|
-
i0.ɵɵconditionalCreate(73, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Template, 6, 2, "mj-accordion-panel", 28);
|
|
1452
|
-
i0.ɵɵconditionalCreate(74, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Template, 6, 2, "mj-accordion-panel", 28);
|
|
1453
|
-
i0.ɵɵconditionalCreate(75, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Template, 6, 2, "mj-accordion-panel", 28);
|
|
1454
|
-
i0.ɵɵconditionalCreate(76, MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_Template, 4, 5, "mj-accordion-panel", 28);
|
|
1455
|
-
i0.ɵɵconditionalCreate(77, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Template, 12, 9, "mj-accordion-panel", 28);
|
|
1514
|
+
i0.ɵɵelementStart(73, "div");
|
|
1515
|
+
i0.ɵɵelement(74, "mj-form-field", 56);
|
|
1456
1516
|
i0.ɵɵelementEnd()()()();
|
|
1517
|
+
i0.ɵɵconditionalCreate(75, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Template, 6, 2, "mj-accordion-panel", 57);
|
|
1518
|
+
i0.ɵɵconditionalCreate(76, MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_Template, 6, 2, "mj-accordion-panel", 58);
|
|
1519
|
+
i0.ɵɵconditionalCreate(77, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Template, 6, 3, "mj-accordion-panel", 59);
|
|
1520
|
+
i0.ɵɵconditionalCreate(78, MJAIPromptFormComponentExtended_Conditional_1_Conditional_78_Template, 4, 5, "mj-accordion-panel", 60);
|
|
1521
|
+
i0.ɵɵconditionalCreate(79, MJAIPromptFormComponentExtended_Conditional_1_Conditional_79_Template, 12, 9, "mj-accordion-panel", 61);
|
|
1522
|
+
i0.ɵɵelementEnd()()()()();
|
|
1457
1523
|
} if (rf & 2) {
|
|
1458
1524
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
1459
1525
|
i0.ɵɵproperty("Record", ctx_r1.record)("FormComponent", ctx_r1)("ToolbarConfig", ctx_r1.toolbarConfig)("WidthMode", "full-width");
|
|
1460
|
-
i0.ɵɵadvance(
|
|
1526
|
+
i0.ɵɵadvance(4);
|
|
1527
|
+
i0.ɵɵclassProp("hero-view", !ctx_r1.EditMode)("hero-compact", !ctx_r1.EditMode && !ctx_r1.HeroDetailsOpen);
|
|
1528
|
+
i0.ɵɵadvance(5);
|
|
1461
1529
|
i0.ɵɵconditional(ctx_r1.EditMode ? 9 : 10);
|
|
1462
1530
|
i0.ɵɵadvance(2);
|
|
1463
1531
|
i0.ɵɵconditional(ctx_r1.EditMode ? 11 : -1);
|
|
@@ -1479,20 +1547,24 @@ function MJAIPromptFormComponentExtended_Conditional_1_Template(rf, ctx) { if (r
|
|
|
1479
1547
|
i0.ɵɵconditional(ctx_r1.record.ID ? 32 : -1);
|
|
1480
1548
|
i0.ɵɵadvance();
|
|
1481
1549
|
i0.ɵɵconditional(!ctx_r1.canExecute && ctx_r1.record.ID ? 33 : -1);
|
|
1550
|
+
i0.ɵɵadvance();
|
|
1551
|
+
i0.ɵɵconditional(!ctx_r1.EditMode && ctx_r1.HeroSummary ? 34 : -1);
|
|
1482
1552
|
i0.ɵɵadvance(2);
|
|
1553
|
+
i0.ɵɵproperty("Enabled", ctx_r1.Phone.IsPhone)("ActiveKey", ctx_r1.Phone.Section);
|
|
1554
|
+
i0.ɵɵadvance();
|
|
1483
1555
|
i0.ɵɵproperty("Expanded", true);
|
|
1484
1556
|
i0.ɵɵadvance(3);
|
|
1485
|
-
i0.ɵɵconditional(ctx_r1.isLoadingTemplate ?
|
|
1557
|
+
i0.ɵɵconditional(ctx_r1.isLoadingTemplate ? 40 : !ctx_r1.record.TemplateID ? 41 : ctx_r1.templateNotFoundInDatabase ? 42 : 43);
|
|
1486
1558
|
i0.ɵɵadvance(4);
|
|
1487
|
-
i0.ɵɵconditional(ctx_r1.record.IsSaved ?
|
|
1559
|
+
i0.ɵɵconditional(ctx_r1.record.IsSaved ? 44 : -1);
|
|
1488
1560
|
i0.ɵɵadvance();
|
|
1489
1561
|
i0.ɵɵproperty("Expanded", false);
|
|
1490
1562
|
i0.ɵɵadvance(5);
|
|
1491
1563
|
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
|
|
1492
1564
|
i0.ɵɵadvance();
|
|
1493
|
-
i0.ɵɵconditional(ctx_r1.showParallelCount ?
|
|
1565
|
+
i0.ɵɵconditional(ctx_r1.showParallelCount ? 51 : -1);
|
|
1494
1566
|
i0.ɵɵadvance();
|
|
1495
|
-
i0.ɵɵconditional(ctx_r1.showParallelConfigParam ?
|
|
1567
|
+
i0.ɵɵconditional(ctx_r1.showParallelConfigParam ? 52 : -1);
|
|
1496
1568
|
i0.ɵɵadvance();
|
|
1497
1569
|
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
|
|
1498
1570
|
i0.ɵɵadvance();
|
|
@@ -1504,7 +1576,7 @@ function MJAIPromptFormComponentExtended_Conditional_1_Template(rf, ctx) { if (r
|
|
|
1504
1576
|
i0.ɵɵadvance();
|
|
1505
1577
|
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
|
|
1506
1578
|
i0.ɵɵadvance(4);
|
|
1507
|
-
i0.ɵɵconditional(ctx_r1.EditMode ?
|
|
1579
|
+
i0.ɵɵconditional(ctx_r1.EditMode ? 62 : 63);
|
|
1508
1580
|
i0.ɵɵadvance(2);
|
|
1509
1581
|
i0.ɵɵproperty("Expanded", false);
|
|
1510
1582
|
i0.ɵɵadvance(7);
|
|
@@ -1514,22 +1586,22 @@ function MJAIPromptFormComponentExtended_Conditional_1_Template(rf, ctx) { if (r
|
|
|
1514
1586
|
i0.ɵɵadvance(2);
|
|
1515
1587
|
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
|
|
1516
1588
|
i0.ɵɵadvance();
|
|
1517
|
-
i0.ɵɵconditional(ctx_r1.template && ctx_r1.templateParams.length > 0 ?
|
|
1589
|
+
i0.ɵɵconditional(ctx_r1.template && ctx_r1.templateParams.length > 0 ? 75 : -1);
|
|
1518
1590
|
i0.ɵɵadvance();
|
|
1519
|
-
i0.ɵɵconditional(ctx_r1.showOutputExample ?
|
|
1591
|
+
i0.ɵɵconditional(ctx_r1.showOutputExample ? 76 : -1);
|
|
1520
1592
|
i0.ɵɵadvance();
|
|
1521
|
-
i0.ɵɵconditional(ctx_r1.record.IsSaved ?
|
|
1593
|
+
i0.ɵɵconditional(ctx_r1.record.IsSaved ? 77 : -1);
|
|
1522
1594
|
i0.ɵɵadvance();
|
|
1523
|
-
i0.ɵɵconditional(ctx_r1.record.IsSaved && ctx_r1.record.EnableCaching ?
|
|
1595
|
+
i0.ɵɵconditional(ctx_r1.record.IsSaved && ctx_r1.record.EnableCaching ? 78 : -1);
|
|
1524
1596
|
i0.ɵɵadvance();
|
|
1525
|
-
i0.ɵɵconditional(ctx_r1.record.IsSaved ?
|
|
1597
|
+
i0.ɵɵconditional(ctx_r1.record.IsSaved ? 79 : -1);
|
|
1526
1598
|
} }
|
|
1527
1599
|
function MJAIPromptFormComponentExtended_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1528
|
-
const
|
|
1529
|
-
i0.ɵɵelementStart(0, "mj-window",
|
|
1530
|
-
i0.ɵɵlistener("Close", function MJAIPromptFormComponentExtended_Conditional_2_Template_mj_window_Close_0_listener() { i0.ɵɵrestoreView(
|
|
1531
|
-
i0.ɵɵelementStart(1, "mj-ai-test-harness",
|
|
1532
|
-
i0.ɵɵlistener("visibilityChange", function MJAIPromptFormComponentExtended_Conditional_2_Template_mj_ai_test_harness_visibilityChange_1_listener($event) { i0.ɵɵrestoreView(
|
|
1600
|
+
const _r39 = i0.ɵɵgetCurrentView();
|
|
1601
|
+
i0.ɵɵelementStart(0, "mj-window", 241);
|
|
1602
|
+
i0.ɵɵlistener("Close", function MJAIPromptFormComponentExtended_Conditional_2_Template_mj_window_Close_0_listener() { i0.ɵɵrestoreView(_r39); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTestHarnessVisibilityChanged(false)); });
|
|
1603
|
+
i0.ɵɵelementStart(1, "mj-ai-test-harness", 242);
|
|
1604
|
+
i0.ɵɵlistener("visibilityChange", function MJAIPromptFormComponentExtended_Conditional_2_Template_mj_ai_test_harness_visibilityChange_1_listener($event) { i0.ɵɵrestoreView(_r39); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTestHarnessVisibilityChanged($event)); });
|
|
1533
1605
|
i0.ɵɵelementEnd()();
|
|
1534
1606
|
} if (rf & 2) {
|
|
1535
1607
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
@@ -1540,6 +1612,10 @@ function MJAIPromptFormComponentExtended_Conditional_2_Template(rf, ctx) { if (r
|
|
|
1540
1612
|
let MJAIPromptFormComponentExtended = class MJAIPromptFormComponentExtended extends MJAIPromptFormComponent {
|
|
1541
1613
|
constructor() {
|
|
1542
1614
|
super(...arguments);
|
|
1615
|
+
/** Phone width shows the stacked accordions as sections behind one picker (design call 7A). */
|
|
1616
|
+
this.Phone = new PhoneSectionsState(() => this.cdr.markForCheck());
|
|
1617
|
+
/** Phone hero (6A): whether the summary line is expanded to show the rest of the hero. */
|
|
1618
|
+
this.HeroDetailsOpen = false;
|
|
1543
1619
|
this.testHarnessService = inject(AITestHarnessDialogService);
|
|
1544
1620
|
this.viewContainerRef = inject(ViewContainerRef);
|
|
1545
1621
|
this.promptManagementService = inject(AIPromptManagementService);
|
|
@@ -1583,6 +1659,25 @@ let MJAIPromptFormComponentExtended = class MJAIPromptFormComponentExtended exte
|
|
|
1583
1659
|
this._permissionCache = new Map();
|
|
1584
1660
|
this.__inferenceProvider_VendorTypeDefinitionID = '';
|
|
1585
1661
|
}
|
|
1662
|
+
ngOnDestroy() {
|
|
1663
|
+
super.ngOnDestroy();
|
|
1664
|
+
this.Phone.Stop();
|
|
1665
|
+
}
|
|
1666
|
+
/** Toggles the phone hero between its compact identity row and the full hero. */
|
|
1667
|
+
ToggleHeroDetails() {
|
|
1668
|
+
this.HeroDetailsOpen = !this.HeroDetailsOpen;
|
|
1669
|
+
this.cdr.markForCheck();
|
|
1670
|
+
}
|
|
1671
|
+
/** The phone hero's one-line summary of what the compact hero leaves out. */
|
|
1672
|
+
get HeroSummary() {
|
|
1673
|
+
return JoinHeroSummary([
|
|
1674
|
+
this.record.TypeID ? this.getPromptTypeDisplayName(this.record.TypeID) : null,
|
|
1675
|
+
`Parallel: ${this.getParallelizationModeDisplay()}`,
|
|
1676
|
+
`Output: ${this.getOutputTypeDisplay()}`,
|
|
1677
|
+
this.record.EnableCaching ? 'Caching on' : null,
|
|
1678
|
+
this.record.EffortLevel != null ? `Effort ${this.record.EffortLevel}` : null,
|
|
1679
|
+
]);
|
|
1680
|
+
}
|
|
1586
1681
|
/** @deprecated Use {@link ToolbarConfig}. */
|
|
1587
1682
|
get toolbarConfig() {
|
|
1588
1683
|
return this.ToolbarConfig;
|
|
@@ -3101,7 +3196,7 @@ let MJAIPromptFormComponentExtended = class MJAIPromptFormComponentExtended exte
|
|
|
3101
3196
|
this.updateModelPriorities();
|
|
3102
3197
|
// Force Angular to re-evaluate all bindings
|
|
3103
3198
|
this.cdr.detectChanges();
|
|
3104
|
-
// Additional force update for
|
|
3199
|
+
// Additional force update for dropdowns
|
|
3105
3200
|
setTimeout(() => {
|
|
3106
3201
|
this.cdr.detectChanges();
|
|
3107
3202
|
}, 0);
|
|
@@ -3127,7 +3222,7 @@ let MJAIPromptFormComponentExtended = class MJAIPromptFormComponentExtended exte
|
|
|
3127
3222
|
this.updateModelPriorities();
|
|
3128
3223
|
// Force Angular to re-evaluate all bindings
|
|
3129
3224
|
this.cdr.detectChanges();
|
|
3130
|
-
// Additional force update for
|
|
3225
|
+
// Additional force update for dropdowns
|
|
3131
3226
|
setTimeout(() => {
|
|
3132
3227
|
this.cdr.detectChanges();
|
|
3133
3228
|
}, 0);
|
|
@@ -3199,7 +3294,7 @@ let MJAIPromptFormComponentExtended = class MJAIPromptFormComponentExtended exte
|
|
|
3199
3294
|
this.updateModelPriorities();
|
|
3200
3295
|
// Force Angular to re-evaluate all bindings
|
|
3201
3296
|
this.cdr.detectChanges();
|
|
3202
|
-
// Additional force update for
|
|
3297
|
+
// Additional force update for dropdowns
|
|
3203
3298
|
setTimeout(() => {
|
|
3204
3299
|
this.cdr.detectChanges();
|
|
3205
3300
|
}, 0);
|
|
@@ -3473,16 +3568,16 @@ let MJAIPromptFormComponentExtended = class MJAIPromptFormComponentExtended exte
|
|
|
3473
3568
|
} if (rf & 2) {
|
|
3474
3569
|
let _t;
|
|
3475
3570
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.TemplateEditor = _t.first);
|
|
3476
|
-
} }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 2, consts: [["form", "ngForm"], ["templateEditor", ""], [3, "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [3, "Width", "Height", "MinWidth", "MinHeight", "Draggable", "Resizable", "Visible", "Title"], [3, "Navigate", "DeleteRequested", "FavoriteToggled", "HistoryRequested", "ListManagementRequested", "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [1, "record-form", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow", "hidden"], [1, "prompt-main-area", 2, "display", "flex", "flex-direction", "column", "flex", "1", "min-height", "0", "overflow-y", "auto"], [1, "prompt-header", 2, "flex-shrink", "0", "padding", "20px", "background", "var(--mj-bg-surface-sunken)", "border-bottom", "2px solid var(--mj-border-default)"], [2, "display", "flex", "justify-content", "space-between", "align-items", "flex-start", "gap", "20px"], [2, "flex", "1", "min-width", "0"], [2, "display", "flex", "align-items", "center", "gap", "12px", "margin-bottom", "8px"], [1, "fa-solid", "fa-robot", 2, "color", "var(--mj-brand-primary)", "font-size", "1.4em"], ["type", "text", "name", "promptName", "placeholder", "Enter prompt name...", 1, "mj-input", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModel"], [2, "display", "flex", "gap", "16px", "margin-bottom", "12px", "flex-wrap", "wrap"], ["name", "promptDescription", "placeholder", "Enter prompt description...", 1, "mj-textarea", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModel", "rows"], [2, "margin", "0 0 12px 0", "color", "var(--mj-text-muted)", "font-size", "0.9em", "line-height", "1.4"], [1, "quick-config", 2, "display", "flex", "align-items", "center", "gap", "16px", "flex-wrap", "wrap"], [1, "config-item", 2, "display", "flex", "align-items", "center", "gap", "6px", "font-size", "0.85em"], [1, "fa-solid", "fa-layer-group", 2, "color", "var(--mj-text-muted)"], [2, "color", "var(--mj-text-muted)"], [2, "color", "var(--mj-text-secondary)", "font-weight", "500"], [1, "fa-solid", "fa-code", 2, "color", "var(--mj-text-muted)"], [2, "font-weight", "500"], [1, "action-buttons", 2, "display", "flex", "flex-direction", "column", "gap", "8px", "align-items", "flex-end"], [2, "display", "flex", "gap", "8px"], ["mjButton", "", "variant", "primary", "size", "lg", "title", "Run AI Prompt Test Harness"], [2, "font-size", "0.75em", "color", "#dc3545", "text-align", "right", "max-width", "200px"], [1, "configuration-sections", 2, "flex", "1", "background", "var(--mj-bg-surface-card)", "border-top", "2px solid var(--mj-border-default)", "padding", "16px", "min-height", "0"], [2, "margin-bottom", "12px", 3, "Expanded"], ["mjAccordionTitle", ""], [1, "template-section", 2, "display", "flex", "flex-direction", "column", "min-height", "400px", "padding", "8px"], [1, "loading-state", 2, "flex", "1", "display", "flex", "align-items", "center", "justify-content", "center", "color", "var(--mj-text-muted)"], ["Size", "large", "Icon", "fa-solid fa-code", "Title", "No Template Associated", "Message", "This AI prompt needs a template to define its structure and parameters. Create a new template or link to an existing one.", 1, "no-template-state"], ["Variant", "warning", "Title", "Template Not Found", "Message", "The referenced template could not be loaded. It may have been deleted or moved.", 1, "invalid-template-state"], [1, "template-editor-container", 2, "flex", "1", "display", "flex", "flex-direction", "column", "min-height", "350px"], [2, "padding", "16px 0"], [2, "display", "grid", "grid-template-columns", "1fr 1fr", "gap", "20px"], ["FieldName", "ParallelizationMode", "Type", "dropdownlist", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "ParallelCount", "Type", "numerictextbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "ParallelConfigParam", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "OutputType", "Type", "dropdownlist", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "EffortLevel", "Type", "numerictextbox", "Caption", "Effort Level (1-100)", "Description", "Higher values request more thorough reasoning", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "ValidationBehavior", "Type", "dropdownlist", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "EnableCaching", "Type", "checkbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "TemplateDataCapture", "Type", "select", 3, "Record", "ShowLabel", "EditMode"], [2, "margin-bottom", "16px"], [2, "display", "block", "margin-bottom", "4px", "font-weight", "600", "color", "var(--mj-text-secondary)", "font-size", "0.9em"], [2, "color", "var(--mj-text-secondary)"], [2, "margin", "0 0 12px 0", "font-size", "0.85em", "color", "var(--mj-text-muted)"], ["FieldName", "AssistantPrefill", "Type", "textarea", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "StopSequences", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "PrefillFallbackMode", "Type", "dropdownlist", 3, "Record", "ShowLabel", "EditMode"], ["type", "text", "name", "promptName", "placeholder", "Enter prompt name...", 1, "mj-input", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModelChange", "ngModel"], [2, "margin", "0", "color", "var(--mj-text-secondary)", "font-weight", "600", "flex", "1"], [1, "status-badge", 2, "color", "white", "padding", "4px 10px", "border-radius", "12px", "font-size", "0.75em", "font-weight", "500"], ["name", "promptStatus", "TextField", "text", "ValueField", "value", 2, "width", "150px", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive"], [2, "color", "#dc3545"], [2, "padding", "8px", "color", "var(--mj-text-muted)", "font-style", "italic", "width", "200px"], ["name", "promptTypeID", "TextField", "Name", "ValueField", "ID", "Placeholder", "Select prompt type...", 2, "width", "200px", 3, "ngModel", "Data", "ValuePrimitive", "Filterable"], [1, "fa-solid", "fa-spinner", "fa-spin"], ["name", "promptTypeID", "TextField", "Name", "ValueField", "ID", "Placeholder", "Select prompt type...", 2, "width", "200px", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive", "Filterable"], ["name", "promptDescription", "placeholder", "Enter prompt description...", 1, "mj-textarea", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModelChange", "ngModel", "rows"], [1, "fa-solid", "fa-tag", 2, "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-database", 2, "color", "#28a745"], [2, "color", "#28a745", "font-weight", "500"], [1, "fa-solid", "fa-tachometer-alt", 2, "color", "var(--mj-text-muted)"], ["mjButton", "", "variant", "primary", "size", "lg", "title", "Run AI Prompt Test Harness", 3, "click"], [1, "fa-solid", "fa-play"], [2, "display", "flex", "align-items", "center", "gap", "8px", "font-weight", "600"], [2, "color", "var(--mj-text-muted)", "font-size", "0.9em", "font-weight", "normal"], [1, "fa-solid", "fa-spinner", "fa-spin", 2, "font-size", "24px", "margin-right", "12px"], ["ngProjectAs", "[actions]", 5, ["", "actions", ""], 2, "display", "flex", "gap", "12px"], ["mjButton", "", "variant", "primary"], ["mjButton", "", "variant", "outline"], ["mjButton", "", "variant", "primary", 3, "click"], [1, "fa-solid", "fa-plus"], ["mjButton", "", "variant", "outline", 3, "click"], [1, "fa-solid", "fa-link"], [1, "fa-solid", "fa-arrows-rotate"], [1, "template-actions", 2, "display", "flex", "gap", "8px", "padding", "8px", "border-bottom", "1px solid var(--mj-border-default)", "background", "var(--mj-bg-surface-sunken)"], [2, "flex", "1", "background", "var(--mj-bg-surface-card)", "border-radius", "6px", "border", "1px solid var(--mj-border-default)"], [2, "display", "block", "min-height", "300px", 3, "contentChange", "runTemplate", "template", "config"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Change to a different template"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Open template in new window"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Change to a different template", 3, "click"], [1, "fa-solid", "fa-exchange-alt"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Open template in new window", 3, "click"], [1, "fa-solid", "fa-external-link-alt"], [1, "model-management", 2, "border", "1px solid var(--mj-border-default)", "border-radius", "6px", "background", "var(--mj-bg-surface-sunken)"], [1, "loading-state", 2, "padding", "20px", "text-align", "center", "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-microchip", 2, "color", "var(--mj-text-muted)"], [1, "mj-accordion-badge"], [2, "color", "var(--mj-text-muted)", "font-size", "0.8em", "font-weight", "normal", "margin-left", "8px"], ["title", "Models are tried in order from top to bottom. The first available model will be used.", 1, "fa-solid", "fa-info-circle"], ["Size", "compact", "Icon", "fa-solid fa-circle-info", "Title", "No models configured"], ["ngProjectAs", "[actions]", "mjButton", "", "variant", "outline", "size", "sm", 5, ["", "actions", ""]], ["ngProjectAs", "[actions]", "mjButton", "", "variant", "outline", "size", "sm", 5, ["", "actions", ""], 3, "click"], [2, "padding", "12px 16px", "background", "color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface))", "border-bottom", "1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default))", "color", "var(--mj-brand-primary)", "font-size", "0.85em"], [1, "model-header", 2, "display", "grid", "grid-template-columns", "40px 2fr 1fr 1fr 1fr 60px", "gap", "12px", "padding", "12px 16px", "background", "var(--mj-bg-surface-sunken)", "font-weight", "600", "font-size", "0.85em", "color", "var(--mj-text-secondary)", "border-bottom", "1px solid var(--mj-border-default)"], ["title", "Priority order - models are tried from top to bottom"], [1, "fa-solid", "fa-sort", 2, "color", "var(--mj-text-muted)"], [1, "add-model-row", 2, "padding", "12px 16px", "text-align", "center", "background", "var(--mj-bg-surface-sunken)", "border-top", "1px solid var(--mj-border-default)"], [1, "fa-solid", "fa-info-circle", 2, "margin-right", "6px"], [1, "model-row", 2, "display", "grid", "grid-template-columns", "40px 2fr 1fr 1fr 1fr 60px", "gap", "12px", "padding", "12px 16px", "border-bottom", "1px solid var(--mj-border-default)", "align-items", "start", "transition", "background 0.2s, opacity 0.2s", 3, "dragstart", "dragover", "drop", "dragend", "draggable"], [1, "drag-handle", 2, "display", "flex", "flex-direction", "column", "align-items", "center", "justify-content", "center", "color", "var(--mj-text-muted)"], [2, "font-size", "0.9em", "font-weight", "600", 3, "title"], [1, "model-select"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select a model...", 2, "width", "100%", 3, "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], [1, "model-vendor"], [1, "model-configuration"], [2, "font-size", "0.9em"], [1, "model-created"], [2, "color", "var(--mj-text-muted)", "font-size", "0.8em"], [2, "color", "#28a745", "font-size", "0.8em", "font-style", "italic"], [1, "model-actions", 2, "display", "flex", "gap", "2px", "flex-direction", "column"], [2, "display", "grid", "grid-template-columns", "40px 1fr", "gap", "12px", "padding", "8px 16px", "border-bottom", "1px solid var(--mj-border-default)", "background", "var(--mj-bg-surface-sunken)", "font-size", "0.85em", "color", "var(--mj-text-muted)"], [2, "display", "flex", "gap", "16px", "flex-wrap", "wrap", "align-items", "center", "margin-bottom", "8px"], [2, "padding", "8px", "background", "var(--mj-bg-surface-card)", "border", "1px solid var(--mj-border-default)", "border-radius", "4px", "margin-top", "8px"], ["title", "Drag to reorder priority", 1, "fa-solid", "fa-grip-vertical", 2, "cursor", "move"], [2, "font-size", "0.7em", "margin-top", "2px"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select a model...", 2, "width", "100%", 3, "ngModelChange", "ValueChange", "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], [2, "color", "var(--mj-text-muted)", "font-style", "italic", "font-size", "0.9em"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select vendor...", 2, "width", "100%", 3, "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select vendor...", 2, "width", "100%", 3, "ngModelChange", "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], [2, "font-size", "0.9em", "font-weight", "500", 3, "color"], [2, "font-size", "0.9em", "font-weight", "500"], [2, "font-size", "0.8em", "margin-left", "4px"], [2, "font-size", "0.9em", 3, "color"], [2, "color", "var(--mj-text-muted)", "font-size", "0.9em"], [2, "padding", "4px", "color", "var(--mj-text-muted)", "font-style", "italic", "font-size", "0.85em"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Default", 2, "width", "100%", 3, "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Default", 2, "width", "100%", 3, "ngModelChange", "ValueChange", "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], [2, "display", "flex", "gap", "2px", "margin-bottom", "4px"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Remove model", 2, "color", "var(--mj-status-error)"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Move up", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-up"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Move down", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-down"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Remove model", 2, "color", "var(--mj-status-error)", 3, "click"], [1, "fa-solid", "fa-times"], [2, "margin-bottom", "6px", "font-weight", "600", "color", "var(--mj-text-secondary)", "font-size", "0.9em"], [1, "fa-solid", "fa-layer-group"], [2, "display", "grid", "grid-template-columns", "1fr 1fr 1fr", "gap", "12px", "align-items", "center"], [2, "display", "flex", "gap", "16px", "flex-wrap", "wrap", "align-items", "center"], [2, "display", "block", "margin-bottom", "2px", "font-size", "0.8em", "font-weight", "600", "color", "var(--mj-text-secondary)"], ["TextField", "text", "ValueField", "value", "Placeholder", "Select mode...", 2, "width", "100%", "font-size", "0.85em", 3, "ngModelChange", "ngModel", "name", "Data", "ValuePrimitive"], ["Placeholder", "Count...", 2, "width", "100%", "font-size", "0.85em", 3, "ngModelChange", "ngModel", "name", "Min", "Step", "Format"], ["type", "text", "placeholder", "Parameter name...", 1, "mj-input", 2, "width", "100%", "font-size", "0.85em", 3, "ngModelChange", "ngModel", "name"], ["mjButton", "", "variant", "outline", "size", "sm", 2, "color", "var(--mj-status-success)", "border-color", "var(--mj-status-success)", 3, "click"], [1, "fa-solid", "fa-cogs", 2, "color", "var(--mj-text-muted)"], [2, "padding", "8px", "color", "var(--mj-text-muted)", "font-style", "italic"], ["name", "resultSelectorPromptID", "TextField", "text", "ValueField", "value", "Placeholder", "Select a result selector prompt...", 2, "width", "100%", 3, "ngModel", "Data", "ValuePrimitive", "Filterable"], ["name", "resultSelectorPromptID", "TextField", "text", "ValueField", "value", "Placeholder", "Select a result selector prompt...", 2, "width", "100%", 3, "ngModelChange", "ValueChange", "ngModel", "Data", "ValuePrimitive", "Filterable"], [1, "fa-solid", "fa-wand-magic-sparkles", 2, "color", "var(--mj-text-muted)"], ["Size", "compact", "Icon", "fa-solid fa-circle-info", "Title", "This template has no parameters defined"], [1, "fa-solid", "fa-sliders", 2, "color", "var(--mj-text-muted)"], ["title", "These parameters are defined in the template and will be available when executing this prompt", 1, "fa-solid", "fa-info-circle"], [2, "display", "grid", "gap", "12px"], [1, "parameter-card", 2, "border", "1px solid var(--mj-border-default)", "border-radius", "8px", "padding", "16px", "background", "var(--mj-bg-surface-sunken)", "transition", "all 0.2s", 3, "border-left"], [2, "margin-top", "16px", "padding", "12px", "background", "color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface))", "border-radius", "6px", "border", "1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default))"], [2, "display", "flex", "align-items", "flex-start", "gap", "8px"], [1, "fa-solid", "fa-lightbulb", 2, "color", "var(--mj-brand-primary)", "margin-top", "2px"], [2, "flex", "1", "font-size", "0.85em", "color", "var(--mj-brand-primary)", "line-height", "1.5"], [1, "parameter-card", 2, "border", "1px solid var(--mj-border-default)", "border-radius", "8px", "padding", "16px", "background", "var(--mj-bg-surface-sunken)", "transition", "all 0.2s"], [2, "display", "flex", "justify-content", "space-between", "align-items", "flex-start", "margin-bottom", "8px"], [2, "display", "flex", "align-items", "center", "gap", "8px"], [2, "font-size", "1.2em"], [2, "margin", "0", "color", "var(--mj-text-secondary)", "font-weight", "600"], [2, "color", "#dc3545", "font-size", "0.9em", "margin-left", "4px"], [1, "type-badge", 2, "color", "white", "padding", "4px 8px", "border-radius", "12px", "font-size", "0.75em", "font-weight", "500"], [2, "color", "#dc3545", "font-size", "0.85em", "font-weight", "500"], [2, "color", "var(--mj-text-muted)", "font-size", "0.85em"], [2, "margin", "0 0 8px 0", "color", "var(--mj-text-muted)", "font-size", "0.9em", "line-height", "1.4"], [2, "font-size", "0.85em", "color", "var(--mj-text-secondary)"], [2, "display", "flex", "align-items", "center", "gap", "4px", "margin-bottom", "4px"], [1, "fa-solid", "fa-info-circle", 2, "color", "var(--mj-text-muted)"], [2, "display", "grid", "grid-template-columns", "repeat(auto-fit, minmax(200px, 1fr))", "gap", "12px", "margin-top", "12px"], [2, "background", "var(--mj-bg-surface-card)", "padding", "8px 12px", "border-radius", "4px", "border", "1px solid var(--mj-border-default)"], [2, "display", "block", "font-size", "0.8em", "color", "var(--mj-text-muted)", "margin-bottom", "2px"], [2, "font-size", "0.85em", "color", "var(--mj-text-secondary)", "word-break", "break-all"], [2, "font-size", "0.8em", "color", "var(--mj-text-secondary)", "word-break", "break-all"], [2, "padding", "16px"], [2, "background", "var(--mj-bg-surface-sunken)", "border", "1px solid var(--mj-border-default)", "border-radius", "4px", "padding", "12px", "font-family", "'Courier New', monospace", "font-size", "0.9em", "white-space", "pre-wrap", "overflow", "auto", "max-height", "250px"], ["Variant", "warning"], [2, "color", "#dc3545", "font-size", "0.8em", "font-weight", "normal"], ["name", "outputExample", "language", "json", "placeholder", "Enter JSON example structure...", 2, "width", "100%", "height", "200px", "border", "1px solid var(--mj-border-default)", "border-radius", "4px", 3, "ngModelChange", "ngModel"], [2, "margin-top", "8px", "color", "var(--mj-text-muted)", "font-size", "0.85em"], [1, "fa-solid", "fa-info-circle"], [2, "text-align", "center", "padding", "40px", "color", "var(--mj-text-muted)"], ["Size", "compact", "Icon", "fa-solid fa-clock-rotate-left", "Title", "No execution history yet", "Message", "Run this prompt to see execution history here"], [1, "fa-solid", "fa-history", 2, "color", "var(--mj-text-muted)"], [2, "color", "var(--mj-text-muted)", "font-weight", "normal"], [1, "fa-solid", "fa-spinner", "fa-spin", 2, "font-size", "2em", "margin-bottom", "12px"], [2, "display", "flex", "justify-content", "space-between", "align-items", "center", "margin-bottom", "16px"], [2, "display", "flex", "gap", "8px", "align-items", "center"], [1, "mj-button-group"], ["mjButton", "", "size", "sm", 3, "click"], [2, "margin-left", "4px", "font-size", "0.8em", 3, "class"], [2, "border", "1px solid var(--mj-border-default)", "border-radius", "8px", "overflow", "hidden"], [2, "width", "100%", "border-collapse", "collapse"], [2, "background", "var(--mj-bg-surface-sunken)", "border-bottom", "2px solid var(--mj-border-default)"], [2, "padding", "12px", "text-align", "left", "font-weight", "600", "color", "var(--mj-text-secondary)"], [2, "padding", "12px", "text-align", "right", "font-weight", "600", "color", "var(--mj-text-secondary)"], [2, "padding", "12px", "text-align", "center", "font-weight", "600", "color", "var(--mj-text-secondary)"], [1, "history-row", 2, "border-bottom", "1px solid var(--mj-border-default)", 3, "even-row"], [2, "margin-left", "4px", "font-size", "0.8em"], [1, "history-row", 2, "border-bottom", "1px solid var(--mj-border-default)"], [2, "padding", "12px"], [2, "display", "flex", "align-items", "center", "gap", "6px"], [2, "padding", "12px", "color", "var(--mj-text-secondary)"], [2, "padding", "12px", "text-align", "right", "color", "var(--mj-text-secondary)"], [2, "padding", "12px", "text-align", "center"], [2, "padding", "4px 8px", "border-radius", "12px", "background", "var(--mj-bg-surface-sunken)", "color", "var(--mj-text-secondary)", "font-size", "0.85em", "font-weight", "500"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "View details", 3, "click"], [1, "fa-solid", "fa-external-link"], [3, "Params", "NewRecordValues", "AllowLoad", "ShowToolbar"], [1, "fa-solid", "fa-database", 2, "color", "var(--mj-text-muted)"], [2, "margin", "0 0 12px 0", "color", "var(--mj-text-secondary)"], [1, "fa-solid", "fa-link", 2, "color", "var(--mj-text-muted)"], [3, "Close", "Width", "Height", "MinWidth", "MinHeight", "Draggable", "Resizable", "Visible", "Title"], [3, "visibilityChange", "entity", "mode", "isVisible"]], template: function MJAIPromptFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
|
|
3571
|
+
} }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 2, consts: [["form", "ngForm"], ["templateEditor", ""], [3, "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [3, "Width", "Height", "MinWidth", "MinHeight", "Draggable", "Resizable", "Visible", "Title"], [3, "Navigate", "DeleteRequested", "FavoriteToggled", "HistoryRequested", "ListManagementRequested", "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [1, "record-form", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow", "hidden"], [1, "prompt-main-area", 2, "display", "flex", "flex-direction", "column", "flex", "1", "min-height", "0", "overflow-y", "auto"], [1, "prompt-header", "phone-hero", 2, "flex-shrink", "0", "padding", "20px", "background", "var(--mj-bg-surface-sunken)", "border-bottom", "2px solid var(--mj-border-default)"], [1, "hero-header-row"], [2, "flex", "1", "min-width", "0"], [2, "display", "flex", "align-items", "center", "gap", "12px", "margin-bottom", "8px"], [1, "fa-solid", "fa-robot", 2, "color", "var(--mj-brand-primary)", "font-size", "1.4em"], ["type", "text", "name", "promptName", "placeholder", "Enter prompt name...", 1, "mj-input", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModel"], [2, "display", "flex", "gap", "16px", "margin-bottom", "12px", "flex-wrap", "wrap"], ["name", "promptDescription", "placeholder", "Enter prompt description...", 1, "mj-textarea", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModel", "rows"], [1, "phone-hero-detail", 2, "margin", "0 0 12px 0", "color", "var(--mj-text-muted)", "font-size", "0.9em", "line-height", "1.4"], [1, "quick-config", "phone-hero-detail", 2, "display", "flex", "align-items", "center", "gap", "16px", "flex-wrap", "wrap"], [1, "config-item", 2, "display", "flex", "align-items", "center", "gap", "6px", "font-size", "0.85em"], [1, "fa-solid", "fa-layer-group", 2, "color", "var(--mj-text-muted)"], [2, "color", "var(--mj-text-muted)"], [2, "color", "var(--mj-text-secondary)", "font-weight", "500"], [1, "fa-solid", "fa-code", 2, "color", "var(--mj-text-muted)"], [2, "font-weight", "500"], [1, "action-buttons"], [2, "display", "flex", "gap", "8px"], ["mjButton", "", "variant", "primary", "size", "lg", "title", "Run AI Prompt Test Harness", 1, "phone-hero-run"], [2, "font-size", "0.75em", "color", "#dc3545", "text-align", "right", "max-width", "200px"], ["type", "button", 1, "phone-hero-summary"], [1, "configuration-sections", 2, "flex", "1", "background", "var(--mj-bg-surface-card)", "border-top", "2px solid var(--mj-border-default)", "padding", "16px", "min-height", "0"], [3, "ActiveKeyChange", "Enabled", "ActiveKey"], ["SectionKey", "template", "SectionTitle", "Template Editor", "SectionIcon", "fa-solid fa-code", 2, "margin-bottom", "12px", 3, "Expanded"], ["mjAccordionTitle", ""], [1, "phone-flush-x", "template-section", 2, "display", "flex", "flex-direction", "column", "min-height", "400px", "padding", "8px"], [1, "loading-state", 2, "flex", "1", "display", "flex", "align-items", "center", "justify-content", "center", "color", "var(--mj-text-muted)"], ["Size", "large", "Icon", "fa-solid fa-code", "Title", "No Template Associated", "Message", "This AI prompt needs a template to define its structure and parameters. Create a new template or link to an existing one.", 1, "no-template-state"], ["Variant", "warning", "Title", "Template Not Found", "Message", "The referenced template could not be loaded. It may have been deleted or moved.", 1, "invalid-template-state"], [1, "template-editor-container", 2, "flex", "1", "display", "flex", "flex-direction", "column", "min-height", "350px"], ["SectionKey", "models", "SectionTitle", "Models", "SectionIcon", "fa-solid fa-microchip", 2, "margin-bottom", "12px", 3, "SectionCount", "Expanded"], ["SectionKey", "advanced", "SectionTitle", "Advanced Configuration", "SectionIcon", "fa-solid fa-cogs", 2, "margin-bottom", "12px", 3, "Expanded"], [2, "padding", "16px 0"], [1, "related-grid-pair", 2, "display", "grid", "grid-template-columns", "1fr 1fr", "gap", "20px"], ["FieldName", "ParallelizationMode", "Type", "dropdownlist", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "ParallelCount", "Type", "numerictextbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "ParallelConfigParam", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "OutputType", "Type", "dropdownlist", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "EffortLevel", "Type", "numerictextbox", "Caption", "Effort Level (1-100)", "Description", "Higher values request more thorough reasoning", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "ValidationBehavior", "Type", "dropdownlist", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "EnableCaching", "Type", "checkbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "TemplateDataCapture", "Type", "select", 3, "Record", "ShowLabel", "EditMode"], [2, "margin-bottom", "16px"], [2, "display", "block", "margin-bottom", "4px", "font-weight", "600", "color", "var(--mj-text-secondary)", "font-size", "0.9em"], [2, "color", "var(--mj-text-secondary)"], ["SectionKey", "prefill", "SectionTitle", "Prefill & Output Control", "SectionIcon", "fa-solid fa-wand-magic-sparkles", 2, "margin-bottom", "12px", 3, "Expanded"], [2, "margin", "0 0 12px 0", "font-size", "0.85em", "color", "var(--mj-text-muted)"], ["FieldName", "AssistantPrefill", "Type", "textarea", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "StopSequences", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "PrefillFallbackMode", "Type", "dropdownlist", 3, "Record", "ShowLabel", "EditMode"], ["SectionKey", "parameters", "SectionTitle", "Template Parameters", "SectionIcon", "fa-solid fa-sliders", 2, "margin-bottom", "12px", 3, "Expanded"], ["SectionKey", "output-example", "SectionTitle", "Output Example", "SectionIcon", "fa-solid fa-code", 2, "margin-bottom", "12px", 3, "Expanded"], ["SectionKey", "history", "SectionTitle", "Execution History", "SectionIcon", "fa-solid fa-history", 2, "margin-bottom", "12px", 3, "SectionCount", "Expanded"], ["SectionKey", "cache", "SectionTitle", "Result Cache", "SectionIcon", "fa-solid fa-database", 2, "margin-bottom", "12px", 3, "Expanded"], ["SectionKey", "related", "SectionTitle", "Related Items", "SectionIcon", "fa-solid fa-link", 2, "margin-bottom", "12px", 3, "Expanded"], ["type", "text", "name", "promptName", "placeholder", "Enter prompt name...", 1, "mj-input", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModelChange", "ngModel"], [2, "margin", "0", "color", "var(--mj-text-secondary)", "font-weight", "600", "flex", "1"], [1, "status-badge", 2, "color", "white", "padding", "4px 10px", "border-radius", "12px", "font-size", "0.75em", "font-weight", "500"], ["name", "promptStatus", "TextField", "text", "ValueField", "value", 2, "width", "150px", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive"], [2, "color", "#dc3545"], [2, "padding", "8px", "color", "var(--mj-text-muted)", "font-style", "italic", "width", "200px"], ["name", "promptTypeID", "TextField", "Name", "ValueField", "ID", "Placeholder", "Select prompt type...", 2, "width", "200px", 3, "ngModel", "Data", "ValuePrimitive", "Filterable"], [1, "fa-solid", "fa-spinner", "fa-spin"], ["name", "promptTypeID", "TextField", "Name", "ValueField", "ID", "Placeholder", "Select prompt type...", 2, "width", "200px", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive", "Filterable"], ["name", "promptDescription", "placeholder", "Enter prompt description...", 1, "mj-textarea", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModelChange", "ngModel", "rows"], [1, "fa-solid", "fa-tag", 2, "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-database", 2, "color", "#28a745"], [2, "color", "#28a745", "font-weight", "500"], [1, "fa-solid", "fa-tachometer-alt", 2, "color", "var(--mj-text-muted)"], ["mjButton", "", "variant", "primary", "size", "lg", "title", "Run AI Prompt Test Harness", 1, "phone-hero-run", 3, "click"], [1, "fa-solid", "fa-play"], ["type", "button", 1, "phone-hero-summary", 3, "click"], [1, "phone-hero-summary-text"], ["aria-hidden", "true", 1, "fa-solid", "fa-chevron-down"], [2, "display", "flex", "align-items", "center", "gap", "8px", "font-weight", "600"], [2, "color", "var(--mj-text-muted)", "font-size", "0.9em", "font-weight", "normal"], [1, "fa-solid", "fa-spinner", "fa-spin", 2, "font-size", "24px", "margin-right", "12px"], ["ngProjectAs", "[actions]", 5, ["", "actions", ""], 2, "display", "flex", "gap", "12px"], ["mjButton", "", "variant", "primary"], ["mjButton", "", "variant", "outline"], ["mjButton", "", "variant", "primary", 3, "click"], [1, "fa-solid", "fa-plus"], ["mjButton", "", "variant", "outline", 3, "click"], [1, "fa-solid", "fa-link"], [1, "fa-solid", "fa-arrows-rotate"], [1, "template-actions", 2, "display", "flex", "gap", "8px", "padding", "8px", "border-bottom", "1px solid var(--mj-border-default)", "background", "var(--mj-bg-surface-sunken)"], [2, "flex", "1", "background", "var(--mj-bg-surface-card)", "border-radius", "6px", "border", "1px solid var(--mj-border-default)"], [2, "display", "block", "min-height", "300px", 3, "contentChange", "runTemplate", "template", "config"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Change to a different template"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Open template in new window"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Change to a different template", 3, "click"], [1, "fa-solid", "fa-exchange-alt"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Open template in new window", 3, "click"], [1, "fa-solid", "fa-external-link-alt"], [1, "model-management", 2, "border", "1px solid var(--mj-border-default)", "border-radius", "6px", "background", "var(--mj-bg-surface-sunken)"], [1, "loading-state", 2, "padding", "20px", "text-align", "center", "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-microchip", 2, "color", "var(--mj-text-muted)"], [1, "mj-accordion-badge"], [2, "color", "var(--mj-text-muted)", "font-size", "0.8em", "font-weight", "normal", "margin-left", "8px"], ["title", "Models are tried in order from top to bottom. The first available model will be used.", 1, "fa-solid", "fa-info-circle"], ["Size", "compact", "Icon", "fa-solid fa-circle-info", "Title", "No models configured"], ["ngProjectAs", "[actions]", "mjButton", "", "variant", "outline", "size", "sm", 5, ["", "actions", ""]], ["ngProjectAs", "[actions]", "mjButton", "", "variant", "outline", "size", "sm", 5, ["", "actions", ""], 3, "click"], [2, "padding", "12px 16px", "background", "color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface))", "border-bottom", "1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default))", "color", "var(--mj-brand-primary)", "font-size", "0.85em"], [1, "model-header", 2, "display", "grid", "grid-template-columns", "40px 2fr 1fr 1fr 1fr 60px", "gap", "12px", "padding", "12px 16px", "background", "var(--mj-bg-surface-sunken)", "font-weight", "600", "font-size", "0.85em", "color", "var(--mj-text-secondary)", "border-bottom", "1px solid var(--mj-border-default)"], ["title", "Priority order - models are tried from top to bottom"], [1, "fa-solid", "fa-sort", 2, "color", "var(--mj-text-muted)"], [1, "add-model-row", 2, "padding", "12px 16px", "text-align", "center", "background", "var(--mj-bg-surface-sunken)", "border-top", "1px solid var(--mj-border-default)"], [1, "fa-solid", "fa-info-circle", 2, "margin-right", "6px"], [1, "model-row", 2, "display", "grid", "grid-template-columns", "40px 2fr 1fr 1fr 1fr 60px", "gap", "12px", "padding", "12px 16px", "border-bottom", "1px solid var(--mj-border-default)", "align-items", "start", "transition", "background 0.2s, opacity 0.2s", 3, "dragstart", "dragover", "drop", "dragend", "draggable"], [1, "drag-handle", 2, "display", "flex", "flex-direction", "column", "align-items", "center", "justify-content", "center", "color", "var(--mj-text-muted)"], [2, "font-size", "0.9em", "font-weight", "600", 3, "title"], [1, "model-select"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select a model...", 2, "width", "100%", 3, "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], [1, "model-vendor"], [1, "model-configuration"], [2, "font-size", "0.9em"], [1, "model-created"], [2, "color", "var(--mj-text-muted)", "font-size", "0.8em"], [2, "color", "#28a745", "font-size", "0.8em", "font-style", "italic"], [1, "model-actions", 2, "display", "flex", "gap", "2px", "flex-direction", "column"], [1, "model-details-row", 2, "display", "grid", "grid-template-columns", "40px 1fr", "gap", "12px", "padding", "8px 16px", "border-bottom", "1px solid var(--mj-border-default)", "background", "var(--mj-bg-surface-sunken)", "font-size", "0.85em", "color", "var(--mj-text-muted)"], [2, "display", "flex", "gap", "16px", "flex-wrap", "wrap", "align-items", "center", "margin-bottom", "8px"], [2, "padding", "8px", "background", "var(--mj-bg-surface-card)", "border", "1px solid var(--mj-border-default)", "border-radius", "4px", "margin-top", "8px"], ["title", "Drag to reorder priority", 1, "fa-solid", "fa-grip-vertical", 2, "cursor", "move"], [2, "font-size", "0.7em", "margin-top", "2px"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select a model...", 2, "width", "100%", 3, "ngModelChange", "ValueChange", "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], [2, "color", "var(--mj-text-muted)", "font-style", "italic", "font-size", "0.9em"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select vendor...", 2, "width", "100%", 3, "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select vendor...", 2, "width", "100%", 3, "ngModelChange", "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], [2, "font-size", "0.9em", "font-weight", "500", 3, "color"], [2, "font-size", "0.9em", "font-weight", "500"], [2, "font-size", "0.8em", "margin-left", "4px"], [2, "font-size", "0.9em", 3, "color"], [2, "color", "var(--mj-text-muted)", "font-size", "0.9em"], [2, "padding", "4px", "color", "var(--mj-text-muted)", "font-style", "italic", "font-size", "0.85em"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Default", 2, "width", "100%", 3, "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Default", 2, "width", "100%", 3, "ngModelChange", "ValueChange", "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], [2, "display", "flex", "gap", "2px", "margin-bottom", "4px"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Remove model", 2, "color", "var(--mj-status-error)"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Move up", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-up"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Move down", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-down"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Remove model", 2, "color", "var(--mj-status-error)", 3, "click"], [1, "fa-solid", "fa-times"], [2, "margin-bottom", "6px", "font-weight", "600", "color", "var(--mj-text-secondary)", "font-size", "0.9em"], [1, "fa-solid", "fa-layer-group"], [1, "model-parallel-grid", 2, "display", "grid", "grid-template-columns", "1fr 1fr 1fr", "gap", "12px", "align-items", "center"], [2, "display", "flex", "gap", "16px", "flex-wrap", "wrap", "align-items", "center"], [2, "display", "block", "margin-bottom", "2px", "font-size", "0.8em", "font-weight", "600", "color", "var(--mj-text-secondary)"], ["TextField", "text", "ValueField", "value", "Placeholder", "Select mode...", 2, "width", "100%", "font-size", "0.85em", 3, "ngModelChange", "ngModel", "name", "Data", "ValuePrimitive"], ["Placeholder", "Count...", 2, "width", "100%", "font-size", "0.85em", 3, "ngModelChange", "ngModel", "name", "Min", "Step", "Format"], ["type", "text", "placeholder", "Parameter name...", 1, "mj-input", 2, "width", "100%", "font-size", "0.85em", 3, "ngModelChange", "ngModel", "name"], ["mjButton", "", "variant", "outline", "size", "sm", 2, "color", "var(--mj-status-success)", "border-color", "var(--mj-status-success)", 3, "click"], [1, "fa-solid", "fa-cogs", 2, "color", "var(--mj-text-muted)"], [2, "padding", "8px", "color", "var(--mj-text-muted)", "font-style", "italic"], ["name", "resultSelectorPromptID", "TextField", "text", "ValueField", "value", "Placeholder", "Select a result selector prompt...", 2, "width", "100%", 3, "ngModel", "Data", "ValuePrimitive", "Filterable"], ["name", "resultSelectorPromptID", "TextField", "text", "ValueField", "value", "Placeholder", "Select a result selector prompt...", 2, "width", "100%", 3, "ngModelChange", "ValueChange", "ngModel", "Data", "ValuePrimitive", "Filterable"], [1, "fa-solid", "fa-wand-magic-sparkles", 2, "color", "var(--mj-text-muted)"], ["Size", "compact", "Icon", "fa-solid fa-circle-info", "Title", "This template has no parameters defined"], [1, "fa-solid", "fa-sliders", 2, "color", "var(--mj-text-muted)"], ["title", "These parameters are defined in the template and will be available when executing this prompt", 1, "fa-solid", "fa-info-circle"], [2, "display", "grid", "gap", "12px"], [1, "parameter-card", 2, "border", "1px solid var(--mj-border-default)", "border-radius", "8px", "padding", "16px", "background", "var(--mj-bg-surface-sunken)", "transition", "all 0.2s", 3, "border-left"], [2, "margin-top", "16px", "padding", "12px", "background", "color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface))", "border-radius", "6px", "border", "1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default))"], [2, "display", "flex", "align-items", "flex-start", "gap", "8px"], [1, "fa-solid", "fa-lightbulb", 2, "color", "var(--mj-brand-primary)", "margin-top", "2px"], [2, "flex", "1", "font-size", "0.85em", "color", "var(--mj-brand-primary)", "line-height", "1.5"], [1, "parameter-card", 2, "border", "1px solid var(--mj-border-default)", "border-radius", "8px", "padding", "16px", "background", "var(--mj-bg-surface-sunken)", "transition", "all 0.2s"], [2, "display", "flex", "justify-content", "space-between", "align-items", "flex-start", "margin-bottom", "8px"], [2, "display", "flex", "align-items", "center", "gap", "8px"], [2, "font-size", "1.2em"], [2, "margin", "0", "color", "var(--mj-text-secondary)", "font-weight", "600"], [2, "color", "#dc3545", "font-size", "0.9em", "margin-left", "4px"], [1, "type-badge", 2, "color", "white", "padding", "4px 8px", "border-radius", "12px", "font-size", "0.75em", "font-weight", "500"], [2, "color", "#dc3545", "font-size", "0.85em", "font-weight", "500"], [2, "color", "var(--mj-text-muted)", "font-size", "0.85em"], [2, "margin", "0 0 8px 0", "color", "var(--mj-text-muted)", "font-size", "0.9em", "line-height", "1.4"], [2, "font-size", "0.85em", "color", "var(--mj-text-secondary)"], [2, "display", "flex", "align-items", "center", "gap", "4px", "margin-bottom", "4px"], [1, "fa-solid", "fa-info-circle", 2, "color", "var(--mj-text-muted)"], [2, "display", "grid", "grid-template-columns", "repeat(auto-fit, minmax(200px, 1fr))", "gap", "12px", "margin-top", "12px"], [2, "background", "var(--mj-bg-surface-card)", "padding", "8px 12px", "border-radius", "4px", "border", "1px solid var(--mj-border-default)"], [2, "display", "block", "font-size", "0.8em", "color", "var(--mj-text-muted)", "margin-bottom", "2px"], [2, "font-size", "0.85em", "color", "var(--mj-text-secondary)", "word-break", "break-all"], [2, "font-size", "0.8em", "color", "var(--mj-text-secondary)", "word-break", "break-all"], [1, "phone-flush-x", 2, "padding", "16px"], [2, "background", "var(--mj-bg-surface-sunken)", "border", "1px solid var(--mj-border-default)", "border-radius", "4px", "padding", "12px", "font-family", "'Courier New', monospace", "font-size", "0.9em", "white-space", "pre-wrap", "overflow", "auto", "max-height", "250px"], ["Variant", "warning"], [2, "color", "#dc3545", "font-size", "0.8em", "font-weight", "normal"], ["name", "outputExample", "language", "json", "placeholder", "Enter JSON example structure...", 2, "width", "100%", "height", "200px", "border", "1px solid var(--mj-border-default)", "border-radius", "4px", 3, "ngModelChange", "ngModel"], [2, "margin-top", "8px", "color", "var(--mj-text-muted)", "font-size", "0.85em"], [1, "fa-solid", "fa-info-circle"], [2, "text-align", "center", "padding", "40px", "color", "var(--mj-text-muted)"], ["Size", "compact", "Icon", "fa-solid fa-clock-rotate-left", "Title", "No execution history yet", "Message", "Run this prompt to see execution history here"], [1, "fa-solid", "fa-history", 2, "color", "var(--mj-text-muted)"], [2, "color", "var(--mj-text-muted)", "font-weight", "normal"], [1, "fa-solid", "fa-spinner", "fa-spin", 2, "font-size", "2em", "margin-bottom", "12px"], [2, "display", "flex", "justify-content", "space-between", "align-items", "center", "margin-bottom", "16px"], [2, "display", "flex", "gap", "8px", "align-items", "center"], [1, "mj-button-group"], ["mjButton", "", "size", "sm", 3, "click"], [2, "margin-left", "4px", "font-size", "0.8em", 3, "class"], [1, "history-table-wrap", 2, "border", "1px solid var(--mj-border-default)", "border-radius", "8px", "overflow", "hidden"], [2, "width", "100%", "border-collapse", "collapse"], [2, "background", "var(--mj-bg-surface-sunken)", "border-bottom", "2px solid var(--mj-border-default)"], [2, "padding", "12px", "text-align", "left", "font-weight", "600", "color", "var(--mj-text-secondary)"], [2, "padding", "12px", "text-align", "right", "font-weight", "600", "color", "var(--mj-text-secondary)"], [2, "padding", "12px", "text-align", "center", "font-weight", "600", "color", "var(--mj-text-secondary)"], [1, "history-row", 2, "border-bottom", "1px solid var(--mj-border-default)", 3, "even-row"], [1, "history-cards"], ["type", "button", 1, "history-card"], [2, "margin-left", "4px", "font-size", "0.8em"], [1, "history-row", 2, "border-bottom", "1px solid var(--mj-border-default)"], [2, "padding", "12px"], [2, "display", "flex", "align-items", "center", "gap", "6px"], [2, "padding", "12px", "color", "var(--mj-text-secondary)"], [2, "padding", "12px", "text-align", "right", "color", "var(--mj-text-secondary)"], [2, "padding", "12px", "text-align", "center"], [2, "padding", "4px 8px", "border-radius", "12px", "background", "var(--mj-bg-surface-sunken)", "color", "var(--mj-text-secondary)", "font-size", "0.85em", "font-weight", "500"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "View details", 3, "click"], [1, "fa-solid", "fa-external-link"], ["type", "button", 1, "history-card", 3, "click"], [1, "history-card-main"], [1, "history-card-status"], ["aria-hidden", "true"], [1, "history-card-model"], [1, "history-card-meta"], ["aria-hidden", "true", 1, "fa-solid", "fa-chevron-right", "history-card-open"], [3, "Params", "NewRecordValues", "AllowLoad", "ShowToolbar"], [1, "fa-solid", "fa-database", 2, "color", "var(--mj-text-muted)"], [2, "margin", "0 0 12px 0", "color", "var(--mj-text-secondary)"], [1, "fa-solid", "fa-link", 2, "color", "var(--mj-text-muted)"], [3, "Close", "Width", "Height", "MinWidth", "MinHeight", "Draggable", "Resizable", "Visible", "Title"], [3, "visibilityChange", "entity", "mode", "isVisible"]], template: function MJAIPromptFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
|
|
3477
3572
|
i0.ɵɵelement(0, "div");
|
|
3478
|
-
i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Template,
|
|
3573
|
+
i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Template, 80, 63, "mj-record-form-container", 2);
|
|
3479
3574
|
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_2_Template, 2, 11, "mj-window", 3);
|
|
3480
3575
|
} if (rf & 2) {
|
|
3481
3576
|
i0.ɵɵadvance();
|
|
3482
3577
|
i0.ɵɵconditional(ctx.record ? 1 : -1);
|
|
3483
3578
|
i0.ɵɵadvance();
|
|
3484
3579
|
i0.ɵɵconditional(ctx.showTestHarness ? 2 : -1);
|
|
3485
|
-
} }, dependencies: [i1.ɵNgNoValidate, i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgControlStatusGroup, i1.NgModel, i1.NgForm, i2.MJEmptyStateComponent, i2.MJAlertComponent, i2.MJButtonDirective, i2.MJAccordionPanelComponent, i2.MJAccordionTitleDirective, i2.MJDropdownComponent, i2.MJNumericInputComponent, i2.MJWindowComponent, i3.MjFormFieldComponent, i3.MjRecordFormContainerComponent, i3.ExplorerEntityDataGridComponent, i4.CodeEditorComponent, i5.AITestHarnessComponent, i6.TemplateEditorComponent, i7.DatePipe], styles: ["\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n.record-form-container[_ngcontent-%COMP%] {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n padding: 10px;\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form[_ngcontent-%COMP%] {\n min-height: 0 !important;\n}\n\n.custom-toolbar-actions[_ngcontent-%COMP%] {\n margin-left: auto;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n font-weight: 500;\n letter-spacing: 0.02em;\n}\n\n.config-summary[_ngcontent-%COMP%] {\n position: sticky;\n top: 0;\n max-height: 600px;\n overflow-y: auto;\n}\n\n.config-item[_ngcontent-%COMP%] {\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.config-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.template-tab-content[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n}\n\n.template-header[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n font-size: 1.1em;\n}\n\n.loading-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n\nmj-empty-state.no-template-state[_ngcontent-%COMP%], \nmj-empty-state.invalid-template-state[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.template-editor-container[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-md);\n}\n\n\n@media (max-width: 1200px) {\n .record-form-container[_ngcontent-%COMP%] .mj-tab-body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n grid-template-columns: 1fr !important;\n gap: 20px;\n }\n\n .config-summary[_ngcontent-%COMP%] {\n order: -1;\n position: static;\n max-height: none;\n }\n}\n\n\n@media (max-width: 768px) {\n .custom-toolbar-actions[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 4px !important;\n }\n\n .status-badge[_ngcontent-%COMP%] {\n align-self: flex-start;\n }\n}\n\n\n.record-form-container[_ngcontent-%COMP%] mj-form-section[_ngcontent-%COMP%] {\n padding: 16px;\n}\n\n\n.status-badge[_ngcontent-%COMP%], \n.config-item[_ngcontent-%COMP%], \n.template-header[_ngcontent-%COMP%] {\n transition: all 0.2s ease;\n}\n\n.config-item[_ngcontent-%COMP%]:hover {\n background-color: var(--mj-bg-surface-sunken);\n border-radius: var(--mj-radius-sm);\n margin: 0 -8px;\n padding: 8px;\n}\n\n\n.history-row[_ngcontent-%COMP%] {\n transition: background 0.2s;\n}\n\n.history-row[_ngcontent-%COMP%]:not(.even-row) {\n background: var(--mj-bg-surface-card);\n}\n\n.history-row.even-row[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n}\n\n.history-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default) !important;\n}\n\n\n.parameter-card[_ngcontent-%COMP%] {\n position: relative;\n overflow: hidden;\n}\n\n.parameter-card[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 4px;\n background: inherit;\n transition: width 0.2s;\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: var(--mj-shadow-md);\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover::before {\n width: 6px;\n}\n\n.type-badge[_ngcontent-%COMP%] {\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n transition: transform 0.2s;\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover .type-badge[_ngcontent-%COMP%] {\n transform: scale(1.05);\n}\n\n\n.parameter-card[_ngcontent-%COMP%] i.fa-solid[_ngcontent-%COMP%] {\n transition: transform 0.3s;\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover i.fa-solid[_ngcontent-%COMP%] {\n transform: rotate(360deg);\n}\n\n\n@media (max-width: 768px) {\n .parameter-card[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n }\n\n .parameter-card[_ngcontent-%COMP%] h6[_ngcontent-%COMP%] {\n font-size: 0.95em;\n }\n\n .type-badge[_ngcontent-%COMP%] {\n font-size: 0.7em !important;\n }\n}"] }); }
|
|
3580
|
+
} }, dependencies: [i1.ɵNgNoValidate, i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgControlStatusGroup, i1.NgModel, i1.NgForm, i2.MJEmptyStateComponent, i2.MJAlertComponent, i2.MJAccordionSectionsComponent, i2.MJButtonDirective, i2.MJAccordionPanelComponent, i2.MJAccordionTitleDirective, i2.MJDropdownComponent, i2.MJNumericInputComponent, i2.MJWindowComponent, i3.MjFormFieldComponent, i3.MjRecordFormContainerComponent, i3.ExplorerEntityDataGridComponent, i4.CodeEditorComponent, i5.AITestHarnessComponent, i6.TemplateEditorComponent, i7.DatePipe], styles: ["\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n.record-form-container[_ngcontent-%COMP%] {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n padding: 10px;\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form[_ngcontent-%COMP%] {\n min-height: 0 !important;\n}\n\n.custom-toolbar-actions[_ngcontent-%COMP%] {\n margin-left: auto;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n font-weight: 500;\n letter-spacing: 0.02em;\n}\n\n.config-summary[_ngcontent-%COMP%] {\n position: sticky;\n top: 0;\n max-height: 600px;\n overflow-y: auto;\n}\n\n.config-item[_ngcontent-%COMP%] {\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.config-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.template-tab-content[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n}\n\n.template-header[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n font-size: 1.1em;\n}\n\n.loading-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n\nmj-empty-state.no-template-state[_ngcontent-%COMP%], \nmj-empty-state.invalid-template-state[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.template-editor-container[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-md);\n}\n\n\n@media (max-width: 1200px) {\n .record-form-container[_ngcontent-%COMP%] .mj-tab-body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n grid-template-columns: 1fr !important;\n gap: 20px;\n }\n\n .config-summary[_ngcontent-%COMP%] {\n order: -1;\n position: static;\n max-height: none;\n }\n}\n\n\n@media (max-width: 768px) {\n .custom-toolbar-actions[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 4px !important;\n }\n\n .status-badge[_ngcontent-%COMP%] {\n align-self: flex-start;\n }\n}\n\n\n.record-form-container[_ngcontent-%COMP%] mj-form-section[_ngcontent-%COMP%] {\n padding: 16px;\n}\n\n\n.status-badge[_ngcontent-%COMP%], \n.config-item[_ngcontent-%COMP%], \n.template-header[_ngcontent-%COMP%] {\n transition: all 0.2s ease;\n}\n\n.config-item[_ngcontent-%COMP%]:hover {\n background-color: var(--mj-bg-surface-sunken);\n border-radius: var(--mj-radius-sm);\n margin: 0 -8px;\n padding: 8px;\n}\n\n\n.history-row[_ngcontent-%COMP%] {\n transition: background 0.2s;\n}\n\n.history-row[_ngcontent-%COMP%]:not(.even-row) {\n background: var(--mj-bg-surface-card);\n}\n\n.history-row.even-row[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n}\n\n.history-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default) !important;\n}\n\n\n.parameter-card[_ngcontent-%COMP%] {\n position: relative;\n overflow: hidden;\n}\n\n.parameter-card[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 4px;\n background: inherit;\n transition: width 0.2s;\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: var(--mj-shadow-md);\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover::before {\n width: 6px;\n}\n\n.type-badge[_ngcontent-%COMP%] {\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n transition: transform 0.2s;\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover .type-badge[_ngcontent-%COMP%] {\n transform: scale(1.05);\n}\n\n\n.parameter-card[_ngcontent-%COMP%] i.fa-solid[_ngcontent-%COMP%] {\n transition: transform 0.3s;\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover i.fa-solid[_ngcontent-%COMP%] {\n transform: rotate(360deg);\n}\n\n\n@media (max-width: 768px) {\n .parameter-card[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n }\n\n .parameter-card[_ngcontent-%COMP%] h6[_ngcontent-%COMP%] {\n font-size: 0.95em;\n }\n\n .type-badge[_ngcontent-%COMP%] {\n font-size: 0.7em !important;\n }\n}\n\n\n.hero-header-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n}\n\n.action-buttons[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n align-items: flex-end;\n}\n\n@media (max-width: 768px) {\n .hero-header-row[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .action-buttons[_ngcontent-%COMP%] {\n width: 100%;\n align-items: stretch;\n }\n\n .action-buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n }\n\n .action-buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > button[_ngcontent-%COMP%] {\n flex: 1;\n }\n}\n\n\n@media (max-width: 768px) {\n .related-grid-pair[_ngcontent-%COMP%] {\n grid-template-columns: 1fr !important;\n }\n}\n\n\n\n\n\n.history-cards[_ngcontent-%COMP%] {\n display: none;\n}\n\n@media (max-width: 768px) {\n \n .model-management[_ngcontent-%COMP%] .model-header[_ngcontent-%COMP%], \n .model-management[_ngcontent-%COMP%] .model-created[_ngcontent-%COMP%] {\n display: none !important;\n }\n\n .model-management[_ngcontent-%COMP%] .model-row[_ngcontent-%COMP%] {\n grid-template-columns: 32px auto minmax(0, 1fr) auto !important;\n grid-template-areas:\n \"prio model model actions\"\n \"prio vendor config actions\";\n column-gap: 8px !important;\n row-gap: 2px !important;\n padding: 10px 12px !important;\n align-items: center !important;\n }\n\n \n .model-management[_ngcontent-%COMP%] .model-row[_ngcontent-%COMP%]:has(mj-dropdown) {\n grid-template-columns: 32px minmax(0, 1fr) auto !important;\n grid-template-areas:\n \"prio model actions\"\n \"prio vendor actions\"\n \"prio config actions\";\n row-gap: 8px !important;\n }\n\n .model-row[_ngcontent-%COMP%] > .drag-handle[_ngcontent-%COMP%] { grid-area: prio; }\n .model-row[_ngcontent-%COMP%] > .model-select[_ngcontent-%COMP%] { grid-area: model; min-width: 0; }\n .model-row[_ngcontent-%COMP%] > .model-vendor[_ngcontent-%COMP%] { grid-area: vendor; min-width: 0; }\n .model-row[_ngcontent-%COMP%] > .model-configuration[_ngcontent-%COMP%] { grid-area: config; min-width: 0; }\n .model-row[_ngcontent-%COMP%] > .model-actions[_ngcontent-%COMP%] { grid-area: actions; }\n\n .model-row[_ngcontent-%COMP%]:not(:has(mj-dropdown)) > .model-vendor[_ngcontent-%COMP%], \n .model-row[_ngcontent-%COMP%]:not(:has(mj-dropdown)) > .model-configuration[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .model-row[_ngcontent-%COMP%]:not(:has(mj-dropdown)) > .model-configuration[_ngcontent-%COMP%]::before {\n content: '\u00B7';\n margin-right: 6px;\n }\n\n .model-management[_ngcontent-%COMP%] .model-details-row[_ngcontent-%COMP%] {\n grid-template-columns: minmax(0, 1fr) !important;\n padding: 8px 12px !important;\n }\n\n .model-management[_ngcontent-%COMP%] .model-details-row[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child {\n display: none;\n }\n\n .model-management[_ngcontent-%COMP%] .model-parallel-grid[_ngcontent-%COMP%] {\n grid-template-columns: minmax(0, 1fr) !important;\n }\n\n \n .history-table-wrap[_ngcontent-%COMP%] {\n display: none !important;\n }\n\n .history-cards[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n }\n\n .history-card[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: center;\n column-gap: 8px;\n row-gap: 2px;\n min-height: 44px;\n padding: 10px 12px;\n border: 0;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font: inherit;\n text-align: left;\n cursor: pointer;\n }\n\n .history-card[_ngcontent-%COMP%]:last-child {\n border-bottom: 0;\n }\n\n .history-card[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n }\n\n .history-card[_ngcontent-%COMP%]:focus-visible {\n outline: none;\n box-shadow: var(--mj-focus-ring);\n }\n\n .history-card-main[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n font-size: var(--mj-text-sm);\n }\n\n .history-card-status[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n flex-shrink: 0;\n font-weight: var(--mj-font-semibold);\n }\n\n .history-card-model[_ngcontent-%COMP%] {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--mj-text-secondary);\n }\n\n .history-card-meta[_ngcontent-%COMP%] {\n grid-column: 1;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n overflow-wrap: anywhere;\n }\n\n .history-card-open[_ngcontent-%COMP%] {\n grid-column: 2;\n grid-row: 1 / span 2;\n color: var(--mj-text-muted);\n font-size: var(--mj-text-xs);\n }\n}\n\n\n\n@media (max-width: 768px) {\n .configuration-sections[_ngcontent-%COMP%] {\n padding: 12px 0 !important;\n border-top: 0 !important;\n background: transparent !important;\n }\n\n .phone-flush-x[_ngcontent-%COMP%] {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n}", "\n\n\n\n\n\n\n\n\n\n\n\n\n\n.phone-hero-summary[_ngcontent-%COMP%], \n.phone-hero-only[_ngcontent-%COMP%] {\n display: none;\n}\n\n@media (max-width: 768px) {\n .phone-hero[_ngcontent-%COMP%] {\n padding: 12px !important;\n }\n\n \n .phone-hero.hero-compact[_ngcontent-%COMP%] .phone-hero-detail[_ngcontent-%COMP%], \n .phone-hero.hero-view[_ngcontent-%COMP%] .phone-hero-hide[_ngcontent-%COMP%] {\n display: none !important;\n }\n\n .phone-hero-only[_ngcontent-%COMP%] {\n display: inline-flex;\n }\n\n \n .phone-hero[_ngcontent-%COMP%] .phone-hero-stats[_ngcontent-%COMP%] {\n display: grid !important;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 8px;\n }\n\n .phone-hero-status[_ngcontent-%COMP%] {\n align-items: center;\n gap: 4px;\n margin-left: 8px;\n padding: 2px 8px;\n border-radius: var(--mj-radius-full, 999px);\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n vertical-align: middle;\n white-space: nowrap;\n }\n\n \n .phone-hero-status[data-status=\"running\"][_ngcontent-%COMP%] { color: var(--mj-status-warning-text); background: var(--mj-status-warning-bg); }\n .phone-hero-status[data-status=\"success\"][_ngcontent-%COMP%] { color: var(--mj-status-success-text); background: var(--mj-status-success-bg); }\n .phone-hero-status[data-status=\"error\"][_ngcontent-%COMP%] { color: var(--mj-status-error-text); background: var(--mj-status-error-bg); }\n .phone-hero-status[data-status=\"info\"][_ngcontent-%COMP%] { color: var(--mj-status-info-text); background: var(--mj-status-info-bg); }\n\n .phone-hero-top[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n gap: 10px;\n }\n\n .phone-hero-actions[_ngcontent-%COMP%] {\n width: 100%;\n }\n\n .phone-hero[_ngcontent-%COMP%] .phone-hero-run[_ngcontent-%COMP%] {\n width: 100%;\n min-height: 44px;\n justify-content: center;\n }\n\n \n\n .phone-hero-summary[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n min-height: 44px;\n margin-top: 8px;\n padding: 0 4px;\n border: 0;\n border-top: 1px solid color-mix(in srgb, currentColor 20%, transparent);\n background: transparent;\n color: inherit;\n font: inherit;\n font-size: var(--mj-text-sm);\n text-align: left;\n cursor: pointer;\n opacity: 0.85;\n }\n\n .phone-hero-summary[_ngcontent-%COMP%]:focus-visible {\n outline: none;\n box-shadow: var(--mj-focus-ring);\n }\n\n .phone-hero-summary-text[_ngcontent-%COMP%] {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .phone-hero-summary[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n flex-shrink: 0;\n transition: transform 0.15s ease;\n }\n\n .phone-hero-summary[aria-expanded=\"true\"][_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .phone-hero-summary[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n transition: none;\n }\n}"] }); }
|
|
3486
3581
|
};
|
|
3487
3582
|
MJAIPromptFormComponentExtended = __decorate([
|
|
3488
3583
|
RegisterClass(BaseFormComponent, 'MJ: AI Prompts')
|
|
@@ -3490,10 +3585,10 @@ MJAIPromptFormComponentExtended = __decorate([
|
|
|
3490
3585
|
export { MJAIPromptFormComponentExtended };
|
|
3491
3586
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJAIPromptFormComponentExtended, [{
|
|
3492
3587
|
type: Component,
|
|
3493
|
-
args: [{ standalone: false, selector: 'mj-ai-prompt-form', template: "<!-- Dialog container -->\n<div></div>\n@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"toolbarConfig\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n <!-- Main Content Area - Template Editor and Configuration -->\n <div class=\"prompt-main-area\" style=\"display: flex; flex-direction: column; flex: 1; min-height: 0; overflow-y: auto;\">\n <!-- Header Section -->\n <div class=\"prompt-header\" style=\"flex-shrink: 0; padding: 20px; background: var(--mj-bg-surface-sunken); border-bottom: 2px solid var(--mj-border-default);\">\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; gap: 20px;\">\n <!-- Left: Prompt Info -->\n <div style=\"flex: 1; min-width: 0;\">\n <div style=\"display: flex; align-items: center; gap: 12px; margin-bottom: 8px;\">\n <i class=\"fa-solid fa-robot\" style=\"color: var(--mj-brand-primary); font-size: 1.4em;\"></i>\n @if (EditMode) {\n <input type=\"text\" class=\"mj-input\" [(ngModel)]=\"record.Name\"\n name=\"promptName\"\n placeholder=\"Enter prompt name...\"\n style=\"font-size: 1.2em; font-weight: 600; min-width: 300px; flex: 1;\" />\n } @else {\n <h4 style=\"margin: 0; color: var(--mj-text-secondary); font-weight: 600; flex: 1;\">{{ record.Name || 'Untitled AI Prompt' }}</h4>\n <span class=\"status-badge\" [style.background-color]=\"getStatusBadgeColor()\"\n style=\"color: white; padding: 4px 10px; border-radius: 12px; font-size: 0.75em; font-weight: 500;\">\n {{ record.Status }}\n </span>\n }\n </div>\n <!-- Status and Type Editors when in edit mode -->\n @if (EditMode) {\n <div style=\"display: flex; gap: 16px; margin-bottom: 12px; flex-wrap: wrap;\">\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">Status</label>\n <mj-dropdown [(ngModel)]=\"record.Status\"\n name=\"promptStatus\"\n [Data]=\"[{text: 'Active', value: 'Active'}, {text: 'Pending', value: 'Pending'}, {text: 'Disabled', value: 'Disabled'}]\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n style=\"width: 150px;\">\n </mj-dropdown>\n </div>\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n Type <span style=\"color: #dc3545;\">*</span>\n </label>\n @if (isLoadingPromptTypes) {\n <div style=\"padding: 8px; color: var(--mj-text-muted); font-style: italic; width: 200px;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading types...\n </div>\n } @else {\n <mj-dropdown [(ngModel)]=\"record.TypeID\"\n name=\"promptTypeID\"\n [Data]=\"availablePromptTypes\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Select prompt type...\"\n style=\"width: 200px;\">\n </mj-dropdown>\n }\n </div>\n </div>\n }\n @if (EditMode) {\n <textarea class=\"mj-textarea\" [(ngModel)]=\"record.Description\"\n name=\"promptDescription\"\n [rows]=\"2\"\n placeholder=\"Enter prompt description...\"\n style=\"width: 100%; max-width: 600px; margin-bottom: 12px;\"></textarea>\n } @else if (record.Description) {\n <p style=\"margin: 0 0 12px 0; color: var(--mj-text-muted); font-size: 0.9em; line-height: 1.4;\">{{ record.Description }}</p>\n }\n <!-- Quick Config Row -->\n <div class=\"quick-config\" style=\"display: flex; align-items: center; gap: 16px; flex-wrap: wrap;\">\n @if (record.TypeID) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-tag\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Type:</span>\n <span style=\"color: var(--mj-text-secondary); font-weight: 500;\">{{ getPromptTypeDisplayName(record.TypeID) }}</span>\n </div>\n }\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-layer-group\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Parallelization:</span>\n <span style=\"color: var(--mj-text-secondary); font-weight: 500;\">{{ getParallelizationModeDisplay() }}</span>\n </div>\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-code\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Output:</span>\n <span [style.color]=\"getValidationColor()\" style=\"font-weight: 500;\">{{ getOutputTypeDisplay() }}</span>\n </div>\n @if (record.EnableCaching) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-database\" style=\"color: #28a745;\"></i>\n <span style=\"color: #28a745; font-weight: 500;\">Caching Enabled</span>\n </div>\n }\n @if (record.EffortLevel) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-tachometer-alt\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Effort Level:</span>\n <span style=\"color: var(--mj-text-secondary); font-weight: 500;\">{{ record.EffortLevel }}</span>\n </div>\n }\n </div>\n </div>\n <!-- Right: Action Buttons -->\n <div class=\"action-buttons\" style=\"display: flex; flex-direction: column; gap: 8px; align-items: flex-end;\">\n <div style=\"display: flex; gap: 8px;\">\n @if (record.ID) {\n <button mjButton variant=\"primary\" size=\"lg\"\n (click)=\"openTestHarness()\"\n title=\"Run AI Prompt Test Harness\">\n <i class=\"fa-solid fa-play\"></i> Run\n </button>\n }\n </div>\n @if (!canExecute && record.ID) {\n <div style=\"font-size: 0.75em; color: #dc3545; text-align: right; max-width: 200px;\">\n @if (record.Status !== 'Active') {\n \u2022 Prompt must be Active<br>\n }\n @if (!record.TemplateID) {\n \u2022 Template is required<br>\n }\n @if (!template && record.TemplateID) {\n \u2022 Template not found<br>\n }\n </div>\n }\n </div>\n </div>\n </div>\n <!-- Configuration Sections with Expansion Panels -->\n <div class=\"configuration-sections\" style=\"flex: 1; background: var(--mj-bg-surface-card); border-top: 2px solid var(--mj-border-default); padding: 16px; min-height: 0;\">\n <!-- Template Editor Section -->\n <mj-accordion-panel\n [Expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-code\" style=\"color: var(--mj-text-muted);\"></i>\n Template Editor\n @if (template) {\n <span style=\"color: var(--mj-text-muted); font-size: 0.9em; font-weight: normal;\">• {{ template.Name }}</span>\n }\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div class=\"template-section\" style=\"display: flex; flex-direction: column; min-height: 400px; padding: 8px;\">\n @if (isLoadingTemplate) {\n <div class=\"loading-state\" style=\"flex: 1; display: flex; align-items: center; justify-content: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 24px; margin-right: 12px;\"></i>\n Loading template...\n </div>\n } @else if (!record.TemplateID) {\n <mj-empty-state class=\"no-template-state\"\n Size=\"large\"\n Icon=\"fa-solid fa-code\"\n Title=\"No Template Associated\"\n Message=\"This AI prompt needs a template to define its structure and parameters. Create a new template or link to an existing one.\">\n <div ngProjectAs=\"[actions]\" style=\"display: flex; gap: 12px;\">\n @if (UserCanCreateTemplates) {\n <button mjButton variant=\"primary\" (click)=\"createNewTemplate()\">\n <i class=\"fa-solid fa-plus\"></i> Create New Template\n </button>\n }\n @if (UserCanReadTemplates) {\n <button mjButton variant=\"outline\" (click)=\"linkExistingTemplate()\">\n <i class=\"fa-solid fa-link\"></i> Link Existing Template\n </button>\n }\n </div>\n </mj-empty-state>\n } @else if (templateNotFoundInDatabase) {\n <mj-empty-state class=\"invalid-template-state\"\n Variant=\"warning\"\n Title=\"Template Not Found\"\n Message=\"The referenced template could not be loaded. It may have been deleted or moved.\">\n <div ngProjectAs=\"[actions]\" style=\"display: flex; gap: 12px;\">\n <button mjButton variant=\"outline\" (click)=\"loadTemplate()\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Retry Loading\n </button>\n @if (UserCanCreateTemplates) {\n <button mjButton variant=\"primary\" (click)=\"createNewTemplate()\">\n <i class=\"fa-solid fa-plus\"></i> Create New Template\n </button>\n }\n </div>\n </mj-empty-state>\n } @else {\n <!-- Active Template Editor -->\n <div class=\"template-editor-container\" style=\"flex: 1; display: flex; flex-direction: column; min-height: 350px;\">\n <!-- Template Actions Bar -->\n @if (template && EditMode) {\n <div class=\"template-actions\" style=\"display: flex; gap: 8px; padding: 8px; border-bottom: 1px solid var(--mj-border-default); background: var(--mj-bg-surface-sunken);\">\n @if (UserCanUpdateTemplates) {\n <button mjButton\n variant=\"outline\"\n size=\"sm\"\n (click)=\"linkExistingTemplate()\"\n title=\"Change to a different template\">\n <i class=\"fa-solid fa-exchange-alt\"></i> Change Template\n </button>\n }\n @if (UserCanReadTemplates) {\n <button mjButton\n variant=\"outline\"\n size=\"sm\"\n (click)=\"openTemplateInNewWindow()\"\n title=\"Open template in new window\">\n <i class=\"fa-solid fa-external-link-alt\"></i> Open in New Window\n </button>\n }\n </div>\n }\n <!-- Template Editor -->\n <div style=\"flex: 1; background: var(--mj-bg-surface-card); border-radius: 6px; border: 1px solid var(--mj-border-default);\">\n <mj-template-editor\n #templateEditor\n [template]=\"template\"\n [config]=\"templateEditorConfig\"\n (contentChange)=\"onTemplateContentChange($event)\"\n (runTemplate)=\"onTemplateRun($event)\"\n style=\"display: block; min-height: 300px;\">\n </mj-template-editor>\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n <!-- Model Configuration Expansion Panel -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [Expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-microchip\" style=\"color: var(--mj-text-muted);\"></i>\n Models\n @if (promptModels.length > 0) {\n <span class=\"mj-accordion-badge\">{{ promptModels.length }}</span>\n }\n <span style=\"color: var(--mj-text-muted); font-size: 0.8em; font-weight: normal; margin-left: 8px;\">\n <i class=\"fa-solid fa-info-circle\" title=\"Models are tried in order from top to bottom. The first available model will be used.\"></i>\n Priority order (first available model will be used)\n </span>\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <!-- Model Management Interface -->\n <div class=\"model-management\" style=\"border: 1px solid var(--mj-border-default); border-radius: 6px; background: var(--mj-bg-surface-sunken);\">\n @if (isLoadingModels) {\n <div class=\"loading-state\" style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading models...\n </div>\n } @else {\n @if (promptModels.length === 0) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"No models configured\">\n @if (EditMode && UserCanCreatePromptModels) {\n <button ngProjectAs=\"[actions]\" mjButton variant=\"outline\" size=\"sm\"\n (click)=\"addNewModel()\">\n <i class=\"fa-solid fa-plus\"></i> Add Model\n </button>\n }\n </mj-empty-state>\n } @else {\n <!-- Priority explanation for multiple models -->\n @if (promptModels.length > 1) {\n <div style=\"padding: 12px 16px; background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface)); border-bottom: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default)); color: var(--mj-brand-primary); font-size: 0.85em;\">\n <i class=\"fa-solid fa-info-circle\" style=\"margin-right: 6px;\"></i>\n Models are tried in priority order (highest priority first). The first available model that meets requirements will be used for execution.\n </div>\n }\n <!-- Column Headers -->\n <div class=\"model-header\" style=\"display: grid; grid-template-columns: 40px 2fr 1fr 1fr 1fr 60px; gap: 12px; padding: 12px 16px; background: var(--mj-bg-surface-sunken); font-weight: 600; font-size: 0.85em; color: var(--mj-text-secondary); border-bottom: 1px solid var(--mj-border-default);\">\n <div title=\"Priority order - models are tried from top to bottom\">\n <i class=\"fa-solid fa-sort\" style=\"color: var(--mj-text-muted);\"></i>\n </div>\n <div>AI Model <span style=\"color: #dc3545;\">*</span></div>\n <div>Vendor</div>\n <div>Configuration</div>\n <div>Created</div>\n <div>Actions</div>\n </div>\n @for (model of promptModels; track getModelTrackId(model) || $index; let i = $index) {\n <div class=\"model-row\"\n [draggable]=\"EditMode\"\n (dragstart)=\"onDragStart($event, i)\"\n (dragover)=\"onDragOver($event)\"\n (drop)=\"onDrop($event, i)\"\n (dragend)=\"onDragEnd($event)\"\n [style.background]=\"!model.ModelID ? '#fff3cd' : (draggedIndex === i ? 'color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface))' : 'var(--mj-bg-surface-card)')\"\n [style.border-left]=\"!model.ModelID ? '3px solid #ffc107' : 'none'\"\n [style.opacity]=\"draggedIndex === i ? '0.5' : '1'\"\n style=\"display: grid; grid-template-columns: 40px 2fr 1fr 1fr 1fr 60px; gap: 12px; padding: 12px 16px; border-bottom: 1px solid var(--mj-border-default); align-items: start; transition: background 0.2s, opacity 0.2s;\">\n <!-- Drag Handle / Priority -->\n <div class=\"drag-handle\" style=\"display: flex; flex-direction: column; align-items: center; justify-content: center; color: var(--mj-text-muted);\">\n @if (EditMode) {\n <i class=\"fa-solid fa-grip-vertical\" title=\"Drag to reorder priority\" style=\"cursor: move;\"></i>\n <span style=\"font-size: 0.7em; margin-top: 2px;\">#{{ i + 1 }}</span>\n } @else {\n <span style=\"font-size: 0.9em; font-weight: 600;\" title=\"Priority {{ model.Priority }} - Higher priority numbers are tried first\">#{{ i + 1 }}</span>\n }\n </div>\n <!-- Model Selection -->\n <div class=\"model-select\">\n @if (EditMode) {\n <mj-dropdown [(ngModel)]=\"model.ModelID\"\n [name]=\"'modelId_' + getModelTrackId(model)\"\n [Data]=\"availableModels\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Select a model...\"\n (ValueChange)=\"onModelChange($any($event), i)\"\n style=\"width: 100%;\">\n </mj-dropdown>\n } @else {\n <span style=\"font-weight: 500;\">{{ getModelDisplayName(model.ModelID) }}</span>\n }\n </div>\n <!-- Vendor -->\n <div class=\"model-vendor\">\n @if (EditMode) {\n @if (model.ModelID) {\n @if (shouldShowVendorDropdown(model.ModelID)) {\n <mj-dropdown [(ngModel)]=\"model.VendorID\"\n [name]=\"'vendorId_' + getModelTrackId(model)\"\n [Data]=\"getVendorsForModelSync(model.ModelID)\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Select vendor...\"\n style=\"width: 100%;\">\n </mj-dropdown>\n } @else {\n <!-- Single vendor - just show the name -->\n @if (getVendorsForModelSync(model.ModelID).length === 1) {\n <span [style.color]=\"getVendorStatusColor(model.ModelID, getVendorsForModelSync(model.ModelID)[0].ID)\" style=\"font-size: 0.9em; font-weight: 500;\">\n {{ getVendorsForModelSync(model.ModelID)[0].Name }}\n @if (getModelVendorStatus(model.ModelID, getVendorsForModelSync(model.ModelID)[0].ID) !== 'Active') {\n <span style=\"font-size: 0.8em; margin-left: 4px;\">({{ getModelVendorStatus(model.ModelID, getVendorsForModelSync(model.ModelID)[0].ID) }})</span>\n }\n </span>\n } @else {\n <span style=\"color: var(--mj-text-muted); font-style: italic; font-size: 0.9em;\">No vendors available</span>\n }\n }\n } @else {\n <span style=\"color: var(--mj-text-muted); font-style: italic; font-size: 0.9em;\">Select model first</span>\n }\n } @else {\n @if (model.VendorID && model.ModelID) {\n <span [style.color]=\"getVendorStatusColor(model.ModelID, model.VendorID)\" style=\"font-size: 0.9em;\">\n {{ getVendorDisplayName(model.VendorID) }}\n @if (getModelVendorStatus(model.ModelID, model.VendorID) !== 'Active') {\n <span style=\"font-size: 0.8em; margin-left: 4px;\">({{ getModelVendorStatus(model.ModelID, model.VendorID) }})</span>\n }\n </span>\n } @else {\n <span style=\"color: var(--mj-text-muted); font-size: 0.9em;\">-</span>\n }\n }\n </div>\n <!-- Configuration -->\n <div class=\"model-configuration\">\n @if (EditMode) {\n @if (isLoadingConfigurations) {\n <div style=\"padding: 4px; color: var(--mj-text-muted); font-style: italic; font-size: 0.85em;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading...\n </div>\n } @else {\n <mj-dropdown [(ngModel)]=\"model.ConfigurationID\"\n [name]=\"'configurationId_' + getModelTrackId(model)\"\n [Data]=\"availableConfigurations\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Default\"\n (ValueChange)=\"onConfigurationChange($any($event), i)\"\n style=\"width: 100%;\">\n </mj-dropdown>\n }\n } @else {\n <span style=\"font-size: 0.9em;\">{{ getConfigurationDisplayName(model.ConfigurationID) }}</span>\n }\n </div>\n <!-- Created Date -->\n <div class=\"model-created\">\n @if (model.ID) {\n <span style=\"color: var(--mj-text-muted); font-size: 0.8em;\">{{ model.__mj_CreatedAt | date:'short' }}</span>\n } @else {\n <span style=\"color: #28a745; font-size: 0.8em; font-style: italic;\">New</span>\n }\n </div>\n <!-- Actions -->\n <div class=\"model-actions\" style=\"display: flex; gap: 2px; flex-direction: column;\">\n @if (EditMode) {\n <div style=\"display: flex; gap: 2px; margin-bottom: 4px;\">\n @if (UserCanUpdatePromptModels) {\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"moveModelUp(i)\"\n [disabled]=\"i === 0\"\n title=\"Move up\">\n <i class=\"fa-solid fa-chevron-up\"></i>\n </button>\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"moveModelDown(i)\"\n [disabled]=\"i === promptModels.length - 1\"\n title=\"Move down\">\n <i class=\"fa-solid fa-chevron-down\"></i>\n </button>\n }\n </div>\n @if (UserCanDeletePromptModels) {\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"removePromptModel(i)\"\n title=\"Remove model\"\n style=\"color: var(--mj-status-error);\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n }\n </div>\n </div>\n <!-- Second row with additional details -->\n <div style=\"display: grid; grid-template-columns: 40px 1fr; gap: 12px; padding: 8px 16px; border-bottom: 1px solid var(--mj-border-default); background: var(--mj-bg-surface-sunken); font-size: 0.85em; color: var(--mj-text-muted);\">\n <div></div>\n <div>\n <!-- Basic model details -->\n <div style=\"display: flex; gap: 16px; flex-wrap: wrap; align-items: center; margin-bottom: 8px;\">\n @if (model.Status) {\n <span><strong>Status:</strong> {{ model.Status }}</span>\n }\n </div>\n <!-- Parallel execution fields when prompt is ModelSpecific -->\n @if (record.ParallelizationMode === 'ModelSpecific') {\n <div style=\"padding: 8px; background: var(--mj-bg-surface-card); border: 1px solid var(--mj-border-default); border-radius: 4px; margin-top: 8px;\">\n <div style=\"margin-bottom: 6px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n <i class=\"fa-solid fa-layer-group\"></i> Model-Specific Parallel Execution\n </div>\n @if (EditMode) {\n <div style=\"display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 12px; align-items: center;\">\n <!-- Parallel Mode -->\n <div>\n <label style=\"display: block; margin-bottom: 2px; font-size: 0.8em; font-weight: 600; color: var(--mj-text-secondary);\">Parallel Mode</label>\n <mj-dropdown [(ngModel)]=\"model.ParallelizationMode\"\n [name]=\"'parallelMode_' + i\"\n [Data]=\"[{text: 'None', value: 'None'}, {text: 'Static Count', value: 'StaticCount'}, {text: 'Config Param', value: 'ConfigParam'}]\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n Placeholder=\"Select mode...\"\n style=\"width: 100%; font-size: 0.85em;\">\n </mj-dropdown>\n </div>\n <!-- Parallel Count (when StaticCount) -->\n @if (model.ParallelizationMode === 'StaticCount') {\n <div>\n <label style=\"display: block; margin-bottom: 2px; font-size: 0.8em; font-weight: 600; color: var(--mj-text-secondary);\">Parallel Count</label>\n <mj-numeric-input [(ngModel)]=\"model.ParallelCount\"\n [name]=\"'parallelCount_' + i\"\n [Min]=\"1\"\n [Step]=\"1\"\n [Format]=\"'n0'\"\n Placeholder=\"Count...\"\n style=\"width: 100%; font-size: 0.85em;\">\n </mj-numeric-input>\n </div>\n }\n <!-- Config Param (when ConfigParam) -->\n @if (model.ParallelizationMode === 'ConfigParam') {\n <div>\n <label style=\"display: block; margin-bottom: 2px; font-size: 0.8em; font-weight: 600; color: var(--mj-text-secondary);\">Config Parameter</label>\n <input type=\"text\" class=\"mj-input\" [(ngModel)]=\"model.ParallelConfigParam\"\n [name]=\"'parallelConfigParam_' + i\"\n placeholder=\"Parameter name...\"\n style=\"width: 100%; font-size: 0.85em;\" />\n </div>\n }\n </div>\n } @else {\n <!-- Read-only display -->\n <div style=\"display: flex; gap: 16px; flex-wrap: wrap; align-items: center;\">\n @if (model.ParallelizationMode) {\n <span><strong>Parallel Mode:</strong> {{ model.ParallelizationMode }}</span>\n }\n @if (model.ParallelCount) {\n <span><strong>Parallel Count:</strong> {{ model.ParallelCount }}</span>\n }\n @if (model.ParallelConfigParam) {\n <span><strong>Config Param:</strong> {{ model.ParallelConfigParam }}</span>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n @if (EditMode && UserCanCreatePromptModels) {\n <div class=\"add-model-row\" style=\"padding: 12px 16px; text-align: center; background: var(--mj-bg-surface-sunken); border-top: 1px solid var(--mj-border-default);\">\n <button mjButton variant=\"outline\" size=\"sm\"\n (click)=\"addNewModel()\"\n style=\"color: var(--mj-status-success); border-color: var(--mj-status-success);\">\n <i class=\"fa-solid fa-plus\"></i> Add Model\n </button>\n </div>\n }\n }\n }\n </div>\n </div>\n </mj-accordion-panel>\n }\n <!-- Advanced Configuration Expansion Panel -->\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-cogs\" style=\"color: var(--mj-text-muted);\"></i>\n Advanced Configuration\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 20px;\">\n <!-- Left Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ParallelizationMode\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n @if (showParallelCount) {\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ParallelCount\"\n Type=\"numerictextbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n }\n @if (showParallelConfigParam) {\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ParallelConfigParam\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n }\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"OutputType\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"EffortLevel\"\n Type=\"numerictextbox\"\n Caption=\"Effort Level (1-100)\"\n Description=\"Higher values request more thorough reasoning\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n </div>\n <!-- Right Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ValidationBehavior\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"EnableCaching\"\n Type=\"checkbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"TemplateDataCapture\"\n Type=\"select\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <!-- Result Selector Prompt with Tree Selector -->\n <div style=\"margin-bottom: 16px;\">\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n Result Selector Prompt\n </label>\n @if (EditMode) {\n @if (isLoadingResultSelectorData) {\n <div style=\"padding: 8px; color: var(--mj-text-muted); font-style: italic;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading prompts...\n </div>\n } @else {\n <mj-dropdown\n [(ngModel)]=\"record.ResultSelectorPromptID\"\n name=\"resultSelectorPromptID\"\n [Data]=\"resultSelectorTreeData\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Select a result selector prompt...\"\n style=\"width: 100%;\"\n (ValueChange)=\"onResultSelectorChange($any($event))\">\n </mj-dropdown>\n }\n } @else {\n <span style=\"color: var(--mj-text-secondary);\">{{ getPromptDisplayName(record.ResultSelectorPromptID || '') || 'None selected' }}</span>\n }\n </div>\n </div>\n </div>\n </div>\n </mj-accordion-panel>\n <!-- Prefill & Output Control Expansion Panel -->\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-wand-magic-sparkles\" style=\"color: var(--mj-text-muted);\"></i>\n Prefill & Output Control\n </span>\n </ng-template>\n <div style=\"padding: 16px 0;\">\n <p style=\"margin: 0 0 12px 0; font-size: 0.85em; color: var(--mj-text-muted);\">\n Assistant prefill seeds the model's response with an initial string, guiding output format and content. Stop sequences terminate generation when encountered.\n </p>\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 20px;\">\n <!-- Left Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"AssistantPrefill\"\n Type=\"textarea\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"StopSequences\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n </div>\n <!-- Right Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"PrefillFallbackMode\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n </div>\n </div>\n </div>\n </mj-accordion-panel>\n <!-- Template Parameters Expansion Panel -->\n @if (template && templateParams.length > 0) {\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-sliders\" style=\"color: var(--mj-text-muted);\"></i>\n Template Parameters\n <span class=\"mj-accordion-badge\">{{ templateParams.length }}</span>\n <span style=\"color: var(--mj-text-muted); font-size: 0.8em; font-weight: normal; margin-left: 8px;\">\n <i class=\"fa-solid fa-info-circle\" title=\"These parameters are defined in the template and will be available when executing this prompt\"></i>\n Parameters defined in the template\n </span>\n </span>\n </ng-template>\n <!-- Template Parameters Display -->\n <div style=\"padding: 16px 0;\">\n @if (isLoadingTemplateParams) {\n <div class=\"loading-state\" style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading template parameters...\n </div>\n } @else if (templateParams.length === 0) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"This template has no parameters defined\" />\n } @else {\n <!-- Parameters Grid -->\n <div style=\"display: grid; gap: 12px;\">\n @for (param of templateParams; track param.ID) {\n <div class=\"parameter-card\"\n style=\"border: 1px solid var(--mj-border-default); border-radius: 8px; padding: 16px; background: var(--mj-bg-surface-sunken); transition: all 0.2s;\"\n [style.border-left]=\"'4px solid ' + getParamTypeColor(param.Type)\">\n <!-- Parameter Header -->\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 8px;\">\n <div style=\"display: flex; align-items: center; gap: 8px;\">\n <i [class]=\"'fa-solid ' + getParamTypeIcon(param.Type)\"\n [style.color]=\"getParamTypeColor(param.Type)\"\n style=\"font-size: 1.2em;\"></i>\n <h6 style=\"margin: 0; color: var(--mj-text-secondary); font-weight: 600;\">\n {{ param.Name }}\n @if (param.IsRequired) {\n <span style=\"color: #dc3545; font-size: 0.9em; margin-left: 4px;\">*</span>\n }\n </h6>\n </div>\n <div style=\"display: flex; align-items: center; gap: 8px;\">\n <span class=\"type-badge\"\n [style.background-color]=\"getParamTypeColor(param.Type)\"\n style=\"color: white; padding: 4px 8px; border-radius: 12px; font-size: 0.75em; font-weight: 500;\">\n {{ param.Type }}\n </span>\n @if (param.IsRequired) {\n <span style=\"color: #dc3545; font-size: 0.85em; font-weight: 500;\">Required</span>\n } @else {\n <span style=\"color: var(--mj-text-muted); font-size: 0.85em;\">Optional</span>\n }\n </div>\n </div>\n <!-- Parameter Description -->\n @if (param.Description) {\n <p style=\"margin: 0 0 8px 0; color: var(--mj-text-muted); font-size: 0.9em; line-height: 1.4;\">\n {{ param.Description }}\n </p>\n }\n <!-- Type-specific Information -->\n <div style=\"font-size: 0.85em; color: var(--mj-text-secondary);\">\n <span style=\"display: flex; align-items: center; gap: 4px; margin-bottom: 4px;\">\n <i class=\"fa-solid fa-info-circle\" style=\"color: var(--mj-text-muted);\"></i>\n {{ getParamTypeDescription(param) }}\n </span>\n </div>\n <!-- Additional Parameter Details -->\n <div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 12px; margin-top: 12px;\">\n @if (param.DefaultValue) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Default Value</label>\n <code style=\"font-size: 0.85em; color: var(--mj-text-secondary); word-break: break-all;\">{{ param.DefaultValue }}</code>\n </div>\n }\n @if (param.EntityID) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Entity</label>\n <span style=\"font-size: 0.85em; color: var(--mj-text-secondary);\">{{ param.Entity || 'Entity ID: ' + param.EntityID }}</span>\n </div>\n }\n @if (param.LinkedParameterName) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Linked To</label>\n <span style=\"font-size: 0.85em; color: var(--mj-text-secondary);\">\n {{ param.LinkedParameterName }}\n @if (param.LinkedParameterField) {\n ({{ param.LinkedParameterField }})\n }\n </span>\n </div>\n }\n @if (param.ExtraFilter) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Filter</label>\n <code style=\"font-size: 0.8em; color: var(--mj-text-secondary); word-break: break-all;\">{{ param.ExtraFilter }}</code>\n </div>\n }\n @if (param.RecordID) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Record ID</label>\n <code style=\"font-size: 0.85em; color: var(--mj-text-secondary);\">{{ param.RecordID }}</code>\n </div>\n }\n </div>\n </div>\n }\n </div>\n <!-- Help Text -->\n <div style=\"margin-top: 16px; padding: 12px; background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface)); border-radius: 6px; border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default));\">\n <div style=\"display: flex; align-items: flex-start; gap: 8px;\">\n <i class=\"fa-solid fa-lightbulb\" style=\"color: var(--mj-brand-primary); margin-top: 2px;\"></i>\n <div style=\"flex: 1; font-size: 0.85em; color: var(--mj-brand-primary); line-height: 1.5;\">\n <strong>Using Template Parameters:</strong> When executing this prompt, you'll be prompted to provide values for all required parameters.\n Parameters can be simple values (text, numbers) or complex data structures (JSON objects, database records, or entire entity collections).\n The template will use these parameters to generate dynamic content based on the values provided at execution time.\n </div>\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Output Example Expansion Panel (when OutputType = object) -->\n @if (showOutputExample) {\n <mj-accordion-panel\n [Expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-code\" style=\"color: var(--mj-text-muted);\"></i>\n Output Example (JSON)\n <span style=\"color: #dc3545; font-size: 0.8em; font-weight: normal;\">• Required for object output type</span>\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px;\">\n @if (EditMode) {\n <mj-code-editor\n [(ngModel)]=\"record.OutputExample\"\n name=\"outputExample\"\n language=\"json\"\n placeholder=\"Enter JSON example structure...\"\n style=\"width: 100%; height: 200px; border: 1px solid var(--mj-border-default); border-radius: 4px;\">\n </mj-code-editor>\n <div style=\"margin-top: 8px; color: var(--mj-text-muted); font-size: 0.85em;\">\n <i class=\"fa-solid fa-info-circle\"></i> Provide a JSON example that defines the expected structure for object output validation.\n </div>\n } @else if (record.OutputExample) {\n <div style=\"background: var(--mj-bg-surface-sunken); border: 1px solid var(--mj-border-default); border-radius: 4px; padding: 12px; font-family: 'Courier New', monospace; font-size: 0.9em; white-space: pre-wrap; overflow: auto; max-height: 250px;\">{{ record.OutputExample }}</div>\n } @else {\n <mj-alert Variant=\"warning\">Output example is required when output type is 'object'</mj-alert>\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Execution History Expansion Panel -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-history\" style=\"color: var(--mj-text-muted);\"></i>\n Execution History\n @if (executionHistory.length > 0) {\n <span style=\"color: var(--mj-text-muted); font-weight: normal;\">({{ executionHistory.length }})</span>\n }\n </span>\n </ng-template>\n <!-- Custom Execution History Viewer -->\n <div style=\"padding: 16px;\">\n @if (isLoadingHistory) {\n <div style=\"text-align: center; padding: 40px; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 2em; margin-bottom: 12px;\"></i>\n <p>Loading execution history...</p>\n </div>\n } @else if (executionHistory.length === 0) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-clock-rotate-left\"\n Title=\"No execution history yet\"\n Message=\"Run this prompt to see execution history here\" />\n } @else {\n <!-- Sort Controls -->\n <div style=\"display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px;\">\n <div style=\"color: var(--mj-text-muted); font-size: 0.9em;\">\n Showing {{ executionHistory.length }} executions\n </div>\n <div style=\"display: flex; gap: 8px; align-items: center;\">\n <span style=\"color: var(--mj-text-muted); font-size: 0.85em;\">Sort by:</span>\n <div class=\"mj-button-group\">\n <button mjButton\n [class.active]=\"historySortField === 'runAt'\"\n (click)=\"changeHistorySort('runAt')\"\n size=\"sm\">\n Date\n @if (historySortField === 'runAt') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\"\n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n <button mjButton\n [class.active]=\"historySortField === 'executionTime'\"\n (click)=\"changeHistorySort('executionTime')\"\n size=\"sm\">\n Duration\n @if (historySortField === 'executionTime') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\"\n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n <button mjButton\n [class.active]=\"historySortField === 'tokens'\"\n (click)=\"changeHistorySort('tokens')\"\n size=\"sm\">\n Tokens\n @if (historySortField === 'tokens') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\"\n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n <button mjButton\n [class.active]=\"historySortField === 'cost'\"\n (click)=\"changeHistorySort('cost')\"\n size=\"sm\">\n Cost\n @if (historySortField === 'cost') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\"\n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n </div>\n </div>\n </div>\n <!-- Execution History Table -->\n <div style=\"border: 1px solid var(--mj-border-default); border-radius: 8px; overflow: hidden;\">\n <table style=\"width: 100%; border-collapse: collapse;\">\n <thead>\n <tr style=\"background: var(--mj-bg-surface-sunken); border-bottom: 2px solid var(--mj-border-default);\">\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: var(--mj-text-secondary);\">Status</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: var(--mj-text-secondary);\">Date & Time</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: var(--mj-text-secondary);\">Model</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: var(--mj-text-secondary);\">Duration</th>\n <th style=\"padding: 12px; text-align: right; font-weight: 600; color: var(--mj-text-secondary);\">Tokens</th>\n <th style=\"padding: 12px; text-align: right; font-weight: 600; color: var(--mj-text-secondary);\">Cost</th>\n <th style=\"padding: 12px; text-align: center; font-weight: 600; color: var(--mj-text-secondary);\">Type</th>\n <th style=\"padding: 12px; text-align: center; font-weight: 600; color: var(--mj-text-secondary);\">Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (run of executionHistory; track run.ID; let i = $index) {\n <tr class=\"history-row\"\n [class.even-row]=\"i % 2 === 0\"\n style=\"border-bottom: 1px solid var(--mj-border-default);\">\n <td style=\"padding: 12px;\">\n <span style=\"display: flex; align-items: center; gap: 6px;\">\n <i [class]=\"'fa-solid ' + getExecutionStatusIcon(run.Success)\"\n [style.color]=\"getExecutionStatusColor(run.Success)\"></i>\n <span [style.color]=\"getExecutionStatusColor(run.Success)\" style=\"font-weight: 500;\">\n {{ run.Success === true ? 'Success' : run.Success === false ? 'Failed' : 'Running' }}\n </span>\n </span>\n </td>\n <td style=\"padding: 12px; color: var(--mj-text-secondary);\">\n {{ run.RunAt | date:'short' }}\n </td>\n <td style=\"padding: 12px; color: var(--mj-text-secondary);\">\n <span style=\"display: flex; align-items: center; gap: 6px;\">\n <i class=\"fa-solid fa-microchip\" style=\"color: var(--mj-text-muted);\"></i>\n {{ run.Model || 'Unknown' }}\n </span>\n </td>\n <td style=\"padding: 12px; color: var(--mj-text-secondary);\">\n {{ formatDuration(run.ExecutionTimeMS) }}\n </td>\n <td style=\"padding: 12px; text-align: right; color: var(--mj-text-secondary);\">\n {{ formatTokens(run.TokensUsed) }}\n </td>\n <td style=\"padding: 12px; text-align: right; color: var(--mj-text-secondary);\">\n {{ formatCost(run.TotalCost || run.Cost) }}\n </td>\n <td style=\"padding: 12px; text-align: center;\">\n @if (run.RunType) {\n <span style=\"padding: 4px 8px; border-radius: 12px; background: var(--mj-bg-surface-sunken); \n color: var(--mj-text-secondary); font-size: 0.85em; font-weight: 500;\">\n {{ run.RunType }}\n </span>\n }\n </td>\n <td style=\"padding: 12px; text-align: center;\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"navigateToPromptRun(run.ID)\"\n title=\"View details\">\n <i class=\"fa-solid fa-external-link\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Cache Expansion Panel -->\n @if (record.IsSaved && record.EnableCaching) {\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-database\" style=\"color: var(--mj-text-muted);\"></i>\n Result Cache\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Result Cache','AIPromptID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: AI Result Cache')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n </div>\n </mj-accordion-panel>\n }\n <!-- Related Items Expansion Panel -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-link\" style=\"color: var(--mj-text-muted);\"></i>\n Related Items\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 20px;\">\n <!-- AI Agents -->\n <div>\n <h6 style=\"margin: 0 0 12px 0; color: var(--mj-text-secondary);\">AI Agents Using This Prompt</h6>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Agent Prompts','PromptID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: AI Agent Prompts')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n </div>\n <!-- Result Selector References -->\n <div>\n <h6 style=\"margin: 0 0 12px 0; color: var(--mj-text-secondary);\">Prompts Using This as Result Selector</h6>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Prompts','ResultSelectorPromptID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: AI Prompts')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n </div>\n </div>\n </div>\n </mj-accordion-panel>\n }\n </div>\n </div>\n </form>\n</mj-record-form-container>\n}\n\n\n<!-- AI Prompt Test Harness -->\n@if (showTestHarness) {\n <mj-window\n [Width]=\"1200\"\n [Height]=\"800\"\n [MinWidth]=\"800\"\n [MinHeight]=\"600\"\n [Draggable]=\"true\"\n [Resizable]=\"true\"\n [Visible]=\"true\"\n (Close)=\"onTestHarnessVisibilityChanged(false)\"\n [Title]=\"'Run AI Prompt - ' + (record.Name || 'Untitled')\">\n <mj-ai-test-harness\n [entity]=\"record\"\n [mode]=\"'prompt'\"\n [isVisible]=\"showTestHarness\"\n (visibilityChange)=\"onTestHarnessVisibilityChanged($event)\">\n </mj-ai-test-harness>\n </mj-window>\n}", styles: ["/* Override shared form-styles to enable flex layout */\n:host {\n display: block;\n height: 100%;\n}\n\n.record-form-container {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n padding: 10px;\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form {\n min-height: 0 !important;\n}\n\n.custom-toolbar-actions {\n margin-left: auto;\n}\n\n.status-badge {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n font-weight: 500;\n letter-spacing: 0.02em;\n}\n\n.config-summary {\n position: sticky;\n top: 0;\n max-height: 600px;\n overflow-y: auto;\n}\n\n.config-item {\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.config-item:last-child {\n border-bottom: none;\n}\n\n.template-tab-content {\n background: var(--mj-bg-surface);\n}\n\n.template-header h5 {\n font-size: 1.1em;\n}\n\n.loading-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n/* Template-editor placeholders fill the editor pane */\nmj-empty-state.no-template-state,\nmj-empty-state.invalid-template-state {\n flex: 1;\n}\n\n.template-editor-container {\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-md);\n}\n\n/* Grid layout adjustments */\n@media (max-width: 1200px) {\n .record-form-container .mj-tab-body > div {\n grid-template-columns: 1fr !important;\n gap: 20px;\n }\n\n .config-summary {\n order: -1;\n position: static;\n max-height: none;\n }\n}\n\n/* Responsive toolbar */\n@media (max-width: 768px) {\n .custom-toolbar-actions {\n flex-direction: column;\n gap: 4px !important;\n }\n\n .status-badge {\n align-self: flex-start;\n }\n}\n\n/* Ensure proper spacing in form sections */\n.record-form-container mj-form-section {\n padding: 16px;\n}\n\n/* Smooth transitions for better UX */\n.status-badge,\n.config-item,\n.template-header {\n transition: all 0.2s ease;\n}\n\n.config-item:hover {\n background-color: var(--mj-bg-surface-sunken);\n border-radius: var(--mj-radius-sm);\n margin: 0 -8px;\n padding: 8px;\n}\n\n/* Execution History Table Styles */\n.history-row {\n transition: background 0.2s;\n}\n\n.history-row:not(.even-row) {\n background: var(--mj-bg-surface-card);\n}\n\n.history-row.even-row {\n background: var(--mj-bg-surface);\n}\n\n.history-row:hover {\n background: var(--mj-border-default) !important;\n}\n\n/* Template Parameters Styles */\n.parameter-card {\n position: relative;\n overflow: hidden;\n}\n\n.parameter-card::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 4px;\n background: inherit;\n transition: width 0.2s;\n}\n\n.parameter-card:hover {\n transform: translateY(-2px);\n box-shadow: var(--mj-shadow-md);\n}\n\n.parameter-card:hover::before {\n width: 6px;\n}\n\n.type-badge {\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n transition: transform 0.2s;\n}\n\n.parameter-card:hover .type-badge {\n transform: scale(1.05);\n}\n\n/* Parameter type icons animation */\n.parameter-card i.fa-solid {\n transition: transform 0.3s;\n}\n\n.parameter-card:hover i.fa-solid {\n transform: rotate(360deg);\n}\n\n/* Grid responsive behavior */\n@media (max-width: 768px) {\n .parameter-card {\n margin-bottom: 8px;\n }\n\n .parameter-card h6 {\n font-size: 0.95em;\n }\n\n .type-badge {\n font-size: 0.7em !important;\n }\n}\n"] }]
|
|
3588
|
+
args: [{ standalone: false, selector: 'mj-ai-prompt-form', template: "<!-- Dialog container -->\n<div></div>\n@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"toolbarConfig\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n <!-- Main Content Area - Template Editor and Configuration -->\n <div class=\"prompt-main-area\" style=\"display: flex; flex-direction: column; flex: 1; min-height: 0; overflow-y: auto;\">\n <!-- Header Section -->\n <div class=\"prompt-header phone-hero\" [class.hero-view]=\"!EditMode\" [class.hero-compact]=\"!EditMode && !HeroDetailsOpen\" style=\"flex-shrink: 0; padding: 20px; background: var(--mj-bg-surface-sunken); border-bottom: 2px solid var(--mj-border-default);\">\n <div class=\"hero-header-row\">\n <!-- Left: Prompt Info -->\n <div style=\"flex: 1; min-width: 0;\">\n <div style=\"display: flex; align-items: center; gap: 12px; margin-bottom: 8px;\">\n <i class=\"fa-solid fa-robot\" style=\"color: var(--mj-brand-primary); font-size: 1.4em;\"></i>\n @if (EditMode) {\n <input type=\"text\" class=\"mj-input\" [(ngModel)]=\"record.Name\"\n name=\"promptName\"\n placeholder=\"Enter prompt name...\"\n style=\"font-size: 1.2em; font-weight: 600; min-width: 300px; flex: 1;\" />\n } @else {\n <h4 style=\"margin: 0; color: var(--mj-text-secondary); font-weight: 600; flex: 1;\">{{ record.Name || 'Untitled AI Prompt' }}</h4>\n <span class=\"status-badge\" [style.background-color]=\"getStatusBadgeColor()\"\n style=\"color: white; padding: 4px 10px; border-radius: 12px; font-size: 0.75em; font-weight: 500;\">\n {{ record.Status }}\n </span>\n }\n </div>\n <!-- Status and Type Editors when in edit mode -->\n @if (EditMode) {\n <div style=\"display: flex; gap: 16px; margin-bottom: 12px; flex-wrap: wrap;\">\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">Status</label>\n <mj-dropdown [(ngModel)]=\"record.Status\"\n name=\"promptStatus\"\n [Data]=\"[{text: 'Active', value: 'Active'}, {text: 'Pending', value: 'Pending'}, {text: 'Disabled', value: 'Disabled'}]\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n style=\"width: 150px;\">\n </mj-dropdown>\n </div>\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n Type <span style=\"color: #dc3545;\">*</span>\n </label>\n @if (isLoadingPromptTypes) {\n <div style=\"padding: 8px; color: var(--mj-text-muted); font-style: italic; width: 200px;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading types...\n </div>\n } @else {\n <mj-dropdown [(ngModel)]=\"record.TypeID\"\n name=\"promptTypeID\"\n [Data]=\"availablePromptTypes\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Select prompt type...\"\n style=\"width: 200px;\">\n </mj-dropdown>\n }\n </div>\n </div>\n }\n @if (EditMode) {\n <textarea class=\"mj-textarea\" [(ngModel)]=\"record.Description\"\n name=\"promptDescription\"\n [rows]=\"2\"\n placeholder=\"Enter prompt description...\"\n style=\"width: 100%; max-width: 600px; margin-bottom: 12px;\"></textarea>\n } @else if (record.Description) {\n <p class=\"phone-hero-detail\" style=\"margin: 0 0 12px 0; color: var(--mj-text-muted); font-size: 0.9em; line-height: 1.4;\">{{ record.Description }}</p>\n }\n <!-- Quick Config Row -->\n <div class=\"quick-config phone-hero-detail\" style=\"display: flex; align-items: center; gap: 16px; flex-wrap: wrap;\">\n @if (record.TypeID) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-tag\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Type:</span>\n <span style=\"color: var(--mj-text-secondary); font-weight: 500;\">{{ getPromptTypeDisplayName(record.TypeID) }}</span>\n </div>\n }\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-layer-group\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Parallelization:</span>\n <span style=\"color: var(--mj-text-secondary); font-weight: 500;\">{{ getParallelizationModeDisplay() }}</span>\n </div>\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-code\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Output:</span>\n <span [style.color]=\"getValidationColor()\" style=\"font-weight: 500;\">{{ getOutputTypeDisplay() }}</span>\n </div>\n @if (record.EnableCaching) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-database\" style=\"color: #28a745;\"></i>\n <span style=\"color: #28a745; font-weight: 500;\">Caching Enabled</span>\n </div>\n }\n @if (record.EffortLevel) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-tachometer-alt\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Effort Level:</span>\n <span style=\"color: var(--mj-text-secondary); font-weight: 500;\">{{ record.EffortLevel }}</span>\n </div>\n }\n </div>\n </div>\n <!-- Right: Action Buttons -->\n <div class=\"action-buttons\">\n <div style=\"display: flex; gap: 8px;\">\n @if (record.ID) {\n <button mjButton variant=\"primary\" size=\"lg\" class=\"phone-hero-run\"\n (click)=\"openTestHarness()\"\n title=\"Run AI Prompt Test Harness\">\n <i class=\"fa-solid fa-play\"></i> Run\n </button>\n }\n </div>\n @if (!canExecute && record.ID) {\n <div style=\"font-size: 0.75em; color: #dc3545; text-align: right; max-width: 200px;\">\n @if (record.Status !== 'Active') {\n \u2022 Prompt must be Active<br>\n }\n @if (!record.TemplateID) {\n \u2022 Template is required<br>\n }\n @if (!template && record.TemplateID) {\n \u2022 Template not found<br>\n }\n </div>\n }\n </div>\n </div>\n @if (!EditMode && HeroSummary) {\n <button type=\"button\" class=\"phone-hero-summary\" [attr.aria-expanded]=\"HeroDetailsOpen\" (click)=\"ToggleHeroDetails()\">\n <span class=\"phone-hero-summary-text\">{{ HeroSummary }}</span>\n <i class=\"fa-solid fa-chevron-down\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n <!-- Configuration Sections with Expansion Panels -->\n <div class=\"configuration-sections\" style=\"flex: 1; background: var(--mj-bg-surface-card); border-top: 2px solid var(--mj-border-default); padding: 16px; min-height: 0;\">\n <!-- Phone: one section at a time behind a picker; desktop keeps the accordions -->\n <mj-accordion-sections [Enabled]=\"Phone.IsPhone\" [ActiveKey]=\"Phone.Section\" (ActiveKeyChange)=\"Phone.Pick($event)\">\n <!-- Template Editor Section -->\n <mj-accordion-panel SectionKey=\"template\" SectionTitle=\"Template Editor\" SectionIcon=\"fa-solid fa-code\"\n [Expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-code\" style=\"color: var(--mj-text-muted);\"></i>\n Template Editor\n @if (template) {\n <span style=\"color: var(--mj-text-muted); font-size: 0.9em; font-weight: normal;\">• {{ template.Name }}</span>\n }\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div class=\"phone-flush-x template-section\" style=\"display: flex; flex-direction: column; min-height: 400px; padding: 8px;\">\n @if (isLoadingTemplate) {\n <div class=\"loading-state\" style=\"flex: 1; display: flex; align-items: center; justify-content: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 24px; margin-right: 12px;\"></i>\n Loading template...\n </div>\n } @else if (!record.TemplateID) {\n <mj-empty-state class=\"no-template-state\"\n Size=\"large\"\n Icon=\"fa-solid fa-code\"\n Title=\"No Template Associated\"\n Message=\"This AI prompt needs a template to define its structure and parameters. Create a new template or link to an existing one.\">\n <div ngProjectAs=\"[actions]\" style=\"display: flex; gap: 12px;\">\n @if (UserCanCreateTemplates) {\n <button mjButton variant=\"primary\" (click)=\"createNewTemplate()\">\n <i class=\"fa-solid fa-plus\"></i> Create New Template\n </button>\n }\n @if (UserCanReadTemplates) {\n <button mjButton variant=\"outline\" (click)=\"linkExistingTemplate()\">\n <i class=\"fa-solid fa-link\"></i> Link Existing Template\n </button>\n }\n </div>\n </mj-empty-state>\n } @else if (templateNotFoundInDatabase) {\n <mj-empty-state class=\"invalid-template-state\"\n Variant=\"warning\"\n Title=\"Template Not Found\"\n Message=\"The referenced template could not be loaded. It may have been deleted or moved.\">\n <div ngProjectAs=\"[actions]\" style=\"display: flex; gap: 12px;\">\n <button mjButton variant=\"outline\" (click)=\"loadTemplate()\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Retry Loading\n </button>\n @if (UserCanCreateTemplates) {\n <button mjButton variant=\"primary\" (click)=\"createNewTemplate()\">\n <i class=\"fa-solid fa-plus\"></i> Create New Template\n </button>\n }\n </div>\n </mj-empty-state>\n } @else {\n <!-- Active Template Editor -->\n <div class=\"template-editor-container\" style=\"flex: 1; display: flex; flex-direction: column; min-height: 350px;\">\n <!-- Template Actions Bar -->\n @if (template && EditMode) {\n <div class=\"template-actions\" style=\"display: flex; gap: 8px; padding: 8px; border-bottom: 1px solid var(--mj-border-default); background: var(--mj-bg-surface-sunken);\">\n @if (UserCanUpdateTemplates) {\n <button mjButton\n variant=\"outline\"\n size=\"sm\"\n (click)=\"linkExistingTemplate()\"\n title=\"Change to a different template\">\n <i class=\"fa-solid fa-exchange-alt\"></i> Change Template\n </button>\n }\n @if (UserCanReadTemplates) {\n <button mjButton\n variant=\"outline\"\n size=\"sm\"\n (click)=\"openTemplateInNewWindow()\"\n title=\"Open template in new window\">\n <i class=\"fa-solid fa-external-link-alt\"></i> Open in New Window\n </button>\n }\n </div>\n }\n <!-- Template Editor -->\n <div style=\"flex: 1; background: var(--mj-bg-surface-card); border-radius: 6px; border: 1px solid var(--mj-border-default);\">\n <mj-template-editor\n #templateEditor\n [template]=\"template\"\n [config]=\"templateEditorConfig\"\n (contentChange)=\"onTemplateContentChange($event)\"\n (runTemplate)=\"onTemplateRun($event)\"\n style=\"display: block; min-height: 300px;\">\n </mj-template-editor>\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n <!-- Model Configuration Expansion Panel -->\n @if (record.IsSaved) {\n <mj-accordion-panel SectionKey=\"models\" SectionTitle=\"Models\" SectionIcon=\"fa-solid fa-microchip\" [SectionCount]=\"promptModels.length\"\n [Expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-microchip\" style=\"color: var(--mj-text-muted);\"></i>\n Models\n @if (promptModels.length > 0) {\n <span class=\"mj-accordion-badge\">{{ promptModels.length }}</span>\n }\n <span style=\"color: var(--mj-text-muted); font-size: 0.8em; font-weight: normal; margin-left: 8px;\">\n <i class=\"fa-solid fa-info-circle\" title=\"Models are tried in order from top to bottom. The first available model will be used.\"></i>\n Priority order (first available model will be used)\n </span>\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <!-- Model Management Interface -->\n <div class=\"model-management\" style=\"border: 1px solid var(--mj-border-default); border-radius: 6px; background: var(--mj-bg-surface-sunken);\">\n @if (isLoadingModels) {\n <div class=\"loading-state\" style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading models...\n </div>\n } @else {\n @if (promptModels.length === 0) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"No models configured\">\n @if (EditMode && UserCanCreatePromptModels) {\n <button ngProjectAs=\"[actions]\" mjButton variant=\"outline\" size=\"sm\"\n (click)=\"addNewModel()\">\n <i class=\"fa-solid fa-plus\"></i> Add Model\n </button>\n }\n </mj-empty-state>\n } @else {\n <!-- Priority explanation for multiple models -->\n @if (promptModels.length > 1) {\n <div style=\"padding: 12px 16px; background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface)); border-bottom: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default)); color: var(--mj-brand-primary); font-size: 0.85em;\">\n <i class=\"fa-solid fa-info-circle\" style=\"margin-right: 6px;\"></i>\n Models are tried in priority order (highest priority first). The first available model that meets requirements will be used for execution.\n </div>\n }\n <!-- Column Headers -->\n <div class=\"model-header\" style=\"display: grid; grid-template-columns: 40px 2fr 1fr 1fr 1fr 60px; gap: 12px; padding: 12px 16px; background: var(--mj-bg-surface-sunken); font-weight: 600; font-size: 0.85em; color: var(--mj-text-secondary); border-bottom: 1px solid var(--mj-border-default);\">\n <div title=\"Priority order - models are tried from top to bottom\">\n <i class=\"fa-solid fa-sort\" style=\"color: var(--mj-text-muted);\"></i>\n </div>\n <div>AI Model <span style=\"color: #dc3545;\">*</span></div>\n <div>Vendor</div>\n <div>Configuration</div>\n <div>Created</div>\n <div>Actions</div>\n </div>\n @for (model of promptModels; track getModelTrackId(model) || $index; let i = $index) {\n <div class=\"model-row\"\n [draggable]=\"EditMode\"\n (dragstart)=\"onDragStart($event, i)\"\n (dragover)=\"onDragOver($event)\"\n (drop)=\"onDrop($event, i)\"\n (dragend)=\"onDragEnd($event)\"\n [style.background]=\"!model.ModelID ? '#fff3cd' : (draggedIndex === i ? 'color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface))' : 'var(--mj-bg-surface-card)')\"\n [style.border-left]=\"!model.ModelID ? '3px solid #ffc107' : 'none'\"\n [style.opacity]=\"draggedIndex === i ? '0.5' : '1'\"\n style=\"display: grid; grid-template-columns: 40px 2fr 1fr 1fr 1fr 60px; gap: 12px; padding: 12px 16px; border-bottom: 1px solid var(--mj-border-default); align-items: start; transition: background 0.2s, opacity 0.2s;\">\n <!-- Drag Handle / Priority -->\n <div class=\"drag-handle\" style=\"display: flex; flex-direction: column; align-items: center; justify-content: center; color: var(--mj-text-muted);\">\n @if (EditMode) {\n <i class=\"fa-solid fa-grip-vertical\" title=\"Drag to reorder priority\" style=\"cursor: move;\"></i>\n <span style=\"font-size: 0.7em; margin-top: 2px;\">#{{ i + 1 }}</span>\n } @else {\n <span style=\"font-size: 0.9em; font-weight: 600;\" title=\"Priority {{ model.Priority }} - Higher priority numbers are tried first\">#{{ i + 1 }}</span>\n }\n </div>\n <!-- Model Selection -->\n <div class=\"model-select\">\n @if (EditMode) {\n <mj-dropdown [(ngModel)]=\"model.ModelID\"\n [name]=\"'modelId_' + getModelTrackId(model)\"\n [Data]=\"availableModels\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Select a model...\"\n (ValueChange)=\"onModelChange($any($event), i)\"\n style=\"width: 100%;\">\n </mj-dropdown>\n } @else {\n <span style=\"font-weight: 500;\">{{ getModelDisplayName(model.ModelID) }}</span>\n }\n </div>\n <!-- Vendor -->\n <div class=\"model-vendor\">\n @if (EditMode) {\n @if (model.ModelID) {\n @if (shouldShowVendorDropdown(model.ModelID)) {\n <mj-dropdown [(ngModel)]=\"model.VendorID\"\n [name]=\"'vendorId_' + getModelTrackId(model)\"\n [Data]=\"getVendorsForModelSync(model.ModelID)\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Select vendor...\"\n style=\"width: 100%;\">\n </mj-dropdown>\n } @else {\n <!-- Single vendor - just show the name -->\n @if (getVendorsForModelSync(model.ModelID).length === 1) {\n <span [style.color]=\"getVendorStatusColor(model.ModelID, getVendorsForModelSync(model.ModelID)[0].ID)\" style=\"font-size: 0.9em; font-weight: 500;\">\n {{ getVendorsForModelSync(model.ModelID)[0].Name }}\n @if (getModelVendorStatus(model.ModelID, getVendorsForModelSync(model.ModelID)[0].ID) !== 'Active') {\n <span style=\"font-size: 0.8em; margin-left: 4px;\">({{ getModelVendorStatus(model.ModelID, getVendorsForModelSync(model.ModelID)[0].ID) }})</span>\n }\n </span>\n } @else {\n <span style=\"color: var(--mj-text-muted); font-style: italic; font-size: 0.9em;\">No vendors available</span>\n }\n }\n } @else {\n <span style=\"color: var(--mj-text-muted); font-style: italic; font-size: 0.9em;\">Select model first</span>\n }\n } @else {\n @if (model.VendorID && model.ModelID) {\n <span [style.color]=\"getVendorStatusColor(model.ModelID, model.VendorID)\" style=\"font-size: 0.9em;\">\n {{ getVendorDisplayName(model.VendorID) }}\n @if (getModelVendorStatus(model.ModelID, model.VendorID) !== 'Active') {\n <span style=\"font-size: 0.8em; margin-left: 4px;\">({{ getModelVendorStatus(model.ModelID, model.VendorID) }})</span>\n }\n </span>\n } @else {\n <span style=\"color: var(--mj-text-muted); font-size: 0.9em;\">-</span>\n }\n }\n </div>\n <!-- Configuration -->\n <div class=\"model-configuration\">\n @if (EditMode) {\n @if (isLoadingConfigurations) {\n <div style=\"padding: 4px; color: var(--mj-text-muted); font-style: italic; font-size: 0.85em;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading...\n </div>\n } @else {\n <mj-dropdown [(ngModel)]=\"model.ConfigurationID\"\n [name]=\"'configurationId_' + getModelTrackId(model)\"\n [Data]=\"availableConfigurations\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Default\"\n (ValueChange)=\"onConfigurationChange($any($event), i)\"\n style=\"width: 100%;\">\n </mj-dropdown>\n }\n } @else {\n <span style=\"font-size: 0.9em;\">{{ getConfigurationDisplayName(model.ConfigurationID) }}</span>\n }\n </div>\n <!-- Created Date -->\n <div class=\"model-created\">\n @if (model.ID) {\n <span style=\"color: var(--mj-text-muted); font-size: 0.8em;\">{{ model.__mj_CreatedAt | date:'short' }}</span>\n } @else {\n <span style=\"color: #28a745; font-size: 0.8em; font-style: italic;\">New</span>\n }\n </div>\n <!-- Actions -->\n <div class=\"model-actions\" style=\"display: flex; gap: 2px; flex-direction: column;\">\n @if (EditMode) {\n <div style=\"display: flex; gap: 2px; margin-bottom: 4px;\">\n @if (UserCanUpdatePromptModels) {\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"moveModelUp(i)\"\n [disabled]=\"i === 0\"\n title=\"Move up\">\n <i class=\"fa-solid fa-chevron-up\"></i>\n </button>\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"moveModelDown(i)\"\n [disabled]=\"i === promptModels.length - 1\"\n title=\"Move down\">\n <i class=\"fa-solid fa-chevron-down\"></i>\n </button>\n }\n </div>\n @if (UserCanDeletePromptModels) {\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"removePromptModel(i)\"\n title=\"Remove model\"\n style=\"color: var(--mj-status-error);\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n }\n </div>\n </div>\n <!-- Second row with additional details -->\n <div class=\"model-details-row\" style=\"display: grid; grid-template-columns: 40px 1fr; gap: 12px; padding: 8px 16px; border-bottom: 1px solid var(--mj-border-default); background: var(--mj-bg-surface-sunken); font-size: 0.85em; color: var(--mj-text-muted);\">\n <div></div>\n <div>\n <!-- Basic model details -->\n <div style=\"display: flex; gap: 16px; flex-wrap: wrap; align-items: center; margin-bottom: 8px;\">\n @if (model.Status) {\n <span><strong>Status:</strong> {{ model.Status }}</span>\n }\n </div>\n <!-- Parallel execution fields when prompt is ModelSpecific -->\n @if (record.ParallelizationMode === 'ModelSpecific') {\n <div style=\"padding: 8px; background: var(--mj-bg-surface-card); border: 1px solid var(--mj-border-default); border-radius: 4px; margin-top: 8px;\">\n <div style=\"margin-bottom: 6px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n <i class=\"fa-solid fa-layer-group\"></i> Model-Specific Parallel Execution\n </div>\n @if (EditMode) {\n <div class=\"model-parallel-grid\" style=\"display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 12px; align-items: center;\">\n <!-- Parallel Mode -->\n <div>\n <label style=\"display: block; margin-bottom: 2px; font-size: 0.8em; font-weight: 600; color: var(--mj-text-secondary);\">Parallel Mode</label>\n <mj-dropdown [(ngModel)]=\"model.ParallelizationMode\"\n [name]=\"'parallelMode_' + i\"\n [Data]=\"[{text: 'None', value: 'None'}, {text: 'Static Count', value: 'StaticCount'}, {text: 'Config Param', value: 'ConfigParam'}]\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n Placeholder=\"Select mode...\"\n style=\"width: 100%; font-size: 0.85em;\">\n </mj-dropdown>\n </div>\n <!-- Parallel Count (when StaticCount) -->\n @if (model.ParallelizationMode === 'StaticCount') {\n <div>\n <label style=\"display: block; margin-bottom: 2px; font-size: 0.8em; font-weight: 600; color: var(--mj-text-secondary);\">Parallel Count</label>\n <mj-numeric-input [(ngModel)]=\"model.ParallelCount\"\n [name]=\"'parallelCount_' + i\"\n [Min]=\"1\"\n [Step]=\"1\"\n [Format]=\"'n0'\"\n Placeholder=\"Count...\"\n style=\"width: 100%; font-size: 0.85em;\">\n </mj-numeric-input>\n </div>\n }\n <!-- Config Param (when ConfigParam) -->\n @if (model.ParallelizationMode === 'ConfigParam') {\n <div>\n <label style=\"display: block; margin-bottom: 2px; font-size: 0.8em; font-weight: 600; color: var(--mj-text-secondary);\">Config Parameter</label>\n <input type=\"text\" class=\"mj-input\" [(ngModel)]=\"model.ParallelConfigParam\"\n [name]=\"'parallelConfigParam_' + i\"\n placeholder=\"Parameter name...\"\n style=\"width: 100%; font-size: 0.85em;\" />\n </div>\n }\n </div>\n } @else {\n <!-- Read-only display -->\n <div style=\"display: flex; gap: 16px; flex-wrap: wrap; align-items: center;\">\n @if (model.ParallelizationMode) {\n <span><strong>Parallel Mode:</strong> {{ model.ParallelizationMode }}</span>\n }\n @if (model.ParallelCount) {\n <span><strong>Parallel Count:</strong> {{ model.ParallelCount }}</span>\n }\n @if (model.ParallelConfigParam) {\n <span><strong>Config Param:</strong> {{ model.ParallelConfigParam }}</span>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n @if (EditMode && UserCanCreatePromptModels) {\n <div class=\"add-model-row\" style=\"padding: 12px 16px; text-align: center; background: var(--mj-bg-surface-sunken); border-top: 1px solid var(--mj-border-default);\">\n <button mjButton variant=\"outline\" size=\"sm\"\n (click)=\"addNewModel()\"\n style=\"color: var(--mj-status-success); border-color: var(--mj-status-success);\">\n <i class=\"fa-solid fa-plus\"></i> Add Model\n </button>\n </div>\n }\n }\n }\n </div>\n </div>\n </mj-accordion-panel>\n }\n <!-- Advanced Configuration Expansion Panel -->\n <mj-accordion-panel SectionKey=\"advanced\" SectionTitle=\"Advanced Configuration\" SectionIcon=\"fa-solid fa-cogs\"\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-cogs\" style=\"color: var(--mj-text-muted);\"></i>\n Advanced Configuration\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <div class=\"related-grid-pair\" style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 20px;\">\n <!-- Left Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ParallelizationMode\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n @if (showParallelCount) {\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ParallelCount\"\n Type=\"numerictextbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n }\n @if (showParallelConfigParam) {\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ParallelConfigParam\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n }\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"OutputType\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"EffortLevel\"\n Type=\"numerictextbox\"\n Caption=\"Effort Level (1-100)\"\n Description=\"Higher values request more thorough reasoning\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n </div>\n <!-- Right Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ValidationBehavior\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"EnableCaching\"\n Type=\"checkbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"TemplateDataCapture\"\n Type=\"select\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <!-- Result Selector Prompt with Tree Selector -->\n <div style=\"margin-bottom: 16px;\">\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n Result Selector Prompt\n </label>\n @if (EditMode) {\n @if (isLoadingResultSelectorData) {\n <div style=\"padding: 8px; color: var(--mj-text-muted); font-style: italic;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading prompts...\n </div>\n } @else {\n <mj-dropdown\n [(ngModel)]=\"record.ResultSelectorPromptID\"\n name=\"resultSelectorPromptID\"\n [Data]=\"resultSelectorTreeData\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Select a result selector prompt...\"\n style=\"width: 100%;\"\n (ValueChange)=\"onResultSelectorChange($any($event))\">\n </mj-dropdown>\n }\n } @else {\n <span style=\"color: var(--mj-text-secondary);\">{{ getPromptDisplayName(record.ResultSelectorPromptID || '') || 'None selected' }}</span>\n }\n </div>\n </div>\n </div>\n </div>\n </mj-accordion-panel>\n <!-- Prefill & Output Control Expansion Panel -->\n <mj-accordion-panel SectionKey=\"prefill\" SectionTitle=\"Prefill & Output Control\" SectionIcon=\"fa-solid fa-wand-magic-sparkles\"\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-wand-magic-sparkles\" style=\"color: var(--mj-text-muted);\"></i>\n Prefill & Output Control\n </span>\n </ng-template>\n <div style=\"padding: 16px 0;\">\n <p style=\"margin: 0 0 12px 0; font-size: 0.85em; color: var(--mj-text-muted);\">\n Assistant prefill seeds the model's response with an initial string, guiding output format and content. Stop sequences terminate generation when encountered.\n </p>\n <div class=\"related-grid-pair\" style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 20px;\">\n <!-- Left Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"AssistantPrefill\"\n Type=\"textarea\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"StopSequences\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n </div>\n <!-- Right Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"PrefillFallbackMode\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n </div>\n </div>\n </div>\n </mj-accordion-panel>\n <!-- Template Parameters Expansion Panel -->\n @if (template && templateParams.length > 0) {\n <mj-accordion-panel SectionKey=\"parameters\" SectionTitle=\"Template Parameters\" SectionIcon=\"fa-solid fa-sliders\"\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-sliders\" style=\"color: var(--mj-text-muted);\"></i>\n Template Parameters\n <span class=\"mj-accordion-badge\">{{ templateParams.length }}</span>\n <span style=\"color: var(--mj-text-muted); font-size: 0.8em; font-weight: normal; margin-left: 8px;\">\n <i class=\"fa-solid fa-info-circle\" title=\"These parameters are defined in the template and will be available when executing this prompt\"></i>\n Parameters defined in the template\n </span>\n </span>\n </ng-template>\n <!-- Template Parameters Display -->\n <div style=\"padding: 16px 0;\">\n @if (isLoadingTemplateParams) {\n <div class=\"loading-state\" style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading template parameters...\n </div>\n } @else if (templateParams.length === 0) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"This template has no parameters defined\" />\n } @else {\n <!-- Parameters Grid -->\n <div style=\"display: grid; gap: 12px;\">\n @for (param of templateParams; track param.ID) {\n <div class=\"parameter-card\"\n style=\"border: 1px solid var(--mj-border-default); border-radius: 8px; padding: 16px; background: var(--mj-bg-surface-sunken); transition: all 0.2s;\"\n [style.border-left]=\"'4px solid ' + getParamTypeColor(param.Type)\">\n <!-- Parameter Header -->\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 8px;\">\n <div style=\"display: flex; align-items: center; gap: 8px;\">\n <i [class]=\"'fa-solid ' + getParamTypeIcon(param.Type)\"\n [style.color]=\"getParamTypeColor(param.Type)\"\n style=\"font-size: 1.2em;\"></i>\n <h6 style=\"margin: 0; color: var(--mj-text-secondary); font-weight: 600;\">\n {{ param.Name }}\n @if (param.IsRequired) {\n <span style=\"color: #dc3545; font-size: 0.9em; margin-left: 4px;\">*</span>\n }\n </h6>\n </div>\n <div style=\"display: flex; align-items: center; gap: 8px;\">\n <span class=\"type-badge\"\n [style.background-color]=\"getParamTypeColor(param.Type)\"\n style=\"color: white; padding: 4px 8px; border-radius: 12px; font-size: 0.75em; font-weight: 500;\">\n {{ param.Type }}\n </span>\n @if (param.IsRequired) {\n <span style=\"color: #dc3545; font-size: 0.85em; font-weight: 500;\">Required</span>\n } @else {\n <span style=\"color: var(--mj-text-muted); font-size: 0.85em;\">Optional</span>\n }\n </div>\n </div>\n <!-- Parameter Description -->\n @if (param.Description) {\n <p style=\"margin: 0 0 8px 0; color: var(--mj-text-muted); font-size: 0.9em; line-height: 1.4;\">\n {{ param.Description }}\n </p>\n }\n <!-- Type-specific Information -->\n <div style=\"font-size: 0.85em; color: var(--mj-text-secondary);\">\n <span style=\"display: flex; align-items: center; gap: 4px; margin-bottom: 4px;\">\n <i class=\"fa-solid fa-info-circle\" style=\"color: var(--mj-text-muted);\"></i>\n {{ getParamTypeDescription(param) }}\n </span>\n </div>\n <!-- Additional Parameter Details -->\n <div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 12px; margin-top: 12px;\">\n @if (param.DefaultValue) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Default Value</label>\n <code style=\"font-size: 0.85em; color: var(--mj-text-secondary); word-break: break-all;\">{{ param.DefaultValue }}</code>\n </div>\n }\n @if (param.EntityID) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Entity</label>\n <span style=\"font-size: 0.85em; color: var(--mj-text-secondary);\">{{ param.Entity || 'Entity ID: ' + param.EntityID }}</span>\n </div>\n }\n @if (param.LinkedParameterName) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Linked To</label>\n <span style=\"font-size: 0.85em; color: var(--mj-text-secondary);\">\n {{ param.LinkedParameterName }}\n @if (param.LinkedParameterField) {\n ({{ param.LinkedParameterField }})\n }\n </span>\n </div>\n }\n @if (param.ExtraFilter) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Filter</label>\n <code style=\"font-size: 0.8em; color: var(--mj-text-secondary); word-break: break-all;\">{{ param.ExtraFilter }}</code>\n </div>\n }\n @if (param.RecordID) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Record ID</label>\n <code style=\"font-size: 0.85em; color: var(--mj-text-secondary);\">{{ param.RecordID }}</code>\n </div>\n }\n </div>\n </div>\n }\n </div>\n <!-- Help Text -->\n <div style=\"margin-top: 16px; padding: 12px; background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface)); border-radius: 6px; border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default));\">\n <div style=\"display: flex; align-items: flex-start; gap: 8px;\">\n <i class=\"fa-solid fa-lightbulb\" style=\"color: var(--mj-brand-primary); margin-top: 2px;\"></i>\n <div style=\"flex: 1; font-size: 0.85em; color: var(--mj-brand-primary); line-height: 1.5;\">\n <strong>Using Template Parameters:</strong> When executing this prompt, you'll be prompted to provide values for all required parameters.\n Parameters can be simple values (text, numbers) or complex data structures (JSON objects, database records, or entire entity collections).\n The template will use these parameters to generate dynamic content based on the values provided at execution time.\n </div>\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Output Example Expansion Panel (when OutputType = object) -->\n @if (showOutputExample) {\n <mj-accordion-panel SectionKey=\"output-example\" SectionTitle=\"Output Example\" SectionIcon=\"fa-solid fa-code\"\n [Expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-code\" style=\"color: var(--mj-text-muted);\"></i>\n Output Example (JSON)\n <span style=\"color: #dc3545; font-size: 0.8em; font-weight: normal;\">• Required for object output type</span>\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div class=\"phone-flush-x\" style=\"padding: 16px;\">\n @if (EditMode) {\n <mj-code-editor\n [(ngModel)]=\"record.OutputExample\"\n name=\"outputExample\"\n language=\"json\"\n placeholder=\"Enter JSON example structure...\"\n style=\"width: 100%; height: 200px; border: 1px solid var(--mj-border-default); border-radius: 4px;\">\n </mj-code-editor>\n <div style=\"margin-top: 8px; color: var(--mj-text-muted); font-size: 0.85em;\">\n <i class=\"fa-solid fa-info-circle\"></i> Provide a JSON example that defines the expected structure for object output validation.\n </div>\n } @else if (record.OutputExample) {\n <div style=\"background: var(--mj-bg-surface-sunken); border: 1px solid var(--mj-border-default); border-radius: 4px; padding: 12px; font-family: 'Courier New', monospace; font-size: 0.9em; white-space: pre-wrap; overflow: auto; max-height: 250px;\">{{ record.OutputExample }}</div>\n } @else {\n <mj-alert Variant=\"warning\">Output example is required when output type is 'object'</mj-alert>\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Execution History Expansion Panel -->\n @if (record.IsSaved) {\n <mj-accordion-panel SectionKey=\"history\" SectionTitle=\"Execution History\" SectionIcon=\"fa-solid fa-history\" [SectionCount]=\"executionHistory.length\"\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-history\" style=\"color: var(--mj-text-muted);\"></i>\n Execution History\n @if (executionHistory.length > 0) {\n <span style=\"color: var(--mj-text-muted); font-weight: normal;\">({{ executionHistory.length }})</span>\n }\n </span>\n </ng-template>\n <!-- Custom Execution History Viewer -->\n <div class=\"phone-flush-x\" style=\"padding: 16px;\">\n @if (isLoadingHistory) {\n <div style=\"text-align: center; padding: 40px; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 2em; margin-bottom: 12px;\"></i>\n <p>Loading execution history...</p>\n </div>\n } @else if (executionHistory.length === 0) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-clock-rotate-left\"\n Title=\"No execution history yet\"\n Message=\"Run this prompt to see execution history here\" />\n } @else {\n <!-- Sort Controls -->\n <div style=\"display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px;\">\n <div style=\"color: var(--mj-text-muted); font-size: 0.9em;\">\n Showing {{ executionHistory.length }} executions\n </div>\n <div style=\"display: flex; gap: 8px; align-items: center;\">\n <span style=\"color: var(--mj-text-muted); font-size: 0.85em;\">Sort by:</span>\n <div class=\"mj-button-group\">\n <button mjButton\n [class.active]=\"historySortField === 'runAt'\"\n (click)=\"changeHistorySort('runAt')\"\n size=\"sm\">\n Date\n @if (historySortField === 'runAt') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\"\n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n <button mjButton\n [class.active]=\"historySortField === 'executionTime'\"\n (click)=\"changeHistorySort('executionTime')\"\n size=\"sm\">\n Duration\n @if (historySortField === 'executionTime') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\"\n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n <button mjButton\n [class.active]=\"historySortField === 'tokens'\"\n (click)=\"changeHistorySort('tokens')\"\n size=\"sm\">\n Tokens\n @if (historySortField === 'tokens') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\"\n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n <button mjButton\n [class.active]=\"historySortField === 'cost'\"\n (click)=\"changeHistorySort('cost')\"\n size=\"sm\">\n Cost\n @if (historySortField === 'cost') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\"\n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n </div>\n </div>\n </div>\n <!-- Execution History Table -->\n <div class=\"history-table-wrap\" style=\"border: 1px solid var(--mj-border-default); border-radius: 8px; overflow: hidden;\">\n <table style=\"width: 100%; border-collapse: collapse;\">\n <thead>\n <tr style=\"background: var(--mj-bg-surface-sunken); border-bottom: 2px solid var(--mj-border-default);\">\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: var(--mj-text-secondary);\">Status</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: var(--mj-text-secondary);\">Date & Time</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: var(--mj-text-secondary);\">Model</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: var(--mj-text-secondary);\">Duration</th>\n <th style=\"padding: 12px; text-align: right; font-weight: 600; color: var(--mj-text-secondary);\">Tokens</th>\n <th style=\"padding: 12px; text-align: right; font-weight: 600; color: var(--mj-text-secondary);\">Cost</th>\n <th style=\"padding: 12px; text-align: center; font-weight: 600; color: var(--mj-text-secondary);\">Type</th>\n <th style=\"padding: 12px; text-align: center; font-weight: 600; color: var(--mj-text-secondary);\">Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (run of executionHistory; track run.ID; let i = $index) {\n <tr class=\"history-row\"\n [class.even-row]=\"i % 2 === 0\"\n style=\"border-bottom: 1px solid var(--mj-border-default);\">\n <td style=\"padding: 12px;\">\n <span style=\"display: flex; align-items: center; gap: 6px;\">\n <i [class]=\"'fa-solid ' + getExecutionStatusIcon(run.Success)\"\n [style.color]=\"getExecutionStatusColor(run.Success)\"></i>\n <span [style.color]=\"getExecutionStatusColor(run.Success)\" style=\"font-weight: 500;\">\n {{ run.Success === true ? 'Success' : run.Success === false ? 'Failed' : 'Running' }}\n </span>\n </span>\n </td>\n <td style=\"padding: 12px; color: var(--mj-text-secondary);\">\n {{ run.RunAt | date:'short' }}\n </td>\n <td style=\"padding: 12px; color: var(--mj-text-secondary);\">\n <span style=\"display: flex; align-items: center; gap: 6px;\">\n <i class=\"fa-solid fa-microchip\" style=\"color: var(--mj-text-muted);\"></i>\n {{ run.Model || 'Unknown' }}\n </span>\n </td>\n <td style=\"padding: 12px; color: var(--mj-text-secondary);\">\n {{ formatDuration(run.ExecutionTimeMS) }}\n </td>\n <td style=\"padding: 12px; text-align: right; color: var(--mj-text-secondary);\">\n {{ formatTokens(run.TokensUsed) }}\n </td>\n <td style=\"padding: 12px; text-align: right; color: var(--mj-text-secondary);\">\n {{ formatCost(run.TotalCost || run.Cost) }}\n </td>\n <td style=\"padding: 12px; text-align: center;\">\n @if (run.RunType) {\n <span style=\"padding: 4px 8px; border-radius: 12px; background: var(--mj-bg-surface-sunken); \n color: var(--mj-text-secondary); font-size: 0.85em; font-weight: 500;\">\n {{ run.RunType }}\n </span>\n }\n </td>\n <td style=\"padding: 12px; text-align: center;\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"navigateToPromptRun(run.ID)\"\n title=\"View details\">\n <i class=\"fa-solid fa-external-link\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n <!-- Phone: one card per run; the table's eight columns do not fit a 375px screen -->\n <div class=\"history-cards\">\n @for (run of executionHistory; track run.ID) {\n <button type=\"button\" class=\"history-card\" (click)=\"navigateToPromptRun(run.ID)\">\n <span class=\"history-card-main\">\n <span class=\"history-card-status\" [style.color]=\"getExecutionStatusColor(run.Success)\">\n <i [class]=\"'fa-solid ' + getExecutionStatusIcon(run.Success)\" aria-hidden=\"true\"></i>\n {{ run.Success === true ? 'Success' : run.Success === false ? 'Failed' : 'Running' }}\n </span>\n <span class=\"history-card-model\">{{ run.Model || 'Unknown' }}</span>\n </span>\n <span class=\"history-card-meta\">{{ run.RunAt | date:'short' }} \u00B7 {{ formatDuration(run.ExecutionTimeMS) }} \u00B7 {{ formatTokens(run.TokensUsed) }} tokens \u00B7 {{ formatCost(run.TotalCost || run.Cost) }}@if (run.RunType) { \u00B7 {{ run.RunType }}}</span>\n <i class=\"fa-solid fa-chevron-right history-card-open\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Cache Expansion Panel -->\n @if (record.IsSaved && record.EnableCaching) {\n <mj-accordion-panel SectionKey=\"cache\" SectionTitle=\"Result Cache\" SectionIcon=\"fa-solid fa-database\"\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-database\" style=\"color: var(--mj-text-muted);\"></i>\n Result Cache\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Result Cache','AIPromptID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: AI Result Cache')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n </div>\n </mj-accordion-panel>\n }\n <!-- Related Items Expansion Panel -->\n @if (record.IsSaved) {\n <mj-accordion-panel SectionKey=\"related\" SectionTitle=\"Related Items\" SectionIcon=\"fa-solid fa-link\"\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-link\" style=\"color: var(--mj-text-muted);\"></i>\n Related Items\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <div class=\"related-grid-pair\" style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 20px;\">\n <!-- AI Agents -->\n <div>\n <h6 style=\"margin: 0 0 12px 0; color: var(--mj-text-secondary);\">AI Agents Using This Prompt</h6>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Agent Prompts','PromptID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: AI Agent Prompts')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n </div>\n <!-- Result Selector References -->\n <div>\n <h6 style=\"margin: 0 0 12px 0; color: var(--mj-text-secondary);\">Prompts Using This as Result Selector</h6>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Prompts','ResultSelectorPromptID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: AI Prompts')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n </div>\n </div>\n </div>\n </mj-accordion-panel>\n }\n </mj-accordion-sections>\n </div>\n </div>\n </form>\n</mj-record-form-container>\n}\n\n\n<!-- AI Prompt Test Harness -->\n@if (showTestHarness) {\n <mj-window\n [Width]=\"1200\"\n [Height]=\"800\"\n [MinWidth]=\"800\"\n [MinHeight]=\"600\"\n [Draggable]=\"true\"\n [Resizable]=\"true\"\n [Visible]=\"true\"\n (Close)=\"onTestHarnessVisibilityChanged(false)\"\n [Title]=\"'Run AI Prompt - ' + (record.Name || 'Untitled')\">\n <mj-ai-test-harness\n [entity]=\"record\"\n [mode]=\"'prompt'\"\n [isVisible]=\"showTestHarness\"\n (visibilityChange)=\"onTestHarnessVisibilityChanged($event)\">\n </mj-ai-test-harness>\n </mj-window>\n}", styles: ["/* Override shared form-styles to enable flex layout */\n:host {\n display: block;\n height: 100%;\n}\n\n.record-form-container {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n padding: 10px;\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form {\n min-height: 0 !important;\n}\n\n.custom-toolbar-actions {\n margin-left: auto;\n}\n\n.status-badge {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n font-weight: 500;\n letter-spacing: 0.02em;\n}\n\n.config-summary {\n position: sticky;\n top: 0;\n max-height: 600px;\n overflow-y: auto;\n}\n\n.config-item {\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.config-item:last-child {\n border-bottom: none;\n}\n\n.template-tab-content {\n background: var(--mj-bg-surface);\n}\n\n.template-header h5 {\n font-size: 1.1em;\n}\n\n.loading-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n/* Template-editor placeholders fill the editor pane */\nmj-empty-state.no-template-state,\nmj-empty-state.invalid-template-state {\n flex: 1;\n}\n\n.template-editor-container {\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-md);\n}\n\n/* Grid layout adjustments */\n@media (max-width: 1200px) {\n .record-form-container .mj-tab-body > div {\n grid-template-columns: 1fr !important;\n gap: 20px;\n }\n\n .config-summary {\n order: -1;\n position: static;\n max-height: none;\n }\n}\n\n/* Responsive toolbar */\n@media (max-width: 768px) {\n .custom-toolbar-actions {\n flex-direction: column;\n gap: 4px !important;\n }\n\n .status-badge {\n align-self: flex-start;\n }\n}\n\n/* Ensure proper spacing in form sections */\n.record-form-container mj-form-section {\n padding: 16px;\n}\n\n/* Smooth transitions for better UX */\n.status-badge,\n.config-item,\n.template-header {\n transition: all 0.2s ease;\n}\n\n.config-item:hover {\n background-color: var(--mj-bg-surface-sunken);\n border-radius: var(--mj-radius-sm);\n margin: 0 -8px;\n padding: 8px;\n}\n\n/* Execution History Table Styles */\n.history-row {\n transition: background 0.2s;\n}\n\n.history-row:not(.even-row) {\n background: var(--mj-bg-surface-card);\n}\n\n.history-row.even-row {\n background: var(--mj-bg-surface);\n}\n\n.history-row:hover {\n background: var(--mj-border-default) !important;\n}\n\n/* Template Parameters Styles */\n.parameter-card {\n position: relative;\n overflow: hidden;\n}\n\n.parameter-card::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 4px;\n background: inherit;\n transition: width 0.2s;\n}\n\n.parameter-card:hover {\n transform: translateY(-2px);\n box-shadow: var(--mj-shadow-md);\n}\n\n.parameter-card:hover::before {\n width: 6px;\n}\n\n.type-badge {\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n transition: transform 0.2s;\n}\n\n.parameter-card:hover .type-badge {\n transform: scale(1.05);\n}\n\n/* Parameter type icons animation */\n.parameter-card i.fa-solid {\n transition: transform 0.3s;\n}\n\n.parameter-card:hover i.fa-solid {\n transform: rotate(360deg);\n}\n\n/* Grid responsive behavior */\n@media (max-width: 768px) {\n .parameter-card {\n margin-bottom: 8px;\n }\n\n .parameter-card h6 {\n font-size: 0.95em;\n }\n\n .type-badge {\n font-size: 0.7em !important;\n }\n}\n\n/* Hero header row: title block left, actions right; on a phone the actions drop under the title. */\n.hero-header-row {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n}\n\n.action-buttons {\n display: flex;\n flex-direction: column;\n gap: 8px;\n align-items: flex-end;\n}\n\n@media (max-width: 768px) {\n .hero-header-row {\n flex-direction: column;\n }\n\n .action-buttons {\n width: 100%;\n align-items: stretch;\n }\n\n .action-buttons > div {\n display: flex;\n gap: 8px;\n }\n\n .action-buttons > div > button {\n flex: 1;\n }\n}\n\n/* Phone (375px): side-by-side grids stack. */\n@media (max-width: 768px) {\n .related-grid-pair {\n grid-template-columns: 1fr !important;\n }\n}\n\n/* ============================================\n PHONE (375px): Models as cards, Execution History as cards.\n The model rows and details rows set their grids inline, hence !important.\n ============================================ */\n.history-cards {\n display: none;\n}\n\n@media (max-width: 768px) {\n /* Models: view mode reads \"#1 Gemini 3.5 Flash\" over \"Google \u00B7 Default\" */\n .model-management .model-header,\n .model-management .model-created {\n display: none !important;\n }\n\n .model-management .model-row {\n grid-template-columns: 32px auto minmax(0, 1fr) auto !important;\n grid-template-areas:\n \"prio model model actions\"\n \"prio vendor config actions\";\n column-gap: 8px !important;\n row-gap: 2px !important;\n padding: 10px 12px !important;\n align-items: center !important;\n }\n\n /* Edit mode: each dropdown gets the full width, one per line */\n .model-management .model-row:has(mj-dropdown) {\n grid-template-columns: 32px minmax(0, 1fr) auto !important;\n grid-template-areas:\n \"prio model actions\"\n \"prio vendor actions\"\n \"prio config actions\";\n row-gap: 8px !important;\n }\n\n .model-row > .drag-handle { grid-area: prio; }\n .model-row > .model-select { grid-area: model; min-width: 0; }\n .model-row > .model-vendor { grid-area: vendor; min-width: 0; }\n .model-row > .model-configuration { grid-area: config; min-width: 0; }\n .model-row > .model-actions { grid-area: actions; }\n\n .model-row:not(:has(mj-dropdown)) > .model-vendor,\n .model-row:not(:has(mj-dropdown)) > .model-configuration {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .model-row:not(:has(mj-dropdown)) > .model-configuration::before {\n content: '\u00B7';\n margin-right: 6px;\n }\n\n .model-management .model-details-row {\n grid-template-columns: minmax(0, 1fr) !important;\n padding: 8px 12px !important;\n }\n\n .model-management .model-details-row > div:first-child {\n display: none;\n }\n\n .model-management .model-parallel-grid {\n grid-template-columns: minmax(0, 1fr) !important;\n }\n\n /* Execution History: the table gives way to one card per run */\n .history-table-wrap {\n display: none !important;\n }\n\n .history-cards {\n display: flex;\n flex-direction: column;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n }\n\n .history-card {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: center;\n column-gap: 8px;\n row-gap: 2px;\n min-height: 44px;\n padding: 10px 12px;\n border: 0;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font: inherit;\n text-align: left;\n cursor: pointer;\n }\n\n .history-card:last-child {\n border-bottom: 0;\n }\n\n .history-card:hover {\n background: var(--mj-bg-surface-hover);\n }\n\n .history-card:focus-visible {\n outline: none;\n box-shadow: var(--mj-focus-ring);\n }\n\n .history-card-main {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n font-size: var(--mj-text-sm);\n }\n\n .history-card-status {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n flex-shrink: 0;\n font-weight: var(--mj-font-semibold);\n }\n\n .history-card-model {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--mj-text-secondary);\n }\n\n .history-card-meta {\n grid-column: 1;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n overflow-wrap: anywhere;\n }\n\n .history-card-open {\n grid-column: 2;\n grid-row: 1 / span 2;\n color: var(--mj-text-muted);\n font-size: var(--mj-text-xs);\n }\n}\n\n/* Phone: sections sit on the page's 12px gutter, so the container and the inline-padded body\n wrappers drop their side padding (they would indent every section twice). */\n@media (max-width: 768px) {\n .configuration-sections {\n padding: 12px 0 !important;\n border-top: 0 !important;\n background: transparent !important;\n }\n\n .phone-flush-x {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n}\n", "/* ============================================\n PHONE HERO (design call 6A), shared by the custom forms that own a hero.\n Under 768px the hero keeps icon, name, status and the primary action. Anything tagged\n .phone-hero-detail hides while the hero is compact and comes back when the summary line is\n tapped. Edit mode is untouched: the host only gets .hero-compact / .hero-view in view mode.\n Host: .phone-hero [class.hero-view]=\"!EditMode\" [class.hero-compact]=\"!EditMode && !HeroDetailsOpen\"\n Tags: .phone-hero-detail hidden while compact\n .phone-hero-hide hidden in view mode (said elsewhere on the phone hero)\n .phone-hero-only shown only on phones\n .phone-hero-top a title + action row that stacks\n .phone-hero-actions / .phone-hero-run the primary action, full width at 44px\n .phone-hero-stats a metric row that reflows to a 2-up grid when the hero is expanded\n .phone-hero-status a status chip in the identity row (with .phone-hero-only)\n ============================================ */\n.phone-hero-summary,\n.phone-hero-only {\n display: none;\n}\n\n@media (max-width: 768px) {\n .phone-hero {\n padding: 12px !important;\n }\n\n /* !important: several heroes carry inline display/padding styles on these rows */\n .phone-hero.hero-compact .phone-hero-detail,\n .phone-hero.hero-view .phone-hero-hide {\n display: none !important;\n }\n\n .phone-hero-only {\n display: inline-flex;\n }\n\n /* Lower specificity than the compact rule above, so a compact hero still hides it */\n .phone-hero .phone-hero-stats {\n display: grid !important;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 8px;\n }\n\n .phone-hero-status {\n align-items: center;\n gap: 4px;\n margin-left: 8px;\n padding: 2px 8px;\n border-radius: var(--mj-radius-full, 999px);\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n vertical-align: middle;\n white-space: nowrap;\n }\n\n /* data-status comes from RunStatusKind(); the -text / -bg pairs keep contrast in both themes */\n .phone-hero-status[data-status=\"running\"] { color: var(--mj-status-warning-text); background: var(--mj-status-warning-bg); }\n .phone-hero-status[data-status=\"success\"] { color: var(--mj-status-success-text); background: var(--mj-status-success-bg); }\n .phone-hero-status[data-status=\"error\"] { color: var(--mj-status-error-text); background: var(--mj-status-error-bg); }\n .phone-hero-status[data-status=\"info\"] { color: var(--mj-status-info-text); background: var(--mj-status-info-bg); }\n\n .phone-hero-top {\n flex-direction: column;\n align-items: stretch;\n gap: 10px;\n }\n\n .phone-hero-actions {\n width: 100%;\n }\n\n .phone-hero .phone-hero-run {\n width: 100%;\n min-height: 44px;\n justify-content: center;\n }\n\n /* Inherits the hero's text colour, so it reads on light heroes and on the brand-blue\n Queries hero alike; a muted token would be grey on blue. */\n .phone-hero-summary {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n min-height: 44px;\n margin-top: 8px;\n padding: 0 4px;\n border: 0;\n border-top: 1px solid color-mix(in srgb, currentColor 20%, transparent);\n background: transparent;\n color: inherit;\n font: inherit;\n font-size: var(--mj-text-sm);\n text-align: left;\n cursor: pointer;\n opacity: 0.85;\n }\n\n .phone-hero-summary:focus-visible {\n outline: none;\n box-shadow: var(--mj-focus-ring);\n }\n\n .phone-hero-summary-text {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .phone-hero-summary > i {\n flex-shrink: 0;\n transition: transform 0.15s ease;\n }\n\n .phone-hero-summary[aria-expanded=\"true\"] > i {\n transform: rotate(180deg);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .phone-hero-summary > i {\n transition: none;\n }\n}\n"] }]
|
|
3494
3589
|
}], null, { TemplateEditor: [{
|
|
3495
3590
|
type: ViewChild,
|
|
3496
3591
|
args: ['templateEditor']
|
|
3497
3592
|
}] }); })();
|
|
3498
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJAIPromptFormComponentExtended, { className: "MJAIPromptFormComponentExtended", filePath: "src/lib/custom/AIPrompts/ai-prompt-form.component.ts", lineNumber:
|
|
3593
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJAIPromptFormComponentExtended, { className: "MJAIPromptFormComponentExtended", filePath: "src/lib/custom/AIPrompts/ai-prompt-form.component.ts", lineNumber: 25 }); })();
|
|
3499
3594
|
//# sourceMappingURL=ai-prompt-form.component.js.map
|