@memberjunction/ng-core-entity-forms 2.50.0 → 2.52.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.
Files changed (107) hide show
  1. package/README.md +215 -1
  2. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +171 -11
  3. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  4. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +1411 -145
  5. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  6. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +40 -0
  7. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -0
  8. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +965 -0
  9. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -0
  10. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +80 -5
  11. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
  12. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +938 -448
  13. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  14. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts +40 -0
  15. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts.map +1 -0
  16. package/dist/lib/custom/Actions/action-execution-log-form.component.js +530 -0
  17. package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -0
  18. package/dist/lib/custom/Actions/action-form.component.d.ts +90 -0
  19. package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -0
  20. package/dist/lib/custom/Actions/action-form.component.js +1579 -0
  21. package/dist/lib/custom/Actions/action-form.component.js.map +1 -0
  22. package/dist/lib/custom/Actions/action-param-dialog.component.d.ts +32 -0
  23. package/dist/lib/custom/Actions/action-param-dialog.component.d.ts.map +1 -0
  24. package/dist/lib/custom/Actions/action-param-dialog.component.js +320 -0
  25. package/dist/lib/custom/Actions/action-param-dialog.component.js.map +1 -0
  26. package/dist/lib/custom/Actions/action-test-harness-dialog.component.d.ts +15 -0
  27. package/dist/lib/custom/Actions/action-test-harness-dialog.component.d.ts.map +1 -0
  28. package/dist/lib/custom/Actions/action-test-harness-dialog.component.js +96 -0
  29. package/dist/lib/custom/Actions/action-test-harness-dialog.component.js.map +1 -0
  30. package/dist/lib/custom/Actions/action-test-harness.component.d.ts +50 -0
  31. package/dist/lib/custom/Actions/action-test-harness.component.d.ts.map +1 -0
  32. package/dist/lib/custom/Actions/action-test-harness.component.js +708 -0
  33. package/dist/lib/custom/Actions/action-test-harness.component.js.map +1 -0
  34. package/dist/lib/custom/ai-test-harness/agent-execution-monitor.component.d.ts +244 -0
  35. package/dist/lib/custom/ai-test-harness/agent-execution-monitor.component.d.ts.map +1 -0
  36. package/dist/lib/custom/ai-test-harness/agent-execution-monitor.component.js +1327 -0
  37. package/dist/lib/custom/ai-test-harness/agent-execution-monitor.component.js.map +1 -0
  38. package/dist/lib/custom/ai-test-harness/agent-execution-node.component.d.ts +19 -0
  39. package/dist/lib/custom/ai-test-harness/agent-execution-node.component.d.ts.map +1 -0
  40. package/dist/lib/custom/ai-test-harness/agent-execution-node.component.js +458 -0
  41. package/dist/lib/custom/ai-test-harness/agent-execution-node.component.js.map +1 -0
  42. package/dist/lib/custom/ai-test-harness/ai-test-harness-dialog.component.d.ts +78 -0
  43. package/dist/lib/custom/ai-test-harness/ai-test-harness-dialog.component.d.ts.map +1 -0
  44. package/dist/lib/custom/ai-test-harness/ai-test-harness-dialog.component.js +157 -0
  45. package/dist/lib/custom/ai-test-harness/ai-test-harness-dialog.component.js.map +1 -0
  46. package/dist/lib/custom/ai-test-harness/ai-test-harness.component.d.ts +589 -0
  47. package/dist/lib/custom/ai-test-harness/ai-test-harness.component.d.ts.map +1 -0
  48. package/dist/lib/custom/ai-test-harness/ai-test-harness.component.js +3140 -0
  49. package/dist/lib/custom/ai-test-harness/ai-test-harness.component.js.map +1 -0
  50. package/dist/lib/custom/ai-test-harness/json-viewer-window.component.d.ts +8 -0
  51. package/dist/lib/custom/ai-test-harness/json-viewer-window.component.d.ts.map +1 -0
  52. package/dist/lib/custom/ai-test-harness/json-viewer-window.component.js +57 -0
  53. package/dist/lib/custom/ai-test-harness/json-viewer-window.component.js.map +1 -0
  54. package/dist/lib/custom/custom-forms.module.d.ts +33 -21
  55. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  56. package/dist/lib/custom/custom-forms.module.js +97 -18
  57. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  58. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +35 -0
  59. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -0
  60. package/dist/lib/custom/shared/entity-selector-dialog.component.js +290 -0
  61. package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -0
  62. package/dist/lib/custom/test-harness-dialog.service.d.ts +111 -0
  63. package/dist/lib/custom/test-harness-dialog.service.d.ts.map +1 -0
  64. package/dist/lib/custom/test-harness-dialog.service.js +211 -0
  65. package/dist/lib/custom/test-harness-dialog.service.js.map +1 -0
  66. package/dist/lib/generated/Entities/AIAgent/aiagent.form.component.js +12 -11
  67. package/dist/lib/generated/Entities/AIAgent/aiagent.form.component.js.map +1 -1
  68. package/dist/lib/generated/Entities/AIAgent/sections/aiagent-form-overview.component.d.ts +54 -0
  69. package/dist/lib/generated/Entities/AIAgent/sections/aiagent-form-overview.component.d.ts.map +1 -0
  70. package/dist/lib/generated/Entities/AIAgent/sections/aiagent-form-overview.component.js +492 -0
  71. package/dist/lib/generated/Entities/AIAgent/sections/aiagent-form-overview.component.js.map +1 -0
  72. package/dist/lib/generated/Entities/AIAgentRun/aiagentrun.form.component.js +8 -7
  73. package/dist/lib/generated/Entities/AIAgentRun/aiagentrun.form.component.js.map +1 -1
  74. package/dist/lib/generated/Entities/AIConfiguration/aiconfiguration.form.component.js +8 -7
  75. package/dist/lib/generated/Entities/AIConfiguration/aiconfiguration.form.component.js.map +1 -1
  76. package/dist/lib/generated/Entities/AIModel/aimodel.form.component.js +8 -7
  77. package/dist/lib/generated/Entities/AIModel/aimodel.form.component.js.map +1 -1
  78. package/dist/lib/generated/Entities/AIModelType/aimodeltype.form.component.js +12 -11
  79. package/dist/lib/generated/Entities/AIModelType/aimodeltype.form.component.js.map +1 -1
  80. package/dist/lib/generated/Entities/AIPrompt/aiprompt.form.component.js +12 -11
  81. package/dist/lib/generated/Entities/AIPrompt/aiprompt.form.component.js.map +1 -1
  82. package/dist/lib/generated/Entities/AIPrompt/sections/details.component.d.ts.map +1 -1
  83. package/dist/lib/generated/Entities/AIPrompt/sections/details.component.js +94 -4
  84. package/dist/lib/generated/Entities/AIPrompt/sections/details.component.js.map +1 -1
  85. package/dist/lib/generated/Entities/AIPromptRun/aipromptrun.form.component.js +12 -11
  86. package/dist/lib/generated/Entities/AIPromptRun/aipromptrun.form.component.js.map +1 -1
  87. package/dist/lib/generated/Entities/AIPromptRun/sections/details.component.d.ts.map +1 -1
  88. package/dist/lib/generated/Entities/AIPromptRun/sections/details.component.js +103 -4
  89. package/dist/lib/generated/Entities/AIPromptRun/sections/details.component.js.map +1 -1
  90. package/dist/lib/generated/Entities/AIVendor/aivendor.form.component.js +12 -11
  91. package/dist/lib/generated/Entities/AIVendor/aivendor.form.component.js.map +1 -1
  92. package/dist/lib/generated/Entities/ActionExecutionLog/sections/details.component.d.ts.map +1 -1
  93. package/dist/lib/generated/Entities/ActionExecutionLog/sections/details.component.js +13 -4
  94. package/dist/lib/generated/Entities/ActionExecutionLog/sections/details.component.js.map +1 -1
  95. package/dist/public-api.d.ts +3 -0
  96. package/dist/public-api.d.ts.map +1 -1
  97. package/dist/public-api.js +16 -0
  98. package/dist/public-api.js.map +1 -1
  99. package/package.json +12 -11
  100. package/dist/lib/custom/AIAgents/ai-agent-execution-dialog.component.d.ts +0 -52
  101. package/dist/lib/custom/AIAgents/ai-agent-execution-dialog.component.d.ts.map +0 -1
  102. package/dist/lib/custom/AIAgents/ai-agent-execution-dialog.component.js +0 -590
  103. package/dist/lib/custom/AIAgents/ai-agent-execution-dialog.component.js.map +0 -1
  104. package/dist/lib/custom/AIPrompts/ai-prompt-execution-dialog.component.d.ts +0 -94
  105. package/dist/lib/custom/AIPrompts/ai-prompt-execution-dialog.component.d.ts.map +0 -1
  106. package/dist/lib/custom/AIPrompts/ai-prompt-execution-dialog.component.js +0 -792
  107. package/dist/lib/custom/AIPrompts/ai-prompt-execution-dialog.component.js.map +0 -1
