@memberjunction/ng-dashboards 2.120.0 → 2.122.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 (203) hide show
  1. package/dist/AI/components/agents/agent-configuration.component.d.ts +23 -11
  2. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  3. package/dist/AI/components/agents/agent-configuration.component.js +122 -95
  4. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  5. package/dist/AI/components/agents/agent-editor.component.js +88 -90
  6. package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
  7. package/dist/AI/components/agents/agent-filter-panel.component.js +2 -2
  8. package/dist/AI/components/execution-monitoring.component.d.ts +23 -10
  9. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  10. package/dist/AI/components/execution-monitoring.component.js +143 -124
  11. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  12. package/dist/AI/components/models/model-management-v2.component.d.ts +17 -13
  13. package/dist/AI/components/models/model-management-v2.component.d.ts.map +1 -1
  14. package/dist/AI/components/models/model-management-v2.component.js +248 -266
  15. package/dist/AI/components/models/model-management-v2.component.js.map +1 -1
  16. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +76 -78
  17. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
  18. package/dist/AI/components/prompts/prompt-filter-panel.component.js +2 -2
  19. package/dist/AI/components/prompts/prompt-management-v2.component.d.ts +17 -15
  20. package/dist/AI/components/prompts/prompt-management-v2.component.d.ts.map +1 -1
  21. package/dist/AI/components/prompts/prompt-management-v2.component.js +372 -397
  22. package/dist/AI/components/prompts/prompt-management-v2.component.js.map +1 -1
  23. package/dist/AI/components/prompts/prompt-version-control.component.js +100 -102
  24. package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
  25. package/dist/AI/components/system/system-config-filter-panel.component.js +2 -2
  26. package/dist/AI/components/system/system-configuration.component.d.ts +17 -10
  27. package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
  28. package/dist/AI/components/system/system-configuration.component.js +82 -61
  29. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  30. package/dist/AI/components/widgets/kpi-card.component.d.ts.map +1 -1
  31. package/dist/AI/components/widgets/kpi-card.component.js +11 -7
  32. package/dist/AI/components/widgets/kpi-card.component.js.map +1 -1
  33. package/dist/AI/index.d.ts +4 -0
  34. package/dist/AI/index.d.ts.map +1 -1
  35. package/dist/AI/index.js +6 -1
  36. package/dist/AI/index.js.map +1 -1
  37. package/dist/Actions/components/actions-list-view.component.js +9 -9
  38. package/dist/Actions/components/actions-list-view.component.js.map +1 -1
  39. package/dist/Actions/components/actions-overview.component.d.ts +16 -13
  40. package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
  41. package/dist/Actions/components/actions-overview.component.js +62 -48
  42. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  43. package/dist/Actions/components/categories-list-view.component.js +9 -9
  44. package/dist/Actions/components/categories-list-view.component.js.map +1 -1
  45. package/dist/Actions/components/code-management.component.d.ts +17 -7
  46. package/dist/Actions/components/code-management.component.d.ts.map +1 -1
  47. package/dist/Actions/components/code-management.component.js +45 -12
  48. package/dist/Actions/components/code-management.component.js.map +1 -1
  49. package/dist/Actions/components/entity-integration.component.d.ts +17 -7
  50. package/dist/Actions/components/entity-integration.component.d.ts.map +1 -1
  51. package/dist/Actions/components/entity-integration.component.js +45 -12
  52. package/dist/Actions/components/entity-integration.component.js.map +1 -1
  53. package/dist/Actions/components/execution-monitoring.component.d.ts +16 -10
  54. package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
  55. package/dist/Actions/components/execution-monitoring.component.js +56 -30
  56. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  57. package/dist/Actions/components/scheduled-actions.component.d.ts +17 -7
  58. package/dist/Actions/components/scheduled-actions.component.d.ts.map +1 -1
  59. package/dist/Actions/components/scheduled-actions.component.js +45 -12
  60. package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
  61. package/dist/Actions/components/security-permissions.component.d.ts +17 -7
  62. package/dist/Actions/components/security-permissions.component.d.ts.map +1 -1
  63. package/dist/Actions/components/security-permissions.component.js +45 -12
  64. package/dist/Actions/components/security-permissions.component.js.map +1 -1
  65. package/dist/Actions/index.d.ts +6 -1
  66. package/dist/Actions/index.d.ts.map +1 -1
  67. package/dist/Actions/index.js +9 -1
  68. package/dist/Actions/index.js.map +1 -1
  69. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +1 -1
  70. package/dist/ComponentStudio/component-studio-dashboard.component.js +8 -8
  71. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  72. package/dist/ComponentStudio/components/artifact-load-dialog.component.js +52 -57
  73. package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
  74. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +8 -9
  75. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
  76. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +107 -0
  77. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -0
  78. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +553 -0
  79. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -0
  80. package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.d.ts +179 -0
  81. package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.d.ts.map +1 -0
  82. package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.js +814 -0
  83. package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.js.map +1 -0
  84. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts +151 -0
  85. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -0
  86. package/dist/DataExplorer/components/view-selector/view-selector.component.js +480 -0
  87. package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -0
  88. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +439 -0
  89. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -0
  90. package/dist/DataExplorer/data-explorer-dashboard.component.js +2129 -0
  91. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -0
  92. package/dist/DataExplorer/index.d.ts +5 -0
  93. package/dist/DataExplorer/index.d.ts.map +1 -0
  94. package/dist/DataExplorer/index.js +10 -0
  95. package/dist/DataExplorer/index.js.map +1 -0
  96. package/dist/DataExplorer/models/explorer-state.interface.d.ts +183 -0
  97. package/dist/DataExplorer/models/explorer-state.interface.d.ts.map +1 -0
  98. package/dist/DataExplorer/models/explorer-state.interface.js +31 -0
  99. package/dist/DataExplorer/models/explorer-state.interface.js.map +1 -0
  100. package/dist/DataExplorer/services/explorer-state.service.d.ts +232 -0
  101. package/dist/DataExplorer/services/explorer-state.service.d.ts.map +1 -0
  102. package/dist/DataExplorer/services/explorer-state.service.js +912 -0
  103. package/dist/DataExplorer/services/explorer-state.service.js.map +1 -0
  104. package/dist/EntityAdmin/components/entity-details.component.d.ts.map +1 -1
  105. package/dist/EntityAdmin/components/entity-details.component.js +11 -13
  106. package/dist/EntityAdmin/components/entity-details.component.js.map +1 -1
  107. package/dist/EntityAdmin/components/entity-filter-panel.component.js +2 -2
  108. package/dist/EntityAdmin/components/erd-composite.component.js +2 -2
  109. package/dist/EntityAdmin/components/erd-diagram.component.js +2 -2
  110. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +1 -1
  111. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
  112. package/dist/EntityAdmin/entity-admin-dashboard.component.js +14 -15
  113. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  114. package/dist/Home/home-dashboard.component.d.ts +122 -0
  115. package/dist/Home/home-dashboard.component.d.ts.map +1 -0
  116. package/dist/Home/home-dashboard.component.js +698 -0
  117. package/dist/Home/home-dashboard.component.js.map +1 -0
  118. package/dist/Scheduling/components/index.d.ts +11 -0
  119. package/dist/Scheduling/components/index.d.ts.map +1 -0
  120. package/dist/Scheduling/components/index.js +13 -0
  121. package/dist/Scheduling/components/index.js.map +1 -0
  122. package/dist/Scheduling/components/scheduling-health-resource.component.d.ts +20 -0
  123. package/dist/Scheduling/components/scheduling-health-resource.component.d.ts.map +1 -0
  124. package/dist/Scheduling/components/scheduling-health-resource.component.js +55 -0
  125. package/dist/Scheduling/components/scheduling-health-resource.component.js.map +1 -0
  126. package/dist/Scheduling/components/scheduling-health.component.js +7 -8
  127. package/dist/Scheduling/components/scheduling-health.component.js.map +1 -1
  128. package/dist/Scheduling/components/scheduling-history-resource.component.d.ts +20 -0
  129. package/dist/Scheduling/components/scheduling-history-resource.component.d.ts.map +1 -0
  130. package/dist/Scheduling/components/scheduling-history-resource.component.js +55 -0
  131. package/dist/Scheduling/components/scheduling-history-resource.component.js.map +1 -0
  132. package/dist/Scheduling/components/scheduling-history.component.js +7 -8
  133. package/dist/Scheduling/components/scheduling-history.component.js.map +1 -1
  134. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +20 -0
  135. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -0
  136. package/dist/Scheduling/components/scheduling-jobs-resource.component.js +55 -0
  137. package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -0
  138. package/dist/Scheduling/components/scheduling-jobs.component.js +7 -8
  139. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  140. package/dist/Scheduling/components/scheduling-monitor-resource.component.d.ts +20 -0
  141. package/dist/Scheduling/components/scheduling-monitor-resource.component.d.ts.map +1 -0
  142. package/dist/Scheduling/components/scheduling-monitor-resource.component.js +55 -0
  143. package/dist/Scheduling/components/scheduling-monitor-resource.component.js.map +1 -0
  144. package/dist/Scheduling/components/scheduling-monitoring.component.js +7 -8
  145. package/dist/Scheduling/components/scheduling-monitoring.component.js.map +1 -1
  146. package/dist/Scheduling/components/scheduling-types-resource.component.d.ts +20 -0
  147. package/dist/Scheduling/components/scheduling-types-resource.component.d.ts.map +1 -0
  148. package/dist/Scheduling/components/scheduling-types-resource.component.js +55 -0
  149. package/dist/Scheduling/components/scheduling-types-resource.component.js.map +1 -0
  150. package/dist/Scheduling/components/scheduling-types.component.js +7 -8
  151. package/dist/Scheduling/components/scheduling-types.component.js.map +1 -1
  152. package/dist/Scheduling/scheduling-dashboard.component.d.ts +1 -1
  153. package/dist/Scheduling/scheduling-dashboard.component.js +3 -3
  154. package/dist/Testing/components/index.d.ts +11 -0
  155. package/dist/Testing/components/index.d.ts.map +1 -0
  156. package/dist/Testing/components/index.js +13 -0
  157. package/dist/Testing/components/index.js.map +1 -0
  158. package/dist/Testing/components/testing-analytics-resource.component.d.ts +20 -0
  159. package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -0
  160. package/dist/Testing/components/testing-analytics-resource.component.js +55 -0
  161. package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -0
  162. package/dist/Testing/components/testing-execution-resource.component.d.ts +20 -0
  163. package/dist/Testing/components/testing-execution-resource.component.d.ts.map +1 -0
  164. package/dist/Testing/components/testing-execution-resource.component.js +55 -0
  165. package/dist/Testing/components/testing-execution-resource.component.js.map +1 -0
  166. package/dist/Testing/components/testing-execution.component.js +3 -3
  167. package/dist/Testing/components/testing-execution.component.js.map +1 -1
  168. package/dist/Testing/components/testing-feedback-resource.component.d.ts +20 -0
  169. package/dist/Testing/components/testing-feedback-resource.component.d.ts.map +1 -0
  170. package/dist/Testing/components/testing-feedback-resource.component.js +55 -0
  171. package/dist/Testing/components/testing-feedback-resource.component.js.map +1 -0
  172. package/dist/Testing/components/testing-overview-resource.component.d.ts +20 -0
  173. package/dist/Testing/components/testing-overview-resource.component.d.ts.map +1 -0
  174. package/dist/Testing/components/testing-overview-resource.component.js +55 -0
  175. package/dist/Testing/components/testing-overview-resource.component.js.map +1 -0
  176. package/dist/Testing/components/testing-version-resource.component.d.ts +20 -0
  177. package/dist/Testing/components/testing-version-resource.component.d.ts.map +1 -0
  178. package/dist/Testing/components/testing-version-resource.component.js +55 -0
  179. package/dist/Testing/components/testing-version-resource.component.js.map +1 -0
  180. package/dist/Testing/testing-dashboard.component.d.ts +1 -1
  181. package/dist/Testing/testing-dashboard.component.js +23 -25
  182. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  183. package/dist/module.d.ts +83 -66
  184. package/dist/module.d.ts.map +1 -1
  185. package/dist/module.js +137 -19
  186. package/dist/module.js.map +1 -1
  187. package/dist/public-api.d.ts +6 -4
  188. package/dist/public-api.d.ts.map +1 -1
  189. package/dist/public-api.js +41 -13
  190. package/dist/public-api.js.map +1 -1
  191. package/package.json +17 -14
  192. package/dist/AI/ai-dashboard.component.d.ts +0 -62
  193. package/dist/AI/ai-dashboard.component.d.ts.map +0 -1
  194. package/dist/AI/ai-dashboard.component.js +0 -338
  195. package/dist/AI/ai-dashboard.component.js.map +0 -1
  196. package/dist/Actions/actions-management-dashboard.component.d.ts +0 -52
  197. package/dist/Actions/actions-management-dashboard.component.d.ts.map +0 -1
  198. package/dist/Actions/actions-management-dashboard.component.js +0 -308
  199. package/dist/Actions/actions-management-dashboard.component.js.map +0 -1
  200. package/dist/generic/base-dashboard.d.ts +0 -65
  201. package/dist/generic/base-dashboard.d.ts.map +0 -1
  202. package/dist/generic/base-dashboard.js +0 -74
  203. package/dist/generic/base-dashboard.js.map +0 -1
@@ -4,7 +4,8 @@ import { Subject, BehaviorSubject } from 'rxjs';
4
4
  import * as i0 from "@angular/core";
5
5
  import * as i1 from "@memberjunction/ng-notifications";
6
6
  import * as i2 from "@angular/forms";
7
- import * as i3 from "@angular/common";
7
+ import * as i3 from "@memberjunction/ng-shared-generic";
8
+ import * as i4 from "@angular/common";
8
9
  const _forTrack0 = ($index, $item) => $item.ID;
9
10
  const _forTrack1 = ($index, $item) => $item.id;
10
11
  const _forTrack2 = ($index, $item) => $item.fieldName;
@@ -84,40 +85,37 @@ function PromptVersionControlComponent_Conditional_2_Conditional_5_Template(rf,
84
85
  i0.ɵɵtextInterpolate1("- ", ctx_r1.prompt.Name, "");
85
86
  } }
86
87
  function PromptVersionControlComponent_Conditional_2_Conditional_50_Template(rf, ctx) { if (rf & 1) {
87
- i0.ɵɵelementStart(0, "div", 56)(1, "div", 58)(2, "div", 59)(3, "span", 60);
88
- i0.ɵɵtext(4, "Loading...");
89
- i0.ɵɵelementEnd()();
90
- i0.ɵɵelementStart(5, "p", 61);
91
- i0.ɵɵtext(6);
92
- i0.ɵɵelementEnd()()();
88
+ i0.ɵɵelementStart(0, "div", 56);
89
+ i0.ɵɵelement(1, "mj-loading", 58);
90
+ i0.ɵɵelementEnd();
93
91
  } if (rf & 2) {
94
92
  const ctx_r1 = i0.ɵɵnextContext(2);
95
- i0.ɵɵadvance(6);
96
- i0.ɵɵtextInterpolate(ctx_r1.loadingMessage);
93
+ i0.ɵɵadvance();
94
+ i0.ɵɵproperty("text", ctx_r1.loadingMessage);
97
95
  } }
98
96
  function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_For_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
99
- i0.ɵɵelement(0, "div", 71);
97
+ i0.ɵɵelement(0, "div", 68);
100
98
  } }
101
99
  function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_For_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
102
100
  const _r8 = i0.ɵɵgetCurrentView();
103
- i0.ɵɵelementStart(0, "button", 85);
101
+ i0.ɵɵelementStart(0, "button", 82);
104
102
  i0.ɵɵlistener("click", function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_For_2_Conditional_19_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r8); const version_r7 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(5); $event.stopPropagation(); return i0.ɵɵresetView(ctx_r1.startComparison(version_r7)); });
105
103
  i0.ɵɵelement(1, "i", 33);
106
104
  i0.ɵɵelementEnd();
107
105
  } }
108
106
  function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_For_2_Conditional_20_Template(rf, ctx) { if (rf & 1) {
109
107
  const _r9 = i0.ɵɵgetCurrentView();
110
- i0.ɵɵelementStart(0, "button", 86);
108
+ i0.ɵɵelementStart(0, "button", 83);
111
109
  i0.ɵɵlistener("click", function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_For_2_Conditional_20_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r9); const version_r7 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(5); $event.stopPropagation(); return i0.ɵɵresetView(ctx_r1.onVersionRestore(version_r7)); });
112
- i0.ɵɵelement(1, "i", 87);
110
+ i0.ɵɵelement(1, "i", 84);
113
111
  i0.ɵɵelementEnd();
114
112
  } }
115
113
  function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_For_2_Conditional_23_For_3_Conditional_3_Template(rf, ctx) { if (rf & 1) {
116
- i0.ɵɵelementStart(0, "span", 91)(1, "span", 93);
114
+ i0.ɵɵelementStart(0, "span", 88)(1, "span", 90);
117
115
  i0.ɵɵtext(2);
118
116
  i0.ɵɵelementEnd();
119
117
  i0.ɵɵelement(3, "i", 21);
120
- i0.ɵɵelementStart(4, "span", 92);
118
+ i0.ɵɵelementStart(4, "span", 89);
121
119
  i0.ɵɵtext(5);
122
120
  i0.ɵɵelementEnd()();
123
121
  } if (rf & 2) {
@@ -130,7 +128,7 @@ function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_
130
128
  i0.ɵɵtextInterpolate(ctx_r1.formatChangeValue(version_r7.changesJSON[field_r10].newValue));
131
129
  } }
132
130
  function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_For_2_Conditional_23_For_3_Conditional_4_Template(rf, ctx) { if (rf & 1) {
133
- i0.ɵɵelementStart(0, "span", 92);
131
+ i0.ɵɵelementStart(0, "span", 89);
134
132
  i0.ɵɵtext(1);
135
133
  i0.ɵɵelementEnd();
136
134
  } if (rf & 2) {
@@ -141,10 +139,10 @@ function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_
141
139
  i0.ɵɵtextInterpolate(ctx_r1.formatChangeValue(version_r7.changesJSON[field_r10].newValue));
142
140
  } }
143
141
  function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_For_2_Conditional_23_For_3_Template(rf, ctx) { if (rf & 1) {
144
- i0.ɵɵelementStart(0, "div", 89)(1, "span", 90);
142
+ i0.ɵɵelementStart(0, "div", 86)(1, "span", 87);
145
143
  i0.ɵɵtext(2);
146
144
  i0.ɵɵelementEnd();
147
- i0.ɵɵtemplate(3, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_For_2_Conditional_23_For_3_Conditional_3_Template, 6, 2, "span", 91)(4, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_For_2_Conditional_23_For_3_Conditional_4_Template, 2, 1, "span", 92);
145
+ i0.ɵɵtemplate(3, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_For_2_Conditional_23_For_3_Conditional_3_Template, 6, 2, "span", 88)(4, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_For_2_Conditional_23_For_3_Conditional_4_Template, 2, 1, "span", 89);
148
146
  i0.ɵɵelementEnd();
149
147
  } if (rf & 2) {
150
148
  const field_r10 = ctx.$implicit;
@@ -156,8 +154,8 @@ function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_
156
154
  i0.ɵɵconditional(version_r7.changesJSON[field_r10].oldValue !== undefined ? 3 : 4);
157
155
  } }
