@memberjunction/ng-core-entity-forms 5.28.0 → 5.30.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/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +4 -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 +567 -566
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +3 -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 +243 -244
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +3 -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 +417 -416
- 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 +51 -16
- 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 +422 -139
- package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.d.ts +68 -1
- package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.js +882 -422
- package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts +3 -0
- package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts.map +1 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.js +23 -22
- package/dist/lib/custom/EntityActions/entityaction.form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.d.ts +13 -1
- package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.js +798 -553
- package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.d.ts +3 -0
- package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.js +157 -158
- package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +44 -26
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentNote/mjaiagentnote.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentNote/mjaiagentnote.form.component.js +42 -6
- package/dist/lib/generated/Entities/MJAIAgentNote/mjaiagentnote.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +57 -49
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js +83 -77
- package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJArchiveConfiguration/mjarchiveconfiguration.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJArchiveConfiguration/mjarchiveconfiguration.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJArchiveConfiguration/mjarchiveconfiguration.form.component.js +123 -0
- package/dist/lib/generated/Entities/MJArchiveConfiguration/mjarchiveconfiguration.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJArchiveConfigurationEntity/mjarchiveconfigurationentity.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJArchiveConfigurationEntity/mjarchiveconfigurationentity.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJArchiveConfigurationEntity/mjarchiveconfigurationentity.form.component.js +87 -0
- package/dist/lib/generated/Entities/MJArchiveConfigurationEntity/mjarchiveconfigurationentity.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJArchiveRun/mjarchiverun.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJArchiveRun/mjarchiverun.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJArchiveRun/mjarchiverun.form.component.js +109 -0
- package/dist/lib/generated/Entities/MJArchiveRun/mjarchiverun.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJArchiveRunDetail/mjarchiverundetail.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJArchiveRunDetail/mjarchiverundetail.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJArchiveRunDetail/mjarchiverundetail.form.component.js +83 -0
- package/dist/lib/generated/Entities/MJArchiveRunDetail/mjarchiverundetail.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJArtifactType/mjartifacttype.form.component.js +39 -37
- package/dist/lib/generated/Entities/MJArtifactType/mjartifacttype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +104 -68
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityPermission/mjentitypermission.form.component.js +11 -9
- package/dist/lib/generated/Entities/MJEntityPermission/mjentitypermission.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJFileStorageAccount/mjfilestorageaccount.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJFileStorageAccount/mjfilestorageaccount.form.component.js +32 -14
- package/dist/lib/generated/Entities/MJFileStorageAccount/mjfilestorageaccount.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js +23 -21
- package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.js +9 -7
- package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJMCPServerTool/mjmcpservertool.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJMCPServerTool/mjmcpservertool.form.component.js +24 -6
- package/dist/lib/generated/Entities/MJMCPServerTool/mjmcpservertool.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJMCPToolFavorite/mjmcptoolfavorite.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJMCPToolFavorite/mjmcptoolfavorite.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJMCPToolFavorite/mjmcptoolfavorite.form.component.js +55 -0
- package/dist/lib/generated/Entities/MJMCPToolFavorite/mjmcptoolfavorite.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJPermissionDomain/mjpermissiondomain.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJPermissionDomain/mjpermissiondomain.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJPermissionDomain/mjpermissiondomain.form.component.js +85 -0
- package/dist/lib/generated/Entities/MJPermissionDomain/mjpermissiondomain.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJResourcePermission/mjresourcepermission.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJResourcePermission/mjresourcepermission.form.component.js +21 -12
- package/dist/lib/generated/Entities/MJResourcePermission/mjresourcepermission.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJRowLevelSecurityFilter/mjrowlevelsecurityfilter.form.component.js +5 -5
- package/dist/lib/generated/Entities/MJRowLevelSecurityFilter/mjrowlevelsecurityfilter.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js +17 -17
- package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +241 -169
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
- package/dist/lib/generated/generated-forms.module.d.ts +252 -246
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +168 -150
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/dist/lib/shared/components/template-editor.component.d.ts.map +1 -1
- package/dist/lib/shared/components/template-editor.component.js +14 -8
- package/dist/lib/shared/components/template-editor.component.js.map +1 -1
- package/package.json +34 -34
|
@@ -6,7 +6,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
6
6
|
};
|
|
7
7
|
import { Component, ViewContainerRef, ChangeDetectionStrategy, inject } from '@angular/core';
|
|
8
8
|
import { RegisterClass } from '@memberjunction/global';
|
|
9
|
-
import { BaseFormComponent } from '@memberjunction/ng-base-forms';
|
|
9
|
+
import { BaseFormComponent, CUSTOM_LAYOUT_TOOLBAR_CONFIG } from '@memberjunction/ng-base-forms';
|
|
10
10
|
import { Metadata, RunView, CompositeKey } from '@memberjunction/core';
|
|
11
11
|
import { MJAIPromptRunFormComponent } from '../../generated/Entities/MJAIPromptRun/mjaipromptrun.form.component';
|
|
12
12
|
import { SharedService } from '@memberjunction/ng-shared';
|
|
@@ -21,7 +21,7 @@ import * as i5 from "./chat-message-viewer.component";
|
|
|
21
21
|
import * as i6 from "@angular/common";
|
|
22
22
|
const _forTrack0 = ($index, $item) => $item.attemptNumber;
|
|
23
23
|
const _forTrack1 = ($index, $item) => $item.ID;
|
|
24
|
-
function
|
|
24
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
25
25
|
i0.ɵɵelementStart(0, "span", 11);
|
|
26
26
|
i0.ɵɵtext(1);
|
|
27
27
|
i0.ɵɵelementEnd();
|
|
@@ -30,7 +30,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_11_Templat
|
|
|
30
30
|
i0.ɵɵadvance();
|
|
31
31
|
i0.ɵɵtextInterpolate1("#", ctx_r1.record.ID.substring(0, 8));
|
|
32
32
|
} }
|
|
33
|
-
function
|
|
33
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
34
34
|
i0.ɵɵelementStart(0, "div", 17)(1, "div", 14);
|
|
35
35
|
i0.ɵɵtext(2, "Execution");
|
|
36
36
|
i0.ɵɵelementEnd();
|
|
@@ -46,13 +46,13 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_20_Templat
|
|
|
46
46
|
i0.ɵɵadvance();
|
|
47
47
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.RunType, " ");
|
|
48
48
|
} }
|
|
49
|
-
function
|
|
49
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
50
50
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
51
51
|
i0.ɵɵelementStart(0, "div", 65)(1, "div", 14);
|
|
52
52
|
i0.ɵɵtext(2, "Prompt");
|
|
53
53
|
i0.ɵɵelementEnd();
|
|
54
54
|
i0.ɵɵelementStart(3, "div", 67);
|
|
55
|
-
i0.ɵɵlistener("click", function
|
|
55
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_0_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompts", ctx_r1.record.ChildPromptID)); });
|
|
56
56
|
i0.ɵɵelement(4, "i", 68);
|
|
57
57
|
i0.ɵɵtext(5);
|
|
58
58
|
i0.ɵɵelementEnd();
|
|
@@ -64,7 +64,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_21_Conditi
|
|
|
64
64
|
i0.ɵɵelement(10, "span", 70);
|
|
65
65
|
i0.ɵɵelementEnd();
|
|
66
66
|
i0.ɵɵelementStart(11, "div", 72);
|
|
67
|
-
i0.ɵɵlistener("click", function
|
|
67
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_0_Template_div_click_11_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompts", ctx_r1.prompt.ID)); });
|
|
68
68
|
i0.ɵɵelement(12, "i", 73);
|
|
69
69
|
i0.ɵɵtext(13);
|
|
70
70
|
i0.ɵɵelement(14, "i", 74);
|
|
@@ -76,13 +76,13 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_21_Conditi
|
|
|
76
76
|
i0.ɵɵadvance(8);
|
|
77
77
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.prompt.Name, " ");
|
|
78
78
|
} }
|
|
79
|
-
function
|
|
79
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
80
80
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
81
81
|
i0.ɵɵelementStart(0, "div", 66)(1, "div", 14);
|
|
82
82
|
i0.ɵɵtext(2, "Prompt");
|
|
83
83
|
i0.ɵɵelementEnd();
|
|
84
84
|
i0.ɵɵelementStart(3, "div", 75);
|
|
85
|
-
i0.ɵɵlistener("click", function
|
|
85
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_1_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompts", ctx_r1.prompt.ID)); });
|
|
86
86
|
i0.ɵɵelement(4, "i", 76);
|
|
87
87
|
i0.ɵɵtext(5);
|
|
88
88
|
i0.ɵɵelementEnd()();
|
|
@@ -91,13 +91,13 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_21_Conditi
|
|
|
91
91
|
i0.ɵɵadvance(5);
|
|
92
92
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.prompt.Name, " ");
|
|
93
93
|
} }
|
|
94
|
-
function
|
|
95
|
-
i0.ɵɵconditionalCreate(0,
|
|
94
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
95
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_0_Template, 15, 2, "div", 65)(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_1_Template, 6, 1, "div", 66);
|
|
96
96
|
} if (rf & 2) {
|
|
97
97
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
98
98
|
i0.ɵɵconditional(ctx_r1.record.ChildPromptID ? 0 : 1);
|
|
99
99
|
} }
|
|
100
|
-
function
|
|
100
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_22_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
101
101
|
i0.ɵɵelementStart(0, "span", 80);
|
|
102
102
|
i0.ɵɵtext(1);
|
|
103
103
|
i0.ɵɵelementEnd();
|
|
@@ -106,18 +106,18 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_22_Conditi
|
|
|
106
106
|
i0.ɵɵadvance();
|
|
107
107
|
i0.ɵɵtextInterpolate(ctx_r1.record.Vendor);
|
|
108
108
|
} }
|
|
109
|
-
function
|
|
109
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
110
110
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
111
111
|
i0.ɵɵelementStart(0, "div", 18)(1, "div", 14);
|
|
112
112
|
i0.ɵɵtext(2, "Model");
|
|
113
113
|
i0.ɵɵelementEnd();
|
|
114
114
|
i0.ɵɵelementStart(3, "div", 77);
|
|
115
|
-
i0.ɵɵlistener("click", function
|
|
115
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_22_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Models", ctx_r1.model.ID)); });
|
|
116
116
|
i0.ɵɵelementStart(4, "span", 78);
|
|
117
117
|
i0.ɵɵelement(5, "i", 79);
|
|
118
118
|
i0.ɵɵtext(6);
|
|
119
119
|
i0.ɵɵelementEnd();
|
|
120
|
-
i0.ɵɵconditionalCreate(7,
|
|
120
|
+
i0.ɵɵconditionalCreate(7, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_22_Conditional_7_Template, 2, 1, "span", 80);
|
|
121
121
|
i0.ɵɵelementEnd()();
|
|
122
122
|
} if (rf & 2) {
|
|
123
123
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -126,16 +126,16 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_22_Templat
|
|
|
126
126
|
i0.ɵɵadvance();
|
|
127
127
|
i0.ɵɵconditional(ctx_r1.record.Vendor ? 7 : -1);
|
|
128
128
|
} }
|
|
129
|
-
function
|
|
129
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
130
130
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
131
131
|
i0.ɵɵelementStart(0, "span", 19);
|
|
132
132
|
i0.ɵɵelement(1, "i", 81);
|
|
133
133
|
i0.ɵɵelementStart(2, "a", 82);
|
|
134
|
-
i0.ɵɵlistener("click", function
|
|
134
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_23_Template_a_click_2_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToOriginalRun()); });
|
|
135
135
|
i0.ɵɵtext(3, "Original Run");
|
|
136
136
|
i0.ɵɵelementEnd()();
|
|
137
137
|
} }
|
|
138
|
-
function
|
|
138
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
139
139
|
i0.ɵɵelementStart(0, "div", 83);
|
|
140
140
|
i0.ɵɵelement(1, "i", 50);
|
|
141
141
|
i0.ɵɵelementStart(2, "div", 84)(3, "div", 85);
|
|
@@ -149,7 +149,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_30_Conditi
|
|
|
149
149
|
i0.ɵɵadvance(6);
|
|
150
150
|
i0.ɵɵtextInterpolate(ctx_r1.record.Temperature);
|
|
151
151
|
} }
|
|
152
|
-
function
|
|
152
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
153
153
|
i0.ɵɵelementStart(0, "div", 83);
|
|
154
154
|
i0.ɵɵelement(1, "i", 51);
|
|
155
155
|
i0.ɵɵelementStart(2, "div", 84)(3, "div", 85);
|
|
@@ -163,7 +163,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_30_Conditi
|
|
|
163
163
|
i0.ɵɵadvance(6);
|
|
164
164
|
i0.ɵɵtextInterpolate(ctx_r1.record.TopP);
|
|
165
165
|
} }
|
|
166
|
-
function
|
|
166
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
167
167
|
i0.ɵɵelementStart(0, "div", 83);
|
|
168
168
|
i0.ɵɵelement(1, "i", 52);
|
|
169
169
|
i0.ɵɵelementStart(2, "div", 84)(3, "div", 85);
|
|
@@ -177,7 +177,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_30_Conditi
|
|
|
177
177
|
i0.ɵɵadvance(6);
|
|
178
178
|
i0.ɵɵtextInterpolate(ctx_r1.record.TopK);
|
|
179
179
|
} }
|
|
180
|
-
function
|
|
180
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
181
181
|
i0.ɵɵelementStart(0, "div", 83);
|
|
182
182
|
i0.ɵɵelement(1, "i", 89);
|
|
183
183
|
i0.ɵɵelementStart(2, "div", 84)(3, "div", 85);
|
|
@@ -191,7 +191,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_30_Conditi
|
|
|
191
191
|
i0.ɵɵadvance(6);
|
|
192
192
|
i0.ɵɵtextInterpolate(ctx_r1.record.EffortLevel);
|
|
193
193
|
} }
|
|
194
|
-
function
|
|
194
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
195
195
|
i0.ɵɵelementStart(0, "div", 83);
|
|
196
196
|
i0.ɵɵelement(1, "i", 90);
|
|
197
197
|
i0.ɵɵelementStart(2, "div", 84)(3, "div", 85);
|
|
@@ -205,7 +205,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_30_Conditi
|
|
|
205
205
|
i0.ɵɵadvance(6);
|
|
206
206
|
i0.ɵɵtextInterpolate(ctx_r1.record.ResponseFormat);
|
|
207
207
|
} }
|
|
208
|
-
function
|
|
208
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_36_Template(rf, ctx) { if (rf & 1) {
|
|
209
209
|
i0.ɵɵelementStart(0, "div", 83);
|
|
210
210
|
i0.ɵɵelement(1, "i", 91);
|
|
211
211
|
i0.ɵɵelementStart(2, "div", 84)(3, "div", 85);
|
|
@@ -220,7 +220,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_30_Conditi
|
|
|
220
220
|
i0.ɵɵadvance(6);
|
|
221
221
|
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(7, 1, ctx_r1.record.RunAt, "short"));
|
|
222
222
|
} }
|
|
223
|
-
function
|
|
223
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
224
224
|
const _r7 = i0.ɵɵgetCurrentView();
|
|
225
225
|
i0.ɵɵelementStart(0, "div", 25)(1, "div", 83);
|
|
226
226
|
i0.ɵɵelement(2, "i", 73);
|
|
@@ -228,14 +228,14 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_30_Templat
|
|
|
228
228
|
i0.ɵɵtext(5, "Configuration");
|
|
229
229
|
i0.ɵɵelementEnd();
|
|
230
230
|
i0.ɵɵelementStart(6, "div", 86)(7, "a", 87);
|
|
231
|
-
i0.ɵɵlistener("click", function
|
|
231
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Template_a_click_7_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Configurations", ctx_r1.record.ConfigurationID)); });
|
|
232
232
|
i0.ɵɵtext(8);
|
|
233
233
|
i0.ɵɵelementEnd()()()();
|
|
234
|
-
i0.ɵɵconditionalCreate(9,
|
|
235
|
-
i0.ɵɵconditionalCreate(10,
|
|
236
|
-
i0.ɵɵconditionalCreate(11,
|
|
237
|
-
i0.ɵɵconditionalCreate(12,
|
|
238
|
-
i0.ɵɵconditionalCreate(13,
|
|
234
|
+
i0.ɵɵconditionalCreate(9, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_9_Template, 7, 1, "div", 83);
|
|
235
|
+
i0.ɵɵconditionalCreate(10, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_10_Template, 7, 1, "div", 83);
|
|
236
|
+
i0.ɵɵconditionalCreate(11, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_11_Template, 7, 1, "div", 83);
|
|
237
|
+
i0.ɵɵconditionalCreate(12, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_12_Template, 7, 1, "div", 83);
|
|
238
|
+
i0.ɵɵconditionalCreate(13, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_13_Template, 7, 1, "div", 83);
|
|
239
239
|
i0.ɵɵelementEnd();
|
|
240
240
|
i0.ɵɵelementStart(14, "div", 25)(15, "div", 83);
|
|
241
241
|
i0.ɵɵelement(16, "i", 88);
|
|
@@ -261,7 +261,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_30_Templat
|
|
|
261
261
|
i0.ɵɵelementStart(34, "div", 86);
|
|
262
262
|
i0.ɵɵtext(35);
|
|
263
263
|
i0.ɵɵelementEnd()()();
|
|
264
|
-
i0.ɵɵconditionalCreate(36,
|
|
264
|
+
i0.ɵɵconditionalCreate(36, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_36_Template, 8, 4, "div", 83);
|
|
265
265
|
i0.ɵɵelementEnd();
|
|
266
266
|
} if (rf & 2) {
|
|
267
267
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -286,7 +286,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_30_Templat
|
|
|
286
286
|
i0.ɵɵadvance();
|
|
287
287
|
i0.ɵɵconditional(ctx_r1.record.RunAt ? 36 : -1);
|
|
288
288
|
} }
|
|
289
|
-
function
|
|
289
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
290
290
|
i0.ɵɵelementStart(0, "div", 83);
|
|
291
291
|
i0.ɵɵelement(1, "i", 91);
|
|
292
292
|
i0.ɵɵelementStart(2, "div", 84)(3, "div", 85);
|
|
@@ -301,7 +301,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_31_Conditi
|
|
|
301
301
|
i0.ɵɵadvance(6);
|
|
302
302
|
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(7, 1, ctx_r1.record.RunAt, "short"));
|
|
303
303
|
} }
|
|
304
|
-
function
|
|
304
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Template(rf, ctx) { if (rf & 1) {
|
|
305
305
|
i0.ɵɵelementStart(0, "div", 25)(1, "div", 83);
|
|
306
306
|
i0.ɵɵelement(2, "i", 88);
|
|
307
307
|
i0.ɵɵelementStart(3, "div", 84)(4, "div", 85);
|
|
@@ -326,7 +326,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_31_Templat
|
|
|
326
326
|
i0.ɵɵelementStart(20, "div", 86);
|
|
327
327
|
i0.ɵɵtext(21);
|
|
328
328
|
i0.ɵɵelementEnd()()();
|
|
329
|
-
i0.ɵɵconditionalCreate(22,
|
|
329
|
+
i0.ɵɵconditionalCreate(22, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditional_22_Template, 8, 4, "div", 83);
|
|
330
330
|
i0.ɵɵelementEnd();
|
|
331
331
|
} if (rf & 2) {
|
|
332
332
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -339,23 +339,23 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_31_Templat
|
|
|
339
339
|
i0.ɵɵadvance();
|
|
340
340
|
i0.ɵɵconditional(ctx_r1.record.RunAt ? 22 : -1);
|
|
341
341
|
} }
|
|
342
|
-
function
|
|
342
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_34_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
343
343
|
i0.ɵɵelementStart(0, "span", 94);
|
|
344
344
|
i0.ɵɵtext(1, "JSON");
|
|
345
345
|
i0.ɵɵelementEnd();
|
|
346
346
|
} }
|
|
347
|
-
function
|
|
347
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_34_Template(rf, ctx) { if (rf & 1) {
|
|
348
348
|
i0.ɵɵelementStart(0, "span", 92);
|
|
349
349
|
i0.ɵɵelement(1, "i", 93);
|
|
350
350
|
i0.ɵɵtext(2, " Input ");
|
|
351
|
-
i0.ɵɵconditionalCreate(3,
|
|
351
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_34_Conditional_3_Template, 2, 0, "span", 94);
|
|
352
352
|
i0.ɵɵelementEnd();
|
|
353
353
|
} if (rf & 2) {
|
|
354
354
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
355
355
|
i0.ɵɵadvance(3);
|
|
356
356
|
i0.ɵɵconditional(ctx_r1.record.Messages && ctx_r1.record.Messages.trim() !== "" ? 3 : -1);
|
|
357
357
|
} }
|
|
358
|
-
function
|
|
358
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
359
359
|
i0.ɵɵelementStart(0, "span", 107);
|
|
360
360
|
i0.ɵɵtext(1);
|
|
361
361
|
i0.ɵɵelementEnd();
|
|
@@ -364,66 +364,66 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_36_ng_temp
|
|
|
364
364
|
i0.ɵɵadvance();
|
|
365
365
|
i0.ɵɵtextInterpolate1("(", ctx_r1.chatMessages.length, ")");
|
|
366
366
|
} }
|
|
367
|
-
function
|
|
367
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
368
368
|
i0.ɵɵelementStart(0, "span", 105);
|
|
369
369
|
i0.ɵɵelement(1, "i", 106);
|
|
370
370
|
i0.ɵɵtext(2, " Messages ");
|
|
371
|
-
i0.ɵɵconditionalCreate(3,
|
|
371
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_2_Conditional_3_Template, 2, 1, "span", 107);
|
|
372
372
|
i0.ɵɵelementEnd();
|
|
373
373
|
} if (rf & 2) {
|
|
374
374
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
375
375
|
i0.ɵɵadvance(3);
|
|
376
376
|
i0.ɵɵconditional(ctx_r1.chatMessages.length > 0 ? 3 : -1);
|
|
377
377
|
} }
|
|
378
|
-
function
|
|
378
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
379
379
|
i0.ɵɵelementStart(0, "div", 97);
|
|
380
380
|
i0.ɵɵelement(1, "i", 108);
|
|
381
381
|
i0.ɵɵelementStart(2, "p");
|
|
382
382
|
i0.ɵɵtext(3, "Loading messages...");
|
|
383
383
|
i0.ɵɵelementEnd()();
|
|
384
384
|
} }
|
|
385
|
-
function
|
|
385
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
386
386
|
i0.ɵɵelement(0, "mj-chat-message-viewer", 98);
|
|
387
387
|
} if (rf & 2) {
|
|
388
388
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
389
389
|
i0.ɵɵproperty("messages", ctx_r1.chatMessages);
|
|
390
390
|
} }
|
|
391
|
-
function
|
|
391
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
392
392
|
i0.ɵɵelementStart(0, "div", 31);
|
|
393
393
|
i0.ɵɵelement(1, "i", 109);
|
|
394
394
|
i0.ɵɵelementStart(2, "p");
|
|
395
395
|
i0.ɵɵtext(3, "No chat messages found");
|
|
396
396
|
i0.ɵɵelementEnd()();
|
|
397
397
|
} }
|
|
398
|
-
function
|
|
398
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_8_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
399
399
|
i0.ɵɵelementStart(0, "span", 94);
|
|
400
400
|
i0.ɵɵtext(1, "Object");
|
|
401
401
|
i0.ɵɵelementEnd();
|
|
402
402
|
} }
|
|
403
|
-
function
|
|
403
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_8_Template(rf, ctx) { if (rf & 1) {
|
|
404
404
|
i0.ɵɵelementStart(0, "span", 105);
|
|
405
405
|
i0.ɵɵelement(1, "i", 110);
|
|
406
406
|
i0.ɵɵtext(2, " Data ");
|
|
407
|
-
i0.ɵɵconditionalCreate(3,
|
|
407
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_8_Conditional_3_Template, 2, 0, "span", 94);
|
|
408
408
|
i0.ɵɵelementEnd();
|
|
409
409
|
} if (rf & 2) {
|
|
410
410
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
411
411
|
i0.ɵɵadvance(3);
|
|
412
412
|
i0.ɵɵconditional(ctx_r1.inputData ? 3 : -1);
|
|
413
413
|
} }
|
|
414
|
-
function
|
|
414
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
415
415
|
const _r9 = i0.ɵɵgetCurrentView();
|
|
416
416
|
i0.ɵɵelementStart(0, "div", 33)(1, "div", 99)(2, "button", 100);
|
|
417
|
-
i0.ɵɵlistener("click", function
|
|
417
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedData, "Data")); });
|
|
418
418
|
i0.ɵɵelement(3, "i", 101);
|
|
419
419
|
i0.ɵɵtext(4, " Copy ");
|
|
420
420
|
i0.ɵɵelementEnd();
|
|
421
421
|
i0.ɵɵelementStart(5, "button", 102);
|
|
422
|
-
i0.ɵɵlistener("click", function
|
|
422
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedData, "json", "Data")); });
|
|
423
423
|
i0.ɵɵelement(6, "i", 103);
|
|
424
424
|
i0.ɵɵelementEnd()();
|
|
425
425
|
i0.ɵɵelementStart(7, "mj-code-editor", 111);
|
|
426
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
426
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedData, $event) || (ctx_r1.formattedData = $event); return i0.ɵɵresetView($event); });
|
|
427
427
|
i0.ɵɵelementEnd()();
|
|
428
428
|
} if (rf & 2) {
|
|
429
429
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -431,44 +431,44 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_36_Conditi
|
|
|
431
431
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedData);
|
|
432
432
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
433
433
|
} }
|
|
434
|
-
function
|
|
434
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
435
435
|
i0.ɵɵelementStart(0, "div", 31);
|
|
436
436
|
i0.ɵɵelement(1, "i", 110);
|
|
437
437
|
i0.ɵɵelementStart(2, "p");
|
|
438
438
|
i0.ɵɵtext(3, "No data object found");
|
|
439
439
|
i0.ɵɵelementEnd()();
|
|
440
440
|
} }
|
|
441
|
-
function
|
|
441
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_13_Template(rf, ctx) { if (rf & 1) {
|
|
442
442
|
i0.ɵɵelementStart(0, "span", 105);
|
|
443
443
|
i0.ɵɵelement(1, "i", 90);
|
|
444
444
|
i0.ɵɵtext(2, " Raw ");
|
|
445
445
|
i0.ɵɵelementEnd();
|
|
446
446
|
} }
|
|
447
|
-
function
|
|
447
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Template(rf, ctx) { if (rf & 1) {
|
|
448
448
|
const _r8 = i0.ɵɵgetCurrentView();
|
|
449
449
|
i0.ɵɵelementStart(0, "div", 30)(1, "mj-accordion-panel", 95);
|
|
450
|
-
i0.ɵɵtemplate(2,
|
|
450
|
+
i0.ɵɵtemplate(2, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_2_Template, 4, 1, "ng-template", 28);
|
|
451
451
|
i0.ɵɵelementStart(3, "div", 96);
|
|
452
|
-
i0.ɵɵconditionalCreate(4,
|
|
452
|
+
i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_4_Template, 4, 0, "div", 97)(5, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_5_Template, 1, 1, "mj-chat-message-viewer", 98)(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_6_Template, 4, 0, "div", 31);
|
|
453
453
|
i0.ɵɵelementEnd()();
|
|
454
454
|
i0.ɵɵelementStart(7, "mj-accordion-panel", 95);
|
|
455
|
-
i0.ɵɵtemplate(8,
|
|
455
|
+
i0.ɵɵtemplate(8, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_8_Template, 4, 1, "ng-template", 28);
|
|
456
456
|
i0.ɵɵelementStart(9, "div", 96);
|
|
457
|
-
i0.ɵɵconditionalCreate(10,
|
|
457
|
+
i0.ɵɵconditionalCreate(10, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_Template, 8, 4, "div", 33)(11, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_11_Template, 4, 0, "div", 31);
|
|
458
458
|
i0.ɵɵelementEnd()();
|
|
459
459
|
i0.ɵɵelementStart(12, "mj-accordion-panel", 95);
|
|
460
|
-
i0.ɵɵtemplate(13,
|
|
460
|
+
i0.ɵɵtemplate(13, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_13_Template, 3, 0, "ng-template", 28);
|
|
461
461
|
i0.ɵɵelementStart(14, "div", 96)(15, "div", 33)(16, "div", 99)(17, "button", 100);
|
|
462
|
-
i0.ɵɵlistener("click", function
|
|
462
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Template_button_click_17_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedMessages, "Messages")); });
|
|
463
463
|
i0.ɵɵelement(18, "i", 101);
|
|
464
464
|
i0.ɵɵtext(19, " Copy ");
|
|
465
465
|
i0.ɵɵelementEnd();
|
|
466
466
|
i0.ɵɵelementStart(20, "button", 102);
|
|
467
|
-
i0.ɵɵlistener("click", function
|
|
467
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Template_button_click_20_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedMessages, "json", "Raw Messages")); });
|
|
468
468
|
i0.ɵɵelement(21, "i", 103);
|
|
469
469
|
i0.ɵɵelementEnd()();
|
|
470
470
|
i0.ɵɵelementStart(22, "mj-code-editor", 104);
|
|
471
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
471
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Template_mj_code_editor_ngModelChange_22_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedMessages, $event) || (ctx_r1.formattedMessages = $event); return i0.ɵɵresetView($event); });
|
|
472
472
|
i0.ɵɵelementEnd()()()()();
|
|
473
473
|
} if (rf & 2) {
|
|
474
474
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -486,29 +486,29 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_36_Templat
|
|
|
486
486
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedMessages);
|
|
487
487
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
488
488
|
} }
|
|
489
|
-
function
|
|
489
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_37_Template(rf, ctx) { if (rf & 1) {
|
|
490
490
|
i0.ɵɵelementStart(0, "div", 31);
|
|
491
491
|
i0.ɵɵelement(1, "i", 109);
|
|
492
492
|
i0.ɵɵelementStart(2, "p");
|
|
493
493
|
i0.ɵɵtext(3, "No input messages recorded");
|
|
494
494
|
i0.ɵɵelementEnd()();
|
|
495
495
|
} }
|
|
496
|
-
function
|
|
496
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
497
497
|
i0.ɵɵelementStart(0, "span", 94);
|
|
498
498
|
i0.ɵɵtext(1, "JSON");
|
|
499
499
|
i0.ɵɵelementEnd();
|
|
500
500
|
} }
|
|
501
|
-
function
|
|
501
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
502
502
|
i0.ɵɵelementStart(0, "span", 113);
|
|
503
503
|
i0.ɵɵtext(1, "Error");
|
|
504
504
|
i0.ɵɵelementEnd();
|
|
505
505
|
} }
|
|
506
|
-
function
|
|
506
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Template(rf, ctx) { if (rf & 1) {
|
|
507
507
|
i0.ɵɵelementStart(0, "span", 92);
|
|
508
508
|
i0.ɵɵelement(1, "i", 112);
|
|
509
509
|
i0.ɵɵtext(2, " Result ");
|
|
510
|
-
i0.ɵɵconditionalCreate(3,
|
|
511
|
-
i0.ɵɵconditionalCreate(4,
|
|
510
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_3_Template, 2, 0, "span", 94);
|
|
511
|
+
i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_4_Template, 2, 0, "span", 113);
|
|
512
512
|
i0.ɵɵelementEnd();
|
|
513
513
|
} if (rf & 2) {
|
|
514
514
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -517,7 +517,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Templat
|
|
|
517
517
|
i0.ɵɵadvance();
|
|
518
518
|
i0.ɵɵconditional(ctx_r1.record.ErrorMessage ? 4 : -1);
|
|
519
519
|
} }
|
|
520
|
-
function
|
|
520
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Template(rf, ctx) { if (rf & 1) {
|
|
521
521
|
i0.ɵɵelementStart(0, "div", 32);
|
|
522
522
|
i0.ɵɵelement(1, "i", 114);
|
|
523
523
|
i0.ɵɵelementStart(2, "div", 115)(3, "h4");
|
|
@@ -531,19 +531,19 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_41_Templat
|
|
|
531
531
|
i0.ɵɵadvance(6);
|
|
532
532
|
i0.ɵɵtextInterpolate(ctx_r1.record.ErrorMessage);
|
|
533
533
|
} }
|
|
534
|
-
function
|
|
534
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Template(rf, ctx) { if (rf & 1) {
|
|
535
535
|
const _r10 = i0.ɵɵgetCurrentView();
|
|
536
536
|
i0.ɵɵelementStart(0, "div", 33)(1, "div", 99)(2, "button", 100);
|
|
537
|
-
i0.ɵɵlistener("click", function
|
|
537
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedResult, "Result")); });
|
|
538
538
|
i0.ɵɵelement(3, "i", 101);
|
|
539
539
|
i0.ɵɵtext(4, " Copy ");
|
|
540
540
|
i0.ɵɵelementEnd();
|
|
541
541
|
i0.ɵɵelementStart(5, "button", 102);
|
|
542
|
-
i0.ɵɵlistener("click", function
|
|
542
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedResult, "json", "Result")); });
|
|
543
543
|
i0.ɵɵelement(6, "i", 103);
|
|
544
544
|
i0.ɵɵelementEnd()();
|
|
545
545
|
i0.ɵɵelementStart(7, "mj-code-editor", 116);
|
|
546
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
546
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedResult, $event) || (ctx_r1.formattedResult = $event); return i0.ɵɵresetView($event); });
|
|
547
547
|
i0.ɵɵelementEnd()();
|
|
548
548
|
} if (rf & 2) {
|
|
549
549
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -551,7 +551,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_42_Templat
|
|
|
551
551
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedResult);
|
|
552
552
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
553
553
|
} }
|
|
554
|
-
function
|
|
554
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
555
555
|
i0.ɵɵelementStart(0, "p", 119)(1, "strong");
|
|
556
556
|
i0.ɵɵtext(2, "Status:");
|
|
557
557
|
i0.ɵɵelementEnd();
|
|
@@ -562,13 +562,13 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_43_Conditi
|
|
|
562
562
|
i0.ɵɵadvance(3);
|
|
563
563
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Status, " ");
|
|
564
564
|
} }
|
|
565
|
-
function
|
|
565
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
566
566
|
const _r11 = i0.ɵɵgetCurrentView();
|
|
567
567
|
i0.ɵɵelementStart(0, "div", 120)(1, "div", 99)(2, "h4", 122);
|
|
568
568
|
i0.ɵɵtext(3, "Error Details");
|
|
569
569
|
i0.ɵɵelementEnd();
|
|
570
570
|
i0.ɵɵelementStart(4, "button", 102);
|
|
571
|
-
i0.ɵɵlistener("click", function
|
|
571
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_2_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedErrorDetails, "json", "Error Details")); });
|
|
572
572
|
i0.ɵɵelement(5, "i", 103);
|
|
573
573
|
i0.ɵɵelementEnd()();
|
|
574
574
|
i0.ɵɵelement(6, "mj-code-editor", 123);
|
|
@@ -578,16 +578,16 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_43_Conditi
|
|
|
578
578
|
i0.ɵɵadvance(6);
|
|
579
579
|
i0.ɵɵproperty("ngModel", ctx_r1.formattedErrorDetails)("disabled", true)("language", "json")("lineWrapping", true);
|
|
580
580
|
} }
|
|
581
|
-
function
|
|
581
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
582
582
|
i0.ɵɵelementStart(0, "p", 121);
|
|
583
583
|
i0.ɵɵtext(1, " The prompt execution failed but no additional error information is available. ");
|
|
584
584
|
i0.ɵɵelementEnd();
|
|
585
585
|
} }
|
|
586
|
-
function
|
|
586
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
587
587
|
i0.ɵɵelementStart(0, "div", 118);
|
|
588
|
-
i0.ɵɵconditionalCreate(1,
|
|
589
|
-
i0.ɵɵconditionalCreate(2,
|
|
590
|
-
i0.ɵɵconditionalCreate(3,
|
|
588
|
+
i0.ɵɵconditionalCreate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_Template, 4, 1, "p", 119);
|
|
589
|
+
i0.ɵɵconditionalCreate(2, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_2_Template, 7, 4, "div", 120);
|
|
590
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_3_Template, 2, 0, "p", 121);
|
|
591
591
|
i0.ɵɵelementEnd();
|
|
592
592
|
} if (rf & 2) {
|
|
593
593
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -598,26 +598,26 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_43_Conditi
|
|
|
598
598
|
i0.ɵɵadvance();
|
|
599
599
|
i0.ɵɵconditional(!ctx_r1.formattedErrorDetails ? 3 : -1);
|
|
600
600
|
} }
|
|
601
|
-
function
|
|
601
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Template(rf, ctx) { if (rf & 1) {
|
|
602
602
|
i0.ɵɵelementStart(0, "div", 31);
|
|
603
603
|
i0.ɵɵelement(1, "i", 117);
|
|
604
604
|
i0.ɵɵelementStart(2, "p");
|
|
605
605
|
i0.ɵɵtext(3, "No result data recorded");
|
|
606
606
|
i0.ɵɵelementEnd();
|
|
607
|
-
i0.ɵɵconditionalCreate(4,
|
|
607
|
+
i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Template, 4, 3, "div", 118);
|
|
608
608
|
i0.ɵɵelementEnd();
|
|
609
609
|
} if (rf & 2) {
|
|
610
610
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
611
611
|
i0.ɵɵadvance(4);
|
|
612
612
|
i0.ɵɵconditional(ctx_r1.record.Status === "Failed" || ctx_r1.record.Success === false ? 4 : -1);
|
|
613
613
|
} }
|
|
614
|
-
function
|
|
614
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_45_Template(rf, ctx) { if (rf & 1) {
|
|
615
615
|
i0.ɵɵelementStart(0, "span", 92);
|
|
616
616
|
i0.ɵɵelement(1, "i", 124);
|
|
617
617
|
i0.ɵɵtext(2, " Token Usage & Metrics ");
|
|
618
618
|
i0.ɵɵelementEnd();
|
|
619
619
|
} }
|
|
620
|
-
function
|
|
620
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_55_Template(rf, ctx) { if (rf & 1) {
|
|
621
621
|
i0.ɵɵelementStart(0, "div", 39)(1, "span");
|
|
622
622
|
i0.ɵɵtext(2);
|
|
623
623
|
i0.ɵɵelementEnd()();
|
|
@@ -626,7 +626,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_55_Templat
|
|
|
626
626
|
i0.ɵɵadvance(2);
|
|
627
627
|
i0.ɵɵtextInterpolate1("Rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensPromptRollup));
|
|
628
628
|
} }
|
|
629
|
-
function
|
|
629
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_63_Template(rf, ctx) { if (rf & 1) {
|
|
630
630
|
i0.ɵɵelementStart(0, "div", 39)(1, "span");
|
|
631
631
|
i0.ɵɵtext(2);
|
|
632
632
|
i0.ɵɵelementEnd()();
|
|
@@ -635,7 +635,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_63_Templat
|
|
|
635
635
|
i0.ɵɵadvance(2);
|
|
636
636
|
i0.ɵɵtextInterpolate1("Rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensCompletionRollup));
|
|
637
637
|
} }
|
|
638
|
-
function
|
|
638
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_71_Template(rf, ctx) { if (rf & 1) {
|
|
639
639
|
i0.ɵɵelementStart(0, "div", 39)(1, "span");
|
|
640
640
|
i0.ɵɵtext(2);
|
|
641
641
|
i0.ɵɵelementEnd()();
|
|
@@ -644,7 +644,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_71_Templat
|
|
|
644
644
|
i0.ɵɵadvance(2);
|
|
645
645
|
i0.ɵɵtextInterpolate1("Rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensUsedRollup));
|
|
646
646
|
} }
|
|
647
|
-
function
|
|
647
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_79_Template(rf, ctx) { if (rf & 1) {
|
|
648
648
|
i0.ɵɵelementStart(0, "div", 39)(1, "span");
|
|
649
649
|
i0.ɵɵtext(2);
|
|
650
650
|
i0.ɵɵelementEnd()();
|
|
@@ -653,7 +653,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_79_Templat
|
|
|
653
653
|
i0.ɵɵadvance(2);
|
|
654
654
|
i0.ɵɵtextInterpolate1("Total: ", ctx_r1.formatCost(ctx_r1.record.TotalCost));
|
|
655
655
|
} }
|
|
656
|
-
function
|
|
656
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_80_Template(rf, ctx) { if (rf & 1) {
|
|
657
657
|
i0.ɵɵelementStart(0, "div", 43);
|
|
658
658
|
i0.ɵɵtext(1);
|
|
659
659
|
i0.ɵɵelementEnd();
|
|
@@ -662,7 +662,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_80_Templat
|
|
|
662
662
|
i0.ɵɵadvance();
|
|
663
663
|
i0.ɵɵtextInterpolate(ctx_r1.record.CostCurrency);
|
|
664
664
|
} }
|
|
665
|
-
function
|
|
665
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_81_Template(rf, ctx) { if (rf & 1) {
|
|
666
666
|
i0.ɵɵelementStart(0, "div", 35)(1, "div", 36);
|
|
667
667
|
i0.ɵɵelement(2, "i", 125);
|
|
668
668
|
i0.ɵɵelementStart(3, "h4");
|
|
@@ -676,7 +676,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_81_Templat
|
|
|
676
676
|
i0.ɵɵadvance(6);
|
|
677
677
|
i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.QueueTime));
|
|
678
678
|
} }
|
|
679
|
-
function
|
|
679
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_82_Template(rf, ctx) { if (rf & 1) {
|
|
680
680
|
i0.ɵɵelementStart(0, "div", 35)(1, "div", 36);
|
|
681
681
|
i0.ɵɵelement(2, "i", 126);
|
|
682
682
|
i0.ɵɵelementStart(3, "h4");
|
|
@@ -690,7 +690,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_82_Templat
|
|
|
690
690
|
i0.ɵɵadvance(6);
|
|
691
691
|
i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.PromptTime));
|
|
692
692
|
} }
|
|
693
|
-
function
|
|
693
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_83_Template(rf, ctx) { if (rf & 1) {
|
|
694
694
|
i0.ɵɵelementStart(0, "div", 35)(1, "div", 36);
|
|
695
695
|
i0.ɵɵelement(2, "i", 127);
|
|
696
696
|
i0.ɵɵelementStart(3, "h4");
|
|
@@ -704,7 +704,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_83_Templat
|
|
|
704
704
|
i0.ɵɵadvance(6);
|
|
705
705
|
i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.CompletionTime));
|
|
706
706
|
} }
|
|
707
|
-
function
|
|
707
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_85_Template(rf, ctx) { if (rf & 1) {
|
|
708
708
|
i0.ɵɵelementStart(0, "div", 45)(1, "span", 85);
|
|
709
709
|
i0.ɵɵtext(2, "Execution Order:");
|
|
710
710
|
i0.ɵɵelementEnd();
|
|
@@ -716,13 +716,13 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_85_Templat
|
|
|
716
716
|
i0.ɵɵadvance(4);
|
|
717
717
|
i0.ɵɵtextInterpolate(ctx_r1.record.ExecutionOrder);
|
|
718
718
|
} }
|
|
719
|
-
function
|
|
719
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_86_Template(rf, ctx) { if (rf & 1) {
|
|
720
720
|
const _r12 = i0.ɵɵgetCurrentView();
|
|
721
721
|
i0.ɵɵelementStart(0, "div", 45)(1, "span", 85);
|
|
722
722
|
i0.ɵɵtext(2, "Agent:");
|
|
723
723
|
i0.ɵɵelementEnd();
|
|
724
724
|
i0.ɵɵelementStart(3, "span", 128);
|
|
725
|
-
i0.ɵɵlistener("click", function
|
|
725
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_86_Template_span_click_3_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Agents", ctx_r1.record.AgentID)); });
|
|
726
726
|
i0.ɵɵtext(4);
|
|
727
727
|
i0.ɵɵelement(5, "i", 129);
|
|
728
728
|
i0.ɵɵelementEnd()();
|
|
@@ -731,7 +731,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_86_Templat
|
|
|
731
731
|
i0.ɵɵadvance(4);
|
|
732
732
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Agent, " ");
|
|
733
733
|
} }
|
|
734
|
-
function
|
|
734
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
735
735
|
i0.ɵɵelementStart(0, "span", 107);
|
|
736
736
|
i0.ɵɵtext(1);
|
|
737
737
|
i0.ɵɵelementEnd();
|
|
@@ -740,22 +740,22 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_87_ng_temp
|
|
|
740
740
|
i0.ɵɵadvance();
|
|
741
741
|
i0.ɵɵtextInterpolate1("(", ctx_r1.record.ValidationAttemptCount, " attempts)");
|
|
742
742
|
} }
|
|
743
|
-
function
|
|
743
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_ng_template_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
744
744
|
i0.ɵɵelementStart(0, "span", 141);
|
|
745
745
|
i0.ɵɵtext(1, "Passed");
|
|
746
746
|
i0.ɵɵelementEnd();
|
|
747
747
|
} }
|
|
748
|
-
function
|
|
748
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_ng_template_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
749
749
|
i0.ɵɵelementStart(0, "span", 113);
|
|
750
750
|
i0.ɵɵtext(1, "Failed");
|
|
751
751
|
i0.ɵɵelementEnd();
|
|
752
752
|
} }
|
|
753
|
-
function
|
|
753
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
754
754
|
i0.ɵɵelementStart(0, "span", 92);
|
|
755
755
|
i0.ɵɵelement(1, "i", 140);
|
|
756
756
|
i0.ɵɵtext(2, " Validation & Retries ");
|
|
757
|
-
i0.ɵɵconditionalCreate(3,
|
|
758
|
-
i0.ɵɵconditionalCreate(4,
|
|
757
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_ng_template_1_Conditional_3_Template, 2, 1, "span", 107);
|
|
758
|
+
i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_ng_template_1_Conditional_4_Template, 2, 0, "span", 141)(5, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_ng_template_1_Conditional_5_Template, 2, 0, "span", 113);
|
|
759
759
|
i0.ɵɵelementEnd();
|
|
760
760
|
} if (rf & 2) {
|
|
761
761
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -764,7 +764,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_87_ng_temp
|
|
|
764
764
|
i0.ɵɵadvance();
|
|
765
765
|
i0.ɵɵconditional(ctx_r1.record.FinalValidationPassed ? 4 : ctx_r1.record.FinalValidationPassed === false ? 5 : -1);
|
|
766
766
|
} }
|
|
767
|
-
function
|
|
767
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_31_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
768
768
|
i0.ɵɵelementStart(0, "span", 142);
|
|
769
769
|
i0.ɵɵtext(1);
|
|
770
770
|
i0.ɵɵelementEnd();
|
|
@@ -773,7 +773,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_87_Conditi
|
|
|
773
773
|
i0.ɵɵadvance();
|
|
774
774
|
i0.ɵɵtextInterpolate1("", ctx_r1.record.ValidationErrorCount, " validation errors");
|
|
775
775
|
} }
|
|
776
|
-
function
|
|
776
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_31_Template(rf, ctx) { if (rf & 1) {
|
|
777
777
|
i0.ɵɵelementStart(0, "div", 135)(1, "h5");
|
|
778
778
|
i0.ɵɵelement(2, "i", 114);
|
|
779
779
|
i0.ɵɵtext(3, " Final Validation Error");
|
|
@@ -781,7 +781,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_87_Conditi
|
|
|
781
781
|
i0.ɵɵelementStart(4, "p");
|
|
782
782
|
i0.ɵɵtext(5);
|
|
783
783
|
i0.ɵɵelementEnd();
|
|
784
|
-
i0.ɵɵconditionalCreate(6,
|
|
784
|
+
i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_31_Conditional_6_Template, 2, 1, "span", 142);
|
|
785
785
|
i0.ɵɵelementEnd();
|
|
786
786
|
} if (rf & 2) {
|
|
787
787
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -790,7 +790,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_87_Conditi
|
|
|
790
790
|
i0.ɵɵadvance();
|
|
791
791
|
i0.ɵɵconditional(ctx_r1.record && ctx_r1.record.ValidationErrorCount && ctx_r1.record.ValidationErrorCount > 0 ? 6 : -1);
|
|
792
792
|
} }
|
|
793
|
-
function
|
|
793
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_32_Template(rf, ctx) { if (rf & 1) {
|
|
794
794
|
i0.ɵɵelementStart(0, "div", 136)(1, "h5");
|
|
795
795
|
i0.ɵɵelement(2, "i", 54);
|
|
796
796
|
i0.ɵɵtext(3, " Most Common Error");
|
|
@@ -803,7 +803,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_87_Conditi
|
|
|
803
803
|
i0.ɵɵadvance(5);
|
|
804
804
|
i0.ɵɵtextInterpolate(ctx_r1.record.CommonValidationError);
|
|
805
805
|
} }
|
|
806
|
-
function
|
|
806
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_33_Template(rf, ctx) { if (rf & 1) {
|
|
807
807
|
i0.ɵɵelementStart(0, "div", 137)(1, "h4");
|
|
808
808
|
i0.ɵɵtext(2, "Retry Timeline");
|
|
809
809
|
i0.ɵɵelementEnd();
|
|
@@ -833,7 +833,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_87_Conditi
|
|
|
833
833
|
i0.ɵɵadvance(5);
|
|
834
834
|
i0.ɵɵtextInterpolate1("Total Retry Duration: ", ctx_r1.formatDuration(ctx_r1.record.TotalRetryDurationMS));
|
|
835
835
|
} }
|
|
836
|
-
function
|
|
836
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_34_For_5_Conditional_7_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
837
837
|
i0.ɵɵelementStart(0, "span", 142);
|
|
838
838
|
i0.ɵɵtext(1);
|
|
839
839
|
i0.ɵɵelementEnd();
|
|
@@ -842,11 +842,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_87_Conditi
|
|
|
842
842
|
i0.ɵɵadvance();
|
|
843
843
|
i0.ɵɵtextInterpolate1("(", attempt_r14.validationErrorCount, " errors)");
|
|
844
844
|
} }
|
|
845
|
-
function
|
|
845
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_34_For_5_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
846
846
|
i0.ɵɵelementStart(0, "span", 153);
|
|
847
847
|
i0.ɵɵtext(1);
|
|
848
848
|
i0.ɵɵelementEnd();
|
|
849
|
-
i0.ɵɵconditionalCreate(2,
|
|
849
|
+
i0.ɵɵconditionalCreate(2, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_34_For_5_Conditional_7_Conditional_2_Template, 2, 1, "span", 142);
|
|
850
850
|
} if (rf & 2) {
|
|
851
851
|
const attempt_r14 = i0.ɵɵnextContext().$implicit;
|
|
852
852
|
i0.ɵɵadvance();
|
|
@@ -854,7 +854,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_87_Conditi
|
|
|
854
854
|
i0.ɵɵadvance();
|
|
855
855
|
i0.ɵɵconditional(attempt_r14.validationErrorCount > 0 ? 2 : -1);
|
|
856
856
|
} }
|
|
857
|
-
function
|
|
857
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_34_For_5_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
858
858
|
i0.ɵɵelementStart(0, "span", 152);
|
|
859
859
|
i0.ɵɵtext(1);
|
|
860
860
|
i0.ɵɵelementEnd();
|
|
@@ -863,7 +863,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_87_Conditi
|
|
|
863
863
|
i0.ɵɵadvance();
|
|
864
864
|
i0.ɵɵtextInterpolate1("Output: ", attempt_r14.outputLength, " chars");
|
|
865
865
|
} }
|
|
866
|
-
function
|
|
866
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_34_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
867
867
|
i0.ɵɵelementStart(0, "div", 148)(1, "div", 149);
|
|
868
868
|
i0.ɵɵelement(2, "i");
|
|
869
869
|
i0.ɵɵtext(3);
|
|
@@ -871,8 +871,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_87_Conditi
|
|
|
871
871
|
i0.ɵɵelementStart(4, "div", 150)(5, "span", 151);
|
|
872
872
|
i0.ɵɵtext(6);
|
|
873
873
|
i0.ɵɵelementEnd();
|
|
874
|
-
i0.ɵɵconditionalCreate(7,
|
|
875
|
-
i0.ɵɵconditionalCreate(8,
|
|
874
|
+
i0.ɵɵconditionalCreate(7, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_34_For_5_Conditional_7_Template, 3, 2);
|
|
875
|
+
i0.ɵɵconditionalCreate(8, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_34_For_5_Conditional_8_Template, 2, 1, "span", 152);
|
|
876
876
|
i0.ɵɵelementEnd()();
|
|
877
877
|
} if (rf & 2) {
|
|
878
878
|
const attempt_r14 = ctx.$implicit;
|
|
@@ -888,29 +888,29 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_87_Conditi
|
|
|
888
888
|
i0.ɵɵadvance();
|
|
889
889
|
i0.ɵɵconditional(attempt_r14.outputLength ? 8 : -1);
|
|
890
890
|
} }
|
|
891
|
-
function
|
|
891
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_34_Template(rf, ctx) { if (rf & 1) {
|
|
892
892
|
i0.ɵɵelementStart(0, "div", 138)(1, "h4");
|
|
893
893
|
i0.ɵɵtext(2, "Validation Attempts");
|
|
894
894
|
i0.ɵɵelementEnd();
|
|
895
895
|
i0.ɵɵelementStart(3, "div", 146);
|
|
896
|
-
i0.ɵɵrepeaterCreate(4,
|
|
896
|
+
i0.ɵɵrepeaterCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_34_For_5_Template, 9, 10, "div", 147, _forTrack0);
|
|
897
897
|
i0.ɵɵelementEnd()();
|
|
898
898
|
} if (rf & 2) {
|
|
899
899
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
900
900
|
i0.ɵɵadvance(4);
|
|
901
901
|
i0.ɵɵrepeater(ctx_r1.validationAttempts);
|
|
902
902
|
} }
|
|
903
|
-
function
|
|
903
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_35_Template(rf, ctx) { if (rf & 1) {
|
|
904
904
|
const _r15 = i0.ɵɵgetCurrentView();
|
|
905
905
|
i0.ɵɵelementStart(0, "div", 139)(1, "div", 99)(2, "h4", 122);
|
|
906
906
|
i0.ɵɵtext(3, "Validation Summary Details");
|
|
907
907
|
i0.ɵɵelementEnd();
|
|
908
908
|
i0.ɵɵelementStart(4, "button", 102);
|
|
909
|
-
i0.ɵɵlistener("click", function
|
|
909
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_35_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedValidationSummary, "json", "Validation Summary")); });
|
|
910
910
|
i0.ɵɵelement(5, "i", 103);
|
|
911
911
|
i0.ɵɵelementEnd()();
|
|
912
912
|
i0.ɵɵelementStart(6, "div", 154)(7, "mj-code-editor", 155);
|
|
913
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
913
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_35_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedValidationSummary, $event) || (ctx_r1.formattedValidationSummary = $event); return i0.ɵɵresetView($event); });
|
|
914
914
|
i0.ɵɵelementEnd()()();
|
|
915
915
|
} if (rf & 2) {
|
|
916
916
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -918,17 +918,17 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_87_Conditi
|
|
|
918
918
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedValidationSummary);
|
|
919
919
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
920
920
|
} }
|
|
921
|
-
function
|
|
921
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_36_Template(rf, ctx) { if (rf & 1) {
|
|
922
922
|
const _r16 = i0.ɵɵgetCurrentView();
|
|
923
923
|
i0.ɵɵelementStart(0, "div", 139)(1, "div", 99)(2, "h4", 122);
|
|
924
924
|
i0.ɵɵtext(3, "Validation Attempts (Raw JSON)");
|
|
925
925
|
i0.ɵɵelementEnd();
|
|
926
926
|
i0.ɵɵelementStart(4, "button", 102);
|
|
927
|
-
i0.ɵɵlistener("click", function
|
|
927
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_36_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedValidationAttempts, "json", "Validation Attempts")); });
|
|
928
928
|
i0.ɵɵelement(5, "i", 103);
|
|
929
929
|
i0.ɵɵelementEnd()();
|
|
930
930
|
i0.ɵɵelementStart(6, "div", 154)(7, "mj-code-editor", 156);
|
|
931
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
931
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_36_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedValidationAttempts, $event) || (ctx_r1.formattedValidationAttempts = $event); return i0.ɵɵresetView($event); });
|
|
932
932
|
i0.ɵɵelementEnd()()();
|
|
933
933
|
} if (rf & 2) {
|
|
934
934
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -936,11 +936,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_87_Conditi
|
|
|
936
936
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedValidationAttempts);
|
|
937
937
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
938
938
|
} }
|
|
939
|
-
function
|
|
939
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Template(rf, ctx) { if (rf & 1) {
|
|
940
940
|
const _r13 = i0.ɵɵgetCurrentView();
|
|
941
941
|
i0.ɵɵelementStart(0, "mj-accordion-panel", 27);
|
|
942
|
-
i0.ɵɵlistener("ExpandedChange", function
|
|
943
|
-
i0.ɵɵtemplate(1,
|
|
942
|
+
i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onValidationPanelToggle($event)); });
|
|
943
|
+
i0.ɵɵtemplate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_ng_template_1_Template, 6, 2, "ng-template", 28);
|
|
944
944
|
i0.ɵɵelementStart(2, "div", 29)(3, "div", 130)(4, "div", 131)(5, "h4");
|
|
945
945
|
i0.ɵɵtext(6, "Validation Summary");
|
|
946
946
|
i0.ɵɵelementEnd();
|
|
@@ -972,13 +972,13 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_87_Templat
|
|
|
972
972
|
i0.ɵɵelementStart(29, "div", 86);
|
|
973
973
|
i0.ɵɵtext(30);
|
|
974
974
|
i0.ɵɵelementEnd()()();
|
|
975
|
-
i0.ɵɵconditionalCreate(31,
|
|
976
|
-
i0.ɵɵconditionalCreate(32,
|
|
975
|
+
i0.ɵɵconditionalCreate(31, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_31_Template, 7, 2, "div", 135);
|
|
976
|
+
i0.ɵɵconditionalCreate(32, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_32_Template, 6, 1, "div", 136);
|
|
977
977
|
i0.ɵɵelementEnd();
|
|
978
|
-
i0.ɵɵconditionalCreate(33,
|
|
979
|
-
i0.ɵɵconditionalCreate(34,
|
|
980
|
-
i0.ɵɵconditionalCreate(35,
|
|
981
|
-
i0.ɵɵconditionalCreate(36,
|
|
978
|
+
i0.ɵɵconditionalCreate(33, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_33_Template, 18, 9, "div", 137);
|
|
979
|
+
i0.ɵɵconditionalCreate(34, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_34_Template, 6, 0, "div", 138);
|
|
980
|
+
i0.ɵɵconditionalCreate(35, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_35_Template, 8, 4, "div", 139);
|
|
981
|
+
i0.ɵɵconditionalCreate(36, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_36_Template, 8, 4, "div", 139);
|
|
982
982
|
i0.ɵɵelementEnd()();
|
|
983
983
|
} if (rf & 2) {
|
|
984
984
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1010,7 +1010,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_87_Templat
|
|
|
1010
1010
|
i0.ɵɵadvance();
|
|
1011
1011
|
i0.ɵɵconditional(ctx_r1.record.ValidationAttempts ? 36 : -1);
|
|
1012
1012
|
} }
|
|
1013
|
-
function
|
|
1013
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1014
1014
|
i0.ɵɵelementStart(0, "span", 107);
|
|
1015
1015
|
i0.ɵɵtext(1);
|
|
1016
1016
|
i0.ɵɵelementEnd();
|
|
@@ -1019,25 +1019,25 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_88_ng_temp
|
|
|
1019
1019
|
i0.ɵɵadvance();
|
|
1020
1020
|
i0.ɵɵtextInterpolate1("(", ctx_r1.childRuns.length, " children)");
|
|
1021
1021
|
} }
|
|
1022
|
-
function
|
|
1022
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
1023
1023
|
i0.ɵɵelementStart(0, "span", 92);
|
|
1024
1024
|
i0.ɵɵelement(1, "i", 159);
|
|
1025
1025
|
i0.ɵɵtext(2, " Run Hierarchy ");
|
|
1026
|
-
i0.ɵɵconditionalCreate(3,
|
|
1026
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_ng_template_1_Conditional_3_Template, 2, 1, "span", 107);
|
|
1027
1027
|
i0.ɵɵelementEnd();
|
|
1028
1028
|
} if (rf & 2) {
|
|
1029
1029
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1030
1030
|
i0.ɵɵadvance(3);
|
|
1031
1031
|
i0.ɵɵconditional(ctx_r1.childRuns.length > 0 ? 3 : -1);
|
|
1032
1032
|
} }
|
|
1033
|
-
function
|
|
1033
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1034
1034
|
const _r17 = i0.ɵɵgetCurrentView();
|
|
1035
1035
|
i0.ɵɵelementStart(0, "div", 157)(1, "h4");
|
|
1036
1036
|
i0.ɵɵelement(2, "i", 81);
|
|
1037
1037
|
i0.ɵɵtext(3, " Parent Run");
|
|
1038
1038
|
i0.ɵɵelementEnd();
|
|
1039
1039
|
i0.ɵɵelementStart(4, "div", 160);
|
|
1040
|
-
i0.ɵɵlistener("click", function
|
|
1040
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditional_3_Template_div_click_4_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompt Runs", ctx_r1.parentRun.ID)); });
|
|
1041
1041
|
i0.ɵɵelementStart(5, "div", 161);
|
|
1042
1042
|
i0.ɵɵelement(6, "i");
|
|
1043
1043
|
i0.ɵɵelementEnd();
|
|
@@ -1078,7 +1078,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_88_Conditi
|
|
|
1078
1078
|
i0.ɵɵadvance(3);
|
|
1079
1079
|
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(22, 9, ctx_r1.parentRun.RunAt, "short"));
|
|
1080
1080
|
} }
|
|
1081
|
-
function
|
|
1081
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditional_4_For_6_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1082
1082
|
i0.ɵɵelementStart(0, "span", 170);
|
|
1083
1083
|
i0.ɵɵtext(1);
|
|
1084
1084
|
i0.ɵɵelementEnd();
|
|
@@ -1087,16 +1087,16 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_88_Conditi
|
|
|
1087
1087
|
i0.ɵɵadvance();
|
|
1088
1088
|
i0.ɵɵtextInterpolate1("#", childRun_r19.ExecutionOrder);
|
|
1089
1089
|
} }
|
|
1090
|
-
function
|
|
1090
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditional_4_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
1091
1091
|
const _r18 = i0.ɵɵgetCurrentView();
|
|
1092
1092
|
i0.ɵɵelementStart(0, "div", 169);
|
|
1093
|
-
i0.ɵɵlistener("click", function
|
|
1093
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditional_4_For_6_Template_div_click_0_listener() { const childRun_r19 = i0.ɵɵrestoreView(_r18).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompt Runs", childRun_r19.ID)); });
|
|
1094
1094
|
i0.ɵɵelementStart(1, "div", 161);
|
|
1095
1095
|
i0.ɵɵelement(2, "i");
|
|
1096
1096
|
i0.ɵɵelementEnd();
|
|
1097
1097
|
i0.ɵɵelementStart(3, "div", 162)(4, "div", 163);
|
|
1098
1098
|
i0.ɵɵtext(5);
|
|
1099
|
-
i0.ɵɵconditionalCreate(6,
|
|
1099
|
+
i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditional_4_For_6_Conditional_6_Template, 2, 1, "span", 170);
|
|
1100
1100
|
i0.ɵɵelementStart(7, "span", 164);
|
|
1101
1101
|
i0.ɵɵtext(8);
|
|
1102
1102
|
i0.ɵɵelementEnd()();
|
|
@@ -1138,25 +1138,25 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_88_Conditi
|
|
|
1138
1138
|
i0.ɵɵadvance(3);
|
|
1139
1139
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatTokens(childRun_r19.TokensUsed));
|
|
1140
1140
|
} }
|
|
1141
|
-
function
|
|
1141
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
1142
1142
|
i0.ɵɵelementStart(0, "div", 158)(1, "h4");
|
|
1143
1143
|
i0.ɵɵelement(2, "i", 166);
|
|
1144
1144
|
i0.ɵɵtext(3, " Child Runs");
|
|
1145
1145
|
i0.ɵɵelementEnd();
|
|
1146
1146
|
i0.ɵɵelementStart(4, "div", 167);
|
|
1147
|
-
i0.ɵɵrepeaterCreate(5,
|
|
1147
|
+
i0.ɵɵrepeaterCreate(5, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditional_4_For_6_Template, 20, 14, "div", 168, _forTrack1);
|
|
1148
1148
|
i0.ɵɵelementEnd()();
|
|
1149
1149
|
} if (rf & 2) {
|
|
1150
1150
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1151
1151
|
i0.ɵɵadvance(5);
|
|
1152
1152
|
i0.ɵɵrepeater(ctx_r1.childRuns);
|
|
1153
1153
|
} }
|
|
1154
|
-
function
|
|
1154
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Template(rf, ctx) { if (rf & 1) {
|
|
1155
1155
|
i0.ɵɵelementStart(0, "mj-accordion-panel", 46);
|
|
1156
|
-
i0.ɵɵtemplate(1,
|
|
1156
|
+
i0.ɵɵtemplate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_ng_template_1_Template, 4, 1, "ng-template", 28);
|
|
1157
1157
|
i0.ɵɵelementStart(2, "div", 29);
|
|
1158
|
-
i0.ɵɵconditionalCreate(3,
|
|
1159
|
-
i0.ɵɵconditionalCreate(4,
|
|
1158
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditional_3_Template, 24, 12, "div", 157);
|
|
1159
|
+
i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditional_4_Template, 7, 0, "div", 158);
|
|
1160
1160
|
i0.ɵɵelementEnd()();
|
|
1161
1161
|
} if (rf & 2) {
|
|
1162
1162
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1166,19 +1166,19 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_88_Templat
|
|
|
1166
1166
|
i0.ɵɵadvance();
|
|
1167
1167
|
i0.ɵɵconditional(ctx_r1.childRuns.length > 0 ? 4 : -1);
|
|
1168
1168
|
} }
|
|
1169
|
-
function
|
|
1169
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_90_Template(rf, ctx) { if (rf & 1) {
|
|
1170
1170
|
i0.ɵɵelementStart(0, "span", 92);
|
|
1171
1171
|
i0.ɵɵelement(1, "i", 59);
|
|
1172
1172
|
i0.ɵɵtext(2, " Additional Details ");
|
|
1173
1173
|
i0.ɵɵelementEnd();
|
|
1174
1174
|
} }
|
|
1175
|
-
function
|
|
1175
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_93_Template(rf, ctx) { if (rf & 1) {
|
|
1176
1176
|
const _r20 = i0.ɵɵgetCurrentView();
|
|
1177
1177
|
i0.ɵɵelementStart(0, "div", 48)(1, "label");
|
|
1178
1178
|
i0.ɵɵtext(2, "Agent");
|
|
1179
1179
|
i0.ɵɵelementEnd();
|
|
1180
1180
|
i0.ɵɵelementStart(3, "div", 171);
|
|
1181
|
-
i0.ɵɵlistener("click", function
|
|
1181
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_93_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Agents", ctx_r1.record.AgentID)); });
|
|
1182
1182
|
i0.ɵɵelement(4, "i", 172);
|
|
1183
1183
|
i0.ɵɵtext(5);
|
|
1184
1184
|
i0.ɵɵelement(6, "i", 129);
|
|
@@ -1188,7 +1188,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_93_Templat
|
|
|
1188
1188
|
i0.ɵɵadvance(5);
|
|
1189
1189
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Agent || "Unknown", " ");
|
|
1190
1190
|
} }
|
|
1191
|
-
function
|
|
1191
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_94_Template(rf, ctx) { if (rf & 1) {
|
|
1192
1192
|
i0.ɵɵelementStart(0, "div", 48)(1, "label");
|
|
1193
1193
|
i0.ɵɵtext(2, "Run Type");
|
|
1194
1194
|
i0.ɵɵelementEnd();
|
|
@@ -1203,7 +1203,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_94_Templat
|
|
|
1203
1203
|
i0.ɵɵadvance();
|
|
1204
1204
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.RunType, " ");
|
|
1205
1205
|
} }
|
|
1206
|
-
function
|
|
1206
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Template(rf, ctx) { if (rf & 1) {
|
|
1207
1207
|
i0.ɵɵelementStart(0, "div", 48)(1, "label");
|
|
1208
1208
|
i0.ɵɵtext(2, "Response Format");
|
|
1209
1209
|
i0.ɵɵelementEnd();
|
|
@@ -1216,7 +1216,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_95_Templat
|
|
|
1216
1216
|
i0.ɵɵadvance(5);
|
|
1217
1217
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.ResponseFormat, " ");
|
|
1218
1218
|
} }
|
|
1219
|
-
function
|
|
1219
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_150_Template(rf, ctx) { if (rf & 1) {
|
|
1220
1220
|
i0.ɵɵelementStart(0, "div", 48)(1, "label");
|
|
1221
1221
|
i0.ɵɵtext(2, "Started At");
|
|
1222
1222
|
i0.ɵɵelementEnd();
|
|
@@ -1230,7 +1230,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_150_Templa
|
|
|
1230
1230
|
i0.ɵɵadvance(5);
|
|
1231
1231
|
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(6, 1, ctx_r1.record.RunAt, "medium"), " ");
|
|
1232
1232
|
} }
|
|
1233
|
-
function
|
|
1233
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_151_Template(rf, ctx) { if (rf & 1) {
|
|
1234
1234
|
i0.ɵɵelementStart(0, "div", 48)(1, "label");
|
|
1235
1235
|
i0.ɵɵtext(2, "Completed At");
|
|
1236
1236
|
i0.ɵɵelementEnd();
|
|
@@ -1244,7 +1244,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_151_Templa
|
|
|
1244
1244
|
i0.ɵɵadvance(5);
|
|
1245
1245
|
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(6, 1, ctx_r1.record.CompletedAt, "medium"), " ");
|
|
1246
1246
|
} }
|
|
1247
|
-
function
|
|
1247
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
1248
1248
|
i0.ɵɵelementStart(0, "span", 92);
|
|
1249
1249
|
i0.ɵɵelement(1, "i", 79);
|
|
1250
1250
|
i0.ɵɵtext(2, " Model Specific Response Details ");
|
|
@@ -1252,22 +1252,22 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_152_ng_tem
|
|
|
1252
1252
|
i0.ɵɵtext(4, "JSON");
|
|
1253
1253
|
i0.ɵɵelementEnd()();
|
|
1254
1254
|
} }
|
|
1255
|
-
function
|
|
1255
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_Template(rf, ctx) { if (rf & 1) {
|
|
1256
1256
|
const _r21 = i0.ɵɵgetCurrentView();
|
|
1257
1257
|
i0.ɵɵelementStart(0, "mj-accordion-panel", 27);
|
|
1258
|
-
i0.ɵɵlistener("ExpandedChange", function
|
|
1259
|
-
i0.ɵɵtemplate(1,
|
|
1258
|
+
i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onModelSpecificPanelToggle($event)); });
|
|
1259
|
+
i0.ɵɵtemplate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_ng_template_1_Template, 5, 0, "ng-template", 28);
|
|
1260
1260
|
i0.ɵɵelementStart(2, "div", 29)(3, "div", 33)(4, "div", 99)(5, "button", 100);
|
|
1261
|
-
i0.ɵɵlistener("click", function
|
|
1261
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedModelSpecificResponseDetails, "Model Specific Response Details")); });
|
|
1262
1262
|
i0.ɵɵelement(6, "i", 101);
|
|
1263
1263
|
i0.ɵɵtext(7, " Copy ");
|
|
1264
1264
|
i0.ɵɵelementEnd();
|
|
1265
1265
|
i0.ɵɵelementStart(8, "button", 102);
|
|
1266
|
-
i0.ɵɵlistener("click", function
|
|
1266
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedModelSpecificResponseDetails, "json", "Model Specific Response Details")); });
|
|
1267
1267
|
i0.ɵɵelement(9, "i", 103);
|
|
1268
1268
|
i0.ɵɵelementEnd()();
|
|
1269
1269
|
i0.ɵɵelementStart(10, "mj-code-editor", 174);
|
|
1270
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
1270
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_Template_mj_code_editor_ngModelChange_10_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedModelSpecificResponseDetails, $event) || (ctx_r1.formattedModelSpecificResponseDetails = $event); return i0.ɵɵresetView($event); });
|
|
1271
1271
|
i0.ɵɵelementEnd()()()();
|
|
1272
1272
|
} if (rf & 2) {
|
|
1273
1273
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1276,22 +1276,22 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_152_Templa
|
|
|
1276
1276
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedModelSpecificResponseDetails);
|
|
1277
1277
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
1278
1278
|
} }
|
|
1279
|
-
function
|
|
1279
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_154_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1280
1280
|
i0.ɵɵelementStart(0, "span", 141);
|
|
1281
1281
|
i0.ɵɵtext(1, "Cached");
|
|
1282
1282
|
i0.ɵɵelementEnd();
|
|
1283
1283
|
} }
|
|
1284
|
-
function
|
|
1284
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_154_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
1285
1285
|
i0.ɵɵelementStart(0, "span", 141);
|
|
1286
1286
|
i0.ɵɵtext(1, "Selected");
|
|
1287
1287
|
i0.ɵɵelementEnd();
|
|
1288
1288
|
} }
|
|
1289
|
-
function
|
|
1289
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_154_Template(rf, ctx) { if (rf & 1) {
|
|
1290
1290
|
i0.ɵɵelementStart(0, "span", 92);
|
|
1291
1291
|
i0.ɵɵelement(1, "i", 79);
|
|
1292
1292
|
i0.ɵɵtext(2, " Model Selection & Performance ");
|
|
1293
|
-
i0.ɵɵconditionalCreate(3,
|
|
1294
|
-
i0.ɵɵconditionalCreate(4,
|
|
1293
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_154_Conditional_3_Template, 2, 0, "span", 141);
|
|
1294
|
+
i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_154_Conditional_4_Template, 2, 0, "span", 141);
|
|
1295
1295
|
i0.ɵɵelementEnd();
|
|
1296
1296
|
} if (rf & 2) {
|
|
1297
1297
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1300,7 +1300,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_ng_template_154_Templa
|
|
|
1300
1300
|
i0.ɵɵadvance();
|
|
1301
1301
|
i0.ɵɵconditional(ctx_r1.record.WasSelectedResult ? 4 : -1);
|
|
1302
1302
|
} }
|
|
1303
|
-
function
|
|
1303
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_181_Template(rf, ctx) { if (rf & 1) {
|
|
1304
1304
|
i0.ɵɵelementStart(0, "div", 62)(1, "label");
|
|
1305
1305
|
i0.ɵɵtext(2, "Cache Key");
|
|
1306
1306
|
i0.ɵɵelementEnd();
|
|
@@ -1314,13 +1314,13 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_181_Templa
|
|
|
1314
1314
|
i0.ɵɵadvance(6);
|
|
1315
1315
|
i0.ɵɵtextInterpolate(ctx_r1.record.CacheKey);
|
|
1316
1316
|
} }
|
|
1317
|
-
function
|
|
1317
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_182_Template(rf, ctx) { if (rf & 1) {
|
|
1318
1318
|
const _r22 = i0.ɵɵgetCurrentView();
|
|
1319
1319
|
i0.ɵɵelementStart(0, "div", 48)(1, "label");
|
|
1320
1320
|
i0.ɵɵtext(2, "Judge Prompt");
|
|
1321
1321
|
i0.ɵɵelementEnd();
|
|
1322
1322
|
i0.ɵɵelementStart(3, "div", 176);
|
|
1323
|
-
i0.ɵɵlistener("click", function
|
|
1323
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_182_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompts", ctx_r1.record.JudgeID)); });
|
|
1324
1324
|
i0.ɵɵelement(4, "i", 177);
|
|
1325
1325
|
i0.ɵɵtext(5);
|
|
1326
1326
|
i0.ɵɵelement(6, "i", 129);
|
|
@@ -1330,7 +1330,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_182_Templa
|
|
|
1330
1330
|
i0.ɵɵadvance(5);
|
|
1331
1331
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Judge || "Unknown", " ");
|
|
1332
1332
|
} }
|
|
1333
|
-
function
|
|
1333
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_183_Template(rf, ctx) { if (rf & 1) {
|
|
1334
1334
|
i0.ɵɵelementStart(0, "div", 48)(1, "label");
|
|
1335
1335
|
i0.ɵɵtext(2, "Judge Score");
|
|
1336
1336
|
i0.ɵɵelementEnd();
|
|
@@ -1343,7 +1343,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_183_Templa
|
|
|
1343
1343
|
i0.ɵɵadvance(5);
|
|
1344
1344
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.JudgeScore, " ");
|
|
1345
1345
|
} }
|
|
1346
|
-
function
|
|
1346
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_196_Template(rf, ctx) { if (rf & 1) {
|
|
1347
1347
|
i0.ɵɵelementStart(0, "div", 48)(1, "label");
|
|
1348
1348
|
i0.ɵɵtext(2, "First Token Time");
|
|
1349
1349
|
i0.ɵɵelementEnd();
|
|
@@ -1356,7 +1356,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_196_Templa
|
|
|
1356
1356
|
i0.ɵɵadvance(5);
|
|
1357
1357
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.FirstTokenTime, " ms ");
|
|
1358
1358
|
} }
|
|
1359
|
-
function
|
|
1359
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_197_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1360
1360
|
i0.ɵɵelementStart(0, "div", 62)(1, "label");
|
|
1361
1361
|
i0.ɵɵtext(2, "Cancellation Reason");
|
|
1362
1362
|
i0.ɵɵelementEnd();
|
|
@@ -1369,7 +1369,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_197_Condit
|
|
|
1369
1369
|
i0.ɵɵadvance(5);
|
|
1370
1370
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.CancellationReason, " ");
|
|
1371
1371
|
} }
|
|
1372
|
-
function
|
|
1372
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_197_Template(rf, ctx) { if (rf & 1) {
|
|
1373
1373
|
i0.ɵɵelementStart(0, "div", 48)(1, "label");
|
|
1374
1374
|
i0.ɵɵtext(2, "Cancelled");
|
|
1375
1375
|
i0.ɵɵelementEnd();
|
|
@@ -1377,23 +1377,23 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_197_Templa
|
|
|
1377
1377
|
i0.ɵɵelement(4, "i", 181);
|
|
1378
1378
|
i0.ɵɵtext(5, " Yes ");
|
|
1379
1379
|
i0.ɵɵelementEnd()();
|
|
1380
|
-
i0.ɵɵconditionalCreate(6,
|
|
1380
|
+
i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_197_Conditional_6_Template, 6, 1, "div", 62);
|
|
1381
1381
|
} if (rf & 2) {
|
|
1382
1382
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1383
1383
|
i0.ɵɵadvance(6);
|
|
1384
1384
|
i0.ɵɵconditional(ctx_r1.record.CancellationReason ? 6 : -1);
|
|
1385
1385
|
} }
|
|
1386
|
-
function
|
|
1386
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_198_Template(rf, ctx) { if (rf & 1) {
|
|
1387
1387
|
const _r23 = i0.ɵɵgetCurrentView();
|
|
1388
1388
|
i0.ɵɵelementStart(0, "div", 63)(1, "div", 99)(2, "h4", 122);
|
|
1389
1389
|
i0.ɵɵtext(3, "Model Selection Details");
|
|
1390
1390
|
i0.ɵɵelementEnd();
|
|
1391
1391
|
i0.ɵɵelementStart(4, "button", 102);
|
|
1392
|
-
i0.ɵɵlistener("click", function
|
|
1392
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_198_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedModelSelection, "json", "Model Selection")); });
|
|
1393
1393
|
i0.ɵɵelement(5, "i", 103);
|
|
1394
1394
|
i0.ɵɵelementEnd()();
|
|
1395
1395
|
i0.ɵɵelementStart(6, "div", 154)(7, "mj-code-editor", 183);
|
|
1396
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
1396
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_198_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedModelSelection, $event) || (ctx_r1.formattedModelSelection = $event); return i0.ɵɵresetView($event); });
|
|
1397
1397
|
i0.ɵɵelementEnd()()();
|
|
1398
1398
|
} if (rf & 2) {
|
|
1399
1399
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1401,17 +1401,17 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_198_Templa
|
|
|
1401
1401
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedModelSelection);
|
|
1402
1402
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
1403
1403
|
} }
|
|
1404
|
-
function
|
|
1404
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_199_Template(rf, ctx) { if (rf & 1) {
|
|
1405
1405
|
const _r24 = i0.ɵɵgetCurrentView();
|
|
1406
1406
|
i0.ɵɵelementStart(0, "div", 64)(1, "div", 99)(2, "h4", 122);
|
|
1407
1407
|
i0.ɵɵtext(3, "Error Details");
|
|
1408
1408
|
i0.ɵɵelementEnd();
|
|
1409
1409
|
i0.ɵɵelementStart(4, "button", 102);
|
|
1410
|
-
i0.ɵɵlistener("click", function
|
|
1410
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_199_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedErrorDetails, "json", "Error Details")); });
|
|
1411
1411
|
i0.ɵɵelement(5, "i", 103);
|
|
1412
1412
|
i0.ɵɵelementEnd()();
|
|
1413
1413
|
i0.ɵɵelementStart(6, "div", 154)(7, "mj-code-editor", 184);
|
|
1414
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
1414
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_199_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedErrorDetails, $event) || (ctx_r1.formattedErrorDetails = $event); return i0.ɵɵresetView($event); });
|
|
1415
1415
|
i0.ɵɵelementEnd()()();
|
|
1416
1416
|
} if (rf & 2) {
|
|
1417
1417
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1419,16 +1419,16 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Conditional_199_Templa
|
|
|
1419
1419
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedErrorDetails);
|
|
1420
1420
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
1421
1421
|
} }
|
|
1422
|
-
function
|
|
1422
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
1423
1423
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
1424
|
-
i0.ɵɵelementStart(0, "form",
|
|
1425
|
-
i0.ɵɵ
|
|
1426
|
-
i0.ɵɵelementStart(3, "div", 5)(4, "div", 6)(5, "div", 7)(6, "div", 8);
|
|
1424
|
+
i0.ɵɵelementStart(0, "mj-record-form-container", 3);
|
|
1425
|
+
i0.ɵɵlistener("Navigate", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_mj_record_form_container_Navigate_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnFormNavigate($event)); })("DeleteRequested", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_mj_record_form_container_DeleteRequested_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnDeleteRequested()); })("FavoriteToggled", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_mj_record_form_container_FavoriteToggled_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnFavoriteToggled()); })("HistoryRequested", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_mj_record_form_container_HistoryRequested_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnHistoryRequested()); })("ListManagementRequested", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_mj_record_form_container_ListManagementRequested_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnListManagementRequested()); });
|
|
1426
|
+
i0.ɵɵelementStart(1, "form", 4, 0)(3, "div", 5)(4, "div", 6)(5, "div", 7)(6, "div", 8);
|
|
1427
1427
|
i0.ɵɵelement(7, "i");
|
|
1428
1428
|
i0.ɵɵelementEnd();
|
|
1429
1429
|
i0.ɵɵelementStart(8, "div", 9)(9, "h1", 10);
|
|
1430
1430
|
i0.ɵɵtext(10, " Prompt Run ");
|
|
1431
|
-
i0.ɵɵconditionalCreate(11,
|
|
1431
|
+
i0.ɵɵconditionalCreate(11, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_11_Template, 2, 1, "span", 11);
|
|
1432
1432
|
i0.ɵɵelementEnd();
|
|
1433
1433
|
i0.ɵɵelementStart(12, "div", 12)(13, "div", 13)(14, "div", 14);
|
|
1434
1434
|
i0.ɵɵtext(15, "Status");
|
|
@@ -1437,38 +1437,38 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if
|
|
|
1437
1437
|
i0.ɵɵelement(17, "span", 16)(18, "i");
|
|
1438
1438
|
i0.ɵɵtext(19);
|
|
1439
1439
|
i0.ɵɵelementEnd()();
|
|
1440
|
-
i0.ɵɵconditionalCreate(20,
|
|
1441
|
-
i0.ɵɵconditionalCreate(21,
|
|
1442
|
-
i0.ɵɵconditionalCreate(22,
|
|
1443
|
-
i0.ɵɵconditionalCreate(23,
|
|
1440
|
+
i0.ɵɵconditionalCreate(20, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_20_Template, 6, 5, "div", 17);
|
|
1441
|
+
i0.ɵɵconditionalCreate(21, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Template, 2, 1);
|
|
1442
|
+
i0.ɵɵconditionalCreate(22, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_22_Template, 8, 2, "div", 18);
|
|
1443
|
+
i0.ɵɵconditionalCreate(23, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_23_Template, 4, 0, "span", 19);
|
|
1444
1444
|
i0.ɵɵelementEnd()()();
|
|
1445
1445
|
i0.ɵɵelementStart(24, "div", 20)(25, "button", 21);
|
|
1446
|
-
i0.ɵɵlistener("click", function
|
|
1446
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_button_click_25_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.reRunPrompt()); });
|
|
1447
1447
|
i0.ɵɵelement(26, "i", 22);
|
|
1448
1448
|
i0.ɵɵtext(27, " Re-Run ");
|
|
1449
1449
|
i0.ɵɵelementEnd();
|
|
1450
1450
|
i0.ɵɵelementStart(28, "button", 23);
|
|
1451
|
-
i0.ɵɵlistener("click", function
|
|
1451
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_button_click_28_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.refreshData()); });
|
|
1452
1452
|
i0.ɵɵelement(29, "i", 24);
|
|
1453
1453
|
i0.ɵɵelementEnd()()();
|
|
1454
|
-
i0.ɵɵconditionalCreate(30,
|
|
1454
|
+
i0.ɵɵconditionalCreate(30, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Template, 37, 10)(31, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Template, 23, 4, "div", 25);
|
|
1455
1455
|
i0.ɵɵelementEnd();
|
|
1456
1456
|
i0.ɵɵelementStart(32, "div", 26)(33, "mj-accordion-panel", 27);
|
|
1457
|
-
i0.ɵɵlistener("ExpandedChange", function
|
|
1458
|
-
i0.ɵɵtemplate(34,
|
|
1457
|
+
i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_mj_accordion_panel_ExpandedChange_33_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onInputPanelToggle($event)); });
|
|
1458
|
+
i0.ɵɵtemplate(34, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_34_Template, 4, 1, "ng-template", 28);
|
|
1459
1459
|
i0.ɵɵelementStart(35, "div", 29);
|
|
1460
|
-
i0.ɵɵconditionalCreate(36,
|
|
1460
|
+
i0.ɵɵconditionalCreate(36, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Template, 23, 9, "div", 30)(37, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_37_Template, 4, 0, "div", 31);
|
|
1461
1461
|
i0.ɵɵelementEnd()();
|
|
1462
1462
|
i0.ɵɵelementStart(38, "mj-accordion-panel", 27);
|
|
1463
|
-
i0.ɵɵlistener("ExpandedChange", function
|
|
1464
|
-
i0.ɵɵtemplate(39,
|
|
1463
|
+
i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_mj_accordion_panel_ExpandedChange_38_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onResultPanelToggle($event)); });
|
|
1464
|
+
i0.ɵɵtemplate(39, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Template, 5, 2, "ng-template", 28);
|
|
1465
1465
|
i0.ɵɵelementStart(40, "div", 29);
|
|
1466
|
-
i0.ɵɵconditionalCreate(41,
|
|
1467
|
-
i0.ɵɵconditionalCreate(42,
|
|
1466
|
+
i0.ɵɵconditionalCreate(41, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Template, 7, 1, "div", 32);
|
|
1467
|
+
i0.ɵɵconditionalCreate(42, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Template, 8, 4, "div", 33)(43, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Template, 5, 1, "div", 31);
|
|
1468
1468
|
i0.ɵɵelementEnd()();
|
|
1469
1469
|
i0.ɵɵelementStart(44, "mj-accordion-panel", 27);
|
|
1470
|
-
i0.ɵɵlistener("ExpandedChange", function
|
|
1471
|
-
i0.ɵɵtemplate(45,
|
|
1470
|
+
i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_mj_accordion_panel_ExpandedChange_44_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onMetricsPanelToggle($event)); });
|
|
1471
|
+
i0.ɵɵtemplate(45, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_45_Template, 3, 0, "ng-template", 28);
|
|
1472
1472
|
i0.ɵɵelementStart(46, "div", 29)(47, "div", 34)(48, "div", 35)(49, "div", 36);
|
|
1473
1473
|
i0.ɵɵelement(50, "i", 37);
|
|
1474
1474
|
i0.ɵɵelementStart(51, "h4");
|
|
@@ -1477,7 +1477,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if
|
|
|
1477
1477
|
i0.ɵɵelementStart(53, "div", 38);
|
|
1478
1478
|
i0.ɵɵtext(54);
|
|
1479
1479
|
i0.ɵɵelementEnd();
|
|
1480
|
-
i0.ɵɵconditionalCreate(55,
|
|
1480
|
+
i0.ɵɵconditionalCreate(55, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_55_Template, 3, 1, "div", 39);
|
|
1481
1481
|
i0.ɵɵelementEnd();
|
|
1482
1482
|
i0.ɵɵelementStart(56, "div", 35)(57, "div", 36);
|
|
1483
1483
|
i0.ɵɵelement(58, "i", 40);
|
|
@@ -1487,7 +1487,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if
|
|
|
1487
1487
|
i0.ɵɵelementStart(61, "div", 38);
|
|
1488
1488
|
i0.ɵɵtext(62);
|
|
1489
1489
|
i0.ɵɵelementEnd();
|
|
1490
|
-
i0.ɵɵconditionalCreate(63,
|
|
1490
|
+
i0.ɵɵconditionalCreate(63, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_63_Template, 3, 1, "div", 39);
|
|
1491
1491
|
i0.ɵɵelementEnd();
|
|
1492
1492
|
i0.ɵɵelementStart(64, "div", 35)(65, "div", 36);
|
|
1493
1493
|
i0.ɵɵelement(66, "i", 41);
|
|
@@ -1497,7 +1497,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if
|
|
|
1497
1497
|
i0.ɵɵelementStart(69, "div", 38);
|
|
1498
1498
|
i0.ɵɵtext(70);
|
|
1499
1499
|
i0.ɵɵelementEnd();
|
|
1500
|
-
i0.ɵɵconditionalCreate(71,
|
|
1500
|
+
i0.ɵɵconditionalCreate(71, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_71_Template, 3, 1, "div", 39);
|
|
1501
1501
|
i0.ɵɵelementEnd();
|
|
1502
1502
|
i0.ɵɵelementStart(72, "div", 35)(73, "div", 36);
|
|
1503
1503
|
i0.ɵɵelement(74, "i", 42);
|
|
@@ -1507,25 +1507,25 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if
|
|
|
1507
1507
|
i0.ɵɵelementStart(77, "div", 38);
|
|
1508
1508
|
i0.ɵɵtext(78);
|
|
1509
1509
|
i0.ɵɵelementEnd();
|
|
1510
|
-
i0.ɵɵconditionalCreate(79,
|
|
1511
|
-
i0.ɵɵconditionalCreate(80,
|
|
1510
|
+
i0.ɵɵconditionalCreate(79, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_79_Template, 3, 1, "div", 39);
|
|
1511
|
+
i0.ɵɵconditionalCreate(80, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_80_Template, 2, 1, "div", 43);
|
|
1512
1512
|
i0.ɵɵelementEnd();
|
|
1513
|
-
i0.ɵɵconditionalCreate(81,
|
|
1514
|
-
i0.ɵɵconditionalCreate(82,
|
|
1515
|
-
i0.ɵɵconditionalCreate(83,
|
|
1513
|
+
i0.ɵɵconditionalCreate(81, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_81_Template, 7, 1, "div", 35);
|
|
1514
|
+
i0.ɵɵconditionalCreate(82, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_82_Template, 7, 1, "div", 35);
|
|
1515
|
+
i0.ɵɵconditionalCreate(83, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_83_Template, 7, 1, "div", 35);
|
|
1516
1516
|
i0.ɵɵelementEnd();
|
|
1517
1517
|
i0.ɵɵelementStart(84, "div", 44);
|
|
1518
|
-
i0.ɵɵconditionalCreate(85,
|
|
1519
|
-
i0.ɵɵconditionalCreate(86,
|
|
1518
|
+
i0.ɵɵconditionalCreate(85, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_85_Template, 5, 1, "div", 45);
|
|
1519
|
+
i0.ɵɵconditionalCreate(86, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_86_Template, 6, 1, "div", 45);
|
|
1520
1520
|
i0.ɵɵelementEnd()()();
|
|
1521
|
-
i0.ɵɵconditionalCreate(87,
|
|
1522
|
-
i0.ɵɵconditionalCreate(88,
|
|
1521
|
+
i0.ɵɵconditionalCreate(87, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Template, 37, 18, "mj-accordion-panel", 46);
|
|
1522
|
+
i0.ɵɵconditionalCreate(88, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Template, 5, 3, "mj-accordion-panel", 46);
|
|
1523
1523
|
i0.ɵɵelementStart(89, "mj-accordion-panel", 46);
|
|
1524
|
-
i0.ɵɵtemplate(90,
|
|
1524
|
+
i0.ɵɵtemplate(90, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_90_Template, 3, 0, "ng-template", 28);
|
|
1525
1525
|
i0.ɵɵelementStart(91, "div", 29)(92, "div", 47);
|
|
1526
|
-
i0.ɵɵconditionalCreate(93,
|
|
1527
|
-
i0.ɵɵconditionalCreate(94,
|
|
1528
|
-
i0.ɵɵconditionalCreate(95,
|
|
1526
|
+
i0.ɵɵconditionalCreate(93, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_93_Template, 7, 1, "div", 48);
|
|
1527
|
+
i0.ɵɵconditionalCreate(94, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_94_Template, 6, 3, "div", 48);
|
|
1528
|
+
i0.ɵɵconditionalCreate(95, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Template, 6, 1, "div", 48);
|
|
1529
1529
|
i0.ɵɵelementStart(96, "div", 48)(97, "label");
|
|
1530
1530
|
i0.ɵɵtext(98, "Temperature");
|
|
1531
1531
|
i0.ɵɵelementEnd();
|
|
@@ -1589,13 +1589,13 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if
|
|
|
1589
1589
|
i0.ɵɵelement(148, "i", 58);
|
|
1590
1590
|
i0.ɵɵtext(149);
|
|
1591
1591
|
i0.ɵɵelementEnd()();
|
|
1592
|
-
i0.ɵɵconditionalCreate(150,
|
|
1593
|
-
i0.ɵɵconditionalCreate(151,
|
|
1592
|
+
i0.ɵɵconditionalCreate(150, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_150_Template, 7, 4, "div", 48);
|
|
1593
|
+
i0.ɵɵconditionalCreate(151, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_151_Template, 7, 4, "div", 48);
|
|
1594
1594
|
i0.ɵɵelementEnd()()();
|
|
1595
|
-
i0.ɵɵconditionalCreate(152,
|
|
1595
|
+
i0.ɵɵconditionalCreate(152, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_Template, 11, 5, "mj-accordion-panel", 46);
|
|
1596
1596
|
i0.ɵɵelementStart(153, "mj-accordion-panel", 27);
|
|
1597
|
-
i0.ɵɵlistener("ExpandedChange", function
|
|
1598
|
-
i0.ɵɵtemplate(154,
|
|
1597
|
+
i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_mj_accordion_panel_ExpandedChange_153_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onModelSelectionPanelToggle($event)); });
|
|
1598
|
+
i0.ɵɵtemplate(154, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_154_Template, 5, 2, "ng-template", 28);
|
|
1599
1599
|
i0.ɵɵelementStart(155, "div", 29)(156, "div", 47)(157, "div", 48)(158, "label");
|
|
1600
1600
|
i0.ɵɵtext(159, "Status");
|
|
1601
1601
|
i0.ɵɵelementEnd();
|
|
@@ -1624,9 +1624,9 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if
|
|
|
1624
1624
|
i0.ɵɵelement(179, "i");
|
|
1625
1625
|
i0.ɵɵtext(180);
|
|
1626
1626
|
i0.ɵɵelementEnd()();
|
|
1627
|
-
i0.ɵɵconditionalCreate(181,
|
|
1628
|
-
i0.ɵɵconditionalCreate(182,
|
|
1629
|
-
i0.ɵɵconditionalCreate(183,
|
|
1627
|
+
i0.ɵɵconditionalCreate(181, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_181_Template, 7, 1, "div", 62);
|
|
1628
|
+
i0.ɵɵconditionalCreate(182, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_182_Template, 7, 1, "div", 48);
|
|
1629
|
+
i0.ɵɵconditionalCreate(183, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_183_Template, 6, 1, "div", 48);
|
|
1630
1630
|
i0.ɵɵelementStart(184, "div", 48)(185, "label");
|
|
1631
1631
|
i0.ɵɵtext(186, "Was Selected Result");
|
|
1632
1632
|
i0.ɵɵelementEnd();
|
|
@@ -1641,17 +1641,16 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if
|
|
|
1641
1641
|
i0.ɵɵelement(194, "i");
|
|
1642
1642
|
i0.ɵɵtext(195);
|
|
1643
1643
|
i0.ɵɵelementEnd()();
|
|
1644
|
-
i0.ɵɵconditionalCreate(196,
|
|
1645
|
-
i0.ɵɵconditionalCreate(197,
|
|
1644
|
+
i0.ɵɵconditionalCreate(196, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_196_Template, 6, 1, "div", 48);
|
|
1645
|
+
i0.ɵɵconditionalCreate(197, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_197_Template, 7, 1);
|
|
1646
1646
|
i0.ɵɵelementEnd();
|
|
1647
|
-
i0.ɵɵconditionalCreate(198,
|
|
1648
|
-
i0.ɵɵconditionalCreate(199,
|
|
1649
|
-
i0.ɵɵelementEnd()()()();
|
|
1647
|
+
i0.ɵɵconditionalCreate(198, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_198_Template, 8, 4, "div", 63);
|
|
1648
|
+
i0.ɵɵconditionalCreate(199, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_199_Template, 8, 4, "div", 64);
|
|
1649
|
+
i0.ɵɵelementEnd()()()()();
|
|
1650
1650
|
} if (rf & 2) {
|
|
1651
1651
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
1652
|
-
i0.ɵɵ
|
|
1653
|
-
i0.ɵɵ
|
|
1654
|
-
i0.ɵɵadvance(4);
|
|
1652
|
+
i0.ɵɵproperty("Record", ctx_r1.record)("FormComponent", ctx_r1)("ToolbarConfig", ctx_r1.toolbarConfig)("WidthMode", "full-width");
|
|
1653
|
+
i0.ɵɵadvance(6);
|
|
1655
1654
|
i0.ɵɵstyleProp("background-color", ctx_r1.getStatusColor() + "20");
|
|
1656
1655
|
i0.ɵɵadvance();
|
|
1657
1656
|
i0.ɵɵclassMap("fa-solid " + ctx_r1.getStatusIcon());
|
|
@@ -1806,23 +1805,23 @@ function MJAIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if
|
|
|
1806
1805
|
i0.ɵɵadvance();
|
|
1807
1806
|
i0.ɵɵconditional(ctx_r1.record.ErrorDetails ? 199 : -1);
|
|
1808
1807
|
} }
|
|
1809
|
-
function
|
|
1808
|
+
function MJAIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
1810
1809
|
const _r25 = i0.ɵɵgetCurrentView();
|
|
1811
1810
|
i0.ɵɵelementStart(0, "div", 185);
|
|
1812
|
-
i0.ɵɵlistener("click", function
|
|
1811
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_1_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeFullScreen()); });
|
|
1813
1812
|
i0.ɵɵelementStart(1, "div", 186);
|
|
1814
|
-
i0.ɵɵlistener("click", function
|
|
1813
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_1_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r25); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
1815
1814
|
i0.ɵɵelementStart(2, "div", 187)(3, "span", 188);
|
|
1816
1815
|
i0.ɵɵelement(4, "i", 103);
|
|
1817
1816
|
i0.ɵɵtext(5);
|
|
1818
1817
|
i0.ɵɵelementEnd();
|
|
1819
1818
|
i0.ɵɵelementStart(6, "div", 189)(7, "button", 190);
|
|
1820
|
-
i0.ɵɵlistener("click", function
|
|
1819
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_1_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.FullScreenContent, ctx_r1.FullScreenTitle)); });
|
|
1821
1820
|
i0.ɵɵelement(8, "i", 101);
|
|
1822
1821
|
i0.ɵɵtext(9, " Copy ");
|
|
1823
1822
|
i0.ɵɵelementEnd();
|
|
1824
1823
|
i0.ɵɵelementStart(10, "button", 191);
|
|
1825
|
-
i0.ɵɵlistener("click", function
|
|
1824
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_1_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeFullScreen()); });
|
|
1826
1825
|
i0.ɵɵelement(11, "i", 192);
|
|
1827
1826
|
i0.ɵɵtext(12, " Close ");
|
|
1828
1827
|
i0.ɵɵelementEnd()()();
|
|
@@ -1839,6 +1838,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_2_Template(rf, ctx) { if
|
|
|
1839
1838
|
let MJAIPromptRunFormComponentExtended = class MJAIPromptRunFormComponentExtended extends MJAIPromptRunFormComponent {
|
|
1840
1839
|
constructor() {
|
|
1841
1840
|
super(...arguments);
|
|
1841
|
+
this.toolbarConfig = CUSTOM_LAYOUT_TOOLBAR_CONFIG;
|
|
1842
1842
|
// Related entities
|
|
1843
1843
|
this.prompt = null;
|
|
1844
1844
|
this.model = null;
|
|
@@ -1885,6 +1885,8 @@ let MJAIPromptRunFormComponentExtended = class MJAIPromptRunFormComponentExtende
|
|
|
1885
1885
|
this.testHarnessWindowService = inject(TestHarnessWindowManagerService);
|
|
1886
1886
|
this.viewContainerRef = inject(ViewContainerRef);
|
|
1887
1887
|
}
|
|
1888
|
+
/** Custom-layout AI Prompt Run form looks best full-width on first open. */
|
|
1889
|
+
getDefaultFormWidthMode() { return 'full-width'; }
|
|
1888
1890
|
async ngOnInit() {
|
|
1889
1891
|
await super.ngOnInit();
|
|
1890
1892
|
if (this.record?.ID) {
|
|
@@ -2314,17 +2316,14 @@ let MJAIPromptRunFormComponentExtended = class MJAIPromptRunFormComponentExtende
|
|
|
2314
2316
|
// Don't auto-expand validation panel anymore - let user expand when needed
|
|
2315
2317
|
}
|
|
2316
2318
|
static { this.ɵfac = /*@__PURE__*/ (() => { let ɵMJAIPromptRunFormComponentExtended_BaseFactory; return function MJAIPromptRunFormComponentExtended_Factory(__ngFactoryType__) { return (ɵMJAIPromptRunFormComponentExtended_BaseFactory || (ɵMJAIPromptRunFormComponentExtended_BaseFactory = i0.ɵɵgetInheritedFactory(MJAIPromptRunFormComponentExtended)))(__ngFactoryType__ || MJAIPromptRunFormComponentExtended); }; })(); }
|
|
2317
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJAIPromptRunFormComponentExtended, selectors: [["mj-ai-prompt-run-form"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls:
|
|
2318
|
-
i0.ɵɵ
|
|
2319
|
-
i0.ɵɵconditionalCreate(1, MJAIPromptRunFormComponentExtended_Conditional_1_Template,
|
|
2320
|
-
i0.ɵɵconditionalCreate(2, MJAIPromptRunFormComponentExtended_Conditional_2_Template, 15, 4, "div", 3);
|
|
2321
|
-
i0.ɵɵelementEnd();
|
|
2319
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJAIPromptRunFormComponentExtended, selectors: [["mj-ai-prompt-run-form"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 2, consts: [["form", "ngForm"], [3, "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [1, "fullscreen-overlay"], [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-run-header"], [1, "header-content"], [1, "run-overview"], [1, "run-icon-wrapper"], [1, "run-info"], [1, "run-title"], [1, "run-id"], [1, "run-meta"], [1, "meta-card", "status-card"], [1, "c3-card-label"], [1, "meta-card-body"], [1, "status-indicator"], [1, "meta-card", "execution-card"], [1, "model-card-c3"], ["title", "View Original Run", 1, "original-run"], [1, "run-actions"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Re-run this prompt", 3, "click"], [1, "fa-solid", "fa-play-circle"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Refresh data", 3, "click"], [1, "fa-solid", "fa-refresh"], [1, "metrics-bar"], [1, "form-content", 2, "display", "flex", "flex-direction", "column", "flex", "1", "min-height", "0", "overflow-y", "auto"], [2, "margin-bottom", "8px", 3, "ExpandedChange", "Expanded"], ["mjAccordionTitle", ""], [1, "panel-content"], [1, "nested-panels"], [1, "empty-state"], [1, "error-message"], [1, "json-editor-container"], [1, "metrics-grid"], [1, "metric-card"], [1, "metric-header"], [1, "fa-solid", "fa-message"], [1, "metric-value", "large"], [1, "metric-rollup"], [1, "fa-solid", "fa-reply"], [1, "fa-solid", "fa-coins"], [1, "fa-solid", "fa-dollar-sign"], [1, "metric-currency"], [1, "additional-metrics"], [1, "metric-row"], [2, "margin-bottom", "8px", 3, "Expanded"], [1, "detail-fields-grid"], [1, "detail-field"], [1, "detail-value"], [1, "fa-solid", "fa-temperature-high"], [1, "fa-solid", "fa-percentage"], [1, "fa-solid", "fa-list-ol"], [1, "fa-solid", "fa-filter"], [1, "fa-solid", "fa-repeat"], [1, "fa-solid", "fa-plus-circle"], [1, "fa-solid", "fa-seedling"], [1, "fa-solid", "fa-stop-circle"], [1, "fa-solid", "fa-wand-magic-sparkles"], [1, "fa-solid", "fa-info-circle"], [1, "fa-solid", "fa-strategy"], [1, "fa-solid", "fa-ranking-star"], [1, "detail-field", "full-width"], [1, "model-selection-json"], [1, "error-details-json"], [1, "prompt-card-c3"], [1, "meta-card", "prompt-single-card"], ["title", "View Agent Prompt", 1, "c3-child-section", 3, "click"], [1, "fa-solid", "fa-comment", "prompt-icon"], [1, "c3-divider"], [1, "c3-line"], [1, "c3-divider-label"], ["title", "View System Prompt", 1, "c3-parent-section", 3, "click"], [1, "fa-solid", "fa-cog"], [1, "fa-solid", "fa-arrow-up-right-from-square", "c3-link-icon"], ["title", "View Prompt", 1, "meta-card-body", "clickable", 3, "click"], [1, "fa-solid", "fa-comment-dots", 2, "color", "var(--mj-brand-primary)"], ["title", "View Model", 1, "c3-card-body", 3, "click"], [1, "c3-model-name"], [1, "fa-solid", "fa-microchip"], [1, "c3-vendor-name"], [1, "fa-solid", "fa-level-up-alt"], [1, "original-link", 3, "click"], [1, "metric-item"], [1, "metric-content"], [1, "metric-label"], [1, "metric-value"], ["href", "javascript:void(0)", 1, "config-link", 3, "click"], [1, "fa-solid", "fa-clock"], [1, "fa-solid", "fa-tachometer-alt"], [1, "fa-solid", "fa-code"], [1, "fa-solid", "fa-calendar"], [1, "panel-title"], [1, "fa-solid", "fa-comment-dots"], [1, "panel-badge"], [1, "sub-expansion-panel", 2, "margin-bottom", "8px", 3, "Expanded"], [1, "sub-panel-content"], [1, "loading-state"], [3, "messages"], [1, "json-toolbar"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Copy JSON", 3, "click"], [1, "fa-solid", "fa-copy"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "View full screen", 3, "click"], [1, "fa-solid", "fa-expand"], ["name", "formattedMessages", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "sub-panel-title"], [1, "fa-solid", "fa-comments"], [1, "panel-count"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-comment-slash"], [1, "fa-solid", "fa-database"], ["name", "formattedData", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-square-check"], [1, "panel-badge", "error"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "error-content"], ["name", "formattedResult", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-inbox"], [1, "error-info"], [1, "finish-reason"], [1, "error-details"], [1, "error-hint"], [2, "margin", "0"], [2, "height", "200px", "width", "100%", 3, "ngModel", "disabled", "language", "lineWrapping"], [1, "fa-solid", "fa-chart-line"], [1, "fa-solid", "fa-hourglass-start"], [1, "fa-solid", "fa-brain"], [1, "fa-solid", "fa-flag-checkered"], [1, "metric-value", "link", 3, "click"], [1, "fa-solid", "fa-external-link"], [1, "validation-summary"], [1, "summary-header"], [1, "validation-status"], [1, "validation-metrics"], [1, "metric-card", "small"], [1, "validation-error"], [1, "common-error"], [1, "retry-timeline"], [1, "validation-attempts"], [1, "validation-json"], [1, "fa-solid", "fa-shield-check"], [1, "panel-badge", "success"], [1, "error-count"], [1, "timeline-info"], [1, "timeline-stat"], [1, "fa-solid", "fa-stopwatch"], [1, "attempts-list"], [1, "attempt-item", 3, "success", "failed"], [1, "attempt-item"], [1, "attempt-number"], [1, "attempt-details"], [1, "attempt-time"], [1, "output-length"], [1, "attempt-error"], [1, "json-viewer-container"], ["name", "formattedValidationSummary", 2, "height", "200px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], ["name", "formattedValidationAttempts", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "parent-run-section"], [1, "child-runs-section"], [1, "fa-solid", "fa-sitemap"], [1, "run-item", "parent", 3, "click"], [1, "run-item-icon"], [1, "run-item-content"], [1, "run-item-title"], [1, "run-item-type"], [1, "run-item-meta"], [1, "fa-solid", "fa-level-down-alt"], [1, "runs-list"], [1, "run-item", "child"], [1, "run-item", "child", 3, "click"], [1, "execution-order"], ["title", "View Agent", 1, "detail-value", "clickable", 3, "click"], [1, "fa-solid", "fa-robot"], [1, "fa-solid", "fa-check-circle"], ["name", "formattedModelSpecificResponseDetails", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-key"], ["title", "View Judge Prompt", 1, "detail-value", "clickable", 3, "click"], [1, "fa-solid", "fa-gavel"], [1, "fa-solid", "fa-star"], [1, "fa-solid", "fa-bolt"], [1, "detail-value", "error"], [1, "fa-solid", "fa-ban"], [1, "fa-solid", "fa-exclamation-circle"], ["name", "formattedModelSelection", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], ["name", "formattedErrorDetails", 2, "height", "200px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fullscreen-overlay", 3, "click"], [1, "fullscreen-container", 3, "click"], [1, "fullscreen-header"], [1, "fullscreen-title"], [1, "fullscreen-actions"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Copy content", 3, "click"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Close", 3, "click"], [1, "fa-solid", "fa-times"], [1, "fullscreen-body"], [2, "height", "100%", "width", "100%", 3, "value", "readonly", "language"]], template: function MJAIPromptRunFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
|
|
2320
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptRunFormComponentExtended_Conditional_0_Template, 200, 101, "mj-record-form-container", 1);
|
|
2321
|
+
i0.ɵɵconditionalCreate(1, MJAIPromptRunFormComponentExtended_Conditional_1_Template, 15, 4, "div", 2);
|
|
2322
2322
|
} if (rf & 2) {
|
|
2323
|
+
i0.ɵɵconditional(ctx.record ? 0 : -1);
|
|
2323
2324
|
i0.ɵɵadvance();
|
|
2324
|
-
i0.ɵɵconditional(ctx.
|
|
2325
|
-
i0.ɵɵadvance();
|
|
2326
|
-
i0.ɵɵconditional(ctx.FullScreenContent ? 2 : -1);
|
|
2327
|
-
} }, dependencies: [i1.ɵNgNoValidate, i1.NgControlStatus, i1.NgControlStatusGroup, i1.NgModel, i1.NgForm, i2.MJButtonDirective, i2.MJAccordionPanelComponent, i2.MJAccordionTitleDirective, i3.MjFormToolbarComponent, i4.CodeEditorComponent, i5.ChatMessageViewerComponent, i6.DatePipe], styles: ["\n\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n.record-form-container[_ngcontent-%COMP%] {\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 display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0 !important;\n overflow: hidden;\n}\n\n.form-content[_ngcontent-%COMP%] {\n padding: 16px;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n\n\n\n.error-info[_ngcontent-%COMP%] {\n margin-top: 16px;\n padding: 16px;\n background-color: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 20%, var(--mj-bg-surface));\n border-radius: 8px;\n}\n\n.finish-reason[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n color: var(--mj-status-error);\n font-size: 14px;\n}\n\n.error-details[_ngcontent-%COMP%] {\n margin-top: 12px;\n}\n\n.error-details[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: color-mix(in srgb, var(--mj-status-error) 80%, black);\n font-size: 14px;\n font-weight: 600;\n}\n\n.error-hint[_ngcontent-%COMP%] {\n margin: 0;\n color: color-mix(in srgb, var(--mj-status-error) 70%, black);\n font-size: 14px;\n font-style: italic;\n}\n\n\n\n.prompt-run-header[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n padding: 20px;\n margin-bottom: 0;\n}\n\n.header-content[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n margin-bottom: 16px;\n}\n\n.run-overview[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n flex: 1;\n}\n\n.run-icon-wrapper[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-icon-wrapper[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n}\n\n.run-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.run-title[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 1.5em;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.run-id[_ngcontent-%COMP%] {\n font-size: 0.8em;\n color: var(--mj-text-muted);\n font-weight: 400;\n font-family: 'Courier New', monospace;\n}\n\n.run-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: stretch;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n\n\n.meta-card[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n}\n\n.meta-card-body[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 7px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n}\n\n.meta-card-body.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: color 0.15s;\n}\n\n.meta-card-body.clickable[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n\n\n.status-indicator[_ngcontent-%COMP%] {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n\n\n.prompt-card-c3[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border-radius: 10px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n}\n\n.c3-child-section[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n font-size: 0.92em;\n font-weight: 600;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-child-section[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n.c3-child-section[_ngcontent-%COMP%] i.prompt-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 1rem;\n}\n\n.c3-divider[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 0 14px;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-line[_ngcontent-%COMP%] {\n flex: 1;\n height: 1px;\n background: var(--mj-border-default);\n}\n\n.c3-divider-label[_ngcontent-%COMP%] {\n font-size: 0.55rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.c3-parent-section[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 7px 14px 9px 14px;\n font-size: 0.76em;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.c3-parent-section[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-secondary);\n}\n\n.c3-parent-section[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n}\n\n.c3-link-icon[_ngcontent-%COMP%] {\n margin-left: auto;\n font-size: 0.6rem !important;\n opacity: 0.4;\n}\n\n.c3-parent-section[_ngcontent-%COMP%]:hover .c3-link-icon[_ngcontent-%COMP%] {\n opacity: 0.8;\n}\n\n\n\n.model-card-c3[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: border-color 0.15s;\n}\n\n.model-card-c3[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-border-strong);\n}\n\n.c3-card-label[_ngcontent-%COMP%] {\n font-size: 0.6rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n padding: 4px 10px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.c3-card-body[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.c3-model-name[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.c3-model-name[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 0.9rem;\n}\n\n.c3-vendor-name[_ngcontent-%COMP%] {\n font-size: 0.72em;\n color: var(--mj-text-muted);\n font-weight: 400;\n padding-left: 22px;\n}\n\n.original-run[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n font-size: 0.85em;\n}\n\n.original-link[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n text-decoration: none;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.original-link[_ngcontent-%COMP%]:hover {\n color: color-mix(in srgb, var(--mj-status-error) 85%, black);\n text-decoration: underline;\n}\n\n.run-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n\n\n.metrics-bar[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n flex-wrap: wrap;\n}\n\n.metric-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.metric-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n width: 24px;\n text-align: center;\n}\n\n.metric-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.metric-label[_ngcontent-%COMP%] {\n font-size: 0.75em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.metric-value[_ngcontent-%COMP%] {\n font-size: 1.1em;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.config-link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-link[_ngcontent-%COMP%]:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n text-decoration: underline;\n}\n\n\n\n.form-content[_ngcontent-%COMP%] {\n padding: 16px;\n}\n\n.panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n\n\n.sub-panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n font-size: 0.95em;\n}\n\n.sub-panel-content[_ngcontent-%COMP%] {\n padding: 0;\n}\n\n\n\n.nested-panels[_ngcontent-%COMP%] mj-accordion-panel[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n}\n\n\n\n.sub-panel-content[_ngcontent-%COMP%] mj-chat-message-viewer[_ngcontent-%COMP%] {\n display: block;\n min-height: 200px;\n max-height: 750px; \n\n height: auto;\n overflow: hidden;\n}\n\n\n\n.sub-expansion-panel[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n}\n\n\n\n.sub-expansion-panel[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.panel-badge[_ngcontent-%COMP%] {\n margin-left: auto;\n padding: 2px 8px;\n border-radius: 12px;\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.panel-badge.error[_ngcontent-%COMP%] {\n background: var(--mj-status-error);\n color: white;\n}\n\n.panel-count[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-weight: 400;\n font-size: 0.9em;\n}\n\n.panel-content[_ngcontent-%COMP%] {\n padding: 20px;\n max-height: none !important;\n overflow: visible !important;\n}\n\n\n\n.json-editor-container[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.json-toolbar[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: flex-end;\n}\n\n\n\n.error-message[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid var(--mj-status-error);\n border-radius: 6px;\n padding: 16px;\n display: flex;\n gap: 16px;\n margin-bottom: 16px;\n}\n\n.error-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.5em;\n color: var(--mj-status-error);\n flex-shrink: 0;\n}\n\n.error-content[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 1em;\n}\n\n.error-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-secondary);\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n}\n\n\n\n.loading-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.loading-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.6;\n color: var(--mj-brand-primary);\n}\n\n.loading-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n}\n\n\n\n.metrics-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 20px;\n margin-bottom: 24px;\n}\n\n.metric-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 20px;\n}\n\n.metric-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.metric-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n}\n\n.metric-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.9em;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.metric-value.large[_ngcontent-%COMP%] {\n font-size: 1.8em;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.metric-rollup[_ngcontent-%COMP%] {\n margin-top: 8px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.metric-currency[_ngcontent-%COMP%] {\n margin-top: 4px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n}\n\n\n\n.additional-metrics[_ngcontent-%COMP%] {\n padding-top: 16px;\n}\n\n.metric-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.metric-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-label[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-muted);\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value[_ngcontent-%COMP%] {\n font-weight: 400;\n color: var(--mj-text-primary);\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value.link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color 0.2s;\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value.link[_ngcontent-%COMP%]:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n}\n\n\n\n.parent-run-section[_ngcontent-%COMP%], \n.child-runs-section[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.parent-run-section[_ngcontent-%COMP%]:last-child, \n.child-runs-section[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n}\n\n.parent-run-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%], \n.child-runs-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 0.95em;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.runs-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.run-item[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.run-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n}\n\n.run-item.parent[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n}\n\n.run-item.parent[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface));\n}\n\n.run-item-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-item-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.run-item-title[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.execution-order[_ngcontent-%COMP%] {\n background: var(--mj-text-muted);\n color: white;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.75em;\n font-weight: 600;\n}\n\n.run-item-type[_ngcontent-%COMP%] {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 400;\n}\n\n.run-item-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.run-item-meta[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.status-indicator[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n\n.run-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%]:last-child {\n color: var(--mj-text-muted);\n font-size: 0.85em;\n}\n\n\n\n.detail-fields-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 24px;\n width: 100%;\n min-height: auto;\n overflow: visible;\n}\n\n.detail-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 1em;\n color: var(--mj-text-primary);\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n transition: all 0.2s;\n}\n\n.detail-value[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n color: var(--mj-text-muted);\n font-size: 1.1em;\n width: 20px;\n text-align: center;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.detail-value.clickable[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:last-child {\n margin-left: auto;\n font-size: 0.85em;\n opacity: 0.6;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%]:last-child {\n opacity: 1;\n}\n\n.detail-value.null-value[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-style: italic;\n}\n\n.detail-value.null-value[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n opacity: 0.5;\n}\n\n\n\nmj-accordion-panel[_ngcontent-%COMP%] {\n display: block;\n}\n\n\n\n.validation-summary[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.summary-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.summary-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n color: var(--mj-text-primary);\n}\n\n.validation-status[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 16px;\n border-radius: 20px;\n font-weight: 500;\n font-size: 0.9em;\n}\n\n.validation-status.success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.validation-status.failed[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.validation-metrics[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.metric-card.small[_ngcontent-%COMP%] {\n padding: 16px;\n text-align: center;\n}\n\n.metric-card.small[_ngcontent-%COMP%] .metric-label[_ngcontent-%COMP%] {\n font-size: 0.8em;\n margin-bottom: 8px;\n font-weight: 600;\n}\n\n.metric-card.small[_ngcontent-%COMP%] .metric-value[_ngcontent-%COMP%] {\n font-size: 1.4em;\n font-weight: 700;\n}\n\n.validation-error[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n border-radius: 8px;\n padding: 16px;\n margin-bottom: 16px;\n}\n\n.validation-error[_ngcontent-%COMP%] h5[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 0.95em;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.validation-error[_ngcontent-%COMP%] p[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-secondary);\n font-size: 0.9em;\n}\n\n.error-count[_ngcontent-%COMP%] {\n display: inline-block;\n margin-top: 8px;\n padding: 2px 8px;\n background: var(--mj-status-error);\n color: white;\n border-radius: 12px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n\n\n.retry-timeline[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.retry-timeline[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.timeline-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n flex-wrap: wrap;\n}\n\n.timeline-stat[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-text-muted);\n font-size: 0.9em;\n}\n\n.timeline-stat[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.1em;\n}\n\n\n\n.validation-attempts[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.validation-attempts[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.attempts-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.attempt-item[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 16px;\n}\n\n.attempt-item.success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-success) 18%, var(--mj-bg-surface));\n}\n\n.attempt-item.failed[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n}\n\n.attempt-number[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.attempt-item.success[_ngcontent-%COMP%] .attempt-number[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.attempt-item.failed[_ngcontent-%COMP%] .attempt-number[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.attempt-details[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n font-size: 0.85em;\n}\n\n.attempt-time[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.attempt-error[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n flex: 1 0 100%;\n}\n\n.output-length[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n\n\n.validation-json[_ngcontent-%COMP%] {\n margin-top: 24px;\n}\n\n.validation-json[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.json-viewer-container[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n\n\n.panel-badge.success[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n color: white;\n}\n\n\n\n.fullscreen-overlay[_ngcontent-%COMP%] {\n position: fixed;\n inset: 0;\n z-index: 10000;\n background: var(--mj-bg-overlay, rgba(0, 0, 0, 0.6));\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1.5rem;\n}\n\n.fullscreen-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n max-width: 95vw;\n max-height: 95vh;\n background: var(--mj-bg-surface);\n border-radius: 10px;\n border: 1px solid var(--mj-border-default);\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n overflow: hidden;\n}\n\n.fullscreen-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.fullscreen-title[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.fullscreen-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n}\n\n.fullscreen-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.fullscreen-body[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.fullscreen-body[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n display: block;\n height: 100%;\n}"], changeDetection: 0 }); }
|
|
2325
|
+
i0.ɵɵconditional(ctx.FullScreenContent ? 1 : -1);
|
|
2326
|
+
} }, dependencies: [i1.ɵNgNoValidate, i1.NgControlStatus, i1.NgControlStatusGroup, i1.NgModel, i1.NgForm, i2.MJButtonDirective, i2.MJAccordionPanelComponent, i2.MJAccordionTitleDirective, i3.MjRecordFormContainerComponent, i4.CodeEditorComponent, i5.ChatMessageViewerComponent, i6.DatePipe], styles: ["\n\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n.record-form-container[_ngcontent-%COMP%] {\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 display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0 !important;\n overflow: hidden;\n}\n\n.form-content[_ngcontent-%COMP%] {\n padding: 16px;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n\n\n\n.error-info[_ngcontent-%COMP%] {\n margin-top: 16px;\n padding: 16px;\n background-color: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 20%, var(--mj-bg-surface));\n border-radius: 8px;\n}\n\n.finish-reason[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n color: var(--mj-status-error);\n font-size: 14px;\n}\n\n.error-details[_ngcontent-%COMP%] {\n margin-top: 12px;\n}\n\n.error-details[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: color-mix(in srgb, var(--mj-status-error) 80%, black);\n font-size: 14px;\n font-weight: 600;\n}\n\n.error-hint[_ngcontent-%COMP%] {\n margin: 0;\n color: color-mix(in srgb, var(--mj-status-error) 70%, black);\n font-size: 14px;\n font-style: italic;\n}\n\n\n\n.prompt-run-header[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n padding: 20px;\n margin-bottom: 0;\n}\n\n.header-content[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n margin-bottom: 16px;\n}\n\n.run-overview[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n flex: 1;\n}\n\n.run-icon-wrapper[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-icon-wrapper[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n}\n\n.run-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.run-title[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 1.5em;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.run-id[_ngcontent-%COMP%] {\n font-size: 0.8em;\n color: var(--mj-text-muted);\n font-weight: 400;\n font-family: 'Courier New', monospace;\n}\n\n.run-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: stretch;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n\n\n.meta-card[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n}\n\n.meta-card-body[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 7px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n}\n\n.meta-card-body.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: color 0.15s;\n}\n\n.meta-card-body.clickable[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n\n\n.status-indicator[_ngcontent-%COMP%] {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n\n\n.prompt-card-c3[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border-radius: 10px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n}\n\n.c3-child-section[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n font-size: 0.92em;\n font-weight: 600;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-child-section[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n.c3-child-section[_ngcontent-%COMP%] i.prompt-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 1rem;\n}\n\n.c3-divider[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 0 14px;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-line[_ngcontent-%COMP%] {\n flex: 1;\n height: 1px;\n background: var(--mj-border-default);\n}\n\n.c3-divider-label[_ngcontent-%COMP%] {\n font-size: 0.55rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.c3-parent-section[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 7px 14px 9px 14px;\n font-size: 0.76em;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.c3-parent-section[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-secondary);\n}\n\n.c3-parent-section[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n}\n\n.c3-link-icon[_ngcontent-%COMP%] {\n margin-left: auto;\n font-size: 0.6rem !important;\n opacity: 0.4;\n}\n\n.c3-parent-section[_ngcontent-%COMP%]:hover .c3-link-icon[_ngcontent-%COMP%] {\n opacity: 0.8;\n}\n\n\n\n.model-card-c3[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: border-color 0.15s;\n}\n\n.model-card-c3[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-border-strong);\n}\n\n.c3-card-label[_ngcontent-%COMP%] {\n font-size: 0.6rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n padding: 4px 10px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.c3-card-body[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.c3-model-name[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.c3-model-name[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 0.9rem;\n}\n\n.c3-vendor-name[_ngcontent-%COMP%] {\n font-size: 0.72em;\n color: var(--mj-text-muted);\n font-weight: 400;\n padding-left: 22px;\n}\n\n.original-run[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n font-size: 0.85em;\n}\n\n.original-link[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n text-decoration: none;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.original-link[_ngcontent-%COMP%]:hover {\n color: color-mix(in srgb, var(--mj-status-error) 85%, black);\n text-decoration: underline;\n}\n\n.run-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n\n\n.metrics-bar[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n flex-wrap: wrap;\n}\n\n.metric-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.metric-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n width: 24px;\n text-align: center;\n}\n\n.metric-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.metric-label[_ngcontent-%COMP%] {\n font-size: 0.75em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.metric-value[_ngcontent-%COMP%] {\n font-size: 1.1em;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.config-link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-link[_ngcontent-%COMP%]:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n text-decoration: underline;\n}\n\n\n\n.form-content[_ngcontent-%COMP%] {\n padding: 16px;\n}\n\n.panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n\n\n.sub-panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n font-size: 0.95em;\n}\n\n.sub-panel-content[_ngcontent-%COMP%] {\n padding: 0;\n}\n\n\n\n.nested-panels[_ngcontent-%COMP%] mj-accordion-panel[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n}\n\n\n\n.sub-panel-content[_ngcontent-%COMP%] mj-chat-message-viewer[_ngcontent-%COMP%] {\n display: block;\n min-height: 200px;\n max-height: 750px; \n\n height: auto;\n overflow: hidden;\n}\n\n\n\n.sub-expansion-panel[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n}\n\n\n\n.sub-expansion-panel[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.panel-badge[_ngcontent-%COMP%] {\n margin-left: auto;\n padding: 2px 8px;\n border-radius: 12px;\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.panel-badge.error[_ngcontent-%COMP%] {\n background: var(--mj-status-error);\n color: white;\n}\n\n.panel-count[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-weight: 400;\n font-size: 0.9em;\n}\n\n.panel-content[_ngcontent-%COMP%] {\n padding: 20px;\n max-height: none !important;\n overflow: visible !important;\n}\n\n\n\n.json-editor-container[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.json-toolbar[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: flex-end;\n}\n\n\n\n.error-message[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid var(--mj-status-error);\n border-radius: 6px;\n padding: 16px;\n display: flex;\n gap: 16px;\n margin-bottom: 16px;\n}\n\n.error-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.5em;\n color: var(--mj-status-error);\n flex-shrink: 0;\n}\n\n.error-content[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 1em;\n}\n\n.error-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-secondary);\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n}\n\n\n\n.loading-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.loading-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.6;\n color: var(--mj-brand-primary);\n}\n\n.loading-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n}\n\n\n\n.metrics-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 20px;\n margin-bottom: 24px;\n}\n\n.metric-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 20px;\n}\n\n.metric-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.metric-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n}\n\n.metric-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.9em;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.metric-value.large[_ngcontent-%COMP%] {\n font-size: 1.8em;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.metric-rollup[_ngcontent-%COMP%] {\n margin-top: 8px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.metric-currency[_ngcontent-%COMP%] {\n margin-top: 4px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n}\n\n\n\n.additional-metrics[_ngcontent-%COMP%] {\n padding-top: 16px;\n}\n\n.metric-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.metric-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-label[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-muted);\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value[_ngcontent-%COMP%] {\n font-weight: 400;\n color: var(--mj-text-primary);\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value.link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color 0.2s;\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value.link[_ngcontent-%COMP%]:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n}\n\n\n\n.parent-run-section[_ngcontent-%COMP%], \n.child-runs-section[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.parent-run-section[_ngcontent-%COMP%]:last-child, \n.child-runs-section[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n}\n\n.parent-run-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%], \n.child-runs-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 0.95em;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.runs-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.run-item[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.run-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n}\n\n.run-item.parent[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n}\n\n.run-item.parent[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface));\n}\n\n.run-item-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-item-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.run-item-title[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.execution-order[_ngcontent-%COMP%] {\n background: var(--mj-text-muted);\n color: white;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.75em;\n font-weight: 600;\n}\n\n.run-item-type[_ngcontent-%COMP%] {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 400;\n}\n\n.run-item-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.run-item-meta[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.status-indicator[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n\n.run-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%]:last-child {\n color: var(--mj-text-muted);\n font-size: 0.85em;\n}\n\n\n\n.detail-fields-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 24px;\n width: 100%;\n min-height: auto;\n overflow: visible;\n}\n\n.detail-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 1em;\n color: var(--mj-text-primary);\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n transition: all 0.2s;\n}\n\n.detail-value[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n color: var(--mj-text-muted);\n font-size: 1.1em;\n width: 20px;\n text-align: center;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.detail-value.clickable[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:last-child {\n margin-left: auto;\n font-size: 0.85em;\n opacity: 0.6;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%]:last-child {\n opacity: 1;\n}\n\n.detail-value.null-value[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-style: italic;\n}\n\n.detail-value.null-value[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n opacity: 0.5;\n}\n\n\n\nmj-accordion-panel[_ngcontent-%COMP%] {\n display: block;\n}\n\n\n\n.validation-summary[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.summary-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.summary-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n color: var(--mj-text-primary);\n}\n\n.validation-status[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 16px;\n border-radius: 20px;\n font-weight: 500;\n font-size: 0.9em;\n}\n\n.validation-status.success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.validation-status.failed[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.validation-metrics[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.metric-card.small[_ngcontent-%COMP%] {\n padding: 16px;\n text-align: center;\n}\n\n.metric-card.small[_ngcontent-%COMP%] .metric-label[_ngcontent-%COMP%] {\n font-size: 0.8em;\n margin-bottom: 8px;\n font-weight: 600;\n}\n\n.metric-card.small[_ngcontent-%COMP%] .metric-value[_ngcontent-%COMP%] {\n font-size: 1.4em;\n font-weight: 700;\n}\n\n.validation-error[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n border-radius: 8px;\n padding: 16px;\n margin-bottom: 16px;\n}\n\n.validation-error[_ngcontent-%COMP%] h5[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 0.95em;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.validation-error[_ngcontent-%COMP%] p[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-secondary);\n font-size: 0.9em;\n}\n\n.error-count[_ngcontent-%COMP%] {\n display: inline-block;\n margin-top: 8px;\n padding: 2px 8px;\n background: var(--mj-status-error);\n color: white;\n border-radius: 12px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n\n\n.retry-timeline[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.retry-timeline[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.timeline-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n flex-wrap: wrap;\n}\n\n.timeline-stat[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-text-muted);\n font-size: 0.9em;\n}\n\n.timeline-stat[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.1em;\n}\n\n\n\n.validation-attempts[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.validation-attempts[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.attempts-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.attempt-item[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 16px;\n}\n\n.attempt-item.success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-success) 18%, var(--mj-bg-surface));\n}\n\n.attempt-item.failed[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n}\n\n.attempt-number[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.attempt-item.success[_ngcontent-%COMP%] .attempt-number[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.attempt-item.failed[_ngcontent-%COMP%] .attempt-number[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.attempt-details[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n font-size: 0.85em;\n}\n\n.attempt-time[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.attempt-error[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n flex: 1 0 100%;\n}\n\n.output-length[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n\n\n.validation-json[_ngcontent-%COMP%] {\n margin-top: 24px;\n}\n\n.validation-json[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.json-viewer-container[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n\n\n.panel-badge.success[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n color: white;\n}\n\n\n\n.fullscreen-overlay[_ngcontent-%COMP%] {\n position: fixed;\n inset: 0;\n z-index: 10000;\n background: var(--mj-bg-overlay, rgba(0, 0, 0, 0.6));\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1.5rem;\n}\n\n.fullscreen-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n max-width: 95vw;\n max-height: 95vh;\n background: var(--mj-bg-surface);\n border-radius: 10px;\n border: 1px solid var(--mj-border-default);\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n overflow: hidden;\n}\n\n.fullscreen-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.fullscreen-title[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.fullscreen-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n}\n\n.fullscreen-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.fullscreen-body[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.fullscreen-body[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n display: block;\n height: 100%;\n}"], changeDetection: 0 }); }
|
|
2328
2327
|
};
|
|
2329
2328
|
MJAIPromptRunFormComponentExtended = __decorate([
|
|
2330
2329
|
RegisterClass(BaseFormComponent, 'MJ: AI Prompt Runs')
|
|
@@ -2332,7 +2331,7 @@ MJAIPromptRunFormComponentExtended = __decorate([
|
|
|
2332
2331
|
export { MJAIPromptRunFormComponentExtended };
|
|
2333
2332
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJAIPromptRunFormComponentExtended, [{
|
|
2334
2333
|
type: Component,
|
|
2335
|
-
args: [{ standalone: false, selector: 'mj-ai-prompt-run-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"record-form-container\" style=\"height: 100%; display: flex; flex-direction: column;\">\n @if (record) {\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n <mj-form-toolbar [Form]=\"this\"></mj-form-toolbar>\n\n <!-- Header Section -->\n <div class=\"prompt-run-header\">\n <div class=\"header-content\">\n <div class=\"run-overview\">\n <div class=\"run-icon-wrapper\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\" [style.color]=\"getStatusColor()\"></i>\n </div>\n <div class=\"run-info\">\n <h1 class=\"run-title\">\n Prompt Run\n @if (record.ID) {\n <span class=\"run-id\">#{{ record.ID.substring(0, 8) }}</span>\n }\n </h1>\n <div class=\"run-meta\">\n <!-- Status Card -->\n <div class=\"meta-card status-card\">\n <div class=\"c3-card-label\">Status</div>\n <div class=\"meta-card-body\">\n <span class=\"status-indicator\" [style.background-color]=\"getStatusColor()\"></span>\n <i [class]=\"'fa-solid ' + getStatusIcon()\" [style.color]=\"getStatusColor()\"></i>\n {{ getStatusText() }}\n </div>\n </div>\n\n <!-- Execution Card -->\n @if (record.RunType) {\n <div class=\"meta-card execution-card\">\n <div class=\"c3-card-label\">Execution</div>\n <div class=\"meta-card-body\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(record.RunType)\" [style.color]=\"getRunTypeColor(record.RunType)\"></i>\n {{ record.RunType }}\n </div>\n </div>\n }\n\n <!-- Prompt Card -->\n @if (prompt) {\n @if (record.ChildPromptID) {\n <!-- C3 Stacked Connector: child prompt prominent, parent nested -->\n <div class=\"prompt-card-c3\">\n <div class=\"c3-card-label\">Prompt</div>\n <div class=\"c3-child-section\" (click)=\"navigateToEntity('MJ: AI Prompts', record.ChildPromptID)\" title=\"View Agent Prompt\">\n <i class=\"fa-solid fa-comment prompt-icon\"></i>\n {{ record.ChildPrompt }}\n </div>\n <div class=\"c3-divider\">\n <span class=\"c3-line\"></span>\n <span class=\"c3-divider-label\">wrapped by</span>\n <span class=\"c3-line\"></span>\n </div>\n <div class=\"c3-parent-section\" (click)=\"navigateToEntity('MJ: AI Prompts', prompt.ID)\" title=\"View System Prompt\">\n <i class=\"fa-solid fa-cog\"></i>\n {{ prompt.Name }}\n <i class=\"fa-solid fa-arrow-up-right-from-square c3-link-icon\"></i>\n </div>\n </div>\n } @else {\n <!-- Single prompt (no child) \u2014 same card style -->\n <div class=\"meta-card prompt-single-card\">\n <div class=\"c3-card-label\">Prompt</div>\n <div class=\"meta-card-body clickable\" (click)=\"navigateToEntity('MJ: AI Prompts', prompt.ID)\" title=\"View Prompt\">\n <i class=\"fa-solid fa-comment-dots\" style=\"color: var(--mj-brand-primary);\"></i>\n {{ prompt.Name }}\n </div>\n </div>\n }\n }\n\n <!-- Model Card -->\n @if (model) {\n <div class=\"model-card-c3\">\n <div class=\"c3-card-label\">Model</div>\n <div class=\"c3-card-body\" (click)=\"navigateToEntity('MJ: AI Models', model.ID)\" title=\"View Model\">\n <span class=\"c3-model-name\"><i class=\"fa-solid fa-microchip\"></i> {{ model.Name }}</span>\n @if (record.Vendor) {\n <span class=\"c3-vendor-name\">{{ record.Vendor }}</span>\n }\n </div>\n </div>\n }\n @if (record.RerunFromPromptRunID) {\n <span class=\"original-run\" title=\"View Original Run\">\n <i class=\"fa-solid fa-level-up-alt\"></i>\n <a (click)=\"navigateToOriginalRun()\" class=\"original-link\">Original Run</a>\n </span>\n }\n </div>\n </div>\n </div>\n \n <!-- Action Buttons -->\n <div class=\"run-actions\">\n <button mjButton variant=\"outline\" size=\"sm\" (click)=\"reRunPrompt()\" title=\"Re-run this prompt\">\n <i class=\"fa-solid fa-play-circle\"></i>\n Re-Run\n </button>\n <button mjButton variant=\"outline\" size=\"sm\" (click)=\"refreshData()\" title=\"Refresh data\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n \n <!-- Key Metrics Bar -->\n @if (record.ConfigurationID) {\n <!-- Configuration Bar -->\n <div class=\"metrics-bar\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-cog\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Configuration</div>\n <div class=\"metric-value\">\n <a href=\"javascript:void(0)\" class=\"config-link\" (click)=\"navigateToEntity('MJ: AI Configurations', record.ConfigurationID)\">\n {{ record.Configuration || 'Unknown' }}\n </a>\n </div>\n </div>\n </div>\n @if (record.Temperature !== null && record.Temperature !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-temperature-high\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Temperature</div>\n <div class=\"metric-value\">{{ record.Temperature }}</div>\n </div>\n </div>\n }\n @if (record.TopP !== null && record.TopP !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-percentage\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Top P</div>\n <div class=\"metric-value\">{{ record.TopP }}</div>\n </div>\n </div>\n }\n @if (record.TopK !== null && record.TopK !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-list-ol\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Top K</div>\n <div class=\"metric-value\">{{ record.TopK }}</div>\n </div>\n </div>\n }\n @if (record.EffortLevel !== null && record.EffortLevel !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-tachometer-alt\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Effort Level</div>\n <div class=\"metric-value\">{{ record.EffortLevel }}</div>\n </div>\n </div>\n }\n @if (record.ResponseFormat) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-code\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Response Format</div>\n <div class=\"metric-value\">{{ record.ResponseFormat }}</div>\n </div>\n </div>\n }\n </div>\n \n <!-- Execution Metrics Bar (always show when configuration exists) -->\n <div class=\"metrics-bar\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Duration</div>\n <div class=\"metric-value\">{{ formatDuration(record.ExecutionTimeMS) }}</div>\n </div>\n </div>\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-coins\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Total Tokens</div>\n <div class=\"metric-value\">{{ formatTokens(record.TokensUsed) }}</div>\n </div>\n </div>\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cost</div>\n <div class=\"metric-value\">{{ formatCost(record.TotalCost || record.Cost) }}</div>\n </div>\n </div>\n @if (record.RunAt) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-calendar\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Started</div>\n <div class=\"metric-value\">{{ record.RunAt | date:'short' }}</div>\n </div>\n </div>\n }\n </div>\n } @else {\n <!-- Execution Metrics Bar (original behavior when no configuration) -->\n <div class=\"metrics-bar\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Duration</div>\n <div class=\"metric-value\">{{ formatDuration(record.ExecutionTimeMS) }}</div>\n </div>\n </div>\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-coins\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Total Tokens</div>\n <div class=\"metric-value\">{{ formatTokens(record.TokensUsed) }}</div>\n </div>\n </div>\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cost</div>\n <div class=\"metric-value\">{{ formatCost(record.TotalCost || record.Cost) }}</div>\n </div>\n </div>\n @if (record.RunAt) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-calendar\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Started</div>\n <div class=\"metric-value\">{{ record.RunAt | date:'short' }}</div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Main Content with Expansion Panels -->\n <div class=\"form-content\" style=\"display: flex; flex-direction: column; flex: 1; min-height: 0; overflow-y: auto;\">\n\n <!-- Input Panel with nested sub-panels -->\n <mj-accordion-panel [Expanded]=\"inputExpanded\" (ExpandedChange)=\"onInputPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n Input\n @if (record.Messages && record.Messages.trim() !== '') {\n <span class=\"panel-badge\">JSON</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n @if (record.Messages && record.Messages.trim() !== '') {\n <!-- Nested expansion panels for sub-sections -->\n <div class=\"nested-panels\">\n <!-- Messages Sub-Panel -->\n <mj-accordion-panel\n [Expanded]=\"messagesExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-comments\"></i>\n Messages\n @if (chatMessages.length > 0) {\n <span class=\"panel-count\">({{ chatMessages.length }})</span>\n }\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n @if (isParsingMessages || isLoadingRelatedData) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <p>Loading messages...</p>\n </div>\n } @else if (chatMessages.length > 0) {\n <mj-chat-message-viewer \n [messages]=\"chatMessages\">\n </mj-chat-message-viewer>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-slash\"></i>\n <p>No chat messages found</p>\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Data Sub-Panel -->\n <mj-accordion-panel\n [Expanded]=\"dataExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-database\"></i>\n Data\n @if (inputData) {\n <span class=\"panel-badge\">Object</span>\n }\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n @if (inputData && formattedData) {\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedData, 'Data')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedData, 'json', 'Data')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedData\"\n name=\"formattedData\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-database\"></i>\n <p>No data object found</p>\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Raw Sub-Panel -->\n <mj-accordion-panel\n [Expanded]=\"rawExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-code\"></i>\n Raw\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedMessages, 'Messages')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedMessages, 'json', 'Raw Messages')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedMessages\"\n name=\"formattedMessages\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </mj-accordion-panel>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-slash\"></i>\n <p>No input messages recorded</p>\n </div>\n }\n </div>\n </mj-accordion-panel>\n \n <!-- Result Panel -->\n <mj-accordion-panel [Expanded]=\"resultExpanded\" (ExpandedChange)=\"onResultPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-square-check\"></i>\n Result\n @if (record.Result && record.Result.trim() !== '') {\n <span class=\"panel-badge\">JSON</span>\n }\n @if (record.ErrorMessage) {\n <span class=\"panel-badge error\">Error</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n @if (record.ErrorMessage) {\n <div class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <div class=\"error-content\">\n <h4>Error Message</h4>\n <p>{{ record.ErrorMessage }}</p>\n </div>\n </div>\n }\n \n @if (record.Result && record.Result.trim() !== '') {\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedResult, 'Result')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedResult, 'json', 'Result')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedResult\"\n name=\"formattedResult\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n } @else if (!record.ErrorMessage) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No result data recorded</p>\n @if (record.Status === 'Failed' || record.Success === false) {\n <div class=\"error-info\">\n @if (record.Status) {\n <p class=\"finish-reason\">\n <strong>Status:</strong> {{ record.Status }}\n </p>\n }\n @if (formattedErrorDetails) {\n <div class=\"error-details\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Error Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedErrorDetails, 'json', 'Error Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor\n [ngModel]=\"formattedErrorDetails\"\n [disabled]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n }\n @if (!formattedErrorDetails) {\n <p class=\"error-hint\">\n The prompt execution failed but no additional error information is available.\n </p>\n }\n </div>\n }\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Token Usage & Metrics Panel -->\n <mj-accordion-panel [Expanded]=\"metricsExpanded\" (ExpandedChange)=\"onMetricsPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-chart-line\"></i>\n Token Usage & Metrics\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"metrics-grid\">\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-message\"></i>\n <h4>Prompt Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensPrompt) }}</div>\n @if (record.TokensPromptRollup && record.TokensPromptRollup !== record.TokensPrompt) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensPromptRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-reply\"></i>\n <h4>Completion Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensCompletion) }}</div>\n @if (record.TokensCompletionRollup && record.TokensCompletionRollup !== record.TokensCompletion) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensCompletionRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-coins\"></i>\n <h4>Total Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensUsed) }}</div>\n @if (record.TokensUsedRollup && record.TokensUsedRollup !== record.TokensUsed) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensUsedRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <h4>Cost</h4>\n </div>\n <div class=\"metric-value large\">{{ formatCost(record.Cost) }}</div>\n @if (record.TotalCost && record.TotalCost !== record.Cost) {\n <div class=\"metric-rollup\">\n <span>Total: {{ formatCost(record.TotalCost) }}</span>\n </div>\n }\n @if (record.CostCurrency) {\n <div class=\"metric-currency\">{{ record.CostCurrency }}</div>\n }\n </div>\n \n <!-- Timing Metrics -->\n @if (record.QueueTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-hourglass-start\"></i>\n <h4>Queue Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.QueueTime) }}</div>\n </div>\n }\n \n @if (record.PromptTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-brain\"></i>\n <h4>Prompt Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.PromptTime) }}</div>\n </div>\n }\n \n @if (record.CompletionTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-flag-checkered\"></i>\n <h4>Completion Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.CompletionTime) }}</div>\n </div>\n }\n </div>\n \n <!-- Additional Metrics -->\n <div class=\"additional-metrics\">\n @if (record.ExecutionOrder !== null) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Execution Order:</span>\n <span class=\"metric-value\">{{ record.ExecutionOrder }}</span>\n </div>\n }\n @if (record.AgentID) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Agent:</span>\n <span class=\"metric-value link\" (click)=\"navigateToEntity('MJ: AI Agents', record.AgentID)\">\n {{ record.Agent }}\n <i class=\"fa-solid fa-external-link\"></i>\n </span>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n\n <!-- Validation & Retry Panel -->\n @if (record && ((record.ValidationAttemptCount && record.ValidationAttemptCount > 0) || record.ValidationBehavior)) {\n <mj-accordion-panel [Expanded]=\"validationExpanded\" (ExpandedChange)=\"onValidationPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-shield-check\"></i>\n Validation & Retries\n @if (record && record.ValidationAttemptCount && record.ValidationAttemptCount > 1) {\n <span class=\"panel-count\">({{ record.ValidationAttemptCount }} attempts)</span>\n }\n @if (record.FinalValidationPassed) {\n <span class=\"panel-badge success\">Passed</span>\n } @else if (record.FinalValidationPassed === false) {\n <span class=\"panel-badge error\">Failed</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <!-- Validation Summary -->\n <div class=\"validation-summary\">\n <div class=\"summary-header\">\n <h4>Validation Summary</h4>\n <div class=\"validation-status\" [class.success]=\"record.FinalValidationPassed\" [class.failed]=\"!record.FinalValidationPassed\">\n <i [class]=\"record.FinalValidationPassed ? 'fa-solid fa-check-circle' : 'fa-solid fa-times-circle'\"></i>\n {{ record.FinalValidationPassed ? 'Validation Passed' : 'Validation Failed' }}\n </div>\n </div>\n \n <div class=\"validation-metrics\">\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Total Attempts</div>\n <div class=\"metric-value\">{{ record.ValidationAttemptCount || 0 }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Successful</div>\n <div class=\"metric-value\">{{ record.SuccessfulValidationCount || 0 }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Behavior</div>\n <div class=\"metric-value\">{{ record.ValidationBehavior || 'Not set' }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Retry Strategy</div>\n <div class=\"metric-value\">{{ record.RetryStrategy || 'Not set' }}</div>\n </div>\n </div>\n \n @if (record.FinalValidationError) {\n <div class=\"validation-error\">\n <h5><i class=\"fa-solid fa-exclamation-triangle\"></i> Final Validation Error</h5>\n <p>{{ record.FinalValidationError }}</p>\n @if (record && record.ValidationErrorCount && record.ValidationErrorCount > 0) {\n <span class=\"error-count\">{{ record.ValidationErrorCount }} validation errors</span>\n }\n </div>\n }\n \n @if (record.CommonValidationError && record.CommonValidationError !== record.FinalValidationError) {\n <div class=\"common-error\">\n <h5><i class=\"fa-solid fa-repeat\"></i> Most Common Error</h5>\n <p>{{ record.CommonValidationError }}</p>\n </div>\n }\n </div>\n \n <!-- Retry Timeline -->\n @if (record && record.ValidationAttemptCount && record.ValidationAttemptCount > 1) {\n <div class=\"retry-timeline\">\n <h4>Retry Timeline</h4>\n <div class=\"timeline-info\">\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-clock\"></i>\n <span>First Attempt: {{ record.FirstAttemptAt | date:'short' }}</span>\n </div>\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-flag-checkered\"></i>\n <span>Last Attempt: {{ record.LastAttemptAt | date:'short' }}</span>\n </div>\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-stopwatch\"></i>\n <span>Total Retry Duration: {{ formatDuration(record.TotalRetryDurationMS) }}</span>\n </div>\n </div>\n </div>\n }\n \n <!-- Validation Attempts Details -->\n @if (validationAttempts && validationAttempts.length > 0) {\n <div class=\"validation-attempts\">\n <h4>Validation Attempts</h4>\n <div class=\"attempts-list\">\n @for (attempt of validationAttempts; track attempt.attemptNumber) {\n <div class=\"attempt-item\" [class.success]=\"attempt.success\" [class.failed]=\"!attempt.success\">\n <div class=\"attempt-number\">\n <i [class]=\"attempt.success ? 'fa-solid fa-check' : 'fa-solid fa-times'\"></i>\n Attempt #{{ attempt.attemptNumber }}\n </div>\n <div class=\"attempt-details\">\n <span class=\"attempt-time\">{{ attempt.timestamp }}</span>\n @if (!attempt.success) {\n <span class=\"attempt-error\">{{ attempt.errorMessage || 'Unknown error' }}</span>\n @if (attempt.validationErrorCount > 0) {\n <span class=\"error-count\">({{ attempt.validationErrorCount }} errors)</span>\n }\n }\n @if (attempt.outputLength) {\n <span class=\"output-length\">Output: {{ attempt.outputLength }} chars</span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n \n <!-- Validation Summary JSON -->\n @if (validationSummary) {\n <div class=\"validation-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Validation Summary Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedValidationSummary, 'json', 'Validation Summary')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <div class=\"json-viewer-container\">\n <mj-code-editor\n [(ngModel)]=\"formattedValidationSummary\"\n name=\"formattedValidationSummary\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n \n <!-- Validation Attempts JSON -->\n @if (record.ValidationAttempts) {\n <div class=\"validation-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Validation Attempts (Raw JSON)</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedValidationAttempts, 'json', 'Validation Attempts')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <div class=\"json-viewer-container\">\n <mj-code-editor\n [(ngModel)]=\"formattedValidationAttempts\"\n name=\"formattedValidationAttempts\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Hierarchy Panel (for parent/child relationships) -->\n @if (record.ParentID || childRuns.length > 0) {\n <mj-accordion-panel [Expanded]=\"hierarchyExpanded\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-sitemap\"></i>\n Run Hierarchy\n @if (childRuns.length > 0) {\n <span class=\"panel-count\">({{ childRuns.length }} children)</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n @if (parentRun) {\n <div class=\"parent-run-section\">\n <h4><i class=\"fa-solid fa-level-up-alt\"></i> Parent Run</h4>\n <div class=\"run-item parent\" (click)=\"navigateToEntity('MJ: AI Prompt Runs', parentRun.ID)\">\n <div class=\"run-item-icon\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(parentRun.RunType)\"></i>\n </div>\n <div class=\"run-item-content\">\n <div class=\"run-item-title\">\n Parent Run #{{ parentRun.ID.substring(0, 8) }}\n <span class=\"run-item-type\">{{ parentRun.RunType }}</span>\n </div>\n <div class=\"run-item-meta\">\n <span><i class=\"fa-solid fa-clock\"></i> {{ formatDuration(parentRun.ExecutionTimeMS) }}</span>\n <span><i class=\"fa-solid fa-coins\"></i> {{ formatTokens(parentRun.TokensUsed) }}</span>\n <span><i class=\"fa-solid fa-calendar\"></i> {{ parentRun.RunAt | date:'short' }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n @if (childRuns.length > 0) {\n <div class=\"child-runs-section\">\n <h4><i class=\"fa-solid fa-level-down-alt\"></i> Child Runs</h4>\n <div class=\"runs-list\">\n @for (childRun of childRuns; track childRun.ID) {\n <div class=\"run-item child\" (click)=\"navigateToEntity('MJ: AI Prompt Runs', childRun.ID)\">\n <div class=\"run-item-icon\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(childRun.RunType)\"></i>\n </div>\n <div class=\"run-item-content\">\n <div class=\"run-item-title\">\n Child Run #{{ childRun.ID.substring(0, 8) }}\n @if (childRun.ExecutionOrder !== null) {\n <span class=\"execution-order\">#{{ childRun.ExecutionOrder }}</span>\n }\n <span class=\"run-item-type\">{{ childRun.RunType }}</span>\n </div>\n <div class=\"run-item-meta\">\n <span class=\"status-indicator\" [style.color]=\"getStatusColor()\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\"></i>\n {{ childRun.Success ? 'Success' : childRun.ErrorMessage ? 'Failed' : 'Running' }}\n </span>\n <span><i class=\"fa-solid fa-clock\"></i> {{ formatDuration(childRun.ExecutionTimeMS) }}</span>\n <span><i class=\"fa-solid fa-coins\"></i> {{ formatTokens(childRun.TokensUsed) }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Additional Details Panel -->\n <mj-accordion-panel [Expanded]=\"false\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Additional Details\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"detail-fields-grid\">\n @if (record.AgentID) {\n <div class=\"detail-field\">\n <label>Agent</label>\n <div class=\"detail-value clickable\" (click)=\"navigateToEntity('MJ: AI Agents', record.AgentID)\" title=\"View Agent\">\n <i class=\"fa-solid fa-robot\"></i>\n {{ record.Agent || 'Unknown' }}\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n \n @if (record.RunType) {\n <div class=\"detail-field\">\n <label>Run Type</label>\n <div class=\"detail-value\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(record.RunType)\"></i>\n {{ record.RunType }}\n </div>\n </div>\n }\n \n @if (record.ResponseFormat) {\n <div class=\"detail-field\">\n <label>Response Format</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-code\"></i>\n {{ record.ResponseFormat }}\n </div>\n </div>\n }\n \n <div class=\"detail-field\">\n <label>Temperature</label>\n <div class=\"detail-value\" [class.null-value]=\"record.Temperature === null || record.Temperature === undefined\">\n <i class=\"fa-solid fa-temperature-high\"></i>\n {{ record.Temperature !== null && record.Temperature !== undefined ? record.Temperature : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Top P</label>\n <div class=\"detail-value\" [class.null-value]=\"record.TopP === null || record.TopP === undefined\">\n <i class=\"fa-solid fa-percentage\"></i>\n {{ record.TopP !== null && record.TopP !== undefined ? record.TopP : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Top K</label>\n <div class=\"detail-value\" [class.null-value]=\"record.TopK === null || record.TopK === undefined\">\n <i class=\"fa-solid fa-list-ol\"></i>\n {{ record.TopK !== null && record.TopK !== undefined ? record.TopK : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Min P</label>\n <div class=\"detail-value\" [class.null-value]=\"record.MinP === null || record.MinP === undefined\">\n <i class=\"fa-solid fa-filter\"></i>\n {{ record.MinP !== null && record.MinP !== undefined ? record.MinP : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Frequency Penalty</label>\n <div class=\"detail-value\" [class.null-value]=\"record.FrequencyPenalty === null || record.FrequencyPenalty === undefined\">\n <i class=\"fa-solid fa-repeat\"></i>\n {{ record.FrequencyPenalty !== null && record.FrequencyPenalty !== undefined ? record.FrequencyPenalty : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Presence Penalty</label>\n <div class=\"detail-value\" [class.null-value]=\"record.PresencePenalty === null || record.PresencePenalty === undefined\">\n <i class=\"fa-solid fa-plus-circle\"></i>\n {{ record.PresencePenalty !== null && record.PresencePenalty !== undefined ? record.PresencePenalty : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Seed</label>\n <div class=\"detail-value\" [class.null-value]=\"record.Seed === null || record.Seed === undefined\">\n <i class=\"fa-solid fa-seedling\"></i>\n {{ record.Seed !== null && record.Seed !== undefined ? record.Seed : '\u2014' }}\n </div>\n </div>\n\n <div class=\"detail-field\">\n <label>Stop Sequences</label>\n <div class=\"detail-value\" [class.null-value]=\"!record.StopSequences\">\n <i class=\"fa-solid fa-stop-circle\"></i>\n {{ record.StopSequences || '\u2014' }}\n </div>\n </div>\n\n <div class=\"detail-field\">\n <label>Assistant Prefill</label>\n <div class=\"detail-value\" [class.null-value]=\"!record.AssistantPrefill\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n {{ record.AssistantPrefill || '\u2014' }}\n </div>\n </div>\n\n @if (record.RunAt) {\n <div class=\"detail-field\">\n <label>Started At</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-clock\"></i>\n {{ record.RunAt | date:'medium' }}\n </div>\n </div>\n }\n \n @if (record.CompletedAt) {\n <div class=\"detail-field\">\n <label>Completed At</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-check-circle\"></i>\n {{ record.CompletedAt | date:'medium' }}\n </div>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n\n <!-- Model Specific Response Details Panel -->\n @if (record.ModelSpecificResponseDetails) {\n <mj-accordion-panel [Expanded]=\"modelSpecificExpanded\" (ExpandedChange)=\"onModelSpecificPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-microchip\"></i>\n Model Specific Response Details\n <span class=\"panel-badge\">JSON</span>\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedModelSpecificResponseDetails, 'Model Specific Response Details')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedModelSpecificResponseDetails, 'json', 'Model Specific Response Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedModelSpecificResponseDetails\"\n name=\"formattedModelSpecificResponseDetails\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Model Selection & Performance Panel (v2.78 fields) -->\n <mj-accordion-panel [Expanded]=\"false\" (ExpandedChange)=\"onModelSelectionPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-microchip\"></i>\n Model Selection & Performance\n @if (record.CacheHit) {\n <span class=\"panel-badge success\">Cached</span>\n }\n @if (record.WasSelectedResult) {\n <span class=\"panel-badge success\">Selected</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"detail-fields-grid\">\n <!-- Model Selection Details -->\n <div class=\"detail-field\">\n <label>Status</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-info-circle\"></i>\n {{ record.Status || 'Unknown' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Selection Strategy</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-strategy\"></i>\n {{ record.SelectionStrategy || '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Model Power Rank</label>\n <div class=\"detail-value\" [class.null-value]=\"record.ModelPowerRank === null\">\n <i class=\"fa-solid fa-ranking-star\"></i>\n {{ record.ModelPowerRank !== null ? record.ModelPowerRank : '\u2014' }}\n </div>\n </div>\n \n <!-- Cache Information -->\n <div class=\"detail-field\">\n <label>Cache Hit</label>\n <div class=\"detail-value\">\n <i [class]=\"record.CacheHit ? 'fa-solid fa-check-circle' : 'fa-solid fa-times-circle'\"></i>\n {{ record.CacheHit ? 'Yes' : 'No' }}\n </div>\n </div>\n \n @if (record.CacheKey) {\n <div class=\"detail-field full-width\">\n <label>Cache Key</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-key\"></i>\n <code>{{ record.CacheKey }}</code>\n </div>\n </div>\n }\n \n <!-- Judge Information -->\n @if (record.JudgeID) {\n <div class=\"detail-field\">\n <label>Judge Prompt</label>\n <div class=\"detail-value clickable\" (click)=\"navigateToEntity('MJ: AI Prompts', record.JudgeID)\" title=\"View Judge Prompt\">\n <i class=\"fa-solid fa-gavel\"></i>\n {{ record.Judge || 'Unknown' }}\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n @if (record.JudgeScore !== null) {\n <div class=\"detail-field\">\n <label>Judge Score</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-star\"></i>\n {{ record.JudgeScore }}\n </div>\n </div>\n }\n \n <div class=\"detail-field\">\n <label>Was Selected Result</label>\n <div class=\"detail-value\">\n <i [class]=\"record.WasSelectedResult ? 'fa-solid fa-trophy' : 'fa-solid fa-times'\"></i>\n {{ record.WasSelectedResult ? 'Yes' : 'No' }}\n </div>\n </div>\n \n <!-- Performance Metrics -->\n <div class=\"detail-field\">\n <label>Streaming Enabled</label>\n <div class=\"detail-value\">\n <i [class]=\"record.StreamingEnabled ? 'fa-solid fa-stream' : 'fa-solid fa-ban'\"></i>\n {{ record.StreamingEnabled ? 'Yes' : 'No' }}\n </div>\n </div>\n \n @if (record.FirstTokenTime !== null) {\n <div class=\"detail-field\">\n <label>First Token Time</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-bolt\"></i>\n {{ record.FirstTokenTime }} ms\n </div>\n </div>\n }\n \n @if (record.Cancelled) {\n <div class=\"detail-field\">\n <label>Cancelled</label>\n <div class=\"detail-value error\">\n <i class=\"fa-solid fa-ban\"></i>\n Yes\n </div>\n </div>\n \n @if (record.CancellationReason) {\n <div class=\"detail-field full-width\">\n <label>Cancellation Reason</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n {{ record.CancellationReason }}\n </div>\n </div>\n }\n }\n </div>\n \n <!-- Model Selection JSON -->\n @if (record.ModelSelection) {\n <div class=\"model-selection-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Model Selection Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedModelSelection, 'json', 'Model Selection')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <div class=\"json-viewer-container\">\n <mj-code-editor\n [(ngModel)]=\"formattedModelSelection\"\n name=\"formattedModelSelection\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n \n <!-- Error Details JSON -->\n @if (record.ErrorDetails) {\n <div class=\"error-details-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Error Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedErrorDetails, 'json', 'Error Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <div class=\"json-viewer-container\">\n <mj-code-editor\n [(ngModel)]=\"formattedErrorDetails\"\n name=\"formattedErrorDetails\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n </div>\n </form>\n }\n\n <!-- Full-screen overlay -->\n @if (FullScreenContent) {\n <div class=\"fullscreen-overlay\" (click)=\"closeFullScreen()\">\n <div class=\"fullscreen-container\" (click)=\"$event.stopPropagation()\">\n <div class=\"fullscreen-header\">\n <span class=\"fullscreen-title\">\n <i class=\"fa-solid fa-expand\"></i>\n {{ FullScreenTitle }}\n </span>\n <div class=\"fullscreen-actions\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(FullScreenContent, FullScreenTitle)\"\n title=\"Copy content\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"closeFullScreen()\"\n title=\"Close\">\n <i class=\"fa-solid fa-times\"></i> Close\n </button>\n </div>\n </div>\n <div class=\"fullscreen-body\">\n <mj-code-editor\n [value]=\"FullScreenContent\"\n [readonly]=\"true\"\n [language]=\"FullScreenLanguage\"\n style=\"height: 100%; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </div>\n }\n</div>", styles: ["/* Host and Container Layout */\n:host {\n display: block;\n height: 100%;\n}\n\n.record-form-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0 !important;\n overflow: hidden;\n}\n\n.form-content {\n padding: 16px;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n\n/* Error Info Styles */\n.error-info {\n margin-top: 16px;\n padding: 16px;\n background-color: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 20%, var(--mj-bg-surface));\n border-radius: 8px;\n}\n\n.finish-reason {\n margin: 0 0 12px 0;\n color: var(--mj-status-error);\n font-size: 14px;\n}\n\n.error-details {\n margin-top: 12px;\n}\n\n.error-details h4 {\n margin: 0 0 8px 0;\n color: color-mix(in srgb, var(--mj-status-error) 80%, black);\n font-size: 14px;\n font-weight: 600;\n}\n\n.error-hint {\n margin: 0;\n color: color-mix(in srgb, var(--mj-status-error) 70%, black);\n font-size: 14px;\n font-style: italic;\n}\n\n/* Header Section */\n.prompt-run-header {\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n padding: 20px;\n margin-bottom: 0;\n}\n\n.header-content {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n margin-bottom: 16px;\n}\n\n.run-overview {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n flex: 1;\n}\n\n.run-icon-wrapper {\n width: 56px;\n height: 56px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-icon-wrapper i {\n font-size: 24px;\n}\n\n.run-info {\n flex: 1;\n min-width: 0;\n}\n\n.run-title {\n margin: 0 0 8px 0;\n font-size: 1.5em;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.run-id {\n font-size: 0.8em;\n color: var(--mj-text-muted);\n font-weight: 400;\n font-family: 'Courier New', monospace;\n}\n\n.run-meta {\n display: flex;\n align-items: stretch;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n/* Shared meta-card style (Status, Execution, single Prompt) */\n.meta-card {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n}\n\n.meta-card-body {\n display: flex;\n align-items: center;\n gap: 7px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n}\n\n.meta-card-body.clickable {\n cursor: pointer;\n transition: color 0.15s;\n}\n\n.meta-card-body.clickable:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n/* Status indicator dot */\n.status-indicator {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n/* C3 Stacked Connector \u2014 Prompt Card */\n.prompt-card-c3 {\n display: flex;\n flex-direction: column;\n border-radius: 10px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n}\n\n.c3-child-section {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n font-size: 0.92em;\n font-weight: 600;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-child-section:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n.c3-child-section i.prompt-icon {\n color: var(--mj-brand-primary);\n font-size: 1rem;\n}\n\n.c3-divider {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 0 14px;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-line {\n flex: 1;\n height: 1px;\n background: var(--mj-border-default);\n}\n\n.c3-divider-label {\n font-size: 0.55rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.c3-parent-section {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 7px 14px 9px 14px;\n font-size: 0.76em;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.c3-parent-section:hover {\n color: var(--mj-text-secondary);\n}\n\n.c3-parent-section i {\n font-size: 0.75rem;\n}\n\n.c3-link-icon {\n margin-left: auto;\n font-size: 0.6rem !important;\n opacity: 0.4;\n}\n\n.c3-parent-section:hover .c3-link-icon {\n opacity: 0.8;\n}\n\n/* C3 Model Card */\n.model-card-c3 {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: border-color 0.15s;\n}\n\n.model-card-c3:hover {\n border-color: var(--mj-border-strong);\n}\n\n.c3-card-label {\n font-size: 0.6rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n padding: 4px 10px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.c3-card-body {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.c3-model-name {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.c3-model-name i {\n color: var(--mj-text-muted);\n font-size: 0.9rem;\n}\n\n.c3-vendor-name {\n font-size: 0.72em;\n color: var(--mj-text-muted);\n font-weight: 400;\n padding-left: 22px;\n}\n\n.original-run {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n font-size: 0.85em;\n}\n\n.original-link {\n color: var(--mj-status-error);\n text-decoration: none;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.original-link:hover {\n color: color-mix(in srgb, var(--mj-status-error) 85%, black);\n text-decoration: underline;\n}\n\n.run-actions {\n display: flex;\n gap: 8px;\n}\n\n/* Metrics Bar */\n.metrics-bar {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n flex-wrap: wrap;\n}\n\n.metric-item {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.metric-item > i {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n width: 24px;\n text-align: center;\n}\n\n.metric-content {\n display: flex;\n flex-direction: column;\n}\n\n.metric-label {\n font-size: 0.75em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.metric-value {\n font-size: 1.1em;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.config-link {\n color: var(--mj-brand-primary);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-link:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n text-decoration: underline;\n}\n\n/* Panels */\n.form-content {\n padding: 16px;\n}\n\n.panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n/* Nested Sub-Panel Styles */\n.sub-panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n font-size: 0.95em;\n}\n\n.sub-panel-content {\n padding: 0;\n}\n\n/* Nested accordion panel styles */\n.nested-panels mj-accordion-panel {\n margin-bottom: 8px;\n}\n\n/* Ensure chat message viewer takes appropriate height */\n.sub-panel-content mj-chat-message-viewer {\n display: block;\n min-height: 200px;\n max-height: 750px; /* Increased by 50% from 500px */\n height: auto;\n overflow: hidden;\n}\n\n/* Different colors for sub-expansion panels */\n.sub-expansion-panel {\n margin-bottom: 8px;\n}\n\n/* Sub-expansion panel styles */\n.sub-expansion-panel {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.panel-badge {\n margin-left: auto;\n padding: 2px 8px;\n border-radius: 12px;\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.panel-badge.error {\n background: var(--mj-status-error);\n color: white;\n}\n\n.panel-count {\n color: var(--mj-text-muted);\n font-weight: 400;\n font-size: 0.9em;\n}\n\n.panel-content {\n padding: 20px;\n max-height: none !important;\n overflow: visible !important;\n}\n\n/* JSON Editor Container */\n.json-editor-container {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.json-toolbar {\n background: var(--mj-bg-surface-card);\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: flex-end;\n}\n\n/* Error Message */\n.error-message {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid var(--mj-status-error);\n border-radius: 6px;\n padding: 16px;\n display: flex;\n gap: 16px;\n margin-bottom: 16px;\n}\n\n.error-message i {\n font-size: 1.5em;\n color: var(--mj-status-error);\n flex-shrink: 0;\n}\n\n.error-content h4 {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 1em;\n}\n\n.error-content p {\n margin: 0;\n color: var(--mj-text-secondary);\n}\n\n/* Empty State */\n.empty-state {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.empty-state i {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state p {\n margin: 0;\n font-size: 1.1em;\n}\n\n/* Loading State */\n.loading-state {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.loading-state i {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.6;\n color: var(--mj-brand-primary);\n}\n\n.loading-state p {\n margin: 0;\n font-size: 1.1em;\n}\n\n/* Metrics Grid */\n.metrics-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 20px;\n margin-bottom: 24px;\n}\n\n.metric-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 20px;\n}\n\n.metric-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.metric-header i {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n}\n\n.metric-header h4 {\n margin: 0;\n font-size: 0.9em;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.metric-value.large {\n font-size: 1.8em;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.metric-rollup {\n margin-top: 8px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.metric-currency {\n margin-top: 4px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n}\n\n/* Additional Metrics */\n.additional-metrics {\n padding-top: 16px;\n}\n\n.metric-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.metric-row:last-child {\n border-bottom: none;\n}\n\n.metric-row .metric-label {\n font-weight: 500;\n color: var(--mj-text-muted);\n}\n\n.metric-row .metric-value {\n font-weight: 400;\n color: var(--mj-text-primary);\n}\n\n.metric-row .metric-value.link {\n color: var(--mj-brand-primary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color 0.2s;\n}\n\n.metric-row .metric-value.link:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n}\n\n/* Hierarchy Section */\n.parent-run-section,\n.child-runs-section {\n margin-bottom: 24px;\n}\n\n.parent-run-section:last-child,\n.child-runs-section:last-child {\n margin-bottom: 0;\n}\n\n.parent-run-section h4,\n.child-runs-section h4 {\n margin: 0 0 12px 0;\n font-size: 0.95em;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.runs-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.run-item {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.run-item:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n}\n\n.run-item.parent {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n}\n\n.run-item.parent:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface));\n}\n\n.run-item-icon {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-item-content {\n flex: 1;\n min-width: 0;\n}\n\n.run-item-title {\n font-weight: 500;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.execution-order {\n background: var(--mj-text-muted);\n color: white;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.75em;\n font-weight: 600;\n}\n\n.run-item-type {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 400;\n}\n\n.run-item-meta {\n display: flex;\n align-items: center;\n gap: 16px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.run-item-meta span {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.status-indicator {\n font-weight: 500;\n}\n\n.run-item > i:last-child {\n color: var(--mj-text-muted);\n font-size: 0.85em;\n}\n\n/* Detail Fields Grid */\n.detail-fields-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 24px;\n width: 100%;\n min-height: auto;\n overflow: visible;\n}\n\n.detail-field {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-field label {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-value {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 1em;\n color: var(--mj-text-primary);\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n transition: all 0.2s;\n}\n\n.detail-value i:first-child {\n color: var(--mj-text-muted);\n font-size: 1.1em;\n width: 20px;\n text-align: center;\n}\n\n.detail-value.clickable {\n cursor: pointer;\n}\n\n.detail-value.clickable:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.detail-value.clickable i:last-child {\n margin-left: auto;\n font-size: 0.85em;\n opacity: 0.6;\n}\n\n.detail-value.clickable:hover i:last-child {\n opacity: 1;\n}\n\n.detail-value.null-value {\n color: var(--mj-text-disabled);\n font-style: italic;\n}\n\n.detail-value.null-value i:first-child {\n opacity: 0.5;\n}\n\n/* Accordion Panel Overrides */\nmj-accordion-panel {\n display: block;\n}\n\n/* Validation Panel Styles */\n.validation-summary {\n margin-bottom: 24px;\n}\n\n.summary-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.summary-header h4 {\n margin: 0;\n font-size: 1.1em;\n color: var(--mj-text-primary);\n}\n\n.validation-status {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 16px;\n border-radius: 20px;\n font-weight: 500;\n font-size: 0.9em;\n}\n\n.validation-status.success {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.validation-status.failed {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.validation-metrics {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.metric-card.small {\n padding: 16px;\n text-align: center;\n}\n\n.metric-card.small .metric-label {\n font-size: 0.8em;\n margin-bottom: 8px;\n font-weight: 600;\n}\n\n.metric-card.small .metric-value {\n font-size: 1.4em;\n font-weight: 700;\n}\n\n.validation-error,\n.common-error {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n border-radius: 8px;\n padding: 16px;\n margin-bottom: 16px;\n}\n\n.validation-error h5,\n.common-error h5 {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 0.95em;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.validation-error p,\n.common-error p {\n margin: 0;\n color: var(--mj-text-secondary);\n font-size: 0.9em;\n}\n\n.error-count {\n display: inline-block;\n margin-top: 8px;\n padding: 2px 8px;\n background: var(--mj-status-error);\n color: white;\n border-radius: 12px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n/* Retry Timeline */\n.retry-timeline {\n margin-bottom: 24px;\n}\n\n.retry-timeline h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.timeline-info {\n display: flex;\n gap: 24px;\n flex-wrap: wrap;\n}\n\n.timeline-stat {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-text-muted);\n font-size: 0.9em;\n}\n\n.timeline-stat i {\n font-size: 1.1em;\n}\n\n/* Validation Attempts */\n.validation-attempts {\n margin-bottom: 24px;\n}\n\n.validation-attempts h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.attempts-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.attempt-item {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 16px;\n}\n\n.attempt-item.success {\n background: color-mix(in srgb, var(--mj-status-success) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-success) 18%, var(--mj-bg-surface));\n}\n\n.attempt-item.failed {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n}\n\n.attempt-number {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.attempt-item.success .attempt-number {\n color: var(--mj-status-success);\n}\n\n.attempt-item.failed .attempt-number {\n color: var(--mj-status-error);\n}\n\n.attempt-details {\n flex: 1;\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n font-size: 0.85em;\n}\n\n.attempt-time {\n color: var(--mj-text-muted);\n}\n\n.attempt-error {\n color: var(--mj-status-error);\n flex: 1 0 100%;\n}\n\n.output-length {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n/* Validation JSON */\n.validation-json {\n margin-top: 24px;\n}\n\n.validation-json h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.json-viewer-container {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n/* Panel badge styles */\n.panel-badge.success {\n background: var(--mj-status-success);\n color: white;\n}\n\n/* Full-screen overlay */\n.fullscreen-overlay {\n position: fixed;\n inset: 0;\n z-index: 10000;\n background: var(--mj-bg-overlay, rgba(0, 0, 0, 0.6));\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1.5rem;\n}\n\n.fullscreen-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n max-width: 95vw;\n max-height: 95vh;\n background: var(--mj-bg-surface);\n border-radius: 10px;\n border: 1px solid var(--mj-border-default);\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n overflow: hidden;\n}\n\n.fullscreen-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.fullscreen-title {\n font-weight: 600;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.fullscreen-title i {\n color: var(--mj-text-secondary);\n}\n\n.fullscreen-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.fullscreen-body {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.fullscreen-body mj-code-editor {\n display: block;\n height: 100%;\n}\n"] }]
|
|
2334
|
+
args: [{ standalone: false, selector: 'mj-ai-prompt-run-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "@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\n <!-- Header Section -->\n <div class=\"prompt-run-header\">\n <div class=\"header-content\">\n <div class=\"run-overview\">\n <div class=\"run-icon-wrapper\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\" [style.color]=\"getStatusColor()\"></i>\n </div>\n <div class=\"run-info\">\n <h1 class=\"run-title\">\n Prompt Run\n @if (record.ID) {\n <span class=\"run-id\">#{{ record.ID.substring(0, 8) }}</span>\n }\n </h1>\n <div class=\"run-meta\">\n <!-- Status Card -->\n <div class=\"meta-card status-card\">\n <div class=\"c3-card-label\">Status</div>\n <div class=\"meta-card-body\">\n <span class=\"status-indicator\" [style.background-color]=\"getStatusColor()\"></span>\n <i [class]=\"'fa-solid ' + getStatusIcon()\" [style.color]=\"getStatusColor()\"></i>\n {{ getStatusText() }}\n </div>\n </div>\n\n <!-- Execution Card -->\n @if (record.RunType) {\n <div class=\"meta-card execution-card\">\n <div class=\"c3-card-label\">Execution</div>\n <div class=\"meta-card-body\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(record.RunType)\" [style.color]=\"getRunTypeColor(record.RunType)\"></i>\n {{ record.RunType }}\n </div>\n </div>\n }\n\n <!-- Prompt Card -->\n @if (prompt) {\n @if (record.ChildPromptID) {\n <!-- C3 Stacked Connector: child prompt prominent, parent nested -->\n <div class=\"prompt-card-c3\">\n <div class=\"c3-card-label\">Prompt</div>\n <div class=\"c3-child-section\" (click)=\"navigateToEntity('MJ: AI Prompts', record.ChildPromptID)\" title=\"View Agent Prompt\">\n <i class=\"fa-solid fa-comment prompt-icon\"></i>\n {{ record.ChildPrompt }}\n </div>\n <div class=\"c3-divider\">\n <span class=\"c3-line\"></span>\n <span class=\"c3-divider-label\">wrapped by</span>\n <span class=\"c3-line\"></span>\n </div>\n <div class=\"c3-parent-section\" (click)=\"navigateToEntity('MJ: AI Prompts', prompt.ID)\" title=\"View System Prompt\">\n <i class=\"fa-solid fa-cog\"></i>\n {{ prompt.Name }}\n <i class=\"fa-solid fa-arrow-up-right-from-square c3-link-icon\"></i>\n </div>\n </div>\n } @else {\n <!-- Single prompt (no child) \u2014 same card style -->\n <div class=\"meta-card prompt-single-card\">\n <div class=\"c3-card-label\">Prompt</div>\n <div class=\"meta-card-body clickable\" (click)=\"navigateToEntity('MJ: AI Prompts', prompt.ID)\" title=\"View Prompt\">\n <i class=\"fa-solid fa-comment-dots\" style=\"color: var(--mj-brand-primary);\"></i>\n {{ prompt.Name }}\n </div>\n </div>\n }\n }\n\n <!-- Model Card -->\n @if (model) {\n <div class=\"model-card-c3\">\n <div class=\"c3-card-label\">Model</div>\n <div class=\"c3-card-body\" (click)=\"navigateToEntity('MJ: AI Models', model.ID)\" title=\"View Model\">\n <span class=\"c3-model-name\"><i class=\"fa-solid fa-microchip\"></i> {{ model.Name }}</span>\n @if (record.Vendor) {\n <span class=\"c3-vendor-name\">{{ record.Vendor }}</span>\n }\n </div>\n </div>\n }\n @if (record.RerunFromPromptRunID) {\n <span class=\"original-run\" title=\"View Original Run\">\n <i class=\"fa-solid fa-level-up-alt\"></i>\n <a (click)=\"navigateToOriginalRun()\" class=\"original-link\">Original Run</a>\n </span>\n }\n </div>\n </div>\n </div>\n \n <!-- Action Buttons -->\n <div class=\"run-actions\">\n <button mjButton variant=\"outline\" size=\"sm\" (click)=\"reRunPrompt()\" title=\"Re-run this prompt\">\n <i class=\"fa-solid fa-play-circle\"></i>\n Re-Run\n </button>\n <button mjButton variant=\"outline\" size=\"sm\" (click)=\"refreshData()\" title=\"Refresh data\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n \n <!-- Key Metrics Bar -->\n @if (record.ConfigurationID) {\n <!-- Configuration Bar -->\n <div class=\"metrics-bar\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-cog\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Configuration</div>\n <div class=\"metric-value\">\n <a href=\"javascript:void(0)\" class=\"config-link\" (click)=\"navigateToEntity('MJ: AI Configurations', record.ConfigurationID)\">\n {{ record.Configuration || 'Unknown' }}\n </a>\n </div>\n </div>\n </div>\n @if (record.Temperature !== null && record.Temperature !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-temperature-high\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Temperature</div>\n <div class=\"metric-value\">{{ record.Temperature }}</div>\n </div>\n </div>\n }\n @if (record.TopP !== null && record.TopP !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-percentage\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Top P</div>\n <div class=\"metric-value\">{{ record.TopP }}</div>\n </div>\n </div>\n }\n @if (record.TopK !== null && record.TopK !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-list-ol\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Top K</div>\n <div class=\"metric-value\">{{ record.TopK }}</div>\n </div>\n </div>\n }\n @if (record.EffortLevel !== null && record.EffortLevel !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-tachometer-alt\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Effort Level</div>\n <div class=\"metric-value\">{{ record.EffortLevel }}</div>\n </div>\n </div>\n }\n @if (record.ResponseFormat) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-code\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Response Format</div>\n <div class=\"metric-value\">{{ record.ResponseFormat }}</div>\n </div>\n </div>\n }\n </div>\n \n <!-- Execution Metrics Bar (always show when configuration exists) -->\n <div class=\"metrics-bar\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Duration</div>\n <div class=\"metric-value\">{{ formatDuration(record.ExecutionTimeMS) }}</div>\n </div>\n </div>\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-coins\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Total Tokens</div>\n <div class=\"metric-value\">{{ formatTokens(record.TokensUsed) }}</div>\n </div>\n </div>\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cost</div>\n <div class=\"metric-value\">{{ formatCost(record.TotalCost || record.Cost) }}</div>\n </div>\n </div>\n @if (record.RunAt) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-calendar\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Started</div>\n <div class=\"metric-value\">{{ record.RunAt | date:'short' }}</div>\n </div>\n </div>\n }\n </div>\n } @else {\n <!-- Execution Metrics Bar (original behavior when no configuration) -->\n <div class=\"metrics-bar\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Duration</div>\n <div class=\"metric-value\">{{ formatDuration(record.ExecutionTimeMS) }}</div>\n </div>\n </div>\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-coins\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Total Tokens</div>\n <div class=\"metric-value\">{{ formatTokens(record.TokensUsed) }}</div>\n </div>\n </div>\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cost</div>\n <div class=\"metric-value\">{{ formatCost(record.TotalCost || record.Cost) }}</div>\n </div>\n </div>\n @if (record.RunAt) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-calendar\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Started</div>\n <div class=\"metric-value\">{{ record.RunAt | date:'short' }}</div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Main Content with Expansion Panels -->\n <div class=\"form-content\" style=\"display: flex; flex-direction: column; flex: 1; min-height: 0; overflow-y: auto;\">\n\n <!-- Input Panel with nested sub-panels -->\n <mj-accordion-panel [Expanded]=\"inputExpanded\" (ExpandedChange)=\"onInputPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n Input\n @if (record.Messages && record.Messages.trim() !== '') {\n <span class=\"panel-badge\">JSON</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n @if (record.Messages && record.Messages.trim() !== '') {\n <!-- Nested expansion panels for sub-sections -->\n <div class=\"nested-panels\">\n <!-- Messages Sub-Panel -->\n <mj-accordion-panel\n [Expanded]=\"messagesExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-comments\"></i>\n Messages\n @if (chatMessages.length > 0) {\n <span class=\"panel-count\">({{ chatMessages.length }})</span>\n }\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n @if (isParsingMessages || isLoadingRelatedData) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <p>Loading messages...</p>\n </div>\n } @else if (chatMessages.length > 0) {\n <mj-chat-message-viewer \n [messages]=\"chatMessages\">\n </mj-chat-message-viewer>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-slash\"></i>\n <p>No chat messages found</p>\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Data Sub-Panel -->\n <mj-accordion-panel\n [Expanded]=\"dataExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-database\"></i>\n Data\n @if (inputData) {\n <span class=\"panel-badge\">Object</span>\n }\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n @if (inputData && formattedData) {\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedData, 'Data')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedData, 'json', 'Data')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedData\"\n name=\"formattedData\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-database\"></i>\n <p>No data object found</p>\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Raw Sub-Panel -->\n <mj-accordion-panel\n [Expanded]=\"rawExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-code\"></i>\n Raw\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedMessages, 'Messages')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedMessages, 'json', 'Raw Messages')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedMessages\"\n name=\"formattedMessages\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </mj-accordion-panel>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-slash\"></i>\n <p>No input messages recorded</p>\n </div>\n }\n </div>\n </mj-accordion-panel>\n \n <!-- Result Panel -->\n <mj-accordion-panel [Expanded]=\"resultExpanded\" (ExpandedChange)=\"onResultPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-square-check\"></i>\n Result\n @if (record.Result && record.Result.trim() !== '') {\n <span class=\"panel-badge\">JSON</span>\n }\n @if (record.ErrorMessage) {\n <span class=\"panel-badge error\">Error</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n @if (record.ErrorMessage) {\n <div class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <div class=\"error-content\">\n <h4>Error Message</h4>\n <p>{{ record.ErrorMessage }}</p>\n </div>\n </div>\n }\n \n @if (record.Result && record.Result.trim() !== '') {\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedResult, 'Result')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedResult, 'json', 'Result')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedResult\"\n name=\"formattedResult\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n } @else if (!record.ErrorMessage) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No result data recorded</p>\n @if (record.Status === 'Failed' || record.Success === false) {\n <div class=\"error-info\">\n @if (record.Status) {\n <p class=\"finish-reason\">\n <strong>Status:</strong> {{ record.Status }}\n </p>\n }\n @if (formattedErrorDetails) {\n <div class=\"error-details\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Error Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedErrorDetails, 'json', 'Error Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor\n [ngModel]=\"formattedErrorDetails\"\n [disabled]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n }\n @if (!formattedErrorDetails) {\n <p class=\"error-hint\">\n The prompt execution failed but no additional error information is available.\n </p>\n }\n </div>\n }\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Token Usage & Metrics Panel -->\n <mj-accordion-panel [Expanded]=\"metricsExpanded\" (ExpandedChange)=\"onMetricsPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-chart-line\"></i>\n Token Usage & Metrics\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"metrics-grid\">\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-message\"></i>\n <h4>Prompt Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensPrompt) }}</div>\n @if (record.TokensPromptRollup && record.TokensPromptRollup !== record.TokensPrompt) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensPromptRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-reply\"></i>\n <h4>Completion Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensCompletion) }}</div>\n @if (record.TokensCompletionRollup && record.TokensCompletionRollup !== record.TokensCompletion) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensCompletionRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-coins\"></i>\n <h4>Total Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensUsed) }}</div>\n @if (record.TokensUsedRollup && record.TokensUsedRollup !== record.TokensUsed) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensUsedRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <h4>Cost</h4>\n </div>\n <div class=\"metric-value large\">{{ formatCost(record.Cost) }}</div>\n @if (record.TotalCost && record.TotalCost !== record.Cost) {\n <div class=\"metric-rollup\">\n <span>Total: {{ formatCost(record.TotalCost) }}</span>\n </div>\n }\n @if (record.CostCurrency) {\n <div class=\"metric-currency\">{{ record.CostCurrency }}</div>\n }\n </div>\n \n <!-- Timing Metrics -->\n @if (record.QueueTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-hourglass-start\"></i>\n <h4>Queue Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.QueueTime) }}</div>\n </div>\n }\n \n @if (record.PromptTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-brain\"></i>\n <h4>Prompt Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.PromptTime) }}</div>\n </div>\n }\n \n @if (record.CompletionTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-flag-checkered\"></i>\n <h4>Completion Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.CompletionTime) }}</div>\n </div>\n }\n </div>\n \n <!-- Additional Metrics -->\n <div class=\"additional-metrics\">\n @if (record.ExecutionOrder !== null) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Execution Order:</span>\n <span class=\"metric-value\">{{ record.ExecutionOrder }}</span>\n </div>\n }\n @if (record.AgentID) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Agent:</span>\n <span class=\"metric-value link\" (click)=\"navigateToEntity('MJ: AI Agents', record.AgentID)\">\n {{ record.Agent }}\n <i class=\"fa-solid fa-external-link\"></i>\n </span>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n\n <!-- Validation & Retry Panel -->\n @if (record && ((record.ValidationAttemptCount && record.ValidationAttemptCount > 0) || record.ValidationBehavior)) {\n <mj-accordion-panel [Expanded]=\"validationExpanded\" (ExpandedChange)=\"onValidationPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-shield-check\"></i>\n Validation & Retries\n @if (record && record.ValidationAttemptCount && record.ValidationAttemptCount > 1) {\n <span class=\"panel-count\">({{ record.ValidationAttemptCount }} attempts)</span>\n }\n @if (record.FinalValidationPassed) {\n <span class=\"panel-badge success\">Passed</span>\n } @else if (record.FinalValidationPassed === false) {\n <span class=\"panel-badge error\">Failed</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <!-- Validation Summary -->\n <div class=\"validation-summary\">\n <div class=\"summary-header\">\n <h4>Validation Summary</h4>\n <div class=\"validation-status\" [class.success]=\"record.FinalValidationPassed\" [class.failed]=\"!record.FinalValidationPassed\">\n <i [class]=\"record.FinalValidationPassed ? 'fa-solid fa-check-circle' : 'fa-solid fa-times-circle'\"></i>\n {{ record.FinalValidationPassed ? 'Validation Passed' : 'Validation Failed' }}\n </div>\n </div>\n \n <div class=\"validation-metrics\">\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Total Attempts</div>\n <div class=\"metric-value\">{{ record.ValidationAttemptCount || 0 }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Successful</div>\n <div class=\"metric-value\">{{ record.SuccessfulValidationCount || 0 }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Behavior</div>\n <div class=\"metric-value\">{{ record.ValidationBehavior || 'Not set' }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Retry Strategy</div>\n <div class=\"metric-value\">{{ record.RetryStrategy || 'Not set' }}</div>\n </div>\n </div>\n \n @if (record.FinalValidationError) {\n <div class=\"validation-error\">\n <h5><i class=\"fa-solid fa-exclamation-triangle\"></i> Final Validation Error</h5>\n <p>{{ record.FinalValidationError }}</p>\n @if (record && record.ValidationErrorCount && record.ValidationErrorCount > 0) {\n <span class=\"error-count\">{{ record.ValidationErrorCount }} validation errors</span>\n }\n </div>\n }\n \n @if (record.CommonValidationError && record.CommonValidationError !== record.FinalValidationError) {\n <div class=\"common-error\">\n <h5><i class=\"fa-solid fa-repeat\"></i> Most Common Error</h5>\n <p>{{ record.CommonValidationError }}</p>\n </div>\n }\n </div>\n \n <!-- Retry Timeline -->\n @if (record && record.ValidationAttemptCount && record.ValidationAttemptCount > 1) {\n <div class=\"retry-timeline\">\n <h4>Retry Timeline</h4>\n <div class=\"timeline-info\">\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-clock\"></i>\n <span>First Attempt: {{ record.FirstAttemptAt | date:'short' }}</span>\n </div>\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-flag-checkered\"></i>\n <span>Last Attempt: {{ record.LastAttemptAt | date:'short' }}</span>\n </div>\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-stopwatch\"></i>\n <span>Total Retry Duration: {{ formatDuration(record.TotalRetryDurationMS) }}</span>\n </div>\n </div>\n </div>\n }\n \n <!-- Validation Attempts Details -->\n @if (validationAttempts && validationAttempts.length > 0) {\n <div class=\"validation-attempts\">\n <h4>Validation Attempts</h4>\n <div class=\"attempts-list\">\n @for (attempt of validationAttempts; track attempt.attemptNumber) {\n <div class=\"attempt-item\" [class.success]=\"attempt.success\" [class.failed]=\"!attempt.success\">\n <div class=\"attempt-number\">\n <i [class]=\"attempt.success ? 'fa-solid fa-check' : 'fa-solid fa-times'\"></i>\n Attempt #{{ attempt.attemptNumber }}\n </div>\n <div class=\"attempt-details\">\n <span class=\"attempt-time\">{{ attempt.timestamp }}</span>\n @if (!attempt.success) {\n <span class=\"attempt-error\">{{ attempt.errorMessage || 'Unknown error' }}</span>\n @if (attempt.validationErrorCount > 0) {\n <span class=\"error-count\">({{ attempt.validationErrorCount }} errors)</span>\n }\n }\n @if (attempt.outputLength) {\n <span class=\"output-length\">Output: {{ attempt.outputLength }} chars</span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n \n <!-- Validation Summary JSON -->\n @if (validationSummary) {\n <div class=\"validation-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Validation Summary Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedValidationSummary, 'json', 'Validation Summary')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <div class=\"json-viewer-container\">\n <mj-code-editor\n [(ngModel)]=\"formattedValidationSummary\"\n name=\"formattedValidationSummary\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n \n <!-- Validation Attempts JSON -->\n @if (record.ValidationAttempts) {\n <div class=\"validation-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Validation Attempts (Raw JSON)</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedValidationAttempts, 'json', 'Validation Attempts')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <div class=\"json-viewer-container\">\n <mj-code-editor\n [(ngModel)]=\"formattedValidationAttempts\"\n name=\"formattedValidationAttempts\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Hierarchy Panel (for parent/child relationships) -->\n @if (record.ParentID || childRuns.length > 0) {\n <mj-accordion-panel [Expanded]=\"hierarchyExpanded\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-sitemap\"></i>\n Run Hierarchy\n @if (childRuns.length > 0) {\n <span class=\"panel-count\">({{ childRuns.length }} children)</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n @if (parentRun) {\n <div class=\"parent-run-section\">\n <h4><i class=\"fa-solid fa-level-up-alt\"></i> Parent Run</h4>\n <div class=\"run-item parent\" (click)=\"navigateToEntity('MJ: AI Prompt Runs', parentRun.ID)\">\n <div class=\"run-item-icon\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(parentRun.RunType)\"></i>\n </div>\n <div class=\"run-item-content\">\n <div class=\"run-item-title\">\n Parent Run #{{ parentRun.ID.substring(0, 8) }}\n <span class=\"run-item-type\">{{ parentRun.RunType }}</span>\n </div>\n <div class=\"run-item-meta\">\n <span><i class=\"fa-solid fa-clock\"></i> {{ formatDuration(parentRun.ExecutionTimeMS) }}</span>\n <span><i class=\"fa-solid fa-coins\"></i> {{ formatTokens(parentRun.TokensUsed) }}</span>\n <span><i class=\"fa-solid fa-calendar\"></i> {{ parentRun.RunAt | date:'short' }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n @if (childRuns.length > 0) {\n <div class=\"child-runs-section\">\n <h4><i class=\"fa-solid fa-level-down-alt\"></i> Child Runs</h4>\n <div class=\"runs-list\">\n @for (childRun of childRuns; track childRun.ID) {\n <div class=\"run-item child\" (click)=\"navigateToEntity('MJ: AI Prompt Runs', childRun.ID)\">\n <div class=\"run-item-icon\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(childRun.RunType)\"></i>\n </div>\n <div class=\"run-item-content\">\n <div class=\"run-item-title\">\n Child Run #{{ childRun.ID.substring(0, 8) }}\n @if (childRun.ExecutionOrder !== null) {\n <span class=\"execution-order\">#{{ childRun.ExecutionOrder }}</span>\n }\n <span class=\"run-item-type\">{{ childRun.RunType }}</span>\n </div>\n <div class=\"run-item-meta\">\n <span class=\"status-indicator\" [style.color]=\"getStatusColor()\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\"></i>\n {{ childRun.Success ? 'Success' : childRun.ErrorMessage ? 'Failed' : 'Running' }}\n </span>\n <span><i class=\"fa-solid fa-clock\"></i> {{ formatDuration(childRun.ExecutionTimeMS) }}</span>\n <span><i class=\"fa-solid fa-coins\"></i> {{ formatTokens(childRun.TokensUsed) }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Additional Details Panel -->\n <mj-accordion-panel [Expanded]=\"false\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Additional Details\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"detail-fields-grid\">\n @if (record.AgentID) {\n <div class=\"detail-field\">\n <label>Agent</label>\n <div class=\"detail-value clickable\" (click)=\"navigateToEntity('MJ: AI Agents', record.AgentID)\" title=\"View Agent\">\n <i class=\"fa-solid fa-robot\"></i>\n {{ record.Agent || 'Unknown' }}\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n \n @if (record.RunType) {\n <div class=\"detail-field\">\n <label>Run Type</label>\n <div class=\"detail-value\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(record.RunType)\"></i>\n {{ record.RunType }}\n </div>\n </div>\n }\n \n @if (record.ResponseFormat) {\n <div class=\"detail-field\">\n <label>Response Format</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-code\"></i>\n {{ record.ResponseFormat }}\n </div>\n </div>\n }\n \n <div class=\"detail-field\">\n <label>Temperature</label>\n <div class=\"detail-value\" [class.null-value]=\"record.Temperature === null || record.Temperature === undefined\">\n <i class=\"fa-solid fa-temperature-high\"></i>\n {{ record.Temperature !== null && record.Temperature !== undefined ? record.Temperature : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Top P</label>\n <div class=\"detail-value\" [class.null-value]=\"record.TopP === null || record.TopP === undefined\">\n <i class=\"fa-solid fa-percentage\"></i>\n {{ record.TopP !== null && record.TopP !== undefined ? record.TopP : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Top K</label>\n <div class=\"detail-value\" [class.null-value]=\"record.TopK === null || record.TopK === undefined\">\n <i class=\"fa-solid fa-list-ol\"></i>\n {{ record.TopK !== null && record.TopK !== undefined ? record.TopK : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Min P</label>\n <div class=\"detail-value\" [class.null-value]=\"record.MinP === null || record.MinP === undefined\">\n <i class=\"fa-solid fa-filter\"></i>\n {{ record.MinP !== null && record.MinP !== undefined ? record.MinP : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Frequency Penalty</label>\n <div class=\"detail-value\" [class.null-value]=\"record.FrequencyPenalty === null || record.FrequencyPenalty === undefined\">\n <i class=\"fa-solid fa-repeat\"></i>\n {{ record.FrequencyPenalty !== null && record.FrequencyPenalty !== undefined ? record.FrequencyPenalty : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Presence Penalty</label>\n <div class=\"detail-value\" [class.null-value]=\"record.PresencePenalty === null || record.PresencePenalty === undefined\">\n <i class=\"fa-solid fa-plus-circle\"></i>\n {{ record.PresencePenalty !== null && record.PresencePenalty !== undefined ? record.PresencePenalty : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Seed</label>\n <div class=\"detail-value\" [class.null-value]=\"record.Seed === null || record.Seed === undefined\">\n <i class=\"fa-solid fa-seedling\"></i>\n {{ record.Seed !== null && record.Seed !== undefined ? record.Seed : '\u2014' }}\n </div>\n </div>\n\n <div class=\"detail-field\">\n <label>Stop Sequences</label>\n <div class=\"detail-value\" [class.null-value]=\"!record.StopSequences\">\n <i class=\"fa-solid fa-stop-circle\"></i>\n {{ record.StopSequences || '\u2014' }}\n </div>\n </div>\n\n <div class=\"detail-field\">\n <label>Assistant Prefill</label>\n <div class=\"detail-value\" [class.null-value]=\"!record.AssistantPrefill\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n {{ record.AssistantPrefill || '\u2014' }}\n </div>\n </div>\n\n @if (record.RunAt) {\n <div class=\"detail-field\">\n <label>Started At</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-clock\"></i>\n {{ record.RunAt | date:'medium' }}\n </div>\n </div>\n }\n \n @if (record.CompletedAt) {\n <div class=\"detail-field\">\n <label>Completed At</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-check-circle\"></i>\n {{ record.CompletedAt | date:'medium' }}\n </div>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n\n <!-- Model Specific Response Details Panel -->\n @if (record.ModelSpecificResponseDetails) {\n <mj-accordion-panel [Expanded]=\"modelSpecificExpanded\" (ExpandedChange)=\"onModelSpecificPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-microchip\"></i>\n Model Specific Response Details\n <span class=\"panel-badge\">JSON</span>\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedModelSpecificResponseDetails, 'Model Specific Response Details')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedModelSpecificResponseDetails, 'json', 'Model Specific Response Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedModelSpecificResponseDetails\"\n name=\"formattedModelSpecificResponseDetails\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Model Selection & Performance Panel (v2.78 fields) -->\n <mj-accordion-panel [Expanded]=\"false\" (ExpandedChange)=\"onModelSelectionPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-microchip\"></i>\n Model Selection & Performance\n @if (record.CacheHit) {\n <span class=\"panel-badge success\">Cached</span>\n }\n @if (record.WasSelectedResult) {\n <span class=\"panel-badge success\">Selected</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"detail-fields-grid\">\n <!-- Model Selection Details -->\n <div class=\"detail-field\">\n <label>Status</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-info-circle\"></i>\n {{ record.Status || 'Unknown' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Selection Strategy</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-strategy\"></i>\n {{ record.SelectionStrategy || '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Model Power Rank</label>\n <div class=\"detail-value\" [class.null-value]=\"record.ModelPowerRank === null\">\n <i class=\"fa-solid fa-ranking-star\"></i>\n {{ record.ModelPowerRank !== null ? record.ModelPowerRank : '\u2014' }}\n </div>\n </div>\n \n <!-- Cache Information -->\n <div class=\"detail-field\">\n <label>Cache Hit</label>\n <div class=\"detail-value\">\n <i [class]=\"record.CacheHit ? 'fa-solid fa-check-circle' : 'fa-solid fa-times-circle'\"></i>\n {{ record.CacheHit ? 'Yes' : 'No' }}\n </div>\n </div>\n \n @if (record.CacheKey) {\n <div class=\"detail-field full-width\">\n <label>Cache Key</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-key\"></i>\n <code>{{ record.CacheKey }}</code>\n </div>\n </div>\n }\n \n <!-- Judge Information -->\n @if (record.JudgeID) {\n <div class=\"detail-field\">\n <label>Judge Prompt</label>\n <div class=\"detail-value clickable\" (click)=\"navigateToEntity('MJ: AI Prompts', record.JudgeID)\" title=\"View Judge Prompt\">\n <i class=\"fa-solid fa-gavel\"></i>\n {{ record.Judge || 'Unknown' }}\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n @if (record.JudgeScore !== null) {\n <div class=\"detail-field\">\n <label>Judge Score</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-star\"></i>\n {{ record.JudgeScore }}\n </div>\n </div>\n }\n \n <div class=\"detail-field\">\n <label>Was Selected Result</label>\n <div class=\"detail-value\">\n <i [class]=\"record.WasSelectedResult ? 'fa-solid fa-trophy' : 'fa-solid fa-times'\"></i>\n {{ record.WasSelectedResult ? 'Yes' : 'No' }}\n </div>\n </div>\n \n <!-- Performance Metrics -->\n <div class=\"detail-field\">\n <label>Streaming Enabled</label>\n <div class=\"detail-value\">\n <i [class]=\"record.StreamingEnabled ? 'fa-solid fa-stream' : 'fa-solid fa-ban'\"></i>\n {{ record.StreamingEnabled ? 'Yes' : 'No' }}\n </div>\n </div>\n \n @if (record.FirstTokenTime !== null) {\n <div class=\"detail-field\">\n <label>First Token Time</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-bolt\"></i>\n {{ record.FirstTokenTime }} ms\n </div>\n </div>\n }\n \n @if (record.Cancelled) {\n <div class=\"detail-field\">\n <label>Cancelled</label>\n <div class=\"detail-value error\">\n <i class=\"fa-solid fa-ban\"></i>\n Yes\n </div>\n </div>\n \n @if (record.CancellationReason) {\n <div class=\"detail-field full-width\">\n <label>Cancellation Reason</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n {{ record.CancellationReason }}\n </div>\n </div>\n }\n }\n </div>\n \n <!-- Model Selection JSON -->\n @if (record.ModelSelection) {\n <div class=\"model-selection-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Model Selection Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedModelSelection, 'json', 'Model Selection')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <div class=\"json-viewer-container\">\n <mj-code-editor\n [(ngModel)]=\"formattedModelSelection\"\n name=\"formattedModelSelection\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n \n <!-- Error Details JSON -->\n @if (record.ErrorDetails) {\n <div class=\"error-details-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Error Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedErrorDetails, 'json', 'Error Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <div class=\"json-viewer-container\">\n <mj-code-editor\n [(ngModel)]=\"formattedErrorDetails\"\n name=\"formattedErrorDetails\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n </div>\n </form>\n</mj-record-form-container>\n}\n\n<!-- Full-screen overlay -->\n @if (FullScreenContent) {\n <div class=\"fullscreen-overlay\" (click)=\"closeFullScreen()\">\n <div class=\"fullscreen-container\" (click)=\"$event.stopPropagation()\">\n <div class=\"fullscreen-header\">\n <span class=\"fullscreen-title\">\n <i class=\"fa-solid fa-expand\"></i>\n {{ FullScreenTitle }}\n </span>\n <div class=\"fullscreen-actions\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(FullScreenContent, FullScreenTitle)\"\n title=\"Copy content\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"closeFullScreen()\"\n title=\"Close\">\n <i class=\"fa-solid fa-times\"></i> Close\n </button>\n </div>\n </div>\n <div class=\"fullscreen-body\">\n <mj-code-editor\n [value]=\"FullScreenContent\"\n [readonly]=\"true\"\n [language]=\"FullScreenLanguage\"\n style=\"height: 100%; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </div>\n }", styles: ["/* Host and Container Layout */\n:host {\n display: block;\n height: 100%;\n}\n\n.record-form-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0 !important;\n overflow: hidden;\n}\n\n.form-content {\n padding: 16px;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n\n/* Error Info Styles */\n.error-info {\n margin-top: 16px;\n padding: 16px;\n background-color: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 20%, var(--mj-bg-surface));\n border-radius: 8px;\n}\n\n.finish-reason {\n margin: 0 0 12px 0;\n color: var(--mj-status-error);\n font-size: 14px;\n}\n\n.error-details {\n margin-top: 12px;\n}\n\n.error-details h4 {\n margin: 0 0 8px 0;\n color: color-mix(in srgb, var(--mj-status-error) 80%, black);\n font-size: 14px;\n font-weight: 600;\n}\n\n.error-hint {\n margin: 0;\n color: color-mix(in srgb, var(--mj-status-error) 70%, black);\n font-size: 14px;\n font-style: italic;\n}\n\n/* Header Section */\n.prompt-run-header {\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n padding: 20px;\n margin-bottom: 0;\n}\n\n.header-content {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n margin-bottom: 16px;\n}\n\n.run-overview {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n flex: 1;\n}\n\n.run-icon-wrapper {\n width: 56px;\n height: 56px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-icon-wrapper i {\n font-size: 24px;\n}\n\n.run-info {\n flex: 1;\n min-width: 0;\n}\n\n.run-title {\n margin: 0 0 8px 0;\n font-size: 1.5em;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.run-id {\n font-size: 0.8em;\n color: var(--mj-text-muted);\n font-weight: 400;\n font-family: 'Courier New', monospace;\n}\n\n.run-meta {\n display: flex;\n align-items: stretch;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n/* Shared meta-card style (Status, Execution, single Prompt) */\n.meta-card {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n}\n\n.meta-card-body {\n display: flex;\n align-items: center;\n gap: 7px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n}\n\n.meta-card-body.clickable {\n cursor: pointer;\n transition: color 0.15s;\n}\n\n.meta-card-body.clickable:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n/* Status indicator dot */\n.status-indicator {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n/* C3 Stacked Connector \u2014 Prompt Card */\n.prompt-card-c3 {\n display: flex;\n flex-direction: column;\n border-radius: 10px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n}\n\n.c3-child-section {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n font-size: 0.92em;\n font-weight: 600;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-child-section:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n.c3-child-section i.prompt-icon {\n color: var(--mj-brand-primary);\n font-size: 1rem;\n}\n\n.c3-divider {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 0 14px;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-line {\n flex: 1;\n height: 1px;\n background: var(--mj-border-default);\n}\n\n.c3-divider-label {\n font-size: 0.55rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.c3-parent-section {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 7px 14px 9px 14px;\n font-size: 0.76em;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.c3-parent-section:hover {\n color: var(--mj-text-secondary);\n}\n\n.c3-parent-section i {\n font-size: 0.75rem;\n}\n\n.c3-link-icon {\n margin-left: auto;\n font-size: 0.6rem !important;\n opacity: 0.4;\n}\n\n.c3-parent-section:hover .c3-link-icon {\n opacity: 0.8;\n}\n\n/* C3 Model Card */\n.model-card-c3 {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: border-color 0.15s;\n}\n\n.model-card-c3:hover {\n border-color: var(--mj-border-strong);\n}\n\n.c3-card-label {\n font-size: 0.6rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n padding: 4px 10px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.c3-card-body {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.c3-model-name {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.c3-model-name i {\n color: var(--mj-text-muted);\n font-size: 0.9rem;\n}\n\n.c3-vendor-name {\n font-size: 0.72em;\n color: var(--mj-text-muted);\n font-weight: 400;\n padding-left: 22px;\n}\n\n.original-run {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n font-size: 0.85em;\n}\n\n.original-link {\n color: var(--mj-status-error);\n text-decoration: none;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.original-link:hover {\n color: color-mix(in srgb, var(--mj-status-error) 85%, black);\n text-decoration: underline;\n}\n\n.run-actions {\n display: flex;\n gap: 8px;\n}\n\n/* Metrics Bar */\n.metrics-bar {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n flex-wrap: wrap;\n}\n\n.metric-item {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.metric-item > i {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n width: 24px;\n text-align: center;\n}\n\n.metric-content {\n display: flex;\n flex-direction: column;\n}\n\n.metric-label {\n font-size: 0.75em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.metric-value {\n font-size: 1.1em;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.config-link {\n color: var(--mj-brand-primary);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-link:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n text-decoration: underline;\n}\n\n/* Panels */\n.form-content {\n padding: 16px;\n}\n\n.panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n/* Nested Sub-Panel Styles */\n.sub-panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n font-size: 0.95em;\n}\n\n.sub-panel-content {\n padding: 0;\n}\n\n/* Nested accordion panel styles */\n.nested-panels mj-accordion-panel {\n margin-bottom: 8px;\n}\n\n/* Ensure chat message viewer takes appropriate height */\n.sub-panel-content mj-chat-message-viewer {\n display: block;\n min-height: 200px;\n max-height: 750px; /* Increased by 50% from 500px */\n height: auto;\n overflow: hidden;\n}\n\n/* Different colors for sub-expansion panels */\n.sub-expansion-panel {\n margin-bottom: 8px;\n}\n\n/* Sub-expansion panel styles */\n.sub-expansion-panel {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.panel-badge {\n margin-left: auto;\n padding: 2px 8px;\n border-radius: 12px;\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.panel-badge.error {\n background: var(--mj-status-error);\n color: white;\n}\n\n.panel-count {\n color: var(--mj-text-muted);\n font-weight: 400;\n font-size: 0.9em;\n}\n\n.panel-content {\n padding: 20px;\n max-height: none !important;\n overflow: visible !important;\n}\n\n/* JSON Editor Container */\n.json-editor-container {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.json-toolbar {\n background: var(--mj-bg-surface-card);\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: flex-end;\n}\n\n/* Error Message */\n.error-message {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid var(--mj-status-error);\n border-radius: 6px;\n padding: 16px;\n display: flex;\n gap: 16px;\n margin-bottom: 16px;\n}\n\n.error-message i {\n font-size: 1.5em;\n color: var(--mj-status-error);\n flex-shrink: 0;\n}\n\n.error-content h4 {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 1em;\n}\n\n.error-content p {\n margin: 0;\n color: var(--mj-text-secondary);\n}\n\n/* Empty State */\n.empty-state {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.empty-state i {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state p {\n margin: 0;\n font-size: 1.1em;\n}\n\n/* Loading State */\n.loading-state {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.loading-state i {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.6;\n color: var(--mj-brand-primary);\n}\n\n.loading-state p {\n margin: 0;\n font-size: 1.1em;\n}\n\n/* Metrics Grid */\n.metrics-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 20px;\n margin-bottom: 24px;\n}\n\n.metric-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 20px;\n}\n\n.metric-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.metric-header i {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n}\n\n.metric-header h4 {\n margin: 0;\n font-size: 0.9em;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.metric-value.large {\n font-size: 1.8em;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.metric-rollup {\n margin-top: 8px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.metric-currency {\n margin-top: 4px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n}\n\n/* Additional Metrics */\n.additional-metrics {\n padding-top: 16px;\n}\n\n.metric-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.metric-row:last-child {\n border-bottom: none;\n}\n\n.metric-row .metric-label {\n font-weight: 500;\n color: var(--mj-text-muted);\n}\n\n.metric-row .metric-value {\n font-weight: 400;\n color: var(--mj-text-primary);\n}\n\n.metric-row .metric-value.link {\n color: var(--mj-brand-primary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color 0.2s;\n}\n\n.metric-row .metric-value.link:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n}\n\n/* Hierarchy Section */\n.parent-run-section,\n.child-runs-section {\n margin-bottom: 24px;\n}\n\n.parent-run-section:last-child,\n.child-runs-section:last-child {\n margin-bottom: 0;\n}\n\n.parent-run-section h4,\n.child-runs-section h4 {\n margin: 0 0 12px 0;\n font-size: 0.95em;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.runs-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.run-item {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.run-item:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n}\n\n.run-item.parent {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n}\n\n.run-item.parent:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface));\n}\n\n.run-item-icon {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-item-content {\n flex: 1;\n min-width: 0;\n}\n\n.run-item-title {\n font-weight: 500;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.execution-order {\n background: var(--mj-text-muted);\n color: white;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.75em;\n font-weight: 600;\n}\n\n.run-item-type {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 400;\n}\n\n.run-item-meta {\n display: flex;\n align-items: center;\n gap: 16px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.run-item-meta span {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.status-indicator {\n font-weight: 500;\n}\n\n.run-item > i:last-child {\n color: var(--mj-text-muted);\n font-size: 0.85em;\n}\n\n/* Detail Fields Grid */\n.detail-fields-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 24px;\n width: 100%;\n min-height: auto;\n overflow: visible;\n}\n\n.detail-field {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-field label {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-value {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 1em;\n color: var(--mj-text-primary);\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n transition: all 0.2s;\n}\n\n.detail-value i:first-child {\n color: var(--mj-text-muted);\n font-size: 1.1em;\n width: 20px;\n text-align: center;\n}\n\n.detail-value.clickable {\n cursor: pointer;\n}\n\n.detail-value.clickable:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.detail-value.clickable i:last-child {\n margin-left: auto;\n font-size: 0.85em;\n opacity: 0.6;\n}\n\n.detail-value.clickable:hover i:last-child {\n opacity: 1;\n}\n\n.detail-value.null-value {\n color: var(--mj-text-disabled);\n font-style: italic;\n}\n\n.detail-value.null-value i:first-child {\n opacity: 0.5;\n}\n\n/* Accordion Panel Overrides */\nmj-accordion-panel {\n display: block;\n}\n\n/* Validation Panel Styles */\n.validation-summary {\n margin-bottom: 24px;\n}\n\n.summary-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.summary-header h4 {\n margin: 0;\n font-size: 1.1em;\n color: var(--mj-text-primary);\n}\n\n.validation-status {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 16px;\n border-radius: 20px;\n font-weight: 500;\n font-size: 0.9em;\n}\n\n.validation-status.success {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.validation-status.failed {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.validation-metrics {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.metric-card.small {\n padding: 16px;\n text-align: center;\n}\n\n.metric-card.small .metric-label {\n font-size: 0.8em;\n margin-bottom: 8px;\n font-weight: 600;\n}\n\n.metric-card.small .metric-value {\n font-size: 1.4em;\n font-weight: 700;\n}\n\n.validation-error,\n.common-error {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n border-radius: 8px;\n padding: 16px;\n margin-bottom: 16px;\n}\n\n.validation-error h5,\n.common-error h5 {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 0.95em;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.validation-error p,\n.common-error p {\n margin: 0;\n color: var(--mj-text-secondary);\n font-size: 0.9em;\n}\n\n.error-count {\n display: inline-block;\n margin-top: 8px;\n padding: 2px 8px;\n background: var(--mj-status-error);\n color: white;\n border-radius: 12px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n/* Retry Timeline */\n.retry-timeline {\n margin-bottom: 24px;\n}\n\n.retry-timeline h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.timeline-info {\n display: flex;\n gap: 24px;\n flex-wrap: wrap;\n}\n\n.timeline-stat {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-text-muted);\n font-size: 0.9em;\n}\n\n.timeline-stat i {\n font-size: 1.1em;\n}\n\n/* Validation Attempts */\n.validation-attempts {\n margin-bottom: 24px;\n}\n\n.validation-attempts h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.attempts-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.attempt-item {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 16px;\n}\n\n.attempt-item.success {\n background: color-mix(in srgb, var(--mj-status-success) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-success) 18%, var(--mj-bg-surface));\n}\n\n.attempt-item.failed {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n}\n\n.attempt-number {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.attempt-item.success .attempt-number {\n color: var(--mj-status-success);\n}\n\n.attempt-item.failed .attempt-number {\n color: var(--mj-status-error);\n}\n\n.attempt-details {\n flex: 1;\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n font-size: 0.85em;\n}\n\n.attempt-time {\n color: var(--mj-text-muted);\n}\n\n.attempt-error {\n color: var(--mj-status-error);\n flex: 1 0 100%;\n}\n\n.output-length {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n/* Validation JSON */\n.validation-json {\n margin-top: 24px;\n}\n\n.validation-json h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.json-viewer-container {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n/* Panel badge styles */\n.panel-badge.success {\n background: var(--mj-status-success);\n color: white;\n}\n\n/* Full-screen overlay */\n.fullscreen-overlay {\n position: fixed;\n inset: 0;\n z-index: 10000;\n background: var(--mj-bg-overlay, rgba(0, 0, 0, 0.6));\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1.5rem;\n}\n\n.fullscreen-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n max-width: 95vw;\n max-height: 95vh;\n background: var(--mj-bg-surface);\n border-radius: 10px;\n border: 1px solid var(--mj-border-default);\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n overflow: hidden;\n}\n\n.fullscreen-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.fullscreen-title {\n font-weight: 600;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.fullscreen-title i {\n color: var(--mj-text-secondary);\n}\n\n.fullscreen-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.fullscreen-body {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.fullscreen-body mj-code-editor {\n display: block;\n height: 100%;\n}\n"] }]
|
|
2336
2335
|
}], null, null); })();
|
|
2337
2336
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJAIPromptRunFormComponentExtended, { className: "MJAIPromptRunFormComponentExtended", filePath: "src/lib/custom/AIPromptRuns/ai-prompt-run-form.component.ts", lineNumber: 21 }); })();
|
|
2338
2337
|
//# sourceMappingURL=ai-prompt-run-form.component.js.map
|