@@ -0,0 +1,965 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Component } from '@angular/core';
8
+ import { RegisterClass } from '@memberjunction/global';
9
+ import { BaseFormComponent } from '@memberjunction/ng-base-forms';
10
+ import { Metadata, RunView, CompositeKey } from '@memberjunction/core';
11
+ import { AIPromptRunFormComponent } from '../../generated/Entities/AIPromptRun/aipromptrun.form.component';
12
+ import { SharedService } from '@memberjunction/ng-shared';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "@memberjunction/ng-shared";
15
+ import * as i2 from "@angular/router";
16
+ import * as i3 from "@angular/forms";
17
+ import * as i4 from "@progress/kendo-angular-layout";
18
+ import * as i5 from "@progress/kendo-angular-buttons";
19
+ import * as i6 from "@memberjunction/ng-form-toolbar";
20
+ import * as i7 from "@memberjunction/ng-container-directives";
21
+ import * as i8 from "@memberjunction/ng-code-editor";
22
+ import * as i9 from "@angular/common";
23
+ const _forTrack0 = ($index, $item) => $item.ID;
24
+ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_11_Template(rf, ctx) { if (rf & 1) {
25
+ i0.ɵɵelementStart(0, "span", 10);
26
+ i0.ɵɵtext(1);
27
+ i0.ɵɵelementEnd();
28
+ } if (rf & 2) {
29
+ const ctx_r1 = i0.ɵɵnextContext(2);
30
+ i0.ɵɵadvance();
31
+ i0.ɵɵtextInterpolate1("#", ctx_r1.record.ID.substring(0, 8), "");
32
+ } }
33
+ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_16_Template(rf, ctx) { if (rf & 1) {
34
+ i0.ɵɵelementStart(0, "span", 31);
35
+ i0.ɵɵelement(1, "i");
36
+ i0.ɵɵtext(2);
37
+ i0.ɵɵelementEnd();
38
+ } if (rf & 2) {
39
+ const ctx_r1 = i0.ɵɵnextContext(2);
40
+ i0.ɵɵstyleProp("color", ctx_r1.getRunTypeColor(ctx_r1.record.RunType));
41
+ i0.ɵɵadvance();
42
+ i0.ɵɵclassMap("fa-solid " + ctx_r1.getRunTypeIcon(ctx_r1.record.RunType));
43
+ i0.ɵɵadvance();
44
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.record.RunType, " ");
45
+ } }
46
+ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_17_Template(rf, ctx) { if (rf & 1) {
47
+ const _r3 = i0.ɵɵgetCurrentView();
48
+ i0.ɵɵelementStart(0, "span", 32);
49
+ i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_17_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("AI Prompts", ctx_r1.prompt.ID)); });
50
+ i0.ɵɵelement(1, "i", 33);
51
+ i0.ɵɵtext(2);
52
+ i0.ɵɵelementEnd();
53
+ } if (rf & 2) {
54
+ const ctx_r1 = i0.ɵɵnextContext(2);
55
+ i0.ɵɵadvance(2);
56
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.prompt.Name, " ");
57
+ } }
58
+ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_18_Template(rf, ctx) { if (rf & 1) {
59
+ const _r4 = i0.ɵɵgetCurrentView();
60
+ i0.ɵɵelementStart(0, "span", 34);
61
+ i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_18_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("AI Models", ctx_r1.model.ID)); });
62
+ i0.ɵɵelement(1, "i", 35);
63
+ i0.ɵɵtext(2);
64
+ i0.ɵɵelementEnd();
65
+ } if (rf & 2) {
66
+ const ctx_r1 = i0.ɵɵnextContext(2);
67
+ i0.ɵɵadvance(2);
68
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.model.Name, " ");
69
+ } }
70
+ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_44_Template(rf, ctx) { if (rf & 1) {
71
+ i0.ɵɵelementStart(0, "div", 20);
72
+ i0.ɵɵelement(1, "i", 36);
73
+ i0.ɵɵelementStart(2, "div", 22)(3, "div", 23);
74
+ i0.ɵɵtext(4, "Started");
75
+ i0.ɵɵelementEnd();
76
+ i0.ɵɵelementStart(5, "div", 24);
77
+ i0.ɵɵtext(6);
78
+ i0.ɵɵpipe(7, "date");
79
+ i0.ɵɵelementEnd()()();
80
+ } if (rf & 2) {
81
+ const ctx_r1 = i0.ɵɵnextContext(2);
82
+ i0.ɵɵadvance(6);
83
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(7, 1, ctx_r1.record.RunAt, "short"));
84
+ } }
85
+ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_3_Template(rf, ctx) { if (rf & 1) {
86
+ i0.ɵɵelementStart(0, "span", 38);
87
+ i0.ɵɵtext(1, "JSON");
88
+ i0.ɵɵelementEnd();
89
+ } }
90
+ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Template(rf, ctx) { if (rf & 1) {
91
+ i0.ɵɵelementStart(0, "span", 37);
92
+ i0.ɵɵelement(1, "i", 33);
93
+ i0.ɵɵtext(2, " Input Messages ");
94
+ i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_3_Template, 2, 0, "span", 38);
95
+ i0.ɵɵelementEnd();
96
+ } if (rf & 2) {
97
+ const ctx_r1 = i0.ɵɵnextContext(2);
98
+ i0.ɵɵadvance(3);
99
+ i0.ɵɵconditional(ctx_r1.record.Messages && ctx_r1.record.Messages.trim() !== "" ? 3 : -1);
100
+ } }
101
+ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_49_Conditional_1_Template(rf, ctx) { if (rf & 1) {
102
+ const _r5 = i0.ɵɵgetCurrentView();
103
+ i0.ɵɵelementStart(0, "div", 40)(1, "div", 42)(2, "kendo-button", 43);
104
+ i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_49_Conditional_1_Template_kendo_button_click_2_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedMessages, "Messages")); });
105
+ i0.ɵɵelement(3, "i", 44);
106
+ i0.ɵɵtext(4, " Copy ");
107
+ i0.ɵɵelementEnd()();
108
+ i0.ɵɵelementStart(5, "mj-code-editor", 45);
109
+ i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_49_Conditional_1_Template_mj_code_editor_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedMessages, $event) || (ctx_r1.formattedMessages = $event); return i0.ɵɵresetView($event); });
110
+ i0.ɵɵelementEnd()();
111
+ } if (rf & 2) {
112
+ const ctx_r1 = i0.ɵɵnextContext(3);
113
+ i0.ɵɵadvance(5);
114
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedMessages);
115
+ i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
116
+ } }
117
+ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_49_Conditional_2_Template(rf, ctx) { if (rf & 1) {
118
+ i0.ɵɵelementStart(0, "div", 41);
119
+ i0.ɵɵelement(1, "i", 46);
120
+ i0.ɵɵelementStart(2, "p");
121
+ i0.ɵɵtext(3, "No input messages recorded");
122
+ i0.ɵɵelementEnd()();
123
+ } }
124
+ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_49_Template(rf, ctx) { if (rf & 1) {
125
+ i0.ɵɵelementStart(0, "div", 39);
126
+ i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_ng_template_49_Conditional_1_Template, 6, 4, "div", 40)(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_49_Conditional_2_Template, 4, 0, "div", 41);
127
+ i0.ɵɵelementEnd();
128
+ } if (rf & 2) {
129
+ const ctx_r1 = i0.ɵɵnextContext(2);
130
+ i0.ɵɵadvance();
131
+ i0.ɵɵconditional(ctx_r1.record.Messages && ctx_r1.record.Messages.trim() !== "" ? 1 : 2);
132
+ } }
133
+ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_51_Conditional_3_Template(rf, ctx) { if (rf & 1) {
134
+ i0.ɵɵelementStart(0, "span", 38);
135
+ i0.ɵɵtext(1, "JSON");
136
+ i0.ɵɵelementEnd();
137
+ } }
138
+ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_51_Conditional_4_Template(rf, ctx) { if (rf & 1) {
139
+ i0.ɵɵelementStart(0, "span", 48);
140
+ i0.ɵɵtext(1, "Error");
141
+ i0.ɵɵelementEnd();
142
+ } }
143
+ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_51_Template(rf, ctx) { if (rf & 1) {
144
+ i0.ɵɵelementStart(0, "span", 37);
145
+ i0.ɵɵelement(1, "i", 47);
146
+ i0.ɵɵtext(2, " Result ");
147
+ i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_51_Conditional_3_Template, 2, 0, "span", 38)(4, AIPromptRunFormComponentExtended_Conditional_1_ng_template_51_Conditional_4_Template, 2, 0, "span", 48);
148
+ i0.ɵɵelementEnd();
149
+ } if (rf & 2) {
150
+ const ctx_r1 = i0.ɵɵnextContext(2);
151
+ i0.ɵɵadvance(3);
152
+ i0.ɵɵconditional(ctx_r1.record.Result && ctx_r1.record.Result.trim() !== "" ? 3 : -1);
153
+ i0.ɵɵadvance();
154
+ i0.ɵɵconditional(ctx_r1.record.ErrorMessage ? 4 : -1);
155
+ } }
156
+ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_52_Conditional_1_Template(rf, ctx) { if (rf & 1) {
157
+ i0.ɵɵelementStart(0, "div", 49);
158
+ i0.ɵɵelement(1, "i", 50);
159
+ i0.ɵɵelementStart(2, "div", 51)(3, "h4");
160
+ i0.ɵɵtext(4, "Error Message");
161
+ i0.ɵɵelementEnd();
162
+ i0.ɵɵelementStart(5, "p");
163
+ i0.ɵɵtext(6);
164
+ i0.ɵɵelementEnd()()();
165
+ } if (rf & 2) {
166
+ const ctx_r1 = i0.ɵɵnextContext(3);
167
+ i0.ɵɵadvance(6);
168
+ i0.ɵɵtextInterpolate(ctx_r1.record.ErrorMessage);
169
+ } }
170
+ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_52_Conditional_2_Template(rf, ctx) { if (rf & 1) {
171
+ const _r6 = i0.ɵɵgetCurrentView();
172
+ i0.ɵɵelementStart(0, "div", 40)(1, "div", 42)(2, "kendo-button", 43);
173
+ i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_52_Conditional_2_Template_kendo_button_click_2_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedResult, "Result")); });
174
+ i0.ɵɵelement(3, "i", 44);
175
+ i0.ɵɵtext(4, " Copy ");
176
+ i0.ɵɵelementEnd()();
177
+ i0.ɵɵelementStart(5, "mj-code-editor", 52);
178
+ i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_52_Conditional_2_Template_mj_code_editor_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedResult, $event) || (ctx_r1.formattedResult = $event); return i0.ɵɵresetView($event); });
179
+ i0.ɵɵelementEnd()();
180
+ } if (rf & 2) {
181
+ const ctx_r1 = i0.ɵɵnextContext(3);
182
+ i0.ɵɵadvance(5);
183
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedResult);
184
+ i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
185
+ } }
186
+ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_52_Conditional_3_Template(rf, ctx) { if (rf & 1) {
187
+ i0.ɵɵelementStart(0, "div", 41);
188
+ i0.ɵɵelement(1, "i", 53);
189
+ i0.ɵɵelementStart(2, "p");
190
+ i0.ɵɵtext(3, "No result data recorded");
191
+ i0.ɵɵelementEnd()();
192
+ } }
193
+ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_52_Template(rf, ctx) { if (rf & 1) {
194
+ i0.ɵɵelementStart(0, "div", 39);
195
+ i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_ng_template_52_Conditional_1_Template, 7, 1, "div", 49)(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_52_Conditional_2_Template, 6, 4, "div", 40)(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_52_Conditional_3_Template, 4, 0, "div", 41);
196
+ i0.ɵɵelementEnd();
197
+ } if (rf & 2) {
198
+ const ctx_r1 = i0.ɵɵnextContext(2);
199
+ i0.ɵɵadvance();
200
+ i0.ɵɵconditional(ctx_r1.record.ErrorMessage ? 1 : -1);
201
+ i0.ɵɵadvance();
202
+ i0.ɵɵconditional(ctx_r1.record.Result && ctx_r1.record.Result.trim() !== "" ? 2 : !ctx_r1.record.ErrorMessage ? 3 : -1);
203
+ } }
204
+ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Template(rf, ctx) { if (rf & 1) {
205
+ i0.ɵɵelementStart(0, "span", 37);
206
+ i0.ɵɵelement(1, "i", 54);
207
+ i0.ɵɵtext(2, " Token Usage & Metrics ");
208
+ i0.ɵɵelementEnd();
209
+ } }
210
+ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_55_Conditional_9_Template(rf, ctx) { if (rf & 1) {
211
+ i0.ɵɵelementStart(0, "div", 60)(1, "span");
212
+ i0.ɵɵtext(2);
213
+ i0.ɵɵelementEnd()();
214
+ } if (rf & 2) {
215
+ const ctx_r1 = i0.ɵɵnextContext(3);
216
+ i0.ɵɵadvance(2);
217
+ i0.ɵɵtextInterpolate1("Rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensPromptRollup), "");
218
+ } }
219
+ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_55_Conditional_17_Template(rf, ctx) { if (rf & 1) {
220
+ i0.ɵɵelementStart(0, "div", 60)(1, "span");
221
+ i0.ɵɵtext(2);
222
+ i0.ɵɵelementEnd()();
223
+ } if (rf & 2) {
224
+ const ctx_r1 = i0.ɵɵnextContext(3);
225
+ i0.ɵɵadvance(2);
226
+ i0.ɵɵtextInterpolate1("Rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensCompletionRollup), "");
227
+ } }
228
+ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_55_Conditional_25_Template(rf, ctx) { if (rf & 1) {
229
+ i0.ɵɵelementStart(0, "div", 60)(1, "span");
230
+ i0.ɵɵtext(2);
231
+ i0.ɵɵelementEnd()();
232
+ } if (rf & 2) {
233
+ const ctx_r1 = i0.ɵɵnextContext(3);
234
+ i0.ɵɵadvance(2);
235
+ i0.ɵɵtextInterpolate1("Rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensUsedRollup), "");
236
+ } }
237
+ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_55_Conditional_33_Template(rf, ctx) { if (rf & 1) {
238
+ i0.ɵɵelementStart(0, "div", 60)(1, "span");
239
+ i0.ɵɵtext(2);
240
+ i0.ɵɵelementEnd()();
241
+ } if (rf & 2) {
242
+ const ctx_r1 = i0.ɵɵnextContext(3);
243
+ i0.ɵɵadvance(2);
244
+ i0.ɵɵtextInterpolate1("Total: ", ctx_r1.formatCost(ctx_r1.record.TotalCost), "");
245
+ } }
246
+ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_55_Conditional_34_Template(rf, ctx) { if (rf & 1) {
247
+ i0.ɵɵelementStart(0, "div", 62);
248
+ i0.ɵɵtext(1);
249
+ i0.ɵɵelementEnd();
250
+ } if (rf & 2) {
251
+ const ctx_r1 = i0.ɵɵnextContext(3);
252
+ i0.ɵɵadvance();
253
+ i0.ɵɵtextInterpolate(ctx_r1.record.CostCurrency);
254
+ } }
255
+ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_55_Conditional_36_Template(rf, ctx) { if (rf & 1) {
256
+ i0.ɵɵelementStart(0, "div", 64)(1, "span", 23);
257
+ i0.ɵɵtext(2, "Execution Order:");
258
+ i0.ɵɵelementEnd();
259
+ i0.ɵɵelementStart(3, "span", 24);
260
+ i0.ɵɵtext(4);
261
+ i0.ɵɵelementEnd()();
262
+ } if (rf & 2) {
263
+ const ctx_r1 = i0.ɵɵnextContext(3);
264
+ i0.ɵɵadvance(4);
265
+ i0.ɵɵtextInterpolate(ctx_r1.record.ExecutionOrder);
266
+ } }
267
+ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_55_Conditional_37_Template(rf, ctx) { if (rf & 1) {
268
+ i0.ɵɵelementStart(0, "div", 64)(1, "span", 23);
269
+ i0.ɵɵtext(2, "Configuration:");
270
+ i0.ɵɵelementEnd();
271
+ i0.ɵɵelementStart(3, "span", 24);
272
+ i0.ɵɵtext(4);
273
+ i0.ɵɵelementEnd()();
274
+ } if (rf & 2) {
275
+ const ctx_r1 = i0.ɵɵnextContext(3);
276
+ i0.ɵɵadvance(4);
277
+ i0.ɵɵtextInterpolate(ctx_r1.record.Configuration);
278
+ } }
279
+ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_55_Conditional_38_Template(rf, ctx) { if (rf & 1) {
280
+ const _r7 = i0.ɵɵgetCurrentView();
281
+ i0.ɵɵelementStart(0, "div", 64)(1, "span", 23);
282
+ i0.ɵɵtext(2, "Agent:");
283
+ i0.ɵɵelementEnd();
284
+ i0.ɵɵelementStart(3, "span", 65);
285
+ i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_55_Conditional_38_Template_span_click_3_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("AI Agents", ctx_r1.record.AgentID)); });
286
+ i0.ɵɵtext(4);
287
+ i0.ɵɵelement(5, "i", 66);
288
+ i0.ɵɵelementEnd()();
289
+ } if (rf & 2) {
290
+ const ctx_r1 = i0.ɵɵnextContext(3);
291
+ i0.ɵɵadvance(4);
292
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Agent, " ");
293
+ } }
294
+ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_55_Template(rf, ctx) { if (rf & 1) {
295
+ i0.ɵɵelementStart(0, "div", 39)(1, "div", 55)(2, "div", 56)(3, "div", 57);
296
+ i0.ɵɵelement(4, "i", 58);
297
+ i0.ɵɵelementStart(5, "h4");
298
+ i0.ɵɵtext(6, "Prompt Tokens");
299
+ i0.ɵɵelementEnd()();
300
+ i0.ɵɵelementStart(7, "div", 59);
301
+ i0.ɵɵtext(8);
302
+ i0.ɵɵelementEnd();
303
+ i0.ɵɵtemplate(9, AIPromptRunFormComponentExtended_Conditional_1_ng_template_55_Conditional_9_Template, 3, 1, "div", 60);
304
+ i0.ɵɵelementEnd();
305
+ i0.ɵɵelementStart(10, "div", 56)(11, "div", 57);
306
+ i0.ɵɵelement(12, "i", 61);
307
+ i0.ɵɵelementStart(13, "h4");
308
+ i0.ɵɵtext(14, "Completion Tokens");
309
+ i0.ɵɵelementEnd()();
310
+ i0.ɵɵelementStart(15, "div", 59);
311
+ i0.ɵɵtext(16);
312
+ i0.ɵɵelementEnd();
313
+ i0.ɵɵtemplate(17, AIPromptRunFormComponentExtended_Conditional_1_ng_template_55_Conditional_17_Template, 3, 1, "div", 60);
314
+ i0.ɵɵelementEnd();
315
+ i0.ɵɵelementStart(18, "div", 56)(19, "div", 57);
316
+ i0.ɵɵelement(20, "i", 25);
317
+ i0.ɵɵelementStart(21, "h4");
318
+ i0.ɵɵtext(22, "Total Tokens");
319
+ i0.ɵɵelementEnd()();
320
+ i0.ɵɵelementStart(23, "div", 59);
321
+ i0.ɵɵtext(24);
322
+ i0.ɵɵelementEnd();
323
+ i0.ɵɵtemplate(25, AIPromptRunFormComponentExtended_Conditional_1_ng_template_55_Conditional_25_Template, 3, 1, "div", 60);
324
+ i0.ɵɵelementEnd();
325
+ i0.ɵɵelementStart(26, "div", 56)(27, "div", 57);
326
+ i0.ɵɵelement(28, "i", 26);
327
+ i0.ɵɵelementStart(29, "h4");
328
+ i0.ɵɵtext(30, "Cost");
329
+ i0.ɵɵelementEnd()();
330
+ i0.ɵɵelementStart(31, "div", 59);
331
+ i0.ɵɵtext(32);
332
+ i0.ɵɵelementEnd();
333
+ i0.ɵɵtemplate(33, AIPromptRunFormComponentExtended_Conditional_1_ng_template_55_Conditional_33_Template, 3, 1, "div", 60)(34, AIPromptRunFormComponentExtended_Conditional_1_ng_template_55_Conditional_34_Template, 2, 1, "div", 62);
334
+ i0.ɵɵelementEnd()();
335
+ i0.ɵɵelementStart(35, "div", 63);
336
+ i0.ɵɵtemplate(36, AIPromptRunFormComponentExtended_Conditional_1_ng_template_55_Conditional_36_Template, 5, 1, "div", 64)(37, AIPromptRunFormComponentExtended_Conditional_1_ng_template_55_Conditional_37_Template, 5, 1, "div", 64)(38, AIPromptRunFormComponentExtended_Conditional_1_ng_template_55_Conditional_38_Template, 6, 1, "div", 64);
337
+ i0.ɵɵelementEnd()();
338
+ } if (rf & 2) {
339
+ const ctx_r1 = i0.ɵɵnextContext(2);
340
+ i0.ɵɵadvance(8);
341
+ i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.record.TokensPrompt));
342
+ i0.ɵɵadvance();
343
+ i0.ɵɵconditional(ctx_r1.record.TokensPromptRollup && ctx_r1.record.TokensPromptRollup !== ctx_r1.record.TokensPrompt ? 9 : -1);
344
+ i0.ɵɵadvance(7);
345
+ i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.record.TokensCompletion));
346
+ i0.ɵɵadvance();
347
+ i0.ɵɵconditional(ctx_r1.record.TokensCompletionRollup && ctx_r1.record.TokensCompletionRollup !== ctx_r1.record.TokensCompletion ? 17 : -1);
348
+ i0.ɵɵadvance(7);
349
+ i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.record.TokensUsed));
350
+ i0.ɵɵadvance();
351
+ i0.ɵɵconditional(ctx_r1.record.TokensUsedRollup && ctx_r1.record.TokensUsedRollup !== ctx_r1.record.TokensUsed ? 25 : -1);
352
+ i0.ɵɵadvance(7);
353
+ i0.ɵɵtextInterpolate(ctx_r1.formatCost(ctx_r1.record.Cost));
354
+ i0.ɵɵadvance();
355
+ i0.ɵɵconditional(ctx_r1.record.TotalCost && ctx_r1.record.TotalCost !== ctx_r1.record.Cost ? 33 : -1);
356
+ i0.ɵɵadvance();
357
+ i0.ɵɵconditional(ctx_r1.record.CostCurrency ? 34 : -1);
358
+ i0.ɵɵadvance(2);
359
+ i0.ɵɵconditional(ctx_r1.record.ExecutionOrder !== null ? 36 : -1);
360
+ i0.ɵɵadvance();
361
+ i0.ɵɵconditional(ctx_r1.record.ConfigurationID ? 37 : -1);
362
+ i0.ɵɵadvance();
363
+ i0.ɵɵconditional(ctx_r1.record.AgentID ? 38 : -1);
364
+ } }
365
+ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_56_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
366
+ i0.ɵɵelementStart(0, "span", 68);
367
+ i0.ɵɵtext(1);
368
+ i0.ɵɵelementEnd();
369
+ } if (rf & 2) {
370
+ const ctx_r1 = i0.ɵɵnextContext(4);
371
+ i0.ɵɵadvance();
372
+ i0.ɵɵtextInterpolate1("(", ctx_r1.childRuns.length, " children)");
373
+ } }
374
+ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_56_ng_template_1_Template(rf, ctx) { if (rf & 1) {
375
+ i0.ɵɵelementStart(0, "span", 37);
376
+ i0.ɵɵelement(1, "i", 67);
377
+ i0.ɵɵtext(2, " Run Hierarchy ");
378
+ i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_Conditional_56_ng_template_1_Conditional_3_Template, 2, 1, "span", 68);
379
+ i0.ɵɵelementEnd();
380
+ } if (rf & 2) {
381
+ const ctx_r1 = i0.ɵɵnextContext(3);
382
+ i0.ɵɵadvance(3);
383
+ i0.ɵɵconditional(ctx_r1.childRuns.length > 0 ? 3 : -1);
384
+ } }
385
+ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_56_ng_template_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
386
+ const _r8 = i0.ɵɵgetCurrentView();
387
+ i0.ɵɵelementStart(0, "div", 69)(1, "h4");
388
+ i0.ɵɵelement(2, "i", 71);
389
+ i0.ɵɵtext(3, " Parent Run");
390
+ i0.ɵɵelementEnd();
391
+ i0.ɵɵelementStart(4, "div", 72);
392
+ i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_56_ng_template_2_Conditional_1_Template_div_click_4_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompt Runs", ctx_r1.parentRun.ID)); });
393
+ i0.ɵɵelementStart(5, "div", 73);
394
+ i0.ɵɵelement(6, "i");
395
+ i0.ɵɵelementEnd();
396
+ i0.ɵɵelementStart(7, "div", 74)(8, "div", 75);
397
+ i0.ɵɵtext(9);
398
+ i0.ɵɵelementStart(10, "span", 76);
399
+ i0.ɵɵtext(11);
400
+ i0.ɵɵelementEnd()();
401
+ i0.ɵɵelementStart(12, "div", 77)(13, "span");
402
+ i0.ɵɵelement(14, "i", 21);
403
+ i0.ɵɵtext(15);
404
+ i0.ɵɵelementEnd();
405
+ i0.ɵɵelementStart(16, "span");
406
+ i0.ɵɵelement(17, "i", 25);
407
+ i0.ɵɵtext(18);
408
+ i0.ɵɵelementEnd();
409
+ i0.ɵɵelementStart(19, "span");
410
+ i0.ɵɵelement(20, "i", 36);
411
+ i0.ɵɵtext(21);
412
+ i0.ɵɵpipe(22, "date");
413
+ i0.ɵɵelementEnd()()();
414
+ i0.ɵɵelement(23, "i", 66);
415
+ i0.ɵɵelementEnd()();
416
+ } if (rf & 2) {
417
+ const ctx_r1 = i0.ɵɵnextContext(4);
418
+ i0.ɵɵadvance(5);
419
+ i0.ɵɵstyleProp("background-color", ctx_r1.getStatusColor() + "20");
420
+ i0.ɵɵadvance();
421
+ i0.ɵɵclassMap("fa-solid " + ctx_r1.getRunTypeIcon(ctx_r1.parentRun.RunType));
422
+ i0.ɵɵadvance(3);
423
+ i0.ɵɵtextInterpolate1(" Parent Run #", ctx_r1.parentRun.ID.substring(0, 8), " ");
424
+ i0.ɵɵadvance(2);
425
+ i0.ɵɵtextInterpolate(ctx_r1.parentRun.RunType);
426
+ i0.ɵɵadvance(4);
427
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(ctx_r1.parentRun.ExecutionTimeMS), "");
428
+ i0.ɵɵadvance(3);
429
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.formatTokens(ctx_r1.parentRun.TokensUsed), "");
430
+ i0.ɵɵadvance(3);
431
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(22, 9, ctx_r1.parentRun.RunAt, "short"), "");
432
+ } }
433
+ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_56_ng_template_2_Conditional_2_For_6_Conditional_6_Template(rf, ctx) { if (rf & 1) {
434
+ i0.ɵɵelementStart(0, "span", 82);
435
+ i0.ɵɵtext(1);
436
+ i0.ɵɵelementEnd();
437
+ } if (rf & 2) {
438
+ const childRun_r10 = i0.ɵɵnextContext().$implicit;
439
+ i0.ɵɵadvance();
440
+ i0.ɵɵtextInterpolate1("#", childRun_r10.ExecutionOrder, "");
441
+ } }
442
+ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_56_ng_template_2_Conditional_2_For_6_Template(rf, ctx) { if (rf & 1) {
443
+ const _r9 = i0.ɵɵgetCurrentView();
444
+ i0.ɵɵelementStart(0, "div", 81);
445
+ i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_56_ng_template_2_Conditional_2_For_6_Template_div_click_0_listener() { const childRun_r10 = i0.ɵɵrestoreView(_r9).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompt Runs", childRun_r10.ID)); });
446
+ i0.ɵɵelementStart(1, "div", 73);
447
+ i0.ɵɵelement(2, "i");
448
+ i0.ɵɵelementEnd();
449
+ i0.ɵɵelementStart(3, "div", 74)(4, "div", 75);
450
+ i0.ɵɵtext(5);
451
+ i0.ɵɵtemplate(6, AIPromptRunFormComponentExtended_Conditional_1_Conditional_56_ng_template_2_Conditional_2_For_6_Conditional_6_Template, 2, 1, "span", 82);
452
+ i0.ɵɵelementStart(7, "span", 76);
453
+ i0.ɵɵtext(8);
454
+ i0.ɵɵelementEnd()();
455
+ i0.ɵɵelementStart(9, "div", 77)(10, "span", 83);
456
+ i0.ɵɵelement(11, "i");
457
+ i0.ɵɵtext(12);
458
+ i0.ɵɵelementEnd();
459
+ i0.ɵɵelementStart(13, "span");
460
+ i0.ɵɵelement(14, "i", 21);
461
+ i0.ɵɵtext(15);
462
+ i0.ɵɵelementEnd();
463
+ i0.ɵɵelementStart(16, "span");
464
+ i0.ɵɵelement(17, "i", 25);
465
+ i0.ɵɵtext(18);
466
+ i0.ɵɵelementEnd()()();
467
+ i0.ɵɵelement(19, "i", 66);
468
+ i0.ɵɵelementEnd();
469
+ } if (rf & 2) {
470
+ const childRun_r10 = ctx.$implicit;
471
+ const ctx_r1 = i0.ɵɵnextContext(5);
472
+ i0.ɵɵadvance();
473
+ i0.ɵɵstyleProp("background-color", ctx_r1.getStatusColor() + "20");
474
+ i0.ɵɵadvance();
475
+ i0.ɵɵclassMap("fa-solid " + ctx_r1.getRunTypeIcon(childRun_r10.RunType));
476
+ i0.ɵɵadvance(3);
477
+ i0.ɵɵtextInterpolate1(" Child Run #", childRun_r10.ID.substring(0, 8), " ");
478
+ i0.ɵɵadvance();
479
+ i0.ɵɵconditional(childRun_r10.ExecutionOrder !== null ? 6 : -1);
480
+ i0.ɵɵadvance(2);
481
+ i0.ɵɵtextInterpolate(childRun_r10.RunType);
482
+ i0.ɵɵadvance(2);
483
+ i0.ɵɵstyleProp("color", ctx_r1.getStatusColor());
484
+ i0.ɵɵadvance();
485
+ i0.ɵɵclassMap("fa-solid " + ctx_r1.getStatusIcon());
486
+ i0.ɵɵadvance();
487
+ i0.ɵɵtextInterpolate1(" ", childRun_r10.Success ? "Success" : childRun_r10.ErrorMessage ? "Failed" : "Running", " ");
488
+ i0.ɵɵadvance(3);
489
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(childRun_r10.ExecutionTimeMS), "");
490
+ i0.ɵɵadvance(3);
491
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.formatTokens(childRun_r10.TokensUsed), "");
492
+ } }
493
+ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_56_ng_template_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
494
+ i0.ɵɵelementStart(0, "div", 70)(1, "h4");
495
+ i0.ɵɵelement(2, "i", 78);
496
+ i0.ɵɵtext(3, " Child Runs");
497
+ i0.ɵɵelementEnd();
498
+ i0.ɵɵelementStart(4, "div", 79);
499
+ i0.ɵɵrepeaterCreate(5, AIPromptRunFormComponentExtended_Conditional_1_Conditional_56_ng_template_2_Conditional_2_For_6_Template, 20, 14, "div", 80, _forTrack0);
500
+ i0.ɵɵelementEnd()();
501
+ } if (rf & 2) {
502
+ const ctx_r1 = i0.ɵɵnextContext(4);
503
+ i0.ɵɵadvance(5);
504
+ i0.ɵɵrepeater(ctx_r1.childRuns);
505
+ } }
506
+ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_56_ng_template_2_Template(rf, ctx) { if (rf & 1) {
507
+ i0.ɵɵelementStart(0, "div", 39);
508
+ i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Conditional_56_ng_template_2_Conditional_1_Template, 24, 12, "div", 69)(2, AIPromptRunFormComponentExtended_Conditional_1_Conditional_56_ng_template_2_Conditional_2_Template, 7, 0, "div", 70);
509
+ i0.ɵɵelementEnd();
510
+ } if (rf & 2) {
511
+ const ctx_r1 = i0.ɵɵnextContext(3);
512
+ i0.ɵɵadvance();
513
+ i0.ɵɵconditional(ctx_r1.parentRun ? 1 : -1);
514
+ i0.ɵɵadvance();
515
+ i0.ɵɵconditional(ctx_r1.childRuns.length > 0 ? 2 : -1);
516
+ } }
517
+ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_56_Template(rf, ctx) { if (rf & 1) {
518
+ i0.ɵɵelementStart(0, "kendo-panelbar-item", 28);
519
+ i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Conditional_56_ng_template_1_Template, 4, 1, "ng-template", 29)(2, AIPromptRunFormComponentExtended_Conditional_1_Conditional_56_ng_template_2_Template, 3, 2, "ng-template", 30);
520
+ i0.ɵɵelementEnd();
521
+ } if (rf & 2) {
522
+ const ctx_r1 = i0.ɵɵnextContext(2);
523
+ i0.ɵɵproperty("expanded", ctx_r1.hierarchyExpanded);
524
+ } }
525
+ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_58_Template(rf, ctx) { if (rf & 1) {
526
+ i0.ɵɵelementStart(0, "span", 37);
527
+ i0.ɵɵelement(1, "i", 84);
528
+ i0.ɵɵtext(2, " Additional Details ");
529
+ i0.ɵɵelementEnd();
530
+ } }
531
+ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_59_Conditional_2_Template(rf, ctx) { if (rf & 1) {
532
+ const _r11 = i0.ɵɵgetCurrentView();
533
+ i0.ɵɵelementStart(0, "div", 86)(1, "label");
534
+ i0.ɵɵtext(2, "Vendor");
535
+ i0.ɵɵelementEnd();
536
+ i0.ɵɵelementStart(3, "div", 87);
537
+ i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_59_Conditional_2_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Vendors", ctx_r1.record.VendorID)); });
538
+ i0.ɵɵelement(4, "i", 88);
539
+ i0.ɵɵtext(5);
540
+ i0.ɵɵelement(6, "i", 66);
541
+ i0.ɵɵelementEnd()();
542
+ } if (rf & 2) {
543
+ const ctx_r1 = i0.ɵɵnextContext(3);
544
+ i0.ɵɵadvance(5);
545
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Vendor || "Unknown", " ");
546
+ } }
547
+ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_59_Conditional_3_Template(rf, ctx) { if (rf & 1) {
548
+ const _r12 = i0.ɵɵgetCurrentView();
549
+ i0.ɵɵelementStart(0, "div", 86)(1, "label");
550
+ i0.ɵɵtext(2, "Agent");
551
+ i0.ɵɵelementEnd();
552
+ i0.ɵɵelementStart(3, "div", 89);
553
+ i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_59_Conditional_3_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("AI Agents", ctx_r1.record.AgentID)); });
554
+ i0.ɵɵelement(4, "i", 90);
555
+ i0.ɵɵtext(5);
556
+ i0.ɵɵelement(6, "i", 66);
557
+ i0.ɵɵelementEnd()();
558
+ } if (rf & 2) {
559
+ const ctx_r1 = i0.ɵɵnextContext(3);
560
+ i0.ɵɵadvance(5);
561
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Agent || "Unknown", " ");
562
+ } }
563
+ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_59_Conditional_4_Template(rf, ctx) { if (rf & 1) {
564
+ i0.ɵɵelementStart(0, "div", 86)(1, "label");
565
+ i0.ɵɵtext(2, "Configuration");
566
+ i0.ɵɵelementEnd();
567
+ i0.ɵɵelementStart(3, "div", 91);
568
+ i0.ɵɵelement(4, "i", 92);
569
+ i0.ɵɵtext(5);
570
+ i0.ɵɵelementEnd()();
571
+ } if (rf & 2) {
572
+ const ctx_r1 = i0.ɵɵnextContext(3);
573
+ i0.ɵɵadvance(5);
574
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Configuration || "Unknown", " ");
575
+ } }
576
+ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_59_Conditional_5_Template(rf, ctx) { if (rf & 1) {
577
+ i0.ɵɵelementStart(0, "div", 86)(1, "label");
578
+ i0.ɵɵtext(2, "Started At");
579
+ i0.ɵɵelementEnd();
580
+ i0.ɵɵelementStart(3, "div", 91);
581
+ i0.ɵɵelement(4, "i", 21);
582
+ i0.ɵɵtext(5);
583
+ i0.ɵɵpipe(6, "date");
584
+ i0.ɵɵelementEnd()();
585
+ } if (rf & 2) {
586
+ const ctx_r1 = i0.ɵɵnextContext(3);
587
+ i0.ɵɵadvance(5);
588
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(6, 1, ctx_r1.record.RunAt, "medium"), " ");
589
+ } }
590
+ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_59_Conditional_6_Template(rf, ctx) { if (rf & 1) {
591
+ i0.ɵɵelementStart(0, "div", 86)(1, "label");
592
+ i0.ɵɵtext(2, "Completed At");
593
+ i0.ɵɵelementEnd();
594
+ i0.ɵɵelementStart(3, "div", 91);
595
+ i0.ɵɵelement(4, "i", 93);
596
+ i0.ɵɵtext(5);
597
+ i0.ɵɵpipe(6, "date");
598
+ i0.ɵɵelementEnd()();
599
+ } if (rf & 2) {
600
+ const ctx_r1 = i0.ɵɵnextContext(3);
601
+ i0.ɵɵadvance(5);
602
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(6, 1, ctx_r1.record.CompletedAt, "medium"), " ");
603
+ } }
604
+ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_59_Template(rf, ctx) { if (rf & 1) {
605
+ i0.ɵɵelementStart(0, "div", 39)(1, "div", 85);
606
+ i0.ɵɵtemplate(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_59_Conditional_2_Template, 7, 1, "div", 86)(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_59_Conditional_3_Template, 7, 1, "div", 86)(4, AIPromptRunFormComponentExtended_Conditional_1_ng_template_59_Conditional_4_Template, 6, 1, "div", 86)(5, AIPromptRunFormComponentExtended_Conditional_1_ng_template_59_Conditional_5_Template, 7, 4, "div", 86)(6, AIPromptRunFormComponentExtended_Conditional_1_ng_template_59_Conditional_6_Template, 7, 4, "div", 86);
607
+ i0.ɵɵelementEnd()();
608
+ } if (rf & 2) {
609
+ const ctx_r1 = i0.ɵɵnextContext(2);
610
+ i0.ɵɵadvance(2);
611
+ i0.ɵɵconditional(ctx_r1.record.VendorID ? 2 : -1);
612
+ i0.ɵɵadvance();
613
+ i0.ɵɵconditional(ctx_r1.record.AgentID ? 3 : -1);
614
+ i0.ɵɵadvance();
615
+ i0.ɵɵconditional(ctx_r1.record.ConfigurationID ? 4 : -1);
616
+ i0.ɵɵadvance();
617
+ i0.ɵɵconditional(ctx_r1.record.RunAt ? 5 : -1);
618
+ i0.ɵɵadvance();
619
+ i0.ɵɵconditional(ctx_r1.record.CompletedAt ? 6 : -1);
620
+ } }
621
+ function AIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if (rf & 1) {
622
+ const _r1 = i0.ɵɵgetCurrentView();
623
+ i0.ɵɵelementStart(0, "form", 2, 0);
624
+ i0.ɵɵelement(2, "mj-form-toolbar", 3);
625
+ i0.ɵɵelementStart(3, "div", 4)(4, "div", 5)(5, "div", 6)(6, "div", 7);
626
+ i0.ɵɵelement(7, "i");
627
+ i0.ɵɵelementEnd();
628
+ i0.ɵɵelementStart(8, "div", 8)(9, "h1", 9);
629
+ i0.ɵɵtext(10, " Prompt Run ");
630
+ i0.ɵɵtemplate(11, AIPromptRunFormComponentExtended_Conditional_1_Conditional_11_Template, 2, 1, "span", 10);
631
+ i0.ɵɵelementEnd();
632
+ i0.ɵɵelementStart(12, "div", 11)(13, "span", 12);
633
+ i0.ɵɵelement(14, "i");
634
+ i0.ɵɵtext(15);
635
+ i0.ɵɵelementEnd();
636
+ i0.ɵɵtemplate(16, AIPromptRunFormComponentExtended_Conditional_1_Conditional_16_Template, 3, 5, "span", 13)(17, AIPromptRunFormComponentExtended_Conditional_1_Conditional_17_Template, 3, 1, "span", 14)(18, AIPromptRunFormComponentExtended_Conditional_1_Conditional_18_Template, 3, 1, "span", 15);
637
+ i0.ɵɵelementEnd()()();
638
+ i0.ɵɵelementStart(19, "div", 16)(20, "kendo-button", 17);
639
+ i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_Template_kendo_button_click_20_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.refreshData()); });
640
+ i0.ɵɵelement(21, "i", 18);
641
+ i0.ɵɵelementEnd()()();
642
+ i0.ɵɵelementStart(22, "div", 19)(23, "div", 20);
643
+ i0.ɵɵelement(24, "i", 21);
644
+ i0.ɵɵelementStart(25, "div", 22)(26, "div", 23);
645
+ i0.ɵɵtext(27, "Duration");
646
+ i0.ɵɵelementEnd();
647
+ i0.ɵɵelementStart(28, "div", 24);
648
+ i0.ɵɵtext(29);
649
+ i0.ɵɵelementEnd()()();
650
+ i0.ɵɵelementStart(30, "div", 20);
651
+ i0.ɵɵelement(31, "i", 25);
652
+ i0.ɵɵelementStart(32, "div", 22)(33, "div", 23);
653
+ i0.ɵɵtext(34, "Total Tokens");
654
+ i0.ɵɵelementEnd();
655
+ i0.ɵɵelementStart(35, "div", 24);
656
+ i0.ɵɵtext(36);
657
+ i0.ɵɵelementEnd()()();
658
+ i0.ɵɵelementStart(37, "div", 20);
659
+ i0.ɵɵelement(38, "i", 26);
660
+ i0.ɵɵelementStart(39, "div", 22)(40, "div", 23);
661
+ i0.ɵɵtext(41, "Cost");
662
+ i0.ɵɵelementEnd();
663
+ i0.ɵɵelementStart(42, "div", 24);
664
+ i0.ɵɵtext(43);
665
+ i0.ɵɵelementEnd()()();
666
+ i0.ɵɵtemplate(44, AIPromptRunFormComponentExtended_Conditional_1_Conditional_44_Template, 8, 4, "div", 20);
667
+ i0.ɵɵelementEnd()();
668
+ i0.ɵɵelementStart(45, "div", 27)(46, "kendo-panelbar")(47, "kendo-panelbar-item", 28);
669
+ i0.ɵɵtemplate(48, AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Template, 4, 1, "ng-template", 29)(49, AIPromptRunFormComponentExtended_Conditional_1_ng_template_49_Template, 3, 1, "ng-template", 30);
670
+ i0.ɵɵelementEnd();
671
+ i0.ɵɵelementStart(50, "kendo-panelbar-item", 28);
672
+ i0.ɵɵtemplate(51, AIPromptRunFormComponentExtended_Conditional_1_ng_template_51_Template, 5, 2, "ng-template", 29)(52, AIPromptRunFormComponentExtended_Conditional_1_ng_template_52_Template, 4, 2, "ng-template", 30);
673
+ i0.ɵɵelementEnd();
674
+ i0.ɵɵelementStart(53, "kendo-panelbar-item", 28);
675
+ i0.ɵɵtemplate(54, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Template, 3, 0, "ng-template", 29)(55, AIPromptRunFormComponentExtended_Conditional_1_ng_template_55_Template, 39, 12, "ng-template", 30);
676
+ i0.ɵɵelementEnd();
677
+ i0.ɵɵtemplate(56, AIPromptRunFormComponentExtended_Conditional_1_Conditional_56_Template, 3, 1, "kendo-panelbar-item", 28);
678
+ i0.ɵɵelementStart(57, "kendo-panelbar-item", 28);
679
+ i0.ɵɵtemplate(58, AIPromptRunFormComponentExtended_Conditional_1_ng_template_58_Template, 3, 0, "ng-template", 29)(59, AIPromptRunFormComponentExtended_Conditional_1_ng_template_59_Template, 7, 5, "ng-template", 30);
680
+ i0.ɵɵelementEnd()()()();
681
+ } if (rf & 2) {
682
+ const ctx_r1 = i0.ɵɵnextContext();
683
+ i0.ɵɵadvance(2);
684
+ i0.ɵɵproperty("form", ctx_r1);
685
+ i0.ɵɵadvance(4);
686
+ i0.ɵɵstyleProp("background-color", ctx_r1.getStatusColor() + "20");
687
+ i0.ɵɵadvance();
688
+ i0.ɵɵclassMap("fa-solid " + ctx_r1.getStatusIcon());
689
+ i0.ɵɵstyleProp("color", ctx_r1.getStatusColor());
690
+ i0.ɵɵadvance(4);
691
+ i0.ɵɵconditional(ctx_r1.record.ID ? 11 : -1);
692
+ i0.ɵɵadvance(2);
693
+ i0.ɵɵstyleProp("background-color", ctx_r1.getStatusColor());
694
+ i0.ɵɵadvance();
695
+ i0.ɵɵclassMap("fa-solid " + ctx_r1.getStatusIcon());
696
+ i0.ɵɵadvance();
697
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.getStatusText(), " ");
698
+ i0.ɵɵadvance();
699
+ i0.ɵɵconditional(ctx_r1.record.RunType ? 16 : -1);
700
+ i0.ɵɵadvance();
701
+ i0.ɵɵconditional(ctx_r1.prompt ? 17 : -1);
702
+ i0.ɵɵadvance();
703
+ i0.ɵɵconditional(ctx_r1.model ? 18 : -1);
704
+ i0.ɵɵadvance(11);
705
+ i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.ExecutionTimeMS));
706
+ i0.ɵɵadvance(7);
707
+ i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.record.TokensUsed));
708
+ i0.ɵɵadvance(7);
709
+ i0.ɵɵtextInterpolate(ctx_r1.formatCost(ctx_r1.record.TotalCost || ctx_r1.record.Cost));
710
+ i0.ɵɵadvance();
711
+ i0.ɵɵconditional(ctx_r1.record.RunAt ? 44 : -1);
712
+ i0.ɵɵadvance(3);
713
+ i0.ɵɵproperty("expanded", ctx_r1.messagesExpanded);
714
+ i0.ɵɵadvance(3);
715
+ i0.ɵɵproperty("expanded", ctx_r1.resultExpanded);
716
+ i0.ɵɵadvance(3);
717
+ i0.ɵɵproperty("expanded", ctx_r1.metricsExpanded);
718
+ i0.ɵɵadvance(3);
719
+ i0.ɵɵconditional(ctx_r1.record.ParentID || ctx_r1.childRuns.length > 0 ? 56 : -1);
720
+ i0.ɵɵadvance();
721
+ i0.ɵɵproperty("expanded", false);
722
+ } }
723
+ let AIPromptRunFormComponentExtended = class AIPromptRunFormComponentExtended extends AIPromptRunFormComponent {
724
+ constructor(elementRef, sharedService, router, route, cdr) {
725
+ super(elementRef, sharedService, router, route, cdr);
726
+ this.sharedService = sharedService;
727
+ // Related entities
728
+ this.prompt = null;
729
+ this.model = null;
730
+ this.parentRun = null;
731
+ this.childRuns = [];
732
+ // UI state
733
+ this.isLoadingRelatedData = false;
734
+ this.messagesExpanded = true;
735
+ this.resultExpanded = true;
736
+ this.metricsExpanded = false;
737
+ this.hierarchyExpanded = false;
738
+ // Formatted values
739
+ this.formattedMessages = '';
740
+ this.formattedResult = '';
741
+ }
742
+ async ngOnInit() {
743
+ await super.ngOnInit();
744
+ if (this.record?.ID) {
745
+ await this.loadRelatedData();
746
+ this.formatJsonFields();
747
+ }
748
+ }
749
+ async loadRelatedData() {
750
+ this.isLoadingRelatedData = true;
751
+ try {
752
+ const md = new Metadata();
753
+ // Load prompt
754
+ if (this.record.PromptID) {
755
+ this.prompt = await md.GetEntityObject('AI Prompts');
756
+ if (this.prompt) {
757
+ await this.prompt.Load(this.record.PromptID);
758
+ }
759
+ }
760
+ // Load model
761
+ if (this.record.ModelID) {
762
+ this.model = await md.GetEntityObject('AI Models');
763
+ if (this.model) {
764
+ await this.model.Load(this.record.ModelID);
765
+ }
766
+ }
767
+ // Load parent run if exists
768
+ if (this.record.ParentID) {
769
+ this.parentRun = await md.GetEntityObject('MJ: AI Prompt Runs');
770
+ if (this.parentRun) {
771
+ await this.parentRun.Load(this.record.ParentID);
772
+ }
773
+ }
774
+ // Load child runs
775
+ await this.loadChildRuns();
776
+ }
777
+ catch (error) {
778
+ console.error('Error loading related data:', error);
779
+ }
780
+ finally {
781
+ this.isLoadingRelatedData = false;
782
+ }
783
+ }
784
+ async loadChildRuns() {
785
+ if (!this.record.ID)
786
+ return;
787
+ const rv = new RunView();
788
+ const result = await rv.RunView({
789
+ EntityName: 'MJ: AI Prompt Runs',
790
+ ExtraFilter: `ParentID='${this.record.ID}'`,
791
+ OrderBy: 'ExecutionOrder ASC, RunAt DESC',
792
+ ResultType: 'entity_object'
793
+ });
794
+ this.childRuns = result.Results;
795
+ }
796
+ formatJsonFields() {
797
+ // Format messages
798
+ if (this.record.Messages) {
799
+ try {
800
+ const parsed = JSON.parse(this.record.Messages);
801
+ this.formattedMessages = JSON.stringify(parsed, null, 2);
802
+ }
803
+ catch {
804
+ this.formattedMessages = this.record.Messages;
805
+ }
806
+ }
807
+ else {
808
+ this.formattedMessages = '';
809
+ }
810
+ // Format result
811
+ if (this.record.Result) {
812
+ try {
813
+ const parsed = JSON.parse(this.record.Result);
814
+ this.formattedResult = JSON.stringify(parsed, null, 2);
815
+ }
816
+ catch {
817
+ this.formattedResult = this.record.Result;
818
+ }
819
+ }
820
+ else {
821
+ this.formattedResult = '';
822
+ }
823
+ }
824
+ getStatusColor() {
825
+ if (!this.record)
826
+ return '#6c757d';
827
+ if (this.record.Success === true) {
828
+ return '#28a745'; // Green
829
+ }
830
+ else if (this.record.Success === false) {
831
+ return '#dc3545'; // Red
832
+ }
833
+ else if (this.record.CompletedAt) {
834
+ return '#17a2b8'; // Blue (completed but no success flag)
835
+ }
836
+ else {
837
+ return '#ffc107'; // Yellow (running)
838
+ }
839
+ }
840
+ getStatusIcon() {
841
+ if (!this.record)
842
+ return 'fa-circle';
843
+ if (this.record.Success === true) {
844
+ return 'fa-check-circle';
845
+ }
846
+ else if (this.record.Success === false) {
847
+ return 'fa-times-circle';
848
+ }
849
+ else if (this.record.CompletedAt) {
850
+ return 'fa-info-circle';
851
+ }
852
+ else {
853
+ return 'fa-spinner fa-spin';
854
+ }
855
+ }
856
+ getStatusText() {
857
+ if (!this.record)
858
+ return 'Unknown';
859
+ if (this.record.Success === true) {
860
+ return 'Success';
861
+ }
862
+ else if (this.record.Success === false) {
863
+ return 'Failed';
864
+ }
865
+ else if (this.record.CompletedAt) {
866
+ return 'Completed';
867
+ }
868
+ else {
869
+ return 'Running';
870
+ }
871
+ }
872
+ formatDuration(ms) {
873
+ if (!ms)
874
+ return '-';
875
+ if (ms < 1000) {
876
+ return `${ms}ms`;
877
+ }
878
+ else if (ms < 60000) {
879
+ return `${(ms / 1000).toFixed(1)}s`;
880
+ }
881
+ else {
882
+ const minutes = Math.floor(ms / 60000);
883
+ const seconds = ((ms % 60000) / 1000).toFixed(0);
884
+ return `${minutes}m ${seconds}s`;
885
+ }
886
+ }
887
+ formatCost(cost) {
888
+ if (!cost)
889
+ return '-';
890
+ return `$${cost.toFixed(4)}`;
891
+ }
892
+ formatTokens(tokens) {
893
+ if (!tokens)
894
+ return '-';
895
+ return tokens.toLocaleString();
896
+ }
897
+ getRunTypeIcon(runType) {
898
+ switch (runType) {
899
+ case 'Single':
900
+ return 'fa-play-circle';
901
+ case 'ParallelParent':
902
+ return 'fa-layer-group';
903
+ case 'ParallelChild':
904
+ return 'fa-clone';
905
+ case 'ResultSelector':
906
+ return 'fa-filter';
907
+ default:
908
+ return 'fa-circle';
909
+ }
910
+ }
911
+ getRunTypeColor(runType) {
912
+ switch (runType) {
913
+ case 'Single':
914
+ return '#6f42c1';
915
+ case 'ParallelParent':
916
+ return '#007bff';
917
+ case 'ParallelChild':
918
+ return '#17a2b8';
919
+ case 'ResultSelector':
920
+ return '#28a745';
921
+ default:
922
+ return '#6c757d';
923
+ }
924
+ }
925
+ navigateToEntity(entityName, recordId) {
926
+ if (!recordId)
927
+ return;
928
+ SharedService.Instance.OpenEntityRecord(entityName, CompositeKey.FromID(recordId));
929
+ }
930
+ copyToClipboard(text, fieldName) {
931
+ navigator.clipboard.writeText(text).then(() => {
932
+ // Just show a console log for now, as ShowSimpleNotification may not exist
933
+ console.log(`${fieldName} copied to clipboard`);
934
+ }).catch(err => {
935
+ console.error('Failed to copy:', err);
936
+ });
937
+ }
938
+ async refreshData() {
939
+ if (this.record?.ID) {
940
+ await this.record.Load(this.record.ID);
941
+ await this.loadRelatedData();
942
+ this.formatJsonFields();
943
+ }
944
+ }
945
+ static { this.ɵfac = function AIPromptRunFormComponentExtended_Factory(t) { return new (t || AIPromptRunFormComponentExtended)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.SharedService), i0.ɵɵdirectiveInject(i2.Router), i0.ɵɵdirectiveInject(i2.ActivatedRoute), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
946
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AIPromptRunFormComponentExtended, selectors: [["mj-ai-prompt-run-form"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 3, consts: [["form", "ngForm"], ["mjFillContainer", "", 1, "record-form-container", 3, "bottomMargin", "rightMargin"], ["mjFillContainer", "", 1, "record-form"], [3, "form"], [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, "status-badge"], [1, "run-type-badge", 3, "color"], ["title", "View Prompt", 1, "prompt-name"], ["title", "View Model", 1, "model-name"], [1, "run-actions"], ["fillMode", "outline", "size", "small", "title", "Refresh data", 3, "click"], [1, "fa-solid", "fa-refresh"], [1, "metrics-bar"], [1, "metric-item"], [1, "fa-solid", "fa-clock"], [1, "metric-content"], [1, "metric-label"], [1, "metric-value"], [1, "fa-solid", "fa-coins"], [1, "fa-solid", "fa-dollar-sign"], [1, "form-content"], [3, "expanded"], ["kendoPanelBarItemTitle", ""], ["kendoPanelBarContent", ""], [1, "run-type-badge"], ["title", "View Prompt", 1, "prompt-name", 3, "click"], [1, "fa-solid", "fa-comment-dots"], ["title", "View Model", 1, "model-name", 3, "click"], [1, "fa-solid", "fa-microchip"], [1, "fa-solid", "fa-calendar"], [1, "panel-title"], [1, "panel-badge"], [1, "panel-content"], [1, "json-editor-container"], [1, "empty-state"], [1, "json-toolbar"], ["fillMode", "flat", "size", "small", "title", "Copy JSON", 3, "click"], [1, "fa-solid", "fa-copy"], ["name", "formattedMessages", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-comment-slash"], [1, "fa-solid", "fa-square-check"], [1, "panel-badge", "error"], [1, "error-message"], [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, "fa-solid", "fa-chart-line"], [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, "metric-currency"], [1, "additional-metrics"], [1, "metric-row"], [1, "metric-value", "link", 3, "click"], [1, "fa-solid", "fa-external-link"], [1, "fa-solid", "fa-sitemap"], [1, "panel-count"], [1, "parent-run-section"], [1, "child-runs-section"], [1, "fa-solid", "fa-level-up-alt"], [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"], [1, "status-indicator"], [1, "fa-solid", "fa-info-circle"], [1, "detail-fields-grid"], [1, "detail-field"], ["title", "View Vendor", 1, "detail-value", "clickable", 3, "click"], [1, "fa-solid", "fa-building"], ["title", "View Agent", 1, "detail-value", "clickable", 3, "click"], [1, "fa-solid", "fa-robot"], [1, "detail-value"], [1, "fa-solid", "fa-cog"], [1, "fa-solid", "fa-check-circle"]], template: function AIPromptRunFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
947
+ i0.ɵɵelementStart(0, "div", 1);
948
+ i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Template, 60, 25, "form", 2);
949
+ i0.ɵɵelementEnd();
950
+ } if (rf & 2) {
951
+ i0.ɵɵproperty("bottomMargin", 20)("rightMargin", 5);
952
+ i0.ɵɵadvance();
953
+ i0.ɵɵconditional(ctx.record ? 1 : -1);
954
+ } }, dependencies: [i3.ɵNgNoValidate, i3.NgControlStatus, i3.NgControlStatusGroup, i3.NgModel, i3.NgForm, i4.PanelBarComponent, i4.PanelBarItemComponent, i4.PanelBarContentDirective, i4.PanelBarItemTitleDirective, i5.ButtonComponent, i6.FormToolbarComponent, i7.FillContainer, i8.CodeEditorComponent, i9.DatePipe], styles: ["\n\n.prompt-run-header[_ngcontent-%COMP%] {\n background: #f8f9fa;\n border-bottom: 2px solid #e9ecef;\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: #2c3e50;\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.run-id[_ngcontent-%COMP%] {\n font-size: 0.8em;\n color: #6c757d;\n font-weight: 400;\n font-family: 'Courier New', monospace;\n}\n\n.run-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n color: white;\n font-size: 0.85em;\n font-weight: 500;\n}\n\n.status-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 0.9em;\n}\n\n.run-type-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: #f1f3f5;\n font-size: 0.85em;\n font-weight: 500;\n}\n\n.prompt-name[_ngcontent-%COMP%], .model-name[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: #e9ecef;\n color: #495057;\n font-size: 0.85em;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.prompt-name[_ngcontent-%COMP%]:hover, .model-name[_ngcontent-%COMP%]:hover {\n background: #dee2e6;\n color: #007bff;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\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 #e9ecef;\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: #6c757d;\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: #6c757d;\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: #2c3e50;\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.panel-badge[_ngcontent-%COMP%] {\n margin-left: auto;\n padding: 2px 8px;\n border-radius: 12px;\n background: #e9ecef;\n color: #495057;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.panel-badge.error[_ngcontent-%COMP%] {\n background: #dc3545;\n color: white;\n}\n\n.panel-count[_ngcontent-%COMP%] {\n color: #6c757d;\n font-weight: 400;\n font-size: 0.9em;\n}\n\n.panel-content[_ngcontent-%COMP%] {\n padding: 20px;\n}\n\n\n\n.json-editor-container[_ngcontent-%COMP%] {\n border: 1px solid #e9ecef;\n border-radius: 6px;\n overflow: hidden;\n}\n\n.json-toolbar[_ngcontent-%COMP%] {\n background: #f8f9fa;\n padding: 8px 12px;\n border-bottom: 1px solid #e9ecef;\n display: flex;\n justify-content: flex-end;\n}\n\n\n\n.error-message[_ngcontent-%COMP%] {\n background: #dc354510;\n border: 1px solid #dc3545;\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: #dc3545;\n flex-shrink: 0;\n}\n\n.error-content[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: #dc3545;\n font-size: 1em;\n}\n\n.error-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: #495057;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 40px;\n color: #6c757d;\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.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: #f8f9fa;\n border: 1px solid #e9ecef;\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: #6c757d;\n}\n\n.metric-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.9em;\n color: #6c757d;\n font-weight: 500;\n}\n\n.metric-value.large[_ngcontent-%COMP%] {\n font-size: 1.8em;\n font-weight: 700;\n color: #2c3e50;\n}\n\n.metric-rollup[_ngcontent-%COMP%] {\n margin-top: 8px;\n font-size: 0.85em;\n color: #6c757d;\n}\n\n.metric-currency[_ngcontent-%COMP%] {\n margin-top: 4px;\n font-size: 0.85em;\n color: #6c757d;\n text-transform: uppercase;\n}\n\n\n\n.additional-metrics[_ngcontent-%COMP%] {\n border-top: 1px solid #e9ecef;\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 #f1f3f5;\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: #6c757d;\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value[_ngcontent-%COMP%] {\n font-weight: 400;\n color: #2c3e50;\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value.link[_ngcontent-%COMP%] {\n color: #007bff;\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: #0056b3;\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: #495057;\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: #f8f9fa;\n border: 1px solid #e9ecef;\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: #e9ecef;\n border-color: #dee2e6;\n}\n\n.run-item.parent[_ngcontent-%COMP%] {\n background: #e3f2fd;\n border-color: #90caf9;\n}\n\n.run-item.parent[_ngcontent-%COMP%]:hover {\n background: #bbdefb;\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: #2c3e50;\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.execution-order[_ngcontent-%COMP%] {\n background: #6c757d;\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: #6c757d;\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: #6c757d;\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: #6c757d;\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}\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: #6c757d;\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: #2c3e50;\n padding: 10px 14px;\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n transition: all 0.2s;\n}\n\n.detail-value[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n color: #6c757d;\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: #e9ecef;\n border-color: #dee2e6;\n color: #007bff;\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\n\nkendo-panelbar[_ngcontent-%COMP%] {\n border: none !important;\n}\n\nkendo-panelbar-item[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n border: 1px solid #e9ecef !important;\n border-radius: 8px !important;\n overflow: hidden;\n}\n\nkendo-panelbar-item[_ngcontent-%COMP%] .k-panelbar-header[_ngcontent-%COMP%] {\n background: #f8f9fa !important;\n border: none !important;\n padding: 12px 16px !important;\n}\n\nkendo-panelbar-item[_ngcontent-%COMP%] .k-panelbar-header[_ngcontent-%COMP%]:hover {\n background: #e9ecef !important;\n}\n\nkendo-panelbar-item[_ngcontent-%COMP%] .k-panelbar-content[_ngcontent-%COMP%] {\n border: none !important;\n padding: 0 !important;\n}"] }); }
955
+ };
956
+ AIPromptRunFormComponentExtended = __decorate([
957
+ RegisterClass(BaseFormComponent, 'MJ: AI Prompt Runs')
958
+ ], AIPromptRunFormComponentExtended);
959
+ export { AIPromptRunFormComponentExtended };
960
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AIPromptRunFormComponentExtended, [{
961
+ type: Component,
962
+ args: [{ selector: 'mj-ai-prompt-run-form', template: "<div class=\"record-form-container\" mjFillContainer [bottomMargin]=\"20\" [rightMargin]=\"5\">\n @if (record) {\n <form class=\"record-form\" #form=\"ngForm\" mjFillContainer>\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 <span class=\"status-badge\" [style.background-color]=\"getStatusColor()\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\"></i>\n {{ getStatusText() }}\n </span>\n @if (record.RunType) {\n <span class=\"run-type-badge\" [style.color]=\"getRunTypeColor(record.RunType)\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(record.RunType)\"></i>\n {{ record.RunType }}\n </span>\n }\n @if (prompt) {\n <span class=\"prompt-name\" (click)=\"navigateToEntity('AI Prompts', prompt.ID)\" title=\"View Prompt\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n {{ prompt.Name }}\n </span>\n }\n @if (model) {\n <span class=\"model-name\" (click)=\"navigateToEntity('AI Models', model.ID)\" title=\"View Model\">\n <i class=\"fa-solid fa-microchip\"></i>\n {{ model.Name }}\n </span>\n }\n </div>\n </div>\n </div>\n \n <!-- Action Buttons -->\n <div class=\"run-actions\">\n <kendo-button fillMode=\"outline\" size=\"small\" (click)=\"refreshData()\" title=\"Refresh data\">\n <i class=\"fa-solid fa-refresh\"></i>\n </kendo-button>\n </div>\n </div>\n \n <!-- Key Metrics Bar -->\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 </div>\n\n <!-- Main Content with Expansion Panels -->\n <div class=\"form-content\">\n <kendo-panelbar>\n \n <!-- Input Messages Panel -->\n <kendo-panelbar-item [expanded]=\"messagesExpanded\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n Input Messages\n @if (record.Messages && record.Messages.trim() !== '') {\n <span class=\"panel-badge\">JSON</span>\n }\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n @if (record.Messages && record.Messages.trim() !== '') {\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <kendo-button \n fillMode=\"flat\" \n size=\"small\"\n (click)=\"copyToClipboard(formattedMessages, 'Messages')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </kendo-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 } @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 </ng-template>\n </kendo-panelbar-item>\n \n <!-- Result Panel -->\n <kendo-panelbar-item [expanded]=\"resultExpanded\">\n <ng-template kendoPanelBarItemTitle>\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 <ng-template kendoPanelBarContent>\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 <kendo-button \n fillMode=\"flat\" \n size=\"small\"\n (click)=\"copyToClipboard(formattedResult, 'Result')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </kendo-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 </div>\n }\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n <!-- Token Usage & Metrics Panel -->\n <kendo-panelbar-item [expanded]=\"metricsExpanded\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-chart-line\"></i>\n Token Usage & Metrics\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\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 </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.ConfigurationID) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Configuration:</span>\n <span class=\"metric-value\">{{ record.Configuration }}</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('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 </ng-template>\n </kendo-panelbar-item>\n \n <!-- Hierarchy Panel (for parent/child relationships) -->\n @if (record.ParentID || childRuns.length > 0) {\n <kendo-panelbar-item [expanded]=\"hierarchyExpanded\">\n <ng-template kendoPanelBarItemTitle>\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 <ng-template kendoPanelBarContent>\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 </ng-template>\n </kendo-panelbar-item>\n }\n \n <!-- Additional Details Panel -->\n <kendo-panelbar-item [expanded]=\"false\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Additional Details\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n <div class=\"detail-fields-grid\">\n @if (record.VendorID) {\n <div class=\"detail-field\">\n <label>Vendor</label>\n <div class=\"detail-value clickable\" (click)=\"navigateToEntity('MJ: AI Vendors', record.VendorID)\" title=\"View Vendor\">\n <i class=\"fa-solid fa-building\"></i>\n {{ record.Vendor || 'Unknown' }}\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n @if (record.AgentID) {\n <div class=\"detail-field\">\n <label>Agent</label>\n <div class=\"detail-value clickable\" (click)=\"navigateToEntity('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 @if (record.ConfigurationID) {\n <div class=\"detail-field\">\n <label>Configuration</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-cog\"></i>\n {{ record.Configuration || 'Unknown' }}\n </div>\n </div>\n }\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 </ng-template>\n </kendo-panelbar-item>\n \n </kendo-panelbar>\n </div>\n </form>\n }\n</div>", styles: ["/* Header Section */\n.prompt-run-header {\n background: #f8f9fa;\n border-bottom: 2px solid #e9ecef;\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: #2c3e50;\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.run-id {\n font-size: 0.8em;\n color: #6c757d;\n font-weight: 400;\n font-family: 'Courier New', monospace;\n}\n\n.run-meta {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.status-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n color: white;\n font-size: 0.85em;\n font-weight: 500;\n}\n\n.status-badge i {\n font-size: 0.9em;\n}\n\n.run-type-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: #f1f3f5;\n font-size: 0.85em;\n font-weight: 500;\n}\n\n.prompt-name, .model-name {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: #e9ecef;\n color: #495057;\n font-size: 0.85em;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.prompt-name:hover, .model-name:hover {\n background: #dee2e6;\n color: #007bff;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\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 #e9ecef;\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: #6c757d;\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: #6c757d;\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: #2c3e50;\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.panel-badge {\n margin-left: auto;\n padding: 2px 8px;\n border-radius: 12px;\n background: #e9ecef;\n color: #495057;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.panel-badge.error {\n background: #dc3545;\n color: white;\n}\n\n.panel-count {\n color: #6c757d;\n font-weight: 400;\n font-size: 0.9em;\n}\n\n.panel-content {\n padding: 20px;\n}\n\n/* JSON Editor Container */\n.json-editor-container {\n border: 1px solid #e9ecef;\n border-radius: 6px;\n overflow: hidden;\n}\n\n.json-toolbar {\n background: #f8f9fa;\n padding: 8px 12px;\n border-bottom: 1px solid #e9ecef;\n display: flex;\n justify-content: flex-end;\n}\n\n/* Error Message */\n.error-message {\n background: #dc354510;\n border: 1px solid #dc3545;\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: #dc3545;\n flex-shrink: 0;\n}\n\n.error-content h4 {\n margin: 0 0 8px 0;\n color: #dc3545;\n font-size: 1em;\n}\n\n.error-content p {\n margin: 0;\n color: #495057;\n}\n\n/* Empty State */\n.empty-state {\n text-align: center;\n padding: 60px 40px;\n color: #6c757d;\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/* 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: #f8f9fa;\n border: 1px solid #e9ecef;\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: #6c757d;\n}\n\n.metric-header h4 {\n margin: 0;\n font-size: 0.9em;\n color: #6c757d;\n font-weight: 500;\n}\n\n.metric-value.large {\n font-size: 1.8em;\n font-weight: 700;\n color: #2c3e50;\n}\n\n.metric-rollup {\n margin-top: 8px;\n font-size: 0.85em;\n color: #6c757d;\n}\n\n.metric-currency {\n margin-top: 4px;\n font-size: 0.85em;\n color: #6c757d;\n text-transform: uppercase;\n}\n\n/* Additional Metrics */\n.additional-metrics {\n border-top: 1px solid #e9ecef;\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 #f1f3f5;\n}\n\n.metric-row:last-child {\n border-bottom: none;\n}\n\n.metric-row .metric-label {\n font-weight: 500;\n color: #6c757d;\n}\n\n.metric-row .metric-value {\n font-weight: 400;\n color: #2c3e50;\n}\n\n.metric-row .metric-value.link {\n color: #007bff;\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: #0056b3;\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: #495057;\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: #f8f9fa;\n border: 1px solid #e9ecef;\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: #e9ecef;\n border-color: #dee2e6;\n}\n\n.run-item.parent {\n background: #e3f2fd;\n border-color: #90caf9;\n}\n\n.run-item.parent:hover {\n background: #bbdefb;\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: #2c3e50;\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.execution-order {\n background: #6c757d;\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: #6c757d;\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: #6c757d;\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: #6c757d;\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}\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: #6c757d;\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: #2c3e50;\n padding: 10px 14px;\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n transition: all 0.2s;\n}\n\n.detail-value i:first-child {\n color: #6c757d;\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: #e9ecef;\n border-color: #dee2e6;\n color: #007bff;\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/* Kendo Overrides */\nkendo-panelbar {\n border: none !important;\n}\n\nkendo-panelbar-item {\n margin-bottom: 8px;\n border: 1px solid #e9ecef !important;\n border-radius: 8px !important;\n overflow: hidden;\n}\n\nkendo-panelbar-item .k-panelbar-header {\n background: #f8f9fa !important;\n border: none !important;\n padding: 12px 16px !important;\n}\n\nkendo-panelbar-item .k-panelbar-header:hover {\n background: #e9ecef !important;\n}\n\nkendo-panelbar-item .k-panelbar-content {\n border: none !important;\n padding: 0 !important;\n}"] }]
963
+ }], () => [{ type: i0.ElementRef }, { type: i1.SharedService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i0.ChangeDetectorRef }], null); })();
964
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIPromptRunFormComponentExtended, { className: "AIPromptRunFormComponentExtended", filePath: "src/lib/custom/AIPromptRuns/ai-prompt-run-form.component.ts", lineNumber: 16 }); })();
965
+ //# sourceMappingURL=ai-prompt-run-form.component.js.map