158
156
  function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_For_2_Conditional_23_Template(rf, ctx) { if (rf & 1) {
159
- i0.ɵɵelementStart(0, "div", 84)(1, "div", 88);
160
- i0.ɵɵrepeaterCreate(2, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_For_2_Conditional_23_For_3_Template, 5, 2, "div", 89, i0.ɵɵrepeaterTrackByIdentity);
157
+ i0.ɵɵelementStart(0, "div", 81)(1, "div", 85);
158
+ i0.ɵɵrepeaterCreate(2, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_For_2_Conditional_23_For_3_Template, 5, 2, "div", 86, i0.ɵɵrepeaterTrackByIdentity);
161
159
  i0.ɵɵelementEnd()();
162
160
  } if (rf & 2) {
163
161
  const version_r7 = i0.ɵɵnextContext().$implicit;
@@ -167,37 +165,37 @@ function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_
167
165
  } }
168
166
  function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_For_2_Template(rf, ctx) { if (rf & 1) {
169
167
  const _r6 = i0.ɵɵgetCurrentView();
170
- i0.ɵɵelementStart(0, "div", 68);
168
+ i0.ɵɵelementStart(0, "div", 65);
171
169
  i0.ɵɵlistener("click", function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_For_2_Template_div_click_0_listener() { const version_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onVersionSelect(version_r7)); });
172
- i0.ɵɵelementStart(1, "div", 69)(2, "div", 70);
170
+ i0.ɵɵelementStart(1, "div", 66)(2, "div", 67);
173
171
  i0.ɵɵelement(3, "i", 51);
174
172
  i0.ɵɵelementEnd();
175
- i0.ɵɵtemplate(4, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_For_2_Conditional_4_Template, 1, 0, "div", 71);
173
+ i0.ɵɵtemplate(4, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_For_2_Conditional_4_Template, 1, 0, "div", 68);
176
174
  i0.ɵɵelementEnd();
177
- i0.ɵɵelementStart(5, "div", 72)(6, "div", 73)(7, "div", 74)(8, "h6", 75);
175
+ i0.ɵɵelementStart(5, "div", 69)(6, "div", 70)(7, "div", 71)(8, "h6", 72);
178
176
  i0.ɵɵtext(9);
179
177
  i0.ɵɵelementEnd();
180
- i0.ɵɵelementStart(10, "div", 76)(11, "span", 77);
178
+ i0.ɵɵelementStart(10, "div", 73)(11, "span", 74);
181
179
  i0.ɵɵtext(12);
182
180
  i0.ɵɵpipe(13, "date");
183
181
  i0.ɵɵelementEnd();
184
- i0.ɵɵelementStart(14, "span", 78);
182
+ i0.ɵɵelementStart(14, "span", 75);
185
183
  i0.ɵɵtext(15);
186
184
  i0.ɵɵelementEnd();
187
- i0.ɵɵelementStart(16, "span", 79);
185
+ i0.ɵɵelementStart(16, "span", 76);
188
186
  i0.ɵɵtext(17);
189
187
  i0.ɵɵelementEnd()()();
190
- i0.ɵɵelementStart(18, "div", 80);
191
- i0.ɵɵtemplate(19, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_For_2_Conditional_19_Template, 2, 0, "button", 81)(20, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_For_2_Conditional_20_Template, 2, 0, "button", 82);
188
+ i0.ɵɵelementStart(18, "div", 77);
189
+ i0.ɵɵtemplate(19, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_For_2_Conditional_19_Template, 2, 0, "button", 78)(20, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_For_2_Conditional_20_Template, 2, 0, "button", 79);
192
190
  i0.ɵɵelementEnd()();
193
- i0.ɵɵelementStart(21, "div", 83);
191
+ i0.ɵɵelementStart(21, "div", 80);
194
192
  i0.ɵɵtext(22);
195
193
  i0.ɵɵelementEnd();
196
- i0.ɵɵtemplate(23, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_For_2_Conditional_23_Template, 4, 0, "div", 84);
194
+ i0.ɵɵtemplate(23, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_For_2_Conditional_23_Template, 4, 0, "div", 81);
197
195
  i0.ɵɵelementEnd()();
198
196
  } if (rf & 2) {
199
197
  const version_r7 = ctx.$implicit;
200
- const ɵ$index_163_r11 = ctx.$index;
198
+ const ɵ$index_155_r11 = ctx.$index;
201
199
  const ctx_r1 = i0.ɵɵnextContext(5);
202
200
  i0.ɵɵclassProp("selected", (ctx_r1.selectedVersion == null ? null : ctx_r1.selectedVersion.id) === version_r7.id)("active", version_r7.isActive);
203
201
  i0.ɵɵadvance(2);
@@ -205,7 +203,7 @@ function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_
205
203
  i0.ɵɵadvance();
206
204
  i0.ɵɵclassMap(ctx_r1.getChangeTypeIcon(version_r7.changeType));
207
205
  i0.ɵɵadvance();
208
- i0.ɵɵconditional(ɵ$index_163_r11 < ctx_r1.versions.length - 1 ? 4 : -1);
206
+ i0.ɵɵconditional(ɵ$index_155_r11 < ctx_r1.versions.length - 1 ? 4 : -1);
209
207
  i0.ɵɵadvance(5);
210
208
  i0.ɵɵtextInterpolate(ctx_r1.getVersionLabel(version_r7));
211
209
  i0.ɵɵadvance(3);
@@ -217,7 +215,7 @@ function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_
217
215
  i0.ɵɵadvance();
218
216
  i0.ɵɵtextInterpolate1(" ", version_r7.changeSource, " ");
219
217
  i0.ɵɵadvance(2);
220
- i0.ɵɵconditional(ctx_r1.showComparison && ɵ$index_163_r11 < ctx_r1.versions.length - 1 ? 19 : -1);
218
+ i0.ɵɵconditional(ctx_r1.showComparison && ɵ$index_155_r11 < ctx_r1.versions.length - 1 ? 19 : -1);
221
219
  i0.ɵɵadvance();
222
220
  i0.ɵɵconditional(ctx_r1.showRestoreActions && version_r7.canRestore ? 20 : -1);
223
221
  i0.ɵɵadvance(2);
@@ -226,8 +224,8 @@ function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_
226
224
  i0.ɵɵconditional(version_r7.changesJSON && ctx_r1.timelineConfig.showDiffs ? 23 : -1);
227
225
  } }
228
226
  function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
229
- i0.ɵɵelementStart(0, "div", 65);
230
- i0.ɵɵrepeaterCreate(1, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_For_2_Template, 24, 24, "div", 67, _forTrack1);
227
+ i0.ɵɵelementStart(0, "div", 62);
228
+ i0.ɵɵrepeaterCreate(1, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_For_2_Template, 24, 24, "div", 64, _forTrack1);
231
229
  i0.ɵɵelementEnd();
232
230
  } if (rf & 2) {
233
231
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -240,8 +238,8 @@ function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_
240
238
  i0.ɵɵelementEnd()();
241
239
  } }
242
240
  function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
243
- i0.ɵɵelementStart(0, "div", 66);
244
- i0.ɵɵelement(1, "i", 94);
241
+ i0.ɵɵelementStart(0, "div", 63);
242
+ i0.ɵɵelement(1, "i", 91);
245
243
  i0.ɵɵelementStart(2, "p", 14);
246
244
  i0.ɵɵtext(3, "No version history available for this prompt.");
247
245
  i0.ɵɵelementEnd();
@@ -253,8 +251,8 @@ function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_
253
251
  i0.ɵɵconditional(ctx_r1.prompt && !ctx_r1.prompt.EntityInfo.TrackRecordChanges ? 4 : -1);
254
252
  } }
255
253
  function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Template(rf, ctx) { if (rf & 1) {
256
- i0.ɵɵelementStart(0, "div", 62);
257
- i0.ɵɵtemplate(1, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_Template, 3, 0, "div", 65)(2, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_2_Template, 5, 1, "div", 66);
254
+ i0.ɵɵelementStart(0, "div", 59);
255
+ i0.ɵɵtemplate(1, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_Template, 3, 0, "div", 62)(2, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_2_Template, 5, 1, "div", 63);
258
256
  i0.ɵɵelementEnd();
259
257
  } if (rf & 2) {
260
258
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -262,7 +260,7 @@ function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_
262
260
  i0.ɵɵconditional(ctx_r1.versions.length > 0 ? 1 : 2);
263
261
  } }
264
262
  function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_For_7_Template(rf, ctx) { if (rf & 1) {
265
- i0.ɵɵelementStart(0, "option", 98);
263
+ i0.ɵɵelementStart(0, "option", 95);
266
264
  i0.ɵɵtext(1);
267
265
  i0.ɵɵpipe(2, "date");
268
266
  i0.ɵɵelementEnd();
@@ -274,7 +272,7 @@ function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_
274
272
  i0.ɵɵtextInterpolate2("", ctx_r1.getVersionLabel(version_r13), " - ", i0.ɵɵpipeBind2(2, 3, version_r13.changedAt, "short"), "");
275
273
  } }
276
274
  function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_For_15_Template(rf, ctx) { if (rf & 1) {
277
- i0.ɵɵelementStart(0, "option", 98);
275
+ i0.ɵɵelementStart(0, "option", 95);
278
276
  i0.ɵɵtext(1);
279
277
  i0.ɵɵpipe(2, "date");
280
278
  i0.ɵɵelementEnd();
@@ -286,12 +284,12 @@ function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_
286
284
  i0.ɵɵtextInterpolate2("", ctx_r1.getVersionLabel(version_r14), " - ", i0.ɵɵpipeBind2(2, 3, version_r14.changedAt, "short"), "");
287
285
  } }
288
286
  function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_7_For_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
289
- i0.ɵɵelementStart(0, "span", 111);
287
+ i0.ɵɵelementStart(0, "span", 108);
290
288
  i0.ɵɵtext(1, "Template");
291
289
  i0.ɵɵelementEnd();
292
290
  } }
293
291
  function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_7_For_2_Conditional_9_Conditional_5_Template(rf, ctx) { if (rf & 1) {
294
- i0.ɵɵelementStart(0, "pre", 119);
292
+ i0.ɵɵelementStart(0, "pre", 116);
295
293
  i0.ɵɵtext(1);
296
294
  i0.ɵɵelementEnd();
297
295
  } if (rf & 2) {
@@ -307,7 +305,7 @@ function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_
307
305
  i0.ɵɵtextInterpolate1(" ", ctx_r1.formatChangeValue(diff_r15.oldValue), " ");
308
306
  } }
309
307
  function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_7_For_2_Conditional_9_Conditional_11_Template(rf, ctx) { if (rf & 1) {
310
- i0.ɵɵelementStart(0, "pre", 119);
308
+ i0.ɵɵelementStart(0, "pre", 116);
311
309
  i0.ɵɵtext(1);
312
310
  i0.ɵɵelementEnd();
313
311
  } if (rf & 2) {
@@ -323,17 +321,17 @@ function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_
323
321
  i0.ɵɵtextInterpolate1(" ", ctx_r1.formatChangeValue(diff_r15.newValue), " ");
324
322
  } }
325
323
  function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_7_For_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
326
- i0.ɵɵelementStart(0, "div", 113)(1, "div", 116)(2, "h6", 117);
324
+ i0.ɵɵelementStart(0, "div", 110)(1, "div", 113)(2, "h6", 114);
327
325
  i0.ɵɵtext(3, "Before:");
328
326
  i0.ɵɵelementEnd();
329
- i0.ɵɵelementStart(4, "div", 118);
330
- i0.ɵɵtemplate(5, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_7_For_2_Conditional_9_Conditional_5_Template, 2, 1, "pre", 119)(6, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_7_For_2_Conditional_9_Conditional_6_Template, 1, 1);
327
+ i0.ɵɵelementStart(4, "div", 115);
328
+ i0.ɵɵtemplate(5, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_7_For_2_Conditional_9_Conditional_5_Template, 2, 1, "pre", 116)(6, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_7_For_2_Conditional_9_Conditional_6_Template, 1, 1);
331
329
  i0.ɵɵelementEnd()();
332
- i0.ɵɵelementStart(7, "div", 120)(8, "h6", 117);
330
+ i0.ɵɵelementStart(7, "div", 117)(8, "h6", 114);
333
331
  i0.ɵɵtext(9, "After:");
334
332
  i0.ɵɵelementEnd();
335
- i0.ɵɵelementStart(10, "div", 121);
336
- i0.ɵɵtemplate(11, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_7_For_2_Conditional_9_Conditional_11_Template, 2, 1, "pre", 119)(12, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_7_For_2_Conditional_9_Conditional_12_Template, 1, 1);
333
+ i0.ɵɵelementStart(10, "div", 118);
334
+ i0.ɵɵtemplate(11, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_7_For_2_Conditional_9_Conditional_11_Template, 2, 1, "pre", 116)(12, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_7_For_2_Conditional_9_Conditional_12_Template, 1, 1);
337
335
  i0.ɵɵelementEnd()()();
338
336
  } if (rf & 2) {
339
337
  const diff_r15 = i0.ɵɵnextContext().$implicit;
@@ -343,10 +341,10 @@ function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_
343
341
  i0.ɵɵconditional(diff_r15.isTemplate && diff_r15.fieldName === "TemplateText" ? 11 : 12);
344
342
  } }
345
343
  function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_7_For_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
346
- i0.ɵɵelementStart(0, "div", 114)(1, "h6", 117);
344
+ i0.ɵɵelementStart(0, "div", 111)(1, "h6", 114);
347
345
  i0.ɵɵtext(2, "Added:");
348
346
  i0.ɵɵelementEnd();
349
- i0.ɵɵelementStart(3, "div", 121);
347
+ i0.ɵɵelementStart(3, "div", 118);
350
348
  i0.ɵɵtext(4);
351
349
  i0.ɵɵelementEnd()();
352
350
  } if (rf & 2) {
@@ -356,10 +354,10 @@ function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_
356
354
  i0.ɵɵtextInterpolate(ctx_r1.formatChangeValue(diff_r15.newValue));
357
355
  } }
358
356
  function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_7_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
359
- i0.ɵɵelementStart(0, "div", 115)(1, "h6", 117);
357
+ i0.ɵɵelementStart(0, "div", 112)(1, "h6", 114);
360
358
  i0.ɵɵtext(2, "Removed:");
361
359
  i0.ɵɵelementEnd();
362
- i0.ɵɵelementStart(3, "div", 118);
360
+ i0.ɵɵelementStart(3, "div", 115);
363
361
  i0.ɵɵtext(4);
364
362
  i0.ɵɵelementEnd()();
365
363
  } if (rf & 2) {
@@ -369,16 +367,16 @@ function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_
369
367
  i0.ɵɵtextInterpolate(ctx_r1.formatChangeValue(diff_r15.oldValue));
370
368
  } }
371
369
  function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_7_For_2_Template(rf, ctx) { if (rf & 1) {
372
- i0.ɵɵelementStart(0, "div", 107)(1, "div", 108)(2, "div", 109)(3, "strong", 90);
370
+ i0.ɵɵelementStart(0, "div", 104)(1, "div", 105)(2, "div", 106)(3, "strong", 87);
373
371
  i0.ɵɵtext(4);
374
372
  i0.ɵɵelementEnd();
375
- i0.ɵɵelementStart(5, "span", 110);
373
+ i0.ɵɵelementStart(5, "span", 107);
376
374
  i0.ɵɵtext(6);
377
375
  i0.ɵɵelementEnd();
378
- i0.ɵɵtemplate(7, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_7_For_2_Conditional_7_Template, 2, 0, "span", 111);
376
+ i0.ɵɵtemplate(7, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_7_For_2_Conditional_7_Template, 2, 0, "span", 108);
379
377
  i0.ɵɵelementEnd()();
380
- i0.ɵɵelementStart(8, "div", 112);
381
- i0.ɵɵtemplate(9, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_7_For_2_Conditional_9_Template, 13, 2, "div", 113)(10, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_7_For_2_Conditional_10_Template, 5, 1, "div", 114)(11, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_7_For_2_Conditional_11_Template, 5, 1, "div", 115);
378
+ i0.ɵɵelementStart(8, "div", 109);
379
+ i0.ɵɵtemplate(9, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_7_For_2_Conditional_9_Template, 13, 2, "div", 110)(10, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_7_For_2_Conditional_10_Template, 5, 1, "div", 111)(11, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_7_For_2_Conditional_11_Template, 5, 1, "div", 112);
382
380
  i0.ɵɵelementEnd()();
383
381
  } if (rf & 2) {
384
382
  const diff_r15 = ctx.$implicit;
@@ -395,8 +393,8 @@ function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_
395
393
  i0.ɵɵconditional(diff_r15.changeType === "modified" ? 9 : diff_r15.changeType === "added" ? 10 : diff_r15.changeType === "removed" ? 11 : -1);
396
394
  } }
397
395
  function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_7_Template(rf, ctx) { if (rf & 1) {
398
- i0.ɵɵelementStart(0, "div", 104);
399
- i0.ɵɵrepeaterCreate(1, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_7_For_2_Template, 12, 12, "div", 106, _forTrack2);
396
+ i0.ɵɵelementStart(0, "div", 101);
397
+ i0.ɵɵrepeaterCreate(1, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_7_For_2_Template, 12, 12, "div", 103, _forTrack2);
400
398
  i0.ɵɵelementEnd();
401
399
  } if (rf & 2) {
402
400
  const ctx_r1 = i0.ɵɵnextContext(5);
@@ -404,21 +402,21 @@ function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_
404
402
  i0.ɵɵrepeater(ctx_r1.comparisonResult.differences);
405
403
  } }
406
404
  function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_8_Template(rf, ctx) { if (rf & 1) {
407
- i0.ɵɵelementStart(0, "div", 105);
408
- i0.ɵɵelement(1, "i", 122);
405
+ i0.ɵɵelementStart(0, "div", 102);
406
+ i0.ɵɵelement(1, "i", 119);
409
407
  i0.ɵɵelementStart(2, "p", 14);
410
408
  i0.ɵɵtext(3, "No differences found between the selected versions.");
411
409
  i0.ɵɵelementEnd()();
412
410
  } }
413
411
  function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Template(rf, ctx) { if (rf & 1) {
414
- i0.ɵɵelementStart(0, "div", 100)(1, "div", 101)(2, "h6", 102);
412
+ i0.ɵɵelementStart(0, "div", 97)(1, "div", 98)(2, "h6", 99);
415
413
  i0.ɵɵelement(3, "i", 33);
416
414
  i0.ɵɵtext(4);
417
415
  i0.ɵɵelementEnd();
418
- i0.ɵɵelementStart(5, "div", 103);
416
+ i0.ɵɵelementStart(5, "div", 100);
419
417
  i0.ɵɵtext(6);
420
418
  i0.ɵɵelementEnd()();
421
- i0.ɵɵtemplate(7, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_7_Template, 3, 0, "div", 104)(8, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_8_Template, 4, 0, "div", 105);
419
+ i0.ɵɵtemplate(7, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_7_Template, 3, 0, "div", 101)(8, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_8_Template, 4, 0, "div", 102);
422
420
  i0.ɵɵelementEnd();
423
421
  } if (rf & 2) {
424
422
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -431,26 +429,26 @@ function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_
431
429
  } }
432
430
  function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Template(rf, ctx) { if (rf & 1) {
433
431
  const _r12 = i0.ɵɵgetCurrentView();
434
- i0.ɵɵelementStart(0, "div", 63)(1, "div", 95)(2, "div", 96)(3, "label", 38);
432
+ i0.ɵɵelementStart(0, "div", 60)(1, "div", 92)(2, "div", 93)(3, "label", 38);
435
433
  i0.ɵɵtext(4, "Compare from:");
436
434
  i0.ɵɵelementEnd();
437
- i0.ɵɵelementStart(5, "select", 97);
435
+ i0.ɵɵelementStart(5, "select", 94);
438
436
  i0.ɵɵtwoWayListener("ngModelChange", function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Template_select_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.compareFromVersion, $event) || (ctx_r1.compareFromVersion = $event); return i0.ɵɵresetView($event); });
439
437
  i0.ɵɵlistener("ngModelChange", function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Template_select_ngModelChange_5_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.generateComparisonPublic()); });
