@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.
- package/dist/AI/components/agents/agent-configuration.component.d.ts +23 -11
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +122 -95
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.js +88 -90
- package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
- package/dist/AI/components/agents/agent-filter-panel.component.js +2 -2
- package/dist/AI/components/execution-monitoring.component.d.ts +23 -10
- package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/AI/components/execution-monitoring.component.js +143 -124
- package/dist/AI/components/execution-monitoring.component.js.map +1 -1
- package/dist/AI/components/models/model-management-v2.component.d.ts +17 -13
- package/dist/AI/components/models/model-management-v2.component.d.ts.map +1 -1
- package/dist/AI/components/models/model-management-v2.component.js +248 -266
- package/dist/AI/components/models/model-management-v2.component.js.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +76 -78
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.js +2 -2
- package/dist/AI/components/prompts/prompt-management-v2.component.d.ts +17 -15
- package/dist/AI/components/prompts/prompt-management-v2.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-management-v2.component.js +372 -397
- package/dist/AI/components/prompts/prompt-management-v2.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-version-control.component.js +100 -102
- package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
- package/dist/AI/components/system/system-config-filter-panel.component.js +2 -2
- package/dist/AI/components/system/system-configuration.component.d.ts +17 -10
- package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/system/system-configuration.component.js +82 -61
- package/dist/AI/components/system/system-configuration.component.js.map +1 -1
- package/dist/AI/components/widgets/kpi-card.component.d.ts.map +1 -1
- package/dist/AI/components/widgets/kpi-card.component.js +11 -7
- package/dist/AI/components/widgets/kpi-card.component.js.map +1 -1
- package/dist/AI/index.d.ts +4 -0
- package/dist/AI/index.d.ts.map +1 -1
- package/dist/AI/index.js +6 -1
- package/dist/AI/index.js.map +1 -1
- package/dist/Actions/components/actions-list-view.component.js +9 -9
- package/dist/Actions/components/actions-list-view.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.d.ts +16 -13
- package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +62 -48
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/categories-list-view.component.js +9 -9
- package/dist/Actions/components/categories-list-view.component.js.map +1 -1
- package/dist/Actions/components/code-management.component.d.ts +17 -7
- package/dist/Actions/components/code-management.component.d.ts.map +1 -1
- package/dist/Actions/components/code-management.component.js +45 -12
- package/dist/Actions/components/code-management.component.js.map +1 -1
- package/dist/Actions/components/entity-integration.component.d.ts +17 -7
- package/dist/Actions/components/entity-integration.component.d.ts.map +1 -1
- package/dist/Actions/components/entity-integration.component.js +45 -12
- package/dist/Actions/components/entity-integration.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.d.ts +16 -10
- package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +56 -30
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/scheduled-actions.component.d.ts +17 -7
- package/dist/Actions/components/scheduled-actions.component.d.ts.map +1 -1
- package/dist/Actions/components/scheduled-actions.component.js +45 -12
- package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
- package/dist/Actions/components/security-permissions.component.d.ts +17 -7
- package/dist/Actions/components/security-permissions.component.d.ts.map +1 -1
- package/dist/Actions/components/security-permissions.component.js +45 -12
- package/dist/Actions/components/security-permissions.component.js.map +1 -1
- package/dist/Actions/index.d.ts +6 -1
- package/dist/Actions/index.d.ts.map +1 -1
- package/dist/Actions/index.js +9 -1
- package/dist/Actions/index.js.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.js +8 -8
- package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js +52 -57
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +8 -9
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +107 -0
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -0
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +553 -0
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -0
- package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.d.ts +179 -0
- package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.d.ts.map +1 -0
- package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.js +814 -0
- package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.js.map +1 -0
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts +151 -0
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -0
- package/dist/DataExplorer/components/view-selector/view-selector.component.js +480 -0
- package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -0
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +439 -0
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -0
- package/dist/DataExplorer/data-explorer-dashboard.component.js +2129 -0
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -0
- package/dist/DataExplorer/index.d.ts +5 -0
- package/dist/DataExplorer/index.d.ts.map +1 -0
- package/dist/DataExplorer/index.js +10 -0
- package/dist/DataExplorer/index.js.map +1 -0
- package/dist/DataExplorer/models/explorer-state.interface.d.ts +183 -0
- package/dist/DataExplorer/models/explorer-state.interface.d.ts.map +1 -0
- package/dist/DataExplorer/models/explorer-state.interface.js +31 -0
- package/dist/DataExplorer/models/explorer-state.interface.js.map +1 -0
- package/dist/DataExplorer/services/explorer-state.service.d.ts +232 -0
- package/dist/DataExplorer/services/explorer-state.service.d.ts.map +1 -0
- package/dist/DataExplorer/services/explorer-state.service.js +912 -0
- package/dist/DataExplorer/services/explorer-state.service.js.map +1 -0
- package/dist/EntityAdmin/components/entity-details.component.d.ts.map +1 -1
- package/dist/EntityAdmin/components/entity-details.component.js +11 -13
- package/dist/EntityAdmin/components/entity-details.component.js.map +1 -1
- package/dist/EntityAdmin/components/entity-filter-panel.component.js +2 -2
- package/dist/EntityAdmin/components/erd-composite.component.js +2 -2
- package/dist/EntityAdmin/components/erd-diagram.component.js +2 -2
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +14 -15
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts +122 -0
- package/dist/Home/home-dashboard.component.d.ts.map +1 -0
- package/dist/Home/home-dashboard.component.js +698 -0
- package/dist/Home/home-dashboard.component.js.map +1 -0
- package/dist/Scheduling/components/index.d.ts +11 -0
- package/dist/Scheduling/components/index.d.ts.map +1 -0
- package/dist/Scheduling/components/index.js +13 -0
- package/dist/Scheduling/components/index.js.map +1 -0
- package/dist/Scheduling/components/scheduling-health-resource.component.d.ts +20 -0
- package/dist/Scheduling/components/scheduling-health-resource.component.d.ts.map +1 -0
- package/dist/Scheduling/components/scheduling-health-resource.component.js +55 -0
- package/dist/Scheduling/components/scheduling-health-resource.component.js.map +1 -0
- package/dist/Scheduling/components/scheduling-health.component.js +7 -8
- package/dist/Scheduling/components/scheduling-health.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-history-resource.component.d.ts +20 -0
- package/dist/Scheduling/components/scheduling-history-resource.component.d.ts.map +1 -0
- package/dist/Scheduling/components/scheduling-history-resource.component.js +55 -0
- package/dist/Scheduling/components/scheduling-history-resource.component.js.map +1 -0
- package/dist/Scheduling/components/scheduling-history.component.js +7 -8
- package/dist/Scheduling/components/scheduling-history.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +20 -0
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -0
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js +55 -0
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -0
- package/dist/Scheduling/components/scheduling-jobs.component.js +7 -8
- package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-monitor-resource.component.d.ts +20 -0
- package/dist/Scheduling/components/scheduling-monitor-resource.component.d.ts.map +1 -0
- package/dist/Scheduling/components/scheduling-monitor-resource.component.js +55 -0
- package/dist/Scheduling/components/scheduling-monitor-resource.component.js.map +1 -0
- package/dist/Scheduling/components/scheduling-monitoring.component.js +7 -8
- package/dist/Scheduling/components/scheduling-monitoring.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-types-resource.component.d.ts +20 -0
- package/dist/Scheduling/components/scheduling-types-resource.component.d.ts.map +1 -0
- package/dist/Scheduling/components/scheduling-types-resource.component.js +55 -0
- package/dist/Scheduling/components/scheduling-types-resource.component.js.map +1 -0
- package/dist/Scheduling/components/scheduling-types.component.js +7 -8
- package/dist/Scheduling/components/scheduling-types.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.d.ts +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +3 -3
- package/dist/Testing/components/index.d.ts +11 -0
- package/dist/Testing/components/index.d.ts.map +1 -0
- package/dist/Testing/components/index.js +13 -0
- package/dist/Testing/components/index.js.map +1 -0
- package/dist/Testing/components/testing-analytics-resource.component.d.ts +20 -0
- package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-analytics-resource.component.js +55 -0
- package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -0
- package/dist/Testing/components/testing-execution-resource.component.d.ts +20 -0
- package/dist/Testing/components/testing-execution-resource.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-execution-resource.component.js +55 -0
- package/dist/Testing/components/testing-execution-resource.component.js.map +1 -0
- package/dist/Testing/components/testing-execution.component.js +3 -3
- package/dist/Testing/components/testing-execution.component.js.map +1 -1
- package/dist/Testing/components/testing-feedback-resource.component.d.ts +20 -0
- package/dist/Testing/components/testing-feedback-resource.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-feedback-resource.component.js +55 -0
- package/dist/Testing/components/testing-feedback-resource.component.js.map +1 -0
- package/dist/Testing/components/testing-overview-resource.component.d.ts +20 -0
- package/dist/Testing/components/testing-overview-resource.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-overview-resource.component.js +55 -0
- package/dist/Testing/components/testing-overview-resource.component.js.map +1 -0
- package/dist/Testing/components/testing-version-resource.component.d.ts +20 -0
- package/dist/Testing/components/testing-version-resource.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-version-resource.component.js +55 -0
- package/dist/Testing/components/testing-version-resource.component.js.map +1 -0
- package/dist/Testing/testing-dashboard.component.d.ts +1 -1
- package/dist/Testing/testing-dashboard.component.js +23 -25
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/module.d.ts +83 -66
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +137 -19
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +6 -4
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +41 -13
- package/dist/public-api.js.map +1 -1
- package/package.json +17 -14
- package/dist/AI/ai-dashboard.component.d.ts +0 -62
- package/dist/AI/ai-dashboard.component.d.ts.map +0 -1
- package/dist/AI/ai-dashboard.component.js +0 -338
- package/dist/AI/ai-dashboard.component.js.map +0 -1
- package/dist/Actions/actions-management-dashboard.component.d.ts +0 -52
- package/dist/Actions/actions-management-dashboard.component.d.ts.map +0 -1
- package/dist/Actions/actions-management-dashboard.component.js +0 -308
- package/dist/Actions/actions-management-dashboard.component.js.map +0 -1
- package/dist/generic/base-dashboard.d.ts +0 -65
- package/dist/generic/base-dashboard.d.ts.map +0 -1
- package/dist/generic/base-dashboard.js +0 -74
- 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 "@
|
|
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)
|
|
88
|
-
i0.ɵɵ
|
|
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(
|
|
96
|
-
i0.ɵɵ
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
160
|
-
i0.ɵɵrepeaterCreate(2, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_For_2_Conditional_23_For_3_Template, 5, 2, "div",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
182
|
+
i0.ɵɵelementStart(14, "span", 75);
|
|
185
183
|
i0.ɵɵtext(15);
|
|
186
184
|
i0.ɵɵelementEnd();
|
|
187
|
-
i0.ɵɵelementStart(16, "span",
|
|
185
|
+
i0.ɵɵelementStart(16, "span", 76);
|
|
188
186
|
i0.ɵɵtext(17);
|
|
189
187
|
i0.ɵɵelementEnd()()();
|
|
190
|
-
i0.ɵɵelementStart(18, "div",
|
|
191
|
-
i0.ɵɵtemplate(19, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_For_2_Conditional_19_Template, 2, 0, "button",
|
|
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",
|
|
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",
|
|
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 ɵ$
|
|
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(ɵ$
|
|
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 && ɵ$
|
|
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",
|
|
230
|
-
i0.ɵɵrepeaterCreate(1, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_For_2_Template, 24, 24, "div",
|
|
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",
|
|
244
|
-
i0.ɵɵelement(1, "i",
|
|
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",
|
|
257
|
-
i0.ɵɵtemplate(1, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_0_Conditional_1_Template, 3, 0, "div",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
330
|
+
i0.ɵɵelementStart(7, "div", 117)(8, "h6", 114);
|
|
333
331
|
i0.ɵɵtext(9, "After:");
|
|
334
332
|
i0.ɵɵelementEnd();
|
|
335
|
-
i0.ɵɵelementStart(10, "div",
|
|
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",
|
|
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",
|
|
344
|
+
i0.ɵɵelementStart(0, "div", 111)(1, "h6", 114);
|
|
347
345
|
i0.ɵɵtext(2, "Added:");
|
|
348
346
|
i0.ɵɵelementEnd();
|
|
349
|
-
i0.ɵɵelementStart(3, "div",
|
|
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",
|
|
357
|
+
i0.ɵɵelementStart(0, "div", 112)(1, "h6", 114);
|
|
360
358
|
i0.ɵɵtext(2, "Removed:");
|
|
361
359
|
i0.ɵɵelementEnd();
|
|
362
|
-
i0.ɵɵelementStart(3, "div",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
381
|
-
i0.ɵɵtemplate(9, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_7_For_2_Conditional_9_Template, 13, 2, "div",
|
|
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",
|
|
399
|
-
i0.ɵɵrepeaterCreate(1, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_1_Conditional_16_Conditional_7_For_2_Template, 12, 12, "div",
|
|
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",
|
|
408
|
-
i0.ɵɵelement(1, "i",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
440
|
+
i0.ɵɵelementStart(8, "div", 96);
|
|
443
441
|
i0.ɵɵelement(9, "i", 21);
|
|
444
442
|
i0.ɵɵelementEnd();
|
|
445
|
-
i0.ɵɵelementStart(10, "div",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
499
|
+
i0.ɵɵelementStart(8, "span", 75);
|
|
502
500
|
i0.ɵɵtext(9);
|
|
503
501
|
i0.ɵɵelementEnd()()();
|
|
504
|
-
i0.ɵɵelementStart(10, "div",
|
|
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",
|
|
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",
|
|
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",
|
|
512
|
+
i0.ɵɵelementStart(21, "div", 128)(22, "span", 129);
|
|
515
513
|
i0.ɵɵtext(23, "Source:");
|
|
516
514
|
i0.ɵɵelementEnd();
|
|
517
|
-
i0.ɵɵelementStart(24, "span",
|
|
515
|
+
i0.ɵɵelementStart(24, "span", 130);
|
|
518
516
|
i0.ɵɵtext(25);
|
|
519
517
|
i0.ɵɵelementEnd()();
|
|
520
|
-
i0.ɵɵelementStart(26, "div",
|
|
518
|
+
i0.ɵɵelementStart(26, "div", 128)(27, "span", 129);
|
|
521
519
|
i0.ɵɵtext(28, "Description:");
|
|
522
520
|
i0.ɵɵelementEnd();
|
|
523
|
-
i0.ɵɵelementStart(29, "span",
|
|
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",
|
|
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",
|
|
551
|
-
i0.ɵɵelement(1, "i",
|
|
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",
|
|
558
|
-
i0.ɵɵtemplate(1, PromptVersionControlComponent_Conditional_2_Conditional_51_Conditional_2_Conditional_1_Template, 33, 13, "div",
|
|
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",
|
|
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",
|
|
578
|
-
i0.ɵɵelement(2, "i",
|
|
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",
|
|
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,
|
|
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"], [
|
|
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: [{
|