440
- i0.ɵɵrepeaterCreate(6, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_For_7_Template, 3, 6, "option", 98, _forTrack1);
438
+ i0.ɵɵrepeaterCreate(6, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_For_7_Template, 3, 6, "option", 95, _forTrack1);
441
439
  i0.ɵɵelementEnd()();
442
- i0.ɵɵelementStart(8, "div", 99);
440
+ i0.ɵɵelementStart(8, "div", 96);
443
441
  i0.ɵɵelement(9, "i", 21);
444
442
  i0.ɵɵelementEnd();
445
- i0.ɵɵelementStart(10, "div", 96)(11, "label", 38);
443
+ i0.ɵɵelementStart(10, "div", 93)(11, "label", 38);
446
444
  i0.ɵɵtext(12, "Compare to:");
447
445
  i0.ɵɵelementEnd();
448
- i0.ɵɵelementStart(13, "select", 97);
446
+ i0.ɵɵelementStart(13, "select", 94);
449
447
  i0.ɵɵtwoWayListener("ngModelChange", function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Template_select_ngModelChange_13_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.compareToVersion, $event) || (ctx_r1.compareToVersion = $event); return i0.ɵɵresetView($event); });
450
448
  i0.ɵɵlistener("ngModelChange", function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Template_select_ngModelChange_13_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.generateComparisonPublic()); });
451
- i0.ɵɵrepeaterCreate(14, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_For_15_Template, 3, 6, "option", 98, _forTrack1);
449
+ i0.ɵɵrepeaterCreate(14, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_For_15_Template, 3, 6, "option", 95, _forTrack1);
452
450
  i0.ɵɵelementEnd()()();
453
- i0.ɵɵtemplate(16, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Template, 9, 4, "div", 100);
451
+ i0.ɵɵtemplate(16, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Template, 9, 4, "div", 97);
454
452
  i0.ɵɵelementEnd();
455
453
  } if (rf & 2) {
456
454
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -466,10 +464,10 @@ function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_
466
464
  i0.ɵɵconditional(ctx_r1.comparisonResult ? 16 : -1);
467
465
  } }
468
466
  function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_2_Conditional_1_Conditional_31_Template(rf, ctx) { if (rf & 1) {
469
- i0.ɵɵelementStart(0, "div", 129)(1, "h6", 2);
467
+ i0.ɵɵelementStart(0, "div", 126)(1, "h6", 2);
470
468
  i0.ɵɵtext(2, "Record State");
471
469
  i0.ɵɵelementEnd();
472
- i0.ɵɵelementStart(3, "div", 134)(4, "pre", 135);
470
+ i0.ɵɵelementStart(3, "div", 131)(4, "pre", 132);
473
471
  i0.ɵɵtext(5);
474
472
  i0.ɵɵpipe(6, "json");
475
473
  i0.ɵɵelementEnd()()();
@@ -479,10 +477,10 @@ function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_
479
477
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(6, 1, ctx_r1.selectedVersion.fullRecordJSON));
480
478
  } }
481
479
  function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_2_Conditional_1_Conditional_32_Template(rf, ctx) { if (rf & 1) {
482
- i0.ɵɵelementStart(0, "div", 129)(1, "h6", 2);
480
+ i0.ɵɵelementStart(0, "div", 126)(1, "h6", 2);
483
481
  i0.ɵɵtext(2, "Template Content");
484
482
  i0.ɵɵelementEnd();
485
- i0.ɵɵelementStart(3, "div", 136)(4, "pre", 119);
483
+ i0.ɵɵelementStart(3, "div", 133)(4, "pre", 116);
486
484
  i0.ɵɵtext(5);
487
485
  i0.ɵɵelementEnd()()();
488
486
  } if (rf & 2) {
@@ -491,39 +489,39 @@ function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_
491
489
  i0.ɵɵtextInterpolate(ctx_r1.selectedVersion.templateContent.TemplateText);
492
490
  } }
493
491
  function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
494
- i0.ɵɵelementStart(0, "div", 123)(1, "div", 125)(2, "h6", 126);
492
+ i0.ɵɵelementStart(0, "div", 120)(1, "div", 122)(2, "h6", 123);
495
493
  i0.ɵɵtext(3);
496
494
  i0.ɵɵelementEnd();
497
- i0.ɵɵelementStart(4, "div", 127)(5, "span", 77);
495
+ i0.ɵɵelementStart(4, "div", 124)(5, "span", 74);
498
496
  i0.ɵɵtext(6);
499
497
  i0.ɵɵpipe(7, "date");
500
498
  i0.ɵɵelementEnd();
501
- i0.ɵɵelementStart(8, "span", 78);
499
+ i0.ɵɵelementStart(8, "span", 75);
502
500
  i0.ɵɵtext(9);
503
501
  i0.ɵɵelementEnd()()();
504
- i0.ɵɵelementStart(10, "div", 128)(11, "div", 129)(12, "h6", 2);
502
+ i0.ɵɵelementStart(10, "div", 125)(11, "div", 126)(12, "h6", 2);
505
503
  i0.ɵɵtext(13, "Change Information");
506
504
  i0.ɵɵelementEnd();
507
- i0.ɵɵelementStart(14, "div", 130)(15, "div", 131)(16, "span", 132);
505
+ i0.ɵɵelementStart(14, "div", 127)(15, "div", 128)(16, "span", 129);
508
506
  i0.ɵɵtext(17, "Type:");
509
507
  i0.ɵɵelementEnd();
510
- i0.ɵɵelementStart(18, "span", 133);
508
+ i0.ɵɵelementStart(18, "span", 130);
511
509
  i0.ɵɵelement(19, "i", 51);
512
510
  i0.ɵɵtext(20);
513
511
  i0.ɵɵelementEnd()();
514
- i0.ɵɵelementStart(21, "div", 131)(22, "span", 132);
512
+ i0.ɵɵelementStart(21, "div", 128)(22, "span", 129);
515
513
  i0.ɵɵtext(23, "Source:");
516
514
  i0.ɵɵelementEnd();
517
- i0.ɵɵelementStart(24, "span", 133);
515
+ i0.ɵɵelementStart(24, "span", 130);
518
516
  i0.ɵɵtext(25);
519
517
  i0.ɵɵelementEnd()();
520
- i0.ɵɵelementStart(26, "div", 131)(27, "span", 132);
518
+ i0.ɵɵelementStart(26, "div", 128)(27, "span", 129);
521
519
  i0.ɵɵtext(28, "Description:");
522
520
  i0.ɵɵelementEnd();
523
- i0.ɵɵelementStart(29, "span", 133);
521
+ i0.ɵɵelementStart(29, "span", 130);
524
522
  i0.ɵɵtext(30);
525
523
  i0.ɵɵelementEnd()()()();
526
- i0.ɵɵtemplate(31, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_2_Conditional_1_Conditional_31_Template, 7, 3, "div", 129)(32, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_2_Conditional_1_Conditional_32_Template, 6, 1, "div", 129);
524
+ i0.ɵɵtemplate(31, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_2_Conditional_1_Conditional_31_Template, 7, 3, "div", 126)(32, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_2_Conditional_1_Conditional_32_Template, 6, 1, "div", 126);
527
525
  i0.ɵɵelementEnd()();
528
526
  } if (rf & 2) {
529
527
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -547,15 +545,15 @@ function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_
547
545
  i0.ɵɵconditional(ctx_r1.selectedVersion.templateContent ? 32 : -1);
548
546
  } }
549
547
  function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
550
- i0.ɵɵelementStart(0, "div", 124);
551
- i0.ɵɵelement(1, "i", 137);
548
+ i0.ɵɵelementStart(0, "div", 121);
549
+ i0.ɵɵelement(1, "i", 134);
552
550
  i0.ɵɵelementStart(2, "p", 14);
553
551
  i0.ɵɵtext(3, "Select a version from the timeline to view details.");
554
552
  i0.ɵɵelementEnd()();
555
553
  } }
556
554
  function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_2_Template(rf, ctx) { if (rf & 1) {
557
- i0.ɵɵelementStart(0, "div", 64);
558
- i0.ɵɵtemplate(1, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_2_Conditional_1_Template, 33, 13, "div", 123)(2, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_2_Conditional_2_Template, 4, 0, "div", 124);
555
+ i0.ɵɵelementStart(0, "div", 61);
556
+ i0.ɵɵtemplate(1, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_2_Conditional_1_Template, 33, 13, "div", 120)(2, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_2_Conditional_2_Template, 4, 0, "div", 121);
559
557
  i0.ɵɵelementEnd();
560
558
  } if (rf & 2) {
561
559
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -563,7 +561,7 @@ function PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_
563
561
  i0.ɵɵconditional(ctx_r1.selectedVersion ? 1 : 2);
564
562
  } }
565
563
  function PromptVersionControlComponent_Conditional_2_Conditional_51_Template(rf, ctx) { if (rf & 1) {
566
- i0.ɵɵtemplate(0, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Template, 3, 1, "div", 62)(1, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Template, 17, 3, "div", 63)(2, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_2_Template, 3, 1, "div", 64);
564
+ i0.ɵɵtemplate(0, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Template, 3, 1, "div", 59)(1, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Template, 17, 3, "div", 60)(2, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_2_Template, 3, 1, "div", 61);
567
565
  } if (rf & 2) {
568
566
  const ctx_r1 = i0.ɵɵnextContext(2);
569
567
  i0.ɵɵconditional(ctx_r1.currentView === "timeline" ? 0 : -1);
@@ -574,10 +572,10 @@ function PromptVersionControlComponent_Conditional_2_Conditional_51_Template(rf,
574
572
  } }
575
573
  function PromptVersionControlComponent_Conditional_2_Conditional_52_Template(rf, ctx) { if (rf & 1) {
576
574
  const _r16 = i0.ɵɵgetCurrentView();
577
- i0.ɵɵelementStart(0, "div", 57)(1, "div", 138);
578
- i0.ɵɵelement(2, "i", 139);
575
+ i0.ɵɵelementStart(0, "div", 57)(1, "div", 135);
576
+ i0.ɵɵelement(2, "i", 136);
579
577
  i0.ɵɵtext(3);
580
- i0.ɵɵelementStart(4, "button", 140);
578
+ i0.ɵɵelementStart(4, "button", 137);
581
579
  i0.ɵɵlistener("click", function PromptVersionControlComponent_Conditional_2_Conditional_52_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.refreshHistory()); });
582
580
  i0.ɵɵelement(5, "i", 53);
583
581
  i0.ɵɵtext(6, " Retry ");
@@ -661,7 +659,7 @@ function PromptVersionControlComponent_Conditional_2_Template(rf, ctx) { if (rf
661
659
  i0.ɵɵelement(48, "i", 55);
662
660
  i0.ɵɵtext(49, " Export ");
663
661
  i0.ɵɵelementEnd()()()();
664
- i0.ɵɵtemplate(50, PromptVersionControlComponent_Conditional_2_Conditional_50_Template, 7, 1, "div", 56)(51, PromptVersionControlComponent_Conditional_2_Conditional_51_Template, 3, 3)(52, PromptVersionControlComponent_Conditional_2_Conditional_52_Template, 7, 1, "div", 57);
662
+ i0.ɵɵtemplate(50, PromptVersionControlComponent_Conditional_2_Conditional_50_Template, 2, 1, "div", 56)(51, PromptVersionControlComponent_Conditional_2_Conditional_51_Template, 3, 3)(52, PromptVersionControlComponent_Conditional_2_Conditional_52_Template, 7, 1, "div", 57);
665
663
  } if (rf & 2) {
666
664
  const ctx_r1 = i0.ɵɵnextContext();
667
665
  i0.ɵɵadvance(5);
@@ -1154,18 +1152,18 @@ export class PromptVersionControlComponent {
1154
1152
  this.loadVersionHistory();
1155
1153
  }
1156
1154
  static ɵfac = function PromptVersionControlComponent_Factory(t) { return new (t || PromptVersionControlComponent)(i0.ɵɵdirectiveInject(i1.MJNotificationService)); };
1157
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PromptVersionControlComponent, selectors: [["app-prompt-version-control"]], inputs: { prompt: "prompt", autoLoad: "autoLoad", showRestoreActions: "showRestoreActions", showComparison: "showComparison", maxVersions: "maxVersions" }, outputs: { versionSelected: "versionSelected", versionRestored: "versionRestored", versionCompared: "versionCompared" }, decls: 3, vars: 1, consts: [[1, "prompt-version-control"], [1, "prompt-selector-section"], [1, "section-title"], [1, "fa-solid", "fa-history"], [1, "text-muted", "mb-3"], [1, "prompt-selector"], [1, "search-box", "mb-3"], [1, "input-group"], [1, "input-group-text"], [1, "fa-solid", "fa-search"], ["type", "text", "placeholder", "Search prompts...", 1, "form-control", 3, "ngModelChange", "ngModel"], [1, "prompts-list"], [1, "empty-state"], [1, "fa-solid", "fa-comment-dots", "text-muted"], [1, "text-muted"], [1, "prompt-item"], [1, "prompt-item", 3, "click"], [1, "prompt-info"], [1, "prompt-title"], [1, "prompt-description"], [1, "prompt-actions"], [1, "fa-solid", "fa-arrow-right"], [1, "version-toolbar"], [1, "toolbar-section"], [1, "toolbar-title"], [1, "prompt-name"], [1, "view-mode-toggle"], ["role", "group", 1, "btn-group", "btn-group-sm"], ["type", "radio", "name", "view", "id", "timelineView", "value", "timeline", 1, "btn-check", 3, "ngModelChange", "ngModel"], ["for", "timelineView", 1, "btn", "btn-outline-primary"], [1, "fa-solid", "fa-timeline"], ["type", "radio", "name", "view", "id", "comparisonView", "value", "comparison", 1, "btn-check", 3, "ngModelChange", "ngModel"], ["for", "comparisonView", 1, "btn", "btn-outline-primary"], [1, "fa-solid", "fa-code-compare"], ["type", "radio", "name", "view", "id", "detailsView", "value", "details", 1, "btn-check", 3, "ngModelChange", "ngModel"], ["for", "detailsView", 1, "btn", "btn-outline-primary"], [1, "fa-solid", "fa-list"], [1, "filter-controls"], [1, "form-label"], [1, "form-select", "form-select-sm", 3, "ngModelChange", "ngModel"], ["value", "all"], ["value", "updates"], ["value", "major"], ["value", "template"], [1, "form-check", "form-switch"], ["type", "checkbox", "id", "showSystem", 1, "form-check-input", 3, "ngModelChange", "ngModel"], ["for", "showSystem", 1, "form-check-label"], [1, "search-controls"], ["type", "text", "placeholder", "Search changes...", 1, "form-control", "form-control-sm", 3, "ngModelChange", "ngModel"], [1, "action-buttons"], ["type", "button", 1, "btn", "btn-sm", "btn-outline-secondary", 3, "click", "title"], [1, "fa-solid"], ["type", "button", "title", "Refresh history", 1, "btn", "btn-sm", "btn-outline-secondary", 3, "click", "disabled"], [1, "fa-solid", "fa-refresh"], ["type", "button", "title", "Export history", 1, "btn", "btn-sm", "btn-outline-info", 3, "click"], [1, "fa-solid", "fa-download"], [1, "loading-container"], [1, "error-container"], [1, "loading-content"], ["role", "status", 1, "spinner-border", "text-primary"], [1, "visually-hidden"], [1, "loading-message"], [1, "timeline-container"], [1, "comparison-container"], [1, "details-container"], [1, "version-timeline"], [1, "no-versions-message"], [1, "timeline-item", 3, "selected", "active"], [1, "timeline-item", 3, "click"], [1, "timeline-marker"], [1, "marker-icon"], [1, "timeline-line"], [1, "timeline-content"], [1, "version-header"], [1, "version-info"], [1, "version-label"], [1, "version-meta"], [1, "change-date"], [1, "changed-by"], [1, "change-source", "badge"], [1, "version-actions"], ["type", "button", "title", "Compare with next version", 1, "btn", "btn-sm", "btn-outline-primary"], ["type", "button", "title", "Restore this version", 1, "btn", "btn-sm", "btn-outline-success"], [1, "version-description"], [1, "changes-summary"], ["type", "button", "title", "Compare with next version", 1, "btn", "btn-sm", "btn-outline-primary", 3, "click"], ["type", "button", "title", "Restore this version", 1, "btn", "btn-sm", "btn-outline-success", 3, "click"], [1, "fa-solid", "fa-undo"], [1, "changes-list"], [1, "change-item"], [1, "field-name"], [1, "change-arrow"], [1, "new-value"], [1, "old-value"], [1, "fa-solid", "fa-info-circle", "text-muted"], [1, "comparison-selectors"], [1, "selector-group"], [1, "form-select", 3, "ngModelChange", "ngModel"], [3, "ngValue"], [1, "comparison-arrow"], [1, "comparison-results"], [1, "comparison-header"], [1, "comparison-title"], [1, "changes-count"], [1, "differences-list"], [1, "no-differences"], [1, "difference-item", 3, "class"], [1, "difference-item"], [1, "diff-header"], [1, "field-info"], [1, "change-type", "badge"], [1, "template-badge", "badge", "badge-info"], [1, "diff-content"], [1, "side-by-side-diff"], [1, "diff-added"], [1, "diff-removed"], [1, "diff-old"], [1, "diff-label"], [1, "diff-value", "old-value"], [1, "template-content"], [1, "diff-new"], [1, "diff-value", "new-value"], [1, "fa-solid", "fa-check-circle", "text-success"], [1, "version-details"], [1, "no-selection-message"], [1, "details-header"], [1, "details-title"], [1, "details-meta"], [1, "details-content"], [1, "detail-section"], [1, "detail-grid"], [1, "detail-item"], [1, "detail-label"], [1, "detail-value"], [1, "json-viewer"], [1, "json-content"], [1, "template-viewer"], [1, "fa-solid", "fa-hand-pointer", "text-muted"], ["role", "alert", 1, "alert", "alert-danger"], [1, "fa-solid", "fa-exclamation-triangle"], ["type", "button", 1, "btn", "btn-sm", "btn-outline-danger", "ms-2", 3, "click"]], template: function PromptVersionControlComponent_Template(rf, ctx) { if (rf & 1) {
1155
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PromptVersionControlComponent, selectors: [["app-prompt-version-control"]], inputs: { prompt: "prompt", autoLoad: "autoLoad", showRestoreActions: "showRestoreActions", showComparison: "showComparison", maxVersions: "maxVersions" }, outputs: { versionSelected: "versionSelected", versionRestored: "versionRestored", versionCompared: "versionCompared" }, decls: 3, vars: 1, consts: [[1, "prompt-version-control"], [1, "prompt-selector-section"], [1, "section-title"], [1, "fa-solid", "fa-history"], [1, "text-muted", "mb-3"], [1, "prompt-selector"], [1, "search-box", "mb-3"], [1, "input-group"], [1, "input-group-text"], [1, "fa-solid", "fa-search"], ["type", "text", "placeholder", "Search prompts...", 1, "form-control", 3, "ngModelChange", "ngModel"], [1, "prompts-list"], [1, "empty-state"], [1, "fa-solid", "fa-comment-dots", "text-muted"], [1, "text-muted"], [1, "prompt-item"], [1, "prompt-item", 3, "click"], [1, "prompt-info"], [1, "prompt-title"], [1, "prompt-description"], [1, "prompt-actions"], [1, "fa-solid", "fa-arrow-right"], [1, "version-toolbar"], [1, "toolbar-section"], [1, "toolbar-title"], [1, "prompt-name"], [1, "view-mode-toggle"], ["role", "group", 1, "btn-group", "btn-group-sm"], ["type", "radio", "name", "view", "id", "timelineView", "value", "timeline", 1, "btn-check", 3, "ngModelChange", "ngModel"], ["for", "timelineView", 1, "btn", "btn-outline-primary"], [1, "fa-solid", "fa-timeline"], ["type", "radio", "name", "view", "id", "comparisonView", "value", "comparison", 1, "btn-check", 3, "ngModelChange", "ngModel"], ["for", "comparisonView", 1, "btn", "btn-outline-primary"], [1, "fa-solid", "fa-code-compare"], ["type", "radio", "name", "view", "id", "detailsView", "value", "details", 1, "btn-check", 3, "ngModelChange", "ngModel"], ["for", "detailsView", 1, "btn", "btn-outline-primary"], [1, "fa-solid", "fa-list"], [1, "filter-controls"], [1, "form-label"], [1, "form-select", "form-select-sm", 3, "ngModelChange", "ngModel"], ["value", "all"], ["value", "updates"], ["value", "major"], ["value", "template"], [1, "form-check", "form-switch"], ["type", "checkbox", "id", "showSystem", 1, "form-check-input", 3, "ngModelChange", "ngModel"], ["for", "showSystem", 1, "form-check-label"], [1, "search-controls"], ["type", "text", "placeholder", "Search changes...", 1, "form-control", "form-control-sm", 3, "ngModelChange", "ngModel"], [1, "action-buttons"], ["type", "button", 1, "btn", "btn-sm", "btn-outline-secondary", 3, "click", "title"], [1, "fa-solid"], ["type", "button", "title", "Refresh history", 1, "btn", "btn-sm", "btn-outline-secondary", 3, "click", "disabled"], [1, "fa-solid", "fa-refresh"], ["type", "button", "title", "Export history", 1, "btn", "btn-sm", "btn-outline-info", 3, "click"], [1, "fa-solid", "fa-download"], [1, "loading-container"], [1, "error-container"], ["size", "large", 3, "text"], [1, "timeline-container"], [1, "comparison-container"], [1, "details-container"], [1, "version-timeline"], [1, "no-versions-message"], [1, "timeline-item", 3, "selected", "active"], [1, "timeline-item", 3, "click"], [1, "timeline-marker"], [1, "marker-icon"], [1, "timeline-line"], [1, "timeline-content"], [1, "version-header"], [1, "version-info"], [1, "version-label"], [1, "version-meta"], [1, "change-date"], [1, "changed-by"], [1, "change-source", "badge"], [1, "version-actions"], ["type", "button", "title", "Compare with next version", 1, "btn", "btn-sm", "btn-outline-primary"], ["type", "button", "title", "Restore this version", 1, "btn", "btn-sm", "btn-outline-success"], [1, "version-description"], [1, "changes-summary"], ["type", "button", "title", "Compare with next version", 1, "btn", "btn-sm", "btn-outline-primary", 3, "click"], ["type", "button", "title", "Restore this version", 1, "btn", "btn-sm", "btn-outline-success", 3, "click"], [1, "fa-solid", "fa-undo"], [1, "changes-list"], [1, "change-item"], [1, "field-name"], [1, "change-arrow"], [1, "new-value"], [1, "old-value"], [1, "fa-solid", "fa-info-circle", "text-muted"], [1, "comparison-selectors"], [1, "selector-group"], [1, "form-select", 3, "ngModelChange", "ngModel"], [3, "ngValue"], [1, "comparison-arrow"], [1, "comparison-results"], [1, "comparison-header"], [1, "comparison-title"], [1, "changes-count"], [1, "differences-list"], [1, "no-differences"], [1, "difference-item", 3, "class"], [1, "difference-item"], [1, "diff-header"], [1, "field-info"], [1, "change-type", "badge"], [1, "template-badge", "badge", "badge-info"], [1, "diff-content"], [1, "side-by-side-diff"], [1, "diff-added"], [1, "diff-removed"], [1, "diff-old"], [1, "diff-label"], [1, "diff-value", "old-value"], [1, "template-content"], [1, "diff-new"], [1, "diff-value", "new-value"], [1, "fa-solid", "fa-check-circle", "text-success"], [1, "version-details"], [1, "no-selection-message"], [1, "details-header"], [1, "details-title"], [1, "details-meta"], [1, "details-content"], [1, "detail-section"], [1, "detail-grid"], [1, "detail-item"], [1, "detail-label"], [1, "detail-value"], [1, "json-viewer"], [1, "json-content"], [1, "template-viewer"], [1, "fa-solid", "fa-hand-pointer", "text-muted"], ["role", "alert", 1, "alert", "alert-danger"], [1, "fa-solid", "fa-exclamation-triangle"], ["type", "button", 1, "btn", "btn-sm", "btn-outline-danger", "ms-2", 3, "click"]], template: function PromptVersionControlComponent_Template(rf, ctx) { if (rf & 1) {
1158
1156
  i0.ɵɵelementStart(0, "div", 0);
1159
1157
  i0.ɵɵtemplate(1, PromptVersionControlComponent_Conditional_1_Template, 15, 2, "div", 1)(2, PromptVersionControlComponent_Conditional_2_Template, 53, 17);
1160
1158
  i0.ɵɵelementEnd();
1161
1159
  } if (rf & 2) {
1162
1160
  i0.ɵɵadvance();
1163
1161
  i0.ɵɵconditional(!ctx.prompt ? 1 : 2);
1164
- } }, dependencies: [i2.NgSelectOption, i2.ɵNgSelectMultipleOption, i2.DefaultValueAccessor, i2.CheckboxControlValueAccessor, i2.SelectControlValueAccessor, i2.RadioControlValueAccessor, i2.NgControlStatus, i2.NgModel, i3.JsonPipe, i3.DatePipe], styles: [".prompt-version-control[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: #f8f9fa;\n\n .version-toolbar {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1rem;\n background: white;\n border-bottom: 1px solid #dee2e6;\n flex-shrink: 0;\n gap: 1rem;\n flex-wrap: wrap;\n\n .toolbar-section {\n display: flex;\n align-items: center;\n gap: 1rem;\n flex-wrap: wrap;\n\n .toolbar-title {\n margin: 0;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-weight: 600;\n\n i {\n color: #0d6efd;\n }\n\n .prompt-name {\n font-weight: 400;\n color: #6c757d;\n }\n }\n\n .filter-controls,\n .search-controls {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n\n .form-label {\n margin: 0;\n font-size: 0.875rem;\n color: #6c757d;\n white-space: nowrap;\n }\n\n .form-select,\n .form-control {\n min-width: 120px;\n }\n\n .form-check {\n margin: 0;\n \n .form-check-label {\n font-size: 0.875rem;\n }\n }\n }\n\n .action-buttons {\n display: flex;\n gap: 0.5rem;\n\n .btn {\n font-size: 0.875rem;\n }\n }\n }\n }\n\n .loading-container {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n\n .loading-content {\n text-align: center;\n \n .loading-message {\n margin-top: 1rem;\n color: #6c757d;\n }\n }\n }\n\n .timeline-container {\n flex: 1;\n padding: 1rem;\n overflow-y: auto;\n\n .version-timeline {\n max-width: 800px;\n margin: 0 auto;\n\n .timeline-item {\n display: flex;\n position: relative;\n margin-bottom: 2rem;\n cursor: pointer;\n transition: all 0.2s ease;\n\n &:hover {\n .timeline-content {\n box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.1);\n transform: translateY(-1px);\n }\n }\n\n &.selected {\n .timeline-content {\n border-color: #0d6efd;\n box-shadow: 0 0 0 0.2rem rgba(13, 110, 253, 0.25);\n }\n }\n\n &.active {\n .timeline-marker .marker-icon {\n border-color: #28a745;\n background-color: #28a745;\n color: white;\n }\n }\n\n .timeline-marker {\n display: flex;\n flex-direction: column;\n align-items: center;\n margin-right: 1.5rem;\n flex-shrink: 0;\n\n .marker-icon {\n width: 2.5rem;\n height: 2.5rem;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 3px solid;\n background: white;\n font-size: 1rem;\n z-index: 2;\n\n &.change-create {\n border-color: #28a745;\n color: #28a745;\n }\n\n &.change-update {\n border-color: #0d6efd;\n color: #0d6efd;\n }\n\n &.change-delete {\n border-color: #dc3545;\n color: #dc3545;\n }\n }\n\n .timeline-line {\n width: 2px;\n flex: 1;\n background: #dee2e6;\n margin-top: 0.5rem;\n min-height: 2rem;\n }\n }\n\n .timeline-content {\n flex: 1;\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 0.5rem;\n padding: 1.5rem;\n transition: all 0.2s ease;\n\n .version-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 1rem;\n\n .version-info {\n .version-label {\n margin: 0 0 0.5rem 0;\n color: #495057;\n font-weight: 600;\n }\n\n .version-meta {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n font-size: 0.875rem;\n color: #6c757d;\n flex-wrap: wrap;\n\n .change-date {\n font-weight: 500;\n }\n\n .badge {\n font-size: 0.75rem;\n }\n }\n }\n\n .version-actions {\n display: flex;\n gap: 0.5rem;\n\n .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.75rem;\n }\n }\n }\n\n .version-description {\n color: #495057;\n margin-bottom: 1rem;\n line-height: 1.5;\n }\n\n .changes-summary {\n .changes-list {\n .change-item {\n display: flex;\n align-items: center;\n padding: 0.5rem;\n background: #f8f9fa;\n border-radius: 0.375rem;\n margin-bottom: 0.5rem;\n font-size: 0.875rem;\n\n .field-name {\n font-weight: 500;\n color: #495057;\n margin-right: 0.75rem;\n min-width: 100px;\n }\n\n .change-arrow {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n\n .old-value {\n color: #dc3545;\n text-decoration: line-through;\n }\n\n .new-value {\n color: #28a745;\n font-weight: 500;\n }\n\n i {\n color: #6c757d;\n }\n }\n }\n }\n }\n }\n }\n }\n\n .no-versions-message {\n text-align: center;\n padding: 3rem 1rem;\n color: #6c757d;\n\n i {\n font-size: 3rem;\n margin-bottom: 1rem;\n display: block;\n opacity: 0.5;\n }\n\n p {\n margin: 0.5rem 0;\n font-size: 1rem;\n line-height: 1.5;\n }\n }\n }\n\n .comparison-container {\n flex: 1;\n padding: 1rem;\n overflow-y: auto;\n\n .comparison-selectors {\n display: flex;\n align-items: end;\n gap: 1rem;\n margin-bottom: 2rem;\n padding: 1rem;\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 0.5rem;\n\n .selector-group {\n flex: 1;\n\n .form-label {\n font-weight: 500;\n color: #495057;\n }\n }\n\n .comparison-arrow {\n padding-bottom: 0.375rem;\n color: #6c757d;\n font-size: 1.25rem;\n }\n }\n\n .comparison-results {\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 0.5rem;\n overflow: hidden;\n\n .comparison-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1rem;\n background: #f8f9fa;\n border-bottom: 1px solid #dee2e6;\n\n .comparison-title {\n margin: 0;\n color: #495057;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n }\n\n .changes-count {\n font-size: 0.875rem;\n color: #6c757d;\n font-weight: 500;\n }\n }\n\n .differences-list {\n .difference-item {\n border-bottom: 1px solid #f1f3f4;\n padding: 1.5rem;\n\n &:last-child {\n border-bottom: none;\n }\n\n &.diff-added {\n border-left: 4px solid #28a745;\n }\n\n &.diff-modified {\n border-left: 4px solid #ffc107;\n }\n\n &.diff-removed {\n border-left: 4px solid #dc3545;\n }\n\n .diff-header {\n margin-bottom: 1rem;\n\n .field-info {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n\n .field-name {\n font-size: 1rem;\n color: #495057;\n }\n\n .badge {\n font-size: 0.75rem;\n \n &.template-badge {\n background-color: #6f42c1;\n }\n }\n }\n }\n\n .diff-content {\n .side-by-side-diff {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 1rem;\n\n .diff-old,\n .diff-new {\n .diff-label {\n font-size: 0.875rem;\n font-weight: 600;\n margin-bottom: 0.5rem;\n color: #6c757d;\n }\n\n .diff-value {\n padding: 1rem;\n border-radius: 0.375rem;\n font-family: 'Fira Code', Monaco, Consolas, monospace;\n font-size: 0.875rem;\n line-height: 1.5;\n white-space: pre-wrap;\n word-break: break-word;\n\n &.old-value {\n background: #fff5f5;\n border: 1px solid #fed7d7;\n color: #c53030;\n }\n\n &.new-value {\n background: #f0fff4;\n border: 1px solid #9ae6b4;\n color: #2f855a;\n }\n\n .template-content {\n margin: 0;\n background: transparent;\n border: none;\n padding: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n white-space: pre-wrap;\n }\n }\n }\n }\n\n .diff-added,\n .diff-removed {\n .diff-label {\n font-size: 0.875rem;\n font-weight: 600;\n margin-bottom: 0.5rem;\n color: #6c757d;\n }\n\n .diff-value {\n padding: 1rem;\n border-radius: 0.375rem;\n font-family: 'Fira Code', Monaco, Consolas, monospace;\n font-size: 0.875rem;\n line-height: 1.5;\n white-space: pre-wrap;\n word-break: break-word;\n }\n }\n\n .diff-added .diff-value {\n background: #f0fff4;\n border: 1px solid #9ae6b4;\n color: #2f855a;\n }\n\n .diff-removed .diff-value {\n background: #fff5f5;\n border: 1px solid #fed7d7;\n color: #c53030;\n }\n }\n }\n }\n\n .no-differences {\n text-align: center;\n padding: 3rem 1rem;\n\n i {\n font-size: 3rem;\n margin-bottom: 1rem;\n display: block;\n }\n\n p {\n margin: 0;\n font-size: 1rem;\n }\n }\n }\n }\n\n .details-container {\n flex: 1;\n padding: 1rem;\n overflow-y: auto;\n\n .version-details {\n max-width: 800px;\n margin: 0 auto;\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 0.5rem;\n overflow: hidden;\n\n .details-header {\n padding: 1.5rem;\n background: #f8f9fa;\n border-bottom: 1px solid #dee2e6;\n\n .details-title {\n margin: 0 0 0.5rem 0;\n color: #495057;\n font-weight: 600;\n }\n\n .details-meta {\n display: flex;\n gap: 1rem;\n font-size: 0.875rem;\n color: #6c757d;\n flex-wrap: wrap;\n }\n }\n\n .details-content {\n padding: 1.5rem;\n\n .detail-section {\n margin-bottom: 2rem;\n\n &:last-child {\n margin-bottom: 0;\n }\n\n .section-title {\n margin: 0 0 1rem 0;\n color: #495057;\n font-weight: 600;\n font-size: 1rem;\n border-bottom: 1px solid #e9ecef;\n padding-bottom: 0.5rem;\n }\n\n .detail-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 1rem;\n\n .detail-item {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n\n .detail-label {\n font-size: 0.875rem;\n font-weight: 500;\n color: #6c757d;\n }\n\n .detail-value {\n font-size: 0.875rem;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n }\n }\n }\n\n .json-viewer,\n .template-viewer {\n .json-content,\n .template-content {\n background: #f8f9fa;\n border: 1px solid #dee2e6;\n border-radius: 0.375rem;\n padding: 1rem;\n margin: 0;\n font-family: 'Fira Code', Monaco, Consolas, monospace;\n font-size: 0.875rem;\n line-height: 1.5;\n overflow-x: auto;\n max-height: 400px;\n overflow-y: auto;\n }\n }\n }\n }\n }\n\n .no-selection-message {\n text-align: center;\n padding: 3rem 1rem;\n color: #6c757d;\n\n i {\n font-size: 3rem;\n margin-bottom: 1rem;\n display: block;\n opacity: 0.5;\n }\n\n p {\n margin: 0;\n font-size: 1rem;\n line-height: 1.5;\n }\n }\n }\n\n .error-container {\n padding: 1rem;\n\n .alert {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n }\n }\n}\n\n//[_ngcontent-%COMP%] Responsive[_ngcontent-%COMP%] adjustments\n@media[_ngcontent-%COMP%] (max-width[_ngcontent-%COMP%]: 1200px)[_ngcontent-%COMP%] {\n .prompt-version-control {\n .version-toolbar {\n .toolbar-section {\n min-width: 100%;\n justify-content: space-between;\n }\n }\n\n .comparison-container {\n .comparison-selectors {\n flex-direction: column;\n align-items: stretch;\n\n .comparison-arrow {\n align-self: center;\n padding: 0.5rem 0;\n }\n }\n\n .comparison-results {\n .differences-list {\n .difference-item {\n .diff-content {\n .side-by-side-diff {\n grid-template-columns: 1fr;\n gap: 0.5rem;\n }\n }\n }\n }\n }\n }\n }\n}\n\n@media (max-width: 768px) {\n .prompt-version-control[_ngcontent-%COMP%] {\n .version-toolbar {\n padding: 0.75rem;\n \n .toolbar-section {\n flex-wrap: wrap;\n gap: 0.5rem;\n }\n }\n\n .timeline-container {\n padding: 0.75rem;\n\n .version-timeline {\n .timeline-item {\n .timeline-marker {\n margin-right: 1rem;\n\n .marker-icon {\n width: 2rem;\n height: 2rem;\n font-size: 0.875rem;\n }\n }\n\n .timeline-content {\n padding: 1rem;\n\n .version-header {\n flex-direction: column;\n align-items: flex-start;\n gap: 0.75rem;\n\n .version-actions {\n align-self: flex-end;\n }\n }\n }\n }\n }\n }\n\n .comparison-container,\n .details-container {\n padding: 0.75rem;\n }\n }\n\n .prompt-selector-section[_ngcontent-%COMP%] {\n padding: 2rem;\n background: white;\n border-radius: 8px;\n margin: 1rem;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n\n .section-title {\n color: #495057;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-weight: 600;\n margin-bottom: 0.5rem;\n\n i {\n color: #007bff;\n }\n }\n\n .prompt-selector {\n .search-box {\n .input-group-text {\n background: #f8f9fa;\n border-color: #ced4da;\n\n i {\n color: #6c757d;\n }\n }\n\n .form-control {\n border-color: #ced4da;\n\n &:focus {\n border-color: #007bff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n }\n }\n }\n\n .prompts-list {\n max-height: 400px;\n overflow-y: auto;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n\n .empty-state {\n text-align: center;\n padding: 2rem;\n\n i {\n font-size: 2rem;\n margin-bottom: 0.5rem;\n }\n }\n\n .prompt-item {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0.75rem 1rem;\n border-bottom: 1px solid #dee2e6;\n cursor: pointer;\n transition: background-color 0.2s;\n\n &:last-child {\n border-bottom: none;\n }\n\n &:hover {\n background-color: #f8f9fa;\n }\n\n .prompt-info {\n flex: 1;\n\n .prompt-title {\n margin: 0 0 0.25rem 0;\n font-weight: 600;\n color: #495057;\n }\n\n .prompt-description {\n margin: 0;\n font-size: 0.875rem;\n color: #6c757d;\n line-height: 1.4;\n }\n }\n\n .prompt-actions {\n color: #007bff;\n opacity: 0.7;\n transition: opacity 0.2s;\n }\n\n &:hover .prompt-actions {\n opacity: 1;\n }\n }\n }\n }\n }\n}"] });
1162
+ } }, dependencies: [i2.NgSelectOption, i2.ɵNgSelectMultipleOption, i2.DefaultValueAccessor, i2.CheckboxControlValueAccessor, i2.SelectControlValueAccessor, i2.RadioControlValueAccessor, i2.NgControlStatus, i2.NgModel, i3.LoadingComponent, i4.JsonPipe, i4.DatePipe], styles: [".prompt-version-control[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: #f8f9fa;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1rem;\n background: white;\n border-bottom: 1px solid #dee2e6;\n flex-shrink: 0;\n gap: 1rem;\n flex-wrap: wrap;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 1rem;\n flex-wrap: wrap;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .toolbar-title[_ngcontent-%COMP%] {\n margin: 0;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-weight: 600;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .toolbar-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #0d6efd;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .toolbar-title[_ngcontent-%COMP%] .prompt-name[_ngcontent-%COMP%] {\n font-weight: 400;\n color: #6c757d;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .filter-controls[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .search-controls[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .filter-controls[_ngcontent-%COMP%] .form-label[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .search-controls[_ngcontent-%COMP%] .form-label[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.875rem;\n color: #6c757d;\n white-space: nowrap;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .filter-controls[_ngcontent-%COMP%] .form-select[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .filter-controls[_ngcontent-%COMP%] .form-control[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .search-controls[_ngcontent-%COMP%] .form-select[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .search-controls[_ngcontent-%COMP%] .form-control[_ngcontent-%COMP%] {\n min-width: 120px;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .filter-controls[_ngcontent-%COMP%] .form-check[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .search-controls[_ngcontent-%COMP%] .form-check[_ngcontent-%COMP%] {\n margin: 0;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .filter-controls[_ngcontent-%COMP%] .form-check[_ngcontent-%COMP%] .form-check-label[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .search-controls[_ngcontent-%COMP%] .form-check[_ngcontent-%COMP%] .form-check-label[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .action-buttons[_ngcontent-%COMP%] {\n display: flex;\n gap: 0.5rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .action-buttons[_ngcontent-%COMP%] .btn[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .loading-container[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.prompt-version-control[_ngcontent-%COMP%] .loading-container[_ngcontent-%COMP%] .loading-content[_ngcontent-%COMP%] {\n text-align: center;\n}\n.prompt-version-control[_ngcontent-%COMP%] .loading-container[_ngcontent-%COMP%] .loading-content[_ngcontent-%COMP%] .loading-message[_ngcontent-%COMP%] {\n margin-top: 1rem;\n color: #6c757d;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] {\n flex: 1;\n padding: 1rem;\n overflow-y: auto;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] {\n max-width: 800px;\n margin: 0 auto;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] {\n display: flex;\n position: relative;\n margin-bottom: 2rem;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%]:hover .timeline-content[_ngcontent-%COMP%] {\n box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.1);\n transform: translateY(-1px);\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item.selected[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] {\n border-color: #0d6efd;\n box-shadow: 0 0 0 0.2rem rgba(13, 110, 253, 0.25);\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item.active[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] .marker-icon[_ngcontent-%COMP%] {\n border-color: #28a745;\n background-color: #28a745;\n color: white;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n margin-right: 1.5rem;\n flex-shrink: 0;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] .marker-icon[_ngcontent-%COMP%] {\n width: 2.5rem;\n height: 2.5rem;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 3px solid;\n background: white;\n font-size: 1rem;\n z-index: 2;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] .marker-icon.change-create[_ngcontent-%COMP%] {\n border-color: #28a745;\n color: #28a745;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] .marker-icon.change-update[_ngcontent-%COMP%] {\n border-color: #0d6efd;\n color: #0d6efd;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] .marker-icon.change-delete[_ngcontent-%COMP%] {\n border-color: #dc3545;\n color: #dc3545;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] .timeline-line[_ngcontent-%COMP%] {\n width: 2px;\n flex: 1;\n background: #dee2e6;\n margin-top: 0.5rem;\n min-height: 2rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] {\n flex: 1;\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 0.5rem;\n padding: 1.5rem;\n transition: all 0.2s ease;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .version-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 1rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .version-header[_ngcontent-%COMP%] .version-info[_ngcontent-%COMP%] .version-label[_ngcontent-%COMP%] {\n margin: 0 0 0.5rem 0;\n color: #495057;\n font-weight: 600;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .version-header[_ngcontent-%COMP%] .version-info[_ngcontent-%COMP%] .version-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n font-size: 0.875rem;\n color: #6c757d;\n flex-wrap: wrap;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .version-header[_ngcontent-%COMP%] .version-info[_ngcontent-%COMP%] .version-meta[_ngcontent-%COMP%] .change-date[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .version-header[_ngcontent-%COMP%] .version-info[_ngcontent-%COMP%] .version-meta[_ngcontent-%COMP%] .badge[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .version-header[_ngcontent-%COMP%] .version-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 0.5rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .version-header[_ngcontent-%COMP%] .version-actions[_ngcontent-%COMP%] .btn[_ngcontent-%COMP%] {\n padding: 0.25rem 0.5rem;\n font-size: 0.75rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .version-description[_ngcontent-%COMP%] {\n color: #495057;\n margin-bottom: 1rem;\n line-height: 1.5;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .changes-summary[_ngcontent-%COMP%] .changes-list[_ngcontent-%COMP%] .change-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 0.5rem;\n background: #f8f9fa;\n border-radius: 0.375rem;\n margin-bottom: 0.5rem;\n font-size: 0.875rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .changes-summary[_ngcontent-%COMP%] .changes-list[_ngcontent-%COMP%] .change-item[_ngcontent-%COMP%] .field-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: #495057;\n margin-right: 0.75rem;\n min-width: 100px;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .changes-summary[_ngcontent-%COMP%] .changes-list[_ngcontent-%COMP%] .change-item[_ngcontent-%COMP%] .change-arrow[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .changes-summary[_ngcontent-%COMP%] .changes-list[_ngcontent-%COMP%] .change-item[_ngcontent-%COMP%] .change-arrow[_ngcontent-%COMP%] .old-value[_ngcontent-%COMP%] {\n color: #dc3545;\n text-decoration: line-through;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .changes-summary[_ngcontent-%COMP%] .changes-list[_ngcontent-%COMP%] .change-item[_ngcontent-%COMP%] .change-arrow[_ngcontent-%COMP%] .new-value[_ngcontent-%COMP%] {\n color: #28a745;\n font-weight: 500;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .changes-summary[_ngcontent-%COMP%] .changes-list[_ngcontent-%COMP%] .change-item[_ngcontent-%COMP%] .change-arrow[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #6c757d;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .no-versions-message[_ngcontent-%COMP%] {\n text-align: center;\n padding: 3rem 1rem;\n color: #6c757d;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .no-versions-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3rem;\n margin-bottom: 1rem;\n display: block;\n opacity: 0.5;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .no-versions-message[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0.5rem 0;\n font-size: 1rem;\n line-height: 1.5;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] {\n flex: 1;\n padding: 1rem;\n overflow-y: auto;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-selectors[_ngcontent-%COMP%] {\n display: flex;\n align-items: end;\n gap: 1rem;\n margin-bottom: 2rem;\n padding: 1rem;\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 0.5rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-selectors[_ngcontent-%COMP%] .selector-group[_ngcontent-%COMP%] {\n flex: 1;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-selectors[_ngcontent-%COMP%] .selector-group[_ngcontent-%COMP%] .form-label[_ngcontent-%COMP%] {\n font-weight: 500;\n color: #495057;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-selectors[_ngcontent-%COMP%] .comparison-arrow[_ngcontent-%COMP%] {\n padding-bottom: 0.375rem;\n color: #6c757d;\n font-size: 1.25rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] {\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 0.5rem;\n overflow: hidden;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .comparison-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1rem;\n background: #f8f9fa;\n border-bottom: 1px solid #dee2e6;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .comparison-header[_ngcontent-%COMP%] .comparison-title[_ngcontent-%COMP%] {\n margin: 0;\n color: #495057;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .comparison-header[_ngcontent-%COMP%] .changes-count[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n color: #6c757d;\n font-weight: 500;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] {\n border-bottom: 1px solid #f1f3f4;\n padding: 1.5rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item.diff-added[_ngcontent-%COMP%] {\n border-left: 4px solid #28a745;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item.diff-modified[_ngcontent-%COMP%] {\n border-left: 4px solid #ffc107;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item.diff-removed[_ngcontent-%COMP%] {\n border-left: 4px solid #dc3545;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-header[_ngcontent-%COMP%] {\n margin-bottom: 1rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-header[_ngcontent-%COMP%] .field-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-header[_ngcontent-%COMP%] .field-info[_ngcontent-%COMP%] .field-name[_ngcontent-%COMP%] {\n font-size: 1rem;\n color: #495057;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-header[_ngcontent-%COMP%] .field-info[_ngcontent-%COMP%] .badge[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-header[_ngcontent-%COMP%] .field-info[_ngcontent-%COMP%] .badge.template-badge[_ngcontent-%COMP%] {\n background-color: #6f42c1;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 1rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] .diff-old[_ngcontent-%COMP%] .diff-label[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] .diff-new[_ngcontent-%COMP%] .diff-label[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n font-weight: 600;\n margin-bottom: 0.5rem;\n color: #6c757d;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] .diff-old[_ngcontent-%COMP%] .diff-value[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] .diff-new[_ngcontent-%COMP%] .diff-value[_ngcontent-%COMP%] {\n padding: 1rem;\n border-radius: 0.375rem;\n font-family: \"Fira Code\", Monaco, Consolas, monospace;\n font-size: 0.875rem;\n line-height: 1.5;\n white-space: pre-wrap;\n word-break: break-word;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] .diff-old[_ngcontent-%COMP%] .diff-value.old-value[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] .diff-new[_ngcontent-%COMP%] .diff-value.old-value[_ngcontent-%COMP%] {\n background: #fff5f5;\n border: 1px solid #fed7d7;\n color: #c53030;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] .diff-old[_ngcontent-%COMP%] .diff-value.new-value[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] .diff-new[_ngcontent-%COMP%] .diff-value.new-value[_ngcontent-%COMP%] {\n background: #f0fff4;\n border: 1px solid #9ae6b4;\n color: #2f855a;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] .diff-old[_ngcontent-%COMP%] .diff-value[_ngcontent-%COMP%] .template-content[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] .diff-new[_ngcontent-%COMP%] .diff-value[_ngcontent-%COMP%] .template-content[_ngcontent-%COMP%] {\n margin: 0;\n background: transparent;\n border: none;\n padding: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n white-space: pre-wrap;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .diff-added[_ngcontent-%COMP%] .diff-label[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .diff-removed[_ngcontent-%COMP%] .diff-label[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n font-weight: 600;\n margin-bottom: 0.5rem;\n color: #6c757d;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .diff-added[_ngcontent-%COMP%] .diff-value[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .diff-removed[_ngcontent-%COMP%] .diff-value[_ngcontent-%COMP%] {\n padding: 1rem;\n border-radius: 0.375rem;\n font-family: \"Fira Code\", Monaco, Consolas, monospace;\n font-size: 0.875rem;\n line-height: 1.5;\n white-space: pre-wrap;\n word-break: break-word;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .diff-added[_ngcontent-%COMP%] .diff-value[_ngcontent-%COMP%] {\n background: #f0fff4;\n border: 1px solid #9ae6b4;\n color: #2f855a;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .diff-removed[_ngcontent-%COMP%] .diff-value[_ngcontent-%COMP%] {\n background: #fff5f5;\n border: 1px solid #fed7d7;\n color: #c53030;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .no-differences[_ngcontent-%COMP%] {\n text-align: center;\n padding: 3rem 1rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .no-differences[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3rem;\n margin-bottom: 1rem;\n display: block;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .no-differences[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] {\n flex: 1;\n padding: 1rem;\n overflow-y: auto;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] {\n max-width: 800px;\n margin: 0 auto;\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 0.5rem;\n overflow: hidden;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-header[_ngcontent-%COMP%] {\n padding: 1.5rem;\n background: #f8f9fa;\n border-bottom: 1px solid #dee2e6;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-header[_ngcontent-%COMP%] .details-title[_ngcontent-%COMP%] {\n margin: 0 0 0.5rem 0;\n color: #495057;\n font-weight: 600;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-header[_ngcontent-%COMP%] .details-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 1rem;\n font-size: 0.875rem;\n color: #6c757d;\n flex-wrap: wrap;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] {\n padding: 1.5rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%] {\n margin-bottom: 2rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%] .section-title[_ngcontent-%COMP%] {\n margin: 0 0 1rem 0;\n color: #495057;\n font-weight: 600;\n font-size: 1rem;\n border-bottom: 1px solid #e9ecef;\n padding-bottom: 0.5rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%] .detail-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 1rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%] .detail-grid[_ngcontent-%COMP%] .detail-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%] .detail-grid[_ngcontent-%COMP%] .detail-item[_ngcontent-%COMP%] .detail-label[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n font-weight: 500;\n color: #6c757d;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%] .detail-grid[_ngcontent-%COMP%] .detail-item[_ngcontent-%COMP%] .detail-value[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%] .json-viewer[_ngcontent-%COMP%] .json-content[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%] .json-viewer[_ngcontent-%COMP%] .template-content[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%] .template-viewer[_ngcontent-%COMP%] .json-content[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%] .template-viewer[_ngcontent-%COMP%] .template-content[_ngcontent-%COMP%] {\n background: #f8f9fa;\n border: 1px solid #dee2e6;\n border-radius: 0.375rem;\n padding: 1rem;\n margin: 0;\n font-family: \"Fira Code\", Monaco, Consolas, monospace;\n font-size: 0.875rem;\n line-height: 1.5;\n overflow-x: auto;\n max-height: 400px;\n overflow-y: auto;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .no-selection-message[_ngcontent-%COMP%] {\n text-align: center;\n padding: 3rem 1rem;\n color: #6c757d;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .no-selection-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3rem;\n margin-bottom: 1rem;\n display: block;\n opacity: 0.5;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .no-selection-message[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1rem;\n line-height: 1.5;\n}\n.prompt-version-control[_ngcontent-%COMP%] .error-container[_ngcontent-%COMP%] {\n padding: 1rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .error-container[_ngcontent-%COMP%] .alert[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n@media (max-width: 1200px) {\n .prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] {\n min-width: 100%;\n justify-content: space-between;\n }\n .prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-selectors[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n }\n .prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-selectors[_ngcontent-%COMP%] .comparison-arrow[_ngcontent-%COMP%] {\n align-self: center;\n padding: 0.5rem 0;\n }\n .prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n gap: 0.5rem;\n }\n}\n@media (max-width: 768px) {\n .prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] {\n padding: 0.75rem;\n }\n .prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n gap: 0.5rem;\n }\n .prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] {\n padding: 0.75rem;\n }\n .prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] {\n margin-right: 1rem;\n }\n .prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] .marker-icon[_ngcontent-%COMP%] {\n width: 2rem;\n height: 2rem;\n font-size: 0.875rem;\n }\n .prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] {\n padding: 1rem;\n }\n .prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .version-header[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n gap: 0.75rem;\n }\n .prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .version-header[_ngcontent-%COMP%] .version-actions[_ngcontent-%COMP%] {\n align-self: flex-end;\n }\n .prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%], \n .prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] {\n padding: 0.75rem;\n }\n .prompt-selector-section[_ngcontent-%COMP%] {\n padding: 2rem;\n background: white;\n border-radius: 8px;\n margin: 1rem;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n }\n .prompt-selector-section[_ngcontent-%COMP%] .section-title[_ngcontent-%COMP%] {\n color: #495057;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-weight: 600;\n margin-bottom: 0.5rem;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #007bff;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .search-box[_ngcontent-%COMP%] .input-group-text[_ngcontent-%COMP%] {\n background: #f8f9fa;\n border-color: #ced4da;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .search-box[_ngcontent-%COMP%] .input-group-text[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #6c757d;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .search-box[_ngcontent-%COMP%] .form-control[_ngcontent-%COMP%] {\n border-color: #ced4da;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .search-box[_ngcontent-%COMP%] .form-control[_ngcontent-%COMP%]:focus {\n border-color: #007bff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] {\n max-height: 400px;\n overflow-y: auto;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 2rem;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 2rem;\n margin-bottom: 0.5rem;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] .prompt-item[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0.75rem 1rem;\n border-bottom: 1px solid #dee2e6;\n cursor: pointer;\n transition: background-color 0.2s;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] .prompt-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] .prompt-item[_ngcontent-%COMP%]:hover {\n background-color: #f8f9fa;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] .prompt-item[_ngcontent-%COMP%] .prompt-info[_ngcontent-%COMP%] {\n flex: 1;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] .prompt-item[_ngcontent-%COMP%] .prompt-info[_ngcontent-%COMP%] .prompt-title[_ngcontent-%COMP%] {\n margin: 0 0 0.25rem 0;\n font-weight: 600;\n color: #495057;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] .prompt-item[_ngcontent-%COMP%] .prompt-info[_ngcontent-%COMP%] .prompt-description[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.875rem;\n color: #6c757d;\n line-height: 1.4;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] .prompt-item[_ngcontent-%COMP%] .prompt-actions[_ngcontent-%COMP%] {\n color: #007bff;\n opacity: 0.7;\n transition: opacity 0.2s;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] .prompt-item[_ngcontent-%COMP%]:hover .prompt-actions[_ngcontent-%COMP%] {\n opacity: 1;\n }\n}"] });
1165
1163
  }
1166
1164
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PromptVersionControlComponent, [{
1167
1165
  type: Component,
1168
- args: [{ selector: 'app-prompt-version-control', template: "<div class=\"prompt-version-control\">\n <!-- Prompt Selector (when no prompt selected) -->\n @if (!prompt) {\n <div class=\"prompt-selector-section\">\n <h5 class=\"section-title\">\n <i class=\"fa-solid fa-history\"></i>\n Version History\n </h5>\n <p class=\"text-muted mb-3\">Select a prompt to view its version history</p>\n \n <div class=\"prompt-selector\">\n <div class=\"search-box mb-3\">\n <div class=\"input-group\">\n <span class=\"input-group-text\">\n <i class=\"fa-solid fa-search\"></i>\n </span>\n <input \n type=\"text\" \n class=\"form-control\" \n placeholder=\"Search prompts...\"\n [ngModel]=\"promptSearchTerm$.value\"\n (ngModelChange)=\"onPromptSearchChange($event)\">\n </div>\n </div>\n \n <div class=\"prompts-list\">\n @if (availablePrompts.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-dots text-muted\"></i>\n <p class=\"text-muted\">No prompts available</p>\n </div>\n } @else {\n @for (promptItem of filteredAvailablePrompts; track promptItem.ID) {\n <div class=\"prompt-item\" (click)=\"selectPromptForHistory(promptItem)\">\n <div class=\"prompt-info\">\n <h6 class=\"prompt-title\">{{ promptItem.Name }}</h6>\n @if (promptItem.Description) {\n <p class=\"prompt-description\">{{ promptItem.Description }}</p>\n }\n </div>\n <div class=\"prompt-actions\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n }\n }\n </div>\n </div>\n </div>\n } @else {\n <!-- Header toolbar -->\n <div class=\"version-toolbar\">\n <div class=\"toolbar-section\">\n <h5 class=\"toolbar-title\">\n <i class=\"fa-solid fa-history\"></i>\n Version History\n @if (prompt) {\n <span class=\"prompt-name\">- {{ prompt.Name }}</span>\n }\n </h5>\n \n <div class=\"view-mode-toggle\">\n <div class=\"btn-group btn-group-sm\" role=\"group\">\n <input type=\"radio\" class=\"btn-check\" name=\"view\" id=\"timelineView\" value=\"timeline\" [(ngModel)]=\"currentView\" (ngModelChange)=\"onViewChange($event)\">\n <label class=\"btn btn-outline-primary\" for=\"timelineView\">\n <i class=\"fa-solid fa-timeline\"></i>\n Timeline\n </label>\n \n <input type=\"radio\" class=\"btn-check\" name=\"view\" id=\"comparisonView\" value=\"comparison\" [(ngModel)]=\"currentView\" (ngModelChange)=\"onViewChange($event)\">\n <label class=\"btn btn-outline-primary\" for=\"comparisonView\">\n <i class=\"fa-solid fa-code-compare\"></i>\n Compare\n </label>\n \n <input type=\"radio\" class=\"btn-check\" name=\"view\" id=\"detailsView\" value=\"details\" [(ngModel)]=\"currentView\" (ngModelChange)=\"onViewChange($event)\">\n <label class=\"btn btn-outline-primary\" for=\"detailsView\">\n <i class=\"fa-solid fa-list\"></i>\n Details\n </label>\n </div>\n </div>\n </div>\n \n <div class=\"toolbar-section\">\n <div class=\"filter-controls\">\n <label class=\"form-label\">Filter:</label>\n <select class=\"form-select form-select-sm\" [(ngModel)]=\"filterBy\" (ngModelChange)=\"onFilterChange($event)\">\n <option value=\"all\">All Changes</option>\n <option value=\"updates\">Updates Only</option>\n <option value=\"major\">Major Changes</option>\n <option value=\"template\">Template Changes</option>\n </select>\n \n <div class=\"form-check form-switch\">\n <input class=\"form-check-input\" type=\"checkbox\" id=\"showSystem\" [(ngModel)]=\"showSystemChanges\" (ngModelChange)=\"applyFiltersPublic()\">\n <label class=\"form-check-label\" for=\"showSystem\">System</label>\n </div>\n </div>\n \n <div class=\"search-controls\">\n <input \n type=\"text\" \n class=\"form-control form-control-sm\" \n placeholder=\"Search changes...\"\n [ngModel]=\"searchTerm$.value\" (ngModelChange)=\"onSearchChange($event)\">\n </div>\n </div>\n \n <div class=\"toolbar-section\">\n <div class=\"action-buttons\">\n <button type=\"button\" class=\"btn btn-sm btn-outline-secondary\" (click)=\"onSortDirectionChange()\" [title]=\"'Sort ' + (sortDirection === 'asc' ? 'descending' : 'ascending')\">\n <i class=\"fa-solid\" [class.fa-sort-up]=\"sortDirection === 'asc'\" [class.fa-sort-down]=\"sortDirection === 'desc'\"></i>\n Sort\n </button>\n \n <button type=\"button\" class=\"btn btn-sm btn-outline-secondary\" (click)=\"refreshHistory()\" [disabled]=\"isLoading\" title=\"Refresh history\">\n <i class=\"fa-solid fa-refresh\" [class.fa-spin]=\"isLoading\"></i>\n Refresh\n </button>\n \n <button type=\"button\" class=\"btn btn-sm btn-outline-info\" (click)=\"exportVersionHistory()\" title=\"Export history\">\n <i class=\"fa-solid fa-download\"></i>\n Export\n </button>\n </div>\n </div>\n </div>\n \n <!-- Loading state -->\n @if (isLoading) {\n <div class=\"loading-container\">\n <div class=\"loading-content\">\n <div class=\"spinner-border text-primary\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n </div>\n <p class=\"loading-message\">{{ loadingMessage }}</p>\n </div>\n </div>\n } @else {\n \n <!-- Timeline View -->\n @if (currentView === 'timeline') {\n <div class=\"timeline-container\">\n @if (versions.length > 0) {\n <div class=\"version-timeline\">\n @for (version of versions; track version.id; let i = $index) {\n <div class=\"timeline-item\" \n [class.selected]=\"selectedVersion?.id === version.id\"\n [class.active]=\"version.isActive\"\n (click)=\"onVersionSelect(version)\">\n \n <div class=\"timeline-marker\">\n <div class=\"marker-icon\" [class]=\"getChangeTypeClass(version.changeType)\">\n <i class=\"fa-solid\" [class]=\"getChangeTypeIcon(version.changeType)\"></i>\n </div>\n @if (i < versions.length - 1) {\n <div class=\"timeline-line\"></div>\n }\n </div>\n \n <div class=\"timeline-content\">\n <div class=\"version-header\">\n <div class=\"version-info\">\n <h6 class=\"version-label\">{{ getVersionLabel(version) }}</h6>\n <div class=\"version-meta\">\n <span class=\"change-date\">{{ version.changedAt | date:'medium' }}</span>\n <span class=\"changed-by\">by {{ version.changedBy }}</span>\n <span class=\"change-source badge\" [class.badge-primary]=\"version.changeSource === 'Internal'\" [class.badge-secondary]=\"version.changeSource === 'External'\">\n {{ version.changeSource }}\n </span>\n </div>\n </div>\n \n <div class=\"version-actions\">\n @if (showComparison && i < versions.length - 1) {\n <button \n type=\"button\" \n class=\"btn btn-sm btn-outline-primary\"\n (click)=\"$event.stopPropagation(); startComparison(version)\"\n title=\"Compare with next version\">\n <i class=\"fa-solid fa-code-compare\"></i>\n </button>\n }\n \n @if (showRestoreActions && version.canRestore) {\n <button \n type=\"button\" \n class=\"btn btn-sm btn-outline-success\"\n (click)=\"$event.stopPropagation(); onVersionRestore(version)\"\n title=\"Restore this version\">\n <i class=\"fa-solid fa-undo\"></i>\n </button>\n }\n </div>\n </div>\n \n <div class=\"version-description\">\n {{ version.changesDescription }}\n </div>\n \n @if (version.changesJSON && timelineConfig.showDiffs) {\n <div class=\"changes-summary\">\n <div class=\"changes-list\">\n @for (field of getObjectKeys(version.changesJSON); track field) {\n <div class=\"change-item\">\n <span class=\"field-name\">{{ getFieldDisplayNamePublic(field) }}</span>\n @if (version.changesJSON[field].oldValue !== undefined) {\n <span class=\"change-arrow\">\n <span class=\"old-value\">{{ formatChangeValue(version.changesJSON[field].oldValue) }}</span>\n <i class=\"fa-solid fa-arrow-right\"></i>\n <span class=\"new-value\">{{ formatChangeValue(version.changesJSON[field].newValue) }}</span>\n </span>\n } @else {\n <span class=\"new-value\">{{ formatChangeValue(version.changesJSON[field].newValue) }}</span>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n } @else {\n <div class=\"no-versions-message\">\n <i class=\"fa-solid fa-info-circle text-muted\"></i>\n <p class=\"text-muted\">No version history available for this prompt.</p>\n @if (prompt && !prompt.EntityInfo.TrackRecordChanges) {\n <p class=\"text-muted\"><small>Record changes tracking may not be enabled for prompts.</small></p>\n }\n </div>\n }\n </div>\n }\n \n <!-- Comparison View -->\n @if (currentView === 'comparison') {\n <div class=\"comparison-container\">\n <!-- Version selectors -->\n <div class=\"comparison-selectors\">\n <div class=\"selector-group\">\n <label class=\"form-label\">Compare from:</label>\n <select class=\"form-select\" [(ngModel)]=\"compareFromVersion\" (ngModelChange)=\"generateComparisonPublic()\">\n @for (version of versions; track version.id) {\n <option [ngValue]=\"version\">{{ getVersionLabel(version) }} - {{ version.changedAt | date:'short' }}</option>\n }\n </select>\n </div>\n \n <div class=\"comparison-arrow\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n \n <div class=\"selector-group\">\n <label class=\"form-label\">Compare to:</label>\n <select class=\"form-select\" [(ngModel)]=\"compareToVersion\" (ngModelChange)=\"generateComparisonPublic()\">\n @for (version of versions; track version.id) {\n <option [ngValue]=\"version\">{{ getVersionLabel(version) }} - {{ version.changedAt | date:'short' }}</option>\n }\n </select>\n </div>\n </div>\n \n <!-- Comparison results -->\n @if (comparisonResult) {\n <div class=\"comparison-results\">\n <div class=\"comparison-header\">\n <h6 class=\"comparison-title\">\n <i class=\"fa-solid fa-code-compare\"></i>\n Changes between {{ getVersionLabel(comparisonResult.fromVersion) }} and {{ getVersionLabel(comparisonResult.toVersion) }}\n </h6>\n <div class=\"changes-count\">\n {{ comparisonResult.differences.length }} change(s) found\n </div>\n </div>\n \n @if (comparisonResult.differences.length > 0) {\n <div class=\"differences-list\">\n @for (diff of comparisonResult.differences; track diff.fieldName) {\n <div class=\"difference-item\" [class]=\"'diff-' + diff.changeType\">\n <div class=\"diff-header\">\n <div class=\"field-info\">\n <strong class=\"field-name\">{{ diff.displayName }}</strong>\n <span class=\"change-type badge\" \n [class.badge-success]=\"diff.changeType === 'added'\"\n [class.badge-warning]=\"diff.changeType === 'modified'\"\n [class.badge-danger]=\"diff.changeType === 'removed'\">\n {{ diff.changeType }}\n </span>\n @if (diff.isTemplate) {\n <span class=\"template-badge badge badge-info\">Template</span>\n }\n </div>\n </div>\n \n <div class=\"diff-content\">\n @if (diff.changeType === 'modified') {\n <div class=\"side-by-side-diff\">\n <div class=\"diff-old\">\n <h6 class=\"diff-label\">Before:</h6>\n <div class=\"diff-value old-value\">\n @if (diff.isTemplate && diff.fieldName === 'TemplateText') {\n <pre class=\"template-content\">{{ diff.oldValue }}</pre>\n } @else {\n {{ formatChangeValue(diff.oldValue) }}\n }\n </div>\n </div>\n \n <div class=\"diff-new\">\n <h6 class=\"diff-label\">After:</h6>\n <div class=\"diff-value new-value\">\n @if (diff.isTemplate && diff.fieldName === 'TemplateText') {\n <pre class=\"template-content\">{{ diff.newValue }}</pre>\n } @else {\n {{ formatChangeValue(diff.newValue) }}\n }\n </div>\n </div>\n </div>\n } @else if (diff.changeType === 'added') {\n <div class=\"diff-added\">\n <h6 class=\"diff-label\">Added:</h6>\n <div class=\"diff-value new-value\">{{ formatChangeValue(diff.newValue) }}</div>\n </div>\n } @else if (diff.changeType === 'removed') {\n <div class=\"diff-removed\">\n <h6 class=\"diff-label\">Removed:</h6>\n <div class=\"diff-value old-value\">{{ formatChangeValue(diff.oldValue) }}</div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n } @else {\n <div class=\"no-differences\">\n <i class=\"fa-solid fa-check-circle text-success\"></i>\n <p class=\"text-muted\">No differences found between the selected versions.</p>\n </div>\n }\n </div>\n }\n </div>\n }\n \n <!-- Details View -->\n @if (currentView === 'details') {\n <div class=\"details-container\">\n @if (selectedVersion) {\n <div class=\"version-details\">\n <div class=\"details-header\">\n <h6 class=\"details-title\">{{ getVersionLabel(selectedVersion) }}</h6>\n <div class=\"details-meta\">\n <span class=\"change-date\">{{ selectedVersion.changedAt | date:'full' }}</span>\n <span class=\"changed-by\">Changed by {{ selectedVersion.changedBy }}</span>\n </div>\n </div>\n \n <div class=\"details-content\">\n <div class=\"detail-section\">\n <h6 class=\"section-title\">Change Information</h6>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"detail-label\">Type:</span>\n <span class=\"detail-value\">\n <i class=\"fa-solid\" [class]=\"getChangeTypeIcon(selectedVersion.changeType)\"></i>\n {{ selectedVersion.changeType }}\n </span>\n </div>\n \n <div class=\"detail-item\">\n <span class=\"detail-label\">Source:</span>\n <span class=\"detail-value\">{{ selectedVersion.changeSource }}</span>\n </div>\n \n <div class=\"detail-item\">\n <span class=\"detail-label\">Description:</span>\n <span class=\"detail-value\">{{ selectedVersion.changesDescription }}</span>\n </div>\n </div>\n </div>\n \n @if (selectedVersion.fullRecordJSON) {\n <div class=\"detail-section\">\n <h6 class=\"section-title\">Record State</h6>\n <div class=\"json-viewer\">\n <pre class=\"json-content\">{{ selectedVersion.fullRecordJSON | json }}</pre>\n </div>\n </div>\n }\n \n @if (selectedVersion.templateContent) {\n <div class=\"detail-section\">\n <h6 class=\"section-title\">Template Content</h6>\n <div class=\"template-viewer\">\n <pre class=\"template-content\">{{ selectedVersion.templateContent.TemplateText }}</pre>\n </div>\n </div>\n }\n </div>\n </div>\n } @else {\n <div class=\"no-selection-message\">\n <i class=\"fa-solid fa-hand-pointer text-muted\"></i>\n <p class=\"text-muted\">Select a version from the timeline to view details.</p>\n </div>\n }\n </div>\n }\n }\n \n <!-- Error state -->\n @if (error) {\n <div class=\"error-container\">\n <div class=\"alert alert-danger\" role=\"alert\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n {{ error }}\n <button type=\"button\" class=\"btn btn-sm btn-outline-danger ms-2\" (click)=\"refreshHistory()\">\n <i class=\"fa-solid fa-refresh\"></i>\n Retry\n </button>\n </div>\n </div>\n }\n }\n</div>", styles: [".prompt-version-control {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: #f8f9fa;\n\n .version-toolbar {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1rem;\n background: white;\n border-bottom: 1px solid #dee2e6;\n flex-shrink: 0;\n gap: 1rem;\n flex-wrap: wrap;\n\n .toolbar-section {\n display: flex;\n align-items: center;\n gap: 1rem;\n flex-wrap: wrap;\n\n .toolbar-title {\n margin: 0;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-weight: 600;\n\n i {\n color: #0d6efd;\n }\n\n .prompt-name {\n font-weight: 400;\n color: #6c757d;\n }\n }\n\n .filter-controls,\n .search-controls {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n\n .form-label {\n margin: 0;\n font-size: 0.875rem;\n color: #6c757d;\n white-space: nowrap;\n }\n\n .form-select,\n .form-control {\n min-width: 120px;\n }\n\n .form-check {\n margin: 0;\n \n .form-check-label {\n font-size: 0.875rem;\n }\n }\n }\n\n .action-buttons {\n display: flex;\n gap: 0.5rem;\n\n .btn {\n font-size: 0.875rem;\n }\n }\n }\n }\n\n .loading-container {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n\n .loading-content {\n text-align: center;\n \n .loading-message {\n margin-top: 1rem;\n color: #6c757d;\n }\n }\n }\n\n .timeline-container {\n flex: 1;\n padding: 1rem;\n overflow-y: auto;\n\n .version-timeline {\n max-width: 800px;\n margin: 0 auto;\n\n .timeline-item {\n display: flex;\n position: relative;\n margin-bottom: 2rem;\n cursor: pointer;\n transition: all 0.2s ease;\n\n &:hover {\n .timeline-content {\n box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.1);\n transform: translateY(-1px);\n }\n }\n\n &.selected {\n .timeline-content {\n border-color: #0d6efd;\n box-shadow: 0 0 0 0.2rem rgba(13, 110, 253, 0.25);\n }\n }\n\n &.active {\n .timeline-marker .marker-icon {\n border-color: #28a745;\n background-color: #28a745;\n color: white;\n }\n }\n\n .timeline-marker {\n display: flex;\n flex-direction: column;\n align-items: center;\n margin-right: 1.5rem;\n flex-shrink: 0;\n\n .marker-icon {\n width: 2.5rem;\n height: 2.5rem;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 3px solid;\n background: white;\n font-size: 1rem;\n z-index: 2;\n\n &.change-create {\n border-color: #28a745;\n color: #28a745;\n }\n\n &.change-update {\n border-color: #0d6efd;\n color: #0d6efd;\n }\n\n &.change-delete {\n border-color: #dc3545;\n color: #dc3545;\n }\n }\n\n .timeline-line {\n width: 2px;\n flex: 1;\n background: #dee2e6;\n margin-top: 0.5rem;\n min-height: 2rem;\n }\n }\n\n .timeline-content {\n flex: 1;\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 0.5rem;\n padding: 1.5rem;\n transition: all 0.2s ease;\n\n .version-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 1rem;\n\n .version-info {\n .version-label {\n margin: 0 0 0.5rem 0;\n color: #495057;\n font-weight: 600;\n }\n\n .version-meta {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n font-size: 0.875rem;\n color: #6c757d;\n flex-wrap: wrap;\n\n .change-date {\n font-weight: 500;\n }\n\n .badge {\n font-size: 0.75rem;\n }\n }\n }\n\n .version-actions {\n display: flex;\n gap: 0.5rem;\n\n .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.75rem;\n }\n }\n }\n\n .version-description {\n color: #495057;\n margin-bottom: 1rem;\n line-height: 1.5;\n }\n\n .changes-summary {\n .changes-list {\n .change-item {\n display: flex;\n align-items: center;\n padding: 0.5rem;\n background: #f8f9fa;\n border-radius: 0.375rem;\n margin-bottom: 0.5rem;\n font-size: 0.875rem;\n\n .field-name {\n font-weight: 500;\n color: #495057;\n margin-right: 0.75rem;\n min-width: 100px;\n }\n\n .change-arrow {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n\n .old-value {\n color: #dc3545;\n text-decoration: line-through;\n }\n\n .new-value {\n color: #28a745;\n font-weight: 500;\n }\n\n i {\n color: #6c757d;\n }\n }\n }\n }\n }\n }\n }\n }\n\n .no-versions-message {\n text-align: center;\n padding: 3rem 1rem;\n color: #6c757d;\n\n i {\n font-size: 3rem;\n margin-bottom: 1rem;\n display: block;\n opacity: 0.5;\n }\n\n p {\n margin: 0.5rem 0;\n font-size: 1rem;\n line-height: 1.5;\n }\n }\n }\n\n .comparison-container {\n flex: 1;\n padding: 1rem;\n overflow-y: auto;\n\n .comparison-selectors {\n display: flex;\n align-items: end;\n gap: 1rem;\n margin-bottom: 2rem;\n padding: 1rem;\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 0.5rem;\n\n .selector-group {\n flex: 1;\n\n .form-label {\n font-weight: 500;\n color: #495057;\n }\n }\n\n .comparison-arrow {\n padding-bottom: 0.375rem;\n color: #6c757d;\n font-size: 1.25rem;\n }\n }\n\n .comparison-results {\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 0.5rem;\n overflow: hidden;\n\n .comparison-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1rem;\n background: #f8f9fa;\n border-bottom: 1px solid #dee2e6;\n\n .comparison-title {\n margin: 0;\n color: #495057;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n }\n\n .changes-count {\n font-size: 0.875rem;\n color: #6c757d;\n font-weight: 500;\n }\n }\n\n .differences-list {\n .difference-item {\n border-bottom: 1px solid #f1f3f4;\n padding: 1.5rem;\n\n &:last-child {\n border-bottom: none;\n }\n\n &.diff-added {\n border-left: 4px solid #28a745;\n }\n\n &.diff-modified {\n border-left: 4px solid #ffc107;\n }\n\n &.diff-removed {\n border-left: 4px solid #dc3545;\n }\n\n .diff-header {\n margin-bottom: 1rem;\n\n .field-info {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n\n .field-name {\n font-size: 1rem;\n color: #495057;\n }\n\n .badge {\n font-size: 0.75rem;\n \n &.template-badge {\n background-color: #6f42c1;\n }\n }\n }\n }\n\n .diff-content {\n .side-by-side-diff {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 1rem;\n\n .diff-old,\n .diff-new {\n .diff-label {\n font-size: 0.875rem;\n font-weight: 600;\n margin-bottom: 0.5rem;\n color: #6c757d;\n }\n\n .diff-value {\n padding: 1rem;\n border-radius: 0.375rem;\n font-family: 'Fira Code', Monaco, Consolas, monospace;\n font-size: 0.875rem;\n line-height: 1.5;\n white-space: pre-wrap;\n word-break: break-word;\n\n &.old-value {\n background: #fff5f5;\n border: 1px solid #fed7d7;\n color: #c53030;\n }\n\n &.new-value {\n background: #f0fff4;\n border: 1px solid #9ae6b4;\n color: #2f855a;\n }\n\n .template-content {\n margin: 0;\n background: transparent;\n border: none;\n padding: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n white-space: pre-wrap;\n }\n }\n }\n }\n\n .diff-added,\n .diff-removed {\n .diff-label {\n font-size: 0.875rem;\n font-weight: 600;\n margin-bottom: 0.5rem;\n color: #6c757d;\n }\n\n .diff-value {\n padding: 1rem;\n border-radius: 0.375rem;\n font-family: 'Fira Code', Monaco, Consolas, monospace;\n font-size: 0.875rem;\n line-height: 1.5;\n white-space: pre-wrap;\n word-break: break-word;\n }\n }\n\n .diff-added .diff-value {\n background: #f0fff4;\n border: 1px solid #9ae6b4;\n color: #2f855a;\n }\n\n .diff-removed .diff-value {\n background: #fff5f5;\n border: 1px solid #fed7d7;\n color: #c53030;\n }\n }\n }\n }\n\n .no-differences {\n text-align: center;\n padding: 3rem 1rem;\n\n i {\n font-size: 3rem;\n margin-bottom: 1rem;\n display: block;\n }\n\n p {\n margin: 0;\n font-size: 1rem;\n }\n }\n }\n }\n\n .details-container {\n flex: 1;\n padding: 1rem;\n overflow-y: auto;\n\n .version-details {\n max-width: 800px;\n margin: 0 auto;\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 0.5rem;\n overflow: hidden;\n\n .details-header {\n padding: 1.5rem;\n background: #f8f9fa;\n border-bottom: 1px solid #dee2e6;\n\n .details-title {\n margin: 0 0 0.5rem 0;\n color: #495057;\n font-weight: 600;\n }\n\n .details-meta {\n display: flex;\n gap: 1rem;\n font-size: 0.875rem;\n color: #6c757d;\n flex-wrap: wrap;\n }\n }\n\n .details-content {\n padding: 1.5rem;\n\n .detail-section {\n margin-bottom: 2rem;\n\n &:last-child {\n margin-bottom: 0;\n }\n\n .section-title {\n margin: 0 0 1rem 0;\n color: #495057;\n font-weight: 600;\n font-size: 1rem;\n border-bottom: 1px solid #e9ecef;\n padding-bottom: 0.5rem;\n }\n\n .detail-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 1rem;\n\n .detail-item {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n\n .detail-label {\n font-size: 0.875rem;\n font-weight: 500;\n color: #6c757d;\n }\n\n .detail-value {\n font-size: 0.875rem;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n }\n }\n }\n\n .json-viewer,\n .template-viewer {\n .json-content,\n .template-content {\n background: #f8f9fa;\n border: 1px solid #dee2e6;\n border-radius: 0.375rem;\n padding: 1rem;\n margin: 0;\n font-family: 'Fira Code', Monaco, Consolas, monospace;\n font-size: 0.875rem;\n line-height: 1.5;\n overflow-x: auto;\n max-height: 400px;\n overflow-y: auto;\n }\n }\n }\n }\n }\n\n .no-selection-message {\n text-align: center;\n padding: 3rem 1rem;\n color: #6c757d;\n\n i {\n font-size: 3rem;\n margin-bottom: 1rem;\n display: block;\n opacity: 0.5;\n }\n\n p {\n margin: 0;\n font-size: 1rem;\n line-height: 1.5;\n }\n }\n }\n\n .error-container {\n padding: 1rem;\n\n .alert {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n }\n }\n}\n\n// Responsive adjustments\n@media (max-width: 1200px) {\n .prompt-version-control {\n .version-toolbar {\n .toolbar-section {\n min-width: 100%;\n justify-content: space-between;\n }\n }\n\n .comparison-container {\n .comparison-selectors {\n flex-direction: column;\n align-items: stretch;\n\n .comparison-arrow {\n align-self: center;\n padding: 0.5rem 0;\n }\n }\n\n .comparison-results {\n .differences-list {\n .difference-item {\n .diff-content {\n .side-by-side-diff {\n grid-template-columns: 1fr;\n gap: 0.5rem;\n }\n }\n }\n }\n }\n }\n }\n}\n\n@media (max-width: 768px) {\n .prompt-version-control {\n .version-toolbar {\n padding: 0.75rem;\n \n .toolbar-section {\n flex-wrap: wrap;\n gap: 0.5rem;\n }\n }\n\n .timeline-container {\n padding: 0.75rem;\n\n .version-timeline {\n .timeline-item {\n .timeline-marker {\n margin-right: 1rem;\n\n .marker-icon {\n width: 2rem;\n height: 2rem;\n font-size: 0.875rem;\n }\n }\n\n .timeline-content {\n padding: 1rem;\n\n .version-header {\n flex-direction: column;\n align-items: flex-start;\n gap: 0.75rem;\n\n .version-actions {\n align-self: flex-end;\n }\n }\n }\n }\n }\n }\n\n .comparison-container,\n .details-container {\n padding: 0.75rem;\n }\n }\n\n .prompt-selector-section {\n padding: 2rem;\n background: white;\n border-radius: 8px;\n margin: 1rem;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n\n .section-title {\n color: #495057;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-weight: 600;\n margin-bottom: 0.5rem;\n\n i {\n color: #007bff;\n }\n }\n\n .prompt-selector {\n .search-box {\n .input-group-text {\n background: #f8f9fa;\n border-color: #ced4da;\n\n i {\n color: #6c757d;\n }\n }\n\n .form-control {\n border-color: #ced4da;\n\n &:focus {\n border-color: #007bff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n }\n }\n }\n\n .prompts-list {\n max-height: 400px;\n overflow-y: auto;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n\n .empty-state {\n text-align: center;\n padding: 2rem;\n\n i {\n font-size: 2rem;\n margin-bottom: 0.5rem;\n }\n }\n\n .prompt-item {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0.75rem 1rem;\n border-bottom: 1px solid #dee2e6;\n cursor: pointer;\n transition: background-color 0.2s;\n\n &:last-child {\n border-bottom: none;\n }\n\n &:hover {\n background-color: #f8f9fa;\n }\n\n .prompt-info {\n flex: 1;\n\n .prompt-title {\n margin: 0 0 0.25rem 0;\n font-weight: 600;\n color: #495057;\n }\n\n .prompt-description {\n margin: 0;\n font-size: 0.875rem;\n color: #6c757d;\n line-height: 1.4;\n }\n }\n\n .prompt-actions {\n color: #007bff;\n opacity: 0.7;\n transition: opacity 0.2s;\n }\n\n &:hover .prompt-actions {\n opacity: 1;\n }\n }\n }\n }\n }\n}"] }]
1166
+ args: [{ selector: 'app-prompt-version-control', template: "<div class=\"prompt-version-control\">\n <!-- Prompt Selector (when no prompt selected) -->\n @if (!prompt) {\n <div class=\"prompt-selector-section\">\n <h5 class=\"section-title\">\n <i class=\"fa-solid fa-history\"></i>\n Version History\n </h5>\n <p class=\"text-muted mb-3\">Select a prompt to view its version history</p>\n \n <div class=\"prompt-selector\">\n <div class=\"search-box mb-3\">\n <div class=\"input-group\">\n <span class=\"input-group-text\">\n <i class=\"fa-solid fa-search\"></i>\n </span>\n <input \n type=\"text\" \n class=\"form-control\" \n placeholder=\"Search prompts...\"\n [ngModel]=\"promptSearchTerm$.value\"\n (ngModelChange)=\"onPromptSearchChange($event)\">\n </div>\n </div>\n \n <div class=\"prompts-list\">\n @if (availablePrompts.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-dots text-muted\"></i>\n <p class=\"text-muted\">No prompts available</p>\n </div>\n } @else {\n @for (promptItem of filteredAvailablePrompts; track promptItem.ID) {\n <div class=\"prompt-item\" (click)=\"selectPromptForHistory(promptItem)\">\n <div class=\"prompt-info\">\n <h6 class=\"prompt-title\">{{ promptItem.Name }}</h6>\n @if (promptItem.Description) {\n <p class=\"prompt-description\">{{ promptItem.Description }}</p>\n }\n </div>\n <div class=\"prompt-actions\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n }\n }\n </div>\n </div>\n </div>\n } @else {\n <!-- Header toolbar -->\n <div class=\"version-toolbar\">\n <div class=\"toolbar-section\">\n <h5 class=\"toolbar-title\">\n <i class=\"fa-solid fa-history\"></i>\n Version History\n @if (prompt) {\n <span class=\"prompt-name\">- {{ prompt.Name }}</span>\n }\n </h5>\n \n <div class=\"view-mode-toggle\">\n <div class=\"btn-group btn-group-sm\" role=\"group\">\n <input type=\"radio\" class=\"btn-check\" name=\"view\" id=\"timelineView\" value=\"timeline\" [(ngModel)]=\"currentView\" (ngModelChange)=\"onViewChange($event)\">\n <label class=\"btn btn-outline-primary\" for=\"timelineView\">\n <i class=\"fa-solid fa-timeline\"></i>\n Timeline\n </label>\n \n <input type=\"radio\" class=\"btn-check\" name=\"view\" id=\"comparisonView\" value=\"comparison\" [(ngModel)]=\"currentView\" (ngModelChange)=\"onViewChange($event)\">\n <label class=\"btn btn-outline-primary\" for=\"comparisonView\">\n <i class=\"fa-solid fa-code-compare\"></i>\n Compare\n </label>\n \n <input type=\"radio\" class=\"btn-check\" name=\"view\" id=\"detailsView\" value=\"details\" [(ngModel)]=\"currentView\" (ngModelChange)=\"onViewChange($event)\">\n <label class=\"btn btn-outline-primary\" for=\"detailsView\">\n <i class=\"fa-solid fa-list\"></i>\n Details\n </label>\n </div>\n </div>\n </div>\n \n <div class=\"toolbar-section\">\n <div class=\"filter-controls\">\n <label class=\"form-label\">Filter:</label>\n <select class=\"form-select form-select-sm\" [(ngModel)]=\"filterBy\" (ngModelChange)=\"onFilterChange($event)\">\n <option value=\"all\">All Changes</option>\n <option value=\"updates\">Updates Only</option>\n <option value=\"major\">Major Changes</option>\n <option value=\"template\">Template Changes</option>\n </select>\n \n <div class=\"form-check form-switch\">\n <input class=\"form-check-input\" type=\"checkbox\" id=\"showSystem\" [(ngModel)]=\"showSystemChanges\" (ngModelChange)=\"applyFiltersPublic()\">\n <label class=\"form-check-label\" for=\"showSystem\">System</label>\n </div>\n </div>\n \n <div class=\"search-controls\">\n <input \n type=\"text\" \n class=\"form-control form-control-sm\" \n placeholder=\"Search changes...\"\n [ngModel]=\"searchTerm$.value\" (ngModelChange)=\"onSearchChange($event)\">\n </div>\n </div>\n \n <div class=\"toolbar-section\">\n <div class=\"action-buttons\">\n <button type=\"button\" class=\"btn btn-sm btn-outline-secondary\" (click)=\"onSortDirectionChange()\" [title]=\"'Sort ' + (sortDirection === 'asc' ? 'descending' : 'ascending')\">\n <i class=\"fa-solid\" [class.fa-sort-up]=\"sortDirection === 'asc'\" [class.fa-sort-down]=\"sortDirection === 'desc'\"></i>\n Sort\n </button>\n \n <button type=\"button\" class=\"btn btn-sm btn-outline-secondary\" (click)=\"refreshHistory()\" [disabled]=\"isLoading\" title=\"Refresh history\">\n <i class=\"fa-solid fa-refresh\" [class.fa-spin]=\"isLoading\"></i>\n Refresh\n </button>\n \n <button type=\"button\" class=\"btn btn-sm btn-outline-info\" (click)=\"exportVersionHistory()\" title=\"Export history\">\n <i class=\"fa-solid fa-download\"></i>\n Export\n </button>\n </div>\n </div>\n </div>\n \n <!-- Loading state -->\n @if (isLoading) {\n <div class=\"loading-container\">\n <mj-loading [text]=\"loadingMessage\" size=\"large\"></mj-loading>\n </div>\n } @else {\n \n <!-- Timeline View -->\n @if (currentView === 'timeline') {\n <div class=\"timeline-container\">\n @if (versions.length > 0) {\n <div class=\"version-timeline\">\n @for (version of versions; track version.id; let i = $index) {\n <div class=\"timeline-item\" \n [class.selected]=\"selectedVersion?.id === version.id\"\n [class.active]=\"version.isActive\"\n (click)=\"onVersionSelect(version)\">\n \n <div class=\"timeline-marker\">\n <div class=\"marker-icon\" [class]=\"getChangeTypeClass(version.changeType)\">\n <i class=\"fa-solid\" [class]=\"getChangeTypeIcon(version.changeType)\"></i>\n </div>\n @if (i < versions.length - 1) {\n <div class=\"timeline-line\"></div>\n }\n </div>\n \n <div class=\"timeline-content\">\n <div class=\"version-header\">\n <div class=\"version-info\">\n <h6 class=\"version-label\">{{ getVersionLabel(version) }}</h6>\n <div class=\"version-meta\">\n <span class=\"change-date\">{{ version.changedAt | date:'medium' }}</span>\n <span class=\"changed-by\">by {{ version.changedBy }}</span>\n <span class=\"change-source badge\" [class.badge-primary]=\"version.changeSource === 'Internal'\" [class.badge-secondary]=\"version.changeSource === 'External'\">\n {{ version.changeSource }}\n </span>\n </div>\n </div>\n \n <div class=\"version-actions\">\n @if (showComparison && i < versions.length - 1) {\n <button \n type=\"button\" \n class=\"btn btn-sm btn-outline-primary\"\n (click)=\"$event.stopPropagation(); startComparison(version)\"\n title=\"Compare with next version\">\n <i class=\"fa-solid fa-code-compare\"></i>\n </button>\n }\n \n @if (showRestoreActions && version.canRestore) {\n <button \n type=\"button\" \n class=\"btn btn-sm btn-outline-success\"\n (click)=\"$event.stopPropagation(); onVersionRestore(version)\"\n title=\"Restore this version\">\n <i class=\"fa-solid fa-undo\"></i>\n </button>\n }\n </div>\n </div>\n \n <div class=\"version-description\">\n {{ version.changesDescription }}\n </div>\n \n @if (version.changesJSON && timelineConfig.showDiffs) {\n <div class=\"changes-summary\">\n <div class=\"changes-list\">\n @for (field of getObjectKeys(version.changesJSON); track field) {\n <div class=\"change-item\">\n <span class=\"field-name\">{{ getFieldDisplayNamePublic(field) }}</span>\n @if (version.changesJSON[field].oldValue !== undefined) {\n <span class=\"change-arrow\">\n <span class=\"old-value\">{{ formatChangeValue(version.changesJSON[field].oldValue) }}</span>\n <i class=\"fa-solid fa-arrow-right\"></i>\n <span class=\"new-value\">{{ formatChangeValue(version.changesJSON[field].newValue) }}</span>\n </span>\n } @else {\n <span class=\"new-value\">{{ formatChangeValue(version.changesJSON[field].newValue) }}</span>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n } @else {\n <div class=\"no-versions-message\">\n <i class=\"fa-solid fa-info-circle text-muted\"></i>\n <p class=\"text-muted\">No version history available for this prompt.</p>\n @if (prompt && !prompt.EntityInfo.TrackRecordChanges) {\n <p class=\"text-muted\"><small>Record changes tracking may not be enabled for prompts.</small></p>\n }\n </div>\n }\n </div>\n }\n \n <!-- Comparison View -->\n @if (currentView === 'comparison') {\n <div class=\"comparison-container\">\n <!-- Version selectors -->\n <div class=\"comparison-selectors\">\n <div class=\"selector-group\">\n <label class=\"form-label\">Compare from:</label>\n <select class=\"form-select\" [(ngModel)]=\"compareFromVersion\" (ngModelChange)=\"generateComparisonPublic()\">\n @for (version of versions; track version.id) {\n <option [ngValue]=\"version\">{{ getVersionLabel(version) }} - {{ version.changedAt | date:'short' }}</option>\n }\n </select>\n </div>\n \n <div class=\"comparison-arrow\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n \n <div class=\"selector-group\">\n <label class=\"form-label\">Compare to:</label>\n <select class=\"form-select\" [(ngModel)]=\"compareToVersion\" (ngModelChange)=\"generateComparisonPublic()\">\n @for (version of versions; track version.id) {\n <option [ngValue]=\"version\">{{ getVersionLabel(version) }} - {{ version.changedAt | date:'short' }}</option>\n }\n </select>\n </div>\n </div>\n \n <!-- Comparison results -->\n @if (comparisonResult) {\n <div class=\"comparison-results\">\n <div class=\"comparison-header\">\n <h6 class=\"comparison-title\">\n <i class=\"fa-solid fa-code-compare\"></i>\n Changes between {{ getVersionLabel(comparisonResult.fromVersion) }} and {{ getVersionLabel(comparisonResult.toVersion) }}\n </h6>\n <div class=\"changes-count\">\n {{ comparisonResult.differences.length }} change(s) found\n </div>\n </div>\n \n @if (comparisonResult.differences.length > 0) {\n <div class=\"differences-list\">\n @for (diff of comparisonResult.differences; track diff.fieldName) {\n <div class=\"difference-item\" [class]=\"'diff-' + diff.changeType\">\n <div class=\"diff-header\">\n <div class=\"field-info\">\n <strong class=\"field-name\">{{ diff.displayName }}</strong>\n <span class=\"change-type badge\" \n [class.badge-success]=\"diff.changeType === 'added'\"\n [class.badge-warning]=\"diff.changeType === 'modified'\"\n [class.badge-danger]=\"diff.changeType === 'removed'\">\n {{ diff.changeType }}\n </span>\n @if (diff.isTemplate) {\n <span class=\"template-badge badge badge-info\">Template</span>\n }\n </div>\n </div>\n \n <div class=\"diff-content\">\n @if (diff.changeType === 'modified') {\n <div class=\"side-by-side-diff\">\n <div class=\"diff-old\">\n <h6 class=\"diff-label\">Before:</h6>\n <div class=\"diff-value old-value\">\n @if (diff.isTemplate && diff.fieldName === 'TemplateText') {\n <pre class=\"template-content\">{{ diff.oldValue }}</pre>\n } @else {\n {{ formatChangeValue(diff.oldValue) }}\n }\n </div>\n </div>\n \n <div class=\"diff-new\">\n <h6 class=\"diff-label\">After:</h6>\n <div class=\"diff-value new-value\">\n @if (diff.isTemplate && diff.fieldName === 'TemplateText') {\n <pre class=\"template-content\">{{ diff.newValue }}</pre>\n } @else {\n {{ formatChangeValue(diff.newValue) }}\n }\n </div>\n </div>\n </div>\n } @else if (diff.changeType === 'added') {\n <div class=\"diff-added\">\n <h6 class=\"diff-label\">Added:</h6>\n <div class=\"diff-value new-value\">{{ formatChangeValue(diff.newValue) }}</div>\n </div>\n } @else if (diff.changeType === 'removed') {\n <div class=\"diff-removed\">\n <h6 class=\"diff-label\">Removed:</h6>\n <div class=\"diff-value old-value\">{{ formatChangeValue(diff.oldValue) }}</div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n } @else {\n <div class=\"no-differences\">\n <i class=\"fa-solid fa-check-circle text-success\"></i>\n <p class=\"text-muted\">No differences found between the selected versions.</p>\n </div>\n }\n </div>\n }\n </div>\n }\n \n <!-- Details View -->\n @if (currentView === 'details') {\n <div class=\"details-container\">\n @if (selectedVersion) {\n <div class=\"version-details\">\n <div class=\"details-header\">\n <h6 class=\"details-title\">{{ getVersionLabel(selectedVersion) }}</h6>\n <div class=\"details-meta\">\n <span class=\"change-date\">{{ selectedVersion.changedAt | date:'full' }}</span>\n <span class=\"changed-by\">Changed by {{ selectedVersion.changedBy }}</span>\n </div>\n </div>\n \n <div class=\"details-content\">\n <div class=\"detail-section\">\n <h6 class=\"section-title\">Change Information</h6>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"detail-label\">Type:</span>\n <span class=\"detail-value\">\n <i class=\"fa-solid\" [class]=\"getChangeTypeIcon(selectedVersion.changeType)\"></i>\n {{ selectedVersion.changeType }}\n </span>\n </div>\n \n <div class=\"detail-item\">\n <span class=\"detail-label\">Source:</span>\n <span class=\"detail-value\">{{ selectedVersion.changeSource }}</span>\n </div>\n \n <div class=\"detail-item\">\n <span class=\"detail-label\">Description:</span>\n <span class=\"detail-value\">{{ selectedVersion.changesDescription }}</span>\n </div>\n </div>\n </div>\n \n @if (selectedVersion.fullRecordJSON) {\n <div class=\"detail-section\">\n <h6 class=\"section-title\">Record State</h6>\n <div class=\"json-viewer\">\n <pre class=\"json-content\">{{ selectedVersion.fullRecordJSON | json }}</pre>\n </div>\n </div>\n }\n \n @if (selectedVersion.templateContent) {\n <div class=\"detail-section\">\n <h6 class=\"section-title\">Template Content</h6>\n <div class=\"template-viewer\">\n <pre class=\"template-content\">{{ selectedVersion.templateContent.TemplateText }}</pre>\n </div>\n </div>\n }\n </div>\n </div>\n } @else {\n <div class=\"no-selection-message\">\n <i class=\"fa-solid fa-hand-pointer text-muted\"></i>\n <p class=\"text-muted\">Select a version from the timeline to view details.</p>\n </div>\n }\n </div>\n }\n }\n \n <!-- Error state -->\n @if (error) {\n <div class=\"error-container\">\n <div class=\"alert alert-danger\" role=\"alert\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n {{ error }}\n <button type=\"button\" class=\"btn btn-sm btn-outline-danger ms-2\" (click)=\"refreshHistory()\">\n <i class=\"fa-solid fa-refresh\"></i>\n Retry\n </button>\n </div>\n </div>\n }\n }\n</div>", styles: [".prompt-version-control {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: #f8f9fa;\n}\n.prompt-version-control .version-toolbar {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1rem;\n background: white;\n border-bottom: 1px solid #dee2e6;\n flex-shrink: 0;\n gap: 1rem;\n flex-wrap: wrap;\n}\n.prompt-version-control .version-toolbar .toolbar-section {\n display: flex;\n align-items: center;\n gap: 1rem;\n flex-wrap: wrap;\n}\n.prompt-version-control .version-toolbar .toolbar-section .toolbar-title {\n margin: 0;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-weight: 600;\n}\n.prompt-version-control .version-toolbar .toolbar-section .toolbar-title i {\n color: #0d6efd;\n}\n.prompt-version-control .version-toolbar .toolbar-section .toolbar-title .prompt-name {\n font-weight: 400;\n color: #6c757d;\n}\n.prompt-version-control .version-toolbar .toolbar-section .filter-controls,\n.prompt-version-control .version-toolbar .toolbar-section .search-controls {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n.prompt-version-control .version-toolbar .toolbar-section .filter-controls .form-label,\n.prompt-version-control .version-toolbar .toolbar-section .search-controls .form-label {\n margin: 0;\n font-size: 0.875rem;\n color: #6c757d;\n white-space: nowrap;\n}\n.prompt-version-control .version-toolbar .toolbar-section .filter-controls .form-select,\n.prompt-version-control .version-toolbar .toolbar-section .filter-controls .form-control,\n.prompt-version-control .version-toolbar .toolbar-section .search-controls .form-select,\n.prompt-version-control .version-toolbar .toolbar-section .search-controls .form-control {\n min-width: 120px;\n}\n.prompt-version-control .version-toolbar .toolbar-section .filter-controls .form-check,\n.prompt-version-control .version-toolbar .toolbar-section .search-controls .form-check {\n margin: 0;\n}\n.prompt-version-control .version-toolbar .toolbar-section .filter-controls .form-check .form-check-label,\n.prompt-version-control .version-toolbar .toolbar-section .search-controls .form-check .form-check-label {\n font-size: 0.875rem;\n}\n.prompt-version-control .version-toolbar .toolbar-section .action-buttons {\n display: flex;\n gap: 0.5rem;\n}\n.prompt-version-control .version-toolbar .toolbar-section .action-buttons .btn {\n font-size: 0.875rem;\n}\n.prompt-version-control .loading-container {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.prompt-version-control .loading-container .loading-content {\n text-align: center;\n}\n.prompt-version-control .loading-container .loading-content .loading-message {\n margin-top: 1rem;\n color: #6c757d;\n}\n.prompt-version-control .timeline-container {\n flex: 1;\n padding: 1rem;\n overflow-y: auto;\n}\n.prompt-version-control .timeline-container .version-timeline {\n max-width: 800px;\n margin: 0 auto;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item {\n display: flex;\n position: relative;\n margin-bottom: 2rem;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item:hover .timeline-content {\n box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.1);\n transform: translateY(-1px);\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item.selected .timeline-content {\n border-color: #0d6efd;\n box-shadow: 0 0 0 0.2rem rgba(13, 110, 253, 0.25);\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item.active .timeline-marker .marker-icon {\n border-color: #28a745;\n background-color: #28a745;\n color: white;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-marker {\n display: flex;\n flex-direction: column;\n align-items: center;\n margin-right: 1.5rem;\n flex-shrink: 0;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-marker .marker-icon {\n width: 2.5rem;\n height: 2.5rem;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 3px solid;\n background: white;\n font-size: 1rem;\n z-index: 2;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-marker .marker-icon.change-create {\n border-color: #28a745;\n color: #28a745;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-marker .marker-icon.change-update {\n border-color: #0d6efd;\n color: #0d6efd;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-marker .marker-icon.change-delete {\n border-color: #dc3545;\n color: #dc3545;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-marker .timeline-line {\n width: 2px;\n flex: 1;\n background: #dee2e6;\n margin-top: 0.5rem;\n min-height: 2rem;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content {\n flex: 1;\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 0.5rem;\n padding: 1.5rem;\n transition: all 0.2s ease;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .version-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 1rem;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .version-header .version-info .version-label {\n margin: 0 0 0.5rem 0;\n color: #495057;\n font-weight: 600;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .version-header .version-info .version-meta {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n font-size: 0.875rem;\n color: #6c757d;\n flex-wrap: wrap;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .version-header .version-info .version-meta .change-date {\n font-weight: 500;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .version-header .version-info .version-meta .badge {\n font-size: 0.75rem;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .version-header .version-actions {\n display: flex;\n gap: 0.5rem;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .version-header .version-actions .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.75rem;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .version-description {\n color: #495057;\n margin-bottom: 1rem;\n line-height: 1.5;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .changes-summary .changes-list .change-item {\n display: flex;\n align-items: center;\n padding: 0.5rem;\n background: #f8f9fa;\n border-radius: 0.375rem;\n margin-bottom: 0.5rem;\n font-size: 0.875rem;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .changes-summary .changes-list .change-item .field-name {\n font-weight: 500;\n color: #495057;\n margin-right: 0.75rem;\n min-width: 100px;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .changes-summary .changes-list .change-item .change-arrow {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .changes-summary .changes-list .change-item .change-arrow .old-value {\n color: #dc3545;\n text-decoration: line-through;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .changes-summary .changes-list .change-item .change-arrow .new-value {\n color: #28a745;\n font-weight: 500;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .changes-summary .changes-list .change-item .change-arrow i {\n color: #6c757d;\n}\n.prompt-version-control .timeline-container .no-versions-message {\n text-align: center;\n padding: 3rem 1rem;\n color: #6c757d;\n}\n.prompt-version-control .timeline-container .no-versions-message i {\n font-size: 3rem;\n margin-bottom: 1rem;\n display: block;\n opacity: 0.5;\n}\n.prompt-version-control .timeline-container .no-versions-message p {\n margin: 0.5rem 0;\n font-size: 1rem;\n line-height: 1.5;\n}\n.prompt-version-control .comparison-container {\n flex: 1;\n padding: 1rem;\n overflow-y: auto;\n}\n.prompt-version-control .comparison-container .comparison-selectors {\n display: flex;\n align-items: end;\n gap: 1rem;\n margin-bottom: 2rem;\n padding: 1rem;\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 0.5rem;\n}\n.prompt-version-control .comparison-container .comparison-selectors .selector-group {\n flex: 1;\n}\n.prompt-version-control .comparison-container .comparison-selectors .selector-group .form-label {\n font-weight: 500;\n color: #495057;\n}\n.prompt-version-control .comparison-container .comparison-selectors .comparison-arrow {\n padding-bottom: 0.375rem;\n color: #6c757d;\n font-size: 1.25rem;\n}\n.prompt-version-control .comparison-container .comparison-results {\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 0.5rem;\n overflow: hidden;\n}\n.prompt-version-control .comparison-container .comparison-results .comparison-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1rem;\n background: #f8f9fa;\n border-bottom: 1px solid #dee2e6;\n}\n.prompt-version-control .comparison-container .comparison-results .comparison-header .comparison-title {\n margin: 0;\n color: #495057;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n.prompt-version-control .comparison-container .comparison-results .comparison-header .changes-count {\n font-size: 0.875rem;\n color: #6c757d;\n font-weight: 500;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item {\n border-bottom: 1px solid #f1f3f4;\n padding: 1.5rem;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item:last-child {\n border-bottom: none;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item.diff-added {\n border-left: 4px solid #28a745;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item.diff-modified {\n border-left: 4px solid #ffc107;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item.diff-removed {\n border-left: 4px solid #dc3545;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-header {\n margin-bottom: 1rem;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-header .field-info {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-header .field-info .field-name {\n font-size: 1rem;\n color: #495057;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-header .field-info .badge {\n font-size: 0.75rem;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-header .field-info .badge.template-badge {\n background-color: #6f42c1;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 1rem;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff .diff-old .diff-label,\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff .diff-new .diff-label {\n font-size: 0.875rem;\n font-weight: 600;\n margin-bottom: 0.5rem;\n color: #6c757d;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff .diff-old .diff-value,\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff .diff-new .diff-value {\n padding: 1rem;\n border-radius: 0.375rem;\n font-family: \"Fira Code\", Monaco, Consolas, monospace;\n font-size: 0.875rem;\n line-height: 1.5;\n white-space: pre-wrap;\n word-break: break-word;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff .diff-old .diff-value.old-value,\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff .diff-new .diff-value.old-value {\n background: #fff5f5;\n border: 1px solid #fed7d7;\n color: #c53030;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff .diff-old .diff-value.new-value,\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff .diff-new .diff-value.new-value {\n background: #f0fff4;\n border: 1px solid #9ae6b4;\n color: #2f855a;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff .diff-old .diff-value .template-content,\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff .diff-new .diff-value .template-content {\n margin: 0;\n background: transparent;\n border: none;\n padding: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n white-space: pre-wrap;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .diff-added .diff-label,\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .diff-removed .diff-label {\n font-size: 0.875rem;\n font-weight: 600;\n margin-bottom: 0.5rem;\n color: #6c757d;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .diff-added .diff-value,\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .diff-removed .diff-value {\n padding: 1rem;\n border-radius: 0.375rem;\n font-family: \"Fira Code\", Monaco, Consolas, monospace;\n font-size: 0.875rem;\n line-height: 1.5;\n white-space: pre-wrap;\n word-break: break-word;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .diff-added .diff-value {\n background: #f0fff4;\n border: 1px solid #9ae6b4;\n color: #2f855a;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .diff-removed .diff-value {\n background: #fff5f5;\n border: 1px solid #fed7d7;\n color: #c53030;\n}\n.prompt-version-control .comparison-container .comparison-results .no-differences {\n text-align: center;\n padding: 3rem 1rem;\n}\n.prompt-version-control .comparison-container .comparison-results .no-differences i {\n font-size: 3rem;\n margin-bottom: 1rem;\n display: block;\n}\n.prompt-version-control .comparison-container .comparison-results .no-differences p {\n margin: 0;\n font-size: 1rem;\n}\n.prompt-version-control .details-container {\n flex: 1;\n padding: 1rem;\n overflow-y: auto;\n}\n.prompt-version-control .details-container .version-details {\n max-width: 800px;\n margin: 0 auto;\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 0.5rem;\n overflow: hidden;\n}\n.prompt-version-control .details-container .version-details .details-header {\n padding: 1.5rem;\n background: #f8f9fa;\n border-bottom: 1px solid #dee2e6;\n}\n.prompt-version-control .details-container .version-details .details-header .details-title {\n margin: 0 0 0.5rem 0;\n color: #495057;\n font-weight: 600;\n}\n.prompt-version-control .details-container .version-details .details-header .details-meta {\n display: flex;\n gap: 1rem;\n font-size: 0.875rem;\n color: #6c757d;\n flex-wrap: wrap;\n}\n.prompt-version-control .details-container .version-details .details-content {\n padding: 1.5rem;\n}\n.prompt-version-control .details-container .version-details .details-content .detail-section {\n margin-bottom: 2rem;\n}\n.prompt-version-control .details-container .version-details .details-content .detail-section:last-child {\n margin-bottom: 0;\n}\n.prompt-version-control .details-container .version-details .details-content .detail-section .section-title {\n margin: 0 0 1rem 0;\n color: #495057;\n font-weight: 600;\n font-size: 1rem;\n border-bottom: 1px solid #e9ecef;\n padding-bottom: 0.5rem;\n}\n.prompt-version-control .details-container .version-details .details-content .detail-section .detail-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 1rem;\n}\n.prompt-version-control .details-container .version-details .details-content .detail-section .detail-grid .detail-item {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n}\n.prompt-version-control .details-container .version-details .details-content .detail-section .detail-grid .detail-item .detail-label {\n font-size: 0.875rem;\n font-weight: 500;\n color: #6c757d;\n}\n.prompt-version-control .details-container .version-details .details-content .detail-section .detail-grid .detail-item .detail-value {\n font-size: 0.875rem;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n.prompt-version-control .details-container .version-details .details-content .detail-section .json-viewer .json-content,\n.prompt-version-control .details-container .version-details .details-content .detail-section .json-viewer .template-content,\n.prompt-version-control .details-container .version-details .details-content .detail-section .template-viewer .json-content,\n.prompt-version-control .details-container .version-details .details-content .detail-section .template-viewer .template-content {\n background: #f8f9fa;\n border: 1px solid #dee2e6;\n border-radius: 0.375rem;\n padding: 1rem;\n margin: 0;\n font-family: \"Fira Code\", Monaco, Consolas, monospace;\n font-size: 0.875rem;\n line-height: 1.5;\n overflow-x: auto;\n max-height: 400px;\n overflow-y: auto;\n}\n.prompt-version-control .details-container .no-selection-message {\n text-align: center;\n padding: 3rem 1rem;\n color: #6c757d;\n}\n.prompt-version-control .details-container .no-selection-message i {\n font-size: 3rem;\n margin-bottom: 1rem;\n display: block;\n opacity: 0.5;\n}\n.prompt-version-control .details-container .no-selection-message p {\n margin: 0;\n font-size: 1rem;\n line-height: 1.5;\n}\n.prompt-version-control .error-container {\n padding: 1rem;\n}\n.prompt-version-control .error-container .alert {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n@media (max-width: 1200px) {\n .prompt-version-control .version-toolbar .toolbar-section {\n min-width: 100%;\n justify-content: space-between;\n }\n .prompt-version-control .comparison-container .comparison-selectors {\n flex-direction: column;\n align-items: stretch;\n }\n .prompt-version-control .comparison-container .comparison-selectors .comparison-arrow {\n align-self: center;\n padding: 0.5rem 0;\n }\n .prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff {\n grid-template-columns: 1fr;\n gap: 0.5rem;\n }\n}\n@media (max-width: 768px) {\n .prompt-version-control .version-toolbar {\n padding: 0.75rem;\n }\n .prompt-version-control .version-toolbar .toolbar-section {\n flex-wrap: wrap;\n gap: 0.5rem;\n }\n .prompt-version-control .timeline-container {\n padding: 0.75rem;\n }\n .prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-marker {\n margin-right: 1rem;\n }\n .prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-marker .marker-icon {\n width: 2rem;\n height: 2rem;\n font-size: 0.875rem;\n }\n .prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content {\n padding: 1rem;\n }\n .prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .version-header {\n flex-direction: column;\n align-items: flex-start;\n gap: 0.75rem;\n }\n .prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .version-header .version-actions {\n align-self: flex-end;\n }\n .prompt-version-control .comparison-container,\n .prompt-version-control .details-container {\n padding: 0.75rem;\n }\n .prompt-selector-section {\n padding: 2rem;\n background: white;\n border-radius: 8px;\n margin: 1rem;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n }\n .prompt-selector-section .section-title {\n color: #495057;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-weight: 600;\n margin-bottom: 0.5rem;\n }\n .prompt-selector-section .section-title i {\n color: #007bff;\n }\n .prompt-selector-section .prompt-selector .search-box .input-group-text {\n background: #f8f9fa;\n border-color: #ced4da;\n }\n .prompt-selector-section .prompt-selector .search-box .input-group-text i {\n color: #6c757d;\n }\n .prompt-selector-section .prompt-selector .search-box .form-control {\n border-color: #ced4da;\n }\n .prompt-selector-section .prompt-selector .search-box .form-control:focus {\n border-color: #007bff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n }\n .prompt-selector-section .prompt-selector .prompts-list {\n max-height: 400px;\n overflow-y: auto;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n }\n .prompt-selector-section .prompt-selector .prompts-list .empty-state {\n text-align: center;\n padding: 2rem;\n }\n .prompt-selector-section .prompt-selector .prompts-list .empty-state i {\n font-size: 2rem;\n margin-bottom: 0.5rem;\n }\n .prompt-selector-section .prompt-selector .prompts-list .prompt-item {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0.75rem 1rem;\n border-bottom: 1px solid #dee2e6;\n cursor: pointer;\n transition: background-color 0.2s;\n }\n .prompt-selector-section .prompt-selector .prompts-list .prompt-item:last-child {\n border-bottom: none;\n }\n .prompt-selector-section .prompt-selector .prompts-list .prompt-item:hover {\n background-color: #f8f9fa;\n }\n .prompt-selector-section .prompt-selector .prompts-list .prompt-item .prompt-info {\n flex: 1;\n }\n .prompt-selector-section .prompt-selector .prompts-list .prompt-item .prompt-info .prompt-title {\n margin: 0 0 0.25rem 0;\n font-weight: 600;\n color: #495057;\n }\n .prompt-selector-section .prompt-selector .prompts-list .prompt-item .prompt-info .prompt-description {\n margin: 0;\n font-size: 0.875rem;\n color: #6c757d;\n line-height: 1.4;\n }\n .prompt-selector-section .prompt-selector .prompts-list .prompt-item .prompt-actions {\n color: #007bff;\n opacity: 0.7;\n transition: opacity 0.2s;\n }\n .prompt-selector-section .prompt-selector .prompts-list .prompt-item:hover .prompt-actions {\n opacity: 1;\n }\n}\n"] }]
1169
1167
  }], () => [{ type: i1.MJNotificationService }], { prompt: [{
1170
1168
  type: Input
1171
1169
  }], autoLoad: [{